@bigduu/lotus 2026.6.18 → 2026.6.20
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/assets/{App-ByVdg3-E.js → App-CG8bbjSe.js} +57 -57
- package/dist/assets/{MetricsService-RerVfypG.js → MetricsService-BY057XSj.js} +1 -1
- package/dist/assets/{SubAgentsPanel-C8_mrYx_.js → SubAgentsPanel-TdCKptD-.js} +2 -2
- package/dist/assets/{architectureDiagram-3BPJPVTR-CtdI5C_N.js → architectureDiagram-3BPJPVTR-BUvShG40.js} +1 -1
- package/dist/assets/{blockDiagram-GPEHLZMM-CMXjfIN0.js → blockDiagram-GPEHLZMM-omczCfAL.js} +1 -1
- package/dist/assets/{c4Diagram-AAUBKEIU-DrB6-Aee.js → c4Diagram-AAUBKEIU-D3loFTFR.js} +1 -1
- package/dist/assets/{chunk-2J33WTMH-DKmtm20J.js → chunk-2J33WTMH-vXnUzqcL.js} +1 -1
- package/dist/assets/{chunk-4BX2VUAB-BhgLLuP2.js → chunk-4BX2VUAB-Bduc68-M.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-DwkY2JGD.js → chunk-55IACEB6-CQurPzzm.js} +1 -1
- package/dist/assets/{chunk-727SXJPM-CSsBkHQo.js → chunk-727SXJPM-cr42BARz.js} +1 -1
- package/dist/assets/{chunk-AQP2D5EJ-BBrF8ywh.js → chunk-AQP2D5EJ-DPgkAB9a.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-DqoaD6If.js → chunk-FMBD7UC4-DM2eEyUs.js} +1 -1
- package/dist/assets/{chunk-ND2GUHAM-C-QDeIbb.js → chunk-ND2GUHAM-BdiRuLUa.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-BJOjao__.js → chunk-QZHKN3VN-AdFyQtzD.js} +1 -1
- package/dist/assets/classDiagram-4FO5ZUOK-C4wtpAwq.js +1 -0
- package/dist/assets/classDiagram-v2-Q7XG4LA2-C4wtpAwq.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-O0n9jreS.js → cose-bilkent-S5V4N54A-COuE4psp.js} +1 -1
- package/dist/assets/{dagre-BM42HDAG-Ck6zQeMf.js → dagre-BM42HDAG-Ds00sUTy.js} +1 -1
- package/dist/assets/{diagram-2AECGRRQ-FCOxErT-.js → diagram-2AECGRRQ-WL9Y87tr.js} +1 -1
- package/dist/assets/{diagram-5GNKFQAL-D0zWiZLg.js → diagram-5GNKFQAL-aBrAL8WM.js} +1 -1
- package/dist/assets/{diagram-KO2AKTUF-a5h-Bdgo.js → diagram-KO2AKTUF-xncsnLEI.js} +1 -1
- package/dist/assets/{diagram-LMA3HP47-CXfuZFEZ.js → diagram-LMA3HP47-BKxHjemY.js} +1 -1
- package/dist/assets/{diagram-OG6HWLK6-CwfDYT_D.js → diagram-OG6HWLK6-ByznP8cO.js} +1 -1
- package/dist/assets/{en-US-CPOMr4oP.js → en-US-BtbJ8Hj4.js} +1 -1
- package/dist/assets/{erDiagram-TEJ5UH35-BBwjJDjM.js → erDiagram-TEJ5UH35-DU5qPROE.js} +1 -1
- package/dist/assets/{flowDiagram-I6XJVG4X-BswyzDkv.js → flowDiagram-I6XJVG4X-C2F4XnqL.js} +1 -1
- package/dist/assets/{ganttDiagram-6RSMTGT7-CrM3NdXk.js → ganttDiagram-6RSMTGT7-B1faqJNo.js} +1 -1
- package/dist/assets/{gitGraphDiagram-PVQCEYII-C_55vMLm.js → gitGraphDiagram-PVQCEYII-cqui4Qfv.js} +1 -1
- package/dist/assets/{index-DU7eIuEG.js → index-2n2SNzxw.js} +1 -1
- package/dist/assets/{index-CRvtbdzi.js → index-BW_rAoL5.js} +1 -1
- package/dist/assets/{index-CB9jZULW.js → index-BeelmCtF.js} +1 -1
- package/dist/assets/index-Bf7_I7lH.js +1 -0
- package/dist/assets/{index-DzkUMBvQ.js → index-BnQF9BCm.js} +1 -1
- package/dist/assets/{index-Bp9c5Tzf.js → index-BqUD7qIk.js} +1 -1
- package/dist/assets/{index-BWYAJeFP.js → index-CpTnNqu7.js} +1 -1
- package/dist/assets/index-CvJxkeFo.js +1 -0
- package/dist/assets/{index-DTYKAP0j.js → index-DhuMOkuR.js} +1 -1
- package/dist/assets/{index-dhm49pNj.js → index-KM7uqSeO.js} +3 -3
- package/dist/assets/{index-CKAGhJ4t.js → index-Xinu8DWx.js} +1 -1
- package/dist/assets/{index-BRAbdKCp.js → index-bCpdtLdC.js} +1 -1
- package/dist/assets/{infoDiagram-5YYISTIA-CMIn9b-v.js → infoDiagram-5YYISTIA-DOvPDrOE.js} +1 -1
- package/dist/assets/{ishikawaDiagram-YF4QCWOH-DZhhW7NF.js → ishikawaDiagram-YF4QCWOH-0k0oYtIK.js} +1 -1
- package/dist/assets/{journeyDiagram-JHISSGLW-DKat16ke.js → journeyDiagram-JHISSGLW-C8JpdLIs.js} +1 -1
- package/dist/assets/{kanban-definition-UN3LZRKU-C3Ra1Wtp.js → kanban-definition-UN3LZRKU-BF8B3Of4.js} +1 -1
- package/dist/assets/{main-C4wmVzw7.js → main-Bae5Z9x6.js} +3 -3
- package/dist/assets/{mindmap-definition-RKZ34NQL-h98UkYIr.js → mindmap-definition-RKZ34NQL-BdYqZgSn.js} +1 -1
- package/dist/assets/{pieDiagram-4H26LBE5-Ca1mbxfG.js → pieDiagram-4H26LBE5-DslzBdtA.js} +1 -1
- package/dist/assets/{quadrantDiagram-W4KKPZXB-Lye73YJ5.js → quadrantDiagram-W4KKPZXB-DjLReYd6.js} +1 -1
- package/dist/assets/{requirementDiagram-4Y6WPE33-BpctuKV3.js → requirementDiagram-4Y6WPE33-DBNIBpnN.js} +1 -1
- package/dist/assets/{sankeyDiagram-5OEKKPKP-2L2I86GH.js → sankeyDiagram-5OEKKPKP-DBfwCo3t.js} +1 -1
- package/dist/assets/{sequenceDiagram-3UESZ5HK-He2Uib8Z.js → sequenceDiagram-3UESZ5HK-BeokAqv3.js} +1 -1
- package/dist/assets/{stateDiagram-AJRCARHV-0CmRZrKD.js → stateDiagram-AJRCARHV-D0_29gC_.js} +1 -1
- package/dist/assets/{stateDiagram-v2-BHNVJYJU-DtpVPE6y.js → stateDiagram-v2-BHNVJYJU-BmoE01-Q.js} +1 -1
- package/dist/assets/{timeline-definition-PNZ67QCA-BS-Gg4pR.js → timeline-definition-PNZ67QCA-DLJCAk48.js} +1 -1
- package/dist/assets/{vendor-charts-DedjCauI.js → vendor-charts-C1qs2RDI.js} +1 -1
- package/dist/assets/{vendor-mermaid-DvB2TuRQ.js → vendor-mermaid-Cez766TY.js} +3 -3
- package/dist/assets/{vendor-pdf-EfagbHCQ.js → vendor-pdf-DhHoqANy.js} +3 -3
- package/dist/assets/{vennDiagram-CIIHVFJN-9-Ex40lP.js → vennDiagram-CIIHVFJN-Z5aH7FvY.js} +1 -1
- package/dist/assets/{wardley-L42UT6IY-C72bATqP.js → wardley-L42UT6IY-DFiCK17w.js} +1 -1
- package/dist/assets/{wardleyDiagram-YWT4CUSO-BvQAjPpP.js → wardleyDiagram-YWT4CUSO-Cd2bS0UW.js} +1 -1
- package/dist/assets/{xychartDiagram-2RQKCTM6-10L-VeDd.js → xychartDiagram-2RQKCTM6-Dy3zXPjx.js} +1 -1
- package/dist/assets/{zh-CN-ocl6T5wf.js → zh-CN-DhTukPYA.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/classDiagram-4FO5ZUOK-BbTF4DkK.js +0 -1
- package/dist/assets/classDiagram-v2-Q7XG4LA2-BbTF4DkK.js +0 -1
- package/dist/assets/index-BL6U2IJy.js +0 -1
- package/dist/assets/index-D1H01fvT.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as n}from"./App-
|
|
1
|
+
import{a as n}from"./App-CG8bbjSe.js";const r=s=>{const t=new URLSearchParams;Object.entries(s).forEach(([i,a])=>{a===void 0||a===""||t.set(i,String(a))});const e=t.toString();return e?`?${e}`:""};class d{async getSummary(t={}){const e=r({start_date:t.startDate,end_date:t.endDate});return n.get(`metrics/summary${e}`)}async getByModel(t={}){const e=r({start_date:t.startDate,end_date:t.endDate});return n.get(`metrics/by-model${e}`)}async getSessions(t={}){const e=r({start_date:t.startDate,end_date:t.endDate,model:t.model,limit:t.limit});return n.get(`metrics/sessions${e}`)}async getSessionDetail(t){try{return await n.get(`metrics/sessions/${encodeURIComponent(t)}`)}catch(e){if(e instanceof Error&&e.message.includes("not found"))return null;throw e}}async getUsageBreakdown(t={}){const e=r({start_date:t.startDate,end_date:t.endDate,model:t.model});return n.get(`metrics/usage-breakdown${e}`)}async getDaily(t={}){const e=r({days:t.days,end_date:t.endDate,granularity:t.granularity});return n.get(`metrics/daily${e}`)}async getForwardSummary(t={}){const e=r({start_date:t.startDate,end_date:t.endDate,endpoint:t.endpoint,model:t.model,limit:t.limit});return n.get(`metrics/forward/summary${e}`)}async getForwardByEndpoint(t={}){const e=r({start_date:t.startDate,end_date:t.endDate,endpoint:t.endpoint,model:t.model,limit:t.limit});return n.get(`metrics/forward/by-endpoint${e}`)}async getForwardRequests(t={}){const e=r({start_date:t.startDate,end_date:t.endDate,endpoint:t.endpoint,model:t.model,limit:t.limit});return n.get(`metrics/forward/requests${e}`)}async getMemorySummary(t={}){const e=r({scope:t.scope,project_key:t.projectKey});return n.get(`metrics/memory/summary${e}`)}async getMemoryTimeline(t={}){const e=r({scope:t.scope,project_key:t.projectKey,days:t.days,end_date:t.endDate,granularity:t.granularity});return n.get(`metrics/memory/timeline${e}`)}async getUnifiedSummary(t={}){const e=r({start_date:t.startDate,end_date:t.endDate});return n.get(`metrics/v2/summary${e}`)}async getUnifiedTimeline(t={}){const e=r({days:t.days,end_date:t.endDate,granularity:t.granularity});return n.get(`metrics/v2/timeline${e}`)}}const m=new d;export{m};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Oe=Object.defineProperty;var Fe=(t,e,l)=>e in t?Oe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:l}):t[e]=l;var pe=(t,e,l)=>Fe(t,typeof e!="symbol"?e+"":e,l);import{j as r}from"./vendor-markdown-teEfNS9t.js";import{a as u,u as
|
|
1
|
+
var Oe=Object.defineProperty;var Fe=(t,e,l)=>e in t?Oe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:l}):t[e]=l;var pe=(t,e,l)=>Fe(t,typeof e!="symbol"?e+"":e,l);import{j as r}from"./vendor-markdown-teEfNS9t.js";import{a as u,u as Y}from"./vendor-i18n-Dm-c3D_C.js";import{B,H as ve,J as Be,K as Xe,L as ze,M as De,N as We,O as Le,P as Ne,j as fe,Q as me,I as Q,u as R,R as Ue,q as Ge}from"./App-CG8bbjSe.js";import{x as L,Q as I,B as _,aw as Ke,a5 as qe,j as ee,t as te,ax as Ye,A as Je,k as ye,l as be,U as Ve}from"./vendor-antd-qu012Od4.js";import"./vendor-mermaid-Cez766TY.js";import"./main-Bae5Z9x6.js";const O=class O{static getInstance(){return O.instance||(O.instance=new O),O.instance}parseUserCommand(e){B("[ToolService]",`[ToolService] parseUserCommand: Parsing content: "${e}"`);const l=e.trim();if(!l.startsWith("/"))return B("[ToolService]",'[ToolService] parseUserCommand: Content does not start with "/", not a tool command.'),null;const n=l.indexOf(" ");let o,c;if(n===-1?(o=l.substring(1),c=""):(o=l.substring(1,n),c=l.substring(n+1).trim()),o){const g={tool_name:o,user_description:c};return B("[ToolService]","[ToolService] parseUserCommand: Successfully parsed command:",g),g}return B("[ToolService]","[ToolService] parseUserCommand: Failed to parse tool name from content."),null}parseAIResponseToToolCall(e){return this.parseUserCommand(e)}async executeTool(e){B("[ToolService]","[ToolService] executeTool: Attempting to execute tool via HTTP with request:",e);try{const l=await ve.post("tools/execute",e),n=JSON.parse(l.result);if(!n||typeof n!="object"||typeof n.success!="boolean"||typeof n.result!="string")throw new Error("Tool execution returned a malformed result");const o=n;return B("[ToolService]","[ToolService] executeTool: Parsed structured result:",o),o}catch(l){throw console.error("[ToolService] executeTool: HTTP tool execution failed:",l),l instanceof Be?new Error(`Workflow execution failed: ${l.message}`):l}}};pe(O,"instance");let Z=O;const J=new Z;class Qe{async listProfiles(){return ve.get("subagent_profiles")}}const Ze=new Qe,et=[];function tt(t={}){const{enabled:e=!0,refreshKey:l}=t,[n,o]=u.useState(null),[c,g]=u.useState(!1),[p,y]=u.useState(null),S=u.useCallback(async()=>{g(!0);try{const f=await Ze.listProfiles();o(f),y(null)}catch(f){y(f instanceof Error?f:new Error(String(f)))}finally{g(!1)}},[]);u.useEffect(()=>{e&&S()},[e,S,l]);const x=u.useMemo(()=>{const f=new Map;if(n!=null&&n.profiles)for(const v of n.profiles)f.set(v.id,v);return f},[n]);return{profiles:(n==null?void 0:n.profiles)??et,fallbackId:(n==null?void 0:n.fallback_id)??null,loading:c,error:p,refresh:S,byId:x}}const Te=(t,e)=>{const l=Xe(t,e);return ze({key:l,atomFamily:De,store:We,emptyState:Le})},nt=(t,e)=>t.outputPreview||e||"",Se=(t,e,l)=>{var S,x,f,v,m;const n=t==null?void 0:t.trim();if(!n)return null;const o=e.get(n),c=((S=o==null?void 0:o.display_name)==null?void 0:S.trim())||n,g=(f=(x=o==null?void 0:o.ui)==null?void 0:x.icon)==null?void 0:f.trim(),p=((m=(v=o==null?void 0:o.ui)==null?void 0:v.color)==null?void 0:m.trim())||void 0;return(l==null?void 0:l.compact)??!1?r.jsx("span",{"data-testid":`sub-agent-role-tag-${n}`,style:{color:p||"inherit",lineHeight:"inherit",whiteSpace:"nowrap"},children:g?`${g} ${c}`:c}):r.jsx(L,{color:p,style:{marginInlineEnd:0,flex:"0 0 auto"},"data-testid":`sub-agent-role-tag-${n}`,children:g?`${g} ${c}`:c})},st={preview:"",connecting:!1};function rt(t,e,l){const[n,o]=u.useState(""),[c,g]=u.useState(!1),p=u.useRef(""),y=u.useRef(null);return u.useEffect(()=>{if(!l||!e)return;let S=!1;const x=new AbortController,f=Ne(t,e).outputPreview??"";p.current=f,o(f),g(!0);const v=()=>{y.current=null,S||o(p.current)},m=()=>{y.current==null&&(y.current=setTimeout(v,80))},h=j=>{p.current=(p.current+j).slice(-me),m()};return f||(async()=>{try{const j=await fe.getHistory(e);if(S||p.current)return;const P=j.messages.filter(A=>A.role==="assistant"&&A.content).map(A=>A.content).join(`
|
|
2
2
|
|
|
3
|
-
`).slice(-me);P&&(p.current=P,o(P))}catch{}})(),fe.subscribeToEvents(e,{onToken:j=>h(j)},x).catch(()=>{}).finally(()=>{S||g(!1)}),()=>{S=!0,x.abort(),y.current!=null&&(clearTimeout(y.current),y.current=null)}},[l,t,e]),l?{preview:n,connecting:c}:st}const{Text:lt}=ee,{useToken:je}=te,Ce=u.memo(function({preview:e,maxHeight:l}){const n=u.useRef(null),{token:o}=je();return u.useEffect(()=>{const c=n.current;c&&(c.scrollTop=c.scrollHeight)},[e]),r.jsx("div",{ref:n,style:{maxHeight:l,overflowY:"auto",overflowX:"hidden",fontFamily:"monospace",fontSize:o.fontSizeSM,lineHeight:1.5,whiteSpace:"pre-wrap",wordBreak:"break-word",color:o.colorTextSecondary},children:e})}),we=({parentSessionId:t,childSessionId:e,childTitle:l,status:n,onOpenChild:o,children:c})=>{const{t:g}=q(),{token:p}=je(),[y,S]=u.useState(!1),[x,f]=u.useState(!1),v=Te(t,e),h=rt(t,e,y||x).preview||v.outputPreview,j=n==="running"?"processing":n==="completed"?"success":n==="error"||n==="failed"?"error":n==="cancelled"?"warning":"default",P=n==="running"?g("chat.subAgents.statusRunning"):n==="completed"?g("chat.subAgents.statusCompleted"):n==="pending"?g("chat.subAgents.statusPending"):n==="cancelled"?g("chat.subAgents.statusCancelled"):n==="error"||n==="failed"?g("chat.subAgents.statusFailed"):n??"",A=()=>{S(!1),f(!0)},T=()=>{f(!1),o(e)},w=r.jsxs("div",{children:[r.jsx(I,{justify:"flex-end",style:{marginBottom:p.marginXS},children:r.jsx(_,{size:"small",type:"link",onClick:A,children:g("chat.subAgents.previewExpand")})}),r.jsx(Ce,{preview:h,maxHeight:320})]});return r.jsxs(r.Fragment,{children:[r.jsx(Ke,{trigger:"hover",mouseEnterDelay:.3,open:y&&!x,onOpenChange:S,content:w,overlayInnerStyle:{width:420},children:c}),r.jsx(Ye,{open:x,mask:!1,width:640,onCancel:()=>f(!1),title:r.jsxs(I,{align:"center",gap:p.marginXS,children:[r.jsx(lt,{strong:!0,ellipsis:!0,style:{minWidth:0},children:l||g("chat.subAgents.fallbackTitle")}),n?r.jsx(L,{color:j,style:{flex:"0 0 auto"},children:P}):null]}),footer:r.jsxs(I,{justify:"flex-end",gap:p.marginSM,children:[r.jsx(_,{onClick:()=>f(!1),children:g("chat.subAgents.previewClose")}),r.jsx(_,{type:"primary",onClick:T,children:g("chat.subAgents.previewOpenSession")})]}),children:r.jsx(Ce,{preview:h,maxHeight:"60vh"})})]})},{Text:D}=ee,{useToken:ot}=te,it=t=>{const e=(t||"").trim().toLowerCase();return e?e==="started"||e==="already_running"?"running":e==="success"||e==="done"?"completed":e==="canceled"?"cancelled":e==="queued"||e==="created"?"pending":e:"pending"},at=u.memo(({parentSessionId:t,item:e,index:l,compact:n,isRetrying:o,isContinuing:c,isDeleting:g,subagentProfilesById:p,onOpenChild:y,onContinueChild:S,onRetryChild:x,onTogglePin:f,onDeleteChild:v})=>{const{token:m}=ot(),{t:h}=q(),j=Te(t,e.childSessionId),P=nt(j,e.outputPreview),A=n?{marginInlineEnd:0,flex:"0 0 auto",fontSize:10,lineHeight:"16px",paddingInline:6}:{marginInlineEnd:0,flex:"0 0 auto"},T=n?{paddingInline:0,height:22}:void 0,w=it(e.status),X=w==="running",H=o||c||g,N=["running","completed","cancelled","error","failed"].includes(w),z=C=>C==="running"?h("chat.subAgents.statusRunning"):C==="completed"?h("chat.subAgents.statusCompleted"):C==="pending"?h("chat.subAgents.statusPending"):C==="cancelled"?h("chat.subAgents.statusCancelled"):C==="error"||C==="failed"?h("chat.subAgents.statusFailed"):C,k=C=>C==="running"?m.colorPrimary:C==="completed"?m.colorSuccess:C==="error"||C==="failed"?m.colorError:C==="cancelled"?m.colorWarning:m.colorTextSecondary;return r.jsxs(I,{vertical:!0,gap:n?6:m.marginSM,className:n?void 0:"lotus-settings-list-item",style:{width:"100%",minWidth:0,padding:n?"6px 0":m.paddingSM,borderRadius:n?0:m.borderRadiusSM,borderTop:n&&l>0?`1px solid ${m.colorBorderSecondary}`:void 0,background:n?"transparent":void 0},children:[r.jsxs(I,{vertical:!0,style:{width:"100%",minWidth:0},children:[r.jsxs(I,{align:"center",gap:m.marginXS,wrap:!0,style:{width:"100%",minWidth:0},children:[r.jsx(D,{strong:!0,ellipsis:!0,style:{minWidth:0,flex:"1 1 180px",fontSize:n?13:void 0},children:(e.lifecycle==="resident"?e.residentName:null)||e.title||h("chat.subAgents.fallbackTitle")}),n?r.jsx(Q,{nowrap:!0,items:[r.jsx("span",{style:{color:k(w)},children:z(w)}),e.pinned?h("chat.subAgents.pinned"):null,e.lifecycle==="resident"?h("chat.subAgents.residentBadge"):null,Se(e.subagentType,p,{compact:!0})]}):r.jsxs(r.Fragment,{children:[r.jsx(L,{color:w==="running"?"processing":w==="completed"?"success":w==="error"||w==="failed"?"error":w==="cancelled"?"warning":"default",style:A,children:z(w)}),e.pinned?r.jsx(L,{color:"warning",style:A,children:h("chat.subAgents.pinned")}):null,e.lifecycle==="resident"?r.jsx(L,{color:"purple",style:A,children:h("chat.subAgents.residentBadge")}):null,Se(e.subagentType,p)]})]}),n?r.jsx(Q,{block:!0,items:[e.childSessionId.slice(0,8),e.updatedAt,e.lastHeartbeatAt?`${h("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:null,typeof e.roundCount=="number"?`${h("chat.subAgents.round")} ${e.roundCount+1}`:null]}):r.jsxs(D,{type:"secondary",style:{display:"block",minWidth:0,fontSize:12,marginTop:2},children:[e.childSessionId.slice(0,8),e.updatedAt?` • ${e.updatedAt}`:"",e.lastHeartbeatAt?` • ${h("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:"",typeof e.roundCount=="number"?` • ${h("chat.subAgents.round")} ${e.roundCount+1}`:""]}),P?r.jsx(we,{parentSessionId:t,childSessionId:e.childSessionId,childTitle:e.title,status:w,onOpenChild:y,children:r.jsx(D,{type:"secondary",style:{display:"block",minWidth:0,marginTop:n?4:m.marginXS,fontSize:n?11:13,lineHeight:n?1.35:void 0},ellipsis:!0,children:P})}):N?r.jsx(we,{parentSessionId:t,childSessionId:e.childSessionId,childTitle:e.title,status:w,onOpenChild:y,children:r.jsx(D,{type:"secondary",italic:!0,style:{display:"block",minWidth:0,marginTop:n?4:m.marginXS,fontSize:n?11:12,lineHeight:n?1.35:void 0,opacity:.65,cursor:"pointer"},children:h("chat.subAgents.previewHint")})}):null,e.error?r.jsx(D,{type:"danger",style:{display:"block",minWidth:0,marginTop:n?4:m.marginXS,fontSize:n?11:void 0,lineHeight:n?1.35:void 0},children:e.error}):null]}),r.jsxs(I,{gap:n?4:8,wrap:!0,style:{width:"100%",minWidth:0,paddingTop:n?2:0},children:[r.jsx(_,{size:"small",type:n?"text":"default",style:T,disabled:H,onClick:()=>y(e.childSessionId),children:h("chat.subAgents.open")}),r.jsx(_,{size:"small",type:n?"text":"default",style:T,loading:c,disabled:g||o,"data-testid":`sub-agent-continue-${e.childSessionId}`,onClick:()=>S(e.childSessionId),children:h("chat.subAgents.continue")}),r.jsx(qe,{trigger:["click"],menu:{items:[{key:"regenerate",label:h("chat.actions.regenerate")},{key:"error_retry",label:h("chat.actions.retryFailed")}],onClick:({key:C})=>{x(e.childSessionId,C)}},disabled:g||X||c,children:r.jsx(_,{size:"small",type:n?"text":"default",style:T,loading:o,disabled:g||X||c,"data-testid":`sub-agent-retry-${e.childSessionId}`,children:h("chat.subAgents.retry")})}),typeof e.pinned=="boolean"?r.jsx(_,{size:"small",type:n?"text":"default",style:T,disabled:H,onClick:()=>f(e.childSessionId,e.pinned),children:e.pinned?h("chat.actions.unpin"):h("chat.actions.pin")}):null,r.jsx(_,{danger:!0,type:n?"text":"default",style:T,size:"small",loading:g,disabled:o,"data-testid":`sub-agent-delete-${e.childSessionId}`,onClick:()=>v(e.childSessionId),children:h("common.delete")})]})]})},(t,e)=>t.parentSessionId===e.parentSessionId&&t.item===e.item&&t.index===e.index&&t.compact===e.compact&&t.isRetrying===e.isRetrying&&t.isContinuing===e.isContinuing&&t.isDeleting===e.isDeleting&&t.subagentProfilesById===e.subagentProfilesById&&t.onOpenChild===e.onOpenChild&&t.onContinueChild===e.onContinueChild&&t.onRetryChild===e.onRetryChild&&t.onTogglePin===e.onTogglePin&&t.onDeleteChild===e.onDeleteChild),{Text:W}=ee,{useToken:Ee}=te,ut="chat-session-sub-agents-collapsed:",ct=3,dt=600,Y=t=>{const e=(t||"").trim().toLowerCase();return e?e==="started"||e==="already_running"?"running":e==="success"||e==="done"?"completed":e==="canceled"?"cancelled":e==="queued"||e==="created"?"pending":e:"pending"},gt=(t,e)=>{if(e&&e.trim())return e;if(t.isRunning)return"running";if(t.lastRunStatus&&t.lastRunStatus.trim())return t.lastRunStatus;const l=t.messageCount??0;return l>2?"completed":(l>0,"pending")},ht=new Set(["running","pending"]),pt=t=>ht.has(Y(t)),V=(t,e)=>{const l=(e.createdAt??0)-(t.createdAt??0);return l!==0?l:t.childSessionId.localeCompare(e.childSessionId)},Pe=t=>`${ut}${t}`,xe=t=>{if(typeof window>"u")return!1;try{const e=window.localStorage.getItem(Pe(t));return e==="1"?!0:e==="0"?!1:null}catch{return null}},ft=(t,e)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(Pe(t),e?"1":"0")}catch{}},Ae=(t,e)=>t.childSessionId===e.childSessionId&&t.title===e.title&&t.status===e.status&&t.error===e.error&&t.lastHeartbeatAt===e.lastHeartbeatAt&&t.lastEventAt===e.lastEventAt&&t.outputPreview===e.outputPreview&&t.pinned===e.pinned&&t.updatedAt===e.updatedAt&&t.createdAt===e.createdAt&&t.isRunning===e.isRunning&&t.messageCount===e.messageCount&&t.lastRunStatus===e.lastRunStatus&&t.lastRunError===e.lastRunError&&t.subagentType===e.subagentType&&t.roundCount===e.roundCount&&t.lifecycle===e.lifecycle&&t.residentName===e.residentName,vt=({parentSessionId:t,compact:e=!1})=>{const{t:l}=q(),{token:n}=Ee(),{message:o}=Je.useApp(),[c,g]=u.useState(()=>xe(t)??!1),[p,y]=u.useState(null),[S,x]=u.useState(null),[f,v]=u.useState(null),[m,h]=u.useState(!1),j=R(s=>Ue(t)(s)),P=R(s=>s.chats),A=R(s=>s.loadChatHistory),T=R(s=>s.refreshChats),w=R(s=>s.markOptimisticStart),X=R(s=>s.markRetryStart),H=R(s=>s.markSettleTimeout),N=R(s=>s.pinSession),z=R(s=>s.unpinSession),k=R(s=>s.applyChildProgress),C=R(s=>s.clearChildProgress),{byId:ke}=tt(),ne=u.useRef(new Map),se=u.useMemo(()=>Object.entries(j).map(([s,a])=>({childSessionId:s,...a})),[j]),re=u.useMemo(()=>P.filter(s=>s.kind==="child"&&s.parentSessionId===t).sort((s,a)=>(a.createdAt??0)-(s.createdAt??0)),[P,t]),$=u.useMemo(()=>{const s=new Map(se.map(i=>[i.childSessionId,i])),a=ne.current,b=[];for(const i of re){const d=s.get(i.id),E={childSessionId:i.id,title:i.title||(d==null?void 0:d.title),status:Y(gt(i,d==null?void 0:d.status)),error:(d==null?void 0:d.error)||i.lastRunError,lastHeartbeatAt:d==null?void 0:d.lastHeartbeatAt,lastEventAt:d==null?void 0:d.lastEventAt,outputPreview:d==null?void 0:d.outputPreview,roundCount:d==null?void 0:d.roundCount,pinned:i.pinned,updatedAt:i.updatedAt,createdAt:i.createdAt,isRunning:i.isRunning,messageCount:i.messageCount,lastRunStatus:i.lastRunStatus,lastRunError:i.lastRunError,subagentType:i.subagentType??null,lifecycle:i.lifecycle??null,residentName:i.residentName??null},M=a.get(i.id);b.push(M&&Ae(M,E)?M:E),s.delete(i.id)}for(const i of s.values()){const d={childSessionId:i.childSessionId,title:i.title,status:Y(i.status),error:i.error,lastHeartbeatAt:i.lastHeartbeatAt,lastEventAt:i.lastEventAt,outputPreview:i.outputPreview,roundCount:i.roundCount,createdAt:Date.now()},E=a.get(i.childSessionId);b.push(E&&Ae(E,d)?E:d)}return ne.current=new Map(b.map(i=>[i.childSessionId,i])),b},[re,se]),{residentItems:U,activeItems:G,completedItems:F}=u.useMemo(()=>{const s=[],a=[],b=[];for(const i of $)i.lifecycle==="resident"?s.push(i):pt(i.status)?a.push(i):b.push(i);return s.sort(V),a.sort(V),b.sort(V),{residentItems:s,activeItems:a,completedItems:b}},[$]);u.useEffect(()=>{g(xe(t)??!1)},[t]);const Re=u.useCallback(()=>{g(s=>{const a=!s;return ft(t,a),a})},[t]),le=u.useCallback(s=>s instanceof Error&&s.message.trim()?s.message:l("chat.subAgents.runChildFailed"),[l]),oe=u.useCallback(async(s,a="regenerate")=>{y(s),k(t,s,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),X(s);try{const b=await J.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"run"},{name:"child_session_id",value:s},{name:"reset_to_last_user",value:a==="error_retry"?"false":"true"}]});if(!b.success)throw new Error(b.result||"Failed to run sub-agent");k(t,s,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),await A(s,{mode:"replace"}),await T()}catch(b){H(s),k(t,s,{status:"error",error:le(b),lastEventAt:new Date().toISOString()})}finally{y(b=>b===s?null:b)}},[A,t,T,X,H,le,k]),ie=u.useCallback(async s=>{const a=typeof window<"u"?window.prompt.bind(window):null;if(!a)return;const b=a("Send a follow-up message to this sub-agent:","Continue from where you left off.");if(b===null)return;const i=b.trim();if(!i){k(t,s,{status:"error",error:"Follow-up message cannot be empty.",lastEventAt:new Date().toISOString()});return}x(s),k(t,s,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),w(s);try{const d=await J.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"send_message"},{name:"child_session_id",value:s},{name:"message",value:i},{name:"auto_run",value:"true"}]});if(!d.success)throw new Error(d.result||"Follow-up failed");let E="running";try{const M=JSON.parse(d.result);M.status==="message_delivered_live"?(E="running",o.success(l("chat.subAgents.steeredLive"))):M.status==="message_queued"?(E="pending",o.info(l("chat.subAgents.queuedNextTurn"))):M.status==="pending"&&(E="pending")}catch{E="running"}k(t,s,{status:E,error:void 0,lastEventAt:new Date().toISOString()}),await T()}catch(d){H(s),k(t,s,{status:"error",error:d instanceof Error&&d.message.trim()?d.message:l("chat.subAgents.continueChildFailed"),lastEventAt:new Date().toISOString()})}finally{x(d=>d===s?null:d)}},[t,T,w,H,k,l,o]),ae=u.useCallback(async s=>{v(s);try{const a=await J.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"delete"},{name:"child_session_id",value:s}]});if(!a.success)throw new Error(a.result||"Failed to delete sub-agent");C(t,s),await T()}finally{v(a=>a===s?null:a)}},[C,t,T]),_e=u.useCallback(s=>{Ge(s),A(s)},[A]),Ie=u.useCallback(s=>{ie(s)},[ie]),$e=u.useCallback((s,a)=>{oe(s,a)},[oe]),He=u.useCallback((s,a)=>{a?z(s):N(s)},[N,z]),Me=u.useCallback(s=>{ae(s)},[ae]);if($.length===0)return null;const ue=r.jsxs(W,{strong:!0,children:[l("chat.subAgents.title")," ",r.jsx(W,{type:"secondary",children:G.length>0?l("chat.subAgents.headerCount",{active:G.length,total:$.length}):`(${$.length})`})]}),ce=r.jsx(_,{type:"text",size:"small",icon:c?r.jsx(ye,{}):r.jsx(be,{}),onClick:Re,"data-testid":"sub-agents-toggle",style:e?{paddingInline:4}:void 0,children:l(c?"chat.subAgents.expand":"chat.subAgents.collapse")}),K=(s,a)=>r.jsx(at,{parentSessionId:t,item:s,index:a,compact:e,isRetrying:p===s.childSessionId,isContinuing:S===s.childSessionId,isDeleting:f===s.childSessionId,subagentProfilesById:ke,onOpenChild:_e,onContinueChild:Ie,onRetryChild:$e,onTogglePin:He,onDeleteChild:Me},s.childSessionId),de=F.length<=ct,ge=c?r.jsx(W,{type:"secondary","data-testid":"sub-agents-collapsed-hint",children:l("chat.subAgents.hiddenHint",{count:$.length})}):r.jsxs(I,{vertical:!0,gap:e?n.marginXS:n.marginSM,"data-testid":"sub-agents-list",style:{width:"100%",minWidth:0,maxHeight:`${dt}px`,overflowY:"auto",overflowX:"hidden",paddingRight:e?0:n.paddingXS},children:[U.length>0?r.jsxs(r.Fragment,{children:[r.jsx(W,{type:"secondary","data-testid":"sub-agents-resident-label",style:{fontSize:12,opacity:.75},children:l("chat.subAgents.residentGroup",{count:U.length})}),U.map((s,a)=>K(s,a))]}):null,G.length>0?G.map((s,a)=>K(s,a)):U.length===0&&F.length>0&&!de?r.jsx(W,{type:"secondary","data-testid":"sub-agents-no-active",children:l("chat.subAgents.noActive")}):null,F.length>0?de?F.map((s,a)=>K(s,a)):r.jsxs(r.Fragment,{children:[r.jsx(_,{type:"text",size:"small","data-testid":"sub-agents-completed-toggle",icon:m?r.jsx(be,{}):r.jsx(ye,{}),onClick:()=>h(s=>!s),style:{alignSelf:"flex-start",paddingInline:4,color:n.colorTextSecondary},children:l("chat.subAgents.completedGroup",{count:F.length})}),m?F.map((s,a)=>K(s,a)):null]}):null]}),he=!c&&$.length>1?r.jsx(mt,{items:$}):null;return e?r.jsxs("section",{"data-testid":"sub-agents-panel",style:{width:"100%",minWidth:0,marginBottom:n.marginXS,overflow:"hidden"},children:[r.jsxs(I,{align:"center",justify:"space-between",gap:n.marginXS,style:{padding:`${n.paddingXXS??2}px 0 ${n.paddingXS}px`,borderBottom:`1px solid ${n.colorBorderSecondary}`},children:[r.jsx("div",{style:{flex:1,minWidth:0},children:ue}),r.jsx("div",{style:{flex:"0 0 auto"},children:ce})]}),r.jsxs("div",{style:{padding:`${n.paddingXS}px 0 0`},children:[ge,he]})]}):r.jsxs(Ve,{size:"small",className:"lotus-settings-card",style:{marginBottom:n.marginMD},"data-testid":"sub-agents-panel",title:ue,extra:ce,children:[ge,he]})},mt=({items:t})=>{const{token:e}=Ee(),{t:l}=q(),n=t.reduce((c,g)=>{const p=Y(g.status);return p==="completed"?c.completed++:p==="running"?c.running++:p==="error"||p==="failed"?c.error++:p==="cancelled"?c.cancelled++:c.pending++,c},{completed:0,running:0,error:0,pending:0,cancelled:0}),o=[];return n.completed>0&&o.push(l("chat.subAgents.summaryCompleted",{count:n.completed})),n.running>0&&o.push(l("chat.subAgents.summaryRunning",{count:n.running})),n.pending>0&&o.push(l("chat.subAgents.summaryPending",{count:n.pending})),n.cancelled>0&&o.push(`${n.cancelled} ${l("chat.subAgents.statusCancelled")}`),n.error>0&&o.push(l("chat.subAgents.summaryFailed",{count:n.error})),o.length===0?null:r.jsx(Q,{block:!0,items:o,style:{marginTop:e.marginXS}})};export{vt as SubAgentsPanel};
|
|
3
|
+
`).slice(-me);P&&(p.current=P,o(P))}catch{}})(),fe.subscribeToEvents(e,{onToken:j=>h(j)},x).catch(()=>{}).finally(()=>{S||g(!1)}),()=>{S=!0,x.abort(),y.current!=null&&(clearTimeout(y.current),y.current=null)}},[l,t,e]),l?{preview:n,connecting:c}:st}const{Text:lt}=ee,{useToken:je}=te,Ce=u.memo(function({preview:e,maxHeight:l}){const n=u.useRef(null),{token:o}=je();return u.useEffect(()=>{const c=n.current;c&&(c.scrollTop=c.scrollHeight)},[e]),r.jsx("div",{ref:n,style:{maxHeight:l,overflowY:"auto",overflowX:"hidden",fontFamily:"monospace",fontSize:o.fontSizeSM,lineHeight:1.5,whiteSpace:"pre-wrap",wordBreak:"break-word",color:o.colorTextSecondary},children:e})}),we=({parentSessionId:t,childSessionId:e,childTitle:l,status:n,onOpenChild:o,children:c})=>{const{t:g}=Y(),{token:p}=je(),[y,S]=u.useState(!1),[x,f]=u.useState(!1),v=Te(t,e),h=rt(t,e,y||x).preview||v.outputPreview,j=n==="running"?"processing":n==="completed"?"success":n==="error"||n==="failed"?"error":n==="cancelled"?"warning":"default",P=n==="running"?g("chat.subAgents.statusRunning"):n==="completed"?g("chat.subAgents.statusCompleted"):n==="pending"?g("chat.subAgents.statusPending"):n==="cancelled"?g("chat.subAgents.statusCancelled"):n==="error"||n==="failed"?g("chat.subAgents.statusFailed"):n??"",A=()=>{S(!1),f(!0)},T=()=>{f(!1),o(e)},w=r.jsxs("div",{children:[r.jsx(I,{justify:"flex-end",style:{marginBottom:p.marginXS},children:r.jsx(_,{size:"small",type:"link",onClick:A,children:g("chat.subAgents.previewExpand")})}),r.jsx(Ce,{preview:h,maxHeight:320})]});return r.jsxs(r.Fragment,{children:[r.jsx(Ke,{trigger:"hover",mouseEnterDelay:.3,open:y&&!x,onOpenChange:S,content:w,overlayInnerStyle:{width:420},children:c}),r.jsx(qe,{open:x,mask:!1,width:640,onCancel:()=>f(!1),title:r.jsxs(I,{align:"center",gap:p.marginXS,children:[r.jsx(lt,{strong:!0,ellipsis:!0,style:{minWidth:0},children:l||g("chat.subAgents.fallbackTitle")}),n?r.jsx(L,{color:j,style:{flex:"0 0 auto"},children:P}):null]}),footer:r.jsxs(I,{justify:"flex-end",gap:p.marginSM,children:[r.jsx(_,{onClick:()=>f(!1),children:g("chat.subAgents.previewClose")}),r.jsx(_,{type:"primary",onClick:T,children:g("chat.subAgents.previewOpenSession")})]}),children:r.jsx(Ce,{preview:h,maxHeight:"60vh"})})]})},{Text:D}=ee,{useToken:ot}=te,it=t=>{const e=(t||"").trim().toLowerCase();return e?e==="started"||e==="already_running"?"running":e==="success"||e==="done"?"completed":e==="canceled"?"cancelled":e==="queued"||e==="created"?"pending":e:"pending"},at=u.memo(({parentSessionId:t,item:e,index:l,compact:n,isRetrying:o,isContinuing:c,isDeleting:g,subagentProfilesById:p,onOpenChild:y,onContinueChild:S,onRetryChild:x,onTogglePin:f,onDeleteChild:v})=>{const{token:m}=ot(),{t:h}=Y(),j=Te(t,e.childSessionId),P=nt(j,e.outputPreview),A=n?{marginInlineEnd:0,flex:"0 0 auto",fontSize:10,lineHeight:"16px",paddingInline:6}:{marginInlineEnd:0,flex:"0 0 auto"},T=n?{paddingInline:0,height:22}:void 0,w=it(e.status),X=w==="running",H=o||c||g,N=["running","completed","cancelled","error","failed"].includes(w),z=C=>C==="running"?h("chat.subAgents.statusRunning"):C==="completed"?h("chat.subAgents.statusCompleted"):C==="pending"?h("chat.subAgents.statusPending"):C==="cancelled"?h("chat.subAgents.statusCancelled"):C==="error"||C==="failed"?h("chat.subAgents.statusFailed"):C,k=C=>C==="running"?m.colorPrimary:C==="completed"?m.colorSuccess:C==="error"||C==="failed"?m.colorError:C==="cancelled"?m.colorWarning:m.colorTextSecondary;return r.jsxs(I,{vertical:!0,gap:n?6:m.marginSM,className:n?void 0:"lotus-settings-list-item",style:{width:"100%",minWidth:0,padding:n?"6px 0":m.paddingSM,borderRadius:n?0:m.borderRadiusSM,borderTop:n&&l>0?`1px solid ${m.colorBorderSecondary}`:void 0,background:n?"transparent":void 0},children:[r.jsxs(I,{vertical:!0,style:{width:"100%",minWidth:0},children:[r.jsxs(I,{align:"center",gap:m.marginXS,wrap:!0,style:{width:"100%",minWidth:0},children:[r.jsx(D,{strong:!0,ellipsis:!0,style:{minWidth:0,flex:"1 1 180px",fontSize:n?13:void 0},children:(e.lifecycle==="resident"?e.residentName:null)||e.title||h("chat.subAgents.fallbackTitle")}),n?r.jsx(Q,{nowrap:!0,items:[r.jsx("span",{style:{color:k(w)},children:z(w)}),e.pinned?h("chat.subAgents.pinned"):null,e.lifecycle==="resident"?h("chat.subAgents.residentBadge"):null,Se(e.subagentType,p,{compact:!0})]}):r.jsxs(r.Fragment,{children:[r.jsx(L,{color:w==="running"?"processing":w==="completed"?"success":w==="error"||w==="failed"?"error":w==="cancelled"?"warning":"default",style:A,children:z(w)}),e.pinned?r.jsx(L,{color:"warning",style:A,children:h("chat.subAgents.pinned")}):null,e.lifecycle==="resident"?r.jsx(L,{color:"purple",style:A,children:h("chat.subAgents.residentBadge")}):null,Se(e.subagentType,p)]})]}),n?r.jsx(Q,{block:!0,items:[e.childSessionId.slice(0,8),e.updatedAt,e.lastHeartbeatAt?`${h("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:null,typeof e.roundCount=="number"?`${h("chat.subAgents.round")} ${e.roundCount+1}`:null]}):r.jsxs(D,{type:"secondary",style:{display:"block",minWidth:0,fontSize:12,marginTop:2},children:[e.childSessionId.slice(0,8),e.updatedAt?` • ${e.updatedAt}`:"",e.lastHeartbeatAt?` • ${h("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:"",typeof e.roundCount=="number"?` • ${h("chat.subAgents.round")} ${e.roundCount+1}`:""]}),P?r.jsx(we,{parentSessionId:t,childSessionId:e.childSessionId,childTitle:e.title,status:w,onOpenChild:y,children:r.jsx(D,{type:"secondary",style:{display:"block",minWidth:0,marginTop:n?4:m.marginXS,fontSize:n?11:13,lineHeight:n?1.35:void 0},ellipsis:!0,children:P})}):N?r.jsx(we,{parentSessionId:t,childSessionId:e.childSessionId,childTitle:e.title,status:w,onOpenChild:y,children:r.jsx(D,{type:"secondary",italic:!0,style:{display:"block",minWidth:0,marginTop:n?4:m.marginXS,fontSize:n?11:12,lineHeight:n?1.35:void 0,opacity:.65,cursor:"pointer"},children:h("chat.subAgents.previewHint")})}):null,e.error?r.jsx(D,{type:"danger",style:{display:"block",minWidth:0,marginTop:n?4:m.marginXS,fontSize:n?11:void 0,lineHeight:n?1.35:void 0},children:e.error}):null]}),r.jsxs(I,{gap:n?4:8,wrap:!0,style:{width:"100%",minWidth:0,paddingTop:n?2:0},children:[r.jsx(_,{size:"small",type:n?"text":"default",style:T,disabled:H,onClick:()=>y(e.childSessionId),children:h("chat.subAgents.open")}),r.jsx(_,{size:"small",type:n?"text":"default",style:T,loading:c,disabled:g||o,"data-testid":`sub-agent-continue-${e.childSessionId}`,onClick:()=>S(e.childSessionId),children:h("chat.subAgents.continue")}),r.jsx(Ye,{trigger:["click"],menu:{items:[{key:"regenerate",label:h("chat.actions.regenerate")},{key:"error_retry",label:h("chat.actions.retryFailed")}],onClick:({key:C})=>{x(e.childSessionId,C)}},disabled:g||X||c,children:r.jsx(_,{size:"small",type:n?"text":"default",style:T,loading:o,disabled:g||X||c,"data-testid":`sub-agent-retry-${e.childSessionId}`,children:h("chat.subAgents.retry")})}),typeof e.pinned=="boolean"?r.jsx(_,{size:"small",type:n?"text":"default",style:T,disabled:H,onClick:()=>f(e.childSessionId,e.pinned),children:e.pinned?h("chat.actions.unpin"):h("chat.actions.pin")}):null,r.jsx(_,{danger:!0,type:n?"text":"default",style:T,size:"small",loading:g,disabled:o,"data-testid":`sub-agent-delete-${e.childSessionId}`,onClick:()=>v(e.childSessionId),children:h("common.delete")})]})]})},(t,e)=>t.parentSessionId===e.parentSessionId&&t.item===e.item&&t.index===e.index&&t.compact===e.compact&&t.isRetrying===e.isRetrying&&t.isContinuing===e.isContinuing&&t.isDeleting===e.isDeleting&&t.subagentProfilesById===e.subagentProfilesById&&t.onOpenChild===e.onOpenChild&&t.onContinueChild===e.onContinueChild&&t.onRetryChild===e.onRetryChild&&t.onTogglePin===e.onTogglePin&&t.onDeleteChild===e.onDeleteChild),{Text:W}=ee,{useToken:Ee}=te,ut="chat-session-sub-agents-collapsed:",ct=3,dt=600,q=t=>{const e=(t||"").trim().toLowerCase();return e?e==="started"||e==="already_running"?"running":e==="success"||e==="done"?"completed":e==="canceled"?"cancelled":e==="queued"||e==="created"?"pending":e:"pending"},gt=(t,e)=>{if(e&&e.trim())return e;if(t.isRunning)return"running";if(t.lastRunStatus&&t.lastRunStatus.trim())return t.lastRunStatus;const l=t.messageCount??0;return l>2?"completed":(l>0,"pending")},ht=new Set(["running","pending"]),pt=t=>ht.has(q(t)),V=(t,e)=>{const l=(e.createdAt??0)-(t.createdAt??0);return l!==0?l:t.childSessionId.localeCompare(e.childSessionId)},Pe=t=>`${ut}${t}`,xe=t=>{if(typeof window>"u")return!1;try{const e=window.localStorage.getItem(Pe(t));return e==="1"?!0:e==="0"?!1:null}catch{return null}},ft=(t,e)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(Pe(t),e?"1":"0")}catch{}},Ae=(t,e)=>t.childSessionId===e.childSessionId&&t.title===e.title&&t.status===e.status&&t.error===e.error&&t.lastHeartbeatAt===e.lastHeartbeatAt&&t.lastEventAt===e.lastEventAt&&t.outputPreview===e.outputPreview&&t.pinned===e.pinned&&t.updatedAt===e.updatedAt&&t.createdAt===e.createdAt&&t.isRunning===e.isRunning&&t.messageCount===e.messageCount&&t.lastRunStatus===e.lastRunStatus&&t.lastRunError===e.lastRunError&&t.subagentType===e.subagentType&&t.roundCount===e.roundCount&&t.lifecycle===e.lifecycle&&t.residentName===e.residentName,vt=({parentSessionId:t,compact:e=!1})=>{const{t:l}=Y(),{token:n}=Ee(),{message:o}=Je.useApp(),[c,g]=u.useState(()=>xe(t)??!1),[p,y]=u.useState(null),[S,x]=u.useState(null),[f,v]=u.useState(null),[m,h]=u.useState(!1),j=R(s=>Ue(t)(s)),P=R(s=>s.chats),A=R(s=>s.loadChatHistory),T=R(s=>s.refreshChats),w=R(s=>s.markOptimisticStart),X=R(s=>s.markRetryStart),H=R(s=>s.markSettleTimeout),N=R(s=>s.pinSession),z=R(s=>s.unpinSession),k=R(s=>s.applyChildProgress),C=R(s=>s.clearChildProgress),{byId:ke}=tt(),ne=u.useRef(new Map),se=u.useMemo(()=>Object.entries(j).map(([s,a])=>({childSessionId:s,...a})),[j]),re=u.useMemo(()=>P.filter(s=>s.kind==="child"&&s.parentSessionId===t).sort((s,a)=>(a.createdAt??0)-(s.createdAt??0)),[P,t]),$=u.useMemo(()=>{const s=new Map(se.map(i=>[i.childSessionId,i])),a=ne.current,b=[];for(const i of re){const d=s.get(i.id),E={childSessionId:i.id,title:i.title||(d==null?void 0:d.title),status:q(gt(i,d==null?void 0:d.status)),error:(d==null?void 0:d.error)||i.lastRunError,lastHeartbeatAt:d==null?void 0:d.lastHeartbeatAt,lastEventAt:d==null?void 0:d.lastEventAt,outputPreview:d==null?void 0:d.outputPreview,roundCount:d==null?void 0:d.roundCount,pinned:i.pinned,updatedAt:i.updatedAt,createdAt:i.createdAt,isRunning:i.isRunning,messageCount:i.messageCount,lastRunStatus:i.lastRunStatus,lastRunError:i.lastRunError,subagentType:i.subagentType??null,lifecycle:i.lifecycle??null,residentName:i.residentName??null},M=a.get(i.id);b.push(M&&Ae(M,E)?M:E),s.delete(i.id)}for(const i of s.values()){const d={childSessionId:i.childSessionId,title:i.title,status:q(i.status),error:i.error,lastHeartbeatAt:i.lastHeartbeatAt,lastEventAt:i.lastEventAt,outputPreview:i.outputPreview,roundCount:i.roundCount,createdAt:Date.now()},E=a.get(i.childSessionId);b.push(E&&Ae(E,d)?E:d)}return ne.current=new Map(b.map(i=>[i.childSessionId,i])),b},[re,se]),{residentItems:U,activeItems:G,completedItems:F}=u.useMemo(()=>{const s=[],a=[],b=[];for(const i of $)i.lifecycle==="resident"?s.push(i):pt(i.status)?a.push(i):b.push(i);return s.sort(V),a.sort(V),b.sort(V),{residentItems:s,activeItems:a,completedItems:b}},[$]);u.useEffect(()=>{g(xe(t)??!1)},[t]);const Re=u.useCallback(()=>{g(s=>{const a=!s;return ft(t,a),a})},[t]),le=u.useCallback(s=>s instanceof Error&&s.message.trim()?s.message:l("chat.subAgents.runChildFailed"),[l]),oe=u.useCallback(async(s,a="regenerate")=>{y(s),k(t,s,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),X(s);try{const b=await J.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"run"},{name:"child_session_id",value:s},{name:"reset_to_last_user",value:a==="error_retry"?"false":"true"}]});if(!b.success)throw new Error(b.result||"Failed to run sub-agent");k(t,s,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),await A(s,{mode:"replace"}),await T()}catch(b){H(s),k(t,s,{status:"error",error:le(b),lastEventAt:new Date().toISOString()})}finally{y(b=>b===s?null:b)}},[A,t,T,X,H,le,k]),ie=u.useCallback(async s=>{const a=typeof window<"u"?window.prompt.bind(window):null;if(!a)return;const b=a("Send a follow-up message to this sub-agent:","Continue from where you left off.");if(b===null)return;const i=b.trim();if(!i){k(t,s,{status:"error",error:"Follow-up message cannot be empty.",lastEventAt:new Date().toISOString()});return}x(s),k(t,s,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),w(s);try{const d=await J.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"send_message"},{name:"child_session_id",value:s},{name:"message",value:i},{name:"auto_run",value:"true"}]});if(!d.success)throw new Error(d.result||"Follow-up failed");let E="running";try{const M=JSON.parse(d.result);M.status==="message_delivered_live"?(E="running",o.success(l("chat.subAgents.steeredLive"))):M.status==="message_queued"?(E="pending",o.info(l("chat.subAgents.queuedNextTurn"))):M.status==="pending"&&(E="pending")}catch{E="running"}k(t,s,{status:E,error:void 0,lastEventAt:new Date().toISOString()}),await T()}catch(d){H(s),k(t,s,{status:"error",error:d instanceof Error&&d.message.trim()?d.message:l("chat.subAgents.continueChildFailed"),lastEventAt:new Date().toISOString()})}finally{x(d=>d===s?null:d)}},[t,T,w,H,k,l,o]),ae=u.useCallback(async s=>{v(s);try{const a=await J.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"delete"},{name:"child_session_id",value:s}]});if(!a.success)throw new Error(a.result||"Failed to delete sub-agent");C(t,s),await T()}finally{v(a=>a===s?null:a)}},[C,t,T]),_e=u.useCallback(s=>{Ge(s),A(s)},[A]),Ie=u.useCallback(s=>{ie(s)},[ie]),$e=u.useCallback((s,a)=>{oe(s,a)},[oe]),He=u.useCallback((s,a)=>{a?z(s):N(s)},[N,z]),Me=u.useCallback(s=>{ae(s)},[ae]);if($.length===0)return null;const ue=r.jsxs(W,{strong:!0,children:[l("chat.subAgents.title")," ",r.jsx(W,{type:"secondary",children:G.length>0?l("chat.subAgents.headerCount",{active:G.length,total:$.length}):`(${$.length})`})]}),ce=r.jsx(_,{type:"text",size:"small",icon:c?r.jsx(ye,{}):r.jsx(be,{}),onClick:Re,"data-testid":"sub-agents-toggle",style:e?{paddingInline:4}:void 0,children:l(c?"chat.subAgents.expand":"chat.subAgents.collapse")}),K=(s,a)=>r.jsx(at,{parentSessionId:t,item:s,index:a,compact:e,isRetrying:p===s.childSessionId,isContinuing:S===s.childSessionId,isDeleting:f===s.childSessionId,subagentProfilesById:ke,onOpenChild:_e,onContinueChild:Ie,onRetryChild:$e,onTogglePin:He,onDeleteChild:Me},s.childSessionId),de=F.length<=ct,ge=c?r.jsx(W,{type:"secondary","data-testid":"sub-agents-collapsed-hint",children:l("chat.subAgents.hiddenHint",{count:$.length})}):r.jsxs(I,{vertical:!0,gap:e?n.marginXS:n.marginSM,"data-testid":"sub-agents-list",style:{width:"100%",minWidth:0,maxHeight:`${dt}px`,overflowY:"auto",overflowX:"hidden",paddingRight:e?0:n.paddingXS},children:[U.length>0?r.jsxs(r.Fragment,{children:[r.jsx(W,{type:"secondary","data-testid":"sub-agents-resident-label",style:{fontSize:12,opacity:.75},children:l("chat.subAgents.residentGroup",{count:U.length})}),U.map((s,a)=>K(s,a))]}):null,G.length>0?G.map((s,a)=>K(s,a)):U.length===0&&F.length>0&&!de?r.jsx(W,{type:"secondary","data-testid":"sub-agents-no-active",children:l("chat.subAgents.noActive")}):null,F.length>0?de?F.map((s,a)=>K(s,a)):r.jsxs(r.Fragment,{children:[r.jsx(_,{type:"text",size:"small","data-testid":"sub-agents-completed-toggle",icon:m?r.jsx(be,{}):r.jsx(ye,{}),onClick:()=>h(s=>!s),style:{alignSelf:"flex-start",paddingInline:4,color:n.colorTextSecondary},children:l("chat.subAgents.completedGroup",{count:F.length})}),m?F.map((s,a)=>K(s,a)):null]}):null]}),he=!c&&$.length>1?r.jsx(mt,{items:$}):null;return e?r.jsxs("section",{"data-testid":"sub-agents-panel",style:{width:"100%",minWidth:0,marginBottom:n.marginXS,overflow:"hidden"},children:[r.jsxs(I,{align:"center",justify:"space-between",gap:n.marginXS,style:{padding:`${n.paddingXXS??2}px 0 ${n.paddingXS}px`,borderBottom:`1px solid ${n.colorBorderSecondary}`},children:[r.jsx("div",{style:{flex:1,minWidth:0},children:ue}),r.jsx("div",{style:{flex:"0 0 auto"},children:ce})]}),r.jsxs("div",{style:{padding:`${n.paddingXS}px 0 0`},children:[ge,he]})]}):r.jsxs(Ve,{size:"small",className:"lotus-settings-card",style:{marginBottom:n.marginMD},"data-testid":"sub-agents-panel",title:ue,extra:ce,children:[ge,he]})},mt=({items:t})=>{const{token:e}=Ee(),{t:l}=Y(),n=t.reduce((c,g)=>{const p=q(g.status);return p==="completed"?c.completed++:p==="running"?c.running++:p==="error"||p==="failed"?c.error++:p==="cancelled"?c.cancelled++:c.pending++,c},{completed:0,running:0,error:0,pending:0,cancelled:0}),o=[];return n.completed>0&&o.push(l("chat.subAgents.summaryCompleted",{count:n.completed})),n.running>0&&o.push(l("chat.subAgents.summaryRunning",{count:n.running})),n.pending>0&&o.push(l("chat.subAgents.summaryPending",{count:n.pending})),n.cancelled>0&&o.push(`${n.cancelled} ${l("chat.subAgents.statusCancelled")}`),n.error>0&&o.push(l("chat.subAgents.summaryFailed",{count:n.error})),o.length===0?null:r.jsx(Q,{block:!0,items:o,style:{marginTop:e.marginXS}})};export{vt as SubAgentsPanel};
|