@runfusion/fusion 0.2.5 → 0.2.6

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.
Files changed (31) hide show
  1. package/dist/bin.js +269 -47
  2. package/dist/client/assets/{AgentDetailView-CkuuGA1O.js → AgentDetailView-CBdzWtd-.js} +1 -1
  3. package/dist/client/assets/{AgentsView-CWFLMIDP.js → AgentsView-DPlnCa_B.js} +3 -3
  4. package/dist/client/assets/{ChatView-C_T91ebd.js → ChatView-BXzYysNG.js} +1 -1
  5. package/dist/client/assets/{DevServerView-ChWTzTvy.js → DevServerView-BY5cGz23.js} +1 -1
  6. package/dist/client/assets/{DirectoryPicker-BMJIT7HD.js → DirectoryPicker-DZ90eSBn.js} +1 -1
  7. package/dist/client/assets/{DocumentsView-Co9to4Zp.css → DocumentsView-DV2DrCZb.css} +1 -1
  8. package/dist/client/assets/{DocumentsView-CjfVl8mZ.js → DocumentsView-lQwJmc4G.js} +1 -1
  9. package/dist/client/assets/{InsightsView-Rb735C9_.js → InsightsView-DUiZZ0z8.js} +1 -1
  10. package/dist/client/assets/{MemoryView-LLc_uNtG.js → MemoryView-DvSmMN6G.js} +1 -1
  11. package/dist/client/assets/{NodesView-BviqBWRA.js → NodesView-DgyM-ktg.js} +1 -1
  12. package/dist/client/assets/PiExtensionsManager-K7HQ08L4.css +1 -0
  13. package/dist/client/assets/PiExtensionsManager-wxB-q06A.js +11 -0
  14. package/dist/client/assets/{PluginManager-BywTPbLB.js → PluginManager-LH02ybSH.js} +1 -1
  15. package/dist/client/assets/PluginManager-tCFMZMLL.css +1 -0
  16. package/dist/client/assets/{RoadmapsView-Dhl--4vY.js → RoadmapsView-ANn2jmsU.js} +1 -1
  17. package/dist/client/assets/{SetupWizardModal-CVtmwoJC.js → SetupWizardModal-UxlAtKWA.js} +1 -1
  18. package/dist/client/assets/{SkillsView-CG9y4fsE.js → SkillsView-DEjGh7wW.js} +1 -1
  19. package/dist/client/assets/{folder-open-BVDq27HP.js → folder-open-J7yPbaCt.js} +1 -1
  20. package/dist/client/assets/index-BdJsO65L.css +1 -0
  21. package/dist/client/assets/index-CHoVMPAA.js +649 -0
  22. package/dist/client/assets/{upload-BDvpReDO.js → upload-B_grq4hM.js} +1 -1
  23. package/dist/client/index.html +2 -2
  24. package/dist/extension.js +70 -8
  25. package/dist/pi-claude-cli/package.json +1 -1
  26. package/package.json +5 -5
  27. package/dist/client/assets/PiExtensionsManager-CPgmJgDk.css +0 -1
  28. package/dist/client/assets/PiExtensionsManager-CriZBkQe.js +0 -11
  29. package/dist/client/assets/PluginManager-D64RIzmL.css +0 -1
  30. package/dist/client/assets/index-CikysL-d.js +0 -644
  31. package/dist/client/assets/index-Da1qmtc7.css +0 -1
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-CkuuGA1O.js","assets/vendor-react-K0fH_qHe.js","assets/index-CikysL-d.js","assets/vendor-xterm-DzcZoU0P.js","assets/vendor-xterm-LZoznX6r.css","assets/index-Da1qmtc7.css","assets/upload-BDvpReDO.js","assets/folder-open-BVDq27HP.js","assets/AgentDetailView-BMrHuWGs.css"])))=>i.map(i=>d[i]);
2
- import{c as Fe,s as lt,A as xe,C as Se,Z as ot,B as De,g as Re,a as tt,b as Ae,d as ct,e as dt,f as ut,h as mt,i as ht,u as ze,j as gt,P as pt,k as ft,l as Oe,G as bt,S as vt,L as Te,T as Me,R as $e,F as qe,X as He,m as xt,n as yt,o as wt,p as ie,q as Ve,r as jt,t as kt,v as Nt,w as It,x as Ct,y as We,z as St,D as nt,H as Et,E as ke,I as Ke,J as Ue,K as At,M as Tt,N as Ne,O as Mt,Q as Be,U as _t,V as Ge,W as Pt,_ as Rt}from"./index-CikysL-d.js";import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{U as st}from"./upload-BDvpReDO.js";import{F as $t}from"./folder-open-BVDq27HP.js";/**
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-CBdzWtd-.js","assets/vendor-react-K0fH_qHe.js","assets/index-CHoVMPAA.js","assets/vendor-xterm-DzcZoU0P.js","assets/vendor-xterm-LZoznX6r.css","assets/index-BdJsO65L.css","assets/upload-B_grq4hM.js","assets/folder-open-J7yPbaCt.js","assets/AgentDetailView-BMrHuWGs.css"])))=>i.map(i=>d[i]);
2
+ import{c as Fe,s as lt,A as xe,C as Se,Z as ot,B as De,g as Re,a as tt,b as Ae,d as ct,e as dt,f as ut,h as mt,i as ht,u as ze,j as gt,P as pt,k as ft,l as Oe,G as bt,S as vt,L as Te,T as Me,R as $e,F as qe,X as He,m as xt,n as yt,o as wt,p as ie,q as Ve,r as jt,t as kt,v as Nt,w as It,x as Ct,y as We,z as St,D as nt,H as Et,E as ke,I as Ke,J as Ue,K as At,M as Tt,N as Ne,O as Mt,Q as Be,U as _t,V as Ge,W as Pt,_ as Rt}from"./index-CHoVMPAA.js";import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{U as st}from"./upload-B_grq4hM.js";import{F as $t}from"./folder-open-J7yPbaCt.js";/**
3
3
  * @license lucide-react v1.7.0 - ISC
4
4
  *
5
5
  * This source code is licensed under the ISC license.
@@ -519,4 +519,4 @@ reportsTo: null
519
519
  skills:
520
520
  - review
521
521
  ---
522
- Agent instructions go here...`,value:o,onChange:n=>{u("paste"),N([]),g(n.target.value),M(null)},rows:8,"aria-label":"Manifest content"})]}),e.jsxs("p",{className:"agent-import-file-hint",children:["Current input: ",r]}),_&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(Me,{size:14}),_]})]}),c==="preview"&&e.jsxs("div",{className:"agent-import-preview",children:[e.jsxs("div",{className:"agent-import-company",children:[e.jsx("span",{className:"agent-import-company-label",children:"Company"}),e.jsx("span",{className:"agent-import-company-name",children:x})]}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(qe,{size:14}),e.jsxs("span",{children:[p.length," agent",p.length!==1?"s":""," found"]})]}),p.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>j(p.map(n=>n.name)),children:"Select all agents"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>j([]),children:"Clear agents"})]}),p.length>0?e.jsx("div",{className:"agent-import-agent-list",children:p.map((n,t)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":`Select agent ${n.name}`,checked:E.includes(n.name),onChange:()=>te(n.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:n.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:n.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[n.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[n.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:n.role}),n.reportsTo&&e.jsxs("span",{className:"agent-import-agent-reports",children:[" · reports to ",n.reportsTo]}),n.skills&&n.skills.length>0&&e.jsxs("span",{className:"agent-import-agent-model",children:[" · skills: ",n.skills.join(", ")]})]}),n.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[n.instructionsText.slice(0,100),n.instructionsText.length>100?"...":""]})]})]},t))}):e.jsx("p",{className:"agent-import-empty",children:"No agents found in the manifest."}),C.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(qe,{size:14}),e.jsxs("span",{children:[C.length," skill",C.length!==1?"s":""," found"]})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>W(C.map(n=>n.name)),children:"Select all skills"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>W([]),children:"Clear skills"})]}),e.jsx("div",{className:"agent-import-skill-list",children:C.map((n,t)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":`Select skill ${n.name}`,checked:T.includes(n.name),onChange:()=>ce(n.name)})}),e.jsx("span",{className:"agent-import-skill-icon",children:"⚡"}),e.jsxs("div",{className:"agent-import-skill-details",children:[e.jsx("span",{className:"agent-import-skill-name",children:n.name}),n.description&&e.jsx("span",{className:"agent-import-skill-description",children:n.description})]})]},`${n.name}-${t}`))})]}),Z&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(Me,{size:14}),Z]})]}),c==="result"&&k&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(Se,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:"Import Complete"}),e.jsxs("p",{className:"agent-import-result-company",children:["From ",e.jsx("strong",{children:k.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsxs("span",{children:[k.created.length," created"]})}),k.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsxs("span",{children:[k.skipped.length," skipped (already exist)"]})}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsxs("span",{children:[k.errors.length," error",k.errors.length!==1?"s":""]})})]}),k.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.created.map((n,t)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Se,{size:12}),e.jsx("span",{children:n.name})]},t))}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.errors.map((n,t)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(He,{size:12}),e.jsxs("span",{children:[n.name,": ",n.error]})]},t))}),k.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:"Skills"}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsxs("span",{children:[k.skills.imported.length," skill",k.skills.imported.length!==1?"s":""," imported"]})}),k.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsxs("span",{children:[k.skills.skipped.length," skill",k.skills.skipped.length!==1?"s":""," skipped (already exist)"]})}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsxs("span",{children:[k.skills.errors.length," skill",k.skills.errors.length!==1?"s":""," error",k.skills.errors.length!==1?"s":""]})}),k.skills.imported.length===0&&k.skills.skipped.length===0&&k.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:"No skills in package"})})]}),k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.skills.imported.map((n,t)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Se,{size:12}),e.jsx("span",{children:n.name})]},t))}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.skills.errors.map((n,t)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(He,{size:12}),e.jsxs("span",{children:[n.name,": ",n.error]})]},t))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[c==="preview"&&e.jsx("button",{className:"btn",onClick:()=>d("input"),disabled:L,children:"Back"}),e.jsx("button",{className:"btn",onClick:se,disabled:L,children:c==="result"?"Close":"Cancel"}),c==="input"&&e.jsx("button",{className:"btn btn--primary",onClick:()=>void ye(),disabled:X||(r==="directory"?b.length===0:r==="browse"?!$:!o.trim()),children:X?e.jsxs(e.Fragment,{children:[e.jsx(Te,{size:14,className:"spin"}),"Parsing..."]}):"Preview"}),c==="preview"&&e.jsx("button",{className:"btn btn--primary",onClick:()=>void we(),disabled:L||O===0&&D===0,children:L?e.jsxs(e.Fragment,{children:[e.jsx(Te,{size:14,className:"spin"}),ge]}):`Import ${je}`})]})]})}):null}const Cn=s.lazy(()=>Rt(()=>import("./AgentDetailView-CkuuGA1O.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8])).then(a=>({default:a.AgentDetailView}))),Ce=[{value:"triage",label:"Triage",icon:"⊕"},{value:"executor",label:"Executor",icon:"▶"},{value:"reviewer",label:"Reviewer",icon:"⊙"},{value:"merger",label:"Merger",icon:"⊞"},{value:"scheduler",label:"Scheduler",icon:"◷"},{value:"engineer",label:"Engineer",icon:"⎔"},{value:"custom",label:"Custom",icon:"✦"}],Pe=[.1,.25,.5,1,2,3,5,10];function Ee(a){switch(a){case"running":return"agent-badge--running";case"active":return"agent-badge--active";case"paused":return"agent-badge--paused";case"error":return"agent-badge--error";case"terminated":return"agent-badge--terminated";case"idle":default:return"agent-badge--idle"}}function et(a,l){switch(l){case"running":return`${a}--running`;case"active":return`${a}--active`;case"paused":return`${a}--paused`;case"error":return`${a}--error`;case"terminated":return`${a}--terminated`;case"idle":default:return`${a}--idle`}}function it({node:a,onSelect:l,onToggle:f,isExpanded:m,getChildCount:c,getHealthStatus:d,getRoleIcon:r,getSkillBadges:u}){const{agent:o,children:g,depth:b}=a,N=c(o.id),x=m(o.id),I=d(o),p=Ee(o.state);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`agent-tree__node${o.reportsTo?" agent-is-child":""} agent-tree__indent--${Math.min(b,4)}`,children:[e.jsx("button",{className:`agent-tree__toggle${N===0?" agent-tree__toggle--leaf":""}`,onClick:()=>N>0&&f(o.id),title:N>0?x?"Collapse":"Expand":"No employees","aria-label":N>0?x?"Collapse":"Expand":"No employees",children:N>0?x?e.jsx(At,{size:16}):e.jsx(nt,{size:16}):e.jsx(De,{size:14})}),e.jsxs("div",{className:"agent-tree__content",onClick:()=>l(o.id),role:"button",tabIndex:0,onKeyDown:w=>w.key==="Enter"&&l(o.id),children:[e.jsx("span",{className:"agent-tree__icon",children:r(o.role)}),e.jsx("span",{className:"agent-tree__name",children:o.name}),e.jsx("span",{className:`agent-tree__badge ${p}`,children:o.state}),e.jsx("span",{className:"agent-tree__health",style:{color:I.color},title:I.label,children:I.icon}),N>0&&e.jsxs("span",{className:"agent-tree__count text-secondary",children:["(",N,")"]}),(()=>{const w=u(o);return w.length===0?null:e.jsxs("span",{className:"agent-tree__skill",title:w.join(", "),children:[w[0],w.length>1&&` +${w.length-1}`]})})()]})]}),x&&g.length>0&&e.jsx("div",{className:"agent-tree__children",children:g.map(w=>e.jsx(it,{node:w,onSelect:l,onToggle:f,isExpanded:m,getChildCount:c,getHealthStatus:d,getRoleIcon:r,getSkillBadges:u},w.agent.id))})]})}function rt({node:a,onSelect:l,getHealthStatus:f,getRoleIcon:m,getSkillBadges:c}){const{agent:d,children:r}=a,u=f(d),o=Ee(d.state);return e.jsxs("div",{className:`org-chart-node${r.length>0?" org-chart-node--has-children":""}`,children:[e.jsxs("div",{className:"org-chart-node-card",onClick:()=>l(d.id),role:"button",tabIndex:0,onKeyDown:g=>g.key==="Enter"&&l(d.id),children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:m(d.role)}),e.jsx("span",{className:"org-chart-node__name",children:d.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${o}`,children:d.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:u.color},title:u.label,children:[u.icon,!u.stateDerived&&e.jsx("span",{className:"text-secondary",children:u.label})]}),(()=>{const g=c(d);if(g.length===0)return null;const b=g.slice(0,2),N=g.length-2;return e.jsxs(e.Fragment,{children:[b.map(x=>e.jsx("span",{className:"org-chart-node__skill",children:x},x)),N>0&&e.jsxs("span",{className:"org-chart-node__skill",children:["+",N]})]})})()]})]}),r.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":`${d.name} employees`,children:r.map(g=>e.jsx(rt,{node:g,onSelect:l,getHealthStatus:f,getRoleIcon:m,getSkillBadges:c},g.agent.id))})]})}function Sn({addToast:a,projectId:l}){const[f,m]=s.useState(!1),[c,d]=s.useState("all"),{agents:r,activeAgents:u,stats:o,isLoading:g,loadAgents:b}=xt(l,{filterState:c,showSystemAgents:f}),[N,x]=s.useState(!1),[I,p]=s.useState(!1),[w,C]=s.useState(null),[A,E]=s.useState(()=>{if(typeof window>"u")return"list";const t=Re("fn-agent-view",l);return t==="list"||t==="board"||t==="tree"||t==="org"?t:"list"}),[j,T]=s.useState([]),[W,X]=s.useState(!1),[H,L]=s.useState(!1),re=s.useRef(null),_=s.useRef(null),M=s.useId();s.useEffect(()=>{const t=Re("fn-agent-view",l);if(t==="list"||t==="board"||t==="tree"||t==="org"){E(t);return}E("list")},[l]),s.useEffect(()=>{tt("fn-agent-view",A,l)},[A,l]);const[k,K]=s.useState(null),Z=s.useRef(null),[ue,z]=s.useState(null),[me,U]=s.useState(null),[Y,P]=s.useState({}),[B,$]=s.useState(1),[ee,le]=s.useState(!1),[F,G]=s.useState(new Set),R=s.useRef(!0);s.useEffect(()=>(R.current=!0,()=>{R.current=!1}),[]),s.useEffect(()=>{yt(l).then(t=>{R.current&&$(t.heartbeatMultiplier??1)}).catch(()=>{})},[l]);const V=s.useCallback(async t=>{const i=Number.isFinite(t)&&t>0?t:1;$(i),le(!0);try{await wt({heartbeatMultiplier:i},l),a(`Heartbeat speed set to ×${i.toFixed(1)}`,"success")}catch(h){a(`Failed to save heartbeat multiplier: ${ie(h)}`,"error")}finally{R.current&&le(!1)}},[l,a]),ne=Xt(r,l),Q=s.useMemo(()=>r.filter(t=>f||!Ve(t)),[r,f]),se=s.useMemo(()=>{if(f)return j;const t=i=>Ve(i.agent)?null:{...i,children:i.children.map(t).filter(h=>h!==null)};return j.map(t).filter(i=>i!==null)},[j,f]);s.useEffect(()=>{if(A!=="org")return;let t=!1;return X(!0),jt(l,{includeEphemeral:f}).then(i=>{t||T(i)}).catch(i=>{t||(a(`Failed to load org chart: ${ie(i)}`,"error"),T([]))}).finally(()=>{t||X(!1)}),()=>{t=!0}},[A,l,f,a]),s.useEffect(()=>{const t=setInterval(()=>{b()},3e4);return()=>{clearInterval(t)}},[b]),s.useEffect(()=>{if(!H)return;const t=h=>{const v=h.target;v&&(re.current?.contains(v)||_.current?.contains(v)||L(!1))},i=h=>{h.key==="Escape"&&(L(!1),_.current?.focus())};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),document.addEventListener("keydown",i),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t),document.removeEventListener("keydown",i)}},[H]);const ae=async(t,i)=>{if(!F.has(t)){G(h=>new Set(h).add(t));try{if(await _t(t,i,l),a(`Agent state updated to ${i}`,"success"),i==="active")try{await Ge(t,l)}catch(h){a(`Agent activated, but failed to start run: ${ie(h)}`,"error")}b()}catch(h){a(`Failed to update state: ${ie(h)}`,"error")}finally{G(h=>{const v=new Set(h);return v.delete(t),v})}}},he=async(t,i)=>{if(confirm(`Delete agent "${i}"? This cannot be undone.`))try{await Pt(t,l),a(`Agent "${i}" deleted`,"success"),b()}catch(h){a(`Failed to delete agent: ${ie(h)}`,"error")}},J=async(t,i)=>{const h=r.find(v=>v.id===t);if(h){if(h.role===i){K(null);return}try{await Ne(t,{role:i},l),a(`Agent role updated to ${Ce.find(v=>v.value===i)?.label??i}`,"success"),K(null),b()}catch(v){a(`Failed to update role: ${ie(v)}`,"error")}}},ye=(t,i)=>{t.key==="Escape"&&K(null)},we=async(t,i)=>{me===t.id&&(U(null),P(h=>{const v={...h};return delete v[t.id],v})),z(t.id);try{await Ne(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:i}},l),a(`Heartbeat interval updated to ${Be(i)} for ${t.name}`,"success"),b()}catch(h){a(`Failed to update heartbeat interval: ${ie(h)}`,"error")}finally{z(null)}},O=async t=>{const i=Y[t.id]??"";if(i.trim()===""){a("Please enter a heartbeat interval in minutes","error");return}const h=Number(i);if(isNaN(h)){a("Heartbeat interval must be a valid number","error");return}if(h<=0){a("Heartbeat interval must be greater than 0","error");return}if(h>=1&&h<5){z(t.id);try{await Ne(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:Mt}},l),a(`Heartbeat interval set to 5 minutes (minimum). ${h} minute${h!==1?"s":""} was below the 5-minute minimum.`,"success"),U(null),P(S=>{const de={...S};return delete de[t.id],de}),b()}catch(S){a(`Failed to update heartbeat interval: ${ie(S)}`,"error")}finally{z(null)}return}const v=Math.round(h*6e4);z(t.id);try{await Ne(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:v}},l),a(`Heartbeat interval updated to ${Be(v)} for ${t.name}`,"success"),U(null),P(S=>{const de={...S};return delete de[t.id],de}),b()}catch(S){a(`Failed to update heartbeat interval: ${ie(S)}`,"error")}finally{z(null)}},D=t=>{const i=We(t.runtimeConfig?.heartbeatIntervalMs),h=Math.round(i/6e4);U(t.id),P(v=>({...v,[t.id]:String(h)}))},be=s.useCallback(()=>{C(null)},[]),oe=s.useCallback(t=>{C(t)},[]),je=async(t,i)=>{try{await Ge(t,l,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),a(`Heartbeat run started for ${i}`,"success"),b()}catch(h){a(`Failed to start heartbeat run: ${ie(h)}`,"error")}},ge=t=>Ce.find(i=>i.value===t)?.label??t,te=t=>Ce.find(i=>i.value===t)?.icon??"◆",ce=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],n=t=>Tt(t);return e.jsxs("div",{className:"agents-view",children:[e.jsxs("div",{className:"agents-view-header",children:[e.jsxs("div",{className:"agents-view-title",children:[e.jsx(De,{size:24}),e.jsx("h2",{children:"Agents"})]}),e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${A==="list"?" active":""}`,onClick:()=>E("list"),title:"List view","aria-label":"List view","aria-pressed":A==="list",children:e.jsx(kt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${A==="board"?" active":""}`,onClick:()=>E("board"),title:"Board view","aria-label":"Board view","aria-pressed":A==="board",children:e.jsx(xe,{size:16})}),e.jsx("button",{className:`view-toggle-btn${A==="tree"?" active":""}`,onClick:()=>E("tree"),title:"Tree view","aria-label":"Tree view","aria-pressed":A==="tree",children:e.jsx(Nt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${A==="org"?" active":""}`,onClick:()=>E("org"),title:"Org Chart view","aria-label":"Org Chart view","aria-pressed":A==="org",children:e.jsx(zt,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:_,className:`btn-icon agent-controls-trigger${H?" agent-controls-trigger--active":""}`,onClick:()=>L(t=>!t),title:"Controls","aria-label":"Controls","aria-haspopup":"dialog","aria-expanded":H,"aria-controls":M,children:e.jsx(qt,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void b(),title:"Refresh","aria-label":"Refresh",children:e.jsx($e,{size:16,className:g?"spin":void 0})}),e.jsxs("button",{className:"btn btn--primary",onClick:()=>{x(!0),L(!1)},children:[e.jsx(It,{size:16}),"New Agent"]})]})]})]}),H&&e.jsxs("div",{ref:re,id:M,className:"agent-controls-panel",role:"dialog","aria-label":"Agent controls","aria-modal":"false",children:[e.jsxs("div",{className:"agent-controls",children:[e.jsxs("div",{className:"agent-controls-filters",children:[e.jsxs("div",{className:"agent-state-filter",children:[e.jsx(Ct,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:c,onChange:t=>d(t.target.value),"aria-label":"Filter agents by state",children:[e.jsx("option",{value:"all",children:"All States"}),e.jsx("option",{value:"idle",children:"Idle"}),e.jsx("option",{value:"active",children:"Active"}),e.jsx("option",{value:"running",children:"Running"}),e.jsx("option",{value:"paused",children:"Paused"}),e.jsx("option",{value:"error",children:"Error"}),e.jsx("option",{value:"terminated",children:"Terminated"})]})]}),e.jsxs("label",{className:"checkbox-label agent-system-filter",children:[e.jsx("input",{type:"checkbox",checked:f,onChange:t=>m(t.target.checked),"aria-label":"Show system agents"}),"Show system agents"]})]}),e.jsx("div",{className:"agent-controls-actions",children:e.jsxs("button",{className:"btn",onClick:()=>{p(!0),L(!1)},children:[e.jsx(st,{size:16}),"Import"]})})]}),e.jsx("div",{className:"agent-global-controls",children:e.jsxs("div",{className:"heartbeat-multiplier-group",children:[e.jsxs("div",{className:"heartbeat-multiplier-controls",children:[e.jsx("label",{htmlFor:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-label",children:"Heartbeat Speed"}),e.jsx("input",{id:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-slider touch-target",type:"range",min:.1,max:10,step:.1,value:B,onChange:t=>{const i=Number(t.target.value);V(Number.isFinite(i)&&i>0?i:1)},disabled:ee}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",B.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(Pe.reduce((t,i)=>Math.abs(i-B)<Math.abs(t-B)?i:t,Pe[0])),onChange:t=>{const i=Number(t.target.value);V(Number.isFinite(i)&&i>0?i:1)},disabled:ee,"aria-label":"Heartbeat speed preset",children:Pe.map(t=>e.jsxs("option",{value:String(t),children:["×",t]},t))})]}),e.jsx("small",{className:"text-secondary",children:"Scales all agent heartbeat intervals. ×0.5 = twice as fast, ×2.0 = twice as slow. Default: ×1.0"})]})})]}),e.jsxs("div",{className:"agents-view-content",children:[e.jsx(kn,{isOpen:N,onClose:()=>x(!1),onCreated:()=>{x(!1),b()},projectId:l}),e.jsx(In,{isOpen:I,onClose:()=>p(!1),onImported:()=>void b(),projectId:l}),A==="tree"?e.jsx("div",{className:"agent-tree__view",children:Q.length===0?e.jsx(Ie,{onCtaClick:()=>x(!0)}):ne.rootNodes.map(t=>e.jsx(it,{node:t,onSelect:C,onToggle:ne.toggleExpand,isExpanded:ne.isExpanded,getChildCount:i=>ne.getChildren(i).length,getHealthStatus:n,getRoleIcon:te,getSkillBadges:ce},t.agent.id))}):A==="org"?e.jsx("div",{className:"agent-org-chart","data-testid":"agent-org-chart",children:W?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx($e,{size:18,className:"spin"}),e.jsx("span",{children:"Loading org chart..."})]}):se.length===0?e.jsx(Ie,{onCtaClick:()=>x(!0)}):se.map(t=>e.jsx(rt,{node:t,onSelect:C,getHealthStatus:n,getRoleIcon:te,getSkillBadges:ce},t.agent.id))}):A==="board"?e.jsx("div",{className:"agent-board",children:Q.length===0?e.jsx(Ie,{onCtaClick:()=>x(!0)}):Q.map(t=>{const i=n(t),h=Ee(t.state),v=et("agent-board-card",t.state);return e.jsx("div",{className:`agent-board-card ${v}`,children:e.jsxs("div",{className:"agent-board-clickable",onClick:()=>C(t.id),role:"button",tabIndex:0,onKeyDown:S=>S.key==="Enter"&&C(t.id),children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:te(t.role)}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:ge(t.role)}),e.jsx("span",{className:`agent-board-badge badge ${h}`,children:t.state})]}),e.jsx("div",{className:"agent-board-name",children:t.name}),e.jsx("div",{className:"agent-board-id",children:t.id}),e.jsxs("div",{className:"agent-board-health",style:{color:i.color},title:i.label,children:[i.icon,!i.stateDerived&&` ${i.label}`]})]})},t.id)})}):e.jsx("div",{className:"agent-list",children:Q.length===0?e.jsx(Ie,{onCtaClick:()=>x(!0)}):Q.map(t=>{const i=n(t),h=Ee(t.state),v=et("agent-card",t.state),S=We(t.runtimeConfig?.heartbeatIntervalMs),de=St(S),pe=ue===t.id;return e.jsxs("div",{className:`agent-card ${v}`,children:[e.jsxs("div",{className:"agent-card-header",children:[e.jsxs("div",{className:"agent-info agent-info--clickable",onClick:()=>C(t.id),role:"button",tabIndex:0,onKeyDown:y=>y.key==="Enter"&&C(t.id),children:[k===t.id?e.jsx("select",{ref:Z,className:"select agent-role-select",value:t.role,onChange:y=>void J(t.id,y.target.value),onKeyDown:y=>ye(y,t.id),onBlur:()=>K(null),autoFocus:!0,children:Ce.map(y=>e.jsxs("option",{value:y.value,children:[y.icon," ",y.label]},y.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:y=>{y.stopPropagation(),K(t.id)},title:"Click to change role",role:"button",tabIndex:0,onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.stopPropagation(),K(t.id))},children:te(t.role)}),e.jsxs("div",{className:"agent-meta",children:[e.jsx("span",{className:"agent-name",children:t.name}),e.jsx("span",{className:"agent-id text-secondary",children:t.id})]}),e.jsx(nt,{size:20,className:"agent-card-chevron"})]}),e.jsxs("div",{className:"agent-badges",children:[e.jsx("span",{className:`badge ${h}`,children:t.state}),e.jsxs("span",{className:"badge",style:{color:i.color},title:i.label,children:[i.icon,!i.stateDerived&&` ${i.label}`]}),e.jsx("span",{className:"badge text-secondary",children:ge(t.role)}),(()=>{const y=ce(t);if(y.length===0)return null;const q=y.slice(0,2),fe=y.length-2;return e.jsxs(e.Fragment,{children:[q.map(Le=>e.jsx("span",{className:"badge badge-skill",children:Le},Le)),fe>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",fe]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[t.taskId&&e.jsxs("div",{className:"agent-task",children:[e.jsx("span",{className:"text-secondary",children:"Working on:"}),e.jsx("span",{className:"badge",children:t.taskId})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:"Heartbeat:"}),me===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:Y[t.id]??"",onChange:y=>P(q=>({...q,[t.id]:y.target.value})),onKeyDown:y=>{y.key==="Enter"?O(t):y.key==="Escape"&&(U(null),P(q=>{const fe={...q};return delete fe[t.id],fe}))},disabled:pe,"aria-label":`Custom heartbeat interval in minutes for ${t.name}`}),e.jsx("span",{className:"text-secondary",children:"min"}),e.jsx("button",{className:"btn btn--sm",onClick:()=>void O(t),disabled:pe,title:"Save custom interval",children:"Save"}),e.jsx("button",{className:"btn btn--sm",onClick:()=>{U(null),P(y=>{const q={...y};return delete q[t.id],q})},disabled:pe,title:"Cancel custom interval",children:"Cancel"})]}):e.jsx(e.Fragment,{children:e.jsxs("select",{className:"select agent-heartbeat-select",value:S,onChange:y=>{const q=y.target.value;q==="__custom__"?D(t):we(t,Number(q))},disabled:pe,"aria-label":`Set heartbeat interval for ${t.name}`,children:[de.map(y=>e.jsx("option",{value:y.value,children:y.label},y.value)),Et.some(y=>y.value===S)&&e.jsx("option",{value:"__custom__",children:"Custom..."})]})}),pe&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:"Saving…"}),t.lastHeartbeatAt&&(()=>{const y=new Date(t.lastHeartbeatAt),q=new Date(y.getTime()+S),fe=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"agent-heartbeat-last text-secondary",title:y.toLocaleString(),children:["Last: ",y.toLocaleTimeString()]}),fe&&e.jsxs("span",{className:"agent-heartbeat-next text-secondary",title:q.toLocaleString(),children:["Next: ",q.toLocaleTimeString()]})]})})()]})]}),e.jsxs("div",{className:"agent-card-actions",children:[t.state==="idle"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"active"),disabled:F.has(t.id),title:"Activate",children:[e.jsx(ke,{size:14})," Start"]}),e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void he(t.id,t.name),title:"Delete",children:[e.jsx(Ke,{size:14})," Delete"]})]}),t.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",onClick:()=>void je(t.id,t.name),disabled:F.has(t.id),title:"Run Now","aria-label":`Run now for ${t.name}`,children:[e.jsx(xe,{size:14})," Run Now"]}),e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"paused"),disabled:F.has(t.id),title:"Pause",children:[e.jsx(Ue,{size:14})," Pause"]})]}),t.state==="paused"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"active"),disabled:F.has(t.id),title:"Resume",children:[e.jsx(ke,{size:14})," Resume"]}),t.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",disabled:!0,title:"Run in progress","aria-label":`Heartbeat run in progress for ${t.name}`,children:[e.jsx(xe,{size:14})," Running"]}),e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"paused"),disabled:F.has(t.id),title:"Pause",children:[e.jsx(Ue,{size:14})," Pause"]})]}),t.state==="error"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"active"),disabled:F.has(t.id),title:"Retry",children:[e.jsx(ke,{size:14})," Retry"]}),t.state==="terminated"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"active"),disabled:F.has(t.id),title:"Start",children:[e.jsx(ke,{size:14})," Start"]}),e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void he(t.id,t.name),title:"Delete",children:[e.jsx(Ke,{size:14})," Delete"]})]}),e.jsx("button",{className:"btn btn--sm agent-card-details-btn",onClick:()=>C(t.id),title:`View details for ${t.name}`,"aria-label":`View details for ${t.name}`,children:"View Details"})]})]},t.id)})}),e.jsx(Bt,{stats:o}),e.jsx(Gt,{agents:Q}),e.jsx(Kt,{agents:u,projectId:l,onAgentSelect:C})]}),w&&e.jsx(s.Suspense,{fallback:null,children:e.jsx(Cn,{agentId:w,projectId:l,onClose:be,addToast:a,onChildClick:oe})})]})}const _n=Object.freeze(Object.defineProperty({__proto__:null,AgentsView:Sn},Symbol.toStringTag,{value:"Module"}));export{_n as A,wn as S};
522
+ Agent instructions go here...`,value:o,onChange:n=>{u("paste"),N([]),g(n.target.value),M(null)},rows:8,"aria-label":"Manifest content"})]}),e.jsxs("p",{className:"agent-import-file-hint",children:["Current input: ",r]}),_&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(Me,{size:14}),_]})]}),c==="preview"&&e.jsxs("div",{className:"agent-import-preview",children:[e.jsxs("div",{className:"agent-import-company",children:[e.jsx("span",{className:"agent-import-company-label",children:"Company"}),e.jsx("span",{className:"agent-import-company-name",children:x})]}),e.jsxs("div",{className:"agent-import-count",children:[e.jsx(qe,{size:14}),e.jsxs("span",{children:[p.length," agent",p.length!==1?"s":""," found"]})]}),p.length>0&&e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>j(p.map(n=>n.name)),children:"Select all agents"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>j([]),children:"Clear agents"})]}),p.length>0?e.jsx("div",{className:"agent-import-agent-list",children:p.map((n,t)=>e.jsxs("div",{className:"agent-import-agent-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":`Select agent ${n.name}`,checked:E.includes(n.name),onChange:()=>te(n.name)})}),e.jsx("span",{className:"agent-import-agent-icon",children:n.icon||"🤖"}),e.jsxs("div",{className:"agent-import-agent-details",children:[e.jsx("span",{className:"agent-import-agent-name",children:n.name}),e.jsxs("span",{className:"agent-import-agent-meta",children:[n.title&&e.jsxs("span",{className:"agent-import-agent-title",children:[n.title," · "]}),e.jsx("span",{className:"agent-import-agent-role",children:n.role}),n.reportsTo&&e.jsxs("span",{className:"agent-import-agent-reports",children:[" · reports to ",n.reportsTo]}),n.skills&&n.skills.length>0&&e.jsxs("span",{className:"agent-import-agent-model",children:[" · skills: ",n.skills.join(", ")]})]}),n.instructionsText&&e.jsxs("span",{className:"agent-import-agent-instructions",children:[n.instructionsText.slice(0,100),n.instructionsText.length>100?"...":""]})]})]},t))}):e.jsx("p",{className:"agent-import-empty",children:"No agents found in the manifest."}),C.length>0&&e.jsxs("div",{className:"agent-import-skills-section",children:[e.jsxs("div",{className:"agent-import-count",children:[e.jsx(qe,{size:14}),e.jsxs("span",{children:[C.length," skill",C.length!==1?"s":""," found"]})]}),e.jsxs("div",{className:"agent-import-selection-controls",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>W(C.map(n=>n.name)),children:"Select all skills"}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>W([]),children:"Clear skills"})]}),e.jsx("div",{className:"agent-import-skill-list",children:C.map((n,t)=>e.jsxs("div",{className:"agent-import-skill-item",children:[e.jsx("label",{className:"checkbox-label",children:e.jsx("input",{type:"checkbox","aria-label":`Select skill ${n.name}`,checked:T.includes(n.name),onChange:()=>ce(n.name)})}),e.jsx("span",{className:"agent-import-skill-icon",children:"⚡"}),e.jsxs("div",{className:"agent-import-skill-details",children:[e.jsx("span",{className:"agent-import-skill-name",children:n.name}),n.description&&e.jsx("span",{className:"agent-import-skill-description",children:n.description})]})]},`${n.name}-${t}`))})]}),Z&&e.jsxs("p",{className:"agent-dialog-error",children:[e.jsx(Me,{size:14}),Z]})]}),c==="result"&&k&&e.jsxs("div",{className:"agent-import-result",children:[e.jsx("div",{className:"agent-import-result-icon",children:e.jsx(Se,{size:32})}),e.jsx("h3",{className:"agent-import-result-title",children:"Import Complete"}),e.jsxs("p",{className:"agent-import-result-company",children:["From ",e.jsx("strong",{children:k.companyName??"Unknown"})]}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.created.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsxs("span",{children:[k.created.length," created"]})}),k.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsxs("span",{children:[k.skipped.length," skipped (already exist)"]})}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsxs("span",{children:[k.errors.length," error",k.errors.length!==1?"s":""]})})]}),k.created.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.created.map((n,t)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Se,{size:12}),e.jsx("span",{children:n.name})]},t))}),k.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.errors.map((n,t)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(He,{size:12}),e.jsxs("span",{children:[n.name,": ",n.error]})]},t))}),k.skills&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"agent-import-result-divider"}),e.jsx("h4",{className:"agent-import-result-section-title",children:"Skills"}),e.jsxs("div",{className:"agent-import-result-stats",children:[k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--success",children:e.jsxs("span",{children:[k.skills.imported.length," skill",k.skills.imported.length!==1?"s":""," imported"]})}),k.skills.skipped.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsxs("span",{children:[k.skills.skipped.length," skill",k.skills.skipped.length!==1?"s":""," skipped (already exist)"]})}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--error",children:e.jsxs("span",{children:[k.skills.errors.length," skill",k.skills.errors.length!==1?"s":""," error",k.skills.errors.length!==1?"s":""]})}),k.skills.imported.length===0&&k.skills.skipped.length===0&&k.skills.errors.length===0&&e.jsx("div",{className:"agent-import-result-stat agent-import-result-stat--skipped",children:e.jsx("span",{children:"No skills in package"})})]}),k.skills.imported.length>0&&e.jsx("div",{className:"agent-import-result-agents",children:k.skills.imported.map((n,t)=>e.jsxs("div",{className:"agent-import-result-agent",children:[e.jsx(Se,{size:12}),e.jsx("span",{children:n.name})]},t))}),k.skills.errors.length>0&&e.jsx("div",{className:"agent-import-result-errors",children:k.skills.errors.map((n,t)=>e.jsxs("div",{className:"agent-import-result-error",children:[e.jsx(He,{size:12}),e.jsxs("span",{children:[n.name,": ",n.error]})]},t))})]})]})]}),e.jsxs("div",{className:"agent-dialog-footer",children:[c==="preview"&&e.jsx("button",{className:"btn",onClick:()=>d("input"),disabled:L,children:"Back"}),e.jsx("button",{className:"btn",onClick:se,disabled:L,children:c==="result"?"Close":"Cancel"}),c==="input"&&e.jsx("button",{className:"btn btn--primary",onClick:()=>void ye(),disabled:X||(r==="directory"?b.length===0:r==="browse"?!$:!o.trim()),children:X?e.jsxs(e.Fragment,{children:[e.jsx(Te,{size:14,className:"spin"}),"Parsing..."]}):"Preview"}),c==="preview"&&e.jsx("button",{className:"btn btn--primary",onClick:()=>void we(),disabled:L||O===0&&D===0,children:L?e.jsxs(e.Fragment,{children:[e.jsx(Te,{size:14,className:"spin"}),ge]}):`Import ${je}`})]})]})}):null}const Cn=s.lazy(()=>Rt(()=>import("./AgentDetailView-CBdzWtd-.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8])).then(a=>({default:a.AgentDetailView}))),Ce=[{value:"triage",label:"Triage",icon:"⊕"},{value:"executor",label:"Executor",icon:"▶"},{value:"reviewer",label:"Reviewer",icon:"⊙"},{value:"merger",label:"Merger",icon:"⊞"},{value:"scheduler",label:"Scheduler",icon:"◷"},{value:"engineer",label:"Engineer",icon:"⎔"},{value:"custom",label:"Custom",icon:"✦"}],Pe=[.1,.25,.5,1,2,3,5,10];function Ee(a){switch(a){case"running":return"agent-badge--running";case"active":return"agent-badge--active";case"paused":return"agent-badge--paused";case"error":return"agent-badge--error";case"terminated":return"agent-badge--terminated";case"idle":default:return"agent-badge--idle"}}function et(a,l){switch(l){case"running":return`${a}--running`;case"active":return`${a}--active`;case"paused":return`${a}--paused`;case"error":return`${a}--error`;case"terminated":return`${a}--terminated`;case"idle":default:return`${a}--idle`}}function it({node:a,onSelect:l,onToggle:f,isExpanded:m,getChildCount:c,getHealthStatus:d,getRoleIcon:r,getSkillBadges:u}){const{agent:o,children:g,depth:b}=a,N=c(o.id),x=m(o.id),I=d(o),p=Ee(o.state);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`agent-tree__node${o.reportsTo?" agent-is-child":""} agent-tree__indent--${Math.min(b,4)}`,children:[e.jsx("button",{className:`agent-tree__toggle${N===0?" agent-tree__toggle--leaf":""}`,onClick:()=>N>0&&f(o.id),title:N>0?x?"Collapse":"Expand":"No employees","aria-label":N>0?x?"Collapse":"Expand":"No employees",children:N>0?x?e.jsx(At,{size:16}):e.jsx(nt,{size:16}):e.jsx(De,{size:14})}),e.jsxs("div",{className:"agent-tree__content",onClick:()=>l(o.id),role:"button",tabIndex:0,onKeyDown:w=>w.key==="Enter"&&l(o.id),children:[e.jsx("span",{className:"agent-tree__icon",children:r(o.role)}),e.jsx("span",{className:"agent-tree__name",children:o.name}),e.jsx("span",{className:`agent-tree__badge ${p}`,children:o.state}),e.jsx("span",{className:"agent-tree__health",style:{color:I.color},title:I.label,children:I.icon}),N>0&&e.jsxs("span",{className:"agent-tree__count text-secondary",children:["(",N,")"]}),(()=>{const w=u(o);return w.length===0?null:e.jsxs("span",{className:"agent-tree__skill",title:w.join(", "),children:[w[0],w.length>1&&` +${w.length-1}`]})})()]})]}),x&&g.length>0&&e.jsx("div",{className:"agent-tree__children",children:g.map(w=>e.jsx(it,{node:w,onSelect:l,onToggle:f,isExpanded:m,getChildCount:c,getHealthStatus:d,getRoleIcon:r,getSkillBadges:u},w.agent.id))})]})}function rt({node:a,onSelect:l,getHealthStatus:f,getRoleIcon:m,getSkillBadges:c}){const{agent:d,children:r}=a,u=f(d),o=Ee(d.state);return e.jsxs("div",{className:`org-chart-node${r.length>0?" org-chart-node--has-children":""}`,children:[e.jsxs("div",{className:"org-chart-node-card",onClick:()=>l(d.id),role:"button",tabIndex:0,onKeyDown:g=>g.key==="Enter"&&l(d.id),children:[e.jsxs("div",{className:"org-chart-node__header",children:[e.jsx("span",{className:"org-chart-node__icon",children:m(d.role)}),e.jsx("span",{className:"org-chart-node__name",children:d.name})]}),e.jsxs("div",{className:"org-chart-node__meta",children:[e.jsx("span",{className:`org-chart-node__badge ${o}`,children:d.state}),e.jsxs("span",{className:"org-chart-node__health",style:{color:u.color},title:u.label,children:[u.icon,!u.stateDerived&&e.jsx("span",{className:"text-secondary",children:u.label})]}),(()=>{const g=c(d);if(g.length===0)return null;const b=g.slice(0,2),N=g.length-2;return e.jsxs(e.Fragment,{children:[b.map(x=>e.jsx("span",{className:"org-chart-node__skill",children:x},x)),N>0&&e.jsxs("span",{className:"org-chart-node__skill",children:["+",N]})]})})()]})]}),r.length>0&&e.jsx("div",{className:"org-chart-children",role:"group","aria-label":`${d.name} employees`,children:r.map(g=>e.jsx(rt,{node:g,onSelect:l,getHealthStatus:f,getRoleIcon:m,getSkillBadges:c},g.agent.id))})]})}function Sn({addToast:a,projectId:l}){const[f,m]=s.useState(!1),[c,d]=s.useState("all"),{agents:r,activeAgents:u,stats:o,isLoading:g,loadAgents:b}=xt(l,{filterState:c,showSystemAgents:f}),[N,x]=s.useState(!1),[I,p]=s.useState(!1),[w,C]=s.useState(null),[A,E]=s.useState(()=>{if(typeof window>"u")return"list";const t=Re("fn-agent-view",l);return t==="list"||t==="board"||t==="tree"||t==="org"?t:"list"}),[j,T]=s.useState([]),[W,X]=s.useState(!1),[H,L]=s.useState(!1),re=s.useRef(null),_=s.useRef(null),M=s.useId();s.useEffect(()=>{const t=Re("fn-agent-view",l);if(t==="list"||t==="board"||t==="tree"||t==="org"){E(t);return}E("list")},[l]),s.useEffect(()=>{tt("fn-agent-view",A,l)},[A,l]);const[k,K]=s.useState(null),Z=s.useRef(null),[ue,z]=s.useState(null),[me,U]=s.useState(null),[Y,P]=s.useState({}),[B,$]=s.useState(1),[ee,le]=s.useState(!1),[F,G]=s.useState(new Set),R=s.useRef(!0);s.useEffect(()=>(R.current=!0,()=>{R.current=!1}),[]),s.useEffect(()=>{yt(l).then(t=>{R.current&&$(t.heartbeatMultiplier??1)}).catch(()=>{})},[l]);const V=s.useCallback(async t=>{const i=Number.isFinite(t)&&t>0?t:1;$(i),le(!0);try{await wt({heartbeatMultiplier:i},l),a(`Heartbeat speed set to ×${i.toFixed(1)}`,"success")}catch(h){a(`Failed to save heartbeat multiplier: ${ie(h)}`,"error")}finally{R.current&&le(!1)}},[l,a]),ne=Xt(r,l),Q=s.useMemo(()=>r.filter(t=>f||!Ve(t)),[r,f]),se=s.useMemo(()=>{if(f)return j;const t=i=>Ve(i.agent)?null:{...i,children:i.children.map(t).filter(h=>h!==null)};return j.map(t).filter(i=>i!==null)},[j,f]);s.useEffect(()=>{if(A!=="org")return;let t=!1;return X(!0),jt(l,{includeEphemeral:f}).then(i=>{t||T(i)}).catch(i=>{t||(a(`Failed to load org chart: ${ie(i)}`,"error"),T([]))}).finally(()=>{t||X(!1)}),()=>{t=!0}},[A,l,f,a]),s.useEffect(()=>{const t=setInterval(()=>{b()},3e4);return()=>{clearInterval(t)}},[b]),s.useEffect(()=>{if(!H)return;const t=h=>{const v=h.target;v&&(re.current?.contains(v)||_.current?.contains(v)||L(!1))},i=h=>{h.key==="Escape"&&(L(!1),_.current?.focus())};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),document.addEventListener("keydown",i),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t),document.removeEventListener("keydown",i)}},[H]);const ae=async(t,i)=>{if(!F.has(t)){G(h=>new Set(h).add(t));try{if(await _t(t,i,l),a(`Agent state updated to ${i}`,"success"),i==="active")try{await Ge(t,l)}catch(h){a(`Agent activated, but failed to start run: ${ie(h)}`,"error")}b()}catch(h){a(`Failed to update state: ${ie(h)}`,"error")}finally{G(h=>{const v=new Set(h);return v.delete(t),v})}}},he=async(t,i)=>{if(confirm(`Delete agent "${i}"? This cannot be undone.`))try{await Pt(t,l),a(`Agent "${i}" deleted`,"success"),b()}catch(h){a(`Failed to delete agent: ${ie(h)}`,"error")}},J=async(t,i)=>{const h=r.find(v=>v.id===t);if(h){if(h.role===i){K(null);return}try{await Ne(t,{role:i},l),a(`Agent role updated to ${Ce.find(v=>v.value===i)?.label??i}`,"success"),K(null),b()}catch(v){a(`Failed to update role: ${ie(v)}`,"error")}}},ye=(t,i)=>{t.key==="Escape"&&K(null)},we=async(t,i)=>{me===t.id&&(U(null),P(h=>{const v={...h};return delete v[t.id],v})),z(t.id);try{await Ne(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:i}},l),a(`Heartbeat interval updated to ${Be(i)} for ${t.name}`,"success"),b()}catch(h){a(`Failed to update heartbeat interval: ${ie(h)}`,"error")}finally{z(null)}},O=async t=>{const i=Y[t.id]??"";if(i.trim()===""){a("Please enter a heartbeat interval in minutes","error");return}const h=Number(i);if(isNaN(h)){a("Heartbeat interval must be a valid number","error");return}if(h<=0){a("Heartbeat interval must be greater than 0","error");return}if(h>=1&&h<5){z(t.id);try{await Ne(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:Mt}},l),a(`Heartbeat interval set to 5 minutes (minimum). ${h} minute${h!==1?"s":""} was below the 5-minute minimum.`,"success"),U(null),P(S=>{const de={...S};return delete de[t.id],de}),b()}catch(S){a(`Failed to update heartbeat interval: ${ie(S)}`,"error")}finally{z(null)}return}const v=Math.round(h*6e4);z(t.id);try{await Ne(t.id,{runtimeConfig:{...t.runtimeConfig??{},heartbeatIntervalMs:v}},l),a(`Heartbeat interval updated to ${Be(v)} for ${t.name}`,"success"),U(null),P(S=>{const de={...S};return delete de[t.id],de}),b()}catch(S){a(`Failed to update heartbeat interval: ${ie(S)}`,"error")}finally{z(null)}},D=t=>{const i=We(t.runtimeConfig?.heartbeatIntervalMs),h=Math.round(i/6e4);U(t.id),P(v=>({...v,[t.id]:String(h)}))},be=s.useCallback(()=>{C(null)},[]),oe=s.useCallback(t=>{C(t)},[]),je=async(t,i)=>{try{await Ge(t,l,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),a(`Heartbeat run started for ${i}`,"success"),b()}catch(h){a(`Failed to start heartbeat run: ${ie(h)}`,"error")}},ge=t=>Ce.find(i=>i.value===t)?.label??t,te=t=>Ce.find(i=>i.value===t)?.icon??"◆",ce=t=>Array.isArray(t.metadata?.skills)?t.metadata.skills:[],n=t=>Tt(t);return e.jsxs("div",{className:"agents-view",children:[e.jsxs("div",{className:"agents-view-header",children:[e.jsxs("div",{className:"agents-view-title",children:[e.jsx(De,{size:24}),e.jsx("h2",{children:"Agents"})]}),e.jsxs("div",{className:"agents-view-controls",children:[e.jsxs("div",{className:"view-toggle",children:[e.jsx("button",{className:`view-toggle-btn${A==="list"?" active":""}`,onClick:()=>E("list"),title:"List view","aria-label":"List view","aria-pressed":A==="list",children:e.jsx(kt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${A==="board"?" active":""}`,onClick:()=>E("board"),title:"Board view","aria-label":"Board view","aria-pressed":A==="board",children:e.jsx(xe,{size:16})}),e.jsx("button",{className:`view-toggle-btn${A==="tree"?" active":""}`,onClick:()=>E("tree"),title:"Tree view","aria-label":"Tree view","aria-pressed":A==="tree",children:e.jsx(Nt,{size:16})}),e.jsx("button",{className:`view-toggle-btn${A==="org"?" active":""}`,onClick:()=>E("org"),title:"Org Chart view","aria-label":"Org Chart view","aria-pressed":A==="org",children:e.jsx(zt,{size:16})})]}),e.jsxs("div",{className:"agents-view-primary-actions",children:[e.jsx("button",{ref:_,className:`btn-icon agent-controls-trigger${H?" agent-controls-trigger--active":""}`,onClick:()=>L(t=>!t),title:"Controls","aria-label":"Controls","aria-haspopup":"dialog","aria-expanded":H,"aria-controls":M,children:e.jsx(qt,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:()=>void b(),title:"Refresh","aria-label":"Refresh",children:e.jsx($e,{size:16,className:g?"spin":void 0})}),e.jsxs("button",{className:"btn btn--primary",onClick:()=>{x(!0),L(!1)},children:[e.jsx(It,{size:16}),"New Agent"]})]})]})]}),H&&e.jsxs("div",{ref:re,id:M,className:"agent-controls-panel agent-controls-panel--scrollable",role:"dialog","aria-label":"Agent controls","aria-modal":"false",children:[e.jsxs("div",{className:"agent-controls",children:[e.jsxs("div",{className:"agent-controls-filters",children:[e.jsxs("div",{className:"agent-state-filter",children:[e.jsx(Ct,{size:14}),e.jsxs("select",{className:"agent-state-filter-select",value:c,onChange:t=>d(t.target.value),"aria-label":"Filter agents by state",children:[e.jsx("option",{value:"all",children:"All States"}),e.jsx("option",{value:"idle",children:"Idle"}),e.jsx("option",{value:"active",children:"Active"}),e.jsx("option",{value:"running",children:"Running"}),e.jsx("option",{value:"paused",children:"Paused"}),e.jsx("option",{value:"error",children:"Error"}),e.jsx("option",{value:"terminated",children:"Terminated"})]})]}),e.jsxs("label",{className:"checkbox-label agent-system-filter",children:[e.jsx("input",{type:"checkbox",checked:f,onChange:t=>m(t.target.checked),"aria-label":"Show system agents"}),"Show system agents"]})]}),e.jsx("div",{className:"agent-controls-actions",children:e.jsxs("button",{className:"btn",onClick:()=>{p(!0),L(!1)},children:[e.jsx(st,{size:16}),"Import"]})})]}),e.jsx("div",{className:"agent-global-controls",children:e.jsxs("div",{className:"heartbeat-multiplier-group",children:[e.jsxs("div",{className:"heartbeat-multiplier-controls",children:[e.jsx("label",{htmlFor:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-label",children:"Heartbeat Speed"}),e.jsx("input",{id:"globalHeartbeatMultiplier",className:"heartbeat-multiplier-slider touch-target",type:"range",min:.1,max:10,step:.1,value:B,onChange:t=>{const i=Number(t.target.value);V(Number.isFinite(i)&&i>0?i:1)},disabled:ee}),e.jsxs("span",{className:"heartbeat-multiplier-value",children:["×",B.toFixed(1)]}),e.jsx("select",{className:"heartbeat-multiplier-preset",value:String(Pe.reduce((t,i)=>Math.abs(i-B)<Math.abs(t-B)?i:t,Pe[0])),onChange:t=>{const i=Number(t.target.value);V(Number.isFinite(i)&&i>0?i:1)},disabled:ee,"aria-label":"Heartbeat speed preset",children:Pe.map(t=>e.jsxs("option",{value:String(t),children:["×",t]},t))})]}),e.jsx("small",{className:"text-secondary",children:"Scales all agent heartbeat intervals. ×0.5 = twice as fast, ×2.0 = twice as slow. Default: ×1.0"})]})}),e.jsx(Gt,{agents:Q})]}),e.jsxs("div",{className:"agents-view-content",children:[e.jsx(Bt,{stats:o}),e.jsx(kn,{isOpen:N,onClose:()=>x(!1),onCreated:()=>{x(!1),b()},projectId:l}),e.jsx(In,{isOpen:I,onClose:()=>p(!1),onImported:()=>void b(),projectId:l}),A==="tree"?e.jsx("div",{className:"agent-tree__view",children:Q.length===0?e.jsx(Ie,{onCtaClick:()=>x(!0)}):ne.rootNodes.map(t=>e.jsx(it,{node:t,onSelect:C,onToggle:ne.toggleExpand,isExpanded:ne.isExpanded,getChildCount:i=>ne.getChildren(i).length,getHealthStatus:n,getRoleIcon:te,getSkillBadges:ce},t.agent.id))}):A==="org"?e.jsx("div",{className:"agent-org-chart","data-testid":"agent-org-chart",children:W?e.jsxs("div",{className:"agent-org-chart__loading",role:"status","aria-live":"polite",children:[e.jsx($e,{size:18,className:"spin"}),e.jsx("span",{children:"Loading org chart..."})]}):se.length===0?e.jsx(Ie,{onCtaClick:()=>x(!0)}):se.map(t=>e.jsx(rt,{node:t,onSelect:C,getHealthStatus:n,getRoleIcon:te,getSkillBadges:ce},t.agent.id))}):A==="board"?e.jsx("div",{className:"agent-board",children:Q.length===0?e.jsx(Ie,{onCtaClick:()=>x(!0)}):Q.map(t=>{const i=n(t),h=Ee(t.state),v=et("agent-board-card",t.state);return e.jsx("div",{className:`agent-board-card ${v}`,children:e.jsxs("div",{className:"agent-board-clickable",onClick:()=>C(t.id),role:"button",tabIndex:0,onKeyDown:S=>S.key==="Enter"&&C(t.id),children:[e.jsxs("div",{className:"agent-board-header",children:[e.jsx("span",{className:"agent-board-icon",children:te(t.role)}),e.jsx("span",{className:"agent-board-badge badge text-secondary",children:ge(t.role)}),e.jsx("span",{className:`agent-board-badge badge ${h}`,children:t.state})]}),e.jsx("div",{className:"agent-board-name",children:t.name}),e.jsx("div",{className:"agent-board-id",children:t.id}),e.jsxs("div",{className:"agent-board-health",style:{color:i.color},title:i.label,children:[i.icon,!i.stateDerived&&` ${i.label}`]})]})},t.id)})}):e.jsx("div",{className:"agent-list",children:Q.length===0?e.jsx(Ie,{onCtaClick:()=>x(!0)}):Q.map(t=>{const i=n(t),h=Ee(t.state),v=et("agent-card",t.state),S=We(t.runtimeConfig?.heartbeatIntervalMs),de=St(S),pe=ue===t.id;return e.jsxs("div",{className:`agent-card ${v}`,children:[e.jsxs("div",{className:"agent-card-header",children:[e.jsxs("div",{className:"agent-info agent-info--clickable",onClick:()=>C(t.id),role:"button",tabIndex:0,onKeyDown:y=>y.key==="Enter"&&C(t.id),children:[k===t.id?e.jsx("select",{ref:Z,className:"select agent-role-select",value:t.role,onChange:y=>void J(t.id,y.target.value),onKeyDown:y=>ye(y,t.id),onBlur:()=>K(null),autoFocus:!0,children:Ce.map(y=>e.jsxs("option",{value:y.value,children:[y.icon," ",y.label]},y.value))}):e.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:y=>{y.stopPropagation(),K(t.id)},title:"Click to change role",role:"button",tabIndex:0,onKeyDown:y=>{(y.key==="Enter"||y.key===" ")&&(y.stopPropagation(),K(t.id))},children:te(t.role)}),e.jsxs("div",{className:"agent-meta",children:[e.jsx("span",{className:"agent-name",children:t.name}),e.jsx("span",{className:"agent-id text-secondary",children:t.id})]}),e.jsx(nt,{size:20,className:"agent-card-chevron"})]}),e.jsxs("div",{className:"agent-badges",children:[e.jsx("span",{className:`badge ${h}`,children:t.state}),e.jsxs("span",{className:"badge",style:{color:i.color},title:i.label,children:[i.icon,!i.stateDerived&&` ${i.label}`]}),e.jsx("span",{className:"badge text-secondary",children:ge(t.role)}),(()=>{const y=ce(t);if(y.length===0)return null;const q=y.slice(0,2),fe=y.length-2;return e.jsxs(e.Fragment,{children:[q.map(Le=>e.jsx("span",{className:"badge badge-skill",children:Le},Le)),fe>0&&e.jsxs("span",{className:"badge badge-skill",children:["+",fe]})]})})()]})]}),e.jsxs("div",{className:"agent-card-body",children:[t.taskId&&e.jsxs("div",{className:"agent-task",children:[e.jsx("span",{className:"text-secondary",children:"Working on:"}),e.jsx("span",{className:"badge",children:t.taskId})]}),e.jsxs("div",{className:"agent-heartbeat-control",children:[e.jsx("span",{className:"text-secondary",children:"Heartbeat:"}),me===t.id?e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"input agent-heartbeat-custom-input",value:Y[t.id]??"",onChange:y=>P(q=>({...q,[t.id]:y.target.value})),onKeyDown:y=>{y.key==="Enter"?O(t):y.key==="Escape"&&(U(null),P(q=>{const fe={...q};return delete fe[t.id],fe}))},disabled:pe,"aria-label":`Custom heartbeat interval in minutes for ${t.name}`}),e.jsx("span",{className:"text-secondary",children:"min"}),e.jsx("button",{className:"btn btn--sm",onClick:()=>void O(t),disabled:pe,title:"Save custom interval",children:"Save"}),e.jsx("button",{className:"btn btn--sm",onClick:()=>{U(null),P(y=>{const q={...y};return delete q[t.id],q})},disabled:pe,title:"Cancel custom interval",children:"Cancel"})]}):e.jsx(e.Fragment,{children:e.jsxs("select",{className:"select agent-heartbeat-select",value:S,onChange:y=>{const q=y.target.value;q==="__custom__"?D(t):we(t,Number(q))},disabled:pe,"aria-label":`Set heartbeat interval for ${t.name}`,children:[de.map(y=>e.jsx("option",{value:y.value,children:y.label},y.value)),Et.some(y=>y.value===S)&&e.jsx("option",{value:"__custom__",children:"Custom..."})]})}),pe&&e.jsx("span",{className:"agent-heartbeat-saving text-secondary",children:"Saving…"}),t.lastHeartbeatAt&&(()=>{const y=new Date(t.lastHeartbeatAt),q=new Date(y.getTime()+S),fe=t.state==="active"||t.state==="running";return e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"agent-heartbeat-last text-secondary",title:y.toLocaleString(),children:["Last: ",y.toLocaleTimeString()]}),fe&&e.jsxs("span",{className:"agent-heartbeat-next text-secondary",title:q.toLocaleString(),children:["Next: ",q.toLocaleTimeString()]})]})})()]})]}),e.jsxs("div",{className:"agent-card-actions",children:[t.state==="idle"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"active"),disabled:F.has(t.id),title:"Activate",children:[e.jsx(ke,{size:14})," Start"]}),e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void he(t.id,t.name),title:"Delete",children:[e.jsx(Ke,{size:14})," Delete"]})]}),t.state==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",onClick:()=>void je(t.id,t.name),disabled:F.has(t.id),title:"Run Now","aria-label":`Run now for ${t.name}`,children:[e.jsx(xe,{size:14})," Run Now"]}),e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"paused"),disabled:F.has(t.id),title:"Pause",children:[e.jsx(Ue,{size:14})," Pause"]})]}),t.state==="paused"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"active"),disabled:F.has(t.id),title:"Resume",children:[e.jsx(ke,{size:14})," Resume"]}),t.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",disabled:!0,title:"Run in progress","aria-label":`Heartbeat run in progress for ${t.name}`,children:[e.jsx(xe,{size:14})," Running"]}),e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"paused"),disabled:F.has(t.id),title:"Pause",children:[e.jsx(Ue,{size:14})," Pause"]})]}),t.state==="error"&&e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"active"),disabled:F.has(t.id),title:"Retry",children:[e.jsx(ke,{size:14})," Retry"]}),t.state==="terminated"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--sm",onClick:()=>void ae(t.id,"active"),disabled:F.has(t.id),title:"Start",children:[e.jsx(ke,{size:14})," Start"]}),e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void he(t.id,t.name),title:"Delete",children:[e.jsx(Ke,{size:14})," Delete"]})]}),e.jsx("button",{className:"btn btn--sm agent-card-details-btn",onClick:()=>C(t.id),title:`View details for ${t.name}`,"aria-label":`View details for ${t.name}`,children:"View Details"})]})]},t.id)})}),e.jsx(Kt,{agents:u,projectId:l,onAgentSelect:C})]}),w&&e.jsx(s.Suspense,{fallback:null,children:e.jsx(Cn,{agentId:w,projectId:l,onClose:be,addToast:a,onChildClick:oe})})]})}const _n=Object.freeze(Object.defineProperty({__proto__:null,AgentsView:Sn},Symbol.toStringTag,{value:"Module"}));export{_n as A,wn as S};
@@ -1 +1 @@
1
- import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{i as Le,ax as lt,g as ct,ay as rt,a as ot,az as dt,aA as ut,aB as ht,aC as mt,aD as gt,aE as ft,s as pt,aF as xt,aG as St,f as vt,w as Pe,S as bt,I as Be,aj as wt,aH as Nt,B as Ce,aI as kt,aJ as Ct,aK as Mt,aL as jt,aM as yt,aN as Tt,h as At,j as $t}from"./index-CikysL-d.js";import"./vendor-xterm-DzcZoU0P.js";const Re="kb-chat-active-session";function Dt(n){const i=n?.toolCalls;if(!Array.isArray(i))return;const r=i.map(l=>{if(!l||typeof l!="object")return null;const c=l,x=typeof c.toolName=="string"?c.toolName:"";if(!x)return null;const b=c.args;return{toolName:x,...b&&typeof b=="object"?{args:b}:{},isError:!!c.isError,result:c.result,status:"completed"}}).filter(l=>l!==null);return r.length>0?r:void 0}function He(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:Dt(n.metadata),createdAt:n.createdAt}}function Et(n){const[i,r]=s.useState([]),[l,c]=s.useState(null),[x,b]=s.useState(!0),[M,w]=s.useState([]),[X,z]=s.useState(!1),[O,L]=s.useState(!1),[re,D]=s.useState(""),[V,T]=s.useState(""),[pe,E]=s.useState([]),[S,P]=s.useState(""),[Z,U]=s.useState(""),[A,B]=s.useState(!0),[q,ne]=s.useState(new Map),k=s.useRef(null),J=s.useRef(!1),K=s.useRef(""),xe=s.useRef(i),H=s.useRef(l),we=s.useRef(O);xe.current=i,H.current=l,we.current=O,s.useEffect(()=>{K.current=S},[S]);const ae=s.useRef(new Set),ee=s.useRef(0),Ne=s.useRef(n);Ne.current!==n&&(Ne.current=n,ee.current++),s.useEffect(()=>{const o=ee.current;Le(void 0,n).then(h=>{if(ee.current!==o)return;const u=new Map;for(const N of h)u.set(N.id,N);ne(u)}).catch(()=>{})},[n]);const te=s.useCallback(async()=>{b(!0);try{const h=[...(await lt(n)).sessions].sort((u,N)=>new Date(N.updatedAt).getTime()-new Date(u.updatedAt).getTime());r(h)}catch{}finally{b(!1)}},[n]);s.useEffect(()=>{te()},[te]);const Q=s.useRef(()=>{});s.useEffect(()=>{if(x)return;const o=ct(Re,n);o&&i.find(u=>u.id===o)&&Q.current(o)},[x,i,n]);const I=s.useCallback(async(o,h)=>{z(!0);try{const u=await rt(o,{limit:50,...h},n),N=u.messages.map(He);h?.offset&&h.offset>0?w(W=>[...N,...W]):w(N),B(u.messages.length>=50)}catch{}finally{z(!1)}},[n]),oe=s.useCallback(o=>{k.current&&(k.current.close(),k.current=null);const h=i.find(u=>u.id===o);c(h||null),D(""),T(""),E([]),L(!1),B(!0),o?I(o):w([]),o?ot(Re,o,n):dt(Re,n)},[i,I,n]);Q.current=oe;const de=s.useCallback(async o=>{const h=await ut(o,n),u={id:h.session.id,title:h.session.title,agentId:h.session.agentId,status:h.session.status,modelProvider:h.session.modelProvider,modelId:h.session.modelId,createdAt:h.session.createdAt,updatedAt:h.session.updatedAt};return r(N=>[u,...N]),c(u),w([]),D(""),T(""),E([]),L(!1),B(!0),u},[n]),ue=s.useCallback(async o=>{await ht(o,{status:"archived"},n),r(h=>h.filter(u=>u.id!==o)),l?.id===o&&(c(null),w([]))},[l,n]),ie=s.useCallback(async o=>{l?.id===o&&k.current&&(k.current.close(),k.current=null),await mt(o,n),r(h=>h.filter(u=>u.id!==o)),l?.id===o&&(c(null),w([]))},[l,n]),he=s.useCallback(async()=>{!l||!A||await I(l.id,{offset:M.length})},[l,A,I,M.length]),se=s.useCallback(()=>{l&&(J.current=!0,k.current?.close(),k.current=null,gt(l.id,n).catch(()=>{}),L(!1),D(""),T(""),E([]))},[l,n]),_=s.useCallback(()=>{K.current="",P("")},[]),G=s.useCallback(o=>{if(!l)return;if(O){K.current=o,P(o);return}J.current=!1,k.current&&(k.current.close(),k.current=null);const h=`temp-${Date.now()}`,u={id:h,sessionId:l.id,role:"user",content:o,createdAt:new Date().toISOString()};w(p=>[...p,u]),D(""),T(""),E([]),L(!0);let N="",W="",R=[];const m={onThinking:p=>{W+=p,T(W)},onText:p=>{N+=p,D(N)},onToolStart:p=>{R=[...R,{toolName:p.toolName,args:p.args,isError:!1,status:"running"}],E(R)},onToolEnd:p=>{const C=[...R];for(let g=C.length-1;g>=0;g--){const v=C[g];if(v?.toolName===p.toolName&&v.status==="running"){C[g]={...v,status:"completed",isError:p.isError,result:p.result},R=C,E(C);return}}R=[...C,{toolName:p.toolName,isError:p.isError,result:p.result,status:"completed"}],E(R)},onDone:p=>{const C={id:p.messageId||`msg-${Date.now()}`,sessionId:l.id,role:"assistant",content:N,thinkingOutput:W,toolCalls:R.length>0?R:void 0,createdAt:new Date().toISOString()};ae.current.add(C.id),w(v=>[...v,C]),D(""),T(""),E([]),L(!1),k.current=null,setTimeout(()=>{ae.current.delete(C.id)},1e3),te();const g=K.current.trim();g&&(K.current="",P(""),G(g))},onError:p=>{if(w(C=>C.filter(g=>g.id!==h)),D(""),T(""),E([]),L(!1),k.current=null,console.error("[useChat] Stream error:",p),!J.current){const C=K.current.trim();C&&(K.current="",P(""),G(C))}}};k.current=ft(l.id,o,m,n)},[l,O,n,te]),Se=Z?i.filter(o=>o.title?.toLowerCase().includes(Z.toLowerCase())||o.agentId.toLowerCase().includes(Z.toLowerCase())):i;return s.useEffect(()=>{const o=ee.current,h=n?`?projectId=${encodeURIComponent(n)}`:"",u=()=>ee.current!==o,N=g=>{if(u())return;const v=JSON.parse(g.data);r(f=>f.some(j=>j.id===v.id)?f:[v,...f])},W=g=>{if(u())return;const v=JSON.parse(g.data);r(f=>[...f.map(ve=>ve.id===v.id?v:ve)]),H.current?.id===v.id&&c(v)},R=g=>{if(u())return;const{id:v}=JSON.parse(g.data);r(f=>f.filter(j=>j.id!==v)),H.current?.id===v&&(c(null),w([]))},m=g=>{if(u())return;const v=JSON.parse(g.data),f=He(v);ae.current.has(f.id)||H.current?.id===f.sessionId&&!we.current&&w(j=>j.some(ve=>ve.id===f.id)?j:[...j,f])},p=g=>{if(u())return;const{id:v}=JSON.parse(g.data);w(f=>f.filter(j=>j.id!==v))};return pt(`/api/events${h}`,{events:{"chat:session:created":N,"chat:session:updated":W,"chat:session:deleted":R,"chat:message:added":m,"chat:message:deleted":p}})},[n]),s.useEffect(()=>()=>{k.current&&(k.current.close(),k.current=null)},[]),{sessions:i,activeSession:l,sessionsLoading:x,messages:M,messagesLoading:X,isStreaming:O,streamingText:re,streamingThinking:V,streamingToolCalls:pe,pendingMessage:S,selectSession:oe,createSession:de,archiveSession:ue,deleteSession:ie,sendMessage:G,stopStreaming:se,clearPendingMessage:_,loadMoreMessages:he,hasMoreMessages:A,searchQuery:Z,setSearchQuery:U,filteredSessions:Se,refreshSessions:te,agentsMap:q}}function _e(n){const i=new Date(n),l=new Date().getTime()-i.getTime(),c=Math.floor(l/1e3),x=Math.floor(c/60),b=Math.floor(x/60),M=Math.floor(b/24);return c<60?"just now":x<60?`${x}m ago`:b<24?`${b}h ago`:M<7?`${M}d ago`:i.toLocaleDateString()}function Ge(n,i){if(!n||!i)return null;const r=i.toLowerCase();if(r.includes("claude")){let c=i.replace(/^claude[- ]/i,"Claude ").replace(/sonnet[- ](\d+)[- ](\d+)/i,"Sonnet $1.$2").replace(/sonnet[- ](\d+)/i,"Sonnet $1").replace(/haiku[- ](\d+)/i,"Haiku $1").replace(/opus[- ](\d+)/i,"Opus $1").replace(/sonnet/i,"Sonnet").replace(/haiku/i,"Haiku").replace(/opus/i,"Opus").replace(/-/g," ").trim();return c=c.replace(/\s+/g," "),c.length>30?c.slice(0,30)+"…":c}if(r.includes("gpt")||r.includes("openai")){const c=i.replace(/^gpt-4-turbo$/i,"GPT-4 Turbo").replace(/^gpt-4o-mini$/i,"GPT-4o Mini").replace(/^gpt-4o$/i,"GPT-4o").replace(/^gpt-4$/i,"GPT-4").replace(/^gpt-o1-preview$/i,"GPT-o1 Preview").replace(/^gpt-o1-mini$/i,"GPT-o1 Mini").replace(/^gpt-o1$/i,"GPT-o1").replace(/^gpt/i,"GPT").trim();return c.length>30?c.slice(0,30)+"…":c}if(r.includes("gemini")){const c=i.replace(/^gemini[- ]/i,"Gemini ").replace(/pro[- ](\d+)[- ](\d+)/i,"Pro $1.$2").replace(/pro[- ](\d+)/i,"Pro $1").replace(/-/g," ").replace(/\s+/g," ").trim();return c.length>30?c.slice(0,30)+"…":c}const l=i.replace(/-/g," ").replace(/^\w/,c=>c.toUpperCase()).replace(/\s+/g," ").trim();return l.length>30?l.slice(0,30)+"…":l}function Me(n,i){return n.length>i?`${n.slice(0,i)}…`:n}function Pt(n){if(!n)return null;const i=Object.entries(n);return i.length===0?null:i.map(([r,l])=>{let c="";if(typeof l=="string")c=l;else try{c=JSON.stringify(l)}catch{c=String(l)}return`${r}=${Me(c,50)}`}).join(", ")}function Rt(n){if(n===void 0)return null;if(typeof n=="string")return Me(n,200);try{return Me(JSON.stringify(n),200)}catch{return Me(String(n),200)}}function Ue(n){return!n||n.length===0?null:e.jsxs("div",{className:"chat-tool-calls","data-testid":"chat-tool-calls",children:[e.jsxs("div",{className:"chat-tool-calls-header",children:[e.jsx(Tt,{size:12,"aria-hidden":"true"}),e.jsx("span",{children:"Tool calls"})]}),n.map((i,r)=>{const l=i.status==="running",c=i.status==="completed"&&i.isError,x=Pt(i.args),b=Rt(i.result),M=l?x:b?`result: ${b}`:x?`args: ${x}`:null,w=l?"running":c?"error":"completed";return e.jsxs("details",{className:`chat-tool-call${l?" chat-tool-call--running":""}${c?" chat-tool-call--error":""}`,open:l,children:[e.jsxs("summary",{children:[e.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),e.jsx("span",{className:"chat-tool-call-name",children:i.toolName}),M&&e.jsx("span",{className:"chat-tool-call-preview",title:M,children:M}),e.jsx("span",{className:"chat-tool-call-status-text",children:w})]}),e.jsxs("div",{className:"chat-tool-call-content",children:[x&&e.jsxs("div",{className:"chat-tool-call-row",children:[e.jsx("span",{className:"chat-tool-call-label",children:"args"}),e.jsx("span",{className:"chat-tool-call-value",children:x})]}),b&&e.jsxs("div",{className:`chat-tool-call-row${c?" chat-tool-call-row--error":""}`,children:[e.jsx("span",{className:"chat-tool-call-label",children:"result"}),e.jsx("span",{className:"chat-tool-call-value",children:b})]})]})]},`${i.toolName}-${r}`)})]})}const je="__fn_agent__";function qe(n){const i=/(^|[\s])\/([^\s]*)$/.exec(n);if(!i)return null;const r=i[1]??"",l=i[2]??"",c=i.index+r.length;return{filter:l,start:c,end:n.length}}function Lt(n,i){const r=n.slice(0,i),l=/(^|[\s\n])@([\w-]*)$/.exec(r);if(!l)return null;const c=l[2]??"",x=r.length-c.length-1;return{filter:c,start:x,end:i}}function It({projectId:n,onClose:i,onCreate:r}){const[l,c]=s.useState("agent"),[x,b]=s.useState([]),[M,w]=s.useState(!0),[X,z]=s.useState(""),[O,L]=s.useState([]),[re,D]=s.useState(!0),[V,T]=s.useState("");s.useEffect(()=>{let S=!1;return w(!0),Le(void 0,n).then(P=>{S||b(P)}).catch(()=>{S||b([])}).finally(()=>{S||w(!1)}),()=>{S=!0}},[n]),s.useEffect(()=>{D(!0),At().then(S=>{L(S.models)}).catch(()=>{L([])}).finally(()=>{D(!1)})},[]);const pe=S=>{if(S.preventDefault(),l==="agent"){if(!X)return;r({agentId:X});return}if(!V)return;const P=V.indexOf("/");if(P<=0)return;const Z=V.slice(0,P),U=V.slice(P+1);r({agentId:je,modelProvider:Z,modelId:U})},E=l==="agent"?!X:!V;return e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:i,role:"dialog","aria-modal":"true",children:e.jsxs("div",{className:"chat-new-dialog",onClick:S=>S.stopPropagation(),children:[e.jsx("h3",{children:"New Chat"}),e.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[e.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${l==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{c("agent"),T("")},children:"Agent"}),e.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${l==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{c("model"),z("")},children:"Model"})]}),e.jsxs("form",{onSubmit:pe,children:[l==="agent"&&e.jsxs("label",{className:"chat-new-dialog-model-label",children:["Agent",M?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading agents..."}):x.length===0?e.jsx("div",{className:"chat-new-dialog-empty",children:"No agents available"}):e.jsx("div",{className:"chat-new-dialog-agent-list",children:x.map(S=>e.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${X===S.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>z(S.id),"data-testid":`agent-option-${S.id}`,children:[e.jsx(Ce,{size:16}),e.jsx("span",{className:"chat-new-dialog-agent-name",children:S.name}),e.jsx("span",{className:"chat-new-dialog-agent-role",children:S.role})]},S.id))})]}),l==="model"&&e.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:re?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading models..."}):e.jsx($t,{models:O,value:V,onChange:T,label:"Model",placeholder:"Select a model"})}),e.jsxs("div",{className:"chat-new-dialog-actions",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:i,children:"Cancel"}),e.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:E,children:"Create"})]})]})]})})}function Vt({projectId:n,addToast:i}){const{activeSession:r,sessionsLoading:l,messages:c,messagesLoading:x,isStreaming:b,streamingText:M,streamingThinking:w,streamingToolCalls:X,selectSession:z,createSession:O,archiveSession:L,deleteSession:re,sendMessage:D,stopStreaming:V,pendingMessage:T,clearPendingMessage:pe,searchQuery:E,setSearchQuery:S,filteredSessions:P}=Et(n),[Z,U]=s.useState(!1),[A,B]=s.useState(""),[q,ne]=s.useState(null),[k,J]=s.useState(null),[K,xe]=s.useState(!0),[H,we]=s.useState(new Map),[ae,ee]=s.useState([]),[Ne,te]=s.useState(!0),[Q,I]=s.useState(!1),[oe,de]=s.useState(""),[ue,ie]=s.useState(0),[he,se]=s.useState(""),[_,G]=s.useState(!1),[Se,o]=s.useState(0),[h,u]=s.useState(-1),[,N]=s.useState(!1),[W,R]=s.useState({top:0,left:0}),m=xt({projectId:n}),p=s.useCallback(t=>{if(!t||!m.mentionActive)return;const a=t.getBoundingClientRect();R({top:a.top-260,left:a.left+8})},[m.mentionActive]),C=s.useRef(null),g=s.useRef(null),v=s.useRef(null),f=s.useRef(null),j=s.useRef(0),me=St()==="mobile",F=s.useMemo(()=>{const t=oe.trim().toLowerCase();return(t?ae.filter(d=>d.name.toLowerCase().includes(t)):ae).slice(0,10)},[ae,oe]),ge=s.useMemo(()=>Array.from(H.values()),[H]),le=s.useMemo(()=>{const t=he.trim().toLowerCase();return t?ge.filter(a=>a.name.toLowerCase().includes(t)):ge},[ge,he]),Ie=s.useMemo(()=>{const t=new Map;for(const a of ge)t.set(a.name.toLowerCase(),a);return t},[ge]);s.useEffect(()=>{ie(0)},[F]),s.useEffect(()=>{o(0)},[he,_]),s.useEffect(()=>()=>{g.current!==null&&window.clearTimeout(g.current)},[]),s.useEffect(()=>{C.current?.scrollIntoView({behavior:"smooth"})},[c,M]),s.useEffect(()=>{const t=()=>ne(null);if(q)return document.addEventListener("click",t),()=>document.removeEventListener("click",t)},[q]),s.useEffect(()=>{let t=!1;const a=n;return Le(void 0,n).then(d=>{if(t||a!==n)return;const y=new Map;for(const $ of d)y.set($.id,$);we(y)}).catch(()=>{}),()=>{t=!0}},[n]),s.useEffect(()=>{let t=!1;return te(!0),vt(n).then(a=>{t||ee(a)}).catch(()=>{t||ee([])}).finally(()=>{t||te(!1)}),()=>{t=!0}},[n]);const Je=s.useCallback(async t=>{try{await O(t),U(!1),me&&xe(!1)}catch{i("Failed to create chat session","error")}},[O,i,me]),ye=s.useCallback(()=>{const t=A.trim();!t||!r||(B(""),I(!1),de(""),G(!1),se(""),u(-1),D(t))},[A,r,D]),Te=s.useCallback(t=>{B(a=>{const d=qe(a);if(!d)return a;const y=`/skill:${t.name} `,$=a.slice(0,d.start)+y+a.slice(d.end);return window.requestAnimationFrame(()=>{f.current&&(f.current.style.height="auto",f.current.style.height=`${Math.min(f.current.scrollHeight,120)}px`,f.current.focus())}),$}),I(!1),de(""),ie(0)},[]),Ae=s.useCallback(t=>{const a=f.current;if(!a||h<0)return;const d=a.selectionStart??j.current,y=a.selectionEnd??d,$=Math.max(d,y),be=Math.min(h,$),ce=`${`@${t.name.replace(/\s+/g,"_")}`} `,Ee=A.slice(0,be)+ce+A.slice($),fe=be+ce.length;B(Ee),G(!1),se(""),o(0),u(-1),window.requestAnimationFrame(()=>{f.current&&(f.current.style.height="auto",f.current.style.height=`${Math.min(f.current.scrollHeight,120)}px`,f.current.focus(),f.current.setSelectionRange(fe,fe))})},[h,A]),Fe=s.useCallback(t=>{const a=/@([\w-]+)/g,d=[];let y=0,$=a.exec(t);for(;$;){const[be,Ve=""]=$,ce=$.index;ce>y&&d.push(t.slice(y,ce));const Ee=Ve.replace(/_/g," ").toLowerCase(),fe=Ie.get(Ee);fe?d.push(e.jsxs("span",{className:"chat-mention-chip",children:["@",fe.name.replace(/\s+/g,"_")]},`${fe.id}-${ce}`)):d.push(be),y=ce+be.length,$=a.exec(t)}return y<t.length&&d.push(t.slice(y)),d.length===0?t:d},[Ie]),Ke=s.useCallback(t=>{if(j.current=t.currentTarget.selectionStart??j.current,m.mentionActive&&m.files.length>0){if(m.handleKeyDown(t,A),t.key==="Enter"||t.key==="Tab"){const a=m.files[m.selectedIndex];if(a){const d=m.selectFile(a,A);B(d),m.dismissMention(),N(!1)}}return}if(_&&t.key==="ArrowDown"){t.preventDefault(),le.length>0&&o(a=>(a+1)%le.length);return}if(_&&t.key==="ArrowUp"){t.preventDefault(),le.length>0&&o(a=>a===0?le.length-1:a-1);return}if(_&&t.key==="Enter"){t.preventDefault();const a=le[Se]??le[0];a&&Ae(a);return}if(_&&t.key==="Escape"){t.preventDefault(),G(!1),se(""),u(-1);return}if(Q&&t.key==="ArrowDown"){t.preventDefault(),F.length>0&&ie(a=>(a+1)%F.length);return}if(Q&&t.key==="ArrowUp"){t.preventDefault(),F.length>0&&ie(a=>a===0?F.length-1:a-1);return}if(Q&&(t.key==="Enter"||t.key==="Tab")&&F.length>0){t.preventDefault();const a=F[ue]??F[0];a&&Te(a);return}if(Q&&t.key==="Escape"){t.preventDefault(),I(!1);return}t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),ye())},[_,le,Se,Ae,Q,F,ue,Te,ye,m,A]),ke=s.useCallback((t,a)=>{const d=Lt(t,a);if(d){G(!0),se(d.filter),u(d.start);return}G(!1),se(""),u(-1)},[]),Qe=s.useCallback(t=>{const a=t.target,d=a.value,y=a.selectionStart??d.length;j.current=y,B(d);const $=qe(d);$?(I(!0),de($.filter)):(I(!1),de("")),ke(d,y),m.detectMention(d,y),N(m.mentionActive),m.mentionActive&&p(a),a.style.height="auto",a.style.height=`${Math.min(a.scrollHeight,120)}px`},[ke]),$e=s.useCallback(t=>{const a=t.currentTarget,d=a.selectionStart??a.value.length;j.current=d,ke(a.value,d),m.detectMention(a.value,d),N(m.mentionActive),m.mentionActive&&p(a)},[ke,m,p]),We=s.useCallback(t=>{t.key!=="Escape"&&$e(t)},[$e]),Ye=s.useCallback(()=>{g.current!==null&&window.clearTimeout(g.current),g.current=window.setTimeout(()=>{I(!1),G(!1),se(""),u(-1),N(!1),m.dismissMention(),g.current=null},120)},[m]),Xe=s.useCallback(()=>{g.current!==null&&(window.clearTimeout(g.current),g.current=null)},[]),Ze=s.useCallback(async t=>{ne(null);try{await L(t),i("Conversation archived","success")}catch{i("Failed to archive conversation","error")}},[L,i]),et=s.useCallback(async t=>{J(null),ne(null);try{await re(t),i("Conversation deleted","success")}catch{i("Failed to delete conversation","error")}},[re,i]),tt=s.useCallback(t=>{z(t),me&&xe(!1)},[z,me]),st=s.useCallback(()=>{z(""),xe(!0)},[z]),nt=()=>e.jsxs("div",{className:"chat-empty-state",children:[e.jsx(yt,{size:48,strokeWidth:1.5}),e.jsx("h2",{children:"Start a new conversation"}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>U(!0),children:[e.jsx(Pe,{size:16}),"New Chat"]})]}),Y=Ge(r?.modelProvider,r?.modelId),ze=r?.agentId===je?Y??"Fusion":r?.title||H.get(r?.agentId??"")?.name||r?.agentId||"Chat",at=!!(Y&&Y!==ze),De=H.get(r?.agentId??"")?.name||(r?.agentId===je?Y??"Fusion":r?.agentId?.slice(0,30)??"Fusion"),Oe=!!(Y&&Y!==De),it=T.length>50?`${T.slice(0,50)}…`:T;return e.jsxs("div",{className:"chat-view",children:[e.jsxs("div",{className:`chat-sidebar${K?"":" chat-sidebar--hidden"}`,children:[e.jsx("div",{className:"chat-sidebar-header",children:e.jsxs("button",{className:"btn btn-sm btn-primary",onClick:()=>U(!0),"data-testid":"chat-new-btn",children:[e.jsx(Pe,{size:14}),"New Chat"]})}),e.jsx("div",{className:"chat-sidebar-search",children:e.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[e.jsx(bt,{size:14,className:"chat-sidebar-search-icon"}),e.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:"Search conversations...",value:E,onChange:t=>S(t.target.value),"data-testid":"chat-search-input"})]})}),e.jsx("div",{className:"chat-session-list chat-sidebar-list",children:l?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"Loading..."}):P.length===0?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"No conversations yet"}):P.map(t=>e.jsxs("div",{className:`chat-session-item${r?.id===t.id?" chat-session-item--active":""}`,onClick:()=>tt(t.id),onContextMenu:a=>{a.preventDefault(),ne({sessionId:t.id,x:a.clientX,y:a.clientY})},"data-testid":`chat-session-${t.id}`,children:[e.jsx("button",{className:"chat-session-delete-btn",onClick:a=>{a.stopPropagation(),J(t.id)},"data-testid":"chat-session-delete-btn","aria-label":"Delete conversation",children:e.jsx(Be,{size:14})}),e.jsx("div",{className:"chat-session-title",children:t.title||"Untitled"}),e.jsx("div",{className:"chat-session-preview",children:t.lastMessagePreview||"No messages"}),e.jsxs("div",{className:"chat-session-meta",children:[e.jsx("span",{children:H.get(t.agentId)?.name||(t.agentId===je?Ge(t.modelProvider,t.modelId)??"Fusion":t.agentId.slice(0,30))}),e.jsx("span",{children:t.updatedAt?_e(t.updatedAt):""})]})]},t.id))}),e.jsx("div",{className:"chat-sidebar-footer",children:e.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>U(!0),"data-testid":"chat-new-btn-mobile",children:[e.jsx(Pe,{size:14}),"New Chat"]})})]}),q&&e.jsxs("div",{className:"chat-session-context-menu",style:{top:q.y,left:q.x},onClick:t=>t.stopPropagation(),children:[e.jsxs("button",{onClick:()=>Ze(q.sessionId),"data-testid":"chat-context-archive",children:[e.jsx(wt,{size:14}),"Archive"]}),e.jsxs("button",{onClick:()=>{ne(null),J(q.sessionId)},"data-testid":"chat-context-delete",children:[e.jsx(Be,{size:14}),"Delete"]})]}),k&&e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:()=>J(null),children:e.jsxs("div",{className:"chat-new-dialog",onClick:t=>t.stopPropagation(),children:[e.jsx("h3",{children:"Delete Conversation?"}),e.jsx("p",{style:{fontSize:"14px",color:"var(--text-secondary)",marginBottom:"16px"},children:"This action cannot be undone. All messages in this conversation will be permanently deleted."}),e.jsxs("div",{className:"chat-new-dialog-actions",children:[e.jsx("button",{className:"btn btn-sm",onClick:()=>J(null),children:"Cancel"}),e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void et(k),children:"Delete"})]})]})}),e.jsxs("div",{className:"chat-thread",children:[(r||!me)&&e.jsxs("div",{className:"chat-thread-header",children:[me&&r&&e.jsx("button",{className:"btn-icon",onClick:st,"data-testid":"chat-back-btn",children:e.jsx(Nt,{size:16})}),e.jsx(Ce,{size:16}),e.jsx("span",{className:"chat-thread-header-title",children:ze}),at&&e.jsx("span",{className:"chat-model-tag",children:Y})]}),e.jsxs("div",{className:"chat-messages",ref:v,children:[x?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"Loading messages..."}):c.length===0&&!r?nt():c.length===0&&r?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"No messages yet. Start the conversation!"}):e.jsxs(e.Fragment,{children:[c.map(t=>e.jsxs("div",{className:`chat-message chat-message--${t.role}`,"data-testid":`chat-message-${t.id}`,children:[t.role==="assistant"&&e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(Ce,{size:14}),e.jsx("span",{children:De}),Oe&&e.jsx("span",{className:"chat-model-tag",children:Y})]}),e.jsx("div",{className:"chat-message-content",children:Fe(t.content)}),Ue(t.toolCalls),t.thinkingOutput&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:t.thinkingOutput})]}),e.jsx("div",{className:"chat-message-time",children:_e(t.createdAt)})]},t.id)),b&&e.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(Ce,{size:14}),e.jsx("span",{children:De}),Oe&&e.jsx("span",{className:"chat-model-tag",children:Y})]}),M?e.jsx("div",{className:"chat-message-content",children:Fe(M)}):e.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:w?"Thinking…":"Connecting…"}),Ue(X),w&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:w})]}),e.jsxs("div",{className:"chat-typing-indicator",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]})]})]}),e.jsx("div",{ref:C})]}),r&&e.jsxs("div",{className:"chat-input-area",children:[Q&&e.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:Ne?e.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):F.length===0?e.jsx("div",{className:"chat-skill-menu-empty",children:oe?"No skills found":"No skills available"}):F.map((t,a)=>e.jsxs("button",{type:"button",role:"option","aria-selected":a===ue,className:`chat-skill-menu-item${a===ue?" chat-skill-menu-item--highlighted":""}`,onMouseDown:d=>d.preventDefault(),onMouseEnter:()=>ie(a),onClick:()=>Te(t),children:[e.jsx("span",{className:"chat-skill-menu-item-name",children:t.name}),e.jsx("span",{className:"chat-skill-menu-item-description",title:t.relativePath,children:t.relativePath})]},t.id))}),e.jsxs("div",{className:"chat-input-wrapper",children:[e.jsx("textarea",{ref:f,className:"chat-input-textarea",placeholder:"Type a message...",value:A,onChange:Qe,onKeyDown:Ke,onKeyUp:We,onClick:$e,onBlur:Ye,onFocus:Xe,rows:1,"data-testid":"chat-input"}),e.jsx(kt,{agents:ge,filter:he,highlightedIndex:Se,visible:_,onSelect:Ae,position:"below"}),e.jsx(Ct,{visible:m.mentionActive&&!_,position:W,files:m.files,selectedIndex:m.selectedIndex,onSelect:t=>{const a=m.selectFile(t,A);B(a),m.dismissMention(),N(!1),f.current?.focus()},loading:m.loading}),T&&e.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[e.jsx("span",{children:`Queued: ${it}`}),e.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:pe,children:"×"})]})]}),b?e.jsx("button",{className:"chat-input-stop",onClick:V,"aria-label":"Stop generation","data-testid":"chat-stop-btn",children:e.jsx(Mt,{size:14})}):e.jsx("button",{className:"chat-input-send",onClick:()=>void ye(),disabled:!A.trim(),"data-testid":"chat-send-btn",children:e.jsx(jt,{size:16})})]})]}),Z&&e.jsx(It,{projectId:n,onClose:()=>U(!1),onCreate:Je})]})}export{Vt as ChatView};
1
+ import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{i as Le,ax as lt,g as ct,ay as rt,a as ot,az as dt,aA as ut,aB as ht,aC as mt,aD as gt,aE as ft,s as pt,aF as xt,aG as St,f as vt,w as Pe,S as bt,I as Be,aj as wt,aH as Nt,B as Ce,aI as kt,aJ as Ct,aK as Mt,aL as jt,aM as yt,aN as Tt,h as At,j as $t}from"./index-CHoVMPAA.js";import"./vendor-xterm-DzcZoU0P.js";const Re="kb-chat-active-session";function Dt(n){const i=n?.toolCalls;if(!Array.isArray(i))return;const r=i.map(l=>{if(!l||typeof l!="object")return null;const c=l,x=typeof c.toolName=="string"?c.toolName:"";if(!x)return null;const b=c.args;return{toolName:x,...b&&typeof b=="object"?{args:b}:{},isError:!!c.isError,result:c.result,status:"completed"}}).filter(l=>l!==null);return r.length>0?r:void 0}function He(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:Dt(n.metadata),createdAt:n.createdAt}}function Et(n){const[i,r]=s.useState([]),[l,c]=s.useState(null),[x,b]=s.useState(!0),[M,w]=s.useState([]),[X,z]=s.useState(!1),[O,L]=s.useState(!1),[re,D]=s.useState(""),[V,T]=s.useState(""),[pe,E]=s.useState([]),[S,P]=s.useState(""),[Z,U]=s.useState(""),[A,B]=s.useState(!0),[q,ne]=s.useState(new Map),k=s.useRef(null),J=s.useRef(!1),K=s.useRef(""),xe=s.useRef(i),H=s.useRef(l),we=s.useRef(O);xe.current=i,H.current=l,we.current=O,s.useEffect(()=>{K.current=S},[S]);const ae=s.useRef(new Set),ee=s.useRef(0),Ne=s.useRef(n);Ne.current!==n&&(Ne.current=n,ee.current++),s.useEffect(()=>{const o=ee.current;Le(void 0,n).then(h=>{if(ee.current!==o)return;const u=new Map;for(const N of h)u.set(N.id,N);ne(u)}).catch(()=>{})},[n]);const te=s.useCallback(async()=>{b(!0);try{const h=[...(await lt(n)).sessions].sort((u,N)=>new Date(N.updatedAt).getTime()-new Date(u.updatedAt).getTime());r(h)}catch{}finally{b(!1)}},[n]);s.useEffect(()=>{te()},[te]);const Q=s.useRef(()=>{});s.useEffect(()=>{if(x)return;const o=ct(Re,n);o&&i.find(u=>u.id===o)&&Q.current(o)},[x,i,n]);const I=s.useCallback(async(o,h)=>{z(!0);try{const u=await rt(o,{limit:50,...h},n),N=u.messages.map(He);h?.offset&&h.offset>0?w(W=>[...N,...W]):w(N),B(u.messages.length>=50)}catch{}finally{z(!1)}},[n]),oe=s.useCallback(o=>{k.current&&(k.current.close(),k.current=null);const h=i.find(u=>u.id===o);c(h||null),D(""),T(""),E([]),L(!1),B(!0),o?I(o):w([]),o?ot(Re,o,n):dt(Re,n)},[i,I,n]);Q.current=oe;const de=s.useCallback(async o=>{const h=await ut(o,n),u={id:h.session.id,title:h.session.title,agentId:h.session.agentId,status:h.session.status,modelProvider:h.session.modelProvider,modelId:h.session.modelId,createdAt:h.session.createdAt,updatedAt:h.session.updatedAt};return r(N=>[u,...N]),c(u),w([]),D(""),T(""),E([]),L(!1),B(!0),u},[n]),ue=s.useCallback(async o=>{await ht(o,{status:"archived"},n),r(h=>h.filter(u=>u.id!==o)),l?.id===o&&(c(null),w([]))},[l,n]),ie=s.useCallback(async o=>{l?.id===o&&k.current&&(k.current.close(),k.current=null),await mt(o,n),r(h=>h.filter(u=>u.id!==o)),l?.id===o&&(c(null),w([]))},[l,n]),he=s.useCallback(async()=>{!l||!A||await I(l.id,{offset:M.length})},[l,A,I,M.length]),se=s.useCallback(()=>{l&&(J.current=!0,k.current?.close(),k.current=null,gt(l.id,n).catch(()=>{}),L(!1),D(""),T(""),E([]))},[l,n]),_=s.useCallback(()=>{K.current="",P("")},[]),G=s.useCallback(o=>{if(!l)return;if(O){K.current=o,P(o);return}J.current=!1,k.current&&(k.current.close(),k.current=null);const h=`temp-${Date.now()}`,u={id:h,sessionId:l.id,role:"user",content:o,createdAt:new Date().toISOString()};w(p=>[...p,u]),D(""),T(""),E([]),L(!0);let N="",W="",R=[];const m={onThinking:p=>{W+=p,T(W)},onText:p=>{N+=p,D(N)},onToolStart:p=>{R=[...R,{toolName:p.toolName,args:p.args,isError:!1,status:"running"}],E(R)},onToolEnd:p=>{const C=[...R];for(let g=C.length-1;g>=0;g--){const v=C[g];if(v?.toolName===p.toolName&&v.status==="running"){C[g]={...v,status:"completed",isError:p.isError,result:p.result},R=C,E(C);return}}R=[...C,{toolName:p.toolName,isError:p.isError,result:p.result,status:"completed"}],E(R)},onDone:p=>{const C={id:p.messageId||`msg-${Date.now()}`,sessionId:l.id,role:"assistant",content:N,thinkingOutput:W,toolCalls:R.length>0?R:void 0,createdAt:new Date().toISOString()};ae.current.add(C.id),w(v=>[...v,C]),D(""),T(""),E([]),L(!1),k.current=null,setTimeout(()=>{ae.current.delete(C.id)},1e3),te();const g=K.current.trim();g&&(K.current="",P(""),G(g))},onError:p=>{if(w(C=>C.filter(g=>g.id!==h)),D(""),T(""),E([]),L(!1),k.current=null,console.error("[useChat] Stream error:",p),!J.current){const C=K.current.trim();C&&(K.current="",P(""),G(C))}}};k.current=ft(l.id,o,m,n)},[l,O,n,te]),Se=Z?i.filter(o=>o.title?.toLowerCase().includes(Z.toLowerCase())||o.agentId.toLowerCase().includes(Z.toLowerCase())):i;return s.useEffect(()=>{const o=ee.current,h=n?`?projectId=${encodeURIComponent(n)}`:"",u=()=>ee.current!==o,N=g=>{if(u())return;const v=JSON.parse(g.data);r(f=>f.some(j=>j.id===v.id)?f:[v,...f])},W=g=>{if(u())return;const v=JSON.parse(g.data);r(f=>[...f.map(ve=>ve.id===v.id?v:ve)]),H.current?.id===v.id&&c(v)},R=g=>{if(u())return;const{id:v}=JSON.parse(g.data);r(f=>f.filter(j=>j.id!==v)),H.current?.id===v&&(c(null),w([]))},m=g=>{if(u())return;const v=JSON.parse(g.data),f=He(v);ae.current.has(f.id)||H.current?.id===f.sessionId&&!we.current&&w(j=>j.some(ve=>ve.id===f.id)?j:[...j,f])},p=g=>{if(u())return;const{id:v}=JSON.parse(g.data);w(f=>f.filter(j=>j.id!==v))};return pt(`/api/events${h}`,{events:{"chat:session:created":N,"chat:session:updated":W,"chat:session:deleted":R,"chat:message:added":m,"chat:message:deleted":p}})},[n]),s.useEffect(()=>()=>{k.current&&(k.current.close(),k.current=null)},[]),{sessions:i,activeSession:l,sessionsLoading:x,messages:M,messagesLoading:X,isStreaming:O,streamingText:re,streamingThinking:V,streamingToolCalls:pe,pendingMessage:S,selectSession:oe,createSession:de,archiveSession:ue,deleteSession:ie,sendMessage:G,stopStreaming:se,clearPendingMessage:_,loadMoreMessages:he,hasMoreMessages:A,searchQuery:Z,setSearchQuery:U,filteredSessions:Se,refreshSessions:te,agentsMap:q}}function _e(n){const i=new Date(n),l=new Date().getTime()-i.getTime(),c=Math.floor(l/1e3),x=Math.floor(c/60),b=Math.floor(x/60),M=Math.floor(b/24);return c<60?"just now":x<60?`${x}m ago`:b<24?`${b}h ago`:M<7?`${M}d ago`:i.toLocaleDateString()}function Ge(n,i){if(!n||!i)return null;const r=i.toLowerCase();if(r.includes("claude")){let c=i.replace(/^claude[- ]/i,"Claude ").replace(/sonnet[- ](\d+)[- ](\d+)/i,"Sonnet $1.$2").replace(/sonnet[- ](\d+)/i,"Sonnet $1").replace(/haiku[- ](\d+)/i,"Haiku $1").replace(/opus[- ](\d+)/i,"Opus $1").replace(/sonnet/i,"Sonnet").replace(/haiku/i,"Haiku").replace(/opus/i,"Opus").replace(/-/g," ").trim();return c=c.replace(/\s+/g," "),c.length>30?c.slice(0,30)+"…":c}if(r.includes("gpt")||r.includes("openai")){const c=i.replace(/^gpt-4-turbo$/i,"GPT-4 Turbo").replace(/^gpt-4o-mini$/i,"GPT-4o Mini").replace(/^gpt-4o$/i,"GPT-4o").replace(/^gpt-4$/i,"GPT-4").replace(/^gpt-o1-preview$/i,"GPT-o1 Preview").replace(/^gpt-o1-mini$/i,"GPT-o1 Mini").replace(/^gpt-o1$/i,"GPT-o1").replace(/^gpt/i,"GPT").trim();return c.length>30?c.slice(0,30)+"…":c}if(r.includes("gemini")){const c=i.replace(/^gemini[- ]/i,"Gemini ").replace(/pro[- ](\d+)[- ](\d+)/i,"Pro $1.$2").replace(/pro[- ](\d+)/i,"Pro $1").replace(/-/g," ").replace(/\s+/g," ").trim();return c.length>30?c.slice(0,30)+"…":c}const l=i.replace(/-/g," ").replace(/^\w/,c=>c.toUpperCase()).replace(/\s+/g," ").trim();return l.length>30?l.slice(0,30)+"…":l}function Me(n,i){return n.length>i?`${n.slice(0,i)}…`:n}function Pt(n){if(!n)return null;const i=Object.entries(n);return i.length===0?null:i.map(([r,l])=>{let c="";if(typeof l=="string")c=l;else try{c=JSON.stringify(l)}catch{c=String(l)}return`${r}=${Me(c,50)}`}).join(", ")}function Rt(n){if(n===void 0)return null;if(typeof n=="string")return Me(n,200);try{return Me(JSON.stringify(n),200)}catch{return Me(String(n),200)}}function Ue(n){return!n||n.length===0?null:e.jsxs("div",{className:"chat-tool-calls","data-testid":"chat-tool-calls",children:[e.jsxs("div",{className:"chat-tool-calls-header",children:[e.jsx(Tt,{size:12,"aria-hidden":"true"}),e.jsx("span",{children:"Tool calls"})]}),n.map((i,r)=>{const l=i.status==="running",c=i.status==="completed"&&i.isError,x=Pt(i.args),b=Rt(i.result),M=l?x:b?`result: ${b}`:x?`args: ${x}`:null,w=l?"running":c?"error":"completed";return e.jsxs("details",{className:`chat-tool-call${l?" chat-tool-call--running":""}${c?" chat-tool-call--error":""}`,open:l,children:[e.jsxs("summary",{children:[e.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),e.jsx("span",{className:"chat-tool-call-name",children:i.toolName}),M&&e.jsx("span",{className:"chat-tool-call-preview",title:M,children:M}),e.jsx("span",{className:"chat-tool-call-status-text",children:w})]}),e.jsxs("div",{className:"chat-tool-call-content",children:[x&&e.jsxs("div",{className:"chat-tool-call-row",children:[e.jsx("span",{className:"chat-tool-call-label",children:"args"}),e.jsx("span",{className:"chat-tool-call-value",children:x})]}),b&&e.jsxs("div",{className:`chat-tool-call-row${c?" chat-tool-call-row--error":""}`,children:[e.jsx("span",{className:"chat-tool-call-label",children:"result"}),e.jsx("span",{className:"chat-tool-call-value",children:b})]})]})]},`${i.toolName}-${r}`)})]})}const je="__fn_agent__";function qe(n){const i=/(^|[\s])\/([^\s]*)$/.exec(n);if(!i)return null;const r=i[1]??"",l=i[2]??"",c=i.index+r.length;return{filter:l,start:c,end:n.length}}function Lt(n,i){const r=n.slice(0,i),l=/(^|[\s\n])@([\w-]*)$/.exec(r);if(!l)return null;const c=l[2]??"",x=r.length-c.length-1;return{filter:c,start:x,end:i}}function It({projectId:n,onClose:i,onCreate:r}){const[l,c]=s.useState("agent"),[x,b]=s.useState([]),[M,w]=s.useState(!0),[X,z]=s.useState(""),[O,L]=s.useState([]),[re,D]=s.useState(!0),[V,T]=s.useState("");s.useEffect(()=>{let S=!1;return w(!0),Le(void 0,n).then(P=>{S||b(P)}).catch(()=>{S||b([])}).finally(()=>{S||w(!1)}),()=>{S=!0}},[n]),s.useEffect(()=>{D(!0),At().then(S=>{L(S.models)}).catch(()=>{L([])}).finally(()=>{D(!1)})},[]);const pe=S=>{if(S.preventDefault(),l==="agent"){if(!X)return;r({agentId:X});return}if(!V)return;const P=V.indexOf("/");if(P<=0)return;const Z=V.slice(0,P),U=V.slice(P+1);r({agentId:je,modelProvider:Z,modelId:U})},E=l==="agent"?!X:!V;return e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:i,role:"dialog","aria-modal":"true",children:e.jsxs("div",{className:"chat-new-dialog",onClick:S=>S.stopPropagation(),children:[e.jsx("h3",{children:"New Chat"}),e.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[e.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${l==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{c("agent"),T("")},children:"Agent"}),e.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${l==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{c("model"),z("")},children:"Model"})]}),e.jsxs("form",{onSubmit:pe,children:[l==="agent"&&e.jsxs("label",{className:"chat-new-dialog-model-label",children:["Agent",M?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading agents..."}):x.length===0?e.jsx("div",{className:"chat-new-dialog-empty",children:"No agents available"}):e.jsx("div",{className:"chat-new-dialog-agent-list",children:x.map(S=>e.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${X===S.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>z(S.id),"data-testid":`agent-option-${S.id}`,children:[e.jsx(Ce,{size:16}),e.jsx("span",{className:"chat-new-dialog-agent-name",children:S.name}),e.jsx("span",{className:"chat-new-dialog-agent-role",children:S.role})]},S.id))})]}),l==="model"&&e.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:re?e.jsx("div",{className:"chat-new-dialog-loading",children:"Loading models..."}):e.jsx($t,{models:O,value:V,onChange:T,label:"Model",placeholder:"Select a model"})}),e.jsxs("div",{className:"chat-new-dialog-actions",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:i,children:"Cancel"}),e.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:E,children:"Create"})]})]})]})})}function Vt({projectId:n,addToast:i}){const{activeSession:r,sessionsLoading:l,messages:c,messagesLoading:x,isStreaming:b,streamingText:M,streamingThinking:w,streamingToolCalls:X,selectSession:z,createSession:O,archiveSession:L,deleteSession:re,sendMessage:D,stopStreaming:V,pendingMessage:T,clearPendingMessage:pe,searchQuery:E,setSearchQuery:S,filteredSessions:P}=Et(n),[Z,U]=s.useState(!1),[A,B]=s.useState(""),[q,ne]=s.useState(null),[k,J]=s.useState(null),[K,xe]=s.useState(!0),[H,we]=s.useState(new Map),[ae,ee]=s.useState([]),[Ne,te]=s.useState(!0),[Q,I]=s.useState(!1),[oe,de]=s.useState(""),[ue,ie]=s.useState(0),[he,se]=s.useState(""),[_,G]=s.useState(!1),[Se,o]=s.useState(0),[h,u]=s.useState(-1),[,N]=s.useState(!1),[W,R]=s.useState({top:0,left:0}),m=xt({projectId:n}),p=s.useCallback(t=>{if(!t||!m.mentionActive)return;const a=t.getBoundingClientRect();R({top:a.top-260,left:a.left+8})},[m.mentionActive]),C=s.useRef(null),g=s.useRef(null),v=s.useRef(null),f=s.useRef(null),j=s.useRef(0),me=St()==="mobile",F=s.useMemo(()=>{const t=oe.trim().toLowerCase();return(t?ae.filter(d=>d.name.toLowerCase().includes(t)):ae).slice(0,10)},[ae,oe]),ge=s.useMemo(()=>Array.from(H.values()),[H]),le=s.useMemo(()=>{const t=he.trim().toLowerCase();return t?ge.filter(a=>a.name.toLowerCase().includes(t)):ge},[ge,he]),Ie=s.useMemo(()=>{const t=new Map;for(const a of ge)t.set(a.name.toLowerCase(),a);return t},[ge]);s.useEffect(()=>{ie(0)},[F]),s.useEffect(()=>{o(0)},[he,_]),s.useEffect(()=>()=>{g.current!==null&&window.clearTimeout(g.current)},[]),s.useEffect(()=>{C.current?.scrollIntoView({behavior:"smooth"})},[c,M]),s.useEffect(()=>{const t=()=>ne(null);if(q)return document.addEventListener("click",t),()=>document.removeEventListener("click",t)},[q]),s.useEffect(()=>{let t=!1;const a=n;return Le(void 0,n).then(d=>{if(t||a!==n)return;const y=new Map;for(const $ of d)y.set($.id,$);we(y)}).catch(()=>{}),()=>{t=!0}},[n]),s.useEffect(()=>{let t=!1;return te(!0),vt(n).then(a=>{t||ee(a)}).catch(()=>{t||ee([])}).finally(()=>{t||te(!1)}),()=>{t=!0}},[n]);const Je=s.useCallback(async t=>{try{await O(t),U(!1),me&&xe(!1)}catch{i("Failed to create chat session","error")}},[O,i,me]),ye=s.useCallback(()=>{const t=A.trim();!t||!r||(B(""),I(!1),de(""),G(!1),se(""),u(-1),D(t))},[A,r,D]),Te=s.useCallback(t=>{B(a=>{const d=qe(a);if(!d)return a;const y=`/skill:${t.name} `,$=a.slice(0,d.start)+y+a.slice(d.end);return window.requestAnimationFrame(()=>{f.current&&(f.current.style.height="auto",f.current.style.height=`${Math.min(f.current.scrollHeight,120)}px`,f.current.focus())}),$}),I(!1),de(""),ie(0)},[]),Ae=s.useCallback(t=>{const a=f.current;if(!a||h<0)return;const d=a.selectionStart??j.current,y=a.selectionEnd??d,$=Math.max(d,y),be=Math.min(h,$),ce=`${`@${t.name.replace(/\s+/g,"_")}`} `,Ee=A.slice(0,be)+ce+A.slice($),fe=be+ce.length;B(Ee),G(!1),se(""),o(0),u(-1),window.requestAnimationFrame(()=>{f.current&&(f.current.style.height="auto",f.current.style.height=`${Math.min(f.current.scrollHeight,120)}px`,f.current.focus(),f.current.setSelectionRange(fe,fe))})},[h,A]),Fe=s.useCallback(t=>{const a=/@([\w-]+)/g,d=[];let y=0,$=a.exec(t);for(;$;){const[be,Ve=""]=$,ce=$.index;ce>y&&d.push(t.slice(y,ce));const Ee=Ve.replace(/_/g," ").toLowerCase(),fe=Ie.get(Ee);fe?d.push(e.jsxs("span",{className:"chat-mention-chip",children:["@",fe.name.replace(/\s+/g,"_")]},`${fe.id}-${ce}`)):d.push(be),y=ce+be.length,$=a.exec(t)}return y<t.length&&d.push(t.slice(y)),d.length===0?t:d},[Ie]),Ke=s.useCallback(t=>{if(j.current=t.currentTarget.selectionStart??j.current,m.mentionActive&&m.files.length>0){if(m.handleKeyDown(t,A),t.key==="Enter"||t.key==="Tab"){const a=m.files[m.selectedIndex];if(a){const d=m.selectFile(a,A);B(d),m.dismissMention(),N(!1)}}return}if(_&&t.key==="ArrowDown"){t.preventDefault(),le.length>0&&o(a=>(a+1)%le.length);return}if(_&&t.key==="ArrowUp"){t.preventDefault(),le.length>0&&o(a=>a===0?le.length-1:a-1);return}if(_&&t.key==="Enter"){t.preventDefault();const a=le[Se]??le[0];a&&Ae(a);return}if(_&&t.key==="Escape"){t.preventDefault(),G(!1),se(""),u(-1);return}if(Q&&t.key==="ArrowDown"){t.preventDefault(),F.length>0&&ie(a=>(a+1)%F.length);return}if(Q&&t.key==="ArrowUp"){t.preventDefault(),F.length>0&&ie(a=>a===0?F.length-1:a-1);return}if(Q&&(t.key==="Enter"||t.key==="Tab")&&F.length>0){t.preventDefault();const a=F[ue]??F[0];a&&Te(a);return}if(Q&&t.key==="Escape"){t.preventDefault(),I(!1);return}t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),ye())},[_,le,Se,Ae,Q,F,ue,Te,ye,m,A]),ke=s.useCallback((t,a)=>{const d=Lt(t,a);if(d){G(!0),se(d.filter),u(d.start);return}G(!1),se(""),u(-1)},[]),Qe=s.useCallback(t=>{const a=t.target,d=a.value,y=a.selectionStart??d.length;j.current=y,B(d);const $=qe(d);$?(I(!0),de($.filter)):(I(!1),de("")),ke(d,y),m.detectMention(d,y),N(m.mentionActive),m.mentionActive&&p(a),a.style.height="auto",a.style.height=`${Math.min(a.scrollHeight,120)}px`},[ke]),$e=s.useCallback(t=>{const a=t.currentTarget,d=a.selectionStart??a.value.length;j.current=d,ke(a.value,d),m.detectMention(a.value,d),N(m.mentionActive),m.mentionActive&&p(a)},[ke,m,p]),We=s.useCallback(t=>{t.key!=="Escape"&&$e(t)},[$e]),Ye=s.useCallback(()=>{g.current!==null&&window.clearTimeout(g.current),g.current=window.setTimeout(()=>{I(!1),G(!1),se(""),u(-1),N(!1),m.dismissMention(),g.current=null},120)},[m]),Xe=s.useCallback(()=>{g.current!==null&&(window.clearTimeout(g.current),g.current=null)},[]),Ze=s.useCallback(async t=>{ne(null);try{await L(t),i("Conversation archived","success")}catch{i("Failed to archive conversation","error")}},[L,i]),et=s.useCallback(async t=>{J(null),ne(null);try{await re(t),i("Conversation deleted","success")}catch{i("Failed to delete conversation","error")}},[re,i]),tt=s.useCallback(t=>{z(t),me&&xe(!1)},[z,me]),st=s.useCallback(()=>{z(""),xe(!0)},[z]),nt=()=>e.jsxs("div",{className:"chat-empty-state",children:[e.jsx(yt,{size:48,strokeWidth:1.5}),e.jsx("h2",{children:"Start a new conversation"}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>U(!0),children:[e.jsx(Pe,{size:16}),"New Chat"]})]}),Y=Ge(r?.modelProvider,r?.modelId),ze=r?.agentId===je?Y??"Fusion":r?.title||H.get(r?.agentId??"")?.name||r?.agentId||"Chat",at=!!(Y&&Y!==ze),De=H.get(r?.agentId??"")?.name||(r?.agentId===je?Y??"Fusion":r?.agentId?.slice(0,30)??"Fusion"),Oe=!!(Y&&Y!==De),it=T.length>50?`${T.slice(0,50)}…`:T;return e.jsxs("div",{className:"chat-view",children:[e.jsxs("div",{className:`chat-sidebar${K?"":" chat-sidebar--hidden"}`,children:[e.jsx("div",{className:"chat-sidebar-header",children:e.jsxs("button",{className:"btn btn-sm btn-primary",onClick:()=>U(!0),"data-testid":"chat-new-btn",children:[e.jsx(Pe,{size:14}),"New Chat"]})}),e.jsx("div",{className:"chat-sidebar-search",children:e.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[e.jsx(bt,{size:14,className:"chat-sidebar-search-icon"}),e.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:"Search conversations...",value:E,onChange:t=>S(t.target.value),"data-testid":"chat-search-input"})]})}),e.jsx("div",{className:"chat-session-list chat-sidebar-list",children:l?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"Loading..."}):P.length===0?e.jsx("div",{style:{padding:"12px",color:"var(--text-secondary)",fontSize:"13px"},children:"No conversations yet"}):P.map(t=>e.jsxs("div",{className:`chat-session-item${r?.id===t.id?" chat-session-item--active":""}`,onClick:()=>tt(t.id),onContextMenu:a=>{a.preventDefault(),ne({sessionId:t.id,x:a.clientX,y:a.clientY})},"data-testid":`chat-session-${t.id}`,children:[e.jsx("button",{className:"chat-session-delete-btn",onClick:a=>{a.stopPropagation(),J(t.id)},"data-testid":"chat-session-delete-btn","aria-label":"Delete conversation",children:e.jsx(Be,{size:14})}),e.jsx("div",{className:"chat-session-title",children:t.title||"Untitled"}),e.jsx("div",{className:"chat-session-preview",children:t.lastMessagePreview||"No messages"}),e.jsxs("div",{className:"chat-session-meta",children:[e.jsx("span",{children:H.get(t.agentId)?.name||(t.agentId===je?Ge(t.modelProvider,t.modelId)??"Fusion":t.agentId.slice(0,30))}),e.jsx("span",{children:t.updatedAt?_e(t.updatedAt):""})]})]},t.id))}),e.jsx("div",{className:"chat-sidebar-footer",children:e.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>U(!0),"data-testid":"chat-new-btn-mobile",children:[e.jsx(Pe,{size:14}),"New Chat"]})})]}),q&&e.jsxs("div",{className:"chat-session-context-menu",style:{top:q.y,left:q.x},onClick:t=>t.stopPropagation(),children:[e.jsxs("button",{onClick:()=>Ze(q.sessionId),"data-testid":"chat-context-archive",children:[e.jsx(wt,{size:14}),"Archive"]}),e.jsxs("button",{onClick:()=>{ne(null),J(q.sessionId)},"data-testid":"chat-context-delete",children:[e.jsx(Be,{size:14}),"Delete"]})]}),k&&e.jsx("div",{className:"chat-new-dialog-backdrop",onClick:()=>J(null),children:e.jsxs("div",{className:"chat-new-dialog",onClick:t=>t.stopPropagation(),children:[e.jsx("h3",{children:"Delete Conversation?"}),e.jsx("p",{style:{fontSize:"14px",color:"var(--text-secondary)",marginBottom:"16px"},children:"This action cannot be undone. All messages in this conversation will be permanently deleted."}),e.jsxs("div",{className:"chat-new-dialog-actions",children:[e.jsx("button",{className:"btn btn-sm",onClick:()=>J(null),children:"Cancel"}),e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void et(k),children:"Delete"})]})]})}),e.jsxs("div",{className:"chat-thread",children:[(r||!me)&&e.jsxs("div",{className:"chat-thread-header",children:[me&&r&&e.jsx("button",{className:"btn-icon",onClick:st,"data-testid":"chat-back-btn",children:e.jsx(Nt,{size:16})}),e.jsx(Ce,{size:16}),e.jsx("span",{className:"chat-thread-header-title",children:ze}),at&&e.jsx("span",{className:"chat-model-tag",children:Y})]}),e.jsxs("div",{className:"chat-messages",ref:v,children:[x?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"Loading messages..."}):c.length===0&&!r?nt():c.length===0&&r?e.jsx("div",{style:{color:"var(--text-secondary)",fontSize:"13px"},children:"No messages yet. Start the conversation!"}):e.jsxs(e.Fragment,{children:[c.map(t=>e.jsxs("div",{className:`chat-message chat-message--${t.role}`,"data-testid":`chat-message-${t.id}`,children:[t.role==="assistant"&&e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(Ce,{size:14}),e.jsx("span",{children:De}),Oe&&e.jsx("span",{className:"chat-model-tag",children:Y})]}),e.jsx("div",{className:"chat-message-content",children:Fe(t.content)}),Ue(t.toolCalls),t.thinkingOutput&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:t.thinkingOutput})]}),e.jsx("div",{className:"chat-message-time",children:_e(t.createdAt)})]},t.id)),b&&e.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[e.jsxs("div",{className:"chat-message-avatar",children:[e.jsx(Ce,{size:14}),e.jsx("span",{children:De}),Oe&&e.jsx("span",{className:"chat-model-tag",children:Y})]}),M?e.jsx("div",{className:"chat-message-content",children:Fe(M)}):e.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:w?"Thinking…":"Connecting…"}),Ue(X),w&&e.jsxs("details",{className:"chat-message-thinking",children:[e.jsx("summary",{children:"Thinking"}),e.jsx("pre",{className:"chat-message-thinking-content",children:w})]}),e.jsxs("div",{className:"chat-typing-indicator",children:[e.jsx("span",{}),e.jsx("span",{}),e.jsx("span",{})]})]})]}),e.jsx("div",{ref:C})]}),r&&e.jsxs("div",{className:"chat-input-area",children:[Q&&e.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:Ne?e.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):F.length===0?e.jsx("div",{className:"chat-skill-menu-empty",children:oe?"No skills found":"No skills available"}):F.map((t,a)=>e.jsxs("button",{type:"button",role:"option","aria-selected":a===ue,className:`chat-skill-menu-item${a===ue?" chat-skill-menu-item--highlighted":""}`,onMouseDown:d=>d.preventDefault(),onMouseEnter:()=>ie(a),onClick:()=>Te(t),children:[e.jsx("span",{className:"chat-skill-menu-item-name",children:t.name}),e.jsx("span",{className:"chat-skill-menu-item-description",title:t.relativePath,children:t.relativePath})]},t.id))}),e.jsxs("div",{className:"chat-input-wrapper",children:[e.jsx("textarea",{ref:f,className:"chat-input-textarea",placeholder:"Type a message...",value:A,onChange:Qe,onKeyDown:Ke,onKeyUp:We,onClick:$e,onBlur:Ye,onFocus:Xe,rows:1,"data-testid":"chat-input"}),e.jsx(kt,{agents:ge,filter:he,highlightedIndex:Se,visible:_,onSelect:Ae,position:"below"}),e.jsx(Ct,{visible:m.mentionActive&&!_,position:W,files:m.files,selectedIndex:m.selectedIndex,onSelect:t=>{const a=m.selectFile(t,A);B(a),m.dismissMention(),N(!1),f.current?.focus()},loading:m.loading}),T&&e.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[e.jsx("span",{children:`Queued: ${it}`}),e.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:pe,children:"×"})]})]}),b?e.jsx("button",{className:"chat-input-stop",onClick:V,"aria-label":"Stop generation","data-testid":"chat-stop-btn",children:e.jsx(Mt,{size:14})}):e.jsx("button",{className:"chat-input-send",onClick:()=>void ye(),disabled:!A.trim(),"data-testid":"chat-send-btn",children:e.jsx(jt,{size:16})})]})]}),Z&&e.jsx(It,{projectId:n,onClose:()=>U(!1),onCreate:Je})]})}export{Vt as ChatView};
@@ -1,4 +1,4 @@
1
- import{r,j as t}from"./vendor-react-K0fH_qHe.js";import{c as De,bo as Me,bp as de,bq as et,br as ue,s as Ue,bs as ge,bt as we,bu as xe,bv as ye,bw as tt,bx as ae,by as rt,bz as st,bA as nt,bB as at,bC as it,bD as ie,L as ee,S as lt,bE as ct,bF as ot,K as dt,T as Ae,bG as ut,E as vt,aK as mt,a3 as ft,ai as pt,R as ht}from"./index-CikysL-d.js";import"./vendor-xterm-DzcZoU0P.js";/**
1
+ import{r,j as t}from"./vendor-react-K0fH_qHe.js";import{c as De,bo as Me,bp as de,bq as et,br as ue,s as Ue,bs as ge,bt as we,bu as xe,bv as ye,bw as tt,bx as ae,by as rt,bz as st,bA as nt,bB as at,bC as it,bD as ie,L as ee,S as lt,bE as ct,bF as ot,K as dt,T as Ae,bG as ut,E as vt,aK as mt,a3 as ft,ai as pt,R as ht}from"./index-CHoVMPAA.js";import"./vendor-xterm-DzcZoU0P.js";/**
2
2
  * @license lucide-react v1.7.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{r as t,j as r}from"./vendor-react-K0fH_qHe.js";import{bV as f,bW as b,D as x,a7 as g,a2 as P,a3 as C,L as H,ae as O}from"./index-CikysL-d.js";import{F as v}from"./folder-open-BVDq27HP.js";function S({value:d,onChange:l,placeholder:y,onInputKeyDown:j,nodeId:h,localNodeId:p}){const[e,a]=t.useState({isOpen:!1,loading:!1,error:null,currentPath:"",parentPath:null,entries:[],showHidden:!1}),c=t.useCallback(async(s,n=!1)=>{a(i=>({...i,loading:!0,error:null}));try{const i=await f(s,n,h,p);a(u=>({...u,loading:!1,currentPath:i.currentPath,parentPath:i.parentPath,entries:i.entries}))}catch(i){a(u=>({...u,loading:!1,error:i instanceof Error?i.message:"Failed to browse directory"}))}},[h,p]),k=t.useCallback(()=>{a(s=>s.isOpen?{...s,isOpen:!1}:{...s,isOpen:!0})},[]);t.useEffect(()=>{e.isOpen&&!e.loading&&e.entries.length===0&&!e.error&&c(d||void 0,e.showHidden)},[e.isOpen,e.loading,e.entries.length,e.error,d,e.showHidden,c,h,p]);const o=t.useCallback(s=>{c(s,e.showHidden)},[c,e.showHidden]),w=t.useCallback(()=>{l(e.currentPath),a(s=>({...s,isOpen:!1}))},[e.currentPath,l]),N=t.useCallback(()=>{a(s=>{const n=!s.showHidden;return{...s,showHidden:n}})},[]);t.useEffect(()=>{e.isOpen&&e.currentPath&&c(e.currentPath,e.showHidden)},[e.showHidden]);const m=e.currentPath?e.currentPath.split("/").filter(Boolean):[];return r.jsxs("div",{className:"directory-picker",children:[r.jsxs("div",{className:"directory-picker-input-row",children:[r.jsx("input",{type:"text",className:"directory-picker-input",value:d,onChange:s=>l(s.target.value),onKeyDown:j,placeholder:y||"/path/to/your/project"}),r.jsxs("button",{type:"button",className:"directory-picker-browse-btn",onClick:k,"aria-label":e.isOpen?"Close directory browser":"Browse directories",children:[e.isOpen?r.jsx(v,{size:16}):r.jsx(b,{size:16}),r.jsx("span",{children:"Browse"})]})]}),e.isOpen&&r.jsxs("div",{className:"directory-picker-browser",role:"tree","aria-label":"Directory browser",children:[r.jsxs("div",{className:"directory-picker-breadcrumbs",children:[r.jsx("button",{className:"directory-picker-breadcrumb",onClick:()=>o("/"),title:"Root",children:"/"}),m.map((s,n)=>{const i="/"+m.slice(0,n+1).join("/");return r.jsxs("span",{className:"directory-picker-breadcrumb-item",children:[r.jsx(x,{size:12,className:"directory-picker-breadcrumb-sep"}),r.jsx("button",{className:"directory-picker-breadcrumb",onClick:()=>o(i),title:i,children:s})]},i)})]}),r.jsxs("div",{className:"directory-picker-toolbar",children:[e.parentPath&&r.jsxs("button",{className:"directory-picker-up-btn",onClick:()=>o(e.parentPath),"aria-label":"Go to parent directory",title:"Parent directory",children:[r.jsx(g,{size:14}),r.jsx("span",{children:"Up"})]}),r.jsxs("button",{className:"directory-picker-hidden-toggle",onClick:N,"aria-label":e.showHidden?"Hide hidden directories":"Show hidden directories",title:e.showHidden?"Hide hidden":"Show hidden",children:[e.showHidden?r.jsx(P,{size:14}):r.jsx(C,{size:14}),r.jsx("span",{children:e.showHidden?"Hide hidden":"Show hidden"})]})]}),e.loading?r.jsxs("div",{className:"directory-picker-loading",children:[r.jsx(H,{size:20,className:"animate-spin"}),r.jsx("span",{children:"Loading…"})]}):e.error?r.jsxs("div",{className:"directory-picker-error",children:[r.jsx(O,{size:16}),r.jsx("span",{children:e.error})]}):r.jsx("div",{className:"directory-picker-entries",children:e.entries.length===0?r.jsx("div",{className:"directory-picker-empty",children:"No subdirectories"}):e.entries.map(s=>r.jsxs("button",{className:"directory-picker-entry",onClick:()=>o(s.path),role:"treeitem",title:s.path,children:[r.jsx(b,{size:16,className:"directory-picker-entry-icon"}),r.jsx("span",{className:"directory-picker-entry-name",children:s.name}),s.hasChildren&&r.jsx(x,{size:14,className:"directory-picker-entry-arrow"})]},s.path))}),r.jsxs("div",{className:"directory-picker-actions",children:[r.jsx("span",{className:"directory-picker-selected-path",title:e.currentPath,children:e.currentPath}),r.jsx("button",{type:"button",className:"btn btn-primary directory-picker-select-btn",onClick:w,children:"Select"})]})]})]})}export{S as D};
1
+ import{r as t,j as r}from"./vendor-react-K0fH_qHe.js";import{bV as f,bW as b,D as x,a7 as g,a2 as P,a3 as C,L as H,ae as O}from"./index-CHoVMPAA.js";import{F as v}from"./folder-open-J7yPbaCt.js";function S({value:d,onChange:l,placeholder:y,onInputKeyDown:j,nodeId:h,localNodeId:p}){const[e,a]=t.useState({isOpen:!1,loading:!1,error:null,currentPath:"",parentPath:null,entries:[],showHidden:!1}),c=t.useCallback(async(s,n=!1)=>{a(i=>({...i,loading:!0,error:null}));try{const i=await f(s,n,h,p);a(u=>({...u,loading:!1,currentPath:i.currentPath,parentPath:i.parentPath,entries:i.entries}))}catch(i){a(u=>({...u,loading:!1,error:i instanceof Error?i.message:"Failed to browse directory"}))}},[h,p]),k=t.useCallback(()=>{a(s=>s.isOpen?{...s,isOpen:!1}:{...s,isOpen:!0})},[]);t.useEffect(()=>{e.isOpen&&!e.loading&&e.entries.length===0&&!e.error&&c(d||void 0,e.showHidden)},[e.isOpen,e.loading,e.entries.length,e.error,d,e.showHidden,c,h,p]);const o=t.useCallback(s=>{c(s,e.showHidden)},[c,e.showHidden]),w=t.useCallback(()=>{l(e.currentPath),a(s=>({...s,isOpen:!1}))},[e.currentPath,l]),N=t.useCallback(()=>{a(s=>{const n=!s.showHidden;return{...s,showHidden:n}})},[]);t.useEffect(()=>{e.isOpen&&e.currentPath&&c(e.currentPath,e.showHidden)},[e.showHidden]);const m=e.currentPath?e.currentPath.split("/").filter(Boolean):[];return r.jsxs("div",{className:"directory-picker",children:[r.jsxs("div",{className:"directory-picker-input-row",children:[r.jsx("input",{type:"text",className:"directory-picker-input",value:d,onChange:s=>l(s.target.value),onKeyDown:j,placeholder:y||"/path/to/your/project"}),r.jsxs("button",{type:"button",className:"directory-picker-browse-btn",onClick:k,"aria-label":e.isOpen?"Close directory browser":"Browse directories",children:[e.isOpen?r.jsx(v,{size:16}):r.jsx(b,{size:16}),r.jsx("span",{children:"Browse"})]})]}),e.isOpen&&r.jsxs("div",{className:"directory-picker-browser",role:"tree","aria-label":"Directory browser",children:[r.jsxs("div",{className:"directory-picker-breadcrumbs",children:[r.jsx("button",{className:"directory-picker-breadcrumb",onClick:()=>o("/"),title:"Root",children:"/"}),m.map((s,n)=>{const i="/"+m.slice(0,n+1).join("/");return r.jsxs("span",{className:"directory-picker-breadcrumb-item",children:[r.jsx(x,{size:12,className:"directory-picker-breadcrumb-sep"}),r.jsx("button",{className:"directory-picker-breadcrumb",onClick:()=>o(i),title:i,children:s})]},i)})]}),r.jsxs("div",{className:"directory-picker-toolbar",children:[e.parentPath&&r.jsxs("button",{className:"directory-picker-up-btn",onClick:()=>o(e.parentPath),"aria-label":"Go to parent directory",title:"Parent directory",children:[r.jsx(g,{size:14}),r.jsx("span",{children:"Up"})]}),r.jsxs("button",{className:"directory-picker-hidden-toggle",onClick:N,"aria-label":e.showHidden?"Hide hidden directories":"Show hidden directories",title:e.showHidden?"Hide hidden":"Show hidden",children:[e.showHidden?r.jsx(P,{size:14}):r.jsx(C,{size:14}),r.jsx("span",{children:e.showHidden?"Hide hidden":"Show hidden"})]})]}),e.loading?r.jsxs("div",{className:"directory-picker-loading",children:[r.jsx(H,{size:20,className:"animate-spin"}),r.jsx("span",{children:"Loading…"})]}):e.error?r.jsxs("div",{className:"directory-picker-error",children:[r.jsx(O,{size:16}),r.jsx("span",{children:e.error})]}):r.jsx("div",{className:"directory-picker-entries",children:e.entries.length===0?r.jsx("div",{className:"directory-picker-empty",children:"No subdirectories"}):e.entries.map(s=>r.jsxs("button",{className:"directory-picker-entry",onClick:()=>o(s.path),role:"treeitem",title:s.path,children:[r.jsx(b,{size:16,className:"directory-picker-entry-icon"}),r.jsx("span",{className:"directory-picker-entry-name",children:s.name}),s.hasChildren&&r.jsx(x,{size:14,className:"directory-picker-entry-arrow"})]},s.path))}),r.jsxs("div",{className:"directory-picker-actions",children:[r.jsx("span",{className:"directory-picker-selected-path",title:e.currentPath,children:e.currentPath}),r.jsx("button",{type:"button",className:"btn btn-primary directory-picker-select-btn",onClick:w,children:"Select"})]})]})]})}export{S as D};
@@ -1 +1 @@
1
- .documents-view{display:flex;flex-direction:column;height:100%;min-height:0}.documents-view-header{padding:var(--space-lg);border-bottom:1px solid var(--border);background:var(--surface)}.documents-view-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.documents-view-title{display:flex;align-items:center;gap:var(--space-sm);font-size:18px;font-weight:600;margin:0;color:var(--text)}.documents-view-title svg{color:var(--todo)}.documents-view-count{font-size:14px;color:var(--text-muted)}.documents-tab-bar{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.documents-tab{display:inline-flex;align-items:center;gap:var(--space-sm);border:1px solid var(--border);background:var(--surface);color:var(--text-muted)}.documents-tab:hover{background:var(--card-hover);color:var(--text)}.documents-tab.active{color:var(--todo);border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.documents-tab:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;padding:0 var(--space-xs);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--text) 10%,transparent);color:inherit;font-size:11px;font-family:var(--font-mono)}.documents-hidden-toggle{align-self:flex-start;margin-bottom:var(--space-sm)}.documents-hidden-toggle[aria-pressed=true]{color:var(--todo);border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.documents-search{position:relative;display:flex;align-items:center}.documents-search-icon{position:absolute;left:var(--space-sm);color:var(--text-muted);pointer-events:none}.documents-search-input{width:100%;max-width:420px;padding:var(--space-sm) var(--space-sm) var(--space-sm) calc(var(--space-sm) + 24px);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);color:var(--text);font-size:14px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.documents-search-input:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.documents-search-input::placeholder{color:var(--text-dim)}.documents-search-clear{position:absolute;right:var(--space-sm);display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-muted);cursor:pointer;padding:var(--space-xs);border-radius:var(--radius-sm);transition:color var(--transition-fast),background var(--transition-fast)}.documents-search-clear:hover{color:var(--text);background:var(--card-hover)}.documents-search-clear:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-view-content{flex:1;min-height:0;overflow:auto;padding:var(--space-lg)}.documents-view-loading,.documents-view-empty,.documents-view-error{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--space-2xl);color:var(--text-muted);min-height:200px}.documents-view-empty-icon{margin-bottom:var(--space-md);color:var(--text-dim)}.documents-view-empty-hint{font-size:13px;color:var(--text-dim);margin-top:var(--space-xs)}.documents-view-error{color:var(--color-error)}.documents-view-error .btn{margin-top:var(--space-md)}.documents-project-layout{display:grid;grid-template-columns:minmax(280px,320px) minmax(0,1fr);min-height:0;height:100%;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--card)}.documents-project-layout--mobile{grid-template-columns:1fr}.documents-view-sidebar{width:100%;min-width:0;overflow-y:auto;border-right:1px solid var(--border);background:var(--surface)}.markdown-file-list{margin:0;padding:0;list-style:none}.markdown-file-list-item{margin:0}.markdown-file-item{width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-xs);border:none;border-left:3px solid transparent;border-bottom:1px solid var(--border);padding:var(--space-md);background:transparent;color:var(--text);text-align:left;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.markdown-file-list-item:last-child .markdown-file-item{border-bottom:none}.markdown-file-item:hover{background:var(--card-hover)}.markdown-file-item:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.markdown-file-item--selected{border-left-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.markdown-file-item-name{font-size:13px;font-weight:600;color:var(--text)}.markdown-file-item-path{font-size:12px;color:var(--text-muted);font-family:var(--font-mono);word-break:break-word}.markdown-file-item-meta{font-size:12px;color:var(--text-dim)}.documents-view-main{min-width:0;overflow-y:auto;background:var(--card);padding:var(--space-lg)}.documents-mobile-back{margin-bottom:var(--space-md)}.documents-content-viewer{display:flex;flex-direction:column;gap:var(--space-md);margin:0 auto;width:min(100%,880px)}.documents-content-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.documents-file-path-header{margin:0;padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-muted);font-family:var(--font-mono);font-size:12px;word-break:break-word;flex:1}.documents-content-viewer-text,.documents-content-markdown{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-md);min-height:220px}.documents-content-state{margin:0;color:var(--text-muted)}.documents-content-state--error{color:var(--color-error)}.documents-task-list-wrap{width:min(100%,960px);margin:0 auto}.documents-view-list{display:flex;flex-direction:column;gap:var(--space-md)}.documents-group{border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--card)}.documents-group-header{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--surface);border-bottom:1px solid var(--border)}.documents-group-toggle-btn{display:flex;align-items:center;gap:var(--space-sm);min-width:0;border:none;background:none;color:var(--text);text-align:left;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast);min-height:36px}.documents-group-toggle-btn:hover{background:var(--card-hover)}.documents-group-toggle-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-group-toggle{display:flex;align-items:center;justify-content:center;color:var(--text-muted);flex-shrink:0}.documents-group-task-id{font-family:var(--font-mono);font-size:12px;color:var(--text-muted);flex-shrink:0}.documents-group-task-title{font-size:14px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.documents-group-count{font-size:12px;color:var(--text-dim);justify-self:end}.documents-group-task-link{border:1px solid var(--border);background:var(--card);color:var(--text-muted);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--transition-fast),color var(--transition-fast),background var(--transition-fast);min-height:36px}.documents-group-task-link:hover{border-color:var(--todo);color:var(--todo);background:color-mix(in srgb,var(--todo) 10%,transparent)}.documents-group-task-link:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-group-content{padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.document-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;transition:border-color var(--transition-fast)}.document-card:hover{border-color:var(--text-dim)}.document-card-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-sm) var(--space-md);background:var(--surface);border-bottom:1px solid var(--border)}.document-card-key{display:flex;align-items:center;gap:var(--space-xs);color:var(--text)}.document-card-key svg{color:var(--text-muted);flex-shrink:0}.document-card-key-text{font-family:var(--font-mono);font-size:13px;font-weight:500}.document-card-revision-badge{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);background:var(--surface);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);border:1px solid var(--border)}.document-card-expand-btn{padding:var(--space-xs);color:var(--text-muted)}.document-card-expand-btn:hover{color:var(--text)}.document-card-actions{display:flex;align-items:center;gap:var(--space-xs)}.document-mode-toggle{padding:var(--space-xs) var(--space-sm);font-size:11px;font-weight:500;color:var(--text-muted);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:var(--transition-fast);line-height:1}.document-mode-toggle:hover{background:var(--card-hover);color:var(--text)}.document-mode-toggle:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.document-mode-toggle[aria-pressed=true]{background:var(--accent);color:var(--text-on-accent);border-color:var(--accent)}.document-card-content-header{display:flex;justify-content:flex-end;margin-bottom:var(--space-sm)}.document-card-meta{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-md);font-size:12px;color:var(--text-dim);border-bottom:1px solid var(--border)}.document-card-separator{color:var(--border)}.document-card-content{padding:var(--space-md)}.document-card-preview{margin:0;font-size:13px;color:var(--text-muted);line-height:1.5;word-break:break-word}.document-card-preview-truncated{margin:0;font-size:13px;color:var(--text-dim)}.document-card-content--expanded .document-card-preview,.document-card-content--expanded .document-card-preview-truncated{display:none}.document-card-content-text{margin:0;font-size:13px;color:var(--text);line-height:1.5;white-space:pre-wrap;word-break:break-word;font-family:var(--font-primary)}@media(max-width:768px){.agent-board{grid-template-columns:1fr}.agent-board-actions .btn,.agent-card-actions .btn{min-height:calc(var(--space-2xl) + var(--space-xs))}.agent-card-details-btn{margin-left:auto}.agent-controls-panel{left:var(--space-md);right:var(--space-md);top:calc(var(--header-height) + var(--space-sm));width:auto;max-height:calc(100dvh - var(--header-height) - var(--space-2xl));overflow-y:auto}.agent-controls{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.agent-controls-filters{flex-direction:column;align-items:stretch;width:100%;padding:var(--space-sm)}.agent-controls-actions{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-controls-actions .btn{width:100%;min-height:calc(var(--space-2xl) + var(--space-xs))}.agent-controls-panel .agent-controls-actions{justify-content:flex-start}.agent-state-filter,.agent-system-filter{width:100%;min-height:calc(var(--space-2xl) + var(--space-xs))}.agent-state-filter-select{width:100%}.agent-heartbeat-control{align-items:flex-start}.agent-heartbeat-select{min-height:calc(var(--space-2xl) + var(--space-xs))}.heartbeat-multiplier-controls{flex-direction:column;align-items:stretch}.heartbeat-multiplier-value{text-align:left}.agent-global-controls{padding:var(--space-sm)}.heartbeat-multiplier-label{margin-bottom:var(--space-sm)}.agents-view-content{padding:var(--space-md)}.skills-view-header{padding:var(--space-sm) var(--space-md);flex-wrap:wrap}.skills-view-title h2{font-size:16px}.skills-view-count{font-size:12px}.skills-view-actions{min-height:36px;display:flex;align-items:center}.skills-view-actions .btn{min-height:36px}.skills-view-content{padding:var(--space-md)}.skills-view-section{margin-bottom:var(--space-md)}.skills-view-section-title{font-size:13px}.skills-view-search .form-input{max-width:none;width:100%}.skills-view-grid{grid-template-columns:1fr}.skills-view-item{flex-wrap:wrap;gap:var(--space-sm);padding:var(--space-md);min-height:36px}.skills-view-item-info{width:100%}.skills-view-item-toggle{padding:var(--space-sm)}.skills-view-toggle-slider{min-width:40px;min-height:22px}.skills-view-card{padding:var(--space-sm)}.skills-view-card-title{font-size:13px}.skills-view-card-description{font-size:12px}.skills-view-empty,.skills-view-error{padding:var(--space-lg)}.skills-view-loading{padding:var(--space-md)}.skills-view-item--selected{border-color:var(--todo)}.skills-view-detail{padding:var(--space-md);border-left-width:2px}.skills-view-detail-content{font-size:11px;max-height:calc(60dvh - 200px);-webkit-overflow-scrolling:touch}.skills-view-detail-close{min-height:36px;min-width:36px}.agent-tree__indent--1{padding-left:var(--space-lg)}.agent-tree__indent--2{padding-left:calc(var(--space-lg) * 2)}.agent-tree__indent--3{padding-left:calc(var(--space-lg) * 3)}.agent-tree__indent--4{padding-left:calc(var(--space-lg) * 4)}.agent-tree__toggle{min-width:calc(var(--space-lg) * 2 + var(--space-xs));min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.rating-summary-card{padding:16px}.rating-average{font-size:28px}.category-breakdown{grid-template-columns:1fr}.rating-history{max-height:250px}.documents-view-header{padding:var(--space-md)}.documents-view-title-row{flex-direction:column;align-items:flex-start;gap:var(--space-sm)}.documents-view-title{font-size:16px}.documents-tab-bar{width:100%}.documents-tab{flex:1;justify-content:center;min-height:44px}.documents-hidden-toggle{width:100%;justify-content:center;min-height:44px}.documents-search-input{max-width:none;width:100%}.documents-view-content{padding:var(--space-md)}.documents-project-layout,.documents-project-layout--mobile{display:flex;flex-direction:column;min-height:0}.documents-view-sidebar{border-right:none;border-bottom:1px solid var(--border);max-height:none}.markdown-file-item{min-height:44px;padding:var(--space-sm) var(--space-md)}.documents-view-main{padding:var(--space-md)}.documents-content-viewer{width:100%}.documents-content-viewer-text{min-height:160px}.documents-group-header{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"toggle count" "link link";row-gap:var(--space-xs)}.documents-group-toggle-btn{grid-area:toggle}.documents-group-count{grid-area:count;justify-self:end}.documents-group-task-link{grid-area:link;width:100%;justify-self:stretch;min-height:44px}.documents-group-task-title{max-width:180px}.document-card-key-text{font-size:12px}}
1
+ .documents-view{display:flex;flex-direction:column;height:100%;min-height:0}.documents-view-header{padding:var(--space-lg);border-bottom:1px solid var(--border);background:var(--surface)}.documents-view-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.documents-view-title{display:flex;align-items:center;gap:var(--space-sm);font-size:18px;font-weight:600;margin:0;color:var(--text)}.documents-view-title svg{color:var(--todo)}.documents-view-count{font-size:14px;color:var(--text-muted)}.documents-tab-bar{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.documents-tab{display:inline-flex;align-items:center;gap:var(--space-sm);border:1px solid var(--border);background:var(--surface);color:var(--text-muted)}.documents-tab:hover{background:var(--card-hover);color:var(--text)}.documents-tab.active{color:var(--todo);border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.documents-tab:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;padding:0 var(--space-xs);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--text) 10%,transparent);color:inherit;font-size:11px;font-family:var(--font-mono)}.documents-hidden-toggle{align-self:flex-start;margin-bottom:var(--space-sm)}.documents-hidden-toggle[aria-pressed=true]{color:var(--todo);border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.documents-search{position:relative;display:flex;align-items:center}.documents-search-icon{position:absolute;left:var(--space-sm);color:var(--text-muted);pointer-events:none}.documents-search-input{width:100%;max-width:420px;padding:var(--space-sm) var(--space-sm) var(--space-sm) calc(var(--space-sm) + 24px);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);color:var(--text);font-size:14px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.documents-search-input:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.documents-search-input::placeholder{color:var(--text-dim)}.documents-search-clear{position:absolute;right:var(--space-sm);display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-muted);cursor:pointer;padding:var(--space-xs);border-radius:var(--radius-sm);transition:color var(--transition-fast),background var(--transition-fast)}.documents-search-clear:hover{color:var(--text);background:var(--card-hover)}.documents-search-clear:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-view-content{flex:1;min-height:0;overflow:auto;padding:var(--space-lg)}.documents-view-loading,.documents-view-empty,.documents-view-error{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--space-2xl);color:var(--text-muted);min-height:200px}.documents-view-empty-icon{margin-bottom:var(--space-md);color:var(--text-dim)}.documents-view-empty-hint{font-size:13px;color:var(--text-dim);margin-top:var(--space-xs)}.documents-view-error{color:var(--color-error)}.documents-view-error .btn{margin-top:var(--space-md)}.documents-project-layout{display:grid;grid-template-columns:minmax(280px,320px) minmax(0,1fr);min-height:0;height:100%;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--card)}.documents-project-layout--mobile{grid-template-columns:1fr}.documents-view-sidebar{width:100%;min-width:0;overflow-y:auto;border-right:1px solid var(--border);background:var(--surface)}.markdown-file-list{margin:0;padding:0;list-style:none}.markdown-file-list-item{margin:0}.markdown-file-item{width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-xs);border:none;border-left:3px solid transparent;border-bottom:1px solid var(--border);padding:var(--space-md);background:transparent;color:var(--text);text-align:left;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.markdown-file-list-item:last-child .markdown-file-item{border-bottom:none}.markdown-file-item:hover{background:var(--card-hover)}.markdown-file-item:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.markdown-file-item--selected{border-left-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.markdown-file-item-name{font-size:13px;font-weight:600;color:var(--text)}.markdown-file-item-path{font-size:12px;color:var(--text-muted);font-family:var(--font-mono);word-break:break-word}.markdown-file-item-meta{font-size:12px;color:var(--text-dim)}.documents-view-main{min-width:0;overflow-y:auto;background:var(--card);padding:var(--space-lg)}.documents-mobile-back{margin-bottom:var(--space-md)}.documents-content-viewer{display:flex;flex-direction:column;gap:var(--space-md);margin:0 auto;width:min(100%,880px)}.documents-content-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.documents-file-path-header{margin:0;padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-muted);font-family:var(--font-mono);font-size:12px;word-break:break-word;flex:1}.documents-content-viewer-text,.documents-content-markdown{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-md);min-height:220px}.documents-content-state{margin:0;color:var(--text-muted)}.documents-content-state--error{color:var(--color-error)}.documents-task-list-wrap{width:min(100%,960px);margin:0 auto}.documents-view-list{display:flex;flex-direction:column;gap:var(--space-md)}.documents-group{border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--card)}.documents-group-header{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--surface);border-bottom:1px solid var(--border)}.documents-group-toggle-btn{display:flex;align-items:center;gap:var(--space-sm);min-width:0;border:none;background:none;color:var(--text);text-align:left;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast);min-height:36px}.documents-group-toggle-btn:hover{background:var(--card-hover)}.documents-group-toggle-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-group-toggle{display:flex;align-items:center;justify-content:center;color:var(--text-muted);flex-shrink:0}.documents-group-task-id{font-family:var(--font-mono);font-size:12px;color:var(--text-muted);flex-shrink:0}.documents-group-task-title{font-size:14px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.documents-group-count{font-size:12px;color:var(--text-dim);justify-self:end}.documents-group-task-link{border:1px solid var(--border);background:var(--card);color:var(--text-muted);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--transition-fast),color var(--transition-fast),background var(--transition-fast);min-height:36px}.documents-group-task-link:hover{border-color:var(--todo);color:var(--todo);background:color-mix(in srgb,var(--todo) 10%,transparent)}.documents-group-task-link:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-group-content{padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.document-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;transition:border-color var(--transition-fast)}.document-card:hover{border-color:var(--text-dim)}.document-card-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-sm) var(--space-md);background:var(--surface);border-bottom:1px solid var(--border)}.document-card-key{display:flex;align-items:center;gap:var(--space-xs);color:var(--text)}.document-card-key svg{color:var(--text-muted);flex-shrink:0}.document-card-key-text{font-family:var(--font-mono);font-size:13px;font-weight:500}.document-card-revision-badge{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);background:var(--surface);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);border:1px solid var(--border)}.document-card-expand-btn{padding:var(--space-xs);color:var(--text-muted)}.document-card-expand-btn:hover{color:var(--text)}.document-card-actions{display:flex;align-items:center;gap:var(--space-xs)}.document-mode-toggle{padding:var(--space-xs) var(--space-sm);font-size:11px;font-weight:500;color:var(--text-muted);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:var(--transition-fast);line-height:1}.document-mode-toggle:hover{background:var(--card-hover);color:var(--text)}.document-mode-toggle:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.document-mode-toggle[aria-pressed=true]{background:var(--accent);color:var(--text-on-accent);border-color:var(--accent)}.document-card-content-header{display:flex;justify-content:flex-end;margin-bottom:var(--space-sm)}.document-card-meta{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-md);font-size:12px;color:var(--text-dim);border-bottom:1px solid var(--border)}.document-card-separator{color:var(--border)}.document-card-content{padding:var(--space-md)}.document-card-preview{margin:0;font-size:13px;color:var(--text-muted);line-height:1.5;word-break:break-word}.document-card-preview-truncated{margin:0;font-size:13px;color:var(--text-dim)}.document-card-content--expanded .document-card-preview,.document-card-content--expanded .document-card-preview-truncated{display:none}.document-card-content-text{margin:0;font-size:13px;color:var(--text);line-height:1.5;white-space:pre-wrap;word-break:break-word;font-family:var(--font-primary)}@media(max-width:768px){.agent-board{grid-template-columns:1fr}.agent-board-actions .btn,.agent-card-actions .btn{min-height:calc(var(--space-2xl) + var(--space-xs))}.agent-card-details-btn{margin-left:auto}.agent-controls-panel{left:var(--space-md);right:var(--space-md);top:calc(var(--header-height) + var(--space-sm));width:auto;max-height:calc(100dvh - var(--header-height) - var(--space-2xl));overflow-y:auto}.agent-controls{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.agent-controls-filters{flex-direction:column;align-items:stretch;width:100%;padding:var(--space-sm)}.agent-controls-actions{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-controls-actions .btn{width:100%;min-height:calc(var(--space-2xl) + var(--space-xs))}.agent-controls-panel .agent-controls-actions{justify-content:flex-start}.agent-state-filter,.agent-system-filter{width:100%;min-height:calc(var(--space-2xl) + var(--space-xs))}.agent-state-filter-select{width:100%}.agent-heartbeat-control{align-items:flex-start}.agent-heartbeat-select{min-height:calc(var(--space-2xl) + var(--space-xs))}.heartbeat-multiplier-controls{flex-direction:column;align-items:stretch}.heartbeat-multiplier-value{text-align:left}.agent-global-controls{padding:var(--space-sm)}.heartbeat-multiplier-label{margin-bottom:var(--space-sm)}.agents-view-content{padding:var(--space-md)}.skills-view-header{padding:var(--space-sm) var(--space-md);flex-wrap:wrap}.skills-view-title h2{font-size:16px}.skills-view-count{font-size:12px}.skills-view-actions{min-height:36px;display:flex;align-items:center}.skills-view-actions .btn{min-height:36px}.skills-view-content{padding:var(--space-md)}.skills-view-section{margin-bottom:var(--space-md)}.skills-view-section-title{font-size:13px}.skills-view-search .form-input{max-width:none;width:100%}.skills-view-grid{grid-template-columns:1fr}.skills-view-item{flex-wrap:wrap;gap:var(--space-sm);padding:var(--space-md);min-height:36px}.skills-view-item-info{width:100%}.skills-view-item-toggle{padding:var(--space-sm)}.skills-view-toggle-slider{min-width:40px;min-height:22px}.skills-view-card{padding:var(--space-sm)}.skills-view-card-title{font-size:13px}.skills-view-card-description{font-size:12px}.skills-view-empty,.skills-view-error{padding:var(--space-lg)}.skills-view-loading{padding:var(--space-md)}.skills-view-item--selected{border-color:var(--todo)}.skills-view-detail{padding:var(--space-md);border-left-width:2px}.skills-view-detail-content{font-size:11px;max-height:calc(60dvh - 200px);-webkit-overflow-scrolling:touch}.skills-view-detail-close{min-height:36px;min-width:36px}.agent-tree__indent--1{padding-left:var(--space-lg)}.agent-tree__indent--2{padding-left:calc(var(--space-lg) * 2)}.agent-tree__indent--3{padding-left:calc(var(--space-lg) * 3)}.agent-tree__indent--4{padding-left:calc(var(--space-lg) * 4)}.agent-tree__toggle{min-width:calc(var(--space-lg) * 2 + var(--space-xs));min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.rating-summary-card{padding:16px}.rating-average{font-size:28px}.category-breakdown{grid-template-columns:1fr}.rating-history{max-height:250px}.documents-view-header{padding:var(--space-md)}.documents-view-title-row{flex-direction:column;align-items:flex-start;gap:var(--space-sm)}.documents-view-title{font-size:16px}.documents-tab-bar{width:100%}.documents-tab{flex:1;justify-content:center;min-height:44px}.documents-hidden-toggle{width:100%;justify-content:center;min-height:44px}.documents-search-input{max-width:none;width:100%}.documents-view-content{padding:var(--space-md)}.documents-project-layout,.documents-project-layout--mobile{display:flex;flex-direction:column;min-height:0}.documents-view-sidebar{border-right:none;border-bottom:1px solid var(--border);max-height:none}.markdown-file-item{min-height:44px;padding:var(--space-sm) var(--space-md)}.documents-view-main{padding:var(--space-md)}.documents-content-viewer{width:100%}.documents-content-viewer-text{min-height:160px}.documents-group-header{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"toggle count" "link link";row-gap:var(--space-xs)}.documents-group-toggle-btn{grid-area:toggle}.documents-group-count{grid-area:count;justify-self:end}.documents-group-task-link{grid-area:link;width:100%;justify-self:stretch;min-height:44px}.documents-group-task-title{max-width:180px}.document-card-key-text{font-size:12px}.document-mode-toggle{min-width:36px;min-height:36px}}
@@ -1 +1 @@
1
- import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{Y as oe,$ as G,a0 as le,a1 as ie,F as z,a2 as de,a3 as ue,S as me,X as he,R as pe,a4 as fe,a5 as W,a6 as V,K as X,D as je,a7 as xe}from"./index-CikysL-d.js";import"./vendor-xterm-DzcZoU0P.js";function we(n){const{projectId:c,searchQuery:u,includeProjectFiles:a=!0}=n??{},[x,l]=s.useState([]),[h,i]=s.useState([]),[o,p]=s.useState(!0),[k,b]=s.useState(null),f=s.useRef(null),g=s.useRef(!1),m=s.useRef(null),j=s.useCallback(async()=>{f.current&&f.current.abort();const C=new AbortController;f.current=C;const E=!g.current;E&&p(!0),b(null);const L=oe(u?{q:u}:void 0,c),y=a?G(c):Promise.resolve({files:[]}),[v,F]=await Promise.allSettled([L,y]);if(C.signal.aborted)return;let R=null;if(v.status==="fulfilled"?(l(v.value),g.current=!0):R=v.reason instanceof Error?v.reason.message:String(v.reason),F.status==="fulfilled"){const M=F.value.files,P=u?.trim().toLowerCase(),T=P?M.filter(N=>N.name.toLowerCase().includes(P)||N.path.toLowerCase().includes(P)):M;i(T)}b(R),E&&p(!1)},[a,c,u]);return s.useEffect(()=>(m.current&&clearTimeout(m.current),m.current=setTimeout(()=>{j()},300),()=>{m.current&&clearTimeout(m.current)}),[j]),s.useEffect(()=>(j(),()=>{f.current&&f.current.abort()}),[]),{documents:x,projectFiles:h,loading:o,error:k,refresh:j}}function ke(n,c){const[u,a]=s.useState([]),[x,l]=s.useState(!0),[h,i]=s.useState(null),o=s.useRef(null),p=s.useRef(!1),k=c?.showHidden??!1,b=s.useCallback(async f=>{o.current&&o.current.abort();const g=new AbortController;o.current=g;const m=!p.current;m&&l(!0),i(null);try{const j=await G(n,{showHidden:f?.showHidden??k});if(g.signal.aborted)return;a(j.files),p.current=!0}catch(j){if(g.signal.aborted)return;i(j instanceof Error?j.message:String(j))}finally{!g.signal.aborted&&m&&l(!1)}},[n,k]);return s.useEffect(()=>(p.current=!1,b({showHidden:k}),()=>{o.current&&o.current.abort()}),[b,k]),{files:u,loading:x,error:h,refresh:b}}const be=768;function Y(n){return n?new Date(n).toLocaleString():""}function ge(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(n>=10*1024?0:1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function ve(n,c=200){return n.length<=c?n:`${n.substring(0,c)}…`}function Ne({document:n,renderMarkdown:c,onToggleMarkdown:u}){const[a,x]=s.useState(!1),l=ve(n.content),h=n.content.length>200;return e.jsxs("div",{className:"document-card",children:[e.jsxs("div",{className:"document-card-header",children:[e.jsxs("div",{className:"document-card-key",children:[e.jsx(z,{size:14}),e.jsx("span",{className:"document-card-key-text",children:n.key}),e.jsxs("span",{className:"document-card-revision-badge",children:["v",n.revision]})]}),e.jsx("div",{className:"document-card-actions",children:e.jsx("button",{className:"btn btn-sm document-card-expand-btn",onClick:()=>x(i=>!i),title:a?"Collapse":"Expand","aria-label":a?"Collapse content":"Expand content",children:a?e.jsx(xe,{size:14}):e.jsx(X,{size:14})})})]}),e.jsxs("div",{className:"document-card-meta",children:[e.jsx("span",{className:"document-card-author",children:n.author}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{className:"document-card-date",children:Y(n.updatedAt)})]}),e.jsxs("div",{className:`document-card-content${a?" document-card-content--expanded":""}`,children:[a?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"document-card-content-header",children:e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:u,"aria-label":c?"Switch to plain text":"Switch to markdown","aria-pressed":c,title:c?"Switch to plain text":"Switch to markdown",children:c?"Markdown":"Plain"})}),c?e.jsx("div",{className:"document-card-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(W,{remarkPlugins:[V],children:n.content})})}):e.jsx("pre",{className:"document-card-content-text",children:n.content})]}):e.jsx("p",{className:"document-card-preview",children:l}),h&&!a&&e.jsx("p",{className:"document-card-preview-truncated",children:"…"})]})]})}function Se({taskId:n,taskTitle:c,documents:u,onOpenTask:a,renderMarkdownStates:x,onToggleMarkdown:l}){const[h,i]=s.useState(!1);return e.jsxs("div",{className:"documents-group",children:[e.jsxs("div",{className:"documents-group-header",children:[e.jsxs("button",{className:"documents-group-toggle-btn",onClick:()=>i(o=>!o),"aria-expanded":h,"aria-label":`${h?"Collapse":"Expand"} documents for task ${n}`,children:[e.jsx("span",{className:"documents-group-toggle","aria-hidden":"true",children:h?e.jsx(X,{size:16}):e.jsx(je,{size:16})}),e.jsx("span",{className:"documents-group-task-id",children:n}),e.jsx("span",{className:"documents-group-task-title",children:c||"Untitled"})]}),e.jsxs("span",{className:"documents-group-count",children:[u.length," doc",u.length!==1?"s":""]}),e.jsx("button",{className:"documents-group-task-link",onClick:()=>a(n),"aria-label":`Open task ${n}: ${c||"Untitled"}`,children:"Open task"})]}),h&&e.jsx("div",{className:"documents-group-content",children:u.map(o=>e.jsx(Ne,{document:o,renderMarkdown:x.get(o.id)??!1,onToggleMarkdown:()=>l(o.id)},o.id))})]})}function ye({projectId:n,addToast:c,onOpenDetail:u}){const[a,x]=s.useState("project"),[l,h]=s.useState(""),[i,o]=s.useState(null),[p,k]=s.useState(!1),[b,f]=s.useState(null),[g,m]=s.useState(!1),[j,C]=s.useState(null),[E,L]=s.useState(!1),y=s.useRef(0),v=s.useRef(!1),[F,R]=s.useState(!1),[M,P]=s.useState(new Map),T=a==="tasks"?l.trim():"",{documents:N,loading:D,error:_,refresh:B}=we({projectId:n,searchQuery:T||void 0,includeProjectFiles:!1}),{files:S,loading:$,error:J,refresh:O}=ke(n,{showHidden:p});s.useEffect(()=>{const t=()=>{L(window.innerWidth<=be)};return t(),window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t)}},[]),s.useEffect(()=>{v.current=!1,x("project"),o(null),k(!1),f(null),C(null),m(!1),R(!1),P(new Map)},[n]),s.useEffect(()=>{v.current||D||$||(S.length>0?x("project"):N.length>0&&x("tasks"),v.current=!0)},[N.length,D,S.length,$]);const H=s.useMemo(()=>{const t=new Map;for(const r of N){const d=t.get(r.taskId)||[];t.set(r.taskId,[...d,r])}return Array.from(t.entries()).map(([r,d])=>{const w=[...d].sort((re,ce)=>ce.updatedAt.localeCompare(re.updatedAt));return{taskId:r,taskTitle:w[0]?.taskTitle,documents:w,latestUpdated:w[0]?.updatedAt??""}}).sort((r,d)=>d.latestUpdated.localeCompare(r.latestUpdated))},[N]),A=s.useMemo(()=>{const t=l.trim().toLowerCase();return t?S.filter(r=>{const d=r.path.toLowerCase(),w=r.name.toLowerCase();return d.includes(t)||w.includes(t)}):S},[S,l]);s.useEffect(()=>{if(!i)return;S.some(r=>r.path===i.path)||(o(null),f(null),C(null),m(!1))},[S,i]);const Z=s.useCallback(t=>{h(t.target.value)},[]),I=s.useCallback(()=>{h("")},[]),Q=s.useCallback(t=>{x(t)},[]),ee=s.useCallback(async t=>{try{const r=await le(t,n);u(r)}catch{c(`Failed to open task ${t}`,"error")}},[n,u,c]),se=s.useCallback(async t=>{o(t),m(!0),C(null),f(null);const r=y.current+1;y.current=r;try{const d=await ie("project",t.path,n);if(y.current!==r)return;f(d.content)}catch(d){if(y.current!==r)return;const w=d instanceof Error?d.message:`Failed to open ${t.path}`;C(w),c(w,"error")}finally{y.current===r&&m(!1)}},[n,c]),te=s.useCallback(()=>{o(null),f(null),C(null),m(!1)},[]),ne=s.useCallback(t=>{P(r=>{const d=new Map(r),w=d.get(t)??!1;return d.set(t,!w),d})},[]),U=a==="project"?J:_,ae=s.useCallback(async()=>{if(a==="project"){await O();return}await B()},[a,O,B]),q=a==="project"?A.length:N.length,K=a==="project"?"Search project markdown files…":"Search task documents…";return e.jsxs("div",{className:"documents-view",children:[e.jsxs("div",{className:"documents-view-header",children:[e.jsxs("div",{className:"documents-view-title-row",children:[e.jsxs("h2",{className:"documents-view-title",children:[e.jsx(z,{size:20}),"Documents"]}),e.jsxs("span",{className:"documents-view-count",children:[q," result",q!==1?"s":""]})]}),e.jsxs("div",{className:"documents-tab-bar",role:"tablist","aria-label":"Documents sections",children:[e.jsxs("button",{className:`btn documents-tab${a==="project"?" active":""}`,role:"tab","aria-selected":a==="project","aria-label":"Show project markdown files",onClick:()=>Q("project"),children:["Project Files",e.jsx("span",{className:"documents-tab-count",children:S.length})]}),e.jsxs("button",{className:`btn documents-tab${a==="tasks"?" active":""}`,role:"tab","aria-selected":a==="tasks","aria-label":"Show task documents",onClick:()=>Q("tasks"),children:["Task Documents",e.jsx("span",{className:"documents-tab-count",children:H.length})]})]}),a==="project"&&e.jsxs("button",{className:"btn btn-sm documents-hidden-toggle",onClick:()=>k(t=>!t),"aria-pressed":p,"aria-label":p?"Hide hidden project files":"Show hidden project files",title:p?"Hide hidden files":"Show hidden files",children:[p?e.jsx(de,{size:14}):e.jsx(ue,{size:14}),p?"Hide Hidden":"Show Hidden"]}),e.jsxs("div",{className:"documents-search",children:[e.jsx(me,{size:16,className:"documents-search-icon"}),e.jsx("input",{type:"text",className:"documents-search-input",placeholder:K,value:l,onChange:Z,"aria-label":K}),l&&e.jsx("button",{className:"documents-search-clear",onClick:I,"aria-label":"Clear search",children:e.jsx(he,{size:16})})]})]}),e.jsx("div",{className:"documents-view-content",children:U?e.jsxs("div",{className:"documents-view-error",children:[e.jsxs("p",{children:["Failed to load ",a==="project"?"project files":"task documents",": ",U]}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void ae(),"aria-label":"Retry loading documents",children:[e.jsx(pe,{size:16}),"Retry"]})]}):a==="project"?$&&S.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:"Loading project markdown files…"})}):A.length===0?e.jsx("div",{className:"documents-view-empty",children:l.trim()?e.jsxs("p",{children:['No project markdown files match "',l.trim(),'".']}):e.jsxs(e.Fragment,{children:[e.jsx(z,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:"No Markdown files found in this project."})]})}):e.jsxs("div",{className:`documents-project-layout${E?" documents-project-layout--mobile":""}`,children:[(!E||!i)&&e.jsx("aside",{className:"documents-view-sidebar","aria-label":"Project markdown files",children:e.jsx("ul",{className:"markdown-file-list",children:A.map(t=>{const r=i?.path===t.path;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item${r?" markdown-file-item--selected":""}`,onClick:()=>void se(t),"aria-label":`Open ${t.path}`,"aria-current":r?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:t.name}),e.jsx("span",{className:"markdown-file-item-path",children:t.path}),e.jsxs("span",{className:"markdown-file-item-meta",children:[ge(t.size)," · ",Y(t.mtime)]})]})},t.path)})})}),(!E||i)&&e.jsxs("section",{className:"documents-view-main","aria-label":"Project file content preview",children:[E&&i&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:te,"aria-label":"Back to project files list",children:[e.jsx(fe,{size:14}),"Back to files"]}),i?e.jsxs("div",{className:"documents-content-viewer",children:[e.jsxs("div",{className:"documents-content-header",children:[e.jsx("p",{className:"documents-file-path-header",children:i.path}),e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>R(t=>!t),"aria-label":F?"Switch to plain text":"Switch to markdown","aria-pressed":F,title:F?"Switch to plain text":"Switch to markdown",children:F?"Markdown":"Plain"})]}),g?e.jsx("p",{className:"documents-content-state",children:"Loading file content…"}):j?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:j}):F?e.jsx("div",{className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(W,{remarkPlugins:[V],children:b??""})})}):e.jsx("pre",{className:"document-card-content-text documents-content-viewer-text",children:b??""})]}):e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:"Select a Markdown file to view its content."})})]})]}):D&&N.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:"Loading task documents…"})}):H.length===0?e.jsx("div",{className:"documents-view-empty",children:l.trim()?e.jsxs("p",{children:['No task documents match "',l.trim(),'".']}):e.jsxs(e.Fragment,{children:[e.jsx(z,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:"No task documents yet."}),e.jsx("p",{className:"documents-view-empty-hint",children:"Documents are created in task detail tabs."})]})}):e.jsx("div",{className:"documents-task-list-wrap",children:e.jsx("div",{className:"documents-view-list",children:H.map(({taskId:t,taskTitle:r,documents:d})=>e.jsx(Se,{taskId:t,taskTitle:r,documents:d,onOpenTask:ee,renderMarkdownStates:M,onToggleMarkdown:ne},t))})})})]})}export{ye as DocumentsView};
1
+ import{r as s,j as e}from"./vendor-react-K0fH_qHe.js";import{Y as oe,$ as G,a0 as le,a1 as ie,F as z,a2 as de,a3 as ue,S as me,X as he,R as pe,a4 as fe,a5 as W,a6 as V,K as X,D as je,a7 as xe}from"./index-CHoVMPAA.js";import"./vendor-xterm-DzcZoU0P.js";function we(n){const{projectId:c,searchQuery:u,includeProjectFiles:a=!0}=n??{},[x,l]=s.useState([]),[h,i]=s.useState([]),[o,p]=s.useState(!0),[k,b]=s.useState(null),f=s.useRef(null),g=s.useRef(!1),m=s.useRef(null),j=s.useCallback(async()=>{f.current&&f.current.abort();const C=new AbortController;f.current=C;const E=!g.current;E&&p(!0),b(null);const L=oe(u?{q:u}:void 0,c),y=a?G(c):Promise.resolve({files:[]}),[v,F]=await Promise.allSettled([L,y]);if(C.signal.aborted)return;let R=null;if(v.status==="fulfilled"?(l(v.value),g.current=!0):R=v.reason instanceof Error?v.reason.message:String(v.reason),F.status==="fulfilled"){const M=F.value.files,P=u?.trim().toLowerCase(),T=P?M.filter(N=>N.name.toLowerCase().includes(P)||N.path.toLowerCase().includes(P)):M;i(T)}b(R),E&&p(!1)},[a,c,u]);return s.useEffect(()=>(m.current&&clearTimeout(m.current),m.current=setTimeout(()=>{j()},300),()=>{m.current&&clearTimeout(m.current)}),[j]),s.useEffect(()=>(j(),()=>{f.current&&f.current.abort()}),[]),{documents:x,projectFiles:h,loading:o,error:k,refresh:j}}function ke(n,c){const[u,a]=s.useState([]),[x,l]=s.useState(!0),[h,i]=s.useState(null),o=s.useRef(null),p=s.useRef(!1),k=c?.showHidden??!1,b=s.useCallback(async f=>{o.current&&o.current.abort();const g=new AbortController;o.current=g;const m=!p.current;m&&l(!0),i(null);try{const j=await G(n,{showHidden:f?.showHidden??k});if(g.signal.aborted)return;a(j.files),p.current=!0}catch(j){if(g.signal.aborted)return;i(j instanceof Error?j.message:String(j))}finally{!g.signal.aborted&&m&&l(!1)}},[n,k]);return s.useEffect(()=>(p.current=!1,b({showHidden:k}),()=>{o.current&&o.current.abort()}),[b,k]),{files:u,loading:x,error:h,refresh:b}}const be=768;function Y(n){return n?new Date(n).toLocaleString():""}function ge(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(n>=10*1024?0:1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function ve(n,c=200){return n.length<=c?n:`${n.substring(0,c)}…`}function Ne({document:n,renderMarkdown:c,onToggleMarkdown:u}){const[a,x]=s.useState(!1),l=ve(n.content),h=n.content.length>200;return e.jsxs("div",{className:"document-card",children:[e.jsxs("div",{className:"document-card-header",children:[e.jsxs("div",{className:"document-card-key",children:[e.jsx(z,{size:14}),e.jsx("span",{className:"document-card-key-text",children:n.key}),e.jsxs("span",{className:"document-card-revision-badge",children:["v",n.revision]})]}),e.jsx("div",{className:"document-card-actions",children:e.jsx("button",{className:"btn btn-sm document-card-expand-btn",onClick:()=>x(i=>!i),title:a?"Collapse":"Expand","aria-label":a?"Collapse content":"Expand content",children:a?e.jsx(xe,{size:14}):e.jsx(X,{size:14})})})]}),e.jsxs("div",{className:"document-card-meta",children:[e.jsx("span",{className:"document-card-author",children:n.author}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{className:"document-card-date",children:Y(n.updatedAt)})]}),e.jsxs("div",{className:`document-card-content${a?" document-card-content--expanded":""}`,children:[a?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"document-card-content-header",children:e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:u,"aria-label":c?"Switch to plain text":"Switch to markdown","aria-pressed":c,title:c?"Switch to plain text":"Switch to markdown",children:c?"Markdown":"Plain"})}),c?e.jsx("div",{className:"document-card-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(W,{remarkPlugins:[V],children:n.content})})}):e.jsx("pre",{className:"document-card-content-text",children:n.content})]}):e.jsx("p",{className:"document-card-preview",children:l}),h&&!a&&e.jsx("p",{className:"document-card-preview-truncated",children:"…"})]})]})}function Se({taskId:n,taskTitle:c,documents:u,onOpenTask:a,renderMarkdownStates:x,onToggleMarkdown:l}){const[h,i]=s.useState(!1);return e.jsxs("div",{className:"documents-group",children:[e.jsxs("div",{className:"documents-group-header",children:[e.jsxs("button",{className:"documents-group-toggle-btn",onClick:()=>i(o=>!o),"aria-expanded":h,"aria-label":`${h?"Collapse":"Expand"} documents for task ${n}`,children:[e.jsx("span",{className:"documents-group-toggle","aria-hidden":"true",children:h?e.jsx(X,{size:16}):e.jsx(je,{size:16})}),e.jsx("span",{className:"documents-group-task-id",children:n}),e.jsx("span",{className:"documents-group-task-title",children:c||"Untitled"})]}),e.jsxs("span",{className:"documents-group-count",children:[u.length," doc",u.length!==1?"s":""]}),e.jsx("button",{className:"documents-group-task-link",onClick:()=>a(n),"aria-label":`Open task ${n}: ${c||"Untitled"}`,children:"Open task"})]}),h&&e.jsx("div",{className:"documents-group-content",children:u.map(o=>e.jsx(Ne,{document:o,renderMarkdown:x.get(o.id)??!1,onToggleMarkdown:()=>l(o.id)},o.id))})]})}function ye({projectId:n,addToast:c,onOpenDetail:u}){const[a,x]=s.useState("project"),[l,h]=s.useState(""),[i,o]=s.useState(null),[p,k]=s.useState(!1),[b,f]=s.useState(null),[g,m]=s.useState(!1),[j,C]=s.useState(null),[E,L]=s.useState(!1),y=s.useRef(0),v=s.useRef(!1),[F,R]=s.useState(!1),[M,P]=s.useState(new Map),T=a==="tasks"?l.trim():"",{documents:N,loading:D,error:_,refresh:B}=we({projectId:n,searchQuery:T||void 0,includeProjectFiles:!1}),{files:S,loading:$,error:J,refresh:O}=ke(n,{showHidden:p});s.useEffect(()=>{const t=()=>{L(window.innerWidth<=be)};return t(),window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t)}},[]),s.useEffect(()=>{v.current=!1,x("project"),o(null),k(!1),f(null),C(null),m(!1),R(!1),P(new Map)},[n]),s.useEffect(()=>{v.current||D||$||(S.length>0?x("project"):N.length>0&&x("tasks"),v.current=!0)},[N.length,D,S.length,$]);const H=s.useMemo(()=>{const t=new Map;for(const r of N){const d=t.get(r.taskId)||[];t.set(r.taskId,[...d,r])}return Array.from(t.entries()).map(([r,d])=>{const w=[...d].sort((re,ce)=>ce.updatedAt.localeCompare(re.updatedAt));return{taskId:r,taskTitle:w[0]?.taskTitle,documents:w,latestUpdated:w[0]?.updatedAt??""}}).sort((r,d)=>d.latestUpdated.localeCompare(r.latestUpdated))},[N]),A=s.useMemo(()=>{const t=l.trim().toLowerCase();return t?S.filter(r=>{const d=r.path.toLowerCase(),w=r.name.toLowerCase();return d.includes(t)||w.includes(t)}):S},[S,l]);s.useEffect(()=>{if(!i)return;S.some(r=>r.path===i.path)||(o(null),f(null),C(null),m(!1))},[S,i]);const Z=s.useCallback(t=>{h(t.target.value)},[]),I=s.useCallback(()=>{h("")},[]),Q=s.useCallback(t=>{x(t)},[]),ee=s.useCallback(async t=>{try{const r=await le(t,n);u(r)}catch{c(`Failed to open task ${t}`,"error")}},[n,u,c]),se=s.useCallback(async t=>{o(t),m(!0),C(null),f(null);const r=y.current+1;y.current=r;try{const d=await ie("project",t.path,n);if(y.current!==r)return;f(d.content)}catch(d){if(y.current!==r)return;const w=d instanceof Error?d.message:`Failed to open ${t.path}`;C(w),c(w,"error")}finally{y.current===r&&m(!1)}},[n,c]),te=s.useCallback(()=>{o(null),f(null),C(null),m(!1)},[]),ne=s.useCallback(t=>{P(r=>{const d=new Map(r),w=d.get(t)??!1;return d.set(t,!w),d})},[]),U=a==="project"?J:_,ae=s.useCallback(async()=>{if(a==="project"){await O();return}await B()},[a,O,B]),q=a==="project"?A.length:N.length,K=a==="project"?"Search project markdown files…":"Search task documents…";return e.jsxs("div",{className:"documents-view",children:[e.jsxs("div",{className:"documents-view-header",children:[e.jsxs("div",{className:"documents-view-title-row",children:[e.jsxs("h2",{className:"documents-view-title",children:[e.jsx(z,{size:20}),"Documents"]}),e.jsxs("span",{className:"documents-view-count",children:[q," result",q!==1?"s":""]})]}),e.jsxs("div",{className:"documents-tab-bar",role:"tablist","aria-label":"Documents sections",children:[e.jsxs("button",{className:`btn documents-tab${a==="project"?" active":""}`,role:"tab","aria-selected":a==="project","aria-label":"Show project markdown files",onClick:()=>Q("project"),children:["Project Files",e.jsx("span",{className:"documents-tab-count",children:S.length})]}),e.jsxs("button",{className:`btn documents-tab${a==="tasks"?" active":""}`,role:"tab","aria-selected":a==="tasks","aria-label":"Show task documents",onClick:()=>Q("tasks"),children:["Task Documents",e.jsx("span",{className:"documents-tab-count",children:H.length})]})]}),a==="project"&&e.jsxs("button",{className:"btn btn-sm documents-hidden-toggle",onClick:()=>k(t=>!t),"aria-pressed":p,"aria-label":p?"Hide hidden project files":"Show hidden project files",title:p?"Hide hidden files":"Show hidden files",children:[p?e.jsx(de,{size:14}):e.jsx(ue,{size:14}),p?"Hide Hidden":"Show Hidden"]}),e.jsxs("div",{className:"documents-search",children:[e.jsx(me,{size:16,className:"documents-search-icon"}),e.jsx("input",{type:"text",className:"documents-search-input",placeholder:K,value:l,onChange:Z,"aria-label":K}),l&&e.jsx("button",{className:"documents-search-clear",onClick:I,"aria-label":"Clear search",children:e.jsx(he,{size:16})})]})]}),e.jsx("div",{className:"documents-view-content",children:U?e.jsxs("div",{className:"documents-view-error",children:[e.jsxs("p",{children:["Failed to load ",a==="project"?"project files":"task documents",": ",U]}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void ae(),"aria-label":"Retry loading documents",children:[e.jsx(pe,{size:16}),"Retry"]})]}):a==="project"?$&&S.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:"Loading project markdown files…"})}):A.length===0?e.jsx("div",{className:"documents-view-empty",children:l.trim()?e.jsxs("p",{children:['No project markdown files match "',l.trim(),'".']}):e.jsxs(e.Fragment,{children:[e.jsx(z,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:"No Markdown files found in this project."})]})}):e.jsxs("div",{className:`documents-project-layout${E?" documents-project-layout--mobile":""}`,children:[(!E||!i)&&e.jsx("aside",{className:"documents-view-sidebar","aria-label":"Project markdown files",children:e.jsx("ul",{className:"markdown-file-list",children:A.map(t=>{const r=i?.path===t.path;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item${r?" markdown-file-item--selected":""}`,onClick:()=>void se(t),"aria-label":`Open ${t.path}`,"aria-current":r?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:t.name}),e.jsx("span",{className:"markdown-file-item-path",children:t.path}),e.jsxs("span",{className:"markdown-file-item-meta",children:[ge(t.size)," · ",Y(t.mtime)]})]})},t.path)})})}),(!E||i)&&e.jsxs("section",{className:"documents-view-main","aria-label":"Project file content preview",children:[E&&i&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:te,"aria-label":"Back to project files list",children:[e.jsx(fe,{size:14}),"Back to files"]}),i?e.jsxs("div",{className:"documents-content-viewer",children:[e.jsxs("div",{className:"documents-content-header",children:[e.jsx("p",{className:"documents-file-path-header",children:i.path}),e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>R(t=>!t),"aria-label":F?"Switch to plain text":"Switch to markdown","aria-pressed":F,title:F?"Switch to plain text":"Switch to markdown",children:F?"Markdown":"Plain"})]}),g?e.jsx("p",{className:"documents-content-state",children:"Loading file content…"}):j?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:j}):F?e.jsx("div",{className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(W,{remarkPlugins:[V],children:b??""})})}):e.jsx("pre",{className:"document-card-content-text documents-content-viewer-text",children:b??""})]}):e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:"Select a Markdown file to view its content."})})]})]}):D&&N.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:"Loading task documents…"})}):H.length===0?e.jsx("div",{className:"documents-view-empty",children:l.trim()?e.jsxs("p",{children:['No task documents match "',l.trim(),'".']}):e.jsxs(e.Fragment,{children:[e.jsx(z,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:"No task documents yet."}),e.jsx("p",{className:"documents-view-empty-hint",children:"Documents are created in task detail tabs."})]})}):e.jsx("div",{className:"documents-task-list-wrap",children:e.jsx("div",{className:"documents-view-list",children:H.map(({taskId:t,taskTitle:r,documents:d})=>e.jsx(Se,{taskId:t,taskTitle:r,documents:d,onOpenTask:ee,renderMarkdownStates:M,onToggleMarkdown:ne},t))})})})]})}export{ye as DocumentsView};
@@ -1,4 +1,4 @@
1
- import{r as c,j as s}from"./vendor-react-K0fH_qHe.js";import{c as U,a8 as Q,a9 as V,aa as W,ab as X,ac as J,ad as x,X as T,R as j,C as q,ae as F,af as G,ag as _,ah as K,w as B,ai as Z,aj as ss,ak as P}from"./index-CikysL-d.js";import"./vendor-xterm-DzcZoU0P.js";/**
1
+ import{r as c,j as s}from"./vendor-react-K0fH_qHe.js";import{c as U,a8 as Q,a9 as V,aa as W,ab as X,ac as J,ad as x,X as T,R as j,C as q,ae as F,af as G,ag as _,ah as K,w as B,ai as Z,aj as ss,ak as P}from"./index-CHoVMPAA.js";import"./vendor-xterm-DzcZoU0P.js";/**
2
2
  * @license lucide-react v1.7.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.