{"version":3,"sources":["../src/a2a.ts"],"names":["A2A_PROTOCOL_VERSION","isRecord","value","validateAgentCard","raw","skills","s","i"],"mappings":"aASO,IAAMA,CAAAA,CAAuB,UAoFpC,SAASC,CAAAA,CAASC,CAAAA,CAAkD,CAClE,OAAO,OAAOA,CAAAA,EAAU,QAAA,EAAYA,CAAAA,GAAU,IAAA,EAAQ,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAK,CAC5E,CAEO,SAASC,EAAkBC,CAAAA,CAA4B,CAC5D,GAAI,CAACH,CAAAA,CAASG,CAAG,EAAG,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA,CACvE,GAAI,OAAOA,CAAAA,CAAI,EAAA,EAAO,QAAA,CAAU,MAAM,IAAI,KAAA,CAAM,uBAAuB,CAAA,CACvE,GAAI,OAAOA,CAAAA,CAAI,IAAA,EAAS,QAAA,CAAU,MAAM,IAAI,KAAA,CAAM,yBAAyB,CAAA,CAC3E,GAAI,OAAOA,EAAI,OAAA,EAAY,QAAA,CAAU,MAAM,IAAI,KAAA,CAAM,4BAA4B,EACjF,GAAI,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAAA,CAAI,MAAM,EAAG,MAAM,IAAI,KAAA,CAAM,gCAAgC,CAAA,CAChF,IAAMC,EAASD,CAAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAACE,CAAAA,CAAYC,CAAAA,GAAc,CACvD,GAAI,CAACN,CAAAA,CAASK,CAAC,CAAA,EAAK,OAAOA,EAAE,IAAA,EAAS,QAAA,CACpC,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAeC,CAAC,CAAA,uBAAA,CAAyB,CAAA,CAE3D,OAAOD,CACT,CAAC,CAAA,CACD,OAAO,CAAE,GAAIF,CAAAA,CAAiC,MAAA,CAAAC,CAAO,CACvD","file":"a2a.cjs","sourcesContent":["/**\n * Agent-to-Agent Protocol (A2A) — minimal open spec for one agent to\n * invoke another over JSON-RPC 2.0. Companion to MCP (which is\n * model-to-tool); A2A is agent-to-agent task delegation, approvals,\n * and streaming status updates.\n *\n * Version: 2026-04.\n */\n\nexport const A2A_PROTOCOL_VERSION = '2026-04'\n\nexport interface A2AAgentCard {\n  /** Stable identifier (reverse-DNS or npm scope recommended). */\n  id: string\n  name: string\n  description?: string\n  version: string\n  /** Skills the agent advertises. */\n  skills: A2ASkillDescriptor[]\n  /** Optional JSON Schema for expected context on `task/invoke`. */\n  contextSchema?: Record<string, unknown>\n  /** Human-facing URL (docs, source, demo). */\n  homepage?: string\n  /** Icon URL for marketplaces. */\n  icon?: string\n}\n\nexport interface A2ASkillDescriptor {\n  name: string\n  description?: string\n  /** JSON Schema of the expected task input. */\n  inputSchema?: Record<string, unknown>\n  /** Advertised capabilities the caller can rely on. */\n  capabilities?: {\n    streaming?: boolean\n    cancellation?: boolean\n    requiresApproval?: boolean\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Wire protocol — JSON-RPC 2.0 methods\n// ---------------------------------------------------------------------------\n\nexport interface A2AInvokeParams {\n  skill: string\n  input: Record<string, unknown>\n  /** Caller context (user id, tenant, trace id). */\n  context?: Record<string, unknown>\n  /** Set true for streaming via `task/status` notifications. */\n  stream?: boolean\n}\n\nexport interface A2AInvokeResult {\n  taskId: string\n  /** Terminal state for non-streaming invocations; 'running' for stream. */\n  status: 'completed' | 'failed' | 'running' | 'requires-approval'\n  output?: Record<string, unknown>\n  error?: { code: number; message: string; data?: unknown }\n}\n\nexport interface A2ATaskStatusNotification {\n  taskId: string\n  status: 'running' | 'completed' | 'failed' | 'requires-approval'\n  progress?: number\n  partial?: Record<string, unknown>\n  output?: Record<string, unknown>\n  error?: { code: number; message: string }\n}\n\nexport interface A2ACancelParams {\n  taskId: string\n  reason?: string\n}\n\nexport interface A2AApproveParams {\n  taskId: string\n  decision: 'approved' | 'rejected'\n  approver?: string\n  metadata?: Record<string, unknown>\n}\n\nexport type A2AMethod =\n  | 'agent/card'\n  | 'task/invoke'\n  | 'task/cancel'\n  | 'task/approve'\n  | 'task/status'\n\n// ---------------------------------------------------------------------------\n// Minimal validator\n// ---------------------------------------------------------------------------\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function validateAgentCard(raw: unknown): A2AAgentCard {\n  if (!isRecord(raw)) throw new Error('A2A: agent card must be an object')\n  if (typeof raw.id !== 'string') throw new Error('A2A: card.id required')\n  if (typeof raw.name !== 'string') throw new Error('A2A: card.name required')\n  if (typeof raw.version !== 'string') throw new Error('A2A: card.version required')\n  if (!Array.isArray(raw.skills)) throw new Error('A2A: card.skills must be array')\n  const skills = raw.skills.map((s: unknown, i: number) => {\n    if (!isRecord(s) || typeof s.name !== 'string') {\n      throw new Error(`A2A: skills[${i}].name must be a string`)\n    }\n    return s as unknown as A2ASkillDescriptor\n  })\n  return { ...(raw as unknown as A2AAgentCard), skills }\n}\n"]}