UNPKG

@multi-agent/a2a

Version:

AI Agents SDK for creating, using and sharing intelligent agents

180 lines (144 loc) 69.7 kB
var ye=Object.create;var B=Object.defineProperty;var fe=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,he=Object.prototype.hasOwnProperty;var Te=(o,e)=>{for(var g in e)B(o,g,{get:e[g],enumerable:!0})},X=(o,e,g,y)=>{if(e&&typeof e=="object"||typeof e=="function")for(let S of Ae(e))!he.call(o,S)&&S!==g&&B(o,S,{get:()=>e[S],enumerable:!(y=fe(e,S))||y.enumerable});return o};var j=(o,e,g)=>(g=o!=null?ye(we(o)):{},X(e||!o||!o.__esModule?B(g,"default",{value:o,enumerable:!0}):g,o)),Ce=o=>X(B({},"__esModule",{value:!0}),o);var Oe={};Te(Oe,{createA2AClient:()=>U,createA2AServer:()=>O,createAgent:()=>de,createAgentDiscovery:()=>W,createAgentRegistry:()=>V,createExpertWithTools:()=>qe,createIndependentExpertAgent:()=>pe,discoverFromMultipleAddresses:()=>Ne,registerAgent:()=>ze});module.exports=Ce(Oe);var Se=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,I=Se();var z=j(require("@grpc/grpc-js"),1),Y=j(require("@grpc/proto-loader"),1),Z=require("url"),F=require("path"),Pe=(0,Z.fileURLToPath)(I),ve=(0,F.dirname)(Pe),O=o=>{let e=(0,F.join)(ve,"proto","a2a.proto"),g=Y.loadSync(e,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0}),y=z.loadPackageDefinition(g).a2a,S={getAgentCard:(T,u)=>{try{let s=o.getAgentCard(),P={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,P)}catch(s){u({code:z.status.INTERNAL,details:`\u83B7\u53D6Agent\u5361\u7247\u5931\u8D25: ${s.message}`})}},sendTask:async(T,u)=>{try{let{task_id:s,message:P,metadata:R}=T.request,A=await o.createTask(s,P);o.processTaskAsync(A).catch(a=>{console.error(`\u4EFB\u52A1\u5904\u7406\u5931\u8D25 [${s}]:`,a)});let w={task_id:A.id,initial_status:G(A.status),message:"\u4EFB\u52A1\u5DF2\u521B\u5EFA\u5E76\u5F00\u59CB\u5904\u7406"};u(null,w)}catch(s){u({code:z.status.INTERNAL,details:`\u53D1\u9001\u4EFB\u52A1\u5931\u8D25: ${s.message}`})}},getTaskStatus:async(T,u)=>{try{let{task_id:s}=T.request,P=await o.getTaskStatus(s),R={id:P.id,agent_id:P.agentId,from_agent_id:P.fromAgentId||"",status:G(P.status),message:P.message,artifacts:P.artifacts,progress:P.progress,created_at:P.createdAt,updated_at:P.updatedAt,started_at:P.startedAt||0,completed_at:P.completedAt||0,error_message:P.errorMessage||""};u(null,R)}catch(s){u({code:z.status.NOT_FOUND,details:`\u4EFB\u52A1\u4E0D\u5B58\u5728: ${s.message}`})}},sendTaskStream:async T=>{try{let{task_id:u,message:s,metadata:P}=T.request,R=o.processTaskStream(u,s);for await(let A of R){let w={task_id:A.taskId,status:G(A.status),progress:A.progress,new_artifacts:A.newArtifacts||[],message:A.message||"",timestamp:A.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:P,message:R,correlation_id:A}=T.request,w=await o.handleMessage(s,R),a={success:w,message:w?"\u6D88\u606F\u5904\u7406\u6210\u529F":"\u6D88\u606F\u5904\u7406\u5931\u8D25",message_id:A||`msg_${Date.now()}`};u(null,a)}catch(s){u({code:z.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 z.Server;return h.addService(y.A2AAgentService.service,S),{server:h,listen:async(T,u="0.0.0.0")=>new Promise((s,P)=>{let R=`${u}:${T}`;h.bindAsync(R,z.ServerCredentials.createInsecure(),(A,w)=>{if(A){P(new Error(`gRPC\u670D\u52A1\u5668\u542F\u52A8\u5931\u8D25: ${A.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()})})}},G=o=>({pending:0,running:1,completed:2,failed:3,cancelled:4})[o]||0;var H=j(require("@grpc/grpc-js"),1),ee=j(require("@grpc/proto-loader"),1),te=require("url"),J=require("path"),be=(0,te.fileURLToPath)(I),$e=(0,J.dirname)(be),U=o=>{let e,g;if(o.endpoint){let[w,a]=o.endpoint.split(":");e=w,g=parseInt(a)}else e=o.agentAddress,g=o.agentPort;let{timeout:y=3e4,retryAttempts:S=3,keepaliveTime:h=3e4}=o,T=(0,J.join)($e,"proto","a2a.proto"),u=ee.loadSync(T,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0}),s=H.loadPackageDefinition(u).a2a,P=`${e}:${g}`,R=new s.A2AAgentService(P,H.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}),A=()=>new Promise((w,a)=>{let r=new Date(Date.now()+y);R.waitForReady(r,c=>{c?a(new Error(`gRPC\u8FDE\u63A5\u5931\u8D25: ${c.message}`)):w()})});return{getAgentCard:async()=>(await A(),new Promise((w,a)=>{let r=new Date(Date.now()+y);R.getAgentCard({},{deadline:r},(c,d)=>{if(c){a(new Error(`\u83B7\u53D6Agent\u5361\u7247\u5931\u8D25: ${c.details||c.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||g,grpcEndpoint:`${d.endpoints?.grpc_address||e}:${d.endpoints?.grpc_port||g}`,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,a,r)=>(await A(),new Promise((c,d)=>{let b=new Date(Date.now()+y),m={task_id:w,message:a,metadata:r||{}};R.sendTask(m,{deadline:b},(p,n)=>{if(p){d(new Error(`\u53D1\u9001\u4EFB\u52A1\u5931\u8D25: ${p.details||p.message}`));return}c({taskId:n.task_id,status:K(n.initial_status),message:n.message})})})),getTaskStatus:async w=>(await A(),new Promise((a,r)=>{let c=new Date(Date.now()+y),d={task_id:w};R.getTaskStatus(d,{deadline:c},(b,m)=>{if(b){r(new Error(`\u83B7\u53D6\u4EFB\u52A1\u72B6\u6001\u5931\u8D25: ${b.details||b.message}`));return}let p={id:m.id,agentId:m.agent_id,fromAgentId:m.from_agent_id,status:K(m.status),message:m.message,artifacts:m.artifacts||[],progress:m.progress,createdAt:parseInt(m.created_at),updatedAt:parseInt(m.updated_at),startedAt:m.started_at?parseInt(m.started_at):void 0,completedAt:m.completed_at?parseInt(m.completed_at):void 0,errorMessage:m.error_message};a(p)})})),sendTaskStream:async function*(w,a,r){await A();let c={task_id:w,message:a,metadata:r||{}},d=R.sendTaskStream(c);try{for await(let b of d)yield{taskId:b.task_id,status:K(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,a,r,c)=>(await A(),new Promise((d,b)=>{let m=new Date(Date.now()+y),p={from_agent_id:w,to_agent_id:a,message:r,correlation_id:c||`msg_${Date.now()}`};R.sendMessage(p,{deadline:m},(n,l)=>{if(n){b(new Error(`\u53D1\u9001\u6D88\u606F\u5931\u8D25: ${n.details||n.message}`));return}d({success:l.success,messageId:l.message_id,message:l.message})})})),healthCheck:async()=>(await A(),new Promise((w,a)=>{let r=new Date(Date.now()+y);R.healthCheck({},{deadline:r},(c,d)=>{if(c){a(new Error(`\u5065\u5EB7\u68C0\u67E5\u5931\u8D25: ${c.details||c.message}`));return}w({status:Re(d.status),message:d.message,details:d.details||{}})})})),close:()=>{R.close(),console.log(`\u{1F50C} \u5DF2\u5173\u95ED\u4E0EAgent\u7684gRPC\u8FDE\u63A5: ${P}`)},getConnectionInfo:()=>({target:P,agentAddress:e,agentPort:g,timeout:y,retryAttempts:S})}},K=o=>({0:"pending",1:"running",2:"completed",3:"failed",4:"cancelled"})[o]||"pending",Re=o=>({0:"unknown",1:"serving",2:"not_serving"})[o]||"unknown",W=()=>{let o=new Map,e={discoverAgent:async g=>{try{let[y,S]=g.split(":"),h=parseInt(S);if(!y||isNaN(h))throw new Error(`\u65E0\u6548\u7684endpoint\u683C\u5F0F: ${g}\uFF0C\u5E94\u8BE5\u662F "address:port"`);let T=U({agentAddress:y,agentPort:h}),u=await T.getAgentCard();return o.set(u.id,u),T.close(),u}catch(y){return console.warn(`Agent\u53D1\u73B0\u5931\u8D25 ${g}:`,y.message),null}},discoverAgents:async g=>{let y=g.map(h=>e.discoverAgent(h));return(await Promise.allSettled(y)).filter(h=>h.status==="fulfilled"&&h.value!==null).map(h=>h.value)},getDiscoveredAgents:()=>Array.from(o.values()),findAgentsByCapability:g=>Array.from(o.values()).filter(y=>y.capabilities.includes(g))};return e};var D=require("@langchain/langgraph"),le=require("@langchain/core/messages");var _=require("@langchain/langgraph"),Q=require("@langchain/core/messages");var Me=_.Annotation.Root({input:_.Annotation,goal:_.Annotation,thoughts:_.Annotation,actions:_.Annotation,observations:_.Annotation,currentThought:_.Annotation,currentAction:_.Annotation,currentObservation:_.Annotation,isComplete:_.Annotation,needsMoreThinking:_.Annotation,maxIterations:_.Annotation,currentIteration:_.Annotation,finalAnswer:_.Annotation,errors:_.Annotation,availableAgents:_.Annotation,metadata:_.Annotation}),xe=`\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`,_e=`\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:`,ne=o=>{let{llm:e,agentRegistry:g,maxIterations:y=10,thoughtTemplate:S=xe,finalAnswerTemplate:h=_e}=o,T=async()=>{if(!g)return[];try{return await g.discoverAgents({status:"online"})}catch(r){return console.warn("Agent\u53D1\u73B0\u5931\u8D25:",r),[]}},u=async(r,c,d)=>{if(!g)throw new Error("Agent\u6CE8\u518C\u4E2D\u5FC3\u672A\u914D\u7F6E");try{let m=(await g.discoverAgents({capabilities:[c],status:"online"})).find(f=>f.id===r||f.agentType===r);if(!m)throw new Error(`\u672A\u627E\u5230Agent: ${r}`);let p=U({agentAddress:m.address,agentPort:m.port}),n=`react_${Date.now()}`,l={type:"capability_request",capability:c,args:d,fromAgent:"react-framework"};await p.sendTask(n,l);let C=await p.getTaskStatus(n),i=0,t=30;for(;(C.status==="pending"||C.status==="running")&&i<t;)await new Promise(f=>setTimeout(f,1e3)),C=await p.getTaskStatus(n),i++;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 c=r.match(/^([\w_]+)\.([\w_]+)\((.*)\)$/);if(!c)return null;let[,d,b,m]=c;try{let p=m.trim()?JSON.parse(m):{};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}},P=async r=>{let c=r.currentIteration||0;if(console.log(`\u{1F914} ReAct\u601D\u8003 - \u7B2C${c+1}\u8F6E`),c>=(r.maxIterations||y))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 k=r.observations?.find(N=>N.actionId===M.id);return`\u7B2C${x+1}\u8F6E\u884C\u52A8: ${M.targetAgent}.${M.capability}(${JSON.stringify(M.args)}) -> ${k?.result||"\u65E0\u7ED3\u679C"}`}).join(` `),p=(await T()).map(M=>`- ${M.agentType}: ${M.capabilities.join(", ")}`).join(` `),n=S.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 Q.SystemMessage(n)])).content.toString(),i=C.match(/思考:\s*(.+?)(?=行动:|最终答案:|$)/s),t=C.match(/行动:\s*(.+?)(?=最终答案:|$)/s),f=C.match(/最终答案:\s*(.+)/s),v=i?i[1].trim():"\u7EE7\u7EED\u5206\u6790...",$=[...r.thoughts||[],v];if(f)return{currentThought:v,thoughts:$,finalAnswer:f[1].trim(),isComplete:!0,needsMoreThinking:!1,currentIteration:c+1};if(t){let M=t[1].trim(),x=s(M);if(x)return{currentThought:v,thoughts:$,currentAction:x,needsMoreThinking:!1,currentIteration:c+1}}return{currentThought:v,thoughts:$,needsMoreThinking:!0,currentIteration:c+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 c=r.currentAction;if(!c)return{needsMoreThinking:!0};console.log(`\u26A1 ReAct\u884C\u52A8: ${c.targetAgent}.${c.capability}`);try{let d=await u(c.targetAgent,c.capability,c.args),b={id:`action_${Date.now()}`,type:"agent_call",targetAgent:c.targetAgent,capability:c.capability,args:c.args,timestamp:new Date().toISOString()},m={id:`obs_${Date.now()}`,actionId:b.id,result:d,isSuccess:!0,timestamp:new Date().toISOString()};return{actions:[...r.actions||[],b],observations:[...r.observations||[],m],currentObservation:m,needsMoreThinking:!0,currentAction:null}}catch(d){console.error(`\u274C ReAct\u884C\u52A8\u5931\u8D25 [${c.targetAgent}.${c.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}`]}}},A=async r=>{if(console.log("\u{1F4DD} \u751F\u6210\u6700\u7EC8\u7B54\u6848..."),r.finalAnswer)return{isComplete:!0};try{let c=(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}",c).replace("{observations}",d);return{finalAnswer:(await e.invoke([new Q.SystemMessage(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(c){return console.error("\u274C \u751F\u6210\u6700\u7EC8\u7B54\u6848\u5931\u8D25:",c),{finalAnswer:`\u65E0\u6CD5\u751F\u6210\u6700\u7EC8\u7B54\u6848: ${c.message}`,isComplete:!0,errors:[...r.errors||[],`\u6700\u7EC8\u7B54\u6848\u751F\u6210\u5931\u8D25: ${c.message}`]}}},a=new _.StateGraph(Me).addNode("think",P).addNode("act",R).addNode("generate_answer",A).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 _.MemorySaver});return{execute:async(r,c,d)=>{console.log("\u{1F680} \u542F\u52A8ReAct\u63A8\u7406\u6846\u67B6..."),console.log(`\u{1F4DD} \u8F93\u5165: ${r}`),console.log(`\u{1F3AF} \u76EE\u6807: ${c||r}`);try{let b={input:r,goal:c||r,thoughts:[],actions:[],observations:[],isComplete:!1,needsMoreThinking:!0,maxIterations:y,currentIteration:0,errors:[],availableAgents:[],metadata:{startTime:new Date().toISOString(),maxIterations:y,agentCount:0}},m=await a.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: ${m.currentIteration}\u8F6E\u8FED\u4EE3, ${m.actions?.length||0}\u6B21\u884C\u52A8`),console.log(`\u{1F4DD} \u6700\u7EC8\u7B54\u6848: ${m.finalAnswer}`),m}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,c,d){console.log("\u{1F30A} \u542F\u52A8\u6D41\u5F0FReAct\u63A8\u7406...");let b={input:r,goal:c||r,thoughts:[],actions:[],observations:[],isComplete:!1,needsMoreThinking:!0,maxIterations:y,currentIteration:0,errors:[],availableAgents:[],metadata:{startTime:new Date().toISOString(),maxIterations:y,agentCount:0}},m=await a.stream(b,{configurable:d||{thread_id:`react_stream_${Date.now()}`}});for await(let p of m)for(let[n,l]of Object.entries(p))yield{step:n,state:l}}}};var ke=async(o,e,g)=>{let y=new AbortController,S=setTimeout(()=>y.abort(),g);try{let h=await fetch(o,{...e,signal:y.signal});return clearTimeout(S),h}catch(h){throw clearTimeout(S),h}},re=o=>{let{serverUrl:e,timeout:g=3e4,retryAttempts:y=3,clientInfo:S={name:"AI-Agent-Connectors",version:"1.0.0"}}=o,h=1,T=!1,u={},s=()=>h++,P=async(A,w)=>{if(!e)throw new Error("\u670D\u52A1\u5668URL\u672A\u914D\u7F6E");let a={jsonrpc:"2.0",id:s(),method:A,params:w},r=null;for(let c=1;c<=y;c++)try{let d=await ke(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)},g);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)),c<y&&(console.warn(`MCP\u8BF7\u6C42\u5931\u8D25\uFF0C\u91CD\u8BD5 ${c}/${y}:`,d.message),await new Promise(b=>setTimeout(b,1e3*c)))}throw new Error(`MCP\u8BF7\u6C42\u6700\u7EC8\u5931\u8D25: ${r?.message}`)},R={initialize:async()=>{let w=await P("initialize",{protocolVersion:"2024-11-05",capabilities:{experimental:{},sampling:{}},clientInfo:S});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 P("tools/list")).tools||[]),callTool:async A=>(T||await R.initialize(),await P("tools/call",{name:A.name,args:A.args})),listResources:async()=>(T||await R.initialize(),u.resources?(await P("resources/list")).resources||[]:[]),readResource:async A=>(T||await R.initialize(),await P("resources/read",{uri:A})),listPrompts:async()=>(T||await R.initialize(),u.prompts?(await P("prompts/list")).prompts||[]:[]),getPrompt:async(A,w)=>(T||await R.initialize(),await P("prompts/get",{name:A,args:w})),ping:async()=>{try{return await P("ping"),!0}catch(A){return console.warn(`MCP\u670D\u52A1\u5668\u5065\u5EB7\u68C0\u67E5\u5931\u8D25: ${A.message}`),!1}},getConnectionInfo:()=>({serverUrl:e,isInitialized:T,serverCapabilities:u,clientInfo:S,timeout:g,retryAttempts:y})};return R},se=()=>{let o=new Map,e=new Map,g={registerServer:async(y,S,h)=>{let T={connectionType:h?.connectionType||"http",serverUrl:S,...h},u=re(T);try{await u.initialize(),o.set(y,u);let s=await u.listTools();e.set(y,s),console.log(`\u2705 MCP\u670D\u52A1\u5668\u5DF2\u6CE8\u518C: ${y} (${s.length}\u4E2A\u5DE5\u5177)`)}catch(s){throw console.error(`\u274C MCP\u670D\u52A1\u5668\u6CE8\u518C\u5931\u8D25 [${y}]:`,s),s}},getAllTools:()=>{let y=[];for(let[S,h]of Array.from(e.entries()))for(let T of h)y.push({...T,serverName:S});return y},callTool:async(y,S)=>{let h;for(let[T,u]of Array.from(e.entries()))if(u.some(s=>s.name===y)){h=o.get(T);break}if(!h)throw new Error(`\u5DE5\u5177\u672A\u627E\u5230: ${y}`);return await h.callTool({name:y,args:S})},findTools:y=>{let S=g.getAllTools(),h=y.toLowerCase();return S.filter(T=>T.name.toLowerCase().includes(h)||T.description.toLowerCase().includes(h))},getRegisteredServers:()=>{let y=[];for(let[S,h]of Array.from(o.entries()))y.push({name:S,toolCount:e.get(S)?.length||0,connectionInfo:h.getConnectionInfo()});return y},healthCheckAll:async()=>{let y={},S=Array.from(o.entries()).map(async([h,T])=>{y[h]=await T.ping()});return await Promise.allSettled(S),y}};return g};var De=()=>({a2aToMCP:o=>{if(!o||typeof o!="object")return null;if(o.type==="tool_call"&&o.toolName&&o.args)return{name:o.toolName,args:o.args};if(o.parts){for(let e of o.parts)if(e.type==="tool_call"&&e.content)try{let g=JSON.parse(e.content);if(g.name&&g.args)return g}catch{}}return null},mcpToA2A:o=>o.isError?{role:"assistant",parts:[{type:"text",content:`\u5DE5\u5177\u8C03\u7528\u5931\u8D25: ${o.content[0]?.text||"\u672A\u77E5\u9519\u8BEF"}`,metadata:{isError:!0}}]}:{role:"assistant",parts:o.content.map(g=>({type:g.type,content:g.text||g.data||"",metadata:{mimeType:g.mimeType}}))}}),oe=o=>{let{mcpServers:e,enableCaching:g=!0,cacheTimeout:y=3e5}=o,S=se(),h=De(),T=new Map,u=async()=>{console.log("\u{1F50C} \u521D\u59CB\u5316MCP\u670D\u52A1\u5668\u8FDE\u63A5...");let A=e.map(async a=>{try{await S.registerServer(a.name,a.url),console.log(`\u2705 MCP\u670D\u52A1\u5668\u5DF2\u8FDE\u63A5: ${a.name}`)}catch(r){console.error(`\u274C MCP\u670D\u52A1\u5668\u8FDE\u63A5\u5931\u8D25 [${a.name}]:`,r)}});await Promise.allSettled(A);let w=S.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=(A,w)=>`${A}:${JSON.stringify(w)}`,P=A=>{if(!g)return null;let w=T.get(A);return w&&Date.now()-w.timestamp<y?w.result:(w&&T.delete(A),null)},R=(A,w)=>{g&&T.set(A,{result:w,timestamp:Date.now()})};return{initialize:async()=>{await u()},createMCPEnabledAgentCore:A=>({...A,handleMessage:async(w,a)=>{try{if(A.handleMessage&&await A.handleMessage(w,a))return!0;let r=h.a2aToMCP(a);if(!r)return!1;let c=s(r.name,r.args);if(P(c))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 S.callTool(r.name,r.args),m=h.mcpToA2A(b);return R(c,m),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,a){if(A.processTaskStream){let c=A.processTaskStream(w,a);for await(let d of c)yield d}let r=h.a2aToMCP(a);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 c=await S.callTool(r.name,r.args),d=h.mcpToA2A(c);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(c){yield{taskId:w,status:"failed",progress:100,message:`\u5916\u90E8\u5DE5\u5177\u8C03\u7528\u5931\u8D25: ${c.message}`,timestamp:Date.now()}}}}),getAvailableTools:()=>S.getAllTools(),searchTools:A=>S.findTools(A),healthCheck:async()=>await S.healthCheckAll(),getStats:()=>{let A=S.getRegisteredServers(),w=S.getAllTools();return{mcpServers:A.length,totalTools:w.length,cacheSize:T.size,cacheEnabled:g,toolsByServer:A.map(a=>({name:a.name,toolCount:a.toolCount,isConnected:a.connectionInfo.isInitialized}))}},clearCache:()=>{T.clear(),console.log("\u{1F9F9} \u534F\u8BAE\u6865\u63A5\u7F13\u5B58\u5DF2\u6E05\u7406")}}};var ae=(o={})=>{let{mcpServers:e=[],localTools:g=new Map,defaultTimeout:y=3e4,enableCaching:S=!0,maxConcurrentCalls:h=10}=o,T=oe({mcpServers:e,enableCaching:S}),u=new Map,s={totalCalls:0,successfulCalls:0,failedCalls:0,averageExecutionTime:0,callsByTool:{},callsByCategory:{},errorsByTool:{}},P=[],R=new Map,A=()=>{let m=[["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(l){return{success:!1,error:l.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(l){return{success:!1,error:l.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(l){return{success:!1,error:l.message,toolName:"webcontainer_read_file",args:p,executionTime:Date.now()-n,metadata:{toolType:"local",autonomyLevel:"medium",executionTime:Date.now()-n}}}}]];m.forEach(([p,n,l])=>{u.set(p,n),g.set(p,l)}),console.log(`\u{1F527} \u5DF2\u6CE8\u518C${m.length}\u4E2AWebContainer\u5DE5\u5177`)},w=()=>{let m=[["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 l=[{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:l.slice(0,p.limit||10),totalResults:l.length},toolName:"web_search",args:p,executionTime:Date.now()-n}}catch(l){return{success:!1,error:l.message,toolName:"web_search",args:p,executionTime:Date.now()-n}}}]];m.forEach(([p,n,l])=>{u.set(p,n),g.set(p,l)}),console.log(`\u{1F527} \u5DF2\u6CE8\u518C${m.length}\u4E2A\u641C\u7D22\u5DE5\u5177`)},a=()=>{let m=[["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 l=`trace_${Date.now()}`;return console.log(`\u{1F4CA} Langfuse\u8FFD\u8E2A: ${p.name}`,p.data),{success:!0,result:{traceId:l,name:p.name,recorded:!0},toolName:"langfuse_trace",args:p,executionTime:Date.now()-n}}catch(l){return{success:!1,error:l.message,toolName:"langfuse_trace",args:p,executionTime:Date.now()-n}}}]];m.forEach(([p,n,l])=>{u.set(p,n),g.set(p,l)}),console.log(`\u{1F527} \u5DF2\u6CE8\u518C${m.length}\u4E2ALangfuse\u5DE5\u5177`)},r=m=>{s.totalCalls++,m.success?s.successfulCalls++:(s.failedCalls++,s.errorsByTool[m.toolName]=(s.errorsByTool[m.toolName]||0)+1),s.callsByTool[m.toolName]=(s.callsByTool[m.toolName]||0)+1;let p=u.get(m.toolName);p?.category&&(s.callsByCategory[p.category]=(s.callsByCategory[p.category]||0)+1),m.executionTime&&(P.push(m.executionTime),s.averageExecutionTime=P.reduce((n,l)=>n+l,0)/P.length)},c=async(m,p,n={})=>{let l=g.get(m);if(!l)return{success:!1,error:`\u672C\u5730\u5DE5\u5177\u4E0D\u5B58\u5728: ${m}`,toolName:m,args:p};try{return await Promise.race([l(p),new Promise((i,t)=>setTimeout(()=>t(new Error("\u5DE5\u5177\u6267\u884C\u8D85\u65F6")),n.timeout||y))])}catch(C){return{success:!1,error:C.message,toolName:m,args:p}}},d=async(m,p,n={})=>{try{return T.getAvailableTools().find(i=>i.name===m)?{success:!0,result:{message:`MCP\u5DE5\u5177${m}\u6267\u884C\u5B8C\u6210`,data:p},toolName:m,args:p,executionTime:100}:{success:!1,error:`MCP\u5DE5\u5177\u4E0D\u5B58\u5728: ${m}`,toolName:m,args:p}}catch(l){return{success:!1,error:l.message,toolName:m,args:p}}},b={initialize:async()=>{console.log("\u{1F680} \u521D\u59CB\u5316\u5DE5\u5177\u8C03\u7528\u62BD\u8C61\u5C42..."),await T.initialize(),A(),w(),a(),console.log(`\u2705 \u5DE5\u5177\u8C03\u7528\u5C42\u521D\u59CB\u5316\u5B8C\u6210\uFF0C\u5171\u6CE8\u518C${u.size}\u4E2A\u5DE5\u5177`)},registerLocalTool:(m,p,n)=>{u.set(m,{...p,isLocal:!0}),g.set(m,n),console.log(`\u{1F527} \u5DF2\u6CE8\u518C\u672C\u5730\u5DE5\u5177: ${m}`)},callTool:async(m,p,n={})=>{let l=`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:m,args:p};R.set(l,{toolName:m,startTime:C,context:n});try{console.log(`\u{1F4DE} \u8C03\u7528\u5DE5\u5177: ${m}`,p);let i;return u.get(m)?.isLocal?i=await c(m,p,n):i=await d(m,p,n),r(i),i.success?console.log(`\u2705 \u5DE5\u5177\u8C03\u7528\u6210\u529F: ${m}`):console.log(`\u274C \u5DE5\u5177\u8C03\u7528\u5931\u8D25: ${m} - ${i.error}`),i}finally{R.delete(l)}},getAllTools:()=>{let m=Array.from(u.values()),n=T.getAvailableTools().map(l=>({name:l.name,description:l.description,parameters:l.inputSchema,toolType:"mcp",autonomyLevel:"low",category:"general",priority:10,isLocal:!1}));return[...m,...n].sort((l,C)=>(l.priority||10)-(C.priority||10))},searchTools:m=>{let p=b.getAllTools(),n=m.toLowerCase();return p.filter(l=>l.name.toLowerCase().includes(n)||l.description.toLowerCase().includes(n)||l.category?.toLowerCase().includes(n))},getExecutionStats:()=>({...s}),healthCheck:async()=>{let m=await T.healthCheck(),n=b.getAllTools().filter(i=>!i.isLocal),l=s.totalCalls>0?s.successfulCalls/s.totalCalls:1,C="healthy";return l<.5?C="unhealthy":(l<.8||m.unhealthyServers&&typeof m.unhealthyServers=="number"&&m.unhealthyServers>0)&&(C="degraded"),{status:C,details:{localTools:u.size,mcpTools:n.length,mcpServers:m,activeCalls:R.size,totalCalls:s.totalCalls,successRate:l}}},cleanup:()=>{R.clear(),s={totalCalls:0,successfulCalls:0,failedCalls:0,averageExecutionTime:0,callsByTool:{},callsByCategory:{},errorsByTool:{}},P.length=0,console.log("\u{1F9F9} \u5DE5\u5177\u8C03\u7528\u5C42\u8D44\u6E90\u5DF2\u6E05\u7406")},getProtocolBridge:()=>T};return b};var ie=require("@langchain/langgraph"),ce=o=>{let{maxSessions:e=1e3,sessionTimeout:g=1440*60*1e3,enablePersistence:y=!0,enableCompression:S=!0,maxMemorySize:h=100*1024*1024,persistenceInterval:T=6e4}=o,u=new Map,s=new Map,P=new Map,R=null,A=null,w=(t="")=>`${t}${Date.now()}_${Math.random().toString(36).substring(2,9)}`,a=t=>new Blob([JSON.stringify(t)]).size,r=async t=>{if(!S)return{data:JSON.stringify(t),compressed:!1};try{let f=JSON.stringify(t),v=f.replace(/\\s+/g," ").trim();return{data:v,compressed:v.length<f.length}}catch(f){return console.error("\u6570\u636E\u538B\u7F29\u5931\u8D25:",f),{data:JSON.stringify(t),compressed:!1}}},c=async(t,f)=>{try{return JSON.parse(t)}catch(v){return console.error("\u6570\u636E\u89E3\u538B\u5931\u8D25:",v),null}},d=t=>Date.now()>new Date(t.expiresAt).getTime(),b=t=>{let f=u.get(t);if(f){let v=new Date().toISOString(),$=new Date(Date.now()+g).toISOString();u.set(t,{...f,lastAccessedAt:v,expiresAt:$})}},m=()=>{let t=u.size,f=Date.now();u.forEach(($,M)=>{f>new Date($.expiresAt).getTime()&&(u.delete(M),s.forEach((x,k)=>{x.sessionId===M&&s.delete(k)}),P.forEach((x,k)=>{k.includes(M)&&P.delete(k)}),console.log(`\u{1F9F9} \u6E05\u7406\u8FC7\u671F\u4F1A\u8BDD: ${M}`))});let v=t-u.size;return v>0&&console.log(`\u{1F9F9} \u6E05\u7406\u4E86${v}\u4E2A\u8FC7\u671F\u4F1A\u8BDD`),v},p=()=>{let t=Array.from(s.values()).reduce((f,v)=>f+v.size,0);if(t>h){console.log(`\u26A0\uFE0F \u5185\u5B58\u4F7F\u7528\u8D85\u9650: ${(t/1024/1024).toFixed(2)}MB`);let f=Array.from(u.values()).sort((M,x)=>new Date(M.lastAccessedAt).getTime()-new Date(x.lastAccessedAt).getTime()),v=0,$=0;for(let M of f){if(t-v<=h*.8)break;s.forEach((x,k)=>{x.sessionId===M.sessionId&&(v+=x.size,s.delete(k))}),u.delete(M.sessionId),$++}console.log(`\u{1F9F9} \u5185\u5B58\u538B\u529B\u6E05\u7406: \u5220\u9664${$}\u4E2A\u4F1A\u8BDD\uFF0C\u91CA\u653E${(v/1024/1024).toFixed(2)}MB`)}},n=()=>{R||(R=setInterval(()=>{m(),p()},6e4),console.log("\u{1F504} \u542F\u52A8\u5185\u5B58\u6E05\u7406\u5B9A\u65F6\u5668"))},l=()=>{R&&(clearInterval(R),R=null,console.log("\u23F9\uFE0F \u505C\u6B62\u5185\u5B58\u6E05\u7406\u5B9A\u65F6\u5668"))},C=()=>({saveCheckpoint:async(t,f)=>{let v=`checkpoint_${t}_${Date.now()}`,{data:$,compressed:M}=await r(f);return P.set(v,{sessionId:t,checkpoint:$,compressed:M,timestamp:new Date().toISOString()}),v},getCheckpoint:async t=>{let f=P.get(t);return f?await c(f.checkpoint,f.compressed):null},listCheckpoints:t=>{let f=[];return P.forEach((v,$)=>{v.sessionId===t&&f.push({id:$,timestamp:v.timestamp})}),f.sort((v,$)=>new Date($.timestamp).getTime()-new Date(v.timestamp).getTime())},deleteCheckpoint:t=>P.delete(t)}),i={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,f,v={})=>{let $=w("session_"),M=new Date().toISOString(),x=new Date(Date.now()+g).toISOString(),k={sessionId:$,agentId:t,userId:f,createdAt:M,lastAccessedAt:M,expiresAt:x,isActive:!0,metadata:v,stateSize:0};return u.set($,k),console.log(`\u{1F4DD} \u521B\u5EFA\u4F1A\u8BDD: ${$} [Agent: ${t}]`),$},getSession:t=>{let f=u.get(t);return f?d(f)?(u.delete(t),null):(b(t),f):null},storeMemoryItem:async(t,f,v,$={})=>{if(!i.getSession(t))throw new Error(`\u4F1A\u8BDD\u4E0D\u5B58\u5728: ${t}`);let x=w("mem_"),{data:k,compressed:N}=await r(v),L=a(k),E={id:x,sessionId:t,type:f,data:k,timestamp:new Date().toISOString(),size:L,compressed:N,ttl:$.ttl,metadata:$.metadata};s.set(x,E);let q=u.get(t);return u.set(t,{...q,stateSize:q.stateSize+L}),console.log(`\u{1F4BE} \u5B58\u50A8\u5185\u5B58\u9879: ${x} [${f}] ${(L/1024).toFixed(2)}KB`),x},getMemoryItem:async t=>{let f=s.get(t);return f?f.ttl&&Date.now()-new Date(f.timestamp).getTime()>f.ttl?(s.delete(t),null):await c(f.data,f.compressed):null},getSessionMemoryItems:(t,f)=>{let v=Array.from(s.values()).filter($=>$.sessionId===t);return f?v.filter($=>$.type===f):v.sort(($,M)=>new Date(M.timestamp).getTime()-new Date($.timestamp).getTime())},deleteMemoryItem:t=>{let f=s.get(t);if(!f)return!1;s.delete(t);let v=u.get(f.sessionId);return v&&u.set(f.sessionId,{...v,stateSize:Math.max(0,v.stateSize-f.size)}),console.log(`\u{1F5D1}\uFE0F \u5220\u9664\u5185\u5B58\u9879: ${t}`),!0},updateMemoryItem:async(t,f)=>{let v=s.get(t);if(!v)return!1;let{data:$,compressed:M}=await r(f),x=a($),k=v.size,N={...v,data:$,compressed:M,size:x,timestamp:new Date().toISOString()};s.set(t,N);let L=u.get(v.sessionId);return L&&u.set(v.sessionId,{...L,stateSize:L.stateSize-k+x}),console.log(`\u{1F504} \u66F4\u65B0\u5185\u5B58\u9879: ${t}`),!0},clearSession:t=>{if(!u.get(t))return!1;let v=0;s.forEach((M,x)=>{M.sessionId===t&&(s.delete(x),v++)});let $=0;return P.forEach((M,x)=>{x.includes(t)&&(P.delete(x),$++)}),u.delete(t),console.log(`\u{1F9F9} \u6E05\u7406\u4F1A\u8BDD: ${t} (${v}\u4E2A\u5185\u5B58\u9879, ${$}\u4E2A\u68C0\u67E5\u70B9)`),!0},getMemoryStats:()=>{let t=Array.from(u.values()),f=t.filter(E=>!d(E)),v=t.filter(E=>d(E)),$=Array.from(s.values()),M=$.reduce((E,q)=>E+q.size,0),x=t.length>0?t.reduce((E,q)=>E+q.stateSize,0)/t.length:0,k=$.reduce((E,q)=>(E[q.type]=(E[q.type]||0)+1,E),{}),N=$.filter(E=>E.compressed),L=$.length>0?N.length/$.length:0;return{totalSessions:t.length,activeSessions:f.length,expiredSessions:v.length,totalMemoryUsage:M,averageSessionSize:x,itemsByType:k,compressionRatio:L}},getCheckpointManager:()=>C(),getMemorySaver:()=>new ie.MemorySaver,exportSessionData:async t=>{let f=i.getSession(t);if(!f)return null;let v=i.getSessionMemoryItems(t),$=await Promise.all(v.map(async M=>({id:M.id,type:M.type,data:await i.getMemoryItem(M.id),timestamp:M.timestamp,metadata:M.metadata})));return{session:f,items:$,exportedAt:new Date().toISOString()}},importSessionData:async t=>{let{session:f,items:v}=t,$=i.createSession(f.agentId,f.userId,f.metadata);for(let M of v)await i.storeMemoryItem($,M.type,M.data,{metadata:M.metadata});return console.log(`\u{1F4E5} \u5BFC\u5165\u4F1A\u8BDD\u6570\u636E: ${$} (${v.length}\u4E2A\u5185\u5B58\u9879)`),$},shutdown:()=>{console.log("\u{1F6D1} \u5173\u95ED\u5185\u5B58\u7BA1\u7406\u7CFB\u7EDF..."),l(),A&&(clearInterval(A),A=null),console.log("\u2705 \u5185\u5B58\u7BA1\u7406\u7CFB\u7EDF\u5DF2\u5173\u95ED")}};return i};var Ie=D.Annotation.Root({agentType:D.Annotation,agentId:D.Annotation,sessionId:D.Annotation,currentTask:D.Annotation,taskContext:D.Annotation,analysisResults:D.Annotation,workingMemory:D.Annotation,generatedArtifacts:D.Annotation,collaborationData:D.Annotation,sharedContext:D.Annotation,isComplete:D.Annotation,needsCollaboration:D.Annotation,errors:D.Annotation,metadata:D.Annotation}),Ee={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`}},ge=o=>{let{agentType:e,llm:g,grpcPort:y,capabilities:S,toolConfigs:h={},memoryConfig:T={},prompts:u}=o,s=`${e}_agent_${Date.now()}`,P=u||Ee[e],R=ae({enableCaching:!0,maxConcurrentCalls:3,defaultTimeout:3e4}),A=ce({maxSessions:50,sessionTimeout:7200*1e3,enablePersistence:!0,enableCompression:!0,maxMemorySize:20*1024*1024,persistenceInterval:6e4,...T}),w=ne({llm:g,maxIterations:10,thoughtTemplate:P.systemPrompt}),a=async i=>{console.log(`\u{1F50D} ${e}\u5206\u6790\u4EFB\u52A1...`);let t=i.currentTask;if(!t)return{errors:["\u4EFB\u52A1\u4FE1\u606F\u7F3A\u5931"]};try{let f=P.taskPrompt.replace("{taskDescription}",t.message.description||"").replace("{requirementAnalysis}",i.taskContext?.requirementAnalysis||"").replace("{technicalDesign}",i.taskContext?.technicalDesign||"").replace("{implementationCode}",i.taskContext?.implementationCode||"").replace("{documentation}",i.taskContext?.documentation||""),$=(await g.invoke([new le.SystemMessage(f)])).content.toString();return{analysisResults:{type:e,content:$,timestamp:new Date().toISOString()},workingMemory:{...i.workingMemory,analysisComplete:!0,analysisContent:$}}}catch(f){return console.error(`\u274C ${e}\u4EFB\u52A1\u5206\u6790\u5931\u8D25:`,f),{errors:[...i.errors||[],`\u4EFB\u52A1\u5206\u6790\u5931\u8D25: ${f.message}`]}}},r=async i=>{console.log(`\u2699\uFE0F ${e}\u6267\u884C\u4E13\u4E1A\u5DE5\u4F5C...`);try{let t=[];switch(e){case"analyst":t=await c(i);break;case"architect":t=await d(i);break;case"coder":t=await b(i);break;case"checker":t=await m(i);break}return{generatedArtifacts:t,workingMemory:{...i.workingMemory,workComplete:!0,artifactCount:t.length}}}catch(t){return console.error(`\u274C ${e}\u4E13\u4E1A\u5DE5\u4F5C\u5931\u8D25:`,t),{errors:[...i.errors||[],`\u4E13\u4E1A\u5DE5\u4F5C\u5931\u8D25: ${t.message}`]}}},c=async i=>{let t=i.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 i=>{let t=i.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 i=>{let t=i.analysisResults?.content||"",f=`// Generated by ${e} agent // Based on: ${i.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:f,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()).to