kavachos 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/a2a/index.d.ts +1 -1
  2. package/dist/a2a/index.js +7 -2
  3. package/dist/a2a/index.js.map +1 -1
  4. package/dist/agent/index.d.ts +2 -2
  5. package/dist/agent/index.js +789 -4
  6. package/dist/agent/index.js.map +1 -1
  7. package/dist/audit/index.d.ts +1 -1
  8. package/dist/audit/index.js +635 -3
  9. package/dist/audit/index.js.map +1 -1
  10. package/dist/auth/index.d.ts +599 -3
  11. package/dist/auth/index.js +14668 -4
  12. package/dist/auth/index.js.map +1 -1
  13. package/dist/crypto/index.js +184 -2
  14. package/dist/crypto/index.js.map +1 -1
  15. package/dist/index.d.ts +247 -4
  16. package/dist/index.js +16577 -161
  17. package/dist/index.js.map +1 -1
  18. package/dist/mcp/index.js +19 -2
  19. package/dist/mcp/index.js.map +1 -1
  20. package/dist/permission/index.d.ts +2 -2
  21. package/dist/permission/index.js +790 -4
  22. package/dist/permission/index.js.map +1 -1
  23. package/dist/redirect/index.js +290 -3
  24. package/dist/redirect/index.js.map +1 -1
  25. package/dist/{types-6D7iJvGD.d.ts → types-5Ua5KlPc.d.ts} +218 -4
  26. package/dist/vc/index.js +542 -3
  27. package/dist/vc/index.js.map +1 -1
  28. package/package.json +39 -23
  29. package/LICENSE +0 -21
  30. package/dist/chunk-IEOOSOJ4.js +0 -12558
  31. package/dist/chunk-IEOOSOJ4.js.map +0 -1
  32. package/dist/chunk-IKTOSJ4O.js +0 -214
  33. package/dist/chunk-IKTOSJ4O.js.map +0 -1
  34. package/dist/chunk-KDL6A76K.js +0 -569
  35. package/dist/chunk-KDL6A76K.js.map +0 -1
  36. package/dist/chunk-NSBPE2FW.js +0 -15
  37. package/dist/chunk-NSBPE2FW.js.map +0 -1
  38. package/dist/chunk-NSTER7KE.js +0 -538
  39. package/dist/chunk-NSTER7KE.js.map +0 -1
  40. package/dist/chunk-QCRHJMDX.js +0 -186
  41. package/dist/chunk-QCRHJMDX.js.map +0 -1
  42. package/dist/chunk-VHKZARMM.js +0 -251
  43. package/dist/chunk-VHKZARMM.js.map +0 -1
  44. package/dist/chunk-Y3OWAJHK.js +0 -101
  45. package/dist/chunk-Y3OWAJHK.js.map +0 -1
  46. package/dist/chunk-YARXM6MQ.js +0 -288
  47. package/dist/chunk-YARXM6MQ.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import * as jose from 'jose';
2
- import { A as AgentIdentity } from '../types-6D7iJvGD.js';
2
+ import { A as AgentIdentity } from '../types-5Ua5KlPc.js';
3
3
  import { z } from 'zod';
4
4
  import { R as Result } from '../types-BuHrZcjE.js';
5
5
  import 'drizzle-orm/sqlite-core';
package/dist/a2a/index.js CHANGED
@@ -1,8 +1,13 @@
1
- import { generateId } from '../chunk-QCRHJMDX.js';
2
- import '../chunk-NSBPE2FW.js';
3
1
  import * as jose from 'jose';
4
2
  import { z } from 'zod';
5
3
 
4
+ // src/a2a/agent-card.ts
5
+
6
+ // src/crypto/web-crypto.ts
7
+ function generateId() {
8
+ return globalThis.crypto.randomUUID();
9
+ }
10
+ new TextEncoder();
6
11
  var A2A_PROTOCOL_VERSION = "0.3";
7
12
  var A2A_JSONRPC_VERSION = "2.0";
