UNPKG

@multi-agent/sdk

Version:

AI Agents SDK for creating, using and sharing intelligent agents

186 lines (148 loc) 68.5 kB
import*as L from"@grpc/grpc-js";import*as W from"@grpc/proto-loader";import{fileURLToPath as se}from"url";import{dirname as oe,join as ae}from"path";var ie=se(import.meta.url),ce=oe(ie),U=l=>{let e=ae(ce,"proto","a2a.proto"),m=W.loadSync(e,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0}),A=L.loadPackageDefinition(m).a2a,v={getAgentCard:(T,u)=>{try{let s=l.getAgentCard(),S={id:s.id,name:s.name,description:s.description,version:s.version,capabilities:s.capabilities,endpoints:{grpc_address:s.endpoints.grpcAddress,grpc_port:s.endpoints.grpcPort,http_address:s.endpoints.httpAddress||"",http_port:s.endpoints.httpPort||0},metadata:{author:s.metadata.author||"",tags:s.metadata.tags||[],supported_languages:s.metadata.supportedLanguages||[],max_concurrent_tasks:s.metadata.maxConcurrentTasks||10,extra:s.metadata.extra||{}}};u(null,S)}catch(s){u({code:L.status.INTERNAL,details:`\u83B7\u53D6Agent\u5361\u7247\u5931\u8D25: ${s.message}`})}},sendTask:async(T,u)=>{try{let{task_id:s,message:S,metadata:R}=T.request,f=await l.createTask(s,S);l.processTaskAsync(f).catch(o=>{console.error(`\u4EFB\u52A1\u5904\u7406\u5931\u8D25 [${s}]:`,o)});let w={task_id:f.id,initial_status:F(f.status),message:"\u4EFB\u52A1\u5DF2\u521B\u5EFA\u5E76\u5F00\u59CB\u5904\u7406"};u(null,w)}catch(s){u({code:L.status.INTERNAL,details:`\u53D1\u9001\u4EFB\u52A1\u5931\u8D25: ${s.message}`})}},getTaskStatus:async(T,u)=>{try{let{task_id:s}=T.request,S=await l.getTaskStatus(s),R={id:S.id,agent_id:S.agentId,from_agent_id:S.fromAgentId||"",status:F(S.status),message:S.message,artifacts:S.artifacts,progress:S.progress,created_at:S.createdAt,updated_at:S.updatedAt,started_at:S.startedAt||0,completed_at:S.completedAt||0,error_message:S.errorMessage||""};u(null,R)}catch(s){u({code:L.status.NOT_FOUND,details:`\u4EFB\u52A1\u4E0D\u5B58\u5728: ${s.message}`})}},streamTaskUpdates:async T=>{try{let{task_id:u,message:s,metadata:S}=T.request,R=l.processTaskStream(u,s);for await(let f of R){let w={task_id:f.taskId,status:F(f.status),progress:f.progress,new_artifacts:f.newArtifacts||[],message:f.message||"",timestamp:f.timestamp};T.write(w)}T.end()}catch(u){T.destroy(new Error(`\u6D41\u5F0F\u4EFB\u52A1\u5904\u7406\u5931\u8D25: ${u.message}`))}},sendMessage:async(T,u)=>{try{let{from_agent_id:s,to_agent_id:S,message:R,correlation_id:f}=T.request,w=await l.handleMessage(s,R),o={success:w,message:w?"\u6D88\u606F\u5904\u7406\u6210\u529F":"\u6D88\u606F\u5904\u7406\u5931\u8D25",message_id:f||`msg_${Date.now()}`};u(null,o)}catch(s){u({code:L.status.INTERNAL,details:`\u6D88\u606F\u53D1\u9001\u5931\u8D25: ${s.message}`})}},healthCheck:(T,u)=>{let s={status:1,message:"Agent\u670D\u52A1\u8FD0\u884C\u6B63\u5E38",details:{timestamp:new Date().toISOString(),uptime:process.uptime().toString()}};u(null,s)}},h=new L.Server;return h.addService(A.A2AAgentService.service,v),{server:h,listen:async(T,u="0.0.0.0")=>new Promise((s,S)=>{let R=`${u}:${T}`;h.bindAsync(R,L.ServerCredentials.createInsecure(),(f,w)=>{if(f){S(new Error(`gRPC\u670D\u52A1\u5668\u542F\u52A8\u5931\u8D25: ${f.message}`));return}h.start(),console.log(`\u{1F5A5}\uFE0F gRPC A2A Server\u5DF2\u542F\u52A8: ${R}`),s()})}),close:()=>new Promise(T=>{h.tryShutdown(()=>{console.log("\u{1F6D1} gRPC A2A Server\u5DF2\u5173\u95ED"),T()})})}},F=l=>({pending:0,running:1,completed:2,failed:3,cancelled:4})[l]||0;import*as j from"@grpc/grpc-js";import*as G from"@grpc/proto-loader";import{fileURLToPath as le}from"url";import{dirname as ge,join as me}from"path";var pe=le(import.meta.url),ue=ge(pe),B=l=>{let e,m;if(l.endpoint){let[w,o]=l.endpoint.split(":");e=w,m=parseInt(o)}else e=l.agentAddress,m=l.agentPort;let{timeout:A=3e4,retryAttempts:v=3,keepaliveTime:h=3e4}=l,T=me(ue,"proto","a2a.proto"),u=G.loadSync(T,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0}),s=j.loadPackageDefinition(u).a2a,S=`${e}:${m}`,R=new s.A2AAgentService(S,j.credentials.createInsecure(),{"grpc.keepalive_time_ms":h,"grpc.keepalive_timeout_ms":5e3,"grpc.keepalive_permit_without_calls":!0,"grpc.http2.max_pings_without_data":0,"grpc.http2.min_time_between_pings_ms":1e4}),f=()=>new Promise((w,o)=>{let r=new Date(Date.now()+A);R.waitForReady(r,i=>{i?o(new Error(`gRPC\u8FDE\u63A5\u5931\u8D25: ${i.message}`)):w()})});return{getAgentCard:async()=>(await f(),new Promise((w,o)=>{let r=new Date(Date.now()+A);R.getAgentCard({},{deadline:r},(i,d)=>{if(i){o(new Error(`\u83B7\u53D6Agent\u5361\u7247\u5931\u8D25: ${i.details||i.message}`));return}let b={id:d.id,name:d.name,description:d.description,version:d.version,capabilities:d.capabilities||[],endpoints:{grpcAddress:d.endpoints?.grpc_address||e,grpcPort:d.endpoints?.grpc_port||m,grpcEndpoint:`${d.endpoints?.grpc_address||e}:${d.endpoints?.grpc_port||m}`,httpAddress:d.endpoints?.http_address,httpPort:d.endpoints?.http_port,httpEndpoint:d.endpoints?.http_address&&d.endpoints?.http_port?`${d.endpoints.http_address}:${d.endpoints.http_port}`:void 0},metadata:{author:d.metadata?.author,tags:d.metadata?.tags||[],supportedLanguages:d.metadata?.supported_languages||[],maxConcurrentTasks:d.metadata?.max_concurrent_tasks||10,...d.metadata?.extra}};w(b)})})),sendTask:async(w,o,r)=>(await f(),new Promise((i,d)=>{let b=new Date(Date.now()+A),g={task_id:w,message:o,metadata:r||{}};R.sendTask(g,{deadline:b},(p,n)=>{if(p){d(new Error(`\u53D1\u9001\u4EFB\u52A1\u5931\u8D25: ${p.details||p.message}`));return}i({taskId:n.task_id,status:H(n.initial_status),message:n.message})})})),getTaskStatus:async w=>(await f(),new Promise((o,r)=>{let i=new Date(Date.now()+A),d={task_id:w};R.getTaskStatus(d,{deadline:i},(b,g)=>{if(b){r(new Error(`\u83B7\u53D6\u4EFB\u52A1\u72B6\u6001\u5931\u8D25: ${b.details||b.message}`));return}let p={id:g.id,agentId:g.agent_id,fromAgentId:g.from_agent_id,status:H(g.status),message:g.message,artifacts:g.artifacts||[],progress:g.progress,createdAt:parseInt(g.created_at),updatedAt:parseInt(g.updated_at),startedAt:g.started_at?parseInt(g.started_at):void 0,completedAt:g.completed_at?parseInt(g.completed_at):void 0,errorMessage:g.error_message};o(p)})})),streamTaskUpdates:async function*(w,o,r){await f();let i={task_id:w,message:o,metadata:r||{}},d=R.streamTaskUpdates(i);try{for await(let b of d)yield{taskId:b.task_id,status:H(b.status),progress:b.progress,newArtifacts:b.new_artifacts,message:b.message,timestamp:parseInt(b.timestamp)}}catch(b){throw new Error(`\u6D41\u5F0F\u4EFB\u52A1\u76D1\u542C\u5931\u8D25: ${b.message}`)}},sendMessage:async(w,o,r,i)=>(await f(),new Promise((d,b)=>{let g=new Date(Date.now()+A),p={from_agent_id:w,to_agent_id:o,message:r,correlation_id:i||`msg_${Date.now()}`};R.sendMessage(p,{deadline:g},(n,c)=>{if(n){b(new Error(`\u53D1\u9001\u6D88\u606F\u5931\u8D25: ${n.details||n.message}`));return}d({success:c.success,messageId:c.message_id,message:c.message})})})),healthCheck:async()=>(await f(),new Promise((w,o)=>{let r=new Date(Date.now()+A);R.healthCheck({},{deadline:r},(i,d)=>{if(i){o(new Error(`\u5065\u5EB7\u68C0\u67E5\u5931\u8D25: ${i.details||i.message}`));return}w({status:de(d.status),message:d.message,details:d.details||{}})})})),close:()=>{R.close(),console.log(`\u{1F50C} \u5DF2\u5173\u95ED\u4E0EAgent\u7684gRPC\u8FDE\u63A5: ${S}`)},getConnectionInfo:()=>({target:S,agentAddress:e,agentPort:m,timeout:A,retryAttempts:v})}},H=l=>({0:"pending",1:"running",2:"completed",3:"failed",4:"cancelled"})[l]||"pending",de=l=>({0:"unknown",1:"serving",2:"not_serving"})[l]||"unknown",J=()=>{let l=new Map,e={discoverAgent:async m=>{try{let[A,v]=m.split(":"),h=parseInt(v);if(!A||isNaN(h))throw new Error(`\u65E0\u6548\u7684endpoint\u683C\u5F0F: ${m}\uFF0C\u5E94\u8BE5\u662F "address:port"`);let T=B({agentAddress:A,agentPort:h}),u=await T.getAgentCard();return l.set(u.id,u),T.close(),u}catch(A){return console.warn(`Agent\u53D1\u73B0\u5931\u8D25 ${m}:`,A.message),null}},discoverAgents:async m=>{let A=m.map(h=>e.discoverAgent(h));return(await Promise.allSettled(A)).filter(h=>h.status==="fulfilled"&&h.value!==null).map(h=>h.value)},getDiscoveredAgents:()=>Array.from(l.values()),findAgentsByCapability:m=>Array.from(l.values()).filter(A=>A.capabilities.includes(m))};return e};import{StateGraph as Pe,Annotation as I}from"@langchain/langgraph";import{SystemMessage as ve}from"@langchain/core/messages";import{StateGraph as ye,Annotation as k,MemorySaver as fe}from"@langchain/langgraph";import{SystemMessage as K}from"@langchain/core/messages";var Ae=k.Root({input:k,goal:k,thoughts:k,actions:k,observations:k,currentThought:k,currentAction:k,currentObservation:k,isComplete:k,needsMoreThinking:k,maxIterations:k,currentIteration:k,finalAnswer:k,errors:k,availableAgents:k,metadata:k}),we=`\u4F60\u662F\u4E00\u4E2A\u4F7F\u7528ReAct(Reasoning and Action)\u6846\u67B6\u7684\u667A\u80FD\u52A9\u624B\u3002 \u76EE\u6807: {goal} \u5F53\u524D\u60C5\u51B5: {input} \u5DF2\u6709\u7684\u601D\u8003\u5386\u53F2: {thoughtHistory} \u5DF2\u6709\u7684\u884C\u52A8\u5386\u53F2: {actionHistory} \u53EF\u7528Agent\u80FD\u529B: {availableAgents} \u8BF7\u6309\u7167ReAct\u6846\u67B6\u8FDB\u884C\u601D\u8003: 1. **\u601D\u8003(Thought)**: \u5206\u6790\u5F53\u524D\u60C5\u51B5\uFF0C\u51B3\u5B9A\u4E0B\u4E00\u6B65\u9700\u8981\u505A\u4EC0\u4E48 2. **\u884C\u52A8(Action)**: \u5982\u679C\u9700\u8981\u59D4\u6D3E\u7ED9\u5176\u4ED6Agent\uFF0C\u8BF7\u9009\u62E9\u5408\u9002\u7684Agent\u548C\u80FD\u529B 3. **\u6700\u7EC8\u7B54\u6848**: \u5982\u679C\u5DF2\u7ECF\u6709\u8DB3\u591F\u4FE1\u606F\uFF0C\u8BF7\u7ED9\u51FA\u6700\u7EC8\u7B54\u6848 \u8BF7\u4EE5\u4EE5\u4E0B\u683C\u5F0F\u56DE\u590D: \u601D\u8003: [\u4F60\u7684\u5206\u6790\u548C\u63A8\u7406\u8FC7\u7A0B] \u884C\u52A8: [\u5982\u679C\u9700\u8981Agent] Agent\u80FD\u529B: \u53C2\u6570 \u6700\u7EC8\u7B54\u6848: [\u5982\u679C\u53EF\u4EE5\u56DE\u7B54] \u4F60\u7684\u7B54\u6848`,he=`\u57FA\u4E8E\u6240\u6709\u7684\u601D\u8003\u548C\u89C2\u5BDF\uFF0C\u8BF7\u63D0\u4F9B\u6700\u7EC8\u7B54\u6848: \u539F\u59CB\u95EE\u9898: {input} \u76EE\u6807: {goal} \u601D\u8003\u8FC7\u7A0B: {thoughts} \u83B7\u5F97\u7684\u4FE1\u606F: {observations} \u8BF7\u7ED9\u51FA\u51C6\u786E\u3001\u5B8C\u6574\u7684\u6700\u7EC8\u7B54\u6848:`,Q=l=>{let{llm:e,agentRegistry:m,maxIterations:A=10,thoughtTemplate:v=we,finalAnswerTemplate:h=he}=l,T=async()=>{if(!m)return[];try{return await m.discoverAgents({status:"online"})}catch(r){return console.warn("Agent\u53D1\u73B0\u5931\u8D25:",r),[]}},u=async(r,i,d)=>{if(!m)throw new Error("Agent\u6CE8\u518C\u4E2D\u5FC3\u672A\u914D\u7F6E");try{let g=(await m.discoverAgents({capabilities:[i],status:"online"})).find(y=>y.id===r||y.agentType===r);if(!g)throw new Error(`\u672A\u627E\u5230Agent: ${r}`);let p=B({agentAddress:g.address,agentPort:g.port}),n=`react_${Date.now()}`,c={type:"capability_request",capability:i,args:d,fromAgent:"react-framework"};await p.sendTask(n,c);let C=await p.getTaskStatus(n),a=0,t=30;for(;(C.status==="pending"||C.status==="running")&&a<t;)await new Promise(y=>setTimeout(y,1e3)),C=await p.getTaskStatus(n),a++;if(C.status==="completed")return C.artifacts?.[0]?.content||C.message;throw new Error(C.errorMessage||"Agent\u4EFB\u52A1\u5931\u8D25")}catch(b){throw new Error(`Agent\u8C03\u7528\u5931\u8D25: ${b instanceof Error?b.message:b}`)}},s=r=>{let i=r.match(/^([\w_]+)\.([\w_]+)\((.*)\)$/);if(!i)return null;let[,d,b,g]=i;try{let p=g.trim()?JSON.parse(g):{};return{id:`action_${Date.now()}`,targetAgent:d,capability:b,args:p,timestamp:new Date().toISOString()}}catch(p){return console.error("\u89E3\u6790Agent\u884C\u52A8\u53C2\u6570\u5931\u8D25:",p),null}},S=async r=>{let i=r.currentIteration||0;if(console.log(`\u{1F914} ReAct\u601D\u8003 - \u7B2C${i+1}\u8F6E`),i>=(r.maxIterations||A))return{isComplete:!0,needsMoreThinking:!1,finalAnswer:"\u5DF2\u8FBE\u5230\u6700\u5927\u8FED\u4EE3\u6B21\u6570\uFF0C\u65E0\u6CD5\u5B8C\u6210\u4EFB\u52A1"};try{let d=(r.thoughts||[]).map((M,x)=>`\u7B2C${x+1}\u8F6E\u601D\u8003: ${M}`).join(` `),b=(r.actions||[]).map((M,x)=>{let _=r.observations?.find(q=>q.actionId===M.id);return`\u7B2C${x+1}\u8F6E\u884C\u52A8: ${M.targetAgent}.${M.capability}(${JSON.stringify(M.args)}) -> ${_?.result||"\u65E0\u7ED3\u679C"}`}).join(` `),p=(await T()).map(M=>`- ${M.agentType}: ${M.capabilities.join(", ")}`).join(` `),n=v.replace("{goal}",r.goal||r.input).replace("{input}",r.input).replace("{thoughtHistory}",d||"\u65E0").replace("{actionHistory}",b||"\u65E0").replace("{availableAgents}",p||"\u65E0\u53EF\u7528Agent"),C=(await e.invoke([new K(n)])).content.toString(),a=C.match(/思考:\s*(.+?)(?=行动:|最终答案:|$)/s),t=C.match(/行动:\s*(.+?)(?=最终答案:|$)/s),y=C.match(/最终答案:\s*(.+)/s),P=a?a[1].trim():"\u7EE7\u7EED\u5206\u6790...",$=[...r.thoughts||[],P];if(y)return{currentThought:P,thoughts:$,finalAnswer:y[1].trim(),isComplete:!0,needsMoreThinking:!1,currentIteration:i+1};if(t){let M=t[1].trim(),x=s(M);if(x)return{currentThought:P,thoughts:$,currentAction:x,needsMoreThinking:!1,currentIteration:i+1}}return{currentThought:P,thoughts:$,needsMoreThinking:!0,currentIteration:i+1}}catch(d){return console.error("\u274C ReAct\u601D\u8003\u5931\u8D25:",d),{errors:[...r.errors||[],`\u601D\u8003\u5931\u8D25: ${d.message}`],needsMoreThinking:!1,isComplete:!0}}},R=async r=>{let i=r.currentAction;if(!i)return{needsMoreThinking:!0};console.log(`\u26A1 ReAct\u884C\u52A8: ${i.targetAgent}.${i.capability}`);try{let d=await u(i.targetAgent,i.capability,i.args),b={id:`action_${Date.now()}`,type:"agent_call",targetAgent:i.targetAgent,capability:i.capability,args:i.args,timestamp:new Date().toISOString()},g={id:`obs_${Date.now()}`,actionId:b.id,result:d,isSuccess:!0,timestamp:new Date().toISOString()};return{actions:[...r.actions||[],b],observations:[...r.observations||[],g],currentObservation:g,needsMoreThinking:!0,currentAction:null}}catch(d){console.error(`\u274C ReAct\u884C\u52A8\u5931\u8D25 [${i.targetAgent}.${i.capability}]:`,d);let b={id:`obs_${Date.now()}`,actionId:`action_${Date.now()}`,result:`\u9519\u8BEF: ${d.message}`,isSuccess:!1,timestamp:new Date().toISOString()};return{observations:[...r.observations||[],b],currentObservation:b,needsMoreThinking:!0,currentAction:null,errors:[...r.errors||[],`\u884C\u52A8\u5931\u8D25: ${d.message}`]}}},f=async r=>{if(console.log("\u{1F4DD} \u751F\u6210\u6700\u7EC8\u7B54\u6848..."),r.finalAnswer)return{isComplete:!0};try{let i=(r.thoughts||[]).join(` `),d=(r.observations||[]).map(n=>`${n.isSuccess?"\u2705":"\u274C"} ${n.result}`).join(` `),b=h.replace("{input}",r.input).replace("{goal}",r.goal||r.input).replace("{thoughts}",i).replace("{observations}",d);return{finalAnswer:(await e.invoke([new K(b)])).content.toString(),isComplete:!0,metadata:{...r.metadata,totalIterations:r.currentIteration,totalThoughts:r.thoughts?.length||0,totalActions:r.actions?.length||0,totalObservations:r.observations?.length||0}}}catch(i){return console.error("\u274C \u751F\u6210\u6700\u7EC8\u7B54\u6848\u5931\u8D25:",i),{finalAnswer:`\u65E0\u6CD5\u751F\u6210\u6700\u7EC8\u7B54\u6848: ${i.message}`,isComplete:!0,errors:[...r.errors||[],`\u6700\u7EC8\u7B54\u6848\u751F\u6210\u5931\u8D25: ${i.message}`]}}},o=new ye(Ae).addNode("think",S).addNode("act",R).addNode("generate_answer",f).addConditionalEdges("think",r=>r.isComplete?"__end__":r.currentAction?"act":r.needsMoreThinking?"think":"generate_answer",{think:"think",act:"act",generate_answer:"generate_answer",__end__:"__end__"}).addConditionalEdges("act",r=>r.needsMoreThinking?"think":"generate_answer",{think:"think",generate_answer:"generate_answer"}).addEdge("generate_answer","__end__").compile({checkpointer:new fe});return{execute:async(r,i,d)=>{console.log("\u{1F680} \u542F\u52A8ReAct\u63A8\u7406\u6846\u67B6..."),console.log(`\u{1F4DD} \u8F93\u5165: ${r}`),console.log(`\u{1F3AF} \u76EE\u6807: ${i||r}`);try{let b={input:r,goal:i||r,thoughts:[],actions:[],observations:[],isComplete:!1,needsMoreThinking:!0,maxIterations:A,currentIteration:0,errors:[],availableAgents:[],metadata:{startTime:new Date().toISOString(),maxIterations:A,agentCount:0}},g=await o.invoke(b,{configurable:d||{thread_id:`react_${Date.now()}`}});return console.log("\u2705 ReAct\u63A8\u7406\u5B8C\u6210"),console.log(`\u{1F4CA} \u6267\u884C\u7EDF\u8BA1: ${g.currentIteration}\u8F6E\u8FED\u4EE3, ${g.actions?.length||0}\u6B21\u884C\u52A8`),console.log(`\u{1F4DD} \u6700\u7EC8\u7B54\u6848: ${g.finalAnswer}`),g}catch(b){throw console.error("\u274C ReAct\u63A8\u7406\u5931\u8D25:",b),new Error(`ReAct\u63A8\u7406\u5931\u8D25: ${b.message}`)}},executeStream:async function*(r,i,d){console.log("\u{1F30A} \u542F\u52A8\u6D41\u5F0FReAct\u63A8\u7406...");let b={input:r,goal:i||r,thoughts:[],actions:[],observations:[],isComplete:!1,needsMoreThinking:!0,maxIterations:A,currentIteration:0,errors:[],availableAgents:[],metadata:{startTime:new Date().toISOString(),maxIterations:A,agentCount:0}},g=await o.stream(b,{configurable:d||{thread_id:`react_stream_${Date.now()}`}});for await(let p of g)for(let[n,c]of Object.entries(p))yield{step:n,state:c}}}};var Te=async(l,e,m)=>{let A=new AbortController,v=setTimeout(()=>A.abort(),m);try{let h=await fetch(l,{...e,signal:A.signal});return clearTimeout(v),h}catch(h){throw clearTimeout(v),h}},V=l=>{let{serverUrl:e,timeout:m=3e4,retryAttempts:A=3,clientInfo:v={name:"AI-Agent-Connectors",version:"1.0.0"}}=l,h=1,T=!1,u={},s=()=>h++,S=async(f,w)=>{if(!e)throw new Error("\u670D\u52A1\u5668URL\u672A\u914D\u7F6E");let o={jsonrpc:"2.0",id:s(),method:f,params:w},r=null;for(let i=1;i<=A;i++)try{let d=await Te(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)},m);if(!d.ok)throw new Error(`HTTP ${d.status}: ${d.statusText}`);let b=await d.json();if(b.error)throw new Error(`MCP\u9519\u8BEF [${b.error.code}]: ${b.error.message}`);return b.result}catch(d){r=d instanceof Error?d:new Error(String(d)),i<A&&(console.warn(`MCP\u8BF7\u6C42\u5931\u8D25\uFF0C\u91CD\u8BD5 ${i}/${A}:`,d.message),await new Promise(b=>setTimeout(b,1e3*i)))}throw new Error(`MCP\u8BF7\u6C42\u6700\u7EC8\u5931\u8D25: ${r?.message}`)},R={initialize:async()=>{let w=await S("initialize",{protocolVersion:"2024-11-05",capabilities:{experimental:{},sampling:{}},clientInfo:v});return u=w.capabilities||{},T=!0,console.log(`\u2705 MCP\u5BA2\u6237\u7AEF\u5DF2\u521D\u59CB\u5316: ${e}`),console.log(`\u{1F4CB} \u670D\u52A1\u5668\u4FE1\u606F: ${w.serverInfo?.name} v${w.serverInfo?.version}`),w},listTools:async()=>(T||await R.initialize(),(await S("tools/list")).tools||[]),callTool:async f=>(T||await R.initialize(),await S("tools/call",{name:f.name,args:f.args})),listResources:async()=>(T||await R.initialize(),u.resources?(await S("resources/list")).resources||[]:[]),readResource:async f=>(T||await R.initialize(),await S("resources/read",{uri:f})),listPrompts:async()=>(T||await R.initialize(),u.prompts?(await S("prompts/list")).prompts||[]:[]),getPrompt:async(f,w)=>(T||await R.initialize(),await S("prompts/get",{name:f,args:w})),ping:async()=>{try{return await S("ping"),!0}catch(f){return console.warn(`MCP\u670D\u52A1\u5668\u5065\u5EB7\u68C0\u67E5\u5931\u8D25: ${f.message}`),!1}},getConnectionInfo:()=>({serverUrl:e,isInitialized:T,serverCapabilities:u,clientInfo:v,timeout:m,retryAttempts:A})};return R},X=()=>{let l=new Map,e=new Map,m={registerServer:async(A,v,h)=>{let T={connectionType:h?.connectionType||"http",serverUrl:v,...h},u=V(T);try{await u.initialize(),l.set(A,u);let s=await u.listTools();e.set(A,s),console.log(`\u2705 MCP\u670D\u52A1\u5668\u5DF2\u6CE8\u518C: ${A} (${s.length}\u4E2A\u5DE5\u5177)`)}catch(s){throw console.error(`\u274C MCP\u670D\u52A1\u5668\u6CE8\u518C\u5931\u8D25 [${A}]:`,s),s}},getAllTools:()=>{let A=[];for(let[v,h]of Array.from(e.entries()))for(let T of h)A.push({...T,serverName:v});return A},callTool:async(A,v)=>{let h;for(let[T,u]of Array.from(e.entries()))if(u.some(s=>s.name===A)){h=l.get(T);break}if(!h)throw new Error(`\u5DE5\u5177\u672A\u627E\u5230: ${A}`);return await h.callTool({name:A,args:v})},findTools:A=>{let v=m.getAllTools(),h=A.toLowerCase();return v.filter(T=>T.name.toLowerCase().includes(h)||T.description.toLowerCase().includes(h))},getRegisteredServers:()=>{let A=[];for(let[v,h]of Array.from(l.entries()))A.push({name:v,toolCount:e.get(v)?.length||0,connectionInfo:h.getConnectionInfo()});return A},healthCheckAll:async()=>{let A={},v=Array.from(l.entries()).map(async([h,T])=>{A[h]=await T.ping()});return await Promise.allSettled(v),A}};return m};var Ce=()=>({a2aToMCP:l=>{if(!l||typeof l!="object")return null;if(l.type==="tool_call"&&l.toolName&&l.args)return{name:l.toolName,args:l.args};if(l.parts){for(let e of l.parts)if(e.type==="tool_call"&&e.content)try{let m=JSON.parse(e.content);if(m.name&&m.args)return m}catch{}}return null},mcpToA2A:l=>l.isError?{role:"assistant",parts:[{type:"text",content:`\u5DE5\u5177\u8C03\u7528\u5931\u8D25: ${l.content[0]?.text||"\u672A\u77E5\u9519\u8BEF"}`,metadata:{isError:!0}}]}:{role:"assistant",parts:l.content.map(m=>({type:m.type,content:m.text||m.data||"",metadata:{mimeType:m.mimeType}}))}}),Y=l=>{let{mcpServers:e,enableCaching:m=!0,cacheTimeout:A=3e5}=l,v=X(),h=Ce(),T=new Map,u=async()=>{console.log("\u{1F50C} \u521D\u59CB\u5316MCP\u670D\u52A1\u5668\u8FDE\u63A5...");let f=e.map(async o=>{try{await v.registerServer(o.name,o.url),console.log(`\u2705 MCP\u670D\u52A1\u5668\u5DF2\u8FDE\u63A5: ${o.name}`)}catch(r){console.error(`\u274C MCP\u670D\u52A1\u5668\u8FDE\u63A5\u5931\u8D25 [${o.name}]:`,r)}});await Promise.allSettled(f);let w=v.getRegisteredServers();console.log(`\u{1F4CA} MCP\u670D\u52A1\u5668\u521D\u59CB\u5316\u5B8C\u6210: ${w.length}/${e.length} \u4E2A\u670D\u52A1\u5668\u5DF2\u8FDE\u63A5`)},s=(f,w)=>`${f}:${JSON.stringify(w)}`,S=f=>{if(!m)return null;let w=T.get(f);return w&&Date.now()-w.timestamp<A?w.result:(w&&T.delete(f),null)},R=(f,w)=>{m&&T.set(f,{result:w,timestamp:Date.now()})};return{initialize:async()=>{await u()},createMCPEnabledAgentCore:f=>({...f,handleMessage:async(w,o)=>{try{if(f.handleMessage&&await f.handleMessage(w,o))return!0;let r=h.a2aToMCP(o);if(!r)return!1;let i=s(r.name,r.args);if(S(i))return console.log(`\u{1F4E6} \u4F7F\u7528\u7F13\u5B58\u7ED3\u679C: ${r.name}`),!0;console.log(`\u{1F527} \u8C03\u7528MCP\u5DE5\u5177: ${r.name}`);let b=await v.callTool(r.name,r.args),g=h.mcpToA2A(b);return R(i,g),console.log(`\u2705 MCP\u5DE5\u5177\u8C03\u7528\u6210\u529F: ${r.name}`),!0}catch(r){return console.error("\u274C MCP\u5DE5\u5177\u8C03\u7528\u5931\u8D25:",r),!1}},processTaskStream:async function*(w,o){if(f.processTaskStream){let i=f.processTaskStream(w,o);for await(let d of i)yield d}let r=h.a2aToMCP(o);if(r)try{yield{taskId:w,status:"running",progress:50,message:`\u6B63\u5728\u8C03\u7528\u5916\u90E8\u5DE5\u5177: ${r.name}`,timestamp:Date.now()};let i=await v.callTool(r.name,r.args),d=h.mcpToA2A(i);yield{taskId:w,status:"completed",progress:100,message:"\u5916\u90E8\u5DE5\u5177\u8C03\u7528\u5B8C\u6210",newArtifacts:[{id:`artifact_${Date.now()}`,type:"data",name:`${r.name}_result`,content:JSON.stringify(d),metadata:{toolName:r.name}}],timestamp:Date.now()}}catch(i){yield{taskId:w,status:"failed",progress:100,message:`\u5916\u90E8\u5DE5\u5177\u8C03\u7528\u5931\u8D25: ${i.message}`,timestamp:Date.now()}}}}),getAvailableTools:()=>v.getAllTools(),searchTools:f=>v.findTools(f),healthCheck:async()=>await v.healthCheckAll(),getStats:()=>{let f=v.getRegisteredServers(),w=v.getAllTools();return{mcpServers:f.length,totalTools:w.length,cacheSize:T.size,cacheEnabled:m,toolsByServer:f.map(o=>({name:o.name,toolCount:o.toolCount,isConnected:o.connectionInfo.isInitialized}))}},clearCache:()=>{T.clear(),console.log("\u{1F9F9} \u534F\u8BAE\u6865\u63A5\u7F13\u5B58\u5DF2\u6E05\u7406")}}};var Z=(l={})=>{let{mcpServers:e=[],localTools:m=new Map,defaultTimeout:A=3e4,enableCaching:v=!0,maxConcurrentCalls:h=10}=l,T=Y({mcpServers:e,enableCaching:v}),u=new Map,s={totalCalls:0,successfulCalls:0,failedCalls:0,averageExecutionTime:0,callsByTool:{},callsByCategory:{},errorsByTool:{}},S=[],R=new Map,f=()=>{let g=[["webcontainer_run_command",{name:"webcontainer_run_command",description:"\u5728WebContainer\u4E2D\u6267\u884Cshell\u547D\u4EE4",parameters:{type:"object",properties:{command:{type:"string",description:"\u8981\u6267\u884C\u7684shell\u547D\u4EE4"},cwd:{type:"string",description:"\u5DE5\u4F5C\u76EE\u5F55\uFF08\u53EF\u9009\uFF09"},timeout:{type:"number",description:"\u8D85\u65F6\u65F6\u95F4(ms)\uFF0C\u9ED8\u8BA430\u79D2"}},required:["command"]},toolType:"local",autonomyLevel:"medium",category:"webcontainer",priority:1,isLocal:!0},async p=>{let n=Date.now();try{return{success:!0,result:{stdout:`\u6A21\u62DF\u6267\u884C\u547D\u4EE4: ${p.command}`,stderr:"",exitCode:0},toolName:"webcontainer_run_command",args:p,executionTime:Date.now()-n,metadata:{toolType:"local",autonomyLevel:"medium",executionTime:Date.now()-n,cwd:p.cwd||"/",command:p.command}}}catch(c){return{success:!1,error:c.message,toolName:"webcontainer_run_command",args:p,executionTime:Date.now()-n,metadata:{toolType:"local",autonomyLevel:"medium",executionTime:Date.now()-n}}}}],["webcontainer_write_file",{name:"webcontainer_write_file",description:"\u5728WebContainer\u4E2D\u5199\u5165\u6587\u4EF6",parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84"},content:{type:"string",description:"\u6587\u4EF6\u5185\u5BB9"},encoding:{type:"string",description:"\u6587\u4EF6\u7F16\u7801\uFF0C\u9ED8\u8BA4utf-8",enum:["utf-8","base64","binary"]}},required:["path","content"]},toolType:"local",autonomyLevel:"medium",category:"webcontainer",priority:1,isLocal:!0},async p=>{let n=Date.now();try{return{success:!0,result:{path:p.path,size:p.content.length,written:!0},toolName:"webcontainer_write_file",args:p,executionTime:Date.now()-n}}catch(c){return{success:!1,error:c.message,toolName:"webcontainer_write_file",args:p,executionTime:Date.now()-n}}}],["webcontainer_read_file",{name:"webcontainer_read_file",description:"\u4ECEWebContainer\u4E2D\u8BFB\u53D6\u6587\u4EF6",parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84"},encoding:{type:"string",description:"\u6587\u4EF6\u7F16\u7801\uFF0C\u9ED8\u8BA4utf-8",enum:["utf-8","base64","binary"]}},required:["path"]},toolType:"local",autonomyLevel:"medium",category:"webcontainer",priority:1,isLocal:!0},async p=>{let n=Date.now();try{return{success:!0,result:{path:p.path,content:`\u6A21\u62DF\u6587\u4EF6\u5185\u5BB9: ${p.path}`,size:1024,encoding:p.encoding||"utf-8"},toolName:"webcontainer_read_file",args:p,executionTime:Date.now()-n,metadata:{toolType:"local",autonomyLevel:"medium",executionTime:Date.now()-n}}}catch(c){return{success:!1,error:c.message,toolName:"webcontainer_read_file",args:p,executionTime:Date.now()-n,metadata:{toolType:"local",autonomyLevel:"medium",executionTime:Date.now()-n}}}}]];g.forEach(([p,n,c])=>{u.set(p,n),m.set(p,c)}),console.log(`\u{1F527} \u5DF2\u6CE8\u518C${g.length}\u4E2AWebContainer\u5DE5\u5177`)},w=()=>{let g=[["web_search",{name:"web_search",description:"\u5728\u7F51\u7EDC\u4E0A\u641C\u7D22\u4FE1\u606F",parameters:{type:"object",properties:{query:{type:"string",description:"\u641C\u7D22\u67E5\u8BE2\u5B57\u7B26\u4E32"},limit:{type:"number",description:"\u8FD4\u56DE\u7ED3\u679C\u6570\u91CF\u9650\u5236\uFF0C\u9ED8\u8BA410"},language:{type:"string",description:"\u641C\u7D22\u8BED\u8A00\uFF0C\u9ED8\u8BA4zh-CN",enum:["zh-CN","en-US","auto"]}},required:["query"]},toolType:"local",autonomyLevel:"medium",category:"search",priority:2,isLocal:!0},async p=>{let n=Date.now();try{let c=[{title:`\u641C\u7D22\u7ED3\u679C1 - ${p.query}`,url:"https://example.com/1",snippet:"\u8FD9\u662F\u641C\u7D22\u7ED3\u679C\u7684\u6458\u8981..."},{title:`\u641C\u7D22\u7ED3\u679C2 - ${p.query}`,url:"https://example.com/2",snippet:"\u8FD9\u662F\u53E6\u4E00\u4E2A\u641C\u7D22\u7ED3\u679C\u7684\u6458\u8981..."}];return{success:!0,result:{query:p.query,results:c.slice(0,p.limit||10),totalResults:c.length},toolName:"web_search",args:p,executionTime:Date.now()-n}}catch(c){return{success:!1,error:c.message,toolName:"web_search",args:p,executionTime:Date.now()-n}}}]];g.forEach(([p,n,c])=>{u.set(p,n),m.set(p,c)}),console.log(`\u{1F527} \u5DF2\u6CE8\u518C${g.length}\u4E2A\u641C\u7D22\u5DE5\u5177`)},o=()=>{let g=[["langfuse_trace",{name:"langfuse_trace",description:"\u8BB0\u5F55AI\u64CD\u4F5C\u8FFD\u8E2A\u4FE1\u606F\u5230Langfuse",parameters:{type:"object",properties:{name:{type:"string",description:"\u8FFD\u8E2A\u540D\u79F0"},data:{type:"object",description:"\u8FFD\u8E2A\u6570\u636E"},sessionId:{type:"string",description:"\u4F1A\u8BDDID\uFF08\u53EF\u9009\uFF09"}},required:["name","data"]},toolType:"local",autonomyLevel:"medium",category:"langfuse",priority:3,isLocal:!0},async p=>{let n=Date.now();try{let c=`trace_${Date.now()}`;return console.log(`\u{1F4CA} Langfuse\u8FFD\u8E2A: ${p.name}`,p.data),{success:!0,result:{traceId:c,name:p.name,recorded:!0},toolName:"langfuse_trace",args:p,executionTime:Date.now()-n}}catch(c){return{success:!1,error:c.message,toolName:"langfuse_trace",args:p,executionTime:Date.now()-n}}}]];g.forEach(([p,n,c])=>{u.set(p,n),m.set(p,c)}),console.log(`\u{1F527} \u5DF2\u6CE8\u518C${g.length}\u4E2ALangfuse\u5DE5\u5177`)},r=g=>{s.totalCalls++,g.success?s.successfulCalls++:(s.failedCalls++,s.errorsByTool[g.toolName]=(s.errorsByTool[g.toolName]||0)+1),s.callsByTool[g.toolName]=(s.callsByTool[g.toolName]||0)+1;let p=u.get(g.toolName);p?.category&&(s.callsByCategory[p.category]=(s.callsByCategory[p.category]||0)+1),g.executionTime&&(S.push(g.executionTime),s.averageExecutionTime=S.reduce((n,c)=>n+c,0)/S.length)},i=async(g,p,n={})=>{let c=m.get(g);if(!c)return{success:!1,error:`\u672C\u5730\u5DE5\u5177\u4E0D\u5B58\u5728: ${g}`,toolName:g,args:p};try{return await Promise.race([c(p),new Promise((a,t)=>setTimeout(()=>t(new Error("\u5DE5\u5177\u6267\u884C\u8D85\u65F6")),n.timeout||A))])}catch(C){return{success:!1,error:C.message,toolName:g,args:p}}},d=async(g,p,n={})=>{try{return T.getAvailableTools().find(a=>a.name===g)?{success:!0,result:{message:`MCP\u5DE5\u5177${g}\u6267\u884C\u5B8C\u6210`,data:p},toolName:g,args:p,executionTime:100}:{success:!1,error:`MCP\u5DE5\u5177\u4E0D\u5B58\u5728: ${g}`,toolName:g,args:p}}catch(c){return{success:!1,error:c.message,toolName:g,args:p}}},b={initialize:async()=>{console.log("\u{1F680} \u521D\u59CB\u5316\u5DE5\u5177\u8C03\u7528\u62BD\u8C61\u5C42..."),await T.initialize(),f(),w(),o(),console.log(`\u2705 \u5DE5\u5177\u8C03\u7528\u5C42\u521D\u59CB\u5316\u5B8C\u6210\uFF0C\u5171\u6CE8\u518C${u.size}\u4E2A\u5DE5\u5177`)},registerLocalTool:(g,p,n)=>{u.set(g,{...p,isLocal:!0}),m.set(g,n),console.log(`\u{1F527} \u5DF2\u6CE8\u518C\u672C\u5730\u5DE5\u5177: ${g}`)},callTool:async(g,p,n={})=>{let c=`call_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,C=Date.now();if(R.size>=h)return{success:!1,error:"\u8FBE\u5230\u6700\u5927\u5E76\u53D1\u8C03\u7528\u9650\u5236",toolName:g,args:p};R.set(c,{toolName:g,startTime:C,context:n});try{console.log(`\u{1F4DE} \u8C03\u7528\u5DE5\u5177: ${g}`,p);let a;return u.get(g)?.isLocal?a=await i(g,p,n):a=await d(g,p,n),r(a),a.success?console.log(`\u2705 \u5DE5\u5177\u8C03\u7528\u6210\u529F: ${g}`):console.log(`\u274C \u5DE5\u5177\u8C03\u7528\u5931\u8D25: ${g} - ${a.error}`),a}finally{R.delete(c)}},getAllTools:()=>{let g=Array.from(u.values()),n=T.getAvailableTools().map(c=>({name:c.name,description:c.description,parameters:c.inputSchema,toolType:"mcp",autonomyLevel:"low",category:"general",priority:10,isLocal:!1}));return[...g,...n].sort((c,C)=>(c.priority||10)-(C.priority||10))},searchTools:g=>{let p=b.getAllTools(),n=g.toLowerCase();return p.filter(c=>c.name.toLowerCase().includes(n)||c.description.toLowerCase().includes(n)||c.category?.toLowerCase().includes(n))},getExecutionStats:()=>({...s}),healthCheck:async()=>{let g=await T.healthCheck(),n=b.getAllTools().filter(a=>!a.isLocal),c=s.totalCalls>0?s.successfulCalls/s.totalCalls:1,C="healthy";return c<.5?C="unhealthy":(c<.8||g.unhealthyServers&&typeof g.unhealthyServers=="number"&&g.unhealthyServers>0)&&(C="degraded"),{status:C,details:{localTools:u.size,mcpTools:n.length,mcpServers:g,activeCalls:R.size,totalCalls:s.totalCalls,successRate:c}}},cleanup:()=>{R.clear(),s={totalCalls:0,successfulCalls:0,failedCalls:0,averageExecutionTime:0,callsByTool:{},callsByCategory:{},errorsByTool:{}},S.length=0,console.log("\u{1F9F9} \u5DE5\u5177\u8C03\u7528\u5C42\u8D44\u6E90\u5DF2\u6E05\u7406")},getProtocolBridge:()=>T};return b};import{MemorySaver as Se}from"@langchain/langgraph";var ee=l=>{let{maxSessions:e=1e3,sessionTimeout:m=1440*60*1e3,enablePersistence:A=!0,enableCompression:v=!0,maxMemorySize:h=100*1024*1024,persistenceInterval:T=6e4}=l,u=new Map,s=new Map,S=new Map,R=null,f=null,w=(t="")=>`${t}${Date.now()}_${Math.random().toString(36).substring(2,9)}`,o=t=>new Blob([JSON.stringify(t)]).size,r=async t=>{if(!v)return{data:JSON.stringify(t),compressed:!1};try{let y=JSON.stringify(t),P=y.replace(/\\s+/g," ").trim();return{data:P,compressed:P.length<y.length}}catch(y){return console.error("\u6570\u636E\u538B\u7F29\u5931\u8D25:",y),{data:JSON.stringify(t),compressed:!1}}},i=async(t,y)=>{try{return JSON.parse(t)}catch(P){return console.error("\u6570\u636E\u89E3\u538B\u5931\u8D25:",P),null}},d=t=>Date.now()>new Date(t.expiresAt).getTime(),b=t=>{let y=u.get(t);if(y){let P=new Date().toISOString(),$=new Date(Date.now()+m).toISOString();u.set(t,{...y,lastAccessedAt:P,expiresAt:$})}},g=()=>{let t=u.size,y=Date.now();u.forEach(($,M)=>{y>new Date($.expiresAt).getTime()&&(u.delete(M),s.forEach((x,_)=>{x.sessionId===M&&s.delete(_)}),S.forEach((x,_)=>{_.includes(M)&&S.delete(_)}),console.log(`\u{1F9F9} \u6E05\u7406\u8FC7\u671F\u4F1A\u8BDD: ${M}`))});let P=t-u.size;return P>0&&console.log(`\u{1F9F9} \u6E05\u7406\u4E86${P}\u4E2A\u8FC7\u671F\u4F1A\u8BDD`),P},p=()=>{let t=Array.from(s.values()).reduce((y,P)=>y+P.size,0);if(t>h){console.log(`\u26A0\uFE0F \u5185\u5B58\u4F7F\u7528\u8D85\u9650: ${(t/1024/1024).toFixed(2)}MB`);let y=Array.from(u.values()).sort((M,x)=>new Date(M.lastAccessedAt).getTime()-new Date(x.lastAccessedAt).getTime()),P=0,$=0;for(let M of y){if(t-P<=h*.8)break;s.forEach((x,_)=>{x.sessionId===M.sessionId&&(P+=x.size,s.delete(_))}),u.delete(M.sessionId),$++}console.log(`\u{1F9F9} \u5185\u5B58\u538B\u529B\u6E05\u7406: \u5220\u9664${$}\u4E2A\u4F1A\u8BDD\uFF0C\u91CA\u653E${(P/1024/1024).toFixed(2)}MB`)}},n=()=>{R||(R=setInterval(()=>{g(),p()},6e4),console.log("\u{1F504} \u542F\u52A8\u5185\u5B58\u6E05\u7406\u5B9A\u65F6\u5668"))},c=()=>{R&&(clearInterval(R),R=null,console.log("\u23F9\uFE0F \u505C\u6B62\u5185\u5B58\u6E05\u7406\u5B9A\u65F6\u5668"))},C=()=>({saveCheckpoint:async(t,y)=>{let P=`checkpoint_${t}_${Date.now()}`,{data:$,compressed:M}=await r(y);return S.set(P,{sessionId:t,checkpoint:$,compressed:M,timestamp:new Date().toISOString()}),P},getCheckpoint:async t=>{let y=S.get(t);return y?await i(y.checkpoint,y.compressed):null},listCheckpoints:t=>{let y=[];return S.forEach((P,$)=>{P.sessionId===t&&y.push({id:$,timestamp:P.timestamp})}),y.sort((P,$)=>new Date($.timestamp).getTime()-new Date(P.timestamp).getTime())},deleteCheckpoint:t=>S.delete(t)}),a={initialize:()=>{console.log("\u{1F680} \u521D\u59CB\u5316\u5185\u5B58\u7BA1\u7406\u7CFB\u7EDF..."),n(),console.log("\u2705 \u5185\u5B58\u7BA1\u7406\u7CFB\u7EDF\u5DF2\u542F\u52A8")},createSession:(t,y,P={})=>{let $=w("session_"),M=new Date().toISOString(),x=new Date(Date.now()+m).toISOString(),_={sessionId:$,agentId:t,userId:y,createdAt:M,lastAccessedAt:M,expiresAt:x,isActive:!0,metadata:P,stateSize:0};return u.set($,_),console.log(`\u{1F4DD} \u521B\u5EFA\u4F1A\u8BDD: ${$} [Agent: ${t}]`),$},getSession:t=>{let y=u.get(t);return y?d(y)?(u.delete(t),null):(b(t),y):null},storeMemoryItem:async(t,y,P,$={})=>{if(!a.getSession(t))throw new Error(`\u4F1A\u8BDD\u4E0D\u5B58\u5728: ${t}`);let x=w("mem_"),{data:_,compressed:q}=await r(P),E=o(_),D={id:x,sessionId:t,type:y,data:_,timestamp:new Date().toISOString(),size:E,compressed:q,ttl:$.ttl,metadata:$.metadata};s.set(x,D);let O=u.get(t);return u.set(t,{...O,stateSize:O.stateSize+E}),console.log(`\u{1F4BE} \u5B58\u50A8\u5185\u5B58\u9879: ${x} [${y}] ${(E/1024).toFixed(2)}KB`),x},getMemoryItem:async t=>{let y=s.get(t);return y?y.ttl&&Date.now()-new Date(y.timestamp).getTime()>y.ttl?(s.delete(t),null):await i(y.data,y.compressed):null},getSessionMemoryItems:(t,y)=>{let P=Array.from(s.values()).filter($=>$.sessionId===t);return y?P.filter($=>$.type===y):P.sort(($,M)=>new Date(M.timestamp).getTime()-new Date($.timestamp).getTime())},deleteMemoryItem:t=>{let y=s.get(t);if(!y)return!1;s.delete(t);let P=u.get(y.sessionId);return P&&u.set(y.sessionId,{...P,stateSize:Math.max(0,P.stateSize-y.size)}),console.log(`\u{1F5D1}\uFE0F \u5220\u9664\u5185\u5B58\u9879: ${t}`),!0},updateMemoryItem:async(t,y)=>{let P=s.get(t);if(!P)return!1;let{data:$,compressed:M}=await r(y),x=o($),_=P.size,q={...P,data:$,compressed:M,size:x,timestamp:new Date().toISOString()};s.set(t,q);let E=u.get(P.sessionId);return E&&u.set(P.sessionId,{...E,stateSize:E.stateSize-_+x}),console.log(`\u{1F504} \u66F4\u65B0\u5185\u5B58\u9879: ${t}`),!0},clearSession:t=>{if(!u.get(t))return!1;let P=0;s.forEach((M,x)=>{M.sessionId===t&&(s.delete(x),P++)});let $=0;return S.forEach((M,x)=>{x.includes(t)&&(S.delete(x),$++)}),u.delete(t),console.log(`\u{1F9F9} \u6E05\u7406\u4F1A\u8BDD: ${t} (${P}\u4E2A\u5185\u5B58\u9879, ${$}\u4E2A\u68C0\u67E5\u70B9)`),!0},getMemoryStats:()=>{let t=Array.from(u.values()),y=t.filter(D=>!d(D)),P=t.filter(D=>d(D)),$=Array.from(s.values()),M=$.reduce((D,O)=>D+O.size,0),x=t.length>0?t.reduce((D,O)=>D+O.stateSize,0)/t.length:0,_=$.reduce((D,O)=>(D[O.type]=(D[O.type]||0)+1,D),{}),q=$.filter(D=>D.compressed),E=$.length>0?q.length/$.length:0;return{totalSessions:t.length,activeSessions:y.length,expiredSessions:P.length,totalMemoryUsage:M,averageSessionSize:x,itemsByType:_,compressionRatio:E}},getCheckpointManager:()=>C(),getMemorySaver:()=>new Se,exportSessionData:async t=>{let y=a.getSession(t);if(!y)return null;let P=a.getSessionMemoryItems(t),$=await Promise.all(P.map(async M=>({id:M.id,type:M.type,data:await a.getMemoryItem(M.id),timestamp:M.timestamp,metadata:M.metadata})));return{session:y,items:$,exportedAt:new Date().toISOString()}},importSessionData:async t=>{let{session:y,items:P}=t,$=a.createSession(y.agentId,y.userId,y.metadata);for(let M of P)await a.storeMemoryItem($,M.type,M.data,{metadata:M.metadata});return console.log(`\u{1F4E5} \u5BFC\u5165\u4F1A\u8BDD\u6570\u636E: ${$} (${P.length}\u4E2A\u5185\u5B58\u9879)`),$},shutdown:()=>{console.log("\u{1F6D1} \u5173\u95ED\u5185\u5B58\u7BA1\u7406\u7CFB\u7EDF..."),c(),f&&(clearInterval(f),f=null),console.log("\u2705 \u5185\u5B58\u7BA1\u7406\u7CFB\u7EDF\u5DF2\u5173\u95ED")}};return a};var be=I.Root({agentType:I,agentId:I,sessionId:I,currentTask:I,taskContext:I,analysisResults:I,workingMemory:I,generatedArtifacts:I,collaborationData:I,sharedContext:I,isComplete:I,needsCollaboration:I,errors:I,metadata:I}),$e={analyst:{systemPrompt:`\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u9700\u6C42\u5206\u6790\u5E08\u3002\u4F60\u7684\u804C\u8D23\u662F\uFF1A \u6838\u5FC3\u80FD\u529B\uFF1A - \u6DF1\u5EA6\u7406\u89E3\u7528\u6237\u9700\u6C42\u548C\u4E1A\u52A1\u76EE\u6807 - \u8BC6\u522B\u529F\u80FD\u6027\u548C\u975E\u529F\u80FD\u6027\u9700\u6C42 - \u8BC4\u4F30\u6280\u672F\u53EF\u884C\u6027\u548C\u8D44\u6E90\u9700\u6C42 - \u521B\u5EFA\u7528\u6237\u6545\u4E8B\u548C\u9A8C\u6536\u6807\u51C6 - \u98CE\u9669\u8BC6\u522B\u548C\u9884\u8B66 \u5DE5\u4F5C\u6D41\u7A0B\uFF1A 1. \u4ED4\u7EC6\u5206\u6790\u7528\u6237\u8F93\u5165\uFF0C\u63D0\u53D6\u5173\u952E\u9700\u6C42 2. \u8BC6\u522B\u9690\u542B\u9700\u6C42\u548C\u8FB9\u754C\u6761\u4EF6 3. \u8BC4\u4F30\u6280\u672F\u590D\u6742\u5EA6\u548C\u5B9E\u73B0\u96BE\u5EA6 4. \u63D0\u4F9B\u53EF\u884C\u6027\u5EFA\u8BAE\u548C\u98CE\u9669\u8BC4\u4F30 5. \u8F93\u51FA\u7ED3\u6784\u5316\u7684\u9700\u6C42\u6587\u6863 \u8F93\u51FA\u683C\u5F0F\uFF1A - \u529F\u80FD\u9700\u6C42\u5217\u8868 - \u975E\u529F\u80FD\u9700\u6C42\uFF08\u6027\u80FD\u3001\u5B89\u5168\u3001\u53EF\u7528\u6027\u7B49\uFF09 - \u6280\u672F\u7EA6\u675F\u548C\u9650\u5236 - \u98CE\u9669\u8BC4\u4F30\u548C\u5EFA\u8BAE - \u9A8C\u6536\u6807\u51C6`,taskPrompt:`\u8BF7\u5206\u6790\u4EE5\u4E0B\u7528\u6237\u9700\u6C42\uFF1A {taskDescription} \u8BF7\u63D0\u4F9B\u8BE6\u7EC6\u7684\u9700\u6C42\u5206\u6790\u62A5\u544A\uFF0C\u5305\u62EC\uFF1A 1. \u6838\u5FC3\u529F\u80FD\u9700\u6C42\u5206\u89E3 2. \u6280\u672F\u53EF\u884C\u6027\u8BC4\u4F30 3. \u6F5C\u5728\u98CE\u9669\u548C\u6311\u6218 4. \u5B9E\u73B0\u5EFA\u8BAE\u548C\u4F18\u5148\u7EA7 5. \u9A8C\u6536\u6807\u51C6\u5B9A\u4E49`},architect:{systemPrompt:`\u4F60\u662F\u4E00\u4E2A\u8D44\u6DF1\u7684\u89E3\u51B3\u65B9\u6848\u67B6\u6784\u5E08\u3002\u4F60\u7684\u804C\u8D23\u662F\uFF1A \u6838\u5FC3\u80FD\u529B\uFF1A - \u7CFB\u7EDF\u67B6\u6784\u8BBE\u8BA1\u548C\u6280\u672F\u9009\u578B - \u6A21\u5757\u5212\u5206\u548C\u63A5\u53E3\u8BBE\u8BA1 - \u6027\u80FD\u4F18\u5316\u548C\u6269\u5C55\u6027\u89C4\u5212 - \u5B89\u5168\u67B6\u6784\u548C\u90E8\u7F72\u65B9\u6848 - \u6280\u672F\u503A\u52A1\u7BA1\u7406 \u5DE5\u4F5C\u6D41\u7A0B\uFF1A 1. \u57FA\u4E8E\u9700\u6C42\u5206\u6790\u8BBE\u8BA1\u6574\u4F53\u67B6\u6784 2. \u9009\u62E9\u5408\u9002\u7684\u6280\u672F\u6808\u548C\u6846\u67B6 3. \u8BBE\u8BA1\u6A21\u5757\u7ED3\u6784\u548C\u6570\u636E\u6D41 4. \u89C4\u5212\u90E8\u7F72\u548C\u8FD0\u7EF4\u65B9\u6848 5. \u8F93\u51FA\u6280\u672F\u65B9\u6848\u6587\u6863 \u8F93\u51FA\u683C\u5F0F\uFF1A - \u7CFB\u7EDF\u67B6\u6784\u56FE\u548C\u8BF4\u660E - \u6280\u672F\u6808\u9009\u62E9\u7406\u7531 - \u6A21\u5757\u5212\u5206\u548C\u804C\u8D23 - \u63A5\u53E3\u8BBE\u8BA1\u89C4\u8303 - \u90E8\u7F72\u548C\u6269\u5C55\u65B9\u6848`,taskPrompt:`\u57FA\u4E8E\u4EE5\u4E0B\u9700\u6C42\u5206\u6790\u7ED3\u679C\u8BBE\u8BA1\u6280\u672F\u65B9\u6848\uFF1A \u9700\u6C42\u5206\u6790\uFF1A{requirementAnalysis} \u4EFB\u52A1\u63CF\u8FF0\uFF1A{taskDescription} \u8BF7\u63D0\u4F9B\u5B8C\u6574\u7684\u6280\u672F\u67B6\u6784\u65B9\u6848\uFF1A 1. \u7CFB\u7EDF\u6574\u4F53\u67B6\u6784\u8BBE\u8BA1 2. \u6280\u672F\u6808\u9009\u62E9\u548C\u7406\u7531 3. \u6838\u5FC3\u6A21\u5757\u5212\u5206 4. \u5173\u952E\u63A5\u53E3\u8BBE\u8BA1 5. \u90E8\u7F72\u548C\u6269\u5C55\u7B56\u7565`},coder:{systemPrompt:`\u4F60\u662F\u4E00\u4E2A\u9AD8\u7EA7\u8F6F\u4EF6\u5DE5\u7A0B\u5E08\u3002\u4F60\u7684\u804C\u8D23\u662F\uFF1A \u6838\u5FC3\u80FD\u529B\uFF1A - \u9AD8\u8D28\u91CF\u4EE3\u7801\u7F16\u5199\u548C\u91CD\u6784 - \u591A\u79CD\u7F16\u7A0B\u8BED\u8A00\u548C\u6846\u67B6 - \u4EE3\u7801\u67B6\u6784\u548C\u8BBE\u8BA1\u6A21\u5F0F - \u8C03\u8BD5\u548C\u6027\u80FD\u4F18\u5316 - \u6587\u6863\u7F16\u5199\u548C\u7EF4\u62A4 \u5DE5\u4F5C\u6D41\u7A0B\uFF1A 1. \u7406\u89E3\u6280\u672F\u65B9\u6848\u548C\u5B9E\u73B0\u8981\u6C42 2. \u7F16\u5199\u6E05\u6670\u3001\u53EF\u7EF4\u62A4\u7684\u4EE3\u7801 3. \u5B9E\u73B0\u5FC5\u8981\u7684\u6D4B\u8BD5\u8986\u76D6 4. \u4F18\u5316\u6027\u80FD\u548C\u4EE3\u7801\u8D28\u91CF 5. \u751F\u6210\u5FC5\u8981\u7684\u6587\u6863 \u8F93\u51FA\u683C\u5F0F\uFF1A - \u5B8C\u6574\u7684\u53EF\u6267\u884C\u4EE3\u7801 - \u5FC5\u8981\u7684\u914D\u7F6E\u6587\u4EF6 - \u5355\u5143\u6D4B\u8BD5\u4EE3\u7801 - README\u548C\u4F7F\u7528\u6587\u6863 - \u90E8\u7F72\u811A\u672C\uFF08\u5982\u9700\u8981\uFF09`,taskPrompt:`\u6839\u636E\u4EE5\u4E0B\u6280\u672F\u65B9\u6848\u5B9E\u73B0\u4EE3\u7801\uFF1A \u6280\u672F\u65B9\u6848\uFF1A{technicalDesign} \u4EFB\u52A1\u63CF\u8FF0\uFF1A{taskDescription} \u8BF7\u5B9E\u73B0\u9AD8\u8D28\u91CF\u7684\u4EE3\u7801\uFF1A 1. \u6838\u5FC3\u529F\u80FD\u5B9E\u73B0 2. \u9519\u8BEF\u5904\u7406\u548C\u8FB9\u754C\u60C5\u51B5 3. \u5355\u5143\u6D4B\u8BD5\u8986\u76D6 4. \u6027\u80FD\u4F18\u5316\u8003\u8651 5. \u6E05\u6670\u7684\u6CE8\u91CA\u548C\u6587\u6863`},checker:{systemPrompt:`\u4F60\u662F\u4E00\u4E2A\u8D28\u91CF\u4FDD\u8BC1\u4E13\u5BB6\u3002\u4F60\u7684\u804C\u8D23\u662F\uFF1A \u6838\u5FC3\u80FD\u529B\uFF1A - \u4EE3\u7801\u5BA1\u67E5\u548C\u8D28\u91CF\u68C0\u67E5 - \u6D4B\u8BD5\u7528\u4F8B\u8BBE\u8BA1\u548C\u6267\u884C - \u6027\u80FD\u6D4B\u8BD5\u548C\u5B89\u5168\u5BA1\u8BA1 - \u6587\u6863\u5B8C\u6574\u6027\u68C0\u67E5 - \u6700\u4F73\u5B9E\u8DF5\u9A8C\u8BC1 \u5DE5\u4F5C\u6D41\u7A0B\uFF1A 1. \u5168\u9762\u5BA1\u67E5\u4EE3\u7801\u8D28\u91CF\u548C\u67B6\u6784 2. \u9A8C\u8BC1\u529F\u80FD\u5B8C\u6574\u6027\u548C\u6B63\u786E\u6027 3. \u68C0\u67E5\u5B89\u5168\u6027\u548C\u6027\u80FD\u95EE\u9898 4. \u8BC4\u4F30\u6587\u6863\u548C\u53EF\u7EF4\u62A4\u6027 5. \u63D0\u4F9B\u6539\u8FDB\u5EFA\u8BAE\u548C\u8D28\u91CF\u62A5\u544A \u8F93\u51FA\u683C\u5F0F\uFF1A - \u8D28\u91CF\u68C0\u67E5\u62A5\u544A - \u95EE\u9898\u6E05\u5355\u548C\u4E25\u91CD\u7EA7\u522B - \u6539\u8FDB\u5EFA\u8BAE\u548C\u6700\u4F73\u5B9E\u8DF5 - \u6D4B\u8BD5\u7ED3\u679C\u548C\u8986\u76D6\u7387 - \u90E8\u7F72\u5C31\u7EEA\u5EA6\u8BC4\u4F30`,taskPrompt:`\u8BF7\u5BA1\u67E5\u4EE5\u4E0B\u5B9E\u73B0\u6210\u679C\uFF1A \u5B9E\u73B0\u4EE3\u7801\uFF1A{implementationCode} \u6280\u672F\u6587\u6863\uFF1A{documentation} \u4EFB\u52A1\u63CF\u8FF0\uFF1A{taskDescription} \u8BF7\u63D0\u4F9B\u5168\u9762\u7684\u8D28\u91CF\u68C0\u67E5\u62A5\u544A\uFF1A 1. \u4EE3\u7801\u8D28\u91CF\u548C\u67B6\u6784\u8BC4\u4F30 2. \u529F\u80FD\u5B8C\u6574\u6027\u9A8C\u8BC1 3. \u5B89\u5168\u548C\u6027\u80FD\u5206\u6790 4. \u6587\u6863\u5B8C\u6574\u6027\u68C0\u67E5 5. \u90E8\u7F72\u5C31\u7EEA\u5EA6\u8BC4\u4F30`}},te=l=>{let{agentType:e,llm:m,grpcPort:A,capabilities:v,toolConfigs:h={},memoryConfig:T={},prompts:u}=l,s=`${e}_agent_${Date.now()}`,S=u||$e[e],R=Z({enableCaching:!0,maxConcurrentCalls:3,defaultTimeout:3e4}),f=ee({maxSessions:50,sessionTimeout:7200*1e3,enablePersistence:!0,enableCompression:!0,maxMemorySize:20*1024*1024,persistenceInterval:6e4,...T}),w=Q({llm:m,maxIterations:10,thoughtTemplate:S.systemPrompt}),o=async a=>{console.log(`\u{1F50D} ${e}\u5206\u6790\u4EFB\u52A1...`);let t=a.currentTask;if(!t)return{errors:["\u4EFB\u52A1\u4FE1\u606F\u7F3A\u5931"]};try{let y=S.taskPrompt.replace("{taskDescription}",t.message.description||"").replace("{requirementAnalysis}",a.taskContext?.requirementAnalysis||"").replace("{technicalDesign}",a.taskContext?.technicalDesign||"").replace("{implementationCode}",a.taskContext?.implementationCode||"").replace("{documentation}",a.taskContext?.documentation||""),$=(await m.invoke([new ve(y)])).content.toString();return{analysisResults:{type:e,content:$,timestamp:new Date().toISOString()},workingMemory:{...a.workingMemory,analysisComplete:!0,analysisContent:$}}}catch(y){return console.error(`\u274C ${e}\u4EFB\u52A1\u5206\u6790\u5931\u8D25:`,y),{errors:[...a.errors||[],`\u4EFB\u52A1\u5206\u6790\u5931\u8D25: ${y.message}`]}}},r=async a=>{console.log(`\u2699\uFE0F ${e}\u6267\u884C\u4E13\u4E1A\u5DE5\u4F5C...`);try{let t=[];switch(e){case"analyst":t=await i(a);break;case"architect":t=await d(a);break;case"coder":t=await b(a);break;case"checker":t=await g(a);break}return{generatedArtifacts:t,workingMemory:{...a.workingMemory,workComplete:!0,artifactCount:t.length}}}catch(t){return console.error(`\u274C ${e}\u4E13\u4E1A\u5DE5\u4F5C\u5931\u8D25:`,t),{errors:[...a.errors||[],`\u4E13\u4E1A\u5DE5\u4F5C\u5931\u8D25: ${t.message}`]}}},i=async a=>{let t=a.analysisResults?.content||"";return[{id:`requirement_analysis_${Date.now()}`,type:"document",name:"requirement_analysis.md",content:`# \u9700\u6C42\u5206\u6790\u62A5\u544A ${t}`,metadata:{agentType:"analyst",timestamp:new Date().toISOString()}},{id:`feasibility_assessment_${Date.now()}`,type:"document",name:"feasibility_assessment.md",content:`# \u53EF\u884C\u6027\u8BC4\u4F30 \u57FA\u4E8E\u9700\u6C42\u5206\u6790\u7684\u6280\u672F\u53EF\u884C\u6027\u8BC4\u4F30...`,metadata:{agentType:"analyst",timestamp:new Date().toISOString()}}]},d=async a=>{let t=a.analysisResults?.content||"";return[{id:`system_architecture_${Date.now()}`,type:"document",name:"system_architecture.md",content:`# \u7CFB\u7EDF\u67B6\u6784\u8BBE\u8BA1 ${t}`,metadata:{agentType:"architect",timestamp:new Date().toISOString()}},{id:`tech_stack_${Date.now()}`,type:"document",name:"tech_stack.md",content:`# \u6280\u672F\u6808\u9009\u62E9 \u8BE6\u7EC6\u7684\u6280\u672F\u6808\u9009\u62E9\u548C\u7406\u7531...`,metadata:{agentType:"architect",timestamp:new Date().toISOString()}}]},b=async a=>{let t=a.analysisResults?.content||"",y=`// Generated by ${e} agent // Based on: ${a.currentTask?.message.description} export const exampleFunction = () => { console.log('Implementation based on requirements'); return 'success'; }; export default exampleFunction;`;return[{id:`main_implementation_${Date.now()}`,type:"code",name:"main.ts",content:y,metadata:{agentType:"coder",language:"typescript",timestamp:new Date().toISOString()}},{id:`test_file_${Date.now()}`,type:"code",name:"main.test.ts",content:`import { exampleFunction } from './main'; describe('exampleFunction', () => { test('should return success', () => { expect(exampleFunction()).toBe('success'); }); });`,metadata:{agentType:"coder",language:"typescript",testFile:!0,timestamp:new Date().toISOString()}}]},g=async a=>{let t=a.analysisResults?.content||"";return[{id:`quality_report_${Date.now()}`,type:"document",name:"quality_report.md",content:`# \u8D28\u91CF\u68C0\u67E5\u62A5\u544A ${t}`,metadata:{agentType:"checker",timestamp:new Date().toISOString()}},{id:`test_results_${Date.now()}`,type:"document",name:"test_results.md",content:`# \u6D4B\u8BD5\u7ED3\u679C \u81EA\u52A8\u5316\u6D4B\u8BD5\u6267\u884C\u7ED3\u679C\u548C\u8986\u76D6\u7387\u62A5\u544A...`,metadata:{agentType:"checker",timestamp:new Date().toISOString()}}]},n=new Pe(be).addNode("analyze_task",o).addNode("perform_work",r).addNode("finalize",async a=>({isComplete:!0,metadata:{...a.metadata,completedAt:new Date().toISOString(),artifactCount:a.generatedArtifacts?.length||0}})).setEntryPoint("analyze_task").addEdge("analyze_task","perform_work").addEdge("perform_work","finalize").addEdge("finalize","__end__").compile({checkpointer:f.getMemorySaver()}),c={getAgentCard:()=>({id:s,name:`${e.charAt(0).toUpperCase()+e.slice(1)} Agent`,description:S.systemPrompt.substring(0,200)+"...",version:"1.0.0",capabilities:v,endpoints:{grpcAddress:"localhost",grpcPort:A},metadata:{a