UNPKG

@multi-agent/a2a

Version:
17 lines (11 loc) 7.16 kB
var T=Object.defineProperty;var e=(t,a)=>T(t,"name",{value:a,configurable:!0});var z={HANDLER_ABORTED:"HANDLER_ABORTED",HANDLER_ERROR:"HANDLER_ERROR",SKILL_NOT_FOUND:"SKILL_NOT_FOUND",INVALID_CALL_MESSAGE:"INVALID_CALL_MESSAGE",INTERNAL_ERROR:"INTERNAL_ERROR"};var K=e(t=>({...t,description:t.description||"",skills:[...t.skills]}),"createAgentConfig"),Q=e((t,a,l)=>({name:t,handler:a,description:l?.description,inputSchema:l?.inputSchema,outputSchema:l?.outputSchema}),"defineSkill");var C=e(t=>{let a="";for(let l=0;l<t;l++)a+=Math.floor(Math.random()*16).toString(16);return a},"randomHex"),k=e(()=>`msg-${Date.now().toString(36)}-${C(8)}`,"generateMessageId"),Y=e(()=>`q-${Date.now().toString(36)}-${C(6)}`,"generateQuestionId"),w=e(()=>`stream-${Date.now().toString(36)}-${C(8)}`,"generateStreamId"),ee=e(()=>`req-${Date.now().toString(36)}-${C(8)}`,"generateRequestId"),te=e(()=>`tr_${Date.now()}_${C(12)}`,"generateTraceId"),re=e(()=>`m_${Date.now()}_${C(8)}`,"generateMetricsId");var B=e(t=>{let a=new URL(t),l=a.protocol.replace(":","");if(l!=="a2a"&&l!=="a2as")throw new Error(`Invalid A2A address scheme: "${l}" (expected "a2a" or "a2as")`);let u=parseInt(a.port,10);if(isNaN(u)||u<=0||u>65535)throw new Error(`Invalid port in A2A address: "${a.port}"`);if(!a.hostname)throw new Error(`Missing host in A2A address: "${t}"`);let y=l==="a2as",n=a.pathname.slice(1)||void 0;return{host:a.hostname,port:u,secure:y,namespace:n}},"parseA2AAddress");var L=e(t=>{let{host:a,port:l,secure:u,namespace:y}=B(t.address),n=null,P=l+1,E=`${u?"wss":"ws"}://${a}:${P}`,p=new Map,x=[],O=e(async o=>{for(let s of x)s.beforeCall&&await s.beforeCall(o)},"executeBeforeCallHooks"),$=e(async(o,s)=>{let r=s;for(let i of x)i.afterCall&&(r=await i.afterCall(o,r));return r},"executeAfterCallHooks"),R=e(async(o,s)=>{for(let r of x)r.onError&&await r.onError(o,s)},"executeOnErrorHooks"),H=e(()=>new Promise((o,s)=>{if(n&&n.readyState===WebSocket.OPEN){o();return}try{n=new WebSocket(E),n.onopen=()=>{let r={...t.metadata};y&&(r["x-agent-namespace"]=y),n.send(JSON.stringify({type:"init",agentId:t.agentId,metadata:r})),o()},n.onerror=r=>{s(new Error(`Failed to connect to WebSocket at ${E}`))},n.onclose=()=>{p.forEach(r=>{r.handleClose&&r.handleClose()}),p.clear()}}catch(r){s(r)}}),"connect"),I=e(o=>{let s=[],r=[],i=!1,d=null,c={message:new Map},f=e(g=>{try{let m=JSON.parse(g.data);if(m.streamId!==o)return;if(m.action==="stream_end"){for(i=!0;r.length>0;)r.shift()({value:void 0,done:!0});n?.removeEventListener("message",f),p.delete(o);return}let h=m.message,A=c.message.get(h.type);A&&A.length>0&&A.forEach(v=>{try{v(h)}catch{}}),r.length>0?r.shift()({value:h,done:!1}):s.push(h)}catch{}},"messageHandler");n.addEventListener("message",f);let S={send:e(g=>{let m={messageId:g.messageId||k(),timestamp:g.timestamp||Date.now(),type:g.type,text:g.text,data:g.data};!n||n.readyState!==WebSocket.OPEN||n.send(JSON.stringify({streamId:o,message:m}))},"send"),[Symbol.asyncIterator]:()=>({next:e(async()=>{if(s.length>0)return{value:s.shift(),done:!1};if(i){if(d)throw d;return{value:void 0,done:!0}}return new Promise(g=>{r.push(g)})},"next")}),end:e(()=>{i=!0,n&&n.readyState===WebSocket.OPEN&&n.send(JSON.stringify({streamId:o,action:"end"})),n?.removeEventListener("message",f),p.delete(o)},"end"),cancel:e(g=>{let m={messageId:k(),timestamp:Date.now(),type:"cancel",text:g||"Cancelled by client"};n&&n.readyState===WebSocket.OPEN&&n.send(JSON.stringify({streamId:o,message:m})),i=!0,n?.removeEventListener("message",f),p.delete(o)},"cancel"),on:e((g,m)=>(c.message.has(g)||c.message.set(g,[]),c.message.get(g).push(m),S),"on")};return p.set(o,{stream:S,handleClose:e(()=>{for(i=!0,d=new Error("WebSocket connection closed");r.length>0;)r.shift()({value:void 0,done:!0})},"handleClose")}),S},"createBidirectionalStream"),b={call:e(async(o,s,r)=>{let i={agentId:t.agentId||"unknown",skill:o,params:s,metadata:{...t.metadata||{}}};r?.metadata&&Object.assign(i.metadata,r.metadata);try{await O(i),await H();let d=w(),c=I(d);c.send({type:"call",text:`Calling skill: ${o}`,data:{skill:o,params:i.params}});let f=await $(i,c);if(r?.signal){let S=r.signal;if(S.aborted)f.cancel("Cancelled before call");else{let g=e(()=>{f.cancel("Cancelled by signal")},"abortHandler");S.addEventListener("abort",g,{once:!0})}}return f}catch(d){throw await R(d instanceof Error?d:new Error(String(d)),i),d}},"call"),connect:e(async()=>{await H();let o=w();return I(o)},"connectStream"),getAgentCard:e(async()=>(await H(),new Promise((o,s)=>{let r=k(),i=e(d=>{try{let c=JSON.parse(d.data);c.requestId===r&&c.type==="agentCard"&&(n.removeEventListener("message",i),o(c.agentCard)),c.requestId===r&&c.type==="error"&&(n.removeEventListener("message",i),s(new Error(c.message||"Failed to get agent card")))}catch{}},"handler");n.addEventListener("message",i),n.send(JSON.stringify({requestId:r,action:"getAgentCard"})),setTimeout(()=>{n.removeEventListener("message",i),s(new Error("getAgentCard timeout (5s)"))},5e3)})),"getAgentCard"),checkHealth:e(async()=>(await H(),new Promise((o,s)=>{let r=k(),i=e(d=>{try{let c=JSON.parse(d.data);c.requestId===r&&c.type==="health"&&(n.removeEventListener("message",i),o(c.healthy))}catch{}},"handler");n.addEventListener("message",i),n.send(JSON.stringify({requestId:r,action:"checkHealth"})),setTimeout(()=>{n.removeEventListener("message",i),s(new Error("checkHealth timeout (5s)"))},5e3)})),"checkHealth"),close:e(()=>new Promise(o=>{p.forEach(s=>{s.stream&&s.stream.end()}),p.clear(),n&&(n.close(),n=null),o()}),"close"),use:e(o=>(x.push(o.hooks),b),"use")};return b},"createBrowserClient");var de=e(t=>`\u4F60\u662F\u4E00\u540D\u4E13\u4E1A\u7684${t.name}\uFF0C${t.description}`,"generateAgentResumePrompt"),me=e(t=>{let a=t.skills.map(l=>`- **${l.name}**: ${l.description||"\u65E0\u63CF\u8FF0"}`).join(` `);return` ## Agent\u89D2\u8272\u4FE1\u606F **Agent ID**: ${t.agentId} **\u540D\u79F0**: ${t.name} **\u63CF\u8FF0**: ${t.description} ## \u4E13\u4E1A\u80FD\u529B ${a||"\u6682\u65E0\u53EF\u7528\u6280\u80FD"} ## \u804C\u8D23\u8BF4\u660E \u8BE5Agent\u8D1F\u8D23\u5176\u4E13\u4E1A\u9886\u57DF\u5185\u7684\u4EFB\u52A1\u89C4\u5212\u4E0E\u6267\u884C\uFF0C\u5E94\u4E25\u683C\u9075\u5B88\u80FD\u529B\u8FB9\u754C\uFF0C\u4E0D\u5904\u7406\u8D85\u51FA\u804C\u8D23\u8303\u56F4\u7684\u4EFB\u52A1\u3002 `.trim()},"generateAgentInfoPrompt");var M=e(t=>{if(!t)return 0;let a=0;for(let l of t)/[\u4e00-\u9fa5]/.test(l)?a+=2:/[a-zA-Z0-9]/.test(l)||/\s/.test(l)?a+=.25:a+=1;return Math.ceil(a)},"tokenize"),N=e((t,a)=>Math.ceil(t/1e3*a),"calculateCost");var D=e(()=>{let t=[];return{collect:e(a=>{a&&t.push(a)},"collect"),getText:e(()=>t.join(""),"getText"),getChars:e(()=>t.reduce((a,l)=>a+l.length,0),"getChars"),getTokens:e(()=>M(t.join("")),"getTokens"),reset:e(()=>{t=[]},"reset")}},"createStreamCollector");export{z as ErrorCode,N as calculateCost,L as createAgentClient,K as createAgentConfig,D as createStreamCollector,Q as defineSkill,me as generateAgentInfoPrompt,de as generateAgentResumePrompt,k as generateMessageId,re as generateMetricsId,Y as generateQuestionId,ee as generateRequestId,w as generateStreamId,te as generateTraceId,M as tokenize};