{"_id":"@a2akit/core","_rev":"2-f7a620db10979e6982df2c5af52235e7","name":"@a2akit/core","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@a2akit/core","version":"0.1.0","keywords":["a2a","agent","ai","protocol","decorators","typescript","json-rpc","sse","agent-to-agent"],"author":"","license":"MIT","_id":"@a2akit/core@0.1.0","maintainers":[{"name":"mcpkit-dev","email":"chechavalera@gmail.com"}],"homepage":"https://github.com/a2akit/a2akit/tree/main/packages/core#readme","bugs":{"url":"https://github.com/a2akit/a2akit/issues"},"dist":{"shasum":"9fbaa9927abf3b06791e7e058e5a2fd8d09fc98b","tarball":"https://registry.npmjs.org/@a2akit/core/-/core-0.1.0.tgz","fileCount":16,"integrity":"sha512-8XKM7Zg070fhj37rfrfZ0Dfwv3Tn18KU4KSJ4cXqHms8u4gtmtlSCfbdHb8OShRi+fpZB1X0oYNsYyzePBLdWg==","signatures":[{"sig":"MEUCIQDp7SoaS0IStT7uW2Pf9ffI3VxKdPVe7A9YEt1on+vVBQIgVmE8DZhl7Fe6FVYZtV5+bZrAmsgVM+etKazvdFLVTNM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":558958},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server/index.d.ts","default":"./dist/server/index.js"},"require":{"types":"./dist/server/index.d.cts","default":"./dist/server/index.cjs"}}},"gitHead":"bb05509f7e0cb8cf48989ed9e79c7f27e56e331f","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"mcpkit-dev","email":"chechavalera@gmail.com"},"repository":{"url":"git+https://github.com/a2akit/a2akit.git","type":"git","directory":"packages/core"},"_npmVersion":"10.9.0","description":"A TypeScript library for creating A2A protocol servers with decorators","directories":{},"sideEffects":false,"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","reflect-metadata":"^0.2.0","@vitest/coverage-v8":"^1.0.0"},"peerDependencies":{"reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"reflect-metadata":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.0_1768232537192_0.14879417005278017","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@a2akit/core","version":"0.2.0","description":"A TypeScript library for creating A2A protocol servers with decorators","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./server":{"import":{"types":"./dist/server/index.d.ts","default":"./dist/server/index.js"},"require":{"types":"./dist/server/index.d.cts","default":"./dist/server/index.cjs"}}},"sideEffects":false,"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},"repository":{"type":"git","url":"git+https://github.com/a2akit/a2akit.git","directory":"packages/core"},"bugs":{"url":"https://github.com/a2akit/a2akit/issues"},"homepage":"https://github.com/a2akit/a2akit/tree/main/packages/core#readme","keywords":["a2a","agent","ai","protocol","decorators","typescript","json-rpc","sse","agent-to-agent"],"author":"","license":"MIT","peerDependencies":{"reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"reflect-metadata":{"optional":false}},"devDependencies":{"@types/node":"^20.10.0","reflect-metadata":"^0.2.0","tsup":"^8.0.0","typescript":"^5.3.0","vitest":"^1.0.0","@vitest/coverage-v8":"^1.0.0"},"engines":{"node":">=18.0.0"},"_id":"@a2akit/core@0.2.0","gitHead":"32d26bcd61c687b9836790fd5f413c781c5a25d5","_nodeVersion":"22.11.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-wxXtcNDz18XymAAtTj/LyqgRt9C0XGNCZfMn68tr+HzUw1bU64ChThoS6FADg/RUcpJ+4o6YPTGlckjERDZiBQ==","shasum":"15d9341b112c020ace17e2245a6bd0437a0ac99c","tarball":"https://registry.npmjs.org/@a2akit/core/-/core-0.2.0.tgz","fileCount":16,"unpackedSize":558849,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB1YFG6axu8l2N/UieYc66NrgzZ2jBGWNPZ3l3wAYDHnAiEArOaSpGOntnm03EGBfaGAlxGKA/jIbVLSnFITyQwNp4c="}]},"_npmUser":{"name":"mcpkit-dev","email":"chechavalera@gmail.com"},"directories":{},"maintainers":[{"name":"mcpkit-dev","email":"chechavalera@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.2.0_1768292377780_0.48306359767161466"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-12T15:42:17.118Z","modified":"2026-01-13T08:19:38.142Z","0.1.0":"2026-01-12T15:42:17.355Z","0.2.0":"2026-01-13T08:19:37.933Z"},"bugs":{"url":"https://github.com/a2akit/a2akit/issues"},"license":"MIT","homepage":"https://github.com/a2akit/a2akit/tree/main/packages/core#readme","keywords":["a2a","agent","ai","protocol","decorators","typescript","json-rpc","sse","agent-to-agent"],"repository":{"type":"git","url":"git+https://github.com/a2akit/a2akit.git","directory":"packages/core"},"description":"A TypeScript library for creating A2A protocol servers with decorators","maintainers":[{"name":"mcpkit-dev","email":"chechavalera@gmail.com"}],"readme":"# @a2akit/core\n\nCore library for creating A2A (Agent-to-Agent) protocol servers with TypeScript decorators.\n\n## Installation\n\n```bash\nnpm install @a2akit/core reflect-metadata\n```\n\n## Quick Start\n\n```typescript\nimport 'reflect-metadata';\nimport { A2AAgent, Skill, TextPart, A2AServer } from '@a2akit/core';\n\n@A2AAgent({\n  name: 'Greeting Agent',\n  description: 'An agent that greets users',\n  version: '1.0.0',\n})\nclass GreetingAgent {\n  @Skill({\n    name: 'Greet',\n    description: 'Greet the user by name',\n  })\n  greet(@TextPart() name: string): string {\n    return `Hello, ${name}!`;\n  }\n}\n\nconst server = new A2AServer(GreetingAgent);\nserver.listen(3000);\n```\n\n## API Reference\n\n### Decorators\n\n#### @A2AAgent(options)\n\nClass decorator for marking a class as an A2A Agent.\n\n```typescript\n@A2AAgent({\n  name: string;              // Required: Agent name\n  description: string;       // Required: Agent description\n  version: string;           // Required: Agent version\n  provider?: {               // Optional: Provider info\n    organization: string;\n    url?: string;\n  };\n  documentationUrl?: string; // Optional: Docs URL\n  iconUrl?: string;          // Optional: Icon URL\n  defaultInputModes?: string[];  // Default: ['text']\n  defaultOutputModes?: string[]; // Default: ['text']\n})\n```\n\n#### @Skill(options)\n\nMethod decorator for marking a method as a skill.\n\n```typescript\n@Skill({\n  id?: string;               // Default: method name\n  name: string;              // Required: Skill name\n  description: string;       // Required: Skill description\n  tags?: string[];           // Optional: Tags for categorization\n  examples?: string[];       // Optional: Example usage\n  inputModes?: string[];     // Optional: Override agent defaults\n  outputModes?: string[];    // Optional: Override agent defaults\n})\n```\n\n#### @Streaming()\n\nMethod decorator for marking a skill as streaming.\n\n```typescript\n@Skill({ name: 'Stream', description: 'Stream response' })\n@Streaming()\nasync *streamResponse(): AsyncGenerator<string> {\n  yield 'Part 1...';\n  yield 'Part 2...';\n}\n```\n\n### Parameter Decorators\n\n| Decorator | Description |\n|-----------|-------------|\n| `@TextPart(index?)` | Extract text content from message |\n| `@FilePart(index?)` | Extract file content from message |\n| `@DataPart(index?)` | Extract structured data from message |\n| `@Message()` | Get the full message object |\n| `@TaskContext()` | Get the task context |\n| `@Parts()` | Get all message parts |\n\n### Server\n\n#### A2AServer\n\nBuilt-in HTTP server using Node.js `http` module.\n\n```typescript\nconst server = new A2AServer(AgentClass, {\n  basePath: '/api',  // Optional path prefix\n});\n\nserver.listen(3000, () => {\n  console.log('Server running on port 3000');\n});\n```\n\n### Types\n\n#### Task\n\n```typescript\ninterface Task {\n  id: string;\n  contextId?: string;\n  status: TaskStatus;\n  artifacts?: Artifact[];\n  history?: Message[];\n  metadata?: Record<string, unknown>;\n}\n```\n\n#### Message\n\n```typescript\ninterface Message {\n  messageId?: string;\n  role: 'user' | 'agent';\n  parts: Part[];\n  metadata?: Record<string, unknown>;\n}\n```\n\n#### Part Types\n\n```typescript\ntype Part = TextPart | FilePart | DataPart;\n\ninterface TextPart {\n  type: 'text';\n  text: string;\n}\n\ninterface FilePart {\n  type: 'file';\n  file: FileContent;\n}\n\ninterface DataPart {\n  type: 'data';\n  data: Record<string, unknown> | unknown[];\n}\n```\n\n### Task Management\n\n#### TaskManager\n\nIn-memory task storage and lifecycle management.\n\n```typescript\nconst manager = new TaskManager();\n\n// Create task\nconst task = manager.create({ id: 'task-1' });\n\n// Update status\nmanager.setWorking('task-1');\nmanager.setCompleted('task-1', message);\n\n// Query\nconst task = manager.get('task-1');\nconst task = manager.getOrThrow('task-1');\n```\n\n### Errors\n\n| Error Class | Description |\n|-------------|-------------|\n| `A2AError` | Base error class |\n| `TaskNotFoundError` | Task not found |\n| `TaskNotCancelableError` | Task cannot be canceled |\n| `InvalidStateTransitionError` | Invalid state transition |\n| `SkillNotFoundError` | Skill not found |\n| `InvalidParamsError` | Invalid parameters |\n\n### Utilities\n\n#### generateAgentCard\n\nGenerate an Agent Card from a decorated class.\n\n```typescript\nconst card = generateAgentCard(AgentClass, {\n  baseUrl: 'http://localhost:3000',\n});\n```\n\n#### Validation Functions\n\n```typescript\nimport { validateMessage, validatePart, isValidMessage } from '@a2akit/core';\n\nvalidateMessage(message);  // Throws on invalid\nisValidMessage(message);   // Returns boolean\n```\n\n## Examples\n\n### Basic Agent\n\n```typescript\n@A2AAgent({\n  name: 'Calculator',\n  description: 'A simple calculator',\n  version: '1.0.0',\n})\nclass Calculator {\n  @Skill({ name: 'Add', description: 'Add two numbers' })\n  add(@DataPart() data: { a: number; b: number }): string {\n    return `Result: ${data.a + data.b}`;\n  }\n}\n```\n\n### Streaming Agent\n\n```typescript\n@A2AAgent({\n  name: 'Counter',\n  description: 'Counts to a number',\n  version: '1.0.0',\n})\nclass Counter {\n  @Skill({ name: 'Count', description: 'Count to N' })\n  @Streaming()\n  async *count(@TextPart() input: string): AsyncGenerator<string> {\n    const n = parseInt(input, 10);\n    for (let i = 1; i <= n; i++) {\n      yield `${i}...`;\n      await new Promise(r => setTimeout(r, 100));\n    }\n    yield 'Done!';\n  }\n}\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}