@standardagents/builder 0.15.3 → 0.17.0-next.a4b7340
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/built-in-routes.js +362 -281
- package/dist/built-in-routes.js.map +1 -1
- package/dist/client/ApiKeysView.js +1 -1
- package/dist/client/CenteredContentView.js +1 -1
- package/dist/client/CompositionView.js +1 -1
- package/dist/client/ConfirmDialog.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/CopyButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/DataTable.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/JsonViewer.js +1 -1
- package/dist/client/LoginView.js +1 -1
- package/dist/client/Modal.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/ModelModal.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/ModelsView.js +1 -1
- package/dist/client/PromptEditView.js +1 -1
- package/dist/client/PromptModal.js +1 -1
- package/dist/client/PromptsView.js +1 -1
- package/dist/client/ProvidersView.js +2 -2
- package/dist/client/ThreadInspectorPane.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/client/ToolsView.js +1 -1
- package/dist/client/UsersView.js +1 -1
- package/dist/client/VariablesView.js +1 -1
- package/dist/client/assets/index.css +1 -1
- package/dist/client/index.js +3 -3
- package/dist/{discovery-DVviz3By.d.ts → discovery-DiMJWisl.d.ts} +1 -1
- package/dist/{index-BwqQtJ4r.d.ts → index-EaxysUHv.d.ts} +2 -5
- package/dist/index.d.ts +116 -3402
- package/dist/index.js +190 -324
- package/dist/index.js.map +1 -1
- package/dist/packing.d.ts +3 -3
- package/dist/plugin.d.ts +5 -4
- package/dist/plugin.js +143 -78
- package/dist/plugin.js.map +1 -1
- package/dist/runtime.d.ts +3124 -0
- package/dist/runtime.js +21218 -0
- package/dist/runtime.js.map +1 -0
- package/dist/test.d.ts +2 -2
- package/dist/{types-DH3Egc5l.d.ts → types-Bpe7IANZ.d.ts} +1 -1
- package/package.json +10 -9
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["syntax.js","vendor.js","vue.js","formkit.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{d as We,z as N,e as n,k as Ee,g as Lt,m as ee,B as At,c as A,an as Vt,w as he,r as x,O as qt,a5 as Ja,ao as Ga,J as f,a4 as Un,C as Ya,D as Qa,b as r,f as t,q as S,j as z,s as Ge,u as m,h as Be,a as Ht,Z as on,o as zt,ap as Xa,aq as Et,ag as _t,F as $e,l as Ne,K as ze,n as vt,ar as Ia,as as Aa,ah as Pt,at as Za,au as er,av as zn,aw as Ea,ax as La,x as rt,ay as xn,az as tr,X as nr,Y as ar,aA as Ma,y as ht,aB as bn,aC as wt,_ as jn,aD as rr,a3 as Mt,aE as sr,am as ln,aF as lr,aG as yn,aH as Ra,aI as Da,aJ as or,al as ir,aK as Fa,aL as dr,aM as ur,aN as cr,aO as fr,aP as vr,aQ as pr,aR as gr,aS as mr,L as Ot,aT as Xt,aU as Bn,aV as Wn,P as Nt,H as hr,aW as Pa,aX as xr,aY as br,aZ as yr,a_ as An,a$ as kr,b0 as wr,b1 as _r,b2 as Xn,b3 as kn,b4 as $r,b5 as Zn,b6 as ea,b7 as On,W as Cr,b8 as Sr,b9 as Tr,ba as ta}from"./vue.js";import{H as Ir,a as He,J as Kn,K as Ar,L as Vn,I as cn,k as na,M as aa,C as Na,N as Er,O as ra,P as Lr,m as dt,Q as za,R as ja,B as qe,S as Mr,h as wn,V as Rr,U as En,_ as fn,d as rn,e as an,W as Dr,X as Fr,u as Pr,A as Rt,p as Nr,w as zr,y as jr,z as Br,Y as Or,Z as Vr,x as qr}from"./index.js";import{e as sa}from"./vendor.js";import{_ as Ba}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{_ as Jn,u as Hr}from"./CopyButton.vue_vue_type_script_setup_true_lang.js";import{_ as at,W as Ur,a as Wr,b as Kr,c as Jr,d as Gr,e as Zt}from"./monaco.js";import{J as Ln}from"./JsonViewer.js";import{_ as Yr}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";import{u as Oa,_ as Va,b as vn,c as Qr,P as Xr}from"./PromptModal.js";const Zr=We({__name:"UiMenuItem",props:{active:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},as:{default:"button"}},emits:["click"],setup(e,{emit:i}){const a=e,s=i;function l(o){a.disabled||s("click",o)}return(o,p)=>(n(),N(At(e.as),{type:e.as==="button"?"button":void 0,disabled:e.as==="button"?e.disabled:void 0,onClick:l,class:ee(["w-full flex items-center gap-2 px-3 py-2 text-sm text-left transition-colors",[e.disabled?"opacity-50 cursor-not-allowed":"hover:bg-neutral-100 dark:hover:bg-neutral-800 cursor-pointer",e.active?"bg-accent-50 dark:bg-accent-950/30":""]])},{default:Ee(()=>[Lt(o.$slots,"default")]),_:3},8,["type","disabled","class"]))}});async function sn(e){const i=await Ir(e);if(!i.ok)throw new Error(`Request failed for ${e}`);return i.json()}async function es(e){if(!e)return null;try{return(await sn(`/prompts/${encodeURIComponent(e)}`)).prompt}catch{return null}}async function Th(e){if(!e)return null;try{return await sn(`/tools/${encodeURIComponent(e)}`)}catch{return null}}function ts(e){const i=e?.env??e?.tenvs;return!i||typeof i!="object"?{}:i}function qa(e){return Object.keys(ts(e)).filter(i=>i.trim().length>0)}function ns(e){const i=e?.variables||[],a=new Map;for(const s of i){const l=s.name?.trim();l&&a.set(l,{...s,name:l})}for(const s of qa(e))a.has(s)||a.set(s,{name:s,type:"text",required:!1,description:"Default value set on this prompt."});return Array.from(a.values())}function Ih(e){return e?!e.packed&&e.id===e.name:!1}function as(e,i){return i?.type?i.type:e.startsWith("provider:")?"provider":e.startsWith("mcp:")?"mcp":"unknown"}function rs(e){return e.startsWith("provider:")?e.slice(9):e.startsWith("mcp:")?e.slice(4):e}function ss(e,i){if(!e)return null;const a=i[e];if(a)return a;for(const s of Object.values(i))if(s.name===e)return s;return null}function ls(e,i,a={}){const s=i[e.name],l=s?.model;return{name:e.name,displayName:rs(e.name),kind:as(e.name,s),description:s?.description||"",variables:s?.variables||[],model:l,resolvedModel:ss(l,a),config:e}}function Ah(e,i,a,s){const l=i==="b"&&e.type!=="dual_ai",o=i==="a"?e.side_a_label||"Side A":e.side_b_label||(l?"Human":"Side B"),p=i==="a"?e.side_a_agent_prompt:e.side_b_agent_prompt,h=i==="a"?e.side_a_stop_on_response:e.side_b_stop_on_response,L=i==="a"?e.side_a_stop_tool:e.side_b_stop_tool,M=i==="a"?e.side_a_max_steps:e.side_b_max_steps,w=[i==="a"?e.side_a_session_stop_tool:e.side_b_session_stop_tool,i==="a"?e.side_a_session_fail_tool:e.side_b_session_fail_tool,i==="a"?e.side_a_session_status_tool:e.side_b_session_status_tool].filter(B=>!!B),y=(a?.tools||[]).map(B=>ls(B,s.toolsCatalog,s.models)),T=y.filter(B=>B.kind==="handoff"||B.kind==="subagent");return{id:i,agentName:e.name,label:o,mode:l?"human":"ai",promptName:p||null,stopOnResponse:h,stopTool:L,maxSteps:M,sessionStopTool:i==="a"?e.side_a_session_stop_tool:e.side_b_session_stop_tool,sessionTools:w,prompt:a,model:a&&s.models[a.model_id]||null,tools:y,hooks:(a?.hooks||[]).map(B=>s.hooks[B]||{id:B,hook:"unknown"}),variables:ns(a),variableEnvNames:qa(a),outgoingAgents:T}}function os(e){const{limit:i=50,offset:a=0,agentId:s=null,userId:l=null,search:o=null,startDate:p=null,endDate:h=null,autoFetch:L=!0}=e||{},M=A(()=>{const j=new URLSearchParams,J=typeof i=="number"?i:i.value,ve=typeof a=="number"?a:a.value,ae=typeof s=="string"?s:s?.value,Q=typeof l=="string"?l:l?.value,W=typeof o=="string"?o:o?.value,fe=typeof p=="number"?p:p?.value,X=typeof h=="number"?h:h?.value;return j.append("limit",J.toString()),j.append("offset",ve.toString()),ae&&(j.append("agent_id",ae),j.append("include_children","1")),Q&&j.append("user_id",Q),W&&j.append("search",W),fe&&j.append("startDate",fe.toString()),X&&j.append("endDate",X.toString()),He(`/api/threads?${j.toString()}`)}),{data:w,error:y,isFetching:T,isFinished:B,execute:E,abort:H}=Vt(M,{immediate:L,refetch:!0}).get().json(),U=A(()=>w.value?.threads||[]),G=A(()=>w.value?.total||0),q=A(()=>w.value?.hasMore||!1);return{threads:U,total:G,hasMore:q,error:y,isFetching:T,isFinished:B,refetch:E,abort:H}}function Gn(e){const i=A(()=>{const M=typeof e=="string"?e:e?.value;return M?He(`/api/threads/${M}`):""}),{data:a,error:s,isFetching:l,isFinished:o,execute:p,abort:h}=Vt(i,{immediate:!1,refetch:!0}).get().json();return he(i,M=>{M?p():(h(),a.value=null)},{immediate:!0}),{thread:A(()=>a.value?{id:a.value.thread.id,agent_id:a.value.thread.agent_id,user_id:a.value.thread.user_id,tags:a.value.thread.tags||[],parent:a.value.thread.parent??null,terminated:a.value.thread.terminated??null,created_at:a.value.thread.created_at,agent:a.value.agent||{id:"",title:"Unknown",type:"unknown"},stats:a.value.stats}:null),error:s,isFetching:l,isFinished:o,refetch:p,abort:h}}const is={key:0,class:"flex min-h-[500px] items-center justify-center"},ds={class:"flex min-h-0 min-w-0 flex-1 flex-col"},us={key:0,class:"sticky top-0 z-10 flex min-w-0 shrink-0 items-center gap-2 border-b border-neutral-200 bg-neutral-50/95 px-3 backdrop-blur dark:border-neutral-800 dark:bg-neutral-950/95"},cs={class:"min-w-0 flex-1"},fs={class:"edit-sections-query"},vs=We({__name:"AgentModal",props:{modelValue:{type:Boolean},editAgent:{},mode:{},apiError:{},readonly:{type:Boolean,default:!1},saving:{type:Boolean,default:!1},inline:{type:Boolean,default:!1},inlineGlobalNotice:{type:Boolean,default:!1},inlineAccentTabs:{type:Boolean,default:!1},inlineFlatSections:{type:Boolean,default:!1},surfaceSection:{default:null}},emits:["update:modelValue","save"],setup(e,{expose:i,emit:a}){const s=e,l=a,o=A(()=>s.mode==="edit"),p=A(()=>!!s.surfaceSection),h=A(()=>s.inline&&s.inlineFlatSections),L=A(()=>s.inline||p.value),M=A(()=>L.value?{config:Kn}:{}),w=A(()=>o.value&&(s.editAgent?.id||s.editAgent?.name)||""),y=Ar(()=>w.value,{autoload:!1}),T=x(null),B=["basics","side-a","side-b","variables"],{activeTab:E,scrollToSection:H}=Oa(T,B),U=A(()=>[{id:"basics",label:"Basics",icon:Vn},{id:"side-a",label:"Side A",icon:cn},{id:"side-b",label:"Side B",icon:y.agentType.value==="ai_human"?na:cn},{id:"variables",label:"Variables",icon:aa}]),G=x(!1),q=x(!1),j=x(null);let J=0;const ve=A(()=>JSON.stringify({name:y.name.value,title:y.title.value,agentType:y.agentType.value,exposeAsTool:y.exposeAsTool.value,toolDescription:y.toolDescription.value,maxSessionTurns:y.maxSessionTurns.value,sideALabel:y.sideALabel.value,sideAAgentPrompt:y.sideAAgentPrompt.value,sideAStopOnResponse:y.sideAStopOnResponse.value,sideAStopOnToolCall:y.sideAStopOnToolCall.value,sideAStopTool:y.sideAStopTool.value,sideAStopToolResponseProperty:y.sideAStopToolResponseProperty.value,sideAManualStopCondition:y.sideAManualStopCondition.value,sideAMaxSteps:y.sideAMaxSteps.value,sideAEndConversationTool:y.sideAEndConversationTool.value,sideBLabel:y.sideBLabel.value,sideBAgentPrompt:y.sideBAgentPrompt.value,sideBStopOnResponse:y.sideBStopOnResponse.value,sideBStopOnToolCall:y.sideBStopOnToolCall.value,sideBStopTool:y.sideBStopTool.value,sideBStopToolResponseProperty:y.sideBStopToolResponseProperty.value,sideBMaxSteps:y.sideBMaxSteps.value,sideBEndConversationTool:y.sideBEndConversationTool.value,agentEnv:y.agentEnv.value})),ae=A(()=>q.value?"Saved":s.inline&&o.value?"Save Agent Changes":o.value?"Update Agent":"Create Agent"),Q=A(()=>s.saving||s.inline&&!G.value),W=A(()=>p.value||s.inline?{class:s.inline?"flex h-full min-w-0 flex-col":"min-w-0"}:{modelValue:s.modelValue,title:o.value?"Edit Agent":"Create Agent",width:"max-w-5xl",contentPadding:!1});function fe(){q.value=!1,j.value=null}function X(){Be().then(()=>{G.value=!!y.formNode.value?.context?.state.dirty})}function Re(me){y.handleFormNode(me),me.on("commit",X),me.on("reset",X),me.on("message-added",X),me.on("message-updated",X),me.on("message-removed",X),X()}async function Fe(){const me=++J;await Be();const pe=y.formNode.value;if(!pe||me!==J){G.value=!1;return}await pe.settled,pe.reset(pe.value),await Be(),me===J&&(G.value=!1)}async function re(){await Fe(),q.value=!0,j.value=ve.value}async function De(){fe(),y.resetForm(),await Be(),o.value&&w.value?await y.load():await y.loadPrerequisites(),await Fe()}async function P(){const me=await y.prepareSubmit();me&&l("save",me)}function de(){y.resetForm(),fe(),l("update:modelValue",!1)}async function le(){fe(),await De()}function ye(me){return!s.surfaceSection||s.surfaceSection===me}return he(()=>s.modelValue,async me=>{me?await De():(J+=1,y.resetForm(),fe(),G.value=!1)},{immediate:!0}),he(()=>w.value,async(me,pe)=>{!s.modelValue||me===pe||await De()}),he(ve,me=>{q.value&&j.value!==null&&me!==j.value&&fe()}),he(G,me=>{me&&fe()}),i({formNode:y.formNode,markSaveSucceeded:re,markCurrentFormCleanAfterSettle:Fe,resetSaveSuccess:fe}),(me,pe)=>{const Me=qt("FormKit");return n(),N(At(e.inline||p.value?"div":Ba),Ja(W.value,Ga(e.inline||p.value?void 0:{"update:modelValue":Ce=>me.$emit("update:modelValue",Ce)})),{default:Ee(()=>[(n(),N(At(L.value?f(Un):"div"),Ya(Qa(M.value)),{default:Ee(()=>[f(y).isLoading.value?(n(),r("div",is,[...pe[0]||(pe[0]=[t("span",{class:"text-neutral-500"},"Loading agent data...",-1)])])):(n(),N(Me,{key:1,type:"form",id:"agent-form",actions:!1,disabled:e.readonly||e.saving,onSubmit:P,onNode:Re,"dirty-behavior":"compare","outer-class":"$reset flex min-h-0 min-w-0 flex-1 flex-col","form-class":"$reset flex-1 min-h-0 min-w-0 flex flex-col"},{default:Ee(()=>[t("div",ds,[p.value?S("",!0):(n(),r("nav",us,[Lt(me.$slots,"nav-leading",{},void 0,!0),t("div",cs,[z(f(Va),{tabs:U.value,"active-tab":f(E),"accent-active":e.inlineAccentTabs,orientation:"horizontal",onSelect:f(H)},null,8,["tabs","active-tab","accent-active","onSelect"])])])),t("div",{ref_key:"contentRef",ref:T,class:ee(["min-h-0 flex-1 overflow-y-auto",p.value?"p-5":h.value?"bg-neutral-100 dark:bg-neutral-950":"bg-neutral-100 p-5 dark:bg-neutral-950"])},[t("div",fs,[e.inlineGlobalNotice?(n(),r("div",{key:0,class:ee(["edit-sections-notice rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-800 dark:border-amber-700 dark:bg-amber-950/30 dark:text-amber-200",h.value?"mx-5 mb-4 mt-5":"mb-4"])}," Changes here are global and will affect all new messages across all threads. ",2)):S("",!0),t("div",{class:ee([h.value?"space-y-4 pb-5":"space-y-4","edit-sections-stack"])},[e.apiError?(n(),N(f(Na),{key:0,variant:"error"},{default:Ee(()=>[Ge(m(e.apiError),1)]),_:1})):S("",!0),ye("identity")?(n(),N(f(vn),{key:1,id:"section-basics",title:"Basics",icon:f(Vn),flat:h.value},{default:Ee(()=>[z(Er,{form:f(y),"is-edit-mode":o.value},null,8,["form","is-edit-mode"])]),_:1},8,["icon","flat"])):S("",!0),ye("side-a")?(n(),N(f(vn),{key:2,id:"section-side-a",title:"Side A (AI)",icon:f(cn),flat:h.value},{default:Ee(()=>[z(ra,{form:f(y),side:"a"},null,8,["form"])]),_:1},8,["icon","flat"])):S("",!0),ye("side-b")?(n(),N(f(vn),{key:3,id:"section-side-b",title:f(y).agentType.value==="ai_human"?"Side B (Human)":"Side B (AI)",icon:f(y).agentType.value==="ai_human"?f(na):f(cn),flat:h.value},{default:Ee(()=>[z(ra,{form:f(y),side:"b"},null,8,["form"])]),_:1},8,["title","icon","flat"])):S("",!0),ye("variables")?(n(),N(f(vn),{key:4,id:"section-variables",title:"Variables",icon:f(aa),flat:h.value},{default:Ee(()=>[z(Lr,{form:f(y),readonly:e.readonly},null,8,["form","readonly"])]),_:1},8,["icon","flat"])):S("",!0)],2)])],2)]),p.value?S("",!0):(n(),N(Qr,{key:0,"form-id":"agent-form","form-node":f(y).formNode.value,readonly:e.readonly,inline:e.inline,saving:e.saving,dirty:G.value,"save-succeeded":q.value,"save-label":ae.value,"save-disabled":Q.value,"cancel-label":e.readonly?"Close":"Cancel",onCancel:de,onDiscard:le},null,8,["form-node","readonly","inline","saving","dirty","save-succeeded","save-label","save-disabled","cancel-label"]))]),_:3},8,["disabled"]))]),_:3},16))]),_:3},16)}}}),ps=dt(vs,[["__scopeId","data-v-e47eeb63"]]);function Ha(){const e=He("/api/agents"),{data:i,error:a,isFetching:s,isFinished:l,execute:o}=Vt(e,{immediate:!0}).get().json();return{agents:A(()=>i.value?.agents||[]),error:a,isFetching:s,isFinished:l,refetch:o}}function Jt(e,i,...a){}function Yn(e){return!!e&&typeof e=="object"}function _n(e){return typeof e=="string"?e:null}function gs(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function ms(e){if(Yn(e)&&!(typeof e.name!="string"||typeof e.title!="string"||typeof e.type!="string"))return{name:e.name,title:e.title,type:e.type,description:_n(e.description)??void 0,icon:_n(e.icon)??void 0}}function hs(e){return!Yn(e)||typeof e.id!="string"||typeof e.agent_name!="string"||typeof e.created_at!="number"?null:{id:e.id,agent_name:e.agent_name,user_id:_n(e.user_id),tags:Array.isArray(e.tags)?e.tags.filter(i=>typeof i=="string"):null,parent:_n(e.parent),terminated:gs(e.terminated),created_at:e.created_at,agent:ms(e.agent)}}function xs(e){if(!Yn(e))return null;if(e.type==="thread_deleted")return typeof e.threadId=="string"?{type:e.type,threadId:e.threadId}:null;if(e.type==="thread_created"||e.type==="thread_updated"){const i=hs(e.thread);return i?{type:e.type,thread:i}:null}return null}function bs(e){const{autoConnect:i=!0,onEvent:a}=e||{},s=x(null),l=x(!1),o=x(null);let p=0,h=null,L=null,M=!0,w=null;const y=3e4,T=3e4,B=()=>{h&&(clearTimeout(h),h=null),L&&(clearInterval(L),L=null)},E=()=>{L&&clearInterval(L),L=setInterval(()=>{s.value&&s.value.readyState===WebSocket.OPEN&&s.value.send("ping")},T)},H=()=>{if(!M)return;const j=Math.min(1e3*Math.pow(2,p),y);p++,Jt(),h=setTimeout(()=>{M&&U()},j)},U=()=>{s.value&&(w=null,s.value.close());const j=window.location.protocol==="https:"?"wss:":"ws:",J=window.location.host,ve=za(`${j}//${J}${He("/api/events")}`);try{const ae=new WebSocket(ve);s.value=ae,w=ae,ae.onopen=()=>{w===ae&&(l.value=!0,o.value=null,p=0,E(),Jt("AgentBuilderEvents","WebSocket connected"))},ae.onmessage=Q=>{if(w===ae)try{if(typeof Q.data=="string"&&Q.data==="pong")return;const W=xs(JSON.parse(Q.data));W&&a&&a(W)}catch{o.value="Failed to parse event update"}},ae.onerror=Q=>{w===ae&&(o.value="WebSocket connection error")},ae.onclose=()=>{w===ae&&(l.value=!1,B(),Jt("AgentBuilderEvents","WebSocket disconnected"),H())}}catch(ae){o.value=ae instanceof Error?ae.message:"Failed to create WebSocket",H()}},G=()=>{M=!0,p=0,U()},q=()=>{M=!1,B(),w=null,s.value&&(s.value.close(),s.value=null),l.value=!1,p=0};return i&&G(),Ht(()=>{q()}),{wsConnected:l,wsError:o,connect:G,disconnect:q}}const ys={class:"relative inline-flex items-center"},ks={key:0,class:"inline-block w-2 h-2 rounded-full bg-green-500 dark:bg-green-400"},ws={key:1,class:"inline-block w-2 h-2 rounded-full bg-neutral-400 dark:bg-neutral-600"},_s={key:0},$s={key:1},Ua=We({__name:"StatusDot",props:{connected:{type:Boolean},error:{type:Boolean}},setup(e){const i=x(!1),a=x(null);return(s,l)=>(n(),r("div",ys,[t("span",{class:"p-0.5 cursor-default outline-none",tabindex:"-1",onMouseenter:l[0]||(l[0]=o=>i.value=!0),onMouseleave:l[1]||(l[1]=o=>i.value=!1)},[e.connected?(n(),r("span",ks)):(n(),r("span",ws))],32),z(on,{"enter-active-class":"transition-opacity duration-150","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity duration-100","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:Ee(()=>[i.value?(n(),r("div",{key:0,ref_key:"popoverRef",ref:a,class:ee(["absolute top-full left-1/2 -translate-x-1/2 mt-1 px-2 py-1 text-xs rounded shadow-lg whitespace-nowrap z-50 border",{"bg-green-50 dark:bg-green-950 border-green-200 dark:border-green-800 text-green-700 dark:text-green-300":e.connected,"bg-neutral-50 dark:bg-neutral-900 border-neutral-200 dark:border-neutral-700 text-neutral-600 dark:text-neutral-400":!e.connected}])},[e.connected?(n(),r("span",_s,"Live - Connected")):(n(),r("span",$s,"Offline"))],2)):S("",!0)]),_:1})]))}}),Cs={class:"relative min-w-0"},Ss={class:"truncate flex-1 text-left"},Ts={key:0},Is=["onClick"],As={class:"border-t border-neutral-200 dark:border-neutral-700"},Es={class:"flex items-center justify-between"},Ls={class:"space-y-4 date-filter-inputs"},Ms=We({__name:"DateFilterDropdown",props:{startDate:{},endDate:{}},emits:["update:startDate","update:endDate"],setup(e,{emit:i}){const a=e,s=i,l=x(!1),o=x(!1),p=x(null),h=x(null),L=x(""),M=x(""),w=[{label:"All time",value:"all",getRange:()=>({startDate:null,endDate:null})},{label:"Today",value:"today",getRange:()=>{const Q=new Date,W=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate());return{startDate:Math.floor(W.getTime()/1e3),endDate:null}}},{label:"Last 3 days",value:"3days",getRange:()=>{const Q=new Date,W=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()-2);return{startDate:Math.floor(W.getTime()/1e3),endDate:null}}},{label:"Last 7 days",value:"7days",getRange:()=>{const Q=new Date,W=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()-6);return{startDate:Math.floor(W.getTime()/1e3),endDate:null}}},{label:"Last 30 days",value:"30days",getRange:()=>{const Q=new Date,W=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()-29);return{startDate:Math.floor(W.getTime()/1e3),endDate:null}}}],y=A(()=>{if(!a.startDate&&!a.endDate)return"all";for(const Q of w){const W=Q.getRange();if(W.startDate===a.startDate&&W.endDate===a.endDate)return Q.value}return"custom"}),T=A(()=>{if(!a.startDate&&!a.endDate)return"All time";const Q=w.find(fe=>fe.value===y.value);if(Q&&y.value!=="custom")return Q.label;const W=fe=>new Date(fe*1e3).toLocaleDateString("en-US",{month:"short",day:"numeric"});return a.startDate&&a.endDate?`${W(a.startDate)} - ${W(a.endDate)}`:a.startDate?`From ${W(a.startDate)}`:a.endDate?`Until ${W(a.endDate)}`:"Custom"}),B=A(()=>a.startDate!==null||a.endDate!==null);function E(){if(!p.value||!h.value)return;const Q=p.value.getBoundingClientRect();h.value.style.position="fixed",h.value.style.top=`${Q.bottom+8}px`,h.value.style.left=`${Q.left}px`;const W=o.value?280:180;h.value.style.minWidth=`${Q.width}px`,h.value.style.maxWidth=`${Math.max(Q.width,W)}px`,h.value.style.width="auto",h.value.style.margin="0"}function H(){l.value?U():(l.value=!0,Be(()=>{if(h.value&&(h.value.setAttribute("popover","auto"),h.value.addEventListener("toggle",G),"showPopover"in h.value))try{h.value.showPopover()}catch{}E()}))}function U(){if(h.value){if("hidePopover"in h.value)try{h.value.hidePopover()}catch{}h.value.removeEventListener("toggle",G)}l.value=!1,o.value=!1}function G(Q){Q.target===h.value&&(l.value=Q.newState==="open",l.value&&E())}function q(Q){const W=Q.getRange();s("update:startDate",W.startDate),s("update:endDate",W.endDate),U()}function j(){const Q=L.value?Math.floor(new Date(L.value).getTime()/1e3):null,W=M.value?Math.floor(new Date(M.value+"T23:59:59").getTime()/1e3):null;s("update:startDate",Q),s("update:endDate",W),U()}function J(Q){Q.stopPropagation(),s("update:startDate",null),s("update:endDate",null)}const ve=Q=>{const W=Q.target;h.value&&!h.value.contains(W)&&p.value&&!p.value.contains(W)&&U()},ae=Q=>{Q.key==="Escape"&&l.value&&(U(),p.value?.focus())};return zt(()=>{document.addEventListener("click",ve),document.addEventListener("keydown",ae),window.addEventListener("resize",E),window.addEventListener("scroll",E,!0)}),Ht(()=>{document.removeEventListener("click",ve),document.removeEventListener("keydown",ae),window.removeEventListener("resize",E),window.removeEventListener("scroll",E,!0)}),he(o,Q=>{Q&&(a.startDate&&(L.value=new Date(a.startDate*1e3).toISOString().split("T")[0]),a.endDate?M.value=new Date(a.endDate*1e3).toISOString().split("T")[0]:M.value=new Date().toISOString().split("T")[0]),Be(E)}),(Q,W)=>{const fe=qt("FormKit");return n(),r("div",Cs,[t("button",{ref_key:"triggerRef",ref:p,type:"button",onClick:H,class:ee(["w-full flex items-center gap-1 px-2 py-1 text-xs rounded-sm border transition-colors min-w-0 focus:outline-none focus:ring-2 focus:ring-accent-500/30",[B.value?"agents-border-selected agents-surface-selected agents-text-selected-muted":"border-zinc-300 dark:border-zinc-600 hover:border-accent-400 dark:hover:border-accent-500 bg-white dark:bg-transparent text-zinc-700 dark:text-zinc-300"]])},[z(f(Xa),{size:14,class:"shrink-0 text-zinc-400"}),t("span",Ss,m(T.value),1),B.value?(n(),N(f(Et),{key:0,size:14,class:"shrink-0 text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-200",onClick:J})):(n(),N(f(_t),{key:1,size:14,class:ee(["shrink-0 text-zinc-400",l.value?"rotate-180":""])},null,8,["class"]))],2),l.value?(n(),r("div",{key:0,ref_key:"popoverRef",ref:h,class:"dropdown-popover z-[9999]"},[z(f(ja),{"max-height":o.value?void 0:"max-h-48",shadow:!1},{default:Ee(()=>[o.value?(n(),r("div",{key:1,class:"p-2.5 space-y-2.5",onClick:W[4]||(W[4]=ze(()=>{},["stop"]))},[t("div",Es,[W[6]||(W[6]=t("span",{class:"text-xs font-medium"},"Custom range",-1)),t("button",{type:"button",onClick:W[1]||(W[1]=ze(X=>o.value=!1,["stop"])),class:"text-[10px] text-neutral-500 hover:text-black dark:hover:text-white"}," ← Back ")]),t("div",Ls,[z(fe,{modelValue:L.value,"onUpdate:modelValue":W[2]||(W[2]=X=>L.value=X),type:"datepicker",label:"From","picker-only":"",popover:"",format:"MMM D, YYYY","value-format":"YYYY-MM-DD",sequence:["day"]},null,8,["modelValue"]),z(fe,{modelValue:M.value,"onUpdate:modelValue":W[3]||(W[3]=X=>M.value=X),type:"datepicker",label:"To","picker-only":"",popover:"",format:"MMM D, YYYY","value-format":"YYYY-MM-DD",sequence:["day"]},null,8,["modelValue"])]),t("button",{type:"button",onClick:j,class:"w-full py-1.5 text-xs font-medium bg-black dark:bg-white text-white dark:text-black rounded-sm hover:opacity-90 transition-opacity"}," Apply ")])):(n(),r("div",Ts,[(n(),r($e,null,Ne(w,X=>t("button",{key:X.value,type:"button",onClick:Re=>q(X),class:ee(["w-full px-2.5 py-1.5 text-left text-xs agents-surface-hover transition-colors flex items-center gap-2",y.value===X.value?"agents-surface-selected agents-text-selected":""])},[t("span",{class:ee(["w-1.5 h-1.5 rounded-full border border-accent-500",y.value===X.value?"bg-accent-500":""])},null,2),Ge(" "+m(X.label),1)],10,Is)),64)),t("div",As,[t("button",{type:"button",onClick:W[0]||(W[0]=ze(X=>o.value=!0,["stop"])),class:ee(["w-full px-2.5 py-1.5 text-left text-xs agents-surface-hover transition-colors flex items-center gap-2",y.value==="custom"?"agents-surface-selected agents-text-selected":""])},[t("span",{class:ee(["w-1.5 h-1.5 rounded-full border border-accent-500",y.value==="custom"?"bg-accent-500":""])},null,2),W[5]||(W[5]=Ge(" Custom range... ",-1))],2)])]))]),_:1},8,["max-height"])],512)):S("",!0)])}}}),Rs=dt(Ms,[["__scopeId","data-v-753faf78"]]);function Ds(e){const a=Date.now()*1e3-e,s=Math.floor(a/1e6);if(s<60)return s===1?"1 second ago":`${s} seconds ago`;const l=Math.floor(s/60);if(l<60)return l===1?"1 minute ago":`${l} minutes ago`;const o=Math.floor(l/60);if(o<24)return o===1?"1 hour ago":`${o} hours ago`;const p=Math.floor(o/24);if(p<30)return p===1?"1 day ago":`${p} days ago`;const h=Math.floor(p/30);if(h<12)return h===1?"1 month ago":`${h} months ago`;const L=Math.floor(h/12);return L===1?"1 year ago":`${L} years ago`}function Fs(e){const i=x("");let a=null;const s=()=>typeof e=="function"?e():typeof e=="number"?e:e.value,l=()=>{const o=s();i.value=Ds(o);const h=Date.now()*1e3-o,L=Math.floor(h/1e6);a!==null&&(clearInterval(a),a=null),L<60?a=setInterval(l,1e3):L<3600?a=setInterval(l,6e4):L<86400&&(a=setInterval(l,6e5))};return l(),Ht(()=>{a!==null&&clearInterval(a)}),i}const $n=We({__name:"TimeAgo",props:{timestamp:{}},setup(e){const i=e,a=Fs(()=>i.timestamp);return(s,l)=>(n(),r("span",null,m(f(a)),1))}}),qn="name:",la=["bg-sky-400/70 dark:bg-sky-500/70","bg-emerald-400/70 dark:bg-emerald-500/70","bg-amber-400/70 dark:bg-amber-500/70","bg-rose-400/70 dark:bg-rose-500/70","bg-violet-400/70 dark:bg-violet-500/70"],mn=(e,i)=>i.created_at-e.created_at,hn=(e,i)=>`${e}::${i}`,Wa=e=>{const i=e.tags.find(s=>s.startsWith(qn));if(!i)return null;const a=i.slice(qn.length).trim();return a.length>0?a:null},St=e=>e.tags.filter(i=>!i.startsWith(qn)),Ps=e=>Wa(e)||e.agent.title||e.agent.name,Ns=e=>e.id.startsWith("__draft_")?"--------":e.id.slice(0,8),Mn=e=>Wa(e)?e.agent.title||e.agent.name:null,oa=e=>Array.from({length:Math.min(Math.max(e,0),6)},(i,a)=>12+a*8),ia=e=>la[e%la.length],da=e=>({left:`${e}px`}),zs=(e,i)=>{if(e.length===0)return[];const a=new Map(e.map(w=>[w.id,w])),s=new Map,l=[];for(const w of e){const y=w.parent;if(y&&a.has(y)){const T=s.get(y)??[];T.push(w),s.set(y,T);continue}l.push(w)}l.sort(mn);for(const w of s.values())w.sort(mn);const o=[],p=new Set,h=w=>{if(p.has(w.id))return;p.add(w.id);const y=s.get(w.id);if(y)for(const T of y)h(T)},L=(w,y,T)=>{if(p.has(w.id))return;p.add(w.id),o.push({kind:"thread",thread:w,depth:y,isNested:y>0,clusterId:T});const B=s.get(w.id);if(!B)return;const E=new Map;for(const H of B){const U=H.agent_id||H.agent?.name||H.id,G=E.get(U);G?G.push(H):E.set(U,[H])}for(const[H,U]of E.entries()){if(U.length>1){const G=hn(w.id,H),q=i(G);if(o.push({kind:"directory",key:G,depth:y+1,label:U[0]?.agent?.title||U[0]?.agent?.name||H,count:U.length,open:q,clusterId:T}),!q){for(const j of U)h(j);continue}for(const j of U)L(j,y+2,T);continue}L(U[0],y+1,T)}};for(const w of l)L(w,0,w.id);const M=e.filter(w=>!p.has(w.id)).sort(mn);for(const w of M)L(w,w.parent?1:0,w.parent??w.id);return o},js=["id","onClick"],Bs={key:1,class:"space-y-0.5"},Os={key:0,class:"flex flex-wrap gap-1 min-w-0"},Vs={key:2,class:"flex items-center gap-1"},qs={key:0,class:"text-[10px] text-neutral-400"},Hs=["onClick"],Us={class:"flex items-center gap-2"},Ws=We({__name:"ThreadListRows",props:{rows:{},selectedThreadId:{},clusterHasNestedRows:{},isThreadFlashing:{type:Function},isDirectoryFlashing:{type:Function},hasRowTopGap:{type:Function},hasRowBottomBorder:{type:Function}},emits:["selectThread","toggleDirectory"],setup(e,{emit:i}){const a=i;return(s,l)=>(n(!0),r($e,null,Ne(e.rows,(o,p)=>(n(),r($e,{key:o.kind==="thread"?o.thread.id:o.key},[o.kind==="thread"?(n(),r("button",{key:0,id:`thread-${o.thread.id}`,class:ee(["w-full text-left cursor-pointer rounded-lg px-3 transition-colors relative",[o.isNested?e.selectedThreadId===o.thread.id?"py-1.5":"py-1.5 bg-neutral-50/40 dark:bg-neutral-900/20":"py-2",e.hasRowTopGap(p)?"mt-1":"",e.hasRowBottomBorder(p)&&e.clusterHasNestedRows[o.clusterId]?"mb-1":"",o.thread.terminated?"opacity-50 text-neutral-500 dark:text-neutral-500":"",e.selectedThreadId===o.thread.id?"agents-surface-selected":"agents-surface-hover"]]),style:vt(o.depth>0?{paddingLeft:`${12+Math.min(o.depth,6)*8}px`}:void 0),onClick:h=>a("selectThread",o.thread.id)},[(n(!0),r($e,null,Ne(f(oa)(o.depth),(h,L)=>(n(),r("span",{key:`thread-line-${L}`,class:ee(["pointer-events-none absolute inset-y-1 w-px rounded-full",f(ia)(L)]),style:vt(f(da)(h)),"aria-hidden":"true"},null,6))),128)),t("div",{class:ee(["flex items-center gap-2",!o.isNested||f(St)(o.thread).length>0||f(Mn)(o.thread)?"mb-0.5":""])},[o.thread.terminated?(n(),N(f(Ia),{key:0,size:12,class:"shrink-0 text-neutral-500 dark:text-neutral-400"})):S("",!0),t("span",{class:ee(["font-medium truncate flex-1 min-w-0",[e.selectedThreadId===o.thread.id?"agents-text-selected":"",e.isThreadFlashing(o.thread.id)?"thread-list-green-flash":""]])},m(f(Ps)(o.thread)),3),t("span",{class:ee(["flex-shrink-0 text-[10px]",e.selectedThreadId===o.thread.id?"agents-text-selected-muted":"text-neutral-400 dark:text-neutral-500"])},[z($n,{timestamp:o.thread.created_at*1e6},null,8,["timestamp"])],2)],2),f(Mn)(o.thread)?(n(),r("div",{key:0,class:ee(["mb-0.5 truncate text-[10px]",e.selectedThreadId===o.thread.id?"agents-text-selected-muted":"text-neutral-400 dark:text-neutral-500"])},m(f(Mn)(o.thread)),3)):S("",!0),o.isNested?f(St)(o.thread).length>0?(n(),r("div",Vs,[(n(!0),r($e,null,Ne(f(St)(o.thread).slice(0,3),h=>(n(),r("span",{key:h,class:"inline-block px-1.5 py-0.5 rounded text-[10px] truncate max-w-[120px] bg-neutral-200 dark:bg-neutral-800 text-neutral-600 dark:text-neutral-400"},m(h),1))),128)),f(St)(o.thread).length>3?(n(),r("span",qs," +"+m(f(St)(o.thread).length-3),1)):S("",!0)])):S("",!0):(n(),r("div",Bs,[t("span",{class:ee(["block max-w-[80px] truncate font-mono text-[10px]",e.selectedThreadId===o.thread.id?"agents-text-selected-muted":"text-neutral-400 dark:text-neutral-500"])},m(f(Ns)(o.thread)),3),f(St)(o.thread).length>0?(n(),r("div",Os,[(n(!0),r($e,null,Ne(f(St)(o.thread).slice(0,3),h=>(n(),r("span",{key:h,class:ee(["inline-block px-1.5 py-0.5 rounded text-[10px] truncate max-w-[60px]",e.selectedThreadId===o.thread.id?"agents-surface-selected-strong agents-text-selected":"bg-neutral-200 dark:bg-neutral-800 text-neutral-600 dark:text-neutral-400"])},m(h),3))),128)),f(St)(o.thread).length>3?(n(),r("span",{key:0,class:ee(["text-[10px]",e.selectedThreadId===o.thread.id?"agents-text-selected-muted":"text-neutral-400"])}," +"+m(f(St)(o.thread).length-3),3)):S("",!0)])):S("",!0)]))],14,js)):(n(),r("button",{key:1,type:"button",class:"w-full rounded-lg text-left px-3 py-1.5 bg-neutral-50/25 dark:bg-neutral-900/10 hover:bg-neutral-100 dark:hover:bg-neutral-800/40 transition-colors relative",style:vt({paddingLeft:`${12+Math.min(o.depth,6)*8}px`}),onClick:h=>a("toggleDirectory",o.key)},[(n(!0),r($e,null,Ne(f(oa)(o.depth),(h,L)=>(n(),r("span",{key:`directory-line-${L}`,class:ee(["pointer-events-none absolute inset-y-1 w-px rounded-full",f(ia)(L)]),style:vt(f(da)(h)),"aria-hidden":"true"},null,6))),128)),t("div",Us,[z(f(Aa),{size:13,class:"text-neutral-500 dark:text-neutral-400 shrink-0"}),t("span",{class:ee(["truncate flex-1 min-w-0 text-[11px] font-medium text-neutral-600 dark:text-neutral-300",e.isDirectoryFlashing(o.key)?"thread-list-green-flash":""])},m(o.label)+" ("+m(o.count)+") ",3),o.open?(n(),N(f(_t),{key:0,size:14,class:"text-neutral-500 dark:text-neutral-400 shrink-0"})):(n(),N(f(Pt),{key:1,size:14,class:"text-neutral-500 dark:text-neutral-400 shrink-0"}))])],12,Hs))],64))),128))}}),Ks=dt(Ws,[["__scopeId","data-v-1e5bebfe"]]),Js={class:"flex flex-col flex-1 min-h-0 overflow-visible"},Gs={class:"px-3 border-b border-neutral-300 dark:border-neutral-700 h-12 flex items-center shrink-0"},Ys={class:"flex items-center justify-between w-full"},Qs={key:0,class:"text-xs font-mono text-neutral-500 dark:text-neutral-400"},Xs={class:"flex items-center gap-1"},Zs=["title","aria-label","aria-pressed"],el={key:0,class:"px-3 py-2 border-b border-neutral-200 dark:border-neutral-800 shrink-0 space-y-2"},tl={class:"relative"},nl={class:"flex items-center gap-2 w-full"},al={key:0,class:"flex-1 min-w-0"},rl={key:0,class:"p-4 flex justify-center"},sl={key:1,class:"p-4 text-red-600 dark:text-red-400"},ll={key:2,class:"text-neutral-500 dark:text-neutral-400 text-center py-12"},ol={key:1,class:"text-base"},il={key:3,class:"px-2 py-2"},dl={key:0,class:"p-3 flex justify-center"},ul={key:1,class:"p-3 text-center text-[10px] text-neutral-400 dark:text-neutral-500"},cl=50,ua=1800,Eh=We({__name:"ThreadListPane",props:{selectedThreadId:{},optimisticThread:{},agentId:{},showCollapseButton:{type:Boolean}},emits:["selectThread","collapse","createThread","threadsLoaded"],setup(e,{expose:i,emit:a}){const s=e,l=a,o=x(""),p=x(null),h=x(!1),L=x(null),M=x(null),w=x(null),y=x(!1),T=A(()=>s.agentId!=null);he(()=>s.agentId,c=>{c!=null&&(M.value=c),y.value=!1},{immediate:!0});const B=x(null),{agents:E,isFetching:H}=Ha(),U=A(()=>E.value.map(c=>({value:c.name,label:c.title||c.name}))),G=x(0),q=x([]),j=x(!1),J=x(!1),ve=tr(c=>{p.value=c||null},300);he(o,c=>{ve(c)});const ae=A(()=>{let c=0;return p.value&&c++,M.value&&!T.value&&c++,(w.value||B.value)&&c++,c});function Q(){o.value="",p.value=null,T.value||(M.value=null),w.value=null,B.value=null}async function W(){h.value=!0,await Be(),L.value?.focus(),L.value?.select()}function fe(){Q(),h.value=!1}function X(){h.value?fe():W()}const{threads:Re,hasMore:Fe,isFetching:re,isFinished:De,error:P,refetch:de}=os({limit:cl,offset:G,search:p,agentId:M,startDate:w,endDate:B}),le=x([]),ye=x(new Set);he([p,M,w,B],()=>{G.value=0,q.value=[],le.value=[],ye.value.clear(),j.value=!1,J.value=!1}),he(Re,c=>{if(G.value===0)q.value=[...c];else{const C=new Set(q.value.map(Y=>Y.id)),O=c.filter(Y=>!C.has(Y.id));q.value=[...q.value,...O],J.value=!0}j.value=!1});const me=x({}),pe=x({}),Me=x({}),Ce=new Set,ne=c=>me.value[c]??!1,Z=c=>{me.value[c]=!ne(c)},K=c=>{pe.value[c]=!0;const C=setTimeout(()=>{delete pe.value[c],Ce.delete(C)},ua);Ce.add(C)},xe=c=>{Me.value[c]=!0;const C=setTimeout(()=>{delete Me.value[c],Ce.delete(C)},ua);Ce.add(C)};Ht(()=>{Ce.forEach(c=>clearTimeout(c)),Ce.clear()});const ue=c=>pe.value[c]===!0,Se=c=>Me.value[c]===!0,Ue=c=>{if(M.value&&c.agent_id!==M.value&&!c.parent||w.value&&c.created_at<w.value||B.value&&c.created_at>B.value)return!1;if(p.value){const C=p.value.toLowerCase(),O=c.id.toLowerCase().includes(C),Y=c.tags.some(Le=>Le.toLowerCase().includes(C));if(!O&&!Y)return!1}return!0},D=A(()=>{const c=q.value.filter(Le=>!ye.value.has(Le.id)),C=new Set(c.map(Le=>Le.id)),Y=[...le.value.filter(Le=>!C.has(Le.id)&&!ye.value.has(Le.id)),...c];return s.optimisticThread&&!Y.some(Le=>Le.id===s.optimisticThread?.id)&&Y.unshift(s.optimisticThread),Y.sort(mn)}),be=A(()=>D.value.filter(c=>!c.parent).length),se=A(()=>zs(D.value,ne)),we=c=>{const C=se.value[c],O=se.value[c+1];return C?O?C.clusterId!==O.clusterId:!0:!1},Te=c=>{const C=se.value[c],O=se.value[c-1];if(!C||!O||C.clusterId!==O.clusterId)return!1;const Y=C.kind==="directory"||C.kind==="thread"&&C.isNested,Le=O.kind==="thread"&&!O.isNested;return Y&&Le},ce=A(()=>{const c={};for(const C of se.value)if(!c[C.clusterId]){if(C.kind==="directory"){c[C.clusterId]=!0;continue}if(C.kind==="thread"&&C.isNested){c[C.clusterId]=!0;continue}c[C.clusterId]=!1}return c}),ge=x(null);function oe(){j.value||re.value||!Fe.value||(j.value=!0,G.value=q.value.length)}const{arrivedState:Ie}=Za(ge,{offset:{bottom:100}});he(()=>Ie.bottom,c=>{c&&Fe.value&&!re.value&&!j.value&&oe()});const je=c=>{const C=E.value.find(Y=>Y.name===c.agent_name),O=c.agent;return{id:c.id,agent_id:c.agent_name,user_id:c.user_id,tags:c.tags||[],parent:c.parent??null,terminated:c.terminated??null,created_at:c.created_at,agent:{name:c.agent_name,title:O?.title||C?.title,type:O?.type||C?.type||"ai_human"}}},Oe=async c=>{if(c.type==="thread_created"){const C=je(c.thread);if(!Ue(C))return;if(C.parent)if(D.value.filter(Y=>Y.parent===C.parent&&Y.agent_id===C.agent_id).length+1>1){const Y=hn(C.parent,C.agent_id);xe(Y),ne(Y)&&K(C.id)}else K(C.id);le.value.unshift(C)}else if(c.type==="thread_updated"){const C=je(c.thread),O=D.value.find(Ke=>Ke.id===C.id);if(!Ue(C)){le.value=le.value.filter(Ke=>Ke.id!==C.id),q.value=q.value.filter(Ke=>Ke.id!==C.id);return}ye.value.delete(C.id);const Y=le.value.findIndex(Ke=>Ke.id===C.id);Y>=0&&(le.value[Y]=C);const Le=q.value.findIndex(Ke=>Ke.id===C.id);if(Le>=0?q.value[Le]=C:Y===-1&&le.value.unshift(C),!!C.terminated&&!O?.terminated)if(C.parent)if((D.value.filter(Je=>Je.parent===C.parent&&Je.agent_id===C.agent_id).length||1)>1){const Je=hn(C.parent,C.agent_id);xe(Je),ne(Je)&&K(C.id)}else K(C.id);else K(C.id)}else c.type==="thread_deleted"&&(ye.value.add(c.threadId),le.value=le.value.filter(C=>C.id!==c.threadId))},{wsConnected:V,wsError:F}=bs({onEvent:Oe});he(()=>G.value,c=>{c===0&&(le.value=[])}),he(()=>[s.selectedThreadId,D.value],([c,C])=>{if(!c||C.length===0)return;const O=new Map(C.map(Le=>[Le.id,Le]));let Y=O.get(c);for(;Y&&Y.parent;){const Le=hn(Y.parent,Y.agent_id);me.value[Le]=!0,Y=O.get(Y.parent)}},{immediate:!0}),he(()=>({rows:se.value,finished:De.value}),({rows:c,finished:C})=>{const O=c.find(Y=>Y.kind==="thread");C&&!y.value&&(y.value=!0,l("threadsLoaded",O?.thread.id??null,D.value.map(Y=>Y.id)))},{immediate:!0}),i({refetch:de});const u=c=>{l("selectThread",c)};return(c,C)=>{const O=qt("FormKit");return n(),r("div",Js,[t("div",Gs,[t("div",Ys,[t("button",{onClick:C[0]||(C[0]=ze(Y=>l("collapse"),["stop"])),type:"button",class:"-ml-1 flex items-center gap-2 rounded px-1.5 py-1 text-left transition-colors hover:bg-black/10 dark:hover:bg-white/15",title:"Collapse Threads pane","aria-label":"Collapse Threads pane"},[z(f(er),{size:18,class:"shrink-0"}),C[8]||(C[8]=t("h2",{class:"text-base font-bold"},"Threads",-1)),!f(re)&&be.value>0?(n(),r("span",Qs," ("+m(be.value)+") ",1)):S("",!0),z(Ua,{connected:f(V),error:f(F)},null,8,["connected","error"])]),t("div",Xs,[t("button",{type:"button",class:ee(["inline-flex h-7 w-7 items-center justify-center rounded-md border border-neutral-300 bg-white text-neutral-700 transition-colors hover:border-neutral-500 hover:bg-neutral-50 hover:text-black dark:border-neutral-700 dark:bg-neutral-950 dark:text-neutral-300 dark:hover:border-neutral-500 dark:hover:bg-neutral-900 dark:hover:text-white",h.value?"agents-border-selected agents-text-selected bg-white dark:bg-neutral-950":""]),title:h.value?"Hide search":"Search threads","aria-label":h.value?"Hide search":"Search threads","aria-pressed":h.value,onClick:ze(X,["stop"])},[z(f(zn),{size:16})],10,Zs),t("button",{onClick:C[1]||(C[1]=Y=>l("createThread")),type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-md border border-neutral-300 bg-white text-neutral-700 transition-colors hover:border-neutral-500 hover:bg-neutral-50 hover:text-black dark:border-neutral-700 dark:bg-neutral-950 dark:text-neutral-300 dark:hover:border-neutral-500 dark:hover:bg-neutral-900 dark:hover:text-white",title:"New thread","aria-label":"New thread"},[z(f(Ea),{size:16})]),e.showCollapseButton!==!1?(n(),r("button",{key:0,onClick:C[2]||(C[2]=Y=>l("collapse")),type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-md text-neutral-700 transition-colors hover:bg-black/10 hover:text-black dark:text-neutral-300 dark:hover:bg-white/15 dark:hover:text-white",title:"Collapse pane","aria-label":"Collapse pane"},[z(f(La),{size:17})])):S("",!0)])])]),h.value||ae.value>0?(n(),r("div",el,[t("div",tl,[z(f(zn),{size:14,class:"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-neutral-400"}),rt(t("input",{ref_key:"threadSearchInputRef",ref:L,"onUpdate:modelValue":C[3]||(C[3]=Y=>o.value=Y),type:"search",placeholder:"Search threads...",class:"h-8 w-full rounded-md border border-neutral-300 bg-white pl-7 pr-8 text-sm text-neutral-950 outline-none transition-colors placeholder:text-neutral-400 focus:border-[var(--agents-accent-border)] dark:border-neutral-700 dark:bg-neutral-950 dark:text-neutral-50"},null,512),[[xn,o.value]]),o.value?(n(),r("button",{key:0,type:"button",class:"absolute right-1.5 top-1/2 inline-flex h-5 w-5 -translate-y-1/2 items-center justify-center rounded text-neutral-400 transition-colors hover:bg-neutral-100 hover:text-neutral-800 dark:hover:bg-neutral-800 dark:hover:text-neutral-100",title:"Clear search","aria-label":"Clear search",onClick:C[4]||(C[4]=Y=>{o.value="",p.value=null,W()})},[z(f(Et),{size:13})])):S("",!0)]),t("div",nl,[T.value?S("",!0):(n(),r("div",al,[z(O,{type:"selectSearch",size:"sm","active-highlight":"",value:M.value||"",options:U.value,placeholder:"All agents","search-placeholder":"Search agents...",loading:f(H),onInput:C[5]||(C[5]=Y=>M.value=Y||null)},null,8,["value","options","loading"])])),z(Rs,{startDate:w.value,"onUpdate:startDate":C[6]||(C[6]=Y=>w.value=Y),endDate:B.value,"onUpdate:endDate":C[7]||(C[7]=Y=>B.value=Y),class:ee(T.value?"w-full":"flex-1 min-w-0")},null,8,["startDate","endDate","class"]),ae.value>0?(n(),r("button",{key:1,onClick:Q,type:"button",class:"text-[10px] font-mono text-neutral-400 hover:text-neutral-900 dark:hover:text-neutral-100 transition-colors whitespace-nowrap"}," Clear ")):(n(),r("button",{key:2,onClick:fe,type:"button",class:"text-[10px] font-mono text-neutral-400 hover:text-neutral-900 dark:hover:text-neutral-100 transition-colors whitespace-nowrap"}," Close "))])])):S("",!0),t("div",{ref_key:"scrollContainerRef",ref:ge,class:"flex-1 overflow-y-auto text-xs min-h-0"},[f(re)&&q.value.length===0?(n(),r("div",rl,[z(qe)])):f(P)?(n(),r("div",sl," Error: "+m(f(P)),1)):se.value.length===0?(n(),r("div",ll,[ae.value>0?(n(),r($e,{key:0},[C[9]||(C[9]=t("p",{class:"text-base mb-2"},"No matching threads",-1)),t("button",{onClick:Q,type:"button",class:"text-xs text-accent-600 dark:text-accent-400 hover:underline"}," Clear filters ")],64)):(n(),r("p",ol,"No threads found"))])):(n(),r("div",il,[z(Ks,{rows:se.value,"selected-thread-id":e.selectedThreadId,"cluster-has-nested-rows":ce.value,"is-thread-flashing":ue,"is-directory-flashing":Se,"has-row-top-gap":Te,"has-row-bottom-border":we,onSelectThread:u,onToggleDirectory:Z},null,8,["rows","selected-thread-id","cluster-has-nested-rows"]),j.value||f(re)&&q.value.length>0?(n(),r("div",dl,[z(qe)])):J.value&&!f(Fe)&&se.value.length>0?(n(),r("div",ul," All "+m(be.value)+" threads loaded ",1)):S("",!0)]))],512)])}}});function Hn(e){return!!e&&typeof e=="object"}function fl(e){if(Hn(e)&&!Array.isArray(e))return e;if(typeof e=="string")try{const i=JSON.parse(e);return Hn(i)&&!Array.isArray(i)?i:void 0}catch{return}}function vl(e){const i=x(null),a=x(!1),s=x(null);let l=null;try{l=Mr()}catch{}const o=l?.messages??x([]),p=A(()=>l?.groupedMessages?.value?l.groupedMessages.value:l?.workblocks?.value?l.workblocks.value:o.value),h=A(()=>l?.status.value==="connected"),L=x(null);l?.loading??x(!1);const M=A(()=>o.value.some(P=>P.status==="pending"));function w(P){if(!i.value?.agent)return null;const de=i.value.agent,le=P==="assistant"?"A":"B";return le==="A"&&de.side_a_label?de.side_a_label:le==="B"&&de.side_b_label?de.side_b_label:null}function y(P){const de=P.path??"",le=P.name??de.split("/").pop()??"attachment";return{id:P.id||`att-${de||le||Math.random().toString(36).slice(2)}`,type:"file",path:de,name:le,mimeType:P.mimeType||P.mediaType||"application/octet-stream",width:P.width,height:P.height,description:P.description}}function T(P){if(P){if(Array.isArray(P))return P.length>0?P.map(y):void 0;try{const de=JSON.parse(P);return Array.isArray(de)&&de.length>0?de.filter(Hn).map(y):void 0}catch{return}}}function B(P,de){const le=[];P.reasoning_content&&le.push({id:`${P.id}-reasoning`,type:"reasoning",content:P.reasoning_content,created_at:P.created_at}),P.content&&le.push({id:`${P.id}-content`,type:"content",content:P.content,created_at:P.created_at});const ye=P.workItems.filter(ne=>ne.type==="tool_call"),me=P.workItems.filter(ne=>ne.type==="tool_result"),pe=new Map;for(const ne of me)ne.tool_call_id&&pe.set(ne.tool_call_id,ne);for(const ne of ye){const Z=ne.tool_call_id||ne.id,K=pe.get(Z);let xe="pending";if(K){const ue=(K.content||"").toLowerCase(),Se=ue.includes("failed")||ue.includes("error"),Ue=ue.length<500;xe=K.status==="error"||Se&&Ue?"failed":"success"}le.push({id:ne.id,type:"tool_call",content:ne.name||"",created_at:P.created_at,tool_name:ne.name,tool_call_id:Z,tool_arguments:ne.content||void 0,response:K?.content||null,response_status:xe,response_log_id:null,log_id:null})}const Me=le.some(ne=>ne.type==="tool_call"&&ne.response_status==="pending"),Ce=P.status!=="pending"&&!Me;return{type:"work",id:P.id,role:"assistant",items:le,created_at:P.created_at,updated_at:P.updated_at??P.response_completed_at??P.created_at,request_sent_at:P.request_sent_at??P.created_at,response_completed_at:P.response_completed_at??(Ce?P.updated_at??P.created_at:null),isComplete:Ce,sideLabel:w("assistant"),status:P.status}}function E(P){return P==="assistant"?"assistant":"user"}function H(P){for(let de=P.length-1;de>=0;de--){const le=(P[de].content||"").trim();if(le.length>0)return le}return""}function U(P){const de=new Set,le=[];for(const ye of P){const me=T(ye.attachments);if(me?.length)for(const pe of me)de.has(pe.path)||(de.add(pe.path),le.push(pe))}return le.length>0?le:void 0}function G(P){if(!P)return!1;if(P.tool_status==="error"||P.status==="failed")return!0;const de=(P.content||"").toLowerCase();return de?de.includes("failed to execute tool")||de.includes("has reported a failure")||de.includes("execution stopped before completion"):!1}function q(P){const de=P.messages||[],le=de[de.length-1],ye=le?E(le.role):"assistant",me=le?.log_id??null,pe=(P.subagent_status||"").toLowerCase(),Me=G(le)||pe.includes("error")||pe.includes("failed"),Ce=H(de),ne=U(de),Z=de.filter(K=>{const xe=T(K.attachments);return!!K.content||!!K.status||!!(xe&&xe.length>0)}).map(K=>({id:K.id,role:K.role,content:K.content||"",created_at:K.created_at,silent:K.silent,attachments:T(K.attachments)}));return{type:"subagent",id:P.id,role:ye,created_at:P.created_at,updated_at:P.updated_at,subagentId:P.subagent_id,subagentName:P.subagent_name??null,subagentTitle:P.subagent_title??null,subagentThreadName:P.subagent_thread_name??null,subagentStatus:P.subagent_status??null,subagentHasError:Me,subagentResumable:P.subagent_resumable??null,subagentBlocking:P.subagent_blocking??null,messages:Z,messageCount:de.length,latestContent:Ce,attachments:ne,log_id:me,sideLabel:w(ye),silent:de.length>0&&de.every(K=>!!K.silent)}}function j(P){const de=(P.subagents||[]).map(ye=>q(ye)),le=de.reduce((ye,me)=>ye?me.updated_at>ye.updated_at?me:ye:me,null);return{type:"subagent_group",id:P.id,role:le?.role??"assistant",created_at:P.created_at,updated_at:P.updated_at,subagents:de,count:de.length,log_id:le?.log_id??null,sideLabel:le?.sideLabel??w("assistant"),silent:de.every(ye=>!!ye.silent)}}function J(P){return{type:"status",id:P.id,role:"system",content:P.content,created_at:P.created_at,statusKind:P.status_kind??null,subagentId:P.subagent_id??null}}const ve=A(()=>{const P=[],le=p.value.filter(me=>(me.depth??0)===0);let ye=[];for(let me=0;me<le.length;me++){const pe=le[me];if(P[P.length-1]?.role,"type"in pe&&pe.type==="workblock"){const xe=B(pe);P.push(xe),pe.attachments&&pe.attachments.length>0&&ye.push(...pe.attachments.map(y));continue}if("type"in pe&&pe.type==="subagent_block"){ye=[],P.push(q(pe));continue}if("type"in pe&&pe.type==="subagent_group_block"){ye=[],P.push(j(pe));continue}if("type"in pe&&pe.type==="status"){ye=[],P.push(J(pe));continue}const Ce=pe,ne=Ce.role;if(Ce.role==="tool")continue;const Z=T(Ce.attachments);let K;if((ye.length>0||Z)&&(K=[...ye,...Z||[]],ye=[]),Ce.content||ne==="system"||Ce.status==="pending"||K?.length){const xe={type:"text",id:Ce.id,role:ne,content:Ce.content||"",attachments:K?.length?K:void 0,created_at:Ce.created_at,log_id:Ce.log_id||null,sideLabel:w(ne),isOptimistic:Ce.isOptimistic,status:Ce.status,silent:Ce.silent,metadata:fl(Ce.metadata)};P.push(xe)}}return P});async function ae(){if(!e.value){i.value=null;return}try{const P=await fetch(He(`/api/threads/${e.value}`));P.ok&&(i.value=await P.json())}catch{i.value=null}}async function Q(P){if(e.value){if(l?.deleteMessage){await l.deleteMessage(P);return}try{if(!(await fetch(He(`/api/threads/${e.value}/messages/${P}`),{method:"DELETE"})).ok)throw new Error("Failed to delete message")}catch(de){throw de}}}async function W(P,de){if(e.value)try{if(!(await fetch(He(`/api/threads/${e.value}/messages/${P}`),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:de})})).ok)throw new Error("Failed to update message")}catch(le){throw le}}he(e,async P=>{P?(a.value=!0,await ae(),a.value=!1):i.value=null},{immediate:!0});const fe=l?.sendMessage,X=l?.stopExecution,Re=l?.attachments??x([]),Fe=l?.addAttachment??(()=>{}),re=l?.removeAttachment??(()=>{}),De=l?.clearAttachments??(()=>{});return{messages:ve,threadInfo:i,isFetching:a,error:s,wsConnected:h,wsError:L,isExecuting:M,sendMessage:fe,stopThread:X,attachments:Re,addAttachment:Fe,removeAttachment:re,clearAttachments:De,deleteMessageById:Q,updateMessageContent:W}}const Rn="__shiki_highlighter__";let pn=null;async function pl(){return typeof window<"u"&&window[Rn]?window[Rn]:pn||(pn=Promise.all([at(()=>import("./syntax.js").then(e=>e.d),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.e),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.f),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.g),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.i),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.k),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.l),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.m),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.n),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.s),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.o),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.p),__vite__mapDeps([0,1])),at(()=>import("./vue.js").then(e=>e.bb),__vite__mapDeps([2,3,1,0])),at(()=>import("./syntax.js").then(e=>e.y),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.q),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.r),__vite__mapDeps([0,1]))]).then(async([{createHighlighterCore:e},{createJavaScriptRegexEngine:i},a,s,l,o,p,h,L,M,w,y,T,B,E,H])=>{const U=await e({themes:[E.default,H.default],langs:[a.default,s.default,l.default,o.default,p.default,h.default,L.default,M.default,w.default,y.default,T.default,B.default],engine:i()});return typeof window<"u"&&(window[Rn]=U),U}),pn)}const gl={class:"code-block"},ml={key:0,class:"text-xs text-neutral-500 p-2"},hl=["innerHTML"],Ft=We({__name:"CodeBlock",props:{code:{},language:{}},setup(e){const i=e,a=x(""),s=x(!0),l={bash:"bash",cjs:"javascript",htm:"html",js:"javascript",jsonl:"json",md:"markdown",mjs:"javascript",sh:"bash",shell:"bash",text:"text",ts:"typescript",txt:"text",yml:"yaml"},o=new Set(["bash","css","html","javascript","jsx","json","markdown","shellscript","tsx","typescript","vue","yaml"]),p=w=>{const y=w?.trim().toLowerCase()||"text";return l[y]??y},h=w=>w.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),L=w=>`<pre class="shiki shiki-text"><code>${h(w)}</code></pre>`,M=async()=>{const w=i.code??"";if(!w){a.value='<pre class="shiki"><code></code></pre>',s.value=!1;return}try{const y=await pl(),T=p(i.language);o.has(T)?a.value=y.codeToHtml(w,{lang:T,themes:{light:"github-light",dark:"github-dark"}}):a.value=L(w)}catch{a.value=L(w)}finally{s.value=!1}};return zt(()=>{M()}),he(()=>i.code,()=>{M()}),he(()=>i.language,()=>{M()}),(w,y)=>(n(),r("div",gl,[s.value?(n(),r("div",ml,"Loading...")):(n(),r("div",{key:1,innerHTML:a.value,class:"code-content"},null,8,hl))]))}}),xl={key:0,class:"absolute inset-0 flex items-center justify-center bg-neutral-100 dark:bg-neutral-800"},bl={key:1,class:"absolute inset-0 flex items-center justify-center bg-neutral-100 dark:bg-neutral-800 text-neutral-400"},yl=["src","alt"],kl={key:2,class:"pointer-events-none absolute inset-0 flex items-center justify-center bg-black/0 group-hover:bg-black/35 transition-colors"},wl={class:"text-xs text-neutral-600 dark:text-neutral-300 truncate max-w-[100px]"},Dn=We({__name:"FileAttachment",props:{attachment:{},threadId:{},showRemove:{type:Boolean}},emits:["remove"],setup(e,{emit:i}){const a=nr(),s=ar(),l=e,o=i,p=x(!0),h=x(!1),L=A(()=>l.attachment.mimeType.startsWith("image/")),M=A(()=>!!l.attachment.thumbnailBase64),w=A(()=>{if(!l.threadId||!l.attachment.path)return"";const U=l.attachment.path.startsWith("/")?l.attachment.path.slice(1):l.attachment.path;return He(`/api/threads/${l.threadId}/fs/${U}`)}),y=A(()=>L.value?l.attachment.thumbnailBase64?`data:image/webp;base64,${l.attachment.thumbnailBase64}`:w.value:"");function T(){p.value=!1,h.value=!1}function B(){p.value=!1,h.value=!0}function E(){o("remove",l.attachment.id)}function H(){if(!l.attachment.path){w.value&&window.open(w.value,"_blank");return}a.replace({query:{...s.query,inspector:"files",filePath:l.attachment.path},hash:s.hash})}return(U,G)=>(n(),r("div",{class:ee(["relative group inline-flex items-center overflow-hidden rounded-2xl bg-neutral-100 dark:bg-neutral-800/60 ring-1 ring-black/5 dark:ring-white/10 transition-all hover:ring-black/10 dark:hover:ring-white/20 hover:shadow-sm",{"w-[256px] h-[256px]":L.value,"px-2.5 py-1.5":!L.value,"cursor-pointer":L.value&&w.value}]),onClick:G[0]||(G[0]=q=>L.value&&w.value?H():void 0)},[L.value?(n(),r($e,{key:0},[p.value&&!h.value&&!M.value?(n(),r("div",xl,[...G[1]||(G[1]=[t("div",{class:"w-4 h-4 border-2 border-neutral-300 border-t-neutral-600 rounded-full animate-spin"},null,-1)])])):S("",!0),h.value&&!M.value?(n(),r("div",bl,[z(f(Ma),{size:24})])):S("",!0),rt(t("img",{src:y.value||w.value,alt:e.attachment.name,class:"w-full h-full object-cover",onLoad:T,onError:B},null,40,yl),[[ht,!p.value&&!h.value||M.value]]),w.value?(n(),r("div",kl,[...G[2]||(G[2]=[t("span",{class:"rounded-full bg-white/90 px-3 py-1 text-xs font-medium text-neutral-900 opacity-0 group-hover:opacity-100 transition-opacity shadow-sm"}," View ",-1)])])):S("",!0)],64)):(n(),r($e,{key:1},[z(f(bn),{size:14,class:"text-neutral-500 mr-1 flex-shrink-0"}),t("span",wl,m(e.attachment.name),1)],64)),e.showRemove?(n(),r("button",{key:2,onClick:ze(E,["stop"]),class:"absolute -top-1 -right-1 w-4 h-4 rounded-full bg-red-500 text-white flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity"},[z(f(Et),{size:10})])):S("",!0)],2))}}),_l=["onMouseenter","onMouseleave","onClick"],$l=["onClick"],Cl={key:0,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"3",stroke:"currentColor",class:"w-3 h-3 text-white"},Sl={key:1,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"2.5",stroke:"currentColor",class:"w-3 h-3 text-white"},Tl={key:0,class:"w-full text-center text-xs text-neutral-400 dark:text-neutral-500 py-1"},Il={key:0,class:"text-[10px] font-semibold uppercase tracking-wider text-neutral-400 dark:text-neutral-500 leading-none mb-1"},Al=["contenteditable","onInput"],El=["innerHTML"],Ll={key:3,class:"inline-flex items-center gap-1 rounded-full bg-neutral-100 dark:bg-neutral-800/60 px-3 py-2"},Ml={key:0,class:"inline-flex items-center gap-1.5"},Rl=["src"],Dl={key:1,class:"inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-[4px] border agents-border-selected agents-surface-selected text-[8px] font-semibold leading-none agents-text-selected","aria-hidden":"true"},Fl=["title","onClick"],Pl={key:0,class:"flex flex-wrap gap-2 px-4"},Nl=["onClick","onMouseenter"],zl={key:0,class:"flex items-center gap-2 px-4 py-2 min-w-0"},jl={key:0,class:"truncate text-neutral-700 dark:text-neutral-300 min-w-0"},Bl={key:1,class:"truncate text-neutral-600 dark:text-neutral-400 min-w-0"},Ol={class:"text-neutral-500 dark:text-neutral-400 flex-shrink-0"},Vl={class:"work-op-strip","aria-label":"Operation statuses"},ql=["title"],Hl={key:1,class:"px-4 py-2 space-y-2.5"},Ul={class:"flex items-center gap-2"},Wl={class:"min-w-0 truncate text-neutral-700 dark:text-neutral-300"},Kl={class:"shrink-0 text-neutral-500 dark:text-neutral-400"},Jl={class:"work-op-strip","aria-label":"Operation statuses"},Gl=["title"],Yl={key:0,class:"space-y-1"},Ql=["onClick","onMouseenter"],Xl=["title"],Zl={class:"font-mono font-medium text-neutral-800 dark:text-neutral-100 flex-shrink-0"},eo={key:2,class:"text-neutral-500 dark:text-neutral-400 truncate flex-1 min-w-0"},to={key:0,class:"pl-5 mt-2 space-y-3"},no={key:0},ao={class:"divide-y divide-neutral-100/80 rounded-md bg-white px-2.5 py-1.5 ring-1 ring-neutral-200/70 dark:divide-neutral-800/70 dark:bg-neutral-950/60 dark:ring-neutral-800/70"},ro={class:"pt-1 font-mono text-[12px] text-neutral-500 dark:text-neutral-500"},so={class:"min-w-0"},lo={key:1,class:"break-words text-neutral-800 dark:text-neutral-200"},oo={key:1},io={class:"text-[10px] font-semibold uppercase tracking-wider text-neutral-400 dark:text-neutral-500 mb-1"},uo=["onClick","onMouseenter"],co={key:0,class:"m-0 whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed"},fo={key:1},vo=["onClick"],po={key:0,class:"pl-5 mt-2 whitespace-pre-wrap break-words rounded-md bg-white dark:bg-neutral-950/60 ring-1 ring-neutral-200/70 dark:ring-neutral-800/70 px-2.5 py-2 text-neutral-700 dark:text-neutral-300"},go={key:2,class:"pl-5 pb-1 break-words text-neutral-600 dark:text-neutral-400"},mo={class:"flex items-center justify-between gap-3 border-b border-neutral-100 px-3 py-2 dark:border-neutral-900"},ho={class:"min-w-0"},xo={class:"truncate text-[12px] font-medium text-neutral-800 dark:text-neutral-100"},bo={class:"rounded-full bg-neutral-100 px-2 py-0.5 text-[10px] text-neutral-500 ring-1 ring-inset ring-neutral-200 dark:bg-neutral-900 dark:text-neutral-400 dark:ring-neutral-800"},yo={class:"divide-y divide-neutral-100 dark:divide-neutral-900"},ko=["onClick"],wo={class:"flex items-center gap-3"},_o=["src"],$o={class:"min-w-0 flex-1"},Co={class:"flex items-center gap-2"},So={class:"truncate text-[13px] font-medium text-neutral-900 dark:text-neutral-50"},To={class:"mt-0.5 truncate text-[11px] text-neutral-500 dark:text-neutral-400"},Io={class:"shrink-0 rounded-full bg-neutral-100 px-1.5 py-0.5 text-[10px] leading-none text-neutral-500 dark:bg-neutral-900 dark:text-neutral-400"},Ao={class:"ml-11 mt-1 truncate text-[11px] text-neutral-500 dark:text-neutral-400"},Eo={key:0,class:"ml-12 mt-1.5 space-y-1.5 border-l border-neutral-200 pl-2.5 dark:border-neutral-800"},Lo={class:"flex items-center gap-2 text-[10px] text-neutral-500 dark:text-neutral-400"},Mo={class:"font-medium uppercase text-neutral-600 dark:text-neutral-300"},Ro={key:0,class:"italic"},Do=["innerHTML"],Fo={key:1,class:"mt-2 flex flex-wrap gap-2"},Po=["onClick"],No={class:"flex items-center gap-3"},zo=["src"],jo={class:"min-w-0 flex-1"},Bo={class:"flex items-center gap-2"},Oo={class:"truncate text-[13px] font-medium text-neutral-900 dark:text-neutral-50"},Vo={class:"mt-0.5 truncate text-[11px] text-neutral-500 dark:text-neutral-400"},qo={class:"shrink-0 rounded-full bg-neutral-100 px-1.5 py-0.5 text-[10px] leading-none text-neutral-500 dark:bg-neutral-900 dark:text-neutral-400"},Ho={class:"ml-12 mt-1 truncate text-[11px] text-neutral-500 dark:text-neutral-400"},Uo={key:0,class:"ml-12 mt-2 space-y-1.5 border-l border-neutral-200 pl-2.5 dark:border-neutral-800"},Wo={class:"flex items-center gap-2 text-[10px] text-neutral-500 dark:text-neutral-400"},Ko={class:"font-medium uppercase text-neutral-600 dark:text-neutral-300"},Jo={key:0,class:"italic"},Go=["innerHTML"],Yo={key:1,class:"mt-2 flex flex-wrap gap-2"},Qo=We({__name:"AgentMessages",props:{messages:{},threadId:{},selectedMessageId:{},selectedLogId:{},selectedEffectId:{},hoveredLogId:{},isEditMode:{type:Boolean},selectedForDelete:{},editedMessages:{},assistantAvatarSrc:{},userAvatarSrc:{}},emits:["messageClick","messageHover","selectionChange","messageEdit"],setup(e,{expose:i,emit:a}){const s=e,l=a;sa.setOptions({gfm:!0,breaks:!0});function o(g){const b=s.selectedForDelete?.has(g)??!1;l("selectionChange",g,!b)}function p(g,b){const ke=g.target.innerText;l("messageEdit",b,ke)}function h(g){return g.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function L(g){if(typeof window>"u"||typeof DOMParser>"u")return g.replace(/<script[\s\S]*?>[\s\S]*?<\/script>/gi,"").replace(/\son\w+="[^"]*"/gi,"").replace(/\s(href|src)="javascript:[^"]*"/gi,"");const b=new DOMParser().parseFromString(g,"text/html"),$=["script","style","iframe","object","embed"];for(const ke of $)b.querySelectorAll(ke).forEach(te=>te.remove());return b.body.querySelectorAll("*").forEach(ke=>{for(const te of Array.from(ke.attributes)){const Pe=te.name.toLowerCase(),lt=te.value.trim().toLowerCase();(Pe.startsWith("on")||Pe==="style"||(Pe==="href"||Pe==="src")&&(lt.startsWith("javascript:")||lt.startsWith("data:text/html")))&&ke.removeAttribute(te.name)}}),b.body.innerHTML}function M(g){return!!g&&typeof g=="object"&&!Array.isArray(g)}function w(g){const b=h(st(g||"")),$=sa.parse(b,{async:!1});return L($)}function y(g){return s.editedMessages?.has(g)??!1}const T=x(new Map);function B(g,b){b?T.value.set(g,b):T.value.delete(g)}function E(g,b){B(g,b instanceof HTMLElement?b:null)}function H(g){const b=s.messages.findIndex($=>$.log_id===g);if(b<=0)return-1;for(let $=b-1;$>=0;$--){const ke=s.messages[$];if(ke.role==="user")return $;if(ke.role==="assistant"&&ke.log_id)break}return-1}function U(g){for(let b=0;b<s.messages.length;b++){const $=s.messages[b];if($.log_id===g||$.type==="work"&&$.items&&$.items.some(Pe=>Pe.log_id===g||Pe.response_log_id===g))return b}return-1}function G(g,b){const ke=U(g);if(ke===-1)return!1;const te=T.value.get(ke);if(!te)return!1;const Pe=s.messages[ke];let lt=null;if(Pe.role==="assistant"&&Pe.log_id){const _=H(Pe.log_id);lt=_!==-1?T.value.get(_):null}const gt=b.getBoundingClientRect(),I=te.getBoundingClientRect();if(I.top<gt.top){const _e=(lt||te).getBoundingClientRect().top-gt.top-10;b.scrollBy({top:_e,behavior:"smooth"})}else if(I.bottom>gt.bottom){const _=I.bottom-gt.bottom+10;b.scrollBy({top:_,behavior:"smooth"})}else if(lt){const _=lt.getBoundingClientRect();if(_.top<gt.top){const R=_.top-gt.top-10;b.scrollBy({top:R,behavior:"smooth"})}}return!0}function q(g){for(const b of s.messages){if(b.type!=="work")continue;if(b.items.some(te=>te.log_id===g||te.response_log_id===g))return!0}return!1}i({scrollToLogId:G,hasWorkblockForLogId:q});function j(g){const b=s.messages[g];if(b.log_id)return b.log_id;if(b.role==="user")for(let $=g+1;$<s.messages.length;$++){const ke=s.messages[$];if(ke.log_id)return ke.log_id;if(ke.role==="user")break}return null}function J(g){if(g.type!=="text")return null;const b=g.metadata;if(!M(b))return null;const $=b.scheduledEffect;return M($)?$:null}function ve(g){const b=J(g);return typeof b?.id=="string"?b.id:null}function ae(g){const b=J(g);return typeof b?.name=="string"?b.name:null}function Q(g){return ve(g)!==null}function W(g){const b=ve(g),$=ae(g);return $&&b?`${$} (${b})`:$||"Scheduled effect"}function fe(g){if(g.type!=="text")return null;const b=J(g),$=typeof b?.id=="string"?b.id:null;return $?{id:$,name:typeof b?.name=="string"?b.name:null}:null}function X(g,b){return b?j(g)===b:!1}function Re(g,b){if(s.isEditMode||g.silent||g.role==="user"&&!Q(g))return"";const $=ve(g),ke=!!j(b)||Q(g);return X(b,s.selectedLogId??null)||$&&$===s.selectedEffectId?"message-log-state message-log-state--selected":j(b)&&X(b,s.hoveredLogId??null)?"message-log-state message-log-state--hovered":ke?"message-log-state":""}function Fe(g){const b=j(g);b&&l("messageHover",b)}function re(g){j(g)&&l("messageHover",null)}function De(g){const b=s.messages[g],$=j(g),ke=fe(b);($||ke)&&l("messageClick",b.id,$,ke)}function P(g){const b=s.messages[g],$=fe(b);$&&l("messageClick",b.id,j(g),$)}const de=x(new Set),le=x(new Set),ye=x(new Set),me=x(new Set);function pe(g){de.value.has(g)?de.value.delete(g):de.value.add(g)}function Me(g){le.value.has(g)?le.value.delete(g):le.value.add(g)}function Ce(g){ye.value.has(g)?ye.value.delete(g):ye.value.add(g)}function ne(g){me.value.has(g)?me.value.delete(g):me.value.add(g)}function Z(g){if(!g)return{};try{const b=JSON.parse(g);return b&&typeof b=="object"&&!Array.isArray(b)?b:{raw:b}}catch{return{raw:g}}}function K(g){if(!g)return null;const b=Z(g),$=Object.keys(b);if($.length===0)return null;const ke=b[$[0]];return typeof ke=="string"?Ve(se(ke)):JSON.stringify(ke)}const xe={bash:"bash",css:"css",html:"html",js:"javascript",jsx:"jsx",json:"json",md:"markdown",mjs:"javascript",sh:"bash",ts:"typescript",tsx:"tsx",vue:"vue",yaml:"yaml",yml:"yaml"};function ue(g){if(typeof g!="string")return null;const b=g.split("?")[0]?.split("#")[0]?.split(".").pop()?.toLowerCase();return b?xe[b]??null:null}function Se(g){if(typeof g!="string")return null;const b=g.toLowerCase();return b.includes("json")?"json":b.includes("typescript")?"typescript":b.includes("javascript")?"javascript":b.includes("html")?"html":b.includes("css")?"css":b.includes("markdown")?"markdown":b.includes("yaml")||b.includes("yml")?"yaml":b.includes("shell")||b.includes("bash")?"bash":null}function Ue(g){try{return JSON.stringify(JSON.parse(g),null,2)}catch{return null}}function D(g){try{return JSON.parse(g)}catch{return null}}function be(g){return g&&typeof g=="object"&&!Array.isArray(g)?g:null}function se(g){return g.replace(/\\r\\n/g,`
|
|
2
|
+
import{d as We,z as N,e as n,k as Ee,g as Lt,m as ee,B as At,c as A,an as Vt,w as he,r as x,O as qt,a5 as Ja,ao as Ga,J as f,a4 as Un,C as Ya,D as Qa,b as r,f as t,q as S,j as z,s as Ge,u as m,h as Be,a as Ht,Z as on,o as zt,ap as Xa,aq as Et,ag as _t,F as $e,l as Ne,K as ze,n as vt,ar as Ia,as as Aa,ah as Pt,at as Za,au as er,av as zn,aw as Ea,ax as La,x as rt,ay as xn,az as tr,X as nr,Y as ar,aA as Ma,y as ht,aB as bn,aC as wt,_ as jn,aD as rr,a3 as Mt,aE as sr,am as ln,aF as lr,aG as yn,aH as Ra,aI as Da,aJ as or,al as ir,aK as Fa,aL as dr,aM as ur,aN as cr,aO as fr,aP as vr,aQ as pr,aR as gr,aS as mr,L as Ot,aT as Xt,aU as Bn,aV as Wn,P as Nt,H as hr,aW as Pa,aX as xr,aY as br,aZ as yr,a_ as An,a$ as kr,b0 as wr,b1 as _r,b2 as Xn,b3 as kn,b4 as $r,b5 as Zn,b6 as ea,b7 as On,W as Cr,b8 as Sr,b9 as Tr,ba as ta}from"./vue.js";import{G as Ir,a as He,H as Kn,J as Ar,K as Vn,I as cn,j as na,L as aa,B as Na,M as Er,N as ra,O as Lr,k as dt,P as za,Q as ja,A as qe,R as Mr,g as wn,V as Rr,S as En,_ as fn,d as rn,e as an,U as Dr,W as Fr,u as Pr,z as Rt,o as Nr,v as zr,x as jr,y as Br,X as Or,Y as Vr,w as qr}from"./index.js";import{e as sa}from"./vendor.js";import{_ as Ba}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{_ as Jn,u as Hr}from"./CopyButton.vue_vue_type_script_setup_true_lang.js";import{_ as at,W as Ur,a as Wr,b as Kr,c as Jr,d as Gr,e as Zt}from"./monaco.js";import{J as Ln}from"./JsonViewer.js";import{_ as Yr}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";import{u as Oa,_ as Va,b as vn,c as Qr,P as Xr}from"./PromptModal.js";const Zr=We({__name:"UiMenuItem",props:{active:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},as:{default:"button"}},emits:["click"],setup(e,{emit:i}){const a=e,s=i;function l(o){a.disabled||s("click",o)}return(o,p)=>(n(),N(At(e.as),{type:e.as==="button"?"button":void 0,disabled:e.as==="button"?e.disabled:void 0,onClick:l,class:ee(["w-full flex items-center gap-2 px-3 py-2 text-sm text-left transition-colors",[e.disabled?"opacity-50 cursor-not-allowed":"hover:bg-neutral-100 dark:hover:bg-neutral-800 cursor-pointer",e.active?"bg-accent-50 dark:bg-accent-950/30":""]])},{default:Ee(()=>[Lt(o.$slots,"default")]),_:3},8,["type","disabled","class"]))}});async function sn(e){const i=await Ir(e);if(!i.ok)throw new Error(`Request failed for ${e}`);return i.json()}async function es(e){if(!e)return null;try{return(await sn(`/prompts/${encodeURIComponent(e)}`)).prompt}catch{return null}}async function Th(e){if(!e)return null;try{return await sn(`/tools/${encodeURIComponent(e)}`)}catch{return null}}function ts(e){const i=e?.env??e?.tenvs;return!i||typeof i!="object"?{}:i}function qa(e){return Object.keys(ts(e)).filter(i=>i.trim().length>0)}function ns(e){const i=e?.variables||[],a=new Map;for(const s of i){const l=s.name?.trim();l&&a.set(l,{...s,name:l})}for(const s of qa(e))a.has(s)||a.set(s,{name:s,type:"text",required:!1,description:"Default value set on this prompt."});return Array.from(a.values())}function Ih(e){return e?!e.packed&&e.id===e.name:!1}function as(e,i){return i?.type?i.type:e.startsWith("provider:")?"provider":e.startsWith("mcp:")?"mcp":"unknown"}function rs(e){return e.startsWith("provider:")?e.slice(9):e.startsWith("mcp:")?e.slice(4):e}function ss(e,i){if(!e)return null;const a=i[e];if(a)return a;for(const s of Object.values(i))if(s.name===e)return s;return null}function ls(e,i,a={}){const s=i[e.name],l=s?.model;return{name:e.name,displayName:rs(e.name),kind:as(e.name,s),description:s?.description||"",variables:s?.variables||[],model:l,resolvedModel:ss(l,a),config:e}}function Ah(e,i,a,s){const l=i==="b"&&e.type!=="dual_ai",o=i==="a"?e.side_a_label||"Side A":e.side_b_label||(l?"Human":"Side B"),p=i==="a"?e.side_a_agent_prompt:e.side_b_agent_prompt,h=i==="a"?e.side_a_stop_on_response:e.side_b_stop_on_response,L=i==="a"?e.side_a_stop_tool:e.side_b_stop_tool,M=i==="a"?e.side_a_max_steps:e.side_b_max_steps,w=[i==="a"?e.side_a_session_stop_tool:e.side_b_session_stop_tool,i==="a"?e.side_a_session_fail_tool:e.side_b_session_fail_tool,i==="a"?e.side_a_session_status_tool:e.side_b_session_status_tool].filter(B=>!!B),y=(a?.tools||[]).map(B=>ls(B,s.toolsCatalog,s.models)),T=y.filter(B=>B.kind==="handoff"||B.kind==="subagent");return{id:i,agentName:e.name,label:o,mode:l?"human":"ai",promptName:p||null,stopOnResponse:h,stopTool:L,maxSteps:M,sessionStopTool:i==="a"?e.side_a_session_stop_tool:e.side_b_session_stop_tool,sessionTools:w,prompt:a,model:a&&s.models[a.model_id]||null,tools:y,hooks:(a?.hooks||[]).map(B=>s.hooks[B]||{id:B,hook:"unknown"}),variables:ns(a),variableEnvNames:qa(a),outgoingAgents:T}}function os(e){const{limit:i=50,offset:a=0,agentId:s=null,userId:l=null,search:o=null,startDate:p=null,endDate:h=null,autoFetch:L=!0}=e||{},M=A(()=>{const j=new URLSearchParams,J=typeof i=="number"?i:i.value,ve=typeof a=="number"?a:a.value,ae=typeof s=="string"?s:s?.value,Q=typeof l=="string"?l:l?.value,W=typeof o=="string"?o:o?.value,fe=typeof p=="number"?p:p?.value,X=typeof h=="number"?h:h?.value;return j.append("limit",J.toString()),j.append("offset",ve.toString()),ae&&(j.append("agent_id",ae),j.append("include_children","1")),Q&&j.append("user_id",Q),W&&j.append("search",W),fe&&j.append("startDate",fe.toString()),X&&j.append("endDate",X.toString()),He(`/api/threads?${j.toString()}`)}),{data:w,error:y,isFetching:T,isFinished:B,execute:E,abort:H}=Vt(M,{immediate:L,refetch:!0}).get().json(),U=A(()=>w.value?.threads||[]),G=A(()=>w.value?.total||0),q=A(()=>w.value?.hasMore||!1);return{threads:U,total:G,hasMore:q,error:y,isFetching:T,isFinished:B,refetch:E,abort:H}}function Gn(e){const i=A(()=>{const M=typeof e=="string"?e:e?.value;return M?He(`/api/threads/${M}`):""}),{data:a,error:s,isFetching:l,isFinished:o,execute:p,abort:h}=Vt(i,{immediate:!1,refetch:!0}).get().json();return he(i,M=>{M?p():(h(),a.value=null)},{immediate:!0}),{thread:A(()=>a.value?{id:a.value.thread.id,agent_id:a.value.thread.agent_id,user_id:a.value.thread.user_id,tags:a.value.thread.tags||[],parent:a.value.thread.parent??null,terminated:a.value.thread.terminated??null,created_at:a.value.thread.created_at,agent:a.value.agent||{id:"",title:"Unknown",type:"unknown"},stats:a.value.stats}:null),error:s,isFetching:l,isFinished:o,refetch:p,abort:h}}const is={key:0,class:"flex min-h-[500px] items-center justify-center"},ds={class:"flex min-h-0 min-w-0 flex-1 flex-col"},us={key:0,class:"sticky top-0 z-10 flex min-w-0 shrink-0 items-center gap-2 border-b border-neutral-200 bg-neutral-50/95 px-3 backdrop-blur dark:border-neutral-800 dark:bg-neutral-950/95"},cs={class:"min-w-0 flex-1"},fs={class:"edit-sections-query"},vs=We({__name:"AgentModal",props:{modelValue:{type:Boolean},editAgent:{},mode:{},apiError:{},readonly:{type:Boolean,default:!1},saving:{type:Boolean,default:!1},inline:{type:Boolean,default:!1},inlineGlobalNotice:{type:Boolean,default:!1},inlineAccentTabs:{type:Boolean,default:!1},inlineFlatSections:{type:Boolean,default:!1},surfaceSection:{default:null}},emits:["update:modelValue","save"],setup(e,{expose:i,emit:a}){const s=e,l=a,o=A(()=>s.mode==="edit"),p=A(()=>!!s.surfaceSection),h=A(()=>s.inline&&s.inlineFlatSections),L=A(()=>s.inline||p.value),M=A(()=>L.value?{config:Kn}:{}),w=A(()=>o.value&&(s.editAgent?.id||s.editAgent?.name)||""),y=Ar(()=>w.value,{autoload:!1}),T=x(null),B=["basics","side-a","side-b","variables"],{activeTab:E,scrollToSection:H}=Oa(T,B),U=A(()=>[{id:"basics",label:"Basics",icon:Vn},{id:"side-a",label:"Side A",icon:cn},{id:"side-b",label:"Side B",icon:y.agentType.value==="ai_human"?na:cn},{id:"variables",label:"Variables",icon:aa}]),G=x(!1),q=x(!1),j=x(null);let J=0;const ve=A(()=>JSON.stringify({name:y.name.value,title:y.title.value,agentType:y.agentType.value,exposeAsTool:y.exposeAsTool.value,toolDescription:y.toolDescription.value,maxSessionTurns:y.maxSessionTurns.value,sideALabel:y.sideALabel.value,sideAAgentPrompt:y.sideAAgentPrompt.value,sideAStopOnResponse:y.sideAStopOnResponse.value,sideAStopOnToolCall:y.sideAStopOnToolCall.value,sideAStopTool:y.sideAStopTool.value,sideAStopToolResponseProperty:y.sideAStopToolResponseProperty.value,sideAManualStopCondition:y.sideAManualStopCondition.value,sideAMaxSteps:y.sideAMaxSteps.value,sideAEndConversationTool:y.sideAEndConversationTool.value,sideBLabel:y.sideBLabel.value,sideBAgentPrompt:y.sideBAgentPrompt.value,sideBStopOnResponse:y.sideBStopOnResponse.value,sideBStopOnToolCall:y.sideBStopOnToolCall.value,sideBStopTool:y.sideBStopTool.value,sideBStopToolResponseProperty:y.sideBStopToolResponseProperty.value,sideBMaxSteps:y.sideBMaxSteps.value,sideBEndConversationTool:y.sideBEndConversationTool.value,agentEnv:y.agentEnv.value})),ae=A(()=>q.value?"Saved":s.inline&&o.value?"Save Agent Changes":o.value?"Update Agent":"Create Agent"),Q=A(()=>s.saving||s.inline&&!G.value),W=A(()=>p.value||s.inline?{class:s.inline?"flex h-full min-w-0 flex-col":"min-w-0"}:{modelValue:s.modelValue,title:o.value?"Edit Agent":"Create Agent",width:"max-w-5xl",contentPadding:!1});function fe(){q.value=!1,j.value=null}function X(){Be().then(()=>{G.value=!!y.formNode.value?.context?.state.dirty})}function Re(me){y.handleFormNode(me),me.on("commit",X),me.on("reset",X),me.on("message-added",X),me.on("message-updated",X),me.on("message-removed",X),X()}async function Fe(){const me=++J;await Be();const pe=y.formNode.value;if(!pe||me!==J){G.value=!1;return}await pe.settled,pe.reset(pe.value),await Be(),me===J&&(G.value=!1)}async function re(){await Fe(),q.value=!0,j.value=ve.value}async function De(){fe(),y.resetForm(),await Be(),o.value&&w.value?await y.load():await y.loadPrerequisites(),await Fe()}async function P(){const me=await y.prepareSubmit();me&&l("save",me)}function de(){y.resetForm(),fe(),l("update:modelValue",!1)}async function le(){fe(),await De()}function ye(me){return!s.surfaceSection||s.surfaceSection===me}return he(()=>s.modelValue,async me=>{me?await De():(J+=1,y.resetForm(),fe(),G.value=!1)},{immediate:!0}),he(()=>w.value,async(me,pe)=>{!s.modelValue||me===pe||await De()}),he(ve,me=>{q.value&&j.value!==null&&me!==j.value&&fe()}),he(G,me=>{me&&fe()}),i({formNode:y.formNode,markSaveSucceeded:re,markCurrentFormCleanAfterSettle:Fe,resetSaveSuccess:fe}),(me,pe)=>{const Me=qt("FormKit");return n(),N(At(e.inline||p.value?"div":Ba),Ja(W.value,Ga(e.inline||p.value?void 0:{"update:modelValue":Ce=>me.$emit("update:modelValue",Ce)})),{default:Ee(()=>[(n(),N(At(L.value?f(Un):"div"),Ya(Qa(M.value)),{default:Ee(()=>[f(y).isLoading.value?(n(),r("div",is,[...pe[0]||(pe[0]=[t("span",{class:"text-neutral-500"},"Loading agent data...",-1)])])):(n(),N(Me,{key:1,type:"form",id:"agent-form",actions:!1,disabled:e.readonly||e.saving,onSubmit:P,onNode:Re,"dirty-behavior":"compare","outer-class":"$reset flex min-h-0 min-w-0 flex-1 flex-col","form-class":"$reset flex-1 min-h-0 min-w-0 flex flex-col"},{default:Ee(()=>[t("div",ds,[p.value?S("",!0):(n(),r("nav",us,[Lt(me.$slots,"nav-leading",{},void 0,!0),t("div",cs,[z(f(Va),{tabs:U.value,"active-tab":f(E),"accent-active":e.inlineAccentTabs,orientation:"horizontal",onSelect:f(H)},null,8,["tabs","active-tab","accent-active","onSelect"])])])),t("div",{ref_key:"contentRef",ref:T,class:ee(["min-h-0 flex-1 overflow-y-auto",p.value?"p-5":h.value?"bg-neutral-100 dark:bg-neutral-950":"bg-neutral-100 p-5 dark:bg-neutral-950"])},[t("div",fs,[e.inlineGlobalNotice?(n(),r("div",{key:0,class:ee(["edit-sections-notice rounded-md border border-amber-300 bg-amber-50 px-3 py-2 text-sm text-amber-800 dark:border-amber-700 dark:bg-amber-950/30 dark:text-amber-200",h.value?"mx-5 mb-4 mt-5":"mb-4"])}," Changes here are global and will affect all new messages across all threads. ",2)):S("",!0),t("div",{class:ee([h.value?"space-y-4 pb-5":"space-y-4","edit-sections-stack"])},[e.apiError?(n(),N(f(Na),{key:0,variant:"error"},{default:Ee(()=>[Ge(m(e.apiError),1)]),_:1})):S("",!0),ye("identity")?(n(),N(f(vn),{key:1,id:"section-basics",title:"Basics",icon:f(Vn),flat:h.value},{default:Ee(()=>[z(Er,{form:f(y),"is-edit-mode":o.value},null,8,["form","is-edit-mode"])]),_:1},8,["icon","flat"])):S("",!0),ye("side-a")?(n(),N(f(vn),{key:2,id:"section-side-a",title:"Side A (AI)",icon:f(cn),flat:h.value},{default:Ee(()=>[z(ra,{form:f(y),side:"a"},null,8,["form"])]),_:1},8,["icon","flat"])):S("",!0),ye("side-b")?(n(),N(f(vn),{key:3,id:"section-side-b",title:f(y).agentType.value==="ai_human"?"Side B (Human)":"Side B (AI)",icon:f(y).agentType.value==="ai_human"?f(na):f(cn),flat:h.value},{default:Ee(()=>[z(ra,{form:f(y),side:"b"},null,8,["form"])]),_:1},8,["title","icon","flat"])):S("",!0),ye("variables")?(n(),N(f(vn),{key:4,id:"section-variables",title:"Variables",icon:f(aa),flat:h.value},{default:Ee(()=>[z(Lr,{form:f(y),readonly:e.readonly},null,8,["form","readonly"])]),_:1},8,["icon","flat"])):S("",!0)],2)])],2)]),p.value?S("",!0):(n(),N(Qr,{key:0,"form-id":"agent-form","form-node":f(y).formNode.value,readonly:e.readonly,inline:e.inline,saving:e.saving,dirty:G.value,"save-succeeded":q.value,"save-label":ae.value,"save-disabled":Q.value,"cancel-label":e.readonly?"Close":"Cancel",onCancel:de,onDiscard:le},null,8,["form-node","readonly","inline","saving","dirty","save-succeeded","save-label","save-disabled","cancel-label"]))]),_:3},8,["disabled"]))]),_:3},16))]),_:3},16)}}}),ps=dt(vs,[["__scopeId","data-v-e47eeb63"]]);function Ha(){const e=He("/api/agents"),{data:i,error:a,isFetching:s,isFinished:l,execute:o}=Vt(e,{immediate:!0}).get().json();return{agents:A(()=>i.value?.agents||[]),error:a,isFetching:s,isFinished:l,refetch:o}}function Jt(e,i,...a){}function Yn(e){return!!e&&typeof e=="object"}function _n(e){return typeof e=="string"?e:null}function gs(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function ms(e){if(Yn(e)&&!(typeof e.name!="string"||typeof e.title!="string"||typeof e.type!="string"))return{name:e.name,title:e.title,type:e.type,description:_n(e.description)??void 0,icon:_n(e.icon)??void 0}}function hs(e){return!Yn(e)||typeof e.id!="string"||typeof e.agent_name!="string"||typeof e.created_at!="number"?null:{id:e.id,agent_name:e.agent_name,user_id:_n(e.user_id),tags:Array.isArray(e.tags)?e.tags.filter(i=>typeof i=="string"):null,parent:_n(e.parent),terminated:gs(e.terminated),created_at:e.created_at,agent:ms(e.agent)}}function xs(e){if(!Yn(e))return null;if(e.type==="thread_deleted")return typeof e.threadId=="string"?{type:e.type,threadId:e.threadId}:null;if(e.type==="thread_created"||e.type==="thread_updated"){const i=hs(e.thread);return i?{type:e.type,thread:i}:null}return null}function bs(e){const{autoConnect:i=!0,onEvent:a}=e||{},s=x(null),l=x(!1),o=x(null);let p=0,h=null,L=null,M=!0,w=null;const y=3e4,T=3e4,B=()=>{h&&(clearTimeout(h),h=null),L&&(clearInterval(L),L=null)},E=()=>{L&&clearInterval(L),L=setInterval(()=>{s.value&&s.value.readyState===WebSocket.OPEN&&s.value.send("ping")},T)},H=()=>{if(!M)return;const j=Math.min(1e3*Math.pow(2,p),y);p++,Jt(),h=setTimeout(()=>{M&&U()},j)},U=()=>{s.value&&(w=null,s.value.close());const j=window.location.protocol==="https:"?"wss:":"ws:",J=window.location.host,ve=za(`${j}//${J}${He("/api/events")}`);try{const ae=new WebSocket(ve);s.value=ae,w=ae,ae.onopen=()=>{w===ae&&(l.value=!0,o.value=null,p=0,E(),Jt("AgentBuilderEvents","WebSocket connected"))},ae.onmessage=Q=>{if(w===ae)try{if(typeof Q.data=="string"&&Q.data==="pong")return;const W=xs(JSON.parse(Q.data));W&&a&&a(W)}catch{o.value="Failed to parse event update"}},ae.onerror=Q=>{w===ae&&(o.value="WebSocket connection error")},ae.onclose=()=>{w===ae&&(l.value=!1,B(),Jt("AgentBuilderEvents","WebSocket disconnected"),H())}}catch(ae){o.value=ae instanceof Error?ae.message:"Failed to create WebSocket",H()}},G=()=>{M=!0,p=0,U()},q=()=>{M=!1,B(),w=null,s.value&&(s.value.close(),s.value=null),l.value=!1,p=0};return i&&G(),Ht(()=>{q()}),{wsConnected:l,wsError:o,connect:G,disconnect:q}}const ys={class:"relative inline-flex items-center"},ks={key:0,class:"inline-block w-2 h-2 rounded-full bg-green-500 dark:bg-green-400"},ws={key:1,class:"inline-block w-2 h-2 rounded-full bg-neutral-400 dark:bg-neutral-600"},_s={key:0},$s={key:1},Ua=We({__name:"StatusDot",props:{connected:{type:Boolean},error:{type:Boolean}},setup(e){const i=x(!1),a=x(null);return(s,l)=>(n(),r("div",ys,[t("span",{class:"p-0.5 cursor-default outline-none",tabindex:"-1",onMouseenter:l[0]||(l[0]=o=>i.value=!0),onMouseleave:l[1]||(l[1]=o=>i.value=!1)},[e.connected?(n(),r("span",ks)):(n(),r("span",ws))],32),z(on,{"enter-active-class":"transition-opacity duration-150","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity duration-100","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:Ee(()=>[i.value?(n(),r("div",{key:0,ref_key:"popoverRef",ref:a,class:ee(["absolute top-full left-1/2 -translate-x-1/2 mt-1 px-2 py-1 text-xs rounded shadow-lg whitespace-nowrap z-50 border",{"bg-green-50 dark:bg-green-950 border-green-200 dark:border-green-800 text-green-700 dark:text-green-300":e.connected,"bg-neutral-50 dark:bg-neutral-900 border-neutral-200 dark:border-neutral-700 text-neutral-600 dark:text-neutral-400":!e.connected}])},[e.connected?(n(),r("span",_s,"Live - Connected")):(n(),r("span",$s,"Offline"))],2)):S("",!0)]),_:1})]))}}),Cs={class:"relative min-w-0"},Ss={class:"truncate flex-1 text-left"},Ts={key:0},Is=["onClick"],As={class:"border-t border-neutral-200 dark:border-neutral-700"},Es={class:"flex items-center justify-between"},Ls={class:"space-y-4 date-filter-inputs"},Ms=We({__name:"DateFilterDropdown",props:{startDate:{},endDate:{}},emits:["update:startDate","update:endDate"],setup(e,{emit:i}){const a=e,s=i,l=x(!1),o=x(!1),p=x(null),h=x(null),L=x(""),M=x(""),w=[{label:"All time",value:"all",getRange:()=>({startDate:null,endDate:null})},{label:"Today",value:"today",getRange:()=>{const Q=new Date,W=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate());return{startDate:Math.floor(W.getTime()/1e3),endDate:null}}},{label:"Last 3 days",value:"3days",getRange:()=>{const Q=new Date,W=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()-2);return{startDate:Math.floor(W.getTime()/1e3),endDate:null}}},{label:"Last 7 days",value:"7days",getRange:()=>{const Q=new Date,W=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()-6);return{startDate:Math.floor(W.getTime()/1e3),endDate:null}}},{label:"Last 30 days",value:"30days",getRange:()=>{const Q=new Date,W=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()-29);return{startDate:Math.floor(W.getTime()/1e3),endDate:null}}}],y=A(()=>{if(!a.startDate&&!a.endDate)return"all";for(const Q of w){const W=Q.getRange();if(W.startDate===a.startDate&&W.endDate===a.endDate)return Q.value}return"custom"}),T=A(()=>{if(!a.startDate&&!a.endDate)return"All time";const Q=w.find(fe=>fe.value===y.value);if(Q&&y.value!=="custom")return Q.label;const W=fe=>new Date(fe*1e3).toLocaleDateString("en-US",{month:"short",day:"numeric"});return a.startDate&&a.endDate?`${W(a.startDate)} - ${W(a.endDate)}`:a.startDate?`From ${W(a.startDate)}`:a.endDate?`Until ${W(a.endDate)}`:"Custom"}),B=A(()=>a.startDate!==null||a.endDate!==null);function E(){if(!p.value||!h.value)return;const Q=p.value.getBoundingClientRect();h.value.style.position="fixed",h.value.style.top=`${Q.bottom+8}px`,h.value.style.left=`${Q.left}px`;const W=o.value?280:180;h.value.style.minWidth=`${Q.width}px`,h.value.style.maxWidth=`${Math.max(Q.width,W)}px`,h.value.style.width="auto",h.value.style.margin="0"}function H(){l.value?U():(l.value=!0,Be(()=>{if(h.value&&(h.value.setAttribute("popover","auto"),h.value.addEventListener("toggle",G),"showPopover"in h.value))try{h.value.showPopover()}catch{}E()}))}function U(){if(h.value){if("hidePopover"in h.value)try{h.value.hidePopover()}catch{}h.value.removeEventListener("toggle",G)}l.value=!1,o.value=!1}function G(Q){Q.target===h.value&&(l.value=Q.newState==="open",l.value&&E())}function q(Q){const W=Q.getRange();s("update:startDate",W.startDate),s("update:endDate",W.endDate),U()}function j(){const Q=L.value?Math.floor(new Date(L.value).getTime()/1e3):null,W=M.value?Math.floor(new Date(M.value+"T23:59:59").getTime()/1e3):null;s("update:startDate",Q),s("update:endDate",W),U()}function J(Q){Q.stopPropagation(),s("update:startDate",null),s("update:endDate",null)}const ve=Q=>{const W=Q.target;h.value&&!h.value.contains(W)&&p.value&&!p.value.contains(W)&&U()},ae=Q=>{Q.key==="Escape"&&l.value&&(U(),p.value?.focus())};return zt(()=>{document.addEventListener("click",ve),document.addEventListener("keydown",ae),window.addEventListener("resize",E),window.addEventListener("scroll",E,!0)}),Ht(()=>{document.removeEventListener("click",ve),document.removeEventListener("keydown",ae),window.removeEventListener("resize",E),window.removeEventListener("scroll",E,!0)}),he(o,Q=>{Q&&(a.startDate&&(L.value=new Date(a.startDate*1e3).toISOString().split("T")[0]),a.endDate?M.value=new Date(a.endDate*1e3).toISOString().split("T")[0]:M.value=new Date().toISOString().split("T")[0]),Be(E)}),(Q,W)=>{const fe=qt("FormKit");return n(),r("div",Cs,[t("button",{ref_key:"triggerRef",ref:p,type:"button",onClick:H,class:ee(["w-full flex items-center gap-1 px-2 py-1 text-xs rounded-sm border transition-colors min-w-0 focus:outline-none focus:ring-2 focus:ring-accent-500/30",[B.value?"agents-border-selected agents-surface-selected agents-text-selected-muted":"border-zinc-300 dark:border-zinc-600 hover:border-accent-400 dark:hover:border-accent-500 bg-white dark:bg-transparent text-zinc-700 dark:text-zinc-300"]])},[z(f(Xa),{size:14,class:"shrink-0 text-zinc-400"}),t("span",Ss,m(T.value),1),B.value?(n(),N(f(Et),{key:0,size:14,class:"shrink-0 text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-200",onClick:J})):(n(),N(f(_t),{key:1,size:14,class:ee(["shrink-0 text-zinc-400",l.value?"rotate-180":""])},null,8,["class"]))],2),l.value?(n(),r("div",{key:0,ref_key:"popoverRef",ref:h,class:"dropdown-popover z-[9999]"},[z(f(ja),{"max-height":o.value?void 0:"max-h-48",shadow:!1},{default:Ee(()=>[o.value?(n(),r("div",{key:1,class:"p-2.5 space-y-2.5",onClick:W[4]||(W[4]=ze(()=>{},["stop"]))},[t("div",Es,[W[6]||(W[6]=t("span",{class:"text-xs font-medium"},"Custom range",-1)),t("button",{type:"button",onClick:W[1]||(W[1]=ze(X=>o.value=!1,["stop"])),class:"text-[10px] text-neutral-500 hover:text-black dark:hover:text-white"}," ← Back ")]),t("div",Ls,[z(fe,{modelValue:L.value,"onUpdate:modelValue":W[2]||(W[2]=X=>L.value=X),type:"datepicker",label:"From","picker-only":"",popover:"",format:"MMM D, YYYY","value-format":"YYYY-MM-DD",sequence:["day"]},null,8,["modelValue"]),z(fe,{modelValue:M.value,"onUpdate:modelValue":W[3]||(W[3]=X=>M.value=X),type:"datepicker",label:"To","picker-only":"",popover:"",format:"MMM D, YYYY","value-format":"YYYY-MM-DD",sequence:["day"]},null,8,["modelValue"])]),t("button",{type:"button",onClick:j,class:"w-full py-1.5 text-xs font-medium bg-black dark:bg-white text-white dark:text-black rounded-sm hover:opacity-90 transition-opacity"}," Apply ")])):(n(),r("div",Ts,[(n(),r($e,null,Ne(w,X=>t("button",{key:X.value,type:"button",onClick:Re=>q(X),class:ee(["w-full px-2.5 py-1.5 text-left text-xs agents-surface-hover transition-colors flex items-center gap-2",y.value===X.value?"agents-surface-selected agents-text-selected":""])},[t("span",{class:ee(["w-1.5 h-1.5 rounded-full border border-accent-500",y.value===X.value?"bg-accent-500":""])},null,2),Ge(" "+m(X.label),1)],10,Is)),64)),t("div",As,[t("button",{type:"button",onClick:W[0]||(W[0]=ze(X=>o.value=!0,["stop"])),class:ee(["w-full px-2.5 py-1.5 text-left text-xs agents-surface-hover transition-colors flex items-center gap-2",y.value==="custom"?"agents-surface-selected agents-text-selected":""])},[t("span",{class:ee(["w-1.5 h-1.5 rounded-full border border-accent-500",y.value==="custom"?"bg-accent-500":""])},null,2),W[5]||(W[5]=Ge(" Custom range... ",-1))],2)])]))]),_:1},8,["max-height"])],512)):S("",!0)])}}}),Rs=dt(Ms,[["__scopeId","data-v-753faf78"]]);function Ds(e){const a=Date.now()*1e3-e,s=Math.floor(a/1e6);if(s<60)return s===1?"1 second ago":`${s} seconds ago`;const l=Math.floor(s/60);if(l<60)return l===1?"1 minute ago":`${l} minutes ago`;const o=Math.floor(l/60);if(o<24)return o===1?"1 hour ago":`${o} hours ago`;const p=Math.floor(o/24);if(p<30)return p===1?"1 day ago":`${p} days ago`;const h=Math.floor(p/30);if(h<12)return h===1?"1 month ago":`${h} months ago`;const L=Math.floor(h/12);return L===1?"1 year ago":`${L} years ago`}function Fs(e){const i=x("");let a=null;const s=()=>typeof e=="function"?e():typeof e=="number"?e:e.value,l=()=>{const o=s();i.value=Ds(o);const h=Date.now()*1e3-o,L=Math.floor(h/1e6);a!==null&&(clearInterval(a),a=null),L<60?a=setInterval(l,1e3):L<3600?a=setInterval(l,6e4):L<86400&&(a=setInterval(l,6e5))};return l(),Ht(()=>{a!==null&&clearInterval(a)}),i}const $n=We({__name:"TimeAgo",props:{timestamp:{}},setup(e){const i=e,a=Fs(()=>i.timestamp);return(s,l)=>(n(),r("span",null,m(f(a)),1))}}),qn="name:",la=["bg-sky-400/70 dark:bg-sky-500/70","bg-emerald-400/70 dark:bg-emerald-500/70","bg-amber-400/70 dark:bg-amber-500/70","bg-rose-400/70 dark:bg-rose-500/70","bg-violet-400/70 dark:bg-violet-500/70"],mn=(e,i)=>i.created_at-e.created_at,hn=(e,i)=>`${e}::${i}`,Wa=e=>{const i=e.tags.find(s=>s.startsWith(qn));if(!i)return null;const a=i.slice(qn.length).trim();return a.length>0?a:null},St=e=>e.tags.filter(i=>!i.startsWith(qn)),Ps=e=>Wa(e)||e.agent.title||e.agent.name,Ns=e=>e.id.startsWith("__draft_")?"--------":e.id.slice(0,8),Mn=e=>Wa(e)?e.agent.title||e.agent.name:null,oa=e=>Array.from({length:Math.min(Math.max(e,0),6)},(i,a)=>12+a*8),ia=e=>la[e%la.length],da=e=>({left:`${e}px`}),zs=(e,i)=>{if(e.length===0)return[];const a=new Map(e.map(w=>[w.id,w])),s=new Map,l=[];for(const w of e){const y=w.parent;if(y&&a.has(y)){const T=s.get(y)??[];T.push(w),s.set(y,T);continue}l.push(w)}l.sort(mn);for(const w of s.values())w.sort(mn);const o=[],p=new Set,h=w=>{if(p.has(w.id))return;p.add(w.id);const y=s.get(w.id);if(y)for(const T of y)h(T)},L=(w,y,T)=>{if(p.has(w.id))return;p.add(w.id),o.push({kind:"thread",thread:w,depth:y,isNested:y>0,clusterId:T});const B=s.get(w.id);if(!B)return;const E=new Map;for(const H of B){const U=H.agent_id||H.agent?.name||H.id,G=E.get(U);G?G.push(H):E.set(U,[H])}for(const[H,U]of E.entries()){if(U.length>1){const G=hn(w.id,H),q=i(G);if(o.push({kind:"directory",key:G,depth:y+1,label:U[0]?.agent?.title||U[0]?.agent?.name||H,count:U.length,open:q,clusterId:T}),!q){for(const j of U)h(j);continue}for(const j of U)L(j,y+2,T);continue}L(U[0],y+1,T)}};for(const w of l)L(w,0,w.id);const M=e.filter(w=>!p.has(w.id)).sort(mn);for(const w of M)L(w,w.parent?1:0,w.parent??w.id);return o},js=["id","onClick"],Bs={key:1,class:"space-y-0.5"},Os={key:0,class:"flex flex-wrap gap-1 min-w-0"},Vs={key:2,class:"flex items-center gap-1"},qs={key:0,class:"text-[10px] text-neutral-400"},Hs=["onClick"],Us={class:"flex items-center gap-2"},Ws=We({__name:"ThreadListRows",props:{rows:{},selectedThreadId:{},clusterHasNestedRows:{},isThreadFlashing:{type:Function},isDirectoryFlashing:{type:Function},hasRowTopGap:{type:Function},hasRowBottomBorder:{type:Function}},emits:["selectThread","toggleDirectory"],setup(e,{emit:i}){const a=i;return(s,l)=>(n(!0),r($e,null,Ne(e.rows,(o,p)=>(n(),r($e,{key:o.kind==="thread"?o.thread.id:o.key},[o.kind==="thread"?(n(),r("button",{key:0,id:`thread-${o.thread.id}`,class:ee(["w-full text-left cursor-pointer rounded-lg px-3 transition-colors relative",[o.isNested?e.selectedThreadId===o.thread.id?"py-1.5":"py-1.5 bg-neutral-50/40 dark:bg-neutral-900/20":"py-2",e.hasRowTopGap(p)?"mt-1":"",e.hasRowBottomBorder(p)&&e.clusterHasNestedRows[o.clusterId]?"mb-1":"",o.thread.terminated?"opacity-50 text-neutral-500 dark:text-neutral-500":"",e.selectedThreadId===o.thread.id?"agents-surface-selected":"agents-surface-hover"]]),style:vt(o.depth>0?{paddingLeft:`${12+Math.min(o.depth,6)*8}px`}:void 0),onClick:h=>a("selectThread",o.thread.id)},[(n(!0),r($e,null,Ne(f(oa)(o.depth),(h,L)=>(n(),r("span",{key:`thread-line-${L}`,class:ee(["pointer-events-none absolute inset-y-1 w-px rounded-full",f(ia)(L)]),style:vt(f(da)(h)),"aria-hidden":"true"},null,6))),128)),t("div",{class:ee(["flex items-center gap-2",!o.isNested||f(St)(o.thread).length>0||f(Mn)(o.thread)?"mb-0.5":""])},[o.thread.terminated?(n(),N(f(Ia),{key:0,size:12,class:"shrink-0 text-neutral-500 dark:text-neutral-400"})):S("",!0),t("span",{class:ee(["font-medium truncate flex-1 min-w-0",[e.selectedThreadId===o.thread.id?"agents-text-selected":"",e.isThreadFlashing(o.thread.id)?"thread-list-green-flash":""]])},m(f(Ps)(o.thread)),3),t("span",{class:ee(["flex-shrink-0 text-[10px]",e.selectedThreadId===o.thread.id?"agents-text-selected-muted":"text-neutral-400 dark:text-neutral-500"])},[z($n,{timestamp:o.thread.created_at*1e6},null,8,["timestamp"])],2)],2),f(Mn)(o.thread)?(n(),r("div",{key:0,class:ee(["mb-0.5 truncate text-[10px]",e.selectedThreadId===o.thread.id?"agents-text-selected-muted":"text-neutral-400 dark:text-neutral-500"])},m(f(Mn)(o.thread)),3)):S("",!0),o.isNested?f(St)(o.thread).length>0?(n(),r("div",Vs,[(n(!0),r($e,null,Ne(f(St)(o.thread).slice(0,3),h=>(n(),r("span",{key:h,class:"inline-block px-1.5 py-0.5 rounded text-[10px] truncate max-w-[120px] bg-neutral-200 dark:bg-neutral-800 text-neutral-600 dark:text-neutral-400"},m(h),1))),128)),f(St)(o.thread).length>3?(n(),r("span",qs," +"+m(f(St)(o.thread).length-3),1)):S("",!0)])):S("",!0):(n(),r("div",Bs,[t("span",{class:ee(["block max-w-[80px] truncate font-mono text-[10px]",e.selectedThreadId===o.thread.id?"agents-text-selected-muted":"text-neutral-400 dark:text-neutral-500"])},m(f(Ns)(o.thread)),3),f(St)(o.thread).length>0?(n(),r("div",Os,[(n(!0),r($e,null,Ne(f(St)(o.thread).slice(0,3),h=>(n(),r("span",{key:h,class:ee(["inline-block px-1.5 py-0.5 rounded text-[10px] truncate max-w-[60px]",e.selectedThreadId===o.thread.id?"agents-surface-selected-strong agents-text-selected":"bg-neutral-200 dark:bg-neutral-800 text-neutral-600 dark:text-neutral-400"])},m(h),3))),128)),f(St)(o.thread).length>3?(n(),r("span",{key:0,class:ee(["text-[10px]",e.selectedThreadId===o.thread.id?"agents-text-selected-muted":"text-neutral-400"])}," +"+m(f(St)(o.thread).length-3),3)):S("",!0)])):S("",!0)]))],14,js)):(n(),r("button",{key:1,type:"button",class:"w-full rounded-lg text-left px-3 py-1.5 bg-neutral-50/25 dark:bg-neutral-900/10 hover:bg-neutral-100 dark:hover:bg-neutral-800/40 transition-colors relative",style:vt({paddingLeft:`${12+Math.min(o.depth,6)*8}px`}),onClick:h=>a("toggleDirectory",o.key)},[(n(!0),r($e,null,Ne(f(oa)(o.depth),(h,L)=>(n(),r("span",{key:`directory-line-${L}`,class:ee(["pointer-events-none absolute inset-y-1 w-px rounded-full",f(ia)(L)]),style:vt(f(da)(h)),"aria-hidden":"true"},null,6))),128)),t("div",Us,[z(f(Aa),{size:13,class:"text-neutral-500 dark:text-neutral-400 shrink-0"}),t("span",{class:ee(["truncate flex-1 min-w-0 text-[11px] font-medium text-neutral-600 dark:text-neutral-300",e.isDirectoryFlashing(o.key)?"thread-list-green-flash":""])},m(o.label)+" ("+m(o.count)+") ",3),o.open?(n(),N(f(_t),{key:0,size:14,class:"text-neutral-500 dark:text-neutral-400 shrink-0"})):(n(),N(f(Pt),{key:1,size:14,class:"text-neutral-500 dark:text-neutral-400 shrink-0"}))])],12,Hs))],64))),128))}}),Ks=dt(Ws,[["__scopeId","data-v-1e5bebfe"]]),Js={class:"flex flex-col flex-1 min-h-0 overflow-visible"},Gs={class:"px-3 border-b border-neutral-300 dark:border-neutral-700 h-12 flex items-center shrink-0"},Ys={class:"flex items-center justify-between w-full"},Qs={key:0,class:"text-xs font-mono text-neutral-500 dark:text-neutral-400"},Xs={class:"flex items-center gap-1"},Zs=["title","aria-label","aria-pressed"],el={key:0,class:"px-3 py-2 border-b border-neutral-200 dark:border-neutral-800 shrink-0 space-y-2"},tl={class:"relative"},nl={class:"flex items-center gap-2 w-full"},al={key:0,class:"flex-1 min-w-0"},rl={key:0,class:"p-4 flex justify-center"},sl={key:1,class:"p-4 text-red-600 dark:text-red-400"},ll={key:2,class:"text-neutral-500 dark:text-neutral-400 text-center py-12"},ol={key:1,class:"text-base"},il={key:3,class:"px-2 py-2"},dl={key:0,class:"p-3 flex justify-center"},ul={key:1,class:"p-3 text-center text-[10px] text-neutral-400 dark:text-neutral-500"},cl=50,ua=1800,Eh=We({__name:"ThreadListPane",props:{selectedThreadId:{},optimisticThread:{},agentId:{},showCollapseButton:{type:Boolean}},emits:["selectThread","collapse","createThread","threadsLoaded"],setup(e,{expose:i,emit:a}){const s=e,l=a,o=x(""),p=x(null),h=x(!1),L=x(null),M=x(null),w=x(null),y=x(!1),T=A(()=>s.agentId!=null);he(()=>s.agentId,c=>{c!=null&&(M.value=c),y.value=!1},{immediate:!0});const B=x(null),{agents:E,isFetching:H}=Ha(),U=A(()=>E.value.map(c=>({value:c.name,label:c.title||c.name}))),G=x(0),q=x([]),j=x(!1),J=x(!1),ve=tr(c=>{p.value=c||null},300);he(o,c=>{ve(c)});const ae=A(()=>{let c=0;return p.value&&c++,M.value&&!T.value&&c++,(w.value||B.value)&&c++,c});function Q(){o.value="",p.value=null,T.value||(M.value=null),w.value=null,B.value=null}async function W(){h.value=!0,await Be(),L.value?.focus(),L.value?.select()}function fe(){Q(),h.value=!1}function X(){h.value?fe():W()}const{threads:Re,hasMore:Fe,isFetching:re,isFinished:De,error:P,refetch:de}=os({limit:cl,offset:G,search:p,agentId:M,startDate:w,endDate:B}),le=x([]),ye=x(new Set);he([p,M,w,B],()=>{G.value=0,q.value=[],le.value=[],ye.value.clear(),j.value=!1,J.value=!1}),he(Re,c=>{if(G.value===0)q.value=[...c];else{const C=new Set(q.value.map(Y=>Y.id)),O=c.filter(Y=>!C.has(Y.id));q.value=[...q.value,...O],J.value=!0}j.value=!1});const me=x({}),pe=x({}),Me=x({}),Ce=new Set,ne=c=>me.value[c]??!1,Z=c=>{me.value[c]=!ne(c)},K=c=>{pe.value[c]=!0;const C=setTimeout(()=>{delete pe.value[c],Ce.delete(C)},ua);Ce.add(C)},xe=c=>{Me.value[c]=!0;const C=setTimeout(()=>{delete Me.value[c],Ce.delete(C)},ua);Ce.add(C)};Ht(()=>{Ce.forEach(c=>clearTimeout(c)),Ce.clear()});const ue=c=>pe.value[c]===!0,Se=c=>Me.value[c]===!0,Ue=c=>{if(M.value&&c.agent_id!==M.value&&!c.parent||w.value&&c.created_at<w.value||B.value&&c.created_at>B.value)return!1;if(p.value){const C=p.value.toLowerCase(),O=c.id.toLowerCase().includes(C),Y=c.tags.some(Le=>Le.toLowerCase().includes(C));if(!O&&!Y)return!1}return!0},D=A(()=>{const c=q.value.filter(Le=>!ye.value.has(Le.id)),C=new Set(c.map(Le=>Le.id)),Y=[...le.value.filter(Le=>!C.has(Le.id)&&!ye.value.has(Le.id)),...c];return s.optimisticThread&&!Y.some(Le=>Le.id===s.optimisticThread?.id)&&Y.unshift(s.optimisticThread),Y.sort(mn)}),be=A(()=>D.value.filter(c=>!c.parent).length),se=A(()=>zs(D.value,ne)),we=c=>{const C=se.value[c],O=se.value[c+1];return C?O?C.clusterId!==O.clusterId:!0:!1},Te=c=>{const C=se.value[c],O=se.value[c-1];if(!C||!O||C.clusterId!==O.clusterId)return!1;const Y=C.kind==="directory"||C.kind==="thread"&&C.isNested,Le=O.kind==="thread"&&!O.isNested;return Y&&Le},ce=A(()=>{const c={};for(const C of se.value)if(!c[C.clusterId]){if(C.kind==="directory"){c[C.clusterId]=!0;continue}if(C.kind==="thread"&&C.isNested){c[C.clusterId]=!0;continue}c[C.clusterId]=!1}return c}),ge=x(null);function oe(){j.value||re.value||!Fe.value||(j.value=!0,G.value=q.value.length)}const{arrivedState:Ie}=Za(ge,{offset:{bottom:100}});he(()=>Ie.bottom,c=>{c&&Fe.value&&!re.value&&!j.value&&oe()});const je=c=>{const C=E.value.find(Y=>Y.name===c.agent_name),O=c.agent;return{id:c.id,agent_id:c.agent_name,user_id:c.user_id,tags:c.tags||[],parent:c.parent??null,terminated:c.terminated??null,created_at:c.created_at,agent:{name:c.agent_name,title:O?.title||C?.title,type:O?.type||C?.type||"ai_human"}}},Oe=async c=>{if(c.type==="thread_created"){const C=je(c.thread);if(!Ue(C))return;if(C.parent)if(D.value.filter(Y=>Y.parent===C.parent&&Y.agent_id===C.agent_id).length+1>1){const Y=hn(C.parent,C.agent_id);xe(Y),ne(Y)&&K(C.id)}else K(C.id);le.value.unshift(C)}else if(c.type==="thread_updated"){const C=je(c.thread),O=D.value.find(Ke=>Ke.id===C.id);if(!Ue(C)){le.value=le.value.filter(Ke=>Ke.id!==C.id),q.value=q.value.filter(Ke=>Ke.id!==C.id);return}ye.value.delete(C.id);const Y=le.value.findIndex(Ke=>Ke.id===C.id);Y>=0&&(le.value[Y]=C);const Le=q.value.findIndex(Ke=>Ke.id===C.id);if(Le>=0?q.value[Le]=C:Y===-1&&le.value.unshift(C),!!C.terminated&&!O?.terminated)if(C.parent)if((D.value.filter(Je=>Je.parent===C.parent&&Je.agent_id===C.agent_id).length||1)>1){const Je=hn(C.parent,C.agent_id);xe(Je),ne(Je)&&K(C.id)}else K(C.id);else K(C.id)}else c.type==="thread_deleted"&&(ye.value.add(c.threadId),le.value=le.value.filter(C=>C.id!==c.threadId))},{wsConnected:V,wsError:F}=bs({onEvent:Oe});he(()=>G.value,c=>{c===0&&(le.value=[])}),he(()=>[s.selectedThreadId,D.value],([c,C])=>{if(!c||C.length===0)return;const O=new Map(C.map(Le=>[Le.id,Le]));let Y=O.get(c);for(;Y&&Y.parent;){const Le=hn(Y.parent,Y.agent_id);me.value[Le]=!0,Y=O.get(Y.parent)}},{immediate:!0}),he(()=>({rows:se.value,finished:De.value}),({rows:c,finished:C})=>{const O=c.find(Y=>Y.kind==="thread");C&&!y.value&&(y.value=!0,l("threadsLoaded",O?.thread.id??null,D.value.map(Y=>Y.id)))},{immediate:!0}),i({refetch:de});const u=c=>{l("selectThread",c)};return(c,C)=>{const O=qt("FormKit");return n(),r("div",Js,[t("div",Gs,[t("div",Ys,[t("button",{onClick:C[0]||(C[0]=ze(Y=>l("collapse"),["stop"])),type:"button",class:"-ml-1 flex items-center gap-2 rounded px-1.5 py-1 text-left transition-colors hover:bg-black/10 dark:hover:bg-white/15",title:"Collapse Threads pane","aria-label":"Collapse Threads pane"},[z(f(er),{size:18,class:"shrink-0"}),C[8]||(C[8]=t("h2",{class:"text-base font-bold"},"Threads",-1)),!f(re)&&be.value>0?(n(),r("span",Qs," ("+m(be.value)+") ",1)):S("",!0),z(Ua,{connected:f(V),error:f(F)},null,8,["connected","error"])]),t("div",Xs,[t("button",{type:"button",class:ee(["inline-flex h-7 w-7 items-center justify-center rounded-md border border-neutral-300 bg-white text-neutral-700 transition-colors hover:border-neutral-500 hover:bg-neutral-50 hover:text-black dark:border-neutral-700 dark:bg-neutral-950 dark:text-neutral-300 dark:hover:border-neutral-500 dark:hover:bg-neutral-900 dark:hover:text-white",h.value?"agents-border-selected agents-text-selected bg-white dark:bg-neutral-950":""]),title:h.value?"Hide search":"Search threads","aria-label":h.value?"Hide search":"Search threads","aria-pressed":h.value,onClick:ze(X,["stop"])},[z(f(zn),{size:16})],10,Zs),t("button",{onClick:C[1]||(C[1]=Y=>l("createThread")),type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-md border border-neutral-300 bg-white text-neutral-700 transition-colors hover:border-neutral-500 hover:bg-neutral-50 hover:text-black dark:border-neutral-700 dark:bg-neutral-950 dark:text-neutral-300 dark:hover:border-neutral-500 dark:hover:bg-neutral-900 dark:hover:text-white",title:"New thread","aria-label":"New thread"},[z(f(Ea),{size:16})]),e.showCollapseButton!==!1?(n(),r("button",{key:0,onClick:C[2]||(C[2]=Y=>l("collapse")),type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-md text-neutral-700 transition-colors hover:bg-black/10 hover:text-black dark:text-neutral-300 dark:hover:bg-white/15 dark:hover:text-white",title:"Collapse pane","aria-label":"Collapse pane"},[z(f(La),{size:17})])):S("",!0)])])]),h.value||ae.value>0?(n(),r("div",el,[t("div",tl,[z(f(zn),{size:14,class:"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-neutral-400"}),rt(t("input",{ref_key:"threadSearchInputRef",ref:L,"onUpdate:modelValue":C[3]||(C[3]=Y=>o.value=Y),type:"search",placeholder:"Search threads...",class:"h-8 w-full rounded-md border border-neutral-300 bg-white pl-7 pr-8 text-sm text-neutral-950 outline-none transition-colors placeholder:text-neutral-400 focus:border-[var(--agents-accent-border)] dark:border-neutral-700 dark:bg-neutral-950 dark:text-neutral-50"},null,512),[[xn,o.value]]),o.value?(n(),r("button",{key:0,type:"button",class:"absolute right-1.5 top-1/2 inline-flex h-5 w-5 -translate-y-1/2 items-center justify-center rounded text-neutral-400 transition-colors hover:bg-neutral-100 hover:text-neutral-800 dark:hover:bg-neutral-800 dark:hover:text-neutral-100",title:"Clear search","aria-label":"Clear search",onClick:C[4]||(C[4]=Y=>{o.value="",p.value=null,W()})},[z(f(Et),{size:13})])):S("",!0)]),t("div",nl,[T.value?S("",!0):(n(),r("div",al,[z(O,{type:"selectSearch",size:"sm","active-highlight":"",value:M.value||"",options:U.value,placeholder:"All agents","search-placeholder":"Search agents...",loading:f(H),onInput:C[5]||(C[5]=Y=>M.value=Y||null)},null,8,["value","options","loading"])])),z(Rs,{startDate:w.value,"onUpdate:startDate":C[6]||(C[6]=Y=>w.value=Y),endDate:B.value,"onUpdate:endDate":C[7]||(C[7]=Y=>B.value=Y),class:ee(T.value?"w-full":"flex-1 min-w-0")},null,8,["startDate","endDate","class"]),ae.value>0?(n(),r("button",{key:1,onClick:Q,type:"button",class:"text-[10px] font-mono text-neutral-400 hover:text-neutral-900 dark:hover:text-neutral-100 transition-colors whitespace-nowrap"}," Clear ")):(n(),r("button",{key:2,onClick:fe,type:"button",class:"text-[10px] font-mono text-neutral-400 hover:text-neutral-900 dark:hover:text-neutral-100 transition-colors whitespace-nowrap"}," Close "))])])):S("",!0),t("div",{ref_key:"scrollContainerRef",ref:ge,class:"flex-1 overflow-y-auto text-xs min-h-0"},[f(re)&&q.value.length===0?(n(),r("div",rl,[z(qe)])):f(P)?(n(),r("div",sl," Error: "+m(f(P)),1)):se.value.length===0?(n(),r("div",ll,[ae.value>0?(n(),r($e,{key:0},[C[9]||(C[9]=t("p",{class:"text-base mb-2"},"No matching threads",-1)),t("button",{onClick:Q,type:"button",class:"text-xs text-accent-600 dark:text-accent-400 hover:underline"}," Clear filters ")],64)):(n(),r("p",ol,"No threads found"))])):(n(),r("div",il,[z(Ks,{rows:se.value,"selected-thread-id":e.selectedThreadId,"cluster-has-nested-rows":ce.value,"is-thread-flashing":ue,"is-directory-flashing":Se,"has-row-top-gap":Te,"has-row-bottom-border":we,onSelectThread:u,onToggleDirectory:Z},null,8,["rows","selected-thread-id","cluster-has-nested-rows"]),j.value||f(re)&&q.value.length>0?(n(),r("div",dl,[z(qe)])):J.value&&!f(Fe)&&se.value.length>0?(n(),r("div",ul," All "+m(be.value)+" threads loaded ",1)):S("",!0)]))],512)])}}});function Hn(e){return!!e&&typeof e=="object"}function fl(e){if(Hn(e)&&!Array.isArray(e))return e;if(typeof e=="string")try{const i=JSON.parse(e);return Hn(i)&&!Array.isArray(i)?i:void 0}catch{return}}function vl(e){const i=x(null),a=x(!1),s=x(null);let l=null;try{l=Mr()}catch{}const o=l?.messages??x([]),p=A(()=>l?.groupedMessages?.value?l.groupedMessages.value:l?.workblocks?.value?l.workblocks.value:o.value),h=A(()=>l?.status.value==="connected"),L=x(null);l?.loading??x(!1);const M=A(()=>o.value.some(P=>P.status==="pending"));function w(P){if(!i.value?.agent)return null;const de=i.value.agent,le=P==="assistant"?"A":"B";return le==="A"&&de.side_a_label?de.side_a_label:le==="B"&&de.side_b_label?de.side_b_label:null}function y(P){const de=P.path??"",le=P.name??de.split("/").pop()??"attachment";return{id:P.id||`att-${de||le||Math.random().toString(36).slice(2)}`,type:"file",path:de,name:le,mimeType:P.mimeType||P.mediaType||"application/octet-stream",width:P.width,height:P.height,description:P.description}}function T(P){if(P){if(Array.isArray(P))return P.length>0?P.map(y):void 0;try{const de=JSON.parse(P);return Array.isArray(de)&&de.length>0?de.filter(Hn).map(y):void 0}catch{return}}}function B(P,de){const le=[];P.reasoning_content&&le.push({id:`${P.id}-reasoning`,type:"reasoning",content:P.reasoning_content,created_at:P.created_at}),P.content&&le.push({id:`${P.id}-content`,type:"content",content:P.content,created_at:P.created_at});const ye=P.workItems.filter(ne=>ne.type==="tool_call"),me=P.workItems.filter(ne=>ne.type==="tool_result"),pe=new Map;for(const ne of me)ne.tool_call_id&&pe.set(ne.tool_call_id,ne);for(const ne of ye){const Z=ne.tool_call_id||ne.id,K=pe.get(Z);let xe="pending";if(K){const ue=(K.content||"").toLowerCase(),Se=ue.includes("failed")||ue.includes("error"),Ue=ue.length<500;xe=K.status==="error"||Se&&Ue?"failed":"success"}le.push({id:ne.id,type:"tool_call",content:ne.name||"",created_at:P.created_at,tool_name:ne.name,tool_call_id:Z,tool_arguments:ne.content||void 0,response:K?.content||null,response_status:xe,response_log_id:null,log_id:null})}const Me=le.some(ne=>ne.type==="tool_call"&&ne.response_status==="pending"),Ce=P.status!=="pending"&&!Me;return{type:"work",id:P.id,role:"assistant",items:le,created_at:P.created_at,updated_at:P.updated_at??P.response_completed_at??P.created_at,request_sent_at:P.request_sent_at??P.created_at,response_completed_at:P.response_completed_at??(Ce?P.updated_at??P.created_at:null),isComplete:Ce,sideLabel:w("assistant"),status:P.status}}function E(P){return P==="assistant"?"assistant":"user"}function H(P){for(let de=P.length-1;de>=0;de--){const le=(P[de].content||"").trim();if(le.length>0)return le}return""}function U(P){const de=new Set,le=[];for(const ye of P){const me=T(ye.attachments);if(me?.length)for(const pe of me)de.has(pe.path)||(de.add(pe.path),le.push(pe))}return le.length>0?le:void 0}function G(P){if(!P)return!1;if(P.tool_status==="error"||P.status==="failed")return!0;const de=(P.content||"").toLowerCase();return de?de.includes("failed to execute tool")||de.includes("has reported a failure")||de.includes("execution stopped before completion"):!1}function q(P){const de=P.messages||[],le=de[de.length-1],ye=le?E(le.role):"assistant",me=le?.log_id??null,pe=(P.subagent_status||"").toLowerCase(),Me=G(le)||pe.includes("error")||pe.includes("failed"),Ce=H(de),ne=U(de),Z=de.filter(K=>{const xe=T(K.attachments);return!!K.content||!!K.status||!!(xe&&xe.length>0)}).map(K=>({id:K.id,role:K.role,content:K.content||"",created_at:K.created_at,silent:K.silent,attachments:T(K.attachments)}));return{type:"subagent",id:P.id,role:ye,created_at:P.created_at,updated_at:P.updated_at,subagentId:P.subagent_id,subagentName:P.subagent_name??null,subagentTitle:P.subagent_title??null,subagentThreadName:P.subagent_thread_name??null,subagentStatus:P.subagent_status??null,subagentHasError:Me,subagentResumable:P.subagent_resumable??null,subagentBlocking:P.subagent_blocking??null,messages:Z,messageCount:de.length,latestContent:Ce,attachments:ne,log_id:me,sideLabel:w(ye),silent:de.length>0&&de.every(K=>!!K.silent)}}function j(P){const de=(P.subagents||[]).map(ye=>q(ye)),le=de.reduce((ye,me)=>ye?me.updated_at>ye.updated_at?me:ye:me,null);return{type:"subagent_group",id:P.id,role:le?.role??"assistant",created_at:P.created_at,updated_at:P.updated_at,subagents:de,count:de.length,log_id:le?.log_id??null,sideLabel:le?.sideLabel??w("assistant"),silent:de.every(ye=>!!ye.silent)}}function J(P){return{type:"status",id:P.id,role:"system",content:P.content,created_at:P.created_at,statusKind:P.status_kind??null,subagentId:P.subagent_id??null}}const ve=A(()=>{const P=[],le=p.value.filter(me=>(me.depth??0)===0);let ye=[];for(let me=0;me<le.length;me++){const pe=le[me];if(P[P.length-1]?.role,"type"in pe&&pe.type==="workblock"){const xe=B(pe);P.push(xe),pe.attachments&&pe.attachments.length>0&&ye.push(...pe.attachments.map(y));continue}if("type"in pe&&pe.type==="subagent_block"){ye=[],P.push(q(pe));continue}if("type"in pe&&pe.type==="subagent_group_block"){ye=[],P.push(j(pe));continue}if("type"in pe&&pe.type==="status"){ye=[],P.push(J(pe));continue}const Ce=pe,ne=Ce.role;if(Ce.role==="tool")continue;const Z=T(Ce.attachments);let K;if((ye.length>0||Z)&&(K=[...ye,...Z||[]],ye=[]),Ce.content||ne==="system"||Ce.status==="pending"||K?.length){const xe={type:"text",id:Ce.id,role:ne,content:Ce.content||"",attachments:K?.length?K:void 0,created_at:Ce.created_at,log_id:Ce.log_id||null,sideLabel:w(ne),isOptimistic:Ce.isOptimistic,status:Ce.status,silent:Ce.silent,metadata:fl(Ce.metadata)};P.push(xe)}}return P});async function ae(){if(!e.value){i.value=null;return}try{const P=await fetch(He(`/api/threads/${e.value}`));P.ok&&(i.value=await P.json())}catch{i.value=null}}async function Q(P){if(e.value){if(l?.deleteMessage){await l.deleteMessage(P);return}try{if(!(await fetch(He(`/api/threads/${e.value}/messages/${P}`),{method:"DELETE"})).ok)throw new Error("Failed to delete message")}catch(de){throw de}}}async function W(P,de){if(e.value)try{if(!(await fetch(He(`/api/threads/${e.value}/messages/${P}`),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:de})})).ok)throw new Error("Failed to update message")}catch(le){throw le}}he(e,async P=>{P?(a.value=!0,await ae(),a.value=!1):i.value=null},{immediate:!0});const fe=l?.sendMessage,X=l?.stopExecution,Re=l?.attachments??x([]),Fe=l?.addAttachment??(()=>{}),re=l?.removeAttachment??(()=>{}),De=l?.clearAttachments??(()=>{});return{messages:ve,threadInfo:i,isFetching:a,error:s,wsConnected:h,wsError:L,isExecuting:M,sendMessage:fe,stopThread:X,attachments:Re,addAttachment:Fe,removeAttachment:re,clearAttachments:De,deleteMessageById:Q,updateMessageContent:W}}const Rn="__shiki_highlighter__";let pn=null;async function pl(){return typeof window<"u"&&window[Rn]?window[Rn]:pn||(pn=Promise.all([at(()=>import("./syntax.js").then(e=>e.d),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.e),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.f),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.g),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.i),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.k),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.l),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.m),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.n),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.s),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.o),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.p),__vite__mapDeps([0,1])),at(()=>import("./vue.js").then(e=>e.bb),__vite__mapDeps([2,3,1,0])),at(()=>import("./syntax.js").then(e=>e.y),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.q),__vite__mapDeps([0,1])),at(()=>import("./syntax.js").then(e=>e.r),__vite__mapDeps([0,1]))]).then(async([{createHighlighterCore:e},{createJavaScriptRegexEngine:i},a,s,l,o,p,h,L,M,w,y,T,B,E,H])=>{const U=await e({themes:[E.default,H.default],langs:[a.default,s.default,l.default,o.default,p.default,h.default,L.default,M.default,w.default,y.default,T.default,B.default],engine:i()});return typeof window<"u"&&(window[Rn]=U),U}),pn)}const gl={class:"code-block"},ml={key:0,class:"text-xs text-neutral-500 p-2"},hl=["innerHTML"],Ft=We({__name:"CodeBlock",props:{code:{},language:{}},setup(e){const i=e,a=x(""),s=x(!0),l={bash:"bash",cjs:"javascript",htm:"html",js:"javascript",jsonl:"json",md:"markdown",mjs:"javascript",sh:"bash",shell:"bash",text:"text",ts:"typescript",txt:"text",yml:"yaml"},o=new Set(["bash","css","html","javascript","jsx","json","markdown","shellscript","tsx","typescript","vue","yaml"]),p=w=>{const y=w?.trim().toLowerCase()||"text";return l[y]??y},h=w=>w.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),L=w=>`<pre class="shiki shiki-text"><code>${h(w)}</code></pre>`,M=async()=>{const w=i.code??"";if(!w){a.value='<pre class="shiki"><code></code></pre>',s.value=!1;return}try{const y=await pl(),T=p(i.language);o.has(T)?a.value=y.codeToHtml(w,{lang:T,themes:{light:"github-light",dark:"github-dark"}}):a.value=L(w)}catch{a.value=L(w)}finally{s.value=!1}};return zt(()=>{M()}),he(()=>i.code,()=>{M()}),he(()=>i.language,()=>{M()}),(w,y)=>(n(),r("div",gl,[s.value?(n(),r("div",ml,"Loading...")):(n(),r("div",{key:1,innerHTML:a.value,class:"code-content"},null,8,hl))]))}}),xl={key:0,class:"absolute inset-0 flex items-center justify-center bg-neutral-100 dark:bg-neutral-800"},bl={key:1,class:"absolute inset-0 flex items-center justify-center bg-neutral-100 dark:bg-neutral-800 text-neutral-400"},yl=["src","alt"],kl={key:2,class:"pointer-events-none absolute inset-0 flex items-center justify-center bg-black/0 group-hover:bg-black/35 transition-colors"},wl={class:"text-xs text-neutral-600 dark:text-neutral-300 truncate max-w-[100px]"},Dn=We({__name:"FileAttachment",props:{attachment:{},threadId:{},showRemove:{type:Boolean}},emits:["remove"],setup(e,{emit:i}){const a=nr(),s=ar(),l=e,o=i,p=x(!0),h=x(!1),L=A(()=>l.attachment.mimeType.startsWith("image/")),M=A(()=>!!l.attachment.thumbnailBase64),w=A(()=>{if(!l.threadId||!l.attachment.path)return"";const U=l.attachment.path.startsWith("/")?l.attachment.path.slice(1):l.attachment.path;return He(`/api/threads/${l.threadId}/fs/${U}`)}),y=A(()=>L.value?l.attachment.thumbnailBase64?`data:image/webp;base64,${l.attachment.thumbnailBase64}`:w.value:"");function T(){p.value=!1,h.value=!1}function B(){p.value=!1,h.value=!0}function E(){o("remove",l.attachment.id)}function H(){if(!l.attachment.path){w.value&&window.open(w.value,"_blank");return}a.replace({query:{...s.query,inspector:"files",filePath:l.attachment.path},hash:s.hash})}return(U,G)=>(n(),r("div",{class:ee(["relative group inline-flex items-center overflow-hidden rounded-2xl bg-neutral-100 dark:bg-neutral-800/60 ring-1 ring-black/5 dark:ring-white/10 transition-all hover:ring-black/10 dark:hover:ring-white/20 hover:shadow-sm",{"w-[256px] h-[256px]":L.value,"px-2.5 py-1.5":!L.value,"cursor-pointer":L.value&&w.value}]),onClick:G[0]||(G[0]=q=>L.value&&w.value?H():void 0)},[L.value?(n(),r($e,{key:0},[p.value&&!h.value&&!M.value?(n(),r("div",xl,[...G[1]||(G[1]=[t("div",{class:"w-4 h-4 border-2 border-neutral-300 border-t-neutral-600 rounded-full animate-spin"},null,-1)])])):S("",!0),h.value&&!M.value?(n(),r("div",bl,[z(f(Ma),{size:24})])):S("",!0),rt(t("img",{src:y.value||w.value,alt:e.attachment.name,class:"w-full h-full object-cover",onLoad:T,onError:B},null,40,yl),[[ht,!p.value&&!h.value||M.value]]),w.value?(n(),r("div",kl,[...G[2]||(G[2]=[t("span",{class:"rounded-full bg-white/90 px-3 py-1 text-xs font-medium text-neutral-900 opacity-0 group-hover:opacity-100 transition-opacity shadow-sm"}," View ",-1)])])):S("",!0)],64)):(n(),r($e,{key:1},[z(f(bn),{size:14,class:"text-neutral-500 mr-1 flex-shrink-0"}),t("span",wl,m(e.attachment.name),1)],64)),e.showRemove?(n(),r("button",{key:2,onClick:ze(E,["stop"]),class:"absolute -top-1 -right-1 w-4 h-4 rounded-full bg-red-500 text-white flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity"},[z(f(Et),{size:10})])):S("",!0)],2))}}),_l=["onMouseenter","onMouseleave","onClick"],$l=["onClick"],Cl={key:0,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"3",stroke:"currentColor",class:"w-3 h-3 text-white"},Sl={key:1,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"2.5",stroke:"currentColor",class:"w-3 h-3 text-white"},Tl={key:0,class:"w-full text-center text-xs text-neutral-400 dark:text-neutral-500 py-1"},Il={key:0,class:"text-[10px] font-semibold uppercase tracking-wider text-neutral-400 dark:text-neutral-500 leading-none mb-1"},Al=["contenteditable","onInput"],El=["innerHTML"],Ll={key:3,class:"inline-flex items-center gap-1 rounded-full bg-neutral-100 dark:bg-neutral-800/60 px-3 py-2"},Ml={key:0,class:"inline-flex items-center gap-1.5"},Rl=["src"],Dl={key:1,class:"inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-[4px] border agents-border-selected agents-surface-selected text-[8px] font-semibold leading-none agents-text-selected","aria-hidden":"true"},Fl=["title","onClick"],Pl={key:0,class:"flex flex-wrap gap-2 px-4"},Nl=["onClick","onMouseenter"],zl={key:0,class:"flex items-center gap-2 px-4 py-2 min-w-0"},jl={key:0,class:"truncate text-neutral-700 dark:text-neutral-300 min-w-0"},Bl={key:1,class:"truncate text-neutral-600 dark:text-neutral-400 min-w-0"},Ol={class:"text-neutral-500 dark:text-neutral-400 flex-shrink-0"},Vl={class:"work-op-strip","aria-label":"Operation statuses"},ql=["title"],Hl={key:1,class:"px-4 py-2 space-y-2.5"},Ul={class:"flex items-center gap-2"},Wl={class:"min-w-0 truncate text-neutral-700 dark:text-neutral-300"},Kl={class:"shrink-0 text-neutral-500 dark:text-neutral-400"},Jl={class:"work-op-strip","aria-label":"Operation statuses"},Gl=["title"],Yl={key:0,class:"space-y-1"},Ql=["onClick","onMouseenter"],Xl=["title"],Zl={class:"font-mono font-medium text-neutral-800 dark:text-neutral-100 flex-shrink-0"},eo={key:2,class:"text-neutral-500 dark:text-neutral-400 truncate flex-1 min-w-0"},to={key:0,class:"pl-5 mt-2 space-y-3"},no={key:0},ao={class:"divide-y divide-neutral-100/80 rounded-md bg-white px-2.5 py-1.5 ring-1 ring-neutral-200/70 dark:divide-neutral-800/70 dark:bg-neutral-950/60 dark:ring-neutral-800/70"},ro={class:"pt-1 font-mono text-[12px] text-neutral-500 dark:text-neutral-500"},so={class:"min-w-0"},lo={key:1,class:"break-words text-neutral-800 dark:text-neutral-200"},oo={key:1},io={class:"text-[10px] font-semibold uppercase tracking-wider text-neutral-400 dark:text-neutral-500 mb-1"},uo=["onClick","onMouseenter"],co={key:0,class:"m-0 whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed"},fo={key:1},vo=["onClick"],po={key:0,class:"pl-5 mt-2 whitespace-pre-wrap break-words rounded-md bg-white dark:bg-neutral-950/60 ring-1 ring-neutral-200/70 dark:ring-neutral-800/70 px-2.5 py-2 text-neutral-700 dark:text-neutral-300"},go={key:2,class:"pl-5 pb-1 break-words text-neutral-600 dark:text-neutral-400"},mo={class:"flex items-center justify-between gap-3 border-b border-neutral-100 px-3 py-2 dark:border-neutral-900"},ho={class:"min-w-0"},xo={class:"truncate text-[12px] font-medium text-neutral-800 dark:text-neutral-100"},bo={class:"rounded-full bg-neutral-100 px-2 py-0.5 text-[10px] text-neutral-500 ring-1 ring-inset ring-neutral-200 dark:bg-neutral-900 dark:text-neutral-400 dark:ring-neutral-800"},yo={class:"divide-y divide-neutral-100 dark:divide-neutral-900"},ko=["onClick"],wo={class:"flex items-center gap-3"},_o=["src"],$o={class:"min-w-0 flex-1"},Co={class:"flex items-center gap-2"},So={class:"truncate text-[13px] font-medium text-neutral-900 dark:text-neutral-50"},To={class:"mt-0.5 truncate text-[11px] text-neutral-500 dark:text-neutral-400"},Io={class:"shrink-0 rounded-full bg-neutral-100 px-1.5 py-0.5 text-[10px] leading-none text-neutral-500 dark:bg-neutral-900 dark:text-neutral-400"},Ao={class:"ml-11 mt-1 truncate text-[11px] text-neutral-500 dark:text-neutral-400"},Eo={key:0,class:"ml-12 mt-1.5 space-y-1.5 border-l border-neutral-200 pl-2.5 dark:border-neutral-800"},Lo={class:"flex items-center gap-2 text-[10px] text-neutral-500 dark:text-neutral-400"},Mo={class:"font-medium uppercase text-neutral-600 dark:text-neutral-300"},Ro={key:0,class:"italic"},Do=["innerHTML"],Fo={key:1,class:"mt-2 flex flex-wrap gap-2"},Po=["onClick"],No={class:"flex items-center gap-3"},zo=["src"],jo={class:"min-w-0 flex-1"},Bo={class:"flex items-center gap-2"},Oo={class:"truncate text-[13px] font-medium text-neutral-900 dark:text-neutral-50"},Vo={class:"mt-0.5 truncate text-[11px] text-neutral-500 dark:text-neutral-400"},qo={class:"shrink-0 rounded-full bg-neutral-100 px-1.5 py-0.5 text-[10px] leading-none text-neutral-500 dark:bg-neutral-900 dark:text-neutral-400"},Ho={class:"ml-12 mt-1 truncate text-[11px] text-neutral-500 dark:text-neutral-400"},Uo={key:0,class:"ml-12 mt-2 space-y-1.5 border-l border-neutral-200 pl-2.5 dark:border-neutral-800"},Wo={class:"flex items-center gap-2 text-[10px] text-neutral-500 dark:text-neutral-400"},Ko={class:"font-medium uppercase text-neutral-600 dark:text-neutral-300"},Jo={key:0,class:"italic"},Go=["innerHTML"],Yo={key:1,class:"mt-2 flex flex-wrap gap-2"},Qo=We({__name:"AgentMessages",props:{messages:{},threadId:{},selectedMessageId:{},selectedLogId:{},selectedEffectId:{},hoveredLogId:{},isEditMode:{type:Boolean},selectedForDelete:{},editedMessages:{},assistantAvatarSrc:{},userAvatarSrc:{}},emits:["messageClick","messageHover","selectionChange","messageEdit"],setup(e,{expose:i,emit:a}){const s=e,l=a;sa.setOptions({gfm:!0,breaks:!0});function o(g){const b=s.selectedForDelete?.has(g)??!1;l("selectionChange",g,!b)}function p(g,b){const ke=g.target.innerText;l("messageEdit",b,ke)}function h(g){return g.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function L(g){if(typeof window>"u"||typeof DOMParser>"u")return g.replace(/<script[\s\S]*?>[\s\S]*?<\/script>/gi,"").replace(/\son\w+="[^"]*"/gi,"").replace(/\s(href|src)="javascript:[^"]*"/gi,"");const b=new DOMParser().parseFromString(g,"text/html"),$=["script","style","iframe","object","embed"];for(const ke of $)b.querySelectorAll(ke).forEach(te=>te.remove());return b.body.querySelectorAll("*").forEach(ke=>{for(const te of Array.from(ke.attributes)){const Pe=te.name.toLowerCase(),lt=te.value.trim().toLowerCase();(Pe.startsWith("on")||Pe==="style"||(Pe==="href"||Pe==="src")&&(lt.startsWith("javascript:")||lt.startsWith("data:text/html")))&&ke.removeAttribute(te.name)}}),b.body.innerHTML}function M(g){return!!g&&typeof g=="object"&&!Array.isArray(g)}function w(g){const b=h(st(g||"")),$=sa.parse(b,{async:!1});return L($)}function y(g){return s.editedMessages?.has(g)??!1}const T=x(new Map);function B(g,b){b?T.value.set(g,b):T.value.delete(g)}function E(g,b){B(g,b instanceof HTMLElement?b:null)}function H(g){const b=s.messages.findIndex($=>$.log_id===g);if(b<=0)return-1;for(let $=b-1;$>=0;$--){const ke=s.messages[$];if(ke.role==="user")return $;if(ke.role==="assistant"&&ke.log_id)break}return-1}function U(g){for(let b=0;b<s.messages.length;b++){const $=s.messages[b];if($.log_id===g||$.type==="work"&&$.items&&$.items.some(Pe=>Pe.log_id===g||Pe.response_log_id===g))return b}return-1}function G(g,b){const ke=U(g);if(ke===-1)return!1;const te=T.value.get(ke);if(!te)return!1;const Pe=s.messages[ke];let lt=null;if(Pe.role==="assistant"&&Pe.log_id){const _=H(Pe.log_id);lt=_!==-1?T.value.get(_):null}const gt=b.getBoundingClientRect(),I=te.getBoundingClientRect();if(I.top<gt.top){const _e=(lt||te).getBoundingClientRect().top-gt.top-10;b.scrollBy({top:_e,behavior:"smooth"})}else if(I.bottom>gt.bottom){const _=I.bottom-gt.bottom+10;b.scrollBy({top:_,behavior:"smooth"})}else if(lt){const _=lt.getBoundingClientRect();if(_.top<gt.top){const R=_.top-gt.top-10;b.scrollBy({top:R,behavior:"smooth"})}}return!0}function q(g){for(const b of s.messages){if(b.type!=="work")continue;if(b.items.some(te=>te.log_id===g||te.response_log_id===g))return!0}return!1}i({scrollToLogId:G,hasWorkblockForLogId:q});function j(g){const b=s.messages[g];if(b.log_id)return b.log_id;if(b.role==="user")for(let $=g+1;$<s.messages.length;$++){const ke=s.messages[$];if(ke.log_id)return ke.log_id;if(ke.role==="user")break}return null}function J(g){if(g.type!=="text")return null;const b=g.metadata;if(!M(b))return null;const $=b.scheduledEffect;return M($)?$:null}function ve(g){const b=J(g);return typeof b?.id=="string"?b.id:null}function ae(g){const b=J(g);return typeof b?.name=="string"?b.name:null}function Q(g){return ve(g)!==null}function W(g){const b=ve(g),$=ae(g);return $&&b?`${$} (${b})`:$||"Scheduled effect"}function fe(g){if(g.type!=="text")return null;const b=J(g),$=typeof b?.id=="string"?b.id:null;return $?{id:$,name:typeof b?.name=="string"?b.name:null}:null}function X(g,b){return b?j(g)===b:!1}function Re(g,b){if(s.isEditMode||g.silent||g.role==="user"&&!Q(g))return"";const $=ve(g),ke=!!j(b)||Q(g);return X(b,s.selectedLogId??null)||$&&$===s.selectedEffectId?"message-log-state message-log-state--selected":j(b)&&X(b,s.hoveredLogId??null)?"message-log-state message-log-state--hovered":ke?"message-log-state":""}function Fe(g){const b=j(g);b&&l("messageHover",b)}function re(g){j(g)&&l("messageHover",null)}function De(g){const b=s.messages[g],$=j(g),ke=fe(b);($||ke)&&l("messageClick",b.id,$,ke)}function P(g){const b=s.messages[g],$=fe(b);$&&l("messageClick",b.id,j(g),$)}const de=x(new Set),le=x(new Set),ye=x(new Set),me=x(new Set);function pe(g){de.value.has(g)?de.value.delete(g):de.value.add(g)}function Me(g){le.value.has(g)?le.value.delete(g):le.value.add(g)}function Ce(g){ye.value.has(g)?ye.value.delete(g):ye.value.add(g)}function ne(g){me.value.has(g)?me.value.delete(g):me.value.add(g)}function Z(g){if(!g)return{};try{const b=JSON.parse(g);return b&&typeof b=="object"&&!Array.isArray(b)?b:{raw:b}}catch{return{raw:g}}}function K(g){if(!g)return null;const b=Z(g),$=Object.keys(b);if($.length===0)return null;const ke=b[$[0]];return typeof ke=="string"?Ve(se(ke)):JSON.stringify(ke)}const xe={bash:"bash",css:"css",html:"html",js:"javascript",jsx:"jsx",json:"json",md:"markdown",mjs:"javascript",sh:"bash",ts:"typescript",tsx:"tsx",vue:"vue",yaml:"yaml",yml:"yaml"};function ue(g){if(typeof g!="string")return null;const b=g.split("?")[0]?.split("#")[0]?.split(".").pop()?.toLowerCase();return b?xe[b]??null:null}function Se(g){if(typeof g!="string")return null;const b=g.toLowerCase();return b.includes("json")?"json":b.includes("typescript")?"typescript":b.includes("javascript")?"javascript":b.includes("html")?"html":b.includes("css")?"css":b.includes("markdown")?"markdown":b.includes("yaml")||b.includes("yml")?"yaml":b.includes("shell")||b.includes("bash")?"bash":null}function Ue(g){try{return JSON.stringify(JSON.parse(g),null,2)}catch{return null}}function D(g){try{return JSON.parse(g)}catch{return null}}function be(g){return g&&typeof g=="object"&&!Array.isArray(g)?g:null}function se(g){return g.replace(/\\r\\n/g,`
|
|
3
3
|
`).replace(/\\n/g,`
|
|
4
4
|
`).replace(/\\t/g," ")}function we(g){const b=se(g);return b.includes(`
|
|
5
5
|
`)||/(^|\s)(import|export|const|let|function|async|return|class|interface|type)\s/.test(b)||/<\/?[a-z][\s\S]*>/i.test(b)||/\b(Response|Request|fetch|console)\b/.test(b)}function Te(g){const b=se(g).trim();return b?/^\s*</.test(b)||/<\/[a-z][\s\S]*>/i.test(b)?"html":/^\s*[{[]/.test(b)&&Ue(b)?"json":/\b(interface|type|Request|Response)\b/.test(b)||/\bimport\s+.+\s+from\s+["']/.test(b)||/\bexport\s+(default\s+)?(async\s+)?function\b/.test(b)?"typescript":/\b(import|export|const|let|function|async|return|class)\b/.test(b)?"javascript":/^#!.*\b(bash|sh)\b/.test(b)?"bash":null:null}function ce(g,b,$){const ke=g.toLowerCase(),te=ue($.path)||ue($.filePath)||ue($.filename)||ue($.name),Pe=Se($.mimeType)||Se($.mime_type)||Se($.contentType)||Se($.content_type);return typeof b=="string"&&(ke.includes("content")||ke.includes("code")||ke.includes("source"))?Pe||te||Te(b)||"text":typeof b!="string"||Array.isArray(b)||b&&typeof b=="object"?"json":Te(b)||"text"}function ge(g,b,$){if(Array.isArray(b)||b&&typeof b=="object")return!0;if(typeof b!="string")return!1;const ke=g.toLowerCase();return $!=="text"||b.length>120||we(b)||ke.includes("content")||ke.includes("body")||ke.includes("schema")||ke.includes("payload")}function oe(g,b){return typeof g!="string"?JSON.stringify(g,null,2):b==="json"?Ue(g)||g:se(g)}function Ie(g){const b=Z(g);return Object.entries(b).map(([$,ke])=>{const te=ce($,ke,b);return{key:$,language:te,code:oe(ke,te),isBlock:ge($,ke,te)}})}function je(g){const b=be(g);if(!b||typeof b.content!="string")return null;const $=Se(b.mimeType)||Se(b.mime_type)||Se(b.contentType)||Se(b.content_type)||ue(b.path)||ue(b.filePath)||ue(b.name)||Te(b.content)||"text";return{code:se(b.content),language:$}}function Oe(g){const b=st(g),$=D(b),ke=je($);if(ke)return ke;if($!==null)return{code:JSON.stringify($,null,2),language:"json"};const te=se(b);return{code:te,language:te.includes("```")?"markdown":"text"}}function V(g){return se(st(g))}function F(g){return Le(g.items)?Ve(Le(g.items)||""):Y(g)}function u(g){return g.type==="tool_call"?g.response_status==="failed"?"work-op-square--failed":g.response_status==="success"?"work-op-square--success":"work-op-square--pending":g.type==="content"?"work-op-square--success":"work-op-square--neutral"}function c(g){if(g.type==="tool_call"){const b=g.tool_name||"Tool call";return g.response_status==="failed"?`${b} failed`:g.response_status==="success"?`${b} succeeded`:`${b} pending`}return g.type}function C(g){return new Date(g/1e3).toLocaleTimeString()}function O(g){const b=Math.round(g/1e6);if(b<1)return"< 1s";if(b<60)return`${b}s`;const $=Math.floor(b/60),ke=b%60;return`${$}m ${ke}s`}function Y(g){if(g.status==="pending")return"...";if(!g.isComplete)return"Working...";let b;return g.request_sent_at&&g.response_completed_at?b=g.response_completed_at-g.request_sent_at:b=g.updated_at-g.created_at,`Worked for ${O(b)}`}function Le(g){const b=g.filter($=>$.type==="content");if(b.length===0){const $=g.filter(ke=>ke.type==="reasoning");return $.length>0?$[$.length-1].content:null}return b[b.length-1].content}function Ve(g){const $=g.trim().split(`
|
package/dist/client/ToolsView.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as re,r as b,an as f,Y as ne,w as le,o as ie,z as k,e as l,k as c,f as t,j as p,J as i,s as v,u as d,b as m,q as x,m as g,F as y,l as w,h as ce}from"./vue.js";import{a as h,C as de,A as M,aj as O,_ as me}from"./index.js";import{_ as C,I as q}from"./DataTable.vue_vue_type_script_setup_true_lang.js";import{_ as ue}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{J as pe}from"./JsonViewer.js";import{C as he}from"./CenteredContentView.js";import{_ as be}from"./UiCodeBlock.vue_vue_type_script_setup_true_lang.js";import"./formkit.js";import"./vendor.js";import"./syntax.js";import"./monaco.js";import"./chevron-right.js";import"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";import"./CopyButton.vue_vue_type_script_setup_true_lang.js";import"./check.js";const _="No description available";function $(o){return o.variables||o.tenvs||[]}function fe(o){return Object.entries(o).map(([n,a])=>({name:n,description:a.description||_,schema:null,hasError:a.hasError||!1,error:a.error,type:a.type||"tool",variables:$(a)}))}function xe(o){return Object.entries(o).map(([n,a])=>({name:n,description:a.description||_,schema:a.schema||null,hasError:!1,type:"prompt",model:a.model,variables:$(a)}))}function ge(o){return Object.entries(o).map(([n,a])=>({name:n,description:a.description||_,schema:a.schema||null,hasError:!1,type:"agent",prompt:a.prompt||a.model,variables:$(a)}))}function ke(o){return/^[a-z][a-z0-9_]*[a-z0-9]$/.test(o)||/^[a-z]$/.test(o)}function ve(o){return o.hasError&&o.error?o.error:o.description||_}function T(o){return o.required?`${o.name}*`:o.name}const _e={class:"font-medium mb-1"},ye={id:"functions"},we=["onClick"],Ce={key:1,class:"text-left font-medium text-red-600 dark:text-red-400"},Te={key:0,class:"mt-2 flex flex-wrap gap-1"},$e=["title"],Se={class:"flex justify-end"},Ee=["onClick"],De={key:1,class:"text-neutral-400 text-sm"},Ne={id:"prompts",class:"mt-12"},Ae=["onClick"],Fe={class:"text-neutral-600 dark:text-neutral-400"},je={key:0,class:"mt-2 flex flex-wrap gap-1"},Ve=["title"],Pe={class:"text-sm text-neutral-500 dark:text-neutral-400"},ze={id:"agents",class:"mt-12"},Be=["onClick"],Ie={class:"text-neutral-600 dark:text-neutral-400"},Je={key:0,class:"mt-2 flex flex-wrap gap-1"},Me=["title"],Oe={class:"text-sm text-neutral-500 dark:text-neutral-400"},qe={class:"flex items-center gap-2"},Re={key:0,class:"space-y-4"},Ue={class:"text-lg font-medium mb-2"},Le={class:"text-sm text-neutral-600 dark:text-neutral-400 mb-4"},Ye={key:0,class:"h-96 flex items-center justify-center border border-black/20 dark:border-white/20 rounded bg-black/5 dark:bg-white/5"},pt=re({__name:"ToolsView",setup(o){const n=b(null),a=b(!1),{data:S}=f(h("/api/config")).json(),{data:E,error:He,isFetching:R,execute:U}=f(h("/api/tools?type=tools"),{immediate:!1}).json(),{data:D,error:We,isFetching:L,execute:Y}=f(h("/api/tools?type=prompts&schema=true"),{immediate:!1}).json(),{data:N,error:Ge,isFetching:H,execute:W}=f(h("/api/tools?type=agents&schema=true"),{immediate:!1}).json(),{data:A,error:Ke,isFetching:Qe,execute:G}=f(()=>n.value?h(`/api/tools/${encodeURIComponent(n.value.name)}`):null,{immediate:!1}).json(),F=b([]),j=b([]),V=b([]),P=ne(),z=async()=>{const u=P.hash;if(u){await ce();const s=document.getElementById(u.slice(1));s&&s.scrollIntoView({behavior:"smooth"})}};le(()=>P.hash,z);const B=async u=>{n.value=u,await G(),A.value&&(n.value={...u,schema:A.value.schema||null}),a.value=!0},I=async u=>{if(n.value=u,a.value=!0,!u.schema&&u.type==="prompt"){const s=await fetch(h("/api/tools?type=prompts&schema=true"));if(s.ok){const e=await s.json();e[u.name]&&(n.value={...u,schema:e[u.name].schema||null})}}},K=[{key:"name",label:"Prompt Name",width:"w-1/3",sortable:!0},{key:"description",label:"Description",width:"w-1/2"},{key:"model",label:"Model",width:"w-1/6",sortable:!0,filterable:!0}],Q=[{key:"name",label:"Agent Name",width:"w-1/3",sortable:!0},{key:"description",label:"Description",width:"w-1/2"},{key:"prompt",label:"Prompt",width:"w-1/6",sortable:!0,filterable:!0}],X=[{key:"name",label:"Tool Name",width:"w-1/3",sortable:!0},{key:"description",label:"Description",width:"w-1/2"},{key:"actions",label:"Actions",width:"w-1/6"}],Z=()=>{E.value&&(F.value=fe(E.value))},ee=()=>{D.value&&(j.value=xe(D.value))},te=()=>{N.value&&(V.value=ge(N.value))},ae=async()=>{await U(),Z()},se=async()=>{await Y(),ee()},oe=async()=>{await W(),te()},J=()=>{a.value=!1,n.value=null};return ie(()=>{ae(),se(),oe(),z()}),(u,s)=>(l(),k(he,null,{default:c(()=>[s[6]||(s[6]=t("div",{class:"flex justify-between items-center mb-6"},[t("h1",{class:"text-3xl font-bold"},"Tools")],-1)),s[7]||(s[7]=t("p",{class:"text-neutral-600 dark:text-neutral-400 mb-6"}," Tools are the fundamental building blocks of how your business logic is exposed to your agents. Your prompts can expose tools for the agents to call. There are 3 types of tools: functions, prompts, and agents. Functions are actual code in your AgentBuilder codebase. Prompts are any prompts created in the prompts table (which can themselves expose tools). Agents are multi-turn conversations that can be invoked as tools. ",-1)),p(i(de),{variant:"info",class:"mb-6"},{default:c(()=>[t("p",_e,[s[1]||(s[1]=v(" To create or modify tools, edit the ",-1)),p(i(be),null,{default:c(()=>[v(d(i(S)?.toolsDir||"agentbuilder/tools")+"/",1)]),_:1}),s[2]||(s[2]=v(" directory of your codebase. ",-1))]),s[3]||(s[3]=t("p",{class:"opacity-70"}," Changes will be automatically detected. ",-1))]),_:1}),t("div",ye,[p(C,{title:"Functions",description:"Function tools defined in your codebase.",columns:X,data:F.value,loading:i(R),sortable:"",searchable:"","search-placeholder":"Search functions...","empty-message":`No tools found. Add tool files to the ${i(S)?.toolsDir||"agentbuilder/tools"}/ directory.`},{"cell-name":c(({row:e})=>[t("div",{class:g(["flex items-center gap-2",{"text-red-600 dark:text-red-400":e.hasError}])},[e.hasError?(l(),m("span",Ce,d(e.name),1)):(l(),m("button",{key:0,onClick:r=>B(e),class:"text-left font-medium hover:text-black/70 dark:hover:text-white/70 transition-colors underline decoration-transparent hover:decoration-current"},d(e.name),9,we)),e.hasError?(l(),k(i(M),{key:2,content:"This tool has validation errors"},{default:c(()=>[p(i(O),{class:"w-4 h-4 text-red-500"})]),_:1})):i(ke)(e.name)?x("",!0):(l(),k(i(M),{key:3,content:"Tool name should be in snake_case format (e.g., 'log_name', 'send_email')"},{default:c(()=>[p(i(O),{class:"w-4 h-4 text-amber-500"})]),_:1}))],2)]),"cell-description":c(({row:e})=>[t("div",null,[t("span",{class:g({"text-red-600 dark:text-red-400":e.hasError,"text-neutral-600 dark:text-neutral-400":!e.hasError})},d(i(ve)(e)),3),e.variables&&e.variables.length>0?(l(),m("div",Te,[(l(!0),m(y,null,w(e.variables,r=>(l(),m("span",{key:`${e.name}-${r.name}`,class:g(["text-[10px] px-1.5 py-0.5 rounded uppercase tracking-wide",r.type==="secret"?"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300":"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300"]),title:r.description||r.name},d(i(T)(r)),11,$e))),128))])):x("",!0)])]),"cell-actions":c(({row:e})=>[t("div",Se,[e.hasError?(l(),m("span",De,"—")):(l(),m("button",{key:0,onClick:r=>B(e),class:"p-1.5 rounded hover:bg-black/10 dark:hover:bg-white/10 transition-colors",title:"View Schema"},[p(i(q),{class:"w-4 h-4"})],8,Ee))])]),_:1},8,["data","loading","empty-message"])]),t("div",Ne,[p(C,{title:"Prompts",description:"Prompts that are exposed as tools can be called by other prompts and agents. These allow you to create reusable, composable prompt chains.",columns:K,data:j.value,loading:i(L),sortable:"",searchable:"","search-placeholder":"Search prompts...","empty-message":"No prompts are currently exposed as tools. Mark a prompt as 'Expose as tool' to see it here."},{"cell-name":c(({row:e})=>[t("button",{onClick:r=>I(e),class:"text-left font-medium hover:text-black/70 dark:hover:text-white/70 transition-colors underline decoration-transparent hover:decoration-current"},d(e.name),9,Ae)]),"cell-description":c(({row:e})=>[t("div",null,[t("span",Fe,d(e.description),1),e.variables&&e.variables.length>0?(l(),m("div",je,[(l(!0),m(y,null,w(e.variables,r=>(l(),m("span",{key:`${e.name}-${r.name}`,class:g(["text-[10px] px-1.5 py-0.5 rounded uppercase tracking-wide",r.type==="secret"?"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300":"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300"]),title:r.description||r.name},d(i(T)(r)),11,Ve))),128))])):x("",!0)])]),"cell-model":c(({row:e})=>[t("span",Pe,d(e.model||"-"),1)]),_:1},8,["data","loading"])]),t("div",ze,[p(C,{title:"Agents",description:"Agents that are exposed as tools can be called by other prompts and agents. When an agent is called as a tool, it uses the Side A system prompt's requirements as the tool's input schema.",columns:Q,data:V.value,loading:i(H),sortable:"",searchable:"","search-placeholder":"Search agents...","empty-message":"No agents are currently exposed as tools. Mark an agent as 'Expose as tool' to see it here."},{"cell-name":c(({row:e})=>[t("button",{onClick:r=>I(e),class:"text-left font-medium hover:text-black/70 dark:hover:text-white/70 transition-colors underline decoration-transparent hover:decoration-current"},d(e.name),9,Be)]),"cell-description":c(({row:e})=>[t("div",null,[t("span",Ie,d(e.description),1),e.variables&&e.variables.length>0?(l(),m("div",Je,[(l(!0),m(y,null,w(e.variables,r=>(l(),m("span",{key:`${e.name}-${r.name}`,class:g(["text-[10px] px-1.5 py-0.5 rounded uppercase tracking-wide",r.type==="secret"?"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300":"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300"]),title:r.description||r.name},d(i(T)(r)),11,Me))),128))])):x("",!0)])]),"cell-prompt":c(({row:e})=>[t("span",Oe,d(e.prompt||"-"),1)]),_:1},8,["data","loading"])]),p(ue,{modelValue:a.value,"onUpdate:modelValue":s[0]||(s[0]=e=>a.value=e),onClose:J,width:"max-w-4xl"},{header:c(()=>[t("div",qe,[p(i(q),{class:"w-5 h-5"}),t("span",null,d(n.value?.name)+" Schema",1)])]),footer:c(()=>[p(i(me),{onClick:J},{default:c(()=>[...s[5]||(s[5]=[v(" Close ",-1)])]),_:1})]),default:c(()=>[n.value?(l(),m("div",Re,[t("div",null,[t("h3",Ue,d(n.value.type==="prompt"?"Required Schema":"JSON Schema"),1),t("p",Le,d(n.value.type==="prompt"?"This is the JSON schema that defines the input parameters for this prompt.":"This is the automatically generated JSON schema for the tool's arguments."),1)]),n.value.schema===null?(l(),m("div",Ye,[...s[4]||(s[4]=[t("p",{class:"text-neutral-500 dark:text-neutral-400"}," No parameters required ",-1)])])):(l(),k(pe,{key:1,value:n.value.schema,class:"h-96 border border-black/20 dark:border-white/20 rounded"},null,8,["value"]))])):x("",!0)]),_:1},8,["modelValue"])]),_:1}))}});export{pt as default};
|
|
1
|
+
import{d as re,r as b,an as f,Y as ne,w as le,o as ie,z as k,e as l,k as c,f as t,j as p,J as i,s as v,u as d,b as m,q as x,m as g,F as y,l as w,h as ce}from"./vue.js";import{a as h,B as de,z as M,ai as O,_ as me}from"./index.js";import{_ as C,I as q}from"./DataTable.vue_vue_type_script_setup_true_lang.js";import{_ as ue}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{J as pe}from"./JsonViewer.js";import{C as he}from"./CenteredContentView.js";import{_ as be}from"./UiCodeBlock.vue_vue_type_script_setup_true_lang.js";import"./formkit.js";import"./vendor.js";import"./syntax.js";import"./monaco.js";import"./chevron-right.js";import"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";import"./CopyButton.vue_vue_type_script_setup_true_lang.js";import"./check.js";const _="No description available";function $(o){return o.variables||o.tenvs||[]}function fe(o){return Object.entries(o).map(([n,a])=>({name:n,description:a.description||_,schema:null,hasError:a.hasError||!1,error:a.error,type:a.type||"tool",variables:$(a)}))}function xe(o){return Object.entries(o).map(([n,a])=>({name:n,description:a.description||_,schema:a.schema||null,hasError:!1,type:"prompt",model:a.model,variables:$(a)}))}function ge(o){return Object.entries(o).map(([n,a])=>({name:n,description:a.description||_,schema:a.schema||null,hasError:!1,type:"agent",prompt:a.prompt||a.model,variables:$(a)}))}function ke(o){return/^[a-z][a-z0-9_]*[a-z0-9]$/.test(o)||/^[a-z]$/.test(o)}function ve(o){return o.hasError&&o.error?o.error:o.description||_}function T(o){return o.required?`${o.name}*`:o.name}const _e={class:"font-medium mb-1"},ye={id:"functions"},we=["onClick"],Ce={key:1,class:"text-left font-medium text-red-600 dark:text-red-400"},Te={key:0,class:"mt-2 flex flex-wrap gap-1"},$e=["title"],Se={class:"flex justify-end"},Ee=["onClick"],De={key:1,class:"text-neutral-400 text-sm"},Ne={id:"prompts",class:"mt-12"},Fe=["onClick"],Ae={class:"text-neutral-600 dark:text-neutral-400"},je={key:0,class:"mt-2 flex flex-wrap gap-1"},Ve=["title"],Pe={class:"text-sm text-neutral-500 dark:text-neutral-400"},ze={id:"agents",class:"mt-12"},Be=["onClick"],Ie={class:"text-neutral-600 dark:text-neutral-400"},Je={key:0,class:"mt-2 flex flex-wrap gap-1"},Me=["title"],Oe={class:"text-sm text-neutral-500 dark:text-neutral-400"},qe={class:"flex items-center gap-2"},Re={key:0,class:"space-y-4"},Ue={class:"text-lg font-medium mb-2"},Le={class:"text-sm text-neutral-600 dark:text-neutral-400 mb-4"},Ye={key:0,class:"h-96 flex items-center justify-center border border-black/20 dark:border-white/20 rounded bg-black/5 dark:bg-white/5"},pt=re({__name:"ToolsView",setup(o){const n=b(null),a=b(!1),{data:S}=f(h("/api/config")).json(),{data:E,error:He,isFetching:R,execute:U}=f(h("/api/tools?type=tools"),{immediate:!1}).json(),{data:D,error:We,isFetching:L,execute:Y}=f(h("/api/tools?type=prompts&schema=true"),{immediate:!1}).json(),{data:N,error:Ge,isFetching:H,execute:W}=f(h("/api/tools?type=agents&schema=true"),{immediate:!1}).json(),{data:F,error:Ke,isFetching:Qe,execute:G}=f(()=>n.value?h(`/api/tools/${encodeURIComponent(n.value.name)}`):null,{immediate:!1}).json(),A=b([]),j=b([]),V=b([]),P=ne(),z=async()=>{const u=P.hash;if(u){await ce();const s=document.getElementById(u.slice(1));s&&s.scrollIntoView({behavior:"smooth"})}};le(()=>P.hash,z);const B=async u=>{n.value=u,await G(),F.value&&(n.value={...u,schema:F.value.schema||null}),a.value=!0},I=async u=>{if(n.value=u,a.value=!0,!u.schema&&u.type==="prompt"){const s=await fetch(h("/api/tools?type=prompts&schema=true"));if(s.ok){const e=await s.json();e[u.name]&&(n.value={...u,schema:e[u.name].schema||null})}}},K=[{key:"name",label:"Prompt Name",width:"w-1/3",sortable:!0},{key:"description",label:"Description",width:"w-1/2"},{key:"model",label:"Model",width:"w-1/6",sortable:!0,filterable:!0}],Q=[{key:"name",label:"Agent Name",width:"w-1/3",sortable:!0},{key:"description",label:"Description",width:"w-1/2"},{key:"prompt",label:"Prompt",width:"w-1/6",sortable:!0,filterable:!0}],X=[{key:"name",label:"Tool Name",width:"w-1/3",sortable:!0},{key:"description",label:"Description",width:"w-1/2"},{key:"actions",label:"Actions",width:"w-1/6"}],Z=()=>{E.value&&(A.value=fe(E.value))},ee=()=>{D.value&&(j.value=xe(D.value))},te=()=>{N.value&&(V.value=ge(N.value))},ae=async()=>{await U(),Z()},se=async()=>{await Y(),ee()},oe=async()=>{await W(),te()},J=()=>{a.value=!1,n.value=null};return ie(()=>{ae(),se(),oe(),z()}),(u,s)=>(l(),k(he,null,{default:c(()=>[s[6]||(s[6]=t("div",{class:"flex justify-between items-center mb-6"},[t("h1",{class:"text-3xl font-bold"},"Tools")],-1)),s[7]||(s[7]=t("p",{class:"text-neutral-600 dark:text-neutral-400 mb-6"}," Tools are the fundamental building blocks of how your business logic is exposed to your agents. Your prompts can expose tools for the agents to call. There are 3 types of tools: functions, prompts, and agents. Functions are actual code in your AgentBuilder codebase. Prompts are any prompts created in the prompts table (which can themselves expose tools). Agents are multi-turn conversations that can be invoked as tools. ",-1)),p(i(de),{variant:"info",class:"mb-6"},{default:c(()=>[t("p",_e,[s[1]||(s[1]=v(" To create or modify tools, edit the ",-1)),p(i(be),null,{default:c(()=>[v(d(i(S)?.toolsDir||"agentbuilder/tools")+"/",1)]),_:1}),s[2]||(s[2]=v(" directory of your codebase. ",-1))]),s[3]||(s[3]=t("p",{class:"opacity-70"}," Changes will be automatically detected. ",-1))]),_:1}),t("div",ye,[p(C,{title:"Functions",description:"Function tools defined in your codebase.",columns:X,data:A.value,loading:i(R),sortable:"",searchable:"","search-placeholder":"Search functions...","empty-message":`No tools found. Add tool files to the ${i(S)?.toolsDir||"agentbuilder/tools"}/ directory.`},{"cell-name":c(({row:e})=>[t("div",{class:g(["flex items-center gap-2",{"text-red-600 dark:text-red-400":e.hasError}])},[e.hasError?(l(),m("span",Ce,d(e.name),1)):(l(),m("button",{key:0,onClick:r=>B(e),class:"text-left font-medium hover:text-black/70 dark:hover:text-white/70 transition-colors underline decoration-transparent hover:decoration-current"},d(e.name),9,we)),e.hasError?(l(),k(i(M),{key:2,content:"This tool has validation errors"},{default:c(()=>[p(i(O),{class:"w-4 h-4 text-red-500"})]),_:1})):i(ke)(e.name)?x("",!0):(l(),k(i(M),{key:3,content:"Tool name should be in snake_case format (e.g., 'log_name', 'send_email')"},{default:c(()=>[p(i(O),{class:"w-4 h-4 text-amber-500"})]),_:1}))],2)]),"cell-description":c(({row:e})=>[t("div",null,[t("span",{class:g({"text-red-600 dark:text-red-400":e.hasError,"text-neutral-600 dark:text-neutral-400":!e.hasError})},d(i(ve)(e)),3),e.variables&&e.variables.length>0?(l(),m("div",Te,[(l(!0),m(y,null,w(e.variables,r=>(l(),m("span",{key:`${e.name}-${r.name}`,class:g(["text-[10px] px-1.5 py-0.5 rounded uppercase tracking-wide",r.type==="secret"?"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300":"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300"]),title:r.description||r.name},d(i(T)(r)),11,$e))),128))])):x("",!0)])]),"cell-actions":c(({row:e})=>[t("div",Se,[e.hasError?(l(),m("span",De,"—")):(l(),m("button",{key:0,onClick:r=>B(e),class:"p-1.5 rounded hover:bg-black/10 dark:hover:bg-white/10 transition-colors",title:"View Schema"},[p(i(q),{class:"w-4 h-4"})],8,Ee))])]),_:1},8,["data","loading","empty-message"])]),t("div",Ne,[p(C,{title:"Prompts",description:"Prompts that are exposed as tools can be called by other prompts and agents. These allow you to create reusable, composable prompt chains.",columns:K,data:j.value,loading:i(L),sortable:"",searchable:"","search-placeholder":"Search prompts...","empty-message":"No prompts are currently exposed as tools. Mark a prompt as 'Expose as tool' to see it here."},{"cell-name":c(({row:e})=>[t("button",{onClick:r=>I(e),class:"text-left font-medium hover:text-black/70 dark:hover:text-white/70 transition-colors underline decoration-transparent hover:decoration-current"},d(e.name),9,Fe)]),"cell-description":c(({row:e})=>[t("div",null,[t("span",Ae,d(e.description),1),e.variables&&e.variables.length>0?(l(),m("div",je,[(l(!0),m(y,null,w(e.variables,r=>(l(),m("span",{key:`${e.name}-${r.name}`,class:g(["text-[10px] px-1.5 py-0.5 rounded uppercase tracking-wide",r.type==="secret"?"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300":"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300"]),title:r.description||r.name},d(i(T)(r)),11,Ve))),128))])):x("",!0)])]),"cell-model":c(({row:e})=>[t("span",Pe,d(e.model||"-"),1)]),_:1},8,["data","loading"])]),t("div",ze,[p(C,{title:"Agents",description:"Agents that are exposed as tools can be called by other prompts and agents. When an agent is called as a tool, it uses the Side A system prompt's requirements as the tool's input schema.",columns:Q,data:V.value,loading:i(H),sortable:"",searchable:"","search-placeholder":"Search agents...","empty-message":"No agents are currently exposed as tools. Mark an agent as 'Expose as tool' to see it here."},{"cell-name":c(({row:e})=>[t("button",{onClick:r=>I(e),class:"text-left font-medium hover:text-black/70 dark:hover:text-white/70 transition-colors underline decoration-transparent hover:decoration-current"},d(e.name),9,Be)]),"cell-description":c(({row:e})=>[t("div",null,[t("span",Ie,d(e.description),1),e.variables&&e.variables.length>0?(l(),m("div",Je,[(l(!0),m(y,null,w(e.variables,r=>(l(),m("span",{key:`${e.name}-${r.name}`,class:g(["text-[10px] px-1.5 py-0.5 rounded uppercase tracking-wide",r.type==="secret"?"bg-amber-100 dark:bg-amber-900 text-amber-700 dark:text-amber-300":"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300"]),title:r.description||r.name},d(i(T)(r)),11,Me))),128))])):x("",!0)])]),"cell-prompt":c(({row:e})=>[t("span",Oe,d(e.prompt||"-"),1)]),_:1},8,["data","loading"])]),p(ue,{modelValue:a.value,"onUpdate:modelValue":s[0]||(s[0]=e=>a.value=e),onClose:J,width:"max-w-4xl"},{header:c(()=>[t("div",qe,[p(i(q),{class:"w-5 h-5"}),t("span",null,d(n.value?.name)+" Schema",1)])]),footer:c(()=>[p(i(me),{onClick:J},{default:c(()=>[...s[5]||(s[5]=[v(" Close ",-1)])]),_:1})]),default:c(()=>[n.value?(l(),m("div",Re,[t("div",null,[t("h3",Ue,d(n.value.type==="prompt"?"Required Schema":"JSON Schema"),1),t("p",Le,d(n.value.type==="prompt"?"This is the JSON schema that defines the input parameters for this prompt.":"This is the automatically generated JSON schema for the tool's arguments."),1)]),n.value.schema===null?(l(),m("div",Ye,[...s[4]||(s[4]=[t("p",{class:"text-neutral-500 dark:text-neutral-400"}," No parameters required ",-1)])])):(l(),k(pe,{key:1,value:n.value.schema,class:"h-96 border border-black/20 dark:border-white/20 rounded"},null,8,["value"]))])):x("",!0)]),_:1},8,["modelValue"])]),_:1}))}});export{pt as default};
|
package/dist/client/UsersView.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as
|
|
1
|
+
import{r as P}from"./formkit.js";import{B as Y,_ as h,G as y,d as x,e as V}from"./index.js";import{_ as H}from"./DataTable.vue_vue_type_script_setup_true_lang.js";import{_ as $}from"./Modal.vue_vue_type_script_setup_true_lang.js";import{C as Q}from"./CenteredContentView.js";import{u as W}from"./useActionFeedback.js";import{g as M,b as X}from"./settingsData.js";import{d as Z,r as l,o as ee,O as B,z as O,e as C,k as r,q as j,j as s,J as i,s as b,u as T,f as m,b as K}from"./vue.js";import"./vendor.js";import"./monaco.js";import"./syntax.js";import"./chevron-right.js";import"./ConfirmDialog.vue_vue_type_script_setup_true_lang.js";const ae={class:"inline-flex items-center gap-2"},se={key:0,class:"rounded-full bg-accent-100 px-2 py-0.5 text-xs font-medium text-accent-800 dark:bg-accent-900 dark:text-accent-200"},te={key:1,class:"rounded-full bg-neutral-100 px-2 py-0.5 text-xs font-medium text-neutral-600 dark:bg-neutral-800 dark:text-neutral-300",title:"Signs in through the Standard Agents platform connection"},re={class:"space-y-4"},oe={class:"flex justify-end gap-2"},le={class:"space-y-4"},ne={class:"flex justify-end gap-2"},ke=Z({__name:"UsersView",setup(de){const g=l(!1),U=l(!1),F=l([]),S=l(null),E=l(!1),w=l(null),p=l(!1),f=l(!1),u=l(null),c=l(null),{feedback:A,setFeedback:d,clearFeedback:_}=W(),v=l({username:"",role:"admin"}),D=[{value:"admin",label:"Admin"}],R=[{key:"username",label:"Username",width:"w-1/3"},{key:"role",label:"Role",width:"w-1/4"},{key:"created_at",label:"Created",width:"w-1/3",formatter:a=>new Date(a*1e3).toLocaleString()}],J=[{icon:"edit",label:"Edit",handler:async a=>{w.value=a,v.value={username:a.username,role:a.role},U.value=!0}},{icon:"delete",label:"Delete",confirm:!0,confirmMessage:"Are you sure you want to delete this user? This action cannot be undone.",handler:async a=>{await I(a.id)}}],k=async()=>{E.value=!0,_();try{const a=await y("/users");if(!a.ok)throw new Error("Failed to fetch users");const e=await a.json();F.value=e.users||[]}catch{d("error","Users could not be loaded."),F.value=[]}finally{E.value=!1}},L=async()=>{try{const a=await y("/auth/me");if(!a.ok)return;const e=await a.json();S.value=e.user?.id??null}catch{S.value=null}},z=async a=>{p.value=!0,_(),x(u);try{const e=await y("/users",{method:"POST",body:JSON.stringify(a)});if(!e.ok){const n=await e.json();V(n,u)||d("error",M(n,"Failed to add user"));return}await k(),q(),d("success","User added.")}catch{V({error:"Failed to add user"},u)}finally{p.value=!1}},G=async a=>{if(w.value){f.value=!0,_(),x(c);try{const e=X(a),n=await y(`/users/${w.value.id}`,{method:"PUT",body:JSON.stringify(e)});if(!n.ok){const o=await n.json();V(o,c)||d("error",M(o,"Failed to update user"));return}await k(),N(),d("success","User updated.")}catch{V({error:"Failed to update user"},c)}finally{f.value=!1}}},I=async a=>{_();try{const e=await y(`/users/${a}`,{method:"DELETE"});if(!e.ok){const n=await e.json();d("error",M(n,"Failed to delete user"));return}await k(),d("success","User deleted.")}catch{d("error","Failed to delete user")}},q=()=>{x(u),P("add-user-form"),g.value=!1},N=()=>{x(c),P("edit-user-form"),U.value=!1,w.value=null};return ee(()=>{k(),L()}),(a,e)=>{const n=B("FormKitMessages"),o=B("FormKit");return C(),O(Q,null,{default:r(()=>[i(A)?(C(),O(i(Y),{key:0,variant:i(A).variant,class:"mb-4"},{default:r(()=>[b(T(i(A).message),1)]),_:1},8,["variant"])):j("",!0),s(H,{title:"Users",description:"Manage user accounts and permissions","primary-action":{label:"Add User",handler:()=>g.value=!0},columns:R,data:F.value,actions:J,loading:E.value,"empty-message":"No users found"},{"cell-username":r(({row:t})=>[m("span",ae,[m("span",null,T(t.username),1),t.id===S.value?(C(),K("span",se," You ")):j("",!0),t.source==="standard_agents"?(C(),K("span",te," Standard Agents login ")):j("",!0)])]),_:1},8,["primary-action","data","loading"]),s($,{modelValue:g.value,"onUpdate:modelValue":e[1]||(e[1]=t=>g.value=t),title:"Add User",onClose:q},{footer:r(()=>[m("div",oe,[s(i(h),{variant:"secondary",disabled:p.value,onClick:q},{default:r(()=>[...e[6]||(e[6]=[b(" Cancel ",-1)])]),_:1},8,["disabled"]),s(i(h),{type:"submit",form:"add-user-form",loading:p.value},{default:r(()=>[...e[7]||(e[7]=[b(" Add User ",-1)])]),_:1},8,["loading"])])]),default:r(()=>[s(o,{id:"add-user-form",type:"form",actions:!1,disabled:p.value,onSubmit:z,onNode:e[0]||(e[0]=t=>u.value=t)},{default:r(()=>[m("div",re,[s(n,{node:u.value||void 0},null,8,["node"]),s(o,{type:"text",name:"username",label:"Username",validation:"required","validation-messages":{required:"Username is required"}}),s(o,{type:"password",name:"password",label:"Password",validation:"required","validation-messages":{required:"Password is required"}}),s(o,{type:"selectSearch",name:"role",label:"Role",options:D,value:"admin",placeholder:"Select role"})])]),_:1},8,["disabled"])]),_:1},8,["modelValue"]),s($,{modelValue:U.value,"onUpdate:modelValue":e[5]||(e[5]=t=>U.value=t),title:"Edit User",onClose:N},{footer:r(()=>[m("div",ne,[s(i(h),{variant:"secondary",disabled:f.value,onClick:N},{default:r(()=>[...e[8]||(e[8]=[b(" Cancel ",-1)])]),_:1},8,["disabled"]),s(i(h),{type:"submit",form:"edit-user-form",loading:f.value},{default:r(()=>[...e[9]||(e[9]=[b(" Update User ",-1)])]),_:1},8,["loading"])])]),default:r(()=>[s(o,{id:"edit-user-form",type:"form",actions:!1,disabled:f.value,onSubmit:G,onNode:e[4]||(e[4]=t=>c.value=t)},{default:r(()=>[m("div",le,[s(n,{node:c.value||void 0},null,8,["node"]),s(o,{type:"text",name:"username",label:"Username",validation:"required",modelValue:v.value.username,"onUpdate:modelValue":e[2]||(e[2]=t=>v.value.username=t),"validation-messages":{required:"Username is required"}},null,8,["modelValue"]),s(o,{type:"password",name:"password",label:"Password",help:"Leave blank to keep current password"}),s(o,{type:"selectSearch",name:"role",label:"Role",options:D,modelValue:v.value.role,"onUpdate:modelValue":e[3]||(e[3]=t=>v.value.role=t),placeholder:"Select role"},null,8,["modelValue"])])]),_:1},8,["disabled"])]),_:1},8,["modelValue"])]),_:1})}}});export{ke as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as de,Y as ie,c as z,r as c,w as ue,o as ce,O as ve,z as y,e as o,k as
|
|
1
|
+
import{d as de,Y as ie,c as z,r as c,w as ue,o as ce,O as ve,z as y,e as o,k as A,q as I,f as n,J as i,s as B,u as R,j as m,b,_ as me,F as D,l as O,m as P,b5 as H,b6 as Y,b3 as W,P as q,K as J}from"./vue.js";import{C as pe}from"./CenteredContentView.js";import{B as be,A as he,_ as fe,d as U,G as Z,e as G,k as ke}from"./index.js";import{u as xe}from"./useActionFeedback.js";import{g as Q}from"./settingsData.js";import"./formkit.js";import"./vendor.js";import"./syntax.js";import"./monaco.js";const ye={class:"overflow-hidden rounded-xl border border-neutral-200 bg-white dark:border-neutral-800 dark:bg-neutral-900"},_e={class:"border-b border-neutral-200 px-5 py-4 dark:border-neutral-800"},ge={class:"text-lg font-semibold text-neutral-900 dark:text-neutral-50"},we={class:"mt-1 text-sm text-neutral-500 dark:text-neutral-400"},Ve={key:0,class:"flex justify-center py-8"},$e={key:1,class:"space-y-5"},Ee={key:0,class:"rounded-lg border border-dashed border-neutral-200 px-4 py-5 text-sm text-neutral-500 dark:border-neutral-800 dark:text-neutral-400"},Ce={key:1,class:"space-y-2"},Ne={class:"min-w-0"},Ae=["title"],Re=["disabled","title","onClick"],Se=["disabled","onClick"],Te={class:"space-y-2 border-t border-neutral-200 pt-5 dark:border-neutral-800"},je=["disabled","title","onClick"],Fe=["disabled","onClick"],Ke=["disabled"],Me={class:"flex flex-col gap-3 border-t border-neutral-200 pt-5 dark:border-neutral-800 sm:flex-row sm:items-center sm:justify-between"},X="**********",ze=de({__name:"VariablesView",setup(Ie){const ee=ie(),V=z(()=>ee.name==="instance-variables"),u=z(()=>({title:V.value?"Instance Variables":"My Variables",description:V.value?"Defaults for the full AgentBuilder instance. These apply when a thread or user does not provide a more local value.":"Defaults for your user account. These override instance values and are overridden by thread-specific values.",endpoint:V.value?"/envs/instance":"/users/me/env",successMessage:V.value?"Instance variables saved.":"User variables saved."}));let te=0;const _=()=>({id:`scoped-env-${te++}`,name:"",value:"",secret:!0}),$=c(!1),l=c(!1),f=c([]),E=c({}),v=c({}),g=c({}),w=c({}),k=c({}),p=c([_()]),h=c(null),{feedback:S,setFeedback:x,clearFeedback:T}=xe(),C=z(()=>f.value.filter(a=>!k.value[a.name])),j=(a={})=>({outer:"$remove:mb-4 !mb-0 min-w-0",wrapper:"$remove:flex-1 flex min-w-0",inner:"$reset min-w-0",input:["$reset block h-9 w-full min-w-0 rounded border border-neutral-200 bg-white px-3 py-2 text-sm text-neutral-700 placeholder:text-neutral-400 disabled:opacity-60 dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-200",a.mono?"font-mono":""].filter(Boolean).join(" "),help:"$remove:hidden hidden",messages:"$remove:formkit-messages hidden"}),N=a=>{const r={},d={};for(const e of a)r[e.name]=e.type==="secret"?X:e.value??"",d[e.name]=e.type==="secret";E.value=r,v.value=d,g.value={},w.value={},k.value={}},F=(a,r)=>{G(r?{error:a,fieldErrors:r}:{error:a},h)||x("error",a)},ae=a=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(a.trim()),re=a=>{g.value={...g.value,[a]:!0}},se=a=>{v.value={...v.value,[a]:!v.value[a]},w.value={...w.value,[a]:!0}},ne=a=>{k.value={...k.value,[a]:!0},T(),U(h)},le=()=>{p.value=[...p.value,_()]},oe=a=>{const r=p.value.filter(d=>d.id!==a);p.value=r.length>0?r:[_()]},K=async()=>{$.value=!0,U(h);try{const a=await Z(u.value.endpoint),r=await a.json().catch(()=>({}));if(!a.ok){x("error",Q(r,`Failed to load ${u.value.title.toLowerCase()}`)),f.value=[],N([]);return}T(),f.value=r.variables||[],N(f.value)}catch(a){const r=a instanceof Error?a.message:`Failed to load ${u.value.title.toLowerCase()}`;x("error",r),f.value=[],N([])}finally{$.value=!1}},M=async()=>{if(l.value)return;T(),U(h);const a={},r={},d=Object.keys(k.value).filter(t=>k.value[t]);for(const t of C.value){if(!g.value[t.name]&&!w.value[t.name])continue;const s=E.value[t.name]??"";s!==X&&(a[t.name]=s),(g.value[t.name]||w.value[t.name])&&(r[t.name]=v.value[t.name]?"secret":"text")}const e=new Set;for(const t of p.value){const s=t.name.trim(),L=t.value.length>0;if(!(!s&&!L)){if(!s||!ae(s)){F("Use a valid env name like WEATHER_API_KEY",{[`${t.id}_name`]:"Use a valid env name like WEATHER_API_KEY"});return}if(e.has(s)){F(`Duplicate env name: ${s}`,{[`${t.id}_name`]:`Duplicate env name: ${s}`});return}e.add(s),a[s]=t.value,r[s]=t.secret?"secret":"text"}}if(Object.keys(a).length===0&&Object.keys(r).length===0&&d.length===0){F("No env changes to save");return}l.value=!0;try{const t=await Z(u.value.endpoint,{method:"PATCH",body:JSON.stringify({env_patch:a,env_type_patch:r,env_delete:d})}),s=await t.json().catch(()=>({}));if(!t.ok){G(s,h)||x("error",Q(s,`Failed to save ${u.value.title.toLowerCase()}`));return}await K(),p.value=[_()],x("success",u.value.successMessage)}catch(t){x("error",t instanceof Error?t.message:`Failed to save ${u.value.title.toLowerCase()}`)}finally{l.value=!1}};return ue(()=>u.value.endpoint,()=>{f.value=[],N([]),p.value=[_()],K()}),ce(()=>{K()}),(a,r)=>{const d=ve("FormKit");return o(),y(pe,null,{default:A(()=>[i(S)?(o(),y(i(be),{key:0,variant:i(S).variant,class:"mb-4"},{default:A(()=>[B(R(i(S).message),1)]),_:1},8,["variant"])):I("",!0),n("div",ye,[n("div",_e,[n("h1",ge,R(u.value.title),1),n("p",we,R(u.value.description),1),r[1]||(r[1]=n("p",{class:"mt-2 text-xs text-neutral-500 dark:text-neutral-400"}," Resolution order: thread, user, instance, agent, then prompt. ",-1))]),m(d,{type:"form",id:"scoped-env-form",actions:!1,disabled:l.value,onSubmit:M,onNode:r[0]||(r[0]=e=>h.value=e),"form-class":"$reset p-5"},{default:A(()=>[m(i(me),{node:h.value||void 0},null,8,["node"]),$.value?(o(),b("div",Ve,[m(he)])):(o(),b("div",$e,[C.value.length===0?(o(),b("div",Ee," No stored variables yet. ")):I("",!0),C.value.length>0?(o(),b("div",Ce,[(o(!0),b(D,null,O(C.value,e=>(o(),b("div",{key:e.name,class:"scoped-env-row grid items-center gap-2"},[n("div",Ne,[n("div",{class:"truncate text-xs font-mono text-neutral-700 dark:text-neutral-200",title:e.name},R(e.name),9,Ae)]),m(d,{type:v.value[e.name]?"password":"text",name:`env_${e.name}`,modelValue:E.value[e.name],"onUpdate:modelValue":t=>E.value[e.name]=t,placeholder:"Value",disabled:l.value,"outer-class":"$reset",classes:j(),onInput:t=>re(e.name)},null,8,["type","name","modelValue","onUpdate:modelValue","disabled","classes","onInput"]),n("button",{type:"button",class:P(["inline-flex h-9 w-9 shrink-0 items-center justify-center rounded border border-neutral-200 text-neutral-500 hover:bg-neutral-50 hover:text-neutral-900 disabled:opacity-50 dark:border-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-800 dark:hover:text-white",v.value[e.name]?"":"text-neutral-300 dark:text-neutral-600"]),disabled:l.value,title:v.value[e.name]?"Treat as secret":"Treat as text",onClick:t=>se(e.name)},[v.value[e.name]?(o(),y(i(H),{key:0,size:14})):(o(),y(i(Y),{key:1,size:14}))],10,Re),n("button",{type:"button",class:"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded border border-neutral-200 text-neutral-400 hover:border-red-200 hover:bg-red-50 hover:text-red-600 disabled:opacity-50 dark:border-neutral-800 dark:text-neutral-500 dark:hover:border-red-900 dark:hover:bg-red-950 dark:hover:text-red-400",disabled:l.value,title:"Remove variable",onClick:t=>ne(e.name)},[m(i(W),{size:14})],8,Se)]))),128))])):I("",!0),n("div",Te,[(o(!0),b(D,null,O(p.value,e=>(o(),b("div",{key:e.id,class:"scoped-env-row grid items-center gap-2"},[m(d,{type:"text",name:`${e.id}_name`,modelValue:e.name,"onUpdate:modelValue":t=>e.name=t,placeholder:"WEATHER_API_KEY",disabled:l.value,validation:"envName","validation-visibility":"submit","outer-class":"$reset",classes:j({mono:!0}),onKeydown:q(J(M,["prevent"]),["enter"])},null,8,["name","modelValue","onUpdate:modelValue","disabled","classes","onKeydown"]),m(d,{type:e.secret?"password":"text",name:`${e.id}_value`,modelValue:e.value,"onUpdate:modelValue":t=>e.value=t,placeholder:"Value",disabled:l.value,"outer-class":"$reset",classes:j(),onKeydown:q(J(M,["prevent"]),["enter"])},null,8,["type","name","modelValue","onUpdate:modelValue","disabled","classes","onKeydown"]),n("button",{type:"button",class:P(["inline-flex h-9 w-9 shrink-0 items-center justify-center rounded border border-neutral-200 text-neutral-500 hover:bg-neutral-50 hover:text-neutral-900 disabled:opacity-50 dark:border-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-800 dark:hover:text-white",e.secret?"":"text-neutral-300 dark:text-neutral-600"]),disabled:l.value,title:e.secret?"Treat as secret":"Treat as text",onClick:t=>e.secret=!e.secret},[e.secret?(o(),y(i(H),{key:0,size:14})):(o(),y(i(Y),{key:1,size:14}))],10,je),n("button",{type:"button",class:"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded border border-neutral-200 text-neutral-400 hover:border-red-200 hover:bg-red-50 hover:text-red-600 disabled:opacity-50 dark:border-neutral-800 dark:text-neutral-500 dark:hover:border-red-900 dark:hover:bg-red-950 dark:hover:text-red-400",disabled:l.value,title:"Remove new row",onClick:t=>oe(e.id)},[m(i(W),{size:14})],8,Fe)]))),128)),n("button",{type:"button",class:"text-sm font-medium text-neutral-500 hover:text-neutral-900 disabled:opacity-50 dark:text-neutral-400 dark:hover:text-neutral-100",disabled:l.value,onClick:le}," Add another variable ",8,Ke)]),n("div",Me,[r[3]||(r[3]=n("p",{class:"text-xs text-neutral-500 dark:text-neutral-400"}," Secret values stay encrypted at rest and remain write-only until you switch them to text. ",-1)),m(i(fe),{type:"submit",form:"scoped-env-form",loading:l.value,disabled:l.value||$.value},{default:A(()=>[...r[2]||(r[2]=[B(" Save Variables ",-1)])]),_:1},8,["loading","disabled"])])]))]),_:1},8,["disabled"])])]),_:1})}}}),qe=ke(ze,[["__scopeId","data-v-c62ae15d"]]);export{qe as default};
|