vibelet 1.2.140 → 1.2.142
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/runtime-version.cjs +1 -1
- package/dist/vibelet.mjs +10 -5
- package/dist/web/assets/{highlighted-body-TPN3WLV5-CoHi5l59.js → highlighted-body-TPN3WLV5-CWcXV2pq.js} +1 -1
- package/dist/web/assets/{index-CSCyf4bc.js → index-BXNAV0T6.js} +3 -3
- package/dist/web/assets/{mermaid-O7DHMXV3-Bu3_bMqg.js → mermaid-O7DHMXV3-DRdxk_m8.js} +3 -3
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid-O7DHMXV3-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid-O7DHMXV3-DRdxk_m8.js","assets/mermaid-O7DHMXV3-CxQgajYu.css"])))=>i.map(i=>d[i]);
|
|
2
2
|
(function(){const u=document.createElement("link").relList;if(u&&u.supports&&u.supports("modulepreload"))return;for(const y of document.querySelectorAll('link[rel="modulepreload"]'))f(y);new MutationObserver(y=>{for(const g of y)if(g.type==="childList")for(const C of g.addedNodes)C.tagName==="LINK"&&C.rel==="modulepreload"&&f(C)}).observe(document,{childList:!0,subtree:!0});function r(y){const g={};return y.integrity&&(g.integrity=y.integrity),y.referrerPolicy&&(g.referrerPolicy=y.referrerPolicy),y.crossOrigin==="use-credentials"?g.credentials="include":y.crossOrigin==="anonymous"?g.credentials="omit":g.credentials="same-origin",g}function f(y){if(y.ep)return;y.ep=!0;const g=r(y);fetch(y.href,g)}})();var Xr={exports:{}},Qs={};var Um;function Ag(){if(Um)return Qs;Um=1;var i=Symbol.for("react.transitional.element"),u=Symbol.for("react.fragment");function r(f,y,g){var C=null;if(g!==void 0&&(C=""+g),y.key!==void 0&&(C=""+y.key),"key"in y){g={};for(var L in y)L!=="key"&&(g[L]=y[L])}else g=y;return y=g.ref,{$$typeof:i,type:f,key:C,ref:y!==void 0?y:null,props:g}}return Qs.Fragment=u,Qs.jsx=r,Qs.jsxs=r,Qs}var Hm;function Ng(){return Hm||(Hm=1,Xr.exports=Ag()),Xr.exports}var c=Ng(),Zr={exports:{}},be={};var qm;function Cg(){if(qm)return be;qm=1;var i=Symbol.for("react.transitional.element"),u=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),f=Symbol.for("react.strict_mode"),y=Symbol.for("react.profiler"),g=Symbol.for("react.consumer"),C=Symbol.for("react.context"),L=Symbol.for("react.forward_ref"),O=Symbol.for("react.suspense"),N=Symbol.for("react.memo"),Y=Symbol.for("react.lazy"),H=Symbol.for("react.activity"),K=Symbol.iterator;function B(S){return S===null||typeof S!="object"?null:(S=K&&S[K]||S["@@iterator"],typeof S=="function"?S:null)}var X={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ae=Object.assign,Ae={};function ge(S,z,G){this.props=S,this.context=z,this.refs=Ae,this.updater=G||X}ge.prototype.isReactComponent={},ge.prototype.setState=function(S,z){if(typeof S!="object"&&typeof S!="function"&&S!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,S,z,"setState")},ge.prototype.forceUpdate=function(S){this.updater.enqueueForceUpdate(this,S,"forceUpdate")};function We(){}We.prototype=ge.prototype;function U(S,z,G){this.props=S,this.context=z,this.refs=Ae,this.updater=G||X}var I=U.prototype=new We;I.constructor=U,ae(I,ge.prototype),I.isPureReactComponent=!0;var we=Array.isArray;function re(){}var pe={H:null,A:null,T:null,S:null},ye=Object.prototype.hasOwnProperty;function dt(S,z,G){var J=G.ref;return{$$typeof:i,type:S,key:z,ref:J!==void 0?J:null,props:G}}function Oe(S,z){return dt(S.type,z,S.props)}function Pe(S){return typeof S=="object"&&S!==null&&S.$$typeof===i}function nt(S){var z={"=":"=0",":":"=2"};return"$"+S.replace(/[=:]/g,function(G){return z[G]})}var Fe=/\/+/g;function Ct(S,z){return typeof S=="object"&&S!==null&&S.key!=null?nt(""+S.key):z.toString(36)}function $(S){switch(S.status){case"fulfilled":return S.value;case"rejected":throw S.reason;default:switch(typeof S.status=="string"?S.then(re,re):(S.status="pending",S.then(function(z){S.status==="pending"&&(S.status="fulfilled",S.value=z)},function(z){S.status==="pending"&&(S.status="rejected",S.reason=z)})),S.status){case"fulfilled":return S.value;case"rejected":throw S.reason}}throw S}function M(S,z,G,J,W){var ce=typeof S;(ce==="undefined"||ce==="boolean")&&(S=null);var ve=!1;if(S===null)ve=!0;else switch(ce){case"bigint":case"string":case"number":ve=!0;break;case"object":switch(S.$$typeof){case i:case u:ve=!0;break;case Y:return ve=S._init,M(ve(S._payload),z,G,J,W)}}if(ve)return W=W(S),ve=J===""?"."+Ct(S,0):J,we(W)?(G="",ve!=null&&(G=ve.replace(Fe,"$&/")+"/"),M(W,z,G,"",function(he){return he})):W!=null&&(Pe(W)&&(W=Oe(W,G+(W.key==null||S&&S.key===W.key?"":(""+W.key).replace(Fe,"$&/")+"/")+ve)),z.push(W)),1;ve=0;var Te=J===""?".":J+":";if(we(S))for(var Se=0;Se<S.length;Se++)J=S[Se],ce=Te+Ct(J,Se),ve+=M(J,z,G,ce,W);else if(Se=B(S),typeof Se=="function")for(S=Se.call(S),Se=0;!(J=S.next()).done;)J=J.value,ce=Te+Ct(J,Se++),ve+=M(J,z,G,ce,W);else if(ce==="object"){if(typeof S.then=="function")return M($(S),z,G,J,W);throw z=String(S),Error("Objects are not valid as a React child (found: "+(z==="[object Object]"?"object with keys {"+Object.keys(S).join(", ")+"}":z)+"). If you meant to render a collection of children, use an array instead.")}return ve}function Z(S,z,G){if(S==null)return S;var J=[],W=0;return M(S,J,"","",function(ce){return z.call(G,ce,W++)}),J}function ee(S){if(S._status===-1){var z=S._result;z=z(),z.then(function(G){(S._status===0||S._status===-1)&&(S._status=1,S._result=G)},function(G){(S._status===0||S._status===-1)&&(S._status=2,S._result=G)}),S._status===-1&&(S._status=0,S._result=z)}if(S._status===1)return S._result.default;throw S._result}var fe=typeof reportError=="function"?reportError:function(S){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var z=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof S=="object"&&S!==null&&typeof S.message=="string"?String(S.message):String(S),error:S});if(!window.dispatchEvent(z))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",S);return}console.error(S)},ne={map:Z,forEach:function(S,z,G){Z(S,function(){z.apply(this,arguments)},G)},count:function(S){var z=0;return Z(S,function(){z++}),z},toArray:function(S){return Z(S,function(z){return z})||[]},only:function(S){if(!Pe(S))throw Error("React.Children.only expected to receive a single React element child.");return S}};return be.Activity=H,be.Children=ne,be.Component=ge,be.Fragment=r,be.Profiler=y,be.PureComponent=U,be.StrictMode=f,be.Suspense=O,be.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=pe,be.__COMPILER_RUNTIME={__proto__:null,c:function(S){return pe.H.useMemoCache(S)}},be.cache=function(S){return function(){return S.apply(null,arguments)}},be.cacheSignal=function(){return null},be.cloneElement=function(S,z,G){if(S==null)throw Error("The argument must be a React element, but you passed "+S+".");var J=ae({},S.props),W=S.key;if(z!=null)for(ce in z.key!==void 0&&(W=""+z.key),z)!ye.call(z,ce)||ce==="key"||ce==="__self"||ce==="__source"||ce==="ref"&&z.ref===void 0||(J[ce]=z[ce]);var ce=arguments.length-2;if(ce===1)J.children=G;else if(1<ce){for(var ve=Array(ce),Te=0;Te<ce;Te++)ve[Te]=arguments[Te+2];J.children=ve}return dt(S.type,W,J)},be.createContext=function(S){return S={$$typeof:C,_currentValue:S,_currentValue2:S,_threadCount:0,Provider:null,Consumer:null},S.Provider=S,S.Consumer={$$typeof:g,_context:S},S},be.createElement=function(S,z,G){var J,W={},ce=null;if(z!=null)for(J in z.key!==void 0&&(ce=""+z.key),z)ye.call(z,J)&&J!=="key"&&J!=="__self"&&J!=="__source"&&(W[J]=z[J]);var ve=arguments.length-2;if(ve===1)W.children=G;else if(1<ve){for(var Te=Array(ve),Se=0;Se<ve;Se++)Te[Se]=arguments[Se+2];W.children=Te}if(S&&S.defaultProps)for(J in ve=S.defaultProps,ve)W[J]===void 0&&(W[J]=ve[J]);return dt(S,ce,W)},be.createRef=function(){return{current:null}},be.forwardRef=function(S){return{$$typeof:L,render:S}},be.isValidElement=Pe,be.lazy=function(S){return{$$typeof:Y,_payload:{_status:-1,_result:S},_init:ee}},be.memo=function(S,z){return{$$typeof:N,type:S,compare:z===void 0?null:z}},be.startTransition=function(S){var z=pe.T,G={};pe.T=G;try{var J=S(),W=pe.S;W!==null&&W(G,J),typeof J=="object"&&J!==null&&typeof J.then=="function"&&J.then(re,fe)}catch(ce){fe(ce)}finally{z!==null&&G.types!==null&&(z.types=G.types),pe.T=z}},be.unstable_useCacheRefresh=function(){return pe.H.useCacheRefresh()},be.use=function(S){return pe.H.use(S)},be.useActionState=function(S,z,G){return pe.H.useActionState(S,z,G)},be.useCallback=function(S,z){return pe.H.useCallback(S,z)},be.useContext=function(S){return pe.H.useContext(S)},be.useDebugValue=function(){},be.useDeferredValue=function(S,z){return pe.H.useDeferredValue(S,z)},be.useEffect=function(S,z){return pe.H.useEffect(S,z)},be.useEffectEvent=function(S){return pe.H.useEffectEvent(S)},be.useId=function(){return pe.H.useId()},be.useImperativeHandle=function(S,z,G){return pe.H.useImperativeHandle(S,z,G)},be.useInsertionEffect=function(S,z){return pe.H.useInsertionEffect(S,z)},be.useLayoutEffect=function(S,z){return pe.H.useLayoutEffect(S,z)},be.useMemo=function(S,z){return pe.H.useMemo(S,z)},be.useOptimistic=function(S,z){return pe.H.useOptimistic(S,z)},be.useReducer=function(S,z,G){return pe.H.useReducer(S,z,G)},be.useRef=function(S){return pe.H.useRef(S)},be.useState=function(S){return pe.H.useState(S)},be.useSyncExternalStore=function(S,z,G){return pe.H.useSyncExternalStore(S,z,G)},be.useTransition=function(){return pe.H.useTransition()},be.version="19.2.7",be}var Bm;function gf(){return Bm||(Bm=1,Zr.exports=Cg()),Zr.exports}var v=gf(),Kr={exports:{}},Vs={},Jr={exports:{}},$r={};var Lm;function Tg(){return Lm||(Lm=1,(function(i){function u(M,Z){var ee=M.length;M.push(Z);e:for(;0<ee;){var fe=ee-1>>>1,ne=M[fe];if(0<y(ne,Z))M[fe]=Z,M[ee]=ne,ee=fe;else break e}}function r(M){return M.length===0?null:M[0]}function f(M){if(M.length===0)return null;var Z=M[0],ee=M.pop();if(ee!==Z){M[0]=ee;e:for(var fe=0,ne=M.length,S=ne>>>1;fe<S;){var z=2*(fe+1)-1,G=M[z],J=z+1,W=M[J];if(0>y(G,ee))J<ne&&0>y(W,G)?(M[fe]=W,M[J]=ee,fe=J):(M[fe]=G,M[z]=ee,fe=z);else if(J<ne&&0>y(W,ee))M[fe]=W,M[J]=ee,fe=J;else break e}}return Z}function y(M,Z){var ee=M.sortIndex-Z.sortIndex;return ee!==0?ee:M.id-Z.id}if(i.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var g=performance;i.unstable_now=function(){return g.now()}}else{var C=Date,L=C.now();i.unstable_now=function(){return C.now()-L}}var O=[],N=[],Y=1,H=null,K=3,B=!1,X=!1,ae=!1,Ae=!1,ge=typeof setTimeout=="function"?setTimeout:null,We=typeof clearTimeout=="function"?clearTimeout:null,U=typeof setImmediate<"u"?setImmediate:null;function I(M){for(var Z=r(N);Z!==null;){if(Z.callback===null)f(N);else if(Z.startTime<=M)f(N),Z.sortIndex=Z.expirationTime,u(O,Z);else break;Z=r(N)}}function we(M){if(ae=!1,I(M),!X)if(r(O)!==null)X=!0,re||(re=!0,nt());else{var Z=r(N);Z!==null&&$(we,Z.startTime-M)}}var re=!1,pe=-1,ye=5,dt=-1;function Oe(){return Ae?!0:!(i.unstable_now()-dt<ye)}function Pe(){if(Ae=!1,re){var M=i.unstable_now();dt=M;var Z=!0;try{e:{X=!1,ae&&(ae=!1,We(pe),pe=-1),B=!0;var ee=K;try{t:{for(I(M),H=r(O);H!==null&&!(H.expirationTime>M&&Oe());){var fe=H.callback;if(typeof fe=="function"){H.callback=null,K=H.priorityLevel;var ne=fe(H.expirationTime<=M);if(M=i.unstable_now(),typeof ne=="function"){H.callback=ne,I(M),Z=!0;break t}H===r(O)&&f(O),I(M)}else f(O);H=r(O)}if(H!==null)Z=!0;else{var S=r(N);S!==null&&$(we,S.startTime-M),Z=!1}}break e}finally{H=null,K=ee,B=!1}Z=void 0}}finally{Z?nt():re=!1}}}var nt;if(typeof U=="function")nt=function(){U(Pe)};else if(typeof MessageChannel<"u"){var Fe=new MessageChannel,Ct=Fe.port2;Fe.port1.onmessage=Pe,nt=function(){Ct.postMessage(null)}}else nt=function(){ge(Pe,0)};function $(M,Z){pe=ge(function(){M(i.unstable_now())},Z)}i.unstable_IdlePriority=5,i.unstable_ImmediatePriority=1,i.unstable_LowPriority=4,i.unstable_NormalPriority=3,i.unstable_Profiling=null,i.unstable_UserBlockingPriority=2,i.unstable_cancelCallback=function(M){M.callback=null},i.unstable_forceFrameRate=function(M){0>M||125<M?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):ye=0<M?Math.floor(1e3/M):5},i.unstable_getCurrentPriorityLevel=function(){return K},i.unstable_next=function(M){switch(K){case 1:case 2:case 3:var Z=3;break;default:Z=K}var ee=K;K=Z;try{return M()}finally{K=ee}},i.unstable_requestPaint=function(){Ae=!0},i.unstable_runWithPriority=function(M,Z){switch(M){case 1:case 2:case 3:case 4:case 5:break;default:M=3}var ee=K;K=M;try{return Z()}finally{K=ee}},i.unstable_scheduleCallback=function(M,Z,ee){var fe=i.unstable_now();switch(typeof ee=="object"&&ee!==null?(ee=ee.delay,ee=typeof ee=="number"&&0<ee?fe+ee:fe):ee=fe,M){case 1:var ne=-1;break;case 2:ne=250;break;case 5:ne=1073741823;break;case 4:ne=1e4;break;default:ne=5e3}return ne=ee+ne,M={id:Y++,callback:Z,priorityLevel:M,startTime:ee,expirationTime:ne,sortIndex:-1},ee>fe?(M.sortIndex=ee,u(N,M),r(O)===null&&M===r(N)&&(ae?(We(pe),pe=-1):ae=!0,$(we,ee-fe))):(M.sortIndex=ne,u(O,M),X||B||(X=!0,re||(re=!0,nt()))),M},i.unstable_shouldYield=Oe,i.unstable_wrapCallback=function(M){var Z=K;return function(){var ee=K;K=Z;try{return M.apply(this,arguments)}finally{K=ee}}}})($r)),$r}var Ym;function Eg(){return Ym||(Ym=1,Jr.exports=Tg()),Jr.exports}var Fr={exports:{}},It={};var Gm;function Mg(){if(Gm)return It;Gm=1;var i=gf();function u(O){var N="https://react.dev/errors/"+O;if(1<arguments.length){N+="?args[]="+encodeURIComponent(arguments[1]);for(var Y=2;Y<arguments.length;Y++)N+="&args[]="+encodeURIComponent(arguments[Y])}return"Minified React error #"+O+"; visit "+N+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(){}var f={d:{f:r,r:function(){throw Error(u(522))},D:r,C:r,L:r,m:r,X:r,S:r,M:r},p:0,findDOMNode:null},y=Symbol.for("react.portal");function g(O,N,Y){var H=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:y,key:H==null?null:""+H,children:O,containerInfo:N,implementation:Y}}var C=i.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function L(O,N){if(O==="font")return"";if(typeof N=="string")return N==="use-credentials"?N:""}return It.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=f,It.createPortal=function(O,N){var Y=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!N||N.nodeType!==1&&N.nodeType!==9&&N.nodeType!==11)throw Error(u(299));return g(O,N,null,Y)},It.flushSync=function(O){var N=C.T,Y=f.p;try{if(C.T=null,f.p=2,O)return O()}finally{C.T=N,f.p=Y,f.d.f()}},It.preconnect=function(O,N){typeof O=="string"&&(N?(N=N.crossOrigin,N=typeof N=="string"?N==="use-credentials"?N:"":void 0):N=null,f.d.C(O,N))},It.prefetchDNS=function(O){typeof O=="string"&&f.d.D(O)},It.preinit=function(O,N){if(typeof O=="string"&&N&&typeof N.as=="string"){var Y=N.as,H=L(Y,N.crossOrigin),K=typeof N.integrity=="string"?N.integrity:void 0,B=typeof N.fetchPriority=="string"?N.fetchPriority:void 0;Y==="style"?f.d.S(O,typeof N.precedence=="string"?N.precedence:void 0,{crossOrigin:H,integrity:K,fetchPriority:B}):Y==="script"&&f.d.X(O,{crossOrigin:H,integrity:K,fetchPriority:B,nonce:typeof N.nonce=="string"?N.nonce:void 0})}},It.preinitModule=function(O,N){if(typeof O=="string")if(typeof N=="object"&&N!==null){if(N.as==null||N.as==="script"){var Y=L(N.as,N.crossOrigin);f.d.M(O,{crossOrigin:Y,integrity:typeof N.integrity=="string"?N.integrity:void 0,nonce:typeof N.nonce=="string"?N.nonce:void 0})}}else N==null&&f.d.M(O)},It.preload=function(O,N){if(typeof O=="string"&&typeof N=="object"&&N!==null&&typeof N.as=="string"){var Y=N.as,H=L(Y,N.crossOrigin);f.d.L(O,Y,{crossOrigin:H,integrity:typeof N.integrity=="string"?N.integrity:void 0,nonce:typeof N.nonce=="string"?N.nonce:void 0,type:typeof N.type=="string"?N.type:void 0,fetchPriority:typeof N.fetchPriority=="string"?N.fetchPriority:void 0,referrerPolicy:typeof N.referrerPolicy=="string"?N.referrerPolicy:void 0,imageSrcSet:typeof N.imageSrcSet=="string"?N.imageSrcSet:void 0,imageSizes:typeof N.imageSizes=="string"?N.imageSizes:void 0,media:typeof N.media=="string"?N.media:void 0})}},It.preloadModule=function(O,N){if(typeof O=="string")if(N){var Y=L(N.as,N.crossOrigin);f.d.m(O,{as:typeof N.as=="string"&&N.as!=="script"?N.as:void 0,crossOrigin:Y,integrity:typeof N.integrity=="string"?N.integrity:void 0})}else f.d.m(O)},It.requestFormReset=function(O){f.d.r(O)},It.unstable_batchedUpdates=function(O,N){return O(N)},It.useFormState=function(O,N,Y){return C.H.useFormState(O,N,Y)},It.useFormStatus=function(){return C.H.useHostTransitionStatus()},It.version="19.2.7",It}var Qm;function _g(){if(Qm)return Fr.exports;Qm=1;function i(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(u){console.error(u)}}return i(),Fr.exports=Mg(),Fr.exports}var Vm;function wg(){if(Vm)return Vs;Vm=1;var i=Eg(),u=gf(),r=_g();function f(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function y(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function g(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function C(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function L(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function O(e){if(g(e)!==e)throw Error(f(188))}function N(e){var t=e.alternate;if(!t){if(t=g(e),t===null)throw Error(f(188));return t!==e?null:e}for(var n=e,l=t;;){var a=n.return;if(a===null)break;var s=a.alternate;if(s===null){if(l=a.return,l!==null){n=l;continue}break}if(a.child===s.child){for(s=a.child;s;){if(s===n)return O(a),e;if(s===l)return O(a),t;s=s.sibling}throw Error(f(188))}if(n.return!==l.return)n=a,l=s;else{for(var o=!1,h=a.child;h;){if(h===n){o=!0,n=a,l=s;break}if(h===l){o=!0,l=a,n=s;break}h=h.sibling}if(!o){for(h=s.child;h;){if(h===n){o=!0,n=s,l=a;break}if(h===l){o=!0,l=s,n=a;break}h=h.sibling}if(!o)throw Error(f(189))}}if(n.alternate!==l)throw Error(f(190))}if(n.tag!==3)throw Error(f(188));return n.stateNode.current===n?e:t}function Y(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=Y(e),t!==null)return t;e=e.sibling}return null}var H=Object.assign,K=Symbol.for("react.element"),B=Symbol.for("react.transitional.element"),X=Symbol.for("react.portal"),ae=Symbol.for("react.fragment"),Ae=Symbol.for("react.strict_mode"),ge=Symbol.for("react.profiler"),We=Symbol.for("react.consumer"),U=Symbol.for("react.context"),I=Symbol.for("react.forward_ref"),we=Symbol.for("react.suspense"),re=Symbol.for("react.suspense_list"),pe=Symbol.for("react.memo"),ye=Symbol.for("react.lazy"),dt=Symbol.for("react.activity"),Oe=Symbol.for("react.memo_cache_sentinel"),Pe=Symbol.iterator;function nt(e){return e===null||typeof e!="object"?null:(e=Pe&&e[Pe]||e["@@iterator"],typeof e=="function"?e:null)}var Fe=Symbol.for("react.client.reference");function Ct(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===Fe?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case ae:return"Fragment";case ge:return"Profiler";case Ae:return"StrictMode";case we:return"Suspense";case re:return"SuspenseList";case dt:return"Activity"}if(typeof e=="object")switch(e.$$typeof){case X:return"Portal";case U:return e.displayName||"Context";case We:return(e._context.displayName||"Context")+".Consumer";case I:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case pe:return t=e.displayName||null,t!==null?t:Ct(e.type)||"Memo";case ye:t=e._payload,e=e._init;try{return Ct(e(t))}catch{}}return null}var $=Array.isArray,M=u.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Z=r.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ee={pending:!1,data:null,method:null,action:null},fe=[],ne=-1;function S(e){return{current:e}}function z(e){0>ne||(e.current=fe[ne],fe[ne]=null,ne--)}function G(e,t){ne++,fe[ne]=e.current,e.current=t}var J=S(null),W=S(null),ce=S(null),ve=S(null);function Te(e,t){switch(G(ce,t),G(W,e),G(J,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?im(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=im(t),e=sm(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}z(J),G(J,e)}function Se(){z(J),z(W),z(ce)}function he(e){e.memoizedState!==null&&G(ve,e);var t=J.current,n=sm(t,e.type);t!==n&&(G(W,e),G(J,n))}function Ee(e){W.current===e&&(z(J),z(W)),ve.current===e&&(z(ve),Bs._currentValue=ee)}var tn,yn;function Tt(e){if(tn===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);tn=t&&t[1]||"",yn=-1<n.stack.indexOf(`
|
|
3
3
|
at`)?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return`
|
|
4
4
|
`+tn+e+yn}var Ye=!1;function Vt(e,t){if(!e||Ye)return"";Ye=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var l={DetermineComponentFrameRoot:function(){try{if(t){var k=function(){throw Error()};if(Object.defineProperty(k.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(k,[])}catch(w){var _=w}Reflect.construct(e,[],k)}else{try{k.call()}catch(w){_=w}e.call(k.prototype)}}else{try{throw Error()}catch(w){_=w}(k=e())&&typeof k.catch=="function"&&k.catch(function(){})}}catch(w){if(w&&_&&typeof w.stack=="string")return[w.stack,_.stack]}return[null,null]}};l.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var a=Object.getOwnPropertyDescriptor(l.DetermineComponentFrameRoot,"name");a&&a.configurable&&Object.defineProperty(l.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var s=l.DetermineComponentFrameRoot(),o=s[0],h=s[1];if(o&&h){var b=o.split(`
|
|
@@ -14,9 +14,9 @@ This action cannot be undone from Vibelet Web.`)}function Up(i){return`Remote fi
|
|
|
14
14
|
`).replace(kv,"").replace(Uv,"").trim()}function _f(i){const u=qv(i);return Hv.has(u)?"":u}function Bv(i){return _f(i).length>0}function wf(i){const u=_f(i);if(!u)return"";try{const r=JSON.parse(u);if(r&&typeof r=="object"&&!Array.isArray(r)){const f=typeof r.query=="string"?Bu(r.query):"";if(f)return f;const y=typeof r.command=="string"?Bu(r.command):"";if(y)return y;const g=typeof r.description=="string"?Bu(r.description):"";if(g)return g}}catch{}return Bu(u)}function Lv(i,u){if(!u)return[];switch((i??"").toLowerCase()){case"read":return nf(u);case"write":{const f=nf(u),y=Nt(u,"content");return y&&f.push({label:"Content",isDiff:!0,value:"",diffNew:Xs(y,500)}),f}case"edit":{const f=nf(u),y=Nt(u,"old_string")||Nt(u,"oldString"),g=Nt(u,"new_string")||Nt(u,"newString");return(y||g)&&f.push({label:"Change",isDiff:!0,value:"",diffOld:Xs(y,300),diffNew:Xs(g,300)}),f}case"bash":{const f=Nt(u,"command");return f?[{label:"Command",value:f,isCode:!0}]:[]}case"websearch":{const f=Nt(u,"query");return f?[{label:"Query",value:f}]:[]}case"webfetch":{const f=[],y=Nt(u,"url");y&&f.push({label:"URL",value:y});const g=Nt(u,"prompt");return g&&f.push({label:"Prompt",value:Xs(g,200)}),f}case"glob":{const f=Nt(u,"pattern");return f?[{label:"Pattern",value:f}]:[]}case"grep":{const f=[],y=Nt(u,"pattern");y&&f.push({label:"Pattern",value:y,isCode:!0});const g=Nt(u,"path");return g&&f.push({label:"In",value:g,isFilePath:!0}),f}default:{const f=[],y=Nt(u,"command");if(y)return[{label:"Command",value:y,isCode:!0}];const g=Nt(u,"file_path")||Nt(u,"filePath");g&&f.push({label:"Path",value:g,isFilePath:!0});const C=Nt(u,"description");C&&f.push({label:"Description",value:Xs(C,200)});const L=Nt(u,"query");L&&f.push({label:"Query",value:L});const O=Nt(u,"url");return O&&f.push({label:"URL",value:O}),f}}}function Wm(i){return i.role==="tool"?!0:i.type!=="info"?!1:!/^Error:/i.test(i.content.trim())}function Hp(i){const u=[];for(const f of i){const y=f.toolName?.trim();y&&!u.includes(y)&&u.push(y)}return u.length?u.join(", "):i.map(f=>wf(f.content)).find(Boolean)??""}const Yv=/^[A-Za-z_][A-Za-z0-9._:-]*$/,Gv=/(?:^|\s)\$([A-Za-z_][A-Za-z0-9._:-]*|)$/;function Ps(i){return i.trim().toLowerCase()}function Qv(i){const u=i.trim(),r=/^\$([A-Za-z_][A-Za-z0-9._:-]*)(?:\s+([\s\S]*))?$/.exec(u);return r?{name:Ps(r[1]??""),...r[2]?.trim()?{args:r[2].trim()}:{}}:null}function lf(i){const u=Gv.exec(i);if(!u||u.index+u[0].length!==i.length)return null;const r=u[1]??"";if(r&&!Yv.test(r))return null;const f=u[0].lastIndexOf("$");return{start:u.index+f,end:i.length,keyword:Ps(r)}}function Vv(i,u,r){return`${i.slice(0,u.start)}$${Ps(r)} ${i.slice(u.end)}`}function Xv(i,u,r=8){const f=Ps(u);return(f?i.filter(g=>Ps(g.name).includes(f)):i).slice(0,r)}const Zv=/^[A-Za-z][A-Za-z0-9_-]*$/,Kv=[{name:"clear",commandName:"clear",title:"Clear session",description:"Clear this session in place.",source:"Vibelet",agents:["claude","codex"],argsHint:""},{name:"new",commandName:"new",title:"New session",description:"Start a fresh session with the same assistant and directory.",source:"Vibelet",agents:["claude","codex"],argsHint:""},{name:"exit",commandName:"exit",title:"Archive session",description:"Archive this session and return to the session list.",source:"Vibelet",agents:["claude","codex"],argsHint:""},{name:"quit",commandName:"exit",title:"Archive session",description:"Alias for /exit.",source:"Vibelet",agents:["claude","codex"],argsHint:""},{name:"q",commandName:"exit",title:"Archive session",description:"Alias for /exit.",source:"Vibelet",agents:["claude","codex"],argsHint:""},{name:"compact",commandName:"compact",title:"Compact context",description:"Ask the assistant runtime to compact the current session.",source:"Native",agents:["claude","codex"],argsHint:""},{name:"goal",commandName:"goal",title:"Goal",description:"View, set, pause, resume, or clear the current goal.",source:"Native",agents:["claude","codex"],argsHint:"[objective|status|pause|resume|clear]"}];function qp(i){return Kv.filter(u=>!i||u.agents.includes(i))}function Df(i){return i.trim().toLowerCase()}function af(i){if(!i.startsWith("/")||i.startsWith("//"))return null;const u=/^\/([A-Za-z0-9_-]*)$/.exec(i);if(!u)return null;const r=u[1]??"";return r&&!Zv.test(r)?null:{start:0,end:i.length,keyword:Df(r)}}function Jv(i,u,r=8){const f=Df(u);return(f?i.filter(g=>g.name.includes(f)||g.title.toLowerCase().includes(f)).sort((g,C)=>Pm(g,f)-Pm(C,f)):[...i]).slice(0,r)}function Pm(i,u){return i.name===u?0:i.name.startsWith(u)?1:i.name.includes(u)?2:3}function $v(i,u,r){return`${i.slice(0,u.start)}${Bp(r,"")}${i.slice(u.end)}`}function Fv(i,u,r){return u?$v(i,u,r):`${Bp(r,i)}${i}`}function Bp(i,u){const r=u.length>0,f=r&&!/^\s/.test(u),y=!!(i.argsHint&&!r);return`/${i.name}${y||f?" ":""}`}function Iv(i,u){const r=i.trim();if(!r.startsWith("/")||r.startsWith("//"))return null;const f=/^\/([A-Za-z][A-Za-z0-9_-]*)(?:\s+([\s\S]*))?$/.exec(r);if(!f)return null;const y=Df(f[1]??""),g=qp(u).find(L=>L.name===y);if(!g)return null;const C=f[2]?.trim()??"";switch(g.commandName){case"clear":return{raw:r,command:{name:"clear"}};case"new":return{raw:r,command:{name:"new"}};case"exit":return{raw:r,command:{name:"exit"}};case"compact":return{raw:r,command:{name:"compact"}};case"goal":{const L=C.toLowerCase();return!C||L==="status"||L==="show"||L==="usage"||L==="help"?{raw:r,command:{name:"goal",operation:"status"}}:L==="clear"||L==="reset"?{raw:r,command:{name:"goal",operation:"clear"}}:L==="pause"||L==="paused"?{raw:r,command:{name:"goal",operation:"pause"}}:L==="resume"||L==="active"?{raw:r,command:{name:"goal",operation:"resume"}}:{raw:r,command:{name:"goal",operation:"set",objective:C}}}}}function Wv(i){return i.startsWith("//")?i.slice(1):i}function Pv(i){return i.name==="compact"?"/compact":i.name!=="goal"?null:i.operation==="clear"?"/goal clear":i.operation==="pause"?"/goal pause":i.operation==="resume"?"/goal resume":i.operation==="set"&&i.objective?.trim()?`/goal ${i.objective.trim()}`:"/goal"}function e1(i){const u=typeof i?.objective=="string"?i.objective.trim():"";return u?`Goal${typeof i?.status=="string"&&i.status?` (${i.status})`:""}: ${u}`:"Goal: none."}function ep(i){return i==="subscriptionRequired"?"Error: Agent commands require an active Pro subscription.":`Error: ${i||"Command failed."}`}function Lu({icon:i,label:u,menuLabel:r,options:f,value:y,onSelect:g,align:C="left",disabled:L,selected:O,wide:N}){const[Y,H]=v.useState(!1);return c.jsxs("div",{className:"composer-menu",onBlur:K=>{const B=K.relatedTarget;(!B||!K.currentTarget.contains(B))&&H(!1)},onKeyDown:K=>{K.key==="Escape"&&H(!1)},children:[c.jsxs("button",{"aria-expanded":Y,"aria-haspopup":"menu",className:`composer-option-button ${Y||O?"selected":""}`,disabled:L,onClick:()=>H(K=>!K),title:r,type:"button",children:[c.jsx(i,{"aria-hidden":"true"}),c.jsx("span",{children:u}),c.jsx(Pg,{"aria-hidden":"true"})]}),Y?c.jsx("div",{className:`composer-option-popover ${N?"wide":""} ${C==="right"?"align-right":""}`,role:"menu","aria-label":r,children:f.map(K=>{const B=K.icon,X=K.value===y;return c.jsxs("button",{"aria-checked":X,className:X?"selected":"",disabled:K.disabled,onClick:()=>{g(K.value),H(!1)},role:"menuitemradio",title:K.description??K.label,type:"button",children:[c.jsx("span",{className:"composer-menu-icon",children:B?c.jsx(B,{"aria-hidden":"true"}):X?c.jsx(Is,{"aria-hidden":"true"}):null}),c.jsxs("span",{children:[c.jsx("strong",{children:K.label}),K.description?c.jsx("small",{children:K.description}):null]}),X?c.jsx(Is,{className:"composer-menu-check","aria-hidden":"true"}):null]},K.value)})}):null]})}function t1({visible:i,skills:u,onClose:r,onSelect:f,t:y}){return i?c.jsxs("div",{className:"skill-suggestion-popover",children:[c.jsxs("header",{children:[c.jsx("strong",{children:y.skills}),c.jsx("button",{type:"button",className:"icon-button",onClick:r,title:y.closeSkills,children:c.jsx(Dn,{"aria-hidden":"true"})})]}),u.length?c.jsx("div",{className:"skill-suggestion-list",children:u.map(g=>c.jsxs("button",{onClick:()=>f(g),title:g.description??g.name,type:"button",children:[c.jsxs("span",{children:[c.jsxs("strong",{children:["$",g.name]}),g.description?c.jsx("small",{children:g.description}):null]}),c.jsx("em",{children:g.source})]},`${g.source}:${g.name}`))}):c.jsx("p",{children:y.noSkillsFound})]}):null}function n1({visible:i,commands:u,onClose:r,onSelect:f,t:y}){return i?c.jsxs("div",{className:"skill-suggestion-popover command-suggestion-popover",children:[c.jsxs("header",{children:[c.jsx("strong",{children:y.commands}),c.jsx("button",{type:"button",className:"icon-button",onClick:r,title:y.closeCommands,children:c.jsx(Dn,{"aria-hidden":"true"})})]}),u.length?c.jsx("div",{className:"skill-suggestion-list",children:u.map(g=>c.jsxs("button",{onClick:()=>f(g),title:g.description,type:"button",children:[c.jsxs("span",{children:[c.jsxs("strong",{children:["/",g.name]}),c.jsx("small",{children:g.argsHint?`${g.title} ${g.argsHint}`:g.title})]}),c.jsx("em",{children:g.source})]},g.name))}):c.jsx("p",{children:y.noCommandsFound})]}):null}const tp=[{value:"normal",label:"Normal",description:"Ask before risky actions",icon:Xu},{value:"plan",label:"Plan",description:"Plan before edits",icon:Ep},{value:"acceptEdits",label:"Edits",description:"Auto-accept file edits",icon:Is},{value:"autoApprove",label:"Auto",description:"Approve supported actions",icon:Fs}],np=[{value:"",label:"Effort",description:"Use daemon default",icon:Dl},{value:"minimal",label:"Minimal",icon:Dl},{value:"low",label:"Low",icon:Dl},{value:"medium",label:"Medium",icon:Dl},{value:"high",label:"High",icon:Dl},{value:"xhigh",label:"X High",icon:Dl},{value:"max",label:"Max",icon:Dl}];function l1({activeQueue:i,agent:u,attachments:r,approvalMode:f,activeModelOptions:y,busy:g,draft:C,effort:L,fastMode:O,model:N,phase:Y,quickReplies:H,skills:K,uploadBusy:B,t:X,onApprovalModeChange:ae,onCancelQueuedTurn:Ae,onDraftChange:ge,onEffortChange:We,onFastModeChange:U,onModelChange:I,onRefreshSkills:we,onRemoveAttachment:re,onSubmit:pe,onUploadFiles:ye}){const dt=v.useRef(null),Oe=v.useRef(null),[Pe,nt]=v.useState(!1),[Fe,Ct]=v.useState(!1),[$,M]=v.useState(!1),[Z,ee]=v.useState(!1),[fe,ne]=v.useState(""),[S,z]=v.useState(""),G=Y==="connected",J=v.useMemo(()=>qp(u),[u]),W=v.useMemo(()=>af(C),[C]),ce=W?`${W.start}:${W.end}:${W.keyword}`:"",ve=!!(Z||W&&S!==ce),Te=v.useMemo(()=>Jv(J,W?.keyword??"",8),[J,W?.keyword]),Se=v.useMemo(()=>lf(C),[C]),he=Se?`${Se.start}:${Se.end}:${Se.keyword}`:"",Ee=!!(!ve&&($||Se&&fe!==he)),tn=v.useMemo(()=>Xv(K,Se?.keyword??"",8),[Se?.keyword,K]),Tt=y.find(V=>V.value===N)?.label??(N||"Default"),Ye=tp.find(V=>V.value===f)?.label??f,Vt=np.find(V=>V.value===L)?.label??L,gn=y.map(V=>({value:V.value,label:V.label,description:V.desc,icon:Ir}));gn.some(V=>V.value==="")||gn.unshift({value:"",label:"Default",description:"Use daemon default model",icon:Ir}),v.useEffect(()=>{Se||(ne(""),M(!1))},[Se]),v.useEffect(()=>{W||(z(""),ee(!1))},[W]);const Rt=async(V,Ue)=>{await ye(V),Ue.value=""},yt=async V=>{V.preventDefault(),nt(!1),G&&await ye(V.dataTransfer.files)},_t=async V=>{!G||!V.clipboardData.files.length||await ye(V.clipboardData.files)},wt=()=>{he&&ne(he),M(!1),Oe.current?.focus()},gt=()=>{ce&&z(ce),ee(!1),Oe.current?.focus()},ut=()=>{if(ve){gt();return}z(""),!af(C)&&C.length===0&&ge("/"),ee(!0),Oe.current?.focus()},Q=V=>{const Ue=af(C),vt=Fv(C,Ue,V);ge(vt),ee(!1),z(""),Oe.current?.focus()},Ve=()=>{if(Ee){wt();return}if(we(),ne(""),!lf(C)){const V=C.length===0||/\s$/.test(C)?"":" ";ge(`${C}${V}$`)}M(!0),Oe.current?.focus()},ke=V=>{const Ue=lf(C),vt=Ue?Vv(C,Ue,V.name):C.trim().length?`${C}${/\s$/.test(C)?"":" "}$${V.name} `:`$${V.name} `;ge(vt),M(!1),ne(""),Oe.current?.focus()};return c.jsxs("form",{className:`composer ${Pe?"dragging":""}`,onDragEnter:V=>{V.preventDefault(),nt(!0)},onDragLeave:()=>nt(!1),onDragOver:V=>V.preventDefault(),onDrop:V=>{yt(V)},onSubmit:V=>{pe(V)},children:[i.length?c.jsxs("div",{className:"composer-queue-banner",children:[c.jsx(bf,{"aria-hidden":"true"}),c.jsxs("div",{children:[c.jsxs("strong",{children:[i.length," queued"]}),c.jsx("span",{children:i[0]?.content??"A turn is waiting for this session."})]}),c.jsxs("button",{className:"icon-text-button",disabled:g||!i[0],onClick:()=>i[0]&&Ae(i[0]),type:"button",children:[c.jsx(Dn,{"aria-hidden":"true"}),"Withdraw"]})]}):null,Fe&&H.length?c.jsx("div",{className:"quick-reply-row",children:H.slice(0,6).map(V=>c.jsx("button",{onClick:()=>ge(C?`${C}
|
|
15
15
|
${V}`:V),type:"button",children:V},V))}):null,c.jsx(t1,{visible:Ee,skills:tn,onClose:wt,onSelect:ke,t:X}),c.jsx(n1,{visible:ve,commands:Te,onClose:gt,onSelect:Q,t:X}),c.jsx("textarea",{ref:Oe,value:C,onChange:V=>ge(V.target.value),onPaste:V=>{_t(V)},onKeyDown:V=>{V.key==="Enter"&&(V.metaKey||V.ctrlKey)&&pe()},placeholder:X.messagePlaceholder,rows:3,disabled:!G}),c.jsxs("div",{className:"composer-toolbar",children:[c.jsxs("div",{className:"composer-leading-controls",children:[c.jsx("button",{type:"button",className:"icon-button",onClick:()=>dt.current?.click(),title:X.uploadFiles,disabled:!G||B,children:c.jsx(uf,{"aria-hidden":"true"})}),H.length?c.jsx("button",{className:`icon-button ${Fe?"selected":""}`,type:"button",title:Fe?X.hideQuickReplies:X.showQuickReplies,onClick:()=>Ct(V=>!V),children:c.jsx(nv,{"aria-hidden":"true"})}):null,c.jsx("button",{className:`icon-button ${Ee?"selected":""}`,type:"button",title:X.skills,onClick:Ve,disabled:!G||B,children:c.jsx(Fs,{"aria-hidden":"true"})}),c.jsx("button",{className:`icon-button ${ve?"selected":""}`,type:"button",title:X.commands,onClick:ut,disabled:!G||B,children:c.jsx(of,{"aria-hidden":"true"})})]}),c.jsx("input",{ref:dt,type:"file",multiple:!0,hidden:!0,onChange:V=>{Rt(V.currentTarget.files,V.currentTarget)}}),c.jsxs("div",{className:"composer-control-strip",children:[c.jsx(Lu,{icon:Xu,label:Ye,menuLabel:"Approval mode",options:tp,value:f,onSelect:ae,wide:!0}),c.jsx(Lu,{icon:Ir,label:Tt,menuLabel:"Model",options:gn,value:N,onSelect:I,align:"right",wide:!0}),c.jsx(Lu,{icon:Dl,label:Vt||"Effort",menuLabel:"Effort",options:np,value:L,onSelect:We,align:"right"}),c.jsx(Lu,{icon:Fs,label:O?"Fast":"Normal",menuLabel:"Fast mode",options:[{value:"off",label:"Normal",description:"Use standard execution",icon:Dl},{value:"on",label:"Fast",description:"Prefer faster responses",icon:Fs}],value:O?"on":"off",onSelect:V=>U(V==="on"),align:"right",selected:O,wide:!0})]}),c.jsx("button",{type:"submit",className:"send-button",disabled:!G||g||!C.trim(),"aria-label":X.send,title:X.send,children:c.jsx(Vg,{"aria-hidden":"true"})})]}),c.jsx("div",{className:"attachment-row",children:r.length?c.jsx("div",{className:"attachment-list",children:r.map(V=>c.jsxs("span",{children:[c.jsx(Nf,{"aria-hidden":"true"}),V.name||Ka(V.path),c.jsx("small",{children:Dp(V.size)}),c.jsx("button",{type:"button",onClick:()=>re(V.path),title:X.removeAttachment,children:c.jsx(Dn,{"aria-hidden":"true"})})]},V.path))}):c.jsx("span",{className:"attachment-empty",children:B?c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"loading-spinner small","aria-hidden":"true"}),X.uploading]}):X.noFilesAttached})})]})}function a1({cwd:i,paths:u,onClose:r,onOpenRemoteFile:f}){return u.length?c.jsxs("div",{className:"side-drawer",role:"dialog","aria-modal":"true","aria-label":"Attachment preview",children:[c.jsx("button",{className:"side-drawer-backdrop",onClick:r,type:"button","aria-label":"Close attachment preview"}),c.jsxs("aside",{className:"side-drawer-panel",children:[c.jsxs("header",{className:"side-drawer-header",children:[c.jsxs("div",{children:[c.jsx("strong",{children:"Attachments"}),c.jsxs("span",{children:[u.length," file",u.length===1?"":"s"]})]}),c.jsx("button",{className:"icon-button",onClick:r,type:"button",title:"Close",children:c.jsx(Dn,{"aria-hidden":"true"})})]}),c.jsx("div",{className:"stack-list",children:u.map(y=>c.jsxs("button",{className:"data-row attachment-preview-row",onClick:()=>f(y,i),type:"button",children:[c.jsx(Nf,{"aria-hidden":"true"}),c.jsxs("span",{children:[c.jsx("strong",{children:Ka(y)}),c.jsx("small",{children:y})]}),c.jsx(Sf,{"aria-hidden":"true"})]},y))})]})]}):null}const i1="modulepreload",s1=function(i){return"/web/"+i},lp={},Lp=function(u,r,f){let y=Promise.resolve();if(r&&r.length>0){let O=function(N){return Promise.all(N.map(Y=>Promise.resolve(Y).then(H=>({status:"fulfilled",value:H}),H=>({status:"rejected",reason:H}))))};document.getElementsByTagName("link");const C=document.querySelector("meta[property=csp-nonce]"),L=C?.nonce||C?.getAttribute("nonce");y=O(r.map(N=>{if(N=s1(N),N in lp)return;lp[N]=!0;const Y=N.endsWith(".css"),H=Y?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${N}"]${H}`))return;const K=document.createElement("link");if(K.rel=Y?"stylesheet":i1,Y||(K.as="script"),K.crossOrigin="",K.href=N,L&&K.setAttribute("nonce",L),document.head.appendChild(K),Y)return new Promise((B,X)=>{K.addEventListener("load",B),K.addEventListener("error",()=>X(new Error(`Unable to preload CSS for ${N}`)))})}))}function g(C){const L=new Event("vite:preloadError",{cancelable:!0});if(L.payload=C,window.dispatchEvent(L),!L.defaultPrevented)throw C}return y.then(C=>{for(const L of C||[])L.status==="rejected"&&g(L.reason);return u().catch(g)})};function c1({message:i,onClose:u,onCopy:r}){if(!i)return null;const f=i.content;return c.jsxs("section",{className:"message-source-inline","aria-label":"Markdown source",children:[c.jsxs("header",{className:"inline-detail-header",children:[c.jsxs("div",{className:"inline-detail-title",children:[c.jsx("strong",{children:"Markdown Source"}),c.jsx("span",{children:i.type==="info"?"info":i.role})]}),c.jsxs("div",{className:"row-actions",children:[c.jsx("button",{className:"icon-button",onClick:()=>r(f),type:"button",title:"Copy Markdown source",children:c.jsx(Xi,{"aria-hidden":"true"})}),c.jsx("button",{className:"icon-button",onClick:u,type:"button",title:"Close source",children:c.jsx(Dn,{"aria-hidden":"true"})})]})]}),c.jsx("pre",{className:"json-box markdown-source-box",children:f})]})}function u1({field:i}){return i.isDiff?c.jsxs("div",{className:"tool-field diff",children:[c.jsx("span",{children:i.label}),i.diffOld?c.jsxs("pre",{className:"tool-diff old",children:[c.jsx("b",{children:"-"}),i.diffOld]}):null,i.diffNew?c.jsxs("pre",{className:"tool-diff new",children:[c.jsx("b",{children:"+"}),i.diffNew]}):null]}):c.jsxs("div",{className:`tool-field ${i.isCode?"code":""} ${i.isFilePath?"path":""}`,children:[c.jsx("span",{children:i.label}),c.jsx("pre",{children:i.value})]})}function o1({message:i,onCopy:u}){const r=Lv(i.toolName,i.toolInput),f=wf(i.content),y=_f(i.content),g=Bv(i.content)&&!r.length,C=i.toolName??"Tool";return c.jsxs("section",{className:"tool-detail-card",children:[c.jsxs("header",{children:[c.jsx("span",{className:"tool-detail-icon",children:c.jsx(Ef,{"aria-hidden":"true"})}),c.jsxs("div",{children:[c.jsx("strong",{children:C}),f?c.jsx("small",{title:f,children:f}):null]}),c.jsx("button",{className:"icon-button",onClick:()=>u(i.content),type:"button",title:"Copy output",children:c.jsx(Xi,{"aria-hidden":"true"})})]}),r.length?c.jsx("div",{className:"tool-fields",children:r.map((L,O)=>c.jsx(u1,{field:L},`${L.label}:${O}`))}):null,g?c.jsx("pre",{className:"json-box compact",children:y}):null]})}function Yp({messages:i,onClose:u,onCopy:r}){if(!i.length)return null;const y=i.filter(O=>O.role==="tool").length||i.length,g=y===1?"1 Tool Call":`${y} Tool Calls`,C=Hp(i),L=i.map(O=>O.content).join(`
|
|
16
16
|
|
|
17
|
-
`);return c.jsxs("section",{className:"tool-inline-panel","aria-label":"Tool details",children:[c.jsxs("header",{className:"inline-detail-header",children:[c.jsxs("div",{className:"inline-detail-title",children:[c.jsx("strong",{children:g}),c.jsx("span",{title:C,children:C||"tool detail"})]}),c.jsxs("div",{className:"row-actions",children:[c.jsx("button",{className:"icon-button",onClick:()=>r(L),type:"button",title:"Copy output",children:c.jsx(Xi,{"aria-hidden":"true"})}),c.jsx("button",{className:"icon-button",onClick:u,type:"button",title:"Close tool details",children:c.jsx(Dn,{"aria-hidden":"true"})})]})]}),c.jsx("div",{className:"tool-detail-list",children:i.map((O,N)=>c.jsx(o1,{message:O,onCopy:r},`${O.historyKey??O.timestamp??O.toolName??"tool"}:${N}`))})]})}const r1=v.lazy(async()=>Lp(()=>import("./mermaid-O7DHMXV3-Bu3_bMqg.js").then(i=>i.a),__vite__mapDeps([0,1])).then(i=>({default:i.MessageMarkdown})));function f1({activeMatch:i,baseCwd:u,message:r,onCopy:f,onCloseSource:y,onCloseTool:g,onOpenAttachment:C,onOpenRemoteFile:L,onToggleSource:O,onToggleTool:N,sourceOpen:Y,toolOpen:H}){const K=r.role==="tool"?wf(r.content):"";return c.jsxs("article",{className:`message ${r.role} ${r.type==="info"?"info":""} ${i?"match":""}`,children:[c.jsxs("div",{className:"message-meta",children:[c.jsx("span",{children:r.type==="info"?"info":r.role}),c.jsxs("div",{className:"message-meta-side",children:[c.jsx("time",{children:Zu(r.timestamp)}),c.jsxs("div",{className:"message-actions","aria-label":"Message actions",role:"group",children:[c.jsx("button",{"aria-label":"Copy message",onClick:()=>f(r.content),title:"Copy message",type:"button",children:c.jsx(Xi,{"aria-hidden":"true"})}),c.jsx("button",{"aria-label":"View Markdown source","aria-expanded":Y,onClick:O,title:Y?"Hide Markdown source":"View Markdown source",type:"button",children:c.jsx(s0,{"aria-hidden":"true"})})]})]})]}),r.role==="tool"?c.jsxs("button",{className:"tool-inline-summary","aria-expanded":H,onClick:N,type:"button",children:[c.jsxs("span",{children:[c.jsx(fv,{"aria-hidden":"true"}),r.toolName??"Tool"]}),K?c.jsx("small",{children:K}):null]}):r.role==="assistant"?c.jsx(v.Suspense,{fallback:c.jsx("pre",{children:r.content}),children:c.jsx(r1,{baseCwd:u,content:r.content,onOpenRemoteFile:L})}):c.jsx("pre",{children:r.content}),r.images?.length?c.jsxs("div",{className:"message-files",children:[r.images.map(B=>c.jsxs("button",{className:"file-pill",onClick:()=>L(B,u),title:B,type:"button",children:[c.jsx(Nf,{"aria-hidden":"true"}),Ka(B)]},B)),c.jsxs("button",{className:"file-pill",onClick:()=>C(r.images??[]),type:"button",children:[c.jsx(m0,{"aria-hidden":"true"}),"Preview"]})]}):null,Y?c.jsx(c1,{message:r,onClose:y,onCopy:f}):null,r.role==="tool"&&H?c.jsx(Yp,{messages:[r],onClose:g,onCopy:f}):null]})}function d1({matchCount:i,query:u,onChange:r,onNext:f}){return c.jsxs("div",{className:"message-search-bar",children:[c.jsx(Tf,{"aria-hidden":"true"}),c.jsx("input",{value:u,onChange:y=>r(y.target.value),onKeyDown:y=>{y.key==="Enter"&&f()},placeholder:"Search this session"}),c.jsx("span",{children:u.trim()?`${i} match${i===1?"":"es"}`:"all messages"}),u?c.jsx("button",{"aria-label":"Clear message search",className:"icon-button mini-button",onClick:()=>r(""),type:"button",children:c.jsx(Dn,{"aria-hidden":"true"})}):null]})}function h1({activeMatch:i,expanded:u,messages:r,onToggle:f}){const y=r.filter(L=>L.role==="tool").length||r.length,g=Hp(r),C=y===1?"1 tool call":`${y} tool calls`;return c.jsxs("button",{className:`tool-group-bubble ${i?"match":""} ${u?"expanded":""}`,type:"button",onClick:f,"aria-expanded":u,"aria-label":g?`${C}: ${g}`:C,children:[c.jsxs("span",{className:"tool-group-header",children:[c.jsxs("span",{className:"tool-group-title",children:[c.jsx(Ef,{"aria-hidden":"true"}),c.jsx("strong",{children:C})]}),c.jsx(Ig,{className:"tool-group-chevron","aria-hidden":"true"})]}),g?c.jsx("span",{className:"tool-group-summary",children:g}):null]})}function m1({activeSession:i,activeUsage:u,messages:r,renameTitle:f,busy:y,onBrowseFiles:g,onClose:C,onExport:L,onJumpToMessage:O,onRename:N,onRenameTitleChange:Y,onToggleArchived:H,onTogglePinned:K,onViewChanges:B}){const[X,ae]=v.useState(""),Ae=v.useMemo(()=>kp(i),[i]),ge=v.useMemo(()=>{const U=X.trim().toLowerCase();return U?r.map((I,we)=>({message:I,index:we})).filter(({message:I})=>I.role!=="user"&&I.role!=="assistant"?!1:I.content.toLowerCase().includes(U)).slice(0,20):[]},[r,X]),We=U=>{U.preventDefault(),N()};return c.jsxs("div",{className:"session-detail-drawer",role:"dialog","aria-label":"Session details",children:[c.jsx("div",{className:"drawer-backdrop",onClick:C,"aria-hidden":"true"}),c.jsxs("aside",{className:"session-detail-panel",children:[c.jsxs("header",{className:"drawer-header",children:[c.jsxs("div",{children:[c.jsx("span",{className:"eyebrow",children:i.agent}),c.jsx("strong",{title:tl(i),children:tl(i)})]}),c.jsx("button",{className:"icon-button",type:"button",onClick:C,"aria-label":"Close session details",children:c.jsx(Dn,{"aria-hidden":"true"})})]}),c.jsxs("form",{className:"detail-title-form",onSubmit:We,children:[c.jsx("input",{value:f,onChange:U=>Y(U.target.value),placeholder:tl(i)}),c.jsx("button",{className:"primary-button",disabled:y,type:"submit",children:"Rename"})]}),c.jsxs("div",{className:"detail-info-grid",children:[c.jsxs("div",{children:[c.jsx(Ws,{"aria-hidden":"true"}),c.jsx("span",{children:"Working directory"}),c.jsx("strong",{title:i.cwd,children:i.cwd})]}),c.jsxs("div",{children:[c.jsx(O0,{"aria-hidden":"true"}),c.jsx("span",{children:"Messages"}),c.jsx("strong",{children:r.filter(U=>U.role==="user"||U.role==="assistant").length})]}),c.jsxs("div",{children:[c.jsx(C0,{"aria-hidden":"true"}),c.jsx("span",{children:"Session"}),c.jsx("strong",{title:i.sessionId,children:i.sessionId})]}),c.jsxs("div",{children:[c.jsx(Ef,{"aria-hidden":"true"}),c.jsx("span",{children:"Runtime"}),c.jsx("strong",{children:i.runtime.state})]})]}),i.branch||i.diffStat?c.jsxs("button",{className:"detail-command-card",type:"button",onClick:B,children:[c.jsx(Np,{"aria-hidden":"true"}),c.jsxs("span",{children:[i.branch??"Changes",i.diffStat?` · +${i.diffStat.additions} -${i.diffStat.deletions}`:""]})]}):null,c.jsxs("label",{className:"detail-search",children:[c.jsx(Tf,{"aria-hidden":"true"}),c.jsx("input",{value:X,onChange:U=>ae(U.target.value),placeholder:"Search messages"}),X.trim()?c.jsxs("small",{children:[ge.length||"No"," results"]}):null]}),X.trim()&&ge.length?c.jsx("div",{className:"detail-search-results",children:ge.map(({message:U,index:I})=>c.jsxs("button",{type:"button",onClick:()=>{O(I,X),C()},children:[c.jsx("span",{children:U.role}),c.jsx("strong",{children:U.content})]},`${U.historyKey??U.timestamp??I}:${I}`))}):null,X.trim()?null:c.jsxs(c.Fragment,{children:[c.jsxs("button",{className:"detail-command-card",type:"button",onClick:g,children:[c.jsx(Ws,{"aria-hidden":"true"}),c.jsx("span",{children:"Browse files"})]}),c.jsxs("button",{className:"detail-command-card",type:"button",onClick:()=>{navigator.clipboard?.writeText(Ae)},children:[c.jsx(l0,{"aria-hidden":"true"}),c.jsx("span",{title:Ae,children:Ae})]}),c.jsxs("div",{className:"detail-action-grid",children:[c.jsxs("button",{className:"icon-text-button",disabled:y,type:"button",onClick:K,children:[c.jsx(Cf,{"aria-hidden":"true"}),i.pinned?"Unpin":"Pin"]}),c.jsxs("button",{className:"icon-text-button",disabled:y,type:"button",onClick:H,children:[c.jsx(vf,{"aria-hidden":"true"}),i.archived?"Unarchive":"Archive"]}),c.jsxs("button",{className:"icon-text-button",type:"button",onClick:L,children:[c.jsx(Vi,{"aria-hidden":"true"}),"Export"]})]}),u?c.jsxs("p",{className:"detail-usage",children:["Usage: ",u.limits?.fiveHour?.usedPercent??"-","% 5h ·"," ",u.limits?.weekly?.usedPercent??"-","% weekly"]}):null,c.jsxs("p",{className:"detail-usage",children:["Created ",Zu(i.createdAt)]})]})]})]})}function Gp(i,u){return`${i.historyKey??i.timestamp??i.toolName??i.content.slice(0,24)??"message"}:${u}`}function p1(i){const u=[];for(let r=0;r<i.length;r+=1){const f=i[r];if(!Wm(f)){u.push({type:"message",index:r,message:f});continue}const y=[];let g=r;for(;g<i.length&&Wm(i[g]);)y.push({index:g,message:i[g]}),g+=1;u.push({type:"toolGroup",entries:y,id:`tool-group:${y.map(({index:C,message:L})=>Gp(L,C)).join("|")}`}),r=g-1}return u}function y1({activeSession:i,activeSessionId:u,activeModelOptions:r,activeQueue:f,activeUsage:y,agent:g,approvalMode:C,attachments:L,busy:O,cwd:N,draft:Y,effort:H,errorText:K,fastMode:B,historyLoading:X,messages:ae,model:Ae,phase:ge,quickReplies:We,renameTitle:U,respondingSessionIds:I,skills:we,uploadBusy:re,detailsOpen:pe,t:ye,onApprovalModeChange:dt,onBrowseFiles:Oe,onCancelQueuedTurn:Pe,onClearInterrupt:nt,onDraftChange:Fe,onDetailsOpenChange:Ct,onEffortChange:$,onExportActiveSession:M,onFastModeChange:Z,onModelChange:ee,onOpenRemoteFile:fe,onRefreshSessions:ne,onRefreshSkills:S,onRenameSession:z,onRenameTitleChange:G,onRemoveAttachment:J,onRestoreSnapshot:W,onSubmit:ce,onToggleArchived:ve,onTogglePinned:Te,onUploadFiles:Se,onViewChanges:he}){const[Ee,tn]=v.useState(""),[yn,Tt]=v.useState(0),[Ye,Vt]=v.useState(null),[gn,Rt]=v.useState(null),[yt,_t]=v.useState(!1),[wt,gt]=v.useState([]),ut=v.useRef(null),Q=v.useRef([]),Ve=v.useRef(null),ke=v.useRef(null),V=v.useRef(0),Ue=v.useMemo(()=>p1(ae),[ae]),vt=v.useMemo(()=>{const me=Ee.trim().toLowerCase();return me?ae.map((He,ht)=>({index:ht,message:He})).filter(({message:He})=>He.content.toLowerCase().includes(me)):[]},[Ee,ae]),Ie=me=>{navigator.clipboard?.writeText(me).catch(()=>{})},zl=()=>{if(!vt.length)return;const me=yn%vt.length,He=vt[me]?.index;typeof He=="number"&&Q.current[He]?.scrollIntoView({behavior:"smooth",block:"center"}),Tt(ht=>(ht+1)%vt.length)},nn=v.useCallback(()=>{const me=ut.current;me&&(me.scrollTop=me.scrollHeight,_t(!1))},[]),Qn=v.useCallback((me="smooth")=>{const He=ut.current;He&&(He.scrollTo({top:He.scrollHeight,behavior:me}),_t(!1))},[]),Dt=()=>{const me=ut.current;if(!me)return;const He=me.scrollHeight-me.scrollTop-me.clientHeight;_t(He>180)},Vn=v.useMemo(()=>{const me=ae.at(-1);return me?`${ae.length}:${me.historyKey??""}:${me.timestamp??""}:${me.content.length}`:"0"},[ae]);v.useLayoutEffect(()=>{Ve.current!==u&&(Ve.current=u,ke.current=u,V.current=0,Vt(null),Rt(null));const me=V.current===0&&ae.length>0;V.current=ae.length;const He=ut.current;if(!He)return;if(me||ke.current===u&&(!X||ae.length>0)){nn();const Xt=requestAnimationFrame(nn),ma=window.setTimeout(nn,120),Zt=window.setTimeout(nn,360);return ke.current=null,_t(!1),()=>{cancelAnimationFrame(Xt),window.clearTimeout(ma),window.clearTimeout(Zt)}}He.scrollHeight-He.scrollTop-He.clientHeight<240&&nn()},[u,X,Vn,ae.length,ge,nn]);const lt=vt.length&&Ee.trim()?vt[(yn+vt.length-1)%vt.length]?.index:void 0,da=i?tl(i):"New session",vn=i?.cwd??(N.trim()&&N.trim()!=="."?N:""),ha=i?.agent??g,ln=ha==="codex"?"Codex":"Claude";return c.jsxs("section",{className:"chat-pane","aria-label":"Chat",children:[c.jsxs("header",{className:"chat-header",children:[c.jsxs("button",{className:"chat-title-block chat-title-button",type:"button",onClick:()=>i&&Ct(!0),children:[c.jsx("span",{className:`agent-status-pill ${ha}`,children:ln}),c.jsx("h1",{title:da,children:da}),vn?c.jsx("p",{title:vn,children:vn}):null,i?.branch||i?.diffStat?c.jsxs("div",{className:"header-metadata",children:[i.branch?c.jsx("span",{children:i.branch}):null,i.diffStat?c.jsxs("span",{children:["+",i.diffStat.additions," -",i.diffStat.deletions]}):null,i.runtime.state?c.jsx("span",{children:i.runtime.state}):null,i.terminal?.mode?c.jsx("span",{children:i.terminal.mode}):null]}):null]}),c.jsxs("div",{className:"header-actions",children:[c.jsx("button",{type:"button",className:"icon-button",onClick:()=>i&&he(i.sessionId),title:ye.viewChanges,disabled:!i,children:c.jsx(Np,{"aria-hidden":"true"})}),c.jsx("button",{type:"button",className:`icon-button ${i?.pinned?"selected":""}`,onClick:Te,title:i?.pinned?ye.unpin:ye.pin,disabled:!i||O,children:c.jsx(Cf,{"aria-hidden":"true"})}),c.jsx("button",{type:"button",className:`icon-button ${i?.archived?"selected":""}`,onClick:ve,title:i?.archived?ye.unarchive:ye.archive,disabled:!i||O,children:c.jsx(vf,{"aria-hidden":"true"})}),c.jsx("button",{type:"button",className:"icon-button",onClick:W,title:ye.restoreSnapshot,children:c.jsx(X0,{"aria-hidden":"true"})}),c.jsx("button",{type:"button",className:"icon-button",onClick:ne,title:ye.refreshSessions,children:c.jsx(Vu,{"aria-hidden":"true"})})]})]}),c.jsxs("div",{className:"chat-notices","aria-live":"polite",children:[K?c.jsxs("div",{className:"notice error",children:[c.jsx(Dn,{"aria-hidden":"true"}),c.jsx("span",{children:K})]}):null,i?.interruptReason?c.jsxs("div",{className:"notice warning",children:[c.jsx(Fs,{"aria-hidden":"true"}),c.jsx("span",{children:i.interruptReason.humanText||i.interruptReason.kind}),c.jsx("button",{className:"icon-text-button",disabled:O,onClick:nt,type:"button",children:ye.clear})]}):null,i?.stallWarning?c.jsxs("div",{className:"notice warning",children:[c.jsx(bf,{"aria-hidden":"true"}),c.jsx("span",{children:i.stallWarning.humanText||"Agent may be stalled"})]}):null]}),ge==="missing-pair"?c.jsxs("div",{className:"empty-state",children:[c.jsx(Af,{"aria-hidden":"true"}),c.jsx("h2",{children:ye.openDaemonWebLink}),c.jsx("p",{children:ye.openDaemonWebLinkHint}),c.jsx("code",{children:"vibelet --access=quick"})]}):c.jsxs("div",{className:"message-scroll",ref:ut,onScroll:Dt,children:[c.jsx(d1,{matchCount:vt.length,query:Ee,onChange:me=>{tn(me),Tt(0)},onNext:zl}),X&&ae.length===0?c.jsxs("div",{className:"loading-line",children:[c.jsx("span",{className:"loading-spinner","aria-hidden":"true"}),ye.loadingHistory]}):null,!X&&ae.length===0?c.jsxs("div",{className:"empty-state compact",children:[c.jsx(Xu,{"aria-hidden":"true"}),c.jsx("h2",{children:i?ye.noVisibleMessages:ye.startDaemonSession}),c.jsx("p",{children:ye.emptyChatHint})]}):null,Ue.map(me=>{if(me.type==="toolGroup"){const Zt=me.entries.map(bn=>bn.message),Rl=me.entries.some(bn=>lt===bn.index),an=gn===me.id;return c.jsx("div",{className:"message-frame tool info",ref:bn=>{for(const Xn of me.entries)Q.current[Xn.index]=bn},children:c.jsxs("div",{className:"inline-message-stack",children:[c.jsx(h1,{activeMatch:Rl,expanded:an,messages:Zt,onToggle:()=>Rt(bn=>bn===me.id?null:me.id)}),an?c.jsx(Yp,{messages:Zt,onClose:()=>Rt(null),onCopy:Ie}):null]})},me.id)}const{index:He,message:ht}=me,Ot=Gp(ht,He),Xt=Ye===Ot,ma=gn===Ot;return c.jsx("div",{className:`message-frame ${ht.role} ${ht.type==="info"?"info":""}`,ref:Zt=>{Q.current[He]=Zt},children:c.jsx(f1,{activeMatch:lt===He,baseCwd:i?.cwd,message:ht,onCopy:Ie,onCloseSource:()=>Vt(null),onCloseTool:()=>Rt(null),onOpenAttachment:gt,onOpenRemoteFile:fe,onToggleSource:()=>Vt(Zt=>Zt===Ot?null:Ot),onToggleTool:()=>Rt(Zt=>Zt===Ot?null:Ot),sourceOpen:Xt,toolOpen:ma})},Ot)}),u&&I.has(u)?c.jsxs("div",{className:"typing-line",children:[c.jsx("span",{}),ye.agentResponding]}):null,yt?c.jsx("button",{className:"scroll-latest-button",type:"button","aria-label":ye.scrollToLatest,title:ye.scrollToLatest,onClick:()=>Qn(),children:c.jsx(Gg,{"aria-hidden":"true"})}):null]}),ge!=="missing-pair"?c.jsx(l1,{activeModelOptions:r,activeQueue:f,agent:g,approvalMode:C,attachments:L,busy:O,draft:Y,effort:H,fastMode:B,model:Ae,phase:ge,quickReplies:We,skills:we,uploadBusy:re,onApprovalModeChange:dt,onCancelQueuedTurn:Pe,onDraftChange:Fe,onEffortChange:$,onFastModeChange:Z,onModelChange:ee,onRemoveAttachment:J,onRefreshSkills:S,onSubmit:ce,onUploadFiles:Se,t:ye}):null,pe&&i?c.jsx(m1,{activeSession:i,activeUsage:y,busy:O,messages:ae,renameTitle:U,onBrowseFiles:()=>{Ct(!1),Oe()},onClose:()=>Ct(!1),onExport:M,onJumpToMessage:(me,He)=>{tn(He),Tt(0),Q.current[me]?.scrollIntoView({behavior:"smooth",block:"center"})},onRename:z,onRenameTitleChange:G,onToggleArchived:ve,onTogglePinned:Te,onViewChanges:()=>he(i.sessionId)}):null,c.jsx(a1,{cwd:i?.cwd,paths:wt,onClose:()=>gt([]),onOpenRemoteFile:fe})]})}const g1=[{tab:"session",label:"Session controls",Icon:Ep},{tab:"files",label:"Files",Icon:Ws},{tab:"admin",label:"Settings",Icon:F0}];function v1({value:i,onChange:u}){return c.jsx("div",{className:"control-tabs",children:g1.map(({tab:r,label:f,Icon:y})=>c.jsx("button",{className:i===r?"selected":"",onClick:()=>u(r),title:f,type:"button",children:c.jsx(y,{"aria-hidden":"true"})},r))})}function b1({cwd:i,entries:u,error:r,loaded:f,loading:y,path:g,onPathChange:C,onListDirectory:L,onOpenRemoteFile:O}){return c.jsxs(c.Fragment,{children:[c.jsxs("label",{className:"field",children:[c.jsx("span",{children:"Path"}),c.jsxs("div",{className:"field-row",children:[c.jsx("input",{value:g,onChange:N=>C(N.target.value)}),c.jsx("button",{className:"icon-button",onClick:()=>L(),type:"button",children:y?c.jsx(z0,{"aria-hidden":"true"}):c.jsx(Vu,{"aria-hidden":"true"})})]})]}),r?c.jsx("p",{className:"empty-copy",children:r}):null,y?c.jsx("p",{className:"empty-copy",children:"Loading files..."}):null,c.jsxs("div",{className:"file-list tree-list",children:[Fm(g)?c.jsxs("button",{onClick:()=>L(Fm(g)??g),type:"button",children:[c.jsx(Ws,{"aria-hidden":"true"}),".."]}):null,u.map(N=>{const Y=Op(g,N.name);return c.jsxs("button",{onClick:()=>N.isDirectory?L(Y):O(Y,i),type:"button",children:[N.isDirectory?c.jsx(jf,{"aria-hidden":"true"}):c.jsx(xf,{"aria-hidden":"true"}),N.name]},`${N.name}:${N.isDirectory}`)})]}),f&&!y&&!r&&u.length===0?c.jsx("p",{className:"empty-copy",children:"No files in this directory."}):null]})}const S1=v.lazy(()=>Lp(()=>import("./mermaid-O7DHMXV3-Bu3_bMqg.js").then(i=>i.a),__vite__mapDeps([0,1])).then(i=>({default:i.MessageMarkdown})));function x1({file:i,mode:u,onModeChange:r,onOpenRemoteFile:f,onTextChange:y}){return c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"segmented editor-mode-tabs",children:[c.jsx("button",{className:u==="edit"?"selected":"",onClick:()=>r("edit"),type:"button",children:"Editor"}),c.jsx("button",{className:u==="preview"?"selected":"",onClick:()=>r("preview"),type:"button",children:"Preview"}),c.jsx("button",{className:u==="source"?"selected":"",onClick:()=>r("source"),type:"button",children:"Source"})]}),u==="edit"?c.jsx("textarea",{className:"remote-editor",value:i.text,onChange:g=>y(g.target.value),rows:14}):u==="preview"?c.jsx("div",{className:"remote-markdown-preview",children:c.jsx(v.Suspense,{fallback:c.jsx("pre",{className:"json-box source-viewer",children:i.text}),children:c.jsx(S1,{content:i.text,baseCwd:i.cwd,onOpenRemoteFile:f})})}):c.jsx("pre",{className:"json-box source-viewer",children:i.text})]})}function j1({busy:i,cwd:u,directory:r,newDirName:f,remoteFileMode:y,remoteFile:g,remoteFileConflict:C,onCreateDirectory:L,onDirectoryPathChange:O,onDownloadRemoteFile:N,onListDirectory:Y,onNewDirNameChange:H,onOpenRemoteFile:K,onRemoteFileModeChange:B,onRemoteFileTextChange:X,onSaveRemoteFile:ae}){return c.jsxs(c.Fragment,{children:[c.jsxs("section",{className:"control-section",children:[c.jsx("h2",{children:"File Tree"}),c.jsx(b1,{cwd:u,entries:r.entries,error:r.error,loaded:r.loaded,loading:r.loading,path:r.path,onListDirectory:Y,onOpenRemoteFile:K,onPathChange:O}),c.jsxs("div",{className:"field-row",children:[c.jsx("input",{value:f,onChange:Ae=>H(Ae.target.value),placeholder:"New folder"}),c.jsxs("button",{className:"icon-text-button",onClick:L,type:"button",disabled:!f.trim(),children:[c.jsx(jf,{"aria-hidden":"true"}),"Create"]})]})]}),c.jsxs("section",{className:"control-section remote-file-section",children:[c.jsx("h2",{children:"Remote File"}),g?c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"file-title",children:[g.kind==="image"?c.jsx(E0,{"aria-hidden":"true"}):c.jsx(xf,{"aria-hidden":"true"}),c.jsxs("div",{children:[c.jsx("strong",{children:Ka(g.path)}),c.jsxs("span",{children:[g.contentType," · ",Dp(g.size)]})]})]}),c.jsxs("div",{className:"attention-actions",children:[c.jsxs("button",{className:"icon-text-button",onClick:N,type:"button",children:[c.jsx(Vi,{"aria-hidden":"true"}),"Download"]}),c.jsxs("button",{className:"icon-text-button",onClick:()=>navigator.clipboard?.writeText(g.path),type:"button",children:[c.jsx(Xi,{"aria-hidden":"true"}),"Copy path"]})]}),g.kind==="text"?c.jsxs(c.Fragment,{children:[c.jsx(x1,{file:g,mode:y,onModeChange:B,onOpenRemoteFile:K,onTextChange:X}),c.jsxs("button",{className:"primary-button full-width",disabled:!g.dirty||i,onClick:()=>ae(),type:"button",children:[c.jsx(K0,{"aria-hidden":"true"}),"Save file"]}),C?c.jsxs("div",{className:"notice warning inline-notice",children:[c.jsx(bf,{"aria-hidden":"true"}),c.jsx("span",{children:Up(g.path)}),c.jsx("button",{className:"danger-button",disabled:i,onClick:()=>Qi(`Overwrite ${Ka(g.path)}?`)&&ae({force:!0}),type:"button",children:"Force save"})]}):null]}):g.kind==="image"&&g.objectUrl?c.jsx("img",{className:"remote-image",src:g.objectUrl,alt:Ka(g.path)}):c.jsx("p",{className:"empty-copy",children:"Binary preview is not available. Use download to inspect this file."})]}):c.jsx("p",{className:"empty-copy",children:"Select an attachment or a file from the directory browser."})]})]})}function A1({activeApproval:i,activeQuestion:u,busy:r,questionAnswers:f,t:y,onCancelQuestion:g,onQuestionChoice:C,onRespondApproval:L,onRespondQuestion:O}){const N=!!(i||u);return c.jsxs(c.Fragment,{children:[N?null:c.jsxs("section",{className:"control-section",children:[c.jsx("h2",{children:y.pendingActions}),c.jsx("p",{className:"empty-copy",children:y.noPendingActions})]}),i?c.jsxs("section",{className:"attention-panel",children:[c.jsxs("div",{className:"attention-head",children:[c.jsx(Xu,{"aria-hidden":"true"}),c.jsxs("div",{children:[c.jsx("h2",{children:y.approvalRequired}),c.jsx("p",{children:i.toolName})]})]}),c.jsx("p",{children:i.description}),c.jsx("pre",{children:Rp(i.input)}),c.jsxs("div",{className:"attention-actions",children:[c.jsxs("button",{type:"button",className:"danger-button",onClick:()=>L(!1),disabled:r,children:[c.jsx(Dn,{"aria-hidden":"true"}),y.deny]}),c.jsxs("button",{type:"button",className:"approve-button",onClick:()=>L(!0),disabled:r,children:[c.jsx(Is,{"aria-hidden":"true"}),y.approve]})]})]}):null,u?c.jsxs("section",{className:"attention-panel",children:[c.jsxs("div",{className:"attention-head",children:[c.jsx(Af,{"aria-hidden":"true"}),c.jsxs("div",{children:[c.jsx("h2",{children:y.inputNeeded}),c.jsxs("p",{children:[u.questions.length," question",u.questions.length>1?"s":""]})]})]}),u.questions.map(Y=>c.jsxs("div",{className:"question-block",children:[c.jsx("strong",{children:Y.question}),c.jsx("div",{className:"choice-list",children:Y.options.map(H=>{const K=(f[Y.id]??[]).includes(H.label);return c.jsxs("button",{className:K?"selected":"",onClick:()=>C(Y.id,H.label,Y.multiSelect),type:"button",children:[c.jsx("span",{children:H.label}),H.description?c.jsx("small",{children:H.description}):null]},H.label)})})]},Y.id)),c.jsxs("div",{className:"attention-actions",children:[c.jsxs("button",{type:"button",className:"danger-button",onClick:g,disabled:r,children:[c.jsx(Dn,{"aria-hidden":"true"}),y.cancel]}),c.jsxs("button",{type:"button",className:"approve-button",onClick:O,disabled:r,children:[c.jsx(Is,{"aria-hidden":"true"}),y.submit]})]})]}):null]})}function ap({session:i,active:u,responding:r,tagLabels:f,onSelect:y,onContextMenu:g,onViewChanges:C}){const L=!!i.diffStat&&(i.diffStat.additions>0||i.diffStat.deletions>0),O=tl(i);return c.jsxs("button",{className:`session-row ${u?"active":""} ${i.archived?"archived":""}`,onContextMenu:g,onClick:y,title:O,type:"button",children:[c.jsxs("span",{className:"session-row-head",children:[c.jsx("strong",{children:O}),r?c.jsx(t0,{"aria-label":"Responding"}):null]}),c.jsx("span",{children:i.cwd}),f?.length?c.jsx("span",{className:"directory-tag-row",title:"Directory tags",children:f.map(N=>c.jsx("em",{children:N},N))}):null,c.jsxs("small",{children:[i.agent," · ",Zu(i.lastActivityAt),i.branch?` · ${i.branch}`:"",i.diffStat&&!C?` · +${i.diffStat.additions}/-${i.diffStat.deletions}`:"",i.pinned?" · pinned":"",i.archived?" · archived":""]}),L&&C&&i.diffStat?c.jsxs("span",{className:"session-diff-badge",role:"button",tabIndex:0,title:"View changes",onClick:N=>{N.stopPropagation(),C()},onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.preventDefault(),N.stopPropagation(),C())},children:[c.jsxs("span",{className:"diff-add",children:["+",i.diffStat.additions]}),c.jsxs("span",{className:"diff-del",children:["-",i.diffStat.deletions]})]}):null]})}function Qp({ariaLabel:i,options:u,value:r,disabled:f,onChange:y}){return c.jsx("div",{className:"chip-group",role:"radiogroup","aria-label":i,children:u.map(g=>c.jsx("button",{"aria-checked":r===g.value,className:r===g.value?"selected":"",disabled:f,onClick:()=>y(g.value),role:"radio",title:g.title??g.label,type:"button",children:g.label},g.value))})}function N1({agentFilter:i,t:u,onAgentFilterChange:r}){return c.jsxs("div",{className:"session-filter-panel",children:[c.jsx("span",{className:"filter-section-label",children:u.agentFilterLabel}),c.jsx(Qp,{ariaLabel:u.agentFilterLabel,value:i,options:[{value:"all",label:u.agentFilterAll},{value:"claude",label:u.agentFilterClaude},{value:"codex",label:u.agentFilterCodex}],onChange:r})]})}function C1({activeSessionId:i,busy:u,collapsedFolders:r,displayName:f,directoryTags:y,folderCounts:g,groupFolders:C,groupedSessions:L,hideArchived:O,inventoryVersion:N,nextCursor:Y,phase:H,pendingSessionIds:K,respondingSessionIds:B,search:X,sessionAgentFilter:ae,sessionsCount:Ae,sinceFilter:ge,statusText:We,t:U,visibleSessions:I,onLoadMore:we,onCopyResumeCommand:re,onCreateSession:pe,onDeleteSession:ye,onBrowseFolder:dt,onEditFolderTags:Oe,onOpenSessionDetails:Pe,onNewInFolder:nt,onResetFilters:Fe,onSearchChange:Ct,onSearchCommit:$,onSelectSession:M,onToggleSessionArchived:Z,onToggleSessionPinned:ee,onSessionAgentFilterChange:fe,onSinceFilterChange:ne,onToggleFolder:S,onToggleGroupFolders:z,onToggleHideArchived:G,onToggleCollapse:J,onViewChanges:W}){const[ce,ve]=v.useState(!1),[Te,Se]=v.useState(null),[he,Ee]=v.useState(null),tn=v.useRef(null),yn=ae!=="all"||ge!=="30d"||C||O,Tt=!!(Y?.lastActivityAt&&Y.sessionId),Ye=Te?!!K?.has(Te.session.sessionId):!1,Vt=Q=>y[Q?.trim()||"/"]??[],gn=H==="connected"?`${I.length}/${Ae} sessions · v${N??"-"}`:U.sameOriginAccess,Rt=`${We} · ${gn}`;v.useEffect(()=>{if(!ce&&!Te&&!he)return;const Q=ke=>{const V=ke.target;V instanceof Node&&tn.current?.contains(V)||(ve(!1),Se(null),Ee(null))},Ve=ke=>{ke.key==="Escape"&&(ve(!1),Se(null),Ee(null))};return document.addEventListener("pointerdown",Q),document.addEventListener("keydown",Ve),()=>{document.removeEventListener("pointerdown",Q),document.removeEventListener("keydown",Ve)}},[Te,he,ce]);const yt=(Q,Ve)=>{const ke=Q.currentTarget.getBoundingClientRect(),V=192,Ue=114;Se(null),Ee({...Ve?{folder:Ve}:{},x:Math.min(ke.right-V,window.innerWidth-V-10),y:Math.min(ke.bottom+8,window.innerHeight-Ue-10)})},_t=(Q,Ve)=>{Q.preventDefault();const ke=224,V=306;Ee(null),Se({session:Ve,x:Math.min(Q.clientX,window.innerWidth-ke-10),y:Math.min(Q.clientY,window.innerHeight-V-10)})},wt=()=>Se(null),gt=Q=>{if(!Te)return;const{session:Ve}=Te;wt(),Q(Ve)},ut=Q=>{if(!he)return;const{folder:Ve}=he;if(Ee(null),Ve){nt(Ve,Q);return}pe(Q)};return c.jsxs("aside",{className:"session-rail","aria-label":"Sessions",children:[c.jsxs("div",{className:"brand-block",children:[c.jsx("div",{className:"brand-mark",children:c.jsx(of,{"aria-hidden":"true"})}),c.jsxs("div",{className:"brand-copy",children:[c.jsx("strong",{children:"Vibelet Web"}),c.jsx("span",{children:f??"Daemon workspace"})]}),J?c.jsx("button",{"aria-label":U.collapseSessionSidebar,className:"sidebar-panel-collapse-button session-rail-collapse-button",onClick:J,title:U.collapseSessionSidebar,type:"button",children:c.jsx(Cp,{"aria-hidden":"true"})}):null]}),c.jsxs("div",{className:`connection-strip ${H}`,title:Rt,children:[c.jsx(Tp,{"aria-hidden":"true"}),c.jsx("strong",{className:"connection-status-label",children:We})]}),c.jsxs("div",{className:"rail-list-heading",children:[c.jsx("span",{children:U.sessions}),c.jsx("button",{"aria-label":U.newSession,className:"rail-create-button",disabled:u||H!=="connected",onClick:Q=>yt(Q),title:U.newSession,type:"button",children:c.jsx(uf,{"aria-hidden":"true"})})]}),c.jsxs("div",{className:"search-filter-wrap",ref:tn,children:[c.jsxs("div",{className:"search-box",children:[c.jsx(Tf,{"aria-hidden":"true"}),c.jsx("input",{value:X,onBlur:$,onChange:Q=>Ct(Q.target.value),onKeyDown:Q=>{Q.key==="Enter"&&$()},placeholder:U.searchSessions}),c.jsx("button",{"aria-expanded":ce,"aria-label":U.sessionFilters,className:`filter-toggle ${ce||yn?"selected":""}`,onClick:()=>ve(Q=>!Q),title:U.sessionFilters,type:"button",children:c.jsx(b0,{"aria-hidden":"true"})})]}),ce?c.jsxs("div",{className:"filter-popover",role:"dialog","aria-label":U.sessionFilters,children:[c.jsx(N1,{agentFilter:ae,t:U,onAgentFilterChange:fe}),c.jsxs("div",{className:"filter-section",children:[c.jsx("span",{className:"filter-section-label",children:U.searchTimeRangeLabel}),c.jsx("div",{className:"rail-filters",role:"group","aria-label":U.searchTimeRangeLabel,children:["all","7d","30d","90d"].map(Q=>c.jsx("button",{className:ge===Q?"selected":"",onClick:()=>ne(Q),type:"button",children:Q==="all"?U.searchTimeRangeAllTime:Q==="7d"?U.searchTimeRangeLast7Days:Q==="30d"?U.searchTimeRangeLast30Days:U.searchTimeRangeLast90Days},Q))})]}),c.jsxs("div",{className:"filter-section",children:[c.jsx("span",{className:"filter-section-label",children:U.filterViewOptions}),c.jsxs("div",{className:"filter-switch-card",children:[c.jsxs("button",{"aria-pressed":C,className:C?"selected":"",onClick:z,type:"button",children:[c.jsx("span",{children:U.groupByFolder}),c.jsx("span",{className:"filter-switch-track","aria-hidden":"true",children:c.jsx("span",{})})]}),c.jsxs("button",{"aria-pressed":O,className:O?"selected":"",onClick:G,type:"button",children:[c.jsx("span",{children:U.hideArchived}),c.jsx("span",{className:"filter-switch-track","aria-hidden":"true",children:c.jsx("span",{})})]})]})]}),yn?c.jsx("button",{className:"filter-reset-button",onClick:Fe,type:"button",children:U.resetFilters}):null]}):null]}),c.jsxs("div",{className:"session-list",children:[C?L.map(Q=>{const Ve=r[Q.folder];return c.jsxs("div",{className:"folder-group",children:[c.jsxs("div",{className:"folder-header",children:[c.jsxs("button",{onClick:()=>S(Q.folder),type:"button",children:[c.jsx(jf,{"aria-hidden":"true"}),c.jsx("span",{children:Q.folder}),c.jsx("small",{children:g[Q.folder]??Q.sessions.length})]}),c.jsx("button",{className:"mini-button",disabled:H!=="connected",onClick:()=>dt(Q.folder),title:U.browseFolder,type:"button",children:c.jsx(Ws,{"aria-hidden":"true"})}),c.jsx("button",{className:"mini-button",onClick:()=>Oe(Q.folder),title:U.editDirectoryTags,type:"button",children:c.jsx(iv,{"aria-hidden":"true"})}),c.jsx("button",{className:"mini-button",disabled:u||H!=="connected",onClick:ke=>yt(ke,Q.folder),title:U.newSession,type:"button",children:c.jsx(uf,{"aria-hidden":"true"})})]}),Vt(Q.folder).length?c.jsx("div",{className:"folder-tag-row",children:Vt(Q.folder).map(ke=>c.jsx("span",{children:ke},ke))}):null,Ve?null:Q.sessions.map(ke=>c.jsx(ap,{active:ke.sessionId===i,responding:B.has(ke.sessionId),session:ke,tagLabels:Vt(ke.cwd),onContextMenu:V=>_t(V,ke),onSelect:()=>M(ke.sessionId),onViewChanges:W?()=>W(ke.sessionId):void 0},ke.sessionId))]},Q.folder)}):I.map(Q=>c.jsx(ap,{active:Q.sessionId===i,responding:B.has(Q.sessionId),session:Q,tagLabels:Vt(Q.cwd),onContextMenu:Ve=>_t(Ve,Q),onSelect:()=>M(Q.sessionId),onViewChanges:W?()=>W(Q.sessionId):void 0},Q.sessionId)),I.length===0?c.jsx("p",{className:"empty-copy",children:U.noSessionsMatch}):null,Tt&&Y?c.jsxs("button",{className:"icon-text-button load-more-button",disabled:u,onClick:()=>we(Y),type:"button",children:[c.jsx(Vu,{"aria-hidden":"true"}),U.loadMore]}):null]}),he?c.jsxs("div",{className:"session-create-menu",role:"menu",style:{left:he.x,top:he.y},onPointerDown:Q=>Q.stopPropagation(),children:[c.jsxs("button",{type:"button",role:"menuitem",onClick:()=>ut("claude"),children:[c.jsx(Jg,{"aria-hidden":"true"}),c.jsxs("span",{children:[c.jsx("strong",{children:"Claude"}),c.jsx("small",{children:U.claudeSession})]})]}),c.jsxs("button",{type:"button",role:"menuitem",onClick:()=>ut("codex"),children:[c.jsx(of,{"aria-hidden":"true"}),c.jsxs("span",{children:[c.jsx("strong",{children:"Codex"}),c.jsx("small",{children:U.codexSession})]})]})]}):null,Te?c.jsxs("div",{className:"session-context-menu",role:"menu",style:{left:Te.x,top:Te.y},onPointerDown:Q=>Q.stopPropagation(),children:[c.jsxs("button",{type:"button",role:"menuitem",onClick:()=>gt(Q=>M(Q.sessionId)),children:[c.jsx(Sf,{"aria-hidden":"true"}),U.open]}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye,onClick:()=>gt(Pe),children:[c.jsx(_0,{"aria-hidden":"true"}),U.details]}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye,onClick:()=>gt(re),children:[c.jsx(Xi,{"aria-hidden":"true"}),U.copyResumeCommand]}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye||!W||!Te.session.branch&&!Te.session.diffStat,onClick:()=>gt(Q=>W?.(Q.sessionId)),children:[c.jsx(f0,{"aria-hidden":"true"}),U.viewChanges]}),c.jsx("span",{className:"context-menu-separator"}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye,onClick:()=>gt(ee),children:[c.jsx(Cf,{"aria-hidden":"true"}),Te.session.pinned?U.unpin:U.pin]}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye,onClick:()=>gt(Z),children:[c.jsx(vf,{"aria-hidden":"true"}),Te.session.archived?U.unarchive:U.archive]}),c.jsxs("button",{className:"danger",type:"button",role:"menuitem",onClick:()=>gt(ye),children:[c.jsx(Mp,{"aria-hidden":"true"}),U.delete]})]}):null]})}function T1({busy:i,connected:u,dismissed:r,feedback:f,synced:y,t:g,onPull:C,onPushMerge:L,onPushReplace:O,onSkip:N}){const Y=!u||i!==null;return c.jsxs("section",{className:"control-section compact-section archive-sync-panel",children:[c.jsx("h2",{children:g.archiveSyncTitle}),c.jsx("p",{className:"empty-copy",children:y?g.archiveSyncSynced:r?g.archiveSyncSkippedState:g.archiveSyncBody}),c.jsxs("div",{className:"action-grid archive-sync-actions",children:[c.jsxs("button",{className:"icon-text-button",disabled:Y,onClick:L,type:"button",children:[c.jsx(A0,{"aria-hidden":"true"}),i==="pushMerge"?g.archiveSyncSyncing:g.archiveSyncPushMerge]}),c.jsxs("button",{className:"icon-text-button",disabled:Y,onClick:C,type:"button",children:[c.jsx(Vi,{"aria-hidden":"true"}),i==="pull"?g.archiveSyncSyncing:g.archiveSyncPull]}),c.jsxs("button",{className:"icon-text-button",disabled:Y,onClick:O,type:"button",children:[c.jsx(ov,{"aria-hidden":"true"}),i==="pushReplace"?g.archiveSyncSyncing:g.archiveSyncPushReplace]}),c.jsxs("button",{className:"icon-text-button",disabled:Y,onClick:N,type:"button",children:[c.jsx(Bg,{"aria-hidden":"true"}),g.archiveSyncSkip]})]}),f?c.jsx("p",{className:`empty-copy ${f.tone==="error"?"error-copy":"success-copy"}`,children:f.message}):null]})}function E1({pairing:i,phase:u,t:r,onForgetPairing:f}){const y=u==="connected"?"connected":i?u:r.notPaired;return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:r.currentDevice}),c.jsxs("dl",{children:[c.jsxs("div",{children:[c.jsx("dt",{children:r.daemon}),c.jsx("dd",{children:i?.displayName??i?.daemonId??r.notPaired})]}),c.jsxs("div",{children:[c.jsx("dt",{children:r.status}),c.jsx("dd",{children:y})]})]}),c.jsx("div",{className:"action-grid",children:c.jsxs("button",{className:"danger-button",disabled:!i,onClick:f,type:"button",children:[c.jsx(Af,{"aria-hidden":"true"}),r.forget]})})]})}function M1({connected:i,metadata:u,showUpdate:r,updateBusy:f,restartBusy:y,t:g,updateStatus:C,onUpdate:L,onRestart:O}){const N=u.version&&u.latestVersion&&r?`${u.version} -> ${u.latestVersion}`:u.version||g.unknown;return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:g.desktopConnector}),c.jsx("dl",{children:c.jsxs("div",{children:[c.jsx("dt",{children:g.version}),c.jsx("dd",{children:u.loading?g.checking:N})]})}),c.jsxs("div",{className:"action-grid",children:[r?c.jsxs("button",{className:"primary-button",disabled:!i||f||y,onClick:L,type:"button",children:[c.jsx(Vi,{"aria-hidden":"true"}),f?g.updating:g.update]}):null,c.jsxs("button",{className:"danger-button",disabled:!i||y,onClick:O,type:"button",children:[c.jsx(Vu,{"aria-hidden":"true"}),y?g.restarting:g.restart]})]}),u.error?c.jsx("p",{className:"empty-copy",children:u.error}):null,C?c.jsx("p",{className:"empty-copy",children:C}):null]})}function _1({language:i,t:u,onLanguageChange:r}){return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:u.language}),c.jsxs("label",{className:"field",children:[c.jsx("span",{children:u.displayLanguage}),c.jsx(Qp,{ariaLabel:u.displayLanguage,options:[{value:"system",label:u.followSystem},{value:"en",label:u.english},{value:"zh",label:u.chinese}],value:i,onChange:f=>r(f)})]})]})}function w1({notificationsBlocked:i,permission:u,settings:r,t:f,onToggleEnabled:y}){return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:f.notifications}),c.jsxs("label",{className:`toggle-field notification-toggle ${i?"disabled":""}`,children:[c.jsxs("span",{children:[c.jsx(Zg,{"aria-hidden":"true"}),f.browserAlerts]}),c.jsx("input",{type:"checkbox",checked:r.enabled&&!i&&u==="granted",disabled:i,onChange:g=>y(g.target.checked)})]}),i?c.jsx("p",{className:"empty-copy",children:f.notificationsBlocked}):null]})}function D1({activeDaemonId:i,busy:u,t:r,targets:f,onConnect:y,onForget:g}){return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:r.savedDevices}),c.jsxs("div",{className:"stack-list",children:[f.map(C=>c.jsxs("div",{className:"data-row target-row",children:[c.jsxs("div",{children:[c.jsxs("strong",{children:[C.label,C.daemonId===i?` · ${r.active}`:""]}),c.jsxs("span",{children:[C.displayName??C.daemonId," ·"," ",C.lastConnectedAt?Zu(C.lastConnectedAt):r.notConnectedRecently]})]}),c.jsxs("div",{className:"row-actions",children:[c.jsx("button",{"aria-label":`Connect to ${C.label}`,className:"icon-button",disabled:u,onClick:()=>y(C),type:"button",children:c.jsx(Tp,{"aria-hidden":"true"})}),c.jsx("button",{"aria-label":`Forget ${C.label}`,className:"icon-button danger-icon",disabled:u,onClick:()=>g(C.daemonId),type:"button",children:c.jsx(Mp,{"aria-hidden":"true"})})]})]},C.daemonId)),f.length===0?c.jsx("p",{className:"empty-copy",children:r.noSavedDevices}):null]})]})}const ip={loading:!1,files:null,error:null};function z1({client:i,sessionId:u,sessionTitle:r,onClose:f}){const[y,g]=v.useState("unstaged"),[C,L]=v.useState({unstaged:ip,staged:ip}),[O,N]=v.useState(null),[Y,H]=v.useState(null),[K,B]=v.useState(!1),[X,ae]=v.useState(null),Ae=C[y],ge=v.useCallback(async U=>{L(I=>({...I,[U]:{loading:!0,files:I[U].files,error:null}}));try{const I=await i.request({action:"session.gitDiff.list",id:i.makeId("gitDiffList"),sessionId:u,scope:U});L(we=>({...we,[U]:{loading:!1,files:I.files,error:null}}))}catch(I){L(we=>({...we,[U]:{loading:!1,files:null,error:I instanceof Error?I.message:String(I)}}))}},[i,u]);v.useEffect(()=>{!C[y].files&&!C[y].loading&&!C[y].error&&ge(y)},[y,C,ge]),v.useEffect(()=>{N(null),H(null),ae(null)},[y]),v.useEffect(()=>{if(!O){H(null),ae(null);return}let U=!1;return B(!0),ae(null),i.request({action:"session.gitDiff.file",id:i.makeId("gitDiffFile"),sessionId:u,scope:y,path:O}).then(I=>{U||(H(I),B(!1))}).catch(I=>{U||(ae(I instanceof Error?I.message:String(I)),B(!1))}),()=>{U=!0}},[i,u,y,O]);const We=v.useMemo(()=>{const U=I=>I?I.reduce((we,re)=>({adds:we.adds+re.additions,dels:we.dels+re.deletions,count:we.count+1}),{adds:0,dels:0,count:0}):{adds:0,dels:0,count:0};return{unstaged:U(C.unstaged.files),staged:U(C.staged.files)}},[C]);return c.jsxs("div",{className:"diff-drawer",role:"dialog","aria-label":"Git diff",children:[c.jsx("div",{className:"diff-drawer-backdrop",onClick:f,"aria-hidden":"true"}),c.jsxs("div",{className:"diff-drawer-panel",children:[c.jsxs("header",{className:"diff-drawer-header",children:[c.jsxs("div",{children:[c.jsx("strong",{children:"Changes"}),c.jsx("span",{children:r})]}),c.jsx("button",{type:"button",className:"icon-button",onClick:f,"aria-label":"Close changes",children:c.jsx(Dn,{"aria-hidden":"true"})})]}),c.jsx("div",{className:"diff-tabs",role:"tablist",children:["unstaged","staged"].map(U=>{const I=We[U],we=y===U;return c.jsxs("button",{type:"button",role:"tab","aria-selected":we,className:`diff-tab ${we?"active":""}`,onClick:()=>g(U),children:[c.jsx("span",{className:"diff-tab-label",children:U==="unstaged"?"Working":"Staged"}),I.count>0?c.jsxs("span",{className:"diff-tab-meta",children:[c.jsxs("span",{className:"diff-add",children:["+",I.adds]}),c.jsxs("span",{className:"diff-del",children:["-",I.dels]})]}):null]},U)})}),c.jsxs("div",{className:"diff-body",children:[c.jsxs("aside",{className:"diff-files","aria-label":"Changed files",children:[Ae.loading&&!Ae.files?c.jsx("p",{className:"diff-empty",children:"Loading…"}):null,Ae.error?c.jsx("p",{className:"diff-empty diff-error",children:Ae.error}):null,Ae.files&&Ae.files.length===0?c.jsx("p",{className:"diff-empty",children:"No changes."}):null,Ae.files?.map(U=>c.jsxs("button",{type:"button",className:`diff-file ${O===U.path?"active":""}`,onClick:()=>N(U.path),children:[c.jsx("span",{className:`diff-status diff-status-${U.status}`,children:U.status}),c.jsx("span",{className:"diff-file-path",title:U.path,children:U.path}),c.jsxs("span",{className:"diff-file-stats",children:[U.binary?c.jsx("span",{className:"diff-binary",children:"bin"}):null,!U.binary&&U.additions>0?c.jsxs("span",{className:"diff-add",children:["+",U.additions]}):null,!U.binary&&U.deletions>0?c.jsxs("span",{className:"diff-del",children:["-",U.deletions]}):null]})]},U.path))]}),c.jsx("section",{className:"diff-patch","aria-label":"File diff",children:O?K?c.jsx("p",{className:"diff-empty",children:"Loading patch…"}):X?c.jsx("p",{className:"diff-empty diff-error",children:X}):Y?.binary?c.jsx("p",{className:"diff-empty",children:"Binary file — no inline diff."}):Y?c.jsx(R1,{patch:Y.patch,truncated:Y.truncated}):null:c.jsxs("div",{className:"diff-empty",children:[c.jsx(xf,{"aria-hidden":"true"}),c.jsx("p",{children:"Select a file to view its diff."})]})})]})]})]})}function R1({patch:i,truncated:u}){const r=v.useMemo(()=>i.split(`
|
|
17
|
+
`);return c.jsxs("section",{className:"tool-inline-panel","aria-label":"Tool details",children:[c.jsxs("header",{className:"inline-detail-header",children:[c.jsxs("div",{className:"inline-detail-title",children:[c.jsx("strong",{children:g}),c.jsx("span",{title:C,children:C||"tool detail"})]}),c.jsxs("div",{className:"row-actions",children:[c.jsx("button",{className:"icon-button",onClick:()=>r(L),type:"button",title:"Copy output",children:c.jsx(Xi,{"aria-hidden":"true"})}),c.jsx("button",{className:"icon-button",onClick:u,type:"button",title:"Close tool details",children:c.jsx(Dn,{"aria-hidden":"true"})})]})]}),c.jsx("div",{className:"tool-detail-list",children:i.map((O,N)=>c.jsx(o1,{message:O,onCopy:r},`${O.historyKey??O.timestamp??O.toolName??"tool"}:${N}`))})]})}const r1=v.lazy(async()=>Lp(()=>import("./mermaid-O7DHMXV3-DRdxk_m8.js").then(i=>i.a),__vite__mapDeps([0,1])).then(i=>({default:i.MessageMarkdown})));function f1({activeMatch:i,baseCwd:u,message:r,onCopy:f,onCloseSource:y,onCloseTool:g,onOpenAttachment:C,onOpenRemoteFile:L,onToggleSource:O,onToggleTool:N,sourceOpen:Y,toolOpen:H}){const K=r.role==="tool"?wf(r.content):"";return c.jsxs("article",{className:`message ${r.role} ${r.type==="info"?"info":""} ${i?"match":""}`,children:[c.jsxs("div",{className:"message-meta",children:[c.jsx("span",{children:r.type==="info"?"info":r.role}),c.jsxs("div",{className:"message-meta-side",children:[c.jsx("time",{children:Zu(r.timestamp)}),c.jsxs("div",{className:"message-actions","aria-label":"Message actions",role:"group",children:[c.jsx("button",{"aria-label":"Copy message",onClick:()=>f(r.content),title:"Copy message",type:"button",children:c.jsx(Xi,{"aria-hidden":"true"})}),c.jsx("button",{"aria-label":"View Markdown source","aria-expanded":Y,onClick:O,title:Y?"Hide Markdown source":"View Markdown source",type:"button",children:c.jsx(s0,{"aria-hidden":"true"})})]})]})]}),r.role==="tool"?c.jsxs("button",{className:"tool-inline-summary","aria-expanded":H,onClick:N,type:"button",children:[c.jsxs("span",{children:[c.jsx(fv,{"aria-hidden":"true"}),r.toolName??"Tool"]}),K?c.jsx("small",{children:K}):null]}):r.role==="assistant"?c.jsx(v.Suspense,{fallback:c.jsx("pre",{children:r.content}),children:c.jsx(r1,{baseCwd:u,content:r.content,onOpenRemoteFile:L})}):c.jsx("pre",{children:r.content}),r.images?.length?c.jsxs("div",{className:"message-files",children:[r.images.map(B=>c.jsxs("button",{className:"file-pill",onClick:()=>L(B,u),title:B,type:"button",children:[c.jsx(Nf,{"aria-hidden":"true"}),Ka(B)]},B)),c.jsxs("button",{className:"file-pill",onClick:()=>C(r.images??[]),type:"button",children:[c.jsx(m0,{"aria-hidden":"true"}),"Preview"]})]}):null,Y?c.jsx(c1,{message:r,onClose:y,onCopy:f}):null,r.role==="tool"&&H?c.jsx(Yp,{messages:[r],onClose:g,onCopy:f}):null]})}function d1({matchCount:i,query:u,onChange:r,onNext:f}){return c.jsxs("div",{className:"message-search-bar",children:[c.jsx(Tf,{"aria-hidden":"true"}),c.jsx("input",{value:u,onChange:y=>r(y.target.value),onKeyDown:y=>{y.key==="Enter"&&f()},placeholder:"Search this session"}),c.jsx("span",{children:u.trim()?`${i} match${i===1?"":"es"}`:"all messages"}),u?c.jsx("button",{"aria-label":"Clear message search",className:"icon-button mini-button",onClick:()=>r(""),type:"button",children:c.jsx(Dn,{"aria-hidden":"true"})}):null]})}function h1({activeMatch:i,expanded:u,messages:r,onToggle:f}){const y=r.filter(L=>L.role==="tool").length||r.length,g=Hp(r),C=y===1?"1 tool call":`${y} tool calls`;return c.jsxs("button",{className:`tool-group-bubble ${i?"match":""} ${u?"expanded":""}`,type:"button",onClick:f,"aria-expanded":u,"aria-label":g?`${C}: ${g}`:C,children:[c.jsxs("span",{className:"tool-group-header",children:[c.jsxs("span",{className:"tool-group-title",children:[c.jsx(Ef,{"aria-hidden":"true"}),c.jsx("strong",{children:C})]}),c.jsx(Ig,{className:"tool-group-chevron","aria-hidden":"true"})]}),g?c.jsx("span",{className:"tool-group-summary",children:g}):null]})}function m1({activeSession:i,activeUsage:u,messages:r,renameTitle:f,busy:y,onBrowseFiles:g,onClose:C,onExport:L,onJumpToMessage:O,onRename:N,onRenameTitleChange:Y,onToggleArchived:H,onTogglePinned:K,onViewChanges:B}){const[X,ae]=v.useState(""),Ae=v.useMemo(()=>kp(i),[i]),ge=v.useMemo(()=>{const U=X.trim().toLowerCase();return U?r.map((I,we)=>({message:I,index:we})).filter(({message:I})=>I.role!=="user"&&I.role!=="assistant"?!1:I.content.toLowerCase().includes(U)).slice(0,20):[]},[r,X]),We=U=>{U.preventDefault(),N()};return c.jsxs("div",{className:"session-detail-drawer",role:"dialog","aria-label":"Session details",children:[c.jsx("div",{className:"drawer-backdrop",onClick:C,"aria-hidden":"true"}),c.jsxs("aside",{className:"session-detail-panel",children:[c.jsxs("header",{className:"drawer-header",children:[c.jsxs("div",{children:[c.jsx("span",{className:"eyebrow",children:i.agent}),c.jsx("strong",{title:tl(i),children:tl(i)})]}),c.jsx("button",{className:"icon-button",type:"button",onClick:C,"aria-label":"Close session details",children:c.jsx(Dn,{"aria-hidden":"true"})})]}),c.jsxs("form",{className:"detail-title-form",onSubmit:We,children:[c.jsx("input",{value:f,onChange:U=>Y(U.target.value),placeholder:tl(i)}),c.jsx("button",{className:"primary-button",disabled:y,type:"submit",children:"Rename"})]}),c.jsxs("div",{className:"detail-info-grid",children:[c.jsxs("div",{children:[c.jsx(Ws,{"aria-hidden":"true"}),c.jsx("span",{children:"Working directory"}),c.jsx("strong",{title:i.cwd,children:i.cwd})]}),c.jsxs("div",{children:[c.jsx(O0,{"aria-hidden":"true"}),c.jsx("span",{children:"Messages"}),c.jsx("strong",{children:r.filter(U=>U.role==="user"||U.role==="assistant").length})]}),c.jsxs("div",{children:[c.jsx(C0,{"aria-hidden":"true"}),c.jsx("span",{children:"Session"}),c.jsx("strong",{title:i.sessionId,children:i.sessionId})]}),c.jsxs("div",{children:[c.jsx(Ef,{"aria-hidden":"true"}),c.jsx("span",{children:"Runtime"}),c.jsx("strong",{children:i.runtime.state})]})]}),i.branch||i.diffStat?c.jsxs("button",{className:"detail-command-card",type:"button",onClick:B,children:[c.jsx(Np,{"aria-hidden":"true"}),c.jsxs("span",{children:[i.branch??"Changes",i.diffStat?` · +${i.diffStat.additions} -${i.diffStat.deletions}`:""]})]}):null,c.jsxs("label",{className:"detail-search",children:[c.jsx(Tf,{"aria-hidden":"true"}),c.jsx("input",{value:X,onChange:U=>ae(U.target.value),placeholder:"Search messages"}),X.trim()?c.jsxs("small",{children:[ge.length||"No"," results"]}):null]}),X.trim()&&ge.length?c.jsx("div",{className:"detail-search-results",children:ge.map(({message:U,index:I})=>c.jsxs("button",{type:"button",onClick:()=>{O(I,X),C()},children:[c.jsx("span",{children:U.role}),c.jsx("strong",{children:U.content})]},`${U.historyKey??U.timestamp??I}:${I}`))}):null,X.trim()?null:c.jsxs(c.Fragment,{children:[c.jsxs("button",{className:"detail-command-card",type:"button",onClick:g,children:[c.jsx(Ws,{"aria-hidden":"true"}),c.jsx("span",{children:"Browse files"})]}),c.jsxs("button",{className:"detail-command-card",type:"button",onClick:()=>{navigator.clipboard?.writeText(Ae)},children:[c.jsx(l0,{"aria-hidden":"true"}),c.jsx("span",{title:Ae,children:Ae})]}),c.jsxs("div",{className:"detail-action-grid",children:[c.jsxs("button",{className:"icon-text-button",disabled:y,type:"button",onClick:K,children:[c.jsx(Cf,{"aria-hidden":"true"}),i.pinned?"Unpin":"Pin"]}),c.jsxs("button",{className:"icon-text-button",disabled:y,type:"button",onClick:H,children:[c.jsx(vf,{"aria-hidden":"true"}),i.archived?"Unarchive":"Archive"]}),c.jsxs("button",{className:"icon-text-button",type:"button",onClick:L,children:[c.jsx(Vi,{"aria-hidden":"true"}),"Export"]})]}),u?c.jsxs("p",{className:"detail-usage",children:["Usage: ",u.limits?.fiveHour?.usedPercent??"-","% 5h ·"," ",u.limits?.weekly?.usedPercent??"-","% weekly"]}):null,c.jsxs("p",{className:"detail-usage",children:["Created ",Zu(i.createdAt)]})]})]})]})}function Gp(i,u){return`${i.historyKey??i.timestamp??i.toolName??i.content.slice(0,24)??"message"}:${u}`}function p1(i){const u=[];for(let r=0;r<i.length;r+=1){const f=i[r];if(!Wm(f)){u.push({type:"message",index:r,message:f});continue}const y=[];let g=r;for(;g<i.length&&Wm(i[g]);)y.push({index:g,message:i[g]}),g+=1;u.push({type:"toolGroup",entries:y,id:`tool-group:${y.map(({index:C,message:L})=>Gp(L,C)).join("|")}`}),r=g-1}return u}function y1({activeSession:i,activeSessionId:u,activeModelOptions:r,activeQueue:f,activeUsage:y,agent:g,approvalMode:C,attachments:L,busy:O,cwd:N,draft:Y,effort:H,errorText:K,fastMode:B,historyLoading:X,messages:ae,model:Ae,phase:ge,quickReplies:We,renameTitle:U,respondingSessionIds:I,skills:we,uploadBusy:re,detailsOpen:pe,t:ye,onApprovalModeChange:dt,onBrowseFiles:Oe,onCancelQueuedTurn:Pe,onClearInterrupt:nt,onDraftChange:Fe,onDetailsOpenChange:Ct,onEffortChange:$,onExportActiveSession:M,onFastModeChange:Z,onModelChange:ee,onOpenRemoteFile:fe,onRefreshSessions:ne,onRefreshSkills:S,onRenameSession:z,onRenameTitleChange:G,onRemoveAttachment:J,onRestoreSnapshot:W,onSubmit:ce,onToggleArchived:ve,onTogglePinned:Te,onUploadFiles:Se,onViewChanges:he}){const[Ee,tn]=v.useState(""),[yn,Tt]=v.useState(0),[Ye,Vt]=v.useState(null),[gn,Rt]=v.useState(null),[yt,_t]=v.useState(!1),[wt,gt]=v.useState([]),ut=v.useRef(null),Q=v.useRef([]),Ve=v.useRef(null),ke=v.useRef(null),V=v.useRef(0),Ue=v.useMemo(()=>p1(ae),[ae]),vt=v.useMemo(()=>{const me=Ee.trim().toLowerCase();return me?ae.map((He,ht)=>({index:ht,message:He})).filter(({message:He})=>He.content.toLowerCase().includes(me)):[]},[Ee,ae]),Ie=me=>{navigator.clipboard?.writeText(me).catch(()=>{})},zl=()=>{if(!vt.length)return;const me=yn%vt.length,He=vt[me]?.index;typeof He=="number"&&Q.current[He]?.scrollIntoView({behavior:"smooth",block:"center"}),Tt(ht=>(ht+1)%vt.length)},nn=v.useCallback(()=>{const me=ut.current;me&&(me.scrollTop=me.scrollHeight,_t(!1))},[]),Qn=v.useCallback((me="smooth")=>{const He=ut.current;He&&(He.scrollTo({top:He.scrollHeight,behavior:me}),_t(!1))},[]),Dt=()=>{const me=ut.current;if(!me)return;const He=me.scrollHeight-me.scrollTop-me.clientHeight;_t(He>180)},Vn=v.useMemo(()=>{const me=ae.at(-1);return me?`${ae.length}:${me.historyKey??""}:${me.timestamp??""}:${me.content.length}`:"0"},[ae]);v.useLayoutEffect(()=>{Ve.current!==u&&(Ve.current=u,ke.current=u,V.current=0,Vt(null),Rt(null));const me=V.current===0&&ae.length>0;V.current=ae.length;const He=ut.current;if(!He)return;if(me||ke.current===u&&(!X||ae.length>0)){nn();const Xt=requestAnimationFrame(nn),ma=window.setTimeout(nn,120),Zt=window.setTimeout(nn,360);return ke.current=null,_t(!1),()=>{cancelAnimationFrame(Xt),window.clearTimeout(ma),window.clearTimeout(Zt)}}He.scrollHeight-He.scrollTop-He.clientHeight<240&&nn()},[u,X,Vn,ae.length,ge,nn]);const lt=vt.length&&Ee.trim()?vt[(yn+vt.length-1)%vt.length]?.index:void 0,da=i?tl(i):"New session",vn=i?.cwd??(N.trim()&&N.trim()!=="."?N:""),ha=i?.agent??g,ln=ha==="codex"?"Codex":"Claude";return c.jsxs("section",{className:"chat-pane","aria-label":"Chat",children:[c.jsxs("header",{className:"chat-header",children:[c.jsxs("button",{className:"chat-title-block chat-title-button",type:"button",onClick:()=>i&&Ct(!0),children:[c.jsx("span",{className:`agent-status-pill ${ha}`,children:ln}),c.jsx("h1",{title:da,children:da}),vn?c.jsx("p",{title:vn,children:vn}):null,i?.branch||i?.diffStat?c.jsxs("div",{className:"header-metadata",children:[i.branch?c.jsx("span",{children:i.branch}):null,i.diffStat?c.jsxs("span",{children:["+",i.diffStat.additions," -",i.diffStat.deletions]}):null,i.runtime.state?c.jsx("span",{children:i.runtime.state}):null,i.terminal?.mode?c.jsx("span",{children:i.terminal.mode}):null]}):null]}),c.jsxs("div",{className:"header-actions",children:[c.jsx("button",{type:"button",className:"icon-button",onClick:()=>i&&he(i.sessionId),title:ye.viewChanges,disabled:!i,children:c.jsx(Np,{"aria-hidden":"true"})}),c.jsx("button",{type:"button",className:`icon-button ${i?.pinned?"selected":""}`,onClick:Te,title:i?.pinned?ye.unpin:ye.pin,disabled:!i||O,children:c.jsx(Cf,{"aria-hidden":"true"})}),c.jsx("button",{type:"button",className:`icon-button ${i?.archived?"selected":""}`,onClick:ve,title:i?.archived?ye.unarchive:ye.archive,disabled:!i||O,children:c.jsx(vf,{"aria-hidden":"true"})}),c.jsx("button",{type:"button",className:"icon-button",onClick:W,title:ye.restoreSnapshot,children:c.jsx(X0,{"aria-hidden":"true"})}),c.jsx("button",{type:"button",className:"icon-button",onClick:ne,title:ye.refreshSessions,children:c.jsx(Vu,{"aria-hidden":"true"})})]})]}),c.jsxs("div",{className:"chat-notices","aria-live":"polite",children:[K?c.jsxs("div",{className:"notice error",children:[c.jsx(Dn,{"aria-hidden":"true"}),c.jsx("span",{children:K})]}):null,i?.interruptReason?c.jsxs("div",{className:"notice warning",children:[c.jsx(Fs,{"aria-hidden":"true"}),c.jsx("span",{children:i.interruptReason.humanText||i.interruptReason.kind}),c.jsx("button",{className:"icon-text-button",disabled:O,onClick:nt,type:"button",children:ye.clear})]}):null,i?.stallWarning?c.jsxs("div",{className:"notice warning",children:[c.jsx(bf,{"aria-hidden":"true"}),c.jsx("span",{children:i.stallWarning.humanText||"Agent may be stalled"})]}):null]}),ge==="missing-pair"?c.jsxs("div",{className:"empty-state",children:[c.jsx(Af,{"aria-hidden":"true"}),c.jsx("h2",{children:ye.openDaemonWebLink}),c.jsx("p",{children:ye.openDaemonWebLinkHint}),c.jsx("code",{children:"vibelet --access=quick"})]}):c.jsxs("div",{className:"message-scroll",ref:ut,onScroll:Dt,children:[c.jsx(d1,{matchCount:vt.length,query:Ee,onChange:me=>{tn(me),Tt(0)},onNext:zl}),X&&ae.length===0?c.jsxs("div",{className:"loading-line",children:[c.jsx("span",{className:"loading-spinner","aria-hidden":"true"}),ye.loadingHistory]}):null,!X&&ae.length===0?c.jsxs("div",{className:"empty-state compact",children:[c.jsx(Xu,{"aria-hidden":"true"}),c.jsx("h2",{children:i?ye.noVisibleMessages:ye.startDaemonSession}),c.jsx("p",{children:ye.emptyChatHint})]}):null,Ue.map(me=>{if(me.type==="toolGroup"){const Zt=me.entries.map(bn=>bn.message),Rl=me.entries.some(bn=>lt===bn.index),an=gn===me.id;return c.jsx("div",{className:"message-frame tool info",ref:bn=>{for(const Xn of me.entries)Q.current[Xn.index]=bn},children:c.jsxs("div",{className:"inline-message-stack",children:[c.jsx(h1,{activeMatch:Rl,expanded:an,messages:Zt,onToggle:()=>Rt(bn=>bn===me.id?null:me.id)}),an?c.jsx(Yp,{messages:Zt,onClose:()=>Rt(null),onCopy:Ie}):null]})},me.id)}const{index:He,message:ht}=me,Ot=Gp(ht,He),Xt=Ye===Ot,ma=gn===Ot;return c.jsx("div",{className:`message-frame ${ht.role} ${ht.type==="info"?"info":""}`,ref:Zt=>{Q.current[He]=Zt},children:c.jsx(f1,{activeMatch:lt===He,baseCwd:i?.cwd,message:ht,onCopy:Ie,onCloseSource:()=>Vt(null),onCloseTool:()=>Rt(null),onOpenAttachment:gt,onOpenRemoteFile:fe,onToggleSource:()=>Vt(Zt=>Zt===Ot?null:Ot),onToggleTool:()=>Rt(Zt=>Zt===Ot?null:Ot),sourceOpen:Xt,toolOpen:ma})},Ot)}),u&&I.has(u)?c.jsxs("div",{className:"typing-line",children:[c.jsx("span",{}),ye.agentResponding]}):null,yt?c.jsx("button",{className:"scroll-latest-button",type:"button","aria-label":ye.scrollToLatest,title:ye.scrollToLatest,onClick:()=>Qn(),children:c.jsx(Gg,{"aria-hidden":"true"})}):null]}),ge!=="missing-pair"?c.jsx(l1,{activeModelOptions:r,activeQueue:f,agent:g,approvalMode:C,attachments:L,busy:O,draft:Y,effort:H,fastMode:B,model:Ae,phase:ge,quickReplies:We,skills:we,uploadBusy:re,onApprovalModeChange:dt,onCancelQueuedTurn:Pe,onDraftChange:Fe,onEffortChange:$,onFastModeChange:Z,onModelChange:ee,onRemoveAttachment:J,onRefreshSkills:S,onSubmit:ce,onUploadFiles:Se,t:ye}):null,pe&&i?c.jsx(m1,{activeSession:i,activeUsage:y,busy:O,messages:ae,renameTitle:U,onBrowseFiles:()=>{Ct(!1),Oe()},onClose:()=>Ct(!1),onExport:M,onJumpToMessage:(me,He)=>{tn(He),Tt(0),Q.current[me]?.scrollIntoView({behavior:"smooth",block:"center"})},onRename:z,onRenameTitleChange:G,onToggleArchived:ve,onTogglePinned:Te,onViewChanges:()=>he(i.sessionId)}):null,c.jsx(a1,{cwd:i?.cwd,paths:wt,onClose:()=>gt([]),onOpenRemoteFile:fe})]})}const g1=[{tab:"session",label:"Session controls",Icon:Ep},{tab:"files",label:"Files",Icon:Ws},{tab:"admin",label:"Settings",Icon:F0}];function v1({value:i,onChange:u}){return c.jsx("div",{className:"control-tabs",children:g1.map(({tab:r,label:f,Icon:y})=>c.jsx("button",{className:i===r?"selected":"",onClick:()=>u(r),title:f,type:"button",children:c.jsx(y,{"aria-hidden":"true"})},r))})}function b1({cwd:i,entries:u,error:r,loaded:f,loading:y,path:g,onPathChange:C,onListDirectory:L,onOpenRemoteFile:O}){return c.jsxs(c.Fragment,{children:[c.jsxs("label",{className:"field",children:[c.jsx("span",{children:"Path"}),c.jsxs("div",{className:"field-row",children:[c.jsx("input",{value:g,onChange:N=>C(N.target.value)}),c.jsx("button",{className:"icon-button",onClick:()=>L(),type:"button",children:y?c.jsx(z0,{"aria-hidden":"true"}):c.jsx(Vu,{"aria-hidden":"true"})})]})]}),r?c.jsx("p",{className:"empty-copy",children:r}):null,y?c.jsx("p",{className:"empty-copy",children:"Loading files..."}):null,c.jsxs("div",{className:"file-list tree-list",children:[Fm(g)?c.jsxs("button",{onClick:()=>L(Fm(g)??g),type:"button",children:[c.jsx(Ws,{"aria-hidden":"true"}),".."]}):null,u.map(N=>{const Y=Op(g,N.name);return c.jsxs("button",{onClick:()=>N.isDirectory?L(Y):O(Y,i),type:"button",children:[N.isDirectory?c.jsx(jf,{"aria-hidden":"true"}):c.jsx(xf,{"aria-hidden":"true"}),N.name]},`${N.name}:${N.isDirectory}`)})]}),f&&!y&&!r&&u.length===0?c.jsx("p",{className:"empty-copy",children:"No files in this directory."}):null]})}const S1=v.lazy(()=>Lp(()=>import("./mermaid-O7DHMXV3-DRdxk_m8.js").then(i=>i.a),__vite__mapDeps([0,1])).then(i=>({default:i.MessageMarkdown})));function x1({file:i,mode:u,onModeChange:r,onOpenRemoteFile:f,onTextChange:y}){return c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"segmented editor-mode-tabs",children:[c.jsx("button",{className:u==="edit"?"selected":"",onClick:()=>r("edit"),type:"button",children:"Editor"}),c.jsx("button",{className:u==="preview"?"selected":"",onClick:()=>r("preview"),type:"button",children:"Preview"}),c.jsx("button",{className:u==="source"?"selected":"",onClick:()=>r("source"),type:"button",children:"Source"})]}),u==="edit"?c.jsx("textarea",{className:"remote-editor",value:i.text,onChange:g=>y(g.target.value),rows:14}):u==="preview"?c.jsx("div",{className:"remote-markdown-preview",children:c.jsx(v.Suspense,{fallback:c.jsx("pre",{className:"json-box source-viewer",children:i.text}),children:c.jsx(S1,{content:i.text,baseCwd:i.cwd,onOpenRemoteFile:f})})}):c.jsx("pre",{className:"json-box source-viewer",children:i.text})]})}function j1({busy:i,cwd:u,directory:r,newDirName:f,remoteFileMode:y,remoteFile:g,remoteFileConflict:C,onCreateDirectory:L,onDirectoryPathChange:O,onDownloadRemoteFile:N,onListDirectory:Y,onNewDirNameChange:H,onOpenRemoteFile:K,onRemoteFileModeChange:B,onRemoteFileTextChange:X,onSaveRemoteFile:ae}){return c.jsxs(c.Fragment,{children:[c.jsxs("section",{className:"control-section",children:[c.jsx("h2",{children:"File Tree"}),c.jsx(b1,{cwd:u,entries:r.entries,error:r.error,loaded:r.loaded,loading:r.loading,path:r.path,onListDirectory:Y,onOpenRemoteFile:K,onPathChange:O}),c.jsxs("div",{className:"field-row",children:[c.jsx("input",{value:f,onChange:Ae=>H(Ae.target.value),placeholder:"New folder"}),c.jsxs("button",{className:"icon-text-button",onClick:L,type:"button",disabled:!f.trim(),children:[c.jsx(jf,{"aria-hidden":"true"}),"Create"]})]})]}),c.jsxs("section",{className:"control-section remote-file-section",children:[c.jsx("h2",{children:"Remote File"}),g?c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"file-title",children:[g.kind==="image"?c.jsx(E0,{"aria-hidden":"true"}):c.jsx(xf,{"aria-hidden":"true"}),c.jsxs("div",{children:[c.jsx("strong",{children:Ka(g.path)}),c.jsxs("span",{children:[g.contentType," · ",Dp(g.size)]})]})]}),c.jsxs("div",{className:"attention-actions",children:[c.jsxs("button",{className:"icon-text-button",onClick:N,type:"button",children:[c.jsx(Vi,{"aria-hidden":"true"}),"Download"]}),c.jsxs("button",{className:"icon-text-button",onClick:()=>navigator.clipboard?.writeText(g.path),type:"button",children:[c.jsx(Xi,{"aria-hidden":"true"}),"Copy path"]})]}),g.kind==="text"?c.jsxs(c.Fragment,{children:[c.jsx(x1,{file:g,mode:y,onModeChange:B,onOpenRemoteFile:K,onTextChange:X}),c.jsxs("button",{className:"primary-button full-width",disabled:!g.dirty||i,onClick:()=>ae(),type:"button",children:[c.jsx(K0,{"aria-hidden":"true"}),"Save file"]}),C?c.jsxs("div",{className:"notice warning inline-notice",children:[c.jsx(bf,{"aria-hidden":"true"}),c.jsx("span",{children:Up(g.path)}),c.jsx("button",{className:"danger-button",disabled:i,onClick:()=>Qi(`Overwrite ${Ka(g.path)}?`)&&ae({force:!0}),type:"button",children:"Force save"})]}):null]}):g.kind==="image"&&g.objectUrl?c.jsx("img",{className:"remote-image",src:g.objectUrl,alt:Ka(g.path)}):c.jsx("p",{className:"empty-copy",children:"Binary preview is not available. Use download to inspect this file."})]}):c.jsx("p",{className:"empty-copy",children:"Select an attachment or a file from the directory browser."})]})]})}function A1({activeApproval:i,activeQuestion:u,busy:r,questionAnswers:f,t:y,onCancelQuestion:g,onQuestionChoice:C,onRespondApproval:L,onRespondQuestion:O}){const N=!!(i||u);return c.jsxs(c.Fragment,{children:[N?null:c.jsxs("section",{className:"control-section",children:[c.jsx("h2",{children:y.pendingActions}),c.jsx("p",{className:"empty-copy",children:y.noPendingActions})]}),i?c.jsxs("section",{className:"attention-panel",children:[c.jsxs("div",{className:"attention-head",children:[c.jsx(Xu,{"aria-hidden":"true"}),c.jsxs("div",{children:[c.jsx("h2",{children:y.approvalRequired}),c.jsx("p",{children:i.toolName})]})]}),c.jsx("p",{children:i.description}),c.jsx("pre",{children:Rp(i.input)}),c.jsxs("div",{className:"attention-actions",children:[c.jsxs("button",{type:"button",className:"danger-button",onClick:()=>L(!1),disabled:r,children:[c.jsx(Dn,{"aria-hidden":"true"}),y.deny]}),c.jsxs("button",{type:"button",className:"approve-button",onClick:()=>L(!0),disabled:r,children:[c.jsx(Is,{"aria-hidden":"true"}),y.approve]})]})]}):null,u?c.jsxs("section",{className:"attention-panel",children:[c.jsxs("div",{className:"attention-head",children:[c.jsx(Af,{"aria-hidden":"true"}),c.jsxs("div",{children:[c.jsx("h2",{children:y.inputNeeded}),c.jsxs("p",{children:[u.questions.length," question",u.questions.length>1?"s":""]})]})]}),u.questions.map(Y=>c.jsxs("div",{className:"question-block",children:[c.jsx("strong",{children:Y.question}),c.jsx("div",{className:"choice-list",children:Y.options.map(H=>{const K=(f[Y.id]??[]).includes(H.label);return c.jsxs("button",{className:K?"selected":"",onClick:()=>C(Y.id,H.label,Y.multiSelect),type:"button",children:[c.jsx("span",{children:H.label}),H.description?c.jsx("small",{children:H.description}):null]},H.label)})})]},Y.id)),c.jsxs("div",{className:"attention-actions",children:[c.jsxs("button",{type:"button",className:"danger-button",onClick:g,disabled:r,children:[c.jsx(Dn,{"aria-hidden":"true"}),y.cancel]}),c.jsxs("button",{type:"button",className:"approve-button",onClick:O,disabled:r,children:[c.jsx(Is,{"aria-hidden":"true"}),y.submit]})]})]}):null]})}function ap({session:i,active:u,responding:r,tagLabels:f,onSelect:y,onContextMenu:g,onViewChanges:C}){const L=!!i.diffStat&&(i.diffStat.additions>0||i.diffStat.deletions>0),O=tl(i);return c.jsxs("button",{className:`session-row ${u?"active":""} ${i.archived?"archived":""}`,onContextMenu:g,onClick:y,title:O,type:"button",children:[c.jsxs("span",{className:"session-row-head",children:[c.jsx("strong",{children:O}),r?c.jsx(t0,{"aria-label":"Responding"}):null]}),c.jsx("span",{children:i.cwd}),f?.length?c.jsx("span",{className:"directory-tag-row",title:"Directory tags",children:f.map(N=>c.jsx("em",{children:N},N))}):null,c.jsxs("small",{children:[i.agent," · ",Zu(i.lastActivityAt),i.branch?` · ${i.branch}`:"",i.diffStat&&!C?` · +${i.diffStat.additions}/-${i.diffStat.deletions}`:"",i.pinned?" · pinned":"",i.archived?" · archived":""]}),L&&C&&i.diffStat?c.jsxs("span",{className:"session-diff-badge",role:"button",tabIndex:0,title:"View changes",onClick:N=>{N.stopPropagation(),C()},onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.preventDefault(),N.stopPropagation(),C())},children:[c.jsxs("span",{className:"diff-add",children:["+",i.diffStat.additions]}),c.jsxs("span",{className:"diff-del",children:["-",i.diffStat.deletions]})]}):null]})}function Qp({ariaLabel:i,options:u,value:r,disabled:f,onChange:y}){return c.jsx("div",{className:"chip-group",role:"radiogroup","aria-label":i,children:u.map(g=>c.jsx("button",{"aria-checked":r===g.value,className:r===g.value?"selected":"",disabled:f,onClick:()=>y(g.value),role:"radio",title:g.title??g.label,type:"button",children:g.label},g.value))})}function N1({agentFilter:i,t:u,onAgentFilterChange:r}){return c.jsxs("div",{className:"session-filter-panel",children:[c.jsx("span",{className:"filter-section-label",children:u.agentFilterLabel}),c.jsx(Qp,{ariaLabel:u.agentFilterLabel,value:i,options:[{value:"all",label:u.agentFilterAll},{value:"claude",label:u.agentFilterClaude},{value:"codex",label:u.agentFilterCodex}],onChange:r})]})}function C1({activeSessionId:i,busy:u,collapsedFolders:r,displayName:f,directoryTags:y,folderCounts:g,groupFolders:C,groupedSessions:L,hideArchived:O,inventoryVersion:N,nextCursor:Y,phase:H,pendingSessionIds:K,respondingSessionIds:B,search:X,sessionAgentFilter:ae,sessionsCount:Ae,sinceFilter:ge,statusText:We,t:U,visibleSessions:I,onLoadMore:we,onCopyResumeCommand:re,onCreateSession:pe,onDeleteSession:ye,onBrowseFolder:dt,onEditFolderTags:Oe,onOpenSessionDetails:Pe,onNewInFolder:nt,onResetFilters:Fe,onSearchChange:Ct,onSearchCommit:$,onSelectSession:M,onToggleSessionArchived:Z,onToggleSessionPinned:ee,onSessionAgentFilterChange:fe,onSinceFilterChange:ne,onToggleFolder:S,onToggleGroupFolders:z,onToggleHideArchived:G,onToggleCollapse:J,onViewChanges:W}){const[ce,ve]=v.useState(!1),[Te,Se]=v.useState(null),[he,Ee]=v.useState(null),tn=v.useRef(null),yn=ae!=="all"||ge!=="30d"||C||O,Tt=!!(Y?.lastActivityAt&&Y.sessionId),Ye=Te?!!K?.has(Te.session.sessionId):!1,Vt=Q=>y[Q?.trim()||"/"]??[],gn=H==="connected"?`${I.length}/${Ae} sessions · v${N??"-"}`:U.sameOriginAccess,Rt=`${We} · ${gn}`;v.useEffect(()=>{if(!ce&&!Te&&!he)return;const Q=ke=>{const V=ke.target;V instanceof Node&&tn.current?.contains(V)||(ve(!1),Se(null),Ee(null))},Ve=ke=>{ke.key==="Escape"&&(ve(!1),Se(null),Ee(null))};return document.addEventListener("pointerdown",Q),document.addEventListener("keydown",Ve),()=>{document.removeEventListener("pointerdown",Q),document.removeEventListener("keydown",Ve)}},[Te,he,ce]);const yt=(Q,Ve)=>{const ke=Q.currentTarget.getBoundingClientRect(),V=192,Ue=114;Se(null),Ee({...Ve?{folder:Ve}:{},x:Math.min(ke.right-V,window.innerWidth-V-10),y:Math.min(ke.bottom+8,window.innerHeight-Ue-10)})},_t=(Q,Ve)=>{Q.preventDefault();const ke=224,V=306;Ee(null),Se({session:Ve,x:Math.min(Q.clientX,window.innerWidth-ke-10),y:Math.min(Q.clientY,window.innerHeight-V-10)})},wt=()=>Se(null),gt=Q=>{if(!Te)return;const{session:Ve}=Te;wt(),Q(Ve)},ut=Q=>{if(!he)return;const{folder:Ve}=he;if(Ee(null),Ve){nt(Ve,Q);return}pe(Q)};return c.jsxs("aside",{className:"session-rail","aria-label":"Sessions",children:[c.jsxs("div",{className:"brand-block",children:[c.jsx("div",{className:"brand-mark",children:c.jsx(of,{"aria-hidden":"true"})}),c.jsxs("div",{className:"brand-copy",children:[c.jsx("strong",{children:"Vibelet Web"}),c.jsx("span",{children:f??"Daemon workspace"})]}),J?c.jsx("button",{"aria-label":U.collapseSessionSidebar,className:"sidebar-panel-collapse-button session-rail-collapse-button",onClick:J,title:U.collapseSessionSidebar,type:"button",children:c.jsx(Cp,{"aria-hidden":"true"})}):null]}),c.jsxs("div",{className:`connection-strip ${H}`,title:Rt,children:[c.jsx(Tp,{"aria-hidden":"true"}),c.jsx("strong",{className:"connection-status-label",children:We})]}),c.jsxs("div",{className:"rail-list-heading",children:[c.jsx("span",{children:U.sessions}),c.jsx("button",{"aria-label":U.newSession,className:"rail-create-button",disabled:u||H!=="connected",onClick:Q=>yt(Q),title:U.newSession,type:"button",children:c.jsx(uf,{"aria-hidden":"true"})})]}),c.jsxs("div",{className:"search-filter-wrap",ref:tn,children:[c.jsxs("div",{className:"search-box",children:[c.jsx(Tf,{"aria-hidden":"true"}),c.jsx("input",{value:X,onBlur:$,onChange:Q=>Ct(Q.target.value),onKeyDown:Q=>{Q.key==="Enter"&&$()},placeholder:U.searchSessions}),c.jsx("button",{"aria-expanded":ce,"aria-label":U.sessionFilters,className:`filter-toggle ${ce||yn?"selected":""}`,onClick:()=>ve(Q=>!Q),title:U.sessionFilters,type:"button",children:c.jsx(b0,{"aria-hidden":"true"})})]}),ce?c.jsxs("div",{className:"filter-popover",role:"dialog","aria-label":U.sessionFilters,children:[c.jsx(N1,{agentFilter:ae,t:U,onAgentFilterChange:fe}),c.jsxs("div",{className:"filter-section",children:[c.jsx("span",{className:"filter-section-label",children:U.searchTimeRangeLabel}),c.jsx("div",{className:"rail-filters",role:"group","aria-label":U.searchTimeRangeLabel,children:["all","7d","30d","90d"].map(Q=>c.jsx("button",{className:ge===Q?"selected":"",onClick:()=>ne(Q),type:"button",children:Q==="all"?U.searchTimeRangeAllTime:Q==="7d"?U.searchTimeRangeLast7Days:Q==="30d"?U.searchTimeRangeLast30Days:U.searchTimeRangeLast90Days},Q))})]}),c.jsxs("div",{className:"filter-section",children:[c.jsx("span",{className:"filter-section-label",children:U.filterViewOptions}),c.jsxs("div",{className:"filter-switch-card",children:[c.jsxs("button",{"aria-pressed":C,className:C?"selected":"",onClick:z,type:"button",children:[c.jsx("span",{children:U.groupByFolder}),c.jsx("span",{className:"filter-switch-track","aria-hidden":"true",children:c.jsx("span",{})})]}),c.jsxs("button",{"aria-pressed":O,className:O?"selected":"",onClick:G,type:"button",children:[c.jsx("span",{children:U.hideArchived}),c.jsx("span",{className:"filter-switch-track","aria-hidden":"true",children:c.jsx("span",{})})]})]})]}),yn?c.jsx("button",{className:"filter-reset-button",onClick:Fe,type:"button",children:U.resetFilters}):null]}):null]}),c.jsxs("div",{className:"session-list",children:[C?L.map(Q=>{const Ve=r[Q.folder];return c.jsxs("div",{className:"folder-group",children:[c.jsxs("div",{className:"folder-header",children:[c.jsxs("button",{onClick:()=>S(Q.folder),type:"button",children:[c.jsx(jf,{"aria-hidden":"true"}),c.jsx("span",{children:Q.folder}),c.jsx("small",{children:g[Q.folder]??Q.sessions.length})]}),c.jsx("button",{className:"mini-button",disabled:H!=="connected",onClick:()=>dt(Q.folder),title:U.browseFolder,type:"button",children:c.jsx(Ws,{"aria-hidden":"true"})}),c.jsx("button",{className:"mini-button",onClick:()=>Oe(Q.folder),title:U.editDirectoryTags,type:"button",children:c.jsx(iv,{"aria-hidden":"true"})}),c.jsx("button",{className:"mini-button",disabled:u||H!=="connected",onClick:ke=>yt(ke,Q.folder),title:U.newSession,type:"button",children:c.jsx(uf,{"aria-hidden":"true"})})]}),Vt(Q.folder).length?c.jsx("div",{className:"folder-tag-row",children:Vt(Q.folder).map(ke=>c.jsx("span",{children:ke},ke))}):null,Ve?null:Q.sessions.map(ke=>c.jsx(ap,{active:ke.sessionId===i,responding:B.has(ke.sessionId),session:ke,tagLabels:Vt(ke.cwd),onContextMenu:V=>_t(V,ke),onSelect:()=>M(ke.sessionId),onViewChanges:W?()=>W(ke.sessionId):void 0},ke.sessionId))]},Q.folder)}):I.map(Q=>c.jsx(ap,{active:Q.sessionId===i,responding:B.has(Q.sessionId),session:Q,tagLabels:Vt(Q.cwd),onContextMenu:Ve=>_t(Ve,Q),onSelect:()=>M(Q.sessionId),onViewChanges:W?()=>W(Q.sessionId):void 0},Q.sessionId)),I.length===0?c.jsx("p",{className:"empty-copy",children:U.noSessionsMatch}):null,Tt&&Y?c.jsxs("button",{className:"icon-text-button load-more-button",disabled:u,onClick:()=>we(Y),type:"button",children:[c.jsx(Vu,{"aria-hidden":"true"}),U.loadMore]}):null]}),he?c.jsxs("div",{className:"session-create-menu",role:"menu",style:{left:he.x,top:he.y},onPointerDown:Q=>Q.stopPropagation(),children:[c.jsxs("button",{type:"button",role:"menuitem",onClick:()=>ut("claude"),children:[c.jsx(Jg,{"aria-hidden":"true"}),c.jsxs("span",{children:[c.jsx("strong",{children:"Claude"}),c.jsx("small",{children:U.claudeSession})]})]}),c.jsxs("button",{type:"button",role:"menuitem",onClick:()=>ut("codex"),children:[c.jsx(of,{"aria-hidden":"true"}),c.jsxs("span",{children:[c.jsx("strong",{children:"Codex"}),c.jsx("small",{children:U.codexSession})]})]})]}):null,Te?c.jsxs("div",{className:"session-context-menu",role:"menu",style:{left:Te.x,top:Te.y},onPointerDown:Q=>Q.stopPropagation(),children:[c.jsxs("button",{type:"button",role:"menuitem",onClick:()=>gt(Q=>M(Q.sessionId)),children:[c.jsx(Sf,{"aria-hidden":"true"}),U.open]}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye,onClick:()=>gt(Pe),children:[c.jsx(_0,{"aria-hidden":"true"}),U.details]}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye,onClick:()=>gt(re),children:[c.jsx(Xi,{"aria-hidden":"true"}),U.copyResumeCommand]}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye||!W||!Te.session.branch&&!Te.session.diffStat,onClick:()=>gt(Q=>W?.(Q.sessionId)),children:[c.jsx(f0,{"aria-hidden":"true"}),U.viewChanges]}),c.jsx("span",{className:"context-menu-separator"}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye,onClick:()=>gt(ee),children:[c.jsx(Cf,{"aria-hidden":"true"}),Te.session.pinned?U.unpin:U.pin]}),c.jsxs("button",{type:"button",role:"menuitem",disabled:Ye,onClick:()=>gt(Z),children:[c.jsx(vf,{"aria-hidden":"true"}),Te.session.archived?U.unarchive:U.archive]}),c.jsxs("button",{className:"danger",type:"button",role:"menuitem",onClick:()=>gt(ye),children:[c.jsx(Mp,{"aria-hidden":"true"}),U.delete]})]}):null]})}function T1({busy:i,connected:u,dismissed:r,feedback:f,synced:y,t:g,onPull:C,onPushMerge:L,onPushReplace:O,onSkip:N}){const Y=!u||i!==null;return c.jsxs("section",{className:"control-section compact-section archive-sync-panel",children:[c.jsx("h2",{children:g.archiveSyncTitle}),c.jsx("p",{className:"empty-copy",children:y?g.archiveSyncSynced:r?g.archiveSyncSkippedState:g.archiveSyncBody}),c.jsxs("div",{className:"action-grid archive-sync-actions",children:[c.jsxs("button",{className:"icon-text-button",disabled:Y,onClick:L,type:"button",children:[c.jsx(A0,{"aria-hidden":"true"}),i==="pushMerge"?g.archiveSyncSyncing:g.archiveSyncPushMerge]}),c.jsxs("button",{className:"icon-text-button",disabled:Y,onClick:C,type:"button",children:[c.jsx(Vi,{"aria-hidden":"true"}),i==="pull"?g.archiveSyncSyncing:g.archiveSyncPull]}),c.jsxs("button",{className:"icon-text-button",disabled:Y,onClick:O,type:"button",children:[c.jsx(ov,{"aria-hidden":"true"}),i==="pushReplace"?g.archiveSyncSyncing:g.archiveSyncPushReplace]}),c.jsxs("button",{className:"icon-text-button",disabled:Y,onClick:N,type:"button",children:[c.jsx(Bg,{"aria-hidden":"true"}),g.archiveSyncSkip]})]}),f?c.jsx("p",{className:`empty-copy ${f.tone==="error"?"error-copy":"success-copy"}`,children:f.message}):null]})}function E1({pairing:i,phase:u,t:r,onForgetPairing:f}){const y=u==="connected"?"connected":i?u:r.notPaired;return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:r.currentDevice}),c.jsxs("dl",{children:[c.jsxs("div",{children:[c.jsx("dt",{children:r.daemon}),c.jsx("dd",{children:i?.displayName??i?.daemonId??r.notPaired})]}),c.jsxs("div",{children:[c.jsx("dt",{children:r.status}),c.jsx("dd",{children:y})]})]}),c.jsx("div",{className:"action-grid",children:c.jsxs("button",{className:"danger-button",disabled:!i,onClick:f,type:"button",children:[c.jsx(Af,{"aria-hidden":"true"}),r.forget]})})]})}function M1({connected:i,metadata:u,showUpdate:r,updateBusy:f,restartBusy:y,t:g,updateStatus:C,onUpdate:L,onRestart:O}){const N=u.version&&u.latestVersion&&r?`${u.version} -> ${u.latestVersion}`:u.version||g.unknown;return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:g.desktopConnector}),c.jsx("dl",{children:c.jsxs("div",{children:[c.jsx("dt",{children:g.version}),c.jsx("dd",{children:u.loading?g.checking:N})]})}),c.jsxs("div",{className:"action-grid",children:[r?c.jsxs("button",{className:"primary-button",disabled:!i||f||y,onClick:L,type:"button",children:[c.jsx(Vi,{"aria-hidden":"true"}),f?g.updating:g.update]}):null,c.jsxs("button",{className:"danger-button",disabled:!i||y,onClick:O,type:"button",children:[c.jsx(Vu,{"aria-hidden":"true"}),y?g.restarting:g.restart]})]}),u.error?c.jsx("p",{className:"empty-copy",children:u.error}):null,C?c.jsx("p",{className:"empty-copy",children:C}):null]})}function _1({language:i,t:u,onLanguageChange:r}){return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:u.language}),c.jsxs("label",{className:"field",children:[c.jsx("span",{children:u.displayLanguage}),c.jsx(Qp,{ariaLabel:u.displayLanguage,options:[{value:"system",label:u.followSystem},{value:"en",label:u.english},{value:"zh",label:u.chinese}],value:i,onChange:f=>r(f)})]})]})}function w1({notificationsBlocked:i,permission:u,settings:r,t:f,onToggleEnabled:y}){return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:f.notifications}),c.jsxs("label",{className:`toggle-field notification-toggle ${i?"disabled":""}`,children:[c.jsxs("span",{children:[c.jsx(Zg,{"aria-hidden":"true"}),f.browserAlerts]}),c.jsx("input",{type:"checkbox",checked:r.enabled&&!i&&u==="granted",disabled:i,onChange:g=>y(g.target.checked)})]}),i?c.jsx("p",{className:"empty-copy",children:f.notificationsBlocked}):null]})}function D1({activeDaemonId:i,busy:u,t:r,targets:f,onConnect:y,onForget:g}){return c.jsxs("section",{className:"control-section compact-section",children:[c.jsx("h2",{children:r.savedDevices}),c.jsxs("div",{className:"stack-list",children:[f.map(C=>c.jsxs("div",{className:"data-row target-row",children:[c.jsxs("div",{children:[c.jsxs("strong",{children:[C.label,C.daemonId===i?` · ${r.active}`:""]}),c.jsxs("span",{children:[C.displayName??C.daemonId," ·"," ",C.lastConnectedAt?Zu(C.lastConnectedAt):r.notConnectedRecently]})]}),c.jsxs("div",{className:"row-actions",children:[c.jsx("button",{"aria-label":`Connect to ${C.label}`,className:"icon-button",disabled:u,onClick:()=>y(C),type:"button",children:c.jsx(Tp,{"aria-hidden":"true"})}),c.jsx("button",{"aria-label":`Forget ${C.label}`,className:"icon-button danger-icon",disabled:u,onClick:()=>g(C.daemonId),type:"button",children:c.jsx(Mp,{"aria-hidden":"true"})})]})]},C.daemonId)),f.length===0?c.jsx("p",{className:"empty-copy",children:r.noSavedDevices}):null]})]})}const ip={loading:!1,files:null,error:null};function z1({client:i,sessionId:u,sessionTitle:r,onClose:f}){const[y,g]=v.useState("unstaged"),[C,L]=v.useState({unstaged:ip,staged:ip}),[O,N]=v.useState(null),[Y,H]=v.useState(null),[K,B]=v.useState(!1),[X,ae]=v.useState(null),Ae=C[y],ge=v.useCallback(async U=>{L(I=>({...I,[U]:{loading:!0,files:I[U].files,error:null}}));try{const I=await i.request({action:"session.gitDiff.list",id:i.makeId("gitDiffList"),sessionId:u,scope:U});L(we=>({...we,[U]:{loading:!1,files:I.files,error:null}}))}catch(I){L(we=>({...we,[U]:{loading:!1,files:null,error:I instanceof Error?I.message:String(I)}}))}},[i,u]);v.useEffect(()=>{!C[y].files&&!C[y].loading&&!C[y].error&&ge(y)},[y,C,ge]),v.useEffect(()=>{N(null),H(null),ae(null)},[y]),v.useEffect(()=>{if(!O){H(null),ae(null);return}let U=!1;return B(!0),ae(null),i.request({action:"session.gitDiff.file",id:i.makeId("gitDiffFile"),sessionId:u,scope:y,path:O}).then(I=>{U||(H(I),B(!1))}).catch(I=>{U||(ae(I instanceof Error?I.message:String(I)),B(!1))}),()=>{U=!0}},[i,u,y,O]);const We=v.useMemo(()=>{const U=I=>I?I.reduce((we,re)=>({adds:we.adds+re.additions,dels:we.dels+re.deletions,count:we.count+1}),{adds:0,dels:0,count:0}):{adds:0,dels:0,count:0};return{unstaged:U(C.unstaged.files),staged:U(C.staged.files)}},[C]);return c.jsxs("div",{className:"diff-drawer",role:"dialog","aria-label":"Git diff",children:[c.jsx("div",{className:"diff-drawer-backdrop",onClick:f,"aria-hidden":"true"}),c.jsxs("div",{className:"diff-drawer-panel",children:[c.jsxs("header",{className:"diff-drawer-header",children:[c.jsxs("div",{children:[c.jsx("strong",{children:"Changes"}),c.jsx("span",{children:r})]}),c.jsx("button",{type:"button",className:"icon-button",onClick:f,"aria-label":"Close changes",children:c.jsx(Dn,{"aria-hidden":"true"})})]}),c.jsx("div",{className:"diff-tabs",role:"tablist",children:["unstaged","staged"].map(U=>{const I=We[U],we=y===U;return c.jsxs("button",{type:"button",role:"tab","aria-selected":we,className:`diff-tab ${we?"active":""}`,onClick:()=>g(U),children:[c.jsx("span",{className:"diff-tab-label",children:U==="unstaged"?"Working":"Staged"}),I.count>0?c.jsxs("span",{className:"diff-tab-meta",children:[c.jsxs("span",{className:"diff-add",children:["+",I.adds]}),c.jsxs("span",{className:"diff-del",children:["-",I.dels]})]}):null]},U)})}),c.jsxs("div",{className:"diff-body",children:[c.jsxs("aside",{className:"diff-files","aria-label":"Changed files",children:[Ae.loading&&!Ae.files?c.jsx("p",{className:"diff-empty",children:"Loading…"}):null,Ae.error?c.jsx("p",{className:"diff-empty diff-error",children:Ae.error}):null,Ae.files&&Ae.files.length===0?c.jsx("p",{className:"diff-empty",children:"No changes."}):null,Ae.files?.map(U=>c.jsxs("button",{type:"button",className:`diff-file ${O===U.path?"active":""}`,onClick:()=>N(U.path),children:[c.jsx("span",{className:`diff-status diff-status-${U.status}`,children:U.status}),c.jsx("span",{className:"diff-file-path",title:U.path,children:U.path}),c.jsxs("span",{className:"diff-file-stats",children:[U.binary?c.jsx("span",{className:"diff-binary",children:"bin"}):null,!U.binary&&U.additions>0?c.jsxs("span",{className:"diff-add",children:["+",U.additions]}):null,!U.binary&&U.deletions>0?c.jsxs("span",{className:"diff-del",children:["-",U.deletions]}):null]})]},U.path))]}),c.jsx("section",{className:"diff-patch","aria-label":"File diff",children:O?K?c.jsx("p",{className:"diff-empty",children:"Loading patch…"}):X?c.jsx("p",{className:"diff-empty diff-error",children:X}):Y?.binary?c.jsx("p",{className:"diff-empty",children:"Binary file — no inline diff."}):Y?c.jsx(R1,{patch:Y.patch,truncated:Y.truncated}):null:c.jsxs("div",{className:"diff-empty",children:[c.jsx(xf,{"aria-hidden":"true"}),c.jsx("p",{children:"Select a file to view its diff."})]})})]})]})]})}function R1({patch:i,truncated:u}){const r=v.useMemo(()=>i.split(`
|
|
18
18
|
`),[i]);return c.jsxs("div",{className:"diff-patch-view",children:[r.map((f,y)=>{const g=O1(f);return c.jsx("div",{className:`diff-line ${g}`,children:c.jsx("span",{className:"diff-line-text",children:f||" "})},y)}),u?c.jsx("p",{className:"diff-empty",children:"Patch truncated — file is larger than the inline limit."}):null]})}function O1(i){return i.startsWith("diff ")||i.startsWith("index ")||i.startsWith("---")||i.startsWith("+++")?"header":i.startsWith("@@")?"hunk":i.startsWith("+")?"add":i.startsWith("-")?"del":"ctx"}const Vp="pair",Ja="vibelet.web.pairing",sp="vibelet.web.deviceId";class Qu extends Error{constructor(u,r){super(r),this.code=u,this.name="PairingCreateError"}}function zf(i){return!!i&&typeof i=="object"&&!Array.isArray(i)}function k1(i){const u=i.replace(/-/g,"+").replace(/_/g,"/"),r=u.padEnd(Math.ceil(u.length/4)*4,"=");return decodeURIComponent(Array.from(atob(r),f=>`%${f.charCodeAt(0).toString(16).padStart(2,"0")}`).join(""))}function U1(i){const[u,r,f,y,g,C]=i;return!r||!Number.isFinite(f)||f<=0?null:{kind:u==="relay"?"relay":"direct",host:r,port:Math.floor(f),source:y,stability:g,...C===!0?{secure:!0}:{}}}function H1(i){if(!zf(i))return null;const{kind:u,host:r,port:f,source:y,stability:g,secure:C}=i;return u!=="direct"&&u!=="relay"||typeof r!="string"||!r.trim()||typeof f!="number"||!Number.isFinite(f)||f<=0||typeof y!="string"||typeof g!="string"?null:{kind:u,host:r.trim(),port:Math.floor(f),source:y,stability:g,...C===!0?{secure:!0}:{}}}function q1(i){const u=i.trim().split(".");if(u.length!==4)return!1;const r=u.map(g=>/^\d+$/.test(g)?Number(g):Number.NaN);if(r.some(g=>!Number.isInteger(g)||g<0||g>255))return!1;const[f,y]=r;return f===10||f===172&&y>=16&&y<=31||f===192&&y===168}function B1(i){const u=i.trim();return u.includes(":")&&!u.startsWith("[")?`[${u}]`:u}function L1(i,u){return u.protocol==="https:"&&i.secure!==!0?null:`${i.secure===!0?"wss":"ws"}://${B1(i.host)}:${i.port}`}function cp(i){return q1(i.host)?0:i.source==="local_network"?1:i.source==="configured_host"?2:3}function Y1(i,u){const r=u?.port??i.port,f=u?.canonicalHost??i.canonicalHost;if(!f||typeof r!="number"||!Number.isFinite(r))return[];const y=Math.floor(r);return[{kind:"direct",host:f,port:y,source:"fallback",stability:"stable"},...[...u?.fallbackHosts??[],...i.fallbackHosts??[]].map(g=>({kind:"direct",host:g,port:y,source:"fallback",stability:"stable"}))]}function G1(i,u,r=window.location){const f=[...u?.connections??[],...i.connections??[],...Y1(i,u)].map(H1).filter(y=>!!y).filter(y=>y.kind==="direct").sort((y,g)=>cp(y)-cp(g));for(const y of f){const g=L1(y,r);if(g)return g}}function Q1(i){if(!i.d||!i.c)return null;const u=Array.isArray(i.o)?i.o.map(U1).filter(r=>!!r):void 0;return{daemonId:i.d,pairNonce:i.c,...i.n?{displayName:i.n}:{},...i.h?{canonicalHost:i.h}:{},...Number.isFinite(i.p)?{port:i.p}:{},...Array.isArray(i.f)?{fallbackHosts:i.f.filter(r=>typeof r=="string")}:{},...u?.length?{connections:u}:{},...i.e?{expiresAt:i.e}:{}}}function V1(i){return!i.daemonId||!i.pairNonce?null:{daemonId:i.daemonId,displayName:i.displayName,canonicalHost:i.canonicalHost,fallbackHosts:i.fallbackHosts,port:i.port,connections:i.connections,pairNonce:i.pairNonce,expiresAt:i.expiresAt}}function X1(i=window.location.hash){const u=i.startsWith("#")?i.slice(1):i,r=new URLSearchParams(u).get(Vp);if(!r)return null;try{const f=JSON.parse(k1(r));if(!zf(f))return null;if(f.t==="vp")return Q1(f);if(f.type==="vibelet-pair")return V1(f)}catch{return null}return null}function Z1(){if(!window.location.hash.includes(`${Vp}=`))return;const i=`${window.location.pathname}${window.location.search}`;window.history.replaceState(null,"",i)}function K1(i=window.localStorage){const u=i.getItem(sp);if(u)return u;const r=typeof crypto.randomUUID=="function"?crypto.randomUUID():`web_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;return i.setItem(sp,r),r}function up(i){const u=i.getItem(Ja);if(!u)return null;try{const r=JSON.parse(u);return!r.daemonId||!r.deviceId||!r.pairToken?null:{daemonId:r.daemonId,displayName:r.displayName,deviceId:r.deviceId,pairToken:r.pairToken,pairedAt:r.pairedAt??new Date().toISOString(),webSocketUrl:typeof r.webSocketUrl=="string"?r.webSocketUrl:void 0}}catch{return null}}function Rf(i){if(typeof window>"u")return null;try{return i===window.localStorage?window.sessionStorage:null}catch{return null}}function J1(i=window.localStorage,u=Rf(i)){const r=up(i);if(r)return r;const f=u?up(u):null;return f?(i.setItem(Ja,JSON.stringify(f)),u?.removeItem(Ja),f):null}function op(i,u=window.localStorage,r=Rf(u)){u.setItem(Ja,JSON.stringify(i)),r?.removeItem(Ja)}function rp(i=window.localStorage,u=Rf(i)){i.removeItem(Ja),u?.removeItem(Ja)}function $1(i,u=Date.now()){if(!i.expiresAt)return!1;const r=new Date(i.expiresAt).getTime();return Number.isFinite(r)&&r<u}async function F1(i){const u=await i.text().catch(()=>"");try{const r=JSON.parse(u);if(zf(r)&&r.error==="pair_window_expired")return new Qu("pair_window_expired","Pairing link expired.")}catch{}return new Qu("pairing_failed",u||"Pairing failed.")}async function I1(i,u=K1()){if($1(i))throw new Qu("pair_window_expired","Pairing link expired.");const r=await fetch("/pair/create",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({daemonId:i.daemonId,pairNonce:i.pairNonce,deviceId:u,deviceName:"Vibelet Web"})});if(!r.ok)throw await F1(r);const f=await r.json();return{daemonId:f.daemonId,displayName:f.displayName||i.displayName,deviceId:f.deviceId,pairToken:f.pairToken,pairedAt:new Date().toISOString(),webSocketUrl:G1(i,f)}}function fp(i){return`${i}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function W1(i,u=window.location){return i?.webSocketUrl?i.webSocketUrl:`${u.protocol==="https:"?"wss:":"ws:"}//${u.host}`}class P1{socket=null;pending=new Map;messageListeners=new Set;closeListeners=new Set;async connect(u){this.disconnect();const r=new WebSocket(W1(u));this.socket=r;const f=new Promise((y,g)=>{r.onopen=()=>y(),r.onerror=()=>g(new Error("WebSocket connection failed."))});return r.onmessage=y=>this.handleSocketMessage(y.data),r.onclose=()=>{this.socket===r&&(this.socket=null),this.rejectPending(new Error("WebSocket disconnected.")),this.closeListeners.forEach(y=>y())},await f,await this.request({action:"auth.hello",id:fp("auth"),pairToken:u.pairToken,daemonId:u.daemonId,deviceId:u.deviceId,locale:navigator.language})}request(u,r={}){return!this.socket||this.socket.readyState!==WebSocket.OPEN?Promise.reject(new Error("WebSocket is not connected.")):new Promise((f,y)=>{const g={resolve:f,reject:y};r.timeoutMs&&r.timeoutMs>0&&(g.timeoutId=setTimeout(()=>{this.pending.delete(u.id),y(new Error(r.timeoutMessage||"Request timed out."))},r.timeoutMs)),this.pending.set(u.id,g),this.socket?.send(JSON.stringify(u))})}send(u){this.socket?.readyState===WebSocket.OPEN&&this.socket.send(JSON.stringify(u))}onMessage(u){return this.messageListeners.add(u),()=>this.messageListeners.delete(u)}onClose(u){return this.closeListeners.add(u),()=>this.closeListeners.delete(u)}disconnect(){this.rejectPending(new Error("WebSocket disconnected.")),this.socket?.close(1e3,"client disconnect"),this.socket=null}get isConnected(){return this.socket?.readyState===WebSocket.OPEN}makeId(u){return fp(u)}handleSocketMessage(u){if(typeof u!="string")return;let r;try{r=JSON.parse(u)}catch{return}if(r.type!=="pong"){if(r.type==="response"){const f=this.pending.get(r.id);if(f){this.pending.delete(r.id),f.timeoutId&&clearTimeout(f.timeoutId),r.ok?f.resolve(r.data):f.reject(new Error(r.error||"Request failed."));return}}this.messageListeners.forEach(f=>f(r))}}rejectPending(u){for(const r of this.pending.values())r.timeoutId&&clearTimeout(r.timeoutId),r.reject(u);this.pending.clear()}}function eb(){"serviceWorker"in navigator&&window.addEventListener("load",()=>{navigator.serviceWorker.register("/web/sw.js",{scope:"/web/"}).catch(()=>{})})}function tb(i=window.location.search){const u=new URLSearchParams(i);return[u.get("title"),u.get("text"),u.get("url")].map(f=>f?.trim()).filter(f=>!!f).join(`
|
|
19
19
|
|
|
20
20
|
`)}function nb(){const i=new URL(window.location.href);let u=!1;for(const r of["title","text","url"])i.searchParams.has(r)&&(i.searchParams.delete(r),u=!0);u&&window.history.replaceState(null,"",`${i.pathname}${i.search}${i.hash}`)}function lb(i){return i.filter(u=>u.archived===!0).map(u=>u.sessionId)}function ab(i,u,r){return i.ok?{tone:"success",message:u.replace("{n}",String(i.archivedSessionIds.length))}:i.error==="timeout"?{tone:"error",message:r.timeout}:i.error==="not_connected"?{tone:"error",message:r.disconnected}:{tone:"error",message:r.generic.replace("{error}",i.error)}}async function ib(i,u,r){if(!i?.isConnected)return{ok:!1,error:"not_connected"};try{const f=await i.request({action:"sessions.archiveSync",id:i.makeId("archive_sync"),mode:u,...u==="pull"?{}:{archivedSessionIds:r??[]}});return{ok:!0,archivedSessionIds:Array.isArray(f.archivedSessionIds)?f.archivedSessionIds.filter(y=>typeof y=="string"&&y.length>0):[]}}catch(f){return{ok:!1,error:f instanceof Error?f.message:String(f)}}}const Xp="vibelet.web.composerDrafts",hf={draftsBySessionId:{},newSessionDraft:""};function dp(i){return!!i&&typeof i=="object"&&!Array.isArray(i)}function Zp(i){return dp(i)?{draftsBySessionId:dp(i.draftsBySessionId)?Object.fromEntries(Object.entries(i.draftsBySessionId).filter(r=>typeof r[1]=="string")):{},newSessionDraft:typeof i.newSessionDraft=="string"?i.newSessionDraft:""}:hf}function sb(i=window.localStorage){const u=i.getItem(Xp);if(!u)return hf;try{return Zp(JSON.parse(u))}catch{return hf}}function Zs(i,u=window.localStorage){u.setItem(Xp,JSON.stringify(Zp(i)))}function Ks(i,u,r){if(!u)return{...i,newSessionDraft:r};const f={...i.draftsBySessionId};return r.trim()?f[u]=r:delete f[u],{...i,draftsBySessionId:f}}function Js(i,u){return u?i.draftsBySessionId[u]??"":i.newSessionDraft}function cb(i,u,r){if(!u||!r||u===r)return i;const f=i.draftsBySessionId[u];if(f===void 0)return i;const y={...i.draftsBySessionId};return delete y[u],f.trim()&&(y[r]=f),{...i,draftsBySessionId:y}}const Kp="vibelet.web.savedTargets",Jp=12;function ub(i){return!!i&&typeof i=="object"&&!Array.isArray(i)}function ob(i){if(!ub(i)||typeof i.daemonId!="string"||typeof i.deviceId!="string"||typeof i.pairToken!="string"||typeof i.pairedAt!="string")return null;const u=typeof i.displayName=="string"?i.displayName:void 0,r=typeof i.label=="string"&&i.label.trim()?i.label.trim():u||i.daemonId.slice(0,10);return{daemonId:i.daemonId,deviceId:i.deviceId,pairToken:i.pairToken,pairedAt:i.pairedAt,displayName:u,webSocketUrl:typeof i.webSocketUrl=="string"?i.webSocketUrl:void 0,label:r,lastConnectedAt:typeof i.lastConnectedAt=="string"?i.lastConnectedAt:void 0}}function $p(i){if(!Array.isArray(i))return[];const u=new Set,r=[];for(const f of i){const y=ob(f);if(!(!y||u.has(y.daemonId))&&(u.add(y.daemonId),r.push(y),r.length>=Jp))break}return r}function rb(i=window.localStorage){const u=i.getItem(Kp);if(!u)return[];try{return $p(JSON.parse(u))}catch{return[]}}function hp(i,u=window.localStorage){u.setItem(Kp,JSON.stringify($p(i)))}function fb(i,u,r=new Date().toISOString()){return[{...u,label:u.displayName||u.daemonId.slice(0,10),lastConnectedAt:r},...i.filter(y=>y.daemonId!==u.daemonId)].slice(0,Jp)}function db(i,u){return i.filter(r=>r.daemonId!==u)}const sf={version:"",latestVersion:"",loading:!1,error:null};function mp(i){const u=i.match(/^\d+/);return u?Number(u[0]):0}function hb(i,u){const r=i.split(/[+-]/,1)[0].split(".").map(mp),f=u.split(/[+-]/,1)[0].split(".").map(mp),y=Math.max(r.length,f.length);for(let g=0;g<y;g+=1){const C=r[g]??0,L=f[g]??0;if(C<L)return-1;if(C>L)return 1}return 0}function mb(i,u){return hb(i,u)<0}function pb(i){const u=i.toLowerCase();if(u.includes("alpha"))return"alpha";if(u.includes("beta"))return"beta";if(i.trim())return"latest"}function yb(i,u,r){const f=i?.webSocketUrl?i.webSocketUrl:u.origin;try{const y=new URL(f);return y.protocol==="ws:"&&(y.protocol="http:"),y.protocol==="wss:"&&(y.protocol="https:"),y.pathname="/health",y.search="",y.hash="",y.toString()}catch{return new URL("/health",u.origin).toString()}}function gb(i){if(!i||typeof i!="object")return{version:"",latestVersion:""};const u=i;return{version:typeof u.version=="string"?u.version.trim():"",latestVersion:typeof u.latestVersion=="string"?u.latestVersion.trim():""}}const vb=/[\n,,]+/,bb=6,Sb=18;function Fp(i){return i?.trim()||"/"}function xb(i){const u=i.replace(/\s+/g," ").trim();return u?u.slice(0,Sb):null}function Ku(i){if(!Array.isArray(i))return[];const u=new Set,r=[];for(const f of i){if(typeof f!="string")continue;const y=xb(f);if(!y)continue;const g=y.toLowerCase();if(!u.has(g)&&(u.add(g),r.push(y),r.length>=bb))break}return r}function jb(i){return Ku(i.split(vb))}function Ab(i){return Ku(i).join(", ")}function Nb(i){if(!i||typeof i!="object"||Array.isArray(i))return{};const u={};for(const[r,f]of Object.entries(i)){const y=Ku(Array.isArray(f)?f:[]);y.length>0&&(u[Fp(r)]=y)}return u}function Cb(i,u,r){const f=Fp(u),y=Ku(r);if(y.length===0){const{[f]:g,...C}=i;return C}return{...i,[f]:y}}function Tb(i=window.location.search){const u=new URLSearchParams(i),r=u.get("folder")?.trim()||void 0,f=u.get("file")?.trim()||void 0,y=u.get("cwd")?.trim()||void 0;return{...r?{folder:r}:{},...f?{file:f}:{},...y?{cwd:y}:{}}}function Eb(i,u,r=[]){const f=new URLSearchParams(i);for(const g of r)f.delete(g);for(const[g,C]of Object.entries(u))C?f.set(g,C):f.delete(g);const y=f.toString();return y?`?${y}`:""}function pp(i,u={}){const r=u.history??window.history,f=u.location??window.location,y=[];i.folder&&y.push("file","cwd"),i.file&&y.push("folder");const g=Eb(f.search,i,y),C=`${f.pathname}${g}${f.hash}`;if(u.replace){r.replaceState(null,"",C);return}r.pushState(null,"",C)}function Ju(i,u){return!!u&&Object.hasOwn(i,u)}function Mb(i,u){const r=i.map(f=>({...f}));return u?Mf(r,u):r}function yp(i,u,r){return u?{...i,[u]:r.map(f=>({...f}))}:i}function _b(i,u,r){return!u||r.length===0?i:{...i,[u]:[...i[u]??[],...r.map(f=>({...f}))]}}function wb(i,u,r){return!u||!r?i:{...i,[u]:Mf(i[u]??[],r)}}function Db(i,u,r){if(!u||!r||u===r||!Ju(i,u))return i;const f={...i};return f[r]=i[u],delete f[u],f}function zb(i,u){if(!Ju(i,u))return i;const r={...i};return delete r[u],r}const Rb=6;function Ob(i,u){return u.has(i.sessionId)||i.runtime?.isResponding===!0||i.runtime?.state==="daemonActive"||i.runtime?.state==="externalRunning"}function kb(i,u,r,f,y=Rb){if(y<=0)return[];const g=[];for(const C of i){if(g.length>=y)break;!C.sessionId||!Ob(C,r)||Ju(u,C.sessionId)||f.has(C.sessionId)||g.push(C)}return g}function mf(i,u=typeof navigator>"u"?"en":navigator.language){return i==="en"||i==="zh"?i:u.toLowerCase().startsWith("zh")?"zh":"en"}const Ub={en:{daemonWorkspace:"Daemon workspace",sameOriginAccess:"same-origin daemon access",sessions:"Sessions",collapseSessionSidebar:"Hide sessions sidebar",expandSessionSidebar:"Show sessions sidebar",collapseControlsSidebar:"Hide controls sidebar",expandControlsSidebar:"Show controls sidebar",newSession:"New session",claudeSession:"Claude session",codexSession:"Codex session",searchSessions:"Search sessions",sessionFilters:"Session filters",filterViewOptions:"View options",resetFilters:"Reset filters",searchTimeRangeLabel:"Search within",searchTimeRangeLast7Days:"Last 7 days",searchTimeRangeLast30Days:"Last 30 days",searchTimeRangeLast90Days:"Last 90 days",searchTimeRangeAllTime:"All time",agentFilterLabel:"Assistant",agentFilterAll:"All assistants",agentFilterClaude:"Claude",agentFilterCodex:"Codex",groupByFolder:"Group by folder",hideArchived:"Active only",noSessionsMatch:"No sessions match this view.",loadMore:"Load more",open:"Open",details:"Details",copyResumeCommand:"Copy resume command",viewChanges:"View changes",pin:"Pin",unpin:"Unpin",archive:"Archive",unarchive:"Unarchive",delete:"Delete",connectedTo:i=>`Connected to ${i}`,connectingToDaemon:"Opening secure daemon channel",reconnectingToDaemon:"Reconnecting to daemon",connectionFailed:"Connection failed",pairingFailed:"Pairing failed",pairingLinkExpired:"This pairing link has expired. Open a fresh Vibelet Web link from the host computer.",missingPair:"Open the link printed by vibelet",pendingActions:"Pending Actions",noPendingActions:"No approvals or questions.",approvalRequired:"Approval Required",inputNeeded:"Input Needed",deny:"Deny",approve:"Approve",cancel:"Cancel",submit:"Submit",clear:"Clear",restoreSnapshot:"Restore daemon snapshot",refreshSessions:"Refresh sessions",openDaemonWebLink:"Open the daemon web link",openDaemonWebLinkHint:"Run Vibelet with remote access and open the Web UI link printed by the CLI.",loadingHistory:"Loading history",noVisibleMessages:"No visible messages yet",startDaemonSession:"Start a daemon session",emptyChatHint:"Send a prompt from this browser; the daemon keeps Claude or Codex running on the host machine.",agentResponding:"Agent is responding",scrollToLatest:"Scroll to latest",currentDevice:"Current Device",daemon:"Daemon",status:"Status",active:"active",notPaired:"not paired",forget:"Forget",notifications:"Notifications",browserAlerts:"Browser alerts",notificationsBlocked:"Notifications are blocked by this browser.",savedDevices:"Saved Devices",noSavedDevices:"No saved devices yet.",notConnectedRecently:"not connected recently",desktopConnector:"Desktop Connector",version:"Version",checking:"checking...",unknown:"unknown",update:"Update",updating:"Updating...",restart:"Restart",restarting:"Restarting...",language:"Language",displayLanguage:"Display language",followSystem:"Auto",english:"English",chinese:"中文",skills:"Skills",closeSkills:"Close skills",noSkillsFound:"No skills found.",messagePlaceholder:"Type a message or $ for skills...",uploadFiles:"Upload files",showQuickReplies:"Show quick replies",hideQuickReplies:"Hide quick replies",removeAttachment:"Remove attachment",send:"Send",uploading:"Uploading...",noFilesAttached:"No files attached",commands:"Commands",closeCommands:"Close commands",noCommandsFound:"No commands found.",directoryTags:"Directory tags",editDirectoryTags:"Edit directory tags",browseFolder:"Browse folder",archiveSyncTitle:"Archive sync",archiveSyncBody:"Sync archived sessions with the paired desktop connector.",archiveSyncSynced:"Archive state is synced with this connector.",archiveSyncSkippedState:"Archive sync was skipped for this connector.",archiveSyncPushReplace:"Use browser",archiveSyncPushMerge:"Merge",archiveSyncPull:"Use desktop",archiveSyncSkip:"Skip",archiveSyncSyncing:"Syncing...",archiveSyncSuccessPush:"Desktop archive updated with {n} sessions.",archiveSyncSuccessMerge:"Merged. {n} archived sessions now stored on the paired computer.",archiveSyncSuccessPull:"Pulled {n} archived sessions from the paired computer.",archiveSyncSkipped:"Skipped archive sync for this connector.",archiveSyncFailedTimeout:"Sync timed out. Please try again.",archiveSyncFailedDisconnected:"Not connected to a paired computer.",archiveSyncFailedGeneric:"Sync failed: {error}"},zh:{daemonWorkspace:"Daemon 工作区",sameOriginAccess:"同源 daemon 访问",sessions:"会话",collapseSessionSidebar:"隐藏会话侧栏",expandSessionSidebar:"显示会话侧栏",collapseControlsSidebar:"隐藏控制侧栏",expandControlsSidebar:"显示控制侧栏",newSession:"新建会话",claudeSession:"Claude 会话",codexSession:"Codex 会话",searchSessions:"搜索会话",sessionFilters:"会话筛选",filterViewOptions:"视图选项",resetFilters:"重置筛选",searchTimeRangeLabel:"搜索范围",searchTimeRangeLast7Days:"近 7 天",searchTimeRangeLast30Days:"近 30 天",searchTimeRangeLast90Days:"近 90 天",searchTimeRangeAllTime:"全部时间",agentFilterLabel:"助手",agentFilterAll:"全部助手",agentFilterClaude:"Claude",agentFilterCodex:"Codex",groupByFolder:"按文件夹分组",hideArchived:"仅显示活跃会话",noSessionsMatch:"没有符合条件的会话。",loadMore:"加载更多",open:"打开",details:"详情",copyResumeCommand:"复制恢复命令",viewChanges:"查看变更",pin:"置顶",unpin:"取消置顶",archive:"归档",unarchive:"取消归档",delete:"删除",connectedTo:i=>`已连接到 ${i}`,connectingToDaemon:"正在打开安全 daemon 通道",reconnectingToDaemon:"正在重连 daemon",connectionFailed:"连接失败",pairingFailed:"配对失败",pairingLinkExpired:"这个配对链接已过期。请在主机上重新打开 vibelet 打印的新 Web 链接。",missingPair:"打开 vibelet 打印的链接",pendingActions:"待处理",noPendingActions:"没有需要处理的审批或问题。",approvalRequired:"需要审批",inputNeeded:"需要输入",deny:"拒绝",approve:"同意",cancel:"取消",submit:"提交",clear:"清除",restoreSnapshot:"恢复 daemon 快照",refreshSessions:"刷新会话",openDaemonWebLink:"打开 daemon web 链接",openDaemonWebLinkHint:"用远程访问启动 Vibelet,然后打开 CLI 打印的 Web UI 链接。",loadingHistory:"正在加载历史",noVisibleMessages:"还没有可见消息",startDaemonSession:"开始 daemon 会话",emptyChatHint:"从浏览器发送提示词;daemon 会在主机上保持 Claude 或 Codex 运行。",agentResponding:"Agent 正在回复",scrollToLatest:"滚动到最新",currentDevice:"当前设备",daemon:"Daemon",status:"状态",active:"当前",notPaired:"未配对",forget:"忘记",notifications:"通知",browserAlerts:"浏览器提醒",notificationsBlocked:"浏览器已阻止通知。",savedDevices:"已保存设备",noSavedDevices:"还没有保存的设备。",notConnectedRecently:"最近未连接",desktopConnector:"桌面连接器",version:"版本",checking:"检查中...",unknown:"未知",update:"更新",updating:"更新中...",restart:"重启",restarting:"重启中...",language:"语言",displayLanguage:"显示语言",followSystem:"自动",english:"English",chinese:"中文",skills:"技能",closeSkills:"关闭技能",noSkillsFound:"没有找到技能。",messagePlaceholder:"输入消息,或输入 $ 选择技能...",uploadFiles:"上传文件",showQuickReplies:"显示快捷回复",hideQuickReplies:"隐藏快捷回复",removeAttachment:"移除附件",send:"发送",uploading:"上传中...",noFilesAttached:"未添加文件",commands:"命令",closeCommands:"关闭命令",noCommandsFound:"没有找到命令。",directoryTags:"目录标签",editDirectoryTags:"编辑目录标签",browseFolder:"浏览文件夹",archiveSyncTitle:"归档同步",archiveSyncBody:"将已归档会话与配对的桌面连接器同步。",archiveSyncSynced:"归档状态已与此连接器同步。",archiveSyncSkippedState:"此连接器已跳过归档同步。",archiveSyncPushReplace:"以浏览器为准",archiveSyncPushMerge:"合并",archiveSyncPull:"以桌面端为准",archiveSyncSkip:"跳过",archiveSyncSyncing:"同步中...",archiveSyncSuccessPush:"已用浏览器归档列表覆盖桌面端({n} 条)。",archiveSyncSuccessMerge:"已合并完成,桌面端当前共 {n} 条归档。",archiveSyncSuccessPull:"已从桌面端拉取 {n} 条归档到浏览器。",archiveSyncSkipped:"已跳过此连接器的归档同步。",archiveSyncFailedTimeout:"同步超时,请稍后重试。",archiveSyncFailedDisconnected:"当前未连接到配对电脑。",archiveSyncFailedGeneric:"同步失败:{error}"}},Ip="vibelet.web.preferences",Wp=8,gp=12,Hb=10,Pp={searchHistory:[],sinceFilter:"30d",hideArchived:!1,groupFolders:!1,collapsedFolders:{},agentFilter:"all",directoryTags:{},archiveSyncedDaemonIds:{},archiveSyncCardDismissedDaemonIds:{}},pf={quickReplies:["Continue","Summarize the current state","Show the next step"],recentCwds:[],favoriteCwds:[],initialMessageHistory:[]},Gu={leftSidebarCollapsed:!1,rightSidebarCollapsed:!1},yf={version:3,theme:"system",language:"system",sessionList:Pp,composer:pf,layout:Gu};function ec(i){return!!i&&typeof i=="object"&&!Array.isArray(i)}function $s(i,u){if(!Array.isArray(i))return[];const r=new Set,f=[];for(const y of i){if(typeof y!="string")continue;const g=y.trim();if(!(!g||r.has(g))&&(r.add(g),f.push(g),f.length>=u))break}return f}function ey(i){return ec(i)?Object.fromEntries(Object.entries(i).filter(u=>typeof u[1]=="boolean")):{}}function vp(i){return ey(i)}function bp(i){return i==="all"||i==="7d"||i==="30d"||i==="90d"?i:"30d"}function Sp(i){return i==="claude"||i==="codex"?i:"all"}function qb(i,u){if(!ec(i))return Pp;const r=u!==2&&bp(i.sinceFilter)==="all"&&typeof i.groupFolders=="boolean"&&i.groupFolders&&typeof i.hideArchived=="boolean"&&!i.hideArchived&&Sp(i.agentFilter)==="all"&&(i.statusFilter===void 0||i.statusFilter==="all");return{searchHistory:$s(i.searchHistory,Wp),sinceFilter:r?"30d":bp(i.sinceFilter),hideArchived:typeof i.hideArchived=="boolean"?i.hideArchived:!1,groupFolders:r?!1:typeof i.groupFolders=="boolean"?i.groupFolders:!1,collapsedFolders:ey(i.collapsedFolders),agentFilter:Sp(i.agentFilter),directoryTags:Nb(i.directoryTags),archiveSyncedDaemonIds:vp(i.archiveSyncedDaemonIds),archiveSyncCardDismissedDaemonIds:vp(i.archiveSyncCardDismissedDaemonIds)}}function Bb(i){if(!ec(i))return pf;const u=$s(i.quickReplies,20);return{quickReplies:u.length?u:pf.quickReplies,recentCwds:$s(i.recentCwds,gp),favoriteCwds:$s(i.favoriteCwds,gp),initialMessageHistory:$s(i.initialMessageHistory,Hb)}}function Lb(i){return ec(i)?{leftSidebarCollapsed:typeof i.leftSidebarCollapsed=="boolean"?i.leftSidebarCollapsed:Gu.leftSidebarCollapsed,rightSidebarCollapsed:typeof i.rightSidebarCollapsed=="boolean"?i.rightSidebarCollapsed:Gu.rightSidebarCollapsed}:Gu}function ty(i){return ec(i)?{version:3,theme:i.theme==="light"||i.theme==="dark"?i.theme:"system",language:i.language==="en"||i.language==="zh"?i.language:"system",sessionList:qb(i.sessionList,i.version),composer:Bb(i.composer),layout:Lb(i.layout)}:yf}function ny(i=window.localStorage){const u=i.getItem(Ip);if(!u)return yf;try{return ty(JSON.parse(u))}catch{return yf}}function cf(i,u=window.localStorage){u.setItem(Ip,JSON.stringify(ty(i)))}function Yb(i,u){const r=u.trim();return r?[r,...i.filter(f=>f!==r)].slice(0,Wp):i}function Gb(i,u){const r=u.trim().toLowerCase();return r?[tl(i),i.cwd,i.agent,i.branch??"",...i.titleAliases??[]].some(f=>f.toLowerCase().includes(r)):!0}function Qb(i,u){return i.filter(r=>u.hideArchived&&r.archived||u.agentFilter!=="all"&&r.agent!==u.agentFilter?!1:Gb(r,u.search))}const ly="vibelet.web.sessionListCache",ay=120;function Vb(i){return!!i&&typeof i=="object"&&!Array.isArray(i)}function Xb(i){if(!Vb(i)||typeof i.daemonId!="string"||!i.daemonId)return null;const u=zp(i.page);return{daemonId:i.daemonId,page:{...u,sessions:u.sessions.slice(0,ay)},cachedAt:typeof i.cachedAt=="string"?i.cachedAt:new Date(0).toISOString()}}function Zb(i,u=window.localStorage){if(!i)return null;try{const r=u.getItem(ly);if(!r)return null;const f=Xb(JSON.parse(r));return f?.daemonId===i?f.page:null}catch{return null}}function Kb(i,u,r=window.localStorage,f=new Date().toISOString()){if(!i)return;const y={daemonId:i,page:{...u,sessions:u.sessions.slice(0,ay)},cachedAt:f};r.setItem(ly,JSON.stringify(y))}const Zi=.9,Jb=Math.round(280*Zi),$b=Math.round(560*Zi),Fb=Math.round(260*Zi),Ib=Math.round(520*Zi),Wb=Math.round(366*Zi),Pb=Math.round(330*Zi),xp=15e3;function eS(i){return i instanceof Error&&i.message==="auth_failed"}function tS(i,u){return i instanceof Qu&&i.code==="pair_window_expired"?u.pairingLinkExpired:i instanceof Error?i.message:String(i)}function jp(i,u,r){return Math.min(Math.max(Math.round(i),u),r)}function nS(){const i=v.useRef(null),u=v.useRef(async()=>{}),r=v.useRef(null),f=v.useRef(df()),y=v.useRef(_v()),g=v.useRef(ny()),C=v.useRef(sb()),L=v.useRef(rb()),O=v.useRef(f.current),N=v.useRef(y.current),Y=v.useRef(C.current),H=v.useRef(null),K=v.useRef(null),B=v.useRef(null),X=v.useRef({}),ae=v.useRef(null),Ae=v.useRef(new Set),ge=v.useRef(null),We=v.useRef(null),U=v.useRef(new Set),I=v.useRef(null),we=v.useRef(0),re=v.useRef(new Set),pe=v.useRef({}),ye=v.useRef(!1),dt=v.useRef(!1),[Oe,Pe]=v.useState("connecting"),[nt,Fe]=v.useState("Preparing Vibelet Web"),[Ct,$]=v.useState(null),[M,Z]=v.useState(null),[ee,fe]=v.useState([]),[ne,S]=v.useState({}),[z,G]=v.useState({}),[J,W]=v.useState(),[ce,ve]=v.useState({}),[Te,Se]=v.useState(),[he,Ee]=v.useState(null),[tn,yn]=v.useState(null),[Tt,Ye]=v.useState([]),[Vt,gn]=v.useState(!1),[Rt,yt]=v.useState(()=>new Set),[_t,wt]=v.useState({}),[gt,ut]=v.useState({}),[Q,Ve]=v.useState({}),[ke,V]=v.useState({}),[Ue,vt]=v.useState("claude"),[Ie,zl]=v.useState(Gn),[nn,Qn]=v.useState(rf),[Dt,Vn]=v.useState(!1),[lt,da]=v.useState(""),[vn,ha]=v.useState(""),[ln,me]=v.useState(!1),[He,ht]=v.useState(""),[Ot,Xt]=v.useState([]),[ma,Zt]=v.useState(!1),[Rl,an]=v.useState(C.current),[bn,Xn]=v.useState(()=>Js(C.current,null)),[Ol,$a]=v.useState(g.current),[sn,Ki]=v.useState(""),[Ji,tc]=v.useState(g.current.sessionList.searchHistory),[kt,bt]=v.useState(g.current.sessionList.sinceFilter),[at,rl]=v.useState(g.current.sessionList.hideArchived),[pa,nc]=v.useState(g.current.sessionList.groupFolders),[$i,lc]=v.useState(g.current.sessionList.collapsedFolders),[Ut,Fa]=v.useState(g.current.sessionList.agentFilter),nl=Ol.sessionList.directoryTags,kl=Ol.sessionList.archiveSyncedDaemonIds,ya=Ol.sessionList.archiveSyncCardDismissedDaemonIds,[Ul]=v.useState(g.current.composer),[ot,Fi]=v.useState(L.current),[ll,De]=v.useState(!1),[Ht,Hl]=v.useState("session"),[ac,ga]=v.useState(!1),[Ia,va]=v.useState(g.current.layout.leftSidebarCollapsed),[fl,zn]=v.useState(g.current.layout.rightSidebarCollapsed),[qt,ic]=v.useState(Wb),[Wa,Ii]=v.useState(Pb),[sc,Pa]=v.useState({}),[$u,cn]=v.useState({}),[Wi,cc]=v.useState([]),[Kt,Sn]=v.useState({path:Gn,entries:[],loading:!1,loaded:!1}),[ei,Pi]=v.useState(""),[Xe,ti]=v.useState(null),[uc,ni]=v.useState(!1),[es,oc]=v.useState("edit"),[ba,dl]=v.useState({statusText:"",loading:!1,action:null}),[Bt,hl]=v.useState(sf),[Sa,ql]=v.useState(y.current),[un,li]=v.useState(f.current),[xa,ts]=v.useState(null),[ja,xn]=v.useState(null),jn=v.useMemo(()=>Hu(Hu(ee,Object.values(z)),Object.values(ne)),[z,ne,ee]),Aa=v.useMemo(()=>new Set(Object.keys(ne)),[ne]),de=v.useMemo(()=>jn.find(d=>d.sessionId===he)??null,[he,jn]),al=v.useMemo(()=>he&&_t[he]?_t[he]:Object.values(_t)[0]??null,[he,_t]),Jt=v.useMemo(()=>he&>[he]?gt[he]:Object.values(gt)[0]??null,[he,gt]),rc=he?ke[he]??[]:[],ai=sc[Ue]??[],ii=$u[Ue],si=v.useMemo(()=>Qb(jn,{search:sn,hideArchived:at,agentFilter:Ut}),[jn,at,sn,Ut]),$t=v.useMemo(()=>jv(si),[si]),ml=mf(Ol.language),oe=Ub[ml],Na=["workspace",Ia&&"left-sidebar-collapsed"].filter(Boolean).join(" "),Fu=["wide-main",fl&&"right-sidebar-collapsed"].filter(Boolean).join(" "),ns=v.useMemo(()=>({"--left-pane-width":`${qt}px`,"--right-pane-width":`${Wa}px`}),[qt,Wa]),ci=v.useCallback(d=>m=>{m.preventDefault();const p=m.clientX,A=qt,q=Wa,P=Et=>{const st=Et.clientX-p;if(d==="left"){ic(jp(A+st,Jb,$b));return}Ii(jp(q-st,Fb,Ib))},ie=()=>{document.body.classList.remove("pane-resizing"),window.removeEventListener("pointermove",P),window.removeEventListener("pointerup",ie)};document.body.classList.add("pane-resizing"),window.addEventListener("pointermove",P),window.addEventListener("pointerup",ie,{once:!0})},[qt,Wa]);v.useEffect(()=>{r.current=he},[he]),v.useEffect(()=>{ge.current=M},[M]),v.useEffect(()=>{re.current=Rt},[Rt]),v.useEffect(()=>{N.current=Sa},[Sa]),v.useEffect(()=>{O.current=un},[un]),v.useEffect(()=>{Y.current=Rl},[Rl]),v.useEffect(()=>{$a(d=>{const m={...d,sessionList:{...d.sessionList,searchHistory:Ji,sinceFilter:kt,hideArchived:at,groupFolders:pa,collapsedFolders:$i,agentFilter:Ut},layout:{...d.layout,leftSidebarCollapsed:Ia,rightSidebarCollapsed:fl}};return cf(m),m})},[$i,pa,at,Ia,fl,Ji,Ut,kt]);const Zn=v.useCallback(d=>{Xn(d),an(m=>{const p=Ks(m,r.current,d);return Y.current=p,Zs(p),p})},[]),Ca=v.useCallback(d=>{an(m=>{const p=Ks(m,null,d);return Y.current=p,Zs(p),p}),r.current||Xn(d)},[]),fc=v.useCallback(()=>{tc(d=>Yb(d,sn))},[sn]),dc=v.useCallback(d=>{Fi(d),hp(d)},[]),Iu=v.useCallback(d=>{$a(m=>{const p={...m,language:d};return cf(p),p})},[]),ui=v.useCallback(d=>{$a(m=>{const p={...m,sessionList:d(m.sessionList)};return cf(p),p})},[]);v.useEffect(()=>{eb();const d=tb();d&&(Ca(d),Hl("session"),nb())},[Ca]),v.useEffect(()=>{Ht==="admin"&&li(df())},[Ht]),v.useEffect(()=>()=>{I.current&&window.clearTimeout(I.current),Xe?.objectUrl&&URL.revokeObjectURL(Xe.objectUrl)},[Xe?.objectUrl]);const il=v.useCallback((d,m=!1)=>{fe(p=>Hu(m?p:[],d.sessions)),G(p=>{const A=new Set(d.sessions.map(P=>P.sessionId)),q=Object.fromEntries(Object.entries(p).filter(([P])=>!A.has(P)));return Object.keys(q).length===Object.keys(p).length?p:q}),W(d.nextCursor),Se(d.inventoryVersion),d.folderCounts&&ve(d.folderCounts),m||Kb(ge.current?.daemonId,d),Fe(d.inventoryBackfillInFlight?"Connected, indexing local sessions":"Connected")},[]),oi=v.useCallback(async d=>{const m=i.current;if(!m?.isConnected)return;const p=[...new Set(d.map(A=>A.cwd).filter(Boolean))];if(p.length!==0)try{const A=await m.request({action:"sessions.gitMetadata",id:m.makeId("git"),cwds:p});fe(q=>q.map(P=>({...P,branch:A.branches[P.cwd]??P.branch,diffStat:A.diffStats[P.cwd]??P.diffStat})))}catch{}},[]),ri=v.useCallback((d,m=re.current)=>{const p=i.current;if(!p?.isConnected||d.length===0)return;const A=kb(d,X.current,m,Ae.current);for(const q of A)Ae.current.add(q.sessionId),p.request({action:"session.history",id:p.makeId("history_prefetch"),sessionId:q.sessionId,agent:q.agent},{timeoutMessage:"History prefetch timed out.",timeoutMs:xp}).catch(()=>{}).finally(()=>{Ae.current.delete(q.sessionId)})},[]),hc=v.useCallback(d=>{const m=Rv(d,{currentActiveSessionId:r.current,currentCwd:Ie});if(il(m.page,!1),W(m.page.nextCursor),Se(m.page.inventoryVersion),m.messages&&m.activeSessionId){X.current=yp(X.current,m.activeSessionId,m.messages);const p=X.current[m.activeSessionId]??[];B.current=m.activeSessionId,Ye(p)}Ee(m.activeSessionId),m.activeAgent&&vt(m.activeAgent),m.activeCwd&&zl(m.activeCwd),m.activeApprovalMode&&Qn(m.activeApprovalMode),m.questionAnswers&&Ve(m.questionAnswers),re.current=new Set(m.respondingSessionIds),yt(re.current),wt(m.pendingApprovals),ut(m.pendingQuestions),V(m.pendingQueues),oi(d.sessions),ri(d.sessions,new Set(m.respondingSessionIds))},[Ie,oi,ri,il]),ls=v.useCallback(async()=>{const d=i.current;if(!d?.isConnected)return;const m=await d.request({action:"reconnect.snapshot",id:d.makeId("snapshot"),activeSessionId:r.current??void 0,activeAgent:de?.agent??Ue,agent:Ut==="all"?void 0:Ut,search:sn.trim()||void 0,sinceMs:Jm(kt),hideArchived:at,skipGitMetadata:!0});hc(m.snapshot)},[de?.agent,Ue,hc,at,sn,Ut,kt]),it=v.useCallback(async d=>{const m=i.current;if(!m?.isConnected)return;const p=await m.request({action:"sessions.list",id:m.makeId(d?.append?"sessions_more":"sessions"),limit:mv,cursor:d?.cursor,agent:Ut==="all"?void 0:Ut,search:sn.trim()||void 0,sinceMs:Jm(kt),hideArchived:at,skipGitMetadata:!0,force:d?.force}),A=zp(p);il(A,d?.append),Ee(q=>q??A.sessions[0]?.sessionId??null),oi(A.sessions),ri(A.sessions)},[at,oi,ri,sn,Ut,il,kt]),Ft=v.useCallback(d=>d&&K.current&&K.current!==d?!1:(K.current=null,gn(!1),!0),[]),Kn=v.useCallback(d=>Ju(X.current,d)?(B.current=d,Ye(X.current[d]??[]),!0):!1,[]),fi=v.useCallback((d,m,p)=>{X.current=yp(X.current,d,m);const A=X.current[d]??[];return p?.renderActive!==!1&&d===r.current&&(B.current=d,Ye(A)),A},[]),Jn=v.useCallback((d,m)=>{X.current=_b(X.current,d,m),d===r.current&&(B.current=d,Ye(X.current[d]??[]))},[]),mc=v.useCallback((d,m)=>{X.current=wb(X.current,d,m),d===r.current&&(B.current=d,Ye(X.current[d]??[]))},[]),Bl=v.useCallback((d,m)=>{Jn(d,[{role:"assistant",type:"info",content:m,timestamp:new Date().toISOString()}])},[Jn]),Ta=v.useCallback(d=>{X.current=zb(X.current,d)},[]),pc=v.useCallback(async d=>{const m=i.current;if(m?.isConnected){if(Kn(d.sessionId)){Ft(d.sessionId);return}K.current=d.sessionId,gn(!0),$(null);try{await m.request({action:"session.history",id:m.makeId("history"),sessionId:d.sessionId,agent:d.agent},{timeoutMessage:"History request timed out.",timeoutMs:xp})}catch(p){K.current===d.sessionId&&$(p instanceof Error?p.message:String(p))}finally{Ft(d.sessionId)}}},[Ft,Kn]),Ea=v.useCallback(async(d,m)=>{const p=i.current;if(p?.isConnected)try{const[A,q,P]=await Promise.all([p.request({action:"models.list",id:p.makeId("models"),agent:d}),p.request({action:"usage.limits.fetch",id:p.makeId("usage"),agent:d}),p.request({action:"skills.list",id:p.makeId("skills"),cwd:m||void 0})]);Pa(ie=>({...ie,[d]:A.options??[]})),cn(ie=>({...ie,[d]:q})),cc(Array.isArray(P.skills)?P.skills:[])}catch(A){$(A instanceof Error?A.message:String(A))}},[]),pl=v.useCallback((d,m,p="info")=>{const A=i.current;A?.isConnected&&A.request({action:"log.report",id:A.makeId("log"),entries:[{level:p,event:d,data:m,ts:new Date().toISOString()}]}).catch(()=>{})},[]),Ll=v.useCallback(async(d=ge.current)=>{if(!d){hl(sf);return}hl(m=>({...m,loading:!0,error:null}));try{const m=await fetch(yb(d,window.location,{sameOrigin:!1}),{cache:"no-store"});if(!m.ok)throw new Error(`HTTP ${m.status}`);const p=gb(await m.json().catch(()=>null));hl({...p,loading:!1,error:null})}catch{hl(m=>({...m,loading:!1,error:"Could not read connector version."}))}},[]);v.useEffect(()=>{Ht==="admin"&&Oe==="connected"&&Ll()},[Ht,Oe,Ll]);const di=v.useCallback(d=>{ql(m=>{const p={...m,...d};return N.current=p,wv(p),p})},[]),$n=v.useCallback((d,m)=>{!d||!m||d===m||(Ee(p=>p===d?m:p),H.current===d&&(H.current=m),B.current===d&&(B.current=m),X.current=Db(X.current,d,m),re.current=$m(re.current,d,m),yt(p=>$m(p,d,m)),wt(p=>ef(p,d,m)),ut(p=>ef(p,d,m)),V(p=>ef(p,d,m)),G(p=>{const A=p[d];if(!A)return p;const q={...p};return delete q[d],q[m]={...A,sessionId:m},q}),an(p=>{const A=cb(p,d,m);return A!==p&&(Y.current=A,Zs(A)),A}))},[]),yc=v.useCallback(async(d,m,p)=>{const A=typeof p.sessionId=="string"?p.sessionId:d,q=typeof p.oldSessionId=="string"?p.oldSessionId:d;q&&A&&q!==A&&$n(q,A),m.name==="clear"?(fi(A,[]),V(P=>{const ie={...P};return delete ie[A],delete ie[q],ie}),wt(P=>{const ie={...P};return delete ie[A],delete ie[q],ie}),ut(P=>{const ie={...P};return delete ie[A],delete ie[q],ie}),Ee(A)):m.name==="new"?(Ee(A),B.current=A,Kn(A)):m.name==="exit"?(fe(P=>P.map(ie=>ie.sessionId===A?{...ie,archived:!0}:ie)),Ee(null),B.current=null,H.current=null,Ye([])):m.name==="goal"&&"goal"in p&&Bl(A,e1(p.goal)),p.turnStarted&&!p.queued&&(re.current=new Set(re.current).add(A),yt(P=>new Set(P).add(A))),await it({force:!0})},[Bl,$n,Kn,fi,it]),hi=v.useCallback((d,m,p,A,q)=>{const P=N.current;if(!P[A]||U.current.has(d))return;zv(m,p,{onClick:()=>{window.focus(),q&&Ee(q)},permission:O.current,settings:P,tag:d,visibilityState:document.visibilityState})&&U.current.add(d)},[]),gc=v.useCallback(d=>{switch(d.type){case"response":{if(Yu(d.data)&&typeof d.data.oldSessionId=="string"&&typeof d.data.sessionId=="string"){const{oldSessionId:m,sessionId:p}=d.data;$n(m,p)}break}case"sessions.changed":it({force:!0}).catch(m=>$(m instanceof Error?m.message:String(m)));break;case"session.history":Ft(d.sessionId),fi(d.sessionId,Mb(d.messages,d.partialReplyText)),d.sessionId===r.current&&(V(m=>({...m,[d.sessionId]:d.pendingQueue??[]})),wt(m=>{const p={...m};return d.pendingApproval?p[d.sessionId]={type:"approval.request",sessionId:d.sessionId,...d.pendingApproval}:delete p[d.sessionId],p}),ut(m=>{const p={...m};if(d.pendingQuestion){const A={type:"question.request",sessionId:d.sessionId,...d.pendingQuestion};p[d.sessionId]=A,Ve(ff(A))}else delete p[d.sessionId];return p})),yt(m=>{const p=new Set(m);return d.isResponding||d.externallyResponding?(p.add(d.sessionId),re.current=new Set(p)):(p.delete(d.sessionId),re.current=new Set(p)),p});break;case"session.history.append":Jn(d.sessionId,d.messages);break;case"text.delta":mc(d.sessionId,d.content),re.current=new Set(re.current).add(d.sessionId),yt(m=>new Set(m).add(d.sessionId));break;case"tool.call":Jn(d.sessionId,[{role:"tool",type:"info",toolName:d.toolName,toolInput:d.input,content:`Tool call: ${d.toolName}
|
|
21
21
|
|
|
22
|
-
${Rp(d.input)}`,timestamp:new Date().toISOString()}]);break;case"tool.result":Jn(d.sessionId,[{role:"tool",type:"info",content:d.output,timestamp:new Date().toISOString()}]);break;case"approval.request":wt(m=>({...m,[d.sessionId]:d})),Ee(d.sessionId),hi(`approval:${d.sessionId}:${d.requestId}`,"Vibelet approval required",d.description||d.toolName,"approvals",d.sessionId);break;case"question.request":ut(m=>({...m,[d.sessionId]:d})),Ve(ff(d)),Ee(d.sessionId),hi(`question:${d.sessionId}:${d.requestId}`,"Vibelet needs input",`${d.questions.length} question(s) waiting`,"questions",d.sessionId);break;case"question.cleared":ut(m=>{const p={...m};return p[d.sessionId]?.requestId===d.requestId&&delete p[d.sessionId],p});break;case"session.queue":V(m=>({...m,[d.sessionId]:d.pending}));break;case"session.stall_warning":fe(m=>m.map(p=>p.sessionId===d.sessionId?{...p,stallWarning:d.warning}:p));break;case"session.interrupted_notice":fe(m=>m.map(p=>p.sessionId===d.sessionId?{...p,interruptReason:d.reason,stallWarning:void 0}:p));break;case"session.done":if(re.current.has(d.sessionId)){const m=(pe.current[d.sessionId]??0)+1;pe.current[d.sessionId]=m,hi(`done:${d.sessionId}:${m}`,"Vibelet reply ready","The agent finished a turn.","replies",d.sessionId)}re.current=new Set(re.current),re.current.delete(d.sessionId),yt(m=>{const p=new Set(m);return p.delete(d.sessionId),p}),d.sessionId===r.current&&(wt(m=>{const p={...m};return delete p[d.sessionId],p}),ut(m=>{const p={...m};return delete p[d.sessionId],p})),d.usage&&fe(m=>m.map(p=>p.sessionId===d.sessionId?{...p,lastUsage:d.usage}:p)),it({force:!0}).catch(m=>$(m instanceof Error?m.message:String(m)));break;case"session.interrupted":re.current=new Set(re.current),re.current.delete(d.sessionId),yt(m=>{const p=new Set(m);return p.delete(d.sessionId),p}),it({force:!0}).catch(m=>$(m instanceof Error?m.message:String(m)));break;case"session.renamed":fe(m=>m.map(p=>p.sessionId===d.sessionId?{...p,customTitle:d.title}:p));break;case"error":$(d.message);break}},[mc,Jn,Ft,$n,fi,it,hi]),as=v.useCallback(d=>{const m=d??ge.current;!m||ye.current||(I.current&&window.clearTimeout(I.current),I.current=window.setTimeout(()=>{I.current=null,u.current(m,!0)},pv))},[]),vc=v.useCallback(async(d,m=!1)=>{I.current&&(window.clearTimeout(I.current),I.current=null),ye.current=!1,Pe("connecting"),Fe(m?oe.reconnectingToDaemon:oe.connectingToDaemon),$(null);const p=new P1,A=we.current+1;we.current=A;const q=i.current;i.current=p,q?.disconnect();const P=()=>we.current===A&&i.current===p;p.onMessage(gc),p.onClose(()=>{i.current===p&&(i.current=null,!ye.current&&(Pe("connecting"),Fe(oe.reconnectingToDaemon),$("The daemon WebSocket closed. Vibelet Web will retry automatically."),as(ge.current??d)))});try{let ie=d,Et;try{Et=await p.connect(d)}catch(In){if(!d.webSocketUrl)throw In;ie={...d,webSocketUrl:void 0},Fe(oe.reconnectingToDaemon),Et=await p.connect(ie)}if(!P())return;const st={...ie,displayName:Et.displayName??ie.displayName};ae.current&&ae.current!==st.daemonId&&(X.current={},B.current=null,H.current=null,Ye([])),ae.current=st.daemonId,Z(st),ge.current=st,op(st);const Rn=Zb(st.daemonId);Rn&&il(Rn,!1),Fi(In=>{const Pt=fb(In,st);return hp(Pt),Pt}),Pe("connected"),Fe(oe.connectedTo(Et.displayName??d.displayName??"Vibelet Daemon")),Ll(st),await ls(),await Ea(Ue,Ie),pl("web.connected",{reconnecting:m})}catch(ie){if(!P())return;eS(ie)&&rp(),Pe("error"),Fe(oe.connectionFailed),$(ie instanceof Error?ie.message:String(ie)),as(d)}},[Ue,Ie,Ea,gc,Ll,pl,ls,as,il,oe]);v.useEffect(()=>{u.current=vc},[vc]),v.useEffect(()=>{let d=!1;async function m(){const p=X1(),q=J1()??L.current[0]??null;if(!p&&!q){Pe("missing-pair"),Fe(oe.missingPair);return}try{Pe("pairing"),p&&We.current?.pairNonce!==p.pairNonce&&(We.current={pairNonce:p.pairNonce,promise:I1(p)});const P=p?await We.current?.promise:q;if(!P||d)return;p&&(op(P),We.current=null,Z1()),await u.current(P)}catch(P){if(d)return;p&&(We.current=null),Pe("error"),Fe(oe.pairingFailed),$(tS(P,oe))}}return m(),()=>{d=!0,ye.current=!0,we.current+=1,I.current&&window.clearTimeout(I.current),i.current?.disconnect()}},[oe]),v.useEffect(()=>{if(Oe!=="connected")return;const d=window.setTimeout(()=>{it({force:!0}).catch(m=>$(m instanceof Error?m.message:String(m)))},260);return()=>window.clearTimeout(d)},[Oe,it,sn,kt]),v.useEffect(()=>{Oe==="connected"&&Ea(Ue,Ie)},[Ue,Ie,Ea,Oe]),v.useEffect(()=>{const d=jn.find(m=>m.sessionId===he);if(!d){H.current=null,B.current=null,Ft(),Ye([]),Xn(Js(Y.current,null));return}if(vt(d.agent),zl(d.cwd||Gn),da(d.model??""),ha(d.effort??""),me(d.fastMode??!1),Qn(d.approvalMode??rf),ht(d.customTitle??d.title??""),Xn(Js(Y.current,d.sessionId)),Sn(m=>({...m,path:d.cwd||Gn,loaded:m.path===(d.cwd||Gn)?m.loaded:!1})),ne[d.sessionId]){H.current=d.sessionId,Ft(),B.current!==d.sessionId&&(B.current=d.sessionId,Ye([]));return}if(Kn(d.sessionId)){H.current=d.sessionId,Ft(d.sessionId);return}H.current!==d.sessionId&&(H.current=d.sessionId,B.current!==d.sessionId&&(B.current=d.sessionId,Ye([])),pc(d))},[he,Ft,jn,ne,Kn,pc]);const bc=v.useCallback((d,m)=>{const p=d?.trim()||Ie.trim()||Gn,A=m??Ue,q=bv(),P=Sv({sessionId:q,agent:A,cwd:p,approvalMode:nn,model:Wr(lt),effort:vn||void 0,fastMode:ln,title:`New ${A==="codex"?"Codex":"Claude"} session`}),ie=r.current?"":Js(Y.current,null);return S(Et=>({...Et,[q]:P})),an(Et=>{let st=Ks(Et,q,ie);return r.current||(st=Ks(st,null,"")),Y.current=st,Zs(st),st}),zl(p),vt(A),Ee(q),H.current=q,B.current=q,Ft(),Ye([]),Xn(ie),$(null),pl("web.session.pending_create",{sessionId:q,agent:A,cwd:p}),q},[Ue,nn,Ft,Ie,vn,ln,lt,pl]),Ma=v.useCallback(async(d,m,p)=>{const A=i.current;if(!A?.isConnected)return $("WebSocket is not connected."),null;const q=p?ne[p]:void 0,P=d?.trim()||q?.cwd||Ie.trim()||Gn,ie=m??q?.agent??Ue,Et=q?.approvalMode??nn,st=q?.model??Wr(lt),Rn=q?.effort??(vn||void 0),In=q?.fastMode??ln;$(null);try{const Pt=await A.request({action:"session.create",id:A.makeId("create"),agent:ie,cwd:P,approvalMode:Et,continueSession:Dt,model:st,effort:Rn,fastMode:In,...p?{clientSessionId:p}:{}}),ze=gv(Pt);if(!ze)throw new Error("Daemon did not return a session id.");const on=Yu(Pt)&&typeof Pt.oldSessionId=="string"?Pt.oldSessionId:p;return zl(P),vt(ie),Ee(ze),H.current=ze,B.current=ze,Ft(),p&&q?(S(rn=>{const Nn={...rn};return delete Nn[p],on&&on!==p&&delete Nn[on],Nn}),G(rn=>({...rn,[ze]:xv(q,ze)})),on&&on!==ze&&$n(on,ze),p!==ze&&$n(p,ze)):await it({force:!0}),pl("web.session.create",{sessionId:ze,clientSessionId:p,agent:ie,cwd:P}),ze}catch(Pt){return $(Pt instanceof Error?Pt.message:String(Pt)),null}},[Ue,nn,Dt,Ie,vn,ln,lt,ne,Ft,$n,pl,it]),_a=v.useCallback(async d=>{d?.preventDefault();const m=bn.trim();if(!m||ll)return;const p=i.current;if(!p?.isConnected){$("WebSocket is not connected.");return}De(!0),$(null),Zn("");const A=Ot;Xt([]);let q=he,P=de?.agent??Ue;if(q&&ne[q]){const ze=await Ma(ne[q].cwd,ne[q].agent,q);if(!ze){De(!1),Zn(m),Xt(A);return}q=ze,P=ne[he??""]?.agent??P}else q||(q=await Ma());if(!q){De(!1),Zn(m),Xt(A);return}const ie=A.length===0?Iv(m,P):null;if(ie){const ze=Pv(ie.command),on=ze?p.makeId("cmd_msg"):void 0;ze&&(B.current=q,Jn(q,[{role:"user",content:ze,timestamp:new Date().toISOString()}]),Kn(q));try{const rn=await p.request({action:"session.command",id:p.makeId("command"),sessionId:q,agent:P,command:ie.command,...on?{clientMessageId:on}:{},featureEntitlements:{agentCommands:"pro"}});await yc(q,ie.command,rn)}catch(rn){const Nn=rn instanceof Error?rn.message:String(rn);Bl(q,ep(Nn)),$(ep(Nn))}finally{De(!1)}return}const Et=Wv(m),st=p.makeId("msg"),Rn=A.map(ze=>ze.path);B.current=q,Jn(q,[{role:"user",content:Et,timestamp:new Date().toISOString(),...Rn.length?{images:Rn}:{}}]),Kn(q),re.current=new Set(re.current).add(q),yt(ze=>new Set(ze).add(q));const In=Qv(Et)??void 0,Pt=In?{agentSkills:"pro"}:void 0;try{const ze=await p.request({action:"session.send",id:p.makeId("send"),sessionId:q,agent:P,message:Et,clientMessageId:st,images:Rn.length?Rn:void 0,model:Wr(lt),effort:vn||void 0,fastMode:ln,skillInvocation:In,featureEntitlements:Pt});Yu(ze)&&typeof ze.oldSessionId=="string"&&typeof ze.sessionId=="string"&&$n(ze.oldSessionId,ze.sessionId)}catch(ze){const on=ze instanceof Error?ze.message:String(ze);$(Ov(on,!!In)),Xt(A),re.current=new Set(re.current),re.current.delete(q),yt(rn=>{const Nn=new Set(rn);return Nn.delete(q),Nn})}finally{De(!1)}},[de?.agent,he,Ue,Jn,Bl,Ot,ll,Ma,bn,vn,ln,yc,lt,ne,$n,Kn,Zn]),Wu=v.useCallback(async d=>{const m=i.current;if(!(!m?.isConnected||!al)){De(!0),$(null);try{await m.request({action:"session.approve",id:m.makeId("approve"),sessionId:al.sessionId,requestId:al.requestId,approved:d}),wt(p=>{const A={...p};return delete A[al.sessionId],A})}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[al]),Sc=v.useCallback(async()=>{const d=i.current;if(!(!d?.isConnected||!Jt)){De(!0),$(null);try{await d.request({action:"session.respondQuestion",id:d.makeId("question"),sessionId:Jt.sessionId,requestId:Jt.requestId,answers:Q}),ut(m=>{const p={...m};return delete p[Jt.sessionId],p})}catch(m){$(m instanceof Error?m.message:String(m))}finally{De(!1)}}},[Jt,Q]),xc=v.useCallback(async()=>{const d=i.current;if(!(!d?.isConnected||!Jt)){De(!0),$(null);try{await d.request({action:"session.cancelQuestion",id:d.makeId("cancel_question"),sessionId:Jt.sessionId,requestId:Jt.requestId}),ut(m=>{const p={...m};return delete p[Jt.sessionId],p})}catch(m){$(m instanceof Error?m.message:String(m))}finally{De(!1)}}},[Jt]),jc=v.useCallback((d,m,p)=>{Ve(A=>{const q=A[d]??[];if(!p)return{...A,[d]:[m]};const P=q.includes(m)?q.filter(ie=>ie!==m):[...q,m];return{...A,[d]:P}})},[]),Ac=v.useCallback(async d=>{const m=i.current;if(!(!m?.isConnected||!de)&&!(d==="session.delete"&&!Qi(`Delete ${tl(de)}?`))){De(!0),$(null);try{d==="session.resume"?await m.request({action:d,id:m.makeId("resume"),sessionId:de.sessionId,agent:de.agent}):await m.request({action:d,id:m.makeId(d.split(".").at(-1)??"session"),sessionId:de.sessionId}),d==="session.delete"&&(Ta(de.sessionId),Ee(null),B.current=null,H.current=null,Ye([])),await it({force:!0})}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[de,Ta,it]),Nc=v.useCallback(async d=>{Qn(d);const m=i.current;if(!(!m?.isConnected||!de)){$(null);try{await m.request({action:"session.setApprovalMode",id:m.makeId("approval_mode"),sessionId:de.sessionId,approvalMode:d}),fe(p=>p.map(A=>A.sessionId===de.sessionId?{...A,approvalMode:d}:A))}catch(p){$(p instanceof Error?p.message:String(p))}}},[de]),Yl=v.useCallback(async d=>{const m=i.current;if(!(!m?.isConnected||!he||!d.clientMessageId)){De(!0),$(null);try{await m.request({action:"session.queue.cancel",id:m.makeId("queue_cancel"),sessionId:he,clientMessageId:d.clientMessageId}),V(p=>({...p,[he]:(p[he]??[]).filter(A=>A.clientMessageId!==d.clientMessageId)}))}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[he]),is=v.useCallback(async(d,m)=>{if(ne[d.sessionId])return;const p=i.current;if(p?.isConnected){De(!0),$(null);try{const A=m?Date.now():void 0;await p.request({action:"session.setPinned",id:p.makeId("pin"),sessionId:d.sessionId,pinned:m,...A?{pinnedAt:A}:{}}),fe(q=>q.map(P=>P.sessionId===d.sessionId?{...P,pinned:m,pinnedAt:A}:P)),await it({force:!0})}catch(A){$(A instanceof Error?A.message:String(A))}finally{De(!1)}}},[ne,it]),ss=v.useCallback(async(d,m)=>{if(ne[d.sessionId])return;const p=i.current;if(p?.isConnected){De(!0),$(null);try{await p.request({action:"session.setArchived",id:p.makeId("archive"),sessionId:d.sessionId,archived:m}),fe(A=>A.map(q=>q.sessionId===d.sessionId?{...q,archived:m}:q)),await it({force:!0})}catch(A){$(A instanceof Error?A.message:String(A))}finally{De(!1)}}},[ne,it]),Pu=v.useCallback(async d=>{if(ne[d.sessionId]){Ta(d.sessionId),S(p=>{const A={...p};return delete A[d.sessionId],A}),an(p=>{const A=Ks(p,d.sessionId,"");return Y.current=A,Zs(A),A}),r.current===d.sessionId&&(Ee(null),B.current=null,H.current=null,Ye([]),Xn(Js(Y.current,null)),ga(!1));return}const m=i.current;if(m?.isConnected&&Qi(`Delete ${tl(d)}?`)){De(!0),$(null);try{await m.request({action:"session.delete",id:m.makeId("delete"),sessionId:d.sessionId}),Ta(d.sessionId),G(p=>{if(!p[d.sessionId])return p;const A={...p};return delete A[d.sessionId],A}),r.current===d.sessionId&&(Ee(null),B.current=null,H.current=null,Ye([]),ga(!1)),await it({force:!0})}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[ne,Ta,it]),Cc=v.useCallback(async()=>{!i.current?.isConnected||!de||await is(de,!de.pinned)},[de,is]),Tc=v.useCallback(async()=>{!i.current?.isConnected||!de||await ss(de,!de.archived)},[de,ss]),wa=v.useCallback(async()=>{const d=He.trim();if(de&&ne[de.sessionId]){S(p=>{const A=p[de.sessionId];return A?{...p,[de.sessionId]:{...A,title:d||A.title,customTitle:d||void 0}}:p});return}const m=i.current;if(!(!m?.isConnected||!de)){De(!0),$(null);try{await m.request({action:"session.rename",id:m.makeId("rename"),sessionId:de.sessionId,title:d||void 0}),fe(p=>p.map(A=>A.sessionId===de.sessionId?{...A,customTitle:d||void 0}:A))}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[de,ne,He]),Da=v.useCallback(async d=>{if(!(!d?.length||!M)){Zt(!0),$(null);try{const m=[];for(const p of Array.from(d)){const A=await fetch(`/upload?name=${encodeURIComponent(p.name)}`,{method:"POST",headers:{authorization:`Bearer ${M.pairToken}`,"content-type":p.type||"application/octet-stream"},body:p});if(!A.ok)throw new Error(await A.text().catch(()=>"Upload failed.")||"Upload failed.");const q=vv(await A.json());if(!q)throw new Error("Daemon did not return an uploaded file path.");m.push({path:q,name:p.name,type:p.type||"application/octet-stream",size:p.size})}Xt(p=>[...p,...m])}catch(m){$(m instanceof Error?m.message:String(m))}finally{Zt(!1)}}},[M]),mi=v.useCallback(async(d,m,p)=>{if(M){$(null);try{Xe?.objectUrl&&URL.revokeObjectURL(Xe.objectUrl);const A=await fetch(tf(d,m),{headers:{authorization:`Bearer ${M.pairToken}`}});if(!A.ok)throw new Error(await A.text().catch(()=>"File open failed.")||"File open failed.");const q=A.headers.get("content-type")??"application/octet-stream";if(Av(d,q))ti({path:d,cwd:m,kind:"text",contentType:q,text:await A.text(),etag:qu(A.headers,"etag"),lastModified:qu(A.headers,"last-modified"),size:Number(A.headers.get("content-length"))||void 0,dirty:!1});else{const P=await A.blob();ti({path:d,cwd:m,kind:Nv(d,q)?"image":"binary",contentType:q,text:"",objectUrl:URL.createObjectURL(P),etag:qu(A.headers,"etag"),lastModified:qu(A.headers,"last-modified"),size:P.size,dirty:!1})}ni(!1),oc("edit"),Hl("files"),p?.updateRoute&&pp({file:d,...m?{cwd:m}:{}},{replace:p.replaceRoute})}catch(A){$(A instanceof Error?A.message:String(A))}}},[M,Xe?.objectUrl]),pi=v.useCallback(async d=>{if(!(!M||!Xe||Xe.kind!=="text")){De(!0),$(null);try{const m=await fetch(tf(Xe.path,Xe.cwd),{method:"PUT",headers:{authorization:`Bearer ${M.pairToken}`,"content-type":"text/markdown; charset=utf-8",...Xe.etag&&!d?.force?{"if-match":Xe.etag}:{}},body:Xe.text});if(!m.ok)throw m.status===409?(ni(!0),new Error(Up(Xe.path))):new Error(await m.text().catch(()=>"File save failed.")||"File save failed.");ni(!1);const p=await m.json().catch(()=>({}));ti(A=>A&&{...A,dirty:!1,etag:typeof p.etag=="string"?p.etag:A.etag,lastModified:typeof p.lastModified=="string"?p.lastModified:A.lastModified,size:typeof p.size=="number"?p.size:A.size})}catch(m){$(m instanceof Error?m.message:String(m))}finally{De(!1)}}},[M,Xe]),Ec=v.useCallback(async()=>{if(!(!M||!Xe))try{const d=await fetch(tf(Xe.path,Xe.cwd),{headers:{authorization:`Bearer ${M.pairToken}`}});if(!d.ok)throw new Error("Download failed.");const m=URL.createObjectURL(await d.blob()),p=document.createElement("a");p.href=m,p.download=Ka(Xe.path),p.click(),URL.revokeObjectURL(m)}catch(d){$(d instanceof Error?d.message:String(d))}},[M,Xe]),An=v.useCallback(async(d=Kt.path,m)=>{const p=i.current;if(p?.isConnected){Sn(A=>({...A,path:d,loading:!0,loaded:!1,error:void 0}));try{const A=await p.request({action:"dirs.list",id:p.makeId("dirs"),path:d,cwd:Ie||void 0});Sn({path:d,entries:A.entries??[],loading:!1,loaded:!0}),m?.updateRoute&&pp({folder:d},{replace:m.replaceRoute})}catch(A){Sn(q=>({...q,loading:!1,loaded:!0,error:A instanceof Error?A.message:String(A)}))}}},[Ie,Kt.path]);v.useEffect(()=>{Ht!=="files"||Oe!=="connected"||Kt.loading||Kt.loaded||An(Kt.path||Ie||Gn)},[Ht,Ie,Kt.loaded,Kt.loading,Kt.path,An,Oe]),v.useEffect(()=>{if(Oe!=="connected"||dt.current)return;const d=Tb();if(!d.folder&&!d.file){dt.current=!0;return}if(dt.current=!0,Hl("files"),d.folder){An(d.folder,{updateRoute:!1});return}if(d.file){const m=d.cwd;m&&Sn(p=>({...p,path:m,loaded:!1})),mi(d.file,m,{updateRoute:!1})}},[An,mi,Oe]);const cs=v.useCallback(async()=>{const d=i.current,m=ei.trim();if(!(!d?.isConnected||!m)){De(!0),$(null);try{const p=Op(Kt.path,m);await d.request({action:"dirs.create",id:d.makeId("mkdir"),path:p,cwd:Ie||void 0}),Pi(""),await An(Kt.path)}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[Ie,Kt.path,An,ei]),Gl=v.useCallback((d,m)=>{ui(p=>({...p,archiveSyncedDaemonIds:m==="synced"?{...p.archiveSyncedDaemonIds,[d]:!0}:p.archiveSyncedDaemonIds,archiveSyncCardDismissedDaemonIds:{...p.archiveSyncCardDismissedDaemonIds,[d]:!0}}))},[ui]),us=v.useCallback((d,m)=>{const p=d==="pull"?oe.archiveSyncSuccessPull:d==="pushMerge"?oe.archiveSyncSuccessMerge:oe.archiveSyncSuccessPush;if(xn(ab(m,p,{timeout:oe.archiveSyncFailedTimeout,disconnected:oe.archiveSyncFailedDisconnected,generic:oe.archiveSyncFailedGeneric})),!m.ok)return;const A=new Set(m.archivedSessionIds);fe(q=>q.map(P=>({...P,archived:A.has(P.sessionId)}))),ge.current?.daemonId&&Gl(ge.current.daemonId,"synced"),it({force:!0})},[Gl,it,oe.archiveSyncFailedDisconnected,oe.archiveSyncFailedGeneric,oe.archiveSyncFailedTimeout,oe.archiveSyncSuccessMerge,oe.archiveSyncSuccessPull,oe.archiveSyncSuccessPush]),yi=v.useCallback(async d=>{if(xa)return;ts(d),xn(null);const m=await ib(i.current,d,lb(jn));us(d,m),ts(null)},[us,xa,jn]),Mc=v.useCallback(()=>{M?.daemonId&&(Gl(M.daemonId,"dismissed"),xn({tone:"success",message:oe.archiveSyncSkipped}))},[Gl,M?.daemonId,oe.archiveSyncSkipped]),_c=v.useCallback(async d=>{const m=i.current;if(m?.isConnected&&!(d==="update"&&!Qi("Update desktop connector?"))&&!(d==="restart"&&!Qi("Restart desktop connector?"))){dl(p=>({...p,loading:!0,action:d,statusText:""})),$(null);try{if(d==="update"){const p=pb(Bt.version),A=await m.request({action:"daemon.update",id:m.makeId("daemon_update"),...p?{channel:p}:{}});dl(q=>({...q,loading:!1,action:null,statusText:A.alreadyRunning?"Connector update already running":"Connector update started"}));return}await m.request({action:"daemon.restart",id:m.makeId("daemon_restart")}),dl(p=>({...p,loading:!1,action:null,statusText:"Connector restart requested"})),Ll()}catch(p){dl(A=>({...A,loading:!1,action:null})),$(p instanceof Error?p.message:String(p))}}},[Bt.version,Ll]),eo=v.useCallback(async()=>{if(!de)return;const d=Tv(de,Tt);Mv(Cv(tl(de),de.sessionId),d),await navigator.clipboard?.writeText(d).catch(()=>{})},[de,Tt]),wc=v.useCallback(async()=>{if(!("Notification"in window)){li("unsupported"),$("Browser notifications are not supported.");return}const d=await Notification.requestPermission();O.current=d,li(d),d==="granted"&&di({enabled:!0}),Fe(d==="granted"?"Browser notifications enabled":"Browser notifications not enabled")},[di]),to=v.useCallback(()=>{Qi("Forget this browser pairing?")&&(ye.current=!0,we.current+=1,rp(),i.current?.disconnect(),X.current={},ae.current=null,B.current=null,H.current=null,Ye([]),Z(null),hl(sf),Pe("missing-pair"),Fe(oe.missingPair))},[oe]),no=v.useCallback(d=>{if(d&&un==="default"){wc();return}di({enabled:d})},[un,wc,di]),Wt=v.useCallback(d=>{u.current(d,!0)},[]),za=v.useCallback(d=>{dc(db(ot,d))},[dc,ot]),Dc=v.useCallback(d=>{Ee(d.sessionId),ht(d.customTitle??d.title??""),ga(!0)},[]),zc=v.useCallback(d=>{const m=nl[d.trim()||"/"]??[],p=window.prompt(oe.directoryTags,Ab(m));if(p===null)return;const A=jb(p);ui(q=>({...q,directoryTags:Cb(q.directoryTags,d,A)}))},[nl,oe.directoryTags,ui]),Rc=v.useCallback(d=>{Hl("files"),An(d,{updateRoute:!0})},[An]),Oc=v.useCallback(d=>{navigator.clipboard?.writeText(kp(d)).catch(()=>{})},[]),os=un==="denied"||un==="unsupported",lo=!!(Bt.version&&Bt.latestVersion&&mb(Bt.version,Bt.latestVersion)),Fn=M?.daemonId,rs=!!(Fn&&kl[Fn]),Ra=!!(Fn&&ya[Fn]);return c.jsxs("main",{className:Na,style:ns,children:[Ia?c.jsx("button",{"aria-label":oe.expandSessionSidebar,className:"sidebar-restore-button sidebar-restore-button-left",onClick:()=>va(!1),title:oe.expandSessionSidebar,type:"button",children:c.jsx(Cp,{"aria-hidden":"true"})}):c.jsxs(c.Fragment,{children:[c.jsx(C1,{activeSessionId:he,busy:ll,collapsedFolders:$i,directoryTags:nl,displayName:M?.displayName,folderCounts:ce,groupFolders:pa,groupedSessions:$t,hideArchived:at,inventoryVersion:Te,nextCursor:J,phase:Oe,respondingSessionIds:Rt,search:sn,sessionAgentFilter:Ut,sessionsCount:jn.length,sinceFilter:kt,statusText:nt,t:oe,visibleSessions:si,onLoadMore:d=>{it({append:!0,cursor:d})},onBrowseFolder:Rc,onCopyResumeCommand:Oc,pendingSessionIds:Aa,onCreateSession:d=>{bc(void 0,d)},onDeleteSession:d=>{Pu(d)},onEditFolderTags:zc,onOpenSessionDetails:Dc,onNewInFolder:(d,m)=>{bc(d,m)},onResetFilters:()=>{Fa("all"),bt("30d"),rl(!1),nc(!1)},onSearchChange:Ki,onSearchCommit:fc,onSelectSession:Ee,onToggleSessionArchived:d=>{ss(d,!d.archived)},onToggleSessionPinned:d=>{is(d,!d.pinned)},onSessionAgentFilterChange:Fa,onSinceFilterChange:bt,onViewChanges:yn,onToggleFolder:d=>lc(m=>({...m,[d]:!m[d]})),onToggleGroupFolders:()=>nc(d=>!d),onToggleHideArchived:()=>rl(d=>!d),onToggleCollapse:()=>va(!0)}),c.jsx("button",{"aria-label":"Resize session sidebar",className:"resize-handle",onPointerDown:ci("left"),title:"Resize session sidebar",type:"button",children:c.jsx("span",{})})]}),c.jsxs("section",{className:Fu,"aria-label":"Vibelet workspace",children:[c.jsx(y1,{activeSession:de,activeSessionId:he,activeModelOptions:ai,activeQueue:rc,activeUsage:ii,agent:Ue,approvalMode:nn,attachments:Ot,busy:ll,cwd:Ie,draft:bn,effort:vn,errorText:Ct,fastMode:ln,historyLoading:Vt,messages:Tt,model:lt,phase:Oe,quickReplies:Ul.quickReplies,renameTitle:He,respondingSessionIds:Rt,skills:Wi,uploadBusy:ma,detailsOpen:ac,t:oe,onApprovalModeChange:d=>{Nc(d)},onBrowseFiles:()=>{const d=de?.cwd||Ie||Gn;Hl("files"),An(d,{updateRoute:!0})},onCancelQueuedTurn:d=>{Yl(d)},onClearInterrupt:()=>{Ac("session.clearInterrupt")},onDraftChange:Zn,onDetailsOpenChange:ga,onEffortChange:ha,onExportActiveSession:()=>{eo()},onFastModeChange:me,onModelChange:da,onOpenRemoteFile:(d,m)=>{mi(d,m,{updateRoute:!0})},onRefreshSessions:()=>{it({force:!0})},onRenameSession:()=>{wa()},onRenameTitleChange:ht,onRemoveAttachment:d=>Xt(m=>m.filter(p=>p.path!==d)),onRestoreSnapshot:()=>{ls()},onRefreshSkills:()=>{Ea(de?.agent??Ue,Ie)},onSubmit:_a,onToggleArchived:()=>{Tc()},onTogglePinned:()=>{Cc()},onUploadFiles:Da,onViewChanges:yn}),fl?c.jsx("button",{"aria-label":oe.expandControlsSidebar,className:"sidebar-restore-button sidebar-restore-button-right",onClick:()=>zn(!1),title:oe.expandControlsSidebar,type:"button",children:c.jsx(Km,{"aria-hidden":"true"})}):c.jsxs(c.Fragment,{children:[c.jsx("button",{"aria-label":"Resize controls sidebar",className:"resize-handle right-resize-handle",onPointerDown:ci("right"),title:"Resize controls sidebar",type:"button",children:c.jsx("span",{})}),c.jsxs("aside",{className:"control-pane","aria-label":"Controls",children:[c.jsxs("div",{className:"control-pane-toolbar",children:[c.jsx(v1,{value:Ht,onChange:Hl}),c.jsx("button",{"aria-label":oe.collapseControlsSidebar,className:"sidebar-panel-collapse-button",onClick:()=>zn(!0),title:oe.collapseControlsSidebar,type:"button",children:c.jsx(Km,{"aria-hidden":"true"})})]}),Ht==="session"?c.jsx(A1,{activeApproval:al,activeQuestion:Jt,busy:ll,questionAnswers:Q,t:oe,onCancelQuestion:()=>{xc()},onQuestionChoice:jc,onRespondApproval:d=>{Wu(d)},onRespondQuestion:()=>{Sc()}}):null,Ht==="files"?c.jsx(j1,{busy:ll,cwd:Ie,directory:Kt,newDirName:ei,remoteFile:Xe,remoteFileConflict:uc,remoteFileMode:es,onCreateDirectory:()=>{cs()},onDirectoryPathChange:d=>Sn(m=>({...m,path:d,loaded:!1})),onDownloadRemoteFile:()=>{Ec()},onListDirectory:d=>{An(d,{updateRoute:!0})},onNewDirNameChange:Pi,onOpenRemoteFile:(d,m)=>{mi(d,m,{updateRoute:!0})},onRemoteFileModeChange:oc,onRemoteFileTextChange:d=>ti(m=>m&&{...m,text:d,dirty:!0}),onSaveRemoteFile:d=>{pi(d)}}):null,Ht==="admin"?c.jsxs(c.Fragment,{children:[c.jsx(E1,{pairing:M,phase:Oe,t:oe,onForgetPairing:to}),c.jsx(_1,{language:Ol.language,t:oe,onLanguageChange:Iu}),c.jsx(D1,{activeDaemonId:M?.daemonId,busy:ll,t:oe,targets:ot,onConnect:Wt,onForget:za}),c.jsx(w1,{notificationsBlocked:os,permission:un,settings:Sa,t:oe,onToggleEnabled:no}),c.jsx(T1,{busy:xa,connected:Oe==="connected",dismissed:Ra,feedback:ja,synced:rs,t:oe,onPull:()=>{yi("pull")},onPushMerge:()=>{yi("pushMerge")},onPushReplace:()=>{yi("pushReplace")},onSkip:Mc}),c.jsx(M1,{connected:Oe==="connected",metadata:Bt,restartBusy:ba.loading&&ba.action==="restart",showUpdate:lo,t:oe,updateBusy:ba.loading&&ba.action==="update",updateStatus:ba.statusText,onRestart:()=>{_c("restart")},onUpdate:()=>{_c("update")}})]}):null]})]})]}),tn?(()=>{const d=ee.find(p=>p.sessionId===tn),m=i.current;return!d||!m?null:c.jsx(z1,{client:m,sessionId:d.sessionId,sessionTitle:tl(d),onClose:()=>yn(null)})})():null]})}const iy="(max-width: 767px), (hover: none) and (pointer: coarse) and (max-width: 1024px)",lS={en:"https://vibelet.icu/#get-app",zh:"https://vibelet.icu/zh/#get-app"},aS="https://apps.apple.com/app/id6761245790",iS="https://service.lifeos.vip/auto-updates/vibelet/android/latest.apk",sS={en:{eyebrow:"Vibelet Web",title:"Use the Vibelet app on mobile",description:"The Web workspace is available for desktop browsers only. Install the mobile app, then pair it with the desktop connector on your computer.",primary:"Open app download page",ios:"App Store",android:"Android APK",desktopOnly:"Desktop browser only",desktopHint:"Open this Web link on a desktop browser to continue here.",pairingBefore:"Run",pairingAfter:"on your computer, then scan the QR code from the app."},zh:{eyebrow:"Vibelet Web",title:"手机端请使用 Vibelet App",description:"Web 工作台只面向桌面浏览器。请安装手机 App,再和电脑上的桌面连接器完成配对。",primary:"打开 App 下载页",ios:"App Store",android:"Android APK",desktopOnly:"仅支持桌面浏览器",desktopHint:"如果要继续使用 Web,请在桌面浏览器打开这个链接。",pairingBefore:"在电脑上运行",pairingAfter:"然后用 App 扫描二维码。"}};function cS(){return typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia(iy).matches}function uS(){try{return mf(ny().language)}catch{return mf("system")}}function oS(){const i=uS(),u=sS[i],r=lS[i];return c.jsx("main",{className:"mobile-app-gate","aria-labelledby":"mobile-app-gate-title",children:c.jsxs("section",{className:"mobile-app-panel",children:[c.jsxs("div",{className:"mobile-app-hero",children:[c.jsx("span",{className:"mobile-app-icon","aria-hidden":"true",children:c.jsx(ev,{})}),c.jsx("span",{className:"mobile-app-eyebrow",children:u.eyebrow}),c.jsx("h1",{id:"mobile-app-gate-title",children:u.title}),c.jsx("p",{children:u.description})]}),c.jsxs("div",{className:"mobile-app-actions",role:"group","aria-label":u.primary,children:[c.jsxs("a",{className:"mobile-app-primary-link",href:r,children:[c.jsx(Vi,{"aria-hidden":"true"}),c.jsx("span",{children:u.primary})]}),c.jsxs("a",{className:"mobile-app-secondary-link",href:aS,rel:"noopener noreferrer",target:"_blank",children:[c.jsx(Sf,{"aria-hidden":"true"}),c.jsx("span",{children:u.ios})]}),c.jsxs("a",{className:"mobile-app-secondary-link",download:!0,href:iS,children:[c.jsx(Vi,{"aria-hidden":"true"}),c.jsx("span",{children:u.android})]})]}),c.jsxs("div",{className:"mobile-app-note",children:[c.jsx(U0,{"aria-hidden":"true"}),c.jsxs("div",{children:[c.jsx("strong",{children:u.desktopOnly}),c.jsx("span",{children:u.desktopHint})]})]}),c.jsxs("p",{className:"mobile-app-footnote",children:[c.jsx("span",{children:u.pairingBefore}),c.jsx("code",{children:"npx vibelet"}),c.jsx("span",{children:u.pairingAfter})]})]})})}function rS(){const[i,u]=v.useState(cS);return v.useEffect(()=>{if(typeof window.matchMedia!="function")return;const r=window.matchMedia(iy),f=()=>u(r.matches);return f(),typeof r.addEventListener=="function"?(r.addEventListener("change",f),()=>r.removeEventListener("change",f)):(r.addListener(f),()=>r.removeListener(f))},[]),i?c.jsx(oS,{}):c.jsx(nS,{})}zg.createRoot(document.getElementById("root")).render(c.jsx(v.StrictMode,{children:c.jsx(rS,{})}));export{Lp as _,_g as a,c as j,v as r};
|
|
22
|
+
${Rp(d.input)}`,timestamp:new Date().toISOString()}]);break;case"tool.result":Jn(d.sessionId,[{role:"tool",type:"info",content:d.output,timestamp:new Date().toISOString()}]);break;case"approval.request":wt(m=>({...m,[d.sessionId]:d})),Ee(d.sessionId),hi(`approval:${d.sessionId}:${d.requestId}`,"Vibelet approval required",d.description||d.toolName,"approvals",d.sessionId);break;case"question.request":ut(m=>({...m,[d.sessionId]:d})),Ve(ff(d)),Ee(d.sessionId),hi(`question:${d.sessionId}:${d.requestId}`,"Vibelet needs input",`${d.questions.length} question(s) waiting`,"questions",d.sessionId);break;case"question.cleared":ut(m=>{const p={...m};return p[d.sessionId]?.requestId===d.requestId&&delete p[d.sessionId],p});break;case"session.queue":V(m=>({...m,[d.sessionId]:d.pending}));break;case"session.stall_warning":fe(m=>m.map(p=>p.sessionId===d.sessionId?{...p,stallWarning:d.warning}:p));break;case"session.interrupted_notice":fe(m=>m.map(p=>p.sessionId===d.sessionId?{...p,interruptReason:d.reason,stallWarning:void 0}:p));break;case"session.done":if(re.current.has(d.sessionId)){const m=(pe.current[d.sessionId]??0)+1;pe.current[d.sessionId]=m,hi(`done:${d.sessionId}:${m}`,"Vibelet reply ready","The agent finished a turn.","replies",d.sessionId)}re.current=new Set(re.current),re.current.delete(d.sessionId),yt(m=>{const p=new Set(m);return p.delete(d.sessionId),p}),d.sessionId===r.current&&(wt(m=>{const p={...m};return delete p[d.sessionId],p}),ut(m=>{const p={...m};return delete p[d.sessionId],p})),d.usage&&fe(m=>m.map(p=>p.sessionId===d.sessionId?{...p,lastUsage:d.usage}:p)),it({force:!0}).catch(m=>$(m instanceof Error?m.message:String(m)));break;case"session.interrupted":re.current=new Set(re.current),re.current.delete(d.sessionId),yt(m=>{const p=new Set(m);return p.delete(d.sessionId),p}),it({force:!0}).catch(m=>$(m instanceof Error?m.message:String(m)));break;case"session.renamed":fe(m=>m.map(p=>p.sessionId===d.sessionId?{...p,customTitle:d.title}:p));break;case"error":$(d.message);break}},[mc,Jn,Ft,$n,fi,it,hi]),as=v.useCallback(d=>{const m=d??ge.current;!m||ye.current||(I.current&&window.clearTimeout(I.current),I.current=window.setTimeout(()=>{I.current=null,u.current(m,!0)},pv))},[]),vc=v.useCallback(async(d,m=!1)=>{I.current&&(window.clearTimeout(I.current),I.current=null),ye.current=!1,Pe("connecting"),Fe(m?oe.reconnectingToDaemon:oe.connectingToDaemon),$(null);const p=new P1,A=we.current+1;we.current=A;const q=i.current;i.current=p,q?.disconnect();const P=()=>we.current===A&&i.current===p;p.onMessage(gc),p.onClose(()=>{i.current===p&&(i.current=null,!ye.current&&(Pe("connecting"),Fe(oe.reconnectingToDaemon),$("The daemon WebSocket closed. Vibelet Web will retry automatically."),as(ge.current??d)))});try{let ie=d,Et;try{Et=await p.connect(d)}catch(In){if(!d.webSocketUrl)throw In;ie={...d,webSocketUrl:void 0},Fe(oe.reconnectingToDaemon),Et=await p.connect(ie)}if(!P())return;const st={...ie,displayName:Et.displayName??ie.displayName};ae.current&&ae.current!==st.daemonId&&(X.current={},B.current=null,H.current=null,Ye([])),ae.current=st.daemonId,Z(st),ge.current=st,op(st);const Rn=Zb(st.daemonId);Rn&&il(Rn,!1),Fi(In=>{const Pt=fb(In,st);return hp(Pt),Pt}),Pe("connected"),Fe(oe.connectedTo(Et.displayName??d.displayName??"Vibelet Daemon")),Ll(st),await ls(),await Ea(Ue,Ie),pl("web.connected",{reconnecting:m})}catch(ie){if(!P())return;eS(ie)&&rp(),Pe("error"),Fe(oe.connectionFailed),$(ie instanceof Error?ie.message:String(ie)),as(d)}},[Ue,Ie,Ea,gc,Ll,pl,ls,as,il,oe]);v.useEffect(()=>{u.current=vc},[vc]),v.useEffect(()=>{let d=!1;async function m(){const p=X1(),q=J1()??L.current[0]??null;if(!p&&!q){Pe("missing-pair"),Fe(oe.missingPair);return}try{Pe("pairing"),p&&We.current?.pairNonce!==p.pairNonce&&(We.current={pairNonce:p.pairNonce,promise:I1(p)});const P=p?await We.current?.promise:q;if(!P||d)return;p&&(op(P),We.current=null,Z1()),await u.current(P)}catch(P){if(d)return;p&&(We.current=null),Pe("error"),Fe(oe.pairingFailed),$(tS(P,oe))}}return m(),()=>{d=!0,ye.current=!0,we.current+=1,I.current&&window.clearTimeout(I.current),i.current?.disconnect()}},[oe]),v.useEffect(()=>{if(Oe!=="connected")return;const d=window.setTimeout(()=>{it({force:!0}).catch(m=>$(m instanceof Error?m.message:String(m)))},260);return()=>window.clearTimeout(d)},[Oe,it,sn,kt]),v.useEffect(()=>{Oe==="connected"&&Ea(Ue,Ie)},[Ue,Ie,Ea,Oe]),v.useEffect(()=>{const d=jn.find(m=>m.sessionId===he);if(!d){H.current=null,B.current=null,Ft(),Ye([]),Xn(Js(Y.current,null));return}if(vt(d.agent),zl(d.cwd||Gn),da(d.model??""),ha(d.effort??""),me(d.fastMode??!1),Qn(d.approvalMode??rf),ht(d.customTitle??d.title??""),Xn(Js(Y.current,d.sessionId)),Sn(m=>({...m,path:d.cwd||Gn,loaded:m.path===(d.cwd||Gn)?m.loaded:!1})),ne[d.sessionId]){H.current=d.sessionId,Ft(),B.current!==d.sessionId&&(B.current=d.sessionId,Ye([]));return}if(Kn(d.sessionId)){H.current=d.sessionId,Ft(d.sessionId);return}H.current!==d.sessionId&&(H.current=d.sessionId,B.current!==d.sessionId&&(B.current=d.sessionId,Ye([])),pc(d))},[he,Ft,jn,ne,Kn,pc]);const bc=v.useCallback((d,m)=>{const p=d?.trim()||Ie.trim()||Gn,A=m??Ue,q=bv(),P=Sv({sessionId:q,agent:A,cwd:p,approvalMode:nn,model:Wr(lt),effort:vn||void 0,fastMode:ln,title:`New ${A==="codex"?"Codex":"Claude"} session`}),ie=r.current?"":Js(Y.current,null);return S(Et=>({...Et,[q]:P})),an(Et=>{let st=Ks(Et,q,ie);return r.current||(st=Ks(st,null,"")),Y.current=st,Zs(st),st}),zl(p),vt(A),Ee(q),H.current=q,B.current=q,Ft(),Ye([]),Xn(ie),$(null),pl("web.session.pending_create",{sessionId:q,agent:A,cwd:p}),q},[Ue,nn,Ft,Ie,vn,ln,lt,pl]),Ma=v.useCallback(async(d,m,p)=>{const A=i.current;if(!A?.isConnected)return $("WebSocket is not connected."),null;const q=p?ne[p]:void 0,P=d?.trim()||q?.cwd||Ie.trim()||Gn,ie=m??q?.agent??Ue,Et=q?.approvalMode??nn,st=q?.model??Wr(lt),Rn=q?.effort??(vn||void 0),In=q?.fastMode??ln;$(null);try{const Pt=await A.request({action:"session.create",id:A.makeId("create"),agent:ie,cwd:P,approvalMode:Et,continueSession:Dt,model:st,effort:Rn,fastMode:In,...p?{clientSessionId:p}:{}}),ze=gv(Pt);if(!ze)throw new Error("Daemon did not return a session id.");const on=Yu(Pt)&&typeof Pt.oldSessionId=="string"?Pt.oldSessionId:p;return zl(P),vt(ie),Ee(ze),H.current=ze,B.current=ze,Ft(),p&&q?(S(rn=>{const Nn={...rn};return delete Nn[p],on&&on!==p&&delete Nn[on],Nn}),G(rn=>({...rn,[ze]:xv(q,ze)})),on&&on!==ze&&$n(on,ze),p!==ze&&$n(p,ze)):await it({force:!0}),pl("web.session.create",{sessionId:ze,clientSessionId:p,agent:ie,cwd:P}),ze}catch(Pt){return $(Pt instanceof Error?Pt.message:String(Pt)),null}},[Ue,nn,Dt,Ie,vn,ln,lt,ne,Ft,$n,pl,it]),_a=v.useCallback(async d=>{d?.preventDefault();const m=bn.trim();if(!m||ll)return;const p=i.current;if(!p?.isConnected){$("WebSocket is not connected.");return}De(!0),$(null),Zn("");const A=Ot;Xt([]);let q=he,P=de?.agent??Ue;if(q&&ne[q]){const ze=await Ma(ne[q].cwd,ne[q].agent,q);if(!ze){De(!1),Zn(m),Xt(A);return}q=ze,P=ne[he??""]?.agent??P}else q||(q=await Ma());if(!q){De(!1),Zn(m),Xt(A);return}const ie=A.length===0?Iv(m,P):null;if(ie){const ze=Pv(ie.command),on=ze?p.makeId("cmd_msg"):void 0;ze&&(B.current=q,Jn(q,[{role:"user",content:ze,timestamp:new Date().toISOString()}]),Kn(q));try{const rn=await p.request({action:"session.command",id:p.makeId("command"),sessionId:q,agent:P,command:ie.command,...on?{clientMessageId:on}:{},featureEntitlements:{agentCommands:"pro"}});await yc(q,ie.command,rn)}catch(rn){const Nn=rn instanceof Error?rn.message:String(rn);Bl(q,ep(Nn)),$(ep(Nn))}finally{De(!1)}return}const Et=Wv(m),st=p.makeId("msg"),Rn=A.map(ze=>ze.path);B.current=q,Jn(q,[{role:"user",content:Et,timestamp:new Date().toISOString(),...Rn.length?{images:Rn}:{}}]),Kn(q),re.current=new Set(re.current).add(q),yt(ze=>new Set(ze).add(q));const In=Qv(Et)??void 0,Pt=In?{agentSkills:"pro"}:void 0;try{const ze=await p.request({action:"session.send",id:p.makeId("send"),sessionId:q,agent:P,message:Et,clientMessageId:st,images:Rn.length?Rn:void 0,model:Wr(lt),effort:vn||void 0,fastMode:ln,skillInvocation:In,featureEntitlements:Pt});Yu(ze)&&typeof ze.oldSessionId=="string"&&typeof ze.sessionId=="string"&&$n(ze.oldSessionId,ze.sessionId)}catch(ze){const on=ze instanceof Error?ze.message:String(ze);$(Ov(on,!!In)),Xt(A),re.current=new Set(re.current),re.current.delete(q),yt(rn=>{const Nn=new Set(rn);return Nn.delete(q),Nn})}finally{De(!1)}},[de?.agent,he,Ue,Jn,Bl,Ot,ll,Ma,bn,vn,ln,yc,lt,ne,$n,Kn,Zn]),Wu=v.useCallback(async d=>{const m=i.current;if(!(!m?.isConnected||!al)){De(!0),$(null);try{await m.request({action:"session.approve",id:m.makeId("approve"),sessionId:al.sessionId,requestId:al.requestId,approved:d}),wt(p=>{const A={...p};return delete A[al.sessionId],A})}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[al]),Sc=v.useCallback(async()=>{const d=i.current;if(!(!d?.isConnected||!Jt)){De(!0),$(null);try{await d.request({action:"session.respondQuestion",id:d.makeId("question"),sessionId:Jt.sessionId,requestId:Jt.requestId,answers:Q}),ut(m=>{const p={...m};return delete p[Jt.sessionId],p})}catch(m){$(m instanceof Error?m.message:String(m))}finally{De(!1)}}},[Jt,Q]),xc=v.useCallback(async()=>{const d=i.current;if(!(!d?.isConnected||!Jt)){De(!0),$(null);try{await d.request({action:"session.cancelQuestion",id:d.makeId("cancel_question"),sessionId:Jt.sessionId,requestId:Jt.requestId}),ut(m=>{const p={...m};return delete p[Jt.sessionId],p})}catch(m){$(m instanceof Error?m.message:String(m))}finally{De(!1)}}},[Jt]),jc=v.useCallback((d,m,p)=>{Ve(A=>{const q=A[d]??[];if(!p)return{...A,[d]:[m]};const P=q.includes(m)?q.filter(ie=>ie!==m):[...q,m];return{...A,[d]:P}})},[]),Ac=v.useCallback(async d=>{const m=i.current;if(!(!m?.isConnected||!de)&&!(d==="session.delete"&&!Qi(`Delete ${tl(de)}?`))){De(!0),$(null);try{d==="session.resume"?await m.request({action:d,id:m.makeId("resume"),sessionId:de.sessionId,agent:de.agent}):await m.request({action:d,id:m.makeId(d.split(".").at(-1)??"session"),sessionId:de.sessionId}),d==="session.delete"&&(Ta(de.sessionId),Ee(null),B.current=null,H.current=null,Ye([])),await it({force:!0})}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[de,Ta,it]),Nc=v.useCallback(async d=>{Qn(d);const m=i.current;if(!(!m?.isConnected||!de)){$(null);try{await m.request({action:"session.setApprovalMode",id:m.makeId("approval_mode"),sessionId:de.sessionId,approvalMode:d}),fe(p=>p.map(A=>A.sessionId===de.sessionId?{...A,approvalMode:d}:A))}catch(p){$(p instanceof Error?p.message:String(p))}}},[de]),Yl=v.useCallback(async d=>{const m=i.current;if(!(!m?.isConnected||!he||!d.clientMessageId)){De(!0),$(null);try{await m.request({action:"session.queue.cancel",id:m.makeId("queue_cancel"),sessionId:he,clientMessageId:d.clientMessageId}),V(p=>({...p,[he]:(p[he]??[]).filter(A=>A.clientMessageId!==d.clientMessageId)}))}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[he]),is=v.useCallback(async(d,m)=>{if(ne[d.sessionId])return;const p=i.current;if(p?.isConnected){De(!0),$(null);try{const A=m?Date.now():void 0;await p.request({action:"session.setPinned",id:p.makeId("pin"),sessionId:d.sessionId,pinned:m,...A?{pinnedAt:A}:{}}),fe(q=>q.map(P=>P.sessionId===d.sessionId?{...P,pinned:m,pinnedAt:A}:P)),await it({force:!0})}catch(A){$(A instanceof Error?A.message:String(A))}finally{De(!1)}}},[ne,it]),ss=v.useCallback(async(d,m)=>{if(ne[d.sessionId])return;const p=i.current;if(p?.isConnected){De(!0),$(null);try{await p.request({action:"session.setArchived",id:p.makeId("archive"),sessionId:d.sessionId,archived:m}),fe(A=>A.map(q=>q.sessionId===d.sessionId?{...q,archived:m}:q)),await it({force:!0})}catch(A){$(A instanceof Error?A.message:String(A))}finally{De(!1)}}},[ne,it]),Pu=v.useCallback(async d=>{if(ne[d.sessionId]){Ta(d.sessionId),S(p=>{const A={...p};return delete A[d.sessionId],A}),an(p=>{const A=Ks(p,d.sessionId,"");return Y.current=A,Zs(A),A}),r.current===d.sessionId&&(Ee(null),B.current=null,H.current=null,Ye([]),Xn(Js(Y.current,null)),ga(!1));return}const m=i.current;if(m?.isConnected&&Qi(`Delete ${tl(d)}?`)){De(!0),$(null);try{await m.request({action:"session.delete",id:m.makeId("delete"),sessionId:d.sessionId}),Ta(d.sessionId),G(p=>{if(!p[d.sessionId])return p;const A={...p};return delete A[d.sessionId],A}),r.current===d.sessionId&&(Ee(null),B.current=null,H.current=null,Ye([]),ga(!1)),await it({force:!0})}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[ne,Ta,it]),Cc=v.useCallback(async()=>{!i.current?.isConnected||!de||await is(de,!de.pinned)},[de,is]),Tc=v.useCallback(async()=>{!i.current?.isConnected||!de||await ss(de,!de.archived)},[de,ss]),wa=v.useCallback(async()=>{const d=He.trim();if(de&&ne[de.sessionId]){S(p=>{const A=p[de.sessionId];return A?{...p,[de.sessionId]:{...A,title:d||A.title,customTitle:d||void 0}}:p});return}const m=i.current;if(!(!m?.isConnected||!de)){De(!0),$(null);try{await m.request({action:"session.rename",id:m.makeId("rename"),sessionId:de.sessionId,title:d||void 0}),fe(p=>p.map(A=>A.sessionId===de.sessionId?{...A,customTitle:d||void 0}:A))}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[de,ne,He]),Da=v.useCallback(async d=>{if(!(!d?.length||!M)){Zt(!0),$(null);try{const m=[];for(const p of Array.from(d)){const A=await fetch(`/upload?name=${encodeURIComponent(p.name)}`,{method:"POST",headers:{authorization:`Bearer ${M.pairToken}`,"content-type":p.type||"application/octet-stream"},body:p});if(!A.ok)throw new Error(await A.text().catch(()=>"Upload failed.")||"Upload failed.");const q=vv(await A.json());if(!q)throw new Error("Daemon did not return an uploaded file path.");m.push({path:q,name:p.name,type:p.type||"application/octet-stream",size:p.size})}Xt(p=>[...p,...m])}catch(m){$(m instanceof Error?m.message:String(m))}finally{Zt(!1)}}},[M]),mi=v.useCallback(async(d,m,p)=>{if(M){$(null);try{Xe?.objectUrl&&URL.revokeObjectURL(Xe.objectUrl);const A=await fetch(tf(d,m),{headers:{authorization:`Bearer ${M.pairToken}`}});if(!A.ok)throw new Error(await A.text().catch(()=>"File open failed.")||"File open failed.");const q=A.headers.get("content-type")??"application/octet-stream";if(Av(d,q))ti({path:d,cwd:m,kind:"text",contentType:q,text:await A.text(),etag:qu(A.headers,"etag"),lastModified:qu(A.headers,"last-modified"),size:Number(A.headers.get("content-length"))||void 0,dirty:!1});else{const P=await A.blob();ti({path:d,cwd:m,kind:Nv(d,q)?"image":"binary",contentType:q,text:"",objectUrl:URL.createObjectURL(P),etag:qu(A.headers,"etag"),lastModified:qu(A.headers,"last-modified"),size:P.size,dirty:!1})}ni(!1),oc("edit"),Hl("files"),p?.updateRoute&&pp({file:d,...m?{cwd:m}:{}},{replace:p.replaceRoute})}catch(A){$(A instanceof Error?A.message:String(A))}}},[M,Xe?.objectUrl]),pi=v.useCallback(async d=>{if(!(!M||!Xe||Xe.kind!=="text")){De(!0),$(null);try{const m=await fetch(tf(Xe.path,Xe.cwd),{method:"PUT",headers:{authorization:`Bearer ${M.pairToken}`,"content-type":"text/markdown; charset=utf-8",...Xe.etag&&!d?.force?{"if-match":Xe.etag}:{}},body:Xe.text});if(!m.ok)throw m.status===409?(ni(!0),new Error(Up(Xe.path))):new Error(await m.text().catch(()=>"File save failed.")||"File save failed.");ni(!1);const p=await m.json().catch(()=>({}));ti(A=>A&&{...A,dirty:!1,etag:typeof p.etag=="string"?p.etag:A.etag,lastModified:typeof p.lastModified=="string"?p.lastModified:A.lastModified,size:typeof p.size=="number"?p.size:A.size})}catch(m){$(m instanceof Error?m.message:String(m))}finally{De(!1)}}},[M,Xe]),Ec=v.useCallback(async()=>{if(!(!M||!Xe))try{const d=await fetch(tf(Xe.path,Xe.cwd),{headers:{authorization:`Bearer ${M.pairToken}`}});if(!d.ok)throw new Error("Download failed.");const m=URL.createObjectURL(await d.blob()),p=document.createElement("a");p.href=m,p.download=Ka(Xe.path),p.click(),URL.revokeObjectURL(m)}catch(d){$(d instanceof Error?d.message:String(d))}},[M,Xe]),An=v.useCallback(async(d=Kt.path,m)=>{const p=i.current;if(p?.isConnected){Sn(A=>({...A,path:d,loading:!0,loaded:!1,error:void 0}));try{const A=await p.request({action:"dirs.list",id:p.makeId("dirs"),path:d,cwd:Ie||void 0});Sn({path:d,entries:A.entries??[],loading:!1,loaded:!0}),m?.updateRoute&&pp({folder:d},{replace:m.replaceRoute})}catch(A){Sn(q=>({...q,loading:!1,loaded:!0,error:A instanceof Error?A.message:String(A)}))}}},[Ie,Kt.path]);v.useEffect(()=>{Ht!=="files"||Oe!=="connected"||Kt.loading||Kt.loaded||An(Kt.path||Ie||Gn)},[Ht,Ie,Kt.loaded,Kt.loading,Kt.path,An,Oe]),v.useEffect(()=>{if(Oe!=="connected"||dt.current)return;const d=Tb();if(!d.folder&&!d.file){dt.current=!0;return}if(dt.current=!0,Hl("files"),d.folder){An(d.folder,{updateRoute:!1});return}if(d.file){const m=d.cwd;m&&Sn(p=>({...p,path:m,loaded:!1})),mi(d.file,m,{updateRoute:!1})}},[An,mi,Oe]);const cs=v.useCallback(async()=>{const d=i.current,m=ei.trim();if(!(!d?.isConnected||!m)){De(!0),$(null);try{const p=Op(Kt.path,m);await d.request({action:"dirs.create",id:d.makeId("mkdir"),path:p,cwd:Ie||void 0}),Pi(""),await An(Kt.path)}catch(p){$(p instanceof Error?p.message:String(p))}finally{De(!1)}}},[Ie,Kt.path,An,ei]),Gl=v.useCallback((d,m)=>{ui(p=>({...p,archiveSyncedDaemonIds:m==="synced"?{...p.archiveSyncedDaemonIds,[d]:!0}:p.archiveSyncedDaemonIds,archiveSyncCardDismissedDaemonIds:{...p.archiveSyncCardDismissedDaemonIds,[d]:!0}}))},[ui]),us=v.useCallback((d,m)=>{const p=d==="pull"?oe.archiveSyncSuccessPull:d==="pushMerge"?oe.archiveSyncSuccessMerge:oe.archiveSyncSuccessPush;if(xn(ab(m,p,{timeout:oe.archiveSyncFailedTimeout,disconnected:oe.archiveSyncFailedDisconnected,generic:oe.archiveSyncFailedGeneric})),!m.ok)return;const A=new Set(m.archivedSessionIds);fe(q=>q.map(P=>({...P,archived:A.has(P.sessionId)}))),ge.current?.daemonId&&Gl(ge.current.daemonId,"synced"),it({force:!0})},[Gl,it,oe.archiveSyncFailedDisconnected,oe.archiveSyncFailedGeneric,oe.archiveSyncFailedTimeout,oe.archiveSyncSuccessMerge,oe.archiveSyncSuccessPull,oe.archiveSyncSuccessPush]),yi=v.useCallback(async d=>{if(xa)return;ts(d),xn(null);const m=await ib(i.current,d,lb(jn));us(d,m),ts(null)},[us,xa,jn]),Mc=v.useCallback(()=>{M?.daemonId&&(Gl(M.daemonId,"dismissed"),xn({tone:"success",message:oe.archiveSyncSkipped}))},[Gl,M?.daemonId,oe.archiveSyncSkipped]),_c=v.useCallback(async d=>{const m=i.current;if(m?.isConnected&&!(d==="update"&&!Qi("Update desktop connector?"))&&!(d==="restart"&&!Qi("Restart desktop connector?"))){dl(p=>({...p,loading:!0,action:d,statusText:""})),$(null);try{if(d==="update"){const p=pb(Bt.version),A=await m.request({action:"daemon.update",id:m.makeId("daemon_update"),...p?{channel:p}:{}});dl(q=>({...q,loading:!1,action:null,statusText:A.alreadyRunning?"Connector update already running":"Connector update started"}));return}await m.request({action:"daemon.restart",id:m.makeId("daemon_restart")}),dl(p=>({...p,loading:!1,action:null,statusText:"Connector restart requested"})),Ll()}catch(p){dl(A=>({...A,loading:!1,action:null})),$(p instanceof Error?p.message:String(p))}}},[Bt.version,Ll]),eo=v.useCallback(async()=>{if(!de)return;const d=Tv(de,Tt);Mv(Cv(tl(de),de.sessionId),d),await navigator.clipboard?.writeText(d).catch(()=>{})},[de,Tt]),wc=v.useCallback(async()=>{if(!("Notification"in window)){li("unsupported"),$("Browser notifications are not supported.");return}const d=await Notification.requestPermission();O.current=d,li(d),d==="granted"&&di({enabled:!0}),Fe(d==="granted"?"Browser notifications enabled":"Browser notifications not enabled")},[di]),to=v.useCallback(()=>{Qi("Forget this browser pairing?")&&(ye.current=!0,we.current+=1,rp(),i.current?.disconnect(),X.current={},ae.current=null,B.current=null,H.current=null,Ye([]),Z(null),hl(sf),Pe("missing-pair"),Fe(oe.missingPair))},[oe]),no=v.useCallback(d=>{if(d&&un==="default"){wc();return}di({enabled:d})},[un,wc,di]),Wt=v.useCallback(d=>{u.current(d,!0)},[]),za=v.useCallback(d=>{dc(db(ot,d))},[dc,ot]),Dc=v.useCallback(d=>{Ee(d.sessionId),ht(d.customTitle??d.title??""),ga(!0)},[]),zc=v.useCallback(d=>{const m=nl[d.trim()||"/"]??[],p=window.prompt(oe.directoryTags,Ab(m));if(p===null)return;const A=jb(p);ui(q=>({...q,directoryTags:Cb(q.directoryTags,d,A)}))},[nl,oe.directoryTags,ui]),Rc=v.useCallback(d=>{Hl("files"),An(d,{updateRoute:!0})},[An]),Oc=v.useCallback(d=>{navigator.clipboard?.writeText(kp(d)).catch(()=>{})},[]),os=un==="denied"||un==="unsupported",lo=!!(Bt.version&&Bt.latestVersion&&mb(Bt.version,Bt.latestVersion)),Fn=M?.daemonId,rs=!!(Fn&&kl[Fn]),Ra=!!(Fn&&ya[Fn]);return c.jsxs("main",{className:Na,style:ns,children:[Ia?c.jsx("button",{"aria-label":oe.expandSessionSidebar,className:"sidebar-restore-button sidebar-restore-button-left",onClick:()=>va(!1),title:oe.expandSessionSidebar,type:"button",children:c.jsx(Cp,{"aria-hidden":"true"})}):c.jsxs(c.Fragment,{children:[c.jsx(C1,{activeSessionId:he,busy:ll,collapsedFolders:$i,directoryTags:nl,displayName:M?.displayName,folderCounts:ce,groupFolders:pa,groupedSessions:$t,hideArchived:at,inventoryVersion:Te,nextCursor:J,phase:Oe,respondingSessionIds:Rt,search:sn,sessionAgentFilter:Ut,sessionsCount:jn.length,sinceFilter:kt,statusText:nt,t:oe,visibleSessions:si,onLoadMore:d=>{it({append:!0,cursor:d})},onBrowseFolder:Rc,onCopyResumeCommand:Oc,pendingSessionIds:Aa,onCreateSession:d=>{bc(void 0,d)},onDeleteSession:d=>{Pu(d)},onEditFolderTags:zc,onOpenSessionDetails:Dc,onNewInFolder:(d,m)=>{bc(d,m)},onResetFilters:()=>{Fa("all"),bt("30d"),rl(!1),nc(!1)},onSearchChange:Ki,onSearchCommit:fc,onSelectSession:Ee,onToggleSessionArchived:d=>{ss(d,!d.archived)},onToggleSessionPinned:d=>{is(d,!d.pinned)},onSessionAgentFilterChange:Fa,onSinceFilterChange:bt,onViewChanges:yn,onToggleFolder:d=>lc(m=>({...m,[d]:!m[d]})),onToggleGroupFolders:()=>nc(d=>!d),onToggleHideArchived:()=>rl(d=>!d),onToggleCollapse:()=>va(!0)}),c.jsx("button",{"aria-label":"Resize session sidebar",className:"resize-handle",onPointerDown:ci("left"),title:"Resize session sidebar",type:"button",children:c.jsx("span",{})})]}),c.jsxs("section",{className:Fu,"aria-label":"Vibelet workspace",children:[c.jsx(y1,{activeSession:de,activeSessionId:he,activeModelOptions:ai,activeQueue:rc,activeUsage:ii,agent:Ue,approvalMode:nn,attachments:Ot,busy:ll,cwd:Ie,draft:bn,effort:vn,errorText:Ct,fastMode:ln,historyLoading:Vt,messages:Tt,model:lt,phase:Oe,quickReplies:Ul.quickReplies,renameTitle:He,respondingSessionIds:Rt,skills:Wi,uploadBusy:ma,detailsOpen:ac,t:oe,onApprovalModeChange:d=>{Nc(d)},onBrowseFiles:()=>{const d=de?.cwd||Ie||Gn;Hl("files"),An(d,{updateRoute:!0})},onCancelQueuedTurn:d=>{Yl(d)},onClearInterrupt:()=>{Ac("session.clearInterrupt")},onDraftChange:Zn,onDetailsOpenChange:ga,onEffortChange:ha,onExportActiveSession:()=>{eo()},onFastModeChange:me,onModelChange:da,onOpenRemoteFile:(d,m)=>{mi(d,m,{updateRoute:!0})},onRefreshSessions:()=>{it({force:!0})},onRenameSession:()=>{wa()},onRenameTitleChange:ht,onRemoveAttachment:d=>Xt(m=>m.filter(p=>p.path!==d)),onRestoreSnapshot:()=>{ls()},onRefreshSkills:()=>{Ea(de?.agent??Ue,Ie)},onSubmit:_a,onToggleArchived:()=>{Tc()},onTogglePinned:()=>{Cc()},onUploadFiles:Da,onViewChanges:yn}),fl?c.jsx("button",{"aria-label":oe.expandControlsSidebar,className:"sidebar-restore-button sidebar-restore-button-right",onClick:()=>zn(!1),title:oe.expandControlsSidebar,type:"button",children:c.jsx(Km,{"aria-hidden":"true"})}):c.jsxs(c.Fragment,{children:[c.jsx("button",{"aria-label":"Resize controls sidebar",className:"resize-handle right-resize-handle",onPointerDown:ci("right"),title:"Resize controls sidebar",type:"button",children:c.jsx("span",{})}),c.jsxs("aside",{className:"control-pane","aria-label":"Controls",children:[c.jsxs("div",{className:"control-pane-toolbar",children:[c.jsx(v1,{value:Ht,onChange:Hl}),c.jsx("button",{"aria-label":oe.collapseControlsSidebar,className:"sidebar-panel-collapse-button",onClick:()=>zn(!0),title:oe.collapseControlsSidebar,type:"button",children:c.jsx(Km,{"aria-hidden":"true"})})]}),Ht==="session"?c.jsx(A1,{activeApproval:al,activeQuestion:Jt,busy:ll,questionAnswers:Q,t:oe,onCancelQuestion:()=>{xc()},onQuestionChoice:jc,onRespondApproval:d=>{Wu(d)},onRespondQuestion:()=>{Sc()}}):null,Ht==="files"?c.jsx(j1,{busy:ll,cwd:Ie,directory:Kt,newDirName:ei,remoteFile:Xe,remoteFileConflict:uc,remoteFileMode:es,onCreateDirectory:()=>{cs()},onDirectoryPathChange:d=>Sn(m=>({...m,path:d,loaded:!1})),onDownloadRemoteFile:()=>{Ec()},onListDirectory:d=>{An(d,{updateRoute:!0})},onNewDirNameChange:Pi,onOpenRemoteFile:(d,m)=>{mi(d,m,{updateRoute:!0})},onRemoteFileModeChange:oc,onRemoteFileTextChange:d=>ti(m=>m&&{...m,text:d,dirty:!0}),onSaveRemoteFile:d=>{pi(d)}}):null,Ht==="admin"?c.jsxs(c.Fragment,{children:[c.jsx(E1,{pairing:M,phase:Oe,t:oe,onForgetPairing:to}),c.jsx(_1,{language:Ol.language,t:oe,onLanguageChange:Iu}),c.jsx(D1,{activeDaemonId:M?.daemonId,busy:ll,t:oe,targets:ot,onConnect:Wt,onForget:za}),c.jsx(w1,{notificationsBlocked:os,permission:un,settings:Sa,t:oe,onToggleEnabled:no}),c.jsx(T1,{busy:xa,connected:Oe==="connected",dismissed:Ra,feedback:ja,synced:rs,t:oe,onPull:()=>{yi("pull")},onPushMerge:()=>{yi("pushMerge")},onPushReplace:()=>{yi("pushReplace")},onSkip:Mc}),c.jsx(M1,{connected:Oe==="connected",metadata:Bt,restartBusy:ba.loading&&ba.action==="restart",showUpdate:lo,t:oe,updateBusy:ba.loading&&ba.action==="update",updateStatus:ba.statusText,onRestart:()=>{_c("restart")},onUpdate:()=>{_c("update")}})]}):null]})]})]}),tn?(()=>{const d=ee.find(p=>p.sessionId===tn),m=i.current;return!d||!m?null:c.jsx(z1,{client:m,sessionId:d.sessionId,sessionTitle:tl(d),onClose:()=>yn(null)})})():null]})}const iy="(max-width: 767px), (hover: none) and (pointer: coarse) and (max-width: 1024px)",lS={en:"https://vibelet.icu/#get-app",zh:"https://vibelet.icu/zh/#get-app"},aS="https://apps.apple.com/app/id6761245790",iS="https://www.feishu.cn/file/RUnbb7INMocEFjxj5AWcC7WEn6d",sS={en:{eyebrow:"Vibelet Web",title:"Use the Vibelet app on mobile",description:"The Web workspace is available for desktop browsers only. Install the mobile app, then pair it with the desktop connector on your computer.",primary:"Open app download page",ios:"App Store",android:"Android APK",desktopOnly:"Desktop browser only",desktopHint:"Open this Web link on a desktop browser to continue here.",pairingBefore:"Run",pairingAfter:"on your computer, then scan the QR code from the app."},zh:{eyebrow:"Vibelet Web",title:"手机端请使用 Vibelet App",description:"Web 工作台只面向桌面浏览器。请安装手机 App,再和电脑上的桌面连接器完成配对。",primary:"打开 App 下载页",ios:"App Store",android:"Android APK",desktopOnly:"仅支持桌面浏览器",desktopHint:"如果要继续使用 Web,请在桌面浏览器打开这个链接。",pairingBefore:"在电脑上运行",pairingAfter:"然后用 App 扫描二维码。"}};function cS(){return typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia(iy).matches}function uS(){try{return mf(ny().language)}catch{return mf("system")}}function oS(){const i=uS(),u=sS[i],r=lS[i];return c.jsx("main",{className:"mobile-app-gate","aria-labelledby":"mobile-app-gate-title",children:c.jsxs("section",{className:"mobile-app-panel",children:[c.jsxs("div",{className:"mobile-app-hero",children:[c.jsx("span",{className:"mobile-app-icon","aria-hidden":"true",children:c.jsx(ev,{})}),c.jsx("span",{className:"mobile-app-eyebrow",children:u.eyebrow}),c.jsx("h1",{id:"mobile-app-gate-title",children:u.title}),c.jsx("p",{children:u.description})]}),c.jsxs("div",{className:"mobile-app-actions",role:"group","aria-label":u.primary,children:[c.jsxs("a",{className:"mobile-app-primary-link",href:r,children:[c.jsx(Vi,{"aria-hidden":"true"}),c.jsx("span",{children:u.primary})]}),c.jsxs("a",{className:"mobile-app-secondary-link",href:aS,rel:"noopener noreferrer",target:"_blank",children:[c.jsx(Sf,{"aria-hidden":"true"}),c.jsx("span",{children:u.ios})]}),c.jsxs("a",{className:"mobile-app-secondary-link",download:!0,href:iS,children:[c.jsx(Vi,{"aria-hidden":"true"}),c.jsx("span",{children:u.android})]})]}),c.jsxs("div",{className:"mobile-app-note",children:[c.jsx(U0,{"aria-hidden":"true"}),c.jsxs("div",{children:[c.jsx("strong",{children:u.desktopOnly}),c.jsx("span",{children:u.desktopHint})]})]}),c.jsxs("p",{className:"mobile-app-footnote",children:[c.jsx("span",{children:u.pairingBefore}),c.jsx("code",{children:"npx vibelet"}),c.jsx("span",{children:u.pairingAfter})]})]})})}function rS(){const[i,u]=v.useState(cS);return v.useEffect(()=>{if(typeof window.matchMedia!="function")return;const r=window.matchMedia(iy),f=()=>u(r.matches);return f(),typeof r.addEventListener=="function"?(r.addEventListener("change",f),()=>r.removeEventListener("change",f)):(r.addListener(f),()=>r.removeListener(f))},[]),i?c.jsx(oS,{}):c.jsx(nS,{})}zg.createRoot(document.getElementById("root")).render(c.jsx(v.StrictMode,{children:c.jsx(rS,{})}));export{Lp as _,_g as a,c as j,v as r};
|