@runfusion/fusion 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +6767 -5200
- package/dist/client/assets/AgentDetailView-B20ApPe1.js +18 -0
- package/dist/client/assets/AgentDetailView-B5tq9ius.css +1 -0
- package/dist/client/assets/AgentsView-Bkk-uBij.css +1 -0
- package/dist/client/assets/AgentsView-ChN1tgQ0.js +522 -0
- package/dist/client/assets/ChatView-oPMFwmoc.js +1 -0
- package/dist/client/assets/{DevServerView-UkgjEw9-.js → DevServerView-DQrVLbK5.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-Cls4HWxP.js → DirectoryPicker-DVmy6sLM.js} +1 -1
- package/dist/client/assets/{DocumentsView-BRBUPFVA.js → DocumentsView-DHEv-Q2a.js} +1 -1
- package/dist/client/assets/{InsightsView-BRDqHCLb.js → InsightsView-ByyY7GX7.js} +2 -2
- package/dist/client/assets/{MemoryView-DvTrwFnQ.js → MemoryView-Udiu0u8R.js} +2 -2
- package/dist/client/assets/{NodesView-C4Ffl_o0.js → NodesView-CupS-GGc.js} +4 -4
- package/dist/client/assets/{PiExtensionsManager-CeI1syeZ.js → PiExtensionsManager-DXs2xI8K.js} +3 -3
- package/dist/client/assets/{PluginManager-BgeoYhLk.js → PluginManager-BCpiZf4_.js} +1 -1
- package/dist/client/assets/ResearchView-BG9Feaeb.js +1 -0
- package/dist/client/assets/ResearchView-BzRdUzNq.css +1 -0
- package/dist/client/assets/{RoadmapsView-DNb4x75S.js → RoadmapsView-BTJtmBnF.js} +2 -2
- package/dist/client/assets/SettingsModal-DZ_LaEhd.js +31 -0
- package/dist/client/assets/{SettingsModal-CDPDmHhd.css → SettingsModal-DcGFm6NR.css} +1 -1
- package/dist/client/assets/{SettingsModal-CRMr4tL6.js → SettingsModal-eNCZiHa6.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-tF8B_aG_.js → SetupWizardModal-yf79TN1L.js} +1 -1
- package/dist/client/assets/SkillMultiselect-DDHJnrkn.css +1 -0
- package/dist/client/assets/SkillMultiselect-DOj5vX4U.js +1 -0
- package/dist/client/assets/SkillsView-CgnCnikX.js +1 -0
- package/dist/client/assets/{TodoView-CbzDtV53.js → TodoView-67BMyICY.js} +2 -2
- package/dist/client/assets/{folder-open-DPpmGJ-v.js → folder-open-D11gjHGK.js} +1 -1
- package/dist/client/assets/index-BLn1R7Ob.css +1 -0
- package/dist/client/assets/index-CLAHcGnI.js +656 -0
- package/dist/client/assets/{list-checks-D62pw1I8.js → list-checks-CBzPc3GA.js} +1 -1
- package/dist/client/assets/{star-B8EbxNgI.js → star-BWcRk8nt.js} +1 -1
- package/dist/client/assets/{upload-CpnLno9z.js → upload-91TM4ljC.js} +1 -1
- package/dist/client/assets/{users-B_C_0qzA.js → users-BAsI___L.js} +1 -1
- package/dist/client/fonts/SymbolsNerdFontMono-Regular.ttf +0 -0
- package/dist/client/index.html +16 -2
- package/dist/client/theme-data.css +1 -1
- package/dist/client/version.json +1 -1
- package/dist/extension.js +20614 -19502
- package/dist/pi-claude-cli/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/SKILL.md +2 -0
- package/skill/fusion/references/cli-commands.md +14 -0
- package/skill/fusion/references/engine-tools.md +5 -0
- package/skill/fusion/references/extension-tools.md +76 -0
- package/skill/fusion/references/fusion-capabilities.md +8 -0
- package/dist/client/assets/AgentDetailView-BtpZ4jxh.js +0 -18
- package/dist/client/assets/AgentDetailView-DIBOY8V-.css +0 -1
- package/dist/client/assets/AgentsView-Dxdtt0Bm.js +0 -522
- package/dist/client/assets/AgentsView-MotzGhZJ.css +0 -1
- package/dist/client/assets/ChatView-Bra9fNAG.js +0 -1
- package/dist/client/assets/ResearchView-BVJFgfat.css +0 -1
- package/dist/client/assets/ResearchView-fmEOm4A2.js +0 -1
- package/dist/client/assets/SettingsModal-D1xq0WZm.js +0 -31
- package/dist/client/assets/SkillsView-uyl47gSf.js +0 -1
- package/dist/client/assets/index-BqK6TvSa.css +0 -1
- package/dist/client/assets/index-DyXZm9QN.js +0 -656
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import{r as t,j as e}from"./vendor-react-K0fH_qHe.js";import{c as Ge,dg as zs,dh as Bs,di as Hs,dj as Is,L as _,R as We,an as ms,Z as Os,ao as _e,Y as Te,_ as Ss,Q as ks,dk as _s,dl as Vs,dm as Us,y as Cs,cw as Js,dn as Gs,E as q,dp as Ws,s as hs,B as gs,V as Me,W as fs,b1 as ve,X as qs,F as be,A as Fe,K as qe,dq as Ks,cr as Ys,aH as Zs,bp as Qs,ap as ws,$ as Xs,a3 as et,a5 as st,dr as Ue,j as Rs,ds as tt,r as at,dt as nt,du as it,dv as rt,dw as lt,dx as ct,dy as De,ab as Ee,ad as Le,ae as Pe,C as Z,a9 as Ms,dz as ot,dA as dt,i as ut,h as mt,k as ht,dB as Je,a4 as gt,dC as ft,dD as xt,dE as pt,dF as vt,dG as bt,dH as Fs,dI as jt,dJ as Nt,a2 as yt,dK as St,a0 as kt,dL as Ct}from"./index-CLAHcGnI.js";import{S as As}from"./star-BWcRk8nt.js";import{S as wt}from"./SkillMultiselect-DOj5vX4U.js";import{L as Ts}from"./list-checks-CBzPc3GA.js";import"./vendor-xterm-DzcZoU0P.js";/**
|
|
2
|
+
* @license lucide-react v1.7.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const Rt=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],Ae=Ge("chart-column",Rt);/**
|
|
7
|
+
* @license lucide-react v1.7.0 - ISC
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the ISC license.
|
|
10
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/const Mt=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M17 12h-2l-2 5-2-10-2 5H7",key:"15hlnc"}]],Ft=Ge("square-activity",Mt);/**
|
|
12
|
+
* @license lucide-react v1.7.0 - ISC
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the ISC license.
|
|
15
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/const At=[["path",{d:"M16 17h6v-6",key:"t6n2it"}],["path",{d:"m22 17-8.5-8.5-5 5L2 7",key:"x473p"}]],Tt=Ge("trending-down",At);function xs(s){return s<1e3?`${s}ms`:s<6e4?`${(s/1e3).toFixed(1)}s`:s<36e5?`${Math.floor(s/6e4)}m`:`${(s/36e5).toFixed(1)}h`}function Dt(s){return`${Math.round(s*100)}%`}function ps(s){const a=Date.now(),i=new Date(s).getTime(),o=a-i;if(o<0){const d=Math.abs(o);return d<6e4?"in a moment":d<36e5?`in ${Math.floor(d/6e4)}m`:d<864e5?`in ${Math.floor(d/36e5)}h`:`in ${Math.floor(d/864e5)}d`}return o<6e4?"just now":o<36e5?`${Math.floor(o/6e4)}m ago`:o<864e5?`${Math.floor(o/36e5)}h ago`:`${Math.floor(o/864e5)}d ago`}function Et(s){switch(s){case"periodic":return"Periodic";case"post-task":return"Post-Task";case"manual":return"Manual";case"user-requested":return"User Requested";default:return s}}function xe(s){return s instanceof Error&&s.message?s.message:String(s)}function Lt(s){switch(s){case"improving":return"↑ Improving";case"declining":return"↓ Declining";case"stable":return"→ Stable";default:return"Insufficient data"}}function Pt(s){switch(s){case"improving":return"trend-improving";case"declining":return"trend-declining";case"stable":return"trend-stable";default:return"trend-insufficient"}}function vs(s,a=5){return e.jsx("span",{className:"rating-stars",children:Array.from({length:a},(i,o)=>e.jsx(As,{size:14,className:o<s?"star-filled":"star-empty",fill:o<s?"currentColor":"none"},o))})}function $t({agentId:s,projectId:a,addToast:i}){const[o,d]=t.useState([]),[r,b]=t.useState(null),[m,j]=t.useState(null),[x,y]=t.useState([]),[A,f]=t.useState(!0),[B,L]=t.useState(!0),[T,l]=t.useState(!1),[p,w]=t.useState(!1),[H,D]=t.useState(null),[R,k]=t.useState(0),[U,G]=t.useState(""),[I,M]=t.useState(""),W=t.useCallback(async()=>{try{const[c,E]=await Promise.all([zs(s,20,a),Bs(s,void 0,a)]);d(c),b(E)}catch(c){i(`Failed to load reflections: ${xe(c)}`,"error")}finally{f(!1)}},[s,a,i]),h=t.useCallback(async()=>{try{const[c,E]=await Promise.all([Hs(s,a),Is(s,{limit:50},a)]);j(c),y(E)}catch(c){i(`Failed to load ratings: ${xe(c)}`,"error")}finally{L(!1)}},[s,a,i]);t.useEffect(()=>{W(),h()},[W,h]);const J=async()=>{l(!0);try{if(!await _s(s,a)){i("Not enough history to generate a reflection yet","error");return}i("Reflection generated successfully","success"),f(!0),await W()}catch(c){const E=xe(c),V=E.toLowerCase();V.includes("agent not found")||V.includes("not found")?i("This agent is no longer available. It may have been deleted.","error"):V.includes("insufficient history")?i("Not enough history to generate a reflection yet","error"):i(`Failed to generate reflection: ${E}`,"error")}finally{l(!1)}},S=async c=>{if(c.preventDefault(),R!==0){w(!0);try{await Vs(s,{score:R,category:U||void 0,comment:I||void 0,raterType:"user"},a),k(0),G(""),M(""),i("Rating added","success"),await h()}catch(E){i(`Failed to add rating: ${xe(E)}`,"error")}finally{w(!1)}}},u=async c=>{try{await Us(s,c,a),i("Rating deleted","success"),await h()}catch(E){i(`Failed to delete rating: ${xe(E)}`,"error")}},C=c=>{D(E=>E===c?null:c)};if(A&&B)return e.jsx("div",{className:"reflections-tab",children:e.jsxs("div",{className:"reflections-loading-indicator",children:[e.jsx(_,{size:16,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:"Loading evaluation..."})]})});const Q=r&&r.totalTasksCompleted===0&&r.totalTasksFailed===0&&r.recentReflectionCount===0;return e.jsxs("div",{className:"reflections-tab",children:[e.jsxs("div",{className:"reflections-header",children:[e.jsxs("h3",{children:[e.jsx(Ae,{size:16}),"Performance, Reflections & Ratings"]}),e.jsx("button",{className:"btn btn-secondary",onClick:J,disabled:T,title:"Generate a manual reflection",children:T?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:14,className:"animate-spin"}),"Reflecting..."]}):e.jsxs(e.Fragment,{children:[e.jsx(We,{size:14}),"Reflect Now"]})})]}),r&&!Q&&e.jsxs("div",{className:"reflections-stats-grid",children:[e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(ms,{size:16,style:{color:"var(--color-success)"}}),r.totalTasksCompleted]}),e.jsx("div",{className:"stat-label",children:"Tasks Completed"})]}),e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(Tt,{size:16,style:{color:"var(--color-error)"}}),r.totalTasksFailed]}),e.jsx("div",{className:"stat-label",children:"Tasks Failed"})]}),e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(Os,{size:16,style:{color:"var(--in-progress)"}}),xs(r.avgDurationMs)]}),e.jsx("div",{className:"stat-label",children:"Avg Duration"})]}),e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(Ae,{size:16,style:{color:r.successRate>=.8?"var(--color-success)":r.successRate>=.5?"var(--color-warning)":"var(--color-error)"}}),Dt(r.successRate)]}),e.jsx("div",{className:"stat-label",children:"Success Rate"})]}),e.jsxs("div",{className:"reflections-stat-card",children:[e.jsxs("div",{className:"stat-value",children:[e.jsx(_e,{size:16,style:{color:"var(--color-info)"}}),r.recentReflectionCount]}),e.jsx("div",{className:"stat-label",children:"Reflections"})]})]}),Q&&e.jsxs("div",{className:"reflections-no-data",children:[e.jsx(Ae,{size:24,opacity:.3}),e.jsx("p",{children:"No performance data yet"})]}),e.jsxs("div",{className:"reflections-ratings-section",children:[e.jsx("h4",{children:"User Ratings"}),B?e.jsxs("div",{className:"reflections-loading-indicator",children:[e.jsx(_,{size:16,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:"Loading ratings..."})]}):e.jsxs(e.Fragment,{children:[m&&e.jsxs("div",{className:"rating-summary-card",children:[e.jsxs("div",{className:"rating-score-display",children:[e.jsx("span",{className:"rating-average",children:m.averageScore.toFixed(1)}),vs(Math.round(m.averageScore))]}),e.jsxs("div",{className:"rating-stats",children:[e.jsxs("span",{className:"rating-count",children:[m.totalRatings," ratings"]}),e.jsx("span",{className:`rating-trend-badge ${Pt(m.trend)}`,children:Lt(m.trend)})]})]}),m&&Object.keys(m.categoryAverages).length>0&&e.jsxs("div",{className:"category-breakdown",children:[e.jsx("h4",{children:"Category Averages"}),Object.entries(m.categoryAverages).map(([c,E])=>e.jsxs("div",{className:"category-item",children:[e.jsx("span",{className:"category-name",children:c}),e.jsx("span",{className:"category-score",children:E.toFixed(1)})]},c))]}),e.jsxs("form",{className:"add-rating-form",onSubmit:S,children:[e.jsx("h4",{children:"Add Rating"}),e.jsx("div",{className:"star-selector",children:[1,2,3,4,5].map(c=>e.jsx("button",{type:"button",className:"star-btn touch-target",onClick:()=>k(c),title:`${c} star${c>1?"s":""}`,children:e.jsx(As,{size:24,fill:c<=R?"currentColor":"none",className:c<=R?"star-filled":"star-empty"})},c))}),e.jsxs("select",{value:U,onChange:c=>G(c.target.value),className:"select add-rating-category-select",children:[e.jsx("option",{value:"",children:"Select category..."}),e.jsx("option",{value:"quality",children:"Quality"}),e.jsx("option",{value:"speed",children:"Speed"}),e.jsx("option",{value:"communication",children:"Communication"}),e.jsx("option",{value:"reliability",children:"Reliability"}),e.jsx("option",{value:"other",children:"Other"})]}),e.jsx("textarea",{value:I,onChange:c=>M(c.target.value),placeholder:"Optional comment...",className:"input add-rating-comment-input",rows:3}),e.jsx("button",{type:"submit",className:"btn btn-task-create",disabled:R===0||p,children:p?"Submitting...":"Submit Rating"})]}),e.jsxs("div",{className:"rating-history",children:[e.jsx("h4",{children:"Rating History"}),x.length===0?e.jsx("p",{className:"no-ratings",children:"No ratings yet"}):x.map(c=>e.jsxs("div",{className:"rating-history-item",children:[e.jsxs("div",{className:"rating-item-header",children:[vs(c.score),c.category&&e.jsx("span",{className:"rating-category-badge",children:c.category}),e.jsx("span",{className:"rating-time",children:ps(c.createdAt)}),e.jsx("button",{type:"button",className:"rating-delete-btn touch-target",onClick:()=>void u(c.id),title:"Delete rating",children:e.jsx(Te,{size:14})})]}),c.comment&&e.jsx("p",{className:"rating-comment",children:c.comment})]},c.id))]})]})]}),e.jsxs("div",{className:"reflections-list",children:[e.jsx("h4",{children:"Reflection History"}),A?e.jsxs("div",{className:"reflections-loading-indicator",children:[e.jsx(_,{size:16,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:"Loading reflections..."})]}):o.length===0?e.jsxs("div",{className:"reflection-empty",children:[e.jsx(_e,{size:32,opacity:.3}),e.jsx("p",{children:"No reflections yet"}),e.jsx("p",{className:"text-secondary",children:"Trigger a reflection to get started"})]}):e.jsx("div",{className:"reflection-cards",children:o.map(c=>{const E=H===c.id;return e.jsxs("div",{className:`reflection-card ${E?"reflection-card--expanded":""}`,onClick:()=>C(c.id),role:"button",tabIndex:0,onKeyDown:V=>V.key==="Enter"&&C(c.id),children:[e.jsxs("div",{className:"reflection-card-header",children:[e.jsx("span",{className:`reflection-trigger-badge reflection-trigger-${c.trigger}`,children:Et(c.trigger)}),e.jsx("span",{className:"reflection-timestamp",children:ps(c.timestamp)}),e.jsx("span",{className:"reflection-chevron",children:E?e.jsx(Ss,{size:16}):e.jsx(ks,{size:16})})]}),e.jsx("div",{className:"reflection-summary",children:c.summary}),E&&e.jsxs("div",{className:"reflection-details",children:[c.insights.length>0&&e.jsxs("div",{className:"reflection-insights",children:[e.jsxs("h5",{children:[e.jsx(_e,{size:14})," Insights"]}),e.jsx("ul",{children:c.insights.map((V,g)=>e.jsx("li",{children:V},g))})]}),c.suggestedImprovements.length>0&&e.jsxs("div",{className:"reflection-suggestions",children:[e.jsxs("h5",{children:[e.jsx(ms,{size:14})," Suggested Improvements"]}),e.jsx("ul",{children:c.suggestedImprovements.map((V,g)=>e.jsx("li",{children:V},g))})]}),c.metrics&&e.jsxs("div",{className:"reflection-metrics",children:[e.jsx("h5",{children:"Metrics"}),e.jsxs("div",{className:"metrics-grid",children:[c.metrics.tasksCompleted!==void 0&&e.jsxs("div",{className:"metric",children:[e.jsx("span",{className:"metric-label",children:"Tasks:"}),e.jsx("span",{className:"metric-value",children:c.metrics.tasksCompleted})]}),c.metrics.tasksFailed!==void 0&&e.jsxs("div",{className:"metric",children:[e.jsx("span",{className:"metric-label",children:"Failed:"}),e.jsx("span",{className:"metric-value",children:c.metrics.tasksFailed})]}),c.metrics.avgDurationMs!==void 0&&e.jsxs("div",{className:"metric",children:[e.jsx("span",{className:"metric-label",children:"Avg Duration:"}),e.jsx("span",{className:"metric-value",children:xs(c.metrics.avgDurationMs)})]}),c.metrics.errorCount!==void 0&&e.jsxs("div",{className:"metric",children:[e.jsx("span",{className:"metric-label",children:"Errors:"}),e.jsx("span",{className:"metric-value",children:c.metrics.errorCount})]})]})]})]})]},c.id)})})]})]})}function ee(...s){return s.filter(Boolean).join(" ")}function je(s){const a=Date.now(),i=new Date(s).getTime(),o=a-i;if(o<0){const d=Math.abs(o);return d<6e4?"in a moment":d<36e5?`in ${Math.floor(d/6e4)}m`:d<864e5?`in ${Math.floor(d/36e5)}h`:`in ${Math.floor(d/864e5)}d`}return o<6e4?"just now":o<36e5?`${Math.floor(o/6e4)}m ago`:o<864e5?`${Math.floor(o/36e5)}h ago`:`${Math.floor(o/864e5)}d ago`}const zt=[{id:"dashboard",label:"Dashboard",icon:Ft},{id:"logs",label:"Logs",icon:be},{id:"runs",label:"Runs",icon:Fe},{id:"tasks",label:"Tasks",icon:Ts},{id:"employees",label:"Employees",icon:qe},{id:"soul",label:"Soul",icon:Ks},{id:"instructions",label:"Instructions",icon:Ys},{id:"memory",label:"Agent Memory",icon:be},{id:"reflections",label:"Evaluation",icon:Ae},{id:"config",label:"Settings",icon:Zs}],Ke={idle:{bg:"var(--state-idle-bg)",text:"var(--state-idle-text)",border:"var(--state-idle-border)"},active:{bg:"var(--state-active-bg)",text:"var(--state-active-text)",border:"var(--state-active-border)"},running:{bg:"var(--state-active-bg)",text:"var(--state-active-text)",border:"var(--state-active-border)"},paused:{bg:"var(--state-paused-bg)",text:"var(--state-paused-text)",border:"var(--state-paused-border)"},error:{bg:"var(--state-error-bg)",text:"var(--state-error-text)",border:"var(--state-error-border)"},terminated:{bg:"var(--state-error-bg)",text:"var(--state-error-text)",border:"var(--state-error-border)"}},bs={completed:{icon:Z,color:"var(--color-success, #3fb950)"},failed:{icon:xt,color:"var(--color-error, #f85149)"},active:{icon:_,color:"var(--in-progress, #bc8cff)"},terminated:{icon:ve,color:"var(--text-muted, #8b949e)"}},js={"long-term":"Long-term",daily:"Daily",dreams:"Dreams"},Bt={"long-term":"Curated durable decisions, conventions, constraints, and pitfalls for this specific agent.",daily:"Raw daily observations and open loops recorded by this agent.",dreams:"Synthesized patterns and emerging themes distilled from this agent's daily memory."},Ht=yt(Je);function It(s,a){return s.some(i=>i.path===a)?a:s.find(i=>i.layer==="long-term")?.path??s[0]?.path??""}function ca({agentId:s,projectId:a,onClose:i,addToast:o,onChildClick:d}){const[r,b]=t.useState(null),{confirm:m}=Cs(),[j,x]=t.useState([]),[y,A]=t.useState(!0),[f,B]=t.useState("dashboard"),[L,T]=t.useState(!1),[l,p]=t.useState(!1),w=t.useRef(null),H=t.useRef(null),D=t.useRef(!1);Js(H,!0,"fusion:agent-detail-modal-size");const R=t.useRef(i),k=t.useRef(o),U=t.useRef(null),G=t.useRef(!1),I=t.useRef(0),M=t.useRef(s),W=t.useRef(a);R.current=i,k.current=o,U.current=r;const h=t.useCallback(async()=>{U.current===null&&A(!0);try{const P=await Gs(s,a);b(P)}catch(P){k.current(`Failed to load agent: ${q(P)}`,"error"),R.current()}finally{A(!1)}},[s,a]),J=t.useCallback(async()=>{const g=I.current,P=s,v=a;if(r?.taskId)try{const O=await Ws(r.taskId,v,{limit:100});if(I.current!==g||s!==P||a!==v)return;x(O.entries)}catch(O){if(I.current!==g||s!==P||a!==v)return;console.error("Failed to load task logs:",O)}},[r?.taskId,s,a]),S=t.useCallback(g=>{G.current=g},[]);t.useEffect(()=>{h()},[h]),t.useEffect(()=>{const g=setInterval(()=>{h()},3e4);return()=>{clearInterval(g)}},[h]),t.useEffect(()=>{r?.taskId&&J()},[r?.taskId,J]),t.useEffect(()=>{(M.current!==s||W.current!==a)&&(M.current=s,W.current=a,I.current++,x([]),T(!1),G.current=!1)},[s,a]),t.useEffect(()=>{const g=a?`?projectId=${encodeURIComponent(a)}`:"",P=I.current;return hs(`/api/events${g}`,{events:{"agent:updated":v=>{if(I.current===P)try{const O=JSON.parse(v.data);if(!O||typeof O!="object"||O.id!==s||G.current)return;h()}catch{}}}})},[s,a,h]),t.useEffect(()=>{if(f!=="logs"||!r?.taskId){T(!1);return}const g=I.current,P=r.taskId,v=a?`?projectId=${encodeURIComponent(a)}`:"",O=hs(`/api/tasks/${encodeURIComponent(P)}/logs/stream${v}`,{events:{"agent:log":le=>{if(I.current===g)try{const Ne=JSON.parse(le.data);x($e=>[Ne,...$e]);const de=w.current;de&&de.scrollTop<50&&(de.scrollTop=0)}catch{}}},onOpen:()=>{I.current===g&&T(!0)},onError:()=>{I.current===g&&T(!1)}});return()=>{O(),I.current===g&&T(!1)}},[r?.taskId,f,a]);const u=async g=>{if(l||!U.current)return;const P=U.current.state;if(P!==g){p(!0),b(v=>v&&{...v,state:g});try{await et(s,g,a),o(`Agent state updated to ${g}`,"success"),h()}catch(v){b(O=>O&&{...O,state:P}),o(`Failed to update state: ${q(v)}`,"error")}finally{p(!1)}}},C=async()=>{if(!(!r||!await m({title:"Delete Agent",message:`Delete agent "${r.name}"? This cannot be undone.`,danger:!0})))try{await st(s,a),o(`Agent "${r.name}" deleted`,"success"),i()}catch(P){o(`Failed to delete agent: ${q(P)}`,"error")}},Q=()=>r?Xs(r):{label:"Unknown",icon:e.jsx(gs,{size:14}),color:"var(--text-muted, #8b949e)",stateDerived:!1},c=()=>{r&&(navigator.clipboard.writeText(r.id),o("Agent ID copied to clipboard","success"))};if(y)return e.jsx("div",{className:"agent-detail-overlay",onMouseDown:g=>{g.target===g.currentTarget&&(D.current=!0)},onMouseUp:g=>{D.current&&g.target===g.currentTarget&&i(),D.current=!1},role:"dialog","aria-modal":"true",children:e.jsx("div",{className:"agent-detail-modal",ref:H,children:e.jsxs("div",{className:"agent-detail-loading",children:[e.jsx(_,{className:"animate-spin",size:24}),e.jsx("span",{children:"Loading agent..."})]})})});if(!r)return null;const E=Ke[r.state],V=Q();return e.jsx("div",{className:"agent-detail-overlay",onClick:g=>g.target===g.currentTarget&&i(),role:"dialog","aria-modal":"true",children:e.jsxs("div",{className:"agent-detail-modal",children:[e.jsxs("div",{className:"agent-detail-header",children:[e.jsxs("div",{className:"agent-detail-identity",children:[e.jsx("div",{className:"agent-detail-icon",children:e.jsx(gs,{size:20})}),e.jsxs("div",{className:"agent-detail-info",children:[e.jsx("h2",{children:r.name}),e.jsxs("div",{className:"agent-detail-badges",children:[e.jsx("span",{className:"badge",style:{background:E.bg,color:E.text,border:`1px solid ${E.border}`},children:r.state}),e.jsxs("span",{className:"badge",style:{color:V.color},title:V.label,children:[V.icon,!V.stateDerived&&V.label]})]})]})]}),e.jsxs("div",{className:"agent-detail-controls",children:[r.state==="idle"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-task-create btn--compact",onClick:()=>void u("active"),disabled:l,children:[e.jsx(Me,{size:14}),"Start"]}),e.jsxs("button",{className:"btn btn--danger btn--compact",onClick:C,children:[e.jsx(Te,{size:14}),"Delete"]})]}),r.state==="active"&&e.jsxs("button",{className:"btn btn--compact",onClick:()=>void u("paused"),disabled:l,children:[e.jsx(fs,{size:14}),"Pause"]}),r.state==="paused"&&e.jsxs("button",{className:"btn btn-task-create btn--compact",onClick:()=>void u("active"),disabled:l,children:[e.jsx(Me,{size:14}),"Resume"]}),r.state==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn--compact",onClick:()=>void u("paused"),disabled:l,children:[e.jsx(fs,{size:14}),"Pause"]}),e.jsxs("button",{className:"btn btn--danger btn--compact",onClick:()=>void u("terminated"),disabled:l,children:[e.jsx(ve,{size:14}),"Stop"]})]}),r.state==="error"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-task-create btn--compact",onClick:()=>void u("active"),disabled:l,children:[e.jsx(Me,{size:14}),"Retry"]}),e.jsxs("button",{className:"btn btn--danger btn--compact",onClick:()=>void u("terminated"),disabled:l,children:[e.jsx(ve,{size:14}),"Stop"]})]}),r.state==="terminated"&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-task-create btn--compact",onClick:()=>void u("active"),disabled:l,children:[e.jsx(Me,{size:14}),"Start"]}),e.jsxs("button",{className:"btn btn--danger btn--compact",onClick:C,children:[e.jsx(Te,{size:14}),"Delete"]})]})]}),e.jsxs("div",{className:"agent-detail-utility-actions",children:[e.jsx("button",{className:"btn-icon",onClick:()=>void h(),title:"Refresh",children:e.jsx(We,{size:16})}),e.jsx("button",{className:"btn-icon",onClick:i,"aria-label":"Close",title:"Close",children:e.jsx(qs,{size:20})})]})]}),e.jsx("div",{className:"agent-detail-tabs",children:zt.map(g=>e.jsxs("button",{className:ee("agent-detail-tab",f===g.id&&"active"),onClick:()=>B(g.id),children:[e.jsx(g.icon,{size:16}),g.label]},g.id))}),e.jsxs("div",{className:"agent-detail-content",children:[f==="dashboard"&&e.jsx(Ot,{agent:r,health:V,onChildClick:d,projectId:a}),f==="logs"&&e.jsx(_t,{logs:j,isStreaming:L,containerRef:w,hasTask:!!r.taskId}),f==="runs"&&e.jsx(Ut,{addToast:o,agentId:r.id,projectId:a,agentState:r.state,agentName:r.name}),f==="tasks"&&e.jsx(qt,{agentId:r.id,projectId:a,addToast:o}),f==="employees"&&e.jsx(sa,{agentId:r.id,projectId:a,onChildClick:d}),f==="soul"&&e.jsx(Yt,{agent:r,projectId:a,addToast:o,onSaved:h}),f==="instructions"&&e.jsx(Qt,{agent:r,projectId:a,addToast:o,onSaved:h}),f==="memory"&&e.jsx(Zt,{agent:r,projectId:a,addToast:o,onSaved:h}),f==="reflections"&&e.jsx($t,{agentId:r.id,projectId:a,addToast:o}),f==="config"&&e.jsx(ea,{agent:r,projectId:a,addToast:o,onSaved:h,onHasChangesChange:S,onDelete:C})]}),e.jsxs("div",{className:"agent-detail-footer",children:[e.jsx("button",{className:"btn-icon",onClick:c,title:"Copy Agent ID",children:e.jsx(Qs,{size:14})}),e.jsx("span",{className:"agent-detail-id",onClick:c,children:r.id}),r.taskId&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"divider",children:"|"}),e.jsx("span",{className:"text-muted",children:"Working on:"}),e.jsxs("a",{href:`/tasks/${r.taskId}`,className:"link",children:[r.taskId,e.jsx(ws,{size:12})]})]})]})]})})}function Ot({agent:s,health:a,onChildClick:i,projectId:o}){const d=Ke[s.state],[r,b]=t.useState([]),[m,j]=t.useState(!0),[x,y]=t.useState(null),[A,f]=t.useState([]),B=typeof s.runtimeConfig?.runtimeHint=="string"?s.runtimeConfig.runtimeHint:"",L=(()=>{const l=s.runtimeConfig??{};if(B){const p=A.find(w=>w.runtimeId===B);return p?p.name:B}if(l.modelProvider&&l.modelId)return`${l.modelProvider}/${l.modelId}`;if(typeof l.model=="string"&&l.model.includes("/")){const p=l.model.indexOf("/");return l.model.slice(p+1)}return null})();t.useEffect(()=>{Ue(s.id,o).then(y).catch(()=>y(null))},[s.id,o]),t.useEffect(()=>{Rs(o).then(f).catch(()=>f([]))},[o]),t.useEffect(()=>{let l=!1;return j(!0),tt(s.id,o).then(p=>{if(l)return;const w=p.length>0&&p[0]?.id===s.id?[...p].reverse():p;b(w)}).catch(()=>{l||b([])}).finally(()=>{l||j(!1)}),()=>{l=!0}},[s.id,o]);const T=t.useMemo(()=>{const l=s.completedRuns||[],p=new Date;p.setHours(0,0,0,0);const w=l.filter(D=>new Date(D.startedAt)>=p),H=l.filter(D=>D.status==="completed");return{totalRuns:l.length,todayRuns:w.length,successfulRuns:H.length,successRate:l.length>0?Math.round(H.length/l.length*100):0}},[s]);return e.jsxs("div",{className:"dashboard-tab",children:[x?.isOverBudget&&e.jsxs("div",{className:"budget-warning-banner",role:"alert",children:[e.jsx("span",{children:"⚠️"}),e.jsxs("span",{children:[e.jsx("strong",{children:"Budget Exhausted:"})," This agent has exceeded its token budget and may be operating with limited functionality."]})]}),e.jsxs("div",{className:"dashboard-section",children:[e.jsx("h3",{children:"Agent Information"}),e.jsxs("div",{className:"info-grid",children:[e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:"Name"}),e.jsx("span",{className:"info-value",children:s.name})]}),e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:"Role"}),e.jsx("span",{className:"info-value",children:s.role})]}),e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:"Skills"}),e.jsx("span",{className:"info-value",children:Array.isArray(s.metadata?.skills)&&s.metadata.skills.length>0?e.jsx("div",{className:"skill-badge-row",children:s.metadata.skills.map(l=>e.jsx("span",{className:"skill-badge",children:l},l))}):"—"})]}),e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:"State"}),e.jsx("span",{className:"info-value",children:e.jsx("span",{className:"inline-badge",style:{background:d.bg,color:d.text},children:s.state})})]}),e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:"Health"}),e.jsx("span",{className:"info-value",style:{color:a.color},title:a.label,children:a.stateDerived?a.icon:a.label})]}),L&&e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:B?"Runtime":"Model"}),e.jsx("span",{className:"info-value",children:L})]}),x?.budgetLimit!=null&&e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:"Budget"}),e.jsx("span",{className:"info-value",children:e.jsx("span",{className:"budget-badge",style:{background:x.isOverBudget?"var(--state-error-bg, rgba(248,81,73,0.15))":x.isOverThreshold?"var(--state-paused-bg, rgba(227,181,65,0.15))":"var(--state-active-bg, rgba(63,185,80,0.15))",color:x.isOverBudget?"var(--state-error-text, #f85149)":x.isOverThreshold?"var(--state-paused-text, #e3b541)":"var(--state-active-text, #3fb950)",border:`1px solid ${x.isOverBudget?"var(--state-error-border, #f85149)":x.isOverThreshold?"var(--state-paused-border, #e3b541)":"var(--state-active-border, #3fb950)"}`},children:x.isOverBudget?"⚠ Budget Exhausted":`${Math.round(x.usagePercent??0)}% used`})})]}),e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:"Created"}),e.jsx("span",{className:"info-value",children:new Date(s.createdAt).toLocaleDateString()})]}),e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:"Last Heartbeat"}),e.jsx("span",{className:"info-value",children:s.lastHeartbeatAt?je(s.lastHeartbeatAt):"Never"})]}),(()=>{if(!(s.state==="active"||s.state==="running")||!s.lastHeartbeatAt)return null;const p=at(s.runtimeConfig?.heartbeatIntervalMs),w=new Date(new Date(s.lastHeartbeatAt).getTime()+p);return e.jsxs("div",{className:"info-item",children:[e.jsx("span",{className:"info-label",children:"Next Heartbeat"}),e.jsx("span",{className:"info-value",title:w.toLocaleString(),children:je(w.toISOString())})]})})()]})]}),e.jsxs("div",{className:"dashboard-section",children:[e.jsxs("h3",{children:[e.jsx(qe,{size:16,style:{marginRight:"6px",verticalAlign:"-2px"}}),"Chain of Command"]}),m?e.jsxs("div",{className:"chain-of-command-loading",role:"status","aria-live":"polite",children:[e.jsx(_,{size:14,className:"animate-spin"}),e.jsx("span",{children:"Loading reporting chain..."})]}):r.length<=1?e.jsx("p",{className:"text-muted",children:"No reporting chain"}):e.jsx("div",{className:"chain-of-command-path","aria-label":"Chain of command",children:r.map((l,p)=>{const w=p===r.length-1,H=!w;return e.jsxs("div",{className:"chain-of-command-item",children:[e.jsx("button",{type:"button",className:`chain-of-command-node${w?" chain-of-command-node--current":""}`,onClick:()=>H&&i?.(l.id),disabled:!H||!i,title:w?"Current agent":`View ${l.name}`,children:l.name}),!w&&e.jsx("span",{className:"chain-of-command-separator","aria-hidden":"true",children:"→"})]},l.id)})})]}),e.jsxs("div",{className:"dashboard-section",children:[e.jsx("h3",{children:"Statistics"}),e.jsxs("div",{className:"stats-grid",children:[e.jsxs("div",{className:"stat-card",children:[e.jsx("div",{className:"stat-value",children:T.totalRuns}),e.jsx("div",{className:"stat-label",children:"Total Runs"})]}),e.jsxs("div",{className:"stat-card",children:[e.jsx("div",{className:"stat-value",children:T.todayRuns}),e.jsx("div",{className:"stat-label",children:"Runs Today"})]}),e.jsxs("div",{className:"stat-card",children:[e.jsxs("div",{className:"stat-value",children:[T.successRate,"%"]}),e.jsx("div",{className:"stat-label",children:"Success Rate"})]})]})]}),s.taskId&&e.jsxs("div",{className:"dashboard-section",children:[e.jsx("h3",{children:"Current Task"}),e.jsxs("div",{className:"current-task",children:[e.jsx("span",{className:"task-badge",children:s.taskId}),e.jsxs("a",{href:`/tasks/${s.taskId}`,className:"btn btn--sm",children:["View Task ",e.jsx(ws,{size:14})]})]})]}),s.metadata&&Object.keys(s.metadata).length>0&&e.jsxs("div",{className:"dashboard-section",children:[e.jsx("h3",{children:"Metadata"}),e.jsx("pre",{className:"metadata-json",children:JSON.stringify(s.metadata,null,2)})]})]})}function _t({logs:s,isStreaming:a,containerRef:i,hasTask:o}){return o?e.jsxs("div",{className:"logs-tab",children:[e.jsxs("div",{className:"logs-header",children:[e.jsxs("span",{className:"logs-count",children:[s.length," entries"]}),a&&e.jsxs("span",{className:"streaming-indicator",children:[e.jsx("span",{className:"streaming-dot"}),"Live"]})]}),e.jsx("div",{ref:i,className:"logs-container",children:s.length===0?e.jsxs("div",{className:"logs-empty",children:[e.jsx(be,{size:48,opacity:.3}),e.jsx("p",{children:"No log entries yet"}),e.jsx("p",{className:"text-muted",children:a?"Waiting for activity...":"Logs will appear here when the agent is active"})]}):s.map((d,r)=>{const b=r>0?s[r-1]:void 0,m=!b||b.agent!==d.agent;return e.jsx(Vt,{entry:d,showTimestamp:m},`${d.timestamp}-${r}`)})})]}):e.jsx("div",{className:"logs-tab",children:e.jsxs("div",{className:"logs-empty",children:[e.jsx(be,{size:48,opacity:.3}),e.jsx("p",{children:"No task assigned"}),e.jsx("p",{className:"text-muted",children:"Agent logs are available when the agent is assigned to a task"})]})})}function Vt({entry:s,showTimestamp:a}){const o=(()=>{switch(s.type){case"tool":return{color:"var(--accent)",borderLeft:"3px solid var(--accent)",background:"var(--log-tool-bg)"};case"tool_result":return{color:"var(--color-success)",borderLeft:"3px solid var(--color-success)",background:"var(--log-success-bg)"};case"tool_error":return{color:"var(--color-error)",borderLeft:"3px solid var(--color-error)",background:"var(--log-error-bg)"};case"thinking":return{color:"var(--text-muted)",fontStyle:"italic",opacity:.7};default:return{color:"var(--text-primary)"}}})(),d=new Date(s.timestamp).toLocaleTimeString();return e.jsxs("div",{className:"log-entry",style:o,children:[a&&e.jsxs("span",{className:"log-timestamp",children:["[",d,"]"]}),s.agent&&e.jsxs("span",{className:"log-agent",children:["[",s.agent,"]"]}),s.type==="tool"&&e.jsx("span",{className:"log-icon",children:"⚡"}),s.type==="tool_result"&&e.jsx("span",{className:"log-icon",children:"✓"}),s.type==="tool_error"&&e.jsx("span",{className:"log-icon",children:"✗"}),e.jsxs("span",{className:"log-text",children:[s.text,s.detail&&e.jsxs("span",{className:"log-detail",children:[" — ",s.detail]})]})]})}function Ut({addToast:s,agentId:a,projectId:i,agentState:o,agentName:d}){const[r,b]=t.useState([]),{confirm:m}=Cs(),[j,x]=t.useState(!0),[y,A]=t.useState(null),[f,B]=t.useState([]),[L,T]=t.useState(!1),[l,p]=t.useState(null),[w,H]=t.useState(!1),D=t.useCallback(async()=>{try{const u=await nt(a,50,i);b(u)}catch(u){s(`Failed to load runs: ${q(u)}`,"error")}finally{x(!1)}},[a,i,s]);t.useEffect(()=>{D()},[D]);const R=r.some(u=>u.status==="active");t.useEffect(()=>{if(!R)return;const u=setInterval(()=>{D()},5e3);return()=>clearInterval(u)},[R,D]);const k=t.useCallback(async u=>{if(y===u){A(null),B([]),p(null);return}A(u),T(!0),H(!0),B([]),p(null);try{const[C,Q]=await Promise.all([it(a,u,i),rt(a,u,i)]);B(C),p(Q)}catch(C){s(`Failed to load run details: ${q(C)}`,"error"),B([]),p(null)}finally{T(!1),H(!1)}},[y,a,i,s]),U=async()=>{try{await gt(a,i,{source:"on_demand",triggerDetail:"Triggered from dashboard"}),s(`Heartbeat run started for ${d??a}`,"success"),x(!0),D()}catch(u){s(`Failed to start heartbeat run: ${q(u)}`,"error")}},G=async()=>{if(await m({title:"Stop Active Run",message:"Stop the active run? The agent's work will be interrupted.",danger:!0}))try{await ft(a,i),s("Run stopped","success"),x(!0),D()}catch(C){s(`Failed to stop run: ${q(C)}`,"error")}},I=o==="active"||o==="idle";if(j&&r.length===0)return e.jsx("div",{className:"runs-tab",children:e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",padding:"24px",justifyContent:"center"},children:[e.jsx(_,{size:16,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:"Loading runs..."})]})});if(r.length===0)return e.jsxs("div",{className:"runs-tab",children:[I&&e.jsx("div",{style:{padding:"12px 16px",borderBottom:"1px solid var(--border-color)"},children:e.jsxs("button",{className:"btn btn--sm btn-task-create",onClick:()=>void U(),"aria-label":`Run now for ${d??a}`,children:[e.jsx(Fe,{size:14})," Run Now"]})}),e.jsxs("div",{className:"runs-empty",children:[e.jsx(Fe,{size:48,opacity:.3}),e.jsx("p",{children:"No runs yet"}),e.jsx("p",{className:"text-muted",children:"Heartbeat runs will appear here"})]})]});const M=[...r].sort((u,C)=>new Date(C.startedAt).getTime()-new Date(u.startedAt).getTime()),W=M.filter(u=>u.status==="active"),h=M.filter(u=>u.status!=="active"),J=u=>u?e.jsxs("div",{style:{fontSize:"12px",color:"var(--text-secondary)",display:"flex",gap:"12px",flexWrap:"wrap"},children:[e.jsxs("span",{children:["Input: ",u.inputTokens.toLocaleString()]}),e.jsxs("span",{children:["Output: ",u.outputTokens.toLocaleString()]}),u.cachedTokens>0&&e.jsxs("span",{children:["Cached: ",u.cachedTokens.toLocaleString()]})]}):null,S=(u,C,Q)=>{const c=bs[u.status]||bs.completed,E=c.icon,V=u.endedAt?Jt(new Date(u.startedAt),new Date(u.endedAt)):"In progress",g=y===u.id;return e.jsxs("div",{children:[e.jsxs("div",{className:ee("run-card",Q&&"run-card--active",g&&"run-card--selected"),onClick:()=>void k(u.id),style:{cursor:"pointer"},role:"button",tabIndex:0,"aria-expanded":g,"aria-label":`${Q?"Active":""} run ${u.id.slice(0,8)}, ${u.status}`,onKeyDown:P=>{(P.key==="Enter"||P.key===" ")&&(P.preventDefault(),k(u.id))},children:[e.jsxs("div",{className:"run-header",children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[g?e.jsx(Ss,{size:14}):e.jsx(ks,{size:14}),Q?e.jsxs("span",{className:"run-live-indicator",children:[e.jsx("span",{className:"live-dot"}),"Live Run"]}):e.jsxs("span",{className:"run-id",children:["#",C+1," ",u.id.slice(0,8)]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[u.invocationSource&&e.jsx("span",{className:"badge",style:{fontSize:"10px",padding:"1px 6px"},children:u.invocationSource}),Q&&e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:P=>{P.preventDefault(),P.stopPropagation(),G()},"aria-label":"Stop active run",children:[e.jsx(ve,{size:12})," Stop"]}),e.jsxs("span",{className:ee("run-status",u.status),children:[e.jsx(E,{size:14,className:c.color,style:u.status==="active"?{color:c.color}:void 0}),u.status]}),u.heartbeatProcedureSource==="custom"&&e.jsx("span",{className:"badge",style:{fontSize:"10px",padding:"1px 6px"},children:"Heartbeat: custom"})]})]}),e.jsxs("div",{className:"run-details",children:[e.jsxs("span",{children:["Started ",je(u.startedAt)]}),e.jsx("span",{children:"•"}),e.jsx("span",{children:V}),u.triggerDetail&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"•"}),e.jsx("span",{className:"text-muted",children:u.triggerDetail})]})]})]}),g&&e.jsxs("div",{className:"run-logs-container",children:[w?e.jsxs("div",{className:"run-details-loading-state",children:[e.jsx(_,{size:14,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:"Loading details..."})]}):l&&e.jsxs("div",{className:"run-output-sections",children:[e.jsx("div",{className:"run-output-section",children:e.jsxs("details",{children:[e.jsx("summary",{className:"run-output-label",style:{cursor:"pointer",userSelect:"none"},children:"System Prompt"}),l.systemPrompt?e.jsx("pre",{className:"run-output-panel",children:l.systemPrompt}):e.jsx("div",{className:"text-muted run-output-empty",children:"System prompt not captured for this run"})]})}),e.jsx("div",{className:"run-output-section",children:e.jsxs("details",{children:[e.jsx("summary",{className:"run-output-label",style:{cursor:"pointer",userSelect:"none"},children:"Execution Prompt"}),l.executionPrompt?e.jsx("pre",{className:"run-output-panel",children:l.executionPrompt}):e.jsx("div",{className:"text-muted run-output-empty",children:"Execution prompt not captured for this run"})]})}),l.usageJson&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:"Token Usage"}),J(l.usageJson)]}),l.stdoutExcerpt&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:"Output"}),e.jsx("pre",{className:"run-output-panel",children:l.stdoutExcerpt.length>2e3?`${l.stdoutExcerpt.slice(0,2e3)}
|
|
17
|
+
|
|
18
|
+
... (truncated, ${l.stdoutExcerpt.length} chars total)`:l.stdoutExcerpt})]}),l.stderrExcerpt&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label run-output-label--error",children:"Errors"}),e.jsx("pre",{className:"run-output-panel run-output-panel--error",children:l.stderrExcerpt})]}),l.resultJson&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:"Result"}),e.jsx("pre",{className:"run-output-panel",children:JSON.stringify(l.resultJson,null,2)})]}),l.contextSnapshot&&Object.keys(l.contextSnapshot).length>0&&e.jsxs("div",{className:"run-output-section",children:[e.jsx("div",{className:"run-output-label",children:"Context"}),e.jsx("div",{className:"run-context-grid",children:Object.entries(l.contextSnapshot).map(([P,v])=>e.jsxs("span",{className:"run-context-item",children:[e.jsxs("span",{className:"text-muted",children:[P,":"]})," ",e.jsx("span",{children:String(v)})]},P))})]}),!l.stdoutExcerpt&&!l.stderrExcerpt&&!l.resultJson&&e.jsx("div",{className:"text-muted run-output-empty",children:"No output captured"})]}),e.jsxs("div",{className:"run-agent-logs-section",children:[e.jsx("div",{className:"run-output-label",children:"Agent Logs"}),L?e.jsxs("div",{className:"run-details-loading-state",children:[e.jsx(_,{size:14,className:"animate-spin"}),e.jsx("span",{className:"text-muted",children:"Loading logs..."})]}):f.length===0?e.jsx("div",{className:"text-muted run-output-empty",children:"No logs available for this run"}):e.jsx(pt,{entries:f,loading:!1})]})]})]},u.id)};return e.jsxs("div",{className:"runs-tab",children:[I&&e.jsxs("div",{style:{padding:"12px 16px",borderBottom:"1px solid var(--border-color)",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e.jsxs("span",{style:{fontSize:"12px",color:"var(--text-secondary)"},children:[r.length," run",r.length!==1?"s":"",R&&e.jsxs("span",{className:"run-live-indicator",style:{marginLeft:"8px"},children:[e.jsx("span",{className:"live-dot"}),"Live"]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[R&&e.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void G(),"aria-label":`Stop active run for ${d??a}`,children:[e.jsx(ve,{size:14})," Stop Run"]}),e.jsxs("button",{className:"btn btn--sm btn-task-create",onClick:()=>void U(),"aria-label":`Run now for ${d??a}`,children:[e.jsx(Fe,{size:14})," Run Now"]})]})]}),W.map((u,C)=>S(u,C,!0)),h.map((u,C)=>S(u,W.length+C,!1))]})}function Jt(s,a){const i=Math.floor((a.getTime()-s.getTime())/1e3);return i<60?`${i}s`:i<3600?`${Math.floor(i/60)}m ${i%60}s`:`${Math.floor(i/3600)}h ${Math.floor(i%3600/60)}m`}const Gt={triage:"Triage",todo:"Todo","in-progress":"In Progress","in-review":"In Review",done:"Done",archived:"Archived"};function Wt(s){const a=s.title?.trim()||s.description?.trim()||s.id;return a.length>80?`${a.slice(0,77)}...`:a}function qt({agentId:s,projectId:a,addToast:i}){const[o,d]=t.useState([]),[r,b]=t.useState(!0);return t.useEffect(()=>{let m=!1;return b(!0),lt(s,a).then(j=>{m||d(j)}).catch(j=>{m||(d([]),i(`Failed to load assigned tasks: ${q(j)}`,"error"))}).finally(()=>{m||b(!1)}),()=>{m=!0}},[s,a,i]),r?e.jsxs("div",{className:"agent-tasks-empty",children:[e.jsx(_,{size:16,className:"animate-spin"}),e.jsx("p",{children:"Loading assigned tasks..."})]}):o.length===0?e.jsxs("div",{className:"agent-tasks-empty",children:[e.jsx(Ts,{size:18}),e.jsx("p",{children:"No tasks assigned to this agent"})]}):e.jsx("div",{className:"agent-tasks-list",children:o.map(m=>e.jsxs("a",{className:"agent-task-item",href:`/tasks/${m.id}`,children:[e.jsxs("div",{className:"agent-task-row",children:[e.jsx("span",{className:"agent-task-id",children:m.id}),e.jsx("span",{className:`agent-task-column column-${m.column}`,children:Gt[m.column]})]}),e.jsx("div",{className:"agent-task-title",title:m.title||m.description||m.id,children:Wt(m)}),e.jsxs("div",{className:"agent-task-status",children:[m.status??"idle"," · Updated ",je(m.updatedAt)]})]},m.id))})}const pe=[{key:"maxRetries",label:"Max Retries",type:"number",placeholder:"3",hint:"Maximum number of automatic retries on task failure (0–10, default 3)",min:0,max:10},{key:"timeoutMs",label:"Task Timeout (ms)",type:"number",placeholder:"600000",hint:"Maximum time in ms before a task is considered timed out (minimum 60000ms, default 600000ms)",min:6e4,max:864e5},{key:"logLevel",label:"Log Level",type:"select",hint:"Verbosity of agent log output",options:[{value:"debug",label:"Debug"},{value:"info",label:"Info"},{value:"warn",label:"Warning"},{value:"error",label:"Error"}]}];function Kt(s){const a={};for(const i of pe){const o=s[i.key]?.trim();if(o){if(i.type==="number"){const d=Number(o);if(Number.isNaN(d)||!Number.isFinite(d)){a[i.key]=`"${i.label}" must be a valid number`;continue}i.min!==void 0&&d<i.min&&(a[i.key]=`"${i.label}" must be at least ${i.min.toLocaleString()}`),i.max!==void 0&&d>i.max&&(a[i.key]=`"${i.label}" must be at most ${i.max.toLocaleString()}`)}if(i.type==="select"){const d=i.options?.map(r=>r.value)??[];d.length>0&&!d.includes(o)&&(a[i.key]=`"${i.label}" must be one of: ${d.join(", ")}`)}}}return a}function Yt({agent:s,projectId:a,addToast:i,onSaved:o}){const[d,r]=t.useState(s.soul??""),[b,m]=t.useState(!1),[j,x]=t.useState(!1),[y,A]=t.useState(!1);t.useEffect(()=>{r(s.soul??""),x(!1),A(!1)},[s.id,s.soul]);const f=d!==(s.soul??""),B=async()=>{if(d.length>1e4){i("Soul must be at most 10,000 characters","error");return}m(!0);try{await vt(s.id,d,a),i("Soul saved","success"),x(!0),setTimeout(()=>x(!1),3e3),await o()}catch(L){i(`Failed to save soul: ${q(L)}`,"error")}finally{m(!1)}};return e.jsx("div",{className:"config-tab",children:e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Soul"}),e.jsx("p",{className:"config-description",children:"Define this agent's personality and identity."}),e.jsx("div",{className:"config-fields",children:e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-soul",children:"Agent Soul"}),e.jsx("div",{className:"agent-content-toolbar",children:e.jsxs("div",{className:"agent-content-mode-toggle",children:[e.jsxs("button",{className:`btn btn-sm ${y?"":"btn-primary"}`,onClick:()=>A(!1),disabled:!y,"aria-label":"Edit mode",children:[e.jsx(De,{size:14}),"Edit"]}),e.jsxs("button",{className:`btn btn-sm ${y?"btn-primary":""}`,onClick:()=>A(!0),disabled:y,"aria-label":"Preview mode",children:[e.jsx(Ee,{size:14}),"Preview"]})]})}),y?d.trim()?e.jsx("div",{className:"agent-content-preview markdown-body",children:e.jsx(Le,{remarkPlugins:[Pe],children:d})}):e.jsx("div",{className:"agent-content-preview agent-content-placeholder",children:"No soul defined yet. Switch to Edit mode to define the agent's personality."}):e.jsx("textarea",{id:"agent-soul",className:"input",rows:12,placeholder:"Describe this agent's personality, tone, and behavioral traits...",value:d,onChange:L=>{r(L.target.value),x(!1)},style:{fontFamily:"monospace",fontSize:"0.875rem",resize:"vertical"}}),!y&&e.jsx("span",{className:"config-hint",children:"Defines the agent's character and identity. Max 10,000 characters."})]})}),!y&&e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!f||b,onClick:()=>void B(),children:b?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:16,className:"animate-spin"}),"Saving…"]}):e.jsxs(e.Fragment,{children:[e.jsx(Z,{size:16}),"Save Soul"]})}),!f&&j&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(Z,{size:14}),"Soul saved"]})]})]})})}function Zt({agent:s,projectId:a,addToast:i,onSaved:o}){const[d,r]=t.useState(s.memory??""),[b,m]=t.useState(!1),[j,x]=t.useState(!1),[y,A]=t.useState(!1),[f,B]=t.useState([]),[L,T]=t.useState(!1),[l,p]=t.useState(""),[w,H]=t.useState(""),[D,R]=t.useState(!1),[k,U]=t.useState(!1),[G,I]=t.useState(!1),[M,W]=t.useState(!1),[h,J]=t.useState(""),S=s.state==="running",u=d!==(s.memory??""),C=t.useMemo(()=>f.find(v=>v.path===l),[f,l]),Q=C?Bt[C.layer]:"Select a memory file to view or edit.",c=t.useCallback(async v=>{U(!0);try{const O=await ot(s.id,v,a);p(O.path),H(O.content),R(!1),W(!1)}catch(O){i(`Failed to load agent memory file: ${q(O)}`,"error")}finally{U(!1)}},[s.id,a,i]),E=t.useCallback(async(v="")=>{T(!0);try{const{files:O}=await dt(s.id,a);if(B(O),O.length===0){p(""),H(""),R(!1);return}const le=It(O,v);await c(le)}catch(O){i(`Failed to load memory files: ${q(O)}`,"error"),B([]),p(""),H(""),R(!1)}finally{T(!1)}},[s.id,a,i,c]);t.useEffect(()=>{r(s.memory??""),x(!1),A(!1),J(""),W(!1),E()},[s.id,s.memory,E]);const V=async()=>{if(d.length>5e4){i("Memory must be at most 50,000 characters","error");return}m(!0);try{await jt(s.id,d,a),i("Memory saved","success"),x(!0),setTimeout(()=>x(!1),3e3),await o()}catch(v){i(`Failed to save memory: ${q(v)}`,"error")}finally{m(!1)}},g=async v=>{if(!(!v||v===l)){if(D){J("Save the current file before switching to another file.");return}J(""),await c(v)}},P=async()=>{if(l){I(!0);try{await Nt(s.id,l,w,a),R(!1),W(!0),setTimeout(()=>W(!1),3e3),J(""),await E(l),i("Agent memory file saved","success")}catch(v){i(`Failed to save agent memory file: ${q(v)}`,"error")}finally{I(!1)}}};return e.jsx("div",{className:"config-tab",children:e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Agent Memory"}),e.jsx("p",{className:"config-description",children:"Store context that belongs to this agent only. Workspace memory, daily notes, dreams, and qmd search live in project settings under Project Memory."}),S&&e.jsx("p",{className:"config-hint",style:{marginBottom:12},children:"Read-only while this agent is running."}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-memory",children:"Inline Memory"}),e.jsx("span",{className:"config-hint",style:{display:"block",marginBottom:8},children:"Short-form memory stored directly on the agent record and injected into prompts."}),e.jsx("div",{className:"agent-content-toolbar",children:e.jsxs("div",{className:"agent-content-mode-toggle",children:[!S&&e.jsxs("button",{className:`btn btn-sm ${y?"":"btn-primary"}`,onClick:()=>A(!1),disabled:!y,"aria-label":"Edit mode",children:[e.jsx(De,{size:14}),"Edit"]}),e.jsxs("button",{className:`btn btn-sm ${y?"btn-primary":""}`,onClick:()=>A(!0),disabled:y,"aria-label":"Preview mode",children:[e.jsx(Ee,{size:14}),"Preview"]})]})}),y?d.trim()?e.jsx("div",{className:"agent-content-preview markdown-body",children:e.jsx(Le,{remarkPlugins:[Pe],children:d})}):e.jsx("div",{className:"agent-content-preview agent-content-placeholder",children:"No agent memory defined yet. Switch to Edit mode to add memory content."}):e.jsx("textarea",{id:"agent-memory","aria-label":"Agent Memory",className:"input",rows:10,placeholder:"Durable preferences, operating habits, and context this agent should carry across tasks...",value:d,readOnly:S,onChange:v=>{r(v.target.value),x(!1)},style:{fontFamily:"monospace",fontSize:"0.875rem",resize:"vertical"}}),!y&&e.jsx("span",{className:"config-hint",children:"This is the inline memory field on the agent JSON record. Max 50,000 characters."})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-memory-file-select",children:"Memory Files"}),e.jsxs("span",{className:"config-hint",style:{display:"block",marginBottom:8},children:["Full OpenClaw memory files at ",e.jsxs("code",{children:[".fusion/agent-memory/",s.id,"/"]})," (MEMORY.md, DREAMS.md, and daily notes)."]}),e.jsx("select",{id:"agent-memory-file-select",className:"select",value:l,disabled:L||k||G||f.length===0,onChange:v=>{g(v.target.value)},children:f.length===0?e.jsx("option",{value:"",children:"No memory files found"}):f.map(v=>e.jsxs("option",{value:v.path,children:[js[v.layer]," • ",v.label]},v.path))}),L&&e.jsxs("span",{className:"config-hint",style:{display:"inline-flex",gap:6,marginTop:8},children:[e.jsx(_,{size:14,className:"animate-spin"}),"Loading memory files…"]}),C&&e.jsxs("div",{className:"config-hint",style:{marginTop:8},children:[e.jsx("strong",{children:js[C.layer]})," · ",Q,e.jsx("br",{}),C.size.toLocaleString()," bytes · Updated ",je(C.updatedAt)]}),e.jsx("textarea",{className:"input",rows:14,placeholder:"Select a memory file to view and edit its content...",value:w,readOnly:S||!l||k,onChange:v=>{H(v.target.value),R(!0),W(!1),J("")},style:{fontFamily:"monospace",fontSize:"0.875rem",resize:"vertical",marginTop:8}}),k&&e.jsxs("span",{className:"config-hint",style:{display:"inline-flex",gap:6,marginTop:8},children:[e.jsx(_,{size:14,className:"animate-spin"}),"Loading file content…"]}),h&&e.jsx("span",{className:"config-hint",style:{display:"block",marginTop:8},children:h})]})]}),e.jsxs("div",{className:"config-actions",children:[!y&&e.jsx("button",{className:"btn btn-task-create",disabled:!u||b||S,onClick:()=>void V(),children:b?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:16,className:"animate-spin"}),"Saving…"]}):e.jsxs(e.Fragment,{children:[e.jsx(Z,{size:16}),"Save Memory"]})}),e.jsx("button",{className:"btn",disabled:!D||G||!l||S,onClick:()=>void P(),children:G?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:16,className:"animate-spin"}),"Saving file…"]}):e.jsxs(e.Fragment,{children:[e.jsx(Z,{size:16}),"Save Memory File"]})}),!u&&j&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(Z,{size:14}),"Memory saved"]}),!D&&M&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(Z,{size:14}),"Memory file saved"]})]})]})})}function Qt({agent:s,projectId:a,addToast:i,onSaved:o}){const[d,r]=t.useState(s.instructionsText??""),[b,m]=t.useState(s.instructionsPath??""),[j,x]=t.useState(!1),[y,A]=t.useState(""),[f,B]=t.useState(!1),[L,T]=t.useState(!1),[l,p]=t.useState(!1),[w,H]=t.useState(!1),[D,R]=t.useState(!1),[k,U]=t.useState(!1);t.useEffect(()=>{const h=b.trim();if(!h){A(""),T(!1);return}B(!0),Ms("project",h).then(J=>{A(J.content),T(!1)}).catch(J=>{const S=q(J);S.includes("ENOENT")||S.includes("Not found")||S.includes("not found")?(A(""),T(!1)):(i(`Failed to load instructions file: ${S}`,"error"),A(""))}).finally(()=>{B(!1)})},[b,i]),t.useEffect(()=>{r(s.instructionsText??""),m(s.instructionsPath??""),R(!1),U(!1),x(!1)},[s.id,s.instructionsText,s.instructionsPath]);const G=(()=>{const h=d??"",J=s.instructionsText??"",S=b?.trim()??"",u=s.instructionsPath?.trim()??"";return h!==J||S!==u})(),I=async()=>{p(!0);try{await bt(s.id,{instructionsText:d||void 0,instructionsPath:b.trim()||void 0},a),i("Instructions saved","success"),R(!0),setTimeout(()=>R(!1),3e3),await o()}catch(h){i(`Failed to save instructions: ${q(h)}`,"error")}finally{p(!1)}},M=async()=>{const h=b.trim();if(!h){i("No instructions file path set","error");return}H(!0);try{await Fs("project",h,y),i("Instructions file saved","success"),T(!1),U(!0),setTimeout(()=>U(!1),3e3)}catch(J){i(`Failed to save instructions file: ${q(J)}`,"error")}finally{H(!1)}},W=!!b.trim();return e.jsxs("div",{className:"config-tab",children:[e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Custom Instructions"}),e.jsx("p",{className:"config-description",children:"Append custom instructions to this agent's system prompt at execution time. Use this to customize behavior, coding style, or project conventions without modifying built-in prompts."}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"instructions-text",children:"Inline Instructions"}),e.jsx("div",{className:"agent-content-toolbar",children:e.jsxs("div",{className:"agent-content-mode-toggle",children:[e.jsxs("button",{className:`btn btn-sm ${j?"":"btn-primary"}`,onClick:()=>x(!1),disabled:!j,"aria-label":"Edit mode","data-testid":"instructions-edit-toggle",children:[e.jsx(De,{size:14}),"Edit"]}),e.jsxs("button",{className:`btn btn-sm ${j?"btn-primary":""}`,onClick:()=>x(!0),disabled:j,"aria-label":"Preview mode","data-testid":"instructions-preview-toggle",children:[e.jsx(Ee,{size:14}),"Preview"]})]})}),j?d.trim()?e.jsx("div",{className:"agent-content-preview markdown-body",children:e.jsx(Le,{remarkPlugins:[Pe],children:d})}):e.jsx("div",{className:"agent-content-preview agent-content-placeholder",children:"No inline instructions defined yet. Switch to Edit mode to add instructions."}):e.jsx("textarea",{id:"instructions-text",className:"input",rows:10,placeholder:"Enter custom instructions to append to this agent's system prompt...",value:d,onChange:h=>{r(h.target.value),R(!1)},style:{fontFamily:"monospace",fontSize:"0.875rem",resize:"vertical"}}),!j&&e.jsx("span",{className:"config-hint",children:"Markdown formatting supported. Max 50,000 characters."})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"instructions-path",children:"Instructions File Path"}),e.jsx("input",{id:"instructions-path",type:"text",className:"input",placeholder:"e.g., .fusion/agents/my-agent-instructions.md",value:b,onChange:h=>{m(h.target.value),R(!1)}}),e.jsx("span",{className:"config-hint",children:"Path to a .md file (relative to project root). Contents are read and appended at execution time."})]})]}),!j&&e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!G||l,onClick:()=>void I(),children:l?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:16,className:"animate-spin"}),"Saving…"]}):e.jsxs(e.Fragment,{children:[e.jsx(Z,{size:16}),"Save Instructions"]})}),!G&&D&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(Z,{size:14}),"Instructions saved"]})]})]}),W&&e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Instructions File Editor"}),e.jsx("p",{className:"config-description",children:"Edit the instructions file directly. Changes are saved separately from the path configuration."}),e.jsx("div",{className:"config-fields",children:e.jsxs("div",{className:"config-field",children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"8px"},children:[e.jsx("label",{htmlFor:"instructions-file-content",children:"File Content"}),f&&e.jsxs("span",{className:"config-hint",style:{display:"flex",alignItems:"center",gap:"4px"},children:[e.jsx(_,{size:12,className:"animate-spin"}),"Loading..."]}),L&&!f&&e.jsx("span",{className:"config-hint",style:{color:"var(--color-warning, #e3b541)"},children:"Unsaved changes"})]}),e.jsx("textarea",{id:"instructions-file-content",className:"input",rows:20,placeholder:"File content will appear here when loaded...",value:y,readOnly:f,onChange:h=>{A(h.target.value),T(!0),U(!1)},style:{fontFamily:"monospace",fontSize:"0.875rem",resize:"vertical"}}),e.jsx("span",{className:"config-hint",children:"Edit the markdown file content directly. Save separately using the button below."})]})}),e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!L||w,onClick:()=>void M(),children:w?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:16,className:"animate-spin"}),"Saving…"]}):e.jsxs(e.Fragment,{children:[e.jsx(Z,{size:16}),"Save File"]})}),!L&&k&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(Z,{size:14}),"File saved"]})]})]})]})}function Ns(s){const a=s??{},i={};return a.heartbeatIntervalMs!==void 0&&a.heartbeatIntervalMs!==null&&(i.heartbeatIntervalMs=String(Number(a.heartbeatIntervalMs)/1e3)),a.heartbeatTimeoutMs!==void 0&&a.heartbeatTimeoutMs!==null&&(i.heartbeatTimeoutMs=String(Number(a.heartbeatTimeoutMs)/1e3)),a.maxConcurrentRuns!==void 0&&a.maxConcurrentRuns!==null&&(i.maxConcurrentRuns=String(a.maxConcurrentRuns)),(a.messageResponseMode==="immediate"||a.messageResponseMode==="on-heartbeat")&&(i.messageResponseMode=a.messageResponseMode),i}function Ve(s){return s?.enabled!==!1}function ys(s){const a=(s??{}).budgetConfig,i={};return a&&(a.tokenBudget!==void 0&&a.tokenBudget!==null&&(i.tokenBudget=String(a.tokenBudget)),a.usageThreshold!==void 0&&a.usageThreshold!==null&&(i.usageThreshold=String(Number(a.usageThreshold)*100)),a.budgetPeriod!==void 0&&a.budgetPeriod!==null&&(i.budgetPeriod=String(a.budgetPeriod)),a.resetDay!==void 0&&a.resetDay!==null&&(i.resetDay=String(a.resetDay))),i}function Xt({agent:s,projectId:a,addToast:i,onSaved:o}){const[d,r]=t.useState(!1),[b,m]=t.useState(!1),[j,x]=t.useState(!1),[y,A]=t.useState(!1),[f,B]=t.useState(!1),[L,T]=t.useState(""),[l,p]=t.useState(!1),[w,H]=t.useState(null),[D,R]=t.useState(!1),k=s.heartbeatProcedurePath?.trim(),U=`.fusion/agents/${s.id}/HEARTBEAT.md`,G=k===U,I=!!k,M=t.useCallback(async S=>{x(!0),H(null);try{const u=await Ms("project",S,a);T(u.content),p(!1)}catch(u){const C=q(u);H(C),i(`Failed to load heartbeat procedure file: ${C}`,"error")}finally{x(!1)}},[i,a]);t.useEffect(()=>{m(!1),B(!1),T(""),p(!1),H(null),x(!1),A(!1),R(!1)},[s.id,k]);const W=async()=>{k&&(m(!0),await M(k))},h=async()=>{if(k){A(!0);try{await Fs("project",k,L,a),p(!1),R(!0),i("Heartbeat procedure file saved","success"),setTimeout(()=>R(!1),3e3)}catch(S){i(`Failed to save heartbeat procedure file: ${q(S)}`,"error")}finally{A(!1)}}},J=async()=>{r(!0);try{const S=await Ct(s.id,a);i(S.procedureFileSeeded?`Heartbeat procedure file ready at ${S.heartbeatProcedurePath}`:`Heartbeat procedure path set to ${S.heartbeatProcedurePath}`,"success"),await o()}catch(S){i(`Failed to upgrade heartbeat procedure: ${q(S)}`,"error")}finally{r(!1)}};return e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Heartbeat Procedure"}),e.jsx("p",{className:"config-description",children:"The per-tick procedure this agent runs every wake. Defaults to a project-level markdown file you can edit. Resets on every tick — no need to restart the agent after editing."}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsxs("span",{className:"config-hint",children:["Current path: ",e.jsx("code",{children:k||"(none — using built-in default)"})]}),I&&e.jsx("div",{className:"heartbeat-procedure-actions",children:e.jsx("button",{className:"btn btn-sm",onClick:()=>void W(),disabled:j,children:j?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:16,className:"animate-spin"}),"Loading file…"]}):e.jsxs(e.Fragment,{children:[e.jsx(be,{size:16}),"View Heartbeat Markdown"]})})})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("button",{className:"btn",disabled:d||G,onClick:()=>void J(),"aria-label":"Upgrade agent to default heartbeat procedure file",children:d?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:16,className:"animate-spin"}),"Upgrading…"]}):G?e.jsxs(e.Fragment,{children:[e.jsx(Z,{size:16}),"Already on default"]}):"Upgrade to Default Heartbeat Procedure"}),e.jsxs("span",{className:"config-hint",children:["Sets ",e.jsx("code",{children:"heartbeatProcedurePath"})," to"," ",e.jsx("code",{children:U})," ","and seeds the file from the built-in template if it doesn't exist. Each agent gets its own per-agent file, so edits stay scoped to this agent. Operator edits to the file are preserved."]})]})]}),b&&I&&k&&e.jsxs("div",{className:"config-fields heartbeat-procedure-viewer",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"heartbeat-procedure-file-content",children:"Heartbeat Procedure File"}),e.jsxs("div",{className:"agent-content-toolbar",children:[e.jsxs("div",{className:"agent-content-mode-toggle",children:[e.jsxs("button",{className:`btn btn-sm ${f?"":"btn-primary"}`,onClick:()=>B(!1),disabled:!f,"aria-label":"Heartbeat file edit mode",children:[e.jsx(De,{size:14}),"Edit"]}),e.jsxs("button",{className:`btn btn-sm ${f?"btn-primary":""}`,onClick:()=>B(!0),disabled:f,"aria-label":"Heartbeat file preview mode",children:[e.jsx(Ee,{size:14}),"Preview"]})]}),j&&e.jsxs("span",{className:"config-hint heartbeat-procedure-status",children:[e.jsx(_,{size:12,className:"animate-spin"}),"Loading..."]}),l&&!j&&e.jsx("span",{className:"config-hint heartbeat-procedure-status heartbeat-procedure-status--warning",children:"Unsaved changes"})]}),f?L.trim()?e.jsx("div",{className:"agent-content-preview markdown-body",children:e.jsx(Le,{remarkPlugins:[Pe],children:L})}):e.jsx("div",{className:"agent-content-preview agent-content-placeholder",children:"No heartbeat procedure markdown content yet."}):e.jsx("textarea",{id:"heartbeat-procedure-file-content",className:"input",rows:16,value:L,readOnly:j,placeholder:"Heartbeat procedure markdown file content will appear here...",onChange:S=>{T(S.target.value),p(!0),R(!1)}}),w&&e.jsxs("span",{className:"config-error",children:["Failed to load file: ",w]}),e.jsxs("span",{className:"config-hint",children:["This editor writes directly to ",e.jsx("code",{children:k}),"."]})]}),!f&&e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!l||y||j,onClick:()=>void h(),children:y?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:16,className:"animate-spin"}),"Saving…"]}):e.jsxs(e.Fragment,{children:[e.jsx(Z,{size:16}),"Save Heartbeat File"]})}),!l&&D&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(Z,{size:14}),"File saved"]})]})]})]})}function ea({agent:s,projectId:a,addToast:i,onSaved:o,onHasChangesChange:d,onDelete:r}){const[b,m]=t.useState(s.name),[j,x]=t.useState(s.role),[y,A]=t.useState(s.title??""),[f,B]=t.useState(s.icon??""),[L,T]=t.useState(s.reportsTo??""),[l,p]=t.useState([]),[w,H]=t.useState(!1),[D,R]=t.useState(()=>{const n={};for(const F of pe){const z=s.metadata[F.key];z!=null&&(n[F.key]=String(z))}return n}),[k,U]=t.useState(()=>Ns(s.runtimeConfig)),[G,I]=t.useState(()=>Ve(s.runtimeConfig)),[M,W]=t.useState(()=>ys(s.runtimeConfig)),[h,J]=t.useState(s.bundleConfig?.mode??""),[S,u]=t.useState(s.bundleConfig?.entryFile??"AGENTS.md"),[C,Q]=t.useState(s.bundleConfig?.externalPath??""),[c,E]=t.useState(s.bundleConfig?.files??[]),[V,g]=t.useState(Array.isArray(s.metadata?.skills)?s.metadata.skills:[]),[P,v]=t.useState([]),[O,le]=t.useState(!1),[Ne,de]=t.useState([]),[$e,Ye]=t.useState(!1),ye=(()=>{const n=s.runtimeConfig??{};return n.modelProvider&&n.modelId?`${n.modelProvider}/${n.modelId}`:typeof n.model=="string"&&n.model.includes("/")?n.model:""})(),ce=typeof s.runtimeConfig?.runtimeHint=="string"?s.runtimeConfig.runtimeHint:"",[ae,ze]=t.useState(ce?"runtime":"model"),[oe,Ze]=t.useState(ye),[Se,Be]=t.useState(ce),ke=L.trim(),Qe=t.useMemo(()=>l.filter(n=>n.id!==s.id),[l,s.id]),Ds=!!ke&&!Qe.some(n=>n.id===ke);t.useEffect(()=>{let n=!1;return H(!0),ut(void 0,a).then(F=>{n||p(F)}).catch(()=>{n||p([])}).finally(()=>{n||H(!1)}),()=>{n=!0}},[a]),t.useEffect(()=>{le(!0),mt().then(n=>v(n.models)).catch(()=>{}).finally(()=>le(!1))},[]),t.useEffect(()=>{Ye(!0),Rs(a).then(de).catch(()=>de([])).finally(()=>Ye(!1))},[a]);const[ne,He]=t.useState(null),[Xe,es]=t.useState(!1);t.useEffect(()=>{Ue(s.id,a).then(He).catch(()=>He(null))},[s.id,a]);const Es=async()=>{es(!0);try{await St(s.id,a),i("Budget usage reset successfully","success");const n=await Ue(s.id,a);He(n)}catch(n){i(`Failed to reset budget: ${q(n)}`,"error")}finally{es(!1)}},[ss,ts]=t.useState(!1),[$,Ce]=t.useState({}),[Ls,ue]=t.useState(!1),as=s.state==="idle"||s.state==="terminated",he=t.useRef(null),ns=t.useRef(null);t.useEffect(()=>()=>{he.current&&clearTimeout(he.current)},[]);const ie=(()=>{if(b!==s.name||j!==s.role||y!==(s.title??"")||f!==(s.icon??"")||L!==(s.reportsTo??"")||h!==(s.bundleConfig?.mode??"")||S!==(s.bundleConfig?.entryFile??"AGENTS.md")||C!==(s.bundleConfig?.externalPath??"")||JSON.stringify(c)!==JSON.stringify(s.bundleConfig?.files??[]))return!0;for(const Y of pe){const re=D[Y.key]?.trim()??"",X=s.metadata[Y.key]!==void 0&&s.metadata[Y.key]!==null?String(s.metadata[Y.key]):"";if(re!==X)return!0}const n=s.runtimeConfig??{};if(G!==Ve(s.runtimeConfig))return!0;for(const Y of["heartbeatIntervalMs","heartbeatTimeoutMs","maxConcurrentRuns","messageResponseMode"]){const re=k[Y]?.trim()??"";let X=n[Y]!==void 0&&n[Y]!==null?String(n[Y]):"";if((Y==="heartbeatIntervalMs"||Y==="heartbeatTimeoutMs")&&X&&(X=String(Number(X)/1e3)),re!==X)return!0}const F=n.budgetConfig;for(const Y of["tokenBudget","budgetPeriod","resetDay"]){const re=M[Y]?.trim()??"",X=F?.[Y]!==void 0&&F?.[Y]!==null?String(F[Y]):"";if(re!==X)return!0}const z=M.usageThreshold?.trim()??"",se=F?.usageThreshold!==void 0&&F?.usageThreshold!==null?String(Number(F.usageThreshold)*100):"";if(z!==se)return!0;const ge=Array.isArray(s.metadata?.skills)?s.metadata.skills:[];return JSON.stringify(V)!==JSON.stringify(ge)||ae!==(ce?"runtime":"model")||oe!==ye||Se!==ce})(),is=t.useRef(null);t.useEffect(()=>{d&&is.current!==ie&&(is.current=ie,d(ie))},[ie,d]),t.useEffect(()=>()=>{d?.(!1)},[d]),t.useEffect(()=>{const n={id:s.id,updatedAt:s.updatedAt},F=ns.current;(!F||F.id!==n.id||F.updatedAt!==n.updatedAt)&&(ie||(ns.current=n,U(Ns(s.runtimeConfig)),I(Ve(s.runtimeConfig)),W(ys(s.runtimeConfig)),Ze(ye),Be(ce),ze(ce?"runtime":"model")))},[s,ie,ye,ce]);const rs=(n,F)=>{R(z=>({...z,[n]:F})),ue(!1),$[n]&&Ce(z=>{const se={...z};return delete se[n],se})},we=(n,F)=>{U(z=>({...z,[n]:F})),ue(!1),$[n]&&Ce(z=>{const se={...z};return delete se[n],se})},Ps=n=>{I(n),ue(!1)},Re=(n,F)=>{W(z=>({...z,[n]:F})),ue(!1),$[n]&&Ce(z=>{const se={...z};return delete se[n],se})},$s=async()=>{const n=Kt(D);for(const[N,te]of Object.entries({heartbeatIntervalMs:{label:"Heartbeat Interval",min:1},heartbeatTimeoutMs:{label:"Heartbeat Timeout",min:5},maxConcurrentRuns:{label:"Max Concurrent Runs",min:1}})){const fe=k[N]?.trim();if(!fe)continue;const Oe=Number(fe);Number.isNaN(Oe)||!Number.isFinite(Oe)?n[N]=`"${te.label}" must be a valid number`:Oe<te.min&&(n[N]=`"${te.label}" must be at least ${te.min.toLocaleString()}`)}const F=k.messageResponseMode?.trim();F&&!["immediate","on-heartbeat"].includes(F)&&(n.messageResponseMode='"Message Response Mode" must be either immediate or on-heartbeat');const z=M.tokenBudget?.trim();if(z){const N=Number(z);Number.isNaN(N)||!Number.isFinite(N)?n.tokenBudget='"Token Budget" must be a valid number':N<=0&&(n.tokenBudget='"Token Budget" must be greater than 0')}const se=M.usageThreshold?.trim();if(se){const N=Number(se);Number.isNaN(N)||!Number.isFinite(N)?n.usageThreshold='"Usage Threshold" must be a valid number':(N<1||N>100)&&(n.usageThreshold='"Usage Threshold" must be between 1 and 100')}const ge=M.budgetPeriod?.trim();ge&&!["daily","weekly","monthly","lifetime"].includes(ge)&&(n.budgetPeriod='"Budget Period" must be one of: daily, weekly, monthly, lifetime');const Y=M.resetDay?.trim(),re=ge||"lifetime";if(Y){const N=Number(Y);Number.isNaN(N)||!Number.isFinite(N)?n.resetDay='"Reset Day" must be a valid number':re==="weekly"?(N<0||N>6||!Number.isInteger(N))&&(n.resetDay='"Reset Day" must be between 0 (Sunday) and 6 (Saturday) for weekly period'):re==="monthly"&&(N<1||N>31||!Number.isInteger(N))&&(n.resetDay='"Reset Day" must be between 1 and 31 for monthly period')}if(Object.keys(n).length>0){Ce(n),i("Please fix validation errors before saving","error");return}const X={...s.metadata};for(const N of pe){const te=D[N.key]?.trim();te?N.type==="number"?X[N.key]=Number(te):X[N.key]=te:delete X[N.key]}V.length>0?X.skills=V:delete X.skills;const K={...s.runtimeConfig};K.enabled=G;for(const N of["heartbeatIntervalMs","heartbeatTimeoutMs","maxConcurrentRuns"]){const te=k[N]?.trim();if(!te)delete K[N];else{const fe=Number(te);K[N]=N==="maxConcurrentRuns"?fe:fe*1e3}}const ls=k.messageResponseMode?.trim();if(ls?K.messageResponseMode=ls:delete K.messageResponseMode,ae==="runtime")Se.trim()?K.runtimeHint=Se.trim():delete K.runtimeHint,delete K.modelProvider,delete K.modelId,delete K.model;else if(delete K.runtimeHint,oe.trim()){const N=oe.indexOf("/");N!==-1&&(K.modelProvider=oe.slice(0,N),K.modelId=oe.slice(N+1),K.model=oe.trim())}else delete K.modelProvider,delete K.modelId,delete K.model;const me={},cs=M.tokenBudget?.trim(),os=M.usageThreshold?.trim(),ds=M.budgetPeriod?.trim(),us=M.resetDay?.trim();cs&&(me.tokenBudget=Number(cs)),os&&(me.usageThreshold=Number(os)/100),ds&&(me.budgetPeriod=ds),us&&(me.resetDay=Number(us)),Object.keys(me).length>0?K.budgetConfig=me:delete K.budgetConfig;let Ie;h&&(Ie={mode:h,entryFile:S||"AGENTS.md",files:c.length>0?c:["AGENTS.md"]},h==="external"&&C.trim()&&(Ie.externalPath=C.trim())),ts(!0);try{await kt(s.id,{name:b.trim()||void 0,role:j,title:y.trim()||void 0,icon:f.trim()||void 0,reportsTo:L.trim()||void 0,metadata:X,runtimeConfig:K,bundleConfig:Ie},a),i("Settings saved","success"),ue(!0),he.current&&clearTimeout(he.current),he.current=setTimeout(()=>ue(!1),3e3),await o()}catch(N){i(`Failed to save settings: ${q(N)}`,"error")}finally{ts(!1)}};return e.jsxs("div",{className:"config-tab",children:[e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Agent Configuration"}),e.jsx("p",{className:"config-description",children:"Configure agent settings and behavior."}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-name",children:"Name"}),e.jsx("input",{id:"agent-name",type:"text",className:"input",value:b,onChange:n=>m(n.target.value)})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-role",children:"Role"}),e.jsxs("select",{id:"agent-role",className:"select",value:j,onChange:n=>x(n.target.value),children:[e.jsx("option",{value:"triage",children:"Triage"}),e.jsx("option",{value:"executor",children:"Executor"}),e.jsx("option",{value:"reviewer",children:"Reviewer"}),e.jsx("option",{value:"merger",children:"Merger"}),e.jsx("option",{value:"scheduler",children:"Scheduler"}),e.jsx("option",{value:"custom",children:"Custom"})]})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-title",children:"Title"}),e.jsx("input",{id:"agent-title",type:"text",className:"input",placeholder:"e.g. Senior Code Reviewer",value:y,onChange:n=>A(n.target.value)})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-icon",children:"Icon"}),e.jsx("input",{id:"agent-icon",type:"text",className:"input",placeholder:"e.g. 🤖",value:f,onChange:n=>B(n.target.value)})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-reports-to",children:"Reports To"}),e.jsxs("select",{id:"agent-reports-to",className:"select",value:L,onChange:n=>T(n.target.value),disabled:w,children:[e.jsx("option",{value:"",children:"No manager"}),Ds&&e.jsxs("option",{value:ke,children:["Unknown manager (",ke,")"]}),Qe.map(n=>e.jsxs("option",{value:n.id,children:[n.name," (",n.id,")"]},n.id))]})]})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Skills"}),e.jsx("p",{className:"config-description",children:"Assign skills to this agent for specialized behavior."}),e.jsx("div",{className:"config-fields",children:e.jsx("div",{className:"config-field",children:e.jsx(wt,{id:"agent-skills",label:"Skills",value:V,onChange:g,projectId:a})})})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Model"}),e.jsx("p",{className:"config-description",children:"Choose either a built-in model or a plugin runtime for this agent. These options are mutually exclusive."}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{children:"Runtime Source"}),e.jsxs("div",{className:"config-runtime-tabs",role:"tablist","aria-label":"Runtime source",children:[e.jsx("button",{type:"button",className:`config-runtime-tab${ae==="model"?" active":""}`,role:"tab","aria-selected":ae==="model",tabIndex:ae==="model"?0:-1,onClick:()=>{ze("model"),Be("")},children:"Built-in Model"}),e.jsx("button",{type:"button",className:`config-runtime-tab${ae==="runtime"?" active":""}`,role:"tab","aria-selected":ae==="runtime",tabIndex:ae==="runtime"?0:-1,onClick:()=>ze("runtime"),children:"Plugin Runtime"})]})]}),ae==="model"?e.jsx("div",{className:"config-field",children:e.jsx(ht,{models:P,value:oe,onChange:Ze,placeholder:"Use global default",label:"Agent Model",disabled:O})}):e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"agent-runtime-hint",children:"Runtime"}),$e?e.jsx("span",{className:"config-hint",children:"Loading runtimes…"}):e.jsxs("select",{id:"agent-runtime-hint",className:"select",value:Se,onChange:n=>Be(n.target.value),children:[e.jsx("option",{value:"",children:Ne.length>0?"Select a plugin runtime…":"No plugin runtimes available"}),Ne.map(n=>e.jsx("option",{value:n.runtimeId,children:n.description?`${n.name} — ${n.description}`:n.name},`${n.pluginId}:${n.runtimeId}`))]})]})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Heartbeat Settings"}),e.jsx("p",{className:"config-description",children:"Configure how this agent's heartbeat is monitored. Leave a field empty to use system defaults."}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsxs("label",{className:"checkbox-label",htmlFor:"hb-enabled",children:[e.jsx("input",{id:"hb-enabled",type:"checkbox",checked:G,onChange:n=>Ps(n.target.checked)}),"Heartbeat Enabled"]}),e.jsx("span",{className:"config-hint",children:"When enabled, this agent receives scheduled heartbeat runs based on its interval."})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-heartbeatIntervalMs",children:"Heartbeat Interval (s)"}),e.jsx("input",{id:"hb-heartbeatIntervalMs",type:"text",inputMode:"numeric",className:ee("input",!!$.heartbeatIntervalMs&&"input--error"),placeholder:String(Je/1e3),value:k.heartbeatIntervalMs??"",onChange:n=>we("heartbeatIntervalMs",n.target.value)}),$.heartbeatIntervalMs?e.jsx("span",{className:"config-error",children:$.heartbeatIntervalMs}):e.jsxs("span",{className:"config-hint",children:["How often heartbeats are checked. Leave empty for system default (",Je/1e3,"s / ",Ht,")."]})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-heartbeatTimeoutMs",children:"Heartbeat Timeout (s)"}),e.jsx("input",{id:"hb-heartbeatTimeoutMs",type:"text",inputMode:"numeric",className:ee("input",!!$.heartbeatTimeoutMs&&"input--error"),placeholder:"60",value:k.heartbeatTimeoutMs??"",onChange:n=>we("heartbeatTimeoutMs",n.target.value)}),$.heartbeatTimeoutMs?e.jsx("span",{className:"config-error",children:$.heartbeatTimeoutMs}):e.jsx("span",{className:"config-hint",children:"Time without heartbeat before agent is considered unresponsive. Leave empty for system default (60s)"})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-maxConcurrentRuns",children:"Max Concurrent Runs"}),e.jsx("input",{id:"hb-maxConcurrentRuns",type:"text",inputMode:"numeric",className:ee("input",!!$.maxConcurrentRuns&&"input--error"),placeholder:"1",value:k.maxConcurrentRuns??"",onChange:n=>we("maxConcurrentRuns",n.target.value)}),$.maxConcurrentRuns?e.jsx("span",{className:"config-error",children:$.maxConcurrentRuns}):e.jsx("span",{className:"config-hint",children:"Maximum simultaneous heartbeat runs for this agent. Leave empty for system default (1)."})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"hb-messageResponseMode",children:"Message Response Mode"}),e.jsxs("select",{id:"hb-messageResponseMode",className:ee("select",!!$.messageResponseMode&&"input--error"),value:k.messageResponseMode??"",onChange:n=>we("messageResponseMode",n.target.value),children:[e.jsx("option",{value:"",children:"System Default (On Heartbeat)"}),e.jsx("option",{value:"on-heartbeat",children:"On Heartbeat"}),e.jsx("option",{value:"immediate",children:"Immediate"})]}),$.messageResponseMode?e.jsx("span",{className:"config-error",children:$.messageResponseMode}):e.jsx("span",{className:"config-hint",children:"How this agent responds to incoming messages. 'Immediate' wakes the agent as soon as a message arrives. 'On Heartbeat' defers processing to the next scheduled heartbeat."})]})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Budget Settings"}),e.jsx("p",{className:"config-description",children:"Configure token budget limits for this agent. Leave all fields empty to disable budget tracking."}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"budget-tokenBudget",children:"Token Budget"}),e.jsx("input",{id:"budget-tokenBudget",type:"text",inputMode:"numeric",className:ee("input",!!$.tokenBudget&&"input--error"),placeholder:"No limit",value:M.tokenBudget??"",onChange:n=>Re("tokenBudget",n.target.value)}),$.tokenBudget?e.jsx("span",{className:"config-error",children:$.tokenBudget}):e.jsx("span",{className:"config-hint",children:"Total token cap (input + output) for this agent. Leave empty for no limit."})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"budget-usageThreshold",children:"Usage Threshold (%)"}),e.jsx("input",{id:"budget-usageThreshold",type:"text",inputMode:"numeric",className:ee("input",!!$.usageThreshold&&"input--error"),placeholder:"80",value:M.usageThreshold??"",onChange:n=>Re("usageThreshold",n.target.value)}),$.usageThreshold?e.jsx("span",{className:"config-error",children:$.usageThreshold}):e.jsx("span",{className:"config-hint",children:"Warning threshold as a percentage. Agent warns when usage reaches this level. Default: 80%."})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"budget-budgetPeriod",children:"Budget Period"}),e.jsxs("select",{id:"budget-budgetPeriod",className:ee("select",!!$.budgetPeriod&&"input--error"),value:M.budgetPeriod??"",onChange:n=>Re("budgetPeriod",n.target.value),children:[e.jsx("option",{value:"",children:"No reset (lifetime)"}),e.jsx("option",{value:"daily",children:"Daily"}),e.jsx("option",{value:"weekly",children:"Weekly"}),e.jsx("option",{value:"monthly",children:"Monthly"})]}),$.budgetPeriod?e.jsx("span",{className:"config-error",children:$.budgetPeriod}):e.jsx("span",{className:"config-hint",children:"How often the budget counter resets. Leave empty for lifetime budget."})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"budget-resetDay",children:"Reset Day"}),e.jsx("input",{id:"budget-resetDay",type:"text",inputMode:"numeric",className:ee("input",!!$.resetDay&&"input--error"),placeholder:"Auto",value:M.resetDay??"",onChange:n=>Re("resetDay",n.target.value)}),$.resetDay?e.jsx("span",{className:"config-error",children:$.resetDay}):e.jsx("span",{className:"config-hint",children:M.budgetPeriod==="weekly"?"Day of week (0=Sunday to 6=Saturday) for reset.":M.budgetPeriod==="monthly"?"Day of month (1-31) for reset.":"Day for reset (weekly: 0-6, monthly: 1-31). Leave empty for automatic."})]}),ne?.budgetLimit!=null&&e.jsxs("div",{className:"config-field",children:[e.jsx("label",{children:"Current Usage"}),e.jsxs("div",{className:"budget-progress-container",children:[e.jsx("div",{className:"budget-progress-bar",children:e.jsx("div",{className:ee("budget-progress-bar__fill",(ne.usagePercent??0)>=100?"budget-progress-bar__fill--red":(ne.usagePercent??0)>=80?"budget-progress-bar__fill--amber":"budget-progress-bar__fill--green"),style:{width:`${Math.min(ne.usagePercent??0,100)}%`}})}),e.jsxs("span",{className:"budget-progress-label",children:[(ne.currentUsage??0).toLocaleString()," / ",(ne.budgetLimit??0).toLocaleString()," tokens (",Math.round(ne.usagePercent??0),"% used)"]})]})]}),ne?.budgetLimit!=null&&e.jsx("div",{className:"config-field",children:e.jsx("button",{className:"btn btn-reset-budget",onClick:()=>void Es(),disabled:Xe,children:Xe?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:14,className:"animate-spin"}),"Resetting…"]}):e.jsxs(e.Fragment,{children:[e.jsx(We,{size:14}),"Reset Budget Usage"]})})})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Instruction Bundle"}),e.jsx("p",{className:"config-description",children:"Configure the agent's instruction bundle. Leave empty to use inline instructions only."}),e.jsxs("div",{className:"config-fields",children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"bundle-mode",children:"Bundle Mode"}),e.jsxs("select",{id:"bundle-mode",className:"select",value:h,onChange:n=>J(n.target.value),children:[e.jsx("option",{value:"",children:"None (use inline instructions)"}),e.jsx("option",{value:"managed",children:"Managed (system-managed directory)"}),e.jsx("option",{value:"external",children:"External (user-specified path)"})]}),e.jsxs("span",{className:"config-hint",children:[h==="managed"&&"Files will be stored in a system-managed directory within .fusion/agents/",h==="external"&&"Specify an external directory path for the instruction files",!h&&"Select a mode to enable instruction bundling"]})]}),h&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"bundle-entry-file",children:"Entry File"}),e.jsx("input",{id:"bundle-entry-file",type:"text",className:"input",placeholder:"AGENTS.md",value:S,onChange:n=>u(n.target.value)}),e.jsx("span",{className:"config-hint",children:"Primary instructions file name (default: AGENTS.md)"})]}),h==="external"&&e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"bundle-external-path",children:"External Path"}),e.jsx("input",{id:"bundle-external-path",type:"text",className:"input",placeholder:"e.g. .fusion/agents/my-agent",value:C,onChange:n=>Q(n.target.value)}),e.jsx("span",{className:"config-hint",children:"Absolute or relative path to the external directory"})]}),e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:"bundle-files",children:"Files (comma-separated)"}),e.jsx("input",{id:"bundle-files",type:"text",className:"input",placeholder:"AGENTS.md, PROMPTS.md",value:c.join(", "),onChange:n=>E(n.target.value.split(",").map(F=>F.trim()).filter(Boolean))}),e.jsx("span",{className:"config-hint",children:"List of file names in the bundle directory"})]})]})]})]}),e.jsxs("div",{className:"config-section",children:[e.jsx("h3",{children:"Advanced Settings"}),e.jsx("p",{className:"config-description",children:"Advanced configuration options for this agent. Leave a field empty to use system defaults."}),e.jsx("div",{className:"config-fields",children:pe.map(n=>{const F=!!$[n.key];return e.jsxs("div",{className:"config-field",children:[e.jsx("label",{htmlFor:`adv-${n.key}`,children:n.label}),n.type==="select"?e.jsxs("select",{id:`adv-${n.key}`,className:ee("select",F&&"input--error"),value:D[n.key]??"",onChange:z=>rs(n.key,z.target.value),children:[e.jsx("option",{value:"",children:"System Default"}),n.options?.map(z=>e.jsx("option",{value:z.value,children:z.label},z.value))]}):e.jsx("input",{id:`adv-${n.key}`,type:"text",inputMode:n.type==="number"?"numeric":void 0,className:ee("input",F&&"input--error"),placeholder:n.placeholder,value:D[n.key]??"",onChange:z=>rs(n.key,z.target.value)}),F&&e.jsx("span",{className:"config-error",children:$[n.key]}),!F&&n.hint&&e.jsx("span",{className:"config-hint",children:n.hint})]},n.key)})}),e.jsxs("div",{className:"config-actions",children:[e.jsx("button",{className:"btn btn-task-create",disabled:!ie||ss,onClick:()=>void $s(),children:ss?e.jsxs(e.Fragment,{children:[e.jsx(_,{size:16,className:"animate-spin"}),"Saving…"]}):e.jsxs(e.Fragment,{children:[e.jsx(Z,{size:16}),"Save Settings"]})}),!ie&&Ls&&e.jsxs("span",{className:"config-saved-indicator",children:[e.jsx(Z,{size:14}),"Settings saved"]})]})]}),e.jsx(Xt,{agent:s,projectId:a,addToast:i,onSaved:o}),e.jsxs("div",{className:"config-section config-section--danger",children:[e.jsx("h3",{children:"Danger Zone"}),e.jsx("p",{className:"config-description",children:"Permanently delete this agent from the project."}),e.jsx("div",{className:"config-fields",children:e.jsxs("div",{className:"config-field",children:[e.jsxs("button",{className:"btn btn--danger",disabled:!as||!r,onClick:()=>void r?.(),children:[e.jsx(Te,{size:16}),"Delete Agent"]}),e.jsx("span",{className:"config-danger-note",children:as?"Deletion is permanent and cannot be undone.":`Agent deletion is only available when state is idle or terminated (current state: ${s.state}).`})]})})]})]})}function sa({agentId:s,projectId:a,onChildClick:i}){const[o,d]=t.useState([]),[r,b]=t.useState(!0);return t.useEffect(()=>{b(!0),ct(s,a).then(d).finally(()=>b(!1))},[s,a]),r?e.jsxs("div",{className:"detail-section",children:[e.jsx("div",{className:"detail-section-header",children:e.jsx("h3",{children:"Employees"})}),e.jsxs("div",{className:"detail-section-body",style:{display:"flex",alignItems:"center",gap:8,padding:16},children:[e.jsx(_,{size:16,className:"spin"}),e.jsx("span",{className:"text-secondary",children:"Loading employees..."})]})]}):e.jsxs("div",{className:"detail-section",children:[e.jsxs("div",{className:"detail-section-header",children:[e.jsx("h3",{children:"Employees"}),e.jsxs("span",{className:"text-secondary",children:["(",o.length,")"]})]}),e.jsx("div",{className:"detail-section-body",children:o.length===0?e.jsxs("div",{className:"agent-empty",style:{padding:24},children:[e.jsx(qe,{size:32,opacity:.3}),e.jsx("p",{children:"No employees"}),e.jsx("p",{className:"text-secondary",children:"This agent has no employees"})]}):e.jsx("div",{className:"agent-tree__children",children:o.map(m=>{const j=Ke[m.state];return e.jsxs("div",{className:"agent-tree__node agent-is-child",onClick:()=>i?.(m.id),role:"button",tabIndex:0,onKeyDown:x=>x.key==="Enter"&&i?.(m.id),style:{cursor:i?"pointer":"default"},children:[e.jsx("span",{className:"agent-tree__icon",children:m.icon??"🤖"}),e.jsx("span",{className:"agent-tree__name",children:m.name}),e.jsx("span",{className:"agent-tree__badge",style:{background:j?.bg??"var(--state-idle-bg)",color:j?.text??"var(--state-idle-text)",border:`1px solid ${j?.border??"var(--state-idle-border)"}`},children:m.state})]},m.id)})})})]})}export{ca as AgentDetailView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-detail-overlay{position:fixed;inset:0;background:#0009;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}.agent-detail-modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;min-width:480px;max-width:calc(100vw - 40px);min-height:320px;max-height:calc(100dvh - 40px);display:flex;flex-direction:column;overflow:hidden;resize:both;box-shadow:0 20px 60px #0000004d}.agent-detail-modal:not([style*=width]){width:min(900px,calc(100vw - 40px))}.agent-detail-modal:not([style*=height]){height:min(85vh,calc(100dvh - 40px))}.agent-detail-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);padding:60px;color:var(--text-muted)}.agent-detail-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:12px 20px;border-bottom:1px solid var(--border);background:var(--bg-secondary)}.agent-detail-identity{display:flex;align-items:center;gap:var(--space-md);flex-shrink:0;min-width:0}.agent-detail-icon{width:36px;height:36px;border-radius:var(--radius-md);background:var(--todo);display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0}.agent-detail-info{min-width:0}.agent-detail-info h2{font-size:16px;font-weight:600;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{display:flex;gap:var(--space-xs);margin-top:2px}.agent-detail-controls{display:flex;align-items:center;gap:6px;flex-shrink:0}.btn--compact{padding:5px 10px;font-size:12px;gap:4px}.agent-detail-utility-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0}.agent-detail-title{display:flex;align-items:center;gap:var(--space-lg)}.agent-detail-actions{display:flex;align-items:center;gap:var(--space-sm)}.agent-detail-tabs{display:flex;gap:4px;padding:0 20px;border-bottom:1px solid var(--border);background:var(--bg-secondary)}.agent-detail-tab{display:flex;align-items:center;gap:var(--space-xs);padding:10px 12px;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-size:13px;cursor:pointer;transition:all var(--transition-fast)}.agent-detail-tab:hover{color:var(--text);background:var(--card-hover)}.agent-detail-tab.active{color:var(--todo);border-bottom-color:var(--todo)}.agent-detail-content{flex:1;overflow-y:auto;padding:24px}.agent-detail-footer{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md) 24px;border-top:1px solid var(--border);background:var(--bg-secondary);font-size:12px;color:var(--text-muted)}.agent-detail-id{font-family:var(--font-mono);cursor:pointer}.agent-detail-id:hover{color:var(--text)}.dashboard-tab{display:flex;flex-direction:column;gap:24px}.dashboard-section{background:var(--bg-secondary);border-radius:var(--radius-md);padding:20px}.dashboard-section h3{font-size:14px;font-weight:600;margin:0 0 var(--space-lg) 0;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--space-lg)}.info-item{display:flex;flex-direction:column;gap:4px}.info-label{font-size:12px;color:var(--text-muted)}.info-value{font-size:14px;font-weight:500}.inline-badge{display:inline-block;padding:2px var(--space-sm);border-radius:var(--radius-sm);font-size:12px;text-transform:capitalize}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-lg)}.stat-card{background:var(--surface);border-radius:var(--radius-md);padding:var(--space-lg);text-align:center}.stat-value{font-size:28px;font-weight:700;color:var(--todo)}.stat-label{font-size:12px;color:var(--text-muted);margin-top:4px}.current-task{display:flex;align-items:center;gap:var(--space-md)}.task-badge{font-family:var(--font-mono);background:var(--surface);padding:6px var(--space-md);border-radius:var(--radius-sm);font-size:14px}.metadata-json{background:var(--surface);padding:var(--space-md);border-radius:var(--radius-sm);font-size:12px;overflow-x:auto;margin:0}.logs-tab{display:flex;flex-direction:column;height:100%}.logs-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:var(--space-md);margin-bottom:var(--space-md);border-bottom:1px solid var(--border)}.logs-count{font-size:12px;color:var(--text-muted)}.streaming-indicator{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--color-success)}.streaming-dot{width:8px;height:8px;background:var(--color-success);border-radius:50%;animation:pulse 1.5s infinite}.logs-container{flex:1;overflow-y:auto;font-family:var(--font-mono);font-size:13px;line-height:1.6;max-height:400px}.logs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;color:var(--text-muted);text-align:center}.logs-empty p{margin:var(--space-sm) 0 0 0}.log-entry{display:flex;gap:var(--space-sm);padding:4px var(--space-sm);margin:2px 0;border-radius:var(--radius-sm)}.log-timestamp{color:var(--text-muted);font-size:11px;flex-shrink:0}.log-agent{color:var(--text-muted);font-size:11px;font-weight:600;text-transform:uppercase;flex-shrink:0}.log-icon{flex-shrink:0}.log-text{word-break:break-word}.log-detail{color:var(--text-muted);font-size:12px}.runs-tab{display:flex;flex-direction:column;gap:var(--space-md)}.runs-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px;color:var(--text-muted);text-align:center}.runs-empty p{margin:var(--space-sm) 0 0 0}.run-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg)}.run-card--active{border-color:var(--in-progress);background:color-mix(in srgb,var(--in-progress) 5%,transparent)}.run-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-sm)}.run-live-indicator{display:flex;align-items:center;gap:6px;font-weight:600;color:var(--in-progress)}.live-dot{width:8px;height:8px;background:var(--in-progress);border-radius:50%;animation:pulse 1.5s infinite}.run-id{font-family:var(--font-mono);font-size:13px;color:var(--text-muted)}.run-status{display:flex;align-items:center;gap:6px;font-size:13px;text-transform:capitalize}.run-status.active{color:var(--in-progress)}.run-status.completed{color:var(--color-success)}.run-status.failed{color:var(--color-error)}.run-status.terminated{color:var(--text-muted)}.run-details{display:flex;gap:var(--space-sm);font-size:12px;color:var(--text-muted)}.run-logs-container{padding:var(--space-md);background:var(--bg-secondary);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.run-details-loading-state{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) 0}.run-output-sections{margin-bottom:var(--space-md)}.run-output-section{margin-bottom:var(--space-sm)}.run-output-label{margin-bottom:var(--space-xs);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;letter-spacing:calc(var(--space-xs) * .1);text-transform:uppercase}.run-output-label--error{color:var(--color-error)}.run-output-panel{margin:0;max-height:calc(var(--space-2xl) * 6.25);overflow:auto;border-radius:var(--radius-sm);padding:var(--space-sm) var(--space-md);background:var(--surface);border:1px solid var(--border);white-space:pre-wrap;word-break:break-word;font-size:calc(var(--space-sm) + var(--space-xs));line-height:1.5}.run-output-panel--error{color:var(--color-error);border-color:color-mix(in srgb,var(--color-error) 35%,var(--border));background:color-mix(in srgb,var(--color-error) 10%,transparent)}.run-context-grid{display:flex;flex-wrap:wrap;gap:var(--space-xs) var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs))}.run-context-item{line-height:1.5}.run-output-empty{padding:var(--space-sm) 0;font-style:italic;font-size:calc(var(--space-sm) + var(--space-xs))}.run-agent-logs-section{margin-top:var(--space-xs);padding-top:var(--space-sm);border-top:1px solid var(--border)}.agent-tasks-list{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-task-item{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-secondary);text-decoration:none;transition:background var(--transition-fast),border-color var(--transition-fast)}.agent-task-item:hover{background:var(--card-hover);border-color:var(--text-dim)}.agent-task-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.agent-task-id{font-family:var(--font-mono);font-size:12px;font-weight:600;color:var(--todo)}.agent-task-title{font-size:14px;font-weight:500;color:var(--text);line-height:1.4}.agent-task-status{font-size:12px;color:var(--text-muted)}.agent-task-column{display:inline-flex;align-items:center;padding:2px 8px;border-radius:9999px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px}.agent-task-column.column-triage{color:var(--triage, #1f6feb);background:color-mix(in srgb,var(--triage, #1f6feb) 18%,transparent)}.agent-task-column.column-todo{color:var(--todo, #58a6ff);background:color-mix(in srgb,var(--todo, #58a6ff) 18%,transparent)}.agent-task-column.column-in-progress{color:var(--in-progress, #bc8cff);background:color-mix(in srgb,var(--in-progress, #bc8cff) 18%,transparent)}.agent-task-column.column-in-review{color:var(--in-review, #f2cc60);background:color-mix(in srgb,var(--in-review, #f2cc60) 18%,transparent)}.agent-task-column.column-done{color:var(--done, #3fb950);background:color-mix(in srgb,var(--done, #3fb950) 18%,transparent)}.agent-task-column.column-archived{color:var(--text-muted);background:color-mix(in srgb,var(--text-muted) 18%,transparent)}.agent-tasks-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:48px;color:var(--text-muted);text-align:center}.agent-tasks-empty p{margin:0}.config-tab{display:flex;flex-direction:column;gap:24px}.config-section{background:var(--bg-secondary);border-radius:var(--radius-md);padding:20px}.config-section h3{font-size:16px;font-weight:600;margin:0 0 var(--space-sm) 0}.config-section--danger{border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent)}.config-danger-note{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.agent-content-toolbar{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-lg);border-bottom:1px solid var(--border);background:var(--surface);flex-shrink:0}.agent-content-mode-toggle{display:flex;align-items:center;gap:var(--space-xs)}.agent-content-mode-toggle .btn{display:inline-flex;align-items:center;gap:6px}.agent-content-preview{overflow-y:auto;padding:var(--space-lg);min-height:150px}.agent-content-placeholder{color:var(--text-muted);text-align:center;padding:var(--space-xl);min-height:150px;display:flex;align-items:center;justify-content:center}.config-description{font-size:14px;color:var(--text-muted);margin:0 0 20px}.config-fields{display:flex;flex-direction:column;gap:var(--space-lg)}.config-field{display:flex;flex-direction:column;gap:6px}.config-field label{font-size:13px;font-weight:500}.config-runtime-tabs{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-md)}.config-runtime-tab{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text-muted);padding:var(--space-sm) var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast)}.config-runtime-tab:hover{border-color:var(--todo);color:var(--text);background:var(--card-hover)}.config-runtime-tab:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.config-runtime-tab.active{border-color:var(--todo);color:var(--text);background:color-mix(in srgb,var(--todo) 12%,transparent)}.config-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);font-style:italic}.config-error{font-size:11px;color:var(--color-error)}.input--error{border-color:var(--color-error)!important}.config-actions{display:flex;align-items:center;gap:var(--space-md);margin-top:20px;padding-top:var(--space-lg);border-top:1px solid var(--border)}.config-saved-indicator{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--color-success)}.heartbeat-procedure-actions{margin-top:var(--space-sm)}.heartbeat-procedure-viewer{margin-top:var(--space-lg)}.heartbeat-procedure-status{display:inline-flex;align-items:center;gap:var(--space-xs);margin-left:auto}.heartbeat-procedure-status--warning{color:var(--color-warning)}.rating-summary-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:20px;display:flex;flex-direction:column;gap:12px}.rating-score-display{display:flex;align-items:center;gap:12px}.rating-average{font-size:32px;font-weight:700;line-height:1}.rating-stats{display:flex;align-items:center;gap:12px}.rating-count{font-size:14px;color:var(--text-muted)}.rating-trend-badge{font-size:12px;padding:4px 10px;border-radius:12px;font-weight:500}.trend-improving{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.trend-declining{background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error)}.trend-stable{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.trend-insufficient{background:var(--bg-tertiary);color:var(--text-muted)}.category-breakdown{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg)}.category-breakdown h4{margin:0 0 var(--space-md) 0;font-size:.875rem;font-weight:600}.category-breakdown .category-item{display:flex;justify-content:space-between;align-items:center;padding:var(--space-sm) 0;border-bottom:1px solid var(--border)}.category-breakdown .category-item:last-child{border-bottom:none}.category-name{text-transform:capitalize;font-size:.875rem}.category-score{font-weight:600;font-size:.875rem}.add-rating-form{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-md)}.add-rating-form h4{margin:0;font-size:.875rem;font-weight:600}.star-selector{display:flex;gap:var(--space-xs)}.star-btn{background:none;border:none;padding:var(--space-xs);cursor:pointer;border-radius:var(--radius-sm);color:var(--text-muted);transition:background-color var(--transition-fast),color var(--transition-fast)}.star-btn:hover{background:var(--card-hover)}.star-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.rating-stars{display:inline-flex;gap:var(--space-xs)}.rating-stars .star-filled{color:var(--color-warning)}.rating-stars .star-empty{color:var(--text-muted)}.add-rating-form .add-rating-category-select,.add-rating-form .add-rating-comment-input{width:100%}.add-rating-form .add-rating-comment-input{resize:vertical;min-height:calc(var(--space-xl) + var(--space-2xl))}.rating-history{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-lg);max-height:calc(var(--space-xl) * 12 + var(--space-md));overflow-y:auto}.rating-history h4{margin:0 0 var(--space-md) 0;font-size:.875rem;font-weight:600}.rating-history .no-ratings{color:var(--text-muted);font-size:.875rem;text-align:center;padding:var(--space-lg)}.rating-history-item{padding:var(--space-md) 0;border-bottom:1px solid var(--border)}.rating-history-item:last-child{border-bottom:none}.rating-item-header{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.rating-category-badge{font-size:.75rem;padding:calc(var(--space-xs) * .5) var(--space-sm);background:var(--card-hover);border-radius:var(--radius-pill);text-transform:capitalize}.rating-time{font-size:.75rem;color:var(--text-muted);margin-left:auto}.rating-delete-btn{background:none;border:none;padding:var(--space-xs);cursor:pointer;color:var(--text-muted);border-radius:var(--radius-sm);transition:color var(--transition-fast),background-color var(--transition-fast)}.rating-delete-btn:hover{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.rating-comment{margin:var(--space-sm) 0 0 0;font-size:.8125rem;color:var(--text-secondary);line-height:1.4}@media(max-width:768px){.config-runtime-tabs{grid-template-columns:1fr}.agent-detail-overlay{padding:0;align-items:stretch}.agent-detail-modal{min-width:0!important;min-height:0!important;width:100vw!important;height:100vh!important;height:100dvh!important;max-width:100vw!important;max-height:100vh;max-height:100dvh;margin:0;border-radius:0;border:none;resize:none}.agent-detail-header{flex-wrap:wrap;gap:var(--space-sm);padding:12px;padding-top:max(12px,env(safe-area-inset-top,0))}.agent-detail-identity{flex:1 1 auto;min-width:0;gap:var(--space-sm)}.agent-detail-icon{width:32px;height:32px;flex-shrink:0}.agent-detail-icon svg{width:16px;height:16px}.agent-detail-info h2{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.agent-detail-badges{flex-wrap:wrap}.agent-detail-controls{flex:1 1 100%;flex-wrap:wrap;gap:6px;order:3}.agent-detail-controls .btn--compact{padding:6px 10px;font-size:12px;min-height:36px}.agent-detail-controls .btn--compact svg{width:14px;height:14px}.agent-detail-utility-actions{flex-shrink:0}.agent-detail-utility-actions .btn-icon{min-height:36px;min-width:36px}.agent-detail-title{flex:1 1 auto;min-width:0;gap:var(--space-md)}.agent-detail-actions{flex:1 1 100%;flex-wrap:wrap;gap:6px}.agent-detail-actions .btn{padding:6px 10px;font-size:13px;min-height:36px}.agent-detail-actions .btn svg{width:14px;height:14px}.agent-detail-actions .btn-icon{min-height:36px;min-width:36px}.agent-detail-tabs{padding:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.agent-detail-tabs::-webkit-scrollbar{display:none}.agent-detail-tab{padding:12px 14px;font-size:13px;white-space:nowrap;min-height:36px}.agent-detail-content{padding:16px}.agent-detail-footer{flex-wrap:wrap;gap:var(--space-sm);padding:var(--space-sm) 16px;padding-bottom:max(var(--space-sm),env(safe-area-inset-bottom,0));font-size:11px}.agent-detail-id{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-tab{gap:16px}.dashboard-section{padding:16px}.info-grid{grid-template-columns:repeat(2,1fr);gap:var(--space-md)}.stats-grid{grid-template-columns:repeat(3,1fr);gap:var(--space-md)}.stat-value{font-size:22px}.logs-container{max-height:50vh}.logs-empty{padding:32px 16px}.log-entry{padding:4px 2px;font-size:12px}.log-text{min-width:0;overflow-wrap:anywhere}.run-card{padding:var(--space-md)}.run-header{flex-wrap:wrap;gap:6px}.run-details{flex-wrap:wrap}.run-logs-container{padding:var(--space-sm)}.run-output-panel{max-height:calc(var(--space-2xl) * 5)}.run-context-grid{flex-direction:column;gap:var(--space-xs)}.run-details .text-muted{min-width:0;overflow-wrap:anywhere}.config-tab{gap:16px}.config-section{padding:16px}.config-section .input,.config-section .select,.config-section textarea{font-size:16px;min-height:36px}.config-actions{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.config-actions .btn{width:100%;justify-content:center}.heartbeat-procedure-status{margin-left:0}}@media(max-width:480px){.info-grid,.stats-grid{grid-template-columns:1fr}.agent-detail-actions{flex-direction:column;width:100%}.agent-detail-actions .btn{width:100%;justify-content:center}.agent-detail-actions .btn-icon{align-self:flex-end}.agent-detail-footer .divider,.agent-detail-footer .text-muted,.agent-detail-footer .link{display:none}}@media(max-width:768px){.agent-dialog-overlay{padding:0;align-items:stretch}.agent-dialog{width:100vw!important;height:100vh;height:100dvh;max-width:100%!important;max-height:100vh;max-height:100dvh;border-radius:0;border:none}.agent-dialog-header{padding:max(var(--space-md),env(safe-area-inset-top,0px)) var(--space-lg) var(--space-md) var(--space-lg);flex-shrink:0}.agent-dialog-body{padding:var(--space-lg);-webkit-overflow-scrolling:touch}.agent-dialog-footer{padding:var(--space-md) var(--space-lg);padding-bottom:max(var(--space-md),env(safe-area-inset-bottom,0px));flex-wrap:wrap;gap:var(--space-sm)}.agent-dialog-field .input,.agent-dialog-field .select,.agent-dialog-field textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-lg) * 2 + var(--space-xs))}.agent-dialog-summary-row{flex-direction:column;gap:calc(var(--space-xs) * .5)}.agent-dialog-summary-row>span:first-child,.agent-dialog-summary-row-label{width:auto}.agent-dialog-steps{padding:var(--space-sm) var(--space-lg)}.agent-dialog-step{flex:1;width:auto;height:calc(var(--space-xs) - var(--space-xs) * .25)}.agent-dialog-tabs{grid-template-columns:1fr;gap:calc(var(--space-sm) - var(--space-xs) * .5);margin-bottom:var(--space-md)}.agent-dialog-tab{min-height:calc(var(--space-lg) * 2 + var(--space-xs));text-align:left}.agent-import-file-upload{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.agent-import-textarea{font-size:calc(var(--space-md) + var(--space-xs));min-height:calc(var(--space-xl) * 4 + var(--space-xs))}.agent-import-agent-list{max-height:calc(100dvh - (var(--space-xl) * 10 + var(--space-lg)))}.agent-import-result-stats{flex-direction:column;gap:var(--space-sm);align-items:center}.agent-import-browse-list{max-height:calc(100dvh - (var(--space-xl) * 10 + var(--space-lg)))}.agent-import-skill-list{max-height:calc(100dvh - (var(--space-xl) * 15 + var(--space-md)))}}@media(max-width:480px){.agent-dialog-body{padding:var(--space-md)}.agent-dialog-footer{flex-direction:column}.agent-dialog-footer .btn{width:100%;justify-content:center}}.reflections-tab{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-lg)}.reflections-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}.reflections-header h3{display:flex;align-items:center;gap:var(--space-sm);font-size:1rem;font-weight:600;color:var(--text)}.reflections-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--space-md)}.reflections-stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);text-align:center}.reflections-stat-card .stat-value{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);font-size:1.5rem;font-weight:700;color:var(--text);margin-bottom:var(--space-xs)}.reflections-stat-card .stat-label{font-size:.75rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.reflections-no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-secondary);text-align:center}.reflections-list{display:flex;flex-direction:column;gap:var(--space-md)}.reflections-loading-indicator{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-lg)}.reflections-ratings-section{display:flex;flex-direction:column;gap:var(--space-md)}.reflections-ratings-section>h4,.reflections-list h4{font-size:.875rem;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.reflection-cards{display:flex;flex-direction:column;gap:var(--space-sm)}.reflection-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);cursor:pointer;transition:border-color .15s,background-color .15s}.reflection-card:hover{border-color:var(--border-active);background:var(--card-hover)}.reflection-card:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.reflection-card--expanded{border-color:var(--color-primary)}.reflection-card-header{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}.reflection-trigger-badge{font-size:.7rem;font-weight:600;padding:2px 6px;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.05em}.reflection-trigger-periodic{background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.reflection-trigger-post-task{background:color-mix(in srgb,var(--color-success) 15%,transparent);color:var(--color-success)}.reflection-trigger-manual{background:color-mix(in srgb,var(--color-primary) 15%,transparent);color:var(--color-primary)}.reflection-trigger-user-requested{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.reflection-timestamp{font-size:.75rem;color:var(--text-muted);flex:1}.reflection-chevron{color:var(--text-muted)}.reflection-summary{font-size:.875rem;color:var(--text);line-height:1.5}.reflection-details{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--border);display:flex;flex-direction:column;gap:var(--space-md)}.reflection-insights h5,.reflection-suggestions h5{display:flex;align-items:center;gap:var(--space-xs);font-size:.8rem;font-weight:600;color:var(--text);margin-bottom:var(--space-xs)}.reflection-insights ul,.reflection-suggestions ul{list-style:none;display:flex;flex-direction:column;gap:var(--space-xs)}.reflection-insights li,.reflection-suggestions li{font-size:.8rem;color:var(--text-secondary);padding-left:var(--space-md);position:relative}.reflection-insights li:before{content:"•";position:absolute;left:4px;color:var(--color-success)}.reflection-suggestions li:before{content:"→";position:absolute;left:0;color:var(--color-primary)}.reflection-metrics{background:var(--bg);border-radius:var(--radius-sm);padding:var(--space-sm)}.reflection-metrics h5{font-size:.75rem;font-weight:600;color:var(--text-muted);margin-bottom:var(--space-xs)}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:var(--space-sm)}.metric{display:flex;flex-direction:column;gap:2px}.metric-label{font-size:.7rem;color:var(--text-muted)}.metric-value{font-size:.875rem;font-weight:600;color:var(--text)}.reflection-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-2xl);color:var(--text-secondary);text-align:center}.reflection-empty p{font-size:.875rem}@media(max-width:768px){.reflections-header{flex-wrap:wrap;align-items:flex-start}.reflections-header .btn{width:100%;justify-content:center}}.budget-progress-container{margin-top:4px}.budget-progress-bar{width:100%;height:8px;background:var(--bg-secondary, #161b22);border-radius:4px;overflow:hidden;margin-top:4px}.budget-progress-bar__fill{height:100%;border-radius:4px;transition:width .3s ease,background-color .3s ease}.budget-progress-bar__fill--green{background:var(--state-active-text, #3fb950)}.budget-progress-bar__fill--amber{background:var(--state-paused-text, #e3b541)}.budget-progress-bar__fill--red{background:var(--state-error-text, #f85149)}.budget-progress-label{font-size:.75rem;color:var(--text-secondary, #8b949e);margin-top:4px;display:block}.budget-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:12px;font-size:.75rem;font-weight:500}.budget-warning-banner{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:6px;background:var(--state-error-bg, rgba(248,81,73,.15));color:var(--state-error-text, #f85149);border:1px solid var(--state-error-border, #f85149);font-size:.875rem;margin-bottom:12px}.btn-reset-budget{margin-top:8px}.chat-sidebar-footer{display:none}@media(max-width:768px){.chat-view{flex-direction:column}.chat-sidebar{width:100%;min-width:100%;height:100%;max-height:none;border-right:none;border-bottom:1px solid var(--border);flex-direction:column}.chat-sidebar-header,.chat-sidebar-search{display:none}.chat-sidebar-list{flex:1;min-height:0;overflow-y:auto}.chat-sidebar-footer{display:flex;padding:var(--space-md);border-top:1px solid var(--border);background:var(--bg-secondary)}.chat-sidebar-footer-btn{flex:1;justify-content:center}.chat-sidebar--hidden{display:none}.chat-message{max-width:90%}.chat-new-dialog{width:95vw;margin:16px}.chat-thread-header{padding:8px 12px}.chat-skill-menu{left:var(--space-md);right:calc(var(--space-md) + var(--mobile-nav-height));min-width:0;max-width:none}}@media(max-width:768px){.file-mention-popup{max-height:200px}.file-mention-popup-item{min-height:36px;padding:10px 12px}.agent-mention-popup{max-width:280px;min-width:200px}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.active-agents-panel{margin-top:var(--space-xl);margin-bottom:var(--space-lg)}.active-agents-panel-header{display:flex;align-items:center;gap:var(--space-sm);font-size:13px;font-weight:600;color:var(--text-muted);margin-bottom:var(--space-md)}.active-agents-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-md)}.live-agent-card{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;transition:background .15s,border-color .15s}.live-agent-card:hover{background:var(--bg-hover);border-color:var(--border-strong, var(--border))}.live-agent-card:focus-visible{outline:2px solid var(--accent, var(--color-primary));outline-offset:2px}.live-agent-card-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.live-agent-card-name{display:flex;align-items:center;gap:var(--space-sm);font-weight:600;font-size:13px}.live-agent-pulse{width:8px;height:8px;background:var(--color-success);border-radius:50%;animation:pulse 1.5s infinite}.live-agent-task{font-family:var(--font-mono)}.live-agent-card-transcript{font-family:var(--font-mono);font-size:11px;line-height:1.5;color:var(--text-muted);max-height:120px;overflow-y:auto}.live-agent-card-empty{display:flex;flex-direction:column;gap:var(--space-xs)}.live-agent-card-status{font-style:normal;font-weight:500;color:var(--text-primary);opacity:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-agent-card-status-sub{font-style:italic;opacity:.6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-agent-card-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-agent-card-footer{display:flex;align-items:center;justify-content:space-between;font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);padding-top:var(--space-sm);border-top:1px solid var(--border)}.live-agent-streaming-dot{color:var(--color-success);animation:pulse 1.5s infinite}.live-agent-card-footer-actions{display:flex;align-items:center;gap:var(--space-sm)}.live-agent-card-footer-meta{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap;min-width:0}.live-agent-card-next-heartbeat{color:var(--text-muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-agent-card-logs-btn{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);font-size:11px;color:var(--text-secondary);background:transparent;border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:background .15s,color .15s,border-color .15s}.live-agent-card-logs-btn:hover{background:var(--bg-hover);color:var(--text-primary);border-color:var(--border-strong, var(--border))}@media(max-width:768px){.active-agents-grid{grid-template-columns:1fr}.live-agent-card{min-width:0;overflow:hidden}}.agent-token-stats-panel{margin-bottom:var(--space-lg);padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);box-shadow:var(--shadow-sm)}.agent-token-stats-panel__header{margin-bottom:var(--space-md)}.agent-token-stats-panel__title{margin:0;font-size:calc(var(--space-md) + var(--space-xs));font-weight:600;color:var(--text)}.agent-token-stats-panel__totals{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(var(--space-2xl) * 4),1fr));gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-token-stats-panel__total-card{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}.agent-token-stats-panel__total-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));text-transform:uppercase;letter-spacing:calc(var(--space-xs) / 8)}.agent-token-stats-panel__total-value{color:var(--text);font-size:calc(var(--space-lg) + var(--space-xs));line-height:1.2;font-family:var(--font-mono);font-weight:700}.agent-token-stats-panel__table-wrapper{overflow-x:auto}.agent-token-stats-panel__table{width:100%;border-collapse:collapse}.agent-token-stats-panel__table th,.agent-token-stats-panel__table td{padding:var(--space-sm);border-bottom:1px solid var(--border);color:var(--text);text-align:right;font-size:calc(var(--space-sm) + var(--space-xs))}.agent-token-stats-panel__table thead th{text-transform:uppercase;letter-spacing:calc(var(--space-xs) / 8);color:var(--text-muted);font-weight:600}.agent-token-stats-panel__table th:first-child,.agent-token-stats-panel__table td:first-child{text-align:left}.agent-token-stats-panel__agent-cell{display:flex;flex-direction:column;gap:calc(var(--space-xs) * .5)}.agent-token-stats-panel__agent-name{color:var(--text)}.agent-token-stats-panel__agent-id{color:var(--text-muted);font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs) * .75);text-transform:none;letter-spacing:normal}.agent-token-stats-panel__total-cell{font-family:var(--font-mono);font-weight:700}.agent-token-stats-panel__empty{padding:var(--space-md);border:1px dashed var(--border);border-radius:var(--radius-sm);color:var(--text-muted);background:color-mix(in srgb,var(--surface) 85%,transparent);font-size:calc(var(--space-sm) + var(--space-xs))}@media(max-width:768px){.agent-token-stats-panel{padding:var(--space-sm)}.agent-token-stats-panel__totals{grid-template-columns:1fr}.agent-token-stats-panel__table th,.agent-token-stats-panel__table td{padding:var(--space-xs) var(--space-sm)}}.agent-dialog-overlay{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 60%,transparent);backdrop-filter:blur(var(--space-xs));display:flex;align-items:center;justify-content:center;z-index:100;padding:calc(var(--space-lg) + var(--space-xs))}.agent-dialog{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;max-width:calc(var(--space-xl) * 21 + var(--space-md));max-height:calc(100vh - (var(--space-xl) + var(--space-lg)));max-height:calc(100dvh - (var(--space-xl) + var(--space-lg)));display:flex;flex-direction:column;overflow:hidden;box-shadow:var(--shadow-lg)}.agent-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-lg) calc(var(--space-lg) + var(--space-xs));border-bottom:1px solid var(--border)}.agent-dialog-header-title{font-weight:600;font-size:calc(var(--space-md) + var(--space-xs) * .75)}.agent-dialog-body{flex:1;overflow-y:auto;padding:calc(var(--space-lg) + var(--space-xs))}.agent-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);padding:var(--space-lg) calc(var(--space-lg) + var(--space-xs));border-top:1px solid var(--border)}.agent-dialog-steps{display:flex;gap:calc(var(--space-sm) - var(--space-xs) * .5);padding:var(--space-md) calc(var(--space-lg) + var(--space-xs));justify-content:center}.agent-dialog-step{width:calc(var(--space-2xl) + var(--space-sm));height:var(--space-xs);border-radius:calc(var(--space-xs) * .5);background:var(--border);transition:background var(--transition-fast)}.agent-dialog-step.active{background:var(--todo)}.agent-dialog-step.completed{background:var(--color-success)}.agent-dialog-field{margin-bottom:var(--space-lg)}.agent-dialog-field label{display:block;font-size:calc(var(--space-md) + var(--space-xs) * .25);font-weight:500;margin-bottom:calc(var(--space-sm) - var(--space-xs) * .5)}.agent-dialog-field .input,.agent-dialog-field .select{width:100%;box-sizing:border-box}.agent-dialog-field--title .input{font-size:calc(var(--space-md) + var(--space-xs) * .25);line-height:var(--space-lg)}.agent-dialog-section{margin-bottom:var(--space-lg)}.agent-dialog-section-header{font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin-bottom:var(--space-md);padding-bottom:var(--space-xs);border-bottom:1px solid var(--border)}.agent-dialog-tabs{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);margin-bottom:var(--space-lg)}.agent-dialog-tab{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text-muted);padding:var(--space-sm) var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast)}.agent-dialog-tab:hover{border-color:var(--todo);color:var(--text);background:var(--card-hover)}.agent-dialog-tab:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.agent-dialog-tab.active{border-color:var(--todo);color:var(--text);background:color-mix(in srgb,var(--todo) 12%,transparent)}.agent-dialog-tab-panel{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-runtime-mode-toggle{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm)}.agent-runtime-mode-option{position:relative;margin:0}.agent-runtime-mode-option input{position:absolute;opacity:0;pointer-events:none}.agent-runtime-mode-option span{display:flex;align-items:center;justify-content:center;min-height:calc(var(--space-xl) + var(--space-lg));border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;padding:var(--space-sm) var(--space-md);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast),color var(--transition-fast),box-shadow var(--transition-fast)}.agent-runtime-mode-option span:hover{border-color:var(--todo);color:var(--text);background:var(--card-hover)}.agent-runtime-mode-option input:focus-visible+span{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.agent-runtime-mode-option--active span{border-color:var(--todo);color:var(--text);background:color-mix(in srgb,var(--todo) 12%,transparent)}.agent-role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(var(--space-xl) * 3 + var(--space-sm)),1fr));gap:var(--space-sm)}.agent-role-option{display:flex;flex-direction:column;align-items:center;padding:var(--space-md) var(--space-sm);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast);font-family:var(--font-primary);color:var(--text)}.agent-role-option:hover{border-color:var(--text-muted);background:var(--card-hover)}.agent-role-option:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.agent-role-option.selected{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent);box-shadow:var(--focus-ring)}.agent-role-option-icon{font-size:calc(var(--space-lg) + var(--space-xs));line-height:1}.agent-role-option-label{font-size:calc(var(--space-sm) + var(--space-xs));margin-top:var(--space-xs)}.agent-dialog-icon-prefix{margin-right:calc(var(--space-sm) - var(--space-xs) * .5)}.agent-dialog-ai-generate{margin-top:var(--space-sm);border-top:1px solid var(--border);padding-top:var(--space-md)}.btn--ai-generate{width:100%;display:flex;align-items:center;justify-content:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);background:var(--cta-bg, var(--todo));color:var(--cta-text, var(--text));font-weight:600;border:1px solid transparent}.btn--ai-generate:hover{opacity:.9;filter:brightness(1.1)}.agent-dialog-ai-hint{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .75);text-align:center;margin:calc(var(--space-sm) - var(--space-xs) * .5) 0 0}.agent-dialog-summary{display:flex;flex-direction:column;gap:var(--space-sm)}.agent-dialog-summary-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-sm) 0;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent)}.agent-dialog-summary-row:last-child{border-bottom:none}.agent-dialog-summary-row-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .75)}.agent-dialog-summary-row-label--fixed{flex:0 0 calc(var(--space-xl) * 4 - var(--space-xs) * 1.5)}.agent-dialog-summary-row-value{font-weight:600}.agent-dialog-summary-row-value--body{font-weight:400}.agent-dialog-summary--spaced{margin-bottom:var(--space-md)}.agent-dialog-summary-row-value--muted{font-style:italic;color:var(--text-muted)}.agent-dialog-summary-row-value--capitalize{text-transform:capitalize}.agent-dialog-summary-row--editable{flex-direction:column;align-items:stretch;gap:var(--space-xs)}.agent-dialog-summary-row--editable .agent-dialog-summary-row-label{margin-bottom:0}.agent-dialog-summary-row--title .input{font-size:calc(var(--space-md) + var(--space-xs) * .25);line-height:var(--space-lg)}.agent-presets{margin-bottom:var(--space-lg)}.agent-presets-header{font-size:calc(var(--space-md) + var(--space-xs) * .5);font-weight:600;color:var(--text-muted);margin-bottom:var(--space-md);display:flex;align-items:center;gap:var(--space-sm)}.agent-presets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(var(--space-xl) * 5 + var(--space-lg) + var(--space-xs)),1fr));gap:var(--space-sm);margin-bottom:var(--space-lg);max-height:calc(var(--space-xl) * 16 + var(--space-lg));overflow-y:auto}.agent-preset-card{display:flex;flex-direction:column;align-items:center;padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);background:var(--bg-secondary);font-family:var(--font-primary);color:var(--text)}.agent-preset-card:hover{border-color:var(--todo);background:var(--bg-tertiary)}.agent-preset-card:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.agent-preset-card.selected{border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.agent-preset-icon{font-size:var(--space-xl);margin-bottom:var(--space-xs)}.agent-preset-name{font-size:calc(var(--space-md) + var(--space-xs) * .25);font-weight:500;text-align:center;margin-bottom:var(--space-xs)}.agent-preset-role{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);text-transform:capitalize}.agent-preset-description{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-top:calc(var(--space-xs) * .5)}.agent-dialog-header-sparkle{margin-right:var(--space-sm)}.agent-dialog-error-banner{color:var(--color-error);font-size:calc(var(--space-md) + var(--space-xs) * .25);padding:var(--space-sm) var(--space-md);background:color-mix(in srgb,var(--color-error) 10%,transparent);border-radius:var(--radius-md);margin-bottom:var(--space-md)}.agent-dialog-textarea{resize:vertical}.agent-dialog-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);margin-top:var(--space-xs);display:flex;justify-content:space-between;gap:var(--space-sm)}.agent-dialog-loading-center{display:flex;flex-direction:column;align-items:center;padding:var(--space-2xl) var(--space-lg);gap:var(--space-md)}.agent-dialog-spinner{width:var(--space-2xl);height:var(--space-2xl);border:calc(var(--space-xs) * .75) solid var(--border);border-top-color:var(--todo);border-radius:50%}.agent-dialog-loading-text{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);margin:0}.agent-dialog-expand-btn{background:none;border:none;color:var(--todo);cursor:pointer;font-size:calc(var(--space-sm) + var(--space-xs));margin-left:var(--space-sm);padding:0}.agent-dialog-expand-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}.agent-generation-prompt-box{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);font-size:calc(var(--space-sm) + var(--space-xs));font-family:var(--font-mono);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow:auto;position:relative}.agent-generation-prompt-box--collapsed{max-height:calc(var(--space-xl) * 6 + var(--space-sm) + var(--space-xs) * .5);overflow:hidden}.agent-generation-prompt-fade{position:absolute;bottom:0;left:0;right:0;height:calc(var(--space-lg) + var(--space-xl));background:linear-gradient(transparent,var(--bg-secondary));pointer-events:none}.agent-dialog-required{color:var(--color-error)}.agent-dialog-optional{color:var(--text-muted);font-weight:400}.agent-dialog-error{color:var(--color-error);font-size:calc(var(--space-md) + var(--space-xs) * .25);margin-top:var(--space-md)}.agent-dialog-info{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);margin-top:0;margin-bottom:var(--space-md)}.agent-dialog-loading{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);padding:var(--space-sm) 0}.agent-dialog-field-hint{margin-top:var(--space-xs);font-size:calc(var(--space-sm) + var(--space-xs) * .75)}@media(max-width:768px){.agent-dialog-overlay{padding:0;align-items:stretch;justify-content:stretch}.agent-dialog{width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;border-radius:0;border-left:0;border-right:0}.agent-dialog-header{padding:calc(var(--space-md) + env(safe-area-inset-top)) var(--space-md) var(--space-md)}.agent-dialog-footer{padding:var(--space-md) var(--space-md) calc(var(--space-md) + env(safe-area-inset-bottom))}.agent-dialog-steps{padding:var(--space-sm) var(--space-md);overflow-x:auto;flex-wrap:nowrap;flex-shrink:0}.agent-dialog-header,.agent-dialog-footer{flex-shrink:0}.agent-dialog-body{padding:var(--space-md);flex:1 1 auto;min-height:0;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.agent-dialog-summary-row--editable .input{min-height:calc(var(--space-lg) + var(--space-xl))}.agent-dialog-footer{flex-wrap:wrap;gap:var(--space-xs)}.agent-dialog-footer>.btn{flex:1 1 auto;min-width:0}}.agent-onboarding-modal{display:flex;flex-direction:column;gap:var(--space-md)}.agent-onboarding-summary{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}@media(max-width:768px){.agent-onboarding-modal{width:100%;max-width:100%}}.agent-import-skills-section{margin-top:var(--space-lg)}.agent-import-skill-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:calc(var(--space-2xl) * 6);overflow-y:auto}.agent-import-skill-item{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm);background:var(--surface);border:1px solid var(--border)}.agent-import-skill-icon{flex-shrink:0}.agent-import-skill-details{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.agent-import-skill-name{font-weight:500;color:var(--text)}.agent-import-skill-description{color:var(--text-muted)}.agent-import-empty{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25);text-align:center;padding:var(--space-lg)}.agent-import-result{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--space-sm)}.agent-import-result-icon{color:var(--color-success);margin-bottom:var(--space-xs)}.agent-import-result-title{margin:0;font-size:calc(var(--space-md) + var(--space-xs));font-weight:600}.agent-import-result-company{color:var(--text-muted);font-size:calc(var(--space-md) + var(--space-xs) * .25);margin:0 0 var(--space-md) 0}.agent-import-result-stats{display:flex;gap:var(--space-lg);margin-bottom:var(--space-md);padding:var(--space-md);background:var(--bg-secondary);border-radius:var(--radius-md)}.agent-import-result-stat{display:flex;align-items:center;gap:var(--space-sm);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25);padding:var(--space-xs) var(--space-sm)}.agent-import-result-stat--success{color:var(--color-success)}.agent-import-result-stat--skipped{color:var(--color-warning)}.agent-import-result-stat--error{color:var(--color-error)}.agent-import-result-stat--success:before,.agent-import-result-stat--skipped:before,.agent-import-result-stat--error:before{content:"";width:var(--space-sm);height:var(--space-sm);border-radius:50%;flex-shrink:0}.agent-import-result-stat--success:before{background:var(--color-success)}.agent-import-result-stat--skipped:before{background:var(--color-warning)}.agent-import-result-stat--error:before{background:var(--color-error)}.agent-import-result-agents{display:flex;flex-direction:column;gap:var(--space-xs);width:100%;text-align:left}.agent-import-result-agent{display:flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);font-size:calc(var(--space-md) + var(--space-xs) * .25);color:var(--color-success);padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--color-success) 8%,transparent);border-radius:var(--radius-sm)}.agent-import-result-errors{display:flex;flex-direction:column;gap:var(--space-xs);width:100%;text-align:left;margin-top:var(--space-sm)}.agent-import-result-error{display:flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);font-size:calc(var(--space-sm) + var(--space-xs));color:var(--color-error);padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--color-error) 8%,transparent);border-radius:var(--radius-sm)}.agent-import-result-divider{align-self:stretch;height:1px;background:var(--border);margin:var(--space-md) 0}.agent-import-result-section-title{font-size:calc(var(--space-sm) + var(--space-xs));font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;margin:0 0 var(--space-sm) 0}.agent-import-browse{margin-bottom:var(--space-md)}.agent-import-browse-header{display:flex;flex-direction:column;gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-import-browse-search{position:relative;display:flex;align-items:center}.agent-import-browse-search-icon{position:absolute;left:var(--space-sm);color:var(--text-muted);pointer-events:none}.agent-import-browse-search-input{width:100%;padding:var(--space-sm) var(--space-sm) var(--space-sm) calc(var(--space-sm) + var(--space-lg));border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-size:calc(var(--space-md) + var(--space-xs) * .5)}.agent-import-browse-search-input:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.agent-import-browse-selected{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm);background:color-mix(in srgb,var(--todo) 10%,transparent);border:1px solid color-mix(in srgb,var(--todo) 30%,transparent);border-radius:var(--radius-md)}.agent-import-browse-selected-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.agent-import-browse-selected-name{flex:1;font-weight:500;color:var(--todo)}.agent-import-browse-loading{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl) 0;color:var(--text-muted)}.agent-import-browse-error{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-md);background:color-mix(in srgb,var(--color-error) 8%,transparent);border-radius:var(--radius-md);color:var(--color-error);font-size:calc(var(--space-md) + var(--space-xs) * .25)}.agent-import-browse-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:calc(var(--space-xl) * 12 + var(--space-md));overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.agent-import-browse-item{display:flex;flex-direction:column;gap:calc(var(--space-xs) * .5);padding:var(--space-sm);cursor:pointer;border-bottom:1px solid var(--border);transition:background-color var(--transition-fast)}.agent-import-browse-item:last-child{border-bottom:none}.agent-import-browse-item:hover{background:var(--surface-hover)}.agent-import-browse-item:focus-visible{outline:none;background:var(--surface-hover);box-shadow:var(--focus-ring)}.agent-import-browse-item--selected{background:color-mix(in srgb,var(--todo) 10%,transparent);border-color:var(--todo)}.agent-import-browse-item-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.agent-import-browse-item-name{font-weight:500;color:var(--text)}.agent-import-browse-item-installs{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);white-space:nowrap}.agent-import-browse-item-tagline{font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted);line-height:1.4}.agent-import-browse-item-repo{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);font-family:var(--font-mono)}.agent-import-browse-empty{padding:var(--space-lg);text-align:center;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25)}.agent-controls-actions{display:flex;gap:var(--space-sm)}.agent-global-controls{display:flex;align-items:center;padding:var(--space-md) var(--space-lg);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:var(--space-lg)}.heartbeat-multiplier-label{font-weight:500;color:var(--text);white-space:nowrap}.agent-import-dialog{max-width:calc(var(--space-xl) * 23 + var(--space-sm))}.agent-import-description{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25);margin:0 0 var(--space-md) 0;line-height:1.5}.agent-import-description code{background:var(--surface-hover);padding:calc(var(--space-xs) * .25) var(--space-xs);border-radius:calc(var(--radius-sm) - var(--space-xs) * .25);font-size:calc(var(--space-sm) + var(--space-xs))}.agent-import-file-upload{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-import-file-input{display:none}.agent-import-upload-btn{display:inline-flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5)}.agent-import-file-hint{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.agent-import-divider{display:flex;align-items:center;gap:var(--space-md);margin-bottom:var(--space-md);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs))}.agent-import-divider:before,.agent-import-divider:after{content:"";flex:1;height:1px;background:var(--border)}.agent-import-textarea{width:100%;min-height:calc(var(--space-xl) * 5);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));line-height:1.5;resize:vertical}.agent-import-textarea:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.agent-import-company{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-md)}.agent-import-company-label{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));text-transform:uppercase;letter-spacing:.04em}.agent-import-company-name{font-weight:600;font-size:calc(var(--space-md) + var(--space-xs) * .5)}.agent-import-count{display:flex;align-items:center;gap:calc(var(--space-sm) - var(--space-xs) * .5);color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * 1.25);margin-bottom:var(--space-md)}.agent-import-selection-controls{display:flex;gap:var(--space-sm);flex-wrap:wrap;margin-bottom:var(--space-md)}.agent-import-agent-list{display:flex;flex-direction:column;gap:calc(var(--space-sm) - var(--space-xs) * .5);max-height:calc(var(--space-xl) * 11 + var(--space-lg));overflow-y:auto}.agent-import-agent-item{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.agent-import-agent-icon{font-size:calc(var(--space-md) + var(--space-xs) * 1.5);line-height:1;flex-shrink:0}.agent-import-agent-details{display:flex;flex-direction:column;min-width:0}.agent-import-agent-name{font-weight:500;font-size:calc(var(--space-sm) + var(--space-xs) * 1.25)}.agent-import-agent-meta{color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs) * .75)}.agent-import-agent-title{color:var(--text-muted)}.agent-import-agent-role{text-transform:capitalize}.agent-import-agent-model{color:var(--text-muted)}
|