@agentprojectcontext/apx 1.31.0 → 1.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -520,17 +520,17 @@ Please change the parent <Route path="${j}"> to <Route path="${j==="/"?"*":`${j}
520
520
  * LICENSE file in the root directory of this source tree.
521
521
  */var m1;function cM(){if(m1)return Ap;m1=1;var e=Xi(),n=kS();function s(m,h){return m===h&&(m!==0||1/m===1/h)||m!==m&&h!==h}var r=typeof Object.is=="function"?Object.is:s,i=n.useSyncExternalStore,c=e.useRef,d=e.useEffect,f=e.useMemo,g=e.useDebugValue;return Ap.useSyncExternalStoreWithSelector=function(m,h,x,y,w){var S=c(null);if(S.current===null){var _={hasValue:!1,value:null};S.current=_}else _=S.current;S=f(function(){function E(M){if(!k){if(k=!0,N=M,M=y(M),w!==void 0&&_.hasValue){var O=_.value;if(w(O,M))return R=O}return R=M}if(O=R,r(N,M))return O;var U=y(M);return w!==void 0&&w(O,U)?(N=M,O):(N=M,R=U)}var k=!1,N,R,A=x===void 0?null:x;return[function(){return E(h())},A===null?void 0:function(){return E(A())}]},[h,x,y,w]);var j=i(m,S[0],S[1]);return d(function(){_.hasValue=!0,_.value=j},[j]),g(j),j},Ap}var p1;function uM(){return p1||(p1=1,Tp.exports=cM()),Tp.exports}var dM=uM();const fM=Lh(19),mM=fM?gM:hM;function Ke(e,n,s,r,i){return mM(e,n,s,r,i)}function pM(e,n,s,r,i){const c=v.useCallback(()=>n(e.getSnapshot(),s,r,i),[e,n,s,r,i]);return ud.useSyncExternalStore(e.subscribe,c,c)}YN({before(e){e.syncIndex=0,e.didInitialize||(e.syncTick=1,e.syncHooks=[],e.didChangeStore=!0,e.getSnapshot=()=>{let n=!1;for(let s=0;s<e.syncHooks.length;s+=1){const r=e.syncHooks[s],i=r.selector(r.store.state,r.a1,r.a2,r.a3);(r.didChange||!Object.is(r.value,i))&&(n=!0,r.value=i,r.didChange=!1)}return n&&(e.syncTick+=1),e.syncTick})},after(e){e.syncHooks.length>0&&(e.didChangeStore&&(e.didChangeStore=!1,e.subscribe=n=>{const s=new Set;for(const i of e.syncHooks)s.add(i.store);const r=[];for(const i of s)r.push(i.subscribe(n));return()=>{for(const i of r)i()}}),ud.useSyncExternalStore(e.subscribe,e.getSnapshot,e.getSnapshot))}});function gM(e,n,s,r,i){const c=GN();if(!c)return pM(e,n,s,r,i);const d=c.syncIndex;c.syncIndex+=1;let f;return c.didInitialize?(f=c.syncHooks[d],(f.store!==e||f.selector!==n||!Object.is(f.a1,s)||!Object.is(f.a2,r)||!Object.is(f.a3,i))&&(f.store!==e&&(c.didChangeStore=!0),f.store=e,f.selector=n,f.a1=s,f.a2=r,f.a3=i,f.didChange=!0)):(f={store:e,selector:n,a1:s,a2:r,a3:i,value:n(e.getSnapshot(),s,r,i),didChange:!1},c.syncHooks.push(f)),f.value}function hM(e,n,s,r,i){return dM.useSyncExternalStoreWithSelector(e.subscribe,e.getSnapshot,e.getSnapshot,c=>n(c,s,r,i))}class RS{constructor(n){this.state=n,this.listeners=new Set,this.updateTick=0}subscribe=n=>(this.listeners.add(n),()=>{this.listeners.delete(n)});getSnapshot=()=>this.state;setState(n){if(this.state===n)return;this.state=n,this.updateTick+=1;const s=this.updateTick;for(const r of this.listeners){if(s!==this.updateTick)return;r(n)}}update(n){for(const s in n)if(!Object.is(this.state[s],n[s])){this.setState({...this.state,...n});return}}set(n,s){Object.is(this.state[n],s)||this.setState({...this.state,[n]:s})}notifyAll(){const n={...this.state};this.setState(n)}use(n,s,r,i){return Ke(this,n,s,r,i)}}class qh extends RS{constructor(n,s={},r){super(n),this.context=s,this.selectors=r}useSyncedValue(n,s){v.useDebugValue(n);const r=this;Re(()=>{r.state[n]!==s&&r.set(n,s)},[r,n,s])}useSyncedValueWithCleanup(n,s){const r=this;Re(()=>(r.state[n]!==s&&r.set(n,s),()=>{r.set(n,void 0)}),[r,n,s])}useSyncedValues(n){const s=this,r=Object.values(n);Re(()=>{s.update(n)},[s,...r])}useControlledProp(n,s){v.useDebugValue(n);const r=this,i=s!==void 0;Re(()=>{i&&!Object.is(r.state[n],s)&&r.setState({...r.state,[n]:s})},[r,n,s,i])}select(n,s,r,i){const c=this.selectors[n];return c(this.state,s,r,i)}useState(n,s,r,i){return v.useDebugValue(n),Ke(this,this.selectors[n],s,r,i)}useContextCallback(n,s){v.useDebugValue(n);const r=Ae(s??Dn);this.context[n]=r}useStateSetter(n){const s=v.useRef(void 0);return s.current===void 0&&(s.current=r=>{this.set(n,r)}),s.current}observe(n,s){let r;typeof n=="function"?r=n:r=this.selectors[n];let i=r(this.state);return s(i,i,this),this.subscribe(c=>{const d=r(c);if(!Object.is(i,d)){const f=i;i=d,s(d,f,this)}})}}const xM={open:Te(e=>e.open),transitionStatus:Te(e=>e.transitionStatus),domReferenceElement:Te(e=>e.domReferenceElement),referenceElement:Te(e=>e.positionReference??e.referenceElement),floatingElement:Te(e=>e.floatingElement),floatingId:Te(e=>e.floatingId)};class Bd extends qh{constructor(n){const{syncOnly:s,nested:r,onOpenChange:i,triggerElements:c,...d}=n;super({...d,positionReference:d.referenceElement,domReferenceElement:d.referenceElement},{onOpenChange:i,dataRef:{current:{}},events:uA(),nested:r,triggerElements:c},xM),this.syncOnly=s}syncOpenEvent=(n,s)=>{(!n||!this.state.open||s!=null&&aT(s))&&(this.context.dataRef.current.openEvent=n?s:void 0)};dispatchOpenChange=(n,s)=>{this.syncOpenEvent(n,s.event);const r={open:n,reason:s.reason,nativeEvent:s.event,nested:this.context.nested,triggerElement:s.trigger};this.context.events.emit("openchange",r)};setOpen=(n,s)=>{if(this.syncOnly){this.context.onOpenChange?.(n,s);return}this.dispatchOpenChange(n,s),this.context.onOpenChange?.(n,s)}}function bM(e){const{popupStore:n,treatPopupAsFloatingElement:s=!1,floatingRootContext:r,floatingId:i,nested:c,onOpenChange:d}=e,f=n.useState("open"),g=n.useState("activeTriggerElement"),m=n.useState(s?"popupElement":"positionerElement"),h=n.context.triggerElements,x=d,y=v.useRef(null);r===void 0&&y.current===null&&(y.current=new Bd({open:f,transitionStatus:void 0,referenceElement:g,floatingElement:m,triggerElements:h,onOpenChange:x,floatingId:i,syncOnly:!0,nested:c}));const w=r??y.current;return n.useSyncedValue("floatingId",i),Re(()=>{const S={open:f,floatingId:i,referenceElement:g,floatingElement:m};ot(g)&&(S.domReferenceElement=g),w.state.positionReference===w.state.referenceElement&&(S.positionReference=g),w.update(S)},[f,i,g,m,w]),w.context.onOpenChange=x,w.context.nested=c,w}function tc(e,n=!1,s=!1){const[r,i]=v.useState(e&&n?"idle":void 0),[c,d]=v.useState(e);return e&&!c&&(d(!0),i("starting")),!e&&c&&r!=="ending"&&!s&&i("ending"),!e&&!c&&r==="ending"&&i(void 0),Re(()=>{if(!e&&c&&r!=="ending"&&s){const f=Ya.request(()=>{i("ending")});return()=>{Ya.cancel(f)}}},[e,c,r,s]),Re(()=>{if(!e||n)return;const f=Ya.request(()=>{i(void 0)});return()=>{Ya.cancel(f)}},[n,e]),Re(()=>{if(!e||!n)return;e&&c&&r!=="idle"&&i("starting");const f=Ya.request(()=>{i("idle")});return()=>{Ya.cancel(f)}},[n,e,c,r]),{mounted:c,setMounted:d,transitionStatus:r}}let Xr=(function(e){return e.startingStyle="data-starting-style",e.endingStyle="data-ending-style",e})({});const vM={[Xr.startingStyle]:""},yM={[Xr.endingStyle]:""},dl={transitionStatus(e){return e==="starting"?vM:e==="ending"?yM:null}};function _M(e,n=!1,s=!0){const r=Fo();return Ae((i,c=null)=>{r.cancel();const d=_s(e);if(d==null)return;const f=d,g=()=>{Qr.flushSync(i)};if(typeof f.getAnimations!="function"||globalThis.BASE_UI_ANIMATIONS_DISABLED){i();return}function m(){Promise.all(f.getAnimations().map(h=>h.finished)).then(()=>{c?.aborted||g()}).catch(()=>{if(s){c?.aborted||g();return}const h=f.getAnimations();!c?.aborted&&h.length>0&&h.some(x=>x.pending||x.playState!=="finished")&&m()})}if(n){const h=Xr.startingStyle;if(!f.hasAttribute(h)){r.request(m);return}const x=new MutationObserver(()=>{f.hasAttribute(h)||(x.disconnect(),m())});x.observe(f,{attributes:!0,attributeFilter:[h]}),c?.addEventListener("abort",()=>x.disconnect(),{once:!0});return}r.request(m)})}function xr(e){const{enabled:n=!0,open:s,ref:r,onComplete:i}=e,c=Ae(i),d=_M(r,s,!1);v.useEffect(()=>{if(!n)return;const f=new AbortController;return d(c,f.signal),()=>{f.abort()}},[n,s,c,d])}const Id={tabIndex:-1,[Mg]:""};function NS(e,n,s=!1){const r=Dd(),i=Ld()!=null,c=v.useRef(null);e===void 0&&c.current===null&&(c.current=n(r,i));const d=e??c.current;return bM({popupStore:d,treatPopupAsFloatingElement:s,floatingRootContext:d.state.floatingRootContext,floatingId:r,nested:i,onOpenChange:d.setOpen}),{store:d,internalStore:c.current}}function jM(e,n){const s=v.useRef(null),r=v.useRef(null);return v.useCallback(i=>{if(e===void 0)return;let c=!1;if(s.current!==null){const d=s.current,f=r.current,g=n.context.triggerElements.getById(d);f&&g===f&&(n.context.triggerElements.delete(d),c=!0),s.current=null,r.current=null}if(i!==null&&(s.current=e,r.current=i,n.context.triggerElements.add(e,i),c=!0),c){const d=n.context.triggerElements.size;n.select("open")&&n.state.triggerCount!==d&&n.set("triggerCount",d)}},[n,e])}function TS(e,n,s){const r=s?.id??null;(r||n)&&(e.activeTriggerId=r,e.activeTriggerElement=s??null)}function SM(e,n,s,r){const i=s.useState("isMountedByTrigger",e),c=jM(e,s),d=Ae(f=>{if(c(f),!f)return;const g=s.select("open"),m=s.select("activeTriggerId");if(m===e){s.update({activeTriggerElement:f,...g?r:null});return}m==null&&g&&s.update({activeTriggerId:e,activeTriggerElement:f,...r})});return Re(()=>{i&&s.update({activeTriggerElement:n.current,...r})},[i,s,n,...Object.values(r)]),{registerTrigger:d,isMountedByThisTrigger:i}}function AS(e){const n=e.useState("open"),s=e.useState("triggerCount");Re(()=>{if(!n){e.state.triggerCount!==0&&e.set("triggerCount",0);return}const r=e.context.triggerElements.size,i={};if(e.state.triggerCount!==r&&(i.triggerCount=r),!e.select("activeTriggerId")&&r===1){const c=e.context.triggerElements.entries().next();if(!c.done){const[d,f]=c.value;i.activeTriggerId=d,i.activeTriggerElement=f}}(i.triggerCount!==void 0||i.activeTriggerId!==void 0)&&e.update(i)},[n,e,s])}function MS(e,n,s){const{mounted:r,setMounted:i,transitionStatus:c}=tc(e);n.useSyncedValues({mounted:r,transitionStatus:c});const d=Ae(()=>{i(!1),n.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1,preventUnmountingOnClose:!1}),n.context.onOpenChangeComplete?.(!1)}),f=n.useState("preventUnmountingOnClose");return xr({enabled:r&&!e&&!f,open:e,ref:n.context.popupRef,onComplete(){e||d()}}),{forceUnmount:d,transitionStatus:c}}function OS(e,n){e.useSyncedValues(n),Re(()=>()=>{e.update({activeTriggerProps:an,inactiveTriggerProps:an,popupProps:an})},[e])}function wM(e,n){Re(()=>{!n&&e.state.openMethod!==null&&e.set("openMethod",null)},[n,e]),Re(()=>()=>{e.state.openMethod!==null&&e.set("openMethod",null)},[e])}class Ud{constructor(){this.elementsSet=new Set,this.idMap=new Map}add(n,s){const r=this.idMap.get(n);r!==s&&(r!==void 0&&this.elementsSet.delete(r),this.elementsSet.add(s),this.idMap.set(n,s))}delete(n){const s=this.idMap.get(n);s&&(this.elementsSet.delete(s),this.idMap.delete(n))}hasElement(n){return this.elementsSet.has(n)}hasMatchingElement(n){for(const s of this.elementsSet)if(n(s))return!0;return!1}getById(n){return this.idMap.get(n)}entries(){return this.idMap.entries()}elements(){return this.elementsSet.values()}get size(){return this.idMap.size}}function CM(){return new Bd({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:new Ud,floatingId:void 0,syncOnly:!1,nested:!1,onOpenChange:void 0})}function zS(){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:CM(),floatingId:void 0,triggerCount:0,preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,triggerIdProp:void 0,popupElement:null,positionerElement:null,activeTriggerProps:an,inactiveTriggerProps:an,popupProps:an}}function DS(e,n,s=!1){return new Bd({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:e,floatingId:n,syncOnly:!0,nested:s,onOpenChange:void 0})}const Ni=Te(e=>e.triggerIdProp??e.activeTriggerId),Vh=Te(e=>e.openProp??e.open),g1=Te(e=>(e.popupElement?.id??e.floatingId)||void 0);function LS(e,n){return n!==void 0&&Vh(e)&&Ni(e)===n}function EM(e,n){return LS(e,n)?!0:n!==void 0&&Vh(e)&&Ni(e)==null&&e.triggerCount===1}const PS={open:Vh,mounted:Te(e=>e.mounted),transitionStatus:Te(e=>e.transitionStatus),floatingRootContext:Te(e=>e.floatingRootContext),triggerCount:Te(e=>e.triggerCount),preventUnmountingOnClose:Te(e=>e.preventUnmountingOnClose),payload:Te(e=>e.payload),activeTriggerId:Ni,activeTriggerElement:Te(e=>e.mounted?e.activeTriggerElement:null),popupId:g1,isTriggerActive:Te((e,n)=>n!==void 0&&Ni(e)===n),isOpenedByTrigger:Te((e,n)=>LS(e,n)),isMountedByTrigger:Te((e,n)=>n!==void 0&&Ni(e)===n&&e.mounted),triggerProps:Te((e,n)=>n?e.activeTriggerProps:e.inactiveTriggerProps),triggerPopupId:Te((e,n)=>EM(e,n)?g1(e):void 0),popupProps:Te(e=>e.popupProps),popupElement:Te(e=>e.popupElement),positionerElement:Te(e=>e.positionerElement)};function BS(e){const{open:n=!1,onOpenChange:s,elements:r={}}=e,i=Dd(),c=Ld()!=null,d=fa(()=>new Bd({open:n,transitionStatus:void 0,onOpenChange:s,referenceElement:r.reference??null,floatingElement:r.floating??null,triggerElements:new Ud,floatingId:i,syncOnly:!1,nested:c})).current;return Re(()=>{const f={open:n,floatingId:i};r.reference!==void 0&&(f.referenceElement=r.reference,f.domReferenceElement=ot(r.reference)?r.reference:null),r.floating!==void 0&&(f.floatingElement=r.floating),d.update(f)},[n,i,r.reference,r.floating,d]),d.context.onOpenChange=s,d.context.nested=c,d}function kM(e={}){const{nodeId:n,externalTree:s}=e,r=BS(e),i=e.rootContext||r,c=i.useState("referenceElement"),d=i.useState("floatingElement"),f=i.useState("domReferenceElement"),g=i.useState("open"),m=i.useState("floatingId"),[h,x]=v.useState(null),[y,w]=v.useState(void 0),[S,_]=v.useState(void 0),j=v.useRef(null),E=ul(s),k=v.useMemo(()=>({reference:c,floating:d,domReference:f}),[c,d,f]),N=tM({...e,elements:{...k,...h&&{reference:h}}}),R=ot(y)?y:null,A=S===void 0?i.state.floatingElement:S;i.useSyncedValue("referenceElement",y??null),i.useSyncedValue("domReferenceElement",y===void 0?f:R),i.useSyncedValue("floatingElement",A);const M=v.useCallback(D=>{const q=ot(D)?{getBoundingClientRect:()=>D.getBoundingClientRect(),getClientRects:()=>D.getClientRects(),contextElement:D}:D;x(q),N.refs.setReference(q)},[N.refs]),O=v.useCallback(D=>{(ot(D)||D===null)&&(j.current=D,w(D)),(ot(N.refs.reference.current)||N.refs.reference.current===null||D!==null&&!ot(D))&&N.refs.setReference(D)},[N.refs,w]),U=v.useCallback(D=>{_(D),N.refs.setFloating(D)},[N.refs]),I=v.useMemo(()=>({...N.refs,setReference:O,setFloating:U,setPositionReference:M,domReference:j}),[N.refs,O,U,M]),B=v.useMemo(()=>({...N.elements,domReference:f}),[N.elements,f]),L=v.useMemo(()=>({...N,dataRef:i.context.dataRef,open:g,onOpenChange:i.setOpen,events:i.context.events,floatingId:m,refs:I,elements:B,nodeId:n,rootStore:i}),[N,I,B,n,i,g,m]);return Re(()=>{f&&(j.current=f)},[f]),Re(()=>{i.context.dataRef.current.floatingContext=L;const D=E?.nodesRef.current.find(q=>q.id===n);D&&(D.context=L)}),v.useMemo(()=>({...N,context:L,refs:I,elements:B,rootStore:i}),[N,I,B,L,i])}const Mp=JN&&Oj;function RM(e,n={}){const{enabled:s=!0,delay:r}=n,i="rootStore"in e?e.rootStore:e,{events:c,dataRef:d}=i.context,f=v.useRef(!1),g=v.useRef(null),m=v.useRef(!0),h=Zn();v.useEffect(()=>{const y=i.select("domReferenceElement");if(!s)return;const w=Ft(y);function S(){const E=i.select("domReferenceElement");!i.select("open")&&Ut(E)&&E===zn(xt(E))&&(f.current=!0)}function _(){m.current=!0}function j(){m.current=!1}return Xa(ct(w,"blur",S),Mp&&ct(w,"keydown",_,!0),Mp&&ct(w,"pointerdown",j,!0))},[i,s]),v.useEffect(()=>{if(!s)return;function y(w){if(w.reason===Hi||w.reason===Nh){const S=i.select("domReferenceElement");ot(S)&&(g.current=S,f.current=!0)}}return c.on("openchange",y),()=>{c.off("openchange",y)}},[c,s,i]);const x=v.useMemo(()=>{function y(){f.current=!1,g.current=null}return{onMouseLeave(){y()},onFocus(w){const S=w.currentTarget;if(f.current){if(g.current===S)return;y()}const _=En(w.nativeEvent);if(ot(_)){if(Mp&&!w.relatedTarget){if(!m.current&&!Ad(_))return}else if(!uT(_))return}const j=td(w.relatedTarget,i.context.triggerElements),{nativeEvent:E,currentTarget:k}=w,N=typeof r=="function"?r():r;if(i.select("open")&&j||N===0||N===void 0){i.setOpen(!0,tt($u,E,k));return}h.start(N,()=>{f.current||i.setOpen(!0,tt($u,E,k))})},onBlur(w){y();const S=w.relatedTarget,_=w.nativeEvent,j=ot(S)&&S.hasAttribute($i("focus-guard"))&&S.getAttribute("data-type")==="outside";h.start(0,()=>{const E=i.select("domReferenceElement"),k=zn(xt(E));!S&&k===E||Ye(d.current.floatingContext?.refs.floating.current,k)||Ye(E,k)||j||td(S??k,i.context.triggerElements)||i.setOpen(!1,tt($u,_))})}}},[d,r,i,h]);return v.useMemo(()=>s?{reference:x,trigger:x}:{},[s,x])}class $h{constructor(){this.pointerType=void 0,this.interactedInside=!1,this.handler=void 0,this.blockMouseMove=!0,this.performedPointerEventsMutation=!1,this.pointerEventsScopeElement=null,this.pointerEventsReferenceElement=null,this.pointerEventsFloatingElement=null,this.restTimeoutPending=!1,this.openChangeTimeout=new Ia,this.restTimeout=new Ia,this.handleCloseOptions=void 0}static create(){return new $h}dispose=()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()};disposeEffect=()=>this.dispose}const dd=new WeakMap;function fd(e){if(!e.performedPointerEventsMutation)return;const n=e.pointerEventsScopeElement;n&&dd.get(n)===e&&(e.pointerEventsScopeElement?.style.removeProperty("pointer-events"),e.pointerEventsReferenceElement?.style.removeProperty("pointer-events"),e.pointerEventsFloatingElement?.style.removeProperty("pointer-events"),dd.delete(n)),e.performedPointerEventsMutation=!1,e.pointerEventsScopeElement=null,e.pointerEventsReferenceElement=null,e.pointerEventsFloatingElement=null}function IS(e,n){const{scopeElement:s,referenceElement:r,floatingElement:i}=n,c=dd.get(s);c&&c!==e&&fd(c),fd(e),e.performedPointerEventsMutation=!0,e.pointerEventsScopeElement=s,e.pointerEventsReferenceElement=r,e.pointerEventsFloatingElement=i,dd.set(s,e),s.style.pointerEvents="none",r.style.pointerEvents="auto",i.style.pointerEvents="auto"}function Gh(e){const n=e.context.dataRef.current,s=fa(()=>n.hoverInteractionState??$h.create()).current;return n.hoverInteractionState||(n.hoverInteractionState=s),jh(n.hoverInteractionState.disposeEffect),n.hoverInteractionState}function NM(e,n={}){const{enabled:s=!0,closeDelay:r=0,nodeId:i}=n,c="rootStore"in e?e.rootStore:e,d=c.useState("open"),f=c.useState("floatingElement"),g=c.useState("domReferenceElement"),{dataRef:m}=c.context,h=ul(),x=Ld(),y=Gh(c),w=Zn(),S=Ae(()=>Bj(m.current.openEvent?.type,y.interactedInside)),_=Ae(()=>fT(m.current.openEvent?.type)),j=Ae(()=>{fd(y)});Re(()=>{d||(y.pointerType=void 0,y.restTimeoutPending=!1,y.interactedInside=!1,j())},[d,y,j]),v.useEffect(()=>j,[j]),Re(()=>{if(s&&d&&y.handleCloseOptions?.blockPointerEvents&&_()&&ot(g)&&f){const E=g,k=f,N=xt(f),R=h?.nodesRef.current.find(U=>U.id===x)?.context?.elements.floating;R&&(R.style.pointerEvents="");const A=y.pointerEventsScopeElement!==k?y.pointerEventsScopeElement:null,M=R!==k?R:null,O=y.handleCloseOptions?.getScope?.()??A??M??E.closest("[data-rootownerid]")??N.body;return IS(y,{scopeElement:O,referenceElement:E,floatingElement:k}),()=>{j()}}},[s,d,g,f,y,_,h,x,j]),v.useEffect(()=>{if(!s)return;function E(){return!!(h&&x&&mr(h.nodesRef.current,x).length>0)}function k(U){const I=ad(r,"close",y.pointerType),B=()=>{c.setOpen(!1,tt(In,U)),h?.events.emit("floating.closed",U)};I?y.openChangeTimeout.start(I,B):(y.openChangeTimeout.clear(),B())}function N(U){const I=En(U);if(!cT(I)){y.interactedInside=!1;return}y.interactedInside=I?.closest("[aria-haspopup]")!=null}function R(){y.openChangeTimeout.clear(),w.clear(),h?.events.off("floating.closed",M),j()}function A(U){if(E()&&h){h.events.on("floating.closed",M);return}if(td(U.relatedTarget,c.context.triggerElements))return;const I=m.current.floatingContext?.nodeId??i,B=U.relatedTarget;if(!(h&&I&&ot(B)&&mr(h.nodesRef.current,I,!1).some(D=>Ye(D.context?.elements.floating,B)))){if(y.handler){y.handler(U);return}j(),S()||k(U)}}function M(U){!h||!x||E()||w.start(0,()=>{h.events.off("floating.closed",M),c.setOpen(!1,tt(In,U)),h.events.emit("floating.closed",U)})}const O=f;return Xa(O&&ct(O,"mouseenter",R),O&&ct(O,"mouseleave",A),O&&ct(O,"pointerdown",N,!0),()=>{h?.events.off("floating.closed",M)})},[s,f,c,m,r,i,S,j,y,h,x,w])}const TM={current:null};function AM(e,n={}){const{enabled:s=!0,delay:r=0,handleClose:i=null,mouseOnly:c=!1,restMs:d=0,move:f=!0,triggerElementRef:g=TM,externalTree:m,isActiveTrigger:h=!0,getHandleCloseContext:x,isClosing:y,shouldOpen:w}=n,S="rootStore"in e?e.rootStore:e,{dataRef:_,events:j}=S.context,E=ul(m),k=Gh(S),N=v.useRef(!1),R=cn(i),A=cn(r),M=cn(d),O=cn(s),U=cn(w),I=cn(y),B=Ae(()=>Bj(_.current.openEvent?.type,k.interactedInside)),L=Ae(()=>U.current?.()!==!1),D=Ae((Z,H,G)=>{const Q=S.context.triggerElements;if(Q.hasElement(H))return!Z||!Ye(Z,H);if(!ot(G))return!1;const V=G;return Q.hasMatchingElement(Y=>Ye(Y,V))&&(!Z||!Ye(Z,V))}),q=Ae(()=>{if(!k.handler)return;xt(S.select("domReferenceElement")).removeEventListener("mousemove",k.handler),k.handler=void 0}),F=Ae(()=>{fd(k)});return h&&(k.handleCloseOptions=R.current?.__options),v.useEffect(()=>q,[q]),v.useEffect(()=>{if(!s)return;function Z(H){H.open?N.current=!1:(N.current=H.reason===In,q(),k.openChangeTimeout.clear(),k.restTimeout.clear(),k.blockMouseMove=!0,k.restTimeoutPending=!1)}return j.on("openchange",Z),()=>{j.off("openchange",Z)}},[s,j,k,q]),v.useEffect(()=>{if(!s)return;function Z(V,Y=!0){const P=ad(A.current,"close",k.pointerType);P?k.openChangeTimeout.start(P,()=>{S.setOpen(!1,tt(In,V)),E?.events.emit("floating.closed",V)}):Y&&(k.openChangeTimeout.clear(),S.setOpen(!1,tt(In,V)),E?.events.emit("floating.closed",V))}const H=g.current??(h?S.select("domReferenceElement"):null);if(!ot(H))return;function G(V){if(k.openChangeTimeout.clear(),k.blockMouseMove=!1,c&&!Yr(k.pointerType))return;const Y=I0(M.current),P=ad(A.current,"open",k.pointerType),K=En(V),$=V.currentTarget??null,W=S.select("domReferenceElement");let ce=$;if(ot(K)&&!S.context.triggerElements.hasElement(K)){for(const Ee of S.context.triggerElements.elements())if(Ye(Ee,K)){ce=Ee;break}}ot($)&&ot(W)&&!S.context.triggerElements.hasElement($)&&Ye($,W)&&(ce=W);const ie=ce==null?!1:D(W,ce,K),oe=S.select("open"),ue=I.current?.()??S.select("transitionStatus")==="ending",te=!oe&&ue&&N.current,Ne=!ie&&ot(ce)&&ot(W)&&Ye(W,ce)&&te,$e=Y>0&&!P,be=ie&&(oe||te)||Ne,Se=!oe||ie;if(be){L()&&S.setOpen(!0,tt(In,V,ce));return}$e||(P?k.openChangeTimeout.start(P,()=>{Se&&L()&&S.setOpen(!0,tt(In,V,ce))}):Se&&L()&&S.setOpen(!0,tt(In,V,ce)))}function Q(V){if(B()){F();return}q();const Y=S.select("domReferenceElement"),P=xt(Y);k.restTimeout.clear(),k.restTimeoutPending=!1;const K=_.current.floatingContext??x?.();if(td(V.relatedTarget,S.context.triggerElements))return;if(R.current&&K){S.select("open")||k.openChangeTimeout.clear();const W=g.current;k.handler=R.current({...K,tree:E,x:V.clientX,y:V.clientY,onClose(){F(),q(),O.current&&!B()&&W===S.select("domReferenceElement")&&Z(V,!0)}}),P.addEventListener("mousemove",k.handler),k.handler(V);return}(k.pointerType==="touch"?!Ye(S.select("floatingElement"),V.relatedTarget):!0)&&Z(V)}return f?Xa(ct(H,"mousemove",G,{once:!0}),ct(H,"mouseenter",G),ct(H,"mouseleave",Q)):Xa(ct(H,"mouseenter",G),ct(H,"mouseleave",Q))},[q,F,_,A,S,s,R,k,h,D,B,c,f,M,g,E,O,x,I,L]),v.useMemo(()=>{if(!s)return;function Z(H){k.pointerType=H.pointerType}return{onPointerDown:Z,onPointerEnter:Z,onMouseMove(H){const{nativeEvent:G}=H,Q=H.currentTarget,V=S.select("domReferenceElement"),Y=S.select("open"),P=D(V,Q,H.target);if(c&&!Yr(k.pointerType))return;if(Y&&P&&k.handleCloseOptions?.blockPointerEvents){const W=S.select("floatingElement");if(W){const ce=k.handleCloseOptions?.getScope?.()??Q.ownerDocument.body;IS(k,{scopeElement:ce,referenceElement:Q,floatingElement:W})}}const K=I0(M.current);if(Y&&!P||K===0||!P&&k.restTimeoutPending&&H.movementX**2+H.movementY**2<2)return;k.restTimeout.clear();function $(){if(k.restTimeoutPending=!1,B())return;const W=S.select("open");!k.blockMouseMove&&(!W||P)&&L()&&S.setOpen(!0,tt(In,G,Q))}k.pointerType==="touch"?Qr.flushSync(()=>{$()}):P&&Y?$():(k.restTimeoutPending=!0,k.restTimeout.start(K,$))}}},[s,k,B,D,c,S,M,L])}const MM="Escape";function Hd(e,n,s){switch(e){case"vertical":return n;case"horizontal":return s;default:return n||s}}function wu(e,n){return Hd(n,e===kh||e===ec,e===ur||e===dr)}function Op(e,n,s){return Hd(n,e===ec,s?e===ur:e===dr)||e==="Enter"||e===" "||e===""}function OM(e,n,s){return Hd(n,s?e===ur:e===dr,e===ec)}function zM(e,n,s,r){const i=s?e===dr:e===ur,c=e===kh;return n==="both"||n==="horizontal"&&r&&r>1?e===MM:Hd(n,i,c)}function DM(e,n){const{listRef:s,activeIndex:r,onNavigate:i=()=>{},enabled:c=!0,selectedIndex:d=null,allowEscape:f=!1,loopFocus:g=!1,nested:m=!1,rtl:h=!1,virtual:x=!1,focusItemOnOpen:y="auto",focusItemOnHover:w=!0,openOnArrowKeyDown:S=!0,disabledIndices:_=void 0,orientation:j="vertical",parentOrientation:E,cols:k=1,id:N,resetOnPointerLeave:R=!0,externalTree:A}=n,M="rootStore"in e?e.rootStore:e,O=M.useState("open"),U=M.useState("floatingElement"),I=M.useState("domReferenceElement"),B=M.context.dataRef,L=nd(U),D=Og(I),q=cn(L),F=Ld(),Z=ul(A),H=v.useRef(y),G=v.useRef(d??-1),Q=v.useRef(null),V=v.useRef(!0),Y=Ae(ve=>{i(G.current===-1?null:G.current,ve)}),P=v.useRef(Y),K=v.useRef(!!U),$=v.useRef(O),W=v.useRef(!1),ce=v.useRef(!1),ie=v.useRef(null),oe=cn(_),ue=cn(O),te=cn(d),Ne=cn(R),$e=Fo(),be=Fo(),Se=Ae(()=>{function ve(Pe){x?Z?.events.emit("virtualfocus",Pe):ie.current=Yu(Pe,{sync:W.current,preventScroll:!0})}const re=s.current[G.current],ye=ce.current;re&&ve(re),(W.current?Pe=>Pe():Pe=>$e.request(Pe))(()=>{const Pe=s.current[G.current]||re;if(!Pe)return;re||ve(Pe),_e&&(ye||!V.current)&&Pe.scrollIntoView?.({block:"nearest",inline:"nearest"})})});Re(()=>{B.current.orientation=j},[B,j]),Re(()=>{c&&(O&&U?(G.current=d??-1,H.current&&d!=null&&(ce.current=!0,Y())):K.current&&(G.current=-1,P.current()))},[c,O,U,d,Y]),Re(()=>{if(c){if(!O){W.current=!1;return}if(U)if(r==null){if(W.current=!1,te.current!=null)return;if(K.current&&(G.current=-1,Se()),(!$.current||!K.current)&&H.current&&(Q.current!=null||H.current===!0&&Q.current==null)){let ve=0;const re=()=>{s.current[0]==null?(ve<2&&(ve?je=>be.request(je):queueMicrotask)(re),ve+=1):(G.current=Q.current==null||Op(Q.current,j,h)||m?Gu(s):Lg(s),Q.current=null,Y())};re()}}else Vi(s.current,r)||(G.current=r,Se(),ce.current=!1)}},[c,O,U,r,te,m,s,j,h,Y,Se,be]),Re(()=>{if(!c||U||!Z||x||!K.current)return;const ve=Z.nodesRef.current,re=ve.find(Pe=>Pe.id===F)?.context?.elements.floating,ye=zn(xt(U)),je=ve.some(Pe=>Pe.context&&Ye(Pe.context.elements.floating,ye));re&&!je&&V.current&&re.focus({preventScroll:!0})},[c,U,Z,F,x]),Re(()=>{P.current=Y,$.current=O,K.current=!!U}),Re(()=>{O||(Q.current=null,H.current=y)},[O,y]);const Ee=r!=null,Oe=Ae(ve=>{if(!ue.current)return;const re=s.current.indexOf(ve.currentTarget);re!==-1&&(G.current!==re||r!==re)&&(G.current=re,Y(ve))}),ze=Ae(()=>E??Z?.nodesRef.current.find(ve=>ve.id===F)?.context?.dataRef?.current.orientation),xe=Ae(()=>Gu(s,oe.current)),ke=Ae(ve=>{if(V.current=!1,W.current=!0,ve.which===229||!ue.current&&ve.currentTarget===q.current)return;if(m&&zM(ve.key,j,h,k)){wu(ve.key,ze())||ua(ve),M.setOpen(!1,tt(U0,ve.nativeEvent)),Ut(I)&&(x?Z?.events.emit("virtualfocus",I):I.focus());return}const re=G.current,ye=Gu(s,_),je=Lg(s,_);if(D||(ve.key==="Home"&&(ua(ve),G.current=ye,Y(ve)),ve.key==="End"&&(ua(ve),G.current=je,Y(ve))),k>1){const Pe=Array.from({length:s.current.length},()=>({width:1,height:1})),Ze=Xj(Pe,k,!1),_t=Ze.findIndex(ut=>ut!=null&&!Cs(s.current,ut,_)),Ht=Ze.reduce((ut,it,Et)=>it!=null&&!Cs(s.current,it,_)?Et:ut,-1),vt=Ze[Fj(Ze.map(ut=>ut!=null?s.current[ut]:null),{event:ve,orientation:j,loopFocus:g,rtl:h,cols:k,disabledIndices:Qj([...(typeof _!="function"?_:null)||s.current.map((ut,it)=>Cs(s.current,it,_)?it:void 0),void 0],Ze),minIndex:_t,maxIndex:Ht,prevIndex:Kj(G.current>je?ye:G.current,Pe,Ze,k,ve.key===ec?"bl":ve.key===(h?ur:dr)?"tr":"tl"),stopEvent:!0})];if(vt!=null&&(G.current=vt,Y(ve)),j==="both")return}if(wu(ve.key,j)){if(ua(ve),O&&!x&&zn(ve.currentTarget.ownerDocument)===ve.currentTarget){G.current=Op(ve.key,j,h)?ye:je,Y(ve);return}Op(ve.key,j,h)?g?re>=je?f&&re!==s.current.length?G.current=-1:(W.current=!1,G.current=ye):G.current=On(s.current,{startingIndex:re,disabledIndices:_}):G.current=Math.min(je,On(s.current,{startingIndex:re,disabledIndices:_})):g?re<=ye?f&&re!==-1?G.current=s.current.length:(W.current=!1,G.current=je):G.current=On(s.current,{startingIndex:re,decrement:!0,disabledIndices:_}):G.current=Math.max(ye,On(s.current,{startingIndex:re,decrement:!0,disabledIndices:_})),Vi(s.current,G.current)&&(G.current=-1),Y(ve)}}),_e=v.useMemo(()=>({onFocus(re){W.current=!0,Oe(re)},onClick:({currentTarget:re})=>re.focus({preventScroll:!0}),onMouseMove(re){W.current=!0,ce.current=!1,w&&Oe(re)},onPointerLeave(re){if(!ue.current||!V.current||re.pointerType==="touch")return;W.current=!0;const ye=re.relatedTarget;if(!(!w||s.current.includes(ye))&&Ne.current&&(ie.current?.(),ie.current=null,G.current=-1,Y(re),!x)){const je=q.current,Pe=zn(xt(je));je&&Ye(je,Pe)&&je.focus({preventScroll:!0})}}}),[Oe,ue,q,w,s,Y,Ne,x]),De=v.useMemo(()=>x&&O&&Ee&&{"aria-activedescendant":`${N}-${r}`},[x,O,Ee,N,r]),Ge=v.useMemo(()=>({"aria-orientation":j==="both"?void 0:j,...D?{}:De,onKeyDown(ve){if(ve.key==="Tab"&&ve.shiftKey&&O&&!x){const re=En(ve.nativeEvent);if(re&&!Ye(q.current,re))return;ua(ve),M.setOpen(!1,tt(Md,ve.nativeEvent)),Ut(I)&&I.focus();return}ke(ve)},onPointerMove(){V.current=!0}}),[De,ke,q,j,D,M,O,x,I]),qe=v.useMemo(()=>{function ve(je){M.setOpen(!0,tt(U0,je.nativeEvent,je.currentTarget))}function re(je){y==="auto"&&wh(je.nativeEvent)&&(H.current=!x)}function ye(je){H.current=y,y==="auto"&&Dj(je.nativeEvent)&&(H.current=!0)}return{onKeyDown(je){const Pe=M.select("open");V.current=!1;const Ze=je.key.startsWith("Arrow"),_t=OM(je.key,ze(),h),Ht=wu(je.key,j),vt=(m?_t:Ht)||je.key==="Enter"||je.key.trim()==="";if(x&&Pe)return ke(je);if(!(!Pe&&!S&&Ze)){if(vt){const ut=wu(je.key,ze());Q.current=m&&ut?null:je.key}if(m){_t&&(ua(je),Pe?(G.current=xe(),Y(je)):ve(je));return}Ht&&(te.current!=null&&(G.current=te.current),ua(je),!Pe&&S?ve(je):ke(je),Pe&&Y(je))}},onFocus(je){M.select("open")&&!x&&(G.current=-1,Y(je))},onPointerDown:ye,onPointerEnter:ye,onMouseDown:re,onClick:re}},[ke,y,xe,m,Y,M,S,j,ze,h,te,x]),Me=v.useMemo(()=>({...De,...qe}),[De,qe]);return v.useMemo(()=>c?{reference:Me,floating:Ge,item:_e,trigger:qe}:{},[c,Me,Ge,qe,_e])}function LM(e,n){const{listRef:s,elementsRef:r,activeIndex:i,onMatch:c,onTyping:d,enabled:f=!0,resetMs:g=750,selectedIndex:m=null}=n,h="rootStore"in e?e.rootStore:e,x=h.useState("open"),y=Zn(),w=v.useRef(""),S=v.useRef(m??i??-1),_=v.useRef(null),j=Ae(N=>{function R(D){const q=r?.current[D];return!q||Od(q)}function A(D,q,F=0){if(D.length===0)return-1;const Z=(F%D.length+D.length)%D.length,H=q.toLocaleLowerCase();for(let G=0;G<D.length;G+=1){const Q=(Z+G)%D.length;if(!(!D[Q]?.toLocaleLowerCase().startsWith(H)||!R(Q)))return Q}return-1}const M=s.current;if(w.current.length>0&&N.key===" "&&(ua(N),d?.(!0)),w.current.length>0&&w.current[0]!==" "&&A(M,w.current)===-1&&N.key!==" "&&d?.(!1),M==null||N.key.length!==1||N.ctrlKey||N.metaKey||N.altKey)return;x&&N.key!==" "&&(ua(N),d?.(!0));const O=w.current==="";O&&(S.current=m??i??-1),M.every(D=>D?D[0]?.toLocaleLowerCase()!==D[1]?.toLocaleLowerCase():!0)&&w.current===N.key&&(w.current="",S.current=_.current),w.current+=N.key,y.start(g,()=>{w.current="",S.current=_.current,d?.(!1)});const B=((O?m??i??-1:S.current)??0)+1,L=A(M,w.current,B);L!==-1?(c?.(L),_.current=L):N.key!==" "&&(w.current="",d?.(!1))}),E=Ae(N=>{const R=N.relatedTarget,A=h.select("domReferenceElement"),M=h.select("floatingElement");Ye(A,R)||Ye(M,R)||(y.clear(),w.current="",S.current=_.current,d?.(!1))});Re(()=>{!x&&m!==null||(y.clear(),_.current=null,w.current!==""&&(w.current=""))},[x,m,y]),Re(()=>{x&&w.current===""&&(S.current=m??i??-1)},[x,m,i]);const k=v.useMemo(()=>({onKeyDown:j,onBlur:E}),[j,E]);return v.useMemo(()=>f?{reference:k,floating:k}:{},[f,k])}const h1=.1,PM=h1*h1,Dt=.5;function Cu(e,n,s,r,i,c){return r>=n!=c>=n&&e<=(i-s)*(n-r)/(c-r)+s}function Eu(e,n,s,r,i,c,d,f,g,m){let h=!1;return Cu(e,n,s,r,i,c)&&(h=!h),Cu(e,n,i,c,d,f)&&(h=!h),Cu(e,n,d,f,g,m)&&(h=!h),Cu(e,n,g,m,s,r)&&(h=!h),h}function BM(e,n,s){return e>=s.x&&e<=s.x+s.width&&n>=s.y&&n<=s.y+s.height}function ku(e,n,s,r,i,c){const d=Math.min(s,i),f=Math.max(s,i),g=Math.min(r,c),m=Math.max(r,c);return e>=d&&e<=f&&n>=g&&n<=m}function IM(e={}){const{blockPointerEvents:n=!1}=e,s=new Ia,r=({x:i,y:c,placement:d,elements:f,onClose:g,nodeId:m,tree:h})=>{const x=d?.split("-")[0];let y=!1,w=null,S=null,_=typeof performance<"u"?performance.now():0;function j(k,N){const R=performance.now(),A=R-_;if(w===null||S===null||A===0)return w=k,S=N,_=R,!1;const M=k-w,O=N-S,U=M*M+O*O,I=A*A*PM;return w=k,S=N,_=R,U<I}function E(){s.clear(),g()}return function(N){s.clear();const R=f.domReference,A=f.floating;if(!R||!A||x==null||i==null||c==null)return;const{clientX:M,clientY:O}=N,U=En(N),I=N.type==="mouseleave",B=Ye(A,U),L=Ye(R,U);if(B&&(y=!0,!I))return;if(L&&(y=!1,!I)){y=!0;return}if(I&&ot(N.relatedTarget)&&Ye(A,N.relatedTarget))return;function D(){return!!(h&&mr(h.nodesRef.current,m).length>0)}function q(){D()||E()}if(D())return;const F=R.getBoundingClientRect(),Z=A.getBoundingClientRect(),H=i>Z.right-Z.width/2,G=c>Z.bottom-Z.height/2,Q=Z.width>F.width,V=Z.height>F.height,Y=(Q?F:Z).left,P=(Q?F:Z).right,K=(V?F:Z).top,$=(V?F:Z).bottom;if(x==="top"&&c>=F.bottom-1||x==="bottom"&&c<=F.top+1||x==="left"&&i>=F.right-1||x==="right"&&i<=F.left+1){q();return}let W=!1;switch(x){case"top":W=ku(M,O,Y,F.top+1,P,Z.bottom-1);break;case"bottom":W=ku(M,O,Y,Z.top+1,P,F.bottom-1);break;case"left":W=ku(M,O,Z.right-1,$,F.left+1,K);break;case"right":W=ku(M,O,F.right-1,$,Z.left+1,K);break}if(W)return;if(y&&!BM(M,O,F)){q();return}if(!I&&j(M,O)){q();return}let ce=!1;switch(x){case"top":{const ie=Q?Dt/2:Dt*4,oe=Q||H?i+ie:i-ie,ue=Q?i-ie:H?i+ie:i-ie,te=c+Dt+1,Ne=H||Q?Z.bottom-Dt:Z.top,$e=H?Q?Z.bottom-Dt:Z.top:Z.bottom-Dt;ce=Eu(M,O,oe,te,ue,te,Z.left,Ne,Z.right,$e);break}case"bottom":{const ie=Q?Dt/2:Dt*4,oe=Q||H?i+ie:i-ie,ue=Q?i-ie:H?i+ie:i-ie,te=c-Dt,Ne=H||Q?Z.top+Dt:Z.bottom,$e=H?Q?Z.top+Dt:Z.bottom:Z.top+Dt;ce=Eu(M,O,oe,te,ue,te,Z.left,Ne,Z.right,$e);break}case"left":{const ie=V?Dt/2:Dt*4,oe=V||G?c+ie:c-ie,ue=V?c-ie:G?c+ie:c-ie,te=i+Dt+1,Ne=G||V?Z.right-Dt:Z.left,$e=G?V?Z.right-Dt:Z.left:Z.right-Dt;ce=Eu(M,O,Ne,Z.top,$e,Z.bottom,te,oe,te,ue);break}case"right":{const ie=V?Dt/2:Dt*4,oe=V||G?c+ie:c-ie,ue=V?c-ie:G?c+ie:c-ie,te=i-Dt,Ne=G||V?Z.left+Dt:Z.right,$e=G?V?Z.left+Dt:Z.right:Z.left+Dt;ce=Eu(M,O,te,oe,te,ue,Ne,Z.top,$e,Z.bottom);break}}ce?y||s.start(40,q):q()}};return r.__options={...e,blockPointerEvents:n},r}const UM={...PS,disabled:Te(e=>e.disabled),instantType:Te(e=>e.instantType),isInstantPhase:Te(e=>e.isInstantPhase),trackCursorAxis:Te(e=>e.trackCursorAxis),disableHoverablePopup:Te(e=>e.disableHoverablePopup),lastOpenChangeReason:Te(e=>e.openChangeReason),closeOnClick:Te(e=>e.closeOnClick),closeDelay:Te(e=>e.closeDelay),hasViewport:Te(e=>e.hasViewport)};class Yh extends qh{constructor(n,s,r=!1){const i=new Ud,c={...HM(),...n};c.floatingRootContext=DS(i,s,r),super(c,{popupRef:v.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:i},UM)}setOpen=(n,s)=>{const r=s.reason,i=r===In,c=n&&r===$u,d=!n&&(r===Hi||r===Nh);if(s.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},this.context.onOpenChange?.(n,s),s.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(n,s);const f=()=>{const g={open:n,openChangeReason:r};c?g.instantType="focus":d?g.instantType="dismiss":r===In&&(g.instantType=void 0),TS(g,n,s.trigger),this.update(g)};i?Qr.flushSync(f):f()};cancelPendingOpen(n){this.state.floatingRootContext.dispatchOpenChange(!1,tt(Hi,n))}static useStore(n,s){return NS(n,(i,c)=>new Yh(s,i,c)).store}}function HM(){return{...zS(),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,hasViewport:!1}}const qM=Rj(function(n){const{disabled:s=!1,defaultOpen:r=!1,open:i,disableHoverablePopup:c=!1,trackCursorAxis:d="none",actionsRef:f,onOpenChange:g,onOpenChangeComplete:m,handle:h,triggerId:x,defaultTriggerId:y=null,children:w}=n,S=Yh.useStore(h?.store,{open:r,openProp:i,activeTriggerId:y,triggerIdProp:x});_h(()=>{i===void 0&&S.state.open===!1&&r===!0&&S.update({open:!0,activeTriggerId:y})}),S.useControlledProp("openProp",i),S.useControlledProp("triggerIdProp",x),S.useContextCallback("onOpenChange",g),S.useContextCallback("onOpenChangeComplete",m);const _=S.useState("open"),j=!s&&_,E=S.useState("activeTriggerId"),k=S.useState("mounted"),N=S.useState("payload");S.useSyncedValues({trackCursorAxis:d,disableHoverablePopup:c}),S.useSyncedValue("disabled",s),AS(S);const{forceUnmount:R,transitionStatus:A}=MS(j,S),M=S.useState("isInstantPhase"),O=S.useState("instantType"),U=S.useState("lastOpenChangeReason"),I=v.useRef(null);Re(()=>{_&&s&&S.setOpen(!1,tt(Ij))},[_,s,S]),Re(()=>{A==="ending"&&U===Ns||A!=="ending"&&M?(O!=="delay"&&(I.current=O),S.set("instantType","delay")):I.current!==null&&(S.set("instantType",I.current),I.current=null)},[A,M,U,O,S]),Re(()=>{j&&E==null&&S.set("payload",void 0)},[S,E,j]);const B=v.useCallback(()=>{S.setOpen(!1,tt(Uj))},[S]);v.useImperativeHandle(f,()=>({unmount:R,close:B}),[R,B]);const L=j||k||!s&&d!=="none";return l.jsxs(Nj.Provider,{value:S,children:[L&&l.jsx(VM,{store:S,disabled:s,trackCursorAxis:d}),typeof w=="function"?w({payload:N}):w]})});function VM({store:e,disabled:n,trackCursorAxis:s}){const r=e.useState("floatingRootContext"),i=Uh(r,{enabled:!n,referencePress:()=>e.select("closeOnClick")}),c=bA(r,{enabled:!n&&s!=="none",axis:s==="none"?void 0:s}),d=v.useMemo(()=>ka(c.reference,i.reference),[c.reference,i.reference]),f=v.useMemo(()=>ka(c.trigger,i.trigger),[c.trigger,i.trigger]),g=v.useMemo(()=>ka(Id,c.floating,i.floating),[c.floating,i.floating]);return OS(e,{activeTriggerProps:d,inactiveTriggerProps:f,popupProps:g}),null}let qr=(function(e){return e.open="data-open",e.closed="data-closed",e[e.startingStyle=Xr.startingStyle]="startingStyle",e[e.endingStyle=Xr.endingStyle]="endingStyle",e.anchorHidden="data-anchor-hidden",e.side="data-side",e.align="data-align",e})({}),md=(function(e){return e.popupOpen="data-popup-open",e.pressed="data-pressed",e})({});const $M={[md.popupOpen]:""},GM={[md.popupOpen]:"",[md.pressed]:""},YM={[qr.open]:""},FM={[qr.closed]:""},XM={[qr.anchorHidden]:""},US={open(e){return e?$M:null}},KM={open(e){return e?GM:null}},fl={open(e){return e?YM:FM},anchorHidden(e){return e?XM:null}};function br(e){return Dd(e,"base-ui")}const HS=v.createContext(void 0);function QM(){return v.useContext(HS)}let ZM=(function(e){return e[e.popupOpen=md.popupOpen]="popupOpen",e.triggerDisabled="data-trigger-disabled",e})({});const JM=600,qS="data-base-ui-tooltip-trigger";function x1(e){if("composedPath"in e){const s=e.composedPath();for(let r=0;r<s.length;r+=1){const i=s[r];if(ot(i))return i}}const n=e.target;return ot(n)?n:null}function WM(e){let n=e;for(;n;){if(n.hasAttribute(qS))return n;const s=n.parentElement;if(s){n=s;continue}const r=n.getRootNode();n="host"in r&&ot(r.host)?r.host:null}return null}const e3=FN(function(n,s){const{render:r,className:i,style:c,handle:d,payload:f,disabled:g,delay:m,closeOnClick:h=!0,closeDelay:x,id:y,...w}=n,S=Wi(!0),_=d?.store??S;if(!_)throw new Error(Nn(82));const j=br(y),E=_.useState("isTriggerActive",j),k=_.useState("isOpenedByTrigger",j),N=_.useState("floatingRootContext"),R=v.useRef(null),A=m??JM,M=x??0,{registerTrigger:O,isMountedByThisTrigger:U}=SM(j,R,_,{payload:f,closeOnClick:h,closeDelay:M}),I=QM(),{delayRef:B,isInstantPhase:L,hasProvider:D}=xT(N,{open:k}),q=Gh(N);_.useSyncedValue("isInstantPhase",L);const F=_.useState("disabled"),Z=g??F,H=cn(Z),G=_.useState("trackCursorAxis"),Q=_.useState("disableHoverablePopup"),V=v.useRef(!1),Y=Zn(),P=v.useRef(void 0);function K(){const be=I?.delay,Se=typeof B.current=="object"?B.current.open:void 0;let Ee=A;return D&&(Se!==0?Ee=m??be??A:Ee=0),Ee}function $(be){const Se=R.current;if(!Se||!be)return!1;const Ee=WM(be);return Ee!==null&&Ee!==Se&&Ye(Se,Ee)}function W(be){const Se=$(be);return V.current=Se,Se&&(q.openChangeTimeout.clear(),q.restTimeout.clear(),q.restTimeoutPending=!1,Y.clear()),Se}const ce=AM(N,{enabled:!Z,mouseOnly:!0,move:!1,handleClose:!Q&&G!=="both"?IM():null,restMs:K,delay(){const be=typeof B.current=="object"?B.current.close:void 0;let Se=M;return x==null&&D&&(Se=be),{close:Se}},triggerElementRef:R,isActiveTrigger:E,isClosing:()=>_.select("transitionStatus")==="ending",shouldOpen(){return!V.current}}),ie=RM(N,{enabled:!Z}).reference,oe=be=>{const Se=V.current,Ee=x1(be),Oe=W(Ee),ze=R.current,xe=ze&&Ee&&Ye(ze,Ee);if(Oe&&_.select("open")&&_.select("lastOpenChangeReason")===In){_.setOpen(!1,tt(In,be));return}if(Se&&!Oe&&xe&&!H.current&&!_.select("open")&&ze&&Yr(P.current)){const ke=()=>{!V.current&&!H.current&&!_.select("open")&&_.setOpen(!0,tt(In,be,ze))},_e=K();_e===0?(Y.clear(),ke()):Y.start(_e,ke)}},ue=_.useState("triggerProps",U);return Lt("button",n,{state:{open:k},ref:[s,O,R],props:[ce,ie,U||G!=="none"?ue:void 0,{onMouseOver(be){oe(be.nativeEvent)},onFocus(be){$(x1(be.nativeEvent))&&be.preventBaseUIHandler()},onMouseLeave(){V.current=!1,Y.clear(),P.current=void 0},onPointerEnter(be){P.current=be.pointerType},onPointerDown(be){P.current=be.pointerType,_.set("closeOnClick",h),h&&!_.select("open")&&_.cancelPendingOpen(be.nativeEvent)},onClick(be){h&&!_.select("open")&&_.cancelPendingOpen(be.nativeEvent)},id:j,[ZM.triggerDisabled]:Z?"":void 0,[qS]:Z?void 0:""},w],stateAttributesMapping:US})}),VS=v.createContext(void 0);function t3(){const e=v.useContext(VS);if(e===void 0)throw new Error(Nn(70));return e}const n3=v.forwardRef(function(n,s){const{children:r,container:i,className:c,render:d,style:f,...g}=n,{portalNode:m,portalSubtree:h}=gS({container:i,ref:s,componentProps:n,elementProps:g});return!h&&!m?null:l.jsxs(v.Fragment,{children:[h,m&&Qr.createPortal(r,m)]})}),a3=v.forwardRef(function(n,s){const{keepMounted:r=!1,...i}=n;return Wi().useState("mounted")||r?l.jsx(VS.Provider,{value:r,children:l.jsx(n3,{ref:s,...i})}):null}),$S=v.createContext(void 0);function GS(){const e=v.useContext($S);if(e===void 0)throw new Error(Nn(71));return e}const s3=v.createContext(void 0);function Fh(){return v.useContext(s3)?.direction??"ltr"}const r3=e=>({name:"arrow",options:e,async fn(n){const{x:s,y:r,placement:i,rects:c,platform:d,elements:f,middlewareData:g}=n,{element:m,padding:h=0,offsetParent:x="real"}=As(e,n)||{};if(m==null)return{};const y=Yj(h),w={x:s,y:r},S=zh(i),_=Oh(S),j=await d.getDimensions(m),E=S==="y",k=E?"top":"left",N=E?"bottom":"right",R=E?"clientHeight":"clientWidth",A=c.reference[_]+c.reference[S]-w[S]-c.floating[_],M=w[S]-c.reference[S],O=x==="real"?await d.getOffsetParent?.(m):f.floating;let U=f.floating[R]||c.floating[_];(!U||!await d.isElement?.(O))&&(U=f.floating[R]||c.floating[_]);const I=A/2-M/2,B=U/2-j[_]/2-1,L=Math.min(y[k],B),D=Math.min(y[N],B),q=L,F=U-j[_]-D,Z=U/2-j[_]/2+I,H=zg(q,Z,F),G=!g.arrow&&hr(i)!=null&&Z!==H&&c.reference[_]/2-(Z<q?L:D)-j[_]/2<0,Q=G?Z<q?Z-q:Z-F:0;return{[S]:w[S]+Q,data:{[S]:H,centerOffset:Z-H-Q,...G&&{alignmentOffset:Q}},reset:G}}}),o3=(e,n)=>({...r3(e),options:[e,n]}),l3={name:"hide",async fn(e){const{width:n,height:s,x:r,y:i}=e.rects.reference,c=n===0&&s===0&&r===0&&i===0;return{data:{referenceHidden:(await lM().fn(e)).data?.referenceHidden||c}}}},Xu={sideX:"left",sideY:"top"},i3={name:"adaptiveOrigin",async fn(e){const{x:n,y:s,rects:{floating:r},elements:{floating:i},platform:c,strategy:d,placement:f}=e,g=Ft(i),m=g.getComputedStyle(i);if(!(m.transitionDuration!=="0s"&&m.transitionDuration!==""))return{x:n,y:s,data:Xu};const x=await c.getOffsetParent?.(i);let y={width:0,height:0};if(d==="fixed"&&g?.visualViewport)y={width:g.visualViewport.width,height:g.visualViewport.height};else if(x===g){const k=xt(i);y={width:k.documentElement.clientWidth,height:k.documentElement.clientHeight}}else await c.isElement?.(x)&&(y=await c.getDimensions(x));const w=Jn(f);let S=n,_=s;w==="left"&&(S=y.width-(n+r.width)),w==="top"&&(_=y.height-(s+r.height));const j=w==="left"?"right":Xu.sideX,E=w==="top"?"bottom":Xu.sideY;return{x:S,y:_,data:{sideX:j,sideY:E}}}};function YS(e,n,s){const r=e==="inline-start"||e==="inline-end";return{top:"top",right:r?s?"inline-start":"inline-end":"right",bottom:"bottom",left:r?s?"inline-end":"inline-start":"left"}[n]}function b1(e,n,s){const{rects:r,placement:i}=e;return{side:YS(n,Jn(i),s),align:hr(i)||"center",anchor:{width:r.reference.width,height:r.reference.height},positioner:{width:r.floating.width,height:r.floating.height}}}function FS(e){const{anchor:n,positionMethod:s="absolute",side:r="bottom",sideOffset:i=0,align:c="center",alignOffset:d=0,collisionBoundary:f,collisionPadding:g=5,sticky:m=!1,arrowPadding:h=5,disableAnchorTracking:x=!1,inline:y,keepMounted:w=!1,floatingRootContext:S,mounted:_,collisionAvoidance:j,shiftCrossAxis:E=!1,nodeId:k,adaptiveOrigin:N,lazyFlip:R=!1,externalTree:A}=e,[M,O]=v.useState(null);!_&&M!==null&&O(null);const U=j.side||"flip",I=j.align||"flip",B=j.fallbackAxisSide||"end",L=typeof n=="function"?n:void 0,D=Ae(L),q=L?D:n,F=cn(n),Z=cn(_),G=Fh()==="rtl",Q=M||{top:"top",right:"right",bottom:"bottom",left:"left","inline-end":G?"left":"right","inline-start":G?"right":"left"}[r],V=c==="center"?Q:`${Q}-${c}`;let Y=g;const P=1,K=r==="bottom"?P:0,$=r==="top"?P:0,W=r==="right"?P:0,ce=r==="left"?P:0;typeof Y=="number"?Y={top:Y+K,right:Y+ce,bottom:Y+$,left:Y+W}:Y&&(Y={top:(Y.top||0)+K,right:(Y.right||0)+ce,bottom:(Y.bottom||0)+$,left:(Y.left||0)+W});const ie={boundary:f==="clipping-ancestors"?"clippingAncestors":f,padding:Y},oe=v.useRef(null),ue=cn(i),te=cn(d),Ne=typeof i!="function"?i:0,$e=typeof d!="function"?d:0,be=[];y&&be.push(y),be.push(nM(dt=>{const Tt=b1(dt,r,G),Xt=typeof ue.current=="function"?ue.current(Tt):ue.current,yt=typeof te.current=="function"?te.current(Tt):te.current;return{mainAxis:Xt,crossAxis:yt,alignmentAxis:yt}},[Ne,$e,G,r]));const Se=I==="none"&&U!=="shift",Ee=!Se&&(m||E||U==="shift"),Oe=U==="none"?null:rM({...ie,padding:{top:Y.top+P,right:Y.right+P,bottom:Y.bottom+P,left:Y.left+P},mainAxis:!E&&U==="flip",crossAxis:I==="flip"?"alignment":!1,fallbackAxisSideDirection:B}),ze=Se?null:aM(dt=>{const Tt=xt(dt.elements.floating).documentElement;return{...ie,rootBoundary:E?{x:0,y:0,width:Tt.clientWidth,height:Tt.clientHeight}:void 0,mainAxis:I!=="none",crossAxis:Ee,limiter:m||E?void 0:sM(Xt=>{if(!oe.current)return{};const{width:yt,height:Wt}=oe.current.getBoundingClientRect(),Vt=Ea(Jn(Xt.placement)),rn=Vt==="y"?yt:Wt,Tn=Vt==="y"?Y.left+Y.right:Y.top+Y.bottom;return{offset:rn/2+Tn/2}})}},[ie,m,E,Y,I]);U==="shift"||I==="shift"||c==="center"?be.push(ze,Oe):be.push(Oe,ze),be.push(oM({...ie,apply({elements:{floating:dt},availableWidth:Tt,availableHeight:Xt,rects:yt}){if(!Z.current)return;const Wt=dt.style;Wt.setProperty("--available-width",`${Tt}px`),Wt.setProperty("--available-height",`${Xt}px`);const Vt=Ft(dt).devicePixelRatio||1,{x:rn,y:Tn,width:qn,height:ta}=yt.reference,Vn=(Math.round((rn+qn)*Vt)-Math.round(rn*Vt))/Vt,es=(Math.round((Tn+ta)*Vt)-Math.round(Tn*Vt))/Vt;Wt.setProperty("--anchor-width",`${Vn}px`),Wt.setProperty("--anchor-height",`${es}px`)}}),o3(dt=>({element:oe.current||xt(dt.elements.floating).createElement("div"),padding:h,offsetParent:"floating"}),[h]),{name:"transformOrigin",fn(dt){const{elements:Tt,middlewareData:Xt,placement:yt,rects:Wt,y:Vt}=dt,rn=Jn(yt),Tn=Ea(rn),qn=oe.current,ta=Xt.arrow?.x||0,Vn=Xt.arrow?.y||0,es=qn?.clientWidth||0,An=qn?.clientHeight||0,na=ta+es/2,Na=Vn+An/2,ts=Math.abs(Xt.shift?.y||0),nt=Wt.reference.height/2,At=typeof i=="function"?i(b1(dt,r,G)):i,yn=ts>At,en={top:`${na}px calc(100% + ${At}px)`,bottom:`${na}px ${-At}px`,left:`calc(100% + ${At}px) ${Na}px`,right:`${-At}px ${Na}px`}[rn],kt=`${na}px ${Wt.reference.y+nt-Vt}px`;return Tt.floating.style.setProperty("--transform-origin",Ee&&Tn==="y"&&yn?kt:en),{}}},l3,N),Re(()=>{!_&&S&&S.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[_,S]);const xe=v.useMemo(()=>({elementResize:!x&&typeof ResizeObserver<"u",layoutShift:!x&&typeof IntersectionObserver<"u"}),[x]),{refs:ke,elements:_e,x:De,y:Ge,middlewareData:qe,update:Me,placement:ve,context:re,isPositioned:ye,floatingStyles:je}=kM({rootContext:S,open:w?_:void 0,placement:V,middleware:be,strategy:s,whileElementsMounted:w?void 0:(...dt)=>c1(...dt,xe),nodeId:k,externalTree:A}),{sideX:Pe,sideY:Ze}=qe.adaptiveOrigin||Xu,_t=ye?s:"fixed",Ht=v.useMemo(()=>{const dt=N?{position:_t,[Pe]:De,[Ze]:Ge}:{position:_t,...je};return ye||(dt.opacity=0),dt},[N,_t,Pe,De,Ze,Ge,je,ye]),vt=v.useRef(null);Re(()=>{if(!_)return;const dt=F.current,Tt=typeof dt=="function"?dt():dt,yt=(v1(Tt)?Tt.current:Tt)||null||null;yt!==vt.current&&(ke.setPositionReference(yt),vt.current=yt)},[_,ke,q,F]),v.useEffect(()=>{if(!_)return;const dt=F.current;typeof dt!="function"&&v1(dt)&&dt.current!==vt.current&&(ke.setPositionReference(dt.current),vt.current=dt.current)},[_,ke,q,F]),v.useEffect(()=>{if(w&&_&&_e.domReference&&_e.floating)return c1(_e.domReference,_e.floating,Me,xe)},[w,_,_e,Me,xe]);const ut=Jn(ve),it=YS(r,ut,G),Et=hr(ve)||"center",Bt=!!qe.hide?.referenceHidden;Re(()=>{R&&_&&ye&&O(ut)},[R,_,ye,ut]);const pa=v.useMemo(()=>({position:"absolute",top:qe.arrow?.y,left:qe.arrow?.x}),[qe.arrow]),gn=qe.arrow?.centerOffset!==0;return v.useMemo(()=>({positionerStyles:Ht,arrowStyles:pa,arrowRef:oe,arrowUncentered:gn,side:it,align:Et,physicalSide:ut,anchorHidden:Bt,refs:ke,context:re,isPositioned:ye,update:Me}),[Ht,pa,oe,gn,it,Et,ut,Bt,ke,re,ye,Me])}function v1(e){return e!=null&&"current"in e}function Xh(e){return e==="starting"?sA:an}function XS(e,n,{styles:s,transitionStatus:r,props:i,refs:c,hidden:d,inert:f=!1}){const g={...s};return f&&(g.pointerEvents="none"),Lt("div",e,{state:n,ref:c,props:[{role:"presentation",hidden:d,style:g},Xh(r),i],stateAttributesMapping:fl})}const c3=v.forwardRef(function(n,s){const{render:r,className:i,anchor:c,positionMethod:d="absolute",side:f="top",align:g="center",sideOffset:m=0,alignOffset:h=0,collisionBoundary:x="clipping-ancestors",collisionPadding:y=5,arrowPadding:w=5,sticky:S=!1,disableAnchorTracking:_=!1,collisionAvoidance:j=lA,style:E,...k}=n,N=Wi(),R=t3(),A=N.useState("open"),M=N.useState("mounted"),O=N.useState("trackCursorAxis"),U=N.useState("disableHoverablePopup"),I=N.useState("floatingRootContext"),B=N.useState("instantType"),L=N.useState("transitionStatus"),D=N.useState("hasViewport"),q=FS({anchor:c,positionMethod:d,floatingRootContext:I,mounted:M,side:f,sideOffset:m,align:g,alignOffset:h,collisionBoundary:x,collisionPadding:y,sticky:S,arrowPadding:w,disableAnchorTracking:_,keepMounted:R,collisionAvoidance:j,adaptiveOrigin:D?i3:void 0}),F=v.useMemo(()=>({open:A,side:q.side,align:q.align,anchorHidden:q.anchorHidden,instant:O!=="none"?"tracking-cursor":B}),[A,q.side,q.align,q.anchorHidden,O,B]),Z=XS(n,F,{styles:q.positionerStyles,transitionStatus:L,props:k,refs:[s,N.useStateSetter("positionerElement")],hidden:!M,inert:!A||O==="both"||U});return l.jsx($S.Provider,{value:q,children:Z})}),u3={...fl,...dl},d3=v.forwardRef(function(n,s){const{render:r,className:i,style:c,...d}=n,f=Wi(),{side:g,align:m}=GS(),h=f.useState("open"),x=f.useState("instantType"),y=f.useState("transitionStatus"),w=f.useState("popupProps"),S=f.useState("floatingRootContext"),_=f.useState("disabled"),j=f.useState("closeDelay");xr({open:h,ref:f.context.popupRef,onComplete(){h&&f.context.onOpenChangeComplete?.(!0)}}),NM(S,{enabled:!_,closeDelay:j});const E=f.useStateSetter("popupElement");return Lt("div",n,{state:{open:h,side:g,align:m,instant:x,transitionStatus:y},ref:[s,f.context.popupRef,E],props:[w,Xh(y),d],stateAttributesMapping:u3})}),f3=v.forwardRef(function(n,s){const{render:r,className:i,style:c,...d}=n,f=Wi(),{arrowRef:g,side:m,align:h,arrowUncentered:x,arrowStyles:y}=GS(),w=f.useState("open"),S=f.useState("instantType");return Lt("div",n,{state:{open:w,side:m,align:h,uncentered:x,instant:S},ref:[s,g],props:[{style:y,"aria-hidden":!0},d],stateAttributesMapping:fl})}),m3=function(n){const{delay:s,closeDelay:r,timeout:i=400}=n,c=v.useMemo(()=>({delay:s,closeDelay:r}),[s,r]),d=v.useMemo(()=>({open:s,close:r}),[s,r]);return l.jsx(HS.Provider,{value:c,children:l.jsx(hT,{delay:d,timeoutMs:i,children:n.children})})};function Kh(e){return Lh(19)?e:e?"true":void 0}function p3(e){const[n,s]=v.useState({current:e,previous:null});return e!==n.current&&s({current:e,previous:n.current}),n.previous}function Pt(...e){return kj(vh(e))}function g3({delay:e=0,...n}){return l.jsx(m3,{"data-slot":"tooltip-provider",delay:e,...n})}function Qh({...e}){return l.jsx(qM,{"data-slot":"tooltip",...e})}function Zh({...e}){return l.jsx(e3,{"data-slot":"tooltip-trigger",...e})}function Jh({className:e,side:n="top",sideOffset:s=4,align:r="center",alignOffset:i=0,children:c,...d}){return l.jsx(a3,{children:l.jsx(c3,{align:r,alignOffset:i,side:n,sideOffset:s,className:"isolate z-50",children:l.jsxs(d3,{"data-slot":"tooltip-content",className:Pt("z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...d,children:[c,l.jsx(f3,{className:"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5"})]})})})}function ui({label:e,active:n,onClick:s,isAdd:r,isSettings:i,isDefault:c,icon:d,title:f,testId:g}){const m=e.trim()||"·",{initials:h,subLabel:x}=h3(m),y=r||i?"indigo":b3(m),w=x&&!r&&!i&&!c;return l.jsxs(Qh,{children:[l.jsx(Zh,{render:l.jsxs("button",{type:"button",onClick:s,"data-testid":g,className:"group relative flex w-full cursor-pointer flex-col items-center gap-1",children:[l.jsx("span",{className:Ie("flex size-10 items-center justify-center rounded-xl text-sm font-bold transition-all",n&&"ring-2 ring-foreground ring-offset-2 ring-offset-card",r&&"border border-dashed border-muted-fg/50 bg-transparent text-muted-fg hover:bg-accent/60 hover:text-foreground",i&&"bg-muted text-muted-fg hover:bg-accent hover:text-foreground",c&&"overflow-hidden bg-muted",!r&&!i&&!c&&n&&j3(y),!r&&!i&&!c&&!n&&_3(y)),children:d??h}),w&&l.jsx("span",{className:"block max-w-[3.6rem] truncate text-[9px] leading-tight text-muted-fg group-hover:text-foreground",children:x})]})}),l.jsx(Jh,{side:"right",children:f||e})]})}function h3(e){const n=e.trim().replace(/[_\-.]+/g," ").replace(/\s+/g," ");if(!n)return{initials:"·",subLabel:null};const s=n.split(" ");if(s.length>=2)return{initials:(s[0][0]+s[1][0]).toUpperCase(),subLabel:x3(n)};const r=s[0];return r.length<=4?{initials:r[0].toUpperCase(),subLabel:r}:{initials:r[0].toUpperCase(),subLabel:r.slice(0,4)+"…"}}function x3(e){return e.length>6?e.slice(0,5)+"…":e}function b3(e){let n=0;for(let s=0;s<e.length;s++)n=n*31+e.charCodeAt(s)|0;return D0[Math.abs(n)%D0.length]}const v3={sky:"bg-sky-500/15 text-sky-300 hover:bg-sky-500/25",violet:"bg-violet-500/15 text-violet-300 hover:bg-violet-500/25",emerald:"bg-emerald-500/15 text-emerald-300 hover:bg-emerald-500/25",amber:"bg-amber-500/15 text-amber-300 hover:bg-amber-500/25",rose:"bg-rose-500/15 text-rose-300 hover:bg-rose-500/25",indigo:"bg-indigo-500/15 text-indigo-300 hover:bg-indigo-500/25",teal:"bg-teal-500/15 text-teal-300 hover:bg-teal-500/25",fuchsia:"bg-fuchsia-500/15 text-fuchsia-300 hover:bg-fuchsia-500/25"},y3={sky:"bg-sky-500/30 text-sky-100",violet:"bg-violet-500/30 text-violet-100",emerald:"bg-emerald-500/30 text-emerald-100",amber:"bg-amber-500/30 text-amber-100",rose:"bg-rose-500/30 text-rose-100",indigo:"bg-indigo-500/30 text-indigo-100",teal:"bg-teal-500/30 text-teal-100",fuchsia:"bg-fuchsia-500/30 text-fuchsia-100"};function _3(e){return v3[e]}function j3(e){return y3[e]}function Ko({content:e,side:n="top",children:s}){return e?l.jsxs(Qh,{children:[l.jsx(Zh,{render:s}),l.jsx(Jh,{side:n,children:e})]}):s}const KS=0,QS=1,ZS=2,y1=3;var _1=Object.prototype.hasOwnProperty;function Ug(e,n){var s,r;if(e===n)return!0;if(e&&n&&(s=e.constructor)===n.constructor){if(s===Date)return e.getTime()===n.getTime();if(s===RegExp)return e.toString()===n.toString();if(s===Array){if((r=e.length)===n.length)for(;r--&&Ug(e[r],n[r]););return r===-1}if(!s||typeof e=="object"){r=0;for(s in e)if(_1.call(e,s)&&++r&&!_1.call(n,s)||!(s in n)||!Ug(e[s],n[s]))return!1;return Object.keys(n).length===r}}return e!==e&&n!==n}const js=new WeakMap,Ss=()=>{},Ln=Ss(),Hg=Object,ht=e=>e===Ln,Fa=e=>typeof e=="function",pr=(e,n)=>({...e,...n}),JS=e=>Fa(e.then),zp={},Ru={},Wh="undefined",nc=typeof window!=Wh,qg=typeof document!=Wh,S3=nc&&"Deno"in window,w3=()=>nc&&typeof window.requestAnimationFrame!=Wh,WS=(e,n)=>{const s=js.get(e);return[()=>!ht(n)&&e.get(n)||zp,r=>{if(!ht(n)){const i=e.get(n);n in Ru||(Ru[n]=i),s[5](n,pr(i,r),i||zp)}},s[6],()=>!ht(n)&&n in Ru?Ru[n]:!ht(n)&&e.get(n)||zp]};let Vg=!0;const C3=()=>Vg,[$g,Gg]=nc&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[Ss,Ss],E3=()=>{const e=qg&&document.visibilityState;return ht(e)||e!=="hidden"},k3=e=>(qg&&document.addEventListener("visibilitychange",e),$g("focus",e),()=>{qg&&document.removeEventListener("visibilitychange",e),Gg("focus",e)}),R3=e=>{const n=()=>{Vg=!0,e()},s=()=>{Vg=!1};return $g("online",n),$g("offline",s),()=>{Gg("online",n),Gg("offline",s)}},N3={isOnline:C3,isVisible:E3},T3={initFocus:k3,initReconnect:R3},j1=!Ki.useId,$o=!nc||S3,A3=e=>w3()?window.requestAnimationFrame(e):setTimeout(e,1),Dp=$o?v.useEffect:v.useLayoutEffect,Lp=typeof navigator<"u"&&navigator.connection,S1=!$o&&Lp&&(["slow-2g","2g"].includes(Lp.effectiveType)||Lp.saveData),Nu=new WeakMap,M3=e=>Hg.prototype.toString.call(e),Pp=(e,n)=>e===`[object ${n}]`;let O3=0;const Yg=e=>{const n=typeof e,s=M3(e),r=Pp(s,"Date"),i=Pp(s,"RegExp"),c=Pp(s,"Object");let d,f;if(Hg(e)===e&&!r&&!i){if(d=Nu.get(e),d)return d;if(d=++O3+"~",Nu.set(e,d),Array.isArray(e)){for(d="@",f=0;f<e.length;f++)d+=Yg(e[f])+",";Nu.set(e,d)}if(c){d="#";const g=Hg.keys(e).sort();for(;!ht(f=g.pop());)ht(e[f])||(d+=f+":"+Yg(e[f])+",");Nu.set(e,d)}}else d=r?e.toJSON():n=="symbol"?e.toString():n=="string"?JSON.stringify(e):""+e;return d},ex=e=>{if(Fa(e))try{e=e()}catch{e=""}const n=e;return e=typeof e=="string"?e:(Array.isArray(e)?e.length:e)?Yg(e):"",[e,n]};let z3=0;const Fg=()=>++z3;async function ew(...e){const[n,s,r,i]=e,c=pr({populateCache:!0,throwOnError:!0},typeof i=="boolean"?{revalidate:i}:i||{});let d=c.populateCache;const f=c.rollbackOnError;let g=c.optimisticData;const m=y=>typeof f=="function"?f(y):f!==!1,h=c.throwOnError;if(Fa(s)){const y=s,w=[],S=n.keys();for(const _ of S)!/^\$(inf|sub)\$/.test(_)&&y(n.get(_)._k)&&w.push(_);return Promise.all(w.map(x))}return x(s);async function x(y){const[w]=ex(y);if(!w)return;const[S,_]=WS(n,w),[j,E,k,N]=js.get(n),R=()=>{const F=j[w];return(Fa(c.revalidate)?c.revalidate(S().data,y):c.revalidate!==!1)&&(delete k[w],delete N[w],F&&F[0])?F[0](ZS).then(()=>S().data):S().data};if(e.length<3)return R();let A=r,M,O=!1;const U=Fg();E[w]=[U,0];const I=!ht(g),B=S(),L=B.data,D=B._c,q=ht(D)?L:D;if(I&&(g=Fa(g)?g(q,L):g,_({data:g,_c:q})),Fa(A))try{A=A(q)}catch(F){M=F,O=!0}if(A&&JS(A))if(A=await A.catch(F=>{M=F,O=!0}),U!==E[w][0]){if(O)throw M;return A}else O&&I&&m(M)&&(d=!0,_({data:q,_c:Ln}));if(d&&!O)if(Fa(d)){const F=d(A,q);_({data:F,error:Ln,_c:Ln})}else _({data:A,error:Ln,_c:Ln});if(E[w][1]=Fg(),Promise.resolve(R()).then(()=>{_({_c:Ln})}),O){if(h)throw M;return}return A}}const w1=(e,n)=>{for(const s in e)e[s][0]&&e[s][0](n)},D3=(e,n)=>{if(!js.has(e)){const s=pr(T3,n),r=Object.create(null),i=ew.bind(Ln,e);let c=Ss;const d=Object.create(null),f=(h,x)=>{const y=d[h]||[];return d[h]=y,y.push(x),()=>y.splice(y.indexOf(x),1)},g=(h,x,y)=>{e.set(h,x);const w=d[h];if(w)for(const S of w)S(x,y)},m=()=>{if(!js.has(e)&&(js.set(e,[r,Object.create(null),Object.create(null),Object.create(null),i,g,f]),!$o)){const h=s.initFocus(setTimeout.bind(Ln,w1.bind(Ln,r,KS))),x=s.initReconnect(setTimeout.bind(Ln,w1.bind(Ln,r,QS)));c=()=>{h&&h(),x&&x(),js.delete(e)}}};return m(),[e,i,m,c]}return[e,js.get(e)[4]]},L3=(e,n,s,r,i)=>{const c=s.errorRetryCount,d=i.retryCount,f=~~((Math.random()+.5)*(1<<(d<8?d:8)))*s.errorRetryInterval;!ht(c)&&d>c||setTimeout(r,f,i)},P3=Ug,[tw,B3]=D3(new Map),I3=pr({onLoadingSlow:Ss,onSuccess:Ss,onError:Ss,onErrorRetry:L3,onDiscarded:Ss,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:S1?1e4:5e3,focusThrottleInterval:5*1e3,dedupingInterval:2*1e3,loadingTimeout:S1?5e3:3e3,compare:P3,isPaused:()=>!1,cache:tw,mutate:B3,fallback:{}},N3),U3=(e,n)=>{const s=pr(e,n);if(n){const{use:r,fallback:i}=e,{use:c,fallback:d}=n;r&&c&&(s.use=r.concat(c)),i&&d&&(s.fallback=pr(i,d))}return s},H3=v.createContext({}),q3="$inf$",nw=nc&&window.__SWR_DEVTOOLS_USE__,V3=nw?window.__SWR_DEVTOOLS_USE__:[],$3=()=>{nw&&(window.__SWR_DEVTOOLS_REACT__=Ki)},G3=e=>Fa(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(e[1]===null?e[2]:e[1])||{}],aw=()=>{const e=v.useContext(H3);return v.useMemo(()=>pr(I3,e),[e])},Y3=e=>(n,s,r)=>e(n,s&&((...c)=>{const[d]=ex(n),[,,,f]=js.get(tw);if(d.startsWith(q3))return s(...c);const g=f[d];return ht(g)?s(...c):(delete f[d],g)}),r),F3=V3.concat(Y3),X3=e=>function(...s){const r=aw(),[i,c,d]=G3(s),f=U3(r,d);let g=e;const{use:m}=f,h=(m||[]).concat(F3);for(let x=h.length;x--;)g=h[x](g);return g(i,c||f.fetcher||null,f)},K3=(e,n,s)=>{const r=n[e]||(n[e]=[]);return r.push(s),()=>{const i=r.indexOf(s);i>=0&&(r[i]=r[r.length-1],r.pop())}};$3();const Bp=Ki.use||(e=>{switch(e.status){case"pending":throw e;case"fulfilled":return e.value;case"rejected":throw e.reason;default:throw e.status="pending",e.then(n=>{e.status="fulfilled",e.value=n},n=>{e.status="rejected",e.reason=n}),e}}),Ip={dedupe:!0},C1=Promise.resolve(Ln),Q3=()=>Ss,Z3=(e,n,s)=>{const{cache:r,compare:i,suspense:c,fallbackData:d,revalidateOnMount:f,revalidateIfStale:g,refreshInterval:m,refreshWhenHidden:h,refreshWhenOffline:x,keepPreviousData:y,strictServerPrefetchWarning:w}=s,[S,_,j,E]=js.get(r),[k,N]=ex(e),R=v.useRef(!1),A=v.useRef(!1),M=v.useRef(k),O=v.useRef(n),U=v.useRef(s),I=()=>U.current,B=()=>I().isVisible()&&I().isOnline(),[L,D,q,F]=WS(r,k),Z=v.useRef({}).current,H=ht(d)?ht(s.fallback)?Ln:s.fallback[k]:d,G=(xe,ke)=>{for(const _e in Z){const De=_e;if(De==="data"){if(!i(xe[De],ke[De])&&(!ht(xe[De])||!i(ie,ke[De])))return!1}else if(ke[De]!==xe[De])return!1}return!0},Q=!R.current,V=v.useMemo(()=>{const xe=L(),ke=F(),_e=Me=>{const ve=pr(Me);return delete ve._k,(()=>{if(!k||!n||I().isPaused())return!1;if(Q&&!ht(f))return f;const ye=ht(H)?ve.data:H;return ht(ye)||g})()?{isValidating:!0,isLoading:!0,...ve}:ve},De=_e(xe),Ge=xe===ke?De:_e(ke);let qe=De;return[()=>{const Me=_e(L());return G(Me,qe)?(qe.data=Me.data,qe.isLoading=Me.isLoading,qe.isValidating=Me.isValidating,qe.error=Me.error,qe):(qe=Me,Me)},()=>Ge]},[r,k]),Y=ud.useSyncExternalStore(v.useCallback(xe=>q(k,(ke,_e)=>{G(_e,ke)||xe()}),[r,k]),V[0],V[1]),P=S[k]&&S[k].length>0,K=Y.data,$=ht(K)?H&&JS(H)?Bp(H):H:K,W=Y.error,ce=v.useRef($),ie=y?ht(K)?ht(ce.current)?$:ce.current:K:$,oe=k&&ht($),ue=v.useRef(null);!$o&&ud.useSyncExternalStore(Q3,()=>(ue.current=!1,ue),()=>(ue.current=!0,ue));const te=ue.current;w&&te&&!c&&oe&&console.warn(`Missing pre-initiated data for serialized key "${k}" during server-side rendering. Data fetching should be initiated on the server and provided to SWR via fallback data. You can set "strictServerPrefetchWarning: false" to disable this warning.`);const Ne=!k||!n||I().isPaused()||P&&!ht(W)?!1:Q&&!ht(f)?f:c?ht($)?!1:g:ht($)||g,$e=Q&&Ne,be=ht(Y.isValidating)?$e:Y.isValidating,Se=ht(Y.isLoading)?$e:Y.isLoading,Ee=v.useCallback(async xe=>{const ke=O.current;if(!k||!ke||A.current||I().isPaused())return!1;let _e,De,Ge=!0;const qe=xe||{},Me=!j[k]||!qe.dedupe,ve=()=>j1?!A.current&&k===M.current&&R.current:k===M.current,re={isValidating:!1,isLoading:!1},ye=()=>{D(re)},je=()=>{const Ze=j[k];Ze&&Ze[1]===De&&delete j[k]},Pe={isValidating:!0};ht(L().data)&&(Pe.isLoading=!0);try{if(Me&&(D(Pe),s.loadingTimeout&&ht(L().data)&&setTimeout(()=>{Ge&&ve()&&I().onLoadingSlow(k,s)},s.loadingTimeout),j[k]=[ke(N),Fg()]),[_e,De]=j[k],_e=await _e,Me&&setTimeout(je,s.dedupingInterval),!j[k]||j[k][1]!==De)return Me&&ve()&&I().onDiscarded(k),!1;re.error=Ln;const Ze=_[k];if(!ht(Ze)&&(De<=Ze[0]||De<=Ze[1]||Ze[1]===0))return ye(),Me&&ve()&&I().onDiscarded(k),!1;const _t=L().data;re.data=i(_t,_e)?_t:_e,Me&&ve()&&I().onSuccess(_e,k,s)}catch(Ze){je();const _t=I(),{shouldRetryOnError:Ht}=_t;_t.isPaused()||(re.error=Ze,Me&&ve()&&(_t.onError(Ze,k,_t),(Ht===!0||Fa(Ht)&&Ht(Ze))&&(!I().revalidateOnFocus||!I().revalidateOnReconnect||B())&&_t.onErrorRetry(Ze,k,_t,vt=>{const ut=S[k];ut&&ut[0]&&ut[0](y1,vt)},{retryCount:(qe.retryCount||0)+1,dedupe:!0})))}return Ge=!1,ye(),!0},[k,r]),Oe=v.useCallback((...xe)=>ew(r,M.current,...xe),[]);if(Dp(()=>{O.current=n,U.current=s,ht(K)||(ce.current=K)}),Dp(()=>{if(!k)return;const xe=Ee.bind(Ln,Ip);let ke=0;I().revalidateOnFocus&&(ke=Date.now()+I().focusThrottleInterval);const De=K3(k,S,(Ge,qe={})=>{if(Ge==KS){const Me=Date.now();I().revalidateOnFocus&&Me>ke&&B()&&(ke=Me+I().focusThrottleInterval,xe())}else if(Ge==QS)I().revalidateOnReconnect&&B()&&xe();else{if(Ge==ZS)return Ee();if(Ge==y1)return Ee(qe)}});return A.current=!1,M.current=k,R.current=!0,D({_k:N}),Ne&&(j[k]||(ht($)||$o?xe():A3(xe))),()=>{A.current=!0,De()}},[k]),Dp(()=>{let xe;function ke(){const De=Fa(m)?m(L().data):m;De&&xe!==-1&&(xe=setTimeout(_e,De))}function _e(){!L().error&&(h||I().isVisible())&&(x||I().isOnline())?Ee(Ip).then(ke):ke()}return ke(),()=>{xe&&(clearTimeout(xe),xe=-1)}},[m,h,x,k]),v.useDebugValue(ie),c){if(!j1&&$o&&oe)throw new Error("Fallback data is required when using Suspense in SSR.");oe&&(O.current=n,U.current=s,A.current=!1);const xe=E[k],ke=!ht(xe)&&oe?Oe(xe):C1;if(Bp(ke),!ht(W)&&oe)throw W;const _e=oe?Ee(Ip):C1;!ht(ie)&&oe&&(_e.status="fulfilled",_e.value=!0),Bp(_e)}return{mutate:Oe,get data(){return Z.data=!0,ie},get error(){return Z.error=!0,W},get isValidating(){return Z.isValidating=!0,be},get isLoading(){return Z.isLoading=!0,Se}}},Qe=X3(Z3);let Qo=null;function Ur(e){Qo=e}function tx(){return Qo}class ac extends Error{status;body;constructor(n,s,r){super(s),this.status=n,this.body=r}}async function di(e,n,s,r={}){const i={"content-type":"application/json",...Qo?{authorization:`Bearer ${Qo}`}:{},...r.headers||{}},c=await fetch(n,{...r,method:e,headers:i,body:s!==void 0?JSON.stringify(s):void 0});if(!c.ok){let d="",f=null;try{f=await c.json(),d=f?.error||JSON.stringify(f)}catch{d=await c.text()}throw new ac(c.status,`${e} ${n} → ${c.status}: ${d}`,f)}if(c.status!==204)return await c.json()}const ge={get:e=>di("GET",e),post:(e,n)=>di("POST",e,n),put:(e,n)=>di("PUT",e,n),patch:(e,n)=>di("PATCH",e,n),del:e=>di("DELETE",e)};async function sw(e,n,s,r){const i=await fetch(e,{method:"POST",signal:r,headers:{"content-type":"application/json",...Qo?{authorization:`Bearer ${Qo}`}:{}},body:JSON.stringify(n)});if(!i.ok||!i.body){const g=await i.text().catch(()=>"");throw new ac(i.status,`POST ${e} → ${i.status}: ${g||"stream failed"}`)}const c=i.body.getReader(),d=new TextDecoder("utf-8");let f="";for(;;){const{value:g,done:m}=await c.read();if(m)break;f+=d.decode(g,{stream:!0});let h=f.indexOf(`
522
522
  `);for(;h>=0;){const x=f.slice(0,h).trim();if(f=f.slice(h+1),x)try{s(JSON.parse(x))}catch{}h=f.indexOf(`
523
- `)}}if(f.trim())try{s(JSON.parse(f.trim()))}catch{}}const J3={get:()=>ge.get("/health")},Qn={list:()=>ge.get("/projects"),register:e=>ge.post("/projects",{path:e}),remove:e=>ge.del(`/projects/${encodeURIComponent(e)}`),rebuild:e=>ge.post(`/projects/${encodeURIComponent(e)}/rebuild`),config:{show:e=>ge.get(`/projects/${e}/config`),set:(e,n)=>ge.patch(`/projects/${e}/config`,{set:n}),unset:(e,n)=>ge.patch(`/projects/${e}/config`,{unset:n}),put:(e,n)=>ge.put(`/projects/${e}/config`,n)},apcProject:{set:(e,n,s)=>ge.patch(`/projects/${e}/apc-project`,{set:n,unset:s}),put:(e,n)=>ge.put(`/projects/${e}/apc-project`,n)},memory:{get:e=>ge.get(`/projects/${e}/memory`),put:(e,n)=>ge.put(`/projects/${e}/memory`,{body:n})}},Jt={list:e=>ge.get(`/projects/${e}/agents`),get:(e,n)=>ge.get(`/projects/${e}/agents/${n}`),create:(e,n)=>ge.post(`/projects/${e}/agents`,n),update:(e,n,s)=>ge.patch(`/projects/${e}/agents/${encodeURIComponent(n)}`,s),remove:(e,n)=>ge.del(`/projects/${e}/agents/${encodeURIComponent(n)}`),chat:(e,n,s)=>ge.post(`/projects/${e}/agents/${encodeURIComponent(n)}/chat`,s),memory:{get:(e,n)=>ge.get(`/projects/${e}/agents/${n}/memory`),put:(e,n,s)=>ge.put(`/projects/${e}/agents/${n}/memory`,{body:s})},vault:e=>ge.get(e?.includeRemoved?"/agents/vault?include_removed=1":"/agents/vault"),vaultCreate:(e,n={},s="")=>ge.post("/agents/vault",{slug:e,fields:n,body:s}),vaultPatch:(e,n)=>ge.patch(`/agents/vault/${encodeURIComponent(e)}`,n),vaultRemove:e=>ge.del(`/agents/vault/${encodeURIComponent(e)}`),vaultRestore:e=>ge.post(`/agents/vault/${encodeURIComponent(e)}/restore`),import:(e,n)=>ge.post(`/projects/${e}/agents/import`,{slug:n})},nx={list:(e,n)=>ge.get(`/projects/${e}/agents/${n}/conversations`),get:(e,n,s)=>ge.get(`/projects/${e}/agents/${n}/conversations/${s}`),compact:(e,n,s)=>ge.post(s?`/projects/${e}/agents/${n}/conversations/${s}/compact`:`/projects/${e}/agents/${n}/compact`,{})},or={list:e=>ge.get(`/projects/${e}/routines`),get:(e,n)=>ge.get(`/projects/${e}/routines/${n}`),run:(e,n)=>ge.post(`/projects/${e}/routines/${n}/run`),enable:(e,n)=>ge.post(`/projects/${e}/routines/${n}/enable`),disable:(e,n)=>ge.post(`/projects/${e}/routines/${n}/disable`),upsert:(e,n)=>ge.post(`/projects/${e}/routines`,n),remove:(e,n)=>ge.del(`/projects/${e}/routines/${encodeURIComponent(n)}`)},lr={list:(e,n="open")=>ge.get(`/projects/${e}/tasks?state=${n}`),global:(e="open")=>ge.get(`/tasks?state=${e}`),add:(e,n)=>ge.post(`/projects/${e}/tasks`,n),done:(e,n)=>ge.post(`/projects/${e}/tasks/${n}/done`),drop:(e,n)=>ge.post(`/projects/${e}/tasks/${n}/drop`),reopen:(e,n)=>ge.post(`/projects/${e}/tasks/${n}/reopen`)},Ti={list:e=>ge.get(`/projects/${e}/mcps`),check:e=>ge.get(`/projects/${e}/mcps/check`),add:(e,n,s)=>ge.post(`/projects/${e}/mcps?scope=${n}`,s),remove:(e,n,s="shared")=>ge.del(`/projects/${e}/mcps/${encodeURIComponent(n)}?scope=${s}`)},Up=e=>{const n=new URLSearchParams;for(const[r,i]of Object.entries(e))i!==void 0&&i!==""&&n.set(r,String(i));const s=n.toString();return s?`?${s}`:""},Xg={global:(e={})=>ge.get(`/messages/global${Up(e)}`),project:(e,n={})=>ge.get(`/projects/${e}/messages${Up(n)}`),search:(e,n,s=50)=>ge.get(`/projects/${e}/messages/search${Up({q:n,limit:s})}`)},W3={global:e=>ge.get(`/sessions${e?`?engine=${encodeURIComponent(e)}`:""}`)},e5={list:()=>ge.get("/tools")},kn={channels:{list:()=>ge.get("/telegram/channels"),upsert:e=>ge.post("/telegram/channels",e),patch:(e,n)=>ge.patch(`/telegram/channels/${e}`,n),remove:e=>ge.del(`/telegram/channels/${encodeURIComponent(e)}`)},contacts:{list:()=>ge.get("/telegram/contacts"),patch:(e,n)=>ge.patch(`/telegram/contacts/${encodeURIComponent(String(e))}`,n),remove:e=>ge.del(`/telegram/contacts/${encodeURIComponent(String(e))}`)},roles:{list:()=>ge.get("/telegram/roles"),set:(e,n)=>ge.put(`/telegram/roles/${encodeURIComponent(e)}`,{tools:n}),remove:e=>ge.del(`/telegram/roles/${encodeURIComponent(e)}`)},status:()=>ge.get("/telegram/status"),start:()=>ge.post("/telegram/start"),stop:()=>ge.post("/telegram/stop"),send:e=>ge.post("/telegram/send",e)},pd={list:()=>ge.get("/engines"),models:e=>ge.post("/engines/models",e)},Zo={reload:()=>ge.post("/admin/reload"),shutdown:()=>ge.post("/admin/shutdown"),config:{get:()=>ge.get("/admin/config"),patch:e=>ge.patch("/admin/config",e)},superAgent:()=>ge.get("/admin/super-agent"),logs:(e="errors",n=200)=>ge.get(`/admin/logs?file=${e}&limit=${n}`)},Jo={list:()=>ge.get("/pair/list"),revoke:e=>ge.del(`/pair/revoke/${encodeURIComponent(e)}`),init:()=>ge.post("/pair/init",{}),status:e=>ge.get(`/pair/status/${encodeURIComponent(e)}`),confirm:e=>ge.post("/pair/confirm",e)},E1={get:()=>ge.get("/identity"),patch:e=>ge.patch("/identity",e)},rw={send:(e,n)=>ge.post(`/projects/${e}/super-agent/chat`,n),stream:(e,n,s,r)=>sw(`/projects/${e}/super-agent/chat/stream`,n,s,r),summarize:e=>ge.post("/super-agent/summarize",e)},t5={dirs:e=>ge.get(`/admin/fs/dirs?path=${encodeURIComponent(e)}`)},n5=["alloy","echo","fable","onyx","nova","shimmer"],a5=["Kore","Puck","Charon","Fenrir","Aoede"],s5=["eleven_multilingual_v2","eleven_turbo_v2_5","eleven_flash_v2_5"],r5=["tts-1","tts-1-hd"],o5=["tiny","base","small","medium","large-v2","large-v3"],gd={piper:{name:"Piper",note:"Local, offline (CLI + modelo .onnx). Sin API key.",local:!0},elevenlabs:{name:"ElevenLabs",note:"Cloud, multilingüe. Requiere API key."},openai:{name:"OpenAI",note:"Cloud (tts-1 / tts-1-hd). Usa la key de OpenAI."},gemini:{name:"Gemini",note:"Cloud (preview). Usa la key de Gemini."},mock:{name:"Mock",note:"Silencio de prueba. Fallback siempre disponible.",local:!0}};async function l5(e){const n=tx(),s=await fetch(`/voice/tts?path=${encodeURIComponent(e)}`,{headers:n?{authorization:`Bearer ${n}`}:{}});if(!s.ok){const i=await s.text().catch(()=>"");throw new Error(`No se pudo leer el audio (${s.status}): ${i.slice(0,160)}`)}const r=await s.blob();return URL.createObjectURL(r)}const ow={providers:()=>ge.get("/tts/providers"),say:e=>ge.post("/tts/say",e),turn:e=>ge.post("/voice/turn",e)},k1={manifest:()=>ge.get("/deck/manifest"),setWidget:(e,n)=>ge.patch(`/deck/widgets/${encodeURIComponent(e)}`,n),exec:e=>ge.post("/deck/exec",e)},Ir=e=>`/projects/${e}/code/sessions`,sr={sessions:{list:e=>ge.get(Ir(e)).then(n=>n.sessions),get:(e,n)=>ge.get(`${Ir(e)}/${n}`),create:(e,n={})=>ge.post(Ir(e),n),update:(e,n,s)=>ge.patch(`${Ir(e)}/${n}`,s),remove:(e,n)=>ge.del(`${Ir(e)}/${n}`)},changes:(e,n)=>ge.get(`${Ir(e)}/${n}/changes`),stream:(e,n,s,r,i)=>sw(`${Ir(e)}/${n}/chat/stream`,s,r,i)};function sc(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/projects",()=>Qn.list(),{refreshInterval:Ed.projects});return{projects:(e||[]).slice().sort((c,d)=>{const f=Number(c.id),g=Number(d.id);return f===0&&g!==0?-1:g===0&&f!==0?1:f-g}),error:n,isLoading:s,mutate:r}}function lw(e){const{projects:n,isLoading:s,mutate:r}=sc();return{project:n.find(c=>String(c.id)===e)??null,isLoading:s,mutate:r}}const i5={common:{loading:"Cargando…",saving:"Guardando…",cancel:"Cancelar",save:"Guardar",delete:"Borrar",edit:"Editar",create:"Crear",add:"Agregar",remove:"Quitar",reload:"Recargar",shutdown:"Apagar",enabled:"Habilitado",disabled:"Deshabilitado",enable:"Habilitar",disable:"Deshabilitar",open:"Abrir",close:"Cerrar",confirm:"Confirmar",optional:"(opcional)",none:"—",none_yet:"Todavía no hay nada.",error_generic:"Algo salió mal.",search:"Buscar",new:"Nuevo",restore:"Restaurar",show:"Mostrar",hide:"Ocultar",copy:"Copiar",run:"Ejecutar"},daemon:{connecting:"Conectando con el daemon…",unreachable:"No pude llegar al daemon en localhost:7430.",unreachable_hint:"Arrancá APX con `apx daemon start` y refrescá.",version:"Versión",uptime:"Uptime",status:"Status",running:"running",down:"down",reload_hint:"POST /admin/reload — relee ~/.apx/config.json sin reiniciar.",shutdown_confirm:"¿Apagar el daemon? Las próximas requests fallarán hasta levantarlo de nuevo.",shutdown_done:"Daemon detenido."},pairing:{title:"Vincular este equipo",subtitle:"Estás entrando desde fuera de esta máquina. Por seguridad, vinculá este navegador con un código de pairing.",steps_title:"Cómo obtener el código",step_1:"En la PC donde corre APX, abrí una terminal.",step_2:"Ejecutá `apx pair` (o escaneá el QR con APX Deck).",step_3:"Copiá el código que aparece debajo del QR y pegalo acá.",code_label:"Código de pairing",code_ph:"p. ej. 7f3a1c9e-…",label_label:"Nombre de este equipo",label_ph:"p. ej. Notebook del living",submit:"Vincular",linking:"Vinculando…",success:"Equipo vinculado ✓",err_required:"Pegá el código de pairing.",err_expired:"El código expiró. Volvé a correr `apx pair` y probá de nuevo.",err_unknown:"Código desconocido o ya usado. Generá uno nuevo con `apx pair`.",err_generic:"No se pudo vincular. Revisá el código e intentá otra vez.",revoke_hint:"Podés revocar este equipo cuando quieras desde Settings o con `apx pair revoke`."},nav:{apx_admin:"APX",settings:"Settings",project:"Proyecto",add_project:"Agregar proyecto",modules:{voice:"Voces",desktop:"Escritorio",deck:"Deck",code:"Code"}},topbar:{breadcrumb_root:"APX",breadcrumb_settings:"APX › Settings",breadcrumb_project:"APX › Proyecto",breadcrumb_base:"Base",breadcrumb_projects:"Proyectos",light:"Cambiar a claro",dark:"Cambiar a oscuro",lang_toggle:"Idioma"},admin:{title:"APX",subtitle:"Panel general. Configuración global, canales y proyectos.",engines_title:"Engines",engines_subtitle:"Adaptadores LLM disponibles. Las API keys viven en ~/.apx/config.json.",telegram_title:"Telegram",telegram_subtitle:"Canales configurados. Cada uno puede estar pineado a un proyecto.",telegram_polling_on:"Polling activo",telegram_polling_off:"Deshabilitado",telegram_add_channel:"Canal",telegram_send_test:"Probar",telegram_send_test_title:"Enviar a",telegram_default_message:"Mensaje de prueba desde el panel de APX ✅",projects_title:"Proyectos registrados",projects_subtitle:"Click en un proyecto para abrir su panel.",unregister:"Desregistrar",unregister_confirm:"¿Quitar {label} de APX? La carpeta no se borra; sólo se desregistra.",reload_success:"Config recargada.",telegram_polling_started:"Polling iniciado.",telegram_polling_stopped:"Polling detenido.",telegram_channel_removed:"Canal eliminado.",agents_badge:"agents",engine_badge:"sí",engine_badge_no:"no",base_label:"Base"},add_project:{title:"Agregar proyecto",subtitle:"APX indexará .apc/, agents y AGENTS.md en esa carpeta.",path_label:"Ruta absoluta",path_hint:"Equivalente a apx project add /ruta/al/proyecto",path_placeholder:"/Volumes/SSDT7Shield/proyectos_varios/mi-proyecto",register:"Registrar",path_required:"Ruta requerida.",registered:"Proyecto #{id} registrado.",search_btn:"Buscar",browser_unavailable:"Explorador no disponible hasta reiniciar daemon. Pegá ruta manual.",no_folders:"Sin carpetas."},settings:{title:"Settings",subtitle:"Preferencias del panel + diagnóstico del daemon local.",appearance:"Apariencia",light_mode:"Claro",dark_mode:"Oscuro",language:"Idioma",daemon:"Daemon",daemon_sub:"Estado del proceso local que sirve esta web y orquesta los agentes.",engines:"Engines disponibles",engines_sub:"Adaptadores LLM compilados con el daemon.",token:"Token para esta sesión",token_sub:"Si esta web no logró auto-cargar el token, pegalo acá.",token_active:"(ya hay token activo)",token_paste:"Pegá el bearer del daemon",token_saved:"Token guardado.",devices:"Dispositivos pareados",devices_sub:"GET /pair/list. Revocar invalida ese bearer en el daemon.",devices_empty:"No hay clientes pareados todavía.",devices_revoke_confirm:"Revocar cliente {id}?",devices_revoke_success:"Cliente revocado.",devices_pair_btn:"Vincular dispositivo",devices_pair_title:"Vincular dispositivo",devices_pair_desc:"Escaneá el QR con la cámara del celu para entrar directo, o pegá el código en la otra PC.",devices_pair_scan:"Escaneá con la cámara del teléfono — te abre la web ya vinculada.",devices_pair_code:"O pegá este código en la pantalla de pairing:",devices_pair_url:"URL de acceso",devices_pair_link:"O copiá este link y abrilo en el otro dispositivo (entra solo):",devices_pair_copy:"Copiar",devices_pair_copied:"Link copiado al portapapeles.",devices_pair_copied_code:"Código copiado.",devices_pair_expires:"Expira en {s}s",devices_pair_expired:"El código expiró.",devices_pair_regen:"Generar otro",devices_pair_waiting:"Esperando que el dispositivo confirme…",devices_pair_done:"Dispositivo vinculado ✓",devices_pair_localhost_only:"Solo se pueden generar códigos desde la PC del daemon (localhost).",devices_last_seen:"visto:",devices_never:"nunca",devices_revoke:"Revocar",account_section:"Cuenta",agents_section:"Agentes & modelos",channels_section:"Canales & dispositivos",advanced_section:"Avanzado",tabs:{identity:"Identidad",super_agent:"Super-agente",engines:"Engines & modelos",telegram:"Telegram",devices:"Dispositivos",advanced:"Avanzado"},identity:{title:"Identidad",subtitle:"Datos del usuario. Configuración del agente va en Super-agente.",agent_name:"Nombre del agente",owner_name:"Tu nombre",personality:"Personalidad",owner_context:"Contexto del dueño",owner_context_hint:"Quién sos, en qué trabajás, qué le interesa al agente saber de vos.",language:"Idioma preferido",timezone:"Timezone (IANA)",timezone_hint:"ej. America/Argentina/Buenos_Aires",saved:"Identidad guardada."},super_agent:{title:"Super-agente",subtitle:"Personalidad, modelo, prompt y modos del super-agente.",personality:"Personalidad",model:"Modelo activo",model_hint:"Ej: anthropic:claude-sonnet-4.5, ollama:gemma2:9b",permission_mode:"Permission mode",system:"Prompt extra (system)",system_hint:"Texto que se prepende al system prompt base.",fallback_title:"Fallback chain",fallback_hint:"Si el modelo activo falla, prueba estos en orden.",fallback_add:"Agregar modelo a la cadena",saved:"Super-agente guardado.",enabled_label:"Super-agente habilitado",model_active:"Modelo activo (router)",model_configure:"Configurar en Modelos",behavior_subtitle:"Comportamiento del super-agente. El modelo y la cadena de fallback se configuran en el Router de modelos."},engines_keys:{title:"API keys de modelos",subtitle:"Cada engine guarda su key en ~/.apx/config.json. Los valores ya seteados muestran sufijo seguro.",ollama_url:"Ollama URL",ollama_hint:"Por defecto: http://127.0.0.1:11434",key_label:"API key",key_placeholder:"(no seteada)",clear:"Borrar key",saved:"Key guardada.",cleared:"Key borrada."},telegram_global:{title:"Telegram (default)",subtitle:"Canal default — los proyectos pueden overridear con su propio canal.",bot_token:"Bot token",chat_id:"Chat ID por defecto",poll_interval:"Poll interval (ms)",respond_with_engine:"Respond with engine",enabled:"Polling habilitado",saved:"Telegram guardado."},advanced:{title:"Avanzado",subtitle:"Editor raw del ~/.apx/config.json. Los secretos se ven *** set *** pero podés escribir uno nuevo.",write:"Aplicar cambios",written:"Config aplicada y daemon recargado.",reload_success:"Config recargada."}},project:{not_found:"Proyecto {pid} no encontrado.",rebuild:"Rebuild context",rebuild_done:"Rebuild OK.",unregister_confirm:"¿Desregistrar {label}? La carpeta no se borra.",unregistered:"Desregistrado.",base_subtitle:"Espacio general · super-agente",nav:{overview:"Overview",chat:"Chat",config:"Config",telegram:"Telegram",agents:"Agents",routines:"Rutinas",tasks:"Tasks",mcps:"MCPs",threads:"Chats",logs:"Logs",memories:"Memorias"},sections:{workspace:"Workspace",automation:"Automatización",knowledge:"Conversaciones",config:"Config"},overview:{tasks_open:"Tasks abiertas",routines:"Rutinas",agents:"Agents",mcps:"MCPs",chat:"Chat (super-agent)",chat_value:"abrir"},chat:{title:"Chat con agente",subtitle:"Conversaciones directas con agentes del proyecto. El super-agent no interviene.",roby_title:"Chat con Roby",roby_subtitle:"Chat con Roby — el super-agente APX. Puede usar tools (proyectos, tasks, mcps, agentes).",empty:"Mandá un mensaje para arrancar la conversación.",placeholder:"Escribí algo y enter para enviar (shift+enter = nueva línea)",send:"Enviar",stop:"Stop",clear:"Limpiar",copy:"copiar",copied:"Copiado.",stopped_marker:" [detenido]",create_agent:"Crear agente",create_agent_title:"Crear agente",create_agent_desc:"Necesario para iniciar chat en proyecto.",role_label:"rol",model_label:"modelo",model_hint:"ej. openai:gpt-5, groq:llama-3.3-70b-versatile",master_label:"Agente master"},tasks:{title:"Tasks (TODOs)",subtitle:"Append-only JSONL en ~/.apx/projects/<id>/tasks/.",add:"agregar",add_label:"Nueva task",add_placeholder:"ej. revisar bug del scroll",empty:"No hay tasks {state}.",empty_open:"No hay tasks abiertas.",created:"Task creada.",create_error:"no pude crear la task",done:"✓ done",drop:"✗ drop",reopen:"↻ reopen",due:"vence",via:"via",aria_done:"marcar done",aria_drop:"descartar task",aria_reopen:"reabrir task"},global_tasks:{title:"Tasks (todos los proyectos)",subtitle:"Tareas agregadas de todos los proyectos registrados.",empty:"Sin tasks.",due:"vence",go_project:"Ir al proyecto"},routines:{title:"Heartbeats / Routines",subtitle:"Cron, every:Nm, once:ISO. Cada rutina dispara un agente o un shell.",empty:"Sin rutinas. Creá una arriba.",new:"nueva",new_btn:"Nueva",delete_confirm:"Borrar rutina {name}?",saved:"Rutina guardada.",paused:"pausada",next_run:"próxima:",last_run:"última:",enabled_hint:"Activa · corre según el intervalo",disabled_hint:"Pausada · solo con el botón Run",enabled_label:"Habilitada",new_title:"Nueva rutina",edit_title:"Editar {name}",dialog_desc:"Se guarda en .apc/routines.json. La rutina corre mientras el daemon está activo.",name_field:"Nombre (name)",name_no_edit:"No se puede cambiar al editar.",kind_field:"Acción (kind)",schedule_field:"Intervalo (schedule)",schedule_hint:"Elegí un preset o escribilo a mano. Manual = solo corre con el botón Run.",vars_title:"Variables disponibles",what_happens:"Qué va a pasar",agent_field:"Agente (spec.agent)",agent_hint:"Quién ejecuta la rutina.",agent_loading:"cargando…",agent_pick:"— elegí un agente —",prompt_exec:"Prompt (spec.prompt)",prompt_exec_ph:"qué pendiente hay para hoy?",prompt_super:"Prompt (spec.prompt)",prompt_super_ph:"resumí el estado del proyecto",pre_field:"Pre-commands (pre_commands)",pre_hint:"Shell ANTES del prompt. Uno por línea.",post_field:"Post-commands (post_commands)",post_hint:"Shell DESPUÉS del prompt. Uno por línea.",tg_channel:"Canal (spec.channel)",tg_chat_id:"Chat ID (spec.chat_id)",tg_text:"Texto (spec.text)",tg_text_hint:"Mensaje fijo a enviar. No usa modelo.",shell_field:"Comando (spec.command)",shell_hint:"Corre tal cual en el shell. Sin prompt ni pre/post.",hb_channel:"Canal (spec.channel)",hb_message:"Mensaje (spec.message)",name_required:"name requerido",save_error:"save falló",run_error:"run falló",toggle_error:"toggle falló",delete_error:"delete falló",run_success:"{name} disparada.",delete_success:"borrada."},agents:{title:"Agents",subtitle:"Definidos en AGENTS.md + .apc/agents/<slug>/.",subtitle_full:"Definidos en AGENTS.md + .apc/agents/<slug>/. La jerarquía (orquestador → subagentes) vive en el frontmatter (Master / Parent).",empty:"Sin agents. Agregá uno con <code>apx agent add</code> o el botón.",empty_text:"Sin agents. Agregá uno con `apx agent add` o el botón de arriba.",new:"Agente",created:"Agent {slug} creado.",slug_invalid:"slug debe matchear /^[a-z][a-z0-9_-]*$/",hierarchy:"Jerarquía",list_view:"Lista",import:"Importar",chat:"Chat",view:"Ver",orchestrator:"Orquestador",new_title:"Nuevo agent",new_desc:"POST /projects/:pid/agents — escribe .apc/agents/<slug>.md.",slug_label:"slug",slug_ph:"cody",role_label:"role (opcional)",role_ph:"code refactor",model_label:"model (opcional)",model_hint:"ej. claude-sonnet-4.5, ollama:gemma2:9b",lang_label:"language (opcional)",desc_label:"description (opcional)",desc_ph:"Qué hace este agente…",skills_label:"skills (coma)",skills_ph:"skill-a, skill-b",tools_label:"tools (coma)",tools_ph:"tool-a, tool-b",parent_label:"reporta a (parent, opcional)",parent_hint:"Subagente de un orquestador.",none_parent:"— ninguno —",master_label:"Orquestador (master)",create_success:"Agent {slug} creado.",create_error:"create falló",import_title:"Importar del vault",import_desc:"Plantillas en ~/.apx/agents. Se copian a este proyecto (.apc/agents/).",import_empty:"Sin plantillas en el vault.",import_success:"Importado: {slug}",import_already:"ya está",import_btn:"Importar"},agent_detail:{not_found:"Agente no encontrado.",chat_btn:"Chat con {slug}",reports_to:"↳ reporta a",no_threads:"Sin threads.",no_activity:"Sin actividad registrada.",threads_recent:"Threads recientes",subagents:"Subagentes",subagents_desc:"Agentes que reportan a este orquestador.",config_title:"Configuración del agente",type_label:"Tipología (type)",area_label:"Área",area_hint:"ej. operaciones, marketing",area_ph:"operaciones",role_label:"Role",parent_label:"Reporta a (parent)",none_parent:"— ninguno —",model_label:"Modelo base",model_hint:"Vacío = usa el modelo del Router (default). Setealo solo para forzar un modelo a este agente.",model_ph:"(vacío = router default)",skills_label:"Skills (coma)",bio_label:"Bio / descripción",system_label:"System prompt",system_hint:"Define personalidad y comportamiento (cuerpo del AGENT.md).",master_label:"Orquestador (master)",delete_btn:"Borrar agente",save_btn:"Guardar cambios",delete_confirm:'Borrar el agente "{slug}"? Se elimina .apc/agents/{slug}.md y su carpeta.',update_success:"Agente actualizado.",delete_success:"Agente borrado.",tools_hint:"Qué tools puede usar el agente. Tocá para activar/desactivar; o editá la lista abajo.",tools_custom_ph:"lista (coma): echo, http_fetch",memory_title:"Memoria del agente",memory_empty:"(memoria vacía)",memory_saved:"Memoria guardada.",records_title:"Records",records_desc:"Log de actividad del agente (mensajes/acciones). Lo más nuevo primero.",sleep_title:"Sleep / Heartbeat",sleep_desc:"Estado de ejecución del agente, derivado de sus rutinas.",sleep_deep:"Deep sleep · sin heartbeat",sleep_deep_desc:"Este agente no tiene ninguna rutina que lo dispare. No se ejecuta de forma autónoma; solo responde cuando lo invocás (chat / tarea).",brain_title:"Brain",brain_desc:"Grafo de relaciones reales del agente: memoria, threads, tasks, heartbeats y jerarquía. (primera versión — lo refinamos)",brain_empty:"Aún no hay relaciones para graficar (sin memoria, threads, tasks ni rutinas).",msgs_count:"msgs"},mcps:{title:"MCP servers",subtitle:"3 scopes: runtime > shared > global. Conflictos arriba si los hay.",empty:"Sin MCPs configurados.",new:"MCP",delete_confirm:"Borrar MCP {name} de scope {scope}?",conflicts:"⚠ Conflictos: {names}",new_title:"Nuevo MCP",new_desc:"POST /projects/:pid/mcps?scope=…",scope_label:"scope",transport_label:"transport",name_label:"name",name_ph:"filesystem",cmd_label:"command",cmd_ph:"npx",args_label:"args",args_hint:"space-separated",args_ph:"-y @modelcontextprotocol/server-filesystem /tmp",env_label:"env (JSON, opcional)",url_label:"url",url_ph:"https://example.com/mcp",enabled_label:"Habilitado",add_btn:"Agregar",name_required:"name requerido",env_invalid:"env debe ser JSON válido",removed:"eliminado",added:"MCP agregado."},threads:{title:"Chats",subtitle:"Conversaciones por agent (vacío = ningún log persistido todavía).",no_agents:"No hay agents. Las conversaciones requieren un agent configurado.",pick:"Elegí un agent para ver sus conversaciones.",empty:"No hay conversaciones para {slug}.",conversation_title:"Conversación {id}",messages:"mensajes",via:"via"},config:{title:"Config rápida",subtitle:"Override del proyecto. Se escribe en {path}.",model:"super_agent.model",model_hint:"ej. anthropic:claude-sonnet-4.5, ollama:gemma2:9b",perm:"super_agent.permission_mode",route:"route_to_agent",route_hint:"Slug del agent que atiende por defecto en este proyecto.",use_global:"(usa global)",saved:"Guardado.",nothing:"Nada para guardar.",raw_title:"Config (JSON crudo)",raw_subtitle:"Pegá el objeto entero — equivale a PUT del archivo.",raw_save:"Reemplazar config",raw_done:"Config sobrescrita.",effective:"Effective config (read-only)",effective_sub:"Lo que ve realmente el daemon (global ⊕ override).",section_title:"Config proyecto",section_desc:"APC metadata y overrides separados. General APX vive en Settings > Config.",effective_read:"Lectura: global APX + override proyecto.",save_project:".apc/project.json guardado.",save_override:".apc/config.json guardado.",save_fields_success:"Overrides guardados.",save_meta_success:"Project metadata guardado.",no_data:"Sin datos."},telegram:{title:"Canal de Telegram (override)",subtitle:"Si seteás un canal acá, los mensajes generados por este proyecto se mandan ahí en lugar del default.",use_default:"Usar el canal default",bot_token:"Bot token (override)",chat_id:"Chat ID (override)",saved:"Override guardado.",cleared:"Override eliminado — vuelve al default.",override_active:"override activo",channel_badge:"Canal {name}",no_override:"Sin override. Los mensajes de este proyecto van al canal default.",respond_engine:"Responder con engine",route_agent:"route_to_agent",route_hint:"Slug del agent que atiende (vacío = super-agent).",bot_hint_none:"Si vacío, hereda del default."},memories:{project_title:"Memoria del proyecto",project_desc:"Hechos durables a nivel proyecto. .apc/memory.md — la leen los agentes y el super-agente.",project_ph:`# Memoria del proyecto
523
+ `)}}if(f.trim())try{s(JSON.parse(f.trim()))}catch{}}const J3={get:()=>ge.get("/health")},Qn={list:()=>ge.get("/projects"),register:e=>ge.post("/projects",{path:e}),remove:e=>ge.del(`/projects/${encodeURIComponent(e)}`),rebuild:e=>ge.post(`/projects/${encodeURIComponent(e)}/rebuild`),config:{show:e=>ge.get(`/projects/${e}/config`),set:(e,n)=>ge.patch(`/projects/${e}/config`,{set:n}),unset:(e,n)=>ge.patch(`/projects/${e}/config`,{unset:n}),put:(e,n)=>ge.put(`/projects/${e}/config`,n)},apcProject:{set:(e,n,s)=>ge.patch(`/projects/${e}/apc-project`,{set:n,unset:s}),put:(e,n)=>ge.put(`/projects/${e}/apc-project`,n)},memory:{get:e=>ge.get(`/projects/${e}/memory`),put:(e,n)=>ge.put(`/projects/${e}/memory`,{body:n})}},Jt={list:e=>ge.get(`/projects/${e}/agents`),get:(e,n)=>ge.get(`/projects/${e}/agents/${n}`),create:(e,n)=>ge.post(`/projects/${e}/agents`,n),update:(e,n,s)=>ge.patch(`/projects/${e}/agents/${encodeURIComponent(n)}`,s),remove:(e,n)=>ge.del(`/projects/${e}/agents/${encodeURIComponent(n)}`),chat:(e,n,s)=>ge.post(`/projects/${e}/agents/${encodeURIComponent(n)}/chat`,s),memory:{get:(e,n)=>ge.get(`/projects/${e}/agents/${n}/memory`),put:(e,n,s)=>ge.put(`/projects/${e}/agents/${n}/memory`,{body:s})},vault:e=>ge.get(e?.includeRemoved?"/agents/vault?include_removed=1":"/agents/vault"),vaultCreate:(e,n={},s="")=>ge.post("/agents/vault",{slug:e,fields:n,body:s}),vaultPatch:(e,n)=>ge.patch(`/agents/vault/${encodeURIComponent(e)}`,n),vaultRemove:e=>ge.del(`/agents/vault/${encodeURIComponent(e)}`),vaultRestore:e=>ge.post(`/agents/vault/${encodeURIComponent(e)}/restore`),import:(e,n)=>ge.post(`/projects/${e}/agents/import`,{slug:n})},nx={list:(e,n)=>ge.get(`/projects/${e}/agents/${n}/conversations`),get:(e,n,s)=>ge.get(`/projects/${e}/agents/${n}/conversations/${s}`),compact:(e,n,s)=>ge.post(s?`/projects/${e}/agents/${n}/conversations/${s}/compact`:`/projects/${e}/agents/${n}/compact`,{})},or={list:e=>ge.get(`/projects/${e}/routines`),get:(e,n)=>ge.get(`/projects/${e}/routines/${n}`),run:(e,n)=>ge.post(`/projects/${e}/routines/${n}/run`),enable:(e,n)=>ge.post(`/projects/${e}/routines/${n}/enable`),disable:(e,n)=>ge.post(`/projects/${e}/routines/${n}/disable`),upsert:(e,n)=>ge.post(`/projects/${e}/routines`,n),remove:(e,n)=>ge.del(`/projects/${e}/routines/${encodeURIComponent(n)}`)},lr={list:(e,n="open")=>ge.get(`/projects/${e}/tasks?state=${n}`),global:(e="open")=>ge.get(`/tasks?state=${e}`),add:(e,n)=>ge.post(`/projects/${e}/tasks`,n),done:(e,n)=>ge.post(`/projects/${e}/tasks/${n}/done`),drop:(e,n)=>ge.post(`/projects/${e}/tasks/${n}/drop`),reopen:(e,n)=>ge.post(`/projects/${e}/tasks/${n}/reopen`)},Ti={list:e=>ge.get(`/projects/${e}/mcps`),check:e=>ge.get(`/projects/${e}/mcps/check`),add:(e,n,s)=>ge.post(`/projects/${e}/mcps?scope=${n}`,s),remove:(e,n,s="shared")=>ge.del(`/projects/${e}/mcps/${encodeURIComponent(n)}?scope=${s}`)},Up=e=>{const n=new URLSearchParams;for(const[r,i]of Object.entries(e))i!==void 0&&i!==""&&n.set(r,String(i));const s=n.toString();return s?`?${s}`:""},Xg={global:(e={})=>ge.get(`/messages/global${Up(e)}`),project:(e,n={})=>ge.get(`/projects/${e}/messages${Up(n)}`),search:(e,n,s=50)=>ge.get(`/projects/${e}/messages/search${Up({q:n,limit:s})}`)},W3={global:e=>ge.get(`/sessions${e?`?engine=${encodeURIComponent(e)}`:""}`)},e5={list:()=>ge.get("/tools")},kn={channels:{list:()=>ge.get("/telegram/channels"),upsert:e=>ge.post("/telegram/channels",e),patch:(e,n)=>ge.patch(`/telegram/channels/${e}`,n),remove:e=>ge.del(`/telegram/channels/${encodeURIComponent(e)}`)},contacts:{list:()=>ge.get("/telegram/contacts"),patch:(e,n)=>ge.patch(`/telegram/contacts/${encodeURIComponent(String(e))}`,n),remove:e=>ge.del(`/telegram/contacts/${encodeURIComponent(String(e))}`)},roles:{list:()=>ge.get("/telegram/roles"),set:(e,n)=>ge.put(`/telegram/roles/${encodeURIComponent(e)}`,{tools:n}),remove:e=>ge.del(`/telegram/roles/${encodeURIComponent(e)}`)},status:()=>ge.get("/telegram/status"),start:()=>ge.post("/telegram/start"),stop:()=>ge.post("/telegram/stop"),send:e=>ge.post("/telegram/send",e)},pd={list:()=>ge.get("/engines"),models:e=>ge.post("/engines/models",e)},Zo={reload:()=>ge.post("/admin/reload"),shutdown:()=>ge.post("/admin/shutdown"),config:{get:()=>ge.get("/admin/config"),patch:e=>ge.patch("/admin/config",e)},superAgent:()=>ge.get("/admin/super-agent"),logs:(e="errors",n=200)=>ge.get(`/admin/logs?file=${e}&limit=${n}`)},Jo={list:()=>ge.get("/pair/list"),revoke:e=>ge.del(`/pair/revoke/${encodeURIComponent(e)}`),init:()=>ge.post("/pair/init",{}),status:e=>ge.get(`/pair/status/${encodeURIComponent(e)}`),confirm:e=>ge.post("/pair/confirm",e)},E1={get:()=>ge.get("/identity"),patch:e=>ge.patch("/identity",e)},rw={send:(e,n)=>ge.post(`/projects/${e}/super-agent/chat`,n),stream:(e,n,s,r)=>sw(`/projects/${e}/super-agent/chat/stream`,n,s,r),summarize:e=>ge.post("/super-agent/summarize",e)},t5={dirs:e=>ge.get(`/admin/fs/dirs?path=${encodeURIComponent(e)}`)},n5=["alloy","echo","fable","onyx","nova","shimmer"],a5=["Kore","Puck","Charon","Fenrir","Aoede"],s5=["eleven_multilingual_v2","eleven_turbo_v2_5","eleven_flash_v2_5"],r5=["tts-1","tts-1-hd"],o5=["tiny","base","small","medium","large-v2","large-v3"],gd={piper:{name:"Piper",note:"Local, offline (CLI + modelo .onnx). Sin API key.",local:!0},elevenlabs:{name:"ElevenLabs",note:"Cloud, multilingüe. Requiere API key."},openai:{name:"OpenAI",note:"Cloud (tts-1 / tts-1-hd). Usa la key de OpenAI."},gemini:{name:"Gemini",note:"Cloud (preview). Usa la key de Gemini."},mock:{name:"Mock",note:"Silencio de prueba. Fallback siempre disponible.",local:!0}};async function l5(e){const n=tx(),s=await fetch(`/voice/tts?path=${encodeURIComponent(e)}`,{headers:n?{authorization:`Bearer ${n}`}:{}});if(!s.ok){const i=await s.text().catch(()=>"");throw new Error(`No se pudo leer el audio (${s.status}): ${i.slice(0,160)}`)}const r=await s.blob();return URL.createObjectURL(r)}const ow={providers:()=>ge.get("/tts/providers"),say:e=>ge.post("/tts/say",e),turn:e=>ge.post("/voice/turn",e)},k1={manifest:()=>ge.get("/deck/manifest"),setWidget:(e,n)=>ge.patch(`/deck/widgets/${encodeURIComponent(e)}`,n),exec:e=>ge.post("/deck/exec",e)},Ir=e=>`/projects/${e}/code/sessions`,sr={sessions:{list:e=>ge.get(Ir(e)).then(n=>n.sessions),get:(e,n)=>ge.get(`${Ir(e)}/${n}`),create:(e,n={})=>ge.post(Ir(e),n),update:(e,n,s)=>ge.patch(`${Ir(e)}/${n}`,s),remove:(e,n)=>ge.del(`${Ir(e)}/${n}`)},changes:(e,n)=>ge.get(`${Ir(e)}/${n}/changes`),stream:(e,n,s,r,i)=>sw(`${Ir(e)}/${n}/chat/stream`,s,r,i)};function sc(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/projects",()=>Qn.list(),{refreshInterval:Ed.projects});return{projects:(e||[]).slice().sort((c,d)=>{const f=Number(c.id),g=Number(d.id);return f===0&&g!==0?-1:g===0&&f!==0?1:f-g}),error:n,isLoading:s,mutate:r}}function lw(e){const{projects:n,isLoading:s,mutate:r}=sc();return{project:n.find(c=>String(c.id)===e)??null,isLoading:s,mutate:r}}const i5={common:{loading:"Cargando…",saving:"Guardando…",cancel:"Cancelar",save:"Guardar",delete:"Borrar",edit:"Editar",create:"Crear",add:"Agregar",remove:"Quitar",reload:"Recargar",shutdown:"Apagar",enabled:"Habilitado",disabled:"Deshabilitado",enable:"Habilitar",disable:"Deshabilitar",open:"Abrir",close:"Cerrar",confirm:"Confirmar",optional:"(opcional)",none:"—",none_yet:"Todavía no hay nada.",error_generic:"Algo salió mal.",search:"Buscar",new:"Nuevo",restore:"Restaurar",show:"Mostrar",hide:"Ocultar",copy:"Copiar",run:"Ejecutar"},daemon:{connecting:"Conectando con el daemon…",unreachable:"No pude llegar al daemon en localhost:7430.",unreachable_hint:"Arrancá APX con `apx daemon start` y refrescá.",version:"Versión",uptime:"Uptime",status:"Status",running:"running",down:"down",reload_hint:"POST /admin/reload — relee ~/.apx/config.json sin reiniciar.",shutdown_confirm:"¿Apagar el daemon? Las próximas requests fallarán hasta levantarlo de nuevo.",shutdown_done:"Daemon detenido."},pairing:{title:"Vincular este equipo",subtitle:"Estás entrando desde fuera de esta máquina. Por seguridad, vinculá este navegador con un código de pairing.",steps_title:"Cómo obtener el código",step_1:"En la PC donde corre APX, abrí una terminal.",step_2:"Ejecutá `apx pair` (o escaneá el QR con APX Deck).",step_3:"Copiá el código que aparece debajo del QR y pegalo acá.",code_label:"Código de pairing",code_ph:"p. ej. 7f3a1c9e-…",label_label:"Nombre de este equipo",label_ph:"p. ej. Notebook del living",submit:"Vincular",linking:"Vinculando…",success:"Equipo vinculado ✓",err_required:"Pegá el código de pairing.",err_expired:"El código expiró. Volvé a correr `apx pair` y probá de nuevo.",err_unknown:"Código desconocido o ya usado. Generá uno nuevo con `apx pair`.",err_generic:"No se pudo vincular. Revisá el código e intentá otra vez.",revoke_hint:"Podés revocar este equipo cuando quieras desde Settings o con `apx pair revoke`."},nav:{apx_admin:"APX",settings:"Settings",project:"Proyecto",add_project:"Agregar proyecto",modules:{voice:"Voces",desktop:"Escritorio",deck:"Deck",code:"Code"}},topbar:{breadcrumb_root:"APX",breadcrumb_settings:"APX › Settings",breadcrumb_project:"APX › Proyecto",breadcrumb_base:"Base",breadcrumb_projects:"Proyectos",light:"Cambiar a claro",dark:"Cambiar a oscuro",lang_toggle:"Idioma"},admin:{title:"APX",subtitle:"Panel general. Configuración global, canales y proyectos.",engines_title:"Engines",engines_subtitle:"Adaptadores LLM disponibles. Las API keys viven en ~/.apx/config.json.",telegram_title:"Telegram",telegram_subtitle:"Canales configurados. Cada uno puede estar pineado a un proyecto.",telegram_polling_on:"Polling activo",telegram_polling_off:"Deshabilitado",telegram_add_channel:"Canal",telegram_send_test:"Probar",telegram_send_test_title:"Enviar a",telegram_default_message:"Mensaje de prueba desde el panel de APX ✅",projects_title:"Proyectos registrados",projects_subtitle:"Click en un proyecto para abrir su panel.",unregister:"Desregistrar",unregister_confirm:"¿Quitar {label} de APX? La carpeta no se borra; sólo se desregistra.",reload_success:"Config recargada.",telegram_polling_started:"Polling iniciado.",telegram_polling_stopped:"Polling detenido.",telegram_channel_removed:"Canal eliminado.",agents_badge:"agents",engine_badge:"sí",engine_badge_no:"no",base_label:"Base"},add_project:{title:"Agregar proyecto",subtitle:"APX indexará .apc/, agents y AGENTS.md en esa carpeta.",path_label:"Ruta absoluta",path_hint:"Equivalente a apx project add /ruta/al/proyecto",path_placeholder:"/Volumes/SSDT7Shield/proyectos_varios/mi-proyecto",register:"Registrar",path_required:"Ruta requerida.",registered:"Proyecto #{id} registrado.",search_btn:"Buscar",browser_unavailable:"Explorador no disponible hasta reiniciar daemon. Pegá ruta manual.",no_folders:"Sin carpetas."},settings:{title:"Settings",subtitle:"Preferencias del panel + diagnóstico del daemon local.",appearance:"Apariencia",light_mode:"Claro",dark_mode:"Oscuro",language:"Idioma",daemon:"Daemon",daemon_sub:"Estado del proceso local que sirve esta web y orquesta los agentes.",engines:"Engines disponibles",engines_sub:"Adaptadores LLM compilados con el daemon.",token:"Token para esta sesión",token_sub:"Si esta web no logró auto-cargar el token, pegalo acá.",token_active:"(ya hay token activo)",token_paste:"Pegá el bearer del daemon",token_saved:"Token guardado.",devices:"Dispositivos pareados",devices_sub:"GET /pair/list. Revocar invalida ese bearer en el daemon.",devices_empty:"No hay clientes pareados todavía.",devices_revoke_confirm:"Revocar cliente {id}?",devices_revoke_success:"Cliente revocado.",devices_pair_btn:"Vincular dispositivo",devices_pair_title:"Vincular dispositivo",devices_pair_desc:"Escaneá el QR con la cámara del celu para entrar directo, o pegá el código en la otra PC.",devices_pair_scan:"Escaneá con la cámara del teléfono — te abre la web ya vinculada.",devices_pair_code:"O pegá este código en la pantalla de pairing:",devices_pair_url:"URL de acceso",devices_pair_link:"O copiá este link y abrilo en el otro dispositivo (entra solo):",devices_pair_copy:"Copiar",devices_pair_copied:"Link copiado al portapapeles.",devices_pair_copied_code:"Código copiado.",devices_pair_expires:"Expira en {s}s",devices_pair_expired:"El código expiró.",devices_pair_regen:"Generar otro",devices_pair_waiting:"Esperando que el dispositivo confirme…",devices_pair_done:"Dispositivo vinculado ✓",devices_pair_localhost_only:"Solo se pueden generar códigos desde la PC del daemon (localhost).",devices_last_seen:"visto:",devices_never:"nunca",devices_revoke:"Revocar",account_section:"Cuenta",agents_section:"Agentes & modelos",channels_section:"Canales & dispositivos",advanced_section:"Avanzado",tabs:{identity:"Identidad",super_agent:"Super-agente",engines:"Engines & modelos",telegram:"Telegram",devices:"Dispositivos",advanced:"Avanzado"},identity:{title:"Identidad",subtitle:"Datos del usuario. Configuración del agente va en Super-agente.",agent_name:"Nombre del agente",owner_name:"Tu nombre",personality:"Personalidad",owner_context:"Contexto del dueño",owner_context_hint:"Quién sos, en qué trabajás, qué le interesa al agente saber de vos.",language:"Idioma preferido",timezone:"Timezone (IANA)",timezone_hint:"ej. America/Argentina/Buenos_Aires",saved:"Identidad guardada."},super_agent:{title:"Super-agente",subtitle:"Personalidad, modelo, prompt y modos del super-agente.",personality:"Personalidad",model:"Modelo activo",model_hint:"Ej: anthropic:claude-sonnet-4.5, ollama:gemma2:9b",permission_mode:"Permission mode",system:"Prompt extra (system)",system_hint:"Texto que se prepende al system prompt base.",fallback_title:"Fallback chain",fallback_hint:"Si el modelo activo falla, prueba estos en orden.",fallback_add:"Agregar modelo a la cadena",saved:"Super-agente guardado.",enabled_label:"Super-agente habilitado",model_active:"Modelo activo (router)",model_configure:"Configurar en Modelos",behavior_subtitle:"Comportamiento del super-agente. El modelo y la cadena de fallback se configuran en el Router de modelos."},engines_keys:{title:"API keys de modelos",subtitle:"Cada engine guarda su key en ~/.apx/config.json. Los valores ya seteados muestran sufijo seguro.",ollama_url:"Ollama URL",ollama_hint:"Por defecto: http://127.0.0.1:11434",key_label:"API key",key_placeholder:"(no seteada)",clear:"Borrar key",saved:"Key guardada.",cleared:"Key borrada."},telegram_global:{title:"Telegram (default)",subtitle:"Canal default — los proyectos pueden overridear con su propio canal.",bot_token:"Bot token",chat_id:"Chat ID por defecto",poll_interval:"Poll interval (ms)",respond_with_engine:"Respond with engine",enabled:"Polling habilitado",saved:"Telegram guardado."},advanced:{title:"Avanzado",subtitle:"Editor raw del ~/.apx/config.json. Los secretos se ven *** set *** pero podés escribir uno nuevo.",write:"Aplicar cambios",written:"Config aplicada y daemon recargado.",reload_success:"Config recargada."}},project:{not_found:"Proyecto {pid} no encontrado.",rebuild:"Rebuild context",rebuild_done:"Rebuild OK.",unregister_confirm:"¿Desregistrar {label}? La carpeta no se borra.",unregistered:"Desregistrado.",base_subtitle:"Espacio general · super-agente",nav:{overview:"Overview",chat:"Chat",config:"Config",telegram:"Telegram",agents:"Agents",routines:"Rutinas",tasks:"Tasks",mcps:"MCPs",threads:"Chats",logs:"Logs",memories:"Memorias"},sections:{workspace:"Workspace",automation:"Automatización",knowledge:"Conversaciones",config:"Config"},overview:{tasks_open:"Tasks abiertas",routines:"Rutinas",agents:"Agents",mcps:"MCPs",chat:"Chat (super-agent)",chat_value:"abrir"},chat:{title:"Chat con agente",subtitle:"Conversaciones directas con agentes del proyecto. El super-agent no interviene.",roby_title:"Chat con Roby",roby_subtitle:"Chat con Roby — el super-agente APX. Puede usar tools (proyectos, tasks, mcps, agentes).",empty:"Mandá un mensaje para arrancar la conversación.",placeholder:"Escribí algo y enter para enviar (shift+enter = nueva línea)",send:"Enviar",stop:"Stop",clear:"Limpiar",copy:"copiar",copied:"Copiado.",stopped_marker:" [detenido]",create_agent:"Crear agente",create_agent_title:"Crear agente",create_agent_desc:"Necesario para iniciar chat en proyecto.",role_label:"rol",model_label:"modelo",model_hint:"ej. openai:gpt-5, groq:llama-3.3-70b-versatile",master_label:"Agente master"},tasks:{title:"Tasks (TODOs)",subtitle:"Append-only JSONL en ~/.apx/projects/<id>/tasks/.",add:"agregar",add_label:"Nueva task",add_placeholder:"ej. revisar bug del scroll",empty:"No hay tasks {state}.",empty_open:"No hay tasks abiertas.",created:"Task creada.",create_error:"no pude crear la task",done:"✓ done",drop:"✗ drop",reopen:"↻ reopen",due:"vence",via:"via",aria_done:"marcar done",aria_drop:"descartar task",aria_reopen:"reabrir task"},global_tasks:{title:"Tasks (todos los proyectos)",subtitle:"Tareas agregadas de todos los proyectos registrados.",empty:"Sin tasks.",due:"vence",go_project:"Ir al proyecto"},routines:{title:"Heartbeats / Routines",subtitle:"Cron, every:Nm, once:ISO. Cada rutina dispara un agente o un shell.",empty:"Sin rutinas. Creá una arriba.",new:"nueva",new_btn:"Nueva",delete_confirm:"Borrar rutina {name}?",saved:"Rutina guardada.",paused:"pausada",next_run:"próxima:",last_run:"última:",enabled_hint:"Activa · corre según el intervalo",disabled_hint:"Pausada · solo con el botón Run",enabled_label:"Habilitada",new_title:"Nueva rutina",edit_title:"Editar {name}",dialog_desc:"Se guarda en .apc/routines.json. La rutina corre mientras el daemon está activo.",name_field:"Nombre (name)",name_no_edit:"No se puede cambiar al editar.",kind_field:"Acción (kind)",schedule_field:"Intervalo (schedule)",schedule_hint:"Elegí un preset o escribilo a mano. Manual = solo corre con el botón Run.",vars_title:"Variables disponibles",what_happens:"Qué va a pasar",agent_field:"Agente (spec.agent)",agent_hint:"Quién ejecuta la rutina.",agent_loading:"cargando…",agent_pick:"— elegí un agente —",prompt_exec:"Prompt (spec.prompt)",prompt_exec_ph:"qué pendiente hay para hoy?",prompt_super:"Prompt (spec.prompt)",prompt_super_ph:"resumí el estado del proyecto",pre_field:"Pre-commands (pre_commands)",pre_hint:"Shell ANTES del prompt. Uno por línea.",post_field:"Post-commands (post_commands)",post_hint:"Shell DESPUÉS del prompt. Uno por línea.",tg_channel:"Canal (spec.channel)",tg_chat_id:"Chat ID (spec.chat_id)",tg_text:"Texto (spec.text)",tg_text_hint:"Mensaje fijo a enviar. No usa modelo.",shell_field:"Comando (spec.command)",shell_hint:"Corre tal cual en el shell. Sin prompt ni pre/post.",hb_channel:"Canal (spec.channel)",hb_message:"Mensaje (spec.message)",name_required:"name requerido",save_error:"save falló",run_error:"run falló",toggle_error:"toggle falló",delete_error:"delete falló",run_success:"{name} disparada.",delete_success:"borrada."},agents:{title:"Agents",subtitle:"Definidos en AGENTS.md + .apc/agents/<slug>.md.",subtitle_full:"Definidos en AGENTS.md + .apc/agents/<slug>.md. La memoria runtime vive en ~/.apx/projects/<id>/agents/<slug>/.",empty:"Sin agents. Agregá uno con <code>apx agent add</code> o el botón.",empty_text:"Sin agents. Agregá uno con `apx agent add` o el botón de arriba.",new:"Agente",created:"Agent {slug} creado.",slug_invalid:"slug debe matchear /^[a-z][a-z0-9_-]*$/",hierarchy:"Jerarquía",list_view:"Lista",import:"Importar",chat:"Chat",view:"Ver",orchestrator:"Orquestador",new_title:"Nuevo agent",new_desc:"POST /projects/:pid/agents — escribe .apc/agents/<slug>.md.",slug_label:"slug",slug_ph:"cody",role_label:"role (opcional)",role_ph:"code refactor",model_label:"model (opcional)",model_hint:"ej. ollama:gemma2:9b, openai:gpt-4o-mini",lang_label:"language (opcional)",desc_label:"description (opcional)",desc_ph:"Qué hace este agente…",skills_label:"skills (coma)",skills_ph:"skill-a, skill-b",tools_label:"tools (coma)",tools_ph:"tool-a, tool-b",parent_label:"reporta a (parent, opcional)",parent_hint:"Subagente de un orquestador.",none_parent:"— ninguno —",master_label:"Orquestador (master)",create_success:"Agent {slug} creado.",create_error:"create falló",import_title:"Importar del vault",import_desc:"Plantillas en ~/.apx/agents. Se registran en este proyecto (.apc/agents/<slug>.md).",import_empty:"Sin plantillas en el vault.",import_success:"Importado: {slug}",import_already:"ya está",import_btn:"Importar"},agent_detail:{not_found:"Agente no encontrado.",chat_btn:"Chat con {slug}",reports_to:"↳ reporta a",no_threads:"Sin threads.",no_activity:"Sin actividad registrada.",threads_recent:"Threads recientes",subagents:"Subagentes",subagents_desc:"Agentes que reportan a este orquestador.",config_title:"Configuración del agente",type_label:"Tipología (type)",area_label:"Área",area_hint:"ej. operaciones, marketing",area_ph:"operaciones",role_label:"Role",parent_label:"Reporta a (parent)",none_parent:"— ninguno —",model_label:"Modelo base",model_hint:"Vacío = usa el modelo del Router (default). Setealo solo para forzar un modelo a este agente.",model_ph:"(vacío = router default)",skills_label:"Skills (coma)",bio_label:"Bio / descripción",system_label:"System prompt",system_hint:"Define personalidad y comportamiento (cuerpo del AGENT.md).",master_label:"Orquestador (master)",delete_btn:"Borrar agente",save_btn:"Guardar cambios",delete_confirm:'Borrar el agente "{slug}"? Se elimina .apc/agents/{slug}.md y sus datos runtime locales.',update_success:"Agente actualizado.",delete_success:"Agente borrado.",tools_hint:"Qué tools puede usar el agente. Tocá para activar/desactivar; o editá la lista abajo.",tools_custom_ph:"lista (coma): echo, http_fetch",memory_title:"Memoria del agente",memory_empty:"(memoria vacía)",memory_saved:"Memoria guardada.",records_title:"Records",records_desc:"Log de actividad del agente (mensajes/acciones). Lo más nuevo primero.",sleep_title:"Sleep / Heartbeat",sleep_desc:"Estado de ejecución del agente, derivado de sus rutinas.",sleep_deep:"Deep sleep · sin heartbeat",sleep_deep_desc:"Este agente no tiene ninguna rutina que lo dispare. No se ejecuta de forma autónoma; solo responde cuando lo invocás (chat / tarea).",brain_title:"Brain",brain_desc:"Grafo de relaciones reales del agente: memoria, threads, tasks, heartbeats y jerarquía. (primera versión — lo refinamos)",brain_empty:"Aún no hay relaciones para graficar (sin memoria, threads, tasks ni rutinas).",msgs_count:"msgs"},mcps:{title:"MCP servers",subtitle:"3 scopes: runtime > shared > global. Conflictos arriba si los hay.",empty:"Sin MCPs configurados.",new:"MCP",delete_confirm:"Borrar MCP {name} de scope {scope}?",conflicts:"⚠ Conflictos: {names}",new_title:"Nuevo MCP",new_desc:"POST /projects/:pid/mcps?scope=…",scope_label:"scope",transport_label:"transport",name_label:"name",name_ph:"filesystem",cmd_label:"command",cmd_ph:"npx",args_label:"args",args_hint:"space-separated",args_ph:"-y @modelcontextprotocol/server-filesystem /tmp",env_label:"env (JSON, opcional)",url_label:"url",url_ph:"https://example.com/mcp",enabled_label:"Habilitado",add_btn:"Agregar",name_required:"name requerido",env_invalid:"env debe ser JSON válido",removed:"eliminado",added:"MCP agregado."},threads:{title:"Chats",subtitle:"Conversaciones por agent (vacío = ningún log persistido todavía).",no_agents:"No hay agents. Las conversaciones requieren un agent configurado.",pick:"Elegí un agent para ver sus conversaciones.",empty:"No hay conversaciones para {slug}.",conversation_title:"Conversación {id}",messages:"mensajes",via:"via"},config:{title:"Config rápida",subtitle:"Override del proyecto. Se escribe en {path}.",model:"super_agent.model",model_hint:"ej. anthropic:claude-sonnet-4.5, ollama:gemma2:9b",perm:"super_agent.permission_mode",route:"route_to_agent",route_hint:"Slug del agent que atiende por defecto en este proyecto.",use_global:"(usa global)",saved:"Guardado.",nothing:"Nada para guardar.",raw_title:"Config (JSON crudo)",raw_subtitle:"Pegá el objeto entero — equivale a PUT del archivo.",raw_save:"Reemplazar config",raw_done:"Config sobrescrita.",effective:"Effective config (read-only)",effective_sub:"Lo que ve realmente el daemon (global ⊕ override).",section_title:"Config proyecto",section_desc:"APC metadata y overrides separados. General APX vive en Settings > Config.",effective_read:"Lectura: global APX + override proyecto.",save_project:".apc/project.json guardado.",save_override:".apc/config.json guardado.",save_fields_success:"Overrides guardados.",save_meta_success:"Project metadata guardado.",no_data:"Sin datos."},telegram:{title:"Canal de Telegram (override)",subtitle:"Si seteás un canal acá, los mensajes generados por este proyecto se mandan ahí en lugar del default.",use_default:"Usar el canal default",bot_token:"Bot token (override)",chat_id:"Chat ID (override)",saved:"Override guardado.",cleared:"Override eliminado — vuelve al default.",override_active:"override activo",channel_badge:"Canal {name}",no_override:"Sin override. Los mensajes de este proyecto van al canal default.",respond_engine:"Responder con engine",route_agent:"route_to_agent",route_hint:"Slug del agent que atiende (vacío = super-agent).",bot_hint_none:"Si vacío, hereda del default."},memories:{project_title:"Memoria del proyecto",project_desc:"Hechos durables a nivel proyecto. .apc/memory.md — la leen los agentes y el super-agente.",project_ph:`# Memoria del proyecto
524
524
 
525
- Hechos estables que cualquier agente debería saber…`,agents_title:"Memorias de agentes",agents_desc:"Memoria individual por agente. .apc/agents/<slug>/memory.md",no_agents:"Sin agentes en este proyecto.",saved:"Memoria guardada.",empty:"(memoria vacía)",chars:"chars · Markdown",save_btn:"Guardar"}},base:{title:"Base",subtitle:"Espacio general · super-agente",nav_general:"General",nav_activity:"Actividad",nav_system:"Sistema",workspaces_title:"Workspaces",workspaces_desc:"Todos los proyectos registrados en APX.",workspaces_new:"Nuevo proyecto",workspaces_empty:"Sin proyectos. Agregá uno con el botón de arriba.",sessions_title:"Sessions",sessions_desc:"Sesiones de todos los engines (apx · claude · codex), más nuevas primero.",sessions_all:"Todos los engines",sessions_empty:"Sin sesiones.",sessions_error:"No pude leer las sesiones: {msg}",defaults_title:"Agent defaults",defaults_desc:"Plantillas globales del vault. Las bundled vienen con APX y siempre están; las que crees o edites quedan en ~/.apx/agents y se superponen. Importalas a un proyecto desde Agents › Importar.",defaults_show_removed:"Mostrar removidos",defaults_new:"Nuevo",defaults_empty:"Sin plantillas en el vault.",defaults_hide:"Ocultar",defaults_restore:"Restaurar",defaults_edit:"Editar",defaults_remove:"Ocultar",defaults_delete:"Borrar",defaults_tombstone_msg:'Ocultar el default "{slug}"? Es bundled — quedá tombstoneado y lo recuperás con Restaurar.',defaults_delete_msg:'Borrar el template "{slug}"?',defaults_hidden:"Ocultado.",defaults_deleted:"Borrado.",defaults_restored:"Restaurado.",defaults_new_title:"Nuevo template",defaults_new_desc:"POST /agents/vault — se guarda en ~/.apx/agents/<slug>.md",defaults_edit_title:'Editar "{slug}"',defaults_bundled_desc:"Es un default bundled. Al guardar se hace copy-on-write a ~/.apx/agents/<slug>.md (queda como override).",defaults_user_desc:"PATCH /agents/vault/:slug — edita el archivo en ~/.apx/agents.",defaults_master_label:"Agente master",defaults_slug_invalid:"slug inválido (debe matchear /^[a-z][a-z0-9_-]*$/)",defaults_created:'Template "{slug}" creado.',defaults_saved:'Template "{slug}" guardado.'},logs:{title:"Logs",desc_global:"Actividad del daemon (canales globales: telegram, direct…). ~/.apx/messages/<channel>/.",desc_project:"Actividad del proyecto. ~/.apx/projects/<id>/messages/.",filter_channel:"filtrar canal (ej. telegram)",filter_dir:"dirección",all_directions:"Todas las direcciones",in:"Entrada (in)",out:"Salida (out)",filter_type:"tipo",all_types:"Todos los tipos",search_text:"buscar en el texto…",count_of:"de",no_activity:"Sin actividad.",no_activity_ch:'Sin actividad en el canal "{ch}".',error:"No pude leer los mensajes: {msg}",show_more:"ver más",show_less:"ver menos",daemon_errors:"Errores del daemon (~/.apx/logs/errors.jsonl)",no_errors:"Sin errores registrados. 🎉"},telegram_contacts:{title:"Contactos de Telegram",desc:"Quién le escribe a los bots. El rol define qué herramientas puede usar; un invitado no tiene permisos hasta que le asignes un rol.",empty:"Todavía no hay contactos — se registran solos cuando alguien escribe a un bot.",owner_badge:"dueño",assign_role:"Asignar rol",owner_hint:"Es dueño de un canal — cambialo desde el canal",removed:"Contacto eliminado.",delete_confirm:"¿Borrar el contacto {name}?",last_seen:"visto:",tools_all:"tools: todas",tools_none:"tools: ninguna",tools_label:"tools:"},telegram_channels:{title:"Canales",desc:"Cada canal es un bot que el daemon polea. Acá podés añadir/quitar canales, cambiar el agente que contesta, el proyecto al que pertenece y su dueño.",new_btn:"Nuevo canal",empty:"Todavía no hay canales — agregá el primero.",removed:"Canal eliminado.",delete_confirm:"¿Borrar el canal {name}?",no_owner:"sin dueño (se reclama al primer DM)",owner_label:"dueño:"},telegram_channel_dialog:{new_title:"Nuevo canal de Telegram",edit_title:"Editar canal: {name}",name_label:"name (slug interno)",token_label:"bot_token",chat_id:"chat_id",project_label:"project",project_hint:"Slug o id del proyecto al que pinear este canal (opcional).",route_label:"route_to_agent",route_hint:"Agente que contesta; vacío = super-agent APX.",owner_label:"owner_user_id",owner_hint:"user_id de Telegram del dueño de este canal. Override del rol global a 'owner' acá. Si lo dejás vacío, el primer mensaje privado lo reclama.",owner_ph:"889721252",respond_label:"Responder con engine (no echo)",name_required:"name requerido",saved:"Canal guardado."},telegram_send_dialog:{title:"Enviar a {name}",default_msg:"Mensaje de prueba desde el panel de APX ✅"},telegram_roles:{title:"Roles",desc:"Cada rol define qué herramientas del super-agent puede usar quien lo tenga asignado. 'owner' siempre = todas; 'guest' siempre = ninguna (solo chat).",empty:"No hay roles definidos.",tools_all:"todas las herramientas",tools_none:"ninguna herramienta",builtin:"built-in",delete_confirm:'¿Borrar el rol "{name}"?',removed:"Rol eliminado.",saved:'Rol "{name}" guardado.',name_required:"Nombre requerido.",builtin_error:'"{name}" es un rol built-in.',new_title:"Nuevo rol o reemplazar uno custom",name_label:"Nombre",name_ph:"editor",tools_label:"Tools (separadas por coma)",tools_hint:"Vacío = ninguna. Ejemplos: call_agent, list_tasks, create_task.",tools_ph:"call_agent, list_tasks",full_access:"Acceso total (todas las tools)",save_btn:"Guardar rol",delete_btn:"Borrar"},roby:{title:"Roby",badge:"super-agent · APX",desc:"Conversación rápida con tu super-agente. Tiene acceso a tools (proyectos, tasks, mcps, agentes); para un hilo más largo y persistente, abrí Chats.",empty:"Mandale un mensaje a Roby para arrancar.",thinking:"Roby está pensando…",talk:"Hablar con Roby",new_chat:"Nuevo chat",placeholder:"Escribí y enter para enviar (shift+enter = nueva línea)…"},not_found:{title:"404",message:"Esa ruta no existe."},code_module:{title:"Code",badge:"super-agent",desc:"Sesiones de código estilo OpenCode. Elegí un proyecto, abrí una sesión y pedile que lea, planifique, edite o ejecute.",no_projects:"No hay proyectos registrados. Registrá uno con `apx project add` para usar Code.",sessions:"Sesiones",new_session:"Nueva sesión",untitled:"Nueva sesión",no_sessions:"Todavía no hay sesiones — creá una para empezar a codear.",pick_project:"Elegí un proyecto para ver sus sesiones.",rename:"Renombrar",delete:"Eliminar",delete_confirm:"¿Eliminar esta sesión? Se borra la transcripción; tus archivos quedan intactos.",empty_chat:"Mandá una instrucción de código para arrancar.",placeholder:"Pedí un cambio… (enter envía, shift+enter = nueva línea)",mode_build:"Build",mode_plan:"Plan",mode_build_hint:"Build — edita archivos y ejecuta comandos",mode_plan_hint:"Plan — solo lectura, propone cambios sin tocar archivos",tab_context:"Contexto",tab_changes:"Cambios",ctx_model:"Modelo",ctx_tokens:"Tokens",ctx_input:"Entrada",ctx_output:"Salida",ctx_messages:"Mensajes",ctx_breakdown:"Desglose de contexto",ctx_none:"Sin uso todavía — mandá un turno para ver tokens.",seg_system:"Sistema",seg_user:"Usuario",seg_assistant:"Asistente",seg_tool:"Tools",seg_other:"Otro",changes_none:"Todavía no hay cambios en esta sesión.",changes_no_git:"Los cambios necesitan un repo git. Este proyecto no lo es.",changes_files:"{n} archivo(s) cambiados",stopped:"[detenido]"}},c5={common:{loading:"Loading…",saving:"Saving…",cancel:"Cancel",save:"Save",delete:"Delete",edit:"Edit",create:"Create",add:"Add",remove:"Remove",reload:"Reload",shutdown:"Shut down",enabled:"Enabled",disabled:"Disabled",enable:"Enable",disable:"Disable",open:"Open",close:"Close",confirm:"Confirm",optional:"(optional)",none:"—",none_yet:"Nothing here yet.",error_generic:"Something went wrong.",search:"Search",new:"New",restore:"Restore",show:"Show",hide:"Hide",copy:"Copy",run:"Run"},daemon:{connecting:"Connecting to the daemon…",unreachable:"Could not reach the daemon at localhost:7430.",unreachable_hint:"Start APX with `apx daemon start` and refresh.",version:"Version",uptime:"Uptime",status:"Status",running:"running",down:"down",reload_hint:"POST /admin/reload — reloads ~/.apx/config.json without restarting.",shutdown_confirm:"Shut down the daemon? Upcoming requests will fail until it restarts.",shutdown_done:"Daemon stopped."},pairing:{title:"Pair this device",subtitle:"You are connecting from outside this machine. For security, pair this browser with a pairing code.",steps_title:"How to get the code",step_1:"On the PC where APX is running, open a terminal.",step_2:"Run `apx pair` (or scan the QR with APX Deck).",step_3:"Copy the code shown below the QR and paste it here.",code_label:"Pairing code",code_ph:"e.g. 7f3a1c9e-…",label_label:"Device name",label_ph:"e.g. Living room laptop",submit:"Pair",linking:"Pairing…",success:"Device paired ✓",err_required:"Paste the pairing code.",err_expired:"The code expired. Run `apx pair` again and try again.",err_unknown:"Unknown or already-used code. Generate a new one with `apx pair`.",err_generic:"Could not pair. Check the code and try again.",revoke_hint:"You can revoke this device at any time from Settings or with `apx pair revoke`."},nav:{apx_admin:"APX",settings:"Settings",project:"Project",add_project:"Add project",modules:{voice:"Voices",desktop:"Desktop",deck:"Deck",code:"Code"}},topbar:{breadcrumb_root:"APX",breadcrumb_settings:"APX › Settings",breadcrumb_project:"APX › Project",breadcrumb_base:"Base",breadcrumb_projects:"Projects",light:"Switch to light",dark:"Switch to dark",lang_toggle:"Language"},admin:{title:"APX",subtitle:"Admin panel. Global config, channels and projects.",engines_title:"Engines",engines_subtitle:"Available LLM adapters. API keys live in ~/.apx/config.json.",telegram_title:"Telegram",telegram_subtitle:"Configured channels. Each one can be pinned to a project.",telegram_polling_on:"Polling active",telegram_polling_off:"Disabled",telegram_add_channel:"Channel",telegram_send_test:"Test",telegram_send_test_title:"Send to",telegram_default_message:"Test message from APX panel ✅",projects_title:"Registered projects",projects_subtitle:"Click a project to open its panel.",unregister:"Unregister",unregister_confirm:"Remove {label} from APX? The folder is not deleted; only unregistered.",reload_success:"Config reloaded.",telegram_polling_started:"Polling started.",telegram_polling_stopped:"Polling stopped.",telegram_channel_removed:"Channel deleted.",agents_badge:"agents",engine_badge:"yes",engine_badge_no:"no",base_label:"Base"},add_project:{title:"Add project",subtitle:"APX will index .apc/, agents and AGENTS.md in that folder.",path_label:"Absolute path",path_hint:"Equivalent to apx project add /path/to/project",path_placeholder:"/path/to/my-project",register:"Register",path_required:"Path required.",registered:"Project #{id} registered.",search_btn:"Browse",browser_unavailable:"Browser unavailable until daemon restarts. Paste path manually.",no_folders:"No folders."},settings:{title:"Settings",subtitle:"Panel preferences + local daemon diagnostics.",appearance:"Appearance",light_mode:"Light",dark_mode:"Dark",language:"Language",daemon:"Daemon",daemon_sub:"Status of the local process that serves this web and orchestrates agents.",engines:"Available engines",engines_sub:"LLM adapters compiled with the daemon.",token:"Session token",token_sub:"If this web could not auto-load the token, paste it here.",token_active:"(token already active)",token_paste:"Paste daemon bearer",token_saved:"Token saved.",devices:"Paired devices",devices_sub:"GET /pair/list. Revoking invalidates that bearer on the daemon.",devices_empty:"No paired clients yet.",devices_revoke_confirm:"Revoke client {id}?",devices_revoke_success:"Client revoked.",devices_pair_btn:"Pair device",devices_pair_title:"Pair device",devices_pair_desc:"Scan the QR with your phone camera to open the web already paired, or paste the code on another PC.",devices_pair_scan:"Scan with your phone camera — opens the web already paired.",devices_pair_code:"Or paste this code on the pairing screen:",devices_pair_url:"Access URL",devices_pair_link:"Or copy this link and open it on the other device (enters automatically):",devices_pair_copy:"Copy",devices_pair_copied:"Link copied to clipboard.",devices_pair_copied_code:"Code copied.",devices_pair_expires:"Expires in {s}s",devices_pair_expired:"The code expired.",devices_pair_regen:"Generate another",devices_pair_waiting:"Waiting for device to confirm…",devices_pair_done:"Device paired ✓",devices_pair_localhost_only:"Codes can only be generated from the daemon's PC (localhost).",devices_last_seen:"seen:",devices_never:"never",devices_revoke:"Revoke",account_section:"Account",agents_section:"Agents & models",channels_section:"Channels & devices",advanced_section:"Advanced",tabs:{identity:"Identity",super_agent:"Super-agent",engines:"Engines & models",telegram:"Telegram",devices:"Devices",advanced:"Advanced"},identity:{title:"Identity",subtitle:"User data. Agent configuration goes in Super-agent.",agent_name:"Agent name",owner_name:"Your name",personality:"Personality",owner_context:"Owner context",owner_context_hint:"Who you are, what you work on, what the agent should know about you.",language:"Preferred language",timezone:"Timezone (IANA)",timezone_hint:"e.g. America/New_York",saved:"Identity saved."},super_agent:{title:"Super-agent",subtitle:"Personality, model, prompt and modes of the super-agent.",personality:"Personality",model:"Active model",model_hint:"E.g.: anthropic:claude-sonnet-4.5, ollama:gemma2:9b",permission_mode:"Permission mode",system:"Extra prompt (system)",system_hint:"Text prepended to the base system prompt.",fallback_title:"Fallback chain",fallback_hint:"If the active model fails, these are tried in order.",fallback_add:"Add model to chain",saved:"Super-agent saved.",enabled_label:"Super-agent enabled",model_active:"Active model (router)",model_configure:"Configure in Models",behavior_subtitle:"Super-agent behavior. Model and fallback chain are configured in the Model Router."},engines_keys:{title:"Model API keys",subtitle:"Each engine stores its key in ~/.apx/config.json. Already-set values show a safe suffix.",ollama_url:"Ollama URL",ollama_hint:"Default: http://127.0.0.1:11434",key_label:"API key",key_placeholder:"(not set)",clear:"Clear key",saved:"Key saved.",cleared:"Key cleared."},telegram_global:{title:"Telegram (default)",subtitle:"Default channel — projects can override with their own channel.",bot_token:"Bot token",chat_id:"Default chat ID",poll_interval:"Poll interval (ms)",respond_with_engine:"Respond with engine",enabled:"Polling enabled",saved:"Telegram saved."},advanced:{title:"Advanced",subtitle:"Raw editor for ~/.apx/config.json. Secrets show as *** set *** but you can write a new one.",write:"Apply changes",written:"Config applied and daemon reloaded.",reload_success:"Config reloaded."}},project:{not_found:"Project {pid} not found.",rebuild:"Rebuild context",rebuild_done:"Rebuild OK.",unregister_confirm:"Unregister {label}? The folder is not deleted.",unregistered:"Unregistered.",base_subtitle:"General workspace · super-agent",nav:{overview:"Overview",chat:"Chat",config:"Config",telegram:"Telegram",agents:"Agents",routines:"Routines",tasks:"Tasks",mcps:"MCPs",threads:"Chats",logs:"Logs",memories:"Memories"},sections:{workspace:"Workspace",automation:"Automation",knowledge:"Conversations",config:"Config"},overview:{tasks_open:"Open tasks",routines:"Routines",agents:"Agents",mcps:"MCPs",chat:"Chat (super-agent)",chat_value:"open"},chat:{title:"Chat with agent",subtitle:"Direct conversations with project agents. The super-agent does not intervene.",roby_title:"Chat with Roby",roby_subtitle:"Chat with Roby — the APX super-agent. Can use tools (projects, tasks, mcps, agents).",empty:"Send a message to start the conversation.",placeholder:"Type something and press enter to send (shift+enter = new line)",send:"Send",stop:"Stop",clear:"Clear",copy:"copy",copied:"Copied.",stopped_marker:" [stopped]",create_agent:"Create agent",create_agent_title:"Create agent",create_agent_desc:"Required to start a chat in this project.",role_label:"role",model_label:"model",model_hint:"e.g. openai:gpt-5, groq:llama-3.3-70b-versatile",master_label:"Master agent"},tasks:{title:"Tasks (TODOs)",subtitle:"Append-only JSONL in ~/.apx/projects/<id>/tasks/.",add:"add",add_label:"New task",add_placeholder:"e.g. fix scroll bug",empty:"No {state} tasks.",empty_open:"No open tasks.",created:"Task created.",create_error:"could not create task",done:"✓ done",drop:"✗ drop",reopen:"↻ reopen",due:"due",via:"via",aria_done:"mark done",aria_drop:"discard task",aria_reopen:"reopen task"},global_tasks:{title:"Tasks (all projects)",subtitle:"Aggregated tasks from all registered projects.",empty:"No tasks.",due:"due",go_project:"Go to project"},routines:{title:"Heartbeats / Routines",subtitle:"Cron, every:Nm, once:ISO. Each routine fires an agent or a shell.",empty:"No routines. Create one above.",new:"new",new_btn:"New",delete_confirm:"Delete routine {name}?",saved:"Routine saved.",paused:"paused",next_run:"next:",last_run:"last:",enabled_hint:"Active · runs on schedule",disabled_hint:"Paused · only via Run button",enabled_label:"Enabled",new_title:"New routine",edit_title:"Edit {name}",dialog_desc:"Saved in .apc/routines.json. The routine runs while the daemon is active.",name_field:"Name",name_no_edit:"Cannot be changed when editing.",kind_field:"Action (kind)",schedule_field:"Interval (schedule)",schedule_hint:"Choose a preset or type manually. Manual = only runs via Run button.",vars_title:"Available variables",what_happens:"What will happen",agent_field:"Agent (spec.agent)",agent_hint:"Who executes the routine.",agent_loading:"loading…",agent_pick:"— pick an agent —",prompt_exec:"Prompt (spec.prompt)",prompt_exec_ph:"what is pending for today?",prompt_super:"Prompt (spec.prompt)",prompt_super_ph:"summarize the project status",pre_field:"Pre-commands (pre_commands)",pre_hint:"Shell BEFORE the prompt. One per line.",post_field:"Post-commands (post_commands)",post_hint:"Shell AFTER the prompt. One per line.",tg_channel:"Channel (spec.channel)",tg_chat_id:"Chat ID (spec.chat_id)",tg_text:"Text (spec.text)",tg_text_hint:"Fixed message to send. Does not use a model.",shell_field:"Command (spec.command)",shell_hint:"Runs as-is in the shell. No prompt, no pre/post.",hb_channel:"Channel (spec.channel)",hb_message:"Message (spec.message)",name_required:"name required",save_error:"save failed",run_error:"run failed",toggle_error:"toggle failed",delete_error:"delete failed",run_success:"{name} fired.",delete_success:"deleted."},agents:{title:"Agents",subtitle:"Defined in AGENTS.md + .apc/agents/<slug>/.",subtitle_full:"Defined in AGENTS.md + .apc/agents/<slug>/. Hierarchy (orchestrator → sub-agents) lives in frontmatter (Master / Parent).",empty:"No agents. Add one with <code>apx agent add</code> or the button.",empty_text:"No agents. Add one with `apx agent add` or the button above.",new:"Agent",created:"Agent {slug} created.",slug_invalid:"slug must match /^[a-z][a-z0-9_-]*$/",hierarchy:"Hierarchy",list_view:"List",import:"Import",chat:"Chat",view:"View",orchestrator:"Orchestrator",new_title:"New agent",new_desc:"POST /projects/:pid/agents — writes .apc/agents/<slug>.md.",slug_label:"slug",slug_ph:"cody",role_label:"role (optional)",role_ph:"code refactor",model_label:"model (optional)",model_hint:"e.g. claude-sonnet-4.5, ollama:gemma2:9b",lang_label:"language (optional)",desc_label:"description (optional)",desc_ph:"What does this agent do…",skills_label:"skills (comma)",skills_ph:"skill-a, skill-b",tools_label:"tools (comma)",tools_ph:"tool-a, tool-b",parent_label:"reports to (parent, optional)",parent_hint:"Sub-agent of an orchestrator.",none_parent:"— none —",master_label:"Orchestrator (master)",create_success:"Agent {slug} created.",create_error:"create failed",import_title:"Import from vault",import_desc:"Templates in ~/.apx/agents. Copied to this project (.apc/agents/).",import_empty:"No templates in the vault.",import_success:"Imported: {slug}",import_already:"already here",import_btn:"Import"},agent_detail:{not_found:"Agent not found.",chat_btn:"Chat with {slug}",reports_to:"↳ reports to",no_threads:"No threads.",no_activity:"No recorded activity.",threads_recent:"Recent threads",subagents:"Sub-agents",subagents_desc:"Agents that report to this orchestrator.",config_title:"Agent configuration",type_label:"Type",area_label:"Area",area_hint:"e.g. operations, marketing",area_ph:"operations",role_label:"Role",parent_label:"Reports to (parent)",none_parent:"— none —",model_label:"Base model",model_hint:"Empty = uses the Router model (default). Set only to force a model for this agent.",model_ph:"(empty = router default)",skills_label:"Skills (comma)",bio_label:"Bio / description",system_label:"System prompt",system_hint:"Defines personality and behavior (body of AGENT.md).",master_label:"Orchestrator (master)",delete_btn:"Delete agent",save_btn:"Save changes",delete_confirm:'Delete agent "{slug}"? Removes .apc/agents/{slug}.md and its folder.',update_success:"Agent updated.",delete_success:"Agent deleted.",tools_hint:"Which tools this agent can use. Tap to toggle; or edit the list below.",tools_custom_ph:"list (comma): echo, http_fetch",memory_title:"Agent memory",memory_empty:"(empty memory)",memory_saved:"Memory saved.",records_title:"Records",records_desc:"Agent activity log (messages/actions). Newest first.",sleep_title:"Sleep / Heartbeat",sleep_desc:"Agent execution status, derived from its routines.",sleep_deep:"Deep sleep · no heartbeat",sleep_deep_desc:"This agent has no routine that triggers it. It does not run autonomously; it only responds when invoked (chat / task).",brain_title:"Brain",brain_desc:"Real relationship graph of the agent: memory, threads, tasks, heartbeats and hierarchy. (first version — will be refined)",brain_empty:"No relationships to graph yet (no memory, threads, tasks or routines).",msgs_count:"msgs"},mcps:{title:"MCP servers",subtitle:"3 scopes: runtime > shared > global. Conflicts shown above if any.",empty:"No MCPs configured.",new:"MCP",delete_confirm:"Delete MCP {name} from scope {scope}?",conflicts:"⚠ Conflicts: {names}",new_title:"New MCP",new_desc:"POST /projects/:pid/mcps?scope=…",scope_label:"scope",transport_label:"transport",name_label:"name",name_ph:"filesystem",cmd_label:"command",cmd_ph:"npx",args_label:"args",args_hint:"space-separated",args_ph:"-y @modelcontextprotocol/server-filesystem /tmp",env_label:"env (JSON, optional)",url_label:"url",url_ph:"https://example.com/mcp",enabled_label:"Enabled",add_btn:"Add",name_required:"name required",env_invalid:"env must be valid JSON",removed:"removed",added:"MCP added."},threads:{title:"Chats",subtitle:"Conversations per agent (empty = no logs persisted yet).",no_agents:"No agents. Conversations require a configured agent.",pick:"Pick an agent to view its conversations.",empty:"No conversations for {slug}.",conversation_title:"Conversation {id}",messages:"messages",via:"via"},config:{title:"Quick config",subtitle:"Project override. Written to {path}.",model:"super_agent.model",model_hint:"e.g. anthropic:claude-sonnet-4.5, ollama:gemma2:9b",perm:"super_agent.permission_mode",route:"route_to_agent",route_hint:"Slug of the agent that handles this project by default.",use_global:"(uses global)",saved:"Saved.",nothing:"Nothing to save.",raw_title:"Config (raw JSON)",raw_subtitle:"Paste the entire object — equivalent to PUT the file.",raw_save:"Replace config",raw_done:"Config overwritten.",effective:"Effective config (read-only)",effective_sub:"What the daemon actually sees (global ⊕ override).",section_title:"Project config",section_desc:"APC metadata and overrides separated. General APX lives in Settings > Config.",effective_read:"Read: global APX + project override.",save_project:".apc/project.json saved.",save_override:".apc/config.json saved.",save_fields_success:"Overrides saved.",save_meta_success:"Project metadata saved.",no_data:"No data."},telegram:{title:"Telegram channel (override)",subtitle:"If you set a channel here, messages from this project go there instead of the default.",use_default:"Use default channel",bot_token:"Bot token (override)",chat_id:"Chat ID (override)",saved:"Override saved.",cleared:"Override removed — falls back to default.",override_active:"override active",channel_badge:"Channel {name}",no_override:"No override. Messages from this project go to the default channel.",respond_engine:"Respond with engine",route_agent:"route_to_agent",route_hint:"Slug of the agent that handles messages (empty = super-agent).",bot_hint_none:"If empty, inherits from default."},memories:{project_title:"Project memory",project_desc:"Durable facts at the project level. .apc/memory.md — read by agents and the super-agent.",project_ph:`# Project Memory
525
+ Hechos estables que cualquier agente debería saber…`,agents_title:"Memorias de agentes",agents_desc:"Memoria individual por agente. ~/.apx/projects/<id>/agents/<slug>/memory.md",no_agents:"Sin agentes en este proyecto.",saved:"Memoria guardada.",empty:"(memoria vacía)",chars:"chars · Markdown",save_btn:"Guardar"}},base:{title:"Base",subtitle:"Espacio general · super-agente",nav_general:"General",nav_activity:"Actividad",nav_system:"Sistema",workspaces_title:"Workspaces",workspaces_desc:"Todos los proyectos registrados en APX.",workspaces_new:"Nuevo proyecto",workspaces_empty:"Sin proyectos. Agregá uno con el botón de arriba.",sessions_title:"Sessions",sessions_desc:"Sesiones de todos los engines (apx · claude · codex), más nuevas primero.",sessions_all:"Todos los engines",sessions_empty:"Sin sesiones.",sessions_error:"No pude leer las sesiones: {msg}",defaults_title:"Agent defaults",defaults_desc:"Plantillas globales del vault. Las bundled vienen con APX y siempre están; las que crees o edites quedan en ~/.apx/agents y se superponen. Importalas a un proyecto desde Agents › Importar.",defaults_show_removed:"Mostrar removidos",defaults_new:"Nuevo",defaults_empty:"Sin plantillas en el vault.",defaults_hide:"Ocultar",defaults_restore:"Restaurar",defaults_edit:"Editar",defaults_remove:"Ocultar",defaults_delete:"Borrar",defaults_tombstone_msg:'Ocultar el default "{slug}"? Es bundled — quedá tombstoneado y lo recuperás con Restaurar.',defaults_delete_msg:'Borrar el template "{slug}"?',defaults_hidden:"Ocultado.",defaults_deleted:"Borrado.",defaults_restored:"Restaurado.",defaults_new_title:"Nuevo template",defaults_new_desc:"POST /agents/vault — se guarda en ~/.apx/agents/<slug>.md",defaults_edit_title:'Editar "{slug}"',defaults_bundled_desc:"Es un default bundled. Al guardar se hace copy-on-write a ~/.apx/agents/<slug>.md (queda como override).",defaults_user_desc:"PATCH /agents/vault/:slug — edita el archivo en ~/.apx/agents.",defaults_master_label:"Agente master",defaults_slug_invalid:"slug inválido (debe matchear /^[a-z][a-z0-9_-]*$/)",defaults_created:'Template "{slug}" creado.',defaults_saved:'Template "{slug}" guardado.'},logs:{title:"Logs",desc_global:"Actividad del daemon (canales globales: telegram, direct…). ~/.apx/messages/<channel>/.",desc_project:"Actividad del proyecto. ~/.apx/projects/<id>/messages/.",filter_channel:"filtrar canal (ej. telegram)",filter_dir:"dirección",all_directions:"Todas las direcciones",in:"Entrada (in)",out:"Salida (out)",filter_type:"tipo",all_types:"Todos los tipos",search_text:"buscar en el texto…",count_of:"de",no_activity:"Sin actividad.",no_activity_ch:'Sin actividad en el canal "{ch}".',error:"No pude leer los mensajes: {msg}",show_more:"ver más",show_less:"ver menos",daemon_errors:"Errores del daemon (~/.apx/logs/errors.jsonl)",no_errors:"Sin errores registrados. 🎉"},telegram_contacts:{title:"Contactos de Telegram",desc:"Quién le escribe a los bots. El rol define qué herramientas puede usar; un invitado no tiene permisos hasta que le asignes un rol.",empty:"Todavía no hay contactos — se registran solos cuando alguien escribe a un bot.",owner_badge:"dueño",assign_role:"Asignar rol",owner_hint:"Es dueño de un canal — cambialo desde el canal",removed:"Contacto eliminado.",delete_confirm:"¿Borrar el contacto {name}?",last_seen:"visto:",tools_all:"tools: todas",tools_none:"tools: ninguna",tools_label:"tools:"},telegram_channels:{title:"Canales",desc:"Cada canal es un bot que el daemon polea. Acá podés añadir/quitar canales, cambiar el agente que contesta, el proyecto al que pertenece y su dueño.",new_btn:"Nuevo canal",empty:"Todavía no hay canales — agregá el primero.",removed:"Canal eliminado.",delete_confirm:"¿Borrar el canal {name}?",no_owner:"sin dueño (se reclama al primer DM)",owner_label:"dueño:"},telegram_channel_dialog:{new_title:"Nuevo canal de Telegram",edit_title:"Editar canal: {name}",name_label:"name (slug interno)",token_label:"bot_token",chat_id:"chat_id",project_label:"project",project_hint:"Slug o id del proyecto al que pinear este canal (opcional).",route_label:"route_to_agent",route_hint:"Agente que contesta; vacío = super-agent APX.",owner_label:"owner_user_id",owner_hint:"user_id de Telegram del dueño de este canal. Override del rol global a 'owner' acá. Si lo dejás vacío, el primer mensaje privado lo reclama.",owner_ph:"889721252",respond_label:"Responder con engine (no echo)",name_required:"name requerido",saved:"Canal guardado."},telegram_send_dialog:{title:"Enviar a {name}",default_msg:"Mensaje de prueba desde el panel de APX ✅"},telegram_roles:{title:"Roles",desc:"Cada rol define qué herramientas del super-agent puede usar quien lo tenga asignado. 'owner' siempre = todas; 'guest' siempre = ninguna (solo chat).",empty:"No hay roles definidos.",tools_all:"todas las herramientas",tools_none:"ninguna herramienta",builtin:"built-in",delete_confirm:'¿Borrar el rol "{name}"?',removed:"Rol eliminado.",saved:'Rol "{name}" guardado.',name_required:"Nombre requerido.",builtin_error:'"{name}" es un rol built-in.',new_title:"Nuevo rol o reemplazar uno custom",name_label:"Nombre",name_ph:"editor",tools_label:"Tools (separadas por coma)",tools_hint:"Vacío = ninguna. Ejemplos: call_agent, list_tasks, create_task.",tools_ph:"call_agent, list_tasks",full_access:"Acceso total (todas las tools)",save_btn:"Guardar rol",delete_btn:"Borrar"},roby:{title:"Roby",badge:"super-agent · APX",desc:"Conversación rápida con tu super-agente. Tiene acceso a tools (proyectos, tasks, mcps, agentes); para un hilo más largo y persistente, abrí Chats.",empty:"Mandale un mensaje a Roby para arrancar.",thinking:"Roby está pensando…",talk:"Hablar con Roby",new_chat:"Nuevo chat",placeholder:"Escribí y enter para enviar (shift+enter = nueva línea)…"},not_found:{title:"404",message:"Esa ruta no existe."},code_module:{title:"Code",badge:"super-agent",desc:"Sesiones de código estilo OpenCode. Elegí un proyecto, abrí una sesión y pedile que lea, planifique, edite o ejecute.",no_projects:"No hay proyectos registrados. Registrá uno con `apx project add` para usar Code.",sessions:"Sesiones",new_session:"Nueva sesión",untitled:"Nueva sesión",no_sessions:"Todavía no hay sesiones — creá una para empezar a codear.",pick_project:"Elegí un proyecto para ver sus sesiones.",rename:"Renombrar",delete:"Eliminar",delete_confirm:"¿Eliminar esta sesión? Se borra la transcripción; tus archivos quedan intactos.",empty_chat:"Mandá una instrucción de código para arrancar.",placeholder:"Pedí un cambio… (enter envía, shift+enter = nueva línea)",mode_build:"Build",mode_plan:"Plan",mode_build_hint:"Build — edita archivos y ejecuta comandos",mode_plan_hint:"Plan — solo lectura, propone cambios sin tocar archivos",tab_context:"Contexto",tab_changes:"Cambios",ctx_model:"Modelo",ctx_tokens:"Tokens",ctx_input:"Entrada",ctx_output:"Salida",ctx_messages:"Mensajes",ctx_breakdown:"Desglose de contexto",ctx_none:"Sin uso todavía — mandá un turno para ver tokens.",seg_system:"Sistema",seg_user:"Usuario",seg_assistant:"Asistente",seg_tool:"Tools",seg_other:"Otro",changes_none:"Todavía no hay cambios en esta sesión.",changes_no_git:"Los cambios necesitan un repo git. Este proyecto no lo es.",changes_files:"{n} archivo(s) cambiados",stopped:"[detenido]"}},c5={common:{loading:"Loading…",saving:"Saving…",cancel:"Cancel",save:"Save",delete:"Delete",edit:"Edit",create:"Create",add:"Add",remove:"Remove",reload:"Reload",shutdown:"Shut down",enabled:"Enabled",disabled:"Disabled",enable:"Enable",disable:"Disable",open:"Open",close:"Close",confirm:"Confirm",optional:"(optional)",none:"—",none_yet:"Nothing here yet.",error_generic:"Something went wrong.",search:"Search",new:"New",restore:"Restore",show:"Show",hide:"Hide",copy:"Copy",run:"Run"},daemon:{connecting:"Connecting to the daemon…",unreachable:"Could not reach the daemon at localhost:7430.",unreachable_hint:"Start APX with `apx daemon start` and refresh.",version:"Version",uptime:"Uptime",status:"Status",running:"running",down:"down",reload_hint:"POST /admin/reload — reloads ~/.apx/config.json without restarting.",shutdown_confirm:"Shut down the daemon? Upcoming requests will fail until it restarts.",shutdown_done:"Daemon stopped."},pairing:{title:"Pair this device",subtitle:"You are connecting from outside this machine. For security, pair this browser with a pairing code.",steps_title:"How to get the code",step_1:"On the PC where APX is running, open a terminal.",step_2:"Run `apx pair` (or scan the QR with APX Deck).",step_3:"Copy the code shown below the QR and paste it here.",code_label:"Pairing code",code_ph:"e.g. 7f3a1c9e-…",label_label:"Device name",label_ph:"e.g. Living room laptop",submit:"Pair",linking:"Pairing…",success:"Device paired ✓",err_required:"Paste the pairing code.",err_expired:"The code expired. Run `apx pair` again and try again.",err_unknown:"Unknown or already-used code. Generate a new one with `apx pair`.",err_generic:"Could not pair. Check the code and try again.",revoke_hint:"You can revoke this device at any time from Settings or with `apx pair revoke`."},nav:{apx_admin:"APX",settings:"Settings",project:"Project",add_project:"Add project",modules:{voice:"Voices",desktop:"Desktop",deck:"Deck",code:"Code"}},topbar:{breadcrumb_root:"APX",breadcrumb_settings:"APX › Settings",breadcrumb_project:"APX › Project",breadcrumb_base:"Base",breadcrumb_projects:"Projects",light:"Switch to light",dark:"Switch to dark",lang_toggle:"Language"},admin:{title:"APX",subtitle:"Admin panel. Global config, channels and projects.",engines_title:"Engines",engines_subtitle:"Available LLM adapters. API keys live in ~/.apx/config.json.",telegram_title:"Telegram",telegram_subtitle:"Configured channels. Each one can be pinned to a project.",telegram_polling_on:"Polling active",telegram_polling_off:"Disabled",telegram_add_channel:"Channel",telegram_send_test:"Test",telegram_send_test_title:"Send to",telegram_default_message:"Test message from APX panel ✅",projects_title:"Registered projects",projects_subtitle:"Click a project to open its panel.",unregister:"Unregister",unregister_confirm:"Remove {label} from APX? The folder is not deleted; only unregistered.",reload_success:"Config reloaded.",telegram_polling_started:"Polling started.",telegram_polling_stopped:"Polling stopped.",telegram_channel_removed:"Channel deleted.",agents_badge:"agents",engine_badge:"yes",engine_badge_no:"no",base_label:"Base"},add_project:{title:"Add project",subtitle:"APX will index .apc/, agents and AGENTS.md in that folder.",path_label:"Absolute path",path_hint:"Equivalent to apx project add /path/to/project",path_placeholder:"/path/to/my-project",register:"Register",path_required:"Path required.",registered:"Project #{id} registered.",search_btn:"Browse",browser_unavailable:"Browser unavailable until daemon restarts. Paste path manually.",no_folders:"No folders."},settings:{title:"Settings",subtitle:"Panel preferences + local daemon diagnostics.",appearance:"Appearance",light_mode:"Light",dark_mode:"Dark",language:"Language",daemon:"Daemon",daemon_sub:"Status of the local process that serves this web and orchestrates agents.",engines:"Available engines",engines_sub:"LLM adapters compiled with the daemon.",token:"Session token",token_sub:"If this web could not auto-load the token, paste it here.",token_active:"(token already active)",token_paste:"Paste daemon bearer",token_saved:"Token saved.",devices:"Paired devices",devices_sub:"GET /pair/list. Revoking invalidates that bearer on the daemon.",devices_empty:"No paired clients yet.",devices_revoke_confirm:"Revoke client {id}?",devices_revoke_success:"Client revoked.",devices_pair_btn:"Pair device",devices_pair_title:"Pair device",devices_pair_desc:"Scan the QR with your phone camera to open the web already paired, or paste the code on another PC.",devices_pair_scan:"Scan with your phone camera — opens the web already paired.",devices_pair_code:"Or paste this code on the pairing screen:",devices_pair_url:"Access URL",devices_pair_link:"Or copy this link and open it on the other device (enters automatically):",devices_pair_copy:"Copy",devices_pair_copied:"Link copied to clipboard.",devices_pair_copied_code:"Code copied.",devices_pair_expires:"Expires in {s}s",devices_pair_expired:"The code expired.",devices_pair_regen:"Generate another",devices_pair_waiting:"Waiting for device to confirm…",devices_pair_done:"Device paired ✓",devices_pair_localhost_only:"Codes can only be generated from the daemon's PC (localhost).",devices_last_seen:"seen:",devices_never:"never",devices_revoke:"Revoke",account_section:"Account",agents_section:"Agents & models",channels_section:"Channels & devices",advanced_section:"Advanced",tabs:{identity:"Identity",super_agent:"Super-agent",engines:"Engines & models",telegram:"Telegram",devices:"Devices",advanced:"Advanced"},identity:{title:"Identity",subtitle:"User data. Agent configuration goes in Super-agent.",agent_name:"Agent name",owner_name:"Your name",personality:"Personality",owner_context:"Owner context",owner_context_hint:"Who you are, what you work on, what the agent should know about you.",language:"Preferred language",timezone:"Timezone (IANA)",timezone_hint:"e.g. America/New_York",saved:"Identity saved."},super_agent:{title:"Super-agent",subtitle:"Personality, model, prompt and modes of the super-agent.",personality:"Personality",model:"Active model",model_hint:"E.g.: anthropic:claude-sonnet-4.5, ollama:gemma2:9b",permission_mode:"Permission mode",system:"Extra prompt (system)",system_hint:"Text prepended to the base system prompt.",fallback_title:"Fallback chain",fallback_hint:"If the active model fails, these are tried in order.",fallback_add:"Add model to chain",saved:"Super-agent saved.",enabled_label:"Super-agent enabled",model_active:"Active model (router)",model_configure:"Configure in Models",behavior_subtitle:"Super-agent behavior. Model and fallback chain are configured in the Model Router."},engines_keys:{title:"Model API keys",subtitle:"Each engine stores its key in ~/.apx/config.json. Already-set values show a safe suffix.",ollama_url:"Ollama URL",ollama_hint:"Default: http://127.0.0.1:11434",key_label:"API key",key_placeholder:"(not set)",clear:"Clear key",saved:"Key saved.",cleared:"Key cleared."},telegram_global:{title:"Telegram (default)",subtitle:"Default channel — projects can override with their own channel.",bot_token:"Bot token",chat_id:"Default chat ID",poll_interval:"Poll interval (ms)",respond_with_engine:"Respond with engine",enabled:"Polling enabled",saved:"Telegram saved."},advanced:{title:"Advanced",subtitle:"Raw editor for ~/.apx/config.json. Secrets show as *** set *** but you can write a new one.",write:"Apply changes",written:"Config applied and daemon reloaded.",reload_success:"Config reloaded."}},project:{not_found:"Project {pid} not found.",rebuild:"Rebuild context",rebuild_done:"Rebuild OK.",unregister_confirm:"Unregister {label}? The folder is not deleted.",unregistered:"Unregistered.",base_subtitle:"General workspace · super-agent",nav:{overview:"Overview",chat:"Chat",config:"Config",telegram:"Telegram",agents:"Agents",routines:"Routines",tasks:"Tasks",mcps:"MCPs",threads:"Chats",logs:"Logs",memories:"Memories"},sections:{workspace:"Workspace",automation:"Automation",knowledge:"Conversations",config:"Config"},overview:{tasks_open:"Open tasks",routines:"Routines",agents:"Agents",mcps:"MCPs",chat:"Chat (super-agent)",chat_value:"open"},chat:{title:"Chat with agent",subtitle:"Direct conversations with project agents. The super-agent does not intervene.",roby_title:"Chat with Roby",roby_subtitle:"Chat with Roby — the APX super-agent. Can use tools (projects, tasks, mcps, agents).",empty:"Send a message to start the conversation.",placeholder:"Type something and press enter to send (shift+enter = new line)",send:"Send",stop:"Stop",clear:"Clear",copy:"copy",copied:"Copied.",stopped_marker:" [stopped]",create_agent:"Create agent",create_agent_title:"Create agent",create_agent_desc:"Required to start a chat in this project.",role_label:"role",model_label:"model",model_hint:"e.g. openai:gpt-5, groq:llama-3.3-70b-versatile",master_label:"Master agent"},tasks:{title:"Tasks (TODOs)",subtitle:"Append-only JSONL in ~/.apx/projects/<id>/tasks/.",add:"add",add_label:"New task",add_placeholder:"e.g. fix scroll bug",empty:"No {state} tasks.",empty_open:"No open tasks.",created:"Task created.",create_error:"could not create task",done:"✓ done",drop:"✗ drop",reopen:"↻ reopen",due:"due",via:"via",aria_done:"mark done",aria_drop:"discard task",aria_reopen:"reopen task"},global_tasks:{title:"Tasks (all projects)",subtitle:"Aggregated tasks from all registered projects.",empty:"No tasks.",due:"due",go_project:"Go to project"},routines:{title:"Heartbeats / Routines",subtitle:"Cron, every:Nm, once:ISO. Each routine fires an agent or a shell.",empty:"No routines. Create one above.",new:"new",new_btn:"New",delete_confirm:"Delete routine {name}?",saved:"Routine saved.",paused:"paused",next_run:"next:",last_run:"last:",enabled_hint:"Active · runs on schedule",disabled_hint:"Paused · only via Run button",enabled_label:"Enabled",new_title:"New routine",edit_title:"Edit {name}",dialog_desc:"Saved in .apc/routines.json. The routine runs while the daemon is active.",name_field:"Name",name_no_edit:"Cannot be changed when editing.",kind_field:"Action (kind)",schedule_field:"Interval (schedule)",schedule_hint:"Choose a preset or type manually. Manual = only runs via Run button.",vars_title:"Available variables",what_happens:"What will happen",agent_field:"Agent (spec.agent)",agent_hint:"Who executes the routine.",agent_loading:"loading…",agent_pick:"— pick an agent —",prompt_exec:"Prompt (spec.prompt)",prompt_exec_ph:"what is pending for today?",prompt_super:"Prompt (spec.prompt)",prompt_super_ph:"summarize the project status",pre_field:"Pre-commands (pre_commands)",pre_hint:"Shell BEFORE the prompt. One per line.",post_field:"Post-commands (post_commands)",post_hint:"Shell AFTER the prompt. One per line.",tg_channel:"Channel (spec.channel)",tg_chat_id:"Chat ID (spec.chat_id)",tg_text:"Text (spec.text)",tg_text_hint:"Fixed message to send. Does not use a model.",shell_field:"Command (spec.command)",shell_hint:"Runs as-is in the shell. No prompt, no pre/post.",hb_channel:"Channel (spec.channel)",hb_message:"Message (spec.message)",name_required:"name required",save_error:"save failed",run_error:"run failed",toggle_error:"toggle failed",delete_error:"delete failed",run_success:"{name} fired.",delete_success:"deleted."},agents:{title:"Agents",subtitle:"Defined in AGENTS.md + .apc/agents/<slug>.md.",subtitle_full:"Defined in AGENTS.md + .apc/agents/<slug>.md. Runtime memory lives under ~/.apx/projects/<id>/agents/<slug>/.",empty:"No agents. Add one with <code>apx agent add</code> or the button.",empty_text:"No agents. Add one with `apx agent add` or the button above.",new:"Agent",created:"Agent {slug} created.",slug_invalid:"slug must match /^[a-z][a-z0-9_-]*$/",hierarchy:"Hierarchy",list_view:"List",import:"Import",chat:"Chat",view:"View",orchestrator:"Orchestrator",new_title:"New agent",new_desc:"POST /projects/:pid/agents — writes .apc/agents/<slug>.md.",slug_label:"slug",slug_ph:"cody",role_label:"role (optional)",role_ph:"code refactor",model_label:"model (optional)",model_hint:"e.g. ollama:gemma2:9b, openai:gpt-4o-mini",lang_label:"language (optional)",desc_label:"description (optional)",desc_ph:"What does this agent do…",skills_label:"skills (comma)",skills_ph:"skill-a, skill-b",tools_label:"tools (comma)",tools_ph:"tool-a, tool-b",parent_label:"reports to (parent, optional)",parent_hint:"Sub-agent of an orchestrator.",none_parent:"— none —",master_label:"Orchestrator (master)",create_success:"Agent {slug} created.",create_error:"create failed",import_title:"Import from vault",import_desc:"Templates in ~/.apx/agents. Registered in this project (.apc/agents/<slug>.md).",import_empty:"No templates in the vault.",import_success:"Imported: {slug}",import_already:"already here",import_btn:"Import"},agent_detail:{not_found:"Agent not found.",chat_btn:"Chat with {slug}",reports_to:"↳ reports to",no_threads:"No threads.",no_activity:"No recorded activity.",threads_recent:"Recent threads",subagents:"Sub-agents",subagents_desc:"Agents that report to this orchestrator.",config_title:"Agent configuration",type_label:"Type",area_label:"Area",area_hint:"e.g. operations, marketing",area_ph:"operations",role_label:"Role",parent_label:"Reports to (parent)",none_parent:"— none —",model_label:"Base model",model_hint:"Empty = uses the Router model (default). Set only to force a model for this agent.",model_ph:"(empty = router default)",skills_label:"Skills (comma)",bio_label:"Bio / description",system_label:"System prompt",system_hint:"Defines personality and behavior (body of AGENT.md).",master_label:"Orchestrator (master)",delete_btn:"Delete agent",save_btn:"Save changes",delete_confirm:'Delete agent "{slug}"? Removes .apc/agents/{slug}.md and local runtime data.',update_success:"Agent updated.",delete_success:"Agent deleted.",tools_hint:"Which tools this agent can use. Tap to toggle; or edit the list below.",tools_custom_ph:"list (comma): echo, http_fetch",memory_title:"Agent memory",memory_empty:"(empty memory)",memory_saved:"Memory saved.",records_title:"Records",records_desc:"Agent activity log (messages/actions). Newest first.",sleep_title:"Sleep / Heartbeat",sleep_desc:"Agent execution status, derived from its routines.",sleep_deep:"Deep sleep · no heartbeat",sleep_deep_desc:"This agent has no routine that triggers it. It does not run autonomously; it only responds when invoked (chat / task).",brain_title:"Brain",brain_desc:"Real relationship graph of the agent: memory, threads, tasks, heartbeats and hierarchy. (first version — will be refined)",brain_empty:"No relationships to graph yet (no memory, threads, tasks or routines).",msgs_count:"msgs"},mcps:{title:"MCP servers",subtitle:"3 scopes: runtime > shared > global. Conflicts shown above if any.",empty:"No MCPs configured.",new:"MCP",delete_confirm:"Delete MCP {name} from scope {scope}?",conflicts:"⚠ Conflicts: {names}",new_title:"New MCP",new_desc:"POST /projects/:pid/mcps?scope=…",scope_label:"scope",transport_label:"transport",name_label:"name",name_ph:"filesystem",cmd_label:"command",cmd_ph:"npx",args_label:"args",args_hint:"space-separated",args_ph:"-y @modelcontextprotocol/server-filesystem /tmp",env_label:"env (JSON, optional)",url_label:"url",url_ph:"https://example.com/mcp",enabled_label:"Enabled",add_btn:"Add",name_required:"name required",env_invalid:"env must be valid JSON",removed:"removed",added:"MCP added."},threads:{title:"Chats",subtitle:"Conversations per agent (empty = no logs persisted yet).",no_agents:"No agents. Conversations require a configured agent.",pick:"Pick an agent to view its conversations.",empty:"No conversations for {slug}.",conversation_title:"Conversation {id}",messages:"messages",via:"via"},config:{title:"Quick config",subtitle:"Project override. Written to {path}.",model:"super_agent.model",model_hint:"e.g. anthropic:claude-sonnet-4.5, ollama:gemma2:9b",perm:"super_agent.permission_mode",route:"route_to_agent",route_hint:"Slug of the agent that handles this project by default.",use_global:"(uses global)",saved:"Saved.",nothing:"Nothing to save.",raw_title:"Config (raw JSON)",raw_subtitle:"Paste the entire object — equivalent to PUT the file.",raw_save:"Replace config",raw_done:"Config overwritten.",effective:"Effective config (read-only)",effective_sub:"What the daemon actually sees (global ⊕ override).",section_title:"Project config",section_desc:"APC metadata and overrides separated. General APX lives in Settings > Config.",effective_read:"Read: global APX + project override.",save_project:".apc/project.json saved.",save_override:".apc/config.json saved.",save_fields_success:"Overrides saved.",save_meta_success:"Project metadata saved.",no_data:"No data."},telegram:{title:"Telegram channel (override)",subtitle:"If you set a channel here, messages from this project go there instead of the default.",use_default:"Use default channel",bot_token:"Bot token (override)",chat_id:"Chat ID (override)",saved:"Override saved.",cleared:"Override removed — falls back to default.",override_active:"override active",channel_badge:"Channel {name}",no_override:"No override. Messages from this project go to the default channel.",respond_engine:"Respond with engine",route_agent:"route_to_agent",route_hint:"Slug of the agent that handles messages (empty = super-agent).",bot_hint_none:"If empty, inherits from default."},memories:{project_title:"Project memory",project_desc:"Durable facts at the project level. .apc/memory.md — read by agents and the super-agent.",project_ph:`# Project Memory
526
526
 
527
- Stable facts that any agent should know…`,agents_title:"Agent memories",agents_desc:"Individual memory per agent. .apc/agents/<slug>/memory.md",no_agents:"No agents in this project.",saved:"Memory saved.",empty:"(empty memory)",chars:"chars · Markdown",save_btn:"Save"}},base:{title:"Base",subtitle:"General workspace · super-agent",nav_general:"General",nav_activity:"Activity",nav_system:"System",workspaces_title:"Workspaces",workspaces_desc:"All projects registered in APX.",workspaces_new:"New project",workspaces_empty:"No projects. Add one with the button above.",sessions_title:"Sessions",sessions_desc:"Sessions from all engines (apx · claude · codex), newest first.",sessions_all:"All engines",sessions_empty:"No sessions.",sessions_error:"Could not read sessions: {msg}",defaults_title:"Agent defaults",defaults_desc:"Global vault templates. Bundled ones come with APX and are always present; ones you create or edit go in ~/.apx/agents and override. Import them into a project from Agents › Import.",defaults_show_removed:"Show removed",defaults_new:"New",defaults_empty:"No templates in the vault.",defaults_hide:"Hide",defaults_restore:"Restore",defaults_edit:"Edit",defaults_remove:"Hide",defaults_delete:"Delete",defaults_tombstone_msg:`Hide the default "{slug}"? It's bundled — tombstoned and recoverable with Restore.`,defaults_delete_msg:'Delete the template "{slug}"?',defaults_hidden:"Hidden.",defaults_deleted:"Deleted.",defaults_restored:"Restored.",defaults_new_title:"New template",defaults_new_desc:"POST /agents/vault — saved to ~/.apx/agents/<slug>.md",defaults_edit_title:'Edit "{slug}"',defaults_bundled_desc:"This is a bundled default. Saving does a copy-on-write to ~/.apx/agents/<slug>.md (becomes an override).",defaults_user_desc:"PATCH /agents/vault/:slug — edits the file in ~/.apx/agents.",defaults_master_label:"Master agent",defaults_slug_invalid:"invalid slug (must match /^[a-z][a-z0-9_-]*$/)",defaults_created:'Template "{slug}" created.',defaults_saved:'Template "{slug}" saved.'},logs:{title:"Logs",desc_global:"Daemon activity (global channels: telegram, direct…). ~/.apx/messages/<channel>/.",desc_project:"Project activity. ~/.apx/projects/<id>/messages/.",filter_channel:"filter channel (e.g. telegram)",filter_dir:"direction",all_directions:"All directions",in:"Incoming (in)",out:"Outgoing (out)",filter_type:"type",all_types:"All types",search_text:"search text…",count_of:"of",no_activity:"No activity.",no_activity_ch:'No activity in channel "{ch}".',error:"Could not read messages: {msg}",show_more:"show more",show_less:"show less",daemon_errors:"Daemon errors (~/.apx/logs/errors.jsonl)",no_errors:"No errors recorded. 🎉"},telegram_contacts:{title:"Telegram contacts",desc:"Who writes to the bots. The role defines which tools they can use; a guest has no permissions until you assign a role.",empty:"No contacts yet — they register automatically when someone writes to a bot.",owner_badge:"owner",assign_role:"Assign role",owner_hint:"Channel owner — change it from the channel",removed:"Contact deleted.",delete_confirm:"Delete contact {name}?",last_seen:"seen:",tools_all:"tools: all",tools_none:"tools: none",tools_label:"tools:"},telegram_channels:{title:"Channels",desc:"Each channel is a bot the daemon polls. Here you can add/remove channels, change the answering agent, the project it belongs to and its owner.",new_btn:"New channel",empty:"No channels yet — add the first one.",removed:"Channel deleted.",delete_confirm:"Delete channel {name}?",no_owner:"no owner (claimed on first DM)",owner_label:"owner:"},telegram_channel_dialog:{new_title:"New Telegram channel",edit_title:"Edit channel: {name}",name_label:"name (internal slug)",token_label:"bot_token",chat_id:"chat_id",project_label:"project",project_hint:"Slug or id of the project to pin this channel to (optional).",route_label:"route_to_agent",route_hint:"Answering agent; empty = APX super-agent.",owner_label:"owner_user_id",owner_hint:"Telegram user_id of the channel owner. Overrides global role to 'owner' here. Leave empty — first private message claims it.",owner_ph:"889721252",respond_label:"Respond with engine (not echo)",name_required:"name required",saved:"Channel saved."},telegram_send_dialog:{title:"Send to {name}",default_msg:"Test message from APX panel ✅"},telegram_roles:{title:"Roles",desc:"Each role defines which super-agent tools the assigned user can invoke. 'owner' always = all; 'guest' always = none (chat only).",empty:"No roles defined.",tools_all:"all tools",tools_none:"no tools",builtin:"built-in",delete_confirm:'Delete role "{name}"?',removed:"Role deleted.",saved:'Role "{name}" saved.',name_required:"Name required.",builtin_error:'"{name}" is a built-in role.',new_title:"New role or replace a custom one",name_label:"Name",name_ph:"editor",tools_label:"Tools (comma-separated)",tools_hint:"Empty = none. Examples: call_agent, list_tasks, create_task.",tools_ph:"call_agent, list_tasks",full_access:"Full access (all tools)",save_btn:"Save role",delete_btn:"Delete"},roby:{title:"Roby",badge:"super-agent · APX",desc:"Quick chat with your super-agent. Has access to tools (projects, tasks, mcps, agents); for a longer persistent thread, open Chats.",empty:"Send Roby a message to get started.",thinking:"Roby is thinking…",talk:"Talk to Roby",new_chat:"New chat",placeholder:"Type and press enter to send (shift+enter = new line)…"},not_found:{title:"404",message:"That route does not exist."},code_module:{title:"Code",badge:"super-agent",desc:"OpenCode-style coding sessions. Pick a project, open a session, and ask it to read, plan, edit or run.",no_projects:"No registered projects. Register one with `apx project add` to use Code.",sessions:"Sessions",new_session:"New session",untitled:"New session",no_sessions:"No sessions yet — create one to start coding.",pick_project:"Pick a project to see its sessions.",rename:"Rename",delete:"Delete",delete_confirm:"Delete this session? The transcript is removed; your files are untouched.",empty_chat:"Send a coding instruction to get started.",placeholder:"Ask for a change… (enter sends, shift+enter = new line)",mode_build:"Build",mode_plan:"Plan",mode_build_hint:"Build — edits files and runs commands",mode_plan_hint:"Plan — read-only, proposes changes without touching files",tab_context:"Context",tab_changes:"Changes",ctx_model:"Model",ctx_tokens:"Tokens",ctx_input:"Input",ctx_output:"Output",ctx_messages:"Messages",ctx_breakdown:"Context breakdown",ctx_none:"No usage yet — send a turn to see tokens.",seg_system:"System",seg_user:"User",seg_assistant:"Assistant",seg_tool:"Tools",seg_other:"Other",changes_none:"No changes in this session yet.",changes_no_git:"Changes need a git repository. This project isn't one.",changes_files:"{n} file(s) changed",stopped:"[stopped]"}},ax={es:i5,en:c5};function u5(){try{const e=localStorage.getItem(Cn.language);if(e&&e in ax)return e}catch{}return"es"}let qd=u5();function d5(e){qd=e;try{localStorage.setItem(Cn.language,e)}catch{}}const f5=[{value:"es",label:"Español"},{value:"en",label:"English"}];function m5(){return qd}function p5(e){const n=ax[qd],s=e.split(".");let r=n;for(const i of s)if(r&&typeof r=="object"&&i in r)r=r[i];else return;return typeof r=="string"?r:void 0}function g5(e,n){return n?e.replace(/\{(\w+)\}/g,(s,r)=>r in n?String(n[r]):`{${r}}`):e}function h5(e){const n=p5(e);if(n!==void 0)return n;if(qd!=="es"){const s=ax.es,r=e.split(".");let i=s;for(const c of r)if(i&&typeof i=="object"&&c in i)i=i[c];else return;return typeof i=="string"?i:void 0}}function C(e,n){const s=h5(e);return s===void 0?e:g5(s,n)}function x5(){return[{id:"voice",label:C("nav.modules.voice"),href:"/m/voice",icon:QR},{id:"desktop",label:C("nav.modules.desktop"),href:"/m/desktop",icon:ZR},{id:"deck",label:C("nav.modules.deck"),href:"/m/deck",icon:YR},{id:"code",label:C("nav.modules.code"),href:"/m/code",icon:Pi}]}function b5({onSelect:e,onOpenRoby:n}){const{projects:s,isLoading:r}=sc(),i=ea(),c=x5(),d=m=>i.pathname===m||i.pathname.startsWith(`${m}/`),f=s.find(m=>String(m.id)==="0"),g=s.filter(m=>String(m.id)!=="0");return l.jsxs("aside",{className:"flex h-full w-20 flex-col items-center gap-3 overflow-y-auto bg-transparent py-3",children:[l.jsx(Ko,{content:C("nav.apx_admin"),side:"right",children:l.jsx("button",{type:"button",onClick:()=>e("/"),"data-testid":"nav-home",className:"mb-2 cursor-pointer",children:l.jsx(mN,{size:36})})}),r&&l.jsx("div",{className:"size-10 animate-pulse rounded-xl bg-muted"}),f&&l.jsx(ui,{label:C("base.title"),testId:"project-avatar-0",title:C("base.subtitle"),active:d("/p/0"),isDefault:!0,icon:l.jsx("img",{src:"/modules/superagent.png",alt:C("base.title"),className:"size-7 object-contain",draggable:!1}),onClick:()=>e("/p/0")}),l.jsx("div",{className:"my-0.5 h-px w-8 rounded-full bg-border"}),c.map(m=>l.jsx(ui,{label:m.label,testId:`module-avatar-${m.id}`,title:m.label,active:d(m.href),icon:l.jsx(m.icon,{size:18}),onClick:()=>e(m.href)},m.id)),g.length>0&&l.jsx("div",{className:"my-0.5 h-px w-8 rounded-full bg-border"}),g.map(m=>{const h=m.name||m.path.split("/").pop()||String(m.id),x=`/p/${m.id}`;return l.jsx(ui,{label:h,testId:`project-avatar-${m.id}`,title:`${h} — ${m.path}`,active:d(x),onClick:()=>e(x)},m.id)}),l.jsx(ui,{label:"Add",isAdd:!0,testId:"nav-add-project",icon:l.jsx(Rn,{size:18}),active:!1,onClick:()=>e("/?action=add-project"),title:C("nav.add_project")}),l.jsx("div",{className:"flex-1"}),l.jsx(ui,{label:"Settings",isSettings:!0,testId:"nav-settings",icon:l.jsx(ed,{size:16}),active:i.pathname==="/settings"||i.pathname.startsWith("/settings/"),onClick:()=>e("/settings"),title:C("nav.settings")}),l.jsx(Ko,{content:C("roby.talk"),side:"right",children:l.jsx("button",{type:"button",onClick:n,"data-testid":"nav-roby","aria-label":C("roby.talk"),className:"mt-1 flex size-10 items-center justify-center rounded-xl border border-border/60 bg-muted/30 text-muted-fg transition-colors hover:bg-accent hover:text-foreground",children:l.jsx(vn,{size:18})})})]})}function iw(e){switch(e){case"personal":return"Personal";case"company":return"Company";case"app":return"App";case"software":return"Software";case"default":return"Default";case"other":return"Other";default:return C("nav.project")}}function He({title:e,description:n,action:s,className:r,children:i}){return l.jsxs("section",{className:Ie("rounded-xl border border-border bg-card p-5",r),children:[l.jsxs("header",{className:"mb-4 flex items-start justify-between gap-4",children:[l.jsxs("div",{children:[l.jsx("h2",{className:"text-lg font-semibold tracking-tight",children:e}),n&&l.jsx("p",{className:"mt-0.5 text-sm text-muted-fg",children:n})]}),s]}),l.jsx("div",{children:i})]})}function R1({children:e}){return l.jsx("kbd",{className:"rounded border border-border bg-muted px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-wide text-muted-fg",children:e})}function Vd({ok:e}){return l.jsx("span",{className:Ie("inline-block size-2 rounded-full",e===null?"bg-muted-fg":e?"bg-emerald-500":"bg-red-500")})}const cw=v.createContext(void 0);function uw(e=!1){const n=v.useContext(cw);if(n===void 0&&!e)throw new Error(Nn(16));return n}function v5(e){const{focusableWhenDisabled:n,disabled:s,composite:r=!1,tabIndex:i=0,isNativeButton:c}=e,d=r&&n!==!1,f=r&&n===!1;return{props:v.useMemo(()=>{const m={onKeyDown(h){s&&n&&h.key!=="Tab"&&h.preventDefault()}};return r||(m.tabIndex=i,!c&&s&&(m.tabIndex=n?i:-1)),(c&&(n||d)||!c&&s)&&(m["aria-disabled"]=s),c&&(!n||f)&&(m.disabled=s),m},[r,s,n,d,f,c,i])}}function ml(e={}){const{disabled:n=!1,focusableWhenDisabled:s,tabIndex:r=0,native:i=!0,composite:c}=e,d=v.useRef(null),f=uw(!0),g=c??f!==void 0,{props:m}=v5({focusableWhenDisabled:s,disabled:n,composite:g,tabIndex:r,isNativeButton:i}),h=v.useCallback(()=>{const w=d.current;Hp(w)&&g&&n&&m.disabled===void 0&&w.disabled&&(w.disabled=!1)},[n,m.disabled,g]);Re(h,[h]);const x=v.useCallback((w={})=>{const{onClick:S,onMouseDown:_,onKeyUp:j,onKeyDown:E,onPointerDown:k,...N}=w;return ka({onClick(R){if(n){R.preventDefault();return}S?.(R)},onMouseDown(R){n||_?.(R)},onKeyDown(R){if(n||(id(R),E?.(R),R.baseUIHandlerPrevented))return;const A=R.target===R.currentTarget,M=R.currentTarget,O=Hp(M),U=!i&&y5(M),I=A&&(i?O:!U),B=R.key==="Enter",L=R.key===" ",D=M.getAttribute("role"),q=D?.startsWith("menuitem")||D==="option"||D==="gridcell";if(A&&g&&L){if(R.defaultPrevented&&q)return;R.preventDefault(),U||i&&O?(M.click(),R.preventBaseUIHandler()):I&&(S?.(R),R.preventBaseUIHandler());return}I&&(!i&&(L||B)&&R.preventDefault(),!i&&B&&S?.(R))},onKeyUp(R){if(!n){if(id(R),j?.(R),R.target===R.currentTarget&&i&&g&&Hp(R.currentTarget)&&R.key===" "){R.preventDefault();return}R.baseUIHandlerPrevented||R.target===R.currentTarget&&!i&&!g&&R.key===" "&&S?.(R)}},onPointerDown(R){if(n){R.preventDefault();return}k?.(R)}},i?{type:"button"}:{role:"button"},m,N)},[n,m,g,i]),y=Ae(w=>{d.current=w,h()});return{getButtonProps:x,buttonRef:y}}function Hp(e){return Ut(e)&&e.tagName==="BUTTON"}function y5(e){return!!(e?.tagName==="A"&&e?.href)}const _5=v.forwardRef(function(n,s){const{render:r,className:i,disabled:c=!1,focusableWhenDisabled:d=!1,nativeButton:f=!0,style:g,...m}=n,{getButtonProps:h,buttonRef:x}=ml({disabled:c,focusableWhenDisabled:d,native:f});return Lt("button",n,{state:{disabled:c},ref:[s,x],props:[m,h]})}),N1=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,T1=vh,sx=(e,n)=>s=>{var r;if(n?.variants==null)return T1(e,s?.class,s?.className);const{variants:i,defaultVariants:c}=n,d=Object.keys(i).map(m=>{const h=s?.[m],x=c?.[m];if(h===null)return null;const y=N1(h)||N1(x);return i[m][y]}),f=s&&Object.entries(s).reduce((m,h)=>{let[x,y]=h;return y===void 0||(m[x]=y),m},{}),g=n==null||(r=n.compoundVariants)===null||r===void 0?void 0:r.reduce((m,h)=>{let{class:x,className:y,...w}=h;return Object.entries(w).every(S=>{let[_,j]=S;return Array.isArray(j)?j.includes({...c,...f}[_]):{...c,...f}[_]===j})?[...m,x,y]:m},[]);return T1(e,d,g,s?.class,s?.className)},j5=sx("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function Wo({className:e,variant:n="default",size:s="default",...r}){return l.jsx(_5,{"data-slot":"button",className:Pt(j5({variant:n,size:s,className:e})),...r})}let A1=(function(e){return e.disabled="data-disabled",e.valid="data-valid",e.invalid="data-invalid",e.touched="data-touched",e.dirty="data-dirty",e.filled="data-filled",e.focused="data-focused",e})({});const S5={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},ji={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},w5={disabled:!1,...ji},rx={valid(e){return e===null?null:e?{[A1.valid]:""}:{[A1.invalid]:""}}},C5={invalid:void 0,name:void 0,validityData:{state:S5,errors:[],error:"",value:"",initialValue:null},setValidityData:Dn,disabled:void 0,touched:ji.touched,setTouched:Dn,dirty:ji.dirty,setDirty:Dn,filled:ji.filled,setFilled:Dn,focused:ji.focused,setFocused:Dn,validate:()=>null,validationMode:"onSubmit",validationDebounceTime:0,shouldValidateOnChange:()=>!1,state:w5,markedDirtyRef:{current:!1},registerFieldControl:Dn,validation:{getValidationProps:(e=an)=>e,getInputValidationProps:(e=an)=>e,inputRef:{current:null},commit:async()=>{}}},E5=v.createContext(C5);function rc(e=!0){const n=v.useContext(E5);if(n.setValidityData===Dn&&!e)throw new Error(Nn(28));return n}const k5=v.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:Dn,validationMode:"onSubmit",submitAttemptedRef:{current:!1}});function dw(){return v.useContext(k5)}const R5=v.createContext({controlId:void 0,registerControlId:Dn,labelId:void 0,setLabelId:Dn,messageIds:[],setMessageIds:Dn,getDescriptionProps:e=>e});function $d(){return v.useContext(R5)}function N5(e,n,s,r=!0,i){const[c,d]=v.useState(),f=br(i?`${i}-label`:void 0),g=e??n??c;return Re(()=>{const m=e||n||!r?void 0:T5(s.current,f);c!==m&&d(m)}),g}function T5(e,n){const s=A5(e);if(s)return!s.id&&n&&(s.id=n),s.id||void 0}function A5(e){if(!e)return;const n=e.parentElement;if(n&&n.tagName==="LABEL")return n;const s=e.id;if(s){const i=e.nextElementSibling;if(i&&i.htmlFor===s)return i}const r=e.labels;return r&&r[0]}function Gd(e={}){const{id:n,implicit:s=!1,controlRef:r}=e,{controlId:i,registerControlId:c}=$d(),d=br(n),f=s?i:void 0,g=fa(()=>Symbol("labelable-control")),m=v.useRef(!1),h=v.useRef(n!=null),x=Ae(()=>{!m.current||c===Dn||(m.current=!1,c(g.current,void 0))});return Re(()=>{if(c===Dn)return;let y;if(s){const w=r?.current;ot(w)&&w.closest("label")!=null?y=n??null:y=f??d}else if(n!=null)h.current=!0,y=n;else if(h.current)y=d;else{x();return}if(y===void 0){x();return}m.current=!0,c(g.current,y)},[n,r,f,c,s,d,g,x]),v.useEffect(()=>x,[x]),i??d}function Gi({controlled:e,default:n,name:s,state:r="value"}){const{current:i}=v.useRef(e!==void 0),[c,d]=v.useState(n),f=i?e:c,g=v.useCallback(m=>{i||d(m)},[]);return[f,g]}function ox(e,n,s,r,i=!0){const{registerFieldControl:c}=rc(),d=v.useRef(null);d.current||(d.current=Symbol()),Re(()=>{const f=d.current;return!f||!i?void 0:(c(f,{controlRef:e,getValue:r,id:n,value:s}),()=>{c(f,void 0)})},[e,i,r,n,c,s])}const M5=v.forwardRef(function(n,s){const{render:r,className:i,id:c,name:d,value:f,disabled:g=!1,onValueChange:m,defaultValue:h,autoFocus:x=!1,style:y,...w}=n,{state:S,name:_,disabled:j,setTouched:E,setDirty:k,validityData:N,setFocused:R,setFilled:A,validationMode:M,validation:O}=rc(),U=j||g,I=_??d,B={...S,disabled:U},{labelId:L}=$d(),D=Gd({id:c});Re(()=>{const V=f!=null;O.inputRef.current?.value||V&&f!==""?A(!0):V&&f===""&&A(!1)},[O.inputRef,A,f]);const q=v.useRef(null);Re(()=>{x&&q.current===zn(xt(q.current))&&R(!0)},[x,R]);const[F]=Gi({controlled:f,default:h,name:"FieldControl",state:"value"}),Z=f!==void 0,H=Z?F:void 0,G=Ae(()=>O.inputRef.current?.value);return ox(O.inputRef,D,H,G),Lt("input",n,{ref:[s,q],state:B,props:[{id:D,disabled:U,name:I,ref:O.inputRef,"aria-labelledby":L,autoFocus:x,...Z?{value:H}:{defaultValue:h},onChange(V){const Y=V.currentTarget.value;m?.(Y,tt(Ns,V.nativeEvent)),k(Y!==N.initialValue),A(Y!=="")},onFocus(){R(!0)},onBlur(V){E(!0),R(!1),M==="onBlur"&&O.commit(V.currentTarget.value)},onKeyDown(V){V.currentTarget.tagName==="INPUT"&&V.key==="Enter"&&(E(!0),O.commit(V.currentTarget.value))}},O.getInputValidationProps(),w],stateAttributesMapping:rx})}),O5=v.forwardRef(function(n,s){return l.jsx(M5,{ref:s,...n})});function z5({className:e,type:n,...s}){return l.jsx(O5,{type:n,"data-slot":"input",className:Pt("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...s})}function D5({className:e,...n}){return l.jsx("textarea",{"data-slot":"textarea",className:Pt("flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...n})}function L5(e){return Lt(e.defaultTagName??"div",e,e)}const P5=sx("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function B5({className:e,variant:n="default",render:s,...r}){return L5({defaultTagName:"span",props:ka({className:Pt(P5({variant:n}),e)},r),render:s,state:{slot:"badge",variant:n}})}const fw=v.createContext(void 0);function I5(){const e=v.useContext(fw);if(e===void 0)throw new Error(Nn(63));return e}let M1=(function(e){return e.checked="data-checked",e.unchecked="data-unchecked",e.disabled="data-disabled",e.readonly="data-readonly",e.required="data-required",e.valid="data-valid",e.invalid="data-invalid",e.touched="data-touched",e.dirty="data-dirty",e.filled="data-filled",e.focused="data-focused",e})({});const mw={...rx,checked(e){return e?{[M1.checked]:""}:{[M1.unchecked]:""}}};function lx(e,n){const s=v.useRef(e),r=Ae(n);Re(()=>{s.current!==e&&r(s.current)},[e,r]),Re(()=>{s.current=e},[e])}const U5=v.forwardRef(function(n,s){const{checked:r,className:i,defaultChecked:c,"aria-labelledby":d,form:f,id:g,inputRef:m,name:h,nativeButton:x=!1,onCheckedChange:y,readOnly:w=!1,required:S=!1,disabled:_=!1,render:j,uncheckedValue:E,value:k,style:N,...R}=n,{clearErrors:A}=dw(),{state:M,setTouched:O,setDirty:U,validityData:I,setFilled:B,setFocused:L,shouldValidateOnChange:D,validationMode:q,disabled:F,name:Z,validation:H}=rc(),{labelId:G}=$d(),Q=F||_,V=Z??h,Y=v.useRef(null),P=Ts(Y,m,H.inputRef),K=v.useRef(null),$=br(),W=Gd({id:g,implicit:!1,controlRef:K}),ce=x?void 0:W,[ie,oe]=Gi({controlled:r,default:!!c,name:"Switch",state:"checked"});ox(K,$,ie),Re(()=>{Y.current&&B(Y.current.checked)},[Y,B]),lx(ie,()=>{A(V),U(ie!==I.initialValue),B(ie),D()?H.commit(ie):H.commit(ie,!0)});const{getButtonProps:ue,buttonRef:te}=ml({disabled:Q,native:x}),Ne=N5(d,G,Y,!x,ce),$e={id:x?W:$,role:"switch","aria-checked":ie,"aria-readonly":w||void 0,"aria-required":S||void 0,"aria-labelledby":Ne,onFocus(){Q||L(!0)},onBlur(){const Oe=Y.current;!Oe||Q||(O(!0),L(!1),q==="onBlur"&&H.commit(Oe.checked))},onClick(Oe){if(w||Q)return;Oe.preventDefault();const ze=Y.current;ze&&ze.dispatchEvent(new(Ft(ze)).PointerEvent("click",{bubbles:!0,shiftKey:Oe.shiftKey,ctrlKey:Oe.ctrlKey,altKey:Oe.altKey,metaKey:Oe.metaKey}))}},be=ka({checked:ie,disabled:Q,form:f,id:ce,name:V,required:S,style:V?Gj:Ah,tabIndex:-1,type:"checkbox","aria-hidden":!0,ref:P,onChange(Oe){if(Oe.nativeEvent.defaultPrevented)return;if(w){Oe.preventDefault();return}const ze=Oe.currentTarget.checked,xe=tt(Ns,Oe.nativeEvent);y?.(ze,xe),!xe.isCanceled&&oe(ze)},onFocus(){K.current?.focus()}},H.getInputValidationProps,k!==void 0?{value:k}:an),Se=v.useMemo(()=>({...M,checked:ie,disabled:Q,readOnly:w,required:S}),[M,ie,Q,w,S]),Ee=Lt("span",n,{state:Se,ref:[s,K,te],props:[$e,H.getValidationProps,R,ue],stateAttributesMapping:mw});return l.jsxs(fw.Provider,{value:Se,children:[Ee,!ie&&V&&E!==void 0&&l.jsx("input",{type:"hidden",form:f,name:V,value:E}),l.jsx("input",{...be,suppressHydrationWarning:!0})]})}),H5=v.forwardRef(function(n,s){const{render:r,className:i,style:c,...d}=n,f=I5();return Lt("span",n,{state:f,ref:s,stateAttributesMapping:mw,props:d})});function q5({className:e,size:n="default",...s}){return l.jsx(U5,{"data-slot":"switch","data-size":n,className:Pt("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",e),...s,children:l.jsx(H5,{"data-slot":"switch-thumb",className:"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"})})}function V5({className:e,...n}){return l.jsx(ph,{role:"status","aria-label":"Loading",className:Pt("size-4 animate-spin",e),...n})}const pw=v.createContext(!1),gw=v.createContext(void 0);function Jr(e){const n=v.useContext(gw);if(e===!1&&n===void 0)throw new Error(Nn(27));return n}const $5={...fl,...dl},hw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,forceRender:d=!1,...f}=n,{store:g}=Jr(),m=g.useState("open"),h=g.useState("nested"),x=g.useState("mounted"),y=g.useState("transitionStatus");return Lt("div",n,{state:{open:m,transitionStatus:y},ref:[g.context.backdropRef,s],stateAttributesMapping:$5,props:[{role:"presentation",hidden:!x,style:{userSelect:"none",WebkitUserSelect:"none"}},f],enabled:d||!h})}),xw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,disabled:d=!1,nativeButton:f=!0,...g}=n,{store:m}=Jr(),h=m.useState("open"),{getButtonProps:x,buttonRef:y}=ml({disabled:d,native:f}),w={disabled:d};function S(_){h&&m.setOpen(!1,tt(mT,_.nativeEvent))}return Lt("button",n,{state:w,ref:[s,y],props:[{onClick:S},g,x]})}),bw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,id:d,...f}=n,{store:g}=Jr(),m=br(d);return g.useSyncedValueWithCleanup("descriptionElementId",m),Lt("p",n,{ref:s,props:[{id:m},f]})});let G5=(function(e){return e.nestedDialogs="--nested-dialogs",e})({}),Y5=(function(e){return e[e.open=qr.open]="open",e[e.closed=qr.closed]="closed",e[e.startingStyle=qr.startingStyle]="startingStyle",e[e.endingStyle=qr.endingStyle]="endingStyle",e.nested="data-nested",e.nestedDialogOpen="data-nested-dialog-open",e})({});const vw=v.createContext(void 0);function F5(){const e=v.useContext(vw);if(e===void 0)throw new Error(Nn(26));return e}const Ai="ArrowUp",Ho="ArrowDown",hd="ArrowLeft",Mi="ArrowRight",Yd="Home",Fd="End",yw=new Set([hd,Mi]),X5=new Set([hd,Mi,Yd,Fd]),_w=new Set([Ai,Ho]),K5=new Set([Ai,Ho,Yd,Fd]),jw=new Set([...yw,..._w]),ix=new Set([...jw,Yd,Fd]),Q5="Shift",Z5="Control",J5="Alt",W5="Meta",e4=new Set([Q5,Z5,J5,W5]);function t4(e){return Ut(e)&&e.tagName==="INPUT"}function O1(e){return!!(t4(e)&&e.selectionStart!=null||Ut(e)&&e.tagName==="TEXTAREA")}function z1(e,n,s,r){if(!e||!n||!n.scrollTo)return;let i=e.scrollLeft,c=e.scrollTop;const d=e.clientWidth<e.scrollWidth,f=e.clientHeight<e.scrollHeight;if(d&&r!=="vertical"){const g=D1(e,n,"left"),m=Tu(e),h=Tu(n);s==="ltr"&&(g+n.offsetWidth+h.scrollMarginRight>e.scrollLeft+e.clientWidth-m.scrollPaddingRight?i=g+n.offsetWidth+h.scrollMarginRight-e.clientWidth+m.scrollPaddingRight:g-h.scrollMarginLeft<e.scrollLeft+m.scrollPaddingLeft&&(i=g-h.scrollMarginLeft-m.scrollPaddingLeft)),s==="rtl"&&(g-h.scrollMarginRight<e.scrollLeft+m.scrollPaddingLeft?i=g-h.scrollMarginLeft-m.scrollPaddingLeft:g+n.offsetWidth+h.scrollMarginRight>e.scrollLeft+e.clientWidth-m.scrollPaddingRight&&(i=g+n.offsetWidth+h.scrollMarginRight-e.clientWidth+m.scrollPaddingRight))}if(f&&r!=="horizontal"){const g=D1(e,n,"top"),m=Tu(e),h=Tu(n);g-h.scrollMarginTop<e.scrollTop+m.scrollPaddingTop?c=g-h.scrollMarginTop-m.scrollPaddingTop:g+n.offsetHeight+h.scrollMarginBottom>e.scrollTop+e.clientHeight-m.scrollPaddingBottom&&(c=g+n.offsetHeight+h.scrollMarginBottom-e.clientHeight+m.scrollPaddingBottom)}e.scrollTo({left:i,top:c,behavior:"auto"})}function D1(e,n,s){const r=s==="left"?"offsetLeft":"offsetTop";let i=0;for(;n.offsetParent&&(i+=n[r],n.offsetParent!==e);)n=n.offsetParent;return i}function Tu(e){const n=getComputedStyle(e);return{scrollMarginTop:parseFloat(n.scrollMarginTop)||0,scrollMarginRight:parseFloat(n.scrollMarginRight)||0,scrollMarginBottom:parseFloat(n.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(n.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(n.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(n.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(n.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(n.scrollPaddingLeft)||0}}const n4={...fl,...dl,nestedDialogOpen(e){return e?{[Y5.nestedDialogOpen]:""}:null}},Sw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,finalFocus:d,initialFocus:f,...g}=n,{store:m}=Jr(),h=m.useState("descriptionElementId"),x=m.useState("disablePointerDismissal"),y=m.useState("floatingRootContext"),w=m.useState("popupProps"),S=m.useState("modal"),_=m.useState("mounted"),j=m.useState("nested"),E=m.useState("nestedOpenDialogCount"),k=m.useState("open"),N=m.useState("openMethod"),R=m.useState("titleElementId"),A=m.useState("transitionStatus"),M=m.useState("role"),O=y.useState("floatingId"),U=g.id??O;F5(),xr({open:k,ref:m.context.popupRef,onComplete(){k&&m.context.onOpenChangeComplete?.(!0)}});function I(Z){return Z==="touch"?m.context.popupRef.current:!0}const B=f===void 0?I:f,L=E>0,D=m.useStateSetter("popupElement"),F=Lt("div",n,{state:{open:k,nested:j,transitionStatus:A,nestedDialogOpen:L},props:[w,{id:U,"aria-labelledby":R??void 0,"aria-describedby":h??void 0,role:M,...Id,hidden:!_,onKeyDown(Z){ix.has(Z.key)&&Z.stopPropagation()},style:{[G5.nestedDialogs]:E}},g],ref:[s,m.context.popupRef,D],stateAttributesMapping:n4});return l.jsx(xS,{context:y,openInteractionType:N,disabled:!_,closeOnFocusOut:!x,initialFocus:B,returnFocus:d,modal:S!==!1,restoreFocus:"popup",children:F})}),ww=v.forwardRef(function(n,s){const{cutout:r,...i}=n;let c;if(r){const d=r.getBoundingClientRect();c=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${d.left}px ${d.top}px,${d.left}px ${d.bottom}px,${d.right}px ${d.bottom}px,${d.right}px ${d.top}px,${d.left}px ${d.top}px)`}return l.jsx("div",{ref:s,role:"presentation","data-base-ui-inert":"",...i,style:{position:"fixed",inset:0,userSelect:"none",WebkitUserSelect:"none",clipPath:c}})}),Cw=v.forwardRef(function(n,s){const{keepMounted:r=!1,...i}=n,{store:c}=Jr(),d=c.useState("mounted"),f=c.useState("modal"),g=c.useState("open");return d||r?l.jsx(vw.Provider,{value:r,children:l.jsxs(hS,{ref:s,...i,children:[d&&f===!0&&l.jsx(ww,{ref:c.context.internalBackdropRef,inert:Kh(!g)}),n.children]})}):null});let L1={},P1={},B1="";function a4(e){if(typeof document>"u")return!1;const n=xt(e);return Ft(n).innerWidth-n.documentElement.clientWidth>0}function s4(e){if(!(typeof CSS<"u"&&CSS.supports&&CSS.supports("scrollbar-gutter","stable"))||typeof document>"u")return!1;const s=xt(e),r=s.documentElement,i=s.body,c=gr(r)?r:i,d=c.style.overflowY,f=r.style.scrollbarGutter;r.style.scrollbarGutter="stable",c.style.overflowY="scroll";const g=c.offsetWidth;c.style.overflowY="hidden";const m=c.offsetWidth;return c.style.overflowY=d,r.style.scrollbarGutter=f,g===m}function r4(e){const n=xt(e),s=n.documentElement,r=n.body,i=gr(s)?s:r,c={overflowY:i.style.overflowY,overflowX:i.style.overflowX};return Object.assign(i.style,{overflowY:"hidden",overflowX:"hidden"}),()=>{Object.assign(i.style,c)}}function o4(e){const n=xt(e),s=n.documentElement,r=n.body,i=Ft(s);let c=0,d=0,f=!1;const g=Ya.create();if(Sh&&(i.visualViewport?.scale??1)!==1)return()=>{};function m(){const w=i.getComputedStyle(s),S=i.getComputedStyle(r),E=(w.scrollbarGutter||"").includes("both-edges")?"stable both-edges":"stable";c=s.scrollTop,d=s.scrollLeft,L1={scrollbarGutter:s.style.scrollbarGutter,overflowY:s.style.overflowY,overflowX:s.style.overflowX},B1=s.style.scrollBehavior,P1={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};const k=s.scrollHeight>s.clientHeight,N=s.scrollWidth>s.clientWidth,R=w.overflowY==="scroll"||S.overflowY==="scroll",A=w.overflowX==="scroll"||S.overflowX==="scroll",M=Math.max(0,i.innerWidth-r.clientWidth),O=Math.max(0,i.innerHeight-r.clientHeight),U=parseFloat(S.marginTop)+parseFloat(S.marginBottom),I=parseFloat(S.marginLeft)+parseFloat(S.marginRight),B=gr(s)?s:r;if(f=s4(e),f){s.style.scrollbarGutter=E,B.style.overflowY="hidden",B.style.overflowX="hidden";return}Object.assign(s.style,{scrollbarGutter:E,overflowY:"hidden",overflowX:"hidden"}),(k||R)&&(s.style.overflowY="scroll"),(N||A)&&(s.style.overflowX="scroll"),Object.assign(r.style,{position:"relative",height:U||O?`calc(100dvh - ${U+O}px)`:"100dvh",width:I||M?`calc(100vw - ${I+M}px)`:"100vw",boxSizing:"border-box",overflow:"hidden",scrollBehavior:"unset"}),r.scrollTop=c,r.scrollLeft=d,s.setAttribute("data-base-ui-scroll-locked",""),s.style.scrollBehavior="unset"}function h(){Object.assign(s.style,L1),Object.assign(r.style,P1),f||(s.scrollTop=c,s.scrollLeft=d,s.removeAttribute("data-base-ui-scroll-locked"),s.style.scrollBehavior=B1)}function x(){h(),g.request(m)}m();const y=ct(i,"resize",x);return()=>{g.cancel(),h(),typeof i.removeEventListener=="function"&&y()}}class l4{lockCount=0;restore=null;timeoutLock=Ia.create();timeoutUnlock=Ia.create();acquire(n){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(n)),this.release}release=()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)};lock(n){if(this.lockCount===0||this.restore!==null)return;const r=xt(n).documentElement,i=Ft(r).getComputedStyle(r).overflowY;if(i==="hidden"||i==="clip"){this.restore=Dn;return}const c=Mj||!a4(n);this.restore=c?r4(n):o4(n)}}const i4=new l4;function Ew(e=!0,n=null){Re(()=>{if(e)return i4.acquire(n)},[e,n])}function c4(e){const{store:n,parentContext:s,actionsRef:r,isDrawer:i}=e,c=n.useState("open");wM(n,c),AS(n);const{forceUnmount:d}=MS(c,n),f=v.useCallback(()=>{n.setOpen(!1,tt(Uj))},[n]);return v.useImperativeHandle(r,()=>({unmount:d,close:f}),[d,f]),{parentContext:s,isDrawer:i}}function u4({store:e,dialogRoot:n}){const{parentContext:s,isDrawer:r}=n,i=e.useState("open"),c=e.useState("disablePointerDismissal"),d=e.useState("modal"),f=e.useState("popupElement"),g=e.useState("floatingRootContext"),[m,h]=v.useState(0),[x,y]=v.useState(0),w=m===0,S=Uh(g,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?"intentional":{mouse:d==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}},outsidePress(k){if(!e.context.outsidePressEnabledRef.current||"button"in k&&k.button!==0||"touches"in k&&k.touches.length!==1)return!1;const N=En(k);if(w&&!c){const R=N;return d&&(e.context.internalBackdropRef.current||e.context.backdropRef.current)?e.context.internalBackdropRef.current===R||e.context.backdropRef.current===R||Ye(R,f)&&!R?.hasAttribute("data-base-ui-portal"):!0}return!1},escapeKey:w});Ew(i&&d===!0,f),e.useContextCallback("onNestedDialogOpen",(k,N)=>{h(k),y(N)}),e.useContextCallback("onNestedDialogClose",()=>{h(0),y(0)}),v.useEffect(()=>(s?.onNestedDialogOpen&&i&&s.onNestedDialogOpen(m+1,x+(r?1:0)),s?.onNestedDialogClose&&!i&&s.onNestedDialogClose(),()=>{s?.onNestedDialogClose&&i&&s.onNestedDialogClose()}),[r,i,m,x,s]);const _=S.reference??an,j=S.trigger??an,E=v.useMemo(()=>ka(Id,S.floating),[S.floating]);return OS(e,{activeTriggerProps:_,inactiveTriggerProps:j,popupProps:E,nestedOpenDialogCount:m,nestedOpenDrawerCount:x}),null}const d4={...PS,modal:Te(e=>e.modal),nested:Te(e=>e.nested),nestedOpenDialogCount:Te(e=>e.nestedOpenDialogCount),nestedOpenDrawerCount:Te(e=>e.nestedOpenDrawerCount),disablePointerDismissal:Te(e=>e.disablePointerDismissal),openMethod:Te(e=>e.openMethod),descriptionElementId:Te(e=>e.descriptionElementId),titleElementId:Te(e=>e.titleElementId),viewportElement:Te(e=>e.viewportElement),role:Te(e=>e.role)};class cx extends qh{constructor(n,s,r=!1){const i=new Ud,c=f4(n);c.floatingRootContext=DS(i,s,r),super(c,{popupRef:v.createRef(),backdropRef:v.createRef(),internalBackdropRef:v.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:i,onOpenChange:void 0,onOpenChangeComplete:void 0},d4)}setOpen=(n,s)=>{if(s.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},!n&&s.trigger==null&&this.state.activeTriggerId!=null&&(s.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(n,s),s.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(n,s);const r={open:n};TS(r,n,s.trigger),this.update(r)};static useStore(n,s){return NS(n,(i,c)=>new cx(s,i,c),!0).store}}function f4(e={}){return{...zS(),modal:!0,disablePointerDismissal:!1,popupElement:null,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:"dialog",...e}}function m4(e,n="dialog"){const{children:s,open:r,defaultOpen:i=!1,onOpenChange:c,onOpenChangeComplete:d,disablePointerDismissal:f=!1,modal:g=!0,actionsRef:m,handle:h,triggerId:x,defaultTriggerId:y=null}=e,w=n==="drawer",S=n==="alert-dialog",_=S?!0:g,j=S||f,E=S?"alertdialog":"dialog",k=Jr(!0),R={modal:_,disablePointerDismissal:j,nested:!!k,role:E},A=cx.useStore(h?.store,{open:i,openProp:r,activeTriggerId:y,triggerIdProp:x,...R});_h(()=>{const D=r===void 0&&A.state.open===!1&&i===!0?{open:!0,activeTriggerId:y}:null;S?A.update(D?{...R,...D}:R):D&&A.update(D)}),A.useControlledProp("openProp",r),A.useControlledProp("triggerIdProp",x),A.useSyncedValues(R),A.useContextCallback("onOpenChange",c),A.useContextCallback("onOpenChangeComplete",d);const M=A.useState("open"),O=A.useState("mounted"),U=A.useState("payload"),I=c4({store:A,actionsRef:m,parentContext:k?.store.context,isDrawer:w}),B=M||O,L=v.useMemo(()=>({store:A}),[A]);return l.jsx(pw.Provider,{value:!1,children:l.jsxs(gw.Provider,{value:L,children:[B&&l.jsx(u4,{store:A,dialogRoot:I}),typeof s=="function"?s({payload:U}):s]})})}function kw(e){const n=v.useContext(pw)?"drawer":"dialog";return m4(e,n)}const Rw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,id:d,...f}=n,{store:g}=Jr(),m=br(d);return g.useSyncedValueWithCleanup("titleElementId",m),Lt("h2",n,{ref:s,props:[{id:m},f]})});function p4(e){const n=v.useRef(""),s=v.useCallback(i=>{i.defaultPrevented||(n.current=i.pointerType,e(i,i.pointerType))},[e]);return{onClick:v.useCallback(i=>{if(i.detail===0){e(i,"keyboard");return}"pointerType"in i?e(i,i.pointerType):e(i,n.current),n.current=""},[e]),onPointerDown:s}}function g4(e,n){const s=Ae((c,d)=>{(typeof e=="function"?e():e)||n(d||(Mj?"touch":""))}),{onClick:r,onPointerDown:i}=p4(s);return v.useMemo(()=>({onClick:r,onPointerDown:i}),[r,i])}function h4(e){const[n,s]=v.useState(null),r=g4(e,s);return lx(e,i=>{i&&!e&&s(null)}),v.useMemo(()=>({openMethod:n,triggerProps:r}),[n,r])}function x4({...e}){return l.jsx(kw,{"data-slot":"dialog",...e})}function b4({...e}){return l.jsx(Cw,{"data-slot":"dialog-portal",...e})}function v4({className:e,...n}){return l.jsx(hw,{"data-slot":"dialog-overlay",className:Pt("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",e),...n})}function y4({className:e,children:n,showCloseButton:s=!0,...r}){return l.jsxs(b4,{children:[l.jsx(v4,{}),l.jsxs(Sw,{"data-slot":"dialog-content",className:Pt("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...r,children:[n,s&&l.jsxs(xw,{"data-slot":"dialog-close",render:l.jsx(Wo,{variant:"ghost",className:"absolute top-2 right-2",size:"icon-sm"}),children:[l.jsx(Cd,{}),l.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function _4({className:e,...n}){return l.jsx("div",{"data-slot":"dialog-header",className:Pt("flex flex-col gap-2",e),...n})}function j4({className:e,...n}){return l.jsx(Rw,{"data-slot":"dialog-title",className:Pt("font-heading text-base leading-none font-medium",e),...n})}function S4({className:e,...n}){return l.jsx(bw,{"data-slot":"dialog-description",className:Pt("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",e),...n})}const w4={primary:"default",secondary:"outline",ghost:"ghost",destructive:"destructive"},C4={sm:"sm",md:"default"};function he({variant:e="secondary",size:n="md",loading:s,className:r,children:i,disabled:c,type:d="button",...f}){return l.jsxs(Wo,{type:d,variant:w4[e],size:C4[n],disabled:c||s,className:r,...f,children:[s?l.jsx(Yi,{size:14}):null,i]})}function Ce(e){return l.jsx(z5,{...e})}function Qt(e){return l.jsx(D5,{...e})}function E4(e){return l.jsx("select",{...e,className:Ie("h-8 w-full rounded-lg border border-input bg-transparent px-2.5 text-sm outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50",e.className)})}function fe({label:e,hint:n,badge:s,children:r}){return l.jsxs("label",{className:"block space-y-1",children:[l.jsxs("span",{className:"flex items-center gap-1.5 text-xs font-medium text-muted-foreground",children:[e,s&&l.jsx("span",{className:"rounded bg-muted px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-muted-foreground",children:s})]}),r,n&&l.jsx("span",{className:"block text-[11px] text-muted-foreground/70",children:n})]})}function sn({checked:e,onChange:n,label:s,disabled:r}){return l.jsxs("label",{className:Ie("inline-flex items-center gap-2",r&&"opacity-50"),children:[l.jsx(q5,{checked:e,onCheckedChange:n,disabled:r}),s&&l.jsx("span",{className:"text-sm",children:s})]})}function Ue({children:e,tone:n="muted",className:s}){const r=n==="danger"?"destructive":n==="muted"?"secondary":"outline",i={muted:"",danger:"",success:"text-emerald-400 border-emerald-500/30",warning:"text-amber-400 border-amber-500/30",info:"text-sky-400 border-sky-500/30"};return l.jsx(B5,{variant:r,className:Ie("rounded-md",i[n],s),children:e})}function ma({open:e,onClose:n,title:s,description:r,children:i,footer:c,size:d="md"}){const f={sm:"sm:max-w-md",md:"sm:max-w-lg",lg:"sm:max-w-2xl",xl:"sm:max-w-4xl"};return l.jsx(x4,{open:e,onOpenChange:g=>{g||n()},children:l.jsxs(y4,{className:Ie("flex max-h-[88vh] w-full flex-col gap-0 p-0",f[d]),children:[(s||r)&&l.jsxs(_4,{className:"shrink-0 border-b border-border px-5 py-4 pr-12",children:[s&&l.jsx(j4,{children:s}),r&&l.jsx(S4,{children:r})]}),l.jsx("div",{className:"min-h-0 flex-1 overflow-auto px-5 py-4",children:i}),c&&l.jsx("div",{className:"flex shrink-0 items-center justify-end gap-2 border-t border-border px-5 py-4",children:c})]})})}function Yi({size:e=14}){return l.jsx(V5,{style:{width:e,height:e}})}function lt({children:e}){return l.jsx("div",{className:"rounded-lg border border-dashed border-border bg-muted/20 px-4 py-6 text-center text-sm text-muted-foreground",children:e})}function Je({label:e="Cargando…"}){return l.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[l.jsx(Yi,{})," ",e]})}const Nw=v.createContext(null);let k4=1;function R4({children:e}){const[n,s]=v.useState([]),r=v.useCallback((c,d)=>{const f=k4++;s(g=>[...g,{id:f,kind:c,message:d}]),setTimeout(()=>{s(g=>g.filter(m=>m.id!==f))},4500)},[]),i=v.useMemo(()=>({show:r,success:c=>r("success",c),error:c=>r("error",c),info:c=>r("info",c)}),[r]);return v.useEffect(()=>(window.__apxToast=i,()=>{delete window.__apxToast}),[i]),l.jsxs(Nw.Provider,{value:i,children:[e,l.jsx("div",{className:"pointer-events-none fixed bottom-4 right-4 z-[100] flex w-80 max-w-[calc(100vw-2rem)] flex-col gap-2",children:n.map(c=>l.jsx("div",{className:Ie("pointer-events-auto overflow-hidden rounded-lg border bg-card px-3 py-2 text-sm shadow-lg",c.kind==="success"&&"border-emerald-500/40",c.kind==="error"&&"border-destructive/60",c.kind==="info"&&"border-border"),children:l.jsxs("div",{className:"flex items-start gap-2",children:[l.jsx("span",{className:Ie("mt-1 size-2 shrink-0 rounded-full",c.kind==="success"&&"bg-emerald-500",c.kind==="error"&&"bg-destructive",c.kind==="info"&&"bg-sky-500")}),l.jsx("span",{className:"flex-1 break-words",children:c.message})]})},c.id))})]})}function rt(){const e=v.useContext(Nw);if(!e)throw new Error("useToast must be used inside <ToastProvider>");return e}function Tw(){const{data:e,error:n,isLoading:s}=Qe("/health",()=>J3.get(),{refreshInterval:Ed.health});return{health:e,error:n,isLoading:s,isUp:!n&&!!e}}function N4(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/engines",()=>pd.list());return{engines:e?.engines||[],error:n,isLoading:s,mutate:r}}function T4(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/telegram/status",()=>kn.status(),{refreshInterval:Ed.telegramStatus});return{status:e,error:n,isLoading:s,mutate:r}}function ux(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/telegram/channels",()=>kn.channels.list());return{channels:e?.channels||[],error:n,isLoading:s,mutate:r}}function dx(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/telegram/contacts",()=>kn.contacts.list());return{contacts:e?.contacts||[],roles:e?.roles||{},channelOwners:e?.channel_owners||[],error:n,isLoading:s,mutate:r}}function za(e){return typeof e=="string"&&e.startsWith("*** set ***")}function fr(e,n="(no seteada)"){return za(e)?e:n}function el(e){if(typeof e!="string")return null;const n=e.match(/\(\.\.\.([^)]+)\)/);return n?n[1]:null}function Aw({channel:e,onClose:n,onSaved:s}){const r=rt(),[i,c]=v.useState(!1),[d,f]=v.useState({name:""});v.useEffect(()=>{f(e?{...e,bot_token:""}:{name:""})},[e?.name]);const g=async()=>{if(!d.name?.trim()){r.error("name requerido");return}c(!0);try{e&&e.name!==""&&e?.name===d.name?await kn.channels.patch(e.name,d):await kn.channels.upsert(d),r.success("Canal guardado."),s()}catch(m){r.error(m.message)}finally{c(!1)}};return l.jsx(ma,{open:!!e,onClose:n,title:e?.name?`Editar canal: ${e.name}`:"Nuevo canal de Telegram",description:"POST /telegram/channels (upsert) — PATCH /telegram/channels/:name (parcial).",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:i,children:C("common.cancel")}),l.jsx(he,{variant:"primary",onClick:g,loading:i,children:C("common.save")})]}),children:l.jsxs("div",{className:"space-y-3",children:[l.jsx(fe,{label:"name (slug interno)",children:l.jsx(Ce,{value:d.name,onChange:m=>f({...d,name:m.target.value}),disabled:!!e?.name})}),l.jsx(fe,{label:"bot_token",hint:e?.bot_token?fr(e.bot_token):"Token del BotFather. Se guarda en ~/.apx/config.json.",children:l.jsx(Ce,{type:"password",value:d.bot_token||"",onChange:m=>f({...d,bot_token:m.target.value}),placeholder:e?.bot_token?fr(e.bot_token):""})}),l.jsx(fe,{label:"chat_id",children:l.jsx(Ce,{value:d.chat_id||"",onChange:m=>f({...d,chat_id:m.target.value})})}),l.jsx(fe,{label:"project",hint:"Slug o id del proyecto al que pinear este canal (opcional).",children:l.jsx(Ce,{value:d.project||"",onChange:m=>f({...d,project:m.target.value})})}),l.jsx(fe,{label:"route_to_agent",hint:"Agente que contesta; vacío = super-agent APX.",children:l.jsx(Ce,{value:d.route_to_agent||"",onChange:m=>f({...d,route_to_agent:m.target.value})})}),l.jsx(fe,{label:"owner_user_id",hint:"user_id de Telegram del dueño de este canal. Override del rol global a 'owner' acá. Si lo dejás vacío, el primer mensaje privado lo reclama.",children:l.jsx(Ce,{value:d.owner_user_id!=null?String(d.owner_user_id):"",onChange:m=>{const h=m.target.value.trim();f({...d,owner_user_id:h===""?void 0:/^\d+$/.test(h)?Number(h):h})},placeholder:"889721252"})}),l.jsx(sn,{checked:!!d.respond_with_engine,onChange:m=>f({...d,respond_with_engine:m}),label:"Responder con engine (no echo)"})]})})}function Mw({channel:e,onClose:n}){const s=rt(),[r,i]=v.useState(C("admin.telegram_default_message")),[c,d]=v.useState(!1),f=async()=>{if(!(!r.trim()||!e)){d(!0);try{await kn.send({text:r,channel:e.name}),s.success("Mensaje enviado."),n()}catch(g){s.error(g.message)}finally{d(!1)}}};return l.jsx(ma,{open:!!e,onClose:n,title:e?`${C("admin.telegram_send_test_title")} ${e.name}`:"",description:e?`chat_id: ${e.chat_id||"—"}`:"",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:c,children:C("common.cancel")}),l.jsx(he,{variant:"primary",onClick:f,loading:c,children:"Enviar"})]}),children:l.jsx(fe,{label:"Texto",children:l.jsx(Qt,{rows:4,value:r,onChange:g=>i(g.target.value)})})})}function Ow({bare:e=!1}){const n=rt(),{contacts:s,roles:r,channelOwners:i,isLoading:c,mutate:d}=dx(),f=new Set(i.filter(y=>y.owner_user_id!=null).map(y=>String(y.owner_user_id))),g=Array.from(new Set(["owner","guest",...Object.keys(r)])),m=async(y,w)=>{try{await kn.contacts.patch(y.user_id,{role:w}),n.success(`${y.name||y.user_id} → ${w}`),d()}catch(S){n.error(S.message)}},h=async y=>{if(confirm(C("telegram_contacts.delete_confirm",{name:y.name||String(y.user_id)})))try{await kn.contacts.remove(y.user_id),n.success(C("telegram_contacts.removed")),d()}catch(w){n.error(w.message)}},x=l.jsxs(l.Fragment,{children:[c&&l.jsx(Je,{}),!c&&s.length===0&&l.jsx(lt,{children:C("telegram_contacts.empty")}),s.length>0&&l.jsx("ul",{className:"space-y-2 text-sm",children:s.map(y=>{const w=f.has(String(y.user_id)),S=w?"owner":y.role||"guest";return l.jsxs("li",{className:"rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx("span",{className:"font-medium",children:y.name||"—"}),y.username&&l.jsxs("span",{className:"ml-2 text-xs text-muted-fg",children:["@",y.username]}),w&&l.jsx(Ue,{tone:"success",children:C("telegram_contacts.owner_badge")})]}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(E4,{value:S,disabled:w,onChange:_=>m(y,_.target.value),title:C(w?"telegram_contacts.owner_hint":"telegram_contacts.assign_role"),children:g.map(_=>l.jsx("option",{value:_,children:_},_))}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>h(y),children:C("common.delete")})]})]}),l.jsxs("div",{className:"mt-1 grid grid-cols-3 gap-2 text-xs text-muted-fg",children:[l.jsxs("span",{children:["user_id: ",String(y.user_id)]}),l.jsxs("span",{children:[C("telegram_contacts.last_seen")," ",y.last_seen?y.last_seen.slice(0,10):"—"]}),l.jsx("span",{children:A4(r[S])})]})]},String(y.user_id))})})]});return e?x:l.jsx(He,{title:C("telegram_contacts.title"),description:C("telegram_contacts.desc"),children:x})}function A4(e){return!e||e.tools===void 0?"":e.tools==="*"?C("telegram_contacts.tools_all"):Array.isArray(e.tools)?e.tools.length?`${C("telegram_contacts.tools_label")} ${e.tools.join(", ")}`:C("telegram_contacts.tools_none"):""}function M4(){const e=Ua(),n=rt(),{health:s,isUp:r}=Tw(),{projects:i,isLoading:c,mutate:d}=sc(),{engines:f,isLoading:g}=N4(),{status:m,mutate:h}=T4(),{channels:x,isLoading:y,mutate:w}=ux(),[S,_]=v.useState(null),[j,E]=v.useState(null),k=async()=>{try{await Zo.reload(),n.success(C("admin.reload_success"))}catch(M){n.error(M.message)}},N=async()=>{try{m?.enabled?(await kn.stop(),n.info(C("admin.telegram_polling_stopped"))):(await kn.start(),n.success(C("admin.telegram_polling_started"))),h()}catch(M){n.error(M.message)}},R=async M=>{if(confirm(C("telegram_channels.delete_confirm",{name:M})))try{await kn.channels.remove(M),n.success(C("admin.telegram_channel_removed")),w()}catch(O){n.error(O.message)}},A=async(M,O)=>{if(confirm(C("admin.unregister_confirm",{label:O})))try{await Qn.remove(M),n.success(C("project.unregistered")),d()}catch(U){n.error(U.message)}};return l.jsxs("div",{className:"mx-auto max-w-5xl space-y-6 p-6","data-testid":"screen-admin",children:[l.jsxs("header",{className:"flex items-end justify-between",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:C("admin.title")}),l.jsx("p",{className:"text-sm text-muted-fg",children:C("admin.subtitle")})]}),l.jsxs("div",{className:"flex gap-2",children:[l.jsxs(he,{size:"sm",onClick:k,title:C("daemon.reload_hint"),children:[C("common.reload")," config"]}),l.jsxs(he,{size:"sm",variant:"primary",onClick:()=>e("/?action=add-project"),children:[l.jsx(Rn,{size:14})," ",C("nav.project")]})]})]}),l.jsx(He,{title:C("daemon.version"),children:l.jsxs("div",{className:"grid grid-cols-3 gap-3 text-sm",children:[l.jsx(qp,{label:C("daemon.version"),value:s?.version||"—"}),l.jsx(qp,{label:C("daemon.uptime"),value:s?`${s.uptime_s}s`:"—"}),l.jsx(qp,{label:C("daemon.status"),value:C(r?"daemon.running":"daemon.down"),ok:r})]})}),l.jsxs(He,{title:C("admin.engines_title"),description:C("admin.engines_subtitle"),children:[g&&l.jsx(Je,{}),l.jsx("div",{className:"flex flex-wrap gap-1.5",children:f.map(M=>l.jsx(Ue,{tone:"info",children:M},M))})]}),l.jsxs(He,{title:C("admin.telegram_title"),description:C("admin.telegram_subtitle"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(sn,{checked:!!m?.enabled,onChange:N,label:m?.enabled?C("admin.telegram_polling_on"):C("admin.telegram_polling_off")}),l.jsxs(he,{size:"sm",onClick:()=>_({name:""}),children:[l.jsx(Rn,{size:14})," ",C("admin.telegram_add_channel")]})]}),children:[y&&l.jsx(Je,{}),x.length===0&&l.jsx(lt,{children:C("common.none_yet")}),l.jsx("ul",{className:"space-y-2 text-sm",children:x.map(M=>l.jsxs("li",{className:"rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsx("span",{className:"font-medium",children:M.name}),l.jsxs("div",{className:"flex items-center gap-2",children:[M.project&&l.jsxs(Ue,{tone:"success",children:["project = ",M.project]}),l.jsxs(he,{size:"sm",variant:"ghost",onClick:()=>E(M),children:[l.jsx(Za,{size:13})," ",C("admin.telegram_send_test")]}),l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>_(M),children:C("common.edit")}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>R(M.name),children:C("common.delete")})]})]}),l.jsxs("div",{className:"mt-1 grid grid-cols-3 gap-2 text-xs text-muted-fg",children:[l.jsxs("span",{children:["chat_id: ",M.chat_id||"—"]}),l.jsxs("span",{children:["route_to_agent: ",M.route_to_agent||"default APX"]}),l.jsxs("span",{children:["engine: ",M.respond_with_engine?C("admin.engine_badge"):C("admin.engine_badge_no")]})]})]},M.name))})]}),l.jsx(Ow,{}),l.jsxs(He,{title:C("admin.projects_title"),description:C("admin.projects_subtitle"),children:[c&&l.jsx(Je,{}),l.jsx("ul",{className:"divide-y divide-border",children:i.map(M=>l.jsxs("li",{className:"flex items-center gap-3 py-2",children:[l.jsxs("span",{className:"w-10 font-mono text-xs text-muted-fg",children:["#",M.id]}),l.jsxs("button",{type:"button",className:"flex-1 text-left hover:underline",onClick:()=>e(`/p/${M.id}`),children:[l.jsx("span",{className:"font-medium",children:M.name||M.path.split("/").pop()}),l.jsx("span",{className:"ml-2 text-xs text-muted-fg",children:M.path})]}),l.jsxs(Ue,{children:[M.agents??0," ",C("admin.agents_badge")]}),Number(M.id)!==0&&l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>A(String(M.id),M.name||M.path),children:C("admin.unregister")})]},M.id))})]}),l.jsx(Aw,{channel:S,onClose:()=>_(null),onSaved:()=>{_(null),w()}}),l.jsx(Mw,{channel:j,onClose:()=>E(null)})]})}function qp({label:e,value:n,ok:s}){return l.jsxs("div",{className:"rounded-md border border-border bg-muted/30 p-3",children:[l.jsx("div",{className:"text-xs uppercase tracking-wide text-muted-fg",children:e}),l.jsxs("div",{className:"mt-1 flex items-center gap-2 text-base font-medium",children:[s!==void 0&&l.jsx(Vd,{ok:s}),l.jsx("span",{children:n})]})]})}function zw(e){const[n,s]=v.useState(!1);return v.useEffect(()=>{try{s(localStorage.getItem(e)==="true")}catch{}},[e]),{collapsed:n,toggle:()=>s(i=>{const c=!i;try{localStorage.setItem(e,String(c))}catch{}return c})}}function O4({collapsed:e,onToggle:n}){return l.jsx(Ko,{content:e?"Expandir menú":"Colapsar menú",side:"bottom",children:l.jsx("button",{type:"button",onClick:n,"aria-label":e?"Expandir menú":"Colapsar menú",className:"flex size-7 shrink-0 items-center justify-center rounded-md text-muted-fg transition-colors hover:bg-accent hover:text-foreground",children:l.jsx(eN,{className:Ie("size-4 transition-transform",e&&"rotate-180")})})})}function z4({sections:e,active:n,onChange:s,collapsed:r=!1}){return l.jsx("nav",{className:Ie("hidden md:flex shrink-0 flex-col gap-1 py-3 transition-all",r?"w-12 items-center px-1":"w-52 px-2"),children:e.map((i,c)=>l.jsxs("div",{className:Ie("w-full",c>0&&"mt-2"),children:[!r&&i.title&&l.jsx("p",{className:"mb-1 px-2 text-[9px] font-semibold uppercase tracking-wider text-muted-fg/70",children:i.title}),l.jsx("div",{className:"space-y-0.5",children:i.items.map(({key:d,label:f,icon:g,badge:m})=>{const h=n===d,x=l.jsxs("button",{type:"button",onClick:()=>s(d),"data-testid":`tabnav-${d||"index"}`,className:Ie("flex cursor-pointer items-center rounded-lg transition-colors",r?"size-9 justify-center":"w-full gap-2 px-2.5 py-1.5",h?"bg-accent text-accent-fg":"text-muted-fg hover:bg-accent/60 hover:text-foreground"),children:[l.jsx(g,{className:"size-4 shrink-0"}),!r&&l.jsxs(l.Fragment,{children:[l.jsx("span",{className:"flex-1 truncate text-left text-xs",children:f}),m!==void 0&&l.jsx("span",{className:"rounded-full bg-muted px-1.5 text-[9px] text-muted-fg",children:m})]})]});return r?l.jsx(Ko,{content:f,side:"right",children:x},d):l.jsx(v.Fragment,{children:x},d)})})]},c))})}function Dw({sections:e,active:n,onChange:s,collapsed:r,onToggleCollapse:i,actions:c,contentClassName:d,testId:f,children:g}){return l.jsxs("div",{className:"flex h-full",children:[l.jsx(z4,{sections:e,active:n,onChange:s,collapsed:r}),l.jsxs("div",{className:"flex min-w-0 flex-1 flex-col overflow-y-auto",children:[l.jsxs("div",{className:"flex items-center justify-between px-6 pt-3",children:[l.jsx(O4,{collapsed:r,onToggle:i}),c?l.jsx("div",{className:"flex gap-2",children:c}):null]}),l.jsx("div",{className:Ie(d),"data-testid":f,children:g})]})]})}function I1({pid:e}){const n=Qe(`/projects/${e}/tasks?state=open`,()=>lr.list(e)),s=Qe(`/projects/${e}/routines`,()=>or.list(e)),r=Qe(`/projects/${e}/agents`,()=>Jt.list(e)),i=Qe(`/projects/${e}/mcps`,()=>Ti.list(e));return l.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-3",children:[l.jsx(fi,{title:C("project.overview.tasks_open"),value:n.data?.length??"…",href:`/p/${e}/tasks`,icon:Bi}),l.jsx(fi,{title:C("project.overview.routines"),value:s.data?.length??"…",href:`/p/${e}/routines`,icon:Go}),l.jsx(fi,{title:C("project.overview.agents"),value:r.data?.length??"…",href:`/p/${e}/agents`,icon:vn}),l.jsx(fi,{title:C("project.overview.mcps"),value:i.data?.length??"…",href:`/p/${e}/mcps`,icon:Cg}),l.jsx(fi,{title:C("project.overview.chat"),value:C("project.overview.chat_value"),href:`/p/${e}/chat`,icon:ki})]})}function fi({title:e,value:n,href:s,icon:r}){return l.jsxs(nj,{to:s,className:"flex items-center gap-3 rounded-xl border border-border bg-card p-4 hover:bg-accent/40",children:[l.jsx("span",{className:"grid size-10 place-items-center rounded-lg bg-muted text-muted-fg",children:l.jsx(r,{size:20})}),l.jsxs("div",{children:[l.jsx("div",{className:"text-xs uppercase tracking-wide text-muted-fg",children:e}),l.jsx("div",{className:"text-2xl font-semibold",children:n})]})]})}function D4(){const e=Ua(),{projects:n,isLoading:s}=sc();return l.jsxs(He,{title:C("base.workspaces_title"),description:C("base.workspaces_desc"),action:l.jsxs(he,{size:"sm",variant:"primary",onClick:()=>e("/p/0/workspaces?action=add-project"),children:[l.jsx(Rn,{size:14})," ",C("base.workspaces_new")]}),children:[s&&l.jsx(Je,{}),!s&&n.length===0&&l.jsx(lt,{children:C("base.workspaces_empty")}),l.jsx("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3",children:n.map(r=>{const i=String(r.id)==="0",c=i?C("base.title"):r.name||r.path.split("/").pop()||String(r.id);return l.jsxs("button",{type:"button",onClick:()=>e(`/p/${r.id}`),className:"flex cursor-pointer flex-col gap-2 rounded-xl border border-border bg-card p-4 text-left transition-colors hover:border-muted-fg/50",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(mj,{className:"size-4 text-muted-fg"}),l.jsx("span",{className:"truncate text-sm font-semibold",children:c}),l.jsx(Ue,{tone:i?"success":"info",children:i?C("base.title"):iw(r.kind)})]}),l.jsx("p",{className:"truncate font-mono text-[10px] text-muted-fg",children:r.path})]},r.id)})})]})}const Lw=v.createContext(null),Pw=v.createContext(null);function Wa(){const e=v.useContext(Lw);if(e===null)throw new Error(Nn(60));return e}function Bw(){const e=v.useContext(Pw);if(e===null)throw new Error(Nn(61));return e}const L4=(e,n)=>Object.is(e,n);function tl(e,n,s){return e==null||n==null?Object.is(e,n):s(e,n)}function P4(e,n,s){return!e||e.length===0?!1:e.some(r=>r===void 0?!1:tl(n,r,s))}function Oi(e,n,s){return!e||e.length===0?-1:e.findIndex(r=>r===void 0?!1:tl(r,n,s))}function B4(e,n,s){return e.filter(r=>!tl(n,r,s))}function Kg(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Iw(e){return e!=null&&e.length>0&&typeof e[0]=="object"&&e[0]!=null&&"items"in e[0]}function I4(e){if(!Array.isArray(e))return e!=null&&"null"in e;const n=e;if(Iw(n)){for(const s of n)for(const r of s.items)if(r&&r.value==null&&r.label!=null)return!0;return!1}for(const s of n)if(s&&s.value==null&&s.label!=null)return!0;return!1}function Uw(e,n){if(n&&e!=null)return n(e)??"";if(e&&typeof e=="object"){if("label"in e&&e.label!=null)return String(e.label);if("value"in e)return String(e.value)}return Kg(e)}function Uo(e,n){return n&&e!=null?n(e)??"":e&&typeof e=="object"&&"value"in e&&"label"in e?Kg(e.value):Kg(e)}function Hw(e,n,s){function r(){return Uw(e,s)}if(s&&e!=null)return s(e);if(e&&typeof e=="object"&&"label"in e&&e.label!=null)return e.label;if(n&&!Array.isArray(n))return n[e]??r();if(Array.isArray(n)){const i=n,c=Iw(i)?i.flatMap(d=>d.items):i;if(e==null||typeof e!="object"){const d=c.find(f=>f.value===e);return d&&d.label!=null?d.label:r()}if("value"in e){const d=c.find(f=>f&&f.value===e.value);if(d&&d.label!=null)return d.label}}return r()}function U4(e,n,s){return e.reduce((r,i,c)=>(c>0&&r.push(", "),r.push(l.jsx(v.Fragment,{children:Hw(i,n,s)},c)),r),[])}const Fe={id:Te(e=>e.id),labelId:Te(e=>e.labelId),modal:Te(e=>e.modal),multiple:Te(e=>e.multiple),items:Te(e=>e.items),itemToStringLabel:Te(e=>e.itemToStringLabel),itemToStringValue:Te(e=>e.itemToStringValue),isItemEqualToValue:Te(e=>e.isItemEqualToValue),value:Te(e=>e.value),hasSelectedValue:Te(e=>{const{value:n,multiple:s,itemToStringValue:r}=e;return n==null?!1:s&&Array.isArray(n)?n.length>0:Uo(n,r)!==""}),hasNullItemLabel:Te((e,n)=>n?I4(e.items):!1),open:Te(e=>e.open),mounted:Te(e=>e.mounted),forceMount:Te(e=>e.forceMount),transitionStatus:Te(e=>e.transitionStatus),openMethod:Te(e=>e.openMethod),activeIndex:Te(e=>e.activeIndex),selectedIndex:Te(e=>e.selectedIndex),isActive:Te((e,n)=>e.activeIndex===n),isSelected:Te((e,n,s)=>{const r=e.isItemEqualToValue,i=e.value;return e.multiple?Array.isArray(i)&&i.some(c=>tl(s,c,r)):e.selectedIndex===n&&e.selectedIndex!==null?!0:tl(s,i,r)}),isSelectedByFocus:Te((e,n)=>e.selectedIndex===n),popupProps:Te(e=>e.popupProps),triggerProps:Te(e=>e.triggerProps),triggerElement:Te(e=>e.triggerElement),positionerElement:Te(e=>e.positionerElement),listElement:Te(e=>e.listElement),popupSide:Te(e=>e.popupSide),scrollUpArrowVisible:Te(e=>e.scrollUpArrowVisible),scrollDownArrowVisible:Te(e=>e.scrollDownArrowVisible),hasScrollArrows:Te(e=>e.hasScrollArrows)};function Si(e,n=Number.MIN_SAFE_INTEGER,s=Number.MAX_SAFE_INTEGER){return Math.max(n,Math.min(e,s))}const Oa=1;function fx(e,n){return Math.max(0,e-n)}function xd(e,n){if(n<=0)return 0;const s=Si(e,0,n),r=s,i=n-s,c=r<=Oa,d=i<=Oa;return c&&d?r<=i?0:n:c?0:d?n:s}function H4(e){const{id:n,value:s,defaultValue:r=null,onValueChange:i,open:c,defaultOpen:d=!1,onOpenChange:f,name:g,form:m,autoComplete:h,disabled:x=!1,readOnly:y=!1,required:w=!1,modal:S=!0,actionsRef:_,inputRef:j,onOpenChangeComplete:E,items:k,multiple:N=!1,itemToStringLabel:R,itemToStringValue:A,isItemEqualToValue:M=L4,highlightItemOnHover:O=!0,children:U}=e,{clearErrors:I}=dw(),{setDirty:B,setTouched:L,setFocused:D,shouldValidateOnChange:q,validityData:F,setFilled:Z,name:H,disabled:G,validation:Q,validationMode:V}=rc(),Y=Gd({id:n}),P=G||x,K=H??g,[$,W]=Gi({controlled:s,default:N?r??Ui:r,name:"Select",state:"value"}),[ce,ie]=Gi({controlled:c,default:d,name:"Select",state:"open"}),oe=v.useRef([]),ue=v.useRef([]),te=v.useRef(null),Ne=v.useRef(null),$e=v.useRef(0),be=v.useRef(null),Se=v.useRef([]),Ee=v.useRef(!1),Oe=v.useRef(!1),ze=v.useRef(null),xe=v.useRef(null),ke=v.useRef({allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0}),_e=v.useRef(!1),{mounted:De,setMounted:Ge,transitionStatus:qe}=tc(ce),{openMethod:Me,triggerProps:ve}=h4(ce),re=fa(()=>new RS({id:Y,labelId:void 0,modal:S,multiple:N,itemToStringLabel:R,itemToStringValue:A,isItemEqualToValue:M,value:$,open:ce,mounted:De,transitionStatus:qe,items:k,forceMount:!1,openMethod:null,activeIndex:null,selectedIndex:null,popupProps:{},triggerProps:{},triggerElement:null,positionerElement:null,listElement:null,popupSide:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1,hasScrollArrows:!1})).current,ye=Ke(re,Fe.activeIndex),je=Ke(re,Fe.selectedIndex),Pe=Ke(re,Fe.triggerElement),Ze=Ke(re,Fe.positionerElement),_t=p3(Me),Ht=Me??_t,vt=v.useMemo(()=>N&&Array.isArray($)&&$.length===0?"":Uo($,A),[N,$,A]),ut=v.useMemo(()=>N&&Array.isArray($)?$.map(nt=>Uo(nt,A)):Uo($,A),[N,$,A]),it=cn(re.state.triggerElement),Et=Ae(()=>ut);ox(it,Y,$,Et);const Bt=v.useRef($),pa=N?Array.isArray($)&&$.length>0:$!=null;Re(()=>{$!==Bt.current&&re.set("forceMount",!0)},[re,$]),Re(()=>{Z(pa)},[pa,Z]),Re(function(){const At=Se.current;let yn;if(N){const en=Array.isArray($)?$:[];if(en.length===0)yn=null;else{const kt=en[en.length-1],un=Oi(At,kt,M);yn=un===-1?null:un}}else{const en=Oi(At,$,M);yn=en===-1?null:en}yn===null&&(xe.current=null),!ce&&re.set("selectedIndex",yn)},[pa,N,ce,$,Se,M,re,xe]),lx($,()=>{I(K),B($!==F.initialValue),q()?Q.commit($):Q.commit($,!0)});const gn=Ae((nt,At)=>{if(f?.(nt,At),!At.isCanceled&&(ie(nt),!nt&&(At.reason===Md||At.reason===Rh)&&(L(!0),D(!1),V==="onBlur"&&Q.commit($)),!nt&&re.state.activeIndex!==null)){const yn=oe.current[re.state.activeIndex];queueMicrotask(()=>{yn?.setAttribute("tabindex","-1")})}}),dt=Ae(()=>{Ge(!1),re.update({activeIndex:null,openMethod:null}),E?.(!1)});xr({enabled:!_,open:ce,ref:te,onComplete(){ce||dt()}}),v.useImperativeHandle(_,()=>({unmount:dt}),[dt]);const Tt=Ae((nt,At)=>{i?.(nt,At),!At.isCanceled&&W(nt)}),Xt=Ae(()=>{const nt=re.state.listElement||te.current;if(!nt)return;const At=fx(nt.scrollHeight,nt.clientHeight),yn=xd(nt.scrollTop,At),en=yn>0,kt=yn<At;re.state.scrollUpArrowVisible!==en&&re.set("scrollUpArrowVisible",en),re.state.scrollDownArrowVisible!==kt&&re.set("scrollDownArrowVisible",kt)}),yt=BS({open:ce,onOpenChange:gn,elements:{reference:Pe,floating:Ze}}),Wt=hA(yt,{enabled:!y&&!P,event:"mousedown"}),Vt=Uh(yt),rn=DM(yt,{enabled:!y&&!P,listRef:oe,activeIndex:ye,selectedIndex:je,disabledIndices:Ui,onNavigate(nt){nt===null&&!ce||re.set("activeIndex",nt)},focusItemOnHover:O}),Tn=LM(yt,{enabled:!y&&!P&&(ce||!N),listRef:ue,activeIndex:ye,selectedIndex:je,onMatch(nt){ce?re.set("activeIndex",nt):Tt(Se.current[nt],tt("none"))},onTyping(nt){Ee.current=nt}}),qn=v.useMemo(()=>{const nt=ka(Tn.reference,rn.reference,Vt.reference,Wt.reference,ve);return Y&&(nt.id=Y),nt},[Wt.reference,Tn.reference,rn.reference,Vt.reference,ve,Y]),ta=v.useMemo(()=>ka(Id,Tn.floating,rn.floating,Vt.floating),[Tn.floating,rn.floating,Vt.floating]),Vn=rn.item??an;_h(()=>{re.update({popupProps:ta,triggerProps:qn})}),Re(()=>{re.update({id:Y,modal:S,multiple:N,value:$,open:ce,mounted:De,transitionStatus:qe,popupProps:ta,triggerProps:qn,items:k,itemToStringLabel:R,itemToStringValue:A,isItemEqualToValue:M,openMethod:Ht})},[re,Y,S,N,$,ce,De,qe,ta,qn,k,R,A,M,Ht]);const es=v.useMemo(()=>({store:re,name:K,required:w,disabled:P,readOnly:y,multiple:N,highlightItemOnHover:O,setValue:Tt,setOpen:gn,listRef:oe,popupRef:te,scrollHandlerRef:Ne,handleScrollArrowVisibility:Xt,scrollArrowsMountedCountRef:$e,itemProps:Vn,events:yt.context.events,valueRef:be,valuesRef:Se,labelsRef:ue,typingRef:Ee,selectionRef:ke,firstItemTextRef:ze,selectedItemTextRef:xe,validation:Q,onOpenChangeComplete:E,keyboardActiveRef:Oe,alignItemWithTriggerActiveRef:_e,initialValueRef:Bt}),[re,K,w,P,y,N,O,Tt,gn,Vn,yt.context.events,Q,E,Xt]),An=Ts(j,Q.inputRef),na=N&&Array.isArray($)&&$.length>0,Na=N?void 0:K,ts=v.useMemo(()=>!N||!Array.isArray($)||!K?null:$.map(nt=>{const At=Uo(nt,A);return l.jsx("input",{type:"hidden",form:m,name:K,value:At},At)}),[N,$,m,K,A]);return l.jsx(Lw.Provider,{value:es,children:l.jsxs(Pw.Provider,{value:yt,children:[U,l.jsx("input",{...Q.getInputValidationProps({onFocus(){re.state.triggerElement?.focus({focusVisible:!0})},onChange(nt){if(nt.nativeEvent.defaultPrevented||P||y){nt.preventBaseUIHandler?.();return}const At=nt.currentTarget.value,yn=tt(Ns,nt.nativeEvent);function en(){if(N)return;const kt=Se.current.find(un=>Uo(un,A).toLowerCase()===At.toLowerCase()||Uw(un,R).toLowerCase()===At.toLowerCase());kt!=null&&(B(kt!==F.initialValue),Tt(kt,yn),q()&&Q.commit(kt))}re.set("forceMount",!0),queueMicrotask(en)}}),id:Y&&Na==null?`${Y}-hidden-input`:void 0,form:m,name:Na,autoComplete:h,value:vt,disabled:P,required:w&&!na,readOnly:y,ref:An,style:K?Gj:Ah,tabIndex:-1,"aria-hidden":!0,suppressHydrationWarning:!0}),ts]})})}function q4(e,n){return e??n}function V4(e){const n=e.getBoundingClientRect(),s=Ft(e),r=s.getComputedStyle(e,"::before"),i=s.getComputedStyle(e,"::after");if(!(r.content!=="none"||i.content!=="none"))return n;const d=parseFloat(r.width)||0,f=parseFloat(r.height)||0,g=parseFloat(i.width)||0,m=parseFloat(i.height)||0,h=Math.max(n.width,d,g),x=Math.max(n.height,f,m),y=h-n.width,w=x-n.height;return{left:n.left-y/2,right:n.right+y/2,top:n.top-w/2,bottom:n.bottom+w/2}}const Au=2,$4=400,G4={...KM,...rx,popupSide:e=>e?{"data-popup-side":e}:null,value:()=>null},Y4=v.forwardRef(function(n,s){const{render:r,className:i,id:c,disabled:d=!1,nativeButton:f=!0,style:g,...m}=n,{setTouched:h,setFocused:x,validationMode:y,state:w,disabled:S}=rc(),{labelId:_}=$d(),{store:j,setOpen:E,selectionRef:k,validation:N,readOnly:R,required:A,alignItemWithTriggerActiveRef:M,disabled:O,keyboardActiveRef:U}=Wa(),I=S||O||d,B=Ke(j,Fe.open),L=Ke(j,Fe.mounted),D=Ke(j,Fe.value),q=Ke(j,Fe.triggerProps),F=Ke(j,Fe.positionerElement),Z=Ke(j,Fe.listElement),H=Ke(j,Fe.popupSide),G=Ke(j,Fe.id),Q=Ke(j,Fe.labelId),V=Ke(j,Fe.hasSelectedValue),Y=L&&F?H:null,P=c??G,K=q4(_,Q);Gd({id:P});const $=cn(F),W=v.useRef(null),{getButtonProps:ce,buttonRef:ie}=ml({disabled:I,native:f}),oe=Ae(Ee=>{j.set("triggerElement",Ee)}),ue=Ts(s,W,ie,oe),te=Zn(),Ne=Zn(),$e=Zn();v.useEffect(()=>{if(B)return $e.start($4,()=>{k.current.allowUnselectedMouseUp=!0,k.current.allowSelectedMouseUp=!0}),()=>{$e.clear()};k.current={allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0},Ne.clear()},[B,k,Ne,$e]);const be=ka(q,{id:P,role:"combobox","aria-expanded":B?"true":"false","aria-haspopup":"listbox","aria-controls":B?Z?.id??nd(F)?.id:void 0,"aria-labelledby":K,"aria-readonly":R||void 0,"aria-required":A||void 0,tabIndex:I?-1:0,ref:ue,onFocus(Ee){x(!0),B&&M.current&&E(!1,tt(Ns,Ee.nativeEvent)),te.start(0,()=>{j.set("forceMount",!0)})},onBlur(Ee){Ye(F,Ee.relatedTarget)||(h(!0),x(!1),y==="onBlur"&&N.commit(D))},onPointerMove(){U.current=!1},onKeyDown(){U.current=!0},onMouseDown(Ee){if(B)return;const Oe=xt(Ee.currentTarget);function ze(xe){if(!W.current)return;const ke=xe.target;if(Ye(W.current,ke)||Ye($.current,ke)||ke===W.current)return;const _e=V4(W.current);xe.clientX>=_e.left-Au&&xe.clientX<=_e.right+Au&&xe.clientY>=_e.top-Au&&xe.clientY<=_e.bottom+Au||E(!1,tt(pT,xe))}Ne.start(0,()=>{Oe.addEventListener("mouseup",ze,{once:!0})})}},N.getValidationProps,m,ce);be.role="combobox";const Se={...w,open:B,disabled:I,value:D,readOnly:R,popupSide:Y,placeholder:!V};return Lt("button",n,{ref:[s,W],state:Se,stateAttributesMapping:G4,props:be})}),F4={value:()=>null},X4=v.forwardRef(function(n,s){const{className:r,render:i,children:c,placeholder:d,style:f,...g}=n,{store:m,valueRef:h}=Wa(),x=Ke(m,Fe.value),y=Ke(m,Fe.items),w=Ke(m,Fe.itemToStringLabel),S=Ke(m,Fe.hasSelectedValue),_=!S&&d!=null&&c==null,j=Ke(m,Fe.hasNullItemLabel,_),E={value:x,placeholder:!S};let k=null;return typeof c=="function"?k=c(x):c!=null?k=c:!S&&d!=null&&!j?k=d:Array.isArray(x)?k=U4(x,y,w):k=Hw(x,y,w),Lt("span",n,{state:E,ref:[s,h],props:[{children:k},g],stateAttributesMapping:F4})}),K4=v.forwardRef(function(n,s){const{render:r,className:i,style:c,...d}=n,{store:f}=Wa(),m={open:Ke(f,Fe.open)};return Lt("span",n,{state:m,ref:s,props:[{"aria-hidden":!0,children:"▼"},d],stateAttributesMapping:US})}),Q4=v.createContext(void 0),Z4=v.forwardRef(function(n,s){const{store:r}=Wa(),i=Ke(r,Fe.mounted),c=Ke(r,Fe.forceMount);return i||c?l.jsx(Q4.Provider,{value:!0,children:l.jsx(hS,{ref:s,...n})}):null}),qw=v.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}});function J4(){return v.useContext(qw)}function mx(e){const{children:n,elementsRef:s,labelsRef:r,onMapChange:i}=e,c=Ae(i),d=v.useRef(0),f=fa(eO).current,g=fa(W4).current,[m,h]=v.useState(0),x=v.useRef(m),y=Ae((E,k)=>{g.set(E,k??null),x.current+=1,h(x.current)}),w=Ae(E=>{g.delete(E),x.current+=1,h(x.current)}),S=v.useMemo(()=>{const E=new Map;return Array.from(g.keys()).filter(N=>N.isConnected).sort(tO).forEach((N,R)=>{const A=g.get(N)??{};E.set(N,{...A,index:R})}),E},[g,m]);Re(()=>{if(typeof MutationObserver!="function"||S.size===0)return;const E=new MutationObserver(k=>{const N=new Set,R=A=>N.has(A)?N.delete(A):N.add(A);k.forEach(A=>{A.removedNodes.forEach(R),A.addedNodes.forEach(R)}),N.size===0&&(x.current+=1,h(x.current))});return S.forEach((k,N)=>{N.parentElement&&E.observe(N.parentElement,{childList:!0})}),()=>{E.disconnect()}},[S]),Re(()=>{x.current===m&&(s.current.length!==S.size&&(s.current.length=S.size),r&&r.current.length!==S.size&&(r.current.length=S.size),d.current=S.size),c(S)},[c,S,s,r,m]),Re(()=>()=>{s.current=[]},[s]),Re(()=>()=>{r&&(r.current=[])},[r]);const _=Ae(E=>(f.add(E),()=>{f.delete(E)}));Re(()=>{f.forEach(E=>E(S))},[f,S]);const j=v.useMemo(()=>({register:y,unregister:w,subscribeMapChange:_,elementsRef:s,labelsRef:r,nextIndexRef:d}),[y,w,_,s,r,d]);return l.jsx(qw.Provider,{value:j,children:n})}function W4(){return new Map}function eO(){return new Set}function tO(e,n){const s=e.compareDocumentPosition(n);return s&Node.DOCUMENT_POSITION_FOLLOWING||s&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:s&Node.DOCUMENT_POSITION_PRECEDING||s&Node.DOCUMENT_POSITION_CONTAINS?1:0}const Vw=v.createContext(void 0);function px(){const e=v.useContext(Vw);if(!e)throw new Error(Nn(59));return e}function bd(e,n){e&&Object.assign(e.style,n)}const $w={position:"relative",maxHeight:"100%",overflowX:"hidden",overflowY:"auto"},nO=20;function aO(e,n,s,r){const[i,c]=v.useState(!1);Re(()=>{if(!e||!n||s==null){c(!1);return}const d=xt(s).documentElement.clientWidth,f=s.offsetWidth;c(d>0&&f>0&&f>=d-nO)},[e,n,s]),Ew(e&&(!n||i),r)}const sO={position:"fixed"},rO=v.forwardRef(function(n,s){const{anchor:r,positionMethod:i="absolute",className:c,render:d,side:f="bottom",align:g="center",sideOffset:m=0,alignOffset:h=0,collisionBoundary:x="clipping-ancestors",collisionPadding:y,arrowPadding:w=5,sticky:S=!1,disableAnchorTracking:_,alignItemWithTrigger:j=!0,collisionAvoidance:E=oA,style:k,...N}=n,{store:R,listRef:A,labelsRef:M,alignItemWithTriggerActiveRef:O,selectedItemTextRef:U,valuesRef:I,initialValueRef:B,popupRef:L,setValue:D}=Wa(),q=Bw(),F=Ke(R,Fe.open),Z=Ke(R,Fe.mounted),H=Ke(R,Fe.modal),G=Ke(R,Fe.value),Q=Ke(R,Fe.openMethod),V=Ke(R,Fe.positionerElement),Y=Ke(R,Fe.triggerElement),P=Ke(R,Fe.isItemEqualToValue),K=Ke(R,Fe.transitionStatus),$=v.useRef(null),W=v.useRef(null),[ce,ie]=v.useState(j),oe=Z&&ce&&Q!=="touch";!Z&&ce!==j&&ie(j),Re(()=>{Z||(Fe.scrollUpArrowVisible(R.state)&&R.set("scrollUpArrowVisible",!1),Fe.scrollDownArrowVisible(R.state)&&R.set("scrollDownArrowVisible",!1))},[R,Z]),v.useImperativeHandle(O,()=>oe),aO((oe||H)&&F,Q==="touch",V,Y);const ue=FS({anchor:r,floatingRootContext:q,positionMethod:i,mounted:Z,side:f,sideOffset:m,align:g,alignOffset:h,arrowPadding:w,collisionBoundary:x,collisionPadding:y,sticky:S,disableAnchorTracking:_??oe,collisionAvoidance:E,keepMounted:!0}),te=oe?"none":ue.side,Ne=oe?sO:ue.positionerStyles,$e={open:F,side:te,align:ue.align,anchorHidden:ue.anchorHidden};Re(()=>{R.set("popupSide",ue.side)},[R,ue.side]);const be=Ae(xe=>{R.set("positionerElement",xe)}),Se=XS(n,$e,{styles:Ne,transitionStatus:K,props:N,refs:[s,be],hidden:!Z,inert:!F}),Ee=v.useRef(0),Oe=Ae(xe=>{if(xe.size===0&&Ee.current===0||I.current.length===0)return;const ke=Ee.current;if(Ee.current=xe.size,xe.size===ke)return;const _e=tt(Ns);if(ke!==0&&!R.state.multiple&&G!==null&&Oi(I.current,G,P)===-1){const Ge=B.current,Me=Ge!=null&&Oi(I.current,Ge,P)!==-1?Ge:null;D(Me,_e),Me===null&&(R.set("selectedIndex",null),U.current=null)}if(ke!==0&&R.state.multiple&&Array.isArray(G)){const De=qe=>Oi(I.current,qe,P)!==-1,Ge=G.filter(qe=>De(qe));(Ge.length!==G.length||Ge.some(qe=>!P4(G,qe,P)))&&(D(Ge,_e),Ge.length===0&&(R.set("selectedIndex",null),U.current=null))}if(F&&oe){R.update({scrollUpArrowVisible:!1,scrollDownArrowVisible:!1});const De={height:""};bd(V,De),bd(L.current,De)}}),ze=v.useMemo(()=>({...ue,side:te,alignItemWithTriggerActive:oe,setControlledAlignItemWithTrigger:ie,scrollUpArrowRef:$,scrollDownArrowRef:W}),[ue,te,oe,ie]);return l.jsx(mx,{elementsRef:A,labelsRef:M,onMapChange:Oe,children:l.jsxs(Vw.Provider,{value:ze,children:[Z&&H&&l.jsx(ww,{inert:Kh(!F),cutout:Y}),Se]})})}),Mu="base-ui-disable-scrollbar",Qg={className:Mu,getElement(e){return l.jsx("style",{nonce:e,href:Mu,precedence:"base-ui:low",children:`.${Mu}{scrollbar-width:none}.${Mu}::-webkit-scrollbar{display:none}`})}},oO=v.createContext(void 0);function lO(e){return v.useContext(oO)}const iO=v.createContext(void 0),cO={disableStyleElements:!1};function uO(){return v.useContext(iO)??cO}const dO={...fl,...dl},fO=v.forwardRef(function(n,s){const{render:r,className:i,style:c,finalFocus:d,...f}=n,{store:g,popupRef:m,onOpenChangeComplete:h,setOpen:x,valueRef:y,firstItemTextRef:w,selectedItemTextRef:S,keyboardActiveRef:_,multiple:j,handleScrollArrowVisibility:E,scrollHandlerRef:k,listRef:N,highlightItemOnHover:R}=Wa(),{side:A,align:M,alignItemWithTriggerActive:O,isPositioned:U,setControlledAlignItemWithTrigger:I,scrollDownArrowRef:B,scrollUpArrowRef:L}=px(),D=lO()!=null,q=Bw(),F=Fh(),{nonce:Z,disableStyleElements:H}=uO(),G=Ke(g,Fe.id),Q=Ke(g,Fe.open),V=Ke(g,Fe.mounted),Y=Ke(g,Fe.popupProps),P=Ke(g,Fe.transitionStatus),K=Ke(g,Fe.triggerElement),$=Ke(g,Fe.positionerElement),W=Ke(g,Fe.listElement),ce=v.useRef(!1),ie=v.useRef(!1),oe=v.useRef({}),ue=Fo(),te=Ae(Se=>{if(!$||!m.current||!ie.current)return;if(ce.current||!O){E();return}const Ee=$.style.top==="0px",Oe=$.style.bottom==="0px";if(!Ee&&!Oe){E();return}const ze=H1($),xe=wi($.getBoundingClientRect().height,"y",ze),ke=xt($),_e=getComputedStyle($),De=parseFloat(_e.marginTop),Ge=parseFloat(_e.marginBottom),qe=U1(getComputedStyle(m.current)),Me=Math.min(ke.documentElement.clientHeight-De-Ge,qe),ve=Se.scrollTop,re=Ou(Se);let ye=0,je=null,Pe=!1,Ze=!1;const _t=it=>{$.style.height=`${it}px`},Ht=(it,Et)=>{const Bt=Si(it,0,Me-xe);Bt>0&&_t(xe+Bt),Se.scrollTop=Et,Me-(xe+Bt)<=Oa&&(ce.current=!0),E()},vt=Ee?re-ve:ve,ut=Math.min(xe+vt,Me);if(ye=ut,vt<=Oa){Ht(vt,Ee?re:0);return}if(Me-ut>Oa)Ee?Ze=!0:je=0;else if(Pe=!0,Oe&&ve<re){const it=xe+vt-Me;je=ve-(vt-it)}if(ye=Math.ceil(ye),ye!==0&&_t(ye),Ze||je!=null){const it=Ou(Se),Et=Ze?it:Si(je,0,it);Math.abs(Se.scrollTop-Et)>Oa&&(Se.scrollTop=Et)}(Pe||ye>=Me-Oa)&&(ce.current=!0),E()});v.useImperativeHandle(k,()=>te,[te]),xr({open:Q,ref:m,onComplete(){Q&&h?.(!0)}});const Ne={open:Q,transitionStatus:P,side:A,align:M};Re(()=>{!$||!m.current||Object.keys(oe.current).length||(oe.current={top:$.style.top||"0",left:$.style.left||"0",right:$.style.right,height:$.style.height,bottom:$.style.bottom,minHeight:$.style.minHeight,maxHeight:$.style.maxHeight,marginTop:$.style.marginTop,marginBottom:$.style.marginBottom})},[m,$]),Re(()=>{Q||O||(ie.current=!1,ce.current=!1,bd($,oe.current))},[Q,O,$,m]),Re(()=>{const Se=m.current;if(!Q||!K||!$||!Se||O&&!U||g.state.transitionStatus==="ending")return;if(!O){ie.current=!0,ue.request(E),Se.style.removeProperty("--transform-origin");return}const Ee=mO(Se);Se.style.removeProperty("--transform-origin");try{let Oe=S.current;Oe?.isConnected||(Oe=!Fe.hasSelectedValue(g.state)&&w.current?.isConnected?w.current:null);const ze=y.current,xe=getComputedStyle($),ke=getComputedStyle(Se),_e=xt(K),De=Ft($),Ge=H1(K),qe=zu(K.getBoundingClientRect(),Ge),Me=zu($.getBoundingClientRect(),Ge),ve=qe.height,re=W||Se,ye=re.scrollHeight,je=parseFloat(ke.borderBottomWidth),Pe=parseFloat(xe.marginTop)||10,Ze=parseFloat(xe.marginBottom)||10,_t=parseFloat(xe.minHeight)||100,Ht=U1(ke),vt=5,ut=5,it=20,Et=_e.documentElement.clientHeight-Pe-Ze,Bt=_e.documentElement.clientWidth,pa=Et-qe.bottom+ve;let gn,dt=F==="rtl"?qe.right-Me.width:qe.left,Tt=0;if(Oe&&ze){const An=zu(ze.getBoundingClientRect(),Ge);gn=zu(Oe.getBoundingClientRect(),Ge),dt=Me.left+(F==="rtl"?An.right-gn.right:An.left-gn.left);const na=An.top-qe.top+An.height/2;Tt=gn.top-Me.top+gn.height/2-na}const Xt=pa+Tt+Ze+je;let yt=Math.min(Et,Xt);const Wt=Et-Pe-Ze,Vt=Xt-yt,rn=Bt-ut;$.style.left=`${Si(dt,vt,rn-Me.width)}px`,$.style.height=`${yt}px`,$.style.maxHeight="auto",$.style.marginTop=`${Pe}px`,$.style.marginBottom=`${Ze}px`,Se.style.height="100%";const Tn=Ou(re),qn=Vt>=Tn-Oa;qn&&(yt=Math.min(Et,Me.height)-(Vt-Tn));const ta=qe.top<it||qe.bottom>Et-it||Math.ceil(yt)+Oa<Math.min(ye,_t),Vn=(De.visualViewport?.scale??1)!==1&&Sh;if(ta||Vn){ie.current=!0,bd($,oe.current),I(!1);return}const es=Math.max(_t,yt);if(qn){const An=Math.max(0,Et-Xt);$.style.top=Me.height>=Wt?"0":`${An}px`,$.style.height=`${yt}px`,re.scrollTop=Ou(re)}else $.style.bottom="0",re.scrollTop=Vt;if(gn){const An=Me.top,na=Me.height,Na=gn.top+gn.height/2,ts=na>0?(Na-An)/na*100:50,nt=Si(ts,0,100);Se.style.setProperty("--transform-origin",`50% ${nt}%`)}(es===Et||yt>=Ht)&&(ce.current=!0),E(),R&&g.state.selectedIndex===null&&g.state.activeIndex===null&&N.current[0]!=null&&g.set("activeIndex",0),ie.current=!0}finally{Ee()}},[g,Q,$,K,y,w,S,m,E,O,I,ue,B,L,W,N,R,F,U]),v.useEffect(()=>{if(!O||!$||!Q)return;const Se=Ft($);function Ee(Oe){x(!1,tt(gT,Oe))}return ct(Se,"resize",Ee)},[x,O,$,Q]);const $e={...W?{role:"presentation","aria-orientation":void 0}:{role:"listbox","aria-multiselectable":j||void 0,id:`${G}-list`},onKeyDown(Se){_.current=!0,D&&ix.has(Se.key)&&Se.stopPropagation()},onMouseMove(){_.current=!1},onScroll(Se){W||te(Se.currentTarget)},...O&&{style:W?{height:"100%"}:$w}},be=Lt("div",n,{ref:[s,m],state:Ne,stateAttributesMapping:dO,props:[Y,$e,Xh(P),{className:!W&&O?Qg.className:void 0},f]});return l.jsxs(v.Fragment,{children:[!H&&Qg.getElement(Z),l.jsx(xS,{context:q,modal:!1,disabled:!V,returnFocus:d,restoreFocus:!0,children:be})]})});function U1(e){const n=e.maxHeight||"";return n.endsWith("px")&&parseFloat(n)||1/0}function Ou(e){return fx(e.scrollHeight,e.clientHeight)}function H1(e){return wS.getScale(e)}function wi(e,n,s){return e/s[n]}function zu(e,n){return qi({x:wi(e.x,"x",n),y:wi(e.y,"y",n),width:wi(e.width,"x",n),height:wi(e.height,"y",n)})}const q1=[["transform","none"],["scale","1"],["translate","0 0"]];function mO(e){const{style:n}=e,s={};for(const[r,i]of q1)s[r]=n.getPropertyValue(r),n.setProperty(r,i,"important");return()=>{for(const[r]of q1){const i=s[r];i?n.setProperty(r,i):n.removeProperty(r)}}}const pO=v.forwardRef(function(n,s){const{render:r,className:i,style:c,...d}=n,{store:f,scrollHandlerRef:g}=Wa(),{alignItemWithTriggerActive:m}=px(),h=Ke(f,Fe.hasScrollArrows),x=Ke(f,Fe.openMethod),y=Ke(f,Fe.multiple),S={id:`${Ke(f,Fe.id)}-list`,role:"listbox","aria-multiselectable":y||void 0,onScroll(j){g.current?.(j.currentTarget)},...m&&{style:$w},className:h&&x!=="touch"?Qg.className:void 0},_=Ae(j=>{f.set("listElement",j)});return Lt("div",n,{ref:[s,_],props:[S,d]})});let Gw=(function(e){return e[e.None=0]="None",e[e.GuessFromOrder=1]="GuessFromOrder",e})({});function gx(e={}){const{label:n,metadata:s,textRef:r,indexGuessBehavior:i,index:c}=e,{register:d,unregister:f,subscribeMapChange:g,elementsRef:m,labelsRef:h,nextIndexRef:x}=J4(),y=v.useRef(-1),[w,S]=v.useState(c??(i===Gw.GuessFromOrder?()=>{if(y.current===-1){const E=x.current;x.current+=1,y.current=E}return y.current}:-1)),_=v.useRef(null),j=v.useCallback(E=>{if(_.current=E,w!==-1&&E!==null&&(m.current[w]=E,h)){const k=n!==void 0;h.current[w]=k?n:r?.current?.textContent??E.textContent}},[w,m,h,n,r]);return Re(()=>{if(c!=null)return;const E=_.current;if(E)return d(E,s),()=>{f(E)}},[c,d,f,s]),Re(()=>{if(c==null)return g(E=>{const k=_.current?E.get(_.current)?.index:null;k!=null&&S(k)})},[c,g,S]),v.useMemo(()=>({ref:j,index:w}),[w,j])}const Yw=v.createContext(void 0);function hx(){const e=v.useContext(Yw);if(!e)throw new Error(Nn(57));return e}const gO=v.memo(v.forwardRef(function(n,s){const{render:r,className:i,style:c,value:d=null,label:f,disabled:g=!1,nativeButton:m=!1,...h}=n,x=v.useRef(null),y=gx({label:f,textRef:x,indexGuessBehavior:Gw.GuessFromOrder}),{store:w,itemProps:S,setOpen:_,setValue:j,selectionRef:E,typingRef:k,valuesRef:N,multiple:R,selectedItemTextRef:A}=Wa(),M=Ke(w,Fe.isActive,y.index),O=Ke(w,Fe.isSelected,y.index,d),U=Ke(w,Fe.isSelectedByFocus,y.index),I=Ke(w,Fe.isItemEqualToValue),B=y.index,L=B!==-1,D=v.useRef(null);Re(()=>{if(!L)return;const W=N.current;return W[B]=d,()=>{delete W[B]}},[L,B,d,N]),Re(()=>{if(!L)return;const W=w.state.value;let ce=W;R&&Array.isArray(W)&&W.length>0&&(ce=W[W.length-1]),ce!==void 0&&tl(d,ce,I)&&(w.set("selectedIndex",B),x.current&&(A.current=x.current))},[L,B,R,I,w,d,A]);const q=v.useRef(null),F=v.useRef("mouse"),Z=v.useRef(!1),{getButtonProps:H,buttonRef:G}=ml({disabled:g,focusableWhenDisabled:!0,native:m,composite:!0}),Q={disabled:g,selected:O,highlighted:M};function V(W){const ce=w.state.value;if(R){const ie=Array.isArray(ce)?ce:[],oe=O?B4(ie,d,I):[...ie,d];j(oe,tt(vp,W))}else j(d,tt(vp,W)),_(!1,tt(vp,W))}function Y(){E.current.dragY=0}const P={role:"option","aria-selected":O,tabIndex:M?0:-1,onKeyDown(W){q.current=W.key,w.set("activeIndex",B),W.key===" "&&k.current&&W.preventDefault()},onClick(W){const ce=W.type==="click"&&F.current!=="touch",ie=W.nativeEvent.pointerType,oe=ce&&wh(W.nativeEvent)&&(ie!==void 0||M),ue=ce&&!oe&&!Z.current;Z.current=!1,!(W.type==="keydown"&&q.current===null)&&(g||W.type==="keydown"&&q.current===" "&&k.current||ue||(q.current=null,V(W.nativeEvent)))},onPointerEnter(W){F.current=W.pointerType},onPointerMove(W){if(W.pointerType==="mouse"&&W.buttons===1){const ce=E.current;ce.dragY+=W.movementY,ce.dragY**2>=64&&(ce.allowUnselectedMouseUp=!0)}},onPointerDown(W){F.current=W.pointerType,Z.current=!0,Y()},onMouseUp(){if(Y(),g||F.current==="touch"||Z.current)return;const W=!E.current.allowSelectedMouseUp&&O,ce=!E.current.allowUnselectedMouseUp&&!O;W||ce||(Z.current=!0,D.current?.click(),Z.current=!1)}},K=Lt("div",n,{ref:[G,s,y.ref,D],state:Q,props:[S,P,h,H]}),$=v.useMemo(()=>({selected:O,index:B,textRef:x,selectedByFocus:U,hasRegistered:L}),[O,B,x,U,L]);return l.jsx(Yw.Provider,{value:$,children:K})})),hO=v.forwardRef(function(n,s){const r=n.keepMounted??!1,{selected:i}=hx();return r||i?l.jsx(xO,{...n,ref:s}):null}),xO=v.memo(v.forwardRef((e,n)=>{const{render:s,className:r,style:i,keepMounted:c,...d}=e,{selected:f}=hx(),g=v.useRef(null),{transitionStatus:m,setMounted:h}=tc(f),y=Lt("span",e,{ref:[n,g],state:{selected:f,transitionStatus:m},props:[{"aria-hidden":!0,children:"✔️"},d],stateAttributesMapping:dl});return xr({open:f,ref:g,onComplete(){f||h(!1)}}),y})),bO=v.memo(v.forwardRef(function(n,s){const{index:r,textRef:i,selectedByFocus:c,hasRegistered:d}=hx(),{firstItemTextRef:f,selectedItemTextRef:g}=Wa(),{render:m,className:h,style:x,...y}=n,w=v.useCallback(_=>{_&&(d&&r===0&&(f.current=_),d&&c&&(g.current=_))},[f,g,r,c,d]);return Lt("div",n,{ref:[w,s,i],props:y})})),Fw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,direction:d,keepMounted:f=!1,...g}=n,m=d==="up",{store:h,popupRef:x,listRef:y,handleScrollArrowVisibility:w,scrollArrowsMountedCountRef:S}=Wa(),{side:_,scrollDownArrowRef:j,scrollUpArrowRef:E}=px(),k=m?Fe.scrollUpArrowVisible:Fe.scrollDownArrowVisible,N=Ke(h,k),R=Ke(h,Fe.openMethod),A=N&&R!=="touch",M=Zn(),O=m?E:j,{transitionStatus:U,setMounted:I}=tc(A);Re(()=>(S.current+=1,h.state.hasScrollArrows||h.set("hasScrollArrows",!0),()=>{S.current=Math.max(0,S.current-1),S.current===0&&h.state.hasScrollArrows&&h.set("hasScrollArrows",!1)}),[h,S]),xr({open:A,ref:O,onComplete(){A||I(!1)}});const D=Lt("div",n,{ref:[s,O],state:{direction:d,visible:A,side:_,transitionStatus:U},props:[{"aria-hidden":!0,children:m?"▲":"▼",style:{position:"absolute"},onMouseMove(F){if(F.movementX===0&&F.movementY===0||M.isStarted())return;h.set("activeIndex",null);function Z(){const H=h.state.listElement??x.current;if(!H)return;h.set("activeIndex",null),w();const G=fx(H.scrollHeight,H.clientHeight),Q=xd(H.scrollTop,G),V=Q===(m?0:G),Y=y.current;if(Q!==H.scrollTop&&(H.scrollTop=Q),Y.length===0&&h.set(m?"scrollUpArrowVisible":"scrollDownArrowVisible",!V),V){M.clear();return}if(Y.length>0){const P=O.current?.offsetHeight||0;H.scrollTop=vO(Y,m,Q,H.clientHeight,P,G)}M.start(40,Z)}M.start(40,Z)},onMouseLeave(){M.clear()}},g]});return A||f?D:null});function vO(e,n,s,r,i,c){if(n){let h=0;const x=s+i-Oa;for(let S=0;S<e.length;S+=1){const _=e[S];if(_&&_.offsetTop>=x){h=S;break}}const y=Math.max(0,h-1),w=e[y];return y<h&&w?xd(w.offsetTop-i,c):0}let d=e.length-1;const f=s+r-i+Oa;for(let h=0;h<e.length;h+=1){const x=e[h];if(x&&x.offsetTop+x.offsetHeight>f){d=Math.max(0,h-1);break}}const g=Math.min(e.length-1,d+1),m=e[g];return g>d&&m?xd(m.offsetTop+m.offsetHeight-r+i,c):c}const yO=v.forwardRef(function(n,s){return l.jsx(Fw,{...n,ref:s,direction:"down"})}),_O=v.forwardRef(function(n,s){return l.jsx(Fw,{...n,ref:s,direction:"up"})}),jO=H4;function SO({className:e,...n}){return l.jsx(X4,{"data-slot":"select-value",className:Pt("flex flex-1 text-left",e),...n})}function wO({className:e,size:n="default",children:s,...r}){return l.jsxs(Y4,{"data-slot":"select-trigger","data-size":n,className:Pt("flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...r,children:[s,l.jsx(K4,{render:l.jsx(Zr,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function CO({className:e,children:n,side:s="bottom",sideOffset:r=4,align:i="center",alignOffset:c=0,alignItemWithTrigger:d=!0,...f}){return l.jsx(Z4,{children:l.jsx(rO,{side:s,sideOffset:r,align:i,alignOffset:c,alignItemWithTrigger:d,className:"isolate z-50",children:l.jsxs(fO,{"data-slot":"select-content","data-align-trigger":d,className:Pt("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...f,children:[l.jsx(kO,{}),l.jsx(pO,{children:n}),l.jsx(RO,{})]})})})}function EO({className:e,children:n,...s}){return l.jsxs(gO,{"data-slot":"select-item",className:Pt("relative flex w-full cursor-default items-center gap-2 rounded-md py-2 pr-8 pl-2.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...s,children:[l.jsx(bO,{className:"flex min-w-0 flex-1 gap-2 overflow-hidden whitespace-nowrap",children:n}),l.jsx(hO,{render:l.jsx("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center"}),children:l.jsx(Li,{className:"pointer-events-none"})})]})}function kO({className:e,...n}){return l.jsx(_O,{"data-slot":"select-scroll-up-button",className:Pt("top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...n,children:l.jsx(uj,{})})}function RO({className:e,...n}){return l.jsx(yO,{"data-slot":"select-scroll-down-button",className:Pt("bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...n,children:l.jsx(Zr,{})})}function Ct({value:e,onChange:n,options:s,placeholder:r="— elegir —",disabled:i,className:c}){return l.jsxs(jO,{value:e,onValueChange:d=>n(d??""),disabled:i,children:[l.jsx(wO,{className:Ie("h-9 w-full",c),children:l.jsx(SO,{placeholder:r,children:d=>s.find(f=>f.value===d)?.label??d})}),l.jsx(CO,{side:"bottom",sideOffset:6,align:"start",alignItemWithTrigger:!1,className:"max-w-[min(20rem,var(--available-width))] p-1.5",children:s.map(d=>{const f=d.icon;return l.jsx(EO,{value:d.value,children:l.jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[f?l.jsx(f,{className:"size-4 shrink-0 text-muted-fg"}):null,d.description?l.jsxs("span",{className:"flex min-w-0 flex-col leading-tight",children:[l.jsx("span",{className:"truncate font-medium",children:d.label}),l.jsx("span",{className:"truncate text-[11px] text-muted-fg",children:d.description})]}):l.jsx("span",{className:"truncate",children:d.label})]})},d.value)})})]})}const V1=320;function NO(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}function TO(e){return e.agent_slug||e.actor_id||e.author||e.actor_kind||"—"}function AO({m:e}){const[n,s]=v.useState(!1),r=(e.body?.length||0)>V1,i=!r||n?e.body:`${e.body.slice(0,V1)}…`;return l.jsxs("li",{className:"flex items-start gap-3 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx("span",{className:"mt-0.5 shrink-0",children:e.direction==="in"?l.jsx(lj,{size:14,className:"text-blue-400"}):l.jsx(cj,{size:14,className:"text-emerald-400"})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted-fg",children:[l.jsx("span",{className:"font-mono",children:NO(e.ts)}),l.jsx(Ue,{tone:"info",children:e.channel}),e.type&&l.jsx(Ue,{children:e.type}),l.jsx("span",{className:"font-medium text-foreground",children:TO(e)})]}),e.body&&l.jsx("p",{className:"mt-1 whitespace-pre-wrap break-words text-xs",children:i}),r&&l.jsx("button",{type:"button",onClick:()=>s(c=>!c),className:"mt-1 text-[11px] font-medium text-sky-400 hover:underline",children:C(n?"logs.show_less":"logs.show_more")})]})]})}function MO(){const[e,n]=v.useState(!1),s=Qe(e?"/admin/logs?errors":null,()=>Zo.logs("errors",200)),r=s.data?.entries||[];return l.jsxs("details",{className:"mb-3 rounded-lg border border-border bg-muted/20",onToggle:i=>n(i.target.open),children:[l.jsxs("summary",{className:"cursor-pointer px-3 py-2 text-xs font-medium text-muted-fg",children:[C("logs.daemon_errors"),r.length?` · ${r.length}`:""]}),l.jsxs("div",{className:"border-t border-border p-3",children:[s.isLoading&&l.jsx(Je,{}),e&&!s.isLoading&&r.length===0&&l.jsx("p",{className:"text-xs text-muted-fg",children:C("logs.no_errors")}),l.jsx("ul",{className:"space-y-1",children:r.map((i,c)=>l.jsxs("li",{className:"rounded-md bg-card px-2 py-1 text-[11px]",children:[l.jsxs("div",{className:"flex items-center gap-2 text-muted-fg",children:[typeof i.ts=="string"&&l.jsx("span",{className:"font-mono",children:new Date(i.ts).toLocaleString()}),typeof i.level=="string"&&l.jsx("span",{className:"text-destructive",children:i.level})]}),l.jsx("p",{className:"whitespace-pre-wrap break-words font-mono",children:String(i.msg??i.message??i.error??i.raw??JSON.stringify(i)).slice(0,500)})]},c))})]})]})}function OO({pid:e}){const n=!e||String(e)==="0",[s,r]=v.useState(""),[i,c]=v.useState(""),[d,f]=v.useState(""),[g,m]=v.useState(""),h=s.trim()||void 0,x=n?`/messages/global?channel=${h??""}`:`/projects/${e}/messages?channel=${h??""}`,y=Qe(x,()=>n?Xg.global({channel:h,limit:300}):Xg.project(e,{channel:h,limit:300})),w=v.useMemo(()=>[...y.data||[]].sort((j,E)=>(E.ts||"").localeCompare(j.ts||"")),[y.data]),S=v.useMemo(()=>Array.from(new Set(w.map(j=>j.type).filter(Boolean))),[w]),_=v.useMemo(()=>w.filter(j=>!(i&&j.direction!==i||d&&j.type!==d||g&&!(j.body||"").toLowerCase().includes(g.toLowerCase()))),[w,i,d,g]);return l.jsxs(He,{title:C("logs.title"),description:C(n?"logs.desc_global":"logs.desc_project"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(Ce,{placeholder:C("logs.filter_channel"),value:s,onChange:j=>r(j.target.value),className:"w-44"}),l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>y.mutate(),children:l.jsx(rl,{size:13})})]}),children:[n&&l.jsx(MO,{}),l.jsxs("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[l.jsx("div",{className:"w-36",children:l.jsx(Ct,{value:i,onChange:c,placeholder:C("logs.filter_dir"),options:[{value:"",label:C("logs.all_directions")},{value:"in",label:C("logs.in")},{value:"out",label:C("logs.out")}]})}),l.jsx("div",{className:"w-40",children:l.jsx(Ct,{value:d,onChange:f,placeholder:C("logs.filter_type"),options:[{value:"",label:C("logs.all_types")},...S.map(j=>({value:j,label:j}))]})}),l.jsx(Ce,{placeholder:C("logs.search_text"),value:g,onChange:j=>m(j.target.value),className:"w-56"}),l.jsxs("span",{className:"text-[11px] text-muted-fg",children:[_.length," ",C("logs.count_of")," ",w.length]})]}),y.isLoading&&l.jsx(Je,{}),y.error&&l.jsx(lt,{children:C("logs.error",{msg:y.error.message})}),!y.isLoading&&!y.error&&_.length===0&&l.jsx(lt,{children:h?C("logs.no_activity_ch",{ch:h}):C("logs.no_activity")}),l.jsx("ul",{className:"space-y-1 text-sm",children:_.map((j,E)=>l.jsx(AO,{m:j},`${j.ts}-${E}`))})]})}function Xw({value:e,onChange:n,options:s,placeholder:r="elegí o escribí un modelo…",invalid:i,invalidHint:c,className:d}){const[f,g]=v.useState(!1),[m,h]=v.useState(e),x=v.useRef(null);v.useEffect(()=>{h(e)},[e]),v.useEffect(()=>{if(!f)return;const _=j=>{x.current&&!x.current.contains(j.target)&&g(!1)};return document.addEventListener("mousedown",_),()=>document.removeEventListener("mousedown",_)},[f]);const y=m.trim().toLowerCase(),w=y?s.filter(_=>_.toLowerCase().includes(y)):s,S=_=>{n(_),h(_),g(!1)};return l.jsxs("div",{ref:x,className:Ie("relative",d),children:[l.jsxs("div",{className:Ie("flex items-center gap-1 rounded-lg border bg-background px-2.5 transition-colors focus-within:border-ring focus-within:ring-1 focus-within:ring-ring",i?"border-amber-500/60":"border-border"),children:[i&&l.jsx("span",{title:c||"Modelo/proveedor no disponible",children:l.jsx(bj,{className:"size-3.5 shrink-0 text-amber-400"})}),l.jsx("input",{value:m,placeholder:r,onChange:_=>{h(_.target.value),n(_.target.value),g(!0)},onFocus:()=>g(!0),className:"w-full bg-transparent py-1.5 text-sm outline-none placeholder:text-muted-fg/60"}),l.jsx("button",{type:"button",tabIndex:-1,onClick:()=>g(_=>!_),className:"shrink-0 text-muted-fg hover:text-foreground",children:l.jsx(Zr,{className:"size-4"})})]}),f&&w.length>0&&l.jsx("ul",{className:"absolute z-50 mt-1 max-h-56 w-full overflow-y-auto rounded-lg border border-border bg-popover p-1 shadow-md ring-1 ring-foreground/10",children:w.map(_=>l.jsx("li",{children:l.jsx("button",{type:"button",onMouseDown:j=>{j.preventDefault(),S(_)},className:Ie("flex w-full items-center rounded-md px-2 py-1 text-left text-sm hover:bg-accent hover:text-accent-fg",_===e&&"bg-accent/50"),children:l.jsx("span",{className:"truncate font-mono text-xs",children:_})})},_))})]})}function vr(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/admin/config",()=>Zo.config.get()),i=async(c,d)=>{const f=await Zo.config.patch({set:c,unset:d});return await r({config:f.config},{revalidate:!1}),f.config};return{config:e?.config||{},error:n,isLoading:s,mutate:r,patch:i}}function Kw(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/admin/super-agent",()=>Zo.superAgent());return{superAgent:e,error:n,isLoading:s,mutate:r}}const zO={anthropic:"from-orange-600 to-amber-600",openai:"from-emerald-600 to-teal-600",gemini:"from-blue-600 to-indigo-600",groq:"from-cyan-600 to-teal-600",openrouter:"from-violet-600 to-indigo-600",ollama:"from-amber-600 to-orange-600",azure:"from-blue-600 to-cyan-600",mock:"from-slate-600 to-gray-600",custom:"from-slate-600 to-gray-600"},DO={anthropic:"bg-orange-500/20 text-orange-300 border border-orange-500/40",openai:"bg-emerald-500/20 text-emerald-300 border border-emerald-500/40",gemini:"bg-blue-500/20 text-blue-300 border border-blue-500/40",groq:"bg-cyan-500/20 text-cyan-300 border border-cyan-500/40",openrouter:"bg-violet-500/20 text-violet-300 border border-violet-500/40",ollama:"bg-amber-500/20 text-amber-300 border border-amber-500/40",azure:"bg-blue-500/20 text-blue-300 border border-blue-500/40",mock:"bg-slate-500/20 text-slate-300 border border-slate-500/40",custom:"bg-slate-500/20 text-slate-300 border border-slate-500/40"},zi=[{value:"anthropic",label:"Anthropic"},{value:"openai",label:"OpenAI-compatible"},{value:"gemini",label:"Gemini"},{value:"groq",label:"Groq"},{value:"openrouter",label:"OpenRouter"},{value:"ollama",label:"Ollama"},{value:"azure",label:"Azure OpenAI"},{value:"mock",label:"Mock (test)"},{value:"custom",label:"Custom"}];function Vp(e,n){return n&&n in e?e[n]:e.custom}const vd={anthropic:ol,openai:vn,gemini:BR,groq:Bi,openrouter:mh,ollama:hj,azure:kR,mock:zR,custom:ll},Vr={anthropic:{base_url:"",default_model:"claude-sonnet-4.6",api_key_env:"ANTHROPIC_API_KEY",known_models:["claude-opus-4.8","claude-opus-4.7","claude-opus-4.6","claude-sonnet-4.6","claude-sonnet-4.5","claude-haiku-4.5"]},openai:{base_url:"https://api.openai.com/v1",default_model:"gpt-4o-mini",api_key_env:"OPENAI_API_KEY",known_models:["gpt-4o","gpt-4o-mini","gpt-4.1","gpt-4.1-mini","o3-mini"]},gemini:{base_url:"https://generativelanguage.googleapis.com/v1beta/openai",default_model:"gemini-2.5-flash",api_key_env:"GEMINI_API_KEY",known_models:["gemini-3.5-pro","gemini-3.5-flash","gemini-3.1-pro","gemini-3.1-flash","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite"]},groq:{base_url:"https://api.groq.com/openai/v1",default_model:"llama-3.3-70b-versatile",api_key_env:"GROQ_API_KEY",known_models:["llama-3.3-70b-versatile","llama-3.1-8b-instant","meta-llama/llama-4-scout-17b-16e-instruct","openai/gpt-oss-120b","openai/gpt-oss-20b","groq/compound","groq/compound-mini","qwen/qwen3-32b","whisper-large-v3-turbo"]},openrouter:{base_url:"https://openrouter.ai/api/v1",default_model:"openrouter/auto",api_key_env:"OPENROUTER_API_KEY",known_models:["openrouter/auto","openrouter/free","deepseek/deepseek-r1:free","meta-llama/llama-3.3-70b-instruct:free","google/gemini-2.0-flash-exp:free","qwen/qwen3-235b-a22b:free","anthropic/claude-sonnet-4.5","openai/gpt-4o-mini"]},ollama:{base_url:"http://127.0.0.1:11434",default_model:"gemma2:9b",api_key_env:"",known_models:[]},azure:{base_url:"",default_model:"gpt-4o-mini",api_key_env:"AZURE_OPENAI_API_KEY",known_models:["gpt-4o","gpt-4o-mini"]},mock:{base_url:"",default_model:"mock",api_key_env:"",known_models:["mock"]},custom:{base_url:"",default_model:"",api_key_env:"",known_models:[]}};function Qw(e){const n=e.indexOf(":");return n<0?{provider:e,model:""}:{provider:e.slice(0,n),model:e.slice(n+1)}}function $p({value:e,onChange:n,providers:s}){const{provider:r,model:i}=Qw(e),c=s.find(h=>h.slug===r),d=!!r&&!c,f=v.useMemo(()=>{const h=c?Vr[c.engine]?.known_models||[]:[];return Array.from(new Set([...c?.default_model?[c.default_model]:[],...h]))},[c]),g=h=>{const x=s.find(w=>w.slug===h),y=x?.default_model||Vr[x?.engine]?.default_model||"";n(y?`${h}:${y}`:`${h}:`)},m=h=>n(`${r}:${h}`);return l.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[l.jsx(Ct,{value:r,onChange:g,placeholder:d?`⚠ ${r} (no existe)`:"— proveedor —",options:s.map(h=>({value:h.slug,label:h.slug,icon:vd[h.engine]}))}),l.jsx(Xw,{value:i,onChange:m,options:f,invalid:d,invalidHint:`El proveedor "${r}" no está configurado.`})]})}function LO(){const e=rt(),{superAgent:n,isLoading:s,mutate:r}=Kw(),{config:i,patch:c}=vr(),[d,f]=v.useState(""),[g,m]=v.useState([]),[h,x]=v.useState(""),[y,w]=v.useState(null),[S,_]=v.useState(!1),[j,E]=v.useState({model:"",fallback:[]});v.useEffect(()=>{if(!n)return;const B=n.model_fallback?.models||[],L=Array.isArray(B)?B:[];f(n.model||""),m(L),E({model:n.model||"",fallback:L})},[n]);const k=v.useMemo(()=>{const B=i.engines||{};return Object.entries(B).map(([L,D])=>({slug:L,engine:D?.engine||L,default_model:D?.default_model||Vr[D?.engine||L]?.default_model}))},[i.engines]),N=B=>{const{provider:L}=Qw(B);return k.some(D=>D.slug===L)};if(s||!n)return l.jsx(Je,{});const R=d!==j.model||JSON.stringify(g)!==JSON.stringify(j.fallback),A=async()=>{_(!0);try{await c({"super_agent.model":d,"super_agent.model_fallback.enabled":g.length>0,"super_agent.model_fallback.models":g}),e.success("Router guardado."),E({model:d,fallback:g}),r()}catch(B){e.error(B.message)}finally{_(!1)}},M=()=>{const B=h.trim().replace(/:$/,"");!B||!B.includes(":")||g.includes(B)||(m([...g,B]),x(""))},O=(B,L)=>{const D=[...g];D[B]=L,m(D)},U=B=>{m(g.filter((L,D)=>D!==B)),y===B&&w(null)},I=(B,L)=>{const D=B+L;if(D<0||D>=g.length)return;const q=[...g];[q[B],q[D]]=[q[D],q[B]],m(q)};return l.jsx(He,{title:"Router de modelos",description:"Un solo router general (sin casos por tarea). Elegí proveedor y modelo; si el activo falla, prueba la cadena de fallback en orden.",children:l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-muted/20 p-3",children:[l.jsxs(Ue,{tone:"success",children:[l.jsx(mh,{size:11})," default"]}),l.jsx("span",{className:`font-mono text-xs ${!N(d)&&d?"text-amber-400":""}`,children:d||"—"}),g.map(B=>l.jsxs("span",{className:"flex items-center gap-2 text-muted-fg",children:[l.jsx(ij,{size:12}),l.jsx("span",{className:`font-mono text-xs ${N(B)?"":"text-amber-400"}`,children:B})]},B))]}),k.length===0?l.jsx("p",{className:"text-xs text-muted-fg",children:"Agregá un proveedor abajo para poder elegir modelos."}):l.jsx(fe,{label:"Modelo activo (default)",hint:"Proveedor + modelo. Se guarda como provider:model.",children:l.jsx($p,{value:d,onChange:f,providers:k})}),l.jsxs("div",{className:"rounded-lg border border-border bg-muted/20 p-3",children:[l.jsxs("div",{className:"mb-2",children:[l.jsx("div",{className:"text-sm font-medium",children:"Cadena de fallback"}),l.jsx("div",{className:"text-xs text-muted-fg",children:"Si el modelo activo falla, prueba estos en orden. Click en uno para editarlo."})]}),l.jsxs("ul",{className:"mb-3 space-y-1",children:[g.map((B,L)=>{const D=!N(B),q=y===L;return l.jsx("li",{className:"rounded-md bg-card px-2 py-1.5 text-xs",children:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsxs("span",{className:"w-6 text-muted-fg",children:["#",L+1]}),q?l.jsx("div",{className:"flex-1",children:l.jsx($p,{value:B,onChange:F=>O(L,F),providers:k})}):l.jsxs("button",{type:"button",onClick:()=>w(L),className:"flex flex-1 items-center gap-1.5 text-left",children:[D&&l.jsx(bj,{size:12,className:"text-amber-400"}),l.jsx("span",{className:`font-mono ${D?"text-amber-400":""}`,children:B})]}),q?l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>w(null),children:"listo"}):l.jsx(he,{size:"sm",variant:"ghost",onClick:()=>w(L),children:l.jsx(gh,{size:12})}),l.jsx(he,{size:"sm",variant:"ghost",onClick:()=>I(L,-1),disabled:L===0,children:"↑"}),l.jsx(he,{size:"sm",variant:"ghost",onClick:()=>I(L,1),disabled:L===g.length-1,children:"↓"}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>U(L),children:l.jsx(Ms,{size:12})})]})},`${L}-${B}`)}),g.length===0&&l.jsx("li",{className:"text-xs text-muted-fg",children:"Sin fallback configurado."})]}),k.length>0&&l.jsxs("div",{className:"space-y-2",children:[l.jsx("div",{className:"text-xs text-muted-fg",children:"Agregar a la cadena"}),l.jsx($p,{value:h,onChange:x,providers:k}),l.jsxs(he,{size:"sm",variant:"secondary",onClick:M,disabled:!h.includes(":")||h.endsWith(":"),children:[l.jsx(Rn,{size:13})," Agregar a la cadena"]})]})]}),l.jsx(he,{variant:"primary",loading:S,disabled:!R,onClick:A,children:R?"Guardar router":"Guardado"})]})})}function PO({provider:e,onEdit:n,onDelete:s,onToggle:r}){const i=Vp(zO,e.engine),c=Vp(DO,e.engine),d=Vp(vd,e.engine),f=zi.find(x=>x.value===e.engine)?.label||e.engine,g=typeof e.api_key=="string"&&e.api_key.length>0,m=el(e.api_key),h=e.is_active!==!1;return l.jsxs("div",{className:"group flex h-full cursor-pointer flex-col gap-3 rounded-xl border border-border bg-card p-4 transition-colors hover:border-muted-fg/50",onClick:n,children:[l.jsxs("div",{className:"flex items-start gap-3",children:[l.jsx("div",{className:Ie("flex size-10 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br",i),children:l.jsx(d,{className:"size-5 text-white"})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("h3",{className:"truncate text-sm font-semibold",children:e.name||e.slug}),l.jsx("p",{className:"truncate font-mono text-[10px] text-muted-fg",children:e.slug}),l.jsxs("span",{className:Ie("mt-1 inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium",c),children:[l.jsx(d,{className:"size-3"})," ",f]})]}),l.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[l.jsx(Ko,{content:h?"Activo · click para desactivar":"Inactivo · click para activar",children:l.jsxs("button",{type:"button",onClick:x=>{x.stopPropagation(),r()},className:Ie("flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-medium transition-colors",h?"border-emerald-500/40 text-emerald-400 hover:bg-emerald-500/10":"border-border text-muted-fg hover:text-foreground"),children:[l.jsx("span",{className:Ie("size-1.5 rounded-full",h?"bg-emerald-400":"bg-muted-fg/40")}),h?"Active":"Off"]})}),l.jsx(Ko,{content:"Borrar",children:l.jsx("button",{type:"button",onClick:x=>{x.stopPropagation(),s()},className:"rounded-md p-1 text-muted-fg hover:bg-destructive/10 hover:text-destructive",children:l.jsx(Ms,{className:"size-3.5"})})})]})]}),l.jsxs("div",{className:"mt-auto space-y-1 text-xs",children:[l.jsx(mi,{label:"Modelo",value:e.default_model||"—",mono:!0}),e.base_url&&l.jsx(mi,{label:"Base URL",value:e.base_url,mono:!0,truncate:!0}),l.jsx(mi,{label:"API key",value:g?m?`…${m}`:"✓ seteada":"—",mono:!!m}),e.default_temperature!==void 0&&l.jsx(mi,{label:"Temp",value:e.default_temperature.toFixed(1)}),e.pricing?.input_per_million!==void 0&&l.jsx(mi,{label:"$ in/out (1M)",value:`${e.pricing.input_per_million??0} / ${e.pricing.output_per_million??0}`})]})]})}function mi({label:e,value:n,mono:s,truncate:r}){return l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsx("span",{className:"text-muted-fg",children:e}),l.jsx("span",{className:Ie("text-foreground",s&&"font-mono",r&&"max-w-[180px] truncate"),children:n})]})}const $1={name:"",slug:"",engine:"anthropic",base_url:"",api_key_value:"",default_model:"",default_temperature:.7,default_max_tokens:4096,is_active:!0,context_limit_tokens:2e5,model_context_limits_json:"",p_input:"",p_output:"",p_cache_read:"",p_cache_write:""},BO=["anthropic","openai","gemini","groq","openrouter","ollama","custom"];function pi(e){return e.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Du(e){if(e==null)return"";const n=Number(e);return Number.isFinite(n)?String(n):""}function IO(e){return{name:e.name||e.slug,slug:e.slug,engine:e.engine||"custom",base_url:e.base_url||"",api_key_value:"",default_model:e.default_model||"",default_temperature:e.default_temperature??.7,default_max_tokens:e.default_max_tokens??4096,is_active:e.is_active!==!1,context_limit_tokens:e.context_limit_tokens??2e5,model_context_limits_json:e.model_context_limits?JSON.stringify(e.model_context_limits,null,2):"",p_input:Du(e.pricing?.input_per_million),p_output:Du(e.pricing?.output_per_million),p_cache_read:Du(e.pricing?.cache_read_per_million),p_cache_write:Du(e.pricing?.cache_write_per_million)}}function UO({open:e,initial:n,existingSlugs:s,onClose:r,onSave:i}){const c=!!n,[d,f]=v.useState($1),[g,m]=v.useState(!1),[h,x]=v.useState(null),[y,w]=v.useState([]),[S,_]=v.useState(!1),[j,E]=v.useState(null),[k,N]=v.useState(!1),[R,A]=v.useState("");v.useEffect(()=>{if(!e)return;const V=n?IO(n):$1;f(V),x(null),E(null),N(!1);const Y=Vr[V.engine];w(Y?.known_models||[])},[e,n]);const M=V=>f(Y=>({...Y,...V})),O=V=>{const Y=Vr[V];M({engine:V,name:V==="custom"?d.name:zi.find(P=>P.value===V)?.label||V,slug:V==="custom"?d.slug:V,base_url:Y.base_url,default_model:Y.default_model}),w(Y.known_models),E(null)},U=V=>{const Y=Vr[V];M({engine:V,base_url:d.base_url||Y.base_url,default_model:d.default_model||Y.default_model}),w(Y.known_models)},I=async()=>{_(!0),E(null);try{const V=await pd.models({engine:d.engine,slug:d.slug||pi(d.name),base_url:d.base_url||void 0,api_key:d.api_key_value||void 0});if(V.error){E(V.error);return}w(V.models),V.models.length===0&&E("Sin modelos. ¿Key/URL correctas?")}catch(V){E(V.message||"No se pudo listar modelos.")}finally{_(!1)}},B=v.useMemo(()=>d.default_model&&!y.includes(d.default_model)?[d.default_model,...y]:y,[y,d.default_model]),L=()=>{const V=(d.slug||pi(d.name)).trim();if(!V)return x("Slug requerido."),null;if(!c&&s.includes(V))return x(`Ya existe un provider "${V}".`),null;let Y;if(d.model_context_limits_json.trim())try{const $=JSON.parse(d.model_context_limits_json);if(!$||typeof $!="object"||Array.isArray($))throw new Error;Y=$}catch{return x("Límites de contexto por modelo: JSON inválido."),null}const K=[d.p_input,d.p_output,d.p_cache_read,d.p_cache_write].map($=>$.trim()).some(Boolean)?{input_per_million:Number(d.p_input||0),output_per_million:Number(d.p_output||0),cache_read_per_million:Number(d.p_cache_read||0),cache_write_per_million:Number(d.p_cache_write||0)}:void 0;return{provider:{slug:V,name:d.name.trim()||V,engine:d.engine,base_url:d.base_url.trim()||void 0,default_model:d.default_model.trim()||void 0,default_temperature:d.default_temperature,default_max_tokens:d.default_max_tokens,is_active:d.is_active,context_limit_tokens:d.context_limit_tokens||void 0,model_context_limits:Y,pricing:K},modelLimits:Y}},D=()=>{const V=L();if(!V)return;const{provider:Y}=V,P={name:Y.name,engine:Y.engine,is_active:Y.is_active!==!1,default_temperature:Y.default_temperature,default_max_tokens:Y.default_max_tokens};Y.base_url&&(P.base_url=Y.base_url),Y.default_model&&(P.default_model=Y.default_model),Y.context_limit_tokens&&(P.context_limit_tokens=Y.context_limit_tokens),Y.model_context_limits&&(P.model_context_limits=Y.model_context_limits),Y.pricing&&(P.pricing=Y.pricing),d.api_key_value.trim()&&(P.api_key=d.api_key_value.trim()),A(JSON.stringify(P,null,2)),x(null),N(!0)},q=async()=>{m(!0),x(null);try{if(k){const Y=(d.slug||pi(d.name)).trim();if(!Y){x("Slug requerido (en el formulario).");return}let P;try{P=JSON.parse(R)}catch{x("JSON inválido: revisá la sintaxis.");return}if(!P||typeof P!="object"||Array.isArray(P)){x("El JSON debe ser un objeto con la config del provider.");return}const K=P;if(!K.engine||typeof K.engine!="string"){x('Falta "engine" (ej. "anthropic", "ollama").');return}const $={slug:Y,name:typeof K.name=="string"?K.name:Y,engine:String(K.engine),base_url:typeof K.base_url=="string"?K.base_url:void 0,default_model:typeof K.default_model=="string"?K.default_model:void 0,is_active:K.is_active!==!1};await i({provider:$,raw:K,originalSlug:n?.slug}),r();return}const V=L();if(!V)return;await i({provider:V.provider,apiKeyValue:d.api_key_value.trim()||void 0,originalSlug:n?.slug}),r()}catch(V){x(V.message||"Error al guardar.")}finally{m(!1)}},F=c&&za(n?.api_key),Z=el(n?.api_key),H=F?`…${Z??""} (ya seteada)`:"sk-…",G=d.engine==="ollama",Q=Vr[d.engine]?.api_key_env;return l.jsx(ma,{open:e,onClose:r,title:c?`Editar ${n?.name||n?.slug}`:"Nuevo provider",description:"Proveedor LLM. El motor (engine) define qué adapter usa (openai, ollama, …).",size:"lg",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:r,disabled:g,children:"Cancelar"}),l.jsx(he,{variant:"primary",onClick:q,loading:g,children:c?"Guardar":"Crear"})]}),children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[c?l.jsx("span",{}):l.jsx("div",{className:"flex flex-wrap gap-1.5",children:BO.map(V=>{const Y=vd[V],P=V==="custom"?"Custom":zi.find($=>$.value===V)?.label||V,K=d.engine===V;return l.jsxs("button",{type:"button",onClick:()=>O(V),className:`flex items-center gap-1.5 rounded-lg border px-2.5 py-1 text-xs transition-colors ${K?"border-emerald-500/50 bg-emerald-500/10 text-emerald-400":"border-border text-muted-fg hover:border-muted-fg/60 hover:text-foreground"}`,children:[l.jsx(Y,{className:"size-3.5"})," ",P]},V)})}),l.jsxs("button",{type:"button",onClick:()=>k?N(!1):D(),className:`flex shrink-0 items-center gap-1.5 rounded-lg border px-2.5 py-1 text-xs transition-colors ${k?"border-sky-500/50 bg-sky-500/10 text-sky-400":"border-border text-muted-fg hover:text-foreground"}`,children:[l.jsx(SR,{className:"size-3.5"})," ",k?"Volver al formulario":"JSON"]})]}),k?l.jsxs("div",{className:"space-y-2",children:[l.jsx(fe,{label:"Config del provider (JSON)",hint:`Se guarda como engines.${d.slug||pi(d.name)||"<slug>"} en config.json`,children:l.jsx(Qt,{rows:14,className:"font-mono text-xs",value:R,onChange:V=>A(V.target.value),spellCheck:!1})}),l.jsxs("p",{className:"text-[11px] text-muted-fg",children:["Debe ser un objeto JSON válido con al menos ",l.jsx("code",{children:"engine"}),". El slug se toma del formulario."]})]}):l.jsxs(l.Fragment,{children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:"Nombre",children:l.jsx(Ce,{value:d.name,onChange:V=>M({name:V.target.value,slug:c?d.slug:pi(V.target.value)}),placeholder:"Mi provider"})}),l.jsx(fe,{label:"Motor (engine)",children:l.jsx(Ct,{value:d.engine,onChange:V=>U(V),options:zi.map(V=>({value:V.value,label:V.label,icon:vd[V.value]}))})})]}),l.jsx(fe,{label:"URL base (base_url)",hint:"Se completa sola al elegir un proveedor.",children:l.jsx(Ce,{value:d.base_url,onChange:V=>M({base_url:V.target.value}),placeholder:"https://api.openai.com/v1"})}),!G&&l.jsx(fe,{label:"API key",hint:F?"Dejá en blanco para mantener la actual.":Q?`Se guarda como secreto. Env sugerida: ${Q}`:"Se guarda como secreto.",children:l.jsx(Ce,{type:"password",autoComplete:"new-password",value:d.api_key_value,onChange:V=>M({api_key_value:V.target.value}),placeholder:H})}),l.jsx(fe,{label:"Modelo por defecto",children:l.jsxs("div",{className:"space-y-2",children:[l.jsxs("div",{className:"flex items-start gap-2",children:[l.jsx(Xw,{value:d.default_model,onChange:V=>M({default_model:V}),options:B,className:"flex-1"}),l.jsxs(he,{size:"sm",variant:"secondary",onClick:I,disabled:S,title:"Lista los modelos reales del proveedor",children:[S?l.jsx(ph,{className:"size-3.5 animate-spin"}):l.jsx(rl,{className:"size-3.5"}),"Cargar modelos"]})]}),j&&l.jsx("p",{className:"text-[11px] text-amber-400",children:j})]})}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:"Máx. tokens (max_tokens)",children:l.jsx(Ce,{type:"number",min:256,step:256,value:d.default_max_tokens,onChange:V=>M({default_max_tokens:parseInt(V.target.value)||4096})})}),l.jsx(fe,{label:`Temperatura: ${d.default_temperature.toFixed(1)}`,children:l.jsx("input",{type:"range",min:0,max:2,step:.1,value:d.default_temperature,onChange:V=>M({default_temperature:parseFloat(V.target.value)}),className:"mt-2 w-full accent-foreground"})})]}),l.jsxs("details",{className:"rounded-md border border-border bg-muted/20 p-3",children:[l.jsx("summary",{className:"cursor-pointer text-xs font-medium text-muted-fg",children:"Análisis de tokens / pricing (opcional)"}),l.jsxs("div",{className:"mt-3 space-y-3",children:[l.jsx(fe,{label:"Límite de contexto (tokens)",children:l.jsx(Ce,{type:"number",min:0,step:1024,value:d.context_limit_tokens,onChange:V=>M({context_limit_tokens:parseInt(V.target.value)||0})})}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:"$ entrada / 1M",children:l.jsx(Ce,{type:"number",min:0,step:1e-4,value:d.p_input,onChange:V=>M({p_input:V.target.value}),placeholder:"0.15"})}),l.jsx(fe,{label:"$ salida / 1M",children:l.jsx(Ce,{type:"number",min:0,step:1e-4,value:d.p_output,onChange:V=>M({p_output:V.target.value}),placeholder:"0.60"})}),l.jsx(fe,{label:"$ cache read / 1M",children:l.jsx(Ce,{type:"number",min:0,step:1e-4,value:d.p_cache_read,onChange:V=>M({p_cache_read:V.target.value}),placeholder:"0.03"})}),l.jsx(fe,{label:"$ cache write / 1M",children:l.jsx(Ce,{type:"number",min:0,step:1e-4,value:d.p_cache_write,onChange:V=>M({p_cache_write:V.target.value}),placeholder:"0.00"})})]}),l.jsx(fe,{label:"Límites de contexto por modelo (JSON)",hint:'{"gpt-4o-mini":128000}',children:l.jsx(Qt,{rows:3,className:"font-mono text-xs",value:d.model_context_limits_json,onChange:V=>M({model_context_limits_json:V.target.value})})})]})]}),l.jsx(sn,{checked:d.is_active,onChange:V=>M({is_active:V}),label:"Activo (los agentes pueden usarlo)"})]}),h&&l.jsx("div",{className:"rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive",children:h})]})})}const HO=new Set(zi.map(e=>e.value));function qO(e,n){const s=typeof n.engine=="string"&&n.engine||(HO.has(e)?e:"custom");return{slug:e,name:typeof n.name=="string"?n.name:void 0,engine:s,base_url:typeof n.base_url=="string"?n.base_url:void 0,api_key:typeof n.api_key=="string"?n.api_key:void 0,default_model:typeof n.default_model=="string"?n.default_model:void 0,default_temperature:typeof n.default_temperature=="number"?n.default_temperature:void 0,default_max_tokens:typeof n.default_max_tokens=="number"?n.default_max_tokens:void 0,is_active:typeof n.is_active=="boolean"?n.is_active:void 0,context_limit_tokens:typeof n.context_limit_tokens=="number"?n.context_limit_tokens:void 0,model_context_limits:n.model_context_limits||void 0,pricing:n.pricing||void 0}}function VO(){const e=rt(),{config:n,isLoading:s,patch:r,mutate:i}=vr(),[c,d]=v.useState(!1),[f,g]=v.useState(null);if(s)return l.jsx(Je,{});const m=n.engines||{},h=Object.entries(m).map(([E,k])=>qO(E,k||{})),x=h.map(E=>E.slug),y=()=>{g(null),d(!0)},w=E=>{g(E),d(!0)},S=async({provider:E,apiKeyValue:k,raw:N})=>{if(N){await r({[`engines.${E.slug}`]:N}),e.success("Provider guardado (JSON)."),i();return}const R=`engines.${E.slug}`,A={[`${R}.name`]:E.name,[`${R}.engine`]:E.engine,[`${R}.is_active`]:E.is_active!==!1,[`${R}.default_temperature`]:E.default_temperature,[`${R}.default_max_tokens`]:E.default_max_tokens},M=[],O=(U,I)=>{I===void 0||I===""?M.push(`${R}.${U}`):A[`${R}.${U}`]=I};O("base_url",E.base_url),O("default_model",E.default_model),O("context_limit_tokens",E.context_limit_tokens),O("pricing",E.pricing),O("model_context_limits",E.model_context_limits),k&&(A[`${R}.api_key`]=k),await r(A,M),e.success("Provider guardado."),i()},_=async E=>{try{await r({[`engines.${E.slug}.is_active`]:E.is_active===!1}),i()}catch(k){e.error(k.message)}},j=async E=>{if(confirm(`Borrar provider ${E.name||E.slug}?`))try{await r(void 0,[`engines.${E.slug}`]),e.success("Provider borrado."),i()}catch(k){e.error(k.message)}};return l.jsxs(He,{title:"Proveedores",description:"Proveedores LLM (API). Cada provider usa un engine/adapter (openai, ollama, …) con su key y URL.",action:l.jsxs(he,{size:"sm",variant:"primary",onClick:y,children:[l.jsx(Rn,{size:14})," Nuevo provider"]}),children:[h.length===0?l.jsx(lt,{children:"Sin providers. Agregá uno con el botón de arriba."}):l.jsxs("div",{className:"grid grid-cols-1 items-stretch gap-3 sm:grid-cols-2 lg:grid-cols-3",children:[h.map(E=>l.jsx(PO,{provider:E,onEdit:()=>w(E),onDelete:()=>j(E),onToggle:()=>_(E)},E.slug)),l.jsxs("button",{type:"button",onClick:y,className:"flex min-h-[120px] flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-border text-muted-fg transition-colors hover:border-muted-fg/60 hover:text-foreground",children:[l.jsx(Rn,{size:20}),l.jsx("span",{className:"text-sm font-medium",children:"Agregar provider"})]})]}),l.jsx(UO,{open:c,initial:f,existingSlugs:x,onClose:()=>{d(!1),g(null)},onSave:S})]})}function Zw(){return l.jsxs("div",{className:"space-y-6",children:[l.jsx(LO,{}),l.jsx(VO,{})]})}function $O(){const e=rt(),[n,s]=v.useState(!1),i=Qe(n?"/agents/vault?include_removed=1":"/agents/vault",()=>Jt.vault({includeRemoved:n})),c=i.data||[],[d,f]=v.useState(null),g=async h=>{const x=h.source!=="user",y=x?C("base.defaults_tombstone_msg",{slug:h.slug}):C("base.defaults_delete_msg",{slug:h.slug});if(confirm(y))try{await Jt.vaultRemove(h.slug),e.success(C(x?"base.defaults_hidden":"base.defaults_deleted")),i.mutate()}catch(w){e.error(w.message)}},m=async h=>{try{await Jt.vaultRestore(h),e.success(C("base.defaults_restored")),i.mutate()}catch(x){e.error(x.message)}};return l.jsxs(He,{title:C("base.defaults_title"),description:C("base.defaults_desc"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(sn,{checked:n,onChange:s,label:C("base.defaults_show_removed")}),l.jsxs(he,{size:"sm",onClick:()=>f("new"),children:[l.jsx(Rn,{size:14})," ",C("base.defaults_new")]})]}),children:[i.isLoading&&l.jsx(Je,{}),!i.isLoading&&c.length===0&&l.jsx(lt,{children:C("base.defaults_empty")}),l.jsx("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:c.map(h=>{const x=n&&h.tombstoned;return l.jsxs("div",{className:`flex flex-col gap-2 rounded-xl border bg-card p-4 ${x?"border-dashed border-border opacity-60":"border-border"}`,children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[l.jsx("div",{className:"flex size-9 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-slate-600 to-gray-600",children:h.is_master?l.jsx(ks,{className:"size-4 text-white"}):l.jsx(vn,{className:"size-4 text-white"})}),l.jsx("span",{className:"truncate text-sm font-semibold",children:h.slug}),l.jsx(GO,{source:h.source})]}),l.jsx("div",{className:"flex shrink-0 items-center gap-0.5",children:x?l.jsx(Gp,{label:C("base.defaults_restore"),onClick:()=>m(h.slug),variant:"secondary",children:l.jsx(gj,{size:13})}):l.jsxs(l.Fragment,{children:[l.jsx(Gp,{label:C("base.defaults_edit"),onClick:()=>f(h),variant:"ghost",children:l.jsx(gh,{size:13})}),l.jsx(Gp,{label:h.source==="user"?C("base.defaults_delete"):C("base.defaults_hide"),onClick:()=>g(h),variant:"ghost-destructive",children:l.jsx(Ms,{size:13})})]})})]}),h.model?l.jsx(Ue,{tone:"info",children:h.model}):l.jsx("span",{className:"text-[10px] text-muted-fg",children:"modelo: default del router"}),h.description&&l.jsx("p",{className:"line-clamp-3 text-xs text-muted-fg",children:h.description}),l.jsxs("div",{className:"flex flex-wrap gap-1",children:[h.role&&l.jsx(Ue,{children:h.role}),h.skills?.map(y=>l.jsxs("span",{className:"inline-flex items-center gap-0.5 rounded bg-muted px-1 py-0.5 text-[9px] text-muted-fg",children:[l.jsx(ol,{size:9})," ",y]},y)),h.tools?.map(y=>l.jsxs("span",{className:"inline-flex items-center gap-0.5 rounded bg-muted px-1 py-0.5 text-[9px] text-muted-fg",children:[l.jsx(ll,{size:9})," ",y]},y))]})]},h.slug)})}),d!==null&&l.jsx(YO,{agent:d==="new"?null:d,onClose:()=>f(null),onSaved:()=>{f(null),i.mutate()}})]})}function GO({source:e}){return e==="user"?l.jsx(Ue,{tone:"success",children:"user"}):e==="user-override"?l.jsx(Ue,{tone:"warning",children:"override"}):l.jsx(Ue,{tone:"muted",children:"bundled"})}function Gp({label:e,onClick:n,variant:s="ghost",children:r}){const i="inline-flex size-7 items-center justify-center rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",c={ghost:"text-muted-fg hover:bg-accent hover:text-accent-fg","ghost-destructive":"text-muted-fg hover:bg-destructive/15 hover:text-destructive",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80"};return l.jsxs(Qh,{children:[l.jsx(Zh,{render:l.jsx("button",{type:"button",onClick:n,"aria-label":e,className:`${i} ${c[s]}`,children:r})}),l.jsx(Jh,{children:e})]})}function YO({agent:e,onClose:n,onSaved:s}){const r=rt(),[i,c]=v.useState(!1),d=!e,[f,g]=v.useState(e?.slug??""),[m,h]=v.useState(e?.role??""),[x,y]=v.useState(e?.model??""),[w,S]=v.useState(e?.description??""),[_,j]=v.useState(e?.language??"es"),[E,k]=v.useState((e?.skills??[]).join(", ")),[N,R]=v.useState((e?.tools??[]).join(", ")),[A,M]=v.useState(!!e?.is_master),[O,U]=v.useState(e?.body??""),I=async()=>{const B={role:m||void 0,model:x||void 0,description:w||void 0,language:_||void 0,skills:E,tools:N,is_master:A};c(!0);try{if(d){if(!/^[a-z][a-z0-9_-]*$/.test(f))throw new Error(C("base.defaults_slug_invalid"));await Jt.vaultCreate(f,B,O),r.success(C("base.defaults_created",{slug:f}))}else await Jt.vaultPatch(e.slug,{fields:B,body:O}),r.success(C("base.defaults_saved",{slug:e.slug}));s()}catch(L){r.error(L.message)}finally{c(!1)}};return l.jsx(ma,{open:!0,onClose:n,title:d?C("base.defaults_new_title"):C("base.defaults_edit_title",{slug:e.slug}),description:d?C("base.defaults_new_desc"):e.source==="bundled"?C("base.defaults_bundled_desc"):C("base.defaults_user_desc"),size:"lg",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:i,children:C("common.cancel")}),l.jsx(he,{variant:"primary",onClick:I,loading:i,children:C("common.save")})]}),children:l.jsxs("div",{className:"space-y-3",children:[d&&l.jsx(fe,{label:"slug",hint:"kebab-case, ej. reviewer, my-agent, content-writer",children:l.jsx(Ce,{autoFocus:!0,value:f,onChange:B=>g(B.target.value),placeholder:"reviewer"})}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:"role",children:l.jsx(Ce,{value:m,onChange:B=>h(B.target.value),placeholder:"Code reviewer"})}),l.jsx(fe,{label:"model",children:l.jsx(Ce,{value:x,onChange:B=>y(B.target.value),placeholder:"openrouter:..."})}),l.jsx(fe,{label:"language",children:l.jsx(Ce,{value:_,onChange:B=>j(B.target.value),placeholder:"es"})}),l.jsx(fe,{label:"is_master",children:l.jsx("div",{className:"flex h-9 items-center",children:l.jsx(sn,{checked:A,onChange:M,label:C("base.defaults_master_label")})})})]}),l.jsx(fe,{label:"description",children:l.jsx(Ce,{value:w,onChange:B=>S(B.target.value)})}),l.jsx(fe,{label:"skills",hint:"separadas por coma",children:l.jsx(Ce,{value:E,onChange:B=>k(B.target.value),placeholder:"code-review, git"})}),l.jsx(fe,{label:"tools",hint:"separadas por coma",children:l.jsx(Ce,{value:N,onChange:B=>R(B.target.value),placeholder:"read, write, run"})}),l.jsx(fe,{label:"body",hint:"markdown — extiende el system prompt del agente",children:l.jsx(Qt,{value:O,onChange:B=>U(B.target.value),rows:10,placeholder:"# Mission\\n..."})})]})})}const FO={apx:"success",claude:"info",codex:"warning"};function XO(){const[e,n]=v.useState(""),s=Qe(`/sessions?engine=${e}`,()=>W3.global(e||void 0)),r=s.data?.sessions||[];return l.jsxs(He,{title:C("base.sessions_title"),description:C("base.sessions_desc"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("div",{className:"w-40",children:l.jsx(Ct,{value:e,onChange:n,options:[{value:"",label:C("base.sessions_all")},{value:"apx",label:"apx"},{value:"claude",label:"claude"},{value:"codex",label:"codex"}]})}),l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>s.mutate(),children:l.jsx(rl,{size:13})})]}),children:[s.isLoading&&l.jsx(Je,{}),s.error&&l.jsx(lt,{children:C("base.sessions_error",{msg:s.error.message})}),!s.isLoading&&!s.error&&r.length===0&&l.jsx(lt,{children:C("base.sessions_empty")}),l.jsx("ul",{className:"space-y-1 text-sm",children:r.map((i,c)=>l.jsxs("li",{className:"flex items-center gap-3 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx(Ue,{tone:FO[i.engine]||"muted",children:i.engine}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("div",{className:"truncate",children:i.title||i.id}),l.jsx("div",{className:"truncate font-mono text-[10px] text-muted-fg",children:i.cwd})]}),i.mtime>0&&l.jsx("span",{className:"shrink-0 text-[11px] text-muted-fg",children:new Date(i.mtime).toLocaleString()})]},`${i.engine}-${i.id}-${c}`))})]})}function KO(){const e=Ua(),[n,s]=v.useState("open"),r=Qe(`/tasks?state=${n}`,()=>lr.global(n));return l.jsxs(He,{title:C("project.global_tasks.title"),description:C("project.global_tasks.subtitle"),action:l.jsx("div",{className:"flex gap-1",children:["open","done","dropped","all"].map(i=>l.jsx(he,{size:"sm",variant:n===i?"primary":"ghost",onClick:()=>s(i),children:i},i))}),children:[r.isLoading&&l.jsx(Je,{}),!r.isLoading&&(r.data?.length??0)===0&&l.jsx(lt,{children:C("project.global_tasks.empty")}),l.jsx("ul",{className:"space-y-2 text-sm",children:(r.data||[]).map(i=>l.jsxs("li",{className:"flex items-start gap-3 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx("button",{type:"button",onClick:()=>e(`/p/${i.project_id}/tasks`),title:C("project.global_tasks.go_project"),children:l.jsx(Ue,{tone:"info",children:(i.project_name||"").split("/").pop()||i.project_id})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("div",{className:"font-medium",children:i.title}),l.jsxs("div",{className:"mt-0.5 flex flex-wrap items-center gap-2 text-xs text-muted-fg",children:[l.jsx("span",{children:i.state}),i.agent&&l.jsxs(Ue,{tone:"muted",children:["@",i.agent]}),i.tags?.map(c=>l.jsxs("span",{children:["#",c]},c)),i.due&&l.jsxs("span",{children:[C("project.global_tasks.due")," ",i.due]})]})]})]},`${i.project_id}-${i.id}`))})]})}const Jw=v.createContext(void 0);function xx(){const e=v.useContext(Jw);if(e===void 0)throw new Error(Nn(64));return e}let QO=(function(e){return e.activationDirection="data-activation-direction",e.orientation="data-orientation",e})({});const bx={tabActivationDirection:e=>({[QO.activationDirection]:e})},ZO=v.forwardRef(function(n,s){const{className:r,defaultValue:i=0,onValueChange:c,orientation:d="horizontal",render:f,value:g,style:m,...h}=n,x=n.defaultValue!==void 0,y=v.useRef([]),[w,S]=v.useState(()=>new Map),[_,j]=Gi({controlled:g,default:i,name:"Tabs",state:"value"}),E=g!==void 0,[k,N]=v.useState(()=>new Map),R=v.useCallback(oe=>{if(oe===void 0)return null;for(const[ue,te]of k.entries())if(te!=null&&oe===(te.value??te.index))return ue;return null},[k]),[A,M]=v.useState(()=>({previousValue:_,tabActivationDirection:"none"})),{previousValue:O,tabActivationDirection:U}=A;let I=U,B=!1;O!==_&&(I=G1(O,_,d,k),B=O!=null&&_!=null&&R(_)==null);const L=B?O:_,D=O!==L||U!==I;Re(()=>{D&&M({previousValue:L,tabActivationDirection:I})},[L,D,I]);const q=Ae((oe,ue)=>{const te=G1(_,oe,d,k);ue.activationDirection=te,c?.(oe,ue),!ue.isCanceled&&j(oe)}),F=Ae((oe,ue)=>{c?.(oe,tt(ue,void 0,void 0,{activationDirection:"none"}))}),Z=Ae((oe,ue)=>{S(te=>{if(te.get(oe)===ue)return te;const Ne=new Map(te);return Ne.set(oe,ue),Ne})}),H=Ae((oe,ue)=>{S(te=>{if(!te.has(oe)||te.get(oe)!==ue)return te;const Ne=new Map(te);return Ne.delete(oe),Ne})}),G=v.useCallback(oe=>w.get(oe),[w]),Q=v.useCallback(oe=>{for(const ue of k.values())if(oe===ue?.value)return ue?.id},[k]),V=v.useMemo(()=>({getTabElementBySelectedValue:R,getTabIdByPanelValue:Q,getTabPanelIdByValue:G,onValueChange:q,orientation:d,registerMountedTabPanel:Z,setTabMap:N,unregisterMountedTabPanel:H,tabActivationDirection:I,value:_}),[R,Q,G,q,d,Z,N,H,I,_]),Y=v.useMemo(()=>{for(const oe of k.values())if(oe!=null&&oe.value===_)return oe},[k,_]),P=v.useMemo(()=>{for(const oe of k.values())if(oe!=null&&!oe.disabled)return oe.value},[k]),K=v.useRef(!x),$=v.useRef(x),W=v.useRef(!1);Re(()=>{if(E)return;function oe($e,be){j($e),M(Se=>Se.previousValue===$e&&Se.tabActivationDirection==="none"?Se:{previousValue:$e,tabActivationDirection:"none"}),F($e,be),K.current=!1}if(k.size===0){if(!W.current||_===null)return;oe(null,H0);return}W.current=!0;const ue=Y?.disabled,te=Y==null&&_!==null;if(!ue&&_===i&&($.current=!1),$.current&&ue&&_===i)return;const Ne=K.current;if(ue||te){const $e=P??null;if(_===$e){K.current=!1;return}let be=H0;Ne?be=q0:ue&&(be=Ij),oe($e,be);return}Ne&&Y!=null&&(F(_,q0),K.current=!1)},[i,P,E,F,Y,j,k,_]);const ie=Lt("div",n,{state:{orientation:d,tabActivationDirection:I},ref:s,props:h,stateAttributesMapping:bx});return l.jsx(Jw.Provider,{value:V,children:l.jsx(mx,{elementsRef:y,children:ie})})});function G1(e,n,s,r){if(e==null||n==null)return"none";let i=null,c=null;for(const[g,m]of r.entries()){if(m==null)continue;const h=m.value??m.index;if(e===h&&(i=g),n===h&&(c=g),i!=null&&c!=null)break}if(i==null||c==null)return i!==c&&(typeof e=="number"||typeof e=="string")&&typeof e==typeof n?s==="horizontal"?n>e?"right":"left":n>e?"down":"up":"none";const d=i.getBoundingClientRect(),f=c.getBoundingClientRect();if(s==="horizontal"){if(f.left<d.left)return"left";if(f.left>d.left)return"right"}else{if(f.top<d.top)return"up";if(f.top>d.top)return"down"}return"none"}const Ww="data-composite-item-active";function JO(e={}){const{highlightItemOnHover:n,highlightedIndex:s,onHighlightedIndexChange:r}=uw(),{ref:i,index:c}=gx(e),d=s===c,f=v.useRef(null),g=Ts(i,f);return{compositeProps:v.useMemo(()=>({tabIndex:d?0:-1,onFocus(){r(c)},onMouseMove(){const h=f.current;if(!n||!h)return;const x=h.hasAttribute("disabled")||h.ariaDisabled==="true";!d&&!x&&h.focus()}}),[d,r,c,n]),compositeRef:g,index:c}}const e2=v.createContext(void 0);function WO(){const e=v.useContext(e2);if(e===void 0)throw new Error(Nn(65));return e}const ez=v.forwardRef(function(n,s){const{className:r,disabled:i=!1,render:c,value:d,id:f,nativeButton:g=!0,style:m,...h}=n,{value:x,getTabPanelIdByValue:y,orientation:w}=xx(),{activateOnFocus:S,highlightedTabIndex:_,onTabActivation:j,registerTabResizeObserverElement:E,setHighlightedTabIndex:k,tabsListElement:N}=WO(),R=br(f),A=v.useMemo(()=>({disabled:i,id:R,value:d}),[i,R,d]),{compositeProps:M,compositeRef:O,index:U}=JO({metadata:A}),I=d===x,B=v.useRef(!1),L=v.useRef(null);v.useEffect(()=>{const K=L.current;if(K)return E(K)},[E]),Re(()=>{if(B.current){B.current=!1;return}if(!(I&&U>-1&&_!==U))return;const K=N;if(K!=null){const $=zn(xt(K));if($&&Ye(K,$))return}i||k(U)},[I,U,_,k,i,N]);const{getButtonProps:D,buttonRef:q}=ml({disabled:i,native:g,focusableWhenDisabled:!0}),F=y(d),Z=v.useRef(!1),H=v.useRef(!1);function G(K){I||i||j(d,tt(Ns,K.nativeEvent,void 0,{activationDirection:"none"}))}function Q(K){I||(U>-1&&!i&&k(U),!i&&S&&(!Z.current||Z.current&&H.current)&&j(d,tt(Ns,K.nativeEvent,void 0,{activationDirection:"none"})))}function V(K){if(I||i)return;Z.current=!0;function $(){Z.current=!1,H.current=!1}(!K.button||K.button===0)&&(H.current=!0,xt(K.currentTarget).addEventListener("pointerup",$,{once:!0}))}return Lt("button",n,{state:{disabled:i,active:I,orientation:w},ref:[s,q,O,L],props:[M,{role:"tab","aria-controls":F,"aria-selected":I,id:R,onClick:G,onFocus:Q,onPointerDown:V,[Ww]:I?"":void 0,onKeyDownCapture(){B.current=!0}},h,D]})});let tz=(function(e){return e.index="data-index",e.activationDirection="data-activation-direction",e.orientation="data-orientation",e.hidden="data-hidden",e[e.startingStyle=Xr.startingStyle]="startingStyle",e[e.endingStyle=Xr.endingStyle]="endingStyle",e})({});const nz={...bx,...dl},az=v.forwardRef(function(n,s){const{className:r,value:i,render:c,keepMounted:d=!1,style:f,...g}=n,{value:m,getTabIdByPanelValue:h,orientation:x,tabActivationDirection:y,registerMountedTabPanel:w,unregisterMountedTabPanel:S}=xx(),_=br(),j=v.useMemo(()=>({id:_,value:i}),[_,i]),{ref:E,index:k}=gx({metadata:j}),N=i===m,{mounted:R,transitionStatus:A,setMounted:M}=tc(N),O=!R,U=h(i),I={hidden:O,orientation:x,tabActivationDirection:y,transitionStatus:A},B=v.useRef(null),L=Lt("div",n,{state:I,ref:[s,E,B],props:[{"aria-labelledby":U,hidden:O,id:_,role:"tabpanel",tabIndex:N?0:-1,inert:Kh(!N),[tz.index]:k},g],stateAttributesMapping:nz});return xr({open:N,ref:B,onComplete(){N||M(!1)}}),Re(()=>{if(!(O&&!d)&&_!=null)return w(i,_),()=>{S(i,_)}},[O,d,i,_,w,S]),d||R?L:null});function sz(e){return e==null||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true"}const rz=[];function oz(e){const{itemSizes:n,cols:s=1,loopFocus:r=!0,onLoop:i,dense:c=!1,orientation:d="both",direction:f,highlightedIndex:g,onHighlightedIndexChange:m,rootRef:h,enableHomeAndEndKeys:x=!1,stopEventPropagation:y=!1,disabledIndices:w,modifierKeys:S=rz}=e,[_,j]=v.useState(0),E=s>1,k=v.useRef(null),N=Ts(k,h),R=v.useRef([]),A=v.useRef(!1),M=g??_,O=Ae((L,D=!1)=>{if((m??j)(L),D){const q=R.current[L];z1(k.current,q,f,d)}}),U=Ae(L=>{if(L.size===0||A.current)return;A.current=!0;const D=Array.from(L.keys()),q=D.find(Z=>Z?.hasAttribute(Ww))??null,F=q?D.indexOf(q):-1;F!==-1&&O(F),z1(k.current,q,f,d)}),I=Ae((L,D,q)=>i?i?.(L,D,q,R):q),B=v.useMemo(()=>({"aria-orientation":d==="both"?void 0:d,ref:N,onFocus(L){const D=k.current,q=En(L.nativeEvent);!D||q==null||!O1(q)||q.setSelectionRange(0,q.value.length??0)},onKeyDown(L){const D=x?ix:jw;if(!D.has(L.key)||lz(L,S)||!k.current)return;const F=f==="rtl",Z=F?hd:Mi,H={horizontal:Z,vertical:Ho,both:Z}[d],G=F?Mi:hd,Q={horizontal:G,vertical:Ai,both:G}[d],V=En(L.nativeEvent);if(V!=null&&O1(V)&&!sz(V)){const ie=V.selectionStart,oe=V.selectionEnd,ue=V.value??"";if(ie==null||L.shiftKey||ie!==oe||L.key!==Q&&ie<ue.length||L.key!==H&&ie>0)return}let Y=M;const P=Gu(R,w),K=Lg(R,w);if(E){const ie=n||Array.from({length:R.current.length},()=>({width:1,height:1})),oe=Xj(ie,s,c),ue=oe.findIndex(Ne=>Ne!=null&&!Cs(R.current,Ne,w)),te=oe.reduce((Ne,$e,be)=>$e!=null&&!Cs(R.current,$e,w)?be:Ne,-1);Y=oe[Fj(oe.map(Ne=>Ne!=null?R.current[Ne]:null),{event:L,orientation:d,loopFocus:r,onLoop:I,cols:s,disabledIndices:Qj([...w||R.current.map((Ne,$e)=>Cs(R.current,$e)?$e:void 0),void 0],oe),minIndex:ue,maxIndex:te,prevIndex:Kj(M>K?P:M,ie,oe,s,L.key===Ho?"bl":L.key===Mi?"tr":"tl"),rtl:F})]}const $={horizontal:[Z],vertical:[Ho],both:[Z,Ho]}[d],W={horizontal:[G],vertical:[Ai],both:[G,Ai]}[d],ce=E?D:{horizontal:x?X5:yw,vertical:x?K5:_w,both:D}[d];x&&(L.key===Yd?Y=P:L.key===Fd&&(Y=K)),Y===M&&($.includes(L.key)||W.includes(L.key))&&(r&&Y===K&&$.includes(L.key)?(Y=P,i&&(Y=i(L,M,Y,R))):r&&Y===P&&W.includes(L.key)?(Y=K,i&&(Y=i(L,M,Y,R))):Y=On(R.current,{startingIndex:Y,decrement:W.includes(L.key),disabledIndices:w})),Y!==M&&!Vi(R.current,Y)&&(y&&L.stopPropagation(),ce.has(L.key)&&L.preventDefault(),O(Y,!0),queueMicrotask(()=>{R.current[Y]?.focus()}))}}),[s,c,f,w,R,x,M,E,n,r,i,I,N,S,O,d,y]);return v.useMemo(()=>({props:B,highlightedIndex:M,onHighlightedIndexChange:O,elementsRef:R,disabledIndices:w,onMapChange:U,relayKeyboardEvent:B.onKeyDown}),[B,M,O,R,w,U])}function lz(e,n){for(const s of e4.values())if(!n.includes(s)&&e.getModifierState(s))return!0;return!1}function iz(e){const{render:n,className:s,style:r,refs:i=Ui,props:c=Ui,state:d=an,stateAttributesMapping:f,highlightedIndex:g,onHighlightedIndexChange:m,orientation:h,dense:x,itemSizes:y,loopFocus:w,onLoop:S,cols:_,enableHomeAndEndKeys:j,onMapChange:E,stopEventPropagation:k=!0,rootRef:N,disabledIndices:R,modifierKeys:A,highlightItemOnHover:M=!1,tag:O="div",...U}=e,I=Fh(),{props:B,highlightedIndex:L,onHighlightedIndexChange:D,elementsRef:q,onMapChange:F,relayKeyboardEvent:Z}=oz({itemSizes:y,cols:_,loopFocus:w,onLoop:S,dense:x,orientation:h,highlightedIndex:g,onHighlightedIndexChange:m,rootRef:N,stopEventPropagation:k,enableHomeAndEndKeys:j,direction:I,disabledIndices:R,modifierKeys:A}),H=Lt(O,e,{state:d,ref:i,props:[B,...c,U],stateAttributesMapping:f}),G=v.useMemo(()=>({highlightedIndex:L,onHighlightedIndexChange:D,highlightItemOnHover:M,relayKeyboardEvent:Z}),[L,D,M,Z]);return l.jsx(cw.Provider,{value:G,children:l.jsx(mx,{elementsRef:q,onMapChange:Q=>{E?.(Q),F(Q)},children:H})})}const cz=v.forwardRef(function(n,s){const{activateOnFocus:r=!1,className:i,loopFocus:c=!0,render:d,style:f,...g}=n,{onValueChange:m,orientation:h,value:x,setTabMap:y,tabActivationDirection:w}=xx(),[S,_]=v.useState(0),[j,E]=v.useState(null),k=v.useRef(new Set),N=v.useRef(new Set),R=v.useRef(null);v.useEffect(()=>{if(typeof ResizeObserver>"u")return;const L=new ResizeObserver(()=>{k.current.forEach(D=>{D()})});return R.current=L,j&&L.observe(j),N.current.forEach(D=>{L.observe(D)}),()=>{L.disconnect(),R.current=null}},[j]);const A=Ae(L=>(k.current.add(L),()=>{k.current.delete(L)})),M=Ae(L=>(N.current.add(L),R.current?.observe(L),()=>{N.current.delete(L),R.current?.unobserve(L)})),O=Ae((L,D)=>{L!==x&&m(L,D)}),U={orientation:h,tabActivationDirection:w},I={"aria-orientation":h==="vertical"?"vertical":void 0,role:"tablist"},B=v.useMemo(()=>({activateOnFocus:r,highlightedTabIndex:S,registerIndicatorUpdateListener:A,registerTabResizeObserverElement:M,onTabActivation:O,setHighlightedTabIndex:_,tabsListElement:j}),[r,S,A,M,O,_,j]);return l.jsx(e2.Provider,{value:B,children:l.jsx(iz,{render:d,className:i,style:f,state:U,refs:[s,E],props:[I,g],stateAttributesMapping:bx,highlightedIndex:S,enableHomeAndEndKeys:!0,loopFocus:c,orientation:h,onHighlightedIndexChange:_,onMapChange:y,disabledIndices:Ui})})});function Xd({className:e,...n}){return l.jsx(ZO,{"data-slot":"tabs",className:Pt("flex flex-col gap-4",e),...n})}const uz=sx("inline-flex h-9 w-fit items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground data-[variant=line]:h-8 data-[variant=line]:gap-1 data-[variant=line]:rounded-none data-[variant=line]:bg-transparent data-[variant=line]:p-0",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});function Kd({className:e,variant:n="default",...s}){return l.jsx(cz,{"data-slot":"tabs-list","data-variant":n,className:Pt(uz({variant:n}),e),...s})}function Da({className:e,...n}){return l.jsx(ez,{"data-slot":"tabs-trigger",className:Pt("inline-flex h-7 items-center justify-center gap-1.5 rounded-md border border-transparent px-3 py-1 text-sm font-medium whitespace-nowrap text-muted-fg transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-active:bg-background data-active:text-foreground data-active:shadow-sm dark:data-active:border-input dark:data-active:bg-input/30 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...n})}function La({className:e,...n}){return l.jsx(az,{"data-slot":"tabs-content",className:Pt("text-sm outline-none",e),...n})}function Y1(e,n){let s=e;for(const r of n.split(".")){if(!s||typeof s!="object"||Array.isArray(s))return;s=s[r]}return s}function vx(e,n=""){const s={};for(const[r,i]of Object.entries(e)){const c=n?`${n}.${r}`:r;i&&typeof i=="object"&&!Array.isArray(i)?Object.assign(s,vx(i,c)):s[c]=i}return s}function dz(e){const n=JSON.parse(e);if(!n||typeof n!="object"||Array.isArray(n))throw new Error("JSON debe ser objeto.");return n}function Zg({sections:e,source:n,placeholderSource:s,jsonTitle:r,jsonDescription:i,saveLabel:c="Guardar",onSaveFields:d,onSaveJson:f,busy:g}){const m=e[0]?.key||"json",[h,x]=v.useState({}),[y,w]=v.useState(""),[S,_]=v.useState("");v.useEffect(()=>{const N={};for(const R of e.flatMap(A=>A.fields))N[R.path]=Y1(n,R.path)??"";x(N),w(JSON.stringify(n||{},null,2)),_("")},[n,e]);const j=v.useMemo(()=>new Set(e.flatMap(N=>N.fields.map(R=>R.path))),[e]),E=async()=>{const N={},R=[];for(const A of e.flatMap(M=>M.fields)){const M=h[A.path];if(!za(M)){if(M===""||M===void 0||M===null){R.push(A.path);continue}if(A.kind==="number"){const O=Number(M);Number.isFinite(O)&&(N[A.path]=O)}else N[A.path]=M}}await d(N,R.filter(A=>j.has(A)))},k=async()=>{_("");try{await f(dz(y))}catch(N){_(N.message)}};return l.jsxs(Xd,{defaultValue:m,className:"space-y-4",children:[l.jsxs(Kd,{className:"flex flex-wrap",children:[e.map(N=>l.jsx(Da,{value:N.key,children:N.label},N.key)),l.jsx(Da,{value:"json",children:"JSON"})]}),e.map(N=>l.jsx(La,{value:N.key,children:l.jsxs("div",{className:"space-y-4",children:[N.description&&l.jsx("p",{className:"text-sm text-muted-fg",children:N.description}),l.jsx("div",{className:"grid gap-3 md:grid-cols-2",children:N.fields.map(R=>l.jsx(fz,{field:R,value:h[R.path],inherited:Y1(s,R.path),onChange:A=>x(M=>({...M,[R.path]:A}))},R.path))}),l.jsx(he,{variant:"primary",loading:g,onClick:E,children:c})]})},N.key)),l.jsx(La,{value:"json",children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{children:[l.jsx("h3",{className:"text-sm font-medium",children:r}),i&&l.jsx("p",{className:"text-xs text-muted-fg",children:i})]}),l.jsx(Qt,{rows:18,className:"font-mono text-xs",value:y,onChange:N=>w(N.target.value)}),S&&l.jsx("p",{className:"text-xs text-destructive",children:S}),l.jsx(he,{variant:"primary",loading:g,onClick:k,children:"Guardar JSON"})]})})]})}function fz({field:e,value:n,inherited:s,onChange:r}){const i=e.placeholder||F1(s)||(za(n)?fr(n):""),c=e.hint||(s!==void 0?`Heredado: ${F1(s)}`:void 0);return e.kind==="boolean"?l.jsx("div",{className:"flex items-end pb-1",children:l.jsx(sn,{checked:n===!0,onChange:r,label:e.label})}):l.jsx(fe,{label:e.label,hint:c,children:e.kind==="select"?l.jsx(Ct,{value:String(n||""),onChange:r,placeholder:i||"(sin override)",options:[{value:"",label:i||"(sin override)"},...(e.options||[]).map(d=>({value:String(d.value),label:d.label}))]}):e.kind==="textarea"?l.jsx(Qt,{rows:4,value:String(n||""),placeholder:i,onChange:d=>r(d.target.value)}):l.jsx(Ce,{type:e.kind==="password"?"password":e.kind==="number"?"number":"text",value:String(za(n)?"":n||""),placeholder:e.kind==="password"&&za(n)?fr(n):e.kind==="password"&&za(s)?fr(s):i,onChange:d=>r(d.target.value)})})}function F1(e){return e==null||e===""?"":za(e)?fr(e):Array.isArray(e)?e.join(", "):typeof e=="object"?JSON.stringify(e):String(e)}const mz=[{key:"routing",label:"Overrides",description:".apc/config.json. Sólo valores propios del proyecto; vacío hereda global/effective.",fields:[{path:"route_to_agent",label:"Route to agent",placeholder:"master"},{path:"super_agent.model",label:"Super-agent model"},{path:"super_agent.permission_mode",label:"Permission mode",kind:"select",options:xh.map(e=>({value:e,label:e}))},{path:"super_agent.system",label:"Prompt extra",kind:"textarea"}]},{key:"telegram",label:"Telegram",fields:[{path:"telegram.route_to_agent",label:"Route to agent"},{path:"telegram.chat_id",label:"Chat ID"},{path:"telegram.bot_token",label:"Bot token",kind:"password"},{path:"telegram.respond_with_engine",label:"Responder con engine",kind:"boolean"}]},{key:"engines",label:"Engines",fields:[{path:"engines.ollama.base_url",label:"Ollama URL"},{path:"engines.anthropic.api_key",label:"Anthropic API key",kind:"password"},{path:"engines.openai.api_key",label:"OpenAI API key",kind:"password"},{path:"engines.groq.api_key",label:"Groq API key",kind:"password"},{path:"engines.openrouter.api_key",label:"OpenRouter API key",kind:"password"},{path:"engines.gemini.api_key",label:"Gemini API key",kind:"password"}]}],pz=[{key:"identity",label:"Proyecto",description:".apc/project.json. Metadata APC portable; no secrets, no runtime.",fields:[{path:"name",label:"Name"},{path:"version",label:"Version"},{path:"apf",label:"APC spec"},{path:"apx",label:"APX install state"},{path:"apx_id",label:"APX storage id"}]}];function gz({pid:e}){const n=rt(),s=Qe(`/projects/${e}/config`,()=>Qn.config.show(e));if(s.isLoading)return l.jsx(Je,{});if(!s.data)return l.jsx(lt,{children:C("project.config.no_data")});const r=async c=>{await Qn.apcProject.put(e,c),n.success(C("project.config.save_project")),s.mutate()},i=async c=>{await Qn.config.put(e,c),n.success(C("project.config.save_override")),s.mutate()};return l.jsx("div",{className:"space-y-6",children:l.jsx(He,{title:C("project.config.section_title"),description:C("project.config.section_desc"),children:l.jsxs(Xd,{defaultValue:"override",className:"space-y-4",children:[l.jsxs(Kd,{children:[l.jsx(Da,{value:"override",children:"Override"}),l.jsx(Da,{value:"project",children:"APC project"}),l.jsx(Da,{value:"effective",children:"Effective"})]}),l.jsx(La,{value:"override",children:l.jsx(Zg,{sections:mz,source:s.data.project_only,placeholderSource:s.data.effective,jsonTitle:s.data.project_config_path,jsonDescription:".apc/config.json. Overrides del proyecto.",onSaveFields:async(c,d)=>{await Qn.config.set(e,c),d.length&&await Qn.config.unset(e,d),n.success(C("project.config.save_fields_success")),s.mutate()},onSaveJson:i})}),l.jsx(La,{value:"project",children:l.jsx(Zg,{sections:pz,source:s.data.apc_project||{},jsonTitle:s.data.project_json_path,jsonDescription:".apc/project.json. Metadata APC portable.",onSaveFields:async(c,d)=>{await Qn.apcProject.set(e,hz(c),d),n.success(C("project.config.save_meta_success")),s.mutate()},onSaveJson:r})}),l.jsx(La,{value:"effective",children:l.jsxs("div",{className:"space-y-2",children:[l.jsx("p",{className:"text-xs text-muted-fg",children:C("project.config.effective_read")}),l.jsx("pre",{className:"max-h-96 overflow-auto rounded-lg border border-border bg-muted/40 p-3 text-xs",children:JSON.stringify(s.data.effective,null,2)})]})})]})})})}function hz(e){const n={};for(const[s,r]of Object.entries(vx(e)))za(r)||(n[s]=r);return n}const xz=["","es","en","pt","fr","it","de"],X1=e=>e.split(",").map(n=>n.trim()).filter(Boolean);function t2(e){return e.is_master?{gradient:"from-violet-600 to-indigo-600",Icon:ks}:{gradient:"from-slate-600 to-gray-600",Icon:vn}}function bz(e){const n=e.filter(d=>d.is_master),s=n.length===1?n[0]:null,r=d=>d.parent?d.parent:s&&!d.is_master&&d.slug!==s.slug?s.slug:null,i=new Map,c=[];for(const d of e){const f=r(d);f&&e.some(g=>g.slug===f)?(i.has(f)||i.set(f,[]),i.get(f).push(d)):c.push(d)}return{roots:c,childrenByParent:i}}function vz({pid:e}){const n=Ua();rt();const s=Qe(`/projects/${e}/agents`,()=>Jt.list(e)),[r,i]=v.useState("hierarchy"),[c,d]=v.useState(!1),[f,g]=v.useState(!1),m=s.data||[],h=S=>n(`/p/${e}/agents/${S}`),x=S=>n(S?`/p/${e}/chat?agent=${S}`:`/p/${e}/chat`),{roots:y,childrenByParent:w}=v.useMemo(()=>bz(m),[m]);return l.jsxs(He,{title:C("project.agents.title"),description:C("project.agents.subtitle_full"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[l.jsxs("button",{onClick:()=>i("hierarchy"),className:Ie("flex items-center gap-1 rounded-md px-2 py-1 text-xs",r==="hierarchy"?"bg-accent text-accent-fg":"text-muted-fg"),children:[l.jsx(mh,{size:13})," ",C("project.agents.hierarchy")]}),l.jsxs("button",{onClick:()=>i("list"),className:Ie("flex items-center gap-1 rounded-md px-2 py-1 text-xs",r==="list"?"bg-accent text-accent-fg":"text-muted-fg"),children:[l.jsx(XR,{size:13})," ",C("project.agents.list_view")]})]}),l.jsxs(he,{size:"sm",variant:"ghost",onClick:()=>g(!0),children:[l.jsx(oN,{size:13})," ",C("project.agents.import")]}),l.jsxs(he,{size:"sm",variant:"secondary",onClick:()=>x(),children:[l.jsx(Za,{size:13})," ",C("project.agents.chat")]}),l.jsxs(he,{size:"sm",variant:"primary","data-testid":"agent-new",onClick:()=>d(!0),children:[l.jsx(Rn,{size:14})," ",C("project.agents.new")]})]}),children:[s.isLoading&&l.jsx(Je,{}),!s.isLoading&&m.length===0&&l.jsx(lt,{children:C("project.agents.empty_text")}),!s.isLoading&&m.length>0&&(r==="hierarchy"?l.jsx(_z,{roots:y,childrenByParent:w,onOpen:h,onChat:x}):l.jsx(jz,{agents:m,onOpen:h,onChat:x})),l.jsx(Sz,{open:c,pid:e,agents:m,onClose:()=>d(!1),onCreated:()=>{d(!1),s.mutate()}}),l.jsx(yz,{open:f,pid:e,existing:m.map(S=>S.slug),onClose:()=>g(!1),onImported:()=>s.mutate()})]})}function yz({open:e,onClose:n,onImported:s,pid:r,existing:i}){const c=rt(),d=Qe(e?"/agents/vault":null,()=>Jt.vault()),[f,g]=v.useState(""),m=d.data||[],h=async x=>{g(x);try{await Jt.import(r,x),c.success(C("project.agents.import_success",{slug:x})),s()}catch(y){c.error(y.message)}finally{g("")}};return l.jsxs(ma,{open:e,onClose:n,title:C("project.agents.import_title"),description:C("project.agents.import_desc"),size:"lg",footer:l.jsx(he,{variant:"ghost",onClick:n,children:C("common.close")}),children:[d.isLoading&&l.jsx(Je,{}),!d.isLoading&&m.length===0&&l.jsx(lt,{children:C("project.agents.import_empty")}),l.jsx("ul",{className:"space-y-2",children:m.map(x=>{const y=i.includes(x.slug);return l.jsxs("li",{className:"flex items-center gap-3 rounded-lg border border-border bg-muted/30 p-3",children:[l.jsx(vn,{size:16,className:"shrink-0 text-muted-fg"}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsx("span",{className:"text-sm font-medium",children:x.slug}),x.is_master&&l.jsxs(Ue,{tone:"success",children:[l.jsx(ks,{size:9})," ",C("project.agents.orchestrator")]}),x.model&&l.jsx(Ue,{tone:"info",children:x.model})]}),x.description&&l.jsx("p",{className:"truncate text-xs text-muted-fg",children:x.description})]}),l.jsx(he,{size:"sm",variant:"primary",disabled:y||f===x.slug,loading:f===x.slug,onClick:()=>h(x.slug),children:C(y?"project.agents.import_already":"project.agents.import_btn")})]},x.slug)})})]})}function _z({roots:e,childrenByParent:n,onOpen:s,onChat:r}){return l.jsx("div",{className:"space-y-8",children:e.map(i=>{const c=n.get(i.slug)||[];return l.jsxs("div",{className:"flex flex-col items-center",children:[l.jsx(Yp,{agent:i,onOpen:s,onChat:r,wide:!0}),c.length>0&&l.jsxs(l.Fragment,{children:[l.jsx("div",{className:"h-5 w-px bg-border"}),l.jsx("div",{className:"flex flex-wrap items-start justify-center gap-4 border-t border-border pt-5",children:c.map(d=>l.jsxs("div",{className:"flex flex-col items-center",children:[l.jsx(Yp,{agent:d,onOpen:s,onChat:r}),(n.get(d.slug)||[]).length>0&&l.jsxs(l.Fragment,{children:[l.jsx("div",{className:"h-4 w-px bg-border"}),l.jsx("div",{className:"flex flex-wrap justify-center gap-3 border-t border-border pt-4",children:(n.get(d.slug)||[]).map(f=>l.jsx(Yp,{agent:f,onOpen:s,onChat:r,compact:!0},f.slug))})]})]},d.slug))})]})]},i.slug)})})}function Yp({agent:e,onOpen:n,onChat:s,wide:r,compact:i}){const{gradient:c,Icon:d}=t2(e);return l.jsxs("div",{"data-testid":`agent-card-${e.slug}`,className:Ie("cursor-pointer rounded-xl border border-border bg-card p-3 transition-colors hover:border-muted-fg/50",r?"w-64":i?"w-44":"w-52"),onClick:()=>n(e.slug),children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("div",{className:Ie("flex size-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br",c),children:l.jsx(d,{className:"size-4 text-white"})}),l.jsx("span",{className:"truncate text-sm font-semibold",children:e.slug})]}),l.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-1",children:[e.is_master&&l.jsxs(Ue,{tone:"success",children:[l.jsx(ks,{size:9})," ",C("project.agents.orchestrator")]}),e.role&&l.jsx(Ue,{children:e.role}),e.model&&!i&&l.jsx(Ue,{tone:"info",children:e.model})]}),l.jsxs("div",{className:"mt-2 flex items-center gap-3 border-t border-border pt-2 text-xs text-muted-fg",onClick:f=>f.stopPropagation(),children:[l.jsxs("button",{onClick:()=>n(e.slug),className:"flex items-center gap-1 hover:text-foreground",children:[l.jsx(fj,{size:12})," ",C("project.agents.view")]}),l.jsxs("button",{onClick:()=>s(e.slug),className:"flex items-center gap-1 text-emerald-500 hover:text-emerald-400",children:[l.jsx(Za,{size:12})," ",C("project.agents.chat")]})]})]})}function jz({agents:e,onOpen:n,onChat:s}){const r=[...e].sort((i,c)=>+!!c.is_master-+!!i.is_master||i.slug.localeCompare(c.slug));return l.jsx("div",{className:"space-y-2",children:r.map(i=>{const{gradient:c,Icon:d}=t2(i);return l.jsxs("div",{"data-testid":`agent-card-${i.slug}`,className:"flex cursor-pointer items-center gap-4 rounded-xl border border-border bg-muted/30 p-3 hover:border-muted-fg/50",onClick:()=>n(i.slug),children:[l.jsx("div",{className:Ie("flex size-9 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br",c),children:l.jsx(d,{className:"size-4 text-white"})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsx("span",{className:"text-sm font-semibold",children:i.slug}),i.is_master&&l.jsxs(Ue,{tone:"success",children:[l.jsx(ks,{size:10})," ",C("project.agents.orchestrator")]}),i.role&&l.jsx(Ue,{children:i.role}),i.model&&l.jsx(Ue,{tone:"info",children:i.model}),i.parent&&l.jsxs("span",{className:"text-[10px] text-violet-400",children:["↳ ",i.parent]})]}),i.description&&l.jsx("p",{className:"mt-1 truncate text-xs text-muted-fg",children:i.description}),l.jsxs("div",{className:"mt-1 flex flex-wrap gap-1",children:[i.skills?.map(f=>l.jsxs("span",{className:"inline-flex items-center gap-0.5 rounded bg-muted px-1 py-0.5 text-[9px] text-muted-fg",children:[l.jsx(ol,{size:9})," ",f]},f)),i.tools?.map(f=>l.jsxs("span",{className:"inline-flex items-center gap-0.5 rounded bg-muted px-1 py-0.5 text-[9px] text-muted-fg",children:[l.jsx(ll,{size:9})," ",f]},f))]})]}),l.jsxs("div",{className:"flex shrink-0 items-center gap-3 text-xs text-muted-fg",onClick:f=>f.stopPropagation(),children:[l.jsxs("button",{onClick:()=>n(i.slug),className:"flex items-center gap-1 hover:text-foreground",children:[l.jsx(fj,{size:12})," ",C("project.agents.view")]}),l.jsxs("button",{onClick:()=>s(i.slug),className:"flex items-center gap-1 text-emerald-500 hover:text-emerald-400",children:[l.jsx(Za,{size:12})," ",C("project.agents.chat")]})]})]},i.slug)})})}function Sz({open:e,onClose:n,onCreated:s,pid:r,agents:i}){const c=rt(),[d,f]=v.useState(""),[g,m]=v.useState(""),[h,x]=v.useState(""),[y,w]=v.useState(""),[S,_]=v.useState(""),[j,E]=v.useState(""),[k,N]=v.useState(""),[R,A]=v.useState(!1),[M,O]=v.useState(""),[U,I]=v.useState(!1),B=()=>{f(""),m(""),x(""),w(""),_(""),E(""),N(""),A(!1),O("")},L=async()=>{if(!/^[a-z][a-z0-9_-]*$/.test(d)){c.error(C("project.agents.slug_invalid"));return}I(!0);try{await Jt.create(r,{slug:d,role:g||void 0,model:h||void 0,language:y||void 0,description:S||void 0,skills:X1(j),tools:X1(k),is_master:R,parent:M||void 0}),c.success(C("project.agents.create_success",{slug:d})),s(),B()}catch(D){c.error(D?.message||C("project.agents.create_error"))}finally{I(!1)}};return l.jsx(ma,{open:e,onClose:n,title:C("project.agents.new_title"),description:C("project.agents.new_desc"),size:"lg",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:U,children:C("common.cancel")}),l.jsx(he,{variant:"primary","data-testid":"agent-create-submit",onClick:L,loading:U,children:C("common.create")})]}),children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agents.slug_label"),children:l.jsx(Ce,{autoFocus:!0,"data-testid":"agent-slug",value:d,onChange:D=>f(D.target.value),placeholder:C("project.agents.slug_ph")})}),l.jsx(fe,{label:C("project.agents.role_label"),children:l.jsx(Ce,{value:g,onChange:D=>m(D.target.value),placeholder:C("project.agents.role_ph")})})]}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agents.model_label"),hint:C("project.agents.model_hint"),children:l.jsx(Ce,{value:h,onChange:D=>x(D.target.value)})}),l.jsx(fe,{label:C("project.agents.lang_label"),children:l.jsx(Ct,{value:y,onChange:w,options:xz.map(D=>({value:D,label:D||"—"}))})})]}),l.jsx(fe,{label:C("project.agents.desc_label"),children:l.jsx(Qt,{rows:2,value:S,onChange:D=>_(D.target.value),placeholder:C("project.agents.desc_ph")})}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agents.skills_label"),children:l.jsx(Ce,{value:j,onChange:D=>E(D.target.value),placeholder:C("project.agents.skills_ph")})}),l.jsx(fe,{label:C("project.agents.tools_label"),children:l.jsx(Ce,{value:k,onChange:D=>N(D.target.value),placeholder:C("project.agents.tools_ph")})})]}),l.jsxs("div",{className:"grid grid-cols-2 items-end gap-3",children:[l.jsx(fe,{label:C("project.agents.parent_label"),hint:C("project.agents.parent_hint"),children:l.jsx(Ct,{value:M,onChange:O,placeholder:C("project.agents.none_parent"),options:[{value:"",label:C("project.agents.none_parent")},...i.filter(D=>D.slug!==d).map(D=>({value:D.slug,label:D.slug}))]})}),l.jsx(sn,{checked:R,onChange:A,label:C("project.agents.master_label")})]})]})})}function Lu(e){return e.split(`
527
+ Stable facts that any agent should know…`,agents_title:"Agent memories",agents_desc:"Individual memory per agent. ~/.apx/projects/<id>/agents/<slug>/memory.md",no_agents:"No agents in this project.",saved:"Memory saved.",empty:"(empty memory)",chars:"chars · Markdown",save_btn:"Save"}},base:{title:"Base",subtitle:"General workspace · super-agent",nav_general:"General",nav_activity:"Activity",nav_system:"System",workspaces_title:"Workspaces",workspaces_desc:"All projects registered in APX.",workspaces_new:"New project",workspaces_empty:"No projects. Add one with the button above.",sessions_title:"Sessions",sessions_desc:"Sessions from all engines (apx · claude · codex), newest first.",sessions_all:"All engines",sessions_empty:"No sessions.",sessions_error:"Could not read sessions: {msg}",defaults_title:"Agent defaults",defaults_desc:"Global vault templates. Bundled ones come with APX and are always present; ones you create or edit go in ~/.apx/agents and override. Import them into a project from Agents › Import.",defaults_show_removed:"Show removed",defaults_new:"New",defaults_empty:"No templates in the vault.",defaults_hide:"Hide",defaults_restore:"Restore",defaults_edit:"Edit",defaults_remove:"Hide",defaults_delete:"Delete",defaults_tombstone_msg:`Hide the default "{slug}"? It's bundled — tombstoned and recoverable with Restore.`,defaults_delete_msg:'Delete the template "{slug}"?',defaults_hidden:"Hidden.",defaults_deleted:"Deleted.",defaults_restored:"Restored.",defaults_new_title:"New template",defaults_new_desc:"POST /agents/vault — saved to ~/.apx/agents/<slug>.md",defaults_edit_title:'Edit "{slug}"',defaults_bundled_desc:"This is a bundled default. Saving does a copy-on-write to ~/.apx/agents/<slug>.md (becomes an override).",defaults_user_desc:"PATCH /agents/vault/:slug — edits the file in ~/.apx/agents.",defaults_master_label:"Master agent",defaults_slug_invalid:"invalid slug (must match /^[a-z][a-z0-9_-]*$/)",defaults_created:'Template "{slug}" created.',defaults_saved:'Template "{slug}" saved.'},logs:{title:"Logs",desc_global:"Daemon activity (global channels: telegram, direct…). ~/.apx/messages/<channel>/.",desc_project:"Project activity. ~/.apx/projects/<id>/messages/.",filter_channel:"filter channel (e.g. telegram)",filter_dir:"direction",all_directions:"All directions",in:"Incoming (in)",out:"Outgoing (out)",filter_type:"type",all_types:"All types",search_text:"search text…",count_of:"of",no_activity:"No activity.",no_activity_ch:'No activity in channel "{ch}".',error:"Could not read messages: {msg}",show_more:"show more",show_less:"show less",daemon_errors:"Daemon errors (~/.apx/logs/errors.jsonl)",no_errors:"No errors recorded. 🎉"},telegram_contacts:{title:"Telegram contacts",desc:"Who writes to the bots. The role defines which tools they can use; a guest has no permissions until you assign a role.",empty:"No contacts yet — they register automatically when someone writes to a bot.",owner_badge:"owner",assign_role:"Assign role",owner_hint:"Channel owner — change it from the channel",removed:"Contact deleted.",delete_confirm:"Delete contact {name}?",last_seen:"seen:",tools_all:"tools: all",tools_none:"tools: none",tools_label:"tools:"},telegram_channels:{title:"Channels",desc:"Each channel is a bot the daemon polls. Here you can add/remove channels, change the answering agent, the project it belongs to and its owner.",new_btn:"New channel",empty:"No channels yet — add the first one.",removed:"Channel deleted.",delete_confirm:"Delete channel {name}?",no_owner:"no owner (claimed on first DM)",owner_label:"owner:"},telegram_channel_dialog:{new_title:"New Telegram channel",edit_title:"Edit channel: {name}",name_label:"name (internal slug)",token_label:"bot_token",chat_id:"chat_id",project_label:"project",project_hint:"Slug or id of the project to pin this channel to (optional).",route_label:"route_to_agent",route_hint:"Answering agent; empty = APX super-agent.",owner_label:"owner_user_id",owner_hint:"Telegram user_id of the channel owner. Overrides global role to 'owner' here. Leave empty — first private message claims it.",owner_ph:"889721252",respond_label:"Respond with engine (not echo)",name_required:"name required",saved:"Channel saved."},telegram_send_dialog:{title:"Send to {name}",default_msg:"Test message from APX panel ✅"},telegram_roles:{title:"Roles",desc:"Each role defines which super-agent tools the assigned user can invoke. 'owner' always = all; 'guest' always = none (chat only).",empty:"No roles defined.",tools_all:"all tools",tools_none:"no tools",builtin:"built-in",delete_confirm:'Delete role "{name}"?',removed:"Role deleted.",saved:'Role "{name}" saved.',name_required:"Name required.",builtin_error:'"{name}" is a built-in role.',new_title:"New role or replace a custom one",name_label:"Name",name_ph:"editor",tools_label:"Tools (comma-separated)",tools_hint:"Empty = none. Examples: call_agent, list_tasks, create_task.",tools_ph:"call_agent, list_tasks",full_access:"Full access (all tools)",save_btn:"Save role",delete_btn:"Delete"},roby:{title:"Roby",badge:"super-agent · APX",desc:"Quick chat with your super-agent. Has access to tools (projects, tasks, mcps, agents); for a longer persistent thread, open Chats.",empty:"Send Roby a message to get started.",thinking:"Roby is thinking…",talk:"Talk to Roby",new_chat:"New chat",placeholder:"Type and press enter to send (shift+enter = new line)…"},not_found:{title:"404",message:"That route does not exist."},code_module:{title:"Code",badge:"super-agent",desc:"OpenCode-style coding sessions. Pick a project, open a session, and ask it to read, plan, edit or run.",no_projects:"No registered projects. Register one with `apx project add` to use Code.",sessions:"Sessions",new_session:"New session",untitled:"New session",no_sessions:"No sessions yet — create one to start coding.",pick_project:"Pick a project to see its sessions.",rename:"Rename",delete:"Delete",delete_confirm:"Delete this session? The transcript is removed; your files are untouched.",empty_chat:"Send a coding instruction to get started.",placeholder:"Ask for a change… (enter sends, shift+enter = new line)",mode_build:"Build",mode_plan:"Plan",mode_build_hint:"Build — edits files and runs commands",mode_plan_hint:"Plan — read-only, proposes changes without touching files",tab_context:"Context",tab_changes:"Changes",ctx_model:"Model",ctx_tokens:"Tokens",ctx_input:"Input",ctx_output:"Output",ctx_messages:"Messages",ctx_breakdown:"Context breakdown",ctx_none:"No usage yet — send a turn to see tokens.",seg_system:"System",seg_user:"User",seg_assistant:"Assistant",seg_tool:"Tools",seg_other:"Other",changes_none:"No changes in this session yet.",changes_no_git:"Changes need a git repository. This project isn't one.",changes_files:"{n} file(s) changed",stopped:"[stopped]"}},ax={es:i5,en:c5};function u5(){try{const e=localStorage.getItem(Cn.language);if(e&&e in ax)return e}catch{}return"es"}let qd=u5();function d5(e){qd=e;try{localStorage.setItem(Cn.language,e)}catch{}}const f5=[{value:"es",label:"Español"},{value:"en",label:"English"}];function m5(){return qd}function p5(e){const n=ax[qd],s=e.split(".");let r=n;for(const i of s)if(r&&typeof r=="object"&&i in r)r=r[i];else return;return typeof r=="string"?r:void 0}function g5(e,n){return n?e.replace(/\{(\w+)\}/g,(s,r)=>r in n?String(n[r]):`{${r}}`):e}function h5(e){const n=p5(e);if(n!==void 0)return n;if(qd!=="es"){const s=ax.es,r=e.split(".");let i=s;for(const c of r)if(i&&typeof i=="object"&&c in i)i=i[c];else return;return typeof i=="string"?i:void 0}}function C(e,n){const s=h5(e);return s===void 0?e:g5(s,n)}function x5(){return[{id:"voice",label:C("nav.modules.voice"),href:"/m/voice",icon:QR},{id:"desktop",label:C("nav.modules.desktop"),href:"/m/desktop",icon:ZR},{id:"deck",label:C("nav.modules.deck"),href:"/m/deck",icon:YR},{id:"code",label:C("nav.modules.code"),href:"/m/code",icon:Pi}]}function b5({onSelect:e,onOpenRoby:n}){const{projects:s,isLoading:r}=sc(),i=ea(),c=x5(),d=m=>i.pathname===m||i.pathname.startsWith(`${m}/`),f=s.find(m=>String(m.id)==="0"),g=s.filter(m=>String(m.id)!=="0");return l.jsxs("aside",{className:"flex h-full w-20 flex-col items-center gap-3 overflow-y-auto bg-transparent py-3",children:[l.jsx(Ko,{content:C("nav.apx_admin"),side:"right",children:l.jsx("button",{type:"button",onClick:()=>e("/"),"data-testid":"nav-home",className:"mb-2 cursor-pointer",children:l.jsx(mN,{size:36})})}),r&&l.jsx("div",{className:"size-10 animate-pulse rounded-xl bg-muted"}),f&&l.jsx(ui,{label:C("base.title"),testId:"project-avatar-0",title:C("base.subtitle"),active:d("/p/0"),isDefault:!0,icon:l.jsx("img",{src:"/modules/superagent.png",alt:C("base.title"),className:"size-7 object-contain",draggable:!1}),onClick:()=>e("/p/0")}),l.jsx("div",{className:"my-0.5 h-px w-8 rounded-full bg-border"}),c.map(m=>l.jsx(ui,{label:m.label,testId:`module-avatar-${m.id}`,title:m.label,active:d(m.href),icon:l.jsx(m.icon,{size:18}),onClick:()=>e(m.href)},m.id)),g.length>0&&l.jsx("div",{className:"my-0.5 h-px w-8 rounded-full bg-border"}),g.map(m=>{const h=m.name||m.path.split("/").pop()||String(m.id),x=`/p/${m.id}`;return l.jsx(ui,{label:h,testId:`project-avatar-${m.id}`,title:`${h} — ${m.path}`,active:d(x),onClick:()=>e(x)},m.id)}),l.jsx(ui,{label:"Add",isAdd:!0,testId:"nav-add-project",icon:l.jsx(Rn,{size:18}),active:!1,onClick:()=>e("/?action=add-project"),title:C("nav.add_project")}),l.jsx("div",{className:"flex-1"}),l.jsx(ui,{label:"Settings",isSettings:!0,testId:"nav-settings",icon:l.jsx(ed,{size:16}),active:i.pathname==="/settings"||i.pathname.startsWith("/settings/"),onClick:()=>e("/settings"),title:C("nav.settings")}),l.jsx(Ko,{content:C("roby.talk"),side:"right",children:l.jsx("button",{type:"button",onClick:n,"data-testid":"nav-roby","aria-label":C("roby.talk"),className:"mt-1 flex size-10 items-center justify-center rounded-xl border border-border/60 bg-muted/30 text-muted-fg transition-colors hover:bg-accent hover:text-foreground",children:l.jsx(vn,{size:18})})})]})}function iw(e){switch(e){case"personal":return"Personal";case"company":return"Company";case"app":return"App";case"software":return"Software";case"default":return"Default";case"other":return"Other";default:return C("nav.project")}}function He({title:e,description:n,action:s,className:r,children:i}){return l.jsxs("section",{className:Ie("rounded-xl border border-border bg-card p-5",r),children:[l.jsxs("header",{className:"mb-4 flex items-start justify-between gap-4",children:[l.jsxs("div",{children:[l.jsx("h2",{className:"text-lg font-semibold tracking-tight",children:e}),n&&l.jsx("p",{className:"mt-0.5 text-sm text-muted-fg",children:n})]}),s]}),l.jsx("div",{children:i})]})}function R1({children:e}){return l.jsx("kbd",{className:"rounded border border-border bg-muted px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-wide text-muted-fg",children:e})}function Vd({ok:e}){return l.jsx("span",{className:Ie("inline-block size-2 rounded-full",e===null?"bg-muted-fg":e?"bg-emerald-500":"bg-red-500")})}const cw=v.createContext(void 0);function uw(e=!1){const n=v.useContext(cw);if(n===void 0&&!e)throw new Error(Nn(16));return n}function v5(e){const{focusableWhenDisabled:n,disabled:s,composite:r=!1,tabIndex:i=0,isNativeButton:c}=e,d=r&&n!==!1,f=r&&n===!1;return{props:v.useMemo(()=>{const m={onKeyDown(h){s&&n&&h.key!=="Tab"&&h.preventDefault()}};return r||(m.tabIndex=i,!c&&s&&(m.tabIndex=n?i:-1)),(c&&(n||d)||!c&&s)&&(m["aria-disabled"]=s),c&&(!n||f)&&(m.disabled=s),m},[r,s,n,d,f,c,i])}}function ml(e={}){const{disabled:n=!1,focusableWhenDisabled:s,tabIndex:r=0,native:i=!0,composite:c}=e,d=v.useRef(null),f=uw(!0),g=c??f!==void 0,{props:m}=v5({focusableWhenDisabled:s,disabled:n,composite:g,tabIndex:r,isNativeButton:i}),h=v.useCallback(()=>{const w=d.current;Hp(w)&&g&&n&&m.disabled===void 0&&w.disabled&&(w.disabled=!1)},[n,m.disabled,g]);Re(h,[h]);const x=v.useCallback((w={})=>{const{onClick:S,onMouseDown:_,onKeyUp:j,onKeyDown:E,onPointerDown:k,...N}=w;return ka({onClick(R){if(n){R.preventDefault();return}S?.(R)},onMouseDown(R){n||_?.(R)},onKeyDown(R){if(n||(id(R),E?.(R),R.baseUIHandlerPrevented))return;const A=R.target===R.currentTarget,M=R.currentTarget,O=Hp(M),U=!i&&y5(M),I=A&&(i?O:!U),B=R.key==="Enter",L=R.key===" ",D=M.getAttribute("role"),q=D?.startsWith("menuitem")||D==="option"||D==="gridcell";if(A&&g&&L){if(R.defaultPrevented&&q)return;R.preventDefault(),U||i&&O?(M.click(),R.preventBaseUIHandler()):I&&(S?.(R),R.preventBaseUIHandler());return}I&&(!i&&(L||B)&&R.preventDefault(),!i&&B&&S?.(R))},onKeyUp(R){if(!n){if(id(R),j?.(R),R.target===R.currentTarget&&i&&g&&Hp(R.currentTarget)&&R.key===" "){R.preventDefault();return}R.baseUIHandlerPrevented||R.target===R.currentTarget&&!i&&!g&&R.key===" "&&S?.(R)}},onPointerDown(R){if(n){R.preventDefault();return}k?.(R)}},i?{type:"button"}:{role:"button"},m,N)},[n,m,g,i]),y=Ae(w=>{d.current=w,h()});return{getButtonProps:x,buttonRef:y}}function Hp(e){return Ut(e)&&e.tagName==="BUTTON"}function y5(e){return!!(e?.tagName==="A"&&e?.href)}const _5=v.forwardRef(function(n,s){const{render:r,className:i,disabled:c=!1,focusableWhenDisabled:d=!1,nativeButton:f=!0,style:g,...m}=n,{getButtonProps:h,buttonRef:x}=ml({disabled:c,focusableWhenDisabled:d,native:f});return Lt("button",n,{state:{disabled:c},ref:[s,x],props:[m,h]})}),N1=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,T1=vh,sx=(e,n)=>s=>{var r;if(n?.variants==null)return T1(e,s?.class,s?.className);const{variants:i,defaultVariants:c}=n,d=Object.keys(i).map(m=>{const h=s?.[m],x=c?.[m];if(h===null)return null;const y=N1(h)||N1(x);return i[m][y]}),f=s&&Object.entries(s).reduce((m,h)=>{let[x,y]=h;return y===void 0||(m[x]=y),m},{}),g=n==null||(r=n.compoundVariants)===null||r===void 0?void 0:r.reduce((m,h)=>{let{class:x,className:y,...w}=h;return Object.entries(w).every(S=>{let[_,j]=S;return Array.isArray(j)?j.includes({...c,...f}[_]):{...c,...f}[_]===j})?[...m,x,y]:m},[]);return T1(e,d,g,s?.class,s?.className)},j5=sx("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function Wo({className:e,variant:n="default",size:s="default",...r}){return l.jsx(_5,{"data-slot":"button",className:Pt(j5({variant:n,size:s,className:e})),...r})}let A1=(function(e){return e.disabled="data-disabled",e.valid="data-valid",e.invalid="data-invalid",e.touched="data-touched",e.dirty="data-dirty",e.filled="data-filled",e.focused="data-focused",e})({});const S5={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},ji={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},w5={disabled:!1,...ji},rx={valid(e){return e===null?null:e?{[A1.valid]:""}:{[A1.invalid]:""}}},C5={invalid:void 0,name:void 0,validityData:{state:S5,errors:[],error:"",value:"",initialValue:null},setValidityData:Dn,disabled:void 0,touched:ji.touched,setTouched:Dn,dirty:ji.dirty,setDirty:Dn,filled:ji.filled,setFilled:Dn,focused:ji.focused,setFocused:Dn,validate:()=>null,validationMode:"onSubmit",validationDebounceTime:0,shouldValidateOnChange:()=>!1,state:w5,markedDirtyRef:{current:!1},registerFieldControl:Dn,validation:{getValidationProps:(e=an)=>e,getInputValidationProps:(e=an)=>e,inputRef:{current:null},commit:async()=>{}}},E5=v.createContext(C5);function rc(e=!0){const n=v.useContext(E5);if(n.setValidityData===Dn&&!e)throw new Error(Nn(28));return n}const k5=v.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:Dn,validationMode:"onSubmit",submitAttemptedRef:{current:!1}});function dw(){return v.useContext(k5)}const R5=v.createContext({controlId:void 0,registerControlId:Dn,labelId:void 0,setLabelId:Dn,messageIds:[],setMessageIds:Dn,getDescriptionProps:e=>e});function $d(){return v.useContext(R5)}function N5(e,n,s,r=!0,i){const[c,d]=v.useState(),f=br(i?`${i}-label`:void 0),g=e??n??c;return Re(()=>{const m=e||n||!r?void 0:T5(s.current,f);c!==m&&d(m)}),g}function T5(e,n){const s=A5(e);if(s)return!s.id&&n&&(s.id=n),s.id||void 0}function A5(e){if(!e)return;const n=e.parentElement;if(n&&n.tagName==="LABEL")return n;const s=e.id;if(s){const i=e.nextElementSibling;if(i&&i.htmlFor===s)return i}const r=e.labels;return r&&r[0]}function Gd(e={}){const{id:n,implicit:s=!1,controlRef:r}=e,{controlId:i,registerControlId:c}=$d(),d=br(n),f=s?i:void 0,g=fa(()=>Symbol("labelable-control")),m=v.useRef(!1),h=v.useRef(n!=null),x=Ae(()=>{!m.current||c===Dn||(m.current=!1,c(g.current,void 0))});return Re(()=>{if(c===Dn)return;let y;if(s){const w=r?.current;ot(w)&&w.closest("label")!=null?y=n??null:y=f??d}else if(n!=null)h.current=!0,y=n;else if(h.current)y=d;else{x();return}if(y===void 0){x();return}m.current=!0,c(g.current,y)},[n,r,f,c,s,d,g,x]),v.useEffect(()=>x,[x]),i??d}function Gi({controlled:e,default:n,name:s,state:r="value"}){const{current:i}=v.useRef(e!==void 0),[c,d]=v.useState(n),f=i?e:c,g=v.useCallback(m=>{i||d(m)},[]);return[f,g]}function ox(e,n,s,r,i=!0){const{registerFieldControl:c}=rc(),d=v.useRef(null);d.current||(d.current=Symbol()),Re(()=>{const f=d.current;return!f||!i?void 0:(c(f,{controlRef:e,getValue:r,id:n,value:s}),()=>{c(f,void 0)})},[e,i,r,n,c,s])}const M5=v.forwardRef(function(n,s){const{render:r,className:i,id:c,name:d,value:f,disabled:g=!1,onValueChange:m,defaultValue:h,autoFocus:x=!1,style:y,...w}=n,{state:S,name:_,disabled:j,setTouched:E,setDirty:k,validityData:N,setFocused:R,setFilled:A,validationMode:M,validation:O}=rc(),U=j||g,I=_??d,B={...S,disabled:U},{labelId:L}=$d(),D=Gd({id:c});Re(()=>{const V=f!=null;O.inputRef.current?.value||V&&f!==""?A(!0):V&&f===""&&A(!1)},[O.inputRef,A,f]);const q=v.useRef(null);Re(()=>{x&&q.current===zn(xt(q.current))&&R(!0)},[x,R]);const[F]=Gi({controlled:f,default:h,name:"FieldControl",state:"value"}),Z=f!==void 0,H=Z?F:void 0,G=Ae(()=>O.inputRef.current?.value);return ox(O.inputRef,D,H,G),Lt("input",n,{ref:[s,q],state:B,props:[{id:D,disabled:U,name:I,ref:O.inputRef,"aria-labelledby":L,autoFocus:x,...Z?{value:H}:{defaultValue:h},onChange(V){const Y=V.currentTarget.value;m?.(Y,tt(Ns,V.nativeEvent)),k(Y!==N.initialValue),A(Y!=="")},onFocus(){R(!0)},onBlur(V){E(!0),R(!1),M==="onBlur"&&O.commit(V.currentTarget.value)},onKeyDown(V){V.currentTarget.tagName==="INPUT"&&V.key==="Enter"&&(E(!0),O.commit(V.currentTarget.value))}},O.getInputValidationProps(),w],stateAttributesMapping:rx})}),O5=v.forwardRef(function(n,s){return l.jsx(M5,{ref:s,...n})});function z5({className:e,type:n,...s}){return l.jsx(O5,{type:n,"data-slot":"input",className:Pt("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...s})}function D5({className:e,...n}){return l.jsx("textarea",{"data-slot":"textarea",className:Pt("flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...n})}function L5(e){return Lt(e.defaultTagName??"div",e,e)}const P5=sx("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function B5({className:e,variant:n="default",render:s,...r}){return L5({defaultTagName:"span",props:ka({className:Pt(P5({variant:n}),e)},r),render:s,state:{slot:"badge",variant:n}})}const fw=v.createContext(void 0);function I5(){const e=v.useContext(fw);if(e===void 0)throw new Error(Nn(63));return e}let M1=(function(e){return e.checked="data-checked",e.unchecked="data-unchecked",e.disabled="data-disabled",e.readonly="data-readonly",e.required="data-required",e.valid="data-valid",e.invalid="data-invalid",e.touched="data-touched",e.dirty="data-dirty",e.filled="data-filled",e.focused="data-focused",e})({});const mw={...rx,checked(e){return e?{[M1.checked]:""}:{[M1.unchecked]:""}}};function lx(e,n){const s=v.useRef(e),r=Ae(n);Re(()=>{s.current!==e&&r(s.current)},[e,r]),Re(()=>{s.current=e},[e])}const U5=v.forwardRef(function(n,s){const{checked:r,className:i,defaultChecked:c,"aria-labelledby":d,form:f,id:g,inputRef:m,name:h,nativeButton:x=!1,onCheckedChange:y,readOnly:w=!1,required:S=!1,disabled:_=!1,render:j,uncheckedValue:E,value:k,style:N,...R}=n,{clearErrors:A}=dw(),{state:M,setTouched:O,setDirty:U,validityData:I,setFilled:B,setFocused:L,shouldValidateOnChange:D,validationMode:q,disabled:F,name:Z,validation:H}=rc(),{labelId:G}=$d(),Q=F||_,V=Z??h,Y=v.useRef(null),P=Ts(Y,m,H.inputRef),K=v.useRef(null),$=br(),W=Gd({id:g,implicit:!1,controlRef:K}),ce=x?void 0:W,[ie,oe]=Gi({controlled:r,default:!!c,name:"Switch",state:"checked"});ox(K,$,ie),Re(()=>{Y.current&&B(Y.current.checked)},[Y,B]),lx(ie,()=>{A(V),U(ie!==I.initialValue),B(ie),D()?H.commit(ie):H.commit(ie,!0)});const{getButtonProps:ue,buttonRef:te}=ml({disabled:Q,native:x}),Ne=N5(d,G,Y,!x,ce),$e={id:x?W:$,role:"switch","aria-checked":ie,"aria-readonly":w||void 0,"aria-required":S||void 0,"aria-labelledby":Ne,onFocus(){Q||L(!0)},onBlur(){const Oe=Y.current;!Oe||Q||(O(!0),L(!1),q==="onBlur"&&H.commit(Oe.checked))},onClick(Oe){if(w||Q)return;Oe.preventDefault();const ze=Y.current;ze&&ze.dispatchEvent(new(Ft(ze)).PointerEvent("click",{bubbles:!0,shiftKey:Oe.shiftKey,ctrlKey:Oe.ctrlKey,altKey:Oe.altKey,metaKey:Oe.metaKey}))}},be=ka({checked:ie,disabled:Q,form:f,id:ce,name:V,required:S,style:V?Gj:Ah,tabIndex:-1,type:"checkbox","aria-hidden":!0,ref:P,onChange(Oe){if(Oe.nativeEvent.defaultPrevented)return;if(w){Oe.preventDefault();return}const ze=Oe.currentTarget.checked,xe=tt(Ns,Oe.nativeEvent);y?.(ze,xe),!xe.isCanceled&&oe(ze)},onFocus(){K.current?.focus()}},H.getInputValidationProps,k!==void 0?{value:k}:an),Se=v.useMemo(()=>({...M,checked:ie,disabled:Q,readOnly:w,required:S}),[M,ie,Q,w,S]),Ee=Lt("span",n,{state:Se,ref:[s,K,te],props:[$e,H.getValidationProps,R,ue],stateAttributesMapping:mw});return l.jsxs(fw.Provider,{value:Se,children:[Ee,!ie&&V&&E!==void 0&&l.jsx("input",{type:"hidden",form:f,name:V,value:E}),l.jsx("input",{...be,suppressHydrationWarning:!0})]})}),H5=v.forwardRef(function(n,s){const{render:r,className:i,style:c,...d}=n,f=I5();return Lt("span",n,{state:f,ref:s,stateAttributesMapping:mw,props:d})});function q5({className:e,size:n="default",...s}){return l.jsx(U5,{"data-slot":"switch","data-size":n,className:Pt("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",e),...s,children:l.jsx(H5,{"data-slot":"switch-thumb",className:"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"})})}function V5({className:e,...n}){return l.jsx(ph,{role:"status","aria-label":"Loading",className:Pt("size-4 animate-spin",e),...n})}const pw=v.createContext(!1),gw=v.createContext(void 0);function Jr(e){const n=v.useContext(gw);if(e===!1&&n===void 0)throw new Error(Nn(27));return n}const $5={...fl,...dl},hw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,forceRender:d=!1,...f}=n,{store:g}=Jr(),m=g.useState("open"),h=g.useState("nested"),x=g.useState("mounted"),y=g.useState("transitionStatus");return Lt("div",n,{state:{open:m,transitionStatus:y},ref:[g.context.backdropRef,s],stateAttributesMapping:$5,props:[{role:"presentation",hidden:!x,style:{userSelect:"none",WebkitUserSelect:"none"}},f],enabled:d||!h})}),xw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,disabled:d=!1,nativeButton:f=!0,...g}=n,{store:m}=Jr(),h=m.useState("open"),{getButtonProps:x,buttonRef:y}=ml({disabled:d,native:f}),w={disabled:d};function S(_){h&&m.setOpen(!1,tt(mT,_.nativeEvent))}return Lt("button",n,{state:w,ref:[s,y],props:[{onClick:S},g,x]})}),bw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,id:d,...f}=n,{store:g}=Jr(),m=br(d);return g.useSyncedValueWithCleanup("descriptionElementId",m),Lt("p",n,{ref:s,props:[{id:m},f]})});let G5=(function(e){return e.nestedDialogs="--nested-dialogs",e})({}),Y5=(function(e){return e[e.open=qr.open]="open",e[e.closed=qr.closed]="closed",e[e.startingStyle=qr.startingStyle]="startingStyle",e[e.endingStyle=qr.endingStyle]="endingStyle",e.nested="data-nested",e.nestedDialogOpen="data-nested-dialog-open",e})({});const vw=v.createContext(void 0);function F5(){const e=v.useContext(vw);if(e===void 0)throw new Error(Nn(26));return e}const Ai="ArrowUp",Ho="ArrowDown",hd="ArrowLeft",Mi="ArrowRight",Yd="Home",Fd="End",yw=new Set([hd,Mi]),X5=new Set([hd,Mi,Yd,Fd]),_w=new Set([Ai,Ho]),K5=new Set([Ai,Ho,Yd,Fd]),jw=new Set([...yw,..._w]),ix=new Set([...jw,Yd,Fd]),Q5="Shift",Z5="Control",J5="Alt",W5="Meta",e4=new Set([Q5,Z5,J5,W5]);function t4(e){return Ut(e)&&e.tagName==="INPUT"}function O1(e){return!!(t4(e)&&e.selectionStart!=null||Ut(e)&&e.tagName==="TEXTAREA")}function z1(e,n,s,r){if(!e||!n||!n.scrollTo)return;let i=e.scrollLeft,c=e.scrollTop;const d=e.clientWidth<e.scrollWidth,f=e.clientHeight<e.scrollHeight;if(d&&r!=="vertical"){const g=D1(e,n,"left"),m=Tu(e),h=Tu(n);s==="ltr"&&(g+n.offsetWidth+h.scrollMarginRight>e.scrollLeft+e.clientWidth-m.scrollPaddingRight?i=g+n.offsetWidth+h.scrollMarginRight-e.clientWidth+m.scrollPaddingRight:g-h.scrollMarginLeft<e.scrollLeft+m.scrollPaddingLeft&&(i=g-h.scrollMarginLeft-m.scrollPaddingLeft)),s==="rtl"&&(g-h.scrollMarginRight<e.scrollLeft+m.scrollPaddingLeft?i=g-h.scrollMarginLeft-m.scrollPaddingLeft:g+n.offsetWidth+h.scrollMarginRight>e.scrollLeft+e.clientWidth-m.scrollPaddingRight&&(i=g+n.offsetWidth+h.scrollMarginRight-e.clientWidth+m.scrollPaddingRight))}if(f&&r!=="horizontal"){const g=D1(e,n,"top"),m=Tu(e),h=Tu(n);g-h.scrollMarginTop<e.scrollTop+m.scrollPaddingTop?c=g-h.scrollMarginTop-m.scrollPaddingTop:g+n.offsetHeight+h.scrollMarginBottom>e.scrollTop+e.clientHeight-m.scrollPaddingBottom&&(c=g+n.offsetHeight+h.scrollMarginBottom-e.clientHeight+m.scrollPaddingBottom)}e.scrollTo({left:i,top:c,behavior:"auto"})}function D1(e,n,s){const r=s==="left"?"offsetLeft":"offsetTop";let i=0;for(;n.offsetParent&&(i+=n[r],n.offsetParent!==e);)n=n.offsetParent;return i}function Tu(e){const n=getComputedStyle(e);return{scrollMarginTop:parseFloat(n.scrollMarginTop)||0,scrollMarginRight:parseFloat(n.scrollMarginRight)||0,scrollMarginBottom:parseFloat(n.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(n.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(n.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(n.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(n.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(n.scrollPaddingLeft)||0}}const n4={...fl,...dl,nestedDialogOpen(e){return e?{[Y5.nestedDialogOpen]:""}:null}},Sw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,finalFocus:d,initialFocus:f,...g}=n,{store:m}=Jr(),h=m.useState("descriptionElementId"),x=m.useState("disablePointerDismissal"),y=m.useState("floatingRootContext"),w=m.useState("popupProps"),S=m.useState("modal"),_=m.useState("mounted"),j=m.useState("nested"),E=m.useState("nestedOpenDialogCount"),k=m.useState("open"),N=m.useState("openMethod"),R=m.useState("titleElementId"),A=m.useState("transitionStatus"),M=m.useState("role"),O=y.useState("floatingId"),U=g.id??O;F5(),xr({open:k,ref:m.context.popupRef,onComplete(){k&&m.context.onOpenChangeComplete?.(!0)}});function I(Z){return Z==="touch"?m.context.popupRef.current:!0}const B=f===void 0?I:f,L=E>0,D=m.useStateSetter("popupElement"),F=Lt("div",n,{state:{open:k,nested:j,transitionStatus:A,nestedDialogOpen:L},props:[w,{id:U,"aria-labelledby":R??void 0,"aria-describedby":h??void 0,role:M,...Id,hidden:!_,onKeyDown(Z){ix.has(Z.key)&&Z.stopPropagation()},style:{[G5.nestedDialogs]:E}},g],ref:[s,m.context.popupRef,D],stateAttributesMapping:n4});return l.jsx(xS,{context:y,openInteractionType:N,disabled:!_,closeOnFocusOut:!x,initialFocus:B,returnFocus:d,modal:S!==!1,restoreFocus:"popup",children:F})}),ww=v.forwardRef(function(n,s){const{cutout:r,...i}=n;let c;if(r){const d=r.getBoundingClientRect();c=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${d.left}px ${d.top}px,${d.left}px ${d.bottom}px,${d.right}px ${d.bottom}px,${d.right}px ${d.top}px,${d.left}px ${d.top}px)`}return l.jsx("div",{ref:s,role:"presentation","data-base-ui-inert":"",...i,style:{position:"fixed",inset:0,userSelect:"none",WebkitUserSelect:"none",clipPath:c}})}),Cw=v.forwardRef(function(n,s){const{keepMounted:r=!1,...i}=n,{store:c}=Jr(),d=c.useState("mounted"),f=c.useState("modal"),g=c.useState("open");return d||r?l.jsx(vw.Provider,{value:r,children:l.jsxs(hS,{ref:s,...i,children:[d&&f===!0&&l.jsx(ww,{ref:c.context.internalBackdropRef,inert:Kh(!g)}),n.children]})}):null});let L1={},P1={},B1="";function a4(e){if(typeof document>"u")return!1;const n=xt(e);return Ft(n).innerWidth-n.documentElement.clientWidth>0}function s4(e){if(!(typeof CSS<"u"&&CSS.supports&&CSS.supports("scrollbar-gutter","stable"))||typeof document>"u")return!1;const s=xt(e),r=s.documentElement,i=s.body,c=gr(r)?r:i,d=c.style.overflowY,f=r.style.scrollbarGutter;r.style.scrollbarGutter="stable",c.style.overflowY="scroll";const g=c.offsetWidth;c.style.overflowY="hidden";const m=c.offsetWidth;return c.style.overflowY=d,r.style.scrollbarGutter=f,g===m}function r4(e){const n=xt(e),s=n.documentElement,r=n.body,i=gr(s)?s:r,c={overflowY:i.style.overflowY,overflowX:i.style.overflowX};return Object.assign(i.style,{overflowY:"hidden",overflowX:"hidden"}),()=>{Object.assign(i.style,c)}}function o4(e){const n=xt(e),s=n.documentElement,r=n.body,i=Ft(s);let c=0,d=0,f=!1;const g=Ya.create();if(Sh&&(i.visualViewport?.scale??1)!==1)return()=>{};function m(){const w=i.getComputedStyle(s),S=i.getComputedStyle(r),E=(w.scrollbarGutter||"").includes("both-edges")?"stable both-edges":"stable";c=s.scrollTop,d=s.scrollLeft,L1={scrollbarGutter:s.style.scrollbarGutter,overflowY:s.style.overflowY,overflowX:s.style.overflowX},B1=s.style.scrollBehavior,P1={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};const k=s.scrollHeight>s.clientHeight,N=s.scrollWidth>s.clientWidth,R=w.overflowY==="scroll"||S.overflowY==="scroll",A=w.overflowX==="scroll"||S.overflowX==="scroll",M=Math.max(0,i.innerWidth-r.clientWidth),O=Math.max(0,i.innerHeight-r.clientHeight),U=parseFloat(S.marginTop)+parseFloat(S.marginBottom),I=parseFloat(S.marginLeft)+parseFloat(S.marginRight),B=gr(s)?s:r;if(f=s4(e),f){s.style.scrollbarGutter=E,B.style.overflowY="hidden",B.style.overflowX="hidden";return}Object.assign(s.style,{scrollbarGutter:E,overflowY:"hidden",overflowX:"hidden"}),(k||R)&&(s.style.overflowY="scroll"),(N||A)&&(s.style.overflowX="scroll"),Object.assign(r.style,{position:"relative",height:U||O?`calc(100dvh - ${U+O}px)`:"100dvh",width:I||M?`calc(100vw - ${I+M}px)`:"100vw",boxSizing:"border-box",overflow:"hidden",scrollBehavior:"unset"}),r.scrollTop=c,r.scrollLeft=d,s.setAttribute("data-base-ui-scroll-locked",""),s.style.scrollBehavior="unset"}function h(){Object.assign(s.style,L1),Object.assign(r.style,P1),f||(s.scrollTop=c,s.scrollLeft=d,s.removeAttribute("data-base-ui-scroll-locked"),s.style.scrollBehavior=B1)}function x(){h(),g.request(m)}m();const y=ct(i,"resize",x);return()=>{g.cancel(),h(),typeof i.removeEventListener=="function"&&y()}}class l4{lockCount=0;restore=null;timeoutLock=Ia.create();timeoutUnlock=Ia.create();acquire(n){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(n)),this.release}release=()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)};lock(n){if(this.lockCount===0||this.restore!==null)return;const r=xt(n).documentElement,i=Ft(r).getComputedStyle(r).overflowY;if(i==="hidden"||i==="clip"){this.restore=Dn;return}const c=Mj||!a4(n);this.restore=c?r4(n):o4(n)}}const i4=new l4;function Ew(e=!0,n=null){Re(()=>{if(e)return i4.acquire(n)},[e,n])}function c4(e){const{store:n,parentContext:s,actionsRef:r,isDrawer:i}=e,c=n.useState("open");wM(n,c),AS(n);const{forceUnmount:d}=MS(c,n),f=v.useCallback(()=>{n.setOpen(!1,tt(Uj))},[n]);return v.useImperativeHandle(r,()=>({unmount:d,close:f}),[d,f]),{parentContext:s,isDrawer:i}}function u4({store:e,dialogRoot:n}){const{parentContext:s,isDrawer:r}=n,i=e.useState("open"),c=e.useState("disablePointerDismissal"),d=e.useState("modal"),f=e.useState("popupElement"),g=e.useState("floatingRootContext"),[m,h]=v.useState(0),[x,y]=v.useState(0),w=m===0,S=Uh(g,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?"intentional":{mouse:d==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}},outsidePress(k){if(!e.context.outsidePressEnabledRef.current||"button"in k&&k.button!==0||"touches"in k&&k.touches.length!==1)return!1;const N=En(k);if(w&&!c){const R=N;return d&&(e.context.internalBackdropRef.current||e.context.backdropRef.current)?e.context.internalBackdropRef.current===R||e.context.backdropRef.current===R||Ye(R,f)&&!R?.hasAttribute("data-base-ui-portal"):!0}return!1},escapeKey:w});Ew(i&&d===!0,f),e.useContextCallback("onNestedDialogOpen",(k,N)=>{h(k),y(N)}),e.useContextCallback("onNestedDialogClose",()=>{h(0),y(0)}),v.useEffect(()=>(s?.onNestedDialogOpen&&i&&s.onNestedDialogOpen(m+1,x+(r?1:0)),s?.onNestedDialogClose&&!i&&s.onNestedDialogClose(),()=>{s?.onNestedDialogClose&&i&&s.onNestedDialogClose()}),[r,i,m,x,s]);const _=S.reference??an,j=S.trigger??an,E=v.useMemo(()=>ka(Id,S.floating),[S.floating]);return OS(e,{activeTriggerProps:_,inactiveTriggerProps:j,popupProps:E,nestedOpenDialogCount:m,nestedOpenDrawerCount:x}),null}const d4={...PS,modal:Te(e=>e.modal),nested:Te(e=>e.nested),nestedOpenDialogCount:Te(e=>e.nestedOpenDialogCount),nestedOpenDrawerCount:Te(e=>e.nestedOpenDrawerCount),disablePointerDismissal:Te(e=>e.disablePointerDismissal),openMethod:Te(e=>e.openMethod),descriptionElementId:Te(e=>e.descriptionElementId),titleElementId:Te(e=>e.titleElementId),viewportElement:Te(e=>e.viewportElement),role:Te(e=>e.role)};class cx extends qh{constructor(n,s,r=!1){const i=new Ud,c=f4(n);c.floatingRootContext=DS(i,s,r),super(c,{popupRef:v.createRef(),backdropRef:v.createRef(),internalBackdropRef:v.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:i,onOpenChange:void 0,onOpenChangeComplete:void 0},d4)}setOpen=(n,s)=>{if(s.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},!n&&s.trigger==null&&this.state.activeTriggerId!=null&&(s.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(n,s),s.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(n,s);const r={open:n};TS(r,n,s.trigger),this.update(r)};static useStore(n,s){return NS(n,(i,c)=>new cx(s,i,c),!0).store}}function f4(e={}){return{...zS(),modal:!0,disablePointerDismissal:!1,popupElement:null,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:"dialog",...e}}function m4(e,n="dialog"){const{children:s,open:r,defaultOpen:i=!1,onOpenChange:c,onOpenChangeComplete:d,disablePointerDismissal:f=!1,modal:g=!0,actionsRef:m,handle:h,triggerId:x,defaultTriggerId:y=null}=e,w=n==="drawer",S=n==="alert-dialog",_=S?!0:g,j=S||f,E=S?"alertdialog":"dialog",k=Jr(!0),R={modal:_,disablePointerDismissal:j,nested:!!k,role:E},A=cx.useStore(h?.store,{open:i,openProp:r,activeTriggerId:y,triggerIdProp:x,...R});_h(()=>{const D=r===void 0&&A.state.open===!1&&i===!0?{open:!0,activeTriggerId:y}:null;S?A.update(D?{...R,...D}:R):D&&A.update(D)}),A.useControlledProp("openProp",r),A.useControlledProp("triggerIdProp",x),A.useSyncedValues(R),A.useContextCallback("onOpenChange",c),A.useContextCallback("onOpenChangeComplete",d);const M=A.useState("open"),O=A.useState("mounted"),U=A.useState("payload"),I=c4({store:A,actionsRef:m,parentContext:k?.store.context,isDrawer:w}),B=M||O,L=v.useMemo(()=>({store:A}),[A]);return l.jsx(pw.Provider,{value:!1,children:l.jsxs(gw.Provider,{value:L,children:[B&&l.jsx(u4,{store:A,dialogRoot:I}),typeof s=="function"?s({payload:U}):s]})})}function kw(e){const n=v.useContext(pw)?"drawer":"dialog";return m4(e,n)}const Rw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,id:d,...f}=n,{store:g}=Jr(),m=br(d);return g.useSyncedValueWithCleanup("titleElementId",m),Lt("h2",n,{ref:s,props:[{id:m},f]})});function p4(e){const n=v.useRef(""),s=v.useCallback(i=>{i.defaultPrevented||(n.current=i.pointerType,e(i,i.pointerType))},[e]);return{onClick:v.useCallback(i=>{if(i.detail===0){e(i,"keyboard");return}"pointerType"in i?e(i,i.pointerType):e(i,n.current),n.current=""},[e]),onPointerDown:s}}function g4(e,n){const s=Ae((c,d)=>{(typeof e=="function"?e():e)||n(d||(Mj?"touch":""))}),{onClick:r,onPointerDown:i}=p4(s);return v.useMemo(()=>({onClick:r,onPointerDown:i}),[r,i])}function h4(e){const[n,s]=v.useState(null),r=g4(e,s);return lx(e,i=>{i&&!e&&s(null)}),v.useMemo(()=>({openMethod:n,triggerProps:r}),[n,r])}function x4({...e}){return l.jsx(kw,{"data-slot":"dialog",...e})}function b4({...e}){return l.jsx(Cw,{"data-slot":"dialog-portal",...e})}function v4({className:e,...n}){return l.jsx(hw,{"data-slot":"dialog-overlay",className:Pt("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",e),...n})}function y4({className:e,children:n,showCloseButton:s=!0,...r}){return l.jsxs(b4,{children:[l.jsx(v4,{}),l.jsxs(Sw,{"data-slot":"dialog-content",className:Pt("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...r,children:[n,s&&l.jsxs(xw,{"data-slot":"dialog-close",render:l.jsx(Wo,{variant:"ghost",className:"absolute top-2 right-2",size:"icon-sm"}),children:[l.jsx(Cd,{}),l.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function _4({className:e,...n}){return l.jsx("div",{"data-slot":"dialog-header",className:Pt("flex flex-col gap-2",e),...n})}function j4({className:e,...n}){return l.jsx(Rw,{"data-slot":"dialog-title",className:Pt("font-heading text-base leading-none font-medium",e),...n})}function S4({className:e,...n}){return l.jsx(bw,{"data-slot":"dialog-description",className:Pt("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",e),...n})}const w4={primary:"default",secondary:"outline",ghost:"ghost",destructive:"destructive"},C4={sm:"sm",md:"default"};function he({variant:e="secondary",size:n="md",loading:s,className:r,children:i,disabled:c,type:d="button",...f}){return l.jsxs(Wo,{type:d,variant:w4[e],size:C4[n],disabled:c||s,className:r,...f,children:[s?l.jsx(Yi,{size:14}):null,i]})}function Ce(e){return l.jsx(z5,{...e})}function Qt(e){return l.jsx(D5,{...e})}function E4(e){return l.jsx("select",{...e,className:Ie("h-8 w-full rounded-lg border border-input bg-transparent px-2.5 text-sm outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50",e.className)})}function fe({label:e,hint:n,badge:s,children:r}){return l.jsxs("label",{className:"block space-y-1",children:[l.jsxs("span",{className:"flex items-center gap-1.5 text-xs font-medium text-muted-foreground",children:[e,s&&l.jsx("span",{className:"rounded bg-muted px-1 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-muted-foreground",children:s})]}),r,n&&l.jsx("span",{className:"block text-[11px] text-muted-foreground/70",children:n})]})}function sn({checked:e,onChange:n,label:s,disabled:r}){return l.jsxs("label",{className:Ie("inline-flex items-center gap-2",r&&"opacity-50"),children:[l.jsx(q5,{checked:e,onCheckedChange:n,disabled:r}),s&&l.jsx("span",{className:"text-sm",children:s})]})}function Ue({children:e,tone:n="muted",className:s}){const r=n==="danger"?"destructive":n==="muted"?"secondary":"outline",i={muted:"",danger:"",success:"text-emerald-400 border-emerald-500/30",warning:"text-amber-400 border-amber-500/30",info:"text-sky-400 border-sky-500/30"};return l.jsx(B5,{variant:r,className:Ie("rounded-md",i[n],s),children:e})}function ma({open:e,onClose:n,title:s,description:r,children:i,footer:c,size:d="md"}){const f={sm:"sm:max-w-md",md:"sm:max-w-lg",lg:"sm:max-w-2xl",xl:"sm:max-w-4xl"};return l.jsx(x4,{open:e,onOpenChange:g=>{g||n()},children:l.jsxs(y4,{className:Ie("flex max-h-[88vh] w-full flex-col gap-0 p-0",f[d]),children:[(s||r)&&l.jsxs(_4,{className:"shrink-0 border-b border-border px-5 py-4 pr-12",children:[s&&l.jsx(j4,{children:s}),r&&l.jsx(S4,{children:r})]}),l.jsx("div",{className:"min-h-0 flex-1 overflow-auto px-5 py-4",children:i}),c&&l.jsx("div",{className:"flex shrink-0 items-center justify-end gap-2 border-t border-border px-5 py-4",children:c})]})})}function Yi({size:e=14}){return l.jsx(V5,{style:{width:e,height:e}})}function lt({children:e}){return l.jsx("div",{className:"rounded-lg border border-dashed border-border bg-muted/20 px-4 py-6 text-center text-sm text-muted-foreground",children:e})}function Je({label:e="Cargando…"}){return l.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[l.jsx(Yi,{})," ",e]})}const Nw=v.createContext(null);let k4=1;function R4({children:e}){const[n,s]=v.useState([]),r=v.useCallback((c,d)=>{const f=k4++;s(g=>[...g,{id:f,kind:c,message:d}]),setTimeout(()=>{s(g=>g.filter(m=>m.id!==f))},4500)},[]),i=v.useMemo(()=>({show:r,success:c=>r("success",c),error:c=>r("error",c),info:c=>r("info",c)}),[r]);return v.useEffect(()=>(window.__apxToast=i,()=>{delete window.__apxToast}),[i]),l.jsxs(Nw.Provider,{value:i,children:[e,l.jsx("div",{className:"pointer-events-none fixed bottom-4 right-4 z-[100] flex w-80 max-w-[calc(100vw-2rem)] flex-col gap-2",children:n.map(c=>l.jsx("div",{className:Ie("pointer-events-auto overflow-hidden rounded-lg border bg-card px-3 py-2 text-sm shadow-lg",c.kind==="success"&&"border-emerald-500/40",c.kind==="error"&&"border-destructive/60",c.kind==="info"&&"border-border"),children:l.jsxs("div",{className:"flex items-start gap-2",children:[l.jsx("span",{className:Ie("mt-1 size-2 shrink-0 rounded-full",c.kind==="success"&&"bg-emerald-500",c.kind==="error"&&"bg-destructive",c.kind==="info"&&"bg-sky-500")}),l.jsx("span",{className:"flex-1 break-words",children:c.message})]})},c.id))})]})}function rt(){const e=v.useContext(Nw);if(!e)throw new Error("useToast must be used inside <ToastProvider>");return e}function Tw(){const{data:e,error:n,isLoading:s}=Qe("/health",()=>J3.get(),{refreshInterval:Ed.health});return{health:e,error:n,isLoading:s,isUp:!n&&!!e}}function N4(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/engines",()=>pd.list());return{engines:e?.engines||[],error:n,isLoading:s,mutate:r}}function T4(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/telegram/status",()=>kn.status(),{refreshInterval:Ed.telegramStatus});return{status:e,error:n,isLoading:s,mutate:r}}function ux(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/telegram/channels",()=>kn.channels.list());return{channels:e?.channels||[],error:n,isLoading:s,mutate:r}}function dx(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/telegram/contacts",()=>kn.contacts.list());return{contacts:e?.contacts||[],roles:e?.roles||{},channelOwners:e?.channel_owners||[],error:n,isLoading:s,mutate:r}}function za(e){return typeof e=="string"&&e.startsWith("*** set ***")}function fr(e,n="(no seteada)"){return za(e)?e:n}function el(e){if(typeof e!="string")return null;const n=e.match(/\(\.\.\.([^)]+)\)/);return n?n[1]:null}function Aw({channel:e,onClose:n,onSaved:s}){const r=rt(),[i,c]=v.useState(!1),[d,f]=v.useState({name:""});v.useEffect(()=>{f(e?{...e,bot_token:""}:{name:""})},[e?.name]);const g=async()=>{if(!d.name?.trim()){r.error("name requerido");return}c(!0);try{e&&e.name!==""&&e?.name===d.name?await kn.channels.patch(e.name,d):await kn.channels.upsert(d),r.success("Canal guardado."),s()}catch(m){r.error(m.message)}finally{c(!1)}};return l.jsx(ma,{open:!!e,onClose:n,title:e?.name?`Editar canal: ${e.name}`:"Nuevo canal de Telegram",description:"POST /telegram/channels (upsert) — PATCH /telegram/channels/:name (parcial).",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:i,children:C("common.cancel")}),l.jsx(he,{variant:"primary",onClick:g,loading:i,children:C("common.save")})]}),children:l.jsxs("div",{className:"space-y-3",children:[l.jsx(fe,{label:"name (slug interno)",children:l.jsx(Ce,{value:d.name,onChange:m=>f({...d,name:m.target.value}),disabled:!!e?.name})}),l.jsx(fe,{label:"bot_token",hint:e?.bot_token?fr(e.bot_token):"Token del BotFather. Se guarda en ~/.apx/config.json.",children:l.jsx(Ce,{type:"password",value:d.bot_token||"",onChange:m=>f({...d,bot_token:m.target.value}),placeholder:e?.bot_token?fr(e.bot_token):""})}),l.jsx(fe,{label:"chat_id",children:l.jsx(Ce,{value:d.chat_id||"",onChange:m=>f({...d,chat_id:m.target.value})})}),l.jsx(fe,{label:"project",hint:"Slug o id del proyecto al que pinear este canal (opcional).",children:l.jsx(Ce,{value:d.project||"",onChange:m=>f({...d,project:m.target.value})})}),l.jsx(fe,{label:"route_to_agent",hint:"Agente que contesta; vacío = super-agent APX.",children:l.jsx(Ce,{value:d.route_to_agent||"",onChange:m=>f({...d,route_to_agent:m.target.value})})}),l.jsx(fe,{label:"owner_user_id",hint:"user_id de Telegram del dueño de este canal. Override del rol global a 'owner' acá. Si lo dejás vacío, el primer mensaje privado lo reclama.",children:l.jsx(Ce,{value:d.owner_user_id!=null?String(d.owner_user_id):"",onChange:m=>{const h=m.target.value.trim();f({...d,owner_user_id:h===""?void 0:/^\d+$/.test(h)?Number(h):h})},placeholder:"889721252"})}),l.jsx(sn,{checked:!!d.respond_with_engine,onChange:m=>f({...d,respond_with_engine:m}),label:"Responder con engine (no echo)"})]})})}function Mw({channel:e,onClose:n}){const s=rt(),[r,i]=v.useState(C("admin.telegram_default_message")),[c,d]=v.useState(!1),f=async()=>{if(!(!r.trim()||!e)){d(!0);try{await kn.send({text:r,channel:e.name}),s.success("Mensaje enviado."),n()}catch(g){s.error(g.message)}finally{d(!1)}}};return l.jsx(ma,{open:!!e,onClose:n,title:e?`${C("admin.telegram_send_test_title")} ${e.name}`:"",description:e?`chat_id: ${e.chat_id||"—"}`:"",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:c,children:C("common.cancel")}),l.jsx(he,{variant:"primary",onClick:f,loading:c,children:"Enviar"})]}),children:l.jsx(fe,{label:"Texto",children:l.jsx(Qt,{rows:4,value:r,onChange:g=>i(g.target.value)})})})}function Ow({bare:e=!1}){const n=rt(),{contacts:s,roles:r,channelOwners:i,isLoading:c,mutate:d}=dx(),f=new Set(i.filter(y=>y.owner_user_id!=null).map(y=>String(y.owner_user_id))),g=Array.from(new Set(["owner","guest",...Object.keys(r)])),m=async(y,w)=>{try{await kn.contacts.patch(y.user_id,{role:w}),n.success(`${y.name||y.user_id} → ${w}`),d()}catch(S){n.error(S.message)}},h=async y=>{if(confirm(C("telegram_contacts.delete_confirm",{name:y.name||String(y.user_id)})))try{await kn.contacts.remove(y.user_id),n.success(C("telegram_contacts.removed")),d()}catch(w){n.error(w.message)}},x=l.jsxs(l.Fragment,{children:[c&&l.jsx(Je,{}),!c&&s.length===0&&l.jsx(lt,{children:C("telegram_contacts.empty")}),s.length>0&&l.jsx("ul",{className:"space-y-2 text-sm",children:s.map(y=>{const w=f.has(String(y.user_id)),S=w?"owner":y.role||"guest";return l.jsxs("li",{className:"rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx("span",{className:"font-medium",children:y.name||"—"}),y.username&&l.jsxs("span",{className:"ml-2 text-xs text-muted-fg",children:["@",y.username]}),w&&l.jsx(Ue,{tone:"success",children:C("telegram_contacts.owner_badge")})]}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(E4,{value:S,disabled:w,onChange:_=>m(y,_.target.value),title:C(w?"telegram_contacts.owner_hint":"telegram_contacts.assign_role"),children:g.map(_=>l.jsx("option",{value:_,children:_},_))}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>h(y),children:C("common.delete")})]})]}),l.jsxs("div",{className:"mt-1 grid grid-cols-3 gap-2 text-xs text-muted-fg",children:[l.jsxs("span",{children:["user_id: ",String(y.user_id)]}),l.jsxs("span",{children:[C("telegram_contacts.last_seen")," ",y.last_seen?y.last_seen.slice(0,10):"—"]}),l.jsx("span",{children:A4(r[S])})]})]},String(y.user_id))})})]});return e?x:l.jsx(He,{title:C("telegram_contacts.title"),description:C("telegram_contacts.desc"),children:x})}function A4(e){return!e||e.tools===void 0?"":e.tools==="*"?C("telegram_contacts.tools_all"):Array.isArray(e.tools)?e.tools.length?`${C("telegram_contacts.tools_label")} ${e.tools.join(", ")}`:C("telegram_contacts.tools_none"):""}function M4(){const e=Ua(),n=rt(),{health:s,isUp:r}=Tw(),{projects:i,isLoading:c,mutate:d}=sc(),{engines:f,isLoading:g}=N4(),{status:m,mutate:h}=T4(),{channels:x,isLoading:y,mutate:w}=ux(),[S,_]=v.useState(null),[j,E]=v.useState(null),k=async()=>{try{await Zo.reload(),n.success(C("admin.reload_success"))}catch(M){n.error(M.message)}},N=async()=>{try{m?.enabled?(await kn.stop(),n.info(C("admin.telegram_polling_stopped"))):(await kn.start(),n.success(C("admin.telegram_polling_started"))),h()}catch(M){n.error(M.message)}},R=async M=>{if(confirm(C("telegram_channels.delete_confirm",{name:M})))try{await kn.channels.remove(M),n.success(C("admin.telegram_channel_removed")),w()}catch(O){n.error(O.message)}},A=async(M,O)=>{if(confirm(C("admin.unregister_confirm",{label:O})))try{await Qn.remove(M),n.success(C("project.unregistered")),d()}catch(U){n.error(U.message)}};return l.jsxs("div",{className:"mx-auto max-w-5xl space-y-6 p-6","data-testid":"screen-admin",children:[l.jsxs("header",{className:"flex items-end justify-between",children:[l.jsxs("div",{children:[l.jsx("h1",{className:"text-2xl font-bold tracking-tight",children:C("admin.title")}),l.jsx("p",{className:"text-sm text-muted-fg",children:C("admin.subtitle")})]}),l.jsxs("div",{className:"flex gap-2",children:[l.jsxs(he,{size:"sm",onClick:k,title:C("daemon.reload_hint"),children:[C("common.reload")," config"]}),l.jsxs(he,{size:"sm",variant:"primary",onClick:()=>e("/?action=add-project"),children:[l.jsx(Rn,{size:14})," ",C("nav.project")]})]})]}),l.jsx(He,{title:C("daemon.version"),children:l.jsxs("div",{className:"grid grid-cols-3 gap-3 text-sm",children:[l.jsx(qp,{label:C("daemon.version"),value:s?.version||"—"}),l.jsx(qp,{label:C("daemon.uptime"),value:s?`${s.uptime_s}s`:"—"}),l.jsx(qp,{label:C("daemon.status"),value:C(r?"daemon.running":"daemon.down"),ok:r})]})}),l.jsxs(He,{title:C("admin.engines_title"),description:C("admin.engines_subtitle"),children:[g&&l.jsx(Je,{}),l.jsx("div",{className:"flex flex-wrap gap-1.5",children:f.map(M=>l.jsx(Ue,{tone:"info",children:M},M))})]}),l.jsxs(He,{title:C("admin.telegram_title"),description:C("admin.telegram_subtitle"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(sn,{checked:!!m?.enabled,onChange:N,label:m?.enabled?C("admin.telegram_polling_on"):C("admin.telegram_polling_off")}),l.jsxs(he,{size:"sm",onClick:()=>_({name:""}),children:[l.jsx(Rn,{size:14})," ",C("admin.telegram_add_channel")]})]}),children:[y&&l.jsx(Je,{}),x.length===0&&l.jsx(lt,{children:C("common.none_yet")}),l.jsx("ul",{className:"space-y-2 text-sm",children:x.map(M=>l.jsxs("li",{className:"rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsx("span",{className:"font-medium",children:M.name}),l.jsxs("div",{className:"flex items-center gap-2",children:[M.project&&l.jsxs(Ue,{tone:"success",children:["project = ",M.project]}),l.jsxs(he,{size:"sm",variant:"ghost",onClick:()=>E(M),children:[l.jsx(Za,{size:13})," ",C("admin.telegram_send_test")]}),l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>_(M),children:C("common.edit")}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>R(M.name),children:C("common.delete")})]})]}),l.jsxs("div",{className:"mt-1 grid grid-cols-3 gap-2 text-xs text-muted-fg",children:[l.jsxs("span",{children:["chat_id: ",M.chat_id||"—"]}),l.jsxs("span",{children:["route_to_agent: ",M.route_to_agent||"default APX"]}),l.jsxs("span",{children:["engine: ",M.respond_with_engine?C("admin.engine_badge"):C("admin.engine_badge_no")]})]})]},M.name))})]}),l.jsx(Ow,{}),l.jsxs(He,{title:C("admin.projects_title"),description:C("admin.projects_subtitle"),children:[c&&l.jsx(Je,{}),l.jsx("ul",{className:"divide-y divide-border",children:i.map(M=>l.jsxs("li",{className:"flex items-center gap-3 py-2",children:[l.jsxs("span",{className:"w-10 font-mono text-xs text-muted-fg",children:["#",M.id]}),l.jsxs("button",{type:"button",className:"flex-1 text-left hover:underline",onClick:()=>e(`/p/${M.id}`),children:[l.jsx("span",{className:"font-medium",children:M.name||M.path.split("/").pop()}),l.jsx("span",{className:"ml-2 text-xs text-muted-fg",children:M.path})]}),l.jsxs(Ue,{children:[M.agents??0," ",C("admin.agents_badge")]}),Number(M.id)!==0&&l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>A(String(M.id),M.name||M.path),children:C("admin.unregister")})]},M.id))})]}),l.jsx(Aw,{channel:S,onClose:()=>_(null),onSaved:()=>{_(null),w()}}),l.jsx(Mw,{channel:j,onClose:()=>E(null)})]})}function qp({label:e,value:n,ok:s}){return l.jsxs("div",{className:"rounded-md border border-border bg-muted/30 p-3",children:[l.jsx("div",{className:"text-xs uppercase tracking-wide text-muted-fg",children:e}),l.jsxs("div",{className:"mt-1 flex items-center gap-2 text-base font-medium",children:[s!==void 0&&l.jsx(Vd,{ok:s}),l.jsx("span",{children:n})]})]})}function zw(e){const[n,s]=v.useState(!1);return v.useEffect(()=>{try{s(localStorage.getItem(e)==="true")}catch{}},[e]),{collapsed:n,toggle:()=>s(i=>{const c=!i;try{localStorage.setItem(e,String(c))}catch{}return c})}}function O4({collapsed:e,onToggle:n}){return l.jsx(Ko,{content:e?"Expandir menú":"Colapsar menú",side:"bottom",children:l.jsx("button",{type:"button",onClick:n,"aria-label":e?"Expandir menú":"Colapsar menú",className:"flex size-7 shrink-0 items-center justify-center rounded-md text-muted-fg transition-colors hover:bg-accent hover:text-foreground",children:l.jsx(eN,{className:Ie("size-4 transition-transform",e&&"rotate-180")})})})}function z4({sections:e,active:n,onChange:s,collapsed:r=!1}){return l.jsx("nav",{className:Ie("hidden md:flex shrink-0 flex-col gap-1 py-3 transition-all",r?"w-12 items-center px-1":"w-52 px-2"),children:e.map((i,c)=>l.jsxs("div",{className:Ie("w-full",c>0&&"mt-2"),children:[!r&&i.title&&l.jsx("p",{className:"mb-1 px-2 text-[9px] font-semibold uppercase tracking-wider text-muted-fg/70",children:i.title}),l.jsx("div",{className:"space-y-0.5",children:i.items.map(({key:d,label:f,icon:g,badge:m})=>{const h=n===d,x=l.jsxs("button",{type:"button",onClick:()=>s(d),"data-testid":`tabnav-${d||"index"}`,className:Ie("flex cursor-pointer items-center rounded-lg transition-colors",r?"size-9 justify-center":"w-full gap-2 px-2.5 py-1.5",h?"bg-accent text-accent-fg":"text-muted-fg hover:bg-accent/60 hover:text-foreground"),children:[l.jsx(g,{className:"size-4 shrink-0"}),!r&&l.jsxs(l.Fragment,{children:[l.jsx("span",{className:"flex-1 truncate text-left text-xs",children:f}),m!==void 0&&l.jsx("span",{className:"rounded-full bg-muted px-1.5 text-[9px] text-muted-fg",children:m})]})]});return r?l.jsx(Ko,{content:f,side:"right",children:x},d):l.jsx(v.Fragment,{children:x},d)})})]},c))})}function Dw({sections:e,active:n,onChange:s,collapsed:r,onToggleCollapse:i,actions:c,contentClassName:d,testId:f,children:g}){return l.jsxs("div",{className:"flex h-full",children:[l.jsx(z4,{sections:e,active:n,onChange:s,collapsed:r}),l.jsxs("div",{className:"flex min-w-0 flex-1 flex-col overflow-y-auto",children:[l.jsxs("div",{className:"flex items-center justify-between px-6 pt-3",children:[l.jsx(O4,{collapsed:r,onToggle:i}),c?l.jsx("div",{className:"flex gap-2",children:c}):null]}),l.jsx("div",{className:Ie(d),"data-testid":f,children:g})]})]})}function I1({pid:e}){const n=Qe(`/projects/${e}/tasks?state=open`,()=>lr.list(e)),s=Qe(`/projects/${e}/routines`,()=>or.list(e)),r=Qe(`/projects/${e}/agents`,()=>Jt.list(e)),i=Qe(`/projects/${e}/mcps`,()=>Ti.list(e));return l.jsxs("div",{className:"grid grid-cols-2 gap-4 md:grid-cols-3",children:[l.jsx(fi,{title:C("project.overview.tasks_open"),value:n.data?.length??"…",href:`/p/${e}/tasks`,icon:Bi}),l.jsx(fi,{title:C("project.overview.routines"),value:s.data?.length??"…",href:`/p/${e}/routines`,icon:Go}),l.jsx(fi,{title:C("project.overview.agents"),value:r.data?.length??"…",href:`/p/${e}/agents`,icon:vn}),l.jsx(fi,{title:C("project.overview.mcps"),value:i.data?.length??"…",href:`/p/${e}/mcps`,icon:Cg}),l.jsx(fi,{title:C("project.overview.chat"),value:C("project.overview.chat_value"),href:`/p/${e}/chat`,icon:ki})]})}function fi({title:e,value:n,href:s,icon:r}){return l.jsxs(nj,{to:s,className:"flex items-center gap-3 rounded-xl border border-border bg-card p-4 hover:bg-accent/40",children:[l.jsx("span",{className:"grid size-10 place-items-center rounded-lg bg-muted text-muted-fg",children:l.jsx(r,{size:20})}),l.jsxs("div",{children:[l.jsx("div",{className:"text-xs uppercase tracking-wide text-muted-fg",children:e}),l.jsx("div",{className:"text-2xl font-semibold",children:n})]})]})}function D4(){const e=Ua(),{projects:n,isLoading:s}=sc();return l.jsxs(He,{title:C("base.workspaces_title"),description:C("base.workspaces_desc"),action:l.jsxs(he,{size:"sm",variant:"primary",onClick:()=>e("/p/0/workspaces?action=add-project"),children:[l.jsx(Rn,{size:14})," ",C("base.workspaces_new")]}),children:[s&&l.jsx(Je,{}),!s&&n.length===0&&l.jsx(lt,{children:C("base.workspaces_empty")}),l.jsx("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3",children:n.map(r=>{const i=String(r.id)==="0",c=i?C("base.title"):r.name||r.path.split("/").pop()||String(r.id);return l.jsxs("button",{type:"button",onClick:()=>e(`/p/${r.id}`),className:"flex cursor-pointer flex-col gap-2 rounded-xl border border-border bg-card p-4 text-left transition-colors hover:border-muted-fg/50",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(mj,{className:"size-4 text-muted-fg"}),l.jsx("span",{className:"truncate text-sm font-semibold",children:c}),l.jsx(Ue,{tone:i?"success":"info",children:i?C("base.title"):iw(r.kind)})]}),l.jsx("p",{className:"truncate font-mono text-[10px] text-muted-fg",children:r.path})]},r.id)})})]})}const Lw=v.createContext(null),Pw=v.createContext(null);function Wa(){const e=v.useContext(Lw);if(e===null)throw new Error(Nn(60));return e}function Bw(){const e=v.useContext(Pw);if(e===null)throw new Error(Nn(61));return e}const L4=(e,n)=>Object.is(e,n);function tl(e,n,s){return e==null||n==null?Object.is(e,n):s(e,n)}function P4(e,n,s){return!e||e.length===0?!1:e.some(r=>r===void 0?!1:tl(n,r,s))}function Oi(e,n,s){return!e||e.length===0?-1:e.findIndex(r=>r===void 0?!1:tl(r,n,s))}function B4(e,n,s){return e.filter(r=>!tl(n,r,s))}function Kg(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Iw(e){return e!=null&&e.length>0&&typeof e[0]=="object"&&e[0]!=null&&"items"in e[0]}function I4(e){if(!Array.isArray(e))return e!=null&&"null"in e;const n=e;if(Iw(n)){for(const s of n)for(const r of s.items)if(r&&r.value==null&&r.label!=null)return!0;return!1}for(const s of n)if(s&&s.value==null&&s.label!=null)return!0;return!1}function Uw(e,n){if(n&&e!=null)return n(e)??"";if(e&&typeof e=="object"){if("label"in e&&e.label!=null)return String(e.label);if("value"in e)return String(e.value)}return Kg(e)}function Uo(e,n){return n&&e!=null?n(e)??"":e&&typeof e=="object"&&"value"in e&&"label"in e?Kg(e.value):Kg(e)}function Hw(e,n,s){function r(){return Uw(e,s)}if(s&&e!=null)return s(e);if(e&&typeof e=="object"&&"label"in e&&e.label!=null)return e.label;if(n&&!Array.isArray(n))return n[e]??r();if(Array.isArray(n)){const i=n,c=Iw(i)?i.flatMap(d=>d.items):i;if(e==null||typeof e!="object"){const d=c.find(f=>f.value===e);return d&&d.label!=null?d.label:r()}if("value"in e){const d=c.find(f=>f&&f.value===e.value);if(d&&d.label!=null)return d.label}}return r()}function U4(e,n,s){return e.reduce((r,i,c)=>(c>0&&r.push(", "),r.push(l.jsx(v.Fragment,{children:Hw(i,n,s)},c)),r),[])}const Fe={id:Te(e=>e.id),labelId:Te(e=>e.labelId),modal:Te(e=>e.modal),multiple:Te(e=>e.multiple),items:Te(e=>e.items),itemToStringLabel:Te(e=>e.itemToStringLabel),itemToStringValue:Te(e=>e.itemToStringValue),isItemEqualToValue:Te(e=>e.isItemEqualToValue),value:Te(e=>e.value),hasSelectedValue:Te(e=>{const{value:n,multiple:s,itemToStringValue:r}=e;return n==null?!1:s&&Array.isArray(n)?n.length>0:Uo(n,r)!==""}),hasNullItemLabel:Te((e,n)=>n?I4(e.items):!1),open:Te(e=>e.open),mounted:Te(e=>e.mounted),forceMount:Te(e=>e.forceMount),transitionStatus:Te(e=>e.transitionStatus),openMethod:Te(e=>e.openMethod),activeIndex:Te(e=>e.activeIndex),selectedIndex:Te(e=>e.selectedIndex),isActive:Te((e,n)=>e.activeIndex===n),isSelected:Te((e,n,s)=>{const r=e.isItemEqualToValue,i=e.value;return e.multiple?Array.isArray(i)&&i.some(c=>tl(s,c,r)):e.selectedIndex===n&&e.selectedIndex!==null?!0:tl(s,i,r)}),isSelectedByFocus:Te((e,n)=>e.selectedIndex===n),popupProps:Te(e=>e.popupProps),triggerProps:Te(e=>e.triggerProps),triggerElement:Te(e=>e.triggerElement),positionerElement:Te(e=>e.positionerElement),listElement:Te(e=>e.listElement),popupSide:Te(e=>e.popupSide),scrollUpArrowVisible:Te(e=>e.scrollUpArrowVisible),scrollDownArrowVisible:Te(e=>e.scrollDownArrowVisible),hasScrollArrows:Te(e=>e.hasScrollArrows)};function Si(e,n=Number.MIN_SAFE_INTEGER,s=Number.MAX_SAFE_INTEGER){return Math.max(n,Math.min(e,s))}const Oa=1;function fx(e,n){return Math.max(0,e-n)}function xd(e,n){if(n<=0)return 0;const s=Si(e,0,n),r=s,i=n-s,c=r<=Oa,d=i<=Oa;return c&&d?r<=i?0:n:c?0:d?n:s}function H4(e){const{id:n,value:s,defaultValue:r=null,onValueChange:i,open:c,defaultOpen:d=!1,onOpenChange:f,name:g,form:m,autoComplete:h,disabled:x=!1,readOnly:y=!1,required:w=!1,modal:S=!0,actionsRef:_,inputRef:j,onOpenChangeComplete:E,items:k,multiple:N=!1,itemToStringLabel:R,itemToStringValue:A,isItemEqualToValue:M=L4,highlightItemOnHover:O=!0,children:U}=e,{clearErrors:I}=dw(),{setDirty:B,setTouched:L,setFocused:D,shouldValidateOnChange:q,validityData:F,setFilled:Z,name:H,disabled:G,validation:Q,validationMode:V}=rc(),Y=Gd({id:n}),P=G||x,K=H??g,[$,W]=Gi({controlled:s,default:N?r??Ui:r,name:"Select",state:"value"}),[ce,ie]=Gi({controlled:c,default:d,name:"Select",state:"open"}),oe=v.useRef([]),ue=v.useRef([]),te=v.useRef(null),Ne=v.useRef(null),$e=v.useRef(0),be=v.useRef(null),Se=v.useRef([]),Ee=v.useRef(!1),Oe=v.useRef(!1),ze=v.useRef(null),xe=v.useRef(null),ke=v.useRef({allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0}),_e=v.useRef(!1),{mounted:De,setMounted:Ge,transitionStatus:qe}=tc(ce),{openMethod:Me,triggerProps:ve}=h4(ce),re=fa(()=>new RS({id:Y,labelId:void 0,modal:S,multiple:N,itemToStringLabel:R,itemToStringValue:A,isItemEqualToValue:M,value:$,open:ce,mounted:De,transitionStatus:qe,items:k,forceMount:!1,openMethod:null,activeIndex:null,selectedIndex:null,popupProps:{},triggerProps:{},triggerElement:null,positionerElement:null,listElement:null,popupSide:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1,hasScrollArrows:!1})).current,ye=Ke(re,Fe.activeIndex),je=Ke(re,Fe.selectedIndex),Pe=Ke(re,Fe.triggerElement),Ze=Ke(re,Fe.positionerElement),_t=p3(Me),Ht=Me??_t,vt=v.useMemo(()=>N&&Array.isArray($)&&$.length===0?"":Uo($,A),[N,$,A]),ut=v.useMemo(()=>N&&Array.isArray($)?$.map(nt=>Uo(nt,A)):Uo($,A),[N,$,A]),it=cn(re.state.triggerElement),Et=Ae(()=>ut);ox(it,Y,$,Et);const Bt=v.useRef($),pa=N?Array.isArray($)&&$.length>0:$!=null;Re(()=>{$!==Bt.current&&re.set("forceMount",!0)},[re,$]),Re(()=>{Z(pa)},[pa,Z]),Re(function(){const At=Se.current;let yn;if(N){const en=Array.isArray($)?$:[];if(en.length===0)yn=null;else{const kt=en[en.length-1],un=Oi(At,kt,M);yn=un===-1?null:un}}else{const en=Oi(At,$,M);yn=en===-1?null:en}yn===null&&(xe.current=null),!ce&&re.set("selectedIndex",yn)},[pa,N,ce,$,Se,M,re,xe]),lx($,()=>{I(K),B($!==F.initialValue),q()?Q.commit($):Q.commit($,!0)});const gn=Ae((nt,At)=>{if(f?.(nt,At),!At.isCanceled&&(ie(nt),!nt&&(At.reason===Md||At.reason===Rh)&&(L(!0),D(!1),V==="onBlur"&&Q.commit($)),!nt&&re.state.activeIndex!==null)){const yn=oe.current[re.state.activeIndex];queueMicrotask(()=>{yn?.setAttribute("tabindex","-1")})}}),dt=Ae(()=>{Ge(!1),re.update({activeIndex:null,openMethod:null}),E?.(!1)});xr({enabled:!_,open:ce,ref:te,onComplete(){ce||dt()}}),v.useImperativeHandle(_,()=>({unmount:dt}),[dt]);const Tt=Ae((nt,At)=>{i?.(nt,At),!At.isCanceled&&W(nt)}),Xt=Ae(()=>{const nt=re.state.listElement||te.current;if(!nt)return;const At=fx(nt.scrollHeight,nt.clientHeight),yn=xd(nt.scrollTop,At),en=yn>0,kt=yn<At;re.state.scrollUpArrowVisible!==en&&re.set("scrollUpArrowVisible",en),re.state.scrollDownArrowVisible!==kt&&re.set("scrollDownArrowVisible",kt)}),yt=BS({open:ce,onOpenChange:gn,elements:{reference:Pe,floating:Ze}}),Wt=hA(yt,{enabled:!y&&!P,event:"mousedown"}),Vt=Uh(yt),rn=DM(yt,{enabled:!y&&!P,listRef:oe,activeIndex:ye,selectedIndex:je,disabledIndices:Ui,onNavigate(nt){nt===null&&!ce||re.set("activeIndex",nt)},focusItemOnHover:O}),Tn=LM(yt,{enabled:!y&&!P&&(ce||!N),listRef:ue,activeIndex:ye,selectedIndex:je,onMatch(nt){ce?re.set("activeIndex",nt):Tt(Se.current[nt],tt("none"))},onTyping(nt){Ee.current=nt}}),qn=v.useMemo(()=>{const nt=ka(Tn.reference,rn.reference,Vt.reference,Wt.reference,ve);return Y&&(nt.id=Y),nt},[Wt.reference,Tn.reference,rn.reference,Vt.reference,ve,Y]),ta=v.useMemo(()=>ka(Id,Tn.floating,rn.floating,Vt.floating),[Tn.floating,rn.floating,Vt.floating]),Vn=rn.item??an;_h(()=>{re.update({popupProps:ta,triggerProps:qn})}),Re(()=>{re.update({id:Y,modal:S,multiple:N,value:$,open:ce,mounted:De,transitionStatus:qe,popupProps:ta,triggerProps:qn,items:k,itemToStringLabel:R,itemToStringValue:A,isItemEqualToValue:M,openMethod:Ht})},[re,Y,S,N,$,ce,De,qe,ta,qn,k,R,A,M,Ht]);const es=v.useMemo(()=>({store:re,name:K,required:w,disabled:P,readOnly:y,multiple:N,highlightItemOnHover:O,setValue:Tt,setOpen:gn,listRef:oe,popupRef:te,scrollHandlerRef:Ne,handleScrollArrowVisibility:Xt,scrollArrowsMountedCountRef:$e,itemProps:Vn,events:yt.context.events,valueRef:be,valuesRef:Se,labelsRef:ue,typingRef:Ee,selectionRef:ke,firstItemTextRef:ze,selectedItemTextRef:xe,validation:Q,onOpenChangeComplete:E,keyboardActiveRef:Oe,alignItemWithTriggerActiveRef:_e,initialValueRef:Bt}),[re,K,w,P,y,N,O,Tt,gn,Vn,yt.context.events,Q,E,Xt]),An=Ts(j,Q.inputRef),na=N&&Array.isArray($)&&$.length>0,Na=N?void 0:K,ts=v.useMemo(()=>!N||!Array.isArray($)||!K?null:$.map(nt=>{const At=Uo(nt,A);return l.jsx("input",{type:"hidden",form:m,name:K,value:At},At)}),[N,$,m,K,A]);return l.jsx(Lw.Provider,{value:es,children:l.jsxs(Pw.Provider,{value:yt,children:[U,l.jsx("input",{...Q.getInputValidationProps({onFocus(){re.state.triggerElement?.focus({focusVisible:!0})},onChange(nt){if(nt.nativeEvent.defaultPrevented||P||y){nt.preventBaseUIHandler?.();return}const At=nt.currentTarget.value,yn=tt(Ns,nt.nativeEvent);function en(){if(N)return;const kt=Se.current.find(un=>Uo(un,A).toLowerCase()===At.toLowerCase()||Uw(un,R).toLowerCase()===At.toLowerCase());kt!=null&&(B(kt!==F.initialValue),Tt(kt,yn),q()&&Q.commit(kt))}re.set("forceMount",!0),queueMicrotask(en)}}),id:Y&&Na==null?`${Y}-hidden-input`:void 0,form:m,name:Na,autoComplete:h,value:vt,disabled:P,required:w&&!na,readOnly:y,ref:An,style:K?Gj:Ah,tabIndex:-1,"aria-hidden":!0,suppressHydrationWarning:!0}),ts]})})}function q4(e,n){return e??n}function V4(e){const n=e.getBoundingClientRect(),s=Ft(e),r=s.getComputedStyle(e,"::before"),i=s.getComputedStyle(e,"::after");if(!(r.content!=="none"||i.content!=="none"))return n;const d=parseFloat(r.width)||0,f=parseFloat(r.height)||0,g=parseFloat(i.width)||0,m=parseFloat(i.height)||0,h=Math.max(n.width,d,g),x=Math.max(n.height,f,m),y=h-n.width,w=x-n.height;return{left:n.left-y/2,right:n.right+y/2,top:n.top-w/2,bottom:n.bottom+w/2}}const Au=2,$4=400,G4={...KM,...rx,popupSide:e=>e?{"data-popup-side":e}:null,value:()=>null},Y4=v.forwardRef(function(n,s){const{render:r,className:i,id:c,disabled:d=!1,nativeButton:f=!0,style:g,...m}=n,{setTouched:h,setFocused:x,validationMode:y,state:w,disabled:S}=rc(),{labelId:_}=$d(),{store:j,setOpen:E,selectionRef:k,validation:N,readOnly:R,required:A,alignItemWithTriggerActiveRef:M,disabled:O,keyboardActiveRef:U}=Wa(),I=S||O||d,B=Ke(j,Fe.open),L=Ke(j,Fe.mounted),D=Ke(j,Fe.value),q=Ke(j,Fe.triggerProps),F=Ke(j,Fe.positionerElement),Z=Ke(j,Fe.listElement),H=Ke(j,Fe.popupSide),G=Ke(j,Fe.id),Q=Ke(j,Fe.labelId),V=Ke(j,Fe.hasSelectedValue),Y=L&&F?H:null,P=c??G,K=q4(_,Q);Gd({id:P});const $=cn(F),W=v.useRef(null),{getButtonProps:ce,buttonRef:ie}=ml({disabled:I,native:f}),oe=Ae(Ee=>{j.set("triggerElement",Ee)}),ue=Ts(s,W,ie,oe),te=Zn(),Ne=Zn(),$e=Zn();v.useEffect(()=>{if(B)return $e.start($4,()=>{k.current.allowUnselectedMouseUp=!0,k.current.allowSelectedMouseUp=!0}),()=>{$e.clear()};k.current={allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0},Ne.clear()},[B,k,Ne,$e]);const be=ka(q,{id:P,role:"combobox","aria-expanded":B?"true":"false","aria-haspopup":"listbox","aria-controls":B?Z?.id??nd(F)?.id:void 0,"aria-labelledby":K,"aria-readonly":R||void 0,"aria-required":A||void 0,tabIndex:I?-1:0,ref:ue,onFocus(Ee){x(!0),B&&M.current&&E(!1,tt(Ns,Ee.nativeEvent)),te.start(0,()=>{j.set("forceMount",!0)})},onBlur(Ee){Ye(F,Ee.relatedTarget)||(h(!0),x(!1),y==="onBlur"&&N.commit(D))},onPointerMove(){U.current=!1},onKeyDown(){U.current=!0},onMouseDown(Ee){if(B)return;const Oe=xt(Ee.currentTarget);function ze(xe){if(!W.current)return;const ke=xe.target;if(Ye(W.current,ke)||Ye($.current,ke)||ke===W.current)return;const _e=V4(W.current);xe.clientX>=_e.left-Au&&xe.clientX<=_e.right+Au&&xe.clientY>=_e.top-Au&&xe.clientY<=_e.bottom+Au||E(!1,tt(pT,xe))}Ne.start(0,()=>{Oe.addEventListener("mouseup",ze,{once:!0})})}},N.getValidationProps,m,ce);be.role="combobox";const Se={...w,open:B,disabled:I,value:D,readOnly:R,popupSide:Y,placeholder:!V};return Lt("button",n,{ref:[s,W],state:Se,stateAttributesMapping:G4,props:be})}),F4={value:()=>null},X4=v.forwardRef(function(n,s){const{className:r,render:i,children:c,placeholder:d,style:f,...g}=n,{store:m,valueRef:h}=Wa(),x=Ke(m,Fe.value),y=Ke(m,Fe.items),w=Ke(m,Fe.itemToStringLabel),S=Ke(m,Fe.hasSelectedValue),_=!S&&d!=null&&c==null,j=Ke(m,Fe.hasNullItemLabel,_),E={value:x,placeholder:!S};let k=null;return typeof c=="function"?k=c(x):c!=null?k=c:!S&&d!=null&&!j?k=d:Array.isArray(x)?k=U4(x,y,w):k=Hw(x,y,w),Lt("span",n,{state:E,ref:[s,h],props:[{children:k},g],stateAttributesMapping:F4})}),K4=v.forwardRef(function(n,s){const{render:r,className:i,style:c,...d}=n,{store:f}=Wa(),m={open:Ke(f,Fe.open)};return Lt("span",n,{state:m,ref:s,props:[{"aria-hidden":!0,children:"▼"},d],stateAttributesMapping:US})}),Q4=v.createContext(void 0),Z4=v.forwardRef(function(n,s){const{store:r}=Wa(),i=Ke(r,Fe.mounted),c=Ke(r,Fe.forceMount);return i||c?l.jsx(Q4.Provider,{value:!0,children:l.jsx(hS,{ref:s,...n})}):null}),qw=v.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}});function J4(){return v.useContext(qw)}function mx(e){const{children:n,elementsRef:s,labelsRef:r,onMapChange:i}=e,c=Ae(i),d=v.useRef(0),f=fa(eO).current,g=fa(W4).current,[m,h]=v.useState(0),x=v.useRef(m),y=Ae((E,k)=>{g.set(E,k??null),x.current+=1,h(x.current)}),w=Ae(E=>{g.delete(E),x.current+=1,h(x.current)}),S=v.useMemo(()=>{const E=new Map;return Array.from(g.keys()).filter(N=>N.isConnected).sort(tO).forEach((N,R)=>{const A=g.get(N)??{};E.set(N,{...A,index:R})}),E},[g,m]);Re(()=>{if(typeof MutationObserver!="function"||S.size===0)return;const E=new MutationObserver(k=>{const N=new Set,R=A=>N.has(A)?N.delete(A):N.add(A);k.forEach(A=>{A.removedNodes.forEach(R),A.addedNodes.forEach(R)}),N.size===0&&(x.current+=1,h(x.current))});return S.forEach((k,N)=>{N.parentElement&&E.observe(N.parentElement,{childList:!0})}),()=>{E.disconnect()}},[S]),Re(()=>{x.current===m&&(s.current.length!==S.size&&(s.current.length=S.size),r&&r.current.length!==S.size&&(r.current.length=S.size),d.current=S.size),c(S)},[c,S,s,r,m]),Re(()=>()=>{s.current=[]},[s]),Re(()=>()=>{r&&(r.current=[])},[r]);const _=Ae(E=>(f.add(E),()=>{f.delete(E)}));Re(()=>{f.forEach(E=>E(S))},[f,S]);const j=v.useMemo(()=>({register:y,unregister:w,subscribeMapChange:_,elementsRef:s,labelsRef:r,nextIndexRef:d}),[y,w,_,s,r,d]);return l.jsx(qw.Provider,{value:j,children:n})}function W4(){return new Map}function eO(){return new Set}function tO(e,n){const s=e.compareDocumentPosition(n);return s&Node.DOCUMENT_POSITION_FOLLOWING||s&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:s&Node.DOCUMENT_POSITION_PRECEDING||s&Node.DOCUMENT_POSITION_CONTAINS?1:0}const Vw=v.createContext(void 0);function px(){const e=v.useContext(Vw);if(!e)throw new Error(Nn(59));return e}function bd(e,n){e&&Object.assign(e.style,n)}const $w={position:"relative",maxHeight:"100%",overflowX:"hidden",overflowY:"auto"},nO=20;function aO(e,n,s,r){const[i,c]=v.useState(!1);Re(()=>{if(!e||!n||s==null){c(!1);return}const d=xt(s).documentElement.clientWidth,f=s.offsetWidth;c(d>0&&f>0&&f>=d-nO)},[e,n,s]),Ew(e&&(!n||i),r)}const sO={position:"fixed"},rO=v.forwardRef(function(n,s){const{anchor:r,positionMethod:i="absolute",className:c,render:d,side:f="bottom",align:g="center",sideOffset:m=0,alignOffset:h=0,collisionBoundary:x="clipping-ancestors",collisionPadding:y,arrowPadding:w=5,sticky:S=!1,disableAnchorTracking:_,alignItemWithTrigger:j=!0,collisionAvoidance:E=oA,style:k,...N}=n,{store:R,listRef:A,labelsRef:M,alignItemWithTriggerActiveRef:O,selectedItemTextRef:U,valuesRef:I,initialValueRef:B,popupRef:L,setValue:D}=Wa(),q=Bw(),F=Ke(R,Fe.open),Z=Ke(R,Fe.mounted),H=Ke(R,Fe.modal),G=Ke(R,Fe.value),Q=Ke(R,Fe.openMethod),V=Ke(R,Fe.positionerElement),Y=Ke(R,Fe.triggerElement),P=Ke(R,Fe.isItemEqualToValue),K=Ke(R,Fe.transitionStatus),$=v.useRef(null),W=v.useRef(null),[ce,ie]=v.useState(j),oe=Z&&ce&&Q!=="touch";!Z&&ce!==j&&ie(j),Re(()=>{Z||(Fe.scrollUpArrowVisible(R.state)&&R.set("scrollUpArrowVisible",!1),Fe.scrollDownArrowVisible(R.state)&&R.set("scrollDownArrowVisible",!1))},[R,Z]),v.useImperativeHandle(O,()=>oe),aO((oe||H)&&F,Q==="touch",V,Y);const ue=FS({anchor:r,floatingRootContext:q,positionMethod:i,mounted:Z,side:f,sideOffset:m,align:g,alignOffset:h,arrowPadding:w,collisionBoundary:x,collisionPadding:y,sticky:S,disableAnchorTracking:_??oe,collisionAvoidance:E,keepMounted:!0}),te=oe?"none":ue.side,Ne=oe?sO:ue.positionerStyles,$e={open:F,side:te,align:ue.align,anchorHidden:ue.anchorHidden};Re(()=>{R.set("popupSide",ue.side)},[R,ue.side]);const be=Ae(xe=>{R.set("positionerElement",xe)}),Se=XS(n,$e,{styles:Ne,transitionStatus:K,props:N,refs:[s,be],hidden:!Z,inert:!F}),Ee=v.useRef(0),Oe=Ae(xe=>{if(xe.size===0&&Ee.current===0||I.current.length===0)return;const ke=Ee.current;if(Ee.current=xe.size,xe.size===ke)return;const _e=tt(Ns);if(ke!==0&&!R.state.multiple&&G!==null&&Oi(I.current,G,P)===-1){const Ge=B.current,Me=Ge!=null&&Oi(I.current,Ge,P)!==-1?Ge:null;D(Me,_e),Me===null&&(R.set("selectedIndex",null),U.current=null)}if(ke!==0&&R.state.multiple&&Array.isArray(G)){const De=qe=>Oi(I.current,qe,P)!==-1,Ge=G.filter(qe=>De(qe));(Ge.length!==G.length||Ge.some(qe=>!P4(G,qe,P)))&&(D(Ge,_e),Ge.length===0&&(R.set("selectedIndex",null),U.current=null))}if(F&&oe){R.update({scrollUpArrowVisible:!1,scrollDownArrowVisible:!1});const De={height:""};bd(V,De),bd(L.current,De)}}),ze=v.useMemo(()=>({...ue,side:te,alignItemWithTriggerActive:oe,setControlledAlignItemWithTrigger:ie,scrollUpArrowRef:$,scrollDownArrowRef:W}),[ue,te,oe,ie]);return l.jsx(mx,{elementsRef:A,labelsRef:M,onMapChange:Oe,children:l.jsxs(Vw.Provider,{value:ze,children:[Z&&H&&l.jsx(ww,{inert:Kh(!F),cutout:Y}),Se]})})}),Mu="base-ui-disable-scrollbar",Qg={className:Mu,getElement(e){return l.jsx("style",{nonce:e,href:Mu,precedence:"base-ui:low",children:`.${Mu}{scrollbar-width:none}.${Mu}::-webkit-scrollbar{display:none}`})}},oO=v.createContext(void 0);function lO(e){return v.useContext(oO)}const iO=v.createContext(void 0),cO={disableStyleElements:!1};function uO(){return v.useContext(iO)??cO}const dO={...fl,...dl},fO=v.forwardRef(function(n,s){const{render:r,className:i,style:c,finalFocus:d,...f}=n,{store:g,popupRef:m,onOpenChangeComplete:h,setOpen:x,valueRef:y,firstItemTextRef:w,selectedItemTextRef:S,keyboardActiveRef:_,multiple:j,handleScrollArrowVisibility:E,scrollHandlerRef:k,listRef:N,highlightItemOnHover:R}=Wa(),{side:A,align:M,alignItemWithTriggerActive:O,isPositioned:U,setControlledAlignItemWithTrigger:I,scrollDownArrowRef:B,scrollUpArrowRef:L}=px(),D=lO()!=null,q=Bw(),F=Fh(),{nonce:Z,disableStyleElements:H}=uO(),G=Ke(g,Fe.id),Q=Ke(g,Fe.open),V=Ke(g,Fe.mounted),Y=Ke(g,Fe.popupProps),P=Ke(g,Fe.transitionStatus),K=Ke(g,Fe.triggerElement),$=Ke(g,Fe.positionerElement),W=Ke(g,Fe.listElement),ce=v.useRef(!1),ie=v.useRef(!1),oe=v.useRef({}),ue=Fo(),te=Ae(Se=>{if(!$||!m.current||!ie.current)return;if(ce.current||!O){E();return}const Ee=$.style.top==="0px",Oe=$.style.bottom==="0px";if(!Ee&&!Oe){E();return}const ze=H1($),xe=wi($.getBoundingClientRect().height,"y",ze),ke=xt($),_e=getComputedStyle($),De=parseFloat(_e.marginTop),Ge=parseFloat(_e.marginBottom),qe=U1(getComputedStyle(m.current)),Me=Math.min(ke.documentElement.clientHeight-De-Ge,qe),ve=Se.scrollTop,re=Ou(Se);let ye=0,je=null,Pe=!1,Ze=!1;const _t=it=>{$.style.height=`${it}px`},Ht=(it,Et)=>{const Bt=Si(it,0,Me-xe);Bt>0&&_t(xe+Bt),Se.scrollTop=Et,Me-(xe+Bt)<=Oa&&(ce.current=!0),E()},vt=Ee?re-ve:ve,ut=Math.min(xe+vt,Me);if(ye=ut,vt<=Oa){Ht(vt,Ee?re:0);return}if(Me-ut>Oa)Ee?Ze=!0:je=0;else if(Pe=!0,Oe&&ve<re){const it=xe+vt-Me;je=ve-(vt-it)}if(ye=Math.ceil(ye),ye!==0&&_t(ye),Ze||je!=null){const it=Ou(Se),Et=Ze?it:Si(je,0,it);Math.abs(Se.scrollTop-Et)>Oa&&(Se.scrollTop=Et)}(Pe||ye>=Me-Oa)&&(ce.current=!0),E()});v.useImperativeHandle(k,()=>te,[te]),xr({open:Q,ref:m,onComplete(){Q&&h?.(!0)}});const Ne={open:Q,transitionStatus:P,side:A,align:M};Re(()=>{!$||!m.current||Object.keys(oe.current).length||(oe.current={top:$.style.top||"0",left:$.style.left||"0",right:$.style.right,height:$.style.height,bottom:$.style.bottom,minHeight:$.style.minHeight,maxHeight:$.style.maxHeight,marginTop:$.style.marginTop,marginBottom:$.style.marginBottom})},[m,$]),Re(()=>{Q||O||(ie.current=!1,ce.current=!1,bd($,oe.current))},[Q,O,$,m]),Re(()=>{const Se=m.current;if(!Q||!K||!$||!Se||O&&!U||g.state.transitionStatus==="ending")return;if(!O){ie.current=!0,ue.request(E),Se.style.removeProperty("--transform-origin");return}const Ee=mO(Se);Se.style.removeProperty("--transform-origin");try{let Oe=S.current;Oe?.isConnected||(Oe=!Fe.hasSelectedValue(g.state)&&w.current?.isConnected?w.current:null);const ze=y.current,xe=getComputedStyle($),ke=getComputedStyle(Se),_e=xt(K),De=Ft($),Ge=H1(K),qe=zu(K.getBoundingClientRect(),Ge),Me=zu($.getBoundingClientRect(),Ge),ve=qe.height,re=W||Se,ye=re.scrollHeight,je=parseFloat(ke.borderBottomWidth),Pe=parseFloat(xe.marginTop)||10,Ze=parseFloat(xe.marginBottom)||10,_t=parseFloat(xe.minHeight)||100,Ht=U1(ke),vt=5,ut=5,it=20,Et=_e.documentElement.clientHeight-Pe-Ze,Bt=_e.documentElement.clientWidth,pa=Et-qe.bottom+ve;let gn,dt=F==="rtl"?qe.right-Me.width:qe.left,Tt=0;if(Oe&&ze){const An=zu(ze.getBoundingClientRect(),Ge);gn=zu(Oe.getBoundingClientRect(),Ge),dt=Me.left+(F==="rtl"?An.right-gn.right:An.left-gn.left);const na=An.top-qe.top+An.height/2;Tt=gn.top-Me.top+gn.height/2-na}const Xt=pa+Tt+Ze+je;let yt=Math.min(Et,Xt);const Wt=Et-Pe-Ze,Vt=Xt-yt,rn=Bt-ut;$.style.left=`${Si(dt,vt,rn-Me.width)}px`,$.style.height=`${yt}px`,$.style.maxHeight="auto",$.style.marginTop=`${Pe}px`,$.style.marginBottom=`${Ze}px`,Se.style.height="100%";const Tn=Ou(re),qn=Vt>=Tn-Oa;qn&&(yt=Math.min(Et,Me.height)-(Vt-Tn));const ta=qe.top<it||qe.bottom>Et-it||Math.ceil(yt)+Oa<Math.min(ye,_t),Vn=(De.visualViewport?.scale??1)!==1&&Sh;if(ta||Vn){ie.current=!0,bd($,oe.current),I(!1);return}const es=Math.max(_t,yt);if(qn){const An=Math.max(0,Et-Xt);$.style.top=Me.height>=Wt?"0":`${An}px`,$.style.height=`${yt}px`,re.scrollTop=Ou(re)}else $.style.bottom="0",re.scrollTop=Vt;if(gn){const An=Me.top,na=Me.height,Na=gn.top+gn.height/2,ts=na>0?(Na-An)/na*100:50,nt=Si(ts,0,100);Se.style.setProperty("--transform-origin",`50% ${nt}%`)}(es===Et||yt>=Ht)&&(ce.current=!0),E(),R&&g.state.selectedIndex===null&&g.state.activeIndex===null&&N.current[0]!=null&&g.set("activeIndex",0),ie.current=!0}finally{Ee()}},[g,Q,$,K,y,w,S,m,E,O,I,ue,B,L,W,N,R,F,U]),v.useEffect(()=>{if(!O||!$||!Q)return;const Se=Ft($);function Ee(Oe){x(!1,tt(gT,Oe))}return ct(Se,"resize",Ee)},[x,O,$,Q]);const $e={...W?{role:"presentation","aria-orientation":void 0}:{role:"listbox","aria-multiselectable":j||void 0,id:`${G}-list`},onKeyDown(Se){_.current=!0,D&&ix.has(Se.key)&&Se.stopPropagation()},onMouseMove(){_.current=!1},onScroll(Se){W||te(Se.currentTarget)},...O&&{style:W?{height:"100%"}:$w}},be=Lt("div",n,{ref:[s,m],state:Ne,stateAttributesMapping:dO,props:[Y,$e,Xh(P),{className:!W&&O?Qg.className:void 0},f]});return l.jsxs(v.Fragment,{children:[!H&&Qg.getElement(Z),l.jsx(xS,{context:q,modal:!1,disabled:!V,returnFocus:d,restoreFocus:!0,children:be})]})});function U1(e){const n=e.maxHeight||"";return n.endsWith("px")&&parseFloat(n)||1/0}function Ou(e){return fx(e.scrollHeight,e.clientHeight)}function H1(e){return wS.getScale(e)}function wi(e,n,s){return e/s[n]}function zu(e,n){return qi({x:wi(e.x,"x",n),y:wi(e.y,"y",n),width:wi(e.width,"x",n),height:wi(e.height,"y",n)})}const q1=[["transform","none"],["scale","1"],["translate","0 0"]];function mO(e){const{style:n}=e,s={};for(const[r,i]of q1)s[r]=n.getPropertyValue(r),n.setProperty(r,i,"important");return()=>{for(const[r]of q1){const i=s[r];i?n.setProperty(r,i):n.removeProperty(r)}}}const pO=v.forwardRef(function(n,s){const{render:r,className:i,style:c,...d}=n,{store:f,scrollHandlerRef:g}=Wa(),{alignItemWithTriggerActive:m}=px(),h=Ke(f,Fe.hasScrollArrows),x=Ke(f,Fe.openMethod),y=Ke(f,Fe.multiple),S={id:`${Ke(f,Fe.id)}-list`,role:"listbox","aria-multiselectable":y||void 0,onScroll(j){g.current?.(j.currentTarget)},...m&&{style:$w},className:h&&x!=="touch"?Qg.className:void 0},_=Ae(j=>{f.set("listElement",j)});return Lt("div",n,{ref:[s,_],props:[S,d]})});let Gw=(function(e){return e[e.None=0]="None",e[e.GuessFromOrder=1]="GuessFromOrder",e})({});function gx(e={}){const{label:n,metadata:s,textRef:r,indexGuessBehavior:i,index:c}=e,{register:d,unregister:f,subscribeMapChange:g,elementsRef:m,labelsRef:h,nextIndexRef:x}=J4(),y=v.useRef(-1),[w,S]=v.useState(c??(i===Gw.GuessFromOrder?()=>{if(y.current===-1){const E=x.current;x.current+=1,y.current=E}return y.current}:-1)),_=v.useRef(null),j=v.useCallback(E=>{if(_.current=E,w!==-1&&E!==null&&(m.current[w]=E,h)){const k=n!==void 0;h.current[w]=k?n:r?.current?.textContent??E.textContent}},[w,m,h,n,r]);return Re(()=>{if(c!=null)return;const E=_.current;if(E)return d(E,s),()=>{f(E)}},[c,d,f,s]),Re(()=>{if(c==null)return g(E=>{const k=_.current?E.get(_.current)?.index:null;k!=null&&S(k)})},[c,g,S]),v.useMemo(()=>({ref:j,index:w}),[w,j])}const Yw=v.createContext(void 0);function hx(){const e=v.useContext(Yw);if(!e)throw new Error(Nn(57));return e}const gO=v.memo(v.forwardRef(function(n,s){const{render:r,className:i,style:c,value:d=null,label:f,disabled:g=!1,nativeButton:m=!1,...h}=n,x=v.useRef(null),y=gx({label:f,textRef:x,indexGuessBehavior:Gw.GuessFromOrder}),{store:w,itemProps:S,setOpen:_,setValue:j,selectionRef:E,typingRef:k,valuesRef:N,multiple:R,selectedItemTextRef:A}=Wa(),M=Ke(w,Fe.isActive,y.index),O=Ke(w,Fe.isSelected,y.index,d),U=Ke(w,Fe.isSelectedByFocus,y.index),I=Ke(w,Fe.isItemEqualToValue),B=y.index,L=B!==-1,D=v.useRef(null);Re(()=>{if(!L)return;const W=N.current;return W[B]=d,()=>{delete W[B]}},[L,B,d,N]),Re(()=>{if(!L)return;const W=w.state.value;let ce=W;R&&Array.isArray(W)&&W.length>0&&(ce=W[W.length-1]),ce!==void 0&&tl(d,ce,I)&&(w.set("selectedIndex",B),x.current&&(A.current=x.current))},[L,B,R,I,w,d,A]);const q=v.useRef(null),F=v.useRef("mouse"),Z=v.useRef(!1),{getButtonProps:H,buttonRef:G}=ml({disabled:g,focusableWhenDisabled:!0,native:m,composite:!0}),Q={disabled:g,selected:O,highlighted:M};function V(W){const ce=w.state.value;if(R){const ie=Array.isArray(ce)?ce:[],oe=O?B4(ie,d,I):[...ie,d];j(oe,tt(vp,W))}else j(d,tt(vp,W)),_(!1,tt(vp,W))}function Y(){E.current.dragY=0}const P={role:"option","aria-selected":O,tabIndex:M?0:-1,onKeyDown(W){q.current=W.key,w.set("activeIndex",B),W.key===" "&&k.current&&W.preventDefault()},onClick(W){const ce=W.type==="click"&&F.current!=="touch",ie=W.nativeEvent.pointerType,oe=ce&&wh(W.nativeEvent)&&(ie!==void 0||M),ue=ce&&!oe&&!Z.current;Z.current=!1,!(W.type==="keydown"&&q.current===null)&&(g||W.type==="keydown"&&q.current===" "&&k.current||ue||(q.current=null,V(W.nativeEvent)))},onPointerEnter(W){F.current=W.pointerType},onPointerMove(W){if(W.pointerType==="mouse"&&W.buttons===1){const ce=E.current;ce.dragY+=W.movementY,ce.dragY**2>=64&&(ce.allowUnselectedMouseUp=!0)}},onPointerDown(W){F.current=W.pointerType,Z.current=!0,Y()},onMouseUp(){if(Y(),g||F.current==="touch"||Z.current)return;const W=!E.current.allowSelectedMouseUp&&O,ce=!E.current.allowUnselectedMouseUp&&!O;W||ce||(Z.current=!0,D.current?.click(),Z.current=!1)}},K=Lt("div",n,{ref:[G,s,y.ref,D],state:Q,props:[S,P,h,H]}),$=v.useMemo(()=>({selected:O,index:B,textRef:x,selectedByFocus:U,hasRegistered:L}),[O,B,x,U,L]);return l.jsx(Yw.Provider,{value:$,children:K})})),hO=v.forwardRef(function(n,s){const r=n.keepMounted??!1,{selected:i}=hx();return r||i?l.jsx(xO,{...n,ref:s}):null}),xO=v.memo(v.forwardRef((e,n)=>{const{render:s,className:r,style:i,keepMounted:c,...d}=e,{selected:f}=hx(),g=v.useRef(null),{transitionStatus:m,setMounted:h}=tc(f),y=Lt("span",e,{ref:[n,g],state:{selected:f,transitionStatus:m},props:[{"aria-hidden":!0,children:"✔️"},d],stateAttributesMapping:dl});return xr({open:f,ref:g,onComplete(){f||h(!1)}}),y})),bO=v.memo(v.forwardRef(function(n,s){const{index:r,textRef:i,selectedByFocus:c,hasRegistered:d}=hx(),{firstItemTextRef:f,selectedItemTextRef:g}=Wa(),{render:m,className:h,style:x,...y}=n,w=v.useCallback(_=>{_&&(d&&r===0&&(f.current=_),d&&c&&(g.current=_))},[f,g,r,c,d]);return Lt("div",n,{ref:[w,s,i],props:y})})),Fw=v.forwardRef(function(n,s){const{render:r,className:i,style:c,direction:d,keepMounted:f=!1,...g}=n,m=d==="up",{store:h,popupRef:x,listRef:y,handleScrollArrowVisibility:w,scrollArrowsMountedCountRef:S}=Wa(),{side:_,scrollDownArrowRef:j,scrollUpArrowRef:E}=px(),k=m?Fe.scrollUpArrowVisible:Fe.scrollDownArrowVisible,N=Ke(h,k),R=Ke(h,Fe.openMethod),A=N&&R!=="touch",M=Zn(),O=m?E:j,{transitionStatus:U,setMounted:I}=tc(A);Re(()=>(S.current+=1,h.state.hasScrollArrows||h.set("hasScrollArrows",!0),()=>{S.current=Math.max(0,S.current-1),S.current===0&&h.state.hasScrollArrows&&h.set("hasScrollArrows",!1)}),[h,S]),xr({open:A,ref:O,onComplete(){A||I(!1)}});const D=Lt("div",n,{ref:[s,O],state:{direction:d,visible:A,side:_,transitionStatus:U},props:[{"aria-hidden":!0,children:m?"▲":"▼",style:{position:"absolute"},onMouseMove(F){if(F.movementX===0&&F.movementY===0||M.isStarted())return;h.set("activeIndex",null);function Z(){const H=h.state.listElement??x.current;if(!H)return;h.set("activeIndex",null),w();const G=fx(H.scrollHeight,H.clientHeight),Q=xd(H.scrollTop,G),V=Q===(m?0:G),Y=y.current;if(Q!==H.scrollTop&&(H.scrollTop=Q),Y.length===0&&h.set(m?"scrollUpArrowVisible":"scrollDownArrowVisible",!V),V){M.clear();return}if(Y.length>0){const P=O.current?.offsetHeight||0;H.scrollTop=vO(Y,m,Q,H.clientHeight,P,G)}M.start(40,Z)}M.start(40,Z)},onMouseLeave(){M.clear()}},g]});return A||f?D:null});function vO(e,n,s,r,i,c){if(n){let h=0;const x=s+i-Oa;for(let S=0;S<e.length;S+=1){const _=e[S];if(_&&_.offsetTop>=x){h=S;break}}const y=Math.max(0,h-1),w=e[y];return y<h&&w?xd(w.offsetTop-i,c):0}let d=e.length-1;const f=s+r-i+Oa;for(let h=0;h<e.length;h+=1){const x=e[h];if(x&&x.offsetTop+x.offsetHeight>f){d=Math.max(0,h-1);break}}const g=Math.min(e.length-1,d+1),m=e[g];return g>d&&m?xd(m.offsetTop+m.offsetHeight-r+i,c):c}const yO=v.forwardRef(function(n,s){return l.jsx(Fw,{...n,ref:s,direction:"down"})}),_O=v.forwardRef(function(n,s){return l.jsx(Fw,{...n,ref:s,direction:"up"})}),jO=H4;function SO({className:e,...n}){return l.jsx(X4,{"data-slot":"select-value",className:Pt("flex flex-1 text-left",e),...n})}function wO({className:e,size:n="default",children:s,...r}){return l.jsxs(Y4,{"data-slot":"select-trigger","data-size":n,className:Pt("flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...r,children:[s,l.jsx(K4,{render:l.jsx(Zr,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function CO({className:e,children:n,side:s="bottom",sideOffset:r=4,align:i="center",alignOffset:c=0,alignItemWithTrigger:d=!0,...f}){return l.jsx(Z4,{children:l.jsx(rO,{side:s,sideOffset:r,align:i,alignOffset:c,alignItemWithTrigger:d,className:"isolate z-50",children:l.jsxs(fO,{"data-slot":"select-content","data-align-trigger":d,className:Pt("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...f,children:[l.jsx(kO,{}),l.jsx(pO,{children:n}),l.jsx(RO,{})]})})})}function EO({className:e,children:n,...s}){return l.jsxs(gO,{"data-slot":"select-item",className:Pt("relative flex w-full cursor-default items-center gap-2 rounded-md py-2 pr-8 pl-2.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...s,children:[l.jsx(bO,{className:"flex min-w-0 flex-1 gap-2 overflow-hidden whitespace-nowrap",children:n}),l.jsx(hO,{render:l.jsx("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center"}),children:l.jsx(Li,{className:"pointer-events-none"})})]})}function kO({className:e,...n}){return l.jsx(_O,{"data-slot":"select-scroll-up-button",className:Pt("top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...n,children:l.jsx(uj,{})})}function RO({className:e,...n}){return l.jsx(yO,{"data-slot":"select-scroll-down-button",className:Pt("bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...n,children:l.jsx(Zr,{})})}function Ct({value:e,onChange:n,options:s,placeholder:r="— elegir —",disabled:i,className:c}){return l.jsxs(jO,{value:e,onValueChange:d=>n(d??""),disabled:i,children:[l.jsx(wO,{className:Ie("h-9 w-full",c),children:l.jsx(SO,{placeholder:r,children:d=>s.find(f=>f.value===d)?.label??d})}),l.jsx(CO,{side:"bottom",sideOffset:6,align:"start",alignItemWithTrigger:!1,className:"max-w-[min(20rem,var(--available-width))] p-1.5",children:s.map(d=>{const f=d.icon;return l.jsx(EO,{value:d.value,children:l.jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[f?l.jsx(f,{className:"size-4 shrink-0 text-muted-fg"}):null,d.description?l.jsxs("span",{className:"flex min-w-0 flex-col leading-tight",children:[l.jsx("span",{className:"truncate font-medium",children:d.label}),l.jsx("span",{className:"truncate text-[11px] text-muted-fg",children:d.description})]}):l.jsx("span",{className:"truncate",children:d.label})]})},d.value)})})]})}const V1=320;function NO(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(void 0,{month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}function TO(e){return e.agent_slug||e.actor_id||e.author||e.actor_kind||"—"}function AO({m:e}){const[n,s]=v.useState(!1),r=(e.body?.length||0)>V1,i=!r||n?e.body:`${e.body.slice(0,V1)}…`;return l.jsxs("li",{className:"flex items-start gap-3 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx("span",{className:"mt-0.5 shrink-0",children:e.direction==="in"?l.jsx(lj,{size:14,className:"text-blue-400"}):l.jsx(cj,{size:14,className:"text-emerald-400"})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted-fg",children:[l.jsx("span",{className:"font-mono",children:NO(e.ts)}),l.jsx(Ue,{tone:"info",children:e.channel}),e.type&&l.jsx(Ue,{children:e.type}),l.jsx("span",{className:"font-medium text-foreground",children:TO(e)})]}),e.body&&l.jsx("p",{className:"mt-1 whitespace-pre-wrap break-words text-xs",children:i}),r&&l.jsx("button",{type:"button",onClick:()=>s(c=>!c),className:"mt-1 text-[11px] font-medium text-sky-400 hover:underline",children:C(n?"logs.show_less":"logs.show_more")})]})]})}function MO(){const[e,n]=v.useState(!1),s=Qe(e?"/admin/logs?errors":null,()=>Zo.logs("errors",200)),r=s.data?.entries||[];return l.jsxs("details",{className:"mb-3 rounded-lg border border-border bg-muted/20",onToggle:i=>n(i.target.open),children:[l.jsxs("summary",{className:"cursor-pointer px-3 py-2 text-xs font-medium text-muted-fg",children:[C("logs.daemon_errors"),r.length?` · ${r.length}`:""]}),l.jsxs("div",{className:"border-t border-border p-3",children:[s.isLoading&&l.jsx(Je,{}),e&&!s.isLoading&&r.length===0&&l.jsx("p",{className:"text-xs text-muted-fg",children:C("logs.no_errors")}),l.jsx("ul",{className:"space-y-1",children:r.map((i,c)=>l.jsxs("li",{className:"rounded-md bg-card px-2 py-1 text-[11px]",children:[l.jsxs("div",{className:"flex items-center gap-2 text-muted-fg",children:[typeof i.ts=="string"&&l.jsx("span",{className:"font-mono",children:new Date(i.ts).toLocaleString()}),typeof i.level=="string"&&l.jsx("span",{className:"text-destructive",children:i.level})]}),l.jsx("p",{className:"whitespace-pre-wrap break-words font-mono",children:String(i.msg??i.message??i.error??i.raw??JSON.stringify(i)).slice(0,500)})]},c))})]})]})}function OO({pid:e}){const n=!e||String(e)==="0",[s,r]=v.useState(""),[i,c]=v.useState(""),[d,f]=v.useState(""),[g,m]=v.useState(""),h=s.trim()||void 0,x=n?`/messages/global?channel=${h??""}`:`/projects/${e}/messages?channel=${h??""}`,y=Qe(x,()=>n?Xg.global({channel:h,limit:300}):Xg.project(e,{channel:h,limit:300})),w=v.useMemo(()=>[...y.data||[]].sort((j,E)=>(E.ts||"").localeCompare(j.ts||"")),[y.data]),S=v.useMemo(()=>Array.from(new Set(w.map(j=>j.type).filter(Boolean))),[w]),_=v.useMemo(()=>w.filter(j=>!(i&&j.direction!==i||d&&j.type!==d||g&&!(j.body||"").toLowerCase().includes(g.toLowerCase()))),[w,i,d,g]);return l.jsxs(He,{title:C("logs.title"),description:C(n?"logs.desc_global":"logs.desc_project"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(Ce,{placeholder:C("logs.filter_channel"),value:s,onChange:j=>r(j.target.value),className:"w-44"}),l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>y.mutate(),children:l.jsx(rl,{size:13})})]}),children:[n&&l.jsx(MO,{}),l.jsxs("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[l.jsx("div",{className:"w-36",children:l.jsx(Ct,{value:i,onChange:c,placeholder:C("logs.filter_dir"),options:[{value:"",label:C("logs.all_directions")},{value:"in",label:C("logs.in")},{value:"out",label:C("logs.out")}]})}),l.jsx("div",{className:"w-40",children:l.jsx(Ct,{value:d,onChange:f,placeholder:C("logs.filter_type"),options:[{value:"",label:C("logs.all_types")},...S.map(j=>({value:j,label:j}))]})}),l.jsx(Ce,{placeholder:C("logs.search_text"),value:g,onChange:j=>m(j.target.value),className:"w-56"}),l.jsxs("span",{className:"text-[11px] text-muted-fg",children:[_.length," ",C("logs.count_of")," ",w.length]})]}),y.isLoading&&l.jsx(Je,{}),y.error&&l.jsx(lt,{children:C("logs.error",{msg:y.error.message})}),!y.isLoading&&!y.error&&_.length===0&&l.jsx(lt,{children:h?C("logs.no_activity_ch",{ch:h}):C("logs.no_activity")}),l.jsx("ul",{className:"space-y-1 text-sm",children:_.map((j,E)=>l.jsx(AO,{m:j},`${j.ts}-${E}`))})]})}function Xw({value:e,onChange:n,options:s,placeholder:r="elegí o escribí un modelo…",invalid:i,invalidHint:c,className:d}){const[f,g]=v.useState(!1),[m,h]=v.useState(e),x=v.useRef(null);v.useEffect(()=>{h(e)},[e]),v.useEffect(()=>{if(!f)return;const _=j=>{x.current&&!x.current.contains(j.target)&&g(!1)};return document.addEventListener("mousedown",_),()=>document.removeEventListener("mousedown",_)},[f]);const y=m.trim().toLowerCase(),w=y?s.filter(_=>_.toLowerCase().includes(y)):s,S=_=>{n(_),h(_),g(!1)};return l.jsxs("div",{ref:x,className:Ie("relative",d),children:[l.jsxs("div",{className:Ie("flex items-center gap-1 rounded-lg border bg-background px-2.5 transition-colors focus-within:border-ring focus-within:ring-1 focus-within:ring-ring",i?"border-amber-500/60":"border-border"),children:[i&&l.jsx("span",{title:c||"Modelo/proveedor no disponible",children:l.jsx(bj,{className:"size-3.5 shrink-0 text-amber-400"})}),l.jsx("input",{value:m,placeholder:r,onChange:_=>{h(_.target.value),n(_.target.value),g(!0)},onFocus:()=>g(!0),className:"w-full bg-transparent py-1.5 text-sm outline-none placeholder:text-muted-fg/60"}),l.jsx("button",{type:"button",tabIndex:-1,onClick:()=>g(_=>!_),className:"shrink-0 text-muted-fg hover:text-foreground",children:l.jsx(Zr,{className:"size-4"})})]}),f&&w.length>0&&l.jsx("ul",{className:"absolute z-50 mt-1 max-h-56 w-full overflow-y-auto rounded-lg border border-border bg-popover p-1 shadow-md ring-1 ring-foreground/10",children:w.map(_=>l.jsx("li",{children:l.jsx("button",{type:"button",onMouseDown:j=>{j.preventDefault(),S(_)},className:Ie("flex w-full items-center rounded-md px-2 py-1 text-left text-sm hover:bg-accent hover:text-accent-fg",_===e&&"bg-accent/50"),children:l.jsx("span",{className:"truncate font-mono text-xs",children:_})})},_))})]})}function vr(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/admin/config",()=>Zo.config.get()),i=async(c,d)=>{const f=await Zo.config.patch({set:c,unset:d});return await r({config:f.config},{revalidate:!1}),f.config};return{config:e?.config||{},error:n,isLoading:s,mutate:r,patch:i}}function Kw(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/admin/super-agent",()=>Zo.superAgent());return{superAgent:e,error:n,isLoading:s,mutate:r}}const zO={anthropic:"from-orange-600 to-amber-600",openai:"from-emerald-600 to-teal-600",gemini:"from-blue-600 to-indigo-600",groq:"from-cyan-600 to-teal-600",openrouter:"from-violet-600 to-indigo-600",ollama:"from-amber-600 to-orange-600",azure:"from-blue-600 to-cyan-600",mock:"from-slate-600 to-gray-600",custom:"from-slate-600 to-gray-600"},DO={anthropic:"bg-orange-500/20 text-orange-300 border border-orange-500/40",openai:"bg-emerald-500/20 text-emerald-300 border border-emerald-500/40",gemini:"bg-blue-500/20 text-blue-300 border border-blue-500/40",groq:"bg-cyan-500/20 text-cyan-300 border border-cyan-500/40",openrouter:"bg-violet-500/20 text-violet-300 border border-violet-500/40",ollama:"bg-amber-500/20 text-amber-300 border border-amber-500/40",azure:"bg-blue-500/20 text-blue-300 border border-blue-500/40",mock:"bg-slate-500/20 text-slate-300 border border-slate-500/40",custom:"bg-slate-500/20 text-slate-300 border border-slate-500/40"},zi=[{value:"anthropic",label:"Anthropic"},{value:"openai",label:"OpenAI-compatible"},{value:"gemini",label:"Gemini"},{value:"groq",label:"Groq"},{value:"openrouter",label:"OpenRouter"},{value:"ollama",label:"Ollama"},{value:"azure",label:"Azure OpenAI"},{value:"mock",label:"Mock (test)"},{value:"custom",label:"Custom"}];function Vp(e,n){return n&&n in e?e[n]:e.custom}const vd={anthropic:ol,openai:vn,gemini:BR,groq:Bi,openrouter:mh,ollama:hj,azure:kR,mock:zR,custom:ll},Vr={anthropic:{base_url:"",default_model:"claude-sonnet-4.6",api_key_env:"ANTHROPIC_API_KEY",known_models:["claude-opus-4.8","claude-opus-4.7","claude-opus-4.6","claude-sonnet-4.6","claude-sonnet-4.5","claude-haiku-4.5"]},openai:{base_url:"https://api.openai.com/v1",default_model:"gpt-4o-mini",api_key_env:"OPENAI_API_KEY",known_models:["gpt-4o","gpt-4o-mini","gpt-4.1","gpt-4.1-mini","o3-mini"]},gemini:{base_url:"https://generativelanguage.googleapis.com/v1beta/openai",default_model:"gemini-2.5-flash",api_key_env:"GEMINI_API_KEY",known_models:["gemini-3.5-pro","gemini-3.5-flash","gemini-3.1-pro","gemini-3.1-flash","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite"]},groq:{base_url:"https://api.groq.com/openai/v1",default_model:"llama-3.3-70b-versatile",api_key_env:"GROQ_API_KEY",known_models:["llama-3.3-70b-versatile","llama-3.1-8b-instant","meta-llama/llama-4-scout-17b-16e-instruct","openai/gpt-oss-120b","openai/gpt-oss-20b","groq/compound","groq/compound-mini","qwen/qwen3-32b","whisper-large-v3-turbo"]},openrouter:{base_url:"https://openrouter.ai/api/v1",default_model:"openrouter/auto",api_key_env:"OPENROUTER_API_KEY",known_models:["openrouter/auto","openrouter/free","deepseek/deepseek-r1:free","meta-llama/llama-3.3-70b-instruct:free","google/gemini-2.0-flash-exp:free","qwen/qwen3-235b-a22b:free","anthropic/claude-sonnet-4.5","openai/gpt-4o-mini"]},ollama:{base_url:"http://127.0.0.1:11434",default_model:"gemma2:9b",api_key_env:"",known_models:[]},azure:{base_url:"",default_model:"gpt-4o-mini",api_key_env:"AZURE_OPENAI_API_KEY",known_models:["gpt-4o","gpt-4o-mini"]},mock:{base_url:"",default_model:"mock",api_key_env:"",known_models:["mock"]},custom:{base_url:"",default_model:"",api_key_env:"",known_models:[]}};function Qw(e){const n=e.indexOf(":");return n<0?{provider:e,model:""}:{provider:e.slice(0,n),model:e.slice(n+1)}}function $p({value:e,onChange:n,providers:s}){const{provider:r,model:i}=Qw(e),c=s.find(h=>h.slug===r),d=!!r&&!c,f=v.useMemo(()=>{const h=c?Vr[c.engine]?.known_models||[]:[];return Array.from(new Set([...c?.default_model?[c.default_model]:[],...h]))},[c]),g=h=>{const x=s.find(w=>w.slug===h),y=x?.default_model||Vr[x?.engine]?.default_model||"";n(y?`${h}:${y}`:`${h}:`)},m=h=>n(`${r}:${h}`);return l.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[l.jsx(Ct,{value:r,onChange:g,placeholder:d?`⚠ ${r} (no existe)`:"— proveedor —",options:s.map(h=>({value:h.slug,label:h.slug,icon:vd[h.engine]}))}),l.jsx(Xw,{value:i,onChange:m,options:f,invalid:d,invalidHint:`El proveedor "${r}" no está configurado.`})]})}function LO(){const e=rt(),{superAgent:n,isLoading:s,mutate:r}=Kw(),{config:i,patch:c}=vr(),[d,f]=v.useState(""),[g,m]=v.useState([]),[h,x]=v.useState(""),[y,w]=v.useState(null),[S,_]=v.useState(!1),[j,E]=v.useState({model:"",fallback:[]});v.useEffect(()=>{if(!n)return;const B=n.model_fallback?.models||[],L=Array.isArray(B)?B:[];f(n.model||""),m(L),E({model:n.model||"",fallback:L})},[n]);const k=v.useMemo(()=>{const B=i.engines||{};return Object.entries(B).map(([L,D])=>({slug:L,engine:D?.engine||L,default_model:D?.default_model||Vr[D?.engine||L]?.default_model}))},[i.engines]),N=B=>{const{provider:L}=Qw(B);return k.some(D=>D.slug===L)};if(s||!n)return l.jsx(Je,{});const R=d!==j.model||JSON.stringify(g)!==JSON.stringify(j.fallback),A=async()=>{_(!0);try{await c({"super_agent.model":d,"super_agent.model_fallback.enabled":g.length>0,"super_agent.model_fallback.models":g}),e.success("Router guardado."),E({model:d,fallback:g}),r()}catch(B){e.error(B.message)}finally{_(!1)}},M=()=>{const B=h.trim().replace(/:$/,"");!B||!B.includes(":")||g.includes(B)||(m([...g,B]),x(""))},O=(B,L)=>{const D=[...g];D[B]=L,m(D)},U=B=>{m(g.filter((L,D)=>D!==B)),y===B&&w(null)},I=(B,L)=>{const D=B+L;if(D<0||D>=g.length)return;const q=[...g];[q[B],q[D]]=[q[D],q[B]],m(q)};return l.jsx(He,{title:"Router de modelos",description:"Un solo router general (sin casos por tarea). Elegí proveedor y modelo; si el activo falla, prueba la cadena de fallback en orden.",children:l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2 rounded-lg border border-border bg-muted/20 p-3",children:[l.jsxs(Ue,{tone:"success",children:[l.jsx(mh,{size:11})," default"]}),l.jsx("span",{className:`font-mono text-xs ${!N(d)&&d?"text-amber-400":""}`,children:d||"—"}),g.map(B=>l.jsxs("span",{className:"flex items-center gap-2 text-muted-fg",children:[l.jsx(ij,{size:12}),l.jsx("span",{className:`font-mono text-xs ${N(B)?"":"text-amber-400"}`,children:B})]},B))]}),k.length===0?l.jsx("p",{className:"text-xs text-muted-fg",children:"Agregá un proveedor abajo para poder elegir modelos."}):l.jsx(fe,{label:"Modelo activo (default)",hint:"Proveedor + modelo. Se guarda como provider:model.",children:l.jsx($p,{value:d,onChange:f,providers:k})}),l.jsxs("div",{className:"rounded-lg border border-border bg-muted/20 p-3",children:[l.jsxs("div",{className:"mb-2",children:[l.jsx("div",{className:"text-sm font-medium",children:"Cadena de fallback"}),l.jsx("div",{className:"text-xs text-muted-fg",children:"Si el modelo activo falla, prueba estos en orden. Click en uno para editarlo."})]}),l.jsxs("ul",{className:"mb-3 space-y-1",children:[g.map((B,L)=>{const D=!N(B),q=y===L;return l.jsx("li",{className:"rounded-md bg-card px-2 py-1.5 text-xs",children:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsxs("span",{className:"w-6 text-muted-fg",children:["#",L+1]}),q?l.jsx("div",{className:"flex-1",children:l.jsx($p,{value:B,onChange:F=>O(L,F),providers:k})}):l.jsxs("button",{type:"button",onClick:()=>w(L),className:"flex flex-1 items-center gap-1.5 text-left",children:[D&&l.jsx(bj,{size:12,className:"text-amber-400"}),l.jsx("span",{className:`font-mono ${D?"text-amber-400":""}`,children:B})]}),q?l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>w(null),children:"listo"}):l.jsx(he,{size:"sm",variant:"ghost",onClick:()=>w(L),children:l.jsx(gh,{size:12})}),l.jsx(he,{size:"sm",variant:"ghost",onClick:()=>I(L,-1),disabled:L===0,children:"↑"}),l.jsx(he,{size:"sm",variant:"ghost",onClick:()=>I(L,1),disabled:L===g.length-1,children:"↓"}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>U(L),children:l.jsx(Ms,{size:12})})]})},`${L}-${B}`)}),g.length===0&&l.jsx("li",{className:"text-xs text-muted-fg",children:"Sin fallback configurado."})]}),k.length>0&&l.jsxs("div",{className:"space-y-2",children:[l.jsx("div",{className:"text-xs text-muted-fg",children:"Agregar a la cadena"}),l.jsx($p,{value:h,onChange:x,providers:k}),l.jsxs(he,{size:"sm",variant:"secondary",onClick:M,disabled:!h.includes(":")||h.endsWith(":"),children:[l.jsx(Rn,{size:13})," Agregar a la cadena"]})]})]}),l.jsx(he,{variant:"primary",loading:S,disabled:!R,onClick:A,children:R?"Guardar router":"Guardado"})]})})}function PO({provider:e,onEdit:n,onDelete:s,onToggle:r}){const i=Vp(zO,e.engine),c=Vp(DO,e.engine),d=Vp(vd,e.engine),f=zi.find(x=>x.value===e.engine)?.label||e.engine,g=typeof e.api_key=="string"&&e.api_key.length>0,m=el(e.api_key),h=e.is_active!==!1;return l.jsxs("div",{className:"group flex h-full cursor-pointer flex-col gap-3 rounded-xl border border-border bg-card p-4 transition-colors hover:border-muted-fg/50",onClick:n,children:[l.jsxs("div",{className:"flex items-start gap-3",children:[l.jsx("div",{className:Ie("flex size-10 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br",i),children:l.jsx(d,{className:"size-5 text-white"})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("h3",{className:"truncate text-sm font-semibold",children:e.name||e.slug}),l.jsx("p",{className:"truncate font-mono text-[10px] text-muted-fg",children:e.slug}),l.jsxs("span",{className:Ie("mt-1 inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium",c),children:[l.jsx(d,{className:"size-3"})," ",f]})]}),l.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[l.jsx(Ko,{content:h?"Activo · click para desactivar":"Inactivo · click para activar",children:l.jsxs("button",{type:"button",onClick:x=>{x.stopPropagation(),r()},className:Ie("flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-medium transition-colors",h?"border-emerald-500/40 text-emerald-400 hover:bg-emerald-500/10":"border-border text-muted-fg hover:text-foreground"),children:[l.jsx("span",{className:Ie("size-1.5 rounded-full",h?"bg-emerald-400":"bg-muted-fg/40")}),h?"Active":"Off"]})}),l.jsx(Ko,{content:"Borrar",children:l.jsx("button",{type:"button",onClick:x=>{x.stopPropagation(),s()},className:"rounded-md p-1 text-muted-fg hover:bg-destructive/10 hover:text-destructive",children:l.jsx(Ms,{className:"size-3.5"})})})]})]}),l.jsxs("div",{className:"mt-auto space-y-1 text-xs",children:[l.jsx(mi,{label:"Modelo",value:e.default_model||"—",mono:!0}),e.base_url&&l.jsx(mi,{label:"Base URL",value:e.base_url,mono:!0,truncate:!0}),l.jsx(mi,{label:"API key",value:g?m?`…${m}`:"✓ seteada":"—",mono:!!m}),e.default_temperature!==void 0&&l.jsx(mi,{label:"Temp",value:e.default_temperature.toFixed(1)}),e.pricing?.input_per_million!==void 0&&l.jsx(mi,{label:"$ in/out (1M)",value:`${e.pricing.input_per_million??0} / ${e.pricing.output_per_million??0}`})]})]})}function mi({label:e,value:n,mono:s,truncate:r}){return l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsx("span",{className:"text-muted-fg",children:e}),l.jsx("span",{className:Ie("text-foreground",s&&"font-mono",r&&"max-w-[180px] truncate"),children:n})]})}const $1={name:"",slug:"",engine:"anthropic",base_url:"",api_key_value:"",default_model:"",default_temperature:.7,default_max_tokens:4096,is_active:!0,context_limit_tokens:2e5,model_context_limits_json:"",p_input:"",p_output:"",p_cache_read:"",p_cache_write:""},BO=["anthropic","openai","gemini","groq","openrouter","ollama","custom"];function pi(e){return e.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Du(e){if(e==null)return"";const n=Number(e);return Number.isFinite(n)?String(n):""}function IO(e){return{name:e.name||e.slug,slug:e.slug,engine:e.engine||"custom",base_url:e.base_url||"",api_key_value:"",default_model:e.default_model||"",default_temperature:e.default_temperature??.7,default_max_tokens:e.default_max_tokens??4096,is_active:e.is_active!==!1,context_limit_tokens:e.context_limit_tokens??2e5,model_context_limits_json:e.model_context_limits?JSON.stringify(e.model_context_limits,null,2):"",p_input:Du(e.pricing?.input_per_million),p_output:Du(e.pricing?.output_per_million),p_cache_read:Du(e.pricing?.cache_read_per_million),p_cache_write:Du(e.pricing?.cache_write_per_million)}}function UO({open:e,initial:n,existingSlugs:s,onClose:r,onSave:i}){const c=!!n,[d,f]=v.useState($1),[g,m]=v.useState(!1),[h,x]=v.useState(null),[y,w]=v.useState([]),[S,_]=v.useState(!1),[j,E]=v.useState(null),[k,N]=v.useState(!1),[R,A]=v.useState("");v.useEffect(()=>{if(!e)return;const V=n?IO(n):$1;f(V),x(null),E(null),N(!1);const Y=Vr[V.engine];w(Y?.known_models||[])},[e,n]);const M=V=>f(Y=>({...Y,...V})),O=V=>{const Y=Vr[V];M({engine:V,name:V==="custom"?d.name:zi.find(P=>P.value===V)?.label||V,slug:V==="custom"?d.slug:V,base_url:Y.base_url,default_model:Y.default_model}),w(Y.known_models),E(null)},U=V=>{const Y=Vr[V];M({engine:V,base_url:d.base_url||Y.base_url,default_model:d.default_model||Y.default_model}),w(Y.known_models)},I=async()=>{_(!0),E(null);try{const V=await pd.models({engine:d.engine,slug:d.slug||pi(d.name),base_url:d.base_url||void 0,api_key:d.api_key_value||void 0});if(V.error){E(V.error);return}w(V.models),V.models.length===0&&E("Sin modelos. ¿Key/URL correctas?")}catch(V){E(V.message||"No se pudo listar modelos.")}finally{_(!1)}},B=v.useMemo(()=>d.default_model&&!y.includes(d.default_model)?[d.default_model,...y]:y,[y,d.default_model]),L=()=>{const V=(d.slug||pi(d.name)).trim();if(!V)return x("Slug requerido."),null;if(!c&&s.includes(V))return x(`Ya existe un provider "${V}".`),null;let Y;if(d.model_context_limits_json.trim())try{const $=JSON.parse(d.model_context_limits_json);if(!$||typeof $!="object"||Array.isArray($))throw new Error;Y=$}catch{return x("Límites de contexto por modelo: JSON inválido."),null}const K=[d.p_input,d.p_output,d.p_cache_read,d.p_cache_write].map($=>$.trim()).some(Boolean)?{input_per_million:Number(d.p_input||0),output_per_million:Number(d.p_output||0),cache_read_per_million:Number(d.p_cache_read||0),cache_write_per_million:Number(d.p_cache_write||0)}:void 0;return{provider:{slug:V,name:d.name.trim()||V,engine:d.engine,base_url:d.base_url.trim()||void 0,default_model:d.default_model.trim()||void 0,default_temperature:d.default_temperature,default_max_tokens:d.default_max_tokens,is_active:d.is_active,context_limit_tokens:d.context_limit_tokens||void 0,model_context_limits:Y,pricing:K},modelLimits:Y}},D=()=>{const V=L();if(!V)return;const{provider:Y}=V,P={name:Y.name,engine:Y.engine,is_active:Y.is_active!==!1,default_temperature:Y.default_temperature,default_max_tokens:Y.default_max_tokens};Y.base_url&&(P.base_url=Y.base_url),Y.default_model&&(P.default_model=Y.default_model),Y.context_limit_tokens&&(P.context_limit_tokens=Y.context_limit_tokens),Y.model_context_limits&&(P.model_context_limits=Y.model_context_limits),Y.pricing&&(P.pricing=Y.pricing),d.api_key_value.trim()&&(P.api_key=d.api_key_value.trim()),A(JSON.stringify(P,null,2)),x(null),N(!0)},q=async()=>{m(!0),x(null);try{if(k){const Y=(d.slug||pi(d.name)).trim();if(!Y){x("Slug requerido (en el formulario).");return}let P;try{P=JSON.parse(R)}catch{x("JSON inválido: revisá la sintaxis.");return}if(!P||typeof P!="object"||Array.isArray(P)){x("El JSON debe ser un objeto con la config del provider.");return}const K=P;if(!K.engine||typeof K.engine!="string"){x('Falta "engine" (ej. "anthropic", "ollama").');return}const $={slug:Y,name:typeof K.name=="string"?K.name:Y,engine:String(K.engine),base_url:typeof K.base_url=="string"?K.base_url:void 0,default_model:typeof K.default_model=="string"?K.default_model:void 0,is_active:K.is_active!==!1};await i({provider:$,raw:K,originalSlug:n?.slug}),r();return}const V=L();if(!V)return;await i({provider:V.provider,apiKeyValue:d.api_key_value.trim()||void 0,originalSlug:n?.slug}),r()}catch(V){x(V.message||"Error al guardar.")}finally{m(!1)}},F=c&&za(n?.api_key),Z=el(n?.api_key),H=F?`…${Z??""} (ya seteada)`:"sk-…",G=d.engine==="ollama",Q=Vr[d.engine]?.api_key_env;return l.jsx(ma,{open:e,onClose:r,title:c?`Editar ${n?.name||n?.slug}`:"Nuevo provider",description:"Proveedor LLM. El motor (engine) define qué adapter usa (openai, ollama, …).",size:"lg",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:r,disabled:g,children:"Cancelar"}),l.jsx(he,{variant:"primary",onClick:q,loading:g,children:c?"Guardar":"Crear"})]}),children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"flex items-center justify-between",children:[c?l.jsx("span",{}):l.jsx("div",{className:"flex flex-wrap gap-1.5",children:BO.map(V=>{const Y=vd[V],P=V==="custom"?"Custom":zi.find($=>$.value===V)?.label||V,K=d.engine===V;return l.jsxs("button",{type:"button",onClick:()=>O(V),className:`flex items-center gap-1.5 rounded-lg border px-2.5 py-1 text-xs transition-colors ${K?"border-emerald-500/50 bg-emerald-500/10 text-emerald-400":"border-border text-muted-fg hover:border-muted-fg/60 hover:text-foreground"}`,children:[l.jsx(Y,{className:"size-3.5"})," ",P]},V)})}),l.jsxs("button",{type:"button",onClick:()=>k?N(!1):D(),className:`flex shrink-0 items-center gap-1.5 rounded-lg border px-2.5 py-1 text-xs transition-colors ${k?"border-sky-500/50 bg-sky-500/10 text-sky-400":"border-border text-muted-fg hover:text-foreground"}`,children:[l.jsx(SR,{className:"size-3.5"})," ",k?"Volver al formulario":"JSON"]})]}),k?l.jsxs("div",{className:"space-y-2",children:[l.jsx(fe,{label:"Config del provider (JSON)",hint:`Se guarda como engines.${d.slug||pi(d.name)||"<slug>"} en config.json`,children:l.jsx(Qt,{rows:14,className:"font-mono text-xs",value:R,onChange:V=>A(V.target.value),spellCheck:!1})}),l.jsxs("p",{className:"text-[11px] text-muted-fg",children:["Debe ser un objeto JSON válido con al menos ",l.jsx("code",{children:"engine"}),". El slug se toma del formulario."]})]}):l.jsxs(l.Fragment,{children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:"Nombre",children:l.jsx(Ce,{value:d.name,onChange:V=>M({name:V.target.value,slug:c?d.slug:pi(V.target.value)}),placeholder:"Mi provider"})}),l.jsx(fe,{label:"Motor (engine)",children:l.jsx(Ct,{value:d.engine,onChange:V=>U(V),options:zi.map(V=>({value:V.value,label:V.label,icon:vd[V.value]}))})})]}),l.jsx(fe,{label:"URL base (base_url)",hint:"Se completa sola al elegir un proveedor.",children:l.jsx(Ce,{value:d.base_url,onChange:V=>M({base_url:V.target.value}),placeholder:"https://api.openai.com/v1"})}),!G&&l.jsx(fe,{label:"API key",hint:F?"Dejá en blanco para mantener la actual.":Q?`Se guarda como secreto. Env sugerida: ${Q}`:"Se guarda como secreto.",children:l.jsx(Ce,{type:"password",autoComplete:"new-password",value:d.api_key_value,onChange:V=>M({api_key_value:V.target.value}),placeholder:H})}),l.jsx(fe,{label:"Modelo por defecto",children:l.jsxs("div",{className:"space-y-2",children:[l.jsxs("div",{className:"flex items-start gap-2",children:[l.jsx(Xw,{value:d.default_model,onChange:V=>M({default_model:V}),options:B,className:"flex-1"}),l.jsxs(he,{size:"sm",variant:"secondary",onClick:I,disabled:S,title:"Lista los modelos reales del proveedor",children:[S?l.jsx(ph,{className:"size-3.5 animate-spin"}):l.jsx(rl,{className:"size-3.5"}),"Cargar modelos"]})]}),j&&l.jsx("p",{className:"text-[11px] text-amber-400",children:j})]})}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:"Máx. tokens (max_tokens)",children:l.jsx(Ce,{type:"number",min:256,step:256,value:d.default_max_tokens,onChange:V=>M({default_max_tokens:parseInt(V.target.value)||4096})})}),l.jsx(fe,{label:`Temperatura: ${d.default_temperature.toFixed(1)}`,children:l.jsx("input",{type:"range",min:0,max:2,step:.1,value:d.default_temperature,onChange:V=>M({default_temperature:parseFloat(V.target.value)}),className:"mt-2 w-full accent-foreground"})})]}),l.jsxs("details",{className:"rounded-md border border-border bg-muted/20 p-3",children:[l.jsx("summary",{className:"cursor-pointer text-xs font-medium text-muted-fg",children:"Análisis de tokens / pricing (opcional)"}),l.jsxs("div",{className:"mt-3 space-y-3",children:[l.jsx(fe,{label:"Límite de contexto (tokens)",children:l.jsx(Ce,{type:"number",min:0,step:1024,value:d.context_limit_tokens,onChange:V=>M({context_limit_tokens:parseInt(V.target.value)||0})})}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:"$ entrada / 1M",children:l.jsx(Ce,{type:"number",min:0,step:1e-4,value:d.p_input,onChange:V=>M({p_input:V.target.value}),placeholder:"0.15"})}),l.jsx(fe,{label:"$ salida / 1M",children:l.jsx(Ce,{type:"number",min:0,step:1e-4,value:d.p_output,onChange:V=>M({p_output:V.target.value}),placeholder:"0.60"})}),l.jsx(fe,{label:"$ cache read / 1M",children:l.jsx(Ce,{type:"number",min:0,step:1e-4,value:d.p_cache_read,onChange:V=>M({p_cache_read:V.target.value}),placeholder:"0.03"})}),l.jsx(fe,{label:"$ cache write / 1M",children:l.jsx(Ce,{type:"number",min:0,step:1e-4,value:d.p_cache_write,onChange:V=>M({p_cache_write:V.target.value}),placeholder:"0.00"})})]}),l.jsx(fe,{label:"Límites de contexto por modelo (JSON)",hint:'{"gpt-4o-mini":128000}',children:l.jsx(Qt,{rows:3,className:"font-mono text-xs",value:d.model_context_limits_json,onChange:V=>M({model_context_limits_json:V.target.value})})})]})]}),l.jsx(sn,{checked:d.is_active,onChange:V=>M({is_active:V}),label:"Activo (los agentes pueden usarlo)"})]}),h&&l.jsx("div",{className:"rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive",children:h})]})})}const HO=new Set(zi.map(e=>e.value));function qO(e,n){const s=typeof n.engine=="string"&&n.engine||(HO.has(e)?e:"custom");return{slug:e,name:typeof n.name=="string"?n.name:void 0,engine:s,base_url:typeof n.base_url=="string"?n.base_url:void 0,api_key:typeof n.api_key=="string"?n.api_key:void 0,default_model:typeof n.default_model=="string"?n.default_model:void 0,default_temperature:typeof n.default_temperature=="number"?n.default_temperature:void 0,default_max_tokens:typeof n.default_max_tokens=="number"?n.default_max_tokens:void 0,is_active:typeof n.is_active=="boolean"?n.is_active:void 0,context_limit_tokens:typeof n.context_limit_tokens=="number"?n.context_limit_tokens:void 0,model_context_limits:n.model_context_limits||void 0,pricing:n.pricing||void 0}}function VO(){const e=rt(),{config:n,isLoading:s,patch:r,mutate:i}=vr(),[c,d]=v.useState(!1),[f,g]=v.useState(null);if(s)return l.jsx(Je,{});const m=n.engines||{},h=Object.entries(m).map(([E,k])=>qO(E,k||{})),x=h.map(E=>E.slug),y=()=>{g(null),d(!0)},w=E=>{g(E),d(!0)},S=async({provider:E,apiKeyValue:k,raw:N})=>{if(N){await r({[`engines.${E.slug}`]:N}),e.success("Provider guardado (JSON)."),i();return}const R=`engines.${E.slug}`,A={[`${R}.name`]:E.name,[`${R}.engine`]:E.engine,[`${R}.is_active`]:E.is_active!==!1,[`${R}.default_temperature`]:E.default_temperature,[`${R}.default_max_tokens`]:E.default_max_tokens},M=[],O=(U,I)=>{I===void 0||I===""?M.push(`${R}.${U}`):A[`${R}.${U}`]=I};O("base_url",E.base_url),O("default_model",E.default_model),O("context_limit_tokens",E.context_limit_tokens),O("pricing",E.pricing),O("model_context_limits",E.model_context_limits),k&&(A[`${R}.api_key`]=k),await r(A,M),e.success("Provider guardado."),i()},_=async E=>{try{await r({[`engines.${E.slug}.is_active`]:E.is_active===!1}),i()}catch(k){e.error(k.message)}},j=async E=>{if(confirm(`Borrar provider ${E.name||E.slug}?`))try{await r(void 0,[`engines.${E.slug}`]),e.success("Provider borrado."),i()}catch(k){e.error(k.message)}};return l.jsxs(He,{title:"Proveedores",description:"Proveedores LLM (API). Cada provider usa un engine/adapter (openai, ollama, …) con su key y URL.",action:l.jsxs(he,{size:"sm",variant:"primary",onClick:y,children:[l.jsx(Rn,{size:14})," Nuevo provider"]}),children:[h.length===0?l.jsx(lt,{children:"Sin providers. Agregá uno con el botón de arriba."}):l.jsxs("div",{className:"grid grid-cols-1 items-stretch gap-3 sm:grid-cols-2 lg:grid-cols-3",children:[h.map(E=>l.jsx(PO,{provider:E,onEdit:()=>w(E),onDelete:()=>j(E),onToggle:()=>_(E)},E.slug)),l.jsxs("button",{type:"button",onClick:y,className:"flex min-h-[120px] flex-col items-center justify-center gap-2 rounded-xl border border-dashed border-border text-muted-fg transition-colors hover:border-muted-fg/60 hover:text-foreground",children:[l.jsx(Rn,{size:20}),l.jsx("span",{className:"text-sm font-medium",children:"Agregar provider"})]})]}),l.jsx(UO,{open:c,initial:f,existingSlugs:x,onClose:()=>{d(!1),g(null)},onSave:S})]})}function Zw(){return l.jsxs("div",{className:"space-y-6",children:[l.jsx(LO,{}),l.jsx(VO,{})]})}function $O(){const e=rt(),[n,s]=v.useState(!1),i=Qe(n?"/agents/vault?include_removed=1":"/agents/vault",()=>Jt.vault({includeRemoved:n})),c=i.data||[],[d,f]=v.useState(null),g=async h=>{const x=h.source!=="user",y=x?C("base.defaults_tombstone_msg",{slug:h.slug}):C("base.defaults_delete_msg",{slug:h.slug});if(confirm(y))try{await Jt.vaultRemove(h.slug),e.success(C(x?"base.defaults_hidden":"base.defaults_deleted")),i.mutate()}catch(w){e.error(w.message)}},m=async h=>{try{await Jt.vaultRestore(h),e.success(C("base.defaults_restored")),i.mutate()}catch(x){e.error(x.message)}};return l.jsxs(He,{title:C("base.defaults_title"),description:C("base.defaults_desc"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx(sn,{checked:n,onChange:s,label:C("base.defaults_show_removed")}),l.jsxs(he,{size:"sm",onClick:()=>f("new"),children:[l.jsx(Rn,{size:14})," ",C("base.defaults_new")]})]}),children:[i.isLoading&&l.jsx(Je,{}),!i.isLoading&&c.length===0&&l.jsx(lt,{children:C("base.defaults_empty")}),l.jsx("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:c.map(h=>{const x=n&&h.tombstoned;return l.jsxs("div",{className:`flex flex-col gap-2 rounded-xl border bg-card p-4 ${x?"border-dashed border-border opacity-60":"border-border"}`,children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[l.jsx("div",{className:"flex size-9 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-slate-600 to-gray-600",children:h.is_master?l.jsx(ks,{className:"size-4 text-white"}):l.jsx(vn,{className:"size-4 text-white"})}),l.jsx("span",{className:"truncate text-sm font-semibold",children:h.slug}),l.jsx(GO,{source:h.source})]}),l.jsx("div",{className:"flex shrink-0 items-center gap-0.5",children:x?l.jsx(Gp,{label:C("base.defaults_restore"),onClick:()=>m(h.slug),variant:"secondary",children:l.jsx(gj,{size:13})}):l.jsxs(l.Fragment,{children:[l.jsx(Gp,{label:C("base.defaults_edit"),onClick:()=>f(h),variant:"ghost",children:l.jsx(gh,{size:13})}),l.jsx(Gp,{label:h.source==="user"?C("base.defaults_delete"):C("base.defaults_hide"),onClick:()=>g(h),variant:"ghost-destructive",children:l.jsx(Ms,{size:13})})]})})]}),h.model?l.jsx(Ue,{tone:"info",children:h.model}):l.jsx("span",{className:"text-[10px] text-muted-fg",children:"modelo: default del router"}),h.description&&l.jsx("p",{className:"line-clamp-3 text-xs text-muted-fg",children:h.description}),l.jsxs("div",{className:"flex flex-wrap gap-1",children:[h.role&&l.jsx(Ue,{children:h.role}),h.skills?.map(y=>l.jsxs("span",{className:"inline-flex items-center gap-0.5 rounded bg-muted px-1 py-0.5 text-[9px] text-muted-fg",children:[l.jsx(ol,{size:9})," ",y]},y)),h.tools?.map(y=>l.jsxs("span",{className:"inline-flex items-center gap-0.5 rounded bg-muted px-1 py-0.5 text-[9px] text-muted-fg",children:[l.jsx(ll,{size:9})," ",y]},y))]})]},h.slug)})}),d!==null&&l.jsx(YO,{agent:d==="new"?null:d,onClose:()=>f(null),onSaved:()=>{f(null),i.mutate()}})]})}function GO({source:e}){return e==="user"?l.jsx(Ue,{tone:"success",children:"user"}):e==="user-override"?l.jsx(Ue,{tone:"warning",children:"override"}):l.jsx(Ue,{tone:"muted",children:"bundled"})}function Gp({label:e,onClick:n,variant:s="ghost",children:r}){const i="inline-flex size-7 items-center justify-center rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",c={ghost:"text-muted-fg hover:bg-accent hover:text-accent-fg","ghost-destructive":"text-muted-fg hover:bg-destructive/15 hover:text-destructive",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80"};return l.jsxs(Qh,{children:[l.jsx(Zh,{render:l.jsx("button",{type:"button",onClick:n,"aria-label":e,className:`${i} ${c[s]}`,children:r})}),l.jsx(Jh,{children:e})]})}function YO({agent:e,onClose:n,onSaved:s}){const r=rt(),[i,c]=v.useState(!1),d=!e,[f,g]=v.useState(e?.slug??""),[m,h]=v.useState(e?.role??""),[x,y]=v.useState(e?.model??""),[w,S]=v.useState(e?.description??""),[_,j]=v.useState(e?.language??"es"),[E,k]=v.useState((e?.skills??[]).join(", ")),[N,R]=v.useState((e?.tools??[]).join(", ")),[A,M]=v.useState(!!e?.is_master),[O,U]=v.useState(e?.body??""),I=async()=>{const B={role:m||void 0,model:x||void 0,description:w||void 0,language:_||void 0,skills:E,tools:N,is_master:A};c(!0);try{if(d){if(!/^[a-z][a-z0-9_-]*$/.test(f))throw new Error(C("base.defaults_slug_invalid"));await Jt.vaultCreate(f,B,O),r.success(C("base.defaults_created",{slug:f}))}else await Jt.vaultPatch(e.slug,{fields:B,body:O}),r.success(C("base.defaults_saved",{slug:e.slug}));s()}catch(L){r.error(L.message)}finally{c(!1)}};return l.jsx(ma,{open:!0,onClose:n,title:d?C("base.defaults_new_title"):C("base.defaults_edit_title",{slug:e.slug}),description:d?C("base.defaults_new_desc"):e.source==="bundled"?C("base.defaults_bundled_desc"):C("base.defaults_user_desc"),size:"lg",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:i,children:C("common.cancel")}),l.jsx(he,{variant:"primary",onClick:I,loading:i,children:C("common.save")})]}),children:l.jsxs("div",{className:"space-y-3",children:[d&&l.jsx(fe,{label:"slug",hint:"kebab-case, ej. reviewer, my-agent, content-writer",children:l.jsx(Ce,{autoFocus:!0,value:f,onChange:B=>g(B.target.value),placeholder:"reviewer"})}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:"role",children:l.jsx(Ce,{value:m,onChange:B=>h(B.target.value),placeholder:"Code reviewer"})}),l.jsx(fe,{label:"model",children:l.jsx(Ce,{value:x,onChange:B=>y(B.target.value),placeholder:"openrouter:..."})}),l.jsx(fe,{label:"language",children:l.jsx(Ce,{value:_,onChange:B=>j(B.target.value),placeholder:"es"})}),l.jsx(fe,{label:"is_master",children:l.jsx("div",{className:"flex h-9 items-center",children:l.jsx(sn,{checked:A,onChange:M,label:C("base.defaults_master_label")})})})]}),l.jsx(fe,{label:"description",children:l.jsx(Ce,{value:w,onChange:B=>S(B.target.value)})}),l.jsx(fe,{label:"skills",hint:"separadas por coma",children:l.jsx(Ce,{value:E,onChange:B=>k(B.target.value),placeholder:"code-review, git"})}),l.jsx(fe,{label:"tools",hint:"separadas por coma",children:l.jsx(Ce,{value:N,onChange:B=>R(B.target.value),placeholder:"read, write, run"})}),l.jsx(fe,{label:"body",hint:"markdown — extiende el system prompt del agente",children:l.jsx(Qt,{value:O,onChange:B=>U(B.target.value),rows:10,placeholder:"# Mission\\n..."})})]})})}const FO={apx:"success",claude:"info",codex:"warning"};function XO(){const[e,n]=v.useState(""),s=Qe(`/sessions?engine=${e}`,()=>W3.global(e||void 0)),r=s.data?.sessions||[];return l.jsxs(He,{title:C("base.sessions_title"),description:C("base.sessions_desc"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("div",{className:"w-40",children:l.jsx(Ct,{value:e,onChange:n,options:[{value:"",label:C("base.sessions_all")},{value:"apx",label:"apx"},{value:"claude",label:"claude"},{value:"codex",label:"codex"}]})}),l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>s.mutate(),children:l.jsx(rl,{size:13})})]}),children:[s.isLoading&&l.jsx(Je,{}),s.error&&l.jsx(lt,{children:C("base.sessions_error",{msg:s.error.message})}),!s.isLoading&&!s.error&&r.length===0&&l.jsx(lt,{children:C("base.sessions_empty")}),l.jsx("ul",{className:"space-y-1 text-sm",children:r.map((i,c)=>l.jsxs("li",{className:"flex items-center gap-3 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx(Ue,{tone:FO[i.engine]||"muted",children:i.engine}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("div",{className:"truncate",children:i.title||i.id}),l.jsx("div",{className:"truncate font-mono text-[10px] text-muted-fg",children:i.cwd})]}),i.mtime>0&&l.jsx("span",{className:"shrink-0 text-[11px] text-muted-fg",children:new Date(i.mtime).toLocaleString()})]},`${i.engine}-${i.id}-${c}`))})]})}function KO(){const e=Ua(),[n,s]=v.useState("open"),r=Qe(`/tasks?state=${n}`,()=>lr.global(n));return l.jsxs(He,{title:C("project.global_tasks.title"),description:C("project.global_tasks.subtitle"),action:l.jsx("div",{className:"flex gap-1",children:["open","done","dropped","all"].map(i=>l.jsx(he,{size:"sm",variant:n===i?"primary":"ghost",onClick:()=>s(i),children:i},i))}),children:[r.isLoading&&l.jsx(Je,{}),!r.isLoading&&(r.data?.length??0)===0&&l.jsx(lt,{children:C("project.global_tasks.empty")}),l.jsx("ul",{className:"space-y-2 text-sm",children:(r.data||[]).map(i=>l.jsxs("li",{className:"flex items-start gap-3 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx("button",{type:"button",onClick:()=>e(`/p/${i.project_id}/tasks`),title:C("project.global_tasks.go_project"),children:l.jsx(Ue,{tone:"info",children:(i.project_name||"").split("/").pop()||i.project_id})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsx("div",{className:"font-medium",children:i.title}),l.jsxs("div",{className:"mt-0.5 flex flex-wrap items-center gap-2 text-xs text-muted-fg",children:[l.jsx("span",{children:i.state}),i.agent&&l.jsxs(Ue,{tone:"muted",children:["@",i.agent]}),i.tags?.map(c=>l.jsxs("span",{children:["#",c]},c)),i.due&&l.jsxs("span",{children:[C("project.global_tasks.due")," ",i.due]})]})]})]},`${i.project_id}-${i.id}`))})]})}const Jw=v.createContext(void 0);function xx(){const e=v.useContext(Jw);if(e===void 0)throw new Error(Nn(64));return e}let QO=(function(e){return e.activationDirection="data-activation-direction",e.orientation="data-orientation",e})({});const bx={tabActivationDirection:e=>({[QO.activationDirection]:e})},ZO=v.forwardRef(function(n,s){const{className:r,defaultValue:i=0,onValueChange:c,orientation:d="horizontal",render:f,value:g,style:m,...h}=n,x=n.defaultValue!==void 0,y=v.useRef([]),[w,S]=v.useState(()=>new Map),[_,j]=Gi({controlled:g,default:i,name:"Tabs",state:"value"}),E=g!==void 0,[k,N]=v.useState(()=>new Map),R=v.useCallback(oe=>{if(oe===void 0)return null;for(const[ue,te]of k.entries())if(te!=null&&oe===(te.value??te.index))return ue;return null},[k]),[A,M]=v.useState(()=>({previousValue:_,tabActivationDirection:"none"})),{previousValue:O,tabActivationDirection:U}=A;let I=U,B=!1;O!==_&&(I=G1(O,_,d,k),B=O!=null&&_!=null&&R(_)==null);const L=B?O:_,D=O!==L||U!==I;Re(()=>{D&&M({previousValue:L,tabActivationDirection:I})},[L,D,I]);const q=Ae((oe,ue)=>{const te=G1(_,oe,d,k);ue.activationDirection=te,c?.(oe,ue),!ue.isCanceled&&j(oe)}),F=Ae((oe,ue)=>{c?.(oe,tt(ue,void 0,void 0,{activationDirection:"none"}))}),Z=Ae((oe,ue)=>{S(te=>{if(te.get(oe)===ue)return te;const Ne=new Map(te);return Ne.set(oe,ue),Ne})}),H=Ae((oe,ue)=>{S(te=>{if(!te.has(oe)||te.get(oe)!==ue)return te;const Ne=new Map(te);return Ne.delete(oe),Ne})}),G=v.useCallback(oe=>w.get(oe),[w]),Q=v.useCallback(oe=>{for(const ue of k.values())if(oe===ue?.value)return ue?.id},[k]),V=v.useMemo(()=>({getTabElementBySelectedValue:R,getTabIdByPanelValue:Q,getTabPanelIdByValue:G,onValueChange:q,orientation:d,registerMountedTabPanel:Z,setTabMap:N,unregisterMountedTabPanel:H,tabActivationDirection:I,value:_}),[R,Q,G,q,d,Z,N,H,I,_]),Y=v.useMemo(()=>{for(const oe of k.values())if(oe!=null&&oe.value===_)return oe},[k,_]),P=v.useMemo(()=>{for(const oe of k.values())if(oe!=null&&!oe.disabled)return oe.value},[k]),K=v.useRef(!x),$=v.useRef(x),W=v.useRef(!1);Re(()=>{if(E)return;function oe($e,be){j($e),M(Se=>Se.previousValue===$e&&Se.tabActivationDirection==="none"?Se:{previousValue:$e,tabActivationDirection:"none"}),F($e,be),K.current=!1}if(k.size===0){if(!W.current||_===null)return;oe(null,H0);return}W.current=!0;const ue=Y?.disabled,te=Y==null&&_!==null;if(!ue&&_===i&&($.current=!1),$.current&&ue&&_===i)return;const Ne=K.current;if(ue||te){const $e=P??null;if(_===$e){K.current=!1;return}let be=H0;Ne?be=q0:ue&&(be=Ij),oe($e,be);return}Ne&&Y!=null&&(F(_,q0),K.current=!1)},[i,P,E,F,Y,j,k,_]);const ie=Lt("div",n,{state:{orientation:d,tabActivationDirection:I},ref:s,props:h,stateAttributesMapping:bx});return l.jsx(Jw.Provider,{value:V,children:l.jsx(mx,{elementsRef:y,children:ie})})});function G1(e,n,s,r){if(e==null||n==null)return"none";let i=null,c=null;for(const[g,m]of r.entries()){if(m==null)continue;const h=m.value??m.index;if(e===h&&(i=g),n===h&&(c=g),i!=null&&c!=null)break}if(i==null||c==null)return i!==c&&(typeof e=="number"||typeof e=="string")&&typeof e==typeof n?s==="horizontal"?n>e?"right":"left":n>e?"down":"up":"none";const d=i.getBoundingClientRect(),f=c.getBoundingClientRect();if(s==="horizontal"){if(f.left<d.left)return"left";if(f.left>d.left)return"right"}else{if(f.top<d.top)return"up";if(f.top>d.top)return"down"}return"none"}const Ww="data-composite-item-active";function JO(e={}){const{highlightItemOnHover:n,highlightedIndex:s,onHighlightedIndexChange:r}=uw(),{ref:i,index:c}=gx(e),d=s===c,f=v.useRef(null),g=Ts(i,f);return{compositeProps:v.useMemo(()=>({tabIndex:d?0:-1,onFocus(){r(c)},onMouseMove(){const h=f.current;if(!n||!h)return;const x=h.hasAttribute("disabled")||h.ariaDisabled==="true";!d&&!x&&h.focus()}}),[d,r,c,n]),compositeRef:g,index:c}}const e2=v.createContext(void 0);function WO(){const e=v.useContext(e2);if(e===void 0)throw new Error(Nn(65));return e}const ez=v.forwardRef(function(n,s){const{className:r,disabled:i=!1,render:c,value:d,id:f,nativeButton:g=!0,style:m,...h}=n,{value:x,getTabPanelIdByValue:y,orientation:w}=xx(),{activateOnFocus:S,highlightedTabIndex:_,onTabActivation:j,registerTabResizeObserverElement:E,setHighlightedTabIndex:k,tabsListElement:N}=WO(),R=br(f),A=v.useMemo(()=>({disabled:i,id:R,value:d}),[i,R,d]),{compositeProps:M,compositeRef:O,index:U}=JO({metadata:A}),I=d===x,B=v.useRef(!1),L=v.useRef(null);v.useEffect(()=>{const K=L.current;if(K)return E(K)},[E]),Re(()=>{if(B.current){B.current=!1;return}if(!(I&&U>-1&&_!==U))return;const K=N;if(K!=null){const $=zn(xt(K));if($&&Ye(K,$))return}i||k(U)},[I,U,_,k,i,N]);const{getButtonProps:D,buttonRef:q}=ml({disabled:i,native:g,focusableWhenDisabled:!0}),F=y(d),Z=v.useRef(!1),H=v.useRef(!1);function G(K){I||i||j(d,tt(Ns,K.nativeEvent,void 0,{activationDirection:"none"}))}function Q(K){I||(U>-1&&!i&&k(U),!i&&S&&(!Z.current||Z.current&&H.current)&&j(d,tt(Ns,K.nativeEvent,void 0,{activationDirection:"none"})))}function V(K){if(I||i)return;Z.current=!0;function $(){Z.current=!1,H.current=!1}(!K.button||K.button===0)&&(H.current=!0,xt(K.currentTarget).addEventListener("pointerup",$,{once:!0}))}return Lt("button",n,{state:{disabled:i,active:I,orientation:w},ref:[s,q,O,L],props:[M,{role:"tab","aria-controls":F,"aria-selected":I,id:R,onClick:G,onFocus:Q,onPointerDown:V,[Ww]:I?"":void 0,onKeyDownCapture(){B.current=!0}},h,D]})});let tz=(function(e){return e.index="data-index",e.activationDirection="data-activation-direction",e.orientation="data-orientation",e.hidden="data-hidden",e[e.startingStyle=Xr.startingStyle]="startingStyle",e[e.endingStyle=Xr.endingStyle]="endingStyle",e})({});const nz={...bx,...dl},az=v.forwardRef(function(n,s){const{className:r,value:i,render:c,keepMounted:d=!1,style:f,...g}=n,{value:m,getTabIdByPanelValue:h,orientation:x,tabActivationDirection:y,registerMountedTabPanel:w,unregisterMountedTabPanel:S}=xx(),_=br(),j=v.useMemo(()=>({id:_,value:i}),[_,i]),{ref:E,index:k}=gx({metadata:j}),N=i===m,{mounted:R,transitionStatus:A,setMounted:M}=tc(N),O=!R,U=h(i),I={hidden:O,orientation:x,tabActivationDirection:y,transitionStatus:A},B=v.useRef(null),L=Lt("div",n,{state:I,ref:[s,E,B],props:[{"aria-labelledby":U,hidden:O,id:_,role:"tabpanel",tabIndex:N?0:-1,inert:Kh(!N),[tz.index]:k},g],stateAttributesMapping:nz});return xr({open:N,ref:B,onComplete(){N||M(!1)}}),Re(()=>{if(!(O&&!d)&&_!=null)return w(i,_),()=>{S(i,_)}},[O,d,i,_,w,S]),d||R?L:null});function sz(e){return e==null||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true"}const rz=[];function oz(e){const{itemSizes:n,cols:s=1,loopFocus:r=!0,onLoop:i,dense:c=!1,orientation:d="both",direction:f,highlightedIndex:g,onHighlightedIndexChange:m,rootRef:h,enableHomeAndEndKeys:x=!1,stopEventPropagation:y=!1,disabledIndices:w,modifierKeys:S=rz}=e,[_,j]=v.useState(0),E=s>1,k=v.useRef(null),N=Ts(k,h),R=v.useRef([]),A=v.useRef(!1),M=g??_,O=Ae((L,D=!1)=>{if((m??j)(L),D){const q=R.current[L];z1(k.current,q,f,d)}}),U=Ae(L=>{if(L.size===0||A.current)return;A.current=!0;const D=Array.from(L.keys()),q=D.find(Z=>Z?.hasAttribute(Ww))??null,F=q?D.indexOf(q):-1;F!==-1&&O(F),z1(k.current,q,f,d)}),I=Ae((L,D,q)=>i?i?.(L,D,q,R):q),B=v.useMemo(()=>({"aria-orientation":d==="both"?void 0:d,ref:N,onFocus(L){const D=k.current,q=En(L.nativeEvent);!D||q==null||!O1(q)||q.setSelectionRange(0,q.value.length??0)},onKeyDown(L){const D=x?ix:jw;if(!D.has(L.key)||lz(L,S)||!k.current)return;const F=f==="rtl",Z=F?hd:Mi,H={horizontal:Z,vertical:Ho,both:Z}[d],G=F?Mi:hd,Q={horizontal:G,vertical:Ai,both:G}[d],V=En(L.nativeEvent);if(V!=null&&O1(V)&&!sz(V)){const ie=V.selectionStart,oe=V.selectionEnd,ue=V.value??"";if(ie==null||L.shiftKey||ie!==oe||L.key!==Q&&ie<ue.length||L.key!==H&&ie>0)return}let Y=M;const P=Gu(R,w),K=Lg(R,w);if(E){const ie=n||Array.from({length:R.current.length},()=>({width:1,height:1})),oe=Xj(ie,s,c),ue=oe.findIndex(Ne=>Ne!=null&&!Cs(R.current,Ne,w)),te=oe.reduce((Ne,$e,be)=>$e!=null&&!Cs(R.current,$e,w)?be:Ne,-1);Y=oe[Fj(oe.map(Ne=>Ne!=null?R.current[Ne]:null),{event:L,orientation:d,loopFocus:r,onLoop:I,cols:s,disabledIndices:Qj([...w||R.current.map((Ne,$e)=>Cs(R.current,$e)?$e:void 0),void 0],oe),minIndex:ue,maxIndex:te,prevIndex:Kj(M>K?P:M,ie,oe,s,L.key===Ho?"bl":L.key===Mi?"tr":"tl"),rtl:F})]}const $={horizontal:[Z],vertical:[Ho],both:[Z,Ho]}[d],W={horizontal:[G],vertical:[Ai],both:[G,Ai]}[d],ce=E?D:{horizontal:x?X5:yw,vertical:x?K5:_w,both:D}[d];x&&(L.key===Yd?Y=P:L.key===Fd&&(Y=K)),Y===M&&($.includes(L.key)||W.includes(L.key))&&(r&&Y===K&&$.includes(L.key)?(Y=P,i&&(Y=i(L,M,Y,R))):r&&Y===P&&W.includes(L.key)?(Y=K,i&&(Y=i(L,M,Y,R))):Y=On(R.current,{startingIndex:Y,decrement:W.includes(L.key),disabledIndices:w})),Y!==M&&!Vi(R.current,Y)&&(y&&L.stopPropagation(),ce.has(L.key)&&L.preventDefault(),O(Y,!0),queueMicrotask(()=>{R.current[Y]?.focus()}))}}),[s,c,f,w,R,x,M,E,n,r,i,I,N,S,O,d,y]);return v.useMemo(()=>({props:B,highlightedIndex:M,onHighlightedIndexChange:O,elementsRef:R,disabledIndices:w,onMapChange:U,relayKeyboardEvent:B.onKeyDown}),[B,M,O,R,w,U])}function lz(e,n){for(const s of e4.values())if(!n.includes(s)&&e.getModifierState(s))return!0;return!1}function iz(e){const{render:n,className:s,style:r,refs:i=Ui,props:c=Ui,state:d=an,stateAttributesMapping:f,highlightedIndex:g,onHighlightedIndexChange:m,orientation:h,dense:x,itemSizes:y,loopFocus:w,onLoop:S,cols:_,enableHomeAndEndKeys:j,onMapChange:E,stopEventPropagation:k=!0,rootRef:N,disabledIndices:R,modifierKeys:A,highlightItemOnHover:M=!1,tag:O="div",...U}=e,I=Fh(),{props:B,highlightedIndex:L,onHighlightedIndexChange:D,elementsRef:q,onMapChange:F,relayKeyboardEvent:Z}=oz({itemSizes:y,cols:_,loopFocus:w,onLoop:S,dense:x,orientation:h,highlightedIndex:g,onHighlightedIndexChange:m,rootRef:N,stopEventPropagation:k,enableHomeAndEndKeys:j,direction:I,disabledIndices:R,modifierKeys:A}),H=Lt(O,e,{state:d,ref:i,props:[B,...c,U],stateAttributesMapping:f}),G=v.useMemo(()=>({highlightedIndex:L,onHighlightedIndexChange:D,highlightItemOnHover:M,relayKeyboardEvent:Z}),[L,D,M,Z]);return l.jsx(cw.Provider,{value:G,children:l.jsx(mx,{elementsRef:q,onMapChange:Q=>{E?.(Q),F(Q)},children:H})})}const cz=v.forwardRef(function(n,s){const{activateOnFocus:r=!1,className:i,loopFocus:c=!0,render:d,style:f,...g}=n,{onValueChange:m,orientation:h,value:x,setTabMap:y,tabActivationDirection:w}=xx(),[S,_]=v.useState(0),[j,E]=v.useState(null),k=v.useRef(new Set),N=v.useRef(new Set),R=v.useRef(null);v.useEffect(()=>{if(typeof ResizeObserver>"u")return;const L=new ResizeObserver(()=>{k.current.forEach(D=>{D()})});return R.current=L,j&&L.observe(j),N.current.forEach(D=>{L.observe(D)}),()=>{L.disconnect(),R.current=null}},[j]);const A=Ae(L=>(k.current.add(L),()=>{k.current.delete(L)})),M=Ae(L=>(N.current.add(L),R.current?.observe(L),()=>{N.current.delete(L),R.current?.unobserve(L)})),O=Ae((L,D)=>{L!==x&&m(L,D)}),U={orientation:h,tabActivationDirection:w},I={"aria-orientation":h==="vertical"?"vertical":void 0,role:"tablist"},B=v.useMemo(()=>({activateOnFocus:r,highlightedTabIndex:S,registerIndicatorUpdateListener:A,registerTabResizeObserverElement:M,onTabActivation:O,setHighlightedTabIndex:_,tabsListElement:j}),[r,S,A,M,O,_,j]);return l.jsx(e2.Provider,{value:B,children:l.jsx(iz,{render:d,className:i,style:f,state:U,refs:[s,E],props:[I,g],stateAttributesMapping:bx,highlightedIndex:S,enableHomeAndEndKeys:!0,loopFocus:c,orientation:h,onHighlightedIndexChange:_,onMapChange:y,disabledIndices:Ui})})});function Xd({className:e,...n}){return l.jsx(ZO,{"data-slot":"tabs",className:Pt("flex flex-col gap-4",e),...n})}const uz=sx("inline-flex h-9 w-fit items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground data-[variant=line]:h-8 data-[variant=line]:gap-1 data-[variant=line]:rounded-none data-[variant=line]:bg-transparent data-[variant=line]:p-0",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});function Kd({className:e,variant:n="default",...s}){return l.jsx(cz,{"data-slot":"tabs-list","data-variant":n,className:Pt(uz({variant:n}),e),...s})}function Da({className:e,...n}){return l.jsx(ez,{"data-slot":"tabs-trigger",className:Pt("inline-flex h-7 items-center justify-center gap-1.5 rounded-md border border-transparent px-3 py-1 text-sm font-medium whitespace-nowrap text-muted-fg transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-active:bg-background data-active:text-foreground data-active:shadow-sm dark:data-active:border-input dark:data-active:bg-input/30 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...n})}function La({className:e,...n}){return l.jsx(az,{"data-slot":"tabs-content",className:Pt("text-sm outline-none",e),...n})}function Y1(e,n){let s=e;for(const r of n.split(".")){if(!s||typeof s!="object"||Array.isArray(s))return;s=s[r]}return s}function vx(e,n=""){const s={};for(const[r,i]of Object.entries(e)){const c=n?`${n}.${r}`:r;i&&typeof i=="object"&&!Array.isArray(i)?Object.assign(s,vx(i,c)):s[c]=i}return s}function dz(e){const n=JSON.parse(e);if(!n||typeof n!="object"||Array.isArray(n))throw new Error("JSON debe ser objeto.");return n}function Zg({sections:e,source:n,placeholderSource:s,jsonTitle:r,jsonDescription:i,saveLabel:c="Guardar",onSaveFields:d,onSaveJson:f,busy:g}){const m=e[0]?.key||"json",[h,x]=v.useState({}),[y,w]=v.useState(""),[S,_]=v.useState("");v.useEffect(()=>{const N={};for(const R of e.flatMap(A=>A.fields))N[R.path]=Y1(n,R.path)??"";x(N),w(JSON.stringify(n||{},null,2)),_("")},[n,e]);const j=v.useMemo(()=>new Set(e.flatMap(N=>N.fields.map(R=>R.path))),[e]),E=async()=>{const N={},R=[];for(const A of e.flatMap(M=>M.fields)){const M=h[A.path];if(!za(M)){if(M===""||M===void 0||M===null){R.push(A.path);continue}if(A.kind==="number"){const O=Number(M);Number.isFinite(O)&&(N[A.path]=O)}else N[A.path]=M}}await d(N,R.filter(A=>j.has(A)))},k=async()=>{_("");try{await f(dz(y))}catch(N){_(N.message)}};return l.jsxs(Xd,{defaultValue:m,className:"space-y-4",children:[l.jsxs(Kd,{className:"flex flex-wrap",children:[e.map(N=>l.jsx(Da,{value:N.key,children:N.label},N.key)),l.jsx(Da,{value:"json",children:"JSON"})]}),e.map(N=>l.jsx(La,{value:N.key,children:l.jsxs("div",{className:"space-y-4",children:[N.description&&l.jsx("p",{className:"text-sm text-muted-fg",children:N.description}),l.jsx("div",{className:"grid gap-3 md:grid-cols-2",children:N.fields.map(R=>l.jsx(fz,{field:R,value:h[R.path],inherited:Y1(s,R.path),onChange:A=>x(M=>({...M,[R.path]:A}))},R.path))}),l.jsx(he,{variant:"primary",loading:g,onClick:E,children:c})]})},N.key)),l.jsx(La,{value:"json",children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{children:[l.jsx("h3",{className:"text-sm font-medium",children:r}),i&&l.jsx("p",{className:"text-xs text-muted-fg",children:i})]}),l.jsx(Qt,{rows:18,className:"font-mono text-xs",value:y,onChange:N=>w(N.target.value)}),S&&l.jsx("p",{className:"text-xs text-destructive",children:S}),l.jsx(he,{variant:"primary",loading:g,onClick:k,children:"Guardar JSON"})]})})]})}function fz({field:e,value:n,inherited:s,onChange:r}){const i=e.placeholder||F1(s)||(za(n)?fr(n):""),c=e.hint||(s!==void 0?`Heredado: ${F1(s)}`:void 0);return e.kind==="boolean"?l.jsx("div",{className:"flex items-end pb-1",children:l.jsx(sn,{checked:n===!0,onChange:r,label:e.label})}):l.jsx(fe,{label:e.label,hint:c,children:e.kind==="select"?l.jsx(Ct,{value:String(n||""),onChange:r,placeholder:i||"(sin override)",options:[{value:"",label:i||"(sin override)"},...(e.options||[]).map(d=>({value:String(d.value),label:d.label}))]}):e.kind==="textarea"?l.jsx(Qt,{rows:4,value:String(n||""),placeholder:i,onChange:d=>r(d.target.value)}):l.jsx(Ce,{type:e.kind==="password"?"password":e.kind==="number"?"number":"text",value:String(za(n)?"":n||""),placeholder:e.kind==="password"&&za(n)?fr(n):e.kind==="password"&&za(s)?fr(s):i,onChange:d=>r(d.target.value)})})}function F1(e){return e==null||e===""?"":za(e)?fr(e):Array.isArray(e)?e.join(", "):typeof e=="object"?JSON.stringify(e):String(e)}const mz=[{key:"routing",label:"Overrides",description:".apc/config.json. Sólo valores propios del proyecto; vacío hereda global/effective.",fields:[{path:"route_to_agent",label:"Route to agent",placeholder:"master"},{path:"super_agent.model",label:"Super-agent model"},{path:"super_agent.permission_mode",label:"Permission mode",kind:"select",options:xh.map(e=>({value:e,label:e}))},{path:"super_agent.system",label:"Prompt extra",kind:"textarea"}]},{key:"telegram",label:"Telegram",fields:[{path:"telegram.route_to_agent",label:"Route to agent"},{path:"telegram.chat_id",label:"Chat ID"},{path:"telegram.bot_token",label:"Bot token",kind:"password"},{path:"telegram.respond_with_engine",label:"Responder con engine",kind:"boolean"}]},{key:"engines",label:"Engines",fields:[{path:"engines.ollama.base_url",label:"Ollama URL"},{path:"engines.anthropic.api_key",label:"Anthropic API key",kind:"password"},{path:"engines.openai.api_key",label:"OpenAI API key",kind:"password"},{path:"engines.groq.api_key",label:"Groq API key",kind:"password"},{path:"engines.openrouter.api_key",label:"OpenRouter API key",kind:"password"},{path:"engines.gemini.api_key",label:"Gemini API key",kind:"password"}]}],pz=[{key:"identity",label:"Proyecto",description:".apc/project.json. Metadata APC portable; no secrets, no runtime.",fields:[{path:"name",label:"Name"},{path:"version",label:"Version"},{path:"apf",label:"APC spec"},{path:"apx",label:"APX install state"},{path:"apx_id",label:"APX storage id"}]}];function gz({pid:e}){const n=rt(),s=Qe(`/projects/${e}/config`,()=>Qn.config.show(e));if(s.isLoading)return l.jsx(Je,{});if(!s.data)return l.jsx(lt,{children:C("project.config.no_data")});const r=async c=>{await Qn.apcProject.put(e,c),n.success(C("project.config.save_project")),s.mutate()},i=async c=>{await Qn.config.put(e,c),n.success(C("project.config.save_override")),s.mutate()};return l.jsx("div",{className:"space-y-6",children:l.jsx(He,{title:C("project.config.section_title"),description:C("project.config.section_desc"),children:l.jsxs(Xd,{defaultValue:"override",className:"space-y-4",children:[l.jsxs(Kd,{children:[l.jsx(Da,{value:"override",children:"Override"}),l.jsx(Da,{value:"project",children:"APC project"}),l.jsx(Da,{value:"effective",children:"Effective"})]}),l.jsx(La,{value:"override",children:l.jsx(Zg,{sections:mz,source:s.data.project_only,placeholderSource:s.data.effective,jsonTitle:s.data.project_config_path,jsonDescription:".apc/config.json. Overrides del proyecto.",onSaveFields:async(c,d)=>{await Qn.config.set(e,c),d.length&&await Qn.config.unset(e,d),n.success(C("project.config.save_fields_success")),s.mutate()},onSaveJson:i})}),l.jsx(La,{value:"project",children:l.jsx(Zg,{sections:pz,source:s.data.apc_project||{},jsonTitle:s.data.project_json_path,jsonDescription:".apc/project.json. Metadata APC portable.",onSaveFields:async(c,d)=>{await Qn.apcProject.set(e,hz(c),d),n.success(C("project.config.save_meta_success")),s.mutate()},onSaveJson:r})}),l.jsx(La,{value:"effective",children:l.jsxs("div",{className:"space-y-2",children:[l.jsx("p",{className:"text-xs text-muted-fg",children:C("project.config.effective_read")}),l.jsx("pre",{className:"max-h-96 overflow-auto rounded-lg border border-border bg-muted/40 p-3 text-xs",children:JSON.stringify(s.data.effective,null,2)})]})})]})})})}function hz(e){const n={};for(const[s,r]of Object.entries(vx(e)))za(r)||(n[s]=r);return n}const xz=["","es","en","pt","fr","it","de"],X1=e=>e.split(",").map(n=>n.trim()).filter(Boolean);function t2(e){return e.is_master?{gradient:"from-violet-600 to-indigo-600",Icon:ks}:{gradient:"from-slate-600 to-gray-600",Icon:vn}}function bz(e){const n=e.filter(d=>d.is_master),s=n.length===1?n[0]:null,r=d=>d.parent?d.parent:s&&!d.is_master&&d.slug!==s.slug?s.slug:null,i=new Map,c=[];for(const d of e){const f=r(d);f&&e.some(g=>g.slug===f)?(i.has(f)||i.set(f,[]),i.get(f).push(d)):c.push(d)}return{roots:c,childrenByParent:i}}function vz({pid:e}){const n=Ua();rt();const s=Qe(`/projects/${e}/agents`,()=>Jt.list(e)),[r,i]=v.useState("hierarchy"),[c,d]=v.useState(!1),[f,g]=v.useState(!1),m=s.data||[],h=S=>n(`/p/${e}/agents/${S}`),x=S=>n(S?`/p/${e}/chat?agent=${S}`:`/p/${e}/chat`),{roots:y,childrenByParent:w}=v.useMemo(()=>bz(m),[m]);return l.jsxs(He,{title:C("project.agents.title"),description:C("project.agents.subtitle_full"),action:l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsxs("div",{className:"flex rounded-lg border border-border p-0.5",children:[l.jsxs("button",{onClick:()=>i("hierarchy"),className:Ie("flex items-center gap-1 rounded-md px-2 py-1 text-xs",r==="hierarchy"?"bg-accent text-accent-fg":"text-muted-fg"),children:[l.jsx(mh,{size:13})," ",C("project.agents.hierarchy")]}),l.jsxs("button",{onClick:()=>i("list"),className:Ie("flex items-center gap-1 rounded-md px-2 py-1 text-xs",r==="list"?"bg-accent text-accent-fg":"text-muted-fg"),children:[l.jsx(XR,{size:13})," ",C("project.agents.list_view")]})]}),l.jsxs(he,{size:"sm",variant:"ghost",onClick:()=>g(!0),children:[l.jsx(oN,{size:13})," ",C("project.agents.import")]}),l.jsxs(he,{size:"sm",variant:"secondary",onClick:()=>x(),children:[l.jsx(Za,{size:13})," ",C("project.agents.chat")]}),l.jsxs(he,{size:"sm",variant:"primary","data-testid":"agent-new",onClick:()=>d(!0),children:[l.jsx(Rn,{size:14})," ",C("project.agents.new")]})]}),children:[s.isLoading&&l.jsx(Je,{}),!s.isLoading&&m.length===0&&l.jsx(lt,{children:C("project.agents.empty_text")}),!s.isLoading&&m.length>0&&(r==="hierarchy"?l.jsx(_z,{roots:y,childrenByParent:w,onOpen:h,onChat:x}):l.jsx(jz,{agents:m,onOpen:h,onChat:x})),l.jsx(Sz,{open:c,pid:e,agents:m,onClose:()=>d(!1),onCreated:()=>{d(!1),s.mutate()}}),l.jsx(yz,{open:f,pid:e,existing:m.map(S=>S.slug),onClose:()=>g(!1),onImported:()=>s.mutate()})]})}function yz({open:e,onClose:n,onImported:s,pid:r,existing:i}){const c=rt(),d=Qe(e?"/agents/vault":null,()=>Jt.vault()),[f,g]=v.useState(""),m=d.data||[],h=async x=>{g(x);try{await Jt.import(r,x),c.success(C("project.agents.import_success",{slug:x})),s()}catch(y){c.error(y.message)}finally{g("")}};return l.jsxs(ma,{open:e,onClose:n,title:C("project.agents.import_title"),description:C("project.agents.import_desc"),size:"lg",footer:l.jsx(he,{variant:"ghost",onClick:n,children:C("common.close")}),children:[d.isLoading&&l.jsx(Je,{}),!d.isLoading&&m.length===0&&l.jsx(lt,{children:C("project.agents.import_empty")}),l.jsx("ul",{className:"space-y-2",children:m.map(x=>{const y=i.includes(x.slug);return l.jsxs("li",{className:"flex items-center gap-3 rounded-lg border border-border bg-muted/30 p-3",children:[l.jsx(vn,{size:16,className:"shrink-0 text-muted-fg"}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsx("span",{className:"text-sm font-medium",children:x.slug}),x.is_master&&l.jsxs(Ue,{tone:"success",children:[l.jsx(ks,{size:9})," ",C("project.agents.orchestrator")]}),x.model&&l.jsx(Ue,{tone:"info",children:x.model})]}),x.description&&l.jsx("p",{className:"truncate text-xs text-muted-fg",children:x.description})]}),l.jsx(he,{size:"sm",variant:"primary",disabled:y||f===x.slug,loading:f===x.slug,onClick:()=>h(x.slug),children:C(y?"project.agents.import_already":"project.agents.import_btn")})]},x.slug)})})]})}function _z({roots:e,childrenByParent:n,onOpen:s,onChat:r}){return l.jsx("div",{className:"space-y-8",children:e.map(i=>{const c=n.get(i.slug)||[];return l.jsxs("div",{className:"flex flex-col items-center",children:[l.jsx(Yp,{agent:i,onOpen:s,onChat:r,wide:!0}),c.length>0&&l.jsxs(l.Fragment,{children:[l.jsx("div",{className:"h-5 w-px bg-border"}),l.jsx("div",{className:"flex flex-wrap items-start justify-center gap-4 border-t border-border pt-5",children:c.map(d=>l.jsxs("div",{className:"flex flex-col items-center",children:[l.jsx(Yp,{agent:d,onOpen:s,onChat:r}),(n.get(d.slug)||[]).length>0&&l.jsxs(l.Fragment,{children:[l.jsx("div",{className:"h-4 w-px bg-border"}),l.jsx("div",{className:"flex flex-wrap justify-center gap-3 border-t border-border pt-4",children:(n.get(d.slug)||[]).map(f=>l.jsx(Yp,{agent:f,onOpen:s,onChat:r,compact:!0},f.slug))})]})]},d.slug))})]})]},i.slug)})})}function Yp({agent:e,onOpen:n,onChat:s,wide:r,compact:i}){const{gradient:c,Icon:d}=t2(e);return l.jsxs("div",{"data-testid":`agent-card-${e.slug}`,className:Ie("cursor-pointer rounded-xl border border-border bg-card p-3 transition-colors hover:border-muted-fg/50",r?"w-64":i?"w-44":"w-52"),onClick:()=>n(e.slug),children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("div",{className:Ie("flex size-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br",c),children:l.jsx(d,{className:"size-4 text-white"})}),l.jsx("span",{className:"truncate text-sm font-semibold",children:e.slug})]}),l.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-1",children:[e.is_master&&l.jsxs(Ue,{tone:"success",children:[l.jsx(ks,{size:9})," ",C("project.agents.orchestrator")]}),e.role&&l.jsx(Ue,{children:e.role}),e.model&&!i&&l.jsx(Ue,{tone:"info",children:e.model})]}),l.jsxs("div",{className:"mt-2 flex items-center gap-3 border-t border-border pt-2 text-xs text-muted-fg",onClick:f=>f.stopPropagation(),children:[l.jsxs("button",{onClick:()=>n(e.slug),className:"flex items-center gap-1 hover:text-foreground",children:[l.jsx(fj,{size:12})," ",C("project.agents.view")]}),l.jsxs("button",{onClick:()=>s(e.slug),className:"flex items-center gap-1 text-emerald-500 hover:text-emerald-400",children:[l.jsx(Za,{size:12})," ",C("project.agents.chat")]})]})]})}function jz({agents:e,onOpen:n,onChat:s}){const r=[...e].sort((i,c)=>+!!c.is_master-+!!i.is_master||i.slug.localeCompare(c.slug));return l.jsx("div",{className:"space-y-2",children:r.map(i=>{const{gradient:c,Icon:d}=t2(i);return l.jsxs("div",{"data-testid":`agent-card-${i.slug}`,className:"flex cursor-pointer items-center gap-4 rounded-xl border border-border bg-muted/30 p-3 hover:border-muted-fg/50",onClick:()=>n(i.slug),children:[l.jsx("div",{className:Ie("flex size-9 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br",c),children:l.jsx(d,{className:"size-4 text-white"})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsx("span",{className:"text-sm font-semibold",children:i.slug}),i.is_master&&l.jsxs(Ue,{tone:"success",children:[l.jsx(ks,{size:10})," ",C("project.agents.orchestrator")]}),i.role&&l.jsx(Ue,{children:i.role}),i.model&&l.jsx(Ue,{tone:"info",children:i.model}),i.parent&&l.jsxs("span",{className:"text-[10px] text-violet-400",children:["↳ ",i.parent]})]}),i.description&&l.jsx("p",{className:"mt-1 truncate text-xs text-muted-fg",children:i.description}),l.jsxs("div",{className:"mt-1 flex flex-wrap gap-1",children:[i.skills?.map(f=>l.jsxs("span",{className:"inline-flex items-center gap-0.5 rounded bg-muted px-1 py-0.5 text-[9px] text-muted-fg",children:[l.jsx(ol,{size:9})," ",f]},f)),i.tools?.map(f=>l.jsxs("span",{className:"inline-flex items-center gap-0.5 rounded bg-muted px-1 py-0.5 text-[9px] text-muted-fg",children:[l.jsx(ll,{size:9})," ",f]},f))]})]}),l.jsxs("div",{className:"flex shrink-0 items-center gap-3 text-xs text-muted-fg",onClick:f=>f.stopPropagation(),children:[l.jsxs("button",{onClick:()=>n(i.slug),className:"flex items-center gap-1 hover:text-foreground",children:[l.jsx(fj,{size:12})," ",C("project.agents.view")]}),l.jsxs("button",{onClick:()=>s(i.slug),className:"flex items-center gap-1 text-emerald-500 hover:text-emerald-400",children:[l.jsx(Za,{size:12})," ",C("project.agents.chat")]})]})]},i.slug)})})}function Sz({open:e,onClose:n,onCreated:s,pid:r,agents:i}){const c=rt(),[d,f]=v.useState(""),[g,m]=v.useState(""),[h,x]=v.useState(""),[y,w]=v.useState(""),[S,_]=v.useState(""),[j,E]=v.useState(""),[k,N]=v.useState(""),[R,A]=v.useState(!1),[M,O]=v.useState(""),[U,I]=v.useState(!1),B=()=>{f(""),m(""),x(""),w(""),_(""),E(""),N(""),A(!1),O("")},L=async()=>{if(!/^[a-z][a-z0-9_-]*$/.test(d)){c.error(C("project.agents.slug_invalid"));return}I(!0);try{await Jt.create(r,{slug:d,role:g||void 0,model:h||void 0,language:y||void 0,description:S||void 0,skills:X1(j),tools:X1(k),is_master:R,parent:M||void 0}),c.success(C("project.agents.create_success",{slug:d})),s(),B()}catch(D){c.error(D?.message||C("project.agents.create_error"))}finally{I(!1)}};return l.jsx(ma,{open:e,onClose:n,title:C("project.agents.new_title"),description:C("project.agents.new_desc"),size:"lg",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:U,children:C("common.cancel")}),l.jsx(he,{variant:"primary","data-testid":"agent-create-submit",onClick:L,loading:U,children:C("common.create")})]}),children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agents.slug_label"),children:l.jsx(Ce,{autoFocus:!0,"data-testid":"agent-slug",value:d,onChange:D=>f(D.target.value),placeholder:C("project.agents.slug_ph")})}),l.jsx(fe,{label:C("project.agents.role_label"),children:l.jsx(Ce,{value:g,onChange:D=>m(D.target.value),placeholder:C("project.agents.role_ph")})})]}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agents.model_label"),hint:C("project.agents.model_hint"),children:l.jsx(Ce,{value:h,onChange:D=>x(D.target.value)})}),l.jsx(fe,{label:C("project.agents.lang_label"),children:l.jsx(Ct,{value:y,onChange:w,options:xz.map(D=>({value:D,label:D||"—"}))})})]}),l.jsx(fe,{label:C("project.agents.desc_label"),children:l.jsx(Qt,{rows:2,value:S,onChange:D=>_(D.target.value),placeholder:C("project.agents.desc_ph")})}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agents.skills_label"),children:l.jsx(Ce,{value:j,onChange:D=>E(D.target.value),placeholder:C("project.agents.skills_ph")})}),l.jsx(fe,{label:C("project.agents.tools_label"),children:l.jsx(Ce,{value:k,onChange:D=>N(D.target.value),placeholder:C("project.agents.tools_ph")})})]}),l.jsxs("div",{className:"grid grid-cols-2 items-end gap-3",children:[l.jsx(fe,{label:C("project.agents.parent_label"),hint:C("project.agents.parent_hint"),children:l.jsx(Ct,{value:M,onChange:O,placeholder:C("project.agents.none_parent"),options:[{value:"",label:C("project.agents.none_parent")},...i.filter(D=>D.slug!==d).map(D=>({value:D.slug,label:D.slug}))]})}),l.jsx(sn,{checked:R,onChange:A,label:C("project.agents.master_label")})]})]})})}function Lu(e){return e.split(`
528
528
  `).map(n=>n.trim()).filter(Boolean)}const $r={exec_agent:{label:"Agente del proyecto",desc:"Ejecuta un agente del proyecto con un prompt. Elegís cuál.",icon:vn},super_agent:{label:"Super-agente",desc:"Llama al super-agente de APX con un prompt.",icon:ks},telegram:{label:"Telegram",desc:"Manda un mensaje fijo a un canal de Telegram. No usa modelo ni agente.",icon:Za},shell:{label:"Shell",desc:"Corre un comando de shell. Sin prompt ni pre/post — el comando es la acción.",icon:Pi},heartbeat:{label:"Latido (heartbeat)",desc:"No hace nada salvo escribir una línea en los logs cada vez que corre. Sirve para confirmar que el scheduler está vivo. Si no sabés si lo necesitás, no lo uses.",icon:Go}},wz=Object.keys($r).map(e=>({value:e,label:$r[e].label,description:$r[e].desc,icon:$r[e].icon}));function n2(e){if(!e)return"—";if(e.startsWith("every:")){const n=e.slice(6),s=n.match(/^(\d+)(s|m|h|d)$/);if(s){const r=s[1],i={s:"segundos",m:"minutos",h:"horas",d:"días"}[s[2]]||s[2];return`cada ${r} ${i}`}return`cada ${n}`}return e.startsWith("once:")?`una vez · ${new Date(e.slice(5)).toLocaleString()}`:e.startsWith("cron ")?`cron · ${e.slice(5)}`:e}const Cz=[{label:"cada 10 min",value:"every:10m"},{label:"cada hora",value:"every:1h"},{label:"diario 9am",value:"cron 0 9 * * *"},{label:"días hábiles 9am",value:"cron 0 9 * * 1-5"}],Ez=[{v:"{{pre_output}}",where:"prompt",desc:"Salida de los pre-commands, inyectada en el prompt."},{v:"$APX_LLM_OUTPUT",where:"post",desc:"Respuesta del agente / super-agente."},{v:"$APX_STATUS",where:"post",desc:"ok | error."},{v:"$APX_SKIPPED",where:"post",desc:"1 si la acción se salteó."},{v:"$APX_PRE_OUTPUT",where:"post",desc:"Salida de los pre-commands."},{v:"$APX_PRE_OUTPUT_FILE",where:"post",desc:"Archivo con la salida de pre (para outputs grandes)."},{v:"$APX_PRE_EXIT",where:"post",desc:"Exit code de los pre-commands."},{v:"$APX_ROUTINE",where:"pre/post",desc:"Nombre de la rutina."}];function kz(e,n){switch(e){case"exec_agent":return n.agent?`Ejecuta el agente "${n.agent}"`:"Ejecuta un agente (falta elegir)";case"super_agent":return"Llama al super-agente";case"telegram":return`Envía Telegram a "${n.channel||"default"}"`;case"shell":return n.command?`Corre: ${String(n.command).slice(0,40)}`:"Corre un comando shell";case"heartbeat":return"Deja un latido en logs"}}function Rz({pid:e}){const n=rt(),s=Qe(`/projects/${e}/routines`,()=>or.list(e)),[r,i]=v.useState(null),c=async g=>{try{await(g.enabled?or.disable:or.enable)(e,g.name),s.mutate()}catch(m){n.error(m?.message||C("project.routines.toggle_error"))}},d=async g=>{try{await or.run(e,g.name),n.success(C("project.routines.run_success",{name:g.name}))}catch(m){n.error(m?.message||C("project.routines.run_error"))}},f=async g=>{if(confirm(C("project.routines.delete_confirm",{name:g.name})))try{await or.remove(e,g.name),n.success(C("project.routines.delete_success")),s.mutate()}catch(m){n.error(m?.message||C("project.routines.delete_error"))}};return l.jsxs(He,{title:C("project.routines.title"),description:C("project.routines.subtitle"),action:l.jsxs(he,{size:"sm",variant:"primary",onClick:()=>i({kind:"super_agent",schedule:"every:10m",enabled:!0}),children:[l.jsx(Rn,{size:14})," ",C("project.routines.new_btn")]}),children:[s.isLoading&&l.jsx(Je,{}),!s.isLoading&&(s.data?.length??0)===0&&l.jsx(lt,{children:C("project.routines.empty")}),l.jsx("ul",{className:"space-y-2 text-sm",children:(s.data||[]).map(g=>{const m=$r[g.kind],h=m?.icon||Bi,x=g.last_status==="error";return l.jsxs("li",{className:"cursor-pointer rounded-xl border border-border bg-muted/30 p-3 hover:border-muted-fg/50",onClick:()=>i({...g}),children:[l.jsxs("div",{className:"flex items-center justify-between gap-3",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:Ie("flex size-7 items-center justify-center rounded-lg",g.enabled?"bg-emerald-500/15 text-emerald-400":"bg-muted text-muted-fg"),children:l.jsx(h,{size:14})}),l.jsx("span",{className:"font-medium",children:g.name}),l.jsx(Ue,{tone:g.kind==="shell"?"warning":"info",children:m?.label||g.kind}),!g.enabled&&l.jsx(Ue,{tone:"muted",children:C("project.routines.paused")})]}),l.jsxs("div",{className:"flex items-center gap-2",onClick:y=>y.stopPropagation(),children:[l.jsx(sn,{checked:g.enabled,onChange:()=>c(g)}),l.jsxs(he,{size:"sm",variant:"secondary",onClick:()=>d(g),children:[l.jsx(pj,{size:13})," Run"]}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>f(g),children:l.jsx(Ms,{size:13})})]})]}),l.jsxs("div",{className:"mt-1.5 flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-fg",children:[l.jsxs("span",{children:["⏱ ",n2(g.schedule)]}),l.jsx("span",{children:kz(g.kind,g.spec||{})}),g.next_run_at&&l.jsxs("span",{children:[C("project.routines.next_run")," ",new Date(g.next_run_at).toLocaleString()]}),l.jsxs("span",{className:Ie(g.last_status==="ok"&&"text-emerald-500",x&&"text-destructive"),children:["última: ",g.last_status||"—"]})]}),g.last_error&&l.jsx("div",{className:"mt-2 rounded-md bg-destructive/10 px-2 py-1 text-xs text-destructive",children:g.last_error})]},g.name)})}),l.jsx(Nz,{draft:r,onClose:()=>i(null),onSaved:()=>{i(null),s.mutate()},pid:e})]})}function Nz({draft:e,onClose:n,onSaved:s,pid:r}){const i=rt(),c=Qe(e?`/projects/${r}/agents`:null,()=>Jt.list(r)),[d,f]=v.useState(!1),[g,m]=v.useState(""),[h,x]=v.useState("super_agent"),[y,w]=v.useState("every:10m"),[S,_]=v.useState(!0),[j,E]=v.useState(""),[k,N]=v.useState(""),[R,A]=v.useState("default"),[M,O]=v.useState(""),[U,I]=v.useState(""),[B,L]=v.useState(""),[D,q]=v.useState("heartbeat"),[F,Z]=v.useState(""),[H,G]=v.useState(""),[Q,V]=v.useState("");v.useEffect(()=>{if(!e)return;const te=e.spec&&typeof e.spec=="object"?e.spec:{};m(e.name||""),x(e.kind||"super_agent"),w(e.schedule||"every:10m"),_(e.enabled??!0),E(te.agent||""),N(te.prompt||""),A(te.channel||"default"),O(te.chat_id?String(te.chat_id):""),I(te.text||""),L(te.command||""),q(te.channel||"heartbeat"),Z(te.message||""),G((e.pre_commands||[]).join(`
529
529
  `)),V((e.post_commands||[]).join(`
530
530
  `))},[e]);const Y=()=>{switch(h){case"exec_agent":return{agent:j,prompt:k};case"super_agent":return{prompt:k};case"telegram":return{channel:R,...M?{chat_id:M}:{},text:U};case"shell":return{command:B};case"heartbeat":return{channel:D,message:F}}},P=async()=>{if(!g){i.error(C("project.routines.name_required"));return}f(!0);try{const te=h==="exec_agent"||h==="super_agent";await or.upsert(r,{name:g,kind:h,schedule:y,enabled:S,spec:Y(),pre_commands:te?Lu(H):[],post_commands:te?Lu(Q):[]}),i.success(C("project.routines.saved")),s()}catch(te){i.error(te?.message||C("project.routines.save_error"))}finally{f(!1)}},K=h==="exec_agent"||h==="super_agent",$=K?Lu(H):[],W=K?Lu(Q):[],ce=(()=>{switch(h){case"exec_agent":return j?`Agente "${j}" responde el prompt`:"Agente (elegí cuál) responde el prompt";case"super_agent":return"El super-agente responde el prompt";case"telegram":return`Manda Telegram al canal "${R}"`;case"shell":return B?`Corre: ${B.slice(0,48)}`:"Corre el comando shell";case"heartbeat":return"Deja un latido en logs"}})(),ie=K,oe=$r[h].icon,ue=[...$.map((te,Ne)=>({id:`pre-${Ne}`,icon:Pi,label:"Pre",detail:te,action:!1})),{id:"action",icon:oe,label:ce,detail:ie&&k?k.slice(0,90):void 0,action:!0},...W.map((te,Ne)=>({id:`post-${Ne}`,icon:Pi,label:"Post",detail:te,action:!1}))];return l.jsx(ma,{open:!!e,onClose:n,title:e?.name?C("project.routines.edit_title",{name:e.name}):C("project.routines.new_title"),description:C("project.routines.dialog_desc"),size:"xl",footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:d,children:C("common.cancel")}),l.jsx(he,{variant:"primary",onClick:P,loading:d,children:C("common.save")})]}),children:l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-border bg-muted/20 px-3 py-2",children:[l.jsx(sn,{checked:S,onChange:_,label:C("project.routines.enabled_label")}),l.jsx("span",{className:"text-[11px] text-muted-fg",children:C(S?"project.routines.enabled_hint":"project.routines.disabled_hint")})]}),l.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[l.jsxs("div",{className:"space-y-3",children:[l.jsx(fe,{label:C("project.routines.name_field"),hint:e?.name?C("project.routines.name_no_edit"):void 0,children:l.jsx(Ce,{value:g,disabled:!!e?.name,onChange:te=>m(te.target.value),placeholder:"resumen-diario"})}),l.jsx(fe,{label:C("project.routines.kind_field"),children:l.jsx(Ct,{value:h,onChange:te=>x(te),options:wz})}),l.jsx("p",{className:"-mt-1 text-[11px] text-muted-fg",children:$r[h].desc}),h==="exec_agent"&&l.jsx(fe,{label:C("project.routines.agent_field"),hint:C("project.routines.agent_hint"),children:l.jsx(Ct,{value:j,onChange:E,placeholder:c.isLoading?C("project.routines.agent_loading"):C("project.routines.agent_pick"),options:(c.data||[]).map(te=>({value:te.slug,label:te.slug,description:[te.role,te.model].filter(Boolean).join(" · ")||void 0}))})}),l.jsx(fe,{label:C("project.routines.schedule_field"),hint:C("project.routines.schedule_hint"),children:l.jsxs("div",{className:"space-y-2",children:[l.jsxs("div",{className:"flex flex-wrap gap-1",children:[Cz.map(te=>l.jsx("button",{type:"button",onClick:()=>w(te.value),className:Ie("rounded-md border px-2 py-0.5 text-[11px]",y===te.value?"border-emerald-500/50 text-emerald-400":"border-border text-muted-fg hover:text-foreground"),children:te.label},te.value)),l.jsx("button",{type:"button",onClick:()=>w("manual"),className:Ie("rounded-md border px-2 py-0.5 text-[11px]",y==="manual"?"border-emerald-500/50 text-emerald-400":"border-border text-muted-fg hover:text-foreground"),children:"Manual"})]}),l.jsx(Ce,{value:y,onChange:te=>w(te.target.value),placeholder:"every:10m · cron 0 9 * * 1-5 · once:ISO · manual"})]})})]}),l.jsxs("div",{className:"space-y-3",children:[K&&l.jsx(fe,{label:C("project.routines.pre_field"),hint:C("project.routines.pre_hint"),children:l.jsx(Qt,{rows:2,className:"font-mono text-xs",value:H,onChange:te=>G(te.target.value),placeholder:"curl -s https://wttr.in/Bariloche"})}),h==="exec_agent"&&l.jsx(fe,{label:C("project.routines.prompt_exec"),children:l.jsx(Qt,{rows:4,value:k,onChange:te=>N(te.target.value),placeholder:C("project.routines.prompt_exec_ph")})}),h==="super_agent"&&l.jsx(fe,{label:C("project.routines.prompt_super"),children:l.jsx(Qt,{rows:4,value:k,onChange:te=>N(te.target.value),placeholder:C("project.routines.prompt_super_ph")})}),h==="telegram"&&l.jsxs(l.Fragment,{children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.routines.tg_channel"),children:l.jsx(Ce,{value:R,onChange:te=>A(te.target.value),placeholder:"default"})}),l.jsx(fe,{label:C("project.routines.tg_chat_id"),children:l.jsx(Ce,{value:M,onChange:te=>O(te.target.value),placeholder:"(usa el del canal)"})})]}),l.jsx(fe,{label:C("project.routines.tg_text"),hint:C("project.routines.tg_text_hint"),children:l.jsx(Qt,{rows:8,value:U,onChange:te=>I(te.target.value),placeholder:"mensaje a enviar"})})]}),h==="shell"&&l.jsx(fe,{label:C("project.routines.shell_field"),hint:C("project.routines.shell_hint"),children:l.jsx(Qt,{rows:11,className:"font-mono text-xs",value:B,onChange:te=>L(te.target.value),placeholder:"cd /repo && git pull && npm test"})}),h==="heartbeat"&&l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.routines.hb_channel"),children:l.jsx(Ce,{value:D,onChange:te=>q(te.target.value),placeholder:"heartbeat"})}),l.jsx(fe,{label:C("project.routines.hb_message"),children:l.jsx(Ce,{value:F,onChange:te=>Z(te.target.value),placeholder:"sigo vivo"})})]}),K&&l.jsx(fe,{label:C("project.routines.post_field"),hint:C("project.routines.post_hint"),children:l.jsx(Qt,{rows:2,className:"font-mono text-xs",value:Q,onChange:te=>V(te.target.value),placeholder:'apx telegram send "$APX_LLM_OUTPUT"'})})]})]}),l.jsxs("div",{className:"rounded-lg border border-border bg-muted/10 p-3",children:[l.jsx("div",{className:"mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-muted-fg",children:C("project.routines.vars_title")}),l.jsx("div",{className:"flex flex-wrap gap-1.5",children:Ez.map(te=>l.jsxs("span",{title:te.desc,className:"inline-flex items-center gap-1 rounded-md border border-border bg-card px-1.5 py-0.5 font-mono text-[10px]",children:[te.v,l.jsxs("span",{className:"not-italic text-muted-fg",children:["· ",te.where]})]},te.v))})]}),l.jsxs("div",{className:"rounded-lg border border-border bg-muted/20 p-3",children:[l.jsxs("div",{className:"mb-2 text-xs font-semibold text-muted-fg",children:[C("project.routines.what_happens")," ",l.jsxs("span",{className:"font-normal text-muted-fg",children:["· ⏱ ",n2(y)]})]}),l.jsx("div",{className:"flex flex-wrap items-stretch gap-2",children:ue.map((te,Ne)=>l.jsxs("div",{className:"flex items-stretch gap-2",children:[l.jsxs("div",{className:Ie("flex max-w-[240px] flex-col gap-1 rounded-lg border px-2.5 py-2",te.action?"border-emerald-500/40 bg-emerald-500/5":"border-border bg-card"),children:[l.jsxs("div",{className:Ie("flex items-center gap-1.5 text-[11px] font-medium",te.action?"text-emerald-400":"text-muted-fg"),children:[l.jsx(te.icon,{size:12})," ",te.label]}),te.detail&&l.jsx("div",{className:"line-clamp-2 font-mono text-[10px] text-muted-fg",children:te.detail})]}),Ne<ue.length-1&&l.jsx(ij,{size:14,className:"shrink-0 self-center text-muted-fg"})]},te.id))})]})]})})}function Tz({pid:e}){const[n,s]=v.useState("open"),r=rt(),i=Qe(`/projects/${e}/tasks?state=${n}`,()=>lr.list(e,n),{dedupingInterval:0,revalidateOnFocus:!0}),[c,d]=v.useState(""),[f,g]=v.useState(!1),m=async()=>{if(c.trim()){g(!0);try{await lr.add(e,{title:c.trim()}),d(""),r.success(C("project.tasks.created")),i.mutate()}catch(x){r.error(x?.message||C("project.tasks.create_error"))}finally{g(!1)}}},h=async(x,y)=>{try{await x(),r.success(y),i.mutate()}catch(w){r.error(w?.message||C("common.error_generic"))}};return l.jsxs(He,{title:C("project.tasks.title"),description:C("project.tasks.subtitle"),action:l.jsx("div",{className:"flex gap-1",children:["open","done","dropped"].map(x=>l.jsx(he,{size:"sm","data-testid":`task-filter-${x}`,variant:n===x?"primary":"ghost",onClick:()=>s(x),children:x},x))}),children:[l.jsxs("div",{className:"mb-4 flex items-end gap-2",children:[l.jsx(fe,{label:C("project.tasks.add_label"),children:l.jsx(Ce,{"data-testid":"task-input",placeholder:C("project.tasks.add_placeholder"),value:c,onChange:x=>d(x.target.value),onKeyDown:x=>{x.key==="Enter"&&m()}})}),l.jsxs(he,{variant:"primary","data-testid":"task-add",onClick:m,loading:f,children:[l.jsx(Rn,{size:14})," ",C("project.tasks.add")]})]}),i.isLoading&&l.jsx(Je,{}),!i.isLoading&&(i.data?.length??0)===0&&l.jsxs(lt,{children:[n==="open"?C("project.tasks.empty_open"):C("project.tasks.empty",{state:n})," ",l.jsx("code",{children:'apx task add "…"'})]}),l.jsx("ul",{className:"space-y-2 text-sm","data-testid":"task-list",children:(i.data||[]).map(x=>l.jsxs("li",{"data-testid":`task-${x.id}`,className:"flex items-start gap-3 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx("span",{className:"mt-0.5 font-mono text-[10px] text-muted-fg",children:x.id}),l.jsxs("div",{className:"flex-1",children:[l.jsx("div",{className:"font-medium",children:x.title}),l.jsxs("div",{className:"mt-0.5 flex flex-wrap items-center gap-2 text-xs text-muted-fg",children:[x.tags?.map(y=>l.jsxs(Ue,{children:["#",y]},y)),x.agent&&l.jsxs(Ue,{tone:"info",children:["@",x.agent]}),x.source&&l.jsxs("span",{children:[C("project.tasks.via")," ",x.source]}),x.due&&l.jsxs("span",{children:[C("project.tasks.due")," ",x.due]})]})]}),l.jsxs("div",{className:"flex gap-1",children:[n==="open"&&l.jsxs(l.Fragment,{children:[l.jsx(he,{size:"sm",variant:"secondary","aria-label":C("project.tasks.aria_done"),"data-testid":`task-done-${x.id}`,onClick:()=>h(()=>lr.done(e,x.id),C("project.tasks.done")),children:l.jsx(Li,{size:13})}),l.jsx(he,{size:"sm",variant:"destructive","aria-label":C("project.tasks.aria_drop"),"data-testid":`task-drop-${x.id}`,onClick:()=>h(()=>lr.drop(e,x.id),C("project.tasks.drop")),children:l.jsx(Ms,{size:13})})]}),n!=="open"&&l.jsx(he,{size:"sm",variant:"ghost","aria-label":C("project.tasks.aria_reopen"),"data-testid":`task-reopen-${x.id}`,onClick:()=>h(()=>lr.reopen(e,x.id),C("project.tasks.reopen")),children:l.jsx(gj,{size:13})})]})]},x.id))})]})}function Az({pid:e}){const n=rt(),s=Qe(`/projects/${e}/mcps`,()=>Ti.list(e)),r=Qe(`/projects/${e}/mcps/check`,()=>Ti.check(e)),[i,c]=v.useState(!1),d=async(f,g)=>{if(confirm(C("project.mcps.delete_confirm",{name:f,scope:g})))try{await Ti.remove(e,f,g),n.success(C("project.mcps.removed")),s.mutate()}catch(m){n.error(m?.message||C("common.error_generic"))}};return l.jsxs(He,{title:C("project.mcps.title"),description:C("project.mcps.subtitle"),action:l.jsxs(he,{size:"sm",variant:"primary",onClick:()=>c(!0),children:[l.jsx(Rn,{size:14})," ",C("project.mcps.new")]}),children:[r.data?.conflicts?.length?l.jsx("div",{className:"mb-3 rounded-md border border-amber-500/40 bg-amber-500/10 p-2 text-xs",children:C("project.mcps.conflicts",{names:r.data.conflicts.map(f=>f.name).join(", ")})}):null,s.isLoading&&l.jsx(Je,{}),!s.isLoading&&(s.data?.length??0)===0&&l.jsx(lt,{children:C("project.mcps.empty")}),l.jsx("ul",{className:"space-y-2 text-sm",children:(s.data||[]).map(f=>l.jsxs("li",{className:"flex items-center gap-3 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx("span",{className:"font-medium",children:f.name}),l.jsx(Ue,{tone:"info",children:f.source}),l.jsxs("span",{className:"ml-auto text-xs text-muted-fg",children:[f.transport," · ",f.enabled===!1?"disabled":"enabled"]}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>d(f.name,f.source),children:l.jsx(Ms,{size:13})})]},`${f.source}-${f.name}`))}),l.jsx(Mz,{open:i,onClose:()=>c(!1),pid:e,onCreated:()=>{c(!1),s.mutate()}})]})}function Mz({open:e,onClose:n,pid:s,onCreated:r}){const i=rt(),[c,d]=v.useState(!1),[f,g]=v.useState("shared"),[m,h]=v.useState(""),[x,y]=v.useState("stdio"),[w,S]=v.useState(""),[_,j]=v.useState(""),[E,k]=v.useState(""),[N,R]=v.useState(""),[A,M]=v.useState(!0),O=async()=>{if(!m){i.error(C("project.mcps.name_required"));return}d(!0);try{let U;if(N.trim())try{U=JSON.parse(N)}catch{i.error(C("project.mcps.env_invalid")),d(!1);return}const I=x==="stdio"?{name:m,command:w,args:_?_.split(/\s+/):void 0,env:U,enabled:A}:{name:m,url:E,enabled:A};await Ti.add(s,f,I),i.success(C("project.mcps.added")),h(""),S(""),j(""),k(""),R(""),r()}catch(U){i.error(U?.message||C("common.error_generic"))}finally{d(!1)}};return l.jsx(ma,{open:e,onClose:n,title:C("project.mcps.new_title"),description:C("project.mcps.new_desc"),footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:c,children:C("common.cancel")}),l.jsx(he,{variant:"primary",onClick:O,loading:c,children:C("project.mcps.add_btn")})]}),children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.mcps.scope_label"),children:l.jsx(Ct,{value:f,onChange:U=>g(U),options:[{value:"shared",label:"shared",description:".apc/mcps.json"},{value:"runtime",label:"runtime",description:"~/.apx, con secrets"},{value:"global",label:"global",description:"estilo ~/.claude/mcp.json"}]})}),l.jsx(fe,{label:C("project.mcps.transport_label"),children:l.jsx(Ct,{value:x,onChange:U=>y(U),options:[{value:"stdio",label:"stdio",description:"command"},{value:"http",label:"http",description:"url"}]})})]}),l.jsx(fe,{label:C("project.mcps.name_label"),children:l.jsx(Ce,{value:m,onChange:U=>h(U.target.value),placeholder:C("project.mcps.name_ph")})}),x==="stdio"?l.jsxs(l.Fragment,{children:[l.jsx(fe,{label:C("project.mcps.cmd_label"),children:l.jsx(Ce,{value:w,onChange:U=>S(U.target.value),placeholder:C("project.mcps.cmd_ph")})}),l.jsx(fe,{label:C("project.mcps.args_label"),hint:C("project.mcps.args_hint"),children:l.jsx(Ce,{value:_,onChange:U=>j(U.target.value),placeholder:C("project.mcps.args_ph")})}),l.jsx(fe,{label:C("project.mcps.env_label"),hint:'{"FOO":"bar"}',children:l.jsx(Qt,{rows:3,className:"font-mono text-xs",value:N,onChange:U=>R(U.target.value)})})]}):l.jsx(fe,{label:C("project.mcps.url_label"),children:l.jsx(Ce,{value:E,onChange:U=>k(U.target.value),placeholder:C("project.mcps.url_ph")})}),l.jsx(sn,{checked:A,onChange:M,label:C("project.mcps.enabled_label")})]})})}function Oz({pid:e}){const n=Qe(`/projects/${e}/agents`,()=>Jt.list(e)),[s,r]=v.useState(null),[i,c]=v.useState(null);return l.jsxs(He,{title:C("project.threads.title"),description:C("project.threads.subtitle"),children:[n.isLoading&&l.jsx(Je,{}),!n.isLoading&&(n.data?.length??0)===0&&l.jsx(lt,{children:C("project.threads.no_agents")}),l.jsxs("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-3",children:[l.jsx("ul",{className:"space-y-1 md:col-span-1",children:(n.data||[]).map(d=>l.jsx("li",{children:l.jsxs("button",{type:"button",onClick:()=>r(d.slug),className:Ie("flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-sm",s===d.slug?"bg-accent text-accent-fg":"text-foreground hover:bg-accent/60"),children:[l.jsx("span",{children:d.slug}),d.model&&l.jsx(Ue,{tone:"info",children:d.model})]})},d.slug))}),l.jsx("div",{className:"md:col-span-2",children:s?l.jsx(zz,{pid:e,slug:s,onOpen:c}):l.jsx(lt,{children:C("project.threads.pick")})})]}),s&&i&&l.jsx(Dz,{pid:e,slug:s,id:i,onClose:()=>c(null)})]})}function zz({pid:e,slug:n,onOpen:s}){const r=Qe(`/projects/${e}/agents/${n}/conversations`,()=>nx.list(e,n));return r.isLoading?l.jsx(Je,{}):r.data?.length?l.jsx("ul",{className:"space-y-1 text-sm",children:r.data.map(i=>l.jsxs("li",{className:"cursor-pointer rounded-md border border-border bg-muted/30 px-3 py-2 hover:bg-accent/40",onClick:()=>s(i.id),children:[l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsx("span",{className:"font-medium",children:i.title||i.filename}),l.jsx("span",{className:"text-xs text-muted-fg",children:new Date(i.started_at).toLocaleString()})]}),l.jsxs("div",{className:"mt-0.5 text-xs text-muted-fg",children:[i.channel&&l.jsxs(l.Fragment,{children:[C("project.threads.via")," ",i.channel," · "]}),i.messages??0," ",C("project.threads.messages")]})]},i.id))}):l.jsx(lt,{children:C("project.threads.empty",{slug:n})})}function Dz({pid:e,slug:n,id:s,onClose:r}){const i=Qe(`/projects/${e}/agents/${n}/conversations/${s}`,()=>nx.get(e,n,s));return l.jsxs(ma,{open:!0,onClose:r,title:C("project.threads.conversation_title",{id:s}),size:"lg",children:[i.isLoading&&l.jsx(Je,{}),i.data&&l.jsx("div",{className:"max-h-[60vh] space-y-3 overflow-y-auto pr-2",children:i.data.messages.map((c,d)=>l.jsxs("div",{className:"rounded-md border border-border bg-muted/30 p-3 text-sm",children:[l.jsxs("div",{className:"mb-1 flex items-center justify-between text-xs text-muted-fg",children:[l.jsxs("span",{className:"uppercase tracking-wide",children:[c.role,c.name?` (${c.name})`:""]}),c.ts&&l.jsx("span",{children:new Date(c.ts).toLocaleString()})]}),l.jsx("div",{className:"whitespace-pre-wrap",children:c.content})]},d))})]})}function yx({value:e,onValueChange:n,onSubmit:s,onStop:r,busy:i=!1,disabled:c=!1,placeholder:d,autoFocus:f,minRows:g=2,maxRows:m=8,footer:h,className:x}){const y=v.useRef(null);v.useLayoutEffect(()=>{const S=y.current;if(!S)return;S.style.height="auto";const _=parseFloat(getComputedStyle(S).lineHeight)||20,j=_*g,E=_*m;S.style.height=`${Math.min(Math.max(S.scrollHeight,j),E)}px`,S.style.overflowY=S.scrollHeight>E?"auto":"hidden"},[e,g,m]);const w=e.trim().length>0&&!c;return l.jsxs("div",{className:Pt("flex flex-col gap-1.5 rounded-2xl border border-border bg-muted/60 p-2 shadow-sm transition-colors","focus-within:border-foreground/25 focus-within:bg-muted",c&&"opacity-60",x),children:[l.jsx("textarea",{ref:y,rows:g,value:e,autoFocus:f,disabled:c,placeholder:d,onChange:S=>n(S.target.value),onKeyDown:S=>{if(S.key==="Enter"&&!S.shiftKey){if(S.preventDefault(),i||!w)return;s()}},className:"w-full resize-none bg-transparent px-2 pt-1 text-sm leading-relaxed outline-none placeholder:text-muted-foreground"}),l.jsxs("div",{className:"flex items-center justify-between gap-2 pl-1",children:[l.jsx("div",{className:"flex min-w-0 items-center gap-2 text-[11px] text-muted-foreground",children:h}),i&&r?l.jsx(Wo,{type:"button",size:"icon-sm",variant:"destructive",onClick:r,"aria-label":"Detener",title:"Detener",children:l.jsx(xj,{className:"size-3.5",fill:"currentColor"})}):l.jsx(Wo,{type:"button",size:"icon-sm",variant:"default",onClick:s,disabled:!w,"aria-label":"Enviar",title:"Enviar",children:l.jsx(_R,{className:"size-4"})})]})]})}function _x({value:e,onChange:n,disabled:s}){const[r,i]=v.useState(!1),[c,d]=v.useState(""),[f,g]=v.useState([]),[m,h]=v.useState(!1),x=v.useRef(null);v.useEffect(()=>{if(!r)return;const j=E=>{x.current&&!x.current.contains(E.target)&&i(!1)};return document.addEventListener("mousedown",j),()=>document.removeEventListener("mousedown",j)},[r]),v.useEffect(()=>{if(!r||m)return;let j=!1;return(async()=>{try{const{engines:E}=await pd.list(),k=await Promise.all(E.map(N=>pd.models({engine:N}).then(R=>(R.models||[]).map(A=>A.includes(":")?A:`${N}:${A}`)).catch(()=>[])));if(!j){const N=Array.from(new Set(k.flat())).sort();g(N),h(!0)}}catch{j||h(!0)}})(),()=>{j=!0}},[r,m]);const y=c.trim().toLowerCase(),w=y?f.filter(j=>j.toLowerCase().includes(y)):f,S=e||"Auto",_=j=>{n(j),i(!1),d("")};return l.jsxs("div",{ref:x,className:"relative",children:[l.jsxs("button",{type:"button",disabled:s,onClick:()=>i(j=>!j),"data-testid":"chat-model-picker",className:Ie("flex max-w-[200px] items-center gap-1 rounded-md border border-transparent px-1.5 py-0.5 text-[11px] text-muted-foreground transition-colors","hover:bg-accent/60 hover:text-foreground",e&&"text-foreground"),title:"Elegir modelo (o Auto)",children:[l.jsx(hj,{className:"size-3 shrink-0"}),l.jsx("span",{className:"truncate font-mono",children:S}),l.jsx(Zr,{className:"size-3 shrink-0 opacity-60"})]}),r&&l.jsxs("div",{className:"absolute bottom-full left-0 z-50 mb-1.5 w-64 rounded-lg border border-border bg-popover p-1.5 shadow-md ring-1 ring-foreground/10",children:[l.jsx("input",{autoFocus:!0,value:c,placeholder:"filtrar o escribir modelo…",onChange:j=>d(j.target.value),onKeyDown:j=>{j.key==="Enter"&&c.trim()&&_(c.trim())},className:"mb-1 w-full rounded-md border border-border bg-background px-2 py-1 text-xs outline-none focus:border-foreground/30"}),l.jsxs("ul",{className:"max-h-56 overflow-y-auto",children:[l.jsx("li",{children:l.jsxs("button",{type:"button",onMouseDown:j=>{j.preventDefault(),_("")},className:Ie("flex w-full items-center justify-between rounded-md px-2 py-1 text-left text-xs hover:bg-accent hover:text-accent-fg",!e&&"bg-accent/50"),children:[l.jsxs("span",{className:"flex items-center gap-1.5",children:[l.jsx(Cd,{className:"size-3"})," Auto (router decide)"]}),!e&&l.jsx(Li,{className:"size-3"})]})}),!m&&l.jsx("li",{className:"px-2 py-1 text-[11px] text-muted-fg",children:"cargando modelos…"}),m&&w.length===0&&c.trim()&&l.jsx("li",{children:l.jsxs("button",{type:"button",onMouseDown:j=>{j.preventDefault(),_(c.trim())},className:"w-full rounded-md px-2 py-1 text-left font-mono text-xs hover:bg-accent hover:text-accent-fg",children:["usar “",c.trim(),"”"]})}),w.map(j=>l.jsx("li",{children:l.jsxs("button",{type:"button",onMouseDown:E=>{E.preventDefault(),_(j)},className:Ie("flex w-full items-center justify-between rounded-md px-2 py-1 text-left font-mono text-xs hover:bg-accent hover:text-accent-fg",j===e&&"bg-accent/50"),children:[l.jsx("span",{className:"truncate",children:j}),j===e&&l.jsx(Li,{className:"size-3 shrink-0"})]})},j))]})]})]})}function Lz({onSend:e,onStop:n,streaming:s,model:r,onModelChange:i}){const[c,d]=v.useState(""),f=()=>{const g=c.trim();g&&(d(""),e(g))};return l.jsx("div",{className:"border-t border-border bg-card/60 p-3",children:l.jsx(yx,{value:c,onValueChange:d,onSubmit:f,onStop:n,busy:s,placeholder:C("project.chat.placeholder"),maxRows:12,footer:i?l.jsx(_x,{value:r||"",onChange:i,disabled:s}):void 0})})}const Pz={read_file:{icon:MR,label:"Leer archivo"},write_file:{icon:AR,label:"Escribir archivo"},edit_file:{icon:Wu,label:"Editar archivo"},list_files:{icon:PR,label:"Listar archivos"},search_files:{icon:Vu,label:"Buscar en archivos"},search_messages:{icon:Vu,label:"Buscar mensajes"},tail_messages:{icon:Vu,label:"Últimos mensajes"},run_shell:{icon:Pi,label:"Ejecutar shell"},send_telegram:{icon:Za,label:"Enviar Telegram"},call_agent:{icon:vn,label:"Llamar agente"},call_mcp:{icon:tN,label:"Llamar MCP"},call_runtime:{icon:vn,label:"Llamar runtime"},create_task:{icon:FR,label:"Crear tarea"}},a2=new Set(["write_file","edit_file"]);function Bz(e){return Pz[e]||{icon:ll,label:e}}function Iz(e,n){if(!n)return"";const s=i=>typeof n[i]=="string"?n[i]:void 0,r=s("path")||s("file")||s("pattern")||s("query")||s("command")||s("slug")||s("name")||s("agent");return r?String(r):""}function K1(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Uz({status:e}){return e==="running"?l.jsx(ph,{className:"size-3 shrink-0 animate-spin text-sky-400"}):e==="error"?l.jsx(Cd,{className:"size-3 shrink-0 text-rose-400"}):e==="deduped"?l.jsx(NR,{className:"size-3 shrink-0 text-amber-400"}):l.jsx(Li,{className:"size-3 shrink-0 text-emerald-400"})}function Hz({part:e}){const[n,s]=v.useState(!1),{icon:r,label:i}=Bz(e.tool),c=Iz(e.tool,e.args),d=a2.has(e.tool),f=!!e.args||e.result!==void 0;return l.jsxs("div",{className:Ie("rounded-lg border bg-muted/30 text-[12px]",e.status==="error"?"border-rose-500/30":"border-border"),children:[l.jsxs("button",{type:"button",onClick:()=>f&&s(g=>!g),className:"flex w-full items-center gap-2 px-2.5 py-1.5 text-left",children:[f?l.jsx(dh,{className:Ie("size-3 shrink-0 text-muted-foreground transition-transform",n&&"rotate-90")}):l.jsx("span",{className:"size-3 shrink-0"}),l.jsx(r,{className:Ie("size-3.5 shrink-0",d?"text-violet-400":"text-muted-foreground")}),l.jsx("span",{className:"shrink-0 font-medium",children:i}),c&&l.jsx("span",{className:"truncate font-mono text-muted-foreground",children:c}),l.jsxs("span",{className:"ml-auto flex items-center gap-1",children:[e.status==="deduped"&&l.jsx("span",{className:"text-[10px] text-amber-400",children:"dedup"}),l.jsx(Uz,{status:e.status})]})]}),n&&f&&l.jsxs("div",{className:"space-y-2 border-t border-border/60 px-2.5 py-2",children:[e.args&&Object.keys(e.args).length>0&&l.jsxs("div",{children:[l.jsx("div",{className:"mb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/70",children:"args"}),l.jsx("pre",{className:"max-h-48 overflow-auto rounded-md bg-background/60 p-2 font-mono text-[11px] leading-relaxed text-foreground",children:K1(e.args)})]}),e.result!==void 0&&l.jsxs("div",{children:[l.jsx("div",{className:"mb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/70",children:"result"}),l.jsx("pre",{className:Ie("max-h-64 overflow-auto rounded-md bg-background/60 p-2 font-mono text-[11px] leading-relaxed",e.status==="error"?"text-rose-300":"text-foreground"),children:K1(e.result)})]})]})]})}function jx(e){return e.parts.filter(n=>n.kind==="text").map(n=>n.text).join(`
531
531
 
532
532
  `).trim()}const qz=e=>[{kind:"text",text:e}];function Vz(e){if(!e||typeof e!="object")return!1;const n=e;return"error"in n&&!!n.error}function Sx(e,n){const s=r=>({...e,notes:[...e.notes||[],r]});switch(n.type){case"model_start":return n.model?{...e,model:n.model}:e;case"model_routed":{const r=n.model?{...e,model:n.model}:e;return n.from_fallback?{...r,notes:[...r.notes||[],`routing fell back → ${n.model}`]}:r}case"engine_failed":return s(`engine ${n.model||"?"} failed → ${n.retry_with||"retry"}`);case"model_retry":return s(`retry (${n.reason||"?"})`);case"tools_suppressed":return s(`tools suppressed: ${(n.tools||[]).join(", ")}`);case"assistant_text":return n.text?{...e,parts:[...e.parts,{kind:"text",text:n.text}]}:e;case"tool_start":return n.trace?{...e,parts:[...e.parts,{kind:"tool",id:n.trace.id,tool:n.trace.tool,args:n.trace.args,status:"running"}]}:e;case"tool_deduped":return n.trace?{...e,parts:e.parts.map(r=>r.kind==="tool"&&r.id===n.trace.id?{...r,status:"deduped"}:r)}:e;case"tool_result":if(!n.trace)return e;{const r=Vz(n.trace.result);return{...e,parts:e.parts.map(i=>i.kind==="tool"&&i.id===n.trace.id?{...i,result:n.trace.result,status:r?"error":i.status==="deduped"?"deduped":"done"}:i)}}case"final":return{...e,pending:!1,usage:n.result?.usage??e.usage,model:e.model??n.result?.name,parts:n.result?.text&&!e.parts.some(r=>r.kind==="text")?[...e.parts,{kind:"text",text:n.result.text}]:e.parts};default:{const r=n.delta||n.content||"";if(!r)return e;const i=[...e.parts],c=i[i.length-1];return c&&c.kind==="text"?i[i.length-1]={...c,text:c.text+r}:i.push({kind:"text",text:r}),{...e,parts:i}}}}function $z(e,n){const[s,r]=v.useState([]),[i,c]=v.useState(!1),d=v.useRef(null),f=v.useRef(void 0),g=v.useCallback(w=>{r(S=>{const _=[...S],j=_[_.length-1];return j&&j.role==="assistant"&&(_[_.length-1]=w(j)),_})},[]),m=v.useCallback(w=>{if(w.type==="error"){n?.(w.error||"stream error");return}g(S=>Sx(S,w))},[g,n]),h=v.useCallback(async(w,S={})=>{const _=w.trim();if(!_||i)return;const j=()=>new Date().toISOString(),E=s.map(N=>({role:N.role,content:jx(N)}));if(r(N=>[...N,{role:"user",parts:qz(_),ts:j()},{role:"assistant",parts:[],ts:j(),pending:!0}]),c(!0),S.agentSlug){try{const N=await Jt.chat(e,S.agentSlug,{prompt:_,conversation_id:f.current});f.current=N.conversation_id,g(R=>({...R,pending:!1,model:N.engine,parts:[{kind:"text",text:N.text}]}))}catch(N){n?.(N?.message||"fallo"),r(R=>R.filter((A,M)=>M!==R.length-1))}finally{c(!1)}return}const k=new AbortController;d.current=k;try{await rw.stream(e,{prompt:_,previousMessages:E,model:S.model||void 0,channel:"web"},m,k.signal),g(N=>({...N,pending:!1}))}catch(N){k.signal.aborted?g(R=>({...R,pending:!1,parts:[...R.parts,{kind:"text",text:"[detenido]"}]})):(n?.(N?.message||"stream falló"),r(R=>R.filter((A,M)=>M!==R.length-1)))}finally{c(!1),d.current=null}},[e,s,i,m,g,n]),x=v.useCallback(()=>d.current?.abort(),[]),y=v.useCallback(()=>{i||(f.current=void 0,r([]))},[i]);return{msgs:s,send:h,stop:x,clear:y,streaming:i}}function Gz({msg:e,onCopy:n}){const s=e.role==="user",r=jx(e),i=e.parts.some(c=>c.kind==="tool");return l.jsxs("div",{className:Ie("group flex items-start gap-2",s?"justify-end":"justify-start"),children:[!s&&l.jsx("span",{className:"mt-0.5 grid size-7 shrink-0 place-items-center rounded-full bg-muted text-muted-foreground",children:l.jsx(vn,{size:14})}),l.jsxs("div",{className:Ie("flex min-w-0 flex-col gap-1.5",s?"items-end":"w-full max-w-[85%]"),children:[!s&&e.notes&&e.notes.length>0&&l.jsx("div",{className:"flex flex-col gap-0.5",children:e.notes.map((c,d)=>l.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-amber-400/80",children:[l.jsx(VR,{size:10})," ",c]},d))}),e.parts.map((c,d)=>c.kind==="tool"?l.jsx(Hz,{part:c},`${c.id}-${d}`):c.text?l.jsx("div",{className:Ie("whitespace-pre-wrap rounded-2xl px-3 py-2 text-sm leading-relaxed shadow-sm",s?"rounded-br-sm bg-primary text-primary-fg":"w-full rounded-bl-sm border border-border bg-card text-foreground"),children:c.text},d):null),!s&&e.pending&&e.parts.length===0&&l.jsx("div",{className:"rounded-2xl rounded-bl-sm border border-border bg-card px-3 py-2 text-sm text-muted-foreground",children:"…"}),l.jsxs("div",{className:"flex items-center gap-2 text-[10px] text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100",children:[l.jsx("span",{children:Yz(e.ts)}),!s&&e.model&&l.jsxs("span",{className:"font-mono",children:["· ",e.model]}),!s&&i&&l.jsxs("span",{children:["· ",e.parts.filter(c=>c.kind==="tool").length," tools"]}),n&&r&&l.jsxs("button",{type:"button",onClick:()=>n(r),className:"inline-flex items-center gap-1 hover:text-foreground",title:"Copiar",children:[l.jsx(wg,{size:10})," copiar"]})]})]}),s&&l.jsx("span",{className:"mt-0.5 grid size-7 shrink-0 place-items-center rounded-full bg-muted text-muted-foreground",children:l.jsx(vj,{size:14})})]})}function Yz(e){try{return new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return e}}function wx({msgs:e,onCopy:n}){const s=v.useRef(null);return v.useEffect(()=>{s.current?.scrollIntoView({behavior:"smooth",block:"end"})},[e]),e.length===0?l.jsx("div",{className:"grid h-full place-items-center p-6",children:l.jsx(lt,{children:C("project.chat.empty")})}):l.jsxs("div",{className:"space-y-4 px-3 py-4",children:[e.map((r,i)=>l.jsx(Gz,{msg:r,onCopy:n},i)),l.jsx("div",{ref:s})]})}function Fz(e){if(!e)return;const n=e.path??e.file??e.filename;return typeof n=="string"?n:void 0}function s2({msgs:e}){const[n,s]=v.useState(!1),{inTok:r,outTok:i,toolCount:c,changed:d,model:f}=v.useMemo(()=>{let m=0,h=0,x=0,y;const w=new Set,S=[];for(const _ of e)if(_.role==="assistant"){_.usage&&(m+=_.usage.input_tokens||0,h+=_.usage.output_tokens||0),_.model&&(y=_.model);for(const j of _.parts)if(j.kind==="tool"&&(x+=1,a2.has(j.tool)&&j.status!=="error")){const E=Fz(j.args);E&&!w.has(E)&&(w.add(E),S.push({path:E,tool:j.tool}))}}return{inTok:m,outTok:h,toolCount:x,changed:S,model:y}},[e]),g=r+i;return g===0&&c===0?null:l.jsxs("div",{className:"shrink-0 border-t border-border bg-card/40 text-[11px]",children:[l.jsxs("button",{type:"button",onClick:()=>d.length>0&&s(m=>!m),className:Ie("flex w-full items-center gap-3 px-4 py-1.5 text-muted-foreground",d.length>0&&"hover:text-foreground"),children:[l.jsxs("span",{className:"flex items-center gap-1",children:[l.jsx(wd,{size:12})," ",Fp(g)," tok",l.jsxs("span",{className:"text-muted-foreground/60",children:["(",Fp(r),"↑ / ",Fp(i),"↓)"]})]}),c>0&&l.jsxs("span",{className:"flex items-center gap-1",children:[l.jsx(ll,{size:12})," ",c," tools"]}),d.length>0&&l.jsxs("span",{className:"flex items-center gap-1 text-violet-400",children:[l.jsx(Wu,{size:12})," ",d.length," archivos"]}),f&&l.jsx("span",{className:"ml-auto font-mono text-muted-foreground/70",children:f}),d.length>0&&l.jsx(Zr,{className:Ie("size-3 shrink-0 transition-transform",n&&"rotate-180")})]}),n&&d.length>0&&l.jsx("ul",{className:"max-h-40 space-y-0.5 overflow-y-auto border-t border-border/60 px-4 py-2",children:d.map(m=>l.jsxs("li",{className:"flex items-center gap-2 font-mono text-[11px]",children:[l.jsx(Wu,{size:11,className:"shrink-0 text-violet-400"}),l.jsx("span",{className:"truncate",children:m.path}),l.jsx("span",{className:"ml-auto shrink-0 text-[10px] text-muted-foreground/60",children:m.tool==="write_file"?"write":"edit"})]},m.path))})]})}function Fp(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}const gi="__super_agent__";function Xz({pid:e}){const n=rt(),[s]=sj(),r=Qe(`/projects/${e}/agents`,()=>Jt.list(e)),[i,c]=v.useState(s.get("agent")||""),[d,f]=v.useState(!1),[g,m]=v.useState(""),{msgs:h,send:x,stop:y,clear:w,streaming:S}=$z(e,I=>n.error(I)),_=r.data||[],j=I=>I===gi,E=v.useMemo(()=>[{value:gi,label:"Roby (super-agent)"},..._.map(I=>({value:I.slug,label:I.slug}))],[_]),k=v.useMemo(()=>_.find(I=>I.slug===i)||_[0],[_,i]),N=j(i)?gi:k?.slug||gi,R=N===gi;v.useEffect(()=>{!i&&k?.slug&&c(k.slug)},[k?.slug,i]);const A=()=>w(),M=async I=>{!R&&!k||await x(I,{model:R?g:void 0,agentSlug:R?void 0:k.slug})},O=async I=>{try{await navigator.clipboard.writeText(I),n.info(C("project.chat.copied"))}catch{}};if(r.isLoading)return l.jsx(Je,{});const U=C(R?"project.chat.roby_subtitle":"project.chat.subtitle");return l.jsxs("div",{className:"flex h-[calc(100vh-11rem)] flex-col overflow-hidden rounded-xl border border-border bg-card/40",children:[l.jsxs("header",{className:"flex shrink-0 items-center justify-between gap-3 border-b border-border px-4 py-3",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx("h2",{className:"text-sm font-semibold",children:C(R?"project.chat.roby_title":"project.chat.title")}),l.jsx("p",{className:"truncate text-[11px] text-muted-fg",children:U})]}),l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("div",{className:"w-52",children:l.jsx(Ct,{value:N,onChange:I=>{c(I),A()},options:E})}),R?l.jsx(Ue,{tone:"success",children:"super-agent"}):k?.model&&l.jsx(Ue,{tone:"info",children:k.model}),!_.length&&!R&&l.jsxs(he,{variant:"primary",size:"sm",onClick:()=>f(!0),children:[l.jsx(Rn,{size:14})," ",C("project.chat.create_agent")]}),l.jsxs(he,{variant:"ghost",size:"sm",disabled:S||h.length===0,onClick:A,children:[l.jsx(Ms,{size:13})," ",C("project.chat.clear")]})]})]}),l.jsx("div",{className:"flex-1 overflow-y-auto",children:h.length?l.jsx(wx,{msgs:h,onCopy:O}):l.jsx(lt,{children:C("project.chat.empty")})}),l.jsx(s2,{msgs:h}),l.jsx(Lz,{onSend:M,onStop:y,streaming:S,model:R?g:void 0,onModelChange:R?m:void 0}),l.jsx(Kz,{open:d,pid:e,onClose:()=>f(!1),onCreated:()=>{f(!1),r.mutate()}})]})}function Kz({open:e,onClose:n,onCreated:s,pid:r}){const i=rt(),[c,d]=v.useState(""),[f,g]=v.useState("master"),[m,h]=v.useState(""),[x,y]=v.useState(!0),[w,S]=v.useState(!1),_=async()=>{if(!/^[a-z][a-z0-9_-]*$/.test(c)){i.error(C("project.agents.slug_invalid"));return}S(!0);try{await Jt.create(r,{slug:c,role:f,model:m||void 0,is_master:x}),i.success(C("project.agents.created",{slug:c})),d(""),g("master"),h(""),y(!0),s()}catch(j){i.error(j.message)}finally{S(!1)}};return l.jsx(ma,{open:e,onClose:n,title:C("project.chat.create_agent_title"),description:C("project.chat.create_agent_desc"),footer:l.jsxs(l.Fragment,{children:[l.jsx(he,{variant:"ghost",onClick:n,disabled:w,children:C("common.cancel")}),l.jsx(he,{variant:"primary",onClick:_,loading:w,children:C("common.create")})]}),children:l.jsxs("div",{className:"space-y-3",children:[l.jsx(fe,{label:"slug",children:l.jsx(Ce,{autoFocus:!0,value:c,onChange:j=>d(j.target.value),placeholder:"master"})}),l.jsx(fe,{label:C("project.chat.role_label"),children:l.jsx(Ce,{value:f,onChange:j=>g(j.target.value),placeholder:"master"})}),l.jsx(fe,{label:C("project.chat.model_label"),hint:C("project.chat.model_hint"),children:l.jsx(Ce,{value:m,onChange:j=>h(j.target.value)})}),l.jsx(sn,{checked:x,onChange:y,label:C("project.chat.master_label")})]})})}function Qz({pid:e}){const n=rt(),{project:s}=lw(e),{channels:r,isLoading:i,mutate:c}=ux(),d=String(e),f=s?.name||s?.path?.split("/").pop()||d,g=`proj-${d}`,m=r.find(O=>O.project===d||O.project===f||O.name===g),[h,x]=v.useState(!!m),[y,w]=v.useState(""),[S,_]=v.useState(""),[j,E]=v.useState(""),[k,N]=v.useState(!0),[R,A]=v.useState(!1);if(v.useEffect(()=>{m?(x(!0),w(""),_(m.chat_id||""),E(m.route_to_agent||""),N(m.respond_with_engine??!0)):(x(!1),w(""),_(""),E(""),N(!0))},[m?.name,m?.chat_id,m?.route_to_agent]),i)return l.jsx(Je,{});const M=async()=>{A(!0);try{if(!h){m&&(await kn.channels.remove(m.name),n.success(C("project.telegram.cleared"))),await c();return}const O={name:m?.name||g,project:d,chat_id:S,route_to_agent:j,respond_with_engine:k,...y?{bot_token:y}:{}};m?await kn.channels.patch(m.name,O):await kn.channels.upsert(O),n.success(C("project.telegram.saved")),await c(),w("")}catch(O){n.error(O.message)}finally{A(!1)}};return l.jsx(He,{title:C("project.telegram.title"),description:C("project.telegram.subtitle"),children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"flex items-center gap-3",children:[l.jsx(sn,{checked:h,onChange:x,label:C(h?"project.telegram.override_active":"project.telegram.use_default")}),m&&l.jsx(Ue,{tone:"success",children:C("project.telegram.channel_badge",{name:m.name})})]}),h&&l.jsxs(l.Fragment,{children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.telegram.bot_token"),hint:m?.bot_token?`${fr(m.bot_token)} — vacío = mantener`:C("project.telegram.bot_hint_none"),children:l.jsx(Ce,{type:"password",value:y,onChange:O=>w(O.target.value),placeholder:m?.bot_token?fr(m.bot_token):""})}),l.jsx(fe,{label:C("project.telegram.chat_id"),children:l.jsx(Ce,{value:S,onChange:O=>_(O.target.value)})}),l.jsx(fe,{label:C("project.telegram.route_agent"),hint:C("project.telegram.route_hint"),children:l.jsx(Ce,{value:j,onChange:O=>E(O.target.value)})})]}),l.jsx(sn,{checked:k,onChange:N,label:C("project.telegram.respond_engine")})]}),l.jsx("div",{className:"pt-2",children:l.jsx(he,{variant:"primary",loading:R,onClick:M,children:C("common.save")})}),!h&&!m&&l.jsx(lt,{children:C("project.telegram.no_override")})]})})}function r2({load:e,save:n,rows:s=10,placeholder:r}){const i=rt(),[c,d]=v.useState(null),[f,g]=v.useState(""),[m,h]=v.useState(!1);if(v.useEffect(()=>{let w=!0;return e().then(S=>{w&&(d(S),g(S))}).catch(()=>{w&&(d(""),g(""))}),()=>{w=!1}},[e]),c===null)return l.jsx(Je,{});const x=f!==c,y=async()=>{h(!0);try{await n(f),d(f),i.success(C("project.memories.saved"))}catch(w){i.error(w.message)}finally{h(!1)}};return l.jsxs("div",{className:"space-y-2",children:[l.jsx(Qt,{rows:s,className:"font-mono text-xs",value:f,onChange:w=>g(w.target.value),placeholder:r}),l.jsxs("div",{className:"flex items-center justify-between",children:[l.jsxs("span",{className:"text-[11px] text-muted-fg",children:[f.length," ",C("project.memories.chars")]}),l.jsxs(he,{size:"sm",variant:"primary",loading:m,disabled:!x,onClick:y,children:[l.jsx(hh,{size:12})," ",C("project.memories.save_btn")]})]})]})}function Zz({pid:e,agent:n}){const[s,r]=v.useState(!1),i=n.is_master?ks:vn;return l.jsxs("li",{className:"rounded-xl border border-border bg-muted/30",children:[l.jsxs("button",{type:"button",onClick:()=>r(c=>!c),className:"flex w-full items-center gap-3 px-3 py-2 text-left",children:[s?l.jsx(Zr,{size:14,className:"text-muted-fg"}):l.jsx(dh,{size:14,className:"text-muted-fg"}),l.jsx(i,{size:14,className:n.is_master?"text-violet-400":"text-muted-fg"}),l.jsx("span",{className:"text-sm font-medium",children:n.slug}),n.role&&l.jsxs("span",{className:"text-xs text-muted-fg",children:["· ",n.role]})]}),s&&l.jsx("div",{className:"border-t border-border p-3",children:l.jsx(r2,{rows:8,load:()=>Jt.memory.get(e,n.slug).then(c=>c.body),save:c=>Jt.memory.put(e,n.slug,c).then(()=>{})})})]})}function Jz({pid:e}){const n=Qe(`/projects/${e}/agents`,()=>Jt.list(e));return l.jsxs("div",{className:"space-y-6",children:[l.jsx(He,{title:C("project.memories.project_title"),description:C("project.memories.project_desc"),children:l.jsxs("div",{className:"flex items-start gap-3",children:[l.jsx("div",{className:"mt-1 flex size-9 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-sky-600 to-indigo-600",children:l.jsx(Ju,{className:"size-4 text-white"})}),l.jsx("div",{className:"min-w-0 flex-1",children:l.jsx(r2,{rows:12,load:()=>Qn.memory.get(e).then(s=>s.body),save:s=>Qn.memory.put(e,s).then(()=>{}),placeholder:C("project.memories.project_ph")})})]})}),l.jsxs(He,{title:C("project.memories.agents_title"),description:C("project.memories.agents_desc"),children:[n.isLoading&&l.jsx(Je,{}),!n.isLoading&&(n.data?.length??0)===0&&l.jsx(lt,{children:C("project.memories.no_agents")}),l.jsx("ul",{className:"space-y-2",children:(n.data||[]).map(s=>l.jsx(Zz,{pid:e,agent:s},s.slug))})]})]})}function Wz(e,n){var s,r=1;e==null&&(e=0),n==null&&(n=0);function i(){var c,d=s.length,f,g=0,m=0;for(c=0;c<d;++c)f=s[c],g+=f.x,m+=f.y;for(g=(g/d-e)*r,m=(m/d-n)*r,c=0;c<d;++c)f=s[c],f.x-=g,f.y-=m}return i.initialize=function(c){s=c},i.x=function(c){return arguments.length?(e=+c,i):e},i.y=function(c){return arguments.length?(n=+c,i):n},i.strength=function(c){return arguments.length?(r=+c,i):r},i}function eD(e){const n=+this._x.call(null,e),s=+this._y.call(null,e);return o2(this.cover(n,s),n,s,e)}function o2(e,n,s,r){if(isNaN(n)||isNaN(s))return e;var i,c=e._root,d={data:r},f=e._x0,g=e._y0,m=e._x1,h=e._y1,x,y,w,S,_,j,E,k;if(!c)return e._root=d,e;for(;c.length;)if((_=n>=(x=(f+m)/2))?f=x:m=x,(j=s>=(y=(g+h)/2))?g=y:h=y,i=c,!(c=c[E=j<<1|_]))return i[E]=d,e;if(w=+e._x.call(null,c.data),S=+e._y.call(null,c.data),n===w&&s===S)return d.next=c,i?i[E]=d:e._root=d,e;do i=i?i[E]=new Array(4):e._root=new Array(4),(_=n>=(x=(f+m)/2))?f=x:m=x,(j=s>=(y=(g+h)/2))?g=y:h=y;while((E=j<<1|_)===(k=(S>=y)<<1|w>=x));return i[k]=c,i[E]=d,e}function tD(e){var n,s,r=e.length,i,c,d=new Array(r),f=new Array(r),g=1/0,m=1/0,h=-1/0,x=-1/0;for(s=0;s<r;++s)isNaN(i=+this._x.call(null,n=e[s]))||isNaN(c=+this._y.call(null,n))||(d[s]=i,f[s]=c,i<g&&(g=i),i>h&&(h=i),c<m&&(m=c),c>x&&(x=c));if(g>h||m>x)return this;for(this.cover(g,m).cover(h,x),s=0;s<r;++s)o2(this,d[s],f[s],e[s]);return this}function nD(e,n){if(isNaN(e=+e)||isNaN(n=+n))return this;var s=this._x0,r=this._y0,i=this._x1,c=this._y1;if(isNaN(s))i=(s=Math.floor(e))+1,c=(r=Math.floor(n))+1;else{for(var d=i-s||1,f=this._root,g,m;s>e||e>=i||r>n||n>=c;)switch(m=(n<r)<<1|e<s,g=new Array(4),g[m]=f,f=g,d*=2,m){case 0:i=s+d,c=r+d;break;case 1:s=i-d,c=r+d;break;case 2:i=s+d,r=c-d;break;case 3:s=i-d,r=c-d;break}this._root&&this._root.length&&(this._root=f)}return this._x0=s,this._y0=r,this._x1=i,this._y1=c,this}function aD(){var e=[];return this.visit(function(n){if(!n.length)do e.push(n.data);while(n=n.next)}),e}function sD(e){return arguments.length?this.cover(+e[0][0],+e[0][1]).cover(+e[1][0],+e[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]}function Un(e,n,s,r,i){this.node=e,this.x0=n,this.y0=s,this.x1=r,this.y1=i}function rD(e,n,s){var r,i=this._x0,c=this._y0,d,f,g,m,h=this._x1,x=this._y1,y=[],w=this._root,S,_;for(w&&y.push(new Un(w,i,c,h,x)),s==null?s=1/0:(i=e-s,c=n-s,h=e+s,x=n+s,s*=s);S=y.pop();)if(!(!(w=S.node)||(d=S.x0)>h||(f=S.y0)>x||(g=S.x1)<i||(m=S.y1)<c))if(w.length){var j=(d+g)/2,E=(f+m)/2;y.push(new Un(w[3],j,E,g,m),new Un(w[2],d,E,j,m),new Un(w[1],j,f,g,E),new Un(w[0],d,f,j,E)),(_=(n>=E)<<1|e>=j)&&(S=y[y.length-1],y[y.length-1]=y[y.length-1-_],y[y.length-1-_]=S)}else{var k=e-+this._x.call(null,w.data),N=n-+this._y.call(null,w.data),R=k*k+N*N;if(R<s){var A=Math.sqrt(s=R);i=e-A,c=n-A,h=e+A,x=n+A,r=w.data}}return r}function oD(e){if(isNaN(h=+this._x.call(null,e))||isNaN(x=+this._y.call(null,e)))return this;var n,s=this._root,r,i,c,d=this._x0,f=this._y0,g=this._x1,m=this._y1,h,x,y,w,S,_,j,E;if(!s)return this;if(s.length)for(;;){if((S=h>=(y=(d+g)/2))?d=y:g=y,(_=x>=(w=(f+m)/2))?f=w:m=w,n=s,!(s=s[j=_<<1|S]))return this;if(!s.length)break;(n[j+1&3]||n[j+2&3]||n[j+3&3])&&(r=n,E=j)}for(;s.data!==e;)if(i=s,!(s=s.next))return this;return(c=s.next)&&delete s.next,i?(c?i.next=c:delete i.next,this):n?(c?n[j]=c:delete n[j],(s=n[0]||n[1]||n[2]||n[3])&&s===(n[3]||n[2]||n[1]||n[0])&&!s.length&&(r?r[E]=s:this._root=s),this):(this._root=c,this)}function lD(e){for(var n=0,s=e.length;n<s;++n)this.remove(e[n]);return this}function iD(){return this._root}function cD(){var e=0;return this.visit(function(n){if(!n.length)do++e;while(n=n.next)}),e}function uD(e){var n=[],s,r=this._root,i,c,d,f,g;for(r&&n.push(new Un(r,this._x0,this._y0,this._x1,this._y1));s=n.pop();)if(!e(r=s.node,c=s.x0,d=s.y0,f=s.x1,g=s.y1)&&r.length){var m=(c+f)/2,h=(d+g)/2;(i=r[3])&&n.push(new Un(i,m,h,f,g)),(i=r[2])&&n.push(new Un(i,c,h,m,g)),(i=r[1])&&n.push(new Un(i,m,d,f,h)),(i=r[0])&&n.push(new Un(i,c,d,m,h))}return this}function dD(e){var n=[],s=[],r;for(this._root&&n.push(new Un(this._root,this._x0,this._y0,this._x1,this._y1));r=n.pop();){var i=r.node;if(i.length){var c,d=r.x0,f=r.y0,g=r.x1,m=r.y1,h=(d+g)/2,x=(f+m)/2;(c=i[0])&&n.push(new Un(c,d,f,h,x)),(c=i[1])&&n.push(new Un(c,h,f,g,x)),(c=i[2])&&n.push(new Un(c,d,x,h,m)),(c=i[3])&&n.push(new Un(c,h,x,g,m))}s.push(r)}for(;r=s.pop();)e(r.node,r.x0,r.y0,r.x1,r.y1);return this}function fD(e){return e[0]}function mD(e){return arguments.length?(this._x=e,this):this._x}function pD(e){return e[1]}function gD(e){return arguments.length?(this._y=e,this):this._y}function Cx(e,n,s){var r=new Ex(n??fD,s??pD,NaN,NaN,NaN,NaN);return e==null?r:r.addAll(e)}function Ex(e,n,s,r,i,c){this._x=e,this._y=n,this._x0=s,this._y0=r,this._x1=i,this._y1=c,this._root=void 0}function Q1(e){for(var n={data:e.data},s=n;e=e.next;)s=s.next={data:e.data};return n}var Hn=Cx.prototype=Ex.prototype;Hn.copy=function(){var e=new Ex(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root,s,r;if(!n)return e;if(!n.length)return e._root=Q1(n),e;for(s=[{source:n,target:e._root=new Array(4)}];n=s.pop();)for(var i=0;i<4;++i)(r=n.source[i])&&(r.length?s.push({source:r,target:n.target[i]=new Array(4)}):n.target[i]=Q1(r));return e};Hn.add=eD;Hn.addAll=tD;Hn.cover=nD;Hn.data=aD;Hn.extent=sD;Hn.find=rD;Hn.remove=oD;Hn.removeAll=lD;Hn.root=iD;Hn.size=cD;Hn.visit=uD;Hn.visitAfter=dD;Hn.x=mD;Hn.y=gD;function Gr(e){return function(){return e}}function cr(e){return(e()-.5)*1e-6}function hD(e){return e.x+e.vx}function xD(e){return e.y+e.vy}function bD(e){var n,s,r,i=1,c=1;typeof e!="function"&&(e=Gr(e==null?1:+e));function d(){for(var m,h=n.length,x,y,w,S,_,j,E=0;E<c;++E)for(x=Cx(n,hD,xD).visitAfter(f),m=0;m<h;++m)y=n[m],_=s[y.index],j=_*_,w=y.x+y.vx,S=y.y+y.vy,x.visit(k);function k(N,R,A,M,O){var U=N.data,I=N.r,B=_+I;if(U){if(U.index>y.index){var L=w-U.x-U.vx,D=S-U.y-U.vy,q=L*L+D*D;q<B*B&&(L===0&&(L=cr(r),q+=L*L),D===0&&(D=cr(r),q+=D*D),q=(B-(q=Math.sqrt(q)))/q*i,y.vx+=(L*=q)*(B=(I*=I)/(j+I)),y.vy+=(D*=q)*B,U.vx-=L*(B=1-B),U.vy-=D*B)}return}return R>w+B||M<w-B||A>S+B||O<S-B}}function f(m){if(m.data)return m.r=s[m.data.index];for(var h=m.r=0;h<4;++h)m[h]&&m[h].r>m.r&&(m.r=m[h].r)}function g(){if(n){var m,h=n.length,x;for(s=new Array(h),m=0;m<h;++m)x=n[m],s[x.index]=+e(x,m,n)}}return d.initialize=function(m,h){n=m,r=h,g()},d.iterations=function(m){return arguments.length?(c=+m,d):c},d.strength=function(m){return arguments.length?(i=+m,d):i},d.radius=function(m){return arguments.length?(e=typeof m=="function"?m:Gr(+m),g(),d):e},d}function vD(e){return e.index}function Z1(e,n){var s=e.get(n);if(!s)throw new Error("node not found: "+n);return s}function yD(e){var n=vD,s=x,r,i=Gr(30),c,d,f,g,m,h=1;e==null&&(e=[]);function x(j){return 1/Math.min(f[j.source.index],f[j.target.index])}function y(j){for(var E=0,k=e.length;E<h;++E)for(var N=0,R,A,M,O,U,I,B;N<k;++N)R=e[N],A=R.source,M=R.target,O=M.x+M.vx-A.x-A.vx||cr(m),U=M.y+M.vy-A.y-A.vy||cr(m),I=Math.sqrt(O*O+U*U),I=(I-c[N])/I*j*r[N],O*=I,U*=I,M.vx-=O*(B=g[N]),M.vy-=U*B,A.vx+=O*(B=1-B),A.vy+=U*B}function w(){if(d){var j,E=d.length,k=e.length,N=new Map(d.map((A,M)=>[n(A,M,d),A])),R;for(j=0,f=new Array(E);j<k;++j)R=e[j],R.index=j,typeof R.source!="object"&&(R.source=Z1(N,R.source)),typeof R.target!="object"&&(R.target=Z1(N,R.target)),f[R.source.index]=(f[R.source.index]||0)+1,f[R.target.index]=(f[R.target.index]||0)+1;for(j=0,g=new Array(k);j<k;++j)R=e[j],g[j]=f[R.source.index]/(f[R.source.index]+f[R.target.index]);r=new Array(k),S(),c=new Array(k),_()}}function S(){if(d)for(var j=0,E=e.length;j<E;++j)r[j]=+s(e[j],j,e)}function _(){if(d)for(var j=0,E=e.length;j<E;++j)c[j]=+i(e[j],j,e)}return y.initialize=function(j,E){d=j,m=E,w()},y.links=function(j){return arguments.length?(e=j,w(),y):e},y.id=function(j){return arguments.length?(n=j,y):n},y.iterations=function(j){return arguments.length?(h=+j,y):h},y.strength=function(j){return arguments.length?(s=typeof j=="function"?j:Gr(+j),S(),y):s},y.distance=function(j){return arguments.length?(i=typeof j=="function"?j:Gr(+j),_(),y):i},y}var _D={value:()=>{}};function l2(){for(var e=0,n=arguments.length,s={},r;e<n;++e){if(!(r=arguments[e]+"")||r in s||/[\s.]/.test(r))throw new Error("illegal type: "+r);s[r]=[]}return new Ku(s)}function Ku(e){this._=e}function jD(e,n){return e.trim().split(/^|\s+/).map(function(s){var r="",i=s.indexOf(".");if(i>=0&&(r=s.slice(i+1),s=s.slice(0,i)),s&&!n.hasOwnProperty(s))throw new Error("unknown type: "+s);return{type:s,name:r}})}Ku.prototype=l2.prototype={constructor:Ku,on:function(e,n){var s=this._,r=jD(e+"",s),i,c=-1,d=r.length;if(arguments.length<2){for(;++c<d;)if((i=(e=r[c]).type)&&(i=SD(s[i],e.name)))return i;return}if(n!=null&&typeof n!="function")throw new Error("invalid callback: "+n);for(;++c<d;)if(i=(e=r[c]).type)s[i]=J1(s[i],e.name,n);else if(n==null)for(i in s)s[i]=J1(s[i],e.name,null);return this},copy:function(){var e={},n=this._;for(var s in n)e[s]=n[s].slice();return new Ku(e)},call:function(e,n){if((i=arguments.length-2)>0)for(var s=new Array(i),r=0,i,c;r<i;++r)s[r]=arguments[r+2];if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(c=this._[e],r=0,i=c.length;r<i;++r)c[r].value.apply(n,s)},apply:function(e,n,s){if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(var r=this._[e],i=0,c=r.length;i<c;++i)r[i].value.apply(n,s)}};function SD(e,n){for(var s=0,r=e.length,i;s<r;++s)if((i=e[s]).name===n)return i.value}function J1(e,n,s){for(var r=0,i=e.length;r<i;++r)if(e[r].name===n){e[r]=_D,e=e.slice(0,r).concat(e.slice(r+1));break}return s!=null&&e.push({name:n,value:s}),e}var nl=0,Ci=0,hi=0,i2=1e3,yd,Ei,_d=0,Kr=0,Qd=0,Fi=typeof performance=="object"&&performance.now?performance:Date,c2=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function u2(){return Kr||(c2(wD),Kr=Fi.now()+Qd)}function wD(){Kr=0}function Jg(){this._call=this._time=this._next=null}Jg.prototype=d2.prototype={constructor:Jg,restart:function(e,n,s){if(typeof e!="function")throw new TypeError("callback is not a function");s=(s==null?u2():+s)+(n==null?0:+n),!this._next&&Ei!==this&&(Ei?Ei._next=this:yd=this,Ei=this),this._call=e,this._time=s,Wg()},stop:function(){this._call&&(this._call=null,this._time=1/0,Wg())}};function d2(e,n,s){var r=new Jg;return r.restart(e,n,s),r}function CD(){u2(),++nl;for(var e=yd,n;e;)(n=Kr-e._time)>=0&&e._call.call(void 0,n),e=e._next;--nl}function W1(){Kr=(_d=Fi.now())+Qd,nl=Ci=0;try{CD()}finally{nl=0,kD(),Kr=0}}function ED(){var e=Fi.now(),n=e-_d;n>i2&&(Qd-=n,_d=e)}function kD(){for(var e,n=yd,s,r=1/0;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(s=n._next,n._next=null,n=e?e._next=s:yd=s);Ei=e,Wg(r)}function Wg(e){if(!nl){Ci&&(Ci=clearTimeout(Ci));var n=e-Kr;n>24?(e<1/0&&(Ci=setTimeout(W1,e-Fi.now()-Qd)),hi&&(hi=clearInterval(hi))):(hi||(_d=Fi.now(),hi=setInterval(ED,i2)),nl=1,c2(W1))}}const RD=1664525,ND=1013904223,e_=4294967296;function TD(){let e=1;return()=>(e=(RD*e+ND)%e_)/e_}function AD(e){return e.x}function MD(e){return e.y}var OD=10,zD=Math.PI*(3-Math.sqrt(5));function DD(e){var n,s=1,r=.001,i=1-Math.pow(r,1/300),c=0,d=.6,f=new Map,g=d2(x),m=l2("tick","end"),h=TD();e==null&&(e=[]);function x(){y(),m.call("tick",n),s<r&&(g.stop(),m.call("end",n))}function y(_){var j,E=e.length,k;_===void 0&&(_=1);for(var N=0;N<_;++N)for(s+=(c-s)*i,f.forEach(function(R){R(s)}),j=0;j<E;++j)k=e[j],k.fx==null?k.x+=k.vx*=d:(k.x=k.fx,k.vx=0),k.fy==null?k.y+=k.vy*=d:(k.y=k.fy,k.vy=0);return n}function w(){for(var _=0,j=e.length,E;_<j;++_){if(E=e[_],E.index=_,E.fx!=null&&(E.x=E.fx),E.fy!=null&&(E.y=E.fy),isNaN(E.x)||isNaN(E.y)){var k=OD*Math.sqrt(.5+_),N=_*zD;E.x=k*Math.cos(N),E.y=k*Math.sin(N)}(isNaN(E.vx)||isNaN(E.vy))&&(E.vx=E.vy=0)}}function S(_){return _.initialize&&_.initialize(e,h),_}return w(),n={tick:y,restart:function(){return g.restart(x),n},stop:function(){return g.stop(),n},nodes:function(_){return arguments.length?(e=_,w(),f.forEach(S),n):e},alpha:function(_){return arguments.length?(s=+_,n):s},alphaMin:function(_){return arguments.length?(r=+_,n):r},alphaDecay:function(_){return arguments.length?(i=+_,n):+i},alphaTarget:function(_){return arguments.length?(c=+_,n):c},velocityDecay:function(_){return arguments.length?(d=1-_,n):1-d},randomSource:function(_){return arguments.length?(h=_,f.forEach(S),n):h},force:function(_,j){return arguments.length>1?(j==null?f.delete(_):f.set(_,S(j)),n):f.get(_)},find:function(_,j,E){var k=0,N=e.length,R,A,M,O,U;for(E==null?E=1/0:E*=E,k=0;k<N;++k)O=e[k],R=_-O.x,A=j-O.y,M=R*R+A*A,M<E&&(U=O,E=M);return U},on:function(_,j){return arguments.length>1?(m.on(_,j),n):m.on(_)}}}function LD(){var e,n,s,r,i=Gr(-30),c,d=1,f=1/0,g=.81;function m(w){var S,_=e.length,j=Cx(e,AD,MD).visitAfter(x);for(r=w,S=0;S<_;++S)n=e[S],j.visit(y)}function h(){if(e){var w,S=e.length,_;for(c=new Array(S),w=0;w<S;++w)_=e[w],c[_.index]=+i(_,w,e)}}function x(w){var S=0,_,j,E=0,k,N,R;if(w.length){for(k=N=R=0;R<4;++R)(_=w[R])&&(j=Math.abs(_.value))&&(S+=_.value,E+=j,k+=j*_.x,N+=j*_.y);w.x=k/E,w.y=N/E}else{_=w,_.x=_.data.x,_.y=_.data.y;do S+=c[_.data.index];while(_=_.next)}w.value=S}function y(w,S,_,j){if(!w.value)return!0;var E=w.x-n.x,k=w.y-n.y,N=j-S,R=E*E+k*k;if(N*N/g<R)return R<f&&(E===0&&(E=cr(s),R+=E*E),k===0&&(k=cr(s),R+=k*k),R<d&&(R=Math.sqrt(d*R)),n.vx+=E*w.value*r/R,n.vy+=k*w.value*r/R),!0;if(w.length||R>=f)return;(w.data!==n||w.next)&&(E===0&&(E=cr(s),R+=E*E),k===0&&(k=cr(s),R+=k*k),R<d&&(R=Math.sqrt(d*R)));do w.data!==n&&(N=c[w.data.index]*r/R,n.vx+=E*N,n.vy+=k*N);while(w=w.next)}return m.initialize=function(w,S){e=w,s=S,h()},m.strength=function(w){return arguments.length?(i=typeof w=="function"?w:Gr(+w),h(),m):i},m.distanceMin=function(w){return arguments.length?(d=w*w,m):Math.sqrt(d)},m.distanceMax=function(w){return arguments.length?(f=w*w,m):Math.sqrt(f)},m.theta=function(w){return arguments.length?(g=w*w,m):Math.sqrt(g)},m}const xi={agent:"#a78bfa",memory:"#38bdf8",thread:"#34d399",task:"#fbbf24",routine:"#f472b6",agentlink:"#c084fc"},t_={agent:"agente",memory:"memoria",thread:"thread",task:"task",routine:"rutina",agentlink:"jerarquía"},bi=760,vi=460;function PD({center:e,nodes:n}){const s=v.useRef(null),r=v.useRef(null),i=v.useRef([]),c=v.useRef([]),d=v.useRef(null),[,f]=v.useState(0),[g,m]=v.useState(null);v.useEffect(()=>{const j={id:"__center",label:e,kind:"agent",relation:"self",x:bi/2,y:vi/2,fx:bi/2,fy:vi/2},E=[j,...n.map(R=>({...R}))],k=E.slice(1).map(R=>({source:j,target:R}));i.current=E,c.current=k;const N=DD(E).force("link",yD(k).distance(120).strength(.5)).force("charge",LD().strength(-220)).force("center",Wz(bi/2,vi/2).strength(.05)).force("collide",bD(26)).on("tick",()=>f(R=>R+1));return r.current=N,()=>{N.stop()}},[e,n]);const h=j=>{const E=s.current.getBoundingClientRect();return{x:(j.clientX-E.left)/E.width*bi,y:(j.clientY-E.top)/E.height*vi}},x=j=>E=>{j.id!=="__center"&&(d.current=j,E.target.setPointerCapture?.(E.pointerId),r.current?.alphaTarget(.3).restart())},y=j=>{const E=d.current;if(!E)return;const{x:k,y:N}=h(j);E.fx=k,E.fy=N},w=()=>{const j=d.current;j&&(j.fx=null,j.fy=null),d.current=null,r.current?.alphaTarget(0)},S=i.current,_=c.current;return l.jsxs("div",{className:"space-y-3",children:[l.jsx("div",{className:"overflow-hidden rounded-xl border border-border bg-muted/10",children:l.jsxs("svg",{ref:s,viewBox:`0 0 ${bi} ${vi}`,className:"h-[460px] w-full touch-none select-none",onPointerMove:y,onPointerUp:w,onPointerLeave:w,children:[_.map((j,E)=>l.jsx("line",{x1:j.source.x,y1:j.source.y,x2:j.target.x,y2:j.target.y,stroke:xi[j.target.kind],strokeOpacity:.22,strokeWidth:1.5},E)),S.map(j=>{if(j.id==="__center")return l.jsxs("g",{transform:`translate(${j.x},${j.y})`,children:[l.jsx("circle",{r:22,fill:xi.agent}),l.jsx("text",{textAnchor:"middle",y:4,fontSize:11,fontWeight:700,fill:"#1a1a1a",children:e.length>8?e.slice(0,8):e})]},j.id);const E=g?.id===j.id;return l.jsxs("g",{transform:`translate(${j.x},${j.y})`,className:"cursor-grab active:cursor-grabbing",onPointerDown:x(j),onClick:()=>m(j),children:[l.jsx("circle",{r:E?9:6,fill:xi[j.kind],fillOpacity:E?1:.9,stroke:E?"#fff":"none",strokeWidth:E?2:0}),l.jsx("text",{x:10,y:4,fontSize:10,className:"fill-foreground/80",children:j.label.length>22?`${j.label.slice(0,22)}…`:j.label})]},j.id)})]})}),l.jsxs("div",{className:"flex flex-wrap items-center gap-3 text-[11px] text-muted-fg",children:[Object.keys(t_).filter(j=>j!=="agent").map(j=>l.jsxs("span",{className:"inline-flex items-center gap-1",children:[l.jsx("span",{className:"size-2 rounded-full",style:{background:xi[j]}})," ",t_[j]]},j)),l.jsxs("span",{className:"ml-auto",children:[n.length," nodos · arrastrá para reacomodar"]})]}),g&&l.jsxs("div",{className:"rounded-lg border border-border bg-card p-3 text-xs",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:"size-2 rounded-full",style:{background:xi[g.kind]}}),l.jsx("span",{className:"font-medium",children:g.label}),l.jsxs("span",{className:"text-muted-fg",children:["· ",g.relation]})]}),g.detail&&l.jsx("p",{className:"mt-1 whitespace-pre-wrap text-muted-fg",children:g.detail})]})]})}function BD(){return[{key:"overview",label:"Explorer",icon:wd},{key:"memories",label:C("project.nav.memories"),icon:Ju},{key:"records",label:C("project.agent_detail.records_title"),icon:oj},{key:"sleep",label:C("project.agent_detail.sleep_title"),icon:Go},{key:"brain",label:C("project.agent_detail.brain_title"),icon:ol},{key:"config",label:C("settings.tabs.advanced"),icon:ed}]}const ID=[{value:"",label:"— sin tipo —"},{value:"orchestrator",label:"Orchestrator",description:"Coordina al equipo y delega."},{value:"specialist",label:"Specialist",description:"Experto en un dominio; ejecuta tareas."},{value:"assistant",label:"Assistant",description:"Ayudante conversacional."},{value:"worker",label:"Worker",description:"Corre tareas autónomas."},{value:"monitor",label:"Monitor",description:"Observa estado y reporta."}],eh=e=>e.split(",").map(n=>n.trim()).filter(Boolean),UD=(e,n)=>e.filter(s=>s.spec?.agent===n||n==="super-agent"&&s.kind==="super_agent");function HD(e){return e.split(`
533
- `).map(n=>n.replace(/^[-*#>\s]+/,"").trim()).filter(n=>n.length>2&&!n.startsWith("```")).slice(0,12)}function qD({pid:e}){const{slug:n=""}=K_(),s=Ua(),[r,i]=v.useState("overview"),c=BD(),d=Qe(`/projects/${e}/agents/${n}`,()=>Jt.get(e,n)),f=Qe(`/projects/${e}/agents`,()=>Jt.list(e)),g=Qe(`/projects/${e}/routines`,()=>or.list(e)),m=Qe(`/projects/${e}/messages?agent=${n}`,()=>Xg.project(e,{agent:n,limit:200})),h=Qe(`/projects/${e}/agents/${n}/conversations`,()=>nx.list(e,n)),x=Qe(`/projects/${e}/tasks?all`,()=>lr.list(e,"all")),y=d.data,w=UD(g.data||[],n),S=(x.data||[]).filter(E=>E.agent===n),_=(f.data||[]).filter(E=>E.parent===n);if(d.isLoading)return l.jsx(Je,{});if(!y)return l.jsx("div",{className:"text-sm text-muted-fg",children:C("project.agent_detail.not_found")});const j=y.is_master?ks:vn;return l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex items-start justify-between gap-3",children:[l.jsxs("div",{className:"flex items-start gap-3",children:[l.jsx("button",{onClick:()=>s(`/p/${e}/agents`),className:"mt-1 text-muted-fg hover:text-foreground",children:l.jsx(yR,{size:16})}),l.jsx("div",{className:Ie("flex size-11 items-center justify-center rounded-xl bg-gradient-to-br",y.is_master?"from-violet-600 to-indigo-600":"from-slate-600 to-gray-600"),children:l.jsx(j,{className:"size-5 text-white"})}),l.jsxs("div",{children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsx("h1",{className:"text-lg font-semibold",children:y.slug}),y.is_master&&l.jsxs(Ue,{tone:"success",children:[l.jsx(ks,{size:10})," ",C("project.agents.orchestrator")]}),y.role&&l.jsx(Ue,{children:y.role}),y.model&&l.jsx(Ue,{tone:"info",children:y.model}),y.parent&&l.jsxs("button",{onClick:()=>s(`/p/${e}/agents/${y.parent}`),className:"text-[11px] text-violet-400 hover:underline",children:[C("project.agent_detail.reports_to")," ",y.parent]})]}),y.description&&l.jsx("p",{className:"mt-0.5 max-w-2xl text-xs text-muted-fg",children:y.description})]})]}),l.jsxs(he,{size:"sm",variant:"primary",onClick:()=>s(`/p/${e}/chat?agent=${n}`),children:[l.jsx(Za,{size:13})," ",C("project.agent_detail.chat_btn",{slug:y.slug})]})]}),l.jsx("div",{className:"flex flex-wrap gap-1 border-b border-border",children:c.map(({key:E,label:k,icon:N})=>l.jsxs("button",{onClick:()=>i(E),className:Ie("flex items-center gap-1.5 border-b-2 px-3 py-2 text-sm transition-colors -mb-px",r===E?"border-foreground text-foreground":"border-transparent text-muted-fg hover:text-foreground"),children:[l.jsx(N,{size:14})," ",k]},E))}),r==="overview"&&l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4",children:[l.jsx(Pu,{label:"Threads",value:h.data?.length??0,icon:ki}),l.jsx(Pu,{label:"Records",value:m.data?.length??0,icon:oj}),l.jsx(Pu,{label:"Tasks",value:S.length,icon:wd}),l.jsx(Pu,{label:"Heartbeats",value:w.length,icon:Go})]}),l.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[l.jsx(He,{title:"Skills & tools",description:"",children:l.jsxs("div",{className:"flex flex-wrap gap-1",children:[y.skills?.map(E=>l.jsxs(Ue,{tone:"info",children:[l.jsx(ol,{size:10})," ",E]},E)),y.tools?.map(E=>l.jsxs(Ue,{children:[l.jsx(ll,{size:10})," ",E]},E)),!y.skills?.length&&!y.tools?.length&&l.jsx("span",{className:"text-xs text-muted-fg",children:"—"})]})}),l.jsx(He,{title:C("project.agent_detail.threads_recent"),description:"",children:l.jsxs("ul",{className:"space-y-1 text-xs",children:[(h.data||[]).slice(0,6).map(E=>l.jsxs("li",{className:"flex items-center justify-between rounded-md bg-muted/30 px-2 py-1",children:[l.jsx("span",{className:"truncate",children:E.title||E.filename}),l.jsxs("span",{className:"shrink-0 text-muted-fg",children:[E.messages??0," ",C("project.agent_detail.msgs_count")]})]},E.id)),!h.data?.length&&l.jsx("li",{className:"text-muted-fg",children:C("project.agent_detail.no_threads")})]})})]}),_.length>0&&l.jsx(He,{title:C("project.agent_detail.subagents"),description:C("project.agent_detail.subagents_desc"),children:l.jsx("div",{className:"flex flex-wrap gap-2",children:_.map(E=>l.jsxs("button",{onClick:()=>s(`/p/${e}/agents/${E.slug}`),className:"flex items-center gap-2 rounded-lg border border-border bg-muted/30 px-3 py-1.5 text-sm hover:border-muted-fg/50",children:[l.jsx(vn,{size:14,className:"text-muted-fg"})," ",E.slug]},E.slug))})})]}),r==="memories"&&l.jsx($D,{pid:e,slug:n,initial:y.memory||"",onSaved:()=>d.mutate()}),r==="records"&&l.jsx(GD,{records:m.data||[],loading:m.isLoading}),r==="sleep"&&l.jsx(YD,{routines:w}),r==="brain"&&l.jsx(XD,{slug:n,memory:y.memory||"",threads:(h.data||[]).map(E=>({id:E.id,label:E.title||E.filename})),tasks:S.map(E=>({id:E.id,label:E.title,detail:E.body||void 0})),routines:w,parent:y.parent||null,children:_.map(E=>E.slug)}),r==="config"&&l.jsx(VD,{pid:e,agent:y,agents:f.data||[],onSaved:()=>{d.mutate(),f.mutate()},onDeleted:()=>{f.mutate(),s(`/p/${e}/agents`)}})]})}function VD({pid:e,agent:n,agents:s,onSaved:r,onDeleted:i}){const c=rt(),[d,f]=v.useState(n.type||""),[g,m]=v.useState(n.area||""),[h,x]=v.useState(n.role||""),[y,w]=v.useState(n.model||""),[S,_]=v.useState(n.parent||""),[j,E]=v.useState(!!n.is_master),[k,N]=v.useState((n.skills||[]).join(", ")),[R,A]=v.useState((n.tools||[]).join(", ")),[M,O]=v.useState(n.description||""),[U,I]=v.useState(n.system||""),[B,L]=v.useState(!1),D=async()=>{L(!0);try{await Jt.update(e,n.slug,{type:d||null,area:g||null,role:h||null,model:y||null,parent:S||null,is_master:j||d==="orchestrator",skills:eh(k),tools:eh(R),description:M||null,system:U}),c.success(C("project.agent_detail.update_success")),r()}catch(F){c.error(F.message)}finally{L(!1)}},q=async()=>{if(confirm(C("project.agent_detail.delete_confirm",{slug:n.slug})))try{await Jt.remove(e,n.slug),c.success(C("project.agent_detail.delete_success")),i()}catch(F){c.error(F.message)}};return l.jsx(He,{title:C("project.agent_detail.config_title"),description:`.apc/agents/${n.slug}.md — definición (frontmatter + system prompt).`,children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agent_detail.type_label"),children:l.jsx(Ct,{value:d,onChange:f,options:ID})}),l.jsx(fe,{label:C("project.agent_detail.area_label"),hint:C("project.agent_detail.area_hint"),children:l.jsx(Ce,{value:g,onChange:F=>m(F.target.value),placeholder:C("project.agent_detail.area_ph")})})]}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agent_detail.role_label"),children:l.jsx(Ce,{value:h,onChange:F=>x(F.target.value),placeholder:"Operations Lead"})}),l.jsx(fe,{label:C("project.agent_detail.parent_label"),children:l.jsx(Ct,{value:S,onChange:_,placeholder:C("project.agent_detail.none_parent"),options:[{value:"",label:C("project.agent_detail.none_parent")},...s.filter(F=>F.slug!==n.slug).map(F=>({value:F.slug,label:F.slug}))]})})]}),l.jsx(fe,{label:C("project.agent_detail.model_label"),hint:C("project.agent_detail.model_hint"),children:l.jsx(Ce,{value:y,onChange:F=>w(F.target.value),placeholder:C("project.agent_detail.model_ph")})}),l.jsx(fe,{label:C("project.agent_detail.skills_label"),children:l.jsx(Ce,{value:k,onChange:F=>N(F.target.value),placeholder:"skill-a, skill-b"})}),l.jsx(FD,{value:R,onChange:A}),l.jsx(fe,{label:C("project.agent_detail.bio_label"),children:l.jsx(Qt,{rows:2,value:M,onChange:F=>O(F.target.value)})}),l.jsx(fe,{label:C("project.agent_detail.system_label"),hint:C("project.agent_detail.system_hint"),children:l.jsx(Qt,{rows:10,className:"font-mono text-xs",value:U,onChange:F=>I(F.target.value),placeholder:"You are…"})}),l.jsx(sn,{checked:j,onChange:E,label:C("project.agent_detail.master_label")}),l.jsxs("div",{className:"flex items-center justify-between border-t border-border pt-3",children:[l.jsxs(he,{variant:"destructive",onClick:q,children:[l.jsx(Ms,{size:13})," ",C("project.agent_detail.delete_btn")]}),l.jsxs(he,{variant:"primary",loading:B,onClick:D,children:[l.jsx(hh,{size:13})," ",C("project.agent_detail.save_btn")]})]})]})})}function Pu({label:e,value:n,icon:s}){return l.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-3",children:[l.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-fg",children:[l.jsx(s,{size:13})," ",e]}),l.jsx("div",{className:"mt-1 text-2xl font-semibold",children:n})]})}function $D({pid:e,slug:n,initial:s,onSaved:r}){const i=rt(),[c,d]=v.useState(s),[f,g]=v.useState(!1);v.useEffect(()=>{d(s)},[s]);const m=c!==s,h=async()=>{g(!0);try{await Jt.memory.put(e,n,c),i.success(C("project.agent_detail.memory_saved")),r()}catch(x){i.error(x.message)}finally{g(!1)}};return l.jsxs(He,{title:C("project.agent_detail.memory_title"),description:`.apc/agents/${n}/memory.md — hechos durables que el agente recuerda.`,children:[l.jsx(Qt,{rows:16,className:"font-mono text-xs",value:c,onChange:x=>d(x.target.value),placeholder:C("project.agent_detail.memory_empty")}),l.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[l.jsxs("span",{className:"text-[11px] text-muted-fg",children:[c.length," ",C("project.memories.chars")]}),l.jsxs(he,{size:"sm",variant:"primary",loading:f,disabled:!m,onClick:h,children:[l.jsx(hh,{size:12})," ",C("project.memories.save_btn")]})]})]})}function GD({records:e,loading:n}){const s=v.useMemo(()=>[...e].sort((r,i)=>(i.ts||"").localeCompare(r.ts||"")),[e]);return l.jsxs(He,{title:C("project.agent_detail.records_title"),description:C("project.agent_detail.records_desc"),children:[n&&l.jsx(Je,{}),!n&&s.length===0&&l.jsx("p",{className:"text-xs text-muted-fg",children:C("project.agent_detail.no_activity")}),l.jsx("ul",{className:"space-y-1 text-sm",children:s.map((r,i)=>l.jsxs("li",{className:"flex items-start gap-2 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx("span",{className:"mt-0.5 shrink-0",children:r.direction==="in"?l.jsx(lj,{size:13,className:"text-blue-400"}):l.jsx(cj,{size:13,className:"text-emerald-400"})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[11px] text-muted-fg",children:[l.jsx("span",{className:"font-mono",children:new Date(r.ts).toLocaleString()}),l.jsx(Ue,{tone:"info",children:r.channel}),r.type&&l.jsx(Ue,{children:r.type})]}),r.body&&l.jsx("p",{className:"mt-1 whitespace-pre-wrap break-words text-xs",children:r.body.length>400?`${r.body.slice(0,400)}…`:r.body})]})]},`${r.ts}-${i}`))})]})}function YD({routines:e}){return e.length===0?l.jsx(He,{title:C("project.agent_detail.sleep_title"),description:C("project.agent_detail.sleep_desc"),children:l.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 p-4 text-sm",children:[l.jsx("div",{className:"font-medium text-amber-400",children:C("project.agent_detail.sleep_deep")}),l.jsx("p",{className:"mt-1 text-xs text-muted-fg",children:C("project.agent_detail.sleep_deep_desc")})]})}):l.jsx(He,{title:C("project.agent_detail.sleep_title"),description:C("project.agent_detail.sleep_desc"),children:l.jsx("div",{className:"space-y-3",children:e.map(n=>{const s=n.enabled,r=n.last_status==="error";return l.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-3",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:Ie("size-2 rounded-full",r?"bg-destructive":s?"bg-emerald-400":"bg-muted-fg/40")}),l.jsx("span",{className:"text-sm font-medium",children:n.name}),l.jsx(Ue,{tone:s?"success":"muted",children:s?"running":"paused"}),r&&l.jsx(Ue,{tone:"danger",children:"last: error"})]}),l.jsxs("div",{className:"mt-2 grid grid-cols-2 gap-2 text-xs sm:grid-cols-4",children:[l.jsx(Bu,{label:"Tick",value:n.schedule}),l.jsx(Bu,{label:"Next tick",value:n.next_run_at?new Date(n.next_run_at).toLocaleString():"—"}),l.jsx(Bu,{label:"Last tick",value:n.last_run_at?new Date(n.last_run_at).toLocaleString():"—"}),l.jsx(Bu,{label:"Last run",value:n.last_status||"—"})]}),n.last_error&&l.jsx("p",{className:"mt-2 rounded-md bg-destructive/10 px-2 py-1 text-[11px] text-destructive",children:n.last_error})]},n.name)})})})}function Bu({label:e,value:n}){return l.jsxs("div",{className:"rounded-md border border-border bg-card p-2",children:[l.jsx("div",{className:"text-[10px] uppercase tracking-wide text-muted-fg",children:e}),l.jsx("div",{className:"mt-0.5 truncate font-mono text-[11px]",children:n})]})}function FD({value:e,onChange:n}){const s=Qe("/tools",()=>e5.list()),r=eh(e),i=s.data||[],c=f=>{const g=new Set(r);g.has(f)?g.delete(f):g.add(f),n([...g].join(", "))},d=r.filter(f=>!i.some(g=>g.name===f));return l.jsxs(fe,{label:"Tools",hint:C("project.agent_detail.tools_hint"),children:[l.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[i.map(f=>{const g=r.includes(f.name);return l.jsx("button",{type:"button",title:f.description||f.name,onClick:()=>c(f.name),className:Ie("rounded-md border px-2 py-0.5 font-mono text-[11px] transition-colors",g?"border-emerald-500/50 bg-emerald-500/10 text-emerald-400":"border-border text-muted-fg hover:text-foreground"),children:f.name},f.name)}),d.map(f=>l.jsxs("button",{type:"button",onClick:()=>c(f),className:"rounded-md border border-sky-500/50 bg-sky-500/10 px-2 py-0.5 font-mono text-[11px] text-sky-400",children:[f," ✕"]},f))]}),l.jsx(Ce,{className:"mt-2",value:e,onChange:f=>n(f.target.value),placeholder:C("project.agent_detail.tools_custom_ph")})]})}function XD({slug:e,memory:n,threads:s,tasks:r,routines:i,parent:c,children:d}){const f=v.useMemo(()=>{const g=[];return HD(n).forEach((m,h)=>g.push({id:`m${h}`,label:m,kind:"memory",relation:"knows",detail:m})),s.slice(0,8).forEach(m=>g.push({id:`th-${m.id}`,label:m.label,kind:"thread",relation:"in_thread"})),r.slice(0,8).forEach(m=>g.push({id:`ts-${m.id}`,label:m.label,kind:"task",relation:"handles_task",detail:m.detail})),i.forEach(m=>g.push({id:`rt-${m.name}`,label:m.name,kind:"routine",relation:"ticks",detail:`schedule: ${m.schedule}`})),c&&g.push({id:`p-${c}`,label:c,kind:"agentlink",relation:"reports_to"}),d.forEach(m=>g.push({id:`c-${m}`,label:m,kind:"agentlink",relation:"orchestrates"})),g},[n,s,r,i,c,d]);return l.jsx(He,{title:C("project.agent_detail.brain_title"),description:C("project.agent_detail.brain_desc"),children:f.length===0?l.jsx("p",{className:"text-xs text-muted-fg",children:C("project.agent_detail.brain_empty")}):l.jsx(PD,{center:e,nodes:f})})}function KD(){const e=Ua(),n=ea(),s=rt(),{pid:r=""}=K_(),{project:i,mutate:c}=lw(r),{collapsed:d,toggle:f}=zw(Cn.sidebarCollapsed+".project"),g=String(r)==="0",m=v.useMemo(()=>g?[{title:C("base.nav_general"),items:[{key:"",label:"Dashboard",icon:GR},{key:"workspaces",label:C("base.workspaces_title"),icon:jR},{key:"models",label:C("settings.tabs.engines"),icon:fh},{key:"agent-defaults",label:C("base.defaults_title"),icon:vn}]},{title:C("base.nav_activity"),items:[{key:"chat",label:C("project.nav.chat"),icon:ki},{key:"sessions",label:C("base.sessions_title"),icon:HR},{key:"tasks",label:C("project.nav.tasks"),icon:Bi},{key:"logs",label:C("project.nav.logs"),icon:Eg}]},{title:C("base.nav_system"),items:[{key:"agents",label:C("project.nav.agents"),icon:vn},{key:"memories",label:C("project.nav.memories"),icon:Ju},{key:"routines",label:C("project.nav.routines"),icon:Go},{key:"mcps",label:C("project.nav.mcps"),icon:Cg},{key:"config",label:C("project.nav.config"),icon:ed}]}]:[{title:C("project.sections.workspace"),items:[{key:"",label:C("project.nav.overview"),icon:mj},{key:"telegram",label:C("project.nav.telegram"),icon:Za},{key:"chat",label:C("project.nav.chat"),icon:ki},{key:"threads",label:C("project.nav.threads"),icon:ki},{key:"agents",label:C("project.nav.agents"),icon:vn},{key:"memories",label:C("project.nav.memories"),icon:Ju}]},{title:C("project.sections.automation"),items:[{key:"routines",label:C("project.nav.routines"),icon:Go},{key:"tasks",label:C("project.nav.tasks"),icon:Bi},{key:"mcps",label:C("project.nav.mcps"),icon:Cg},{key:"logs",label:C("project.nav.logs"),icon:Eg}]},{title:C("project.sections.config"),items:[{key:"config",label:C("project.nav.config"),icon:ed}]}],[g]),h=n.pathname.replace(`/p/${r}`,"").replace(/^\//,"").split("/")[0];if(!i)return l.jsx("div",{className:"p-8 text-muted-fg",children:C("project.not_found",{pid:r})});const x=async()=>{try{await Qn.rebuild(r),s.success(C("project.rebuild_done"))}catch(_){s.error(_.message)}},y=async()=>{const _=i.name||i.path;if(confirm(C("project.unregister_confirm",{label:_})))try{await Qn.remove(r),s.success(C("project.unregistered")),c(),e("/")}catch(j){s.error(j.message)}},w=_=>{const j=_?`/p/${r}/${_}`:`/p/${r}`;e(j)},S=Number(r)!==0?l.jsxs(l.Fragment,{children:[l.jsxs(he,{size:"sm",variant:"secondary",onClick:x,children:[l.jsx(rl,{size:13})," ",C("project.rebuild")]}),l.jsx(he,{size:"sm",variant:"destructive",onClick:y,children:C("admin.unregister")})]}):void 0;return l.jsx(Dw,{sections:m,active:h,onChange:w,collapsed:d,onToggleCollapse:f,actions:S,contentClassName:"w-full space-y-6 p-6 pt-3",testId:`project-tab-${h||"overview"}`,children:l.jsxs(W_,{children:[l.jsx(qt,{index:!0,element:l.jsx(I1,{pid:r})}),l.jsx(qt,{path:"workspaces",element:l.jsx(D4,{})}),l.jsx(qt,{path:"models",element:l.jsx(Zw,{})}),l.jsx(qt,{path:"agent-defaults",element:l.jsx($O,{})}),l.jsx(qt,{path:"sessions",element:l.jsx(XO,{})}),l.jsx(qt,{path:"logs",element:l.jsx(OO,{pid:r})}),l.jsx(qt,{path:"config",element:l.jsx(gz,{pid:r})}),l.jsx(qt,{path:"telegram",element:l.jsx(Qz,{pid:r})}),l.jsx(qt,{path:"agents",element:l.jsx(vz,{pid:r})}),l.jsx(qt,{path:"agents/:slug",element:l.jsx(qD,{pid:r})}),l.jsx(qt,{path:"memories",element:l.jsx(Jz,{pid:r})}),l.jsx(qt,{path:"routines",element:l.jsx(Rz,{pid:r})}),l.jsx(qt,{path:"tasks",element:g?l.jsx(KO,{}):l.jsx(Tz,{pid:r})}),l.jsx(qt,{path:"mcps",element:l.jsx(Az,{pid:r})}),l.jsx(qt,{path:"threads",element:l.jsx(Oz,{pid:r})}),l.jsx(qt,{path:"chat",element:l.jsx(Xz,{pid:r})}),l.jsx(qt,{path:"*",element:l.jsx(I1,{pid:r})})]})})}function f2(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/identity",()=>E1.get());return{identity:e||{},error:n,isLoading:s,mutate:r,save:async c=>{const d=await E1.patch(c);return await r(d,{revalidate:!1}),d}}}const QD=["es","en","pt","fr","it","de"];function ZD(){const e=rt(),{identity:n,isLoading:s,save:r}=f2(),[i,c]=v.useState({}),[d,f]=v.useState(!1);if(v.useEffect(()=>{c(n)},[n]),s)return l.jsx(Je,{});const g=async()=>{f(!0);try{await r({owner_name:i.owner_name,owner_context:i.owner_context,language:i.language,timezone:i.timezone}),e.success(C("settings.identity.saved"))}catch(m){e.error(m.message)}finally{f(!1)}};return l.jsxs(He,{title:C("settings.identity.title"),description:C("settings.identity.subtitle"),children:[n?null:l.jsx(lt,{children:C("common.none_yet")}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("settings.identity.owner_name"),children:l.jsx(Ce,{value:i.owner_name||"",onChange:m=>c({...i,owner_name:m.target.value})})}),l.jsx(fe,{label:C("settings.identity.language"),children:l.jsx(Ct,{value:i.language||"es",onChange:m=>c({...i,language:m}),options:QD.map(m=>({value:m,label:m}))})}),l.jsx(fe,{label:C("settings.identity.timezone"),hint:"ej. America/Argentina/Buenos_Aires",children:l.jsx(Ce,{value:i.timezone||"",onChange:m=>c({...i,timezone:m.target.value})})})]}),l.jsx("div",{className:"mt-3",children:l.jsx(fe,{label:C("settings.identity.owner_context"),hint:"Quién sos, en qué trabajás, qué le interesa al agente saber de vos.",children:l.jsx(Qt,{rows:3,value:i.owner_context||"",onChange:m=>c({...i,owner_context:m.target.value})})})}),l.jsx("div",{className:"mt-4",children:l.jsx(he,{variant:"primary",loading:d,onClick:g,children:C("common.save")})})]})}function JD(){const e=rt(),n=Ua(),{superAgent:s,isLoading:r,mutate:i}=Kw(),{patch:c}=vr(),{identity:d,save:f}=f2(),[g,m]=v.useState(!0),[h,x]=v.useState(""),[y,w]=v.useState(""),[S,_]=v.useState("permiso"),[j,E]=v.useState(!1);if(v.useEffect(()=>{s&&(m(!!s.enabled),x(s.system||""),_(s.permission_mode||"permiso"))},[s]),v.useEffect(()=>{w(d.personality||"")},[d.personality]),r||!s)return l.jsx(Je,{});const k=async()=>{E(!0);try{await c({"super_agent.enabled":g,"super_agent.system":h,"super_agent.permission_mode":S},["super_agent.name"]),await f({personality:y}),e.success(C("settings.super_agent.saved")),i()}catch(N){e.error(N.message)}finally{E(!1)}};return l.jsx(He,{title:C("settings.super_agent.title"),description:"Comportamiento del super-agente. El modelo y la cadena de fallback se configuran en el Router de modelos.",children:l.jsxs("div",{className:"space-y-4",children:[l.jsx("div",{className:"flex items-center gap-3",children:l.jsx(sn,{checked:g,onChange:m,label:"Super-agente habilitado"})}),l.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-border bg-muted/20 p-3",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx("div",{className:"text-sm font-medium",children:"Modelo activo (router)"}),l.jsx("div",{className:"truncate font-mono text-xs text-muted-fg",children:s.model||"—"})]}),l.jsxs(he,{size:"sm",variant:"secondary",onClick:()=>n("/p/0/models"),children:[l.jsx(fh,{size:13})," Configurar en Modelos"]})]}),l.jsx(fe,{label:C("settings.super_agent.permission_mode"),children:l.jsx(Ct,{value:S,onChange:_,options:xh.map(N=>({value:N,label:N}))})}),l.jsx(fe,{label:C("settings.super_agent.personality"),children:l.jsx(Qt,{rows:2,value:y,onChange:N=>w(N.target.value)})}),l.jsx(fe,{label:C("settings.super_agent.system"),hint:C("settings.super_agent.system_hint"),children:l.jsx(Qt,{rows:6,className:"font-mono text-xs",value:h,onChange:N=>x(N.target.value),placeholder:"(Vacío = se usa el prompt base de core/agent/prompts/super-agent-base.md)"})}),l.jsx(he,{variant:"primary",loading:j,onClick:k,children:C("common.save")})]})})}const Xp={providers:()=>ge.get("/embeddings/providers"),test:(e={})=>ge.post("/embeddings/test",e),reindex:()=>ge.post("/embeddings/reindex",{})},WD=[{value:"auto",label:"Automático (cadena: Ollama → Gemini → OpenAI → offline)"},{value:"ollama",label:"Ollama — local, sin API key (nomic-embed-text)"},{value:"gemini",label:"Gemini — free tier con key (text-embedding-004)"},{value:"openai",label:"OpenAI — text-embedding-3-small (cloud)"},{value:"tf",label:"Offline (term-frequency, sin modelo — degradado)"}],e6=[{value:"chain",label:"Cadena (fallback automático)"},{value:"single",label:"Único (usa solo el elegido)"}],n_=e=>e.startsWith("***");function t6(){const e=rt(),{config:n,isLoading:s,patch:r}=vr(),{data:i,mutate:c}=Qe("/embeddings/providers",()=>Xp.providers()),[d,f]=v.useState(!1),[g,m]=v.useState(null);if(s)return l.jsx(Je,{});const x=(n.memory||{}).embeddings||{},y=i?.configured_provider||x.provider||"auto",w=i?.mode||x.mode||"chain",S=i?.engines||[],_=async k=>{f(!0);try{await r(k),await c()}catch(N){e.error(`No se pudo guardar: ${N.message}`)}finally{f(!1)}},j=async()=>{f(!0),m(null);try{const k=await Xp.test({});m(`${k.embedder} · dim ${k.dim} · ${k.ms}ms`),e.success(`Embedding OK con ${k.embedder}`)}catch(k){e.error(`Falló el test: ${k.message}`)}finally{f(!1)}},E=async()=>{f(!0);try{const k=await Xp.reindex();e.success(`Reindexado: ${k.indexed} chunks (limpiados ${k.cleared}).`)}catch(k){e.error(`Falló el reindex: ${k.message}`)}finally{f(!1)}};return l.jsxs("div",{className:"space-y-6",children:[l.jsx(He,{title:"Embeddings (RAG)",description:"Modelo que vectoriza el historial de todos los canales para la memoria relevante. Igual que TTS/STT: elegí proveedor y modelo. 'Automático' prueba local primero y cae al offline si no hay nada.",children:l.jsxs("div",{className:"space-y-3",children:[l.jsx(fe,{label:"Proveedor",hint:"Ollama es local y gratis. Gemini/OpenAI usan la API key de su sección en Modelos (o la de acá abajo).",children:l.jsx(Ct,{value:y,onChange:k=>_({"memory.embeddings.provider":k}),options:WD,disabled:d,className:"max-w-xl"})}),l.jsx(fe,{label:"Modo de selección",hint:"Cadena cae al siguiente si uno falla; Único usa exactamente el proveedor elegido.",children:l.jsx(Ct,{value:w,onChange:k=>_({"memory.embeddings.mode":k}),options:e6,disabled:d,className:"max-w-md"})}),l.jsx("div",{className:"flex flex-wrap items-center gap-2 pt-1",children:S.map(k=>l.jsxs(Ue,{tone:k.available?"success":"muted",children:[k.id,": ",k.available?"disponible":"no disp."]},k.id))}),l.jsxs("div",{className:"flex flex-wrap items-center gap-3 pt-1",children:[l.jsxs(he,{variant:"secondary",onClick:j,loading:d,children:[l.jsx(ol,{size:14})," Probar embedding"]}),l.jsxs(he,{variant:"secondary",onClick:E,loading:d,children:[l.jsx(dj,{size:14})," Reindexar memoria"]}),g&&l.jsx("span",{className:"text-sm text-muted-foreground",children:g})]})]})}),l.jsxs(He,{title:"Ollama (local)",description:"Sin API key. Corre nomic-embed-text en tu Ollama local o cloud.",children:[l.jsx(fe,{label:"Modelo",children:l.jsx(Ce,{defaultValue:x.ollama?.model||"nomic-embed-text",placeholder:"nomic-embed-text",disabled:d,onBlur:k=>{const N=k.target.value.trim();N&&N!==x.ollama?.model&&_({"memory.embeddings.ollama.model":N})},className:"max-w-md"})}),l.jsx(fe,{label:"Base URL",hint:"Vacío usa engines.ollama.base_url (por defecto http://localhost:11434).",children:l.jsx(Ce,{defaultValue:x.ollama?.base_url||"",placeholder:"http://localhost:11434",disabled:d,onBlur:k=>_({"memory.embeddings.ollama.base_url":k.target.value.trim()}),className:"max-w-md"})})]}),l.jsxs(He,{title:"OpenAI",description:"text-embedding-3-small (1536 dims) u otro modelo compatible.",children:[l.jsx(fe,{label:"Modelo",children:l.jsx(Ce,{defaultValue:x.openai?.model||"text-embedding-3-small",placeholder:"text-embedding-3-small",disabled:d,onBlur:k=>{const N=k.target.value.trim();N&&N!==x.openai?.model&&_({"memory.embeddings.openai.model":N})},className:"max-w-md"})}),l.jsx(fe,{label:"API key",hint:"Vacío reusa engines.openai.api_key. Dejalo en blanco para no tocar la guardada.",children:l.jsx(Ce,{type:"password",defaultValue:x.openai?.api_key||"",placeholder:"sk-…",disabled:d,onBlur:k=>{const N=k.target.value;N&&!n_(N)&&_({"memory.embeddings.openai.api_key":N})},className:"max-w-md"})})]}),l.jsxs(He,{title:"Gemini",description:"text-embedding-004 (768 dims). Free tier con API key de Google.",children:[l.jsx(fe,{label:"Modelo",children:l.jsx(Ce,{defaultValue:x.gemini?.model||"text-embedding-004",placeholder:"text-embedding-004",disabled:d,onBlur:k=>{const N=k.target.value.trim();N&&N!==x.gemini?.model&&_({"memory.embeddings.gemini.model":N})},className:"max-w-md"})}),l.jsx(fe,{label:"API key",hint:"Vacío reusa engines.gemini.api_key.",children:l.jsx(Ce,{type:"password",defaultValue:x.gemini?.api_key||"",placeholder:"AIza…",disabled:d,onBlur:k=>{const N=k.target.value;N&&!n_(N)&&_({"memory.embeddings.gemini.api_key":N})},className:"max-w-md"})})]})]})}function n6(){const e=rt(),{config:n,isLoading:s,patch:r,mutate:i}=vr(),c=n.telegram?.channels||[],d=Math.max(0,c.findIndex(A=>A.name==="default")),f=c[d],[g,m]=v.useState(!0),[h,x]=v.useState(1500),[y,w]=v.useState(!0),[S,_]=v.useState(""),[j,E]=v.useState(""),[k,N]=v.useState(!1);if(v.useEffect(()=>{m(!!n.telegram?.enabled),x(Number(n.telegram?.poll_interval_ms||1500)),w(!!n.telegram?.respond_with_engine),_(""),E(f?.chat_id||"")},[n,f?.chat_id]),s)return l.jsx(Je,{});const R=async()=>{N(!0);try{const A=c.slice(),M={name:"default",chat_id:j,respond_with_engine:y,...S?{bot_token:S}:{}};c.length===0?A.push(M):A[d]={...f,...M},await r({"telegram.enabled":g,"telegram.poll_interval_ms":h,"telegram.respond_with_engine":y,"telegram.channels":A}),e.success(C("settings.telegram_global.saved")),i(),_("")}catch(A){e.error(A.message)}finally{N(!1)}};return l.jsx(He,{title:C("settings.telegram_global.title"),description:C("settings.telegram_global.subtitle"),children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"flex items-center gap-3",children:[l.jsx(sn,{checked:g,onChange:m,label:C("settings.telegram_global.enabled")}),l.jsx(sn,{checked:y,onChange:w,label:C("settings.telegram_global.respond_with_engine")})]}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("settings.telegram_global.bot_token"),hint:f?.bot_token?`…${el(f.bot_token)??""} (seteado — escribí para reemplazar)`:"Token del BotFather.",children:l.jsx(Ce,{type:"password",value:S,onChange:A=>_(A.target.value),placeholder:f?.bot_token?`…${el(f.bot_token)??""} (ya seteado)`:""})}),l.jsx(fe,{label:C("settings.telegram_global.chat_id"),children:l.jsx(Ce,{value:j,onChange:A=>E(A.target.value),placeholder:"889721252"})}),l.jsx(fe,{label:C("settings.telegram_global.poll_interval"),children:l.jsx(Ce,{type:"number",value:String(h),onChange:A=>x(Number(A.target.value)||1500)})})]}),l.jsx(he,{variant:"primary",loading:k,onClick:R,children:C("common.save")})]})})}function a6(){const e=rt(),{channels:n,isLoading:s,mutate:r}=ux(),{contacts:i}=dx(),[c,d]=v.useState(null),[f,g]=v.useState(null),m=new Map;for(const x of i)m.set(String(x.user_id),x.name||`@${x.username||x.user_id}`);const h=async x=>{if(confirm(C("telegram_channels.delete_confirm",{name:x})))try{await kn.channels.remove(x),e.success(C("telegram_channels.removed")),r()}catch(y){e.error(y.message)}};return l.jsxs(He,{title:C("telegram_channels.title"),description:C("telegram_channels.desc"),action:l.jsxs(he,{size:"sm",onClick:()=>d({name:""}),children:[l.jsx(Rn,{size:14})," ",C("telegram_channels.new_btn")]}),children:[s&&l.jsx(Je,{}),!s&&n.length===0&&l.jsx(lt,{children:C("telegram_channels.empty")}),l.jsx("ul",{className:"space-y-2 text-sm",children:n.map(x=>{const y=x.owner_user_id!=null?m.get(String(x.owner_user_id))||`user_id ${x.owner_user_id}`:C("telegram_channels.no_owner");return l.jsxs("li",{className:"rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsx("span",{className:"font-medium",children:x.name}),l.jsxs("div",{className:"flex items-center gap-2",children:[x.project&&l.jsxs(Ue,{tone:"success",children:["project = ",x.project]}),l.jsxs(he,{size:"sm",variant:"ghost",onClick:()=>g(x),children:[l.jsx(Za,{size:13})," ",C("admin.telegram_send_test")]}),l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>d(x),children:C("common.edit")}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>h(x.name),children:C("common.delete")})]})]}),l.jsxs("div",{className:"mt-1 grid grid-cols-2 gap-2 text-xs text-muted-fg",children:[l.jsxs("span",{children:["chat_id: ",x.chat_id||"—"]}),l.jsxs("span",{children:["bot_token: ",x.bot_token?`…${el(x.bot_token)??""}`:"—"]}),l.jsxs("span",{children:["route_to_agent: ",x.route_to_agent||"default APX"]}),l.jsxs("span",{children:["engine: ",x.respond_with_engine?"sí":"no"]}),l.jsxs("span",{className:"col-span-2",children:[C("telegram_channels.owner_label")," ",y]})]})]},x.name)})}),l.jsx(Aw,{channel:c,onClose:()=>d(null),onSaved:()=>{d(null),r()}}),l.jsx(Mw,{channel:f,onClose:()=>g(null)})]})}const a_=new Set(["owner","guest"]);function s6(){const e=rt(),{roles:n,mutate:s,isLoading:r}=dx(),[i,c]=v.useState(""),[d,f]=v.useState(""),[g,m]=v.useState(!1),[h,x]=v.useState(!1),y=async()=>{const _=i.trim();if(!_){e.error(C("telegram_roles.name_required"));return}if(a_.has(_)){e.error(C("telegram_roles.builtin_error",{name:_}));return}x(!0);try{const j=g?"*":d.split(",").map(E=>E.trim()).filter(Boolean);await kn.roles.set(_,j),e.success(C("telegram_roles.saved",{name:_})),c(""),f(""),m(!1),s()}catch(j){e.error(j.message)}finally{x(!1)}},w=async _=>{if(confirm(C("telegram_roles.delete_confirm",{name:_})))try{await kn.roles.remove(_),e.success(C("telegram_roles.removed")),s()}catch(j){e.error(j.message)}},S=Object.entries(n);return l.jsxs(He,{title:C("telegram_roles.title"),description:C("telegram_roles.desc"),children:[r&&l.jsx(Je,{}),S.length===0&&!r&&l.jsx(lt,{children:C("telegram_roles.empty")}),S.length>0&&l.jsx("ul",{className:"space-y-2 text-sm",children:S.map(([_,j])=>{const E=a_.has(_),k=j?.tools==="*"?C("telegram_roles.tools_all"):Array.isArray(j?.tools)&&j.tools.length>0?j.tools.join(", "):C("telegram_roles.tools_none");return l.jsxs("li",{className:"rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx("span",{className:"font-medium",children:_}),E&&l.jsx(Ue,{tone:"info",children:C("telegram_roles.builtin")})]}),!E&&l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>w(_),children:C("telegram_roles.delete_btn")})]}),l.jsxs("div",{className:"mt-1 text-xs text-muted-fg",children:["tools: ",k]})]},_)})}),l.jsxs("div",{className:"mt-4 space-y-3 rounded-md border border-dashed border-border p-3",children:[l.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium",children:[l.jsx(Rn,{size:14})," ",C("telegram_roles.new_title")]}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("telegram_roles.name_label"),children:l.jsx(Ce,{value:i,onChange:_=>c(_.target.value),placeholder:C("telegram_roles.name_ph")})}),l.jsx(fe,{label:C("telegram_roles.tools_label"),hint:C("telegram_roles.tools_hint"),children:l.jsx(Ce,{value:d,onChange:_=>f(_.target.value),disabled:g,placeholder:C("telegram_roles.tools_ph")})})]}),l.jsxs("div",{className:"flex items-center justify-between gap-3",children:[l.jsx(sn,{checked:g,onChange:m,label:C("telegram_roles.full_access")}),l.jsx(he,{variant:"primary",loading:h,onClick:y,children:C("telegram_roles.save_btn")})]})]})]})}const m2="apx.settings.telegramTab";function r6(){if(typeof window>"u")return"default";const e=window.localStorage.getItem(m2);return e==="channels"||e==="contacts"||e==="roles"||e==="default"?e:"default"}function o6(){const[e,n]=v.useState("default");v.useEffect(()=>{n(r6())},[]);const s=r=>{const i=r==="channels"||r==="contacts"||r==="roles"||r==="default"?r:"default";n(i);try{window.localStorage.setItem(m2,i)}catch{}};return l.jsxs(Xd,{value:e,onValueChange:s,className:"w-full",children:[l.jsxs(Kd,{children:[l.jsx(Da,{value:"default",children:C("settings.telegram_global.title")}),l.jsx(Da,{value:"channels",children:C("telegram_channels.title")}),l.jsx(Da,{value:"contacts",children:C("telegram_contacts.title")}),l.jsx(Da,{value:"roles",children:C("telegram_roles.title")})]}),l.jsx(La,{value:"default",className:"mt-4",children:l.jsx(n6,{})}),l.jsx(La,{value:"channels",className:"mt-4",children:l.jsx(a6,{})}),l.jsx(La,{value:"contacts",className:"mt-4",children:l.jsx(Ow,{})}),l.jsx(La,{value:"roles",className:"mt-4",children:l.jsx(s6,{})})]})}function l6(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/pair/list",()=>Jo.list(),{refreshInterval:Ed.pairList});return{clients:e?.clients||[],error:n,isLoading:s,mutate:r}}var Io={},Kp,s_;function i6(){return s_||(s_=1,Kp=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),Kp}var Qp={},rr={},r_;function Wr(){if(r_)return rr;r_=1;let e;const n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return rr.getSymbolSize=function(r){if(!r)throw new Error('"version" cannot be null or undefined');if(r<1||r>40)throw new Error('"version" should be in range from 1 to 40');return r*4+17},rr.getSymbolTotalCodewords=function(r){return n[r]},rr.getBCHDigit=function(s){let r=0;for(;s!==0;)r++,s>>>=1;return r},rr.setToSJISFunction=function(r){if(typeof r!="function")throw new Error('"toSJISFunc" is not a valid function.');e=r},rr.isKanjiModeEnabled=function(){return typeof e<"u"},rr.toSJIS=function(r){return e(r)},rr}var Zp={},o_;function kx(){return o_||(o_=1,(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function n(s){if(typeof s!="string")throw new Error("Param is not a string");switch(s.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+s)}}e.isValid=function(r){return r&&typeof r.bit<"u"&&r.bit>=0&&r.bit<4},e.from=function(r,i){if(e.isValid(r))return r;try{return n(r)}catch{return i}}})(Zp)),Zp}var Jp,l_;function c6(){if(l_)return Jp;l_=1;function e(){this.buffer=[],this.length=0}return e.prototype={get:function(n){const s=Math.floor(n/8);return(this.buffer[s]>>>7-n%8&1)===1},put:function(n,s){for(let r=0;r<s;r++)this.putBit((n>>>s-r-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(n){const s=Math.floor(this.length/8);this.buffer.length<=s&&this.buffer.push(0),n&&(this.buffer[s]|=128>>>this.length%8),this.length++}},Jp=e,Jp}var Wp,i_;function u6(){if(i_)return Wp;i_=1;function e(n){if(!n||n<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=n,this.data=new Uint8Array(n*n),this.reservedBit=new Uint8Array(n*n)}return e.prototype.set=function(n,s,r,i){const c=n*this.size+s;this.data[c]=r,i&&(this.reservedBit[c]=!0)},e.prototype.get=function(n,s){return this.data[n*this.size+s]},e.prototype.xor=function(n,s,r){this.data[n*this.size+s]^=r},e.prototype.isReserved=function(n,s){return this.reservedBit[n*this.size+s]},Wp=e,Wp}var eg={},c_;function d6(){return c_||(c_=1,(function(e){const n=Wr().getSymbolSize;e.getRowColCoords=function(r){if(r===1)return[];const i=Math.floor(r/7)+2,c=n(r),d=c===145?26:Math.ceil((c-13)/(2*i-2))*2,f=[c-7];for(let g=1;g<i-1;g++)f[g]=f[g-1]-d;return f.push(6),f.reverse()},e.getPositions=function(r){const i=[],c=e.getRowColCoords(r),d=c.length;for(let f=0;f<d;f++)for(let g=0;g<d;g++)f===0&&g===0||f===0&&g===d-1||f===d-1&&g===0||i.push([c[f],c[g]]);return i}})(eg)),eg}var tg={},u_;function f6(){if(u_)return tg;u_=1;const e=Wr().getSymbolSize,n=7;return tg.getPositions=function(r){const i=e(r);return[[0,0],[i-n,0],[0,i-n]]},tg}var ng={},d_;function m6(){return d_||(d_=1,(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const n={N1:3,N2:3,N3:40,N4:10};e.isValid=function(i){return i!=null&&i!==""&&!isNaN(i)&&i>=0&&i<=7},e.from=function(i){return e.isValid(i)?parseInt(i,10):void 0},e.getPenaltyN1=function(i){const c=i.size;let d=0,f=0,g=0,m=null,h=null;for(let x=0;x<c;x++){f=g=0,m=h=null;for(let y=0;y<c;y++){let w=i.get(x,y);w===m?f++:(f>=5&&(d+=n.N1+(f-5)),m=w,f=1),w=i.get(y,x),w===h?g++:(g>=5&&(d+=n.N1+(g-5)),h=w,g=1)}f>=5&&(d+=n.N1+(f-5)),g>=5&&(d+=n.N1+(g-5))}return d},e.getPenaltyN2=function(i){const c=i.size;let d=0;for(let f=0;f<c-1;f++)for(let g=0;g<c-1;g++){const m=i.get(f,g)+i.get(f,g+1)+i.get(f+1,g)+i.get(f+1,g+1);(m===4||m===0)&&d++}return d*n.N2},e.getPenaltyN3=function(i){const c=i.size;let d=0,f=0,g=0;for(let m=0;m<c;m++){f=g=0;for(let h=0;h<c;h++)f=f<<1&2047|i.get(m,h),h>=10&&(f===1488||f===93)&&d++,g=g<<1&2047|i.get(h,m),h>=10&&(g===1488||g===93)&&d++}return d*n.N3},e.getPenaltyN4=function(i){let c=0;const d=i.data.length;for(let g=0;g<d;g++)c+=i.data[g];return Math.abs(Math.ceil(c*100/d/5)-10)*n.N4};function s(r,i,c){switch(r){case e.Patterns.PATTERN000:return(i+c)%2===0;case e.Patterns.PATTERN001:return i%2===0;case e.Patterns.PATTERN010:return c%3===0;case e.Patterns.PATTERN011:return(i+c)%3===0;case e.Patterns.PATTERN100:return(Math.floor(i/2)+Math.floor(c/3))%2===0;case e.Patterns.PATTERN101:return i*c%2+i*c%3===0;case e.Patterns.PATTERN110:return(i*c%2+i*c%3)%2===0;case e.Patterns.PATTERN111:return(i*c%3+(i+c)%2)%2===0;default:throw new Error("bad maskPattern:"+r)}}e.applyMask=function(i,c){const d=c.size;for(let f=0;f<d;f++)for(let g=0;g<d;g++)c.isReserved(g,f)||c.xor(g,f,s(i,g,f))},e.getBestMask=function(i,c){const d=Object.keys(e.Patterns).length;let f=0,g=1/0;for(let m=0;m<d;m++){c(m),e.applyMask(m,i);const h=e.getPenaltyN1(i)+e.getPenaltyN2(i)+e.getPenaltyN3(i)+e.getPenaltyN4(i);e.applyMask(m,i),h<g&&(g=h,f=m)}return f}})(ng)),ng}var Iu={},f_;function p2(){if(f_)return Iu;f_=1;const e=kx(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],s=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Iu.getBlocksCount=function(i,c){switch(c){case e.L:return n[(i-1)*4+0];case e.M:return n[(i-1)*4+1];case e.Q:return n[(i-1)*4+2];case e.H:return n[(i-1)*4+3];default:return}},Iu.getTotalCodewordsCount=function(i,c){switch(c){case e.L:return s[(i-1)*4+0];case e.M:return s[(i-1)*4+1];case e.Q:return s[(i-1)*4+2];case e.H:return s[(i-1)*4+3];default:return}},Iu}var ag={},yi={},m_;function p6(){if(m_)return yi;m_=1;const e=new Uint8Array(512),n=new Uint8Array(256);return(function(){let r=1;for(let i=0;i<255;i++)e[i]=r,n[r]=i,r<<=1,r&256&&(r^=285);for(let i=255;i<512;i++)e[i]=e[i-255]})(),yi.log=function(r){if(r<1)throw new Error("log("+r+")");return n[r]},yi.exp=function(r){return e[r]},yi.mul=function(r,i){return r===0||i===0?0:e[n[r]+n[i]]},yi}var p_;function g6(){return p_||(p_=1,(function(e){const n=p6();e.mul=function(r,i){const c=new Uint8Array(r.length+i.length-1);for(let d=0;d<r.length;d++)for(let f=0;f<i.length;f++)c[d+f]^=n.mul(r[d],i[f]);return c},e.mod=function(r,i){let c=new Uint8Array(r);for(;c.length-i.length>=0;){const d=c[0];for(let g=0;g<i.length;g++)c[g]^=n.mul(i[g],d);let f=0;for(;f<c.length&&c[f]===0;)f++;c=c.slice(f)}return c},e.generateECPolynomial=function(r){let i=new Uint8Array([1]);for(let c=0;c<r;c++)i=e.mul(i,new Uint8Array([1,n.exp(c)]));return i}})(ag)),ag}var sg,g_;function h6(){if(g_)return sg;g_=1;const e=g6();function n(s){this.genPoly=void 0,this.degree=s,this.degree&&this.initialize(this.degree)}return n.prototype.initialize=function(r){this.degree=r,this.genPoly=e.generateECPolynomial(this.degree)},n.prototype.encode=function(r){if(!this.genPoly)throw new Error("Encoder not initialized");const i=new Uint8Array(r.length+this.degree);i.set(r);const c=e.mod(i,this.genPoly),d=this.degree-c.length;if(d>0){const f=new Uint8Array(this.degree);return f.set(c,d),f}return c},sg=n,sg}var rg={},og={},lg={},h_;function g2(){return h_||(h_=1,lg.isValid=function(n){return!isNaN(n)&&n>=1&&n<=40}),lg}var Ga={},x_;function h2(){if(x_)return Ga;x_=1;const e="[0-9]+",n="[A-Z $%*+\\-./:]+";let s="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";s=s.replace(/u/g,"\\u");const r="(?:(?![A-Z0-9 $%*+\\-./:]|"+s+`)(?:.|[\r
533
+ `).map(n=>n.replace(/^[-*#>\s]+/,"").trim()).filter(n=>n.length>2&&!n.startsWith("```")).slice(0,12)}function qD({pid:e}){const{slug:n=""}=K_(),s=Ua(),[r,i]=v.useState("overview"),c=BD(),d=Qe(`/projects/${e}/agents/${n}`,()=>Jt.get(e,n)),f=Qe(`/projects/${e}/agents`,()=>Jt.list(e)),g=Qe(`/projects/${e}/routines`,()=>or.list(e)),m=Qe(`/projects/${e}/messages?agent=${n}`,()=>Xg.project(e,{agent:n,limit:200})),h=Qe(`/projects/${e}/agents/${n}/conversations`,()=>nx.list(e,n)),x=Qe(`/projects/${e}/tasks?all`,()=>lr.list(e,"all")),y=d.data,w=UD(g.data||[],n),S=(x.data||[]).filter(E=>E.agent===n),_=(f.data||[]).filter(E=>E.parent===n);if(d.isLoading)return l.jsx(Je,{});if(!y)return l.jsx("div",{className:"text-sm text-muted-fg",children:C("project.agent_detail.not_found")});const j=y.is_master?ks:vn;return l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"flex items-start justify-between gap-3",children:[l.jsxs("div",{className:"flex items-start gap-3",children:[l.jsx("button",{onClick:()=>s(`/p/${e}/agents`),className:"mt-1 text-muted-fg hover:text-foreground",children:l.jsx(yR,{size:16})}),l.jsx("div",{className:Ie("flex size-11 items-center justify-center rounded-xl bg-gradient-to-br",y.is_master?"from-violet-600 to-indigo-600":"from-slate-600 to-gray-600"),children:l.jsx(j,{className:"size-5 text-white"})}),l.jsxs("div",{children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[l.jsx("h1",{className:"text-lg font-semibold",children:y.slug}),y.is_master&&l.jsxs(Ue,{tone:"success",children:[l.jsx(ks,{size:10})," ",C("project.agents.orchestrator")]}),y.role&&l.jsx(Ue,{children:y.role}),y.model&&l.jsx(Ue,{tone:"info",children:y.model}),y.parent&&l.jsxs("button",{onClick:()=>s(`/p/${e}/agents/${y.parent}`),className:"text-[11px] text-violet-400 hover:underline",children:[C("project.agent_detail.reports_to")," ",y.parent]})]}),y.description&&l.jsx("p",{className:"mt-0.5 max-w-2xl text-xs text-muted-fg",children:y.description})]})]}),l.jsxs(he,{size:"sm",variant:"primary",onClick:()=>s(`/p/${e}/chat?agent=${n}`),children:[l.jsx(Za,{size:13})," ",C("project.agent_detail.chat_btn",{slug:y.slug})]})]}),l.jsx("div",{className:"flex flex-wrap gap-1 border-b border-border",children:c.map(({key:E,label:k,icon:N})=>l.jsxs("button",{onClick:()=>i(E),className:Ie("flex items-center gap-1.5 border-b-2 px-3 py-2 text-sm transition-colors -mb-px",r===E?"border-foreground text-foreground":"border-transparent text-muted-fg hover:text-foreground"),children:[l.jsx(N,{size:14})," ",k]},E))}),r==="overview"&&l.jsxs("div",{className:"space-y-4",children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4",children:[l.jsx(Pu,{label:"Threads",value:h.data?.length??0,icon:ki}),l.jsx(Pu,{label:"Records",value:m.data?.length??0,icon:oj}),l.jsx(Pu,{label:"Tasks",value:S.length,icon:wd}),l.jsx(Pu,{label:"Heartbeats",value:w.length,icon:Go})]}),l.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[l.jsx(He,{title:"Skills & tools",description:"",children:l.jsxs("div",{className:"flex flex-wrap gap-1",children:[y.skills?.map(E=>l.jsxs(Ue,{tone:"info",children:[l.jsx(ol,{size:10})," ",E]},E)),y.tools?.map(E=>l.jsxs(Ue,{children:[l.jsx(ll,{size:10})," ",E]},E)),!y.skills?.length&&!y.tools?.length&&l.jsx("span",{className:"text-xs text-muted-fg",children:"—"})]})}),l.jsx(He,{title:C("project.agent_detail.threads_recent"),description:"",children:l.jsxs("ul",{className:"space-y-1 text-xs",children:[(h.data||[]).slice(0,6).map(E=>l.jsxs("li",{className:"flex items-center justify-between rounded-md bg-muted/30 px-2 py-1",children:[l.jsx("span",{className:"truncate",children:E.title||E.filename}),l.jsxs("span",{className:"shrink-0 text-muted-fg",children:[E.messages??0," ",C("project.agent_detail.msgs_count")]})]},E.id)),!h.data?.length&&l.jsx("li",{className:"text-muted-fg",children:C("project.agent_detail.no_threads")})]})})]}),_.length>0&&l.jsx(He,{title:C("project.agent_detail.subagents"),description:C("project.agent_detail.subagents_desc"),children:l.jsx("div",{className:"flex flex-wrap gap-2",children:_.map(E=>l.jsxs("button",{onClick:()=>s(`/p/${e}/agents/${E.slug}`),className:"flex items-center gap-2 rounded-lg border border-border bg-muted/30 px-3 py-1.5 text-sm hover:border-muted-fg/50",children:[l.jsx(vn,{size:14,className:"text-muted-fg"})," ",E.slug]},E.slug))})})]}),r==="memories"&&l.jsx($D,{pid:e,slug:n,initial:y.memory||"",onSaved:()=>d.mutate()}),r==="records"&&l.jsx(GD,{records:m.data||[],loading:m.isLoading}),r==="sleep"&&l.jsx(YD,{routines:w}),r==="brain"&&l.jsx(XD,{slug:n,memory:y.memory||"",threads:(h.data||[]).map(E=>({id:E.id,label:E.title||E.filename})),tasks:S.map(E=>({id:E.id,label:E.title,detail:E.body||void 0})),routines:w,parent:y.parent||null,children:_.map(E=>E.slug)}),r==="config"&&l.jsx(VD,{pid:e,agent:y,agents:f.data||[],onSaved:()=>{d.mutate(),f.mutate()},onDeleted:()=>{f.mutate(),s(`/p/${e}/agents`)}})]})}function VD({pid:e,agent:n,agents:s,onSaved:r,onDeleted:i}){const c=rt(),[d,f]=v.useState(n.type||""),[g,m]=v.useState(n.area||""),[h,x]=v.useState(n.role||""),[y,w]=v.useState(n.model||""),[S,_]=v.useState(n.parent||""),[j,E]=v.useState(!!n.is_master),[k,N]=v.useState((n.skills||[]).join(", ")),[R,A]=v.useState((n.tools||[]).join(", ")),[M,O]=v.useState(n.description||""),[U,I]=v.useState(n.system||""),[B,L]=v.useState(!1),D=async()=>{L(!0);try{await Jt.update(e,n.slug,{type:d||null,area:g||null,role:h||null,model:y||null,parent:S||null,is_master:j||d==="orchestrator",skills:eh(k),tools:eh(R),description:M||null,system:U}),c.success(C("project.agent_detail.update_success")),r()}catch(F){c.error(F.message)}finally{L(!1)}},q=async()=>{if(confirm(C("project.agent_detail.delete_confirm",{slug:n.slug})))try{await Jt.remove(e,n.slug),c.success(C("project.agent_detail.delete_success")),i()}catch(F){c.error(F.message)}};return l.jsx(He,{title:C("project.agent_detail.config_title"),description:`.apc/agents/${n.slug}.md — definición (frontmatter + system prompt).`,children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agent_detail.type_label"),children:l.jsx(Ct,{value:d,onChange:f,options:ID})}),l.jsx(fe,{label:C("project.agent_detail.area_label"),hint:C("project.agent_detail.area_hint"),children:l.jsx(Ce,{value:g,onChange:F=>m(F.target.value),placeholder:C("project.agent_detail.area_ph")})})]}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("project.agent_detail.role_label"),children:l.jsx(Ce,{value:h,onChange:F=>x(F.target.value),placeholder:"Operations Lead"})}),l.jsx(fe,{label:C("project.agent_detail.parent_label"),children:l.jsx(Ct,{value:S,onChange:_,placeholder:C("project.agent_detail.none_parent"),options:[{value:"",label:C("project.agent_detail.none_parent")},...s.filter(F=>F.slug!==n.slug).map(F=>({value:F.slug,label:F.slug}))]})})]}),l.jsx(fe,{label:C("project.agent_detail.model_label"),hint:C("project.agent_detail.model_hint"),children:l.jsx(Ce,{value:y,onChange:F=>w(F.target.value),placeholder:C("project.agent_detail.model_ph")})}),l.jsx(fe,{label:C("project.agent_detail.skills_label"),children:l.jsx(Ce,{value:k,onChange:F=>N(F.target.value),placeholder:"skill-a, skill-b"})}),l.jsx(FD,{value:R,onChange:A}),l.jsx(fe,{label:C("project.agent_detail.bio_label"),children:l.jsx(Qt,{rows:2,value:M,onChange:F=>O(F.target.value)})}),l.jsx(fe,{label:C("project.agent_detail.system_label"),hint:C("project.agent_detail.system_hint"),children:l.jsx(Qt,{rows:10,className:"font-mono text-xs",value:U,onChange:F=>I(F.target.value),placeholder:"You are…"})}),l.jsx(sn,{checked:j,onChange:E,label:C("project.agent_detail.master_label")}),l.jsxs("div",{className:"flex items-center justify-between border-t border-border pt-3",children:[l.jsxs(he,{variant:"destructive",onClick:q,children:[l.jsx(Ms,{size:13})," ",C("project.agent_detail.delete_btn")]}),l.jsxs(he,{variant:"primary",loading:B,onClick:D,children:[l.jsx(hh,{size:13})," ",C("project.agent_detail.save_btn")]})]})]})})}function Pu({label:e,value:n,icon:s}){return l.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-3",children:[l.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-fg",children:[l.jsx(s,{size:13})," ",e]}),l.jsx("div",{className:"mt-1 text-2xl font-semibold",children:n})]})}function $D({pid:e,slug:n,initial:s,onSaved:r}){const i=rt(),[c,d]=v.useState(s),[f,g]=v.useState(!1);v.useEffect(()=>{d(s)},[s]);const m=c!==s,h=async()=>{g(!0);try{await Jt.memory.put(e,n,c),i.success(C("project.agent_detail.memory_saved")),r()}catch(x){i.error(x.message)}finally{g(!1)}};return l.jsxs(He,{title:C("project.agent_detail.memory_title"),description:`~/.apx/projects/<id>/agents/${n}/memory.md — hechos durables que el agente recuerda.`,children:[l.jsx(Qt,{rows:16,className:"font-mono text-xs",value:c,onChange:x=>d(x.target.value),placeholder:C("project.agent_detail.memory_empty")}),l.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[l.jsxs("span",{className:"text-[11px] text-muted-fg",children:[c.length," ",C("project.memories.chars")]}),l.jsxs(he,{size:"sm",variant:"primary",loading:f,disabled:!m,onClick:h,children:[l.jsx(hh,{size:12})," ",C("project.memories.save_btn")]})]})]})}function GD({records:e,loading:n}){const s=v.useMemo(()=>[...e].sort((r,i)=>(i.ts||"").localeCompare(r.ts||"")),[e]);return l.jsxs(He,{title:C("project.agent_detail.records_title"),description:C("project.agent_detail.records_desc"),children:[n&&l.jsx(Je,{}),!n&&s.length===0&&l.jsx("p",{className:"text-xs text-muted-fg",children:C("project.agent_detail.no_activity")}),l.jsx("ul",{className:"space-y-1 text-sm",children:s.map((r,i)=>l.jsxs("li",{className:"flex items-start gap-2 rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsx("span",{className:"mt-0.5 shrink-0",children:r.direction==="in"?l.jsx(lj,{size:13,className:"text-blue-400"}):l.jsx(cj,{size:13,className:"text-emerald-400"})}),l.jsxs("div",{className:"min-w-0 flex-1",children:[l.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[11px] text-muted-fg",children:[l.jsx("span",{className:"font-mono",children:new Date(r.ts).toLocaleString()}),l.jsx(Ue,{tone:"info",children:r.channel}),r.type&&l.jsx(Ue,{children:r.type})]}),r.body&&l.jsx("p",{className:"mt-1 whitespace-pre-wrap break-words text-xs",children:r.body.length>400?`${r.body.slice(0,400)}…`:r.body})]})]},`${r.ts}-${i}`))})]})}function YD({routines:e}){return e.length===0?l.jsx(He,{title:C("project.agent_detail.sleep_title"),description:C("project.agent_detail.sleep_desc"),children:l.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 p-4 text-sm",children:[l.jsx("div",{className:"font-medium text-amber-400",children:C("project.agent_detail.sleep_deep")}),l.jsx("p",{className:"mt-1 text-xs text-muted-fg",children:C("project.agent_detail.sleep_deep_desc")})]})}):l.jsx(He,{title:C("project.agent_detail.sleep_title"),description:C("project.agent_detail.sleep_desc"),children:l.jsx("div",{className:"space-y-3",children:e.map(n=>{const s=n.enabled,r=n.last_status==="error";return l.jsxs("div",{className:"rounded-xl border border-border bg-muted/30 p-3",children:[l.jsxs("div",{className:"flex items-center gap-2",children:[l.jsx("span",{className:Ie("size-2 rounded-full",r?"bg-destructive":s?"bg-emerald-400":"bg-muted-fg/40")}),l.jsx("span",{className:"text-sm font-medium",children:n.name}),l.jsx(Ue,{tone:s?"success":"muted",children:s?"running":"paused"}),r&&l.jsx(Ue,{tone:"danger",children:"last: error"})]}),l.jsxs("div",{className:"mt-2 grid grid-cols-2 gap-2 text-xs sm:grid-cols-4",children:[l.jsx(Bu,{label:"Tick",value:n.schedule}),l.jsx(Bu,{label:"Next tick",value:n.next_run_at?new Date(n.next_run_at).toLocaleString():"—"}),l.jsx(Bu,{label:"Last tick",value:n.last_run_at?new Date(n.last_run_at).toLocaleString():"—"}),l.jsx(Bu,{label:"Last run",value:n.last_status||"—"})]}),n.last_error&&l.jsx("p",{className:"mt-2 rounded-md bg-destructive/10 px-2 py-1 text-[11px] text-destructive",children:n.last_error})]},n.name)})})})}function Bu({label:e,value:n}){return l.jsxs("div",{className:"rounded-md border border-border bg-card p-2",children:[l.jsx("div",{className:"text-[10px] uppercase tracking-wide text-muted-fg",children:e}),l.jsx("div",{className:"mt-0.5 truncate font-mono text-[11px]",children:n})]})}function FD({value:e,onChange:n}){const s=Qe("/tools",()=>e5.list()),r=eh(e),i=s.data||[],c=f=>{const g=new Set(r);g.has(f)?g.delete(f):g.add(f),n([...g].join(", "))},d=r.filter(f=>!i.some(g=>g.name===f));return l.jsxs(fe,{label:"Tools",hint:C("project.agent_detail.tools_hint"),children:[l.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[i.map(f=>{const g=r.includes(f.name);return l.jsx("button",{type:"button",title:f.description||f.name,onClick:()=>c(f.name),className:Ie("rounded-md border px-2 py-0.5 font-mono text-[11px] transition-colors",g?"border-emerald-500/50 bg-emerald-500/10 text-emerald-400":"border-border text-muted-fg hover:text-foreground"),children:f.name},f.name)}),d.map(f=>l.jsxs("button",{type:"button",onClick:()=>c(f),className:"rounded-md border border-sky-500/50 bg-sky-500/10 px-2 py-0.5 font-mono text-[11px] text-sky-400",children:[f," ✕"]},f))]}),l.jsx(Ce,{className:"mt-2",value:e,onChange:f=>n(f.target.value),placeholder:C("project.agent_detail.tools_custom_ph")})]})}function XD({slug:e,memory:n,threads:s,tasks:r,routines:i,parent:c,children:d}){const f=v.useMemo(()=>{const g=[];return HD(n).forEach((m,h)=>g.push({id:`m${h}`,label:m,kind:"memory",relation:"knows",detail:m})),s.slice(0,8).forEach(m=>g.push({id:`th-${m.id}`,label:m.label,kind:"thread",relation:"in_thread"})),r.slice(0,8).forEach(m=>g.push({id:`ts-${m.id}`,label:m.label,kind:"task",relation:"handles_task",detail:m.detail})),i.forEach(m=>g.push({id:`rt-${m.name}`,label:m.name,kind:"routine",relation:"ticks",detail:`schedule: ${m.schedule}`})),c&&g.push({id:`p-${c}`,label:c,kind:"agentlink",relation:"reports_to"}),d.forEach(m=>g.push({id:`c-${m}`,label:m,kind:"agentlink",relation:"orchestrates"})),g},[n,s,r,i,c,d]);return l.jsx(He,{title:C("project.agent_detail.brain_title"),description:C("project.agent_detail.brain_desc"),children:f.length===0?l.jsx("p",{className:"text-xs text-muted-fg",children:C("project.agent_detail.brain_empty")}):l.jsx(PD,{center:e,nodes:f})})}function KD(){const e=Ua(),n=ea(),s=rt(),{pid:r=""}=K_(),{project:i,mutate:c}=lw(r),{collapsed:d,toggle:f}=zw(Cn.sidebarCollapsed+".project"),g=String(r)==="0",m=v.useMemo(()=>g?[{title:C("base.nav_general"),items:[{key:"",label:"Dashboard",icon:GR},{key:"workspaces",label:C("base.workspaces_title"),icon:jR},{key:"models",label:C("settings.tabs.engines"),icon:fh},{key:"agent-defaults",label:C("base.defaults_title"),icon:vn}]},{title:C("base.nav_activity"),items:[{key:"chat",label:C("project.nav.chat"),icon:ki},{key:"sessions",label:C("base.sessions_title"),icon:HR},{key:"tasks",label:C("project.nav.tasks"),icon:Bi},{key:"logs",label:C("project.nav.logs"),icon:Eg}]},{title:C("base.nav_system"),items:[{key:"agents",label:C("project.nav.agents"),icon:vn},{key:"memories",label:C("project.nav.memories"),icon:Ju},{key:"routines",label:C("project.nav.routines"),icon:Go},{key:"mcps",label:C("project.nav.mcps"),icon:Cg},{key:"config",label:C("project.nav.config"),icon:ed}]}]:[{title:C("project.sections.workspace"),items:[{key:"",label:C("project.nav.overview"),icon:mj},{key:"telegram",label:C("project.nav.telegram"),icon:Za},{key:"chat",label:C("project.nav.chat"),icon:ki},{key:"threads",label:C("project.nav.threads"),icon:ki},{key:"agents",label:C("project.nav.agents"),icon:vn},{key:"memories",label:C("project.nav.memories"),icon:Ju}]},{title:C("project.sections.automation"),items:[{key:"routines",label:C("project.nav.routines"),icon:Go},{key:"tasks",label:C("project.nav.tasks"),icon:Bi},{key:"mcps",label:C("project.nav.mcps"),icon:Cg},{key:"logs",label:C("project.nav.logs"),icon:Eg}]},{title:C("project.sections.config"),items:[{key:"config",label:C("project.nav.config"),icon:ed}]}],[g]),h=n.pathname.replace(`/p/${r}`,"").replace(/^\//,"").split("/")[0];if(!i)return l.jsx("div",{className:"p-8 text-muted-fg",children:C("project.not_found",{pid:r})});const x=async()=>{try{await Qn.rebuild(r),s.success(C("project.rebuild_done"))}catch(_){s.error(_.message)}},y=async()=>{const _=i.name||i.path;if(confirm(C("project.unregister_confirm",{label:_})))try{await Qn.remove(r),s.success(C("project.unregistered")),c(),e("/")}catch(j){s.error(j.message)}},w=_=>{const j=_?`/p/${r}/${_}`:`/p/${r}`;e(j)},S=Number(r)!==0?l.jsxs(l.Fragment,{children:[l.jsxs(he,{size:"sm",variant:"secondary",onClick:x,children:[l.jsx(rl,{size:13})," ",C("project.rebuild")]}),l.jsx(he,{size:"sm",variant:"destructive",onClick:y,children:C("admin.unregister")})]}):void 0;return l.jsx(Dw,{sections:m,active:h,onChange:w,collapsed:d,onToggleCollapse:f,actions:S,contentClassName:"w-full space-y-6 p-6 pt-3",testId:`project-tab-${h||"overview"}`,children:l.jsxs(W_,{children:[l.jsx(qt,{index:!0,element:l.jsx(I1,{pid:r})}),l.jsx(qt,{path:"workspaces",element:l.jsx(D4,{})}),l.jsx(qt,{path:"models",element:l.jsx(Zw,{})}),l.jsx(qt,{path:"agent-defaults",element:l.jsx($O,{})}),l.jsx(qt,{path:"sessions",element:l.jsx(XO,{})}),l.jsx(qt,{path:"logs",element:l.jsx(OO,{pid:r})}),l.jsx(qt,{path:"config",element:l.jsx(gz,{pid:r})}),l.jsx(qt,{path:"telegram",element:l.jsx(Qz,{pid:r})}),l.jsx(qt,{path:"agents",element:l.jsx(vz,{pid:r})}),l.jsx(qt,{path:"agents/:slug",element:l.jsx(qD,{pid:r})}),l.jsx(qt,{path:"memories",element:l.jsx(Jz,{pid:r})}),l.jsx(qt,{path:"routines",element:l.jsx(Rz,{pid:r})}),l.jsx(qt,{path:"tasks",element:g?l.jsx(KO,{}):l.jsx(Tz,{pid:r})}),l.jsx(qt,{path:"mcps",element:l.jsx(Az,{pid:r})}),l.jsx(qt,{path:"threads",element:l.jsx(Oz,{pid:r})}),l.jsx(qt,{path:"chat",element:l.jsx(Xz,{pid:r})}),l.jsx(qt,{path:"*",element:l.jsx(I1,{pid:r})})]})})}function f2(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/identity",()=>E1.get());return{identity:e||{},error:n,isLoading:s,mutate:r,save:async c=>{const d=await E1.patch(c);return await r(d,{revalidate:!1}),d}}}const QD=["es","en","pt","fr","it","de"];function ZD(){const e=rt(),{identity:n,isLoading:s,save:r}=f2(),[i,c]=v.useState({}),[d,f]=v.useState(!1);if(v.useEffect(()=>{c(n)},[n]),s)return l.jsx(Je,{});const g=async()=>{f(!0);try{await r({owner_name:i.owner_name,owner_context:i.owner_context,language:i.language,timezone:i.timezone}),e.success(C("settings.identity.saved"))}catch(m){e.error(m.message)}finally{f(!1)}};return l.jsxs(He,{title:C("settings.identity.title"),description:C("settings.identity.subtitle"),children:[n?null:l.jsx(lt,{children:C("common.none_yet")}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("settings.identity.owner_name"),children:l.jsx(Ce,{value:i.owner_name||"",onChange:m=>c({...i,owner_name:m.target.value})})}),l.jsx(fe,{label:C("settings.identity.language"),children:l.jsx(Ct,{value:i.language||"es",onChange:m=>c({...i,language:m}),options:QD.map(m=>({value:m,label:m}))})}),l.jsx(fe,{label:C("settings.identity.timezone"),hint:"ej. America/Argentina/Buenos_Aires",children:l.jsx(Ce,{value:i.timezone||"",onChange:m=>c({...i,timezone:m.target.value})})})]}),l.jsx("div",{className:"mt-3",children:l.jsx(fe,{label:C("settings.identity.owner_context"),hint:"Quién sos, en qué trabajás, qué le interesa al agente saber de vos.",children:l.jsx(Qt,{rows:3,value:i.owner_context||"",onChange:m=>c({...i,owner_context:m.target.value})})})}),l.jsx("div",{className:"mt-4",children:l.jsx(he,{variant:"primary",loading:d,onClick:g,children:C("common.save")})})]})}function JD(){const e=rt(),n=Ua(),{superAgent:s,isLoading:r,mutate:i}=Kw(),{patch:c}=vr(),{identity:d,save:f}=f2(),[g,m]=v.useState(!0),[h,x]=v.useState(""),[y,w]=v.useState(""),[S,_]=v.useState("permiso"),[j,E]=v.useState(!1);if(v.useEffect(()=>{s&&(m(!!s.enabled),x(s.system||""),_(s.permission_mode||"permiso"))},[s]),v.useEffect(()=>{w(d.personality||"")},[d.personality]),r||!s)return l.jsx(Je,{});const k=async()=>{E(!0);try{await c({"super_agent.enabled":g,"super_agent.system":h,"super_agent.permission_mode":S},["super_agent.name"]),await f({personality:y}),e.success(C("settings.super_agent.saved")),i()}catch(N){e.error(N.message)}finally{E(!1)}};return l.jsx(He,{title:C("settings.super_agent.title"),description:"Comportamiento del super-agente. El modelo y la cadena de fallback se configuran en el Router de modelos.",children:l.jsxs("div",{className:"space-y-4",children:[l.jsx("div",{className:"flex items-center gap-3",children:l.jsx(sn,{checked:g,onChange:m,label:"Super-agente habilitado"})}),l.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-border bg-muted/20 p-3",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx("div",{className:"text-sm font-medium",children:"Modelo activo (router)"}),l.jsx("div",{className:"truncate font-mono text-xs text-muted-fg",children:s.model||"—"})]}),l.jsxs(he,{size:"sm",variant:"secondary",onClick:()=>n("/p/0/models"),children:[l.jsx(fh,{size:13})," Configurar en Modelos"]})]}),l.jsx(fe,{label:C("settings.super_agent.permission_mode"),children:l.jsx(Ct,{value:S,onChange:_,options:xh.map(N=>({value:N,label:N}))})}),l.jsx(fe,{label:C("settings.super_agent.personality"),children:l.jsx(Qt,{rows:2,value:y,onChange:N=>w(N.target.value)})}),l.jsx(fe,{label:C("settings.super_agent.system"),hint:C("settings.super_agent.system_hint"),children:l.jsx(Qt,{rows:6,className:"font-mono text-xs",value:h,onChange:N=>x(N.target.value),placeholder:"(Vacío = se usa el prompt base de core/agent/prompts/super-agent-base.md)"})}),l.jsx(he,{variant:"primary",loading:j,onClick:k,children:C("common.save")})]})})}const Xp={providers:()=>ge.get("/embeddings/providers"),test:(e={})=>ge.post("/embeddings/test",e),reindex:()=>ge.post("/embeddings/reindex",{})},WD=[{value:"auto",label:"Automático (cadena: Ollama → Gemini → OpenAI → offline)"},{value:"ollama",label:"Ollama — local, sin API key (nomic-embed-text)"},{value:"gemini",label:"Gemini — free tier con key (text-embedding-004)"},{value:"openai",label:"OpenAI — text-embedding-3-small (cloud)"},{value:"tf",label:"Offline (term-frequency, sin modelo — degradado)"}],e6=[{value:"chain",label:"Cadena (fallback automático)"},{value:"single",label:"Único (usa solo el elegido)"}],n_=e=>e.startsWith("***");function t6(){const e=rt(),{config:n,isLoading:s,patch:r}=vr(),{data:i,mutate:c}=Qe("/embeddings/providers",()=>Xp.providers()),[d,f]=v.useState(!1),[g,m]=v.useState(null);if(s)return l.jsx(Je,{});const x=(n.memory||{}).embeddings||{},y=i?.configured_provider||x.provider||"auto",w=i?.mode||x.mode||"chain",S=i?.engines||[],_=async k=>{f(!0);try{await r(k),await c()}catch(N){e.error(`No se pudo guardar: ${N.message}`)}finally{f(!1)}},j=async()=>{f(!0),m(null);try{const k=await Xp.test({});m(`${k.embedder} · dim ${k.dim} · ${k.ms}ms`),e.success(`Embedding OK con ${k.embedder}`)}catch(k){e.error(`Falló el test: ${k.message}`)}finally{f(!1)}},E=async()=>{f(!0);try{const k=await Xp.reindex();e.success(`Reindexado: ${k.indexed} chunks (limpiados ${k.cleared}).`)}catch(k){e.error(`Falló el reindex: ${k.message}`)}finally{f(!1)}};return l.jsxs("div",{className:"space-y-6",children:[l.jsx(He,{title:"Embeddings (RAG)",description:"Modelo que vectoriza el historial de todos los canales para la memoria relevante. Igual que TTS/STT: elegí proveedor y modelo. 'Automático' prueba local primero y cae al offline si no hay nada.",children:l.jsxs("div",{className:"space-y-3",children:[l.jsx(fe,{label:"Proveedor",hint:"Ollama es local y gratis. Gemini/OpenAI usan la API key de su sección en Modelos (o la de acá abajo).",children:l.jsx(Ct,{value:y,onChange:k=>_({"memory.embeddings.provider":k}),options:WD,disabled:d,className:"max-w-xl"})}),l.jsx(fe,{label:"Modo de selección",hint:"Cadena cae al siguiente si uno falla; Único usa exactamente el proveedor elegido.",children:l.jsx(Ct,{value:w,onChange:k=>_({"memory.embeddings.mode":k}),options:e6,disabled:d,className:"max-w-md"})}),l.jsx("div",{className:"flex flex-wrap items-center gap-2 pt-1",children:S.map(k=>l.jsxs(Ue,{tone:k.available?"success":"muted",children:[k.id,": ",k.available?"disponible":"no disp."]},k.id))}),l.jsxs("div",{className:"flex flex-wrap items-center gap-3 pt-1",children:[l.jsxs(he,{variant:"secondary",onClick:j,loading:d,children:[l.jsx(ol,{size:14})," Probar embedding"]}),l.jsxs(he,{variant:"secondary",onClick:E,loading:d,children:[l.jsx(dj,{size:14})," Reindexar memoria"]}),g&&l.jsx("span",{className:"text-sm text-muted-foreground",children:g})]})]})}),l.jsxs(He,{title:"Ollama (local)",description:"Sin API key. Corre nomic-embed-text en tu Ollama local o cloud.",children:[l.jsx(fe,{label:"Modelo",children:l.jsx(Ce,{defaultValue:x.ollama?.model||"nomic-embed-text",placeholder:"nomic-embed-text",disabled:d,onBlur:k=>{const N=k.target.value.trim();N&&N!==x.ollama?.model&&_({"memory.embeddings.ollama.model":N})},className:"max-w-md"})}),l.jsx(fe,{label:"Base URL",hint:"Vacío usa engines.ollama.base_url (por defecto http://localhost:11434).",children:l.jsx(Ce,{defaultValue:x.ollama?.base_url||"",placeholder:"http://localhost:11434",disabled:d,onBlur:k=>_({"memory.embeddings.ollama.base_url":k.target.value.trim()}),className:"max-w-md"})})]}),l.jsxs(He,{title:"OpenAI",description:"text-embedding-3-small (1536 dims) u otro modelo compatible.",children:[l.jsx(fe,{label:"Modelo",children:l.jsx(Ce,{defaultValue:x.openai?.model||"text-embedding-3-small",placeholder:"text-embedding-3-small",disabled:d,onBlur:k=>{const N=k.target.value.trim();N&&N!==x.openai?.model&&_({"memory.embeddings.openai.model":N})},className:"max-w-md"})}),l.jsx(fe,{label:"API key",hint:"Vacío reusa engines.openai.api_key. Dejalo en blanco para no tocar la guardada.",children:l.jsx(Ce,{type:"password",defaultValue:x.openai?.api_key||"",placeholder:"sk-…",disabled:d,onBlur:k=>{const N=k.target.value;N&&!n_(N)&&_({"memory.embeddings.openai.api_key":N})},className:"max-w-md"})})]}),l.jsxs(He,{title:"Gemini",description:"text-embedding-004 (768 dims). Free tier con API key de Google.",children:[l.jsx(fe,{label:"Modelo",children:l.jsx(Ce,{defaultValue:x.gemini?.model||"text-embedding-004",placeholder:"text-embedding-004",disabled:d,onBlur:k=>{const N=k.target.value.trim();N&&N!==x.gemini?.model&&_({"memory.embeddings.gemini.model":N})},className:"max-w-md"})}),l.jsx(fe,{label:"API key",hint:"Vacío reusa engines.gemini.api_key.",children:l.jsx(Ce,{type:"password",defaultValue:x.gemini?.api_key||"",placeholder:"AIza…",disabled:d,onBlur:k=>{const N=k.target.value;N&&!n_(N)&&_({"memory.embeddings.gemini.api_key":N})},className:"max-w-md"})})]})]})}function n6(){const e=rt(),{config:n,isLoading:s,patch:r,mutate:i}=vr(),c=n.telegram?.channels||[],d=Math.max(0,c.findIndex(A=>A.name==="default")),f=c[d],[g,m]=v.useState(!0),[h,x]=v.useState(1500),[y,w]=v.useState(!0),[S,_]=v.useState(""),[j,E]=v.useState(""),[k,N]=v.useState(!1);if(v.useEffect(()=>{m(!!n.telegram?.enabled),x(Number(n.telegram?.poll_interval_ms||1500)),w(!!n.telegram?.respond_with_engine),_(""),E(f?.chat_id||"")},[n,f?.chat_id]),s)return l.jsx(Je,{});const R=async()=>{N(!0);try{const A=c.slice(),M={name:"default",chat_id:j,respond_with_engine:y,...S?{bot_token:S}:{}};c.length===0?A.push(M):A[d]={...f,...M},await r({"telegram.enabled":g,"telegram.poll_interval_ms":h,"telegram.respond_with_engine":y,"telegram.channels":A}),e.success(C("settings.telegram_global.saved")),i(),_("")}catch(A){e.error(A.message)}finally{N(!1)}};return l.jsx(He,{title:C("settings.telegram_global.title"),description:C("settings.telegram_global.subtitle"),children:l.jsxs("div",{className:"space-y-3",children:[l.jsxs("div",{className:"flex items-center gap-3",children:[l.jsx(sn,{checked:g,onChange:m,label:C("settings.telegram_global.enabled")}),l.jsx(sn,{checked:y,onChange:w,label:C("settings.telegram_global.respond_with_engine")})]}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("settings.telegram_global.bot_token"),hint:f?.bot_token?`…${el(f.bot_token)??""} (seteado — escribí para reemplazar)`:"Token del BotFather.",children:l.jsx(Ce,{type:"password",value:S,onChange:A=>_(A.target.value),placeholder:f?.bot_token?`…${el(f.bot_token)??""} (ya seteado)`:""})}),l.jsx(fe,{label:C("settings.telegram_global.chat_id"),children:l.jsx(Ce,{value:j,onChange:A=>E(A.target.value),placeholder:"889721252"})}),l.jsx(fe,{label:C("settings.telegram_global.poll_interval"),children:l.jsx(Ce,{type:"number",value:String(h),onChange:A=>x(Number(A.target.value)||1500)})})]}),l.jsx(he,{variant:"primary",loading:k,onClick:R,children:C("common.save")})]})})}function a6(){const e=rt(),{channels:n,isLoading:s,mutate:r}=ux(),{contacts:i}=dx(),[c,d]=v.useState(null),[f,g]=v.useState(null),m=new Map;for(const x of i)m.set(String(x.user_id),x.name||`@${x.username||x.user_id}`);const h=async x=>{if(confirm(C("telegram_channels.delete_confirm",{name:x})))try{await kn.channels.remove(x),e.success(C("telegram_channels.removed")),r()}catch(y){e.error(y.message)}};return l.jsxs(He,{title:C("telegram_channels.title"),description:C("telegram_channels.desc"),action:l.jsxs(he,{size:"sm",onClick:()=>d({name:""}),children:[l.jsx(Rn,{size:14})," ",C("telegram_channels.new_btn")]}),children:[s&&l.jsx(Je,{}),!s&&n.length===0&&l.jsx(lt,{children:C("telegram_channels.empty")}),l.jsx("ul",{className:"space-y-2 text-sm",children:n.map(x=>{const y=x.owner_user_id!=null?m.get(String(x.owner_user_id))||`user_id ${x.owner_user_id}`:C("telegram_channels.no_owner");return l.jsxs("li",{className:"rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsx("span",{className:"font-medium",children:x.name}),l.jsxs("div",{className:"flex items-center gap-2",children:[x.project&&l.jsxs(Ue,{tone:"success",children:["project = ",x.project]}),l.jsxs(he,{size:"sm",variant:"ghost",onClick:()=>g(x),children:[l.jsx(Za,{size:13})," ",C("admin.telegram_send_test")]}),l.jsx(he,{size:"sm",variant:"secondary",onClick:()=>d(x),children:C("common.edit")}),l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>h(x.name),children:C("common.delete")})]})]}),l.jsxs("div",{className:"mt-1 grid grid-cols-2 gap-2 text-xs text-muted-fg",children:[l.jsxs("span",{children:["chat_id: ",x.chat_id||"—"]}),l.jsxs("span",{children:["bot_token: ",x.bot_token?`…${el(x.bot_token)??""}`:"—"]}),l.jsxs("span",{children:["route_to_agent: ",x.route_to_agent||"default APX"]}),l.jsxs("span",{children:["engine: ",x.respond_with_engine?"sí":"no"]}),l.jsxs("span",{className:"col-span-2",children:[C("telegram_channels.owner_label")," ",y]})]})]},x.name)})}),l.jsx(Aw,{channel:c,onClose:()=>d(null),onSaved:()=>{d(null),r()}}),l.jsx(Mw,{channel:f,onClose:()=>g(null)})]})}const a_=new Set(["owner","guest"]);function s6(){const e=rt(),{roles:n,mutate:s,isLoading:r}=dx(),[i,c]=v.useState(""),[d,f]=v.useState(""),[g,m]=v.useState(!1),[h,x]=v.useState(!1),y=async()=>{const _=i.trim();if(!_){e.error(C("telegram_roles.name_required"));return}if(a_.has(_)){e.error(C("telegram_roles.builtin_error",{name:_}));return}x(!0);try{const j=g?"*":d.split(",").map(E=>E.trim()).filter(Boolean);await kn.roles.set(_,j),e.success(C("telegram_roles.saved",{name:_})),c(""),f(""),m(!1),s()}catch(j){e.error(j.message)}finally{x(!1)}},w=async _=>{if(confirm(C("telegram_roles.delete_confirm",{name:_})))try{await kn.roles.remove(_),e.success(C("telegram_roles.removed")),s()}catch(j){e.error(j.message)}},S=Object.entries(n);return l.jsxs(He,{title:C("telegram_roles.title"),description:C("telegram_roles.desc"),children:[r&&l.jsx(Je,{}),S.length===0&&!r&&l.jsx(lt,{children:C("telegram_roles.empty")}),S.length>0&&l.jsx("ul",{className:"space-y-2 text-sm",children:S.map(([_,j])=>{const E=a_.has(_),k=j?.tools==="*"?C("telegram_roles.tools_all"):Array.isArray(j?.tools)&&j.tools.length>0?j.tools.join(", "):C("telegram_roles.tools_none");return l.jsxs("li",{className:"rounded-md border border-border bg-muted/30 px-3 py-2",children:[l.jsxs("div",{className:"flex items-center justify-between gap-2",children:[l.jsxs("div",{className:"min-w-0",children:[l.jsx("span",{className:"font-medium",children:_}),E&&l.jsx(Ue,{tone:"info",children:C("telegram_roles.builtin")})]}),!E&&l.jsx(he,{size:"sm",variant:"destructive",onClick:()=>w(_),children:C("telegram_roles.delete_btn")})]}),l.jsxs("div",{className:"mt-1 text-xs text-muted-fg",children:["tools: ",k]})]},_)})}),l.jsxs("div",{className:"mt-4 space-y-3 rounded-md border border-dashed border-border p-3",children:[l.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium",children:[l.jsx(Rn,{size:14})," ",C("telegram_roles.new_title")]}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsx(fe,{label:C("telegram_roles.name_label"),children:l.jsx(Ce,{value:i,onChange:_=>c(_.target.value),placeholder:C("telegram_roles.name_ph")})}),l.jsx(fe,{label:C("telegram_roles.tools_label"),hint:C("telegram_roles.tools_hint"),children:l.jsx(Ce,{value:d,onChange:_=>f(_.target.value),disabled:g,placeholder:C("telegram_roles.tools_ph")})})]}),l.jsxs("div",{className:"flex items-center justify-between gap-3",children:[l.jsx(sn,{checked:g,onChange:m,label:C("telegram_roles.full_access")}),l.jsx(he,{variant:"primary",loading:h,onClick:y,children:C("telegram_roles.save_btn")})]})]})]})}const m2="apx.settings.telegramTab";function r6(){if(typeof window>"u")return"default";const e=window.localStorage.getItem(m2);return e==="channels"||e==="contacts"||e==="roles"||e==="default"?e:"default"}function o6(){const[e,n]=v.useState("default");v.useEffect(()=>{n(r6())},[]);const s=r=>{const i=r==="channels"||r==="contacts"||r==="roles"||r==="default"?r:"default";n(i);try{window.localStorage.setItem(m2,i)}catch{}};return l.jsxs(Xd,{value:e,onValueChange:s,className:"w-full",children:[l.jsxs(Kd,{children:[l.jsx(Da,{value:"default",children:C("settings.telegram_global.title")}),l.jsx(Da,{value:"channels",children:C("telegram_channels.title")}),l.jsx(Da,{value:"contacts",children:C("telegram_contacts.title")}),l.jsx(Da,{value:"roles",children:C("telegram_roles.title")})]}),l.jsx(La,{value:"default",className:"mt-4",children:l.jsx(n6,{})}),l.jsx(La,{value:"channels",className:"mt-4",children:l.jsx(a6,{})}),l.jsx(La,{value:"contacts",className:"mt-4",children:l.jsx(Ow,{})}),l.jsx(La,{value:"roles",className:"mt-4",children:l.jsx(s6,{})})]})}function l6(){const{data:e,error:n,isLoading:s,mutate:r}=Qe("/pair/list",()=>Jo.list(),{refreshInterval:Ed.pairList});return{clients:e?.clients||[],error:n,isLoading:s,mutate:r}}var Io={},Kp,s_;function i6(){return s_||(s_=1,Kp=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),Kp}var Qp={},rr={},r_;function Wr(){if(r_)return rr;r_=1;let e;const n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return rr.getSymbolSize=function(r){if(!r)throw new Error('"version" cannot be null or undefined');if(r<1||r>40)throw new Error('"version" should be in range from 1 to 40');return r*4+17},rr.getSymbolTotalCodewords=function(r){return n[r]},rr.getBCHDigit=function(s){let r=0;for(;s!==0;)r++,s>>>=1;return r},rr.setToSJISFunction=function(r){if(typeof r!="function")throw new Error('"toSJISFunc" is not a valid function.');e=r},rr.isKanjiModeEnabled=function(){return typeof e<"u"},rr.toSJIS=function(r){return e(r)},rr}var Zp={},o_;function kx(){return o_||(o_=1,(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function n(s){if(typeof s!="string")throw new Error("Param is not a string");switch(s.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+s)}}e.isValid=function(r){return r&&typeof r.bit<"u"&&r.bit>=0&&r.bit<4},e.from=function(r,i){if(e.isValid(r))return r;try{return n(r)}catch{return i}}})(Zp)),Zp}var Jp,l_;function c6(){if(l_)return Jp;l_=1;function e(){this.buffer=[],this.length=0}return e.prototype={get:function(n){const s=Math.floor(n/8);return(this.buffer[s]>>>7-n%8&1)===1},put:function(n,s){for(let r=0;r<s;r++)this.putBit((n>>>s-r-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(n){const s=Math.floor(this.length/8);this.buffer.length<=s&&this.buffer.push(0),n&&(this.buffer[s]|=128>>>this.length%8),this.length++}},Jp=e,Jp}var Wp,i_;function u6(){if(i_)return Wp;i_=1;function e(n){if(!n||n<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=n,this.data=new Uint8Array(n*n),this.reservedBit=new Uint8Array(n*n)}return e.prototype.set=function(n,s,r,i){const c=n*this.size+s;this.data[c]=r,i&&(this.reservedBit[c]=!0)},e.prototype.get=function(n,s){return this.data[n*this.size+s]},e.prototype.xor=function(n,s,r){this.data[n*this.size+s]^=r},e.prototype.isReserved=function(n,s){return this.reservedBit[n*this.size+s]},Wp=e,Wp}var eg={},c_;function d6(){return c_||(c_=1,(function(e){const n=Wr().getSymbolSize;e.getRowColCoords=function(r){if(r===1)return[];const i=Math.floor(r/7)+2,c=n(r),d=c===145?26:Math.ceil((c-13)/(2*i-2))*2,f=[c-7];for(let g=1;g<i-1;g++)f[g]=f[g-1]-d;return f.push(6),f.reverse()},e.getPositions=function(r){const i=[],c=e.getRowColCoords(r),d=c.length;for(let f=0;f<d;f++)for(let g=0;g<d;g++)f===0&&g===0||f===0&&g===d-1||f===d-1&&g===0||i.push([c[f],c[g]]);return i}})(eg)),eg}var tg={},u_;function f6(){if(u_)return tg;u_=1;const e=Wr().getSymbolSize,n=7;return tg.getPositions=function(r){const i=e(r);return[[0,0],[i-n,0],[0,i-n]]},tg}var ng={},d_;function m6(){return d_||(d_=1,(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const n={N1:3,N2:3,N3:40,N4:10};e.isValid=function(i){return i!=null&&i!==""&&!isNaN(i)&&i>=0&&i<=7},e.from=function(i){return e.isValid(i)?parseInt(i,10):void 0},e.getPenaltyN1=function(i){const c=i.size;let d=0,f=0,g=0,m=null,h=null;for(let x=0;x<c;x++){f=g=0,m=h=null;for(let y=0;y<c;y++){let w=i.get(x,y);w===m?f++:(f>=5&&(d+=n.N1+(f-5)),m=w,f=1),w=i.get(y,x),w===h?g++:(g>=5&&(d+=n.N1+(g-5)),h=w,g=1)}f>=5&&(d+=n.N1+(f-5)),g>=5&&(d+=n.N1+(g-5))}return d},e.getPenaltyN2=function(i){const c=i.size;let d=0;for(let f=0;f<c-1;f++)for(let g=0;g<c-1;g++){const m=i.get(f,g)+i.get(f,g+1)+i.get(f+1,g)+i.get(f+1,g+1);(m===4||m===0)&&d++}return d*n.N2},e.getPenaltyN3=function(i){const c=i.size;let d=0,f=0,g=0;for(let m=0;m<c;m++){f=g=0;for(let h=0;h<c;h++)f=f<<1&2047|i.get(m,h),h>=10&&(f===1488||f===93)&&d++,g=g<<1&2047|i.get(h,m),h>=10&&(g===1488||g===93)&&d++}return d*n.N3},e.getPenaltyN4=function(i){let c=0;const d=i.data.length;for(let g=0;g<d;g++)c+=i.data[g];return Math.abs(Math.ceil(c*100/d/5)-10)*n.N4};function s(r,i,c){switch(r){case e.Patterns.PATTERN000:return(i+c)%2===0;case e.Patterns.PATTERN001:return i%2===0;case e.Patterns.PATTERN010:return c%3===0;case e.Patterns.PATTERN011:return(i+c)%3===0;case e.Patterns.PATTERN100:return(Math.floor(i/2)+Math.floor(c/3))%2===0;case e.Patterns.PATTERN101:return i*c%2+i*c%3===0;case e.Patterns.PATTERN110:return(i*c%2+i*c%3)%2===0;case e.Patterns.PATTERN111:return(i*c%3+(i+c)%2)%2===0;default:throw new Error("bad maskPattern:"+r)}}e.applyMask=function(i,c){const d=c.size;for(let f=0;f<d;f++)for(let g=0;g<d;g++)c.isReserved(g,f)||c.xor(g,f,s(i,g,f))},e.getBestMask=function(i,c){const d=Object.keys(e.Patterns).length;let f=0,g=1/0;for(let m=0;m<d;m++){c(m),e.applyMask(m,i);const h=e.getPenaltyN1(i)+e.getPenaltyN2(i)+e.getPenaltyN3(i)+e.getPenaltyN4(i);e.applyMask(m,i),h<g&&(g=h,f=m)}return f}})(ng)),ng}var Iu={},f_;function p2(){if(f_)return Iu;f_=1;const e=kx(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],s=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Iu.getBlocksCount=function(i,c){switch(c){case e.L:return n[(i-1)*4+0];case e.M:return n[(i-1)*4+1];case e.Q:return n[(i-1)*4+2];case e.H:return n[(i-1)*4+3];default:return}},Iu.getTotalCodewordsCount=function(i,c){switch(c){case e.L:return s[(i-1)*4+0];case e.M:return s[(i-1)*4+1];case e.Q:return s[(i-1)*4+2];case e.H:return s[(i-1)*4+3];default:return}},Iu}var ag={},yi={},m_;function p6(){if(m_)return yi;m_=1;const e=new Uint8Array(512),n=new Uint8Array(256);return(function(){let r=1;for(let i=0;i<255;i++)e[i]=r,n[r]=i,r<<=1,r&256&&(r^=285);for(let i=255;i<512;i++)e[i]=e[i-255]})(),yi.log=function(r){if(r<1)throw new Error("log("+r+")");return n[r]},yi.exp=function(r){return e[r]},yi.mul=function(r,i){return r===0||i===0?0:e[n[r]+n[i]]},yi}var p_;function g6(){return p_||(p_=1,(function(e){const n=p6();e.mul=function(r,i){const c=new Uint8Array(r.length+i.length-1);for(let d=0;d<r.length;d++)for(let f=0;f<i.length;f++)c[d+f]^=n.mul(r[d],i[f]);return c},e.mod=function(r,i){let c=new Uint8Array(r);for(;c.length-i.length>=0;){const d=c[0];for(let g=0;g<i.length;g++)c[g]^=n.mul(i[g],d);let f=0;for(;f<c.length&&c[f]===0;)f++;c=c.slice(f)}return c},e.generateECPolynomial=function(r){let i=new Uint8Array([1]);for(let c=0;c<r;c++)i=e.mul(i,new Uint8Array([1,n.exp(c)]));return i}})(ag)),ag}var sg,g_;function h6(){if(g_)return sg;g_=1;const e=g6();function n(s){this.genPoly=void 0,this.degree=s,this.degree&&this.initialize(this.degree)}return n.prototype.initialize=function(r){this.degree=r,this.genPoly=e.generateECPolynomial(this.degree)},n.prototype.encode=function(r){if(!this.genPoly)throw new Error("Encoder not initialized");const i=new Uint8Array(r.length+this.degree);i.set(r);const c=e.mod(i,this.genPoly),d=this.degree-c.length;if(d>0){const f=new Uint8Array(this.degree);return f.set(c,d),f}return c},sg=n,sg}var rg={},og={},lg={},h_;function g2(){return h_||(h_=1,lg.isValid=function(n){return!isNaN(n)&&n>=1&&n<=40}),lg}var Ga={},x_;function h2(){if(x_)return Ga;x_=1;const e="[0-9]+",n="[A-Z $%*+\\-./:]+";let s="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";s=s.replace(/u/g,"\\u");const r="(?:(?![A-Z0-9 $%*+\\-./:]|"+s+`)(?:.|[\r
534
534
  ]))+`;Ga.KANJI=new RegExp(s,"g"),Ga.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),Ga.BYTE=new RegExp(r,"g"),Ga.NUMERIC=new RegExp(e,"g"),Ga.ALPHANUMERIC=new RegExp(n,"g");const i=new RegExp("^"+s+"$"),c=new RegExp("^"+e+"$"),d=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return Ga.testKanji=function(g){return i.test(g)},Ga.testNumeric=function(g){return c.test(g)},Ga.testAlphanumeric=function(g){return d.test(g)},Ga}var b_;function eo(){return b_||(b_=1,(function(e){const n=g2(),s=h2();e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(c,d){if(!c.ccBits)throw new Error("Invalid mode: "+c);if(!n.isValid(d))throw new Error("Invalid version: "+d);return d>=1&&d<10?c.ccBits[0]:d<27?c.ccBits[1]:c.ccBits[2]},e.getBestModeForData=function(c){return s.testNumeric(c)?e.NUMERIC:s.testAlphanumeric(c)?e.ALPHANUMERIC:s.testKanji(c)?e.KANJI:e.BYTE},e.toString=function(c){if(c&&c.id)return c.id;throw new Error("Invalid mode")},e.isValid=function(c){return c&&c.bit&&c.ccBits};function r(i){if(typeof i!="string")throw new Error("Param is not a string");switch(i.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+i)}}e.from=function(c,d){if(e.isValid(c))return c;try{return r(c)}catch{return d}}})(og)),og}var v_;function x6(){return v_||(v_=1,(function(e){const n=Wr(),s=p2(),r=kx(),i=eo(),c=g2(),d=7973,f=n.getBCHDigit(d);function g(y,w,S){for(let _=1;_<=40;_++)if(w<=e.getCapacity(_,S,y))return _}function m(y,w){return i.getCharCountIndicator(y,w)+4}function h(y,w){let S=0;return y.forEach(function(_){const j=m(_.mode,w);S+=j+_.getBitsLength()}),S}function x(y,w){for(let S=1;S<=40;S++)if(h(y,S)<=e.getCapacity(S,w,i.MIXED))return S}e.from=function(w,S){return c.isValid(w)?parseInt(w,10):S},e.getCapacity=function(w,S,_){if(!c.isValid(w))throw new Error("Invalid QR Code version");typeof _>"u"&&(_=i.BYTE);const j=n.getSymbolTotalCodewords(w),E=s.getTotalCodewordsCount(w,S),k=(j-E)*8;if(_===i.MIXED)return k;const N=k-m(_,w);switch(_){case i.NUMERIC:return Math.floor(N/10*3);case i.ALPHANUMERIC:return Math.floor(N/11*2);case i.KANJI:return Math.floor(N/13);case i.BYTE:default:return Math.floor(N/8)}},e.getBestVersionForData=function(w,S){let _;const j=r.from(S,r.M);if(Array.isArray(w)){if(w.length>1)return x(w,j);if(w.length===0)return 1;_=w[0]}else _=w;return g(_.mode,_.getLength(),j)},e.getEncodedBits=function(w){if(!c.isValid(w)||w<7)throw new Error("Invalid QR Code version");let S=w<<12;for(;n.getBCHDigit(S)-f>=0;)S^=d<<n.getBCHDigit(S)-f;return w<<12|S}})(rg)),rg}var ig={},y_;function b6(){if(y_)return ig;y_=1;const e=Wr(),n=1335,s=21522,r=e.getBCHDigit(n);return ig.getEncodedBits=function(c,d){const f=c.bit<<3|d;let g=f<<10;for(;e.getBCHDigit(g)-r>=0;)g^=n<<e.getBCHDigit(g)-r;return(f<<10|g)^s},ig}var cg={},ug,__;function v6(){if(__)return ug;__=1;const e=eo();function n(s){this.mode=e.NUMERIC,this.data=s.toString()}return n.getBitsLength=function(r){return 10*Math.floor(r/3)+(r%3?r%3*3+1:0)},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(r){let i,c,d;for(i=0;i+3<=this.data.length;i+=3)c=this.data.substr(i,3),d=parseInt(c,10),r.put(d,10);const f=this.data.length-i;f>0&&(c=this.data.substr(i),d=parseInt(c,10),r.put(d,f*3+1))},ug=n,ug}var dg,j_;function y6(){if(j_)return dg;j_=1;const e=eo(),n=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function s(r){this.mode=e.ALPHANUMERIC,this.data=r}return s.getBitsLength=function(i){return 11*Math.floor(i/2)+6*(i%2)},s.prototype.getLength=function(){return this.data.length},s.prototype.getBitsLength=function(){return s.getBitsLength(this.data.length)},s.prototype.write=function(i){let c;for(c=0;c+2<=this.data.length;c+=2){let d=n.indexOf(this.data[c])*45;d+=n.indexOf(this.data[c+1]),i.put(d,11)}this.data.length%2&&i.put(n.indexOf(this.data[c]),6)},dg=s,dg}var fg,S_;function _6(){if(S_)return fg;S_=1;const e=eo();function n(s){this.mode=e.BYTE,typeof s=="string"?this.data=new TextEncoder().encode(s):this.data=new Uint8Array(s)}return n.getBitsLength=function(r){return r*8},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(s){for(let r=0,i=this.data.length;r<i;r++)s.put(this.data[r],8)},fg=n,fg}var mg,w_;function j6(){if(w_)return mg;w_=1;const e=eo(),n=Wr();function s(r){this.mode=e.KANJI,this.data=r}return s.getBitsLength=function(i){return i*13},s.prototype.getLength=function(){return this.data.length},s.prototype.getBitsLength=function(){return s.getBitsLength(this.data.length)},s.prototype.write=function(r){let i;for(i=0;i<this.data.length;i++){let c=n.toSJIS(this.data[i]);if(c>=33088&&c<=40956)c-=33088;else if(c>=57408&&c<=60351)c-=49472;else throw new Error("Invalid SJIS character: "+this.data[i]+`
535
535
  Make sure your charset is UTF-8`);c=(c>>>8&255)*192+(c&255),r.put(c,13)}},mg=s,mg}var pg={exports:{}},C_;function S6(){return C_||(C_=1,(function(e){var n={single_source_shortest_paths:function(s,r,i){var c={},d={};d[r]=0;var f=n.PriorityQueue.make();f.push(r,0);for(var g,m,h,x,y,w,S,_,j;!f.empty();){g=f.pop(),m=g.value,x=g.cost,y=s[m]||{};for(h in y)y.hasOwnProperty(h)&&(w=y[h],S=x+w,_=d[h],j=typeof d[h]>"u",(j||_>S)&&(d[h]=S,f.push(h,S),c[h]=m))}if(typeof i<"u"&&typeof d[i]>"u"){var E=["Could not find a path from ",r," to ",i,"."].join("");throw new Error(E)}return c},extract_shortest_path_from_predecessor_list:function(s,r){for(var i=[],c=r;c;)i.push(c),s[c],c=s[c];return i.reverse(),i},find_path:function(s,r,i){var c=n.single_source_shortest_paths(s,r,i);return n.extract_shortest_path_from_predecessor_list(c,i)},PriorityQueue:{make:function(s){var r=n.PriorityQueue,i={},c;s=s||{};for(c in r)r.hasOwnProperty(c)&&(i[c]=r[c]);return i.queue=[],i.sorter=s.sorter||r.default_sorter,i},default_sorter:function(s,r){return s.cost-r.cost},push:function(s,r){var i={value:s,cost:r};this.queue.push(i),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};e.exports=n})(pg)),pg.exports}var E_;function w6(){return E_||(E_=1,(function(e){const n=eo(),s=v6(),r=y6(),i=_6(),c=j6(),d=h2(),f=Wr(),g=S6();function m(E){return unescape(encodeURIComponent(E)).length}function h(E,k,N){const R=[];let A;for(;(A=E.exec(N))!==null;)R.push({data:A[0],index:A.index,mode:k,length:A[0].length});return R}function x(E){const k=h(d.NUMERIC,n.NUMERIC,E),N=h(d.ALPHANUMERIC,n.ALPHANUMERIC,E);let R,A;return f.isKanjiModeEnabled()?(R=h(d.BYTE,n.BYTE,E),A=h(d.KANJI,n.KANJI,E)):(R=h(d.BYTE_KANJI,n.BYTE,E),A=[]),k.concat(N,R,A).sort(function(O,U){return O.index-U.index}).map(function(O){return{data:O.data,mode:O.mode,length:O.length}})}function y(E,k){switch(k){case n.NUMERIC:return s.getBitsLength(E);case n.ALPHANUMERIC:return r.getBitsLength(E);case n.KANJI:return c.getBitsLength(E);case n.BYTE:return i.getBitsLength(E)}}function w(E){return E.reduce(function(k,N){const R=k.length-1>=0?k[k.length-1]:null;return R&&R.mode===N.mode?(k[k.length-1].data+=N.data,k):(k.push(N),k)},[])}function S(E){const k=[];for(let N=0;N<E.length;N++){const R=E[N];switch(R.mode){case n.NUMERIC:k.push([R,{data:R.data,mode:n.ALPHANUMERIC,length:R.length},{data:R.data,mode:n.BYTE,length:R.length}]);break;case n.ALPHANUMERIC:k.push([R,{data:R.data,mode:n.BYTE,length:R.length}]);break;case n.KANJI:k.push([R,{data:R.data,mode:n.BYTE,length:m(R.data)}]);break;case n.BYTE:k.push([{data:R.data,mode:n.BYTE,length:m(R.data)}])}}return k}function _(E,k){const N={},R={start:{}};let A=["start"];for(let M=0;M<E.length;M++){const O=E[M],U=[];for(let I=0;I<O.length;I++){const B=O[I],L=""+M+I;U.push(L),N[L]={node:B,lastCount:0},R[L]={};for(let D=0;D<A.length;D++){const q=A[D];N[q]&&N[q].node.mode===B.mode?(R[q][L]=y(N[q].lastCount+B.length,B.mode)-y(N[q].lastCount,B.mode),N[q].lastCount+=B.length):(N[q]&&(N[q].lastCount=B.length),R[q][L]=y(B.length,B.mode)+4+n.getCharCountIndicator(B.mode,k))}}A=U}for(let M=0;M<A.length;M++)R[A[M]].end=0;return{map:R,table:N}}function j(E,k){let N;const R=n.getBestModeForData(E);if(N=n.from(k,R),N!==n.BYTE&&N.bit<R.bit)throw new Error('"'+E+'" cannot be encoded with mode '+n.toString(N)+`.
536
536
  Suggested mode is: `+n.toString(R));switch(N===n.KANJI&&!f.isKanjiModeEnabled()&&(N=n.BYTE),N){case n.NUMERIC:return new s(E);case n.ALPHANUMERIC:return new r(E);case n.KANJI:return new c(E);case n.BYTE:return new i(E)}}e.fromArray=function(k){return k.reduce(function(N,R){return typeof R=="string"?N.push(j(R,null)):R.data&&N.push(j(R.data,R.mode)),N},[])},e.fromString=function(k,N){const R=x(k,f.isKanjiModeEnabled()),A=S(R),M=_(A,N),O=g.find_path(M.map,"start","end"),U=[];for(let I=1;I<O.length-1;I++)U.push(M.table[O[I]].node);return e.fromArray(w(U))},e.rawSplit=function(k){return e.fromArray(x(k,f.isKanjiModeEnabled()))}})(cg)),cg}var k_;function C6(){if(k_)return Qp;k_=1;const e=Wr(),n=kx(),s=c6(),r=u6(),i=d6(),c=f6(),d=m6(),f=p2(),g=h6(),m=x6(),h=b6(),x=eo(),y=w6();function w(M,O){const U=M.size,I=c.getPositions(O);for(let B=0;B<I.length;B++){const L=I[B][0],D=I[B][1];for(let q=-1;q<=7;q++)if(!(L+q<=-1||U<=L+q))for(let F=-1;F<=7;F++)D+F<=-1||U<=D+F||(q>=0&&q<=6&&(F===0||F===6)||F>=0&&F<=6&&(q===0||q===6)||q>=2&&q<=4&&F>=2&&F<=4?M.set(L+q,D+F,!0,!0):M.set(L+q,D+F,!1,!0))}}function S(M){const O=M.size;for(let U=8;U<O-8;U++){const I=U%2===0;M.set(U,6,I,!0),M.set(6,U,I,!0)}}function _(M,O){const U=i.getPositions(O);for(let I=0;I<U.length;I++){const B=U[I][0],L=U[I][1];for(let D=-2;D<=2;D++)for(let q=-2;q<=2;q++)D===-2||D===2||q===-2||q===2||D===0&&q===0?M.set(B+D,L+q,!0,!0):M.set(B+D,L+q,!1,!0)}}function j(M,O){const U=M.size,I=m.getEncodedBits(O);let B,L,D;for(let q=0;q<18;q++)B=Math.floor(q/3),L=q%3+U-8-3,D=(I>>q&1)===1,M.set(B,L,D,!0),M.set(L,B,D,!0)}function E(M,O,U){const I=M.size,B=h.getEncodedBits(O,U);let L,D;for(L=0;L<15;L++)D=(B>>L&1)===1,L<6?M.set(L,8,D,!0):L<8?M.set(L+1,8,D,!0):M.set(I-15+L,8,D,!0),L<8?M.set(8,I-L-1,D,!0):L<9?M.set(8,15-L-1+1,D,!0):M.set(8,15-L-1,D,!0);M.set(I-8,8,1,!0)}function k(M,O){const U=M.size;let I=-1,B=U-1,L=7,D=0;for(let q=U-1;q>0;q-=2)for(q===6&&q--;;){for(let F=0;F<2;F++)if(!M.isReserved(B,q-F)){let Z=!1;D<O.length&&(Z=(O[D]>>>L&1)===1),M.set(B,q-F,Z),L--,L===-1&&(D++,L=7)}if(B+=I,B<0||U<=B){B-=I,I=-I;break}}}function N(M,O,U){const I=new s;U.forEach(function(F){I.put(F.mode.bit,4),I.put(F.getLength(),x.getCharCountIndicator(F.mode,M)),F.write(I)});const B=e.getSymbolTotalCodewords(M),L=f.getTotalCodewordsCount(M,O),D=(B-L)*8;for(I.getLengthInBits()+4<=D&&I.put(0,4);I.getLengthInBits()%8!==0;)I.putBit(0);const q=(D-I.getLengthInBits())/8;for(let F=0;F<q;F++)I.put(F%2?17:236,8);return R(I,M,O)}function R(M,O,U){const I=e.getSymbolTotalCodewords(O),B=f.getTotalCodewordsCount(O,U),L=I-B,D=f.getBlocksCount(O,U),q=I%D,F=D-q,Z=Math.floor(I/D),H=Math.floor(L/D),G=H+1,Q=Z-H,V=new g(Q);let Y=0;const P=new Array(D),K=new Array(D);let $=0;const W=new Uint8Array(M.buffer);for(let te=0;te<D;te++){const Ne=te<F?H:G;P[te]=W.slice(Y,Y+Ne),K[te]=V.encode(P[te]),Y+=Ne,$=Math.max($,Ne)}const ce=new Uint8Array(I);let ie=0,oe,ue;for(oe=0;oe<$;oe++)for(ue=0;ue<D;ue++)oe<P[ue].length&&(ce[ie++]=P[ue][oe]);for(oe=0;oe<Q;oe++)for(ue=0;ue<D;ue++)ce[ie++]=K[ue][oe];return ce}function A(M,O,U,I){let B;if(Array.isArray(M))B=y.fromArray(M);else if(typeof M=="string"){let Z=O;if(!Z){const H=y.rawSplit(M);Z=m.getBestVersionForData(H,U)}B=y.fromString(M,Z||40)}else throw new Error("Invalid data");const L=m.getBestVersionForData(B,U);if(!L)throw new Error("The amount of data is too big to be stored in a QR Code");if(!O)O=L;else if(O<L)throw new Error(`
@@ -545,4 +545,4 @@ ${e.reason}`}):e.status==="unpaired"?l.jsx(AL,{onPaired:e.reload}):l.jsx(R4,{chi
545
545
  █ ◔ ◔ █
546
546
  █ ╰~╯ █
547
547
  ▀███████▀`}),l.jsx("div",{className:"text-foreground",children:e}),n&&l.jsx("pre",{className:"mt-2 max-w-xl whitespace-pre-wrap text-sm text-muted-fg",children:n})]})})}function QL(){return l.jsxs("div",{className:"p-8",children:[l.jsx("h1",{className:"text-2xl",children:C("not_found.title")}),l.jsx("p",{className:"text-muted-fg",children:C("not_found.message")})]})}UE.createRoot(document.getElementById("root")).render(l.jsx(Ki.StrictMode,{children:l.jsx(iR,{children:l.jsx(uN,{children:l.jsx(GL,{})})})}));
548
- //# sourceMappingURL=index-CfWyjPBa.js.map
548
+ //# sourceMappingURL=index-BV615I9p.js.map