8
13
  var A2A_WELL_KNOWN_PATH = "/.well-known/agent.json";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/a2a/types.ts","../../src/a2a/agent-card.ts","../../src/a2a/client.ts","../../src/a2a/server.ts"],"names":["canceled"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * A2A (Agent-to-Agent) protocol types for KavachOS.\n *\n * Implements the Google Agent2Agent protocol specification for\n * agent interoperability. Covers Agent Cards, JSON-RPC methods,\n * task lifecycle, message/artifact types, and authentication schemes.\n *\n * @see https://a2a-protocol.org/latest/specification/\n */\n\nimport { z } from \"zod\";\nimport type { KavachError, Result } from \"../mcp/types.js\";\n\nexport type { KavachError, Result };\n\n// ─── Protocol Constants ─────────────────────────────────────────────────────\n\nexport const A2A_PROTOCOL_VERSION = \"0.3\";\nexport const A2A_JSONRPC_VERSION = \"2.0\";\nexport const A2A_WELL_KNOWN_PATH = \"/.well-known/agent.json\";\n\n// ─── Roles & States ─────────────────────────────────────────────────────────\n\nexport type A2ARole = \"user\" | \"agent\";\n\nexport type A2ATaskState =\n\t| \"submitted\"\n\t| \"working\"\n\t| \"input-required\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"canceled\"\n\t| \"auth-required\"\n\t| \"rejected\";\n\n// ─── Parts (content atoms inside messages/artifacts) ─────────────────────────\n\nexport interface A2ATextPart {\n\ttype: \"text\";\n\ttext: string;\n}\n\nexport interface A2AFilePart {\n\ttype: \"file\";\n\tfileUri: string;\n\tmimeType: string;\n\tname?: string;\n}\n\nexport interface A2ADataPart {\n\ttype: \"data\";\n\tmimeType: string;\n\tdata: string; // base64-encoded\n}\n\nexport type A2APart = A2ATextPart | A2AFilePart | A2ADataPart;\n\n// ─── Message ─────────────────────────────────────────────────────────────────\n\nexport interface A2AMessage {\n\tid: string;\n\trole: A2ARole;\n\tparts: A2APart[];\n\tcreatedAt: string;\n\tmetadata?: Record<string, unknown>;\n\treferenceTaskIds?: string[];\n}\n\n// ─── Artifact ────────────────────────────────────────────────────────────────\n\nexport interface A2AArtifact {\n\tid: string;\n\tname?: string;\n\tmimeType?: string;\n\tparts: A2APart[];\n\tmetadata?: Record<string, unknown>;\n\tcreatedAt: string;\n}\n\n// ─── Task Status ─────────────────────────────────────────────────────────────\n\nexport interface A2ATaskStatus {\n\tcode: A2ATaskState;\n\tmessage?: string;\n\tprogress?: number; // 0–100\n}\n\n// ─── Task ────────────────────────────────────────────────────────────────────\n\nexport interface A2ATask {\n\tid: string;\n\tcontextId: string;\n\tstatus: A2ATaskStatus;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\thistory?: A2AMessage[];\n\tartifacts?: A2AArtifact[];\n\tmetadata?: Record<string, unknown>;\n}\n\n// ─── Streaming Events ────────────────────────────────────────────────────────\n\nexport interface A2ATaskStatusUpdateEvent {\n\ttaskId: string;\n\tcontextId: string;\n\tnewState: A2ATaskState;\n\tnewStatus: A2ATaskStatus;\n\ttimestamp: string;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2ATaskArtifactUpdateEvent {\n\ttaskId: string;\n\tcontextId: string;\n\tartifactId: string;\n\tartifact: A2AArtifact;\n\ttimestamp: string;\n}\n\nexport type A2AStreamEvent =\n\t| { type: \"task\"; task: A2ATask }\n\t| { type: \"message\"; message: A2AMessage }\n\t| { type: \"statusUpdate\"; event: A2ATaskStatusUpdateEvent }\n\t| { type: \"artifactUpdate\"; event: A2ATaskArtifactUpdateEvent };\n\n// ─── Security Schemes (OpenAPI-style, per A2A spec) ──────────────────────────\n\nexport interface A2AApiKeySecurityScheme {\n\ttype: \"apiKey\";\n\tname: string;\n\tin: \"query\" | \"header\" | \"cookie\";\n\tdescription?: string;\n}\n\nexport interface A2AHttpSecurityScheme {\n\ttype: \"http\";\n\tscheme: string;\n\tbearerFormat?: string;\n\tdescription?: string;\n}\n\nexport interface A2AOAuth2Flow {\n\tauthorizationUrl?: string;\n\ttokenUrl?: string;\n\trefreshUrl?: string;\n\tscopes: Record<string, string>;\n}\n\nexport interface A2AOAuth2SecurityScheme {\n\ttype: \"oauth2\";\n\tflows: {\n\t\timplicit?: A2AOAuth2Flow;\n\t\tpassword?: A2AOAuth2Flow;\n\t\tclientCredentials?: A2AOAuth2Flow;\n\t\tauthorizationCode?: A2AOAuth2Flow;\n\t\tdeviceCode?: A2AOAuth2Flow;\n\t};\n\tdescription?: string;\n}\n\nexport interface A2AOidcSecurityScheme {\n\ttype: \"openIdConnect\";\n\topenIdConnectUrl: string;\n\tdescription?: string;\n}\n\nexport interface A2AMutualTlsSecurityScheme {\n\ttype: \"mutualTls\";\n\tdescription?: string;\n}\n\nexport type A2ASecurityScheme =\n\t| A2AApiKeySecurityScheme\n\t| A2AHttpSecurityScheme\n\t| A2AOAuth2SecurityScheme\n\t| A2AOidcSecurityScheme\n\t| A2AMutualTlsSecurityScheme;\n\n// ─── Agent Card ──────────────────────────────────────────────────────────────\n\nexport interface A2AAgentProvider {\n\tname: string;\n\temail?: string;\n\turl?: string;\n}\n\nexport interface A2AAgentSkill {\n\tid: string;\n\tname: string;\n\tdescription: string;\n\tinputSchema?: Record<string, unknown>;\n\toutputSchema?: Record<string, unknown>;\n\tsupportedMediaTypes?: string[];\n\ttags?: string[];\n}\n\nexport interface A2AAgentCapabilities {\n\tstreaming?: boolean;\n\tpushNotifications?: boolean;\n\textendedAgentCard?: boolean;\n}\n\nexport interface A2AAgentCardSignature {\n\talgorithm: string;\n\tsignature: string;\n\tkeyId: string;\n}\n\nexport interface A2AAgentCard {\n\tid: string;\n\tname: string;\n\tdescription: string;\n\tversion: string;\n\tprotocolVersion: string;\n\turl: string;\n\tprovider?: A2AAgentProvider;\n\tcapabilities?: A2AAgentCapabilities;\n\tskills: A2AAgentSkill[];\n\tsecuritySchemes?: Record<string, A2ASecurityScheme>;\n\tsecurity?: Array<Record<string, string[]>>;\n\tdefaultInputModes?: string[];\n\tdefaultOutputModes?: string[];\n\tdocumentationUrl?: string;\n\tsignature?: A2AAgentCardSignature;\n\tmetadata?: Record<string, unknown>;\n}\n\n// ─── JSON-RPC Envelope ───────────────────────────────────────────────────────\n\nexport interface A2AJsonRpcRequest<P = unknown> {\n\tjsonrpc: \"2.0\";\n\tid: string | number;\n\tmethod: string;\n\tparams: P;\n}\n\nexport interface A2AJsonRpcResponse<R = unknown> {\n\tjsonrpc: \"2.0\";\n\tid: string | number;\n\tresult?: R;\n\terror?: A2AJsonRpcError;\n}\n\nexport interface A2AJsonRpcError {\n\tcode: number;\n\tmessage: string;\n\tdata?: unknown;\n}\n\n// ─── JSON-RPC Standard Error Codes ───────────────────────────────────────────\n\nexport const A2A_ERROR_CODES = {\n\tPARSE_ERROR: -32700,\n\tINVALID_REQUEST: -32600,\n\tMETHOD_NOT_FOUND: -32601,\n\tINVALID_PARAMS: -32602,\n\tINTERNAL_ERROR: -32603,\n\t// A2A-specific codes (application-defined range)\n\tTASK_NOT_FOUND: -32001,\n\tAGENT_NOT_FOUND: -32002,\n\tAUTHENTICATION_REQUIRED: -32003,\n\tPERMISSION_DENIED: -32004,\n\tRATE_LIMITED: -32005,\n\tTASK_ALREADY_COMPLETED: -32006,\n} as const;\n\n// ─── JSON-RPC Method Params ──────────────────────────────────────────────────\n\nexport interface A2ASendMessageParams {\n\tmessage: A2AMessage;\n\tconfiguration?: A2ASendMessageConfiguration;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2ASendMessageConfiguration {\n\tacceptedOutputModes?: string[];\n\thistoryLength?: number;\n\treturnImmediately?: boolean;\n}\n\nexport interface A2AGetTaskParams {\n\tid: string;\n\thistoryLength?: number;\n}\n\nexport interface A2ACancelTaskParams {\n\tid: string;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2ASubscribeToTaskParams {\n\tid: string;\n}\n\n// ─── JSON-RPC Method Names ───────────────────────────────────────────────────\n\nexport const A2A_METHODS = {\n\tSEND_MESSAGE: \"message/send\",\n\tSEND_STREAMING_MESSAGE: \"message/stream\",\n\tGET_TASK: \"tasks/get\",\n\tCANCEL_TASK: \"tasks/cancel\",\n} as const;\n\n// ─── A2A Server Config ───────────────────────────────────────────────────────\n\nexport interface A2ATaskHandler {\n\t/** Handle an incoming message and produce a task result */\n\tonMessage: (message: A2AMessage, config?: A2ASendMessageConfiguration) => Promise<A2ATask>;\n\t/** Handle task cancellation */\n\tonCancel?: (taskId: string) => Promise<A2ATask>;\n\t/** Handle streaming message — yields events instead of returning a task */\n\tonMessageStream?: (\n\t\tmessage: A2AMessage,\n\t\tconfig?: A2ASendMessageConfiguration,\n\t) => AsyncIterable<A2AStreamEvent>;\n}\n\nexport interface A2AServerConfig {\n\t/** Agent card for this server */\n\tagentCard: A2AAgentCard;\n\t/** Handler for incoming tasks */\n\thandler: A2ATaskHandler;\n\t/** Validate an incoming auth token. Return the agent ID or null if invalid. */\n\tauthenticate?: (request: Request) => Promise<string | null>;\n\t/** Called after each A2A interaction for audit logging */\n\tonAudit?: (event: A2AAuditEvent) => Promise<void>;\n\t/** In-memory or external task store. Defaults to in-memory Map. */\n\ttaskStore?: A2ATaskStore;\n}\n\nexport interface A2ATaskStore {\n\tget: (taskId: string) => Promise<A2ATask | undefined>;\n\tset: (taskId: string, task: A2ATask) => Promise<void>;\n\tdelete: (taskId: string) => Promise<boolean>;\n}\n\nexport interface A2AAuditEvent {\n\tmethod: string;\n\tagentId: string | null;\n\ttaskId?: string;\n\ttimestamp: string;\n\tsuccess: boolean;\n\terror?: string;\n}\n\n// ─── A2A Client Config ───────────────────────────────────────────────────────\n\nexport interface A2AClientConfig {\n\t/** Base URL of the remote A2A agent, or a discovered Agent Card */\n\tagent: string | A2AAgentCard;\n\t/** Auth token or function that returns a token */\n\tgetAuthToken?: () => Promise<string> | string;\n\t/** Custom fetch implementation (for testing or proxying) */\n\tfetch?: typeof globalThis.fetch;\n\t/** Request timeout in milliseconds. Default: 30_000. */\n\ttimeout?: number;\n}\n\nexport interface A2AClient {\n\t/** Discover the remote agent's card from /.well-known/agent.json */\n\tdiscover: () => Promise<Result<A2AAgentCard>>;\n\t/** Send a message and get a task back */\n\tsendMessage: (params: A2ASendMessageParams) => Promise<Result<A2ATask>>;\n\t/** Get an existing task by ID */\n\tgetTask: (params: A2AGetTaskParams) => Promise<Result<A2ATask>>;\n\t/** Cancel a running task */\n\tcancelTask: (params: A2ACancelTaskParams) => Promise<Result<A2ATask>>;\n\t/** Send a streaming message and receive SSE events */\n\tsendStreamingMessage: (params: A2ASendMessageParams) => AsyncIterable<A2AStreamEvent>;\n}\n\n// ─── Zod Schemas ─────────────────────────────────────────────────────────────\n\nexport const A2ATextPartSchema = z.object({\n\ttype: z.literal(\"text\"),\n\ttext: z.string(),\n});\n\nexport const A2AFilePartSchema = z.object({\n\ttype: z.literal(\"file\"),\n\tfileUri: z.string(),\n\tmimeType: z.string(),\n\tname: z.string().optional(),\n});\n\nexport const A2ADataPartSchema = z.object({\n\ttype: z.literal(\"data\"),\n\tmimeType: z.string(),\n\tdata: z.string(),\n});\n\nexport const A2APartSchema = z.discriminatedUnion(\"type\", [\n\tA2ATextPartSchema,\n\tA2AFilePartSchema,\n\tA2ADataPartSchema,\n]);\n\nexport const A2AMessageSchema = z.object({\n\tid: z.string().min(1),\n\trole: z.enum([\"user\", \"agent\"]),\n\tparts: z.array(A2APartSchema).min(1),\n\tcreatedAt: z.string(),\n\tmetadata: z.record(z.unknown()).optional(),\n\treferenceTaskIds: z.array(z.string()).optional(),\n});\n\nexport const A2ATaskStateSchema = z.enum([\n\t\"submitted\",\n\t\"working\",\n\t\"input-required\",\n\t\"completed\",\n\t\"failed\",\n\t\"canceled\",\n\t\"auth-required\",\n\t\"rejected\",\n]);\n\nexport const A2ATaskStatusSchema = z.object({\n\tcode: A2ATaskStateSchema,\n\tmessage: z.string().optional(),\n\tprogress: z.number().min(0).max(100).optional(),\n});\n\nexport const A2AArtifactSchema = z.object({\n\tid: z.string().min(1),\n\tname: z.string().optional(),\n\tmimeType: z.string().optional(),\n\tparts: z.array(A2APartSchema).min(1),\n\tmetadata: z.record(z.unknown()).optional(),\n\tcreatedAt: z.string(),\n});\n\nexport const A2ATaskSchema = z.object({\n\tid: z.string().min(1),\n\tcontextId: z.string().min(1),\n\tstatus: A2ATaskStatusSchema,\n\tcreatedAt: z.string(),\n\tupdatedAt: z.string(),\n\thistory: z.array(A2AMessageSchema).optional(),\n\tartifacts: z.array(A2AArtifactSchema).optional(),\n\tmetadata: z.record(z.unknown()).optional(),\n});\n\nexport const A2AAgentSkillSchema = z.object({\n\tid: z.string().min(1),\n\tname: z.string().min(1),\n\tdescription: z.string(),\n\tinputSchema: z.record(z.unknown()).optional(),\n\toutputSchema: z.record(z.unknown()).optional(),\n\tsupportedMediaTypes: z.array(z.string()).optional(),\n\ttags: z.array(z.string()).optional(),\n});\n\nexport const A2AAgentProviderSchema = z.object({\n\tname: z.string().min(1),\n\temail: z.string().optional(),\n\turl: z.string().optional(),\n});\n\nexport const A2AAgentCapabilitiesSchema = z.object({\n\tstreaming: z.boolean().optional(),\n\tpushNotifications: z.boolean().optional(),\n\textendedAgentCard: z.boolean().optional(),\n});\n\nconst A2ASecuritySchemeBaseSchema = z.object({\n\tdescription: z.string().optional(),\n});\n\nexport const A2AApiKeySecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"apiKey\"),\n\tname: z.string().min(1),\n\tin: z.enum([\"query\", \"header\", \"cookie\"]),\n});\n\nexport const A2AHttpSecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"http\"),\n\tscheme: z.string().min(1),\n\tbearerFormat: z.string().optional(),\n});\n\nexport const A2AOAuth2FlowSchema = z.object({\n\tauthorizationUrl: z.string().optional(),\n\ttokenUrl: z.string().optional(),\n\trefreshUrl: z.string().optional(),\n\tscopes: z.record(z.string()),\n});\n\nexport const A2AOAuth2SecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"oauth2\"),\n\tflows: z.object({\n\t\timplicit: A2AOAuth2FlowSchema.optional(),\n\t\tpassword: A2AOAuth2FlowSchema.optional(),\n\t\tclientCredentials: A2AOAuth2FlowSchema.optional(),\n\t\tauthorizationCode: A2AOAuth2FlowSchema.optional(),\n\t\tdeviceCode: A2AOAuth2FlowSchema.optional(),\n\t}),\n});\n\nexport const A2AOidcSecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"openIdConnect\"),\n\topenIdConnectUrl: z.string().min(1),\n});\n\nexport const A2AMutualTlsSecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"mutualTls\"),\n});\n\nexport const A2ASecuritySchemeSchema = z.discriminatedUnion(\"type\", [\n\tA2AApiKeySecuritySchemeSchema,\n\tA2AHttpSecuritySchemeSchema,\n\tA2AOAuth2SecuritySchemeSchema,\n\tA2AOidcSecuritySchemeSchema,\n\tA2AMutualTlsSecuritySchemeSchema,\n]);\n\nexport const A2AAgentCardSignatureSchema = z.object({\n\talgorithm: z.string().min(1),\n\tsignature: z.string().min(1),\n\tkeyId: z.string().min(1),\n});\n\nexport const A2AAgentCardSchema = z.object({\n\tid: z.string().min(1),\n\tname: z.string().min(1),\n\tdescription: z.string(),\n\tversion: z.string().min(1),\n\tprotocolVersion: z.string().min(1),\n\turl: z.string().url(),\n\tprovider: A2AAgentProviderSchema.optional(),\n\tcapabilities: A2AAgentCapabilitiesSchema.optional(),\n\tskills: z.array(A2AAgentSkillSchema).min(1),\n\tsecuritySchemes: z.record(A2ASecuritySchemeSchema).optional(),\n\tsecurity: z.array(z.record(z.array(z.string()))).optional(),\n\tdefaultInputModes: z.array(z.string()).optional(),\n\tdefaultOutputModes: z.array(z.string()).optional(),\n\tdocumentationUrl: z.string().url().optional(),\n\tsignature: A2AAgentCardSignatureSchema.optional(),\n\tmetadata: z.record(z.unknown()).optional(),\n});\n\nexport const A2ASendMessageConfigurationSchema = z.object({\n\tacceptedOutputModes: z.array(z.string()).optional(),\n\thistoryLength: z.number().int().min(0).optional(),\n\treturnImmediately: z.boolean().optional(),\n});\n\nexport const A2ASendMessageParamsSchema = z.object({\n\tmessage: A2AMessageSchema,\n\tconfiguration: A2ASendMessageConfigurationSchema.optional(),\n\tmetadata: z.record(z.unknown()).optional(),\n});\n\nexport const A2AGetTaskParamsSchema = z.object({\n\tid: z.string().min(1),\n\thistoryLength: z.number().int().min(0).optional(),\n});\n\nexport const A2ACancelTaskParamsSchema = z.object({\n\tid: z.string().min(1),\n\tmetadata: z.record(z.unknown()).optional(),\n});\n\nexport const A2AJsonRpcRequestSchema = z.object({\n\tjsonrpc: z.literal(\"2.0\"),\n\tid: z.union([z.string(), z.number()]),\n\tmethod: z.string().min(1),\n\tparams: z.unknown(),\n});\n","/**\n * A2A Agent Card management.\n *\n * Creates, validates, signs, and verifies Agent Cards that describe\n * an agent's identity, capabilities, skills, and auth requirements\n * using the A2A protocol format.\n */\n\nimport * as jose from \"jose\";\nimport { generateId } from \"../crypto/web-crypto.js\";\nimport type { AgentIdentity } from \"../types.js\";\nimport type {\n\tA2AAgentCapabilities,\n\tA2AAgentCard,\n\tA2AAgentProvider,\n\tA2AAgentSkill,\n\tA2ASecurityScheme,\n\tResult,\n} from \"./types.js\";\nimport { A2A_PROTOCOL_VERSION, A2AAgentCardSchema } from \"./types.js\";\n\n// ─── Create Agent Card ───────────────────────────────────────────────────────\n\nexport interface CreateAgentCardInput {\n\t/** The KavachOS agent identity to build the card from */\n\tagent: Pick<AgentIdentity, \"id\" | \"name\" | \"type\">;\n\t/** The URL where this agent's A2A endpoint is hosted */\n\turl: string;\n\t/** Human-readable description of what the agent does */\n\tdescription: string;\n\t/** Semantic version of this agent */\n\tversion: string;\n\t/** Skills this agent can perform */\n\tskills: A2AAgentSkill[];\n\t/** Optional provider information */\n\tprovider?: A2AAgentProvider;\n\t/** Optional capabilities declaration */\n\tcapabilities?: A2AAgentCapabilities;\n\t/** Security schemes required to call this agent */\n\tsecuritySchemes?: Record<string, A2ASecurityScheme>;\n\t/** Security requirements (references to securitySchemes keys) */\n\tsecurity?: Array<Record<string, string[]>>;\n\t/** Default accepted input MIME types */\n\tdefaultInputModes?: string[];\n\t/** Default output MIME types */\n\tdefaultOutputModes?: string[];\n\t/** Link to agent documentation */\n\tdocumentationUrl?: string;\n\t/** Arbitrary metadata */\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Create an A2A-compliant Agent Card from a KavachOS agent identity.\n *\n * Maps KavachOS agent fields to the A2A Agent Card format and sets\n * the protocol version automatically.\n */\nexport function createAgentCard(input: CreateAgentCardInput): A2AAgentCard {\n\tconst card: A2AAgentCard = {\n\t\tid: input.agent.id,\n\t\tname: input.agent.name,\n\t\tdescription: input.description,\n\t\tversion: input.version,\n\t\tprotocolVersion: A2A_PROTOCOL_VERSION,\n\t\turl: input.url,\n\t\tskills: input.skills,\n\t};\n\n\tif (input.provider) card.provider = input.provider;\n\tif (input.capabilities) card.capabilities = input.capabilities;\n\tif (input.securitySchemes) card.securitySchemes = input.securitySchemes;\n\tif (input.security) card.security = input.security;\n\tif (input.defaultInputModes) card.defaultInputModes = input.defaultInputModes;\n\tif (input.defaultOutputModes) card.defaultOutputModes = input.defaultOutputModes;\n\tif (input.documentationUrl) card.documentationUrl = input.documentationUrl;\n\tif (input.metadata) card.metadata = input.metadata;\n\n\treturn card;\n}\n\n// ─── Validate Agent Card ─────────────────────────────────────────────────────\n\n/**\n * Validate an incoming Agent Card against the A2A schema.\n *\n * Returns the parsed card on success or a structured error on failure.\n */\nexport function validateAgentCard(card: unknown): Result<A2AAgentCard> {\n\tconst parsed = A2AAgentCardSchema.safeParse(card);\n\tif (!parsed.success) {\n\t\tconst issues = parsed.error.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"A2A_INVALID_AGENT_CARD\",\n\t\t\t\tmessage: `Invalid Agent Card: ${issues.join(\"; \")}`,\n\t\t\t\tdetails: { issues },\n\t\t\t},\n\t\t};\n\t}\n\treturn { success: true, data: parsed.data as A2AAgentCard };\n}\n\n// ─── Sign Agent Card ─────────────────────────────────────────────────────────\n\nexport interface SignAgentCardOptions {\n\t/** The Agent Card to sign */\n\tcard: A2AAgentCard;\n\t/** JWK private key used to create the signature */\n\tprivateKey: CryptoKey | jose.JWK;\n\t/** Signing algorithm. Default: \"ES256\". */\n\talgorithm?: string;\n\t/** Key ID to include in the signature. Auto-generated if not provided. */\n\tkeyId?: string;\n}\n\n/**\n * Sign an Agent Card with a private key.\n *\n * Creates a JWS compact signature over the card's canonical JSON\n * (excluding the signature field itself). The signature, algorithm,\n * and key ID are attached to the card's `signature` field.\n */\nexport async function signAgentCard(options: SignAgentCardOptions): Promise<Result<A2AAgentCard>> {\n\tconst { card, privateKey, algorithm = \"ES256\", keyId } = options;\n\n\ttry {\n\t\t// Strip existing signature before signing\n\t\tconst { signature: _ignored, ...cardWithoutSignature } = card;\n\n\t\tconst payload = new TextEncoder().encode(JSON.stringify(cardWithoutSignature));\n\n\t\tconst key =\n\t\t\t\"kty\" in (privateKey as jose.JWK)\n\t\t\t\t? await jose.importJWK(privateKey as jose.JWK, algorithm)\n\t\t\t\t: privateKey;\n\n\t\tconst kid = keyId ?? generateId();\n\n\t\tconst jws = await new jose.CompactSign(payload)\n\t\t\t.setProtectedHeader({ alg: algorithm, kid })\n\t\t\t.sign(key as CryptoKey);\n\n\t\tconst signedCard: A2AAgentCard = {\n\t\t\t...card,\n\t\t\tsignature: {\n\t\t\t\talgorithm,\n\t\t\t\tsignature: jws,\n\t\t\t\tkeyId: kid,\n\t\t\t},\n\t\t};\n\n\t\treturn { success: true, data: signedCard };\n\t} catch (err) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"A2A_SIGN_FAILED\",\n\t\t\t\tmessage: err instanceof Error ? err.message : \"Failed to sign agent card\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n// ─── Verify Agent Card ───────────────────────────────────────────────────────\n\nexport interface VerifyAgentCardOptions {\n\t/** The signed Agent Card to verify */\n\tcard: A2AAgentCard;\n\t/** JWK public key used to verify the signature */\n\tpublicKey: CryptoKey | jose.JWK;\n}\n\n/**\n * Verify a signed Agent Card's signature.\n *\n * Checks that the JWS signature in `card.signature` is valid\n * against the provided public key and that the payload matches\n * the card content (minus the signature field).\n */\nexport async function verifyAgentCard(\n\toptions: VerifyAgentCardOptions,\n): Promise<Result<{ valid: boolean; card: A2AAgentCard }>> {\n\tconst { card, publicKey } = options;\n\n\tif (!card.signature) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"A2A_NO_SIGNATURE\",\n\t\t\t\tmessage: \"Agent Card has no signature to verify\",\n\t\t\t},\n\t\t};\n\t}\n\n\ttry {\n\t\tconst { signature, ...cardWithoutSignature } = card;\n\t\tconst algorithm = signature.algorithm;\n\n\t\tconst key =\n\t\t\t\"kty\" in (publicKey as jose.JWK)\n\t\t\t\t? await jose.importJWK(publicKey as jose.JWK, algorithm)\n\t\t\t\t: publicKey;\n\n\t\tconst { payload } = await jose.compactVerify(signature.signature, key as CryptoKey);\n\n\t\tconst decoded = new TextDecoder().decode(payload);\n\t\tconst signedContent = JSON.parse(decoded) as Record<string, unknown>;\n\t\tconst currentContent = JSON.stringify(cardWithoutSignature);\n\t\tconst parsedCurrentContent = JSON.parse(currentContent) as Record<string, unknown>;\n\n\t\t// Compare the signed payload against the current card content\n\t\tconst matches = JSON.stringify(signedContent) === JSON.stringify(parsedCurrentContent);\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: { valid: matches, card },\n\t\t};\n\t} catch (err) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"A2A_VERIFY_FAILED\",\n\t\t\t\tmessage: err instanceof Error ? err.message : \"Failed to verify agent card signature\",\n\t\t\t},\n\t\t};\n\t}\n}\n","/**\n * A2A client for KavachOS.\n *\n * Discovers remote agents via /.well-known/agent.json and communicates\n * with them through JSON-RPC over HTTP. Supports message send, task\n * retrieval, cancellation, and SSE streaming.\n */\n\nimport { generateId } from \"../crypto/web-crypto.js\";\nimport type {\n\tA2AAgentCard,\n\tA2ACancelTaskParams,\n\tA2AClient,\n\tA2AClientConfig,\n\tA2AGetTaskParams,\n\tA2AJsonRpcResponse,\n\tA2ASendMessageParams,\n\tA2AStreamEvent,\n\tA2ATask,\n\tResult,\n} from \"./types.js\";\nimport {\n\tA2A_JSONRPC_VERSION,\n\tA2A_METHODS,\n\tA2A_WELL_KNOWN_PATH,\n\tA2AAgentCardSchema,\n} from \"./types.js\";\n\n// ─── Create A2A Client ──────────────────────────────────────────────────────\n\n/**\n * Create an A2A client that can discover and call remote A2A agents.\n *\n * @example\n * ```typescript\n * const client = createA2AClient({\n * agent: 'https://remote-agent.example.com',\n * getAuthToken: () => kavach.issueToken({ agentId: myAgent.id }),\n * });\n *\n * const card = await client.discover();\n * const result = await client.sendMessage({\n * message: { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }], createdAt: new Date().toISOString() },\n * });\n * ```\n */\nexport function createA2AClient(config: A2AClientConfig): A2AClient {\n\tconst fetchFn = config.fetch ?? globalThis.fetch;\n\tconst timeout = config.timeout ?? 30_000;\n\n\tlet cachedCard: A2AAgentCard | undefined;\n\n\t// Resolve the base URL from the config\n\tfunction getBaseUrl(): string {\n\t\tif (typeof config.agent === \"string\") {\n\t\t\treturn config.agent.replace(/\\/$/, \"\");\n\t\t}\n\t\treturn config.agent.url.replace(/\\/$/, \"\");\n\t}\n\n\t// If the agent was passed as a card, use it directly\n\tif (typeof config.agent !== \"string\") {\n\t\tcachedCard = config.agent;\n\t}\n\n\tasync function getAuthHeaders(): Promise<Record<string, string>> {\n\t\tif (!config.getAuthToken) return {};\n\t\tconst token = await config.getAuthToken();\n\t\treturn { Authorization: `Bearer ${token}` };\n\t}\n\n\tasync function jsonRpcCall<R>(method: string, params: unknown): Promise<Result<R>> {\n\t\tconst baseUrl = cachedCard?.url ?? getBaseUrl();\n\t\tconst authHeaders = await getAuthHeaders();\n\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), timeout);\n\n\t\ttry {\n\t\t\tconst response = await fetchFn(baseUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...authHeaders,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tjsonrpc: A2A_JSONRPC_VERSION,\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tmethod,\n\t\t\t\t\tparams,\n\t\t\t\t}),\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"A2A_HTTP_ERROR\",\n\t\t\t\t\t\tmessage: `HTTP ${response.status}: ${response.statusText}`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst body = (await response.json()) as A2AJsonRpcResponse<R>;\n\n\t\t\tif (body.error) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: `A2A_RPC_${body.error.code}`,\n\t\t\t\t\t\tmessage: body.error.message,\n\t\t\t\t\t\tdetails: body.error.data ? { data: body.error.data } : undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn { success: true, data: body.result as R };\n\t\t} catch (err) {\n\t\t\tif (err instanceof DOMException && err.name === \"AbortError\") {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"A2A_TIMEOUT\",\n\t\t\t\t\t\tmessage: `Request timed out after ${timeout}ms`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"A2A_REQUEST_FAILED\",\n\t\t\t\t\tmessage: err instanceof Error ? err.message : \"Request failed\",\n\t\t\t\t},\n\t\t\t};\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\tasync function discover(): Promise<Result<A2AAgentCard>> {\n\t\tif (cachedCard) {\n\t\t\treturn { success: true, data: cachedCard };\n\t\t}\n\n\t\tconst baseUrl = getBaseUrl();\n\t\tconst url = `${baseUrl}${A2A_WELL_KNOWN_PATH}`;\n\t\tconst authHeaders = await getAuthHeaders();\n\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), timeout);\n\n\t\ttry {\n\t\t\tconst response = await fetchFn(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: authHeaders,\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"A2A_DISCOVERY_FAILED\",\n\t\t\t\t\t\tmessage: `Discovery failed: HTTP ${response.status}`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst body: unknown = await response.json();\n\t\t\tconst parsed = A2AAgentCardSchema.safeParse(body);\n\n\t\t\tif (!parsed.success) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"A2A_INVALID_AGENT_CARD\",\n\t\t\t\t\t\tmessage: `Invalid agent card: ${parsed.error.issues.map((i) => i.message).join(\"; \")}`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tcachedCard = parsed.data as A2AAgentCard;\n\t\t\treturn { success: true, data: cachedCard };\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"A2A_DISCOVERY_FAILED\",\n\t\t\t\t\tmessage: err instanceof Error ? err.message : \"Discovery request failed\",\n\t\t\t\t},\n\t\t\t};\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\tasync function sendMessage(params: A2ASendMessageParams): Promise<Result<A2ATask>> {\n\t\treturn jsonRpcCall<A2ATask>(A2A_METHODS.SEND_MESSAGE, params);\n\t}\n\n\tasync function getTask(params: A2AGetTaskParams): Promise<Result<A2ATask>> {\n\t\treturn jsonRpcCall<A2ATask>(A2A_METHODS.GET_TASK, params);\n\t}\n\n\tasync function cancelTask(params: A2ACancelTaskParams): Promise<Result<A2ATask>> {\n\t\treturn jsonRpcCall<A2ATask>(A2A_METHODS.CANCEL_TASK, params);\n\t}\n\n\tasync function* sendStreamingMessage(\n\t\tparams: A2ASendMessageParams,\n\t): AsyncIterable<A2AStreamEvent> {\n\t\tconst baseUrl = cachedCard?.url ?? getBaseUrl();\n\t\tconst authHeaders = await getAuthHeaders();\n\n\t\tconst response = await fetchFn(baseUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\tAccept: \"text/event-stream\",\n\t\t\t\t...authHeaders,\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: A2A_JSONRPC_VERSION,\n\t\t\t\tid: generateId(),\n\t\t\t\tmethod: A2A_METHODS.SEND_STREAMING_MESSAGE,\n\t\t\t\tparams,\n\t\t\t}),\n\t\t});\n\n\t\tif (!response.ok || !response.body) {\n\t\t\tthrow new Error(`Streaming request failed: HTTP ${response.status}`);\n\t\t}\n\n\t\tconst reader = response.body.getReader();\n\t\tconst decoder = new TextDecoder();\n\t\tlet buffer = \"\";\n\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) break;\n\n\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\t\tbuffer = lines.pop() ?? \"\";\n\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tif (line.startsWith(\"data: \")) {\n\t\t\t\t\t\tconst data = line.slice(6).trim();\n\t\t\t\t\t\tif (data === \"[DONE]\") return;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tyield JSON.parse(data) as A2AStreamEvent;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Skip malformed SSE lines\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\treader.releaseLock();\n\t\t}\n\t}\n\n\treturn {\n\t\tdiscover,\n\t\tsendMessage,\n\t\tgetTask,\n\t\tcancelTask,\n\t\tsendStreamingMessage,\n\t};\n}\n","/**\n * A2A JSON-RPC server for KavachOS.\n *\n * Creates a Web API Request/Response handler that implements the A2A\n * protocol's JSON-RPC endpoint. Handles message/send, tasks/get,\n * tasks/cancel, and message/stream (SSE). Authenticates callers through\n * KavachOS and logs every interaction to the audit trail.\n */\n\nimport type {\n\tA2AAuditEvent,\n\tA2AJsonRpcError,\n\tA2AJsonRpcResponse,\n\tA2AServerConfig,\n\tA2ATask,\n\tA2ATaskStore,\n} from \"./types.js\";\nimport {\n\tA2A_ERROR_CODES,\n\tA2A_JSONRPC_VERSION,\n\tA2A_METHODS,\n\tA2A_WELL_KNOWN_PATH,\n\tA2ACancelTaskParamsSchema,\n\tA2AGetTaskParamsSchema,\n\tA2AJsonRpcRequestSchema,\n\tA2ASendMessageParamsSchema,\n} from \"./types.js\";\n\n// ─── In-memory task store (default) ──────────────────────────────────────────\n\nfunction createInMemoryTaskStore(): A2ATaskStore {\n\tconst tasks = new Map<string, A2ATask>();\n\treturn {\n\t\tasync get(taskId: string) {\n\t\t\treturn tasks.get(taskId);\n\t\t},\n\t\tasync set(taskId: string, task: A2ATask) {\n\t\t\ttasks.set(taskId, task);\n\t\t},\n\t\tasync delete(taskId: string) {\n\t\t\treturn tasks.delete(taskId);\n\t\t},\n\t};\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction jsonRpcError(id: string | number | null, error: A2AJsonRpcError): Response {\n\tconst body: A2AJsonRpcResponse = {\n\t\tjsonrpc: A2A_JSONRPC_VERSION,\n\t\tid: id ?? 0,\n\t\terror,\n\t};\n\treturn new Response(JSON.stringify(body), {\n\t\tstatus: 200, // JSON-RPC always returns 200\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t});\n}\n\nfunction jsonRpcSuccess(id: string | number, result: unknown): Response {\n\tconst body: A2AJsonRpcResponse = {\n\t\tjsonrpc: A2A_JSONRPC_VERSION,\n\t\tid,\n\t\tresult,\n\t};\n\treturn new Response(JSON.stringify(body), {\n\t\tstatus: 200,\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t});\n}\n\n// ─── Create A2A Server ───────────────────────────────────────────────────────\n\nexport interface A2AServer {\n\t/** Handle an incoming HTTP request (JSON-RPC or agent card discovery) */\n\thandleRequest: (request: Request) => Promise<Response>;\n\t/** Access the task store directly (for testing or admin) */\n\ttaskStore: A2ATaskStore;\n}\n\n/**\n * Create an A2A-compliant JSON-RPC server.\n *\n * The returned `handleRequest` function accepts standard Web API Request\n * objects and returns Response objects. Mount it at whatever path you\n * prefer; it also handles `/.well-known/agent.json` for agent card\n * discovery.\n *\n * @example\n * ```typescript\n * const server = createA2AServer({\n * agentCard: myCard,\n * handler: {\n * onMessage: async (msg) => ({ id: '...', contextId: '...', status: { code: 'completed' }, ... }),\n * },\n * authenticate: async (req) => verifyToken(req),\n * });\n *\n * // In your HTTP framework:\n * app.all('/a2a', (req) => server.handleRequest(req));\n * ```\n */\nexport function createA2AServer(config: A2AServerConfig): A2AServer {\n\tconst taskStore = config.taskStore ?? createInMemoryTaskStore();\n\n\tasync function audit(event: Omit<A2AAuditEvent, \"timestamp\">): Promise<void> {\n\t\tif (config.onAudit) {\n\t\t\tawait config.onAudit({\n\t\t\t\t...event,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t});\n\t\t}\n\t}\n\n\tasync function authenticate(\n\t\trequest: Request,\n\t): Promise<{ agentId: string | null; error: Response | null }> {\n\t\tif (!config.authenticate) {\n\t\t\treturn { agentId: null, error: null };\n\t\t}\n\n\t\tconst agentId = await config.authenticate(request);\n\t\tif (agentId === null) {\n\t\t\treturn {\n\t\t\t\tagentId: null,\n\t\t\t\terror: jsonRpcError(0, {\n\t\t\t\t\tcode: A2A_ERROR_CODES.AUTHENTICATION_REQUIRED,\n\t\t\t\t\tmessage: \"Authentication required\",\n\t\t\t\t}),\n\t\t\t};\n\t\t}\n\n\t\treturn { agentId, error: null };\n\t}\n\n\tasync function handleSendMessage(\n\t\tid: string | number,\n\t\tparams: unknown,\n\t\tagentId: string | null,\n\t): Promise<Response> {\n\t\tconst parsed = A2ASendMessageParamsSchema.safeParse(params);\n\t\tif (!parsed.success) {\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.SEND_MESSAGE,\n\t\t\t\tagentId,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Invalid params\",\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_PARAMS,\n\t\t\t\tmessage: `Invalid params: ${parsed.error.issues.map((i) => i.message).join(\"; \")}`,\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst task = await config.handler.onMessage(parsed.data.message, parsed.data.configuration);\n\n\t\t\tawait taskStore.set(task.id, task);\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.SEND_MESSAGE,\n\t\t\t\tagentId,\n\t\t\t\ttaskId: task.id,\n\t\t\t\tsuccess: true,\n\t\t\t});\n\n\t\t\treturn jsonRpcSuccess(id, task);\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : \"Internal error\";\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.SEND_MESSAGE,\n\t\t\t\tagentId,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: message,\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INTERNAL_ERROR,\n\t\t\t\tmessage,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync function handleGetTask(\n\t\tid: string | number,\n\t\tparams: unknown,\n\t\tagentId: string | null,\n\t): Promise<Response> {\n\t\tconst parsed = A2AGetTaskParamsSchema.safeParse(params);\n\t\tif (!parsed.success) {\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_PARAMS,\n\t\t\t\tmessage: \"Invalid params: id is required\",\n\t\t\t});\n\t\t}\n\n\t\tconst task = await taskStore.get(parsed.data.id);\n\t\tif (!task) {\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.GET_TASK,\n\t\t\t\tagentId,\n\t\t\t\ttaskId: parsed.data.id,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Task not found\",\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.TASK_NOT_FOUND,\n\t\t\t\tmessage: `Task ${parsed.data.id} not found`,\n\t\t\t});\n\t\t}\n\n\t\t// Trim history if historyLength specified\n\t\tlet result = task;\n\t\tif (parsed.data.historyLength !== undefined && task.history) {\n\t\t\tconst len = parsed.data.historyLength;\n\t\t\tresult = {\n\t\t\t\t...task,\n\t\t\t\thistory: len === 0 ? [] : task.history.slice(-len),\n\t\t\t};\n\t\t}\n\n\t\tawait audit({\n\t\t\tmethod: A2A_METHODS.GET_TASK,\n\t\t\tagentId,\n\t\t\ttaskId: task.id,\n\t\t\tsuccess: true,\n\t\t});\n\n\t\treturn jsonRpcSuccess(id, result);\n\t}\n\n\tasync function handleCancelTask(\n\t\tid: string | number,\n\t\tparams: unknown,\n\t\tagentId: string | null,\n\t): Promise<Response> {\n\t\tconst parsed = A2ACancelTaskParamsSchema.safeParse(params);\n\t\tif (!parsed.success) {\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_PARAMS,\n\t\t\t\tmessage: \"Invalid params: id is required\",\n\t\t\t});\n\t\t}\n\n\t\tconst existing = await taskStore.get(parsed.data.id);\n\t\tif (!existing) {\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\t\tagentId,\n\t\t\t\ttaskId: parsed.data.id,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Task not found\",\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.TASK_NOT_FOUND,\n\t\t\t\tmessage: `Task ${parsed.data.id} not found`,\n\t\t\t});\n\t\t}\n\n\t\t// Already in a terminal state\n\t\tif (\n\t\t\texisting.status.code === \"completed\" ||\n\t\t\texisting.status.code === \"failed\" ||\n\t\t\texisting.status.code === \"canceled\"\n\t\t) {\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\t\tagentId,\n\t\t\t\ttaskId: existing.id,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Task already in terminal state\",\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.TASK_ALREADY_COMPLETED,\n\t\t\t\tmessage: `Task ${parsed.data.id} is already ${existing.status.code}`,\n\t\t\t});\n\t\t}\n\n\t\tif (config.handler.onCancel) {\n\t\t\ttry {\n\t\t\t\tconst canceled = await config.handler.onCancel(parsed.data.id);\n\t\t\t\tawait taskStore.set(canceled.id, canceled);\n\t\t\t\tawait audit({\n\t\t\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\t\t\tagentId,\n\t\t\t\t\ttaskId: canceled.id,\n\t\t\t\t\tsuccess: true,\n\t\t\t\t});\n\t\t\t\treturn jsonRpcSuccess(id, canceled);\n\t\t\t} catch (err) {\n\t\t\t\tconst message = err instanceof Error ? err.message : \"Cancel failed\";\n\t\t\t\tawait audit({\n\t\t\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\t\t\tagentId,\n\t\t\t\t\ttaskId: parsed.data.id,\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: message,\n\t\t\t\t});\n\t\t\t\treturn jsonRpcError(id, {\n\t\t\t\t\tcode: A2A_ERROR_CODES.INTERNAL_ERROR,\n\t\t\t\t\tmessage,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Default cancellation\n\t\tconst canceled: A2ATask = {\n\t\t\t...existing,\n\t\t\tstatus: { code: \"canceled\", message: \"Canceled by client\" },\n\t\t\tupdatedAt: new Date().toISOString(),\n\t\t};\n\t\tawait taskStore.set(canceled.id, canceled);\n\t\tawait audit({\n\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\tagentId,\n\t\t\ttaskId: canceled.id,\n\t\t\tsuccess: true,\n\t\t});\n\t\treturn jsonRpcSuccess(id, canceled);\n\t}\n\n\tfunction handleStreamingMessage(\n\t\tid: string | number,\n\t\tparams: unknown,\n\t\tagentId: string | null,\n\t): Response {\n\t\tif (!config.handler.onMessageStream) {\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.METHOD_NOT_FOUND,\n\t\t\t\tmessage: \"Streaming not supported by this agent\",\n\t\t\t});\n\t\t}\n\n\t\tconst parsed = A2ASendMessageParamsSchema.safeParse(params);\n\t\tif (!parsed.success) {\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_PARAMS,\n\t\t\t\tmessage: \"Invalid params\",\n\t\t\t});\n\t\t}\n\n\t\tconst stream = config.handler.onMessageStream(parsed.data.message, parsed.data.configuration);\n\n\t\tconst encoder = new TextEncoder();\n\t\tconst readable = new ReadableStream({\n\t\t\tasync start(controller) {\n\t\t\t\ttry {\n\t\t\t\t\tfor await (const event of stream) {\n\t\t\t\t\t\tconst data = JSON.stringify(event);\n\t\t\t\t\t\tcontroller.enqueue(encoder.encode(`data: ${data}\\n\\n`));\n\t\t\t\t\t}\n\t\t\t\t\tcontroller.enqueue(encoder.encode(\"data: [DONE]\\n\\n\"));\n\t\t\t\t\tcontroller.close();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconst errorData = JSON.stringify({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tcode: A2A_ERROR_CODES.INTERNAL_ERROR,\n\t\t\t\t\t\t\tmessage: err instanceof Error ? err.message : \"Stream error\",\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tcontroller.enqueue(encoder.encode(`data: ${errorData}\\n\\n`));\n\t\t\t\t\tcontroller.close();\n\t\t\t\t}\n\t\t\t\t// Fire-and-forget audit\n\t\t\t\tvoid audit({\n\t\t\t\t\tmethod: A2A_METHODS.SEND_STREAMING_MESSAGE,\n\t\t\t\t\tagentId,\n\t\t\t\t\tsuccess: true,\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\n\t\treturn new Response(readable, {\n\t\t\tstatus: 200,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"text/event-stream\",\n\t\t\t\t\"Cache-Control\": \"no-cache\",\n\t\t\t\tConnection: \"keep-alive\",\n\t\t\t},\n\t\t});\n\t}\n\n\tasync function handleRequest(request: Request): Promise<Response> {\n\t\tconst url = new URL(request.url);\n\n\t\t// Agent Card discovery\n\t\tif (request.method === \"GET\" && url.pathname.endsWith(A2A_WELL_KNOWN_PATH)) {\n\t\t\treturn new Response(JSON.stringify(config.agentCard), {\n\t\t\t\tstatus: 200,\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t});\n\t\t}\n\n\t\t// Only POST for JSON-RPC\n\t\tif (request.method !== \"POST\") {\n\t\t\treturn new Response(\"Method Not Allowed\", { status: 405 });\n\t\t}\n\n\t\t// Authenticate\n\t\tconst auth = await authenticate(request);\n\t\tif (auth.error) return auth.error;\n\t\tconst agentId = auth.agentId;\n\n\t\t// Parse JSON-RPC envelope\n\t\tlet body: unknown;\n\t\ttry {\n\t\t\tbody = await request.json();\n\t\t} catch {\n\t\t\treturn jsonRpcError(null, {\n\t\t\t\tcode: A2A_ERROR_CODES.PARSE_ERROR,\n\t\t\t\tmessage: \"Invalid JSON\",\n\t\t\t});\n\t\t}\n\n\t\tconst envelope = A2AJsonRpcRequestSchema.safeParse(body);\n\t\tif (!envelope.success) {\n\t\t\treturn jsonRpcError(null, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_REQUEST,\n\t\t\t\tmessage: \"Invalid JSON-RPC request\",\n\t\t\t});\n\t\t}\n\n\t\tconst { id: reqId, method, params } = envelope.data;\n\n\t\tswitch (method) {\n\t\t\tcase A2A_METHODS.SEND_MESSAGE:\n\t\t\t\treturn handleSendMessage(reqId, params, agentId);\n\n\t\t\tcase A2A_METHODS.GET_TASK:\n\t\t\t\treturn handleGetTask(reqId, params, agentId);\n\n\t\t\tcase A2A_METHODS.CANCEL_TASK:\n\t\t\t\treturn handleCancelTask(reqId, params, agentId);\n\n\t\t\tcase A2A_METHODS.SEND_STREAMING_MESSAGE:\n\t\t\t\treturn handleStreamingMessage(reqId, params, agentId);\n\n\t\t\tdefault:\n\t\t\t\tawait audit({\n\t\t\t\t\tmethod,\n\t\t\t\t\tagentId,\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: \"Method not found\",\n\t\t\t\t});\n\t\t\t\treturn jsonRpcError(reqId, {\n\t\t\t\t\tcode: A2A_ERROR_CODES.METHOD_NOT_FOUND,\n\t\t\t\t\tmessage: `Unknown method: ${method}`,\n\t\t\t\t});\n\t\t}\n\t}\n\n\treturn { handleRequest, taskStore };\n}\n"]}
