{"_id":"@drew-foxall/a2a-js-sdk","_rev":"5-fc4ae0c2c86408225e0c83651fc20141","name":"@drew-foxall/a2a-js-sdk","dist-tags":{"latest":"0.4.2"},"versions":{"0.3.5":{"name":"@drew-foxall/a2a-js-sdk","version":"0.3.5","keywords":["a2a","agent2agent","ai-agents","hono","express","sse","streaming","server-sent-events","ai","agents"],"author":{"name":"Drew Foxall"},"_id":"@drew-foxall/a2a-js-sdk@0.3.5","maintainers":[{"name":"drew-foxall","email":"drew@foxalltogether.com"}],"homepage":"https://github.com/drew-foxall/a2a-js-sdk#readme","bugs":{"url":"https://github.com/drew-foxall/a2a-js-sdk/issues"},"dist":{"shasum":"b520ae7efab11001597a39eee7d8e158f2c19fe5","tarball":"https://registry.npmjs.org/@drew-foxall/a2a-js-sdk/-/a2a-js-sdk-0.3.5.tgz","fileCount":34,"integrity":"sha512-gRR72hxkDOYh7VmiWt6k7Pn3EfET5Ei17Xw5dSUmP2PNvmONPscG2b/ers2SLhNQnYIHcU8I+kgABPhGK6BNSw==","signatures":[{"sig":"MEUCIQCxxE5Jng0Te6YAJ22QVpZZoFOHatF/E+OBtxpAaP/44QIgLfyWEHo4DEtvDvmDdCOdwk3P/bL4K9YmNNwgVA7TYGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":539676},"main":"dist/index.js","type":"module","mocha":{"require":"tsx"},"types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"},"./server/hono":{"types":"./dist/server/hono/index.d.ts","import":"./dist/server/hono/index.js","require":"./dist/server/hono/index.cjs"},"./server/express":{"types":"./dist/server/express/index.d.ts","import":"./dist/server/express/index.js","require":"./dist/server/express/index.cjs"}},"gitHead":"c893bfe295b67ff54fa5f92eefa3cff291563596","scripts":{"test":"mocha test/**/*.spec.ts","build":"tsup","clean":"gts clean","a2a:cli":"tsx src/samples/cli.ts","pretest":"npm run build","coverage":"c8 npm run test","generate":"curl https://raw.githubusercontent.com/google-a2a/A2A/refs/heads/main/specification/json/a2a.json > spec.json && node scripts/generateTypes.js && rm spec.json","agents:movie-agent":"tsx src/samples/agents/movie-agent/index.ts","agents:sample-agent":"tsx src/samples/agents/sample-agent/index.ts","agents:extension-agent":"tsx src/samples/extensions/index.ts","agents:hono-sample-agent":"tsx src/samples/agents/hono-sample-agent/index.ts","agents:hono-extension-agent":"tsx src/samples/extensions/hono-index.ts"},"_npmUser":{"name":"drew-foxall","email":"drew@foxalltogether.com"},"repository":{"url":"git+https://github.com/drew-foxall/a2a-js-sdk.git","type":"git"},"_npmVersion":"10.9.2","description":"Server & Client SDK for Agent2Agent protocol with Express and Hono support","directories":{},"_nodeVersion":"22.16.0","dependencies":{"uuid":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","gts":"^6.0.2","tsx":"^4.19.3","chai":"^5.2.0","hono":"4.10.6","tsup":"^8.5.0","mocha":"^11.6.0","sinon":"^20.0.0","genkit":"^1.8.0","express":"^5.1.0","supertest":"^7.1.4","typescript":"^5.8.2","@types/chai":"^5.2.2","@types/node":"^22.13.14","@types/mocha":"^10.0.10","@types/sinon":"^17.0.4","@types/express":"^5.0.3","@types/supertest":"^6.0.3","@hono/node-server":"1.19.6","@genkit-ai/googleai":"^1.8.0","@genkit-ai/vertexai":"^1.8.0","json-schema-to-typescript":"^15.0.4"},"peerDependencies":{"express":"^4.21.2 || ^5.1.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/a2a-js-sdk_0.3.5_1763378218502_0.945102118159797","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@drew-foxall/a2a-js-sdk","version":"0.3.6","keywords":["a2a","agent2agent","ai-agents","hono","express","cloudflare-workers","edge-runtime","deno","bun","sse","streaming","server-sent-events","ai","agents"],"author":{"name":"Drew Foxall"},"_id":"@drew-foxall/a2a-js-sdk@0.3.6","maintainers":[{"name":"drew-foxall","email":"drew@foxalltogether.com"}],"homepage":"https://github.com/drew-foxall/a2a-js-sdk#readme","bugs":{"url":"https://github.com/drew-foxall/a2a-js-sdk/issues"},"dist":{"shasum":"58cfe063a108915b35a103157add1183f2c25d21","tarball":"https://registry.npmjs.org/@drew-foxall/a2a-js-sdk/-/a2a-js-sdk-0.3.6.tgz","fileCount":34,"integrity":"sha512-mfUF9jU4oPxHXtSwVHooBKt9Fn+z0cOAObkO+XyMgyl3mYkcZq6vm3ORkdf4ioxAQ2KR67UraUIsZoXIKvGgtg==","signatures":[{"sig":"MEYCIQChChQbBWU+Gup8qyL8gUn6xZnUkXbAmcDUxW4u4PDalAIhAP9bz9pp5HuJIce4xx+cf3MrfrrC438aNJ9n1sa5k+pD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":551651},"main":"dist/index.js","type":"module","mocha":{"require":"tsx"},"types":"dist/index.d.ts","engines":{"node":">=15"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"},"./server/hono":{"types":"./dist/server/hono/index.d.ts","import":"./dist/server/hono/index.js","require":"./dist/server/hono/index.cjs"},"./server/express":{"types":"./dist/server/express/index.d.ts","import":"./dist/server/express/index.js","require":"./dist/server/express/index.cjs"}},"gitHead":"ae92f99e55d85758727feb5c8d0cbee629565971","scripts":{"test":"mocha test/**/*.spec.ts","build":"tsup","clean":"gts clean","a2a:cli":"tsx src/samples/cli.ts","pretest":"npm run build","coverage":"c8 npm run test","generate":"curl https://raw.githubusercontent.com/google-a2a/A2A/refs/heads/main/specification/json/a2a.json > spec.json && node scripts/generateTypes.js && rm spec.json","agents:movie-agent":"tsx src/samples/agents/movie-agent/index.ts","agents:sample-agent":"tsx src/samples/agents/sample-agent/index.ts","agents:extension-agent":"tsx src/samples/extensions/index.ts","agents:hono-sample-agent":"tsx src/samples/agents/hono-sample-agent/index.ts","agents:hono-extension-agent":"tsx src/samples/extensions/hono-index.ts"},"_npmUser":{"name":"drew-foxall","email":"drew@foxalltogether.com"},"repository":{"url":"git+https://github.com/drew-foxall/a2a-js-sdk.git","type":"git"},"_npmVersion":"11.6.4","description":"Server & Client SDK for Agent2Agent protocol with Express and Hono support","directories":{},"_nodeVersion":"22.16.0","dependencies":{"uuid":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.30","c8":"^10.1.3","gts":"^6.0.2","tsx":"^4.19.3","zod":"^3.24.1","chai":"^5.2.0","hono":"4.10.6","tsup":"^8.5.0","mocha":"^11.6.0","sinon":"^20.0.0","genkit":"^1.8.0","express":"^5.1.0","supertest":"^7.1.4","typescript":"^5.8.2","@types/chai":"^5.2.2","@types/node":"^22.13.14","@types/mocha":"^10.0.10","@types/sinon":"^17.0.4","@ai-sdk/google":"^1.0.10","@ai-sdk/openai":"^1.0.10","@types/express":"^5.0.3","@types/supertest":"^6.0.3","@ai-sdk/anthropic":"^1.0.10","@hono/node-server":"1.19.6","@genkit-ai/googleai":"^1.8.0","@genkit-ai/vertexai":"^1.8.0","json-schema-to-typescript":"^15.0.4"},"peerDependencies":{"express":"^4.21.2 || ^5.1.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/a2a-js-sdk_0.3.6_1764527464549_0.010733757137932232","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@drew-foxall/a2a-js-sdk","version":"0.4.0","keywords":["a2a","agent2agent","ai-agents","hono","express","elysia","itty-router","fresh","cloudflare-workers","vercel-edge","edge-runtime","deno","bun","sse","streaming","server-sent-events","ai","agents","web-standard","fetch-api"],"author":{"name":"Drew Foxall"},"license":"Apache-2.0","_id":"@drew-foxall/a2a-js-sdk@0.4.0","maintainers":[{"name":"drew-foxall","email":"drew@foxalltogether.com"}],"homepage":"https://github.com/drew-foxall/a2a-js-sdk#readme","bugs":{"url":"https://github.com/drew-foxall/a2a-js-sdk/issues"},"dist":{"shasum":"9019aa519089ad2fdae61e2210bd6ca525442e98","tarball":"https://registry.npmjs.org/@drew-foxall/a2a-js-sdk/-/a2a-js-sdk-0.4.0.tgz","fileCount":67,"integrity":"sha512-av07D5oVfgBSX1+XU88TYOY0udJVnkTXcAz5FmuRvOlICUa78mP49k6Iu5Gph3rbfRfl6HjhPppA8F8DLmXQ/w==","signatures":[{"sig":"MEUCIQDhUtFBl4DZlHK2+wJ7Tm0S1g/q9jxmP26KGSRpY7jI1AIgO+3CBqqryRY1V3o3cyN1kDOPGjAprGLX6qQOzC2mIPw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1038513},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=15"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"},"./server/core":{"types":"./dist/server/core/index.d.ts","import":"./dist/server/core/index.js","require":"./dist/server/core/index.cjs"},"./server/hono":{"types":"./dist/server/hono/index.d.ts","import":"./dist/server/hono/index.js","require":"./dist/server/hono/index.cjs"},"./server/express":{"types":"./dist/server/express/index.d.ts","import":"./dist/server/express/index.js","require":"./dist/server/express/index.cjs"},"./server/adapters/hono":{"types":"./dist/server/adapters/hono.d.ts","import":"./dist/server/adapters/hono.js","require":"./dist/server/adapters/hono.cjs"},"./server/adapters/fresh":{"types":"./dist/server/adapters/fresh.d.ts","import":"./dist/server/adapters/fresh.js","require":"./dist/server/adapters/fresh.cjs"},"./server/adapters/elysia":{"types":"./dist/server/adapters/elysia.d.ts","import":"./dist/server/adapters/elysia.js","require":"./dist/server/adapters/elysia.cjs"},"./server/adapters/express":{"types":"./dist/server/adapters/express.d.ts","import":"./dist/server/adapters/express.js","require":"./dist/server/adapters/express.cjs"},"./server/adapters/itty-router":{"types":"./dist/server/adapters/itty-router.d.ts","import":"./dist/server/adapters/itty-router.js","require":"./dist/server/adapters/itty-router.cjs"},"./server/adapters/web-standard":{"types":"./dist/server/adapters/web-standard.d.ts","import":"./dist/server/adapters/web-standard.js","require":"./dist/server/adapters/web-standard.cjs"}},"gitHead":"9eb1a6713e6eddc2add38d0e9a4470799a0a84f0","scripts":{"lint":"tsc --noEmit && npx eslint .","test":"vitest run","build":"tsup","clean":"gts clean","a2a:cli":"tsx src/samples/cli.ts","coverage":"vitest run --coverage","generate":"curl https://raw.githubusercontent.com/google-a2a/A2A/refs/heads/main/specification/json/a2a.json > spec.json && node scripts/generateTypes.js && rm spec.json","lint:fix":"npx eslint . --fix","test:edge":"vitest run --config vitest.edge.config.ts","format:readme":"prettier --write ./README.md","agents:movie-agent":"tsx src/samples/agents/movie-agent/index.ts","test-build:browser":"esbuild ./dist/client/index.js ./dist/index.js --bundle --platform=browser --outdir=dist/tmp-checks --outbase=./dist","agents:sample-agent":"tsx src/samples/agents/sample-agent/index.ts","agents:extension-agent":"tsx src/samples/extensions/index.ts","agents:hono-sample-agent":"tsx src/samples/agents/hono-sample-agent/index.ts","agents:hono-extension-agent":"tsx src/samples/extensions/hono-index.ts"},"_npmUser":{"name":"drew-foxall","email":"drew@foxalltogether.com"},"repository":{"url":"git+https://github.com/drew-foxall/a2a-js-sdk.git","type":"git"},"_npmVersion":"11.6.4","description":"Server & Client SDK for Agent2Agent protocol with Express, Hono, and Edge Runtime support","directories":{},"_nodeVersion":"22.16.0","dependencies":{"uuid":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.30","gts":"^6.0.2","tsx":"^4.19.3","zod":"^3.24.1","hono":"4.10.6","tsup":"^8.5.0","sinon":"^20.0.0","eslint":"^9.39.1","vitest":"^4.0.15","esbuild":"^0.27.0","express":"^5.1.0","prettier":"^3.6.2","supertest":"^7.1.4","@eslint/js":"^9.39.1","typescript":"^5.9.3","@types/node":"^22.13.14","@types/sinon":"^17.0.4","@ai-sdk/google":"^1.0.10","@ai-sdk/openai":"^1.0.10","@types/express":"^5.0.3","@edge-runtime/vm":"5.0.0","@types/supertest":"^6.0.3","@ai-sdk/anthropic":"^1.0.10","@hono/node-server":"1.19.6","typescript-eslint":"^8.46.4","@genkit-ai/googleai":"^1.8.0","@genkit-ai/vertexai":"^1.8.0","@vitest/coverage-v8":"^4.0.15","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","json-schema-to-typescript":"^15.0.4"},"peerDependencies":{"hono":"^4.0.0","express":"^4.21.2 || ^5.1.0"},"peerDependenciesMeta":{"hono":{"optional":true},"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/a2a-js-sdk_0.4.0_1765752112789_0.8569797616844845","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@drew-foxall/a2a-js-sdk","version":"0.4.1","keywords":["a2a","agent2agent","ai-agents","hono","express","elysia","itty-router","fresh","cloudflare-workers","vercel-edge","edge-runtime","deno","bun","sse","streaming","server-sent-events","ai","agents","web-standard","fetch-api"],"author":{"name":"Drew Foxall"},"license":"Apache-2.0","_id":"@drew-foxall/a2a-js-sdk@0.4.1","maintainers":[{"name":"drew-foxall","email":"drew@foxalltogether.com"}],"homepage":"https://github.com/drew-foxall/a2a-js-sdk#readme","bugs":{"url":"https://github.com/drew-foxall/a2a-js-sdk/issues"},"dist":{"shasum":"9a94b89dbf4636f746b985e70bace0e7d764984f","tarball":"https://registry.npmjs.org/@drew-foxall/a2a-js-sdk/-/a2a-js-sdk-0.4.1.tgz","fileCount":133,"integrity":"sha512-0vtkyHZCtDBT65V76hM6xJepS+BqP7oQ5Q/eOx0ytE6NaQKwLkg5zDb+5ctltBYypMfVlo52Rzw3vCWVmfPXtQ==","signatures":[{"sig":"MEUCIQCzoAnPaF+HQbMqU4v10bxFOuGcKCo2KjwMFZPk6rubvAIgUE1Jfer2o7nv2MTpGjlq3UFuHAZs487h9epoOaYz9pw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1916735},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=15"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"},"./server/core":{"types":"./dist/server/core/index.d.ts","import":"./dist/server/core/index.js","require":"./dist/server/core/index.cjs"},"./server/hono":{"types":"./dist/server/hono/index.d.ts","import":"./dist/server/hono/index.js","require":"./dist/server/hono/index.cjs"},"./server/fresh":{"types":"./dist/server/fresh/index.d.ts","import":"./dist/server/fresh/index.js","require":"./dist/server/fresh/index.cjs"},"./server/elysia":{"types":"./dist/server/elysia/index.d.ts","import":"./dist/server/elysia/index.js","require":"./dist/server/elysia/index.cjs"},"./server/express":{"types":"./dist/server/express/index.d.ts","import":"./dist/server/express/index.js","require":"./dist/server/express/index.cjs"},"./server/itty-router":{"types":"./dist/server/itty-router/index.d.ts","import":"./dist/server/itty-router/index.js","require":"./dist/server/itty-router/index.cjs"},"./server/web-standard":{"types":"./dist/server/web-standard/index.d.ts","import":"./dist/server/web-standard/index.js","require":"./dist/server/web-standard/index.cjs"},"./server/express-adapter":{"types":"./dist/server/express-adapter/index.d.ts","import":"./dist/server/express-adapter/index.js","require":"./dist/server/express-adapter/index.cjs"}},"gitHead":"754d53a1f70967e1b35009ae8071f1a21b17e742","scripts":{"lint":"tsc --noEmit && npx eslint .","test":"vitest run","build":"tsup","clean":"gts clean","a2a:cli":"tsx src/samples/cli.ts","coverage":"vitest run --coverage","generate":"curl https://raw.githubusercontent.com/google-a2a/A2A/refs/heads/main/specification/json/a2a.json > spec.json && node scripts/generateTypes.js && rm spec.json","lint:fix":"npx eslint . --fix","test:edge":"vitest run --config vitest.edge.config.ts","format:readme":"prettier --write ./README.md","agents:movie-agent":"tsx src/samples/agents/movie-agent/index.ts","test-build:browser":"esbuild ./dist/client/index.js ./dist/index.js --bundle --platform=browser --outdir=dist/tmp-checks --outbase=./dist","agents:sample-agent":"tsx src/samples/agents/sample-agent/index.ts","agents:extension-agent":"tsx src/samples/extensions/index.ts","agents:hono-sample-agent":"tsx src/samples/agents/hono-sample-agent/index.ts","agents:hono-extension-agent":"tsx src/samples/extensions/hono-index.ts"},"_npmUser":{"name":"drew-foxall","email":"drew@foxalltogether.com"},"repository":{"url":"git+https://github.com/drew-foxall/a2a-js-sdk.git","type":"git"},"_npmVersion":"11.6.4","description":"Server & Client SDK for Agent2Agent protocol with Express, Hono, and Edge Runtime support","directories":{},"_nodeVersion":"22.16.0","dependencies":{"uuid":"^11.1.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.30","gts":"^6.0.2","tsx":"^4.19.3","zod":"^3.24.1","hono":"4.10.6","tsup":"^8.5.0","sinon":"^20.0.0","eslint":"^9.39.1","vitest":"^4.0.15","esbuild":"^0.27.0","express":"^5.1.0","prettier":"^3.6.2","supertest":"^7.1.4","@eslint/js":"^9.39.1","typescript":"^5.9.3","@types/node":"^22.13.14","@types/sinon":"^17.0.4","@types/express":"^5.0.3","@edge-runtime/vm":"5.0.0","@types/supertest":"^6.0.3","@hono/node-server":"1.19.6","typescript-eslint":"^8.46.4","@genkit-ai/googleai":"^1.8.0","@genkit-ai/vertexai":"^1.8.0","@vitest/coverage-v8":"^4.0.15","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","json-schema-to-typescript":"^15.0.4"},"peerDependencies":{"hono":"^4.0.0","express":"^4.21.2 || ^5.1.0"},"peerDependenciesMeta":{"hono":{"optional":true},"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/a2a-js-sdk_0.4.1_1765829103792_0.6371469564576491","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@drew-foxall/a2a-js-sdk","version":"0.4.2","description":"Server & Client SDK for Agent2Agent protocol with Express, Hono, and Edge Runtime support","license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/drew-foxall/a2a-js-sdk.git"},"engines":{"node":">=15"},"main":"dist/index.js","types":"dist/index.d.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.cjs"},"./server/core":{"types":"./dist/server/core/index.d.ts","import":"./dist/server/core/index.js","require":"./dist/server/core/index.cjs"},"./server/express":{"types":"./dist/server/express/index.d.ts","import":"./dist/server/express/index.js","require":"./dist/server/express/index.cjs"},"./server/hono":{"types":"./dist/server/hono/index.d.ts","import":"./dist/server/hono/index.js","require":"./dist/server/hono/index.cjs"},"./server/elysia":{"types":"./dist/server/elysia/index.d.ts","import":"./dist/server/elysia/index.js","require":"./dist/server/elysia/index.cjs"},"./server/itty-router":{"types":"./dist/server/itty-router/index.d.ts","import":"./dist/server/itty-router/index.js","require":"./dist/server/itty-router/index.cjs"},"./server/fresh":{"types":"./dist/server/fresh/index.d.ts","import":"./dist/server/fresh/index.js","require":"./dist/server/fresh/index.cjs"},"./server/web-standard":{"types":"./dist/server/web-standard/index.d.ts","import":"./dist/server/web-standard/index.js","require":"./dist/server/web-standard/index.cjs"},"./server/express-adapter":{"types":"./dist/server/express-adapter/index.d.ts","import":"./dist/server/express-adapter/index.js","require":"./dist/server/express-adapter/index.cjs"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.cjs"}},"devDependencies":{"@edge-runtime/vm":"5.0.0","@eslint/js":"^9.39.1","@genkit-ai/googleai":"^1.8.0","@genkit-ai/vertexai":"^1.8.0","@hono/node-server":"1.19.6","@types/express":"^5.0.3","@types/node":"^22.13.14","@types/sinon":"^17.0.4","@types/supertest":"^6.0.3","@vitest/coverage-v8":"^4.0.15","ai":"^4.0.30","esbuild":"^0.27.0","eslint":"^9.39.1","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","express":"^5.1.0","gts":"^6.0.2","hono":"4.10.6","zod":"^3.24.1","json-schema-to-typescript":"^15.0.4","prettier":"^3.6.2","sinon":"^20.0.0","supertest":"^7.1.4","tsup":"^8.5.0","tsx":"^4.19.3","typescript":"^5.9.3","typescript-eslint":"^8.46.4","vitest":"^4.0.15"},"scripts":{"clean":"gts clean","build":"tsup","test":"vitest run","test:edge":"vitest run --config vitest.edge.config.ts","lint":"tsc --noEmit && npx eslint .","format:readme":"prettier --write ./README.md","lint:fix":"npx eslint . --fix","coverage":"vitest run --coverage","generate":"curl https://raw.githubusercontent.com/google-a2a/A2A/refs/heads/main/specification/json/a2a.json > spec.json && node scripts/generateTypes.js && rm spec.json","test-build:browser":"esbuild ./dist/client/index.js ./dist/index.js --bundle --platform=browser --outdir=dist/tmp-checks --outbase=./dist","a2a:cli":"tsx src/samples/cli.ts","agents:movie-agent":"tsx src/samples/agents/movie-agent/index.ts","agents:sample-agent":"tsx src/samples/agents/sample-agent/index.ts","agents:hono-sample-agent":"tsx src/samples/agents/hono-sample-agent/index.ts","agents:extension-agent":"tsx src/samples/extensions/index.ts","agents:hono-extension-agent":"tsx src/samples/extensions/hono-index.ts"},"dependencies":{"uuid":"^11.1.0"},"peerDependencies":{"express":"^4.21.2 || ^5.1.0","hono":"^4.0.0"},"peerDependenciesMeta":{"express":{"optional":true},"hono":{"optional":true}},"keywords":["a2a","agent2agent","ai-agents","hono","express","elysia","itty-router","fresh","cloudflare-workers","vercel-edge","edge-runtime","deno","bun","sse","streaming","server-sent-events","ai","agents","web-standard","fetch-api"],"author":{"name":"Drew Foxall"},"bugs":{"url":"https://github.com/drew-foxall/a2a-js-sdk/issues"},"homepage":"https://github.com/drew-foxall/a2a-js-sdk#readme","gitHead":"0661b861396a59b71aed740c22ab1f8ee9f86c58","_id":"@drew-foxall/a2a-js-sdk@0.4.2","_nodeVersion":"22.16.0","_npmVersion":"11.6.4","dist":{"integrity":"sha512-wOvZlVJD04k3kna6poWWR5X6SkPB1tMGFu8xPCPszNcgXEbG63lFpJGkiX22mOPXQr/KXZMY2EemnFXsgEMCkQ==","shasum":"dc508d7b9bfd0df77605fb04865cc3ed00e634af","tarball":"https://registry.npmjs.org/@drew-foxall/a2a-js-sdk/-/a2a-js-sdk-0.4.2.tgz","fileCount":133,"unpackedSize":1917043,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEQCNFfiwgYHPzViO1vJcbuVpTuBxvFedKlDKV6+rmw4AiBO0/rPhcV1/a3YQ4IEDjwFo2fyQh5TyFl1keuAYcRKSQ=="}]},"_npmUser":{"name":"drew-foxall","email":"drew@foxalltogether.com"},"directories":{},"maintainers":[{"name":"drew-foxall","email":"drew@foxalltogether.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/a2a-js-sdk_0.4.2_1765882192992_0.8574056177908047"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-17T11:16:58.433Z","modified":"2025-12-16T10:49:53.399Z","0.3.5":"2025-11-17T11:16:58.699Z","0.3.6":"2025-11-30T18:31:04.752Z","0.4.0":"2025-12-14T22:41:52.976Z","0.4.1":"2025-12-15T20:05:03.941Z","0.4.2":"2025-12-16T10:49:53.179Z"},"bugs":{"url":"https://github.com/drew-foxall/a2a-js-sdk/issues"},"author":{"name":"Drew Foxall"},"license":"Apache-2.0","homepage":"https://github.com/drew-foxall/a2a-js-sdk#readme","keywords":["a2a","agent2agent","ai-agents","hono","express","elysia","itty-router","fresh","cloudflare-workers","vercel-edge","edge-runtime","deno","bun","sse","streaming","server-sent-events","ai","agents","web-standard","fetch-api"],"repository":{"type":"git","url":"git+https://github.com/drew-foxall/a2a-js-sdk.git"},"description":"Server & Client SDK for Agent2Agent protocol with Express, Hono, and Edge Runtime support","maintainers":[{"name":"drew-foxall","email":"drew@foxalltogether.com"}],"readme":"# A2A JavaScript SDK with Edge Support\n\n[![npm version](https://badge.fury.io/js/@drew-foxall%2Fa2a-js-sdk.svg)](https://www.npmjs.com/package/@drew-foxall/a2a-js-sdk)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)\n[![Upstream](https://img.shields.io/badge/upstream-a2aproject%2Fa2a--js%20v0.3.6-blue)](https://github.com/a2aproject/a2a-js)\n\n<!-- markdownlint-disable no-inline-html -->\n\n<html>\n   <h2 align=\"center\">\n   <img src=\"https://raw.githubusercontent.com/google-a2a/A2A/refs/heads/main/docs/assets/a2a-logo-black.svg\" width=\"256\" alt=\"A2A Logo\"/>\n   </h2>\n   <h3 align=\"center\">A JavaScript SDK for building <a href=\"https://google-a2a.github.io/A2A\">Agent2Agent (A2A) Protocol</a> servers with multi-framework and edge runtime support.</h3>\n</html>\n\n<!-- markdownlint-enable no-inline-html -->\n\n> **Fork of [a2aproject/a2a-js](https://github.com/a2aproject/a2a-js)** — Tracks upstream v0.3.6 with added multi-framework and edge runtime support.\n\n## ✨ Features\n\n- **🎯 Multi-Framework**: Express, Hono, Elysia, itty-router, Fresh, and Web Standard\n- **⚡ Edge Runtime Native**: Cloudflare Workers, Deno, Bun — no compatibility layers needed\n- **🌐 Universal JavaScript**: Built on web-standard APIs (`EventTarget`, `Request/Response`)\n- **🚀 SSE Streaming**: Full Server-Sent Events support across all frameworks\n- **🔌 Pluggable Logger**: Console, JSON, or custom logging implementations\n- **📦 Modular Architecture**: Import only what you need from `server/core`\n- **🔄 Full A2A Protocol**: Complete implementation of the Agent2Agent specification\n\n## Installation\n\n```bash\nnpm install @drew-foxall/a2a-js-sdk\n# or\npnpm add @drew-foxall/a2a-js-sdk\n# or\nyarn add @drew-foxall/a2a-js-sdk\n```\n\n### Peer Dependencies\n\nInstall the framework you want to use:\n\n```bash\n# For Express (Node.js)\nnpm install express\n\n# For Hono (Edge/Serverless)\nnpm install hono\n\n# For Hono on Node.js (development)\nnpm install hono @hono/node-server\n```\n\n---\n\n## Quick Start\n\nThe examples below show the same \"Hello Agent\" implemented for different environments.\n\n### Shared Agent Logic\n\nFirst, define your agent card and executor (shared across all implementations):\n\n```typescript\n// shared/agent.ts\nimport { v4 as uuidv4 } from 'uuid';\nimport type { AgentCard, Message } from '@drew-foxall/a2a-js-sdk';\nimport {\n  AgentExecutor,\n  RequestContext,\n  ExecutionEventBus,\n} from '@drew-foxall/a2a-js-sdk/server';\n\nexport const helloAgentCard: AgentCard = {\n  name: 'Hello Agent',\n  description: 'A simple agent that says hello.',\n  protocolVersion: '0.3.0',\n  version: '0.1.0',\n  url: 'http://localhost:4000/',\n  skills: [{ id: 'chat', name: 'Chat', description: 'Say hello', tags: ['chat'] }],\n  capabilities: { pushNotifications: false },\n  defaultInputModes: ['text'],\n  defaultOutputModes: ['text'],\n};\n\nexport class HelloExecutor implements AgentExecutor {\n  async execute(ctx: RequestContext, eventBus: ExecutionEventBus): Promise<void> {\n    const response: Message = {\n      kind: 'message',\n      messageId: uuidv4(),\n      role: 'agent',\n      parts: [{ kind: 'text', text: 'Hello, world!' }],\n      contextId: ctx.contextId,\n    };\n    eventBus.publish(response);\n    eventBus.finished();\n  }\n  \n  cancelTask = async (): Promise<void> => {};\n}\n```\n\n---\n\n### Express Server (Node.js - Original)\n\nThe original Express implementation from upstream. Best for traditional Node.js servers.\n\n```typescript\n// server-express.ts\nimport express from 'express';\nimport {\n  DefaultRequestHandler,\n  InMemoryTaskStore,\n} from '@drew-foxall/a2a-js-sdk/server';\nimport { A2AExpressApp } from '@drew-foxall/a2a-js-sdk/server/express';\nimport { helloAgentCard, HelloExecutor } from './shared/agent';\n\nconst requestHandler = new DefaultRequestHandler(\n  helloAgentCard,\n  new InMemoryTaskStore(),\n  new HelloExecutor()\n);\n\nconst app = express();\nconst a2aApp = new A2AExpressApp(requestHandler);\n\n// Setup routes with optional base path and middleware\na2aApp.setupRoutes(app, '/a2a', [/* middlewares */]);\n\napp.listen(4000, () => {\n  console.log('🚀 Express A2A server running on http://localhost:4000');\n});\n```\n\n**Options:**\n\n```typescript\n// With custom user extractor for authentication\nconst a2aApp = new A2AExpressApp(requestHandler, async (req) => {\n  // Extract user from request (e.g., from JWT token)\n  return req.user ?? new UnauthenticatedUser();\n});\n\n// Setup with REST API enabled (in addition to JSON-RPC)\na2aApp.setupRoutes(app, '/a2a', [], '.well-known/agent-card.json');\n```\n\n---\n\n### Hono Server (Edge/Serverless)\n\nBest for Cloudflare Workers, Vercel Edge Functions, Deno Deploy, and other edge environments.\n\n```typescript\n// worker.ts - Cloudflare Workers / Edge Runtime\nimport { Hono } from 'hono';\nimport {\n  DefaultRequestHandler,\n  InMemoryTaskStore,\n} from '@drew-foxall/a2a-js-sdk/server';\nimport { A2AHonoApp } from '@drew-foxall/a2a-js-sdk/server/hono';\nimport { helloAgentCard, HelloExecutor } from './shared/agent';\n\nconst requestHandler = new DefaultRequestHandler(\n  helloAgentCard,\n  new InMemoryTaskStore(),\n  new HelloExecutor()\n);\n\nconst app = new Hono();\nconst a2aApp = new A2AHonoApp(requestHandler, {\n  enableRest: true,           // Enable REST API endpoints\n  logger: ConsoleLogger.create(),\n});\na2aApp.setupRoutes(app);\n\nexport default app;\n```\n\n**With Authentication:**\n\n```typescript\nimport { A2AHonoApp, UserBuilder } from '@drew-foxall/a2a-js-sdk/server/hono';\n\nconst userBuilder: UserBuilder = async (request) => {\n  const token = request.headers.get('Authorization')?.replace('Bearer ', '');\n  if (token) {\n    const user = await validateToken(token);\n    return user;\n  }\n  return new UnauthenticatedUser();\n};\n\nconst a2aApp = new A2AHonoApp(requestHandler, { userBuilder });\n```\n\n**Deploy to Cloudflare Workers:**\n\n```toml\n# wrangler.toml - No nodejs_compat needed!\nname = \"a2a-hello-agent\"\nmain = \"worker.ts\"\ncompatibility_date = \"2024-01-01\"\n```\n\n```bash\nwrangler deploy\n```\n\n---\n\n### Elysia Server (Bun)\n\nBest for Bun-native applications with excellent TypeScript support.\n\n```typescript\n// server-elysia.ts\nimport { Elysia } from 'elysia';\nimport { DefaultRequestHandler, InMemoryTaskStore } from '@drew-foxall/a2a-js-sdk/server';\nimport { A2AElysiaApp } from '@drew-foxall/a2a-js-sdk/server/elysia';\nimport { helloAgentCard, HelloExecutor } from './shared/agent';\n\nconst requestHandler = new DefaultRequestHandler(\n  helloAgentCard,\n  new InMemoryTaskStore(),\n  new HelloExecutor()\n);\n\nconst a2aApp = new A2AElysiaApp(requestHandler, { enableRest: true });\nconst routes = a2aApp.getRoutes('/a2a');\n\nconst app = new Elysia();\nroutes.forEach(route => {\n  app[route.method](route.path, route.handler);\n});\n\napp.listen(4000);\n```\n\n---\n\n### itty-router (Cloudflare Workers - Lightweight)\n\nBest for minimal Cloudflare Workers with the smallest bundle size.\n\n```typescript\n// worker.ts\nimport { Router } from 'itty-router';\nimport { DefaultRequestHandler, InMemoryTaskStore } from '@drew-foxall/a2a-js-sdk/server';\nimport { A2AIttyRouterApp } from '@drew-foxall/a2a-js-sdk/server/itty-router';\nimport { helloAgentCard, HelloExecutor } from './shared/agent';\n\nconst requestHandler = new DefaultRequestHandler(\n  helloAgentCard,\n  new InMemoryTaskStore(),\n  new HelloExecutor()\n);\n\nconst a2aApp = new A2AIttyRouterApp(requestHandler, { enableRest: true });\nconst routes = a2aApp.getRoutes('/a2a');\n\nconst router = Router();\nroutes.forEach(route => {\n  router[route.method.toLowerCase()](route.pattern, route.handler);\n});\n\nexport default { fetch: router.handle };\n```\n\n---\n\n### Fresh (Deno)\n\nBest for Deno's web framework with file-based routing.\n\n```typescript\n// routes/a2a/[...path].ts\nimport { DefaultRequestHandler, InMemoryTaskStore } from '@drew-foxall/a2a-js-sdk/server';\nimport { A2AFreshApp } from '@drew-foxall/a2a-js-sdk/server/fresh';\nimport { helloAgentCard, HelloExecutor } from '../../shared/agent.ts';\n\nconst requestHandler = new DefaultRequestHandler(\n  helloAgentCard,\n  new InMemoryTaskStore(),\n  new HelloExecutor()\n);\n\nconst a2aApp = new A2AFreshApp(requestHandler, { enableRest: true });\n\nexport const handler = a2aApp.createHandlers('/a2a');\n```\n\n---\n\n### Client\n\nThe client works with any A2A server implementation:\n\n```typescript\nimport { A2AClient } from '@drew-foxall/a2a-js-sdk/client';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst client = await A2AClient.fromCardUrl('http://localhost:4000/.well-known/agent-card.json');\n\nconst response = await client.sendMessage({\n  message: {\n    messageId: uuidv4(),\n    role: 'user',\n    parts: [{ kind: 'text', text: 'Hi there!' }],\n    kind: 'message',\n  },\n});\n\nconsole.log('Response:', response);\n```\n\n---\n\n## 🏗️ Architecture\n\nThis SDK uses a layered architecture separating framework-agnostic logic from framework-specific implementations:\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                       Transport Layer                           │\n│   ┌────────────────────────┐    ┌──────────────────────┐        │\n│   │ JsonRpcTransportHandler│    │ RestTransportHandler │        │\n│   └──────────┬─────────────┘    └──────────┬───────────┘        │\n│              └───────────────┬─────────────┘                    │\n│                              ▼                                  │\n│             ┌────────────────────────────────┐                  │\n│             │      A2ARequestHandler         │                  │\n│             │   (Framework-Agnostic Logic)   │                  │\n│             └────────────────────────────────┘                  │\n└─────────────────────────────────────────────────────────────────┘\n                               │\n            ┌──────────────────┼──────────────────┐\n            ▼                  ▼                  ▼\n    ┌───────────────┐  ┌───────────────┐  ┌───────────────┐\n    │  server/core  │  │ server/hono   │  │server/express │\n    │(Web Standard) │  │ server/elysia │  │  (Original)   │\n    │               │  │    etc...     │  │               │\n    └───────────────┘  └───────────────┘  └───────────────┘\n```\n\n### Import Paths\n\n```typescript\n// Core utilities (logging, routes, streaming)\nimport { \n  ConsoleLogger, JsonLogger, NoopLogger,\n  HTTP_STATUS, REST_ROUTES, AGENT_CARD_ROUTE,\n  processStream, createSSEEvent,\n} from '@drew-foxall/a2a-js-sdk/server/core';\n\n// Framework implementations\nimport { A2AExpressApp } from '@drew-foxall/a2a-js-sdk/server/express';           // Original Express\nimport { A2AExpressApp } from '@drew-foxall/a2a-js-sdk/server/express-adapter';   // Core-based Express\nimport { A2AHonoApp } from '@drew-foxall/a2a-js-sdk/server/hono';\nimport { A2AElysiaApp } from '@drew-foxall/a2a-js-sdk/server/elysia';\nimport { A2AIttyRouterApp } from '@drew-foxall/a2a-js-sdk/server/itty-router';\nimport { A2AFreshApp } from '@drew-foxall/a2a-js-sdk/server/fresh';\nimport { A2AWebStandardApp } from '@drew-foxall/a2a-js-sdk/server/web-standard';\n```\n\n### Available Frameworks\n\n| Framework | Import Path | Best For |\n|-----------|-------------|----------|\n| **Express** (Original) | `server/express` | Node.js servers (reference implementation) |\n| **Express** (Core-based) | `server/express-adapter` | Parity testing with edge implementations |\n| **Hono** | `server/hono` | Cloudflare Workers, Deno, Bun |\n| **Elysia** | `server/elysia` | Bun-native with excellent TypeScript |\n| **itty-router** | `server/itty-router` | Lightweight Cloudflare Workers |\n| **Fresh** | `server/fresh` | Deno's web framework |\n| **Web Standard** | `server/web-standard` | Any runtime with Request/Response |\n\n---\n\n## ⚡ Edge Runtime Support\n\nThis SDK uses web-standard APIs, making it compatible with all modern JavaScript runtimes:\n\n| Runtime | Status | Notes |\n|---------|--------|-------|\n| **Cloudflare Workers** | ✅ Native | No `nodejs_compat` needed |\n| **Vercel Edge Functions** | ✅ Native | Full support |\n| **Deno Deploy** | ✅ Native | No npm shims required |\n| **Bun** | ✅ Native | Full web API support |\n| **Node.js 15+** | ✅ Native | EventTarget built-in |\n| **Browsers** | ✅ Native | Universal JavaScript |\n\n### Why Edge?\n\n| Traditional (Express) | Edge (Hono) |\n|-----------------------|-------------|\n| Runs on dedicated servers | Runs at the edge, close to users |\n| Cold starts in seconds | Cold starts in milliseconds |\n| Requires `nodejs_compat` on CF Workers | Native edge runtime support |\n| Full Node.js API access | Web-standard APIs only |\n| Best for complex backends | Best for low-latency agents |\n\n---\n\n## 📚 Core Features\n\n### Streaming (SSE)\n\n```typescript\n// Server: Publish events\neventBus.publish({ kind: 'status-update', taskId, status: { state: 'working' }, final: false });\neventBus.publish({ kind: 'artifact-update', taskId, artifact: { ... } });\neventBus.publish({ kind: 'status-update', taskId, status: { state: 'completed' }, final: true });\neventBus.finished();\n\n// Client: Consume stream\nconst stream = client.sendMessageStream(params);\nfor await (const event of stream) {\n  console.log(event.kind, event);\n}\n```\n\n### Middleware Support\n\nAll framework implementations support middleware:\n\n```typescript\n// Express\na2aApp.setupRoutes(app, '/a2a', [authMiddleware, loggingMiddleware]);\n\n// Hono\na2aApp.setupRoutes(app, '/a2a', [authMiddleware, loggingMiddleware]);\n```\n\n### Push Notifications\n\nFor long-running tasks, configure push notifications:\n\n```typescript\nconst sendParams = {\n  message: { ... },\n  configuration: {\n    pushNotificationConfig: {\n      url: 'https://my-app.com/webhook',\n      token: 'auth-token',\n    },\n  },\n};\n```\n\n### Custom Logging\n\n```typescript\nimport { ConsoleLogger, JsonLogger, NoopLogger } from '@drew-foxall/a2a-js-sdk/server/core';\n\n// Human-readable for development\nconst devLogger = ConsoleLogger.create('debug');\n\n// Structured JSON for production\nconst prodLogger = JsonLogger.create();\n\n// Silent for testing\nconst testLogger = NoopLogger.create();\n```\n\n---\n\n## 🔄 Upstream Tracking\n\nThis fork tracks the official [a2aproject/a2a-js](https://github.com/a2aproject/a2a-js) repository:\n\n| This Fork | Upstream |\n|-----------|----------|\n| v0.4.0 | v0.3.6 |\n\n### Staying in Sync\n\n```bash\ngit remote add upstream https://github.com/a2aproject/a2a-js.git\ngit fetch upstream\ngit merge upstream/main\n```\n\n---\n\n## 🔗 Related\n\n- [A2A Protocol Specification](https://google-a2a.github.io/A2A)\n- [Official A2A JS SDK](https://github.com/a2aproject/a2a-js)\n- [A2A Samples](https://github.com/google-a2a/a2a-samples)\n\n## License\n\n[Apache 2.0](LICENSE)\n\n## Contributing\n\nContributions are welcome! Please open an issue or pull request.\n\n- **Edge/Framework improvements**: Submit PRs to this repository\n- **A2A Protocol issues**: Report to the [official repository](https://github.com/a2aproject/a2a-js)\n","readmeFilename":"README.md"}