@bigduu/lotus 2026.5.29 → 2026.5.30
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-D3csea82.js +245 -0
- package/dist/assets/{FeatureGuide-BEvoRR9h.js → FeatureGuide-WswLwoHO.js} +1 -1
- package/dist/assets/{MetricsService-C3SA5O-z.js → MetricsService-dBlApAzA.js} +1 -1
- package/dist/assets/{SubAgentsPanel-DankG8co.js → SubAgentsPanel-1J9eU6HS.js} +1 -1
- package/dist/assets/{architectureDiagram-3BPJPVTR-BxRN2904.js → architectureDiagram-3BPJPVTR-BckxpZW_.js} +1 -1
- package/dist/assets/{blockDiagram-GPEHLZMM-BUdOFKXS.js → blockDiagram-GPEHLZMM-BfXz5GZp.js} +1 -1
- package/dist/assets/{c4Diagram-AAUBKEIU-R7VM_jb2.js → c4Diagram-AAUBKEIU-Cd72GXZG.js} +1 -1
- package/dist/assets/{chunk-2J33WTMH-C1T3QgQd.js → chunk-2J33WTMH-U_PdFANU.js} +1 -1
- package/dist/assets/{chunk-4BX2VUAB-25Fo2TVO.js → chunk-4BX2VUAB-O_jazZ2T.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-BGyfC2jK.js → chunk-55IACEB6-5UylDpQB.js} +1 -1
- package/dist/assets/{chunk-727SXJPM-RKlR8ckj.js → chunk-727SXJPM-DH2cqvYy.js} +1 -1
- package/dist/assets/{chunk-AQP2D5EJ-C55Msx4c.js → chunk-AQP2D5EJ-CT7Gc5S2.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-h0twIch2.js → chunk-FMBD7UC4-nXSVcWgU.js} +1 -1
- package/dist/assets/{chunk-ND2GUHAM-DyslQZ1W.js → chunk-ND2GUHAM-zl6hPuET.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-Dqthq7BH.js → chunk-QZHKN3VN-GNJt4FcN.js} +1 -1
- package/dist/assets/classDiagram-4FO5ZUOK-qkEIsjts.js +1 -0
- package/dist/assets/classDiagram-v2-Q7XG4LA2-qkEIsjts.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-CkpcGEHo.js → cose-bilkent-S5V4N54A-Kyzm36fn.js} +1 -1
- package/dist/assets/{dagre-BM42HDAG-C3J21rxW.js → dagre-BM42HDAG-D49oMA8k.js} +1 -1
- package/dist/assets/{diagram-2AECGRRQ-C61YsAB8.js → diagram-2AECGRRQ-DmFsRfUD.js} +1 -1
- package/dist/assets/{diagram-5GNKFQAL-Caw10HFd.js → diagram-5GNKFQAL-uQtS07Me.js} +1 -1
- package/dist/assets/{diagram-KO2AKTUF-CYt9RoUh.js → diagram-KO2AKTUF-D1nppaIm.js} +1 -1
- package/dist/assets/{diagram-LMA3HP47-B5C2a2_L.js → diagram-LMA3HP47-zqAs84Ke.js} +1 -1
- package/dist/assets/{diagram-OG6HWLK6-fEaxrU7x.js → diagram-OG6HWLK6-DhwNMDsy.js} +1 -1
- package/dist/assets/{en-US-DCV88PnO.js → en-US-Bn6iZkOI.js} +1 -1
- package/dist/assets/{erDiagram-TEJ5UH35-GSKZF-im.js → erDiagram-TEJ5UH35-BrlM5CSe.js} +1 -1
- package/dist/assets/{flowDiagram-I6XJVG4X-DuSuzMpf.js → flowDiagram-I6XJVG4X-DW8rny64.js} +1 -1
- package/dist/assets/{ganttDiagram-6RSMTGT7-Cu_jEY-M.js → ganttDiagram-6RSMTGT7-DAw-BWSY.js} +1 -1
- package/dist/assets/{gitGraphDiagram-PVQCEYII-zECKggi3.js → gitGraphDiagram-PVQCEYII-BPa5-uQf.js} +1 -1
- package/dist/assets/{index-Czl6lcNT.js → index-79boilyG.js} +1 -1
- package/dist/assets/{index-DMAgXK8O.js → index-BClD_Kuo.js} +1 -1
- package/dist/assets/{index-BZvX5d4s.js → index-BIexw-RU.js} +1 -1
- package/dist/assets/{index-4NqkovnM.js → index-Bt1I6ZoX.js} +1 -1
- package/dist/assets/{index-BfAjm2cg.js → index-CW352hcn.js} +1 -1
- package/dist/assets/{index-Cej2Q9Bg.js → index-CZufMAVA.js} +1 -1
- package/dist/assets/{index-BdFrXiGe.js → index-CoGZNEv_.js} +1 -1
- package/dist/assets/{index-hdos2Xoy.js → index-CpKeyar-.js} +1 -1
- package/dist/assets/{index-CJdw34gN.js → index-CzInZqzj.js} +1 -1
- package/dist/assets/index-D-NMfOT0.js +1 -0
- package/dist/assets/{index-6wyG_o5U.js → index-EX0mHOrI.js} +1 -1
- package/dist/assets/{index-CQnpSDCR.js → index-mh3nNjD-.js} +3 -3
- package/dist/assets/{index-CrnJlXzG.js → index-nKvapWnz.js} +1 -1
- package/dist/assets/{index.es-DXC3ul5Q.js → index.es-BmYnl4eQ.js} +1 -1
- package/dist/assets/{infoDiagram-5YYISTIA-ajMB2Qxa.js → infoDiagram-5YYISTIA-9ipMATHw.js} +1 -1
- package/dist/assets/{ishikawaDiagram-YF4QCWOH-DQEp0c9W.js → ishikawaDiagram-YF4QCWOH-CMyDqtla.js} +1 -1
- package/dist/assets/{journeyDiagram-JHISSGLW-D7FItFb_.js → journeyDiagram-JHISSGLW-BZYnoh6-.js} +1 -1
- package/dist/assets/{kanban-definition-UN3LZRKU-CgKt-G01.js → kanban-definition-UN3LZRKU-Cys7RooC.js} +1 -1
- package/dist/assets/{main-DfVgHWQe.js → main-CgrLoRFE.js} +3 -3
- package/dist/assets/{mindmap-definition-RKZ34NQL-CuKXTTe2.js → mindmap-definition-RKZ34NQL-D5UNfPbo.js} +1 -1
- package/dist/assets/{pieDiagram-4H26LBE5-JkCQLkjB.js → pieDiagram-4H26LBE5-Q8TIweQd.js} +1 -1
- package/dist/assets/{quadrantDiagram-W4KKPZXB-C3dmbPVz.js → quadrantDiagram-W4KKPZXB-CN2vkAO6.js} +1 -1
- package/dist/assets/{requirementDiagram-4Y6WPE33-t3HhKU2z.js → requirementDiagram-4Y6WPE33-BZPimYSg.js} +1 -1
- package/dist/assets/{sankeyDiagram-5OEKKPKP-D8h7Gi4_.js → sankeyDiagram-5OEKKPKP-CbLGNQHF.js} +1 -1
- package/dist/assets/{sequenceDiagram-3UESZ5HK-BYJgkHcz.js → sequenceDiagram-3UESZ5HK-D1yJhogs.js} +1 -1
- package/dist/assets/{stateDiagram-AJRCARHV-CSKaC8Rl.js → stateDiagram-AJRCARHV-B4B9uE8t.js} +1 -1
- package/dist/assets/stateDiagram-v2-BHNVJYJU-CoHveFyA.js +1 -0
- package/dist/assets/{timeline-definition-PNZ67QCA-DLdfICX3.js → timeline-definition-PNZ67QCA-fj8baLbI.js} +1 -1
- package/dist/assets/{vendor-antd-rbjGKamc.js → vendor-antd-CKNrd1kL.js} +84 -84
- package/dist/assets/{vendor-charts-DtVw-oR1.js → vendor-charts-CYC-iQBh.js} +1 -1
- package/dist/assets/{vendor-markdown-D6K7N9C9.js → vendor-markdown-DrYaLZhb.js} +1 -1
- package/dist/assets/{vendor-mermaid-B4BbwE4a.js → vendor-mermaid-D1_CPXHE.js} +4 -4
- package/dist/assets/{vendor-pdf-iqXtbvvh.js → vendor-pdf-DHC4XUDH.js} +4 -4
- package/dist/assets/{vennDiagram-CIIHVFJN-I4nowEuq.js → vennDiagram-CIIHVFJN-BqxKpPQ5.js} +1 -1
- package/dist/assets/{wardley-L42UT6IY-CvpejOzB.js → wardley-L42UT6IY-DzDVarUL.js} +1 -1
- package/dist/assets/{wardleyDiagram-YWT4CUSO-Bp8K5VuA.js → wardleyDiagram-YWT4CUSO-BdaarJgD.js} +1 -1
- package/dist/assets/{xychartDiagram-2RQKCTM6-BXOi8G-8.js → xychartDiagram-2RQKCTM6-D0BGJUS2.js} +1 -1
- package/dist/assets/{zh-CN-CXhj-AJU.js → zh-CN-Cw8YiQz9.js} +1 -1
- package/dist/index.html +4 -4
- package/package.json +1 -1
- package/dist/assets/App-CSoVc5kq.js +0 -245
- package/dist/assets/classDiagram-4FO5ZUOK-CnyHN3Oj.js +0 -1
- package/dist/assets/classDiagram-v2-Q7XG4LA2-CnyHN3Oj.js +0 -1
- package/dist/assets/index-BC8EjiMM.js +0 -1
- package/dist/assets/stateDiagram-v2-BHNVJYJU-BbOS1eq2.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as p}from"./vendor-markdown-
|
|
1
|
+
import{j as p}from"./vendor-markdown-DrYaLZhb.js";import{u as m,a as i}from"./vendor-i18n-Dm-c3D_C.js";import{i as u,m as b}from"./onboardingStorage-BVcEpmTy.js";import{T as g}from"./vendor-antd-CKNrd1kL.js";const f=["new-session","task-templates","model-picker","sidebar","open-settings"],T=()=>{const o={};for(const e of f)o[e]=document.querySelector(`[data-tour-id="${e}"]`);return o},x=({disabled:o=!1})=>{const{t:e}=m(),[s,n]=i.useState(!1),[t,r]=i.useState(null);i.useEffect(()=>{if(o||u())return;const l=setTimeout(()=>{const c=T();r(c),n(!0)},800);return()=>clearTimeout(l)},[o]);const a=i.useMemo(()=>[{title:e("onboarding.welcome.title"),description:e("onboarding.welcome.description"),target:null},{title:e("onboarding.newSession.title"),description:e("onboarding.newSession.description"),target:(t==null?void 0:t["new-session"])??void 0},{title:e("onboarding.taskTemplates.title"),description:e("onboarding.taskTemplates.description"),target:(t==null?void 0:t["task-templates"])??void 0},{title:e("onboarding.modelPicker.title"),description:e("onboarding.modelPicker.description"),target:(t==null?void 0:t["model-picker"])??void 0},{title:e("onboarding.sidebar.title"),description:e("onboarding.sidebar.description"),target:(t==null?void 0:t.sidebar)??void 0},{title:e("onboarding.settings.title"),description:e("onboarding.settings.description"),target:(t==null?void 0:t["open-settings"])??void 0}],[e,t]),d=()=>{b(),n(!1)};return p.jsx(g,{open:s,onClose:d,steps:a})};export{x as FeatureGuide};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as n}from"./App-
|
|
1
|
+
import{a as n}from"./App-D3csea82.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 +1 @@
|
|
|
1
|
-
var be=Object.defineProperty;var Ce=(t,e,r)=>e in t?be(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var oe=(t,e,r)=>Ce(t,typeof e!="symbol"?e+"":e,r);import{j as o}from"./vendor-markdown-D6K7N9C9.js";import{a as u,u as Y}from"./vendor-i18n-Dm-c3D_C.js";import{w as I,B as ie,D as we,F as xe,G as Ae,H as Te,J as ve,K as Ee,I as U,u as x,L as Pe,o as Re}from"./App-CSoVc5kq.js";import{o as K,F as H,l as ue,N as $,au as ke,t as de,x as je,af as _e,G as Ie}from"./vendor-antd-rbjGKamc.js";import"./vendor-mermaid-B4BbwE4a.js";import"./main-DfVgHWQe.js";const j=class j{static getInstance(){return j.instance||(j.instance=new j),j.instance}parseUserCommand(e){I("[ToolService]",`[ToolService] parseUserCommand: Parsing content: "${e}"`);const r=e.trim();if(!r.startsWith("/"))return I("[ToolService]",'[ToolService] parseUserCommand: Content does not start with "/", not a tool command.'),null;const s=r.indexOf(" ");let i,c;if(s===-1?(i=r.substring(1),c=""):(i=r.substring(1,s),c=r.substring(s+1).trim()),i){const h={tool_name:i,user_description:c};return I("[ToolService]","[ToolService] parseUserCommand: Successfully parsed command:",h),h}return I("[ToolService]","[ToolService] parseUserCommand: Failed to parse tool name from content."),null}parseAIResponseToToolCall(e){return this.parseUserCommand(e)}async executeTool(e){I("[ToolService]","[ToolService] executeTool: Attempting to execute tool via HTTP with request:",e);try{const r=await ie.post("tools/execute",e),s=JSON.parse(r.result);return I("[ToolService]","[ToolService] executeTool: Parsed structured result:",s),s}catch(r){throw console.error("[ToolService] executeTool: HTTP tool execution failed:",r),r instanceof we?new Error(`Workflow execution failed: ${r.message}`):r}}};oe(j,"instance");let N=j;const L=new N;class $e{async listProfiles(){return ie.get("subagent_profiles")}}const He=new $e,Oe=[];function Fe(t={}){const{enabled:e=!0,refreshKey:r}=t,[s,i]=u.useState(null),[c,h]=u.useState(!1),[S,k]=u.useState(null),w=u.useCallback(async()=>{h(!0);try{const y=await He.listProfiles();i(y),k(null)}catch(y){k(y instanceof Error?y:new Error(String(y)))}finally{h(!1)}},[]);u.useEffect(()=>{e&&w()},[e,w,r]);const E=u.useMemo(()=>{const y=new Map;if(s!=null&&s.profiles)for(const A of s.profiles)y.set(A.id,A);return y},[s]);return{profiles:(s==null?void 0:s.profiles)??Oe,fallbackId:(s==null?void 0:s.fallback_id)??null,loading:c,error:S,refresh:w,byId:E}}const Me=(t,e)=>{const r=xe(t,e);return Ae({key:r,atomFamily:Te,store:ve,emptyState:Ee})},De=(t,e)=>t.outputPreview||e||"",ae=(t,e,r)=>{var w,E,y,A,p;const s=t==null?void 0:t.trim();if(!s)return null;const i=e.get(s),c=((w=i==null?void 0:i.display_name)==null?void 0:w.trim())||s,h=(y=(E=i==null?void 0:i.ui)==null?void 0:E.icon)==null?void 0:y.trim(),S=((p=(A=i==null?void 0:i.ui)==null?void 0:A.color)==null?void 0:p.trim())||void 0;return(r==null?void 0:r.compact)??!1?o.jsx("span",{"data-testid":`sub-agent-role-tag-${s}`,style:{color:S||"inherit",lineHeight:"inherit",whiteSpace:"nowrap"},children:h?`${h} ${c}`:c}):o.jsx(K,{color:S,style:{marginInlineEnd:0,flex:"0 0 auto"},"data-testid":`sub-agent-role-tag-${s}`,children:h?`${h} ${c}`:c})},{Text:B}=ue,{useToken:Be}=de,Xe=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"},Le=u.memo(({parentSessionId:t,item:e,index:r,compact:s,isRetrying:i,isContinuing:c,isDeleting:h,subagentProfilesById:S,onOpenChild:k,onContinueChild:w,onRetryChild:E,onTogglePin:y,onDeleteChild:A})=>{const{token:p}=Be(),{t:g}=Y(),P=Me(t,e.childSessionId),O=De(P,e.outputPreview),F=s?{marginInlineEnd:0,flex:"0 0 auto",fontSize:10,lineHeight:"16px",paddingInline:6}:{marginInlineEnd:0,flex:"0 0 auto"},T=s?{paddingInline:0,height:22}:void 0,b=Xe(e.status),_=b==="running",C=i||c||h,M=m=>m==="running"?g("chat.subAgents.statusRunning"):m==="completed"?g("chat.subAgents.statusCompleted"):m==="pending"?g("chat.subAgents.statusPending"):m==="cancelled"?g("chat.subAgents.statusCancelled"):m==="error"||m==="failed"?g("chat.subAgents.statusFailed"):m,X=m=>m==="running"?p.colorPrimary:m==="completed"?p.colorSuccess:m==="error"||m==="failed"?p.colorError:m==="cancelled"?p.colorWarning:p.colorTextSecondary;return o.jsxs(H,{vertical:!0,gap:s?6:p.marginSM,className:s?void 0:"lotus-settings-list-item",style:{width:"100%",minWidth:0,padding:s?"6px 0":p.paddingSM,borderRadius:s?0:p.borderRadiusSM,borderTop:s&&r>0?`1px solid ${p.colorBorderSecondary}`:void 0,background:s?"transparent":void 0},children:[o.jsxs(H,{vertical:!0,style:{width:"100%",minWidth:0},children:[o.jsxs(H,{align:"center",gap:p.marginXS,wrap:!0,style:{width:"100%",minWidth:0},children:[o.jsx(B,{strong:!0,ellipsis:!0,style:{minWidth:0,flex:"1 1 180px",fontSize:s?13:void 0},children:e.title||g("chat.subAgents.fallbackTitle")}),s?o.jsx(U,{nowrap:!0,items:[o.jsx("span",{style:{color:X(b)},children:M(b)}),e.pinned?g("chat.subAgents.pinned"):null,ae(e.subagentType,S,{compact:!0})]}):o.jsxs(o.Fragment,{children:[o.jsx(K,{color:b==="running"?"processing":b==="completed"?"success":b==="error"||b==="failed"?"error":b==="cancelled"?"warning":"default",style:F,children:M(b)}),e.pinned?o.jsx(K,{color:"warning",style:F,children:g("chat.subAgents.pinned")}):null,ae(e.subagentType,S)]})]}),s?o.jsx(U,{block:!0,items:[e.childSessionId.slice(0,8),e.updatedAt,e.lastHeartbeatAt?`${g("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:null,typeof e.roundCount=="number"?`${g("chat.subAgents.round")} ${e.roundCount+1}`:null]}):o.jsxs(B,{type:"secondary",style:{display:"block",minWidth:0,fontSize:12,marginTop:2},children:[e.childSessionId.slice(0,8),e.updatedAt?` • ${e.updatedAt}`:"",e.lastHeartbeatAt?` • ${g("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:"",typeof e.roundCount=="number"?` • ${g("chat.subAgents.round")} ${e.roundCount+1}`:""]}),O?o.jsx(B,{type:"secondary",style:{display:"block",minWidth:0,marginTop:s?4:p.marginXS,fontSize:s?11:13,lineHeight:s?1.35:void 0},ellipsis:!0,children:O}):null,e.error?o.jsx(B,{type:"danger",style:{display:"block",minWidth:0,marginTop:s?4:p.marginXS,fontSize:s?11:void 0,lineHeight:s?1.35:void 0},children:e.error}):null]}),o.jsxs(H,{gap:s?4:8,wrap:!0,style:{width:"100%",minWidth:0,paddingTop:s?2:0},children:[o.jsx($,{size:"small",type:s?"text":"default",style:T,disabled:C,onClick:()=>k(e.childSessionId),children:g("chat.subAgents.open")}),o.jsx($,{size:"small",type:s?"text":"default",style:T,loading:c,disabled:h||i||_,"data-testid":`sub-agent-continue-${e.childSessionId}`,onClick:()=>w(e.childSessionId),children:g("chat.subAgents.continue")}),o.jsx(ke,{trigger:["click"],menu:{items:[{key:"regenerate",label:g("chat.actions.regenerate")},{key:"error_retry",label:g("chat.actions.retryFailed")}],onClick:({key:m})=>{E(e.childSessionId,m)}},disabled:h||_||c,children:o.jsx($,{size:"small",type:s?"text":"default",style:T,loading:i,disabled:h||_||c,"data-testid":`sub-agent-retry-${e.childSessionId}`,children:g("chat.subAgents.retry")})}),typeof e.pinned=="boolean"?o.jsx($,{size:"small",type:s?"text":"default",style:T,disabled:C,onClick:()=>y(e.childSessionId,e.pinned),children:e.pinned?g("chat.actions.unpin"):g("chat.actions.pin")}):null,o.jsx($,{danger:!0,type:s?"text":"default",style:T,size:"small",loading:h,disabled:i,"data-testid":`sub-agent-delete-${e.childSessionId}`,onClick:()=>A(e.childSessionId),children:g("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}=ue,{useToken:ce}=de,We="chat-session-sub-agents-collapsed:",ze=3,Ue=600,G=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"},Ke=(t,e)=>{if(e&&e.trim())return e;if(t.isRunning)return"running";if(t.lastRunStatus&&t.lastRunStatus.trim())return t.lastRunStatus;const r=t.messageCount??0;return r>2?"completed":(r>0,"pending")},ge=t=>`${We}${t}`,z=t=>{if(typeof window>"u")return!1;try{const e=window.localStorage.getItem(ge(t));return e==="1"?!0:e==="0"?!1:null}catch{return null}},Ne=(t,e)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(ge(t),e?"1":"0")}catch{}},le=(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.isRunning===e.isRunning&&t.messageCount===e.messageCount&&t.lastRunStatus===e.lastRunStatus&&t.lastRunError===e.lastRunError&&t.subagentType===e.subagentType&&t.roundCount===e.roundCount,tt=({parentSessionId:t,compact:e=!1})=>{const{t:r}=Y(),{token:s}=ce(),[i,c]=u.useState(()=>z(t)??!1),[h,S]=u.useState(null),[k,w]=u.useState(null),[E,y]=u.useState(null),A=x(n=>Pe(t)(n)),p=x(n=>n.chats),g=x(n=>n.loadChatHistory),P=x(n=>n.refreshChats),O=x(n=>n.markOptimisticStart),F=x(n=>n.markRetryStart),T=x(n=>n.markSettleTimeout),b=x(n=>n.pinSession),_=x(n=>n.unpinSession),C=x(n=>n.applyChildProgress),M=x(n=>n.clearChildProgress),{byId:X}=Fe(),m=u.useRef(new Map),q=u.useMemo(()=>Object.entries(A).map(([n,d])=>({childSessionId:n,...d})),[A]),J=u.useMemo(()=>p.filter(n=>n.kind==="child"&&n.parentSessionId===t).sort((n,d)=>{const f=Date.parse(n.updatedAt||"")||0;return(Date.parse(d.updatedAt||"")||0)-f}),[p,t]),R=u.useMemo(()=>{const n=new Map(q.map(l=>[l.childSessionId,l])),d=m.current,f=[];for(const l of J){const a=n.get(l.id),v={childSessionId:l.id,title:l.title||(a==null?void 0:a.title),status:G(Ke(l,a==null?void 0:a.status)),error:(a==null?void 0:a.error)||l.lastRunError,lastHeartbeatAt:a==null?void 0:a.lastHeartbeatAt,lastEventAt:a==null?void 0:a.lastEventAt,outputPreview:a==null?void 0:a.outputPreview,roundCount:a==null?void 0:a.roundCount,pinned:l.pinned,updatedAt:l.updatedAt,isRunning:l.isRunning,messageCount:l.messageCount,lastRunStatus:l.lastRunStatus,lastRunError:l.lastRunError,subagentType:l.subagentType??null},D=d.get(l.id);f.push(D&&le(D,v)?D:v),n.delete(l.id)}for(const l of n.values()){const a={childSessionId:l.childSessionId,title:l.title,status:G(l.status),error:l.error,lastHeartbeatAt:l.lastHeartbeatAt,lastEventAt:l.lastEventAt,outputPreview:l.outputPreview,roundCount:l.roundCount},v=d.get(l.childSessionId);f.push(v&&le(v,a)?v:a)}return m.current=new Map(f.map(l=>[l.childSessionId,l])),f},[J,q]);u.useEffect(()=>{c(z(t)??!1)},[t]),u.useEffect(()=>{z(t)===null&&c(R.length>ze)},[t,R.length]);const he=u.useCallback(()=>{c(n=>{const d=!n;return Ne(t,d),d})},[t]),V=u.useCallback(n=>n instanceof Error&&n.message.trim()?n.message:r("chat.subAgents.runChildFailed"),[r]),Q=u.useCallback(async(n,d="regenerate")=>{S(n),C(t,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),F(n);try{const f=await L.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"run"},{name:"child_session_id",value:n},{name:"reset_to_last_user",value:d==="error_retry"?"false":"true"}]});if(!f.success)throw new Error(f.result||"Failed to run sub-agent");C(t,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),await g(n,{mode:"replace"}),await P()}catch(f){T(n),C(t,n,{status:"error",error:V(f),lastEventAt:new Date().toISOString()})}finally{S(f=>f===n?null:f)}},[g,t,P,F,T,V,C]),Z=u.useCallback(async n=>{const d=typeof window<"u"?window.prompt.bind(window):null;if(!d)return;const f=d("Send a follow-up message to this sub-agent:","Continue from where you left off.");if(f===null)return;const l=f.trim();if(!l){C(t,n,{status:"error",error:"Follow-up message cannot be empty.",lastEventAt:new Date().toISOString()});return}w(n),C(t,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),O(n);try{const a=await L.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"send_message"},{name:"child_session_id",value:n},{name:"message",value:l},{name:"auto_run",value:"true"}]});if(!a.success)throw new Error(a.result||"Follow-up failed");let v="running";try{JSON.parse(a.result).status==="pending"&&(v="pending")}catch{v="running"}C(t,n,{status:v,error:void 0,lastEventAt:new Date().toISOString()}),await P()}catch(a){T(n),C(t,n,{status:"error",error:a instanceof Error&&a.message.trim()?a.message:r("chat.subAgents.continueChildFailed"),lastEventAt:new Date().toISOString()})}finally{w(a=>a===n?null:a)}},[t,P,O,T,C,r]),ee=u.useCallback(async n=>{y(n);try{const d=await L.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"delete"},{name:"child_session_id",value:n}]});if(!d.success)throw new Error(d.result||"Failed to delete sub-agent");M(t,n),await P()}finally{y(d=>d===n?null:d)}},[M,t,P]),pe=u.useCallback(n=>{Re(n),g(n)},[g]),me=u.useCallback(n=>{Z(n)},[Z]),fe=u.useCallback((n,d)=>{Q(n,d)},[Q]),ye=u.useCallback((n,d)=>{d?_(n):b(n)},[b,_]),Se=u.useCallback(n=>{ee(n)},[ee]);if(R.length===0)return null;const te=o.jsxs(W,{strong:!0,children:[r("chat.subAgents.title")," ",o.jsxs(W,{type:"secondary",children:["(",R.length,")"]})]}),ne=o.jsx($,{type:"text",size:"small",icon:i?o.jsx(je,{}):o.jsx(_e,{}),onClick:he,"data-testid":"sub-agents-toggle",style:e?{paddingInline:4}:void 0,children:r(i?"chat.subAgents.expand":"chat.subAgents.collapse")}),se=i?o.jsx(W,{type:"secondary","data-testid":"sub-agents-collapsed-hint",children:r("chat.subAgents.hiddenHint",{count:R.length})}):o.jsx(H,{vertical:!0,gap:e?s.marginXS:s.marginSM,"data-testid":"sub-agents-list",style:{width:"100%",minWidth:0,maxHeight:`${Ue}px`,overflowY:"auto",overflowX:"hidden",paddingRight:e?0:s.paddingXS},children:R.map((n,d)=>o.jsx(Le,{parentSessionId:t,item:n,index:d,compact:e,isRetrying:h===n.childSessionId,isContinuing:k===n.childSessionId,isDeleting:E===n.childSessionId,subagentProfilesById:X,onOpenChild:pe,onContinueChild:me,onRetryChild:fe,onTogglePin:ye,onDeleteChild:Se},n.childSessionId))}),re=!i&&R.length>1?o.jsx(Ge,{items:R}):null;return e?o.jsxs("section",{"data-testid":"sub-agents-panel",style:{width:"100%",minWidth:0,marginBottom:s.marginXS,overflow:"hidden"},children:[o.jsxs(H,{align:"center",justify:"space-between",gap:s.marginXS,style:{padding:`${s.paddingXXS??2}px 0 ${s.paddingXS}px`,borderBottom:`1px solid ${s.colorBorderSecondary}`},children:[o.jsx("div",{style:{flex:1,minWidth:0},children:te}),o.jsx("div",{style:{flex:"0 0 auto"},children:ne})]}),o.jsxs("div",{style:{padding:`${s.paddingXS}px 0 0`},children:[se,re]})]}):o.jsxs(Ie,{size:"small",className:"lotus-settings-card",style:{marginBottom:s.marginMD},"data-testid":"sub-agents-panel",title:te,extra:ne,children:[se,re]})},Ge=({items:t})=>{const{token:e}=ce(),{t:r}=Y(),s=t.reduce((c,h)=>{const S=G(h.status);return S==="completed"?c.completed++:S==="running"?c.running++:S==="error"||S==="failed"?c.error++:c.pending++,c},{completed:0,running:0,error:0,pending:0}),i=[];return s.completed>0&&i.push(r("chat.subAgents.summaryCompleted",{count:s.completed})),s.running>0&&i.push(r("chat.subAgents.summaryRunning",{count:s.running})),s.pending>0&&i.push(r("chat.subAgents.summaryPending",{count:s.pending})),s.error>0&&i.push(r("chat.subAgents.summaryFailed",{count:s.error})),i.length===0?null:o.jsx(U,{block:!0,items:i,style:{marginTop:e.marginXS}})};export{tt as SubAgentsPanel};
|
|
1
|
+
var be=Object.defineProperty;var Ce=(t,e,r)=>e in t?be(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var oe=(t,e,r)=>Ce(t,typeof e!="symbol"?e+"":e,r);import{j as o}from"./vendor-markdown-DrYaLZhb.js";import{a as u,u as Y}from"./vendor-i18n-Dm-c3D_C.js";import{w as I,B as ie,D as we,F as xe,G as Ae,H as Te,J as ve,K as Ee,I as U,u as x,L as Pe,o as Re}from"./App-D3csea82.js";import{o as K,F as H,l as ue,N as $,av as ke,t as de,x as je,af as _e,G as Ie}from"./vendor-antd-CKNrd1kL.js";import"./vendor-mermaid-D1_CPXHE.js";import"./main-CgrLoRFE.js";const j=class j{static getInstance(){return j.instance||(j.instance=new j),j.instance}parseUserCommand(e){I("[ToolService]",`[ToolService] parseUserCommand: Parsing content: "${e}"`);const r=e.trim();if(!r.startsWith("/"))return I("[ToolService]",'[ToolService] parseUserCommand: Content does not start with "/", not a tool command.'),null;const s=r.indexOf(" ");let i,c;if(s===-1?(i=r.substring(1),c=""):(i=r.substring(1,s),c=r.substring(s+1).trim()),i){const h={tool_name:i,user_description:c};return I("[ToolService]","[ToolService] parseUserCommand: Successfully parsed command:",h),h}return I("[ToolService]","[ToolService] parseUserCommand: Failed to parse tool name from content."),null}parseAIResponseToToolCall(e){return this.parseUserCommand(e)}async executeTool(e){I("[ToolService]","[ToolService] executeTool: Attempting to execute tool via HTTP with request:",e);try{const r=await ie.post("tools/execute",e),s=JSON.parse(r.result);return I("[ToolService]","[ToolService] executeTool: Parsed structured result:",s),s}catch(r){throw console.error("[ToolService] executeTool: HTTP tool execution failed:",r),r instanceof we?new Error(`Workflow execution failed: ${r.message}`):r}}};oe(j,"instance");let N=j;const L=new N;class $e{async listProfiles(){return ie.get("subagent_profiles")}}const He=new $e,Oe=[];function Fe(t={}){const{enabled:e=!0,refreshKey:r}=t,[s,i]=u.useState(null),[c,h]=u.useState(!1),[S,k]=u.useState(null),w=u.useCallback(async()=>{h(!0);try{const y=await He.listProfiles();i(y),k(null)}catch(y){k(y instanceof Error?y:new Error(String(y)))}finally{h(!1)}},[]);u.useEffect(()=>{e&&w()},[e,w,r]);const E=u.useMemo(()=>{const y=new Map;if(s!=null&&s.profiles)for(const A of s.profiles)y.set(A.id,A);return y},[s]);return{profiles:(s==null?void 0:s.profiles)??Oe,fallbackId:(s==null?void 0:s.fallback_id)??null,loading:c,error:S,refresh:w,byId:E}}const Me=(t,e)=>{const r=xe(t,e);return Ae({key:r,atomFamily:Te,store:ve,emptyState:Ee})},De=(t,e)=>t.outputPreview||e||"",ae=(t,e,r)=>{var w,E,y,A,p;const s=t==null?void 0:t.trim();if(!s)return null;const i=e.get(s),c=((w=i==null?void 0:i.display_name)==null?void 0:w.trim())||s,h=(y=(E=i==null?void 0:i.ui)==null?void 0:E.icon)==null?void 0:y.trim(),S=((p=(A=i==null?void 0:i.ui)==null?void 0:A.color)==null?void 0:p.trim())||void 0;return(r==null?void 0:r.compact)??!1?o.jsx("span",{"data-testid":`sub-agent-role-tag-${s}`,style:{color:S||"inherit",lineHeight:"inherit",whiteSpace:"nowrap"},children:h?`${h} ${c}`:c}):o.jsx(K,{color:S,style:{marginInlineEnd:0,flex:"0 0 auto"},"data-testid":`sub-agent-role-tag-${s}`,children:h?`${h} ${c}`:c})},{Text:B}=ue,{useToken:Be}=de,Xe=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"},Le=u.memo(({parentSessionId:t,item:e,index:r,compact:s,isRetrying:i,isContinuing:c,isDeleting:h,subagentProfilesById:S,onOpenChild:k,onContinueChild:w,onRetryChild:E,onTogglePin:y,onDeleteChild:A})=>{const{token:p}=Be(),{t:g}=Y(),P=Me(t,e.childSessionId),O=De(P,e.outputPreview),F=s?{marginInlineEnd:0,flex:"0 0 auto",fontSize:10,lineHeight:"16px",paddingInline:6}:{marginInlineEnd:0,flex:"0 0 auto"},T=s?{paddingInline:0,height:22}:void 0,b=Xe(e.status),_=b==="running",C=i||c||h,M=m=>m==="running"?g("chat.subAgents.statusRunning"):m==="completed"?g("chat.subAgents.statusCompleted"):m==="pending"?g("chat.subAgents.statusPending"):m==="cancelled"?g("chat.subAgents.statusCancelled"):m==="error"||m==="failed"?g("chat.subAgents.statusFailed"):m,X=m=>m==="running"?p.colorPrimary:m==="completed"?p.colorSuccess:m==="error"||m==="failed"?p.colorError:m==="cancelled"?p.colorWarning:p.colorTextSecondary;return o.jsxs(H,{vertical:!0,gap:s?6:p.marginSM,className:s?void 0:"lotus-settings-list-item",style:{width:"100%",minWidth:0,padding:s?"6px 0":p.paddingSM,borderRadius:s?0:p.borderRadiusSM,borderTop:s&&r>0?`1px solid ${p.colorBorderSecondary}`:void 0,background:s?"transparent":void 0},children:[o.jsxs(H,{vertical:!0,style:{width:"100%",minWidth:0},children:[o.jsxs(H,{align:"center",gap:p.marginXS,wrap:!0,style:{width:"100%",minWidth:0},children:[o.jsx(B,{strong:!0,ellipsis:!0,style:{minWidth:0,flex:"1 1 180px",fontSize:s?13:void 0},children:e.title||g("chat.subAgents.fallbackTitle")}),s?o.jsx(U,{nowrap:!0,items:[o.jsx("span",{style:{color:X(b)},children:M(b)}),e.pinned?g("chat.subAgents.pinned"):null,ae(e.subagentType,S,{compact:!0})]}):o.jsxs(o.Fragment,{children:[o.jsx(K,{color:b==="running"?"processing":b==="completed"?"success":b==="error"||b==="failed"?"error":b==="cancelled"?"warning":"default",style:F,children:M(b)}),e.pinned?o.jsx(K,{color:"warning",style:F,children:g("chat.subAgents.pinned")}):null,ae(e.subagentType,S)]})]}),s?o.jsx(U,{block:!0,items:[e.childSessionId.slice(0,8),e.updatedAt,e.lastHeartbeatAt?`${g("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:null,typeof e.roundCount=="number"?`${g("chat.subAgents.round")} ${e.roundCount+1}`:null]}):o.jsxs(B,{type:"secondary",style:{display:"block",minWidth:0,fontSize:12,marginTop:2},children:[e.childSessionId.slice(0,8),e.updatedAt?` • ${e.updatedAt}`:"",e.lastHeartbeatAt?` • ${g("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:"",typeof e.roundCount=="number"?` • ${g("chat.subAgents.round")} ${e.roundCount+1}`:""]}),O?o.jsx(B,{type:"secondary",style:{display:"block",minWidth:0,marginTop:s?4:p.marginXS,fontSize:s?11:13,lineHeight:s?1.35:void 0},ellipsis:!0,children:O}):null,e.error?o.jsx(B,{type:"danger",style:{display:"block",minWidth:0,marginTop:s?4:p.marginXS,fontSize:s?11:void 0,lineHeight:s?1.35:void 0},children:e.error}):null]}),o.jsxs(H,{gap:s?4:8,wrap:!0,style:{width:"100%",minWidth:0,paddingTop:s?2:0},children:[o.jsx($,{size:"small",type:s?"text":"default",style:T,disabled:C,onClick:()=>k(e.childSessionId),children:g("chat.subAgents.open")}),o.jsx($,{size:"small",type:s?"text":"default",style:T,loading:c,disabled:h||i||_,"data-testid":`sub-agent-continue-${e.childSessionId}`,onClick:()=>w(e.childSessionId),children:g("chat.subAgents.continue")}),o.jsx(ke,{trigger:["click"],menu:{items:[{key:"regenerate",label:g("chat.actions.regenerate")},{key:"error_retry",label:g("chat.actions.retryFailed")}],onClick:({key:m})=>{E(e.childSessionId,m)}},disabled:h||_||c,children:o.jsx($,{size:"small",type:s?"text":"default",style:T,loading:i,disabled:h||_||c,"data-testid":`sub-agent-retry-${e.childSessionId}`,children:g("chat.subAgents.retry")})}),typeof e.pinned=="boolean"?o.jsx($,{size:"small",type:s?"text":"default",style:T,disabled:C,onClick:()=>y(e.childSessionId,e.pinned),children:e.pinned?g("chat.actions.unpin"):g("chat.actions.pin")}):null,o.jsx($,{danger:!0,type:s?"text":"default",style:T,size:"small",loading:h,disabled:i,"data-testid":`sub-agent-delete-${e.childSessionId}`,onClick:()=>A(e.childSessionId),children:g("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}=ue,{useToken:ce}=de,We="chat-session-sub-agents-collapsed:",ze=3,Ue=600,G=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"},Ke=(t,e)=>{if(e&&e.trim())return e;if(t.isRunning)return"running";if(t.lastRunStatus&&t.lastRunStatus.trim())return t.lastRunStatus;const r=t.messageCount??0;return r>2?"completed":(r>0,"pending")},ge=t=>`${We}${t}`,z=t=>{if(typeof window>"u")return!1;try{const e=window.localStorage.getItem(ge(t));return e==="1"?!0:e==="0"?!1:null}catch{return null}},Ne=(t,e)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(ge(t),e?"1":"0")}catch{}},le=(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.isRunning===e.isRunning&&t.messageCount===e.messageCount&&t.lastRunStatus===e.lastRunStatus&&t.lastRunError===e.lastRunError&&t.subagentType===e.subagentType&&t.roundCount===e.roundCount,tt=({parentSessionId:t,compact:e=!1})=>{const{t:r}=Y(),{token:s}=ce(),[i,c]=u.useState(()=>z(t)??!1),[h,S]=u.useState(null),[k,w]=u.useState(null),[E,y]=u.useState(null),A=x(n=>Pe(t)(n)),p=x(n=>n.chats),g=x(n=>n.loadChatHistory),P=x(n=>n.refreshChats),O=x(n=>n.markOptimisticStart),F=x(n=>n.markRetryStart),T=x(n=>n.markSettleTimeout),b=x(n=>n.pinSession),_=x(n=>n.unpinSession),C=x(n=>n.applyChildProgress),M=x(n=>n.clearChildProgress),{byId:X}=Fe(),m=u.useRef(new Map),q=u.useMemo(()=>Object.entries(A).map(([n,d])=>({childSessionId:n,...d})),[A]),J=u.useMemo(()=>p.filter(n=>n.kind==="child"&&n.parentSessionId===t).sort((n,d)=>{const f=Date.parse(n.updatedAt||"")||0;return(Date.parse(d.updatedAt||"")||0)-f}),[p,t]),R=u.useMemo(()=>{const n=new Map(q.map(l=>[l.childSessionId,l])),d=m.current,f=[];for(const l of J){const a=n.get(l.id),v={childSessionId:l.id,title:l.title||(a==null?void 0:a.title),status:G(Ke(l,a==null?void 0:a.status)),error:(a==null?void 0:a.error)||l.lastRunError,lastHeartbeatAt:a==null?void 0:a.lastHeartbeatAt,lastEventAt:a==null?void 0:a.lastEventAt,outputPreview:a==null?void 0:a.outputPreview,roundCount:a==null?void 0:a.roundCount,pinned:l.pinned,updatedAt:l.updatedAt,isRunning:l.isRunning,messageCount:l.messageCount,lastRunStatus:l.lastRunStatus,lastRunError:l.lastRunError,subagentType:l.subagentType??null},D=d.get(l.id);f.push(D&&le(D,v)?D:v),n.delete(l.id)}for(const l of n.values()){const a={childSessionId:l.childSessionId,title:l.title,status:G(l.status),error:l.error,lastHeartbeatAt:l.lastHeartbeatAt,lastEventAt:l.lastEventAt,outputPreview:l.outputPreview,roundCount:l.roundCount},v=d.get(l.childSessionId);f.push(v&&le(v,a)?v:a)}return m.current=new Map(f.map(l=>[l.childSessionId,l])),f},[J,q]);u.useEffect(()=>{c(z(t)??!1)},[t]),u.useEffect(()=>{z(t)===null&&c(R.length>ze)},[t,R.length]);const he=u.useCallback(()=>{c(n=>{const d=!n;return Ne(t,d),d})},[t]),V=u.useCallback(n=>n instanceof Error&&n.message.trim()?n.message:r("chat.subAgents.runChildFailed"),[r]),Q=u.useCallback(async(n,d="regenerate")=>{S(n),C(t,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),F(n);try{const f=await L.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"run"},{name:"child_session_id",value:n},{name:"reset_to_last_user",value:d==="error_retry"?"false":"true"}]});if(!f.success)throw new Error(f.result||"Failed to run sub-agent");C(t,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),await g(n,{mode:"replace"}),await P()}catch(f){T(n),C(t,n,{status:"error",error:V(f),lastEventAt:new Date().toISOString()})}finally{S(f=>f===n?null:f)}},[g,t,P,F,T,V,C]),Z=u.useCallback(async n=>{const d=typeof window<"u"?window.prompt.bind(window):null;if(!d)return;const f=d("Send a follow-up message to this sub-agent:","Continue from where you left off.");if(f===null)return;const l=f.trim();if(!l){C(t,n,{status:"error",error:"Follow-up message cannot be empty.",lastEventAt:new Date().toISOString()});return}w(n),C(t,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),O(n);try{const a=await L.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"send_message"},{name:"child_session_id",value:n},{name:"message",value:l},{name:"auto_run",value:"true"}]});if(!a.success)throw new Error(a.result||"Follow-up failed");let v="running";try{JSON.parse(a.result).status==="pending"&&(v="pending")}catch{v="running"}C(t,n,{status:v,error:void 0,lastEventAt:new Date().toISOString()}),await P()}catch(a){T(n),C(t,n,{status:"error",error:a instanceof Error&&a.message.trim()?a.message:r("chat.subAgents.continueChildFailed"),lastEventAt:new Date().toISOString()})}finally{w(a=>a===n?null:a)}},[t,P,O,T,C,r]),ee=u.useCallback(async n=>{y(n);try{const d=await L.executeTool({tool_name:"SubAgent",session_id:t,parameters:[{name:"action",value:"delete"},{name:"child_session_id",value:n}]});if(!d.success)throw new Error(d.result||"Failed to delete sub-agent");M(t,n),await P()}finally{y(d=>d===n?null:d)}},[M,t,P]),pe=u.useCallback(n=>{Re(n),g(n)},[g]),me=u.useCallback(n=>{Z(n)},[Z]),fe=u.useCallback((n,d)=>{Q(n,d)},[Q]),ye=u.useCallback((n,d)=>{d?_(n):b(n)},[b,_]),Se=u.useCallback(n=>{ee(n)},[ee]);if(R.length===0)return null;const te=o.jsxs(W,{strong:!0,children:[r("chat.subAgents.title")," ",o.jsxs(W,{type:"secondary",children:["(",R.length,")"]})]}),ne=o.jsx($,{type:"text",size:"small",icon:i?o.jsx(je,{}):o.jsx(_e,{}),onClick:he,"data-testid":"sub-agents-toggle",style:e?{paddingInline:4}:void 0,children:r(i?"chat.subAgents.expand":"chat.subAgents.collapse")}),se=i?o.jsx(W,{type:"secondary","data-testid":"sub-agents-collapsed-hint",children:r("chat.subAgents.hiddenHint",{count:R.length})}):o.jsx(H,{vertical:!0,gap:e?s.marginXS:s.marginSM,"data-testid":"sub-agents-list",style:{width:"100%",minWidth:0,maxHeight:`${Ue}px`,overflowY:"auto",overflowX:"hidden",paddingRight:e?0:s.paddingXS},children:R.map((n,d)=>o.jsx(Le,{parentSessionId:t,item:n,index:d,compact:e,isRetrying:h===n.childSessionId,isContinuing:k===n.childSessionId,isDeleting:E===n.childSessionId,subagentProfilesById:X,onOpenChild:pe,onContinueChild:me,onRetryChild:fe,onTogglePin:ye,onDeleteChild:Se},n.childSessionId))}),re=!i&&R.length>1?o.jsx(Ge,{items:R}):null;return e?o.jsxs("section",{"data-testid":"sub-agents-panel",style:{width:"100%",minWidth:0,marginBottom:s.marginXS,overflow:"hidden"},children:[o.jsxs(H,{align:"center",justify:"space-between",gap:s.marginXS,style:{padding:`${s.paddingXXS??2}px 0 ${s.paddingXS}px`,borderBottom:`1px solid ${s.colorBorderSecondary}`},children:[o.jsx("div",{style:{flex:1,minWidth:0},children:te}),o.jsx("div",{style:{flex:"0 0 auto"},children:ne})]}),o.jsxs("div",{style:{padding:`${s.paddingXS}px 0 0`},children:[se,re]})]}):o.jsxs(Ie,{size:"small",className:"lotus-settings-card",style:{marginBottom:s.marginMD},"data-testid":"sub-agents-panel",title:te,extra:ne,children:[se,re]})},Ge=({items:t})=>{const{token:e}=ce(),{t:r}=Y(),s=t.reduce((c,h)=>{const S=G(h.status);return S==="completed"?c.completed++:S==="running"?c.running++:S==="error"||S==="failed"?c.error++:c.pending++,c},{completed:0,running:0,error:0,pending:0}),i=[];return s.completed>0&&i.push(r("chat.subAgents.summaryCompleted",{count:s.completed})),s.running>0&&i.push(r("chat.subAgents.summaryRunning",{count:s.running})),s.pending>0&&i.push(r("chat.subAgents.summaryPending",{count:s.pending})),s.error>0&&i.push(r("chat.subAgents.summaryFailed",{count:s.error})),i.length===0?null:o.jsx(U,{block:!0,items:i,style:{marginTop:e.marginXS}})};export{tt as SubAgentsPanel};
|