1
+ {"version":3,"sources":["../../src/crypto/web-crypto.ts","../../src/a2a/types.ts","../../src/a2a/agent-card.ts","../../src/a2a/client.ts","../../src/a2a/server.ts"],"names":["canceled"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Web Crypto API utilities for KavachOS.\n *\n * This module uses ONLY the Web Crypto API (globalThis.crypto) which is\n * available natively in Cloudflare Workers, Deno, Bun, and Node 20+.\n * No `node:crypto` imports are used, making the core package edge-compatible.\n */\n\n// ---------------------------------------------------------------------------\n// Encoding helpers\n// ---------------------------------------------------------------------------\n\nconst HEX_CHARS = \"0123456789abcdef\";\n\n/** Encode a Uint8Array as a lowercase hex string. */\nexport function toHex(bytes: Uint8Array): string {\n\tlet hex = \"\";\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tconst b = bytes[i] as number;\n\t\thex += HEX_CHARS[b >> 4] as string;\n\t\thex += HEX_CHARS[b & 0x0f] as string;\n\t}\n\treturn hex;\n}\n\n/** Decode a hex string into a Uint8Array. */\nexport function fromHex(hex: string): Uint8Array {\n\tif (hex.length % 2 !== 0) {\n\t\tthrow new Error(\"fromHex: hex string must have even length\");\n\t}\n\tconst bytes = new Uint8Array(hex.length / 2);\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tconst hi = parseInt(hex[i * 2] as string, 16);\n\t\tconst lo = parseInt(hex[i * 2 + 1] as string, 16);\n\t\tif (Number.isNaN(hi) || Number.isNaN(lo)) {\n\t\t\tthrow new Error(`fromHex: invalid hex character at position ${i * 2}`);\n\t\t}\n\t\tbytes[i] = (hi << 4) | lo;\n\t}\n\treturn bytes;\n}\n\n/** Encode a Uint8Array as a base64url string (no padding). */\nexport function toBase64Url(bytes: Uint8Array): string {\n\tlet binary = \"\";\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tbinary += String.fromCharCode(bytes[i] as number);\n\t}\n\treturn btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\n\n/** Decode a base64url string into a Uint8Array. */\nexport function fromBase64Url(b64: string): Uint8Array {\n\t// Restore standard base64\n\tlet base64 = b64.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\t// Add padding\n\twhile (base64.length % 4 !== 0) {\n\t\tbase64 += \"=\";\n\t}\n\tconst binary = atob(base64);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let i = 0; i < binary.length; i++) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\treturn bytes;\n}\n\n// ---------------------------------------------------------------------------\n// Random generation\n// ---------------------------------------------------------------------------\n\n/** Generate a v4 UUID using the globally available crypto.randomUUID(). */\nexport function generateId(): string {\n\treturn globalThis.crypto.randomUUID();\n}\n\n/** Generate cryptographically secure random bytes as a Uint8Array. */\nexport function randomBytes(length: number): Uint8Array {\n\tconst bytes = new Uint8Array(length);\n\tglobalThis.crypto.getRandomValues(bytes);\n\treturn bytes;\n}\n\n/** Generate cryptographically secure random bytes as a hex string. */\nexport function randomBytesHex(length: number): string {\n\treturn toHex(randomBytes(length));\n}\n\n// ---------------------------------------------------------------------------\n// Text encoding helper (internal)\n// ---------------------------------------------------------------------------\n\nconst TEXT_ENCODER = new TextEncoder();\n\nfunction toBytes(data: string | Uint8Array): ArrayBuffer {\n\tif (typeof data === \"string\") {\n\t\tconst encoded = TEXT_ENCODER.encode(data);\n\t\treturn (encoded.buffer as ArrayBuffer).slice(\n\t\t\tencoded.byteOffset,\n\t\t\tencoded.byteOffset + encoded.byteLength,\n\t\t);\n\t}\n\treturn (data.buffer as ArrayBuffer).slice(data.byteOffset, data.byteOffset + data.byteLength);\n}\n\n// ---------------------------------------------------------------------------\n// Hashing\n// ---------------------------------------------------------------------------\n\n/** SHA-256 hash, returns hex string. */\nexport async function sha256(data: string | Uint8Array): Promise<string> {\n\tconst digest = await globalThis.crypto.subtle.digest(\"SHA-256\", toBytes(data));\n\treturn toHex(new Uint8Array(digest));\n}\n\n/** SHA-256 hash, returns Uint8Array. */\nexport async function sha256Raw(data: string | Uint8Array): Promise<Uint8Array> {\n\tconst digest = await globalThis.crypto.subtle.digest(\"SHA-256\", toBytes(data));\n\treturn new Uint8Array(digest);\n}\n\n/** SHA-1 hash, returns hex string. Needed for HIBP k-anonymity. */\nexport async function sha1(data: string | Uint8Array): Promise<string> {\n\tconst digest = await globalThis.crypto.subtle.digest(\"SHA-1\", toBytes(data));\n\treturn toHex(new Uint8Array(digest));\n}\n\n// ---------------------------------------------------------------------------\n// HMAC\n// ---------------------------------------------------------------------------\n\n/** Import a secret key for HMAC operations. */\nexport async function importHmacKey(\n\tkey: string | Uint8Array,\n\thash: \"SHA-256\" | \"SHA-1\" = \"SHA-256\",\n): Promise<CryptoKey> {\n\tconst keyData = typeof key === \"string\" ? TEXT_ENCODER.encode(key) : key;\n\treturn globalThis.crypto.subtle.importKey(\n\t\t\"raw\",\n\t\t(keyData.buffer as ArrayBuffer).slice(\n\t\t\tkeyData.byteOffset,\n\t\t\tkeyData.byteOffset + keyData.byteLength,\n\t\t),\n\t\t{ name: \"HMAC\", hash: { name: hash } },\n\t\tfalse,\n\t\t[\"sign\", \"verify\"],\n\t);\n}\n\n/** HMAC-SHA256 sign, returns hex string. */\nexport async function hmacSha256(\n\tkey: string | Uint8Array,\n\tdata: string | Uint8Array,\n): Promise<string> {\n\tconst cryptoKey = await importHmacKey(key, \"SHA-256\");\n\tconst signature = await globalThis.crypto.subtle.sign(\"HMAC\", cryptoKey, toBytes(data));\n\treturn toHex(new Uint8Array(signature));\n}\n\n/** HMAC-SHA256 sign, returns Uint8Array. */\nexport async function hmacSha256Raw(\n\tkey: string | Uint8Array,\n\tdata: string | Uint8Array,\n): Promise<Uint8Array> {\n\tconst cryptoKey = await importHmacKey(key, \"SHA-256\");\n\tconst signature = await globalThis.crypto.subtle.sign(\"HMAC\", cryptoKey, toBytes(data));\n\treturn new Uint8Array(signature);\n}\n\n/** HMAC-SHA1 sign, returns Uint8Array (needed for TOTP per RFC 6238). */\nexport async function hmacSha1Raw(key: Uint8Array, data: Uint8Array): Promise<Uint8Array> {\n\tconst cryptoKey = await importHmacKey(key, \"SHA-1\");\n\tconst buf = (data.buffer as ArrayBuffer).slice(\n\t\tdata.byteOffset,\n\t\tdata.byteOffset + data.byteLength,\n\t);\n\tconst signature = await globalThis.crypto.subtle.sign(\"HMAC\", cryptoKey, buf);\n\treturn new Uint8Array(signature);\n}\n\n// ---------------------------------------------------------------------------\n// PBKDF2 password hashing\n// ---------------------------------------------------------------------------\n\nconst PBKDF2_ITERATIONS = 100_000; // CF Workers caps at 100K; OWASP recommends 600K for Node.js\nconst PBKDF2_KEY_LENGTH = 64; // bytes\nconst PBKDF2_SALT_LENGTH = 32; // bytes\n\n/**\n * Hash a password using PBKDF2-SHA256.\n *\n * Returns a string in the format: `pbkdf2:iterations:salt_hex:hash_hex`\n * which is safe to store in the database.\n */\nexport async function pbkdf2Hash(\n\tpassword: string,\n\tsalt?: Uint8Array,\n\titerations?: number,\n): Promise<string> {\n\tconst actualSalt = salt ?? randomBytes(PBKDF2_SALT_LENGTH);\n\tconst actualIterations = iterations ?? PBKDF2_ITERATIONS;\n\n\tconst keyMaterial = await globalThis.crypto.subtle.importKey(\n\t\t\"raw\",\n\t\tTEXT_ENCODER.encode(password),\n\t\t\"PBKDF2\",\n\t\tfalse,\n\t\t[\"deriveBits\"],\n\t);\n\n\tconst saltBuf = (actualSalt.buffer as ArrayBuffer).slice(\n\t\tactualSalt.byteOffset,\n\t\tactualSalt.byteOffset + actualSalt.byteLength,\n\t);\n\tconst derived = await globalThis.crypto.subtle.deriveBits(\n\t\t{\n\t\t\tname: \"PBKDF2\",\n\t\t\tsalt: saltBuf,\n\t\t\titerations: actualIterations,\n\t\t\thash: \"SHA-256\",\n\t\t},\n\t\tkeyMaterial,\n\t\tPBKDF2_KEY_LENGTH * 8,\n\t);\n\n\treturn `pbkdf2:${actualIterations}:${toHex(actualSalt)}:${toHex(new Uint8Array(derived))}`;\n}\n\n/**\n * Verify a password against a stored PBKDF2 hash.\n *\n * Supports the `pbkdf2:iterations:salt:hash` format produced by `pbkdf2Hash`.\n */\nexport async function pbkdf2Verify(password: string, stored: string): Promise<boolean> {\n\tconst parts = stored.split(\":\");\n\tif (parts.length !== 4 || parts[0] !== \"pbkdf2\") {\n\t\treturn false;\n\t}\n\n\tconst iterations = parseInt(parts[1] as string, 10);\n\tconst salt = fromHex(parts[2] as string);\n\tconst storedHash = fromHex(parts[3] as string);\n\n\tif (Number.isNaN(iterations)) return false;\n\n\tconst keyMaterial = await globalThis.crypto.subtle.importKey(\n\t\t\"raw\",\n\t\tTEXT_ENCODER.encode(password),\n\t\t\"PBKDF2\",\n\t\tfalse,\n\t\t[\"deriveBits\"],\n\t);\n\n\tconst saltBuf = (salt.buffer as ArrayBuffer).slice(\n\t\tsalt.byteOffset,\n\t\tsalt.byteOffset + salt.byteLength,\n\t);\n\tconst derived = await globalThis.crypto.subtle.deriveBits(\n\t\t{\n\t\t\tname: \"PBKDF2\",\n\t\t\tsalt: saltBuf,\n\t\t\titerations,\n\t\t\thash: \"SHA-256\",\n\t\t},\n\t\tkeyMaterial,\n\t\tstoredHash.length * 8,\n\t);\n\n\treturn constantTimeEqual(new Uint8Array(derived), storedHash);\n}\n\n// ---------------------------------------------------------------------------\n// Constant-time comparison\n// ---------------------------------------------------------------------------\n\n/**\n * Constant-time comparison of two Uint8Arrays.\n * Returns false immediately if lengths differ (length is not secret).\n */\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\n\tif (a.byteLength !== b.byteLength) {\n\t\treturn false;\n\t}\n\tlet diff = 0;\n\tfor (let i = 0; i < a.byteLength; i++) {\n\t\tdiff |= (a[i] as number) ^ (b[i] as number);\n\t}\n\treturn diff === 0;\n}\n","/**\n * A2A (Agent-to-Agent) protocol types for KavachOS.\n *\n * Implements the Google Agent2Agent protocol specification for\n * agent interoperability. Covers Agent Cards, JSON-RPC methods,\n * task lifecycle, message/artifact types, and authentication schemes.\n *\n * @see https://a2a-protocol.org/latest/specification/\n */\n\nimport { z } from \"zod\";\nimport type { KavachError, Result } from \"../mcp/types.js\";\n\nexport type { KavachError, Result };\n\n// ─── Protocol Constants ─────────────────────────────────────────────────────\n\nexport const A2A_PROTOCOL_VERSION = \"0.3\";\nexport const A2A_JSONRPC_VERSION = \"2.0\";\nexport const A2A_WELL_KNOWN_PATH = \"/.well-known/agent.json\";\n\n// ─── Roles & States ─────────────────────────────────────────────────────────\n\nexport type A2ARole = \"user\" | \"agent\";\n\nexport type A2ATaskState =\n\t| \"submitted\"\n\t| \"working\"\n\t| \"input-required\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"canceled\"\n\t| \"auth-required\"\n\t| \"rejected\";\n\n// ─── Parts (content atoms inside messages/artifacts) ─────────────────────────\n\nexport interface A2ATextPart {\n\ttype: \"text\";\n\ttext: string;\n}\n\nexport interface A2AFilePart {\n\ttype: \"file\";\n\tfileUri: string;\n\tmimeType: string;\n\tname?: string;\n}\n\nexport interface A2ADataPart {\n\ttype: \"data\";\n\tmimeType: string;\n\tdata: string; // base64-encoded\n}\n\nexport type A2APart = A2ATextPart | A2AFilePart | A2ADataPart;\n\n// ─── Message ─────────────────────────────────────────────────────────────────\n\nexport interface A2AMessage {\n\tid: string;\n\trole: A2ARole;\n\tparts: A2APart[];\n\tcreatedAt: string;\n\tmetadata?: Record<string, unknown>;\n\treferenceTaskIds?: string[];\n}\n\n// ─── Artifact ────────────────────────────────────────────────────────────────\n\nexport interface A2AArtifact {\n\tid: string;\n\tname?: string;\n\tmimeType?: string;\n\tparts: A2APart[];\n\tmetadata?: Record<string, unknown>;\n\tcreatedAt: string;\n}\n\n// ─── Task Status ─────────────────────────────────────────────────────────────\n\nexport interface A2ATaskStatus {\n\tcode: A2ATaskState;\n\tmessage?: string;\n\tprogress?: number; // 0–100\n}\n\n// ─── Task ────────────────────────────────────────────────────────────────────\n\nexport interface A2ATask {\n\tid: string;\n\tcontextId: string;\n\tstatus: A2ATaskStatus;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\thistory?: A2AMessage[];\n\tartifacts?: A2AArtifact[];\n\tmetadata?: Record<string, unknown>;\n}\n\n// ─── Streaming Events ────────────────────────────────────────────────────────\n\nexport interface A2ATaskStatusUpdateEvent {\n\ttaskId: string;\n\tcontextId: string;\n\tnewState: A2ATaskState;\n\tnewStatus: A2ATaskStatus;\n\ttimestamp: string;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2ATaskArtifactUpdateEvent {\n\ttaskId: string;\n\tcontextId: string;\n\tartifactId: string;\n\tartifact: A2AArtifact;\n\ttimestamp: string;\n}\n\nexport type A2AStreamEvent =\n\t| { type: \"task\"; task: A2ATask }\n\t| { type: \"message\"; message: A2AMessage }\n\t| { type: \"statusUpdate\"; event: A2ATaskStatusUpdateEvent }\n\t| { type: \"artifactUpdate\"; event: A2ATaskArtifactUpdateEvent };\n\n// ─── Security Schemes (OpenAPI-style, per A2A spec) ──────────────────────────\n\nexport interface A2AApiKeySecurityScheme {\n\ttype: \"apiKey\";\n\tname: string;\n\tin: \"query\" | \"header\" | \"cookie\";\n\tdescription?: string;\n}\n\nexport interface A2AHttpSecurityScheme {\n\ttype: \"http\";\n\tscheme: string;\n\tbearerFormat?: string;\n\tdescription?: string;\n}\n\nexport interface A2AOAuth2Flow {\n\tauthorizationUrl?: string;\n\ttokenUrl?: string;\n\trefreshUrl?: string;\n\tscopes: Record<string, string>;\n}\n\nexport interface A2AOAuth2SecurityScheme {\n\ttype: \"oauth2\";\n\tflows: {\n\t\timplicit?: A2AOAuth2Flow;\n\t\tpassword?: A2AOAuth2Flow;\n\t\tclientCredentials?: A2AOAuth2Flow;\n\t\tauthorizationCode?: A2AOAuth2Flow;\n\t\tdeviceCode?: A2AOAuth2Flow;\n\t};\n\tdescription?: string;\n}\n\nexport interface A2AOidcSecurityScheme {\n\ttype: \"openIdConnect\";\n\topenIdConnectUrl: string;\n\tdescription?: string;\n}\n\nexport interface A2AMutualTlsSecurityScheme {\n\ttype: \"mutualTls\";\n\tdescription?: string;\n}\n\nexport type A2ASecurityScheme =\n\t| A2AApiKeySecurityScheme\n\t| A2AHttpSecurityScheme\n\t| A2AOAuth2SecurityScheme\n\t| A2AOidcSecurityScheme\n\t| A2AMutualTlsSecurityScheme;\n\n// ─── Agent Card ──────────────────────────────────────────────────────────────\n\nexport interface A2AAgentProvider {\n\tname: string;\n\temail?: string;\n\turl?: string;\n}\n\nexport interface A2AAgentSkill {\n\tid: string;\n\tname: string;\n\tdescription: string;\n\tinputSchema?: Record<string, unknown>;\n\toutputSchema?: Record<string, unknown>;\n\tsupportedMediaTypes?: string[];\n\ttags?: string[];\n}\n\nexport interface A2AAgentCapabilities {\n\tstreaming?: boolean;\n\tpushNotifications?: boolean;\n\textendedAgentCard?: boolean;\n}\n\nexport interface A2AAgentCardSignature {\n\talgorithm: string;\n\tsignature: string;\n\tkeyId: string;\n}\n\nexport interface A2AAgentCard {\n\tid: string;\n\tname: string;\n\tdescription: string;\n\tversion: string;\n\tprotocolVersion: string;\n\turl: string;\n\tprovider?: A2AAgentProvider;\n\tcapabilities?: A2AAgentCapabilities;\n\tskills: A2AAgentSkill[];\n\tsecuritySchemes?: Record<string, A2ASecurityScheme>;\n\tsecurity?: Array<Record<string, string[]>>;\n\tdefaultInputModes?: string[];\n\tdefaultOutputModes?: string[];\n\tdocumentationUrl?: string;\n\tsignature?: A2AAgentCardSignature;\n\tmetadata?: Record<string, unknown>;\n}\n\n// ─── JSON-RPC Envelope ───────────────────────────────────────────────────────\n\nexport interface A2AJsonRpcRequest<P = unknown> {\n\tjsonrpc: \"2.0\";\n\tid: string | number;\n\tmethod: string;\n\tparams: P;\n}\n\nexport interface A2AJsonRpcResponse<R = unknown> {\n\tjsonrpc: \"2.0\";\n\tid: string | number;\n\tresult?: R;\n\terror?: A2AJsonRpcError;\n}\n\nexport interface A2AJsonRpcError {\n\tcode: number;\n\tmessage: string;\n\tdata?: unknown;\n}\n\n// ─── JSON-RPC Standard Error Codes ───────────────────────────────────────────\n\nexport const A2A_ERROR_CODES = {\n\tPARSE_ERROR: -32700,\n\tINVALID_REQUEST: -32600,\n\tMETHOD_NOT_FOUND: -32601,\n\tINVALID_PARAMS: -32602,\n\tINTERNAL_ERROR: -32603,\n\t// A2A-specific codes (application-defined range)\n\tTASK_NOT_FOUND: -32001,\n\tAGENT_NOT_FOUND: -32002,\n\tAUTHENTICATION_REQUIRED: -32003,\n\tPERMISSION_DENIED: -32004,\n\tRATE_LIMITED: -32005,\n\tTASK_ALREADY_COMPLETED: -32006,\n} as const;\n\n// ─── JSON-RPC Method Params ──────────────────────────────────────────────────\n\nexport interface A2ASendMessageParams {\n\tmessage: A2AMessage;\n\tconfiguration?: A2ASendMessageConfiguration;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2ASendMessageConfiguration {\n\tacceptedOutputModes?: string[];\n\thistoryLength?: number;\n\treturnImmediately?: boolean;\n}\n\nexport interface A2AGetTaskParams {\n\tid: string;\n\thistoryLength?: number;\n}\n\nexport interface A2ACancelTaskParams {\n\tid: string;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface A2ASubscribeToTaskParams {\n\tid: string;\n}\n\n// ─── JSON-RPC Method Names ───────────────────────────────────────────────────\n\nexport const A2A_METHODS = {\n\tSEND_MESSAGE: \"message/send\",\n\tSEND_STREAMING_MESSAGE: \"message/stream\",\n\tGET_TASK: \"tasks/get\",\n\tCANCEL_TASK: \"tasks/cancel\",\n} as const;\n\n// ─── A2A Server Config ───────────────────────────────────────────────────────\n\nexport interface A2ATaskHandler {\n\t/** Handle an incoming message and produce a task result */\n\tonMessage: (message: A2AMessage, config?: A2ASendMessageConfiguration) => Promise<A2ATask>;\n\t/** Handle task cancellation */\n\tonCancel?: (taskId: string) => Promise<A2ATask>;\n\t/** Handle streaming message — yields events instead of returning a task */\n\tonMessageStream?: (\n\t\tmessage: A2AMessage,\n\t\tconfig?: A2ASendMessageConfiguration,\n\t) => AsyncIterable<A2AStreamEvent>;\n}\n\nexport interface A2AServerConfig {\n\t/** Agent card for this server */\n\tagentCard: A2AAgentCard;\n\t/** Handler for incoming tasks */\n\thandler: A2ATaskHandler;\n\t/** Validate an incoming auth token. Return the agent ID or null if invalid. */\n\tauthenticate?: (request: Request) => Promise<string | null>;\n\t/** Called after each A2A interaction for audit logging */\n\tonAudit?: (event: A2AAuditEvent) => Promise<void>;\n\t/** In-memory or external task store. Defaults to in-memory Map. */\n\ttaskStore?: A2ATaskStore;\n}\n\nexport interface A2ATaskStore {\n\tget: (taskId: string) => Promise<A2ATask | undefined>;\n\tset: (taskId: string, task: A2ATask) => Promise<void>;\n\tdelete: (taskId: string) => Promise<boolean>;\n}\n\nexport interface A2AAuditEvent {\n\tmethod: string;\n\tagentId: string | null;\n\ttaskId?: string;\n\ttimestamp: string;\n\tsuccess: boolean;\n\terror?: string;\n}\n\n// ─── A2A Client Config ───────────────────────────────────────────────────────\n\nexport interface A2AClientConfig {\n\t/** Base URL of the remote A2A agent, or a discovered Agent Card */\n\tagent: string | A2AAgentCard;\n\t/** Auth token or function that returns a token */\n\tgetAuthToken?: () => Promise<string> | string;\n\t/** Custom fetch implementation (for testing or proxying) */\n\tfetch?: typeof globalThis.fetch;\n\t/** Request timeout in milliseconds. Default: 30_000. */\n\ttimeout?: number;\n}\n\nexport interface A2AClient {\n\t/** Discover the remote agent's card from /.well-known/agent.json */\n\tdiscover: () => Promise<Result<A2AAgentCard>>;\n\t/** Send a message and get a task back */\n\tsendMessage: (params: A2ASendMessageParams) => Promise<Result<A2ATask>>;\n\t/** Get an existing task by ID */\n\tgetTask: (params: A2AGetTaskParams) => Promise<Result<A2ATask>>;\n\t/** Cancel a running task */\n\tcancelTask: (params: A2ACancelTaskParams) => Promise<Result<A2ATask>>;\n\t/** Send a streaming message and receive SSE events */\n\tsendStreamingMessage: (params: A2ASendMessageParams) => AsyncIterable<A2AStreamEvent>;\n}\n\n// ─── Zod Schemas ─────────────────────────────────────────────────────────────\n\nexport const A2ATextPartSchema = z.object({\n\ttype: z.literal(\"text\"),\n\ttext: z.string(),\n});\n\nexport const A2AFilePartSchema = z.object({\n\ttype: z.literal(\"file\"),\n\tfileUri: z.string(),\n\tmimeType: z.string(),\n\tname: z.string().optional(),\n});\n\nexport const A2ADataPartSchema = z.object({\n\ttype: z.literal(\"data\"),\n\tmimeType: z.string(),\n\tdata: z.string(),\n});\n\nexport const A2APartSchema = z.discriminatedUnion(\"type\", [\n\tA2ATextPartSchema,\n\tA2AFilePartSchema,\n\tA2ADataPartSchema,\n]);\n\nexport const A2AMessageSchema = z.object({\n\tid: z.string().min(1),\n\trole: z.enum([\"user\", \"agent\"]),\n\tparts: z.array(A2APartSchema).min(1),\n\tcreatedAt: z.string(),\n\tmetadata: z.record(z.unknown()).optional(),\n\treferenceTaskIds: z.array(z.string()).optional(),\n});\n\nexport const A2ATaskStateSchema = z.enum([\n\t\"submitted\",\n\t\"working\",\n\t\"input-required\",\n\t\"completed\",\n\t\"failed\",\n\t\"canceled\",\n\t\"auth-required\",\n\t\"rejected\",\n]);\n\nexport const A2ATaskStatusSchema = z.object({\n\tcode: A2ATaskStateSchema,\n\tmessage: z.string().optional(),\n\tprogress: z.number().min(0).max(100).optional(),\n});\n\nexport const A2AArtifactSchema = z.object({\n\tid: z.string().min(1),\n\tname: z.string().optional(),\n\tmimeType: z.string().optional(),\n\tparts: z.array(A2APartSchema).min(1),\n\tmetadata: z.record(z.unknown()).optional(),\n\tcreatedAt: z.string(),\n});\n\nexport const A2ATaskSchema = z.object({\n\tid: z.string().min(1),\n\tcontextId: z.string().min(1),\n\tstatus: A2ATaskStatusSchema,\n\tcreatedAt: z.string(),\n\tupdatedAt: z.string(),\n\thistory: z.array(A2AMessageSchema).optional(),\n\tartifacts: z.array(A2AArtifactSchema).optional(),\n\tmetadata: z.record(z.unknown()).optional(),\n});\n\nexport const A2AAgentSkillSchema = z.object({\n\tid: z.string().min(1),\n\tname: z.string().min(1),\n\tdescription: z.string(),\n\tinputSchema: z.record(z.unknown()).optional(),\n\toutputSchema: z.record(z.unknown()).optional(),\n\tsupportedMediaTypes: z.array(z.string()).optional(),\n\ttags: z.array(z.string()).optional(),\n});\n\nexport const A2AAgentProviderSchema = z.object({\n\tname: z.string().min(1),\n\temail: z.string().optional(),\n\turl: z.string().optional(),\n});\n\nexport const A2AAgentCapabilitiesSchema = z.object({\n\tstreaming: z.boolean().optional(),\n\tpushNotifications: z.boolean().optional(),\n\textendedAgentCard: z.boolean().optional(),\n});\n\nconst A2ASecuritySchemeBaseSchema = z.object({\n\tdescription: z.string().optional(),\n});\n\nexport const A2AApiKeySecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"apiKey\"),\n\tname: z.string().min(1),\n\tin: z.enum([\"query\", \"header\", \"cookie\"]),\n});\n\nexport const A2AHttpSecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"http\"),\n\tscheme: z.string().min(1),\n\tbearerFormat: z.string().optional(),\n});\n\nexport const A2AOAuth2FlowSchema = z.object({\n\tauthorizationUrl: z.string().optional(),\n\ttokenUrl: z.string().optional(),\n\trefreshUrl: z.string().optional(),\n\tscopes: z.record(z.string()),\n});\n\nexport const A2AOAuth2SecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"oauth2\"),\n\tflows: z.object({\n\t\timplicit: A2AOAuth2FlowSchema.optional(),\n\t\tpassword: A2AOAuth2FlowSchema.optional(),\n\t\tclientCredentials: A2AOAuth2FlowSchema.optional(),\n\t\tauthorizationCode: A2AOAuth2FlowSchema.optional(),\n\t\tdeviceCode: A2AOAuth2FlowSchema.optional(),\n\t}),\n});\n\nexport const A2AOidcSecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"openIdConnect\"),\n\topenIdConnectUrl: z.string().min(1),\n});\n\nexport const A2AMutualTlsSecuritySchemeSchema = A2ASecuritySchemeBaseSchema.extend({\n\ttype: z.literal(\"mutualTls\"),\n});\n\nexport const A2ASecuritySchemeSchema = z.discriminatedUnion(\"type\", [\n\tA2AApiKeySecuritySchemeSchema,\n\tA2AHttpSecuritySchemeSchema,\n\tA2AOAuth2SecuritySchemeSchema,\n\tA2AOidcSecuritySchemeSchema,\n\tA2AMutualTlsSecuritySchemeSchema,\n]);\n\nexport const A2AAgentCardSignatureSchema = z.object({\n\talgorithm: z.string().min(1),\n\tsignature: z.string().min(1),\n\tkeyId: z.string().min(1),\n});\n\nexport const A2AAgentCardSchema = z.object({\n\tid: z.string().min(1),\n\tname: z.string().min(1),\n\tdescription: z.string(),\n\tversion: z.string().min(1),\n\tprotocolVersion: z.string().min(1),\n\turl: z.string().url(),\n\tprovider: A2AAgentProviderSchema.optional(),\n\tcapabilities: A2AAgentCapabilitiesSchema.optional(),\n\tskills: z.array(A2AAgentSkillSchema).min(1),\n\tsecuritySchemes: z.record(A2ASecuritySchemeSchema).optional(),\n\tsecurity: z.array(z.record(z.array(z.string()))).optional(),\n\tdefaultInputModes: z.array(z.string()).optional(),\n\tdefaultOutputModes: z.array(z.string()).optional(),\n\tdocumentationUrl: z.string().url().optional(),\n\tsignature: A2AAgentCardSignatureSchema.optional(),\n\tmetadata: z.record(z.unknown()).optional(),\n});\n\nexport const A2ASendMessageConfigurationSchema = z.object({\n\tacceptedOutputModes: z.array(z.string()).optional(),\n\thistoryLength: z.number().int().min(0).optional(),\n\treturnImmediately: z.boolean().optional(),\n});\n\nexport const A2ASendMessageParamsSchema = z.object({\n\tmessage: A2AMessageSchema,\n\tconfiguration: A2ASendMessageConfigurationSchema.optional(),\n\tmetadata: z.record(z.unknown()).optional(),\n});\n\nexport const A2AGetTaskParamsSchema = z.object({\n\tid: z.string().min(1),\n\thistoryLength: z.number().int().min(0).optional(),\n});\n\nexport const A2ACancelTaskParamsSchema = z.object({\n\tid: z.string().min(1),\n\tmetadata: z.record(z.unknown()).optional(),\n});\n\nexport const A2AJsonRpcRequestSchema = z.object({\n\tjsonrpc: z.literal(\"2.0\"),\n\tid: z.union([z.string(), z.number()]),\n\tmethod: z.string().min(1),\n\tparams: z.unknown(),\n});\n","/**\n * A2A Agent Card management.\n *\n * Creates, validates, signs, and verifies Agent Cards that describe\n * an agent's identity, capabilities, skills, and auth requirements\n * using the A2A protocol format.\n */\n\nimport * as jose from \"jose\";\nimport { generateId } from \"../crypto/web-crypto.js\";\nimport type { AgentIdentity } from \"../types.js\";\nimport type {\n\tA2AAgentCapabilities,\n\tA2AAgentCard,\n\tA2AAgentProvider,\n\tA2AAgentSkill,\n\tA2ASecurityScheme,\n\tResult,\n} from \"./types.js\";\nimport { A2A_PROTOCOL_VERSION, A2AAgentCardSchema } from \"./types.js\";\n\n// ─── Create Agent Card ───────────────────────────────────────────────────────\n\nexport interface CreateAgentCardInput {\n\t/** The KavachOS agent identity to build the card from */\n\tagent: Pick<AgentIdentity, \"id\" | \"name\" | \"type\">;\n\t/** The URL where this agent's A2A endpoint is hosted */\n\turl: string;\n\t/** Human-readable description of what the agent does */\n\tdescription: string;\n\t/** Semantic version of this agent */\n\tversion: string;\n\t/** Skills this agent can perform */\n\tskills: A2AAgentSkill[];\n\t/** Optional provider information */\n\tprovider?: A2AAgentProvider;\n\t/** Optional capabilities declaration */\n\tcapabilities?: A2AAgentCapabilities;\n\t/** Security schemes required to call this agent */\n\tsecuritySchemes?: Record<string, A2ASecurityScheme>;\n\t/** Security requirements (references to securitySchemes keys) */\n\tsecurity?: Array<Record<string, string[]>>;\n\t/** Default accepted input MIME types */\n\tdefaultInputModes?: string[];\n\t/** Default output MIME types */\n\tdefaultOutputModes?: string[];\n\t/** Link to agent documentation */\n\tdocumentationUrl?: string;\n\t/** Arbitrary metadata */\n\tmetadata?: Record<string, unknown>;\n}\n\n/**\n * Create an A2A-compliant Agent Card from a KavachOS agent identity.\n *\n * Maps KavachOS agent fields to the A2A Agent Card format and sets\n * the protocol version automatically.\n */\nexport function createAgentCard(input: CreateAgentCardInput): A2AAgentCard {\n\tconst card: A2AAgentCard = {\n\t\tid: input.agent.id,\n\t\tname: input.agent.name,\n\t\tdescription: input.description,\n\t\tversion: input.version,\n\t\tprotocolVersion: A2A_PROTOCOL_VERSION,\n\t\turl: input.url,\n\t\tskills: input.skills,\n\t};\n\n\tif (input.provider) card.provider = input.provider;\n\tif (input.capabilities) card.capabilities = input.capabilities;\n\tif (input.securitySchemes) card.securitySchemes = input.securitySchemes;\n\tif (input.security) card.security = input.security;\n\tif (input.defaultInputModes) card.defaultInputModes = input.defaultInputModes;\n\tif (input.defaultOutputModes) card.defaultOutputModes = input.defaultOutputModes;\n\tif (input.documentationUrl) card.documentationUrl = input.documentationUrl;\n\tif (input.metadata) card.metadata = input.metadata;\n\n\treturn card;\n}\n\n// ─── Validate Agent Card ─────────────────────────────────────────────────────\n\n/**\n * Validate an incoming Agent Card against the A2A schema.\n *\n * Returns the parsed card on success or a structured error on failure.\n */\nexport function validateAgentCard(card: unknown): Result<A2AAgentCard> {\n\tconst parsed = A2AAgentCardSchema.safeParse(card);\n\tif (!parsed.success) {\n\t\tconst issues = parsed.error.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"A2A_INVALID_AGENT_CARD\",\n\t\t\t\tmessage: `Invalid Agent Card: ${issues.join(\"; \")}`,\n\t\t\t\tdetails: { issues },\n\t\t\t},\n\t\t};\n\t}\n\treturn { success: true, data: parsed.data as A2AAgentCard };\n}\n\n// ─── Sign Agent Card ─────────────────────────────────────────────────────────\n\nexport interface SignAgentCardOptions {\n\t/** The Agent Card to sign */\n\tcard: A2AAgentCard;\n\t/** JWK private key used to create the signature */\n\tprivateKey: CryptoKey | jose.JWK;\n\t/** Signing algorithm. Default: \"ES256\". */\n\talgorithm?: string;\n\t/** Key ID to include in the signature. Auto-generated if not provided. */\n\tkeyId?: string;\n}\n\n/**\n * Sign an Agent Card with a private key.\n *\n * Creates a JWS compact signature over the card's canonical JSON\n * (excluding the signature field itself). The signature, algorithm,\n * and key ID are attached to the card's `signature` field.\n */\nexport async function signAgentCard(options: SignAgentCardOptions): Promise<Result<A2AAgentCard>> {\n\tconst { card, privateKey, algorithm = \"ES256\", keyId } = options;\n\n\ttry {\n\t\t// Strip existing signature before signing\n\t\tconst { signature: _ignored, ...cardWithoutSignature } = card;\n\n\t\tconst payload = new TextEncoder().encode(JSON.stringify(cardWithoutSignature));\n\n\t\tconst key =\n\t\t\t\"kty\" in (privateKey as jose.JWK)\n\t\t\t\t? await jose.importJWK(privateKey as jose.JWK, algorithm)\n\t\t\t\t: privateKey;\n\n\t\tconst kid = keyId ?? generateId();\n\n\t\tconst jws = await new jose.CompactSign(payload)\n\t\t\t.setProtectedHeader({ alg: algorithm, kid })\n\t\t\t.sign(key as CryptoKey);\n\n\t\tconst signedCard: A2AAgentCard = {\n\t\t\t...card,\n\t\t\tsignature: {\n\t\t\t\talgorithm,\n\t\t\t\tsignature: jws,\n\t\t\t\tkeyId: kid,\n\t\t\t},\n\t\t};\n\n\t\treturn { success: true, data: signedCard };\n\t} catch (err) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"A2A_SIGN_FAILED\",\n\t\t\t\tmessage: err instanceof Error ? err.message : \"Failed to sign agent card\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n// ─── Verify Agent Card ───────────────────────────────────────────────────────\n\nexport interface VerifyAgentCardOptions {\n\t/** The signed Agent Card to verify */\n\tcard: A2AAgentCard;\n\t/** JWK public key used to verify the signature */\n\tpublicKey: CryptoKey | jose.JWK;\n}\n\n/**\n * Verify a signed Agent Card's signature.\n *\n * Checks that the JWS signature in `card.signature` is valid\n * against the provided public key and that the payload matches\n * the card content (minus the signature field).\n */\nexport async function verifyAgentCard(\n\toptions: VerifyAgentCardOptions,\n): Promise<Result<{ valid: boolean; card: A2AAgentCard }>> {\n\tconst { card, publicKey } = options;\n\n\tif (!card.signature) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"A2A_NO_SIGNATURE\",\n\t\t\t\tmessage: \"Agent Card has no signature to verify\",\n\t\t\t},\n\t\t};\n\t}\n\n\ttry {\n\t\tconst { signature, ...cardWithoutSignature } = card;\n\t\tconst algorithm = signature.algorithm;\n\n\t\tconst key =\n\t\t\t\"kty\" in (publicKey as jose.JWK)\n\t\t\t\t? await jose.importJWK(publicKey as jose.JWK, algorithm)\n\t\t\t\t: publicKey;\n\n\t\tconst { payload } = await jose.compactVerify(signature.signature, key as CryptoKey);\n\n\t\tconst decoded = new TextDecoder().decode(payload);\n\t\tconst signedContent = JSON.parse(decoded) as Record<string, unknown>;\n\t\tconst currentContent = JSON.stringify(cardWithoutSignature);\n\t\tconst parsedCurrentContent = JSON.parse(currentContent) as Record<string, unknown>;\n\n\t\t// Compare the signed payload against the current card content\n\t\tconst matches = JSON.stringify(signedContent) === JSON.stringify(parsedCurrentContent);\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: { valid: matches, card },\n\t\t};\n\t} catch (err) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"A2A_VERIFY_FAILED\",\n\t\t\t\tmessage: err instanceof Error ? err.message : \"Failed to verify agent card signature\",\n\t\t\t},\n\t\t};\n\t}\n}\n","/**\n * A2A client for KavachOS.\n *\n * Discovers remote agents via /.well-known/agent.json and communicates\n * with them through JSON-RPC over HTTP. Supports message send, task\n * retrieval, cancellation, and SSE streaming.\n */\n\nimport { generateId } from \"../crypto/web-crypto.js\";\nimport type {\n\tA2AAgentCard,\n\tA2ACancelTaskParams,\n\tA2AClient,\n\tA2AClientConfig,\n\tA2AGetTaskParams,\n\tA2AJsonRpcResponse,\n\tA2ASendMessageParams,\n\tA2AStreamEvent,\n\tA2ATask,\n\tResult,\n} from \"./types.js\";\nimport {\n\tA2A_JSONRPC_VERSION,\n\tA2A_METHODS,\n\tA2A_WELL_KNOWN_PATH,\n\tA2AAgentCardSchema,\n} from \"./types.js\";\n\n// ─── Create A2A Client ──────────────────────────────────────────────────────\n\n/**\n * Create an A2A client that can discover and call remote A2A agents.\n *\n * @example\n * ```typescript\n * const client = createA2AClient({\n * agent: 'https://remote-agent.example.com',\n * getAuthToken: () => kavach.issueToken({ agentId: myAgent.id }),\n * });\n *\n * const card = await client.discover();\n * const result = await client.sendMessage({\n * message: { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }], createdAt: new Date().toISOString() },\n * });\n * ```\n */\nexport function createA2AClient(config: A2AClientConfig): A2AClient {\n\tconst fetchFn = config.fetch ?? globalThis.fetch;\n\tconst timeout = config.timeout ?? 30_000;\n\n\tlet cachedCard: A2AAgentCard | undefined;\n\n\t// Resolve the base URL from the config\n\tfunction getBaseUrl(): string {\n\t\tif (typeof config.agent === \"string\") {\n\t\t\treturn config.agent.replace(/\\/$/, \"\");\n\t\t}\n\t\treturn config.agent.url.replace(/\\/$/, \"\");\n\t}\n\n\t// If the agent was passed as a card, use it directly\n\tif (typeof config.agent !== \"string\") {\n\t\tcachedCard = config.agent;\n\t}\n\n\tasync function getAuthHeaders(): Promise<Record<string, string>> {\n\t\tif (!config.getAuthToken) return {};\n\t\tconst token = await config.getAuthToken();\n\t\treturn { Authorization: `Bearer ${token}` };\n\t}\n\n\tasync function jsonRpcCall<R>(method: string, params: unknown): Promise<Result<R>> {\n\t\tconst baseUrl = cachedCard?.url ?? getBaseUrl();\n\t\tconst authHeaders = await getAuthHeaders();\n\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), timeout);\n\n\t\ttry {\n\t\t\tconst response = await fetchFn(baseUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...authHeaders,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tjsonrpc: A2A_JSONRPC_VERSION,\n\t\t\t\t\tid: generateId(),\n\t\t\t\t\tmethod,\n\t\t\t\t\tparams,\n\t\t\t\t}),\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"A2A_HTTP_ERROR\",\n\t\t\t\t\t\tmessage: `HTTP ${response.status}: ${response.statusText}`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst body = (await response.json()) as A2AJsonRpcResponse<R>;\n\n\t\t\tif (body.error) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: `A2A_RPC_${body.error.code}`,\n\t\t\t\t\t\tmessage: body.error.message,\n\t\t\t\t\t\tdetails: body.error.data ? { data: body.error.data } : undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn { success: true, data: body.result as R };\n\t\t} catch (err) {\n\t\t\tif (err instanceof DOMException && err.name === \"AbortError\") {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"A2A_TIMEOUT\",\n\t\t\t\t\t\tmessage: `Request timed out after ${timeout}ms`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"A2A_REQUEST_FAILED\",\n\t\t\t\t\tmessage: err instanceof Error ? err.message : \"Request failed\",\n\t\t\t\t},\n\t\t\t};\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\tasync function discover(): Promise<Result<A2AAgentCard>> {\n\t\tif (cachedCard) {\n\t\t\treturn { success: true, data: cachedCard };\n\t\t}\n\n\t\tconst baseUrl = getBaseUrl();\n\t\tconst url = `${baseUrl}${A2A_WELL_KNOWN_PATH}`;\n\t\tconst authHeaders = await getAuthHeaders();\n\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), timeout);\n\n\t\ttry {\n\t\t\tconst response = await fetchFn(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: authHeaders,\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"A2A_DISCOVERY_FAILED\",\n\t\t\t\t\t\tmessage: `Discovery failed: HTTP ${response.status}`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst body: unknown = await response.json();\n\t\t\tconst parsed = A2AAgentCardSchema.safeParse(body);\n\n\t\t\tif (!parsed.success) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"A2A_INVALID_AGENT_CARD\",\n\t\t\t\t\t\tmessage: `Invalid agent card: ${parsed.error.issues.map((i) => i.message).join(\"; \")}`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tcachedCard = parsed.data as A2AAgentCard;\n\t\t\treturn { success: true, data: cachedCard };\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"A2A_DISCOVERY_FAILED\",\n\t\t\t\t\tmessage: err instanceof Error ? err.message : \"Discovery request failed\",\n\t\t\t\t},\n\t\t\t};\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\tasync function sendMessage(params: A2ASendMessageParams): Promise<Result<A2ATask>> {\n\t\treturn jsonRpcCall<A2ATask>(A2A_METHODS.SEND_MESSAGE, params);\n\t}\n\n\tasync function getTask(params: A2AGetTaskParams): Promise<Result<A2ATask>> {\n\t\treturn jsonRpcCall<A2ATask>(A2A_METHODS.GET_TASK, params);\n\t}\n\n\tasync function cancelTask(params: A2ACancelTaskParams): Promise<Result<A2ATask>> {\n\t\treturn jsonRpcCall<A2ATask>(A2A_METHODS.CANCEL_TASK, params);\n\t}\n\n\tasync function* sendStreamingMessage(\n\t\tparams: A2ASendMessageParams,\n\t): AsyncIterable<A2AStreamEvent> {\n\t\tconst baseUrl = cachedCard?.url ?? getBaseUrl();\n\t\tconst authHeaders = await getAuthHeaders();\n\n\t\tconst response = await fetchFn(baseUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\tAccept: \"text/event-stream\",\n\t\t\t\t...authHeaders,\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: A2A_JSONRPC_VERSION,\n\t\t\t\tid: generateId(),\n\t\t\t\tmethod: A2A_METHODS.SEND_STREAMING_MESSAGE,\n\t\t\t\tparams,\n\t\t\t}),\n\t\t});\n\n\t\tif (!response.ok || !response.body) {\n\t\t\tthrow new Error(`Streaming request failed: HTTP ${response.status}`);\n\t\t}\n\n\t\tconst reader = response.body.getReader();\n\t\tconst decoder = new TextDecoder();\n\t\tlet buffer = \"\";\n\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) break;\n\n\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\t\tbuffer = lines.pop() ?? \"\";\n\n\t\t\t\tfor (const line of lines) {\n\t\t\t\t\tif (line.startsWith(\"data: \")) {\n\t\t\t\t\t\tconst data = line.slice(6).trim();\n\t\t\t\t\t\tif (data === \"[DONE]\") return;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tyield JSON.parse(data) as A2AStreamEvent;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Skip malformed SSE lines\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\treader.releaseLock();\n\t\t}\n\t}\n\n\treturn {\n\t\tdiscover,\n\t\tsendMessage,\n\t\tgetTask,\n\t\tcancelTask,\n\t\tsendStreamingMessage,\n\t};\n}\n","/**\n * A2A JSON-RPC server for KavachOS.\n *\n * Creates a Web API Request/Response handler that implements the A2A\n * protocol's JSON-RPC endpoint. Handles message/send, tasks/get,\n * tasks/cancel, and message/stream (SSE). Authenticates callers through\n * KavachOS and logs every interaction to the audit trail.\n */\n\nimport type {\n\tA2AAuditEvent,\n\tA2AJsonRpcError,\n\tA2AJsonRpcResponse,\n\tA2AServerConfig,\n\tA2ATask,\n\tA2ATaskStore,\n} from \"./types.js\";\nimport {\n\tA2A_ERROR_CODES,\n\tA2A_JSONRPC_VERSION,\n\tA2A_METHODS,\n\tA2A_WELL_KNOWN_PATH,\n\tA2ACancelTaskParamsSchema,\n\tA2AGetTaskParamsSchema,\n\tA2AJsonRpcRequestSchema,\n\tA2ASendMessageParamsSchema,\n} from \"./types.js\";\n\n// ─── In-memory task store (default) ──────────────────────────────────────────\n\nfunction createInMemoryTaskStore(): A2ATaskStore {\n\tconst tasks = new Map<string, A2ATask>();\n\treturn {\n\t\tasync get(taskId: string) {\n\t\t\treturn tasks.get(taskId);\n\t\t},\n\t\tasync set(taskId: string, task: A2ATask) {\n\t\t\ttasks.set(taskId, task);\n\t\t},\n\t\tasync delete(taskId: string) {\n\t\t\treturn tasks.delete(taskId);\n\t\t},\n\t};\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction jsonRpcError(id: string | number | null, error: A2AJsonRpcError): Response {\n\tconst body: A2AJsonRpcResponse = {\n\t\tjsonrpc: A2A_JSONRPC_VERSION,\n\t\tid: id ?? 0,\n\t\terror,\n\t};\n\treturn new Response(JSON.stringify(body), {\n\t\tstatus: 200, // JSON-RPC always returns 200\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t});\n}\n\nfunction jsonRpcSuccess(id: string | number, result: unknown): Response {\n\tconst body: A2AJsonRpcResponse = {\n\t\tjsonrpc: A2A_JSONRPC_VERSION,\n\t\tid,\n\t\tresult,\n\t};\n\treturn new Response(JSON.stringify(body), {\n\t\tstatus: 200,\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t});\n}\n\n// ─── Create A2A Server ───────────────────────────────────────────────────────\n\nexport interface A2AServer {\n\t/** Handle an incoming HTTP request (JSON-RPC or agent card discovery) */\n\thandleRequest: (request: Request) => Promise<Response>;\n\t/** Access the task store directly (for testing or admin) */\n\ttaskStore: A2ATaskStore;\n}\n\n/**\n * Create an A2A-compliant JSON-RPC server.\n *\n * The returned `handleRequest` function accepts standard Web API Request\n * objects and returns Response objects. Mount it at whatever path you\n * prefer; it also handles `/.well-known/agent.json` for agent card\n * discovery.\n *\n * @example\n * ```typescript\n * const server = createA2AServer({\n * agentCard: myCard,\n * handler: {\n * onMessage: async (msg) => ({ id: '...', contextId: '...', status: { code: 'completed' }, ... }),\n * },\n * authenticate: async (req) => verifyToken(req),\n * });\n *\n * // In your HTTP framework:\n * app.all('/a2a', (req) => server.handleRequest(req));\n * ```\n */\nexport function createA2AServer(config: A2AServerConfig): A2AServer {\n\tconst taskStore = config.taskStore ?? createInMemoryTaskStore();\n\n\tasync function audit(event: Omit<A2AAuditEvent, \"timestamp\">): Promise<void> {\n\t\tif (config.onAudit) {\n\t\t\tawait config.onAudit({\n\t\t\t\t...event,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t});\n\t\t}\n\t}\n\n\tasync function authenticate(\n\t\trequest: Request,\n\t): Promise<{ agentId: string | null; error: Response | null }> {\n\t\tif (!config.authenticate) {\n\t\t\treturn { agentId: null, error: null };\n\t\t}\n\n\t\tconst agentId = await config.authenticate(request);\n\t\tif (agentId === null) {\n\t\t\treturn {\n\t\t\t\tagentId: null,\n\t\t\t\terror: jsonRpcError(0, {\n\t\t\t\t\tcode: A2A_ERROR_CODES.AUTHENTICATION_REQUIRED,\n\t\t\t\t\tmessage: \"Authentication required\",\n\t\t\t\t}),\n\t\t\t};\n\t\t}\n\n\t\treturn { agentId, error: null };\n\t}\n\n\tasync function handleSendMessage(\n\t\tid: string | number,\n\t\tparams: unknown,\n\t\tagentId: string | null,\n\t): Promise<Response> {\n\t\tconst parsed = A2ASendMessageParamsSchema.safeParse(params);\n\t\tif (!parsed.success) {\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.SEND_MESSAGE,\n\t\t\t\tagentId,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Invalid params\",\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_PARAMS,\n\t\t\t\tmessage: `Invalid params: ${parsed.error.issues.map((i) => i.message).join(\"; \")}`,\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst task = await config.handler.onMessage(parsed.data.message, parsed.data.configuration);\n\n\t\t\tawait taskStore.set(task.id, task);\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.SEND_MESSAGE,\n\t\t\t\tagentId,\n\t\t\t\ttaskId: task.id,\n\t\t\t\tsuccess: true,\n\t\t\t});\n\n\t\t\treturn jsonRpcSuccess(id, task);\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : \"Internal error\";\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.SEND_MESSAGE,\n\t\t\t\tagentId,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: message,\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INTERNAL_ERROR,\n\t\t\t\tmessage,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync function handleGetTask(\n\t\tid: string | number,\n\t\tparams: unknown,\n\t\tagentId: string | null,\n\t): Promise<Response> {\n\t\tconst parsed = A2AGetTaskParamsSchema.safeParse(params);\n\t\tif (!parsed.success) {\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_PARAMS,\n\t\t\t\tmessage: \"Invalid params: id is required\",\n\t\t\t});\n\t\t}\n\n\t\tconst task = await taskStore.get(parsed.data.id);\n\t\tif (!task) {\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.GET_TASK,\n\t\t\t\tagentId,\n\t\t\t\ttaskId: parsed.data.id,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Task not found\",\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.TASK_NOT_FOUND,\n\t\t\t\tmessage: `Task ${parsed.data.id} not found`,\n\t\t\t});\n\t\t}\n\n\t\t// Trim history if historyLength specified\n\t\tlet result = task;\n\t\tif (parsed.data.historyLength !== undefined && task.history) {\n\t\t\tconst len = parsed.data.historyLength;\n\t\t\tresult = {\n\t\t\t\t...task,\n\t\t\t\thistory: len === 0 ? [] : task.history.slice(-len),\n\t\t\t};\n\t\t}\n\n\t\tawait audit({\n\t\t\tmethod: A2A_METHODS.GET_TASK,\n\t\t\tagentId,\n\t\t\ttaskId: task.id,\n\t\t\tsuccess: true,\n\t\t});\n\n\t\treturn jsonRpcSuccess(id, result);\n\t}\n\n\tasync function handleCancelTask(\n\t\tid: string | number,\n\t\tparams: unknown,\n\t\tagentId: string | null,\n\t): Promise<Response> {\n\t\tconst parsed = A2ACancelTaskParamsSchema.safeParse(params);\n\t\tif (!parsed.success) {\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_PARAMS,\n\t\t\t\tmessage: \"Invalid params: id is required\",\n\t\t\t});\n\t\t}\n\n\t\tconst existing = await taskStore.get(parsed.data.id);\n\t\tif (!existing) {\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\t\tagentId,\n\t\t\t\ttaskId: parsed.data.id,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Task not found\",\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.TASK_NOT_FOUND,\n\t\t\t\tmessage: `Task ${parsed.data.id} not found`,\n\t\t\t});\n\t\t}\n\n\t\t// Already in a terminal state\n\t\tif (\n\t\t\texisting.status.code === \"completed\" ||\n\t\t\texisting.status.code === \"failed\" ||\n\t\t\texisting.status.code === \"canceled\"\n\t\t) {\n\t\t\tawait audit({\n\t\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\t\tagentId,\n\t\t\t\ttaskId: existing.id,\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Task already in terminal state\",\n\t\t\t});\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.TASK_ALREADY_COMPLETED,\n\t\t\t\tmessage: `Task ${parsed.data.id} is already ${existing.status.code}`,\n\t\t\t});\n\t\t}\n\n\t\tif (config.handler.onCancel) {\n\t\t\ttry {\n\t\t\t\tconst canceled = await config.handler.onCancel(parsed.data.id);\n\t\t\t\tawait taskStore.set(canceled.id, canceled);\n\t\t\t\tawait audit({\n\t\t\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\t\t\tagentId,\n\t\t\t\t\ttaskId: canceled.id,\n\t\t\t\t\tsuccess: true,\n\t\t\t\t});\n\t\t\t\treturn jsonRpcSuccess(id, canceled);\n\t\t\t} catch (err) {\n\t\t\t\tconst message = err instanceof Error ? err.message : \"Cancel failed\";\n\t\t\t\tawait audit({\n\t\t\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\t\t\tagentId,\n\t\t\t\t\ttaskId: parsed.data.id,\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: message,\n\t\t\t\t});\n\t\t\t\treturn jsonRpcError(id, {\n\t\t\t\t\tcode: A2A_ERROR_CODES.INTERNAL_ERROR,\n\t\t\t\t\tmessage,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Default cancellation\n\t\tconst canceled: A2ATask = {\n\t\t\t...existing,\n\t\t\tstatus: { code: \"canceled\", message: \"Canceled by client\" },\n\t\t\tupdatedAt: new Date().toISOString(),\n\t\t};\n\t\tawait taskStore.set(canceled.id, canceled);\n\t\tawait audit({\n\t\t\tmethod: A2A_METHODS.CANCEL_TASK,\n\t\t\tagentId,\n\t\t\ttaskId: canceled.id,\n\t\t\tsuccess: true,\n\t\t});\n\t\treturn jsonRpcSuccess(id, canceled);\n\t}\n\n\tfunction handleStreamingMessage(\n\t\tid: string | number,\n\t\tparams: unknown,\n\t\tagentId: string | null,\n\t): Response {\n\t\tif (!config.handler.onMessageStream) {\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.METHOD_NOT_FOUND,\n\t\t\t\tmessage: \"Streaming not supported by this agent\",\n\t\t\t});\n\t\t}\n\n\t\tconst parsed = A2ASendMessageParamsSchema.safeParse(params);\n\t\tif (!parsed.success) {\n\t\t\treturn jsonRpcError(id, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_PARAMS,\n\t\t\t\tmessage: \"Invalid params\",\n\t\t\t});\n\t\t}\n\n\t\tconst stream = config.handler.onMessageStream(parsed.data.message, parsed.data.configuration);\n\n\t\tconst encoder = new TextEncoder();\n\t\tconst readable = new ReadableStream({\n\t\t\tasync start(controller) {\n\t\t\t\ttry {\n\t\t\t\t\tfor await (const event of stream) {\n\t\t\t\t\t\tconst data = JSON.stringify(event);\n\t\t\t\t\t\tcontroller.enqueue(encoder.encode(`data: ${data}\\n\\n`));\n\t\t\t\t\t}\n\t\t\t\t\tcontroller.enqueue(encoder.encode(\"data: [DONE]\\n\\n\"));\n\t\t\t\t\tcontroller.close();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconst errorData = JSON.stringify({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tcode: A2A_ERROR_CODES.INTERNAL_ERROR,\n\t\t\t\t\t\t\tmessage: err instanceof Error ? err.message : \"Stream error\",\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tcontroller.enqueue(encoder.encode(`data: ${errorData}\\n\\n`));\n\t\t\t\t\tcontroller.close();\n\t\t\t\t}\n\t\t\t\t// Fire-and-forget audit\n\t\t\t\tvoid audit({\n\t\t\t\t\tmethod: A2A_METHODS.SEND_STREAMING_MESSAGE,\n\t\t\t\t\tagentId,\n\t\t\t\t\tsuccess: true,\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\n\t\treturn new Response(readable, {\n\t\t\tstatus: 200,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"text/event-stream\",\n\t\t\t\t\"Cache-Control\": \"no-cache\",\n\t\t\t\tConnection: \"keep-alive\",\n\t\t\t},\n\t\t});\n\t}\n\n\tasync function handleRequest(request: Request): Promise<Response> {\n\t\tconst url = new URL(request.url);\n\n\t\t// Agent Card discovery\n\t\tif (request.method === \"GET\" && url.pathname.endsWith(A2A_WELL_KNOWN_PATH)) {\n\t\t\treturn new Response(JSON.stringify(config.agentCard), {\n\t\t\t\tstatus: 200,\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t});\n\t\t}\n\n\t\t// Only POST for JSON-RPC\n\t\tif (request.method !== \"POST\") {\n\t\t\treturn new Response(\"Method Not Allowed\", { status: 405 });\n\t\t}\n\n\t\t// Authenticate\n\t\tconst auth = await authenticate(request);\n\t\tif (auth.error) return auth.error;\n\t\tconst agentId = auth.agentId;\n\n\t\t// Parse JSON-RPC envelope\n\t\tlet body: unknown;\n\t\ttry {\n\t\t\tbody = await request.json();\n\t\t} catch {\n\t\t\treturn jsonRpcError(null, {\n\t\t\t\tcode: A2A_ERROR_CODES.PARSE_ERROR,\n\t\t\t\tmessage: \"Invalid JSON\",\n\t\t\t});\n\t\t}\n\n\t\tconst envelope = A2AJsonRpcRequestSchema.safeParse(body);\n\t\tif (!envelope.success) {\n\t\t\treturn jsonRpcError(null, {\n\t\t\t\tcode: A2A_ERROR_CODES.INVALID_REQUEST,\n\t\t\t\tmessage: \"Invalid JSON-RPC request\",\n\t\t\t});\n\t\t}\n\n\t\tconst { id: reqId, method, params } = envelope.data;\n\n\t\tswitch (method) {\n\t\t\tcase A2A_METHODS.SEND_MESSAGE:\n\t\t\t\treturn handleSendMessage(reqId, params, agentId);\n\n\t\t\tcase A2A_METHODS.GET_TASK:\n\t\t\t\treturn handleGetTask(reqId, params, agentId);\n\n\t\t\tcase A2A_METHODS.CANCEL_TASK:\n\t\t\t\treturn handleCancelTask(reqId, params, agentId);\n\n\t\t\tcase A2A_METHODS.SEND_STREAMING_MESSAGE:\n\t\t\t\treturn handleStreamingMessage(reqId, params, agentId);\n\n\t\t\tdefault:\n\t\t\t\tawait audit({\n\t\t\t\t\tmethod,\n\t\t\t\t\tagentId,\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: \"Method not found\",\n\t\t\t\t});\n\t\t\t\treturn jsonRpcError(reqId, {\n\t\t\t\t\tcode: A2A_ERROR_CODES.METHOD_NOT_FOUND,\n\t\t\t\t\tmessage: `Unknown method: ${method}`,\n\t\t\t\t});\n\t\t}\n\t}\n\n\treturn { handleRequest, taskStore };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { D as Database, C as CreateAgentInput, A as AgentIdentity, h as AgentFilter, U as UpdateAgentInput } from '../types-6D7iJvGD.js';
2
- export { Y as AgentConfig } from '../types-6D7iJvGD.js';
1
+ import { D as Database, C as CreateAgentInput, A as AgentIdentity, h as AgentFilter, U as UpdateAgentInput } from '../types-5Ua5KlPc.js';
2
+ export { Y as AgentConfig } from '../types-5Ua5KlPc.js';
3
3
  import 'drizzle-orm/sqlite-core';
4
4
  import '../types-BuHrZcjE.js';
5
5
  import 'zod';