@axiom-lattice/gateway 8.3.0 → 8.4.0
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.
- package/dist/{A2AAuthService-7UGQ7GMW.mjs → A2AAuthService-UKN53ZGP.mjs} +2 -2
- package/dist/{a2a-BHBLACJV.mjs → a2a-TDZ3TT6H.mjs} +3 -3
- package/dist/{a2a-standard-VL5I7B4W.mjs → a2a-standard-INVCUSAW.mjs} +39 -2
- package/dist/a2a-standard-INVCUSAW.mjs.map +1 -0
- package/dist/chunk-A7YNAU5L.mjs +377 -0
- package/dist/chunk-A7YNAU5L.mjs.map +1 -0
- package/dist/{chunk-3XIIQ6EK.mjs → chunk-BOPNXTMO.mjs} +66 -5
- package/dist/chunk-BOPNXTMO.mjs.map +1 -0
- package/dist/{chunk-L6MBEEII.mjs → chunk-JGQURU44.mjs} +24 -6
- package/dist/chunk-JGQURU44.mjs.map +1 -0
- package/dist/{chunk-GPHOYR3X.mjs → chunk-LCM4OQTI.mjs} +30 -1
- package/dist/chunk-LCM4OQTI.mjs.map +1 -0
- package/dist/{chunk-HVIKCUOF.mjs → chunk-MFWTGNQR.mjs} +74 -5
- package/dist/chunk-MFWTGNQR.mjs.map +1 -0
- package/dist/{chunk-HYYLYIMH.mjs → chunk-OBODBHIS.mjs} +2 -2
- package/dist/chunk-T2HIWZGP.mjs +580 -0
- package/dist/chunk-T2HIWZGP.mjs.map +1 -0
- package/dist/chunk-Y7OVVPVU.mjs +13 -0
- package/dist/chunk-Y7OVVPVU.mjs.map +1 -0
- package/dist/{chunk-GL7RV5L3.mjs → chunk-YR32MWEJ.mjs} +36 -73
- package/dist/chunk-YR32MWEJ.mjs.map +1 -0
- package/dist/embed/{embed-page-AgentDetailSideApp-O6G4NJ7I.css → embed-page-AgentDetailSideApp-JMJOOC4V.css} +1 -1
- package/dist/embed/{embed-page-AgentDetailSideApp-7YTMN643.js → embed-page-AgentDetailSideApp-TQEJK6ZF.js} +1 -1
- package/dist/embed/{embed-page-AgentGovernanceWorkbench-SFZNVMUH.css → embed-page-AgentGovernanceWorkbench-3T3ZFJI5.css} +1 -1
- package/dist/embed/{embed-page-AgentGovernanceWorkbench-YWJ4ZLEV.js → embed-page-AgentGovernanceWorkbench-II2MRGCG.js} +1 -1
- package/dist/embed/{embed-page-LangfuseDashboard-BEOJDMWF.js → embed-page-LangfuseDashboard-7OANGQXY.js} +1 -1
- package/dist/embed/{embed-page-MessageGraph-N2DXVMEK.js → embed-page-MessageGraph-KJPQWTHE.js} +1 -1
- package/dist/embed/{embed-page-TopologyRuntimeView-CWOXLVFW.css → embed-page-MessageGraph-UDC6GQA5.css} +1 -1
- package/dist/embed/{embed-page-ReactChart-3QDZX2WG.js → embed-page-ReactChart-2CAIM4JD.js} +1 -1
- package/dist/embed/{embed-page-ReactChart-MXGF35OQ.css → embed-page-ReactChart-URBKYQYE.css} +1 -1
- package/dist/embed/{embed-page-SkillFlow-3X24ILKU.js → embed-page-SkillFlow-243MXRXC.js} +1 -1
- package/dist/embed/{embed-page-TasksSideApp-MYIRJWFM.js → embed-page-TasksSideApp-OA7CULHS.js} +1 -1
- package/dist/embed/{embed-page-TasksSideApp-HV6DKQ26.css → embed-page-TasksSideApp-TTCP4ENP.css} +1 -1
- package/dist/embed/{embed-page-ThreadMaintenancePanel-V327PV5R.js → embed-page-ThreadMaintenancePanel-Z4424X3J.js} +1 -1
- package/dist/embed/{embed-page-WorkflowAutomationView-YQFB3CTV.css → embed-page-TopologyRuntimeView-S4AMB4RI.css} +1 -1
- package/dist/embed/{embed-page-TopologyRuntimeView-3O6VJUZR.js → embed-page-TopologyRuntimeView-THTCZUS7.js} +1 -1
- package/dist/embed/{embed-page-MessageGraph-UT2TCPSO.css → embed-page-WorkflowAutomationView-FWVCQ3YM.css} +1 -1
- package/dist/embed/{embed-page-WorkflowAutomationView-YHOS4WQR.js → embed-page-WorkflowAutomationView-YDIDG35E.js} +1 -1
- package/dist/embed/{embed-page-chunk-4XKCMM5C.js → embed-page-chunk-7ULTMRM2.js} +1 -1
- package/dist/embed/{embed-page-chunk-BSRASK7V.js → embed-page-chunk-FZX4A32D.js} +5 -5
- package/dist/embed/{embed-page-chunk-PMOGSY6W.js → embed-page-chunk-JMP7EQEF.js} +1 -1
- package/dist/embed/{embed-page-chunk-IELKCYQX.js → embed-page-chunk-L2EGVVJS.js} +1 -1
- package/dist/embed/{embed-page-chunk-WGEXK773.js → embed-page-chunk-LDQGH44H.js} +1 -1
- package/dist/embed/{embed-page-chunk-JTL73EBV.js → embed-page-chunk-OMN6G52V.js} +1 -1
- package/dist/embed/{embed-page-chunk-PROZXFWS.js → embed-page-chunk-RKQJBKN2.js} +1 -1
- package/dist/embed/{embed-page-chunk-YMVKQQXJ.js → embed-page-chunk-VYS3TAK4.js} +1 -1
- package/dist/embed/{embed-page-chunk-ASEIOK7X.js → embed-page-chunk-W5OP2CZG.js} +2 -2
- package/dist/embed/embed-page-chunk-Z6KWW64I.js +6837 -0
- package/dist/embed/{embed-page-en-E35GE7TA.js → embed-page-en-D4M3DPFT.js} +1 -1
- package/dist/embed/{embed-page-en-XJYWUJEL.js → embed-page-en-DNDGCPMA.js} +1 -1
- package/dist/embed/embed-page-en-H5NOZEKE.js +1 -0
- package/dist/embed/{embed-page-en-HDSVQ4O6.js → embed-page-en-QJRX2NQE.js} +1 -1
- package/dist/embed/{embed-page-zh-6EBUEFKP.js → embed-page-zh-2H4EB3F3.js} +1 -1
- package/dist/embed/embed-page-zh-4C2K3RH2.js +1 -0
- package/dist/embed/{embed-page-zh-IR652A6J.js → embed-page-zh-HTEHFCSL.js} +1 -1
- package/dist/embed/{embed-page-zh-ZLK3GLM3.js → embed-page-zh-NEXLMDHF.js} +1 -1
- package/dist/embed/embed-page.css +1 -1
- package/dist/embed/embed-page.js +1 -1
- package/dist/embed/mcp-app-page.js +61 -0
- package/dist/index.d.mts +29 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +2551 -1476
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +116 -690
- package/dist/index.mjs.map +1 -1
- package/dist/mcp-app-shares-SHPBJQXS.mjs +300 -0
- package/dist/mcp-app-shares-SHPBJQXS.mjs.map +1 -0
- package/dist/mcp-apps-QVUK6UBA.mjs +26 -0
- package/dist/{open-7ED27I5B.mjs → open-27ZPLBIW.mjs} +101 -18
- package/dist/open-27ZPLBIW.mjs.map +1 -0
- package/dist/{open-catalog-SZQ435AY.mjs → open-catalog-NVGP6SQP.mjs} +38 -7
- package/dist/open-catalog-NVGP6SQP.mjs.map +1 -0
- package/dist/{open-exposure-I3DN2X4E.mjs → open-exposure-BPLYUIX6.mjs} +4 -4
- package/dist/{open-files-V3R2BFTV.mjs → open-files-JPB2NBL6.mjs} +4 -4
- package/dist/{open-session-2Y7XJJW2.mjs → open-session-CLZT3HVG.mjs} +5 -5
- package/dist/open-session-CLZT3HVG.mjs.map +1 -0
- package/dist/openLattice-D5YTSZBY.mjs +28 -0
- package/dist/{registerExposedPlugins-6GCOE64C.mjs → registerExposedPlugins-2JGXSMAL.mjs} +4 -3
- package/dist/{resources-DAU5ZIPB.mjs → resources-YD5DOPGD.mjs} +83 -3
- package/dist/resources-YD5DOPGD.mjs.map +1 -0
- package/dist/{sandboxOpenCredentialProvider-AT227D4N.mjs → sandboxOpenCredentialProvider-RTYOYRCT.mjs} +19 -14
- package/dist/sandboxOpenCredentialProvider-RTYOYRCT.mjs.map +1 -0
- package/package.json +10 -8
- package/dist/a2a-standard-VL5I7B4W.mjs.map +0 -1
- package/dist/chunk-3XIIQ6EK.mjs.map +0 -1
- package/dist/chunk-GL7RV5L3.mjs.map +0 -1
- package/dist/chunk-GPHOYR3X.mjs.map +0 -1
- package/dist/chunk-GXZFO3VU.mjs +0 -42
- package/dist/chunk-GXZFO3VU.mjs.map +0 -1
- package/dist/chunk-HVIKCUOF.mjs.map +0 -1
- package/dist/chunk-L6MBEEII.mjs.map +0 -1
- package/dist/embed/embed-page-chunk-IBRMWDHE.js +0 -6835
- package/dist/embed/embed-page-en-GLT2HEZZ.js +0 -1
- package/dist/embed/embed-page-zh-XMEJPDMF.js +0 -1
- package/dist/open-7ED27I5B.mjs.map +0 -1
- package/dist/open-catalog-SZQ435AY.mjs.map +0 -1
- package/dist/open-session-2Y7XJJW2.mjs.map +0 -1
- package/dist/openLattice-Q6M5S6CY.mjs +0 -18
- package/dist/openRateLimiter-XEOL3A5G.mjs +0 -8
- package/dist/resources-DAU5ZIPB.mjs.map +0 -1
- package/dist/sandboxOpenCredentialProvider-AT227D4N.mjs.map +0 -1
- /package/dist/{A2AAuthService-7UGQ7GMW.mjs.map → A2AAuthService-UKN53ZGP.mjs.map} +0 -0
- /package/dist/{a2a-BHBLACJV.mjs.map → a2a-TDZ3TT6H.mjs.map} +0 -0
- /package/dist/{chunk-HYYLYIMH.mjs.map → chunk-OBODBHIS.mjs.map} +0 -0
- /package/dist/{openLattice-Q6M5S6CY.mjs.map → mcp-apps-QVUK6UBA.mjs.map} +0 -0
- /package/dist/{open-exposure-I3DN2X4E.mjs.map → open-exposure-BPLYUIX6.mjs.map} +0 -0
- /package/dist/{open-files-V3R2BFTV.mjs.map → open-files-JPB2NBL6.mjs.map} +0 -0
- /package/dist/{openRateLimiter-XEOL3A5G.mjs.map → openLattice-D5YTSZBY.mjs.map} +0 -0
- /package/dist/{registerExposedPlugins-6GCOE64C.mjs.map → registerExposedPlugins-2JGXSMAL.mjs.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/a2a-standard.ts","../src/services/a2a/A2AAgentCardBuilderV1.ts","../src/services/a2a/a2aV1Wire.ts","../src/services/a2a/A2APushNotificationStore.ts","../src/services/a2a/A2APushNotificationUrl.ts","../src/services/a2a/A2APushNotificationSender.ts","../src/services/a2a/A2ATaskStoreAdapter.ts","../src/services/a2a/AxiomAgentExecutor.ts","../src/services/a2a/a2aFileRefs.ts","../src/services/a2a/A2ARunService.ts","../src/services/a2a/A2AFileIngestor.ts","../src/services/a2a/A2ARuntimeRegistry.ts"],"sourcesContent":["import type { FastifyInstance, FastifyReply, FastifyRequest } from \"fastify\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n A2AError,\n DefaultExecutionEventBus,\n DefaultRequestHandler,\n JsonRpcTransportHandler,\n RequestContext,\n} from \"@a2a-js/sdk/server\";\nimport type { AgentExecutionEvent, PushNotificationSender } from \"@a2a-js/sdk/server\";\nimport type { JSONRPCResponse, Message } from \"@a2a-js/sdk\";\nimport { AgentCard as AgentCardV1 } from \"@a2a-js/sdk-v1\";\nimport {\n agentInstanceManager,\n ChunkCursorExpiredError,\n chunkBufferStreamKey,\n createTaskLifecycleService,\n getChunkBuffer,\n getStoreLattice,\n type IAgentRunLedger,\n} from \"@axiom-lattice/core\";\nimport { MessageChunkTypes } from \"@axiom-lattice/protocols\";\nimport type {\n A2AMessage,\n A2ATask,\n AgentInterrupt,\n Assistant,\n AssistantStore,\n MessageChunk,\n ProjectStore,\n StoreProtocol,\n TaskItem,\n TaskStore,\n TaskWorkItemStore,\n TenantStore,\n} from \"@axiom-lattice/protocols\";\nimport { A2AAuthError } from \"../services/a2a/A2AAuthService\";\nimport type { A2AAuthService } from \"../services/a2a/A2AAuthService\";\nimport { buildAgentCardForAssistant } from \"../services/a2a/A2AAgentCardBuilder\";\nimport { buildAgentCardForAssistantV1 } from \"../services/a2a/A2AAgentCardBuilderV1\";\nimport {\n toA2A03JsonRpcRequest,\n toA2A11ListResult,\n toA2A11PushListResult,\n toA2A11Result,\n toA2A11StreamResult,\n versionNotSupportedError,\n} from \"../services/a2a/a2aV1Wire\";\nimport {\n A2APushNotificationStore,\n} from \"../services/a2a/A2APushNotificationStore\";\nimport {\n A2APushNotificationSender,\n} from \"../services/a2a/A2APushNotificationSender\";\nimport type { A2APushHostResolver } from \"../services/a2a/A2APushNotificationUrl\";\nimport { A2ATaskStoreAdapter } from \"../services/a2a/A2ATaskStoreAdapter\";\nimport type { A2ATaskLifecycleAdapter, A2ATaskStore } from \"../services/a2a/A2ATaskStoreAdapter\";\nimport { AxiomAgentExecutor } from \"../services/a2a/AxiomAgentExecutor\";\nimport {\n A2ARunService,\n stopAtTerminalChunks,\n type A2ARunChunkSource,\n} from \"../services/a2a/A2ARunService\";\nimport { A2AFileIngestor } from \"../services/a2a/A2AFileIngestor\";\nimport {\n A2ARuntimeCapacityError,\n A2ARuntimeRegistry,\n} from \"../services/a2a/A2ARuntimeRegistry\";\nimport { resolveRunTaskMaxActivePerTenant } from \"../services/run-task/runTaskQuota\";\nimport { saveProjectFile } from \"../services/workspace-file-service\";\n\n/** Stores injectable into the standard A2A routes (overridable in tests). */\nexport interface A2AStandardRoutesDeps {\n authService: A2AAuthService;\n /** Returns the internal task store (default: `getStoreLattice(\"default\",\"task\").store`). */\n getTaskStoreLattice?: () => TaskStore;\n /** Returns the work-item store used for governed A2A observations and lifecycle events. */\n getTaskWorkItemStore?: () => TaskWorkItemStore;\n /** Returns the assistant store (default: `getStoreLattice(\"default\",\"assistant\").store`). */\n getAssistantStore?: () => AssistantStore;\n /** Returns the project store (used by test-call to scope the request's project to the tenant). */\n getProjectStore?: () => ProjectStore;\n /** Returns the tenant store (used by agent-card discovery for cross-tenant fallback). */\n getTenantStore?: () => TenantStore | undefined;\n /**\n * Maximum decoded byte size accepted per inline file; defaults to the\n * {@link A2AFileIngestor} default (10 MiB). Exposed for testability.\n */\n maxFileBytes?: number;\n /** Gateway-lifetime scoped runtime registry; injectable for lifecycle tests. */\n runtimeRegistry?: A2ARuntimeRegistry;\n /** Durable agent-run ledger (default: the configured `agentRun` store). */\n getAgentRunLedger?: () => Pick<\n IAgentRunLedger,\n \"createPendingRun\" | \"getRun\" | \"requestCancel\"\n >;\n /**\n * Injectable run service factory for tests/embedding.\n *\n * @remarks Production always builds an {@link A2ARunService} over the durable\n * ledger and the managed agent's existing chunk stream.\n */\n createRunService?: (scope: A2AStandardScope) => A2ARunService;\n /** Read-only A2A state resolver used to reconstruct results/interrupts. */\n stateResolver?: A2AStateResolver;\n /** Generic namespaced store backing A2A push notification configs. */\n getStore?: () => StoreProtocol | undefined;\n /** Injectable DNS resolver for push config save/send validation. */\n resolvePushHost?: A2APushHostResolver;\n /** Override the outbound push sender (tests/embedding). */\n getPushNotificationSender?: (\n store: A2APushNotificationStore,\n ) => PushNotificationSender;\n}\n\ninterface A2AStandardScope {\n tenantId: string;\n projectId: string;\n workspaceId?: string;\n assistantId: string;\n}\n\n/** Read-only checkpoint/Agent projection used by A2A reconciliation. */\nexport interface A2AStateResolver {\n /** Return normalized thread messages (user/agent) from the checkpoint. */\n getCurrentMessages(\n threadId: string,\n assistantId: string,\n scope: A2AStandardScope,\n ): Promise<A2AMessage[]>;\n /** Return pending normalized interrupts from the checkpoint. */\n getInterrupts(\n threadId: string,\n assistantId: string,\n scope: A2AStandardScope,\n ): Promise<AgentInterrupt[]>;\n}\n\nconst TERMINAL_A2A_STATES = new Set([\n \"completed\",\n \"failed\",\n \"canceled\",\n \"rejected\",\n]);\n\nfunction agentParamsFor(\n scope: A2AStandardScope,\n threadId: string,\n assistantId: string,\n) {\n return {\n assistant_id: assistantId,\n thread_id: threadId,\n tenant_id: scope.tenantId,\n project_id: scope.projectId,\n ...(scope.workspaceId ? { workspace_id: scope.workspaceId } : {}),\n };\n}\n\nfunction chunksFromThreadStream(\n buffer: NonNullable<ReturnType<typeof getChunkBuffer>>,\n key: string,\n cursor?: string,\n): AsyncIterable<MessageChunk> {\n return (async function* () {\n for await (const record of buffer.streamThread(\n key,\n cursor === undefined ? {} : { cursor },\n )) {\n if (record.kind === \"end\") return;\n if (record.kind !== \"chunk\") continue;\n yield record.chunk;\n if (\n record.chunk.type === MessageChunkTypes.MESSAGE_COMPLETED\n || record.chunk.type === MessageChunkTypes.MESSAGE_FAILED\n || record.chunk.type === MessageChunkTypes.INTERRUPT\n ) {\n return;\n }\n }\n })();\n}\n\nfunction runServiceChunkSource(scope: A2AStandardScope): A2ARunChunkSource {\n return {\n stream: (threadId, assistantId, messageId) => {\n // Read through the process-wide chunk buffer (rather than the local Agent\n // instance) so an A2A stream can follow a run executed by another replica\n // when the buffer is shared (for example CHUNK_SOURCE=redis). A new\n // thread has no cursor yet, so start an empty live tail instead of letting\n // an empty backlog end the iterator before the worker writes its chunks.\n const buffer = getChunkBuffer(\"default\");\n if (buffer) {\n return stopAtTerminalChunks(\n chunksFromThreadStream(\n buffer,\n chunkBufferStreamKey(scope.tenantId, assistantId, threadId),\n ),\n );\n }\n return stopAtTerminalChunks(\n agentInstanceManager\n .getAgent(agentParamsFor(scope, threadId, assistantId))\n .chunkStream(\n messageId,\n [MessageChunkTypes.MESSAGE_COMPLETED, MessageChunkTypes.MESSAGE_FAILED],\n ),\n );\n },\n streamThread: (threadId, assistantId, cursor) => {\n const buffer = getChunkBuffer(\"default\");\n if (!buffer) return (async function* () {})();\n return chunksFromThreadStream(\n buffer,\n chunkBufferStreamKey(scope.tenantId, assistantId, threadId),\n cursor,\n );\n },\n };\n}\n\nfunction messageText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content.map((part) => {\n if (typeof part === \"string\") return part;\n if (typeof part !== \"object\" || part === null) return \"\";\n const record = part as Record<string, unknown>;\n if (typeof record.text === \"string\") return record.text;\n if (record.type === \"text\" && typeof record.value === \"string\") {\n return record.value;\n }\n return \"\";\n }).join(\"\");\n}\n\nfunction normalizeCheckpointMessages(messages: unknown): A2AMessage[] {\n if (!Array.isArray(messages)) return [];\n const normalized: A2AMessage[] = [];\n messages.forEach((message, index) => {\n if (typeof message !== \"object\" || message === null) return;\n const record = message as Record<string, unknown>;\n const type = typeof record.getType === \"function\"\n ? (record.getType as () => string)()\n : asString(record.type) ?? asString(record.role);\n const role = type === \"human\" || type === \"user\"\n ? \"user\" as const\n : type === \"ai\" || type === \"assistant\"\n ? \"agent\" as const\n : undefined;\n if (!role) return;\n const text = messageText(record.content);\n if (!text) return;\n normalized.push({\n kind: \"message\",\n messageId: asString(record.id) ?? `a2a-checkpoint:${index}`,\n role,\n parts: [{ kind: \"text\", text }],\n });\n });\n return normalized;\n}\n\nfunction defaultStateResolver(): A2AStateResolver {\n return {\n getCurrentMessages: async (threadId, assistantId, scope) => {\n const agent = agentInstanceManager.getAgent(\n agentParamsFor(scope, threadId, assistantId),\n );\n const state = await agent.getCurrentState() as {\n values?: { messages?: unknown };\n } | undefined;\n return normalizeCheckpointMessages(state?.values?.messages);\n },\n getInterrupts: async (threadId, assistantId, scope) =>\n (await agentInstanceManager\n .getAgent(agentParamsFor(scope, threadId, assistantId))\n .getInterrupts()) ?? [],\n };\n}\n\nfunction blockingFor(body: unknown): boolean {\n const params = typeof body === \"object\" && body !== null\n ? (body as { params?: unknown }).params\n : undefined;\n const configuration = typeof params === \"object\" && params !== null\n ? (params as { configuration?: unknown }).configuration\n : undefined;\n const blocking = typeof configuration === \"object\" && configuration !== null\n ? (configuration as { blocking?: unknown }).blocking\n : undefined;\n return blocking !== false;\n}\n\nasync function resumeValidationError(\n taskStore: A2ATaskStore,\n body: unknown,\n): Promise<string | undefined> {\n const method = typeof body === \"object\" && body !== null\n ? (body as { method?: unknown }).method\n : undefined;\n if (method !== \"message/send\" && method !== \"message/stream\") return undefined;\n const params = (body as { params?: unknown }).params;\n const message = typeof params === \"object\" && params !== null\n ? (params as { message?: unknown }).message\n : undefined;\n const taskId = typeof message === \"object\" && message !== null\n ? (message as { taskId?: unknown }).taskId\n : undefined;\n if (typeof taskId !== \"string\" || taskId.length === 0) return undefined;\n const task = await taskStore.load(taskId);\n if (!task) return undefined;\n if (task.status.state === \"input-required\") return undefined;\n if (TERMINAL_A2A_STATES.has(task.status.state)) return undefined;\n return `Task ${taskId} is not waiting for input and cannot be resumed`;\n}\n\nconst TERMINAL_RUN_STATUSES = new Set([\n \"success\",\n \"error\",\n \"interrupted\",\n \"cancelled\",\n \"timeout\",\n]);\n\n/**\n * After a terminal chunk, the worker still has to settle the run ledger.\n * Bounded so a lost settle cannot hold a resubscribe open indefinitely.\n */\nconst RESUBSCRIBE_SETTLE_TIMEOUT_MS = 10_000;\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction requestMethod(body: unknown): string | undefined {\n return typeof body === \"object\" && body !== null\n ? asString((body as { method?: unknown }).method)\n : undefined;\n}\n\nfunction requestTaskId(body: unknown): string | undefined {\n if (typeof body !== \"object\" || body === null) return undefined;\n const record = body as { method?: unknown; params?: unknown };\n const params = typeof record.params === \"object\" && record.params !== null\n ? record.params as Record<string, unknown>\n : undefined;\n if (!params) return undefined;\n if (\n record.method === \"tasks/get\"\n || record.method === \"tasks/cancel\"\n || record.method === \"tasks/resubscribe\"\n ) {\n return asString(params.id);\n }\n if (record.method === \"message/send\" || record.method === \"message/stream\") {\n const message = typeof params.message === \"object\" && params.message !== null\n ? params.message as Record<string, unknown>\n : undefined;\n return asString(message?.taskId);\n }\n return undefined;\n}\n\nfunction isTerminalA2AState(state: string): boolean {\n return TERMINAL_A2A_STATES.has(state);\n}\n\nfunction agentMessage(text: string): A2AMessage {\n return {\n kind: \"message\",\n messageId: `a2a-run-projection:${Date.now()}`,\n role: \"agent\",\n parts: [{ kind: \"text\", text }],\n };\n}\n\nfunction projectRunState(\n run: { status?: string; cancelRequested?: boolean; error?: string | null },\n): { state: \"completed\" | \"input-required\" | \"failed\" | \"canceled\"; message?: A2AMessage } | undefined {\n if (run.cancelRequested === true || run.status === \"cancelled\") {\n return { state: \"canceled\" };\n }\n switch (run.status) {\n case \"success\":\n return { state: \"completed\" };\n case \"interrupted\":\n return { state: \"input-required\" };\n case \"error\":\n case \"timeout\":\n return {\n state: \"failed\",\n ...(asString(run.error)\n ? { message: agentMessage(asString(run.error)!) }\n : {}),\n };\n default:\n return undefined;\n }\n}\n\n/**\n * Project a terminal durable run back onto the canonical A2A TaskItem.\n *\n * @remarks Used before `tasks/get` and continuation requests so a replica that\n * lost the background projection (or never owned it) still serves the ledger\n * truth. Canonical TaskItem writes stay inside the adapter/lifecycle.\n */\nfunction resultTextFromTask(task: A2ATask): string {\n const artifact = task.artifacts?.find((item) => item.name === \"result\");\n if (!artifact) return \"\";\n return artifact.parts\n .filter((part): part is Extract<typeof part, { kind: \"text\" }> => part.kind === \"text\")\n .map((part) => part.text)\n .join(\"\");\n}\n\nfunction resultArtifactFor(task: A2ATask, result: string) {\n return {\n artifactId: `${task.id}:result`,\n name: \"result\",\n parts: [{ kind: \"text\" as const, text: result.trim() || \"(no output)\" }],\n };\n}\n\nfunction withResult(\n task: A2ATask,\n result: string,\n runId: string,\n threadId: string,\n): A2ATask {\n const artifact = resultArtifactFor(task, result);\n return {\n ...task,\n metadata: { ...(task.metadata ?? {}), a2aRunId: runId, threadId },\n artifacts: [\n ...(task.artifacts ?? []).filter(\n (item) => item.artifactId !== artifact.artifactId && item.name !== \"result\",\n ),\n artifact,\n ],\n status: { state: \"completed\", timestamp: new Date().toISOString() },\n };\n}\n\nfunction deriveInterruption(\n task: A2ATask,\n interrupts: AgentInterrupt[],\n): Record<string, unknown> | undefined {\n const existing = task.metadata?.interruption;\n if (existing && typeof existing === \"object\") {\n return existing as Record<string, unknown>;\n }\n if (interrupts.length === 0) return undefined;\n const review = interrupts.some((interrupt) => interrupt.type === \"task_review\");\n const clarify = interrupts.some((interrupt) => interrupt.type === \"clarify\");\n const summary = task.status.message\n ? task.status.message.parts\n .filter((part): part is Extract<typeof part, { kind: \"text\" }> => part.kind === \"text\")\n .map((part) => part.text)\n .join(\"\")\n .trim()\n : \"\";\n return {\n type: review ? \"review_required\" : clarify ? \"missing_input\" : \"user_decision\",\n summary: summary || \"A2A requires input\",\n };\n}\n\nfunction interruptArtifactFor(\n task: A2ATask,\n interrupts: AgentInterrupt[],\n) {\n if (interrupts.length === 0) return undefined;\n return {\n artifactId: `${task.id}:interrupt`,\n name: \"interrupt\",\n parts: interrupts.map((interrupt) => {\n const payload = interrupt.payload;\n const record = typeof payload === \"object\" && payload !== null && !Array.isArray(payload)\n ? payload as Record<string, unknown>\n : undefined;\n const schema = record?.response_schema;\n return {\n kind: \"data\" as const,\n data: {\n id: interrupt.interruptId,\n value: payload,\n ...(schema === undefined ? {} : { response_schema: schema }),\n },\n };\n }),\n };\n}\n\n/**\n * Project a terminal durable run back onto the canonical A2A TaskItem.\n *\n * @remarks Used before `tasks/get` and continuation requests so a replica that\n * lost the background projection (or never owned it) still serves the ledger\n * truth. Completed results and interrupt artifacts are reconstructed from the\n * read-only checkpoint projection; canonical TaskItem writes stay inside the\n * adapter/lifecycle.\n */\nasync function reconcileTaskFromRun(\n taskStore: A2ATaskStore,\n runService: A2ARunService,\n stateResolver: A2AStateResolver,\n scope: A2AStandardScope,\n body: unknown,\n): Promise<A2ATask | undefined> {\n const taskId = requestTaskId(body);\n if (!taskId) return undefined;\n let task: A2ATask | undefined;\n try {\n task = await taskStore.load(taskId);\n } catch {\n // A broken store is handled by the SDK request path below.\n return undefined;\n }\n if (!task) return undefined;\n if (isTerminalA2AState(task.status.state)) {\n if (task.status.state !== \"completed\") return task;\n }\n const runId = asString(task.metadata?.a2aRunId);\n if (!runId) return task;\n const threadId = asString(task.metadata?.threadId) ?? task.contextId;\n const run = await runService.getRun(\n scope.tenantId,\n runId,\n threadId,\n scope.assistantId,\n ).catch(() => undefined);\n if (!run || !TERMINAL_RUN_STATUSES.has(run.status)) return task;\n const projection = projectRunState(run);\n if (!projection) return task;\n\n if (projection.state === \"completed\") {\n const existingResult = resultTextFromTask(task).trim();\n const missingResult = existingResult === \"\" || existingResult.toLowerCase() === \"(no output)\";\n let result = existingResult;\n if (missingResult) {\n try {\n const messages = await stateResolver.getCurrentMessages(\n threadId,\n scope.assistantId,\n scope,\n );\n const finalAgent = [...messages].reverse().find((message) => message.role === \"agent\");\n const text = finalAgent\n ? finalAgent.parts\n .filter((part): part is Extract<typeof part, { kind: \"text\" }> => part.kind === \"text\")\n .map((part) => part.text)\n .join(\"\")\n .trim()\n : \"\";\n if (text) result = text;\n } catch {\n // Keep the existing/canonical result when the checkpoint is unreadable.\n }\n }\n if (task.status.state === \"completed\" && !missingResult) return task;\n const completedTask = withResult(task, result || \"(no output)\", runId, threadId);\n if (taskStore.completeRun) {\n return taskStore.completeRun(completedTask, result || \"(no output)\");\n }\n await taskStore.save(completedTask);\n return (await taskStore.load(taskId)) ?? completedTask;\n }\n\n if (projection.state === \"input-required\") {\n let interrupts: AgentInterrupt[] = [];\n try {\n const resolved = await stateResolver.getInterrupts(\n threadId,\n scope.assistantId,\n scope,\n );\n interrupts = Array.isArray(resolved) ? resolved : [];\n } catch {\n // Interruption status still reconciles without the artifact.\n }\n const interruption = deriveInterruption(task, interrupts);\n const artifact = interruptArtifactFor(task, interrupts);\n const next = {\n ...task,\n metadata: {\n ...(task.metadata ?? {}),\n a2aRunId: runId,\n threadId,\n ...(interruption ? { interruption } : {}),\n },\n ...(artifact\n ? {\n artifacts: [\n ...(task.artifacts ?? []).filter(\n (item) => item.artifactId !== artifact.artifactId,\n ),\n artifact,\n ],\n }\n : {}),\n status: {\n state: \"input-required\" as const,\n ...(task.status.message ? { message: task.status.message } : {}),\n timestamp: new Date().toISOString(),\n },\n } as A2ATask;\n await taskStore.save(next);\n return (await taskStore.load(taskId)) ?? next;\n }\n\n if (task.status.state === projection.state) return task;\n const next = {\n ...task,\n metadata: { ...(task.metadata ?? {}), a2aRunId: runId, threadId },\n status: {\n state: projection.state,\n ...(projection.message ? { message: projection.message } : {}),\n timestamp: new Date().toISOString(),\n },\n } as A2ATask;\n await taskStore.save(next);\n return (await taskStore.load(taskId)) ?? next;\n}\n\n/**\n * Cancel an A2A task by its persisted exact run id, independent of any\n * process-local SDK event bus (other replica or post-restart).\n */\nasync function cancelTaskFromRun(\n taskStore: A2ATaskStore,\n runService: A2ARunService,\n scope: A2AStandardScope,\n body: unknown,\n): Promise<A2ATask | undefined> {\n if (requestMethod(body) !== \"tasks/cancel\") return undefined;\n const taskId = requestTaskId(body);\n if (!taskId) return undefined;\n const task = await taskStore.load(taskId);\n if (!task || isTerminalA2AState(task.status.state)) return undefined;\n const runId = asString(task.metadata?.a2aRunId);\n if (!runId) return undefined;\n const threadId = asString(task.metadata?.threadId) ?? task.contextId;\n\n const before = await runService.getRun(\n scope.tenantId,\n runId,\n threadId,\n scope.assistantId,\n );\n if (!before) throw A2AError.taskNotCancelable(taskId);\n if (TERMINAL_RUN_STATUSES.has(before.status)) {\n // A paused HITL run is already terminal in the ledger but the A2A task is\n // still cancellable. Completed/failed/timed-out runs are not.\n if (before.status !== \"interrupted\" && before.cancelRequested !== true) {\n throw A2AError.taskNotCancelable(taskId);\n }\n } else {\n await runService.cancel(scope.tenantId, threadId, scope.assistantId, runId);\n const after = await runService.getRun(\n scope.tenantId,\n runId,\n threadId,\n scope.assistantId,\n );\n if (!after) throw A2AError.taskNotCancelable(taskId);\n if (!TERMINAL_RUN_STATUSES.has(after.status)) {\n throw new Error(`Run ${runId} did not reach a terminal state after cancellation`);\n }\n if (\n after.status !== \"interrupted\"\n && after.status !== \"cancelled\"\n && after.cancelRequested !== true\n ) {\n throw A2AError.taskNotCancelable(taskId);\n }\n }\n\n const canceled = {\n ...task,\n metadata: { ...(task.metadata ?? {}), a2aRunId: runId, threadId },\n status: { state: \"canceled\" as const, timestamp: new Date().toISOString() },\n } as A2ATask;\n await taskStore.save(canceled);\n return (await taskStore.load(taskId)) ?? canceled;\n}\n\nfunction getHeader(value: string | string[] | undefined): string | undefined {\n if (Array.isArray(value)) return value[0];\n return value;\n}\n\n/** Session user parsed by the gateway global preHandler from the `Authorization` header. */\nfunction getSessionUser(\n request: FastifyRequest,\n): { id: string; tenantId?: string } | undefined {\n return (request as unknown as { user?: { id: string; tenantId?: string } })\n .user;\n}\n\n/**\n * Resolve the request tenant for session-aware discovery: prefer the session\n * user's tenant, then fall back to the `x-tenant-id` header, then `\"default\"`.\n */\nfunction buildBaseUrl(request: FastifyRequest): string {\n const protocol =\n getHeader(request.headers[\"x-forwarded-proto\"]) ?? request.protocol;\n const forwardedHost = getHeader(request.headers[\"x-forwarded-host\"]);\n const host = forwardedHost\n ? forwardedHost.split(\",\")[0]!.trim()\n : request.host;\n return `${protocol}://${host}`;\n}\n\n/**\n * Build a per-request file ingestor, binding the request's tenant onto the\n * shared `saveProjectFile` service (whose signature requires `tenantId`).\n */\nfunction makeFileIngestor(\n tenantId: string,\n maxFileBytes?: number,\n): A2AFileIngestor {\n return new A2AFileIngestor({\n saveProjectFile: (params) =>\n saveProjectFile({ tenantId, ...params }),\n ...(maxFileBytes !== undefined ? { maxBytes: maxFileBytes } : {}),\n });\n}\n\n/**\n * Resolve the addressing workspace for the key's bound project. Best-effort:\n * a missing project or store error leaves the workspace unset so the agent\n * keeps its legacy \"default\" fallback.\n */\nasync function resolveWorkspaceId(\n getProjectStore: () => ProjectStore,\n tenantId: string,\n projectId: string | undefined,\n): Promise<string | undefined> {\n if (!projectId) return undefined;\n try {\n const project = await getProjectStore().getProjectById(tenantId, projectId);\n return project?.workspaceId;\n } catch {\n return undefined;\n }\n}\n\nfunction extractRequestId(body: unknown): string | number | null {\n if (typeof body === \"object\" && body !== null && \"id\" in body) {\n const id = (body as { id?: unknown }).id;\n if (typeof id === \"string\" || typeof id === \"number\" || id === null) {\n return id;\n }\n }\n return null;\n}\n\n/** Map an auth failure status onto a JSON-RPC server error code. */\nfunction authErrorToRpcCode(statusCode: number): number {\n switch (statusCode) {\n case 401:\n return -32001;\n case 403:\n return -32002;\n case 404:\n return -32003;\n default:\n return -32603;\n }\n}\n\nfunction jsonRpcError(\n id: string | number | null,\n code: number,\n message: string,\n): JSONRPCResponse {\n return { jsonrpc: \"2.0\", id, error: { code, message } };\n}\n\nconst DEFAULT_A2A_TASKS_PAGE_SIZE = 50;\nconst MAX_A2A_TASKS_PAGE_SIZE = 200;\n\n/**\n * Accept either the A2A protocol state or the canonical TaskItem status and\n * expand it to every canonical status it represents. An A2A `input-required`\n * task can be either an interruption or a review, so it spans two statuses.\n */\nconst TASKS_LIST_STATUSES: Record<string, readonly TaskItem[\"status\"][]> = {\n submitted: [\"pending\"],\n working: [\"in_progress\"],\n \"input-required\": [\"interrupted\", \"review\"],\n completed: [\"completed\"],\n failed: [\"failed\"],\n canceled: [\"cancelled\"],\n rejected: [\"failed\"],\n pending: [\"pending\"],\n in_progress: [\"in_progress\"],\n review: [\"review\"],\n interrupted: [\"interrupted\"],\n cancelled: [\"cancelled\"],\n};\n\ninterface A2ATasksListQuery {\n pageSize: number;\n offset: number;\n statuses?: readonly TaskItem[\"status\"][];\n contextId?: string;\n statusTimestampAfter?: string;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\n/** Encode a numeric TaskStore offset as an opaque, URL-safe page token. */\nfunction encodePageToken(offset: number): string {\n return Buffer.from(String(offset), \"utf8\").toString(\"base64url\");\n}\n\n/** Decode an opaque page token back to a non-negative safe integer offset. */\nfunction decodePageToken(token: string): number | undefined {\n if (!/^[A-Za-z0-9_-]+$/.test(token)) return undefined;\n const text = Buffer.from(token, \"base64url\").toString(\"utf8\");\n if (!/^\\d+$/.test(text)) return undefined;\n const offset = Number(text);\n return Number.isSafeInteger(offset) && offset >= 0 ? offset : undefined;\n}\n\n/**\n * Parse loose `tasks/list` params: an optional page size, opaque page token,\n * and A2A status. Invalid values are reported as JSON-RPC -32602 errors.\n */\nfunction parseTasksListQuery(\n body: unknown,\n): { ok: true; query: A2ATasksListQuery } | { ok: false; message: string } {\n const record = asRecord(body);\n const rawParams = record?.params;\n if (rawParams !== undefined && rawParams !== null && asRecord(rawParams) === undefined) {\n return { ok: false, message: \"params must be an object\" };\n }\n const params = asRecord(rawParams) ?? {};\n\n let pageSize = DEFAULT_A2A_TASKS_PAGE_SIZE;\n if (params.pageSize !== undefined) {\n const value = params.pageSize;\n if (\n typeof value !== \"number\" ||\n !Number.isInteger(value) ||\n value < 1 ||\n value > MAX_A2A_TASKS_PAGE_SIZE\n ) {\n return {\n ok: false,\n message: `pageSize must be an integer between 1 and ${MAX_A2A_TASKS_PAGE_SIZE}`,\n };\n }\n pageSize = value;\n }\n\n let offset = 0;\n if (params.pageToken !== undefined) {\n const token = params.pageToken;\n const decoded = typeof token === \"string\" ? decodePageToken(token) : undefined;\n if (decoded === undefined) {\n return { ok: false, message: \"pageToken is invalid\" };\n }\n offset = decoded;\n }\n\n let contextId: string | undefined;\n if (params.contextId !== undefined) {\n if (typeof params.contextId !== \"string\") {\n return { ok: false, message: \"contextId must be a string\" };\n }\n contextId = params.contextId;\n }\n\n let statusTimestampAfter: string | undefined;\n if (params.statusTimestampAfter !== undefined) {\n if (typeof params.statusTimestampAfter !== \"string\") {\n return { ok: false, message: \"statusTimestampAfter must be a string\" };\n }\n statusTimestampAfter = params.statusTimestampAfter;\n }\n\n let statuses: readonly TaskItem[\"status\"][] | undefined;\n if (params.status !== undefined) {\n const value = params.status;\n if (\n typeof value !== \"string\" ||\n !Object.prototype.hasOwnProperty.call(TASKS_LIST_STATUSES, value)\n ) {\n return { ok: false, message: \"status is invalid\" };\n }\n statuses = TASKS_LIST_STATUSES[value];\n }\n\n return {\n ok: true,\n query: {\n pageSize,\n offset,\n ...(statuses ? { statuses } : {}),\n ...(contextId ? { contextId } : {}),\n ...(statusTimestampAfter ? { statusTimestampAfter } : {}),\n },\n };\n}\n\nfunction isA2ATaskSnapshot(value: unknown, id: string): value is A2ATask {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as A2ATask).id === id &&\n typeof (value as A2ATask).status === \"object\" &&\n (value as A2ATask).status !== null\n );\n}\n\nfunction isCanonicalA2ATaskItem(\n item: TaskItem,\n scope: A2AStandardScope,\n): boolean {\n return (\n item.tenantId === scope.tenantId &&\n item.ownerType === \"agent\" &&\n item.ownerId === scope.assistantId &&\n item.projectId === scope.projectId &&\n item.sourceId === \"a2a\"\n );\n}\n\n/**\n * Page the canonical A2A task stream.\n *\n * @remarks Every row is reconciled through the adapter so the response reflects\n * the canonical status/result/failure/interruption rather than a possibly stale\n * `context.a2aTask` snapshot. The cursor is the raw TaskStore offset consumed so\n * far, so rows dropped by defense filtering do not repeat or skip the next page.\n * A page token is emitted only after finding one more eligible row.\n */\nasync function listCanonicalA2ATasks(\n internalTasks: TaskStore,\n taskStore: A2ATaskStore,\n scope: A2AStandardScope,\n query: A2ATasksListQuery,\n): Promise<{ tasks: A2ATask[]; nextPageToken?: string }> {\n const statuses = query.statuses;\n // Some stores only accept a single status. Multi-status queries (for example\n // input-required = interrupted + review) are filtered in this route instead.\n const storeStatus = statuses?.length === 1 ? statuses[0] : undefined;\n const fetchSize = query.pageSize + 1;\n const tasks: A2ATask[] = [];\n const seen = new Set<string>();\n let cursor = query.offset;\n\n for (;;) {\n const rows = await internalTasks.list({\n tenantId: scope.tenantId,\n ownerType: \"agent\",\n ownerId: scope.assistantId,\n projectId: scope.projectId,\n sourceId: \"a2a\",\n ...(storeStatus ? { status: storeStatus } : {}),\n limit: fetchSize,\n offset: cursor,\n });\n if (rows.length === 0) break;\n\n let nextPageToken: string | undefined;\n for (let index = 0; index < rows.length; index += 1) {\n const item = rows[index];\n if (!isCanonicalA2ATaskItem(item, scope)) continue;\n if (statuses && !statuses.includes(item.status)) continue;\n const restored = await taskStore.load(item.id).catch(() => undefined);\n if (!restored || !isA2ATaskSnapshot(restored, item.id)) continue;\n if (query.contextId && restored.contextId !== query.contextId) continue;\n if (\n query.statusTimestampAfter\n && (!restored.status.timestamp || restored.status.timestamp <= query.statusTimestampAfter)\n ) continue;\n if (seen.has(restored.id)) continue;\n if (tasks.length < query.pageSize) {\n seen.add(restored.id);\n tasks.push(restored);\n continue;\n }\n nextPageToken = encodePageToken(cursor + index);\n break;\n }\n if (nextPageToken !== undefined) {\n return { tasks, nextPageToken };\n }\n cursor += rows.length;\n if (rows.length < fetchSize) break;\n }\n\n return { tasks };\n}\n\nfunction isAsyncGenerator(\n value: JSONRPCResponse | AsyncGenerator<JSONRPCResponse, void, undefined>,\n): value is AsyncGenerator<JSONRPCResponse, void, undefined> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as unknown as { [Symbol.asyncIterator]?: unknown })[\n Symbol.asyncIterator\n ] === \"function\"\n );\n}\n\nconst SSE_HEADERS: Record<string, string> = {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Access-Control-Allow-Origin\": \"*\",\n \"A2A-Version\": \"0.3\",\n};\n\n/**\n * Register the standard A2A 0.3 endpoints for per-assistant discovery and\n * execution: agent card, JSON-RPC (`message/send`, `message/stream`,\n * `tasks/get`, `tasks/cancel`), and an internal `test-call` management route.\n */\nexport function registerA2AStandardRoutes(\n app: FastifyInstance,\n deps: A2AStandardRoutesDeps,\n): void {\n const authService = deps.authService;\n const resolveTasks =\n deps.getTaskStoreLattice ??\n (() => getStoreLattice(\"default\", \"task\").store as TaskStore);\n const resolveTaskWorkItems = deps.getTaskWorkItemStore ??\n (() => getStoreLattice(\"default\", \"taskWorkItem\").store as TaskWorkItemStore);\n const getAssistantStore =\n deps.getAssistantStore ??\n (() => getStoreLattice(\"default\", \"assistant\").store as AssistantStore);\n const getProjectStore =\n deps.getProjectStore ??\n (() => getStoreLattice(\"default\", \"project\").store as ProjectStore);\n const resolveRunLedger =\n deps.getAgentRunLedger ??\n (() => getStoreLattice(\"default\", \"agentRun\").store as IAgentRunLedger);\n const resolveStore =\n deps.getStore ??\n (() => getStoreLattice(\"default\", \"store\").store as StoreProtocol);\n const hasPushStore = (): boolean => {\n try {\n return Boolean(resolveStore());\n } catch {\n return false;\n }\n };\n const createPushStore = (\n scope: A2AStandardScope,\n ): A2APushNotificationStore | undefined => {\n const store = resolveStore();\n if (!store) return undefined;\n return new A2APushNotificationStore({\n store,\n scope: {\n tenantId: scope.tenantId,\n assistantId: scope.assistantId,\n },\n ...(deps.resolvePushHost ? { resolveHost: deps.resolvePushHost } : {}),\n });\n };\n const unavailableRunLedger = (): Pick<\n IAgentRunLedger,\n \"createPendingRun\" | \"getRun\" | \"requestCancel\"\n > => ({\n createPendingRun: async () => {\n throw new Error(\"A2A run ledger is not configured\");\n },\n getRun: async () => undefined,\n requestCancel: async () => \"not_found\",\n });\n const runServiceFor = (scope: A2AStandardScope): A2ARunService => {\n if (deps.createRunService) return deps.createRunService(scope);\n let ledger: Pick<\n IAgentRunLedger,\n \"createPendingRun\" | \"getRun\" | \"requestCancel\"\n >;\n try {\n ledger = resolveRunLedger();\n } catch {\n // Task reads remain available; execution reports a failed task instead\n // of turning every JSON-RPC request into a 500.\n ledger = unavailableRunLedger();\n }\n const maxActiveRunsForTenant = resolveRunTaskMaxActivePerTenant();\n return new A2ARunService({\n ledger,\n chunkSource: runServiceChunkSource(scope),\n ...(maxActiveRunsForTenant === undefined\n ? {}\n : { maxActiveRunsForTenant }),\n getLatestCursor: async (threadId, assistantId) => {\n const buffer = getChunkBuffer(\"default\");\n if (!buffer) return undefined;\n const key = chunkBufferStreamKey(scope.tenantId, assistantId, threadId);\n // The in-memory buffer resets synthetic cursors on each run, so a\n // completed buffer has no stable cross-run cursor; fall back to the\n // command run's id anchor. Shared buffers keep stable log cursors.\n const status = await buffer.getThreadStatus(key);\n if (status !== \"active\") return undefined;\n return buffer.latestCursor(key);\n },\n });\n };\n const stateResolver = deps.stateResolver ?? defaultStateResolver();\n const runtimeRegistry = deps.runtimeRegistry ?? new A2ARuntimeRegistry();\n /**\n * Every A2A task — governed or plain — persists as a canonical `TaskItem`\n * through the adapter. The assistant's TaskMiddleware only controls whether\n * the executor injects `manage_task` instructions.\n */\n const taskStoreFor = (\n scope: { tenantId: string; projectId: string; workspaceId?: string; assistantId: string },\n internalTasks: TaskStore,\n workItems: TaskWorkItemStore,\n ): A2ATaskStore => new A2ATaskStoreAdapter({\n taskStore: internalTasks,\n workItemStore: workItems,\n lifecycle: createTaskLifecycleService({\n taskStore: internalTasks,\n workItemStore: workItems,\n }) as unknown as A2ATaskLifecycleAdapter,\n scope,\n });\n app.addHook(\"onClose\", async () => {\n runtimeRegistry.close();\n });\n\n /**\n * Follow an active durable run from its persisted A2A anchors without using\n * this process's execution event bus, so a resubscribe can land on any\n * replica (or after a restart) and still receive the run's chunks.\n */\n const handleTaskResubscribe = async (\n request: FastifyRequest<{ Params: { assistantId: string } }>,\n reply: FastifyReply,\n requestId: string | number | null,\n scope: A2AStandardScope,\n taskStore: A2ATaskStore,\n options: { version?: \"0.3\" | \"1.0\"; body?: unknown } = {},\n ): Promise<void> => {\n const version = options.version ?? \"0.3\";\n reply.header(\"A2A-Version\", version);\n const body = asRecord(options.body ?? request.body);\n const params = asRecord(body?.params);\n const taskId = asString(params?.id);\n if (!taskId) {\n reply.send(jsonRpcError(requestId, -32602, \"Invalid params: id is required\"));\n return;\n }\n\n let task: A2ATask | undefined;\n try {\n task = await taskStore.load(taskId);\n } catch (err) {\n request.log.error({ err }, \"a2a:jsonrpc:resubscribe\");\n reply.status(500).send(jsonRpcError(requestId, -32603, \"Internal error\"));\n return;\n }\n if (!task) {\n reply.send({\n jsonrpc: \"2.0\",\n id: requestId,\n error: A2AError.taskNotFound(taskId).toJSONRPCError(),\n });\n return;\n }\n\n let runtimeLease;\n try {\n runtimeLease = runtimeRegistry.acquire(scope);\n } catch (err) {\n if (err instanceof A2ARuntimeCapacityError) {\n request.log.error({ err, scope }, \"a2a:jsonrpc:runtime_capacity\");\n reply\n .status(503)\n .send(jsonRpcError(requestId, -32603, \"A2A runtime capacity exhausted\"));\n return;\n }\n throw err;\n }\n\n reply.hijack();\n reply.raw.writeHead(200, { ...SSE_HEADERS, \"A2A-Version\": version });\n\n const writeFrame = async (frame: unknown, event?: string): Promise<void> => {\n if (reply.raw.writableEnded || reply.raw.destroyed) return;\n const data = `${event ? `event: ${event}\\n` : \"\"}data: ${JSON.stringify(frame)}\\n\\n`;\n if (reply.raw.write(data)) return;\n await new Promise<void>((resolve) => {\n const done = (): void => {\n reply.raw.off(\"drain\", done);\n reply.raw.off(\"close\", done);\n resolve();\n };\n reply.raw.once(\"drain\", done);\n reply.raw.once(\"close\", done);\n });\n };\n const resultFrame = (result: unknown): { jsonrpc: \"2.0\"; id: string | number | null; result: unknown } => ({\n jsonrpc: \"2.0\",\n id: requestId,\n result: version === \"1.0\" ? toA2A11StreamResult(result) : result,\n });\n\n let disconnected = false;\n let iterator: AsyncIterator<MessageChunk> | undefined;\n const closeIterator = async (): Promise<void> => {\n if (!iterator) return;\n const current = iterator;\n iterator = undefined;\n try {\n await current.return?.();\n } catch {\n // The source is closing anyway; never mask the original stream result.\n }\n };\n const onClose = (): void => {\n disconnected = true;\n void closeIterator();\n };\n reply.raw.once(\"close\", onClose);\n\n try {\n await writeFrame(resultFrame(task));\n if (disconnected || isTerminalA2AState(task.status.state)) return;\n\n const runId = asString(task.metadata?.a2aRunId);\n if (!runId) return;\n const threadId = asString(task.metadata?.threadId) ?? task.contextId;\n const messageId = asString(task.metadata?.a2aMessageId);\n const cursor = asString(task.metadata?.a2aStreamCursor);\n const runService = runServiceFor(scope);\n const reconcileCanonicalTask = async (): Promise<A2ATask | undefined> => {\n const reconciled = await reconcileTaskFromRun(\n taskStore,\n runService,\n stateResolver,\n scope,\n options.body ?? request.body,\n ).catch(() => undefined);\n return reconciled ?? taskStore.load(taskId).catch(() => undefined);\n };\n const run = await runService\n .getRun(scope.tenantId, runId, threadId, scope.assistantId)\n .catch(() => undefined);\n if (!run) return;\n if (TERMINAL_RUN_STATUSES.has(run.status)) {\n const canonical = await reconcileCanonicalTask();\n if (canonical && !disconnected) await writeFrame(resultFrame(canonical));\n return;\n }\n if (!messageId) return;\n\n const source = runService.stream(\n threadId,\n scope.assistantId,\n messageId,\n cursor,\n { tenantId: scope.tenantId, runId },\n );\n iterator = source[Symbol.asyncIterator]();\n try {\n for (;;) {\n if (disconnected) return;\n const next = await iterator.next();\n if (next.done) break;\n const chunk = next.value;\n const text = chunk.data?.content ?? \"\";\n if (chunk.type === MessageChunkTypes.AI && text) {\n await writeFrame(resultFrame({\n kind: \"status-update\",\n taskId: task.id,\n contextId: task.contextId,\n status: {\n state: \"working\",\n message: agentMessage(text),\n timestamp: new Date().toISOString(),\n },\n final: false,\n }));\n }\n if (\n chunk.type === MessageChunkTypes.MESSAGE_COMPLETED\n || chunk.type === MessageChunkTypes.MESSAGE_FAILED\n || chunk.type === MessageChunkTypes.INTERRUPT\n ) {\n break;\n }\n }\n } finally {\n await closeIterator();\n }\n\n if (disconnected) return;\n // The terminal chunk can arrive just before the worker settles the run\n // row. Wait for that bounded settlement so the final canonical task does\n // not close as `working`; a timeout still reconciles the current state.\n await runService.join(\n scope.tenantId,\n threadId,\n scope.assistantId,\n runId,\n RESUBSCRIBE_SETTLE_TIMEOUT_MS,\n ).catch(() => undefined);\n if (disconnected) return;\n const canonical = await reconcileCanonicalTask();\n if (canonical) await writeFrame(resultFrame(canonical));\n } catch (err) {\n if (err instanceof ChunkCursorExpiredError) {\n // The task/run remain canonical; the client must reload the task and\n // decide whether to attach again. Do not silently replay from an\n // arbitrary boundary.\n await writeFrame({\n jsonrpc: \"2.0\",\n id: requestId,\n error: {\n code: -32603,\n message: \"CURSOR_EXPIRED\",\n data: { code: \"CURSOR_EXPIRED\" },\n },\n }, \"error\");\n return;\n }\n request.log.error({ err }, \"a2a:jsonrpc:resubscribe:stream\");\n await writeFrame({\n jsonrpc: \"2.0\",\n id: requestId,\n error: A2AError.internalError(\n err instanceof Error ? err.message : \"Streaming error.\",\n ).toJSONRPCError(),\n }, \"error\");\n } finally {\n reply.raw.off(\"close\", onClose);\n await closeIterator();\n runtimeLease.release();\n if (!reply.raw.writableEnded) reply.raw.end();\n }\n };\n\n // GET /api/a2a/agents/:assistantId/.well-known/agent-card.json\n // GET /a2a/:assistantId/.well-known/agent-card.json (official alias)\n const handleAgentCard = async (\n request: FastifyRequest<{ Params: { assistantId: string } }>,\n reply: FastifyReply,\n ): Promise<void> => {\n // Card discovery is key-authenticated: the same key that authorizes\n // jsonrpc also gates which agents are discoverable.\n const auth = await authService.authenticate(\n getHeader(request.headers.authorization) ??\n getHeader(request.headers[\"x-api-key\"]),\n );\n if (!auth.authenticated) {\n reply.status(401).send({ error: \"Unauthorized\" });\n return;\n }\n\n let assistant: Assistant;\n try {\n assistant = await authService.assertAgentAccess(\n auth,\n request.params.assistantId,\n );\n } catch (err) {\n if (err instanceof A2AAuthError) {\n reply.status(err.statusCode).send({ error: err.message });\n return;\n }\n request.log.error({ err }, \"a2a:agent-card:auth\");\n reply.status(500).send({ error: \"Internal error\" });\n return;\n }\n\n reply.header(\"A2A-Version\", \"0.3\");\n const officialAlias = request.url.split(\"?\")[0].startsWith(\"/a2a/\");\n reply\n .status(200)\n .send(\n buildAgentCardForAssistant({\n assistant,\n baseUrl: buildBaseUrl(request),\n pushNotifications: hasPushStore(),\n ...(officialAlias\n ? { jsonRpcPath: `/a2a/${assistant.id}` }\n : {}),\n }),\n );\n };\n app.get<{ Params: { assistantId: string } }>(\n \"/api/a2a/agents/:assistantId/.well-known/agent-card.json\",\n handleAgentCard,\n );\n app.get<{ Params: { assistantId: string } }>(\n \"/a2a/:assistantId/.well-known/agent-card.json\",\n handleAgentCard,\n );\n\n // POST /api/a2a/agents/:assistantId/jsonrpc\n // POST /a2a/:assistantId (official alias)\n const handleJsonRpc = async (\n request: FastifyRequest<{ Params: { assistantId: string } }>,\n reply: FastifyReply,\n ): Promise<void> => {\n const requestId = extractRequestId(request.body);\n const auth = await authService.authenticate(\n getHeader(request.headers.authorization) ??\n getHeader(request.headers[\"x-api-key\"]),\n );\n\n if (!auth.authenticated) {\n reply.status(401).send(jsonRpcError(requestId, -32001, \"Unauthorized\"));\n return;\n }\n\n let assistant: Assistant;\n try {\n assistant = await authService.assertAgentAccess(\n auth,\n request.params.assistantId,\n );\n } catch (err) {\n if (err instanceof A2AAuthError) {\n reply\n .status(err.statusCode)\n .send(\n jsonRpcError(\n requestId,\n authErrorToRpcCode(err.statusCode),\n err.message,\n ),\n );\n return;\n }\n request.log.error({ err }, \"a2a:jsonrpc:auth\");\n reply\n .status(500)\n .send(jsonRpcError(requestId, -32603, \"Internal error\"));\n return;\n }\n\n const tenantId = auth.tenantId ?? \"default\";\n const scope = {\n tenantId,\n projectId: auth.projectId ?? \"\",\n workspaceId: await resolveWorkspaceId(getProjectStore, tenantId, auth.projectId),\n assistantId: assistant.id,\n };\n const internalTasks = resolveTasks();\n const workItems = resolveTaskWorkItems();\n const taskStore = taskStoreFor(scope, internalTasks, workItems);\n\n const method = requestMethod(request.body);\n if (\n method === \"tasks/list\" ||\n method === \"agent/getExtendedAgentCard\" ||\n method === \"agent/getAuthenticatedExtendedCard\"\n ) {\n reply.header(\"A2A-Version\", \"0.3\");\n if (method === \"tasks/list\") {\n const parsed = parseTasksListQuery(request.body);\n if (!parsed.ok) {\n reply.send(jsonRpcError(requestId, -32602, parsed.message));\n return;\n }\n try {\n const result = await listCanonicalA2ATasks(\n internalTasks,\n taskStore,\n scope,\n parsed.query,\n );\n reply.send({ jsonrpc: \"2.0\", id: requestId, result });\n } catch (err) {\n request.log.error({ err }, \"a2a:jsonrpc:tasks-list\");\n reply.send(jsonRpcError(requestId, -32603, \"Internal error\"));\n }\n return;\n }\n const extendedCard = buildAgentCardForAssistant({\n assistant,\n baseUrl: buildBaseUrl(request),\n pushNotifications: hasPushStore(),\n ...(request.url.split(\"?\")[0].startsWith(\"/a2a/\")\n ? { jsonRpcPath: `/a2a/${assistant.id}` }\n : {}),\n });\n reply.send({ jsonrpc: \"2.0\", id: requestId, result: extendedCard });\n return;\n }\n\n if (method === \"tasks/resubscribe\") {\n await handleTaskResubscribe(request, reply, requestId, scope, taskStore);\n return;\n }\n\n const ingestor = makeFileIngestor(scope.tenantId, deps.maxFileBytes);\n const runService = runServiceFor(scope);\n const executor = new AxiomAgentExecutor({\n scope,\n assistant,\n taskStore,\n ingestor,\n runService,\n blocking: blockingFor(request.body),\n getInterrupts: (threadId) =>\n stateResolver.getInterrupts(threadId, assistant.id, scope),\n });\n try {\n // Ledger reconciliation runs before the SDK sees the task so a lost\n // background projection (or another replica) still converges the A2A\n // task, and cross-replica cancellation never depends on a local bus.\n await reconcileTaskFromRun(\n taskStore,\n runService,\n stateResolver,\n scope,\n request.body,\n );\n const canceled = await cancelTaskFromRun(\n taskStore,\n runService,\n scope,\n request.body,\n );\n if (canceled) {\n reply.header(\"A2A-Version\", \"0.3\");\n reply.send({ jsonrpc: \"2.0\", id: requestId, result: canceled });\n return;\n }\n } catch (err) {\n if (err instanceof A2AError) {\n reply.send(jsonRpcError(requestId, err.code, err.message));\n return;\n }\n request.log.error({ err }, \"a2a:jsonrpc:reconcile\");\n reply\n .status(500)\n .send(jsonRpcError(requestId, -32603, \"Internal error\"));\n return;\n }\n // A malformed/broken store is handled by the SDK request path below,\n // which owns runtime lease release; validation is best-effort noise-free.\n const resumeError = await resumeValidationError(taskStore, request.body)\n .catch(() => undefined);\n if (resumeError !== undefined) {\n reply.send(jsonRpcError(requestId, -32602, resumeError));\n return;\n }\n let pushStore: A2APushNotificationStore | undefined;\n try {\n pushStore = createPushStore(scope);\n } catch (err) {\n request.log.warn({ err }, \"a2a:jsonrpc:push-store-unavailable\");\n }\n const card = buildAgentCardForAssistant({\n assistant,\n baseUrl: buildBaseUrl(request),\n pushNotifications: pushStore !== undefined,\n ...(request.url.split(\"?\")[0].startsWith(\"/a2a/\")\n ? { jsonRpcPath: `/a2a/${assistant.id}` }\n : {}),\n });\n let runtimeLease;\n try {\n runtimeLease = runtimeRegistry.acquire(scope);\n } catch (err) {\n if (err instanceof A2ARuntimeCapacityError) {\n request.log.error({ err, scope }, \"a2a:jsonrpc:runtime_capacity\");\n reply\n .status(503)\n .send(jsonRpcError(requestId, -32603, \"A2A runtime capacity exhausted\"));\n return;\n }\n throw err;\n }\n let result: JSONRPCResponse | AsyncGenerator<JSONRPCResponse, void, undefined>;\n try {\n const pushSender = pushStore\n ? deps.getPushNotificationSender?.(pushStore)\n ?? new A2APushNotificationSender({\n store: pushStore,\n ...(deps.resolvePushHost ? { resolveHost: deps.resolvePushHost } : {}),\n })\n : undefined;\n const handler = new DefaultRequestHandler(\n card,\n taskStore,\n executor,\n runtimeLease.manager,\n pushStore,\n pushSender,\n );\n const transport = new JsonRpcTransportHandler(handler);\n reply.header(\"A2A-Version\", \"0.3\");\n result = await transport.handle(request.body);\n } catch (err) {\n runtimeLease.release();\n if (err instanceof A2AError) {\n reply.send(jsonRpcError(requestId, err.code, err.message));\n return;\n }\n request.log.error({ err }, \"a2a:jsonrpc:handler\");\n reply\n .status(500)\n .send(jsonRpcError(requestId, -32603, \"Internal error\"));\n return;\n }\n\n if (isAsyncGenerator(result)) {\n reply.hijack();\n reply.raw.writeHead(200, SSE_HEADERS);\n try {\n for await (const evt of result) {\n reply.raw.write(`data: ${JSON.stringify(evt)}\\n\\n`);\n }\n } catch (err) {\n request.log.error({ err }, \"a2a:jsonrpc:stream\");\n const errorResponse = {\n jsonrpc: \"2.0\" as const,\n id: requestId,\n error: A2AError.internalError(\n err instanceof Error ? err.message : \"Streaming error.\",\n ).toJSONRPCError(),\n };\n reply.raw.write(`event: error\\ndata: ${JSON.stringify(errorResponse)}\\n\\n`);\n } finally {\n runtimeLease.release();\n reply.raw.end();\n }\n return;\n }\n\n runtimeLease.release();\n reply.send(result);\n };\n app.post<{ Params: { assistantId: string } }>(\n \"/api/a2a/agents/:assistantId/jsonrpc\",\n handleJsonRpc,\n );\n app.post<{ Params: { assistantId: string } }>(\n \"/a2a/:assistantId\",\n handleJsonRpc,\n );\n\n // POST /api/a2a/agents/:assistantId/test-call\n app.post<{\n Params: { assistantId: string };\n Body: { projectId?: string; message?: string };\n }>(\n \"/api/a2a/agents/:assistantId/test-call\",\n async (request, reply) => {\n const user = getSessionUser(request);\n if (!user?.tenantId) {\n reply.status(401).send({ success: false, error: \"Unauthorized\" });\n return;\n }\n const tenantId = user.tenantId;\n const body = request.body ?? {};\n const { projectId, message } = body;\n\n if (!projectId) {\n reply.status(400).send({ error: \"projectId is required\" });\n return;\n }\n if (!message || !message.trim()) {\n reply.status(400).send({ error: \"message is required\" });\n return;\n }\n\n const assistant = await getAssistantStore().getAssistantById(\n tenantId,\n request.params.assistantId,\n );\n if (!assistant) {\n reply.status(404).send({ error: \"Assistant not found\" });\n return;\n }\n\n const project = await getProjectStore().getProjectById(\n tenantId,\n projectId,\n );\n if (!project || project.tenantId !== tenantId) {\n reply.status(403).send({ error: \"Project not found\" });\n return;\n }\n\n const scope = {\n tenantId,\n projectId,\n workspaceId: project.workspaceId,\n assistantId: assistant.id,\n };\n const ingestor = makeFileIngestor(scope.tenantId, deps.maxFileBytes);\n const internalTasks = resolveTasks();\n const workItems = resolveTaskWorkItems();\n const taskStore = taskStoreFor(scope, internalTasks, workItems);\n const executor = new AxiomAgentExecutor({\n scope,\n assistant,\n taskStore,\n ingestor,\n runService: runServiceFor(scope),\n blocking: true,\n getInterrupts: (threadId) =>\n stateResolver.getInterrupts(threadId, assistant.id, scope),\n });\n\n const taskId = uuidv4();\n const contextId = uuidv4();\n const userMessage: Message = {\n kind: \"message\",\n messageId: uuidv4(),\n role: \"user\",\n parts: [{ kind: \"text\", text: message }],\n };\n const requestContext = new RequestContext(userMessage, taskId, contextId);\n const bus = new DefaultExecutionEventBus();\n\n reply.hijack();\n reply.raw.writeHead(200, SSE_HEADERS);\n\n const sendEvent = (event: string, data: unknown): void => {\n reply.raw.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`);\n };\n\n bus.on(\"event\", (event: AgentExecutionEvent) => {\n sendEvent(event.kind, event);\n });\n\n try {\n await executor.execute(requestContext, bus);\n } catch (err) {\n request.log.error({ err }, \"a2a:test-call:execution\");\n // Best-effort canonical settle so an unexpected executor throw does not\n // leave the TaskItem non-terminal; the terminal event publishes regardless.\n try {\n await taskStore.save({\n kind: \"task\",\n id: taskId,\n contextId,\n status: { state: \"failed\", timestamp: new Date().toISOString() },\n });\n } catch (saveError) {\n request.log.error({ err: saveError }, \"a2a:test-call:settle\");\n }\n sendEvent(\"status-update\", {\n kind: \"status-update\",\n taskId,\n contextId,\n status: { state: \"failed\", timestamp: new Date().toISOString() },\n final: true,\n });\n } finally {\n reply.raw.end();\n }\n },\n );\n\n // ─── A2A 1.0 ──────────────────────────────────────────────────────────\n // 1.0 uses a different AgentCard shape, PascalCase JSON-RPC methods and a\n // protobuf-JSON task/message/part wire shape. Execution still goes through\n // the same A2ARunService + TaskItem adapter by translating the request into\n // the existing 0.3 transport and translating its result back.\n\n const v1CardFor = (\n request: FastifyRequest,\n assistant: Assistant,\n pushNotifications: boolean,\n ): ReturnType<typeof buildAgentCardForAssistantV1> =>\n buildAgentCardForAssistantV1({\n assistant,\n baseUrl: buildBaseUrl(request),\n pushNotifications,\n });\n\n const authenticateV1 = async (\n request: FastifyRequest<{ Params: { assistantId: string } }>,\n ): Promise<\n | { ok: true; assistant: Assistant; auth: Awaited<ReturnType<A2AAuthService[\"authenticate\"]>> }\n | { ok: false; status: number; message: string }\n > => {\n const auth = await authService.authenticate(\n getHeader(request.headers.authorization) ??\n getHeader(request.headers[\"x-api-key\"]),\n );\n if (!auth.authenticated) {\n return { ok: false, status: 401, message: \"Unauthorized\" };\n }\n try {\n const assistant = await authService.assertAgentAccess(\n auth,\n request.params.assistantId,\n );\n return { ok: true, assistant, auth };\n } catch (err) {\n if (err instanceof A2AAuthError) {\n return { ok: false, status: err.statusCode, message: err.message };\n }\n throw err;\n }\n };\n\n app.get<{ Params: { assistantId: string } }>(\n \"/a2a/v1/:assistantId/.well-known/agent-card.json\",\n async (request, reply) => {\n const auth = await authenticateV1(request);\n if (!auth.ok) {\n reply.status(auth.status).send({ error: auth.message });\n return;\n }\n reply.header(\"A2A-Version\", \"1.0\");\n reply.status(200).send(\n AgentCardV1.toJSON(\n v1CardFor(request, auth.assistant, hasPushStore()),\n ),\n );\n },\n );\n\n app.post<{ Params: { assistantId: string } }>(\n \"/a2a/v1/:assistantId\",\n async (request, reply) => {\n const requestBody = asRecord(request.body) ?? {};\n const requestId = extractRequestId(requestBody);\n reply.header(\"A2A-Version\", \"1.0\");\n const requestedVersion = getHeader(request.headers[\"a2a-version\"]);\n if (requestedVersion !== undefined && !requestedVersion.startsWith(\"1.0\")) {\n reply\n .header(\"A2A-Version\", \"1.0\")\n .send(versionNotSupportedError(requestId, requestedVersion));\n return;\n }\n\n const auth = await authenticateV1(request);\n if (!auth.ok) {\n reply\n .status(auth.status)\n .send(jsonRpcError(requestId, authErrorToRpcCode(auth.status), auth.message));\n return;\n }\n\n const rawMethod = asString(requestBody.method);\n const tenantId = auth.auth.tenantId ?? \"default\";\n const scope = {\n tenantId,\n projectId: auth.auth.projectId ?? \"\",\n workspaceId: await resolveWorkspaceId(getProjectStore, tenantId, auth.auth.projectId),\n assistantId: auth.assistant.id,\n };\n const internalTasks = resolveTasks();\n const workItems = resolveTaskWorkItems();\n const taskStore = taskStoreFor(scope, internalTasks, workItems);\n\n // Task listing is canonical in this route, not part of the 0.3 SDK\n // transport. Translate only the query and reuse the same paging helper.\n if (rawMethod === \"ListTasks\") {\n const v03Body = toA2A03JsonRpcRequest(requestBody);\n const parsed = parseTasksListQuery(v03Body);\n if (!parsed.ok) {\n reply.send(jsonRpcError(requestId, -32602, parsed.message));\n return;\n }\n try {\n const result = await listCanonicalA2ATasks(\n internalTasks,\n taskStore,\n scope,\n parsed.query,\n );\n const listParams = asRecord(requestBody.params);\n reply.send({\n jsonrpc: \"2.0\",\n id: requestId,\n result: toA2A11ListResult(result, {\n includeArtifacts: listParams?.includeArtifacts === true,\n }),\n });\n } catch (err) {\n request.log.error({ err }, \"a2a:v1:list\");\n reply.send(jsonRpcError(requestId, -32603, \"Internal error\"));\n }\n return;\n }\n\n if (rawMethod === \"GetExtendedAgentCard\") {\n reply.send({\n jsonrpc: \"2.0\",\n id: requestId,\n result: AgentCardV1.toJSON(\n v1CardFor(request, auth.assistant, hasPushStore()),\n ),\n });\n return;\n }\n\n const v03Body = toA2A03JsonRpcRequest(requestBody);\n if (rawMethod === \"SubscribeToTask\") {\n await handleTaskResubscribe(\n request,\n reply,\n requestId,\n scope,\n taskStore,\n { version: \"1.0\", body: v03Body },\n );\n return;\n }\n const ingestor = makeFileIngestor(scope.tenantId, deps.maxFileBytes);\n const runService = runServiceFor(scope);\n const executor = new AxiomAgentExecutor({\n scope,\n assistant: auth.assistant,\n taskStore,\n ingestor,\n runService,\n blocking: blockingFor(v03Body),\n getInterrupts: (threadId) =>\n stateResolver.getInterrupts(threadId, auth.assistant.id, scope),\n });\n\n try {\n await reconcileTaskFromRun(\n taskStore,\n runService,\n stateResolver,\n scope,\n v03Body,\n );\n const canceled = await cancelTaskFromRun(\n taskStore,\n runService,\n scope,\n v03Body,\n );\n if (canceled) {\n reply.send({\n jsonrpc: \"2.0\",\n id: requestId,\n result: toA2A11Result(canceled, rawMethod),\n });\n return;\n }\n } catch (err) {\n if (err instanceof A2AError) {\n reply.send(jsonRpcError(requestId, err.code, err.message));\n return;\n }\n request.log.error({ err }, \"a2a:v1:reconcile\");\n reply.send(jsonRpcError(requestId, -32603, \"Internal error\"));\n return;\n }\n\n const resumeError = await resumeValidationError(taskStore, v03Body)\n .catch(() => undefined);\n if (resumeError !== undefined) {\n reply.send(jsonRpcError(requestId, -32602, resumeError));\n return;\n }\n\n let pushStore: A2APushNotificationStore | undefined;\n try {\n pushStore = createPushStore(scope);\n } catch (err) {\n request.log.warn({ err }, \"a2a:v1:push-store-unavailable\");\n }\n const card = buildAgentCardForAssistant({\n assistant: auth.assistant,\n baseUrl: buildBaseUrl(request),\n pushNotifications: pushStore !== undefined,\n jsonRpcPath: `/a2a/v1/${auth.assistant.id}`,\n });\n let runtimeLease;\n try {\n runtimeLease = runtimeRegistry.acquire(scope);\n } catch (err) {\n if (err instanceof A2ARuntimeCapacityError) {\n request.log.error({ err, scope }, \"a2a:v1:runtime_capacity\");\n reply\n .status(503)\n .send(jsonRpcError(requestId, -32603, \"A2A runtime capacity exhausted\"));\n return;\n }\n throw err;\n }\n\n let result: JSONRPCResponse | AsyncGenerator<JSONRPCResponse, void, undefined>;\n try {\n const pushSender = pushStore\n ? deps.getPushNotificationSender?.(pushStore)\n ?? new A2APushNotificationSender({\n store: pushStore,\n ...(deps.resolvePushHost ? { resolveHost: deps.resolvePushHost } : {}),\n })\n : undefined;\n const handler = new DefaultRequestHandler(\n card,\n taskStore,\n executor,\n runtimeLease.manager,\n pushStore,\n pushSender,\n );\n const transport = new JsonRpcTransportHandler(handler);\n result = await transport.handle(v03Body);\n } catch (err) {\n runtimeLease.release();\n if (err instanceof A2AError) {\n reply.send(jsonRpcError(requestId, err.code, err.message));\n return;\n }\n request.log.error({ err }, \"a2a:v1:handler\");\n reply.send(jsonRpcError(requestId, -32603, \"Internal error\"));\n return;\n }\n\n const convertResult = (value: unknown): unknown => {\n if (rawMethod === \"ListTaskPushNotificationConfigs\") {\n return toA2A11PushListResult(value);\n }\n const converted = toA2A11Result(value, rawMethod);\n if (rawMethod === \"SendMessage\") {\n if (value && typeof value === \"object\" && (value as { kind?: unknown }).kind === \"task\") {\n return { task: converted };\n }\n if (value && typeof value === \"object\" && (value as { kind?: unknown }).kind === \"message\") {\n return { message: converted };\n }\n }\n return converted;\n };\n\n if (isAsyncGenerator(result)) {\n reply.hijack();\n reply.raw.writeHead(200, SSE_HEADERS);\n try {\n for await (const frame of result) {\n const converted: Record<string, unknown> = {\n ...frame,\n ...(\"result\" in frame\n ? { result: toA2A11StreamResult(frame.result) }\n : {}),\n };\n reply.raw.write(`data: ${JSON.stringify(converted)}\\n\\n`);\n }\n } catch (err) {\n request.log.error({ err }, \"a2a:v1:stream\");\n const errorResponse = jsonRpcError(\n requestId,\n -32603,\n err instanceof Error ? err.message : \"Streaming error.\",\n );\n reply.raw.write(`event: error\\ndata: ${JSON.stringify(errorResponse)}\\n\\n`);\n } finally {\n runtimeLease.release();\n reply.raw.end();\n }\n return;\n }\n\n runtimeLease.release();\n reply.send(\n \"result\" in result\n ? { ...result, result: convertResult(result.result) }\n : result,\n );\n },\n );\n}\n","import type { AgentCard } from \"@a2a-js/sdk-v1\";\nimport { deriveAgentSkills, type CardAssistant } from \"./A2AAgentCardBuilder\";\n\nexport interface BuildAgentCardV1Params {\n assistant: CardAssistant;\n baseUrl: string;\n pushNotifications?: boolean;\n}\n\n/**\n * Build an A2A 1.0 AgentCard for one assistant. The card advertises the 1.0\n * JSON-RPC interface first and retains the existing 0.3 interface so a single\n * credential can discover and use both protocol versions.\n */\nexport function buildAgentCardForAssistantV1(\n params: BuildAgentCardV1Params,\n): AgentCard {\n const { assistant, baseUrl } = params;\n const v1Url = `${baseUrl}/a2a/v1/${assistant.id}`;\n const v03Url = `${baseUrl}/a2a/${assistant.id}`;\n const skills = deriveAgentSkills(assistant).map((skill) => ({\n ...skill,\n tags: skill.tags ?? [],\n examples: skill.examples ?? [],\n inputModes: [] as string[],\n outputModes: [] as string[],\n securityRequirements: [],\n }));\n\n return {\n name: assistant.name,\n description: assistant.description ?? \"\",\n supportedInterfaces: [\n {\n url: v1Url,\n protocolBinding: \"JSONRPC\",\n tenant: \"\",\n protocolVersion: \"1.0\",\n },\n {\n url: v03Url,\n protocolBinding: \"JSONRPC\",\n tenant: \"\",\n protocolVersion: \"0.3\",\n },\n ],\n provider: undefined,\n version: \"1.0.0\",\n capabilities: {\n streaming: true,\n pushNotifications: params.pushNotifications ?? true,\n extensions: [\n {\n uri: \"https://axiom-lattice.dev/a2a/extensions/push-notifications-experimental\",\n description:\n \"Push notifications are experimental and best-effort. Delivery is at-most-once; clients should poll tasks/get or use SubscribeToTask for reliability.\",\n required: false,\n params: {\n experimental: true,\n reliable: false,\n delivery: \"at-most-once\",\n },\n },\n ],\n extendedAgentCard: true,\n },\n securitySchemes: {\n bearer: {\n scheme: {\n $case: \"httpAuthSecurityScheme\",\n value: {\n scheme: \"Bearer\",\n description: \"API key sent as an Authorization Bearer token\",\n bearerFormat: \"\",\n },\n },\n },\n apiKeyHeader: {\n scheme: {\n $case: \"apiKeySecurityScheme\",\n value: {\n location: \"header\",\n name: \"x-api-key\",\n description: \"API key sent via the x-api-key header\",\n },\n },\n },\n },\n securityRequirements: [\n { schemes: { bearer: { list: [] } } },\n { schemes: { apiKeyHeader: { list: [] } } },\n ],\n defaultInputModes: [\"text\"],\n defaultOutputModes: [\"text\"],\n skills,\n signatures: [],\n };\n}\n","import type {\n A2AMessage,\n A2APart,\n A2ATask,\n A2ATaskState,\n} from \"@axiom-lattice/protocols\";\n\ntype A2AArtifactLike = NonNullable<A2ATask[\"artifacts\"]>[number];\n\ntype JsonRecord = Record<string, unknown>;\n\nconst V1_TO_V03_METHOD: Record<string, string> = {\n SendMessage: \"message/send\",\n SendStreamingMessage: \"message/stream\",\n GetTask: \"tasks/get\",\n ListTasks: \"tasks/list\",\n CancelTask: \"tasks/cancel\",\n SubscribeToTask: \"tasks/resubscribe\",\n CreateTaskPushNotificationConfig: \"tasks/pushNotificationConfig/set\",\n GetTaskPushNotificationConfig: \"tasks/pushNotificationConfig/get\",\n ListTaskPushNotificationConfigs: \"tasks/pushNotificationConfig/list\",\n DeleteTaskPushNotificationConfig: \"tasks/pushNotificationConfig/delete\",\n GetExtendedAgentCard: \"agent/getAuthenticatedExtendedCard\",\n};\n\nconst V1_TO_V03_STATE: Record<string, A2ATaskState> = {\n TASK_STATE_SUBMITTED: \"submitted\",\n TASK_STATE_WORKING: \"working\",\n TASK_STATE_COMPLETED: \"completed\",\n TASK_STATE_FAILED: \"failed\",\n TASK_STATE_CANCELED: \"canceled\",\n TASK_STATE_INPUT_REQUIRED: \"input-required\",\n TASK_STATE_REJECTED: \"rejected\",\n TASK_STATE_AUTH_REQUIRED: \"auth-required\",\n TASK_STATE_UNSPECIFIED: \"unknown\",\n};\n\nconst V03_TO_V1_STATE: Record<string, string> = {\n submitted: \"TASK_STATE_SUBMITTED\",\n working: \"TASK_STATE_WORKING\",\n completed: \"TASK_STATE_COMPLETED\",\n failed: \"TASK_STATE_FAILED\",\n canceled: \"TASK_STATE_CANCELED\",\n \"input-required\": \"TASK_STATE_INPUT_REQUIRED\",\n rejected: \"TASK_STATE_REJECTED\",\n \"auth-required\": \"TASK_STATE_AUTH_REQUIRED\",\n unknown: \"TASK_STATE_UNSPECIFIED\",\n};\n\nfunction asRecord(value: unknown): JsonRecord | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as JsonRecord\n : undefined;\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction asArray(value: unknown): unknown[] | undefined {\n return Array.isArray(value) ? value : undefined;\n}\n\nfunction withMetadata(\n value: JsonRecord,\n metadata: unknown,\n): JsonRecord {\n return typeof metadata === \"object\" && metadata !== null && !Array.isArray(metadata)\n ? { ...value, metadata }\n : value;\n}\n\n/** Convert a v1 task state name into the internal A2A 0.3 state. */\nexport function v1TaskStateTo03(value: unknown): A2ATaskState {\n if (typeof value !== \"string\") return \"unknown\";\n return V1_TO_V03_STATE[value]\n ?? (value as A2ATaskState);\n}\n\n/** Convert an internal A2A 0.3 state into the v1 protobuf JSON enum name. */\nexport function v03TaskStateToV1(value: unknown): string {\n if (typeof value !== \"string\") return \"TASK_STATE_UNSPECIFIED\";\n return V03_TO_V1_STATE[value] ?? \"TASK_STATE_UNSPECIFIED\";\n}\n\nfunction toV03Part(part: unknown): A2APart | undefined {\n const record = asRecord(part);\n if (!record) return undefined;\n\n // Accept both the v1 oneof JSON form and the 0.3 discriminated form so the\n // converter stays useful for tolerating older intermediates.\n if (typeof record.text === \"string\") {\n return withMetadata({ kind: \"text\", text: record.text }, record.metadata) as unknown as A2APart;\n }\n if (typeof record.raw === \"string\") {\n return withMetadata({\n kind: \"file\",\n file: {\n bytes: record.raw,\n ...(typeof record.mediaType === \"string\" ? { mimeType: record.mediaType } : {}),\n ...(typeof record.filename === \"string\" ? { name: record.filename } : {}),\n },\n }, record.metadata) as unknown as A2APart;\n }\n if (typeof record.url === \"string\") {\n return withMetadata({\n kind: \"file\",\n file: {\n uri: record.url,\n ...(typeof record.mediaType === \"string\" ? { mimeType: record.mediaType } : {}),\n ...(typeof record.filename === \"string\" ? { name: record.filename } : {}),\n },\n }, record.metadata) as unknown as A2APart;\n }\n if (\"data\" in record) {\n return withMetadata({ kind: \"data\", data: record.data }, record.metadata) as unknown as A2APart;\n }\n\n if (record.kind === \"text\" && typeof record.text === \"string\") {\n return withMetadata({ kind: \"text\", text: record.text }, record.metadata) as unknown as A2APart;\n }\n if (record.kind === \"file\") {\n const file = asRecord(record.file);\n if (!file) return undefined;\n return withMetadata({ kind: \"file\", file }, record.metadata) as unknown as A2APart;\n }\n if (record.kind === \"data\") {\n return withMetadata({ kind: \"data\", data: record.data }, record.metadata) as unknown as A2APart;\n }\n return undefined;\n}\n\nfunction toV1Part(part: A2APart): JsonRecord {\n if (part.kind === \"text\") {\n return withMetadata({ text: part.text }, part.metadata);\n }\n if (part.kind === \"data\") {\n return withMetadata({ data: part.data }, part.metadata);\n }\n const file = part.file;\n const base = \"uri\" in file\n ? {\n url: file.uri,\n ...(file.mimeType ? { mediaType: file.mimeType } : {}),\n ...(file.name ? { filename: file.name } : {}),\n }\n : {\n raw: file.bytes,\n ...(file.mimeType ? { mediaType: file.mimeType } : {}),\n ...(file.name ? { filename: file.name } : {}),\n };\n return withMetadata(base, part.metadata);\n}\n\nfunction v1RoleTo03(value: unknown): \"user\" | \"agent\" {\n if (value === \"ROLE_USER\" || value === \"user\" || value === 1) return \"user\";\n return \"agent\";\n}\n\nfunction v03RoleToV1(value: unknown): string {\n return value === \"user\" ? \"ROLE_USER\" : \"ROLE_AGENT\";\n}\n\nfunction toV03Message(value: unknown): A2AMessage | undefined {\n const record = asRecord(value);\n if (!record) return undefined;\n const parts = (asArray(record.parts) ?? [])\n .map(toV03Part)\n .filter((part): part is A2APart => part !== undefined);\n return {\n kind: \"message\",\n messageId: asString(record.messageId) ?? \"\",\n role: v1RoleTo03(record.role),\n parts,\n ...(asString(record.contextId) ? { contextId: asString(record.contextId) } : {}),\n ...(asString(record.taskId) ? { taskId: asString(record.taskId) } : {}),\n ...(typeof record.metadata === \"object\" && record.metadata !== null\n ? { metadata: record.metadata as Record<string, unknown> }\n : {}),\n ...(asArray(record.extensions) ? { extensions: record.extensions as string[] } : {}),\n ...(asArray(record.referenceTaskIds) ? { referenceTaskIds: record.referenceTaskIds as string[] } : {}),\n } as A2AMessage;\n}\n\nfunction toV1Message(message: A2AMessage): JsonRecord {\n return {\n messageId: message.messageId,\n ...(message.contextId ? { contextId: message.contextId } : {}),\n ...(message.taskId ? { taskId: message.taskId } : {}),\n role: v03RoleToV1(message.role),\n parts: message.parts.map(toV1Part),\n ...(message.metadata ? { metadata: message.metadata } : {}),\n ...(message.extensions?.length ? { extensions: message.extensions } : {}),\n ...(message.referenceTaskIds?.length ? { referenceTaskIds: message.referenceTaskIds } : {}),\n };\n}\n\nfunction toV03Status(value: unknown): A2ATask[\"status\"] | undefined {\n const record = asRecord(value);\n if (!record) return undefined;\n return {\n state: v1TaskStateTo03(record.state),\n ...(asRecord(record.message)\n ? { message: toV03Message(record.message) }\n : {}),\n ...(asString(record.timestamp) ? { timestamp: asString(record.timestamp) } : {}),\n } as A2ATask[\"status\"];\n}\n\nfunction toV1Status(status: A2ATask[\"status\"]): JsonRecord {\n return {\n state: v03TaskStateToV1(status.state),\n ...(status.message ? { message: toV1Message(status.message) } : {}),\n ...(status.timestamp ? { timestamp: status.timestamp } : {}),\n };\n}\n\nfunction toV03Artifact(value: unknown): A2AArtifactLike | undefined {\n const record = asRecord(value);\n if (!record) return undefined;\n const parts = (asArray(record.parts) ?? [])\n .map(toV03Part)\n .filter((part): part is A2APart => part !== undefined);\n return {\n artifactId: asString(record.artifactId) ?? \"\",\n ...(asString(record.name) ? { name: asString(record.name) } : {}),\n ...(asString(record.description) ? { description: asString(record.description) } : {}),\n parts,\n ...(typeof record.metadata === \"object\" && record.metadata !== null\n ? { metadata: record.metadata as Record<string, unknown> }\n : {}),\n } as A2AArtifactLike;\n}\n\nfunction toV1Artifact(artifact: A2AArtifactLike): JsonRecord {\n return {\n artifactId: artifact.artifactId,\n ...(artifact.name ? { name: artifact.name } : {}),\n ...(artifact.description ? { description: artifact.description } : {}),\n parts: artifact.parts.map(toV1Part),\n ...(artifact.metadata ? { metadata: artifact.metadata } : {}),\n };\n}\n\nfunction toV03Task(value: unknown): A2ATask | undefined {\n const record = asRecord(value);\n if (!record) return undefined;\n const status = toV03Status(record.status);\n if (!status) return undefined;\n const rawArtifacts = asArray(record.artifacts);\n const rawHistory = asArray(record.history);\n return {\n kind: \"task\",\n id: asString(record.id) ?? \"\",\n contextId: asString(record.contextId) ?? \"\",\n status,\n ...(rawArtifacts\n ? {\n artifacts: rawArtifacts\n .map(toV03Artifact)\n .filter((artifact): artifact is A2AArtifactLike => artifact !== undefined),\n }\n : {}),\n ...(rawHistory\n ? {\n history: rawHistory\n .map(toV03Message)\n .filter((message): message is A2AMessage => message !== undefined),\n }\n : {}),\n ...(typeof record.metadata === \"object\" && record.metadata !== null\n ? { metadata: record.metadata as Record<string, unknown> }\n : {}),\n } as A2ATask;\n}\n\nfunction toV1Task(task: A2ATask): JsonRecord {\n return {\n id: task.id,\n contextId: task.contextId,\n status: toV1Status(task.status),\n ...(task.artifacts?.length ? { artifacts: task.artifacts.map(toV1Artifact) } : {}),\n ...(task.history?.length ? { history: task.history.map(toV1Message) } : {}),\n ...(task.metadata ? { metadata: task.metadata } : {}),\n };\n}\n\nfunction toV03PushConfig(value: unknown): JsonRecord | undefined {\n const record = asRecord(value);\n if (!record) return undefined;\n const authentication = asRecord(record.authentication);\n return {\n ...(asString(record.id) ? { id: asString(record.id) } : {}),\n url: asString(record.url) ?? \"\",\n ...(asString(record.token) ? { token: asString(record.token) } : {}),\n ...(authentication\n ? {\n authentication: {\n ...(asString(authentication.scheme) ? { schemes: [authentication.scheme] } : {}),\n ...(asString(authentication.credentials) ? { credentials: authentication.credentials } : {}),\n },\n }\n : {}),\n };\n}\n\nfunction toV1PushConfig(value: unknown): JsonRecord | undefined {\n const record = asRecord(value);\n if (!record) return undefined;\n const config = asRecord(record.pushNotificationConfig) ?? record;\n const authentication = asRecord(config.authentication);\n const schemes = asArray(authentication?.schemes);\n return {\n ...(asString(record.taskId) ? { taskId: asString(record.taskId) } : {}),\n ...(asString(config.id) ? { id: asString(config.id) } : {}),\n ...(asString(config.url) ? { url: asString(config.url) } : {}),\n ...(asString(config.token) ? { token: asString(config.token) } : {}),\n ...(schemes?.[0] || asString(authentication?.credentials)\n ? {\n authentication: {\n ...(typeof schemes?.[0] === \"string\" ? { scheme: schemes[0] } : {}),\n ...(asString(authentication?.credentials)\n ? { credentials: asString(authentication?.credentials) }\n : {}),\n },\n }\n : {}),\n };\n}\n\nfunction convertParams(method: string, params: unknown): unknown {\n const record = asRecord(params);\n if (!record) return params;\n\n if (method === \"SendMessage\" || method === \"SendStreamingMessage\") {\n const configuration = asRecord(record.configuration);\n const push = asRecord(configuration?.taskPushNotificationConfig);\n return {\n ...(asRecord(record.message) ? { message: toV03Message(record.message) } : {}),\n ...(configuration\n ? {\n configuration: {\n ...(asArray(configuration.acceptedOutputModes)\n ? { acceptedOutputModes: configuration.acceptedOutputModes }\n : {}),\n blocking: configuration.returnImmediately !== true,\n ...(typeof configuration.historyLength === \"number\"\n ? { historyLength: configuration.historyLength }\n : {}),\n ...(push ? { pushNotificationConfig: toV03PushConfig(push) } : {}),\n },\n }\n : {}),\n ...(typeof record.metadata === \"object\" && record.metadata !== null\n ? { metadata: record.metadata }\n : {}),\n };\n }\n\n if (method === \"ListTasks\") {\n return {\n ...(asString(record.contextId) ? { contextId: asString(record.contextId) } : {}),\n ...(record.status !== undefined ? { status: v1TaskStateTo03(record.status) } : {}),\n ...(typeof record.pageSize === \"number\" ? { pageSize: record.pageSize } : {}),\n ...(asString(record.pageToken) ? { pageToken: asString(record.pageToken) } : {}),\n ...(typeof record.historyLength === \"number\" ? { historyLength: record.historyLength } : {}),\n ...(asString(record.statusTimestampAfter)\n ? { statusTimestampAfter: asString(record.statusTimestampAfter) }\n : {}),\n ...(typeof record.includeArtifacts === \"boolean\"\n ? { includeArtifacts: record.includeArtifacts }\n : {}),\n };\n }\n\n if (method === \"CreateTaskPushNotificationConfig\") {\n const config = toV03PushConfig(record);\n return {\n taskId: asString(record.taskId) ?? \"\",\n ...(config ? { pushNotificationConfig: config } : {}),\n };\n }\n if (method === \"GetTaskPushNotificationConfig\") {\n return {\n id: asString(record.taskId) ?? \"\",\n ...(asString(record.id) ? { pushNotificationConfigId: asString(record.id) } : {}),\n };\n }\n if (method === \"ListTaskPushNotificationConfigs\" || method === \"DeleteTaskPushNotificationConfig\") {\n return {\n id: asString(record.taskId) ?? \"\",\n ...(asString(record.id) ? { pushNotificationConfigId: asString(record.id) } : {}),\n };\n }\n\n return record;\n}\n\n/**\n * Translate a v1.0 JSON-RPC request into the internal A2A 0.3 transport shape.\n * The method name and wire-level task/message/part shapes differ; execution\n * itself remains the single existing A2ARunService path.\n */\nexport function toA2A03JsonRpcRequest(body: unknown): unknown {\n const record = asRecord(body);\n const method = asString(record?.method);\n if (!record || !method) return body;\n const mapped = V1_TO_V03_METHOD[method];\n if (!mapped) return body;\n return {\n ...record,\n method: mapped,\n params: convertParams(method, record.params),\n };\n}\n\n/** Convert a non-streaming v1 result (task/message/push config) to v1 wire JSON. */\nexport function toA2A11Result(value: unknown, method?: string): unknown {\n const record = asRecord(value);\n if (!record) return value;\n if (record.kind === \"task\") {\n const task = toV03Task(record);\n return task ? toV1Task(task) : value;\n }\n if (record.kind === \"message\") {\n const message = toV03Message(record);\n return message ? toV1Message(message) : value;\n }\n if (method === \"CreateTaskPushNotificationConfig\" || method === \"GetTaskPushNotificationConfig\") {\n return toV1PushConfig(record);\n }\n return value;\n}\n\n/** Convert a 0.3 streaming event into a v1 StreamResponse oneof payload. */\nexport function toA2A11StreamResult(event: unknown): unknown {\n const record = asRecord(event);\n if (!record) return event;\n if (record.kind === \"task\") {\n const task = toV03Task(record);\n return task ? { task: toV1Task(task) } : event;\n }\n if (record.kind === \"message\") {\n const message = toV03Message(record);\n return message ? { message: toV1Message(message) } : event;\n }\n if (record.kind === \"status-update\") {\n const status = toV03Status(record.status);\n return {\n statusUpdate: {\n taskId: asString(record.taskId) ?? \"\",\n contextId: asString(record.contextId) ?? \"\",\n ...(status ? { status: toV1Status(status) } : {}),\n ...(typeof record.metadata === \"object\" && record.metadata !== null\n ? { metadata: record.metadata }\n : {}),\n },\n };\n }\n if (record.kind === \"artifact-update\") {\n const artifact = toV03Artifact(record.artifact);\n return {\n artifactUpdate: {\n taskId: asString(record.taskId) ?? \"\",\n contextId: asString(record.contextId) ?? \"\",\n ...(artifact ? { artifact: toV1Artifact(artifact) } : {}),\n ...(record.append === true ? { append: true } : {}),\n ...(record.lastChunk === true ? { lastChunk: true } : {}),\n ...(typeof record.metadata === \"object\" && record.metadata !== null\n ? { metadata: record.metadata }\n : {}),\n },\n };\n }\n return event;\n}\n\n/** Convert a canonical A2A task page into the v1 ListTasksResponse envelope. */\nexport function toA2A11ListResult(\n value: unknown,\n options: { includeArtifacts?: boolean } = {},\n): unknown {\n const record = asRecord(value);\n const tasks = asArray(record?.tasks) ?? [];\n return {\n tasks: tasks\n .map(toV03Task)\n .filter((task): task is A2ATask => task !== undefined)\n .map((task) => {\n const converted = toV1Task(task);\n if (options.includeArtifacts !== true) delete converted.artifacts;\n return converted;\n }),\n ...(asString(record?.nextPageToken) ? { nextPageToken: asString(record?.nextPageToken) } : {}),\n };\n}\n\n/** Convert a 0.3 push-config list into the v1 `configs` envelope. */\nexport function toA2A11PushListResult(value: unknown): unknown {\n const configs = asArray(value) ?? [];\n return {\n configs: configs\n .map(toV1PushConfig)\n .filter((config): config is JsonRecord => config !== undefined),\n };\n}\n\n/** Convert a v1 JSON-RPC error code into the corresponding v1 version error. */\nexport function versionNotSupportedError(id: unknown, version: string): JsonRecord {\n return {\n jsonrpc: \"2.0\",\n id: id ?? null,\n error: {\n code: -32009,\n message: `The requested A2A protocol version '${version}' is not supported. Supported versions: 1.0`,\n },\n };\n}\n","import type { PushNotificationConfig } from \"@a2a-js/sdk\";\nimport type { PushNotificationStore } from \"@a2a-js/sdk/server\";\nimport { decrypt, encrypt } from \"@axiom-lattice/core\";\nimport type { StoreItem, StoreProtocol } from \"@axiom-lattice/protocols\";\nimport {\n assertSafePushNotificationUrl,\n defaultA2APushHostResolver,\n type A2APushHostResolver,\n} from \"./A2APushNotificationUrl\";\n\nexport { assertSafePushNotificationUrl } from \"./A2APushNotificationUrl\";\nexport type {\n A2APushHostAddress,\n A2APushHostResolver,\n} from \"./A2APushNotificationUrl\";\n\nconst NAMESPACE_ROOT = \"a2a-push\";\nconst PAGE_SIZE = 100;\n\n/** Tenant/assistant scope owning a set of push notification configs. */\nexport interface A2APushNotificationScope {\n tenantId: string;\n assistantId: string;\n}\n\n/** Dependencies for {@link A2APushNotificationStore}. */\nexport interface A2APushNotificationStoreOptions {\n /** Durable namespaced store (`getStoreLattice(\"default\", \"store\").store`). */\n store: StoreProtocol;\n scope: A2APushNotificationScope;\n /** Injectable DNS resolver for tests/embedding. */\n resolveHost?: A2APushHostResolver;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * SDK semantics: the default config id is the task id. Blank or whitespace-only\n * ids normalize to the task id instead of creating a `\"default\"` config.\n */\nfunction normalizeConfigId(taskId: string, value: unknown): string {\n if (typeof value !== \"string\") return taskId;\n return value.trim() || taskId;\n}\n\n/**\n * Durable, tenant-scoped push notification config store backed by the generic\n * namespaced `StoreProtocol` (no dedicated table or migration).\n *\n * Secrets (`token` and `authentication.credentials`) are encrypted at rest and\n * only decrypted when configs are loaded for the SDK.\n */\nexport class A2APushNotificationStore implements PushNotificationStore {\n private readonly store: StoreProtocol;\n private readonly scope: A2APushNotificationScope;\n private readonly resolveHost: A2APushHostResolver;\n\n constructor(options: A2APushNotificationStoreOptions) {\n this.store = options.store;\n this.scope = options.scope;\n this.resolveHost = options.resolveHost ?? defaultA2APushHostResolver;\n }\n\n private namespace(): string[] {\n return [NAMESPACE_ROOT, this.scope.tenantId, this.scope.assistantId];\n }\n\n private key(taskId: string, configId: string): string {\n return `${taskId}:${configId}`;\n }\n\n async save(taskId: string, pushNotificationConfig: PushNotificationConfig): Promise<void> {\n await assertSafePushNotificationUrl(\n pushNotificationConfig.url,\n this.resolveHost,\n );\n const configId = normalizeConfigId(taskId, pushNotificationConfig.id);\n const value: Record<string, unknown> = {\n taskId,\n configId,\n url: pushNotificationConfig.url,\n };\n\n const token = pushNotificationConfig.token;\n if (typeof token === \"string\" && token.length > 0) {\n value.tokenEnc = encrypt(token);\n }\n\n const authentication = pushNotificationConfig.authentication;\n if (authentication) {\n const schemes = Array.isArray(authentication.schemes)\n ? authentication.schemes.filter((scheme): scheme is string => typeof scheme === \"string\")\n : [];\n const storedAuth: Record<string, unknown> = { schemes };\n if (\n typeof authentication.credentials === \"string\"\n && authentication.credentials.length > 0\n ) {\n storedAuth.credentialsEnc = encrypt(authentication.credentials);\n }\n value.authentication = storedAuth;\n }\n\n await this.store.put(this.scope.tenantId, {\n namespace: this.namespace(),\n key: this.key(taskId, configId),\n value,\n });\n }\n\n async load(taskId: string): Promise<PushNotificationConfig[]> {\n const prefix = `${taskId}:`;\n const items = await this.searchTask(taskId);\n\n const configs: PushNotificationConfig[] = [];\n for (const item of items) {\n if (!item.key.startsWith(prefix)) continue;\n try {\n configs.push(await this.parse(item, taskId));\n } catch (error) {\n console.warn(\n `[a2a] skipping invalid push notification config \"${item.key}\"`,\n error,\n );\n }\n }\n\n return configs.sort((left, right) => (left.id ?? \"\").localeCompare(right.id ?? \"\"));\n }\n\n /**\n * Read every config for a task. The generic store limit is only a page size;\n * this walks offsets so a task with more than 1000 configs is never truncated.\n */\n private async searchTask(taskId: string): Promise<StoreItem[]> {\n const items: StoreItem[] = [];\n let offset = 0;\n for (;;) {\n const page = await this.store.search(this.scope.tenantId, {\n namespacePrefix: this.namespace(),\n filter: { taskId },\n limit: PAGE_SIZE,\n offset,\n });\n items.push(...page);\n if (page.length < PAGE_SIZE) return items;\n offset += page.length;\n }\n }\n\n private async parse(item: StoreItem, taskId: string): Promise<PushNotificationConfig> {\n const value = item.value;\n if (typeof value.url !== \"string\") {\n throw new Error(\"stored config has no URL\");\n }\n await assertSafePushNotificationUrl(value.url, this.resolveHost);\n\n const configId = normalizeConfigId(\n taskId,\n typeof value.configId === \"string\"\n ? value.configId\n : item.key.slice(taskId.length + 1),\n );\n\n const config: PushNotificationConfig = { id: configId, url: value.url };\n\n if (typeof value.tokenEnc === \"string\" && value.tokenEnc.length > 0) {\n config.token = decrypt(value.tokenEnc);\n }\n\n if (isRecord(value.authentication)) {\n const schemes = Array.isArray(value.authentication.schemes)\n ? value.authentication.schemes.filter(\n (scheme): scheme is string => typeof scheme === \"string\",\n )\n : [];\n const authentication: NonNullable<PushNotificationConfig[\"authentication\"]> = {\n schemes,\n };\n if (\n typeof value.authentication.credentialsEnc === \"string\"\n && value.authentication.credentialsEnc.length > 0\n ) {\n authentication.credentials = decrypt(value.authentication.credentialsEnc);\n }\n config.authentication = authentication;\n }\n\n return config;\n }\n\n /**\n * Delete one config. The SDK always supplies a config id; when it is omitted\n * the default config is `${taskId}:${taskId}` (not every config for the task).\n */\n async delete(taskId: string, configId?: string): Promise<void> {\n await this.store.delete(\n this.scope.tenantId,\n this.namespace(),\n this.key(taskId, normalizeConfigId(taskId, configId)),\n );\n }\n}\n","import { lookup } from \"node:dns/promises\";\nimport { A2AError } from \"@a2a-js/sdk/server\";\nimport { assertSafeUpstreamUrl } from \"@axiom-lattice/core\";\n\n/** One resolved A/AAAA record. */\nexport interface A2APushHostAddress {\n address: string;\n family: number;\n}\n\n/** Injectable DNS resolver used at save and send time. */\nexport type A2APushHostResolver = (\n hostname: string,\n) => Promise<A2APushHostAddress[]>;\n\n/** A validated callback URL plus every resolved address used for pinning. */\nexport interface A2APushNotificationTarget {\n url: URL;\n addresses: A2APushHostAddress[];\n}\n\n/** Default resolver: every A/AAAA record, not just the first. */\nexport const defaultA2APushHostResolver: A2APushHostResolver = async (hostname) => {\n const records = await lookup(hostname, { all: true });\n return records.map((record) => ({\n address: record.address,\n family: record.family,\n }));\n};\n\nfunction normalizeHost(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^\\[/, \"\")\n .replace(/\\]$/, \"\")\n .replace(/\\.$/, \"\")\n .split(\"%\")[0] ?? \"\";\n}\n\nfunction ipv4Parts(hostname: string): number[] | null {\n const match = /^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/.exec(hostname);\n if (!match) return null;\n const parts = match.slice(1).map(Number);\n return parts.every((part) => part >= 0 && part <= 255) ? parts : null;\n}\n\nfunction isReservedIpv4(hostname: string): boolean {\n const parts = ipv4Parts(hostname);\n if (!parts) return false;\n const [a, b, c] = parts;\n if (a === 0 || a === 10 || a === 127) return true;\n if (a === 100 && b >= 64 && b <= 127) return true;\n if (a === 169 && b === 254) return true;\n if (a === 172 && b >= 16 && b <= 31) return true;\n if (a === 192 && b === 0 && c === 0) return true;\n if (a === 192 && b === 0 && c === 2) return true;\n if (a === 192 && b === 88 && c === 99) return true;\n if (a === 192 && b === 168) return true;\n if (a === 198 && (b === 18 || b === 19)) return true;\n if (a === 198 && b === 51 && c === 100) return true;\n if (a === 203 && b === 0 && c === 113) return true;\n return a >= 224;\n}\n\nfunction isReservedIpv6(hostname: string): boolean {\n const host = normalizeHost(hostname);\n if (!host.includes(\":\")) return false;\n if (host.startsWith(\"::\")) return true;\n if (host.startsWith(\"fc\") || host.startsWith(\"fd\")) return true;\n if (/^fe[89ab]/.test(host)) return true;\n if (/^fec[0-9a-f]/.test(host)) return true;\n if (host.startsWith(\"ff\")) return true;\n if (host.startsWith(\"100:\")) return true;\n if (host.startsWith(\"2001:db8\")) return true;\n return false;\n}\n\n/**\n * True when a resolved address is not a public unicast destination.\n * Non-IP values are treated as unsafe.\n */\nexport function isBlockedPushAddress(address: string): boolean {\n const host = normalizeHost(address);\n if (ipv4Parts(host)) return isReservedIpv4(host);\n if (!host.includes(\":\")) return true;\n return isReservedIpv6(host);\n}\n\nfunction isBlockedHostname(hostname: string): boolean {\n const host = normalizeHost(hostname);\n if (\n host === \"localhost\"\n || host === \"localhost.localdomain\"\n || host.endsWith(\".localhost\")\n || host === \"ip6-localhost\"\n || host === \"ip6-loopback\"\n ) {\n return true;\n }\n if (\n host === \"metadata\"\n || host === \"metadata.google.internal\"\n || host === \"metadata.google.com\"\n || host === \"instance-data\"\n || host === \"instance-data.ec2.internal\"\n ) {\n return true;\n }\n return isReservedIpv4(host) || isReservedIpv6(host);\n}\n\n/**\n * Validate a tenant-supplied push callback URL and every address it resolves to.\n *\n * Push callbacks leave the gateway, so unlike model base URLs they must be\n * public HTTPS endpoints. Plaintext HTTP, loopback/private/link-local/reserved\n * literals, metadata hostnames, and DNS answers containing any blocked address\n * are rejected before a request is made.\n *\n * @throws {A2AError} `invalidParams` when the URL or its DNS answers are unsafe.\n */\nfunction toHostAddress(value: unknown): A2APushHostAddress | null {\n if (typeof value === \"string\") {\n return { address: value, family: value.includes(\":\") ? 6 : 4 };\n }\n if (typeof value !== \"object\" || value === null) return null;\n const record = value as Record<string, unknown>;\n if (typeof record.address !== \"string\") return null;\n return {\n address: record.address,\n family: typeof record.family === \"number\"\n ? record.family\n : record.address.includes(\":\") ? 6 : 4,\n };\n}\n\nexport async function assertSafePushNotificationUrl(\n raw: string,\n resolveHost: A2APushHostResolver = defaultA2APushHostResolver,\n): Promise<A2APushNotificationTarget> {\n let url: URL;\n try {\n ({ url } = await assertSafeUpstreamUrl(raw));\n } catch (error) {\n throw A2AError.invalidParams(\n error instanceof Error\n ? `Push notification URL is not allowed: ${error.message}`\n : \"Push notification URL is not allowed\",\n );\n }\n\n if (url.protocol !== \"https:\") {\n throw A2AError.invalidParams(\"Push notification URL must use HTTPS\");\n }\n\n const hostname = normalizeHost(url.hostname);\n if (isBlockedHostname(hostname)) {\n throw A2AError.invalidParams(\n \"Push notification URL must not target a private, loopback, link-local, or metadata host\",\n );\n }\n\n let addresses: A2APushHostAddress[];\n try {\n addresses = await resolveHost(hostname);\n } catch (error) {\n throw A2AError.invalidParams(\n error instanceof Error\n ? `Push notification URL could not be resolved: ${error.message}`\n : \"Push notification URL could not be resolved\",\n );\n }\n\n if (addresses.length === 0) {\n throw A2AError.invalidParams(\"Push notification URL did not resolve\");\n }\n\n const normalized: A2APushHostAddress[] = [];\n for (const record of addresses as unknown[]) {\n const resolved = toHostAddress(record);\n if (!resolved) {\n throw A2AError.invalidParams(\n \"Push notification URL resolved to an invalid address\",\n );\n }\n const address = normalizeHost(resolved.address);\n if (isBlockedPushAddress(address)) {\n throw A2AError.invalidParams(\n \"Push notification URL resolves to a private, loopback, link-local, or reserved address\",\n );\n }\n normalized.push({ address, family: resolved.family });\n }\n\n return { url, addresses: normalized };\n}\n","import { request as httpsRequest } from \"node:https\";\nimport type { LookupFunction } from \"node:net\";\nimport type { PushNotificationConfig, Task } from \"@a2a-js/sdk\";\nimport type {\n PushNotificationSender,\n PushNotificationStore,\n} from \"@a2a-js/sdk/server\";\nimport {\n assertSafePushNotificationUrl,\n defaultA2APushHostResolver,\n type A2APushHostResolver,\n} from \"./A2APushNotificationUrl\";\n\nconst DEFAULT_TIMEOUT_MS = 5000;\nconst TOKEN_HEADER = \"X-A2A-Notification-Token\";\n\nfunction withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(new Error(\"Push notification request timed out\"));\n }, timeoutMs);\n promise.then(\n (value) => {\n clearTimeout(timer);\n resolve(value);\n },\n (error: unknown) => {\n clearTimeout(timer);\n reject(error);\n },\n );\n });\n}\n\n/** Minimal logger surface used by the best-effort push sender. */\nexport interface A2APushNotificationLogger {\n warn?(message: string, error?: unknown): void;\n error?(message: string, error?: unknown): void;\n}\n\n/** A request whose DNS answer has already been validated and pinned. */\nexport interface A2APushNotificationRequest {\n url: string;\n /** Validated resolved addresses; the default transport pins the first one. */\n addresses: string[];\n headers: Record<string, string>;\n body: string;\n timeoutMs: number;\n}\n\n/** Response surface the sender needs from the transport. */\nexport interface A2APushNotificationResponse {\n statusCode: number;\n}\n\n/** Injectable transport seam (tests use this to assert pinning and no redirects). */\nexport type A2APushNotificationRequester = (\n request: A2APushNotificationRequest,\n) => Promise<A2APushNotificationResponse>;\n\n/** Dependencies for {@link A2APushNotificationSender}. */\nexport interface A2APushNotificationSenderOptions {\n store: PushNotificationStore;\n /** Per-callback abort timeout; defaults to 5000 ms. */\n timeoutMs?: number;\n /** Injectable transport; defaults to the pinned `https.request` transport. */\n request?: A2APushNotificationRequester;\n /** Injectable DNS resolver for save-time parity and tests. */\n resolveHost?: A2APushHostResolver;\n logger?: A2APushNotificationLogger;\n}\n\n/**\n * Build a Node lookup that always returns the validated address, so TLS still\n * uses the original hostname (SNI/certificate) but the socket cannot be\n * re-resolved to a different (rebound) IP. Honors Node's `all: true` contract\n * by returning a one-element `{ address, family }` array.\n */\nexport function createPinnedLookup(address: string, family: number): LookupFunction {\n return (_hostname, options, callback) => {\n if (options?.all) {\n callback(null, [{ address, family }]);\n return;\n }\n callback(null, address, family);\n };\n}\n\n/**\n * Default transport: `https.request` with the validated IP pinned via `lookup`.\n * Redirects are never followed (there is no redirect handling here), and a new\n * agent is used per request so a pooled socket cannot bypass the pinned lookup.\n */\nexport function createPinnedHttpsRequester(): A2APushNotificationRequester {\n return ({ url, addresses, headers, body, timeoutMs }) => new Promise((resolve, reject) => {\n const pinned = addresses[0];\n if (!pinned) {\n reject(new Error(\"No validated push notification address\"));\n return;\n }\n const parsed = new URL(url);\n const family = pinned.includes(\":\") ? 6 : 4;\n const request = httpsRequest(parsed, {\n method: \"POST\",\n agent: false,\n headers: {\n ...headers,\n \"Content-Length\": Buffer.byteLength(body),\n },\n lookup: createPinnedLookup(pinned, family),\n servername: parsed.hostname,\n }, (response) => {\n response.resume();\n resolve({ statusCode: response.statusCode ?? 0 });\n });\n const timeout = setTimeout(() => {\n request.destroy(new Error(\"Push notification request timed out\"));\n }, timeoutMs);\n request.on(\"close\", () => clearTimeout(timeout));\n request.on(\"error\", (error) => {\n clearTimeout(timeout);\n reject(error);\n });\n request.end(body);\n });\n}\n\n/**\n * Best-effort A2A push notification sender.\n *\n * Each callback is attempted independently with a bounded timeout; failures are\n * logged and never reject the SDK's event loop. Delivery is at-most-once per\n * event: there is no retry, queue, or durable delivery guarantee. Redirects are\n * rejected, not followed, and the DNS answer is revalidated and pinned for each\n * request.\n */\nexport class A2APushNotificationSender implements PushNotificationSender {\n private readonly store: PushNotificationStore;\n private readonly timeoutMs: number;\n private readonly request: A2APushNotificationRequester;\n private readonly resolveHost: A2APushHostResolver;\n private readonly logger?: A2APushNotificationLogger;\n\n constructor(options: A2APushNotificationSenderOptions) {\n this.store = options.store;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.request = options.request ?? createPinnedHttpsRequester();\n this.resolveHost = options.resolveHost ?? defaultA2APushHostResolver;\n this.logger = options.logger;\n }\n\n async send(task: Task): Promise<void> {\n let configs: PushNotificationConfig[];\n try {\n configs = await this.store.load(task.id);\n } catch (error) {\n this.logger?.error?.(\n `[a2a] failed to load push notification configs for task ${task.id}`,\n error,\n );\n return;\n }\n if (!configs || configs.length === 0) return;\n\n await Promise.all(configs.map(async (config) => {\n await this.deliver(task, config);\n }));\n }\n\n private async deliver(task: Task, config: PushNotificationConfig): Promise<void> {\n let target;\n try {\n target = await assertSafePushNotificationUrl(config.url, this.resolveHost);\n } catch (error) {\n this.logger?.warn?.(\n `[a2a] skipping unsafe push notification URL for task ${task.id}`,\n error,\n );\n return;\n }\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (config.token) {\n headers[TOKEN_HEADER] = config.token;\n }\n const authentication = config.authentication;\n if (authentication?.credentials) {\n const schemes = authentication.schemes.map((scheme) => scheme.toLowerCase());\n if (schemes.includes(\"bearer\")) {\n headers.Authorization = `Bearer ${authentication.credentials}`;\n } else if (schemes.includes(\"basic\")) {\n headers.Authorization = `Basic ${authentication.credentials}`;\n }\n }\n\n const response = await withTimeout(this.request({\n url: target.url.toString(),\n addresses: target.addresses.map((record) => record.address),\n headers,\n body: JSON.stringify(task),\n timeoutMs: this.timeoutMs,\n }), this.timeoutMs);\n if (response.statusCode < 200 || response.statusCode >= 300) {\n throw new Error(\n `Push notification endpoint returned HTTP ${response.statusCode}`,\n );\n }\n } catch (error) {\n this.logger?.error?.(\n `[a2a] push notification failed for task ${task.id} to ${config.url}`,\n error,\n );\n }\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport {\n createTaskRunBridge,\n type BeginRunResult,\n type LifecycleResult,\n type StartLifecycleResult,\n type TaskRunBridge,\n} from \"@axiom-lattice/core\";\nimport type {\n A2AMessage,\n A2APart,\n A2ATask,\n A2ATaskState,\n TaskFileRef,\n TaskItem,\n TaskStore,\n TaskWorkItemStore,\n} from \"@axiom-lattice/protocols\";\n\n/**\n * Projection from A2A protocol `TaskState` values onto the internal\n * `TaskItem` status lifecycle. `TaskItem` is the single source of truth,\n * so each SDK state must collapse onto one of its statuses.\n */\nexport const A2A_STATE_TO_TASK_STATUS: Record<string, TaskItem[\"status\"]> = {\n submitted: \"pending\",\n working: \"in_progress\",\n \"input-required\": \"interrupted\",\n completed: \"completed\",\n failed: \"failed\",\n canceled: \"cancelled\",\n rejected: \"failed\",\n};\n\n/**\n * Reverse projection used by {@link A2ATaskStoreAdapter.load} to surface the\n * current `TaskItem.status` back onto the restored SDK task's `status.state`.\n */\nexport const TASK_STATUS_TO_A2A_STATE: Record<TaskItem[\"status\"], A2ATaskState> = {\n pending: \"submitted\",\n in_progress: \"working\",\n review: \"input-required\",\n interrupted: \"input-required\",\n completed: \"completed\",\n failed: \"failed\",\n cancelled: \"canceled\",\n};\n\n/**\n * Structural contract satisfied by {@link A2ATaskStoreAdapter}, mirroring the\n * `@a2a-js/sdk` `TaskStore` interface (`save` / `load`). The `context` argument\n * is the SDK `ServerCallContext`, unused by this adapter.\n */\nexport interface A2ATaskStore {\n save(task: A2ATask, context?: unknown): Promise<void>;\n load(taskId: string, context?: unknown): Promise<A2ATask | undefined>;\n /**\n * Reconcile a successful run when the canonical TaskItem is still pending or\n * interrupted: resume the interruption (when applicable) and complete through\n * the lifecycle, returning the persisted A2A task.\n */\n completeRun?(task: A2ATask, result: string): Promise<A2ATask>;\n}\n\n/** Scope captured per A2A request, used to bind tasks to the right owner. */\nexport interface A2ATaskStoreAdapterScope {\n tenantId: string;\n projectId: string;\n /** Backfilled from the key's bound project; absent leaves TaskItem workspace unset. */\n workspaceId?: string;\n assistantId: string;\n}\n\n/** Dependencies injected into {@link A2ATaskStoreAdapter}. */\nexport interface A2ATaskStoreAdapterOptions {\n taskStore: TaskStore;\n workItemStore: TaskWorkItemStore;\n lifecycle: A2ATaskLifecycleAdapter;\n scope: A2ATaskStoreAdapterScope;\n}\n\n/** Narrow Core lifecycle surface used to govern A2A status observations. */\nexport interface A2ATaskLifecycleAdapter {\n startTask(input: { tenantId: string; taskId: string; actor: string; threadId?: string }): Promise<StartLifecycleResult>;\n completeAgentTask(input: {\n tenantId: string;\n taskId: string;\n result: string;\n beliefImpact: [];\n actor: string;\n threadId?: string;\n }): Promise<LifecycleResult>;\n resumeInterruption(input: { tenantId: string; taskId: string; actor: string; threadId?: string }): Promise<LifecycleResult>;\n retryTask(input: { tenantId: string; taskId: string; actor: string; threadId?: string }): Promise<LifecycleResult>;\n reopenTask(input: { tenantId: string; taskId: string; actor: string; threadId?: string }): Promise<LifecycleResult>;\n failTask(input: {\n tenantId: string; taskId: string; failureReason: string; actor: string; threadId?: string;\n }): Promise<LifecycleResult>;\n interruptTask(input: {\n tenantId: string; taskId: string; type: \"missing_input\" | \"user_decision\";\n summary: string; actor: string; threadId?: string;\n }): Promise<LifecycleResult>;\n cancelTask(input: {\n tenantId: string; taskId: string; actor: string; threadId?: string; summary?: string;\n }): Promise<LifecycleResult>;\n}\n\ntype A2AArtifact = NonNullable<A2ATask[\"artifacts\"]>[number];\nconst TITLE_MAX_LENGTH = 80;\n\n/** Structured failure raised when an A2A task ID belongs to another exact scope. */\nexport class A2ATaskScopeConflictError extends Error {\n readonly code = \"A2A_TASK_SCOPE_CONFLICT\";\n readonly taskId: string;\n\n constructor(taskId: string) {\n super(`A2A task ${taskId} belongs to another scope`);\n this.name = \"A2ATaskScopeConflictError\";\n this.taskId = taskId;\n }\n}\n\nfunction mapTaskStatusToA2AState(status: TaskItem[\"status\"]): A2ATaskState {\n return TASK_STATUS_TO_A2A_STATE[status];\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction asStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const strings = value.filter((item): item is string => typeof item === \"string\");\n return strings.length > 0 ? strings : undefined;\n}\n\nfunction extractText(parts: A2APart[]): string {\n return parts\n .filter((part): part is Extract<A2APart, { kind: \"text\" }> => part.kind === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n}\n\nfunction truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return `${text.slice(0, maxLength)}…`;\n}\n\nfunction extractTitleAndDescription(task: A2ATask): {\n title: string;\n description: string;\n} {\n const firstUserMessage = task.history?.find((message) => message.role === \"user\");\n const text = firstUserMessage ? extractText(firstUserMessage.parts) : \"\";\n return {\n title: truncate(text, TITLE_MAX_LENGTH),\n description: text ? [\n \"## Objective\",\n \"\",\n text,\n \"\",\n \"## Acceptance Criteria\",\n \"\",\n \"Complete the requested work and return the result through A2A.\",\n ].join(\"\\n\") : \"\",\n };\n}\n\nfunction isFileRef(value: unknown): value is TaskFileRef {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as TaskFileRef).uri === \"string\"\n );\n}\n\nfunction artifactFileRefs(artifacts: A2AArtifact[] | undefined): TaskFileRef[] {\n const refs: TaskFileRef[] = [];\n for (const artifact of artifacts ?? []) {\n for (const part of artifact.parts) {\n if (part.kind !== \"file\") continue;\n const file = part.file;\n if (!(\"uri\" in file)) continue;\n refs.push({\n uri: file.uri,\n ...(file.name ? { name: file.name } : {}),\n ...(file.mimeType ? { mimeType: file.mimeType } : {}),\n addedBy: \"agent\",\n });\n }\n }\n return refs;\n}\n\nfunction extractFiles(task: A2ATask): TaskFileRef[] {\n const inputFiles = task.metadata?.inputFiles;\n const inputRefs = Array.isArray(inputFiles) ? inputFiles.filter(isFileRef) : [];\n return [...inputRefs, ...artifactFileRefs(task.artifacts)];\n}\n\nfunction extractArtifactText(artifacts: A2AArtifact[] | undefined): string {\n return (artifacts ?? [])\n .map((artifact) => extractText(artifact.parts))\n .filter((text) => text.length > 0)\n .join(\"\\n\");\n}\n\n/**\n * Derive the result text from the final agent turn in the task history.\n *\n * The executor streams agent output as incremental `working` status-update\n * messages (one per chunk), so a text-only result is present as a sequence of\n * agent messages after the last user message rather than as an artifact.\n */\nfunction extractFinalTurnAgentText(history: A2AMessage[] | undefined): string {\n const messages = history ?? [];\n let lastUserIndex = -1;\n for (let i = 0; i < messages.length; i += 1) {\n if (messages[i].role === \"user\") lastUserIndex = i;\n }\n return messages\n .slice(lastUserIndex + 1)\n .filter((message) => message.role === \"agent\")\n .map((message) => extractText(message.parts))\n .filter((text) => text.length > 0)\n .join(\"\");\n}\n\nfunction isFailureState(state: A2ATaskState): boolean {\n return state === \"failed\" || state === \"rejected\";\n}\n\nfunction extractFailureReason(task: A2ATask): string | undefined {\n if (!isFailureState(task.status.state) || !task.status.message) return undefined;\n return extractText(task.status.message.parts);\n}\n\nfunction observationEventKey(task: A2ATask, result?: string, failureReason?: string): string {\n const digest = createHash(\"sha256\").update(JSON.stringify({\n state: task.status.state,\n timestamp: task.status.timestamp,\n message: task.status.message,\n result,\n failureReason,\n })).digest(\"hex\");\n return `a2a-status-observation:${task.id}:${digest}`;\n}\n\nfunction snapshotEventKey(task: A2ATask): string {\n const digest = createHash(\"sha256\").update(JSON.stringify(task)).digest(\"hex\");\n return `a2a-task-snapshot:${task.id}:${digest}`;\n}\n\nfunction isGovernedObservation(state: A2ATaskState): boolean {\n return state === \"completed\" || state === \"failed\" || state === \"rejected\" ||\n state === \"input-required\" || state === \"canceled\";\n}\n\nfunction isA2ATaskSnapshot(value: unknown): value is A2ATask {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as A2ATask).id === \"string\" &&\n typeof (value as A2ATask).status === \"object\" &&\n (value as A2ATask).status !== null\n );\n}\n\nfunction snapshotSequence(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n ? value\n : undefined;\n}\n\n/**\n * Adapter projecting the A2A SDK's `Task` objects onto the internal `TaskStore`\n * lattice (`TaskItem` is the single lifecycle truth). Implements the SDK\n * `TaskStore` contract so `DefaultRequestHandler` can persist and restore tasks.\n *\n * A single ID is used in both directions: `TaskItem.id === SDK task.id`.\n */\nexport class A2ATaskStoreAdapter implements A2ATaskStore {\n private readonly taskStore: TaskStore;\n private readonly workItemStore: TaskWorkItemStore;\n private readonly lifecycle: A2ATaskStoreAdapterOptions[\"lifecycle\"];\n private readonly scope: A2ATaskStoreAdapterScope;\n private readonly runBridge: TaskRunBridge;\n private readonly snapshotSequences = new Map<string, number>();\n\n constructor(options: A2ATaskStoreAdapterOptions) {\n this.taskStore = options.taskStore;\n this.workItemStore = options.workItemStore;\n this.lifecycle = options.lifecycle;\n this.scope = options.scope;\n this.runBridge = createTaskRunBridge({\n lifecycle: this.lifecycle,\n taskStore: this.taskStore,\n workItemStore: this.workItemStore,\n });\n }\n\n /**\n * Persist an SDK task by projecting it onto a `TaskItem`, creating it when\n * the id is unseen or updating it otherwise. A full snapshot of the SDK task\n * is stored under `context.a2aTask` so `load` can restore it.\n */\n async save(task: A2ATask): Promise<void> {\n let lastError: unknown;\n for (let attempt = 0; attempt < 3; attempt += 1) {\n try {\n return await this.saveOnce(task);\n } catch (error) {\n lastError = error;\n if (!isA2AConcurrentWrite(error) || attempt === 2) throw error;\n await new Promise((resolve) => setTimeout(resolve, 10 * (attempt + 1)));\n }\n }\n throw lastError;\n }\n\n private async saveOnce(task: A2ATask): Promise<void> {\n const { tenantId } = this.scope;\n const { title, description } = extractTitleAndDescription(task);\n const files = extractFiles(task);\n const result =\n task.status.state === \"completed\"\n ? extractArtifactText(task.artifacts) ||\n extractFinalTurnAgentText(task.history)\n : undefined;\n const failureReason = extractFailureReason(task);\n const a2aRunId = asString(task.metadata?.a2aRunId) ?? asString(task.metadata?.runId);\n const context: Record<string, unknown> = {\n a2aContextId: task.contextId,\n ...(a2aRunId ? { a2aRunId } : {}),\n threadId: asString(task.metadata?.threadId),\n a2aTask: task,\n };\n\n let existing = await this.taskStore.getById(tenantId, task.id);\n if (existing) {\n this.requireScope(existing, task.id);\n await this.recordSnapshot(task, existing);\n existing = await this.persistRunLink(existing, context, a2aRunId, task);\n } else {\n try {\n existing = await this.taskStore.create({\n id: task.id,\n tenantId,\n ownerType: \"agent\",\n ownerId: this.scope.assistantId,\n projectId: this.scope.projectId,\n ...(this.scope.workspaceId ? { workspaceId: this.scope.workspaceId } : {}),\n title,\n description,\n sourceId: \"a2a\",\n status: \"pending\",\n priority: \"medium\",\n dependencies: asStringArray(task.metadata?.dependencies),\n files,\n context,\n });\n } catch (error) {\n existing = await this.taskStore.getById(tenantId, task.id);\n if (!existing) throw error;\n this.requireScope(existing, task.id);\n }\n await this.recordSnapshot(task, existing);\n }\n\n const actor = `a2a:${this.scope.assistantId}`;\n const threadId = asString(task.metadata?.threadId);\n if (task.status.state === \"working\") {\n // A plain-agent continuation starts a new A2A run against an interrupted\n // task and marks that on the task metadata. Governed continuations resume\n // through the agent's own command, and the SDK may replay a bare working\n // snapshot afterwards; neither must resume here.\n existing = await this.refresh(existing);\n const resumesInterruption = existing.status === \"interrupted\" &&\n task.metadata?.a2aResume === true;\n if (existing.status === \"pending\" || resumesInterruption) {\n await this.requireLifecycleSuccess(\"start\", task.id, await this.runBridge.beginRun({\n tenantId, task: existing, actor, ...(threadId ? { threadId } : {}),\n }));\n }\n return;\n }\n if (!isGovernedObservation(task.status.state)) return;\n existing = await this.refresh(existing);\n await this.recordObservation(task, existing, result, failureReason);\n if ([\"completed\", \"failed\", \"cancelled\"].includes(existing.status)) return;\n if (task.status.state === \"input-required\" && this.isExactInterruptionReplay(task, existing)) return;\n if (task.status.state === \"completed\" && existing.status === \"interrupted\") {\n const resumed = await this.lifecycle.resumeInterruption({\n tenantId,\n taskId: task.id,\n actor,\n ...(threadId ? { threadId } : {}),\n });\n await this.requireLifecycleSuccess(\"resume\", task.id, resumed);\n existing = await this.refresh(existing);\n }\n if (existing.status === \"pending\") {\n const started = await this.requireLifecycleSuccess(\"start\", task.id, await this.runBridge.beginRun({\n tenantId, task: existing, actor, ...(threadId ? { threadId } : {}),\n }));\n existing = started.task;\n }\n await this.applyObservation(task, existing, result, failureReason);\n }\n\n /** Re-read the canonical task immediately before a lifecycle write. */\n private async refresh(fallback: TaskItem): Promise<TaskItem> {\n const current = await this.taskStore.getById(this.scope.tenantId, fallback.id);\n if (!current) return fallback;\n this.requireScope(current, fallback.id);\n return current;\n }\n\n /**\n * Persist the A2A↔run link on an existing TaskItem without replacing\n * service-owned context (interruption audit, lifecycle fields, snapshots).\n */\n private async persistRunLink(\n item: TaskItem,\n context: Record<string, unknown>,\n a2aRunId: string | undefined,\n task: A2ATask,\n ): Promise<TaskItem> {\n if (a2aRunId === undefined) return item;\n const current = item.context ?? {};\n if (current.a2aRunId === a2aRunId) return item;\n const next: Record<string, unknown> = {\n ...current,\n a2aContextId: context.a2aContextId,\n threadId: context.threadId,\n a2aRunId,\n };\n const updated = await this.taskStore.update(this.scope.tenantId, task.id, { context: next });\n return updated ?? item;\n }\n\n /**\n * Complete a run result through the lifecycle, resuming an interrupted\n * TaskItem first when the run succeeded after HITL.\n *\n * @throws When the canonical task cannot transition (for example a review\n * interruption that still requires explicit approval).\n */\n async completeRun(task: A2ATask, result: string): Promise<A2ATask> {\n const { tenantId } = this.scope;\n const actor = `a2a:${this.scope.assistantId}`;\n const threadId = asString(task.metadata?.threadId);\n let item = await this.taskStore.getById(tenantId, task.id);\n if (!item) {\n throw new Error(`A2A completed run cannot reconcile missing task ${task.id}`);\n }\n if (item.status === \"interrupted\") {\n const resumed = await this.lifecycle.resumeInterruption({\n tenantId,\n taskId: task.id,\n actor,\n ...(threadId ? { threadId } : {}),\n });\n if (!resumed.success) {\n throw new Error(\n `A2A completed run cannot resume interruption: ${resumed.code}: ${resumed.error}`,\n );\n }\n item = await this.taskStore.getById(tenantId, task.id);\n if (!item) throw new Error(`A2A task ${task.id} disappeared after resume`);\n }\n if (item.status === \"pending\") {\n const started = await this.runBridge.beginRun({\n tenantId,\n task: item,\n actor,\n ...(threadId ? { threadId } : {}),\n });\n if (!started.success) {\n throw new Error(\n `A2A completed run cannot start task: ${started.code}: ${started.error}`,\n );\n }\n item = started.task;\n }\n if (item.status !== \"in_progress\" && item.status !== \"completed\") {\n throw new Error(\n `A2A completed run cannot complete canonical ${item.status} task ${task.id}`,\n );\n }\n\n const resultArtifact = {\n artifactId: `${task.id}:result`,\n name: \"result\",\n parts: [{ kind: \"text\" as const, text: result.trim() || \"(no output)\" }],\n };\n const completed = {\n ...task,\n artifacts: [\n ...(task.artifacts ?? []).filter(\n (artifact) => artifact.artifactId !== resultArtifact.artifactId\n && artifact.name !== \"result\",\n ),\n resultArtifact,\n ],\n status: { state: \"completed\" as const, timestamp: new Date().toISOString() },\n } as A2ATask;\n await this.save(completed);\n const loaded = await this.load(task.id);\n if (!loaded || loaded.status.state !== \"completed\") {\n throw new Error(`A2A task ${task.id} did not persist as completed`);\n }\n return loaded;\n }\n\n private async recordSnapshot(task: A2ATask, item: TaskItem): Promise<void> {\n const incomingSequence = snapshotSequence(task.metadata?.snapshotSequence) ?? 0;\n const currentSequence = this.snapshotSequences.get(task.id) ?? 0;\n const sequence = Math.max(incomingSequence, currentSequence) + 1;\n this.snapshotSequences.set(task.id, sequence);\n const sequencedTask: A2ATask = {\n ...task,\n metadata: { ...(task.metadata ?? {}), snapshotSequence: sequence },\n };\n const eventKey = snapshotEventKey(sequencedTask);\n const workspaceId = item.workspaceId ?? this.scope.workspaceId;\n await this.workItemStore.createIfAbsentByEventKey({\n tenantId: this.scope.tenantId,\n taskId: task.id,\n projectId: this.scope.projectId,\n action: \"activity\",\n actor: `a2a:${this.scope.assistantId}`,\n summary: \"A2A task snapshot\",\n detail: { type: \"a2a_task_snapshot\", snapshotSequence: sequence, eventKey, task: sequencedTask },\n eventKey,\n ...(asString(task.metadata?.threadId) ? { threadId: asString(task.metadata?.threadId) } : {}),\n ...(workspaceId ? { workspaceId } : {}),\n });\n }\n\n private async recordObservation(\n task: A2ATask,\n item: TaskItem,\n result?: string,\n failureReason?: string,\n ): Promise<void> {\n const workspaceId = item.workspaceId ?? this.scope.workspaceId;\n await this.workItemStore.createIfAbsentByEventKey({\n tenantId: this.scope.tenantId,\n taskId: task.id,\n projectId: this.scope.projectId,\n action: \"activity\",\n actor: `a2a:${this.scope.assistantId}`,\n summary: `A2A observed ${task.status.state}`,\n detail: {\n type: \"a2a_status_observation\",\n state: task.status.state,\n ...(result === undefined ? {} : { result }),\n ...(failureReason === undefined ? {} : { failureReason }),\n ...(task.status.message ? { message: extractText(task.status.message.parts) } : {}),\n },\n eventKey: observationEventKey(task, result, failureReason),\n ...(asString(task.metadata?.threadId) ? { threadId: asString(task.metadata?.threadId) } : {}),\n ...(workspaceId ? { workspaceId } : {}),\n });\n }\n\n private async applyObservation(\n task: A2ATask,\n item: TaskItem,\n result?: string,\n failureReason?: string,\n ): Promise<void> {\n const actor = `a2a:${this.scope.assistantId}`;\n item = await this.refresh(item);\n const threadId = asString(task.metadata?.threadId);\n if (task.status.state === \"canceled\") {\n await this.requireLifecycleSuccess(\"cancel\", task.id, await this.runBridge.settleRun({\n tenantId: this.scope.tenantId, task: item, actor, ...(threadId ? { threadId } : {}),\n outcome: { kind: \"cancelled\", summary: \"A2A observed canceled\" },\n }));\n return;\n }\n if (isFailureState(task.status.state)) {\n await this.requireLifecycleSuccess(\"fail\", task.id, await this.runBridge.settleRun({\n tenantId: this.scope.tenantId, task: item, actor, ...(threadId ? { threadId } : {}),\n outcome: {\n kind: \"failed\", lifecycleHandled: false,\n error: failureReason?.trim() || `A2A observed ${task.status.state}`,\n },\n }));\n return;\n }\n if (task.status.state === \"input-required\") {\n const observed = asRecord(task.metadata?.interruption);\n const observedType = asString(observed?.type);\n const interruptionType = observedType === \"review_required\"\n || observedType === \"user_decision\"\n ? \"user_decision\"\n : \"missing_input\";\n const summary = asString(observed?.summary)\n || (task.status.message\n ? extractText(task.status.message.parts).trim()\n : \"\")\n || \"A2A requires input\";\n await this.requireLifecycleSuccess(\"interrupt\", task.id, await this.lifecycle.interruptTask({\n tenantId: this.scope.tenantId,\n taskId: task.id,\n type: interruptionType,\n summary,\n actor,\n ...(threadId ? { threadId } : {}),\n }));\n if (observedType === \"review_required\" && observed) {\n await this.preserveObservedInterruption(task.id, observed);\n }\n return;\n }\n\n await this.requireLifecycleSuccess(\"complete\", task.id, await this.lifecycle.completeAgentTask({\n tenantId: this.scope.tenantId,\n taskId: task.id,\n result: result?.trim() || \"(no output)\",\n beliefImpact: [],\n actor,\n ...(threadId ? { threadId } : {}),\n }));\n }\n\n /**\n * Preserve a review interruption's canonical type/metadata after the generic\n * lifecycle interrupt (which only models missing_input/user_decision).\n */\n private async preserveObservedInterruption(\n taskId: string,\n observed: Record<string, unknown>,\n ): Promise<void> {\n const item = await this.taskStore.getById(this.scope.tenantId, taskId);\n if (!item) return;\n const context = item.context ?? {};\n const current = asRecord(context.interruption) ?? {};\n await this.taskStore.update(this.scope.tenantId, taskId, {\n context: {\n ...context,\n interruption: { ...current, ...observed, type: \"review_required\" },\n },\n });\n }\n\n private async requireLifecycleSuccess(\n operation: string,\n taskId: string,\n result: LifecycleResult | BeginRunResult,\n ): Promise<Extract<LifecycleResult, { success: true }> | Extract<BeginRunResult, { success: true }>> {\n if (result.success) {\n if (result.warnings?.length) {\n console.warn({ event: \"a2a:lifecycle:warnings\", operation, taskId, warnings: result.warnings });\n }\n return result;\n }\n throw new Error(`A2A lifecycle ${operation} failed: ${result.code}: ${result.error}`);\n }\n\n private isExactInterruptionReplay(task: A2ATask, item: TaskItem): boolean {\n const observed = task.metadata?.interruption;\n const canonical = item.context?.interruption;\n if (item.status !== \"interrupted\" || !canonical || typeof canonical !== \"object\") return false;\n if (observed && typeof observed === \"object\") return isDeepStrictEqual(observed, canonical);\n const observedSummary = task.status.message ? extractText(task.status.message.parts).trim() : \"\";\n return observedSummary.length > 0 &&\n (canonical as Record<string, unknown>).summary === observedSummary;\n }\n\n /**\n * Restore an SDK task from the stored snapshot, overlaying the current\n * `TaskItem.status` onto `task.status.state`. Returns `undefined` when the\n * task is unknown to the tenant or has no A2A snapshot.\n */\n async load(taskId: string): Promise<A2ATask | undefined> {\n const item = await this.taskStore.getById(this.scope.tenantId, taskId);\n if (!item || !this.isInScope(item)) return undefined;\n\n const pageSize = 100;\n let selected: SnapshotCandidate | undefined;\n for (let offset = 0; ; offset += pageSize) {\n const activities = await this.workItemStore.list({\n tenantId: this.scope.tenantId,\n taskId,\n action: \"activity\",\n order: \"desc\",\n limit: pageSize,\n offset,\n });\n for (const activity of activities) {\n if (activity.detail?.type !== \"a2a_task_snapshot\" || !isA2ATaskSnapshot(activity.detail.task)) continue;\n const sequence = snapshotSequence(activity.detail.snapshotSequence) ??\n snapshotSequence(activity.detail.task.metadata?.snapshotSequence);\n const candidate = {\n task: activity.detail.task,\n sequence,\n eventKey: asString(activity.detail.eventKey) ?? activity.eventKey ??\n snapshotEventKey(activity.detail.task),\n statusTimestamp: Date.parse(activity.detail.task.status.timestamp ?? \"\"),\n createdAt: activity.createdAt,\n id: activity.id,\n };\n if (!selected || this.isLaterSnapshot(candidate, selected)) selected = candidate;\n }\n if (activities.length < pageSize) break;\n }\n const snapshot = selected?.task ?? item.context?.a2aTask;\n if (!isA2ATaskSnapshot(snapshot)) return undefined;\n const restoredSequence = selected?.sequence ?? snapshotSequence(snapshot.metadata?.snapshotSequence);\n if (restoredSequence !== undefined) {\n this.snapshotSequences.set(taskId, Math.max(this.snapshotSequences.get(taskId) ?? 0, restoredSequence));\n }\n\n const state = mapTaskStatusToA2AState(item.status);\n const interruption = item.context?.interruption;\n const contextRunId = asString(item.context?.a2aRunId);\n const contextThreadId = asString(item.context?.threadId);\n const metadata = {\n ...(snapshot.metadata ?? {}),\n ...(contextRunId === undefined ? {} : { a2aRunId: contextRunId }),\n ...(contextThreadId === undefined ? {} : { threadId: contextThreadId }),\n ...(interruption && typeof interruption === \"object\" ? { interruption } : {}),\n };\n const nonResultArtifacts = (snapshot.artifacts ?? []).filter((artifact) => artifact.name !== \"result\");\n const artifacts = item.status === \"completed\" && item.result?.trim()\n ? [...nonResultArtifacts, {\n artifactId: `${item.id}:result`,\n name: \"result\",\n parts: [{ kind: \"text\" as const, text: item.result }],\n }]\n : nonResultArtifacts;\n const message = state === \"failed\" && item.failureReason?.trim()\n ? {\n kind: \"message\" as const,\n messageId: `${item.id}:failure`,\n role: \"agent\" as const,\n parts: [{ kind: \"text\" as const, text: item.failureReason }],\n }\n : interruption && typeof interruption === \"object\" &&\n typeof (interruption as Record<string, unknown>).summary === \"string\"\n ? {\n kind: \"message\" as const,\n messageId: `${item.id}:interruption`,\n role: \"agent\" as const,\n parts: [{ kind: \"text\" as const, text: (interruption as Record<string, unknown>).summary as string }],\n }\n : snapshot.status.message;\n return {\n ...snapshot,\n metadata,\n ...(artifacts.length > 0 ? { artifacts } : { artifacts: undefined }),\n status: {\n ...snapshot.status,\n state,\n ...(message ? { message } : {}),\n },\n };\n }\n\n private isInScope(item: TaskItem): boolean {\n return (\n item.tenantId === this.scope.tenantId &&\n item.projectId === this.scope.projectId &&\n item.ownerType === \"agent\" &&\n item.ownerId === this.scope.assistantId &&\n item.sourceId === \"a2a\"\n );\n }\n\n private requireScope(item: TaskItem, taskId: string): void {\n if (!this.isInScope(item)) throw new A2ATaskScopeConflictError(taskId);\n }\n\n private isLaterSnapshot(\n candidate: SnapshotCandidate,\n selected: SnapshotCandidate,\n ): boolean {\n if (candidate.sequence !== undefined || selected.sequence !== undefined) {\n if (candidate.sequence === undefined) return false;\n if (selected.sequence === undefined) return true;\n if (candidate.sequence !== selected.sequence) return candidate.sequence > selected.sequence;\n\n // Concurrent adapters can allocate the same sequence. This resolves that\n // unordered conflict deterministically; it does not imply wall-clock append order.\n const candidateTimestamp = Number.isNaN(candidate.statusTimestamp) ? Number.NEGATIVE_INFINITY : candidate.statusTimestamp;\n const selectedTimestamp = Number.isNaN(selected.statusTimestamp) ? Number.NEGATIVE_INFINITY : selected.statusTimestamp;\n if (candidateTimestamp !== selectedTimestamp) return candidateTimestamp > selectedTimestamp;\n return candidate.eventKey > selected.eventKey;\n }\n return candidate.createdAt.getTime() > selected.createdAt.getTime() ||\n (candidate.createdAt.getTime() === selected.createdAt.getTime() && candidate.id > selected.id);\n }\n}\n\ninterface SnapshotCandidate {\n task: A2ATask;\n sequence?: number;\n eventKey: string;\n statusTimestamp: number;\n createdAt: Date;\n id: string;\n}\n\n/** Whether an A2A save failed because another projection raced the same TaskItem. */\nfunction isA2AConcurrentWrite(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return message.includes(\"TASK_STATUS_CONFLICT\")\n || message.includes(\"TASK_STORE_WRITE_FAILED\")\n || message.includes(\"Task changed concurrently\");\n}\n","import { v4 as uuidv4 } from \"uuid\";\nimport { agentInstanceManager, isOfficialInterruptId } from \"@axiom-lattice/core\";\nimport { MessageChunkTypes } from \"@axiom-lattice/protocols\";\nimport type {\n A2AMessage,\n A2APart,\n A2ATask,\n AgentInterrupt,\n Assistant,\n TaskFileRef,\n} from \"@axiom-lattice/protocols\";\nimport type {\n AgentExecutor,\n ExecutionEventBus,\n RequestContext,\n} from \"@a2a-js/sdk/server\";\nimport { A2AError } from \"@a2a-js/sdk/server\";\nimport type {\n TaskArtifactUpdateEvent,\n TaskStatusUpdateEvent,\n} from \"@a2a-js/sdk\";\nimport { filePartsToRefsWithIngest } from \"./a2aFileRefs\";\nimport type { A2AFileIngestor } from \"./A2AFileIngestor\";\nimport type { A2ATaskStore } from \"./A2ATaskStoreAdapter\";\nimport {\n A2ARunNotFoundError,\n type A2ARunHandle,\n type A2ARunInput,\n type A2ARunService,\n} from \"./A2ARunService\";\nimport { formatFileRefsSection } from \"../files/task-file-refs\";\n\n/** Scope captured per A2A request, used to bind execution to the right owner. */\nexport interface AxiomAgentExecutorScope {\n tenantId: string;\n projectId: string;\n /** Optional addressing workspace; omitted falls back to the agent's \"default\". */\n workspaceId?: string;\n assistantId: string;\n}\n\n/** Dependencies injected into {@link AxiomAgentExecutor}. */\nexport interface AxiomAgentExecutorOptions {\n scope: AxiomAgentExecutorScope;\n /** Persisted assistant definition used to preflight governed task capability. */\n assistant: Assistant;\n /** Canonical A2A task store (the TaskItem adapter in production). */\n taskStore?: A2ATaskStore;\n /** Durable run service; execute/stream/cancel all go through it. */\n runService: A2ARunService;\n /**\n * Optional bytes-ingestor for inline A2A file parts. When omitted, inline\n * bytes parts are rejected (URI-only projection).\n */\n ingestor?: A2AFileIngestor;\n /**\n * SDK blocking mode for `message/send` (`params.configuration.blocking`).\n * `false` returns the submitted task immediately and projects the terminal\n * state in the background. `message/stream` is always projected inline.\n */\n blocking?: boolean;\n /**\n * Read-only pending interrupt resolver for the interrupted run's thread.\n * Defaults to the agent's `getInterrupts()`; never executes the agent.\n */\n getInterrupts?: (threadId: string) => Promise<AgentInterrupt[]>;\n /** Per-join blocking budget; a timeout continues polling (default 30s). */\n joinTimeoutMs?: number;\n /**\n * Overall blocking execution budget. When it expires the run is projected as\n * failed so a never-terminal durable row cannot hold an HTTP request forever\n * (default 10 minutes).\n */\n overallTimeoutMs?: number;\n}\n\nclass A2ABlockingDeadlineError extends Error {\n constructor() {\n super(\"A2A blocking execution deadline expired\");\n this.name = \"A2ABlockingDeadlineError\";\n }\n}\n\nconst TERMINAL_A2A_STATES = new Set([\n \"completed\",\n \"failed\",\n \"canceled\",\n \"rejected\",\n]);\n\nfunction isoNow(): string {\n return new Date().toISOString();\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction extractText(parts: A2APart[]): string {\n return parts\n .filter((part): part is Extract<A2APart, { kind: \"text\" }> => part.kind === \"text\")\n .map((part) => part.text)\n .join(\"\\n\");\n}\n\nfunction dataParts(parts: A2APart[]): Extract<A2APart, { kind: \"data\" }>[] {\n return parts.filter(\n (part): part is Extract<A2APart, { kind: \"data\" }> => part.kind === \"data\",\n );\n}\n\n/** Returns the sole official interrupt id carried by an A2A task artifact. */\nfunction soleOfficialInterruptId(task: A2ATask | undefined): string | undefined {\n const ids = (task?.artifacts ?? [])\n .filter((artifact) => artifact.name === \"interrupt\")\n .flatMap((artifact) => artifact.parts)\n .filter((part): part is Extract<A2APart, { kind: \"data\" }> => part.kind === \"data\")\n .map((part) => asString(part.data.id))\n .filter((id): id is string => id !== undefined && isOfficialInterruptId(id));\n return ids.length === 1 ? ids[0] : undefined;\n}\n\nfunction agentMessage(text: string): A2AMessage {\n return {\n kind: \"message\",\n messageId: uuidv4(),\n role: \"agent\",\n parts: [{ kind: \"text\", text }],\n };\n}\n\n/**\n * Whether an assistant is built for the platform's governed TaskItem flow\n * (TaskMiddleware exposing manage_task). This only controls whether A2A\n * instructions tell the agent to manage its TaskItem; every A2A task is\n * persisted through {@link A2ATaskStoreAdapter} regardless.\n */\nexport function assistantHasGovernedTask(assistant: Assistant): boolean {\n const graph = assistant.graphDefinition;\n const middleware = graph && typeof graph === \"object\"\n ? (graph as { middleware?: unknown }).middleware\n : undefined;\n const taskMiddleware = Array.isArray(middleware)\n ? middleware.find((entry): entry is Record<string, unknown> =>\n !!entry && typeof entry === \"object\" &&\n (entry as Record<string, unknown>).type === \"task\" &&\n (entry as Record<string, unknown>).enabled === true)\n : undefined;\n const allowedTools = taskMiddleware?.allowedTools;\n return !!taskMiddleware && (\n allowedTools === undefined ||\n (Array.isArray(allowedTools) && (allowedTools.length === 0 || allowedTools.includes(\"manage_task\")))\n );\n}\n\n/** Projection context shared by the blocking and background run paths. */\ninterface RunProjection {\n ctx: RequestContext;\n existing?: A2ATask;\n threadId: string;\n inputFiles: TaskFileRef[];\n dependencies: string[];\n handle: A2ARunHandle;\n governed: boolean;\n resume: boolean;\n}\n\n/**\n * Translates a standard A2A request into one durable `AgentRun` and projects\n * that run's chunk/terminal state back onto the A2A SDK event bus.\n *\n * @remarks This class is protocol-only: it never enqueues an agent message,\n * streams an agent instance, or aborts an agent. `A2ARunService` owns run\n * creation/join/cancel; `TaskItem` remains the canonical lifecycle state.\n */\nexport class AxiomAgentExecutor implements AgentExecutor {\n private readonly scope: AxiomAgentExecutorScope;\n private readonly assistant: Assistant;\n private readonly taskStore?: A2ATaskStore;\n private readonly runService: A2ARunService;\n private readonly ingestor?: A2AFileIngestor;\n private readonly blocking: boolean;\n private readonly getInterrupts: (threadId: string) => Promise<AgentInterrupt[]>;\n private readonly joinTimeoutMs: number;\n private readonly overallTimeoutMs: number;\n\n constructor(options: AxiomAgentExecutorOptions) {\n this.scope = options.scope;\n this.assistant = options.assistant;\n this.taskStore = options.taskStore;\n this.runService = options.runService;\n this.ingestor = options.ingestor;\n this.blocking = options.blocking ?? true;\n this.getInterrupts = options.getInterrupts ?? ((threadId) =>\n agentInstanceManager.getAgent(this.agentParams(threadId)).getInterrupts());\n this.joinTimeoutMs = options.joinTimeoutMs ?? 30_000;\n this.overallTimeoutMs = this.blocking\n ? options.overallTimeoutMs ?? 10 * 60_000\n : Number.POSITIVE_INFINITY;\n }\n\n /** Execute one A2A request through the durable run service. */\n async execute(ctx: RequestContext, bus: ExecutionEventBus): Promise<void> {\n const existing = ctx.task;\n // A2A conformance: a new task's contextId is the thread id; continuation\n // reuses the persisted metadata.threadId.\n const threadId = asString(existing?.metadata?.threadId) ?? ctx.contextId;\n const dependencies = ctx.referenceTasks?.map((task) => task.id) ?? [];\n const resume = this.isResume(existing);\n const text = extractText(ctx.userMessage.parts);\n const governed = this.hasGovernedTaskCapability();\n // Only plain-agent continuations need the adapter itself to resume the\n // canonical TaskItem. Governed agents resume through their own command\n // (for example review approval), so a bare adapter resume would reject.\n const resumeCanonicalTask = resume && !governed;\n\n if (existing && !resume) {\n throw A2AError.invalidParams(\n `Task ${existing.id} is not waiting for input and cannot be resumed`,\n );\n }\n\n if (!this.taskStore) {\n const initialTask = this.taskFor(ctx, threadId, [], dependencies, {\n handle: undefined,\n resume: false,\n });\n bus.publish(initialTask);\n await this.failTask(ctx, bus, initialTask, new Error(\"A2A execution requires a canonical task store\"));\n return;\n }\n\n if (existing && TERMINAL_A2A_STATES.has(existing.status.state)) {\n throw A2AError.invalidParams(\n `Task ${existing.id} is terminal (${existing.status.state}) and cannot be modified`,\n );\n }\n\n const interruption = asRecord(existing?.metadata?.interruption);\n const reviewInterruption = interruption?.type === \"review_required\";\n const command = resume\n ? this.resumeCommand(\n ctx.userMessage.parts,\n text,\n reviewInterruption,\n soleOfficialInterruptId(existing),\n )\n : undefined;\n if (reviewInterruption && !command) {\n bus.publish(agentMessage(\"Review response must be exactly 'approve', 'reject', or 'reject: <note>'.\"));\n return;\n }\n if (resume && !command) {\n throw A2AError.invalidParams(`Task ${ctx.taskId} resume requires text or one DataPart`);\n }\n\n let inputFiles: TaskFileRef[];\n try {\n inputFiles = await filePartsToRefsWithIngest(\n ctx.userMessage.parts,\n \"user\",\n this.ingestor,\n ctx.taskId,\n this.scope.projectId,\n );\n } catch (err) {\n const initialTask = this.taskFor(ctx, threadId, [], dependencies, {\n handle: undefined,\n resume: false,\n });\n await this.taskStore.save(initialTask);\n bus.publish(initialTask);\n await this.failTask(ctx, bus, initialTask, err);\n return;\n }\n\n const requestText = this.requestText(ctx.taskId, text, inputFiles, governed, resume);\n const runInput: A2ARunInput = {\n tenantId: this.scope.tenantId,\n projectId: this.scope.projectId,\n ...(this.scope.workspaceId ? { workspaceId: this.scope.workspaceId } : {}),\n assistantId: this.scope.assistantId,\n threadId,\n a2aTaskId: ctx.taskId,\n message: { id: ctx.userMessage.messageId, role: \"user\", content: requestText },\n ...(command ? { command } : {}),\n config: {\n taskId: ctx.taskId,\n execution: { taskId: ctx.taskId },\n },\n };\n\n let handle: A2ARunHandle;\n try {\n handle = await this.runService.create(runInput);\n } catch (err) {\n const initialTask = this.taskFor(ctx, threadId, inputFiles, dependencies, {\n handle: undefined,\n resume: false,\n });\n await this.taskStore.save(initialTask);\n bus.publish(initialTask);\n await this.failTask(ctx, bus, initialTask, err);\n return;\n }\n\n const projection: RunProjection = {\n ctx,\n ...(existing ? { existing } : {}),\n threadId,\n inputFiles,\n dependencies,\n handle,\n governed,\n resume: resumeCanonicalTask,\n };\n const initialTask = this.taskFor(ctx, threadId, inputFiles, dependencies, {\n handle,\n resume: resumeCanonicalTask,\n });\n await this.taskStore.save(initialTask);\n bus.publish(initialTask);\n\n if (!this.blocking) {\n void this.projectRun(bus, projection).catch((err) => {\n console.warn({\n event: \"a2a:run:background_projection_failed\",\n taskId: ctx.taskId,\n runId: handle.runId,\n error: err instanceof Error ? err.message : String(err),\n });\n });\n return;\n }\n\n await this.projectRun(bus, projection);\n }\n\n private async projectRun(\n bus: ExecutionEventBus,\n projection: RunProjection,\n ): Promise<void> {\n const { ctx, threadId, handle } = projection;\n let outputText = \"\";\n let streamError: unknown;\n // Cancellation must stop late buffered chunks from leaking into the stream\n // after the terminal canceled projection.\n let dropChunks = false;\n\n const iterator = this.runService.stream(\n threadId,\n this.scope.assistantId,\n handle.messageId,\n handle.streamCursor,\n { tenantId: this.scope.tenantId, runId: handle.runId },\n )[Symbol.asyncIterator]();\n\n const consume = (async (): Promise<void> => {\n try {\n for (;;) {\n const next = await iterator.next();\n if (next.done) return;\n if (dropChunks) return;\n const chunk = next.value;\n const chunkText = chunk.data?.content ?? \"\";\n if (chunk.type === MessageChunkTypes.AI && chunkText) {\n outputText += chunkText;\n }\n if (\n (chunk.type === MessageChunkTypes.AI || chunk.type === MessageChunkTypes.TOOL)\n && chunkText\n ) {\n bus.publish({\n kind: \"status-update\",\n taskId: ctx.taskId,\n contextId: ctx.contextId,\n status: {\n state: \"working\",\n message: agentMessage(chunkText),\n timestamp: isoNow(),\n },\n final: false,\n } as TaskStatusUpdateEvent);\n }\n }\n } catch (err) {\n streamError = err;\n }\n })();\n\n let terminal: A2ARunHandle;\n try {\n terminal = await this.waitForTerminal(handle.runId, threadId);\n } catch (err) {\n await iterator.return?.();\n await consume.catch(() => undefined);\n const baseTask = this.taskFor(ctx, threadId, projection.inputFiles, projection.dependencies, projection);\n if (err instanceof A2ABlockingDeadlineError) {\n try {\n await this.runService.cancel(\n this.scope.tenantId,\n threadId,\n this.scope.assistantId,\n handle.runId,\n );\n } catch (cancelError) {\n console.warn({\n event: \"a2a:timeout:cancel_failed\",\n taskId: ctx.taskId,\n runId: handle.runId,\n error: cancelError instanceof Error ? cancelError.message : String(cancelError),\n });\n }\n await this.failTask(ctx, bus, baseTask, new Error(\"A2A run timed out\"));\n return;\n }\n await this.failTask(ctx, bus, baseTask, err);\n return;\n }\n\n const run = await this.runService.getRun(\n this.scope.tenantId,\n handle.runId,\n threadId,\n this.scope.assistantId,\n ).catch(() => undefined);\n const runRecord = asRecord(run);\n const abortStream = runRecord?.cancelRequested === true\n || terminal.status === \"timeout\";\n if (abortStream) {\n dropChunks = true;\n await iterator.return?.();\n }\n // Cursor-backed sources stop on their terminal chunk; cancelled/timed-out\n // runs have no terminal chunk, so abort the source before draining.\n await consume.catch(() => undefined);\n\n if (runRecord?.cancelRequested === true) {\n await this.finishCanceled(bus, projection);\n return;\n }\n\n switch (terminal.status) {\n case \"success\":\n await this.finishCompleted(bus, projection, outputText);\n return;\n case \"interrupted\":\n await this.finishInputRequired(bus, projection);\n return;\n case \"error\": {\n const canonical = this.taskStore ? await this.taskStore.load(ctx.taskId) : undefined;\n const canonicalMessage = canonical?.status.state === \"failed\" && canonical.status.message\n ? extractText(canonical.status.message.parts).trim()\n : \"\";\n const message = canonicalMessage\n || asString(runRecord?.error)\n || (streamError instanceof Error ? streamError.message : undefined)\n || \"A2A run failed\";\n await this.failTask(\n ctx,\n bus,\n this.taskFor(ctx, threadId, projection.inputFiles, projection.dependencies, projection),\n new Error(message),\n );\n return;\n }\n case \"timeout\":\n await this.failTask(\n ctx,\n bus,\n this.taskFor(ctx, threadId, projection.inputFiles, projection.dependencies, projection),\n new Error(\"A2A run timed out\"),\n );\n return;\n default:\n await this.failTask(\n ctx,\n bus,\n this.taskFor(ctx, threadId, projection.inputFiles, projection.dependencies, projection),\n new Error(`A2A run ended in unexpected state ${terminal.status}`),\n );\n }\n }\n\n\n private async waitForTerminal(\n runId: string,\n threadId: string,\n ): Promise<A2ARunHandle> {\n const deadline = Date.now() + Math.max(0, this.overallTimeoutMs);\n for (;;) {\n const remaining = deadline - Date.now();\n if (remaining <= 0) {\n throw new A2ABlockingDeadlineError();\n }\n const handle = await this.runService.join(\n this.scope.tenantId,\n threadId,\n this.scope.assistantId,\n runId,\n Math.min(this.joinTimeoutMs, remaining),\n );\n if (handle.terminal) return handle;\n // A join budget is not a run timeout; keep waiting for the durable row\n // until the overall blocking deadline above.\n }\n }\n\n private async finishCompleted(\n bus: ExecutionEventBus,\n projection: RunProjection,\n outputText: string,\n ): Promise<void> {\n const { ctx, threadId, existing } = projection;\n const canonical = this.taskStore ? await this.taskStore.load(ctx.taskId) : undefined;\n const canonicalState = canonical?.status.state;\n if (canonicalState === \"failed\" || canonicalState === \"rejected\" || canonicalState === \"canceled\") {\n bus.publish({\n kind: \"status-update\",\n taskId: ctx.taskId,\n contextId: ctx.contextId,\n status: {\n state: canonicalState === \"canceled\" ? \"canceled\" : \"failed\",\n ...(canonical?.status.message ? { message: canonical.status.message } : {}),\n timestamp: isoNow(),\n },\n final: true,\n } as TaskStatusUpdateEvent);\n return;\n }\n\n const canonicalResult = canonical?.artifacts?.find((artifact) => artifact.name === \"result\");\n const canonicalText = canonicalResult\n ? extractText(canonicalResult.parts).trim()\n : \"\";\n const resultText = canonicalText || outputText;\n const resultArtifact = {\n artifactId: uuidv4(),\n name: \"result\",\n parts: [{ kind: \"text\" as const, text: resultText }],\n };\n const completed = {\n ...this.taskFor(ctx, threadId, projection.inputFiles, projection.dependencies, projection),\n artifacts: [...(existing?.artifacts ?? []), resultArtifact],\n status: { state: \"completed\" as const, timestamp: isoNow() },\n } as A2ATask;\n if (this.taskStore) await this.taskStore.save(completed);\n\n bus.publish({\n kind: \"artifact-update\",\n taskId: ctx.taskId,\n contextId: ctx.contextId,\n artifact: resultArtifact,\n } as TaskArtifactUpdateEvent);\n bus.publish({\n kind: \"status-update\",\n taskId: ctx.taskId,\n contextId: ctx.contextId,\n status: { state: \"completed\", timestamp: isoNow() },\n final: true,\n } as TaskStatusUpdateEvent);\n }\n\n private async finishInputRequired(\n bus: ExecutionEventBus,\n projection: RunProjection,\n ): Promise<void> {\n const { ctx, threadId } = projection;\n let interrupts: AgentInterrupt[] = [];\n try {\n interrupts = (await this.getInterrupts(threadId)) ?? [];\n } catch (err) {\n console.warn({\n event: \"a2a:interrupts:read_failed\",\n taskId: ctx.taskId,\n threadId,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n const canonical = this.taskStore ? await this.taskStore.load(ctx.taskId) : undefined;\n const summary = canonical?.status.message\n ? extractText(canonical.status.message.parts).trim()\n : \"\";\n const interruptArtifact = interrupts.length === 0\n ? undefined\n : {\n artifactId: `${ctx.taskId}:interrupt`,\n name: \"interrupt\",\n parts: interrupts.map((interrupt) => {\n const payload = asRecord(interrupt.payload);\n const schema = asRecord(payload?.response_schema)\n ?? payload?.response_schema;\n return {\n kind: \"data\" as const,\n data: {\n id: interrupt.interruptId,\n value: interrupt.payload,\n ...(schema === undefined ? {} : { response_schema: schema }),\n },\n };\n }),\n };\n const baseTask = this.taskFor(\n ctx,\n threadId,\n projection.inputFiles,\n projection.dependencies,\n projection,\n );\n const pending = {\n ...baseTask,\n ...(interruptArtifact\n ? {\n artifacts: [\n ...(baseTask.artifacts ?? []).filter(\n (artifact) => artifact.artifactId !== interruptArtifact.artifactId,\n ),\n interruptArtifact,\n ],\n }\n : {}),\n status: {\n state: \"input-required\" as const,\n ...(summary ? { message: agentMessage(summary) } : {}),\n timestamp: isoNow(),\n },\n } as A2ATask;\n if (this.taskStore) await this.taskStore.save(pending);\n\n if (interruptArtifact) {\n bus.publish({\n kind: \"artifact-update\",\n taskId: ctx.taskId,\n contextId: ctx.contextId,\n artifact: interruptArtifact,\n } as TaskArtifactUpdateEvent);\n }\n\n bus.publish({\n kind: \"status-update\",\n taskId: ctx.taskId,\n contextId: ctx.contextId,\n status: {\n state: \"input-required\",\n ...(summary ? { message: agentMessage(summary) } : {}),\n timestamp: isoNow(),\n },\n final: true,\n } as TaskStatusUpdateEvent);\n }\n\n private async finishCanceled(\n bus: ExecutionEventBus,\n projection: RunProjection,\n ): Promise<void> {\n await this.persistCanceled(projection.ctx.taskId, projection.existing, projection);\n bus.publish({\n kind: \"status-update\",\n taskId: projection.ctx.taskId,\n contextId: projection.ctx.contextId,\n status: { state: \"canceled\", timestamp: isoNow() },\n final: true,\n } as TaskStatusUpdateEvent);\n }\n\n private async failTask(\n ctx: RequestContext,\n bus: ExecutionEventBus,\n baseTask: A2ATask,\n err: unknown,\n ): Promise<void> {\n const failedTask = {\n ...baseTask,\n status: {\n state: \"failed\" as const,\n message: agentMessage(err instanceof Error ? err.message : String(err)),\n timestamp: isoNow(),\n },\n } as A2ATask;\n if (this.taskStore) {\n try {\n await this.taskStore.save(failedTask);\n } catch (saveError) {\n console.warn({\n event: \"a2a:settle:save_failed\",\n taskId: ctx.taskId,\n error: saveError instanceof Error ? saveError.message : String(saveError),\n });\n }\n }\n bus.publish({\n kind: \"status-update\",\n taskId: ctx.taskId,\n contextId: ctx.contextId,\n status: failedTask.status,\n final: true,\n } as TaskStatusUpdateEvent);\n }\n\n private taskFor(\n ctx: RequestContext,\n threadId: string,\n inputFiles: TaskFileRef[],\n dependencies: string[],\n projection?: { handle?: A2ARunHandle; resume?: boolean },\n ): A2ATask {\n const existing = ctx.task;\n const metadata: Record<string, unknown> = {\n ...(existing?.metadata ?? {}),\n threadId,\n dependencies,\n inputFiles,\n ...(projection?.handle ? { a2aRunId: projection.handle.runId } : {}),\n ...(projection?.handle?.messageId !== undefined\n ? { a2aMessageId: projection.handle.messageId }\n : {}),\n ...(projection?.resume ? { a2aResume: true } : {}),\n };\n if (projection?.handle) {\n // A resumed/command handle may have no cursor. Never carry the previous\n // run's cursor forward: it points into output that was already consumed.\n if (projection.handle.streamCursor !== undefined) {\n metadata.a2aStreamCursor = projection.handle.streamCursor;\n } else {\n delete metadata.a2aStreamCursor;\n }\n }\n return {\n kind: \"task\",\n id: ctx.taskId,\n contextId: ctx.contextId,\n ...(existing?.history ? { history: existing.history } : {}),\n ...(existing?.artifacts ? { artifacts: existing.artifacts } : {}),\n status: { state: \"working\", timestamp: isoNow() },\n metadata,\n } as A2ATask;\n }\n\n private requestText(\n taskId: string,\n text: string,\n inputFiles: TaskFileRef[],\n governed: boolean,\n resume: boolean,\n ): string {\n const requestText = inputFiles.length > 0\n ? `${text}\\n\\n${formatFileRefsSection(inputFiles)}`\n : text;\n if (!governed || resume) return requestText;\n return [\n `A2A governed task instruction: get and update the existing TaskItem ${taskId}; do not create a replacement task.`,\n \"Before doing the requested work, initialize its canonical description through manage_task with ## Objective, ## Acceptance Criteria, and ## Belief State sections.\",\n \"Keep lifecycle status truthful. Change status only through manage_task set_status; complete with a nonblank result and structured beliefImpact, and use interrupted, failed, or cancelled when appropriate. Use manage_task update for content fields only.\",\n \"\",\n requestText,\n ].join(\"\\n\");\n }\n\n private isResume(task: A2ATask | undefined): boolean {\n return task?.status.state === \"input-required\";\n }\n\n private resumeCommand(\n parts: A2APart[],\n text: string,\n reviewInterruption: boolean,\n soleInterruptId?: string,\n ): { resume: unknown } | undefined {\n if (reviewInterruption) return this.reviewCommand(text);\n\n const data = dataParts(parts);\n if (data.length > 0) {\n const officialIds = data.map((part) => {\n const id = asString(part.data.id);\n return id !== undefined && isOfficialInterruptId(id) ? id : undefined;\n });\n if (data.length > 1 && officialIds.every((id) => id !== undefined)) {\n const resume: Record<string, unknown> = {};\n for (let index = 0; index < data.length; index += 1) {\n resume[officialIds[index]!] = data[index].data.value;\n }\n return { resume };\n }\n const sole = data[0];\n if (sole && \"value\" in sole.data) {\n if (data.length === 1 && officialIds[0] !== undefined) {\n return { resume: { [officialIds[0]]: sole.data.value } };\n }\n return { resume: sole.data.value };\n }\n }\n\n if (text.trim().length > 0) {\n // LangGraph official interrupts require a resume map keyed by the\n // pending interrupt id. The task's interrupt artifact carries that id;\n // text-only A2A resume must target the single pending interrupt instead\n // of sending an ambiguous bare resume.\n return {\n resume: soleInterruptId === undefined\n ? text\n : { [soleInterruptId]: text },\n };\n }\n return undefined;\n }\n\n private reviewCommand(text: string):\n { resume: { action: \"approve\" } | { action: \"reject\"; data: { note: string } } } | undefined {\n const trimmed = text.trim();\n const normalized = trimmed.toLowerCase();\n if (normalized === \"approve\") return { resume: { action: \"approve\" } };\n if (normalized === \"reject\") {\n return { resume: { action: \"reject\", data: { note: \"Changes requested.\" } } };\n }\n const prefixedNote = /^reject:\\s*(.+)$/is.exec(trimmed)?.[1]?.trim();\n if (prefixedNote) {\n return { resume: { action: \"reject\", data: { note: prefixedNote } } };\n }\n return undefined;\n }\n\n private agentParams(threadId: string): {\n assistant_id: string;\n thread_id: string;\n tenant_id: string;\n project_id: string;\n workspace_id?: string;\n } {\n return {\n assistant_id: this.scope.assistantId,\n thread_id: threadId,\n tenant_id: this.scope.tenantId,\n project_id: this.scope.projectId,\n ...(this.scope.workspaceId ? { workspace_id: this.scope.workspaceId } : {}),\n };\n }\n\n private hasGovernedTaskCapability(): boolean {\n return assistantHasGovernedTask(this.assistant);\n }\n\n /**\n * Cancel the exact durable run persisted on the A2A task, then persist the\n * terminal canceled state. No agent instance is aborted directly.\n */\n async cancelTask(taskId: string, bus: ExecutionEventBus): Promise<void> {\n const task = this.taskStore ? await this.taskStore.load(taskId) : undefined;\n const threadId = asString(task?.metadata?.threadId);\n const runId = asString(task?.metadata?.a2aRunId) ?? asString(task?.metadata?.runId);\n\n if (threadId && runId) {\n try {\n await this.runService.cancel(\n this.scope.tenantId,\n threadId,\n this.scope.assistantId,\n runId,\n );\n } catch (err) {\n if (!(err instanceof A2ARunNotFoundError)) {\n console.warn({\n event: \"a2a:cancel:failed\",\n taskId,\n threadId,\n runId,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n }\n\n await this.persistCanceled(taskId, task);\n\n bus.publish({\n kind: \"status-update\",\n taskId,\n contextId: task?.contextId ?? \"\",\n status: { state: \"canceled\", timestamp: isoNow() },\n final: true,\n } as TaskStatusUpdateEvent);\n }\n\n private async persistCanceled(\n taskId: string,\n task?: A2ATask,\n projection?: Pick<RunProjection, \"inputFiles\" | \"dependencies\" | \"handle\" | \"resume\" | \"threadId\" | \"ctx\">,\n ): Promise<A2ATask> {\n const canceledTask = {\n ...(task ?? {\n kind: \"task\",\n id: taskId,\n contextId: \"\",\n status: { state: \"working\" as const },\n }),\n ...(projection\n ? {\n metadata: {\n ...(task?.metadata ?? {}),\n threadId: projection.threadId,\n dependencies: projection.dependencies,\n inputFiles: projection.inputFiles,\n ...(projection.handle ? { a2aRunId: projection.handle.runId } : {}),\n },\n }\n : {}),\n status: { state: \"canceled\" as const, timestamp: isoNow() },\n } as A2ATask;\n if (this.taskStore) {\n try {\n await this.taskStore.save(canceledTask);\n } catch (saveError) {\n console.warn({\n event: \"a2a:settle:save_failed\",\n taskId,\n error: saveError instanceof Error ? saveError.message : String(saveError),\n });\n }\n }\n return canceledTask;\n }\n}\n","import type { A2APart, TaskFileRef } from \"@axiom-lattice/protocols\";\nimport type { A2AFileIngestor } from \"./A2AFileIngestor\";\nexport { formatFileRefsSection } from \"../files/task-file-refs\";\n\n/**\n * Project A2A message `file` parts onto internal {@link TaskFileRef} records.\n *\n * This is a URI-only pure function: only parts whose file is referenced by URI\n * are supported. Inline `bytes` files are rejected with an explicit error — to\n * ingest `bytes` into workspace storage, use {@link filePartsToRefsWithIngest}\n * with an {@link A2AFileIngestor} instead.\n *\n * @param parts - The A2A message parts to scan for file references.\n * @param addedBy - Who attached the file: `\"user\"` (reference material) or `\"agent\"` (artifact).\n * @returns The file references extracted from URI-backed file parts, in encounter order.\n * @throws {Error} When any file part carries inline `bytes` instead of a `uri`.\n */\nexport function filePartsToRefs(\n parts: A2APart[],\n addedBy: \"user\" | \"agent\",\n): TaskFileRef[] {\n const refs: TaskFileRef[] = [];\n\n for (const part of parts) {\n if (part.kind !== \"file\") continue;\n\n const file = part.file;\n if (\"bytes\" in file) {\n throw new Error(\n \"A2A file parts with inline bytes are not supported by this pure function — bytes ingest requires filePartsToRefsWithIngest with an A2AFileIngestor; provide a file uri otherwise\",\n );\n }\n\n refs.push({\n uri: file.uri,\n ...(file.name ? { name: file.name } : {}),\n ...(file.mimeType ? { mimeType: file.mimeType } : {}),\n addedBy,\n });\n }\n\n return refs;\n}\n\n/**\n * Project A2A message `file` parts onto {@link TaskFileRef} records, ingesting\n * inline `bytes` through the provided {@link A2AFileIngestor}.\n *\n * When no ingestor is supplied this delegates to the pure {@link filePartsToRefs}\n * projection (URI-only, rejecting inline bytes), preserving the executor's\n * original behavior for harnesses that do not wire storage.\n *\n * @param parts - The A2A message parts to scan for file references.\n * @param addedBy - Who attached the files: `\"user\"` or `\"agent\"`.\n * @param ingestor - Optional bytes-ingestor; when absent, bytes parts are rejected.\n * @param dedupeKeyBase - Stable key prefix for idempotent ingest (e.g. `taskId`).\n * @param projectId - Destination project for bytes ingestion.\n * @returns The file references in encounter order.\n */\nexport async function filePartsToRefsWithIngest(\n parts: A2APart[],\n addedBy: \"user\" | \"agent\",\n ingestor: A2AFileIngestor | undefined,\n dedupeKeyBase: string,\n projectId: string,\n): Promise<TaskFileRef[]> {\n if (!ingestor) {\n return filePartsToRefs(parts, addedBy);\n }\n\n const refs: TaskFileRef[] = [];\n for (let index = 0; index < parts.length; index += 1) {\n const part = parts[index];\n if (part.kind !== \"file\") continue;\n const dedupeKey = `${dedupeKeyBase}:${index}`;\n refs.push(await ingestor.ingest(part, dedupeKey, projectId, addedBy));\n }\n return refs;\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n extractAgentRunInputMessageIds,\n type AgentRunRecord,\n type AgentRunStatus,\n type IAgentRunLedger,\n} from \"@axiom-lattice/core\";\nimport { MessageChunkTypes, type MessageChunk } from \"@axiom-lattice/protocols\";\nimport { getRunCancelRouter as getGlobalRunCancelRouter } from \"../run-cancel/runCancelRuntime\";\nimport { wakeRunTaskQueue as wakeGlobalRunTaskQueue } from \"../run-task/runTaskRuntimeRegistry\";\n\nconst TERMINAL_STREAM_CHUNK_TYPES: ReadonlySet<string> = new Set([\n MessageChunkTypes.MESSAGE_COMPLETED,\n MessageChunkTypes.MESSAGE_FAILED,\n MessageChunkTypes.INTERRUPT,\n]);\n\n/**\n * Stop a chunk stream at the first terminal marker after yielding it.\n *\n * @param source - Underlying chunk source\n * @remarks Cursor-backed thread streams span runs, so the transport must stop\n * explicitly on the run's terminal chunk instead of waiting for the whole\n * thread stream to close. Buffered chunks before the marker are preserved in\n * order.\n */\nexport async function* stopAtTerminalChunks(\n source: AsyncIterable<MessageChunk>,\n): AsyncIterable<MessageChunk> {\n for await (const chunk of source) {\n yield chunk;\n if (TERMINAL_STREAM_CHUNK_TYPES.has(chunk.type)) return;\n }\n}\n\n/** A2A-visible lifecycle of a mapped run. */\nexport type A2ARunStatus =\n | \"pending\"\n | \"running\"\n | \"success\"\n | \"error\"\n | \"interrupted\"\n | \"timeout\";\n\n/** Input required to create one A2A-mapped run. */\nexport interface A2ARunInput {\n tenantId: string;\n projectId: string;\n workspaceId?: string;\n assistantId: string;\n /** A2A `contextId`, which is also the agent thread id. */\n threadId: string;\n /** A2A task id; persisted as run metadata, never as an execution id. */\n a2aTaskId: string;\n message: { id?: string; role: string; content: string };\n /** HITL resume command; mutually exclusive with message input. */\n command?: { resume: unknown };\n config?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\n/** Handle returned after creating or joining an A2A-mapped run. */\nexport interface A2ARunHandle {\n runId: string;\n /** Chunk-stream anchor for the run. */\n messageId: string;\n /**\n * Thread-stream position captured immediately before the run row was\n * created. Command runs have no input message and must resume from this\n * cursor so chunks emitted before the stream attaches are not skipped.\n */\n streamCursor?: string;\n status: A2ARunStatus;\n /**\n * `true` only when `status` came from a terminal ledger state. A join\n * deadline also reports `status: \"timeout\"` but leaves this `false`.\n */\n terminal: boolean;\n}\n\n/** Chunk source seam; the executor maps chunks onto A2A events. */\nexport interface A2ARunChunkSource {\n stream(\n threadId: string,\n assistantId: string,\n messageId: string,\n ): AsyncIterable<MessageChunk>;\n /**\n * Cursor-positioned thread stream across runs. Optional so older chunk\n * sources still work; callers without it fall back to `messageId` anchoring.\n */\n streamThread?(\n threadId: string,\n assistantId: string,\n cursor?: string,\n ): AsyncIterable<MessageChunk>;\n}\n\n/** Optional exact-run scope guard for {@link A2ARunService.stream}. */\nexport interface A2ARunStreamScope {\n tenantId: string;\n runId: string;\n}\n\n/** Exact-run cancel capability required from the shared cancel router. */\nexport interface A2ARunCancelRouter {\n requestCancelById(input: {\n tenantId: string;\n assistantId: string;\n threadId: string;\n runId: string;\n reason: \"a2a.cancel\";\n }): Promise<\"cancelled\" | \"requested\" | \"not_found\" | \"terminal\">;\n}\n\n/** Raised when a run is missing, legacy-sourced, or outside the caller's scope. */\nexport class A2ARunNotFoundError extends Error {\n /** Stable error code for API/protocol mapping. */\n public readonly code = \"A2A_RUN_NOT_FOUND\";\n\n constructor(public readonly runId: string) {\n super(`A2A run not found: ${runId}`);\n this.name = \"A2ARunNotFoundError\";\n }\n}\n\n/** Dependencies accepted by {@link A2ARunService}. */\nexport interface A2ARunServiceDependencies {\n ledger: Pick<\n IAgentRunLedger,\n \"createPendingRun\" | \"getRun\" | \"requestCancel\"\n >;\n chunkSource: A2ARunChunkSource;\n /** Best-effort wake after a run row commits (defaults to the run queue). */\n wake?: () => Promise<void>;\n /**\n * Captures the thread's current chunk-stream cursor before a run is created.\n *\n * @remarks Bound to the request's tenant scope by the caller. Failures are\n * treated as \"no cursor\" because streaming must never block run creation.\n */\n getLatestCursor?: (\n threadId: string,\n assistantId: string,\n ) => Promise<string | undefined>;\n /** Resolves the process-wide exact-run cancel router, when configured. */\n getRunCancelRouter?: () => A2ARunCancelRouter | undefined;\n /** Run/message id factory (default `randomUUID`). */\n idFactory?: () => string;\n /** Clock seam in epoch milliseconds. */\n now?: () => number;\n /** Sleep seam used while polling. */\n sleep?: (ms: number) => Promise<void>;\n /** Poll interval for join/cancel waits (default 200ms). */\n pollIntervalMs?: number;\n /** Default blocking join budget (default 30s). */\n joinTimeoutMs?: number;\n /** Bounded wait for a cancel to become terminal (default 10s). */\n cancelTimeoutMs?: number;\n /**\n * Optional per-tenant active-run admission limit passed to the ledger.\n *\n * @remarks Admission control only; it includes pending rows and does not cap\n * per-tenant execution concurrency.\n */\n maxActiveRunsForTenant?: number;\n}\n\nconst TERMINAL_STATUSES: ReadonlySet<AgentRunStatus> = new Set([\n \"success\",\n \"error\",\n \"interrupted\",\n \"cancelled\",\n \"timeout\",\n]);\n\nfunction isTerminal(status: AgentRunStatus): boolean {\n return TERMINAL_STATUSES.has(status);\n}\n\nfunction mapStatus(status: AgentRunStatus): A2ARunStatus {\n switch (status) {\n case \"pending\":\n case \"running\":\n case \"success\":\n case \"error\":\n case \"interrupted\":\n case \"timeout\":\n return status;\n case \"cancelled\":\n // Cancellation settles the underlying run interrupted; A2A projects the\n // terminal `canceled` task state from the cancel operation itself.\n return \"interrupted\";\n }\n}\n\nfunction messageIdFromRun(run: AgentRunRecord): string {\n if (typeof run.input?.id === \"string\" && run.input.id.length > 0) {\n return run.input.id;\n }\n if (run.inputMessageIds.length > 0) return run.inputMessageIds[0];\n // Command runs have no input message; `executeRun` anchors their chunks on\n // the run id.\n return run.runId;\n}\n\n/**\n * Maps A2A message/command requests onto the durable `AgentRun` queue.\n *\n * @remarks\n * This service owns only the A2A↔run mapping: it creates one `run_api` pending\n * row, reads terminal state from the ledger, cancels one exact run through the\n * shared cancel router, and exposes the existing chunk stream. It deliberately\n * has no A2A task store, event bus, runtime registry, or direct `Agent.abort`\n * authority — the protocol adapter and TaskItem projection remain elsewhere.\n */\nexport class A2ARunService {\n private readonly ledger: A2ARunServiceDependencies[\"ledger\"];\n private readonly chunkSource: A2ARunChunkSource;\n private readonly wake: () => Promise<void>;\n private readonly getLatestCursor?: (\n threadId: string,\n assistantId: string,\n ) => Promise<string | undefined>;\n private readonly getRunCancelRouter: () =>\n | A2ARunCancelRouter\n | undefined;\n private readonly idFactory: () => string;\n private readonly now: () => number;\n private readonly sleep: (ms: number) => Promise<void>;\n private readonly pollIntervalMs: number;\n private readonly joinTimeoutMs: number;\n private readonly cancelTimeoutMs: number;\n private readonly maxActiveRunsForTenant?: number;\n\n constructor(deps: A2ARunServiceDependencies) {\n this.ledger = deps.ledger;\n this.chunkSource = deps.chunkSource;\n this.wake = deps.wake ?? wakeGlobalRunTaskQueue;\n this.getLatestCursor = deps.getLatestCursor;\n this.getRunCancelRouter =\n deps.getRunCancelRouter ?? (() => getGlobalRunCancelRouter());\n this.idFactory = deps.idFactory ?? randomUUID;\n this.now = deps.now ?? Date.now;\n this.sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));\n this.pollIntervalMs = deps.pollIntervalMs ?? 200;\n this.joinTimeoutMs = deps.joinTimeoutMs ?? 30_000;\n this.cancelTimeoutMs = deps.cancelTimeoutMs ?? 10_000;\n this.maxActiveRunsForTenant = deps.maxActiveRunsForTenant;\n }\n\n /**\n * Creates exactly one pending `run_api` row for an A2A request.\n *\n * @param input Tenant/project/agent scope, A2A ids, and message or command.\n * @returns The run id, chunk-stream anchor/cursor, and pending status.\n * @remarks The stream cursor is captured before the row is committed so\n * already-emitted chunks cannot be lost. The queue wake is best-effort and\n * never awaited: a hung wake must not delay the protocol response.\n */\n async create(input: A2ARunInput): Promise<A2ARunHandle> {\n const streamCursor = await this.captureLatestCursor(\n input.threadId,\n input.assistantId,\n );\n const runId = this.idFactory();\n const hasCommand = input.command !== undefined;\n const messageId = hasCommand\n ? runId\n : input.message.id?.trim() || this.idFactory();\n const runInput = hasCommand\n ? null\n : { id: messageId, message: input.message.content };\n\n await this.ledger.createPendingRun({\n runId,\n tenantId: input.tenantId,\n ...(input.workspaceId === undefined\n ? {}\n : { workspaceId: input.workspaceId }),\n projectId: input.projectId,\n assistantId: input.assistantId,\n threadId: input.threadId,\n input: runInput,\n command: input.command ?? null,\n config: input.config ?? null,\n metadata: {\n ...(input.metadata ?? {}),\n a2aTaskId: input.a2aTaskId,\n a2aContextId: input.threadId,\n },\n inputMessageIds: runInput\n ? extractAgentRunInputMessageIds(runInput)\n : [],\n ...(this.maxActiveRunsForTenant === undefined\n ? {}\n : { maxActiveRunsForTenant: this.maxActiveRunsForTenant }),\n });\n\n this.wakeSafely();\n return {\n runId,\n messageId,\n ...(streamCursor === undefined ? {} : { streamCursor }),\n status: \"pending\",\n terminal: false,\n };\n }\n\n /**\n * Waits for a `run_api` run to reach a terminal lifecycle state.\n *\n * @param timeoutMs Blocking budget (default {@link joinTimeoutMs}).\n * @returns The terminal handle, or a non-terminal `timeout` handle when the\n * budget ends.\n * @throws {A2ARunNotFoundError} When the run is absent, legacy-sourced, or out\n * of scope.\n */\n async join(\n tenantId: string,\n threadId: string,\n assistantId: string,\n runId: string,\n timeoutMs?: number,\n ): Promise<A2ARunHandle> {\n const budget = timeoutMs ?? this.joinTimeoutMs;\n const deadline = this.now() + Math.max(0, budget);\n\n for (;;) {\n const run = await this.readScoped(tenantId, threadId, assistantId, runId);\n if (!run) throw new A2ARunNotFoundError(runId);\n if (isTerminal(run.status)) return this.toHandle(run);\n\n const remaining = deadline - this.now();\n if (remaining <= 0) {\n return { ...this.toHandle(run), status: \"timeout\", terminal: false };\n }\n await this.sleep(Math.max(1, Math.min(this.pollIntervalMs, remaining)));\n }\n }\n\n /**\n * Requests cancellation of one exact `run_api` run and waits (bounded) for\n * terminal state.\n *\n * @throws {A2ARunNotFoundError} When the run is absent, legacy-sourced, or out\n * of scope.\n */\n async cancel(\n tenantId: string,\n threadId: string,\n assistantId: string,\n runId: string,\n ): Promise<void> {\n // Reject legacy/out-of-scope runs before the router can act on them; the\n // router intentionally does not interpret `source`.\n const run = await this.readScoped(tenantId, threadId, assistantId, runId);\n if (!run) throw new A2ARunNotFoundError(runId);\n if (isTerminal(run.status)) return;\n\n const router = this.getRunCancelRouter();\n let result: \"cancelled\" | \"requested\" | \"not_found\" | \"terminal\";\n\n if (router) {\n result = await router.requestCancelById({\n tenantId,\n assistantId,\n threadId,\n runId,\n reason: \"a2a.cancel\",\n });\n } else {\n result = await this.ledger.requestCancel(tenantId, runId);\n }\n\n if (result === \"not_found\") throw new A2ARunNotFoundError(runId);\n if (result === \"terminal\") return;\n await this.waitForTerminal(tenantId, threadId, assistantId, runId);\n }\n\n /**\n * Attaches to the chunk stream for a run's message id.\n *\n * @param cursor Thread-stream position from the run handle. When supplied and\n * supported, the cursor-backed thread stream is used instead of message-id\n * anchoring (required for command runs).\n * @param scope Optional exact `run_api` scope guard, validated on first read.\n */\n stream(\n threadId: string,\n assistantId: string,\n messageId: string,\n cursor?: string,\n scope?: A2ARunStreamScope,\n ): AsyncIterable<MessageChunk> {\n const useCursorStream =\n typeof cursor === \"string\" &&\n cursor.trim() !== \"\" &&\n this.chunkSource.streamThread !== undefined;\n const createSource = (): AsyncIterable<MessageChunk> =>\n useCursorStream\n ? this.chunkSource.streamThread!(threadId, assistantId, cursor)\n : this.chunkSource.stream(threadId, assistantId, messageId);\n\n if (!scope) return createSource();\n\n return this.guardStream(\n createSource,\n threadId,\n assistantId,\n scope,\n );\n }\n\n /**\n * Reads the authoritative `run_api` ledger record.\n *\n * @param threadId Optional scope guard; legacy runs are always rejected.\n * @param assistantId Optional scope guard.\n */\n async getRun(\n tenantId: string,\n runId: string,\n threadId?: string,\n assistantId?: string,\n ): Promise<AgentRunRecord | undefined> {\n const run = await this.ledger.getRun(tenantId, runId);\n if (!run || run.source !== \"run_api\") return undefined;\n if (run.tenantId !== tenantId) return undefined;\n if (threadId !== undefined && run.threadId !== threadId) return undefined;\n if (assistantId !== undefined && run.assistantId !== assistantId) {\n return undefined;\n }\n return run;\n }\n\n private async waitForTerminal(\n tenantId: string,\n threadId: string,\n assistantId: string,\n runId: string,\n ): Promise<void> {\n const deadline = this.now() + this.cancelTimeoutMs;\n for (;;) {\n const run = await this.readScoped(tenantId, threadId, assistantId, runId);\n if (!run || isTerminal(run.status)) return;\n const remaining = deadline - this.now();\n if (remaining <= 0) return;\n await this.sleep(Math.max(1, Math.min(this.pollIntervalMs, remaining)));\n }\n }\n\n private async readScoped(\n tenantId: string,\n threadId: string,\n assistantId: string,\n runId: string,\n ): Promise<AgentRunRecord | undefined> {\n const run = await this.ledger.getRun(tenantId, runId);\n if (\n !run ||\n run.source !== \"run_api\" ||\n run.tenantId !== tenantId ||\n run.threadId !== threadId ||\n run.assistantId !== assistantId\n ) {\n return undefined;\n }\n return run;\n }\n\n private toHandle(run: AgentRunRecord): A2ARunHandle {\n return {\n runId: run.runId,\n messageId: messageIdFromRun(run),\n status: mapStatus(run.status),\n terminal: isTerminal(run.status),\n };\n }\n\n private async captureLatestCursor(\n threadId: string,\n assistantId: string,\n ): Promise<string | undefined> {\n if (!this.getLatestCursor) return undefined;\n try {\n const cursor = await this.getLatestCursor(threadId, assistantId);\n if (typeof cursor !== \"string\" || cursor.trim() === \"\") return undefined;\n return cursor;\n } catch {\n // Streaming is observational; cursor capture must never block creation.\n return undefined;\n }\n }\n\n /**\n * Lazily verifies the exact `run_api` scope before opening the chunk source.\n * Validation is deferred so `stream()` remains synchronous and an unused\n * stream never touches the ledger.\n */\n private guardStream(\n createSource: () => AsyncIterable<MessageChunk>,\n threadId: string,\n assistantId: string,\n scope: A2ARunStreamScope,\n ): AsyncIterable<MessageChunk> {\n return {\n [Symbol.asyncIterator]: (): AsyncIterator<MessageChunk> => {\n let validation: Promise<void> | undefined;\n let inner: AsyncIterator<MessageChunk> | undefined;\n\n const validate = (): Promise<void> => {\n validation ??= (async () => {\n const run = await this.readScoped(\n scope.tenantId,\n threadId,\n assistantId,\n scope.runId,\n );\n if (!run) throw new A2ARunNotFoundError(scope.runId);\n })();\n return validation;\n };\n\n const source = (): AsyncIterator<MessageChunk> => {\n inner ??= createSource()[Symbol.asyncIterator]();\n return inner;\n };\n\n const settleValidation = async (): Promise<void> => {\n if (!validation) return;\n try {\n await validation;\n } catch {\n // The original next() call observes the rejection.\n }\n };\n\n return {\n next: async (): Promise<IteratorResult<MessageChunk>> => {\n await validate();\n return source().next();\n },\n return: async (\n value?: unknown,\n ): Promise<IteratorResult<MessageChunk>> => {\n await settleValidation();\n if (!inner) return { done: true, value: value as MessageChunk };\n return inner.return\n ? inner.return(value)\n : { done: true, value: value as MessageChunk };\n },\n throw: async (error?: unknown): Promise<IteratorResult<MessageChunk>> => {\n await settleValidation();\n if (!inner) throw error;\n return inner.throw\n ? inner.throw(error)\n : Promise.reject(error);\n },\n };\n },\n };\n }\n\n private wakeSafely(): void {\n try {\n void this.wake().catch(() => undefined);\n } catch {\n // The durable row is committed; polling is the fallback.\n }\n }\n}\n","import type { A2APart, TaskFileRef } from \"@axiom-lattice/protocols\";\n\ntype FilePart = Extract<A2APart, { kind: \"file\" }>;\n\n/** Dependencies injected into {@link A2AFileIngestor} for testability. */\nexport interface A2AFileIngestorOptions {\n /**\n * Writes decoded file bytes into project storage and returns the URI agents\n * reference. Bound to the shared workspace `saveProjectFile` service by the\n * gateway wiring; overridable in tests.\n *\n * NOTE: this contract does not include `tenantId` — callers bind the tenant\n * via a closure (e.g. `(p) => saveProjectFile({ tenantId, ...p })`).\n */\n saveProjectFile: (params: {\n projectId: string;\n name: string;\n bytes: Uint8Array;\n mimeType?: string;\n /** Relative subdirectory under the project root (e.g. `a2a/<taskId>`). */\n path?: string;\n }) => Promise<{ uri: string }>;\n /** Maximum decoded byte size accepted per file; defaults to 10 MiB. */\n maxBytes?: number;\n}\n\nconst DEFAULT_MAX_BYTES = 100 * 1024 * 1024;\n\n/**\n * Minimal executable-file blacklist. Inline `bytes` uploads are an ingestion\n * vector for scripts/binaries; there is no existing allowlist in the upload\n * flow, so reject these by extension or MIME before writing.\n */\nconst EXECUTABLE_EXTENSIONS = new Set([\n \".exe\", \".sh\", \".bat\", \".cmd\", \".com\", \".msi\",\n \".js\", \".mjs\", \".cjs\", \".ps1\", \".vbs\", \".dll\", \".so\", \".dylib\",\n]);\n\nconst EXECUTABLE_MIME_TYPES = new Set([\n \"application/x-msdownload\",\n \"application/x-msdos-program\",\n \"application/x-executable\",\n \"application/x-sh\",\n \"application/x-bat\",\n \"application/x-shellscript\",\n \"text/x-shellscript\",\n \"application/javascript\",\n \"application/x-javascript\",\n \"text/javascript\",\n]);\n\nfunction decodeBase64(value: string): Uint8Array {\n return new Uint8Array(Buffer.from(value, \"base64\"));\n}\n\n/**\n * Upper bound on a base64 string length that can still fit within `maxBytes`\n * after decoding (4 base64 chars encode 3 bytes, plus up to 2 padding chars).\n * Used as a cheap pre-flight guard to avoid decoding oversized payloads into\n * memory; the exact decoded length is verified after decoding.\n */\nfunction maxEncodedLengthFor(maxBytes: number): number {\n return Math.ceil((maxBytes * 4) / 3) + 4;\n}\n\n/**\n * Reduce an untrusted string to a single safe path segment: no separators, no\n * `..` runs, no leading/trailing dots or dashes. Falls back when nothing\n * usable remains.\n */\nfunction sanitizePathSegment(segment: string, fallback: string): string {\n const cleaned = segment\n .replace(/[^A-Za-z0-9._-]+/g, \"-\")\n .replace(/\\.{2,}/g, \".\")\n .replace(/^[.-]+|[.-]+$/g, \"\");\n return cleaned.length > 0 ? cleaned : fallback;\n}\n\n/**\n * Derive the deterministic storage location for a bytes part from its\n * `dedupeKey` (`<taskId>:<partIndex>`). Retried requests for the same task\n * recompute the same location, so re-ingestion overwrites the same object\n * instead of accumulating duplicates — idempotency no longer depends on the\n * in-memory cache surviving across requests.\n */\nfunction storageLocationFor(\n dedupeKey: string,\n name: string,\n): { path: string; name: string } {\n const separatorIndex = dedupeKey.lastIndexOf(\":\");\n const keyBase = separatorIndex >= 0 ? dedupeKey.slice(0, separatorIndex) : dedupeKey;\n const keyIndex = separatorIndex >= 0 ? dedupeKey.slice(separatorIndex + 1) : \"0\";\n return {\n path: `a2a/${sanitizePathSegment(keyBase, \"task\")}`,\n name: `${sanitizePathSegment(keyIndex, \"0\")}-${sanitizePathSegment(name, \"file\")}`,\n };\n}\n\nfunction extensionOf(name: string): string { return name.includes(\".\")\n ? name.slice(name.lastIndexOf(\".\")).toLowerCase()\n : \"\";\n}\n\nfunction assertAllowedFileType(name: string, mimeType: string | undefined): void {\n if (EXECUTABLE_EXTENSIONS.has(extensionOf(name))) {\n throw new Error(`Refusing to ingest executable file \"${name}\"`);\n }\n if (mimeType && EXECUTABLE_MIME_TYPES.has(mimeType.toLowerCase())) {\n throw new Error(`Refusing to ingest executable file \"${name}\"`);\n }\n}\n\n/**\n * Turns A2A file parts into {@link TaskFileRef} records, ingesting inline\n * `bytes` into workspace storage.\n *\n * URI-backed parts pass through untouched. Bytes-backed parts are validated,\n * base64-decoded, written via the injected `saveProjectFile`, and cached by\n * `dedupeKey` so repeated ingests of the same part do not rewrite storage.\n */\nexport class A2AFileIngestor {\n private readonly saveProjectFile: A2AFileIngestorOptions[\"saveProjectFile\"];\n private readonly maxBytes: number;\n private readonly cache = new Map<string, string>();\n\n constructor(options: A2AFileIngestorOptions) {\n this.saveProjectFile = options.saveProjectFile;\n this.maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\n }\n\n /**\n * Project a single file part onto a {@link TaskFileRef}, ingesting bytes when\n * present. Idempotent per `dedupeKey`: a repeated key returns the cached URI\n * without re-writing storage, and even across ingestor instances the key\n * maps to a deterministic storage path (`a2a/<taskId>/<partIndex>-<name>`),\n * so request retries overwrite the same object.\n *\n * NOTE: the key is based on `taskId` + part index rather than the internal\n * message id because the executor must ingest files *before* `addMessage`\n * returns a messageId. A client retrying with a different taskId for the\n * same message writes a second copy; that is accepted and documented.\n */\n async ingest(\n part: FilePart,\n dedupeKey: string,\n projectId: string,\n addedBy: \"user\" | \"agent\",\n ): Promise<TaskFileRef> {\n const file = part.file;\n\n if (\"uri\" in file) {\n return {\n uri: file.uri,\n ...(file.name ? { name: file.name } : {}),\n ...(file.mimeType ? { mimeType: file.mimeType } : {}),\n addedBy,\n };\n }\n\n const name = file.name ?? \"file\";\n assertAllowedFileType(name, file.mimeType);\n\n if (file.bytes.length > maxEncodedLengthFor(this.maxBytes)) {\n throw new Error(\n `A2A file part exceeds the ${this.maxBytes} byte ingest limit`,\n );\n }\n\n const bytes = decodeBase64(file.bytes);\n if (bytes.length > this.maxBytes) {\n throw new Error(\n `A2A file part exceeds the ${this.maxBytes} byte ingest limit`,\n );\n }\n\n const cached = this.cache.get(dedupeKey);\n if (cached !== undefined) {\n return {\n uri: cached,\n ...(file.name ? { name: file.name } : {}),\n ...(file.mimeType ? { mimeType: file.mimeType } : {}),\n addedBy,\n };\n }\n\n const location = storageLocationFor(dedupeKey, name);\n const { uri } = await this.saveProjectFile({\n projectId,\n name: location.name,\n path: location.path,\n bytes,\n ...(file.mimeType ? { mimeType: file.mimeType } : {}),\n });\n this.cache.set(dedupeKey, uri);\n\n return {\n uri,\n ...(file.name ? { name: file.name } : {}),\n ...(file.mimeType ? { mimeType: file.mimeType } : {}),\n addedBy,\n };\n }\n}\n","import {\n DefaultExecutionEventBus,\n type ExecutionEventBus,\n type ExecutionEventBusManager,\n} from \"@a2a-js/sdk/server\";\nimport type { A2ATaskStoreAdapterScope } from \"./A2ATaskStoreAdapter\";\n\nconst DEFAULT_MAX_SCOPES = 1_000;\nconst DEFAULT_IDLE_TTL_MS = 15 * 60 * 1_000;\n\n/** Error raised when every bounded runtime scope is currently active. */\nexport class A2ARuntimeCapacityError extends Error {\n constructor(maxScopes: number) {\n super(`A2A runtime scope capacity of ${maxScopes} is exhausted`);\n this.name = \"A2ARuntimeCapacityError\";\n }\n}\n\n/** Configuration for the bounded process-local A2A runtime registry. */\nexport interface A2ARuntimeRegistryOptions {\n maxScopes?: number;\n idleTtlMs?: number;\n now?: () => number;\n}\n\n/**\n * Pins one scoped A2A runtime while a request is using its manager.\n *\n * @remarks Call {@link release} exactly once when request or stream processing\n * finishes. Repeated calls are harmless.\n */\nexport interface A2ARuntimeLease {\n manager: ExecutionEventBusManager;\n release(): void;\n}\n\ninterface RuntimeEntry {\n manager: ScopedExecutionEventBusManager;\n lastAccessedAt: number;\n leaseCount: number;\n}\n\nclass ScopedExecutionEventBusManager implements ExecutionEventBusManager {\n private readonly buses = new Map<string, ExecutionEventBus>();\n private readonly touch: () => void;\n\n constructor(touch: () => void) {\n this.touch = touch;\n }\n\n createOrGetByTaskId(taskId: string): ExecutionEventBus {\n this.touch();\n const existing = this.buses.get(taskId);\n if (existing) return existing;\n\n const bus = new DefaultExecutionEventBus();\n this.buses.set(taskId, bus);\n return bus;\n }\n\n getByTaskId(taskId: string): ExecutionEventBus | undefined {\n this.touch();\n return this.buses.get(taskId);\n }\n\n cleanupByTaskId(taskId: string): void {\n this.touch();\n const bus = this.buses.get(taskId);\n bus?.removeAllListeners();\n this.buses.delete(taskId);\n }\n\n get activeBusCount(): number {\n return this.buses.size;\n }\n\n close(): void {\n for (const bus of this.buses.values()) {\n bus.removeAllListeners();\n }\n this.buses.clear();\n }\n}\n\n/**\n * Owns process-local SDK event bus managers isolated by authorization scope.\n *\n * @remarks Call {@link acquire} for every request and retain its lease until\n * ordinary response completion or complete streaming generator consumption.\n */\nexport class A2ARuntimeRegistry {\n private readonly entries = new Map<string, RuntimeEntry>();\n private readonly maxScopes: number;\n private readonly idleTtlMs: number;\n private readonly now: () => number;\n private closed = false;\n\n constructor(options: A2ARuntimeRegistryOptions = {}) {\n this.maxScopes = options.maxScopes ?? DEFAULT_MAX_SCOPES;\n this.idleTtlMs = options.idleTtlMs ?? DEFAULT_IDLE_TTL_MS;\n this.now = options.now ?? Date.now;\n }\n\n /**\n * Acquire and pin the runtime manager for an authorization scope.\n *\n * @param scope Exact tenant, project, and assistant authorization scope.\n * @returns A lease whose manager is shared only within that scope.\n */\n acquire(scope: A2ATaskStoreAdapterScope): A2ARuntimeLease {\n if (this.closed) throw new Error(\"A2A runtime registry is closed\");\n\n const now = this.now();\n this.pruneExpired(now);\n const key = JSON.stringify([\n scope.tenantId,\n scope.projectId,\n scope.assistantId,\n ]);\n const existing = this.entries.get(key);\n const entry = existing ?? this.createEntry(key, now);\n entry.lastAccessedAt = now;\n entry.leaseCount += 1;\n let released = false;\n return {\n manager: entry.manager,\n release: (): void => {\n if (released) return;\n released = true;\n entry.leaseCount -= 1;\n entry.lastAccessedAt = this.now();\n },\n };\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n for (const entry of this.entries.values()) {\n entry.manager.close();\n }\n this.entries.clear();\n }\n\n private pruneExpired(now: number): void {\n for (const [key, entry] of this.entries) {\n if (\n !this.isActive(entry) &&\n now - entry.lastAccessedAt > this.idleTtlMs\n ) {\n entry.manager.close();\n this.entries.delete(key);\n }\n }\n }\n\n private makeCapacity(): void {\n if (this.entries.size < this.maxScopes) return;\n\n let oldest: [string, RuntimeEntry] | undefined;\n for (const candidate of this.entries) {\n if (this.isActive(candidate[1])) continue;\n if (!oldest || candidate[1].lastAccessedAt < oldest[1].lastAccessedAt) {\n oldest = candidate;\n }\n }\n\n if (!oldest) throw new A2ARuntimeCapacityError(this.maxScopes);\n oldest[1].manager.close();\n this.entries.delete(oldest[0]);\n }\n\n private createEntry(key: string, now: number): RuntimeEntry {\n this.makeCapacity();\n const entry: RuntimeEntry = {\n lastAccessedAt: now,\n leaseCount: 0,\n manager: new ScopedExecutionEventBusManager(() => {\n entry.lastAccessedAt = this.now();\n }),\n };\n this.entries.set(key, entry);\n return entry;\n }\n\n private isActive(entry: RuntimeEntry): boolean {\n return entry.leaseCount > 0 || entry.manager.activeBusCount > 0;\n }\n}\n"],"mappings":"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","names":["uuidv4","A2AError","DefaultExecutionEventBus","agentInstanceManager","MessageChunkTypes","asString","asRecord","MessageChunkTypes","A2AError","asString","asRecord","extractText","A2AError","initialTask","MessageChunkTypes","TERMINAL_A2A_STATES","MessageChunkTypes","agentInstanceManager","asString","agentMessage","next","A2AError","asRecord","isA2ATaskSnapshot","canonical","result","uuidv4","DefaultExecutionEventBus","v03Body"]}
|