@kuntur/a2a-carbon-chat-adapter 0.1.5 → 0.1.7
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/index.cjs +73 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +73 -15
- package/dist/index.js.map +1 -1
- package/dist/server.d.cts +40 -0
- package/dist/server.d.ts +40 -0
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/AgentProvider.tsx","../src/lib/a2a/extension-uris.ts","../src/lib/a2a/extension-handler.ts","../src/lib/a2a/client.ts","../src/lib/a2a/ui-extension-parser.ts","../src/lib/translator/a2a-to-carbon.ts","../src/components/renderers/citation-utils.ts","../src/components/renderers/CitationRenderer.tsx","../src/components/renderers/ErrorRenderer.tsx","../src/components/renderers/FormRenderer.tsx","../src/components/A2AChat.tsx","../src/components/AgentSwitcher.tsx","../src/hooks/useA2AAgent.ts","../src/hooks/useMultiAgent.ts"],"names":["createContext","useContext","useMemo","useState","useEffect","useCallback","jsx","ChainOfThoughtStepStatus","ReasoningStepOpenState","UserType","jsxs","useRef","extractFormRequest"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n useEffect,\n type ReactNode,\n} from 'react';\nimport type { AgentConfig, AgentProviderProps, AgentContextValue } from '../types';\n\nconst AgentContext = createContext<AgentContextValue | null>(null);\n\n/**\n * Hook to access agent context\n * Must be used within an AgentProvider\n */\nexport function useAgentContext(): AgentContextValue {\n const context = useContext(AgentContext);\n if (!context) {\n throw new Error('useAgentContext must be used within an AgentProvider');\n }\n return context;\n}\n\n/**\n * Optional hook that returns null if not within provider\n * Useful for components that work both with and without provider\n */\nexport function useAgentContextOptional(): AgentContextValue | null {\n return useContext(AgentContext);\n}\n\n/**\n * Provider for managing agent configurations\n *\n * @example\n * // Single agent\n * <AgentProvider agent={{ id: 'main', name: 'Assistant', url: '...' }}>\n * <App />\n * </AgentProvider>\n *\n * @example\n * // Multiple agents\n * <AgentProvider\n * agents={[\n * { id: 'research', name: 'Research', url: '...' },\n * { id: 'code', name: 'Coder', url: '...' },\n * ]}\n * defaultAgentId=\"research\"\n * persistSelection\n * >\n * <App />\n * </AgentProvider>\n */\nexport function AgentProvider({\n children,\n agent,\n agents: agentsProp,\n registry,\n defaultAgentId,\n persistSelection = false,\n storageKey = 'a2a-chat-selected-agent',\n}: AgentProviderProps): ReactNode {\n // Build agents list from various input formats\n const agents = useMemo(() => {\n if (registry) {\n return Object.values(registry.agents);\n }\n if (agentsProp) {\n return agentsProp;\n }\n if (agent) {\n return [agent];\n }\n return [];\n }, [agent, agentsProp, registry]);\n\n // Determine initial agent\n const getInitialAgentId = (): string | null => {\n // Check persisted selection\n if (persistSelection && typeof window !== 'undefined') {\n const saved = localStorage.getItem(storageKey);\n if (saved && agents.some((a) => a.id === saved)) {\n return saved;\n }\n }\n\n // Use default\n if (defaultAgentId && agents.some((a) => a.id === defaultAgentId)) {\n return defaultAgentId;\n }\n\n if (registry?.defaultAgentId && agents.some((a) => a.id === registry.defaultAgentId)) {\n return registry.defaultAgentId;\n }\n\n // Fall back to first agent\n return agents[0]?.id ?? null;\n };\n\n const [currentAgentId, setCurrentAgentId] = useState<string | null>(getInitialAgentId);\n\n // Persist selection\n useEffect(() => {\n if (persistSelection && currentAgentId && typeof window !== 'undefined') {\n localStorage.setItem(storageKey, currentAgentId);\n }\n }, [currentAgentId, persistSelection, storageKey]);\n\n const currentAgent = useMemo(\n () => agents.find((a) => a.id === currentAgentId) ?? null,\n [agents, currentAgentId]\n );\n\n const selectAgent = useCallback(\n (agentId: string) => {\n if (agents.some((a) => a.id === agentId)) {\n setCurrentAgentId(agentId);\n } else {\n console.warn(`[AgentProvider] Agent \"${agentId}\" not found in registry`);\n }\n },\n [agents]\n );\n\n const getAgent = useCallback((agentId: string) => agents.find((a) => a.id === agentId), [agents]);\n\n const hasAgent = useCallback((agentId: string) => agents.some((a) => a.id === agentId), [agents]);\n\n const value: AgentContextValue = useMemo(\n () => ({\n currentAgent,\n agents,\n selectAgent,\n getAgent,\n hasAgent,\n }),\n [currentAgent, agents, selectAgent, getAgent, hasAgent]\n );\n\n return <AgentContext.Provider value={value}>{children}</AgentContext.Provider>;\n}\n\nexport default AgentProvider;\n","/**\n * A2A Extension URIs\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/\n */\n\n// Service Extension URIs (Platform -> Agent)\nexport const EXTENSION_URIS = {\n // Service Extensions\n LLM: 'https://a2a-extensions.agentstack.beeai.dev/services/llm/v1',\n EMBEDDING: 'https://a2a-extensions.agentstack.beeai.dev/services/embedding/v1',\n MCP: 'https://a2a-extensions.agentstack.beeai.dev/services/mcp/v1',\n OAUTH_PROVIDER: 'https://a2a-extensions.agentstack.beeai.dev/services/oauth-provider/v1',\n SECRETS: 'https://a2a-extensions.agentstack.beeai.dev/services/secrets/v1',\n PLATFORM_API: 'https://a2a-extensions.agentstack.beeai.dev/services/platform-api/v1',\n FORM_SERVICE: 'https://a2a-extensions.agentstack.beeai.dev/services/form/v1',\n\n // UI Extensions (Agent -> Platform)\n CITATION: 'https://a2a-extensions.agentstack.beeai.dev/ui/citation/v1',\n TRAJECTORY: 'https://a2a-extensions.agentstack.beeai.dev/ui/trajectory/v1',\n ERROR: 'https://a2a-extensions.agentstack.beeai.dev/ui/error/v1',\n FORM_REQUEST: 'https://a2a-extensions.agentstack.beeai.dev/ui/form-request/v1',\n CANVAS: 'https://a2a-extensions.agentstack.beeai.dev/ui/canvas/v1',\n AGENT_DETAIL: 'https://a2a-extensions.agentstack.beeai.dev/ui/agent-detail/v1',\n OAUTH_REQUEST: 'https://a2a-extensions.agentstack.beeai.dev/ui/oauth/v1',\n SETTINGS: 'https://a2a-extensions.agentstack.beeai.dev/ui/settings/v1',\n} as const\n\nexport type ExtensionUri = typeof EXTENSION_URIS[keyof typeof EXTENSION_URIS]\n","/**\n * Extension Handler for agent-client-zero\n *\n * This module handles:\n * 1. Parsing agent card to extract extension demands\n * 2. Building metadata with fulfillments for A2A requests\n * 3. Parsing UI extension metadata from agent responses\n *\n * Reference: https://raw.githubusercontent.com/i-am-bee/agentstack/main/docs/development/custom-ui/client-sdk/extensions.mdx\n */\n\nimport { EXTENSION_URIS } from './extension-uris'\nimport type {\n LLMDemands,\n LLMFulfillments,\n EmbeddingDemands,\n EmbeddingFulfillments,\n MCPDemands,\n MCPFulfillments,\n SecretDemands,\n SecretFulfillments,\n SettingsDemands,\n SettingsFulfillments,\n FormDemands,\n FormFulfillments,\n OAuthDemands,\n OAuthFulfillments,\n ExtractedDemands,\n Fulfillments,\n} from './extension-types'\nimport type { AgentCard } from './client'\n\n/**\n * Platform configuration for fulfilling extension demands\n * Users configure these values to provide services to agents\n */\nexport interface PlatformConfig {\n // LLM Configuration\n llm?: {\n apiBase: string // e.g., 'http://192.168.0.58:11434/v1'\n apiKey: string // API key for the LLM provider\n defaultModel: string // e.g., 'qwen3-next:80b'\n }\n\n // Embedding Configuration\n embedding?: {\n apiBase: string\n apiKey: string\n defaultModel: string\n }\n\n // MCP Configuration\n mcp?: {\n servers: Record<string, { url: string }>\n }\n\n // OAuth Configuration\n oauth?: {\n redirectUri: string\n providers: Record<string, { accessToken: string }>\n }\n\n // Secrets (user-provided API keys, etc.)\n secrets?: Record<string, string>\n\n // Settings values\n settings?: Record<string, unknown>\n}\n\n/**\n * Extract service extension demands from agent card capabilities\n *\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/handle-agent-card.ts\n */\nexport function extractDemandsFromAgentCard(agentCard: AgentCard): ExtractedDemands {\n const extensions = agentCard.extensions || []\n\n const demands: ExtractedDemands = {\n llmDemands: null,\n embeddingDemands: null,\n mcpDemands: null,\n oauthDemands: null,\n settingsDemands: null,\n secretDemands: null,\n formDemands: null,\n }\n\n for (const extUri of extensions) {\n // Parse extension URI to extract demands\n // Format: \"uri#json_encoded_params\" or just \"uri\"\n const hashIndex = extUri.indexOf('#')\n const uri = hashIndex >= 0 ? extUri.substring(0, hashIndex) : extUri\n const paramsStr = hashIndex >= 0 ? extUri.substring(hashIndex + 1) : null\n\n let params: Record<string, unknown> = {}\n if (paramsStr) {\n try {\n params = JSON.parse(decodeURIComponent(paramsStr))\n } catch {\n console.warn(`Failed to parse extension params for ${uri}:`, paramsStr)\n }\n }\n\n switch (uri) {\n case EXTENSION_URIS.LLM:\n demands.llmDemands = params as unknown as LLMDemands\n break\n case EXTENSION_URIS.EMBEDDING:\n demands.embeddingDemands = params as unknown as EmbeddingDemands\n break\n case EXTENSION_URIS.MCP:\n demands.mcpDemands = params as unknown as MCPDemands\n break\n case EXTENSION_URIS.OAUTH_PROVIDER:\n demands.oauthDemands = params as unknown as OAuthDemands\n break\n case EXTENSION_URIS.SETTINGS:\n demands.settingsDemands = params as unknown as SettingsDemands\n break\n case EXTENSION_URIS.SECRETS:\n demands.secretDemands = params as unknown as SecretDemands\n break\n case EXTENSION_URIS.FORM_SERVICE:\n demands.formDemands = params as unknown as FormDemands\n break\n }\n }\n\n return demands\n}\n\n/**\n * Build fulfillment functions based on platform configuration\n */\nexport function buildFulfillments(config: PlatformConfig): Partial<Fulfillments> {\n const fulfillments: Partial<Fulfillments> = {}\n\n // LLM Fulfillment\n if (config.llm) {\n const llmConfig = config.llm\n fulfillments.llm = async (demands: LLMDemands): Promise<LLMFulfillments> => {\n const result: LLMFulfillments['llm_fulfillments'] = {}\n\n for (const [key, demand] of Object.entries(demands.llm_demands)) {\n // Use suggested model if available, otherwise use default\n const model = demand.suggested?.[0] || llmConfig.defaultModel\n\n result[key] = {\n identifier: 'custom_llm',\n api_base: llmConfig.apiBase,\n api_key: llmConfig.apiKey,\n api_model: model,\n }\n }\n\n return { llm_fulfillments: result }\n }\n }\n\n // Embedding Fulfillment\n if (config.embedding) {\n const embeddingConfig = config.embedding\n fulfillments.embedding = async (demands: EmbeddingDemands): Promise<EmbeddingFulfillments> => {\n const result: EmbeddingFulfillments['embedding_fulfillments'] = {}\n\n for (const [key, demand] of Object.entries(demands.embedding_demands)) {\n const model = demand.suggested?.[0] || embeddingConfig.defaultModel\n\n result[key] = {\n api_base: embeddingConfig.apiBase,\n api_key: embeddingConfig.apiKey,\n api_model: model,\n }\n }\n\n return { embedding_fulfillments: result }\n }\n }\n\n // MCP Fulfillment\n if (config.mcp) {\n const mcpConfig = config.mcp\n fulfillments.mcp = async (demands: MCPDemands): Promise<MCPFulfillments> => {\n const result: MCPFulfillments['mcp_fulfillments'] = {}\n\n for (const [key, demand] of Object.entries(demands.mcp_demands)) {\n const serverName = demand.suggested?.[0]\n if (serverName && mcpConfig.servers[serverName]) {\n result[key] = mcpConfig.servers[serverName]\n }\n }\n\n return { mcp_fulfillments: result }\n }\n }\n\n // Secrets Fulfillment\n if (config.secrets) {\n const secretsConfig = config.secrets\n fulfillments.secrets = async (demands: SecretDemands): Promise<SecretFulfillments> => {\n const result: SecretFulfillments['secret_fulfillments'] = {}\n\n for (const key of Object.keys(demands.secret_demands)) {\n if (secretsConfig[key]) {\n result[key] = { secret: secretsConfig[key] }\n }\n }\n\n return { secret_fulfillments: result }\n }\n }\n\n // Settings Fulfillment\n if (config.settings) {\n const settingsConfig = config.settings\n fulfillments.settings = async (_demands: SettingsDemands): Promise<SettingsFulfillments> => {\n return { values: settingsConfig }\n }\n }\n\n // OAuth Fulfillment\n if (config.oauth) {\n const oauthConfig = config.oauth\n fulfillments.oauth = async (demands: OAuthDemands): Promise<OAuthFulfillments> => {\n const result: OAuthFulfillments['oauth_fulfillments'] = {}\n\n for (const key of Object.keys(demands.oauth_demands)) {\n if (oauthConfig.providers[key]) {\n result[key] = { access_token: oauthConfig.providers[key].accessToken }\n }\n }\n\n return { oauth_fulfillments: result }\n }\n\n fulfillments.oauthRedirectUri = () => oauthConfig.redirectUri\n } else {\n fulfillments.oauthRedirectUri = () => null\n }\n\n // Form Fulfillment (typically handled by UI, return empty)\n fulfillments.form = async (_demands: FormDemands): Promise<FormFulfillments> => {\n return { values: {} }\n }\n\n // Context Token (placeholder - implement if using AgentStack platform)\n fulfillments.getContextToken = () => ({ token: '', expires_at: null })\n\n return fulfillments\n}\n\n/**\n * Resolve metadata to send with A2A requests\n * This builds the metadata object that fulfills agent extension demands\n *\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/handle-agent-card.ts#L60-L100\n */\nexport async function resolveMetadata(\n demands: ExtractedDemands,\n fulfillments: Partial<Fulfillments>\n): Promise<Record<string, unknown>> {\n const metadata: Record<string, unknown> = {}\n\n // Fulfill LLM demands\n if (demands.llmDemands && fulfillments.llm) {\n const llmFulfillment = await fulfillments.llm(demands.llmDemands)\n metadata[EXTENSION_URIS.LLM] = llmFulfillment\n }\n\n // Fulfill Embedding demands\n if (demands.embeddingDemands && fulfillments.embedding) {\n const embeddingFulfillment = await fulfillments.embedding(demands.embeddingDemands)\n metadata[EXTENSION_URIS.EMBEDDING] = embeddingFulfillment\n }\n\n // Fulfill MCP demands\n if (demands.mcpDemands && fulfillments.mcp) {\n const mcpFulfillment = await fulfillments.mcp(demands.mcpDemands)\n metadata[EXTENSION_URIS.MCP] = mcpFulfillment\n }\n\n // Fulfill OAuth demands\n if (demands.oauthDemands && fulfillments.oauth) {\n const oauthFulfillment = await fulfillments.oauth(demands.oauthDemands)\n metadata[EXTENSION_URIS.OAUTH_PROVIDER] = oauthFulfillment\n }\n\n // Fulfill Settings demands\n if (demands.settingsDemands && fulfillments.settings) {\n const settingsFulfillment = await fulfillments.settings(demands.settingsDemands)\n metadata[EXTENSION_URIS.SETTINGS] = settingsFulfillment\n }\n\n // Fulfill Secrets demands\n if (demands.secretDemands && fulfillments.secrets) {\n const secretsFulfillment = await fulfillments.secrets(demands.secretDemands)\n metadata[EXTENSION_URIS.SECRETS] = secretsFulfillment\n }\n\n // Fulfill Form demands\n if (demands.formDemands && fulfillments.form) {\n const formFulfillment = await fulfillments.form(demands.formDemands)\n metadata[EXTENSION_URIS.FORM_SERVICE] = formFulfillment\n }\n\n // Add OAuth redirect URI if configured\n if (fulfillments.oauthRedirectUri) {\n const redirectUri = fulfillments.oauthRedirectUri()\n if (redirectUri) {\n metadata[EXTENSION_URIS.OAUTH_REQUEST] = { redirect_uri: redirectUri }\n }\n }\n\n // Add Platform API token if available\n if (fulfillments.getContextToken) {\n const token = fulfillments.getContextToken()\n if (token.token) {\n metadata[EXTENSION_URIS.PLATFORM_API] = { context_token: token.token }\n }\n }\n\n return metadata\n}\n\n/**\n * Main handler function - combines extraction and resolution\n *\n * Usage:\n * ```typescript\n * const { demands, resolveMetadata } = handleAgentCard(agentCard);\n * const metadata = await resolveMetadata(fulfillments);\n * await client.sendMessage(message, metadata);\n * ```\n */\nexport function handleAgentCard(agentCard: AgentCard) {\n const demands = extractDemandsFromAgentCard(agentCard)\n\n return {\n demands,\n resolveMetadata: (fulfillments: Partial<Fulfillments>) => resolveMetadata(demands, fulfillments),\n }\n}\n\n// Re-export types for convenience\nexport type { AgentCard } from './client'\n","import {\n extractDemandsFromAgentCard,\n buildFulfillments,\n resolveMetadata,\n type PlatformConfig,\n} from './extension-handler'\nimport type { ExtractedDemands, Fulfillments } from './extension-types'\n\n/**\n * Generate a UUID v4 string with cross-browser compatibility\n * Falls back to crypto.getRandomValues() if crypto.randomUUID() is unavailable\n */\nfunction generateUUID(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n // Fallback using crypto.getRandomValues() for broader browser support\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 15) >> (c === 'x' ? 0 : 3);\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n\nexport interface AgentCard {\n name: string\n url: string\n description?: string\n skills?: Array<{ id: string; name: string; description: string }>\n securitySchemes?: Record<string, any>\n capabilities?: {\n streaming?: boolean\n }\n extensions?: string[]\n}\n\n// Extension configuration for A2A requests\nexport interface A2AExtensionConfig {\n // Settings extension configuration (for BeeAI/AgentStack compatibility)\n settings?: {\n thinking_group?: {\n thinking?: boolean\n }\n [key: string]: unknown\n }\n // Other extensions can be added here\n [key: string]: unknown\n}\n\n// Configuration options for the A2A client\nexport interface A2AClientConfig {\n apiKey?: string\n extensions?: A2AExtensionConfig\n platformConfig?: PlatformConfig // Platform configuration for fulfillments\n}\n\nexport interface A2AError {\n code: number\n message: string\n data?: any\n}\n\n// A2A Message types per official guide\nexport interface A2AMessagePart {\n kind: 'text' | 'file' | 'data'\n text?: string\n file?: {\n name: string\n mimeType: string\n bytes?: string\n uri?: string\n }\n data?: Record<string, unknown>\n}\n\nexport interface A2AMessage {\n role: string\n messageId: string\n parts: A2AMessagePart[]\n}\n\n// Stream response types per official A2A guide\nexport interface StreamChunk {\n contextId?: string\n taskId?: string\n kind: 'status-update' | 'artifact-update'\n status?: {\n state: 'submitted' | 'working' | 'completed' | 'failed' | 'canceled' | 'input-required' | 'auth-required'\n message?: A2AMessage & { metadata?: Record<string, unknown> } // Add metadata support\n }\n artifact?: {\n artifactId: string\n name?: string\n description?: string\n parts: A2AMessagePart[]\n metadata?: Record<string, unknown> // Add metadata support\n }\n final?: boolean\n}\n\nexport class A2AClient {\n private baseUrl: string\n private jsonRpcUrl: string\n private apiKey: string\n private extensions: A2AExtensionConfig\n private agentCard: AgentCard | null = null\n private platformConfig: PlatformConfig | null = null\n private extractedDemands: ExtractedDemands | null = null\n private fulfillments: Partial<Fulfillments> | null = null\n\n constructor(agentUrl: string, config: A2AClientConfig = {}) {\n // Normalize URL\n this.baseUrl = agentUrl.replace(/\\/$/, '')\n // JSON-RPC endpoint per A2A guide\n this.jsonRpcUrl = `${this.baseUrl}/jsonrpc/`\n this.apiKey = config.apiKey || ''\n this.extensions = config.extensions || {}\n this.platformConfig = config.platformConfig || null\n }\n\n /**\n * Get configured extensions\n */\n getExtensions(): A2AExtensionConfig {\n return this.extensions\n }\n\n /**\n * Update extension configuration\n */\n setExtensions(extensions: A2AExtensionConfig): void {\n this.extensions = extensions\n }\n\n async initialize(): Promise<AgentCard> {\n // Agent card can be at root or .well-known, try root first per guide\n const response = await fetch(this.baseUrl, {\n method: 'GET',\n headers: {\n 'Accept': 'application/json'\n }\n })\n\n if (!response.ok) {\n // Fallback to .well-known\n const fallbackUrl = `${this.baseUrl}/.well-known/agent-card.json`\n const fallbackResponse = await fetch(fallbackUrl, {\n method: 'GET',\n headers: {\n 'Accept': 'application/json'\n }\n })\n\n if (!fallbackResponse.ok) {\n throw new Error(`Failed to fetch agent card: ${response.status} ${response.statusText}`)\n }\n\n this.agentCard = await fallbackResponse.json()\n } else {\n this.agentCard = await response.json()\n }\n\n if (!this.agentCard?.name || !this.agentCard?.url) {\n throw new Error('Invalid agent card: missing required fields')\n }\n\n // Extract extension demands from agent card\n this.extractedDemands = extractDemandsFromAgentCard(this.agentCard)\n\n // Build fulfillments if platform config is provided\n if (this.platformConfig) {\n this.fulfillments = buildFulfillments(this.platformConfig)\n }\n\n return this.agentCard\n }\n\n getAgentCard(): AgentCard | null {\n return this.agentCard\n }\n\n getJsonRpcUrl(): string {\n return this.jsonRpcUrl\n }\n\n /**\n * Get resolved metadata for A2A requests\n * Call this after initialize() to get metadata that fulfills agent demands\n */\n async getResolvedMetadata(): Promise<Record<string, unknown>> {\n if (!this.extractedDemands) {\n return {}\n }\n\n if (!this.fulfillments) {\n console.warn('No fulfillments configured. Agent may fall back to defaults.')\n return {}\n }\n\n return resolveMetadata(this.extractedDemands, this.fulfillments)\n }\n\n /**\n * Get extracted demands from agent card\n */\n getExtractedDemands(): ExtractedDemands | null {\n return this.extractedDemands\n }\n\n /**\n * Update platform configuration after initialization\n */\n setPlatformConfig(config: PlatformConfig): void {\n this.platformConfig = config\n this.fulfillments = buildFulfillments(config)\n }\n\n /**\n * Get current platform configuration\n */\n getPlatformConfig(): PlatformConfig | null {\n return this.platformConfig\n }\n\n /**\n * Build the base params object for A2A requests\n */\n private async buildRequestParams(message: string): Promise<Record<string, unknown>> {\n // Get resolved metadata from extension demands and fulfillments\n const resolvedMetadata = await this.getResolvedMetadata()\n\n const params: Record<string, unknown> = {\n message: {\n role: 'user',\n messageId: generateUUID(),\n parts: [{ kind: 'text', text: message }]\n }\n }\n\n // Include extension configuration if available\n // This allows the agent to access settings like thinking mode\n if (Object.keys(this.extensions).length > 0) {\n params.extensions = this.extensions\n }\n\n // Merge extension config with resolved metadata\n const hasResolvedMetadata = Object.keys(resolvedMetadata).length > 0\n if (hasResolvedMetadata) {\n params.metadata = {\n ...resolvedMetadata,\n ...(params.extensions || {})\n }\n }\n\n return params\n }\n\n async sendMessage(message: string): Promise<any> {\n const params = await this.buildRequestParams(message)\n\n const payload = {\n jsonrpc: '2.0',\n method: 'message/send',\n params,\n id: generateUUID()\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json'\n }\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`\n }\n\n const response = await fetch(this.jsonRpcUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload)\n })\n\n if (!response.ok) {\n throw new Error(`Request failed: ${response.status} ${response.statusText}`)\n }\n\n const result = await response.json()\n\n if (result.error) {\n const error = result.error as A2AError\n throw new Error(`Agent error: ${error.message} (code: ${error.code})`)\n }\n\n return result.result\n }\n\n async streamMessage(\n message: string,\n onChunk: (chunk: StreamChunk) => void | Promise<void>,\n onComplete?: () => void | Promise<void>\n ): Promise<void> {\n const params = await this.buildRequestParams(message)\n\n const payload = {\n jsonrpc: '2.0',\n method: 'message/stream',\n params,\n id: generateUUID()\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Accept': 'text/event-stream'\n }\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`\n }\n\n const response = await fetch(this.jsonRpcUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload)\n })\n\n if (!response.ok) {\n throw new Error(`Stream request failed: ${response.status} ${response.statusText}`)\n }\n\n if (!response.body) {\n throw new Error('Response body is null')\n }\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n\n // Keep the last incomplete line in the buffer\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n const trimmedLine = line.trim()\n\n if (trimmedLine.startsWith('data: ')) {\n const dataStr = trimmedLine.slice(6)\n\n // Skip empty data or [DONE] marker\n if (!dataStr || dataStr === '[DONE]') continue\n\n try {\n const data = JSON.parse(dataStr)\n\n if (data.error) {\n const error = data.error as A2AError\n throw new Error(`Stream error: ${error.message} (code: ${error.code})`)\n }\n\n if (data.result) {\n const chunk = data.result as StreamChunk\n await onChunk(chunk)\n\n // Check if stream is complete\n if (chunk.final === true && onComplete) {\n await onComplete()\n }\n }\n } catch (parseError) {\n if (parseError instanceof SyntaxError) {\n console.warn('Failed to parse SSE data:', dataStr)\n } else {\n throw parseError\n }\n }\n }\n }\n }\n\n // Process any remaining data in the buffer\n if (buffer.trim().startsWith('data: ')) {\n const dataStr = buffer.trim().slice(6)\n if (dataStr && dataStr !== '[DONE]') {\n try {\n const data = JSON.parse(dataStr)\n if (data.result) {\n const chunk = data.result as StreamChunk\n await onChunk(chunk)\n \n if (chunk.final === true && onComplete) {\n await onComplete()\n }\n }\n } catch (e) {\n console.warn('Failed to parse final SSE data:', dataStr)\n }\n }\n }\n } finally {\n reader.releaseLock()\n }\n }\n}\n","/**\n * UI Extension Metadata Parser\n *\n * Parses metadata from agent responses to extract UI extension data\n * for rendering citations, trajectories, errors, forms, etc.\n *\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-ui/src/api/a2a/utils.ts\n */\n\nimport { EXTENSION_URIS } from './extension-uris'\n\n/**\n * Citation metadata structure\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/ui/citation.ts\n */\nexport interface Citation {\n url?: string | null\n start_index?: number | null\n end_index?: number | null\n title?: string | null\n description?: string | null\n}\n\nexport interface CitationMetadata {\n citations: Citation[]\n}\n\n/**\n * Trajectory metadata structure\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/ui/trajectory.ts\n */\nexport interface TrajectoryMetadata {\n title?: string | null\n content?: string | null\n group_id?: string | null\n}\n\n/**\n * Error metadata structure\n */\nexport interface ErrorMetadata {\n message: string\n code?: string | null\n stacktrace?: string | null\n context?: Record<string, unknown> | null\n}\n\n/**\n * Form request metadata structure\n */\nexport interface FormField {\n id: string\n type: 'text' | 'date' | 'file' | 'single_select' | 'multi_select' | 'checkbox' | 'checkbox_group'\n label: string\n description?: string\n required?: boolean\n default_value?: unknown\n options?: Array<{ value: string; label: string }>\n col_span?: number\n}\n\nexport interface FormRequestMetadata {\n title?: string\n description?: string\n columns?: number\n submit_label?: string\n fields: FormField[]\n}\n\n/**\n * Canvas edit request metadata\n */\nexport interface CanvasEditMetadata {\n artifact_id: string\n start_index: number\n end_index: number\n description: string\n}\n\n/**\n * Agent detail metadata\n */\nexport interface AgentDetailMetadata {\n interaction_mode?: 'single-turn' | 'multi-turn'\n user_greeting?: string\n version?: string\n framework?: string\n source_code_url?: string\n tools?: Array<{ name: string; description: string }>\n skills?: Array<{ id: string; name: string; description: string }>\n contributors?: Array<{ name: string; url?: string }>\n}\n\n/**\n * Parsed UI extensions from message metadata\n */\nexport interface ParsedUIExtensions {\n citations?: CitationMetadata\n trajectory?: TrajectoryMetadata\n error?: ErrorMetadata\n formRequest?: FormRequestMetadata\n canvas?: CanvasEditMetadata\n agentDetail?: AgentDetailMetadata\n}\n\n/**\n * Extract UI extension data from message metadata\n */\nexport function parseUIExtensions(metadata: Record<string, unknown> | undefined): ParsedUIExtensions {\n if (!metadata) return {}\n\n const result: ParsedUIExtensions = {}\n\n // Parse Citations\n const citationData = metadata[EXTENSION_URIS.CITATION]\n if (citationData && typeof citationData === 'object') {\n result.citations = citationData as CitationMetadata\n }\n\n // Parse Trajectory\n const trajectoryData = metadata[EXTENSION_URIS.TRAJECTORY]\n if (trajectoryData && typeof trajectoryData === 'object') {\n result.trajectory = trajectoryData as TrajectoryMetadata\n }\n\n // Parse Error\n const errorData = metadata[EXTENSION_URIS.ERROR]\n if (errorData && typeof errorData === 'object') {\n result.error = errorData as ErrorMetadata\n }\n\n // Parse Form Request\n const formData = metadata[EXTENSION_URIS.FORM_REQUEST]\n if (formData && typeof formData === 'object') {\n result.formRequest = formData as FormRequestMetadata\n }\n\n // Parse Canvas\n const canvasData = metadata[EXTENSION_URIS.CANVAS]\n if (canvasData && typeof canvasData === 'object') {\n result.canvas = canvasData as CanvasEditMetadata\n }\n\n // Parse Agent Detail\n const agentDetailData = metadata[EXTENSION_URIS.AGENT_DETAIL]\n if (agentDetailData && typeof agentDetailData === 'object') {\n result.agentDetail = agentDetailData as AgentDetailMetadata\n }\n\n return result\n}\n\n/**\n * Extract citations from message metadata\n * Convenience function for citation-specific extraction\n */\nexport function extractCitations(metadata: Record<string, unknown> | undefined): Citation[] {\n const parsed = parseUIExtensions(metadata)\n return parsed.citations?.citations || []\n}\n\n/**\n * Extract trajectory from message metadata\n * Convenience function for trajectory-specific extraction\n */\nexport function extractTrajectory(metadata: Record<string, unknown> | undefined): TrajectoryMetadata | null {\n const parsed = parseUIExtensions(metadata)\n return parsed.trajectory || null\n}\n\n/**\n * Extract error from message metadata\n */\nexport function extractError(metadata: Record<string, unknown> | undefined): ErrorMetadata | null {\n const parsed = parseUIExtensions(metadata)\n return parsed.error || null\n}\n\n/**\n * Extract form request from message metadata\n */\nexport function extractFormRequest(metadata: Record<string, unknown> | undefined): FormRequestMetadata | null {\n const parsed = parseUIExtensions(metadata)\n return parsed.formRequest || null\n}\n","/**\n * A2A to Carbon AI Chat Translator\n *\n * Translates A2A protocol streaming events to Carbon AI Chat's expected format.\n *\n * References:\n * - Carbon AI Chat streaming: https://github.com/carbon-design-system/carbon-ai-chat/blob/main/examples/react/reasoning-and-chain-of-thought/src/scenarios.ts\n * - A2A Protocol types: https://github.com/a2aproject/a2a-python/blob/main/src/a2a/types.py\n */\n\nimport type { StreamChunk, A2AMessagePart } from '../a2a';\nimport { parseUIExtensions } from '../a2a';\n\n// =============================================================================\n// CARBON AI CHAT TYPES\n// Based on @carbon/ai-chat package types\n// =============================================================================\n\n/**\n * Carbon message response types\n */\nexport const MessageResponseTypes = {\n TEXT: 'text',\n USER_DEFINED: 'user_defined',\n INLINE_ERROR: 'inline_error',\n OPTION: 'option',\n} as const;\n\nexport type MessageResponseType = typeof MessageResponseTypes[keyof typeof MessageResponseTypes];\n\n/**\n * Chain of thought step status\n */\nexport enum ChainOfThoughtStepStatus {\n IN_PROGRESS = 'in_progress',\n SUCCESS = 'success',\n ERROR = 'error',\n}\n\n/**\n * Reasoning step open state\n */\nexport enum ReasoningStepOpenState {\n OPEN = 'open',\n CLOSE = 'close',\n DEFAULT = 'default',\n}\n\n/**\n * User type for response profile\n */\nexport enum UserType {\n HUMAN = 'human',\n BOT = 'bot',\n WATSONX = 'watsonx',\n}\n\n/**\n * Response user profile\n */\nexport interface ResponseUserProfile {\n id: string;\n nickname: string;\n user_type: UserType;\n profile_picture_url?: string;\n}\n\n/**\n * Reasoning step structure\n */\nexport interface ReasoningStep {\n title: string;\n content?: string;\n open_state?: ReasoningStepOpenState;\n}\n\n/**\n * Chain of thought step structure\n */\nexport interface ChainOfThoughtStep {\n title: string;\n description?: string;\n tool_name?: string;\n request?: { args: unknown };\n response?: { content: unknown };\n status: ChainOfThoughtStepStatus;\n}\n\n/**\n * Message response options\n */\nexport interface MessageResponseOptions {\n response_user_profile?: ResponseUserProfile;\n reasoning?: {\n open_state?: ReasoningStepOpenState;\n steps?: ReasoningStep[];\n content?: string;\n };\n chain_of_thought?: ChainOfThoughtStep[];\n}\n\n/**\n * Item streaming metadata\n */\nexport interface ItemStreamingMetadata {\n id: string;\n cancellable?: boolean;\n stream_stopped?: boolean;\n}\n\n/**\n * Generic item (text response)\n */\nexport interface TextItem {\n response_type: typeof MessageResponseTypes.TEXT;\n text: string;\n streaming_metadata?: ItemStreamingMetadata;\n message_item_options?: {\n feedback?: {\n is_on?: boolean;\n id?: string;\n };\n };\n}\n\n/**\n * User defined item (custom content)\n */\nexport interface UserDefinedItem {\n response_type: typeof MessageResponseTypes.USER_DEFINED;\n user_defined: Record<string, unknown>;\n}\n\n/**\n * Generic item union type\n */\nexport type GenericItem = TextItem | UserDefinedItem;\n\n/**\n * Partial item chunk for streaming\n */\nexport interface PartialItemChunk {\n partial_item: Partial<GenericItem> & {\n response_type: MessageResponseType;\n streaming_metadata?: ItemStreamingMetadata;\n };\n partial_response?: {\n message_options?: Partial<MessageResponseOptions>;\n };\n streaming_metadata: {\n response_id: string;\n };\n}\n\n/**\n * Complete item chunk\n */\nexport interface CompleteItemChunk {\n complete_item: GenericItem;\n partial_response?: {\n message_options?: Partial<MessageResponseOptions>;\n };\n streaming_metadata: {\n response_id: string;\n };\n}\n\n/**\n * Final response chunk\n */\nexport interface FinalResponseChunk {\n final_response: {\n id: string;\n output: {\n generic: GenericItem[];\n };\n message_options?: MessageResponseOptions;\n };\n}\n\n/**\n * Stream chunk union type\n */\nexport type CarbonStreamChunk = PartialItemChunk | CompleteItemChunk | FinalResponseChunk;\n\n/**\n * Carbon message for addMessage() API\n */\nexport interface CarbonMessage {\n output: {\n generic: GenericItem[];\n };\n message_options?: MessageResponseOptions;\n}\n\n// =============================================================================\n// LEGACY CARBON MESSAGE TYPE (for backward compatibility with EnhancedChatWrapper)\n// =============================================================================\n\n/**\n * Legacy Carbon Message format (used by EnhancedChatWrapper)\n * This is the older format that works with Carbon's addMessage() API directly\n */\nexport interface LegacyCarbonMessage {\n response_type: string;\n text?: string;\n reasoning_steps?: {\n steps: Array<{ content: string }>;\n openState?: 'open' | 'closed';\n };\n chain_of_thought?: {\n steps: ChainOfThoughtStep[];\n };\n user_defined?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\n// =============================================================================\n// A2A PART TYPES WITH METADATA\n// =============================================================================\n\n/**\n * Extended A2A part with metadata support\n */\nexport interface A2APartWithMetadata extends A2AMessagePart {\n metadata?: {\n content_type?: 'thinking' | 'reasoning_step' | 'response' | 'status' | string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Tool call data structure\n */\nexport interface ToolCallData {\n type: 'tool_call';\n tool_name?: string;\n args?: unknown;\n}\n\n/**\n * Tool result data structure\n */\nexport interface ToolResultData {\n type: 'tool_result';\n tool_name?: string;\n result_preview?: unknown;\n success?: boolean;\n}\n\n// =============================================================================\n// TRANSLATOR CLASS\n// =============================================================================\n\n/**\n * Translator state for tracking streaming progress\n */\ninterface TranslatorState {\n responseId: string;\n itemId: string;\n accumulatedText: string;\n reasoningSteps: ReasoningStep[];\n chainOfThought: ChainOfThoughtStep[];\n pendingToolCalls: Map<string, number>; // tool_name -> index in chainOfThought\n hasStartedStreaming: boolean;\n shellMessageSent: boolean;\n}\n\n/**\n * A2A to Carbon AI Chat Translator\n *\n * Manages the translation of A2A streaming events to Carbon AI Chat format.\n * Maintains state across multiple chunks to properly accumulate text and\n * track reasoning/tool call progress.\n */\nexport class A2AToCarbonTranslator {\n private state: TranslatorState;\n private agentProfile: ResponseUserProfile;\n\n constructor(agentProfile?: Partial<ResponseUserProfile>) {\n this.agentProfile = {\n id: agentProfile?.id || 'a2a-agent',\n nickname: agentProfile?.nickname || 'AI Assistant',\n user_type: agentProfile?.user_type || UserType.BOT,\n profile_picture_url: agentProfile?.profile_picture_url,\n };\n this.state = this.createInitialState();\n }\n\n /**\n * Create initial translator state\n */\n private createInitialState(): TranslatorState {\n return {\n responseId: this.generateResponseId(),\n itemId: '1',\n accumulatedText: '',\n reasoningSteps: [],\n chainOfThought: [],\n pendingToolCalls: new Map(),\n hasStartedStreaming: false,\n shellMessageSent: false,\n };\n }\n\n /**\n * Generate unique response ID\n */\n private generateResponseId(): string {\n return `response-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n }\n\n /**\n * Reset state for new message\n */\n reset(): void {\n this.state = this.createInitialState();\n }\n\n /**\n * Get current response ID\n */\n getResponseId(): string {\n return this.state.responseId;\n }\n\n /**\n * Get current item ID\n */\n getItemId(): string {\n return this.state.itemId;\n }\n\n /**\n * Update agent profile\n */\n setAgentProfile(profile: Partial<ResponseUserProfile>): void {\n this.agentProfile = { ...this.agentProfile, ...profile };\n }\n\n /**\n * Get current agent profile\n */\n getAgentProfile(): ResponseUserProfile {\n return this.agentProfile;\n }\n\n /**\n * Check if shell message has been sent\n */\n hasShellBeenSent(): boolean {\n return this.state.shellMessageSent;\n }\n\n /**\n * Mark shell message as sent\n */\n markShellSent(): void {\n this.state.shellMessageSent = true;\n }\n\n /**\n * Get accumulated text\n */\n getAccumulatedText(): string {\n return this.state.accumulatedText;\n }\n\n /**\n * Get current reasoning steps\n */\n getReasoningSteps(): ReasoningStep[] {\n return [...this.state.reasoningSteps];\n }\n\n /**\n * Get current chain of thought\n */\n getChainOfThought(): ChainOfThoughtStep[] {\n return [...this.state.chainOfThought];\n }\n\n /**\n * Check if streaming has started\n */\n hasStartedStreaming(): boolean {\n return this.state.hasStartedStreaming;\n }\n\n /**\n * Get current state (for debugging/inspection)\n */\n getState(): Readonly<TranslatorState> {\n return { ...this.state };\n }\n\n // ===========================================================================\n // SHELL MESSAGE CREATION\n // ===========================================================================\n\n /**\n * Create shell message to initialize Carbon's reducer\n *\n * IMPORTANT: This MUST be called before sending any other chunks.\n * It seeds the message shell so reducers create the container before\n * reasoning steps or text stream in.\n */\n createShellMessage(includeReasoning: boolean = true): PartialItemChunk {\n this.state.shellMessageSent = true;\n\n const chunk: PartialItemChunk = {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n\n // Initialize empty reasoning if requested\n if (includeReasoning) {\n chunk.partial_response!.message_options!.reasoning = { steps: [] };\n }\n\n return chunk;\n }\n\n // ===========================================================================\n // A2A PART TRANSLATION\n // ===========================================================================\n\n /**\n * Translate a single streaming A2A part to a legacy Carbon message\n * Used for real-time streaming updates (backward compatibility with EnhancedChatWrapper)\n * @param part The A2A part to translate\n * @param metadata Optional extension metadata from the artifact\n */\n translateStreamingPart(part: A2APartWithMetadata, metadata?: Record<string, unknown>): LegacyCarbonMessage | null {\n const contentType = part.metadata?.content_type;\n\n // Handle thinking/reasoning content (both pre-response and post-tool reasoning)\n if ((contentType === 'thinking' || contentType === 'reasoning_step') && part.kind === 'text' && part.text) {\n return {\n response_type: 'reasoning_steps',\n reasoning_steps: {\n steps: [{ content: part.text }],\n openState: 'closed',\n },\n metadata,\n };\n }\n\n // Handle tool call data part\n if (part.kind === 'data' && part.data) {\n const dataType = (part.data as { type?: string }).type;\n\n if (dataType === 'tool_call') {\n const toolData = part.data as unknown as ToolCallData;\n return {\n response_type: 'chain_of_thought',\n chain_of_thought: {\n steps: [{\n title: toolData.tool_name || 'Tool Call',\n description: `Calling ${toolData.tool_name || 'tool'}`,\n tool_name: toolData.tool_name,\n request: { args: toolData.args },\n status: ChainOfThoughtStepStatus.IN_PROGRESS,\n }],\n },\n metadata,\n };\n }\n\n if (dataType === 'tool_result') {\n const resultData = part.data as unknown as ToolResultData;\n return {\n response_type: 'chain_of_thought',\n chain_of_thought: {\n steps: [{\n title: resultData.tool_name || 'Tool Result',\n description: `Result from ${resultData.tool_name || 'tool'}`,\n tool_name: resultData.tool_name,\n response: { content: resultData.result_preview },\n status: resultData.success === false\n ? ChainOfThoughtStepStatus.ERROR\n : ChainOfThoughtStepStatus.SUCCESS,\n }],\n },\n metadata,\n };\n }\n }\n\n // Handle regular text content\n if (part.kind === 'text' && part.text) {\n return {\n response_type: 'text',\n text: part.text,\n metadata,\n };\n }\n\n // Handle file parts\n if (part.kind === 'file' && part.file) {\n return {\n response_type: 'user_defined',\n user_defined: {\n type: 'file_attachment',\n fileName: part.file.name,\n mimeType: part.file.mimeType,\n downloadUrl: part.file.uri || `data:${part.file.mimeType};base64,${part.file.bytes}`,\n },\n metadata,\n };\n }\n\n return null;\n }\n\n /**\n * Translate an A2A message part to Carbon format\n *\n * @param part - The A2A message part to translate\n * @param artifactMetadata - Optional metadata from artifact level\n * @returns Carbon stream chunk or null if no action needed\n */\n translatePart(\n part: A2APartWithMetadata,\n artifactMetadata?: Record<string, unknown>\n ): CarbonStreamChunk | null {\n const contentType = part.metadata?.content_type;\n\n // Handle thinking/reasoning content (both pre-response and post-tool reasoning)\n if ((contentType === 'thinking' || contentType === 'reasoning_step') && part.kind === 'text' && part.text) {\n return this.translateThinkingPart(part.text, part.metadata);\n }\n\n // Handle trajectory extension (alternative to thinking)\n const partExtensions = parseUIExtensions(part.metadata as Record<string, unknown>);\n if (partExtensions.trajectory) {\n return this.translateTrajectoryPart(partExtensions.trajectory);\n }\n\n // Handle tool call data part\n if (part.kind === 'data' && part.data) {\n const dataType = (part.data as { type?: string }).type;\n\n if (dataType === 'tool_call') {\n return this.translateToolCallPart(part.data as unknown as ToolCallData);\n }\n\n if (dataType === 'tool_result') {\n return this.translateToolResultPart(part.data as unknown as ToolResultData);\n }\n }\n\n // Handle regular text content\n if (part.kind === 'text' && part.text) {\n // Skip if this is thinking/reasoning content (already handled above)\n if (contentType === 'thinking' || contentType === 'reasoning_step') {\n return null;\n }\n return this.translateTextPart(part.text, artifactMetadata);\n }\n\n // Handle file parts\n if (part.kind === 'file' && part.file) {\n return this.translateFilePart(part.file);\n }\n\n return null;\n }\n\n /**\n * Translate thinking/reasoning content to Carbon reasoning step\n */\n private translateThinkingPart(\n text: string,\n metadata?: Record<string, unknown>\n ): PartialItemChunk {\n // Extract step number and title from metadata\n const stepNumber = metadata?.step as number | undefined;\n const stepTitle = metadata?.title as string | undefined;\n\n const newStep: ReasoningStep = {\n title: stepTitle || `Thinking Step ${(stepNumber ?? this.state.reasoningSteps.length) + 1}`,\n content: text,\n open_state: ReasoningStepOpenState.DEFAULT,\n };\n\n this.state.reasoningSteps.push(newStep);\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n reasoning: {\n steps: this.state.reasoningSteps,\n open_state: ReasoningStepOpenState.DEFAULT, // Auto-expand during streaming\n },\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate trajectory extension to Carbon reasoning step\n */\n private translateTrajectoryPart(\n trajectory: { title?: string | null; content?: string | null; group_id?: string | null }\n ): PartialItemChunk {\n const newStep: ReasoningStep = {\n title: trajectory.title || 'Processing',\n content: trajectory.content || '',\n open_state: ReasoningStepOpenState.DEFAULT,\n };\n\n this.state.reasoningSteps.push(newStep);\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n reasoning: {\n steps: this.state.reasoningSteps,\n open_state: ReasoningStepOpenState.DEFAULT, // Auto-expand during streaming\n },\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate tool call to Carbon chain of thought (IN_PROGRESS)\n */\n private translateToolCallPart(toolData: ToolCallData): PartialItemChunk {\n const toolName = toolData.tool_name || 'tool';\n\n const cotStep: ChainOfThoughtStep = {\n title: toolName,\n description: `Calling ${toolName}`,\n tool_name: toolName,\n request: { args: toolData.args },\n status: ChainOfThoughtStepStatus.IN_PROGRESS,\n };\n\n const index = this.state.chainOfThought.length;\n this.state.chainOfThought.push(cotStep);\n this.state.pendingToolCalls.set(toolName, index);\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n chain_of_thought: this.state.chainOfThought,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate tool result to Carbon chain of thought (SUCCESS/ERROR)\n */\n private translateToolResultPart(resultData: ToolResultData): PartialItemChunk {\n const toolName = resultData.tool_name || 'tool';\n const index = this.state.pendingToolCalls.get(toolName);\n\n if (index !== undefined && index < this.state.chainOfThought.length) {\n // Update existing tool call with result\n this.state.chainOfThought[index] = {\n ...this.state.chainOfThought[index],\n response: { content: resultData.result_preview },\n status: resultData.success === false\n ? ChainOfThoughtStepStatus.ERROR\n : ChainOfThoughtStepStatus.SUCCESS,\n };\n this.state.pendingToolCalls.delete(toolName);\n } else {\n // No matching tool call found, create new completed step\n const cotStep: ChainOfThoughtStep = {\n title: toolName,\n description: `Result from ${toolName}`,\n tool_name: toolName,\n response: { content: resultData.result_preview },\n status: resultData.success === false\n ? ChainOfThoughtStepStatus.ERROR\n : ChainOfThoughtStepStatus.SUCCESS,\n };\n this.state.chainOfThought.push(cotStep);\n }\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n chain_of_thought: this.state.chainOfThought,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate text part to Carbon partial item\n */\n private translateTextPart(\n text: string,\n _artifactMetadata?: Record<string, unknown>\n ): PartialItemChunk {\n this.state.accumulatedText += text;\n this.state.hasStartedStreaming = true;\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: text, // Send just the new text chunk\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate file part to Carbon user defined item\n */\n private translateFilePart(file: {\n name: string;\n mimeType: string;\n bytes?: string;\n uri?: string;\n }): PartialItemChunk {\n return {\n partial_item: {\n response_type: MessageResponseTypes.USER_DEFINED,\n user_defined: {\n type: 'file_attachment',\n fileName: file.name,\n mimeType: file.mimeType,\n downloadUrl: file.uri || `data:${file.mimeType};base64,${file.bytes}`,\n },\n streaming_metadata: {\n id: `file-${Date.now()}`,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n // ===========================================================================\n // COMPLETE AND FINAL RESPONSE\n // ===========================================================================\n\n /**\n * Create complete item chunk\n *\n * Call this to finalize a specific item while other items may still be streaming.\n * Optional but useful for accessibility and corrections.\n */\n createCompleteItem(wasStopped: boolean = false): CompleteItemChunk {\n return {\n complete_item: {\n response_type: MessageResponseTypes.TEXT,\n text: this.state.accumulatedText,\n streaming_metadata: {\n id: this.state.itemId,\n stream_stopped: wasStopped,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n reasoning: this.state.reasoningSteps.length > 0\n ? {\n steps: this.state.reasoningSteps,\n open_state: ReasoningStepOpenState.CLOSE, // Collapse after completion\n }\n : undefined,\n chain_of_thought: this.state.chainOfThought.length > 0\n ? this.state.chainOfThought\n : undefined,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Create final response chunk\n *\n * CRITICAL: This MUST be called to end streaming and clear the typing indicator.\n * Without this, the UI will remain in a loading state.\n */\n createFinalResponse(): FinalResponseChunk {\n return {\n final_response: {\n id: this.state.responseId,\n output: {\n generic: [\n {\n response_type: MessageResponseTypes.TEXT,\n text: this.state.accumulatedText,\n streaming_metadata: {\n id: this.state.itemId,\n },\n },\n ],\n },\n message_options: {\n response_user_profile: this.agentProfile,\n reasoning: this.state.reasoningSteps.length > 0\n ? {\n steps: this.state.reasoningSteps,\n open_state: ReasoningStepOpenState.CLOSE, // Collapse after completion\n }\n : undefined,\n chain_of_thought: this.state.chainOfThought.length > 0\n ? this.state.chainOfThought\n : undefined,\n },\n },\n };\n }\n\n /**\n * Create error response\n */\n createErrorResponse(errorMessage: string): FinalResponseChunk {\n return {\n final_response: {\n id: this.state.responseId,\n output: {\n generic: [\n {\n response_type: MessageResponseTypes.TEXT,\n text: errorMessage,\n streaming_metadata: {\n id: this.state.itemId,\n },\n },\n ],\n },\n message_options: {\n response_user_profile: this.agentProfile,\n },\n },\n };\n }\n\n // ===========================================================================\n // CITATION HANDLING\n // ===========================================================================\n\n /**\n * Create citations message\n *\n * Call this after the main response to add a sources list.\n */\n createCitationsMessage(\n citations: Array<{\n url?: string | null;\n title?: string | null;\n description?: string | null;\n }>\n ): CarbonMessage {\n return {\n output: {\n generic: [\n {\n response_type: MessageResponseTypes.USER_DEFINED,\n user_defined: {\n type: 'sources_list',\n citations,\n },\n } as UserDefinedItem,\n ],\n },\n message_options: {\n response_user_profile: this.agentProfile,\n },\n };\n }\n\n // ===========================================================================\n // FULL A2A STREAM CHUNK TRANSLATION\n // ===========================================================================\n\n /**\n * Translate a complete A2A stream chunk to Carbon format\n *\n * This is the main entry point for processing A2A SSE events.\n * Returns an array of Carbon chunks since one A2A event may produce\n * multiple Carbon updates (e.g., multiple parts in a message).\n */\n translateStreamChunk(chunk: StreamChunk): CarbonStreamChunk[] {\n const results: CarbonStreamChunk[] = [];\n\n // Ensure shell message is sent first\n if (!this.state.shellMessageSent) {\n results.push(this.createShellMessage());\n }\n\n if (chunk.kind === 'status-update' && chunk.status?.message) {\n const message = chunk.status.message;\n\n // Process message-level metadata (citations, errors, etc.)\n // These are typically added to state rather than returned as chunks\n\n // Process each part in the message\n for (const part of message.parts) {\n const carbonChunk = this.translatePart(\n part as A2APartWithMetadata,\n message.metadata\n );\n if (carbonChunk) {\n results.push(carbonChunk);\n }\n }\n }\n\n if (chunk.kind === 'artifact-update' && chunk.artifact?.parts) {\n // Process artifact parts\n for (const part of chunk.artifact.parts) {\n const carbonChunk = this.translatePart(\n part as A2APartWithMetadata,\n chunk.artifact.metadata\n );\n if (carbonChunk) {\n results.push(carbonChunk);\n }\n }\n }\n\n // Handle stream completion\n if (chunk.final === true || chunk.status?.state === 'completed') {\n results.push(this.createFinalResponse());\n }\n\n return results;\n }\n}\n\n// =============================================================================\n// UTILITY FUNCTIONS\n// =============================================================================\n\n/**\n * Create a translator with default settings\n */\nexport function createTranslator(\n agentName?: string,\n agentIconUrl?: string\n): A2AToCarbonTranslator {\n return new A2AToCarbonTranslator({\n nickname: agentName,\n profile_picture_url: agentIconUrl,\n });\n}\n\n/**\n * Check if a Carbon chunk is a final response\n */\nexport function isFinalResponse(chunk: CarbonStreamChunk): chunk is FinalResponseChunk {\n return 'final_response' in chunk;\n}\n\n/**\n * Check if a Carbon chunk is a partial item\n */\nexport function isPartialItem(chunk: CarbonStreamChunk): chunk is PartialItemChunk {\n return 'partial_item' in chunk;\n}\n\n/**\n * Check if a Carbon chunk is a complete item\n */\nexport function isCompleteItem(chunk: CarbonStreamChunk): chunk is CompleteItemChunk {\n return 'complete_item' in chunk;\n}\n","/**\n * Citation processing utilities\n *\n * Reference: https://raw.githubusercontent.com/i-am-bee/agentstack/main/docs/development/agent-integration/citations.mdx\n */\n\nimport type { Citation } from '../../lib/a2a';\nimport type { ProcessedCitation, TextSegment } from './types';\n\n/**\n * Generate unique ID for citation\n */\nfunction generateCitationId(): string {\n return `cite-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Process raw citations into renderable format\n * Assigns numbers and extracts highlighted text\n */\nexport function processCitations(text: string, citations: Citation[]): ProcessedCitation[] {\n // Sort by start_index to assign numbers in order of appearance\n const sortedCitations = [...citations]\n .filter((c) => c.start_index != null && c.end_index != null)\n .sort((a, b) => (a.start_index ?? 0) - (b.start_index ?? 0));\n\n return sortedCitations.map((citation, index) => ({\n ...citation,\n id: generateCitationId(),\n number: index + 1,\n highlightedText: text.substring(citation.start_index ?? 0, citation.end_index ?? text.length),\n }));\n}\n\n/**\n * Segment text into parts with and without citations\n * Returns array of segments for rendering\n */\nexport function segmentTextWithCitations(text: string, citations: Citation[]): TextSegment[] {\n const processedCitations = processCitations(text, citations);\n\n if (processedCitations.length === 0) {\n return [{ text, isCited: false }];\n }\n\n const segments: TextSegment[] = [];\n let currentIndex = 0;\n\n for (const citation of processedCitations) {\n const startIndex = citation.start_index ?? 0;\n const endIndex = citation.end_index ?? text.length;\n\n // Add non-cited text before this citation\n if (currentIndex < startIndex) {\n segments.push({\n text: text.substring(currentIndex, startIndex),\n isCited: false,\n });\n }\n\n // Add cited text segment\n segments.push({\n text: text.substring(startIndex, endIndex),\n citation,\n isCited: true,\n });\n\n currentIndex = endIndex;\n }\n\n // Add remaining non-cited text\n if (currentIndex < text.length) {\n segments.push({\n text: text.substring(currentIndex),\n isCited: false,\n });\n }\n\n return segments;\n}\n\n/**\n * Get unique citations (deduplicated by URL)\n */\nexport function getUniqueCitations(citations: ProcessedCitation[]): ProcessedCitation[] {\n const seen = new Set<string>();\n return citations.filter((citation) => {\n if (!citation.url || seen.has(citation.url)) {\n return false;\n }\n seen.add(citation.url);\n return true;\n });\n}\n","/**\n * Citation Renderer Component\n *\n * Renders text with inline citation highlights and a sources list.\n * Citations appear as highlighted text with superscript numbers.\n * Hovering shows a tooltip with source details.\n * Clicking navigates to the source URL.\n *\n * Reference: https://raw.githubusercontent.com/i-am-bee/agentstack/main/docs/development/agent-integration/citations.mdx\n */\n\n'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport type { CitationRendererProps, ProcessedCitation, TextSegment } from './types';\nimport { segmentTextWithCitations, getUniqueCitations, processCitations } from './citation-utils';\n\n/**\n * Tooltip component for citation hover state\n */\ninterface CitationTooltipProps {\n citation: ProcessedCitation;\n position: { x: number; y: number };\n}\n\nconst CitationTooltip: React.FC<CitationTooltipProps> = ({ citation, position }) => {\n return (\n <div\n className=\"fixed z-50 max-w-xs p-3 bg-gray-900 text-white rounded-lg shadow-lg text-sm\"\n style={{\n left: position.x,\n top: position.y + 20,\n transform: 'translateX(-50%)',\n }}\n >\n {citation.title && <div className=\"font-semibold mb-1\">{citation.title}</div>}\n {citation.description && <div className=\"text-gray-300 text-xs mb-2\">{citation.description}</div>}\n {citation.url && <div className=\"text-blue-300 text-xs truncate\">{citation.url}</div>}\n <div className=\"absolute -top-2 left-1/2 transform -translate-x-1/2 border-8 border-transparent border-b-gray-900\" />\n </div>\n );\n};\n\n/**\n * Inline citation highlight component\n */\ninterface CitationHighlightProps {\n segment: TextSegment;\n onHover: (citation: ProcessedCitation | null, event: React.MouseEvent) => void;\n}\n\nconst CitationHighlight: React.FC<CitationHighlightProps> = ({ segment, onHover }) => {\n if (!segment.isCited || !segment.citation) {\n return <span>{segment.text}</span>;\n }\n\n const handleMouseEnter = (e: React.MouseEvent) => {\n onHover(segment.citation!, e);\n };\n\n const handleMouseLeave = () => {\n onHover(null, {} as React.MouseEvent);\n };\n\n const handleClick = () => {\n if (segment.citation?.url) {\n window.open(segment.citation.url, '_blank', 'noopener,noreferrer');\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n };\n\n return (\n <span\n className=\"bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200 cursor-pointer hover:bg-blue-200 dark:hover:bg-blue-800/40 transition-colors rounded px-0.5\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={`Citation ${segment.citation.number}: ${segment.citation.title || 'Source'}`}\n >\n {segment.text}\n <sup className=\"text-xs font-semibold ml-0.5\">[{segment.citation.number}]</sup>\n </span>\n );\n};\n\n/**\n * Sources list component\n */\ninterface SourcesListProps {\n citations: ProcessedCitation[];\n}\n\nconst SourcesList: React.FC<SourcesListProps> = ({ citations }) => {\n const uniqueCitations = getUniqueCitations(citations);\n\n if (uniqueCitations.length === 0) {\n return null;\n }\n\n return (\n <div className=\"mt-4 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <h4 className=\"text-sm font-semibold text-gray-600 dark:text-gray-400 mb-2\">Sources</h4>\n <ol className=\"list-decimal list-inside space-y-1\">\n {uniqueCitations.map((citation) => (\n <li key={citation.id} className=\"text-sm\">\n <a\n href={citation.url || '#'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-blue-600 dark:text-blue-400 hover:underline\"\n >\n {citation.title || citation.url || `Source ${citation.number}`}\n </a>\n {citation.description && (\n <span className=\"text-gray-500 dark:text-gray-400 ml-2\">— {citation.description}</span>\n )}\n </li>\n ))}\n </ol>\n </div>\n );\n};\n\n/**\n * Main Citation Renderer Component\n */\nexport const CitationRenderer: React.FC<CitationRendererProps> = ({ text, citations, className = '' }) => {\n const [hoveredCitation, setHoveredCitation] = useState<ProcessedCitation | null>(null);\n const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 });\n\n const segments = segmentTextWithCitations(text, citations);\n const processedCitations = processCitations(text, citations);\n\n const handleHover = useCallback((citation: ProcessedCitation | null, event: React.MouseEvent) => {\n setHoveredCitation(citation);\n if (citation && event.currentTarget) {\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n setTooltipPosition({\n x: rect.left + rect.width / 2,\n y: rect.bottom,\n });\n }\n }, []);\n\n return (\n <div className={`relative ${className}`}>\n {/* Main text with citations */}\n <div className=\"prose dark:prose-invert max-w-none\">\n {segments.map((segment, index) => (\n <CitationHighlight key={index} segment={segment} onHover={handleHover} />\n ))}\n </div>\n\n {/* Hover tooltip */}\n {hoveredCitation && <CitationTooltip citation={hoveredCitation} position={tooltipPosition} />}\n\n {/* Sources list */}\n <SourcesList citations={processedCitations} />\n </div>\n );\n};\n\nexport default CitationRenderer;\n","/**\n * Error Renderer Component\n *\n * Renders error messages from agent responses with\n * optional stack trace and context information.\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport type { ErrorRendererProps } from './types';\n\n/**\n * Error Renderer Component\n */\nexport const ErrorRenderer: React.FC<ErrorRendererProps> = ({ error, className = '' }) => {\n const [showDetails, setShowDetails] = useState(false);\n const hasDetails = error.stacktrace || error.context;\n\n return (\n <div className={`border border-red-200 bg-red-50 dark:bg-red-900/20 dark:border-red-800 rounded-lg p-4 ${className}`}>\n {/* Error Header */}\n <div className=\"flex items-start gap-3\">\n <div className=\"flex-shrink-0 text-red-500 dark:text-red-400\">\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"flex-1\">\n <div className=\"flex items-center justify-between\">\n <h4 className=\"text-sm font-semibold text-red-800 dark:text-red-200\">\n {error.code ? `Error: ${error.code}` : 'Error'}\n </h4>\n {hasDetails && (\n <button\n onClick={() => setShowDetails(!showDetails)}\n className=\"text-xs text-red-600 dark:text-red-400 hover:underline\"\n >\n {showDetails ? 'Hide details' : 'Show details'}\n </button>\n )}\n </div>\n <p className=\"mt-1 text-sm text-red-700 dark:text-red-300\">{error.message}</p>\n </div>\n </div>\n\n {/* Error Details (collapsible) */}\n {hasDetails && showDetails && (\n <div className=\"mt-4 pt-4 border-t border-red-200 dark:border-red-800\">\n {/* Stack Trace */}\n {error.stacktrace && (\n <div className=\"mb-3\">\n <h5 className=\"text-xs font-semibold text-red-600 dark:text-red-400 mb-1\">Stack Trace</h5>\n <pre className=\"text-xs bg-red-100 dark:bg-red-900/40 p-3 rounded overflow-x-auto text-red-800 dark:text-red-200\">\n {error.stacktrace}\n </pre>\n </div>\n )}\n\n {/* Context */}\n {error.context && (\n <div>\n <h5 className=\"text-xs font-semibold text-red-600 dark:text-red-400 mb-1\">Context</h5>\n <pre className=\"text-xs bg-red-100 dark:bg-red-900/40 p-3 rounded overflow-x-auto text-red-800 dark:text-red-200\">\n {JSON.stringify(error.context, null, 2)}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default ErrorRenderer;\n","/**\n * Form Renderer Component\n *\n * Renders dynamic forms from agent form request metadata.\n * Supports text, date, file, select, checkbox, and multi-select fields.\n */\n\n'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport type { FormRendererProps } from './types';\nimport type { FormField } from '../../lib/a2a';\n\n/**\n * Individual form field component\n */\ninterface FormFieldRendererProps {\n field: FormField;\n value: unknown;\n onChange: (fieldId: string, value: unknown) => void;\n}\n\nconst FormFieldRenderer: React.FC<FormFieldRendererProps> = ({ field, value, onChange }) => {\n const handleChange = useCallback(\n (newValue: unknown) => {\n onChange(field.id, newValue);\n },\n [field.id, onChange]\n );\n\n const baseInputClasses =\n 'w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none';\n\n switch (field.type) {\n case 'text':\n return (\n <input\n type=\"text\"\n id={field.id}\n value={(value as string) || ''}\n onChange={(e) => handleChange(e.target.value)}\n placeholder={field.description}\n required={field.required}\n className={baseInputClasses}\n />\n );\n\n case 'date':\n return (\n <input\n type=\"date\"\n id={field.id}\n value={(value as string) || ''}\n onChange={(e) => handleChange(e.target.value)}\n required={field.required}\n className={baseInputClasses}\n />\n );\n\n case 'file':\n return (\n <input\n type=\"file\"\n id={field.id}\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) {\n // Convert file to base64 for transmission\n const reader = new FileReader();\n reader.onload = () => {\n handleChange({\n name: file.name,\n type: file.type,\n size: file.size,\n data: reader.result,\n });\n };\n reader.readAsDataURL(file);\n }\n }}\n required={field.required}\n className={baseInputClasses}\n />\n );\n\n case 'single_select':\n return (\n <select\n id={field.id}\n value={(value as string) || ''}\n onChange={(e) => handleChange(e.target.value)}\n required={field.required}\n className={baseInputClasses}\n >\n <option value=\"\">Select...</option>\n {field.options?.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n\n case 'multi_select':\n return (\n <select\n id={field.id}\n multiple\n value={(value as string[]) || []}\n onChange={(e) => {\n const selected = Array.from(e.target.selectedOptions, (option) => option.value);\n handleChange(selected);\n }}\n required={field.required}\n className={`${baseInputClasses} min-h-[100px]`}\n >\n {field.options?.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n\n case 'checkbox':\n return (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n id={field.id}\n checked={Boolean(value)}\n onChange={(e) => handleChange(e.target.checked)}\n required={field.required}\n className=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">{field.description}</span>\n </label>\n );\n\n case 'checkbox_group':\n return (\n <div className=\"space-y-2\">\n {field.options?.map((option) => {\n const selectedValues = (value as string[]) || [];\n const isChecked = selectedValues.includes(option.value);\n return (\n <label key={option.value} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={isChecked}\n onChange={(e) => {\n const newValues = e.target.checked\n ? [...selectedValues, option.value]\n : selectedValues.filter((v) => v !== option.value);\n handleChange(newValues);\n }}\n className=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">{option.label}</span>\n </label>\n );\n })}\n </div>\n );\n\n default:\n return (\n <input\n type=\"text\"\n id={field.id}\n value={(value as string) || ''}\n onChange={(e) => handleChange(e.target.value)}\n className={baseInputClasses}\n />\n );\n }\n};\n\n/**\n * Main Form Renderer Component\n */\nexport const FormRenderer: React.FC<FormRendererProps> = ({ form, onSubmit, onCancel, className = '' }) => {\n // Initialize form values with defaults\n const [values, setValues] = useState<Record<string, unknown>>(() => {\n const initial: Record<string, unknown> = {};\n form.fields.forEach((field) => {\n if (field.default_value !== undefined) {\n initial[field.id] = field.default_value;\n }\n });\n return initial;\n });\n\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const handleFieldChange = useCallback((fieldId: string, value: unknown) => {\n setValues((prev) => ({ ...prev, [fieldId]: value }));\n }, []);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n setIsSubmitting(true);\n try {\n await onSubmit(values);\n } finally {\n setIsSubmitting(false);\n }\n },\n [values, onSubmit]\n );\n\n // Calculate grid columns\n const gridCols = form.columns || 1;\n\n return (\n <div className={`border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-800 p-6 ${className}`}>\n {/* Form Header */}\n {(form.title || form.description) && (\n <div className=\"mb-6\">\n {form.title && (\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-gray-100\">{form.title}</h3>\n )}\n {form.description && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{form.description}</p>\n )}\n </div>\n )}\n\n {/* Form Fields */}\n <form onSubmit={handleSubmit}>\n <div\n className=\"grid gap-4\"\n style={{\n gridTemplateColumns: `repeat(${gridCols}, minmax(0, 1fr))`,\n }}\n >\n {form.fields.map((field) => (\n <div\n key={field.id}\n style={{\n gridColumn: field.col_span ? `span ${field.col_span}` : undefined,\n }}\n >\n {field.type !== 'checkbox' && (\n <label\n htmlFor={field.id}\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n >\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <FormFieldRenderer field={field} value={values[field.id]} onChange={handleFieldChange} />\n {field.description && field.type !== 'checkbox' && (\n <p className=\"mt-1 text-xs text-gray-500 dark:text-gray-400\">{field.description}</p>\n )}\n </div>\n ))}\n </div>\n\n {/* Form Actions */}\n <div className=\"mt-6 flex items-center justify-end gap-3\">\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={isSubmitting}\n className=\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md hover:bg-gray-50 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:opacity-50\"\n >\n Cancel\n </button>\n )}\n <button\n type=\"submit\"\n disabled={isSubmitting}\n className=\"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50\"\n >\n {isSubmitting ? 'Submitting...' : form.submit_label || 'Submit'}\n </button>\n </div>\n </form>\n </div>\n );\n};\n\nexport default FormRenderer;\n","'use client';\n\nimport React, { useRef, useCallback, useState, useMemo, useEffect } from 'react';\nimport type {\n A2AChatProps,\n AgentConfig,\n AgentConnectionState,\n} from '../types';\nimport type { Citation, ErrorMetadata, FormRequestMetadata } from '../lib/a2a';\nimport { useAgentContextOptional } from './AgentProvider';\nimport { A2AToCarbonTranslator, createTranslator } from '../lib/translator';\nimport { CitationRenderer } from './renderers/CitationRenderer';\nimport { ErrorRenderer } from './renderers/ErrorRenderer';\nimport { FormRenderer } from './renderers/FormRenderer';\n\n// =============================================================================\n// HELPER UTILITIES\n// =============================================================================\n\nfunction generateUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * Main A2A Chat component\n *\n * Connects to A2A agents and renders chat UI using Carbon AI Chat components.\n *\n * @example\n * // Direct agent config\n * <A2AChat\n * agent={{ id: 'my-agent', name: 'My Agent', url: 'https://...' }}\n * layout=\"sidebar\"\n * />\n *\n * @example\n * // Using AgentProvider context\n * <AgentProvider agents={[...]}>\n * <A2AChat agentId=\"research\" />\n * </AgentProvider>\n *\n * @example\n * // Simple URL-only\n * <A2AChat agentUrl=\"https://my-agent.example.com\" layout=\"fullscreen\" />\n */\nexport function A2AChat({\n // Agent configuration\n agent: agentProp,\n agentId,\n agentUrl,\n apiKey,\n\n // Display options\n layout = 'fullscreen',\n allowLayoutSwitch = false,\n defaultOpen = true,\n className = '',\n agentName,\n agentIconUrl,\n\n // Behavior options\n showThinking = true,\n showChainOfThought = true,\n allowCancel = true,\n extensions,\n\n // Callbacks\n onOpen,\n onClose,\n onSend,\n onResponse,\n onConnectionChange,\n onError,\n onDisconnect,\n\n // Custom renderers\n renderCitations,\n renderError,\n renderForm,\n renderUserDefined,\n}: A2AChatProps) {\n // ---------------------------------------------------------------------------\n // RESOLVE AGENT CONFIG\n // ---------------------------------------------------------------------------\n\n const agentContext = useAgentContextOptional();\n\n const agent = useMemo((): AgentConfig | null => {\n // Priority: direct prop > context lookup > URL-only\n if (agentProp) {\n return agentProp;\n }\n\n if (agentId && agentContext) {\n return agentContext.getAgent(agentId) ?? null;\n }\n\n if (!agentProp && !agentId && agentContext?.currentAgent) {\n return agentContext.currentAgent;\n }\n\n if (agentUrl) {\n return {\n id: 'default',\n name: agentName ?? 'AI Assistant',\n url: agentUrl,\n apiKey,\n iconUrl: agentIconUrl,\n };\n }\n\n return null;\n }, [agentProp, agentId, agentUrl, apiKey, agentName, agentIconUrl, agentContext]);\n\n // ---------------------------------------------------------------------------\n // STATE\n // ---------------------------------------------------------------------------\n\n const [connectionState, setConnectionState] = useState<AgentConnectionState>('disconnected');\n const [isStreaming, setIsStreaming] = useState(false);\n const [currentFormRequest, setCurrentFormRequest] = useState<FormRequestMetadata | null>(null);\n const [pendingTaskId, setPendingTaskId] = useState<string | null>(null);\n const [carbonLoaded, setCarbonLoaded] = useState(false);\n const [CarbonComponents, setCarbonComponents] = useState<{\n ChatCustomElement?: React.ComponentType<any>;\n ChatContainer?: React.ComponentType<any>;\n }>({});\n\n const instanceRef = useRef<any>(null);\n const translatorRef = useRef<A2AToCarbonTranslator | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ---------------------------------------------------------------------------\n // LOAD CARBON COMPONENTS\n // ---------------------------------------------------------------------------\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n import('@carbon/ai-chat')\n .then((mod) => {\n setCarbonComponents({\n ChatCustomElement: mod.ChatCustomElement,\n ChatContainer: mod.ChatContainer,\n });\n setCarbonLoaded(true);\n })\n .catch((err) => {\n console.error('[A2AChat] Failed to load @carbon/ai-chat:', err);\n });\n }\n }, []);\n\n // ---------------------------------------------------------------------------\n // UPDATE CONNECTION STATE\n // ---------------------------------------------------------------------------\n\n useEffect(() => {\n onConnectionChange?.(connectionState);\n }, [connectionState, onConnectionChange]);\n\n // ---------------------------------------------------------------------------\n // MESSAGE HANDLER\n // ---------------------------------------------------------------------------\n\n const handleSendMessage = useCallback(\n async (message: string) => {\n if (!agent) {\n console.error('[A2AChat] No agent configured');\n return;\n }\n\n const instance = instanceRef.current;\n if (!instance) {\n console.error('[A2AChat] Chat instance not ready');\n return;\n }\n\n onSend?.(message);\n setIsStreaming(true);\n setConnectionState('streaming');\n\n // Create translator for this response\n translatorRef.current = createTranslator(\n agent.name,\n agent.iconUrl ?? '/bot.svg'\n );\n\n // Create abort controller\n abortControllerRef.current = new AbortController();\n\n try {\n const response = await fetch('/api/agent/chat', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n agentUrl: agent.url,\n apiKey: agent.apiKey,\n message,\n extensions: extensions ?? agent.extensions,\n }),\n signal: abortControllerRef.current.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Request failed: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n // Process SSE stream\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n if (trimmedLine.startsWith('data: ')) {\n const dataStr = trimmedLine.slice(6);\n if (!dataStr || dataStr === '[DONE]') continue;\n\n try {\n const data = JSON.parse(dataStr);\n if (data.result) {\n const carbonChunks = translatorRef.current?.translateStreamChunk(data.result) ?? [];\n for (const chunk of carbonChunks) {\n await instance.messaging.addMessageChunk(chunk);\n }\n\n // Check for form requests\n if (data.result.status?.state === 'input-required') {\n const formRequest = extractFormRequest(data.result);\n if (formRequest) {\n setCurrentFormRequest(formRequest);\n setPendingTaskId(data.result.taskId);\n }\n }\n }\n } catch (e) {\n console.warn('[A2AChat] Failed to parse SSE data:', e);\n }\n }\n }\n }\n\n setConnectionState('connected');\n onResponse?.(translatorRef.current?.getState?.() ?? {});\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n console.log('[A2AChat] Request cancelled');\n } else {\n console.error('[A2AChat] Error:', error);\n setConnectionState('error');\n onError?.(error as Error);\n }\n } finally {\n setIsStreaming(false);\n abortControllerRef.current = null;\n }\n },\n [agent, extensions, onSend, onResponse, onError]\n );\n\n // ---------------------------------------------------------------------------\n // CANCEL HANDLER\n // ---------------------------------------------------------------------------\n\n const handleCancel = useCallback(() => {\n abortControllerRef.current?.abort();\n setIsStreaming(false);\n setConnectionState('connected');\n }, []);\n\n // ---------------------------------------------------------------------------\n // CUSTOM RESPONSE RENDERER\n // ---------------------------------------------------------------------------\n\n const renderCustomResponse = useCallback(\n (state: any, _instance: any) => {\n const messageItem = state.messageItem;\n const userDefined = messageItem?.user_defined;\n\n if (!userDefined) return null;\n\n // Custom renderer provided by consumer\n if (renderUserDefined) {\n return renderUserDefined(userDefined, messageItem);\n }\n\n // Text with citations\n if (userDefined.type === 'text_with_citations') {\n if (renderCitations) {\n return renderCitations(userDefined.citations || [], userDefined.text);\n }\n return (\n <CitationRenderer text={userDefined.text} citations={userDefined.citations || []} />\n );\n }\n\n // Sources list\n if (userDefined.type === 'sources_list' && userDefined.citations) {\n const citations = userDefined.citations as Citation[];\n if (citations.length === 0) return null;\n\n const uniqueCitations = citations.filter(\n (c, i, arr) => c.url && arr.findIndex((x) => x.url === c.url) === i\n );\n\n return (\n <div className=\"a2a-sources-list\">\n <h4 className=\"a2a-sources-list__title\">Sources</h4>\n <ol className=\"a2a-sources-list__items\">\n {uniqueCitations.map((citation, idx) => (\n <li key={idx} className=\"a2a-sources-list__item\">\n <a href={citation.url ?? '#'} target=\"_blank\" rel=\"noopener noreferrer\">\n {citation.title || citation.url}\n </a>\n </li>\n ))}\n </ol>\n </div>\n );\n }\n\n // Error\n if (userDefined.type === 'error' && userDefined.error) {\n if (renderError) {\n return renderError(userDefined.error as ErrorMetadata);\n }\n return <ErrorRenderer error={userDefined.error as ErrorMetadata} />;\n }\n\n return null;\n },\n [renderCitations, renderError, renderUserDefined]\n );\n\n // ---------------------------------------------------------------------------\n // FORM HANDLERS\n // ---------------------------------------------------------------------------\n\n const handleFormSubmit = useCallback(\n async (values: Record<string, unknown>) => {\n if (!pendingTaskId) return;\n\n setCurrentFormRequest(null);\n const taskId = pendingTaskId;\n setPendingTaskId(null);\n\n const formResponseMessage = JSON.stringify({\n type: 'form_response',\n taskId,\n values,\n });\n\n await handleSendMessage(formResponseMessage);\n },\n [pendingTaskId, handleSendMessage]\n );\n\n const handleFormCancel = useCallback(() => {\n setCurrentFormRequest(null);\n setPendingTaskId(null);\n }, []);\n\n // ---------------------------------------------------------------------------\n // AFTER RENDER HANDLER\n // ---------------------------------------------------------------------------\n\n const handleAfterRender = useCallback((instance: any) => {\n instanceRef.current = instance;\n console.log('[A2AChat] Chat instance ready');\n }, []);\n\n // ---------------------------------------------------------------------------\n // RENDER\n // ---------------------------------------------------------------------------\n\n if (!agent) {\n return (\n <div className={`a2a-chat a2a-chat--error ${className}`}>\n <p>No agent configured. Provide `agent`, `agentId`, or `agentUrl` prop.</p>\n </div>\n );\n }\n\n if (!carbonLoaded) {\n return (\n <div className={`a2a-chat a2a-chat--loading ${className}`}>\n <div className=\"a2a-chat__spinner\" />\n </div>\n );\n }\n\n const { ChatCustomElement, ChatContainer } = CarbonComponents;\n\n // Form overlay\n const formOverlay = currentFormRequest && (\n <div className=\"a2a-chat__form-overlay\">\n {renderForm ? (\n renderForm(currentFormRequest, handleFormSubmit)\n ) : (\n <FormRenderer\n form={currentFormRequest}\n onSubmit={handleFormSubmit}\n onCancel={handleFormCancel}\n />\n )}\n </div>\n );\n\n // Render based on layout\n if (layout === 'float' && ChatContainer) {\n return (\n <div className={`a2a-chat a2a-chat--float ${className}`}>\n <ChatContainer\n {...({\n debug: false,\n aiEnabled: true,\n injectCarbonTheme: 'white',\n } as any)}\n header={{\n title: agent?.name ?? 'AI Assistant',\n }}\n launcher={{\n isOn: true,\n }}\n onAfterRender={handleAfterRender}\n renderUserDefinedResponse={renderCustomResponse}\n messaging={{\n skipWelcome: true,\n customSendMessage: async (\n request: any,\n _options: any,\n _instance: any\n ) => {\n const text = request?.input?.text;\n if (text) {\n await handleSendMessage(text);\n }\n },\n } as any}\n />\n {formOverlay}\n </div>\n );\n }\n\n if (ChatCustomElement) {\n return (\n <div className={`a2a-chat a2a-chat--${layout} ${className}`}>\n <ChatCustomElement\n {...({\n className: 'a2a-chat__element',\n debug: false,\n aiEnabled: true,\n openChatByDefault: true,\n injectCarbonTheme: 'white',\n } as any)}\n header={{\n title: agent?.name ?? 'AI Assistant',\n showMinimize: layout !== 'fullscreen',\n }}\n launcher={{\n isOn: layout === 'float',\n }}\n layout={{\n showFrame: layout === 'float',\n showCloseAndRestartButton: layout !== 'fullscreen',\n }}\n onAfterRender={handleAfterRender}\n renderUserDefinedResponse={renderCustomResponse}\n messaging={{\n skipWelcome: true,\n messageLoadingIndicatorTimeoutSecs: 0,\n customSendMessage: async (\n request: any,\n _options: any,\n _instance: any\n ) => {\n const text = request?.input?.text;\n if (text) {\n await handleSendMessage(text);\n }\n },\n } as any}\n />\n {formOverlay}\n </div>\n );\n }\n\n return (\n <div className={`a2a-chat a2a-chat--loading ${className}`}>\n <div className=\"a2a-chat__spinner\" />\n </div>\n );\n}\n\n// Helper to extract form request from chunk\nfunction extractFormRequest(chunk: any): FormRequestMetadata | null {\n const metadata = chunk.status?.message?.metadata;\n if (!metadata) return null;\n\n const formData = metadata['https://a2a-extensions.agentstack.beeai.dev/ui/form-request/v1'];\n if (!formData) return null;\n\n return formData as FormRequestMetadata;\n}\n\nexport default A2AChat;\n","'use client';\n\nimport React from 'react';\nimport type { AgentConfig } from '../types';\n\nexport interface AgentSwitcherProps {\n /** Available agents */\n agents: AgentConfig[];\n\n /** Currently selected agent ID */\n currentAgentId?: string;\n\n /** Called when user selects an agent */\n onSelect: (agentId: string) => void;\n\n /** Variant style */\n variant?: 'dropdown' | 'tabs' | 'cards';\n\n /** Show agent descriptions */\n showDescriptions?: boolean;\n\n /** Show agent icons */\n showIcons?: boolean;\n\n /** Custom class name */\n className?: string;\n\n /** Disabled state */\n disabled?: boolean;\n\n /** Label text */\n label?: string;\n}\n\n/**\n * Component for switching between multiple agents\n *\n * @example\n * const { agents, currentAgent, selectAgent } = useAgentContext();\n *\n * <AgentSwitcher\n * agents={agents}\n * currentAgentId={currentAgent?.id}\n * onSelect={selectAgent}\n * />\n */\nexport function AgentSwitcher({\n agents,\n currentAgentId,\n onSelect,\n variant = 'dropdown',\n showDescriptions = false,\n showIcons = true,\n className = '',\n disabled = false,\n label = 'Select Agent',\n}: AgentSwitcherProps) {\n if (agents.length === 0) {\n return null;\n }\n\n if (variant === 'tabs') {\n return (\n <div className={`a2a-agent-switcher a2a-agent-switcher--tabs ${className}`}>\n <div className=\"a2a-agent-switcher__tabs\" role=\"tablist\" aria-label={label}>\n {agents.map((agent) => (\n <button\n key={agent.id}\n role=\"tab\"\n aria-selected={agent.id === currentAgentId}\n className={`a2a-agent-switcher__tab ${\n agent.id === currentAgentId ? 'a2a-agent-switcher__tab--active' : ''\n }`}\n onClick={() => onSelect(agent.id)}\n disabled={disabled}\n >\n {showIcons && agent.iconUrl && (\n <img\n src={agent.iconUrl}\n alt=\"\"\n className=\"a2a-agent-switcher__icon\"\n width={20}\n height={20}\n />\n )}\n <span>{agent.name}</span>\n </button>\n ))}\n </div>\n </div>\n );\n }\n\n if (variant === 'cards') {\n return (\n <div className={`a2a-agent-switcher a2a-agent-switcher--cards ${className}`}>\n <fieldset disabled={disabled}>\n <legend className=\"a2a-agent-switcher__label\">{label}</legend>\n <div className=\"a2a-agent-switcher__cards\">\n {agents.map((agent) => (\n <button\n key={agent.id}\n className={`a2a-agent-switcher__card ${\n agent.id === currentAgentId ? 'a2a-agent-switcher__card--active' : ''\n }`}\n onClick={() => onSelect(agent.id)}\n >\n {showIcons && agent.iconUrl && (\n <img\n src={agent.iconUrl}\n alt=\"\"\n className=\"a2a-agent-switcher__card-icon\"\n width={32}\n height={32}\n />\n )}\n <div className=\"a2a-agent-switcher__card-content\">\n <span className=\"a2a-agent-switcher__card-name\">{agent.name}</span>\n {showDescriptions && agent.description && (\n <span className=\"a2a-agent-switcher__card-description\">{agent.description}</span>\n )}\n </div>\n </button>\n ))}\n </div>\n </fieldset>\n </div>\n );\n }\n\n // Default: dropdown\n return (\n <div className={`a2a-agent-switcher a2a-agent-switcher--dropdown ${className}`}>\n <label className=\"a2a-agent-switcher__label\">\n {label}\n <select\n value={currentAgentId ?? ''}\n onChange={(e) => onSelect(e.target.value)}\n disabled={disabled}\n className=\"a2a-agent-switcher__select\"\n >\n {agents.map((agent) => (\n <option key={agent.id} value={agent.id}>\n {agent.name}\n </option>\n ))}\n </select>\n </label>\n </div>\n );\n}\n\nexport default AgentSwitcher;\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport type { AgentConfig, AgentState, AgentConnectionState } from '../types';\nimport { useAgentContextOptional } from '../components/AgentProvider';\nimport { A2AToCarbonTranslator, createTranslator } from '../lib/translator';\n\nexport interface UseA2AAgentOptions {\n /** Agent configuration (or use agentId with AgentProvider) */\n agent?: AgentConfig;\n\n /** Agent ID to look up from context */\n agentId?: string;\n\n /** Auto-connect on mount */\n autoConnect?: boolean;\n\n /** Callbacks */\n onConnect?: () => void;\n onDisconnect?: () => void;\n onError?: (error: Error) => void;\n onMessage?: (message: any) => void;\n}\n\nexport interface UseA2AAgentReturn {\n /** Current agent configuration */\n agent: AgentConfig | null;\n\n /** Connection state */\n state: AgentState;\n\n /** Send a message to the agent */\n sendMessage: (message: string) => Promise<any>;\n\n /** Cancel current streaming response */\n cancelStream: () => void;\n\n /** Disconnect from agent */\n disconnect: () => void;\n\n /** Reconnect to agent */\n reconnect: () => void;\n\n /** Clear conversation history */\n clearHistory: () => void;\n\n /** Whether currently streaming */\n isStreaming: boolean;\n\n /** Whether connected */\n isConnected: boolean;\n\n /** Last error */\n error: Error | null;\n}\n\n/**\n * Hook for interacting with an A2A agent programmatically\n *\n * @example\n * // With direct config\n * const { sendMessage, isStreaming } = useA2AAgent({\n * agent: { id: 'my-agent', name: 'My Agent', url: 'https://...' }\n * });\n *\n * @example\n * // With context provider\n * const { sendMessage } = useA2AAgent({ agentId: 'research-agent' });\n */\nexport function useA2AAgent(options: UseA2AAgentOptions = {}): UseA2AAgentReturn {\n const { agent: agentProp, agentId, autoConnect = false, onConnect, onDisconnect, onError, onMessage } = options;\n\n const agentContext = useAgentContextOptional();\n\n // Resolve agent config\n const agent = agentProp ?? (agentId ? agentContext?.getAgent(agentId) : agentContext?.currentAgent) ?? null;\n\n // State\n const [connectionState, setConnectionState] = useState<AgentConnectionState>('disconnected');\n const [isStreaming, setIsStreaming] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [taskId, setTaskId] = useState<string | undefined>();\n const [contextId, setContextId] = useState<string | undefined>();\n\n // Refs\n const abortControllerRef = useRef<AbortController | null>(null);\n const translatorRef = useRef<A2AToCarbonTranslator | null>(null);\n const historyRef = useRef<any[]>([]);\n\n // Send message\n const sendMessage = useCallback(\n async (message: string) => {\n if (!agent) {\n const err = new Error('No agent configured');\n setError(err);\n onError?.(err);\n throw err;\n }\n\n setIsStreaming(true);\n setConnectionState('streaming');\n setError(null);\n\n translatorRef.current = createTranslator(agent.name, agent.iconUrl);\n abortControllerRef.current = new AbortController();\n\n try {\n const response = await fetch('/api/agent/chat', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n agentUrl: agent.url,\n apiKey: agent.apiKey,\n message,\n extensions: agent.extensions,\n }),\n signal: abortControllerRef.current.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Request failed: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n let result: any = null;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.trim().startsWith('data: ')) {\n const dataStr = line.trim().slice(6);\n if (!dataStr || dataStr === '[DONE]') continue;\n\n try {\n const data = JSON.parse(dataStr);\n if (data.result) {\n result = data.result;\n setTaskId(data.result.taskId);\n setContextId(data.result.contextId);\n onMessage?.(data.result);\n }\n } catch (e) {\n // Skip parse errors\n }\n }\n }\n }\n\n setConnectionState('connected');\n onConnect?.();\n return result;\n } catch (err) {\n if ((err as Error).name !== 'AbortError') {\n setError(err as Error);\n setConnectionState('error');\n onError?.(err as Error);\n }\n throw err;\n } finally {\n setIsStreaming(false);\n abortControllerRef.current = null;\n }\n },\n [agent, onConnect, onError, onMessage]\n );\n\n // Cancel stream\n const cancelStream = useCallback(() => {\n abortControllerRef.current?.abort();\n setIsStreaming(false);\n setConnectionState('connected');\n }, []);\n\n // Disconnect\n const disconnect = useCallback(() => {\n cancelStream();\n setConnectionState('disconnected');\n setTaskId(undefined);\n setContextId(undefined);\n onDisconnect?.();\n }, [cancelStream, onDisconnect]);\n\n // Reconnect\n const reconnect = useCallback(() => {\n disconnect();\n setConnectionState('connecting');\n // The next sendMessage will establish connection\n setConnectionState('connected');\n }, [disconnect]);\n\n // Clear history\n const clearHistory = useCallback(() => {\n historyRef.current = [];\n setTaskId(undefined);\n setContextId(undefined);\n }, []);\n\n // Auto-connect\n useEffect(() => {\n if (autoConnect && agent && connectionState === 'disconnected') {\n setConnectionState('connected');\n onConnect?.();\n }\n }, [autoConnect, agent, connectionState, onConnect]);\n\n return {\n agent,\n state: {\n connectionState,\n error: error ?? undefined,\n taskId,\n contextId,\n },\n sendMessage,\n cancelStream,\n disconnect,\n reconnect,\n clearHistory,\n isStreaming,\n isConnected: connectionState === 'connected' || connectionState === 'streaming',\n error,\n };\n}\n\nexport default useA2AAgent;\n","'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport type { AgentConfig } from '../types';\n\nexport interface UseMultiAgentOptions {\n /** Initial agents to register */\n agents?: AgentConfig[];\n\n /** Default agent ID */\n defaultAgentId?: string;\n\n /** Called when agent changes */\n onAgentChange?: (agent: AgentConfig) => void;\n}\n\nexport interface UseMultiAgentReturn {\n /** All registered agents */\n agents: AgentConfig[];\n\n /** Currently active agent */\n currentAgent: AgentConfig | null;\n\n /** Switch to a different agent */\n switchAgent: (agentId: string) => void;\n\n /** Register a new agent */\n registerAgent: (agent: AgentConfig) => void;\n\n /** Unregister an agent */\n unregisterAgent: (agentId: string) => void;\n\n /** Update an existing agent's config */\n updateAgent: (agentId: string, updates: Partial<AgentConfig>) => void;\n\n /** Get agent by ID */\n getAgent: (agentId: string) => AgentConfig | undefined;\n\n /** Check if agent exists */\n hasAgent: (agentId: string) => boolean;\n}\n\n/**\n * Hook for managing multiple agents without using AgentProvider\n *\n * @example\n * const { currentAgent, switchAgent, agents } = useMultiAgent({\n * agents: [\n * { id: 'research', name: 'Research Agent', url: '...' },\n * { id: 'code', name: 'Code Agent', url: '...' },\n * ],\n * defaultAgentId: 'research'\n * });\n */\nexport function useMultiAgent(options: UseMultiAgentOptions = {}): UseMultiAgentReturn {\n const { agents: initialAgents = [], defaultAgentId, onAgentChange } = options;\n\n const [agents, setAgents] = useState<AgentConfig[]>(initialAgents);\n const [currentAgentId, setCurrentAgentId] = useState<string | null>(\n defaultAgentId ?? initialAgents[0]?.id ?? null\n );\n\n const currentAgent = useMemo(\n () => agents.find((a) => a.id === currentAgentId) ?? null,\n [agents, currentAgentId]\n );\n\n const switchAgent = useCallback(\n (agentId: string) => {\n const agent = agents.find((a) => a.id === agentId);\n if (agent) {\n setCurrentAgentId(agentId);\n onAgentChange?.(agent);\n } else {\n console.warn(`[useMultiAgent] Agent \"${agentId}\" not found`);\n }\n },\n [agents, onAgentChange]\n );\n\n const registerAgent = useCallback((agent: AgentConfig) => {\n setAgents((prev) => {\n if (prev.some((a) => a.id === agent.id)) {\n console.warn(`[useMultiAgent] Agent \"${agent.id}\" already exists, updating`);\n return prev.map((a) => (a.id === agent.id ? agent : a));\n }\n return [...prev, agent];\n });\n }, []);\n\n const unregisterAgent = useCallback(\n (agentId: string) => {\n setAgents((prev) => prev.filter((a) => a.id !== agentId));\n if (currentAgentId === agentId) {\n setCurrentAgentId(agents[0]?.id ?? null);\n }\n },\n [currentAgentId, agents]\n );\n\n const updateAgent = useCallback((agentId: string, updates: Partial<AgentConfig>) => {\n setAgents((prev) =>\n prev.map((a) => (a.id === agentId ? { ...a, ...updates, id: agentId } : a))\n );\n }, []);\n\n const getAgent = useCallback((agentId: string) => agents.find((a) => a.id === agentId), [agents]);\n\n const hasAgent = useCallback((agentId: string) => agents.some((a) => a.id === agentId), [agents]);\n\n return {\n agents,\n currentAgent,\n switchAgent,\n registerAgent,\n unregisterAgent,\n updateAgent,\n getAgent,\n hasAgent,\n };\n}\n\nexport default useMultiAgent;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/AgentProvider.tsx","../src/lib/a2a/extension-uris.ts","../src/lib/a2a/extension-handler.ts","../src/lib/a2a/client.ts","../src/lib/a2a/ui-extension-parser.ts","../src/lib/translator/a2a-to-carbon.ts","../src/components/renderers/citation-utils.ts","../src/components/renderers/CitationRenderer.tsx","../src/components/renderers/ErrorRenderer.tsx","../src/components/renderers/FormRenderer.tsx","../src/components/A2AChat.tsx","../src/components/AgentSwitcher.tsx","../src/hooks/useA2AAgent.ts","../src/hooks/useMultiAgent.ts"],"names":["createContext","useContext","useMemo","useState","useEffect","useCallback","jsx","ChainOfThoughtStepStatus","ReasoningStepOpenState","UserType","jsxs","useRef","extractFormRequest"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n useEffect,\n type ReactNode,\n} from 'react';\nimport type { AgentConfig, AgentProviderProps, AgentContextValue } from '../types';\n\nconst AgentContext = createContext<AgentContextValue | null>(null);\n\n/**\n * Hook to access agent context\n * Must be used within an AgentProvider\n */\nexport function useAgentContext(): AgentContextValue {\n const context = useContext(AgentContext);\n if (!context) {\n throw new Error('useAgentContext must be used within an AgentProvider');\n }\n return context;\n}\n\n/**\n * Optional hook that returns null if not within provider\n * Useful for components that work both with and without provider\n */\nexport function useAgentContextOptional(): AgentContextValue | null {\n return useContext(AgentContext);\n}\n\n/**\n * Provider for managing agent configurations\n *\n * @example\n * // Single agent\n * <AgentProvider agent={{ id: 'main', name: 'Assistant', url: '...' }}>\n * <App />\n * </AgentProvider>\n *\n * @example\n * // Multiple agents\n * <AgentProvider\n * agents={[\n * { id: 'research', name: 'Research', url: '...' },\n * { id: 'code', name: 'Coder', url: '...' },\n * ]}\n * defaultAgentId=\"research\"\n * persistSelection\n * >\n * <App />\n * </AgentProvider>\n */\nexport function AgentProvider({\n children,\n agent,\n agents: agentsProp,\n registry,\n defaultAgentId,\n persistSelection = false,\n storageKey = 'a2a-chat-selected-agent',\n}: AgentProviderProps): ReactNode {\n // Build agents list from various input formats\n const agents = useMemo(() => {\n if (registry) {\n return Object.values(registry.agents);\n }\n if (agentsProp) {\n return agentsProp;\n }\n if (agent) {\n return [agent];\n }\n return [];\n }, [agent, agentsProp, registry]);\n\n // Determine initial agent\n const getInitialAgentId = (): string | null => {\n // Check persisted selection\n if (persistSelection && typeof window !== 'undefined') {\n const saved = localStorage.getItem(storageKey);\n if (saved && agents.some((a) => a.id === saved)) {\n return saved;\n }\n }\n\n // Use default\n if (defaultAgentId && agents.some((a) => a.id === defaultAgentId)) {\n return defaultAgentId;\n }\n\n if (registry?.defaultAgentId && agents.some((a) => a.id === registry.defaultAgentId)) {\n return registry.defaultAgentId;\n }\n\n // Fall back to first agent\n return agents[0]?.id ?? null;\n };\n\n const [currentAgentId, setCurrentAgentId] = useState<string | null>(getInitialAgentId);\n\n // Persist selection\n useEffect(() => {\n if (persistSelection && currentAgentId && typeof window !== 'undefined') {\n localStorage.setItem(storageKey, currentAgentId);\n }\n }, [currentAgentId, persistSelection, storageKey]);\n\n const currentAgent = useMemo(\n () => agents.find((a) => a.id === currentAgentId) ?? null,\n [agents, currentAgentId]\n );\n\n const selectAgent = useCallback(\n (agentId: string) => {\n if (agents.some((a) => a.id === agentId)) {\n setCurrentAgentId(agentId);\n } else {\n console.warn(`[AgentProvider] Agent \"${agentId}\" not found in registry`);\n }\n },\n [agents]\n );\n\n const getAgent = useCallback((agentId: string) => agents.find((a) => a.id === agentId), [agents]);\n\n const hasAgent = useCallback((agentId: string) => agents.some((a) => a.id === agentId), [agents]);\n\n const value: AgentContextValue = useMemo(\n () => ({\n currentAgent,\n agents,\n selectAgent,\n getAgent,\n hasAgent,\n }),\n [currentAgent, agents, selectAgent, getAgent, hasAgent]\n );\n\n return <AgentContext.Provider value={value}>{children}</AgentContext.Provider>;\n}\n\nexport default AgentProvider;\n","/**\n * A2A Extension URIs\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/\n */\n\n// Service Extension URIs (Platform -> Agent)\nexport const EXTENSION_URIS = {\n // Service Extensions\n LLM: 'https://a2a-extensions.agentstack.beeai.dev/services/llm/v1',\n EMBEDDING: 'https://a2a-extensions.agentstack.beeai.dev/services/embedding/v1',\n MCP: 'https://a2a-extensions.agentstack.beeai.dev/services/mcp/v1',\n OAUTH_PROVIDER: 'https://a2a-extensions.agentstack.beeai.dev/services/oauth-provider/v1',\n SECRETS: 'https://a2a-extensions.agentstack.beeai.dev/services/secrets/v1',\n PLATFORM_API: 'https://a2a-extensions.agentstack.beeai.dev/services/platform-api/v1',\n FORM_SERVICE: 'https://a2a-extensions.agentstack.beeai.dev/services/form/v1',\n\n // UI Extensions (Agent -> Platform)\n CITATION: 'https://a2a-extensions.agentstack.beeai.dev/ui/citation/v1',\n TRAJECTORY: 'https://a2a-extensions.agentstack.beeai.dev/ui/trajectory/v1',\n ERROR: 'https://a2a-extensions.agentstack.beeai.dev/ui/error/v1',\n FORM_REQUEST: 'https://a2a-extensions.agentstack.beeai.dev/ui/form-request/v1',\n CANVAS: 'https://a2a-extensions.agentstack.beeai.dev/ui/canvas/v1',\n AGENT_DETAIL: 'https://a2a-extensions.agentstack.beeai.dev/ui/agent-detail/v1',\n OAUTH_REQUEST: 'https://a2a-extensions.agentstack.beeai.dev/ui/oauth/v1',\n SETTINGS: 'https://a2a-extensions.agentstack.beeai.dev/ui/settings/v1',\n} as const\n\nexport type ExtensionUri = typeof EXTENSION_URIS[keyof typeof EXTENSION_URIS]\n","/**\n * Extension Handler for agent-client-zero\n *\n * This module handles:\n * 1. Parsing agent card to extract extension demands\n * 2. Building metadata with fulfillments for A2A requests\n * 3. Parsing UI extension metadata from agent responses\n *\n * Reference: https://raw.githubusercontent.com/i-am-bee/agentstack/main/docs/development/custom-ui/client-sdk/extensions.mdx\n */\n\nimport { EXTENSION_URIS } from './extension-uris'\nimport type {\n LLMDemands,\n LLMFulfillments,\n EmbeddingDemands,\n EmbeddingFulfillments,\n MCPDemands,\n MCPFulfillments,\n SecretDemands,\n SecretFulfillments,\n SettingsDemands,\n SettingsFulfillments,\n FormDemands,\n FormFulfillments,\n OAuthDemands,\n OAuthFulfillments,\n ExtractedDemands,\n Fulfillments,\n} from './extension-types'\nimport type { AgentCard } from './client'\n\n/**\n * Platform configuration for fulfilling extension demands\n * Users configure these values to provide services to agents\n */\nexport interface PlatformConfig {\n // LLM Configuration\n llm?: {\n apiBase: string // e.g., 'http://192.168.0.58:11434/v1'\n apiKey: string // API key for the LLM provider\n defaultModel: string // e.g., 'qwen3-next:80b'\n }\n\n // Embedding Configuration\n embedding?: {\n apiBase: string\n apiKey: string\n defaultModel: string\n }\n\n // MCP Configuration\n mcp?: {\n servers: Record<string, { url: string }>\n }\n\n // OAuth Configuration\n oauth?: {\n redirectUri: string\n providers: Record<string, { accessToken: string }>\n }\n\n // Secrets (user-provided API keys, etc.)\n secrets?: Record<string, string>\n\n // Settings values\n settings?: Record<string, unknown>\n}\n\n/**\n * Extract service extension demands from agent card capabilities\n *\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/handle-agent-card.ts\n */\nexport function extractDemandsFromAgentCard(agentCard: AgentCard): ExtractedDemands {\n const extensions = agentCard.extensions || []\n\n const demands: ExtractedDemands = {\n llmDemands: null,\n embeddingDemands: null,\n mcpDemands: null,\n oauthDemands: null,\n settingsDemands: null,\n secretDemands: null,\n formDemands: null,\n }\n\n for (const extUri of extensions) {\n // Parse extension URI to extract demands\n // Format: \"uri#json_encoded_params\" or just \"uri\"\n const hashIndex = extUri.indexOf('#')\n const uri = hashIndex >= 0 ? extUri.substring(0, hashIndex) : extUri\n const paramsStr = hashIndex >= 0 ? extUri.substring(hashIndex + 1) : null\n\n let params: Record<string, unknown> = {}\n if (paramsStr) {\n try {\n params = JSON.parse(decodeURIComponent(paramsStr))\n } catch {\n console.warn(`Failed to parse extension params for ${uri}:`, paramsStr)\n }\n }\n\n switch (uri) {\n case EXTENSION_URIS.LLM:\n demands.llmDemands = params as unknown as LLMDemands\n break\n case EXTENSION_URIS.EMBEDDING:\n demands.embeddingDemands = params as unknown as EmbeddingDemands\n break\n case EXTENSION_URIS.MCP:\n demands.mcpDemands = params as unknown as MCPDemands\n break\n case EXTENSION_URIS.OAUTH_PROVIDER:\n demands.oauthDemands = params as unknown as OAuthDemands\n break\n case EXTENSION_URIS.SETTINGS:\n demands.settingsDemands = params as unknown as SettingsDemands\n break\n case EXTENSION_URIS.SECRETS:\n demands.secretDemands = params as unknown as SecretDemands\n break\n case EXTENSION_URIS.FORM_SERVICE:\n demands.formDemands = params as unknown as FormDemands\n break\n }\n }\n\n return demands\n}\n\n/**\n * Build fulfillment functions based on platform configuration\n */\nexport function buildFulfillments(config: PlatformConfig): Partial<Fulfillments> {\n const fulfillments: Partial<Fulfillments> = {}\n\n // LLM Fulfillment\n if (config.llm) {\n const llmConfig = config.llm\n fulfillments.llm = async (demands: LLMDemands): Promise<LLMFulfillments> => {\n const result: LLMFulfillments['llm_fulfillments'] = {}\n\n for (const [key, demand] of Object.entries(demands.llm_demands)) {\n // Use suggested model if available, otherwise use default\n const model = demand.suggested?.[0] || llmConfig.defaultModel\n\n result[key] = {\n identifier: 'custom_llm',\n api_base: llmConfig.apiBase,\n api_key: llmConfig.apiKey,\n api_model: model,\n }\n }\n\n return { llm_fulfillments: result }\n }\n }\n\n // Embedding Fulfillment\n if (config.embedding) {\n const embeddingConfig = config.embedding\n fulfillments.embedding = async (demands: EmbeddingDemands): Promise<EmbeddingFulfillments> => {\n const result: EmbeddingFulfillments['embedding_fulfillments'] = {}\n\n for (const [key, demand] of Object.entries(demands.embedding_demands)) {\n const model = demand.suggested?.[0] || embeddingConfig.defaultModel\n\n result[key] = {\n api_base: embeddingConfig.apiBase,\n api_key: embeddingConfig.apiKey,\n api_model: model,\n }\n }\n\n return { embedding_fulfillments: result }\n }\n }\n\n // MCP Fulfillment\n if (config.mcp) {\n const mcpConfig = config.mcp\n fulfillments.mcp = async (demands: MCPDemands): Promise<MCPFulfillments> => {\n const result: MCPFulfillments['mcp_fulfillments'] = {}\n\n for (const [key, demand] of Object.entries(demands.mcp_demands)) {\n const serverName = demand.suggested?.[0]\n if (serverName && mcpConfig.servers[serverName]) {\n result[key] = mcpConfig.servers[serverName]\n }\n }\n\n return { mcp_fulfillments: result }\n }\n }\n\n // Secrets Fulfillment\n if (config.secrets) {\n const secretsConfig = config.secrets\n fulfillments.secrets = async (demands: SecretDemands): Promise<SecretFulfillments> => {\n const result: SecretFulfillments['secret_fulfillments'] = {}\n\n for (const key of Object.keys(demands.secret_demands)) {\n if (secretsConfig[key]) {\n result[key] = { secret: secretsConfig[key] }\n }\n }\n\n return { secret_fulfillments: result }\n }\n }\n\n // Settings Fulfillment\n if (config.settings) {\n const settingsConfig = config.settings\n fulfillments.settings = async (_demands: SettingsDemands): Promise<SettingsFulfillments> => {\n return { values: settingsConfig }\n }\n }\n\n // OAuth Fulfillment\n if (config.oauth) {\n const oauthConfig = config.oauth\n fulfillments.oauth = async (demands: OAuthDemands): Promise<OAuthFulfillments> => {\n const result: OAuthFulfillments['oauth_fulfillments'] = {}\n\n for (const key of Object.keys(demands.oauth_demands)) {\n if (oauthConfig.providers[key]) {\n result[key] = { access_token: oauthConfig.providers[key].accessToken }\n }\n }\n\n return { oauth_fulfillments: result }\n }\n\n fulfillments.oauthRedirectUri = () => oauthConfig.redirectUri\n } else {\n fulfillments.oauthRedirectUri = () => null\n }\n\n // Form Fulfillment (typically handled by UI, return empty)\n fulfillments.form = async (_demands: FormDemands): Promise<FormFulfillments> => {\n return { values: {} }\n }\n\n // Context Token (placeholder - implement if using AgentStack platform)\n fulfillments.getContextToken = () => ({ token: '', expires_at: null })\n\n return fulfillments\n}\n\n/**\n * Resolve metadata to send with A2A requests\n * This builds the metadata object that fulfills agent extension demands\n *\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/handle-agent-card.ts#L60-L100\n */\nexport async function resolveMetadata(\n demands: ExtractedDemands,\n fulfillments: Partial<Fulfillments>\n): Promise<Record<string, unknown>> {\n const metadata: Record<string, unknown> = {}\n\n // Fulfill LLM demands\n if (demands.llmDemands && fulfillments.llm) {\n const llmFulfillment = await fulfillments.llm(demands.llmDemands)\n metadata[EXTENSION_URIS.LLM] = llmFulfillment\n }\n\n // Fulfill Embedding demands\n if (demands.embeddingDemands && fulfillments.embedding) {\n const embeddingFulfillment = await fulfillments.embedding(demands.embeddingDemands)\n metadata[EXTENSION_URIS.EMBEDDING] = embeddingFulfillment\n }\n\n // Fulfill MCP demands\n if (demands.mcpDemands && fulfillments.mcp) {\n const mcpFulfillment = await fulfillments.mcp(demands.mcpDemands)\n metadata[EXTENSION_URIS.MCP] = mcpFulfillment\n }\n\n // Fulfill OAuth demands\n if (demands.oauthDemands && fulfillments.oauth) {\n const oauthFulfillment = await fulfillments.oauth(demands.oauthDemands)\n metadata[EXTENSION_URIS.OAUTH_PROVIDER] = oauthFulfillment\n }\n\n // Fulfill Settings demands\n if (demands.settingsDemands && fulfillments.settings) {\n const settingsFulfillment = await fulfillments.settings(demands.settingsDemands)\n metadata[EXTENSION_URIS.SETTINGS] = settingsFulfillment\n }\n\n // Fulfill Secrets demands\n if (demands.secretDemands && fulfillments.secrets) {\n const secretsFulfillment = await fulfillments.secrets(demands.secretDemands)\n metadata[EXTENSION_URIS.SECRETS] = secretsFulfillment\n }\n\n // Fulfill Form demands\n if (demands.formDemands && fulfillments.form) {\n const formFulfillment = await fulfillments.form(demands.formDemands)\n metadata[EXTENSION_URIS.FORM_SERVICE] = formFulfillment\n }\n\n // Add OAuth redirect URI if configured\n if (fulfillments.oauthRedirectUri) {\n const redirectUri = fulfillments.oauthRedirectUri()\n if (redirectUri) {\n metadata[EXTENSION_URIS.OAUTH_REQUEST] = { redirect_uri: redirectUri }\n }\n }\n\n // Add Platform API token if available\n if (fulfillments.getContextToken) {\n const token = fulfillments.getContextToken()\n if (token.token) {\n metadata[EXTENSION_URIS.PLATFORM_API] = { context_token: token.token }\n }\n }\n\n return metadata\n}\n\n/**\n * Main handler function - combines extraction and resolution\n *\n * Usage:\n * ```typescript\n * const { demands, resolveMetadata } = handleAgentCard(agentCard);\n * const metadata = await resolveMetadata(fulfillments);\n * await client.sendMessage(message, metadata);\n * ```\n */\nexport function handleAgentCard(agentCard: AgentCard) {\n const demands = extractDemandsFromAgentCard(agentCard)\n\n return {\n demands,\n resolveMetadata: (fulfillments: Partial<Fulfillments>) => resolveMetadata(demands, fulfillments),\n }\n}\n\n// Re-export types for convenience\nexport type { AgentCard } from './client'\n","import {\n extractDemandsFromAgentCard,\n buildFulfillments,\n resolveMetadata,\n type PlatformConfig,\n} from './extension-handler'\nimport type { ExtractedDemands, Fulfillments } from './extension-types'\n\n/**\n * Generate a UUID v4 string with cross-browser compatibility\n * Falls back to crypto.getRandomValues() if crypto.randomUUID() is unavailable\n */\nfunction generateUUID(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n // Fallback using crypto.getRandomValues() for broader browser support\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 15) >> (c === 'x' ? 0 : 3);\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n\nexport interface AgentCard {\n name: string\n url: string\n description?: string\n skills?: Array<{ id: string; name: string; description: string }>\n securitySchemes?: Record<string, any>\n capabilities?: {\n streaming?: boolean\n }\n extensions?: string[]\n}\n\n// Extension configuration for A2A requests\nexport interface A2AExtensionConfig {\n // Settings extension configuration (for BeeAI/AgentStack compatibility)\n settings?: {\n thinking_group?: {\n thinking?: boolean\n }\n [key: string]: unknown\n }\n // Other extensions can be added here\n [key: string]: unknown\n}\n\n// Configuration options for the A2A client\nexport interface A2AClientConfig {\n apiKey?: string\n extensions?: A2AExtensionConfig\n platformConfig?: PlatformConfig // Platform configuration for fulfillments\n}\n\nexport interface A2AError {\n code: number\n message: string\n data?: any\n}\n\n// A2A Message types per official guide\nexport interface A2AMessagePart {\n kind: 'text' | 'file' | 'data'\n text?: string\n file?: {\n name: string\n mimeType: string\n bytes?: string\n uri?: string\n }\n data?: Record<string, unknown>\n}\n\nexport interface A2AMessage {\n role: string\n messageId: string\n parts: A2AMessagePart[]\n}\n\n// Stream response types per official A2A guide\nexport interface StreamChunk {\n contextId?: string\n taskId?: string\n kind: 'status-update' | 'artifact-update'\n status?: {\n state: 'submitted' | 'working' | 'completed' | 'failed' | 'canceled' | 'input-required' | 'auth-required'\n message?: A2AMessage & { metadata?: Record<string, unknown> } // Add metadata support\n }\n artifact?: {\n artifactId: string\n name?: string\n description?: string\n parts: A2AMessagePart[]\n metadata?: Record<string, unknown> // Add metadata support\n }\n final?: boolean\n}\n\nexport class A2AClient {\n private baseUrl: string\n private jsonRpcUrl: string\n private apiKey: string\n private extensions: A2AExtensionConfig\n private agentCard: AgentCard | null = null\n private platformConfig: PlatformConfig | null = null\n private extractedDemands: ExtractedDemands | null = null\n private fulfillments: Partial<Fulfillments> | null = null\n\n constructor(agentUrl: string, config: A2AClientConfig = {}) {\n // Normalize URL\n this.baseUrl = agentUrl.replace(/\\/$/, '')\n // JSON-RPC endpoint per A2A guide\n this.jsonRpcUrl = `${this.baseUrl}/jsonrpc/`\n this.apiKey = config.apiKey || ''\n this.extensions = config.extensions || {}\n this.platformConfig = config.platformConfig || null\n }\n\n /**\n * Get configured extensions\n */\n getExtensions(): A2AExtensionConfig {\n return this.extensions\n }\n\n /**\n * Update extension configuration\n */\n setExtensions(extensions: A2AExtensionConfig): void {\n this.extensions = extensions\n }\n\n async initialize(): Promise<AgentCard> {\n // Agent card can be at root or .well-known, try root first per guide\n const response = await fetch(this.baseUrl, {\n method: 'GET',\n headers: {\n 'Accept': 'application/json'\n }\n })\n\n if (!response.ok) {\n // Fallback to .well-known\n const fallbackUrl = `${this.baseUrl}/.well-known/agent-card.json`\n const fallbackResponse = await fetch(fallbackUrl, {\n method: 'GET',\n headers: {\n 'Accept': 'application/json'\n }\n })\n\n if (!fallbackResponse.ok) {\n throw new Error(`Failed to fetch agent card: ${response.status} ${response.statusText}`)\n }\n\n this.agentCard = await fallbackResponse.json()\n } else {\n this.agentCard = await response.json()\n }\n\n if (!this.agentCard?.name || !this.agentCard?.url) {\n throw new Error('Invalid agent card: missing required fields')\n }\n\n // Extract extension demands from agent card\n this.extractedDemands = extractDemandsFromAgentCard(this.agentCard)\n\n // Build fulfillments if platform config is provided\n if (this.platformConfig) {\n this.fulfillments = buildFulfillments(this.platformConfig)\n }\n\n return this.agentCard\n }\n\n getAgentCard(): AgentCard | null {\n return this.agentCard\n }\n\n getJsonRpcUrl(): string {\n return this.jsonRpcUrl\n }\n\n /**\n * Get resolved metadata for A2A requests\n * Call this after initialize() to get metadata that fulfills agent demands\n */\n async getResolvedMetadata(): Promise<Record<string, unknown>> {\n if (!this.extractedDemands) {\n return {}\n }\n\n if (!this.fulfillments) {\n console.warn('No fulfillments configured. Agent may fall back to defaults.')\n return {}\n }\n\n return resolveMetadata(this.extractedDemands, this.fulfillments)\n }\n\n /**\n * Get extracted demands from agent card\n */\n getExtractedDemands(): ExtractedDemands | null {\n return this.extractedDemands\n }\n\n /**\n * Update platform configuration after initialization\n */\n setPlatformConfig(config: PlatformConfig): void {\n this.platformConfig = config\n this.fulfillments = buildFulfillments(config)\n }\n\n /**\n * Get current platform configuration\n */\n getPlatformConfig(): PlatformConfig | null {\n return this.platformConfig\n }\n\n /**\n * Build the base params object for A2A requests\n */\n private async buildRequestParams(message: string): Promise<Record<string, unknown>> {\n // Get resolved metadata from extension demands and fulfillments\n const resolvedMetadata = await this.getResolvedMetadata()\n\n const params: Record<string, unknown> = {\n message: {\n role: 'user',\n messageId: generateUUID(),\n parts: [{ kind: 'text', text: message }]\n }\n }\n\n // Include extension configuration if available\n // This allows the agent to access settings like thinking mode\n if (Object.keys(this.extensions).length > 0) {\n params.extensions = this.extensions\n }\n\n // Merge extension config with resolved metadata\n const hasResolvedMetadata = Object.keys(resolvedMetadata).length > 0\n if (hasResolvedMetadata) {\n params.metadata = {\n ...resolvedMetadata,\n ...(params.extensions || {})\n }\n }\n\n return params\n }\n\n async sendMessage(message: string): Promise<any> {\n const params = await this.buildRequestParams(message)\n\n const payload = {\n jsonrpc: '2.0',\n method: 'message/send',\n params,\n id: generateUUID()\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json'\n }\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`\n }\n\n const response = await fetch(this.jsonRpcUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload)\n })\n\n if (!response.ok) {\n throw new Error(`Request failed: ${response.status} ${response.statusText}`)\n }\n\n const result = await response.json()\n\n if (result.error) {\n const error = result.error as A2AError\n throw new Error(`Agent error: ${error.message} (code: ${error.code})`)\n }\n\n return result.result\n }\n\n async streamMessage(\n message: string,\n onChunk: (chunk: StreamChunk) => void | Promise<void>,\n onComplete?: () => void | Promise<void>\n ): Promise<void> {\n const params = await this.buildRequestParams(message)\n\n const payload = {\n jsonrpc: '2.0',\n method: 'message/stream',\n params,\n id: generateUUID()\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Accept': 'text/event-stream'\n }\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`\n }\n\n const response = await fetch(this.jsonRpcUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload)\n })\n\n if (!response.ok) {\n throw new Error(`Stream request failed: ${response.status} ${response.statusText}`)\n }\n\n if (!response.body) {\n throw new Error('Response body is null')\n }\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n\n // Keep the last incomplete line in the buffer\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n const trimmedLine = line.trim()\n\n if (trimmedLine.startsWith('data: ')) {\n const dataStr = trimmedLine.slice(6)\n\n // Skip empty data or [DONE] marker\n if (!dataStr || dataStr === '[DONE]') continue\n\n try {\n const data = JSON.parse(dataStr)\n\n if (data.error) {\n const error = data.error as A2AError\n throw new Error(`Stream error: ${error.message} (code: ${error.code})`)\n }\n\n if (data.result) {\n const chunk = data.result as StreamChunk\n await onChunk(chunk)\n\n // Check if stream is complete\n if (chunk.final === true && onComplete) {\n await onComplete()\n }\n }\n } catch (parseError) {\n if (parseError instanceof SyntaxError) {\n console.warn('Failed to parse SSE data:', dataStr)\n } else {\n throw parseError\n }\n }\n }\n }\n }\n\n // Process any remaining data in the buffer\n if (buffer.trim().startsWith('data: ')) {\n const dataStr = buffer.trim().slice(6)\n if (dataStr && dataStr !== '[DONE]') {\n try {\n const data = JSON.parse(dataStr)\n if (data.result) {\n const chunk = data.result as StreamChunk\n await onChunk(chunk)\n \n if (chunk.final === true && onComplete) {\n await onComplete()\n }\n }\n } catch (e) {\n console.warn('Failed to parse final SSE data:', dataStr)\n }\n }\n }\n } finally {\n reader.releaseLock()\n }\n }\n}\n","/**\n * UI Extension Metadata Parser\n *\n * Parses metadata from agent responses to extract UI extension data\n * for rendering citations, trajectories, errors, forms, etc.\n *\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-ui/src/api/a2a/utils.ts\n */\n\nimport { EXTENSION_URIS } from './extension-uris'\n\n/**\n * Citation metadata structure\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/ui/citation.ts\n */\nexport interface Citation {\n url?: string | null\n start_index?: number | null\n end_index?: number | null\n title?: string | null\n description?: string | null\n}\n\nexport interface CitationMetadata {\n citations: Citation[]\n}\n\n/**\n * Trajectory metadata structure\n * Reference: https://github.com/i-am-bee/agentstack/blob/main/apps/agentstack-sdk-ts/src/client/a2a/extensions/ui/trajectory.ts\n */\nexport interface TrajectoryMetadata {\n title?: string | null\n content?: string | null\n group_id?: string | null\n}\n\n/**\n * Error metadata structure\n */\nexport interface ErrorMetadata {\n message: string\n code?: string | null\n stacktrace?: string | null\n context?: Record<string, unknown> | null\n}\n\n/**\n * Form request metadata structure\n */\nexport interface FormField {\n id: string\n type: 'text' | 'date' | 'file' | 'single_select' | 'multi_select' | 'checkbox' | 'checkbox_group'\n label: string\n description?: string\n required?: boolean\n default_value?: unknown\n options?: Array<{ value: string; label: string }>\n col_span?: number\n}\n\nexport interface FormRequestMetadata {\n title?: string\n description?: string\n columns?: number\n submit_label?: string\n fields: FormField[]\n}\n\n/**\n * Canvas edit request metadata\n */\nexport interface CanvasEditMetadata {\n artifact_id: string\n start_index: number\n end_index: number\n description: string\n}\n\n/**\n * Agent detail metadata\n */\nexport interface AgentDetailMetadata {\n interaction_mode?: 'single-turn' | 'multi-turn'\n user_greeting?: string\n version?: string\n framework?: string\n source_code_url?: string\n tools?: Array<{ name: string; description: string }>\n skills?: Array<{ id: string; name: string; description: string }>\n contributors?: Array<{ name: string; url?: string }>\n}\n\n/**\n * Parsed UI extensions from message metadata\n */\nexport interface ParsedUIExtensions {\n citations?: CitationMetadata\n trajectory?: TrajectoryMetadata\n error?: ErrorMetadata\n formRequest?: FormRequestMetadata\n canvas?: CanvasEditMetadata\n agentDetail?: AgentDetailMetadata\n}\n\n/**\n * Extract UI extension data from message metadata\n */\nexport function parseUIExtensions(metadata: Record<string, unknown> | undefined): ParsedUIExtensions {\n if (!metadata) return {}\n\n const result: ParsedUIExtensions = {}\n\n // Parse Citations\n const citationData = metadata[EXTENSION_URIS.CITATION]\n if (citationData && typeof citationData === 'object') {\n result.citations = citationData as CitationMetadata\n }\n\n // Parse Trajectory\n const trajectoryData = metadata[EXTENSION_URIS.TRAJECTORY]\n if (trajectoryData && typeof trajectoryData === 'object') {\n result.trajectory = trajectoryData as TrajectoryMetadata\n }\n\n // Parse Error\n const errorData = metadata[EXTENSION_URIS.ERROR]\n if (errorData && typeof errorData === 'object') {\n result.error = errorData as ErrorMetadata\n }\n\n // Parse Form Request\n const formData = metadata[EXTENSION_URIS.FORM_REQUEST]\n if (formData && typeof formData === 'object') {\n result.formRequest = formData as FormRequestMetadata\n }\n\n // Parse Canvas\n const canvasData = metadata[EXTENSION_URIS.CANVAS]\n if (canvasData && typeof canvasData === 'object') {\n result.canvas = canvasData as CanvasEditMetadata\n }\n\n // Parse Agent Detail\n const agentDetailData = metadata[EXTENSION_URIS.AGENT_DETAIL]\n if (agentDetailData && typeof agentDetailData === 'object') {\n result.agentDetail = agentDetailData as AgentDetailMetadata\n }\n\n return result\n}\n\n/**\n * Extract citations from message metadata\n * Convenience function for citation-specific extraction\n */\nexport function extractCitations(metadata: Record<string, unknown> | undefined): Citation[] {\n const parsed = parseUIExtensions(metadata)\n return parsed.citations?.citations || []\n}\n\n/**\n * Extract trajectory from message metadata\n * Convenience function for trajectory-specific extraction\n */\nexport function extractTrajectory(metadata: Record<string, unknown> | undefined): TrajectoryMetadata | null {\n const parsed = parseUIExtensions(metadata)\n return parsed.trajectory || null\n}\n\n/**\n * Extract error from message metadata\n */\nexport function extractError(metadata: Record<string, unknown> | undefined): ErrorMetadata | null {\n const parsed = parseUIExtensions(metadata)\n return parsed.error || null\n}\n\n/**\n * Extract form request from message metadata\n */\nexport function extractFormRequest(metadata: Record<string, unknown> | undefined): FormRequestMetadata | null {\n const parsed = parseUIExtensions(metadata)\n return parsed.formRequest || null\n}\n","/**\n * A2A to Carbon AI Chat Translator\n *\n * Translates A2A protocol streaming events to Carbon AI Chat's expected format.\n *\n * References:\n * - Carbon AI Chat streaming: https://github.com/carbon-design-system/carbon-ai-chat/blob/main/examples/react/reasoning-and-chain-of-thought/src/scenarios.ts\n * - A2A Protocol types: https://github.com/a2aproject/a2a-python/blob/main/src/a2a/types.py\n */\n\nimport type { StreamChunk, A2AMessagePart } from '../a2a';\nimport { parseUIExtensions } from '../a2a';\n\n// =============================================================================\n// CARBON AI CHAT TYPES\n// Based on @carbon/ai-chat package types\n// =============================================================================\n\n/**\n * Carbon message response types\n */\nexport const MessageResponseTypes = {\n TEXT: 'text',\n USER_DEFINED: 'user_defined',\n INLINE_ERROR: 'inline_error',\n OPTION: 'option',\n} as const;\n\nexport type MessageResponseType = typeof MessageResponseTypes[keyof typeof MessageResponseTypes];\n\n/**\n * Chain of thought step status\n */\nexport enum ChainOfThoughtStepStatus {\n IN_PROGRESS = 'in_progress',\n SUCCESS = 'success',\n ERROR = 'error',\n}\n\n/**\n * Reasoning step open state\n */\nexport enum ReasoningStepOpenState {\n OPEN = 'open',\n CLOSE = 'close',\n DEFAULT = 'default',\n}\n\n/**\n * User type for response profile\n */\nexport enum UserType {\n HUMAN = 'human',\n BOT = 'bot',\n WATSONX = 'watsonx',\n}\n\n/**\n * Response user profile\n */\nexport interface ResponseUserProfile {\n id: string;\n nickname: string;\n user_type: UserType;\n profile_picture_url?: string;\n}\n\n/**\n * Reasoning step structure\n */\nexport interface ReasoningStep {\n title: string;\n content?: string;\n open_state?: ReasoningStepOpenState;\n}\n\n/**\n * Chain of thought step structure\n */\nexport interface ChainOfThoughtStep {\n title: string;\n description?: string;\n tool_name?: string;\n request?: { args: unknown };\n response?: { content: unknown };\n status: ChainOfThoughtStepStatus;\n}\n\n/**\n * Message response options\n */\nexport interface MessageResponseOptions {\n response_user_profile?: ResponseUserProfile;\n reasoning?: {\n open_state?: ReasoningStepOpenState;\n steps?: ReasoningStep[];\n content?: string;\n };\n chain_of_thought?: ChainOfThoughtStep[];\n}\n\n/**\n * Item streaming metadata\n */\nexport interface ItemStreamingMetadata {\n id: string;\n cancellable?: boolean;\n stream_stopped?: boolean;\n}\n\n/**\n * Generic item (text response)\n */\nexport interface TextItem {\n response_type: typeof MessageResponseTypes.TEXT;\n text: string;\n streaming_metadata?: ItemStreamingMetadata;\n message_item_options?: {\n feedback?: {\n is_on?: boolean;\n id?: string;\n };\n };\n}\n\n/**\n * User defined item (custom content)\n */\nexport interface UserDefinedItem {\n response_type: typeof MessageResponseTypes.USER_DEFINED;\n user_defined: Record<string, unknown>;\n}\n\n/**\n * Generic item union type\n */\nexport type GenericItem = TextItem | UserDefinedItem;\n\n/**\n * Partial item chunk for streaming\n */\nexport interface PartialItemChunk {\n partial_item: Partial<GenericItem> & {\n response_type: MessageResponseType;\n streaming_metadata?: ItemStreamingMetadata;\n };\n partial_response?: {\n message_options?: Partial<MessageResponseOptions>;\n };\n streaming_metadata: {\n response_id: string;\n };\n}\n\n/**\n * Complete item chunk\n */\nexport interface CompleteItemChunk {\n complete_item: GenericItem;\n partial_response?: {\n message_options?: Partial<MessageResponseOptions>;\n };\n streaming_metadata: {\n response_id: string;\n };\n}\n\n/**\n * Final response chunk\n */\nexport interface FinalResponseChunk {\n final_response: {\n id: string;\n output: {\n generic: GenericItem[];\n };\n message_options?: MessageResponseOptions;\n };\n}\n\n/**\n * Stream chunk union type\n */\nexport type CarbonStreamChunk = PartialItemChunk | CompleteItemChunk | FinalResponseChunk;\n\n/**\n * Carbon message for addMessage() API\n */\nexport interface CarbonMessage {\n output: {\n generic: GenericItem[];\n };\n message_options?: MessageResponseOptions;\n}\n\n// =============================================================================\n// LEGACY CARBON MESSAGE TYPE (for backward compatibility with EnhancedChatWrapper)\n// =============================================================================\n\n/**\n * Legacy Carbon Message format (used by EnhancedChatWrapper)\n * This is the older format that works with Carbon's addMessage() API directly\n */\nexport interface LegacyCarbonMessage {\n response_type: string;\n text?: string;\n reasoning_steps?: {\n steps: Array<{ content: string }>;\n openState?: 'open' | 'closed';\n };\n chain_of_thought?: {\n steps: ChainOfThoughtStep[];\n };\n user_defined?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\n// =============================================================================\n// A2A PART TYPES WITH METADATA\n// =============================================================================\n\n/**\n * Extended A2A part with metadata support\n */\nexport interface A2APartWithMetadata extends A2AMessagePart {\n metadata?: {\n content_type?: 'thinking' | 'reasoning_step' | 'response' | 'status' | string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Tool call data structure\n */\nexport interface ToolCallData {\n type: 'tool_call';\n tool_name?: string;\n args?: unknown;\n}\n\n/**\n * Tool result data structure\n */\nexport interface ToolResultData {\n type: 'tool_result';\n tool_name?: string;\n result_preview?: unknown;\n success?: boolean;\n}\n\n// =============================================================================\n// TRANSLATOR CLASS\n// =============================================================================\n\n/**\n * Translator state for tracking streaming progress\n */\ninterface TranslatorState {\n responseId: string;\n itemId: string;\n accumulatedText: string;\n accumulatedThinking: string; // For streaming thinking tokens to reasoning.content\n reasoningSteps: ReasoningStep[];\n chainOfThought: ChainOfThoughtStep[];\n pendingToolCalls: Map<string, number>; // tool_name -> index in chainOfThought\n hasStartedStreaming: boolean;\n shellMessageSent: boolean;\n}\n\n/**\n * A2A to Carbon AI Chat Translator\n *\n * Manages the translation of A2A streaming events to Carbon AI Chat format.\n * Maintains state across multiple chunks to properly accumulate text and\n * track reasoning/tool call progress.\n */\nexport class A2AToCarbonTranslator {\n private state: TranslatorState;\n private agentProfile: ResponseUserProfile;\n\n constructor(agentProfile?: Partial<ResponseUserProfile>) {\n this.agentProfile = {\n id: agentProfile?.id || 'a2a-agent',\n nickname: agentProfile?.nickname || 'AI Assistant',\n user_type: agentProfile?.user_type || UserType.BOT,\n profile_picture_url: agentProfile?.profile_picture_url,\n };\n this.state = this.createInitialState();\n }\n\n /**\n * Create initial translator state\n */\n private createInitialState(): TranslatorState {\n return {\n responseId: this.generateResponseId(),\n itemId: '1',\n accumulatedText: '',\n accumulatedThinking: '', // Initialize empty for streaming thinking tokens\n reasoningSteps: [],\n chainOfThought: [],\n pendingToolCalls: new Map(),\n hasStartedStreaming: false,\n shellMessageSent: false,\n };\n }\n\n /**\n * Generate unique response ID\n */\n private generateResponseId(): string {\n return `response-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n }\n\n /**\n * Reset state for new message\n */\n reset(): void {\n this.state = this.createInitialState();\n }\n\n /**\n * Get current response ID\n */\n getResponseId(): string {\n return this.state.responseId;\n }\n\n /**\n * Get current item ID\n */\n getItemId(): string {\n return this.state.itemId;\n }\n\n /**\n * Update agent profile\n */\n setAgentProfile(profile: Partial<ResponseUserProfile>): void {\n this.agentProfile = { ...this.agentProfile, ...profile };\n }\n\n /**\n * Get current agent profile\n */\n getAgentProfile(): ResponseUserProfile {\n return this.agentProfile;\n }\n\n /**\n * Check if shell message has been sent\n */\n hasShellBeenSent(): boolean {\n return this.state.shellMessageSent;\n }\n\n /**\n * Mark shell message as sent\n */\n markShellSent(): void {\n this.state.shellMessageSent = true;\n }\n\n /**\n * Get accumulated text\n */\n getAccumulatedText(): string {\n return this.state.accumulatedText;\n }\n\n /**\n * Get accumulated thinking content (for reasoning.content mode)\n */\n getAccumulatedThinking(): string {\n return this.state.accumulatedThinking;\n }\n\n /**\n * Get current reasoning steps\n */\n getReasoningSteps(): ReasoningStep[] {\n return [...this.state.reasoningSteps];\n }\n\n /**\n * Get current chain of thought\n */\n getChainOfThought(): ChainOfThoughtStep[] {\n return [...this.state.chainOfThought];\n }\n\n /**\n * Check if streaming has started\n */\n hasStartedStreaming(): boolean {\n return this.state.hasStartedStreaming;\n }\n\n /**\n * Get current state (for debugging/inspection)\n */\n getState(): Readonly<TranslatorState> {\n return { ...this.state };\n }\n\n // ===========================================================================\n // SHELL MESSAGE CREATION\n // ===========================================================================\n\n /**\n * Create shell message to initialize Carbon's reducer\n *\n * IMPORTANT: This MUST be called before sending any other chunks.\n * It seeds the message shell so reducers create the container before\n * reasoning steps or text stream in.\n */\n createShellMessage(includeReasoning: boolean = true): PartialItemChunk {\n this.state.shellMessageSent = true;\n\n const chunk: PartialItemChunk = {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n\n // Initialize empty reasoning with content mode (not steps) if requested\n if (includeReasoning) {\n chunk.partial_response!.message_options!.reasoning = { content: '' };\n }\n\n return chunk;\n }\n\n // ===========================================================================\n // A2A PART TRANSLATION\n // ===========================================================================\n\n /**\n * Translate a single streaming A2A part to a legacy Carbon message\n * Used for real-time streaming updates (backward compatibility with EnhancedChatWrapper)\n * @param part The A2A part to translate\n * @param metadata Optional extension metadata from the artifact\n */\n translateStreamingPart(part: A2APartWithMetadata, metadata?: Record<string, unknown>): LegacyCarbonMessage | null {\n const contentType = part.metadata?.content_type;\n\n // Handle thinking/reasoning content (both pre-response and post-tool reasoning)\n if ((contentType === 'thinking' || contentType === 'reasoning_step') && part.kind === 'text' && part.text) {\n return {\n response_type: 'reasoning_steps',\n reasoning_steps: {\n steps: [{ content: part.text }],\n openState: 'closed',\n },\n metadata,\n };\n }\n\n // Handle tool call data part\n if (part.kind === 'data' && part.data) {\n const dataType = (part.data as { type?: string }).type;\n\n if (dataType === 'tool_call') {\n const toolData = part.data as unknown as ToolCallData;\n return {\n response_type: 'chain_of_thought',\n chain_of_thought: {\n steps: [{\n title: toolData.tool_name || 'Tool Call',\n description: `Calling ${toolData.tool_name || 'tool'}`,\n tool_name: toolData.tool_name,\n request: { args: toolData.args },\n status: ChainOfThoughtStepStatus.IN_PROGRESS,\n }],\n },\n metadata,\n };\n }\n\n if (dataType === 'tool_result') {\n const resultData = part.data as unknown as ToolResultData;\n return {\n response_type: 'chain_of_thought',\n chain_of_thought: {\n steps: [{\n title: resultData.tool_name || 'Tool Result',\n description: `Result from ${resultData.tool_name || 'tool'}`,\n tool_name: resultData.tool_name,\n response: { content: resultData.result_preview },\n status: resultData.success === false\n ? ChainOfThoughtStepStatus.ERROR\n : ChainOfThoughtStepStatus.SUCCESS,\n }],\n },\n metadata,\n };\n }\n }\n\n // Handle regular text content\n if (part.kind === 'text' && part.text) {\n return {\n response_type: 'text',\n text: part.text,\n metadata,\n };\n }\n\n // Handle file parts\n if (part.kind === 'file' && part.file) {\n return {\n response_type: 'user_defined',\n user_defined: {\n type: 'file_attachment',\n fileName: part.file.name,\n mimeType: part.file.mimeType,\n downloadUrl: part.file.uri || `data:${part.file.mimeType};base64,${part.file.bytes}`,\n },\n metadata,\n };\n }\n\n return null;\n }\n\n /**\n * Translate an A2A message part to Carbon format\n *\n * @param part - The A2A message part to translate\n * @param artifactMetadata - Optional metadata from artifact level\n * @returns Carbon stream chunk or null if no action needed\n */\n translatePart(\n part: A2APartWithMetadata,\n artifactMetadata?: Record<string, unknown>\n ): CarbonStreamChunk | null {\n const contentType = part.metadata?.content_type;\n\n // Handle thinking/reasoning content (both pre-response and post-tool reasoning)\n if ((contentType === 'thinking' || contentType === 'reasoning_step') && part.kind === 'text' && part.text) {\n return this.translateThinkingPart(part.text, part.metadata);\n }\n\n // Handle trajectory extension (alternative to thinking)\n const partExtensions = parseUIExtensions(part.metadata as Record<string, unknown>);\n if (partExtensions.trajectory) {\n return this.translateTrajectoryPart(partExtensions.trajectory);\n }\n\n // Handle tool call data part\n if (part.kind === 'data' && part.data) {\n const dataType = (part.data as { type?: string }).type;\n\n if (dataType === 'tool_call') {\n return this.translateToolCallPart(part.data as unknown as ToolCallData);\n }\n\n if (dataType === 'tool_result') {\n return this.translateToolResultPart(part.data as unknown as ToolResultData);\n }\n }\n\n // Handle regular text content\n if (part.kind === 'text' && part.text) {\n // Skip if this is thinking/reasoning content (already handled above)\n if (contentType === 'thinking' || contentType === 'reasoning_step') {\n return null;\n }\n return this.translateTextPart(part.text, artifactMetadata);\n }\n\n // Handle file parts\n if (part.kind === 'file' && part.file) {\n return this.translateFilePart(part.file);\n }\n\n return null;\n }\n\n /**\n * Translate thinking/reasoning content to Carbon format\n *\n * ROUTING LOGIC:\n * - content_type='thinking' (no title) → reasoning.content (streaming)\n * - content_type='reasoning_step' WITH title → reasoning.steps[] (discrete)\n */\n private translateThinkingPart(\n text: string,\n metadata?: Record<string, unknown>\n ): PartialItemChunk {\n const contentType = metadata?.content_type as string | undefined;\n const stepTitle = metadata?.title as string | undefined;\n\n // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n // STREAMING MODE: thinking tokens without title → reasoning.content\n // This is the primary path for live token-by-token display\n // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n if (contentType === 'thinking' || !stepTitle) {\n // Accumulate text into streaming content\n this.state.accumulatedThinking += text;\n\n console.log('[Translator] Streaming thinking token:', {\n tokenLength: text.length,\n totalLength: this.state.accumulatedThinking.length\n });\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n reasoning: {\n content: this.state.accumulatedThinking, // Stream to content\n // Preserve any existing discrete steps\n steps: this.state.reasoningSteps.length > 0\n ? this.state.reasoningSteps\n : undefined,\n },\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n // DISCRETE MODE: reasoning_step WITH title → reasoning.steps[]\n // Used for batched post-tool reasoning blocks with explicit titles\n // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n const newStep: ReasoningStep = {\n title: stepTitle, // No fallback - only real titles become discrete steps\n content: text,\n open_state: ReasoningStepOpenState.DEFAULT,\n };\n\n this.state.reasoningSteps.push(newStep);\n\n console.log('[Translator] Added discrete reasoning step:', {\n title: stepTitle,\n textLength: text.length,\n totalSteps: this.state.reasoningSteps.length\n });\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n reasoning: {\n // Include accumulated streaming content if any\n content: this.state.accumulatedThinking || undefined,\n steps: this.state.reasoningSteps,\n open_state: ReasoningStepOpenState.DEFAULT,\n },\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate trajectory extension to Carbon reasoning step\n */\n private translateTrajectoryPart(\n trajectory: { title?: string | null; content?: string | null; group_id?: string | null }\n ): PartialItemChunk {\n const newStep: ReasoningStep = {\n title: trajectory.title || 'Processing',\n content: trajectory.content || '',\n open_state: ReasoningStepOpenState.DEFAULT,\n };\n\n this.state.reasoningSteps.push(newStep);\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n reasoning: {\n steps: this.state.reasoningSteps,\n open_state: ReasoningStepOpenState.DEFAULT, // Auto-expand during streaming\n },\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate tool call to Carbon chain of thought (IN_PROGRESS)\n */\n private translateToolCallPart(toolData: ToolCallData): PartialItemChunk {\n const toolName = toolData.tool_name || 'tool';\n\n const cotStep: ChainOfThoughtStep = {\n title: toolName,\n description: `Calling ${toolName}`,\n tool_name: toolName,\n request: { args: toolData.args },\n status: ChainOfThoughtStepStatus.IN_PROGRESS,\n };\n\n const index = this.state.chainOfThought.length;\n this.state.chainOfThought.push(cotStep);\n this.state.pendingToolCalls.set(toolName, index);\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n chain_of_thought: this.state.chainOfThought,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate tool result to Carbon chain of thought (SUCCESS/ERROR)\n */\n private translateToolResultPart(resultData: ToolResultData): PartialItemChunk {\n const toolName = resultData.tool_name || 'tool';\n const index = this.state.pendingToolCalls.get(toolName);\n\n if (index !== undefined && index < this.state.chainOfThought.length) {\n // Update existing tool call with result\n this.state.chainOfThought[index] = {\n ...this.state.chainOfThought[index],\n response: { content: resultData.result_preview },\n status: resultData.success === false\n ? ChainOfThoughtStepStatus.ERROR\n : ChainOfThoughtStepStatus.SUCCESS,\n };\n this.state.pendingToolCalls.delete(toolName);\n } else {\n // No matching tool call found, create new completed step\n const cotStep: ChainOfThoughtStep = {\n title: toolName,\n description: `Result from ${toolName}`,\n tool_name: toolName,\n response: { content: resultData.result_preview },\n status: resultData.success === false\n ? ChainOfThoughtStepStatus.ERROR\n : ChainOfThoughtStepStatus.SUCCESS,\n };\n this.state.chainOfThought.push(cotStep);\n }\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: '',\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n chain_of_thought: this.state.chainOfThought,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate text part to Carbon partial item\n */\n private translateTextPart(\n text: string,\n _artifactMetadata?: Record<string, unknown>\n ): PartialItemChunk {\n this.state.accumulatedText += text;\n this.state.hasStartedStreaming = true;\n\n return {\n partial_item: {\n response_type: MessageResponseTypes.TEXT,\n text: text, // Send just the new text chunk\n streaming_metadata: {\n id: this.state.itemId,\n cancellable: true,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Translate file part to Carbon user defined item\n */\n private translateFilePart(file: {\n name: string;\n mimeType: string;\n bytes?: string;\n uri?: string;\n }): PartialItemChunk {\n return {\n partial_item: {\n response_type: MessageResponseTypes.USER_DEFINED,\n user_defined: {\n type: 'file_attachment',\n fileName: file.name,\n mimeType: file.mimeType,\n downloadUrl: file.uri || `data:${file.mimeType};base64,${file.bytes}`,\n },\n streaming_metadata: {\n id: `file-${Date.now()}`,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n // ===========================================================================\n // COMPLETE AND FINAL RESPONSE\n // ===========================================================================\n\n /**\n * Create complete item chunk\n *\n * Call this to finalize a specific item while other items may still be streaming.\n * Optional but useful for accessibility and corrections.\n */\n createCompleteItem(wasStopped: boolean = false): CompleteItemChunk {\n // Build reasoning object with both content and steps if available\n const hasThinking = this.state.accumulatedThinking.length > 0;\n const hasSteps = this.state.reasoningSteps.length > 0;\n const reasoning = (hasThinking || hasSteps)\n ? {\n content: hasThinking ? this.state.accumulatedThinking : undefined,\n steps: hasSteps ? this.state.reasoningSteps : undefined,\n open_state: ReasoningStepOpenState.CLOSE, // Collapse after completion\n }\n : undefined;\n\n return {\n complete_item: {\n response_type: MessageResponseTypes.TEXT,\n text: this.state.accumulatedText,\n streaming_metadata: {\n id: this.state.itemId,\n stream_stopped: wasStopped,\n },\n },\n partial_response: {\n message_options: {\n response_user_profile: this.agentProfile,\n reasoning,\n chain_of_thought: this.state.chainOfThought.length > 0\n ? this.state.chainOfThought\n : undefined,\n },\n },\n streaming_metadata: {\n response_id: this.state.responseId,\n },\n };\n }\n\n /**\n * Create final response chunk\n *\n * CRITICAL: This MUST be called to end streaming and clear the typing indicator.\n * Without this, the UI will remain in a loading state.\n */\n createFinalResponse(): FinalResponseChunk {\n // Build reasoning object with both content and steps if available\n const hasThinking = this.state.accumulatedThinking.length > 0;\n const hasSteps = this.state.reasoningSteps.length > 0;\n const reasoning = (hasThinking || hasSteps)\n ? {\n content: hasThinking ? this.state.accumulatedThinking : undefined,\n steps: hasSteps ? this.state.reasoningSteps : undefined,\n open_state: ReasoningStepOpenState.CLOSE, // Collapse after completion\n }\n : undefined;\n\n return {\n final_response: {\n id: this.state.responseId,\n output: {\n generic: [\n {\n response_type: MessageResponseTypes.TEXT,\n text: this.state.accumulatedText,\n streaming_metadata: {\n id: this.state.itemId,\n },\n },\n ],\n },\n message_options: {\n response_user_profile: this.agentProfile,\n reasoning,\n chain_of_thought: this.state.chainOfThought.length > 0\n ? this.state.chainOfThought\n : undefined,\n },\n },\n };\n }\n\n /**\n * Create error response\n */\n createErrorResponse(errorMessage: string): FinalResponseChunk {\n return {\n final_response: {\n id: this.state.responseId,\n output: {\n generic: [\n {\n response_type: MessageResponseTypes.TEXT,\n text: errorMessage,\n streaming_metadata: {\n id: this.state.itemId,\n },\n },\n ],\n },\n message_options: {\n response_user_profile: this.agentProfile,\n },\n },\n };\n }\n\n // ===========================================================================\n // CITATION HANDLING\n // ===========================================================================\n\n /**\n * Create citations message\n *\n * Call this after the main response to add a sources list.\n */\n createCitationsMessage(\n citations: Array<{\n url?: string | null;\n title?: string | null;\n description?: string | null;\n }>\n ): CarbonMessage {\n return {\n output: {\n generic: [\n {\n response_type: MessageResponseTypes.USER_DEFINED,\n user_defined: {\n type: 'sources_list',\n citations,\n },\n } as UserDefinedItem,\n ],\n },\n message_options: {\n response_user_profile: this.agentProfile,\n },\n };\n }\n\n // ===========================================================================\n // FULL A2A STREAM CHUNK TRANSLATION\n // ===========================================================================\n\n /**\n * Translate a complete A2A stream chunk to Carbon format\n *\n * This is the main entry point for processing A2A SSE events.\n * Returns an array of Carbon chunks since one A2A event may produce\n * multiple Carbon updates (e.g., multiple parts in a message).\n */\n translateStreamChunk(chunk: StreamChunk): CarbonStreamChunk[] {\n const results: CarbonStreamChunk[] = [];\n\n // Ensure shell message is sent first\n if (!this.state.shellMessageSent) {\n results.push(this.createShellMessage());\n }\n\n if (chunk.kind === 'status-update' && chunk.status?.message) {\n const message = chunk.status.message;\n\n // Process message-level metadata (citations, errors, etc.)\n // These are typically added to state rather than returned as chunks\n\n // Process each part in the message\n for (const part of message.parts) {\n const carbonChunk = this.translatePart(\n part as A2APartWithMetadata,\n message.metadata\n );\n if (carbonChunk) {\n results.push(carbonChunk);\n }\n }\n }\n\n if (chunk.kind === 'artifact-update' && chunk.artifact?.parts) {\n // Process artifact parts\n for (const part of chunk.artifact.parts) {\n const carbonChunk = this.translatePart(\n part as A2APartWithMetadata,\n chunk.artifact.metadata\n );\n if (carbonChunk) {\n results.push(carbonChunk);\n }\n }\n }\n\n // Handle stream completion\n if (chunk.final === true || chunk.status?.state === 'completed') {\n results.push(this.createFinalResponse());\n }\n\n return results;\n }\n}\n\n// =============================================================================\n// UTILITY FUNCTIONS\n// =============================================================================\n\n/**\n * Create a translator with default settings\n */\nexport function createTranslator(\n agentName?: string,\n agentIconUrl?: string\n): A2AToCarbonTranslator {\n return new A2AToCarbonTranslator({\n nickname: agentName,\n profile_picture_url: agentIconUrl,\n });\n}\n\n/**\n * Check if a Carbon chunk is a final response\n */\nexport function isFinalResponse(chunk: CarbonStreamChunk): chunk is FinalResponseChunk {\n return 'final_response' in chunk;\n}\n\n/**\n * Check if a Carbon chunk is a partial item\n */\nexport function isPartialItem(chunk: CarbonStreamChunk): chunk is PartialItemChunk {\n return 'partial_item' in chunk;\n}\n\n/**\n * Check if a Carbon chunk is a complete item\n */\nexport function isCompleteItem(chunk: CarbonStreamChunk): chunk is CompleteItemChunk {\n return 'complete_item' in chunk;\n}\n","/**\n * Citation processing utilities\n *\n * Reference: https://raw.githubusercontent.com/i-am-bee/agentstack/main/docs/development/agent-integration/citations.mdx\n */\n\nimport type { Citation } from '../../lib/a2a';\nimport type { ProcessedCitation, TextSegment } from './types';\n\n/**\n * Generate unique ID for citation\n */\nfunction generateCitationId(): string {\n return `cite-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Process raw citations into renderable format\n * Assigns numbers and extracts highlighted text\n */\nexport function processCitations(text: string, citations: Citation[]): ProcessedCitation[] {\n // Sort by start_index to assign numbers in order of appearance\n const sortedCitations = [...citations]\n .filter((c) => c.start_index != null && c.end_index != null)\n .sort((a, b) => (a.start_index ?? 0) - (b.start_index ?? 0));\n\n return sortedCitations.map((citation, index) => ({\n ...citation,\n id: generateCitationId(),\n number: index + 1,\n highlightedText: text.substring(citation.start_index ?? 0, citation.end_index ?? text.length),\n }));\n}\n\n/**\n * Segment text into parts with and without citations\n * Returns array of segments for rendering\n */\nexport function segmentTextWithCitations(text: string, citations: Citation[]): TextSegment[] {\n const processedCitations = processCitations(text, citations);\n\n if (processedCitations.length === 0) {\n return [{ text, isCited: false }];\n }\n\n const segments: TextSegment[] = [];\n let currentIndex = 0;\n\n for (const citation of processedCitations) {\n const startIndex = citation.start_index ?? 0;\n const endIndex = citation.end_index ?? text.length;\n\n // Add non-cited text before this citation\n if (currentIndex < startIndex) {\n segments.push({\n text: text.substring(currentIndex, startIndex),\n isCited: false,\n });\n }\n\n // Add cited text segment\n segments.push({\n text: text.substring(startIndex, endIndex),\n citation,\n isCited: true,\n });\n\n currentIndex = endIndex;\n }\n\n // Add remaining non-cited text\n if (currentIndex < text.length) {\n segments.push({\n text: text.substring(currentIndex),\n isCited: false,\n });\n }\n\n return segments;\n}\n\n/**\n * Get unique citations (deduplicated by URL)\n */\nexport function getUniqueCitations(citations: ProcessedCitation[]): ProcessedCitation[] {\n const seen = new Set<string>();\n return citations.filter((citation) => {\n if (!citation.url || seen.has(citation.url)) {\n return false;\n }\n seen.add(citation.url);\n return true;\n });\n}\n","/**\n * Citation Renderer Component\n *\n * Renders text with inline citation highlights and a sources list.\n * Citations appear as highlighted text with superscript numbers.\n * Hovering shows a tooltip with source details.\n * Clicking navigates to the source URL.\n *\n * Reference: https://raw.githubusercontent.com/i-am-bee/agentstack/main/docs/development/agent-integration/citations.mdx\n */\n\n'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport type { CitationRendererProps, ProcessedCitation, TextSegment } from './types';\nimport { segmentTextWithCitations, getUniqueCitations, processCitations } from './citation-utils';\n\n/**\n * Tooltip component for citation hover state\n */\ninterface CitationTooltipProps {\n citation: ProcessedCitation;\n position: { x: number; y: number };\n}\n\nconst CitationTooltip: React.FC<CitationTooltipProps> = ({ citation, position }) => {\n return (\n <div\n className=\"fixed z-50 max-w-xs p-3 bg-gray-900 text-white rounded-lg shadow-lg text-sm\"\n style={{\n left: position.x,\n top: position.y + 20,\n transform: 'translateX(-50%)',\n }}\n >\n {citation.title && <div className=\"font-semibold mb-1\">{citation.title}</div>}\n {citation.description && <div className=\"text-gray-300 text-xs mb-2\">{citation.description}</div>}\n {citation.url && <div className=\"text-blue-300 text-xs truncate\">{citation.url}</div>}\n <div className=\"absolute -top-2 left-1/2 transform -translate-x-1/2 border-8 border-transparent border-b-gray-900\" />\n </div>\n );\n};\n\n/**\n * Inline citation highlight component\n */\ninterface CitationHighlightProps {\n segment: TextSegment;\n onHover: (citation: ProcessedCitation | null, event: React.MouseEvent) => void;\n}\n\nconst CitationHighlight: React.FC<CitationHighlightProps> = ({ segment, onHover }) => {\n if (!segment.isCited || !segment.citation) {\n return <span>{segment.text}</span>;\n }\n\n const handleMouseEnter = (e: React.MouseEvent) => {\n onHover(segment.citation!, e);\n };\n\n const handleMouseLeave = () => {\n onHover(null, {} as React.MouseEvent);\n };\n\n const handleClick = () => {\n if (segment.citation?.url) {\n window.open(segment.citation.url, '_blank', 'noopener,noreferrer');\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n };\n\n return (\n <span\n className=\"bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200 cursor-pointer hover:bg-blue-200 dark:hover:bg-blue-800/40 transition-colors rounded px-0.5\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={`Citation ${segment.citation.number}: ${segment.citation.title || 'Source'}`}\n >\n {segment.text}\n <sup className=\"text-xs font-semibold ml-0.5\">[{segment.citation.number}]</sup>\n </span>\n );\n};\n\n/**\n * Sources list component\n */\ninterface SourcesListProps {\n citations: ProcessedCitation[];\n}\n\nconst SourcesList: React.FC<SourcesListProps> = ({ citations }) => {\n const uniqueCitations = getUniqueCitations(citations);\n\n if (uniqueCitations.length === 0) {\n return null;\n }\n\n return (\n <div className=\"mt-4 pt-4 border-t border-gray-200 dark:border-gray-700\">\n <h4 className=\"text-sm font-semibold text-gray-600 dark:text-gray-400 mb-2\">Sources</h4>\n <ol className=\"list-decimal list-inside space-y-1\">\n {uniqueCitations.map((citation) => (\n <li key={citation.id} className=\"text-sm\">\n <a\n href={citation.url || '#'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-blue-600 dark:text-blue-400 hover:underline\"\n >\n {citation.title || citation.url || `Source ${citation.number}`}\n </a>\n {citation.description && (\n <span className=\"text-gray-500 dark:text-gray-400 ml-2\">— {citation.description}</span>\n )}\n </li>\n ))}\n </ol>\n </div>\n );\n};\n\n/**\n * Main Citation Renderer Component\n */\nexport const CitationRenderer: React.FC<CitationRendererProps> = ({ text, citations, className = '' }) => {\n const [hoveredCitation, setHoveredCitation] = useState<ProcessedCitation | null>(null);\n const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 });\n\n const segments = segmentTextWithCitations(text, citations);\n const processedCitations = processCitations(text, citations);\n\n const handleHover = useCallback((citation: ProcessedCitation | null, event: React.MouseEvent) => {\n setHoveredCitation(citation);\n if (citation && event.currentTarget) {\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n setTooltipPosition({\n x: rect.left + rect.width / 2,\n y: rect.bottom,\n });\n }\n }, []);\n\n return (\n <div className={`relative ${className}`}>\n {/* Main text with citations */}\n <div className=\"prose dark:prose-invert max-w-none\">\n {segments.map((segment, index) => (\n <CitationHighlight key={index} segment={segment} onHover={handleHover} />\n ))}\n </div>\n\n {/* Hover tooltip */}\n {hoveredCitation && <CitationTooltip citation={hoveredCitation} position={tooltipPosition} />}\n\n {/* Sources list */}\n <SourcesList citations={processedCitations} />\n </div>\n );\n};\n\nexport default CitationRenderer;\n","/**\n * Error Renderer Component\n *\n * Renders error messages from agent responses with\n * optional stack trace and context information.\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport type { ErrorRendererProps } from './types';\n\n/**\n * Error Renderer Component\n */\nexport const ErrorRenderer: React.FC<ErrorRendererProps> = ({ error, className = '' }) => {\n const [showDetails, setShowDetails] = useState(false);\n const hasDetails = error.stacktrace || error.context;\n\n return (\n <div className={`border border-red-200 bg-red-50 dark:bg-red-900/20 dark:border-red-800 rounded-lg p-4 ${className}`}>\n {/* Error Header */}\n <div className=\"flex items-start gap-3\">\n <div className=\"flex-shrink-0 text-red-500 dark:text-red-400\">\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"flex-1\">\n <div className=\"flex items-center justify-between\">\n <h4 className=\"text-sm font-semibold text-red-800 dark:text-red-200\">\n {error.code ? `Error: ${error.code}` : 'Error'}\n </h4>\n {hasDetails && (\n <button\n onClick={() => setShowDetails(!showDetails)}\n className=\"text-xs text-red-600 dark:text-red-400 hover:underline\"\n >\n {showDetails ? 'Hide details' : 'Show details'}\n </button>\n )}\n </div>\n <p className=\"mt-1 text-sm text-red-700 dark:text-red-300\">{error.message}</p>\n </div>\n </div>\n\n {/* Error Details (collapsible) */}\n {hasDetails && showDetails && (\n <div className=\"mt-4 pt-4 border-t border-red-200 dark:border-red-800\">\n {/* Stack Trace */}\n {error.stacktrace && (\n <div className=\"mb-3\">\n <h5 className=\"text-xs font-semibold text-red-600 dark:text-red-400 mb-1\">Stack Trace</h5>\n <pre className=\"text-xs bg-red-100 dark:bg-red-900/40 p-3 rounded overflow-x-auto text-red-800 dark:text-red-200\">\n {error.stacktrace}\n </pre>\n </div>\n )}\n\n {/* Context */}\n {error.context && (\n <div>\n <h5 className=\"text-xs font-semibold text-red-600 dark:text-red-400 mb-1\">Context</h5>\n <pre className=\"text-xs bg-red-100 dark:bg-red-900/40 p-3 rounded overflow-x-auto text-red-800 dark:text-red-200\">\n {JSON.stringify(error.context, null, 2)}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default ErrorRenderer;\n","/**\n * Form Renderer Component\n *\n * Renders dynamic forms from agent form request metadata.\n * Supports text, date, file, select, checkbox, and multi-select fields.\n */\n\n'use client';\n\nimport React, { useState, useCallback } from 'react';\nimport type { FormRendererProps } from './types';\nimport type { FormField } from '../../lib/a2a';\n\n/**\n * Individual form field component\n */\ninterface FormFieldRendererProps {\n field: FormField;\n value: unknown;\n onChange: (fieldId: string, value: unknown) => void;\n}\n\nconst FormFieldRenderer: React.FC<FormFieldRendererProps> = ({ field, value, onChange }) => {\n const handleChange = useCallback(\n (newValue: unknown) => {\n onChange(field.id, newValue);\n },\n [field.id, onChange]\n );\n\n const baseInputClasses =\n 'w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none';\n\n switch (field.type) {\n case 'text':\n return (\n <input\n type=\"text\"\n id={field.id}\n value={(value as string) || ''}\n onChange={(e) => handleChange(e.target.value)}\n placeholder={field.description}\n required={field.required}\n className={baseInputClasses}\n />\n );\n\n case 'date':\n return (\n <input\n type=\"date\"\n id={field.id}\n value={(value as string) || ''}\n onChange={(e) => handleChange(e.target.value)}\n required={field.required}\n className={baseInputClasses}\n />\n );\n\n case 'file':\n return (\n <input\n type=\"file\"\n id={field.id}\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) {\n // Convert file to base64 for transmission\n const reader = new FileReader();\n reader.onload = () => {\n handleChange({\n name: file.name,\n type: file.type,\n size: file.size,\n data: reader.result,\n });\n };\n reader.readAsDataURL(file);\n }\n }}\n required={field.required}\n className={baseInputClasses}\n />\n );\n\n case 'single_select':\n return (\n <select\n id={field.id}\n value={(value as string) || ''}\n onChange={(e) => handleChange(e.target.value)}\n required={field.required}\n className={baseInputClasses}\n >\n <option value=\"\">Select...</option>\n {field.options?.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n\n case 'multi_select':\n return (\n <select\n id={field.id}\n multiple\n value={(value as string[]) || []}\n onChange={(e) => {\n const selected = Array.from(e.target.selectedOptions, (option) => option.value);\n handleChange(selected);\n }}\n required={field.required}\n className={`${baseInputClasses} min-h-[100px]`}\n >\n {field.options?.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n\n case 'checkbox':\n return (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n id={field.id}\n checked={Boolean(value)}\n onChange={(e) => handleChange(e.target.checked)}\n required={field.required}\n className=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">{field.description}</span>\n </label>\n );\n\n case 'checkbox_group':\n return (\n <div className=\"space-y-2\">\n {field.options?.map((option) => {\n const selectedValues = (value as string[]) || [];\n const isChecked = selectedValues.includes(option.value);\n return (\n <label key={option.value} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={isChecked}\n onChange={(e) => {\n const newValues = e.target.checked\n ? [...selectedValues, option.value]\n : selectedValues.filter((v) => v !== option.value);\n handleChange(newValues);\n }}\n className=\"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm text-gray-700 dark:text-gray-300\">{option.label}</span>\n </label>\n );\n })}\n </div>\n );\n\n default:\n return (\n <input\n type=\"text\"\n id={field.id}\n value={(value as string) || ''}\n onChange={(e) => handleChange(e.target.value)}\n className={baseInputClasses}\n />\n );\n }\n};\n\n/**\n * Main Form Renderer Component\n */\nexport const FormRenderer: React.FC<FormRendererProps> = ({ form, onSubmit, onCancel, className = '' }) => {\n // Initialize form values with defaults\n const [values, setValues] = useState<Record<string, unknown>>(() => {\n const initial: Record<string, unknown> = {};\n form.fields.forEach((field) => {\n if (field.default_value !== undefined) {\n initial[field.id] = field.default_value;\n }\n });\n return initial;\n });\n\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const handleFieldChange = useCallback((fieldId: string, value: unknown) => {\n setValues((prev) => ({ ...prev, [fieldId]: value }));\n }, []);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n setIsSubmitting(true);\n try {\n await onSubmit(values);\n } finally {\n setIsSubmitting(false);\n }\n },\n [values, onSubmit]\n );\n\n // Calculate grid columns\n const gridCols = form.columns || 1;\n\n return (\n <div className={`border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-800 p-6 ${className}`}>\n {/* Form Header */}\n {(form.title || form.description) && (\n <div className=\"mb-6\">\n {form.title && (\n <h3 className=\"text-lg font-semibold text-gray-900 dark:text-gray-100\">{form.title}</h3>\n )}\n {form.description && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">{form.description}</p>\n )}\n </div>\n )}\n\n {/* Form Fields */}\n <form onSubmit={handleSubmit}>\n <div\n className=\"grid gap-4\"\n style={{\n gridTemplateColumns: `repeat(${gridCols}, minmax(0, 1fr))`,\n }}\n >\n {form.fields.map((field) => (\n <div\n key={field.id}\n style={{\n gridColumn: field.col_span ? `span ${field.col_span}` : undefined,\n }}\n >\n {field.type !== 'checkbox' && (\n <label\n htmlFor={field.id}\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1\"\n >\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </label>\n )}\n <FormFieldRenderer field={field} value={values[field.id]} onChange={handleFieldChange} />\n {field.description && field.type !== 'checkbox' && (\n <p className=\"mt-1 text-xs text-gray-500 dark:text-gray-400\">{field.description}</p>\n )}\n </div>\n ))}\n </div>\n\n {/* Form Actions */}\n <div className=\"mt-6 flex items-center justify-end gap-3\">\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={isSubmitting}\n className=\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md hover:bg-gray-50 dark:hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:opacity-50\"\n >\n Cancel\n </button>\n )}\n <button\n type=\"submit\"\n disabled={isSubmitting}\n className=\"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50\"\n >\n {isSubmitting ? 'Submitting...' : form.submit_label || 'Submit'}\n </button>\n </div>\n </form>\n </div>\n );\n};\n\nexport default FormRenderer;\n","'use client';\n\nimport React, { useRef, useCallback, useState, useMemo, useEffect } from 'react';\nimport type {\n A2AChatProps,\n AgentConfig,\n AgentConnectionState,\n} from '../types';\nimport type { Citation, ErrorMetadata, FormRequestMetadata } from '../lib/a2a';\nimport { useAgentContextOptional } from './AgentProvider';\nimport { A2AToCarbonTranslator, createTranslator } from '../lib/translator';\nimport { CitationRenderer } from './renderers/CitationRenderer';\nimport { ErrorRenderer } from './renderers/ErrorRenderer';\nimport { FormRenderer } from './renderers/FormRenderer';\n\n// =============================================================================\n// HELPER UTILITIES\n// =============================================================================\n\nfunction generateUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * Main A2A Chat component\n *\n * Connects to A2A agents and renders chat UI using Carbon AI Chat components.\n *\n * @example\n * // Direct agent config\n * <A2AChat\n * agent={{ id: 'my-agent', name: 'My Agent', url: 'https://...' }}\n * layout=\"sidebar\"\n * />\n *\n * @example\n * // Using AgentProvider context\n * <AgentProvider agents={[...]}>\n * <A2AChat agentId=\"research\" />\n * </AgentProvider>\n *\n * @example\n * // Simple URL-only\n * <A2AChat agentUrl=\"https://my-agent.example.com\" layout=\"fullscreen\" />\n */\nexport function A2AChat({\n // Agent configuration\n agent: agentProp,\n agentId,\n agentUrl,\n apiKey,\n\n // Display options\n layout = 'fullscreen',\n allowLayoutSwitch = false,\n defaultOpen = true,\n className = '',\n agentName,\n agentIconUrl,\n\n // Behavior options\n showThinking = true,\n showChainOfThought = true,\n allowCancel = true,\n extensions,\n\n // Callbacks\n onOpen,\n onClose,\n onSend,\n onResponse,\n onConnectionChange,\n onError,\n onDisconnect,\n\n // Custom renderers\n renderCitations,\n renderError,\n renderForm,\n renderUserDefined,\n}: A2AChatProps) {\n // ---------------------------------------------------------------------------\n // RESOLVE AGENT CONFIG\n // ---------------------------------------------------------------------------\n\n const agentContext = useAgentContextOptional();\n\n const agent = useMemo((): AgentConfig | null => {\n // Priority: direct prop > context lookup > URL-only\n if (agentProp) {\n return agentProp;\n }\n\n if (agentId && agentContext) {\n return agentContext.getAgent(agentId) ?? null;\n }\n\n if (!agentProp && !agentId && agentContext?.currentAgent) {\n return agentContext.currentAgent;\n }\n\n if (agentUrl) {\n return {\n id: 'default',\n name: agentName ?? 'AI Assistant',\n url: agentUrl,\n apiKey,\n iconUrl: agentIconUrl,\n };\n }\n\n return null;\n }, [agentProp, agentId, agentUrl, apiKey, agentName, agentIconUrl, agentContext]);\n\n // ---------------------------------------------------------------------------\n // STATE\n // ---------------------------------------------------------------------------\n\n const [connectionState, setConnectionState] = useState<AgentConnectionState>('disconnected');\n const [isStreaming, setIsStreaming] = useState(false);\n const [currentFormRequest, setCurrentFormRequest] = useState<FormRequestMetadata | null>(null);\n const [pendingTaskId, setPendingTaskId] = useState<string | null>(null);\n const [carbonLoaded, setCarbonLoaded] = useState(false);\n const [CarbonComponents, setCarbonComponents] = useState<{\n ChatCustomElement?: React.ComponentType<any>;\n ChatContainer?: React.ComponentType<any>;\n }>({});\n\n const instanceRef = useRef<any>(null);\n const translatorRef = useRef<A2AToCarbonTranslator | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // ---------------------------------------------------------------------------\n // LOAD CARBON COMPONENTS\n // ---------------------------------------------------------------------------\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n import('@carbon/ai-chat')\n .then((mod) => {\n setCarbonComponents({\n ChatCustomElement: mod.ChatCustomElement,\n ChatContainer: mod.ChatContainer,\n });\n setCarbonLoaded(true);\n })\n .catch((err) => {\n console.error('[A2AChat] Failed to load @carbon/ai-chat:', err);\n });\n }\n }, []);\n\n // ---------------------------------------------------------------------------\n // UPDATE CONNECTION STATE\n // ---------------------------------------------------------------------------\n\n useEffect(() => {\n onConnectionChange?.(connectionState);\n }, [connectionState, onConnectionChange]);\n\n // ---------------------------------------------------------------------------\n // MESSAGE HANDLER\n // ---------------------------------------------------------------------------\n\n const handleSendMessage = useCallback(\n async (message: string) => {\n if (!agent) {\n console.error('[A2AChat] No agent configured');\n return;\n }\n\n const instance = instanceRef.current;\n if (!instance) {\n console.error('[A2AChat] Chat instance not ready');\n return;\n }\n\n onSend?.(message);\n setIsStreaming(true);\n setConnectionState('streaming');\n\n // Create translator for this response\n translatorRef.current = createTranslator(\n agent.name,\n agent.iconUrl ?? '/bot.svg'\n );\n\n // Create abort controller\n abortControllerRef.current = new AbortController();\n\n try {\n const response = await fetch('/api/agent/chat', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n agentUrl: agent.url,\n apiKey: agent.apiKey,\n message,\n extensions: extensions ?? agent.extensions,\n }),\n signal: abortControllerRef.current.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Request failed: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n // Process SSE stream\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n if (trimmedLine.startsWith('data: ')) {\n const dataStr = trimmedLine.slice(6);\n if (!dataStr || dataStr === '[DONE]') continue;\n\n try {\n const data = JSON.parse(dataStr);\n if (data.result) {\n const carbonChunks = translatorRef.current?.translateStreamChunk(data.result) ?? [];\n for (const chunk of carbonChunks) {\n await instance.messaging.addMessageChunk(chunk);\n }\n\n // Check for form requests\n if (data.result.status?.state === 'input-required') {\n const formRequest = extractFormRequest(data.result);\n if (formRequest) {\n setCurrentFormRequest(formRequest);\n setPendingTaskId(data.result.taskId);\n }\n }\n }\n } catch (e) {\n console.warn('[A2AChat] Failed to parse SSE data:', e);\n }\n }\n }\n }\n\n setConnectionState('connected');\n onResponse?.(translatorRef.current?.getState?.() ?? {});\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n console.log('[A2AChat] Request cancelled');\n } else {\n console.error('[A2AChat] Error:', error);\n setConnectionState('error');\n onError?.(error as Error);\n }\n } finally {\n setIsStreaming(false);\n abortControllerRef.current = null;\n }\n },\n [agent, extensions, onSend, onResponse, onError]\n );\n\n // ---------------------------------------------------------------------------\n // CANCEL HANDLER\n // ---------------------------------------------------------------------------\n\n const handleCancel = useCallback(() => {\n abortControllerRef.current?.abort();\n setIsStreaming(false);\n setConnectionState('connected');\n }, []);\n\n // ---------------------------------------------------------------------------\n // CUSTOM RESPONSE RENDERER\n // ---------------------------------------------------------------------------\n\n const renderCustomResponse = useCallback(\n (state: any, _instance: any) => {\n const messageItem = state.messageItem;\n const userDefined = messageItem?.user_defined;\n\n if (!userDefined) return null;\n\n // Custom renderer provided by consumer\n if (renderUserDefined) {\n return renderUserDefined(userDefined, messageItem);\n }\n\n // Text with citations\n if (userDefined.type === 'text_with_citations') {\n if (renderCitations) {\n return renderCitations(userDefined.citations || [], userDefined.text);\n }\n return (\n <CitationRenderer text={userDefined.text} citations={userDefined.citations || []} />\n );\n }\n\n // Sources list\n if (userDefined.type === 'sources_list' && userDefined.citations) {\n const citations = userDefined.citations as Citation[];\n if (citations.length === 0) return null;\n\n const uniqueCitations = citations.filter(\n (c, i, arr) => c.url && arr.findIndex((x) => x.url === c.url) === i\n );\n\n return (\n <div className=\"a2a-sources-list\">\n <h4 className=\"a2a-sources-list__title\">Sources</h4>\n <ol className=\"a2a-sources-list__items\">\n {uniqueCitations.map((citation, idx) => (\n <li key={idx} className=\"a2a-sources-list__item\">\n <a href={citation.url ?? '#'} target=\"_blank\" rel=\"noopener noreferrer\">\n {citation.title || citation.url}\n </a>\n </li>\n ))}\n </ol>\n </div>\n );\n }\n\n // Error\n if (userDefined.type === 'error' && userDefined.error) {\n if (renderError) {\n return renderError(userDefined.error as ErrorMetadata);\n }\n return <ErrorRenderer error={userDefined.error as ErrorMetadata} />;\n }\n\n return null;\n },\n [renderCitations, renderError, renderUserDefined]\n );\n\n // ---------------------------------------------------------------------------\n // FORM HANDLERS\n // ---------------------------------------------------------------------------\n\n const handleFormSubmit = useCallback(\n async (values: Record<string, unknown>) => {\n if (!pendingTaskId) return;\n\n setCurrentFormRequest(null);\n const taskId = pendingTaskId;\n setPendingTaskId(null);\n\n const formResponseMessage = JSON.stringify({\n type: 'form_response',\n taskId,\n values,\n });\n\n await handleSendMessage(formResponseMessage);\n },\n [pendingTaskId, handleSendMessage]\n );\n\n const handleFormCancel = useCallback(() => {\n setCurrentFormRequest(null);\n setPendingTaskId(null);\n }, []);\n\n // ---------------------------------------------------------------------------\n // AFTER RENDER HANDLER\n // ---------------------------------------------------------------------------\n\n const handleAfterRender = useCallback((instance: any) => {\n instanceRef.current = instance;\n console.log('[A2AChat] Chat instance ready');\n }, []);\n\n // ---------------------------------------------------------------------------\n // RENDER\n // ---------------------------------------------------------------------------\n\n if (!agent) {\n return (\n <div className={`a2a-chat a2a-chat--error ${className}`}>\n <p>No agent configured. Provide `agent`, `agentId`, or `agentUrl` prop.</p>\n </div>\n );\n }\n\n if (!carbonLoaded) {\n return (\n <div className={`a2a-chat a2a-chat--loading ${className}`}>\n <div className=\"a2a-chat__spinner\" />\n </div>\n );\n }\n\n const { ChatCustomElement, ChatContainer } = CarbonComponents;\n\n // Form overlay\n const formOverlay = currentFormRequest && (\n <div className=\"a2a-chat__form-overlay\">\n {renderForm ? (\n renderForm(currentFormRequest, handleFormSubmit)\n ) : (\n <FormRenderer\n form={currentFormRequest}\n onSubmit={handleFormSubmit}\n onCancel={handleFormCancel}\n />\n )}\n </div>\n );\n\n // Render based on layout\n if (layout === 'float' && ChatContainer) {\n return (\n <div className={`a2a-chat a2a-chat--float ${className}`}>\n <ChatContainer\n {...({\n debug: false,\n aiEnabled: true,\n injectCarbonTheme: 'white',\n } as any)}\n header={{\n title: agent?.name ?? 'AI Assistant',\n }}\n launcher={{\n isOn: true,\n }}\n onAfterRender={handleAfterRender}\n renderUserDefinedResponse={renderCustomResponse}\n messaging={{\n skipWelcome: true,\n customSendMessage: async (\n request: any,\n _options: any,\n _instance: any\n ) => {\n const text = request?.input?.text;\n if (text) {\n await handleSendMessage(text);\n }\n },\n } as any}\n />\n {formOverlay}\n </div>\n );\n }\n\n if (ChatCustomElement) {\n return (\n <div className={`a2a-chat a2a-chat--${layout} ${className}`}>\n <ChatCustomElement\n {...({\n className: 'a2a-chat__element',\n debug: false,\n aiEnabled: true,\n openChatByDefault: true,\n injectCarbonTheme: 'white',\n } as any)}\n header={{\n title: agent?.name ?? 'AI Assistant',\n showMinimize: layout !== 'fullscreen',\n }}\n launcher={{\n isOn: layout === 'float',\n }}\n layout={{\n showFrame: layout === 'float',\n showCloseAndRestartButton: layout !== 'fullscreen',\n }}\n onAfterRender={handleAfterRender}\n renderUserDefinedResponse={renderCustomResponse}\n messaging={{\n skipWelcome: true,\n messageLoadingIndicatorTimeoutSecs: 0,\n customSendMessage: async (\n request: any,\n _options: any,\n _instance: any\n ) => {\n const text = request?.input?.text;\n if (text) {\n await handleSendMessage(text);\n }\n },\n } as any}\n />\n {formOverlay}\n </div>\n );\n }\n\n return (\n <div className={`a2a-chat a2a-chat--loading ${className}`}>\n <div className=\"a2a-chat__spinner\" />\n </div>\n );\n}\n\n// Helper to extract form request from chunk\nfunction extractFormRequest(chunk: any): FormRequestMetadata | null {\n const metadata = chunk.status?.message?.metadata;\n if (!metadata) return null;\n\n const formData = metadata['https://a2a-extensions.agentstack.beeai.dev/ui/form-request/v1'];\n if (!formData) return null;\n\n return formData as FormRequestMetadata;\n}\n\nexport default A2AChat;\n","'use client';\n\nimport React from 'react';\nimport type { AgentConfig } from '../types';\n\nexport interface AgentSwitcherProps {\n /** Available agents */\n agents: AgentConfig[];\n\n /** Currently selected agent ID */\n currentAgentId?: string;\n\n /** Called when user selects an agent */\n onSelect: (agentId: string) => void;\n\n /** Variant style */\n variant?: 'dropdown' | 'tabs' | 'cards';\n\n /** Show agent descriptions */\n showDescriptions?: boolean;\n\n /** Show agent icons */\n showIcons?: boolean;\n\n /** Custom class name */\n className?: string;\n\n /** Disabled state */\n disabled?: boolean;\n\n /** Label text */\n label?: string;\n}\n\n/**\n * Component for switching between multiple agents\n *\n * @example\n * const { agents, currentAgent, selectAgent } = useAgentContext();\n *\n * <AgentSwitcher\n * agents={agents}\n * currentAgentId={currentAgent?.id}\n * onSelect={selectAgent}\n * />\n */\nexport function AgentSwitcher({\n agents,\n currentAgentId,\n onSelect,\n variant = 'dropdown',\n showDescriptions = false,\n showIcons = true,\n className = '',\n disabled = false,\n label = 'Select Agent',\n}: AgentSwitcherProps) {\n if (agents.length === 0) {\n return null;\n }\n\n if (variant === 'tabs') {\n return (\n <div className={`a2a-agent-switcher a2a-agent-switcher--tabs ${className}`}>\n <div className=\"a2a-agent-switcher__tabs\" role=\"tablist\" aria-label={label}>\n {agents.map((agent) => (\n <button\n key={agent.id}\n role=\"tab\"\n aria-selected={agent.id === currentAgentId}\n className={`a2a-agent-switcher__tab ${\n agent.id === currentAgentId ? 'a2a-agent-switcher__tab--active' : ''\n }`}\n onClick={() => onSelect(agent.id)}\n disabled={disabled}\n >\n {showIcons && agent.iconUrl && (\n <img\n src={agent.iconUrl}\n alt=\"\"\n className=\"a2a-agent-switcher__icon\"\n width={20}\n height={20}\n />\n )}\n <span>{agent.name}</span>\n </button>\n ))}\n </div>\n </div>\n );\n }\n\n if (variant === 'cards') {\n return (\n <div className={`a2a-agent-switcher a2a-agent-switcher--cards ${className}`}>\n <fieldset disabled={disabled}>\n <legend className=\"a2a-agent-switcher__label\">{label}</legend>\n <div className=\"a2a-agent-switcher__cards\">\n {agents.map((agent) => (\n <button\n key={agent.id}\n className={`a2a-agent-switcher__card ${\n agent.id === currentAgentId ? 'a2a-agent-switcher__card--active' : ''\n }`}\n onClick={() => onSelect(agent.id)}\n >\n {showIcons && agent.iconUrl && (\n <img\n src={agent.iconUrl}\n alt=\"\"\n className=\"a2a-agent-switcher__card-icon\"\n width={32}\n height={32}\n />\n )}\n <div className=\"a2a-agent-switcher__card-content\">\n <span className=\"a2a-agent-switcher__card-name\">{agent.name}</span>\n {showDescriptions && agent.description && (\n <span className=\"a2a-agent-switcher__card-description\">{agent.description}</span>\n )}\n </div>\n </button>\n ))}\n </div>\n </fieldset>\n </div>\n );\n }\n\n // Default: dropdown\n return (\n <div className={`a2a-agent-switcher a2a-agent-switcher--dropdown ${className}`}>\n <label className=\"a2a-agent-switcher__label\">\n {label}\n <select\n value={currentAgentId ?? ''}\n onChange={(e) => onSelect(e.target.value)}\n disabled={disabled}\n className=\"a2a-agent-switcher__select\"\n >\n {agents.map((agent) => (\n <option key={agent.id} value={agent.id}>\n {agent.name}\n </option>\n ))}\n </select>\n </label>\n </div>\n );\n}\n\nexport default AgentSwitcher;\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport type { AgentConfig, AgentState, AgentConnectionState } from '../types';\nimport { useAgentContextOptional } from '../components/AgentProvider';\nimport { A2AToCarbonTranslator, createTranslator } from '../lib/translator';\n\nexport interface UseA2AAgentOptions {\n /** Agent configuration (or use agentId with AgentProvider) */\n agent?: AgentConfig;\n\n /** Agent ID to look up from context */\n agentId?: string;\n\n /** Auto-connect on mount */\n autoConnect?: boolean;\n\n /** Callbacks */\n onConnect?: () => void;\n onDisconnect?: () => void;\n onError?: (error: Error) => void;\n onMessage?: (message: any) => void;\n}\n\nexport interface UseA2AAgentReturn {\n /** Current agent configuration */\n agent: AgentConfig | null;\n\n /** Connection state */\n state: AgentState;\n\n /** Send a message to the agent */\n sendMessage: (message: string) => Promise<any>;\n\n /** Cancel current streaming response */\n cancelStream: () => void;\n\n /** Disconnect from agent */\n disconnect: () => void;\n\n /** Reconnect to agent */\n reconnect: () => void;\n\n /** Clear conversation history */\n clearHistory: () => void;\n\n /** Whether currently streaming */\n isStreaming: boolean;\n\n /** Whether connected */\n isConnected: boolean;\n\n /** Last error */\n error: Error | null;\n}\n\n/**\n * Hook for interacting with an A2A agent programmatically\n *\n * @example\n * // With direct config\n * const { sendMessage, isStreaming } = useA2AAgent({\n * agent: { id: 'my-agent', name: 'My Agent', url: 'https://...' }\n * });\n *\n * @example\n * // With context provider\n * const { sendMessage } = useA2AAgent({ agentId: 'research-agent' });\n */\nexport function useA2AAgent(options: UseA2AAgentOptions = {}): UseA2AAgentReturn {\n const { agent: agentProp, agentId, autoConnect = false, onConnect, onDisconnect, onError, onMessage } = options;\n\n const agentContext = useAgentContextOptional();\n\n // Resolve agent config\n const agent = agentProp ?? (agentId ? agentContext?.getAgent(agentId) : agentContext?.currentAgent) ?? null;\n\n // State\n const [connectionState, setConnectionState] = useState<AgentConnectionState>('disconnected');\n const [isStreaming, setIsStreaming] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [taskId, setTaskId] = useState<string | undefined>();\n const [contextId, setContextId] = useState<string | undefined>();\n\n // Refs\n const abortControllerRef = useRef<AbortController | null>(null);\n const translatorRef = useRef<A2AToCarbonTranslator | null>(null);\n const historyRef = useRef<any[]>([]);\n\n // Send message\n const sendMessage = useCallback(\n async (message: string) => {\n if (!agent) {\n const err = new Error('No agent configured');\n setError(err);\n onError?.(err);\n throw err;\n }\n\n setIsStreaming(true);\n setConnectionState('streaming');\n setError(null);\n\n translatorRef.current = createTranslator(agent.name, agent.iconUrl);\n abortControllerRef.current = new AbortController();\n\n try {\n const response = await fetch('/api/agent/chat', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n agentUrl: agent.url,\n apiKey: agent.apiKey,\n message,\n extensions: agent.extensions,\n }),\n signal: abortControllerRef.current.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Request failed: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n let result: any = null;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n if (line.trim().startsWith('data: ')) {\n const dataStr = line.trim().slice(6);\n if (!dataStr || dataStr === '[DONE]') continue;\n\n try {\n const data = JSON.parse(dataStr);\n if (data.result) {\n result = data.result;\n setTaskId(data.result.taskId);\n setContextId(data.result.contextId);\n onMessage?.(data.result);\n }\n } catch (e) {\n // Skip parse errors\n }\n }\n }\n }\n\n setConnectionState('connected');\n onConnect?.();\n return result;\n } catch (err) {\n if ((err as Error).name !== 'AbortError') {\n setError(err as Error);\n setConnectionState('error');\n onError?.(err as Error);\n }\n throw err;\n } finally {\n setIsStreaming(false);\n abortControllerRef.current = null;\n }\n },\n [agent, onConnect, onError, onMessage]\n );\n\n // Cancel stream\n const cancelStream = useCallback(() => {\n abortControllerRef.current?.abort();\n setIsStreaming(false);\n setConnectionState('connected');\n }, []);\n\n // Disconnect\n const disconnect = useCallback(() => {\n cancelStream();\n setConnectionState('disconnected');\n setTaskId(undefined);\n setContextId(undefined);\n onDisconnect?.();\n }, [cancelStream, onDisconnect]);\n\n // Reconnect\n const reconnect = useCallback(() => {\n disconnect();\n setConnectionState('connecting');\n // The next sendMessage will establish connection\n setConnectionState('connected');\n }, [disconnect]);\n\n // Clear history\n const clearHistory = useCallback(() => {\n historyRef.current = [];\n setTaskId(undefined);\n setContextId(undefined);\n }, []);\n\n // Auto-connect\n useEffect(() => {\n if (autoConnect && agent && connectionState === 'disconnected') {\n setConnectionState('connected');\n onConnect?.();\n }\n }, [autoConnect, agent, connectionState, onConnect]);\n\n return {\n agent,\n state: {\n connectionState,\n error: error ?? undefined,\n taskId,\n contextId,\n },\n sendMessage,\n cancelStream,\n disconnect,\n reconnect,\n clearHistory,\n isStreaming,\n isConnected: connectionState === 'connected' || connectionState === 'streaming',\n error,\n };\n}\n\nexport default useA2AAgent;\n","'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport type { AgentConfig } from '../types';\n\nexport interface UseMultiAgentOptions {\n /** Initial agents to register */\n agents?: AgentConfig[];\n\n /** Default agent ID */\n defaultAgentId?: string;\n\n /** Called when agent changes */\n onAgentChange?: (agent: AgentConfig) => void;\n}\n\nexport interface UseMultiAgentReturn {\n /** All registered agents */\n agents: AgentConfig[];\n\n /** Currently active agent */\n currentAgent: AgentConfig | null;\n\n /** Switch to a different agent */\n switchAgent: (agentId: string) => void;\n\n /** Register a new agent */\n registerAgent: (agent: AgentConfig) => void;\n\n /** Unregister an agent */\n unregisterAgent: (agentId: string) => void;\n\n /** Update an existing agent's config */\n updateAgent: (agentId: string, updates: Partial<AgentConfig>) => void;\n\n /** Get agent by ID */\n getAgent: (agentId: string) => AgentConfig | undefined;\n\n /** Check if agent exists */\n hasAgent: (agentId: string) => boolean;\n}\n\n/**\n * Hook for managing multiple agents without using AgentProvider\n *\n * @example\n * const { currentAgent, switchAgent, agents } = useMultiAgent({\n * agents: [\n * { id: 'research', name: 'Research Agent', url: '...' },\n * { id: 'code', name: 'Code Agent', url: '...' },\n * ],\n * defaultAgentId: 'research'\n * });\n */\nexport function useMultiAgent(options: UseMultiAgentOptions = {}): UseMultiAgentReturn {\n const { agents: initialAgents = [], defaultAgentId, onAgentChange } = options;\n\n const [agents, setAgents] = useState<AgentConfig[]>(initialAgents);\n const [currentAgentId, setCurrentAgentId] = useState<string | null>(\n defaultAgentId ?? initialAgents[0]?.id ?? null\n );\n\n const currentAgent = useMemo(\n () => agents.find((a) => a.id === currentAgentId) ?? null,\n [agents, currentAgentId]\n );\n\n const switchAgent = useCallback(\n (agentId: string) => {\n const agent = agents.find((a) => a.id === agentId);\n if (agent) {\n setCurrentAgentId(agentId);\n onAgentChange?.(agent);\n } else {\n console.warn(`[useMultiAgent] Agent \"${agentId}\" not found`);\n }\n },\n [agents, onAgentChange]\n );\n\n const registerAgent = useCallback((agent: AgentConfig) => {\n setAgents((prev) => {\n if (prev.some((a) => a.id === agent.id)) {\n console.warn(`[useMultiAgent] Agent \"${agent.id}\" already exists, updating`);\n return prev.map((a) => (a.id === agent.id ? agent : a));\n }\n return [...prev, agent];\n });\n }, []);\n\n const unregisterAgent = useCallback(\n (agentId: string) => {\n setAgents((prev) => prev.filter((a) => a.id !== agentId));\n if (currentAgentId === agentId) {\n setCurrentAgentId(agents[0]?.id ?? null);\n }\n },\n [currentAgentId, agents]\n );\n\n const updateAgent = useCallback((agentId: string, updates: Partial<AgentConfig>) => {\n setAgents((prev) =>\n prev.map((a) => (a.id === agentId ? { ...a, ...updates, id: agentId } : a))\n );\n }, []);\n\n const getAgent = useCallback((agentId: string) => agents.find((a) => a.id === agentId), [agents]);\n\n const hasAgent = useCallback((agentId: string) => agents.some((a) => a.id === agentId), [agents]);\n\n return {\n agents,\n currentAgent,\n switchAgent,\n registerAgent,\n unregisterAgent,\n updateAgent,\n getAgent,\n hasAgent,\n };\n}\n\nexport default useMultiAgent;\n"]}
|