@bigduu/lotus 2026.5.13 → 2026.5.15

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.
@@ -1 +1 @@
1
- import{a as n}from"./App-bVqmFSlk.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
+ import{a as n}from"./App-DRZhqTnn.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 Ce=Object.defineProperty;var Se=(e,t,s)=>t in e?Ce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var re=(e,t,s)=>Se(e,typeof t!="symbol"?t+"":t,s);import{j as o}from"./vendor-markdown-DZuK0SxV.js";import{a as u,u as N}from"./vendor-i18n-BNURlJ23.js";import{t as _,y as le,z as we,I as z,u as x,B as xe,o as Ae}from"./App-bVqmFSlk.js";import{l as W,F as I,j as ie,E as $,ak as Te,t as ue,u as ve,a8 as Ee,C as ke}from"./vendor-antd-C8lKwvI6.js";import"./vendor-mermaid-C1Gk9PtT.js";import"./main-BEVjNwcv.js";const j=class j{static getInstance(){return j.instance||(j.instance=new j),j.instance}parseUserCommand(t){_("[ToolService]",`[ToolService] parseUserCommand: Parsing content: "${t}"`);const s=t.trim();if(!s.startsWith("/"))return _("[ToolService]",'[ToolService] parseUserCommand: Content does not start with "/", not a tool command.'),null;const r=s.indexOf(" ");let i,d;if(r===-1?(i=s.substring(1),d=""):(i=s.substring(1,r),d=s.substring(r+1).trim()),i){const f={tool_name:i,user_description:d};return _("[ToolService]","[ToolService] parseUserCommand: Successfully parsed command:",f),f}return _("[ToolService]","[ToolService] parseUserCommand: Failed to parse tool name from content."),null}parseAIResponseToToolCall(t){return this.parseUserCommand(t)}async executeTool(t){_("[ToolService]","[ToolService] executeTool: Attempting to execute tool via HTTP with request:",t);try{const s=await le.post("tools/execute",t),r=JSON.parse(s.result);return _("[ToolService]","[ToolService] executeTool: Parsed structured result:",r),r}catch(s){throw console.error("[ToolService] executeTool: HTTP tool execution failed:",s),s instanceof we?new Error(`Workflow execution failed: ${s.message}`):s}}};re(j,"instance");let L=j;const F=new L;class Re{async listProfiles(){return le.get("subagent_profiles")}}const je=new Re,Pe=[];function _e(e={}){const{enabled:t=!0,refreshKey:s}=e,[r,i]=u.useState(null),[d,f]=u.useState(!1),[b,E]=u.useState(null),w=u.useCallback(async()=>{f(!0);try{const y=await je.listProfiles();i(y),E(null)}catch(y){E(y instanceof Error?y:new Error(String(y)))}finally{f(!1)}},[]);u.useEffect(()=>{t&&w()},[t,w,s]);const T=u.useMemo(()=>{const y=new Map;if(r!=null&&r.profiles)for(const p of r.profiles)y.set(p.id,p);return y},[r]);return{profiles:(r==null?void 0:r.profiles)??Pe,fallbackId:(r==null?void 0:r.fallback_id)??null,loading:d,error:b,refresh:w,byId:T}}const oe=(e,t,s)=>{var w,T,y,p,c;const r=e==null?void 0:e.trim();if(!r)return null;const i=t.get(r),d=((w=i==null?void 0:i.display_name)==null?void 0:w.trim())||r,f=(y=(T=i==null?void 0:i.ui)==null?void 0:T.icon)==null?void 0:y.trim(),b=((c=(p=i==null?void 0:i.ui)==null?void 0:p.color)==null?void 0:c.trim())||void 0;return(s==null?void 0:s.compact)??!1?o.jsx("span",{"data-testid":`sub-agent-role-tag-${r}`,style:{color:b||"inherit",lineHeight:"inherit",whiteSpace:"nowrap"},children:f?`${f} ${d}`:d}):o.jsx(W,{color:b,style:{marginInlineEnd:0,flex:"0 0 auto"},"data-testid":`sub-agent-role-tag-${r}`,children:f?`${f} ${d}`:d})},{Text:D}=ie,{useToken:$e}=ue,Ie=e=>{const t=(e||"").trim().toLowerCase();return t?t==="started"||t==="already_running"?"running":t==="success"||t==="done"?"completed":t==="canceled"?"cancelled":t==="queued"||t==="created"?"pending":t:"pending"},He=u.memo(({item:e,index:t,compact:s,isRetrying:r,isContinuing:i,isDeleting:d,subagentProfilesById:f,onOpenChild:b,onContinueChild:E,onRetryChild:w,onTogglePin:T,onDeleteChild:y})=>{const{token:p}=$e(),{t:c}=N(),k=s?{marginInlineEnd:0,flex:"0 0 auto",fontSize:10,lineHeight:"16px",paddingInline:6}:{marginInlineEnd:0,flex:"0 0 auto"},C=s?{paddingInline:0,height:22}:void 0,S=Ie(e.status),P=S==="running",R=r||i||d,H=h=>h==="running"?c("chat.subAgents.statusRunning"):h==="completed"?c("chat.subAgents.statusCompleted"):h==="pending"?c("chat.subAgents.statusPending"):h==="cancelled"?c("chat.subAgents.statusCancelled"):h==="error"||h==="failed"?c("chat.subAgents.statusFailed"):h,O=h=>h==="running"?p.colorPrimary:h==="completed"?p.colorSuccess:h==="error"||h==="failed"?p.colorError:h==="cancelled"?p.colorWarning:p.colorTextSecondary;return o.jsxs(I,{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&&t>0?`1px solid ${p.colorBorderSecondary}`:void 0,background:s?"transparent":void 0},children:[o.jsxs(I,{vertical:!0,style:{width:"100%",minWidth:0},children:[o.jsxs(I,{align:"center",gap:p.marginXS,wrap:!0,style:{width:"100%",minWidth:0},children:[o.jsx(D,{strong:!0,ellipsis:!0,style:{minWidth:0,flex:"1 1 180px",fontSize:s?13:void 0},children:e.title||c("chat.subAgents.fallbackTitle")}),s?o.jsx(z,{nowrap:!0,items:[o.jsx("span",{style:{color:O(S)},children:H(S)}),e.pinned?c("chat.subAgents.pinned"):null,oe(e.subagentType,f,{compact:!0})]}):o.jsxs(o.Fragment,{children:[o.jsx(W,{color:S==="running"?"processing":S==="completed"?"success":S==="error"||S==="failed"?"error":S==="cancelled"?"warning":"default",style:k,children:H(S)}),e.pinned?o.jsx(W,{color:"warning",style:k,children:c("chat.subAgents.pinned")}):null,oe(e.subagentType,f)]})]}),s?o.jsx(z,{block:!0,items:[e.childSessionId.slice(0,8),e.updatedAt,e.lastHeartbeatAt?`${c("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:null,typeof e.roundCount=="number"?`${c("chat.subAgents.round")} ${e.roundCount+1}`:null]}):o.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?` • ${c("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:"",typeof e.roundCount=="number"?` • ${c("chat.subAgents.round")} ${e.roundCount+1}`:""]}),e.outputPreview?o.jsx(D,{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:e.outputPreview}):null,e.error?o.jsx(D,{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(I,{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:C,disabled:R,onClick:()=>b(e.childSessionId),children:c("chat.subAgents.open")}),o.jsx($,{size:"small",type:s?"text":"default",style:C,loading:i,disabled:d||r||P,"data-testid":`sub-agent-continue-${e.childSessionId}`,onClick:()=>E(e.childSessionId),children:c("chat.subAgents.continue")}),o.jsx(Te,{trigger:["click"],menu:{items:[{key:"regenerate",label:c("chat.actions.regenerate")},{key:"error_retry",label:c("chat.actions.retryFailed")}],onClick:({key:h})=>{w(e.childSessionId,h)}},disabled:d||P||i,children:o.jsx($,{size:"small",type:s?"text":"default",style:C,loading:r,disabled:d||P||i,"data-testid":`sub-agent-retry-${e.childSessionId}`,children:c("chat.subAgents.retry")})}),typeof e.pinned=="boolean"?o.jsx($,{size:"small",type:s?"text":"default",style:C,disabled:R,onClick:()=>T(e.childSessionId,e.pinned),children:e.pinned?c("chat.actions.unpin"):c("chat.actions.pin")}):null,o.jsx($,{danger:!0,type:s?"text":"default",style:C,size:"small",loading:d,disabled:r,"data-testid":`sub-agent-delete-${e.childSessionId}`,onClick:()=>y(e.childSessionId),children:c("common.delete")})]})]})},(e,t)=>e.item===t.item&&e.index===t.index&&e.compact===t.compact&&e.isRetrying===t.isRetrying&&e.isContinuing===t.isContinuing&&e.isDeleting===t.isDeleting&&e.subagentProfilesById===t.subagentProfilesById&&e.onOpenChild===t.onOpenChild&&e.onContinueChild===t.onContinueChild&&e.onRetryChild===t.onRetryChild&&e.onTogglePin===t.onTogglePin&&e.onDeleteChild===t.onDeleteChild),{Text:B}=ie,{useToken:de}=ue,Oe="chat-session-sub-agents-collapsed:",Me=3,De=600,U=e=>{const t=(e||"").trim().toLowerCase();return t?t==="started"||t==="already_running"?"running":t==="success"||t==="done"?"completed":t==="canceled"?"cancelled":t==="queued"||t==="created"?"pending":t:"pending"},Fe=(e,t)=>{if(t&&t.trim())return t;if(e.isRunning)return"running";if(e.lastRunStatus&&e.lastRunStatus.trim())return e.lastRunStatus;const s=e.messageCount??0;return s>2?"completed":(s>0,"pending")},ce=e=>`${Oe}${e}`,X=e=>{if(typeof window>"u")return!1;try{const t=window.localStorage.getItem(ce(e));return t==="1"?!0:t==="0"?!1:null}catch{return null}},Be=(e,t)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(ce(e),t?"1":"0")}catch{}},ae=(e,t)=>e.childSessionId===t.childSessionId&&e.title===t.title&&e.status===t.status&&e.error===t.error&&e.lastHeartbeatAt===t.lastHeartbeatAt&&e.lastEventAt===t.lastEventAt&&e.outputPreview===t.outputPreview&&e.pinned===t.pinned&&e.updatedAt===t.updatedAt&&e.isRunning===t.isRunning&&e.messageCount===t.messageCount&&e.lastRunStatus===t.lastRunStatus&&e.lastRunError===t.lastRunError&&e.subagentType===t.subagentType&&e.roundCount===t.roundCount,Ke=({parentSessionId:e,compact:t=!1})=>{const{t:s}=N(),{token:r}=de(),[i,d]=u.useState(()=>X(e)??!1),[f,b]=u.useState(null),[E,w]=u.useState(null),[T,y]=u.useState(null),p=x(n=>xe(e)(n)),c=x(n=>n.chats),k=x(n=>n.loadChatHistory),C=x(n=>n.refreshChats),S=x(n=>n.markOptimisticStart),P=x(n=>n.markRetryStart),R=x(n=>n.markSettleTimeout),H=x(n=>n.pinSession),O=x(n=>n.unpinSession),h=x(n=>n.applyChildProgress),G=x(n=>n.clearChildProgress),{byId:ge}=_e(),q=u.useRef(new Map),K=u.useMemo(()=>Object.entries(p).map(([n,g])=>({childSessionId:n,...g})),[p]),Y=u.useMemo(()=>c.filter(n=>n.kind==="child"&&n.parentSessionId===e).sort((n,g)=>{const m=Date.parse(n.updatedAt||"")||0;return(Date.parse(g.updatedAt||"")||0)-m}),[c,e]),v=u.useMemo(()=>{const n=new Map(K.map(l=>[l.childSessionId,l])),g=q.current,m=[];for(const l of Y){const a=n.get(l.id),A={childSessionId:l.id,title:l.title||(a==null?void 0:a.title),status:U(Fe(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},M=g.get(l.id);m.push(M&&ae(M,A)?M:A),n.delete(l.id)}for(const l of n.values()){const a={childSessionId:l.childSessionId,title:l.title,status:U(l.status),error:l.error,lastHeartbeatAt:l.lastHeartbeatAt,lastEventAt:l.lastEventAt,outputPreview:l.outputPreview,roundCount:l.roundCount},A=g.get(l.childSessionId);m.push(A&&ae(A,a)?A:a)}return q.current=new Map(m.map(l=>[l.childSessionId,l])),m},[Y,K]);u.useEffect(()=>{d(X(e)??!1)},[e]),u.useEffect(()=>{X(e)===null&&d(v.length>Me)},[e,v.length]);const he=u.useCallback(()=>{d(n=>{const g=!n;return Be(e,g),g})},[e]),J=u.useCallback(n=>n instanceof Error&&n.message.trim()?n.message:s("chat.subAgents.runChildFailed"),[s]),Q=u.useCallback(async(n,g="regenerate")=>{b(n),h(e,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),P(n);try{const m=await F.executeTool({tool_name:"SubAgent",session_id:e,parameters:[{name:"action",value:"run"},{name:"child_session_id",value:n},{name:"reset_to_last_user",value:g==="error_retry"?"false":"true"}]});if(!m.success)throw new Error(m.result||"Failed to run sub-agent");h(e,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),await k(n,{mode:"replace"}),await C()}catch(m){R(n),h(e,n,{status:"error",error:J(m),lastEventAt:new Date().toISOString()})}finally{b(m=>m===n?null:m)}},[k,e,C,P,R,J,h]),V=u.useCallback(async n=>{const g=typeof window<"u"?window.prompt.bind(window):null;if(!g)return;const m=g("Send a follow-up message to this sub-agent:","Continue from where you left off.");if(m===null)return;const l=m.trim();if(!l){h(e,n,{status:"error",error:"Follow-up message cannot be empty.",lastEventAt:new Date().toISOString()});return}w(n),h(e,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),S(n);try{const a=await F.executeTool({tool_name:"SubAgent",session_id:e,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 A="running";try{JSON.parse(a.result).status==="pending"&&(A="pending")}catch{A="running"}h(e,n,{status:A,error:void 0,lastEventAt:new Date().toISOString()}),await C()}catch(a){R(n),h(e,n,{status:"error",error:a instanceof Error&&a.message.trim()?a.message:s("chat.subAgents.continueChildFailed"),lastEventAt:new Date().toISOString()})}finally{w(a=>a===n?null:a)}},[e,C,S,R,h,s]),Z=u.useCallback(async n=>{y(n);try{const g=await F.executeTool({tool_name:"SubAgent",session_id:e,parameters:[{name:"action",value:"delete"},{name:"child_session_id",value:n}]});if(!g.success)throw new Error(g.result||"Failed to delete sub-agent");G(e,n),await C()}finally{y(g=>g===n?null:g)}},[G,e,C]),pe=u.useCallback(n=>{Ae(n),k(n)},[k]),fe=u.useCallback(n=>{V(n)},[V]),me=u.useCallback((n,g)=>{Q(n,g)},[Q]),ye=u.useCallback((n,g)=>{g?O(n):H(n)},[H,O]),be=u.useCallback(n=>{Z(n)},[Z]);if(v.length===0)return null;const ee=o.jsxs(B,{strong:!0,children:[s("chat.subAgents.title")," ",o.jsxs(B,{type:"secondary",children:["(",v.length,")"]})]}),te=o.jsx($,{type:"text",size:"small",icon:i?o.jsx(ve,{}):o.jsx(Ee,{}),onClick:he,"data-testid":"sub-agents-toggle",style:t?{paddingInline:4}:void 0,children:s(i?"chat.subAgents.expand":"chat.subAgents.collapse")}),ne=i?o.jsx(B,{type:"secondary","data-testid":"sub-agents-collapsed-hint",children:s("chat.subAgents.hiddenHint",{count:v.length})}):o.jsx(I,{vertical:!0,gap:t?r.marginXS:r.marginSM,"data-testid":"sub-agents-list",style:{width:"100%",minWidth:0,maxHeight:`${De}px`,overflowY:"auto",overflowX:"hidden",paddingRight:t?0:r.paddingXS},children:v.map((n,g)=>o.jsx(He,{item:n,index:g,compact:t,isRetrying:f===n.childSessionId,isContinuing:E===n.childSessionId,isDeleting:T===n.childSessionId,subagentProfilesById:ge,onOpenChild:pe,onContinueChild:fe,onRetryChild:me,onTogglePin:ye,onDeleteChild:be},n.childSessionId))}),se=!i&&v.length>1?o.jsx(Xe,{items:v}):null;return t?o.jsxs("section",{"data-testid":"sub-agents-panel",style:{width:"100%",minWidth:0,marginBottom:r.marginXS,overflow:"hidden"},children:[o.jsxs(I,{align:"center",justify:"space-between",gap:r.marginXS,style:{padding:`${r.paddingXXS??2}px 0 ${r.paddingXS}px`,borderBottom:`1px solid ${r.colorBorderSecondary}`},children:[o.jsx("div",{style:{flex:1,minWidth:0},children:ee}),o.jsx("div",{style:{flex:"0 0 auto"},children:te})]}),o.jsxs("div",{style:{padding:`${r.paddingXS}px 0 0`},children:[ne,se]})]}):o.jsxs(ke,{size:"small",className:"lotus-settings-card",style:{marginBottom:r.marginMD},"data-testid":"sub-agents-panel",title:ee,extra:te,children:[ne,se]})},Xe=({items:e})=>{const{token:t}=de(),{t:s}=N(),r=e.reduce((d,f)=>{const b=U(f.status);return b==="completed"?d.completed++:b==="running"?d.running++:b==="error"||b==="failed"?d.error++:d.pending++,d},{completed:0,running:0,error:0,pending:0}),i=[];return r.completed>0&&i.push(s("chat.subAgents.summaryCompleted",{count:r.completed})),r.running>0&&i.push(s("chat.subAgents.summaryRunning",{count:r.running})),r.pending>0&&i.push(s("chat.subAgents.summaryPending",{count:r.pending})),r.error>0&&i.push(s("chat.subAgents.summaryFailed",{count:r.error})),i.length===0?null:o.jsx(z,{block:!0,items:i,style:{marginTop:t.marginXS}})};export{Ke as SubAgentsPanel};
1
+ var Ce=Object.defineProperty;var Se=(e,t,s)=>t in e?Ce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var re=(e,t,s)=>Se(e,typeof t!="symbol"?t+"":t,s);import{j as o}from"./vendor-markdown-DZuK0SxV.js";import{a as u,u as N}from"./vendor-i18n-BNURlJ23.js";import{t as _,y as le,z as we,I as z,u as x,B as xe,o as Ae}from"./App-DRZhqTnn.js";import{l as W,F as I,j as ie,E as $,ak as Te,t as ue,u as ve,a8 as Ee,C as ke}from"./vendor-antd-C8lKwvI6.js";import"./vendor-mermaid-C1Gk9PtT.js";import"./main-DZ0RS3MR.js";const j=class j{static getInstance(){return j.instance||(j.instance=new j),j.instance}parseUserCommand(t){_("[ToolService]",`[ToolService] parseUserCommand: Parsing content: "${t}"`);const s=t.trim();if(!s.startsWith("/"))return _("[ToolService]",'[ToolService] parseUserCommand: Content does not start with "/", not a tool command.'),null;const r=s.indexOf(" ");let i,d;if(r===-1?(i=s.substring(1),d=""):(i=s.substring(1,r),d=s.substring(r+1).trim()),i){const f={tool_name:i,user_description:d};return _("[ToolService]","[ToolService] parseUserCommand: Successfully parsed command:",f),f}return _("[ToolService]","[ToolService] parseUserCommand: Failed to parse tool name from content."),null}parseAIResponseToToolCall(t){return this.parseUserCommand(t)}async executeTool(t){_("[ToolService]","[ToolService] executeTool: Attempting to execute tool via HTTP with request:",t);try{const s=await le.post("tools/execute",t),r=JSON.parse(s.result);return _("[ToolService]","[ToolService] executeTool: Parsed structured result:",r),r}catch(s){throw console.error("[ToolService] executeTool: HTTP tool execution failed:",s),s instanceof we?new Error(`Workflow execution failed: ${s.message}`):s}}};re(j,"instance");let L=j;const F=new L;class Re{async listProfiles(){return le.get("subagent_profiles")}}const je=new Re,Pe=[];function _e(e={}){const{enabled:t=!0,refreshKey:s}=e,[r,i]=u.useState(null),[d,f]=u.useState(!1),[b,E]=u.useState(null),w=u.useCallback(async()=>{f(!0);try{const y=await je.listProfiles();i(y),E(null)}catch(y){E(y instanceof Error?y:new Error(String(y)))}finally{f(!1)}},[]);u.useEffect(()=>{t&&w()},[t,w,s]);const T=u.useMemo(()=>{const y=new Map;if(r!=null&&r.profiles)for(const p of r.profiles)y.set(p.id,p);return y},[r]);return{profiles:(r==null?void 0:r.profiles)??Pe,fallbackId:(r==null?void 0:r.fallback_id)??null,loading:d,error:b,refresh:w,byId:T}}const oe=(e,t,s)=>{var w,T,y,p,c;const r=e==null?void 0:e.trim();if(!r)return null;const i=t.get(r),d=((w=i==null?void 0:i.display_name)==null?void 0:w.trim())||r,f=(y=(T=i==null?void 0:i.ui)==null?void 0:T.icon)==null?void 0:y.trim(),b=((c=(p=i==null?void 0:i.ui)==null?void 0:p.color)==null?void 0:c.trim())||void 0;return(s==null?void 0:s.compact)??!1?o.jsx("span",{"data-testid":`sub-agent-role-tag-${r}`,style:{color:b||"inherit",lineHeight:"inherit",whiteSpace:"nowrap"},children:f?`${f} ${d}`:d}):o.jsx(W,{color:b,style:{marginInlineEnd:0,flex:"0 0 auto"},"data-testid":`sub-agent-role-tag-${r}`,children:f?`${f} ${d}`:d})},{Text:D}=ie,{useToken:$e}=ue,Ie=e=>{const t=(e||"").trim().toLowerCase();return t?t==="started"||t==="already_running"?"running":t==="success"||t==="done"?"completed":t==="canceled"?"cancelled":t==="queued"||t==="created"?"pending":t:"pending"},He=u.memo(({item:e,index:t,compact:s,isRetrying:r,isContinuing:i,isDeleting:d,subagentProfilesById:f,onOpenChild:b,onContinueChild:E,onRetryChild:w,onTogglePin:T,onDeleteChild:y})=>{const{token:p}=$e(),{t:c}=N(),k=s?{marginInlineEnd:0,flex:"0 0 auto",fontSize:10,lineHeight:"16px",paddingInline:6}:{marginInlineEnd:0,flex:"0 0 auto"},C=s?{paddingInline:0,height:22}:void 0,S=Ie(e.status),P=S==="running",R=r||i||d,H=h=>h==="running"?c("chat.subAgents.statusRunning"):h==="completed"?c("chat.subAgents.statusCompleted"):h==="pending"?c("chat.subAgents.statusPending"):h==="cancelled"?c("chat.subAgents.statusCancelled"):h==="error"||h==="failed"?c("chat.subAgents.statusFailed"):h,O=h=>h==="running"?p.colorPrimary:h==="completed"?p.colorSuccess:h==="error"||h==="failed"?p.colorError:h==="cancelled"?p.colorWarning:p.colorTextSecondary;return o.jsxs(I,{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&&t>0?`1px solid ${p.colorBorderSecondary}`:void 0,background:s?"transparent":void 0},children:[o.jsxs(I,{vertical:!0,style:{width:"100%",minWidth:0},children:[o.jsxs(I,{align:"center",gap:p.marginXS,wrap:!0,style:{width:"100%",minWidth:0},children:[o.jsx(D,{strong:!0,ellipsis:!0,style:{minWidth:0,flex:"1 1 180px",fontSize:s?13:void 0},children:e.title||c("chat.subAgents.fallbackTitle")}),s?o.jsx(z,{nowrap:!0,items:[o.jsx("span",{style:{color:O(S)},children:H(S)}),e.pinned?c("chat.subAgents.pinned"):null,oe(e.subagentType,f,{compact:!0})]}):o.jsxs(o.Fragment,{children:[o.jsx(W,{color:S==="running"?"processing":S==="completed"?"success":S==="error"||S==="failed"?"error":S==="cancelled"?"warning":"default",style:k,children:H(S)}),e.pinned?o.jsx(W,{color:"warning",style:k,children:c("chat.subAgents.pinned")}):null,oe(e.subagentType,f)]})]}),s?o.jsx(z,{block:!0,items:[e.childSessionId.slice(0,8),e.updatedAt,e.lastHeartbeatAt?`${c("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:null,typeof e.roundCount=="number"?`${c("chat.subAgents.round")} ${e.roundCount+1}`:null]}):o.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?` • ${c("chat.subAgents.heartbeat")}: ${e.lastHeartbeatAt}`:"",typeof e.roundCount=="number"?` • ${c("chat.subAgents.round")} ${e.roundCount+1}`:""]}),e.outputPreview?o.jsx(D,{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:e.outputPreview}):null,e.error?o.jsx(D,{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(I,{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:C,disabled:R,onClick:()=>b(e.childSessionId),children:c("chat.subAgents.open")}),o.jsx($,{size:"small",type:s?"text":"default",style:C,loading:i,disabled:d||r||P,"data-testid":`sub-agent-continue-${e.childSessionId}`,onClick:()=>E(e.childSessionId),children:c("chat.subAgents.continue")}),o.jsx(Te,{trigger:["click"],menu:{items:[{key:"regenerate",label:c("chat.actions.regenerate")},{key:"error_retry",label:c("chat.actions.retryFailed")}],onClick:({key:h})=>{w(e.childSessionId,h)}},disabled:d||P||i,children:o.jsx($,{size:"small",type:s?"text":"default",style:C,loading:r,disabled:d||P||i,"data-testid":`sub-agent-retry-${e.childSessionId}`,children:c("chat.subAgents.retry")})}),typeof e.pinned=="boolean"?o.jsx($,{size:"small",type:s?"text":"default",style:C,disabled:R,onClick:()=>T(e.childSessionId,e.pinned),children:e.pinned?c("chat.actions.unpin"):c("chat.actions.pin")}):null,o.jsx($,{danger:!0,type:s?"text":"default",style:C,size:"small",loading:d,disabled:r,"data-testid":`sub-agent-delete-${e.childSessionId}`,onClick:()=>y(e.childSessionId),children:c("common.delete")})]})]})},(e,t)=>e.item===t.item&&e.index===t.index&&e.compact===t.compact&&e.isRetrying===t.isRetrying&&e.isContinuing===t.isContinuing&&e.isDeleting===t.isDeleting&&e.subagentProfilesById===t.subagentProfilesById&&e.onOpenChild===t.onOpenChild&&e.onContinueChild===t.onContinueChild&&e.onRetryChild===t.onRetryChild&&e.onTogglePin===t.onTogglePin&&e.onDeleteChild===t.onDeleteChild),{Text:B}=ie,{useToken:de}=ue,Oe="chat-session-sub-agents-collapsed:",Me=3,De=600,U=e=>{const t=(e||"").trim().toLowerCase();return t?t==="started"||t==="already_running"?"running":t==="success"||t==="done"?"completed":t==="canceled"?"cancelled":t==="queued"||t==="created"?"pending":t:"pending"},Fe=(e,t)=>{if(t&&t.trim())return t;if(e.isRunning)return"running";if(e.lastRunStatus&&e.lastRunStatus.trim())return e.lastRunStatus;const s=e.messageCount??0;return s>2?"completed":(s>0,"pending")},ce=e=>`${Oe}${e}`,X=e=>{if(typeof window>"u")return!1;try{const t=window.localStorage.getItem(ce(e));return t==="1"?!0:t==="0"?!1:null}catch{return null}},Be=(e,t)=>{if(!(typeof window>"u"))try{window.localStorage.setItem(ce(e),t?"1":"0")}catch{}},ae=(e,t)=>e.childSessionId===t.childSessionId&&e.title===t.title&&e.status===t.status&&e.error===t.error&&e.lastHeartbeatAt===t.lastHeartbeatAt&&e.lastEventAt===t.lastEventAt&&e.outputPreview===t.outputPreview&&e.pinned===t.pinned&&e.updatedAt===t.updatedAt&&e.isRunning===t.isRunning&&e.messageCount===t.messageCount&&e.lastRunStatus===t.lastRunStatus&&e.lastRunError===t.lastRunError&&e.subagentType===t.subagentType&&e.roundCount===t.roundCount,Ke=({parentSessionId:e,compact:t=!1})=>{const{t:s}=N(),{token:r}=de(),[i,d]=u.useState(()=>X(e)??!1),[f,b]=u.useState(null),[E,w]=u.useState(null),[T,y]=u.useState(null),p=x(n=>xe(e)(n)),c=x(n=>n.chats),k=x(n=>n.loadChatHistory),C=x(n=>n.refreshChats),S=x(n=>n.markOptimisticStart),P=x(n=>n.markRetryStart),R=x(n=>n.markSettleTimeout),H=x(n=>n.pinSession),O=x(n=>n.unpinSession),h=x(n=>n.applyChildProgress),G=x(n=>n.clearChildProgress),{byId:ge}=_e(),q=u.useRef(new Map),K=u.useMemo(()=>Object.entries(p).map(([n,g])=>({childSessionId:n,...g})),[p]),Y=u.useMemo(()=>c.filter(n=>n.kind==="child"&&n.parentSessionId===e).sort((n,g)=>{const m=Date.parse(n.updatedAt||"")||0;return(Date.parse(g.updatedAt||"")||0)-m}),[c,e]),v=u.useMemo(()=>{const n=new Map(K.map(l=>[l.childSessionId,l])),g=q.current,m=[];for(const l of Y){const a=n.get(l.id),A={childSessionId:l.id,title:l.title||(a==null?void 0:a.title),status:U(Fe(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},M=g.get(l.id);m.push(M&&ae(M,A)?M:A),n.delete(l.id)}for(const l of n.values()){const a={childSessionId:l.childSessionId,title:l.title,status:U(l.status),error:l.error,lastHeartbeatAt:l.lastHeartbeatAt,lastEventAt:l.lastEventAt,outputPreview:l.outputPreview,roundCount:l.roundCount},A=g.get(l.childSessionId);m.push(A&&ae(A,a)?A:a)}return q.current=new Map(m.map(l=>[l.childSessionId,l])),m},[Y,K]);u.useEffect(()=>{d(X(e)??!1)},[e]),u.useEffect(()=>{X(e)===null&&d(v.length>Me)},[e,v.length]);const he=u.useCallback(()=>{d(n=>{const g=!n;return Be(e,g),g})},[e]),J=u.useCallback(n=>n instanceof Error&&n.message.trim()?n.message:s("chat.subAgents.runChildFailed"),[s]),Q=u.useCallback(async(n,g="regenerate")=>{b(n),h(e,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),P(n);try{const m=await F.executeTool({tool_name:"SubAgent",session_id:e,parameters:[{name:"action",value:"run"},{name:"child_session_id",value:n},{name:"reset_to_last_user",value:g==="error_retry"?"false":"true"}]});if(!m.success)throw new Error(m.result||"Failed to run sub-agent");h(e,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),await k(n,{mode:"replace"}),await C()}catch(m){R(n),h(e,n,{status:"error",error:J(m),lastEventAt:new Date().toISOString()})}finally{b(m=>m===n?null:m)}},[k,e,C,P,R,J,h]),V=u.useCallback(async n=>{const g=typeof window<"u"?window.prompt.bind(window):null;if(!g)return;const m=g("Send a follow-up message to this sub-agent:","Continue from where you left off.");if(m===null)return;const l=m.trim();if(!l){h(e,n,{status:"error",error:"Follow-up message cannot be empty.",lastEventAt:new Date().toISOString()});return}w(n),h(e,n,{status:"running",error:void 0,lastEventAt:new Date().toISOString()}),S(n);try{const a=await F.executeTool({tool_name:"SubAgent",session_id:e,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 A="running";try{JSON.parse(a.result).status==="pending"&&(A="pending")}catch{A="running"}h(e,n,{status:A,error:void 0,lastEventAt:new Date().toISOString()}),await C()}catch(a){R(n),h(e,n,{status:"error",error:a instanceof Error&&a.message.trim()?a.message:s("chat.subAgents.continueChildFailed"),lastEventAt:new Date().toISOString()})}finally{w(a=>a===n?null:a)}},[e,C,S,R,h,s]),Z=u.useCallback(async n=>{y(n);try{const g=await F.executeTool({tool_name:"SubAgent",session_id:e,parameters:[{name:"action",value:"delete"},{name:"child_session_id",value:n}]});if(!g.success)throw new Error(g.result||"Failed to delete sub-agent");G(e,n),await C()}finally{y(g=>g===n?null:g)}},[G,e,C]),pe=u.useCallback(n=>{Ae(n),k(n)},[k]),fe=u.useCallback(n=>{V(n)},[V]),me=u.useCallback((n,g)=>{Q(n,g)},[Q]),ye=u.useCallback((n,g)=>{g?O(n):H(n)},[H,O]),be=u.useCallback(n=>{Z(n)},[Z]);if(v.length===0)return null;const ee=o.jsxs(B,{strong:!0,children:[s("chat.subAgents.title")," ",o.jsxs(B,{type:"secondary",children:["(",v.length,")"]})]}),te=o.jsx($,{type:"text",size:"small",icon:i?o.jsx(ve,{}):o.jsx(Ee,{}),onClick:he,"data-testid":"sub-agents-toggle",style:t?{paddingInline:4}:void 0,children:s(i?"chat.subAgents.expand":"chat.subAgents.collapse")}),ne=i?o.jsx(B,{type:"secondary","data-testid":"sub-agents-collapsed-hint",children:s("chat.subAgents.hiddenHint",{count:v.length})}):o.jsx(I,{vertical:!0,gap:t?r.marginXS:r.marginSM,"data-testid":"sub-agents-list",style:{width:"100%",minWidth:0,maxHeight:`${De}px`,overflowY:"auto",overflowX:"hidden",paddingRight:t?0:r.paddingXS},children:v.map((n,g)=>o.jsx(He,{item:n,index:g,compact:t,isRetrying:f===n.childSessionId,isContinuing:E===n.childSessionId,isDeleting:T===n.childSessionId,subagentProfilesById:ge,onOpenChild:pe,onContinueChild:fe,onRetryChild:me,onTogglePin:ye,onDeleteChild:be},n.childSessionId))}),se=!i&&v.length>1?o.jsx(Xe,{items:v}):null;return t?o.jsxs("section",{"data-testid":"sub-agents-panel",style:{width:"100%",minWidth:0,marginBottom:r.marginXS,overflow:"hidden"},children:[o.jsxs(I,{align:"center",justify:"space-between",gap:r.marginXS,style:{padding:`${r.paddingXXS??2}px 0 ${r.paddingXS}px`,borderBottom:`1px solid ${r.colorBorderSecondary}`},children:[o.jsx("div",{style:{flex:1,minWidth:0},children:ee}),o.jsx("div",{style:{flex:"0 0 auto"},children:te})]}),o.jsxs("div",{style:{padding:`${r.paddingXS}px 0 0`},children:[ne,se]})]}):o.jsxs(ke,{size:"small",className:"lotus-settings-card",style:{marginBottom:r.marginMD},"data-testid":"sub-agents-panel",title:ee,extra:te,children:[ne,se]})},Xe=({items:e})=>{const{token:t}=de(),{t:s}=N(),r=e.reduce((d,f)=>{const b=U(f.status);return b==="completed"?d.completed++:b==="running"?d.running++:b==="error"||b==="failed"?d.error++:d.pending++,d},{completed:0,running:0,error:0,pending:0}),i=[];return r.completed>0&&i.push(s("chat.subAgents.summaryCompleted",{count:r.completed})),r.running>0&&i.push(s("chat.subAgents.summaryRunning",{count:r.running})),r.pending>0&&i.push(s("chat.subAgents.summaryPending",{count:r.pending})),r.error>0&&i.push(s("chat.subAgents.summaryFailed",{count:r.error})),i.length===0?null:o.jsx(z,{block:!0,items:i,style:{marginTop:t.marginXS}})};export{Ke as SubAgentsPanel};
@@ -1 +1 @@
1
- import{j as a}from"./vendor-markdown-DZuK0SxV.js";import{q as $,t as v,v as B}from"./App-bVqmFSlk.js";import{a as l,u as E}from"./vendor-i18n-BNURlJ23.js";import{K as T,t as M,l as L,af as D,a7 as K,I as F}from"./vendor-antd-C8lKwvI6.js";import"./vendor-mermaid-C1Gk9PtT.js";import"./main-BEVjNwcv.js";const z=({visible:p,searchText:k,onSelect:I,onCancel:f,onAutoComplete:g})=>{const[o,i]=l.useState([]),[c,R]=l.useState([]),[d,u]=l.useState(0),[N,j]=l.useState(!1),S=l.useRef(null),h=l.useRef(null);l.useEffect(()=>{if(!p)return;const s=$.getInstance();(async()=>{j(!0);try{const r=await s.listCommands();v("[CommandSelector]","[CommandSelector] Fetched commands:",r),i(r),u(0)}catch(r){console.error("[CommandSelector] Failed to fetch commands:",r),i([])}finally{j(!1)}})()},[p]),l.useEffect(()=>{const s=o.filter(e=>{var x,y,b,C,w;const r=k.toLowerCase(),n=(e.displayName??"").toLowerCase();return e.name.toLowerCase().includes(r)||n.includes(r)||e.description.toLowerCase().includes(r)||e.type==="mcp"&&[(x=e.metadata)==null?void 0:x.serverId,(y=e.metadata)==null?void 0:y.serverName,(b=e.metadata)==null?void 0:b.originalName].filter(m=>typeof m=="string").some(m=>m.toLowerCase().includes(r))||(((C=e.category)==null?void 0:C.toLowerCase().includes(r))??!1)||(((w=e.tags)==null?void 0:w.some(m=>m.toLowerCase().includes(r)))??!1)});R(s),u(0)},[o,k]),l.useEffect(()=>{if(!h.current||!S.current)return;const s=S.current,e=h.current,r=s.getBoundingClientRect(),n=e.getBoundingClientRect();n.top<r.top?e.scrollIntoView({block:"start",behavior:"smooth"}):n.bottom>r.bottom&&e.scrollIntoView({block:"end",behavior:"smooth"})},[d,c]);const t=l.useCallback(async s=>{try{I({name:s.name,type:s.type,id:s.id})}catch(e){console.error(`[CommandSelector] Failed to select command '${s.name}':`,e)}},[I]);return l.useEffect(()=>{const s=e=>{if(p)switch(e.key){case"ArrowDown":case"n":if(e.key==="n"&&!e.ctrlKey)break;e.preventDefault(),e.stopPropagation(),u(r=>r<c.length-1?r+1:0);break;case"ArrowUp":case"p":if(e.key==="p"&&!e.ctrlKey)break;e.preventDefault(),e.stopPropagation(),u(r=>r>0?r-1:c.length-1);break;case"Enter":e.preventDefault(),e.stopPropagation(),c[d]&&t(c[d]);break;case" ":case"Tab":e.preventDefault(),e.stopPropagation(),c[d]&&g&&g(c[d].name);break;case"Escape":e.preventDefault(),e.stopPropagation(),f();break}};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[p,c,d,f,g,t]),{containerRef:S,selectedItemRef:h,filteredCommands:c,selectedIndex:d,setSelectedIndex:u,isLoading:N,handleCommandSelect:t}},{useToken:X}=M,P={workflow:{color:"blue",icon:a.jsx(F,{}),labelKey:"chat.commandSelector.types.workflow"},skill:{color:"green",icon:a.jsx(K,{}),labelKey:"chat.commandSelector.types.skill"},mcp:{color:"purple",icon:a.jsx(D,{}),labelKey:"chat.commandSelector.types.mcp"}},Q=({visible:p,onSelect:k,onCancel:I,searchText:f,onAutoComplete:g})=>{const{token:o}=X(),{t:i}=E(),{containerRef:c,selectedItemRef:R,filteredCommands:d,selectedIndex:u,setSelectedIndex:N,isLoading:j,handleCommandSelect:S}=z({visible:p,searchText:f,onSelect:k,onCancel:I,onAutoComplete:g});if(!p)return null;if(j)return a.jsxs("div",{style:{position:"absolute",bottom:"100%",left:0,right:0,background:o.colorBgContainer,border:`1px solid ${o.colorBorderSecondary}`,borderRadius:o.borderRadiusSM,boxShadow:o.boxShadowSecondary,padding:`${o.paddingSM}px ${o.paddingMD}px`,zIndex:1e3,marginBottom:o.marginXS,textAlign:"center"},children:[a.jsx(T,{size:"small"})," ",i("chat.commandSelector.loading")]});if(d.length===0)return a.jsx("div",{style:{position:"absolute",bottom:"100%",left:0,right:0,background:o.colorBgContainer,border:`1px solid ${o.colorBorderSecondary}`,borderRadius:o.borderRadiusSM,boxShadow:o.boxShadowSecondary,padding:`${o.paddingSM}px ${o.paddingMD}px`,zIndex:1e3,marginBottom:o.marginXS,textAlign:"center",color:o.colorTextSecondary},children:f?i("chat.commandSelector.emptyWithSearch",{search:f}):i("chat.commandSelector.empty")});const h=(t,s)=>{var b,C,w;const e=P[t.type],r=s===u,n=t.type==="mcp"?B(t.name):null,x=t.type==="mcp"?((b=t.metadata)==null?void 0:b.originalName)||(n==null?void 0:n.toolName)||t.displayName||t.name:null,y=t.type==="mcp"&&(((C=t.metadata)==null?void 0:C.serverName)||((w=t.metadata)==null?void 0:w.serverId)||(n==null?void 0:n.serverId))||null;return a.jsxs("div",{ref:r?R:null,className:`command-selector-item ${r?"selected":""}`,onClick:()=>S(t),onMouseEnter:()=>N(s),children:[a.jsxs("div",{className:"command-selector-item-header",children:[a.jsxs("div",{className:"command-selector-item-name",style:{color:o.colorPrimary},children:["/",t.type==="mcp"&&x?x:t.name]}),a.jsxs("div",{style:{display:"flex",gap:o.marginXS},children:[t.type==="mcp"&&y&&a.jsx(L,{color:"processing",children:y}),a.jsxs(L,{color:e.color,children:[e.icon," ",i(e.labelKey)]})]})]}),a.jsx("div",{className:"command-selector-item-description",style:{color:o.colorTextSecondary},children:t.description}),t.type==="mcp"&&y&&a.jsxs("div",{className:"command-selector-item-category",style:{color:o.colorTextTertiary},children:[i("common.server")," ",y]}),t.category&&a.jsxs("div",{className:"command-selector-item-category",style:{color:o.colorTextTertiary},children:[i("common.category")," ",t.category]}),t.tags&&t.tags.length>0&&a.jsx("div",{className:"command-selector-item-tags",children:t.tags.slice(0,3).map(m=>a.jsx(L,{children:m},m))})]},t.id)};return a.jsxs("div",{ref:c,className:"command-selector-container",style:{background:o.colorBgContainer,border:`1px solid ${o.colorBorderSecondary}`,borderRadius:o.borderRadiusSM,boxShadow:o.boxShadowSecondary},children:[a.jsx("div",{style:{padding:`${o.paddingXXS}px ${o.paddingSM}px`,borderBottom:`1px solid ${o.colorBorderSecondary}`,background:o.colorFillQuaternary,fontSize:o.fontSizeSM,color:o.colorTextTertiary},children:i("chat.commandSelector.navigationHint")}),d.map((t,s)=>h(t,s))]})};export{Q as default};
1
+ import{j as a}from"./vendor-markdown-DZuK0SxV.js";import{q as $,t as v,v as B}from"./App-DRZhqTnn.js";import{a as l,u as E}from"./vendor-i18n-BNURlJ23.js";import{K as T,t as M,l as L,af as D,a7 as K,I as F}from"./vendor-antd-C8lKwvI6.js";import"./vendor-mermaid-C1Gk9PtT.js";import"./main-DZ0RS3MR.js";const z=({visible:p,searchText:k,onSelect:I,onCancel:f,onAutoComplete:g})=>{const[o,i]=l.useState([]),[c,R]=l.useState([]),[d,u]=l.useState(0),[N,j]=l.useState(!1),S=l.useRef(null),h=l.useRef(null);l.useEffect(()=>{if(!p)return;const s=$.getInstance();(async()=>{j(!0);try{const r=await s.listCommands();v("[CommandSelector]","[CommandSelector] Fetched commands:",r),i(r),u(0)}catch(r){console.error("[CommandSelector] Failed to fetch commands:",r),i([])}finally{j(!1)}})()},[p]),l.useEffect(()=>{const s=o.filter(e=>{var x,y,b,C,w;const r=k.toLowerCase(),n=(e.displayName??"").toLowerCase();return e.name.toLowerCase().includes(r)||n.includes(r)||e.description.toLowerCase().includes(r)||e.type==="mcp"&&[(x=e.metadata)==null?void 0:x.serverId,(y=e.metadata)==null?void 0:y.serverName,(b=e.metadata)==null?void 0:b.originalName].filter(m=>typeof m=="string").some(m=>m.toLowerCase().includes(r))||(((C=e.category)==null?void 0:C.toLowerCase().includes(r))??!1)||(((w=e.tags)==null?void 0:w.some(m=>m.toLowerCase().includes(r)))??!1)});R(s),u(0)},[o,k]),l.useEffect(()=>{if(!h.current||!S.current)return;const s=S.current,e=h.current,r=s.getBoundingClientRect(),n=e.getBoundingClientRect();n.top<r.top?e.scrollIntoView({block:"start",behavior:"smooth"}):n.bottom>r.bottom&&e.scrollIntoView({block:"end",behavior:"smooth"})},[d,c]);const t=l.useCallback(async s=>{try{I({name:s.name,type:s.type,id:s.id})}catch(e){console.error(`[CommandSelector] Failed to select command '${s.name}':`,e)}},[I]);return l.useEffect(()=>{const s=e=>{if(p)switch(e.key){case"ArrowDown":case"n":if(e.key==="n"&&!e.ctrlKey)break;e.preventDefault(),e.stopPropagation(),u(r=>r<c.length-1?r+1:0);break;case"ArrowUp":case"p":if(e.key==="p"&&!e.ctrlKey)break;e.preventDefault(),e.stopPropagation(),u(r=>r>0?r-1:c.length-1);break;case"Enter":e.preventDefault(),e.stopPropagation(),c[d]&&t(c[d]);break;case" ":case"Tab":e.preventDefault(),e.stopPropagation(),c[d]&&g&&g(c[d].name);break;case"Escape":e.preventDefault(),e.stopPropagation(),f();break}};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[p,c,d,f,g,t]),{containerRef:S,selectedItemRef:h,filteredCommands:c,selectedIndex:d,setSelectedIndex:u,isLoading:N,handleCommandSelect:t}},{useToken:X}=M,P={workflow:{color:"blue",icon:a.jsx(F,{}),labelKey:"chat.commandSelector.types.workflow"},skill:{color:"green",icon:a.jsx(K,{}),labelKey:"chat.commandSelector.types.skill"},mcp:{color:"purple",icon:a.jsx(D,{}),labelKey:"chat.commandSelector.types.mcp"}},Q=({visible:p,onSelect:k,onCancel:I,searchText:f,onAutoComplete:g})=>{const{token:o}=X(),{t:i}=E(),{containerRef:c,selectedItemRef:R,filteredCommands:d,selectedIndex:u,setSelectedIndex:N,isLoading:j,handleCommandSelect:S}=z({visible:p,searchText:f,onSelect:k,onCancel:I,onAutoComplete:g});if(!p)return null;if(j)return a.jsxs("div",{style:{position:"absolute",bottom:"100%",left:0,right:0,background:o.colorBgContainer,border:`1px solid ${o.colorBorderSecondary}`,borderRadius:o.borderRadiusSM,boxShadow:o.boxShadowSecondary,padding:`${o.paddingSM}px ${o.paddingMD}px`,zIndex:1e3,marginBottom:o.marginXS,textAlign:"center"},children:[a.jsx(T,{size:"small"})," ",i("chat.commandSelector.loading")]});if(d.length===0)return a.jsx("div",{style:{position:"absolute",bottom:"100%",left:0,right:0,background:o.colorBgContainer,border:`1px solid ${o.colorBorderSecondary}`,borderRadius:o.borderRadiusSM,boxShadow:o.boxShadowSecondary,padding:`${o.paddingSM}px ${o.paddingMD}px`,zIndex:1e3,marginBottom:o.marginXS,textAlign:"center",color:o.colorTextSecondary},children:f?i("chat.commandSelector.emptyWithSearch",{search:f}):i("chat.commandSelector.empty")});const h=(t,s)=>{var b,C,w;const e=P[t.type],r=s===u,n=t.type==="mcp"?B(t.name):null,x=t.type==="mcp"?((b=t.metadata)==null?void 0:b.originalName)||(n==null?void 0:n.toolName)||t.displayName||t.name:null,y=t.type==="mcp"&&(((C=t.metadata)==null?void 0:C.serverName)||((w=t.metadata)==null?void 0:w.serverId)||(n==null?void 0:n.serverId))||null;return a.jsxs("div",{ref:r?R:null,className:`command-selector-item ${r?"selected":""}`,onClick:()=>S(t),onMouseEnter:()=>N(s),children:[a.jsxs("div",{className:"command-selector-item-header",children:[a.jsxs("div",{className:"command-selector-item-name",style:{color:o.colorPrimary},children:["/",t.type==="mcp"&&x?x:t.name]}),a.jsxs("div",{style:{display:"flex",gap:o.marginXS},children:[t.type==="mcp"&&y&&a.jsx(L,{color:"processing",children:y}),a.jsxs(L,{color:e.color,children:[e.icon," ",i(e.labelKey)]})]})]}),a.jsx("div",{className:"command-selector-item-description",style:{color:o.colorTextSecondary},children:t.description}),t.type==="mcp"&&y&&a.jsxs("div",{className:"command-selector-item-category",style:{color:o.colorTextTertiary},children:[i("common.server")," ",y]}),t.category&&a.jsxs("div",{className:"command-selector-item-category",style:{color:o.colorTextTertiary},children:[i("common.category")," ",t.category]}),t.tags&&t.tags.length>0&&a.jsx("div",{className:"command-selector-item-tags",children:t.tags.slice(0,3).map(m=>a.jsx(L,{children:m},m))})]},t.id)};return a.jsxs("div",{ref:c,className:"command-selector-container",style:{background:o.colorBgContainer,border:`1px solid ${o.colorBorderSecondary}`,borderRadius:o.borderRadiusSM,boxShadow:o.boxShadowSecondary},children:[a.jsx("div",{style:{padding:`${o.paddingXXS}px ${o.paddingSM}px`,borderBottom:`1px solid ${o.colorBorderSecondary}`,background:o.colorFillQuaternary,fontSize:o.fontSizeSM,color:o.colorTextTertiary},children:i("chat.commandSelector.navigationHint")}),d.map((t,s)=>h(t,s))]})};export{Q as default};