From e85e7c2ccff48171ed8dc175a4a1cf24ad87d305 Mon Sep 17 00:00:00 2001 From: "chengyan.ts" Date: Wed, 29 Jul 2026 15:29:33 +0800 Subject: [PATCH 1/2] feat: Add an agentic trajectory detail page to the dashboard --- areno/dashboard/dist/assets/index-DF61sRZi.js | 197 --------- .../{index-CIfovKBG.css => index-bundle.css} | 2 +- areno/dashboard/dist/assets/index-bundle.js | 131 ++++++ areno/dashboard/dist/index.html | 4 +- areno/dashboard/server.py | 119 ++++++ dashboard/src/main.jsx | 278 ++++++++++++- dashboard/src/styles.css | 294 ++++++++++++++ tests/test_dashboard_api.py | 380 ++++++++++++++++++ tests/test_dashboard_trajectory.py | 256 ++++++++++++ 9 files changed, 1452 insertions(+), 209 deletions(-) delete mode 100644 areno/dashboard/dist/assets/index-DF61sRZi.js rename areno/dashboard/dist/assets/{index-CIfovKBG.css => index-bundle.css} (63%) create mode 100644 areno/dashboard/dist/assets/index-bundle.js create mode 100644 tests/test_dashboard_api.py create mode 100644 tests/test_dashboard_trajectory.py diff --git a/areno/dashboard/dist/assets/index-DF61sRZi.js b/areno/dashboard/dist/assets/index-DF61sRZi.js deleted file mode 100644 index f2cf5a86..00000000 --- a/areno/dashboard/dist/assets/index-DF61sRZi.js +++ /dev/null @@ -1,197 +0,0 @@ -(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))u(s);new MutationObserver(s=>{for(const h of s)if(h.type==="childList")for(const f of h.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&u(f)}).observe(document,{childList:!0,subtree:!0});function r(s){const h={};return s.integrity&&(h.integrity=s.integrity),s.referrerPolicy&&(h.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?h.credentials="include":s.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function u(s){if(s.ep)return;s.ep=!0;const h=r(s);fetch(s.href,h)}})();function Hp(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Oo={exports:{}},Ma={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Rm;function p0(){if(Rm)return Ma;Rm=1;var n=Symbol.for("react.transitional.element"),a=Symbol.for("react.fragment");function r(u,s,h){var f=null;if(h!==void 0&&(f=""+h),s.key!==void 0&&(f=""+s.key),"key"in s){h={};for(var m in s)m!=="key"&&(h[m]=s[m])}else h=s;return s=h.ref,{$$typeof:n,type:u,key:f,ref:s!==void 0?s:null,props:h}}return Ma.Fragment=a,Ma.jsx=r,Ma.jsxs=r,Ma}var Lm;function g0(){return Lm||(Lm=1,Oo.exports=p0()),Oo.exports}var k=g0(),jo={exports:{}},_e={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Bm;function y0(){if(Bm)return _e;Bm=1;var n=Symbol.for("react.transitional.element"),a=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),u=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),h=Symbol.for("react.consumer"),f=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),x=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),v=Symbol.iterator;function S(T){return T===null||typeof T!="object"?null:(T=v&&T[v]||T["@@iterator"],typeof T=="function"?T:null)}var C={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},U=Object.assign,V={};function O(T,q,_){this.props=T,this.context=q,this.refs=V,this.updater=_||C}O.prototype.isReactComponent={},O.prototype.setState=function(T,q){if(typeof T!="object"&&typeof T!="function"&&T!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,T,q,"setState")},O.prototype.forceUpdate=function(T){this.updater.enqueueForceUpdate(this,T,"forceUpdate")};function K(){}K.prototype=O.prototype;function X(T,q,_){this.props=T,this.context=q,this.refs=V,this.updater=_||C}var ae=X.prototype=new K;ae.constructor=X,U(ae,O.prototype),ae.isPureReactComponent=!0;var ee=Array.isArray;function L(){}var J={H:null,A:null,T:null,S:null},he=Object.prototype.hasOwnProperty;function xe(T,q,_){var te=_.ref;return{$$typeof:n,type:T,key:q,ref:te!==void 0?te:null,props:_}}function R(T,q){return xe(T.type,q,T.props)}function ne(T){return typeof T=="object"&&T!==null&&T.$$typeof===n}function le(T){var q={"=":"=0",":":"=2"};return"$"+T.replace(/[=:]/g,function(_){return q[_]})}var Ce=/\/+/g;function ue(T,q){return typeof T=="object"&&T!==null&&T.key!=null?le(""+T.key):q.toString(36)}function $(T){switch(T.status){case"fulfilled":return T.value;case"rejected":throw T.reason;default:switch(typeof T.status=="string"?T.then(L,L):(T.status="pending",T.then(function(q){T.status==="pending"&&(T.status="fulfilled",T.value=q)},function(q){T.status==="pending"&&(T.status="rejected",T.reason=q)})),T.status){case"fulfilled":return T.value;case"rejected":throw T.reason}}throw T}function D(T,q,_,te,fe){var oe=typeof T;(oe==="undefined"||oe==="boolean")&&(T=null);var we=!1;if(T===null)we=!0;else switch(oe){case"bigint":case"string":case"number":we=!0;break;case"object":switch(T.$$typeof){case n:case a:we=!0;break;case x:return we=T._init,D(we(T._payload),q,_,te,fe)}}if(we)return fe=fe(T),we=te===""?"."+ue(T,0):te,ee(fe)?(_="",we!=null&&(_=we.replace(Ce,"$&/")+"/"),D(fe,q,_,"",function(zt){return zt})):fe!=null&&(ne(fe)&&(fe=R(fe,_+(fe.key==null||T&&T.key===fe.key?"":(""+fe.key).replace(Ce,"$&/")+"/")+we)),q.push(fe)),1;we=0;var Ie=te===""?".":te+":";if(ee(T))for(var Ye=0;Ye>>1,E=D[Se];if(0>>1;Ses(_,ie))tes(fe,_)?(D[Se]=fe,D[te]=ie,Se=te):(D[Se]=_,D[q]=ie,Se=q);else if(tes(fe,ie))D[Se]=fe,D[te]=ie,Se=te;else break e}}return F}function s(D,F){var ie=D.sortIndex-F.sortIndex;return ie!==0?ie:D.id-F.id}if(n.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var h=performance;n.unstable_now=function(){return h.now()}}else{var f=Date,m=f.now();n.unstable_now=function(){return f.now()-m}}var p=[],d=[],x=1,y=null,v=3,S=!1,C=!1,U=!1,V=!1,O=typeof setTimeout=="function"?setTimeout:null,K=typeof clearTimeout=="function"?clearTimeout:null,X=typeof setImmediate<"u"?setImmediate:null;function ae(D){for(var F=r(d);F!==null;){if(F.callback===null)u(d);else if(F.startTime<=D)u(d),F.sortIndex=F.expirationTime,a(p,F);else break;F=r(d)}}function ee(D){if(U=!1,ae(D),!C)if(r(p)!==null)C=!0,L||(L=!0,le());else{var F=r(d);F!==null&&$(ee,F.startTime-D)}}var L=!1,J=-1,he=5,xe=-1;function R(){return V?!0:!(n.unstable_now()-xeD&&R());){var Se=y.callback;if(typeof Se=="function"){y.callback=null,v=y.priorityLevel;var E=Se(y.expirationTime<=D);if(D=n.unstable_now(),typeof E=="function"){y.callback=E,ae(D),F=!0;break t}y===r(p)&&u(p),ae(D)}else u(p);y=r(p)}if(y!==null)F=!0;else{var T=r(d);T!==null&&$(ee,T.startTime-D),F=!1}}break e}finally{y=null,v=ie,S=!1}F=void 0}}finally{F?le():L=!1}}}var le;if(typeof X=="function")le=function(){X(ne)};else if(typeof MessageChannel<"u"){var Ce=new MessageChannel,ue=Ce.port2;Ce.port1.onmessage=ne,le=function(){ue.postMessage(null)}}else le=function(){O(ne,0)};function $(D,F){J=O(function(){D(n.unstable_now())},F)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(D){D.callback=null},n.unstable_forceFrameRate=function(D){0>D||125Se?(D.sortIndex=ie,a(d,D),r(p)===null&&D===r(d)&&(U?(K(J),J=-1):U=!0,$(ee,ie-Se))):(D.sortIndex=E,a(p,D),C||S||(C=!0,L||(L=!0,le()))),D},n.unstable_shouldYield=R,n.unstable_wrapCallback=function(D){var F=v;return function(){var ie=v;v=F;try{return D.apply(this,arguments)}finally{v=ie}}}})(Bo)),Bo}var qm;function b0(){return qm||(qm=1,Lo.exports=x0()),Lo.exports}var Uo={exports:{}},St={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ym;function v0(){if(Ym)return St;Ym=1;var n=ys();function a(p){var d="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(a){console.error(a)}}return n(),Uo.exports=v0(),Uo.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Vm;function k0(){if(Vm)return Na;Vm=1;var n=b0(),a=ys(),r=S0();function u(e){var t="https://react.dev/errors/"+e;if(1E||(e.current=Se[E],Se[E]=null,E--)}function _(e,t){E++,Se[E]=e.current,e.current=t}var te=T(null),fe=T(null),oe=T(null),we=T(null);function Ie(e,t){switch(_(oe,t),_(fe,e),_(te,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?im(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=im(t),e=am(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}q(te),_(te,e)}function Ye(){q(te),q(fe),q(oe)}function zt(e){e.memoizedState!==null&&_(we,e);var t=te.current,l=am(t,e.type);t!==l&&(_(fe,e),_(te,l))}function Kt(e){fe.current===e&&(q(te),q(fe)),we.current===e&&(q(we),Ta._currentValue=ie)}var Yn,bl;function rn(e){if(Yn===void 0)try{throw Error()}catch(l){var t=l.stack.trim().match(/\n( *(at )?)/);Yn=t&&t[1]||"",bl=-1)":-1c||A[i]!==N[c]){var H=` -`+A[i].replace(" at new "," at ");return e.displayName&&H.includes("")&&(H=H.replace("",e.displayName)),H}while(1<=i&&0<=c);break}}}finally{Gn=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?rn(l):""}function Ql(e,t){switch(e.tag){case 26:case 27:case 5:return rn(e.type);case 16:return rn("Lazy");case 13:return e.child!==t&&t!==null?rn("Suspense Fallback"):rn("Suspense");case 19:return rn("SuspenseList");case 0:case 15:return Vn(e.type,!1);case 11:return Vn(e.type.render,!1);case 1:return Vn(e.type,!0);case 31:return rn("Activity");default:return""}}function Qn(e){try{var t="",l=null;do t+=Ql(e,l),l=e,e=e.return;while(e);return t}catch(i){return` -Error generating stack: `+i.message+` -`+i.stack}}var fn=Object.prototype.hasOwnProperty,vn=n.unstable_scheduleCallback,vl=n.unstable_cancelCallback,Li=n.unstable_shouldYield,Bi=n.unstable_requestPaint,mt=n.unstable_now,Ui=n.unstable_getCurrentPriorityLevel,Y=n.unstable_ImmediatePriority,W=n.unstable_UserBlockingPriority,ge=n.unstable_NormalPriority,ze=n.unstable_LowPriority,Be=n.unstable_IdlePriority,vt=n.log,P=n.unstable_setDisableYieldValue,Z=null,ve=null;function de(e){if(typeof vt=="function"&&P(e),ve&&typeof ve.setStrictMode=="function")try{ve.setStrictMode(Z,e)}catch{}}var Ee=Math.clz32?Math.clz32:bu,et=Math.log,Bt=Math.LN2;function bu(e){return e>>>=0,e===0?32:31-(et(e)/Bt|0)|0}var hn=256,Xn=262144,Xl=4194304;function dn(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Sl(e,t,l){var i=e.pendingLanes;if(i===0)return 0;var c=0,o=e.suspendedLanes,g=e.pingedLanes;e=e.warmLanes;var b=i&134217727;return b!==0?(i=b&~o,i!==0?c=dn(i):(g&=b,g!==0?c=dn(g):l||(l=b&~e,l!==0&&(c=dn(l))))):(b=i&~o,b!==0?c=dn(b):g!==0?c=dn(g):l||(l=i&~e,l!==0&&(c=dn(l)))),c===0?0:t!==0&&t!==c&&(t&o)===0&&(o=c&-c,l=t&-t,o>=l||o===32&&(l&4194048)!==0)?t:c}function Hi(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function ny(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Us(){var e=Xl;return Xl<<=1,(Xl&62914560)===0&&(Xl=4194304),e}function vu(e){for(var t=[],l=0;31>l;l++)t.push(e);return t}function qi(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ly(e,t,l,i,c,o){var g=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var b=e.entanglements,A=e.expirationTimes,N=e.hiddenUpdates;for(l=g&~l;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var oy=/[\n"\\]/g;function Jt(e){return e.replace(oy,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Tu(e,t,l,i,c,o,g,b){e.name="",g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"?e.type=g:e.removeAttribute("type"),t!=null?g==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Ft(t)):e.value!==""+Ft(t)&&(e.value=""+Ft(t)):g!=="submit"&&g!=="reset"||e.removeAttribute("value"),t!=null?zu(e,g,Ft(t)):l!=null?zu(e,g,Ft(l)):i!=null&&e.removeAttribute("value"),c==null&&o!=null&&(e.defaultChecked=!!o),c!=null&&(e.checked=c&&typeof c!="function"&&typeof c!="symbol"),b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"?e.name=""+Ft(b):e.removeAttribute("name")}function $s(e,t,l,i,c,o,g,b){if(o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"&&(e.type=o),t!=null||l!=null){if(!(o!=="submit"&&o!=="reset"||t!=null)){Au(e);return}l=l!=null?""+Ft(l):"",t=t!=null?""+Ft(t):l,b||t===e.value||(e.value=t),e.defaultValue=t}i=i??c,i=typeof i!="function"&&typeof i!="symbol"&&!!i,e.checked=b?e.checked:!!i,e.defaultChecked=!!i,g!=null&&typeof g!="function"&&typeof g!="symbol"&&typeof g!="boolean"&&(e.name=g),Au(e)}function zu(e,t,l){t==="number"&&Za(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function $l(e,t,l,i){if(e=e.options,t){t={};for(var c=0;c"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Du=!1;if(_n)try{var Qi={};Object.defineProperty(Qi,"passive",{get:function(){Du=!0}}),window.addEventListener("test",Qi,Qi),window.removeEventListener("test",Qi,Qi)}catch{Du=!1}var Kn=null,Ou=null,Fa=null;function af(){if(Fa)return Fa;var e,t=Ou,l=t.length,i,c="value"in Kn?Kn.value:Kn.textContent,o=c.length;for(e=0;e=Ki),ff=" ",hf=!1;function df(e,t){switch(e){case"keyup":return By.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function mf(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var ti=!1;function Hy(e,t){switch(e){case"compositionend":return mf(t);case"keypress":return t.which!==32?null:(hf=!0,ff);case"textInput":return e=t.data,e===ff&&hf?null:e;default:return null}}function qy(e,t){if(ti)return e==="compositionend"||!Uu&&df(e,t)?(e=af(),Fa=Ou=Kn=null,ti=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:l,offset:t-e};e=i}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=kf(l)}}function Ef(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ef(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Af(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Za(e.document);t instanceof e.HTMLIFrameElement;){try{var l=typeof t.contentWindow.location.href=="string"}catch{l=!1}if(l)e=t.contentWindow;else break;t=Za(e.document)}return t}function Yu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Fy=_n&&"documentMode"in document&&11>=document.documentMode,ni=null,Gu=null,$i=null,Vu=!1;function Tf(e,t,l){var i=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Vu||ni==null||ni!==Za(i)||(i=ni,"selectionStart"in i&&Yu(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}),$i&&Ii($i,i)||($i=i,i=Yr(Gu,"onSelect"),0>=g,c-=g,mn=1<<32-Ee(t)+c|l<Te?(je=ce,ce=null):je=ce.sibling;var He=j(w,ce,M[Te],G);if(He===null){ce===null&&(ce=je);break}e&&ce&&He.alternate===null&&t(w,ce),z=o(He,z,Te),Ue===null?se=He:Ue.sibling=He,Ue=He,ce=je}if(Te===M.length)return l(w,ce),Re&&An(w,Te),se;if(ce===null){for(;TeTe?(je=ce,ce=null):je=ce.sibling;var pl=j(w,ce,He.value,G);if(pl===null){ce===null&&(ce=je);break}e&&ce&&pl.alternate===null&&t(w,ce),z=o(pl,z,Te),Ue===null?se=pl:Ue.sibling=pl,Ue=pl,ce=je}if(He.done)return l(w,ce),Re&&An(w,Te),se;if(ce===null){for(;!He.done;Te++,He=M.next())He=Q(w,He.value,G),He!==null&&(z=o(He,z,Te),Ue===null?se=He:Ue.sibling=He,Ue=He);return Re&&An(w,Te),se}for(ce=i(ce);!He.done;Te++,He=M.next())He=B(ce,w,Te,He.value,G),He!==null&&(e&&He.alternate!==null&&ce.delete(He.key===null?Te:He.key),z=o(He,z,Te),Ue===null?se=He:Ue.sibling=He,Ue=He);return e&&ce.forEach(function(m0){return t(w,m0)}),Re&&An(w,Te),se}function Ze(w,z,M,G){if(typeof M=="object"&&M!==null&&M.type===U&&M.key===null&&(M=M.props.children),typeof M=="object"&&M!==null){switch(M.$$typeof){case S:e:{for(var se=M.key;z!==null;){if(z.key===se){if(se=M.type,se===U){if(z.tag===7){l(w,z.sibling),G=c(z,M.props.children),G.return=w,w=G;break e}}else if(z.elementType===se||typeof se=="object"&&se!==null&&se.$$typeof===he&&Dl(se)===z.type){l(w,z.sibling),G=c(z,M.props),la(G,M),G.return=w,w=G;break e}l(w,z);break}else t(w,z);z=z.sibling}M.type===U?(G=zl(M.props.children,w.mode,G,M.key),G.return=w,w=G):(G=ir(M.type,M.key,M.props,null,w.mode,G),la(G,M),G.return=w,w=G)}return g(w);case C:e:{for(se=M.key;z!==null;){if(z.key===se)if(z.tag===4&&z.stateNode.containerInfo===M.containerInfo&&z.stateNode.implementation===M.implementation){l(w,z.sibling),G=c(z,M.children||[]),G.return=w,w=G;break e}else{l(w,z);break}else t(w,z);z=z.sibling}G=Iu(M,w.mode,G),G.return=w,w=G}return g(w);case he:return M=Dl(M),Ze(w,z,M,G)}if($(M))return re(w,z,M,G);if(le(M)){if(se=le(M),typeof se!="function")throw Error(u(150));return M=se.call(M),ye(w,z,M,G)}if(typeof M.then=="function")return Ze(w,z,fr(M),G);if(M.$$typeof===X)return Ze(w,z,ur(w,M),G);hr(w,M)}return typeof M=="string"&&M!==""||typeof M=="number"||typeof M=="bigint"?(M=""+M,z!==null&&z.tag===6?(l(w,z.sibling),G=c(z,M),G.return=w,w=G):(l(w,z),G=Ju(M,w.mode,G),G.return=w,w=G),g(w)):l(w,z)}return function(w,z,M,G){try{na=0;var se=Ze(w,z,M,G);return di=null,se}catch(ce){if(ce===hi||ce===or)throw ce;var Ue=Ht(29,ce,null,w.mode);return Ue.lanes=G,Ue.return=w,Ue}finally{}}}var jl=Jf(!0),If=Jf(!1),Wn=!1;function cc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function oc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Pn(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function el(e,t,l){var i=e.updateQueue;if(i===null)return null;if(i=i.shared,(qe&2)!==0){var c=i.pending;return c===null?t.next=t:(t.next=c.next,c.next=t),i.pending=t,t=lr(e),Of(e,null,l),t}return nr(e,i,t,l),lr(e)}function ia(e,t,l){if(t=t.updateQueue,t!==null&&(t=t.shared,(l&4194048)!==0)){var i=t.lanes;i&=e.pendingLanes,l|=i,t.lanes=l,qs(e,l)}}function sc(e,t){var l=e.updateQueue,i=e.alternate;if(i!==null&&(i=i.updateQueue,l===i)){var c=null,o=null;if(l=l.firstBaseUpdate,l!==null){do{var g={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};o===null?c=o=g:o=o.next=g,l=l.next}while(l!==null);o===null?c=o=t:o=o.next=t}else c=o=t;l={baseState:i.baseState,firstBaseUpdate:c,lastBaseUpdate:o,shared:i.shared,callbacks:i.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=t:e.next=t,l.lastBaseUpdate=t}var fc=!1;function aa(){if(fc){var e=fi;if(e!==null)throw e}}function ra(e,t,l,i){fc=!1;var c=e.updateQueue;Wn=!1;var o=c.firstBaseUpdate,g=c.lastBaseUpdate,b=c.shared.pending;if(b!==null){c.shared.pending=null;var A=b,N=A.next;A.next=null,g===null?o=N:g.next=N,g=A;var H=e.alternate;H!==null&&(H=H.updateQueue,b=H.lastBaseUpdate,b!==g&&(b===null?H.firstBaseUpdate=N:b.next=N,H.lastBaseUpdate=A))}if(o!==null){var Q=c.baseState;g=0,H=N=A=null,b=o;do{var j=b.lane&-536870913,B=j!==b.lane;if(B?(Oe&j)===j:(i&j)===j){j!==0&&j===si&&(fc=!0),H!==null&&(H=H.next={lane:0,tag:b.tag,payload:b.payload,callback:null,next:null});e:{var re=e,ye=b;j=t;var Ze=l;switch(ye.tag){case 1:if(re=ye.payload,typeof re=="function"){Q=re.call(Ze,Q,j);break e}Q=re;break e;case 3:re.flags=re.flags&-65537|128;case 0:if(re=ye.payload,j=typeof re=="function"?re.call(Ze,Q,j):re,j==null)break e;Q=y({},Q,j);break e;case 2:Wn=!0}}j=b.callback,j!==null&&(e.flags|=64,B&&(e.flags|=8192),B=c.callbacks,B===null?c.callbacks=[j]:B.push(j))}else B={lane:j,tag:b.tag,payload:b.payload,callback:b.callback,next:null},H===null?(N=H=B,A=Q):H=H.next=B,g|=j;if(b=b.next,b===null){if(b=c.shared.pending,b===null)break;B=b,b=B.next,B.next=null,c.lastBaseUpdate=B,c.shared.pending=null}}while(!0);H===null&&(A=Q),c.baseState=A,c.firstBaseUpdate=N,c.lastBaseUpdate=H,o===null&&(c.shared.lanes=0),al|=g,e.lanes=g,e.memoizedState=Q}}function $f(e,t){if(typeof e!="function")throw Error(u(191,e));e.call(t)}function Wf(e,t){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;eo?o:8;var g=D.T,b={};D.T=b,Mc(e,!1,t,l);try{var A=c(),N=D.S;if(N!==null&&N(b,A),A!==null&&typeof A=="object"&&typeof A.then=="function"){var H=l1(A,i);oa(e,t,H,Qt(e))}else oa(e,t,i,Qt(e))}catch(Q){oa(e,t,{then:function(){},status:"rejected",reason:Q},Qt())}finally{F.p=o,g!==null&&b.types!==null&&(g.types=b.types),D.T=g}}function o1(){}function Cc(e,t,l,i){if(e.tag!==5)throw Error(u(476));var c=Mh(e).queue;wh(e,c,t,ie,l===null?o1:function(){return Nh(e),l(i)})}function Mh(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ie,baseState:ie,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wn,lastRenderedState:ie},next:null};var l={};return t.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wn,lastRenderedState:l},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Nh(e){var t=Mh(e);t.next===null&&(t=e.alternate.memoizedState),oa(e,t.next.queue,{},Qt())}function wc(){return yt(Ta)}function Dh(){return it().memoizedState}function Oh(){return it().memoizedState}function s1(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var l=Qt();e=Pn(l);var i=el(t,e,l);i!==null&&(jt(i,t,l),ia(i,t,l)),t={cache:ic()},e.payload=t;return}t=t.return}}function f1(e,t,l){var i=Qt();l={lane:i,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},kr(e)?Rh(t,l):(l=Ku(e,t,l,i),l!==null&&(jt(l,e,i),Lh(l,t,i)))}function jh(e,t,l){var i=Qt();oa(e,t,l,i)}function oa(e,t,l,i){var c={lane:i,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(kr(e))Rh(t,c);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var g=t.lastRenderedState,b=o(g,l);if(c.hasEagerState=!0,c.eagerState=b,Ut(b,g))return nr(e,t,c,0),Ke===null&&tr(),!1}catch{}finally{}if(l=Ku(e,t,c,i),l!==null)return jt(l,e,i),Lh(l,t,i),!0}return!1}function Mc(e,t,l,i){if(i={lane:2,revertLane:co(),gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},kr(e)){if(t)throw Error(u(479))}else t=Ku(e,l,i,2),t!==null&&jt(t,e,2)}function kr(e){var t=e.alternate;return e===Ae||t!==null&&t===Ae}function Rh(e,t){pi=pr=!0;var l=e.pending;l===null?t.next=t:(t.next=l.next,l.next=t),e.pending=t}function Lh(e,t,l){if((l&4194048)!==0){var i=t.lanes;i&=e.pendingLanes,l|=i,t.lanes=l,qs(e,l)}}var sa={readContext:yt,use:xr,useCallback:tt,useContext:tt,useEffect:tt,useImperativeHandle:tt,useLayoutEffect:tt,useInsertionEffect:tt,useMemo:tt,useReducer:tt,useRef:tt,useState:tt,useDebugValue:tt,useDeferredValue:tt,useTransition:tt,useSyncExternalStore:tt,useId:tt,useHostTransitionStatus:tt,useFormState:tt,useActionState:tt,useOptimistic:tt,useMemoCache:tt,useCacheRefresh:tt};sa.useEffectEvent=tt;var Bh={readContext:yt,use:xr,useCallback:function(e,t){return At().memoizedState=[e,t===void 0?null:t],e},useContext:yt,useEffect:vh,useImperativeHandle:function(e,t,l){l=l!=null?l.concat([e]):null,vr(4194308,4,Eh.bind(null,t,e),l)},useLayoutEffect:function(e,t){return vr(4194308,4,e,t)},useInsertionEffect:function(e,t){vr(4,2,e,t)},useMemo:function(e,t){var l=At();t=t===void 0?null:t;var i=e();if(Rl){de(!0);try{e()}finally{de(!1)}}return l.memoizedState=[i,t],i},useReducer:function(e,t,l){var i=At();if(l!==void 0){var c=l(t);if(Rl){de(!0);try{l(t)}finally{de(!1)}}}else c=t;return i.memoizedState=i.baseState=c,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:c},i.queue=e,e=e.dispatch=f1.bind(null,Ae,e),[i.memoizedState,e]},useRef:function(e){var t=At();return e={current:e},t.memoizedState=e},useState:function(e){e=_c(e);var t=e.queue,l=jh.bind(null,Ae,t);return t.dispatch=l,[e.memoizedState,l]},useDebugValue:Tc,useDeferredValue:function(e,t){var l=At();return zc(l,e,t)},useTransition:function(){var e=_c(!1);return e=wh.bind(null,Ae,e.queue,!0,!1),At().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,l){var i=Ae,c=At();if(Re){if(l===void 0)throw Error(u(407));l=l()}else{if(l=t(),Ke===null)throw Error(u(349));(Oe&127)!==0||ih(i,t,l)}c.memoizedState=l;var o={value:l,getSnapshot:t};return c.queue=o,vh(rh.bind(null,i,o,e),[e]),i.flags|=2048,yi(9,{destroy:void 0},ah.bind(null,i,o,l,t),null),l},useId:function(){var e=At(),t=Ke.identifierPrefix;if(Re){var l=pn,i=mn;l=(i&~(1<<32-Ee(i)-1)).toString(32)+l,t="_"+t+"R_"+l,l=gr++,0<\/script>",o=o.removeChild(o.firstChild);break;case"select":o=typeof i.is=="string"?g.createElement("select",{is:i.is}):g.createElement("select"),i.multiple?o.multiple=!0:i.size&&(o.size=i.size);break;default:o=typeof i.is=="string"?g.createElement(c,{is:i.is}):g.createElement(c)}}o[pt]=t,o[Ct]=i;e:for(g=t.child;g!==null;){if(g.tag===5||g.tag===6)o.appendChild(g.stateNode);else if(g.tag!==4&&g.tag!==27&&g.child!==null){g.child.return=g,g=g.child;continue}if(g===t)break e;for(;g.sibling===null;){if(g.return===null||g.return===t)break e;g=g.return}g.sibling.return=g.return,g=g.sibling}t.stateNode=o;e:switch(bt(o,c,i),c){case"button":case"input":case"select":case"textarea":i=!!i.autoFocus;break e;case"img":i=!0;break e;default:i=!1}i&&Nn(t)}}return We(t),Qc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,l),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==i&&Nn(t);else{if(typeof i!="string"&&t.stateNode===null)throw Error(u(166));if(e=oe.current,ci(t)){if(e=t.stateNode,l=t.memoizedProps,i=null,c=gt,c!==null)switch(c.tag){case 27:case 5:i=c.memoizedProps}e[pt]=t,e=!!(e.nodeValue===l||i!==null&&i.suppressHydrationWarning===!0||nm(e.nodeValue,l)),e||In(t,!0)}else e=Gr(e).createTextNode(i),e[pt]=t,t.stateNode=e}return We(t),null;case 31:if(l=t.memoizedState,e===null||e.memoizedState!==null){if(i=ci(t),l!==null){if(e===null){if(!i)throw Error(u(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(u(557));e[pt]=t}else Cl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;We(t),e=!1}else l=ec(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return t.flags&256?(Yt(t),t):(Yt(t),null);if((t.flags&128)!==0)throw Error(u(558))}return We(t),null;case 13:if(i=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(c=ci(t),i!==null&&i.dehydrated!==null){if(e===null){if(!c)throw Error(u(318));if(c=t.memoizedState,c=c!==null?c.dehydrated:null,!c)throw Error(u(317));c[pt]=t}else Cl(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;We(t),c=!1}else c=ec(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=c),c=!0;if(!c)return t.flags&256?(Yt(t),t):(Yt(t),null)}return Yt(t),(t.flags&128)!==0?(t.lanes=l,t):(l=i!==null,e=e!==null&&e.memoizedState!==null,l&&(i=t.child,c=null,i.alternate!==null&&i.alternate.memoizedState!==null&&i.alternate.memoizedState.cachePool!==null&&(c=i.alternate.memoizedState.cachePool.pool),o=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(o=i.memoizedState.cachePool.pool),o!==c&&(i.flags|=2048)),l!==e&&l&&(t.child.flags|=8192),zr(t,t.updateQueue),We(t),null);case 4:return Ye(),e===null&&ho(t.stateNode.containerInfo),We(t),null;case 10:return zn(t.type),We(t),null;case 19:if(q(lt),i=t.memoizedState,i===null)return We(t),null;if(c=(t.flags&128)!==0,o=i.rendering,o===null)if(c)ha(i,!1);else{if(nt!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(o=mr(e),o!==null){for(t.flags|=128,ha(i,!1),e=o.updateQueue,t.updateQueue=e,zr(t,e),t.subtreeFlags=0,e=l,l=t.child;l!==null;)jf(l,e),l=l.sibling;return _(lt,lt.current&1|2),Re&&An(t,i.treeForkCount),t.child}e=e.sibling}i.tail!==null&&mt()>Dr&&(t.flags|=128,c=!0,ha(i,!1),t.lanes=4194304)}else{if(!c)if(e=mr(o),e!==null){if(t.flags|=128,c=!0,e=e.updateQueue,t.updateQueue=e,zr(t,e),ha(i,!0),i.tail===null&&i.tailMode==="hidden"&&!o.alternate&&!Re)return We(t),null}else 2*mt()-i.renderingStartTime>Dr&&l!==536870912&&(t.flags|=128,c=!0,ha(i,!1),t.lanes=4194304);i.isBackwards?(o.sibling=t.child,t.child=o):(e=i.last,e!==null?e.sibling=o:t.child=o,i.last=o)}return i.tail!==null?(e=i.tail,i.rendering=e,i.tail=e.sibling,i.renderingStartTime=mt(),e.sibling=null,l=lt.current,_(lt,c?l&1|2:l&1),Re&&An(t,i.treeForkCount),e):(We(t),null);case 22:case 23:return Yt(t),dc(),i=t.memoizedState!==null,e!==null?e.memoizedState!==null!==i&&(t.flags|=8192):i&&(t.flags|=8192),i?(l&536870912)!==0&&(t.flags&128)===0&&(We(t),t.subtreeFlags&6&&(t.flags|=8192)):We(t),l=t.updateQueue,l!==null&&zr(t,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),i=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(i=t.memoizedState.cachePool.pool),i!==l&&(t.flags|=2048),e!==null&&q(Nl),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),t.memoizedState.cache!==l&&(t.flags|=2048),zn(at),We(t),null;case 25:return null;case 30:return null}throw Error(u(156,t.tag))}function g1(e,t){switch(Wu(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return zn(at),Ye(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Kt(t),null;case 31:if(t.memoizedState!==null){if(Yt(t),t.alternate===null)throw Error(u(340));Cl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Yt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(u(340));Cl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return q(lt),null;case 4:return Ye(),null;case 10:return zn(t.type),null;case 22:case 23:return Yt(t),dc(),e!==null&&q(Nl),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return zn(at),null;case 25:return null;default:return null}}function ud(e,t){switch(Wu(t),t.tag){case 3:zn(at),Ye();break;case 26:case 27:case 5:Kt(t);break;case 4:Ye();break;case 31:t.memoizedState!==null&&Yt(t);break;case 13:Yt(t);break;case 19:q(lt);break;case 10:zn(t.type);break;case 22:case 23:Yt(t),dc(),e!==null&&q(Nl);break;case 24:zn(at)}}function da(e,t){try{var l=t.updateQueue,i=l!==null?l.lastEffect:null;if(i!==null){var c=i.next;l=c;do{if((l.tag&e)===e){i=void 0;var o=l.create,g=l.inst;i=o(),g.destroy=i}l=l.next}while(l!==c)}}catch(b){Ve(t,t.return,b)}}function ll(e,t,l){try{var i=t.updateQueue,c=i!==null?i.lastEffect:null;if(c!==null){var o=c.next;i=o;do{if((i.tag&e)===e){var g=i.inst,b=g.destroy;if(b!==void 0){g.destroy=void 0,c=t;var A=l,N=b;try{N()}catch(H){Ve(c,A,H)}}}i=i.next}while(i!==o)}}catch(H){Ve(t,t.return,H)}}function cd(e){var t=e.updateQueue;if(t!==null){var l=e.stateNode;try{Wf(t,l)}catch(i){Ve(e,e.return,i)}}}function od(e,t,l){l.props=Ll(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(i){Ve(e,t,i)}}function ma(e,t){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var i=e.stateNode;break;case 30:i=e.stateNode;break;default:i=e.stateNode}typeof l=="function"?e.refCleanup=l(i):l.current=i}}catch(c){Ve(e,t,c)}}function gn(e,t){var l=e.ref,i=e.refCleanup;if(l!==null)if(typeof i=="function")try{i()}catch(c){Ve(e,t,c)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(c){Ve(e,t,c)}else l.current=null}function sd(e){var t=e.type,l=e.memoizedProps,i=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":l.autoFocus&&i.focus();break e;case"img":l.src?i.src=l.src:l.srcSet&&(i.srcset=l.srcSet)}}catch(c){Ve(e,e.return,c)}}function Xc(e,t,l){try{var i=e.stateNode;U1(i,e.type,l,t),i[Ct]=t}catch(c){Ve(e,e.return,c)}}function fd(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&sl(e.type)||e.tag===4}function Zc(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||fd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&sl(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Kc(e,t,l){var i=e.tag;if(i===5||i===6)e=e.stateNode,t?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,t):(t=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,t.appendChild(e),l=l._reactRootContainer,l!=null||t.onclick!==null||(t.onclick=kn));else if(i!==4&&(i===27&&sl(e.type)&&(l=e.stateNode,t=null),e=e.child,e!==null))for(Kc(e,t,l),e=e.sibling;e!==null;)Kc(e,t,l),e=e.sibling}function Cr(e,t,l){var i=e.tag;if(i===5||i===6)e=e.stateNode,t?l.insertBefore(e,t):l.appendChild(e);else if(i!==4&&(i===27&&sl(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(Cr(e,t,l),e=e.sibling;e!==null;)Cr(e,t,l),e=e.sibling}function hd(e){var t=e.stateNode,l=e.memoizedProps;try{for(var i=e.type,c=t.attributes;c.length;)t.removeAttributeNode(c[0]);bt(t,i,l),t[pt]=e,t[Ct]=l}catch(o){Ve(e,e.return,o)}}var Dn=!1,ct=!1,Fc=!1,dd=typeof WeakSet=="function"?WeakSet:Set,dt=null;function y1(e,t){if(e=e.containerInfo,go=Jr,e=Af(e),Yu(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else e:{l=(l=e.ownerDocument)&&l.defaultView||window;var i=l.getSelection&&l.getSelection();if(i&&i.rangeCount!==0){l=i.anchorNode;var c=i.anchorOffset,o=i.focusNode;i=i.focusOffset;try{l.nodeType,o.nodeType}catch{l=null;break e}var g=0,b=-1,A=-1,N=0,H=0,Q=e,j=null;t:for(;;){for(var B;Q!==l||c!==0&&Q.nodeType!==3||(b=g+c),Q!==o||i!==0&&Q.nodeType!==3||(A=g+i),Q.nodeType===3&&(g+=Q.nodeValue.length),(B=Q.firstChild)!==null;)j=Q,Q=B;for(;;){if(Q===e)break t;if(j===l&&++N===c&&(b=g),j===o&&++H===i&&(A=g),(B=Q.nextSibling)!==null)break;Q=j,j=Q.parentNode}Q=B}l=b===-1||A===-1?null:{start:b,end:A}}else l=null}l=l||{start:0,end:0}}else l=null;for(yo={focusedElem:e,selectionRange:l},Jr=!1,dt=t;dt!==null;)if(t=dt,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,dt=e;else for(;dt!==null;){switch(t=dt,o=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l title"))),bt(o,i,l),o[pt]=e,ht(o),i=o;break e;case"link":var g=bm("link","href",c).get(i+(l.href||""));if(g){for(var b=0;bZe&&(g=Ze,Ze=ye,ye=g);var w=_f(b,ye),z=_f(b,Ze);if(w&&z&&(B.rangeCount!==1||B.anchorNode!==w.node||B.anchorOffset!==w.offset||B.focusNode!==z.node||B.focusOffset!==z.offset)){var M=Q.createRange();M.setStart(w.node,w.offset),B.removeAllRanges(),ye>Ze?(B.addRange(M),B.extend(z.node,z.offset)):(M.setEnd(z.node,z.offset),B.addRange(M))}}}}for(Q=[],B=b;B=B.parentNode;)B.nodeType===1&&Q.push({element:B,left:B.scrollLeft,top:B.scrollTop});for(typeof b.focus=="function"&&b.focus(),b=0;bl?32:l,D.T=null,l=to,to=null;var o=ul,g=Bn;if(st=0,ki=ul=null,Bn=0,(qe&6)!==0)throw Error(u(331));var b=qe;if(qe|=4,Ed(o.current),Sd(o,o.current,g,l),qe=b,va(0,!1),ve&&typeof ve.onPostCommitFiberRoot=="function")try{ve.onPostCommitFiberRoot(Z,o)}catch{}return!0}finally{F.p=c,D.T=i,Gd(e,t)}}function Qd(e,t,l){t=$t(l,t),t=jc(e.stateNode,t,2),e=el(e,t,2),e!==null&&(qi(e,2),yn(e))}function Ve(e,t,l){if(e.tag===3)Qd(e,e,l);else for(;t!==null;){if(t.tag===3){Qd(t,e,l);break}else if(t.tag===1){var i=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof i.componentDidCatch=="function"&&(rl===null||!rl.has(i))){e=$t(l,e),l=Xh(2),i=el(t,l,2),i!==null&&(Zh(l,i,t,e),qi(i,2),yn(i));break}}t=t.return}}function ao(e,t,l){var i=e.pingCache;if(i===null){i=e.pingCache=new v1;var c=new Set;i.set(t,c)}else c=i.get(t),c===void 0&&(c=new Set,i.set(t,c));c.has(l)||($c=!0,c.add(l),e=A1.bind(null,e,t,l),t.then(e,e))}function A1(e,t,l){var i=e.pingCache;i!==null&&i.delete(t),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,Ke===e&&(Oe&l)===l&&(nt===4||nt===3&&(Oe&62914560)===Oe&&300>mt()-Nr?(qe&2)===0&&_i(e,0):Wc|=l,Si===Oe&&(Si=0)),yn(e)}function Xd(e,t){t===0&&(t=Us()),e=Tl(e,t),e!==null&&(qi(e,t),yn(e))}function T1(e){var t=e.memoizedState,l=0;t!==null&&(l=t.retryLane),Xd(e,l)}function z1(e,t){var l=0;switch(e.tag){case 31:case 13:var i=e.stateNode,c=e.memoizedState;c!==null&&(l=c.retryLane);break;case 19:i=e.stateNode;break;case 22:i=e.stateNode._retryCache;break;default:throw Error(u(314))}i!==null&&i.delete(t),Xd(e,l)}function C1(e,t){return vn(e,t)}var Ur=null,Ai=null,ro=!1,Hr=!1,uo=!1,ol=0;function yn(e){e!==Ai&&e.next===null&&(Ai===null?Ur=Ai=e:Ai=Ai.next=e),Hr=!0,ro||(ro=!0,M1())}function va(e,t){if(!uo&&Hr){uo=!0;do for(var l=!1,i=Ur;i!==null;){if(e!==0){var c=i.pendingLanes;if(c===0)var o=0;else{var g=i.suspendedLanes,b=i.pingedLanes;o=(1<<31-Ee(42|e)+1)-1,o&=c&~(g&~b),o=o&201326741?o&201326741|1:o?o|2:0}o!==0&&(l=!0,Jd(i,o))}else o=Oe,o=Sl(i,i===Ke?o:0,i.cancelPendingCommit!==null||i.timeoutHandle!==-1),(o&3)===0||Hi(i,o)||(l=!0,Jd(i,o));i=i.next}while(l);uo=!1}}function w1(){Zd()}function Zd(){Hr=ro=!1;var e=0;ol!==0&&q1()&&(e=ol);for(var t=mt(),l=null,i=Ur;i!==null;){var c=i.next,o=Kd(i,t);o===0?(i.next=null,l===null?Ur=c:l.next=c,c===null&&(Ai=l)):(l=i,(e!==0||(o&3)!==0)&&(Hr=!0)),i=c}st!==0&&st!==5||va(e),ol!==0&&(ol=0)}function Kd(e,t){for(var l=e.suspendedLanes,i=e.pingedLanes,c=e.expirationTimes,o=e.pendingLanes&-62914561;0b)break;var H=A.transferSize,Q=A.initiatorType;H&&lm(Q)&&(A=A.responseEnd,g+=H*(A"u"?null:document;function pm(e,t,l){var i=Ti;if(i&&typeof t=="string"&&t){var c=Jt(t);c='link[rel="'+e+'"][href="'+c+'"]',typeof l=="string"&&(c+='[crossorigin="'+l+'"]'),mm.has(c)||(mm.add(c),e={rel:e,crossOrigin:l,href:t},i.querySelector(c)===null&&(t=i.createElement("link"),bt(t,"link",e),ht(t),i.head.appendChild(t)))}}function J1(e){Un.D(e),pm("dns-prefetch",e,null)}function I1(e,t){Un.C(e,t),pm("preconnect",e,t)}function $1(e,t,l){Un.L(e,t,l);var i=Ti;if(i&&e&&t){var c='link[rel="preload"][as="'+Jt(t)+'"]';t==="image"&&l&&l.imageSrcSet?(c+='[imagesrcset="'+Jt(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(c+='[imagesizes="'+Jt(l.imageSizes)+'"]')):c+='[href="'+Jt(e)+'"]';var o=c;switch(t){case"style":o=zi(e);break;case"script":o=Ci(e)}ln.has(o)||(e=y({rel:"preload",href:t==="image"&&l&&l.imageSrcSet?void 0:e,as:t},l),ln.set(o,e),i.querySelector(c)!==null||t==="style"&&i.querySelector(Ea(o))||t==="script"&&i.querySelector(Aa(o))||(t=i.createElement("link"),bt(t,"link",e),ht(t),i.head.appendChild(t)))}}function W1(e,t){Un.m(e,t);var l=Ti;if(l&&e){var i=t&&typeof t.as=="string"?t.as:"script",c='link[rel="modulepreload"][as="'+Jt(i)+'"][href="'+Jt(e)+'"]',o=c;switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":o=Ci(e)}if(!ln.has(o)&&(e=y({rel:"modulepreload",href:e},t),ln.set(o,e),l.querySelector(c)===null)){switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Aa(o)))return}i=l.createElement("link"),bt(i,"link",e),ht(i),l.head.appendChild(i)}}}function P1(e,t,l){Un.S(e,t,l);var i=Ti;if(i&&e){var c=Jl(i).hoistableStyles,o=zi(e);t=t||"default";var g=c.get(o);if(!g){var b={loading:0,preload:null};if(g=i.querySelector(Ea(o)))b.loading=5;else{e=y({rel:"stylesheet",href:e,"data-precedence":t},l),(l=ln.get(o))&&Eo(e,l);var A=g=i.createElement("link");ht(A),bt(A,"link",e),A._p=new Promise(function(N,H){A.onload=N,A.onerror=H}),A.addEventListener("load",function(){b.loading|=1}),A.addEventListener("error",function(){b.loading|=2}),b.loading|=4,Qr(g,t,i)}g={type:"stylesheet",instance:g,count:1,state:b},c.set(o,g)}}}function e0(e,t){Un.X(e,t);var l=Ti;if(l&&e){var i=Jl(l).hoistableScripts,c=Ci(e),o=i.get(c);o||(o=l.querySelector(Aa(c)),o||(e=y({src:e,async:!0},t),(t=ln.get(c))&&Ao(e,t),o=l.createElement("script"),ht(o),bt(o,"link",e),l.head.appendChild(o)),o={type:"script",instance:o,count:1,state:null},i.set(c,o))}}function t0(e,t){Un.M(e,t);var l=Ti;if(l&&e){var i=Jl(l).hoistableScripts,c=Ci(e),o=i.get(c);o||(o=l.querySelector(Aa(c)),o||(e=y({src:e,async:!0,type:"module"},t),(t=ln.get(c))&&Ao(e,t),o=l.createElement("script"),ht(o),bt(o,"link",e),l.head.appendChild(o)),o={type:"script",instance:o,count:1,state:null},i.set(c,o))}}function gm(e,t,l,i){var c=(c=oe.current)?Vr(c):null;if(!c)throw Error(u(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(t=zi(l.href),l=Jl(c).hoistableStyles,i=l.get(t),i||(i={type:"style",instance:null,count:0,state:null},l.set(t,i)),i):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=zi(l.href);var o=Jl(c).hoistableStyles,g=o.get(e);if(g||(c=c.ownerDocument||c,g={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},o.set(e,g),(o=c.querySelector(Ea(e)))&&!o._p&&(g.instance=o,g.state.loading=5),ln.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},ln.set(e,l),o||n0(c,e,l,g.state))),t&&i===null)throw Error(u(528,""));return g}if(t&&i!==null)throw Error(u(529,""));return null;case"script":return t=l.async,l=l.src,typeof l=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ci(l),l=Jl(c).hoistableScripts,i=l.get(t),i||(i={type:"script",instance:null,count:0,state:null},l.set(t,i)),i):{type:"void",instance:null,count:0,state:null};default:throw Error(u(444,e))}}function zi(e){return'href="'+Jt(e)+'"'}function Ea(e){return'link[rel="stylesheet"]['+e+"]"}function ym(e){return y({},e,{"data-precedence":e.precedence,precedence:null})}function n0(e,t,l,i){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?i.loading=1:(t=e.createElement("link"),i.preload=t,t.addEventListener("load",function(){return i.loading|=1}),t.addEventListener("error",function(){return i.loading|=2}),bt(t,"link",l),ht(t),e.head.appendChild(t))}function Ci(e){return'[src="'+Jt(e)+'"]'}function Aa(e){return"script[async]"+e}function xm(e,t,l){if(t.count++,t.instance===null)switch(t.type){case"style":var i=e.querySelector('style[data-href~="'+Jt(l.href)+'"]');if(i)return t.instance=i,ht(i),i;var c=y({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return i=(e.ownerDocument||e).createElement("style"),ht(i),bt(i,"style",c),Qr(i,l.precedence,e),t.instance=i;case"stylesheet":c=zi(l.href);var o=e.querySelector(Ea(c));if(o)return t.state.loading|=4,t.instance=o,ht(o),o;i=ym(l),(c=ln.get(c))&&Eo(i,c),o=(e.ownerDocument||e).createElement("link"),ht(o);var g=o;return g._p=new Promise(function(b,A){g.onload=b,g.onerror=A}),bt(o,"link",i),t.state.loading|=4,Qr(o,l.precedence,e),t.instance=o;case"script":return o=Ci(l.src),(c=e.querySelector(Aa(o)))?(t.instance=c,ht(c),c):(i=l,(c=ln.get(o))&&(i=y({},l),Ao(i,c)),e=e.ownerDocument||e,c=e.createElement("script"),ht(c),bt(c,"link",i),e.head.appendChild(c),t.instance=c);case"void":return null;default:throw Error(u(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(i=t.instance,t.state.loading|=4,Qr(i,l.precedence,e));return t.instance}function Qr(e,t,l){for(var i=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),c=i.length?i[i.length-1]:null,o=c,g=0;g title"):null)}function l0(e,t,l){if(l===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Sm(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function i0(e,t,l,i){if(l.type==="stylesheet"&&(typeof i.media!="string"||matchMedia(i.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var c=zi(i.href),o=t.querySelector(Ea(c));if(o){t=o._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Zr.bind(e),t.then(e,e)),l.state.loading|=4,l.instance=o,ht(o);return}o=t.ownerDocument||t,i=ym(i),(c=ln.get(c))&&Eo(i,c),o=o.createElement("link"),ht(o);var g=o;g._p=new Promise(function(b,A){g.onload=b,g.onerror=A}),bt(o,"link",i),l.instance=o}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,t),(t=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=Zr.bind(e),t.addEventListener("load",l),t.addEventListener("error",l))}}var To=0;function a0(e,t){return e.stylesheets&&e.count===0&&Fr(e,e.stylesheets),0To?50:800)+t);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(i),clearTimeout(c)}}:null}function Zr(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Fr(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Kr=null;function Fr(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Kr=new Map,t.forEach(r0,e),Kr=null,Zr.call(e))}function r0(e,t){if(!(t.state.loading&4)){var l=Kr.get(e);if(l)var i=l.get(null);else{l=new Map,Kr.set(e,l);for(var c=e.querySelectorAll("link[data-precedence],style[data-precedence]"),o=0;o"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(a){console.error(a)}}return n(),Ro.exports=k0(),Ro.exports}var E0=_0();function A0(n,a){const r={};return(n[n.length-1]===""?[...n,""]:n).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const T0=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,z0=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,C0={};function Xm(n,a){return(C0.jsx?z0:T0).test(n)}const w0=/[ \t\n\f\r]/g;function M0(n){return typeof n=="object"?n.type==="text"?Zm(n.value):!1:Zm(n)}function Zm(n){return n.replace(w0,"")===""}class Ya{constructor(a,r,u){this.normal=r,this.property=a,u&&(this.space=u)}}Ya.prototype.normal={};Ya.prototype.property={};Ya.prototype.space=void 0;function qp(n,a){const r={},u={};for(const s of n)Object.assign(r,s.property),Object.assign(u,s.normal);return new Ya(r,u,a)}function is(n){return n.toLowerCase()}class Lt{constructor(a,r){this.attribute=r,this.property=a}}Lt.prototype.attribute="";Lt.prototype.booleanish=!1;Lt.prototype.boolean=!1;Lt.prototype.commaOrSpaceSeparated=!1;Lt.prototype.commaSeparated=!1;Lt.prototype.defined=!1;Lt.prototype.mustUseProperty=!1;Lt.prototype.number=!1;Lt.prototype.overloadedBoolean=!1;Lt.prototype.property="";Lt.prototype.spaceSeparated=!1;Lt.prototype.space=void 0;let N0=0;const ke=Vl(),ot=Vl(),as=Vl(),I=Vl(),Fe=Vl(),Yl=Vl(),Xt=Vl();function Vl(){return 2**++N0}const rs=Object.freeze(Object.defineProperty({__proto__:null,boolean:ke,booleanish:ot,commaOrSpaceSeparated:Xt,commaSeparated:Yl,number:I,overloadedBoolean:as,spaceSeparated:Fe},Symbol.toStringTag,{value:"Module"})),Ho=Object.keys(rs);class xs extends Lt{constructor(a,r,u,s){let h=-1;if(super(a,r),Km(this,"space",s),typeof u=="number")for(;++h4&&r.slice(0,4)==="data"&&L0.test(a)){if(a.charAt(4)==="-"){const h=a.slice(5).replace(Fm,H0);u="data"+h.charAt(0).toUpperCase()+h.slice(1)}else{const h=a.slice(4);if(!Fm.test(h)){let f=h.replace(R0,U0);f.charAt(0)!=="-"&&(f="-"+f),a="data"+f}}s=xs}return new s(u,a)}function U0(n){return"-"+n.toLowerCase()}function H0(n){return n.charAt(1).toUpperCase()}const q0=qp([Yp,D0,Qp,Xp,Zp],"html"),bs=qp([Yp,O0,Qp,Xp,Zp],"svg");function Y0(n){return n.join(" ").trim()}var Mi={},qo,Jm;function G0(){if(Jm)return qo;Jm=1;var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,a=/\n/g,r=/^\s*/,u=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,s=/^:\s*/,h=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,f=/^[;\s]*/,m=/^\s+|\s+$/g,p=` -`,d="/",x="*",y="",v="comment",S="declaration";function C(V,O){if(typeof V!="string")throw new TypeError("First argument must be a string");if(!V)return[];O=O||{};var K=1,X=1;function ae(ue){var $=ue.match(a);$&&(K+=$.length);var D=ue.lastIndexOf(p);X=~D?ue.length-D:X+ue.length}function ee(){var ue={line:K,column:X};return function($){return $.position=new L(ue),xe(),$}}function L(ue){this.start=ue,this.end={line:K,column:X},this.source=O.source}L.prototype.content=V;function J(ue){var $=new Error(O.source+":"+K+":"+X+": "+ue);if($.reason=ue,$.filename=O.source,$.line=K,$.column=X,$.source=V,!O.silent)throw $}function he(ue){var $=ue.exec(V);if($){var D=$[0];return ae(D),V=V.slice(D.length),$}}function xe(){he(r)}function R(ue){var $;for(ue=ue||[];$=ne();)$!==!1&&ue.push($);return ue}function ne(){var ue=ee();if(!(d!=V.charAt(0)||x!=V.charAt(1))){for(var $=2;y!=V.charAt($)&&(x!=V.charAt($)||d!=V.charAt($+1));)++$;if($+=2,y===V.charAt($-1))return J("End of comment missing");var D=V.slice(2,$-2);return X+=2,ae(D),V=V.slice($),X+=2,ue({type:v,comment:D})}}function le(){var ue=ee(),$=he(u);if($){if(ne(),!he(s))return J("property missing ':'");var D=he(h),F=ue({type:S,property:U($[0].replace(n,y)),value:D?U(D[0].replace(n,y)):y});return he(f),F}}function Ce(){var ue=[];R(ue);for(var $;$=le();)$!==!1&&(ue.push($),R(ue));return ue}return xe(),Ce()}function U(V){return V?V.replace(m,y):y}return qo=C,qo}var Im;function V0(){if(Im)return Mi;Im=1;var n=Mi&&Mi.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(Mi,"__esModule",{value:!0}),Mi.default=r;const a=n(G0());function r(u,s){let h=null;if(!u||typeof u!="string")return h;const f=(0,a.default)(u),m=typeof s=="function";return f.forEach(p=>{if(p.type!=="declaration")return;const{property:d,value:x}=p;m?s(d,x,p):x&&(h=h||{},h[d]=x)}),h}return Mi}var Da={},$m;function Q0(){if($m)return Da;$m=1,Object.defineProperty(Da,"__esModule",{value:!0}),Da.camelCase=void 0;var n=/^--[a-zA-Z0-9_-]+$/,a=/-([a-z])/g,r=/^[^-]+$/,u=/^-(webkit|moz|ms|o|khtml)-/,s=/^-(ms)-/,h=function(d){return!d||r.test(d)||n.test(d)},f=function(d,x){return x.toUpperCase()},m=function(d,x){return"".concat(x,"-")},p=function(d,x){return x===void 0&&(x={}),h(d)?d:(d=d.toLowerCase(),x.reactCompat?d=d.replace(s,m):d=d.replace(u,m),d.replace(a,f))};return Da.camelCase=p,Da}var Oa,Wm;function X0(){if(Wm)return Oa;Wm=1;var n=Oa&&Oa.__importDefault||function(s){return s&&s.__esModule?s:{default:s}},a=n(V0()),r=Q0();function u(s,h){var f={};return!s||typeof s!="string"||(0,a.default)(s,function(m,p){m&&p&&(f[(0,r.camelCase)(m,h)]=p)}),f}return u.default=u,Oa=u,Oa}var Z0=X0();const K0=Hp(Z0),Kp=Fp("end"),vs=Fp("start");function Fp(n){return a;function a(r){const u=r&&r.position&&r.position[n]||{};if(typeof u.line=="number"&&u.line>0&&typeof u.column=="number"&&u.column>0)return{line:u.line,column:u.column,offset:typeof u.offset=="number"&&u.offset>-1?u.offset:void 0}}}function F0(n){const a=vs(n),r=Kp(n);if(a&&r)return{start:a,end:r}}function La(n){return!n||typeof n!="object"?"":"position"in n||"type"in n?Pm(n.position):"start"in n||"end"in n?Pm(n):"line"in n||"column"in n?us(n):""}function us(n){return ep(n&&n.line)+":"+ep(n&&n.column)}function Pm(n){return us(n&&n.start)+"-"+us(n&&n.end)}function ep(n){return n&&typeof n=="number"?n:1}class Et extends Error{constructor(a,r,u){super(),typeof r=="string"&&(u=r,r=void 0);let s="",h={},f=!1;if(r&&("line"in r&&"column"in r?h={place:r}:"start"in r&&"end"in r?h={place:r}:"type"in r?h={ancestors:[r],place:r.position}:h={...r}),typeof a=="string"?s=a:!h.cause&&a&&(f=!0,s=a.message,h.cause=a),!h.ruleId&&!h.source&&typeof u=="string"){const p=u.indexOf(":");p===-1?h.ruleId=u:(h.source=u.slice(0,p),h.ruleId=u.slice(p+1))}if(!h.place&&h.ancestors&&h.ancestors){const p=h.ancestors[h.ancestors.length-1];p&&(h.place=p.position)}const m=h.place&&"start"in h.place?h.place.start:h.place;this.ancestors=h.ancestors||void 0,this.cause=h.cause||void 0,this.column=m?m.column:void 0,this.fatal=void 0,this.file="",this.message=s,this.line=m?m.line:void 0,this.name=La(h.place)||"1:1",this.place=h.place||void 0,this.reason=this.message,this.ruleId=h.ruleId||void 0,this.source=h.source||void 0,this.stack=f&&h.cause&&typeof h.cause.stack=="string"?h.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Et.prototype.file="";Et.prototype.name="";Et.prototype.reason="";Et.prototype.message="";Et.prototype.stack="";Et.prototype.column=void 0;Et.prototype.line=void 0;Et.prototype.ancestors=void 0;Et.prototype.cause=void 0;Et.prototype.fatal=void 0;Et.prototype.place=void 0;Et.prototype.ruleId=void 0;Et.prototype.source=void 0;const Ss={}.hasOwnProperty,J0=new Map,I0=/[A-Z]/g,$0=new Set(["table","tbody","thead","tfoot","tr"]),W0=new Set(["td","th"]),Jp="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function P0(n,a){if(!a||a.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=a.filePath||void 0;let u;if(a.development){if(typeof a.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");u=ux(r,a.jsxDEV)}else{if(typeof a.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof a.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");u=rx(r,a.jsx,a.jsxs)}const s={Fragment:a.Fragment,ancestors:[],components:a.components||{},create:u,elementAttributeNameCase:a.elementAttributeNameCase||"react",evaluater:a.createEvaluater?a.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:a.ignoreInvalidStyle||!1,passKeys:a.passKeys!==!1,passNode:a.passNode||!1,schema:a.space==="svg"?bs:q0,stylePropertyNameCase:a.stylePropertyNameCase||"dom",tableCellAlignToStyle:a.tableCellAlignToStyle!==!1},h=Ip(s,n,void 0);return h&&typeof h!="string"?h:s.create(n,s.Fragment,{children:h||void 0},void 0)}function Ip(n,a,r){if(a.type==="element")return ex(n,a,r);if(a.type==="mdxFlowExpression"||a.type==="mdxTextExpression")return tx(n,a);if(a.type==="mdxJsxFlowElement"||a.type==="mdxJsxTextElement")return lx(n,a,r);if(a.type==="mdxjsEsm")return nx(n,a);if(a.type==="root")return ix(n,a,r);if(a.type==="text")return ax(n,a)}function ex(n,a,r){const u=n.schema;let s=u;a.tagName.toLowerCase()==="svg"&&u.space==="html"&&(s=bs,n.schema=s),n.ancestors.push(a);const h=Wp(n,a.tagName,!1),f=cx(n,a);let m=_s(n,a);return $0.has(a.tagName)&&(m=m.filter(function(p){return typeof p=="string"?!M0(p):!0})),$p(n,f,h,a),ks(f,m),n.ancestors.pop(),n.schema=u,n.create(a,h,f,r)}function tx(n,a){if(a.data&&a.data.estree&&n.evaluater){const u=a.data.estree.body[0];return u.type,n.evaluater.evaluateExpression(u.expression)}Ha(n,a.position)}function nx(n,a){if(a.data&&a.data.estree&&n.evaluater)return n.evaluater.evaluateProgram(a.data.estree);Ha(n,a.position)}function lx(n,a,r){const u=n.schema;let s=u;a.name==="svg"&&u.space==="html"&&(s=bs,n.schema=s),n.ancestors.push(a);const h=a.name===null?n.Fragment:Wp(n,a.name,!0),f=ox(n,a),m=_s(n,a);return $p(n,f,h,a),ks(f,m),n.ancestors.pop(),n.schema=u,n.create(a,h,f,r)}function ix(n,a,r){const u={};return ks(u,_s(n,a)),n.create(a,n.Fragment,u,r)}function ax(n,a){return a.value}function $p(n,a,r,u){typeof r!="string"&&r!==n.Fragment&&n.passNode&&(a.node=u)}function ks(n,a){if(a.length>0){const r=a.length>1?a:a[0];r&&(n.children=r)}}function rx(n,a,r){return u;function u(s,h,f,m){const d=Array.isArray(f.children)?r:a;return m?d(h,f,m):d(h,f)}}function ux(n,a){return r;function r(u,s,h,f){const m=Array.isArray(h.children),p=vs(u);return a(s,h,f,m,{columnNumber:p?p.column-1:void 0,fileName:n,lineNumber:p?p.line:void 0},void 0)}}function cx(n,a){const r={};let u,s;for(s in a.properties)if(s!=="children"&&Ss.call(a.properties,s)){const h=sx(n,s,a.properties[s]);if(h){const[f,m]=h;n.tableCellAlignToStyle&&f==="align"&&typeof m=="string"&&W0.has(a.tagName)?u=m:r[f]=m}}if(u){const h=r.style||(r.style={});h[n.stylePropertyNameCase==="css"?"text-align":"textAlign"]=u}return r}function ox(n,a){const r={};for(const u of a.attributes)if(u.type==="mdxJsxExpressionAttribute")if(u.data&&u.data.estree&&n.evaluater){const h=u.data.estree.body[0];h.type;const f=h.expression;f.type;const m=f.properties[0];m.type,Object.assign(r,n.evaluater.evaluateExpression(m.argument))}else Ha(n,a.position);else{const s=u.name;let h;if(u.value&&typeof u.value=="object")if(u.value.data&&u.value.data.estree&&n.evaluater){const m=u.value.data.estree.body[0];m.type,h=n.evaluater.evaluateExpression(m.expression)}else Ha(n,a.position);else h=u.value===null?!0:u.value;r[s]=h}return r}function _s(n,a){const r=[];let u=-1;const s=n.passKeys?new Map:J0;for(;++us?0:s+a:a=a>s?s:a,r=r>0?r:0,u.length<1e4)f=Array.from(u),f.unshift(a,r),n.splice(...f);else for(r&&n.splice(a,r);h0?(Zt(n,n.length,0,a),n):a}const lp={}.hasOwnProperty;function eg(n){const a={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function sn(n){return n.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Tt=xl(/[A-Za-z]/),_t=xl(/[\dA-Za-z]/),bx=xl(/[#-'*+\--9=?A-Z^-~]/);function ou(n){return n!==null&&(n<32||n===127)}const cs=xl(/\d/),vx=xl(/[\dA-Fa-f]/),Sx=xl(/[!-/:-@[-`{-~]/);function pe(n){return n!==null&&n<-2}function Je(n){return n!==null&&(n<0||n===32)}function De(n){return n===-2||n===-1||n===32}const mu=xl(new RegExp("\\p{P}|\\p{S}","u")),Gl=xl(/\s/);function xl(n){return a;function a(r){return r!==null&&r>-1&&n.test(String.fromCharCode(r))}}function Ri(n){const a=[];let r=-1,u=0,s=0;for(;++r55295&&h<57344){const m=n.charCodeAt(r+1);h<56320&&m>56319&&m<57344?(f=String.fromCharCode(h,m),s=1):f="�"}else f=String.fromCharCode(h);f&&(a.push(n.slice(u,r),encodeURIComponent(f)),u=r+s+1,f=""),s&&(r+=s,s=0)}return a.join("")+n.slice(u)}function Le(n,a,r,u){const s=u?u-1:Number.POSITIVE_INFINITY;let h=0;return f;function f(p){return De(p)?(n.enter(r),m(p)):a(p)}function m(p){return De(p)&&h++f))return;const J=a.events.length;let he=J,xe,R;for(;he--;)if(a.events[he][0]==="exit"&&a.events[he][1].type==="chunkFlow"){if(xe){R=a.events[he][1].end;break}xe=!0}for(O(u),L=J;LX;){const ee=r[ae];a.containerState=ee[1],ee[0].exit.call(a,n)}r.length=X}function K(){s.write([null]),h=void 0,s=void 0,a.containerState._closeFlow=void 0}}function Tx(n,a,r){return Le(n,n.attempt(this.parser.constructs.document,a,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Di(n){if(n===null||Je(n)||Gl(n))return 1;if(mu(n))return 2}function pu(n,a,r){const u=[];let s=-1;for(;++s1&&n[r][1].end.offset-n[r][1].start.offset>1?2:1;const y={...n[u][1].end},v={...n[r][1].start};ap(y,-p),ap(v,p),f={type:p>1?"strongSequence":"emphasisSequence",start:y,end:{...n[u][1].end}},m={type:p>1?"strongSequence":"emphasisSequence",start:{...n[r][1].start},end:v},h={type:p>1?"strongText":"emphasisText",start:{...n[u][1].end},end:{...n[r][1].start}},s={type:p>1?"strong":"emphasis",start:{...f.start},end:{...m.end}},n[u][1].end={...f.start},n[r][1].start={...m.end},d=[],n[u][1].end.offset-n[u][1].start.offset&&(d=an(d,[["enter",n[u][1],a],["exit",n[u][1],a]])),d=an(d,[["enter",s,a],["enter",f,a],["exit",f,a],["enter",h,a]]),d=an(d,pu(a.parser.constructs.insideSpan.null,n.slice(u+1,r),a)),d=an(d,[["exit",h,a],["enter",m,a],["exit",m,a],["exit",s,a]]),n[r][1].end.offset-n[r][1].start.offset?(x=2,d=an(d,[["enter",n[r][1],a],["exit",n[r][1],a]])):x=0,Zt(n,u-1,r-u+3,d),r=u+d.length-x-2;break}}for(r=-1;++r0&&De(L)?Le(n,K,"linePrefix",h+1)(L):K(L)}function K(L){return L===null||pe(L)?n.check(rp,U,ae)(L):(n.enter("codeFlowValue"),X(L))}function X(L){return L===null||pe(L)?(n.exit("codeFlowValue"),K(L)):(n.consume(L),X)}function ae(L){return n.exit("codeFenced"),a(L)}function ee(L,J,he){let xe=0;return R;function R($){return L.enter("lineEnding"),L.consume($),L.exit("lineEnding"),ne}function ne($){return L.enter("codeFencedFence"),De($)?Le(L,le,"linePrefix",u.parser.constructs.disable.null.includes("codeIndented")?void 0:4)($):le($)}function le($){return $===m?(L.enter("codeFencedFenceSequence"),Ce($)):he($)}function Ce($){return $===m?(xe++,L.consume($),Ce):xe>=f?(L.exit("codeFencedFenceSequence"),De($)?Le(L,ue,"whitespace")($):ue($)):he($)}function ue($){return $===null||pe($)?(L.exit("codeFencedFence"),J($)):he($)}}}function Ux(n,a,r){const u=this;return s;function s(f){return f===null?r(f):(n.enter("lineEnding"),n.consume(f),n.exit("lineEnding"),h)}function h(f){return u.parser.lazy[u.now().line]?r(f):a(f)}}const Go={name:"codeIndented",tokenize:qx},Hx={partial:!0,tokenize:Yx};function qx(n,a,r){const u=this;return s;function s(d){return n.enter("codeIndented"),Le(n,h,"linePrefix",5)(d)}function h(d){const x=u.events[u.events.length-1];return x&&x[1].type==="linePrefix"&&x[2].sliceSerialize(x[1],!0).length>=4?f(d):r(d)}function f(d){return d===null?p(d):pe(d)?n.attempt(Hx,f,p)(d):(n.enter("codeFlowValue"),m(d))}function m(d){return d===null||pe(d)?(n.exit("codeFlowValue"),f(d)):(n.consume(d),m)}function p(d){return n.exit("codeIndented"),a(d)}}function Yx(n,a,r){const u=this;return s;function s(f){return u.parser.lazy[u.now().line]?r(f):pe(f)?(n.enter("lineEnding"),n.consume(f),n.exit("lineEnding"),s):Le(n,h,"linePrefix",5)(f)}function h(f){const m=u.events[u.events.length-1];return m&&m[1].type==="linePrefix"&&m[2].sliceSerialize(m[1],!0).length>=4?a(f):pe(f)?s(f):r(f)}}const Gx={name:"codeText",previous:Qx,resolve:Vx,tokenize:Xx};function Vx(n){let a=n.length-4,r=3,u,s;if((n[r][1].type==="lineEnding"||n[r][1].type==="space")&&(n[a][1].type==="lineEnding"||n[a][1].type==="space")){for(u=r;++u=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+a+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return athis.left.length?this.right.slice(this.right.length-u+this.left.length,this.right.length-a+this.left.length).reverse():this.left.slice(a).concat(this.right.slice(this.right.length-u+this.left.length).reverse())}splice(a,r,u){const s=r||0;this.setCursor(Math.trunc(a));const h=this.right.splice(this.right.length-s,Number.POSITIVE_INFINITY);return u&&ja(this.left,u),h.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(a){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(a)}pushMany(a){this.setCursor(Number.POSITIVE_INFINITY),ja(this.left,a)}unshift(a){this.setCursor(0),this.right.push(a)}unshiftMany(a){this.setCursor(0),ja(this.right,a.reverse())}setCursor(a){if(!(a===this.left.length||a>this.left.length&&this.right.length===0||a<0&&this.left.length===0))if(a=4?a(f):n.interrupt(u.parser.constructs.flow,r,a)(f)}}function rg(n,a,r,u,s,h,f,m,p){const d=p||Number.POSITIVE_INFINITY;let x=0;return y;function y(O){return O===60?(n.enter(u),n.enter(s),n.enter(h),n.consume(O),n.exit(h),v):O===null||O===32||O===41||ou(O)?r(O):(n.enter(u),n.enter(f),n.enter(m),n.enter("chunkString",{contentType:"string"}),U(O))}function v(O){return O===62?(n.enter(h),n.consume(O),n.exit(h),n.exit(s),n.exit(u),a):(n.enter(m),n.enter("chunkString",{contentType:"string"}),S(O))}function S(O){return O===62?(n.exit("chunkString"),n.exit(m),v(O)):O===null||O===60||pe(O)?r(O):(n.consume(O),O===92?C:S)}function C(O){return O===60||O===62||O===92?(n.consume(O),S):S(O)}function U(O){return!x&&(O===null||O===41||Je(O))?(n.exit("chunkString"),n.exit(m),n.exit(f),n.exit(u),a(O)):x999||S===null||S===91||S===93&&!p||S===94&&!m&&"_hiddenFootnoteSupport"in f.parser.constructs?r(S):S===93?(n.exit(h),n.enter(s),n.consume(S),n.exit(s),n.exit(u),a):pe(S)?(n.enter("lineEnding"),n.consume(S),n.exit("lineEnding"),x):(n.enter("chunkString",{contentType:"string"}),y(S))}function y(S){return S===null||S===91||S===93||pe(S)||m++>999?(n.exit("chunkString"),x(S)):(n.consume(S),p||(p=!De(S)),S===92?v:y)}function v(S){return S===91||S===92||S===93?(n.consume(S),m++,y):y(S)}}function cg(n,a,r,u,s,h){let f;return m;function m(v){return v===34||v===39||v===40?(n.enter(u),n.enter(s),n.consume(v),n.exit(s),f=v===40?41:v,p):r(v)}function p(v){return v===f?(n.enter(s),n.consume(v),n.exit(s),n.exit(u),a):(n.enter(h),d(v))}function d(v){return v===f?(n.exit(h),p(f)):v===null?r(v):pe(v)?(n.enter("lineEnding"),n.consume(v),n.exit("lineEnding"),Le(n,d,"linePrefix")):(n.enter("chunkString",{contentType:"string"}),x(v))}function x(v){return v===f||v===null||pe(v)?(n.exit("chunkString"),d(v)):(n.consume(v),v===92?y:x)}function y(v){return v===f||v===92?(n.consume(v),x):x(v)}}function Ba(n,a){let r;return u;function u(s){return pe(s)?(n.enter("lineEnding"),n.consume(s),n.exit("lineEnding"),r=!0,u):De(s)?Le(n,u,r?"linePrefix":"lineSuffix")(s):a(s)}}const Px={name:"definition",tokenize:tb},eb={partial:!0,tokenize:nb};function tb(n,a,r){const u=this;let s;return h;function h(S){return n.enter("definition"),f(S)}function f(S){return ug.call(u,n,m,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(S)}function m(S){return s=sn(u.sliceSerialize(u.events[u.events.length-1][1]).slice(1,-1)),S===58?(n.enter("definitionMarker"),n.consume(S),n.exit("definitionMarker"),p):r(S)}function p(S){return Je(S)?Ba(n,d)(S):d(S)}function d(S){return rg(n,x,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(S)}function x(S){return n.attempt(eb,y,y)(S)}function y(S){return De(S)?Le(n,v,"whitespace")(S):v(S)}function v(S){return S===null||pe(S)?(n.exit("definition"),u.parser.defined.push(s),a(S)):r(S)}}function nb(n,a,r){return u;function u(m){return Je(m)?Ba(n,s)(m):r(m)}function s(m){return cg(n,h,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(m)}function h(m){return De(m)?Le(n,f,"whitespace")(m):f(m)}function f(m){return m===null||pe(m)?a(m):r(m)}}const lb={name:"hardBreakEscape",tokenize:ib};function ib(n,a,r){return u;function u(h){return n.enter("hardBreakEscape"),n.consume(h),s}function s(h){return pe(h)?(n.exit("hardBreakEscape"),a(h)):r(h)}}const ab={name:"headingAtx",resolve:rb,tokenize:ub};function rb(n,a){let r=n.length-2,u=3,s,h;return n[u][1].type==="whitespace"&&(u+=2),r-2>u&&n[r][1].type==="whitespace"&&(r-=2),n[r][1].type==="atxHeadingSequence"&&(u===r-1||r-4>u&&n[r-2][1].type==="whitespace")&&(r-=u+1===r?2:4),r>u&&(s={type:"atxHeadingText",start:n[u][1].start,end:n[r][1].end},h={type:"chunkText",start:n[u][1].start,end:n[r][1].end,contentType:"text"},Zt(n,u,r-u+1,[["enter",s,a],["enter",h,a],["exit",h,a],["exit",s,a]])),n}function ub(n,a,r){let u=0;return s;function s(x){return n.enter("atxHeading"),h(x)}function h(x){return n.enter("atxHeadingSequence"),f(x)}function f(x){return x===35&&u++<6?(n.consume(x),f):x===null||Je(x)?(n.exit("atxHeadingSequence"),m(x)):r(x)}function m(x){return x===35?(n.enter("atxHeadingSequence"),p(x)):x===null||pe(x)?(n.exit("atxHeading"),a(x)):De(x)?Le(n,m,"whitespace")(x):(n.enter("atxHeadingText"),d(x))}function p(x){return x===35?(n.consume(x),p):(n.exit("atxHeadingSequence"),m(x))}function d(x){return x===null||x===35||Je(x)?(n.exit("atxHeadingText"),m(x)):(n.consume(x),d)}}const cb=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],cp=["pre","script","style","textarea"],ob={concrete:!0,name:"htmlFlow",resolveTo:hb,tokenize:db},sb={partial:!0,tokenize:pb},fb={partial:!0,tokenize:mb};function hb(n){let a=n.length;for(;a--&&!(n[a][0]==="enter"&&n[a][1].type==="htmlFlow"););return a>1&&n[a-2][1].type==="linePrefix"&&(n[a][1].start=n[a-2][1].start,n[a+1][1].start=n[a-2][1].start,n.splice(a-2,2)),n}function db(n,a,r){const u=this;let s,h,f,m,p;return d;function d(_){return x(_)}function x(_){return n.enter("htmlFlow"),n.enter("htmlFlowData"),n.consume(_),y}function y(_){return _===33?(n.consume(_),v):_===47?(n.consume(_),h=!0,U):_===63?(n.consume(_),s=3,u.interrupt?a:E):Tt(_)?(n.consume(_),f=String.fromCharCode(_),V):r(_)}function v(_){return _===45?(n.consume(_),s=2,S):_===91?(n.consume(_),s=5,m=0,C):Tt(_)?(n.consume(_),s=4,u.interrupt?a:E):r(_)}function S(_){return _===45?(n.consume(_),u.interrupt?a:E):r(_)}function C(_){const te="CDATA[";return _===te.charCodeAt(m++)?(n.consume(_),m===te.length?u.interrupt?a:le:C):r(_)}function U(_){return Tt(_)?(n.consume(_),f=String.fromCharCode(_),V):r(_)}function V(_){if(_===null||_===47||_===62||Je(_)){const te=_===47,fe=f.toLowerCase();return!te&&!h&&cp.includes(fe)?(s=1,u.interrupt?a(_):le(_)):cb.includes(f.toLowerCase())?(s=6,te?(n.consume(_),O):u.interrupt?a(_):le(_)):(s=7,u.interrupt&&!u.parser.lazy[u.now().line]?r(_):h?K(_):X(_))}return _===45||_t(_)?(n.consume(_),f+=String.fromCharCode(_),V):r(_)}function O(_){return _===62?(n.consume(_),u.interrupt?a:le):r(_)}function K(_){return De(_)?(n.consume(_),K):R(_)}function X(_){return _===47?(n.consume(_),R):_===58||_===95||Tt(_)?(n.consume(_),ae):De(_)?(n.consume(_),X):R(_)}function ae(_){return _===45||_===46||_===58||_===95||_t(_)?(n.consume(_),ae):ee(_)}function ee(_){return _===61?(n.consume(_),L):De(_)?(n.consume(_),ee):X(_)}function L(_){return _===null||_===60||_===61||_===62||_===96?r(_):_===34||_===39?(n.consume(_),p=_,J):De(_)?(n.consume(_),L):he(_)}function J(_){return _===p?(n.consume(_),p=null,xe):_===null||pe(_)?r(_):(n.consume(_),J)}function he(_){return _===null||_===34||_===39||_===47||_===60||_===61||_===62||_===96||Je(_)?ee(_):(n.consume(_),he)}function xe(_){return _===47||_===62||De(_)?X(_):r(_)}function R(_){return _===62?(n.consume(_),ne):r(_)}function ne(_){return _===null||pe(_)?le(_):De(_)?(n.consume(_),ne):r(_)}function le(_){return _===45&&s===2?(n.consume(_),D):_===60&&s===1?(n.consume(_),F):_===62&&s===4?(n.consume(_),T):_===63&&s===3?(n.consume(_),E):_===93&&s===5?(n.consume(_),Se):pe(_)&&(s===6||s===7)?(n.exit("htmlFlowData"),n.check(sb,q,Ce)(_)):_===null||pe(_)?(n.exit("htmlFlowData"),Ce(_)):(n.consume(_),le)}function Ce(_){return n.check(fb,ue,q)(_)}function ue(_){return n.enter("lineEnding"),n.consume(_),n.exit("lineEnding"),$}function $(_){return _===null||pe(_)?Ce(_):(n.enter("htmlFlowData"),le(_))}function D(_){return _===45?(n.consume(_),E):le(_)}function F(_){return _===47?(n.consume(_),f="",ie):le(_)}function ie(_){if(_===62){const te=f.toLowerCase();return cp.includes(te)?(n.consume(_),T):le(_)}return Tt(_)&&f.length<8?(n.consume(_),f+=String.fromCharCode(_),ie):le(_)}function Se(_){return _===93?(n.consume(_),E):le(_)}function E(_){return _===62?(n.consume(_),T):_===45&&s===2?(n.consume(_),E):le(_)}function T(_){return _===null||pe(_)?(n.exit("htmlFlowData"),q(_)):(n.consume(_),T)}function q(_){return n.exit("htmlFlow"),a(_)}}function mb(n,a,r){const u=this;return s;function s(f){return pe(f)?(n.enter("lineEnding"),n.consume(f),n.exit("lineEnding"),h):r(f)}function h(f){return u.parser.lazy[u.now().line]?r(f):a(f)}}function pb(n,a,r){return u;function u(s){return n.enter("lineEnding"),n.consume(s),n.exit("lineEnding"),n.attempt(Ga,a,r)}}const gb={name:"htmlText",tokenize:yb};function yb(n,a,r){const u=this;let s,h,f;return m;function m(E){return n.enter("htmlText"),n.enter("htmlTextData"),n.consume(E),p}function p(E){return E===33?(n.consume(E),d):E===47?(n.consume(E),ee):E===63?(n.consume(E),X):Tt(E)?(n.consume(E),he):r(E)}function d(E){return E===45?(n.consume(E),x):E===91?(n.consume(E),h=0,C):Tt(E)?(n.consume(E),K):r(E)}function x(E){return E===45?(n.consume(E),S):r(E)}function y(E){return E===null?r(E):E===45?(n.consume(E),v):pe(E)?(f=y,F(E)):(n.consume(E),y)}function v(E){return E===45?(n.consume(E),S):y(E)}function S(E){return E===62?D(E):E===45?v(E):y(E)}function C(E){const T="CDATA[";return E===T.charCodeAt(h++)?(n.consume(E),h===T.length?U:C):r(E)}function U(E){return E===null?r(E):E===93?(n.consume(E),V):pe(E)?(f=U,F(E)):(n.consume(E),U)}function V(E){return E===93?(n.consume(E),O):U(E)}function O(E){return E===62?D(E):E===93?(n.consume(E),O):U(E)}function K(E){return E===null||E===62?D(E):pe(E)?(f=K,F(E)):(n.consume(E),K)}function X(E){return E===null?r(E):E===63?(n.consume(E),ae):pe(E)?(f=X,F(E)):(n.consume(E),X)}function ae(E){return E===62?D(E):X(E)}function ee(E){return Tt(E)?(n.consume(E),L):r(E)}function L(E){return E===45||_t(E)?(n.consume(E),L):J(E)}function J(E){return pe(E)?(f=J,F(E)):De(E)?(n.consume(E),J):D(E)}function he(E){return E===45||_t(E)?(n.consume(E),he):E===47||E===62||Je(E)?xe(E):r(E)}function xe(E){return E===47?(n.consume(E),D):E===58||E===95||Tt(E)?(n.consume(E),R):pe(E)?(f=xe,F(E)):De(E)?(n.consume(E),xe):D(E)}function R(E){return E===45||E===46||E===58||E===95||_t(E)?(n.consume(E),R):ne(E)}function ne(E){return E===61?(n.consume(E),le):pe(E)?(f=ne,F(E)):De(E)?(n.consume(E),ne):xe(E)}function le(E){return E===null||E===60||E===61||E===62||E===96?r(E):E===34||E===39?(n.consume(E),s=E,Ce):pe(E)?(f=le,F(E)):De(E)?(n.consume(E),le):(n.consume(E),ue)}function Ce(E){return E===s?(n.consume(E),s=void 0,$):E===null?r(E):pe(E)?(f=Ce,F(E)):(n.consume(E),Ce)}function ue(E){return E===null||E===34||E===39||E===60||E===61||E===96?r(E):E===47||E===62||Je(E)?xe(E):(n.consume(E),ue)}function $(E){return E===47||E===62||Je(E)?xe(E):r(E)}function D(E){return E===62?(n.consume(E),n.exit("htmlTextData"),n.exit("htmlText"),a):r(E)}function F(E){return n.exit("htmlTextData"),n.enter("lineEnding"),n.consume(E),n.exit("lineEnding"),ie}function ie(E){return De(E)?Le(n,Se,"linePrefix",u.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(E):Se(E)}function Se(E){return n.enter("htmlTextData"),f(E)}}const Ts={name:"labelEnd",resolveAll:Sb,resolveTo:kb,tokenize:_b},xb={tokenize:Eb},bb={tokenize:Ab},vb={tokenize:Tb};function Sb(n){let a=-1;const r=[];for(;++a=3&&(d===null||pe(d))?(n.exit("thematicBreak"),a(d)):r(d)}function p(d){return d===s?(n.consume(d),u++,p):(n.exit("thematicBreakSequence"),De(d)?Le(n,m,"whitespace")(d):m(d))}}const Rt={continuation:{tokenize:Lb},exit:Ub,name:"list",tokenize:Rb},Ob={partial:!0,tokenize:Hb},jb={partial:!0,tokenize:Bb};function Rb(n,a,r){const u=this,s=u.events[u.events.length-1];let h=s&&s[1].type==="linePrefix"?s[2].sliceSerialize(s[1],!0).length:0,f=0;return m;function m(S){const C=u.containerState.type||(S===42||S===43||S===45?"listUnordered":"listOrdered");if(C==="listUnordered"?!u.containerState.marker||S===u.containerState.marker:cs(S)){if(u.containerState.type||(u.containerState.type=C,n.enter(C,{_container:!0})),C==="listUnordered")return n.enter("listItemPrefix"),S===42||S===45?n.check(uu,r,d)(S):d(S);if(!u.interrupt||S===49)return n.enter("listItemPrefix"),n.enter("listItemValue"),p(S)}return r(S)}function p(S){return cs(S)&&++f<10?(n.consume(S),p):(!u.interrupt||f<2)&&(u.containerState.marker?S===u.containerState.marker:S===41||S===46)?(n.exit("listItemValue"),d(S)):r(S)}function d(S){return n.enter("listItemMarker"),n.consume(S),n.exit("listItemMarker"),u.containerState.marker=u.containerState.marker||S,n.check(Ga,u.interrupt?r:x,n.attempt(Ob,v,y))}function x(S){return u.containerState.initialBlankLine=!0,h++,v(S)}function y(S){return De(S)?(n.enter("listItemPrefixWhitespace"),n.consume(S),n.exit("listItemPrefixWhitespace"),v):r(S)}function v(S){return u.containerState.size=h+u.sliceSerialize(n.exit("listItemPrefix"),!0).length,a(S)}}function Lb(n,a,r){const u=this;return u.containerState._closeFlow=void 0,n.check(Ga,s,h);function s(m){return u.containerState.furtherBlankLines=u.containerState.furtherBlankLines||u.containerState.initialBlankLine,Le(n,a,"listItemIndent",u.containerState.size+1)(m)}function h(m){return u.containerState.furtherBlankLines||!De(m)?(u.containerState.furtherBlankLines=void 0,u.containerState.initialBlankLine=void 0,f(m)):(u.containerState.furtherBlankLines=void 0,u.containerState.initialBlankLine=void 0,n.attempt(jb,a,f)(m))}function f(m){return u.containerState._closeFlow=!0,u.interrupt=void 0,Le(n,n.attempt(Rt,a,r),"linePrefix",u.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(m)}}function Bb(n,a,r){const u=this;return Le(n,s,"listItemIndent",u.containerState.size+1);function s(h){const f=u.events[u.events.length-1];return f&&f[1].type==="listItemIndent"&&f[2].sliceSerialize(f[1],!0).length===u.containerState.size?a(h):r(h)}}function Ub(n){n.exit(this.containerState.type)}function Hb(n,a,r){const u=this;return Le(n,s,"listItemPrefixWhitespace",u.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function s(h){const f=u.events[u.events.length-1];return!De(h)&&f&&f[1].type==="listItemPrefixWhitespace"?a(h):r(h)}}const op={name:"setextUnderline",resolveTo:qb,tokenize:Yb};function qb(n,a){let r=n.length,u,s,h;for(;r--;)if(n[r][0]==="enter"){if(n[r][1].type==="content"){u=r;break}n[r][1].type==="paragraph"&&(s=r)}else n[r][1].type==="content"&&n.splice(r,1),!h&&n[r][1].type==="definition"&&(h=r);const f={type:"setextHeading",start:{...n[u][1].start},end:{...n[n.length-1][1].end}};return n[s][1].type="setextHeadingText",h?(n.splice(s,0,["enter",f,a]),n.splice(h+1,0,["exit",n[u][1],a]),n[u][1].end={...n[h][1].end}):n[u][1]=f,n.push(["exit",f,a]),n}function Yb(n,a,r){const u=this;let s;return h;function h(d){let x=u.events.length,y;for(;x--;)if(u.events[x][1].type!=="lineEnding"&&u.events[x][1].type!=="linePrefix"&&u.events[x][1].type!=="content"){y=u.events[x][1].type==="paragraph";break}return!u.parser.lazy[u.now().line]&&(u.interrupt||y)?(n.enter("setextHeadingLine"),s=d,f(d)):r(d)}function f(d){return n.enter("setextHeadingLineSequence"),m(d)}function m(d){return d===s?(n.consume(d),m):(n.exit("setextHeadingLineSequence"),De(d)?Le(n,p,"lineSuffix")(d):p(d))}function p(d){return d===null||pe(d)?(n.exit("setextHeadingLine"),a(d)):r(d)}}const Gb={tokenize:Vb};function Vb(n){const a=this,r=n.attempt(Ga,u,n.attempt(this.parser.constructs.flowInitial,s,Le(n,n.attempt(this.parser.constructs.flow,s,n.attempt(Fx,s)),"linePrefix")));return r;function u(h){if(h===null){n.consume(h);return}return n.enter("lineEndingBlank"),n.consume(h),n.exit("lineEndingBlank"),a.currentConstruct=void 0,r}function s(h){if(h===null){n.consume(h);return}return n.enter("lineEnding"),n.consume(h),n.exit("lineEnding"),a.currentConstruct=void 0,r}}const Qb={resolveAll:sg()},Xb=og("string"),Zb=og("text");function og(n){return{resolveAll:sg(n==="text"?Kb:void 0),tokenize:a};function a(r){const u=this,s=this.parser.constructs[n],h=r.attempt(s,f,m);return f;function f(x){return d(x)?h(x):m(x)}function m(x){if(x===null){r.consume(x);return}return r.enter("data"),r.consume(x),p}function p(x){return d(x)?(r.exit("data"),h(x)):(r.consume(x),p)}function d(x){if(x===null)return!0;const y=s[x];let v=-1;if(y)for(;++v-1){const m=f[0];typeof m=="string"?f[0]=m.slice(u):f.shift()}h>0&&f.push(n[s].slice(0,h))}return f}function rv(n,a){let r=-1;const u=[];let s;for(;++r0){const vt=ge.tokenStack[ge.tokenStack.length-1];(vt[1]||fp).call(ge,void 0,vt[0])}for(W.position={start:gl(Y.length>0?Y[0][1].start:{line:1,column:1,offset:0}),end:gl(Y.length>0?Y[Y.length-2][1].end:{line:1,column:1,offset:0})},Be=-1;++Be0&&(u.className=["language-"+s[0]]);let h={type:"element",tagName:"code",properties:u,children:[{type:"text",value:r}]};return a.meta&&(h.data={meta:a.meta}),n.patch(a,h),h=n.applyData(a,h),h={type:"element",tagName:"pre",properties:{},children:[h]},n.patch(a,h),h}function vv(n,a){const r={type:"element",tagName:"del",properties:{},children:n.all(a)};return n.patch(a,r),n.applyData(a,r)}function Sv(n,a){const r={type:"element",tagName:"em",properties:{},children:n.all(a)};return n.patch(a,r),n.applyData(a,r)}function kv(n,a){const r=typeof n.options.clobberPrefix=="string"?n.options.clobberPrefix:"user-content-",u=String(a.identifier).toUpperCase(),s=Ri(u.toLowerCase()),h=n.footnoteOrder.indexOf(u);let f,m=n.footnoteCounts.get(u);m===void 0?(m=0,n.footnoteOrder.push(u),f=n.footnoteOrder.length):f=h+1,m+=1,n.footnoteCounts.set(u,m);const p={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+s,id:r+"fnref-"+s+(m>1?"-"+m:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(f)}]};n.patch(a,p);const d={type:"element",tagName:"sup",properties:{},children:[p]};return n.patch(a,d),n.applyData(a,d)}function _v(n,a){const r={type:"element",tagName:"h"+a.depth,properties:{},children:n.all(a)};return n.patch(a,r),n.applyData(a,r)}function Ev(n,a){if(n.options.allowDangerousHtml){const r={type:"raw",value:a.value};return n.patch(a,r),n.applyData(a,r)}}function dg(n,a){const r=a.referenceType;let u="]";if(r==="collapsed"?u+="[]":r==="full"&&(u+="["+(a.label||a.identifier)+"]"),a.type==="imageReference")return[{type:"text",value:"!["+a.alt+u}];const s=n.all(a),h=s[0];h&&h.type==="text"?h.value="["+h.value:s.unshift({type:"text",value:"["});const f=s[s.length-1];return f&&f.type==="text"?f.value+=u:s.push({type:"text",value:u}),s}function Av(n,a){const r=String(a.identifier).toUpperCase(),u=n.definitionById.get(r);if(!u)return dg(n,a);const s={src:Ri(u.url||""),alt:a.alt};u.title!==null&&u.title!==void 0&&(s.title=u.title);const h={type:"element",tagName:"img",properties:s,children:[]};return n.patch(a,h),n.applyData(a,h)}function Tv(n,a){const r={src:Ri(a.url)};a.alt!==null&&a.alt!==void 0&&(r.alt=a.alt),a.title!==null&&a.title!==void 0&&(r.title=a.title);const u={type:"element",tagName:"img",properties:r,children:[]};return n.patch(a,u),n.applyData(a,u)}function zv(n,a){const r={type:"text",value:a.value.replace(/\r?\n|\r/g," ")};n.patch(a,r);const u={type:"element",tagName:"code",properties:{},children:[r]};return n.patch(a,u),n.applyData(a,u)}function Cv(n,a){const r=String(a.identifier).toUpperCase(),u=n.definitionById.get(r);if(!u)return dg(n,a);const s={href:Ri(u.url||"")};u.title!==null&&u.title!==void 0&&(s.title=u.title);const h={type:"element",tagName:"a",properties:s,children:n.all(a)};return n.patch(a,h),n.applyData(a,h)}function wv(n,a){const r={href:Ri(a.url)};a.title!==null&&a.title!==void 0&&(r.title=a.title);const u={type:"element",tagName:"a",properties:r,children:n.all(a)};return n.patch(a,u),n.applyData(a,u)}function Mv(n,a,r){const u=n.all(a),s=r?Nv(r):mg(a),h={},f=[];if(typeof a.checked=="boolean"){const x=u[0];let y;x&&x.type==="element"&&x.tagName==="p"?y=x:(y={type:"element",tagName:"p",properties:{},children:[]},u.unshift(y)),y.children.length>0&&y.children.unshift({type:"text",value:" "}),y.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:a.checked,disabled:!0},children:[]}),h.className=["task-list-item"]}let m=-1;for(;++m1}function Dv(n,a){const r={},u=n.all(a);let s=-1;for(typeof a.start=="number"&&a.start!==1&&(r.start=a.start);++s0){const f={type:"element",tagName:"tbody",properties:{},children:n.wrap(r,!0)},m=vs(a.children[1]),p=Kp(a.children[a.children.length-1]);m&&p&&(f.position={start:m,end:p}),s.push(f)}const h={type:"element",tagName:"table",properties:{},children:n.wrap(s,!0)};return n.patch(a,h),n.applyData(a,h)}function Bv(n,a,r){const u=r?r.children:void 0,h=(u?u.indexOf(a):1)===0?"th":"td",f=r&&r.type==="table"?r.align:void 0,m=f?f.length:a.children.length;let p=-1;const d=[];for(;++p0,!0),u[0]),s=u.index+u[0].length,u=r.exec(a);return h.push(mp(a.slice(s),s>0,!1)),h.join("")}function mp(n,a,r){let u=0,s=n.length;if(a){let h=n.codePointAt(u);for(;h===hp||h===dp;)u++,h=n.codePointAt(u)}if(r){let h=n.codePointAt(s-1);for(;h===hp||h===dp;)s--,h=n.codePointAt(s-1)}return s>u?n.slice(u,s):""}function qv(n,a){const r={type:"text",value:Hv(String(a.value))};return n.patch(a,r),n.applyData(a,r)}function Yv(n,a){const r={type:"element",tagName:"hr",properties:{},children:[]};return n.patch(a,r),n.applyData(a,r)}const Gv={blockquote:yv,break:xv,code:bv,delete:vv,emphasis:Sv,footnoteReference:kv,heading:_v,html:Ev,imageReference:Av,image:Tv,inlineCode:zv,linkReference:Cv,link:wv,listItem:Mv,list:Dv,paragraph:Ov,root:jv,strong:Rv,table:Lv,tableCell:Uv,tableRow:Bv,text:qv,thematicBreak:Yv,toml:nu,yaml:nu,definition:nu,footnoteDefinition:nu};function nu(){}const pg=-1,gu=0,Ua=1,su=2,zs=3,Cs=4,ws=5,Ms=6,gg=7,yg=8,xg=typeof self=="object"?self:globalThis,pp=(n,a)=>{switch(n){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+n)}return new xg[n](a)},Vv=(n,a)=>{const r=(s,h)=>(n.set(h,s),s),u=s=>{if(n.has(s))return n.get(s);const[h,f]=a[s];switch(h){case gu:case pg:return r(f,s);case Ua:{const m=r([],s);for(const p of f)m.push(u(p));return m}case su:{const m=r({},s);for(const[p,d]of f)m[u(p)]=u(d);return m}case zs:return r(new Date(f),s);case Cs:{const{source:m,flags:p}=f;return r(new RegExp(m,p),s)}case ws:{const m=r(new Map,s);for(const[p,d]of f)m.set(u(p),u(d));return m}case Ms:{const m=r(new Set,s);for(const p of f)m.add(u(p));return m}case gg:{const{name:m,message:p}=f;return r(typeof xg[m]=="function"?pp(m,p):new Error(p),s)}case yg:return r(BigInt(f),s);case"BigInt":return r(Object(BigInt(f)),s);case"ArrayBuffer":return r(new Uint8Array(f).buffer,f);case"DataView":{const{buffer:m}=new Uint8Array(f);return r(new DataView(m),f)}}return r(pp(h,f),s)};return u},gp=n=>Vv(new Map,n)(0),ql="",{toString:Qv}={},{keys:Xv}=Object,Ra=n=>{const a=typeof n;if(a!=="object"||!n)return[gu,a];const r=Qv.call(n).slice(8,-1);switch(r){case"Array":return[Ua,ql];case"Object":return[su,ql];case"Date":return[zs,ql];case"RegExp":return[Cs,ql];case"Map":return[ws,ql];case"Set":return[Ms,ql];case"DataView":return[Ua,r]}return r.includes("Array")?[Ua,r]:n instanceof Error?[gg,n.name||"Error"]:[su,r]},lu=([n,a])=>n===gu&&(a==="function"||a==="symbol"),Zv=(n,a,r,u)=>{const s=(f,m)=>{const p=u.push(f)-1;return r.set(m,p),p},h=f=>{if(r.has(f))return r.get(f);let[m,p]=Ra(f);switch(m){case gu:{let x=f;switch(p){case"bigint":m=yg,x=f.toString();break;case"function":case"symbol":if(n)throw new TypeError("unable to serialize "+p);x=null;break;case"undefined":return s([pg],f)}return s([m,x],f)}case Ua:{if(p){let v=f;return p==="DataView"?v=new Uint8Array(f.buffer):p==="ArrayBuffer"&&(v=new Uint8Array(f)),s([p,[...v]],f)}const x=[],y=s([m,x],f);for(const v of f)x.push(h(v));return y}case su:{if(p)switch(p){case"BigInt":return s([p,f.toString()],f);case"Boolean":case"Number":case"String":return s([p,f.valueOf()],f)}if(a&&"toJSON"in f)return h(f.toJSON());const x=[],y=s([m,x],f);for(const v of Xv(f))(n||!lu(Ra(f[v])))&&x.push([h(v),h(f[v])]);return y}case zs:return s([m,isNaN(f.getTime())?ql:f.toISOString()],f);case Cs:{const{source:x,flags:y}=f;return s([m,{source:x,flags:y}],f)}case ws:{const x=[],y=s([m,x],f);for(const[v,S]of f)(n||!(lu(Ra(v))||lu(Ra(S))))&&x.push([h(v),h(S)]);return y}case Ms:{const x=[],y=s([m,x],f);for(const v of f)(n||!lu(Ra(v)))&&x.push(h(v));return y}}const{message:d}=f;return s([m,{name:p,message:d}],f)};return h},yp=(n,{json:a,lossy:r}={})=>{const u=[];return Zv(!(a||r),!!a,new Map,u)(n),u},fu=typeof structuredClone=="function"?(n,a)=>a&&("json"in a||"lossy"in a)?gp(yp(n,a)):structuredClone(n):(n,a)=>gp(yp(n,a));function Kv(n,a){const r=[{type:"text",value:"↩"}];return a>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(a)}]}),r}function Fv(n,a){return"Back to reference "+(n+1)+(a>1?"-"+a:"")}function Jv(n){const a=typeof n.options.clobberPrefix=="string"?n.options.clobberPrefix:"user-content-",r=n.options.footnoteBackContent||Kv,u=n.options.footnoteBackLabel||Fv,s=n.options.footnoteLabel||"Footnotes",h=n.options.footnoteLabelTagName||"h2",f=n.options.footnoteLabelProperties||{className:["sr-only"]},m=[];let p=-1;for(;++p0&&C.push({type:"text",value:" "});let K=typeof r=="string"?r:r(p,S);typeof K=="string"&&(K={type:"text",value:K}),C.push({type:"element",tagName:"a",properties:{href:"#"+a+"fnref-"+v+(S>1?"-"+S:""),dataFootnoteBackref:"",ariaLabel:typeof u=="string"?u:u(p,S),className:["data-footnote-backref"]},children:Array.isArray(K)?K:[K]})}const V=x[x.length-1];if(V&&V.type==="element"&&V.tagName==="p"){const K=V.children[V.children.length-1];K&&K.type==="text"?K.value+=" ":V.children.push({type:"text",value:" "}),V.children.push(...C)}else x.push(...C);const O={type:"element",tagName:"li",properties:{id:a+"fn-"+v},children:n.wrap(x,!0)};n.patch(d,O),m.push(O)}if(m.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:h,properties:{...fu(f),id:"footnote-label"},children:[{type:"text",value:s}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:n.wrap(m,!0)},{type:"text",value:` -`}]}}const yu=(function(n){if(n==null)return Pv;if(typeof n=="function")return xu(n);if(typeof n=="object")return Array.isArray(n)?Iv(n):$v(n);if(typeof n=="string")return Wv(n);throw new Error("Expected function, string, or object as test")});function Iv(n){const a=[];let r=-1;for(;++r":""))+")"})}return v;function v(){let S=bg,C,U,V;if((!a||h(p,d,x[x.length-1]||void 0))&&(S=lS(r(p,x)),S[0]===ss))return S;if("children"in p&&p.children){const O=p;if(O.children&&S[0]!==nS)for(U=(u?O.children.length:-1)+f,V=x.concat(O);U>-1&&U0&&r.push({type:"text",value:` -`}),r}function xp(n){let a=0,r=n.charCodeAt(a);for(;r===9||r===32;)a++,r=n.charCodeAt(a);return n.slice(a)}function bp(n,a){const r=aS(n,a),u=r.one(n,void 0),s=Jv(r),h=Array.isArray(u)?{type:"root",children:u}:u||{type:"root",children:[]};return s&&h.children.push({type:"text",value:` -`},s),h}function sS(n,a){return n&&"run"in n?async function(r,u){const s=bp(r,{file:u,...a});await n.run(s,u)}:function(r,u){return bp(r,{file:u,...n||a})}}function vp(n){if(n)throw n}var Qo,Sp;function fS(){if(Sp)return Qo;Sp=1;var n=Object.prototype.hasOwnProperty,a=Object.prototype.toString,r=Object.defineProperty,u=Object.getOwnPropertyDescriptor,s=function(d){return typeof Array.isArray=="function"?Array.isArray(d):a.call(d)==="[object Array]"},h=function(d){if(!d||a.call(d)!=="[object Object]")return!1;var x=n.call(d,"constructor"),y=d.constructor&&d.constructor.prototype&&n.call(d.constructor.prototype,"isPrototypeOf");if(d.constructor&&!x&&!y)return!1;var v;for(v in d);return typeof v>"u"||n.call(d,v)},f=function(d,x){r&&x.name==="__proto__"?r(d,x.name,{enumerable:!0,configurable:!0,value:x.newValue,writable:!0}):d[x.name]=x.newValue},m=function(d,x){if(x==="__proto__")if(n.call(d,x)){if(u)return u(d,x).value}else return;return d[x]};return Qo=function p(){var d,x,y,v,S,C,U=arguments[0],V=1,O=arguments.length,K=!1;for(typeof U=="boolean"&&(K=U,U=arguments[1]||{},V=2),(U==null||typeof U!="object"&&typeof U!="function")&&(U={});Vf.length;let p;m&&f.push(s);try{p=n.apply(this,f)}catch(d){const x=d;if(m&&r)throw x;return s(x)}m||(p&&p.then&&typeof p.then=="function"?p.then(h,s):p instanceof Error?s(p):h(p))}function s(f,...m){r||(r=!0,a(f,...m))}function h(f){s(null,f)}}const xn={basename:pS,dirname:gS,extname:yS,join:xS,sep:"/"};function pS(n,a){if(a!==void 0&&typeof a!="string")throw new TypeError('"ext" argument must be a string');Va(n);let r=0,u=-1,s=n.length,h;if(a===void 0||a.length===0||a.length>n.length){for(;s--;)if(n.codePointAt(s)===47){if(h){r=s+1;break}}else u<0&&(h=!0,u=s+1);return u<0?"":n.slice(r,u)}if(a===n)return"";let f=-1,m=a.length-1;for(;s--;)if(n.codePointAt(s)===47){if(h){r=s+1;break}}else f<0&&(h=!0,f=s+1),m>-1&&(n.codePointAt(s)===a.codePointAt(m--)?m<0&&(u=s):(m=-1,u=f));return r===u?u=f:u<0&&(u=n.length),n.slice(r,u)}function gS(n){if(Va(n),n.length===0)return".";let a=-1,r=n.length,u;for(;--r;)if(n.codePointAt(r)===47){if(u){a=r;break}}else u||(u=!0);return a<0?n.codePointAt(0)===47?"/":".":a===1&&n.codePointAt(0)===47?"//":n.slice(0,a)}function yS(n){Va(n);let a=n.length,r=-1,u=0,s=-1,h=0,f;for(;a--;){const m=n.codePointAt(a);if(m===47){if(f){u=a+1;break}continue}r<0&&(f=!0,r=a+1),m===46?s<0?s=a:h!==1&&(h=1):s>-1&&(h=-1)}return s<0||r<0||h===0||h===1&&s===r-1&&s===u+1?"":n.slice(s,r)}function xS(...n){let a=-1,r;for(;++a0&&n.codePointAt(n.length-1)===47&&(r+="/"),a?"/"+r:r}function vS(n,a){let r="",u=0,s=-1,h=0,f=-1,m,p;for(;++f<=n.length;){if(f2){if(p=r.lastIndexOf("/"),p!==r.length-1){p<0?(r="",u=0):(r=r.slice(0,p),u=r.length-1-r.lastIndexOf("/")),s=f,h=0;continue}}else if(r.length>0){r="",u=0,s=f,h=0;continue}}a&&(r=r.length>0?r+"/..":"..",u=2)}else r.length>0?r+="/"+n.slice(s+1,f):r=n.slice(s+1,f),u=f-s-1;s=f,h=0}else m===46&&h>-1?h++:h=-1}return r}function Va(n){if(typeof n!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(n))}const SS={cwd:kS};function kS(){return"/"}function ds(n){return!!(n!==null&&typeof n=="object"&&"href"in n&&n.href&&"protocol"in n&&n.protocol&&n.auth===void 0)}function _S(n){if(typeof n=="string")n=new URL(n);else if(!ds(n)){const a=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+n+"`");throw a.code="ERR_INVALID_ARG_TYPE",a}if(n.protocol!=="file:"){const a=new TypeError("The URL must be of scheme file");throw a.code="ERR_INVALID_URL_SCHEME",a}return ES(n)}function ES(n){if(n.hostname!==""){const u=new TypeError('File URL host must be "localhost" or empty on darwin');throw u.code="ERR_INVALID_FILE_URL_HOST",u}const a=n.pathname;let r=-1;for(;++r0){let[S,...C]=x;const U=u[v][1];hs(U)&&hs(S)&&(S=Xo(!0,U,S)),u[v]=[d,S,...C]}}}}const CS=new Ds().freeze();function Jo(n,a){if(typeof a!="function")throw new TypeError("Cannot `"+n+"` without `parser`")}function Io(n,a){if(typeof a!="function")throw new TypeError("Cannot `"+n+"` without `compiler`")}function $o(n,a){if(a)throw new Error("Cannot call `"+n+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function _p(n){if(!hs(n)||typeof n.type!="string")throw new TypeError("Expected node, got `"+n+"`")}function Ep(n,a,r){if(!r)throw new Error("`"+n+"` finished async. Use `"+a+"` instead")}function iu(n){return wS(n)?n:new Sg(n)}function wS(n){return!!(n&&typeof n=="object"&&"message"in n&&"messages"in n)}function MS(n){return typeof n=="string"||NS(n)}function NS(n){return!!(n&&typeof n=="object"&&"byteLength"in n&&"byteOffset"in n)}const DS="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Ap=[],Tp={allowDangerousHtml:!0},OS=/^(https?|ircs?|mailto|xmpp)$/i,jS=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function RS(n){const a=LS(n),r=BS(n);return US(a.runSync(a.parse(r),r),n)}function LS(n){const a=n.rehypePlugins||Ap,r=n.remarkPlugins||Ap,u=n.remarkRehypeOptions?{...n.remarkRehypeOptions,...Tp}:Tp;return CS().use(gv).use(r).use(sS,u).use(a)}function BS(n){const a=n.children||"",r=new Sg;return typeof a=="string"&&(r.value=a),r}function US(n,a){const r=a.allowedElements,u=a.allowElement,s=a.components,h=a.disallowedElements,f=a.skipHtml,m=a.unwrapDisallowed,p=a.urlTransform||HS;for(const x of jS)Object.hasOwn(a,x.from)&&(""+x.from+(x.to?"use `"+x.to+"` instead":"remove it")+DS+x.id,void 0);return Ns(n,d),P0(n,{Fragment:k.Fragment,components:s,ignoreInvalidStyle:!0,jsx:k.jsx,jsxs:k.jsxs,passKeys:!0,passNode:!0});function d(x,y,v){if(x.type==="raw"&&v&&typeof y=="number")return f?v.children.splice(y,1):v.children[y]={type:"text",value:x.value},y;if(x.type==="element"){let S;for(S in Yo)if(Object.hasOwn(Yo,S)&&Object.hasOwn(x.properties,S)){const C=x.properties[S],U=Yo[S];(U===null||U.includes(x.tagName))&&(x.properties[S]=p(String(C||""),S,x))}}if(x.type==="element"){let S=r?!r.includes(x.tagName):h?h.includes(x.tagName):!1;if(!S&&u&&typeof y=="number"&&(S=!u(x,y,v)),S&&v&&typeof y=="number")return m&&x.children?v.children.splice(y,1,...x.children):v.children.splice(y,1),y}}}function HS(n){const a=n.indexOf(":"),r=n.indexOf("?"),u=n.indexOf("#"),s=n.indexOf("/");return a===-1||s!==-1&&a>s||r!==-1&&a>r||u!==-1&&a>u||OS.test(n.slice(0,a))?n:""}function zp(n,a){const r=String(n);if(typeof a!="string")throw new TypeError("Expected character");let u=0,s=r.indexOf(a);for(;s!==-1;)u++,s=r.indexOf(a,s+a.length);return u}function qS(n){if(typeof n!="string")throw new TypeError("Expected a string");return n.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function YS(n,a,r){const s=yu((r||{}).ignore||[]),h=GS(a);let f=-1;for(;++f0?{type:"text",value:L}:void 0),L===!1?v.lastIndex=ae+1:(C!==ae&&K.push({type:"text",value:d.value.slice(C,ae)}),Array.isArray(L)?K.push(...L):L&&K.push(L),C=ae+X[0].length,O=!0),!v.global)break;X=v.exec(d.value)}return O?(C?\]}]+$/.exec(n);if(!a)return[n,void 0];n=n.slice(0,a.index);let r=a[0],u=r.indexOf(")");const s=zp(n,"(");let h=zp(n,")");for(;u!==-1&&s>h;)n+=r.slice(0,u+1),r=r.slice(u+1),u=r.indexOf(")"),h++;return[n,r]}function kg(n,a){const r=n.input.charCodeAt(n.index-1);return(n.index===0||Gl(r)||mu(r))&&(!a||r!==47)}_g.peek=f2;function l2(){this.buffer()}function i2(n){this.enter({type:"footnoteReference",identifier:"",label:""},n)}function a2(){this.buffer()}function r2(n){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},n)}function u2(n){const a=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=sn(this.sliceSerialize(n)).toLowerCase(),r.label=a}function c2(n){this.exit(n)}function o2(n){const a=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=sn(this.sliceSerialize(n)).toLowerCase(),r.label=a}function s2(n){this.exit(n)}function f2(){return"["}function _g(n,a,r,u){const s=r.createTracker(u);let h=s.move("[^");const f=r.enter("footnoteReference"),m=r.enter("reference");return h+=s.move(r.safe(r.associationId(n),{after:"]",before:h})),m(),f(),h+=s.move("]"),h}function h2(){return{enter:{gfmFootnoteCallString:l2,gfmFootnoteCall:i2,gfmFootnoteDefinitionLabelString:a2,gfmFootnoteDefinition:r2},exit:{gfmFootnoteCallString:u2,gfmFootnoteCall:c2,gfmFootnoteDefinitionLabelString:o2,gfmFootnoteDefinition:s2}}}function d2(n){let a=!1;return n&&n.firstLineBlank&&(a=!0),{handlers:{footnoteDefinition:r,footnoteReference:_g},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(u,s,h,f){const m=h.createTracker(f);let p=m.move("[^");const d=h.enter("footnoteDefinition"),x=h.enter("label");return p+=m.move(h.safe(h.associationId(u),{before:p,after:"]"})),x(),p+=m.move("]:"),u.children&&u.children.length>0&&(m.shift(4),p+=m.move((a?` -`:" ")+h.indentLines(h.containerFlow(u,m.current()),a?Eg:m2))),d(),p}}function m2(n,a,r){return a===0?n:Eg(n,a,r)}function Eg(n,a,r){return(r?"":" ")+n}const p2=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Ag.peek=v2;function g2(){return{canContainEols:["delete"],enter:{strikethrough:x2},exit:{strikethrough:b2}}}function y2(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:p2}],handlers:{delete:Ag}}}function x2(n){this.enter({type:"delete",children:[]},n)}function b2(n){this.exit(n)}function Ag(n,a,r,u){const s=r.createTracker(u),h=r.enter("strikethrough");let f=s.move("~~");return f+=r.containerPhrasing(n,{...s.current(),before:f,after:"~"}),f+=s.move("~~"),h(),f}function v2(){return"~"}function S2(n){return n.length}function k2(n,a){const r=a||{},u=(r.align||[]).concat(),s=r.stringLength||S2,h=[],f=[],m=[],p=[];let d=0,x=-1;for(;++xd&&(d=n[x].length);++Op[O])&&(p[O]=X)}U.push(K)}f[x]=U,m[x]=V}let y=-1;if(typeof u=="object"&&"length"in u)for(;++yp[y]&&(p[y]=K),S[y]=K),v[y]=X}f.splice(1,0,v),m.splice(1,0,S),x=-1;const C=[];for(;++x "),h.shift(2);const f=r.indentLines(r.containerFlow(n,h.current()),A2);return s(),f}function A2(n,a,r){return">"+(r?"":" ")+n}function T2(n,a){return wp(n,a.inConstruct,!0)&&!wp(n,a.notInConstruct,!1)}function wp(n,a,r){if(typeof a=="string"&&(a=[a]),!a||a.length===0)return r;let u=-1;for(;++uf&&(f=h):h=1,s=u+a.length,u=r.indexOf(a,s);return f}function C2(n,a){return!!(a.options.fences===!1&&n.value&&!n.lang&&/[^ \r\n]/.test(n.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(n.value))}function w2(n){const a=n.options.fence||"`";if(a!=="`"&&a!=="~")throw new Error("Cannot serialize code with `"+a+"` for `options.fence`, expected `` ` `` or `~`");return a}function M2(n,a,r,u){const s=w2(r),h=n.value||"",f=s==="`"?"GraveAccent":"Tilde";if(C2(n,r)){const y=r.enter("codeIndented"),v=r.indentLines(h,N2);return y(),v}const m=r.createTracker(u),p=s.repeat(Math.max(z2(h,s)+1,3)),d=r.enter("codeFenced");let x=m.move(p);if(n.lang){const y=r.enter(`codeFencedLang${f}`);x+=m.move(r.safe(n.lang,{before:x,after:" ",encode:["`"],...m.current()})),y()}if(n.lang&&n.meta){const y=r.enter(`codeFencedMeta${f}`);x+=m.move(" "),x+=m.move(r.safe(n.meta,{before:x,after:` -`,encode:["`"],...m.current()})),y()}return x+=m.move(` -`),h&&(x+=m.move(h+` -`)),x+=m.move(p),d(),x}function N2(n,a,r){return(r?"":" ")+n}function Os(n){const a=n.options.quote||'"';if(a!=='"'&&a!=="'")throw new Error("Cannot serialize title with `"+a+"` for `options.quote`, expected `\"`, or `'`");return a}function D2(n,a,r,u){const s=Os(r),h=s==='"'?"Quote":"Apostrophe",f=r.enter("definition");let m=r.enter("label");const p=r.createTracker(u);let d=p.move("[");return d+=p.move(r.safe(r.associationId(n),{before:d,after:"]",...p.current()})),d+=p.move("]: "),m(),!n.url||/[\0- \u007F]/.test(n.url)?(m=r.enter("destinationLiteral"),d+=p.move("<"),d+=p.move(r.safe(n.url,{before:d,after:">",...p.current()})),d+=p.move(">")):(m=r.enter("destinationRaw"),d+=p.move(r.safe(n.url,{before:d,after:n.title?" ":` -`,...p.current()}))),m(),n.title&&(m=r.enter(`title${h}`),d+=p.move(" "+s),d+=p.move(r.safe(n.title,{before:d,after:s,...p.current()})),d+=p.move(s),m()),f(),d}function O2(n){const a=n.options.emphasis||"*";if(a!=="*"&&a!=="_")throw new Error("Cannot serialize emphasis with `"+a+"` for `options.emphasis`, expected `*`, or `_`");return a}function qa(n){return"&#x"+n.toString(16).toUpperCase()+";"}function hu(n,a,r){const u=Di(n),s=Di(a);return u===void 0?s===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:u===1?s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Tg.peek=j2;function Tg(n,a,r,u){const s=O2(r),h=r.enter("emphasis"),f=r.createTracker(u),m=f.move(s);let p=f.move(r.containerPhrasing(n,{after:s,before:m,...f.current()}));const d=p.charCodeAt(0),x=hu(u.before.charCodeAt(u.before.length-1),d,s);x.inside&&(p=qa(d)+p.slice(1));const y=p.charCodeAt(p.length-1),v=hu(u.after.charCodeAt(0),y,s);v.inside&&(p=p.slice(0,-1)+qa(y));const S=f.move(s);return h(),r.attentionEncodeSurroundingInfo={after:v.outside,before:x.outside},m+p+S}function j2(n,a,r){return r.options.emphasis||"*"}function R2(n,a){let r=!1;return Ns(n,function(u){if("value"in u&&/\r?\n|\r/.test(u.value)||u.type==="break")return r=!0,ss}),!!((!n.depth||n.depth<3)&&Es(n)&&(a.options.setext||r))}function L2(n,a,r,u){const s=Math.max(Math.min(6,n.depth||1),1),h=r.createTracker(u);if(R2(n,r)){const x=r.enter("headingSetext"),y=r.enter("phrasing"),v=r.containerPhrasing(n,{...h.current(),before:` -`,after:` -`});return y(),x(),v+` -`+(s===1?"=":"-").repeat(v.length-(Math.max(v.lastIndexOf("\r"),v.lastIndexOf(` -`))+1))}const f="#".repeat(s),m=r.enter("headingAtx"),p=r.enter("phrasing");h.move(f+" ");let d=r.containerPhrasing(n,{before:"# ",after:` -`,...h.current()});return/^[\t ]/.test(d)&&(d=qa(d.charCodeAt(0))+d.slice(1)),d=d?f+" "+d:f,r.options.closeAtx&&(d+=" "+f),p(),m(),d}zg.peek=B2;function zg(n){return n.value||""}function B2(){return"<"}Cg.peek=U2;function Cg(n,a,r,u){const s=Os(r),h=s==='"'?"Quote":"Apostrophe",f=r.enter("image");let m=r.enter("label");const p=r.createTracker(u);let d=p.move("![");return d+=p.move(r.safe(n.alt,{before:d,after:"]",...p.current()})),d+=p.move("]("),m(),!n.url&&n.title||/[\0- \u007F]/.test(n.url)?(m=r.enter("destinationLiteral"),d+=p.move("<"),d+=p.move(r.safe(n.url,{before:d,after:">",...p.current()})),d+=p.move(">")):(m=r.enter("destinationRaw"),d+=p.move(r.safe(n.url,{before:d,after:n.title?" ":")",...p.current()}))),m(),n.title&&(m=r.enter(`title${h}`),d+=p.move(" "+s),d+=p.move(r.safe(n.title,{before:d,after:s,...p.current()})),d+=p.move(s),m()),d+=p.move(")"),f(),d}function U2(){return"!"}wg.peek=H2;function wg(n,a,r,u){const s=n.referenceType,h=r.enter("imageReference");let f=r.enter("label");const m=r.createTracker(u);let p=m.move("![");const d=r.safe(n.alt,{before:p,after:"]",...m.current()});p+=m.move(d+"]["),f();const x=r.stack;r.stack=[],f=r.enter("reference");const y=r.safe(r.associationId(n),{before:p,after:"]",...m.current()});return f(),r.stack=x,h(),s==="full"||!d||d!==y?p+=m.move(y+"]"):s==="shortcut"?p=p.slice(0,-1):p+=m.move("]"),p}function H2(){return"!"}Mg.peek=q2;function Mg(n,a,r){let u=n.value||"",s="`",h=-1;for(;new RegExp("(^|[^`])"+s+"([^`]|$)").test(u);)s+="`";for(/[^ \r\n]/.test(u)&&(/^[ \r\n]/.test(u)&&/[ \r\n]$/.test(u)||/^`|`$/.test(u))&&(u=" "+u+" ");++h\u007F]/.test(n.url))}Dg.peek=Y2;function Dg(n,a,r,u){const s=Os(r),h=s==='"'?"Quote":"Apostrophe",f=r.createTracker(u);let m,p;if(Ng(n,r)){const x=r.stack;r.stack=[],m=r.enter("autolink");let y=f.move("<");return y+=f.move(r.containerPhrasing(n,{before:y,after:">",...f.current()})),y+=f.move(">"),m(),r.stack=x,y}m=r.enter("link"),p=r.enter("label");let d=f.move("[");return d+=f.move(r.containerPhrasing(n,{before:d,after:"](",...f.current()})),d+=f.move("]("),p(),!n.url&&n.title||/[\0- \u007F]/.test(n.url)?(p=r.enter("destinationLiteral"),d+=f.move("<"),d+=f.move(r.safe(n.url,{before:d,after:">",...f.current()})),d+=f.move(">")):(p=r.enter("destinationRaw"),d+=f.move(r.safe(n.url,{before:d,after:n.title?" ":")",...f.current()}))),p(),n.title&&(p=r.enter(`title${h}`),d+=f.move(" "+s),d+=f.move(r.safe(n.title,{before:d,after:s,...f.current()})),d+=f.move(s),p()),d+=f.move(")"),m(),d}function Y2(n,a,r){return Ng(n,r)?"<":"["}Og.peek=G2;function Og(n,a,r,u){const s=n.referenceType,h=r.enter("linkReference");let f=r.enter("label");const m=r.createTracker(u);let p=m.move("[");const d=r.containerPhrasing(n,{before:p,after:"]",...m.current()});p+=m.move(d+"]["),f();const x=r.stack;r.stack=[],f=r.enter("reference");const y=r.safe(r.associationId(n),{before:p,after:"]",...m.current()});return f(),r.stack=x,h(),s==="full"||!d||d!==y?p+=m.move(y+"]"):s==="shortcut"?p=p.slice(0,-1):p+=m.move("]"),p}function G2(){return"["}function js(n){const a=n.options.bullet||"*";if(a!=="*"&&a!=="+"&&a!=="-")throw new Error("Cannot serialize items with `"+a+"` for `options.bullet`, expected `*`, `+`, or `-`");return a}function V2(n){const a=js(n),r=n.options.bulletOther;if(!r)return a==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===a)throw new Error("Expected `bullet` (`"+a+"`) and `bulletOther` (`"+r+"`) to be different");return r}function Q2(n){const a=n.options.bulletOrdered||".";if(a!=="."&&a!==")")throw new Error("Cannot serialize items with `"+a+"` for `options.bulletOrdered`, expected `.` or `)`");return a}function jg(n){const a=n.options.rule||"*";if(a!=="*"&&a!=="-"&&a!=="_")throw new Error("Cannot serialize rules with `"+a+"` for `options.rule`, expected `*`, `-`, or `_`");return a}function X2(n,a,r,u){const s=r.enter("list"),h=r.bulletCurrent;let f=n.ordered?Q2(r):js(r);const m=n.ordered?f==="."?")":".":V2(r);let p=a&&r.bulletLastUsed?f===r.bulletLastUsed:!1;if(!n.ordered){const x=n.children?n.children[0]:void 0;if((f==="*"||f==="-")&&x&&(!x.children||!x.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(p=!0),jg(r)===f&&x){let y=-1;for(;++y-1?a.start:1)+(r.options.incrementListMarker===!1?0:a.children.indexOf(n))+h);let f=h.length+1;(s==="tab"||s==="mixed"&&(a&&a.type==="list"&&a.spread||n.spread))&&(f=Math.ceil(f/4)*4);const m=r.createTracker(u);m.move(h+" ".repeat(f-h.length)),m.shift(f);const p=r.enter("listItem"),d=r.indentLines(r.containerFlow(n,m.current()),x);return p(),d;function x(y,v,S){return v?(S?"":" ".repeat(f))+y:(S?h:h+" ".repeat(f-h.length))+y}}function F2(n,a,r,u){const s=r.enter("paragraph"),h=r.enter("phrasing"),f=r.containerPhrasing(n,u);return h(),s(),f}const J2=yu(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function I2(n,a,r,u){return(n.children.some(function(f){return J2(f)})?r.containerPhrasing:r.containerFlow).call(r,n,u)}function $2(n){const a=n.options.strong||"*";if(a!=="*"&&a!=="_")throw new Error("Cannot serialize strong with `"+a+"` for `options.strong`, expected `*`, or `_`");return a}Rg.peek=W2;function Rg(n,a,r,u){const s=$2(r),h=r.enter("strong"),f=r.createTracker(u),m=f.move(s+s);let p=f.move(r.containerPhrasing(n,{after:s,before:m,...f.current()}));const d=p.charCodeAt(0),x=hu(u.before.charCodeAt(u.before.length-1),d,s);x.inside&&(p=qa(d)+p.slice(1));const y=p.charCodeAt(p.length-1),v=hu(u.after.charCodeAt(0),y,s);v.inside&&(p=p.slice(0,-1)+qa(y));const S=f.move(s+s);return h(),r.attentionEncodeSurroundingInfo={after:v.outside,before:x.outside},m+p+S}function W2(n,a,r){return r.options.strong||"*"}function P2(n,a,r,u){return r.safe(n.value,u)}function ek(n){const a=n.options.ruleRepetition||3;if(a<3)throw new Error("Cannot serialize rules with repetition `"+a+"` for `options.ruleRepetition`, expected `3` or more");return a}function tk(n,a,r){const u=(jg(r)+(r.options.ruleSpaces?" ":"")).repeat(ek(r));return r.options.ruleSpaces?u.slice(0,-1):u}const Lg={blockquote:E2,break:Mp,code:M2,definition:D2,emphasis:Tg,hardBreak:Mp,heading:L2,html:zg,image:Cg,imageReference:wg,inlineCode:Mg,link:Dg,linkReference:Og,list:X2,listItem:K2,paragraph:F2,root:I2,strong:Rg,text:P2,thematicBreak:tk};function nk(){return{enter:{table:lk,tableData:Np,tableHeader:Np,tableRow:ak},exit:{codeText:rk,table:ik,tableData:ts,tableHeader:ts,tableRow:ts}}}function lk(n){const a=n._align;this.enter({type:"table",align:a.map(function(r){return r==="none"?null:r}),children:[]},n),this.data.inTable=!0}function ik(n){this.exit(n),this.data.inTable=void 0}function ak(n){this.enter({type:"tableRow",children:[]},n)}function ts(n){this.exit(n)}function Np(n){this.enter({type:"tableCell",children:[]},n)}function rk(n){let a=this.resume();this.data.inTable&&(a=a.replace(/\\([\\|])/g,uk));const r=this.stack[this.stack.length-1];r.type,r.value=a,this.exit(n)}function uk(n,a){return a==="|"?a:n}function ck(n){const a=n||{},r=a.tableCellPadding,u=a.tablePipeAlign,s=a.stringLength,h=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:v,table:f,tableCell:p,tableRow:m}};function f(S,C,U,V){return d(x(S,U,V),S.align)}function m(S,C,U,V){const O=y(S,U,V),K=d([O]);return K.slice(0,K.indexOf(` -`))}function p(S,C,U,V){const O=U.enter("tableCell"),K=U.enter("phrasing"),X=U.containerPhrasing(S,{...V,before:h,after:h});return K(),O(),X}function d(S,C){return k2(S,{align:C,alignDelimiters:u,padding:r,stringLength:s})}function x(S,C,U){const V=S.children;let O=-1;const K=[],X=C.enter("table");for(;++O0&&!r&&(n[n.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const Tk={tokenize:jk,partial:!0};function zk(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:Nk,continuation:{tokenize:Dk},exit:Ok}},text:{91:{name:"gfmFootnoteCall",tokenize:Mk},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:Ck,resolveTo:wk}}}}function Ck(n,a,r){const u=this;let s=u.events.length;const h=u.parser.gfmFootnotes||(u.parser.gfmFootnotes=[]);let f;for(;s--;){const p=u.events[s][1];if(p.type==="labelImage"){f=p;break}if(p.type==="gfmFootnoteCall"||p.type==="labelLink"||p.type==="label"||p.type==="image"||p.type==="link")break}return m;function m(p){if(!f||!f._balanced)return r(p);const d=sn(u.sliceSerialize({start:f.end,end:u.now()}));return d.codePointAt(0)!==94||!h.includes(d.slice(1))?r(p):(n.enter("gfmFootnoteCallLabelMarker"),n.consume(p),n.exit("gfmFootnoteCallLabelMarker"),a(p))}}function wk(n,a){let r=n.length;for(;r--;)if(n[r][1].type==="labelImage"&&n[r][0]==="enter"){n[r][1];break}n[r+1][1].type="data",n[r+3][1].type="gfmFootnoteCallLabelMarker";const u={type:"gfmFootnoteCall",start:Object.assign({},n[r+3][1].start),end:Object.assign({},n[n.length-1][1].end)},s={type:"gfmFootnoteCallMarker",start:Object.assign({},n[r+3][1].end),end:Object.assign({},n[r+3][1].end)};s.end.column++,s.end.offset++,s.end._bufferIndex++;const h={type:"gfmFootnoteCallString",start:Object.assign({},s.end),end:Object.assign({},n[n.length-1][1].start)},f={type:"chunkString",contentType:"string",start:Object.assign({},h.start),end:Object.assign({},h.end)},m=[n[r+1],n[r+2],["enter",u,a],n[r+3],n[r+4],["enter",s,a],["exit",s,a],["enter",h,a],["enter",f,a],["exit",f,a],["exit",h,a],n[n.length-2],n[n.length-1],["exit",u,a]];return n.splice(r,n.length-r+1,...m),n}function Mk(n,a,r){const u=this,s=u.parser.gfmFootnotes||(u.parser.gfmFootnotes=[]);let h=0,f;return m;function m(y){return n.enter("gfmFootnoteCall"),n.enter("gfmFootnoteCallLabelMarker"),n.consume(y),n.exit("gfmFootnoteCallLabelMarker"),p}function p(y){return y!==94?r(y):(n.enter("gfmFootnoteCallMarker"),n.consume(y),n.exit("gfmFootnoteCallMarker"),n.enter("gfmFootnoteCallString"),n.enter("chunkString").contentType="string",d)}function d(y){if(h>999||y===93&&!f||y===null||y===91||Je(y))return r(y);if(y===93){n.exit("chunkString");const v=n.exit("gfmFootnoteCallString");return s.includes(sn(u.sliceSerialize(v)))?(n.enter("gfmFootnoteCallLabelMarker"),n.consume(y),n.exit("gfmFootnoteCallLabelMarker"),n.exit("gfmFootnoteCall"),a):r(y)}return Je(y)||(f=!0),h++,n.consume(y),y===92?x:d}function x(y){return y===91||y===92||y===93?(n.consume(y),h++,d):d(y)}}function Nk(n,a,r){const u=this,s=u.parser.gfmFootnotes||(u.parser.gfmFootnotes=[]);let h,f=0,m;return p;function p(C){return n.enter("gfmFootnoteDefinition")._container=!0,n.enter("gfmFootnoteDefinitionLabel"),n.enter("gfmFootnoteDefinitionLabelMarker"),n.consume(C),n.exit("gfmFootnoteDefinitionLabelMarker"),d}function d(C){return C===94?(n.enter("gfmFootnoteDefinitionMarker"),n.consume(C),n.exit("gfmFootnoteDefinitionMarker"),n.enter("gfmFootnoteDefinitionLabelString"),n.enter("chunkString").contentType="string",x):r(C)}function x(C){if(f>999||C===93&&!m||C===null||C===91||Je(C))return r(C);if(C===93){n.exit("chunkString");const U=n.exit("gfmFootnoteDefinitionLabelString");return h=sn(u.sliceSerialize(U)),n.enter("gfmFootnoteDefinitionLabelMarker"),n.consume(C),n.exit("gfmFootnoteDefinitionLabelMarker"),n.exit("gfmFootnoteDefinitionLabel"),v}return Je(C)||(m=!0),f++,n.consume(C),C===92?y:x}function y(C){return C===91||C===92||C===93?(n.consume(C),f++,x):x(C)}function v(C){return C===58?(n.enter("definitionMarker"),n.consume(C),n.exit("definitionMarker"),s.includes(h)||s.push(h),Le(n,S,"gfmFootnoteDefinitionWhitespace")):r(C)}function S(C){return a(C)}}function Dk(n,a,r){return n.check(Ga,a,n.attempt(Tk,a,r))}function Ok(n){n.exit("gfmFootnoteDefinition")}function jk(n,a,r){const u=this;return Le(n,s,"gfmFootnoteDefinitionIndent",5);function s(h){const f=u.events[u.events.length-1];return f&&f[1].type==="gfmFootnoteDefinitionIndent"&&f[2].sliceSerialize(f[1],!0).length===4?a(h):r(h)}}function Rk(n){let r=(n||{}).singleTilde;const u={name:"strikethrough",tokenize:h,resolveAll:s};return r==null&&(r=!0),{text:{126:u},insideSpan:{null:[u]},attentionMarkers:{null:[126]}};function s(f,m){let p=-1;for(;++p1?p(C):(f.consume(C),y++,S);if(y<2&&!r)return p(C);const V=f.exit("strikethroughSequenceTemporary"),O=Di(C);return V._open=!O||O===2&&!!U,V._close=!U||U===2&&!!O,m(C)}}}class Lk{constructor(){this.map=[]}add(a,r,u){Bk(this,a,r,u)}consume(a){if(this.map.sort(function(h,f){return h[0]-f[0]}),this.map.length===0)return;let r=this.map.length;const u=[];for(;r>0;)r-=1,u.push(a.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),a.length=this.map[r][0];u.push(a.slice()),a.length=0;let s=u.pop();for(;s;){for(const h of s)a.push(h);s=u.pop()}this.map.length=0}}function Bk(n,a,r,u){let s=0;if(!(r===0&&u.length===0)){for(;s-1;){const ue=u.events[ne][1].type;if(ue==="lineEnding"||ue==="linePrefix")ne--;else break}const le=ne>-1?u.events[ne][1].type:null,Ce=le==="tableHead"||le==="tableRow"?L:p;return Ce===L&&u.parser.lazy[u.now().line]?r(R):Ce(R)}function p(R){return n.enter("tableHead"),n.enter("tableRow"),d(R)}function d(R){return R===124||(f=!0,h+=1),x(R)}function x(R){return R===null?r(R):pe(R)?h>1?(h=0,u.interrupt=!0,n.exit("tableRow"),n.enter("lineEnding"),n.consume(R),n.exit("lineEnding"),S):r(R):De(R)?Le(n,x,"whitespace")(R):(h+=1,f&&(f=!1,s+=1),R===124?(n.enter("tableCellDivider"),n.consume(R),n.exit("tableCellDivider"),f=!0,x):(n.enter("data"),y(R)))}function y(R){return R===null||R===124||Je(R)?(n.exit("data"),x(R)):(n.consume(R),R===92?v:y)}function v(R){return R===92||R===124?(n.consume(R),y):y(R)}function S(R){return u.interrupt=!1,u.parser.lazy[u.now().line]?r(R):(n.enter("tableDelimiterRow"),f=!1,De(R)?Le(n,C,"linePrefix",u.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):C(R))}function C(R){return R===45||R===58?V(R):R===124?(f=!0,n.enter("tableCellDivider"),n.consume(R),n.exit("tableCellDivider"),U):ee(R)}function U(R){return De(R)?Le(n,V,"whitespace")(R):V(R)}function V(R){return R===58?(h+=1,f=!0,n.enter("tableDelimiterMarker"),n.consume(R),n.exit("tableDelimiterMarker"),O):R===45?(h+=1,O(R)):R===null||pe(R)?ae(R):ee(R)}function O(R){return R===45?(n.enter("tableDelimiterFiller"),K(R)):ee(R)}function K(R){return R===45?(n.consume(R),K):R===58?(f=!0,n.exit("tableDelimiterFiller"),n.enter("tableDelimiterMarker"),n.consume(R),n.exit("tableDelimiterMarker"),X):(n.exit("tableDelimiterFiller"),X(R))}function X(R){return De(R)?Le(n,ae,"whitespace")(R):ae(R)}function ae(R){return R===124?C(R):R===null||pe(R)?!f||s!==h?ee(R):(n.exit("tableDelimiterRow"),n.exit("tableHead"),a(R)):ee(R)}function ee(R){return r(R)}function L(R){return n.enter("tableRow"),J(R)}function J(R){return R===124?(n.enter("tableCellDivider"),n.consume(R),n.exit("tableCellDivider"),J):R===null||pe(R)?(n.exit("tableRow"),a(R)):De(R)?Le(n,J,"whitespace")(R):(n.enter("data"),he(R))}function he(R){return R===null||R===124||Je(R)?(n.exit("data"),J(R)):(n.consume(R),R===92?xe:he)}function xe(R){return R===92||R===124?(n.consume(R),he):he(R)}}function Yk(n,a){let r=-1,u=!0,s=0,h=[0,0,0,0],f=[0,0,0,0],m=!1,p=0,d,x,y;const v=new Lk;for(;++rr[2]+1){const C=r[2]+1,U=r[3]-r[2]-1;n.add(C,U,[])}}n.add(r[3]+1,0,[["exit",y,a]])}return s!==void 0&&(h.end=Object.assign({},Ni(a.events,s)),n.add(s,0,[["exit",h,a]]),h=void 0),h}function Op(n,a,r,u,s){const h=[],f=Ni(a.events,r);s&&(s.end=Object.assign({},f),h.push(["exit",s,a])),u.end=Object.assign({},f),h.push(["exit",u,a]),n.add(r+1,0,h)}function Ni(n,a){const r=n[a],u=r[0]==="enter"?"start":"end";return r[1][u]}const Gk={name:"tasklistCheck",tokenize:Qk};function Vk(){return{text:{91:Gk}}}function Qk(n,a,r){const u=this;return s;function s(p){return u.previous!==null||!u._gfmTasklistFirstContentOfListItem?r(p):(n.enter("taskListCheck"),n.enter("taskListCheckMarker"),n.consume(p),n.exit("taskListCheckMarker"),h)}function h(p){return Je(p)?(n.enter("taskListCheckValueUnchecked"),n.consume(p),n.exit("taskListCheckValueUnchecked"),f):p===88||p===120?(n.enter("taskListCheckValueChecked"),n.consume(p),n.exit("taskListCheckValueChecked"),f):r(p)}function f(p){return p===93?(n.enter("taskListCheckMarker"),n.consume(p),n.exit("taskListCheckMarker"),n.exit("taskListCheck"),m):r(p)}function m(p){return pe(p)?a(p):De(p)?n.check({tokenize:Xk},a,r)(p):r(p)}}function Xk(n,a,r){return Le(n,u,"whitespace");function u(s){return s===null?r(s):a(s)}}function Zk(n){return eg([yk(),zk(),Rk(n),Hk(),Vk()])}const Kk={};function Fk(n){const a=this,r=n||Kk,u=a.data(),s=u.micromarkExtensions||(u.micromarkExtensions=[]),h=u.fromMarkdownExtensions||(u.fromMarkdownExtensions=[]),f=u.toMarkdownExtensions||(u.toMarkdownExtensions=[]);s.push(Zk(r)),h.push(dk()),f.push(mk(r))}/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Jk=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Xg=(...n)=>n.filter((a,r,u)=>!!a&&a.trim()!==""&&u.indexOf(a)===r).join(" ").trim();/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var Ik={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const $k=be.forwardRef(({color:n="currentColor",size:a=24,strokeWidth:r=2,absoluteStrokeWidth:u,className:s="",children:h,iconNode:f,...m},p)=>be.createElement("svg",{ref:p,...Ik,width:a,height:a,stroke:n,strokeWidth:u?Number(r)*24/Number(a):r,className:Xg("lucide",s),...m},[...f.map(([d,x])=>be.createElement(d,x)),...Array.isArray(h)?h:[h]]));/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ft=(n,a)=>{const r=be.forwardRef(({className:u,...s},h)=>be.createElement($k,{ref:h,iconNode:a,className:Xg(`lucide-${Jk(n)}`,u),...s}));return r.displayName=`${n}`,r};/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Zg=ft("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Wk=ft("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Kg=ft("Box",[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Pk=ft("CircleStop",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const e_=ft("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Fg=ft("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const t_=ft("History",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const n_=ft("Layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const l_=ft("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const i_=ft("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ls=ft("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Jg=ft("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const a_=ft("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const r_=ft("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ps=ft("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ig=ft("Settings2",[["path",{d:"M20 7h-9",key:"3s1dr2"}],["path",{d:"M14 17H5",key:"gfn3mx"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const u_=ft("SquareTerminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const c_=ft("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);/** - * @license lucide-react v0.468.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const o_=ft("Timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]),$g=new URL(".",window.location.href).pathname;async function yl(n,a){const r=await fetch(`${$g}${n.replace(/^\//,"")}`,{headers:{"Content-Type":"application/json",...(a==null?void 0:a.headers)||{}},...a}),u=await r.text(),s=u?JSON.parse(u):{};if(!r.ok)throw new Error(s.error||r.statusText);return s}function kt(...n){return n.filter(Boolean).join(" ")}function ns(n,a=2500,r=[]){const[u,s]=be.useState(null),h=async()=>{try{const f=await n();s(f)}catch{}};return be.useEffect(()=>{h();const f=setInterval(h,a);return()=>clearInterval(f)},r),{data:u,refresh:h}}const Oi=[{role:"assistant",content:"Select a job, then ask about metrics, runtime, logs, or how to start the next AReno task."}],s_="areno-dashboard-agent-chat",Wg="areno-dashboard-agent-chat-sessions",jp="areno-dashboard-agent-active-chat",Rp="areno-dashboard-agent-draft";function f_(){try{const n=JSON.parse(localStorage.getItem(s_)||"[]");return Array.isArray(n)&&n.length?n:Oi}catch{return Oi}}function cu(n=Oi,a="New chat"){const r=Date.now();return{id:`chat-${r}-${Math.random().toString(16).slice(2)}`,title:a,createdAt:r,updatedAt:r,messages:n}}function h_(){try{const n=JSON.parse(localStorage.getItem(Wg)||"[]");if(Array.isArray(n)&&n.length)return n.map(a=>{var r;return{...a,messages:(r=a.messages)!=null&&r.length?a.messages:Oi}})}catch{}return[cu(f_(),"Default chat")]}function d_(n,a="New chat"){const r=n.find(s=>s.role==="user"&&s.content);if(!r)return a;const u=r.content.replace(/\s+/g," ").trim();return u.length>42?`${u.slice(0,42)}...`:u}const m_={ckpt:"Qwen/Qwen3-0.6B",dataset_path:"yahma/alpaca-cleaned:train",dataset_loader_fn:"examples/sft/alpaca/dataset_loader.py",reward_fn_path:"",ref_ckpt:"",reward_ckpt:"",critic_ckpt:"",agent_fn:"",algo:"sft",model_hub:"modelscope",epochs:10,max_steps:5,world_size:1,tp_size:1,attn_backend:"flash",activation_checkpointing:!0,drop_rollout_state:!1,eager_decode:!1,disable_thinking:!1,batch_size:8,n_samples:8,mini_bs:1,score_micro_bs:8,gradient_accumulation_steps:"",max_prompt_tokens:1024,max_context_len:2048,max_new_tokens:1024,max_running_prompts:"",temperature:1,top_k:-1,top_p:1,greedy:!1,agent_timeout_s:300,train_tool_results:!1,lr:1e-6,min_lr:1e-7,lr_decay_steps:1e3,lr_decay_style:"cosine",adam_beta1:.9,adam_beta2:.999,adam_8bit:!1,weight_decay:.01,grad_clip_norm:1,gspo_clip_eps:3e-4,grpo_clip_eps:.2,dpo_beta:.1,critic_warmup_steps:20,critic_lr:1e-5,use_kl_loss:!0,kl_loss_coef:.001,kl_loss_type:"low_var_kl",clip_eps:.2,clip_ratio_c:3,value_clip_eps:.5,value_loss_coef:.5,gamma:1,lam:.95,tune_params:!1,mem_frac:.9,tune_max_samples:256,save_path:"outputs/dashboard-run",save_interval:100,metrics_dir:"outputs/dashboard-run/metrics",extra_args:""},p_={model_path:"Qwen/Qwen3-0.6B",model_hub:"modelscope",host:"0.0.0.0",port:8e3,world_size:1,tp_size:1,max_running_prompts:16,default_max_tokens:1024,decode_progress_interval_s:0,attn_backend:"flash",eager_decode:!1,disable_thinking:!1,extra_args:""};function g_(){var Y,W,ge,ze,Be,vt;const[n,a]=be.useState(null),[r,u]=be.useState(m_),[s,h]=be.useState(p_),[f,m]=be.useState(()=>localStorage.getItem(Rp)||""),[p,d]=be.useState(()=>h_()),[x,y]=be.useState(()=>localStorage.getItem(jp)||""),[v,S]=be.useState("chat"),[C,U]=be.useState(()=>{try{return JSON.parse(localStorage.getItem("areno-dashboard-agent-provider")||"{}")}catch{return{}}}),[V,O]=be.useState("jobs"),[K,X]=be.useState("train"),[ae,ee]=be.useState(()=>localStorage.getItem("areno-dashboard-theme")||"dark"),[L,J]=be.useState(""),[he,xe]=be.useState(!1),[R,ne]=be.useState(1),[le,Ce]=be.useState(0),ue=be.useRef(null),$=ns(()=>yl("/api/env"),5e3),D=ns(()=>yl("/api/jobs"),2e3),F=ns(()=>n?yl(`/api/jobs/${n}`):Promise.resolve(null),3e3,[n]),ie=((Y=D.data)==null?void 0:Y.jobs)||[],Se=10,E=Math.max(1,Math.ceil(ie.length/Se)),T=Math.min(R,E),q=ie.slice((T-1)*Se,T*Se),_=((W=F.data)==null?void 0:W.job)||(n?ie.find(P=>P.id===n):null)||null,te=be.useMemo(()=>p.find(P=>P.id===x)||p[0]||cu(),[p,x]),fe=te.messages||Oi;be.useEffect(()=>{n&&ie.length&&!ie.some(P=>P.id===n)&&a(null)},[ie.length,n]),be.useEffect(()=>{R>E&&ne(E)},[R,E]),be.useEffect(()=>{document.documentElement.dataset.theme=ae,localStorage.setItem("areno-dashboard-theme",ae)},[ae]),be.useEffect(()=>{localStorage.setItem("areno-dashboard-agent-provider",JSON.stringify(C))},[C]),be.useEffect(()=>{localStorage.setItem(Wg,JSON.stringify(p.slice(-40)))},[p]),be.useEffect(()=>{if(!p.length){const P=cu();d([P]),y(P.id);return}p.some(P=>P.id===x)||y(p[0].id)},[p,x]),be.useEffect(()=>{x&&localStorage.setItem(jp,x)},[x]),be.useEffect(()=>{localStorage.setItem(Rp,f)},[f]),be.useEffect(()=>{const P=ue.current;P&&(P.scrollTop=P.scrollHeight)},[fe,v]);const oe=[{id:"jobs",label:"Jobs",icon:k.jsx(Zg,{size:16})},{id:"runtime",label:"Runtime",icon:k.jsx(ps,{size:16})},{id:"launcher",label:"Launcher",icon:k.jsx(Ls,{size:16})},{id:"agent",label:"Agent",icon:k.jsx(Wk,{size:16})}],we={jobs:_?[_.name,`${_.kind} · ${_.status} · step ${_.step??0}`]:["Jobs","Open an AReno train or serve task to inspect metrics, samples, config, and logs."],runtime:["Runtime Environment","Review areno check, areno env, dependencies, GPU state, and repository context."],launcher:["Task Launcher","Start low-intrusion AReno train or serve subprocesses from explicit configs."],agent:["Agent Console","Chat with an operations agent using the selected job context."]};async function Ie(){J("Starting train job...");try{const P=await yl("/api/jobs/train",{method:"POST",body:JSON.stringify(r)});a(P.job.id),await D.refresh()}finally{J("")}}async function Ye(){J("Starting serve job...");try{const P=await yl("/api/jobs/serve",{method:"POST",body:JSON.stringify(s)});a(P.job.id),await D.refresh()}finally{J("")}}async function zt(P){J("Stopping job...");try{await yl(`/api/jobs/${P}/stop`,{method:"POST",body:"{}"}),await D.refresh()}finally{J("")}}async function Kt(){const P=f.trim();if(!P)return;m("");const Z=`assistant-${Date.now()}`;Yn(ve=>[...ve,{role:"user",content:P},{id:Z,role:"assistant",content:"",events:[],streaming:!0}]),J("Agent analyzing...");try{await Ql({prompt:P,job_id:(_==null?void 0:_.id)||null,provider:C,history:Gn(fe),onEvent:ve=>Qn(Z,ve)})}catch(ve){Qn(Z,{type:"error",content:`Agent request failed: ${ve.message||ve}`})}finally{Qn(Z,{type:"done"}),J("")}}function Yn(P){const Z=te.id;d(ve=>ve.map(de=>{if(de.id!==Z)return de;const Ee=de.messages||Oi,et=typeof P=="function"?P(Ee):P;return{...de,messages:et,updatedAt:Date.now(),title:d_(et,de.title)}}))}function bl(){const P=cu();d(Z=>[P,...Z]),y(P.id),m(""),S("chat")}function rn(P){y(P),S("chat")}function Gn(P){return P.filter(Z=>(Z.role==="user"||Z.role==="assistant")&&!Z.streaming).map(Z=>({role:Z.role,content:Vn(Z)})).filter(Z=>Z.content).slice(-10)}function Vn(P){return P.content?P.content:(P.events||[]).filter(Z=>Z.type==="content"||Z.type==="reasoning").map(Z=>Z.text||"").join(` -`).trim()}async function Ql({prompt:P,job_id:Z,provider:ve,history:de,onEvent:Ee}){const et=await fetch(`${$g}api/agent/stream`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:P,job_id:Z,provider:ve,history:de})});if(!et.ok||!et.body){const Xn=await et.text();throw new Error(Xn||et.statusText)}const Bt=et.body.getReader(),bu=new TextDecoder;let hn="";for(;;){const{value:Xn,done:Xl}=await Bt.read();if(Xl)break;hn+=bu.decode(Xn,{stream:!0});const dn=hn.split(` -`);hn=dn.pop()||"";for(const Sl of dn)Sl.trim()&&Ee(JSON.parse(Sl))}hn.trim()&&Ee(JSON.parse(hn))}function Qn(P,Z){Yn(ve=>ve.map(de=>de.id!==P?de:Z.type==="content_delta"?fn(de,"content",Z.content||""):Z.type==="reasoning_delta"?fn(de,"reasoning",Z.content||""):Z.type==="tool_calls"?Li(de,Z.tool_calls||[]):Z.type==="tool_call_delta"?vn(de,Z.tool_call,!0):Z.type==="tool_result"?{...de,events:[...de.events||[],{type:"tool_result",result:Z.tool_result}]}:Z.type==="error"?{...fn(de,"content",Z.content||""),streaming:!1}:Z.type==="done"?{...de,streaming:!1}:de))}function fn(P,Z,ve){if(!ve)return P;const de=[...P.events||[]],Ee=de[de.length-1];(Ee==null?void 0:Ee.type)===Z?de[de.length-1]={...Ee,text:`${Ee.text||""}${ve}`}:de.push({type:Z,text:ve});const et=Z==="content"?`${P.content||""}${ve}`:P.content;return{...P,content:et,events:de}}function vn(P,Z,ve=!1){if(!Z)return P;const de=[...P.events||[]],Ee=de.findIndex(et=>et.type==="tool_call"&&vl(et.call,Z));return Ee>=0?de[Ee]={...de[Ee],call:Z,live:ve}:de.push({type:"tool_call",call:Z,live:ve}),{...P,events:de}}function vl(P,Z){return!P||!Z?!1:!!(P.id&&Z.id&&P.id===Z.id||P.round!==void 0&&Z.round!==void 0&&P.index!==void 0&&Z.index!==void 0&&P.round===Z.round&&P.index===Z.index)}function Li(P,Z){let ve=P;for(const de of Z)ve=vn(ve,de,!1);return ve}function Bi(){var P;return V==="runtime"?k.jsxs("div",{className:"tabGrid",children:[k.jsx(C_,{env:$.data}),k.jsx(w_,{gpus:((P=$.data)==null?void 0:P.gpus)||[]})]}):V==="launcher"?k.jsxs("section",{className:"panel launcher",children:[k.jsxs("div",{className:"panelHeader",children:[k.jsxs("div",{children:[k.jsx("h2",{children:"Task Launcher"}),k.jsx("p",{children:"Builds AReno CLI commands without importing training internals."})]}),k.jsxs("div",{className:"tabs",children:[k.jsx("button",{className:kt(K==="train"&&"active"),onClick:()=>X("train"),children:"Train"}),k.jsx("button",{className:kt(K==="serve"&&"active"),onClick:()=>X("serve"),children:"Serve"})]})]}),K==="train"?k.jsx(Z_,{config:r,setConfig:u,onStart:Ie}):k.jsx(F_,{config:s,setConfig:h,onStart:Ye})]}):V==="agent"?k.jsxs("section",{className:"panel chatPanel",children:[k.jsxs("div",{className:"panelHeader",children:[k.jsxs("div",{children:[k.jsx("h2",{children:"Agent Chat"}),k.jsx("p",{children:_?`Context: ${_.name}`:"No job selected. The agent will use runtime context only."})]}),k.jsxs("div",{className:"agentHeaderActions",children:[k.jsxs("button",{className:"secondaryButton",onClick:bl,children:[k.jsx(Jg,{size:15})," New Chat"]}),k.jsxs("button",{className:"secondaryButton",onClick:()=>xe(!0),children:[k.jsx(Ig,{size:15})," Settings"]})]})]}),k.jsxs("div",{className:"agentTabs",children:[k.jsxs("button",{className:kt(v==="chat"&&"active"),onClick:()=>S("chat"),children:[k.jsx(l_,{size:15})," Chat"]}),k.jsxs("button",{className:kt(v==="history"&&"active"),onClick:()=>S("history"),children:[k.jsx(t_,{size:15})," History"]})]}),v==="history"?k.jsx(x_,{sessions:p,activeId:te.id,onOpen:rn,onNew:bl}):k.jsxs(k.Fragment,{children:[k.jsx("div",{className:"chatMessages",ref:ue,children:fe.map((Z,ve)=>{var de;return k.jsxs("div",{className:kt("chatBubble",Z.role),children:[k.jsx("span",{children:Z.role}),(de=Z.events)!=null&&de.length?k.jsx(S_,{events:Z.events}):k.jsx(Bs,{text:Z.content}),Z.streaming&&k.jsx("div",{className:"streamingHint",children:"thinking..."})]},`${Z.id||Z.role}-${ve}`)})}),k.jsxs("div",{className:"chatComposer",children:[k.jsx("textarea",{value:f,onChange:Z=>m(Z.target.value),onKeyDown:Z=>{Z.key==="Enter"&&!Z.shiftKey&&(Z.preventDefault(),Kt())}}),k.jsxs("button",{className:"primaryButton",onClick:Kt,children:[k.jsx(r_,{size:16})," Send"]})]})]}),he&&k.jsx(b_,{title:"Agent Settings",onClose:()=>xe(!1),children:k.jsx(y_,{provider:C,setProvider:U})})]}):_?k.jsxs("section",{className:"panel detailPanel",children:[k.jsxs("div",{className:"panelHeader",children:[k.jsxs("div",{children:[k.jsx("h2",{children:_.name}),k.jsxs("p",{children:[_.kind," · ",_.status]})]}),k.jsxs("div",{className:"detailActions",children:[k.jsx("button",{className:"secondaryButton",onClick:()=>a(null),children:"Back"}),_.status==="running"&&k.jsxs("button",{className:"dangerButton",onClick:()=>zt(_.id),children:[k.jsx(Pk,{size:16})," Stop"]})]})]}),k.jsx(M_,{job:_}),k.jsx(v_,{job:_,refreshNonce:le}),k.jsx(q_,{samples:(_==null?void 0:_.samples)||[]}),k.jsxs("div",{className:"split",children:[k.jsx(G_,{config:_==null?void 0:_.config,launch:_==null?void 0:_.launch}),k.jsx(X_,{logs:(_==null?void 0:_.logs)||[]})]})]}):k.jsxs("section",{className:"panel jobListPage",children:[k.jsxs("div",{className:"panelHeader",children:[k.jsxs("div",{children:[k.jsx("h2",{children:"Jobs"}),k.jsx("p",{children:"Registered AReno train/serve processes. Select a row to open job details."})]}),k.jsxs("div",{className:"pagerControls",children:[k.jsx("button",{className:"secondaryButton",disabled:T<=1,onClick:()=>ne(Z=>Math.max(1,Z-1)),children:"Prev"}),k.jsxs("span",{children:[T," / ",E]}),k.jsx("button",{className:"secondaryButton",disabled:T>=E,onClick:()=>ne(Z=>Math.min(E,Z+1)),children:"Next"})]})]}),k.jsxs("div",{className:"jobList",children:[ie.length===0&&k.jsx(ty,{title:"No jobs yet",text:"Start a train or serve task from the launcher."}),q.map(Z=>k.jsxs("button",{className:"jobRow large",onClick:()=>a(Z.id),children:[k.jsx("div",{className:"jobIcon",children:Z.kind==="serve"?k.jsx(ps,{size:16}):k.jsx(n_,{size:16})}),k.jsxs("div",{className:"jobInfo",children:[k.jsx("div",{className:"jobTitle",children:Z.name}),k.jsxs("div",{className:"jobMeta",children:[Z.kind," · ",Z.status," · step ",Z.step??0]})]}),k.jsx("span",{className:kt("statusDot",Z.status)})]},Z.id))]}),ie.length>Se&&k.jsxs("div",{className:"listFooter",children:["Showing ",(T-1)*Se+1,"-",Math.min(T*Se,ie.length)," of ",ie.length," jobs"]})]})}const[mt,Ui]=we[V]||we.jobs;return k.jsxs("div",{className:"shell",children:[k.jsxs("aside",{className:"rail",children:[k.jsxs("div",{className:"brand",children:[k.jsx("div",{className:"brandMark",children:"A"}),k.jsxs("div",{children:[k.jsx("div",{className:"brandName",children:"AReno Ops"}),k.jsx("div",{className:"brandMeta",children:"runtime workbench"})]})]}),k.jsx("nav",{className:"nav",children:oe.map(P=>k.jsxs("button",{className:kt("navItem",V===P.id&&"active"),onClick:()=>O(P.id),children:[P.icon," ",P.label]},P.id))}),k.jsxs("div",{className:"railFooter",children:[k.jsx("div",{className:"tinyLabel",children:"Repo"}),k.jsxs("div",{className:"monoLine",children:[((ze=(ge=$.data)==null?void 0:ge.repo)==null?void 0:ze.branch)||"unknown"," · ",((vt=(Be=$.data)==null?void 0:Be.repo)==null?void 0:vt.commit)||"no git"]})]})]}),k.jsxs("main",{className:"main",children:[k.jsxs("header",{className:"topbar",children:[k.jsxs("div",{children:[k.jsx("h1",{children:mt}),k.jsx("p",{children:Ui})]}),k.jsxs("div",{className:"topActions",children:[k.jsx("button",{className:"iconButton",onClick:()=>ee(ae==="dark"?"light":"dark"),title:"Toggle theme",children:ae==="dark"?k.jsx(c_,{size:16}):k.jsx(i_,{size:16})}),k.jsx("button",{className:"iconButton",onClick:()=>{$.refresh(),D.refresh(),F.refresh(),Ce(P=>P+1)},title:"Refresh",children:k.jsx(a_,{size:16})})]})]}),L&&k.jsx("div",{className:"notice",children:L}),Bi()]})]})}function y_({provider:n,setProvider:a}){return k.jsxs("div",{className:"agentConfig modalForm",children:[k.jsx(du,{label:"Base URL",value:n.base_url||"",onChange:r=>a({...n,base_url:r}),compact:!0}),k.jsx(du,{label:"Model",value:n.model||"",onChange:r=>a({...n,model:r}),compact:!0}),k.jsxs("label",{className:"field compact",children:[k.jsx("span",{children:"API key"}),k.jsx("input",{type:"password",value:n.api_key||"",onChange:r=>a({...n,api_key:r.target.value})})]})]})}function x_({sessions:n,activeId:a,onOpen:r,onNew:u}){return k.jsxs("div",{className:"agentHistory",children:[k.jsxs("div",{className:"agentHistoryHeader",children:[k.jsxs("div",{children:[k.jsx("h3",{children:"Chat History"}),k.jsxs("p",{children:[n.length," saved conversations in this browser."]})]}),k.jsxs("button",{className:"secondaryButton",onClick:u,children:[k.jsx(Jg,{size:15})," New Chat"]})]}),k.jsx("div",{className:"agentHistoryList",children:n.map(s=>{const h=[...s.messages||[]].reverse().find(f=>f.role==="user"||f.content);return k.jsxs("button",{className:kt("agentHistoryItem",s.id===a&&"active"),onClick:()=>r(s.id),children:[k.jsx("strong",{children:s.title||"New chat"}),k.jsx("span",{children:(h==null?void 0:h.content)||"No messages yet."}),k.jsx("small",{children:new Date(s.updatedAt||s.createdAt||Date.now()).toLocaleString()})]},s.id)})})]})}function b_({title:n,children:a,onClose:r}){return k.jsx("div",{className:"modalOverlay",role:"presentation",onMouseDown:r,children:k.jsxs("div",{className:"modalCard",role:"dialog","aria-modal":"true","aria-label":n,onMouseDown:u=>u.stopPropagation(),children:[k.jsxs("div",{className:"modalHeader",children:[k.jsxs("div",{children:[k.jsx("h2",{children:n}),k.jsx("p",{children:"Stored locally in this browser."})]}),k.jsx("button",{className:"iconButton",onClick:r,children:"×"})]}),a]})})}function v_({job:n,refreshNonce:a}){return k.jsxs("div",{className:"jobMetricsGrid",children:[k.jsx("div",{className:"panel insetPanel",children:k.jsx(R_,{jobId:n==null?void 0:n.id,metricsDir:n==null?void 0:n.metrics_dir,refreshNonce:a})}),k.jsx("div",{className:"panel insetPanel",children:k.jsx(U_,{rows:(n==null?void 0:n.timeperf)||[]})})]})}function S_({events:n}){return k.jsx("div",{className:"agentEventList",children:n.map((a,r)=>a.type==="reasoning"?k.jsx(k_,{text:a.text},r):a.type==="content"?k.jsx(Bs,{text:a.text},r):a.type==="tool_call"?k.jsx(__,{call:a.call,live:a.live},r):a.type==="tool_result"?k.jsx(T_,{result:a.result},r):null)})}function Bs({text:n}){return k.jsx("div",{className:"markdownBlock",children:k.jsx(RS,{remarkPlugins:[Fk],children:n||""})})}function k_({text:n}){return k.jsxs("details",{className:"reasoningBlock",children:[k.jsxs("summary",{children:[k.jsx("span",{children:"✓"}),k.jsx("strong",{children:"Completed thinking"})]}),k.jsx(Bs,{text:n})]})}function __({call:n,live:a=!1}){const u=((n==null?void 0:n.function)||{}).name||(n==null?void 0:n.name)||"tool",s=A_(n);return k.jsxs("details",{className:kt("toolCallCard","toolCallDetails",a&&"live"),children:[k.jsxs("summary",{className:"toolCallHead",children:[k.jsx("span",{children:a?"calling":"tool call"}),k.jsx("b",{children:E_(u,s)}),k.jsx("em",{children:a?"running":""})]}),k.jsx("pre",{children:s})]})}function E_(n,a){const r=Pg(a);return!r||r==="{}"?`${n}()`:`${n}(${r})`}function A_(n){return(n.function||{}).arguments||n.arguments||JSON.stringify(n,null,2)}function T_({result:n}){const a=z_(n);return k.jsxs("details",{className:kt("toolCallCard","toolResultDetails",n.ok?"ok":"failed"),children:[k.jsxs("summary",{children:[k.jsx("span",{children:n.ok?"result":"error"}),k.jsxs("b",{children:[n.name||"unknown"," · ",n.ok?"ok":"failed"]}),k.jsx("em",{children:Pg(a)||"No output."})]}),k.jsx("pre",{children:a})]})}function Pg(n){return String(n||"").replace(/\s+/g," ").trim()}function z_(n){return n.error?n.error:Array.isArray(n.jobs)?n.jobs.map(a=>`${a.id} · ${a.kind} · ${a.status} · step ${a.step??0} · ${a.name}`).join(` -`)||"No jobs.":n.job?`${n.job.id} · ${n.job.kind} · ${n.job.status} · step ${n.job.step??0} -${n.job.name}`:n.env?`ready=${n.env.ready} · gpu=${n.env.gpu_summary||"n/a"} · cwd=${n.env.cwd||"n/a"}`:JSON.stringify(n,null,2)}function C_({env:n}){var m,p,d,x;const a=(n==null?void 0:n.checks)||[],r=(n==null?void 0:n.report)||{},u=r.dependencies||{},s=r.torch||{},h=r.platform||{},f=a.slice(0,12);return k.jsxs("section",{className:"runtimeDeck",children:[k.jsxs("div",{className:"runtimeHero",children:[k.jsx("div",{className:kt("readinessOrb",n!=null&&n.ready?"ready":"blocked"),children:n!=null&&n.ready?"OK":"!"}),k.jsxs("div",{children:[k.jsx("div",{className:"tinyLabel",children:"AReno check"}),k.jsx("h2",{children:n!=null&&n.ready?"Runtime ready for AReno tasks":"Runtime needs attention before heavy jobs"}),k.jsxs("p",{children:[((m=n==null?void 0:n.check_counts)==null?void 0:m.ok)??0," OK · ",((p=n==null?void 0:n.check_counts)==null?void 0:p.warn)??0," WARN · ",((d=n==null?void 0:n.check_counts)==null?void 0:d.fail)??0," FAIL"]})]})]}),k.jsxs("div",{className:"envFacts",children:[k.jsx(ru,{icon:k.jsx(Fg,{size:15}),label:"AReno",value:((x=r.areno)==null?void 0:x.version)||"unknown"}),k.jsx(ru,{icon:k.jsx(e_,{size:15}),label:"PyTorch",value:s.version||"missing"}),k.jsx(ru,{icon:k.jsx(ps,{size:15}),label:"CUDA",value:s.cuda_build||"none"}),k.jsx(ru,{icon:k.jsx(Kg,{size:15}),label:"Platform",value:`${h.system||"unknown"} ${h.machine||""}`})]}),k.jsx("div",{className:"checkMatrix",children:f.map(y=>k.jsxs("div",{className:kt("checkItem",y.status.toLowerCase()),children:[k.jsx("span",{children:y.status}),k.jsx("strong",{children:y.name}),k.jsx("small",{children:y.detail||y.next_step||"no detail"})]},y.name))}),k.jsx("div",{className:"dependencyStrip",children:Object.entries(u).map(([y,v])=>k.jsxs("div",{className:kt("depPill",v.imported?"ok":"warn"),children:[y,": ",v.imported?v.version||"imported":"missing"]},y))})]})}function w_({gpus:n}){return n.length?k.jsx("section",{className:"gpuDeck",children:n.map((a,r)=>{const u=Math.min(100,Math.max(0,Number(a.memory_used_mb||0)/Math.max(Number(a.memory_total_mb||1),1)*100)),s=Math.min(100,Math.max(0,Number(a.utilization||0)));return k.jsxs("div",{className:"gpuCard",children:[k.jsxs("div",{className:"gpuHead",children:[k.jsxs("strong",{children:["GPU ",r]}),k.jsx("span",{children:a.name})]}),k.jsxs("div",{className:"gpuMeter",children:[k.jsxs("div",{className:"gpuMeterLabel",children:[k.jsx("span",{children:"Memory"}),k.jsxs("b",{children:[a.memory_used_mb,"/",a.memory_total_mb," MB"]})]}),k.jsx("div",{className:"meterTrack",children:k.jsx("i",{style:{width:`${u}%`}})})]}),k.jsxs("div",{className:"gpuMeter",children:[k.jsxs("div",{className:"gpuMeterLabel",children:[k.jsx("span",{children:"Utilization"}),k.jsxs("b",{children:[s,"%"]})]}),k.jsx("div",{className:"meterTrack util",children:k.jsx("i",{style:{width:`${s}%`}})})]})]},`${a.name}-${r}`)})}):k.jsx("section",{className:"gpuDeck",children:k.jsx("div",{className:"panel",children:k.jsx(ty,{title:"No GPU detected",text:"nvidia-smi did not return device utilization."})})})}function ru({icon:n,label:a,value:r}){return k.jsxs("div",{className:"envFact",children:[k.jsx("span",{children:n}),k.jsxs("div",{children:[k.jsx("label",{children:a}),k.jsx("strong",{children:r})]})]})}function M_({job:n}){const a=ey(n),r=N_(n),u=Math.max(0,a.findIndex(s=>gs(s,r,n)));return k.jsx("div",{className:"timeline",children:a.map((s,h)=>k.jsxs("div",{className:kt("timelineItem",h<=u&&"done",gs(s,r,n)&&"current"),children:[k.jsx("span",{children:h+1}),k.jsx("label",{children:s.label})]},s.id))})}function ey(n){if((n==null?void 0:n.kind)==="serve")return[{id:"created",label:"created"},{id:"load",label:"load",aliases:["registered"]},{id:"serve",label:"serve",aliases:["running"]},{id:"exit",label:"exit",aliases:["exited","failed","succeeded","stopped"]}];const a=D_(n,"algo");return a==="sft"?[{id:"created",label:"created",aliases:["registered","epoch_start"]},{id:"train",label:"train",aliases:["train_start","train_end","train_skip"]},{id:"save",label:"save",aliases:["save_checkpoint_start","save_checkpoint_end"]},{id:"done",label:"done",aliases:["max_steps_reached","epoch_end","exited","failed","succeeded","stopped"]}]:a==="dpo"?[{id:"created",label:"created",aliases:["registered","epoch_start"]},{id:"ref_score",label:"ref score",aliases:["logprob_score_start","logprob_score_end"],roles:["ref"]},{id:"train",label:"train",aliases:["train_start","train_end","train_skip"]},{id:"save",label:"save",aliases:["save_checkpoint_start","save_checkpoint_end"]},{id:"done",label:"done",aliases:["max_steps_reached","epoch_end","exited","failed","succeeded","stopped"]}]:a==="ppo"?[{id:"created",label:"created",aliases:["registered","epoch_start"]},{id:"rollout",label:"rollout",aliases:["rollout_start","rollout_end"],roles:["actor"]},{id:"reward",label:"reward",aliases:["score_start","score_end"],roles:["reward"]},{id:"ref_score",label:"ref score",aliases:["logprob_score_start","logprob_score_end"],roles:["ref"]},{id:"old_logprob",label:"old logprob",aliases:["old_logprob_score_start","old_logprob_score_end"],roles:["actor"]},{id:"critic_value",label:"value",aliases:["value_score_start","value_score_end"],roles:["critic"]},{id:"advantage",label:"advantage",aliases:["advantage_start","advantage_end"],roles:["critic"]},{id:"critic_train",label:"critic train",aliases:["train_start","train_end"],roles:["critic"]},{id:"actor_train",label:"actor train",aliases:["train_start","train_end","train_skip"],roles:["actor"]},{id:"save",label:"save",aliases:["save_checkpoint_start","save_checkpoint_end"]},{id:"done",label:"done",aliases:["max_steps_reached","epoch_end","exited","failed","succeeded","stopped"]}]:[{id:"created",label:"created",aliases:["registered","epoch_start"]},{id:"rollout",label:"rollout",aliases:["rollout_start","rollout_end"]},{id:"score",label:"score",aliases:["score_start","score_end","reward_score_start","reward_score_end","logprob_score_start","logprob_score_end","old_logprob_score_start","old_logprob_score_end","value_score_start","value_score_end"]},{id:"train",label:"train",aliases:["train_start","train_end","train_skip"]},{id:"save",label:"save",aliases:["save_checkpoint_start","save_checkpoint_end"]},{id:"done",label:"done",aliases:["max_steps_reached","epoch_end","exited","failed","succeeded","stopped"]}]}function N_(n){if(n!=null&&n.status&&["succeeded","failed","stopped","exited"].includes(n.status))return"done";const a=String((n==null?void 0:n.stage)||"created"),u=ey(n).find(s=>gs(s,a,n));return(u==null?void 0:u.id)||a}function gs(n,a,r){var s,h;return n.id===a||((s=n.aliases)==null?void 0:s.includes(a))?(h=n.roles)!=null&&h.length?n.roles.includes(String((r==null?void 0:r.role)||"")):!0:!1}function D_(n,a){const r=n!=null&&n.config&&Object.keys(n.config).length?n.config:(n==null?void 0:n.launch)||{};if(r[a]!==void 0)return r[a];for(const u of r.sections||[]){const s=(u.items||[]).find(h=>h.key===a);if(s)return s.value}}function O_(n){return(n||[]).map(a=>a.name).sort()}function j_(n,a){return a&&n.includes(a)?a:n[0]||""}function R_({jobId:n,metricsDir:a,refreshNonce:r}){const[u,s]=be.useState(""),[h,f]=be.useState(.6),[m,p]=be.useState([]),[d,x]=be.useState([]),[y,v]=be.useState(!1),[S,C]=be.useState(n);n!==S&&(C(n),s(""),p([]),x([]),v(!1));const U=O_(m),V=j_(U,u);be.useEffect(()=>{let ee=!1;if(n)return yl(`/api/jobs/${n}/metrics`).then(L=>{if(ee)return;const J=L.metrics||[];p(J),s(he=>{var xe;return he||((xe=J[0])==null?void 0:xe.name)||""})}).catch(()=>{ee||p([])}),()=>{ee=!0}},[n,r]),be.useEffect(()=>{let ee=!1;if(!n||!V){x([]),v(!1);return}return v(!0),yl(`/api/jobs/${n}/metric?name=${encodeURIComponent(V)}&limit=500`).then(L=>{ee||x((L.points||[]).filter(J=>Number.isFinite(Number(J.value))).map(J=>({...J,step:Number(J.step||0),value:Number(J.value)})))}).catch(()=>{ee||x([])}).finally(()=>{ee||v(!1)}),()=>{ee=!0}},[n,V,r]);const O=V,K=d.slice(-240),X=L_(K,h),ae=B_(K,X);return k.jsxs("div",{className:"chart",children:[k.jsxs("div",{className:"chartHeader",children:[k.jsxs("span",{children:[k.jsx(Zg,{size:14})," TensorBoard scalars"]}),k.jsxs("div",{className:"chartControls",children:[k.jsx("select",{value:O,onChange:ee=>s(ee.target.value),children:U.length===0?k.jsx("option",{value:"",children:"no metrics"}):U.map(ee=>k.jsx("option",{children:ee},ee))}),k.jsxs("label",{children:["smooth ",h.toFixed(2),k.jsx("input",{type:"range",min:"0",max:"0.99",step:"0.01",value:h,onChange:ee=>f(Number(ee.target.value))})]})]})]}),K.length===0?k.jsx("div",{className:"plotEmpty",children:y?"Loading selected metric...":"No TensorBoard scalar points loaded yet."}):k.jsxs("svg",{className:"metricPlot",viewBox:"0 0 720 180",role:"img",children:[k.jsx("g",{className:"plotGrid",children:[0,1,2,3].map(ee=>k.jsx("line",{x1:"0",x2:"720",y1:30+ee*42,y2:30+ee*42},ee))}),k.jsx("polyline",{className:"rawLine",points:ae.raw}),k.jsx("polyline",{className:"smoothLine",points:ae.smooth}),K.slice(-24).map((ee,L)=>{var J,he;return k.jsx("circle",{cx:((J=ae.coords[L+Math.max(0,K.length-24)])==null?void 0:J.x)||0,cy:((he=ae.coords[L+Math.max(0,K.length-24)])==null?void 0:he.y)||0,r:"2.2",children:k.jsx("title",{children:`${O} step ${ee.step}: ${ee.value}`})},`${ee.step}-${L}`)})]}),k.jsxs("div",{className:"plotFooter",children:[k.jsxs("span",{children:[O||"metric"," · ",d.length," points"]}),k.jsxs("span",{children:[a||"no metrics dir"," · ",ae.minLabel," to ",ae.maxLabel]})]})]})}function L_(n,a){if(!n.length)return[];const r=Math.min(Math.max(Number(a)||0,0),.999);let u=n[0].value;return n.map(s=>(u=u*r+s.value*(1-r),{...s,value:u}))}function B_(n,a){if(!n.length)return{raw:"",smooth:"",coords:[],minLabel:"n/a",maxLabel:"n/a"};const r=[...n,...a].map(v=>v.value),u=Math.min(...r),s=Math.max(...r),h=Math.max(s-u,1e-9),f=n[0].step,m=n[n.length-1].step,p=Math.max(m-f,1),d=v=>({x:(v.step-f)/p*700+10,y:168-(v.value-u)/h*146}),x=n.map(d),y=a.map(d);return{raw:x.map(v=>`${v.x.toFixed(1)},${v.y.toFixed(1)}`).join(" "),smooth:y.map(v=>`${v.x.toFixed(1)},${v.y.toFixed(1)}`).join(" "),coords:x,minLabel:Lp(u),maxLabel:Lp(s)}}function Lp(n){return Number.isFinite(n)?Math.abs(n)>=1e3||Math.abs(n)<.001?n.toExponential(2):n.toFixed(4).replace(/0+$/,"").replace(/\.$/,""):"n/a"}function U_({rows:n}){const a=H_(n||[],7).reverse(),r=n!=null&&n.length?n.reduce((h,f)=>h+Number(f.total_s||0),0)/n.length:0,u=Math.max(1,...a.map(h=>Number(h.total_s||0))),s=Array.from(new Set((n||[]).flatMap(h=>(h.segments||[]).map(f=>f.name)))).slice(0,8);return k.jsxs("div",{className:"timePerf",children:[k.jsxs("div",{className:"timePerfHeader",children:[k.jsx("div",{children:k.jsxs("div",{className:"codeTitle inline",children:[k.jsx(o_,{size:14})," Runtime timeperf"]})}),k.jsxs("div",{className:"legend",children:[s.map(h=>k.jsxs("span",{children:[k.jsx("i",{className:Bp(h)})," ",h]},h)),k.jsxs("b",{children:["avg ",r?`${r.toFixed(1)}s`:"n/a"]})]})]}),a.length===0?k.jsx("div",{className:"sampleEmpty",children:"No step timing captured yet."}):k.jsx("div",{className:"timeRows",children:a.map(h=>{var d;const f=Number(h.total_s||0),m=Math.max(10,f/u*100),p=(d=h.segments)!=null&&d.length?h.segments:[];return k.jsxs("div",{className:"timeRow",children:[k.jsxs("label",{children:["step ",h.step]}),k.jsx("div",{className:"timeTrack",children:k.jsx("div",{className:"timeStack",style:{width:`${m}%`},children:p.map(x=>{const y=Number(x.seconds||0),v=y/Math.max(f,1)*100;return k.jsx("span",{className:Bp(x.name),style:{width:`${v}%`},title:`${x.name}: ${y.toFixed(1)}s`,children:v>11?`${y.toFixed(1)}s`:""},x.name)})})}),k.jsxs("strong",{children:[f.toFixed(1),"s"]})]},`${h.step}-${h.time}`)})})]})}function H_(n,a){if(n.length<=a)return n.slice();const r=n.length-1,u=new Set;for(let s=0;ss-h).slice(-a).map(s=>n[s])}function Bp(n){return`seg-${String(n||"other").replace(/[^a-zA-Z0-9]+/g,"-")}`}function q_({samples:n}){const a=be.useMemo(()=>[...n||[]].sort((y,v)=>Number(y.step||0)-Number(v.step||0)||Number(y.prompt_idx||0)-Number(v.prompt_idx||0)||Number(y.sample_idx||0)-Number(v.sample_idx||0)),[n]),r=be.useMemo(()=>Array.from(new Set(a.map(y=>Number(y.step||0)))).sort((y,v)=>v-y),[a]),[u,s]=be.useState(""),[h,f]=be.useState("");be.useEffect(()=>{if(!r.length){s(""),f("");return}(u===""||!r.includes(Number(u)))&&(s(String(r[0])),f(""))},[u,r]);const p=(u===""?[]:a.filter(y=>Number(y.step||0)===Number(u))).map((y,v)=>({key:Y_(y,v),label:`prompt ${y.prompt_idx??"?"} · sample ${y.sample_idx??"?"}`,sample:y})),d=p.find(y=>y.key===h)||p[p.length-1]||null,x=(d==null?void 0:d.sample)||null;return k.jsxs("div",{className:"sampleCard",children:[k.jsxs("div",{className:"codeTitle sampleTitle",children:[k.jsxs("span",{children:[k.jsx(Fg,{size:14})," Rollout sample"]}),!!a.length&&k.jsxs("div",{className:"sampleControls",children:[k.jsx("select",{value:u,onChange:y=>{s(y.target.value),f("")},children:r.map(y=>k.jsxs("option",{value:y,children:["step ",y]},y))}),k.jsx("select",{value:(d==null?void 0:d.key)||"",onChange:y=>f(y.target.value),children:p.map(y=>k.jsx("option",{value:y.key,children:y.label},y.key))})]})]}),x?k.jsxs("div",{className:"sampleGrid",children:[k.jsxs("div",{children:[k.jsx("span",{children:"Prompt"}),k.jsx("p",{children:x.prompt||"n/a"})]}),k.jsxs("div",{children:[k.jsx("span",{children:"Completion"}),k.jsx("p",{children:x.completion||"n/a"})]})]}):k.jsx("div",{className:"sampleEmpty",children:"No rollout sample captured yet."})]})}function Y_(n,a){return`${n.step??"x"}-${n.prompt_idx??"x"}-${n.sample_idx??"x"}-${a}`}function G_({config:n,launch:a}){const r=n&&Object.keys(n).length?n:a||{},u=V_(r);return k.jsxs("div",{className:"codeCard",children:[k.jsxs("div",{className:"codeTitle",children:[k.jsx(Ig,{size:14})," Config"]}),u.length>0?k.jsx("div",{className:"configSections",children:u.map(s=>k.jsxs("div",{className:"configSection",children:[k.jsx("h3",{children:s.title}),k.jsx("div",{className:"configGrid",children:s.items.map(({key:h,value:f})=>k.jsxs("div",{className:"configItem",children:[k.jsx("span",{children:h.replace(/_/g," ")}),k.jsx("strong",{children:Q_(f)})]},h))})]},s.title))}):k.jsx("pre",{children:"No config captured yet."})]})}function V_(n){if(Array.isArray(n==null?void 0:n.sections))return n.sections.map(r=>({title:r.title||"Config",items:(r.items||[]).filter(({value:u})=>u!=null&&u!=="")})).filter(r=>r.items.length>0);const a=Object.entries(n||{}).filter(([,r])=>r!=null&&r!=="").map(([r,u])=>({key:r,value:u}));return a.length?[{title:"Launch",items:a}]:[]}function Q_(n){return Array.isArray(n)?n.join(" "):typeof n=="object"?JSON.stringify(n):String(n)}function X_({logs:n}){const a=be.useRef(null);return be.useEffect(()=>{const r=a.current;r&&(r.scrollTop=r.scrollHeight)},[n.length]),k.jsxs("div",{className:"codeCard",ref:a,children:[k.jsxs("div",{className:"codeTitle",children:[k.jsx(u_,{size:14})," Logs"]}),k.jsx("pre",{children:n.slice(-80).join(` -`)||"No logs yet."})]})}function Z_({config:n,setConfig:a,onStart:r}){const u=String(n.algo||"sft").toLowerCase(),s=K_(u),h=(f,m)=>a({...n,[f]:m});return k.jsxs("div",{className:"launcherSections",children:[s.map(f=>k.jsxs("div",{className:"launcherSection",children:[k.jsxs("div",{className:"launcherSectionHeader",children:[k.jsx("strong",{children:f.title}),f.note&&k.jsx("span",{children:f.note})]}),k.jsx("div",{className:"formGrid",children:f.fields.map(m=>k.jsx(du,{label:m.label,value:n[m.key],onChange:p=>h(m.key,p),compact:m.compact,type:m.type,options:m.options},m.key))})]},f.title)),k.jsxs("button",{className:"primaryButton launchButton wide",onClick:r,children:[k.jsx(Ls,{size:16})," Start train"]})]})}function K_(n){const a=["gspo","grpo","ppo"].includes(n),r=a,u=n==="dpo",s=n==="ppo",h=n==="gspo",f=n==="grpo",m=[{title:"Basic",note:"model, data, and trainer loop",fields:[ls("algo","Algorithm",["sft","dpo","gspo","grpo","ppo"],!0),me("ckpt","Checkpoint"),ls("model_hub","Model hub",["modelscope","hf"],!0),me("dataset_path","Dataset path"),me("dataset_loader_fn","Dataset loader"),me("epochs","Epochs",!0),me("max_steps","Max steps",!0)]},{title:"Runtime",note:"parallelism, memory, and kernels",fields:[me("world_size","World",!0),me("tp_size","TP",!0),ls("attn_backend","Attention",["flash","native"],!0),Hn("activation_checkpointing","Activation ckpt"),Hn("drop_rollout_state","Drop rollout state"),Hn("eager_decode","Eager decode"),Hn("disable_thinking","Disable thinking")]},{title:"Batching",note:"controls train and rollout memory",fields:[me("batch_size","Batch",!0),...a?[me("n_samples","Samples",!0),me("max_running_prompts","Running prompts",!0)]:[],me("mini_bs","Mini BS",!0),me("score_micro_bs","Score micro BS",!0),me("gradient_accumulation_steps","Grad accum",!0)]},{title:a?"Rollout":"Sequence",note:a?"generation and sampling":"token limits for supervised data",fields:[me("max_prompt_tokens","Prompt tokens",!0),me("max_new_tokens","New tokens",!0),...r?[me("max_context_len","Context",!0),me("agent_fn","Agent fn"),me("agent_timeout_s","Agent timeout",!0),Hn("train_tool_results","Train tool results")]:[],...a?[me("temperature","Temp",!0),me("top_k","Top K",!0),me("top_p","Top P",!0),Hn("greedy","Greedy")]:[]]},{title:"Optimizer",note:"policy optimizer settings",fields:[me("lr","LR",!0),me("min_lr","Min LR",!0),me("lr_decay_steps","Decay steps",!0),me("lr_decay_style","Decay style",!0),me("adam_beta1","Adam beta1",!0),me("adam_beta2","Adam beta2",!0),me("weight_decay","Weight decay",!0),me("grad_clip_norm","Grad clip",!0),Hn("adam_8bit","8-bit Adam")]}],p=[];return(u||s)&&p.push(me("ref_ckpt","Reference ckpt")),a&&p.push(me("reward_fn_path","Reward fn")),s&&p.push(me("reward_ckpt","Reward ckpt"),me("critic_ckpt","Critic ckpt"),me("critic_lr","Critic LR",!0),me("critic_warmup_steps","Critic warmup",!0)),h&&p.push(me("gspo_clip_eps","GSPO clip",!0)),f&&p.push(me("grpo_clip_eps","GRPO clip",!0)),u&&p.push(me("dpo_beta","DPO beta",!0)),s&&p.push(Hn("use_kl_loss","Use KL loss"),me("kl_loss_coef","KL coef",!0),me("kl_loss_type","KL type",!0),me("clip_eps","Clip eps",!0),me("clip_ratio_c","Clip ratio C",!0),me("value_clip_eps","Value clip",!0),me("value_loss_coef","Value coef",!0),me("gamma","Gamma",!0),me("lam","Lambda",!0)),p.length>0&&m.push({title:"Algorithm",note:`${n.toUpperCase()}-specific roles and loss`,fields:p}),m.push({title:"Probe",note:"optional smoke and auto tune helpers",fields:[Hn("tune_params","Tune params"),me("mem_frac","Memory frac",!0),me("tune_max_samples","Tune samples",!0)]},{title:"Output",note:"checkpointing, metrics, and escape hatch",fields:[me("save_path","Save path"),me("save_interval","Save interval",!0),me("metrics_dir","Metrics dir"),me("extra_args","Extra args")]}),m}function me(n,a,r=!1){return{key:n,label:a,compact:r}}function ls(n,a,r,u=!1){return{key:n,label:a,compact:u,type:"select",options:r}}function Hn(n,a){return{key:n,label:a,compact:!0,type:"checkbox"}}function F_({config:n,setConfig:a,onStart:r}){return k.jsxs("div",{className:"formGrid",children:[[["model_path","Model path"],["model_hub","Model hub"],["host","Host"],["port","Port"],["world_size","World"],["tp_size","TP"],["max_running_prompts","Running prompts"],["default_max_tokens","Default max tokens"],["decode_progress_interval_s","Progress interval"],["attn_backend","Attention backend"],["eager_decode","Eager decode"],["disable_thinking","Disable thinking"],["extra_args","Extra args"]].map(([u,s])=>k.jsx(du,{label:s,value:n[u],onChange:h=>a({...n,[u]:h}),compact:u!=="model_path"},u)),k.jsxs("button",{className:"primaryButton launchButton wide",onClick:r,children:[k.jsx(Ls,{size:16})," Start serve"]})]})}function du({label:n,value:a,onChange:r,compact:u,type:s="text",options:h=[]}){return s==="checkbox"?k.jsxs("label",{className:kt("field","compact","checkField"),children:[k.jsx("input",{type:"checkbox",checked:!!a,onChange:f=>r(f.target.checked)}),k.jsx("span",{children:n})]}):k.jsxs("label",{className:kt("field",u&&"compact"),children:[k.jsx("span",{children:n}),s==="select"?k.jsx("select",{value:a??"",onChange:f=>r(f.target.value),children:h.map(f=>k.jsx("option",{value:f,children:f},f))}):k.jsx("input",{value:a??"",onChange:f=>r(f.target.value)})]})}function ty({title:n,text:a}){return k.jsxs("div",{className:"empty",children:[k.jsx(Kg,{size:18}),k.jsx("strong",{children:n}),k.jsx("span",{children:a})]})}const Up=typeof document<"u"?document.getElementById("root"):null;Up&&E0.createRoot(Up).render(k.jsx(g_,{})); diff --git a/areno/dashboard/dist/assets/index-CIfovKBG.css b/areno/dashboard/dist/assets/index-bundle.css similarity index 63% rename from areno/dashboard/dist/assets/index-CIfovKBG.css rename to areno/dashboard/dist/assets/index-bundle.css index 125fbd22..449ea951 100644 --- a/areno/dashboard/dist/assets/index-CIfovKBG.css +++ b/areno/dashboard/dist/assets/index-bundle.css @@ -1 +1 @@ -:root{color-scheme:dark;--deck-canvas: #0b0f14;--deck-rail: #0f151c;--deck-panel: #121923;--deck-panel-2: #151f2b;--deck-line: rgba(167, 186, 210, .14);--deck-line-strong: rgba(167, 186, 210, .24);--deck-ink: #edf4ff;--deck-text: #b8c6d8;--deck-muted: #728196;--deck-cyan: #38d7ff;--deck-green: #57e39b;--deck-amber: #ffc857;--deck-red: #ff6b7a;--deck-violet: #a993ff;--radius-sm: 7px;--radius-md: 10px;--radius-lg: 14px;--shadow-panel: 0 0 0 1px rgba(167, 186, 210, .08), 0 18px 40px rgba(0, 0, 0, .26);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--deck-canvas);color:var(--deck-ink);-webkit-font-smoothing:antialiased}:root[data-theme=light]{color-scheme:light;--deck-canvas: #f5f7fb;--deck-rail: #ffffff;--deck-panel: #ffffff;--deck-panel-2: #eef4fb;--deck-line: rgba(25, 44, 68, .13);--deck-line-strong: rgba(25, 44, 68, .24);--deck-ink: #142033;--deck-text: #43566f;--deck-muted: #728096;--deck-cyan: #007ea7;--deck-green: #168a57;--deck-amber: #a56a00;--deck-red: #c73446;--deck-violet: #6e56cf;--shadow-panel: 0 0 0 1px rgba(25, 44, 68, .06), 0 16px 36px rgba(34, 56, 83, .1)}*{box-sizing:border-box}body{margin:0;width:100%;overflow-x:hidden;background:var(--deck-canvas)}button,input,select,textarea{font:inherit}button{cursor:pointer}.shell{display:grid;grid-template-columns:272px minmax(0,1fr);min-height:100vh;width:100%}.rail{display:flex;flex-direction:column;border-right:1px solid var(--deck-line);background:var(--deck-rail);padding:18px 14px}.brand{display:flex;align-items:center;gap:12px;padding:8px 8px 20px}.brandMark{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:#101f2c;border:1px solid rgba(56,215,255,.3);color:var(--deck-cyan);font-weight:700}.brandName{font-size:14px;font-weight:650;letter-spacing:0}.brandMeta,.tinyLabel{color:var(--deck-muted);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.nav{display:grid;gap:5px}.navItem{display:flex;align-items:center;gap:10px;width:100%;height:36px;border:0;padding:0 10px;background:transparent;color:var(--deck-text);border-radius:var(--radius-sm);text-decoration:none;font-size:13px;font-weight:560}.navItem.active,.navItem:hover{background:#38d7ff14;color:var(--deck-ink)}.railFooter{margin-top:auto;border-top:1px solid var(--deck-line);padding:14px 8px 4px}.monoLine{margin-top:6px;color:var(--deck-text);font-family:SFMono-Regular,Roboto Mono,ui-monospace,monospace;font-size:12px;overflow-wrap:anywhere}.main{min-width:0;max-width:100%;overflow-x:hidden;padding:20px}.topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:16px}.topActions{display:inline-flex;gap:8px}h1,h2,p{margin:0}h1{font-size:25px;line-height:1.15;font-weight:680;letter-spacing:0}h2{font-size:15px;line-height:1.3;font-weight:650}p{color:var(--deck-muted);font-size:13px;line-height:1.45;margin-top:5px}.panel{background:var(--deck-panel);border:1px solid var(--deck-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-panel)}.workspace{min-height:560px}.tabGrid{display:grid;gap:12px}.metricsGrid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:12px;align-items:start}.jobMetricsGrid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:12px;margin-bottom:12px}.insetPanel{box-shadow:none;background:#a7bad208}.runtimeDeck{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:12px;margin-bottom:12px}.gpuDeck{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.gpuCard{background:var(--deck-panel);border:1px solid var(--deck-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-panel);padding:14px}.gpuHead{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:14px}.gpuHead strong{color:var(--deck-ink);font-size:13px}.gpuHead span{color:var(--deck-muted);font-size:12px;text-align:right;overflow-wrap:anywhere}.gpuMeter{display:grid;gap:7px;margin-top:10px}.gpuMeterLabel{display:flex;justify-content:space-between;gap:12px;color:var(--deck-muted);font-size:11px;font-weight:700}.gpuMeterLabel b{color:var(--deck-text);font-variant-numeric:tabular-nums}.meterTrack{height:9px;border-radius:999px;background:#a7bad21f;overflow:hidden}.meterTrack i{display:block;height:100%;border-radius:inherit;background:var(--deck-violet)}.meterTrack.util i{background:var(--deck-cyan)}.runtimeHero,.envFacts,.checkMatrix,.dependencyStrip{background:var(--deck-panel);border:1px solid var(--deck-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-panel)}.runtimeHero{display:flex;align-items:center;gap:16px;min-height:116px;padding:16px}.readinessOrb{display:grid;place-items:center;width:58px;height:58px;border-radius:18px;font-weight:800;font-size:17px;border:1px solid var(--deck-line);background:#0b1118}.readinessOrb.ready{color:var(--deck-green);border-color:#57e39b59;box-shadow:inset 0 0 24px #57e39b0f}.readinessOrb.blocked{color:var(--deck-amber);border-color:#ffc85759;box-shadow:inset 0 0 24px #ffc8570f}.envFacts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;overflow:hidden;background:var(--deck-line)}.envFact{display:flex;align-items:center;gap:10px;min-height:57px;padding:12px;background:var(--deck-panel)}.envFact>span{display:grid;place-items:center;width:28px;height:28px;color:var(--deck-cyan);border:1px solid var(--deck-line);border-radius:8px;background:#0b1118}.envFact label{display:block;color:var(--deck-muted);font-size:11px;font-weight:650;margin-bottom:3px}.envFact strong{display:block;color:var(--deck-ink);font-size:13px;font-weight:650;overflow-wrap:anywhere}.checkMatrix{grid-column:1 / -1;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;overflow:hidden;background:var(--deck-line)}.checkItem{min-height:76px;padding:11px;background:var(--deck-panel)}.checkItem span{display:inline-flex;align-items:center;height:20px;border-radius:999px;padding:0 7px;font-size:10px;font-weight:800;margin-bottom:8px}.checkItem.ok span{color:var(--deck-green);background:#57e39b1a}.checkItem.warn span{color:var(--deck-amber);background:#ffc8571a}.checkItem.fail span{color:var(--deck-red);background:#ff6b7a1a}.checkItem strong,.checkItem small{display:block}.checkItem strong{color:var(--deck-ink);font-size:12px;font-weight:650}.checkItem small{margin-top:5px;color:var(--deck-muted);font-size:11px;line-height:1.35;overflow-wrap:anywhere}.dependencyStrip{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:8px;padding:10px}.depPill{display:inline-flex;align-items:center;min-height:26px;padding:0 9px;border-radius:999px;border:1px solid var(--deck-line);color:var(--deck-text);background:#0b1118;font-size:12px;font-weight:600}.depPill.ok{border-color:#57e39b40}.depPill.warn{border-color:#ffc85740}.panel{min-width:0;padding:14px}.panelHeader{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px;min-width:0}.panelHeader>div{min-width:0}.jobList{display:grid;gap:7px}.jobListPage .jobList{gap:10px}.pagerControls{display:inline-flex;align-items:center;gap:8px;flex-shrink:0}.pagerControls span,.listFooter{color:var(--deck-muted);font-size:12px;font-variant-numeric:tabular-nums}.pagerControls button:disabled{cursor:not-allowed;opacity:.42}.listFooter{margin-top:12px;text-align:right}.jobRow{display:grid;grid-template-columns:34px 1fr 10px;align-items:center;gap:10px;width:100%;min-height:56px;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;color:inherit;padding:7px;text-align:left}.jobRow.large{grid-template-columns:42px 1fr 10px;min-height:72px;padding:11px}.jobRow.large .jobIcon{width:42px;height:42px}.detailActions{display:inline-flex;flex:0 0 auto;flex-wrap:wrap;justify-content:flex-end;gap:8px}.jobRow:hover,.jobRow.selected{background:var(--deck-panel-2);border-color:var(--deck-line)}.jobIcon{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:#0b1119;color:var(--deck-cyan);border:1px solid var(--deck-line)}.jobTitle{font-size:13px;font-weight:620}.jobMeta{margin-top:4px;color:var(--deck-muted);font-size:12px}.statusDot{width:8px;height:8px;border-radius:50%;background:var(--deck-muted)}.statusDot.running{background:var(--deck-green);box-shadow:0 0 0 4px #57e39b1a}.statusDot.failed{background:var(--deck-red)}.statusDot.stopped{background:var(--deck-amber)}.timeline{display:flex;gap:8px;margin-bottom:12px;overflow-x:auto;padding-bottom:4px}.timelineItem{flex:0 0 136px;min-width:136px;display:flex;align-items:center;gap:8px;height:38px;padding:0 10px;border-radius:var(--radius-md);background:#0c121a;border:1px solid var(--deck-line);color:var(--deck-muted)}.timelineItem span{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#ffffff0d;font-size:11px;font-weight:700;font-variant-numeric:tabular-nums}.timelineItem.done{color:var(--deck-text)}.timelineItem.current{border-color:#38d7ff73;color:var(--deck-cyan)}.chart{min-height:272px;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:#0c121a;padding:12px;margin-bottom:12px}.chartControls{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:10px;min-width:0}.chartControls select{height:28px;width:min(230px,100%);min-width:0;border:1px solid var(--deck-line);border-radius:var(--radius-sm);background:#0b1118;color:var(--deck-text);padding:0 8px;outline:none}.chartControls label{display:flex;align-items:center;gap:7px;color:var(--deck-muted);font-size:11px;white-space:nowrap}.chartControls input[type=range]{width:92px;height:4px;accent-color:var(--deck-cyan)}.sampleCard{margin-bottom:12px;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:#0b1118;overflow:hidden}.sampleGrid{display:grid;grid-template-columns:.9fr 1.1fr;gap:1px;background:var(--deck-line)}.sampleGrid>div,.sampleEmpty{min-height:116px;padding:11px;background:#0b1118}.sampleGrid span{display:block;color:var(--deck-muted);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;margin-bottom:7px}.sampleGrid p,.sampleEmpty{color:var(--deck-text);font-size:12px;line-height:1.5;max-height:150px;overflow:auto;white-space:pre-wrap}.sampleEmpty{color:var(--deck-muted)}.chartHeader{display:flex;align-items:center;justify-content:space-between;color:var(--deck-muted);font-size:12px;margin-bottom:12px}.chartHeader span{display:flex;align-items:center;gap:6px}.metricPlot{display:block;width:100%;height:180px;overflow:visible}.plotGrid line{stroke:#a7bad21a;stroke-width:1}.rawLine,.smoothLine{fill:none;stroke-linejoin:round;stroke-linecap:round}.rawLine{stroke:#728196bf;stroke-width:1.3}.smoothLine{stroke:var(--deck-cyan);stroke-width:2.7;filter:drop-shadow(0 0 8px rgba(56,215,255,.2))}.metricPlot circle{fill:var(--deck-ink);stroke:var(--deck-canvas);stroke-width:1.2}.plotFooter{display:flex;flex-wrap:wrap;gap:6px 12px;justify-content:space-between;margin-top:8px;color:var(--deck-muted);font-size:11px;font-variant-numeric:tabular-nums}.plotEmpty{display:grid;place-items:center;height:180px;color:var(--deck-muted);border:1px dashed var(--deck-line-strong);border-radius:var(--radius-md)}.timePerf{margin-bottom:12px;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:#0b1118;padding:12px}.timePerfHeader{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px}.codeTitle.inline{position:static;height:auto;padding:0;border:0;background:transparent}.legend{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:9px 12px;color:var(--deck-muted);font-size:11px}.legend span{display:inline-flex;align-items:center;gap:5px}.legend i{width:8px;height:8px;border-radius:50%}.legend b{color:var(--deck-text);font-weight:700;font-variant-numeric:tabular-nums}.timeRows{display:grid;gap:8px}.timeRow{display:grid;grid-template-columns:64px minmax(0,1fr) 70px;align-items:center;gap:10px}.timeRow label,.timeRow strong{color:var(--deck-text);font-size:12px;font-weight:650;font-variant-numeric:tabular-nums}.timeRow strong{text-align:right}.timeTrack{height:28px;border-radius:6px;background:#141b25;border:1px solid rgba(167,186,210,.1);overflow:hidden}.timeStack{display:flex;height:100%;min-width:18px}.timeStack span{display:flex;align-items:center;justify-content:center;min-width:3px;color:#ffffffeb;font-size:11px;font-weight:800;font-variant-numeric:tabular-nums;overflow:hidden;white-space:nowrap}.seg-rollout,.legend .seg-rollout{background:#20c997}.seg-train,.legend .seg-train{background:#bf2bd9}.seg-other,.legend .seg-other{background:#2851f5}.seg-reward,.legend .seg-reward{background:#d33672}.seg-advantages,.legend .seg-advantages{background:#5a3ee6}.seg-actor-log-probs,.legend .seg-actor-log-probs{background:#e243d2}.seg-ref-log-probs,.legend .seg-ref-log-probs,.seg-old-policy-log-probs,.legend .seg-old-policy-log-probs{background:#c43f66}.seg-value,.legend .seg-value{background:#8b5cf6}.seg-sync-weight,.legend .seg-sync-weight,.seg-save,.legend .seg-save{background:#83b81a}.seg-make-sample,.legend .seg-make-sample{background:#b96a19}.split{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:12px}.codeCard{min-width:0;min-height:250px;max-height:360px;overflow:auto;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:#0b1118}.codeTitle{position:sticky;top:0;display:flex;align-items:center;gap:7px;height:34px;padding:0 11px;border-bottom:1px solid var(--deck-line);background:#0d131b;color:var(--deck-text);font-size:12px;font-weight:650}.sampleTitle{justify-content:space-between;gap:10px;min-height:34px;height:auto;padding-top:4px;padding-bottom:4px}.sampleTitle>span{display:inline-flex;align-items:center;gap:7px}.sampleControls{display:inline-flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.sampleControls select{height:26px;max-width:170px;border:1px solid var(--deck-line);border-radius:var(--radius-sm);background:#0b1118;color:var(--deck-text);padding:0 8px;font-size:11px;outline:none}pre{margin:0;padding:11px;color:#d2deee;font-family:SFMono-Regular,Roboto Mono,ui-monospace,monospace;font-size:12px;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}.configSections{display:grid;gap:12px;padding:11px}.configSection{min-width:0}.configSection h3{margin:0 0 8px;color:var(--deck-text);font-size:12px;font-weight:750;letter-spacing:0}.configGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px}.configItem{min-width:0;border:1px solid var(--deck-line);border-radius:var(--radius-sm);background:#a7bad20d;padding:9px}.configItem span{display:block;color:var(--deck-muted);font-size:10px;font-weight:750;text-transform:uppercase;letter-spacing:.05em;margin-bottom:5px}.configItem strong{display:block;color:var(--deck-ink);font-size:12px;font-weight:620;line-height:1.35;overflow-wrap:anywhere}.lowerGrid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr);gap:12px;margin-top:12px}.tabs{display:flex;gap:3px;padding:3px;border-radius:var(--radius-md);border:1px solid var(--deck-line);background:#0c121a}.tabs button{height:28px;border:0;border-radius:7px;background:transparent;color:var(--deck-muted);padding:0 12px;font-size:12px;font-weight:650}.tabs button.active{color:var(--deck-ink);background:var(--deck-panel-2)}.secondaryButton{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:34px;border:1px solid var(--deck-line);border-radius:var(--radius-sm);padding:0 12px;color:var(--deck-text);background:transparent;font-size:12px;font-weight:700}.launcherSections{display:grid;gap:14px}.launcherSection{display:grid;gap:10px;border:1px solid var(--deck-line);border-radius:var(--radius-md);padding:14px;background:var(--deck-panel-2)}.launcherSectionHeader{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.launcherSectionHeader strong{color:var(--deck-ink);font-size:13px;font-weight:760}.launcherSectionHeader span{color:var(--deck-faint);font-size:11px;font-weight:600;text-align:right}.formGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.field{display:grid;gap:6px;grid-column:span 2}.field.compact{grid-column:span 1}.field span{color:var(--deck-muted);font-size:11px;font-weight:650}input,select,textarea{width:100%;border:1px solid var(--deck-line);border-radius:var(--radius-sm);background:#0b1118;color:var(--deck-ink);outline:none}input,select{height:34px;padding:0 10px;font-size:13px}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--deck-muted) 50%),linear-gradient(135deg,var(--deck-muted) 50%,transparent 50%);background-position:calc(100% - 14px) 14px,calc(100% - 9px) 14px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:28px}.checkField{display:flex;min-height:34px;align-items:center;gap:9px;align-self:end;border:1px solid var(--deck-line);border-radius:var(--radius-sm);padding:0 10px;background:#0b1118}.checkField input{width:15px;height:15px;padding:0;accent-color:var(--deck-cyan)}.checkField span{color:var(--deck-text);font-size:12px;font-weight:650}textarea{min-height:96px;resize:vertical;padding:10px;line-height:1.45}input:focus,select:focus,textarea:focus{border-color:#38d7ff85;box-shadow:0 0 0 3px #38d7ff1a}.primaryButton,.dangerButton,.iconButton{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;border-radius:var(--radius-sm);border:1px solid var(--deck-line);padding:0 12px;font-weight:650;font-size:13px}.primaryButton{color:#001018;border-color:#38d7ffcc;background:var(--deck-cyan)}.primaryButton.wide{grid-column:1 / -1}.launchButton{min-height:44px;border-radius:var(--radius-md);letter-spacing:0;width:100%}.dangerButton{color:var(--deck-red);background:#ff6b7a1a;border-color:#ff6b7a57}.dangerButton:hover{background:#ff6b7a29;border-color:#ff6b7a7a}.iconButton{width:36px;padding:0;color:var(--deck-text);background:var(--deck-panel)}.notice,.error{min-height:38px;display:flex;align-items:center;border-radius:var(--radius-md);padding:0 12px;margin-bottom:12px;font-size:13px;border:1px solid var(--deck-line)}.notice{color:var(--deck-cyan);background:#38d7ff14}.error{color:#ffd6db;background:#ff6b7a1a}.agentPanel{display:flex;flex-direction:column;gap:12px}.agentConfig{display:grid;grid-template-columns:1.2fr 1fr 1fr;gap:10px;align-items:end;margin-bottom:12px}.agentConfig.modalForm{grid-template-columns:1fr;margin-bottom:0}.modalOverlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;background:#03080fa8;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:24px}.modalCard{width:min(560px,100%);border:1px solid var(--deck-line);border-radius:16px;background:var(--deck-panel);box-shadow:0 24px 80px #0000006b;padding:16px}.modalHeader{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.chatPanel{display:grid;grid-template-rows:auto auto minmax(360px,1fr) auto;min-height:650px}.agentHeaderActions{display:inline-flex;align-items:center;gap:8px}.agentTabs{display:inline-flex;align-items:center;gap:6px;width:max-content;margin:4px 0 0 clamp(28px,5vw,112px);padding:4px;border:1px solid var(--deck-line);border-radius:999px;background:var(--deck-soft)}.agentTabs button{display:inline-flex;align-items:center;gap:7px;border:0;border-radius:999px;padding:7px 12px;background:transparent;color:var(--deck-muted);font-size:12px;font-weight:750}.agentTabs button.active{background:var(--deck-panel);color:var(--deck-ink);box-shadow:0 8px 22px #00000024}.chatMessages{display:flex;flex-direction:column;gap:24px;min-height:360px;max-height:56vh;overflow:auto;border:0;border-radius:var(--radius-lg);background:transparent;padding:48px clamp(28px,5vw,112px) 18px}.chatBubble{max-width:min(1280px,100%);border:0;border-radius:0;background:transparent;padding:0;color:var(--deck-text)}.chatBubble.user{align-self:flex-end;max-width:min(680px,72%);border-radius:14px;background:#1a86ff;color:#fff;box-shadow:0 12px 28px #1a86ff29;padding:13px 20px}.chatBubble.assistant{align-self:flex-start;width:min(1280px,100%)}.chatBubble>span{display:block;margin-bottom:5px;color:var(--deck-muted);font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.chatBubble.user>span{display:none}.chatBubble.assistant>span{display:none}.chatBubble p{margin:0;white-space:pre-wrap;color:var(--deck-text)}.chatBubble.user p,.chatBubble.user .markdownBlock{color:#fff;font-size:13px;font-weight:650}.reasoningBlock{position:relative;margin:4px 0 18px;padding-left:34px;color:var(--deck-muted);background:transparent}.reasoningBlock:before{content:"";position:absolute;top:28px;bottom:0;left:15px;width:2px;border-radius:999px;background:var(--deck-line)}.reasoningBlock summary{display:inline-flex;align-items:center;gap:9px;cursor:pointer;list-style:none;min-height:28px}.reasoningBlock summary::-webkit-details-marker{display:none}.reasoningBlock summary span{display:inline-grid;place-items:center;width:18px;height:18px;border:1px solid var(--deck-line-strong);border-radius:999px;color:var(--deck-muted);font-size:11px}.reasoningBlock summary strong{color:var(--deck-muted);font-size:12px;font-weight:650}.reasoningBlock summary:after{content:"⌄";color:var(--deck-muted);font-size:15px}.agentEventList{display:grid;gap:16px}.agentEventList>.markdownBlock{width:min(780px,calc(100% - 64px));margin-left:34px}.markdownBlock{color:var(--deck-text);font-size:13px;line-height:1.58;overflow-wrap:anywhere}.markdownBlock>*:first-child{margin-top:0}.markdownBlock>*:last-child{margin-bottom:0}.markdownBlock p,.markdownBlock ul,.markdownBlock ol{margin:0 0 8px}.markdownBlock ul,.markdownBlock ol{padding-left:20px}.markdownBlock code{border:1px solid var(--deck-line);border-radius:5px;padding:1px 4px;background:#38d7ff14;color:var(--deck-ink)}.markdownBlock pre{max-height:220px;overflow:auto;border:1px solid var(--deck-line);border-radius:8px;padding:10px;background:#04080d38}.markdownBlock table{display:block;width:100%;max-width:100%;margin:10px 0;overflow:auto;border-collapse:collapse;border:1px solid var(--deck-line);border-radius:8px}.markdownBlock th,.markdownBlock td{padding:7px 9px;border-bottom:1px solid var(--deck-line);text-align:left;white-space:nowrap}.markdownBlock th{color:var(--deck-ink);background:#38d7ff14;font-size:11px;font-weight:750}.markdownBlock tr:last-child td{border-bottom:0}.reasoningBlock .markdownBlock{width:min(780px,calc(100% - 64px));max-height:160px;overflow:auto;margin-left:34px;padding:14px 0 2px;color:var(--deck-muted)}.toolCallList{display:grid;gap:8px;margin-top:0}.toolCallCard{width:min(780px,calc(100% - 64px));margin-left:34px;border:1px solid rgba(148,163,184,.24);border-radius:11px;background:var(--deck-panel);box-shadow:none;overflow:hidden}.toolCallCard.ok{border-color:var(--deck-line-strong);background:var(--deck-panel)}.toolCallCard.failed{border-color:#ff6b7a47;background:#ff6b7a14}.toolCallCard.live{border-color:#57e39b6b;background:#57e39b12}.toolCallDetails summary,.toolResultDetails summary{display:grid;grid-template-columns:auto minmax(96px,auto) minmax(0,1fr);align-items:center;gap:8px;min-height:36px;padding:0 12px;cursor:pointer;border-bottom:1px solid var(--deck-line);list-style-position:outside}.toolCallDetails:not([open]) summary,.toolResultDetails:not([open]) summary{border-bottom:0}.toolCallDetails summary::marker,.toolResultDetails summary::marker{color:var(--deck-muted)}.toolResultDetails summary span{display:inline-flex;align-items:center;justify-content:center;min-width:58px;height:19px;border:1px solid rgba(87,227,155,.28);border-radius:999px;background:#57e39b1a;color:var(--deck-green);font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.toolCallDetails summary span{position:relative;width:14px;min-width:14px;height:14px;overflow:hidden;color:transparent}.toolCallDetails summary span:before{content:"";position:absolute;top:2px;right:2px;bottom:2px;left:2px;border-radius:999px;background:#35c737}.toolResultDetails.ok summary span{border-color:#57e39b38;background:#57e39b17;color:var(--deck-green)}.toolResultDetails.failed summary span{border-color:#ff6b7a47;background:#ff6b7a1a;color:var(--deck-red)}.toolCallDetails summary b,.toolResultDetails summary b{color:var(--deck-ink);font-size:12px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,Consolas,monospace;font-weight:750;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolCallDetails summary em,.toolResultDetails summary em{min-width:0;overflow:hidden;color:var(--deck-muted);font-size:11px;font-style:normal;text-overflow:ellipsis;white-space:nowrap}.toolCallHead{border-bottom:1px solid var(--deck-line)}.toolCallHead span{margin:0;color:var(--deck-cyan)}.toolCallHead b{color:var(--deck-ink);font-size:11px}.toolCallCard pre{max-height:140px;overflow:auto;background:transparent;border-top:1px solid var(--deck-line);padding:10px 12px;font-size:11px}.toolResultDetails pre{max-height:240px}.streamingHint{margin-top:8px;color:var(--deck-cyan);font-size:11px;font-weight:700}.chatComposer{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px;margin-top:12px;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:var(--deck-panel);padding:10px}.chatComposer textarea{min-height:72px;border:0;padding:8px;background:transparent;resize:none;font-size:13px}.agentHistory{min-height:360px;max-height:56vh;overflow:auto;padding:28px clamp(28px,5vw,112px) 18px}.agentHistoryHeader{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.agentHistoryHeader h3{margin:0 0 4px;font-size:16px}.agentHistoryHeader p{margin:0;color:var(--deck-muted);font-size:12px}.agentHistoryList{display:grid;gap:10px}.agentHistoryItem{display:grid;gap:5px;width:min(840px,100%);border:1px solid var(--deck-line);border-radius:13px;background:var(--deck-panel);padding:13px 15px;text-align:left}.agentHistoryItem.active{border-color:#38d7ff7a;box-shadow:0 0 0 1px #38d7ff2e}.agentHistoryItem strong{color:var(--deck-ink);font-size:13px}.agentHistoryItem span{overflow:hidden;color:var(--deck-muted);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.agentHistoryItem small{color:var(--deck-subtle);font-size:11px}.agentOutput{min-height:152px;border-radius:var(--radius-lg);border:1px solid var(--deck-line);background:#0b1118;color:var(--deck-text);padding:12px;font-size:13px;line-height:1.5;white-space:pre-wrap}.empty{display:grid;place-items:center;gap:8px;min-height:180px;color:var(--deck-muted);border:1px dashed var(--deck-line-strong);border-radius:var(--radius-lg);text-align:center;padding:16px}.empty strong{color:var(--deck-text);font-size:13px}.empty span{font-size:12px}:root[data-theme=light] .brandMark,:root[data-theme=light] .readinessOrb,:root[data-theme=light] .envFact,:root[data-theme=light] .envFact>span,:root[data-theme=light] .checkItem,:root[data-theme=light] .depPill,:root[data-theme=light] .timelineItem,:root[data-theme=light] .chart,:root[data-theme=light] .sampleCard,:root[data-theme=light] .sampleGrid>div,:root[data-theme=light] .sampleEmpty,:root[data-theme=light] .timePerf,:root[data-theme=light] .codeCard,:root[data-theme=light] .codeTitle,:root[data-theme=light] input,:root[data-theme=light] textarea,:root[data-theme=light] select,:root[data-theme=light] .checkField,:root[data-theme=light] .agentOutput,:root[data-theme=light] .chatComposer,:root[data-theme=light] .timeTrack,:root[data-theme=light] .tabs{background:var(--deck-panel)}:root[data-theme=light] .chartControls select,:root[data-theme=light] .configItem{background:#fff;color:var(--deck-ink)}:root[data-theme=light] .dangerButton{color:#a51d2d;background:#fff1f3;border-color:#c7344647}:root[data-theme=light] .primaryButton{color:#fff;background:#007ea7;border-color:#007ea7;box-shadow:0 8px 18px #007ea72e}:root[data-theme=light] .launchButton{background:#006d94;border-color:#006d94}:root[data-theme=light] .jobIcon{background:#f3f7fb}:root[data-theme=light] .chatBubble.user{background:#1683ff;color:#fff}:root[data-theme=light] .chatMessages{background:transparent}:root[data-theme=light] .toolCallCard{box-shadow:0 6px 18px #1420330f}:root[data-theme=light] .rawLine{stroke:#55657aa6}:root[data-theme=light] pre{color:#25344a}@media(max-width:980px){.shell{grid-template-columns:1fr}.rail{position:sticky;top:0;z-index:20;border-right:0;border-bottom:1px solid var(--deck-line);padding:10px}.brand,.railFooter{display:none}.nav{display:flex;gap:6px;overflow-x:auto}.navItem{width:auto;flex:0 0 auto}.main{padding:12px}.topbar,.panelHeader,.timePerfHeader{flex-direction:column;align-items:stretch}.runtimeDeck,.jobMetricsGrid,.metricsGrid,.split,.sampleGrid,.formGrid{grid-template-columns:1fr}.field,.field.compact{grid-column:span 1}.checkMatrix,.envFacts{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:560px){.checkMatrix,.envFacts{grid-template-columns:1fr}.jobRow.large{grid-template-columns:34px minmax(0,1fr)}.jobRow.large .statusDot{display:none}.timeRow{grid-template-columns:52px minmax(0,1fr)}.timeRow strong{grid-column:2;text-align:left}} +:root{color-scheme:dark;--deck-canvas: #0b0f14;--deck-rail: #0f151c;--deck-panel: #121923;--deck-panel-2: #151f2b;--deck-line: rgba(167, 186, 210, .14);--deck-line-strong: rgba(167, 186, 210, .24);--deck-ink: #edf4ff;--deck-text: #b8c6d8;--deck-muted: #728196;--deck-cyan: #38d7ff;--deck-green: #57e39b;--deck-amber: #ffc857;--deck-red: #ff6b7a;--deck-violet: #a993ff;--radius-sm: 7px;--radius-md: 10px;--radius-lg: 14px;--shadow-panel: 0 0 0 1px rgba(167, 186, 210, .08), 0 18px 40px rgba(0, 0, 0, .26);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--deck-canvas);color:var(--deck-ink);-webkit-font-smoothing:antialiased}:root[data-theme=light]{color-scheme:light;--deck-canvas: #f5f7fb;--deck-rail: #ffffff;--deck-panel: #ffffff;--deck-panel-2: #eef4fb;--deck-line: rgba(25, 44, 68, .13);--deck-line-strong: rgba(25, 44, 68, .24);--deck-ink: #142033;--deck-text: #43566f;--deck-muted: #728096;--deck-cyan: #007ea7;--deck-green: #168a57;--deck-amber: #a56a00;--deck-red: #c73446;--deck-violet: #6e56cf;--shadow-panel: 0 0 0 1px rgba(25, 44, 68, .06), 0 16px 36px rgba(34, 56, 83, .1)}*{box-sizing:border-box}body{margin:0;width:100%;overflow-x:hidden;background:var(--deck-canvas)}button,input,select,textarea{font:inherit}button{cursor:pointer}.shell{display:grid;grid-template-columns:272px minmax(0,1fr);min-height:100vh;width:100%}.rail{display:flex;flex-direction:column;border-right:1px solid var(--deck-line);background:var(--deck-rail);padding:18px 14px}.brand{display:flex;align-items:center;gap:12px;padding:8px 8px 20px}.brandMark{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:#101f2c;border:1px solid rgba(56,215,255,.3);color:var(--deck-cyan);font-weight:700}.brandName{font-size:14px;font-weight:650;letter-spacing:0}.brandMeta,.tinyLabel{color:var(--deck-muted);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em}.nav{display:grid;gap:5px}.navItem{display:flex;align-items:center;gap:10px;width:100%;height:36px;border:0;padding:0 10px;background:transparent;color:var(--deck-text);border-radius:var(--radius-sm);text-decoration:none;font-size:13px;font-weight:560}.navItem.active,.navItem:hover{background:#38d7ff14;color:var(--deck-ink)}.railFooter{margin-top:auto;border-top:1px solid var(--deck-line);padding:14px 8px 4px}.monoLine{margin-top:6px;color:var(--deck-text);font-family:SFMono-Regular,Roboto Mono,ui-monospace,monospace;font-size:12px;overflow-wrap:anywhere}.main{min-width:0;max-width:100%;overflow-x:hidden;padding:20px}.topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:16px}.topActions{display:inline-flex;gap:8px}h1,h2,p{margin:0}h1{font-size:25px;line-height:1.15;font-weight:680;letter-spacing:0}h2{font-size:15px;line-height:1.3;font-weight:650}p{color:var(--deck-muted);font-size:13px;line-height:1.45;margin-top:5px}.panel{background:var(--deck-panel);border:1px solid var(--deck-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-panel)}.workspace{min-height:560px}.tabGrid{display:grid;gap:12px}.metricsGrid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:12px;align-items:start}.jobMetricsGrid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:12px;margin-bottom:12px}.insetPanel{box-shadow:none;background:#a7bad208}.runtimeDeck{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:12px;margin-bottom:12px}.gpuDeck{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.gpuCard{background:var(--deck-panel);border:1px solid var(--deck-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-panel);padding:14px}.gpuHead{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:14px}.gpuHead strong{color:var(--deck-ink);font-size:13px}.gpuHead span{color:var(--deck-muted);font-size:12px;text-align:right;overflow-wrap:anywhere}.gpuMeter{display:grid;gap:7px;margin-top:10px}.gpuMeterLabel{display:flex;justify-content:space-between;gap:12px;color:var(--deck-muted);font-size:11px;font-weight:700}.gpuMeterLabel b{color:var(--deck-text);font-variant-numeric:tabular-nums}.meterTrack{height:9px;border-radius:999px;background:#a7bad21f;overflow:hidden}.meterTrack i{display:block;height:100%;border-radius:inherit;background:var(--deck-violet)}.meterTrack.util i{background:var(--deck-cyan)}.runtimeHero,.envFacts,.checkMatrix,.dependencyStrip{background:var(--deck-panel);border:1px solid var(--deck-line);border-radius:var(--radius-lg);box-shadow:var(--shadow-panel)}.runtimeHero{display:flex;align-items:center;gap:16px;min-height:116px;padding:16px}.readinessOrb{display:grid;place-items:center;width:58px;height:58px;border-radius:18px;font-weight:800;font-size:17px;border:1px solid var(--deck-line);background:#0b1118}.readinessOrb.ready{color:var(--deck-green);border-color:#57e39b59;box-shadow:inset 0 0 24px #57e39b0f}.readinessOrb.blocked{color:var(--deck-amber);border-color:#ffc85759;box-shadow:inset 0 0 24px #ffc8570f}.envFacts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;overflow:hidden;background:var(--deck-line)}.envFact{display:flex;align-items:center;gap:10px;min-height:57px;padding:12px;background:var(--deck-panel)}.envFact>span{display:grid;place-items:center;width:28px;height:28px;color:var(--deck-cyan);border:1px solid var(--deck-line);border-radius:8px;background:#0b1118}.envFact label{display:block;color:var(--deck-muted);font-size:11px;font-weight:650;margin-bottom:3px}.envFact strong{display:block;color:var(--deck-ink);font-size:13px;font-weight:650;overflow-wrap:anywhere}.checkMatrix{grid-column:1 / -1;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;overflow:hidden;background:var(--deck-line)}.checkItem{min-height:76px;padding:11px;background:var(--deck-panel)}.checkItem span{display:inline-flex;align-items:center;height:20px;border-radius:999px;padding:0 7px;font-size:10px;font-weight:800;margin-bottom:8px}.checkItem.ok span{color:var(--deck-green);background:#57e39b1a}.checkItem.warn span{color:var(--deck-amber);background:#ffc8571a}.checkItem.fail span{color:var(--deck-red);background:#ff6b7a1a}.checkItem strong,.checkItem small{display:block}.checkItem strong{color:var(--deck-ink);font-size:12px;font-weight:650}.checkItem small{margin-top:5px;color:var(--deck-muted);font-size:11px;line-height:1.35;overflow-wrap:anywhere}.dependencyStrip{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:8px;padding:10px}.depPill{display:inline-flex;align-items:center;min-height:26px;padding:0 9px;border-radius:999px;border:1px solid var(--deck-line);color:var(--deck-text);background:#0b1118;font-size:12px;font-weight:600}.depPill.ok{border-color:#57e39b40}.depPill.warn{border-color:#ffc85740}.panel{min-width:0;padding:14px}.panelHeader{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px;min-width:0}.panelHeader>div{min-width:0}.jobList{display:grid;gap:7px}.jobListPage .jobList{gap:10px}.pagerControls{display:inline-flex;align-items:center;gap:8px;flex-shrink:0}.pagerControls span,.listFooter{color:var(--deck-muted);font-size:12px;font-variant-numeric:tabular-nums}.pagerControls button:disabled{cursor:not-allowed;opacity:.42}.listFooter{margin-top:12px;text-align:right}.jobRow{display:grid;grid-template-columns:34px 1fr 10px;align-items:center;gap:10px;width:100%;min-height:56px;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;color:inherit;padding:7px;text-align:left}.jobRow.large{grid-template-columns:42px 1fr 10px;min-height:72px;padding:11px}.jobRow.large .jobIcon{width:42px;height:42px}.detailActions{display:inline-flex;flex:0 0 auto;flex-wrap:wrap;justify-content:flex-end;gap:8px}.jobRow:hover,.jobRow.selected{background:var(--deck-panel-2);border-color:var(--deck-line)}.jobIcon{display:grid;place-items:center;width:34px;height:34px;border-radius:9px;background:#0b1119;color:var(--deck-cyan);border:1px solid var(--deck-line)}.jobTitle{font-size:13px;font-weight:620}.jobMeta{margin-top:4px;color:var(--deck-muted);font-size:12px}.statusDot{width:8px;height:8px;border-radius:50%;background:var(--deck-muted)}.statusDot.running{background:var(--deck-green);box-shadow:0 0 0 4px #57e39b1a}.statusDot.failed{background:var(--deck-red)}.statusDot.stopped{background:var(--deck-amber)}.timeline{display:flex;gap:8px;margin-bottom:12px;overflow-x:auto;padding-bottom:4px}.timelineItem{flex:0 0 136px;min-width:136px;display:flex;align-items:center;gap:8px;height:38px;padding:0 10px;border-radius:var(--radius-md);background:#0c121a;border:1px solid var(--deck-line);color:var(--deck-muted)}.timelineItem span{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:#ffffff0d;font-size:11px;font-weight:700;font-variant-numeric:tabular-nums}.timelineItem.done{color:var(--deck-text)}.timelineItem.current{border-color:#38d7ff73;color:var(--deck-cyan)}.chart{min-height:272px;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:#0c121a;padding:12px;margin-bottom:12px}.chartControls{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:10px;min-width:0}.chartControls select{height:28px;width:min(230px,100%);min-width:0;border:1px solid var(--deck-line);border-radius:var(--radius-sm);background:#0b1118;color:var(--deck-text);padding:0 8px;outline:none}.chartControls label{display:flex;align-items:center;gap:7px;color:var(--deck-muted);font-size:11px;white-space:nowrap}.chartControls input[type=range]{width:92px;height:4px;accent-color:var(--deck-cyan)}.sampleCard{margin-bottom:12px;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:#0b1118;overflow:hidden}.sampleGrid{display:grid;grid-template-columns:.9fr 1.1fr;gap:1px;background:var(--deck-line)}.sampleGrid>div,.sampleEmpty{min-height:116px;padding:11px;background:#0b1118}.sampleGrid span{display:block;color:var(--deck-muted);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;margin-bottom:7px}.sampleGrid p,.sampleEmpty{color:var(--deck-text);font-size:12px;line-height:1.5;max-height:150px;overflow:auto;white-space:pre-wrap}.sampleEmpty{color:var(--deck-muted)}.chartHeader{display:flex;align-items:center;justify-content:space-between;color:var(--deck-muted);font-size:12px;margin-bottom:12px}.chartHeader span{display:flex;align-items:center;gap:6px}.metricPlot{display:block;width:100%;height:180px;overflow:visible}.plotGrid line{stroke:#a7bad21a;stroke-width:1}.rawLine,.smoothLine{fill:none;stroke-linejoin:round;stroke-linecap:round}.rawLine{stroke:#728196bf;stroke-width:1.3}.smoothLine{stroke:var(--deck-cyan);stroke-width:2.7;filter:drop-shadow(0 0 8px rgba(56,215,255,.2))}.metricPlot circle{fill:var(--deck-ink);stroke:var(--deck-canvas);stroke-width:1.2}.plotFooter{display:flex;flex-wrap:wrap;gap:6px 12px;justify-content:space-between;margin-top:8px;color:var(--deck-muted);font-size:11px;font-variant-numeric:tabular-nums}.plotEmpty{display:grid;place-items:center;height:180px;color:var(--deck-muted);border:1px dashed var(--deck-line-strong);border-radius:var(--radius-md)}.timePerf{margin-bottom:12px;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:#0b1118;padding:12px}.timePerfHeader{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px}.codeTitle.inline{position:static;height:auto;padding:0;border:0;background:transparent}.legend{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:9px 12px;color:var(--deck-muted);font-size:11px}.legend span{display:inline-flex;align-items:center;gap:5px}.legend i{width:8px;height:8px;border-radius:50%}.legend b{color:var(--deck-text);font-weight:700;font-variant-numeric:tabular-nums}.timeRows{display:grid;gap:8px}.timeRow{display:grid;grid-template-columns:64px minmax(0,1fr) 70px;align-items:center;gap:10px}.timeRow label,.timeRow strong{color:var(--deck-text);font-size:12px;font-weight:650;font-variant-numeric:tabular-nums}.timeRow strong{text-align:right}.timeTrack{height:28px;border-radius:6px;background:#141b25;border:1px solid rgba(167,186,210,.1);overflow:hidden}.timeStack{display:flex;height:100%;min-width:18px}.timeStack span{display:flex;align-items:center;justify-content:center;min-width:3px;color:#ffffffeb;font-size:11px;font-weight:800;font-variant-numeric:tabular-nums;overflow:hidden;white-space:nowrap}.seg-rollout,.legend .seg-rollout{background:#20c997}.seg-train,.legend .seg-train{background:#bf2bd9}.seg-other,.legend .seg-other{background:#2851f5}.seg-reward,.legend .seg-reward{background:#d33672}.seg-advantages,.legend .seg-advantages{background:#5a3ee6}.seg-actor-log-probs,.legend .seg-actor-log-probs{background:#e243d2}.seg-ref-log-probs,.legend .seg-ref-log-probs,.seg-old-policy-log-probs,.legend .seg-old-policy-log-probs{background:#c43f66}.seg-value,.legend .seg-value{background:#8b5cf6}.seg-sync-weight,.legend .seg-sync-weight,.seg-save,.legend .seg-save{background:#83b81a}.seg-make-sample,.legend .seg-make-sample{background:#b96a19}.split{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:12px}.codeCard{min-width:0;min-height:250px;max-height:360px;overflow:auto;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:#0b1118}.codeTitle{position:sticky;top:0;display:flex;align-items:center;gap:7px;height:34px;padding:0 11px;border-bottom:1px solid var(--deck-line);background:#0d131b;color:var(--deck-text);font-size:12px;font-weight:650}.sampleTitle{justify-content:space-between;gap:10px;min-height:34px;height:auto;padding-top:4px;padding-bottom:4px}.sampleTitle>span{display:inline-flex;align-items:center;gap:7px}.sampleControls{display:inline-flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.sampleControls select{height:26px;max-width:170px;border:1px solid var(--deck-line);border-radius:var(--radius-sm);background:#0b1118;color:var(--deck-text);padding:0 8px;font-size:11px;outline:none}pre{margin:0;padding:11px;color:#d2deee;font-family:SFMono-Regular,Roboto Mono,ui-monospace,monospace;font-size:12px;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere}.configSections{display:grid;gap:12px;padding:11px}.configSection{min-width:0}.configSection h3{margin:0 0 8px;color:var(--deck-text);font-size:12px;font-weight:750;letter-spacing:0}.configGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px}.configItem{min-width:0;border:1px solid var(--deck-line);border-radius:var(--radius-sm);background:#a7bad20d;padding:9px}.configItem span{display:block;color:var(--deck-muted);font-size:10px;font-weight:750;text-transform:uppercase;letter-spacing:.05em;margin-bottom:5px}.configItem strong{display:block;color:var(--deck-ink);font-size:12px;font-weight:620;line-height:1.35;overflow-wrap:anywhere}.lowerGrid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr);gap:12px;margin-top:12px}.tabs{display:flex;gap:3px;padding:3px;border-radius:var(--radius-md);border:1px solid var(--deck-line);background:#0c121a}.tabs button{height:28px;border:0;border-radius:7px;background:transparent;color:var(--deck-muted);padding:0 12px;font-size:12px;font-weight:650}.tabs button.active{color:var(--deck-ink);background:var(--deck-panel-2)}.secondaryButton{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:34px;border:1px solid var(--deck-line);border-radius:var(--radius-sm);padding:0 12px;color:var(--deck-text);background:transparent;font-size:12px;font-weight:700}.launcherSections{display:grid;gap:14px}.launcherSection{display:grid;gap:10px;border:1px solid var(--deck-line);border-radius:var(--radius-md);padding:14px;background:var(--deck-panel-2)}.launcherSectionHeader{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.launcherSectionHeader strong{color:var(--deck-ink);font-size:13px;font-weight:760}.launcherSectionHeader span{color:var(--deck-faint);font-size:11px;font-weight:600;text-align:right}.formGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.field{display:grid;gap:6px;grid-column:span 2}.field.compact{grid-column:span 1}.field span{color:var(--deck-muted);font-size:11px;font-weight:650}input,select,textarea{width:100%;border:1px solid var(--deck-line);border-radius:var(--radius-sm);background:#0b1118;color:var(--deck-ink);outline:none}input,select{height:34px;padding:0 10px;font-size:13px}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--deck-muted) 50%),linear-gradient(135deg,var(--deck-muted) 50%,transparent 50%);background-position:calc(100% - 14px) 14px,calc(100% - 9px) 14px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:28px}.checkField{display:flex;min-height:34px;align-items:center;gap:9px;align-self:end;border:1px solid var(--deck-line);border-radius:var(--radius-sm);padding:0 10px;background:#0b1118}.checkField input{width:15px;height:15px;padding:0;accent-color:var(--deck-cyan)}.checkField span{color:var(--deck-text);font-size:12px;font-weight:650}textarea{min-height:96px;resize:vertical;padding:10px;line-height:1.45}input:focus,select:focus,textarea:focus{border-color:#38d7ff85;box-shadow:0 0 0 3px #38d7ff1a}.primaryButton,.dangerButton,.iconButton{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;border-radius:var(--radius-sm);border:1px solid var(--deck-line);padding:0 12px;font-weight:650;font-size:13px}.primaryButton{color:#001018;border-color:#38d7ffcc;background:var(--deck-cyan)}.primaryButton.wide{grid-column:1 / -1}.launchButton{min-height:44px;border-radius:var(--radius-md);letter-spacing:0;width:100%}.dangerButton{color:var(--deck-red);background:#ff6b7a1a;border-color:#ff6b7a57}.dangerButton:hover{background:#ff6b7a29;border-color:#ff6b7a7a}.iconButton{width:36px;padding:0;color:var(--deck-text);background:var(--deck-panel)}.notice,.error{min-height:38px;display:flex;align-items:center;border-radius:var(--radius-md);padding:0 12px;margin-bottom:12px;font-size:13px;border:1px solid var(--deck-line)}.notice{color:var(--deck-cyan);background:#38d7ff14}.error{color:#ffd6db;background:#ff6b7a1a}.agentPanel{display:flex;flex-direction:column;gap:12px}.agentConfig{display:grid;grid-template-columns:1.2fr 1fr 1fr;gap:10px;align-items:end;margin-bottom:12px}.agentConfig.modalForm{grid-template-columns:1fr;margin-bottom:0}.modalOverlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;background:#03080fa8;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:24px}.modalCard{width:min(560px,100%);border:1px solid var(--deck-line);border-radius:16px;background:var(--deck-panel);box-shadow:0 24px 80px #0000006b;padding:16px}.modalHeader{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.chatPanel{display:grid;grid-template-rows:auto auto minmax(360px,1fr) auto;min-height:650px}.agentHeaderActions{display:inline-flex;align-items:center;gap:8px}.agentTabs{display:inline-flex;align-items:center;gap:6px;width:max-content;margin:4px 0 0 clamp(28px,5vw,112px);padding:4px;border:1px solid var(--deck-line);border-radius:999px;background:var(--deck-soft)}.agentTabs button{display:inline-flex;align-items:center;gap:7px;border:0;border-radius:999px;padding:7px 12px;background:transparent;color:var(--deck-muted);font-size:12px;font-weight:750}.agentTabs button.active{background:var(--deck-panel);color:var(--deck-ink);box-shadow:0 8px 22px #00000024}.chatMessages{display:flex;flex-direction:column;gap:24px;min-height:360px;max-height:56vh;overflow:auto;border:0;border-radius:var(--radius-lg);background:transparent;padding:48px clamp(28px,5vw,112px) 18px}.chatBubble{max-width:min(1280px,100%);border:0;border-radius:0;background:transparent;padding:0;color:var(--deck-text)}.chatBubble.user{align-self:flex-end;max-width:min(680px,72%);border-radius:14px;background:#1a86ff;color:#fff;box-shadow:0 12px 28px #1a86ff29;padding:13px 20px}.chatBubble.assistant{align-self:flex-start;width:min(1280px,100%)}.chatBubble>span{display:block;margin-bottom:5px;color:var(--deck-muted);font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.chatBubble.user>span{display:none}.chatBubble.assistant>span{display:none}.chatBubble p{margin:0;white-space:pre-wrap;color:var(--deck-text)}.chatBubble.user p,.chatBubble.user .markdownBlock{color:#fff;font-size:13px;font-weight:650}.reasoningBlock{position:relative;margin:4px 0 18px;padding-left:34px;color:var(--deck-muted);background:transparent}.reasoningBlock:before{content:"";position:absolute;top:28px;bottom:0;left:15px;width:2px;border-radius:999px;background:var(--deck-line)}.reasoningBlock summary{display:inline-flex;align-items:center;gap:9px;cursor:pointer;list-style:none;min-height:28px}.reasoningBlock summary::-webkit-details-marker{display:none}.reasoningBlock summary span{display:inline-grid;place-items:center;width:18px;height:18px;border:1px solid var(--deck-line-strong);border-radius:999px;color:var(--deck-muted);font-size:11px}.reasoningBlock summary strong{color:var(--deck-muted);font-size:12px;font-weight:650}.reasoningBlock summary:after{content:"\2304";color:var(--deck-muted);font-size:15px}.agentEventList{display:grid;gap:16px}.agentEventList>.markdownBlock{width:min(780px,calc(100% - 64px));margin-left:34px}.markdownBlock{color:var(--deck-text);font-size:13px;line-height:1.58;overflow-wrap:anywhere}.markdownBlock>*:first-child{margin-top:0}.markdownBlock>*:last-child{margin-bottom:0}.markdownBlock p,.markdownBlock ul,.markdownBlock ol{margin:0 0 8px}.markdownBlock ul,.markdownBlock ol{padding-left:20px}.markdownBlock code{border:1px solid var(--deck-line);border-radius:5px;padding:1px 4px;background:#38d7ff14;color:var(--deck-ink)}.markdownBlock pre{max-height:220px;overflow:auto;border:1px solid var(--deck-line);border-radius:8px;padding:10px;background:#04080d38}.markdownBlock table{display:block;width:100%;max-width:100%;margin:10px 0;overflow:auto;border-collapse:collapse;border:1px solid var(--deck-line);border-radius:8px}.markdownBlock th,.markdownBlock td{padding:7px 9px;border-bottom:1px solid var(--deck-line);text-align:left;white-space:nowrap}.markdownBlock th{color:var(--deck-ink);background:#38d7ff14;font-size:11px;font-weight:750}.markdownBlock tr:last-child td{border-bottom:0}.reasoningBlock .markdownBlock{width:min(780px,calc(100% - 64px));max-height:160px;overflow:auto;margin-left:34px;padding:14px 0 2px;color:var(--deck-muted)}.toolCallList{display:grid;gap:8px;margin-top:0}.toolCallCard{width:min(780px,calc(100% - 64px));margin-left:34px;border:1px solid rgba(148,163,184,.24);border-radius:11px;background:var(--deck-panel);box-shadow:none;overflow:hidden}.toolCallCard.ok{border-color:var(--deck-line-strong);background:var(--deck-panel)}.toolCallCard.failed{border-color:#ff6b7a47;background:#ff6b7a14}.toolCallCard.live{border-color:#57e39b6b;background:#57e39b12}.toolCallDetails summary,.toolResultDetails summary{display:grid;grid-template-columns:auto minmax(96px,auto) minmax(0,1fr);align-items:center;gap:8px;min-height:36px;padding:0 12px;cursor:pointer;border-bottom:1px solid var(--deck-line);list-style-position:outside}.toolCallDetails:not([open]) summary,.toolResultDetails:not([open]) summary{border-bottom:0}.toolCallDetails summary::marker,.toolResultDetails summary::marker{color:var(--deck-muted)}.toolResultDetails summary span{display:inline-flex;align-items:center;justify-content:center;min-width:58px;height:19px;border:1px solid rgba(87,227,155,.28);border-radius:999px;background:#57e39b1a;color:var(--deck-green);font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.toolCallDetails summary span{position:relative;width:14px;min-width:14px;height:14px;overflow:hidden;color:transparent}.toolCallDetails summary span:before{content:"";position:absolute;top:2px;right:2px;bottom:2px;left:2px;border-radius:999px;background:#35c737}.toolResultDetails.ok summary span{border-color:#57e39b38;background:#57e39b17;color:var(--deck-green)}.toolResultDetails.failed summary span{border-color:#ff6b7a47;background:#ff6b7a1a;color:var(--deck-red)}.toolCallDetails summary b,.toolResultDetails summary b{color:var(--deck-ink);font-size:12px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,Consolas,monospace;font-weight:750;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolCallDetails summary em,.toolResultDetails summary em{min-width:0;overflow:hidden;color:var(--deck-muted);font-size:11px;font-style:normal;text-overflow:ellipsis;white-space:nowrap}.toolCallHead{border-bottom:1px solid var(--deck-line)}.toolCallHead span{margin:0;color:var(--deck-cyan)}.toolCallHead b{color:var(--deck-ink);font-size:11px}.toolCallCard pre{max-height:140px;overflow:auto;background:transparent;border-top:1px solid var(--deck-line);padding:10px 12px;font-size:11px}.toolResultDetails pre{max-height:240px}.streamingHint{margin-top:8px;color:var(--deck-cyan);font-size:11px;font-weight:700}.chatComposer{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px;margin-top:12px;border:1px solid var(--deck-line);border-radius:var(--radius-lg);background:var(--deck-panel);padding:10px}.chatComposer textarea{min-height:72px;border:0;padding:8px;background:transparent;resize:none;font-size:13px}.agentHistory{min-height:360px;max-height:56vh;overflow:auto;padding:28px clamp(28px,5vw,112px) 18px}.agentHistoryHeader{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.agentHistoryHeader h3{margin:0 0 4px;font-size:16px}.agentHistoryHeader p{margin:0;color:var(--deck-muted);font-size:12px}.agentHistoryList{display:grid;gap:10px}.agentHistoryItem{display:grid;gap:5px;width:min(840px,100%);border:1px solid var(--deck-line);border-radius:13px;background:var(--deck-panel);padding:13px 15px;text-align:left}.agentHistoryItem.active{border-color:#38d7ff7a;box-shadow:0 0 0 1px #38d7ff2e}.agentHistoryItem strong{color:var(--deck-ink);font-size:13px}.agentHistoryItem span{overflow:hidden;color:var(--deck-muted);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.agentHistoryItem small{color:var(--deck-subtle);font-size:11px}.agentOutput{min-height:152px;border-radius:var(--radius-lg);border:1px solid var(--deck-line);background:#0b1118;color:var(--deck-text);padding:12px;font-size:13px;line-height:1.5;white-space:pre-wrap}.empty{display:grid;place-items:center;gap:8px;min-height:180px;color:var(--deck-muted);border:1px dashed var(--deck-line-strong);border-radius:var(--radius-lg);text-align:center;padding:16px}.empty strong{color:var(--deck-text);font-size:13px}.empty span{font-size:12px}:root[data-theme=light] .brandMark,:root[data-theme=light] .readinessOrb,:root[data-theme=light] .envFact,:root[data-theme=light] .envFact>span,:root[data-theme=light] .checkItem,:root[data-theme=light] .depPill,:root[data-theme=light] .timelineItem,:root[data-theme=light] .chart,:root[data-theme=light] .sampleCard,:root[data-theme=light] .sampleGrid>div,:root[data-theme=light] .sampleEmpty,:root[data-theme=light] .timePerf,:root[data-theme=light] .codeCard,:root[data-theme=light] .codeTitle,:root[data-theme=light] input,:root[data-theme=light] textarea,:root[data-theme=light] select,:root[data-theme=light] .checkField,:root[data-theme=light] .agentOutput,:root[data-theme=light] .chatComposer,:root[data-theme=light] .timeTrack,:root[data-theme=light] .tabs{background:var(--deck-panel)}:root[data-theme=light] .chartControls select,:root[data-theme=light] .configItem{background:#fff;color:var(--deck-ink)}:root[data-theme=light] .dangerButton{color:#a51d2d;background:#fff1f3;border-color:#c7344647}:root[data-theme=light] .primaryButton{color:#fff;background:#007ea7;border-color:#007ea7;box-shadow:0 8px 18px #007ea72e}:root[data-theme=light] .launchButton{background:#006d94;border-color:#006d94}:root[data-theme=light] .jobIcon{background:#f3f7fb}:root[data-theme=light] .chatBubble.user{background:#1683ff;color:#fff}:root[data-theme=light] .chatMessages{background:transparent}:root[data-theme=light] .toolCallCard{box-shadow:0 6px 18px #1420330f}:root[data-theme=light] .rawLine{stroke:#55657aa6}:root[data-theme=light] pre{color:#25344a}@media(max-width:980px){.shell{grid-template-columns:1fr}.rail{position:sticky;top:0;z-index:20;border-right:0;border-bottom:1px solid var(--deck-line);padding:10px}.brand,.railFooter{display:none}.nav{display:flex;gap:6px;overflow-x:auto}.navItem{width:auto;flex:0 0 auto}.main{padding:12px}.topbar,.panelHeader,.timePerfHeader{flex-direction:column;align-items:stretch}.runtimeDeck,.jobMetricsGrid,.metricsGrid,.split,.sampleGrid,.formGrid{grid-template-columns:1fr}.field,.field.compact{grid-column:span 1}.checkMatrix,.envFacts{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:560px){.checkMatrix,.envFacts{grid-template-columns:1fr}.jobRow.large{grid-template-columns:34px minmax(0,1fr)}.jobRow.large .statusDot{display:none}.timeRow{grid-template-columns:52px minmax(0,1fr)}.timeRow strong{grid-column:2;text-align:left}}.trajectoryDetail{display:grid;gap:12px}.trajectorySummary{display:flex;flex-wrap:wrap;gap:10px;padding:10px 12px;border:1px solid var(--deck-line);border-radius:var(--radius-md);background:#a7bad208}.trajectorySummaryItem{display:flex;align-items:center;gap:6px}.trajectorySummaryItem span{color:var(--deck-muted);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.trajectorySummaryItem strong{color:var(--deck-ink);font-size:13px;font-weight:650}.trajectoryTokenCounts{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;padding:10px 12px;border:1px solid var(--deck-line);border-radius:var(--radius-md);background:#a7bad208}.trajectoryTokenItem{display:grid;gap:3px}.trajectoryTokenItem label{color:var(--deck-muted);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.trajectoryTokenItem strong{color:var(--deck-ink);font-size:13px;font-variant-numeric:tabular-nums}.trajectoryMaskBar{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:1px;padding:6px 0}.maskCell{display:inline-block;width:8px;height:14px;border-radius:2px}.maskCell.train{background:var(--deck-green)}.maskCell.skip{background:#a7bad226}.maskTruncated{grid-column:1 / -1;color:var(--deck-muted);font-size:11px;font-style:italic}.trajectoryEvents{display:grid;gap:8px}.trajectoryEvent{border:1px solid var(--deck-line);border-radius:var(--radius-md);padding:10px 12px;background:#a7bad205}.trajectoryEvent.message.assistant{border-left:3px solid var(--deck-cyan)}.trajectoryEvent.message.user{border-left:3px solid var(--deck-violet)}.trajectoryEvent.message.tool{border-left:3px solid var(--deck-amber)}.trajectoryEvent.message.system{border-left:3px solid var(--deck-muted)}.trajectoryEvent.toolResult{border-left:3px solid var(--deck-green)}.eventHeader{display:flex;align-items:center;gap:8px;cursor:default;margin-bottom:6px}.trajectoryEvent.toolResult .eventHeader{cursor:pointer}.eventBadge{display:inline-flex;align-items:center;justify-content:center;min-width:50px;height:18px;border-radius:999px;padding:0 7px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.eventBadge.assistant{color:var(--deck-cyan);background:#38d7ff1a}.eventBadge.user{color:var(--deck-violet);background:#a993ff1a}.eventBadge.tool{color:var(--deck-amber);background:#ffc8571a}.eventBadge.system{color:var(--deck-muted);background:#7281961a}.eventBadge.result{color:var(--deck-green);background:#57e39b1a}.eventHeader b{color:var(--deck-ink);font-size:12px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,Consolas,monospace;font-weight:650}.eventHeader em{color:var(--deck-muted);font-size:11px;font-style:normal}.eventToolCalls{display:grid;gap:6px;margin-top:8px}.eventToolCall{display:grid;gap:4px;padding:6px 8px;border:1px solid var(--deck-line);border-radius:var(--radius-sm);background:#38d7ff0a}.toolCallBadge{display:inline-flex;align-items:center;min-width:50px;height:16px;border-radius:999px;padding:0 6px;font-size:9px;font-weight:700;text-transform:uppercase;color:var(--deck-cyan);background:#38d7ff14}.eventToolCall b{color:var(--deck-ink);font-size:12px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,Consolas,monospace}.toolCallArgs{max-height:100px;overflow:auto;font-size:11px;color:var(--deck-text);background:transparent;border:0;padding:2px 0}.eventOutput{max-height:200px;overflow:auto;font-size:11px;color:var(--deck-text);background:#04080d38;border:1px solid var(--deck-line);border-radius:var(--radius-sm);padding:8px;margin-top:6px}.eventOutput.collapsed{max-height:0;overflow:hidden;padding:0;border:0}.trajectoryFinalAnswer{border:1px solid var(--deck-line);border-radius:var(--radius-md);padding:12px;background:#57e39b0a}.rawJsonView{max-height:480px;overflow:auto;font-size:11px;color:var(--deck-text);background:#04080d38;border:1px solid var(--deck-line);border-radius:var(--radius-md);padding:12px;margin:0}.trajectoryPage{display:grid;gap:16px}.trajectoryControls{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.trajectoryControls select{min-width:160px}.trajectoryContent{min-height:200px} diff --git a/areno/dashboard/dist/assets/index-bundle.js b/areno/dashboard/dist/assets/index-bundle.js new file mode 100644 index 00000000..56d143e3 --- /dev/null +++ b/areno/dashboard/dist/assets/index-bundle.js @@ -0,0 +1,131 @@ +var jS=Object.create;var ks=Object.defineProperty;var XS=Object.getOwnPropertyDescriptor;var YS=Object.getOwnPropertyNames;var QS=Object.getPrototypeOf,ZS=Object.prototype.hasOwnProperty;var rt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Xp=(e,t)=>{for(var a in t)ks(e,a,{get:t[a],enumerable:!0})},KS=(e,t,a,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of YS(t))!ZS.call(e,n)&&n!==a&&ks(e,n,{get:()=>t[n],enumerable:!(l=XS(t,n))||l.enumerable});return e};var Jt=(e,t,a)=>(a=e!=null?jS(QS(e)):{},KS(t||!e||!e.__esModule?ks(a,"default",{value:e,enumerable:!0}):a,e));var lm=rt(Q=>{"use strict";var Is=Symbol.for("react.transitional.element"),JS=Symbol.for("react.portal"),WS=Symbol.for("react.fragment"),$S=Symbol.for("react.strict_mode"),eb=Symbol.for("react.profiler"),tb=Symbol.for("react.consumer"),ab=Symbol.for("react.context"),lb=Symbol.for("react.forward_ref"),nb=Symbol.for("react.suspense"),rb=Symbol.for("react.memo"),Jp=Symbol.for("react.lazy"),ob=Symbol.for("react.activity"),Yp=Symbol.iterator;function ub(e){return e===null||typeof e!="object"?null:(e=Yp&&e[Yp]||e["@@iterator"],typeof e=="function"?e:null)}var Wp={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},$p=Object.assign,em={};function un(e,t,a){this.props=e,this.context=t,this.refs=em,this.updater=a||Wp}un.prototype.isReactComponent={};un.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};un.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function tm(){}tm.prototype=un.prototype;function ws(e,t,a){this.props=e,this.context=t,this.refs=em,this.updater=a||Wp}var As=ws.prototype=new tm;As.constructor=ws;$p(As,un.prototype);As.isPureReactComponent=!0;var Qp=Array.isArray;function vs(){}var ye={H:null,A:null,T:null,S:null},am=Object.prototype.hasOwnProperty;function Ts(e,t,a){var l=a.ref;return{$$typeof:Is,type:e,key:t,ref:l!==void 0?l:null,props:a}}function ib(e,t){return Ts(e.type,t,e.props)}function Ms(e){return typeof e=="object"&&e!==null&&e.$$typeof===Is}function sb(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(a){return t[a]})}var Zp=/\/+/g;function Cs(e,t){return typeof e=="object"&&e!==null&&e.key!=null?sb(""+e.key):t.toString(36)}function fb(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch(typeof e.status=="string"?e.then(vs,vs):(e.status="pending",e.then(function(t){e.status==="pending"&&(e.status="fulfilled",e.value=t)},function(t){e.status==="pending"&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}function on(e,t,a,l,n){var r=typeof e;(r==="undefined"||r==="boolean")&&(e=null);var o=!1;if(e===null)o=!0;else switch(r){case"bigint":case"string":case"number":o=!0;break;case"object":switch(e.$$typeof){case Is:case JS:o=!0;break;case Jp:return o=e._init,on(o(e._payload),t,a,l,n)}}if(o)return n=n(e),o=l===""?"."+Cs(e,0):l,Qp(n)?(a="",o!=null&&(a=o.replace(Zp,"$&/")+"/"),on(n,t,a,"",function(s){return s})):n!=null&&(Ms(n)&&(n=ib(n,a+(n.key==null||e&&e.key===n.key?"":(""+n.key).replace(Zp,"$&/")+"/")+o)),t.push(n)),1;o=0;var u=l===""?".":l+":";if(Qp(e))for(var i=0;i{"use strict";nm.exports=lm()});var mm=rt(ke=>{"use strict";function zs(e,t){var a=e.length;e.push(t);e:for(;0>>1,n=e[l];if(0>>1;lJo(u,a))iJo(s,u)?(e[l]=s,e[i]=a,l=i):(e[l]=u,e[o]=a,l=o);else if(iJo(s,a))e[l]=s,e[i]=a,l=i;else break e}}return t}function Jo(e,t){var a=e.sortIndex-t.sortIndex;return a!==0?a:e.id-t.id}ke.unstable_now=void 0;typeof performance=="object"&&typeof performance.now=="function"?(rm=performance,ke.unstable_now=function(){return rm.now()}):(Ds=Date,om=Ds.now(),ke.unstable_now=function(){return Ds.now()-om});var rm,Ds,om,sa=[],Ra=[],pb=1,Mt=null,at=3,Rs=!1,xr=!1,yr=!1,Os=!1,sm=typeof setTimeout=="function"?setTimeout:null,fm=typeof clearTimeout=="function"?clearTimeout:null,um=typeof setImmediate<"u"?setImmediate:null;function Wo(e){for(var t=Wt(Ra);t!==null;){if(t.callback===null)$o(Ra);else if(t.startTime<=e)$o(Ra),t.sortIndex=t.expirationTime,zs(sa,t);else break;t=Wt(Ra)}}function _s(e){if(yr=!1,Wo(e),!xr)if(Wt(sa)!==null)xr=!0,fn||(fn=!0,sn());else{var t=Wt(Ra);t!==null&&Ns(_s,t.startTime-e)}}var fn=!1,Lr=-1,cm=5,dm=-1;function pm(){return Os?!0:!(ke.unstable_now()-dme&&pm());){var l=Mt.callback;if(typeof l=="function"){Mt.callback=null,at=Mt.priorityLevel;var n=l(Mt.expirationTime<=e);if(e=ke.unstable_now(),typeof n=="function"){Mt.callback=n,Wo(e),t=!0;break t}Mt===Wt(sa)&&$o(sa),Wo(e)}else $o(sa);Mt=Wt(sa)}if(Mt!==null)t=!0;else{var r=Wt(Ra);r!==null&&Ns(_s,r.startTime-e),t=!1}}break e}finally{Mt=null,at=a,Rs=!1}t=void 0}}finally{t?sn():fn=!1}}}var sn;typeof um=="function"?sn=function(){um(Es)}:typeof MessageChannel<"u"?(Bs=new MessageChannel,im=Bs.port2,Bs.port1.onmessage=Es,sn=function(){im.postMessage(null)}):sn=function(){sm(Es,0)};var Bs,im;function Ns(e,t){Lr=sm(function(){e(ke.unstable_now())},t)}ke.unstable_IdlePriority=5;ke.unstable_ImmediatePriority=1;ke.unstable_LowPriority=4;ke.unstable_NormalPriority=3;ke.unstable_Profiling=null;ke.unstable_UserBlockingPriority=2;ke.unstable_cancelCallback=function(e){e.callback=null};ke.unstable_forceFrameRate=function(e){0>e||125l?(e.sortIndex=a,zs(Ra,e),Wt(sa)===null&&e===Wt(Ra)&&(yr?(fm(Lr),Lr=-1):yr=!0,Ns(_s,a-l))):(e.sortIndex=n,zs(sa,e),xr||Rs||(xr=!0,fn||(fn=!0,sn()))),e};ke.unstable_shouldYield=pm;ke.unstable_wrapCallback=function(e){var t=at;return function(){var a=at;at=t;try{return e.apply(this,arguments)}finally{at=a}}}});var gm=rt((sA,hm)=>{"use strict";hm.exports=mm()});var ym=rt(ut=>{"use strict";var mb=Sl();function xm(e){var t="https://react.dev/errors/"+e;if(1{"use strict";function Lm(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Lm)}catch(e){console.error(e)}}Lm(),Sm.exports=ym()});var zy=rt(Ii=>{"use strict";var Ge=gm(),Yh=Sl(),xb=bm();function M(e){var t="https://react.dev/errors/"+e;if(1xn||(e.current=Cf[xn],Cf[xn]=null,xn--)}function xe(e,t){xn++,Cf[xn]=e.current,e.current=t}var aa=la(null),Xr=la(null),Ya=la(null),Ru=la(null);function Ou(e,t){switch(xe(Ya,t),xe(Xr,e),xe(aa,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Dh(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Dh(t),e=Ly(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}Ye(aa),xe(aa,e)}function On(){Ye(aa),Ye(Xr),Ye(Ya)}function vf(e){e.memoizedState!==null&&xe(Ru,e);var t=aa.current,a=Ly(t,e.type);t!==a&&(xe(Xr,e),xe(aa,a))}function _u(e){Xr.current===e&&(Ye(aa),Ye(Xr)),Ru.current===e&&(Ye(Ru),lo._currentValue=wl)}var Us,vm;function kl(e){if(Us===void 0)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);Us=t&&t[1]||"",vm=-1)":-1n||i[l]!==s[n]){var f=` +`+i[l].replace(" at new "," at ");return e.displayName&&f.includes("")&&(f=f.replace("",e.displayName)),f}while(1<=l&&0<=n);break}}}finally{Hs=!1,Error.prepareStackTrace=a}return(a=e?e.displayName||e.name:"")?kl(a):""}function kb(e,t){switch(e.tag){case 26:case 27:case 5:return kl(e.type);case 16:return kl("Lazy");case 13:return e.child!==t&&t!==null?kl("Suspense Fallback"):kl("Suspense");case 19:return kl("SuspenseList");case 0:case 15:return qs(e.type,!1);case 11:return qs(e.type.render,!1);case 1:return qs(e.type,!0);case 31:return kl("Activity");default:return""}}function Im(e){try{var t="",a=null;do t+=kb(e,a),a=e,e=e.return;while(e);return t}catch(l){return` +Error generating stack: `+l.message+` +`+l.stack}}var If=Object.prototype.hasOwnProperty,hc=Ge.unstable_scheduleCallback,Fs=Ge.unstable_cancelCallback,Cb=Ge.unstable_shouldYield,vb=Ge.unstable_requestPaint,Ct=Ge.unstable_now,Ib=Ge.unstable_getCurrentPriorityLevel,eg=Ge.unstable_ImmediatePriority,tg=Ge.unstable_UserBlockingPriority,Nu=Ge.unstable_NormalPriority,wb=Ge.unstable_LowPriority,ag=Ge.unstable_IdlePriority,Ab=Ge.log,Tb=Ge.unstable_setDisableYieldValue,uo=null,vt=null;function Pa(e){if(typeof Ab=="function"&&Tb(e),vt&&typeof vt.setStrictMode=="function")try{vt.setStrictMode(uo,e)}catch{}}var It=Math.clz32?Math.clz32:Eb,Mb=Math.log,Db=Math.LN2;function Eb(e){return e>>>=0,e===0?32:31-(Mb(e)/Db|0)|0}var au=256,lu=262144,nu=4194304;function Cl(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function si(e,t,a){var l=e.pendingLanes;if(l===0)return 0;var n=0,r=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var u=l&134217727;return u!==0?(l=u&~r,l!==0?n=Cl(l):(o&=u,o!==0?n=Cl(o):a||(a=u&~e,a!==0&&(n=Cl(a))))):(u=l&~r,u!==0?n=Cl(u):o!==0?n=Cl(o):a||(a=l&~e,a!==0&&(n=Cl(a)))),n===0?0:t!==0&&t!==n&&(t&r)===0&&(r=n&-n,a=t&-t,r>=a||r===32&&(a&4194048)!==0)?t:n}function io(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Bb(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function lg(){var e=nu;return nu<<=1,(nu&62914560)===0&&(nu=4194304),e}function Ps(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function so(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function zb(e,t,a,l,n,r){var o=e.pendingLanes;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=a,e.entangledLanes&=a,e.errorRecoveryDisabledLanes&=a,e.shellSuspendCounter=0;var u=e.entanglements,i=e.expirationTimes,s=e.hiddenUpdates;for(a=o&~a;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Hb=/[\n"\\]/g;function Rt(e){return e.replace(Hb,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Tf(e,t,a,l,n,r,o,u){e.name="",o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"?e.type=o:e.removeAttribute("type"),t!=null?o==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Et(t)):e.value!==""+Et(t)&&(e.value=""+Et(t)):o!=="submit"&&o!=="reset"||e.removeAttribute("value"),t!=null?Mf(e,o,Et(t)):a!=null?Mf(e,o,Et(a)):l!=null&&e.removeAttribute("value"),n==null&&r!=null&&(e.defaultChecked=!!r),n!=null&&(e.checked=n&&typeof n!="function"&&typeof n!="symbol"),u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"?e.name=""+Et(u):e.removeAttribute("name")}function dg(e,t,a,l,n,r,o,u){if(r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"&&(e.type=r),t!=null||a!=null){if(!(r!=="submit"&&r!=="reset"||t!=null)){Af(e);return}a=a!=null?""+Et(a):"",t=t!=null?""+Et(t):a,u||t===e.value||(e.value=t),e.defaultValue=t}l=l??n,l=typeof l!="function"&&typeof l!="symbol"&&!!l,e.checked=u?e.checked:!!l,e.defaultChecked=!!l,o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"&&(e.name=o),Af(e)}function Mf(e,t,a){t==="number"&&Uu(e.ownerDocument)===e||e.defaultValue===""+a||(e.defaultValue=""+a)}function Mn(e,t,a,l){if(e=e.options,t){t={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ef=!1;if(Ca)try{cn={},Object.defineProperty(cn,"passive",{get:function(){Ef=!0}}),window.addEventListener("test",cn,cn),window.removeEventListener("test",cn,cn)}catch{Ef=!1}var cn,Ga=null,bc=null,bu=null;function xg(){if(bu)return bu;var e,t=bc,a=t.length,l,n="value"in Ga?Ga.value:Ga.textContent,r=n.length;for(e=0;e=zr),_m=" ",Nm=!1;function Lg(e,t){switch(e){case"keyup":return p0.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Sg(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Sn=!1;function h0(e,t){switch(e){case"compositionend":return Sg(t);case"keypress":return t.which!==32?null:(Nm=!0,_m);case"textInput":return e=t.data,e===_m&&Nm?null:e;default:return null}}function g0(e,t){if(Sn)return e==="compositionend"||!Cc&&Lg(e,t)?(e=xg(),bu=bc=Ga=null,Sn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-e};e=l}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=Fm(a)}}function vg(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?vg(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ig(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Uu(e.document);t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=Uu(e.document)}return t}function vc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var v0=Ca&&"documentMode"in document&&11>=document.documentMode,bn=null,Bf=null,Or=null,zf=!1;function Gm(e,t,a){var l=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;zf||bn==null||bn!==Uu(l)||(l=bn,"selectionStart"in l&&vc(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),Or&&Zr(Or,l)||(Or=l,l=ai(Bf,"onSelect"),0>=o,n-=o,$t=1<<32-It(t)+n|a<R?(O=A,A=null):O=A.sibling;var v=d(h,A,y[R],C);if(v===null){A===null&&(A=O);break}e&&A&&v.alternate===null&&t(h,A),g=r(v,g,R),k===null?w=v:k.sibling=v,k=v,A=O}if(R===y.length)return a(h,A),le&&ha(h,R),w;if(A===null){for(;RR?(O=A,A=null):O=A.sibling;var ne=d(h,A,v.value,C);if(ne===null){A===null&&(A=O);break}e&&A&&ne.alternate===null&&t(h,A),g=r(ne,g,R),k===null?w=ne:k.sibling=ne,k=ne,A=O}if(v.done)return a(h,A),le&&ha(h,R),w;if(A===null){for(;!v.done;R++,v=y.next())v=c(h,v.value,C),v!==null&&(g=r(v,g,R),k===null?w=v:k.sibling=v,k=v);return le&&ha(h,R),w}for(A=l(A);!v.done;R++,v=y.next())v=p(A,h,R,v.value,C),v!==null&&(e&&v.alternate!==null&&A.delete(v.key===null?R:v.key),g=r(v,g,R),k===null?w=v:k.sibling=v,k=v);return e&&A.forEach(function($){return t(h,$)}),le&&ha(h,R),w}function I(h,g,y,C){if(typeof y=="object"&&y!==null&&y.type===gn&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case tu:e:{for(var w=y.key;g!==null;){if(g.key===w){if(w=y.type,w===gn){if(g.tag===7){a(h,g.sibling),C=n(g,y.props.children),C.return=h,h=C;break e}}else if(g.elementType===w||typeof w=="object"&&w!==null&&w.$$typeof===_a&&vl(w)===g.type){a(h,g.sibling),C=n(g,y.props),Cr(C,y),C.return=h,h=C;break e}a(h,g);break}else t(h,g);g=g.sibling}y.type===gn?(C=Al(y.props.children,h.mode,C,y.key),C.return=h,h=C):(C=Cu(y.type,y.key,y.props,null,h.mode,C),Cr(C,y),C.return=h,h=C)}return o(h);case Tr:e:{for(w=y.key;g!==null;){if(g.key===w)if(g.tag===4&&g.stateNode.containerInfo===y.containerInfo&&g.stateNode.implementation===y.implementation){a(h,g.sibling),C=n(g,y.children||[]),C.return=h,h=C;break e}else{a(h,g);break}else t(h,g);g=g.sibling}C=Ks(y,h.mode,C),C.return=h,h=C}return o(h);case _a:return y=vl(y),I(h,g,y,C)}if(Mr(y))return x(h,g,y,C);if(br(y)){if(w=br(y),typeof w!="function")throw Error(M(150));return y=w.call(y),S(h,g,y,C)}if(typeof y.then=="function")return I(h,g,fu(y),C);if(y.$$typeof===xa)return I(h,g,su(h,y),C);cu(h,y)}return typeof y=="string"&&y!==""||typeof y=="number"||typeof y=="bigint"?(y=""+y,g!==null&&g.tag===6?(a(h,g.sibling),C=n(g,y),C.return=h,h=C):(a(h,g),C=Zs(y,h.mode,C),C.return=h,h=C),o(h)):a(h,g)}return function(h,g,y,C){try{Wr=0;var w=I(h,g,y,C);return Bn=null,w}catch(A){if(A===Zn||A===hi)throw A;var k=bt(29,A,null,h.mode);return k.lanes=C,k.return=h,k}finally{}}}var zl=qg(!0),Fg=qg(!1),Na=!1;function zc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function qf(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Za(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ka(e,t,a){var l=e.updateQueue;if(l===null)return null;if(l=l.shared,(oe&2)!==0){var n=l.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),l.pending=t,t=qu(e),Bg(e,null,a),t}return mi(e,l,t,a),qu(e)}function Nr(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194048)!==0)){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,rg(e,a)}}function Ws(e,t){var a=e.updateQueue,l=e.alternate;if(l!==null&&(l=l.updateQueue,a===l)){var n=null,r=null;if(a=a.firstBaseUpdate,a!==null){do{var o={lane:a.lane,tag:a.tag,payload:a.payload,callback:null,next:null};r===null?n=r=o:r=r.next=o,a=a.next}while(a!==null);r===null?n=r=t:r=r.next=t}else n=r=t;a={baseState:l.baseState,firstBaseUpdate:n,lastBaseUpdate:r,shared:l.shared,callbacks:l.callbacks},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}var Ff=!1;function Ur(){if(Ff){var e=En;if(e!==null)throw e}}function Hr(e,t,a,l){Ff=!1;var n=e.updateQueue;Na=!1;var r=n.firstBaseUpdate,o=n.lastBaseUpdate,u=n.shared.pending;if(u!==null){n.shared.pending=null;var i=u,s=i.next;i.next=null,o===null?r=s:o.next=s,o=i;var f=e.alternate;f!==null&&(f=f.updateQueue,u=f.lastBaseUpdate,u!==o&&(u===null?f.firstBaseUpdate=s:u.next=s,f.lastBaseUpdate=i))}if(r!==null){var c=n.baseState;o=0,f=s=i=null,u=r;do{var d=u.lane&-536870913,p=d!==u.lane;if(p?(ae&d)===d:(l&d)===d){d!==0&&d===Un&&(Ff=!0),f!==null&&(f=f.next={lane:0,tag:u.tag,payload:u.payload,callback:null,next:null});e:{var x=e,S=u;d=t;var I=a;switch(S.tag){case 1:if(x=S.payload,typeof x=="function"){c=x.call(I,c,d);break e}c=x;break e;case 3:x.flags=x.flags&-65537|128;case 0:if(x=S.payload,d=typeof x=="function"?x.call(I,c,d):x,d==null)break e;c=be({},c,d);break e;case 2:Na=!0}}d=u.callback,d!==null&&(e.flags|=64,p&&(e.flags|=8192),p=n.callbacks,p===null?n.callbacks=[d]:p.push(d))}else p={lane:d,tag:u.tag,payload:u.payload,callback:u.callback,next:null},f===null?(s=f=p,i=c):f=f.next=p,o|=d;if(u=u.next,u===null){if(u=n.shared.pending,u===null)break;p=u,u=p.next,p.next=null,n.lastBaseUpdate=p,n.shared.pending=null}}while(!0);f===null&&(i=c),n.baseState=i,n.firstBaseUpdate=s,n.lastBaseUpdate=f,r===null&&(n.shared.lanes=0),rl|=o,e.lanes=o,e.memoizedState=c}}function Pg(e,t){if(typeof e!="function")throw Error(M(191,e));e.call(t)}function Gg(e,t){var a=e.callbacks;if(a!==null)for(e.callbacks=null,e=0;er?r:8;var o=P.T,u={};P.T=u,Xc(e,!1,t,a);try{var i=n(),s=P.S;if(s!==null&&s(u,i),i!==null&&typeof i=="object"&&typeof i.then=="function"){var f=z0(i,l);qr(e,t,f,wt(e))}else qr(e,t,l,wt(e))}catch(c){qr(e,t,{then:function(){},status:"rejected",reason:c},wt())}finally{ue.p=r,o!==null&&u.types!==null&&(o.types=u.types),P.T=o}}function H0(){}function Xf(e,t,a,l){if(e.tag!==5)throw Error(M(476));var n=mx(e).queue;px(e,n,t,wl,a===null?H0:function(){return hx(e),a(l)})}function mx(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:wl,baseState:wl,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ia,lastRenderedState:wl},next:null};var a={};return t.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ia,lastRenderedState:a},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function hx(e){var t=mx(e);t.next===null&&(t=e.alternate.memoizedState),qr(e,t.next.queue,{},wt())}function jc(){return et(lo)}function gx(){return Be().memoizedState}function xx(){return Be().memoizedState}function q0(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var a=wt();e=Za(a);var l=Ka(t,e,a);l!==null&&(ht(l,t,a),Nr(l,t,a)),t={cache:Dc()},e.payload=t;return}t=t.return}}function F0(e,t,a){var l=wt();a={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Li(e)?Lx(t,a):(a=wc(e,t,a,l),a!==null&&(ht(a,e,l),Sx(a,t,l)))}function yx(e,t,a){var l=wt();qr(e,t,a,l)}function qr(e,t,a,l){var n={lane:l,revertLane:0,gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null};if(Li(e))Lx(t,n);else{var r=e.alternate;if(e.lanes===0&&(r===null||r.lanes===0)&&(r=t.lastRenderedReducer,r!==null))try{var o=t.lastRenderedState,u=r(o,a);if(n.hasEagerState=!0,n.eagerState=u,At(u,o))return mi(e,t,n,0),ge===null&&pi(),!1}catch{}finally{}if(a=wc(e,t,n,l),a!==null)return ht(a,e,l),Sx(a,t,l),!0}return!1}function Xc(e,t,a,l){if(l={lane:2,revertLane:td(),gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Li(e)){if(t)throw Error(M(479))}else t=wc(e,a,l,2),t!==null&&ht(t,e,2)}function Li(e){var t=e.alternate;return e===Z||t!==null&&t===Z}function Lx(e,t){zn=Xu=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function Sx(e,t,a){if((a&4194048)!==0){var l=t.lanes;l&=e.pendingLanes,a|=l,t.lanes=a,rg(e,a)}}var eo={readContext:et,use:xi,useCallback:we,useContext:we,useEffect:we,useImperativeHandle:we,useLayoutEffect:we,useInsertionEffect:we,useMemo:we,useReducer:we,useRef:we,useState:we,useDebugValue:we,useDeferredValue:we,useTransition:we,useSyncExternalStore:we,useId:we,useHostTransitionStatus:we,useFormState:we,useActionState:we,useOptimistic:we,useMemoCache:we,useCacheRefresh:we};eo.useEffectEvent=we;var bx={readContext:et,use:xi,useCallback:function(e,t){return it().memoizedState=[e,t===void 0?null:t],e},useContext:et,useEffect:nh,useImperativeHandle:function(e,t,a){a=a!=null?a.concat([e]):null,wu(4194308,4,ix.bind(null,t,e),a)},useLayoutEffect:function(e,t){return wu(4194308,4,e,t)},useInsertionEffect:function(e,t){wu(4,2,e,t)},useMemo:function(e,t){var a=it();t=t===void 0?null:t;var l=e();if(Rl){Pa(!0);try{e()}finally{Pa(!1)}}return a.memoizedState=[l,t],l},useReducer:function(e,t,a){var l=it();if(a!==void 0){var n=a(t);if(Rl){Pa(!0);try{a(t)}finally{Pa(!1)}}}else n=t;return l.memoizedState=l.baseState=n,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},l.queue=e,e=e.dispatch=F0.bind(null,Z,e),[l.memoizedState,e]},useRef:function(e){var t=it();return e={current:e},t.memoizedState=e},useState:function(e){e=Vf(e);var t=e.queue,a=yx.bind(null,Z,t);return t.dispatch=a,[e.memoizedState,a]},useDebugValue:Gc,useDeferredValue:function(e,t){var a=it();return Vc(a,e,t)},useTransition:function(){var e=Vf(!1);return e=px.bind(null,Z,e.queue,!0,!1),it().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,a){var l=Z,n=it();if(le){if(a===void 0)throw Error(M(407));a=a()}else{if(a=t(),ge===null)throw Error(M(349));(ae&127)!==0||Qg(l,t,a)}n.memoizedState=a;var r={value:a,getSnapshot:t};return n.queue=r,nh(Kg.bind(null,l,r,e),[e]),l.flags|=2048,qn(9,{destroy:void 0},Zg.bind(null,l,r,a,t),null),a},useId:function(){var e=it(),t=ge.identifierPrefix;if(le){var a=ea,l=$t;a=(l&~(1<<32-It(l)-1)).toString(32)+a,t="_"+t+"R_"+a,a=Yu++,0<\/script>",r=r.removeChild(r.firstChild);break;case"select":r=typeof l.is=="string"?o.createElement("select",{is:l.is}):o.createElement("select"),l.multiple?r.multiple=!0:l.size&&(r.size=l.size);break;default:r=typeof l.is=="string"?o.createElement(n,{is:l.is}):o.createElement(n)}}r[We]=t,r[gt]=l;e:for(o=t.child;o!==null;){if(o.tag===5||o.tag===6)r.appendChild(o.stateNode);else if(o.tag!==4&&o.tag!==27&&o.child!==null){o.child.return=o,o=o.child;continue}if(o===t)break e;for(;o.sibling===null;){if(o.return===null||o.return===t)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=r;e:switch(tt(r,n,l),n){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break e;case"img":l=!0;break e;default:l=!1}l&&ca(t)}}return Le(t),of(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,a),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==l&&ca(t);else{if(typeof l!="string"&&t.stateNode===null)throw Error(M(166));if(e=Ya.current,dn(t)){if(e=t.stateNode,a=t.memoizedProps,l=null,n=$e,n!==null)switch(n.tag){case 27:case 5:l=n.memoizedProps}e[We]=t,e=!!(e.nodeValue===a||l!==null&&l.suppressHydrationWarning===!0||yy(e.nodeValue,a)),e||ll(t,!0)}else e=li(e).createTextNode(l),e[We]=t,t.stateNode=e}return Le(t),null;case 31:if(a=t.memoizedState,e===null||e.memoizedState!==null){if(l=dn(t),a!==null){if(e===null){if(!l)throw Error(M(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(M(557));e[We]=t}else El(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Le(t),e=!1}else a=Js(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),e=!0;if(!e)return t.flags&256?(St(t),t):(St(t),null);if((t.flags&128)!==0)throw Error(M(558))}return Le(t),null;case 13:if(l=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(n=dn(t),l!==null&&l.dehydrated!==null){if(e===null){if(!n)throw Error(M(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(M(317));n[We]=t}else El(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Le(t),n=!1}else n=Js(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(St(t),t):(St(t),null)}return St(t),(t.flags&128)!==0?(t.lanes=a,t):(a=l!==null,e=e!==null&&e.memoizedState!==null,a&&(l=t.child,n=null,l.alternate!==null&&l.alternate.memoizedState!==null&&l.alternate.memoizedState.cachePool!==null&&(n=l.alternate.memoizedState.cachePool.pool),r=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(r=l.memoizedState.cachePool.pool),r!==n&&(l.flags|=2048)),a!==e&&a&&(t.child.flags|=8192),du(t,t.updateQueue),Le(t),null);case 4:return On(),e===null&&ad(t.stateNode.containerInfo),Le(t),null;case 10:return ba(t.type),Le(t),null;case 19:if(Ye(Ee),l=t.memoizedState,l===null)return Le(t),null;if(n=(t.flags&128)!==0,r=l.rendering,r===null)if(n)vr(l,!1);else{if(Ae!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(r=ju(e),r!==null){for(t.flags|=128,vr(l,!1),e=r.updateQueue,t.updateQueue=e,du(t,e),t.subtreeFlags=0,e=a,a=t.child;a!==null;)zg(a,e),a=a.sibling;return xe(Ee,Ee.current&1|2),le&&ha(t,l.treeForkCount),t.child}e=e.sibling}l.tail!==null&&Ct()>Ju&&(t.flags|=128,n=!0,vr(l,!1),t.lanes=4194304)}else{if(!n)if(e=ju(r),e!==null){if(t.flags|=128,n=!0,e=e.updateQueue,t.updateQueue=e,du(t,e),vr(l,!0),l.tail===null&&l.tailMode==="hidden"&&!r.alternate&&!le)return Le(t),null}else 2*Ct()-l.renderingStartTime>Ju&&a!==536870912&&(t.flags|=128,n=!0,vr(l,!1),t.lanes=4194304);l.isBackwards?(r.sibling=t.child,t.child=r):(e=l.last,e!==null?e.sibling=r:t.child=r,l.last=r)}return l.tail!==null?(e=l.tail,l.rendering=e,l.tail=e.sibling,l.renderingStartTime=Ct(),e.sibling=null,a=Ee.current,xe(Ee,n?a&1|2:a&1),le&&ha(t,l.treeForkCount),e):(Le(t),null);case 22:case 23:return St(t),Rc(),l=t.memoizedState!==null,e!==null?e.memoizedState!==null!==l&&(t.flags|=8192):l&&(t.flags|=8192),l?(a&536870912)!==0&&(t.flags&128)===0&&(Le(t),t.subtreeFlags&6&&(t.flags|=8192)):Le(t),a=t.updateQueue,a!==null&&du(t,a.retryQueue),a=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),l=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),l!==a&&(t.flags|=2048),e!==null&&Ye(Tl),null;case 24:return a=null,e!==null&&(a=e.memoizedState.cache),t.memoizedState.cache!==a&&(t.flags|=2048),ba(He),Le(t),null;case 25:return null;case 30:return null}throw Error(M(156,t.tag))}function X0(e,t){switch(Mc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ba(He),On(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return _u(t),null;case 31:if(t.memoizedState!==null){if(St(t),t.alternate===null)throw Error(M(340));El()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(St(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(M(340));El()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ye(Ee),null;case 4:return On(),null;case 10:return ba(t.type),null;case 22:case 23:return St(t),Rc(),e!==null&&Ye(Tl),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ba(He),null;case 25:return null;default:return null}}function zx(e,t){switch(Mc(t),t.tag){case 3:ba(He),On();break;case 26:case 27:case 5:_u(t);break;case 4:On();break;case 31:t.memoizedState!==null&&St(t);break;case 13:St(t);break;case 19:Ye(Ee);break;case 10:ba(t.type);break;case 22:case 23:St(t),Rc(),e!==null&&Ye(Tl);break;case 24:ba(He)}}function ho(e,t){try{var a=t.updateQueue,l=a!==null?a.lastEffect:null;if(l!==null){var n=l.next;a=n;do{if((a.tag&e)===e){l=void 0;var r=a.create,o=a.inst;l=r(),o.destroy=l}a=a.next}while(a!==n)}}catch(u){de(t,t.return,u)}}function nl(e,t,a){try{var l=t.updateQueue,n=l!==null?l.lastEffect:null;if(n!==null){var r=n.next;l=r;do{if((l.tag&e)===e){var o=l.inst,u=o.destroy;if(u!==void 0){o.destroy=void 0,n=t;var i=a,s=u;try{s()}catch(f){de(n,i,f)}}}l=l.next}while(l!==r)}}catch(f){de(t,t.return,f)}}function Rx(e){var t=e.updateQueue;if(t!==null){var a=e.stateNode;try{Gg(t,a)}catch(l){de(e,e.return,l)}}}function Ox(e,t,a){a.props=Ol(e.type,e.memoizedProps),a.state=e.memoizedState;try{a.componentWillUnmount()}catch(l){de(e,t,l)}}function Fr(e,t){try{var a=e.ref;if(a!==null){switch(e.tag){case 26:case 27:case 5:var l=e.stateNode;break;case 30:l=e.stateNode;break;default:l=e.stateNode}typeof a=="function"?e.refCleanup=a(l):a.current=l}}catch(n){de(e,t,n)}}function ta(e,t){var a=e.ref,l=e.refCleanup;if(a!==null)if(typeof l=="function")try{l()}catch(n){de(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof a=="function")try{a(null)}catch(n){de(e,t,n)}else a.current=null}function _x(e){var t=e.type,a=e.memoizedProps,l=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":a.autoFocus&&l.focus();break e;case"img":a.src?l.src=a.src:a.srcSet&&(l.srcset=a.srcSet)}}catch(n){de(e,e.return,n)}}function uf(e,t,a){try{var l=e.stateNode;dk(l,e.type,a,t),l[gt]=t}catch(n){de(e,e.return,n)}}function Nx(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ul(e.type)||e.tag===4}function sf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Nx(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&ul(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Jf(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?(a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a).insertBefore(e,t):(t=a.nodeType===9?a.body:a.nodeName==="HTML"?a.ownerDocument.body:a,t.appendChild(e),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=ya));else if(l!==4&&(l===27&&ul(e.type)&&(a=e.stateNode,t=null),e=e.child,e!==null))for(Jf(e,t,a),e=e.sibling;e!==null;)Jf(e,t,a),e=e.sibling}function Ku(e,t,a){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(l!==4&&(l===27&&ul(e.type)&&(a=e.stateNode),e=e.child,e!==null))for(Ku(e,t,a),e=e.sibling;e!==null;)Ku(e,t,a),e=e.sibling}function Ux(e){var t=e.stateNode,a=e.memoizedProps;try{for(var l=e.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);tt(t,l,a),t[We]=e,t[gt]=a}catch(r){de(e,e.return,r)}}var ga=!1,Ue=!1,ff=!1,xh=typeof WeakSet=="function"?WeakSet:Set,je=null;function Y0(e,t){if(e=e.containerInfo,nc=ui,e=Ig(e),vc(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var l=a.getSelection&&a.getSelection();if(l&&l.rangeCount!==0){a=l.anchorNode;var n=l.anchorOffset,r=l.focusNode;l=l.focusOffset;try{a.nodeType,r.nodeType}catch{a=null;break e}var o=0,u=-1,i=-1,s=0,f=0,c=e,d=null;t:for(;;){for(var p;c!==a||n!==0&&c.nodeType!==3||(u=o+n),c!==r||l!==0&&c.nodeType!==3||(i=o+l),c.nodeType===3&&(o+=c.nodeValue.length),(p=c.firstChild)!==null;)d=c,c=p;for(;;){if(c===e)break t;if(d===a&&++s===n&&(u=o),d===r&&++f===l&&(i=o),(p=c.nextSibling)!==null)break;c=d,d=c.parentNode}c=p}a=u===-1||i===-1?null:{start:u,end:i}}else a=null}a=a||{start:0,end:0}}else a=null;for(rc={focusedElem:e,selectionRange:a},ui=!1,je=t;je!==null;)if(t=je,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,je=e;else for(;je!==null;){switch(t=je,r=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(a=0;a title"))),tt(r,l,a),r[We]=e,Xe(r),l=r;break e;case"link":var o=Hh("link","href",n).get(l+(a.href||""));if(o){for(var u=0;uI&&(o=I,I=S,S=o);var h=Pm(u,S),g=Pm(u,I);if(h&&g&&(p.rangeCount!==1||p.anchorNode!==h.node||p.anchorOffset!==h.offset||p.focusNode!==g.node||p.focusOffset!==g.offset)){var y=c.createRange();y.setStart(h.node,h.offset),p.removeAllRanges(),S>I?(p.addRange(y),p.extend(g.node,g.offset)):(y.setEnd(g.node,g.offset),p.addRange(y))}}}}for(c=[],p=u;p=p.parentNode;)p.nodeType===1&&c.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof u.focus=="function"&&u.focus(),u=0;ua?32:a,P.T=null,a=ec,ec=null;var r=Wa,o=ka;if(Pe=0,Pn=Wa=null,ka=0,(oe&6)!==0)throw Error(M(331));var u=oe;if(oe|=4,Zx(r.current),Xx(r,r.current,o,a),oe=u,go(0,!1),vt&&typeof vt.onPostCommitFiberRoot=="function")try{vt.onPostCommitFiberRoot(uo,r)}catch{}return!0}finally{ue.p=n,P.T=l,fy(e,t)}}function bh(e,t,a){t=Ot(a,t),t=Qf(e.stateNode,t,2),e=Ka(e,t,2),e!==null&&(so(e,2),na(e))}function de(e,t,a){if(e.tag===3)bh(e,e,a);else for(;t!==null;){if(t.tag===3){bh(t,e,a);break}else if(t.tag===1){var l=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&(Ja===null||!Ja.has(l))){e=Ot(a,e),a=wx(2),l=Ka(t,a,2),l!==null&&(Ax(a,l,t,e),so(l,2),na(l));break}}t=t.return}}function df(e,t,a){var l=e.pingCache;if(l===null){l=e.pingCache=new K0;var n=new Set;l.set(t,n)}else n=l.get(t),n===void 0&&(n=new Set,l.set(t,n));n.has(a)||(Wc=!0,n.add(a),e=tk.bind(null,e,t,a),t.then(e,e))}function tk(e,t,a){var l=e.pingCache;l!==null&&l.delete(t),e.pingedLanes|=e.suspendedLanes&a,e.warmLanes&=~a,ge===e&&(ae&a)===a&&(Ae===4||Ae===3&&(ae&62914560)===ae&&300>Ct()-Si?(oe&2)===0&&Gn(e,0):$c|=a,Fn===ae&&(Fn=0)),na(e)}function dy(e,t){t===0&&(t=lg()),e=Hl(e,t),e!==null&&(so(e,t),na(e))}function ak(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),dy(e,a)}function lk(e,t){var a=0;switch(e.tag){case 31:case 13:var l=e.stateNode,n=e.memoizedState;n!==null&&(a=n.retryLane);break;case 19:l=e.stateNode;break;case 22:l=e.stateNode._retryCache;break;default:throw Error(M(314))}l!==null&&l.delete(t),dy(e,a)}function nk(e,t){return hc(e,t)}var ei=null,hn=null,ac=!1,ti=!1,pf=!1,Xa=0;function na(e){e!==hn&&e.next===null&&(hn===null?ei=hn=e:hn=hn.next=e),ti=!0,ac||(ac=!0,ok())}function go(e,t){if(!pf&&ti){pf=!0;do for(var a=!1,l=ei;l!==null;){if(!t)if(e!==0){var n=l.pendingLanes;if(n===0)var r=0;else{var o=l.suspendedLanes,u=l.pingedLanes;r=(1<<31-It(42|e)+1)-1,r&=n&~(o&~u),r=r&201326741?r&201326741|1:r?r|2:0}r!==0&&(a=!0,kh(l,r))}else r=ae,r=si(l,l===ge?r:0,l.cancelPendingCommit!==null||l.timeoutHandle!==-1),(r&3)===0||io(l,r)||(a=!0,kh(l,r));l=l.next}while(a);pf=!1}}function rk(){py()}function py(){ti=ac=!1;var e=0;Xa!==0&&mk()&&(e=Xa);for(var t=Ct(),a=null,l=ei;l!==null;){var n=l.next,r=my(l,t);r===0?(l.next=null,a===null?ei=n:a.next=n,n===null&&(hn=a)):(a=l,(e!==0||(r&3)!==0)&&(ti=!0)),l=n}Pe!==0&&Pe!==5||go(e,!1),Xa!==0&&(Xa=0)}function my(e,t){for(var a=e.suspendedLanes,l=e.pingedLanes,n=e.expirationTimes,r=e.pendingLanes&-62914561;0u)break;var f=i.transferSize,c=i.initiatorType;f&&Mh(c)&&(i=i.responseEnd,o+=f*(i"u"?null:document;function Cy(e,t,a){var l=Jn;if(l&&typeof t=="string"&&t){var n=Rt(t);n='link[rel="'+e+'"][href="'+n+'"]',typeof a=="string"&&(n+='[crossorigin="'+a+'"]'),_h.has(n)||(_h.add(n),e={rel:e,crossOrigin:a,href:t},l.querySelector(n)===null&&(t=l.createElement("link"),tt(t,"link",e),Xe(t),l.head.appendChild(t)))}}function Ck(e){Ta.D(e),Cy("dns-prefetch",e,null)}function vk(e,t){Ta.C(e,t),Cy("preconnect",e,t)}function Ik(e,t,a){Ta.L(e,t,a);var l=Jn;if(l&&e&&t){var n='link[rel="preload"][as="'+Rt(t)+'"]';t==="image"&&a&&a.imageSrcSet?(n+='[imagesrcset="'+Rt(a.imageSrcSet)+'"]',typeof a.imageSizes=="string"&&(n+='[imagesizes="'+Rt(a.imageSizes)+'"]')):n+='[href="'+Rt(e)+'"]';var r=n;switch(t){case"style":r=Vn(e);break;case"script":r=Wn(e)}Ht.has(r)||(e=be({rel:"preload",href:t==="image"&&a&&a.imageSrcSet?void 0:e,as:t},a),Ht.set(r,e),l.querySelector(n)!==null||t==="style"&&l.querySelector(xo(r))||t==="script"&&l.querySelector(yo(r))||(t=l.createElement("link"),tt(t,"link",e),Xe(t),l.head.appendChild(t)))}}function wk(e,t){Ta.m(e,t);var a=Jn;if(a&&e){var l=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+Rt(l)+'"][href="'+Rt(e)+'"]',r=n;switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":r=Wn(e)}if(!Ht.has(r)&&(e=be({rel:"modulepreload",href:e},t),Ht.set(r,e),a.querySelector(n)===null)){switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(a.querySelector(yo(r)))return}l=a.createElement("link"),tt(l,"link",e),Xe(l),a.head.appendChild(l)}}}function Ak(e,t,a){Ta.S(e,t,a);var l=Jn;if(l&&e){var n=Tn(l).hoistableStyles,r=Vn(e);t=t||"default";var o=n.get(r);if(!o){var u={loading:0,preload:null};if(o=l.querySelector(xo(r)))u.loading=5;else{e=be({rel:"stylesheet",href:e,"data-precedence":t},a),(a=Ht.get(r))&&ld(e,a);var i=o=l.createElement("link");Xe(i),tt(i,"link",e),i._p=new Promise(function(s,f){i.onload=s,i.onerror=f}),i.addEventListener("load",function(){u.loading|=1}),i.addEventListener("error",function(){u.loading|=2}),u.loading|=4,Du(o,t,l)}o={type:"stylesheet",instance:o,count:1,state:u},n.set(r,o)}}}function Tk(e,t){Ta.X(e,t);var a=Jn;if(a&&e){var l=Tn(a).hoistableScripts,n=Wn(e),r=l.get(n);r||(r=a.querySelector(yo(n)),r||(e=be({src:e,async:!0},t),(t=Ht.get(n))&&nd(e,t),r=a.createElement("script"),Xe(r),tt(r,"link",e),a.head.appendChild(r)),r={type:"script",instance:r,count:1,state:null},l.set(n,r))}}function Mk(e,t){Ta.M(e,t);var a=Jn;if(a&&e){var l=Tn(a).hoistableScripts,n=Wn(e),r=l.get(n);r||(r=a.querySelector(yo(n)),r||(e=be({src:e,async:!0,type:"module"},t),(t=Ht.get(n))&&nd(e,t),r=a.createElement("script"),Xe(r),tt(r,"link",e),a.head.appendChild(r)),r={type:"script",instance:r,count:1,state:null},l.set(n,r))}}function Nh(e,t,a,l){var n=(n=Ya.current)?ni(n):null;if(!n)throw Error(M(446));switch(e){case"meta":case"title":return null;case"style":return typeof a.precedence=="string"&&typeof a.href=="string"?(t=Vn(a.href),a=Tn(n).hoistableStyles,l=a.get(t),l||(l={type:"style",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};case"link":if(a.rel==="stylesheet"&&typeof a.href=="string"&&typeof a.precedence=="string"){e=Vn(a.href);var r=Tn(n).hoistableStyles,o=r.get(e);if(o||(n=n.ownerDocument||n,o={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},r.set(e,o),(r=n.querySelector(xo(e)))&&!r._p&&(o.instance=r,o.state.loading=5),Ht.has(e)||(a={rel:"preload",as:"style",href:a.href,crossOrigin:a.crossOrigin,integrity:a.integrity,media:a.media,hrefLang:a.hrefLang,referrerPolicy:a.referrerPolicy},Ht.set(e,a),r||Dk(n,e,a,o.state))),t&&l===null)throw Error(M(528,""));return o}if(t&&l!==null)throw Error(M(529,""));return null;case"script":return t=a.async,a=a.src,typeof a=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Wn(a),a=Tn(n).hoistableScripts,l=a.get(t),l||(l={type:"script",instance:null,count:0,state:null},a.set(t,l)),l):{type:"void",instance:null,count:0,state:null};default:throw Error(M(444,e))}}function Vn(e){return'href="'+Rt(e)+'"'}function xo(e){return'link[rel="stylesheet"]['+e+"]"}function vy(e){return be({},e,{"data-precedence":e.precedence,precedence:null})}function Dk(e,t,a,l){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?l.loading=1:(t=e.createElement("link"),l.preload=t,t.addEventListener("load",function(){return l.loading|=1}),t.addEventListener("error",function(){return l.loading|=2}),tt(t,"link",a),Xe(t),e.head.appendChild(t))}function Wn(e){return'[src="'+Rt(e)+'"]'}function yo(e){return"script[async]"+e}function Uh(e,t,a){if(t.count++,t.instance===null)switch(t.type){case"style":var l=e.querySelector('style[data-href~="'+Rt(a.href)+'"]');if(l)return t.instance=l,Xe(l),l;var n=be({},a,{"data-href":a.href,"data-precedence":a.precedence,href:null,precedence:null});return l=(e.ownerDocument||e).createElement("style"),Xe(l),tt(l,"style",n),Du(l,a.precedence,e),t.instance=l;case"stylesheet":n=Vn(a.href);var r=e.querySelector(xo(n));if(r)return t.state.loading|=4,t.instance=r,Xe(r),r;l=vy(a),(n=Ht.get(n))&&ld(l,n),r=(e.ownerDocument||e).createElement("link"),Xe(r);var o=r;return o._p=new Promise(function(u,i){o.onload=u,o.onerror=i}),tt(r,"link",l),t.state.loading|=4,Du(r,a.precedence,e),t.instance=r;case"script":return r=Wn(a.src),(n=e.querySelector(yo(r)))?(t.instance=n,Xe(n),n):(l=a,(n=Ht.get(r))&&(l=be({},a),nd(l,n)),e=e.ownerDocument||e,n=e.createElement("script"),Xe(n),tt(n,"link",l),e.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(M(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(l=t.instance,t.state.loading|=4,Du(l,a.precedence,e));return t.instance}function Du(e,t,a){for(var l=a.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=l.length?l[l.length-1]:null,r=n,o=0;o title"):null)}function Ek(e,t,a){if(a===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Iy(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function Bk(e,t,a,l){if(a.type==="stylesheet"&&(typeof l.media!="string"||matchMedia(l.media).matches!==!1)&&(a.state.loading&4)===0){if(a.instance===null){var n=Vn(l.href),r=t.querySelector(xo(n));if(r){t=r._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=ri.bind(e),t.then(e,e)),a.state.loading|=4,a.instance=r,Xe(r);return}r=t.ownerDocument||t,l=vy(l),(n=Ht.get(n))&&ld(l,n),r=r.createElement("link"),Xe(r);var o=r;o._p=new Promise(function(u,i){o.onload=u,o.onerror=i}),tt(r,"link",l),a.instance=r}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(a,t),(t=a.state.preload)&&(a.state.loading&3)===0&&(e.count++,a=ri.bind(e),t.addEventListener("load",a),t.addEventListener("error",a))}}var xf=0;function zk(e,t){return e.stylesheets&&e.count===0&&Bu(e,e.stylesheets),0xf?50:800)+t);return e.unsuspend=a,function(){e.unsuspend=null,clearTimeout(l),clearTimeout(n)}}:null}function ri(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Bu(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var oi=null;function Bu(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,oi=new Map,t.forEach(Rk,e),oi=null,ri.call(e))}function Rk(e,t){if(!(t.state.loading&4)){var a=oi.get(e);if(a)var l=a.get(null);else{a=new Map,oi.set(e,a);for(var n=e.querySelectorAll("link[data-precedence],style[data-precedence]"),r=0;r{"use strict";function Ry(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Ry)}catch(e){console.error(e)}}Ry(),Oy.exports=zy()});var Ky=rt((xT,Zy)=>{"use strict";var jy=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,Jk=/\n/g,Wk=/^\s*/,$k=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,eC=/^:\s*/,tC=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,aC=/^[;\s]*/,lC=/^\s+|\s+$/g,nC=` +`,Xy="/",Yy="*",Gl="",rC="comment",oC="declaration";function uC(e,t){if(typeof e!="string")throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var a=1,l=1;function n(x){var S=x.match(Jk);S&&(a+=S.length);var I=x.lastIndexOf(nC);l=~I?x.length-I:l+x.length}function r(){var x={line:a,column:l};return function(S){return S.position=new o(x),s(),S}}function o(x){this.start=x,this.end={line:a,column:l},this.source=t.source}o.prototype.content=e;function u(x){var S=new Error(t.source+":"+a+":"+l+": "+x);if(S.reason=x,S.filename=t.source,S.line=a,S.column=l,S.source=e,!t.silent)throw S}function i(x){var S=x.exec(e);if(S){var I=S[0];return n(I),e=e.slice(I.length),S}}function s(){i(Wk)}function f(x){var S;for(x=x||[];S=c();)S!==!1&&x.push(S);return x}function c(){var x=r();if(!(Xy!=e.charAt(0)||Yy!=e.charAt(1))){for(var S=2;Gl!=e.charAt(S)&&(Yy!=e.charAt(S)||Xy!=e.charAt(S+1));)++S;if(S+=2,Gl===e.charAt(S-1))return u("End of comment missing");var I=e.slice(2,S-2);return l+=2,n(I),e=e.slice(S),l+=2,x({type:rC,comment:I})}}function d(){var x=r(),S=i($k);if(S){if(c(),!i(eC))return u("property missing ':'");var I=i(tC),h=x({type:oC,property:Qy(S[0].replace(jy,Gl)),value:I?Qy(I[0].replace(jy,Gl)):Gl});return i(aC),h}}function p(){var x=[];f(x);for(var S;S=d();)S!==!1&&(x.push(S),f(x));return x}return s(),p()}function Qy(e){return e?e.replace(lC,Gl):Gl}Zy.exports=uC});var Jy=rt(bo=>{"use strict";var iC=bo&&bo.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(bo,"__esModule",{value:!0});bo.default=fC;var sC=iC(Ky());function fC(e,t){let a=null;if(!e||typeof e!="string")return a;let l=(0,sC.default)(e),n=typeof t=="function";return l.forEach(r=>{if(r.type!=="declaration")return;let{property:o,value:u}=r;n?t(o,u,r):u&&(a=a||{},a[o]=u)}),a}});var $y=rt(Ei=>{"use strict";Object.defineProperty(Ei,"__esModule",{value:!0});Ei.camelCase=void 0;var cC=/^--[a-zA-Z0-9_-]+$/,dC=/-([a-z])/g,pC=/^[^-]+$/,mC=/^-(webkit|moz|ms|o|khtml)-/,hC=/^-(ms)-/,gC=function(e){return!e||pC.test(e)||cC.test(e)},xC=function(e,t){return t.toUpperCase()},Wy=function(e,t){return"".concat(t,"-")},yC=function(e,t){return t===void 0&&(t={}),gC(e)?e:(e=e.toLowerCase(),t.reactCompat?e=e.replace(hC,Wy):e=e.replace(mC,Wy),e.replace(dC,xC))};Ei.camelCase=yC});var t1=rt((Ld,e1)=>{"use strict";var LC=Ld&&Ld.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},SC=LC(Jy()),bC=$y();function yd(e,t){var a={};return!e||typeof e!="string"||(0,SC.default)(e,function(l,n){l&&n&&(a[(0,bC.camelCase)(l,t)]=n)}),a}yd.default=yd;e1.exports=yd});var c1=rt(zi=>{"use strict";var FC=Symbol.for("react.transitional.element"),PC=Symbol.for("react.fragment");function f1(e,t,a){var l=null;if(a!==void 0&&(l=""+a),t.key!==void 0&&(l=""+t.key),"key"in t){a={};for(var n in t)n!=="key"&&(a[n]=t[n])}else a=t;return t=a.ref,{$$typeof:FC,type:e,key:l,ref:t!==void 0?t:null,props:a}}zi.Fragment=PC;zi.jsx=f1;zi.jsxs=f1});var Ri=rt((VT,d1)=>{"use strict";d1.exports=c1()});var ML=rt((Zz,TL)=>{"use strict";var ls=Object.prototype.hasOwnProperty,AL=Object.prototype.toString,bL=Object.defineProperty,kL=Object.getOwnPropertyDescriptor,CL=function(t){return typeof Array.isArray=="function"?Array.isArray(t):AL.call(t)==="[object Array]"},vL=function(t){if(!t||AL.call(t)!=="[object Object]")return!1;var a=ls.call(t,"constructor"),l=t.constructor&&t.constructor.prototype&&ls.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!a&&!l)return!1;var n;for(n in t);return typeof n>"u"||ls.call(t,n)},IL=function(t,a){bL&&a.name==="__proto__"?bL(t,a.name,{enumerable:!0,configurable:!0,value:a.newValue,writable:!0}):t[a.name]=a.newValue},wL=function(t,a){if(a==="__proto__")if(ls.call(t,a)){if(kL)return kL(t,a).value}else return;return t[a]};TL.exports=function e(){var t,a,l,n,r,o,u=arguments[0],i=1,s=arguments.length,f=!1;for(typeof u=="boolean"&&(f=u,u=arguments[1]||{},i=2),(u==null||typeof u!="object"&&typeof u!="function")&&(u={});iG,booleanish:()=>Te,commaOrSpaceSeparated:()=>yt,commaSeparated:()=>Da,number:()=>E,overloadedBoolean:()=>Ai,spaceSeparated:()=>se});var Xk=0,G=Fl(),Te=Fl(),Ai=Fl(),E=Fl(),se=Fl(),Da=Fl(),yt=Fl();function Fl(){return 2**++Xk}var cd=Object.keys(So),Pl=class extends Qe{constructor(t,a,l,n){let r=-1;if(super(t,a),Hy(this,"space",n),typeof l=="number")for(;++r4&&a.slice(0,4)==="data"&&Qk.test(t)){if(t.charAt(4)==="-"){let r=t.slice(5).replace(Py,Kk);l="data"+r.charAt(0).toUpperCase()+r.slice(1)}else{let r=t.slice(4);if(!Py.test(r)){let o=r.replace(Yk,Zk);o.charAt(0)!=="-"&&(o="-"+o),t="data"+o}}n=Pl}return new n(l,t)}function Zk(e){return"-"+e.toLowerCase()}function Kk(e){return e.charAt(1).toUpperCase()}var Gy=fd([dd,qy,pd,md,hd],"html"),Di=fd([dd,Fy,pd,md,hd],"svg");function Vy(e){return e.join(" ").trim()}var r1=Jt(t1(),1);var Bi=a1("end"),$n=a1("start");function a1(e){return t;function t(a){let l=a&&a.position&&a.position[e]||{};if(typeof l.line=="number"&&l.line>0&&typeof l.column=="number"&&l.column>0)return{line:l.line,column:l.column,offset:typeof l.offset=="number"&&l.offset>-1?l.offset:void 0}}}function Sd(e){let t=$n(e),a=Bi(e);if(t&&a)return{start:t,end:a}}function il(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?l1(e.position):"start"in e||"end"in e?l1(e):"line"in e||"column"in e?bd(e):""}function bd(e){return n1(e&&e.line)+":"+n1(e&&e.column)}function l1(e){return bd(e&&e.start)+"-"+bd(e&&e.end)}function n1(e){return e&&typeof e=="number"?e:1}var ze=class extends Error{constructor(t,a,l){super(),typeof a=="string"&&(l=a,a=void 0);let n="",r={},o=!1;if(a&&("line"in a&&"column"in a?r={place:a}:"start"in a&&"end"in a?r={place:a}:"type"in a?r={ancestors:[a],place:a.position}:r={...a}),typeof t=="string"?n=t:!r.cause&&t&&(o=!0,n=t.message,r.cause=t),!r.ruleId&&!r.source&&typeof l=="string"){let i=l.indexOf(":");i===-1?r.ruleId=l:(r.source=l.slice(0,i),r.ruleId=l.slice(i+1))}if(!r.place&&r.ancestors&&r.ancestors){let i=r.ancestors[r.ancestors.length-1];i&&(r.place=i.position)}let u=r.place&&"start"in r.place?r.place.start:r.place;this.ancestors=r.ancestors||void 0,this.cause=r.cause||void 0,this.column=u?u.column:void 0,this.fatal=void 0,this.file="",this.message=n,this.line=u?u.line:void 0,this.name=il(r.place)||"1:1",this.place=r.place||void 0,this.reason=this.message,this.ruleId=r.ruleId||void 0,this.source=r.source||void 0,this.stack=o&&r.cause&&typeof r.cause.stack=="string"?r.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};ze.prototype.file="";ze.prototype.name="";ze.prototype.reason="";ze.prototype.message="";ze.prototype.stack="";ze.prototype.column=void 0;ze.prototype.line=void 0;ze.prototype.ancestors=void 0;ze.prototype.cause=void 0;ze.prototype.fatal=void 0;ze.prototype.place=void 0;ze.prototype.ruleId=void 0;ze.prototype.source=void 0;var kd={}.hasOwnProperty,kC=new Map,CC=/[A-Z]/g,vC=new Set(["table","tbody","thead","tfoot","tr"]),IC=new Set(["td","th"]),o1="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function Cd(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");let a=t.filePath||void 0,l;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");l=zC(a,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");l=BC(a,t.jsx,t.jsxs)}let n={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:l,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:a,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?Di:Gy,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},r=u1(n,e,void 0);return r&&typeof r!="string"?r:n.create(e,n.Fragment,{children:r||void 0},void 0)}function u1(e,t,a){if(t.type==="element")return wC(e,t,a);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return AC(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return MC(e,t,a);if(t.type==="mdxjsEsm")return TC(e,t);if(t.type==="root")return DC(e,t,a);if(t.type==="text")return EC(e,t)}function wC(e,t,a){let l=e.schema,n=l;t.tagName.toLowerCase()==="svg"&&l.space==="html"&&(n=Di,e.schema=n),e.ancestors.push(t);let r=s1(e,t.tagName,!1),o=RC(e,t),u=Id(e,t);return vC.has(t.tagName)&&(u=u.filter(function(i){return typeof i=="string"?!sd(i):!0})),i1(e,o,r,t),vd(o,u),e.ancestors.pop(),e.schema=l,e.create(t,r,o,a)}function AC(e,t){if(t.data&&t.data.estree&&e.evaluater){let l=t.data.estree.body[0];return l.type,e.evaluater.evaluateExpression(l.expression)}ko(e,t.position)}function TC(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);ko(e,t.position)}function MC(e,t,a){let l=e.schema,n=l;t.name==="svg"&&l.space==="html"&&(n=Di,e.schema=n),e.ancestors.push(t);let r=t.name===null?e.Fragment:s1(e,t.name,!0),o=OC(e,t),u=Id(e,t);return i1(e,o,r,t),vd(o,u),e.ancestors.pop(),e.schema=l,e.create(t,r,o,a)}function DC(e,t,a){let l={};return vd(l,Id(e,t)),e.create(t,e.Fragment,l,a)}function EC(e,t){return t.value}function i1(e,t,a,l){typeof a!="string"&&a!==e.Fragment&&e.passNode&&(t.node=l)}function vd(e,t){if(t.length>0){let a=t.length>1?t:t[0];a&&(e.children=a)}}function BC(e,t,a){return l;function l(n,r,o,u){let s=Array.isArray(o.children)?a:t;return u?s(r,o,u):s(r,o)}}function zC(e,t){return a;function a(l,n,r,o){let u=Array.isArray(r.children),i=$n(l);return t(n,r,o,u,{columnNumber:i?i.column-1:void 0,fileName:e,lineNumber:i?i.line:void 0},void 0)}}function RC(e,t){let a={},l,n;for(n in t.properties)if(n!=="children"&&kd.call(t.properties,n)){let r=_C(e,n,t.properties[n]);if(r){let[o,u]=r;e.tableCellAlignToStyle&&o==="align"&&typeof u=="string"&&IC.has(t.tagName)?l=u:a[o]=u}}if(l){let r=a.style||(a.style={});r[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=l}return a}function OC(e,t){let a={};for(let l of t.attributes)if(l.type==="mdxJsxExpressionAttribute")if(l.data&&l.data.estree&&e.evaluater){let r=l.data.estree.body[0];r.type;let o=r.expression;o.type;let u=o.properties[0];u.type,Object.assign(a,e.evaluater.evaluateExpression(u.argument))}else ko(e,t.position);else{let n=l.name,r;if(l.value&&typeof l.value=="object")if(l.value.data&&l.value.data.estree&&e.evaluater){let u=l.value.data.estree.body[0];u.type,r=e.evaluater.evaluateExpression(u.expression)}else ko(e,t.position);else r=l.value===null?!0:l.value;a[n]=r}return a}function Id(e,t){let a=[],l=-1,n=e.passKeys?new Map:kC;for(;++ln?0:n+t:t=t>n?n:t,a=a>0?a:0,l.length<1e4)o=Array.from(l),o.unshift(t,a),e.splice(...o);else for(a&&e.splice(t,a);r0?(Re(e,e.length,0,t),e):t}var g1={}.hasOwnProperty;function Oi(e){let t={},a=-1;for(;++a13&&a<32||a>126&&a<160||a>55295&&a<57344||a>64975&&a<65008||(a&65535)===65535||(a&65535)===65534||a>1114111?"\uFFFD":String.fromCodePoint(a)}function lt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}var Ve=sl(/[A-Za-z]/),Me=sl(/[\dA-Za-z]/),x1=sl(/[#-'*+\--9=?A-Z^-~]/);function jl(e){return e!==null&&(e<32||e===127)}var vo=sl(/\d/),y1=sl(/[\dA-Fa-f]/),L1=sl(/[!-/:-@[-`{-~]/);function _(e){return e!==null&&e<-2}function W(e){return e!==null&&(e<0||e===32)}function q(e){return e===-2||e===-1||e===32}var Xl=sl(new RegExp("\\p{P}|\\p{S}","u")),ra=sl(/\s/);function sl(e){return t;function t(a){return a!==null&&a>-1&&e.test(String.fromCharCode(a))}}function Ft(e){let t=[],a=-1,l=0,n=0;for(;++a55295&&r<57344){let u=e.charCodeAt(a+1);r<56320&&u>56319&&u<57344?(o=String.fromCharCode(r,u),n=1):o="\uFFFD"}else o=String.fromCharCode(r);o&&(t.push(e.slice(l,a),encodeURIComponent(o)),l=a+n+1,o=""),n&&(a+=n,n=0)}return t.join("")+e.slice(l)}function U(e,t,a,l){let n=l?l-1:Number.POSITIVE_INFINITY,r=0;return o;function o(i){return q(i)?(e.enter(a),u(i)):t(i)}function u(i){return q(i)&&r++o))return;let A=t.events.length,R=A,O,v;for(;R--;)if(t.events[R][0]==="exit"&&t.events[R][1].type==="chunkFlow"){if(O){v=t.events[R][1].end;break}O=!0}for(h(l),k=A;ky;){let w=a[C];t.containerState=w[1],w[0].exit.call(t,e)}a.length=y}function g(){n.write([null]),r=void 0,n=void 0,t.containerState._closeFlow=void 0}}function ZC(e,t,a){return U(e,e.attempt(this.parser.constructs.document,t,a),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ea(e){if(e===null||W(e)||ra(e))return 1;if(Xl(e))return 2}function fl(e,t,a){let l=[],n=-1;for(;++n1&&e[a][1].end.offset-e[a][1].start.offset>1?2:1;let c={...e[l][1].end},d={...e[a][1].start};C1(c,-i),C1(d,i),o={type:i>1?"strongSequence":"emphasisSequence",start:c,end:{...e[l][1].end}},u={type:i>1?"strongSequence":"emphasisSequence",start:{...e[a][1].start},end:d},r={type:i>1?"strongText":"emphasisText",start:{...e[l][1].end},end:{...e[a][1].start}},n={type:i>1?"strong":"emphasis",start:{...o.start},end:{...u.end}},e[l][1].end={...o.start},e[a][1].start={...u.end},s=[],e[l][1].end.offset-e[l][1].start.offset&&(s=st(s,[["enter",e[l][1],t],["exit",e[l][1],t]])),s=st(s,[["enter",n,t],["enter",o,t],["exit",o,t],["enter",r,t]]),s=st(s,fl(t.parser.constructs.insideSpan.null,e.slice(l+1,a),t)),s=st(s,[["exit",r,t],["enter",u,t],["exit",u,t],["exit",n,t]]),e[a][1].end.offset-e[a][1].start.offset?(f=2,s=st(s,[["enter",e[a][1],t],["exit",e[a][1],t]])):f=0,Re(e,l-1,a-l+3,s),a=l+s.length-f-2;break}}for(a=-1;++a0&&q(k)?U(e,g,"linePrefix",r+1)(k):g(k)}function g(k){return k===null||_(k)?e.check(v1,S,C)(k):(e.enter("codeFlowValue"),y(k))}function y(k){return k===null||_(k)?(e.exit("codeFlowValue"),g(k)):(e.consume(k),y)}function C(k){return e.exit("codeFenced"),t(k)}function w(k,A,R){let O=0;return v;function v(j){return k.enter("lineEnding"),k.consume(j),k.exit("lineEnding"),ne}function ne(j){return k.enter("codeFencedFence"),q(j)?U(k,$,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(j):$(j)}function $(j){return j===u?(k.enter("codeFencedFenceSequence"),N(j)):R(j)}function N(j){return j===u?(O++,k.consume(j),N):O>=o?(k.exit("codeFencedFenceSequence"),q(j)?U(k,X,"whitespace")(j):X(j)):R(j)}function X(j){return j===null||_(j)?(k.exit("codeFencedFence"),A(j)):R(j)}}}function ov(e,t,a){let l=this;return n;function n(o){return o===null?a(o):(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),r)}function r(o){return l.parser.lazy[l.now().line]?a(o):t(o)}}var wo={name:"codeIndented",tokenize:iv},uv={partial:!0,tokenize:sv};function iv(e,t,a){let l=this;return n;function n(s){return e.enter("codeIndented"),U(e,r,"linePrefix",5)(s)}function r(s){let f=l.events[l.events.length-1];return f&&f[1].type==="linePrefix"&&f[2].sliceSerialize(f[1],!0).length>=4?o(s):a(s)}function o(s){return s===null?i(s):_(s)?e.attempt(uv,o,i)(s):(e.enter("codeFlowValue"),u(s))}function u(s){return s===null||_(s)?(e.exit("codeFlowValue"),o(s)):(e.consume(s),u)}function i(s){return e.exit("codeIndented"),t(s)}}function sv(e,t,a){let l=this;return n;function n(o){return l.parser.lazy[l.now().line]?a(o):_(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),n):U(e,r,"linePrefix",5)(o)}function r(o){let u=l.events[l.events.length-1];return u&&u[1].type==="linePrefix"&&u[2].sliceSerialize(u[1],!0).length>=4?t(o):_(o)?n(o):a(o)}}var Ad={name:"codeText",previous:cv,resolve:fv,tokenize:dv};function fv(e){let t=e.length-4,a=3,l,n;if((e[a][1].type==="lineEnding"||e[a][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(l=a;++l=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-l+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-l+this.left.length).reverse())}splice(t,a,l){let n=a||0;this.setCursor(Math.trunc(t));let r=this.right.splice(this.right.length-n,Number.POSITIVE_INFINITY);return l&&Ao(this.left,l),r.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Ao(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Ao(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(o):e.interrupt(l.parser.constructs.flow,a,t)(o)}}function Gi(e,t,a,l,n,r,o,u,i){let s=i||Number.POSITIVE_INFINITY,f=0;return c;function c(h){return h===60?(e.enter(l),e.enter(n),e.enter(r),e.consume(h),e.exit(r),d):h===null||h===32||h===41||jl(h)?a(h):(e.enter(l),e.enter(o),e.enter(u),e.enter("chunkString",{contentType:"string"}),S(h))}function d(h){return h===62?(e.enter(r),e.consume(h),e.exit(r),e.exit(n),e.exit(l),t):(e.enter(u),e.enter("chunkString",{contentType:"string"}),p(h))}function p(h){return h===62?(e.exit("chunkString"),e.exit(u),d(h)):h===null||h===60||_(h)?a(h):(e.consume(h),h===92?x:p)}function x(h){return h===60||h===62||h===92?(e.consume(h),p):p(h)}function S(h){return!f&&(h===null||h===41||W(h))?(e.exit("chunkString"),e.exit(u),e.exit(o),e.exit(l),t(h)):f999||p===null||p===91||p===93&&!i||p===94&&!u&&"_hiddenFootnoteSupport"in o.parser.constructs?a(p):p===93?(e.exit(r),e.enter(n),e.consume(p),e.exit(n),e.exit(l),t):_(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),f):(e.enter("chunkString",{contentType:"string"}),c(p))}function c(p){return p===null||p===91||p===93||_(p)||u++>999?(e.exit("chunkString"),f(p)):(e.consume(p),i||(i=!q(p)),p===92?d:c)}function d(p){return p===91||p===92||p===93?(e.consume(p),u++,c):c(p)}}function ji(e,t,a,l,n,r){let o;return u;function u(d){return d===34||d===39||d===40?(e.enter(l),e.enter(n),e.consume(d),e.exit(n),o=d===40?41:d,i):a(d)}function i(d){return d===o?(e.enter(n),e.consume(d),e.exit(n),e.exit(l),t):(e.enter(r),s(d))}function s(d){return d===o?(e.exit(r),i(o)):d===null?a(d):_(d)?(e.enter("lineEnding"),e.consume(d),e.exit("lineEnding"),U(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),f(d))}function f(d){return d===o||d===null||_(d)?(e.exit("chunkString"),s(d)):(e.consume(d),d===92?c:f)}function c(d){return d===o||d===92?(e.consume(d),f):f(d)}}function Yl(e,t){let a;return l;function l(n){return _(n)?(e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),a=!0,l):q(n)?U(e,l,a?"linePrefix":"lineSuffix")(n):t(n)}}var Md={name:"definition",tokenize:Lv},yv={partial:!0,tokenize:Sv};function Lv(e,t,a){let l=this,n;return r;function r(p){return e.enter("definition"),o(p)}function o(p){return Vi.call(l,e,u,a,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function u(p){return n=lt(l.sliceSerialize(l.events[l.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),i):a(p)}function i(p){return W(p)?Yl(e,s)(p):s(p)}function s(p){return Gi(e,f,a,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function f(p){return e.attempt(yv,c,c)(p)}function c(p){return q(p)?U(e,d,"whitespace")(p):d(p)}function d(p){return p===null||_(p)?(e.exit("definition"),l.parser.defined.push(n),t(p)):a(p)}}function Sv(e,t,a){return l;function l(u){return W(u)?Yl(e,n)(u):a(u)}function n(u){return ji(e,r,a,"definitionTitle","definitionTitleMarker","definitionTitleString")(u)}function r(u){return q(u)?U(e,o,"whitespace")(u):o(u)}function o(u){return u===null||_(u)?t(u):a(u)}}var Dd={name:"hardBreakEscape",tokenize:bv};function bv(e,t,a){return l;function l(r){return e.enter("hardBreakEscape"),e.consume(r),n}function n(r){return _(r)?(e.exit("hardBreakEscape"),t(r)):a(r)}}var Ed={name:"headingAtx",resolve:kv,tokenize:Cv};function kv(e,t){let a=e.length-2,l=3,n,r;return e[l][1].type==="whitespace"&&(l+=2),a-2>l&&e[a][1].type==="whitespace"&&(a-=2),e[a][1].type==="atxHeadingSequence"&&(l===a-1||a-4>l&&e[a-2][1].type==="whitespace")&&(a-=l+1===a?2:4),a>l&&(n={type:"atxHeadingText",start:e[l][1].start,end:e[a][1].end},r={type:"chunkText",start:e[l][1].start,end:e[a][1].end,contentType:"text"},Re(e,l,a-l+1,[["enter",n,t],["enter",r,t],["exit",r,t],["exit",n,t]])),e}function Cv(e,t,a){let l=0;return n;function n(f){return e.enter("atxHeading"),r(f)}function r(f){return e.enter("atxHeadingSequence"),o(f)}function o(f){return f===35&&l++<6?(e.consume(f),o):f===null||W(f)?(e.exit("atxHeadingSequence"),u(f)):a(f)}function u(f){return f===35?(e.enter("atxHeadingSequence"),i(f)):f===null||_(f)?(e.exit("atxHeading"),t(f)):q(f)?U(e,u,"whitespace")(f):(e.enter("atxHeadingText"),s(f))}function i(f){return f===35?(e.consume(f),i):(e.exit("atxHeadingSequence"),u(f))}function s(f){return f===null||f===35||W(f)?(e.exit("atxHeadingText"),u(f)):(e.consume(f),s)}}var I1=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Bd=["pre","script","style","textarea"];var zd={concrete:!0,name:"htmlFlow",resolveTo:wv,tokenize:Av},vv={partial:!0,tokenize:Mv},Iv={partial:!0,tokenize:Tv};function wv(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function Av(e,t,a){let l=this,n,r,o,u,i;return s;function s(L){return f(L)}function f(L){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(L),c}function c(L){return L===33?(e.consume(L),d):L===47?(e.consume(L),r=!0,S):L===63?(e.consume(L),n=3,l.interrupt?t:b):Ve(L)?(e.consume(L),o=String.fromCharCode(L),I):a(L)}function d(L){return L===45?(e.consume(L),n=2,p):L===91?(e.consume(L),n=5,u=0,x):Ve(L)?(e.consume(L),n=4,l.interrupt?t:b):a(L)}function p(L){return L===45?(e.consume(L),l.interrupt?t:b):a(L)}function x(L){let Ke="CDATA[";return L===Ke.charCodeAt(u++)?(e.consume(L),u===Ke.length?l.interrupt?t:$:x):a(L)}function S(L){return Ve(L)?(e.consume(L),o=String.fromCharCode(L),I):a(L)}function I(L){if(L===null||L===47||L===62||W(L)){let Ke=L===47,Gt=o.toLowerCase();return!Ke&&!r&&Bd.includes(Gt)?(n=1,l.interrupt?t(L):$(L)):I1.includes(o.toLowerCase())?(n=6,Ke?(e.consume(L),h):l.interrupt?t(L):$(L)):(n=7,l.interrupt&&!l.parser.lazy[l.now().line]?a(L):r?g(L):y(L))}return L===45||Me(L)?(e.consume(L),o+=String.fromCharCode(L),I):a(L)}function h(L){return L===62?(e.consume(L),l.interrupt?t:$):a(L)}function g(L){return q(L)?(e.consume(L),g):v(L)}function y(L){return L===47?(e.consume(L),v):L===58||L===95||Ve(L)?(e.consume(L),C):q(L)?(e.consume(L),y):v(L)}function C(L){return L===45||L===46||L===58||L===95||Me(L)?(e.consume(L),C):w(L)}function w(L){return L===61?(e.consume(L),k):q(L)?(e.consume(L),w):y(L)}function k(L){return L===null||L===60||L===61||L===62||L===96?a(L):L===34||L===39?(e.consume(L),i=L,A):q(L)?(e.consume(L),k):R(L)}function A(L){return L===i?(e.consume(L),i=null,O):L===null||_(L)?a(L):(e.consume(L),A)}function R(L){return L===null||L===34||L===39||L===47||L===60||L===61||L===62||L===96||W(L)?w(L):(e.consume(L),R)}function O(L){return L===47||L===62||q(L)?y(L):a(L)}function v(L){return L===62?(e.consume(L),ne):a(L)}function ne(L){return L===null||_(L)?$(L):q(L)?(e.consume(L),ne):a(L)}function $(L){return L===45&&n===2?(e.consume(L),fe):L===60&&n===1?(e.consume(L),ve):L===62&&n===4?(e.consume(L),Oe):L===63&&n===3?(e.consume(L),b):L===93&&n===5?(e.consume(L),Ze):_(L)&&(n===6||n===7)?(e.exit("htmlFlowData"),e.check(vv,Pt,N)(L)):L===null||_(L)?(e.exit("htmlFlowData"),N(L)):(e.consume(L),$)}function N(L){return e.check(Iv,X,Pt)(L)}function X(L){return e.enter("lineEnding"),e.consume(L),e.exit("lineEnding"),j}function j(L){return L===null||_(L)?N(L):(e.enter("htmlFlowData"),$(L))}function fe(L){return L===45?(e.consume(L),b):$(L)}function ve(L){return L===47?(e.consume(L),o="",Ie):$(L)}function Ie(L){if(L===62){let Ke=o.toLowerCase();return Bd.includes(Ke)?(e.consume(L),Oe):$(L)}return Ve(L)&&o.length<8?(e.consume(L),o+=String.fromCharCode(L),Ie):$(L)}function Ze(L){return L===93?(e.consume(L),b):$(L)}function b(L){return L===62?(e.consume(L),Oe):L===45&&n===2?(e.consume(L),b):$(L)}function Oe(L){return L===null||_(L)?(e.exit("htmlFlowData"),Pt(L)):(e.consume(L),Oe)}function Pt(L){return e.exit("htmlFlow"),t(L)}}function Tv(e,t,a){let l=this;return n;function n(o){return _(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),r):a(o)}function r(o){return l.parser.lazy[l.now().line]?a(o):t(o)}}function Mv(e,t,a){return l;function l(n){return e.enter("lineEnding"),e.consume(n),e.exit("lineEnding"),e.attempt(oa,t,a)}}var Rd={name:"htmlText",tokenize:Dv};function Dv(e,t,a){let l=this,n,r,o;return u;function u(b){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(b),i}function i(b){return b===33?(e.consume(b),s):b===47?(e.consume(b),w):b===63?(e.consume(b),y):Ve(b)?(e.consume(b),R):a(b)}function s(b){return b===45?(e.consume(b),f):b===91?(e.consume(b),r=0,x):Ve(b)?(e.consume(b),g):a(b)}function f(b){return b===45?(e.consume(b),p):a(b)}function c(b){return b===null?a(b):b===45?(e.consume(b),d):_(b)?(o=c,ve(b)):(e.consume(b),c)}function d(b){return b===45?(e.consume(b),p):c(b)}function p(b){return b===62?fe(b):b===45?d(b):c(b)}function x(b){let Oe="CDATA[";return b===Oe.charCodeAt(r++)?(e.consume(b),r===Oe.length?S:x):a(b)}function S(b){return b===null?a(b):b===93?(e.consume(b),I):_(b)?(o=S,ve(b)):(e.consume(b),S)}function I(b){return b===93?(e.consume(b),h):S(b)}function h(b){return b===62?fe(b):b===93?(e.consume(b),h):S(b)}function g(b){return b===null||b===62?fe(b):_(b)?(o=g,ve(b)):(e.consume(b),g)}function y(b){return b===null?a(b):b===63?(e.consume(b),C):_(b)?(o=y,ve(b)):(e.consume(b),y)}function C(b){return b===62?fe(b):y(b)}function w(b){return Ve(b)?(e.consume(b),k):a(b)}function k(b){return b===45||Me(b)?(e.consume(b),k):A(b)}function A(b){return _(b)?(o=A,ve(b)):q(b)?(e.consume(b),A):fe(b)}function R(b){return b===45||Me(b)?(e.consume(b),R):b===47||b===62||W(b)?O(b):a(b)}function O(b){return b===47?(e.consume(b),fe):b===58||b===95||Ve(b)?(e.consume(b),v):_(b)?(o=O,ve(b)):q(b)?(e.consume(b),O):fe(b)}function v(b){return b===45||b===46||b===58||b===95||Me(b)?(e.consume(b),v):ne(b)}function ne(b){return b===61?(e.consume(b),$):_(b)?(o=ne,ve(b)):q(b)?(e.consume(b),ne):O(b)}function $(b){return b===null||b===60||b===61||b===62||b===96?a(b):b===34||b===39?(e.consume(b),n=b,N):_(b)?(o=$,ve(b)):q(b)?(e.consume(b),$):(e.consume(b),X)}function N(b){return b===n?(e.consume(b),n=void 0,j):b===null?a(b):_(b)?(o=N,ve(b)):(e.consume(b),N)}function X(b){return b===null||b===34||b===39||b===60||b===61||b===96?a(b):b===47||b===62||W(b)?O(b):(e.consume(b),X)}function j(b){return b===47||b===62||W(b)?O(b):a(b)}function fe(b){return b===62?(e.consume(b),e.exit("htmlTextData"),e.exit("htmlText"),t):a(b)}function ve(b){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),Ie}function Ie(b){return q(b)?U(e,Ze,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(b):Ze(b)}function Ze(b){return e.enter("htmlTextData"),o(b)}}var Ql={name:"labelEnd",resolveAll:Rv,resolveTo:Ov,tokenize:_v},Ev={tokenize:Nv},Bv={tokenize:Uv},zv={tokenize:Hv};function Rv(e){let t=-1,a=[];for(;++t=3&&(s===null||_(s))?(e.exit("thematicBreak"),t(s)):a(s)}function i(s){return s===n?(e.consume(s),l++,i):(e.exit("thematicBreakSequence"),q(s)?U(e,u,"whitespace")(s):u(s))}}var nt={continuation:{tokenize:Yv},exit:Zv,name:"list",tokenize:Xv},Vv={partial:!0,tokenize:Kv},jv={partial:!0,tokenize:Qv};function Xv(e,t,a){let l=this,n=l.events[l.events.length-1],r=n&&n[1].type==="linePrefix"?n[2].sliceSerialize(n[1],!0).length:0,o=0;return u;function u(p){let x=l.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(x==="listUnordered"?!l.containerState.marker||p===l.containerState.marker:vo(p)){if(l.containerState.type||(l.containerState.type=x,e.enter(x,{_container:!0})),x==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Zl,a,s)(p):s(p);if(!l.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),i(p)}return a(p)}function i(p){return vo(p)&&++o<10?(e.consume(p),i):(!l.interrupt||o<2)&&(l.containerState.marker?p===l.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),s(p)):a(p)}function s(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),l.containerState.marker=l.containerState.marker||p,e.check(oa,l.interrupt?a:f,e.attempt(Vv,d,c))}function f(p){return l.containerState.initialBlankLine=!0,r++,d(p)}function c(p){return q(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),d):a(p)}function d(p){return l.containerState.size=r+l.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function Yv(e,t,a){let l=this;return l.containerState._closeFlow=void 0,e.check(oa,n,r);function n(u){return l.containerState.furtherBlankLines=l.containerState.furtherBlankLines||l.containerState.initialBlankLine,U(e,t,"listItemIndent",l.containerState.size+1)(u)}function r(u){return l.containerState.furtherBlankLines||!q(u)?(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,o(u)):(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,e.attempt(jv,t,o)(u))}function o(u){return l.containerState._closeFlow=!0,l.interrupt=void 0,U(e,e.attempt(nt,t,a),"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(u)}}function Qv(e,t,a){let l=this;return U(e,n,"listItemIndent",l.containerState.size+1);function n(r){let o=l.events[l.events.length-1];return o&&o[1].type==="listItemIndent"&&o[2].sliceSerialize(o[1],!0).length===l.containerState.size?t(r):a(r)}}function Zv(e){e.exit(this.containerState.type)}function Kv(e,t,a){let l=this;return U(e,n,"listItemPrefixWhitespace",l.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function n(r){let o=l.events[l.events.length-1];return!q(r)&&o&&o[1].type==="listItemPrefixWhitespace"?t(r):a(r)}}var Xi={name:"setextUnderline",resolveTo:Jv,tokenize:Wv};function Jv(e,t){let a=e.length,l,n,r;for(;a--;)if(e[a][0]==="enter"){if(e[a][1].type==="content"){l=a;break}e[a][1].type==="paragraph"&&(n=a)}else e[a][1].type==="content"&&e.splice(a,1),!r&&e[a][1].type==="definition"&&(r=a);let o={type:"setextHeading",start:{...e[l][1].start},end:{...e[e.length-1][1].end}};return e[n][1].type="setextHeadingText",r?(e.splice(n,0,["enter",o,t]),e.splice(r+1,0,["exit",e[l][1],t]),e[l][1].end={...e[r][1].end}):e[l][1]=o,e.push(["exit",o,t]),e}function Wv(e,t,a){let l=this,n;return r;function r(s){let f=l.events.length,c;for(;f--;)if(l.events[f][1].type!=="lineEnding"&&l.events[f][1].type!=="linePrefix"&&l.events[f][1].type!=="content"){c=l.events[f][1].type==="paragraph";break}return!l.parser.lazy[l.now().line]&&(l.interrupt||c)?(e.enter("setextHeadingLine"),n=s,o(s)):a(s)}function o(s){return e.enter("setextHeadingLineSequence"),u(s)}function u(s){return s===n?(e.consume(s),u):(e.exit("setextHeadingLineSequence"),q(s)?U(e,i,"lineSuffix")(s):i(s))}function i(s){return s===null||_(s)?(e.exit("setextHeadingLine"),t(s)):a(s)}}var w1={tokenize:$v};function $v(e){let t=this,a=e.attempt(oa,l,e.attempt(this.parser.constructs.flowInitial,n,U(e,e.attempt(this.parser.constructs.flow,n,e.attempt(Td,n)),"linePrefix")));return a;function l(r){if(r===null){e.consume(r);return}return e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),t.currentConstruct=void 0,a}function n(r){if(r===null){e.consume(r);return}return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),t.currentConstruct=void 0,a}}var A1={resolveAll:E1()},T1=D1("string"),M1=D1("text");function D1(e){return{resolveAll:E1(e==="text"?eI:void 0),tokenize:t};function t(a){let l=this,n=this.parser.constructs[e],r=a.attempt(n,o,u);return o;function o(f){return s(f)?r(f):u(f)}function u(f){if(f===null){a.consume(f);return}return a.enter("data"),a.consume(f),i}function i(f){return s(f)?(a.exit("data"),r(f)):(a.consume(f),i)}function s(f){if(f===null)return!0;let c=n[f],d=-1;if(c)for(;++diI,contentInitial:()=>aI,disable:()=>sI,document:()=>tI,flow:()=>nI,flowInitial:()=>lI,insideSpan:()=>uI,string:()=>rI,text:()=>oI});var tI={42:nt,43:nt,45:nt,48:nt,49:nt,50:nt,51:nt,52:nt,53:nt,54:nt,55:nt,56:nt,57:nt,62:Ni},aI={91:Md},lI={[-2]:wo,[-1]:wo,32:wo},nI={35:Ed,42:Zl,45:[Xi,Zl],60:zd,61:Xi,95:Zl,96:qi,126:qi},rI={38:Hi,92:Ui},oI={[-5]:To,[-4]:To,[-3]:To,33:Od,38:Hi,42:Io,60:[wd,Rd],91:_d,92:[Dd,Ui],93:Ql,95:Io,96:Ad},uI={null:[Io,A1]},iI={null:[42,95]},sI={null:[]};function B1(e,t,a){let l={_bufferIndex:-1,_index:0,line:a&&a.line||1,column:a&&a.column||1,offset:a&&a.offset||0},n={},r=[],o=[],u=[],i=!0,s={attempt:O(A),check:O(R),consume:C,enter:w,exit:k,interrupt:O(R,{interrupt:!0})},f={code:null,containerState:{},defineSkip:h,events:[],now:I,parser:e,previous:null,sliceSerialize:x,sliceStream:S,write:p},c=t.tokenize.call(f,s),d;return t.resolveAll&&r.push(t),f;function p(N){return o=st(o,N),g(),o[o.length-1]!==null?[]:(v(t,0),f.events=fl(r,f.events,f),f.events)}function x(N,X){return cI(S(N),X)}function S(N){return fI(o,N)}function I(){let{_bufferIndex:N,_index:X,line:j,column:fe,offset:ve}=l;return{_bufferIndex:N,_index:X,line:j,column:fe,offset:ve}}function h(N){n[N.line]=N.column,$()}function g(){let N;for(;l._index-1){let u=o[0];typeof u=="string"?o[0]=u.slice(l):o.shift()}r>0&&o.push(e[n].slice(0,r))}return o}function cI(e,t){let a=-1,l=[],n;for(;++a0){let ft=V.tokenStack[V.tokenStack.length-1];(ft[1]||O1).call(V,void 0,ft[0])}for(B.position={start:cl(T.length>0?T[0][1].start:{line:1,column:1,offset:0}),end:cl(T.length>0?T[T.length-2][1].end:{line:1,column:1,offset:0})},ie=-1;++ie0&&(l.className=["language-"+n[0]]);let r={type:"element",tagName:"code",properties:l,children:[{type:"text",value:a}]};return t.meta&&(r.data={meta:t.meta}),e.patch(t,r),r=e.applyData(t,r),r={type:"element",tagName:"pre",properties:{},children:[r]},e.patch(t,r),r}function F1(e,t){let a={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function P1(e,t){let a={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function G1(e,t){let a=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",l=String(t.identifier).toUpperCase(),n=Ft(l.toLowerCase()),r=e.footnoteOrder.indexOf(l),o,u=e.footnoteCounts.get(l);u===void 0?(u=0,e.footnoteOrder.push(l),o=e.footnoteOrder.length):o=r+1,u+=1,e.footnoteCounts.set(l,u);let i={type:"element",tagName:"a",properties:{href:"#"+a+"fn-"+n,id:a+"fnref-"+n+(u>1?"-"+u:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(o)}]};e.patch(t,i);let s={type:"element",tagName:"sup",properties:{},children:[i]};return e.patch(t,s),e.applyData(t,s)}function V1(e,t){let a={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function j1(e,t){if(e.options.allowDangerousHtml){let a={type:"raw",value:t.value};return e.patch(t,a),e.applyData(t,a)}}function Qi(e,t){let a=t.referenceType,l="]";if(a==="collapsed"?l+="[]":a==="full"&&(l+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+l}];let n=e.all(t),r=n[0];r&&r.type==="text"?r.value="["+r.value:n.unshift({type:"text",value:"["});let o=n[n.length-1];return o&&o.type==="text"?o.value+=l:n.push({type:"text",value:l}),n}function X1(e,t){let a=String(t.identifier).toUpperCase(),l=e.definitionById.get(a);if(!l)return Qi(e,t);let n={src:Ft(l.url||""),alt:t.alt};l.title!==null&&l.title!==void 0&&(n.title=l.title);let r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)}function Y1(e,t){let a={src:Ft(t.url)};t.alt!==null&&t.alt!==void 0&&(a.alt=t.alt),t.title!==null&&t.title!==void 0&&(a.title=t.title);let l={type:"element",tagName:"img",properties:a,children:[]};return e.patch(t,l),e.applyData(t,l)}function Q1(e,t){let a={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,a);let l={type:"element",tagName:"code",properties:{},children:[a]};return e.patch(t,l),e.applyData(t,l)}function Z1(e,t){let a=String(t.identifier).toUpperCase(),l=e.definitionById.get(a);if(!l)return Qi(e,t);let n={href:Ft(l.url||"")};l.title!==null&&l.title!==void 0&&(n.title=l.title);let r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function K1(e,t){let a={href:Ft(t.url)};t.title!==null&&t.title!==void 0&&(a.title=t.title);let l={type:"element",tagName:"a",properties:a,children:e.all(t)};return e.patch(t,l),e.applyData(t,l)}function J1(e,t,a){let l=e.all(t),n=a?gI(a):W1(t),r={},o=[];if(typeof t.checked=="boolean"){let f=l[0],c;f&&f.type==="element"&&f.tagName==="p"?c=f:(c={type:"element",tagName:"p",properties:{},children:[]},l.unshift(c)),c.children.length>0&&c.children.unshift({type:"text",value:" "}),c.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),r.className=["task-list-item"]}let u=-1;for(;++u1}function $1(e,t){let a={},l=e.all(t),n=-1;for(typeof t.start=="number"&&t.start!==1&&(a.start=t.start);++n0){let o={type:"element",tagName:"tbody",properties:{},children:e.wrap(a,!0)},u=$n(t.children[1]),i=Bi(t.children[t.children.length-1]);u&&i&&(o.position={start:u,end:i}),n.push(o)}let r={type:"element",tagName:"table",properties:{},children:e.wrap(n,!0)};return e.patch(t,r),e.applyData(t,r)}function nL(e,t,a){let l=a?a.children:void 0,r=(l?l.indexOf(t):1)===0?"th":"td",o=a&&a.type==="table"?a.align:void 0,u=o?o.length:t.children.length,i=-1,s=[];for(;++i0,!0),l[0]),n=l.index+l[0].length,l=a.exec(t);return r.push(oL(t.slice(n),n>0,!1)),r.join("")}function oL(e,t,a){let l=0,n=e.length;if(t){let r=e.codePointAt(l);for(;r===9||r===32;)l++,r=e.codePointAt(l)}if(a){let r=e.codePointAt(n-1);for(;r===9||r===32;)n--,r=e.codePointAt(n-1)}return n>l?e.slice(l,n):""}function iL(e,t){let a={type:"text",value:uL(String(t.value))};return e.patch(t,a),e.applyData(t,a)}function sL(e,t){let a={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,a),e.applyData(t,a)}var fL={blockquote:U1,break:H1,code:q1,delete:F1,emphasis:P1,footnoteReference:G1,heading:V1,html:j1,imageReference:X1,image:Y1,inlineCode:Q1,linkReference:Z1,link:K1,listItem:J1,list:$1,paragraph:eL,root:tL,strong:aL,table:lL,tableCell:rL,tableRow:nL,text:iL,thematicBreak:sL,toml:Zi,yaml:Zi,definition:Zi,footnoteDefinition:Zi};function Zi(){}var gL=typeof self=="object"?self:globalThis,cL=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new gL[e](t)},SI=(e,t)=>{let a=(n,r)=>(e.set(r,n),n),l=n=>{if(e.has(n))return e.get(n);let[r,o]=t[n];switch(r){case 0:case-1:return a(o,n);case 1:{let u=a([],n);for(let i of o)u.push(l(i));return u}case 2:{let u=a({},n);for(let[i,s]of o)u[l(i)]=l(s);return u}case 3:return a(new Date(o),n);case 4:{let{source:u,flags:i}=o;return a(new RegExp(u,i),n)}case 5:{let u=a(new Map,n);for(let[i,s]of o)u.set(l(i),l(s));return u}case 6:{let u=a(new Set,n);for(let i of o)u.add(l(i));return u}case 7:{let{name:u,message:i}=o;return a(typeof gL[u]=="function"?cL(u,i):new Error(i),n)}case 8:return a(BigInt(o),n);case"BigInt":return a(Object(BigInt(o)),n);case"ArrayBuffer":return a(new Uint8Array(o).buffer,o);case"DataView":{let{buffer:u}=new Uint8Array(o);return a(new DataView(u),o)}}return a(cL(r,o),n)};return l},Vd=e=>SI(new Map,e)(0);var Kl="",{toString:bI}={},{keys:kI}=Object,Mo=e=>{let t=typeof e;if(t!=="object"||!e)return[0,t];let a=bI.call(e).slice(8,-1);switch(a){case"Array":return[1,Kl];case"Object":return[2,Kl];case"Date":return[3,Kl];case"RegExp":return[4,Kl];case"Map":return[5,Kl];case"Set":return[6,Kl];case"DataView":return[1,a]}return a.includes("Array")?[1,a]:e instanceof Error?[7,e.name||"Error"]:[2,a]},Ji=([e,t])=>e===0&&(t==="function"||t==="symbol"),CI=(e,t,a,l)=>{let n=(o,u)=>{let i=l.push(o)-1;return a.set(u,i),i},r=o=>{if(a.has(o))return a.get(o);let[u,i]=Mo(o);switch(u){case 0:{let f=o;switch(i){case"bigint":u=8,f=o.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+i);f=null;break;case"undefined":return n([-1],o)}return n([u,f],o)}case 1:{if(i){let d=o;return i==="DataView"?d=new Uint8Array(o.buffer):i==="ArrayBuffer"&&(d=new Uint8Array(o)),n([i,[...d]],o)}let f=[],c=n([u,f],o);for(let d of o)f.push(r(d));return c}case 2:{if(i)switch(i){case"BigInt":return n([i,o.toString()],o);case"Boolean":case"Number":case"String":return n([i,o.valueOf()],o)}if(t&&"toJSON"in o)return r(o.toJSON());let f=[],c=n([u,f],o);for(let d of kI(o))(e||!Ji(Mo(o[d])))&&f.push([r(d),r(o[d])]);return c}case 3:return n([u,isNaN(o.getTime())?Kl:o.toISOString()],o);case 4:{let{source:f,flags:c}=o;return n([u,{source:f,flags:c}],o)}case 5:{let f=[],c=n([u,f],o);for(let[d,p]of o)(e||!(Ji(Mo(d))||Ji(Mo(p))))&&f.push([r(d),r(p)]);return c}case 6:{let f=[],c=n([u,f],o);for(let d of o)(e||!Ji(Mo(d)))&&f.push(r(d));return c}}let{message:s}=o;return n([u,{name:i,message:s}],o)};return r},jd=(e,{json:t,lossy:a}={})=>{let l=[];return CI(!(t||a),!!t,new Map,l)(e),l};var tr=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?Vd(jd(e,t)):structuredClone(e):(e,t)=>Vd(jd(e,t));function vI(e,t){let a=[{type:"text",value:"\u21A9"}];return t>1&&a.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),a}function II(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function xL(e){let t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",a=e.options.footnoteBackContent||vI,l=e.options.footnoteBackLabel||II,n=e.options.footnoteLabel||"Footnotes",r=e.options.footnoteLabelTagName||"h2",o=e.options.footnoteLabelProperties||{className:["sr-only"]},u=[],i=-1;for(;++i0&&x.push({type:"text",value:" "});let g=typeof a=="string"?a:a(i,p);typeof g=="string"&&(g={type:"text",value:g}),x.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+d+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof l=="string"?l:l(i,p),className:["data-footnote-backref"]},children:Array.isArray(g)?g:[g]})}let I=f[f.length-1];if(I&&I.type==="element"&&I.tagName==="p"){let g=I.children[I.children.length-1];g&&g.type==="text"?g.value+=" ":I.children.push({type:"text",value:" "}),I.children.push(...x)}else f.push(...x);let h={type:"element",tagName:"li",properties:{id:t+"fn-"+d},children:e.wrap(f,!0)};e.patch(s,h),u.push(h)}if(u.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:r,properties:{...tr(o),id:"footnote-label"},children:[{type:"text",value:n}]},{type:"text",value:` +`},{type:"element",tagName:"ol",properties:{},children:e.wrap(u,!0)},{type:"text",value:` +`}]}}var dl=(function(e){if(e==null)return MI;if(typeof e=="function")return Wi(e);if(typeof e=="object")return Array.isArray(e)?wI(e):AI(e);if(typeof e=="string")return TI(e);throw new Error("Expected function, string, or object as test")});function wI(e){let t=[],a=-1;for(;++a":""))+")"})}return d;function d(){let p=yL,x,S,I;if((!t||r(i,s,f[f.length-1]||void 0))&&(p=EI(a(i,f)),p[0]===Jl))return p;if("children"in i&&i.children){let h=i;if(h.children&&p[0]!==es)for(S=(l?h.children.length:-1)+o,I=f.concat(h);S>-1&&S0&&a.push({type:"text",value:` +`}),a}function LL(e){let t=0,a=e.charCodeAt(t);for(;a===9||a===32;)t++,a=e.charCodeAt(t);return e.slice(t)}function ts(e,t){let a=SL(e,t),l=a.one(e,void 0),n=xL(a),r=Array.isArray(l)?{type:"root",children:l}:l||{type:"root",children:[]};return n&&("children"in r,r.children.push({type:"text",value:` +`},n)),r}function as(e,t){return e&&"run"in e?async function(a,l){let n=ts(a,{file:l,...t});await e.run(n,l)}:function(a,l){return ts(a,{file:l,...e||t})}}function Yd(e){if(e)throw e}var rs=Jt(ML(),1);function Eo(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function Qd(){let e=[],t={run:a,use:l};return t;function a(...n){let r=-1,o=n.pop();if(typeof o!="function")throw new TypeError("Expected function as last argument, not "+o);u(null,...n);function u(i,...s){let f=e[++r],c=-1;if(i){o(i);return}for(;++co.length,i;u&&o.push(n);try{i=e.apply(this,o)}catch(s){let f=s;if(u&&a)throw f;return n(f)}u||(i&&i.then&&typeof i.then=="function"?i.then(r,n):i instanceof Error?n(i):r(i))}function n(o,...u){a||(a=!0,t(o,...u))}function r(o){n(null,o)}}var Zt={basename:NI,dirname:UI,extname:HI,join:qI,sep:"/"};function NI(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Bo(e);let a=0,l=-1,n=e.length,r;if(t===void 0||t.length===0||t.length>e.length){for(;n--;)if(e.codePointAt(n)===47){if(r){a=n+1;break}}else l<0&&(r=!0,l=n+1);return l<0?"":e.slice(a,l)}if(t===e)return"";let o=-1,u=t.length-1;for(;n--;)if(e.codePointAt(n)===47){if(r){a=n+1;break}}else o<0&&(r=!0,o=n+1),u>-1&&(e.codePointAt(n)===t.codePointAt(u--)?u<0&&(l=n):(u=-1,l=o));return a===l?l=o:l<0&&(l=e.length),e.slice(a,l)}function UI(e){if(Bo(e),e.length===0)return".";let t=-1,a=e.length,l;for(;--a;)if(e.codePointAt(a)===47){if(l){t=a;break}}else l||(l=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function HI(e){Bo(e);let t=e.length,a=-1,l=0,n=-1,r=0,o;for(;t--;){let u=e.codePointAt(t);if(u===47){if(o){l=t+1;break}continue}a<0&&(o=!0,a=t+1),u===46?n<0?n=t:r!==1&&(r=1):n>-1&&(r=-1)}return n<0||a<0||r===0||r===1&&n===a-1&&n===l+1?"":e.slice(n,a)}function qI(...e){let t=-1,a;for(;++t0&&e.codePointAt(e.length-1)===47&&(a+="/"),t?"/"+a:a}function PI(e,t){let a="",l=0,n=-1,r=0,o=-1,u,i;for(;++o<=e.length;){if(o2){if(i=a.lastIndexOf("/"),i!==a.length-1){i<0?(a="",l=0):(a=a.slice(0,i),l=a.length-1-a.lastIndexOf("/")),n=o,r=0;continue}}else if(a.length>0){a="",l=0,n=o,r=0;continue}}t&&(a=a.length>0?a+"/..":"..",l=2)}else a.length>0?a+="/"+e.slice(n+1,o):a=e.slice(n+1,o),l=o-n-1;n=o,r=0}else u===46&&r>-1?r++:r=-1}return a}function Bo(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}var EL={cwd:GI};function GI(){return"/"}function ar(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function BL(e){if(typeof e=="string")e=new URL(e);else if(!ar(e)){let t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){let t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return VI(e)}function VI(e){if(e.hostname!==""){let l=new TypeError('File URL host must be "localhost" or empty on darwin');throw l.code="ERR_INVALID_FILE_URL_HOST",l}let t=e.pathname,a=-1;for(;++a0){let[p,...x]=f,S=l[d][1];Eo(S)&&Eo(p)&&(p=(0,rs.default)(!0,S,p)),l[d]=[s,p,...x]}}}},ap=new tp().freeze();function Wd(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function $d(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function ep(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function OL(e){if(!Eo(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function _L(e,t,a){if(!a)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function ns(e){return YI(e)?e:new $l(e)}function YI(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function QI(e){return typeof e=="string"||ZI(e)}function ZI(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}var KI="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",NL=[],UL={allowDangerousHtml:!0},JI=/^(https?|ircs?|mailto|xmpp)$/i,WI=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function lp(e){let t=$I(e),a=ew(e);return tw(t.runSync(t.parse(a),a),e)}function $I(e){let t=e.rehypePlugins||NL,a=e.remarkPlugins||NL,l=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...UL}:UL;return ap().use(Yi).use(a).use(as,l).use(t)}function ew(e){let t=e.children||"",a=new $l;return typeof t=="string"?a.value=t:(""+t,void 0),a}function tw(e,t){let a=t.allowedElements,l=t.allowElement,n=t.components,r=t.disallowedElements,o=t.skipHtml,u=t.unwrapDisallowed,i=t.urlTransform||qL;for(let f of WI)Object.hasOwn(t,f.from)&&(""+f.from+(f.to?"use `"+f.to+"` instead":"remove it")+KI+f.id,void 0);return a&&r&&void 0,Wl(e,s),Cd(e,{Fragment:lr.Fragment,components:n,ignoreInvalidStyle:!0,jsx:lr.jsx,jsxs:lr.jsxs,passKeys:!0,passNode:!0});function s(f,c,d){if(f.type==="raw"&&d&&typeof c=="number")return o?d.children.splice(c,1):d.children[c]={type:"text",value:f.value},c;if(f.type==="element"){let p;for(p in Co)if(Object.hasOwn(Co,p)&&Object.hasOwn(f.properties,p)){let x=f.properties[p],S=Co[p];(S===null||S.includes(f.tagName))&&(f.properties[p]=i(String(x||""),p,f))}}if(f.type==="element"){let p=a?!a.includes(f.tagName):r?r.includes(f.tagName):!1;if(!p&&l&&typeof c=="number"&&(p=!l(f,c,d)),p&&d&&typeof c=="number")return u&&f.children?d.children.splice(c,1,...f.children):d.children.splice(c,1),c}}}function qL(e){let t=e.indexOf(":"),a=e.indexOf("?"),l=e.indexOf("#"),n=e.indexOf("/");return t===-1||n!==-1&&t>n||a!==-1&&t>a||l!==-1&&t>l||JI.test(e.slice(0,t))?e:""}function np(e,t){let a=String(e);if(typeof t!="string")throw new TypeError("Expected character");let l=0,n=a.indexOf(t);for(;n!==-1;)l++,n=a.indexOf(t,n+t.length);return l}function rp(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function op(e,t,a){let n=dl((a||{}).ignore||[]),r=aw(t),o=-1;for(;++o0?{type:"text",value:k}:void 0),k===!1?d.lastIndex=C+1:(x!==C&&g.push({type:"text",value:s.value.slice(x,C)}),Array.isArray(k)?g.push(...k):k&&g.push(k),x=C+y[0].length,h=!0),!d.global)break;y=d.exec(s.value)}return h?(x?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let a=t[0],l=a.indexOf(")"),n=np(e,"("),r=np(e,")");for(;l!==-1&&n>r;)e+=a.slice(0,l+1),a=a.slice(l+1),l=a.indexOf(")"),r++;return[e,a]}function FL(e,t){let a=e.input.charCodeAt(e.index-1);return(e.index===0||ra(a)||Xl(a))&&(!t||a!==47)}PL.peek=Cw;function hw(){this.buffer()}function gw(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function xw(){this.buffer()}function yw(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function Lw(e){let t=this.resume(),a=this.stack[this.stack.length-1];a.type,a.identifier=lt(this.sliceSerialize(e)).toLowerCase(),a.label=t}function Sw(e){this.exit(e)}function bw(e){let t=this.resume(),a=this.stack[this.stack.length-1];a.type,a.identifier=lt(this.sliceSerialize(e)).toLowerCase(),a.label=t}function kw(e){this.exit(e)}function Cw(){return"["}function PL(e,t,a,l){let n=a.createTracker(l),r=n.move("[^"),o=a.enter("footnoteReference"),u=a.enter("reference");return r+=n.move(a.safe(a.associationId(e),{after:"]",before:r})),u(),o(),r+=n.move("]"),r}function dp(){return{enter:{gfmFootnoteCallString:hw,gfmFootnoteCall:gw,gfmFootnoteDefinitionLabelString:xw,gfmFootnoteDefinition:yw},exit:{gfmFootnoteCallString:Lw,gfmFootnoteCall:Sw,gfmFootnoteDefinitionLabelString:bw,gfmFootnoteDefinition:kw}}}function pp(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:a,footnoteReference:PL},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function a(l,n,r,o){let u=r.createTracker(o),i=u.move("[^"),s=r.enter("footnoteDefinition"),f=r.enter("label");return i+=u.move(r.safe(r.associationId(l),{before:i,after:"]"})),f(),i+=u.move("]:"),l.children&&l.children.length>0&&(u.shift(4),i+=u.move((t?` +`:" ")+r.indentLines(r.containerFlow(l,u.current()),t?GL:vw))),s(),i}}function vw(e,t,a){return t===0?e:GL(e,t,a)}function GL(e,t,a){return(a?"":" ")+e}var Iw=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];VL.peek=Tw;function mp(){return{canContainEols:["delete"],enter:{strikethrough:ww},exit:{strikethrough:Aw}}}function hp(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Iw}],handlers:{delete:VL}}}function ww(e){this.enter({type:"delete",children:[]},e)}function Aw(e){this.exit(e)}function VL(e,t,a,l){let n=a.createTracker(l),r=a.enter("strikethrough"),o=n.move("~~");return o+=a.containerPhrasing(e,{...n.current(),before:o,after:"~"}),o+=n.move("~~"),r(),o}function Tw(){return"~"}function Mw(e){return e.length}function XL(e,t){let a=t||{},l=(a.align||[]).concat(),n=a.stringLength||Mw,r=[],o=[],u=[],i=[],s=0,f=-1;for(;++fs&&(s=e[f].length);++hi[h])&&(i[h]=y)}S.push(g)}o[f]=S,u[f]=I}let c=-1;if(typeof l=="object"&&"length"in l)for(;++ci[c]&&(i[c]=g),p[c]=g),d[c]=y}o.splice(1,0,d),u.splice(1,0,p),f=-1;let x=[];for(;++f "),r.shift(2);let o=a.indentLines(a.containerFlow(e,r.current()),Ew);return n(),o}function Ew(e,t,a){return">"+(a?"":" ")+e}function ZL(e,t){return QL(e,t.inConstruct,!0)&&!QL(e,t.notInConstruct,!1)}function QL(e,t,a){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return a;let l=-1;for(;++lo&&(o=r):r=1,n=l+t.length,l=a.indexOf(t,n);return o}function JL(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function WL(e){let t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function $L(e,t,a,l){let n=WL(a),r=e.value||"",o=n==="`"?"GraveAccent":"Tilde";if(JL(e,a)){let c=a.enter("codeIndented"),d=a.indentLines(r,Bw);return c(),d}let u=a.createTracker(l),i=n.repeat(Math.max(KL(r,n)+1,3)),s=a.enter("codeFenced"),f=u.move(i);if(e.lang){let c=a.enter(`codeFencedLang${o}`);f+=u.move(a.safe(e.lang,{before:f,after:" ",encode:["`"],...u.current()})),c()}if(e.lang&&e.meta){let c=a.enter(`codeFencedMeta${o}`);f+=u.move(" "),f+=u.move(a.safe(e.meta,{before:f,after:` +`,encode:["`"],...u.current()})),c()}return f+=u.move(` +`),r&&(f+=u.move(r+` +`)),f+=u.move(i),s(),f}function Bw(e,t,a){return(a?"":" ")+e}function nr(e){let t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function eS(e,t,a,l){let n=nr(a),r=n==='"'?"Quote":"Apostrophe",o=a.enter("definition"),u=a.enter("label"),i=a.createTracker(l),s=i.move("[");return s+=i.move(a.safe(a.associationId(e),{before:s,after:"]",...i.current()})),s+=i.move("]: "),u(),!e.url||/[\0- \u007F]/.test(e.url)?(u=a.enter("destinationLiteral"),s+=i.move("<"),s+=i.move(a.safe(e.url,{before:s,after:">",...i.current()})),s+=i.move(">")):(u=a.enter("destinationRaw"),s+=i.move(a.safe(e.url,{before:s,after:e.title?" ":` +`,...i.current()}))),u(),e.title&&(u=a.enter(`title${r}`),s+=i.move(" "+n),s+=i.move(a.safe(e.title,{before:s,after:n,...i.current()})),s+=i.move(n),u()),o(),s}function tS(e){let t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function pl(e){return"&#x"+e.toString(16).toUpperCase()+";"}function rr(e,t,a){let l=Ea(e),n=Ea(t);return l===void 0?n===void 0?a==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:n===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:l===1?n===void 0?{inside:!1,outside:!1}:n===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:n===void 0?{inside:!1,outside:!1}:n===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}xp.peek=zw;function xp(e,t,a,l){let n=tS(a),r=a.enter("emphasis"),o=a.createTracker(l),u=o.move(n),i=o.move(a.containerPhrasing(e,{after:n,before:u,...o.current()})),s=i.charCodeAt(0),f=rr(l.before.charCodeAt(l.before.length-1),s,n);f.inside&&(i=pl(s)+i.slice(1));let c=i.charCodeAt(i.length-1),d=rr(l.after.charCodeAt(0),c,n);d.inside&&(i=i.slice(0,-1)+pl(c));let p=o.move(n);return r(),a.attentionEncodeSurroundingInfo={after:d.outside,before:f.outside},u+i+p}function zw(e,t,a){return a.options.emphasis||"*"}function aS(e,t){let a=!1;return Wl(e,function(l){if("value"in l&&/\r?\n|\r/.test(l.value)||l.type==="break")return a=!0,Jl}),!!((!e.depth||e.depth<3)&&Vl(e)&&(t.options.setext||a))}function lS(e,t,a,l){let n=Math.max(Math.min(6,e.depth||1),1),r=a.createTracker(l);if(aS(e,a)){let f=a.enter("headingSetext"),c=a.enter("phrasing"),d=a.containerPhrasing(e,{...r.current(),before:` +`,after:` +`});return c(),f(),d+` +`+(n===1?"=":"-").repeat(d.length-(Math.max(d.lastIndexOf("\r"),d.lastIndexOf(` +`))+1))}let o="#".repeat(n),u=a.enter("headingAtx"),i=a.enter("phrasing");r.move(o+" ");let s=a.containerPhrasing(e,{before:"# ",after:` +`,...r.current()});return/^[\t ]/.test(s)&&(s=pl(s.charCodeAt(0))+s.slice(1)),s=s?o+" "+s:o,a.options.closeAtx&&(s+=" "+o),i(),u(),s}yp.peek=Rw;function yp(e){return e.value||""}function Rw(){return"<"}Lp.peek=Ow;function Lp(e,t,a,l){let n=nr(a),r=n==='"'?"Quote":"Apostrophe",o=a.enter("image"),u=a.enter("label"),i=a.createTracker(l),s=i.move("![");return s+=i.move(a.safe(e.alt,{before:s,after:"]",...i.current()})),s+=i.move("]("),u(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(u=a.enter("destinationLiteral"),s+=i.move("<"),s+=i.move(a.safe(e.url,{before:s,after:">",...i.current()})),s+=i.move(">")):(u=a.enter("destinationRaw"),s+=i.move(a.safe(e.url,{before:s,after:e.title?" ":")",...i.current()}))),u(),e.title&&(u=a.enter(`title${r}`),s+=i.move(" "+n),s+=i.move(a.safe(e.title,{before:s,after:n,...i.current()})),s+=i.move(n),u()),s+=i.move(")"),o(),s}function Ow(){return"!"}Sp.peek=_w;function Sp(e,t,a,l){let n=e.referenceType,r=a.enter("imageReference"),o=a.enter("label"),u=a.createTracker(l),i=u.move("!["),s=a.safe(e.alt,{before:i,after:"]",...u.current()});i+=u.move(s+"]["),o();let f=a.stack;a.stack=[],o=a.enter("reference");let c=a.safe(a.associationId(e),{before:i,after:"]",...u.current()});return o(),a.stack=f,r(),n==="full"||!s||s!==c?i+=u.move(c+"]"):n==="shortcut"?i=i.slice(0,-1):i+=u.move("]"),i}function _w(){return"!"}bp.peek=Nw;function bp(e,t,a){let l=e.value||"",n="`",r=-1;for(;new RegExp("(^|[^`])"+n+"([^`]|$)").test(l);)n+="`";for(/[^ \r\n]/.test(l)&&(/^[ \r\n]/.test(l)&&/[ \r\n]$/.test(l)||/^`|`$/.test(l))&&(l=" "+l+" ");++r\u007F]/.test(e.url))}Cp.peek=Uw;function Cp(e,t,a,l){let n=nr(a),r=n==='"'?"Quote":"Apostrophe",o=a.createTracker(l),u,i;if(kp(e,a)){let f=a.stack;a.stack=[],u=a.enter("autolink");let c=o.move("<");return c+=o.move(a.containerPhrasing(e,{before:c,after:">",...o.current()})),c+=o.move(">"),u(),a.stack=f,c}u=a.enter("link"),i=a.enter("label");let s=o.move("[");return s+=o.move(a.containerPhrasing(e,{before:s,after:"](",...o.current()})),s+=o.move("]("),i(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(i=a.enter("destinationLiteral"),s+=o.move("<"),s+=o.move(a.safe(e.url,{before:s,after:">",...o.current()})),s+=o.move(">")):(i=a.enter("destinationRaw"),s+=o.move(a.safe(e.url,{before:s,after:e.title?" ":")",...o.current()}))),i(),e.title&&(i=a.enter(`title${r}`),s+=o.move(" "+n),s+=o.move(a.safe(e.title,{before:s,after:n,...o.current()})),s+=o.move(n),i()),s+=o.move(")"),u(),s}function Uw(e,t,a){return kp(e,a)?"<":"["}vp.peek=Hw;function vp(e,t,a,l){let n=e.referenceType,r=a.enter("linkReference"),o=a.enter("label"),u=a.createTracker(l),i=u.move("["),s=a.containerPhrasing(e,{before:i,after:"]",...u.current()});i+=u.move(s+"]["),o();let f=a.stack;a.stack=[],o=a.enter("reference");let c=a.safe(a.associationId(e),{before:i,after:"]",...u.current()});return o(),a.stack=f,r(),n==="full"||!s||s!==c?i+=u.move(c+"]"):n==="shortcut"?i=i.slice(0,-1):i+=u.move("]"),i}function Hw(){return"["}function or(e){let t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function nS(e){let t=or(e),a=e.options.bulletOther;if(!a)return t==="*"?"-":"*";if(a!=="*"&&a!=="+"&&a!=="-")throw new Error("Cannot serialize items with `"+a+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(a===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+a+"`) to be different");return a}function rS(e){let t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function os(e){let t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function oS(e,t,a,l){let n=a.enter("list"),r=a.bulletCurrent,o=e.ordered?rS(a):or(a),u=e.ordered?o==="."?")":".":nS(a),i=t&&a.bulletLastUsed?o===a.bulletLastUsed:!1;if(!e.ordered){let f=e.children?e.children[0]:void 0;if((o==="*"||o==="-")&&f&&(!f.children||!f.children[0])&&a.stack[a.stack.length-1]==="list"&&a.stack[a.stack.length-2]==="listItem"&&a.stack[a.stack.length-3]==="list"&&a.stack[a.stack.length-4]==="listItem"&&a.indexStack[a.indexStack.length-1]===0&&a.indexStack[a.indexStack.length-2]===0&&a.indexStack[a.indexStack.length-3]===0&&(i=!0),os(a)===o&&f){let c=-1;for(;++c-1?t.start:1)+(a.options.incrementListMarker===!1?0:t.children.indexOf(e))+r);let o=r.length+1;(n==="tab"||n==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(o=Math.ceil(o/4)*4);let u=a.createTracker(l);u.move(r+" ".repeat(o-r.length)),u.shift(o);let i=a.enter("listItem"),s=a.indentLines(a.containerFlow(e,u.current()),f);return i(),s;function f(c,d,p){return d?(p?"":" ".repeat(o))+c:(p?r:r+" ".repeat(o-r.length))+c}}function sS(e,t,a,l){let n=a.enter("paragraph"),r=a.enter("phrasing"),o=a.containerPhrasing(e,l);return r(),n(),o}var Ip=dl(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function fS(e,t,a,l){return(e.children.some(function(o){return Ip(o)})?a.containerPhrasing:a.containerFlow).call(a,e,l)}function cS(e){let t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}wp.peek=qw;function wp(e,t,a,l){let n=cS(a),r=a.enter("strong"),o=a.createTracker(l),u=o.move(n+n),i=o.move(a.containerPhrasing(e,{after:n,before:u,...o.current()})),s=i.charCodeAt(0),f=rr(l.before.charCodeAt(l.before.length-1),s,n);f.inside&&(i=pl(s)+i.slice(1));let c=i.charCodeAt(i.length-1),d=rr(l.after.charCodeAt(0),c,n);d.inside&&(i=i.slice(0,-1)+pl(c));let p=o.move(n+n);return r(),a.attentionEncodeSurroundingInfo={after:d.outside,before:f.outside},u+i+p}function qw(e,t,a){return a.options.strong||"*"}function dS(e,t,a,l){return a.safe(e.value,l)}function pS(e){let t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function mS(e,t,a){let l=(os(a)+(a.options.ruleSpaces?" ":"")).repeat(pS(a));return a.options.ruleSpaces?l.slice(0,-1):l}var zo={blockquote:YL,break:gp,code:$L,definition:eS,emphasis:xp,hardBreak:gp,heading:lS,html:yp,image:Lp,imageReference:Sp,inlineCode:bp,link:Cp,linkReference:vp,list:oS,listItem:iS,paragraph:sS,root:fS,strong:wp,text:dS,thematicBreak:mS};function Tp(){return{enter:{table:Fw,tableData:hS,tableHeader:hS,tableRow:Gw},exit:{codeText:Vw,table:Pw,tableData:Ap,tableHeader:Ap,tableRow:Ap}}}function Fw(e){let t=e._align;this.enter({type:"table",align:t.map(function(a){return a==="none"?null:a}),children:[]},e),this.data.inTable=!0}function Pw(e){this.exit(e),this.data.inTable=void 0}function Gw(e){this.enter({type:"tableRow",children:[]},e)}function Ap(e){this.exit(e)}function hS(e){this.enter({type:"tableCell",children:[]},e)}function Vw(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,jw));let a=this.stack[this.stack.length-1];a.type,a.value=t,this.exit(e)}function jw(e,t){return t==="|"?t:e}function Mp(e){let t=e||{},a=t.tableCellPadding,l=t.tablePipeAlign,n=t.stringLength,r=a?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` +`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:d,table:o,tableCell:i,tableRow:u}};function o(p,x,S,I){return s(f(p,S,I),p.align)}function u(p,x,S,I){let h=c(p,S,I),g=s([h]);return g.slice(0,g.indexOf(` +`))}function i(p,x,S,I){let h=S.enter("tableCell"),g=S.enter("phrasing"),y=S.containerPhrasing(p,{...I,before:r,after:r});return g(),h(),y}function s(p,x){return XL(p,{align:x,alignDelimiters:l,padding:a,stringLength:n})}function f(p,x,S){let I=p.children,h=-1,g=[],y=x.enter("table");for(;++h0&&!a&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),a}var n2={tokenize:c2,partial:!0};function Np(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:i2,continuation:{tokenize:s2},exit:f2}},text:{91:{name:"gfmFootnoteCall",tokenize:u2},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:r2,resolveTo:o2}}}}function r2(e,t,a){let l=this,n=l.events.length,r=l.parser.gfmFootnotes||(l.parser.gfmFootnotes=[]),o;for(;n--;){let i=l.events[n][1];if(i.type==="labelImage"){o=i;break}if(i.type==="gfmFootnoteCall"||i.type==="labelLink"||i.type==="label"||i.type==="image"||i.type==="link")break}return u;function u(i){if(!o||!o._balanced)return a(i);let s=lt(l.sliceSerialize({start:o.end,end:l.now()}));return s.codePointAt(0)!==94||!r.includes(s.slice(1))?a(i):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(i),e.exit("gfmFootnoteCallLabelMarker"),t(i))}}function o2(e,t){let a=e.length,l;for(;a--;)if(e[a][1].type==="labelImage"&&e[a][0]==="enter"){l=e[a][1];break}e[a+1][1].type="data",e[a+3][1].type="gfmFootnoteCallLabelMarker";let n={type:"gfmFootnoteCall",start:Object.assign({},e[a+3][1].start),end:Object.assign({},e[e.length-1][1].end)},r={type:"gfmFootnoteCallMarker",start:Object.assign({},e[a+3][1].end),end:Object.assign({},e[a+3][1].end)};r.end.column++,r.end.offset++,r.end._bufferIndex++;let o={type:"gfmFootnoteCallString",start:Object.assign({},r.end),end:Object.assign({},e[e.length-1][1].start)},u={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},i=[e[a+1],e[a+2],["enter",n,t],e[a+3],e[a+4],["enter",r,t],["exit",r,t],["enter",o,t],["enter",u,t],["exit",u,t],["exit",o,t],e[e.length-2],e[e.length-1],["exit",n,t]];return e.splice(a,e.length-a+1,...i),e}function u2(e,t,a){let l=this,n=l.parser.gfmFootnotes||(l.parser.gfmFootnotes=[]),r=0,o;return u;function u(c){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),i}function i(c){return c!==94?a(c):(e.enter("gfmFootnoteCallMarker"),e.consume(c),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",s)}function s(c){if(r>999||c===93&&!o||c===null||c===91||W(c))return a(c);if(c===93){e.exit("chunkString");let d=e.exit("gfmFootnoteCallString");return n.includes(lt(l.sliceSerialize(d)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):a(c)}return W(c)||(o=!0),r++,e.consume(c),c===92?f:s}function f(c){return c===91||c===92||c===93?(e.consume(c),r++,s):s(c)}}function i2(e,t,a){let l=this,n=l.parser.gfmFootnotes||(l.parser.gfmFootnotes=[]),r,o=0,u;return i;function i(x){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),s}function s(x){return x===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",f):a(x)}function f(x){if(o>999||x===93&&!u||x===null||x===91||W(x))return a(x);if(x===93){e.exit("chunkString");let S=e.exit("gfmFootnoteDefinitionLabelString");return r=lt(l.sliceSerialize(S)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(x),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),d}return W(x)||(u=!0),o++,e.consume(x),x===92?c:f}function c(x){return x===91||x===92||x===93?(e.consume(x),o++,f):f(x)}function d(x){return x===58?(e.enter("definitionMarker"),e.consume(x),e.exit("definitionMarker"),n.includes(r)||n.push(r),U(e,p,"gfmFootnoteDefinitionWhitespace")):a(x)}function p(x){return t(x)}}function s2(e,t,a){return e.check(oa,t,e.attempt(n2,t,a))}function f2(e){e.exit("gfmFootnoteDefinition")}function c2(e,t,a){let l=this;return U(e,n,"gfmFootnoteDefinitionIndent",5);function n(r){let o=l.events[l.events.length-1];return o&&o[1].type==="gfmFootnoteDefinitionIndent"&&o[2].sliceSerialize(o[1],!0).length===4?t(r):a(r)}}function Up(e){let a=(e||{}).singleTilde,l={name:"strikethrough",tokenize:r,resolveAll:n};return a==null&&(a=!0),{text:{126:l},insideSpan:{null:[l]},attentionMarkers:{null:[126]}};function n(o,u){let i=-1;for(;++i1?i(x):(o.consume(x),c++,p);if(c<2&&!a)return i(x);let I=o.exit("strikethroughSequenceTemporary"),h=Ea(x);return I._open=!h||h===2&&!!S,I._close=!S||S===2&&!!h,u(x)}}}var us=class{constructor(){this.map=[]}add(t,a,l){d2(this,t,a,l)}consume(t){if(this.map.sort(function(r,o){return r[0]-o[0]}),this.map.length===0)return;let a=this.map.length,l=[];for(;a>0;)a-=1,l.push(t.slice(this.map[a][0]+this.map[a][1]),this.map[a][2]),t.length=this.map[a][0];l.push(t.slice()),t.length=0;let n=l.pop();for(;n;){for(let r of n)t.push(r);n=l.pop()}this.map.length=0}};function d2(e,t,a,l){let n=0;if(!(a===0&&l.length===0)){for(;n-1;){let X=l.events[ne][1].type;if(X==="lineEnding"||X==="linePrefix")ne--;else break}let $=ne>-1?l.events[ne][1].type:null,N=$==="tableHead"||$==="tableRow"?k:i;return N===k&&l.parser.lazy[l.now().line]?a(v):N(v)}function i(v){return e.enter("tableHead"),e.enter("tableRow"),s(v)}function s(v){return v===124||(o=!0,r+=1),f(v)}function f(v){return v===null?a(v):_(v)?r>1?(r=0,l.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(v),e.exit("lineEnding"),p):a(v):q(v)?U(e,f,"whitespace")(v):(r+=1,o&&(o=!1,n+=1),v===124?(e.enter("tableCellDivider"),e.consume(v),e.exit("tableCellDivider"),o=!0,f):(e.enter("data"),c(v)))}function c(v){return v===null||v===124||W(v)?(e.exit("data"),f(v)):(e.consume(v),v===92?d:c)}function d(v){return v===92||v===124?(e.consume(v),c):c(v)}function p(v){return l.interrupt=!1,l.parser.lazy[l.now().line]?a(v):(e.enter("tableDelimiterRow"),o=!1,q(v)?U(e,x,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(v):x(v))}function x(v){return v===45||v===58?I(v):v===124?(o=!0,e.enter("tableCellDivider"),e.consume(v),e.exit("tableCellDivider"),S):w(v)}function S(v){return q(v)?U(e,I,"whitespace")(v):I(v)}function I(v){return v===58?(r+=1,o=!0,e.enter("tableDelimiterMarker"),e.consume(v),e.exit("tableDelimiterMarker"),h):v===45?(r+=1,h(v)):v===null||_(v)?C(v):w(v)}function h(v){return v===45?(e.enter("tableDelimiterFiller"),g(v)):w(v)}function g(v){return v===45?(e.consume(v),g):v===58?(o=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(v),e.exit("tableDelimiterMarker"),y):(e.exit("tableDelimiterFiller"),y(v))}function y(v){return q(v)?U(e,C,"whitespace")(v):C(v)}function C(v){return v===124?x(v):v===null||_(v)?!o||n!==r?w(v):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(v)):w(v)}function w(v){return a(v)}function k(v){return e.enter("tableRow"),A(v)}function A(v){return v===124?(e.enter("tableCellDivider"),e.consume(v),e.exit("tableCellDivider"),A):v===null||_(v)?(e.exit("tableRow"),t(v)):q(v)?U(e,A,"whitespace")(v):(e.enter("data"),R(v))}function R(v){return v===null||v===124||W(v)?(e.exit("data"),A(v)):(e.consume(v),v===92?O:R)}function O(v){return v===92||v===124?(e.consume(v),R):R(v)}}function m2(e,t){let a=-1,l=!0,n=0,r=[0,0,0,0],o=[0,0,0,0],u=!1,i=0,s,f,c,d=new us;for(;++aa[2]+1){let x=a[2]+1,S=a[3]-a[2]-1;e.add(x,S,[])}}e.add(a[3]+1,0,[["exit",c,t]])}return n!==void 0&&(r.end=Object.assign({},ur(t.events,n)),e.add(n,0,[["exit",r,t]]),r=void 0),r}function wS(e,t,a,l,n){let r=[],o=ur(t.events,a);n&&(n.end=Object.assign({},o),r.push(["exit",n,t])),l.end=Object.assign({},o),r.push(["exit",l,t]),e.add(a+1,0,r)}function ur(e,t){let a=e[t],l=a[0]==="enter"?"start":"end";return a[1][l]}var h2={name:"tasklistCheck",tokenize:g2};function qp(){return{text:{91:h2}}}function g2(e,t,a){let l=this;return n;function n(i){return l.previous!==null||!l._gfmTasklistFirstContentOfListItem?a(i):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(i),e.exit("taskListCheckMarker"),r)}function r(i){return W(i)?(e.enter("taskListCheckValueUnchecked"),e.consume(i),e.exit("taskListCheckValueUnchecked"),o):i===88||i===120?(e.enter("taskListCheckValueChecked"),e.consume(i),e.exit("taskListCheckValueChecked"),o):a(i)}function o(i){return i===93?(e.enter("taskListCheckMarker"),e.consume(i),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),u):a(i)}function u(i){return _(i)?t(i):q(i)?e.check({tokenize:x2},t,a)(i):a(i)}}function x2(e,t,a){return U(e,l,"whitespace");function l(n){return n===null?a(n):t(n)}}function AS(e){return Oi([Op(),Np(),Up(e),Hp(),qp()])}var y2={};function ss(e){let t=this,a=e||y2,l=t.data(),n=l.micromarkExtensions||(l.micromarkExtensions=[]),r=l.fromMarkdownExtensions||(l.fromMarkdownExtensions=[]),o=l.toMarkdownExtensions||(l.toMarkdownExtensions=[]);n.push(AS(a)),r.push(Bp()),o.push(zp(a))}var cs=Jt(Sl());var TS=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),fs=(...e)=>e.filter((t,a,l)=>!!t&&t.trim()!==""&&l.indexOf(t)===a).join(" ").trim();var Ro=Jt(Sl());var MS={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var DS=(0,Ro.forwardRef)(({color:e="currentColor",size:t=24,strokeWidth:a=2,absoluteStrokeWidth:l,className:n="",children:r,iconNode:o,...u},i)=>(0,Ro.createElement)("svg",{ref:i,...MS,width:t,height:t,stroke:e,strokeWidth:l?Number(a)*24/Number(t):a,className:fs("lucide",n),...u},[...o.map(([s,f])=>(0,Ro.createElement)(s,f)),...Array.isArray(r)?r:[r]]));var K=(e,t)=>{let a=(0,cs.forwardRef)(({className:l,...n},r)=>(0,cs.createElement)(DS,{ref:r,iconNode:t,className:fs(`lucide-${TS(e)}`,l),...n}));return a.displayName=`${e}`,a};var ir=K("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);var Oo=K("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);var sr=K("Box",[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]);var ml=K("CircleStop",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]]);var _o=K("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);var tn=K("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);var No=K("History",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);var hl=K("Layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);var Uo=K("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);var Ho=K("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);var an=K("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);var fr=K("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);var qo=K("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);var Fo=K("Route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);var Po=K("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);var ln=K("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);var cr=K("Settings2",[["path",{d:"M20 7h-9",key:"3s1dr2"}],["path",{d:"M14 17H5",key:"gfn3mx"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);var gl=K("SquareTerminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);var Go=K("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);var Vo=K("Timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);var m=Jt(Ri(),1),NS=new URL(".",window.location.href).pathname;async function xl(e,t){let a=await fetch(`${NS}${e.replace(/^\//,"")}`,{headers:{"Content-Type":"application/json",...(t==null?void 0:t.headers)||{}},...t}),l=await a.text(),n=l?JSON.parse(l):{};if(!a.ok)throw new Error(n.error||a.statusText);return n}function De(...e){return e.filter(Boolean).join(" ")}function Fp(e,t=2500,a=[]){let[l,n]=(0,H.useState)(null),r=async()=>{try{let o=await e();n(o)}catch{}};return(0,H.useEffect)(()=>{r();let o=setInterval(r,t);return()=>clearInterval(o)},a),{data:l,refresh:r}}var dr=[{role:"assistant",content:"Select a job, then ask about metrics, runtime, logs, or how to start the next AReno task."}],L2="areno-dashboard-agent-chat",US="areno-dashboard-agent-chat-sessions",ES="areno-dashboard-agent-active-chat",BS="areno-dashboard-agent-draft";function S2(){try{let e=JSON.parse(localStorage.getItem(L2)||"[]");return Array.isArray(e)&&e.length?e:dr}catch{return dr}}function ps(e=dr,t="New chat"){let a=Date.now();return{id:`chat-${a}-${Math.random().toString(16).slice(2)}`,title:t,createdAt:a,updatedAt:a,messages:e}}function b2(){try{let e=JSON.parse(localStorage.getItem(US)||"[]");if(Array.isArray(e)&&e.length)return e.map(t=>{var a;return{...t,messages:(a=t.messages)!=null&&a.length?t.messages:dr}})}catch{}return[ps(S2(),"Default chat")]}function k2(e,t="New chat"){let a=e.find(n=>n.role==="user"&&n.content);if(!a)return t;let l=a.content.replace(/\s+/g," ").trim();return l.length>42?`${l.slice(0,42)}...`:l}var C2={ckpt:"Qwen/Qwen3-0.6B",dataset_path:"yahma/alpaca-cleaned:train",dataset_loader_fn:"examples/sft/alpaca/dataset_loader.py",reward_fn_path:"",ref_ckpt:"",reward_ckpt:"",critic_ckpt:"",agent_fn:"",algo:"sft",model_hub:"modelscope",epochs:10,max_steps:5,world_size:1,tp_size:1,attn_backend:"flash",activation_checkpointing:!0,drop_rollout_state:!1,eager_decode:!1,disable_thinking:!1,batch_size:8,n_samples:8,mini_bs:1,score_micro_bs:8,gradient_accumulation_steps:"",max_prompt_tokens:1024,max_context_len:2048,max_new_tokens:1024,max_running_prompts:"",temperature:1,top_k:-1,top_p:1,greedy:!1,agent_timeout_s:300,train_tool_results:!1,lr:1e-6,min_lr:1e-7,lr_decay_steps:1e3,lr_decay_style:"cosine",adam_beta1:.9,adam_beta2:.999,adam_8bit:!1,weight_decay:.01,grad_clip_norm:1,gspo_clip_eps:3e-4,grpo_clip_eps:.2,dpo_beta:.1,critic_warmup_steps:20,critic_lr:1e-5,use_kl_loss:!0,kl_loss_coef:.001,kl_loss_type:"low_var_kl",clip_eps:.2,clip_ratio_c:3,value_clip_eps:.5,value_loss_coef:.5,gamma:1,lam:.95,tune_params:!1,mem_frac:.9,tune_max_samples:256,save_path:"outputs/dashboard-run",save_interval:100,metrics_dir:"outputs/dashboard-run/metrics",extra_args:""},v2={model_path:"Qwen/Qwen3-0.6B",model_hub:"modelscope",host:"0.0.0.0",port:8e3,world_size:1,tp_size:1,max_running_prompts:16,default_max_tokens:1024,decode_progress_interval_s:0,attn_backend:"flash",eager_decode:!1,disable_thinking:!1,extra_args:""};function I2(){var T,B,V,J,ie,ft;let[e,t]=(0,H.useState)(null),[a,l]=(0,H.useState)(C2),[n,r]=(0,H.useState)(v2),[o,u]=(0,H.useState)(()=>localStorage.getItem(BS)||""),[i,s]=(0,H.useState)(()=>b2()),[f,c]=(0,H.useState)(()=>localStorage.getItem(ES)||""),[d,p]=(0,H.useState)("chat"),[x,S]=(0,H.useState)(()=>{try{return JSON.parse(localStorage.getItem("areno-dashboard-agent-provider")||"{}")}catch{return{}}}),[I,h]=(0,H.useState)("jobs"),[g,y]=(0,H.useState)("train"),[C,w]=(0,H.useState)(()=>localStorage.getItem("areno-dashboard-theme")||"dark"),[k,A]=(0,H.useState)(""),[R,O]=(0,H.useState)(!1),[v,ne]=(0,H.useState)(1),[$,N]=(0,H.useState)(0),X=(0,H.useRef)(null),j=Fp(()=>xl("/api/env"),5e3),fe=Fp(()=>xl("/api/jobs"),2e3),ve=Fp(()=>e?xl(`/api/jobs/${e}`):Promise.resolve(null),3e3,[e]),Ie=((T=fe.data)==null?void 0:T.jobs)||[],Ze=10,b=Math.max(1,Math.ceil(Ie.length/Ze)),Oe=Math.min(v,b),Pt=Ie.slice((Oe-1)*Ze,Oe*Ze),L=((B=ve.data)==null?void 0:B.job)||(e?Ie.find(z=>z.id===e):null)||null,Ke=(0,H.useMemo)(()=>i.find(z=>z.id===f)||i[0]||ps(),[i,f]),Gt=Ke.messages||dr;(0,H.useEffect)(()=>{e&&Ie.length&&!Ie.some(z=>z.id===e)&&t(null)},[Ie.length,e]),(0,H.useEffect)(()=>{v>b&&ne(b)},[v,b]),(0,H.useEffect)(()=>{document.documentElement.dataset.theme=C,localStorage.setItem("areno-dashboard-theme",C)},[C]),(0,H.useEffect)(()=>{localStorage.setItem("areno-dashboard-agent-provider",JSON.stringify(x))},[x]),(0,H.useEffect)(()=>{localStorage.setItem(US,JSON.stringify(i.slice(-40)))},[i]),(0,H.useEffect)(()=>{if(!i.length){let z=ps();s([z]),c(z.id);return}i.some(z=>z.id===f)||c(i[0].id)},[i,f]),(0,H.useEffect)(()=>{f&&localStorage.setItem(ES,f)},[f]),(0,H.useEffect)(()=>{localStorage.setItem(BS,o)},[o]),(0,H.useEffect)(()=>{let z=X.current;z&&(z.scrollTop=z.scrollHeight)},[Gt,d]);let pr=[{id:"jobs",label:"Jobs",icon:(0,m.jsx)(ir,{size:16})},{id:"trajectory",label:"Trajectory",icon:(0,m.jsx)(Fo,{size:16})},{id:"runtime",label:"Runtime",icon:(0,m.jsx)(ln,{size:16})},{id:"launcher",label:"Launcher",icon:(0,m.jsx)(an,{size:16})},{id:"agent",label:"Agent",icon:(0,m.jsx)(Oo,{size:16})}],yl={jobs:L?[L.name,`${L.kind} \xB7 ${L.status} \xB7 step ${L.step??0}`]:["Jobs","Open an AReno train or serve task to inspect metrics, samples, config, and logs."],trajectory:["Trajectory Detail","Inspect agentic rollout trajectories: messages, tool calls, loss masks, and token counts."],runtime:["Runtime Environment","Review areno check, areno env, dependencies, GPU state, and repository context."],launcher:["Task Launcher","Start low-intrusion AReno train or serve subprocesses from explicit configs."],agent:["Agent Console","Chat with an operations agent using the selected job context."]};async function Fe(){A("Starting train job...");try{let z=await xl("/api/jobs/train",{method:"POST",body:JSON.stringify(a)});t(z.job.id),await fe.refresh()}finally{A("")}}async function Ll(){A("Starting serve job...");try{let z=await xl("/api/jobs/serve",{method:"POST",body:JSON.stringify(n)});t(z.job.id),await fe.refresh()}finally{A("")}}async function Vt(z){A("Stopping job...");try{await xl(`/api/jobs/${z}/stop`,{method:"POST",body:"{}"}),await fe.refresh()}finally{A("")}}async function Kt(){let z=o.trim();if(!z)return;u("");let D=`assistant-${Date.now()}`;ia(re=>[...re,{role:"user",content:z},{id:D,role:"assistant",content:"",events:[],streaming:!0}]),A("Agent analyzing...");try{await Zo({prompt:z,job_id:(L==null?void 0:L.id)||null,provider:x,history:Yo(Gt),onEvent:re=>mr(D,re)})}catch(re){mr(D,{type:"error",content:`Agent request failed: ${re.message||re}`})}finally{mr(D,{type:"done"}),A("")}}function ia(z){let D=Ke.id;s(re=>re.map(Y=>{if(Y.id!==D)return Y;let pe=Y.messages||dr,_e=typeof z=="function"?z(pe):z;return{...Y,messages:_e,updatedAt:Date.now(),title:k2(_e,Y.title)}}))}function nn(){let z=ps();s(D=>[z,...D]),c(z.id),u(""),p("chat")}function hs(z){c(z),p("chat")}function Yo(z){return z.filter(D=>(D.role==="user"||D.role==="assistant")&&!D.streaming).map(D=>({role:D.role,content:Qo(D)})).filter(D=>D.content).slice(-10)}function Qo(z){return z.content?z.content:(z.events||[]).filter(D=>D.type==="content"||D.type==="reasoning").map(D=>D.text||"").join(` +`).trim()}async function Zo({prompt:z,job_id:D,provider:re,history:Y,onEvent:pe}){let _e=await fetch(`${NS}api/agent/stream`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:z,job_id:D,provider:re,history:Y})});if(!_e.ok||!_e.body){let bs=await _e.text();throw new Error(bs||_e.statusText)}let jt=_e.body.getReader(),GS=new TextDecoder,gr="";for(;;){let{value:bs,done:VS}=await jt.read();if(VS)break;gr+=GS.decode(bs,{stream:!0});let Vp=gr.split(` +`);gr=Vp.pop()||"";for(let jp of Vp)jp.trim()&&pe(JSON.parse(jp))}gr.trim()&&pe(JSON.parse(gr))}function mr(z,D){ia(re=>re.map(Y=>Y.id!==z?Y:D.type==="content_delta"?rn(Y,"content",D.content||""):D.type==="reasoning_delta"?rn(Y,"reasoning",D.content||""):D.type==="tool_calls"?xs(Y,D.tool_calls||[]):D.type==="tool_call_delta"?hr(Y,D.tool_call,!0):D.type==="tool_result"?{...Y,events:[...Y.events||[],{type:"tool_result",result:D.tool_result}]}:D.type==="error"?{...rn(Y,"content",D.content||""),streaming:!1}:D.type==="done"?{...Y,streaming:!1}:Y))}function rn(z,D,re){if(!re)return z;let Y=[...z.events||[]],pe=Y[Y.length-1];(pe==null?void 0:pe.type)===D?Y[Y.length-1]={...pe,text:`${pe.text||""}${re}`}:Y.push({type:D,text:re});let _e=D==="content"?`${z.content||""}${re}`:z.content;return{...z,content:_e,events:Y}}function hr(z,D,re=!1){if(!D)return z;let Y=[...z.events||[]],pe=Y.findIndex(_e=>_e.type==="tool_call"&&gs(_e.call,D));return pe>=0?Y[pe]={...Y[pe],call:D,live:re}:Y.push({type:"tool_call",call:D,live:re}),{...z,events:Y}}function gs(z,D){return!z||!D?!1:!!(z.id&&D.id&&z.id===D.id||z.round!==void 0&&D.round!==void 0&&z.index!==void 0&&D.index!==void 0&&z.round===D.round&&z.index===D.index)}function xs(z,D){let re=z;for(let Y of D)re=hr(re,Y,!1);return re}function ys(){var z;return I==="trajectory"?(0,m.jsx)(K2,{jobs:fe,jobDetail:ve,selectedJobId:e,setSelectedJobId:t}):I==="runtime"?(0,m.jsxs)("div",{className:"tabGrid",children:[(0,m.jsx)(N2,{env:j.data}),(0,m.jsx)(U2,{gpus:((z=j.data)==null?void 0:z.gpus)||[]})]}):I==="launcher"?(0,m.jsxs)("section",{className:"panel launcher",children:[(0,m.jsxs)("div",{className:"panelHeader",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("h2",{children:"Task Launcher"}),(0,m.jsx)("p",{children:"Builds AReno CLI commands without importing training internals."})]}),(0,m.jsxs)("div",{className:"tabs",children:[(0,m.jsx)("button",{className:De(g==="train"&&"active"),onClick:()=>y("train"),children:"Train"}),(0,m.jsx)("button",{className:De(g==="serve"&&"active"),onClick:()=>y("serve"),children:"Serve"})]})]}),g==="train"?(0,m.jsx)(aA,{config:a,setConfig:l,onStart:Fe}):(0,m.jsx)(nA,{config:n,setConfig:r,onStart:Ll})]}):I==="agent"?(0,m.jsxs)("section",{className:"panel chatPanel",children:[(0,m.jsxs)("div",{className:"panelHeader",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("h2",{children:"Agent Chat"}),(0,m.jsx)("p",{children:L?`Context: ${L.name}`:"No job selected. The agent will use runtime context only."})]}),(0,m.jsxs)("div",{className:"agentHeaderActions",children:[(0,m.jsxs)("button",{className:"secondaryButton",onClick:nn,children:[(0,m.jsx)(fr,{size:15})," New Chat"]}),(0,m.jsxs)("button",{className:"secondaryButton",onClick:()=>O(!0),children:[(0,m.jsx)(cr,{size:15})," Settings"]})]})]}),(0,m.jsxs)("div",{className:"agentTabs",children:[(0,m.jsxs)("button",{className:De(d==="chat"&&"active"),onClick:()=>p("chat"),children:[(0,m.jsx)(Uo,{size:15})," Chat"]}),(0,m.jsxs)("button",{className:De(d==="history"&&"active"),onClick:()=>p("history"),children:[(0,m.jsx)(No,{size:15})," History"]})]}),d==="history"?(0,m.jsx)(A2,{sessions:i,activeId:Ke.id,onOpen:hs,onNew:nn}):(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)("div",{className:"chatMessages",ref:X,children:Gt.map((D,re)=>{var Y;return(0,m.jsxs)("div",{className:De("chatBubble",D.role),children:[(0,m.jsx)("span",{children:D.role}),(Y=D.events)!=null&&Y.length?(0,m.jsx)(D2,{events:D.events}):(0,m.jsx)(Xo,{text:D.content}),D.streaming&&(0,m.jsx)("div",{className:"streamingHint",children:"thinking..."})]},`${D.id||D.role}-${re}`)})}),(0,m.jsxs)("div",{className:"chatComposer",children:[(0,m.jsx)("textarea",{value:o,onChange:D=>u(D.target.value),onKeyDown:D=>{D.key==="Enter"&&!D.shiftKey&&(D.preventDefault(),Kt())}}),(0,m.jsxs)("button",{className:"primaryButton",onClick:Kt,children:[(0,m.jsx)(Po,{size:16})," Send"]})]})]}),R&&(0,m.jsx)(T2,{title:"Agent Settings",onClose:()=>O(!1),children:(0,m.jsx)(w2,{provider:x,setProvider:S})})]}):L?(0,m.jsxs)("section",{className:"panel detailPanel",children:[(0,m.jsxs)("div",{className:"panelHeader",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("h2",{children:L.name}),(0,m.jsxs)("p",{children:[L.kind," \xB7 ",L.status]})]}),(0,m.jsxs)("div",{className:"detailActions",children:[(0,m.jsx)("button",{className:"secondaryButton",onClick:()=>t(null),children:"Back"}),L.status==="running"&&(0,m.jsxs)("button",{className:"dangerButton",onClick:()=>Vt(L.id),children:[(0,m.jsx)(ml,{size:16})," Stop"]})]})]}),(0,m.jsx)(H2,{job:L}),(0,m.jsx)(M2,{job:L,refreshNonce:$}),(0,m.jsx)(J2,{samples:(L==null?void 0:L.samples)||[]}),(0,m.jsxs)("div",{className:"split",children:[(0,m.jsx)(W2,{config:L==null?void 0:L.config,launch:L==null?void 0:L.launch}),(0,m.jsx)(tA,{logs:(L==null?void 0:L.logs)||[]})]})]}):(0,m.jsxs)("section",{className:"panel jobListPage",children:[(0,m.jsxs)("div",{className:"panelHeader",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("h2",{children:"Jobs"}),(0,m.jsx)("p",{children:"Registered AReno train/serve processes. Select a row to open job details."})]}),(0,m.jsxs)("div",{className:"pagerControls",children:[(0,m.jsx)("button",{className:"secondaryButton",disabled:Oe<=1,onClick:()=>ne(D=>Math.max(1,D-1)),children:"Prev"}),(0,m.jsxs)("span",{children:[Oe," / ",b]}),(0,m.jsx)("button",{className:"secondaryButton",disabled:Oe>=b,onClick:()=>ne(D=>Math.min(b,D+1)),children:"Next"})]})]}),(0,m.jsxs)("div",{className:"jobList",children:[Ie.length===0&&(0,m.jsx)(jo,{title:"No jobs yet",text:"Start a train or serve task from the launcher."}),Pt.map(D=>(0,m.jsxs)("button",{className:"jobRow large",onClick:()=>t(D.id),children:[(0,m.jsx)("div",{className:"jobIcon",children:D.kind==="serve"?(0,m.jsx)(ln,{size:16}):(0,m.jsx)(hl,{size:16})}),(0,m.jsxs)("div",{className:"jobInfo",children:[(0,m.jsx)("div",{className:"jobTitle",children:D.name}),(0,m.jsxs)("div",{className:"jobMeta",children:[D.kind," \xB7 ",D.status," \xB7 step ",D.step??0]})]}),(0,m.jsx)("span",{className:De("statusDot",D.status)})]},D.id))]}),Ie.length>Ze&&(0,m.jsxs)("div",{className:"listFooter",children:["Showing ",(Oe-1)*Ze+1,"-",Math.min(Oe*Ze,Ie.length)," of ",Ie.length," jobs"]})]})}let[Ls,Ss]=yl[I]||yl.jobs;return(0,m.jsxs)("div",{className:"shell",children:[(0,m.jsxs)("aside",{className:"rail",children:[(0,m.jsxs)("div",{className:"brand",children:[(0,m.jsx)("div",{className:"brandMark",children:"A"}),(0,m.jsxs)("div",{children:[(0,m.jsx)("div",{className:"brandName",children:"AReno Ops"}),(0,m.jsx)("div",{className:"brandMeta",children:"runtime workbench"})]})]}),(0,m.jsx)("nav",{className:"nav",children:pr.map(z=>(0,m.jsxs)("button",{className:De("navItem",I===z.id&&"active"),onClick:()=>h(z.id),children:[z.icon," ",z.label]},z.id))}),(0,m.jsxs)("div",{className:"railFooter",children:[(0,m.jsx)("div",{className:"tinyLabel",children:"Repo"}),(0,m.jsxs)("div",{className:"monoLine",children:[((J=(V=j.data)==null?void 0:V.repo)==null?void 0:J.branch)||"unknown"," \xB7 ",((ft=(ie=j.data)==null?void 0:ie.repo)==null?void 0:ft.commit)||"no git"]})]})]}),(0,m.jsxs)("main",{className:"main",children:[(0,m.jsxs)("header",{className:"topbar",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("h1",{children:Ls}),(0,m.jsx)("p",{children:Ss})]}),(0,m.jsxs)("div",{className:"topActions",children:[(0,m.jsx)("button",{className:"iconButton",onClick:()=>w(C==="dark"?"light":"dark"),title:"Toggle theme",children:C==="dark"?(0,m.jsx)(Go,{size:16}):(0,m.jsx)(Ho,{size:16})}),(0,m.jsx)("button",{className:"iconButton",onClick:()=>{j.refresh(),fe.refresh(),ve.refresh(),N(z=>z+1)},title:"Refresh",children:(0,m.jsx)(qo,{size:16})})]})]}),k&&(0,m.jsx)("div",{className:"notice",children:k}),ys()]})]})}function w2({provider:e,setProvider:t}){return(0,m.jsxs)("div",{className:"agentConfig modalForm",children:[(0,m.jsx)(ms,{label:"Base URL",value:e.base_url||"",onChange:a=>t({...e,base_url:a}),compact:!0}),(0,m.jsx)(ms,{label:"Model",value:e.model||"",onChange:a=>t({...e,model:a}),compact:!0}),(0,m.jsxs)("label",{className:"field compact",children:[(0,m.jsx)("span",{children:"API key"}),(0,m.jsx)("input",{type:"password",value:e.api_key||"",onChange:a=>t({...e,api_key:a.target.value})})]})]})}function A2({sessions:e,activeId:t,onOpen:a,onNew:l}){return(0,m.jsxs)("div",{className:"agentHistory",children:[(0,m.jsxs)("div",{className:"agentHistoryHeader",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("h3",{children:"Chat History"}),(0,m.jsxs)("p",{children:[e.length," saved conversations in this browser."]})]}),(0,m.jsxs)("button",{className:"secondaryButton",onClick:l,children:[(0,m.jsx)(fr,{size:15})," New Chat"]})]}),(0,m.jsx)("div",{className:"agentHistoryList",children:e.map(n=>{let r=[...n.messages||[]].reverse().find(o=>o.role==="user"||o.content);return(0,m.jsxs)("button",{className:De("agentHistoryItem",n.id===t&&"active"),onClick:()=>a(n.id),children:[(0,m.jsx)("strong",{children:n.title||"New chat"}),(0,m.jsx)("span",{children:(r==null?void 0:r.content)||"No messages yet."}),(0,m.jsx)("small",{children:new Date(n.updatedAt||n.createdAt||Date.now()).toLocaleString()})]},n.id)})})]})}function T2({title:e,children:t,onClose:a}){return(0,m.jsx)("div",{className:"modalOverlay",role:"presentation",onMouseDown:a,children:(0,m.jsxs)("div",{className:"modalCard",role:"dialog","aria-modal":"true","aria-label":e,onMouseDown:l=>l.stopPropagation(),children:[(0,m.jsxs)("div",{className:"modalHeader",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("h2",{children:e}),(0,m.jsx)("p",{children:"Stored locally in this browser."})]}),(0,m.jsx)("button",{className:"iconButton",onClick:a,children:"\xD7"})]}),t]})})}function M2({job:e,refreshNonce:t}){return(0,m.jsxs)("div",{className:"jobMetricsGrid",children:[(0,m.jsx)("div",{className:"panel insetPanel",children:(0,m.jsx)(V2,{jobId:e==null?void 0:e.id,metricsDir:e==null?void 0:e.metrics_dir,refreshNonce:t})}),(0,m.jsx)("div",{className:"panel insetPanel",children:(0,m.jsx)(Y2,{rows:(e==null?void 0:e.timeperf)||[]})})]})}function D2({events:e}){return(0,m.jsx)("div",{className:"agentEventList",children:e.map((t,a)=>t.type==="reasoning"?(0,m.jsx)(E2,{text:t.text},a):t.type==="content"?(0,m.jsx)(Xo,{text:t.text},a):t.type==="tool_call"?(0,m.jsx)(B2,{call:t.call,live:t.live},a):t.type==="tool_result"?(0,m.jsx)(O2,{result:t.result},a):null)})}function Xo({text:e}){return(0,m.jsx)("div",{className:"markdownBlock",children:(0,m.jsx)(lp,{remarkPlugins:[ss],children:e||""})})}function E2({text:e}){return(0,m.jsxs)("details",{className:"reasoningBlock",children:[(0,m.jsxs)("summary",{children:[(0,m.jsx)("span",{children:"\u2713"}),(0,m.jsx)("strong",{children:"Completed thinking"})]}),(0,m.jsx)(Xo,{text:e})]})}function B2({call:e,live:t=!1}){let l=((e==null?void 0:e.function)||{}).name||(e==null?void 0:e.name)||"tool",n=R2(e);return(0,m.jsxs)("details",{className:De("toolCallCard","toolCallDetails",t&&"live"),children:[(0,m.jsxs)("summary",{className:"toolCallHead",children:[(0,m.jsx)("span",{children:t?"calling":"tool call"}),(0,m.jsx)("b",{children:z2(l,n)}),(0,m.jsx)("em",{children:t?"running":""})]}),(0,m.jsx)("pre",{children:n})]})}function z2(e,t){let a=HS(t);return!a||a==="{}"?`${e}()`:`${e}(${a})`}function R2(e){return(e.function||{}).arguments||e.arguments||JSON.stringify(e,null,2)}function O2({result:e}){let t=_2(e);return(0,m.jsxs)("details",{className:De("toolCallCard","toolResultDetails",e.ok?"ok":"failed"),children:[(0,m.jsxs)("summary",{children:[(0,m.jsx)("span",{children:e.ok?"result":"error"}),(0,m.jsxs)("b",{children:[e.name||"unknown"," \xB7 ",e.ok?"ok":"failed"]}),(0,m.jsx)("em",{children:HS(t)||"No output."})]}),(0,m.jsx)("pre",{children:t})]})}function HS(e){return String(e||"").replace(/\s+/g," ").trim()}function _2(e){return e.error?e.error:Array.isArray(e.jobs)?e.jobs.map(t=>`${t.id} \xB7 ${t.kind} \xB7 ${t.status} \xB7 step ${t.step??0} \xB7 ${t.name}`).join(` +`)||"No jobs.":e.job?`${e.job.id} \xB7 ${e.job.kind} \xB7 ${e.job.status} \xB7 step ${e.job.step??0} +${e.job.name}`:e.env?`ready=${e.env.ready} \xB7 gpu=${e.env.gpu_summary||"n/a"} \xB7 cwd=${e.env.cwd||"n/a"}`:JSON.stringify(e,null,2)}function N2({env:e}){var u,i,s,f;let t=(e==null?void 0:e.checks)||[],a=(e==null?void 0:e.report)||{},l=a.dependencies||{},n=a.torch||{},r=a.platform||{},o=t.slice(0,12);return(0,m.jsxs)("section",{className:"runtimeDeck",children:[(0,m.jsxs)("div",{className:"runtimeHero",children:[(0,m.jsx)("div",{className:De("readinessOrb",e!=null&&e.ready?"ready":"blocked"),children:e!=null&&e.ready?"OK":"!"}),(0,m.jsxs)("div",{children:[(0,m.jsx)("div",{className:"tinyLabel",children:"AReno check"}),(0,m.jsx)("h2",{children:e!=null&&e.ready?"Runtime ready for AReno tasks":"Runtime needs attention before heavy jobs"}),(0,m.jsxs)("p",{children:[((u=e==null?void 0:e.check_counts)==null?void 0:u.ok)??0," OK \xB7 ",((i=e==null?void 0:e.check_counts)==null?void 0:i.warn)??0," WARN \xB7 ",((s=e==null?void 0:e.check_counts)==null?void 0:s.fail)??0," FAIL"]})]})]}),(0,m.jsxs)("div",{className:"envFacts",children:[(0,m.jsx)(ds,{icon:(0,m.jsx)(tn,{size:15}),label:"AReno",value:((f=a.areno)==null?void 0:f.version)||"unknown"}),(0,m.jsx)(ds,{icon:(0,m.jsx)(_o,{size:15}),label:"PyTorch",value:n.version||"missing"}),(0,m.jsx)(ds,{icon:(0,m.jsx)(ln,{size:15}),label:"CUDA",value:n.cuda_build||"none"}),(0,m.jsx)(ds,{icon:(0,m.jsx)(sr,{size:15}),label:"Platform",value:`${r.system||"unknown"} ${r.machine||""}`})]}),(0,m.jsx)("div",{className:"checkMatrix",children:o.map(c=>(0,m.jsxs)("div",{className:De("checkItem",c.status.toLowerCase()),children:[(0,m.jsx)("span",{children:c.status}),(0,m.jsx)("strong",{children:c.name}),(0,m.jsx)("small",{children:c.detail||c.next_step||"no detail"})]},c.name))}),(0,m.jsx)("div",{className:"dependencyStrip",children:Object.entries(l).map(([c,d])=>(0,m.jsxs)("div",{className:De("depPill",d.imported?"ok":"warn"),children:[c,": ",d.imported?d.version||"imported":"missing"]},c))})]})}function U2({gpus:e}){return e.length?(0,m.jsx)("section",{className:"gpuDeck",children:e.map((t,a)=>{let l=Math.min(100,Math.max(0,Number(t.memory_used_mb||0)/Math.max(Number(t.memory_total_mb||1),1)*100)),n=Math.min(100,Math.max(0,Number(t.utilization||0)));return(0,m.jsxs)("div",{className:"gpuCard",children:[(0,m.jsxs)("div",{className:"gpuHead",children:[(0,m.jsxs)("strong",{children:["GPU ",a]}),(0,m.jsx)("span",{children:t.name})]}),(0,m.jsxs)("div",{className:"gpuMeter",children:[(0,m.jsxs)("div",{className:"gpuMeterLabel",children:[(0,m.jsx)("span",{children:"Memory"}),(0,m.jsxs)("b",{children:[t.memory_used_mb,"/",t.memory_total_mb," MB"]})]}),(0,m.jsx)("div",{className:"meterTrack",children:(0,m.jsx)("i",{style:{width:`${l}%`}})})]}),(0,m.jsxs)("div",{className:"gpuMeter",children:[(0,m.jsxs)("div",{className:"gpuMeterLabel",children:[(0,m.jsx)("span",{children:"Utilization"}),(0,m.jsxs)("b",{children:[n,"%"]})]}),(0,m.jsx)("div",{className:"meterTrack util",children:(0,m.jsx)("i",{style:{width:`${n}%`}})})]})]},`${t.name}-${a}`)})}):(0,m.jsx)("section",{className:"gpuDeck",children:(0,m.jsx)("div",{className:"panel",children:(0,m.jsx)(jo,{title:"No GPU detected",text:"nvidia-smi did not return device utilization."})})})}function ds({icon:e,label:t,value:a}){return(0,m.jsxs)("div",{className:"envFact",children:[(0,m.jsx)("span",{children:e}),(0,m.jsxs)("div",{children:[(0,m.jsx)("label",{children:t}),(0,m.jsx)("strong",{children:a})]})]})}function H2({job:e}){let t=qS(e),a=q2(e),l=Math.max(0,t.findIndex(n=>Gp(n,a,e)));return(0,m.jsx)("div",{className:"timeline",children:t.map((n,r)=>(0,m.jsxs)("div",{className:De("timelineItem",r<=l&&"done",Gp(n,a,e)&&"current"),children:[(0,m.jsx)("span",{children:r+1}),(0,m.jsx)("label",{children:n.label})]},n.id))})}function qS(e){if((e==null?void 0:e.kind)==="serve")return[{id:"created",label:"created"},{id:"load",label:"load",aliases:["registered"]},{id:"serve",label:"serve",aliases:["running"]},{id:"exit",label:"exit",aliases:["exited","failed","succeeded","stopped"]}];let t=F2(e,"algo");return t==="sft"?[{id:"created",label:"created",aliases:["registered","epoch_start"]},{id:"train",label:"train",aliases:["train_start","train_end","train_skip"]},{id:"save",label:"save",aliases:["save_checkpoint_start","save_checkpoint_end"]},{id:"done",label:"done",aliases:["max_steps_reached","epoch_end","exited","failed","succeeded","stopped"]}]:t==="dpo"?[{id:"created",label:"created",aliases:["registered","epoch_start"]},{id:"ref_score",label:"ref score",aliases:["logprob_score_start","logprob_score_end"],roles:["ref"]},{id:"train",label:"train",aliases:["train_start","train_end","train_skip"]},{id:"save",label:"save",aliases:["save_checkpoint_start","save_checkpoint_end"]},{id:"done",label:"done",aliases:["max_steps_reached","epoch_end","exited","failed","succeeded","stopped"]}]:t==="ppo"?[{id:"created",label:"created",aliases:["registered","epoch_start"]},{id:"rollout",label:"rollout",aliases:["rollout_start","rollout_end"],roles:["actor"]},{id:"reward",label:"reward",aliases:["score_start","score_end"],roles:["reward"]},{id:"ref_score",label:"ref score",aliases:["logprob_score_start","logprob_score_end"],roles:["ref"]},{id:"old_logprob",label:"old logprob",aliases:["old_logprob_score_start","old_logprob_score_end"],roles:["actor"]},{id:"critic_value",label:"value",aliases:["value_score_start","value_score_end"],roles:["critic"]},{id:"advantage",label:"advantage",aliases:["advantage_start","advantage_end"],roles:["critic"]},{id:"critic_train",label:"critic train",aliases:["train_start","train_end"],roles:["critic"]},{id:"actor_train",label:"actor train",aliases:["train_start","train_end","train_skip"],roles:["actor"]},{id:"save",label:"save",aliases:["save_checkpoint_start","save_checkpoint_end"]},{id:"done",label:"done",aliases:["max_steps_reached","epoch_end","exited","failed","succeeded","stopped"]}]:[{id:"created",label:"created",aliases:["registered","epoch_start"]},{id:"rollout",label:"rollout",aliases:["rollout_start","rollout_end"]},{id:"score",label:"score",aliases:["score_start","score_end","reward_score_start","reward_score_end","logprob_score_start","logprob_score_end","old_logprob_score_start","old_logprob_score_end","value_score_start","value_score_end"]},{id:"train",label:"train",aliases:["train_start","train_end","train_skip"]},{id:"save",label:"save",aliases:["save_checkpoint_start","save_checkpoint_end"]},{id:"done",label:"done",aliases:["max_steps_reached","epoch_end","exited","failed","succeeded","stopped"]}]}function q2(e){if(e!=null&&e.status&&["succeeded","failed","stopped","exited"].includes(e.status))return"done";let t=String((e==null?void 0:e.stage)||"created"),l=qS(e).find(n=>Gp(n,t,e));return(l==null?void 0:l.id)||t}function Gp(e,t,a){var n,r;return e.id===t||((n=e.aliases)==null?void 0:n.includes(t))?(r=e.roles)!=null&&r.length?e.roles.includes(String((a==null?void 0:a.role)||"")):!0:!1}function F2(e,t){let a=e!=null&&e.config&&Object.keys(e.config).length?e.config:(e==null?void 0:e.launch)||{};if(a[t]!==void 0)return a[t];for(let l of a.sections||[]){let n=(l.items||[]).find(r=>r.key===t);if(n)return n.value}}function P2(e){return(e||[]).map(t=>t.name).sort()}function G2(e,t){return t&&e.includes(t)?t:e[0]||""}function V2({jobId:e,metricsDir:t,refreshNonce:a}){let[l,n]=(0,H.useState)(""),[r,o]=(0,H.useState)(.6),[u,i]=(0,H.useState)([]),[s,f]=(0,H.useState)([]),[c,d]=(0,H.useState)(!1),[p,x]=(0,H.useState)(e);e!==p&&(x(e),n(""),i([]),f([]),d(!1));let S=P2(u),I=G2(S,l);(0,H.useEffect)(()=>{let w=!1;if(e)return xl(`/api/jobs/${e}/metrics`).then(k=>{if(w)return;let A=k.metrics||[];i(A),n(R=>{var O;return R||((O=A[0])==null?void 0:O.name)||""})}).catch(()=>{w||i([])}),()=>{w=!0}},[e,a]),(0,H.useEffect)(()=>{let w=!1;if(!e||!I){f([]),d(!1);return}return d(!0),xl(`/api/jobs/${e}/metric?name=${encodeURIComponent(I)}&limit=500`).then(k=>{w||f((k.points||[]).filter(A=>Number.isFinite(Number(A.value))).map(A=>({...A,step:Number(A.step||0),value:Number(A.value)})))}).catch(()=>{w||f([])}).finally(()=>{w||d(!1)}),()=>{w=!0}},[e,I,a]);let h=I,g=s.slice(-240),y=j2(g,r),C=X2(g,y);return(0,m.jsxs)("div",{className:"chart",children:[(0,m.jsxs)("div",{className:"chartHeader",children:[(0,m.jsxs)("span",{children:[(0,m.jsx)(ir,{size:14})," TensorBoard scalars"]}),(0,m.jsxs)("div",{className:"chartControls",children:[(0,m.jsx)("select",{value:h,onChange:w=>n(w.target.value),children:S.length===0?(0,m.jsx)("option",{value:"",children:"no metrics"}):S.map(w=>(0,m.jsx)("option",{children:w},w))}),(0,m.jsxs)("label",{children:["smooth ",r.toFixed(2),(0,m.jsx)("input",{type:"range",min:"0",max:"0.99",step:"0.01",value:r,onChange:w=>o(Number(w.target.value))})]})]})]}),g.length===0?(0,m.jsx)("div",{className:"plotEmpty",children:c?"Loading selected metric...":"No TensorBoard scalar points loaded yet."}):(0,m.jsxs)("svg",{className:"metricPlot",viewBox:"0 0 720 180",role:"img",children:[(0,m.jsx)("g",{className:"plotGrid",children:[0,1,2,3].map(w=>(0,m.jsx)("line",{x1:"0",x2:"720",y1:30+w*42,y2:30+w*42},w))}),(0,m.jsx)("polyline",{className:"rawLine",points:C.raw}),(0,m.jsx)("polyline",{className:"smoothLine",points:C.smooth}),g.slice(-24).map((w,k)=>{var A,R;return(0,m.jsx)("circle",{cx:((A=C.coords[k+Math.max(0,g.length-24)])==null?void 0:A.x)||0,cy:((R=C.coords[k+Math.max(0,g.length-24)])==null?void 0:R.y)||0,r:"2.2",children:(0,m.jsx)("title",{children:`${h} step ${w.step}: ${w.value}`})},`${w.step}-${k}`)})]}),(0,m.jsxs)("div",{className:"plotFooter",children:[(0,m.jsxs)("span",{children:[h||"metric"," \xB7 ",s.length," points"]}),(0,m.jsxs)("span",{children:[t||"no metrics dir"," \xB7 ",C.minLabel," to ",C.maxLabel]})]})]})}function j2(e,t){if(!e.length)return[];let a=Math.min(Math.max(Number(t)||0,0),.999),l=e[0].value;return e.map(n=>(l=l*a+n.value*(1-a),{...n,value:l}))}function X2(e,t){if(!e.length)return{raw:"",smooth:"",coords:[],minLabel:"n/a",maxLabel:"n/a"};let a=[...e,...t].map(d=>d.value),l=Math.min(...a),n=Math.max(...a),r=Math.max(n-l,1e-9),o=e[0].step,u=e[e.length-1].step,i=Math.max(u-o,1),s=d=>({x:(d.step-o)/i*700+10,y:168-(d.value-l)/r*146}),f=e.map(s),c=t.map(s);return{raw:f.map(d=>`${d.x.toFixed(1)},${d.y.toFixed(1)}`).join(" "),smooth:c.map(d=>`${d.x.toFixed(1)},${d.y.toFixed(1)}`).join(" "),coords:f,minLabel:zS(l),maxLabel:zS(n)}}function zS(e){return Number.isFinite(e)?Math.abs(e)>=1e3||Math.abs(e)<.001?e.toExponential(2):e.toFixed(4).replace(/0+$/,"").replace(/\.$/,""):"n/a"}function Y2({rows:e}){let t=Q2(e||[],7).reverse(),a=e!=null&&e.length?e.reduce((r,o)=>r+Number(o.total_s||0),0)/e.length:0,l=Math.max(1,...t.map(r=>Number(r.total_s||0))),n=Array.from(new Set((e||[]).flatMap(r=>(r.segments||[]).map(o=>o.name)))).slice(0,8);return(0,m.jsxs)("div",{className:"timePerf",children:[(0,m.jsxs)("div",{className:"timePerfHeader",children:[(0,m.jsx)("div",{children:(0,m.jsxs)("div",{className:"codeTitle inline",children:[(0,m.jsx)(Vo,{size:14})," Runtime timeperf"]})}),(0,m.jsxs)("div",{className:"legend",children:[n.map(r=>(0,m.jsxs)("span",{children:[(0,m.jsx)("i",{className:RS(r)})," ",r]},r)),(0,m.jsxs)("b",{children:["avg ",a?`${a.toFixed(1)}s`:"n/a"]})]})]}),t.length===0?(0,m.jsx)("div",{className:"sampleEmpty",children:"No step timing captured yet."}):(0,m.jsx)("div",{className:"timeRows",children:t.map(r=>{var s;let o=Number(r.total_s||0),u=Math.max(10,o/l*100),i=(s=r.segments)!=null&&s.length?r.segments:[];return(0,m.jsxs)("div",{className:"timeRow",children:[(0,m.jsxs)("label",{children:["step ",r.step]}),(0,m.jsx)("div",{className:"timeTrack",children:(0,m.jsx)("div",{className:"timeStack",style:{width:`${u}%`},children:i.map(f=>{let c=Number(f.seconds||0),d=c/Math.max(o,1)*100;return(0,m.jsx)("span",{className:RS(f.name),style:{width:`${d}%`},title:`${f.name}: ${c.toFixed(1)}s`,children:d>11?`${c.toFixed(1)}s`:""},f.name)})})}),(0,m.jsxs)("strong",{children:[o.toFixed(1),"s"]})]},`${r.step}-${r.time}`)})})]})}function Q2(e,t){if(e.length<=t)return e.slice();if(t<=1)return e.slice(-1);let a=e.length-1,l=new Set;for(let n=0;nn-r).slice(-t).map(n=>e[n])}function RS(e){return`seg-${String(e||"other").replace(/[^a-zA-Z0-9]+/g,"-")}`}var Z2=["gspo","grpo","ppo"];function K2({jobs:e,jobDetail:t,selectedJobId:a,setSelectedJobId:l}){var C,w;let n=((C=e.data)==null?void 0:C.jobs)||[],r=n.filter(k=>k.kind==="train"&&Z2.some(A=>{var R,O,v;return((O=(R=k.command)==null?void 0:R.some)==null?void 0:O.call(R,ne=>{var $;return ne==="--algo"&&(($=k.command)==null?void 0:$[k.command.indexOf(ne)+1])===A}))||((v=k.name)==null?void 0:v.includes(A))})),o=(w=t.data)==null?void 0:w.job,i=((o==null?void 0:o.samples)||[]).filter(k=>k.kind==="agentic"),s=(0,H.useMemo)(()=>Array.from(new Set(i.map(k=>Number(k.step||0)))).sort((k,A)=>A-k),[i]),[f,c]=(0,H.useState)(""),[d,p]=(0,H.useState)(""),[x,S]=(0,H.useState)("trajectory");(0,H.useEffect)(()=>{if(!s.length){c(""),p("");return}(f===""||!s.includes(Number(f)))&&(c(String(s[0])),p(""))},[f,s]);let h=(f===""?[]:i.filter(k=>Number(k.step||0)===Number(f))).map((k,A)=>({key:FS(k,A),label:`prompt ${k.prompt_idx??"?"} \xB7 sample ${k.sample_idx??"?"}`,sample:k})),g=h.find(k=>k.key===d)||h[h.length-1]||null,y=(g==null?void 0:g.sample)||null;return(0,m.jsxs)("section",{className:"panel trajectoryPage",children:[(0,m.jsx)("div",{className:"panelHeader",children:(0,m.jsxs)("div",{children:[(0,m.jsx)("h2",{children:"Trajectory Detail"}),(0,m.jsx)("p",{children:"Select a job and rollout sample to inspect the full agentic trajectory."})]})}),(0,m.jsxs)("div",{className:"trajectoryControls",children:[(0,m.jsxs)("select",{value:a||"",onChange:k=>l(k.target.value||null),children:[(0,m.jsx)("option",{value:"",children:"Select a job\u2026"}),n.map(k=>(0,m.jsxs)("option",{value:k.id,children:[k.name," \xB7 ",k.kind," \xB7 ",k.status]},k.id))]}),i.length>0&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)("select",{value:f,onChange:k=>{c(k.target.value),p("")},children:s.map(k=>(0,m.jsxs)("option",{value:k,children:["step ",k]},k))}),(0,m.jsx)("select",{value:(g==null?void 0:g.key)||"",onChange:k=>p(k.target.value),children:h.map(k=>(0,m.jsx)("option",{value:k.key,children:k.label},k.key))}),(0,m.jsxs)("div",{className:"tabs",children:[(0,m.jsx)("button",{className:De(x==="trajectory"&&"active"),onClick:()=>S("trajectory"),children:"Trajectory"}),(0,m.jsx)("button",{className:De(x==="raw"&&"active"),onClick:()=>S("raw"),children:"Raw JSON"})]})]})]}),(0,m.jsx)("div",{className:"trajectoryContent",children:a?i.length?y?x==="raw"?(0,m.jsx)("pre",{className:"rawJsonView",children:JSON.stringify(y,null,2)}):(0,m.jsx)(PS,{sample:y}):(0,m.jsx)(jo,{title:"No sample selected",text:"Select a step and sample to view the trajectory detail."}):(0,m.jsx)(jo,{title:"No agentic samples",text:"This job has no agentic rollout samples yet, or samples are still being loaded."}):(0,m.jsx)(jo,{title:"No job selected",text:"Pick a train job with agentic rollouts to view its trajectory."})})]})}function J2({samples:e}){let t=(0,H.useMemo)(()=>[...e||[]].sort((S,I)=>Number(S.step||0)-Number(I.step||0)||Number(S.prompt_idx||0)-Number(I.prompt_idx||0)||Number(S.sample_idx||0)-Number(I.sample_idx||0)),[e]),a=(0,H.useMemo)(()=>Array.from(new Set(t.map(S=>Number(S.step||0)))).sort((S,I)=>I-S),[t]),[l,n]=(0,H.useState)(""),[r,o]=(0,H.useState)(""),[u,i]=(0,H.useState)("default");(0,H.useEffect)(()=>{if(!a.length){n(""),o("");return}(l===""||!a.includes(Number(l)))&&(n(String(a[0])),o(""))},[l,a]);let f=(l===""?[]:t.filter(S=>Number(S.step||0)===Number(l))).map((S,I)=>({key:FS(S,I),label:`prompt ${S.prompt_idx??"?"} \xB7 sample ${S.sample_idx??"?"}`,sample:S})),c=f.find(S=>S.key===r)||f[f.length-1]||null,d=(c==null?void 0:c.sample)||null,p=(d==null?void 0:d.kind)==="agentic",x=p?u:"default";return(0,m.jsxs)("div",{className:"sampleCard",children:[(0,m.jsxs)("div",{className:"codeTitle sampleTitle",children:[(0,m.jsxs)("span",{children:[(0,m.jsx)(tn,{size:14})," Rollout sample"]}),!!t.length&&(0,m.jsxs)("div",{className:"sampleControls",children:[(0,m.jsx)("select",{value:l,onChange:S=>{n(S.target.value),o("")},children:a.map(S=>(0,m.jsxs)("option",{value:S,children:["step ",S]},S))}),(0,m.jsx)("select",{value:(c==null?void 0:c.key)||"",onChange:S=>o(S.target.value),children:f.map(S=>(0,m.jsx)("option",{value:S.key,children:S.label},S.key))}),p&&(0,m.jsxs)("div",{className:"tabs",children:[(0,m.jsx)("button",{className:De(u==="trajectory"&&"active"),onClick:()=>i("trajectory"),children:"Trajectory"}),(0,m.jsx)("button",{className:De(u==="raw"&&"active"),onClick:()=>i("raw"),children:"Raw JSON"})]})]})]}),d?x==="raw"?(0,m.jsx)("pre",{className:"rawJsonView",children:JSON.stringify(d,null,2)}):p?(0,m.jsx)(PS,{sample:d,jobId:d._jobId}):(0,m.jsxs)("div",{className:"sampleGrid",children:[(0,m.jsxs)("div",{children:[(0,m.jsx)("span",{children:"Prompt"}),(0,m.jsx)("p",{children:d.prompt||"n/a"})]}),(0,m.jsxs)("div",{children:[(0,m.jsx)("span",{children:"Completion"}),(0,m.jsx)("p",{children:d.completion||"n/a"})]})]}):(0,m.jsx)("div",{className:"sampleEmpty",children:"No rollout sample captured yet."})]})}function FS(e,t){return`${e.step??"x"}-${e.prompt_idx??"x"}-${e.sample_idx??"x"}-${t}`}function PS({sample:e}){let[t,a]=(0,H.useState)({}),l=e.messages||[],n=e.tool_calls||[],r=e.tool_results||[],o=e.loss_mask||[],u=e.loss_mask_true||0,i=e.loss_mask_total||0,s=e.first_loss_idx??-1,f=e.final_answer||"",c=(e.tokens||[]).length,d=[...r],p=l.map(h=>{let g=h.role||"unknown",y={type:"message",role:g,content:String(h.content||"")};return h.tool_calls&&(y.tool_calls=h.tool_calls),g==="tool"&&d.length&&(y.tool_result=d.shift()),y});for(;d.length;)p.push({type:"tool_result",role:"tool",tool_result:d.shift()});let x={promptTokens:(e.prompt_tokens||[]).length,responseTokens:(e.response_tokens||[]).length,lossMaskTrue:u,lossMaskTotal:i,tokenRowLen:c};function S(h){a(g=>({...g,[h]:!g[h]}))}function I(h){let g=JSON.stringify(h,null,2);return g.length>200?g.slice(0,200)+"...":g}return(0,m.jsxs)("div",{className:"trajectoryDetail",children:[(0,m.jsxs)("div",{className:"trajectorySummary",children:[(0,m.jsxs)("div",{className:"trajectorySummaryItem",children:[(0,m.jsx)("span",{children:"Step"}),(0,m.jsx)("strong",{children:e.step??"?"})]}),(0,m.jsxs)("div",{className:"trajectorySummaryItem",children:[(0,m.jsx)("span",{children:"Prompt"}),(0,m.jsx)("strong",{children:e.prompt_idx??"?"})]}),(0,m.jsxs)("div",{className:"trajectorySummaryItem",children:[(0,m.jsx)("span",{children:"Sample"}),(0,m.jsx)("strong",{children:e.sample_idx??"?"})]}),(0,m.jsxs)("div",{className:"trajectorySummaryItem",children:[(0,m.jsx)("span",{children:"Tool calls"}),(0,m.jsx)("strong",{children:n.length})]}),(0,m.jsxs)("div",{className:"trajectorySummaryItem",children:[(0,m.jsx)("span",{children:"Tool results"}),(0,m.jsx)("strong",{children:r.length})]}),(0,m.jsxs)("div",{className:"trajectorySummaryItem",children:[(0,m.jsx)("span",{children:"Token row"}),(0,m.jsx)("strong",{children:c})]}),(0,m.jsxs)("div",{className:"trajectorySummaryItem",children:[(0,m.jsx)("span",{children:"End reason"}),(0,m.jsx)("strong",{children:e.end_reason||"completed"})]})]}),(0,m.jsxs)("div",{className:"trajectoryTokenCounts",children:[(0,m.jsxs)("div",{className:"trajectoryTokenItem",children:[(0,m.jsx)("label",{children:"Prompt tokens"}),(0,m.jsx)("strong",{children:x.promptTokens})]}),(0,m.jsxs)("div",{className:"trajectoryTokenItem",children:[(0,m.jsx)("label",{children:"Response tokens"}),(0,m.jsx)("strong",{children:x.responseTokens})]}),(0,m.jsxs)("div",{className:"trajectoryTokenItem",children:[(0,m.jsx)("label",{children:"Loss mask"}),(0,m.jsxs)("strong",{children:[u,"/",i,s>=0?` (idx ${s})`:""]})]}),o.length>0&&(0,m.jsx)("div",{className:"trajectoryMaskBar",title:`First ${o.length} mask positions`,children:o.map((h,g)=>(0,m.jsx)("span",{className:De("maskCell",h?"train":"skip")},g))}),i>o.length&&(0,m.jsxs)("span",{className:"maskTruncated",children:["...truncated (",o.length,"/",i," shown)"]})]}),(0,m.jsx)("div",{className:"trajectoryEvents",children:p.map((h,g)=>{var y,C;if(h.type==="tool_result"){let w=t[g];return(0,m.jsxs)("div",{className:"trajectoryEvent toolResult",children:[(0,m.jsxs)("div",{className:"eventHeader",onClick:()=>S(g),children:[(0,m.jsx)("span",{className:"eventBadge result",children:"result"}),(0,m.jsx)("b",{children:((y=h.tool_result)==null?void 0:y.name)||"tool"}),(0,m.jsx)("em",{children:w?"collapse":"expand"})]}),(0,m.jsx)("pre",{className:De("eventOutput",!w&&"collapsed"),children:JSON.stringify(h.tool_result,null,2)})]},g)}return(0,m.jsxs)("div",{className:`trajectoryEvent message ${h.role}`,children:[(0,m.jsx)("div",{className:"eventHeader",children:(0,m.jsx)("span",{className:`eventBadge ${h.role}`,children:h.role})}),h.content&&(0,m.jsx)(Xo,{text:h.content}),((C=h.tool_calls)==null?void 0:C.length)>0&&(0,m.jsx)("div",{className:"eventToolCalls",children:h.tool_calls.map((w,k)=>{let A=w.function||{};return(0,m.jsxs)("div",{className:"eventToolCall",children:[(0,m.jsx)("span",{className:"toolCallBadge",children:"tool call"}),(0,m.jsx)("b",{children:A.name||w.name||"tool"}),(0,m.jsx)("pre",{className:"toolCallArgs",children:A.arguments||w.arguments||"{}"})]},k)})}),h.tool_result&&(0,m.jsx)("pre",{className:"eventOutput",children:I(h.tool_result)})]},g)})}),f&&(0,m.jsxs)("div",{className:"trajectoryFinalAnswer",children:[(0,m.jsxs)("div",{className:"codeTitle",children:[(0,m.jsx)(tn,{size:14})," Final answer"]}),(0,m.jsx)(Xo,{text:f})]})]})}function W2({config:e,launch:t}){let a=e&&Object.keys(e).length?e:t||{},l=$2(a);return(0,m.jsxs)("div",{className:"codeCard",children:[(0,m.jsxs)("div",{className:"codeTitle",children:[(0,m.jsx)(cr,{size:14})," Config"]}),l.length>0?(0,m.jsx)("div",{className:"configSections",children:l.map(n=>(0,m.jsxs)("div",{className:"configSection",children:[(0,m.jsx)("h3",{children:n.title}),(0,m.jsx)("div",{className:"configGrid",children:n.items.map(({key:r,value:o})=>(0,m.jsxs)("div",{className:"configItem",children:[(0,m.jsx)("span",{children:r.replace(/_/g," ")}),(0,m.jsx)("strong",{children:eA(o)})]},r))})]},n.title))}):(0,m.jsx)("pre",{children:"No config captured yet."})]})}function $2(e){if(Array.isArray(e==null?void 0:e.sections))return e.sections.map(a=>({title:a.title||"Config",items:(a.items||[]).filter(({value:l})=>l!=null&&l!=="")})).filter(a=>a.items.length>0);let t=Object.entries(e||{}).filter(([,a])=>a!=null&&a!=="").map(([a,l])=>({key:a,value:l}));return t.length?[{title:"Launch",items:t}]:[]}function eA(e){return Array.isArray(e)?e.join(" "):typeof e=="object"?JSON.stringify(e):String(e)}function tA({logs:e}){let t=(0,H.useRef)(null);return(0,H.useEffect)(()=>{let a=t.current;a&&(a.scrollTop=a.scrollHeight)},[e.length]),(0,m.jsxs)("div",{className:"codeCard",ref:t,children:[(0,m.jsxs)("div",{className:"codeTitle",children:[(0,m.jsx)(gl,{size:14})," Logs"]}),(0,m.jsx)("pre",{children:e.slice(-80).join(` +`)||"No logs yet."})]})}function aA({config:e,setConfig:t,onStart:a}){let l=String(e.algo||"sft").toLowerCase(),n=lA(l),r=(o,u)=>t({...e,[o]:u});return(0,m.jsxs)("div",{className:"launcherSections",children:[n.map(o=>(0,m.jsxs)("div",{className:"launcherSection",children:[(0,m.jsxs)("div",{className:"launcherSectionHeader",children:[(0,m.jsx)("strong",{children:o.title}),o.note&&(0,m.jsx)("span",{children:o.note})]}),(0,m.jsx)("div",{className:"formGrid",children:o.fields.map(u=>(0,m.jsx)(ms,{label:u.label,value:e[u.key],onChange:i=>r(u.key,i),compact:u.compact,type:u.type,options:u.options},u.key))})]},o.title)),(0,m.jsxs)("button",{className:"primaryButton launchButton wide",onClick:a,children:[(0,m.jsx)(an,{size:16})," Start train"]})]})}function lA(e){let t=["gspo","grpo","ppo"].includes(e),a=t,l=e==="dpo",n=e==="ppo",r=e==="gspo",o=e==="grpo",u=[{title:"Basic",note:"model, data, and trainer loop",fields:[Pp("algo","Algorithm",["sft","dpo","gspo","grpo","ppo"],!0),F("ckpt","Checkpoint"),Pp("model_hub","Model hub",["modelscope","hf"],!0),F("dataset_path","Dataset path"),F("dataset_loader_fn","Dataset loader"),F("epochs","Epochs",!0),F("max_steps","Max steps",!0)]},{title:"Runtime",note:"parallelism, memory, and kernels",fields:[F("world_size","World",!0),F("tp_size","TP",!0),Pp("attn_backend","Attention",["flash","native"],!0),za("activation_checkpointing","Activation ckpt"),za("drop_rollout_state","Drop rollout state"),za("eager_decode","Eager decode"),za("disable_thinking","Disable thinking")]},{title:"Batching",note:"controls train and rollout memory",fields:[F("batch_size","Batch",!0),...t?[F("n_samples","Samples",!0),F("max_running_prompts","Running prompts",!0)]:[],F("mini_bs","Mini BS",!0),F("score_micro_bs","Score micro BS",!0),F("gradient_accumulation_steps","Grad accum",!0)]},{title:t?"Rollout":"Sequence",note:t?"generation and sampling":"token limits for supervised data",fields:[F("max_prompt_tokens","Prompt tokens",!0),F("max_new_tokens","New tokens",!0),...a?[F("max_context_len","Context",!0),F("agent_fn","Agent fn"),F("agent_timeout_s","Agent timeout",!0),za("train_tool_results","Train tool results")]:[],...t?[F("temperature","Temp",!0),F("top_k","Top K",!0),F("top_p","Top P",!0),za("greedy","Greedy")]:[]]},{title:"Optimizer",note:"policy optimizer settings",fields:[F("lr","LR",!0),F("min_lr","Min LR",!0),F("lr_decay_steps","Decay steps",!0),F("lr_decay_style","Decay style",!0),F("adam_beta1","Adam beta1",!0),F("adam_beta2","Adam beta2",!0),F("weight_decay","Weight decay",!0),F("grad_clip_norm","Grad clip",!0),za("adam_8bit","8-bit Adam")]}],i=[];return(l||n)&&i.push(F("ref_ckpt","Reference ckpt")),t&&i.push(F("reward_fn_path","Reward fn")),n&&i.push(F("reward_ckpt","Reward ckpt"),F("critic_ckpt","Critic ckpt"),F("critic_lr","Critic LR",!0),F("critic_warmup_steps","Critic warmup",!0)),r&&i.push(F("gspo_clip_eps","GSPO clip",!0)),o&&i.push(F("grpo_clip_eps","GRPO clip",!0)),l&&i.push(F("dpo_beta","DPO beta",!0)),n&&i.push(za("use_kl_loss","Use KL loss"),F("kl_loss_coef","KL coef",!0),F("kl_loss_type","KL type",!0),F("clip_eps","Clip eps",!0),F("clip_ratio_c","Clip ratio C",!0),F("value_clip_eps","Value clip",!0),F("value_loss_coef","Value coef",!0),F("gamma","Gamma",!0),F("lam","Lambda",!0)),i.length>0&&u.push({title:"Algorithm",note:`${e.toUpperCase()}-specific roles and loss`,fields:i}),u.push({title:"Probe",note:"optional smoke and auto tune helpers",fields:[za("tune_params","Tune params"),F("mem_frac","Memory frac",!0),F("tune_max_samples","Tune samples",!0)]},{title:"Output",note:"checkpointing, metrics, and escape hatch",fields:[F("save_path","Save path"),F("save_interval","Save interval",!0),F("metrics_dir","Metrics dir"),F("extra_args","Extra args")]}),u}function F(e,t,a=!1){return{key:e,label:t,compact:a}}function Pp(e,t,a,l=!1){return{key:e,label:t,compact:l,type:"select",options:a}}function za(e,t){return{key:e,label:t,compact:!0,type:"checkbox"}}function nA({config:e,setConfig:t,onStart:a}){return(0,m.jsxs)("div",{className:"formGrid",children:[[["model_path","Model path"],["model_hub","Model hub"],["host","Host"],["port","Port"],["world_size","World"],["tp_size","TP"],["max_running_prompts","Running prompts"],["default_max_tokens","Default max tokens"],["decode_progress_interval_s","Progress interval"],["attn_backend","Attention backend"],["eager_decode","Eager decode"],["disable_thinking","Disable thinking"],["extra_args","Extra args"]].map(([l,n])=>(0,m.jsx)(ms,{label:n,value:e[l],onChange:r=>t({...e,[l]:r}),compact:l!=="model_path"},l)),(0,m.jsxs)("button",{className:"primaryButton launchButton wide",onClick:a,children:[(0,m.jsx)(an,{size:16})," Start serve"]})]})}function ms({label:e,value:t,onChange:a,compact:l,type:n="text",options:r=[]}){return n==="checkbox"?(0,m.jsxs)("label",{className:De("field","compact","checkField"),children:[(0,m.jsx)("input",{type:"checkbox",checked:!!t,onChange:o=>a(o.target.checked)}),(0,m.jsx)("span",{children:e})]}):(0,m.jsxs)("label",{className:De("field",l&&"compact"),children:[(0,m.jsx)("span",{children:e}),n==="select"?(0,m.jsx)("select",{value:t??"",onChange:o=>a(o.target.value),children:r.map(o=>(0,m.jsx)("option",{value:o,children:o},o))}):(0,m.jsx)("input",{value:t??"",onChange:o=>a(o.target.value)})]})}function jo({title:e,text:t}){return(0,m.jsxs)("div",{className:"empty",children:[(0,m.jsx)(sr,{size:18}),(0,m.jsx)("strong",{children:e}),(0,m.jsx)("span",{children:t})]})}var OS=typeof document<"u"?document.getElementById("root"):null;OS&&(0,_S.createRoot)(OS).render((0,m.jsx)(I2,{}));export{I2 as App,V2 as MetricChart,P2 as metricNamesFrom,G2 as resolveActiveMetricName}; +/*! Bundled license information: + +react/cjs/react.production.js: + (** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +scheduler/cjs/scheduler.production.js: + (** + * @license React + * scheduler.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom.production.js: + (** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-dom/cjs/react-dom-client.production.js: + (** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react/cjs/react-jsx-runtime.production.js: + (** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +lucide-react/dist/esm/shared/src/utils.js: +lucide-react/dist/esm/defaultAttributes.js: +lucide-react/dist/esm/Icon.js: +lucide-react/dist/esm/createLucideIcon.js: +lucide-react/dist/esm/icons/activity.js: +lucide-react/dist/esm/icons/bot.js: +lucide-react/dist/esm/icons/box.js: +lucide-react/dist/esm/icons/circle-stop.js: +lucide-react/dist/esm/icons/cpu.js: +lucide-react/dist/esm/icons/file-text.js: +lucide-react/dist/esm/icons/history.js: +lucide-react/dist/esm/icons/layers.js: +lucide-react/dist/esm/icons/message-square.js: +lucide-react/dist/esm/icons/moon.js: +lucide-react/dist/esm/icons/play.js: +lucide-react/dist/esm/icons/plus.js: +lucide-react/dist/esm/icons/refresh-cw.js: +lucide-react/dist/esm/icons/route.js: +lucide-react/dist/esm/icons/send.js: +lucide-react/dist/esm/icons/server.js: +lucide-react/dist/esm/icons/settings-2.js: +lucide-react/dist/esm/icons/square-terminal.js: +lucide-react/dist/esm/icons/sun.js: +lucide-react/dist/esm/icons/timer.js: +lucide-react/dist/esm/lucide-react.js: + (** + * @license lucide-react v0.468.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/areno/dashboard/dist/index.html b/areno/dashboard/dist/index.html index b3a17010..aca09293 100644 --- a/areno/dashboard/dist/index.html +++ b/areno/dashboard/dist/index.html @@ -4,8 +4,8 @@ AReno Dashboard - - + +
diff --git a/areno/dashboard/server.py b/areno/dashboard/server.py index 9bb8b4d4..83f54468 100644 --- a/areno/dashboard/server.py +++ b/areno/dashboard/server.py @@ -1480,6 +1480,114 @@ def execute_agent_tool(tool_call: dict[str, Any]) -> dict[str, Any]: return {"name": name, "ok": False, "error": str(exc)} +def validate_trajectory_sample(sample: dict[str, Any]) -> list[str]: + """Validate a rollout sample dict before rendering its trajectory detail. + + Returns a list of human-readable validation error strings; an empty list + means the sample is valid for trajectory rendering. + """ + errors: list[str] = [] + if not isinstance(sample, dict): + return ["sample is not a dict"] + if sample.get("kind") != "agentic": + return [f"sample kind '{sample.get('kind', 'missing')}' is not 'agentic'"] + if not sample.get("messages"): + errors.append("messages field is empty or missing") + if not sample.get("prompt") and not sample.get("messages"): + errors.append("prompt field is missing") + return errors + + +def build_trajectory_detail(sample: dict[str, Any]) -> dict[str, Any]: + """Build a chronologically ordered trajectory detail from an agentic sample. + + Reads existing local rollout-sample artifacts only; never executes tool + calls. Output fields: + - events: ordered list of {type, role, content, tool_calls, tool_result} + - final_answer: str + - token_counts: {prompt_tokens, response_tokens, loss_mask_true, loss_mask_total} + - training_mask: {loss_mask_true, loss_mask_total, first_loss_idx} + - end_reason: str + - raw: the original sample dict (privacy-safe: no full training data) + """ + errors = validate_trajectory_sample(sample) + if errors: + return {"error": "; ".join(errors), "valid": False} + + messages = sample.get("messages") or [] + tool_calls = sample.get("tool_calls") or [] + tool_results = sample.get("tool_results") or [] + events: list[dict[str, Any]] = [] + + # Walk messages in order, interleaving tool results where they match. + tool_result_queue = list(tool_results) + for message in messages: + role = str(message.get("role") or "unknown") + content = message.get("content") or "" + msg_tool_calls = message.get("tool_calls") or [] + entry: dict[str, Any] = {"type": "message", "role": role, "content": str(content)} + if msg_tool_calls: + entry["tool_calls"] = msg_tool_calls + if role == "tool" and tool_result_queue: + entry["tool_result"] = tool_result_queue.pop(0) + events.append(entry) + + # Append any remaining tool results that did not match a tool message. + for result in tool_result_queue: + events.append({"type": "tool_result", "role": "tool", "tool_result": result}) + + loss_mask = sample.get("loss_mask") or [] + tokens = sample.get("tokens") or [] + loss_mask_true = int(sample.get("loss_mask_true") or sum(1 for m in loss_mask if m)) + loss_mask_total = int(sample.get("loss_mask_total") or len(loss_mask)) + first_loss_idx = int(sample.get("first_loss_idx") or -1) + + return { + "valid": True, + "step": sample.get("step", 0), + "prompt_idx": sample.get("prompt_idx", -1), + "sample_idx": sample.get("sample_idx", -1), + "kind": "agentic", + "events": events, + "final_answer": sample.get("final_answer") or "", + "token_counts": { + "prompt_tokens": len(sample.get("prompt_tokens") or []), + "response_tokens": len(sample.get("response_tokens") or []), + "loss_mask_true": loss_mask_true, + "loss_mask_total": loss_mask_total, + "token_row_len": len(tokens), + }, + "training_mask": { + "loss_mask_true": loss_mask_true, + "loss_mask_total": loss_mask_total, + "first_loss_idx": first_loss_idx, + "truncated": len(loss_mask) < loss_mask_total if loss_mask_total else False, + }, + "end_reason": sample.get("end_reason") or "completed", + "tool_call_count": len(tool_calls), + "tool_result_count": len(tool_results), + } + + +def trajectory_detail(job_id: str | None, step: int, prompt_idx: int, sample_idx: int) -> dict[str, Any]: + """Resolve a single trajectory sample from a job's rollout samples.""" + job = STATE.get_job(job_id) + if job is None: + return {"error": "job not found", "valid": False} + candidates = [ + s for s in job.samples + if int(s.get("step", 0)) == step + and int(s.get("prompt_idx", -1)) == prompt_idx + and int(s.get("sample_idx", -1)) == sample_idx + ] + if not candidates: + return {"error": "trajectory sample not found", "valid": False} + sample = candidates[-1] + detail = build_trajectory_detail(sample) + detail["raw"] = sample + return detail + + class Handler(BaseHTTPRequestHandler): def log_message(self, fmt: str, *args: Any) -> None: sys.stderr.write(f"{self.log_date_time_string()} - {fmt % args}\n") @@ -1500,6 +1608,17 @@ def do_GET(self) -> None: metric_name = query.get("name", [""])[0] limit = int(query.get("limit", ["500"])[0] or 500) self.json({"metric": metric_name, "points": STATE.metric_series(job_id, metric_name, limit=limit)}) + elif path.startswith("/api/jobs/") and path.endswith("/trajectory"): + job_id = path.split("/")[-2] + query = urllib.parse.parse_qs(urllib.parse.urlsplit(self.path).query) + try: + step = int(query.get("step", ["0"])[0] or 0) + prompt_idx = int(query.get("prompt_idx", ["-1"])[0] or -1) + sample_idx = int(query.get("sample_idx", ["-1"])[0] or -1) + except ValueError: + self.error("step, prompt_idx, and sample_idx must be integers") + return + self.json(trajectory_detail(job_id, step, prompt_idx, sample_idx)) elif path.startswith("/api/jobs/"): job = STATE.get_job(path.split("/")[-1]) if not job: diff --git a/dashboard/src/main.jsx b/dashboard/src/main.jsx index e5c110fd..3e58331c 100644 --- a/dashboard/src/main.jsx +++ b/dashboard/src/main.jsx @@ -11,11 +11,13 @@ import { FileText, History, Layers, + Map, MessageSquare, Moon, Plus, Play, RefreshCw, + Route, Send, Server, Settings2, @@ -286,6 +288,7 @@ function App() { const pages = [ { id: "jobs", label: "Jobs", icon: }, + { id: "trajectory", label: "Trajectory", icon: }, { id: "runtime", label: "Runtime", icon: }, { id: "launcher", label: "Launcher", icon: }, { id: "agent", label: "Agent", icon: }, @@ -294,6 +297,7 @@ function App() { jobs: selectedJob ? [selectedJob.name, `${selectedJob.kind} · ${selectedJob.status} · step ${selectedJob.step ?? 0}`] : ["Jobs", "Open an AReno train or serve task to inspect metrics, samples, config, and logs."], + trajectory: ["Trajectory Detail", "Inspect agentic rollout trajectories: messages, tool calls, loss masks, and token counts."], runtime: ["Runtime Environment", "Review areno check, areno env, dependencies, GPU state, and repository context."], launcher: ["Task Launcher", "Start low-intrusion AReno train or serve subprocesses from explicit configs."], agent: ["Agent Console", "Chat with an operations agent using the selected job context."], @@ -512,6 +516,9 @@ function App() { } function renderPage() { + if (activePage === "trajectory") { + return ; + } if (activePage === "runtime") { return (
@@ -1350,6 +1357,98 @@ function normalizeDisplayName(name) { .trim(); } +const AGENTIC_ALGOS = ["gspo", "grpo", "ppo"]; + +function TrajectoryPage({ jobs, jobDetail, selectedJobId, setSelectedJobId }) { + const jobList = jobs.data?.jobs || []; + const agenticJobs = jobList.filter((job) => job.kind === "train" && AGENTIC_ALGOS.some((algo) => job.command?.some?.((part) => part === `--algo` && job.command?.[job.command.indexOf(part) + 1] === algo) || job.name?.includes(algo))); + const detailJob = jobDetail.data?.job; + const samples = detailJob?.samples || []; + const agenticSamples = samples.filter((sample) => sample.kind === "agentic"); + + const stepOptions = useMemo( + () => Array.from(new Set(agenticSamples.map((sample) => Number(sample.step || 0)))).sort((a, b) => b - a), + [agenticSamples] + ); + const [selectedStep, setSelectedStep] = useState(""); + const [selectedSampleKey, setSelectedSampleKey] = useState(""); + const [viewMode, setViewMode] = useState("trajectory"); + + useEffect(() => { + if (!stepOptions.length) { + setSelectedStep(""); + setSelectedSampleKey(""); + return; + } + if (selectedStep === "" || !stepOptions.includes(Number(selectedStep))) { + setSelectedStep(String(stepOptions[0])); + setSelectedSampleKey(""); + } + }, [selectedStep, stepOptions]); + + const stepSamples = selectedStep === "" ? [] : agenticSamples.filter((sample) => Number(sample.step || 0) === Number(selectedStep)); + const sampleOptions = stepSamples.map((sample, index) => ({ + key: sampleKey(sample, index), + label: `prompt ${sample.prompt_idx ?? "?"} · sample ${sample.sample_idx ?? "?"}`, + sample, + })); + const activeOption = sampleOptions.find((option) => option.key === selectedSampleKey) || sampleOptions[sampleOptions.length - 1] || null; + const sample = activeOption?.sample || null; + + return ( +
+
+
+

Trajectory Detail

+

Select a job and rollout sample to inspect the full agentic trajectory.

+
+
+
+ + {agenticSamples.length > 0 && ( + <> + + +
+ + +
+ + )} +
+
+ {!selectedJobId ? ( + + ) : !agenticSamples.length ? ( + + ) : sample ? ( + viewMode === "raw" ? ( +
{JSON.stringify(sample, null, 2)}
+ ) : ( + + ) + ) : ( + + )} +
+
+ ); +} + function SampleView({ samples }) { const orderedSamples = useMemo( () => @@ -1367,6 +1466,7 @@ function SampleView({ samples }) { ); const [selectedStep, setSelectedStep] = useState(""); const [selectedSampleKey, setSelectedSampleKey] = useState(""); + const [viewMode, setViewMode] = useState("default"); useEffect(() => { if (!stepOptions.length) { setSelectedStep(""); @@ -1387,6 +1487,8 @@ function SampleView({ samples }) { const activeOption = sampleOptions.find((option) => option.key === selectedSampleKey) || sampleOptions[sampleOptions.length - 1] || null; const sample = activeOption?.sample || null; + const isAgentic = sample?.kind === "agentic"; + const effectiveViewMode = isAgentic ? viewMode : "default"; return (
@@ -1399,20 +1501,32 @@ function SampleView({ samples }) { + {isAgentic && ( +
+ + +
+ )}
)}
{sample ? ( -
-
- Prompt -

{sample.prompt || "n/a"}

-
-
- Completion -

{sample.completion || "n/a"}

+ effectiveViewMode === "raw" ? ( +
{JSON.stringify(sample, null, 2)}
+ ) : isAgentic ? ( + + ) : ( +
+
+ Prompt +

{sample.prompt || "n/a"}

+
+
+ Completion +

{sample.completion || "n/a"}

+
-
+ ) ) : (
No rollout sample captured yet.
)} @@ -1424,6 +1538,152 @@ function sampleKey(sample, index) { return `${sample.step ?? "x"}-${sample.prompt_idx ?? "x"}-${sample.sample_idx ?? "x"}-${index}`; } +function TrajectoryDetailView({ sample }) { + const [expandedTools, setExpandedTools] = useState({}); + const messages = sample.messages || []; + const toolCalls = sample.tool_calls || []; + const toolResults = sample.tool_results || []; + const lossMask = sample.loss_mask || []; + const lossMaskTrue = sample.loss_mask_true || 0; + const lossMaskTotal = sample.loss_mask_total || 0; + const firstLossIdx = sample.first_loss_idx ?? -1; + const finalAnswer = sample.final_answer || ""; + const tokenRowLen = (sample.tokens || []).length; + + const toolResultQueue = [...toolResults]; + const events = messages.map((message) => { + const role = message.role || "unknown"; + const entry = { type: "message", role, content: String(message.content || "") }; + if (message.tool_calls) entry.tool_calls = message.tool_calls; + if (role === "tool" && toolResultQueue.length) entry.tool_result = toolResultQueue.shift(); + return entry; + }); + while (toolResultQueue.length) { + events.push({ type: "tool_result", role: "tool", tool_result: toolResultQueue.shift() }); + } + + const tokenCounts = { + promptTokens: (sample.prompt_tokens || []).length, + responseTokens: (sample.response_tokens || []).length, + lossMaskTrue, + lossMaskTotal, + tokenRowLen, + }; + + function toggleTool(index) { + setExpandedTools((prev) => ({ ...prev, [index]: !prev[index] })); + } + + function summarizeToolOutput(result) { + const text = JSON.stringify(result, null, 2); + return text.length > 200 ? text.slice(0, 200) + "..." : text; + } + + return ( +
+
+
+ Step{sample.step ?? "?"} +
+
+ Prompt{sample.prompt_idx ?? "?"} +
+
+ Sample{sample.sample_idx ?? "?"} +
+
+ Tool calls{toolCalls.length} +
+
+ Tool results{toolResults.length} +
+
+ Token row{tokenRowLen} +
+
+ End reason{sample.end_reason || "completed"} +
+
+ +
+
+ {tokenCounts.promptTokens} +
+
+ {tokenCounts.responseTokens} +
+
+ {lossMaskTrue}/{lossMaskTotal}{firstLossIdx >= 0 ? ` (idx ${firstLossIdx})` : ""} +
+ {lossMask.length > 0 && ( +
+ {lossMask.map((enabled, idx) => ( + + ))} +
+ )} + {lossMaskTotal > lossMask.length && ( + ...truncated ({lossMask.length}/{lossMaskTotal} shown) + )} +
+ +
+ {events.map((event, index) => { + if (event.type === "tool_result") { + const expanded = expandedTools[index]; + return ( +
+
toggleTool(index)}> + result + {event.tool_result?.name || "tool"} + {expanded ? "collapse" : "expand"} +
+
+                  {JSON.stringify(event.tool_result, null, 2)}
+                
+
+ ); + } + return ( +
+
+ {event.role} +
+ {event.content && } + {event.tool_calls?.length > 0 && ( +
+ {event.tool_calls.map((call, ci) => { + const fn = call.function || {}; + return ( +
+ tool call + {fn.name || call.name || "tool"} +
{fn.arguments || call.arguments || "{}"}
+
+ ); + })} +
+ )} + {event.tool_result && ( +
+                  {summarizeToolOutput(event.tool_result)}
+                
+ )} +
+ ); + })} +
+ + {finalAnswer && ( +
+
Final answer
+ +
+ )} +
+ ); +} + function ConfigView({ config, launch }) { const settings = config && Object.keys(config).length ? config : launch || {}; const sections = normalizeConfigSections(settings); diff --git a/dashboard/src/styles.css b/dashboard/src/styles.css index 6511695d..dddd99fa 100644 --- a/dashboard/src/styles.css +++ b/dashboard/src/styles.css @@ -2094,3 +2094,297 @@ textarea:focus { text-align: left; } } + +/* Trajectory detail view */ +.trajectoryDetail { + display: grid; + gap: 12px; +} + +.trajectorySummary { + display: flex; + flex-wrap: wrap; + gap: 10px; + padding: 10px 12px; + border: 1px solid var(--deck-line); + border-radius: var(--radius-md); + background: rgba(167, 186, 210, 0.03); +} + +.trajectorySummaryItem { + display: flex; + align-items: center; + gap: 6px; +} + +.trajectorySummaryItem span { + color: var(--deck-muted); + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.trajectorySummaryItem strong { + color: var(--deck-ink); + font-size: 13px; + font-weight: 650; +} + +.trajectoryTokenCounts { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); + gap: 10px; + padding: 10px 12px; + border: 1px solid var(--deck-line); + border-radius: var(--radius-md); + background: rgba(167, 186, 210, 0.03); +} + +.trajectoryTokenItem { + display: grid; + gap: 3px; +} + +.trajectoryTokenItem label { + color: var(--deck-muted); + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.trajectoryTokenItem strong { + color: var(--deck-ink); + font-size: 13px; + font-variant-numeric: tabular-nums; +} + +.trajectoryMaskBar { + grid-column: 1 / -1; + display: flex; + flex-wrap: wrap; + gap: 1px; + padding: 6px 0; +} + +.maskCell { + display: inline-block; + width: 8px; + height: 14px; + border-radius: 2px; +} + +.maskCell.train { + background: var(--deck-green); +} + +.maskCell.skip { + background: rgba(167, 186, 210, 0.15); +} + +.maskTruncated { + grid-column: 1 / -1; + color: var(--deck-muted); + font-size: 11px; + font-style: italic; +} + +.trajectoryEvents { + display: grid; + gap: 8px; +} + +.trajectoryEvent { + border: 1px solid var(--deck-line); + border-radius: var(--radius-md); + padding: 10px 12px; + background: rgba(167, 186, 210, 0.02); +} + +.trajectoryEvent.message.assistant { + border-left: 3px solid var(--deck-cyan); +} + +.trajectoryEvent.message.user { + border-left: 3px solid var(--deck-violet); +} + +.trajectoryEvent.message.tool { + border-left: 3px solid var(--deck-amber); +} + +.trajectoryEvent.message.system { + border-left: 3px solid var(--deck-muted); +} + +.trajectoryEvent.toolResult { + border-left: 3px solid var(--deck-green); +} + +.eventHeader { + display: flex; + align-items: center; + gap: 8px; + cursor: default; + margin-bottom: 6px; +} + +.trajectoryEvent.toolResult .eventHeader { + cursor: pointer; +} + +.eventBadge { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 50px; + height: 18px; + border-radius: 999px; + padding: 0 7px; + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.eventBadge.assistant { + color: var(--deck-cyan); + background: rgba(56, 215, 255, 0.1); +} + +.eventBadge.user { + color: var(--deck-violet); + background: rgba(169, 147, 255, 0.1); +} + +.eventBadge.tool { + color: var(--deck-amber); + background: rgba(255, 200, 87, 0.1); +} + +.eventBadge.system { + color: var(--deck-muted); + background: rgba(114, 129, 150, 0.1); +} + +.eventBadge.result { + color: var(--deck-green); + background: rgba(87, 227, 155, 0.1); +} + +.eventHeader b { + color: var(--deck-ink); + font-size: 12px; + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace; + font-weight: 650; +} + +.eventHeader em { + color: var(--deck-muted); + font-size: 11px; + font-style: normal; +} + +.eventToolCalls { + display: grid; + gap: 6px; + margin-top: 8px; +} + +.eventToolCall { + display: grid; + gap: 4px; + padding: 6px 8px; + border: 1px solid var(--deck-line); + border-radius: var(--radius-sm); + background: rgba(56, 215, 255, 0.04); +} + +.toolCallBadge { + display: inline-flex; + align-items: center; + min-width: 50px; + height: 16px; + border-radius: 999px; + padding: 0 6px; + font-size: 9px; + font-weight: 700; + text-transform: uppercase; + color: var(--deck-cyan); + background: rgba(56, 215, 255, 0.08); +} + +.eventToolCall b { + color: var(--deck-ink); + font-size: 12px; + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace; +} + +.toolCallArgs { + max-height: 100px; + overflow: auto; + font-size: 11px; + color: var(--deck-text); + background: transparent; + border: 0; + padding: 2px 0; +} + +.eventOutput { + max-height: 200px; + overflow: auto; + font-size: 11px; + color: var(--deck-text); + background: rgba(4, 8, 13, 0.22); + border: 1px solid var(--deck-line); + border-radius: var(--radius-sm); + padding: 8px; + margin-top: 6px; +} + +.eventOutput.collapsed { + max-height: 0; + overflow: hidden; + padding: 0; + border: 0; +} + +.trajectoryFinalAnswer { + border: 1px solid var(--deck-line); + border-radius: var(--radius-md); + padding: 12px; + background: rgba(87, 227, 155, 0.04); +} + +.rawJsonView { + max-height: 480px; + overflow: auto; + font-size: 11px; + color: var(--deck-text); + background: rgba(4, 8, 13, 0.22); + border: 1px solid var(--deck-line); + border-radius: var(--radius-md); + padding: 12px; + margin: 0; +} + +.trajectoryPage { + display: grid; + gap: 16px; +} + +.trajectoryControls { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 10px; +} + +.trajectoryControls select { + min-width: 160px; +} + +.trajectoryContent { + min-height: 200px; +} diff --git a/tests/test_dashboard_api.py b/tests/test_dashboard_api.py new file mode 100644 index 00000000..596c50ff --- /dev/null +++ b/tests/test_dashboard_api.py @@ -0,0 +1,380 @@ +"""End-to-end API tests for the AReno dashboard server. + +Starts the server on a random port, creates train jobs via the HTTP API, +and exercises every endpoint via urllib. +""" + +from __future__ import annotations + +import json +import socket +import subprocess +import sys +import time +import urllib.error +import urllib.parse +import urllib.request +from pathlib import Path + +import pytest + +SERVER_PATH = str(Path(__file__).resolve().parent.parent / "areno" / "dashboard" / "server.py") + + +def _free_port() -> int: + s = socket.socket() + s.bind(("127.0.0.1", 0)) + port = s.getsockname()[1] + s.close() + return port + + +@pytest.fixture(scope="module") +def server(): + port = _free_port() + proc = subprocess.Popen( + [sys.executable, SERVER_PATH, "--host", "127.0.0.1", "--port", str(port)], + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, + env={**__import__("os").environ, "PYTHONPATH": str(Path(__file__).resolve().parent.parent)}, + ) + base = f"http://127.0.0.1:{port}" + # Wait for server to be ready + for _ in range(30): + try: + urllib.request.urlopen(base + "/api/env", timeout=2) + break + except Exception: + time.sleep(0.2) + else: + out = proc.stdout.read(2000) if proc.stdout else "" + pytest.fail(f"server did not start:\n{out}") + + yield base + + proc.terminate() + proc.wait(timeout=5) + + +def _get(base, path): + url = base + path + with urllib.request.urlopen(url, timeout=10) as resp: + return resp.status, json.loads(resp.read().decode()) + + +def _post(base, path, payload): + data = json.dumps(payload).encode() + req = urllib.request.Request(base + path, data=data, method="POST") + req.add_header("Content-Type", "application/json") + with urllib.request.urlopen(req, timeout=10) as resp: + return resp.status, json.loads(resp.read().decode()) + + +def _create_train_job(server, **overrides): + config = {"algo": "sft", "ckpt": "Qwen/Qwen3-0.6B", "dataset_path": "/tmp/data.jsonl"} + config.update(overrides) + _, body = _post(server, "/api/jobs/train", config) + return body["job"]["id"] + + +# --------------------------------------------------------------------------- +# /api/env +# --------------------------------------------------------------------------- + +class TestApiEnv: + def test_env_returns_ok(self, server): + status, body = _get(server, "/api/env") + assert status == 200 + assert isinstance(body, dict) + + +# --------------------------------------------------------------------------- +# /api/jobs (list) +# --------------------------------------------------------------------------- + +class TestApiJobsList: + def test_jobs_list_returns_ok(self, server): + status, body = _get(server, "/api/jobs") + assert status == 200 + assert "jobs" in body + assert isinstance(body["jobs"], list) + + def test_created_job_appears_in_list(self, server): + job_id = _create_train_job(server, algo="gspo", ckpt="Qwen/Qwen3-1.7B") + _, body = _get(server, "/api/jobs") + ids = [j["id"] for j in body["jobs"]] + assert job_id in ids + + +# --------------------------------------------------------------------------- +# /api/jobs/train (POST) +# --------------------------------------------------------------------------- + +class TestApiJobsTrain: + def test_train_returns_job_summary(self, server): + _, body = _post(server, "/api/jobs/train", { + "algo": "sft", + "ckpt": "Qwen/Qwen3-0.6B", + "dataset_path": "/tmp/data.jsonl", + }) + assert "job" in body + job = body["job"] + assert job["kind"] == "train" + assert "id" in job + assert "status" in job + + +# --------------------------------------------------------------------------- +# /api/jobs/ (GET detail) +# --------------------------------------------------------------------------- + +class TestApiJobDetail: + def test_job_detail_returns_full_job(self, server): + job_id = _create_train_job(server) + status, body = _get(server, f"/api/jobs/{job_id}") + assert status == 200 + assert body["job"]["id"] == job_id + assert "command" in body["job"] + assert "status" in body["job"] + + def test_job_detail_not_found(self, server): + with pytest.raises(urllib.error.HTTPError) as exc_info: + _get(server, "/api/jobs/nonexistent-id") + assert exc_info.value.code == 404 + + +# --------------------------------------------------------------------------- +# /api/jobs//stop (POST) +# --------------------------------------------------------------------------- + +class TestApiJobStop: + def test_stop_job(self, server): + job_id = _create_train_job(server, ckpt="test-stop") + status, body = _post(server, f"/api/jobs/{job_id}/stop", {}) + assert status == 200 + assert body["stopped"] is True + + +# --------------------------------------------------------------------------- +# /api/jobs//metrics (GET) +# --------------------------------------------------------------------------- + +class TestApiJobMetrics: + def test_metrics_list(self, server): + job_id = _create_train_job(server) + status, body = _get(server, f"/api/jobs/{job_id}/metrics") + assert status == 200 + assert "metrics" in body + assert isinstance(body["metrics"], list) + + +# --------------------------------------------------------------------------- +# /api/jobs//trajectory (GET) +# --------------------------------------------------------------------------- + +class TestApiTrajectory: + def test_trajectory_empty_job_returns_not_found(self, server): + job_id = _create_train_job(server, algo="gspo") + params = urllib.parse.urlencode({"step": 0, "prompt_idx": 0, "sample_idx": 0}) + status, body = _get(server, f"/api/jobs/{job_id}/trajectory?{params}") + assert status == 200 + assert body["valid"] is False + + def test_trajectory_job_not_found(self, server): + params = urllib.parse.urlencode({"step": 0, "prompt_idx": 0, "sample_idx": 0}) + status, body = _get(server, f"/api/jobs/bad-id/trajectory?{params}") + assert body["valid"] is False + + def test_trajectory_invalid_params_returns_error(self, server): + job_id = _create_train_job(server) + with pytest.raises(urllib.error.HTTPError): + _get(server, f"/api/jobs/{job_id}/trajectory?step=abc") + + +# --------------------------------------------------------------------------- +# /api/jobs/serve (POST) +# --------------------------------------------------------------------------- + +class TestApiJobsServe: + def test_serve_returns_job_summary(self, server): + _, body = _post(server, "/api/jobs/serve", { + "model_path": "Qwen/Qwen3-0.6B", + }) + assert "job" in body + assert body["job"]["kind"] == "serve" + + +# --------------------------------------------------------------------------- +# /api/agent (POST) +# --------------------------------------------------------------------------- + +class TestApiAgent: + def test_agent_returns_response(self, server): + status, body = _post(server, "/api/agent", { + "messages": [{"role": "user", "content": "list files in current directory"}], + }) + assert status == 200 + assert "response" in body or "error" in body + + +# --------------------------------------------------------------------------- +# Illegal input — invalid payloads and malformed requests +# --------------------------------------------------------------------------- + +class TestIllegalInput: + def test_train_empty_config(self, server): + """POST /api/jobs/train with empty dict should still create a job.""" + _, body = _post(server, "/api/jobs/train", {}) + assert "job" in body + assert body["job"]["kind"] == "train" + + def test_train_null_values_ignored(self, server): + """None values should not crash command building.""" + _, body = _post(server, "/api/jobs/train", { + "algo": "sft", "ckpt": None, "dataset_path": None, + "batch_size": None, "lr": None, + }) + assert "job" in body + + def test_train_nonexistent_algo(self, server): + """An unknown algo string should still produce a command (validation + is deferred to the CLI, not the dashboard server).""" + _, body = _post(server, "/api/jobs/train", { + "algo": "fake_algo", "ckpt": "x", "dataset_path": "/tmp/x.jsonl", + }) + assert "job" in body + cmd = body["job"].get("command") or [] + assert "--algo" in cmd + + def test_serve_empty_config(self, server): + """POST /api/jobs/serve with no model_path should not crash.""" + _, body = _post(server, "/api/jobs/serve", {}) + assert "job" in body + assert body["job"]["kind"] == "serve" + + def test_serve_null_model_path(self, server): + _, body = _post(server, "/api/jobs/serve", {"model_path": None}) + assert "job" in body + + def test_stop_nonexistent_job(self, server): + """Stopping a job id that doesn't exist should return stopped=False.""" + _, body = _post(server, "/api/jobs/bad-id/stop", {}) + assert body["stopped"] is False + + def test_agent_empty_messages(self, server): + _, body = _post(server, "/api/agent", {"messages": []}) + assert "response" in body or "error" in body + + def test_agent_no_messages_key(self, server): + _, body = _post(server, "/api/agent", {}) + assert "response" in body or "error" in body + + def test_agent_garbage_payload(self, server): + """Non-dict messages should not crash the server.""" + _, body = _post(server, "/api/agent", {"messages": "not a list"}) + assert "response" in body or "error" in body + + +# --------------------------------------------------------------------------- +# Boundary — extreme values, missing fields, edge cases +# --------------------------------------------------------------------------- + +class TestBoundaryValues: + def test_train_empty_string_values(self, server): + """Empty strings should be treated like None and omitted from command.""" + _, body = _post(server, "/api/jobs/train", { + "algo": "", "ckpt": "", "dataset_path": "", + }) + assert "job" in body + + def test_train_very_long_string(self, server): + """A 10k-char checkpoint path should not crash.""" + long_path = "a" * 10000 + _, body = _post(server, "/api/jobs/train", { + "algo": "sft", "ckpt": long_path, "dataset_path": "/tmp/x.jsonl", + }) + assert "job" in body + + def test_train_special_chars_in_ckpt(self, server): + """Special shell characters should be handled by shlex, not injected.""" + _, body = _post(server, "/api/jobs/train", { + "algo": "sft", "ckpt": "model; rm -rf /", "dataset_path": "/tmp/x.jsonl", + }) + assert "job" in body + + def test_train_numeric_zero_values(self, server): + """Zero is a valid numeric value and should appear in the command.""" + _, body = _post(server, "/api/jobs/train", { + "algo": "sft", "ckpt": "x", "dataset_path": "/tmp/x.jsonl", + "batch_size": 0, "lr": 0, "epochs": 0, + }) + assert "job" in body + + def test_train_negative_values(self, server): + """Negative numbers should pass through (validated by CLI later).""" + _, body = _post(server, "/api/jobs/train", { + "algo": "sft", "ckpt": "x", "dataset_path": "/tmp/x.jsonl", + "lr": -1, "batch_size": -10, + }) + assert "job" in body + + def test_train_boolean_flags(self, server): + """Boolean true flags should be appended as bare flags.""" + _, body = _post(server, "/api/jobs/train", { + "algo": "sft", "ckpt": "x", "dataset_path": "/tmp/x.jsonl", + "greedy": True, "adam_8bit": True, + "activation_checkpointing": True, + }) + assert "job" in body + + def test_train_false_boolean_flags(self, server): + """Boolean false flags should NOT be appended.""" + _, body = _post(server, "/api/jobs/train", { + "algo": "sft", "ckpt": "x", "dataset_path": "/tmp/x.jsonl", + "greedy": False, "adam_8bit": False, + "activation_checkpointing": False, + }) + assert "job" in body + + def test_train_extra_unknown_fields(self, server): + """Unknown config fields should be silently ignored.""" + _, body = _post(server, "/api/jobs/train", { + "algo": "sft", "ckpt": "x", "dataset_path": "/tmp/x.jsonl", + "unknown_field": "value", "random_key": 123, + }) + assert "job" in body + + def test_trajectory_negative_indices(self, server): + job_id = _create_train_job(server, algo="gspo") + params = urllib.parse.urlencode({"step": -1, "prompt_idx": -1, "sample_idx": -1}) + _, body = _get(server, f"/api/jobs/{job_id}/trajectory?{params}") + assert body["valid"] is False + + def test_trajectory_very_large_indices(self, server): + job_id = _create_train_job(server, algo="gspo") + params = urllib.parse.urlencode({"step": 999999, "prompt_idx": 999999, "sample_idx": 999999}) + _, body = _get(server, f"/api/jobs/{job_id}/trajectory?{params}") + assert body["valid"] is False + + def test_trajectory_missing_all_params(self, server): + """No query params should use defaults (step=0, prompt_idx=-1, sample_idx=-1).""" + job_id = _create_train_job(server, algo="gspo") + _, body = _get(server, f"/api/jobs/{job_id}/trajectory") + assert body["valid"] is False + + def test_metrics_unregistered_job(self, server): + _, body = _get(server, "/api/jobs/bad-id/metrics") + assert status_or_ok(body) + assert "metrics" in body + + def test_stop_already_stopped_job(self, server): + """Stopping a job twice should not crash; server is idempotent.""" + job_id = _create_train_job(server, ckpt="double-stop") + _, body1 = _post(server, f"/api/jobs/{job_id}/stop", {}) + assert body1["stopped"] is True + _, body2 = _post(server, f"/api/jobs/{job_id}/stop", {}) + assert "stopped" in body2 + + +def status_or_ok(body): + return isinstance(body, dict) + diff --git a/tests/test_dashboard_trajectory.py b/tests/test_dashboard_trajectory.py new file mode 100644 index 00000000..bb10c820 --- /dev/null +++ b/tests/test_dashboard_trajectory.py @@ -0,0 +1,256 @@ +"""Focused CPU tests for the agentic trajectory detail page in the dashboard server. + +Tests cover: + - Core logic: build_trajectory_detail success path + - Invalid input: non-agentic samples, missing fields, malformed data + - Boundary values: empty messages, large tool output, truncated loss mask + - Privacy-safe defaults: raw sample is included but not executed + - Deterministic output for the same input +""" + +from __future__ import annotations + +import json + +import pytest + +from areno.dashboard.server import ( + build_trajectory_detail, + validate_trajectory_sample, +) + + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + +def _agentic_sample(**overrides): + """Create a minimal valid agentic rollout sample.""" + base = { + "kind": "agentic", + "step": 1, + "prompt_idx": 0, + "sample_idx": 0, + "prompt": "What is 2+2?", + "messages": [ + {"role": "user", "content": "What is 2+2?"}, + { + "role": "assistant", + "content": None, + "tool_calls": [ + { + "id": "call-1", + "type": "function", + "function": {"name": "calculate", "arguments": '{"expr": "2+2"}'}, + } + ], + }, + {"role": "tool", "tool_call_id": "call-1", "content": "4"}, + {"role": "assistant", "content": "The answer is 4."}, + ], + "final_answer": "The answer is 4.", + "tool_calls": [ + {"id": "call-1", "type": "function", "function": {"name": "calculate", "arguments": '{"expr": "2+2"}'}} + ], + "tool_results": [ + {"name": "calculate", "ok": True, "result": 4}, + ], + "loss_mask_true": 8, + "loss_mask_total": 12, + "first_loss_idx": 4, + "loss_mask": [False, False, False, False, True, True, True, True, True, True, True, True], + "tokens": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], + "prompt_tokens": [1, 2, 3, 4], + "response_tokens": [5, 6, 7, 8, 9, 10, 11, 12], + "end_reason": "completed", + } + base.update(overrides) + return base + + +# --------------------------------------------------------------------------- +# validate_trajectory_sample +# --------------------------------------------------------------------------- + +class TestValidateTrajectorySample: + def test_valid_agentic_sample_returns_no_errors(self): + sample = _agentic_sample() + assert validate_trajectory_sample(sample) == [] + + def test_non_agentic_kind_is_invalid(self): + sample = _agentic_sample(kind="rollout") + errors = validate_trajectory_sample(sample) + assert len(errors) == 1 + assert "not 'agentic'" in errors[0] + + def test_missing_kind_is_invalid(self): + sample = _agentic_sample() + del sample["kind"] + errors = validate_trajectory_sample(sample) + assert "missing" in errors[0] + + def test_empty_messages_is_invalid(self): + sample = _agentic_sample(messages=[]) + errors = validate_trajectory_sample(sample) + assert any("messages" in e for e in errors) + + def test_non_dict_input_is_invalid(self): + errors = validate_trajectory_sample("not a dict") # type: ignore[arg-type] + assert len(errors) == 1 + assert "not a dict" in errors[0] + + +# --------------------------------------------------------------------------- +# build_trajectory_detail — success path +# --------------------------------------------------------------------------- + +class TestBuildTrajectoryDetailSuccess: + def test_returns_valid_flag(self): + detail = build_trajectory_detail(_agentic_sample()) + assert detail["valid"] is True + + def test_preserves_step_and_indices(self): + sample = _agentic_sample(step=7, prompt_idx=3, sample_idx=2) + detail = build_trajectory_detail(sample) + assert detail["step"] == 7 + assert detail["prompt_idx"] == 3 + assert detail["sample_idx"] == 2 + + def test_events_are_in_chronological_order(self): + detail = build_trajectory_detail(_agentic_sample()) + roles = [event["role"] for event in detail["events"]] + assert roles == ["user", "assistant", "tool", "assistant"] + + def test_tool_calls_are_attached_to_assistant_message(self): + detail = build_trajectory_detail(_agentic_sample()) + assistant_event = detail["events"][1] + assert "tool_calls" in assistant_event + assert assistant_event["tool_calls"][0]["function"]["name"] == "calculate" + + def test_tool_result_is_interleaved_with_tool_message(self): + detail = build_trajectory_detail(_agentic_sample()) + tool_event = detail["events"][2] + assert tool_event["role"] == "tool" + assert "tool_result" in tool_event + assert tool_event["tool_result"]["name"] == "calculate" + + def test_final_answer_is_extracted(self): + detail = build_trajectory_detail(_agentic_sample()) + assert detail["final_answer"] == "The answer is 4." + + def test_token_counts_are_computed(self): + sample = _agentic_sample(prompt_tokens=[1, 2, 3], response_tokens=[4, 5]) + detail = build_trajectory_detail(sample) + assert detail["token_counts"]["prompt_tokens"] == 3 + assert detail["token_counts"]["response_tokens"] == 2 + + def test_training_mask_summary(self): + detail = build_trajectory_detail(_agentic_sample(loss_mask_true=8, loss_mask_total=12, first_loss_idx=4)) + assert detail["training_mask"]["loss_mask_true"] == 8 + assert detail["training_mask"]["loss_mask_total"] == 12 + assert detail["training_mask"]["first_loss_idx"] == 4 + + def test_end_reason_is_preserved(self): + detail = build_trajectory_detail(_agentic_sample(end_reason="max_tokens")) + assert detail["end_reason"] == "max_tokens" + + def test_tool_call_and_result_counts(self): + detail = build_trajectory_detail(_agentic_sample()) + assert detail["tool_call_count"] == 1 + assert detail["tool_result_count"] == 1 + + def test_default_end_reason_when_missing(self): + sample = _agentic_sample() + del sample["end_reason"] + detail = build_trajectory_detail(sample) + assert detail["end_reason"] == "completed" + + +# --------------------------------------------------------------------------- +# build_trajectory_detail — invalid input +# --------------------------------------------------------------------------- + +class TestBuildTrajectoryDetailInvalid: + def test_non_agentic_returns_error(self): + detail = build_trajectory_detail({"kind": "rollout", "messages": [{"role": "user", "content": "hi"}]}) + assert detail["valid"] is False + assert "error" in detail + + def test_missing_messages_returns_error(self): + detail = build_trajectory_detail({"kind": "agentic", "prompt": "p"}) + assert detail["valid"] is False + assert "messages" in detail["error"] + + +# --------------------------------------------------------------------------- +# Boundary values +# --------------------------------------------------------------------------- + +class TestBoundaryValues: + def test_empty_tool_results_with_tool_messages(self): + sample = _agentic_sample(tool_results=[], messages=[ + {"role": "user", "content": "hi"}, + {"role": "assistant", "content": "hello"}, + ]) + detail = build_trajectory_detail(sample) + assert detail["valid"] is True + assert detail["tool_result_count"] == 0 + + def test_truncated_loss_mask_is_marked(self): + sample = _agentic_sample(loss_mask=[True, True], loss_mask_true=2, loss_mask_total=100) + detail = build_trajectory_detail(sample) + assert detail["training_mask"]["truncated"] is True + + def test_non_truncated_loss_mask(self): + sample = _agentic_sample( + loss_mask=[True] * 12, + loss_mask_true=12, + loss_mask_total=12, + ) + detail = build_trajectory_detail(sample) + assert detail["training_mask"]["truncated"] is False + + def test_large_tool_result_does_not_crash(self): + big_result = {"name": "search", "ok": True, "data": "x" * 5000} + sample = _agentic_sample(tool_results=[big_result]) + detail = build_trajectory_detail(sample) + assert detail["valid"] is True + assert detail["tool_result_count"] == 1 + + def test_no_final_answer(self): + sample = _agentic_sample(final_answer="") + detail = build_trajectory_detail(sample) + assert detail["final_answer"] == "" + + +# --------------------------------------------------------------------------- +# Determinism +# --------------------------------------------------------------------------- + +class TestDeterminism: + def test_same_input_produces_same_output(self): + sample = _agentic_sample() + detail1 = build_trajectory_detail(json.loads(json.dumps(sample))) + detail2 = build_trajectory_detail(json.loads(json.dumps(sample))) + assert detail1 == detail2 + + +# --------------------------------------------------------------------------- +# Privacy-safe defaults +# --------------------------------------------------------------------------- + +class TestPrivacySafeDefaults: + def test_never_includes_full_training_data_in_detail_fields(self): + sample = _agentic_sample() + detail = build_trajectory_detail(sample) + # Detail should not contain raw tokens in the structured output + # (only counts). The "raw" key is added by trajectory_detail(), not + # build_trajectory_detail(). + assert "tokens" not in detail + assert "loss_mask" not in detail + + def test_loss_mask_only_exposed_as_counts(self): + detail = build_trajectory_detail(_agentic_sample()) + assert "loss_mask" not in detail + assert "training_mask" in detail + assert isinstance(detail["training_mask"]["loss_mask_true"], int) From a279377d2705143a49bab8fa48dd3e5afd7327dc Mon Sep 17 00:00:00 2001 From: "chengyan.ts" Date: Fri, 31 Jul 2026 11:47:05 +0800 Subject: [PATCH 2/2] feat: add privacy-safe raw control, integration tests, and docs for trajectory detail - trajectory_detail() now defaults to omitting the raw sample dict; pass include_raw=True (or ?include_raw=true query param) to attach it - HTTP route parses include_raw query parameter for the /api/jobs//trajectory endpoint - Add TestTrajectoryDetailIntegration covering job/sample resolution, error paths, include_raw behavior, and large-trace robustness (7 new tests) - Add 'Dashboard trajectory detail page' section to docs/cli/observability.rst with API reference, response field table, and curl example Closes #267 --- areno/dashboard/server.py | 31 +++++-- docs/cli/observability.rst | 124 ++++++++++++++++++++++++++ tests/test_dashboard_trajectory.py | 134 +++++++++++++++++++++++++++-- 3 files changed, 277 insertions(+), 12 deletions(-) diff --git a/areno/dashboard/server.py b/areno/dashboard/server.py index 83f54468..e1f5b71f 100644 --- a/areno/dashboard/server.py +++ b/areno/dashboard/server.py @@ -1506,9 +1506,12 @@ def build_trajectory_detail(sample: dict[str, Any]) -> dict[str, Any]: - events: ordered list of {type, role, content, tool_calls, tool_result} - final_answer: str - token_counts: {prompt_tokens, response_tokens, loss_mask_true, loss_mask_total} - - training_mask: {loss_mask_true, loss_mask_total, first_loss_idx} + - training_mask: {loss_mask_true, loss_mask_total, first_loss_idx, truncated} - end_reason: str - - raw: the original sample dict (privacy-safe: no full training data) + - tool_call_count, tool_result_count: int + + The raw sample dict is NOT included here; call trajectory_detail() with + include_raw=True to attach it under the "raw" key when needed. """ errors = validate_trajectory_sample(sample) if errors: @@ -1569,13 +1572,25 @@ def build_trajectory_detail(sample: dict[str, Any]) -> dict[str, Any]: } -def trajectory_detail(job_id: str | None, step: int, prompt_idx: int, sample_idx: int) -> dict[str, Any]: - """Resolve a single trajectory sample from a job's rollout samples.""" +def trajectory_detail( + job_id: str | None, + step: int, + prompt_idx: int, + sample_idx: int, + *, + include_raw: bool = False, +) -> dict[str, Any]: + """Resolve a single trajectory sample from a job's rollout samples. + + By default the response omits the raw sample dict to keep output + privacy-safe. Pass ``include_raw=True`` to attach it under the ``raw`` key. + """ job = STATE.get_job(job_id) if job is None: return {"error": "job not found", "valid": False} candidates = [ - s for s in job.samples + s + for s in job.samples if int(s.get("step", 0)) == step and int(s.get("prompt_idx", -1)) == prompt_idx and int(s.get("sample_idx", -1)) == sample_idx @@ -1584,7 +1599,8 @@ def trajectory_detail(job_id: str | None, step: int, prompt_idx: int, sample_idx return {"error": "trajectory sample not found", "valid": False} sample = candidates[-1] detail = build_trajectory_detail(sample) - detail["raw"] = sample + if include_raw: + detail["raw"] = sample return detail @@ -1618,7 +1634,8 @@ def do_GET(self) -> None: except ValueError: self.error("step, prompt_idx, and sample_idx must be integers") return - self.json(trajectory_detail(job_id, step, prompt_idx, sample_idx)) + include_raw = query.get("include_raw", ["false"])[0].lower() in ("1", "true", "yes") + self.json(trajectory_detail(job_id, step, prompt_idx, sample_idx, include_raw=include_raw)) elif path.startswith("/api/jobs/"): job = STATE.get_job(path.split("/")[-1]) if not job: diff --git a/docs/cli/observability.rst b/docs/cli/observability.rst index 110f710d..675ebcf8 100644 --- a/docs/cli/observability.rst +++ b/docs/cli/observability.rst @@ -175,3 +175,127 @@ When a trajectory is dropped for exceeding the model context window, counts, message counts, assistant turn counts, tool-result counts, and a short prompt preview. This is the fastest way to debug overlong agentic examples without dumping every token in every trajectory. + +Dashboard trajectory detail page +-------------------------------- + +The AReno dashboard includes a **Trajectory** page that renders the full +contents of an agentic rollout sample in chronological order. Open the +dashboard, select a train job that has agentic samples, pick a step and +sample, and the page renders: + +* **Events timeline** — model messages (user / assistant / tool), tool calls + attached to the originating assistant message, and interleaved tool results. + Long tool output is collapsed by default; click to expand. +* **Final answer** — the last assistant response extracted from the sample. +* **Token counts** — prompt tokens, response tokens, and total token-row + length. +* **Training-mask status** — ``loss_mask_true`` / ``loss_mask_total``, + ``first_loss_idx``, a visual mask bar, and a ``truncated`` flag when the + stored mask is shorter than the declared total. +* **End reason** — completion cause (defaults to ``completed`` when missing). + +Tool calls are displayed as read-only text; the dashboard never executes a +displayed call. Long tool results are truncated to 200 characters in the inline +view and can be expanded in the standalone tool-result card. + +A **Raw JSON** toggle is available for inspecting the full sample dict +(messages, tokens, loss_mask, etc.). The structured view omits raw token and +loss-mask sequences — only counts are surfaced — to keep the default output +privacy-safe. + +API endpoint +~~~~~~~~~~~~ + +.. code-block:: text + + GET /api/jobs//trajectory?step=&prompt_idx=&sample_idx=&include_raw= + +Query parameters: + +``step`` + Training step of the desired sample (integer, required). + +``prompt_idx`` + Prompt index within the step (integer, required). + +``sample_idx`` + Sample index within the prompt (integer, required). + +``include_raw`` + Whether to attach the full sample dict under the ``raw`` key. Defaults to + ``false``. Set to ``true`` to inspect tokens, loss_mask, and other fields + not present in the structured detail. + +Response fields (when ``valid`` is ``true``): + +.. list-table:: + :header-rows: 1 + :widths: 28 72 + + * - Field + - Meaning + * - ``valid`` + - ``true`` if the sample is a valid agentic trajectory. + * - ``step`` / ``prompt_idx`` / ``sample_idx`` + - Locating indices from the sample. + * - ``events`` + - Chronologically ordered list of message and tool-result entries. + * - ``final_answer`` + - Last assistant response string (may be empty). + * - ``token_counts`` + - ``prompt_tokens``, ``response_tokens``, ``loss_mask_true``, + ``loss_mask_total``, ``token_row_len``. + * - ``training_mask`` + - ``loss_mask_true``, ``loss_mask_total``, ``first_loss_idx``, + ``truncated``. + * - ``end_reason`` + - Completion cause string; defaults to ``"completed"``. + * - ``tool_call_count`` / ``tool_result_count`` + - Number of tool calls and results in the sample. + * - ``raw`` + - Full original sample dict. **Only present when ``include_raw=true``.** + +When ``valid`` is ``false``, the response contains an ``error`` field with a +human-readable message instead of the fields above. + +Example +~~~~~~~ + +.. code-block:: bash + + curl "http://127.0.0.1:8765/api/jobs//trajectory?step=1&prompt_idx=0&sample_idx=0" + +Returns the structured detail without raw training data: + +.. code-block:: json + + { + "valid": true, + "step": 1, + "prompt_idx": 0, + "sample_idx": 0, + "kind": "agentic", + "events": [ + {"type": "message", "role": "user", "content": "What is 2+2?"}, + {"type": "message", "role": "assistant", "content": "", "tool_calls": [...]}, + {"type": "message", "role": "tool", "content": "4", "tool_result": {"name": "calculate", "ok": true, "result": 4}}, + {"type": "message", "role": "assistant", "content": "The answer is 4."} + ], + "final_answer": "The answer is 4.", + "token_counts": {"prompt_tokens": 4, "response_tokens": 8, "loss_mask_true": 8, "loss_mask_total": 12, "token_row_len": 12}, + "training_mask": {"loss_mask_true": 8, "loss_mask_total": 12, "first_loss_idx": 4, "truncated": false}, + "end_reason": "completed", + "tool_call_count": 1, + "tool_result_count": 1 + } + +Limitations +~~~~~~~~~~~ + +* Only ``kind == "agentic"`` samples are supported. Rollout samples without + agent messages return a validation error. +* The page reads existing local rollout-sample artifacts; it does not execute + model inference or tool calls. +* Raw token and loss-mask sequences are omitted from the structured response + by default. Use ``include_raw=true`` when full inspection is needed. diff --git a/tests/test_dashboard_trajectory.py b/tests/test_dashboard_trajectory.py index bb10c820..5284ac2f 100644 --- a/tests/test_dashboard_trajectory.py +++ b/tests/test_dashboard_trajectory.py @@ -6,6 +6,9 @@ - Boundary values: empty messages, large tool output, truncated loss mask - Privacy-safe defaults: raw sample is included but not executed - Deterministic output for the same input + - Integration: trajectory_detail resolves samples from registered jobs, + validates query parameters, and controls raw-sample exposure via + include_raw """ from __future__ import annotations @@ -15,15 +18,18 @@ import pytest from areno.dashboard.server import ( + STATE, + Job, build_trajectory_detail, + trajectory_detail, validate_trajectory_sample, ) - # --------------------------------------------------------------------------- # Fixtures # --------------------------------------------------------------------------- + def _agentic_sample(**overrides): """Create a minimal valid agentic rollout sample.""" base = { @@ -72,6 +78,7 @@ def _agentic_sample(**overrides): # validate_trajectory_sample # --------------------------------------------------------------------------- + class TestValidateTrajectorySample: def test_valid_agentic_sample_returns_no_errors(self): sample = _agentic_sample() @@ -104,6 +111,7 @@ def test_non_dict_input_is_invalid(self): # build_trajectory_detail — success path # --------------------------------------------------------------------------- + class TestBuildTrajectoryDetailSuccess: def test_returns_valid_flag(self): detail = build_trajectory_detail(_agentic_sample()) @@ -170,6 +178,7 @@ def test_default_end_reason_when_missing(self): # build_trajectory_detail — invalid input # --------------------------------------------------------------------------- + class TestBuildTrajectoryDetailInvalid: def test_non_agentic_returns_error(self): detail = build_trajectory_detail({"kind": "rollout", "messages": [{"role": "user", "content": "hi"}]}) @@ -186,12 +195,16 @@ def test_missing_messages_returns_error(self): # Boundary values # --------------------------------------------------------------------------- + class TestBoundaryValues: def test_empty_tool_results_with_tool_messages(self): - sample = _agentic_sample(tool_results=[], messages=[ - {"role": "user", "content": "hi"}, - {"role": "assistant", "content": "hello"}, - ]) + sample = _agentic_sample( + tool_results=[], + messages=[ + {"role": "user", "content": "hi"}, + {"role": "assistant", "content": "hello"}, + ], + ) detail = build_trajectory_detail(sample) assert detail["valid"] is True assert detail["tool_result_count"] == 0 @@ -227,6 +240,7 @@ def test_no_final_answer(self): # Determinism # --------------------------------------------------------------------------- + class TestDeterminism: def test_same_input_produces_same_output(self): sample = _agentic_sample() @@ -239,6 +253,7 @@ def test_same_input_produces_same_output(self): # Privacy-safe defaults # --------------------------------------------------------------------------- + class TestPrivacySafeDefaults: def test_never_includes_full_training_data_in_detail_fields(self): sample = _agentic_sample() @@ -254,3 +269,112 @@ def test_loss_mask_only_exposed_as_counts(self): assert "loss_mask" not in detail assert "training_mask" in detail assert isinstance(detail["training_mask"]["loss_mask_true"], int) + + +# --------------------------------------------------------------------------- +# Integration: trajectory_detail (job + sample resolution, include_raw) +# --------------------------------------------------------------------------- + + +@pytest.fixture() +def _registered_job(): + """Register a job with one agentic sample in the global STATE, clean up after.""" + job = Job( + kind="train", + name="test trajectory job", + command=["echo", "noop"], + config={}, + metrics_dir=None, + ) + sample = _agentic_sample() + job.samples.append(sample) + job._sample_keys.add((sample["step"], sample["prompt_idx"], sample["sample_idx"])) + STATE.jobs[job.id] = job + yield job + STATE.jobs.pop(job.id, None) + + +class TestTrajectoryDetailIntegration: + def test_resolves_sample_from_registered_job(self, _registered_job): + detail = trajectory_detail(_registered_job.id, step=1, prompt_idx=0, sample_idx=0) + assert detail["valid"] is True + assert detail["step"] == 1 + assert detail["prompt_idx"] == 0 + assert detail["sample_idx"] == 0 + + def test_job_not_found_returns_error(self): + detail = trajectory_detail("nonexistent-job-id", step=0, prompt_idx=0, sample_idx=0) + assert detail["valid"] is False + assert "job not found" in detail["error"] + + def test_sample_not_found_returns_error(self, _registered_job): + detail = trajectory_detail(_registered_job.id, step=999, prompt_idx=0, sample_idx=0) + assert detail["valid"] is False + assert "trajectory sample not found" in detail["error"] + + def test_raw_omitted_by_default(self, _registered_job): + detail = trajectory_detail(_registered_job.id, step=1, prompt_idx=0, sample_idx=0) + assert "raw" not in detail + + def test_raw_included_when_requested(self, _registered_job): + detail = trajectory_detail(_registered_job.id, step=1, prompt_idx=0, sample_idx=0, include_raw=True) + assert "raw" in detail + assert detail["raw"]["kind"] == "agentic" + # Raw contains the full training data (tokens, loss_mask) that the + # structured detail deliberately omits. + assert "tokens" in detail["raw"] + assert "loss_mask" in detail["raw"] + + def test_non_agentic_sample_in_job_returns_invalid(self, _registered_job): + _registered_job.samples.append( + { + "kind": "rollout", + "step": 2, + "prompt_idx": 0, + "sample_idx": 0, + "messages": [{"role": "user", "content": "hi"}], + } + ) + _registered_job._sample_keys.add((2, 0, 0)) + detail = trajectory_detail(_registered_job.id, step=2, prompt_idx=0, sample_idx=0) + assert detail["valid"] is False + assert "not 'agentic'" in detail["error"] + + def test_large_trace_does_not_crash(self, _registered_job): + """A sample with many messages and tool results resolves without error.""" + messages = [{"role": "user", "content": "start"}] + tool_calls = [] + tool_results = [] + for i in range(50): + messages.append( + { + "role": "assistant", + "content": None, + "tool_calls": [ + { + "id": f"call-{i}", + "type": "function", + "function": {"name": f"tool_{i}", "arguments": "{}"}, + } + ], + } + ) + messages.append({"role": "tool", "tool_call_id": f"call-{i}", "content": f"result {i}"}) + tool_calls.append( + {"id": f"call-{i}", "type": "function", "function": {"name": f"tool_{i}", "arguments": "{}"}} + ) + tool_results.append({"name": f"tool_{i}", "ok": True, "result": f"result {i}"}) + messages.append({"role": "assistant", "content": "done"}) + sample = _agentic_sample( + step=3, + messages=messages, + tool_calls=tool_calls, + tool_results=tool_results, + ) + _registered_job.samples.append(sample) + _registered_job._sample_keys.add((3, 0, 0)) + detail = trajectory_detail(_registered_job.id, step=3, prompt_idx=0, sample_idx=0) + assert detail["valid"] is True + assert detail["tool_call_count"] == 50 + assert detail["tool_result_count"] == 50 + assert len(detail["events"]) == 102 # 50 assistant + 50 tool + 1 user + 1 final assistant