@evoscientist/webui 0.5.1 → 0.5.2
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/.next/BUILD_ID +1 -1
- package/dist/.next/build-manifest.json +3 -3
- package/dist/.next/prerender-manifest.json +3 -3
- package/dist/.next/required-server-files.json +4 -4
- package/dist/.next/server/app/_global-error.html +1 -1
- package/dist/.next/server/app/_global-error.rsc +1 -1
- package/dist/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dist/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/.next/server/app/_not-found.html +1 -1
- package/dist/.next/server/app/_not-found.rsc +1 -1
- package/dist/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/.next/server/app/api/evosci-config/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/memory/executions/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/memory/observations/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/settings/access/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/settings/test-key/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/skills/catalog/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/skills/detail/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/skills/install/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/skills/pinnable/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/workspace/download/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/workspace/file/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/workspace/instance/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/workspace/route.js.nft.json +1 -1
- package/dist/.next/server/app/api/workspace/upload/route.js.nft.json +1 -1
- package/dist/.next/server/app/index.html +1 -1
- package/dist/.next/server/app/index.rsc +3 -3
- package/dist/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/dist/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/dist/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/.next/server/app/page.js.nft.json +1 -1
- package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/chunks/[root-of-the-server]__09ze3np0m0d5y._.js +1 -1
- package/dist/.next/server/chunks/[root-of-the-server]__1bni1sdqr-38c._.js +1 -1
- package/dist/.next/server/middleware-build-manifest.js +3 -3
- package/dist/.next/server/pages/404.html +1 -1
- package/dist/.next/server/pages/500.html +1 -1
- package/dist/.next/server/preview-props.json +3 -3
- package/dist/.next/server/server-reference-manifest.js +1 -1
- package/dist/.next/server/server-reference-manifest.json +1 -1
- package/dist/.next/static/chunks/{315xo15wl1c8y.js → 42tm27w1hqki_.js} +1 -1
- package/dist/package.json +1 -1
- package/dist/server.js +1 -1
- package/package.json +1 -1
- /package/dist/.next/static/{dKCdqQepUYSBfzhd14eIS → DIwmoFkz8ncAZtUNBJr7V}/_buildManifest.js +0 -0
- /package/dist/.next/static/{dKCdqQepUYSBfzhd14eIS → DIwmoFkz8ncAZtUNBJr7V}/_clientMiddlewareManifest.js +0 -0
- /package/dist/.next/static/{dKCdqQepUYSBfzhd14eIS → DIwmoFkz8ncAZtUNBJr7V}/_ssgManifest.js +0 -0
|
@@ -18,6 +18,6 @@ ${t.map(e=>`- ${e.path}`).join("\n")}`:"",`${e}${n}`);return eL(a)?(Q.current={i
|
|
|
18
18
|
${j}`:Y,et=q?J.map(e=>`row:${e.id}`):[...Z.map(e=>`page:${e.word}`),...X.map(e=>`skill:${e.name}`),...Q?["marketplace"]:[]],en=et.length,er=!q&&Q?en-1:-1,ea=null!==V&&Y!==R,ei=ea||!!q,es=(0,eu.useRef)(ei);(0,eu.useLayoutEffect)(()=>{es.current=ei});let eo=q?W:ea&&en>0,el=q?.initial!==void 0&&""===j?Math.max(0,et.indexOf(`row:${q.initial}`)):0,ec=L.key===ee&&null!==L.row?et.indexOf(L.row):-1,ed=L.key!==ee?el:ec>=0?ec:Math.min(L.index,Math.max(en-1,0)),ep=eo?et[ed]:void 0,em=void 0===ep?void 0:"marketplace"===ep?g(null):ep.startsWith("page:")?b(ep.slice(5)):ep.startsWith("skill:")?g(ep.slice(6)):y(ep.slice(4)),ef=B&&null===I&&L.key===ee&&!!L.row?.startsWith("skill:"),eh=a?`/api/skills/pinnable?${new URLSearchParams({project:a})}`:"/api/skills/pinnable",eg=(0,eu.useCallback)(async()=>{let e=++z.current;try{let t=await fetch(eh,{cache:"no-store"});if(!t.ok)return null;let n=await t.json(),r=Array.isArray(n.skills)?n.skills:[];return e>H.current&&(H.current=e,G.current?.(new Set(r.map(e=>e.name)))),r}catch{return null}},[eh]);(0,eu.useEffect)(()=>{if(!ei)return;C(null),$(!0);let e=++U.current;eg().then(t=>{e===U.current&&($(!1),t&&C(t))})},[ei,A,eg]),(0,eu.useEffect)(()=>{c&&!es.current&&eg()},[c,A,eg]),(0,eu.useEffect)(()=>{null!==R&&R!==Y&&O(null)},[R,Y]),(0,eu.useEffect)(()=>{null!==L.key&&L.key!==ee&&D(OZ)},[L.key,ee]);let eb=(0,eu.useRef)(null),[ey,eE]=(0,eu.useState)(0),ex=(0,eu.useRef)(t),ev=(0,eu.useRef)(null);(0,eu.useLayoutEffect)(()=>{let n=ex.current;if(n===t)return;ex.current=t;let r=ev.current===t;ev.current=null;let a=e.current;if(r||null!==eb.current||null===E||!a||a.value!==t)return;let i=Math.min(t.length,Math.max(0,t.length-(n.length-E)));document.activeElement===a&&a.setSelectionRange(i,i),x(i)},[t,E,e]),(0,eu.useLayoutEffect)(()=>{let t=eb.current;null!==t&&(eb.current=null,e.current?.setSelectionRange(t,t),x(t))},[ey,e]);let ek=e=>{x(e),eb.current=e,eE(e=>e+1)},eS=()=>{P(null),F("")},eT=()=>{if(!M)return null;eS();let e=M.token;return e&&t===e.after?(n(t.slice(0,e.at)+e.text+t.slice(e.at)),ek(e.at+e.word.length),{key:`${e.at}:${e.word.slice(1)}`,row:`page:${M.word}`}):null},ew=!!M&&(!q||r),e_=(0,eu.useRef)(eT);(0,eu.useLayoutEffect)(()=>{e_.current=eT}),(0,eu.useEffect)(()=>{ew&&e_.current()},[ew]);let eA=()=>{let e=eT();D(e?{...e,index:0}:OZ)},eN=()=>{O(Y),D(OZ),i?.()},eI=e=>{if(q){let t=J[e];if(!t)return;eS(),D(OZ),t.run();return}let r=et[e];r&&("marketplace"===r?eN():r.startsWith("page:")?(e=>{if(!V)return;let r=V.end+OJ(t.slice(V.end)),a=t.slice(0,V.start)+t.slice(r);n(a),P({word:e,token:{at:V.start,text:t.slice(V.start,r),word:t.slice(V.start,V.end),after:a}}),F(""),D(OZ),ek(V.start)})(r.slice(5)):(e=>{if(!V)return;let n=V.end+OJ(t.slice(V.end)),r=t.slice(n),a=document.getElementById(g(e))?.getBoundingClientRect()??null;o(e,r,a),ek(V.start)})(r.slice(6)))},eC=(0,eu.useRef)({open:eo,onPage:!!q,filter:j,rows:et,count:en,active:ed,key:ee,marketplaceIndex:er,rootKey:Y,rereading:ef,choose:eI,back:eA});return(0,eu.useLayoutEffect)(()=>{eC.current={open:eo,onPage:!!q,filter:j,rows:et,count:en,active:ed,key:ee,marketplaceIndex:er,rootKey:Y,rereading:ef,choose:eI,back:eA}}),{onChange:e=>{k(!0),x(e.target.selectionStart),ev.current=e.target.value,M&&!w.current&&eS()},onKeyDown:(0,eu.useCallback)(e=>{let t=eC.current;if(!t.open||e.nativeEvent.isComposing||e.ctrlKey||e.metaKey||e.altKey)return!1;let n=e=>{if(0===t.count)return;let n=(t.active+e+t.count)%t.count;D({key:t.key,index:n,row:t.rows[n]})};if(t.onPage){if(1===e.key.length)F(t.filter+e.key);else if("Enter"===e.key)e.shiftKey||t.choose(t.active);else if("Delete"===e.key);else if(e.shiftKey)return!1;else if("ArrowDown"===e.key||"ArrowUp"===e.key)n("ArrowDown"===e.key?1:-1);else if("Tab"===e.key)t.choose(t.active);else if("ArrowLeft"===e.key||"Escape"===e.key)t.back();else{if("Backspace"!==e.key)return!1;t.filter?F(t.filter.slice(0,-1)):t.back()}return e.preventDefault(),!0}if(e.shiftKey)return!1;let r=t.rows[t.active]??"";if("ArrowDown"===e.key||"ArrowUp"===e.key)n("ArrowDown"===e.key?1:-1);else if("Enter"===e.key)t.rereading||t.choose(t.active);else if("Tab"===e.key&&t.active!==t.marketplaceIndex)t.rereading||t.choose(t.active);else if("ArrowRight"===e.key&&r.startsWith("page:"))t.rereading||t.choose(t.active);else{if("Escape"!==e.key)return!1;O(t.rootKey),D(OZ)}return e.preventDefault(),!0},[]),openPage:e=>{s.some(t=>t.word===e)&&(P({word:e,token:M?.token??null}),F(""),D(OZ))},closeMenu:()=>{M?eS():O(Y),D(OZ)},placeCaret:ek,textareaProps:{onSelect:e=>{null===eb.current&&x(e.currentTarget.selectionStart)},onFocus:e=>{k(!0),x(e.currentTarget.selectionStart),O(null),N(e=>e+1)},onBlur:()=>{k(!1),M?.token&&M.token.after.trim()?eS():eT()},onCompositionStart:e=>{w.current=!0,T(!0),M&&(_.current={value:t,caret:e.currentTarget.selectionStart})},onCompositionEnd:e=>{w.current=!1,T(!1),x(e.currentTarget.selectionStart);let t=_.current;if(_.current=null,!M||!t)return;let r=e.data??"",a=t.value.slice(0,t.caret)+r+t.value.slice(t.caret),i=e.currentTarget.value;i!==a&&i!==t.value?eS():(F(e=>e+OQ(r)),n(t.value),ek(t.caret))},onPaste:e=>{M&&(e.preventDefault(),F(t=>t+OQ(e.clipboardData.getData("text"))))},"aria-autocomplete":"list","aria-controls":eo?h:void 0,"aria-activedescendant":em},menuProps:{open:eo,listboxId:h,optionId:g,pageId:b,rowId:y,activeId:em,active:ed,view:q?{kind:"page",page:q,rows:J,filter:j}:{kind:"root",pages:Z,skills:X,marketplace:Q},skillsKnown:null!==I,onChoose:eI,onHover:e=>D({key:ee,index:e,row:et[e]??null}),onBack:eA,onBrowse:eN}}}({textareaRef:g,value:t6,setValue:e=>v(t5.lead+e),disabled:nr,project:e4,onBrowse:()=>n?.({view:"skills"}),pages:t8?[t8,nn]:[nn],commandWords:tQ,rootMenu:null===tl,leadSkill:t9?.kind==="skill"?t9.name:null,wantSkills:null===tl&&RY(x),onSkillsRead:S,onPickSkill:(e,t,n)=>{v(`/${e} ${t}`),w({name:e,rect:n})}}),ni=na.onKeyDown;(0,eu.useLayoutEffect)(()=>{L.current=()=>{g.current?.focus(),na.openPage("model")},D.current=()=>{"page"===na.menuProps.view.kind&&na.closeMenu()}});let ns="goal"===tl?"Set goal":"amend"===tl?"Amend goal":"Send",no=na.menuProps.open&&"page"===na.menuProps.view.kind&&"model"===na.menuProps.view.page.word,nl=na.menuProps.open&&"page"===na.menuProps.view.kind;(0,eu.useEffect)(()=>{var e;if(!tx||0===tx.length||!er||!tC)return;if(!(er&&O5()[er]?.initialized===!0))return void O8(er,tx.filter(e=>RI(e.liveStatus)).map(RT));if(!eV||eN||ts||tR.current||x.trim()||nl||q.length>0)return;let t=function(e){if(!e)return new Set;let t=O5()[e];return new Set(Array.isArray(t?.keys)?t.keys:[])}(er);for(let n of tx){if(!RI(n.liveStatus))continue;let r=RT(n);if(!t.has(r)){if(ek.some(e=>"human"===e.type&&R_(gj(e),n))){O7(er,r);continue}if(!eq())return;tR.current=!0,O7(er,r),eL(RA(n),{mode:"followup"}),e6.c.success(`Auto-reported ${Rk[e=n.agent_name]??e} to the main chat.`);break}}},[eV,eq,tx,tC,eN,ts,x,ek,eL,er,q,nl]);let nc=()=>{t9&&(I(t9),"skill"!==t9.kind&&O(null),v(t6),g.current?.focus())},nu=(0,eu.useCallback)(e=>{if(!ts&&!e.nativeEvent.isComposing&&229!==e.keyCode&&!ni(e)){if("Escape"===e.key&&tl||"Backspace"===e.key&&t9&&0===e.currentTarget.selectionStart&&0===e.currentTarget.selectionEnd){e.preventDefault(),nc();return}if("ArrowUp"===e.key&&0===x.length&&K.current.length>0){e.preventDefault();let t=K.current;tW(t[t.length-1].id);return}"Enter"!==e.key||e.shiftKey||(e.preventDefault(),tq())}},[tq,ts,x,t9,tl,tW,ni]),nd=(0,eu.useCallback)(e=>{v(e),requestAnimationFrame(()=>{let t=g.current;t&&(t.focus(),t.setSelectionRange(e.length,e.length))})},[]),np=(0,eu.useCallback)(e=>{v(e),requestAnimationFrame(()=>g.current?.focus())},[]),nm=iq(),nf=function({interrupt:e,deploymentUrl:t,apiKey:n}){let r,a=t?t.replace(/\/$/,""):null,i=Array.isArray(r=e?.value?.action_requests)?r:[],s=i.length>0?bc(e):null,o=null!==s&&void 0!==RO(e),l=JSON.stringify(i),c=o&&a?`${a}
|
|
19
19
|
${function(e){if(!e)return"";let t=5381;for(let n=0;n<e.length;n++)t=(t<<5)+t+e.charCodeAt(n)|0;return(t>>>0).toString(36)}(n)}
|
|
20
20
|
${s}
|
|
21
|
-
${l}`:null,[u,d]=(0,eu.useState)(null);return((0,eu.useEffect)(()=>{if(!c||!a||Lt.has(a))return;let e=JSON.parse(l),t=!1,r=new AbortController,i=setTimeout(()=>r.abort(),2e3),s=e=>{t||d({key:c,decisions:e})},o={"Content-Type":"application/json"};return n&&(o["X-Api-Key"]=n),fetch(`${a}/api/policy`,{method:"POST",headers:o,body:`{"action_requests":${l}}`,signal:r.signal}).then(async t=>404===t.status||405===t.status?(Lt.add(a),s(null)):t.ok?void s(function(e,t){if(!e||"object"!=typeof e)return null;let n=e.decisions;if(!Array.isArray(n)||0===n.length||n.length!==t.length)return null;let r=[];for(let e of n){if(!e||"object"!=typeof e)return null;let{type:t,message:n}=e;if("approve"===t)r.push({type:"approve"});else{if("reject"!==t)return null;r.push("string"==typeof n?{type:"reject",message:n}:{type:"reject"})}}return r}(await t.json(),e)):s(null)).catch(()=>s(null)).finally(()=>clearTimeout(i)),()=>{t=!0,clearTimeout(i),r.abort()}},[c,a,n,l]),s)?!c||!a||Lt.has(a)?{interruptKey:s,checking:!1,decisions:null}:u?.key===c?{interruptKey:s,checking:!1,decisions:u.decisions}:{interruptKey:s,checking:!0,decisions:null}:{interruptKey:null,checking:!1,decisions:null}}({interrupt:eO,deploymentUrl:nm.deploymentUrl,apiKey:nm.apiKey});!function({autoApprove:e,interrupt:t,resumeInterrupt:n,isLoading:r,resetKey:a,policy:i,canResumeNow:s=()=>!0}){let o=(0,eu.useRef)(new Set),l=(0,eu.useRef)(new Set),c=(0,eu.useRef)({resetKey:a,autoApprove:e});(0,eu.useEffect)(()=>{let t=c.current;(t.resetKey!==a||t.autoApprove!==e)&&(c.current={resetKey:a,autoApprove:e},o.current=new Set,t.resetKey!==a&&(l.current=new Set))},[a,e]);let u=i?.interruptKey??null,d=i?.checking??!1,p=i?.decisions??null;(0,eu.useEffect)(()=>{var a,i;if(r||d)return;let c=t?.value?.action_requests;if(!t||!Array.isArray(c)||0===c.length)return;let m=bc(t);if(null===m)return;let f=u===m?p:null,h=bZ(c,f,e);null===h||l.current.has(m)||null===f&&o.current.has(m)||s()&&(null!==f&&l.current.add(m),o.current.add(m),n((a=RO(t),i={decisions:h},a?{[a]:i}:i)))},[e,t,n,r,a,u,d,p,s])}({autoApprove:ea,interrupt:eV?eO:void 0,resumeInterrupt:eM,isLoading:eN,resetKey:er,policy:nf,canResumeNow:eq});let nh=(0,eu.useMemo)(()=>{let e=eO?.value;return e?.type==="ask_user"&&Array.isArray(e.questions)?e.questions:null},[eO]),ng=(0,eu.useCallback)(e=>{eM({status:"answered",answers:e})},[eM]),nb=(0,eu.useCallback)(()=>{eM({status:"cancelled"})},[eM]),ny=(0,eu.useMemo)(()=>{let e=eO?.value&&eO.value.action_requests;return Array.isArray(e)?e:[]},[eO]),nE=(0,eu.useMemo)(()=>RO(eO),[eO]),nx=ny.length>0&&(nf.checking||null!==bZ(ny,nf.decisions,ea)),nv=(0,eu.useCallback)(e=>{var t,n;return eM((t=nE,n=e,t?{[t]:n}:n))},[eM,nE]),nk=(0,eu.useMemo)(()=>{let e=new Map,t=new Set,n=ek.filter(e=>{if("human"===e.type){let n,r=(n=Rw(gj(e)))?`${n.taskId}:${n.runId||"legacy"}`:null;return!r||!t.has(r)&&(t.add(r),!0)}let n=ev.getMessagesMetadata(e)?.streamMetadata,r=n?.langgraph_checkpoint_ns;return!("string"==typeof r&&r.includes("|")||function(e){if("human"===e.type){var t;if("human"!==e.type)return!1;let n=e.additional_kwargs;return n?.lc_source==="summarization"}return"ai"===e.type&&!!(t=gj(e))&&(!!(/\bconversation that has been summarized\b/.test(t)||/\bHere is a summary of the conversation to date\b/.test(t)||/<summary>[\s\S]*<\/summary>/.test(t))||/##\s+SESSION INTENT\b/.test(t))}(e))}),r=new Set;for(let e of n){if("tool"!==e.type)continue;let t=e.tool_call_id;t&&r.add(t)}let a=new Map;for(let e of ny)a.set(e.name,(a.get(e.name)??0)+1);let i=-1;n.forEach((e,t)=>{"human"===e.type&&(i=t)}),n.forEach((t,n)=>{let s=n>i;if("ai"===t.type){let n=new Map,i=gF(t).map((e,t)=>({toolCall:e,sourceIndex:t})).filter(({toolCall:e})=>{if("string"!=typeof e.id||!e.id)return!0;let t=n.get(e.id);return t?(0===Object.keys(t.args).length&&Object.keys(e.args).length>0&&(t.args=e.args),!t.name&&e.name&&(t.name=e.name),!1):(n.set(e.id,e),!0)}).filter(({toolCall:e})=>"ToolSelectionResponse"!==e.name||eN&&!eO).map(({toolCall:e,sourceIndex:n})=>{let i=e.name||"unknown",o=e.id||`${t.id??"ai-message"}-tool-${n}-${i}`,l=a.get(i)??0,c=l>0&&s&&!r.has(o);return c&&a.set(i,l-1),{id:o,name:i,args:e.args,status:c?"interrupted":eI||!s?"stopped":"pending"}});e.set(t.id,{message:t,toolCalls:i})}else if("tool"===t.type){let n=t.tool_call_id;if(!n)return;for(let[,r]of e.entries()){let e=r.toolCalls.findIndex(e=>e.id===n);if(-1!==e){r.toolCalls[e]={...r.toolCalls[e],status:"error"===t.status?"error":"completed",result:gj(t)};break}}}else"human"===t.type&&e.set(t.id,{message:t,toolCalls:[]})});let s=Array.from(e.values());return s.map((e,t)=>{let n=t>0?s[t-1].message:null;return{...e,showAvatar:e.message.type!==n?.type,pinnedSkills:"human"===e.message.type&&null===gg(e.message)?function(e,t){let n=[];for(let r=t+1;r<e.length;r++){let t=gg(e[r].message);if(null===t)break;n.push(t)}return n.length>0?n:Lv}(s,t):Lv}})},[ek,ny,eO,eN,eI,ev]),nS=(0,eu.useMemo)(()=>Object.values(eU).some(e=>e.dispatches.length>0),[eU]),{value:nT}=ae(),nw=e=>{let t=e.content;if("string"==typeof t)return t.trim().length>0;if(Array.isArray(t))for(let e of t){let t=e?.text;if("string"==typeof t&&t.trim().length>0)return!0}return!1},n_=(0,eu.useMemo)(()=>{let e=[];for(let t of nk)if("ai"===t.message.type&&t.toolCalls.length>0&&!nw(t.message)){let n=e[e.length-1];n?.kind==="action-group"?n.items.push(t):e.push({kind:"action-group",items:[t]})}else e.push({kind:"message",data:t});return e},[nk]),nA=nk.length>0?nk[nk.length-1].message.id:void 0,nN=(0,eu.useMemo)(()=>{if(!e$)return null;let e=new Set(nk.map(e=>e.message.id));for(let t=e$.cutoffIndex;t<ek.length;t++){let n=ek[t]?.id;if(null!=n&&e.has(n))return n}return null},[e$,ek,nk]),nI={in_progress:eS.filter(e=>"in_progress"===e.status),pending:eS.filter(e=>"pending"===e.status),completed:eS.filter(e=>"completed"===e.status)},nC=eS.length>0,nR=Object.keys(eT).length>0,[nO,nL]=(0,eu.useState)(()=>new Set);(0,eu.useEffect)(()=>{0===ny.length&&nL(new Set)},[ny.length]);let nD=(0,eu.useCallback)(e=>{nL(t=>{let n=new Set(t);return n.add(e),n})},[]),nM=(0,eu.useMemo)(()=>{let e=eO?.value&&eO.value.review_configs;if(!Array.isArray(e))return new Map;let t=[];for(let n of e){let e=n.actionName??n.action_name;e&&t.push([e,{actionName:e,allowedDecisions:n.allowedDecisions??n.allowed_decisions}])}return new Map(t)},[eO]),nP=(0,eu.useMemo)(()=>{for(let e=nk.length-1;e>=0;e--){let t=nk[e];if("ai"===t.message.type)return t.toolCalls}return[]},[nk]),nj=(0,eu.useMemo)(()=>"fallback"==(0===ny.length?"none":RL(nP,ny).size===ny.length?"inline":"fallback"),[ny,nP]),nF=nj?Lm:ny,nU=(0,eu.useMemo)(()=>{let e=new Set(nP.filter(e=>"task"===e.name&&"completed"!==e.status&&"error"!==e.status).map(e=>gz(e.args)).filter(e=>null!==e));return 1===e.size?[...e][0]:null},[nP]);return(0,ec.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,ec.jsx)(rL,{open:es,onOpenChange:eo,children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Enable Auto-approve?"}),(0,ec.jsx)(rB,{children:"EvoScientist will run routine tool actions in this research without asking. Dangerous shell commands (piping downloads into an interpreter or network tool) are auto-rejected, delete is auto-approved, and schedule_task always asks first."})]}),(0,ec.jsxs)("div",{className:"flex items-start gap-3 rounded-lg border border-amber-300 bg-amber-50 p-3 text-sm text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100",children:[(0,ec.jsx)(le,{className:"mt-0.5 size-4 shrink-0","aria-hidden":"true"}),(0,ec.jsx)("p",{children:"Auto-approve stays on for this research only and follows it across views and reloads. Delete is included; scheduled tasks still show an approval card here."})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>eo(!1),children:"Cancel"}),(0,ec.jsx)(rQ,{onClick:tF,className:"bg-amber-600 text-white hover:bg-amber-700",children:"Enable Auto-approve"})]})]})}),(0,ec.jsx)("div",{className:"flex-1 overflow-y-auto overflow-x-hidden overscroll-contain",ref:eb,"data-chat-transcript":!0,children:(0,ec.jsx)("div",{className:"mx-auto w-full max-w-[960px] px-4 pb-4 pt-3 sm:px-5",ref:ey,children:eR?(0,ec.jsx)("div",{className:"flex items-center justify-center p-8",children:(0,ec.jsx)("p",{className:"text-muted-foreground",children:"Loading…"})}):(0,ec.jsxs)(ec.Fragment,{children:[0===nk.length&&!eN&&!ts&&(0,ec.jsxs)("div",{className:"flex min-h-[42vh] flex-col items-center justify-center px-3 pt-12 text-center sm:pt-16",children:[(0,ec.jsx)("h2",{className:"text-pretty text-lg font-semibold sm:text-xl",children:"Where research evolves"}),(0,ec.jsx)("p",{className:"mt-2 max-w-lg text-sm text-muted-foreground",children:"Your self-evolving lab partner — reads the literature, runs experiments, and remembers what matters."}),(0,ec.jsx)("div",{className:"mt-4 flex max-w-2xl flex-wrap justify-center gap-2",children:Lf.map(e=>(0,ec.jsx)("button",{type:"button",onClick:()=>np(e),className:"max-w-full rounded-full border border-border bg-card px-2.5 py-1.5 text-xs text-foreground shadow-sm transition-colors hover:border-[var(--color-border)] hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring sm:text-sm",children:e},e))}),n&&r&&(0,ec.jsx)(OE,{onNavigate:n,onOpenThread:r})]}),n_.map((e,t)=>{if("action-group"===e.kind){let n=e.items[e.items.length-1].message.id,r=t===n_.length-1,a=eN&&r&&n===nA;return(0,ec.jsx)(Os,{items:e.items,isStreaming:a,defaultCollapsed:nT,isAtBottom:ex,lastMessageId:nA,isLoading:eN||!eV,actionRequests:tP?nF:[],submittedActionRequestKeys:nO,onActionRequestSubmitted:nD,reviewConfigsMap:nM,stream:ev,onResumeInterrupt:nv,graphId:eG,onEditMessage:nd,autoApprove:ea,approvalAutoResolves:nx,subAgentSteps:tA,ui:e_,compactionAnchorId:nN,summarizationEvent:e$??null},`action-group-${e.items[0].message.id}`)}let n=e.data,r=e_?.filter(e=>e.metadata?.message_id===n.message.id),a=t===n_.length-1,i="human"!==n.message.type,s=nN===n.message.id;return(0,ec.jsxs)(eu.default.Fragment,{children:[s&&e$&&(0,ec.jsx)(Oi,{content:e$.content,summarizedCount:e$.cutoffIndex}),(0,ec.jsx)(Or,{message:n.message,toolCalls:n.toolCalls,isLoading:eN||!eV,isStreaming:eN&&a&&i,actionRequests:a&&tP?nF:void 0,submittedActionRequestKeys:nO,onActionRequestSubmitted:nD,reviewConfigsMap:a?nM:void 0,ui:r,stream:ev,onResumeInterrupt:nv,graphId:eG,onEditMessage:nd,autoApprove:ea,approvalAutoResolves:nx,subAgentSteps:tA,pinnedSkills:n.pinnedSkills})]},n.message.id)}),e$&&!nN&&(0,ec.jsx)(Oi,{content:e$.content,summarizedCount:e$.cutoffIndex}),nj&&tP&&(0,ec.jsx)(O_,{actionRequests:ny,reviewConfigsMap:nM??new Map,requestedBy:nU,interruptKey:nE,onResume:nv,isLoading:eN||nf.checking||!eV}),nh&&tP&&(0,ec.jsx)("div",{className:"mt-4",children:(0,ec.jsx)(OR,{questions:nh,onSubmit:ng,onCancel:nb,isLoading:eN||!eV},`ask-user-${nE??gP(nh,0)}`)})]})})}),(0,ec.jsxs)("div",{className:"relative flex-shrink-0 bg-background",children:[!ex&&nk.length>0&&(0,ec.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:e=>{eE(),0===e.detail&&g.current?.focus({preventScroll:!0})},"aria-label":"Jump to latest message",title:"Jump to latest message",className:"absolute bottom-full left-1/2 z-10 mb-3 flex h-9 w-9 -translate-x-1/2 items-center justify-center rounded-full border border-border bg-card text-foreground shadow-md transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring max-md:h-11 max-md:w-11",children:(0,ec.jsx)(bv,{className:"h-4 w-4","aria-hidden":"true"})}),q.length>0&&(0,ec.jsx)("div",{"aria-label":"Queued messages",className:"relative mx-auto -mb-4 w-[calc(100%-16px)] max-w-[960px] px-2 sm:w-[calc(100%-24px)]",children:(0,ec.jsx)("div",{className:"rounded-b-lg rounded-t-2xl border border-border bg-background pb-5 pt-1 shadow-sm",children:q.map((e,t)=>{let n=x.trim().length>0||P.length>0,r=RJ(e.text,{skills:k,goals:!0===e0,commands:new Set(tQ)});return(0,ec.jsxs)("div",{onDragOver:e=>e.preventDefault(),onDrop:()=>tK(e.id),className:"relative flex min-h-11 items-start gap-1.5 px-2 py-2 text-sm sm:gap-2 sm:px-3",children:[(0,ec.jsx)("button",{type:"button",draggable:!0,onDragStart:t=>{en.current=e.id,t.dataTransfer.effectAllowed="move",t.dataTransfer.setData("text/plain",String(e.id))},onDragEnd:()=>{en.current=null},onKeyDown:n=>{"ArrowUp"===n.key&&t>0&&(n.preventDefault(),tY(e.id,-1)),"ArrowDown"===n.key&&t<q.length-1&&(n.preventDefault(),tY(e.id,1))},"aria-label":`Reorder queued message ${t+1} of ${q.length}`,title:"Drag to reorder, or use the arrow keys",className:"mt-0.5 inline-flex size-5 shrink-0 cursor-grab items-center justify-center rounded text-muted-foreground/60 focus-visible:ring-2 focus-visible:ring-ring active:cursor-grabbing",children:(0,ec.jsx)(mb,{className:"size-3.5","aria-hidden":"true"})}),(0,ec.jsx)(bI,{className:"mt-0.5 size-4 shrink-0 text-muted-foreground","aria-hidden":"true"}),(0,ec.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-0.5",children:[(0,ec.jsxs)("span",{className:"line-clamp-2 whitespace-pre-wrap break-words pt-0.5 text-foreground",children:[r.chip&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"sr-only",children:r.lead}),(0,ec.jsx)("span",{"aria-hidden":"true",className:"select-none",children:(0,ec.jsx)(R5,{chip:r.chip,className:"mr-1.5 h-5 align-middle"})})]}),e.text.slice(r.lead.length)]}),e.files.length>0&&(0,ec.jsxs)("span",{className:"inline-flex items-center gap-1 text-xs text-muted-foreground",children:[(0,ec.jsx)(bN,{className:"size-3 shrink-0","aria-hidden":"true"}),e.files.length," file",1===e.files.length?"":"s"]})]}),(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5",children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>tV(e.id),"aria-label":"Steer with this message next",title:"Submit next without interrupting the current turn",className:"inline-flex h-7 items-center gap-1 rounded-full px-2 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)(bI,{className:"size-3.5","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden sm:inline",children:"Steer"})]}),(0,ec.jsx)("button",{type:"button",onClick:()=>tX(e.id),"aria-label":"Remove queued message",title:"Remove from queue",className:"inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(fz,{className:"size-3.5","aria-hidden":"true"})}),(0,ec.jsxs)("details",{className:"group/menu relative",onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||e.currentTarget.removeAttribute("open")},onKeyDown:e=>{"Escape"===e.key&&(e.currentTarget.removeAttribute("open"),e.currentTarget.querySelector("summary")?.focus())},children:[(0,ec.jsx)("summary",{"aria-label":"More queued message actions",title:"More actions",className:"inline-flex size-7 cursor-pointer list-none items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden",children:(0,ec.jsx)(fD,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("div",{className:"absolute right-0 top-8 z-30 min-w-40 rounded-xl border border-border bg-background p-1.5 shadow-lg",children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>tW(e.id),disabled:n,className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-2 text-left text-sm text-foreground transition-colors hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-40",children:[(0,ec.jsx)(fM,{className:"size-4","aria-hidden":"true"}),"Edit message"]}),(0,ec.jsxs)("button",{type:"button",onClick:tZ,className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-2 text-left text-sm text-foreground transition-colors hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)(bC,{className:"size-4","aria-hidden":"true"}),"Close queue"]})]})]})]})]},e.id)})})}),(0,ec.jsxs)("div",{ref:y,"data-mode":tl??void 0,className:rO("relative z-10 mx-auto mb-2 flex w-[calc(100%-16px)] max-w-[960px] flex-shrink-0 flex-col overflow-hidden rounded-xl border bg-background transition-[color,background-color,border-color,box-shadow] duration-200 ease-in-out sm:mb-4 sm:w-[calc(100%-24px)]","focus-within:ring-2 focus-within:ring-ring",tl?"border-[var(--brand)] shadow-[0_0_0_3px_color-mix(in_srgb,var(--brand)_16%,transparent)]":"border-border"),children:[(0,ec.jsxs)("div",{className:"flex max-h-60 flex-col overflow-y-auto border-b border-border bg-sidebar empty:hidden sm:max-h-72",children:[!m&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(OT,{workflows:eU,expanded:!1,onClick:()=>f(e=>"workflow"===e?null:"workflow")}),(o=eS.find(e=>"in_progress"===e.status),c=(l=eS.length)-nI.pending.length,u=l===c,d=nC?(0,ec.jsx)("button",{type:"button",onClick:()=>f(e=>"tasks"===e?null:"tasks"),className:"grid w-full cursor-pointer grid-cols-[auto_auto_1fr] items-center gap-2.5 px-3 py-2.5 text-left sm:px-4","aria-expanded":"tasks"===m,children:u?[(0,ec.jsx)(bk,{size:16,className:"text-[var(--color-success)]"},"icon"),(0,ec.jsx)("span",{className:"ml-[1px] min-w-0 truncate text-sm",children:"All tasks completed"},"label")]:null!=o?[(0,ec.jsx)("div",{children:LN(o.status)},"icon"),(0,ec.jsxs)("span",{className:"ml-[1px] min-w-0 truncate text-sm",children:["Task"," ",l-nI.pending.length," ","of ",l]},"label"),(0,ec.jsx)("span",{className:"min-w-0 gap-2 truncate text-sm text-muted-foreground",children:o.content},"content")]:[(0,ec.jsx)(bS,{size:16,className:"text-[var(--color-text-tertiary)]"},"icon"),(0,ec.jsxs)("span",{className:"ml-[1px] min-w-0 truncate text-sm",children:["Task"," ",l-nI.pending.length," of"," ",l]},"label")]}):null,p=nR?(0,ec.jsxs)("button",{type:"button",onClick:()=>f(e=>"files"===e?null:"files"),className:"flex flex-shrink-0 cursor-pointer items-center gap-2 px-3 py-2.5 text-left text-sm sm:px-4","aria-expanded":"files"===m,children:[(0,ec.jsx)(bT,{size:16}),"Files (State)",(0,ec.jsx)("span",{className:"h-4 min-w-4 rounded-full bg-[var(--brand-solid)] px-0.5 text-center text-[10px] leading-[16px] text-[var(--brand-foreground)]",children:Object.keys(eT).length})]}):null,nC||nR?(0,ec.jsxs)("div",{className:"flex items-center",children:[(0,ec.jsx)("div",{className:"min-w-0 flex-1",children:d}),p]}):null)]}),m&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)("div",{className:"sticky top-0 flex items-stretch bg-sidebar text-sm",children:[nC&&(0,ec.jsx)("button",{type:"button",className:"py-2.5 pr-4 first:pl-3 aria-expanded:font-semibold sm:first:pl-4",onClick:()=>f(e=>"tasks"===e?null:"tasks"),"aria-expanded":"tasks"===m,children:"Tasks"}),nR&&(0,ec.jsxs)("button",{type:"button",className:"inline-flex items-center gap-2 py-2.5 pr-4 first:pl-3 aria-expanded:font-semibold sm:first:pl-4",onClick:()=>f(e=>"files"===e?null:"files"),"aria-expanded":"files"===m,children:["Files (State)",(0,ec.jsx)("span",{className:"h-4 min-w-4 rounded-full bg-[var(--brand-solid)] px-0.5 text-center text-[10px] leading-[16px] text-[var(--brand-foreground)]",children:Object.keys(eT).length})]}),nS&&(0,ec.jsx)("button",{type:"button",className:"py-2.5 pr-4 first:pl-3 aria-expanded:font-semibold sm:first:pl-4",onClick:()=>f(e=>"workflow"===e?null:"workflow"),"aria-expanded":"workflow"===m,children:"Workflow"}),(0,ec.jsx)("button",{"aria-label":"Close",className:"flex-1",onClick:()=>f(null)})]}),(0,ec.jsxs)("div",{ref:h,className:"px-3 sm:px-4",children:["tasks"===m&&Object.entries(nI).filter(([e,t])=>t.length>0).map(([e,t])=>(0,ec.jsxs)("div",{className:"mb-4",children:[(0,ec.jsx)("h3",{className:"mb-1 text-[10px] font-semibold uppercase tracking-wider text-tertiary",children:{pending:"Pending",in_progress:"In Progress",completed:"Completed"}[e]}),(0,ec.jsx)("div",{className:"grid grid-cols-[auto_1fr] gap-3 rounded-sm p-1 pl-0 text-sm",children:t.map((t,n)=>(0,ec.jsxs)(eu.Fragment,{children:[LN(t.status,"mt-0.5"),(0,ec.jsx)("span",{className:"break-words text-inherit",children:t.content})]},`${e}_${t.id}_${n}`))})]},e)),"files"===m&&(0,ec.jsx)("div",{className:"mb-6",children:(0,ec.jsx)(Ld,{files:eT})}),"workflow"===m&&(0,ec.jsx)(Ow,{workflows:eU,expertNames:tE})]})]})]}),ea&&(0,ec.jsxs)("div",{"aria-live":"polite",className:"flex items-center justify-between gap-3 border-b border-amber-300 bg-amber-50 px-3 py-2 text-xs text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100",children:[(0,ec.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,ec.jsx)(le,{className:"size-3.5 shrink-0","aria-hidden":"true"}),"Tool actions auto-run, including delete. Dangerous commands are blocked; scheduled tasks still ask."]}),(0,ec.jsx)("button",{type:"button",onClick:tU,"aria-label":"Turn off auto-approve",className:"shrink-0 rounded px-2 py-1 font-semibold transition-colors hover:bg-amber-200 focus-visible:ring-2 focus-visible:ring-amber-700 dark:hover:bg-amber-900",children:"Turn Off"})]}),(tD||tv>0||ty.length>0)&&(0,ec.jsxs)("div",{className:"flex items-center gap-1.5 border-t border-border px-3 py-1.5 text-xs text-muted-foreground",children:[tD&&(0,ec.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>no?na.closeMenu():L.current(),disabled:nr,"aria-haspopup":"listbox","aria-expanded":no,title:"Click to change model for this chat","aria-label":"Change model for this chat",className:"-mx-1 flex min-w-0 items-center gap-1.5 rounded px-1 py-0.5 transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60 disabled:hover:bg-transparent",children:[(0,ec.jsx)(bA,{className:"size-3.5 shrink-0 text-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)(OD,{text:tD.name,className:"truncate font-medium text-foreground"}),tD.provider&&(0,ec.jsx)(OD,{text:`\xb7 ${tD.provider}`,className:"hidden shrink-0 sm:inline"})]}),(0,ec.jsx)(OO,{teams:ty,onManage:()=>n?.({view:"experts"})}),(0,ec.jsx)(Oj,{goal:eZ,busy:eQ,verdict:eJ,open:V,onOpenChange:Y}),tv>0&&(0,ec.jsxs)("button",{type:"button",onClick:e,title:`${tv} background agent${1===tv?"":"s"} running — click to view`,"aria-label":`${tv} background agent${1===tv?"":"s"} running — view`,className:"ml-auto flex shrink-0 items-center gap-1.5 rounded px-1.5 py-0.5 font-medium text-[var(--brand)] transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)("span",{className:"size-2 animate-pulse rounded-full bg-[var(--color-warning)]","aria-hidden":"true"}),tv," agent",1===tv?"":"s"]})]}),tn&&(0,ec.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-border px-3 py-2 text-xs text-muted-foreground",children:[(0,ec.jsxs)("span",{className:"min-w-0 truncate",children:[i2(tn)," isn't a project on this backend."]}),(0,ec.jsx)(rQ,{type:"button",variant:"outline",size:"sm",onClick:()=>tt(tn),children:"Add this folder as a project"})]}),(0,ec.jsxs)("form",{onSubmit:tq,className:"mobile-composer flex flex-col",children:[P.length>0&&(0,ec.jsxs)("div",{"aria-label":"Attached files",className:"flex flex-wrap gap-2 border-b border-border px-3 py-2",children:[P.map(e=>(0,ec.jsxs)("span",{className:"inline-flex max-w-full items-center gap-1.5 rounded-md border border-border bg-muted px-2 py-1 text-xs text-foreground",children:[(0,ec.jsx)(bT,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"max-w-48 truncate",title:e.path,children:e.name}),(0,ec.jsx)("button",{type:"button",onClick:()=>t$(e),"aria-label":`Remove ${e.name} from this message`,title:`Remove ${e.name} from this message`,className:"rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(n1,{className:"size-3.5","aria-hidden":"true"})})]},Lh(e))),e7&&(0,ec.jsx)("p",{className:"w-full text-xs text-muted-foreground",children:"Attached in another project: remove them to send here."})]}),(0,ec.jsxs)("div",{onMouseDown:e=>{e.target===e.currentTarget&&(e.preventDefault(),g.current?.focus())},className:rO("flex min-w-0 cursor-text items-start transition-colors duration-200",(t9||_)&&"pl-3.5 sm:pl-4",tl&&"bg-[color-mix(in_srgb,var(--brand-soft)_70%,transparent)]"),children:[_&&(0,ec.jsx)(R5,{chip:_.chip,leaving:!0,onLeft:()=>A(null),className:"mr-2 mt-3"},_.seq),t9&&(0,ec.jsx)(R5,{chip:t9,onRemove:nc,disabled:nr,flyFrom:"skill"===t9.kind&&T?.name===t9.name&&T!==C.current?T.rect:null,className:"mr-2 mt-3"},"skill"===t9.kind?t9.name:t9.kind),t9&&(0,ec.jsx)("span",{id:b,className:"sr-only",children:"skill"===t9.kind?`Skill ${t9.name} pinned. Backspace at the start removes it.`:"goal"===t9.kind?"Setting a goal: what you write is the goal. Escape leaves goal mode.":"Amending the goal: what you write is the change. Escape leaves amend mode."}),(0,ec.jsx)("textarea",{ref:g,value:t6,onChange:e=>{let t=e.target.value;if(!(!tl&&null===RZ(t6,tJ).chip&&null!==RZ(t,tJ).chip)){let n=t5.lead+t;v(n),t1(null===k&&RY(n)?n:null),na.onChange(e);return}let n=RQ(t,tJ),r=n.slice(RZ(n,tJ).lead.length);n!==t&&(t2.current=t.slice(0,t.length-n.length)),v(n),na.onChange(e),na.placeCaret(Math.max(0,(e.target.selectionStart??t.length)-(t.length-r.length)))},onKeyDown:nu,...na.textareaProps,"aria-describedby":t9?b:void 0,"aria-label":"Message",disabled:nr,placeholder:"readOnly"===eW.kind?eW.reason:!eV&&U?B?`Can't read the backend's projects (${B}). Retrying…`:"Connecting to the backend…":ts?"Respond to the request above to continue…":"goal"===tl?"Describe the goal; its criteria are drafted for you to review…":"amend"===tl?"What should change in the goal?":eN?"Queue a follow-up — sends when this turn finishes…":t9?"Add your message…":"Ask EvoScientist anything…",className:rO("font-inherit field-sizing-content max-h-[min(30dvh,12rem)] min-h-12 min-w-0 flex-1 resize-none overflow-y-auto border-0 bg-transparent pb-2.5 pr-3.5 pt-3 text-sm leading-6 text-primary outline-none placeholder:text-tertiary focus:ring-0 disabled:cursor-not-allowed sm:pr-4",t9||_?"pl-0":"pl-3.5 sm:pl-4"),rows:1})]}),(0,ec.jsx)(OK,{...na.menuProps,anchorRef:y}),(0,ec.jsxs)("div",{className:"flex items-center justify-between gap-2 p-2 sm:p-2.5",children:[(0,ec.jsxs)("div",{className:"flex items-center gap-1",children:[(0,ec.jsx)("input",{ref:E,type:"file",multiple:!0,onChange:tB,disabled:!eV||!e5||ts||H,className:"hidden"}),(0,ec.jsx)("button",{type:"button",onClick:()=>E.current?.click(),disabled:!eV||!e5||ts||H,"aria-label":"Upload files to workspace",title:"Upload files to workspace (max 50 MB each)",className:"inline-flex size-8 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",children:(0,ec.jsx)(bN,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("button",{type:"button",onClick:()=>ea?tU():eo(!0),"aria-pressed":ea,"aria-label":ea?"Turn off auto-approve":"Auto-approve",title:"Auto-approve all tool actions in this conversation",className:rO("inline-flex items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium transition-colors",ea?"bg-amber-600 text-white hover:bg-amber-700":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:[(0,ec.jsx)(b_,{className:"size-3.5","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden min-[360px]:inline",children:ea?"Auto-approve On":"Auto-approve"})]}),e9&&te.length>1?(0,ec.jsxs)(dg,{modal:!1,children:[(0,ec.jsx)(dy,{asChild:!0,children:(0,ec.jsxs)("button",{type:"button","aria-label":`Project: ${e9.name}. Change project`,title:`Project: ${e9.full}`,className:"inline-flex min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:bg-accent",children:[(0,ec.jsx)(bw,{className:"size-3.5 flex-shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden max-w-[140px] truncate font-mono sm:inline lg:max-w-[220px]",children:e9.name}),(0,ec.jsx)(lA,{className:"size-3 flex-shrink-0","aria-hidden":"true"})]})}),(0,ec.jsxs)(dA,{align:"start",className:"max-w-[min(20rem,90vw)]",children:[(0,ec.jsx)(dS,{value:eY??"",onValueChange:e=>z(e,{remember:!0}),children:te.map(e=>(0,ec.jsxs)(dC,{value:e.key,disabled:e.missing,title:e.key,children:[(0,ec.jsx)("span",{className:"truncate",children:e.name}),e.missing&&(0,ec.jsx)("span",{className:"ml-auto text-[11px] text-muted-foreground",children:"folder missing"})]},e.key))}),(0,ec.jsx)(dI,{}),(0,ec.jsxs)(dN,{onSelect:()=>tt(),children:[(0,ec.jsx)(fO,{className:"size-3.5","aria-hidden":"true"}),"Add project…"]}),n&&(0,ec.jsx)(ec.Fragment,{children:(0,ec.jsxs)(dN,{onSelect:()=>n({view:"workspace"}),children:[(0,ec.jsx)(bw,{className:"size-3.5","aria-hidden":"true"}),a?"Hide files":"Show files"]})})]})]}):n&&e9?(0,ec.jsxs)("button",{type:"button",onClick:()=>n({view:"workspace"}),title:`${a?"Close":"Open"} workspace: ${e9.full}`,"aria-label":`${a?"Close":"Open"} workspace: ${e9.full}`,"aria-pressed":!!a,className:"inline-flex min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)(bw,{className:"size-3.5 flex-shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden max-w-[140px] truncate font-mono sm:inline lg:max-w-[220px]",children:e9.name})]}):null]}),(0,ec.jsx)("div",{className:"flex justify-end gap-2",children:(0,ec.jsx)(rQ,{type:eN?"button":"submit",variant:eN?"destructive":"default",onClick:eN?eD:tq,onMouseDown:e=>e.preventDefault(),disabled:!eN&&(tM||H||e7||!x.trim()),"aria-label":eN?"Stop generating":tl?ns:"Send message",children:eN?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(bE,{size:14}),(0,ec.jsx)("span",{className:"hidden sm:inline",children:"Stop"})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(bx,{size:18}),(0,ec.jsx)(OD,{text:ns,className:"hidden sm:inline"})]})})})]})]})]})]})]})});LI.displayName="ChatInterface";let LC=n0("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),LR=eu.default.memo(({skill:e,preferExpert:t,onClose:n})=>{let[r,a]=(0,eu.useState)(null),[i,s]=(0,eu.useState)(!1),[o,l]=(0,eu.useState)(null);if((0,eu.useEffect)(()=>{if(!e)return;let t=!1;return a(null),l(null),s(!0),fetch(`/api/skills/detail?name=${encodeURIComponent(e.name)}`).then(async e=>{let t=await e.json().catch(()=>null);if(!e.ok)throw Error(t?.error||`Failed to load (${e.status})`);return t}).then(e=>{t||a(e)}).catch(e=>{t||l(e.message??"Failed to load skill detail.")}).finally(()=>{t||s(!1)}),()=>{t=!0}},[e]),!e)return null;let c=r?.title??e.title,u=r?.version??e.version,d=r?.description??e.description,p=r?.installed??e.installed,m=t&&r?.expertBody||r?.body;return(0,ec.jsx)(rL,{open:!0,onOpenChange:n,children:(0,ec.jsxs)(rP,{"aria-describedby":void 0,className:"flex h-[80vh] max-h-[80vh] min-w-[60vw] flex-col p-6",children:[(0,ec.jsx)(rU,{className:"sr-only",children:c}),(0,ec.jsxs)("div",{className:"mb-3 flex items-start gap-3 border-b border-border pb-4",children:[(0,ec.jsx)(fU,{className:"mt-1 size-6 shrink-0 text-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)("div",{className:"min-w-0 flex-1",children:(0,ec.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-0.5",children:[(0,ec.jsx)("h2",{className:"break-words text-lg font-semibold",children:c}),u&&(0,ec.jsxs)("span",{className:"font-mono text-xs text-muted-foreground",children:["v",u]}),null!=e.fileCount&&(0,ec.jsxs)("span",{className:"text-xs text-muted-foreground",children:["· ",e.fileCount," file",1===e.fileCount?"":"s"]}),p&&(0,ec.jsxs)("span",{className:"bg-[var(--brand)]/10 inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium text-[var(--brand)]",children:[(0,ec.jsx)(LC,{className:"size-3","aria-hidden":"true"}),"Installed"]})]})})]}),(0,ec.jsx)(hp,{className:"min-h-0 flex-1",children:(0,ec.jsxs)("div",{className:"pr-3",children:[(0,ec.jsx)("p",{className:"whitespace-pre-wrap text-sm leading-relaxed text-foreground",children:d||"No description."}),(0,ec.jsx)("div",{className:"mt-4 border-t border-border pt-4",children:i?(0,ec.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading skill contents…"]}):o?(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:o}):m?(0,ec.jsx)(Rp,{content:m}):(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"No additional contents."})})]})})]})})});LR.displayName="SkillDetailDialog";let LO=n0("circle-arrow-up",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]);function LL({title:e,description:t,meta:n,installed:r,installedVersion:a,latestVersion:i,updateAvailable:s,busy:o,onOpen:l,onInstall:c,onUpdate:u,onUninstall:d,actions:p,icon:m=fU}){let f=r?a&&`v${a}`:i&&`v${i}`;return(0,ec.jsxs)("div",{className:"flex flex-col rounded-lg border border-border bg-card p-3",children:[(0,ec.jsxs)("button",{type:"button",onClick:l,className:"-m-1 flex items-start gap-2.5 rounded-md p-1 text-left transition-colors hover:bg-muted/50 focus-visible:ring-2 focus-visible:ring-ring",title:"View details",children:[(0,ec.jsx)(m,{className:"mt-0.5 size-5 shrink-0 text-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-0.5",children:[(0,ec.jsx)("h3",{className:"break-words text-lg font-medium leading-tight",children:e}),f&&(0,ec.jsx)("span",{className:"shrink-0 font-mono text-xs text-muted-foreground",children:f}),n&&(0,ec.jsxs)("span",{className:"shrink-0 text-xs text-muted-foreground",children:["· ",n]})]}),(0,ec.jsx)("p",{className:"mt-1 line-clamp-2 text-sm leading-6 text-muted-foreground",children:t||"No description."})]})]}),(0,ec.jsxs)("div",{className:"mt-2.5 flex flex-wrap items-center justify-end gap-2",children:[p,r&&s&&(0,ec.jsxs)("button",{type:"button",onClick:u,disabled:!!o,className:"inline-flex items-center gap-1.5 rounded-md bg-[var(--brand-solid)] px-2.5 py-1 text-xs font-medium text-[var(--brand-foreground)] transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",title:i?`Update to v${i}`:"Update",children:["update"===o?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(LO,{className:"size-3.5","aria-hidden":"true"}),"update"===o?"Updating…":i?`Update → v${i}`:"Update"]}),r?d?(0,ec.jsxs)("button",{type:"button",onClick:d,disabled:!!o,className:"inline-flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-muted-foreground transition-colors hover:border-destructive/40 hover:bg-destructive/10 hover:text-destructive focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:["uninstall"===o?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(fz,{className:"size-3.5","aria-hidden":"true"}),"uninstall"===o?"Removing…":"Uninstall"]}):null:(0,ec.jsxs)("button",{type:"button",onClick:c,disabled:!!o,className:"inline-flex items-center gap-1.5 rounded-md bg-[var(--brand-solid)] px-2.5 py-1 text-xs font-medium text-[var(--brand-foreground)] transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:["install"===o?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(fC,{className:"size-3.5","aria-hidden":"true"}),"install"===o?"Installing…":"Install"]})]})]})}let LD=(0,ec.jsx)("span",{className:"shrink-0 rounded-full border border-[var(--brand)] bg-[var(--brand-soft)] px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-[var(--brand)]",title:"Installed — the orchestrator can dispatch it",children:"Active"});function LM(){let{teams:e,refresh:t}=by(sd().current?.key??null),[n,r]=(0,eu.useState)([]),[a,i]=(0,eu.useState)([]),[s,o]=(0,eu.useState)(null),[l,c]=(0,eu.useState)(null),[u,d]=(0,eu.useState)(!0),[p,m]=(0,eu.useState)({}),[f,h]=(0,eu.useState)(null),g=(0,eu.useRef)(0),[b,y]=(0,eu.useState)(null),E=(0,eu.useCallback)(async(e=!1)=>{let t=++g.current;d(!0);let[n,a]=await Promise.allSettled([fetch(`/api/skills/catalog${e?"?refresh=1":""}`).then(async e=>{let t=await e.json();if(!e.ok)throw Error(t?.error||`HTTP ${e.status}`);return t.skills??[]}),fetch("/api/skills").then(async e=>{let t=await e.json();if(!e.ok)throw Error(t?.error||`HTTP ${e.status}`);return t.skills??[]})]);t===g.current&&("fulfilled"===n.status?(r(n.value),o(null)):(r([]),o(n.reason instanceof Error?n.reason.message:"Failed to load catalog.")),"fulfilled"===a.status?(i(a.value),c(null)):c(a.reason instanceof Error?a.reason.message:"Failed to read installed skills."),d(!1))},[]);(0,eu.useEffect)(()=>{E()},[E]);let x=(0,eu.useCallback)(async(e,n)=>{m(t=>({...t,[e]:n})),c(null);try{let r="uninstall"===n?await fetch(`/api/skills?name=${encodeURIComponent(e)}`,{method:"DELETE"}):await fetch("/api/skills/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e})}),a=await r.json().catch(()=>({}));if(!r.ok)throw Error(a?.error||`HTTP ${r.status}`);await E(),t()}catch(e){c(e instanceof Error?e.message:"Action failed.")}finally{m(t=>{let n={...t};return delete n[e],n})}},[E,t]),v=function(e){let t=new Set(e.teams.map(e=>e.name)),n=new Map(e.installed.map(e=>[e.name,e])),r=e.catalog.filter(e=>e.isExpert).map(e=>{let r=e.installed||n.has(e.name);return{...e,installed:r||t.has(e.name),removable:r}}),a=new Set(r.map(e=>e.name)),i=new Set;for(let t of e.teams)i.add(t.name);for(let t of e.installed)t.isExpert&&i.add(t.name);let s=new Map(e.teams.map(e=>[e.name,e]));return{catalog:r,other:[...i].filter(e=>!a.has(e)).map(e=>{let t=n.get(e),r=s.get(e);return{name:e,title:t?.title||e,description:t?.description||r?.description||"",removable:void 0!==t}}).sort((e,t)=>e.title.localeCompare(t.title))}}({teams:e,catalog:n,installed:a}),k=!u&&0===v.catalog.length&&0===v.other.length;return(0,ec.jsxs)("div",{className:"h-full overflow-y-auto",children:[(0,ec.jsxs)("div",{className:"mx-auto max-w-[960px] px-4 py-5 sm:px-5 sm:py-6",children:[(0,ec.jsxs)("header",{className:"mb-4 flex items-start justify-between gap-3",children:[(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("h2",{className:"text-xl font-semibold sm:text-2xl",children:"Experts"}),(0,ec.jsx)("p",{className:"mt-1 text-sm leading-6 text-muted-foreground",children:"Skills that also carry an actor definition, so the orchestrator can dispatch them to run a task on its own. Installing one is all it takes — there is nothing to switch on."})]}),(0,ec.jsx)("button",{type:"button",onClick:()=>{E(!0),t()},disabled:u,className:"inline-flex size-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",title:"Refresh","aria-label":"Refresh",children:u?(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(lb,{className:"size-4","aria-hidden":"true"})})]}),s&&(0,ec.jsxs)("div",{className:"mb-4 flex items-start gap-2 rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-xs text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100",children:[(0,ec.jsx)(le,{className:"mt-0.5 size-3.5 shrink-0","aria-hidden":"true"}),(0,ec.jsxs)("span",{children:["Couldn't load the official catalog: ",s,". Experts already installed are listed below."]})]}),l&&(0,ec.jsx)("div",{className:"mb-4 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive",children:l}),(0,ec.jsxs)("div",{className:"space-y-6",children:[v.catalog.length>0&&(0,ec.jsxs)("section",{children:[(0,ec.jsx)("h3",{className:"mb-2.5 text-xs font-semibold uppercase tracking-wider text-tertiary",children:"Official catalog"}),(0,ec.jsx)("div",{className:"grid grid-cols-1 gap-2.5 sm:grid-cols-2",children:v.catalog.map(e=>(0,ec.jsx)(LL,{icon:fB,title:e.title,description:e.description,meta:e.fileCount?`${e.fileCount} file${1===e.fileCount?"":"s"}`:void 0,installed:e.installed,installedVersion:e.installedVersion,latestVersion:e.latestVersion,updateAvailable:e.updateAvailable,busy:p[e.name],actions:e.installed?LD:void 0,onOpen:()=>h({name:e.name,title:e.title,description:e.description,version:e.installedVersion??e.latestVersion,fileCount:e.fileCount,installed:e.installed}),onInstall:()=>void x(e.name,"install"),onUpdate:()=>void x(e.name,"update"),onUninstall:e.removable?()=>y({name:e.name,title:e.title}):void 0},e.name))})]}),v.other.length>0&&(0,ec.jsxs)("section",{children:[(0,ec.jsx)("h3",{className:"mb-2.5 text-xs font-semibold uppercase tracking-wider text-tertiary",children:"Other installed experts"}),(0,ec.jsx)("div",{className:"grid grid-cols-1 gap-2.5 sm:grid-cols-2",children:v.other.map(e=>(0,ec.jsx)(LL,{icon:fB,title:e.title,description:e.description,installed:!0,busy:p[e.name],actions:LD,onOpen:()=>h({name:e.name,title:e.title,description:e.description,installed:!0}),onUninstall:e.removable?()=>y({name:e.name,title:e.title}):void 0},e.name))})]})]}),k&&(0,ec.jsxs)("div",{className:"rounded-lg border border-dashed border-border px-6 py-10 text-center",children:[(0,ec.jsx)("p",{className:"text-sm font-medium",children:"No experts yet"}),(0,ec.jsx)("p",{className:"mx-auto mt-1.5 max-w-md text-xs leading-relaxed text-muted-foreground",children:"An expert is a skill that also ships an actor definition. Install one from Research Skills and it shows up here — nothing ships with the backend by default."})]})]}),(0,ec.jsx)(LR,{skill:f,preferExpert:!0,onClose:()=>h(null)}),(0,ec.jsx)(rL,{open:null!==b,onOpenChange:e=>{e||y(null)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Uninstall expert?"}),(0,ec.jsxs)(rB,{children:["“",b?.title??b?.name,"” will be removed from this Web UI, with its actor definition. A skill that came from the catalog can be installed again; one written locally cannot."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),(0,ec.jsx)(rQ,{onClick:()=>{y(null),b&&x(b.name,"uninstall")},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Uninstall"})]})]})})]})}function LP(){let[,e]=ew("view"),[t,n]=(0,eu.useState)([]),[r,a]=(0,eu.useState)([]),[i,s]=(0,eu.useState)(!0),[o,l]=(0,eu.useState)(null),[c,u]=(0,eu.useState)(null),[d,p]=(0,eu.useState)({}),[m,f]=(0,eu.useState)(null),[h,g]=(0,eu.useState)(null),b=(0,eu.useCallback)(async(e=!1)=>{s(!0),u(null),l(null);let[t,r]=await Promise.allSettled([fetch(`/api/skills/catalog${e?"?refresh=1":""}`).then(async e=>{let t=await e.json();if(!e.ok)throw Error(t.error||"Failed to load catalog");return t.skills??[]}),fetch("/api/skills").then(async e=>{let t=await e.json();if(!e.ok)throw Error(t.error||"Failed to load skills");return t.skills??[]})]),i=e=>!1!==e.isSkill,o=("fulfilled"===t.status?t.value:[]).filter(i);if("rejected"===t.status&&l(t.reason instanceof Error?t.reason.message:"Failed to load the official catalog."),n(o),"fulfilled"===r.status){let e=new Set(o.map(e=>e.name));a(r.value.filter(t=>!e.has(t.name)&&i(t)))}else a([]),u(r.reason instanceof Error?r.reason.message:"Failed to load installed skills.");s(!1)},[]);(0,eu.useEffect)(()=>{b()},[b]);let y=async(e,t="install")=>{p(n=>({...n,[e]:t})),u(null);try{let t=await fetch("/api/skills/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e})}),r=await t.json();if(!t.ok)throw Error(r.error||"Failed to install");n(t=>t.map(t=>t.name===e?{...t,installed:!0,updateAvailable:!1,installedVersion:t.latestVersion??t.installedVersion}:t)),bb()}catch(e){u(e instanceof Error?e.message:`Failed to ${t}`)}finally{p(t=>{let n={...t};return delete n[e],n})}},E=async(e,t)=>{p(t=>({...t,[e]:"uninstall"})),u(null);try{let r=await fetch(`/api/skills?name=${encodeURIComponent(e)}`,{method:"DELETE"});if(!r.ok){let e=await r.json();throw Error(e.error||"Failed to uninstall")}t?n(t=>t.map(t=>t.name===e?{...t,installed:!1}:t)):a(t=>t.filter(t=>t.name!==e)),bb()}catch(e){u(e instanceof Error?e.message:"Failed to uninstall")}finally{p(t=>{let n={...t};return delete n[e],n})}},x=async()=>{h&&(g(null),await E(h.name,h.isCatalog))};return(0,ec.jsxs)("div",{className:"h-full overflow-y-auto",children:[(0,ec.jsxs)("div",{className:"mx-auto max-w-[960px] px-4 py-5 sm:px-5 sm:py-6",children:[(0,ec.jsxs)("header",{className:"mb-4 flex items-start justify-between gap-3",children:[(0,ec.jsxs)("div",{children:[(0,ec.jsx)("h2",{className:"text-xl font-semibold sm:text-2xl",children:"Research Skills"}),(0,ec.jsxs)("p",{className:"mt-1 text-sm leading-6 text-muted-foreground",children:["Install official skills from the"," ",(0,ec.jsx)("a",{href:"https://github.com/EvoScientist/EvoSkills",target:"_blank",rel:"noreferrer",className:"underline underline-offset-2 hover:text-foreground",children:"EvoSkills"})," ","catalog, or remove ones you don't need."]})]}),(0,ec.jsx)("button",{type:"button",onClick:()=>b(!0),disabled:i,"aria-label":"Refresh",className:"rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(lb,{className:i?"size-4 animate-spin":"size-4","aria-hidden":"true"})})]}),c&&(0,ec.jsx)("p",{role:"alert",className:"mb-4 text-sm text-destructive",children:c}),i?(0,ec.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground","aria-live":"polite",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading skills…"]}):(0,ec.jsxs)("div",{className:"space-y-6",children:[(0,ec.jsxs)("section",{children:[(0,ec.jsx)("h3",{className:"mb-2.5 text-xs font-semibold uppercase tracking-wider text-tertiary",children:"Official catalog"}),o?(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:o}):0===t.length?(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"No skills found in the catalog."}):(0,ec.jsx)("div",{className:"grid grid-cols-1 gap-2.5 sm:grid-cols-2",children:t.map(t=>(0,ec.jsx)(LL,{title:t.title,description:t.description,meta:`${t.fileCount} file${1===t.fileCount?"":"s"}`,installed:t.installed,installedVersion:t.installedVersion,latestVersion:t.latestVersion,updateAvailable:t.updateAvailable,busy:d[t.name],actions:Lj(t.isExpert,e),onOpen:()=>f({name:t.name,title:t.title,description:t.description,version:t.installed?t.installedVersion:t.latestVersion,fileCount:t.fileCount,installed:t.installed}),onInstall:()=>y(t.name),onUpdate:()=>y(t.name,"update"),onUninstall:()=>g({name:t.name,title:t.title,isCatalog:!0})},t.name))})]}),r.length>0&&(0,ec.jsxs)("section",{children:[(0,ec.jsx)("h3",{className:"mb-2.5 text-xs font-semibold uppercase tracking-wider text-tertiary",children:"Other installed skills"}),(0,ec.jsx)("div",{className:"grid grid-cols-1 gap-2.5 sm:grid-cols-2",children:r.map(t=>(0,ec.jsx)(LL,{title:t.title,description:t.description,installed:!0,busy:d[t.name],actions:Lj(t.isExpert,e),onOpen:()=>f({name:t.name,title:t.title,description:t.description,installed:!0}),onUninstall:()=>g({name:t.name,title:t.title,isCatalog:!1})},t.name))})]})]})]}),(0,ec.jsx)(LR,{skill:m,onClose:()=>f(null)}),(0,ec.jsx)(rL,{open:null!==h,onOpenChange:e=>{e||g(null)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Uninstall skill?"}),(0,ec.jsxs)(rB,{children:["“",h?.title??h?.name,"” will be removed from this Web UI. You can install it again later."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>g(null),children:"Cancel"}),(0,ec.jsx)(rQ,{onClick:x,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Uninstall"})]})]})})]})}function Lj(e,t){if(e)return(0,ec.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),t("experts")},className:"shrink-0 rounded-full border border-solid border-[var(--brand)] bg-[var(--brand-soft)] px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-[var(--brand)] transition-colors focus-visible:ring-2 focus-visible:ring-ring enabled:hover:border-[var(--brand-hover)] enabled:hover:text-[var(--brand-hover)]",title:"Also an expert — can be dispatched to run a task on its own",children:"Expert"})}let LF=n0("fingerprint",[["path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4",key:"1nerag"}],["path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88",key:"o46ks0"}],["path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02",key:"ptglia"}],["path",{d:"M2 12a10 10 0 0 1 18-6",key:"ydlgp0"}],["path",{d:"M2 16h.01",key:"1gqxmh"}],["path",{d:"M21.8 16c.2-2 .131-5.354 0-6",key:"drycrb"}],["path",{d:"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2",key:"1tidbn"}],["path",{d:"M8.65 22c.21-.66.45-1.32.57-2",key:"13wd9y"}],["path",{d:"M9 6.8a6 6 0 0 1 9 5.2v2",key:"1fr1j5"}]]),LU=n0("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]),LB=n0("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]),L$="rounded border border-border bg-background p-1.5 text-muted-foreground shadow-sm transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",Lz=["complements","contradicts","supersedes"];function LH({node:e,edges:t,nodeMap:n,onClose:r,onNavigate:a}){let i,[s,o]=(0,eu.useState)(null),[l,c]=(0,eu.useState)(!0),[u,d]=(0,eu.useState)(null);(0,eu.useEffect)(()=>{let t=new AbortController;return c(!0),o(null),d(null),fetch(`/api/memory?path=${encodeURIComponent(e.path)}`,{cache:"no-store",signal:t.signal}).then(async e=>{let t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Failed to load observation.");o(t.content??null)}).catch(e=>{t.signal.aborted||(o(null),d(e instanceof Error?e.message:"Failed to load observation."))}).finally(()=>{t.signal.aborted||c(!1)}),()=>t.abort()},[e.path]);let p=(i=new Set,t.filter(t=>{if(t.source!==e.id&&t.target!==e.id)return!1;let n=t.source===e.id?t.target:t.source,r=`${n}::${t.relation}`;return!i.has(r)&&(i.add(r),!0)})),m=s?s.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").trim():"";return(0,ec.jsxs)("div",{className:"flex h-full flex-col overflow-hidden border-l border-border bg-background shadow-xl md:shadow-none",children:[(0,ec.jsxs)("div",{className:"flex items-start justify-between gap-2 border-b border-border px-4 py-3",children:[(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsxs)("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:[e.memory_type," · ",e.scope]}),(0,ec.jsx)("h3",{className:"mt-0.5 line-clamp-3 text-sm font-semibold leading-snug text-foreground",children:e.summary}),e.created_at&&(0,ec.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:(e=>{try{let t=new Date(e);if(Number.isNaN(t.getTime()))return e;return t.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}catch{return e}})(e.created_at)})]}),(0,ec.jsx)("button",{type:"button",onClick:r,className:"mt-0.5 inline-flex size-8 flex-shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring","aria-label":"Close observation details",title:"Close observation details",children:(0,ec.jsx)(n1,{className:"h-4 w-4","aria-hidden":"true"})})]}),(0,ec.jsxs)("div",{className:"flex-1 overflow-y-auto","aria-live":l?"polite":"off",children:[p.length>0&&(0,ec.jsxs)("div",{className:"border-b border-border px-4 py-3",children:[(0,ec.jsx)("p",{className:"mb-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Relations"}),(0,ec.jsx)("ul",{className:"space-y-1.5",children:p.map((t,r)=>{let i=t.source===e.id?t.target:t.source,s=n.get(i);return(0,ec.jsxs)("li",{className:"flex items-start gap-2",children:[(0,ec.jsx)("span",{className:"mt-0.5 flex-shrink-0 rounded px-1.5 py-0.5 text-[10px] font-semibold text-white",style:{background:Op(t.relation)},children:Oh(t.relation)}),s?(0,ec.jsx)("button",{type:"button",onClick:()=>a(i),className:"min-w-0 rounded-sm text-left text-xs text-foreground hover:underline focus-visible:ring-2 focus-visible:ring-ring",children:s.summary}):(0,ec.jsx)("span",{className:"text-xs text-muted-foreground",children:i})]},r)})})]}),(0,ec.jsx)("div",{className:"px-4 py-3",children:l?(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"Loading…"}):u?(0,ec.jsx)("p",{role:"alert",className:"text-xs text-destructive",children:u}):m?(0,ec.jsx)(Rp,{content:m,className:"text-xs leading-relaxed [&_h2]:mb-2 [&_h2]:mt-4 [&_h2]:text-sm [&_p]:mb-3"}):(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"This observation has no body content."})})]})]})}function LG({data:e,selectedId:t,onSelect:n,w:r,h:a}){let i=(0,eu.useMemo)(()=>{let t=new Set;return e.edges.filter(e=>{let n=[e.source,e.target].sort().join("::");return!t.has(n)&&(t.add(n),!0)})},[e.edges]),s=function(e,t,n,r){let[a,i]=(0,eu.useState)([]),s=(0,eu.useRef)([]),o=(0,eu.useRef)(null),l=(0,eu.useRef)(0),c=(0,eu.useRef)(n),u=(0,eu.useRef)(r);return(0,eu.useEffect)(()=>{c.current=n,u.current=r},[n,r]),(0,eu.useEffect)(()=>{var n,r;let a,d;if(0===e.length||0===c.current||0===u.current){i([]),s.current=[];return}let p=(n=c.current,r=u.current,d=Math.min(n,r)*Math.max(.28,.12*Math.sqrt(a=Math.max(e.length,1))),e.map((e,t)=>{let i=t/a*2*Math.PI;return{id:e.id,x:n/2+d*Math.cos(i)+Od(e.id,0),y:r/2+d*Math.sin(i)+Od(e.id,1),vx:0,vy:0}}));s.current=p,i(p),l.current=0,o.current&&cancelAnimationFrame(o.current);let m=0,f=()=>{let{positions:e,energy:n}=function(e,t,n,r){let a=n/2,i=r/2,s=new Float64Array(e.length),o=new Float64Array(e.length),l=new Map(e.map((e,t)=>[e.id,t]));for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++){let r=e[t].x-e[n].x,a=e[t].y-e[n].y,i=Math.max(Math.sqrt(r*r+a*a),1),l=6e3/(i*i),c=r/i,u=a/i;s[t]+=l*c,o[t]+=l*u,s[n]-=l*c,o[n]-=l*u}for(let n of t){let t=l.get(n.source),r=l.get(n.target);if(null==t||null==r)continue;let a=e[r].x-e[t].x,i=e[r].y-e[t].y,c=Math.max(Math.sqrt(a*a+i*i),1),u=.04*(c-180),d=a/c,p=i/c;s[t]+=u*d,o[t]+=u*p,s[r]-=u*d,o[r]-=u*p}for(let t=0;t<e.length;t++)s[t]+=.02*(a-e[t].x),o[t]+=.02*(i-e[t].y);let c=0;return{positions:e.map((e,t)=>{let n=(e.vx+s[t])*.78,r=(e.vy+o[t])*.78,a=Math.sqrt(n*n+r*r);return a>12&&(n=n/a*12,r=r/a*12),c+=n*n+r*r,{id:e.id,x:e.x+n,y:e.y+r,vx:n,vy:r}}),energy:c}}(s.current,t,c.current,u.current);s.current=e,l.current++,++m%2==0&&i([...e]),l.current<600&&n>.3?o.current=requestAnimationFrame(f):i([...s.current])};return o.current=requestAnimationFrame(f),()=>{o.current&&cancelAnimationFrame(o.current)}},[e,t]),a}(e.nodes,i,r,a),[o,l]=(0,eu.useState)(0),[c,u]=(0,eu.useState)(0),[d,p]=(0,eu.useState)(1),m=(0,eu.useRef)(null),f=(0,eu.useRef)(null),[h,g]=(0,eu.useState)(new Set(Lz)),[b,y]=(0,eu.useState)(new Set(["semantic","procedural"])),E=(0,eu.useMemo)(()=>new Map(s.map(e=>[e.id,e])),[s]),x=(0,eu.useMemo)(()=>new Map(e.nodes.map(e=>[e.id,e])),[e.nodes]),v=(0,eu.useRef)({tx:o,ty:c,scale:d});v.current={tx:o,ty:c,scale:d};let k=(0,eu.useCallback)((e,t,n)=>{let{tx:r,ty:a,scale:i}=v.current,s=Math.max(.2,Math.min(5,i*n)),o=s/i;p(s),l(e-o*(e-r)),u(t-o*(t-a))},[]),S=(0,eu.useCallback)(e=>{e.preventDefault();let t=e.currentTarget.getBoundingClientRect();k(e.clientX-t.left,e.clientY-t.top,e.deltaY<0?1.1:.9)},[k]),T=(0,eu.useCallback)(e=>{(e.target===e.currentTarget||"svg"===e.target.tagName)&&(f.current={startX:e.clientX,startY:e.clientY,tx:o,ty:c},e.currentTarget.setPointerCapture(e.pointerId))},[o,c]),w=(0,eu.useCallback)(e=>{f.current&&(l(f.current.tx+e.clientX-f.current.startX),u(f.current.ty+e.clientY-f.current.startY))},[]),_=(0,eu.useCallback)(()=>{f.current=null},[]);if(0===r||0===a)return null;let A=new Set(e.nodes.filter(e=>b.has("procedural"===e.memory_type?"procedural":"semantic")).map(e=>e.id)),N=e.edges.filter(e=>A.has(e.source)&&A.has(e.target)&&(h.has(e.relation)||!Lz.includes(e.relation)));return(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)("div",{className:"absolute left-3 top-3 z-10 flex gap-1",children:[(0,ec.jsx)("button",{type:"button",onClick:()=>k(r/2,a/2,1.25),className:L$,"aria-label":"Zoom in observation graph",title:"Zoom in",children:(0,ec.jsx)(CP,{className:"h-3.5 w-3.5","aria-hidden":"true"})}),(0,ec.jsx)("button",{type:"button",onClick:()=>k(r/2,a/2,.8),className:L$,"aria-label":"Zoom out observation graph",title:"Zoom out",children:(0,ec.jsx)(Cj,{className:"h-3.5 w-3.5","aria-hidden":"true"})}),(0,ec.jsx)("button",{type:"button",onClick:()=>{l(0),u(0),p(1)},className:L$,"aria-label":"Reset observation graph view",title:"Reset view",children:(0,ec.jsx)(LB,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]}),(0,ec.jsxs)("div",{className:"absolute right-3 top-3 z-10 flex max-w-[calc(100%-1.5rem)] select-none flex-col gap-1 rounded border border-border bg-background/90 px-2.5 py-2 text-[11px] shadow-sm backdrop-blur-sm",children:[["complements","contradicts","supersedes"].map(e=>{let t=h.has(e);return(0,ec.jsxs)("button",{type:"button",onClick:()=>{g(t=>{let n=new Set(t);if(n.has(e)){if(1===n.size)return t;n.delete(e)}else n.add(e);return n})},"aria-pressed":t,title:`${t?"Hide":"Show"} ${e} edges`,className:`flex items-center gap-1.5 text-left transition-opacity ${t?"opacity-100":"opacity-35"}`,children:[(0,ec.jsx)("span",{className:"inline-block h-2 w-6 flex-shrink-0 rounded-sm",style:{background:Op(e)}}),(0,ec.jsx)("span",{className:"capitalize text-muted-foreground",children:Oh(e)})]},e)}),(0,ec.jsx)("div",{className:"mt-1 flex flex-col gap-0.5 border-t border-border pt-1",children:[["semantic","Semantic"],["procedural","Procedural"]].map(([e,t])=>{let n=b.has(e);return(0,ec.jsxs)("button",{type:"button",onClick:()=>{y(t=>{let n=new Set(t);if(n.has(e)){if(1===n.size)return t;n.delete(e)}else n.add(e);return n})},"aria-pressed":n,title:`${n?"Hide":"Show"} ${t.toLowerCase()} nodes`,className:`flex items-center gap-1.5 text-left transition-opacity ${n?"opacity-100":"opacity-35"}`,children:[(0,ec.jsx)("span",{className:"inline-block h-3 w-3 flex-shrink-0 rounded-full",style:{background:Of(e)}}),(0,ec.jsx)("span",{className:"text-muted-foreground",children:t})]},e)})})]}),(0,ec.jsxs)("svg",{ref:m,width:r,height:a,className:"absolute inset-0 cursor-grab active:cursor-grabbing",style:{userSelect:"none"},role:"img","aria-label":"Observation relationship graph",onWheel:S,onPointerDown:T,onPointerMove:w,onPointerUp:_,onClick:e=>{(e.target===e.currentTarget||"svg"===e.target.tagName)&&n(null)},children:[(0,ec.jsx)("defs",{children:["complements","contradicts","supersedes","default"].map(e=>(0,ec.jsx)("marker",{id:`arrow-${e}`,viewBox:"0 0 10 10",markerWidth:"7",markerHeight:"7",refX:"10",refY:"5",orient:"auto",markerUnits:"userSpaceOnUse",children:(0,ec.jsx)("path",{d:"M0,1.5 L10,5 L0,8.5 z",fill:Op(e)})},e))}),(0,ec.jsxs)("g",{transform:`translate(${o},${c}) scale(${d})`,children:[N.map((e,t)=>{let n=E.get(e.source),r=E.get(e.target);if(!n||!r)return null;let a=x.get(e.source),i=x.get(e.target),s=a?Om(a.degree):9,o=i?Om(i.degree):9,l=r.x-n.x,c=r.y-n.y,u=Math.max(Math.sqrt(l*l+c*c),1),d=l/u,p=c/u,m=n.x+d*s,f=n.y+p*s,h=r.x-d*(o+2),g=r.y-p*(o+2),b=e.relation in{complements:1,contradicts:1,supersedes:1}?e.relation:"default",y=Op(e.relation),v=`edge-grad-${t}`,k="complements"===e.relation,S=Math.min(45,7/Math.max(u-s-(o+2),1)*100);return(0,ec.jsxs)("g",{children:[(0,ec.jsx)("linearGradient",{id:v,gradientUnits:"userSpaceOnUse",x1:m,y1:f,x2:h,y2:g,children:k?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("stop",{offset:"0%",stopColor:y,stopOpacity:0}),(0,ec.jsx)("stop",{offset:`${S}%`,stopColor:y,stopOpacity:.7}),(0,ec.jsx)("stop",{offset:`${100-S}%`,stopColor:y,stopOpacity:.7}),(0,ec.jsx)("stop",{offset:"100%",stopColor:y,stopOpacity:0})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("stop",{offset:"0%",stopColor:y,stopOpacity:.7}),(0,ec.jsx)("stop",{offset:`${100-S}%`,stopColor:y,stopOpacity:.7}),(0,ec.jsx)("stop",{offset:"100%",stopColor:y,stopOpacity:0})]})}),(0,ec.jsx)("line",{x1:m,y1:f,x2:h,y2:g,stroke:`url(#${v})`,strokeWidth:1.5,strokeDasharray:"contradicts"===e.relation?"5,3":void 0,markerEnd:k?void 0:`url(#arrow-${b})`})]},t)}),e.nodes.map(e=>{let r=E.get(e.id);if(!r||!A.has(e.id))return null;let a=Om(e.degree),i=e.id===t,s=e.summary.length>28?e.summary.slice(0,26)+"…":e.summary;return(0,ec.jsxs)("g",{role:"button",tabIndex:0,"aria-label":`Select observation: ${e.summary}`,className:"outline-none [&:focus-visible]:outline-none [&:focus]:outline-none",style:{cursor:"pointer"},onClick:r=>{r.stopPropagation(),n(e.id===t?null:e.id)},onKeyDown:r=>{("Enter"===r.key||" "===r.key)&&(r.preventDefault(),n(e.id===t?null:e.id))},children:[i&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("circle",{cx:r.x,cy:r.y,r:a+7,fill:"none",style:{stroke:"var(--brand)"},strokeWidth:2,opacity:.3}),(0,ec.jsx)("circle",{cx:r.x,cy:r.y,r:a+4,fill:"none",style:{stroke:"var(--brand)"},strokeWidth:2.5})]}),(0,ec.jsx)("circle",{cx:r.x,cy:r.y,r:a,fill:Of(e.memory_type),stroke:"#fff",strokeWidth:1.5,opacity:.9}),(0,ec.jsx)("text",{x:r.x,y:r.y+a+12,textAnchor:"middle",fontSize:10,fill:"currentColor",className:"select-none fill-foreground/70",children:s}),(0,ec.jsx)("title",{children:e.summary})]},e.id)})]})]})]})}function Lq({message:e}){return(0,ec.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-muted-foreground",children:e})}function LW({data:e,loading:t,error:n,highlightNodeId:r}){let a=(0,eu.useRef)(null),[i,s]=(0,eu.useState)({w:0,h:0}),[o,l]=(0,eu.useState)(null),[c,u]=(0,eu.useState)(!1),[d,p]=(0,eu.useState)(360),m=(0,eu.useRef)(null);(0,eu.useEffect)(()=>{null!=r&&l(r)},[r]),(0,eu.useEffect)(()=>{let e=window.matchMedia("(min-width: 768px)"),t=()=>u(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]);let f=(0,eu.useCallback)(e=>{m.current={startX:e.clientX,startW:d},e.currentTarget.setPointerCapture(e.pointerId)},[d]),h=(0,eu.useCallback)(e=>{if(!m.current)return;let t=e.clientX-m.current.startX;p(Math.min(Math.max(640,.6*window.innerWidth),Math.max(280,m.current.startW-t)))},[]),g=(0,eu.useCallback)(()=>{m.current=null},[]);(0,eu.useEffect)(()=>{let e=a.current;if(!e)return;let t=new ResizeObserver(([e])=>{s({w:e.contentRect.width,h:e.contentRect.height})});return t.observe(e),()=>t.disconnect()},[]);let b=new Map((e?.nodes??[]).map(e=>[e.id,e])),y=o?b.get(o)??null:null,E=null!==y;return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col",children:[(0,ec.jsx)("div",{className:"flex items-center border-b border-border px-4 py-2",children:(0,ec.jsx)("span",{className:"text-xs text-muted-foreground",children:e?`${e.nodes.length} nodes \xb7 ${e.edges.length} edges`:t?"Loading…":""})}),(0,ec.jsxs)("div",{className:"relative flex min-h-0 flex-1",children:[(0,ec.jsxs)("div",{ref:a,className:"relative min-w-0 flex-1 overflow-hidden bg-muted/20",children:[t&&(0,ec.jsx)(Lq,{message:"Loading observations…"}),!t&&n&&(0,ec.jsx)(Lq,{message:`Error: ${n}`}),!t&&!n&&e&&0===e.nodes.length&&(0,ec.jsx)(Lq,{message:"No observations yet."}),!t&&!n&&e&&e.nodes.length>0&&i.w>0&&(0,ec.jsx)(LG,{data:e,selectedId:o,onSelect:l,w:i.w,h:i.h})]}),E&&c&&(0,ec.jsx)("div",{role:"separator","aria-orientation":"vertical",onPointerDown:f,onPointerMove:h,onPointerUp:g,className:"hover:bg-[var(--brand)]/40 w-1 flex-shrink-0 cursor-col-resize bg-border transition-colors"}),E&&(0,ec.jsx)("div",{className:c?"flex-shrink-0 overflow-hidden":"absolute inset-0 z-20 overflow-hidden",style:c?{width:d}:void 0,children:(0,ec.jsx)(LH,{node:y,edges:e?.edges??[],nodeMap:b,onClose:()=>l(null),onNavigate:e=>l(e)})})]})]})}let LV=n0("compass",[["path",{d:"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z",key:"9ktpf1"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]),LY=[{path:"profile/USER_PROFILE.md",label:"User",description:"Persistent context about the researcher",Icon:n0("user",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]])},{path:"profile/RESEARCH_TASTE.md",label:"Taste",description:"Aesthetic and methodological preferences",Icon:LV},{path:"profile/SOUL.md",label:"SOUL",description:"EvoScientist's core values and personality",Icon:bA}];function LK({entry:e,selected:t,onSelect:n}){let{Icon:r}=e;return(0,ec.jsxs)("button",{type:"button",onClick:()=>n(e),className:rO("group flex w-full min-w-0 items-center gap-2 rounded-md border px-3 py-2.5 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",t?"border-[var(--brand)]/40 bg-accent":"hover:border-[var(--brand)]/40 border-border bg-[var(--color-surface)] hover:bg-accent/60"),children:[(0,ec.jsx)("span",{className:rO("flex size-7 shrink-0 items-center justify-center rounded-md transition-colors",t?"bg-[var(--brand)] text-white":"bg-muted text-[var(--brand)] group-hover:bg-background"),children:(0,ec.jsx)(r,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("span",{className:"block truncate text-sm font-medium",children:e.label}),(0,ec.jsx)("span",{className:"block truncate text-[11px] text-muted-foreground",children:e.description})]})]})}function LX({entry:e}){let[t,n]=(0,eu.useState)(""),[r,a]=(0,eu.useState)(""),[i,s]=(0,eu.useState)(!1),[o,l]=(0,eu.useState)(!1),[c,u]=(0,eu.useState)(!1),[d,p]=(0,eu.useState)(null),m=(0,eu.useRef)(0);(0,eu.useEffect)(()=>{if(!e){n(""),a("");return}let t=++m.current;s(!0),l(!1),p(null),fetch(`/api/memory?path=${encodeURIComponent(e.path)}`).then(async e=>{let t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Failed to load.");return t}).then(e=>{m.current===t&&(n(e.content??""),a(e.content??""))}).catch(e=>{m.current===t&&(n(""),a(""),p(e instanceof Error?e.message:"Failed to load."))}).finally(()=>{m.current===t&&s(!1)})},[e]);let f=async()=>{if(e){u(!0),p(null);try{let t=await fetch("/api/memory",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e.path,content:r})}),a=await t.json();if(!t.ok)throw Error(a.error??"Failed to save.");n(r),l(!1)}catch(e){p(e instanceof Error?e.message:"Failed to save.")}finally{u(!1)}}};if(!e)return(0,ec.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-muted-foreground",children:"Select a profile to view"});let h=t.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").trim();return(0,ec.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center justify-between border-b border-border px-4 py-2.5",children:[(0,ec.jsx)("span",{className:"text-sm font-medium",children:e.label}),(0,ec.jsx)("div",{className:"flex items-center gap-1.5",children:o?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(rQ,{variant:"outline",size:"sm",onClick:()=>{l(!1),a(t)},children:"Cancel"}),(0,ec.jsx)(rQ,{size:"sm",onClick:f,disabled:c||r===t,children:c?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Saving"]}):"Save"})]}):(0,ec.jsxs)(rQ,{variant:"outline",size:"sm",onClick:()=>l(!0),disabled:i,children:[(0,ec.jsx)(fM,{className:"size-3.5","aria-hidden":"true"}),"Edit raw"]})})]}),d&&(0,ec.jsx)("p",{className:"flex-shrink-0 px-4 py-2 text-xs text-destructive",children:d}),(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:i?(0,ec.jsxs)("div",{className:"flex h-full items-center justify-center gap-2 text-sm text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading…"]}):o?(0,ec.jsx)("textarea",{"aria-label":`Edit ${e.label} memory`,className:"size-full resize-none bg-background p-4 font-mono text-sm text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",value:r,onChange:e=>a(e.target.value),spellCheck:!1}):(0,ec.jsx)(hp,{className:"h-full",children:(0,ec.jsx)("div",{className:"px-4 py-4",children:(0,ec.jsx)(Rp,{content:h})})})})]})}function LZ({listing:e,listingLoading:t}){let[n,r]=(0,eu.useState)(null),[a,i]=(0,eu.useState)(!1);(0,eu.useEffect)(()=>{let e=window.matchMedia("(min-width: 768px)"),t=()=>i(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]);let s=(0,eu.useMemo)(()=>(e?.entries??[]).filter(e=>e.path.startsWith("profile/projects/")&&e.path.endsWith(".md")).map(e=>{let t=e.path.split("/"),n=t.length>=4?`${t[2]}/${t.slice(3).join("/")}`:e.path;return{path:e.path,label:n.replace(/\/PROJECT_PROFILE\.md$/,""),description:"Project profile",Icon:bw}}),[e?.entries]),o=(0,eu.useMemo)(()=>[...LY,...s],[s]);(0,eu.useEffect)(()=>{!t&&0!==o.length&&(n&&o.some(e=>e.path===n.path)||r(o[0]))},[o,t,n]);let l=(0,ec.jsx)(hp,{className:"h-full",children:(0,ec.jsxs)("div",{className:"p-3",children:[(0,ec.jsx)("p",{className:"mb-2 text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Profile"}),(0,ec.jsx)("div",{className:"space-y-1.5",children:LY.map(e=>(0,ec.jsx)(LK,{entry:e,selected:n?.path===e.path,onSelect:r},e.path))}),(0,ec.jsx)("p",{className:"mb-2 mt-5 text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Project Profiles"}),t?(0,ec.jsxs)("div",{className:"flex h-10 items-center gap-2 text-xs text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Loading projects…"]}):0===s.length?(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"No project profiles yet."}):(0,ec.jsx)("div",{className:"space-y-1.5",children:s.map(e=>(0,ec.jsx)(LK,{entry:e,selected:n?.path===e.path,onSelect:r},e.path))})]})});return a?(0,ec.jsxs)(fw,{direction:"horizontal",autoSaveId:"evomemory-identity",className:"h-full",children:[(0,ec.jsx)(mI,{defaultSize:35,minSize:22,maxSize:55,children:l}),(0,ec.jsx)(f_,{}),(0,ec.jsx)(mI,{defaultSize:65,minSize:45,children:(0,ec.jsx)(LX,{entry:n})})]}):(0,ec.jsxs)("div",{className:"flex min-h-0 w-full flex-1 flex-col",children:[(0,ec.jsx)("div",{className:"max-h-[42svh] flex-shrink-0 overflow-hidden border-b border-border",children:l}),(0,ec.jsx)("div",{className:"min-h-0 flex-1",children:(0,ec.jsx)(LX,{entry:n})})]})}function LQ(e){try{let t=new Date(e),n=new Date;return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()}catch{return!1}}function LJ({items:e}){let t=new Set(e.filter(e=>"execution"===e.kind).map(e=>e.project_id).filter(Boolean)).size,n=e.filter(e=>e.created_at&&LQ(e.created_at)),r=n.filter(e=>"execution"===e.kind).length,a=n.filter(e=>"observation"===e.kind).length,i=[{n:t,label:"Projects"},{n:e.length,label:"Total"},{n:r,label:"Runs Today"},{n:a,label:"Obs Today"}];return(0,ec.jsx)("div",{className:"flex flex-shrink-0 border-b border-border",children:i.map(e=>(0,ec.jsxs)("div",{className:"flex flex-1 flex-col items-center gap-1 border-r border-border py-2 last:border-r-0",children:[(0,ec.jsx)("span",{className:"text-lg font-bold leading-none text-[var(--brand)]",children:e.n}),(0,ec.jsx)("span",{className:"text-[11px] leading-none text-muted-foreground",children:e.label})]},e.label))})}function L0({created_at:e,dotColor:t,children:n}){return(0,ec.jsxs)("div",{className:"flex gap-2",children:[(0,ec.jsx)("time",{dateTime:e,className:"w-14 flex-shrink-0 pt-3 text-right text-xs tabular-nums leading-none text-muted-foreground",children:function(e){try{let t=new Date(e);if(LQ(e))return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}).format(t);let n=new Date;return new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",...t.getFullYear()!==n.getFullYear()?{year:"numeric"}:{}}).format(t)}catch{return e}}(e)}),(0,ec.jsxs)("div",{className:"relative flex w-3 flex-shrink-0 justify-center",children:[(0,ec.jsx)("span",{className:"absolute bottom-0 left-1/2 top-0 w-px -translate-x-1/2 bg-border","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"z-10 mt-3 size-2.5 rounded-full border-2 border-[var(--color-surface)]",style:{background:t}})]}),n]})}function L1({entry:e,onNavigateToObs:t,defaultOpen:n=!1}){let[r,a]=(0,eu.useState)(n),i=(0,eu.useRef)(null),s=`${r?"Collapse":"Expand"} ${e.agent} execution: ${e.summary}`;return(0,eu.useEffect)(()=>{n&&(a(!0),i.current?.scrollIntoView({block:"center"}))},[n]),(0,ec.jsx)(L0,{created_at:e.created_at,dotColor:"var(--brand)",children:(0,ec.jsxs)("div",{ref:i,className:`hover:border-[var(--brand)]/40 mb-2 min-w-0 flex-1 overflow-hidden rounded-lg border bg-[var(--color-surface)] transition-colors ${n?"border-[var(--brand)]/40":"border-border"}`,children:[(0,ec.jsxs)("button",{type:"button","aria-expanded":r,"aria-label":s,title:s,onClick:()=>a(e=>!e),className:"flex w-full items-center gap-2 px-3 py-2.5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",children:[(0,ec.jsx)("span",{className:"flex-shrink-0 text-sm font-medium text-foreground",children:e.agent}),!r&&(0,ec.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs text-muted-foreground",children:e.summary}),(0,ec.jsx)(lA,{className:`ml-auto size-3.5 flex-shrink-0 text-muted-foreground transition-transform duration-200 ${r?"rotate-180":""}`,"aria-hidden":"true"})]}),(0,ec.jsx)("div",{className:"grid transition-[grid-template-rows] duration-200",style:{gridTemplateRows:r?"1fr":"0fr"},children:r&&(0,ec.jsxs)("div",{className:"overflow-hidden",children:[e.project_id&&(0,ec.jsx)("p",{className:"px-3 pb-2 font-mono text-[11px] text-muted-foreground",children:e.project_id}),(0,ec.jsx)("p",{className:"border-t border-border px-3 py-3 text-sm leading-relaxed text-foreground",children:e.summary}),e.obs_ids.length>0&&(0,ec.jsxs)("div",{className:"border-t border-border px-3 py-2.5",children:[(0,ec.jsx)("p",{className:"mb-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Linked Observations"}),(0,ec.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.obs_ids.map(e=>(0,ec.jsxs)("button",{type:"button",onClick:n=>{n.stopPropagation(),t(e)},className:"border-[var(--brand)]/40 rounded border bg-background px-2 py-0.5 font-mono text-[11px] text-[var(--brand)] transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",title:`Jump to ${e} in Knowledge graph`,"aria-label":`Jump to observation ${e} in Knowledge graph`,children:[e.slice(0,14),"…"]},e))})]})]})})]})})}function L2({obs:e,onNavigateToObs:t}){let n=Of(e.memory_type);return(0,ec.jsx)(L0,{created_at:e.created_at,dotColor:n,children:(0,ec.jsx)("button",{type:"button",onClick:()=>t(e.id),title:"View in Knowledge graph","aria-label":`View observation in Knowledge graph: ${e.summary}`,className:"hover:border-[var(--brand)]/40 mb-2 min-w-0 flex-1 cursor-pointer overflow-hidden rounded-lg border border-dashed border-border bg-[var(--color-surface)] px-3 py-2.5 text-left transition-colors hover:bg-accent/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsxs)("div",{className:"flex items-center gap-2",children:[(0,ec.jsx)("span",{className:"flex-shrink-0 rounded px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-white",style:{background:n},children:e.memory_type}),(0,ec.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs text-foreground",children:e.summary}),(0,ec.jsx)(Oo,{className:"ml-auto size-3.5 flex-shrink-0 text-muted-foreground","aria-hidden":"true"})]})})})}function L3({items:e,truncated:t,loading:n,error:r,highlightExecId:a,onRefresh:i,onNavigateToObs:s}){return n&&!e?(0,ec.jsxs)("div",{className:"flex flex-1 items-center justify-center gap-2 text-sm text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading history…"]}):r?(0,ec.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 p-8",children:[(0,ec.jsx)("p",{className:"text-sm text-destructive",children:r}),(0,ec.jsxs)("button",{type:"button",onClick:i,className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground",children:[(0,ec.jsx)(LU,{className:"size-3.5","aria-hidden":"true"}),"Retry"]})]}):e&&0!==e.length?(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsx)(LJ,{items:e}),(0,ec.jsx)(hp,{type:"always",className:"min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]>div]:!block [&_[data-slot=scroll-area-viewport]>div]:!w-full",children:(0,ec.jsxs)("div",{className:"p-4",children:[(0,ec.jsx)("div",{children:e.map(e=>"execution"===e.kind?(0,ec.jsx)(L1,{entry:e,onNavigateToObs:s,defaultOpen:a===e.id},`e-${e.id}`):(0,ec.jsx)(L2,{obs:e,onNavigateToObs:s},`o-${e.id}`))}),t&&(0,ec.jsxs)("p",{className:"mt-2 text-center text-xs text-muted-foreground",children:["Showing newest ",e.length," items."]})]})})]}):(0,ec.jsx)("div",{className:"flex flex-1 items-center justify-center text-sm text-muted-foreground",children:"No activity yet."})}function L4(e){return"identity"===e||"knowledge"===e||"history"===e}function L5({initialTab:e,initialObsId:t,initialExecId:n}={}){let[r,a]=(0,eu.useState)(null),[i,s]=(0,eu.useState)(!0),[o,l]=(0,eu.useState)(L4(e)?e:"identity"),[c,u]=(0,eu.useState)(null),[d,p]=(0,eu.useState)(!1),[m,f]=(0,eu.useState)(null),[h,g]=(0,eu.useState)(null),[b,y]=(0,eu.useState)(!1),[E,x]=(0,eu.useState)(null),[v,k]=(0,eu.useState)(t??null),S=(0,eu.useRef)(0),T=(0,eu.useRef)(0),w=(0,eu.useCallback)(async()=>{s(!0);try{let e=await fetch("/api/memory"),t=await e.json();if(!e.ok)return;a(t);let n=t.entries.reduce((e,t)=>t.mtime>e?t.mtime:e,0);n>0&&hZ(n)}catch{}finally{s(!1)}},[]),_=(0,eu.useCallback)(async()=>{let e=++S.current;p(!0),f(null);try{let t=await fetch("/api/memory/observations",{cache:"no-store"}),n=await t.json().catch(()=>({}));if(e!==S.current)return;if(!t.ok)throw Error(n.error||"Failed.");u(n)}catch(t){if(e!==S.current)return;f(t instanceof Error?t.message:"Failed to load.")}finally{e===S.current&&p(!1)}},[]),A=(0,eu.useCallback)(async()=>{let e=++T.current;y(!0),x(null);try{let t=await fetch("/api/memory/executions",{cache:"no-store"}),n=await t.json().catch(()=>({}));if(e!==T.current)return;if(!t.ok)throw Error(n.error||"Failed.");g(n)}catch(t){if(e!==T.current)return;x(t instanceof Error?t.message:"Failed to load.")}finally{e===T.current&&y(!1)}},[]);(0,eu.useEffect)(()=>{w()},[w]),(0,eu.useEffect)(()=>{L4(e)&&l(e)},[e]),(0,eu.useEffect)(()=>{t?(k(t),l("knowledge")):k(null)},[t]),(0,eu.useEffect)(()=>{n&&l("history")},[n]),(0,eu.useEffect)(()=>{if("history"!==o)return;let e=()=>{A(),_()};e();let t=setInterval(e,3e4);return()=>clearInterval(t)},[o,A,_]),(0,eu.useEffect)(()=>{"knowledge"!==o||c||d||_()},[o,c,d,_]);let N=(0,eu.useMemo)(()=>{if(!h||!c)return null;let e=[];for(let t of h.entries)e.push({kind:"execution",...t});for(let t of c.nodes)e.push({kind:"observation",id:t.id,created_at:t.created_at,summary:t.summary,memory_type:t.memory_type,scope:t.scope});return e.sort((e,t)=>e.created_at<t.created_at?1:-1),e},[h,c]),I=[{id:"identity",label:"Identity",Icon:LF},{id:"knowledge",label:"Knowledge",Icon:Oo},{id:"history",label:"History",Icon:Ou}];return(0,ec.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,ec.jsxs)("header",{className:"flex flex-shrink-0 items-start justify-between gap-3 border-b border-border px-4 py-3 sm:px-5",children:[(0,ec.jsxs)("div",{className:"min-w-0",children:[(0,ec.jsx)("h2",{className:"text-xl font-semibold sm:text-2xl",children:"EvoMemory"}),(0,ec.jsxs)("p",{className:"mt-1 text-sm leading-6 text-muted-foreground",children:["EvoScientist's"," ",(0,ec.jsx)("span",{className:"font-medium text-[var(--brand)]",children:"self-evolving memory system"})," ","— continuously learns and refines what it knows about you, your research taste, and lessons from past experiments."]})]}),(0,ec.jsx)("button",{type:"button",onClick:()=>{"history"===o?(A(),_()):"knowledge"===o?_():w()},disabled:"history"===o?b||d:"knowledge"===o?d:i,"aria-label":"Refresh",title:"Refresh",className:"mt-0.5 flex-shrink-0 rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:(0,ec.jsx)(LU,{className:`size-4 ${"history"===o&&(b||d)||"knowledge"===o&&d||"identity"===o&&i?"animate-spin":""}`,"aria-hidden":"true"})})]}),(0,ec.jsx)("div",{className:"grid flex-shrink-0 grid-cols-3 gap-1 border-b border-border px-2 pt-1 sm:flex sm:items-center sm:px-3",role:"tablist","aria-label":"Memory views",children:I.map(({id:e,label:t,Icon:n})=>(0,ec.jsxs)("button",{type:"button",role:"tab","aria-selected":o===e,onClick:()=>{l(e),"knowledge"!==e&&k(null)},className:rO("flex min-w-0 items-center justify-center gap-1 rounded-t-md border-b-2 px-1.5 py-2 text-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring sm:gap-1.5 sm:px-3 sm:text-sm",o===e?"border-[var(--brand)] bg-accent text-foreground":"border-transparent text-muted-foreground hover:bg-accent hover:text-foreground"),children:[(0,ec.jsx)(n,{className:"size-3.5","aria-hidden":"true"}),t]},e))}),(0,ec.jsxs)("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:["identity"===o&&(0,ec.jsx)(LZ,{listing:r,listingLoading:i}),"knowledge"===o&&(0,ec.jsx)(LW,{data:c,loading:d,error:m,highlightNodeId:v}),"history"===o&&(0,ec.jsx)("div",{className:"flex min-h-0 w-full flex-1 flex-col",children:(0,ec.jsx)(L3,{items:N,truncated:!!h?.truncated,loading:b||d,error:E||m,highlightExecId:n,onRefresh:()=>{A(),_()},onNavigateToObs:e=>{k(e),l("knowledge")}})})]})]})}let L6=n0("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]),L9=n0("calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]),L8=n0("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]),L7=n0("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]),De=n0("flask-conical",[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]]);function Dt(e){return e&&"object"==typeof e?e:{}}function Dn(e){return"pending"===e||"running"===e}function Dr(e){if(!e)return"";let t=new Date(e);return Number.isNaN(t.getTime())?"":new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(t)}function Da({task:e,onOpenThread:t}){let{runs:n,loaded:r,error:a}=function(e){let[t,n]=(0,eu.useState)([]),[r,a]=(0,eu.useState)(!1),[i,s]=(0,eu.useState)(null),o=(0,eu.useRef)(0),l=(0,eu.useRef)(!0),c=(0,eu.useRef)(new Map),u=e?.cron_id??null,d=e?.prompt??"";(0,eu.useEffect)(()=>{c.current=new Map},[u]);let p=(0,eu.useCallback)(async()=>{if(!u){n([]),a(!0);return}let e=oU();if(!e){n([]),a(!0);return}let t=++o.current,r=c.current;try{let a=await e.threads.search({metadata:{graph_id:i0},limit:50}),i=await Promise.all(a.map(async t=>{let n=r.get(t.thread_id);if(!1===n)return null;if(n&&!Dn(n.status)&&n.thread_updated_at===(t.updated_at??null))return n;try{let n,a,i,s,o,l,c,p,m,f=(await e.runs.list(t.thread_id,{limit:1}))[0];if(!f)return null;if(!function(e,t,n){if(Dt(t).cron_id===n.cron_id)return!0;let r=Dt(e),a=Dt(r.metadata);return a.cron_id===n.cron_id||Dt(Dt(Dt(r.kwargs).config).configurable).cron_id===n.cron_id||"scheduled_task"===a.run_kind&&"string"==typeof a.prompt&&""!==a.prompt&&a.prompt===n.prompt}(f,t.metadata,{cron_id:u,prompt:d}))return r.set(t.thread_id,!1),null;let h=(n=Dt(f),a=Dt(n.metadata),i=Dt(t.metadata),s=function(e){switch(e){case"pending":case"running":case"success":case"error":case"timeout":case"interrupted":return e;default:return"error"}}(n.status),o="string"==typeof n.created_at?n.created_at:null,l="string"==typeof n.updated_at?n.updated_at:null,c=o??t.created_at??new Date(0).toISOString(),p=Dn(s)?null:l??t.updated_at??null,m="manual"===i.trigger||"manual-run"===a.name?"manual":"cron",{thread_id:t.thread_id,run_id:"string"==typeof n.run_id?n.run_id:null,status:s,trigger:m,started_at:c,ended_at:p,thread_updated_at:t.updated_at??null});return r.set(t.thread_id,h),h}catch{return n||null}}));if(t!==o.current||!l.current)return;let c=i.filter(e=>!!e).sort((e,t)=>Date.parse(t.started_at)-Date.parse(e.started_at)).slice(0,20);n(c),s(null)}catch{t===o.current&&l.current&&s("Couldn't load task runs.")}finally{t===o.current&&l.current&&a(!0)}},[u,d]);return(0,eu.useEffect)(()=>{l.current=!0,a(!1),p();let e=setInterval(()=>{document.hidden||p()},3e3);return()=>{l.current=!1,clearInterval(e)}},[p]),{runs:t,loaded:r,error:i,refresh:p}}(e),i=o$(e),[s,o]=(0,eu.useState)(()=>Date.now()),[l,c]=(0,eu.useState)(null),[u,d]=(0,eu.useState)({}),[p,m]=(0,eu.useState)(null),f=(0,eu.useRef)(new Set),h=n.some(e=>Dn(e.status));(0,eu.useEffect)(()=>{if(!h)return;let e=setInterval(()=>o(Date.now()),1e3);return()=>clearInterval(e)},[h]),(0,eu.useEffect)(()=>{c(null),d({}),m(null),f.current.clear()},[e.cron_id]);let g=(0,eu.useMemo)(()=>n.find(e=>e.thread_id===l)??null,[n,l]),b=!!g&&Dn(g.status),y=g?.thread_updated_at??null;return(0,eu.useEffect)(()=>{if(!l)return;let e=`${l}:${y??""}`;if(!b&&f.current.has(e))return;let t=oU();if(!t)return;let n=!1,r=async()=>{try{let r=await t.threads.getState(l);if(n)return;let a=Array.isArray(r.values?.messages)?r.values.messages:[];d(e=>({...e,[l]:gH(a)})),m(null),b||f.current.add(e)}catch{n||m("Couldn't load run steps.")}};r();let a=b?setInterval(r,2500):null;return()=>{n=!0,a&&clearInterval(a)}},[l,b,y]),(0,ec.jsxs)("section",{className:"space-y-1.5",children:[(0,ec.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Activity"}),(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-[var(--color-surface)]",children:[!h&&(0,ec.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2",children:[(0,ec.jsx)("span",{className:"size-2 shrink-0 rounded-full bg-[var(--color-text-tertiary,var(--muted-foreground))] opacity-40","aria-hidden":"true"}),(0,ec.jsx)("p",{className:"min-w-0 truncate text-sm text-muted-foreground",children:e.enabled?i?`Next run ${oP(i)} \xb7 ${Dr(i)}`:"Not scheduled":"Paused"})]}),a?(0,ec.jsx)("p",{className:"px-3 py-2.5 text-sm text-destructive",role:"alert",children:a}):r?0===n.length?(0,ec.jsx)("p",{className:"px-3 py-2.5 text-sm text-muted-foreground",children:"No runs yet. Runs appear here after the schedule fires or you press Run now."}):(0,ec.jsx)("div",{className:"divide-y divide-border",children:n.map(e=>{var n;let r=e.thread_id===l,a=u[e.thread_id];return(0,ec.jsxs)("div",{children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>{var t;return t=e.thread_id,void(m(null),c(e=>e===t?null:t))},"aria-expanded":r,className:"flex w-full items-center gap-2 px-3 py-2 text-left transition-colors hover:bg-accent/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)("span",{className:rO("size-2 shrink-0 rounded-full",Dn(e.status)?"bg-[var(--color-success)] animate-pulse":"success"===e.status?"bg-[var(--color-success)]":"bg-[var(--color-error)]"),"aria-hidden":"true"}),"success"===e.status&&(0,ec.jsx)("span",{className:"sr-only",children:"Completed: "}),(0,ec.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm tabular-nums",children:function(e,t){if(Dn(e.status)){let n=RR(e.started_at,t);return n?`Running… ${n}`:"Running…"}let n=Dr(e.started_at),r=e.ended_at?RR(e.started_at,Date.parse(e.ended_at)):"",a="success"!==e.status?` \xb7 ${e.status}`:"";return[n,r].filter(Boolean).join(" · ")+a}(e,s)}),"manual"===e.trigger&&(0,ec.jsx)("span",{className:"shrink-0 rounded-full bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:"manual"}),r?(0,ec.jsx)(lA,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}):(0,ec.jsx)(fN,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"})]}),r&&(0,ec.jsxs)("div",{className:"border-t border-border/60 px-3 py-2",children:["interrupted"===e.status&&t&&(0,ec.jsxs)("button",{type:"button",onClick:()=>void t(e.thread_id),className:"mb-2 inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-xs text-foreground transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)(OA,{className:"size-3.5","aria-hidden":"true"}),"Open conversation to respond"]}),p?(0,ec.jsx)("p",{className:"text-xs text-destructive",role:"alert",children:p}):a?0===a.length?(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"No steps recorded yet."}):(0,ec.jsx)(Rx,{steps:a,running:"success"!==(n=e.status)&&"error"!==n&&"timeout"!==n,compact:!0}):(0,ec.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",role:"status",children:[(0,ec.jsx)(sp,{className:"size-3 animate-spin","aria-hidden":"true"}),"Loading steps…"]})]})]},e.thread_id)})}):(0,ec.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2.5 text-sm text-muted-foreground",role:"status",children:[(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Loading runs…"]})]})]})}let Di=[{icon:L7,label:"Daily Papers",description:"Track new ML papers against your research preferences.",name:"Daily Papers",prompt:"Summarise the latest ML papers from arXiv according to my research preferences with the paper-navigator skill. Focus on papers that are relevant to my current projects, explain why each one matters, and save the summary to ./daily-papers.md in the current workspace.",schedule:"0 9 * * *"},{icon:n0("repeat-2",[["path",{d:"m2 9 3-3 3 3",key:"1ltn5i"}],["path",{d:"M13 18H7a2 2 0 0 1-2-2V6",key:"1r6tfw"}],["path",{d:"m22 15-3 3-3-3",key:"4rnwn2"}],["path",{d:"M11 6h6a2 2 0 0 1 2 2v10",key:"2f72bc"}]]),label:"Weekly Research Review",description:"Summarise this week's research progress and future direction.",name:"Weekly Research Review",prompt:"Summarise this week's research progress across my active projects. Highlight key results, decisions, blockers, open questions, and what changed in my understanding. Then propose future research directions and concrete next steps. Save the review to ./weekly-research-review.md in the current workspace.",schedule:"0 17 * * 5"},{icon:Ol,label:"Weekly Research Plan",description:"Draft a Monday plan for the week's research priorities.",name:"Weekly Research Plan",prompt:"Draft this week's research plan based on my active projects, recent progress, project files, and open questions. Prioritise the most important research goals, propose concrete experiments or reading tasks, identify risks, and write a practical schedule for the week. Save the plan to ./weekly-research-plan.md in the current workspace.",schedule:"0 8 * * 1"},{icon:De,label:"Experiment Backlog",description:"Convert open questions into testable experiment ideas.",name:"Experiment Backlog",prompt:"Review my active project files, recent research notes, and open questions. Turn the most important unresolved ideas into a prioritised experiment backlog with hypotheses, expected signal, required data or code, estimated effort, and success criteria. Save it to ./experiment-backlog.md in the current workspace.",schedule:"0 10 * * 2"}];function Ds(e){if(!e)return"Not scheduled";let t=new Date(e);return Number.isNaN(t.getTime())?"Unknown":new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(t)}function Do(e){if(!e)return"";let t=new Date(e);return Number.isNaN(t.getTime())?"":new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}).format(t)}function Dl({children:e,htmlFor:t}){return(0,ec.jsx)("label",{htmlFor:t,className:"text-xs font-medium text-muted-foreground",children:e})}function Dc({value:e,onChange:t,error:n,timeZone:r}){let a=n=>t({...e,...n}),i=rO(pB,"sm:min-w-40"),s=rO(pB,"sm:w-28");return(0,ec.jsxs)("div",{className:"space-y-2",children:[(0,ec.jsxs)("div",{className:"grid gap-2 sm:grid-cols-[minmax(9rem,1fr)_auto_auto_auto_auto] sm:items-center",children:[(0,ec.jsxs)(dY,{value:e.frequency,onValueChange:e=>{e&&a({frequency:e})},children:[(0,ec.jsx)(pI,{"aria-label":"Schedule frequency",className:i,children:(0,ec.jsx)(dQ,{})}),(0,ec.jsxs)(pO,{className:p$,children:[(0,ec.jsx)(pD,{value:"daily",children:"Every day"}),(0,ec.jsx)(pD,{value:"weekly",children:"Every week"}),(0,ec.jsx)(pD,{value:"monthly",children:"Every month"}),(0,ec.jsx)(pD,{value:"custom",children:"Custom cron"})]})]}),"custom"!==e.frequency&&(0,ec.jsxs)(ec.Fragment,{children:["weekly"===e.frequency&&(0,ec.jsxs)(dY,{value:String(e.dayOfWeek),onValueChange:e=>{e&&a({dayOfWeek:Number(e)})},children:[(0,ec.jsx)(pI,{"aria-label":"Day of week",className:s,children:(0,ec.jsx)(dQ,{})}),(0,ec.jsx)(pO,{className:p$,children:ow.map((e,t)=>(0,ec.jsx)(pD,{value:String(t),children:e},e))})]}),"monthly"===e.frequency&&(0,ec.jsxs)(dY,{value:String(e.dayOfMonth),onValueChange:e=>{e&&a({dayOfMonth:Number(e)})},children:[(0,ec.jsx)(pI,{"aria-label":"Day of month",className:s,children:(0,ec.jsx)(dQ,{})}),(0,ec.jsx)(pO,{className:p$,children:Array.from({length:28},(e,t)=>t+1).map(e=>(0,ec.jsxs)(pD,{value:String(e),children:["Day ",e]},e))})]}),(0,ec.jsx)("span",{className:"hidden text-xs text-muted-foreground sm:block",children:"at"}),(0,ec.jsxs)("div",{className:"grid grid-cols-[1fr_auto_1fr] items-center gap-1 sm:col-span-2 sm:w-32",children:[(0,ec.jsx)(r3,{"aria-label":"Hour",type:"number",min:0,max:23,value:e.hour,onChange:e=>a({hour:Math.trunc(Number(e.target.value))}),className:"h-9 text-center font-mono tabular-nums"}),(0,ec.jsx)("span",{className:"font-mono text-muted-foreground",children:":"}),(0,ec.jsx)(r3,{"aria-label":"Minute",type:"number",min:0,max:59,value:e.minute,onChange:e=>a({minute:Math.trunc(Number(e.target.value))}),className:"h-9 text-center font-mono tabular-nums"})]})]})]}),"custom"===e.frequency&&(0,ec.jsx)(r3,{type:"text",value:e.custom,onChange:e=>a({custom:e.target.value}),placeholder:"0 9 * * 1-5",spellCheck:!1,"aria-invalid":!!n,"aria-describedby":"schedule-cron-help",className:"h-9 font-mono text-sm"}),(0,ec.jsxs)("div",{id:"schedule-cron-help",className:rO("flex items-center gap-1.5 text-xs",n?"text-destructive":"text-muted-foreground"),children:[(0,ec.jsx)(L8,{className:"size-3.5 shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"min-w-0 truncate",children:n??oM(oI(e),r)})]})]})}function Du({template:e,onSelect:t,compact:n,disabled:r}){let a=e.icon;return(0,ec.jsxs)("button",{type:"button",onClick:()=>t(e),disabled:r,className:rO("hover:border-[var(--brand)]/40 group flex w-full min-w-0 items-start gap-2 rounded-md border border-border bg-[var(--color-surface)] text-left transition-colors hover:bg-accent/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",n?"px-2.5 py-2":"px-3 py-2.5"),children:[(0,ec.jsx)("span",{className:"mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-[var(--brand)] group-hover:bg-background",children:(0,ec.jsx)(a,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("span",{className:"block truncate text-sm font-medium",children:e.label}),!n&&(0,ec.jsx)("span",{className:"mt-0.5 line-clamp-2 text-xs leading-snug text-muted-foreground",children:e.description}),(0,ec.jsx)("span",{className:"mt-1 block text-[11px] text-muted-foreground",children:oO(e.schedule)})]})]})}function Dd({initialTemplate:e,initialTask:t,onSaved:n,onCancel:r,onBusy:a}){let i,s=!!t,[o,l]=(0,eu.useState)(t?.name??e?.name??""),[c,u]=(0,eu.useState)(t?.prompt??e?.prompt??""),[d,p]=(0,eu.useState)(()=>t?oR(t.schedule):e?oR(e.schedule):{...oT}),[m,f]=(0,eu.useState)(!1),h=(0,eu.useRef)(null),g=(0,eu.useMemo)(()=>t?oI(oR(t.schedule)):null,[t]),b=oI(d),y=t&&"custom"!==d.frequency&&b===g?t.schedule.trim():b,E=(0,eu.useRef)("custom"===d.frequency),x="custom"===d.frequency&&y!==t?.schedule.trim()?(i=y.trim())?oN(i)?null:5!==i.split(/\s+/).length?"Use minute hour day month weekday, or @daily.":null:"Enter a cron expression.":null,v=t?.timezone||oL(),k=!!t&&oD(t?.timezone)!==oD(v),S=!t||k||o.trim()!==t.name.trim()||c.trim()!==t.prompt.trim()||y!==t.schedule.trim(),{projects:T,current:w,refreshing:_}=sd(),A=("ready"===T.status?T.projects:[]).filter(e=>!e.missing),[N,I]=(0,eu.useState)(null),C=[N,w?.key].find(e=>e&&A.some(t=>t.key===e))??A[0]?.key??null,R=C&&!_?{assistantId:i1(i0,C),workspaceDir:C}:null,O=oX(),L=oZ();(0,eu.useEffect)(()=>(a(m),()=>a(!1)),[m,a]);let D=!!((t||R)&&o.trim()&&c.trim()&&!x&&S);(0,eu.useEffect)(()=>{h.current?.focus()},[]);let M=async e=>{if(e.preventDefault(),!o.trim())return void e6.c.error("Task name is required.");if(!c.trim())return void e6.c.error("Task description is required.");if(x)return void e6.c.error(x);if(!S)return;let r=t?null:R;if(t||r&&L()){f(!0);try{if(t){let e=await oW({cronId:t.cron_id,name:o.trim(),prompt:c.trim(),schedule:y,timezone:t.timezone,input:t.input});e6.c.success(`"${o.trim()}" updated.`),n(e)}else r&&(await oG({name:o.trim(),prompt:c.trim(),schedule:y,target:r}),e6.c.success(`"${o.trim()}" scheduled.`),n())}catch(e){if(t&&oY(e)){e6.c.error(`Couldn't find "${t.name}"; it may have been deleted.`),n();return}t||O(e),e6.c.error(e instanceof Error?e.message:s?"Failed to update scheduled task.":"Failed to create scheduled task.")}finally{f(!1)}}};return(0,ec.jsxs)("form",{onSubmit:M,className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center gap-2 border-b border-border px-3 py-2.5 sm:px-5",children:[(0,ec.jsx)("button",{type:"button",onClick:r,disabled:m,"aria-label":"Back to scheduled tasks",className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring md:hidden",children:(0,ec.jsx)(L6,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("h2",{className:"truncate text-sm font-semibold",children:s?"Edit scheduled task":"New scheduled task"}),(0,ec.jsx)("p",{className:"truncate text-xs text-muted-foreground",children:"EvoScientist will run this task description unattended."})]})]}),(0,ec.jsx)(hp,{className:"min-h-0 flex-1",children:(0,ec.jsxs)("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-4 p-3 sm:p-5",children:[(0,ec.jsxs)("div",{className:"space-y-1.5",children:[(0,ec.jsx)(Dl,{htmlFor:"scheduled-task-name",children:"Task name"}),(0,ec.jsx)(r3,{id:"scheduled-task-name",ref:h,type:"text",value:o,onChange:e=>l(e.target.value),placeholder:"Daily Briefing",autoComplete:"off"})]}),!s&&C&&(0,ec.jsxs)("div",{className:"space-y-1.5",children:[(0,ec.jsx)(Dl,{children:"Project"}),(0,ec.jsxs)(dY,{value:C,onValueChange:e=>{e&&I(e)},children:[(0,ec.jsx)(pI,{"aria-label":"Project",className:rO(pB,"sm:min-w-56"),children:(0,ec.jsx)(dQ,{})}),(0,ec.jsx)(pO,{className:p$,children:A.map(e=>(0,ec.jsx)(pD,{value:e.key,title:e.key,children:e.name},e.key))})]})]}),(0,ec.jsxs)("div",{className:"space-y-1.5",children:[(0,ec.jsx)(Dl,{htmlFor:"scheduled-task-prompt",children:"Task description"}),(0,ec.jsx)(bG,{id:"scheduled-task-prompt",value:c,onChange:e=>u(e.target.value),placeholder:"Describe what EvoScientist should do each time this task runs...",rows:9,className:"min-h-52 resize-y leading-relaxed"})]}),(0,ec.jsxs)("div",{className:"space-y-1.5",children:[(0,ec.jsx)(Dl,{children:"Schedule"}),(0,ec.jsx)(Dc,{value:d,onChange:e=>{let t="custom"===d.frequency;t&&"custom"===e.frequency&&e.custom!==d.custom&&(E.current=""!==e.custom.trim()),p(t||"custom"!==e.frequency||E.current?e:{...e,custom:y})},error:x,timeZone:v}),k&&(0,ec.jsxs)("p",{className:"text-xs text-muted-foreground",children:["This task has no time zone and runs on UTC time. Saving it switches it to ",oD(v)," time."]})]})]})}),(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center justify-end gap-2 border-t border-border bg-background px-3 py-2.5 sm:px-5",children:[(0,ec.jsx)(rQ,{type:"button",variant:"outline",size:"sm",onClick:r,disabled:m,children:"Cancel"}),(0,ec.jsxs)(rQ,{type:"submit",size:"sm",disabled:m||!D,children:[m?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin"}):s?(0,ec.jsx)(fM,{className:"size-3.5"}):(0,ec.jsx)(fF,{className:"size-3.5"}),s?"Save changes":"Create task"]})]})]})}function Dp({project:e,task:t,onBack:n,onEdit:r,onChanged:a,onDeleted:i,onMissing:s,onBusy:o,onOpenThread:l}){let c,[u,d]=(0,eu.useState)(!1),[p,m]=(0,eu.useState)(!1);(0,eu.useEffect)(()=>(o(p),()=>o(!1)),[p,o]);let[f,h]=(0,eu.useState)(!1),[g,b]=(0,eu.useState)(!1),y=o$(t),E=Do(y),x=e&&!e.missing?e.key:null,v=(0,eu.useMemo)(()=>x?{assistantId:t.assistantId,workspaceDir:x}:null,[x,t.assistantId]),k=e?e.missing?`${e.name}'s folder is missing: the task won't run until the folder is back.`:null:"This task's project isn't on this backend.",S=oX(),T=oZ(),w=(0,eu.useCallback)(async()=>{if(v&&!k&&T()){d(!0);try{await oK(t,v),e6.c.success(`"${t.name}" started.`)}catch(e){S(e),e6.c.error(e instanceof Error?e.message:"Failed to start the task.")}finally{d(!1)}}},[t,v,k,S,T]),_=(0,eu.useCallback)(async()=>{m(!0);try{let e=await oV(t,!t.enabled);e6.c.success(e.enabled?`"${t.name}" resumed.`:`"${t.name}" paused.`),a(e)}catch(e){if(oY(e)){e6.c.error(`Couldn't find "${t.name}"; it may have been deleted.`),s();return}e6.c.error(e instanceof Error?e.message:t.enabled?"Failed to pause the task.":"Failed to resume the task.")}finally{m(!1)}},[t,a,s]),A=(0,eu.useCallback)(async()=>{b(!0);try{await oq(t.cron_id),e6.c.success(`"${t.name}" deleted.`),h(!1),i()}catch(e){if(oY(e)){e6.c.error(`Couldn't find "${t.name}"; it may have been deleted.`),h(!1),i();return}e6.c.error(e instanceof Error?e.message:"Failed to delete the task.")}finally{b(!1)}},[t,i]);return(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center gap-2 border-b border-border px-3 py-2.5 sm:px-5",children:[(0,ec.jsx)("button",{type:"button",onClick:n,disabled:p,"aria-label":"Back to scheduled tasks",className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring md:hidden",children:(0,ec.jsx)(L6,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("h2",{className:"truncate text-sm font-semibold",children:t.name}),(0,ec.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[oM(t.schedule,t.timezone),e&&(0,ec.jsx)("span",{title:e.key,children:` \xb7 ${e.name}`})]})]}),(0,ec.jsxs)(rQ,{size:"sm",onClick:w,disabled:u||p||!v||!!k||!t.prompt.trim(),title:k??void 0,children:[u?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin"}):(0,ec.jsx)(Oz,{className:"size-3.5"}),"Run now"]})]}),(0,ec.jsx)(hp,{className:"min-h-0 flex-1",children:(0,ec.jsxs)("div",{className:"mx-auto w-full max-w-3xl space-y-4 p-3 sm:p-5",children:[(0,ec.jsxs)("div",{className:"grid gap-2 sm:grid-cols-3",children:[(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-[var(--color-surface)] px-3 py-2",children:[(0,ec.jsx)("p",{className:"text-[11px] font-medium uppercase text-muted-foreground",children:"Next run"}),(0,ec.jsx)("p",{className:"mt-1 truncate text-sm font-medium tabular-nums",title:E,children:t.enabled?y?`${oP(y)} \xb7 ${Ds(y)}`:"Not scheduled":"Paused"})]}),(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-[var(--color-surface)] px-3 py-2",children:[(0,ec.jsx)("p",{className:"text-[11px] font-medium uppercase text-muted-foreground",children:"Cron"}),(0,ec.jsx)("p",{className:"mt-1 truncate font-mono text-sm",children:t.schedule})]}),(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-[var(--color-surface)] px-3 py-2",children:[(0,ec.jsx)("p",{className:"text-[11px] font-medium uppercase text-muted-foreground",children:"Created"}),(0,ec.jsx)("p",{className:"mt-1 truncate text-sm",children:Number.isNaN((c=new Date(t.created_at)).getTime())?"Unknown":new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric"}).format(c)})]})]}),(0,ec.jsxs)("section",{className:"space-y-1.5",children:[(0,ec.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Task description"}),(0,ec.jsx)("div",{className:"max-h-[min(38rem,55vh)] overflow-auto rounded-md border border-border bg-[var(--color-surface)] px-3 py-2.5",children:t.prompt?(0,ec.jsx)("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed",children:t.prompt}):(0,ec.jsx)("p",{className:"text-sm italic text-muted-foreground",children:"No task description stored."})})]}),(0,ec.jsx)(Da,{task:t,onOpenThread:l})]})}),(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center justify-between gap-2 border-t border-border bg-background px-3 py-2.5 sm:px-5",children:[(0,ec.jsx)("p",{className:"hidden truncate text-xs text-muted-foreground sm:block",children:k??"Manual runs create a scheduler thread immediately."}),(0,ec.jsxs)("div",{className:"ml-auto flex items-center gap-2",children:[(0,ec.jsxs)(rQ,{variant:"outline",size:"sm",onClick:()=>void _(),disabled:p,"aria-label":`${t.enabled?"Pause":"Resume"} scheduled task "${t.name}"`,children:[p?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin"}):t.enabled?(0,ec.jsx)(O$,{className:"size-3.5"}):(0,ec.jsx)(Oz,{className:"size-3.5"}),t.enabled?"Pause":"Resume"]}),(0,ec.jsxs)(rQ,{variant:"outline",size:"sm",onClick:r,disabled:p,"aria-label":`Edit scheduled task "${t.name}"`,children:[(0,ec.jsx)(fM,{className:"size-3.5"}),"Edit"]}),(0,ec.jsxs)(rQ,{variant:"outline",size:"sm",onClick:()=>h(!0),disabled:p,"aria-label":`Delete scheduled task "${t.name}"`,className:"text-destructive hover:border-destructive hover:text-destructive",children:[(0,ec.jsx)(fz,{className:"size-3.5"}),"Delete"]})]})]})]}),(0,ec.jsx)(rL,{open:f,onOpenChange:e=>{g||h(e)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-sm",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Delete scheduled task?"}),(0,ec.jsxs)(rB,{children:["“",t.name,"” will stop running. This cannot be undone."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",size:"sm",onClick:()=>h(!1),disabled:g,children:"Cancel"}),(0,ec.jsxs)(rQ,{variant:"destructive",size:"sm",onClick:A,disabled:g,"aria-label":`Confirm delete scheduled task "${t.name}"`,children:[g&&(0,ec.jsx)(sp,{className:"size-3.5 animate-spin"}),"Delete"]})]})]})})]})}function Dm({task:e,active:t,onSelect:n,disabled:r}){let a=o$(e);return(0,ec.jsxs)("button",{type:"button",onClick:n,disabled:r,"aria-current":t,className:rO("flex w-full items-start gap-2 rounded-md px-2 py-2 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-60",t?"bg-accent":"hover:bg-accent/60"),children:[(0,ec.jsx)("span",{className:rO("mt-1 flex size-2 shrink-0 rounded-full",e.enabled?"bg-[var(--brand)]":"bg-[var(--color-text-tertiary,var(--muted-foreground))] opacity-40")}),(0,ec.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("span",{className:"block truncate text-sm font-medium",children:e.name}),(0,ec.jsx)("span",{className:"mt-0.5 block truncate text-xs text-muted-foreground",children:oM(e.schedule,e.timezone)}),(0,ec.jsxs)("span",{className:"mt-1 flex min-w-0 items-center gap-1.5 text-[11px] text-muted-foreground",children:[(0,ec.jsx)(fI,{className:"size-3 shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"truncate tabular-nums",title:Do(a),children:e.enabled?a?oP(a):"No next run":"Paused"})]})]}),(0,ec.jsx)(fN,{className:"mt-1 size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"})]})}function Df({onOpenThread:e}){let{tasks:t,loading:n,error:r,refresh:a}=function(){let[e,t]=(0,eu.useState)([]),[n,r]=(0,eu.useState)(!0),[a,i]=(0,eu.useState)(null),[s,o]=(0,eu.useState)(0),l=(0,eu.useRef)(0),c=(0,eu.useCallback)(()=>{l.current+=1,r(!0),o(e=>e+1)},[]);return(0,eu.useEffect)(()=>{let e=!1;return oH().then(n=>{e||l.current!==s||(t(n),i(null))}).catch(n=>{!e&&l.current===s&&(i(n instanceof Error&&("TimeoutError"===n.name||n.message.startsWith("TimeoutError"))?"The backend didn't answer.":n instanceof Error?n.message:"Failed to load scheduled tasks."),t([]))}).finally(()=>{e||l.current!==s||r(!1)}),()=>{e=!0}},[s]),{tasks:e,loading:n,error:a,refresh:c}}(),[i,s]=(0,eu.useState)({kind:"empty"}),[o,l]=(0,eu.useState)(!1),[c,u]=(0,eu.useState)(""),d=(0,eu.useRef)(0),p=(0,eu.useRef)(0),{projects:m}=sd(),f=(0,eu.useMemo)(()=>"ready"===m.status?m.projects:[],[m]),h=(0,eu.useMemo)(()=>i7(f),[f]),g="pending"===m.status,b=(0,eu.useCallback)(e=>h.get(e.assistantId)??null,[h]),y=(0,eu.useMemo)(()=>se(t,f),[t,f]),E=o||n,[x,v]=(0,eu.useState)(!1);n||x||v(!0);let k=n&&!x||g,S=(0,eu.useMemo)(()=>[...y].sort((e,t)=>{let n=o$(e),r=o$(t),a=n?new Date(n).getTime():0,i=r?new Date(r).getTime():0;return a&&i&&a!==i?a-i:a&&!i?-1:!a&&i?1:e.name.localeCompare(t.name)}),[y]),T=(0,eu.useMemo)(()=>{let e=c.trim().toLowerCase();return e?S.filter(t=>[t.name,t.prompt,t.schedule,oM(t.schedule,t.timezone),t.enabled?"":"paused",o$(t)?Ds(o$(t)):""].join(" ").toLowerCase().includes(e)):S},[c,S]),w=(0,eu.useMemo)(()=>f.map(e=>({project:e,tasks:T.filter(t=>b(t)===e)})).filter(e=>e.tasks.length>0),[f,T,b]),_=S.find(e=>o$(e)),A=_?o$(_):null,N="detail"===i.kind?i.task.cron_id:null;(0,eu.useEffect)(()=>{if(!N||n||r||g)return;let e=y.find(e=>e.cron_id===N);s(e?{kind:"detail",task:e}:{kind:"empty"})},[r,n,g,N,y]);let I=(0,eu.useCallback)(e=>{d.current+=1,s({kind:"create",template:e,createId:d.current})},[]),C=(0,eu.useCallback)(e=>{p.current+=1,s({kind:"edit",task:e,editId:p.current})},[]),R=(0,eu.useCallback)(e=>{a(),s(e?{kind:"detail",task:e}:{kind:"empty"})},[a]),O=(0,eu.useCallback)(e=>{a(),s({kind:"detail",task:e})},[a]),L=(0,eu.useCallback)(()=>{a(),s({kind:"empty"})},[a]);return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col bg-background",children:[(0,ec.jsxs)("header",{className:"flex flex-shrink-0 items-center justify-between gap-3 border-b border-border px-3 py-2.5 sm:px-4",children:[(0,ec.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,ec.jsx)("span",{className:"flex size-8 shrink-0 items-center justify-center rounded-md bg-accent text-[var(--brand)]",children:(0,ec.jsx)(L8,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("div",{className:"min-w-0",children:[(0,ec.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,ec.jsx)("h1",{className:"truncate text-sm font-semibold",children:"Scheduled"}),!k&&(0,ec.jsx)("span",{className:"rounded-full bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:y.length})]}),(0,ec.jsx)("p",{className:"truncate text-xs text-muted-foreground",children:A?`Next: ${oP(A)}`:"Recurring EvoScientist tasks"})]})]}),(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:[(0,ec.jsx)("button",{type:"button",onClick:a,disabled:n||o,"aria-label":"Refresh scheduled tasks",title:"Refresh scheduled tasks",className:"rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:(0,ec.jsx)(LU,{className:rO("size-4",n&&"animate-spin"),"aria-hidden":"true"})}),(0,ec.jsxs)(rQ,{size:"sm",onClick:()=>I(),disabled:E,children:[(0,ec.jsx)(fF,{className:"size-3.5"}),(0,ec.jsx)("span",{className:"hidden sm:inline",children:"New task"}),(0,ec.jsx)("span",{className:"sm:hidden",children:"New"})]})]})]}),(0,ec.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,ec.jsxs)("aside",{className:rO("w-full min-w-0 flex-col border-r border-border md:flex md:w-72 md:flex-shrink-0","empty"===i.kind?"flex":"hidden"),children:[(0,ec.jsx)("div",{className:"flex-shrink-0 space-y-2 border-b border-border p-2.5",children:(0,ec.jsxs)("div",{className:"relative",children:[(0,ec.jsx)(f$,{className:"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground","aria-hidden":"true"}),(0,ec.jsx)(r3,{type:"search",name:"scheduled-search",value:c,onChange:e=>u(e.target.value),placeholder:"Search scheduled tasks...","aria-label":"Search scheduled tasks",autoComplete:"off",spellCheck:!1,className:"h-9 pl-8 pr-8"}),c&&(0,ec.jsx)("button",{type:"button",onClick:()=>u(""),"aria-label":"Clear scheduled task search",className:"absolute right-1 top-1/2 -translate-y-1/2 rounded p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(n1,{className:"size-3.5","aria-hidden":"true"})})]})}),(0,ec.jsx)(hp,{className:"h-0 flex-1",children:k?(0,ec.jsxs)("div",{className:"flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading tasks..."]}):r?(0,ec.jsxs)("div",{role:"alert",className:"space-y-3 p-3",children:[(0,ec.jsx)("p",{className:"text-sm text-destructive",children:r}),(0,ec.jsxs)(rQ,{disabled:E,variant:"outline",size:"sm",onClick:a,children:[(0,ec.jsx)(LU,{className:"size-3.5"}),"Retry"]})]}):0===y.length?(0,ec.jsxs)("div",{className:"space-y-4 p-3",children:[(0,ec.jsxs)("div",{className:"rounded-md border border-dashed border-border bg-[var(--color-surface)] px-3 py-5 text-center",children:[(0,ec.jsx)(L9,{className:"mx-auto size-7 text-muted-foreground/60","aria-hidden":"true"}),(0,ec.jsx)("p",{className:"mt-2 text-sm font-medium",children:"No scheduled tasks"}),(0,ec.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"Start from a template or create one from scratch."})]}),(0,ec.jsxs)("div",{className:"space-y-2",children:[(0,ec.jsx)("p",{className:"px-1 text-[11px] font-semibold uppercase text-muted-foreground",children:"Templates"}),Di.map(e=>(0,ec.jsx)(Du,{template:e,onSelect:I,disabled:E},e.label))]})]}):0===T.length?(0,ec.jsxs)("div",{className:"space-y-3 p-4 text-center",children:[(0,ec.jsx)("p",{className:"text-sm font-medium",children:"No matching tasks"}),(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"Try a task name, schedule, or description keyword."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",onClick:()=>u(""),children:"Clear search"})]}):(0,ec.jsxs)("div",{className:"p-1.5",children:[(0,ec.jsxs)("div",{className:"mb-2 flex items-center justify-between px-2 py-1",children:[(0,ec.jsx)("p",{className:"text-[11px] font-semibold uppercase text-muted-foreground",children:"Tasks"}),(0,ec.jsx)("p",{className:"text-[11px] text-muted-foreground",children:T.length})]}),w.map(({project:e,tasks:t})=>(0,ec.jsxs)("section",{"aria-label":`Tasks in ${e.name}`,className:"mb-2",children:[(0,ec.jsxs)("h3",{className:"m-0 flex items-center gap-1.5 px-2 py-1 text-xs font-semibold",title:e.key,children:[(0,ec.jsx)("span",{className:"truncate",children:e.name}),e.missing&&(0,ec.jsx)("span",{className:"rounded bg-destructive/10 px-1 py-px text-[11px] font-medium text-destructive",children:"folder missing"})]}),(0,ec.jsx)("div",{className:"flex flex-col gap-0.5",children:t.map(e=>{let t="detail"===i.kind&&i.task.cron_id===e.cron_id;return(0,ec.jsx)(Dm,{task:e,active:t,onSelect:()=>s({kind:"detail",task:e}),disabled:E},e.cron_id)})})]},e.key)),(0,ec.jsxs)("div",{className:"mt-3 space-y-2 border-t border-border px-1 py-3",children:[(0,ec.jsx)("p",{className:"px-1 text-[11px] font-semibold uppercase text-muted-foreground",children:"Templates"}),(0,ec.jsx)("div",{className:"grid gap-1.5",children:Di.map(e=>(0,ec.jsx)(Du,{template:e,onSelect:I,disabled:E,compact:!0},e.label))})]})]})})]}),(0,ec.jsxs)("section",{className:rO("min-w-0 flex-1 flex-col","empty"===i.kind?"hidden md:flex":"flex"),children:["empty"===i.kind&&(0,ec.jsx)("div",{className:"flex flex-1 items-center justify-center p-5",children:(0,ec.jsxs)("div",{className:"w-full max-w-lg space-y-4",children:[(0,ec.jsxs)("div",{className:"space-y-1 text-center",children:[(0,ec.jsx)(L8,{className:"mx-auto size-9 text-muted-foreground/40","aria-hidden":"true"}),(0,ec.jsx)("p",{className:"text-sm font-medium",children:"Pick a scheduled task"}),(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"Pick a template below, or ask EvoScientist in chat to create a recurring task."})]}),y.length>0&&(0,ec.jsx)("div",{className:"mx-auto grid w-full max-w-xl gap-2 sm:grid-cols-2",children:Di.map(e=>(0,ec.jsx)(Du,{template:e,onSelect:I,disabled:E,compact:!0},e.label))})]})}),"create"===i.kind&&(0,ec.jsx)(Dd,{initialTemplate:i.template,onSaved:R,onCancel:()=>s({kind:"empty"}),onBusy:l},i.createId),"edit"===i.kind&&(0,ec.jsx)(Dd,{initialTask:i.task,onSaved:R,onCancel:()=>s({kind:"detail",task:i.task}),onBusy:l},i.editId),"detail"===i.kind&&(0,ec.jsx)(Dp,{project:b(i.task),task:i.task,onBack:()=>s({kind:"empty"}),onEdit:()=>C(i.task),onChanged:O,onDeleted:L,onMissing:L,onBusy:l,onOpenThread:e},i.task.cron_id)]})]})]})}let Dh=n0("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),Dg=n0("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);function Db(){let{resolvedTheme:e,setTheme:t}=(0,CF.useTheme)(),[n,r]=(0,eu.useState)(!1);(0,eu.useEffect)(()=>r(!0),[]);let a=n&&"dark"===e;return(0,ec.jsx)(rQ,{variant:"ghost",size:"icon",className:"size-8 sm:size-9",onClick:()=>t(a?"light":"dark"),"aria-label":a?"Switch to light mode":"Switch to dark mode",title:a?"Switch to light mode":"Switch to dark mode",children:a?(0,ec.jsx)(Dh,{className:"size-5","aria-hidden":"true"}):(0,ec.jsx)(Dg,{className:"size-5","aria-hidden":"true"})})}let Dy={checking:{dot:"bg-[var(--color-warning)]",label:"Connecting…",pulse:!0},online:{dot:"bg-[var(--color-success)]",label:"Connected",pulse:!1},offline:{dot:"bg-[var(--color-error)]",label:"Offline",pulse:!1}};function DE(e){return e.trim().replace(/\/+$/,"")}async function Dx(e){let t=new AbortController,n=setTimeout(()=>t.abort(),4e3);try{return(await fetch(`${e}/info`,{signal:t.signal,cache:"no-store"})).ok}catch{return!1}finally{clearTimeout(n)}}function Dv({deploymentUrl:e,onReconnect:t,onOnline:n}){let[r,a]=(0,eu.useState)("checking"),i=(0,eu.useRef)("checking");i.current=r;let s=(0,eu.useRef)(n);s.current=n;let[o,l]=(0,eu.useState)(null),[c,u]=(0,eu.useState)(null),[d,p]=(0,eu.useState)(null),[m,f]=(0,eu.useState)(!0);(0,eu.useEffect)(()=>{if("function"!=typeof window.matchMedia)return;let e=window.matchMedia("(min-width: 420px)"),t=()=>f(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]);let h=(0,eu.useRef)(0),g=(0,eu.useRef)(!0),b=(0,eu.useRef)(null),y=(0,eu.useCallback)(async t=>{let n=DE(e);try{let e=await fetch("/api/evosci-config",{cache:"no-store"}),r=await e.json().catch(()=>null),a=r?.deploymentUrl?DE(r.deploymentUrl):"",i=function(e,t){if(!e||null===t||or(e.hostname))return null;let n="https:"===e.protocol?"https:":"http:";return`${n}//${e.hostname}:${t}`}(window.location,"number"==typeof r?.port?r.port:null);if(t!==h.current||!g.current)return;for(let e of[i??"",a].filter((e,t,r)=>e&&e!==n&&r.indexOf(e)===t)){let n=await Dx(e);if(t!==h.current||!g.current)return;if(n)return void u(e)}u(null)}catch{t===h.current&&g.current&&u(null)}},[e]),E=(0,eu.useCallback)(async()=>{let t=++h.current,n=DE(e);if(!n){t===h.current&&g.current&&(l(null),a("offline"),p(null),u(null));return}b.current?.abort();let r=new AbortController;b.current=r;let o=setTimeout(()=>r.abort(),4e3);try{let e=await fetch(`${n}/info`,{signal:r.signal,cache:"no-store"});if(t!==h.current||!g.current)return;if(!e.ok){a("offline"),p("http"),y(t);return}let o=await e.json().catch(()=>null);if(t!==h.current||!g.current)return;l(o),"offline"===i.current&&s.current?.(),a("online"),u(null)}catch{t===h.current&&g.current&&(a("offline"),p(r.signal.aborted?"timeout":"network"),y(t))}finally{clearTimeout(o)}},[e,y]);(0,eu.useEffect)(()=>{g.current=!0,a("checking"),E();let e=setInterval(()=>{document.hidden||E()},1e4),t=()=>E(),n=()=>{document.hidden||E()};return window.addEventListener("focus",t),window.addEventListener("online",t),document.addEventListener("visibilitychange",n),()=>{g.current=!1,b.current?.abort(),clearInterval(e),window.removeEventListener("focus",t),window.removeEventListener("online",t),document.removeEventListener("visibilitychange",n)}},[E]);let x=Dy[r],v=void 0!==t&&m,k="offline"===r&&null!==c&&v;(0,eu.useEffect)(()=>{if(!k)return;let e=document.documentElement;return e.setAttribute("data-reconnect",""),()=>e.removeAttribute("data-reconnect")},[k]);let S="online"===r?`Connected to ${e}${o?.version?` \xb7 langgraph ${o.version}`:""}`:"offline"===r?function(e,t,n,r=null,a=!0){let i="Click to retry.",s=function(e){try{let t=new URL(e);return"http:"!==t.protocol&&"https:"!==t.protocol||!t.hostname||t.username||t.password?null:t.hostname.toLowerCase()}catch{return null}}(e),o=null===s||or(s)||s===t?.hostname.toLowerCase();if(r&&o)return`Can't reach the backend at ${e}, but one answers at ${r}: ${a?"use Reconnect":"enter it as the Deployment URL in Settings"}. ${i}`;let l=r&&!a?` A backend answers at ${r}; enter it as the Deployment URL in Settings to use it.`:"",c=`Can't reach the backend at ${e}. Is "EvoSci deploy" running?${l} ${i}`;if("network"!==n||!t||null===s)return c;let u=or(t.hostname),d=or(s),p=!d&&!on.test(s);if(u&&!p)return c;if(d)return`Can't reach the backend at ${e} from this page, ${t.origin}. If it is running, it refuses pages it does not trust: add ${t.origin} to backend_allowed_origins (comma-separated) in its config.yaml. On another device, ${s} is that device itself, so also run \`EvoSci config set langgraph_dev_host 0.0.0.0\` on the backend's machine. Restart the backend after these changes; on another device, then `+(a?"use Reconnect here once it appears or ":"")+"enter the backend machine's address in Settings. On the backend's machine, opening the WebUI on localhost usually works without any change. "+i;let m=[p&&`requests addressed to ${s}`,!u&&`${p?"from ":""}pages on ${t.origin}`].filter(Boolean).join(" or ");return`Can't reach the backend at ${e}. If it is running, it may be refusing ${m}; its log (~/.config/evoscientist/langgraph_dev.log) then shows "Refused a request" with the fix.${l} ${i}`}(e,window.location,d,c,v):`Checking connection to ${e}…`;return(0,ec.jsxs)("div",{className:"flex items-center gap-1",children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",onClick:E,title:S,"aria-label":S,className:"h-8 gap-1.5 px-2 text-xs font-normal text-muted-foreground",children:[(0,ec.jsx)("span",{className:`size-2 shrink-0 rounded-full ${x.dot} ${x.pulse?"animate-pulse":""}`,"aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden sm:inline",children:x.label})]}),k&&(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",onClick:()=>{c&&(u(null),a("checking"),t?.(c))},title:`Backend detected at ${c}. Click to reconnect.`,"aria-label":`Reconnect to detected backend ${c}`,className:"h-8 gap-1 px-2 text-xs font-medium text-[var(--brand)] hover:text-[var(--brand)]",children:["Reconnect"," ",(0,ec.jsx)("span",{className:"hidden max-w-44 truncate tabular-nums sm:block",children:c?function(e){try{let t=new URL(e),n="127.0.0.1"===t.hostname||"localhost"===t.hostname||"0.0.0.0"===t.hostname,r=t.port||("https:"===t.protocol?"443":"80");return n?`:${r}`:`${t.hostname}:${r}`}catch{return e}}(c):""})]})]})}let Dk=n0("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);async function DS(e,t){let n=await fetch(`/api/workspace?${new URLSearchParams({project:e,path:t})}`),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error||"Failed to list workspace.");return r?.entries??[]}async function DT(e){let t=await fetch(`/api/workspace?${new URLSearchParams({project:e,recursive:"1"})}`),n=await t.json().catch(()=>null);if(!t.ok)throw Error(n?.error||"Failed to load workspace.");return{entries:n?.entries??[],truncated:!!n?.truncated}}let Dw=[{key:"docs",label:"Papers & docs",Icon:Ll,exts:["pdf","tex","bib","md","markdown","txt","docx","doc","rtf","odt"]},{key:"figures",label:"Figures",Icon:n0("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]),exts:["png","jpg","jpeg","gif","svg","webp","bmp","tiff","tif","eps"]},{key:"data",label:"Data",Icon:n0("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]),exts:["json","jsonl","csv","tsv","xlsx","xls","parquet","pkl","npy","npz","h5","hdf5","db","sqlite","yaml","yml","xml"]},{key:"code",label:"Code",Icon:n0("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]),exts:["py","ipynb","js","ts","tsx","jsx","sh","bash","r","jl","cpp","cc","c","h","hpp","java","go","rs","m","rb"]}],D_={key:"other",label:"Other",Icon:bT},DA={};for(let e of Dw)for(let t of e.exts)DA[t]=e.key;function DN(){let{project:e,notice:t}=Og();return e?(0,ec.jsx)(DC,{project:e},e):(0,ec.jsx)(DI,{message:t??""})}function DI({message:e}){return(0,ec.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:e})}function DC({project:e}){let[t,n]=(0,eu.useState)("tree"),[r,a]=(0,eu.useState)({}),[i,s]=(0,eu.useState)(new Set),[o,l]=(0,eu.useState)(new Set),[c,u]=(0,eu.useState)(!1),[d,p]=(0,eu.useState)(null),[m,f]=(0,eu.useState)(!1),[h,g]=(0,eu.useState)(!1),[b,y]=(0,eu.useState)(null),E=Lu(),x=t=>E?.open({source:"workspace",path:t.path,size:t.size,project:e}),v=(0,eu.useMemo)(()=>new Set((E?.state.tabs??[]).filter(t=>"workspace"===t.source&&t.project===e).map(e=>e.path)),[E?.state.tabs,e]),k=E?.state.tabs.length??0,S=(0,eu.useCallback)(async t=>{l(e=>new Set(e).add(t));try{let n=await DS(e,t);return a(e=>({...e,[t]:n})),""===t&&y(null),n}catch(e){throw""===t&&y(e instanceof Error?e.message:"Failed to load."),e}finally{l(e=>{let n=new Set(e);return n.delete(t),n})}},[e]),T=(0,eu.useCallback)(async()=>{f(!0);try{let{entries:t,truncated:n}=await DT(e);p(t),g(n),y(null)}catch(e){y(e instanceof Error?e.message:"Failed to load.")}finally{f(!1)}},[e]);(0,eu.useEffect)(()=>{u(!0),S("").catch(()=>{}).finally(()=>u(!1))},[]),(0,eu.useEffect)(()=>{"type"!==t||null!==d||m||T()},[t]);let w=(0,eu.useCallback)(async()=>{(y(null),"type"===t)?await T():(u(!0),await Promise.allSettled(["",...i].map(e=>S(e))),u(!1))},[t,i,S,T]),_=(0,eu.useRef)(E?.treeRevision??0);(0,eu.useEffect)(()=>{let e=E?.treeRevision??0;e!==_.current&&(_.current=e,w())},[E?.treeRevision,w]);let A=(0,eu.useCallback)(e=>{s(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),r[e]||S(e).catch(()=>{})),n})},[r,S]),N=(0,eu.useMemo)(()=>{let e={};for(let t of d??[]){let n=DA[t.ext]??D_.key;(e[n]??=[]).push(t)}for(let t of Object.values(e))t.sort((e,t)=>t.mtime-e.mtime);return e},[d]),I="type"===t?m:c,C=(e,t)=>{let n=r[e];return n?0===n.length&&0===t?(0,ec.jsx)("p",{className:"px-2 py-6 text-center text-xs text-muted-foreground",children:"No files in the workspace yet"}):n.map(e=>{let n=i.has(e.path),r=o.has(e.path);return(0,ec.jsxs)("div",{children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>"dir"===e.type?A(e.path):x(e),className:"flex w-full items-center gap-1.5 rounded-md py-1 pr-2 text-left text-sm text-foreground transition-colors hover:bg-muted",style:{paddingLeft:`${14*t+4}px`},title:e.name,children:["dir"===e.type?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"flex size-4 shrink-0 items-center justify-center text-muted-foreground",children:r?(0,ec.jsx)(sp,{className:"size-3 animate-spin"}):n?(0,ec.jsx)(lA,{className:"size-3.5"}):(0,ec.jsx)(fN,{className:"size-3.5"})}),(0,ec.jsx)(Dk,{className:"size-4 shrink-0 text-[var(--brand)]"})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"size-4 shrink-0"}),(0,ec.jsx)(Ll,{className:"size-4 shrink-0 text-muted-foreground"})]}),(0,ec.jsx)("span",{className:"truncate",children:e.name}),v.has(e.path)&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"ml-auto size-1.5 shrink-0 rounded-full bg-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"sr-only",children:", open in preview"})]})]}),"dir"===e.type&&n&&C(e.path,t+1)]},e.path)}):null};return(0,ec.jsxs)("div",{className:"flex min-h-0 flex-col",children:[k>0&&(0,ec.jsxs)("button",{type:"button",onClick:()=>E?.showPreview(),className:"mb-2 flex w-full items-center gap-1.5 rounded-md bg-accent px-2 py-1.5 text-left text-sm font-medium text-[var(--brand)] transition-colors hover:bg-muted max-md:min-h-11",children:[(0,ec.jsx)(L6,{className:"size-4 rotate-180","aria-hidden":"true"}),`Back to preview (${k} open)`]}),(0,ec.jsxs)("div",{className:"flex items-center justify-between gap-2 pb-1.5",children:[(0,ec.jsx)("div",{className:"flex items-center gap-0.5 rounded-md bg-muted p-0.5 text-xs",children:["tree","type"].map(e=>(0,ec.jsx)("button",{type:"button",onClick:()=>n(e),className:rO("rounded px-2 py-0.5 font-medium transition-colors",t===e?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),"aria-pressed":t===e,children:"tree"===e?"Tree":"By type"},e))}),(0,ec.jsxs)("div",{className:"flex items-center gap-0.5",children:[(0,ec.jsxs)("a",{href:`/api/workspace/download?${new URLSearchParams({project:e})}`,download:!0,className:"inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",title:"Download the whole workspace as a zip",children:[(0,ec.jsx)(fC,{className:"size-3.5"}),"All"]}),(0,ec.jsx)("button",{type:"button",onClick:w,disabled:I,className:"inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50","aria-label":"Refresh workspace",title:"Refresh",children:(0,ec.jsx)(LU,{className:rO("size-3.5",I&&"animate-spin")})})]})]}),b?(0,ec.jsx)("p",{className:"px-2 py-6 text-center text-xs text-muted-foreground",children:b}):"tree"===t?c&&!r[""]?(0,ec.jsx)("div",{className:"flex items-center justify-center py-6",children:(0,ec.jsx)(sp,{className:"size-4 animate-spin text-muted-foreground"})}):(0,ec.jsx)("div",{className:"-mx-1",children:C("",0)}):m&&null===d?(0,ec.jsx)("div",{className:"flex items-center justify-center py-6",children:(0,ec.jsx)(sp,{className:"size-4 animate-spin text-muted-foreground"})}):(()=>{if(!d)return null;if(0===d.length)return(0,ec.jsx)("p",{className:"px-2 py-6 text-center text-xs text-muted-foreground",children:"No files in the workspace yet"});let e=[...Dw,D_];return(0,ec.jsxs)("div",{className:"space-y-3",children:[h&&(0,ec.jsx)("p",{className:"px-1 text-[11px] text-muted-foreground",children:"Showing the first files only — the workspace has more than the limit."}),e.map(e=>{let t=N[e.key];if(!t||0===t.length)return null;let n=e.Icon;return(0,ec.jsxs)("div",{children:[(0,ec.jsxs)("div",{className:"mb-0.5 flex items-center gap-1.5 px-1 text-[10px] font-semibold uppercase tracking-wider text-tertiary",children:[(0,ec.jsx)(n,{className:"size-3.5"}),e.label,(0,ec.jsxs)("span",{className:"text-muted-foreground",children:["(",t.length,")"]})]}),t.map(e=>{let t=e.path.includes("/")?e.path.slice(0,e.path.lastIndexOf("/")):"";return(0,ec.jsxs)("button",{type:"button",onClick:()=>x(e),className:"flex w-full items-center gap-1.5 rounded-md px-1 py-1 text-left text-sm text-foreground transition-colors hover:bg-muted",title:e.path,children:[(0,ec.jsx)(n,{className:"size-4 shrink-0 text-muted-foreground"}),(0,ec.jsx)("span",{className:"truncate",children:e.name}),(t||v.has(e.path))&&(0,ec.jsxs)("span",{className:"ml-auto flex shrink-0 items-center gap-1.5 truncate pl-2",children:[t&&(0,ec.jsx)("span",{className:"truncate text-[11px] text-muted-foreground",children:t}),v.has(e.path)&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"size-1.5 shrink-0 rounded-full bg-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"sr-only",children:", open in preview"})]})]})]},e.path)})]},e.key)})]})})()]})}let DR=n0("bell-ring",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M22 8c0-2.3-.8-4.3-2-6",key:"5bb3ad"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}],["path",{d:"M4 2C2.8 3.7 2 5.7 2 8",key:"tap9e0"}]]),DO=n0("corner-up-left",[["path",{d:"M20 20v-7a4 4 0 0 0-4-4H4",key:"1nkjon"}],["path",{d:"M9 14 4 9l5-5",key:"102s5s"}]]);function DL(e){let t="";for(let n of e)if("human"===n.type){let e=gj(n).trim();if(e){t=e;break}}return{prompt:t,steps:gH(e)}}function DD({status:e}){let t=RN[Rv(e)];return(0,ec.jsx)("span",{className:rO("size-2 shrink-0 rounded-full",t.dot,t.pulse&&"animate-pulse"),"aria-hidden":"true"})}function DM({onReportToMainChat:e}){let t=iG(),{projects:n,isReady:r,refresh:a}=sd(),[i]=ew("threadId"),{tasks:s,loaded:o,error:l,refresh:c}=O0(i),[u,d]=(0,eu.useState)(()=>Date.now()),[p,m]=(0,eu.useState)(null),[f,h]=(0,eu.useState)({}),g=(0,eu.useRef)(new Map),[b,y]=(0,eu.useState)({}),E=(0,eu.useRef)(b),[x,v]=(0,eu.useState)({}),[k,S]=Le(i),[T,w]=(0,eu.useState)({}),[_,A]=(0,eu.useState)({}),[N,I]=(0,eu.useState)({}),C=(0,eu.useRef)(!0);(0,eu.useEffect)(()=>(C.current=!0,()=>{C.current=!1}),[]),(0,eu.useEffect)(()=>{let e=setInterval(()=>d(Date.now()),1e3);return()=>clearInterval(e)},[]);let R=async e=>{var i;let s=(T[e.task_id]??"").trim();if(!s||_[e.task_id])return;let o=b[e.task_id];if(!o?.graphId)return;let l=bs(n,o);if(!bi(l))return;let c=(i=o.graphId,"open"===l.kind||"unbound"===l.kind?i1(i,l.key):null);if(c&&r()){A(t=>({...t,[e.task_id]:!0})),I(t=>({...t,[e.task_id]:null}));try{let n=await t.runs.wait(e.thread_id,c,{input:{messages:[{type:"human",content:s}]}});if(!C.current)return;let r=Array.isArray(n?.messages)?n.messages:[];if(0===r.length)return void I(t=>({...t,[e.task_id]:"The agent didn't return a reply — it may have hit an error."}));w(t=>({...t,[e.task_id]:""}));let{prompt:a,steps:i}=DL(r);h(t=>({...t,[e.task_id]:{loading:!1,error:null,prompt:a,steps:i}}))}catch(i){if(!C.current)return;let n=og(i)&&await ox(t,e.thread_id);if(!C.current)return;(n||oE(i))&&a();let r=i instanceof TypeError||"object"==typeof i&&null!==i&&"number"==typeof i.status;I(t=>({...t,[e.task_id]:oE(i)?"The backend doesn't serve this agent's project.":n?"This agent's project is no longer served: it was removed, or its folder is missing.":og(i)?"This agent's conversation no longer exists.":r?"Couldn't reach this agent — try again.":"The agent hit an error processing this follow-up."}))}finally{C.current&&A(t=>({...t,[e.task_id]:!1}))}}};(0,eu.useEffect)(()=>{if(!p)return;let e=s.find(e=>e.task_id===p);if(!e||"expired"===Rv(e.liveStatus))return;let n="running"===Rv(e.liveStatus),r=[e.run_id,e.last_updated_at,e.endedAt].join(":");if(!n&&g.current.get(p)===r)return;let a=!1;return h(e=>({...e,[p]:{loading:!e[p],error:null,prompt:e[p]?.prompt??"",steps:e[p]?.steps??[]}})),(async()=>{try{var i;let s=E.current[p],[o,l]=await Promise.all([t.threads.getState(e.thread_id),s?null:t.threads.get(e.thread_id).catch(()=>null)]);if(a)return;let{prompt:c,steps:u}=DL(o.values?.messages??[]);!s&&l&&(i=bn(l.metadata,o.metadata),E.current={...E.current,[p]:i},y(E.current)),!n&&(s||l)&&g.current.set(p,r),h(e=>({...e,[p]:{loading:!1,error:null,prompt:c,steps:u}}))}catch{if(a)return;g.current.delete(p),h(e=>({...e,[p]:{loading:!1,error:"Couldn't load this agent's steps.",prompt:e[p]?.prompt??"",steps:e[p]?.steps??[]}}))}})(),()=>{a=!0}},[p,s,t]);let O=(0,eu.useMemo)(()=>RC(s),[s]);return(0,ec.jsxs)("div",{className:"flex h-full flex-col",children:[(0,ec.jsxs)("div",{className:"flex items-center justify-between gap-2 px-1 pb-2",children:[(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:O>0?`${O} running`:s.length>0?`${s.length} total`:"Background agents"}),(0,ec.jsxs)("div",{className:"flex items-center gap-1",children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>{i&&(k||O8(i,s.filter(e=>RI(e.liveStatus)).map(RT)),S(!k))},"aria-pressed":k,"aria-label":`Auto-report ${k?"on":"off"}`,title:k?"Auto-report on: finished agents are sent to the main chat automatically":"Auto-report off: use each agent's “Notify main chat” button",className:rO("inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",k?"bg-accent text-[var(--brand)]":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:[(0,ec.jsx)(DR,{className:"size-3.5","aria-hidden":"true"}),(0,ec.jsxs)("span",{className:"hidden min-[340px]:inline",children:["Auto-report ",k?"On":"Off"]})]}),(0,ec.jsx)("button",{type:"button",onClick:c,"aria-label":"Refresh agents",title:"Refresh",className:"rounded p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(LU,{className:"size-3.5","aria-hidden":"true"})})]})]}),l&&(0,ec.jsx)("p",{className:"px-1 text-xs text-[var(--color-error)]",children:l}),!o&&(0,ec.jsxs)("div",{className:"flex items-center gap-2 px-1 py-4 text-xs text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading…"]}),o&&0===s.length&&(0,ec.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 px-4 py-10 text-center",children:[(0,ec.jsx)(bO,{className:"size-9 text-muted-foreground/60","aria-hidden":"true"}),(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"No background agents yet."}),(0,ec.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"When EvoScientist delegates long tasks (writing, data analysis) they run in the background and show up here."})]}),(0,ec.jsx)("div",{className:"flex min-h-0 flex-1 flex-col gap-1.5 overflow-y-auto",children:s.map(t=>{var r,a;let s,o,l,c,d=Rv(t.liveStatus),h=RN[d],g=p===t.task_id,y="expired"===d,E=f[t.task_id];return(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-background",children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>m(g?null:t.task_id),className:"flex w-full items-center gap-2 rounded-md px-2.5 py-2 text-left transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring","aria-expanded":g,children:[g?(0,ec.jsx)(lA,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}):(0,ec.jsx)(fN,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}),(0,ec.jsx)(DD,{status:t.liveStatus}),(0,ec.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm font-medium",children:Rk[r=t.agent_name]??r}),(0,ec.jsxs)("span",{className:"shrink-0 text-xs tabular-nums text-muted-foreground",children:[h.label,(s=function(e,t){let n=Rv(e.liveStatus);if("expired"===n)return"";let r="running"===n?t:e.endedAt?Date.parse(e.endedAt):t;return RR(e.startedAt??e.created_at,r)}(t,u))?` \xb7 ${s}`:""]})]}),g&&y&&(0,ec.jsx)("div",{className:"border-t border-border px-2.5 py-2 text-xs",children:(0,ec.jsx)("p",{className:"text-muted-foreground",children:"This task ran before a backend restart and its records are gone, so its steps and result can no longer be loaded. Any files it produced are still in the workspace."})}),g&&!y&&(0,ec.jsxs)("div",{className:"border-t border-border px-2.5 py-2 text-xs",children:[E?.loading&&(0,ec.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Loading steps…"]}),E?.error&&(0,ec.jsx)("p",{className:"text-[var(--color-error)]",children:E.error}),E&&!E.loading&&!E.error&&(0,ec.jsxs)("div",{className:"flex flex-col gap-2",children:[E.prompt&&(0,ec.jsxs)("div",{children:[(0,ec.jsx)("p",{className:"font-semibold text-foreground",children:"Task"}),(0,ec.jsx)("p",{className:"whitespace-pre-wrap break-words text-muted-foreground",children:E.prompt.length>600?E.prompt.slice(0,600)+"…":E.prompt})]}),(0,ec.jsxs)("div",{children:[(0,ec.jsxs)("p",{className:"mb-1 font-semibold text-foreground",children:["Steps"," ",(0,ec.jsxs)("span",{className:"font-normal text-muted-foreground",children:["(",E.steps.length,")"]})]}),0===E.steps.length?(0,ec.jsx)("p",{className:"text-muted-foreground",children:"No steps yet."}):(0,ec.jsx)(Rx,{steps:E.steps,running:!RI(a=t.liveStatus)&&"expired"!==Rv(a),compact:!0})]}),RI(t.liveStatus)&&(0,ec.jsx)("div",{className:"mt-1 border-t border-border pt-2",children:k?(0,ec.jsxs)("p",{className:"inline-flex items-center gap-1.5 text-[11px] text-muted-foreground",children:[(0,ec.jsx)(DR,{className:"size-3.5 text-[var(--brand)]","aria-hidden":"true"}),"Auto-report on · future completions notify the main chat"]}):(0,ec.jsxs)("button",{type:"button",onClick:()=>(t=>{if(!e||!i)return void e6.c.error("Open the conversation to notify the main agent.");let n=e(t,i);if("sent"===n){v(e=>({...e,[RT(t)]:!0})),e6.c.success("Reported to the main chat.");return}if("duplicate"===n){v(e=>({...e,[RT(t)]:!0})),e6.c.info("This result is already in the main chat.");return}e6.c.error("wrong-thread"===n?"The active conversation changed — reopen this task and try again.":"read-only"===n?"The main chat is read-only here.":"waiting"===n?"The main chat is waiting for your answer — answer it, then notify.":"Main chat is busy — try again when it's idle.")})(t),disabled:!e||!!x[RT(t)],title:e?"Send this result back to the main agent":"Open the conversation to notify the main agent",className:"inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-[11px] font-medium text-foreground transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",children:[(0,ec.jsx)(DO,{className:"size-3.5 text-[var(--brand)]","aria-hidden":"true"}),x[RT(t)]?"Reported to main chat":"Notify main chat"]})}),(o="running"===Rv(t.liveStatus),l=!!_[t.task_id],"readOnly"===(c=bs(n,b[t.task_id])).kind?(0,ec.jsx)("p",{className:"mt-1 border-t border-border pt-2 text-[11px] text-muted-foreground",children:c.reason}):(0,ec.jsxs)("div",{className:"mt-1 border-t border-border pt-2",children:[(0,ec.jsx)("p",{className:"mb-1 text-[11px] text-muted-foreground",children:"Direct follow-up · Main chat is not notified"}),(0,ec.jsxs)("form",{onSubmit:e=>{e.preventDefault(),R(t)},className:"flex items-center gap-1.5",children:[(0,ec.jsx)("input",{type:"text",name:`agent-message-${t.task_id}`,autoComplete:"off",value:T[t.task_id]??"",onChange:e=>w(n=>({...n,[t.task_id]:e.target.value})),onKeyDown:e=>{"Enter"===e.key&&(e.nativeEvent.isComposing||229===e.keyCode)&&e.preventDefault()},disabled:o||l||!bi(c),placeholder:o?"Agent is working…":"Send a direct follow-up…","aria-label":"Message this agent",className:"min-w-0 flex-1 rounded-md border border-border bg-background px-2 py-1.5 text-xs outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60"}),(0,ec.jsx)("button",{type:"submit",disabled:o||l||!bi(c)||!(T[t.task_id]??"").trim(),"aria-label":"Send",title:"Send to this agent",className:"inline-flex size-7 shrink-0 items-center justify-center rounded-md bg-[var(--brand-solid)] text-[var(--brand-foreground)] transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-40",children:l?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(bx,{className:"size-3.5","aria-hidden":"true"})})]}),N[t.task_id]&&(0,ec.jsx)("p",{className:"mt-1 text-[var(--color-error)]",role:"status","aria-live":"polite",children:N[t.task_id]})]}))]})]})]},t.task_id)})})]})}let DP={js:"javascript",jsx:"javascript",ts:"typescript",tsx:"typescript",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",cpp:"cpp",c:"c",cs:"csharp",php:"php",swift:"swift",kt:"kotlin",scala:"scala",sh:"bash",bash:"bash",zsh:"bash",json:"json",jsonl:"json",xml:"xml",html:"html",css:"css",scss:"scss",sass:"sass",less:"less",sql:"sql",yaml:"yaml",yml:"yaml",toml:"toml",ini:"ini",tex:"latex",bib:"latex",r:"r",dockerfile:"dockerfile",makefile:"makefile"},Dj=new Set(["js","jsx","ts","tsx","py","rb","go","rs","java","cpp","c","cs","php","swift","kt","sh","bash","zsh","json","jsonl","xml","html","css","scss","sql","yaml","yml","toml","ini","tex","bib","r","txt","md","markdown","log","csv","tsv","cfg","conf","env","gitignore"]),DF=new Set(["png","jpg","jpeg","gif","webp","svg","bmp"]);function DU(e){return e.split("/").filter(Boolean).pop()||e}function DB(e){return e.includes(".")?e.split(".").pop().toLowerCase():""}function D$(e,t,n={}){let r=new URLSearchParams({project:e,path:t});return n.download&&r.set("download","1"),n.version&&r.set("v",String(n.version)),`/api/workspace/file?${r.toString()}`}function Dz({content:e,ext:t}){return(0,ec.jsx)(CC,{language:DP[t]||"text",style:CR,customStyle:{margin:0,borderRadius:"0.5rem",fontSize:"0.875rem"},showLineNumbers:!0,wrapLines:!0,lineProps:{style:{whiteSpace:"pre-wrap"}},children:e})}function DH({children:e}){return(0,ec.jsx)(hp,{className:"h-full rounded-md bg-[var(--color-surface)]",children:(0,ec.jsx)("div",{className:"p-4",children:e})})}function DG({content:e}){let[t,n]=(0,eu.useState)("page");return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col gap-2",children:[(0,ec.jsx)("div",{className:"flex shrink-0 items-center gap-0.5 self-start rounded-md bg-muted p-0.5 text-xs",children:[["page","Preview"],["source","Source"]].map(([e,r])=>(0,ec.jsx)("button",{type:"button",onClick:()=>n(e),"aria-pressed":t===e,className:rO("rounded px-2 py-0.5 font-medium transition-colors max-md:min-h-11 max-md:px-3",t===e?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:r},e))}),(0,ec.jsx)("div",{className:"min-h-0 flex-1",children:"page"===t?(0,ec.jsx)("iframe",{title:"Page preview",sandbox:"allow-scripts allow-popups allow-popups-to-escape-sandbox",srcDoc:e,referrerPolicy:"no-referrer",className:"h-full w-full rounded-md border border-border bg-white"}):(0,ec.jsx)(DH,{children:(0,ec.jsx)(Dz,{content:e,ext:"html"})})})]})}let Dq=eu.default.memo(function({content:e,ext:t}){return e?"html"===t?(0,ec.jsx)(DG,{content:e}):"md"===t||"markdown"===t?(0,ec.jsx)(DH,{children:(0,ec.jsx)("div",{className:"p-4",children:(0,ec.jsx)(Rp,{content:e})})}):(0,ec.jsx)(DH,{children:(0,ec.jsx)(Dz,{content:e,ext:t})}):(0,ec.jsx)(DH,{children:(0,ec.jsx)("div",{className:"flex items-center justify-center p-12",children:(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"File is empty"})})})});function DW(e,t,n){let r=(0,eu.useRef)(t);(0,eu.useEffect)(()=>{e&&r.current!==t&&(r.current=t,n())},[e,t,n])}async function DV(e,t){let n=t.includes("/")?t.slice(0,t.lastIndexOf("/")):"";try{let r=await fetch(`/api/workspace?${new URLSearchParams({project:e,path:n})}`);if(400===r.status)return!1;if(!r.ok)return null;return((await r.json()).entries??[]).some(e=>e.path===t&&"file"===e.type)}catch{return null}}async function DY(e){try{let t=await fetch("/api/memory");if(!t.ok)return null;let n=await t.json();if((n.entries??[]).some(t=>t.path===e))return!0;return!!n.truncated&&null}catch{return null}}async function DK(e){let t=await fetch(`/api/memory?path=${encodeURIComponent(e)}`);if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error||`HTTP ${t.status}`)}let n=await t.json();return"string"==typeof n.content?n.content:""}function DX({tabId:e,path:t,visible:n,refreshTick:r,onClose:a}){let[i,s]=(0,eu.useState)(null),[o,l]=(0,eu.useState)(!1),[c,u]=(0,eu.useState)(null),d=(0,eu.useRef)(0),p=(0,eu.useRef)(!0);(0,eu.useEffect)(()=>(p.current=!0,()=>{p.current=!1}),[]);let m=(0,eu.useCallback)(async()=>{let e=++d.current,n=()=>p.current&&e===d.current;try{let e=await DK(t);if(!n())return;s(e),l(!1),u(null)}catch(r){if(!n())return;let e=await DY(t);if(!n())return;!1===e?l(!0):u(r instanceof Error?r.message:"Failed to read file.")}},[t]);(0,eu.useEffect)(()=>{m()},[m]),DW(n,r,m);let f=DB(DU(t));return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"mb-2 flex shrink-0 items-center justify-between gap-2",children:[(0,ec.jsxs)("p",{className:"min-w-0 truncate font-mono text-xs text-muted-foreground",title:`/memories/${t}`,children:["/memories/",t]}),(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-1 max-md:[&>button]:min-h-11 max-md:[&>button]:min-w-11",children:[(0,ec.jsx)("span",{className:"rounded border border-border px-1.5 py-0.5 text-[11px] text-muted-foreground",children:"Read-only"}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>void m(),"aria-label":"Reload file",title:"Reload file",children:(0,ec.jsx)(LU,{size:16,"aria-hidden":"true"})})]})]}),c&&null!==i&&(0,ec.jsx)("p",{role:"alert",className:"mb-2 text-sm text-destructive",children:c}),(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:o?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12 text-center",children:[(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"This file no longer exists."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",onClick:()=>a(e),children:"Close tab"})]}):null===i?(0,ec.jsx)("div",{className:"flex h-full items-center justify-center",children:c?(0,ec.jsx)("p",{className:"text-sm text-destructive",children:c}):(0,ec.jsx)(sp,{className:"size-5 animate-spin text-muted-foreground","aria-hidden":"true"})}):(0,ec.jsx)(Dq,{content:i,ext:f})})]})}let DZ=n0("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),DQ=n0("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);function DJ({tabId:e,path:t,chat:n,drafts:r,onDirtyChange:a,onClose:i}){let s=n&&Object.prototype.hasOwnProperty.call(n.files,t)?function(e){if("object"==typeof e&&null!==e&&"content"in e){let t=e.content;return Array.isArray(t)?t.join("\n"):String(t??"")}return String(e??"")}(n.files[t]):null,[o,l]=(0,eu.useState)(null),c=o&&o.over===s?o.text:s,[u,d]=(0,eu.useState)(()=>void 0!==r.get(e)),[p,m]=(0,eu.useState)(()=>r.get(e)?.text??""),[f,h]=(0,eu.useState)(!1),g=u&&null!==c&&p!==c;(0,eu.useEffect)(()=>{a(e,g)},[e,g,a]);let b=t=>{m(t),r.set(e,{text:t,base:c??""})},y=()=>{d(!1),r.set(e,void 0)},E=async()=>{if(n){h(!0);try{await n.setFiles({...n.files,[t]:p}),l({over:s,text:p}),y()}catch(e){e6.c.error(`Failed to save file: ${e}`)}finally{h(!1)}}},x=DU(t),v=(0,eu.useCallback)(()=>{if(null===c)return;let e=URL.createObjectURL(new Blob([c],{type:"text/plain"})),t=document.createElement("a");t.href=e,t.download=x,document.body.appendChild(t),t.click(),document.body.removeChild(t),URL.revokeObjectURL(e)},[c,x]);return n?null===c?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12 text-center",children:[(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"This file is no longer in the conversation."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",onClick:()=>i(e),children:"Close tab"})]}):(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"mb-2 flex shrink-0 items-center justify-between gap-2",children:[(0,ec.jsx)("p",{className:"min-w-0 truncate font-mono text-xs text-muted-foreground",title:t,children:t}),(0,ec.jsx)("div",{className:"flex shrink-0 items-center gap-1 max-md:[&>button]:min-h-11 max-md:[&>button]:min-w-11",children:u?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:y,disabled:f,children:[(0,ec.jsx)(DZ,{size:16,className:"mr-1","aria-hidden":"true"}),"Cancel"]}),(0,ec.jsxs)(rQ,{size:"sm",className:"h-8 bg-[var(--brand-solid)] px-3 text-[var(--brand-foreground)] hover:opacity-90",onClick:E,disabled:f||!g,children:[f?(0,ec.jsx)(sp,{size:16,className:"mr-1 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(DQ,{size:16,className:"mr-1","aria-hidden":"true"}),"Save"]})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>{b(c),d(!0)},disabled:n.editDisabled,"aria-label":"Edit file",children:[(0,ec.jsx)(fM,{size:16,className:"mr-1","aria-hidden":"true"}),"Edit"]}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>void CL(c),"aria-label":"Copy file",children:(0,ec.jsx)(CO,{size:16,"aria-hidden":"true"})}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:v,"aria-label":"Download file",children:(0,ec.jsx)(fC,{size:16,"aria-hidden":"true"})})]})})]}),(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:u?(0,ec.jsx)("textarea",{value:p,onChange:e=>b(e.target.value),spellCheck:!1,"aria-label":"File content",className:"h-full w-full resize-none rounded-md border border-border bg-background p-4 font-mono text-sm leading-relaxed text-foreground outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring"}):(0,ec.jsx)(Dq,{content:c,ext:DB(x)})})]}):(0,ec.jsx)("div",{className:"flex h-full items-center justify-center p-12 text-center",children:(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"Open the conversation this file belongs to."})})}class D0 extends Error{}async function D1(e,t){let n=new AbortController,r=await fetch(D$(e,t),{signal:n.signal});if(!r.ok){let e=await r.json().catch(()=>null);throw Error(e?.error||`Failed to load file (${r.status})`)}if(Number(r.headers.get("content-length"))>2097152)throw n.abort(),new D0;return r.text()}function D2({project:e,...t}){let{project:n,notice:r,here:a}=Og(),i=a?e??n:null;return i?(0,ec.jsx)(D3,{...t,project:i}):(0,ec.jsx)(DI,{message:r??""})}function D3({project:e,tabId:t,path:n,size:r,visible:a,refreshTick:i,drafts:s,onDirtyChange:o,onClose:l,onTreeChanged:c}){let u=DU(n),d=DB(u),p=DF.has(d)?"image":"pdf"===d?"pdf":Dj.has(d)?"text":"binary",m="text"===p&&null!=r&&r>2097152,[f,h]=(0,eu.useState)(()=>s.get(t)?.base??null),[g,b]=(0,eu.useState)(m?{state:"too-large"}:"text"===p?{state:"loading"}:{state:"ready"}),[y,E]=(0,eu.useState)(null),[x,v]=(0,eu.useState)(null),[k,S]=(0,eu.useState)(()=>void 0!==s.get(t)),[T,w]=(0,eu.useState)(()=>s.get(t)?.text??""),[_,A]=(0,eu.useState)(!1),[N,I]=(0,eu.useState)(!1),[C,R]=(0,eu.useState)(!1),[O,L]=(0,eu.useState)(!1),[D,M]=(0,eu.useState)(null),[P,j]=(0,eu.useState)(0),F=(0,eu.useRef)(!0);(0,eu.useEffect)(()=>(F.current=!0,()=>{F.current=!1}),[]);let U=k&&null!==f&&T!==f;(0,eu.useEffect)(()=>{o(t,U)},[t,U,o]),(0,eu.useEffect)(()=>{k&&null!==f&&s.set(t,{text:T,base:f})},[k,f,T,s,t]);let B=(0,eu.useRef)({content:f,editing:k,draft:T,saving:_,body:g,version:P});(0,eu.useEffect)(()=>{B.current={content:f,editing:k,draft:T,saving:_,body:g,version:P}});let $=(0,eu.useRef)(0),z=(0,eu.useCallback)(async t=>{if("text"!==p){("manual"===t||"auto"===t&&"image"===p)&&(j(e=>e+1),b({state:"ready"}));return}if(m||"too-large"===B.current.body.state||"auto"===t&&B.current.saving)return;let r=++$.current,a=()=>F.current&&r===$.current;try{let t=await D1(e,n);if(!a())return;E(null),b({state:"ready"});let{content:r,editing:i,draft:s}=B.current;if(null===r)return void h(t);if(t===r)return void v(null);if(i&&s!==r)return void v(t);h(t),v(null),i&&w(t)}catch(l){if(!a())return;if(l instanceof D0)return void b({state:"too-large"});let t=l instanceof Error?l.message:"Failed to load file.",r=await DV(e,n);if(!a())return;let{content:i,editing:s,draft:o}=B.current;!1!==r||s&&null!==i&&o!==i?!1===r?E("This file no longer exists on disk."):null===i?b({state:"error",message:t}):E(t):b({state:"missing"})}},[p,m,n,e]);(0,eu.useEffect)(()=>{z("initial")},[z]),DW(a,i,(0,eu.useCallback)(()=>void z("auto"),[z]));let H=async()=>{let t=await DV(e,n);F.current&&B.current.version===P&&b(!1===t?{state:"missing"}:{state:"error",message:"Failed to load image."})},G=()=>{S(!1),v(null),s.set(t,void 0)},q=async()=>{$.current+=1,A(!0),M(null);try{let r=await fetch(D$(e,n),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:T})}),a=await r.json().catch(()=>null);if(!r.ok)throw Error(a?.error||"Failed to save.");if(s.set(t,void 0),c(),!F.current)return;h(T),G()}catch(e){F.current&&M(e instanceof Error?e.message:"Failed to save.")}finally{F.current&&A(!1)}},W=async()=>{I(!0),M(null);try{let r=await fetch(D$(e,n),{method:"DELETE"});if(!r.ok){let e=await r.json().catch(()=>null);throw Error(e?.error||"Failed to delete.")}s.set(t,void 0),c(),l(t)}catch(e){F.current&&(R(!1),M(e instanceof Error?e.message:"Failed to delete."))}finally{F.current&&I(!1)}},V=t=>(0,ec.jsxs)("a",{href:D$(e,n,{download:!0}),download:u,children:[(0,ec.jsx)(fC,{size:16,className:"mr-1","aria-hidden":"true"}),t]});return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"mb-2 flex shrink-0 flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,ec.jsx)("p",{className:"min-w-0 truncate font-mono text-xs text-muted-foreground",title:n,children:n}),(0,ec.jsx)("div",{className:"flex shrink-0 flex-wrap items-center justify-end gap-1 max-md:[&>a]:min-h-11 max-md:[&>button]:min-h-11 max-md:[&>button]:min-w-11",children:k?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>U?L(!0):G(),disabled:_,children:[(0,ec.jsx)(DZ,{size:16,className:"mr-1","aria-hidden":"true"}),"Cancel"]}),(0,ec.jsxs)(rQ,{size:"sm",className:"h-8 bg-[var(--brand-solid)] px-3 text-[var(--brand-foreground)] hover:opacity-90",onClick:q,disabled:_||!U,children:[_?(0,ec.jsx)(sp,{size:16,className:"mr-1 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(DQ,{size:16,className:"mr-1","aria-hidden":"true"}),_?"Saving…":"Save"]})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>void z("manual"),"aria-label":"Reload file",title:"Reload file",children:(0,ec.jsx)(LU,{size:16,"aria-hidden":"true"})}),"text"===p&&"ready"===g.state&&null!==f&&(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>{w(f??""),M(null),S(!0)},"aria-label":"Edit file",children:[(0,ec.jsx)(fM,{size:16,className:"mr-1","aria-hidden":"true"}),"Edit"]}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",asChild:!0,children:V("Download")}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2 text-muted-foreground hover:text-destructive",onClick:()=>R(!0),disabled:N,"aria-label":"Delete file",title:"Delete file",children:N?(0,ec.jsx)(sp,{size:16,className:"animate-spin","aria-hidden":"true"}):(0,ec.jsx)(fz,{size:16,"aria-hidden":"true"})})]})})]}),null!==x&&(0,ec.jsxs)("div",{role:"status",className:"mb-2 flex flex-wrap items-center gap-2 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm",children:[(0,ec.jsx)("span",{children:"The file changed on disk."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"h-7 max-md:min-h-11",onClick:()=>{h(x),G()},children:"Reload"}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-7 max-md:min-h-11",onClick:()=>{h(x),v(null)},children:"Keep my edits"})]}),y&&(0,ec.jsxs)("div",{role:"alert",className:"mb-2 flex items-center gap-2 text-sm text-destructive",children:[(0,ec.jsx)("span",{children:y}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"h-7 max-md:min-h-11",onClick:()=>void z("manual"),children:"Retry"})]}),D&&(0,ec.jsx)("p",{role:"alert",className:"mb-2 text-sm text-destructive",children:D}),(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:k?(0,ec.jsx)("textarea",{value:T,onChange:e=>w(e.target.value),spellCheck:!1,"aria-label":"File content",className:"h-full w-full resize-none rounded-md border border-border bg-background p-4 font-mono text-sm leading-relaxed text-foreground outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",placeholder:"File is empty…"}):"missing"===g.state?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12 text-center",children:[(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"This file no longer exists."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",onClick:()=>l(t),children:"Close tab"})]}):"error"===g.state?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12",children:[(0,ec.jsx)("p",{className:"text-sm text-destructive",children:g.message}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",onClick:()=>void z("manual"),children:"Retry"})]}):"image"===p?(0,ec.jsx)(hp,{className:"h-full rounded-md bg-[var(--color-surface)]",children:(0,ec.jsx)("div",{className:"flex items-center justify-center p-4",children:(0,ec.jsx)("img",{src:D$(e,n,{version:P}),alt:u,onError:()=>void H(),className:"max-h-full max-w-full object-contain"})})}):"pdf"===p?(0,ec.jsx)("iframe",{src:D$(e,n,{version:P}),title:u,className:"h-full w-full rounded-md border border-border"}):"binary"===p||"too-large"===g.state?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12 text-center",children:[(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"too-large"===g.state?"This file is too large to preview inline.":"This file type can't be previewed."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",asChild:!0,children:V("Download file")})]}):"loading"===g.state?(0,ec.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,ec.jsx)(sp,{className:"size-5 animate-spin text-muted-foreground","aria-hidden":"true"})}):(0,ec.jsx)(Dq,{content:f??"",ext:d})}),(0,ec.jsx)(rL,{open:O,onOpenChange:L,children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Discard unsaved changes?"}),(0,ec.jsxs)(rB,{children:["Your edits to “",u,"” have not been saved."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>L(!1),children:"Keep Editing"}),(0,ec.jsx)(rQ,{onClick:()=>{L(!1),G()},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Discard"})]})]})}),(0,ec.jsx)(rL,{open:C,onOpenChange:e=>{N||R(e)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Delete file?"}),(0,ec.jsxs)(rB,{children:["“",u,"” will be permanently removed from the workspace. This can't be undone."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>R(!1),disabled:N,children:"Cancel"}),(0,ec.jsx)(rQ,{onClick:W,disabled:N,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:N?"Deleting…":"Delete"})]})]})})]})}let D4={workspace:Ll,memory:Rb,state:bO};function D5(){let e=Lu(),[t,n]=(0,eu.useState)(null),r=(0,eu.useId)(),a=(0,eu.useRef)(new Map),i=(0,eu.useRef)(null);if(!e)return null;let{state:s,activate:o,close:l,requestFocus:c,showTree:u,setDirty:d,refreshTick:p,bumpTreeRevision:m,drafts:f,chat:h}=e,g=(e,t)=>{if(!e.dirty){l(e.id),t&&c();return}i.current=document.activeElement,n(e)},b=e=>`${r}-tab-${encodeURIComponent(e)}`,y=e=>`${r}-panel-${encodeURIComponent(e)}`,E=s.tabs.some(e=>e.id===s.activeId)?s.activeId:s.tabs[0]?.id??null;return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-1 border-b border-border px-2 py-1.5",children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-7 shrink-0 px-2 max-md:min-h-11",onClick:u,"aria-label":"Back to files",children:[(0,ec.jsx)(L6,{className:"mr-1 size-4","aria-hidden":"true"}),"Files"]}),(0,ec.jsx)("div",{role:"tablist","aria-label":"Open files",className:"scrollbar-pretty flex min-w-0 flex-1 items-center gap-1 overflow-x-auto",children:s.tabs.map((e,t)=>{let n=D4[e.source],r=e.id===s.activeId,i=DU(e.path);return(0,ec.jsxs)("div",{role:"presentation",className:rO("flex max-w-[12rem] shrink-0 items-center rounded-md border text-xs",r?"border-[var(--brand)] bg-background text-foreground":"border-border bg-muted text-muted-foreground hover:text-foreground"),children:[(0,ec.jsxs)("button",{ref:t=>{t?a.current.set(e.id,t):a.current.delete(e.id)},type:"button",role:"tab",id:b(e.id),"aria-selected":r,"aria-controls":y(e.id),tabIndex:e.id===E?0:-1,title:e.path,onClick:()=>o(e.id),onKeyDown:e=>((e,t)=>{let n=s.tabs,r=e=>{let t=n[(e+n.length)%n.length];o(t.id),a.current.get(t.id)?.focus()};switch(e.key){case"ArrowRight":r(t+1);break;case"ArrowLeft":r(t-1);break;case"Home":r(0);break;case"End":r(n.length-1);break;case"Delete":case"Backspace":g(n[t],!0);break;default:return}e.preventDefault()})(e,t),className:"flex min-w-0 items-center gap-1 py-1 pl-2 pr-1 max-md:min-h-11",children:[(0,ec.jsx)(n,{className:"size-3.5 shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"truncate",children:i}),e.dirty&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"size-1.5 shrink-0 rounded-full bg-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"sr-only",children:", unsaved changes"})]})]}),(0,ec.jsx)("button",{type:"button","aria-label":`Close ${i}`,tabIndex:r?0:-1,onClick:t=>g(e,t.currentTarget===document.activeElement),className:"rounded p-1 hover:bg-accent max-md:min-h-11 max-md:min-w-11",children:(0,ec.jsx)(n1,{className:"size-3","aria-hidden":"true"})})]},e.id)})})]}),(0,ec.jsx)("div",{className:"min-h-0 flex-1",children:s.tabs.map(e=>{let t=e.id===s.activeId,n=t&&"preview"===s.mode;return(0,ec.jsx)("div",{id:y(e.id),role:"tabpanel","aria-labelledby":b(e.id),hidden:!t,className:"h-full p-3",children:"workspace"===e.source?(0,ec.jsx)(D2,{tabId:e.id,project:e.project,path:e.path,size:e.size,visible:n,refreshTick:p,drafts:f,onDirtyChange:d,onClose:l,onTreeChanged:m}):"memory"===e.source?(0,ec.jsx)(DX,{tabId:e.id,path:e.path,visible:n,refreshTick:p,onClose:l}):(0,ec.jsx)(DJ,{tabId:e.id,path:e.path,chat:h,drafts:f,onDirtyChange:d,onClose:l})},e.id)})}),(0,ec.jsx)(rL,{open:null!==t,onOpenChange:e=>{e||n(null)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",onCloseAutoFocus:e=>{e.preventDefault();let t=i.current;i.current=null,t?.isConnected&&t!==document.body?t.focus():c()},children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Discard unsaved changes?"}),(0,ec.jsxs)(rB,{children:["Your edits to “",t?DU(t.path):"","” have not been saved."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>n(null),children:"Keep Editing"}),(0,ec.jsx)(rQ,{onClick:()=>{t&&l(t.id),n(null)},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Discard"})]})]})})]})}function D6({onClose:e,onReportToMainChat:t}){let{deploymentUrl:n,apiKey:r}=iq(),[a,i]=ew("inspectorTab"),s="agents"===a?"agents":"workspace",o=Lu(),l="workspace"===s&&o?.state.mode==="preview"&&null!==o.state.activeId,c=(0,eu.useRef)(null),u=(0,eu.useRef)(null),d=(0,eu.useRef)(null),p=o?.state.activeId??null,m=o?.focusRequest??0,f=o?.takeFocusRequest;return(0,eu.useEffect)(()=>{if("workspace"!==s)return;let e=f?.()??!1,t=d.current,n=l?c.current:u.current,r=null!==t&&(document.activeElement===t||document.activeElement===document.body)&&(!t.isConnected||!!n?.contains(t));if(!e&&!r)return;let a=l?u.current?.querySelector('[role="tab"][aria-selected="true"]'):c.current?.querySelector("button, a[href]");a&&(a.focus(),document.activeElement===a&&(d.current=a))},[s,l,p,m,f]),(0,ec.jsxs)("div",{className:"flex h-full flex-col border-l border-border bg-sidebar","data-file-pane":l?"preview":"tree",onFocus:e=>{d.current=e.target},children:[(0,ec.jsxs)("div",{className:"flex h-11 shrink-0 items-center justify-between gap-2 border-b border-border px-2",children:[(0,ec.jsxs)("div",{role:"tablist","aria-label":"Inspector",className:"flex items-center gap-1",children:[(0,ec.jsxs)("button",{type:"button",role:"tab","aria-selected":"workspace"===s,onClick:()=>i(null),className:rO("flex items-center gap-1.5 rounded-md px-2 py-1 text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","workspace"===s?"bg-accent text-foreground":"text-muted-foreground hover:text-foreground"),children:[(0,ec.jsx)(bw,{className:"size-4 text-[var(--brand)]","aria-hidden":"true"}),"Workspace"]}),(0,ec.jsxs)("button",{type:"button",role:"tab","aria-selected":"agents"===s,onClick:()=>i("agents"),className:rO("flex items-center gap-1.5 rounded-md px-2 py-1 text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","agents"===s?"bg-accent text-foreground":"text-muted-foreground hover:text-foreground"),children:[(0,ec.jsx)(bO,{className:"size-4 text-[var(--brand)]","aria-hidden":"true"}),"Agents"]})]}),(0,ec.jsx)(rQ,{variant:"ghost",size:"icon",className:"size-7",onClick:e,"aria-label":"Close inspector",title:"Close",children:(0,ec.jsx)(n1,{className:"size-4","aria-hidden":"true"})})]}),"agents"===s&&(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden p-3",children:(0,ec.jsx)(DM,{onReportToMainChat:t},`${n}
|
|
21
|
+
${l}`:null,[u,d]=(0,eu.useState)(null);return((0,eu.useEffect)(()=>{if(!c||!a||Lt.has(a))return;let e=JSON.parse(l),t=!1,r=new AbortController,i=setTimeout(()=>r.abort(),2e3),s=e=>{t||d({key:c,decisions:e})},o={"Content-Type":"application/json"};return n&&(o["X-Api-Key"]=n),fetch(`${a}/api/policy`,{method:"POST",headers:o,body:`{"action_requests":${l}}`,signal:r.signal}).then(async t=>404===t.status||405===t.status?(Lt.add(a),s(null)):t.ok?void s(function(e,t){if(!e||"object"!=typeof e)return null;let n=e.decisions;if(!Array.isArray(n)||0===n.length||n.length!==t.length)return null;let r=[];for(let e of n){if(!e||"object"!=typeof e)return null;let{type:t,message:n}=e;if("approve"===t)r.push({type:"approve"});else{if("reject"!==t)return null;r.push("string"==typeof n?{type:"reject",message:n}:{type:"reject"})}}return r}(await t.json(),e)):s(null)).catch(()=>s(null)).finally(()=>clearTimeout(i)),()=>{t=!0,clearTimeout(i),r.abort()}},[c,a,n,l]),s)?!c||!a||Lt.has(a)?{interruptKey:s,checking:!1,decisions:null}:u?.key===c?{interruptKey:s,checking:!1,decisions:u.decisions}:{interruptKey:s,checking:!0,decisions:null}:{interruptKey:null,checking:!1,decisions:null}}({interrupt:eO,deploymentUrl:nm.deploymentUrl,apiKey:nm.apiKey});!function({autoApprove:e,interrupt:t,resumeInterrupt:n,isLoading:r,resetKey:a,policy:i,canResumeNow:s=()=>!0}){let o=(0,eu.useRef)(new Set),l=(0,eu.useRef)(new Set),c=(0,eu.useRef)({resetKey:a,autoApprove:e});(0,eu.useEffect)(()=>{let t=c.current;(t.resetKey!==a||t.autoApprove!==e)&&(c.current={resetKey:a,autoApprove:e},o.current=new Set,t.resetKey!==a&&(l.current=new Set))},[a,e]);let u=i?.interruptKey??null,d=i?.checking??!1,p=i?.decisions??null;(0,eu.useEffect)(()=>{var a,i;if(r||d)return;let c=t?.value?.action_requests;if(!t||!Array.isArray(c)||0===c.length)return;let m=bc(t);if(null===m)return;let f=u===m?p:null,h=bZ(c,f,e);null===h||l.current.has(m)||null===f&&o.current.has(m)||s()&&(null!==f&&l.current.add(m),o.current.add(m),n((a=RO(t),i={decisions:h},a?{[a]:i}:i)))},[e,t,n,r,a,u,d,p,s])}({autoApprove:ea,interrupt:eV?eO:void 0,resumeInterrupt:eM,isLoading:eN,resetKey:er,policy:nf,canResumeNow:eq});let nh=(0,eu.useMemo)(()=>{let e=eO?.value;return e?.type==="ask_user"&&Array.isArray(e.questions)?e.questions:null},[eO]),ng=(0,eu.useCallback)(e=>{eM({status:"answered",answers:e})},[eM]),nb=(0,eu.useCallback)(()=>{eM({status:"cancelled"})},[eM]),ny=(0,eu.useMemo)(()=>{let e=eO?.value&&eO.value.action_requests;return Array.isArray(e)?e:[]},[eO]),nE=(0,eu.useMemo)(()=>RO(eO),[eO]),nx=ny.length>0&&(nf.checking||null!==bZ(ny,nf.decisions,ea)),nv=(0,eu.useCallback)(e=>{var t,n;return eM((t=nE,n=e,t?{[t]:n}:n))},[eM,nE]),nk=(0,eu.useMemo)(()=>{let e=new Map,t=new Set,n=ek.filter(e=>{if("human"===e.type){let n,r=(n=Rw(gj(e)))?`${n.taskId}:${n.runId||"legacy"}`:null;return!r||!t.has(r)&&(t.add(r),!0)}let n=ev.getMessagesMetadata(e)?.streamMetadata,r=n?.langgraph_checkpoint_ns;return!("string"==typeof r&&r.includes("|")||function(e){if("human"===e.type){var t;if("human"!==e.type)return!1;let n=e.additional_kwargs;return n?.lc_source==="summarization"}return"ai"===e.type&&!!(t=gj(e))&&(!!(/\bconversation that has been summarized\b/.test(t)||/\bHere is a summary of the conversation to date\b/.test(t)||/<summary>[\s\S]*<\/summary>/.test(t))||/##\s+SESSION INTENT\b/.test(t))}(e))}),r=new Set;for(let e of n){if("tool"!==e.type)continue;let t=e.tool_call_id;t&&r.add(t)}let a=new Map;for(let e of ny)a.set(e.name,(a.get(e.name)??0)+1);let i=-1;n.forEach((e,t)=>{"human"===e.type&&(i=t)}),n.forEach((t,n)=>{let s=n>i;if("ai"===t.type){let n=new Map,i=gF(t).map((e,t)=>({toolCall:e,sourceIndex:t})).filter(({toolCall:e})=>{if("string"!=typeof e.id||!e.id)return!0;let t=n.get(e.id);return t?(0===Object.keys(t.args).length&&Object.keys(e.args).length>0&&(t.args=e.args),!t.name&&e.name&&(t.name=e.name),!1):(n.set(e.id,e),!0)}).filter(({toolCall:e})=>"ToolSelectionResponse"!==e.name||eN&&!eO).map(({toolCall:e,sourceIndex:n})=>{let i=e.name||"unknown",o=e.id||`${t.id??"ai-message"}-tool-${n}-${i}`,l=a.get(i)??0,c=l>0&&s&&!r.has(o);return c&&a.set(i,l-1),{id:o,name:i,args:e.args,status:c?"interrupted":eI||!s?"stopped":"pending"}});e.set(t.id,{message:t,toolCalls:i})}else if("tool"===t.type){let n=t.tool_call_id;if(!n)return;for(let[,r]of e.entries()){let e=r.toolCalls.findIndex(e=>e.id===n);if(-1!==e){r.toolCalls[e]={...r.toolCalls[e],status:"error"===t.status?"error":"completed",result:gj(t)};break}}}else"human"===t.type&&e.set(t.id,{message:t,toolCalls:[]})});let s=Array.from(e.values());return s.map((e,t)=>{let n=t>0?s[t-1].message:null;return{...e,showAvatar:e.message.type!==n?.type,pinnedSkills:"human"===e.message.type&&null===gg(e.message)?function(e,t){let n=[];for(let r=t+1;r<e.length;r++){let t=gg(e[r].message);if(null===t)break;n.push(t)}return n.length>0?n:Lv}(s,t):Lv}})},[ek,ny,eO,eN,eI,ev]),nS=(0,eu.useMemo)(()=>Object.values(eU).some(e=>e.dispatches.length>0),[eU]),{value:nT}=ae(),nw=e=>{let t=e.content;if("string"==typeof t)return t.trim().length>0;if(Array.isArray(t))for(let e of t){let t=e?.text;if("string"==typeof t&&t.trim().length>0)return!0}return!1},n_=(0,eu.useMemo)(()=>{let e=[];for(let t of nk)if("ai"===t.message.type&&t.toolCalls.length>0&&!nw(t.message)){let n=e[e.length-1];n?.kind==="action-group"?n.items.push(t):e.push({kind:"action-group",items:[t]})}else e.push({kind:"message",data:t});return e},[nk]),nA=nk.length>0?nk[nk.length-1].message.id:void 0,nN=(0,eu.useMemo)(()=>{if(!e$)return null;let e=new Set(nk.map(e=>e.message.id));for(let t=e$.cutoffIndex;t<ek.length;t++){let n=ek[t]?.id;if(null!=n&&e.has(n))return n}return null},[e$,ek,nk]),nI={in_progress:eS.filter(e=>"in_progress"===e.status),pending:eS.filter(e=>"pending"===e.status),completed:eS.filter(e=>"completed"===e.status)},nC=eS.length>0,nR=Object.keys(eT).length>0,[nO,nL]=(0,eu.useState)(()=>new Set);(0,eu.useEffect)(()=>{0===ny.length&&nL(new Set)},[ny.length]);let nD=(0,eu.useCallback)(e=>{nL(t=>{let n=new Set(t);return n.add(e),n})},[]),nM=(0,eu.useMemo)(()=>{let e=eO?.value&&eO.value.review_configs;if(!Array.isArray(e))return new Map;let t=[];for(let n of e){let e=n.actionName??n.action_name;e&&t.push([e,{actionName:e,allowedDecisions:n.allowedDecisions??n.allowed_decisions}])}return new Map(t)},[eO]),nP=(0,eu.useMemo)(()=>{for(let e=nk.length-1;e>=0;e--){let t=nk[e];if("ai"===t.message.type)return t.toolCalls}return[]},[nk]),nj=(0,eu.useMemo)(()=>"fallback"==(0===ny.length?"none":RL(nP,ny).size===ny.length?"inline":"fallback"),[ny,nP]),nF=nj?Lm:ny,nU=(0,eu.useMemo)(()=>{let e=new Set(nP.filter(e=>"task"===e.name&&"completed"!==e.status&&"error"!==e.status).map(e=>gz(e.args)).filter(e=>null!==e));return 1===e.size?[...e][0]:null},[nP]);return(0,ec.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,ec.jsx)(rL,{open:es,onOpenChange:eo,children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Enable Auto-approve?"}),(0,ec.jsx)(rB,{children:"EvoScientist will run routine tool actions in this research without asking. Dangerous shell commands (piping downloads into an interpreter or network tool) are auto-rejected, delete is auto-approved, and schedule_task always asks first."})]}),(0,ec.jsxs)("div",{className:"flex items-start gap-3 rounded-lg border border-amber-300 bg-amber-50 p-3 text-sm text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100",children:[(0,ec.jsx)(le,{className:"mt-0.5 size-4 shrink-0","aria-hidden":"true"}),(0,ec.jsx)("p",{children:"Auto-approve stays on for this research only and follows it across views and reloads. Delete is included; scheduled tasks still show an approval card here."})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>eo(!1),children:"Cancel"}),(0,ec.jsx)(rQ,{onClick:tF,className:"bg-amber-600 text-white hover:bg-amber-700",children:"Enable Auto-approve"})]})]})}),(0,ec.jsx)("div",{className:"flex-1 overflow-y-auto overflow-x-hidden overscroll-contain",ref:eb,"data-chat-transcript":!0,children:(0,ec.jsx)("div",{className:"mx-auto w-full max-w-[960px] px-4 pb-4 pt-3 sm:px-5",ref:ey,children:eR?(0,ec.jsx)("div",{className:"flex items-center justify-center p-8",children:(0,ec.jsx)("p",{className:"text-muted-foreground",children:"Loading…"})}):(0,ec.jsxs)(ec.Fragment,{children:[0===nk.length&&!eN&&!ts&&(0,ec.jsxs)("div",{className:"flex min-h-[42vh] flex-col items-center justify-center px-3 pt-12 text-center sm:pt-16",children:[(0,ec.jsx)("h2",{className:"text-pretty text-lg font-semibold sm:text-xl",children:"Where research evolves"}),(0,ec.jsx)("p",{className:"mt-2 max-w-lg text-sm text-muted-foreground",children:"Your self-evolving lab partner — reads the literature, runs experiments, and remembers what matters."}),(0,ec.jsx)("div",{className:"mt-4 flex max-w-2xl flex-wrap justify-center gap-2",children:Lf.map(e=>(0,ec.jsx)("button",{type:"button",onClick:()=>np(e),className:"max-w-full rounded-full border border-border bg-card px-2.5 py-1.5 text-xs text-foreground shadow-sm transition-colors hover:border-[var(--color-border)] hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring sm:text-sm",children:e},e))}),n&&r&&(0,ec.jsx)(OE,{onNavigate:n,onOpenThread:r})]}),n_.map((e,t)=>{if("action-group"===e.kind){let n=e.items[e.items.length-1].message.id,r=t===n_.length-1,a=eN&&r&&n===nA;return(0,ec.jsx)(Os,{items:e.items,isStreaming:a,defaultCollapsed:nT,isAtBottom:ex,lastMessageId:nA,isLoading:eN||!eV,actionRequests:tP?nF:[],submittedActionRequestKeys:nO,onActionRequestSubmitted:nD,reviewConfigsMap:nM,stream:ev,onResumeInterrupt:nv,graphId:eG,onEditMessage:nd,autoApprove:ea,approvalAutoResolves:nx,subAgentSteps:tA,ui:e_,compactionAnchorId:nN,summarizationEvent:e$??null},`action-group-${e.items[0].message.id}`)}let n=e.data,r=e_?.filter(e=>e.metadata?.message_id===n.message.id),a=t===n_.length-1,i="human"!==n.message.type,s=nN===n.message.id;return(0,ec.jsxs)(eu.default.Fragment,{children:[s&&e$&&(0,ec.jsx)(Oi,{content:e$.content,summarizedCount:e$.cutoffIndex}),(0,ec.jsx)(Or,{message:n.message,toolCalls:n.toolCalls,isLoading:eN||!eV,isStreaming:eN&&a&&i,actionRequests:a&&tP?nF:void 0,submittedActionRequestKeys:nO,onActionRequestSubmitted:nD,reviewConfigsMap:a?nM:void 0,ui:r,stream:ev,onResumeInterrupt:nv,graphId:eG,onEditMessage:nd,autoApprove:ea,approvalAutoResolves:nx,subAgentSteps:tA,pinnedSkills:n.pinnedSkills})]},n.message.id)}),e$&&!nN&&(0,ec.jsx)(Oi,{content:e$.content,summarizedCount:e$.cutoffIndex}),nj&&tP&&(0,ec.jsx)(O_,{actionRequests:ny,reviewConfigsMap:nM??new Map,requestedBy:nU,interruptKey:nE,onResume:nv,isLoading:eN||nf.checking||!eV}),nh&&tP&&(0,ec.jsx)("div",{className:"mt-4",children:(0,ec.jsx)(OR,{questions:nh,onSubmit:ng,onCancel:nb,isLoading:eN||!eV},`ask-user-${nE??gP(nh,0)}`)})]})})}),(0,ec.jsxs)("div",{className:"relative flex-shrink-0 bg-background",children:[!ex&&nk.length>0&&(0,ec.jsx)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:e=>{eE(),0===e.detail&&g.current?.focus({preventScroll:!0})},"aria-label":"Jump to latest message",title:"Jump to latest message",className:"absolute bottom-full left-1/2 z-10 mb-3 flex h-9 w-9 -translate-x-1/2 items-center justify-center rounded-full border border-border bg-card text-foreground shadow-md transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring max-md:h-11 max-md:w-11",children:(0,ec.jsx)(bv,{className:"h-4 w-4","aria-hidden":"true"})}),q.length>0&&(0,ec.jsx)("div",{"aria-label":"Queued messages",className:"relative mx-auto -mb-4 w-[calc(100%-16px)] max-w-[960px] px-2 sm:w-[calc(100%-24px)]",children:(0,ec.jsx)("div",{className:"rounded-b-lg rounded-t-2xl border border-border bg-background pb-5 pt-1 shadow-sm",children:q.map((e,t)=>{let n=x.trim().length>0||P.length>0,r=RJ(e.text,{skills:k,goals:!0===e0,commands:new Set(tQ)});return(0,ec.jsxs)("div",{onDragOver:e=>e.preventDefault(),onDrop:()=>tK(e.id),className:"relative flex min-h-11 items-start gap-1.5 px-2 py-2 text-sm sm:gap-2 sm:px-3",children:[(0,ec.jsx)("button",{type:"button",draggable:!0,onDragStart:t=>{en.current=e.id,t.dataTransfer.effectAllowed="move",t.dataTransfer.setData("text/plain",String(e.id))},onDragEnd:()=>{en.current=null},onKeyDown:n=>{"ArrowUp"===n.key&&t>0&&(n.preventDefault(),tY(e.id,-1)),"ArrowDown"===n.key&&t<q.length-1&&(n.preventDefault(),tY(e.id,1))},"aria-label":`Reorder queued message ${t+1} of ${q.length}`,title:"Drag to reorder, or use the arrow keys",className:"mt-0.5 inline-flex size-5 shrink-0 cursor-grab items-center justify-center rounded text-muted-foreground/60 focus-visible:ring-2 focus-visible:ring-ring active:cursor-grabbing",children:(0,ec.jsx)(mb,{className:"size-3.5","aria-hidden":"true"})}),(0,ec.jsx)(bI,{className:"mt-0.5 size-4 shrink-0 text-muted-foreground","aria-hidden":"true"}),(0,ec.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-0.5",children:[(0,ec.jsxs)("span",{className:"line-clamp-2 whitespace-pre-wrap break-words pt-0.5 text-foreground",children:[r.chip&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"sr-only",children:r.lead}),(0,ec.jsx)("span",{"aria-hidden":"true",className:"select-none",children:(0,ec.jsx)(R5,{chip:r.chip,className:"mr-1.5 h-5 align-middle"})})]}),e.text.slice(r.lead.length)]}),e.files.length>0&&(0,ec.jsxs)("span",{className:"inline-flex items-center gap-1 text-xs text-muted-foreground",children:[(0,ec.jsx)(bN,{className:"size-3 shrink-0","aria-hidden":"true"}),e.files.length," file",1===e.files.length?"":"s"]})]}),(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5",children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>tV(e.id),"aria-label":"Steer with this message next",title:"Submit next without interrupting the current turn",className:"inline-flex h-7 items-center gap-1 rounded-full px-2 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)(bI,{className:"size-3.5","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden sm:inline",children:"Steer"})]}),(0,ec.jsx)("button",{type:"button",onClick:()=>tX(e.id),"aria-label":"Remove queued message",title:"Remove from queue",className:"inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(fz,{className:"size-3.5","aria-hidden":"true"})}),(0,ec.jsxs)("details",{className:"group/menu relative",onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||e.currentTarget.removeAttribute("open")},onKeyDown:e=>{"Escape"===e.key&&(e.currentTarget.removeAttribute("open"),e.currentTarget.querySelector("summary")?.focus())},children:[(0,ec.jsx)("summary",{"aria-label":"More queued message actions",title:"More actions",className:"inline-flex size-7 cursor-pointer list-none items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden",children:(0,ec.jsx)(fD,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("div",{className:"absolute right-0 top-8 z-30 min-w-40 rounded-xl border border-border bg-background p-1.5 shadow-lg",children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>tW(e.id),disabled:n,className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-2 text-left text-sm text-foreground transition-colors hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-40",children:[(0,ec.jsx)(fM,{className:"size-4","aria-hidden":"true"}),"Edit message"]}),(0,ec.jsxs)("button",{type:"button",onClick:tZ,className:"flex w-full items-center gap-2 rounded-lg px-2.5 py-2 text-left text-sm text-foreground transition-colors hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)(bC,{className:"size-4","aria-hidden":"true"}),"Close queue"]})]})]})]})]},e.id)})})}),(0,ec.jsxs)("div",{ref:y,"data-mode":tl??void 0,className:rO("relative z-10 mx-auto mb-2 flex w-[calc(100%-16px)] max-w-[960px] flex-shrink-0 flex-col overflow-hidden rounded-xl border bg-background transition-[color,background-color,border-color,box-shadow] duration-200 ease-in-out sm:mb-4 sm:w-[calc(100%-24px)]","focus-within:ring-2 focus-within:ring-ring",tl?"border-[var(--brand)] shadow-[0_0_0_3px_color-mix(in_srgb,var(--brand)_16%,transparent)]":"border-border"),children:[(0,ec.jsxs)("div",{className:"flex max-h-60 flex-col overflow-y-auto border-b border-border bg-sidebar empty:hidden sm:max-h-72",children:[!m&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(OT,{workflows:eU,expanded:!1,onClick:()=>f(e=>"workflow"===e?null:"workflow")}),(o=eS.find(e=>"in_progress"===e.status),c=(l=eS.length)-nI.pending.length,u=l===c,d=nC?(0,ec.jsx)("button",{type:"button",onClick:()=>f(e=>"tasks"===e?null:"tasks"),className:"grid w-full cursor-pointer grid-cols-[auto_auto_1fr] items-center gap-2.5 px-3 py-2.5 text-left sm:px-4","aria-expanded":"tasks"===m,children:u?[(0,ec.jsx)(bk,{size:16,className:"text-[var(--color-success)]"},"icon"),(0,ec.jsx)("span",{className:"ml-[1px] min-w-0 truncate text-sm",children:"All tasks completed"},"label")]:null!=o?[(0,ec.jsx)("div",{children:LN(o.status)},"icon"),(0,ec.jsxs)("span",{className:"ml-[1px] min-w-0 truncate text-sm",children:["Task"," ",l-nI.pending.length," ","of ",l]},"label"),(0,ec.jsx)("span",{className:"min-w-0 gap-2 truncate text-sm text-muted-foreground",children:o.content},"content")]:[(0,ec.jsx)(bS,{size:16,className:"text-[var(--color-text-tertiary)]"},"icon"),(0,ec.jsxs)("span",{className:"ml-[1px] min-w-0 truncate text-sm",children:["Task"," ",l-nI.pending.length," of"," ",l]},"label")]}):null,p=nR?(0,ec.jsxs)("button",{type:"button",onClick:()=>f(e=>"files"===e?null:"files"),className:"flex flex-shrink-0 cursor-pointer items-center gap-2 px-3 py-2.5 text-left text-sm sm:px-4","aria-expanded":"files"===m,children:[(0,ec.jsx)(bT,{size:16}),"Files (State)",(0,ec.jsx)("span",{className:"h-4 min-w-4 rounded-full bg-[var(--brand-solid)] px-0.5 text-center text-[10px] leading-[16px] text-[var(--brand-foreground)]",children:Object.keys(eT).length})]}):null,nC||nR?(0,ec.jsxs)("div",{className:"flex items-center",children:[(0,ec.jsx)("div",{className:"min-w-0 flex-1",children:d}),p]}):null)]}),m&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)("div",{className:"sticky top-0 flex items-stretch bg-sidebar text-sm",children:[nC&&(0,ec.jsx)("button",{type:"button",className:"py-2.5 pr-4 first:pl-3 aria-expanded:font-semibold sm:first:pl-4",onClick:()=>f(e=>"tasks"===e?null:"tasks"),"aria-expanded":"tasks"===m,children:"Tasks"}),nR&&(0,ec.jsxs)("button",{type:"button",className:"inline-flex items-center gap-2 py-2.5 pr-4 first:pl-3 aria-expanded:font-semibold sm:first:pl-4",onClick:()=>f(e=>"files"===e?null:"files"),"aria-expanded":"files"===m,children:["Files (State)",(0,ec.jsx)("span",{className:"h-4 min-w-4 rounded-full bg-[var(--brand-solid)] px-0.5 text-center text-[10px] leading-[16px] text-[var(--brand-foreground)]",children:Object.keys(eT).length})]}),nS&&(0,ec.jsx)("button",{type:"button",className:"py-2.5 pr-4 first:pl-3 aria-expanded:font-semibold sm:first:pl-4",onClick:()=>f(e=>"workflow"===e?null:"workflow"),"aria-expanded":"workflow"===m,children:"Workflow"}),(0,ec.jsx)("button",{"aria-label":"Close",className:"flex-1",onClick:()=>f(null)})]}),(0,ec.jsxs)("div",{ref:h,className:"px-3 sm:px-4",children:["tasks"===m&&Object.entries(nI).filter(([e,t])=>t.length>0).map(([e,t])=>(0,ec.jsxs)("div",{className:"mb-4",children:[(0,ec.jsx)("h3",{className:"mb-1 text-[10px] font-semibold uppercase tracking-wider text-tertiary",children:{pending:"Pending",in_progress:"In Progress",completed:"Completed"}[e]}),(0,ec.jsx)("div",{className:"grid grid-cols-[auto_1fr] gap-3 rounded-sm p-1 pl-0 text-sm",children:t.map((t,n)=>(0,ec.jsxs)(eu.Fragment,{children:[LN(t.status,"mt-0.5"),(0,ec.jsx)("span",{className:"break-words text-inherit",children:t.content})]},`${e}_${t.id}_${n}`))})]},e)),"files"===m&&(0,ec.jsx)("div",{className:"mb-6",children:(0,ec.jsx)(Ld,{files:eT})}),"workflow"===m&&(0,ec.jsx)(Ow,{workflows:eU,expertNames:tE})]})]})]}),ea&&(0,ec.jsxs)("div",{"aria-live":"polite",className:"flex items-center justify-between gap-3 border-b border-amber-300 bg-amber-50 px-3 py-2 text-xs text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100",children:[(0,ec.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,ec.jsx)(le,{className:"size-3.5 shrink-0","aria-hidden":"true"}),"Tool actions auto-run, including delete. Dangerous commands are blocked; scheduled tasks still ask."]}),(0,ec.jsx)("button",{type:"button",onClick:tU,"aria-label":"Turn off auto-approve",className:"shrink-0 rounded px-2 py-1 font-semibold transition-colors hover:bg-amber-200 focus-visible:ring-2 focus-visible:ring-amber-700 dark:hover:bg-amber-900",children:"Turn Off"})]}),(tD||tv>0||ty.length>0)&&(0,ec.jsxs)("div",{className:"flex items-center gap-1.5 border-t border-border px-3 py-1.5 text-xs text-muted-foreground",children:[tD&&(0,ec.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>no?na.closeMenu():L.current(),disabled:nr,"aria-haspopup":"listbox","aria-expanded":no,title:"Click to change model for this chat","aria-label":"Change model for this chat",className:"-mx-1 flex min-w-0 items-center gap-1.5 rounded px-1 py-0.5 transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60 disabled:hover:bg-transparent",children:[(0,ec.jsx)(bA,{className:"size-3.5 shrink-0 text-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)(OD,{text:tD.name,className:"truncate font-medium text-foreground"}),tD.provider&&(0,ec.jsx)(OD,{text:`\xb7 ${tD.provider}`,className:"hidden shrink-0 sm:inline"})]}),(0,ec.jsx)(OO,{teams:ty,onManage:()=>n?.({view:"experts"})}),(0,ec.jsx)(Oj,{goal:eZ,busy:eQ,verdict:eJ,open:V,onOpenChange:Y}),tv>0&&(0,ec.jsxs)("button",{type:"button",onClick:e,title:`${tv} background agent${1===tv?"":"s"} running — click to view`,"aria-label":`${tv} background agent${1===tv?"":"s"} running — view`,className:"ml-auto flex shrink-0 items-center gap-1.5 rounded px-1.5 py-0.5 font-medium text-[var(--brand)] transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)("span",{className:"size-2 animate-pulse rounded-full bg-[var(--color-warning)]","aria-hidden":"true"}),tv," agent",1===tv?"":"s"]})]}),tn&&(0,ec.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-border px-3 py-2 text-xs text-muted-foreground",children:[(0,ec.jsxs)("span",{className:"min-w-0 truncate",children:[i2(tn)," isn't a project on this backend."]}),(0,ec.jsx)(rQ,{type:"button",variant:"outline",size:"sm",onClick:()=>tt(tn),children:"Add this folder as a project"})]}),(0,ec.jsxs)("form",{onSubmit:tq,className:"mobile-composer flex flex-col",children:[P.length>0&&(0,ec.jsxs)("div",{"aria-label":"Attached files",className:"flex flex-wrap gap-2 border-b border-border px-3 py-2",children:[P.map(e=>(0,ec.jsxs)("span",{className:"inline-flex max-w-full items-center gap-1.5 rounded-md border border-border bg-muted px-2 py-1 text-xs text-foreground",children:[(0,ec.jsx)(bT,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"max-w-48 truncate",title:e.path,children:e.name}),(0,ec.jsx)("button",{type:"button",onClick:()=>t$(e),"aria-label":`Remove ${e.name} from this message`,title:`Remove ${e.name} from this message`,className:"rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(n1,{className:"size-3.5","aria-hidden":"true"})})]},Lh(e))),e7&&(0,ec.jsx)("p",{className:"w-full text-xs text-muted-foreground",children:"Attached in another project: remove them to send here."})]}),(0,ec.jsxs)("div",{onMouseDown:e=>{e.target===e.currentTarget&&(e.preventDefault(),g.current?.focus())},className:rO("flex min-w-0 cursor-text items-start transition-colors duration-200",(t9||_)&&"pl-3.5 sm:pl-4",tl&&"bg-[color-mix(in_srgb,var(--brand-soft)_70%,transparent)]"),children:[_&&(0,ec.jsx)(R5,{chip:_.chip,leaving:!0,onLeft:()=>A(null),className:"mr-2 mt-3"},_.seq),t9&&(0,ec.jsx)(R5,{chip:t9,onRemove:nc,disabled:nr,flyFrom:"skill"===t9.kind&&T?.name===t9.name&&T!==C.current?T.rect:null,className:"mr-2 mt-3"},"skill"===t9.kind?t9.name:t9.kind),t9&&(0,ec.jsx)("span",{id:b,className:"sr-only",children:"skill"===t9.kind?`Skill ${t9.name} pinned. Backspace at the start removes it.`:"goal"===t9.kind?"Setting a goal: what you write is the goal. Escape leaves goal mode.":"Amending the goal: what you write is the change. Escape leaves amend mode."}),(0,ec.jsx)("textarea",{ref:g,value:t6,onChange:e=>{let t=e.target.value;if(!(!tl&&null===RZ(t6,tJ).chip&&null!==RZ(t,tJ).chip)){let n=t5.lead+t;v(n),t1(null===k&&RY(n)?n:null),na.onChange(e);return}let n=RQ(t,tJ),r=n.slice(RZ(n,tJ).lead.length);n!==t&&(t2.current=t.slice(0,t.length-n.length)),v(n),na.onChange(e),na.placeCaret(Math.max(0,(e.target.selectionStart??t.length)-(t.length-r.length)))},onKeyDown:nu,...na.textareaProps,"aria-describedby":t9?b:void 0,"aria-label":"Message",disabled:nr,placeholder:"readOnly"===eW.kind?eW.reason:!eV&&U?B?`Can't read the backend's projects (${B}). Retrying…`:"Connecting to the backend…":ts?"Respond to the request above to continue…":"goal"===tl?"Describe the goal; its criteria are drafted for you to review…":"amend"===tl?"What should change in the goal?":eN?"Queue a follow-up — sends when this turn finishes…":t9?"Add your message…":"Ask EvoScientist anything…",className:rO("font-inherit field-sizing-content max-h-[min(30dvh,12rem)] min-h-12 min-w-0 flex-1 resize-none overflow-y-auto border-0 bg-transparent pb-2.5 pr-3.5 pt-3 text-sm leading-6 text-primary outline-none placeholder:text-tertiary focus:ring-0 disabled:cursor-not-allowed sm:pr-4",t9||_?"pl-0":"pl-3.5 sm:pl-4"),rows:1})]}),(0,ec.jsx)(OK,{...na.menuProps,anchorRef:y}),(0,ec.jsxs)("div",{className:"flex items-center justify-between gap-2 p-2 sm:p-2.5",children:[(0,ec.jsxs)("div",{className:"flex items-center gap-1",children:[(0,ec.jsx)("input",{ref:E,type:"file",multiple:!0,onChange:tB,disabled:!eV||!e5||ts||H,className:"hidden"}),(0,ec.jsx)("button",{type:"button",onClick:()=>E.current?.click(),disabled:!eV||!e5||ts||H,"aria-label":"Upload files to workspace",title:"Upload files to workspace (max 50 MB each)",className:"inline-flex size-8 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",children:(0,ec.jsx)(bN,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("button",{type:"button",onClick:()=>ea?tU():eo(!0),"aria-pressed":ea,"aria-label":ea?"Turn off auto-approve":"Auto-approve",title:"Auto-approve all tool actions in this conversation",className:rO("inline-flex items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium transition-colors",ea?"bg-amber-600 text-white hover:bg-amber-700":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:[(0,ec.jsx)(b_,{className:"size-3.5","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden min-[360px]:inline",children:ea?"Auto-approve On":"Auto-approve"})]}),e9&&te.length>1?(0,ec.jsxs)(dg,{modal:!1,children:[(0,ec.jsx)(dy,{asChild:!0,children:(0,ec.jsxs)("button",{type:"button","aria-label":`Project: ${e9.name}. Change project`,title:`Project: ${e9.full}`,className:"inline-flex min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:bg-accent",children:[(0,ec.jsx)(bw,{className:"size-3.5 flex-shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden max-w-[140px] truncate font-mono sm:inline lg:max-w-[220px]",children:e9.name}),(0,ec.jsx)(lA,{className:"size-3 flex-shrink-0","aria-hidden":"true"})]})}),(0,ec.jsxs)(dA,{align:"start",className:"max-w-[min(20rem,90vw)]",children:[(0,ec.jsx)(dS,{value:eY??"",onValueChange:e=>z(e,{remember:!0}),children:te.map(e=>(0,ec.jsxs)(dC,{value:e.key,disabled:e.missing,title:e.key,children:[(0,ec.jsx)("span",{className:"truncate",children:e.name}),e.missing&&(0,ec.jsx)("span",{className:"ml-auto text-[11px] text-muted-foreground",children:"folder missing"})]},e.key))}),(0,ec.jsx)(dI,{}),(0,ec.jsxs)(dN,{onSelect:()=>tt(),children:[(0,ec.jsx)(fO,{className:"size-3.5","aria-hidden":"true"}),"Add project…"]}),n&&(0,ec.jsx)(ec.Fragment,{children:(0,ec.jsxs)(dN,{onSelect:()=>n({view:"workspace"}),children:[(0,ec.jsx)(bw,{className:"size-3.5","aria-hidden":"true"}),a?"Hide files":"Show files"]})})]})]}):n&&e9?(0,ec.jsxs)("button",{type:"button",onClick:()=>n({view:"workspace"}),title:`${a?"Close":"Open"} workspace: ${e9.full}`,"aria-label":`${a?"Close":"Open"} workspace: ${e9.full}`,"aria-pressed":!!a,className:"inline-flex min-w-0 items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)(bw,{className:"size-3.5 flex-shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden max-w-[140px] truncate font-mono sm:inline lg:max-w-[220px]",children:e9.name})]}):null]}),(0,ec.jsx)("div",{className:"flex justify-end gap-2",children:(0,ec.jsx)(rQ,{type:eN?"button":"submit",variant:eN?"destructive":"default",onClick:eN?eD:tq,onMouseDown:e=>e.preventDefault(),disabled:!eN&&(tM||H||e7||!x.trim()),"aria-label":eN?"Stop generating":tl?ns:"Send message",children:eN?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(bE,{size:14}),(0,ec.jsx)("span",{className:"hidden sm:inline",children:"Stop"})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(bx,{size:18}),(0,ec.jsx)(OD,{text:ns,className:"hidden sm:inline"})]})})})]})]})]})]})]})});LI.displayName="ChatInterface";let LC=n0("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]),LR=eu.default.memo(({skill:e,preferExpert:t,onClose:n})=>{let[r,a]=(0,eu.useState)(null),[i,s]=(0,eu.useState)(!1),[o,l]=(0,eu.useState)(null);if((0,eu.useEffect)(()=>{if(!e)return;let t=!1;return a(null),l(null),s(!0),fetch(`/api/skills/detail?name=${encodeURIComponent(e.name)}`).then(async e=>{let t=await e.json().catch(()=>null);if(!e.ok)throw Error(t?.error||`Failed to load (${e.status})`);return t}).then(e=>{t||a(e)}).catch(e=>{t||l(e.message??"Failed to load skill detail.")}).finally(()=>{t||s(!1)}),()=>{t=!0}},[e]),!e)return null;let c=r?.title??e.title,u=r?.version??e.version,d=r?.description??e.description,p=r?.installed??e.installed,m=t&&r?.expertBody||r?.body;return(0,ec.jsx)(rL,{open:!0,onOpenChange:n,children:(0,ec.jsxs)(rP,{"aria-describedby":void 0,className:"flex h-[80vh] max-h-[80vh] min-w-[60vw] flex-col p-6",children:[(0,ec.jsx)(rU,{className:"sr-only",children:c}),(0,ec.jsxs)("div",{className:"mb-3 flex items-start gap-3 border-b border-border pb-4",children:[(0,ec.jsx)(fU,{className:"mt-1 size-6 shrink-0 text-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)("div",{className:"min-w-0 flex-1",children:(0,ec.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-0.5",children:[(0,ec.jsx)("h2",{className:"break-words text-lg font-semibold",children:c}),u&&(0,ec.jsxs)("span",{className:"font-mono text-xs text-muted-foreground",children:["v",u]}),null!=e.fileCount&&(0,ec.jsxs)("span",{className:"text-xs text-muted-foreground",children:["· ",e.fileCount," file",1===e.fileCount?"":"s"]}),p&&(0,ec.jsxs)("span",{className:"bg-[var(--brand)]/10 inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium text-[var(--brand)]",children:[(0,ec.jsx)(LC,{className:"size-3","aria-hidden":"true"}),"Installed"]})]})})]}),(0,ec.jsx)(hp,{className:"min-h-0 flex-1",children:(0,ec.jsxs)("div",{className:"pr-3",children:[(0,ec.jsx)("p",{className:"whitespace-pre-wrap text-sm leading-relaxed text-foreground",children:d||"No description."}),(0,ec.jsx)("div",{className:"mt-4 border-t border-border pt-4",children:i?(0,ec.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading skill contents…"]}):o?(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:o}):m?(0,ec.jsx)(Rp,{content:m}):(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"No additional contents."})})]})})]})})});LR.displayName="SkillDetailDialog";let LO=n0("circle-arrow-up",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]);function LL({title:e,description:t,meta:n,installed:r,installedVersion:a,latestVersion:i,updateAvailable:s,busy:o,onOpen:l,onInstall:c,onUpdate:u,onUninstall:d,actions:p,icon:m=fU}){let f=r?a&&`v${a}`:i&&`v${i}`;return(0,ec.jsxs)("div",{className:"flex flex-col rounded-lg border border-border bg-card p-3",children:[(0,ec.jsxs)("button",{type:"button",onClick:l,className:"-m-1 flex items-start gap-2.5 rounded-md p-1 text-left transition-colors hover:bg-muted/50 focus-visible:ring-2 focus-visible:ring-ring",title:"View details",children:[(0,ec.jsx)(m,{className:"mt-0.5 size-5 shrink-0 text-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-0.5",children:[(0,ec.jsx)("h3",{className:"break-words text-lg font-medium leading-tight",children:e}),f&&(0,ec.jsx)("span",{className:"shrink-0 font-mono text-xs text-muted-foreground",children:f}),n&&(0,ec.jsxs)("span",{className:"shrink-0 text-xs text-muted-foreground",children:["· ",n]})]}),(0,ec.jsx)("p",{className:"mt-1 line-clamp-2 text-sm leading-6 text-muted-foreground",children:t||"No description."})]})]}),(0,ec.jsxs)("div",{className:"mt-2.5 flex flex-wrap items-center justify-end gap-2",children:[p,r&&s&&(0,ec.jsxs)("button",{type:"button",onClick:u,disabled:!!o,className:"inline-flex items-center gap-1.5 rounded-md bg-[var(--brand-solid)] px-2.5 py-1 text-xs font-medium text-[var(--brand-foreground)] transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",title:i?`Update to v${i}`:"Update",children:["update"===o?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(LO,{className:"size-3.5","aria-hidden":"true"}),"update"===o?"Updating…":i?`Update → v${i}`:"Update"]}),r?d?(0,ec.jsxs)("button",{type:"button",onClick:d,disabled:!!o,className:"inline-flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-muted-foreground transition-colors hover:border-destructive/40 hover:bg-destructive/10 hover:text-destructive focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:["uninstall"===o?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(fz,{className:"size-3.5","aria-hidden":"true"}),"uninstall"===o?"Removing…":"Uninstall"]}):null:(0,ec.jsxs)("button",{type:"button",onClick:c,disabled:!!o,className:"inline-flex items-center gap-1.5 rounded-md bg-[var(--brand-solid)] px-2.5 py-1 text-xs font-medium text-[var(--brand-foreground)] transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:["install"===o?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(fC,{className:"size-3.5","aria-hidden":"true"}),"install"===o?"Installing…":"Install"]})]})]})}let LD=(0,ec.jsx)("span",{className:"shrink-0 rounded-full border border-[var(--brand)] bg-[var(--brand-soft)] px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-[var(--brand)]",title:"Installed — the orchestrator can dispatch it",children:"Active"});function LM(){let{teams:e,refresh:t}=by(sd().current?.key??null),[n,r]=(0,eu.useState)([]),[a,i]=(0,eu.useState)([]),[s,o]=(0,eu.useState)(null),[l,c]=(0,eu.useState)(null),[u,d]=(0,eu.useState)(!0),[p,m]=(0,eu.useState)({}),[f,h]=(0,eu.useState)(null),g=(0,eu.useRef)(0),[b,y]=(0,eu.useState)(null),E=(0,eu.useCallback)(async(e=!1)=>{let t=++g.current;d(!0);let[n,a]=await Promise.allSettled([fetch(`/api/skills/catalog${e?"?refresh=1":""}`).then(async e=>{let t=await e.json();if(!e.ok)throw Error(t?.error||`HTTP ${e.status}`);return t.skills??[]}),fetch("/api/skills").then(async e=>{let t=await e.json();if(!e.ok)throw Error(t?.error||`HTTP ${e.status}`);return t.skills??[]})]);t===g.current&&("fulfilled"===n.status?(r(n.value),o(null)):(r([]),o(n.reason instanceof Error?n.reason.message:"Failed to load catalog.")),"fulfilled"===a.status?(i(a.value),c(null)):c(a.reason instanceof Error?a.reason.message:"Failed to read installed skills."),d(!1))},[]);(0,eu.useEffect)(()=>{E()},[E]);let x=(0,eu.useCallback)(async(e,n)=>{m(t=>({...t,[e]:n})),c(null);try{let r="uninstall"===n?await fetch(`/api/skills?name=${encodeURIComponent(e)}`,{method:"DELETE"}):await fetch("/api/skills/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e})}),a=await r.json().catch(()=>({}));if(!r.ok)throw Error(a?.error||`HTTP ${r.status}`);await E(),t()}catch(e){c(e instanceof Error?e.message:"Action failed.")}finally{m(t=>{let n={...t};return delete n[e],n})}},[E,t]),v=function(e){let t=new Set(e.teams.map(e=>e.name)),n=new Map(e.installed.map(e=>[e.name,e])),r=e.catalog.filter(e=>e.isExpert).map(e=>{let r=e.installed||n.has(e.name);return{...e,installed:r||t.has(e.name),removable:r}}),a=new Set(r.map(e=>e.name)),i=new Set;for(let t of e.teams)i.add(t.name);for(let t of e.installed)t.isExpert&&i.add(t.name);let s=new Map(e.teams.map(e=>[e.name,e]));return{catalog:r,other:[...i].filter(e=>!a.has(e)).map(e=>{let t=n.get(e),r=s.get(e);return{name:e,title:t?.title||e,description:t?.description||r?.description||"",removable:void 0!==t}}).sort((e,t)=>e.title.localeCompare(t.title))}}({teams:e,catalog:n,installed:a}),k=!u&&0===v.catalog.length&&0===v.other.length;return(0,ec.jsxs)("div",{className:"h-full overflow-y-auto",children:[(0,ec.jsxs)("div",{className:"mx-auto max-w-[960px] px-4 py-5 sm:px-5 sm:py-6",children:[(0,ec.jsxs)("header",{className:"mb-4 flex items-start justify-between gap-3",children:[(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("h2",{className:"text-xl font-semibold sm:text-2xl",children:"Experts"}),(0,ec.jsx)("p",{className:"mt-1 text-sm leading-6 text-muted-foreground",children:"Skills that also carry an actor definition, so the orchestrator can dispatch them to run a task on its own. Installing one is all it takes — there is nothing to switch on."})]}),(0,ec.jsx)("button",{type:"button",onClick:()=>{E(!0),t()},disabled:u,className:"inline-flex size-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",title:"Refresh","aria-label":"Refresh",children:u?(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(lb,{className:"size-4","aria-hidden":"true"})})]}),s&&(0,ec.jsxs)("div",{className:"mb-4 flex items-start gap-2 rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-xs text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100",children:[(0,ec.jsx)(le,{className:"mt-0.5 size-3.5 shrink-0","aria-hidden":"true"}),(0,ec.jsxs)("span",{children:["Couldn't load the official catalog: ",s,". Experts already installed are listed below."]})]}),l&&(0,ec.jsx)("div",{className:"mb-4 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive",children:l}),(0,ec.jsxs)("div",{className:"space-y-6",children:[v.catalog.length>0&&(0,ec.jsxs)("section",{children:[(0,ec.jsx)("h3",{className:"mb-2.5 text-xs font-semibold uppercase tracking-wider text-tertiary",children:"Official catalog"}),(0,ec.jsx)("div",{className:"grid grid-cols-1 gap-2.5 sm:grid-cols-2",children:v.catalog.map(e=>(0,ec.jsx)(LL,{icon:fB,title:e.title,description:e.description,meta:e.fileCount?`${e.fileCount} file${1===e.fileCount?"":"s"}`:void 0,installed:e.installed,installedVersion:e.installedVersion,latestVersion:e.latestVersion,updateAvailable:e.updateAvailable,busy:p[e.name],actions:e.installed?LD:void 0,onOpen:()=>h({name:e.name,title:e.title,description:e.description,version:e.installedVersion??e.latestVersion,fileCount:e.fileCount,installed:e.installed}),onInstall:()=>void x(e.name,"install"),onUpdate:()=>void x(e.name,"update"),onUninstall:e.removable?()=>y({name:e.name,title:e.title}):void 0},e.name))})]}),v.other.length>0&&(0,ec.jsxs)("section",{children:[(0,ec.jsx)("h3",{className:"mb-2.5 text-xs font-semibold uppercase tracking-wider text-tertiary",children:"Other installed experts"}),(0,ec.jsx)("div",{className:"grid grid-cols-1 gap-2.5 sm:grid-cols-2",children:v.other.map(e=>(0,ec.jsx)(LL,{icon:fB,title:e.title,description:e.description,installed:!0,busy:p[e.name],actions:LD,onOpen:()=>h({name:e.name,title:e.title,description:e.description,installed:!0}),onUninstall:e.removable?()=>y({name:e.name,title:e.title}):void 0},e.name))})]})]}),k&&(0,ec.jsxs)("div",{className:"rounded-lg border border-dashed border-border px-6 py-10 text-center",children:[(0,ec.jsx)("p",{className:"text-sm font-medium",children:"No experts yet"}),(0,ec.jsx)("p",{className:"mx-auto mt-1.5 max-w-md text-xs leading-relaxed text-muted-foreground",children:"An expert is a skill that also ships an actor definition. Install one from Research Skills and it shows up here — nothing ships with the backend by default."})]})]}),(0,ec.jsx)(LR,{skill:f,preferExpert:!0,onClose:()=>h(null)}),(0,ec.jsx)(rL,{open:null!==b,onOpenChange:e=>{e||y(null)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Uninstall expert?"}),(0,ec.jsxs)(rB,{children:["“",b?.title??b?.name,"” will be removed from this Web UI, with its actor definition. A skill that came from the catalog can be installed again; one written locally cannot."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>y(null),children:"Cancel"}),(0,ec.jsx)(rQ,{onClick:()=>{y(null),b&&x(b.name,"uninstall")},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Uninstall"})]})]})})]})}function LP(){let[,e]=ew("view"),[t,n]=(0,eu.useState)([]),[r,a]=(0,eu.useState)([]),[i,s]=(0,eu.useState)(!0),[o,l]=(0,eu.useState)(null),[c,u]=(0,eu.useState)(null),[d,p]=(0,eu.useState)({}),[m,f]=(0,eu.useState)(null),[h,g]=(0,eu.useState)(null),b=(0,eu.useCallback)(async(e=!1)=>{s(!0),u(null),l(null);let[t,r]=await Promise.allSettled([fetch(`/api/skills/catalog${e?"?refresh=1":""}`).then(async e=>{let t=await e.json();if(!e.ok)throw Error(t.error||"Failed to load catalog");return t.skills??[]}),fetch("/api/skills").then(async e=>{let t=await e.json();if(!e.ok)throw Error(t.error||"Failed to load skills");return t.skills??[]})]),i=e=>!1!==e.isSkill,o=("fulfilled"===t.status?t.value:[]).filter(i);if("rejected"===t.status&&l(t.reason instanceof Error?t.reason.message:"Failed to load the official catalog."),n(o),"fulfilled"===r.status){let e=new Set(o.map(e=>e.name));a(r.value.filter(t=>!e.has(t.name)&&i(t)))}else a([]),u(r.reason instanceof Error?r.reason.message:"Failed to load installed skills.");s(!1)},[]);(0,eu.useEffect)(()=>{b()},[b]);let y=async(e,t="install")=>{p(n=>({...n,[e]:t})),u(null);try{let t=await fetch("/api/skills/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e})}),r=await t.json();if(!t.ok)throw Error(r.error||"Failed to install");n(t=>t.map(t=>t.name===e?{...t,installed:!0,updateAvailable:!1,installedVersion:t.latestVersion??t.installedVersion}:t)),bb()}catch(e){u(e instanceof Error?e.message:`Failed to ${t}`)}finally{p(t=>{let n={...t};return delete n[e],n})}},E=async(e,t)=>{p(t=>({...t,[e]:"uninstall"})),u(null);try{let r=await fetch(`/api/skills?name=${encodeURIComponent(e)}`,{method:"DELETE"});if(!r.ok){let e=await r.json();throw Error(e.error||"Failed to uninstall")}t?n(t=>t.map(t=>t.name===e?{...t,installed:!1}:t)):a(t=>t.filter(t=>t.name!==e)),bb()}catch(e){u(e instanceof Error?e.message:"Failed to uninstall")}finally{p(t=>{let n={...t};return delete n[e],n})}},x=async()=>{h&&(g(null),await E(h.name,h.isCatalog))};return(0,ec.jsxs)("div",{className:"h-full overflow-y-auto",children:[(0,ec.jsxs)("div",{className:"mx-auto max-w-[960px] px-4 py-5 sm:px-5 sm:py-6",children:[(0,ec.jsxs)("header",{className:"mb-4 flex items-start justify-between gap-3",children:[(0,ec.jsxs)("div",{children:[(0,ec.jsx)("h2",{className:"text-xl font-semibold sm:text-2xl",children:"Research Skills"}),(0,ec.jsxs)("p",{className:"mt-1 text-sm leading-6 text-muted-foreground",children:["Install official skills from the"," ",(0,ec.jsx)("a",{href:"https://github.com/EvoScientist/EvoSkills",target:"_blank",rel:"noreferrer",className:"underline underline-offset-2 hover:text-foreground",children:"EvoSkills"})," ","catalog, or remove ones you don't need."]})]}),(0,ec.jsx)("button",{type:"button",onClick:()=>b(!0),disabled:i,"aria-label":"Refresh",className:"rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(lb,{className:i?"size-4 animate-spin":"size-4","aria-hidden":"true"})})]}),c&&(0,ec.jsx)("p",{role:"alert",className:"mb-4 text-sm text-destructive",children:c}),i?(0,ec.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground","aria-live":"polite",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading skills…"]}):(0,ec.jsxs)("div",{className:"space-y-6",children:[(0,ec.jsxs)("section",{children:[(0,ec.jsx)("h3",{className:"mb-2.5 text-xs font-semibold uppercase tracking-wider text-tertiary",children:"Official catalog"}),o?(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:o}):0===t.length?(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"No skills found in the catalog."}):(0,ec.jsx)("div",{className:"grid grid-cols-1 gap-2.5 sm:grid-cols-2",children:t.map(t=>(0,ec.jsx)(LL,{title:t.title,description:t.description,meta:`${t.fileCount} file${1===t.fileCount?"":"s"}`,installed:t.installed,installedVersion:t.installedVersion,latestVersion:t.latestVersion,updateAvailable:t.updateAvailable,busy:d[t.name],actions:Lj(t.isExpert,e),onOpen:()=>f({name:t.name,title:t.title,description:t.description,version:t.installed?t.installedVersion:t.latestVersion,fileCount:t.fileCount,installed:t.installed}),onInstall:()=>y(t.name),onUpdate:()=>y(t.name,"update"),onUninstall:()=>g({name:t.name,title:t.title,isCatalog:!0})},t.name))})]}),r.length>0&&(0,ec.jsxs)("section",{children:[(0,ec.jsx)("h3",{className:"mb-2.5 text-xs font-semibold uppercase tracking-wider text-tertiary",children:"Other installed skills"}),(0,ec.jsx)("div",{className:"grid grid-cols-1 gap-2.5 sm:grid-cols-2",children:r.map(t=>(0,ec.jsx)(LL,{title:t.title,description:t.description,installed:!0,busy:d[t.name],actions:Lj(t.isExpert,e),onOpen:()=>f({name:t.name,title:t.title,description:t.description,installed:!0}),onUninstall:()=>g({name:t.name,title:t.title,isCatalog:!1})},t.name))})]})]})]}),(0,ec.jsx)(LR,{skill:m,onClose:()=>f(null)}),(0,ec.jsx)(rL,{open:null!==h,onOpenChange:e=>{e||g(null)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Uninstall skill?"}),(0,ec.jsxs)(rB,{children:["“",h?.title??h?.name,"” will be removed from this Web UI. You can install it again later."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>g(null),children:"Cancel"}),(0,ec.jsx)(rQ,{onClick:x,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Uninstall"})]})]})})]})}function Lj(e,t){if(e)return(0,ec.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),t("experts")},className:"shrink-0 rounded-full border border-solid border-[var(--brand)] bg-[var(--brand-soft)] px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-[var(--brand)] transition-colors focus-visible:ring-2 focus-visible:ring-ring enabled:hover:border-[var(--brand-hover)] enabled:hover:text-[var(--brand-hover)]",title:"Also an expert — can be dispatched to run a task on its own",children:"Expert"})}let LF=n0("fingerprint",[["path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4",key:"1nerag"}],["path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88",key:"o46ks0"}],["path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02",key:"ptglia"}],["path",{d:"M2 12a10 10 0 0 1 18-6",key:"ydlgp0"}],["path",{d:"M2 16h.01",key:"1gqxmh"}],["path",{d:"M21.8 16c.2-2 .131-5.354 0-6",key:"drycrb"}],["path",{d:"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2",key:"1tidbn"}],["path",{d:"M8.65 22c.21-.66.45-1.32.57-2",key:"13wd9y"}],["path",{d:"M9 6.8a6 6 0 0 1 9 5.2v2",key:"1fr1j5"}]]),LU=n0("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]),LB=n0("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]),L$="rounded border border-border bg-background p-1.5 text-muted-foreground shadow-sm transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",Lz=["complements","contradicts","supersedes"];function LH({node:e,edges:t,nodeMap:n,onClose:r,onNavigate:a}){let i,[s,o]=(0,eu.useState)(null),[l,c]=(0,eu.useState)(!0),[u,d]=(0,eu.useState)(null);(0,eu.useEffect)(()=>{let t=new AbortController;return c(!0),o(null),d(null),fetch(`/api/memory?path=${encodeURIComponent(e.path)}`,{cache:"no-store",signal:t.signal}).then(async e=>{let t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Failed to load observation.");o(t.content??null)}).catch(e=>{t.signal.aborted||(o(null),d(e instanceof Error?e.message:"Failed to load observation."))}).finally(()=>{t.signal.aborted||c(!1)}),()=>t.abort()},[e.path]);let p=(i=new Set,t.filter(t=>{if(t.source!==e.id&&t.target!==e.id)return!1;let n=t.source===e.id?t.target:t.source,r=`${n}::${t.relation}`;return!i.has(r)&&(i.add(r),!0)})),m=s?s.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").trim():"";return(0,ec.jsxs)("div",{className:"flex h-full flex-col overflow-hidden border-l border-border bg-background shadow-xl md:shadow-none",children:[(0,ec.jsxs)("div",{className:"flex items-start justify-between gap-2 border-b border-border px-4 py-3",children:[(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsxs)("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:[e.memory_type," · ",e.scope]}),(0,ec.jsx)("h3",{className:"mt-0.5 line-clamp-3 text-sm font-semibold leading-snug text-foreground",children:e.summary}),e.created_at&&(0,ec.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:(e=>{try{let t=new Date(e);if(Number.isNaN(t.getTime()))return e;return t.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}catch{return e}})(e.created_at)})]}),(0,ec.jsx)("button",{type:"button",onClick:r,className:"mt-0.5 inline-flex size-8 flex-shrink-0 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring","aria-label":"Close observation details",title:"Close observation details",children:(0,ec.jsx)(n1,{className:"h-4 w-4","aria-hidden":"true"})})]}),(0,ec.jsxs)("div",{className:"flex-1 overflow-y-auto","aria-live":l?"polite":"off",children:[p.length>0&&(0,ec.jsxs)("div",{className:"border-b border-border px-4 py-3",children:[(0,ec.jsx)("p",{className:"mb-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",children:"Relations"}),(0,ec.jsx)("ul",{className:"space-y-1.5",children:p.map((t,r)=>{let i=t.source===e.id?t.target:t.source,s=n.get(i);return(0,ec.jsxs)("li",{className:"flex items-start gap-2",children:[(0,ec.jsx)("span",{className:"mt-0.5 flex-shrink-0 rounded px-1.5 py-0.5 text-[10px] font-semibold text-white",style:{background:Op(t.relation)},children:Oh(t.relation)}),s?(0,ec.jsx)("button",{type:"button",onClick:()=>a(i),className:"min-w-0 rounded-sm text-left text-xs text-foreground hover:underline focus-visible:ring-2 focus-visible:ring-ring",children:s.summary}):(0,ec.jsx)("span",{className:"text-xs text-muted-foreground",children:i})]},r)})})]}),(0,ec.jsx)("div",{className:"px-4 py-3",children:l?(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"Loading…"}):u?(0,ec.jsx)("p",{role:"alert",className:"text-xs text-destructive",children:u}):m?(0,ec.jsx)(Rp,{content:m,className:"text-xs leading-relaxed [&_h2]:mb-2 [&_h2]:mt-4 [&_h2]:text-sm [&_p]:mb-3"}):(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"This observation has no body content."})})]})]})}function LG({data:e,selectedId:t,onSelect:n,w:r,h:a}){let i=(0,eu.useMemo)(()=>{let t=new Set;return e.edges.filter(e=>{let n=[e.source,e.target].sort().join("::");return!t.has(n)&&(t.add(n),!0)})},[e.edges]),s=function(e,t,n,r){let[a,i]=(0,eu.useState)([]),s=(0,eu.useRef)([]),o=(0,eu.useRef)(null),l=(0,eu.useRef)(0),c=(0,eu.useRef)(n),u=(0,eu.useRef)(r);return(0,eu.useEffect)(()=>{c.current=n,u.current=r},[n,r]),(0,eu.useEffect)(()=>{var n,r;let a,d;if(0===e.length||0===c.current||0===u.current){i([]),s.current=[];return}let p=(n=c.current,r=u.current,d=Math.min(n,r)*Math.max(.28,.12*Math.sqrt(a=Math.max(e.length,1))),e.map((e,t)=>{let i=t/a*2*Math.PI;return{id:e.id,x:n/2+d*Math.cos(i)+Od(e.id,0),y:r/2+d*Math.sin(i)+Od(e.id,1),vx:0,vy:0}}));s.current=p,i(p),l.current=0,o.current&&cancelAnimationFrame(o.current);let m=0,f=()=>{let{positions:e,energy:n}=function(e,t,n,r){let a=n/2,i=r/2,s=new Float64Array(e.length),o=new Float64Array(e.length),l=new Map(e.map((e,t)=>[e.id,t]));for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++){let r=e[t].x-e[n].x,a=e[t].y-e[n].y,i=Math.max(Math.sqrt(r*r+a*a),1),l=6e3/(i*i),c=r/i,u=a/i;s[t]+=l*c,o[t]+=l*u,s[n]-=l*c,o[n]-=l*u}for(let n of t){let t=l.get(n.source),r=l.get(n.target);if(null==t||null==r)continue;let a=e[r].x-e[t].x,i=e[r].y-e[t].y,c=Math.max(Math.sqrt(a*a+i*i),1),u=.04*(c-180),d=a/c,p=i/c;s[t]+=u*d,o[t]+=u*p,s[r]-=u*d,o[r]-=u*p}for(let t=0;t<e.length;t++)s[t]+=.02*(a-e[t].x),o[t]+=.02*(i-e[t].y);let c=0;return{positions:e.map((e,t)=>{let n=(e.vx+s[t])*.78,r=(e.vy+o[t])*.78,a=Math.sqrt(n*n+r*r);return a>12&&(n=n/a*12,r=r/a*12),c+=n*n+r*r,{id:e.id,x:e.x+n,y:e.y+r,vx:n,vy:r}}),energy:c}}(s.current,t,c.current,u.current);s.current=e,l.current++,++m%2==0&&i([...e]),l.current<600&&n>.3?o.current=requestAnimationFrame(f):i([...s.current])};return o.current=requestAnimationFrame(f),()=>{o.current&&cancelAnimationFrame(o.current)}},[e,t]),a}(e.nodes,i,r,a),[o,l]=(0,eu.useState)(0),[c,u]=(0,eu.useState)(0),[d,p]=(0,eu.useState)(1),m=(0,eu.useRef)(null),f=(0,eu.useRef)(null),[h,g]=(0,eu.useState)(new Set(Lz)),[b,y]=(0,eu.useState)(new Set(["semantic","procedural"])),E=(0,eu.useMemo)(()=>new Map(s.map(e=>[e.id,e])),[s]),x=(0,eu.useMemo)(()=>new Map(e.nodes.map(e=>[e.id,e])),[e.nodes]),v=(0,eu.useRef)({tx:o,ty:c,scale:d});v.current={tx:o,ty:c,scale:d};let k=(0,eu.useCallback)((e,t,n)=>{let{tx:r,ty:a,scale:i}=v.current,s=Math.max(.2,Math.min(5,i*n)),o=s/i;p(s),l(e-o*(e-r)),u(t-o*(t-a))},[]),S=(0,eu.useCallback)(e=>{e.preventDefault();let t=e.currentTarget.getBoundingClientRect();k(e.clientX-t.left,e.clientY-t.top,e.deltaY<0?1.1:.9)},[k]),T=(0,eu.useCallback)(e=>{(e.target===e.currentTarget||"svg"===e.target.tagName)&&(f.current={startX:e.clientX,startY:e.clientY,tx:o,ty:c},e.currentTarget.setPointerCapture(e.pointerId))},[o,c]),w=(0,eu.useCallback)(e=>{f.current&&(l(f.current.tx+e.clientX-f.current.startX),u(f.current.ty+e.clientY-f.current.startY))},[]),_=(0,eu.useCallback)(()=>{f.current=null},[]);if(0===r||0===a)return null;let A=new Set(e.nodes.filter(e=>b.has("procedural"===e.memory_type?"procedural":"semantic")).map(e=>e.id)),N=e.edges.filter(e=>A.has(e.source)&&A.has(e.target)&&(h.has(e.relation)||!Lz.includes(e.relation)));return(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)("div",{className:"absolute left-3 top-3 z-10 flex gap-1",children:[(0,ec.jsx)("button",{type:"button",onClick:()=>k(r/2,a/2,1.25),className:L$,"aria-label":"Zoom in observation graph",title:"Zoom in",children:(0,ec.jsx)(CP,{className:"h-3.5 w-3.5","aria-hidden":"true"})}),(0,ec.jsx)("button",{type:"button",onClick:()=>k(r/2,a/2,.8),className:L$,"aria-label":"Zoom out observation graph",title:"Zoom out",children:(0,ec.jsx)(Cj,{className:"h-3.5 w-3.5","aria-hidden":"true"})}),(0,ec.jsx)("button",{type:"button",onClick:()=>{l(0),u(0),p(1)},className:L$,"aria-label":"Reset observation graph view",title:"Reset view",children:(0,ec.jsx)(LB,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]}),(0,ec.jsxs)("div",{className:"absolute right-3 top-3 z-10 flex max-w-[calc(100%-1.5rem)] select-none flex-col gap-1 rounded border border-border bg-background/90 px-2.5 py-2 text-[11px] shadow-sm backdrop-blur-sm",children:[["complements","contradicts","supersedes"].map(e=>{let t=h.has(e);return(0,ec.jsxs)("button",{type:"button",onClick:()=>{g(t=>{let n=new Set(t);if(n.has(e)){if(1===n.size)return t;n.delete(e)}else n.add(e);return n})},"aria-pressed":t,title:`${t?"Hide":"Show"} ${e} edges`,className:`flex items-center gap-1.5 text-left transition-opacity ${t?"opacity-100":"opacity-35"}`,children:[(0,ec.jsx)("span",{className:"inline-block h-2 w-6 flex-shrink-0 rounded-sm",style:{background:Op(e)}}),(0,ec.jsx)("span",{className:"capitalize text-muted-foreground",children:Oh(e)})]},e)}),(0,ec.jsx)("div",{className:"mt-1 flex flex-col gap-0.5 border-t border-border pt-1",children:[["semantic","Semantic"],["procedural","Procedural"]].map(([e,t])=>{let n=b.has(e);return(0,ec.jsxs)("button",{type:"button",onClick:()=>{y(t=>{let n=new Set(t);if(n.has(e)){if(1===n.size)return t;n.delete(e)}else n.add(e);return n})},"aria-pressed":n,title:`${n?"Hide":"Show"} ${t.toLowerCase()} nodes`,className:`flex items-center gap-1.5 text-left transition-opacity ${n?"opacity-100":"opacity-35"}`,children:[(0,ec.jsx)("span",{className:"inline-block h-3 w-3 flex-shrink-0 rounded-full",style:{background:Of(e)}}),(0,ec.jsx)("span",{className:"text-muted-foreground",children:t})]},e)})})]}),(0,ec.jsxs)("svg",{ref:m,width:r,height:a,className:"absolute inset-0 cursor-grab active:cursor-grabbing",style:{userSelect:"none"},role:"img","aria-label":"Observation relationship graph",onWheel:S,onPointerDown:T,onPointerMove:w,onPointerUp:_,onClick:e=>{(e.target===e.currentTarget||"svg"===e.target.tagName)&&n(null)},children:[(0,ec.jsx)("defs",{children:["complements","contradicts","supersedes","default"].map(e=>(0,ec.jsx)("marker",{id:`arrow-${e}`,viewBox:"0 0 10 10",markerWidth:"7",markerHeight:"7",refX:"10",refY:"5",orient:"auto",markerUnits:"userSpaceOnUse",children:(0,ec.jsx)("path",{d:"M0,1.5 L10,5 L0,8.5 z",fill:Op(e)})},e))}),(0,ec.jsxs)("g",{transform:`translate(${o},${c}) scale(${d})`,children:[N.map((e,t)=>{let n=E.get(e.source),r=E.get(e.target);if(!n||!r)return null;let a=x.get(e.source),i=x.get(e.target),s=a?Om(a.degree):9,o=i?Om(i.degree):9,l=r.x-n.x,c=r.y-n.y,u=Math.max(Math.sqrt(l*l+c*c),1),d=l/u,p=c/u,m=n.x+d*s,f=n.y+p*s,h=r.x-d*(o+2),g=r.y-p*(o+2),b=e.relation in{complements:1,contradicts:1,supersedes:1}?e.relation:"default",y=Op(e.relation),v=`edge-grad-${t}`,k="complements"===e.relation,S=Math.min(45,7/Math.max(u-s-(o+2),1)*100);return(0,ec.jsxs)("g",{children:[(0,ec.jsx)("linearGradient",{id:v,gradientUnits:"userSpaceOnUse",x1:m,y1:f,x2:h,y2:g,children:k?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("stop",{offset:"0%",stopColor:y,stopOpacity:0}),(0,ec.jsx)("stop",{offset:`${S}%`,stopColor:y,stopOpacity:.7}),(0,ec.jsx)("stop",{offset:`${100-S}%`,stopColor:y,stopOpacity:.7}),(0,ec.jsx)("stop",{offset:"100%",stopColor:y,stopOpacity:0})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("stop",{offset:"0%",stopColor:y,stopOpacity:.7}),(0,ec.jsx)("stop",{offset:`${100-S}%`,stopColor:y,stopOpacity:.7}),(0,ec.jsx)("stop",{offset:"100%",stopColor:y,stopOpacity:0})]})}),(0,ec.jsx)("line",{x1:m,y1:f,x2:h,y2:g,stroke:`url(#${v})`,strokeWidth:1.5,strokeDasharray:"contradicts"===e.relation?"5,3":void 0,markerEnd:k?void 0:`url(#arrow-${b})`})]},t)}),e.nodes.map(e=>{let r=E.get(e.id);if(!r||!A.has(e.id))return null;let a=Om(e.degree),i=e.id===t,s=e.summary.length>28?e.summary.slice(0,26)+"…":e.summary;return(0,ec.jsxs)("g",{role:"button",tabIndex:0,"aria-label":`Select observation: ${e.summary}`,className:"outline-none [&:focus-visible]:outline-none [&:focus]:outline-none",style:{cursor:"pointer"},onClick:r=>{r.stopPropagation(),n(e.id===t?null:e.id)},onKeyDown:r=>{("Enter"===r.key||" "===r.key)&&(r.preventDefault(),n(e.id===t?null:e.id))},children:[i&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("circle",{cx:r.x,cy:r.y,r:a+7,fill:"none",style:{stroke:"var(--brand)"},strokeWidth:2,opacity:.3}),(0,ec.jsx)("circle",{cx:r.x,cy:r.y,r:a+4,fill:"none",style:{stroke:"var(--brand)"},strokeWidth:2.5})]}),(0,ec.jsx)("circle",{cx:r.x,cy:r.y,r:a,fill:Of(e.memory_type),stroke:"#fff",strokeWidth:1.5,opacity:.9}),(0,ec.jsx)("text",{x:r.x,y:r.y+a+12,textAnchor:"middle",fontSize:10,fill:"currentColor",className:"select-none fill-foreground/70",children:s}),(0,ec.jsx)("title",{children:e.summary})]},e.id)})]})]})]})}function Lq({message:e}){return(0,ec.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-muted-foreground",children:e})}function LW({data:e,loading:t,error:n,highlightNodeId:r}){let a=(0,eu.useRef)(null),[i,s]=(0,eu.useState)({w:0,h:0}),[o,l]=(0,eu.useState)(null),[c,u]=(0,eu.useState)(!1),[d,p]=(0,eu.useState)(360),m=(0,eu.useRef)(null);(0,eu.useEffect)(()=>{null!=r&&l(r)},[r]),(0,eu.useEffect)(()=>{let e=window.matchMedia("(min-width: 768px)"),t=()=>u(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]);let f=(0,eu.useCallback)(e=>{m.current={startX:e.clientX,startW:d},e.currentTarget.setPointerCapture(e.pointerId)},[d]),h=(0,eu.useCallback)(e=>{if(!m.current)return;let t=e.clientX-m.current.startX;p(Math.min(Math.max(640,.6*window.innerWidth),Math.max(280,m.current.startW-t)))},[]),g=(0,eu.useCallback)(()=>{m.current=null},[]);(0,eu.useEffect)(()=>{let e=a.current;if(!e)return;let t=new ResizeObserver(([e])=>{s({w:e.contentRect.width,h:e.contentRect.height})});return t.observe(e),()=>t.disconnect()},[]);let b=new Map((e?.nodes??[]).map(e=>[e.id,e])),y=o?b.get(o)??null:null,E=null!==y;return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col",children:[(0,ec.jsx)("div",{className:"flex items-center border-b border-border px-4 py-2",children:(0,ec.jsx)("span",{className:"text-xs text-muted-foreground",children:e?`${e.nodes.length} nodes \xb7 ${e.edges.length} edges`:t?"Loading…":""})}),(0,ec.jsxs)("div",{className:"relative flex min-h-0 flex-1",children:[(0,ec.jsxs)("div",{ref:a,className:"relative min-w-0 flex-1 overflow-hidden bg-muted/20",children:[t&&(0,ec.jsx)(Lq,{message:"Loading observations…"}),!t&&n&&(0,ec.jsx)(Lq,{message:`Error: ${n}`}),!t&&!n&&e&&0===e.nodes.length&&(0,ec.jsx)(Lq,{message:"No observations yet."}),!t&&!n&&e&&e.nodes.length>0&&i.w>0&&(0,ec.jsx)(LG,{data:e,selectedId:o,onSelect:l,w:i.w,h:i.h})]}),E&&c&&(0,ec.jsx)("div",{role:"separator","aria-orientation":"vertical",onPointerDown:f,onPointerMove:h,onPointerUp:g,className:"hover:bg-[var(--brand)]/40 w-1 flex-shrink-0 cursor-col-resize bg-border transition-colors"}),E&&(0,ec.jsx)("div",{className:c?"flex-shrink-0 overflow-hidden":"absolute inset-0 z-20 overflow-hidden",style:c?{width:d}:void 0,children:(0,ec.jsx)(LH,{node:y,edges:e?.edges??[],nodeMap:b,onClose:()=>l(null),onNavigate:e=>l(e)})})]})]})}let LV=n0("compass",[["path",{d:"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z",key:"9ktpf1"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]),LY=[{path:"profile/USER_PROFILE.md",label:"User",description:"Persistent context about the researcher",Icon:n0("user",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]])},{path:"profile/RESEARCH_TASTE.md",label:"Taste",description:"Aesthetic and methodological preferences",Icon:LV},{path:"profile/SOUL.md",label:"SOUL",description:"EvoScientist's core values and personality",Icon:bA}];function LK({entry:e,selected:t,onSelect:n}){let{Icon:r}=e;return(0,ec.jsxs)("button",{type:"button",onClick:()=>n(e),className:rO("group flex w-full min-w-0 items-center gap-2 rounded-md border px-3 py-2.5 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",t?"border-[var(--brand)]/40 bg-accent":"hover:border-[var(--brand)]/40 border-border bg-[var(--color-surface)] hover:bg-accent/60"),children:[(0,ec.jsx)("span",{className:rO("flex size-7 shrink-0 items-center justify-center rounded-md transition-colors",t?"bg-[var(--brand)] text-white":"bg-muted text-[var(--brand)] group-hover:bg-background"),children:(0,ec.jsx)(r,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("span",{className:"block truncate text-sm font-medium",children:e.label}),(0,ec.jsx)("span",{className:"block truncate text-[11px] text-muted-foreground",children:e.description})]})]})}function LX({entry:e}){let[t,n]=(0,eu.useState)(""),[r,a]=(0,eu.useState)(""),[i,s]=(0,eu.useState)(!1),[o,l]=(0,eu.useState)(!1),[c,u]=(0,eu.useState)(!1),[d,p]=(0,eu.useState)(null),m=(0,eu.useRef)(0);(0,eu.useEffect)(()=>{if(!e){n(""),a("");return}let t=++m.current;s(!0),l(!1),p(null),fetch(`/api/memory?path=${encodeURIComponent(e.path)}`).then(async e=>{let t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Failed to load.");return t}).then(e=>{m.current===t&&(n(e.content??""),a(e.content??""))}).catch(e=>{m.current===t&&(n(""),a(""),p(e instanceof Error?e.message:"Failed to load."))}).finally(()=>{m.current===t&&s(!1)})},[e]);let f=async()=>{if(e){u(!0),p(null);try{let t=await fetch("/api/memory",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e.path,content:r})}),a=await t.json();if(!t.ok)throw Error(a.error??"Failed to save.");n(r),l(!1)}catch(e){p(e instanceof Error?e.message:"Failed to save.")}finally{u(!1)}}};if(!e)return(0,ec.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-muted-foreground",children:"Select a profile to view"});let h=t.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").trim();return(0,ec.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center justify-between border-b border-border px-4 py-2.5",children:[(0,ec.jsx)("span",{className:"text-sm font-medium",children:e.label}),(0,ec.jsx)("div",{className:"flex items-center gap-1.5",children:o?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(rQ,{variant:"outline",size:"sm",onClick:()=>{l(!1),a(t)},children:"Cancel"}),(0,ec.jsx)(rQ,{size:"sm",onClick:f,disabled:c||r===t,children:c?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Saving"]}):"Save"})]}):(0,ec.jsxs)(rQ,{variant:"outline",size:"sm",onClick:()=>l(!0),disabled:i,children:[(0,ec.jsx)(fM,{className:"size-3.5","aria-hidden":"true"}),"Edit raw"]})})]}),d&&(0,ec.jsx)("p",{className:"flex-shrink-0 px-4 py-2 text-xs text-destructive",children:d}),(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:i?(0,ec.jsxs)("div",{className:"flex h-full items-center justify-center gap-2 text-sm text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading…"]}):o?(0,ec.jsx)("textarea",{"aria-label":`Edit ${e.label} memory`,className:"size-full resize-none bg-background p-4 font-mono text-sm text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",value:r,onChange:e=>a(e.target.value),spellCheck:!1}):(0,ec.jsx)(hp,{className:"h-full",children:(0,ec.jsx)("div",{className:"px-4 py-4",children:(0,ec.jsx)(Rp,{content:h})})})})]})}function LZ({listing:e,listingLoading:t}){let[n,r]=(0,eu.useState)(null),[a,i]=(0,eu.useState)(!1);(0,eu.useEffect)(()=>{let e=window.matchMedia("(min-width: 768px)"),t=()=>i(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]);let s=(0,eu.useMemo)(()=>(e?.entries??[]).filter(e=>e.path.startsWith("profile/projects/")&&e.path.endsWith(".md")).map(e=>{let t=e.path.split("/"),n=t.length>=4?`${t[2]}/${t.slice(3).join("/")}`:e.path;return{path:e.path,label:n.replace(/\/PROJECT_PROFILE\.md$/,""),description:"Project profile",Icon:bw}}),[e?.entries]),o=(0,eu.useMemo)(()=>[...LY,...s],[s]);(0,eu.useEffect)(()=>{!t&&0!==o.length&&(n&&o.some(e=>e.path===n.path)||r(o[0]))},[o,t,n]);let l=(0,ec.jsx)(hp,{className:"h-full",children:(0,ec.jsxs)("div",{className:"p-3",children:[(0,ec.jsx)("p",{className:"mb-2 text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Profile"}),(0,ec.jsx)("div",{className:"space-y-1.5",children:LY.map(e=>(0,ec.jsx)(LK,{entry:e,selected:n?.path===e.path,onSelect:r},e.path))}),(0,ec.jsx)("p",{className:"mb-2 mt-5 text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Project Profiles"}),t?(0,ec.jsxs)("div",{className:"flex h-10 items-center gap-2 text-xs text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Loading projects…"]}):0===s.length?(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"No project profiles yet."}):(0,ec.jsx)("div",{className:"space-y-1.5",children:s.map(e=>(0,ec.jsx)(LK,{entry:e,selected:n?.path===e.path,onSelect:r},e.path))})]})});return a?(0,ec.jsxs)(fw,{direction:"horizontal",autoSaveId:"evomemory-identity",className:"h-full",children:[(0,ec.jsx)(mI,{defaultSize:35,minSize:22,maxSize:55,children:l}),(0,ec.jsx)(f_,{}),(0,ec.jsx)(mI,{defaultSize:65,minSize:45,children:(0,ec.jsx)(LX,{entry:n})})]}):(0,ec.jsxs)("div",{className:"flex min-h-0 w-full flex-1 flex-col",children:[(0,ec.jsx)("div",{className:"max-h-[42svh] flex-shrink-0 overflow-hidden border-b border-border",children:l}),(0,ec.jsx)("div",{className:"min-h-0 flex-1",children:(0,ec.jsx)(LX,{entry:n})})]})}function LQ(e){try{let t=new Date(e),n=new Date;return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()}catch{return!1}}function LJ({items:e}){let t=new Set(e.filter(e=>"execution"===e.kind).map(e=>e.project_id).filter(Boolean)).size,n=e.filter(e=>e.created_at&&LQ(e.created_at)),r=n.filter(e=>"execution"===e.kind).length,a=n.filter(e=>"observation"===e.kind).length,i=[{n:t,label:"Projects"},{n:e.length,label:"Total"},{n:r,label:"Runs Today"},{n:a,label:"Obs Today"}];return(0,ec.jsx)("div",{className:"flex flex-shrink-0 border-b border-border",children:i.map(e=>(0,ec.jsxs)("div",{className:"flex flex-1 flex-col items-center gap-1 border-r border-border py-2 last:border-r-0",children:[(0,ec.jsx)("span",{className:"text-lg font-bold leading-none text-[var(--brand)]",children:e.n}),(0,ec.jsx)("span",{className:"text-[11px] leading-none text-muted-foreground",children:e.label})]},e.label))})}function L0({created_at:e,dotColor:t,children:n}){return(0,ec.jsxs)("div",{className:"flex gap-2",children:[(0,ec.jsx)("time",{dateTime:e,className:"w-14 flex-shrink-0 pt-3 text-right text-xs tabular-nums leading-none text-muted-foreground",children:function(e){try{let t=new Date(e);if(LQ(e))return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}).format(t);let n=new Date;return new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",...t.getFullYear()!==n.getFullYear()?{year:"numeric"}:{}}).format(t)}catch{return e}}(e)}),(0,ec.jsxs)("div",{className:"relative flex w-3 flex-shrink-0 justify-center",children:[(0,ec.jsx)("span",{className:"absolute bottom-0 left-1/2 top-0 w-px -translate-x-1/2 bg-border","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"z-10 mt-3 size-2.5 rounded-full border-2 border-[var(--color-surface)]",style:{background:t}})]}),n]})}function L1({entry:e,onNavigateToObs:t,defaultOpen:n=!1}){let[r,a]=(0,eu.useState)(n),i=(0,eu.useRef)(null),s=`${r?"Collapse":"Expand"} ${e.agent} execution: ${e.summary}`;return(0,eu.useEffect)(()=>{n&&(a(!0),i.current?.scrollIntoView({block:"center"}))},[n]),(0,ec.jsx)(L0,{created_at:e.created_at,dotColor:"var(--brand)",children:(0,ec.jsxs)("div",{ref:i,className:`hover:border-[var(--brand)]/40 mb-2 min-w-0 flex-1 overflow-hidden rounded-lg border bg-[var(--color-surface)] transition-colors ${n?"border-[var(--brand)]/40":"border-border"}`,children:[(0,ec.jsxs)("button",{type:"button","aria-expanded":r,"aria-label":s,title:s,onClick:()=>a(e=>!e),className:"flex w-full items-center gap-2 px-3 py-2.5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",children:[(0,ec.jsx)("span",{className:"flex-shrink-0 text-sm font-medium text-foreground",children:e.agent}),!r&&(0,ec.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs text-muted-foreground",children:e.summary}),(0,ec.jsx)(lA,{className:`ml-auto size-3.5 flex-shrink-0 text-muted-foreground transition-transform duration-200 ${r?"rotate-180":""}`,"aria-hidden":"true"})]}),(0,ec.jsx)("div",{className:"grid transition-[grid-template-rows] duration-200",style:{gridTemplateRows:r?"1fr":"0fr"},children:r&&(0,ec.jsxs)("div",{className:"overflow-hidden",children:[e.project_id&&(0,ec.jsx)("p",{className:"px-3 pb-2 font-mono text-[11px] text-muted-foreground",children:e.project_id}),(0,ec.jsx)("p",{className:"border-t border-border px-3 py-3 text-sm leading-relaxed text-foreground",children:e.summary}),e.obs_ids.length>0&&(0,ec.jsxs)("div",{className:"border-t border-border px-3 py-2.5",children:[(0,ec.jsx)("p",{className:"mb-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Linked Observations"}),(0,ec.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.obs_ids.map(e=>(0,ec.jsxs)("button",{type:"button",onClick:n=>{n.stopPropagation(),t(e)},className:"border-[var(--brand)]/40 rounded border bg-background px-2 py-0.5 font-mono text-[11px] text-[var(--brand)] transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",title:`Jump to ${e} in Knowledge graph`,"aria-label":`Jump to observation ${e} in Knowledge graph`,children:[e.slice(0,14),"…"]},e))})]})]})})]})})}function L2({obs:e,onNavigateToObs:t}){let n=Of(e.memory_type);return(0,ec.jsx)(L0,{created_at:e.created_at,dotColor:n,children:(0,ec.jsx)("button",{type:"button",onClick:()=>t(e.id),title:"View in Knowledge graph","aria-label":`View observation in Knowledge graph: ${e.summary}`,className:"hover:border-[var(--brand)]/40 mb-2 min-w-0 flex-1 cursor-pointer overflow-hidden rounded-lg border border-dashed border-border bg-[var(--color-surface)] px-3 py-2.5 text-left transition-colors hover:bg-accent/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsxs)("div",{className:"flex items-center gap-2",children:[(0,ec.jsx)("span",{className:"flex-shrink-0 rounded px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-white",style:{background:n},children:e.memory_type}),(0,ec.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs text-foreground",children:e.summary}),(0,ec.jsx)(Oo,{className:"ml-auto size-3.5 flex-shrink-0 text-muted-foreground","aria-hidden":"true"})]})})})}function L3({items:e,truncated:t,loading:n,error:r,highlightExecId:a,onRefresh:i,onNavigateToObs:s}){return n&&!e?(0,ec.jsxs)("div",{className:"flex flex-1 items-center justify-center gap-2 text-sm text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading history…"]}):r?(0,ec.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 p-8",children:[(0,ec.jsx)("p",{className:"text-sm text-destructive",children:r}),(0,ec.jsxs)("button",{type:"button",onClick:i,className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground",children:[(0,ec.jsx)(LU,{className:"size-3.5","aria-hidden":"true"}),"Retry"]})]}):e&&0!==e.length?(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsx)(LJ,{items:e}),(0,ec.jsx)(hp,{type:"always",className:"min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]>div]:!block [&_[data-slot=scroll-area-viewport]>div]:!w-full",children:(0,ec.jsxs)("div",{className:"p-4",children:[(0,ec.jsx)("div",{children:e.map(e=>"execution"===e.kind?(0,ec.jsx)(L1,{entry:e,onNavigateToObs:s,defaultOpen:a===e.id},`e-${e.id}`):(0,ec.jsx)(L2,{obs:e,onNavigateToObs:s},`o-${e.id}`))}),t&&(0,ec.jsxs)("p",{className:"mt-2 text-center text-xs text-muted-foreground",children:["Showing newest ",e.length," items."]})]})})]}):(0,ec.jsx)("div",{className:"flex flex-1 items-center justify-center text-sm text-muted-foreground",children:"No activity yet."})}function L4(e){return"identity"===e||"knowledge"===e||"history"===e}function L5({initialTab:e,initialObsId:t,initialExecId:n}={}){let[r,a]=(0,eu.useState)(null),[i,s]=(0,eu.useState)(!0),[o,l]=(0,eu.useState)(L4(e)?e:"identity"),[c,u]=(0,eu.useState)(null),[d,p]=(0,eu.useState)(!1),[m,f]=(0,eu.useState)(null),[h,g]=(0,eu.useState)(null),[b,y]=(0,eu.useState)(!1),[E,x]=(0,eu.useState)(null),[v,k]=(0,eu.useState)(t??null),S=(0,eu.useRef)(0),T=(0,eu.useRef)(0),w=(0,eu.useCallback)(async()=>{s(!0);try{let e=await fetch("/api/memory"),t=await e.json();if(!e.ok)return;a(t);let n=t.entries.reduce((e,t)=>t.mtime>e?t.mtime:e,0);n>0&&hZ(n)}catch{}finally{s(!1)}},[]),_=(0,eu.useCallback)(async()=>{let e=++S.current;p(!0),f(null);try{let t=await fetch("/api/memory/observations",{cache:"no-store"}),n=await t.json().catch(()=>({}));if(e!==S.current)return;if(!t.ok)throw Error(n.error||"Failed.");u(n)}catch(t){if(e!==S.current)return;f(t instanceof Error?t.message:"Failed to load.")}finally{e===S.current&&p(!1)}},[]),A=(0,eu.useCallback)(async()=>{let e=++T.current;y(!0),x(null);try{let t=await fetch("/api/memory/executions",{cache:"no-store"}),n=await t.json().catch(()=>({}));if(e!==T.current)return;if(!t.ok)throw Error(n.error||"Failed.");g(n)}catch(t){if(e!==T.current)return;x(t instanceof Error?t.message:"Failed to load.")}finally{e===T.current&&y(!1)}},[]);(0,eu.useEffect)(()=>{w()},[w]),(0,eu.useEffect)(()=>{L4(e)&&l(e)},[e]),(0,eu.useEffect)(()=>{t?(k(t),l("knowledge")):k(null)},[t]),(0,eu.useEffect)(()=>{n&&l("history")},[n]),(0,eu.useEffect)(()=>{if("history"!==o)return;let e=()=>{A(),_()};e();let t=setInterval(e,3e4);return()=>clearInterval(t)},[o,A,_]),(0,eu.useEffect)(()=>{"knowledge"!==o||c||d||_()},[o,c,d,_]);let N=(0,eu.useMemo)(()=>{if(!h||!c)return null;let e=[];for(let t of h.entries)e.push({kind:"execution",...t});for(let t of c.nodes)e.push({kind:"observation",id:t.id,created_at:t.created_at,summary:t.summary,memory_type:t.memory_type,scope:t.scope});return e.sort((e,t)=>e.created_at<t.created_at?1:-1),e},[h,c]),I=[{id:"identity",label:"Identity",Icon:LF},{id:"knowledge",label:"Knowledge",Icon:Oo},{id:"history",label:"History",Icon:Ou}];return(0,ec.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,ec.jsxs)("header",{className:"flex flex-shrink-0 items-start justify-between gap-3 border-b border-border px-4 py-3 sm:px-5",children:[(0,ec.jsxs)("div",{className:"min-w-0",children:[(0,ec.jsx)("h2",{className:"text-xl font-semibold sm:text-2xl",children:"EvoMemory"}),(0,ec.jsxs)("p",{className:"mt-1 text-sm leading-6 text-muted-foreground",children:["EvoScientist's"," ",(0,ec.jsx)("span",{className:"font-medium text-[var(--brand)]",children:"self-evolving memory system"})," ","— continuously learns and refines what it knows about you, your research taste, and lessons from past experiments."]})]}),(0,ec.jsx)("button",{type:"button",onClick:()=>{"history"===o?(A(),_()):"knowledge"===o?_():w()},disabled:"history"===o?b||d:"knowledge"===o?d:i,"aria-label":"Refresh",title:"Refresh",className:"mt-0.5 flex-shrink-0 rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:(0,ec.jsx)(LU,{className:`size-4 ${"history"===o&&(b||d)||"knowledge"===o&&d||"identity"===o&&i?"animate-spin":""}`,"aria-hidden":"true"})})]}),(0,ec.jsx)("div",{className:"grid flex-shrink-0 grid-cols-3 gap-1 border-b border-border px-2 pt-1 sm:flex sm:items-center sm:px-3",role:"tablist","aria-label":"Memory views",children:I.map(({id:e,label:t,Icon:n})=>(0,ec.jsxs)("button",{type:"button",role:"tab","aria-selected":o===e,onClick:()=>{l(e),"knowledge"!==e&&k(null)},className:rO("flex min-w-0 items-center justify-center gap-1 rounded-t-md border-b-2 px-1.5 py-2 text-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring sm:gap-1.5 sm:px-3 sm:text-sm",o===e?"border-[var(--brand)] bg-accent text-foreground":"border-transparent text-muted-foreground hover:bg-accent hover:text-foreground"),children:[(0,ec.jsx)(n,{className:"size-3.5","aria-hidden":"true"}),t]},e))}),(0,ec.jsxs)("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:["identity"===o&&(0,ec.jsx)(LZ,{listing:r,listingLoading:i}),"knowledge"===o&&(0,ec.jsx)(LW,{data:c,loading:d,error:m,highlightNodeId:v}),"history"===o&&(0,ec.jsx)("div",{className:"flex min-h-0 w-full flex-1 flex-col",children:(0,ec.jsx)(L3,{items:N,truncated:!!h?.truncated,loading:b||d,error:E||m,highlightExecId:n,onRefresh:()=>{A(),_()},onNavigateToObs:e=>{k(e),l("knowledge")}})})]})]})}let L6=n0("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]),L9=n0("calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]),L8=n0("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]),L7=n0("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]),De=n0("flask-conical",[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]]);function Dt(e){return e&&"object"==typeof e?e:{}}function Dn(e){return"pending"===e||"running"===e}function Dr(e){if(!e)return"";let t=new Date(e);return Number.isNaN(t.getTime())?"":new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(t)}function Da({task:e,onOpenThread:t}){let{runs:n,loaded:r,error:a}=function(e){let[t,n]=(0,eu.useState)([]),[r,a]=(0,eu.useState)(!1),[i,s]=(0,eu.useState)(null),o=(0,eu.useRef)(0),l=(0,eu.useRef)(!0),c=(0,eu.useRef)(new Map),u=e?.cron_id??null,d=e?.prompt??"";(0,eu.useEffect)(()=>{c.current=new Map},[u]);let p=(0,eu.useCallback)(async()=>{if(!u){n([]),a(!0);return}let e=oU();if(!e){n([]),a(!0);return}let t=++o.current,r=c.current;try{let a=await e.threads.search({metadata:{graph_id:i0},limit:50}),i=await Promise.all(a.map(async t=>{let n=r.get(t.thread_id);if(!1===n)return null;if(n&&!Dn(n.status)&&n.thread_updated_at===(t.updated_at??null))return n;try{let n,a,i,s,o,l,c,p,m,f=(await e.runs.list(t.thread_id,{limit:1}))[0];if(!f)return null;if(!function(e,t,n){if(Dt(t).cron_id===n.cron_id)return!0;let r=Dt(e),a=Dt(r.metadata);return a.cron_id===n.cron_id||Dt(Dt(Dt(r.kwargs).config).configurable).cron_id===n.cron_id||"scheduled_task"===a.run_kind&&"string"==typeof a.prompt&&""!==a.prompt&&a.prompt===n.prompt}(f,t.metadata,{cron_id:u,prompt:d}))return r.set(t.thread_id,!1),null;let h=(n=Dt(f),a=Dt(n.metadata),i=Dt(t.metadata),s=function(e){switch(e){case"pending":case"running":case"success":case"error":case"timeout":case"interrupted":return e;default:return"error"}}(n.status),o="string"==typeof n.created_at?n.created_at:null,l="string"==typeof n.updated_at?n.updated_at:null,c=o??t.created_at??new Date(0).toISOString(),p=Dn(s)?null:l??t.updated_at??null,m="manual"===i.trigger||"manual-run"===a.name?"manual":"cron",{thread_id:t.thread_id,run_id:"string"==typeof n.run_id?n.run_id:null,status:s,trigger:m,started_at:c,ended_at:p,thread_updated_at:t.updated_at??null});return r.set(t.thread_id,h),h}catch{return n||null}}));if(t!==o.current||!l.current)return;let c=i.filter(e=>!!e).sort((e,t)=>Date.parse(t.started_at)-Date.parse(e.started_at)).slice(0,20);n(c),s(null)}catch{t===o.current&&l.current&&s("Couldn't load task runs.")}finally{t===o.current&&l.current&&a(!0)}},[u,d]);return(0,eu.useEffect)(()=>{l.current=!0,a(!1),p();let e=setInterval(()=>{document.hidden||p()},3e3);return()=>{l.current=!1,clearInterval(e)}},[p]),{runs:t,loaded:r,error:i,refresh:p}}(e),i=o$(e),[s,o]=(0,eu.useState)(()=>Date.now()),[l,c]=(0,eu.useState)(null),[u,d]=(0,eu.useState)({}),[p,m]=(0,eu.useState)(null),f=(0,eu.useRef)(new Set),h=n.some(e=>Dn(e.status));(0,eu.useEffect)(()=>{if(!h)return;let e=setInterval(()=>o(Date.now()),1e3);return()=>clearInterval(e)},[h]),(0,eu.useEffect)(()=>{c(null),d({}),m(null),f.current.clear()},[e.cron_id]);let g=(0,eu.useMemo)(()=>n.find(e=>e.thread_id===l)??null,[n,l]),b=!!g&&Dn(g.status),y=g?.thread_updated_at??null;return(0,eu.useEffect)(()=>{if(!l)return;let e=`${l}:${y??""}`;if(!b&&f.current.has(e))return;let t=oU();if(!t)return;let n=!1,r=async()=>{try{let r=await t.threads.getState(l);if(n)return;let a=Array.isArray(r.values?.messages)?r.values.messages:[];d(e=>({...e,[l]:gH(a)})),m(null),b||f.current.add(e)}catch{n||m("Couldn't load run steps.")}};r();let a=b?setInterval(r,2500):null;return()=>{n=!0,a&&clearInterval(a)}},[l,b,y]),(0,ec.jsxs)("section",{className:"space-y-1.5",children:[(0,ec.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Activity"}),(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-[var(--color-surface)]",children:[!h&&(0,ec.jsxs)("div",{className:"flex items-center gap-2 border-b border-border px-3 py-2",children:[(0,ec.jsx)("span",{className:"size-2 shrink-0 rounded-full bg-[var(--color-text-tertiary,var(--muted-foreground))] opacity-40","aria-hidden":"true"}),(0,ec.jsx)("p",{className:"min-w-0 truncate text-sm text-muted-foreground",children:e.enabled?i?`Next run ${oP(i)} \xb7 ${Dr(i)}`:"Not scheduled":"Paused"})]}),a?(0,ec.jsx)("p",{className:"px-3 py-2.5 text-sm text-destructive",role:"alert",children:a}):r?0===n.length?(0,ec.jsx)("p",{className:"px-3 py-2.5 text-sm text-muted-foreground",children:"No runs yet. Runs appear here after the schedule fires or you press Run now."}):(0,ec.jsx)("div",{className:"divide-y divide-border",children:n.map(e=>{var n;let r=e.thread_id===l,a=u[e.thread_id];return(0,ec.jsxs)("div",{children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>{var t;return t=e.thread_id,void(m(null),c(e=>e===t?null:t))},"aria-expanded":r,className:"flex w-full items-center gap-2 px-3 py-2 text-left transition-colors hover:bg-accent/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)("span",{className:rO("size-2 shrink-0 rounded-full",Dn(e.status)?"bg-[var(--color-success)] animate-pulse":"success"===e.status?"bg-[var(--color-success)]":"bg-[var(--color-error)]"),"aria-hidden":"true"}),"success"===e.status&&(0,ec.jsx)("span",{className:"sr-only",children:"Completed: "}),(0,ec.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm tabular-nums",children:function(e,t){if(Dn(e.status)){let n=RR(e.started_at,t);return n?`Running… ${n}`:"Running…"}let n=Dr(e.started_at),r=e.ended_at?RR(e.started_at,Date.parse(e.ended_at)):"",a="success"!==e.status?` \xb7 ${e.status}`:"";return[n,r].filter(Boolean).join(" · ")+a}(e,s)}),"manual"===e.trigger&&(0,ec.jsx)("span",{className:"shrink-0 rounded-full bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:"manual"}),r?(0,ec.jsx)(lA,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}):(0,ec.jsx)(fN,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"})]}),r&&(0,ec.jsxs)("div",{className:"border-t border-border/60 px-3 py-2",children:["interrupted"===e.status&&t&&(0,ec.jsxs)("button",{type:"button",onClick:()=>void t(e.thread_id),className:"mb-2 inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-xs text-foreground transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,ec.jsx)(OA,{className:"size-3.5","aria-hidden":"true"}),"Open conversation to respond"]}),p?(0,ec.jsx)("p",{className:"text-xs text-destructive",role:"alert",children:p}):a?0===a.length?(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"No steps recorded yet."}):(0,ec.jsx)(Rx,{steps:a,running:"success"!==(n=e.status)&&"error"!==n&&"timeout"!==n,compact:!0}):(0,ec.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",role:"status",children:[(0,ec.jsx)(sp,{className:"size-3 animate-spin","aria-hidden":"true"}),"Loading steps…"]})]})]},e.thread_id)})}):(0,ec.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2.5 text-sm text-muted-foreground",role:"status",children:[(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Loading runs…"]})]})]})}let Di=[{icon:L7,label:"Daily Papers",description:"Track new ML papers against your research preferences.",name:"Daily Papers",prompt:"Summarise the latest ML papers from arXiv according to my research preferences with the paper-navigator skill. Focus on papers that are relevant to my current projects, explain why each one matters, and save the summary to ./daily-papers.md in the current workspace.",schedule:"0 9 * * *"},{icon:n0("repeat-2",[["path",{d:"m2 9 3-3 3 3",key:"1ltn5i"}],["path",{d:"M13 18H7a2 2 0 0 1-2-2V6",key:"1r6tfw"}],["path",{d:"m22 15-3 3-3-3",key:"4rnwn2"}],["path",{d:"M11 6h6a2 2 0 0 1 2 2v10",key:"2f72bc"}]]),label:"Weekly Research Review",description:"Summarise this week's research progress and future direction.",name:"Weekly Research Review",prompt:"Summarise this week's research progress across my active projects. Highlight key results, decisions, blockers, open questions, and what changed in my understanding. Then propose future research directions and concrete next steps. Save the review to ./weekly-research-review.md in the current workspace.",schedule:"0 17 * * 5"},{icon:Ol,label:"Weekly Research Plan",description:"Draft a Monday plan for the week's research priorities.",name:"Weekly Research Plan",prompt:"Draft this week's research plan based on my active projects, recent progress, project files, and open questions. Prioritise the most important research goals, propose concrete experiments or reading tasks, identify risks, and write a practical schedule for the week. Save the plan to ./weekly-research-plan.md in the current workspace.",schedule:"0 8 * * 1"},{icon:De,label:"Experiment Backlog",description:"Convert open questions into testable experiment ideas.",name:"Experiment Backlog",prompt:"Review my active project files, recent research notes, and open questions. Turn the most important unresolved ideas into a prioritised experiment backlog with hypotheses, expected signal, required data or code, estimated effort, and success criteria. Save it to ./experiment-backlog.md in the current workspace.",schedule:"0 10 * * 2"}];function Ds(e){if(!e)return"Not scheduled";let t=new Date(e);return Number.isNaN(t.getTime())?"Unknown":new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(t)}function Do(e){if(!e)return"";let t=new Date(e);return Number.isNaN(t.getTime())?"":new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}).format(t)}function Dl({children:e,htmlFor:t}){return(0,ec.jsx)("label",{htmlFor:t,className:"text-xs font-medium text-muted-foreground",children:e})}function Dc({value:e,onChange:t,error:n,timeZone:r}){let a=n=>t({...e,...n}),i=rO(pB,"sm:min-w-40"),s=rO(pB,"sm:w-28");return(0,ec.jsxs)("div",{className:"space-y-2",children:[(0,ec.jsxs)("div",{className:"grid gap-2 sm:grid-cols-[minmax(9rem,1fr)_auto_auto_auto_auto] sm:items-center",children:[(0,ec.jsxs)(dY,{value:e.frequency,onValueChange:e=>{e&&a({frequency:e})},children:[(0,ec.jsx)(pI,{"aria-label":"Schedule frequency",className:i,children:(0,ec.jsx)(dQ,{})}),(0,ec.jsxs)(pO,{className:p$,children:[(0,ec.jsx)(pD,{value:"daily",children:"Every day"}),(0,ec.jsx)(pD,{value:"weekly",children:"Every week"}),(0,ec.jsx)(pD,{value:"monthly",children:"Every month"}),(0,ec.jsx)(pD,{value:"custom",children:"Custom cron"})]})]}),"custom"!==e.frequency&&(0,ec.jsxs)(ec.Fragment,{children:["weekly"===e.frequency&&(0,ec.jsxs)(dY,{value:String(e.dayOfWeek),onValueChange:e=>{e&&a({dayOfWeek:Number(e)})},children:[(0,ec.jsx)(pI,{"aria-label":"Day of week",className:s,children:(0,ec.jsx)(dQ,{})}),(0,ec.jsx)(pO,{className:p$,children:ow.map((e,t)=>(0,ec.jsx)(pD,{value:String(t),children:e},e))})]}),"monthly"===e.frequency&&(0,ec.jsxs)(dY,{value:String(e.dayOfMonth),onValueChange:e=>{e&&a({dayOfMonth:Number(e)})},children:[(0,ec.jsx)(pI,{"aria-label":"Day of month",className:s,children:(0,ec.jsx)(dQ,{})}),(0,ec.jsx)(pO,{className:p$,children:Array.from({length:28},(e,t)=>t+1).map(e=>(0,ec.jsxs)(pD,{value:String(e),children:["Day ",e]},e))})]}),(0,ec.jsx)("span",{className:"hidden text-xs text-muted-foreground sm:block",children:"at"}),(0,ec.jsxs)("div",{className:"grid grid-cols-[1fr_auto_1fr] items-center gap-1 sm:col-span-2 sm:w-32",children:[(0,ec.jsx)(r3,{"aria-label":"Hour",type:"number",min:0,max:23,value:e.hour,onChange:e=>a({hour:Math.trunc(Number(e.target.value))}),className:"h-9 text-center font-mono tabular-nums"}),(0,ec.jsx)("span",{className:"font-mono text-muted-foreground",children:":"}),(0,ec.jsx)(r3,{"aria-label":"Minute",type:"number",min:0,max:59,value:e.minute,onChange:e=>a({minute:Math.trunc(Number(e.target.value))}),className:"h-9 text-center font-mono tabular-nums"})]})]})]}),"custom"===e.frequency&&(0,ec.jsx)(r3,{type:"text",value:e.custom,onChange:e=>a({custom:e.target.value}),placeholder:"0 9 * * 1-5",spellCheck:!1,"aria-invalid":!!n,"aria-describedby":"schedule-cron-help",className:"h-9 font-mono text-sm"}),(0,ec.jsxs)("div",{id:"schedule-cron-help",className:rO("flex items-center gap-1.5 text-xs",n?"text-destructive":"text-muted-foreground"),children:[(0,ec.jsx)(L8,{className:"size-3.5 shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"min-w-0 truncate",children:n??oM(oI(e),r)})]})]})}function Du({template:e,onSelect:t,compact:n,disabled:r}){let a=e.icon;return(0,ec.jsxs)("button",{type:"button",onClick:()=>t(e),disabled:r,className:rO("hover:border-[var(--brand)]/40 group flex w-full min-w-0 items-start gap-2 rounded-md border border-border bg-[var(--color-surface)] text-left transition-colors hover:bg-accent/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",n?"px-2.5 py-2":"px-3 py-2.5"),children:[(0,ec.jsx)("span",{className:"mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-[var(--brand)] group-hover:bg-background",children:(0,ec.jsx)(a,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("span",{className:"block truncate text-sm font-medium",children:e.label}),!n&&(0,ec.jsx)("span",{className:"mt-0.5 line-clamp-2 text-xs leading-snug text-muted-foreground",children:e.description}),(0,ec.jsx)("span",{className:"mt-1 block text-[11px] text-muted-foreground",children:oO(e.schedule)})]})]})}function Dd({initialTemplate:e,initialTask:t,onSaved:n,onCancel:r,onBusy:a}){let i,s=!!t,[o,l]=(0,eu.useState)(t?.name??e?.name??""),[c,u]=(0,eu.useState)(t?.prompt??e?.prompt??""),[d,p]=(0,eu.useState)(()=>t?oR(t.schedule):e?oR(e.schedule):{...oT}),[m,f]=(0,eu.useState)(!1),h=(0,eu.useRef)(null),g=(0,eu.useMemo)(()=>t?oI(oR(t.schedule)):null,[t]),b=oI(d),y=t&&"custom"!==d.frequency&&b===g?t.schedule.trim():b,E=(0,eu.useRef)("custom"===d.frequency),x="custom"===d.frequency&&y!==t?.schedule.trim()?(i=y.trim())?oN(i)?null:5!==i.split(/\s+/).length?"Use minute hour day month weekday, or @daily.":null:"Enter a cron expression.":null,v=t?.timezone||oL(),k=!!t&&oD(t?.timezone)!==oD(v),S=!t||k||o.trim()!==t.name.trim()||c.trim()!==t.prompt.trim()||y!==t.schedule.trim(),{projects:T,current:w,refreshing:_}=sd(),A=("ready"===T.status?T.projects:[]).filter(e=>!e.missing),[N,I]=(0,eu.useState)(null),C=[N,w?.key].find(e=>e&&A.some(t=>t.key===e))??A[0]?.key??null,R=C&&!_?{assistantId:i1(i0,C),workspaceDir:C}:null,O=oX(),L=oZ();(0,eu.useEffect)(()=>(a(m),()=>a(!1)),[m,a]);let D=!!((t||R)&&o.trim()&&c.trim()&&!x&&S);(0,eu.useEffect)(()=>{h.current?.focus()},[]);let M=async e=>{if(e.preventDefault(),!o.trim())return void e6.c.error("Task name is required.");if(!c.trim())return void e6.c.error("Task description is required.");if(x)return void e6.c.error(x);if(!S)return;let r=t?null:R;if(t||r&&L()){f(!0);try{if(t){let e=await oW({cronId:t.cron_id,name:o.trim(),prompt:c.trim(),schedule:y,timezone:t.timezone,input:t.input});e6.c.success(`"${o.trim()}" updated.`),n(e)}else r&&(await oG({name:o.trim(),prompt:c.trim(),schedule:y,target:r}),e6.c.success(`"${o.trim()}" scheduled.`),n())}catch(e){if(t&&oY(e)){e6.c.error(`Couldn't find "${t.name}"; it may have been deleted.`),n();return}t||O(e),e6.c.error(e instanceof Error?e.message:s?"Failed to update scheduled task.":"Failed to create scheduled task.")}finally{f(!1)}}};return(0,ec.jsxs)("form",{onSubmit:M,className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center gap-2 border-b border-border px-3 py-2.5 sm:px-5",children:[(0,ec.jsx)("button",{type:"button",onClick:r,disabled:m,"aria-label":"Back to scheduled tasks",className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring md:hidden",children:(0,ec.jsx)(L6,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("h2",{className:"truncate text-sm font-semibold",children:s?"Edit scheduled task":"New scheduled task"}),(0,ec.jsx)("p",{className:"truncate text-xs text-muted-foreground",children:"EvoScientist will run this task description unattended."})]})]}),(0,ec.jsx)(hp,{className:"min-h-0 flex-1",children:(0,ec.jsxs)("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-4 p-3 sm:p-5",children:[(0,ec.jsxs)("div",{className:"space-y-1.5",children:[(0,ec.jsx)(Dl,{htmlFor:"scheduled-task-name",children:"Task name"}),(0,ec.jsx)(r3,{id:"scheduled-task-name",ref:h,type:"text",value:o,onChange:e=>l(e.target.value),placeholder:"Daily Briefing",autoComplete:"off"})]}),!s&&C&&(0,ec.jsxs)("div",{className:"space-y-1.5",children:[(0,ec.jsx)(Dl,{children:"Project"}),(0,ec.jsxs)(dY,{value:C,onValueChange:e=>{e&&I(e)},children:[(0,ec.jsx)(pI,{"aria-label":"Project",className:rO(pB,"sm:min-w-56"),children:(0,ec.jsx)(dQ,{})}),(0,ec.jsx)(pO,{className:p$,children:A.map(e=>(0,ec.jsx)(pD,{value:e.key,title:e.key,children:e.name},e.key))})]})]}),(0,ec.jsxs)("div",{className:"space-y-1.5",children:[(0,ec.jsx)(Dl,{htmlFor:"scheduled-task-prompt",children:"Task description"}),(0,ec.jsx)(bG,{id:"scheduled-task-prompt",value:c,onChange:e=>u(e.target.value),placeholder:"Describe what EvoScientist should do each time this task runs...",rows:9,className:"min-h-52 resize-y leading-relaxed"})]}),(0,ec.jsxs)("div",{className:"space-y-1.5",children:[(0,ec.jsx)(Dl,{children:"Schedule"}),(0,ec.jsx)(Dc,{value:d,onChange:e=>{let t="custom"===d.frequency;t&&"custom"===e.frequency&&e.custom!==d.custom&&(E.current=""!==e.custom.trim()),p(t||"custom"!==e.frequency||E.current?e:{...e,custom:y})},error:x,timeZone:v}),k&&(0,ec.jsxs)("p",{className:"text-xs text-muted-foreground",children:["This task has no time zone and runs on UTC time. Saving it switches it to ",oD(v)," time."]})]})]})}),(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center justify-end gap-2 border-t border-border bg-background px-3 py-2.5 sm:px-5",children:[(0,ec.jsx)(rQ,{type:"button",variant:"outline",size:"sm",onClick:r,disabled:m,children:"Cancel"}),(0,ec.jsxs)(rQ,{type:"submit",size:"sm",disabled:m||!D,children:[m?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin"}):s?(0,ec.jsx)(fM,{className:"size-3.5"}):(0,ec.jsx)(fF,{className:"size-3.5"}),s?"Save changes":"Create task"]})]})]})}function Dp({project:e,task:t,onBack:n,onEdit:r,onChanged:a,onDeleted:i,onMissing:s,onBusy:o,onOpenThread:l}){let c,[u,d]=(0,eu.useState)(!1),[p,m]=(0,eu.useState)(!1);(0,eu.useEffect)(()=>(o(p),()=>o(!1)),[p,o]);let[f,h]=(0,eu.useState)(!1),[g,b]=(0,eu.useState)(!1),y=o$(t),E=Do(y),x=e&&!e.missing?e.key:null,v=(0,eu.useMemo)(()=>x?{assistantId:t.assistantId,workspaceDir:x}:null,[x,t.assistantId]),k=e?e.missing?`${e.name}'s folder is missing: the task won't run until the folder is back.`:null:"This task's project isn't on this backend.",S=oX(),T=oZ(),w=(0,eu.useCallback)(async()=>{if(v&&!k&&T()){d(!0);try{await oK(t,v),e6.c.success(`"${t.name}" started.`)}catch(e){S(e),e6.c.error(e instanceof Error?e.message:"Failed to start the task.")}finally{d(!1)}}},[t,v,k,S,T]),_=(0,eu.useCallback)(async()=>{m(!0);try{let e=await oV(t,!t.enabled);e6.c.success(e.enabled?`"${t.name}" resumed.`:`"${t.name}" paused.`),a(e)}catch(e){if(oY(e)){e6.c.error(`Couldn't find "${t.name}"; it may have been deleted.`),s();return}e6.c.error(e instanceof Error?e.message:t.enabled?"Failed to pause the task.":"Failed to resume the task.")}finally{m(!1)}},[t,a,s]),A=(0,eu.useCallback)(async()=>{b(!0);try{await oq(t.cron_id),e6.c.success(`"${t.name}" deleted.`),h(!1),i()}catch(e){if(oY(e)){e6.c.error(`Couldn't find "${t.name}"; it may have been deleted.`),h(!1),i();return}e6.c.error(e instanceof Error?e.message:"Failed to delete the task.")}finally{b(!1)}},[t,i]);return(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center gap-2 border-b border-border px-3 py-2.5 sm:px-5",children:[(0,ec.jsx)("button",{type:"button",onClick:n,disabled:p,"aria-label":"Back to scheduled tasks",className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring md:hidden",children:(0,ec.jsx)(L6,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("h2",{className:"truncate text-sm font-semibold",children:t.name}),(0,ec.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[oM(t.schedule,t.timezone),e&&(0,ec.jsx)("span",{title:e.key,children:` \xb7 ${e.name}`})]})]}),(0,ec.jsxs)(rQ,{size:"sm",onClick:w,disabled:u||p||!v||!!k||!t.prompt.trim(),title:k??void 0,children:[u?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin"}):(0,ec.jsx)(Oz,{className:"size-3.5"}),"Run now"]})]}),(0,ec.jsx)(hp,{className:"min-h-0 flex-1",children:(0,ec.jsxs)("div",{className:"mx-auto w-full max-w-3xl space-y-4 p-3 sm:p-5",children:[(0,ec.jsxs)("div",{className:"grid gap-2 sm:grid-cols-3",children:[(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-[var(--color-surface)] px-3 py-2",children:[(0,ec.jsx)("p",{className:"text-[11px] font-medium uppercase text-muted-foreground",children:"Next run"}),(0,ec.jsx)("p",{className:"mt-1 truncate text-sm font-medium tabular-nums",title:E,children:t.enabled?y?`${oP(y)} \xb7 ${Ds(y)}`:"Not scheduled":"Paused"})]}),(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-[var(--color-surface)] px-3 py-2",children:[(0,ec.jsx)("p",{className:"text-[11px] font-medium uppercase text-muted-foreground",children:"Cron"}),(0,ec.jsx)("p",{className:"mt-1 truncate font-mono text-sm",children:t.schedule})]}),(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-[var(--color-surface)] px-3 py-2",children:[(0,ec.jsx)("p",{className:"text-[11px] font-medium uppercase text-muted-foreground",children:"Created"}),(0,ec.jsx)("p",{className:"mt-1 truncate text-sm",children:Number.isNaN((c=new Date(t.created_at)).getTime())?"Unknown":new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",year:"numeric"}).format(c)})]})]}),(0,ec.jsxs)("section",{className:"space-y-1.5",children:[(0,ec.jsx)("p",{className:"text-xs font-medium text-muted-foreground",children:"Task description"}),(0,ec.jsx)("div",{className:"max-h-[min(38rem,55vh)] overflow-auto rounded-md border border-border bg-[var(--color-surface)] px-3 py-2.5",children:t.prompt?(0,ec.jsx)("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed",children:t.prompt}):(0,ec.jsx)("p",{className:"text-sm italic text-muted-foreground",children:"No task description stored."})})]}),(0,ec.jsx)(Da,{task:t,onOpenThread:l})]})}),(0,ec.jsxs)("div",{className:"flex flex-shrink-0 items-center justify-between gap-2 border-t border-border bg-background px-3 py-2.5 sm:px-5",children:[(0,ec.jsx)("p",{className:"hidden truncate text-xs text-muted-foreground sm:block",children:k??"Manual runs create a scheduler thread immediately."}),(0,ec.jsxs)("div",{className:"ml-auto flex items-center gap-2",children:[(0,ec.jsxs)(rQ,{variant:"outline",size:"sm",onClick:()=>void _(),disabled:p,"aria-label":`${t.enabled?"Pause":"Resume"} scheduled task "${t.name}"`,children:[p?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin"}):t.enabled?(0,ec.jsx)(O$,{className:"size-3.5"}):(0,ec.jsx)(Oz,{className:"size-3.5"}),t.enabled?"Pause":"Resume"]}),(0,ec.jsxs)(rQ,{variant:"outline",size:"sm",onClick:r,disabled:p,"aria-label":`Edit scheduled task "${t.name}"`,children:[(0,ec.jsx)(fM,{className:"size-3.5"}),"Edit"]}),(0,ec.jsxs)(rQ,{variant:"outline",size:"sm",onClick:()=>h(!0),disabled:p,"aria-label":`Delete scheduled task "${t.name}"`,className:"text-destructive hover:border-destructive hover:text-destructive",children:[(0,ec.jsx)(fz,{className:"size-3.5"}),"Delete"]})]})]})]}),(0,ec.jsx)(rL,{open:f,onOpenChange:e=>{g||h(e)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-sm",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Delete scheduled task?"}),(0,ec.jsxs)(rB,{children:["“",t.name,"” will stop running. This cannot be undone."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",size:"sm",onClick:()=>h(!1),disabled:g,children:"Cancel"}),(0,ec.jsxs)(rQ,{variant:"destructive",size:"sm",onClick:A,disabled:g,"aria-label":`Confirm delete scheduled task "${t.name}"`,children:[g&&(0,ec.jsx)(sp,{className:"size-3.5 animate-spin"}),"Delete"]})]})]})})]})}function Dm({task:e,active:t,onSelect:n,disabled:r}){let a=o$(e);return(0,ec.jsxs)("button",{type:"button",onClick:n,disabled:r,"aria-current":t,className:rO("flex w-full items-start gap-2 rounded-md px-2 py-2 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-60",t?"bg-accent":"hover:bg-accent/60"),children:[(0,ec.jsx)("span",{className:rO("mt-1 flex size-2 shrink-0 rounded-full",e.enabled?"bg-[var(--brand)]":"bg-[var(--color-text-tertiary,var(--muted-foreground))] opacity-40")}),(0,ec.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,ec.jsx)("span",{className:"block truncate text-sm font-medium",children:e.name}),(0,ec.jsx)("span",{className:"mt-0.5 block truncate text-xs text-muted-foreground",children:oM(e.schedule,e.timezone)}),(0,ec.jsxs)("span",{className:"mt-1 flex min-w-0 items-center gap-1.5 text-[11px] text-muted-foreground",children:[(0,ec.jsx)(fI,{className:"size-3 shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"truncate tabular-nums",title:Do(a),children:e.enabled?a?oP(a):"No next run":"Paused"})]})]}),(0,ec.jsx)(fN,{className:"mt-1 size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"})]})}function Df({onOpenThread:e}){let{tasks:t,loading:n,error:r,refresh:a}=function(){let[e,t]=(0,eu.useState)([]),[n,r]=(0,eu.useState)(!0),[a,i]=(0,eu.useState)(null),[s,o]=(0,eu.useState)(0),l=(0,eu.useRef)(0),c=(0,eu.useCallback)(()=>{l.current+=1,r(!0),o(e=>e+1)},[]);return(0,eu.useEffect)(()=>{let e=!1;return oH().then(n=>{e||l.current!==s||(t(n),i(null))}).catch(n=>{!e&&l.current===s&&(i(n instanceof Error&&("TimeoutError"===n.name||n.message.startsWith("TimeoutError"))?"The backend didn't answer.":n instanceof Error?n.message:"Failed to load scheduled tasks."),t([]))}).finally(()=>{e||l.current!==s||r(!1)}),()=>{e=!0}},[s]),{tasks:e,loading:n,error:a,refresh:c}}(),[i,s]=(0,eu.useState)({kind:"empty"}),[o,l]=(0,eu.useState)(!1),[c,u]=(0,eu.useState)(""),d=(0,eu.useRef)(0),p=(0,eu.useRef)(0),{projects:m}=sd(),f=(0,eu.useMemo)(()=>"ready"===m.status?m.projects:[],[m]),h=(0,eu.useMemo)(()=>i7(f),[f]),g="pending"===m.status,b=(0,eu.useCallback)(e=>h.get(e.assistantId)??null,[h]),y=(0,eu.useMemo)(()=>se(t,f),[t,f]),E=o||n,[x,v]=(0,eu.useState)(!1);n||x||v(!0);let k=n&&!x||g,S=(0,eu.useMemo)(()=>[...y].sort((e,t)=>{let n=o$(e),r=o$(t),a=n?new Date(n).getTime():0,i=r?new Date(r).getTime():0;return a&&i&&a!==i?a-i:a&&!i?-1:!a&&i?1:e.name.localeCompare(t.name)}),[y]),T=(0,eu.useMemo)(()=>{let e=c.trim().toLowerCase();return e?S.filter(t=>[t.name,t.prompt,t.schedule,oM(t.schedule,t.timezone),t.enabled?"":"paused",o$(t)?Ds(o$(t)):""].join(" ").toLowerCase().includes(e)):S},[c,S]),w=(0,eu.useMemo)(()=>f.map(e=>({project:e,tasks:T.filter(t=>b(t)===e)})).filter(e=>e.tasks.length>0),[f,T,b]),_=S.find(e=>o$(e)),A=_?o$(_):null,N="detail"===i.kind?i.task.cron_id:null;(0,eu.useEffect)(()=>{if(!N||n||r||g)return;let e=y.find(e=>e.cron_id===N);s(e?{kind:"detail",task:e}:{kind:"empty"})},[r,n,g,N,y]);let I=(0,eu.useCallback)(e=>{d.current+=1,s({kind:"create",template:e,createId:d.current})},[]),C=(0,eu.useCallback)(e=>{p.current+=1,s({kind:"edit",task:e,editId:p.current})},[]),R=(0,eu.useCallback)(e=>{a(),s(e?{kind:"detail",task:e}:{kind:"empty"})},[a]),O=(0,eu.useCallback)(e=>{a(),s({kind:"detail",task:e})},[a]),L=(0,eu.useCallback)(()=>{a(),s({kind:"empty"})},[a]);return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col bg-background",children:[(0,ec.jsxs)("header",{className:"flex flex-shrink-0 items-center justify-between gap-3 border-b border-border px-3 py-2.5 sm:px-4",children:[(0,ec.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,ec.jsx)("span",{className:"flex size-8 shrink-0 items-center justify-center rounded-md bg-accent text-[var(--brand)]",children:(0,ec.jsx)(L8,{className:"size-4","aria-hidden":"true"})}),(0,ec.jsxs)("div",{className:"min-w-0",children:[(0,ec.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,ec.jsx)("h1",{className:"truncate text-sm font-semibold",children:"Scheduled"}),!k&&(0,ec.jsx)("span",{className:"rounded-full bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:y.length})]}),(0,ec.jsx)("p",{className:"truncate text-xs text-muted-foreground",children:A?`Next: ${oP(A)}`:"Recurring EvoScientist tasks"})]})]}),(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:[(0,ec.jsx)("button",{type:"button",onClick:a,disabled:n||o,"aria-label":"Refresh scheduled tasks",title:"Refresh scheduled tasks",className:"rounded-md p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",children:(0,ec.jsx)(LU,{className:rO("size-4",n&&"animate-spin"),"aria-hidden":"true"})}),(0,ec.jsxs)(rQ,{size:"sm",onClick:()=>I(),disabled:E,children:[(0,ec.jsx)(fF,{className:"size-3.5"}),(0,ec.jsx)("span",{className:"hidden sm:inline",children:"New task"}),(0,ec.jsx)("span",{className:"sm:hidden",children:"New"})]})]})]}),(0,ec.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,ec.jsxs)("aside",{className:rO("w-full min-w-0 flex-col border-r border-border md:flex md:w-72 md:flex-shrink-0","empty"===i.kind?"flex":"hidden"),children:[(0,ec.jsx)("div",{className:"flex-shrink-0 space-y-2 border-b border-border p-2.5",children:(0,ec.jsxs)("div",{className:"relative",children:[(0,ec.jsx)(f$,{className:"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground","aria-hidden":"true"}),(0,ec.jsx)(r3,{type:"search",name:"scheduled-search",value:c,onChange:e=>u(e.target.value),placeholder:"Search scheduled tasks...","aria-label":"Search scheduled tasks",autoComplete:"off",spellCheck:!1,className:"h-9 pl-8 pr-8"}),c&&(0,ec.jsx)("button",{type:"button",onClick:()=>u(""),"aria-label":"Clear scheduled task search",className:"absolute right-1 top-1/2 -translate-y-1/2 rounded p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(n1,{className:"size-3.5","aria-hidden":"true"})})]})}),(0,ec.jsx)(hp,{className:"h-0 flex-1",children:k?(0,ec.jsxs)("div",{className:"flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading tasks..."]}):r?(0,ec.jsxs)("div",{role:"alert",className:"space-y-3 p-3",children:[(0,ec.jsx)("p",{className:"text-sm text-destructive",children:r}),(0,ec.jsxs)(rQ,{disabled:E,variant:"outline",size:"sm",onClick:a,children:[(0,ec.jsx)(LU,{className:"size-3.5"}),"Retry"]})]}):0===y.length?(0,ec.jsxs)("div",{className:"space-y-4 p-3",children:[(0,ec.jsxs)("div",{className:"rounded-md border border-dashed border-border bg-[var(--color-surface)] px-3 py-5 text-center",children:[(0,ec.jsx)(L9,{className:"mx-auto size-7 text-muted-foreground/60","aria-hidden":"true"}),(0,ec.jsx)("p",{className:"mt-2 text-sm font-medium",children:"No scheduled tasks"}),(0,ec.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"Start from a template or create one from scratch."})]}),(0,ec.jsxs)("div",{className:"space-y-2",children:[(0,ec.jsx)("p",{className:"px-1 text-[11px] font-semibold uppercase text-muted-foreground",children:"Templates"}),Di.map(e=>(0,ec.jsx)(Du,{template:e,onSelect:I,disabled:E},e.label))]})]}):0===T.length?(0,ec.jsxs)("div",{className:"space-y-3 p-4 text-center",children:[(0,ec.jsx)("p",{className:"text-sm font-medium",children:"No matching tasks"}),(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"Try a task name, schedule, or description keyword."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",onClick:()=>u(""),children:"Clear search"})]}):(0,ec.jsxs)("div",{className:"p-1.5",children:[(0,ec.jsxs)("div",{className:"mb-2 flex items-center justify-between px-2 py-1",children:[(0,ec.jsx)("p",{className:"text-[11px] font-semibold uppercase text-muted-foreground",children:"Tasks"}),(0,ec.jsx)("p",{className:"text-[11px] text-muted-foreground",children:T.length})]}),w.map(({project:e,tasks:t})=>(0,ec.jsxs)("section",{"aria-label":`Tasks in ${e.name}`,className:"mb-2",children:[(0,ec.jsxs)("h3",{className:"m-0 flex items-center gap-1.5 px-2 py-1 text-xs font-semibold",title:e.key,children:[(0,ec.jsx)("span",{className:"truncate",children:e.name}),e.missing&&(0,ec.jsx)("span",{className:"rounded bg-destructive/10 px-1 py-px text-[11px] font-medium text-destructive",children:"folder missing"})]}),(0,ec.jsx)("div",{className:"flex flex-col gap-0.5",children:t.map(e=>{let t="detail"===i.kind&&i.task.cron_id===e.cron_id;return(0,ec.jsx)(Dm,{task:e,active:t,onSelect:()=>s({kind:"detail",task:e}),disabled:E},e.cron_id)})})]},e.key)),(0,ec.jsxs)("div",{className:"mt-3 space-y-2 border-t border-border px-1 py-3",children:[(0,ec.jsx)("p",{className:"px-1 text-[11px] font-semibold uppercase text-muted-foreground",children:"Templates"}),(0,ec.jsx)("div",{className:"grid gap-1.5",children:Di.map(e=>(0,ec.jsx)(Du,{template:e,onSelect:I,disabled:E,compact:!0},e.label))})]})]})})]}),(0,ec.jsxs)("section",{className:rO("min-w-0 flex-1 flex-col","empty"===i.kind?"hidden md:flex":"flex"),children:["empty"===i.kind&&(0,ec.jsx)("div",{className:"flex flex-1 items-center justify-center p-5",children:(0,ec.jsxs)("div",{className:"w-full max-w-lg space-y-4",children:[(0,ec.jsxs)("div",{className:"space-y-1 text-center",children:[(0,ec.jsx)(L8,{className:"mx-auto size-9 text-muted-foreground/40","aria-hidden":"true"}),(0,ec.jsx)("p",{className:"text-sm font-medium",children:"Pick a scheduled task"}),(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:"Pick a template below, or ask EvoScientist in chat to create a recurring task."})]}),y.length>0&&(0,ec.jsx)("div",{className:"mx-auto grid w-full max-w-xl gap-2 sm:grid-cols-2",children:Di.map(e=>(0,ec.jsx)(Du,{template:e,onSelect:I,disabled:E,compact:!0},e.label))})]})}),"create"===i.kind&&(0,ec.jsx)(Dd,{initialTemplate:i.template,onSaved:R,onCancel:()=>s({kind:"empty"}),onBusy:l},i.createId),"edit"===i.kind&&(0,ec.jsx)(Dd,{initialTask:i.task,onSaved:R,onCancel:()=>s({kind:"detail",task:i.task}),onBusy:l},i.editId),"detail"===i.kind&&(0,ec.jsx)(Dp,{project:b(i.task),task:i.task,onBack:()=>s({kind:"empty"}),onEdit:()=>C(i.task),onChanged:O,onDeleted:L,onMissing:L,onBusy:l,onOpenThread:e},i.task.cron_id)]})]})]})}let Dh=n0("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),Dg=n0("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);function Db(){let{resolvedTheme:e,setTheme:t}=(0,CF.useTheme)(),[n,r]=(0,eu.useState)(!1);(0,eu.useEffect)(()=>r(!0),[]);let a=n&&"dark"===e;return(0,ec.jsx)(rQ,{variant:"ghost",size:"icon",className:"size-8 sm:size-9",onClick:()=>t(a?"light":"dark"),"aria-label":a?"Switch to light mode":"Switch to dark mode",title:a?"Switch to light mode":"Switch to dark mode",children:a?(0,ec.jsx)(Dh,{className:"size-5","aria-hidden":"true"}):(0,ec.jsx)(Dg,{className:"size-5","aria-hidden":"true"})})}let Dy={checking:{dot:"bg-[var(--color-warning)]",label:"Connecting…",pulse:!0},online:{dot:"bg-[var(--color-success)]",label:"Connected",pulse:!1},offline:{dot:"bg-[var(--color-error)]",label:"Offline",pulse:!1}};function DE(e){return e.trim().replace(/\/+$/,"")}async function Dx(e){let t=new AbortController,n=setTimeout(()=>t.abort(),4e3);try{return(await fetch(`${e}/info`,{signal:t.signal,cache:"no-store"})).ok}catch{return!1}finally{clearTimeout(n)}}function Dv({deploymentUrl:e,onReconnect:t,onOnline:n}){let[r,a]=(0,eu.useState)("checking"),i=(0,eu.useRef)("checking");i.current=r;let s=(0,eu.useRef)(n);s.current=n;let[o,l]=(0,eu.useState)(null),[c,u]=(0,eu.useState)(null),[d,p]=(0,eu.useState)(null),[m,f]=(0,eu.useState)(!0);(0,eu.useEffect)(()=>{if("function"!=typeof window.matchMedia)return;let e=window.matchMedia("(min-width: 420px)"),t=()=>f(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]);let h=(0,eu.useRef)(0),g=(0,eu.useRef)(!0),b=(0,eu.useRef)(null),y=(0,eu.useCallback)(async t=>{let n=DE(e);try{let e=await fetch("/api/evosci-config",{cache:"no-store"}),r=await e.json().catch(()=>null),a=r?.deploymentUrl?DE(r.deploymentUrl):"",i=function(e,t){if(!e||null===t||or(e.hostname))return null;let n="https:"===e.protocol?"https:":"http:";return`${n}//${e.hostname}:${t}`}(window.location,"number"==typeof r?.port?r.port:null);if(t!==h.current||!g.current)return;for(let e of[i??"",a].filter((e,t,r)=>e&&e!==n&&r.indexOf(e)===t)){let n=await Dx(e);if(t!==h.current||!g.current)return;if(n)return void u(e)}u(null)}catch{t===h.current&&g.current&&u(null)}},[e]),E=(0,eu.useCallback)(async()=>{let t=++h.current,n=DE(e);if(!n){t===h.current&&g.current&&(l(null),a("offline"),p(null),u(null));return}b.current?.abort();let r=new AbortController;b.current=r;let o=setTimeout(()=>r.abort(),4e3);try{let e=await fetch(`${n}/info`,{signal:r.signal,cache:"no-store"});if(t!==h.current||!g.current)return;if(!e.ok){a("offline"),p("http"),y(t);return}let o=await e.json().catch(()=>null);if(t!==h.current||!g.current)return;l(o),"offline"===i.current&&s.current?.(),a("online"),u(null)}catch{t===h.current&&g.current&&(a("offline"),p(r.signal.aborted?"timeout":"network"),y(t))}finally{clearTimeout(o)}},[e,y]);(0,eu.useEffect)(()=>{g.current=!0,a("checking"),E();let e=setInterval(()=>{document.hidden||E()},1e4),t=()=>E(),n=()=>{document.hidden||E()};return window.addEventListener("focus",t),window.addEventListener("online",t),document.addEventListener("visibilitychange",n),()=>{g.current=!1,b.current?.abort(),clearInterval(e),window.removeEventListener("focus",t),window.removeEventListener("online",t),document.removeEventListener("visibilitychange",n)}},[E]);let x=Dy[r],v=void 0!==t&&m,k="offline"===r&&null!==c&&v;(0,eu.useEffect)(()=>{if(!k)return;let e=document.documentElement;return e.setAttribute("data-reconnect",""),()=>e.removeAttribute("data-reconnect")},[k]);let S="online"===r?`Connected to ${e}${o?.version?` \xb7 langgraph ${o.version}`:""}`:"offline"===r?function(e,t,n,r=null,a=!0){let i="Click to retry.",s=function(e){try{let t=new URL(e);return"http:"!==t.protocol&&"https:"!==t.protocol||!t.hostname||t.username||t.password?null:t.hostname.toLowerCase()}catch{return null}}(e),o=null===s||or(s)||s===t?.hostname.toLowerCase();if(r&&o)return`Can't reach the backend at ${e}, but one answers at ${r}: ${a?"use Reconnect":"enter it as the Deployment URL in Settings"}. ${i}`;let l=r&&!a?` A backend answers at ${r}; enter it as the Deployment URL in Settings to use it.`:"",c=`Can't reach the backend at ${e}. Is "EvoSci deploy" running?${l} ${i}`;if("network"!==n||!t||null===s)return c;let u=or(t.hostname),d=or(s),p=!d&&!on.test(s);if(u&&!p)return c;if(d)return`Can't reach the backend at ${e} from this page, ${t.origin}. If it is running, it refuses pages it does not trust: add ${t.origin} to backend_allowed_origins (comma-separated) in its config.yaml. On another device, ${s} is that device itself, so also run \`EvoSci config set langgraph_dev_host 0.0.0.0\` on the backend's machine. Restart the backend after these changes; on another device, then `+(a?"use Reconnect here once it appears or ":"")+"enter the backend machine's address in Settings. On the backend's machine, opening the WebUI on localhost usually works without any change. "+i;let m=[p&&`requests addressed to ${s}`,!u&&`${p?"from ":""}pages on ${t.origin}`].filter(Boolean).join(" or ");return`Can't reach the backend at ${e}. If it is running, it may be refusing ${m}; its log (langgraph_dev.log in ~/.evoscientist/server, $EVOSCIENTIST_DATA_DIR/server when that is set, or ~/.config/evoscientist with an older EvoScientist) then shows "Refused a request" with the fix.${l} ${i}`}(e,window.location,d,c,v):`Checking connection to ${e}…`;return(0,ec.jsxs)("div",{className:"flex items-center gap-1",children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",onClick:E,title:S,"aria-label":S,className:"h-8 gap-1.5 px-2 text-xs font-normal text-muted-foreground",children:[(0,ec.jsx)("span",{className:`size-2 shrink-0 rounded-full ${x.dot} ${x.pulse?"animate-pulse":""}`,"aria-hidden":"true"}),(0,ec.jsx)("span",{className:"hidden sm:inline",children:x.label})]}),k&&(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",onClick:()=>{c&&(u(null),a("checking"),t?.(c))},title:`Backend detected at ${c}. Click to reconnect.`,"aria-label":`Reconnect to detected backend ${c}`,className:"h-8 gap-1 px-2 text-xs font-medium text-[var(--brand)] hover:text-[var(--brand)]",children:["Reconnect"," ",(0,ec.jsx)("span",{className:"hidden max-w-44 truncate tabular-nums sm:block",children:c?function(e){try{let t=new URL(e),n="127.0.0.1"===t.hostname||"localhost"===t.hostname||"0.0.0.0"===t.hostname,r=t.port||("https:"===t.protocol?"443":"80");return n?`:${r}`:`${t.hostname}:${r}`}catch{return e}}(c):""})]})]})}let Dk=n0("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);async function DS(e,t){let n=await fetch(`/api/workspace?${new URLSearchParams({project:e,path:t})}`),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error||"Failed to list workspace.");return r?.entries??[]}async function DT(e){let t=await fetch(`/api/workspace?${new URLSearchParams({project:e,recursive:"1"})}`),n=await t.json().catch(()=>null);if(!t.ok)throw Error(n?.error||"Failed to load workspace.");return{entries:n?.entries??[],truncated:!!n?.truncated}}let Dw=[{key:"docs",label:"Papers & docs",Icon:Ll,exts:["pdf","tex","bib","md","markdown","txt","docx","doc","rtf","odt"]},{key:"figures",label:"Figures",Icon:n0("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]),exts:["png","jpg","jpeg","gif","svg","webp","bmp","tiff","tif","eps"]},{key:"data",label:"Data",Icon:n0("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]),exts:["json","jsonl","csv","tsv","xlsx","xls","parquet","pkl","npy","npz","h5","hdf5","db","sqlite","yaml","yml","xml"]},{key:"code",label:"Code",Icon:n0("code-xml",[["path",{d:"m18 16 4-4-4-4",key:"1inbqp"}],["path",{d:"m6 8-4 4 4 4",key:"15zrgr"}],["path",{d:"m14.5 4-5 16",key:"e7oirm"}]]),exts:["py","ipynb","js","ts","tsx","jsx","sh","bash","r","jl","cpp","cc","c","h","hpp","java","go","rs","m","rb"]}],D_={key:"other",label:"Other",Icon:bT},DA={};for(let e of Dw)for(let t of e.exts)DA[t]=e.key;function DN(){let{project:e,notice:t}=Og();return e?(0,ec.jsx)(DC,{project:e},e):(0,ec.jsx)(DI,{message:t??""})}function DI({message:e}){return(0,ec.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:e})}function DC({project:e}){let[t,n]=(0,eu.useState)("tree"),[r,a]=(0,eu.useState)({}),[i,s]=(0,eu.useState)(new Set),[o,l]=(0,eu.useState)(new Set),[c,u]=(0,eu.useState)(!1),[d,p]=(0,eu.useState)(null),[m,f]=(0,eu.useState)(!1),[h,g]=(0,eu.useState)(!1),[b,y]=(0,eu.useState)(null),E=Lu(),x=t=>E?.open({source:"workspace",path:t.path,size:t.size,project:e}),v=(0,eu.useMemo)(()=>new Set((E?.state.tabs??[]).filter(t=>"workspace"===t.source&&t.project===e).map(e=>e.path)),[E?.state.tabs,e]),k=E?.state.tabs.length??0,S=(0,eu.useCallback)(async t=>{l(e=>new Set(e).add(t));try{let n=await DS(e,t);return a(e=>({...e,[t]:n})),""===t&&y(null),n}catch(e){throw""===t&&y(e instanceof Error?e.message:"Failed to load."),e}finally{l(e=>{let n=new Set(e);return n.delete(t),n})}},[e]),T=(0,eu.useCallback)(async()=>{f(!0);try{let{entries:t,truncated:n}=await DT(e);p(t),g(n),y(null)}catch(e){y(e instanceof Error?e.message:"Failed to load.")}finally{f(!1)}},[e]);(0,eu.useEffect)(()=>{u(!0),S("").catch(()=>{}).finally(()=>u(!1))},[]),(0,eu.useEffect)(()=>{"type"!==t||null!==d||m||T()},[t]);let w=(0,eu.useCallback)(async()=>{(y(null),"type"===t)?await T():(u(!0),await Promise.allSettled(["",...i].map(e=>S(e))),u(!1))},[t,i,S,T]),_=(0,eu.useRef)(E?.treeRevision??0);(0,eu.useEffect)(()=>{let e=E?.treeRevision??0;e!==_.current&&(_.current=e,w())},[E?.treeRevision,w]);let A=(0,eu.useCallback)(e=>{s(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),r[e]||S(e).catch(()=>{})),n})},[r,S]),N=(0,eu.useMemo)(()=>{let e={};for(let t of d??[]){let n=DA[t.ext]??D_.key;(e[n]??=[]).push(t)}for(let t of Object.values(e))t.sort((e,t)=>t.mtime-e.mtime);return e},[d]),I="type"===t?m:c,C=(e,t)=>{let n=r[e];return n?0===n.length&&0===t?(0,ec.jsx)("p",{className:"px-2 py-6 text-center text-xs text-muted-foreground",children:"No files in the workspace yet"}):n.map(e=>{let n=i.has(e.path),r=o.has(e.path);return(0,ec.jsxs)("div",{children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>"dir"===e.type?A(e.path):x(e),className:"flex w-full items-center gap-1.5 rounded-md py-1 pr-2 text-left text-sm text-foreground transition-colors hover:bg-muted",style:{paddingLeft:`${14*t+4}px`},title:e.name,children:["dir"===e.type?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"flex size-4 shrink-0 items-center justify-center text-muted-foreground",children:r?(0,ec.jsx)(sp,{className:"size-3 animate-spin"}):n?(0,ec.jsx)(lA,{className:"size-3.5"}):(0,ec.jsx)(fN,{className:"size-3.5"})}),(0,ec.jsx)(Dk,{className:"size-4 shrink-0 text-[var(--brand)]"})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"size-4 shrink-0"}),(0,ec.jsx)(Ll,{className:"size-4 shrink-0 text-muted-foreground"})]}),(0,ec.jsx)("span",{className:"truncate",children:e.name}),v.has(e.path)&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"ml-auto size-1.5 shrink-0 rounded-full bg-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"sr-only",children:", open in preview"})]})]}),"dir"===e.type&&n&&C(e.path,t+1)]},e.path)}):null};return(0,ec.jsxs)("div",{className:"flex min-h-0 flex-col",children:[k>0&&(0,ec.jsxs)("button",{type:"button",onClick:()=>E?.showPreview(),className:"mb-2 flex w-full items-center gap-1.5 rounded-md bg-accent px-2 py-1.5 text-left text-sm font-medium text-[var(--brand)] transition-colors hover:bg-muted max-md:min-h-11",children:[(0,ec.jsx)(L6,{className:"size-4 rotate-180","aria-hidden":"true"}),`Back to preview (${k} open)`]}),(0,ec.jsxs)("div",{className:"flex items-center justify-between gap-2 pb-1.5",children:[(0,ec.jsx)("div",{className:"flex items-center gap-0.5 rounded-md bg-muted p-0.5 text-xs",children:["tree","type"].map(e=>(0,ec.jsx)("button",{type:"button",onClick:()=>n(e),className:rO("rounded px-2 py-0.5 font-medium transition-colors",t===e?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),"aria-pressed":t===e,children:"tree"===e?"Tree":"By type"},e))}),(0,ec.jsxs)("div",{className:"flex items-center gap-0.5",children:[(0,ec.jsxs)("a",{href:`/api/workspace/download?${new URLSearchParams({project:e})}`,download:!0,className:"inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",title:"Download the whole workspace as a zip",children:[(0,ec.jsx)(fC,{className:"size-3.5"}),"All"]}),(0,ec.jsx)("button",{type:"button",onClick:w,disabled:I,className:"inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50","aria-label":"Refresh workspace",title:"Refresh",children:(0,ec.jsx)(LU,{className:rO("size-3.5",I&&"animate-spin")})})]})]}),b?(0,ec.jsx)("p",{className:"px-2 py-6 text-center text-xs text-muted-foreground",children:b}):"tree"===t?c&&!r[""]?(0,ec.jsx)("div",{className:"flex items-center justify-center py-6",children:(0,ec.jsx)(sp,{className:"size-4 animate-spin text-muted-foreground"})}):(0,ec.jsx)("div",{className:"-mx-1",children:C("",0)}):m&&null===d?(0,ec.jsx)("div",{className:"flex items-center justify-center py-6",children:(0,ec.jsx)(sp,{className:"size-4 animate-spin text-muted-foreground"})}):(()=>{if(!d)return null;if(0===d.length)return(0,ec.jsx)("p",{className:"px-2 py-6 text-center text-xs text-muted-foreground",children:"No files in the workspace yet"});let e=[...Dw,D_];return(0,ec.jsxs)("div",{className:"space-y-3",children:[h&&(0,ec.jsx)("p",{className:"px-1 text-[11px] text-muted-foreground",children:"Showing the first files only — the workspace has more than the limit."}),e.map(e=>{let t=N[e.key];if(!t||0===t.length)return null;let n=e.Icon;return(0,ec.jsxs)("div",{children:[(0,ec.jsxs)("div",{className:"mb-0.5 flex items-center gap-1.5 px-1 text-[10px] font-semibold uppercase tracking-wider text-tertiary",children:[(0,ec.jsx)(n,{className:"size-3.5"}),e.label,(0,ec.jsxs)("span",{className:"text-muted-foreground",children:["(",t.length,")"]})]}),t.map(e=>{let t=e.path.includes("/")?e.path.slice(0,e.path.lastIndexOf("/")):"";return(0,ec.jsxs)("button",{type:"button",onClick:()=>x(e),className:"flex w-full items-center gap-1.5 rounded-md px-1 py-1 text-left text-sm text-foreground transition-colors hover:bg-muted",title:e.path,children:[(0,ec.jsx)(n,{className:"size-4 shrink-0 text-muted-foreground"}),(0,ec.jsx)("span",{className:"truncate",children:e.name}),(t||v.has(e.path))&&(0,ec.jsxs)("span",{className:"ml-auto flex shrink-0 items-center gap-1.5 truncate pl-2",children:[t&&(0,ec.jsx)("span",{className:"truncate text-[11px] text-muted-foreground",children:t}),v.has(e.path)&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"size-1.5 shrink-0 rounded-full bg-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"sr-only",children:", open in preview"})]})]})]},e.path)})]},e.key)})]})})()]})}let DR=n0("bell-ring",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M22 8c0-2.3-.8-4.3-2-6",key:"5bb3ad"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}],["path",{d:"M4 2C2.8 3.7 2 5.7 2 8",key:"tap9e0"}]]),DO=n0("corner-up-left",[["path",{d:"M20 20v-7a4 4 0 0 0-4-4H4",key:"1nkjon"}],["path",{d:"M9 14 4 9l5-5",key:"102s5s"}]]);function DL(e){let t="";for(let n of e)if("human"===n.type){let e=gj(n).trim();if(e){t=e;break}}return{prompt:t,steps:gH(e)}}function DD({status:e}){let t=RN[Rv(e)];return(0,ec.jsx)("span",{className:rO("size-2 shrink-0 rounded-full",t.dot,t.pulse&&"animate-pulse"),"aria-hidden":"true"})}function DM({onReportToMainChat:e}){let t=iG(),{projects:n,isReady:r,refresh:a}=sd(),[i]=ew("threadId"),{tasks:s,loaded:o,error:l,refresh:c}=O0(i),[u,d]=(0,eu.useState)(()=>Date.now()),[p,m]=(0,eu.useState)(null),[f,h]=(0,eu.useState)({}),g=(0,eu.useRef)(new Map),[b,y]=(0,eu.useState)({}),E=(0,eu.useRef)(b),[x,v]=(0,eu.useState)({}),[k,S]=Le(i),[T,w]=(0,eu.useState)({}),[_,A]=(0,eu.useState)({}),[N,I]=(0,eu.useState)({}),C=(0,eu.useRef)(!0);(0,eu.useEffect)(()=>(C.current=!0,()=>{C.current=!1}),[]),(0,eu.useEffect)(()=>{let e=setInterval(()=>d(Date.now()),1e3);return()=>clearInterval(e)},[]);let R=async e=>{var i;let s=(T[e.task_id]??"").trim();if(!s||_[e.task_id])return;let o=b[e.task_id];if(!o?.graphId)return;let l=bs(n,o);if(!bi(l))return;let c=(i=o.graphId,"open"===l.kind||"unbound"===l.kind?i1(i,l.key):null);if(c&&r()){A(t=>({...t,[e.task_id]:!0})),I(t=>({...t,[e.task_id]:null}));try{let n=await t.runs.wait(e.thread_id,c,{input:{messages:[{type:"human",content:s}]}});if(!C.current)return;let r=Array.isArray(n?.messages)?n.messages:[];if(0===r.length)return void I(t=>({...t,[e.task_id]:"The agent didn't return a reply — it may have hit an error."}));w(t=>({...t,[e.task_id]:""}));let{prompt:a,steps:i}=DL(r);h(t=>({...t,[e.task_id]:{loading:!1,error:null,prompt:a,steps:i}}))}catch(i){if(!C.current)return;let n=og(i)&&await ox(t,e.thread_id);if(!C.current)return;(n||oE(i))&&a();let r=i instanceof TypeError||"object"==typeof i&&null!==i&&"number"==typeof i.status;I(t=>({...t,[e.task_id]:oE(i)?"The backend doesn't serve this agent's project.":n?"This agent's project is no longer served: it was removed, or its folder is missing.":og(i)?"This agent's conversation no longer exists.":r?"Couldn't reach this agent — try again.":"The agent hit an error processing this follow-up."}))}finally{C.current&&A(t=>({...t,[e.task_id]:!1}))}}};(0,eu.useEffect)(()=>{if(!p)return;let e=s.find(e=>e.task_id===p);if(!e||"expired"===Rv(e.liveStatus))return;let n="running"===Rv(e.liveStatus),r=[e.run_id,e.last_updated_at,e.endedAt].join(":");if(!n&&g.current.get(p)===r)return;let a=!1;return h(e=>({...e,[p]:{loading:!e[p],error:null,prompt:e[p]?.prompt??"",steps:e[p]?.steps??[]}})),(async()=>{try{var i;let s=E.current[p],[o,l]=await Promise.all([t.threads.getState(e.thread_id),s?null:t.threads.get(e.thread_id).catch(()=>null)]);if(a)return;let{prompt:c,steps:u}=DL(o.values?.messages??[]);!s&&l&&(i=bn(l.metadata,o.metadata),E.current={...E.current,[p]:i},y(E.current)),!n&&(s||l)&&g.current.set(p,r),h(e=>({...e,[p]:{loading:!1,error:null,prompt:c,steps:u}}))}catch{if(a)return;g.current.delete(p),h(e=>({...e,[p]:{loading:!1,error:"Couldn't load this agent's steps.",prompt:e[p]?.prompt??"",steps:e[p]?.steps??[]}}))}})(),()=>{a=!0}},[p,s,t]);let O=(0,eu.useMemo)(()=>RC(s),[s]);return(0,ec.jsxs)("div",{className:"flex h-full flex-col",children:[(0,ec.jsxs)("div",{className:"flex items-center justify-between gap-2 px-1 pb-2",children:[(0,ec.jsx)("p",{className:"text-xs text-muted-foreground",children:O>0?`${O} running`:s.length>0?`${s.length} total`:"Background agents"}),(0,ec.jsxs)("div",{className:"flex items-center gap-1",children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>{i&&(k||O8(i,s.filter(e=>RI(e.liveStatus)).map(RT)),S(!k))},"aria-pressed":k,"aria-label":`Auto-report ${k?"on":"off"}`,title:k?"Auto-report on: finished agents are sent to the main chat automatically":"Auto-report off: use each agent's “Notify main chat” button",className:rO("inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",k?"bg-accent text-[var(--brand)]":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:[(0,ec.jsx)(DR,{className:"size-3.5","aria-hidden":"true"}),(0,ec.jsxs)("span",{className:"hidden min-[340px]:inline",children:["Auto-report ",k?"On":"Off"]})]}),(0,ec.jsx)("button",{type:"button",onClick:c,"aria-label":"Refresh agents",title:"Refresh",className:"rounded p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",children:(0,ec.jsx)(LU,{className:"size-3.5","aria-hidden":"true"})})]})]}),l&&(0,ec.jsx)("p",{className:"px-1 text-xs text-[var(--color-error)]",children:l}),!o&&(0,ec.jsxs)("div",{className:"flex items-center gap-2 px-1 py-4 text-xs text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-4 animate-spin","aria-hidden":"true"}),"Loading…"]}),o&&0===s.length&&(0,ec.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 px-4 py-10 text-center",children:[(0,ec.jsx)(bO,{className:"size-9 text-muted-foreground/60","aria-hidden":"true"}),(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"No background agents yet."}),(0,ec.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"When EvoScientist delegates long tasks (writing, data analysis) they run in the background and show up here."})]}),(0,ec.jsx)("div",{className:"flex min-h-0 flex-1 flex-col gap-1.5 overflow-y-auto",children:s.map(t=>{var r,a;let s,o,l,c,d=Rv(t.liveStatus),h=RN[d],g=p===t.task_id,y="expired"===d,E=f[t.task_id];return(0,ec.jsxs)("div",{className:"rounded-md border border-border bg-background",children:[(0,ec.jsxs)("button",{type:"button",onClick:()=>m(g?null:t.task_id),className:"flex w-full items-center gap-2 rounded-md px-2.5 py-2 text-left transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring","aria-expanded":g,children:[g?(0,ec.jsx)(lA,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}):(0,ec.jsx)(fN,{className:"size-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}),(0,ec.jsx)(DD,{status:t.liveStatus}),(0,ec.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm font-medium",children:Rk[r=t.agent_name]??r}),(0,ec.jsxs)("span",{className:"shrink-0 text-xs tabular-nums text-muted-foreground",children:[h.label,(s=function(e,t){let n=Rv(e.liveStatus);if("expired"===n)return"";let r="running"===n?t:e.endedAt?Date.parse(e.endedAt):t;return RR(e.startedAt??e.created_at,r)}(t,u))?` \xb7 ${s}`:""]})]}),g&&y&&(0,ec.jsx)("div",{className:"border-t border-border px-2.5 py-2 text-xs",children:(0,ec.jsx)("p",{className:"text-muted-foreground",children:"This task ran before a backend restart and its records are gone, so its steps and result can no longer be loaded. Any files it produced are still in the workspace."})}),g&&!y&&(0,ec.jsxs)("div",{className:"border-t border-border px-2.5 py-2 text-xs",children:[E?.loading&&(0,ec.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}),"Loading steps…"]}),E?.error&&(0,ec.jsx)("p",{className:"text-[var(--color-error)]",children:E.error}),E&&!E.loading&&!E.error&&(0,ec.jsxs)("div",{className:"flex flex-col gap-2",children:[E.prompt&&(0,ec.jsxs)("div",{children:[(0,ec.jsx)("p",{className:"font-semibold text-foreground",children:"Task"}),(0,ec.jsx)("p",{className:"whitespace-pre-wrap break-words text-muted-foreground",children:E.prompt.length>600?E.prompt.slice(0,600)+"…":E.prompt})]}),(0,ec.jsxs)("div",{children:[(0,ec.jsxs)("p",{className:"mb-1 font-semibold text-foreground",children:["Steps"," ",(0,ec.jsxs)("span",{className:"font-normal text-muted-foreground",children:["(",E.steps.length,")"]})]}),0===E.steps.length?(0,ec.jsx)("p",{className:"text-muted-foreground",children:"No steps yet."}):(0,ec.jsx)(Rx,{steps:E.steps,running:!RI(a=t.liveStatus)&&"expired"!==Rv(a),compact:!0})]}),RI(t.liveStatus)&&(0,ec.jsx)("div",{className:"mt-1 border-t border-border pt-2",children:k?(0,ec.jsxs)("p",{className:"inline-flex items-center gap-1.5 text-[11px] text-muted-foreground",children:[(0,ec.jsx)(DR,{className:"size-3.5 text-[var(--brand)]","aria-hidden":"true"}),"Auto-report on · future completions notify the main chat"]}):(0,ec.jsxs)("button",{type:"button",onClick:()=>(t=>{if(!e||!i)return void e6.c.error("Open the conversation to notify the main agent.");let n=e(t,i);if("sent"===n){v(e=>({...e,[RT(t)]:!0})),e6.c.success("Reported to the main chat.");return}if("duplicate"===n){v(e=>({...e,[RT(t)]:!0})),e6.c.info("This result is already in the main chat.");return}e6.c.error("wrong-thread"===n?"The active conversation changed — reopen this task and try again.":"read-only"===n?"The main chat is read-only here.":"waiting"===n?"The main chat is waiting for your answer — answer it, then notify.":"Main chat is busy — try again when it's idle.")})(t),disabled:!e||!!x[RT(t)],title:e?"Send this result back to the main agent":"Open the conversation to notify the main agent",className:"inline-flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-[11px] font-medium text-foreground transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",children:[(0,ec.jsx)(DO,{className:"size-3.5 text-[var(--brand)]","aria-hidden":"true"}),x[RT(t)]?"Reported to main chat":"Notify main chat"]})}),(o="running"===Rv(t.liveStatus),l=!!_[t.task_id],"readOnly"===(c=bs(n,b[t.task_id])).kind?(0,ec.jsx)("p",{className:"mt-1 border-t border-border pt-2 text-[11px] text-muted-foreground",children:c.reason}):(0,ec.jsxs)("div",{className:"mt-1 border-t border-border pt-2",children:[(0,ec.jsx)("p",{className:"mb-1 text-[11px] text-muted-foreground",children:"Direct follow-up · Main chat is not notified"}),(0,ec.jsxs)("form",{onSubmit:e=>{e.preventDefault(),R(t)},className:"flex items-center gap-1.5",children:[(0,ec.jsx)("input",{type:"text",name:`agent-message-${t.task_id}`,autoComplete:"off",value:T[t.task_id]??"",onChange:e=>w(n=>({...n,[t.task_id]:e.target.value})),onKeyDown:e=>{"Enter"===e.key&&(e.nativeEvent.isComposing||229===e.keyCode)&&e.preventDefault()},disabled:o||l||!bi(c),placeholder:o?"Agent is working…":"Send a direct follow-up…","aria-label":"Message this agent",className:"min-w-0 flex-1 rounded-md border border-border bg-background px-2 py-1.5 text-xs outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60"}),(0,ec.jsx)("button",{type:"submit",disabled:o||l||!bi(c)||!(T[t.task_id]??"").trim(),"aria-label":"Send",title:"Send to this agent",className:"inline-flex size-7 shrink-0 items-center justify-center rounded-md bg-[var(--brand-solid)] text-[var(--brand-foreground)] transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-40",children:l?(0,ec.jsx)(sp,{className:"size-3.5 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(bx,{className:"size-3.5","aria-hidden":"true"})})]}),N[t.task_id]&&(0,ec.jsx)("p",{className:"mt-1 text-[var(--color-error)]",role:"status","aria-live":"polite",children:N[t.task_id]})]}))]})]})]},t.task_id)})})]})}let DP={js:"javascript",jsx:"javascript",ts:"typescript",tsx:"typescript",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",cpp:"cpp",c:"c",cs:"csharp",php:"php",swift:"swift",kt:"kotlin",scala:"scala",sh:"bash",bash:"bash",zsh:"bash",json:"json",jsonl:"json",xml:"xml",html:"html",css:"css",scss:"scss",sass:"sass",less:"less",sql:"sql",yaml:"yaml",yml:"yaml",toml:"toml",ini:"ini",tex:"latex",bib:"latex",r:"r",dockerfile:"dockerfile",makefile:"makefile"},Dj=new Set(["js","jsx","ts","tsx","py","rb","go","rs","java","cpp","c","cs","php","swift","kt","sh","bash","zsh","json","jsonl","xml","html","css","scss","sql","yaml","yml","toml","ini","tex","bib","r","txt","md","markdown","log","csv","tsv","cfg","conf","env","gitignore"]),DF=new Set(["png","jpg","jpeg","gif","webp","svg","bmp"]);function DU(e){return e.split("/").filter(Boolean).pop()||e}function DB(e){return e.includes(".")?e.split(".").pop().toLowerCase():""}function D$(e,t,n={}){let r=new URLSearchParams({project:e,path:t});return n.download&&r.set("download","1"),n.version&&r.set("v",String(n.version)),`/api/workspace/file?${r.toString()}`}function Dz({content:e,ext:t}){return(0,ec.jsx)(CC,{language:DP[t]||"text",style:CR,customStyle:{margin:0,borderRadius:"0.5rem",fontSize:"0.875rem"},showLineNumbers:!0,wrapLines:!0,lineProps:{style:{whiteSpace:"pre-wrap"}},children:e})}function DH({children:e}){return(0,ec.jsx)(hp,{className:"h-full rounded-md bg-[var(--color-surface)]",children:(0,ec.jsx)("div",{className:"p-4",children:e})})}function DG({content:e}){let[t,n]=(0,eu.useState)("page");return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col gap-2",children:[(0,ec.jsx)("div",{className:"flex shrink-0 items-center gap-0.5 self-start rounded-md bg-muted p-0.5 text-xs",children:[["page","Preview"],["source","Source"]].map(([e,r])=>(0,ec.jsx)("button",{type:"button",onClick:()=>n(e),"aria-pressed":t===e,className:rO("rounded px-2 py-0.5 font-medium transition-colors max-md:min-h-11 max-md:px-3",t===e?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:r},e))}),(0,ec.jsx)("div",{className:"min-h-0 flex-1",children:"page"===t?(0,ec.jsx)("iframe",{title:"Page preview",sandbox:"allow-scripts allow-popups allow-popups-to-escape-sandbox",srcDoc:e,referrerPolicy:"no-referrer",className:"h-full w-full rounded-md border border-border bg-white"}):(0,ec.jsx)(DH,{children:(0,ec.jsx)(Dz,{content:e,ext:"html"})})})]})}let Dq=eu.default.memo(function({content:e,ext:t}){return e?"html"===t?(0,ec.jsx)(DG,{content:e}):"md"===t||"markdown"===t?(0,ec.jsx)(DH,{children:(0,ec.jsx)("div",{className:"p-4",children:(0,ec.jsx)(Rp,{content:e})})}):(0,ec.jsx)(DH,{children:(0,ec.jsx)(Dz,{content:e,ext:t})}):(0,ec.jsx)(DH,{children:(0,ec.jsx)("div",{className:"flex items-center justify-center p-12",children:(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"File is empty"})})})});function DW(e,t,n){let r=(0,eu.useRef)(t);(0,eu.useEffect)(()=>{e&&r.current!==t&&(r.current=t,n())},[e,t,n])}async function DV(e,t){let n=t.includes("/")?t.slice(0,t.lastIndexOf("/")):"";try{let r=await fetch(`/api/workspace?${new URLSearchParams({project:e,path:n})}`);if(400===r.status)return!1;if(!r.ok)return null;return((await r.json()).entries??[]).some(e=>e.path===t&&"file"===e.type)}catch{return null}}async function DY(e){try{let t=await fetch("/api/memory");if(!t.ok)return null;let n=await t.json();if((n.entries??[]).some(t=>t.path===e))return!0;return!!n.truncated&&null}catch{return null}}async function DK(e){let t=await fetch(`/api/memory?path=${encodeURIComponent(e)}`);if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error||`HTTP ${t.status}`)}let n=await t.json();return"string"==typeof n.content?n.content:""}function DX({tabId:e,path:t,visible:n,refreshTick:r,onClose:a}){let[i,s]=(0,eu.useState)(null),[o,l]=(0,eu.useState)(!1),[c,u]=(0,eu.useState)(null),d=(0,eu.useRef)(0),p=(0,eu.useRef)(!0);(0,eu.useEffect)(()=>(p.current=!0,()=>{p.current=!1}),[]);let m=(0,eu.useCallback)(async()=>{let e=++d.current,n=()=>p.current&&e===d.current;try{let e=await DK(t);if(!n())return;s(e),l(!1),u(null)}catch(r){if(!n())return;let e=await DY(t);if(!n())return;!1===e?l(!0):u(r instanceof Error?r.message:"Failed to read file.")}},[t]);(0,eu.useEffect)(()=>{m()},[m]),DW(n,r,m);let f=DB(DU(t));return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"mb-2 flex shrink-0 items-center justify-between gap-2",children:[(0,ec.jsxs)("p",{className:"min-w-0 truncate font-mono text-xs text-muted-foreground",title:`/memories/${t}`,children:["/memories/",t]}),(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-1 max-md:[&>button]:min-h-11 max-md:[&>button]:min-w-11",children:[(0,ec.jsx)("span",{className:"rounded border border-border px-1.5 py-0.5 text-[11px] text-muted-foreground",children:"Read-only"}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>void m(),"aria-label":"Reload file",title:"Reload file",children:(0,ec.jsx)(LU,{size:16,"aria-hidden":"true"})})]})]}),c&&null!==i&&(0,ec.jsx)("p",{role:"alert",className:"mb-2 text-sm text-destructive",children:c}),(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:o?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12 text-center",children:[(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"This file no longer exists."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",onClick:()=>a(e),children:"Close tab"})]}):null===i?(0,ec.jsx)("div",{className:"flex h-full items-center justify-center",children:c?(0,ec.jsx)("p",{className:"text-sm text-destructive",children:c}):(0,ec.jsx)(sp,{className:"size-5 animate-spin text-muted-foreground","aria-hidden":"true"})}):(0,ec.jsx)(Dq,{content:i,ext:f})})]})}let DZ=n0("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),DQ=n0("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);function DJ({tabId:e,path:t,chat:n,drafts:r,onDirtyChange:a,onClose:i}){let s=n&&Object.prototype.hasOwnProperty.call(n.files,t)?function(e){if("object"==typeof e&&null!==e&&"content"in e){let t=e.content;return Array.isArray(t)?t.join("\n"):String(t??"")}return String(e??"")}(n.files[t]):null,[o,l]=(0,eu.useState)(null),c=o&&o.over===s?o.text:s,[u,d]=(0,eu.useState)(()=>void 0!==r.get(e)),[p,m]=(0,eu.useState)(()=>r.get(e)?.text??""),[f,h]=(0,eu.useState)(!1),g=u&&null!==c&&p!==c;(0,eu.useEffect)(()=>{a(e,g)},[e,g,a]);let b=t=>{m(t),r.set(e,{text:t,base:c??""})},y=()=>{d(!1),r.set(e,void 0)},E=async()=>{if(n){h(!0);try{await n.setFiles({...n.files,[t]:p}),l({over:s,text:p}),y()}catch(e){e6.c.error(`Failed to save file: ${e}`)}finally{h(!1)}}},x=DU(t),v=(0,eu.useCallback)(()=>{if(null===c)return;let e=URL.createObjectURL(new Blob([c],{type:"text/plain"})),t=document.createElement("a");t.href=e,t.download=x,document.body.appendChild(t),t.click(),document.body.removeChild(t),URL.revokeObjectURL(e)},[c,x]);return n?null===c?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12 text-center",children:[(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"This file is no longer in the conversation."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",onClick:()=>i(e),children:"Close tab"})]}):(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"mb-2 flex shrink-0 items-center justify-between gap-2",children:[(0,ec.jsx)("p",{className:"min-w-0 truncate font-mono text-xs text-muted-foreground",title:t,children:t}),(0,ec.jsx)("div",{className:"flex shrink-0 items-center gap-1 max-md:[&>button]:min-h-11 max-md:[&>button]:min-w-11",children:u?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:y,disabled:f,children:[(0,ec.jsx)(DZ,{size:16,className:"mr-1","aria-hidden":"true"}),"Cancel"]}),(0,ec.jsxs)(rQ,{size:"sm",className:"h-8 bg-[var(--brand-solid)] px-3 text-[var(--brand-foreground)] hover:opacity-90",onClick:E,disabled:f||!g,children:[f?(0,ec.jsx)(sp,{size:16,className:"mr-1 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(DQ,{size:16,className:"mr-1","aria-hidden":"true"}),"Save"]})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>{b(c),d(!0)},disabled:n.editDisabled,"aria-label":"Edit file",children:[(0,ec.jsx)(fM,{size:16,className:"mr-1","aria-hidden":"true"}),"Edit"]}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>void CL(c),"aria-label":"Copy file",children:(0,ec.jsx)(CO,{size:16,"aria-hidden":"true"})}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:v,"aria-label":"Download file",children:(0,ec.jsx)(fC,{size:16,"aria-hidden":"true"})})]})})]}),(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:u?(0,ec.jsx)("textarea",{value:p,onChange:e=>b(e.target.value),spellCheck:!1,"aria-label":"File content",className:"h-full w-full resize-none rounded-md border border-border bg-background p-4 font-mono text-sm leading-relaxed text-foreground outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring"}):(0,ec.jsx)(Dq,{content:c,ext:DB(x)})})]}):(0,ec.jsx)("div",{className:"flex h-full items-center justify-center p-12 text-center",children:(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"Open the conversation this file belongs to."})})}class D0 extends Error{}async function D1(e,t){let n=new AbortController,r=await fetch(D$(e,t),{signal:n.signal});if(!r.ok){let e=await r.json().catch(()=>null);throw Error(e?.error||`Failed to load file (${r.status})`)}if(Number(r.headers.get("content-length"))>2097152)throw n.abort(),new D0;return r.text()}function D2({project:e,...t}){let{project:n,notice:r,here:a}=Og(),i=a?e??n:null;return i?(0,ec.jsx)(D3,{...t,project:i}):(0,ec.jsx)(DI,{message:r??""})}function D3({project:e,tabId:t,path:n,size:r,visible:a,refreshTick:i,drafts:s,onDirtyChange:o,onClose:l,onTreeChanged:c}){let u=DU(n),d=DB(u),p=DF.has(d)?"image":"pdf"===d?"pdf":Dj.has(d)?"text":"binary",m="text"===p&&null!=r&&r>2097152,[f,h]=(0,eu.useState)(()=>s.get(t)?.base??null),[g,b]=(0,eu.useState)(m?{state:"too-large"}:"text"===p?{state:"loading"}:{state:"ready"}),[y,E]=(0,eu.useState)(null),[x,v]=(0,eu.useState)(null),[k,S]=(0,eu.useState)(()=>void 0!==s.get(t)),[T,w]=(0,eu.useState)(()=>s.get(t)?.text??""),[_,A]=(0,eu.useState)(!1),[N,I]=(0,eu.useState)(!1),[C,R]=(0,eu.useState)(!1),[O,L]=(0,eu.useState)(!1),[D,M]=(0,eu.useState)(null),[P,j]=(0,eu.useState)(0),F=(0,eu.useRef)(!0);(0,eu.useEffect)(()=>(F.current=!0,()=>{F.current=!1}),[]);let U=k&&null!==f&&T!==f;(0,eu.useEffect)(()=>{o(t,U)},[t,U,o]),(0,eu.useEffect)(()=>{k&&null!==f&&s.set(t,{text:T,base:f})},[k,f,T,s,t]);let B=(0,eu.useRef)({content:f,editing:k,draft:T,saving:_,body:g,version:P});(0,eu.useEffect)(()=>{B.current={content:f,editing:k,draft:T,saving:_,body:g,version:P}});let $=(0,eu.useRef)(0),z=(0,eu.useCallback)(async t=>{if("text"!==p){("manual"===t||"auto"===t&&"image"===p)&&(j(e=>e+1),b({state:"ready"}));return}if(m||"too-large"===B.current.body.state||"auto"===t&&B.current.saving)return;let r=++$.current,a=()=>F.current&&r===$.current;try{let t=await D1(e,n);if(!a())return;E(null),b({state:"ready"});let{content:r,editing:i,draft:s}=B.current;if(null===r)return void h(t);if(t===r)return void v(null);if(i&&s!==r)return void v(t);h(t),v(null),i&&w(t)}catch(l){if(!a())return;if(l instanceof D0)return void b({state:"too-large"});let t=l instanceof Error?l.message:"Failed to load file.",r=await DV(e,n);if(!a())return;let{content:i,editing:s,draft:o}=B.current;!1!==r||s&&null!==i&&o!==i?!1===r?E("This file no longer exists on disk."):null===i?b({state:"error",message:t}):E(t):b({state:"missing"})}},[p,m,n,e]);(0,eu.useEffect)(()=>{z("initial")},[z]),DW(a,i,(0,eu.useCallback)(()=>void z("auto"),[z]));let H=async()=>{let t=await DV(e,n);F.current&&B.current.version===P&&b(!1===t?{state:"missing"}:{state:"error",message:"Failed to load image."})},G=()=>{S(!1),v(null),s.set(t,void 0)},q=async()=>{$.current+=1,A(!0),M(null);try{let r=await fetch(D$(e,n),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:T})}),a=await r.json().catch(()=>null);if(!r.ok)throw Error(a?.error||"Failed to save.");if(s.set(t,void 0),c(),!F.current)return;h(T),G()}catch(e){F.current&&M(e instanceof Error?e.message:"Failed to save.")}finally{F.current&&A(!1)}},W=async()=>{I(!0),M(null);try{let r=await fetch(D$(e,n),{method:"DELETE"});if(!r.ok){let e=await r.json().catch(()=>null);throw Error(e?.error||"Failed to delete.")}s.set(t,void 0),c(),l(t)}catch(e){F.current&&(R(!1),M(e instanceof Error?e.message:"Failed to delete."))}finally{F.current&&I(!1)}},V=t=>(0,ec.jsxs)("a",{href:D$(e,n,{download:!0}),download:u,children:[(0,ec.jsx)(fC,{size:16,className:"mr-1","aria-hidden":"true"}),t]});return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"mb-2 flex shrink-0 flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,ec.jsx)("p",{className:"min-w-0 truncate font-mono text-xs text-muted-foreground",title:n,children:n}),(0,ec.jsx)("div",{className:"flex shrink-0 flex-wrap items-center justify-end gap-1 max-md:[&>a]:min-h-11 max-md:[&>button]:min-h-11 max-md:[&>button]:min-w-11",children:k?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>U?L(!0):G(),disabled:_,children:[(0,ec.jsx)(DZ,{size:16,className:"mr-1","aria-hidden":"true"}),"Cancel"]}),(0,ec.jsxs)(rQ,{size:"sm",className:"h-8 bg-[var(--brand-solid)] px-3 text-[var(--brand-foreground)] hover:opacity-90",onClick:q,disabled:_||!U,children:[_?(0,ec.jsx)(sp,{size:16,className:"mr-1 animate-spin","aria-hidden":"true"}):(0,ec.jsx)(DQ,{size:16,className:"mr-1","aria-hidden":"true"}),_?"Saving…":"Save"]})]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>void z("manual"),"aria-label":"Reload file",title:"Reload file",children:(0,ec.jsx)(LU,{size:16,"aria-hidden":"true"})}),"text"===p&&"ready"===g.state&&null!==f&&(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",onClick:()=>{w(f??""),M(null),S(!0)},"aria-label":"Edit file",children:[(0,ec.jsx)(fM,{size:16,className:"mr-1","aria-hidden":"true"}),"Edit"]}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2",asChild:!0,children:V("Download")}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-8 px-2 text-muted-foreground hover:text-destructive",onClick:()=>R(!0),disabled:N,"aria-label":"Delete file",title:"Delete file",children:N?(0,ec.jsx)(sp,{size:16,className:"animate-spin","aria-hidden":"true"}):(0,ec.jsx)(fz,{size:16,"aria-hidden":"true"})})]})})]}),null!==x&&(0,ec.jsxs)("div",{role:"status",className:"mb-2 flex flex-wrap items-center gap-2 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm",children:[(0,ec.jsx)("span",{children:"The file changed on disk."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"h-7 max-md:min-h-11",onClick:()=>{h(x),G()},children:"Reload"}),(0,ec.jsx)(rQ,{variant:"ghost",size:"sm",className:"h-7 max-md:min-h-11",onClick:()=>{h(x),v(null)},children:"Keep my edits"})]}),y&&(0,ec.jsxs)("div",{role:"alert",className:"mb-2 flex items-center gap-2 text-sm text-destructive",children:[(0,ec.jsx)("span",{children:y}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"h-7 max-md:min-h-11",onClick:()=>void z("manual"),children:"Retry"})]}),D&&(0,ec.jsx)("p",{role:"alert",className:"mb-2 text-sm text-destructive",children:D}),(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:k?(0,ec.jsx)("textarea",{value:T,onChange:e=>w(e.target.value),spellCheck:!1,"aria-label":"File content",className:"h-full w-full resize-none rounded-md border border-border bg-background p-4 font-mono text-sm leading-relaxed text-foreground outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",placeholder:"File is empty…"}):"missing"===g.state?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12 text-center",children:[(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"This file no longer exists."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",onClick:()=>l(t),children:"Close tab"})]}):"error"===g.state?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12",children:[(0,ec.jsx)("p",{className:"text-sm text-destructive",children:g.message}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",onClick:()=>void z("manual"),children:"Retry"})]}):"image"===p?(0,ec.jsx)(hp,{className:"h-full rounded-md bg-[var(--color-surface)]",children:(0,ec.jsx)("div",{className:"flex items-center justify-center p-4",children:(0,ec.jsx)("img",{src:D$(e,n,{version:P}),alt:u,onError:()=>void H(),className:"max-h-full max-w-full object-contain"})})}):"pdf"===p?(0,ec.jsx)("iframe",{src:D$(e,n,{version:P}),title:u,className:"h-full w-full rounded-md border border-border"}):"binary"===p||"too-large"===g.state?(0,ec.jsxs)("div",{className:"flex h-full flex-col items-center justify-center gap-3 p-12 text-center",children:[(0,ec.jsx)("p",{className:"text-sm text-muted-foreground",children:"too-large"===g.state?"This file is too large to preview inline.":"This file type can't be previewed."}),(0,ec.jsx)(rQ,{variant:"outline",size:"sm",className:"max-md:min-h-11",asChild:!0,children:V("Download file")})]}):"loading"===g.state?(0,ec.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,ec.jsx)(sp,{className:"size-5 animate-spin text-muted-foreground","aria-hidden":"true"})}):(0,ec.jsx)(Dq,{content:f??"",ext:d})}),(0,ec.jsx)(rL,{open:O,onOpenChange:L,children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Discard unsaved changes?"}),(0,ec.jsxs)(rB,{children:["Your edits to “",u,"” have not been saved."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>L(!1),children:"Keep Editing"}),(0,ec.jsx)(rQ,{onClick:()=>{L(!1),G()},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Discard"})]})]})}),(0,ec.jsx)(rL,{open:C,onOpenChange:e=>{N||R(e)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Delete file?"}),(0,ec.jsxs)(rB,{children:["“",u,"” will be permanently removed from the workspace. This can't be undone."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>R(!1),disabled:N,children:"Cancel"}),(0,ec.jsx)(rQ,{onClick:W,disabled:N,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:N?"Deleting…":"Delete"})]})]})})]})}let D4={workspace:Ll,memory:Rb,state:bO};function D5(){let e=Lu(),[t,n]=(0,eu.useState)(null),r=(0,eu.useId)(),a=(0,eu.useRef)(new Map),i=(0,eu.useRef)(null);if(!e)return null;let{state:s,activate:o,close:l,requestFocus:c,showTree:u,setDirty:d,refreshTick:p,bumpTreeRevision:m,drafts:f,chat:h}=e,g=(e,t)=>{if(!e.dirty){l(e.id),t&&c();return}i.current=document.activeElement,n(e)},b=e=>`${r}-tab-${encodeURIComponent(e)}`,y=e=>`${r}-panel-${encodeURIComponent(e)}`,E=s.tabs.some(e=>e.id===s.activeId)?s.activeId:s.tabs[0]?.id??null;return(0,ec.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-1 border-b border-border px-2 py-1.5",children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"sm",className:"h-7 shrink-0 px-2 max-md:min-h-11",onClick:u,"aria-label":"Back to files",children:[(0,ec.jsx)(L6,{className:"mr-1 size-4","aria-hidden":"true"}),"Files"]}),(0,ec.jsx)("div",{role:"tablist","aria-label":"Open files",className:"scrollbar-pretty flex min-w-0 flex-1 items-center gap-1 overflow-x-auto",children:s.tabs.map((e,t)=>{let n=D4[e.source],r=e.id===s.activeId,i=DU(e.path);return(0,ec.jsxs)("div",{role:"presentation",className:rO("flex max-w-[12rem] shrink-0 items-center rounded-md border text-xs",r?"border-[var(--brand)] bg-background text-foreground":"border-border bg-muted text-muted-foreground hover:text-foreground"),children:[(0,ec.jsxs)("button",{ref:t=>{t?a.current.set(e.id,t):a.current.delete(e.id)},type:"button",role:"tab",id:b(e.id),"aria-selected":r,"aria-controls":y(e.id),tabIndex:e.id===E?0:-1,title:e.path,onClick:()=>o(e.id),onKeyDown:e=>((e,t)=>{let n=s.tabs,r=e=>{let t=n[(e+n.length)%n.length];o(t.id),a.current.get(t.id)?.focus()};switch(e.key){case"ArrowRight":r(t+1);break;case"ArrowLeft":r(t-1);break;case"Home":r(0);break;case"End":r(n.length-1);break;case"Delete":case"Backspace":g(n[t],!0);break;default:return}e.preventDefault()})(e,t),className:"flex min-w-0 items-center gap-1 py-1 pl-2 pr-1 max-md:min-h-11",children:[(0,ec.jsx)(n,{className:"size-3.5 shrink-0","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"truncate",children:i}),e.dirty&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("span",{className:"size-1.5 shrink-0 rounded-full bg-[var(--brand)]","aria-hidden":"true"}),(0,ec.jsx)("span",{className:"sr-only",children:", unsaved changes"})]})]}),(0,ec.jsx)("button",{type:"button","aria-label":`Close ${i}`,tabIndex:r?0:-1,onClick:t=>g(e,t.currentTarget===document.activeElement),className:"rounded p-1 hover:bg-accent max-md:min-h-11 max-md:min-w-11",children:(0,ec.jsx)(n1,{className:"size-3","aria-hidden":"true"})})]},e.id)})})]}),(0,ec.jsx)("div",{className:"min-h-0 flex-1",children:s.tabs.map(e=>{let t=e.id===s.activeId,n=t&&"preview"===s.mode;return(0,ec.jsx)("div",{id:y(e.id),role:"tabpanel","aria-labelledby":b(e.id),hidden:!t,className:"h-full p-3",children:"workspace"===e.source?(0,ec.jsx)(D2,{tabId:e.id,project:e.project,path:e.path,size:e.size,visible:n,refreshTick:p,drafts:f,onDirtyChange:d,onClose:l,onTreeChanged:m}):"memory"===e.source?(0,ec.jsx)(DX,{tabId:e.id,path:e.path,visible:n,refreshTick:p,onClose:l}):(0,ec.jsx)(DJ,{tabId:e.id,path:e.path,chat:h,drafts:f,onDirtyChange:d,onClose:l})},e.id)})}),(0,ec.jsx)(rL,{open:null!==t,onOpenChange:e=>{e||n(null)},children:(0,ec.jsxs)(rP,{className:"sm:max-w-md",onCloseAutoFocus:e=>{e.preventDefault();let t=i.current;i.current=null,t?.isConnected&&t!==document.body?t.focus():c()},children:[(0,ec.jsxs)(rj,{children:[(0,ec.jsx)(rU,{children:"Discard unsaved changes?"}),(0,ec.jsxs)(rB,{children:["Your edits to “",t?DU(t.path):"","” have not been saved."]})]}),(0,ec.jsxs)(rF,{children:[(0,ec.jsx)(rQ,{variant:"outline",onClick:()=>n(null),children:"Keep Editing"}),(0,ec.jsx)(rQ,{onClick:()=>{t&&l(t.id),n(null)},className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Discard"})]})]})})]})}function D6({onClose:e,onReportToMainChat:t}){let{deploymentUrl:n,apiKey:r}=iq(),[a,i]=ew("inspectorTab"),s="agents"===a?"agents":"workspace",o=Lu(),l="workspace"===s&&o?.state.mode==="preview"&&null!==o.state.activeId,c=(0,eu.useRef)(null),u=(0,eu.useRef)(null),d=(0,eu.useRef)(null),p=o?.state.activeId??null,m=o?.focusRequest??0,f=o?.takeFocusRequest;return(0,eu.useEffect)(()=>{if("workspace"!==s)return;let e=f?.()??!1,t=d.current,n=l?c.current:u.current,r=null!==t&&(document.activeElement===t||document.activeElement===document.body)&&(!t.isConnected||!!n?.contains(t));if(!e&&!r)return;let a=l?u.current?.querySelector('[role="tab"][aria-selected="true"]'):c.current?.querySelector("button, a[href]");a&&(a.focus(),document.activeElement===a&&(d.current=a))},[s,l,p,m,f]),(0,ec.jsxs)("div",{className:"flex h-full flex-col border-l border-border bg-sidebar","data-file-pane":l?"preview":"tree",onFocus:e=>{d.current=e.target},children:[(0,ec.jsxs)("div",{className:"flex h-11 shrink-0 items-center justify-between gap-2 border-b border-border px-2",children:[(0,ec.jsxs)("div",{role:"tablist","aria-label":"Inspector",className:"flex items-center gap-1",children:[(0,ec.jsxs)("button",{type:"button",role:"tab","aria-selected":"workspace"===s,onClick:()=>i(null),className:rO("flex items-center gap-1.5 rounded-md px-2 py-1 text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","workspace"===s?"bg-accent text-foreground":"text-muted-foreground hover:text-foreground"),children:[(0,ec.jsx)(bw,{className:"size-4 text-[var(--brand)]","aria-hidden":"true"}),"Workspace"]}),(0,ec.jsxs)("button",{type:"button",role:"tab","aria-selected":"agents"===s,onClick:()=>i("agents"),className:rO("flex items-center gap-1.5 rounded-md px-2 py-1 text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","agents"===s?"bg-accent text-foreground":"text-muted-foreground hover:text-foreground"),children:[(0,ec.jsx)(bO,{className:"size-4 text-[var(--brand)]","aria-hidden":"true"}),"Agents"]})]}),(0,ec.jsx)(rQ,{variant:"ghost",size:"icon",className:"size-7",onClick:e,"aria-label":"Close inspector",title:"Close",children:(0,ec.jsx)(n1,{className:"size-4","aria-hidden":"true"})})]}),"agents"===s&&(0,ec.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden p-3",children:(0,ec.jsx)(DM,{onReportToMainChat:t},`${n}
|
|
22
22
|
${r}`)}),(0,ec.jsx)("div",{ref:c,className:rO("min-h-0 flex-1 overflow-y-auto p-3",("workspace"!==s||l)&&"hidden"),children:(0,ec.jsx)(DN,{})}),o&&o.state.tabs.length>0&&(0,ec.jsx)("div",{ref:u,className:rO("min-h-0 flex-1 overflow-hidden",!l&&"hidden"),children:(0,ec.jsx)(D5,{})})]})}let D9={tabs:[],activeId:null,mode:"tree",clock:0},D8=["workspace","memory","state"],D7=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function Me(e,t){let n=e.clock+1;return{...e,clock:n,activeId:t,tabs:e.tabs.map(e=>e.id===t?{...e,lastActive:n}:e)}}function Mt(e,t,n){return n?Me({...e,tabs:t},n.id):{...e,tabs:t,activeId:null,mode:"tree"}}function Mn(e,t){switch(t.type){case"open":{var n;let r=(n=t.ref).project?`${n.source}@${n.project}:${n.path}`:`${n.source}:${n.path}`,a=e.tabs.find(e=>e.id===r),i=e;if(a)void 0!==t.ref.size&&t.ref.size!==a.size&&(i={...e,tabs:e.tabs.map(e=>e.id===r?{...e,size:t.ref.size}:e)});else{let n={source:t.ref.source,path:t.ref.path,size:t.ref.size,...t.ref.project?{project:t.ref.project}:{},id:r,lastActive:0,dirty:!1};i={...e,tabs:[...e.tabs,n]}}return function(e){let t=e.tabs;for(;t.length>8;){let n=t.filter(t=>!t.dirty&&t.id!==e.activeId);if(0===n.length)break;let r=n.reduce((e,t)=>t.lastActive<e.lastActive?t:e);t=t.filter(e=>e.id!==r.id)}return t===e.tabs?e:{...e,tabs:t}}({...Me(i,r),mode:"preview"})}case"activate":return e.tabs.some(e=>e.id===t.id)?{...Me(e,t.id),mode:"preview"}:e;case"close":{let n=e.tabs.findIndex(e=>e.id===t.id);if(-1===n)return e;let r=e.tabs.filter(e=>e.id!==t.id);if(e.activeId!==t.id)return{...e,tabs:r};return Mt(e,r,r[n]??r[n-1])}case"closeSource":{let n=e.tabs.filter(e=>e.source!==t.source);if(n.length===e.tabs.length)return e;if(n.some(t=>t.id===e.activeId))return{...e,tabs:n};let r=n.length?n.reduce((e,t)=>t.lastActive>e.lastActive?t:e):void 0;return Mt(e,n,r)}case"showTree":return"tree"===e.mode?e:{...e,mode:"tree"};case"showPreview":return e.activeId&&"preview"!==e.mode?{...e,mode:"preview"}:e;case"setDirty":{let n=e.tabs.find(e=>e.id===t.id);if(!n||n.dirty===t.dirty)return e;return{...e,tabs:e.tabs.map(e=>e.id===t.id?{...e,dirty:t.dirty}:e)}}}}function Mr(e){if(!e?.isConnected)return!1;let t=e.getBoundingClientRect(),n=document.elementFromPoint(t.left+t.width/2,t.top+t.height/2);return null!==n&&e.contains(n)}function Ma({children:e,onReveal:t,inspectorOpen:n=!0,inspectorToggleRef:r,returnFocusOnClose:a=!0}){let[i,s]=(0,eu.useReducer)(Mn,D9),[o,l]=ew("file"),[c,u]=(0,eu.useState)(0),[d,p]=(0,eu.useState)(0),[m,f]=(0,eu.useState)(null),h=(0,eu.useRef)(m);h.current=m;let g=(0,eu.useRef)(t);(0,eu.useEffect)(()=>{g.current=t},[t]);let[b,y]=(0,eu.useState)(0),E=(0,eu.useRef)(!1),x=(0,eu.useCallback)(()=>{E.current=!0,y(e=>e+1)},[]),v=(0,eu.useCallback)((e,t)=>{s({type:"open",ref:e}),t&&x(),g.current?.()},[x]),k=(0,eu.useCallback)(e=>v(e,!0),[v]),S=(0,eu.useRef)(null),T=(0,eu.useRef)(n);(0,eu.useEffect)(()=>{let e=T.current;if(T.current=n,!e||n)return;let t=S.current;S.current=null;let i=document.activeElement;if(!a||i&&i!==document.body)return;let s=r?.current,o=Mr(t)?t:Mr(s)?s:null;o?.focus({preventScroll:!0})},[n,r,a]);let w=(0,eu.useCallback)(()=>{let e=E.current;return E.current=!1,e},[]);(0,eu.useEffect)(()=>{let e=e=>{let t=e.detail;if(!t)return;if(t.opener&&!t.opener.closest("[data-file-pane]")&&(S.current=t.opener),"memory"===t.kind)return void k({source:"memory",path:t.path});let n=h.current?.project;if(null===n)return void e6.c.error("This conversation's project files can't be shown here.");let r=t.opener?.closest("[data-chat-transcript]")&&!t.display.trim().startsWith("/skills/")?h.current?.runFolder:null;k({source:"workspace",path:r?`${r}/${t.path}`:t.path,project:n})};return window.addEventListener(CW,e),()=>window.removeEventListener(CW,e)},[k]);let _=(0,eu.useRef)(null);(0,eu.useEffect)(()=>{if(o===_.current)return;if(null===o)return void s({type:"showTree"});let e=function(e){if(!e)return null;let t=e.indexOf(":");if(t<=0)return null;let[n,r,...a]=e.slice(0,t).split("@"),i=e.slice(t+1);return!D8.includes(n)||!i.trim()||a.length>0||void 0!==r&&("workspace"!==n||!D7.test(r))||/[\u0000-\u001f\u007f]/.test(i)?null:r?{source:n,path:i,project:r}:{source:n,path:i}}(o);if(!e){_.current=null,l(null);return}v(e,!1)},[o,v,l]);let A=n&&"preview"===i.mode?i.activeId:null,N=(0,eu.useRef)(void 0);(0,eu.useEffect)(()=>{if(void 0===N.current){N.current=A;return}N.current!==A&&(N.current=A,_.current=A,l(A))},[A,l]);let I=(0,eu.useRef)(new Map),C=(0,eu.useMemo)(()=>({get:e=>I.current.get(e),set:(e,t)=>{void 0===t?I.current.delete(e):I.current.set(e,t)}}),[]);(0,eu.useEffect)(()=>{let e=new Set(i.tabs.map(e=>e.id));for(let t of I.current.keys())e.has(t)||I.current.delete(t)},[i.tabs]);let R=(0,eu.useRef)(void 0),O=(0,eu.useCallback)(e=>{if(f(t=>!function(e,t){if(e===t)return!0;if(!e||!t||e.threadId!==t.threadId||e.setFiles!==t.setFiles||e.editDisabled!==t.editDisabled||e.project!==t.project||e.runFolder!==t.runFolder)return!1;let n=Object.keys(e.files);return n.length===Object.keys(t.files).length&&n.every(n=>e.files[n]===t.files[n])}(t,e)?e:t),!e)return;let t=R.current;null!=t&&t!==e.threadId&&s({type:"closeSource",source:"state"}),R.current=e.threadId},[]),L=(0,eu.useCallback)(()=>u(e=>e+1),[]),D=(0,eu.useCallback)(()=>p(e=>e+1),[]),M=(0,eu.useCallback)(e=>s({type:"activate",id:e}),[]),P=(0,eu.useCallback)(e=>{I.current.delete(e),s({type:"close",id:e})},[]),j=(0,eu.useCallback)(()=>s({type:"showTree"}),[]),F=(0,eu.useCallback)(()=>s({type:"showPreview"}),[]),U=(0,eu.useCallback)((e,t)=>s({type:"setDirty",id:e,dirty:t}),[]),B=(0,eu.useMemo)(()=>({state:i,activeTab:i.tabs.find(e=>e.id===i.activeId)??null,open:k,focusRequest:b,takeFocusRequest:w,requestFocus:x,activate:M,close:P,showTree:j,showPreview:F,setDirty:U,refreshTick:c,notifyFilesMayHaveChanged:L,treeRevision:d,bumpTreeRevision:D,drafts:C,chat:m,registerChat:O}),[i,k,b,w,x,M,P,j,F,U,c,L,d,D,C,m,O]);return(0,ec.jsx)(Lc.Provider,{value:B,children:e})}let Mi="evoscientist-file-pane-widths",Ms={tree:26,preview:45},Mo=e=>"number"==typeof e&&Number.isFinite(e)&&e>=20&&e<=80;function Ml(){try{let e=JSON.parse(window.localStorage.getItem(Mi)??"{}");return{tree:Mo(e.tree)?e.tree:Ms.tree,preview:Mo(e.preview)?e.preview:Ms.preview}}catch{return{...Ms}}}function Mc(e){let t=Lu();return e&&t?.state.mode==="preview"&&t.state.activeId?"preview":"tree"}function Mu({panelRef:e,sidebarRef:t,sidebarOpen:n,workspaceTab:r,inspectorOpen:a}){let i=Mc(r);return(0,eu.useEffect)(()=>{if(!a||!e.current)return;let n=0,r=()=>{cancelAnimationFrame(n);let r=e.current;if(!r)return;let a=function(e,t,n,r=360){return t<=0?e:Math.max(20,Math.min(e,Math.floor(100-n-r/t*100)))}(Ml()[i],window.innerWidth,t.current?.getSize()??0);r.resize(a);let s=0,o=()=>{let t=e.current;t&&Math.abs(t.getSize()-a)>.5&&++s<10&&(t.resize(a),n=requestAnimationFrame(o))};n=requestAnimationFrame(o)};r();let s=()=>{cancelAnimationFrame(n),n=requestAnimationFrame(r)};return window.addEventListener("resize",s),()=>{window.removeEventListener("resize",s),cancelAnimationFrame(n)}},[i,a,n,e,t]),null}let Md=new Set(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"]);function Mp({panelRef:e,workspaceTab:t}){let n=Mc(t),r=()=>{let t=e.current?.getSize();null!=t&&function(e,t){if(Mo(t))try{window.localStorage.setItem(Mi,JSON.stringify({...Ml(),[e]:t}))}catch{}}(n,t)};return(0,ec.jsx)(f_,{onDragging:e=>{e||r()},onKeyUp:e=>{Md.has(e.key)&&r()}})}function Mm({config:e,handleSaveConfig:t}){let{deploymentUrl:n,apiKey:r}=iq(),a=`${n}
|
|
23
23
|
${r}`;(0,eu.useEffect)(()=>{let e=()=>{"visible"===document.visibilityState&&(lT(n),bb())};return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[n]);let{registry:i}=lw(),[s,o]=ew("threadId"),[l,c]=ew("sidebar"),[u,d]=ew("view"),[p,m]=ew("memoryTab"),[f,h]=ew("memoryObs"),[g,b]=ew("memoryExec"),[y,E]=ew("inspector"),[x,v]=ew("inspectorTab"),k="settings"===u||"setup"===u,S=(0,eu.useRef)(!1),T=(0,eu.useCallback)(n=>{var r;r=e.deploymentUrl,r6(n)!==r6(r)&&(S.current=!0,t({...e,deploymentUrl:n}),d("settings"))},[e,t,d]);(0,eu.useEffect)(()=>{S.current&&(S.current=!1,document.getElementById("settings-deployment-url")?.focus())},[n]),function(e,t){let{deploymentUrl:n}=iq(),{payload:r}=os(),{access:a}=oo(),i=r?.setup_needed===!0&&!r.config_error&&a?.writable===!0,s=r?.setup_needed===!0,o=(0,eu.useRef)(e),l=(0,eu.useRef)(e),[c]=(0,eu.useState)(()=>{var e;let t,n,r;return e={record:p8,viewNow:()=>l.current,urlViewNow:()=>new URLSearchParams(window.location.search).get("view")},t=null,n=n=>{if(!t)return;clearTimeout(t.timer);let{url:r}=t;t=null,n&&e.record(r)},r=(n,a)=>{t={url:n,timer:setTimeout(()=>{if(t=null,!md.has(e.viewNow())){if(!md.has(e.urlViewNow()))return void e.record(n);a+1<10&&r(n,a+1)}},150)}},{leave(e){n(!0),r(e,0)},back(e){t&&n(t.url!==e)},flush(){n(!md.has(e.viewNow())&&!md.has(e.urlViewNow()))}}});(0,eu.useEffect)(()=>{l.current=e,md.has(e)?c.back(n):md.has(o.current)&&s&&c.leave(n),o.current=e},[e,s,n,c]),(0,eu.useEffect)(()=>{let e=()=>c.flush();return window.addEventListener("pagehide",e),()=>{window.removeEventListener("pagehide",e),e()}},[c]);let u=(0,eu.useRef)(null);(0,eu.useEffect)(()=>{md.has(e)&&(u.current=n),null!==e||!r||void 0===a||u.current===n||(u.current=n,!i||p9(n)||t("setup"))},[i,r,a,e,n,t])}(u,d);let[w,_]=(0,eu.useState)(null),[A,N]=(0,eu.useState)(0),[I,C]=(0,eu.useState)(null),[R,O]=(0,eu.useState)(0),[L,D]=(0,eu.useState)(null),{projects:M,refresh:P,refreshing:j,selectProject:F}=sd();(0,eu.useEffect)(()=>{let e=window.matchMedia("(min-width: 768px)"),t=()=>C(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]),(0,eu.useEffect)(()=>{!1===I&&l&&y&&E(null)},[y,I,E,l]);let U=(0,eu.useCallback)(()=>c(null),[c]),B=(0,eu.useCallback)(()=>{E(null),v(null)},[E,v]),$=(0,eu.useCallback)(()=>{l?c(null):(!1===I&&B(),c("1"))},[B,I,c,l]),z=(0,eu.useCallback)(()=>{y?B():(!1===I&&c(null),v(null),E("1"))},[B,y,I,E,v,c]),H=(0,eu.useRef)(null),G=(0,eu.useCallback)(()=>{"settings"===u?d(null):(!1===I&&(c(null),B()),d("settings"))},[B,I,c,d,u]),q=(0,eu.useCallback)(()=>{d(null),H.current?.focus()},[d]),W=(0,eu.useCallback)(()=>{v("agents"),!1===I&&c(null),E("1")},[I,E,c,v]),V=(0,eu.useCallback)(()=>{!1===I&&c(null),v(null),E("1")},[I,E,v,c]),Y=(0,eu.useRef)(null),K=(0,eu.useRef)(null),X=(0,eu.useRef)(null),Z=u?l?"Hide navigation":"Show navigation":l?"Hide research":"Show research",[Q,J]=(0,eu.useState)(null),ee=(0,eu.useRef)(null),et=(0,eu.useRef)(s);(0,eu.useEffect)(()=>{et.current=s},[s]);let en=(0,eu.useCallback)(e=>{let t="string"==typeof e?i5(M,e):null;t&&!t.missing&&F(t.key,{remember:!0}),h6(null,!1),et.current=null,o(null),d(null),J(null),O(e=>e+1)},[o,d,F,M]),er=(0,eu.useCallback)(({threadId:e,unsentMessage:t})=>{if(e!==et.current)return!1;let n=ee.current?.(t),r=n?n.text:t?.trim()??"",a=n?.files??[];return en(),J(r||a.length>0?{text:r,files:a}:null),{unsentBack:n?n.unsentBack:!!t}},[en]),ea=(0,eu.useCallback)(e=>{if("memory"===e.view)m(e.tab),h(e.obsId??null),b(e.execId??null),d("memory");else if("schedule"===e.view)d("schedule");else if("experts"===e.view)d("experts");else if("skills"===e.view)d("skills");else if("setup"===e.view)d("setup");else if("settings"===e.view)d("settings");else{if(y&&"agents"!==x)return void B();!1===I&&c(null),v(null),E("1")}},[B,y,x,I,E,v,b,h,m,c,d]),ei=(0,eu.useCallback)(async e=>{h6(null,!1),d(null),J(null),et.current=e,s!==e&&O(e=>e+1),await o(e)},[o,d,s]);return(0,ec.jsx)(o6,{children:(0,ec.jsxs)("div",{className:"app-shell flex flex-col",children:[(0,ec.jsxs)("header",{className:"mobile-app-header flex h-14 shrink-0 items-center justify-between gap-1 border-b border-border px-2 sm:gap-2 sm:px-4",children:[(0,ec.jsxs)("div",{className:"flex min-w-0 items-center gap-2 sm:gap-3",children:[(0,ec.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,ec.jsx)(ed.Image,{src:"/evoscientist-logo.png",alt:"EvoScientist",width:28,height:28,className:"size-6 shrink-0",priority:!0}),l&&(0,ec.jsx)("h1",{className:"hidden truncate text-base font-semibold sm:block sm:text-lg",children:"EvoScientist"})]}),(0,ec.jsxs)("div",{className:"flex items-center gap-0.5",children:[(0,ec.jsxs)(rQ,{variant:"ghost",size:"icon",onClick:$,"aria-label":Z,className:"relative size-8",children:[l?(0,ec.jsx)(mf,{className:"size-5","aria-hidden":"true"}):(0,ec.jsx)(mm,{className:"size-5","aria-hidden":"true"}),A>0&&(0,ec.jsx)("span",{className:"absolute right-0 top-0 inline-flex min-h-4 min-w-4 items-center justify-center rounded-full bg-destructive px-1 text-[10px] text-destructive-foreground",children:A})]}),!l&&(0,ec.jsx)(rQ,{variant:"ghost",size:"icon",onClick:()=>en(),"aria-label":"New chat",className:"size-8",children:(0,ec.jsx)(mp,{className:"size-5","aria-hidden":"true"})})]})]}),(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-1 sm:gap-2",children:[(0,ec.jsx)(Dv,{deploymentUrl:e.deploymentUrl,onReconnect:n=>{lT(n),t({...e,deploymentUrl:n})},onOnline:()=>{lT(n),bb(),j||P()}}),(0,ec.jsx)(Db,{}),(0,ec.jsx)(rQ,{ref:K,variant:"ghost",size:"icon",onClick:z,"aria-label":y?"Hide inspector":"Show workspace",title:y?"Hide inspector":"Show workspace",className:"size-8",children:y?(0,ec.jsx)(mg,{className:"size-5","aria-hidden":"true"}):(0,ec.jsx)(mh,{className:"size-5","aria-hidden":"true"})}),(0,ec.jsx)(rQ,{variant:"ghost",size:"icon",ref:H,onClick:G,"aria-label":"Settings","aria-pressed":k,title:"Settings",className:rO("size-8",k&&"bg-accent"),children:(0,ec.jsx)(ly,{className:"size-5","aria-hidden":"true"})})]})]}),(0,ec.jsx)(Ma,{onReveal:V,inspectorOpen:!!y,inspectorToggleRef:K,returnFocusOnClose:!(l&&!1===I),children:(0,ec.jsxs)("div",{className:"relative flex-1 overflow-hidden",children:[(0,ec.jsx)(Mu,{panelRef:Y,sidebarRef:X,sidebarOpen:!!(l&&I),workspaceTab:"agents"!==x,inspectorOpen:!!(y&&I)}),l&&!1===I&&(0,ec.jsxs)("div",{className:"absolute inset-0 z-40 flex md:hidden",children:[(0,ec.jsx)("button",{type:"button","aria-label":"Close research",className:"absolute inset-0 bg-black/40",onClick:U}),(0,ec.jsx)("aside",{"aria-label":u?"Navigation":"Research navigation",className:"relative z-10 h-full w-[min(19rem,calc(100vw-2.25rem))] bg-background shadow-xl",children:(0,ec.jsx)(gt,{onClose:U,onNewChat:en,onThreadSelect:async e=>{await ei(e),U()},onMutateReady:e=>_(()=>e),onInterruptCountChange:N})})]}),y&&!1===I&&(0,ec.jsxs)("div",{className:"absolute inset-0 z-40 flex justify-end md:hidden",children:[(0,ec.jsx)("button",{type:"button","aria-label":"Close inspector",className:"absolute inset-0 bg-black/40",onClick:B}),(0,ec.jsx)("aside",{"aria-label":"Inspector",className:"relative z-10 h-full w-[min(22rem,calc(100vw-2.25rem))] bg-background shadow-xl has-[[data-file-pane=preview]]:w-full",children:(0,ec.jsx)(D6,{onClose:B,onReportToMainChat:L})})]}),(0,ec.jsxs)(fw,{direction:"horizontal",autoSaveId:"evoscientist-chat",children:[l&&I&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(mI,{ref:X,id:"thread-history",order:1,defaultSize:23,minSize:18,className:"relative min-w-[260px]",children:(0,ec.jsx)(gt,{onNewChat:en,onThreadSelect:ei,onMutateReady:e=>_(()=>e),onInterruptCountChange:N})}),(0,ec.jsx)(f_,{})]}),(0,ec.jsxs)(mI,{id:"chat",className:"relative flex flex-col",order:2,children:[(0,ec.jsxs)("div",{className:rO("flex h-full min-h-0 flex-1 flex-col",null!==u&&"hidden"),children:[(0,ec.jsx)(lh,{onOpenSetup:()=>void d("setup")}),(0,ec.jsx)(bm,{defaultModel:i.defaultEntry,onHistoryRevalidate:()=>w?.(),onThreadUnavailable:er,children:(0,ec.jsx)(LI,{draftSeed:Q,onComposerSnapshotReady:e=>{ee.current=e},onShowAgents:W,onNotifyReady:e=>D(()=>e),onNavigate:ea,onOpenThread:ei,workspaceOpen:!!(y&&"agents"!==x)})},R)]}),("settings"===u||"setup"===u)&&(0,ec.jsx)(ma,{entry:u,onClose:q,onSaveDeploymentUrl:T,onFormShown:()=>void d("settings")},a),"skills"===u&&(0,ec.jsx)(LP,{}),"experts"===u&&(0,ec.jsx)(LM,{}),"memory"===u&&(0,ec.jsx)(L5,{initialTab:p,initialObsId:f,initialExecId:g}),"schedule"===u&&(0,ec.jsx)(Df,{onOpenThread:ei},a)]}),y&&I&&(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(Mp,{panelRef:Y,workspaceTab:"agents"!==x}),(0,ec.jsx)(mI,{ref:Y,id:"inspector",order:3,defaultSize:26,minSize:20,className:"relative min-w-[300px]",children:(0,ec.jsx)(D6,{onClose:B,onReportToMainChat:L})})]})]})]})})]})})}function Mf(){let[e,t]=(0,eu.useState)(null),[n,r]=(0,eu.useState)(!1),[a,i]=(0,eu.useState)(!1);(0,eu.useEffect)(()=>{let e=e5();e?t(e):i(!0),r(!0)},[]);let s=(0,eu.useCallback)(e=>{let n;e4=(n=function(e){try{return localStorage.setItem(e3,e),!0}catch(t){let e;if("QuotaExceededError"!==(e=t?.name)&&"NS_ERROR_DOM_QUOTA_REACHED"!==e)return!1}try{localStorage.removeItem(e_),localStorage.removeItem(eA)}catch{}try{localStorage.removeItem(eZ)}catch{}try{return localStorage.setItem(e3,e),!0}catch{return!1}}(JSON.stringify(e)))?null:e,n||e6.c.error("Couldn't save the settings: this browser's storage is full or blocked. They apply until the page is reloaded."),t(e)},[]),o=e?.langsmithApiKey||el.default.env.NEXT_PUBLIC_LANGSMITH_API_KEY||"";return n?e?(0,ec.jsx)(iH,{deploymentUrl:e.deploymentUrl,apiKey:o,children:(0,ec.jsx)(su,{deploymentUrl:e.deploymentUrl,apiKey:o,children:(0,ec.jsx)(Mm,{config:e,handleSaveConfig:s})})}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(at,{open:a,onOpenChange:i,onSave:s}),(0,ec.jsx)("div",{className:"flex h-screen items-center justify-center",children:(0,ec.jsxs)("div",{className:"text-center",children:[(0,ec.jsx)("h1",{className:"text-2xl font-bold",children:"Welcome to EvoScientist"}),(0,ec.jsx)("p",{className:"mt-2 text-muted-foreground",children:"Configure your deployment to get started"}),(0,ec.jsx)(rQ,{onClick:()=>i(!0),className:"mt-4",children:"Open Configuration"})]})})]}):(0,ec.jsx)("div",{className:"flex h-screen items-center justify-center",children:(0,ec.jsx)("p",{role:"status",className:"text-muted-foreground",children:"Loading…"})})}e.s(["default",0,function(){return(0,ec.jsx)(eu.Suspense,{fallback:(0,ec.jsx)("div",{className:"flex h-screen items-center justify-center",children:(0,ec.jsx)("p",{className:"text-muted-foreground",children:"Loading…"})}),children:(0,ec.jsx)(Mf,{})})}],952683)}])})();
|