@agentfield/sdk 0.1.64 → 0.1.65-rc.2

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/harness/schema.ts","../src/harness/types.ts","../src/harness/providers/claude.ts","../src/harness/cli.ts","../src/harness/providers/codex.ts","../src/harness/providers/gemini.ts","../src/harness/providers/opencode.ts","../src/harness/providers/factory.ts","../src/harness/runner.ts","../src/agent/ReasonerRegistry.ts","../src/agent/SkillRegistry.ts","../src/context/ExecutionContext.ts","../src/ai/ToolCalling.ts","../src/context/ReasonerContext.ts","../src/context/SkillContext.ts","../src/ai/RateLimiter.ts","../src/ai/AIClient.ts","../src/observability/ExecutionLogger.ts","../src/utils/httpAgents.ts","../src/client/DIDAuthenticator.ts","../src/client/AgentFieldClient.ts","../src/memory/MemoryClient.ts","../src/memory/MemoryEventClient.ts","../src/memory/MemoryInterface.ts","../src/did/DidClient.ts","../src/did/DidInterface.ts","../src/did/DidManager.ts","../src/utils/pattern.ts","../src/utils/schema.ts","../src/workflow/WorkflowReporter.ts","../src/mcp/MCPClient.ts","../src/mcp/MCPClientRegistry.ts","../src/mcp/MCPToolRegistrar.ts","../src/verification/LocalVerifier.ts","../src/agent/processLogs.ts","../src/agent/Agent.ts","../src/router/AgentRouter.ts","../src/ai/multimodal.ts","../src/ai/MultimodalResponse.ts","../src/harness/index.ts","../src/status/ExecutionStatus.ts","../src/approval/ApprovalClient.ts"],"names":["require","text","path","jsonSchema","isRecord","resolve","ClaudeCodeProvider","CodexProvider","GeminiProvider","OpenCodeProvider","record","crypto","parsed","call","response","generateText","axios","Buffer","res","tools","tool","runId","rootWorkflowId","fs","url"],"mappings":"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","file":"index.js","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\n\nexport const OUTPUT_FILENAME = '.agentfield_output.json';\nexport const SCHEMA_FILENAME = '.agentfield_schema.json';\nexport const LARGE_SCHEMA_TOKEN_THRESHOLD = 4000;\n\ntype JsonSchemaRecord = Record<string, unknown>;\n\ntype JsonSchemaFactory = (schema: unknown) => JsonSchemaRecord;\n\ntype JsonSchemaModule = {\n zodToJsonSchema?: JsonSchemaFactory;\n default?: JsonSchemaFactory;\n};\n\ntype JsonSchemaProvider = {\n jsonSchema: () => JsonSchemaRecord;\n};\n\ntype ParseSchema = {\n parse: (value: unknown) => unknown;\n};\n\nlet zodConverter: JsonSchemaFactory | null | undefined;\n\nfunction getZodConverter(): JsonSchemaFactory | null {\n if (zodConverter !== undefined) {\n return zodConverter;\n }\n\n try {\n const require = createRequire(import.meta.url);\n const mod = require('zod-to-json-schema') as JsonSchemaModule;\n zodConverter = mod.zodToJsonSchema ?? mod.default ?? null;\n } catch {\n zodConverter = null;\n }\n\n return zodConverter;\n}\n\nfunction isRecord(value: unknown): value is JsonSchemaRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction hasJsonSchema(value: unknown): value is JsonSchemaProvider {\n return isRecord(value) && typeof value.jsonSchema === 'function';\n}\n\nfunction hasParse(value: unknown): value is ParseSchema {\n return isRecord(value) && typeof value.parse === 'function';\n}\n\nfunction estimateTokens(text: string): number {\n return Math.floor(text.length / 4);\n}\n\nfunction writeSchemaFile(schemaJson: string, cwd: string): string {\n const filePath = getSchemaPath(cwd);\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const fd = fs.openSync(filePath, 'w', 0o600);\n try {\n fs.writeFileSync(fd, schemaJson, 'utf8');\n } finally {\n fs.closeSync(fd);\n }\n return filePath;\n}\n\nfunction validateAgainstSchema(data: unknown, schema: unknown): unknown {\n if (hasParse(schema)) {\n return schema.parse(data);\n }\n return data;\n}\n\nexport function getOutputPath(cwd: string): string {\n return path.join(cwd, OUTPUT_FILENAME);\n}\n\nexport function getSchemaPath(cwd: string): string {\n return path.join(cwd, SCHEMA_FILENAME);\n}\n\nexport function schemaToJsonSchema(schema: unknown): JsonSchemaRecord {\n if (isRecord(schema)) {\n if ('type' in schema || 'properties' in schema || '$schema' in schema) {\n return schema;\n }\n if (hasJsonSchema(schema)) {\n return schema.jsonSchema();\n }\n }\n\n const converter = getZodConverter();\n if (converter !== null) {\n return converter(schema);\n }\n\n throw new TypeError('Unsupported schema type. Expected a Zod schema, JSON schema object, or jsonSchema() provider.');\n}\n\nexport function isLargeSchema(schemaJson: string): boolean {\n return estimateTokens(schemaJson) > LARGE_SCHEMA_TOKEN_THRESHOLD;\n}\n\nexport function buildPromptSuffix(schema: unknown, cwd: string): string {\n const jsonSchema = schemaToJsonSchema(schema);\n const schemaJson = JSON.stringify(jsonSchema, null, 2);\n const outputPath = getOutputPath(cwd);\n\n if (isLargeSchema(schemaJson)) {\n const schemaPath = writeSchemaFile(schemaJson, cwd);\n return (\n '\\n\\n---\\n' +\n 'OUTPUT REQUIREMENTS:\\n' +\n `Read the JSON Schema at: ${schemaPath}\\n` +\n `Write your final answer as valid JSON conforming to that schema to: ${outputPath}\\n` +\n 'Do not include any text outside the JSON in that file. Do not wrap in markdown fences.'\n );\n }\n\n return (\n '\\n\\n---\\n' +\n 'OUTPUT REQUIREMENTS:\\n' +\n `Write your final answer as valid JSON to the file: ${outputPath}\\n` +\n 'The JSON must conform to this schema:\\n' +\n `${schemaJson}\\n` +\n 'Do not include any text outside the JSON in that file. Do not wrap in markdown fences.'\n );\n}\n\nexport function cosmeticRepair(raw: string): string {\n let text = raw.trim();\n\n const fenceMatch = text.match(/^```(?:json)?\\s*\\n([\\s\\S]*?)```\\s*$/);\n if (fenceMatch) {\n text = fenceMatch[1].trim();\n }\n\n if (text.length > 0 && text[0] !== '{' && text[0] !== '[') {\n const firstJsonCharIndex = [...text].findIndex((char) => char === '{' || char === '[');\n if (firstJsonCharIndex >= 0) {\n text = text.slice(firstJsonCharIndex);\n }\n }\n\n text = text.replace(/,\\s*([}\\]])/g, '$1');\n\n const openBraces = (text.match(/{/g)?.length ?? 0) - (text.match(/}/g)?.length ?? 0);\n const openBrackets = (text.match(/\\[/g)?.length ?? 0) - (text.match(/\\]/g)?.length ?? 0);\n\n if (openBraces > 0 || openBrackets > 0) {\n text += ']'.repeat(openBrackets) + '}'.repeat(openBraces);\n }\n\n return text;\n}\n\nexport function readAndParse(filePath: string): unknown | null {\n try {\n const content = fs.readFileSync(filePath, 'utf8');\n if (content.trim().length === 0) {\n return null;\n }\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\nexport function readRepairAndParse(filePath: string): unknown | null {\n try {\n const content = fs.readFileSync(filePath, 'utf8');\n if (content.trim().length === 0) {\n return null;\n }\n return JSON.parse(cosmeticRepair(content));\n } catch {\n return null;\n }\n}\n\nexport function parseAndValidate(filePath: string, schema: unknown): unknown | null {\n const parsed = readAndParse(filePath);\n if (parsed !== null) {\n try {\n return validateAgainstSchema(parsed, schema);\n } catch {\n }\n }\n\n const repaired = readRepairAndParse(filePath);\n if (repaired !== null) {\n try {\n return validateAgainstSchema(repaired, schema);\n } catch {\n return null;\n }\n }\n\n return null;\n}\n\nexport function cleanupTempFiles(cwd: string): void {\n for (const filename of [OUTPUT_FILENAME, SCHEMA_FILENAME]) {\n try {\n fs.unlinkSync(path.join(cwd, filename));\n } catch {\n }\n }\n}\n\nexport function buildFollowupPrompt(errorMessage: string, cwd: string): string {\n const outputPath = getOutputPath(cwd);\n return (\n `The JSON at ${outputPath} failed validation: ${errorMessage}\\n` +\n 'Please rewrite the corrected, valid JSON to the same file.'\n );\n}\n","export interface HarnessConfig {\n provider: 'claude-code' | 'codex' | 'gemini' | 'opencode';\n model?: string;\n maxTurns?: number;\n maxBudgetUsd?: number;\n maxRetries?: number;\n initialDelay?: number;\n maxDelay?: number;\n backoffFactor?: number;\n tools?: string[];\n permissionMode?: string;\n systemPrompt?: string;\n env?: Record<string, string>;\n cwd?: string;\n codexBin?: string;\n geminiBin?: string;\n opencodeBin?: string;\n}\n\nexport interface HarnessOptions {\n provider?: string;\n model?: string;\n maxTurns?: number;\n maxBudgetUsd?: number;\n maxRetries?: number;\n initialDelay?: number;\n maxDelay?: number;\n backoffFactor?: number;\n tools?: string[];\n permissionMode?: string;\n systemPrompt?: string;\n env?: Record<string, string>;\n cwd?: string;\n codexBin?: string;\n geminiBin?: string;\n opencodeBin?: string;\n schema?: unknown;\n}\n\nexport interface Metrics {\n durationMs: number;\n durationApiMs: number;\n numTurns: number;\n totalCostUsd?: number;\n usage?: Record<string, unknown>;\n sessionId: string;\n}\n\nexport interface RawResult {\n result?: string;\n messages: Array<Record<string, unknown>>;\n metrics: Metrics;\n isError: boolean;\n errorMessage?: string;\n}\n\nexport interface HarnessResult {\n result?: string;\n parsed?: unknown;\n isError: boolean;\n errorMessage?: string;\n costUsd?: number;\n numTurns: number;\n durationMs: number;\n sessionId: string;\n messages: Array<Record<string, unknown>>;\n readonly text: string;\n}\n\nexport function createHarnessResult(partial?: Partial<Omit<HarnessResult, 'text'>>): HarnessResult {\n const r = {\n isError: false,\n numTurns: 0,\n durationMs: 0,\n sessionId: '',\n messages: [],\n ...partial,\n get text(): string {\n return this.result ?? '';\n },\n };\n return r;\n}\n\nexport function createMetrics(partial?: Partial<Metrics>): Metrics {\n return { durationMs: 0, durationApiMs: 0, numTurns: 0, sessionId: '', ...partial };\n}\n\nexport function createRawResult(partial?: Partial<RawResult>): RawResult {\n return { messages: [], metrics: createMetrics(), isError: false, ...partial };\n}\n","import type { HarnessProvider } from './base.js';\nimport type { RawResult } from '../types.js';\nimport { createMetrics, createRawResult } from '../types.js';\n\ntype QueryInput = {\n prompt: string;\n options: Record<string, unknown>;\n};\n\ntype ClaudeSdkModule = {\n query: (input: QueryInput) => AsyncIterable<unknown>;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction getString(record: Record<string, unknown>, key: string): string | undefined {\n const value = record[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction getNumber(record: Record<string, unknown>, key: string): number | undefined {\n const value = record[key];\n return typeof value === 'number' ? value : undefined;\n}\n\nexport class ClaudeCodeProvider implements HarnessProvider {\n public async execute(prompt: string, options: Record<string, unknown>): Promise<RawResult> {\n let sdk: ClaudeSdkModule;\n try {\n const mod = await import('@anthropic-ai/claude-agent-sdk');\n sdk = mod as ClaudeSdkModule;\n } catch {\n throw new Error(\n \"@anthropic-ai/claude-agent-sdk is required for the 'claude-code' provider. \" +\n 'Install it with: npm install @anthropic-ai/claude-agent-sdk'\n );\n }\n\n const agentOptions: Record<string, unknown> = {};\n if (options.model !== undefined) agentOptions.model = options.model;\n if (options.cwd !== undefined) agentOptions.cwd = options.cwd;\n if (options.maxTurns !== undefined) agentOptions.max_turns = options.maxTurns;\n if (options.tools !== undefined) agentOptions.allowed_tools = options.tools;\n if (options.systemPrompt !== undefined) agentOptions.system_prompt = options.systemPrompt;\n if (options.maxBudgetUsd !== undefined) agentOptions.max_budget_usd = options.maxBudgetUsd;\n if (options.permissionMode !== undefined) {\n const modeMap: Record<string, string> = { auto: 'bypassPermissions', plan: 'plan' };\n const raw = String(options.permissionMode);\n agentOptions.permission_mode = modeMap[raw] ?? raw;\n }\n if (options.env !== undefined) agentOptions.env = options.env;\n\n const messages: Array<Record<string, unknown>> = [];\n let resultText: string | undefined;\n let totalCost: number | undefined;\n let numTurns = 0;\n let sessionId = '';\n const startApi = Date.now();\n\n try {\n for await (const msg of sdk.query({ prompt, options: agentOptions })) {\n const msgObj = isRecord(msg) ? msg : { raw: String(msg) };\n messages.push(msgObj);\n\n const msgType = getString(msgObj, 'type') ?? '';\n if (msgType === 'result') {\n const resultValue = msgObj.result ?? msgObj.text;\n resultText = typeof resultValue === 'string' ? resultValue : resultValue == null ? '' : String(resultValue);\n\n const sid = getString(msgObj, 'session_id');\n if (sid !== undefined) {\n sessionId = sid;\n }\n\n const costUsd = getNumber(msgObj, 'cost_usd');\n const totalCostUsd = getNumber(msgObj, 'total_cost_usd');\n if (costUsd !== undefined) {\n totalCost = costUsd;\n } else if (totalCostUsd !== undefined) {\n totalCost = totalCostUsd;\n }\n\n const turns = getNumber(msgObj, 'num_turns');\n numTurns = turns === undefined ? messages.length : Math.trunc(turns);\n } else if (msgType === 'assistant' && resultText === undefined) {\n let content: unknown = msgObj.content;\n if (content === undefined && isRecord(msgObj.message)) {\n content = msgObj.message.content;\n }\n\n if (typeof content === 'string') {\n resultText = content;\n } else if (Array.isArray(content)) {\n for (const block of content) {\n if (isRecord(block) && block.type === 'text' && typeof block.text === 'string') {\n resultText = block.text;\n }\n }\n }\n }\n }\n\n return createRawResult({\n result: resultText,\n messages,\n metrics: createMetrics({\n durationApiMs: Date.now() - startApi,\n numTurns,\n totalCostUsd: totalCost,\n sessionId,\n }),\n isError: false,\n });\n } catch (error: unknown) {\n return createRawResult({\n result: undefined,\n messages,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi, sessionId }),\n isError: true,\n errorMessage: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n","import { spawn } from 'node:child_process';\n\nexport interface CliResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\nexport function runCli(\n cmd: string[],\n options?: { env?: Record<string, string>; cwd?: string; timeout?: number }\n): Promise<CliResult> {\n return new Promise((resolve, reject) => {\n const [bin, ...args] = cmd;\n const proc = spawn(bin, args, {\n env: { ...process.env, ...options?.env },\n cwd: options?.cwd,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout.on('data', (data: Uint8Array | string) => {\n stdout += data.toString();\n });\n proc.stderr.on('data', (data: Uint8Array | string) => {\n stderr += data.toString();\n });\n\n const timer = options?.timeout\n ? setTimeout(() => {\n proc.kill();\n reject(new Error(`CLI timed out after ${options.timeout}ms`));\n }, options.timeout)\n : undefined;\n\n proc.on('close', (code) => {\n if (timer) {\n clearTimeout(timer);\n }\n resolve({ stdout, stderr, exitCode: code ?? 0 });\n });\n\n proc.on('error', (err) => {\n if (timer) {\n clearTimeout(timer);\n }\n reject(err);\n });\n });\n}\n\nexport function parseJsonl(text: string): Array<Record<string, unknown>> {\n const events: Array<Record<string, unknown>> = [];\n for (const line of text.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n try {\n events.push(JSON.parse(trimmed) as Record<string, unknown>);\n } catch {\n continue;\n }\n }\n return events;\n}\n\nexport function extractFinalText(events: Array<Record<string, unknown>>): string | undefined {\n let result: string | undefined;\n for (const event of events) {\n const type = event.type;\n if (type === 'item.completed') {\n const item = event.item;\n if (typeof item === 'object' && item !== null) {\n const itemType = (item as Record<string, unknown>).type;\n const itemText = (item as Record<string, unknown>).text;\n if (itemType === 'agent_message' && typeof itemText === 'string') {\n result = itemText;\n }\n }\n } else if (type === 'result') {\n const candidate = event.result ?? event.text;\n if (typeof candidate === 'string') {\n result = candidate;\n }\n } else if (type === 'turn.completed' && typeof event.text === 'string') {\n result = event.text;\n } else if ((type === 'message' || type === 'assistant') && typeof event.content === 'string') {\n result = event.content;\n }\n }\n return result;\n}\n","import type { HarnessProvider } from './base.js';\nimport type { RawResult } from '../types.js';\nimport { createRawResult, createMetrics } from '../types.js';\nimport { runCli, parseJsonl, extractFinalText } from '../cli.js';\n\nexport class CodexProvider implements HarnessProvider {\n private readonly bin: string;\n\n constructor(binPath = 'codex') {\n this.bin = binPath;\n }\n\n async execute(prompt: string, options: Record<string, unknown>): Promise<RawResult> {\n const cmd = [this.bin, 'exec', '--json'];\n\n if (options.cwd) {\n cmd.push('-C', String(options.cwd));\n }\n if (options.permissionMode === 'auto') {\n cmd.push('--full-auto');\n }\n cmd.push(prompt);\n\n const startApi = Date.now();\n try {\n const { stdout, stderr, exitCode } = await runCli(cmd, {\n env: options.env as Record<string, string> | undefined,\n cwd: options.cwd as string | undefined,\n });\n\n const events = parseJsonl(stdout);\n const resultText = extractFinalText(events);\n\n let numTurns = 0;\n let sessionId = '';\n for (const event of events) {\n if (event.type === 'turn.completed') {\n numTurns += 1;\n }\n if (event.type === 'thread.started') {\n const threadId = event.thread_id;\n if (typeof threadId === 'string') {\n sessionId = threadId;\n }\n }\n }\n\n const isError = exitCode !== 0 && !resultText;\n\n return createRawResult({\n result: resultText,\n messages: events,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi, numTurns, sessionId }),\n isError,\n errorMessage: isError ? stderr.trim() : undefined,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('ENOENT')) {\n return createRawResult({\n isError: true,\n errorMessage: `Codex binary not found at '${this.bin}'. Install: https://github.com/openai/codex`,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n return createRawResult({\n isError: true,\n errorMessage: msg,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n }\n}\n","import type { HarnessProvider } from './base.js';\nimport type { RawResult } from '../types.js';\nimport { createRawResult, createMetrics } from '../types.js';\nimport { runCli } from '../cli.js';\n\nexport class GeminiProvider implements HarnessProvider {\n private readonly bin: string;\n\n constructor(binPath = 'gemini') {\n this.bin = binPath;\n }\n\n async execute(prompt: string, options: Record<string, unknown>): Promise<RawResult> {\n const cmd = [this.bin];\n\n if (options.cwd) {\n cmd.push('-C', String(options.cwd));\n }\n if (options.permissionMode === 'auto') {\n cmd.push('--sandbox');\n }\n if (options.model) {\n cmd.push('-m', String(options.model));\n }\n cmd.push('-p', prompt);\n\n const startApi = Date.now();\n try {\n const { stdout, stderr, exitCode } = await runCli(cmd, {\n env: options.env as Record<string, string> | undefined,\n cwd: options.cwd as string | undefined,\n });\n\n const resultText = stdout.trim() || undefined;\n const isError = exitCode !== 0 && !resultText;\n\n return createRawResult({\n result: resultText,\n messages: [],\n metrics: createMetrics({\n durationApiMs: Date.now() - startApi,\n numTurns: resultText ? 1 : 0,\n sessionId: '',\n }),\n isError,\n errorMessage: isError ? stderr.trim() : undefined,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('ENOENT')) {\n return createRawResult({\n isError: true,\n errorMessage: `Gemini binary not found at '${this.bin}'. Install: https://github.com/google-gemini/gemini-cli`,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n return createRawResult({\n isError: true,\n errorMessage: msg,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n }\n}\n","import type { HarnessProvider } from './base.js';\nimport type { RawResult } from '../types.js';\nimport { createRawResult, createMetrics } from '../types.js';\nimport { runCli } from '../cli.js';\n\nexport class OpenCodeProvider implements HarnessProvider {\n private readonly bin: string;\n\n constructor(binPath = 'opencode') {\n this.bin = binPath;\n }\n\n async execute(prompt: string, options: Record<string, unknown>): Promise<RawResult> {\n const cmd = [this.bin];\n\n // Use -c for cwd (project directory)\n if (options.cwd && typeof options.cwd === 'string') {\n cmd.push('-c', options.cwd);\n } else if (options.project_dir && typeof options.project_dir === 'string') {\n cmd.push('-c', options.project_dir);\n }\n\n // Model is set via environment variable, not CLI flag\n const env: Record<string, string> = { ...(options.env as Record<string, string>) };\n if (options.model) {\n env['MODEL'] = String(options.model);\n }\n\n // Handle system prompt - prepend to user prompt since OpenCode\n // has no native --system-prompt flag\n let effectivePrompt = prompt;\n if (options.system_prompt && typeof options.system_prompt === 'string' && options.system_prompt.trim()) {\n effectivePrompt = `SYSTEM INSTRUCTIONS:\\n${options.system_prompt.trim()}\\n\\n---\\n\\nUSER REQUEST:\\n${prompt}`;\n }\n\n // Use -p for single prompt mode (non-interactive)\n cmd.push('-p', effectivePrompt);\n\n const startApi = Date.now();\n try {\n const { stdout, stderr, exitCode } = await runCli(cmd, { env });\n\n const resultText = stdout.trim() || undefined;\n const isError = exitCode !== 0 && !resultText;\n\n return createRawResult({\n result: resultText,\n messages: [],\n metrics: createMetrics({\n durationApiMs: Date.now() - startApi,\n numTurns: resultText ? 1 : 0,\n sessionId: '',\n }),\n isError,\n errorMessage: isError ? stderr.trim() : undefined,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('ENOENT')) {\n return createRawResult({\n isError: true,\n errorMessage: `OpenCode binary not found at '${this.bin}'. Install: https://github.com/opencode-ai/opencode`,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n return createRawResult({\n isError: true,\n errorMessage: msg,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n }\n}\n","import type { HarnessProvider } from './base.js';\nimport type { HarnessConfig } from '../types.js';\n\nexport const SUPPORTED_PROVIDERS = new Set(['claude-code', 'codex', 'gemini', 'opencode']);\n\nexport async function buildProvider(config: HarnessConfig): Promise<HarnessProvider> {\n if (!SUPPORTED_PROVIDERS.has(config.provider)) {\n throw new Error(\n `Unknown harness provider: \"${config.provider}\". Supported: ${[...SUPPORTED_PROVIDERS].sort().join(', ')}`\n );\n }\n if (config.provider === 'claude-code') {\n const { ClaudeCodeProvider } = await import('./claude.js');\n return new ClaudeCodeProvider();\n }\n if (config.provider === 'codex') {\n const { CodexProvider } = await import('./codex.js');\n return new CodexProvider(config.codexBin ?? 'codex');\n }\n if (config.provider === 'gemini') {\n const { GeminiProvider } = await import('./gemini.js');\n return new GeminiProvider(config.geminiBin ?? 'gemini');\n }\n if (config.provider === 'opencode') {\n const { OpenCodeProvider } = await import('./opencode.js');\n return new OpenCodeProvider(config.opencodeBin ?? 'opencode');\n }\n throw new Error(`Provider \"${config.provider}\" is not yet implemented.`);\n}\n","import { buildPromptSuffix, cleanupTempFiles, getOutputPath, parseAndValidate } from './schema.js';\nimport { buildProvider } from './providers/factory.js';\nimport type { HarnessProvider } from './providers/base.js';\nimport { createHarnessResult, createRawResult, type HarnessConfig, type HarnessOptions, type RawResult } from './types.js';\n\nconst TRANSIENT_PATTERNS = [\n 'rate limit',\n 'rate_limit',\n 'overloaded',\n 'timeout',\n 'timed out',\n 'connection reset',\n 'connection refused',\n 'temporarily unavailable',\n 'service unavailable',\n '503',\n '502',\n '504',\n 'internal server error',\n '500',\n];\n\ntype RunnerOptions = Omit<HarnessOptions, 'schema'> & {\n maxRetries?: number;\n initialDelay?: number;\n maxDelay?: number;\n backoffFactor?: number;\n codexBin?: string;\n geminiBin?: string;\n opencodeBin?: string;\n};\n\nexport class HarnessRunner {\n public constructor(private readonly config?: HarnessConfig) {}\n\n public async run(prompt: string, options: HarnessOptions = {}) {\n const { schema, ...rest } = options;\n const resolved = this.resolveOptions(this.config, rest);\n\n if (!resolved.provider) {\n throw new Error(\"No harness provider specified. Set 'provider' in HarnessConfig or pass it to .harness() call.\");\n }\n\n const cwd = resolved.cwd ?? '.';\n const provider = await this.buildProvider(resolved.provider, resolved);\n const effectivePrompt = schema === undefined ? prompt : `${prompt}${buildPromptSuffix(schema, cwd)}`;\n const startTime = Date.now();\n\n try {\n const raw = await this.executeWithRetry(provider, effectivePrompt, resolved);\n\n if (schema !== undefined) {\n return this.handleSchemaOutput(raw, schema, cwd, startTime);\n }\n\n return createHarnessResult({\n result: raw.result,\n isError: raw.isError,\n errorMessage: raw.errorMessage,\n costUsd: raw.metrics.totalCostUsd,\n numTurns: raw.metrics.numTurns,\n durationMs: Date.now() - startTime,\n sessionId: raw.metrics.sessionId,\n messages: raw.messages,\n });\n } finally {\n if (schema !== undefined) {\n cleanupTempFiles(cwd);\n }\n }\n }\n\n public resolveOptions(config: Partial<HarnessConfig> | undefined, overrides: RunnerOptions): RunnerOptions {\n const out: RunnerOptions = {};\n if (config) {\n for (const key of [\n 'provider',\n 'model',\n 'maxTurns',\n 'maxBudgetUsd',\n 'maxRetries',\n 'initialDelay',\n 'maxDelay',\n 'backoffFactor',\n 'tools',\n 'permissionMode',\n 'systemPrompt',\n 'env',\n 'cwd',\n 'codexBin',\n 'geminiBin',\n 'opencodeBin',\n ] as const) {\n const value = config[key];\n if (value !== undefined && value !== null) {\n (out as Record<string, unknown>)[key] = value;\n }\n }\n }\n\n for (const [key, value] of Object.entries(overrides)) {\n if (value !== undefined && value !== null) {\n out[key as keyof RunnerOptions] = value as never;\n }\n }\n\n return out;\n }\n\n public isTransient(errorStr: string): boolean {\n const lower = errorStr.toLowerCase();\n return TRANSIENT_PATTERNS.some((pattern) => lower.includes(pattern));\n }\n\n public async executeWithRetry(provider: HarnessProvider, prompt: string, options: RunnerOptions): Promise<RawResult> {\n const maxRetries = options.maxRetries ?? 3;\n const initialDelay = options.initialDelay ?? 1.0;\n const maxDelay = options.maxDelay ?? 30.0;\n const backoffFactor = options.backoffFactor ?? 2.0;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt += 1) {\n try {\n const result = await provider.execute(prompt, options as Record<string, unknown>);\n if (!result.isError) {\n return result;\n }\n\n const message = result.errorMessage ?? '';\n if (this.isTransient(message) && attempt < maxRetries) {\n const delay = this.computeBackoffDelay(initialDelay, backoffFactor, maxDelay, attempt);\n await this.sleep(delay);\n continue;\n }\n return result;\n } catch (error: unknown) {\n lastError = error;\n const message = error instanceof Error ? error.message : String(error);\n if (this.isTransient(message) && attempt < maxRetries) {\n const delay = this.computeBackoffDelay(initialDelay, backoffFactor, maxDelay, attempt);\n await this.sleep(delay);\n continue;\n }\n throw error;\n }\n }\n\n if (lastError !== undefined) {\n throw lastError;\n }\n return createRawResult({ isError: true, errorMessage: 'Max retries exceeded' });\n }\n\n public handleSchemaOutput(raw: RawResult, schema: unknown, cwd: string, startTime: number) {\n const outputPath = getOutputPath(cwd);\n const parsed = parseAndValidate(outputPath, schema);\n\n if (parsed !== null) {\n return createHarnessResult({\n result: raw.result,\n parsed,\n isError: false,\n costUsd: raw.metrics.totalCostUsd,\n numTurns: raw.metrics.numTurns,\n durationMs: Date.now() - startTime,\n sessionId: raw.metrics.sessionId,\n messages: raw.messages,\n });\n }\n\n return createHarnessResult({\n result: raw.result,\n isError: true,\n errorMessage: 'Schema validation failed after parse and cosmetic repair attempts.',\n costUsd: raw.metrics.totalCostUsd,\n numTurns: raw.metrics.numTurns,\n durationMs: Date.now() - startTime,\n sessionId: raw.metrics.sessionId,\n messages: raw.messages,\n });\n }\n\n private async buildProvider(providerName: string, options: RunnerOptions): Promise<HarnessProvider> {\n const { provider: _, ...rest } = options;\n return buildProvider({ provider: providerName as HarnessConfig['provider'], ...rest });\n }\n\n private computeBackoffDelay(\n initialDelay: number,\n backoffFactor: number,\n maxDelay: number,\n attempt: number\n ): number {\n const base = Math.min(initialDelay * backoffFactor ** attempt, maxDelay);\n const jitter = (Math.random() * (base * 0.5)) - (base * 0.25);\n return base + jitter;\n }\n\n private sleep(delaySeconds: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, Math.max(0, delaySeconds) * 1000);\n });\n }\n}\n","import type { AgentRouter } from '../router/AgentRouter.js';\nimport type { ReasonerDefinition, ReasonerHandler, ReasonerOptions } from '../types/reasoner.js';\n\nexport class ReasonerRegistry {\n private readonly reasoners = new Map<string, ReasonerDefinition>();\n\n register<TInput = any, TOutput = any>(\n name: string,\n handler: ReasonerHandler<TInput, TOutput>,\n options?: ReasonerOptions\n ) {\n this.reasoners.set(name, { name, handler, options });\n }\n\n includeRouter(router: AgentRouter) {\n router.reasoners.forEach((reasoner) => {\n this.reasoners.set(reasoner.name, reasoner);\n });\n }\n\n get(name: string) {\n return this.reasoners.get(name);\n }\n\n all() {\n return Array.from(this.reasoners.values());\n }\n}\n","import type { AgentRouter } from '../router/AgentRouter.js';\nimport type { SkillDefinition, SkillHandler, SkillOptions } from '../types/skill.js';\n\nexport class SkillRegistry {\n private readonly skills = new Map<string, SkillDefinition>();\n\n register<TInput = any, TOutput = any>(\n name: string,\n handler: SkillHandler<TInput, TOutput>,\n options?: SkillOptions\n ) {\n this.skills.set(name, { name, handler, options });\n }\n\n includeRouter(router: AgentRouter) {\n router.skills.forEach((skill) => {\n this.skills.set(skill.name, skill);\n });\n }\n\n get(name: string) {\n return this.skills.get(name);\n }\n\n all() {\n return Array.from(this.skills.values());\n }\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport type express from 'express';\nimport type { Agent } from '../agent/Agent.js';\nimport type { ExecutionLogger } from '../observability/ExecutionLogger.js';\n\nexport interface ExecutionMetadata {\n executionId: string;\n runId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n}\n\nconst store = new AsyncLocalStorage<ExecutionContext>();\n\nexport class ExecutionContext {\n readonly input: any;\n readonly metadata: ExecutionMetadata;\n readonly req: express.Request;\n readonly res: express.Response;\n readonly agent: Agent;\n\n constructor(params: {\n input: any;\n metadata: ExecutionMetadata;\n req: express.Request;\n res: express.Response;\n agent: Agent;\n }) {\n this.input = params.input;\n this.metadata = params.metadata;\n this.req = params.req;\n this.res = params.res;\n this.agent = params.agent;\n }\n\n get logger(): ExecutionLogger {\n return this.agent.getExecutionLogger();\n }\n\n static run<T>(ctx: ExecutionContext, fn: () => T): T {\n return store.run(ctx, fn);\n }\n\n static getCurrent(): ExecutionContext | undefined {\n return store.getStore();\n }\n}\n","/**\n * Tool calling support for AgentField agents.\n *\n * Converts discovered capabilities into Vercel AI SDK tool definitions and provides\n * an automatic tool-call execution loop that dispatches calls via agent.call().\n */\n\nimport { generateText, tool, jsonSchema, stepCountIs } from 'ai';\nimport type { ToolSet } from 'ai';\nimport type {\n AgentCapability,\n ReasonerCapability,\n SkillCapability,\n DiscoveryOptions,\n DiscoveryResult\n} from '../types/agent.js';\nimport type { Agent } from '../agent/Agent.js';\nimport type { AIRequestOptions } from './AIClient.js';\n\n// ---------------------------------------------------------------------------\n// Configuration\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallConfig {\n /** Maximum number of LLM turns in the tool-call loop (default: 10). */\n maxTurns?: number;\n /** Maximum total tool calls allowed (default: 25). */\n maxToolCalls?: number;\n /** Maximum candidate tools to present to the LLM. */\n maxCandidateTools?: number;\n /** Maximum tools to hydrate with full schemas (lazy mode). */\n maxHydratedTools?: number;\n /** Schema hydration mode: \"eager\" includes full schemas, \"lazy\" sends metadata first. */\n schemaHydration?: 'eager' | 'lazy';\n /** Whether to broaden discovery if no tools match (default: false). */\n fallbackBroadening?: boolean;\n /** Filter by tags during discovery. */\n tags?: string[];\n /** Filter by agent IDs during discovery. */\n agentIds?: string[];\n /** Filter by health status (default: \"healthy\"). */\n healthStatus?: string;\n}\n\nconst DEFAULT_MAX_TURNS = 10;\nconst DEFAULT_MAX_TOOL_CALLS = 25;\nconst DEFAULT_HEALTH_STATUS = undefined;\n\n// ---------------------------------------------------------------------------\n// Observability\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallRecord {\n toolName: string;\n arguments: Record<string, any>;\n result?: any;\n error?: string;\n latencyMs: number;\n turn: number;\n}\n\nexport interface ToolCallTrace {\n calls: ToolCallRecord[];\n totalTurns: number;\n totalToolCalls: number;\n finalResponse?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Tool options for ctx.ai()\n// ---------------------------------------------------------------------------\n\n/**\n * Options for tool-calling in ctx.ai().\n *\n * Accepts multiple forms:\n * - \"discover\": auto-discover all tools from control plane\n * - ToolCallConfig: discover with filtering/progressive options\n * - DiscoveryResult: use pre-fetched discovery results\n * - AgentCapability[]: convert capability list directly\n * - ToolSet: raw Vercel AI SDK tool map\n */\nexport type ToolsOption =\n | 'discover'\n | ToolCallConfig\n | DiscoveryResult\n | AgentCapability[]\n | (ReasonerCapability | SkillCapability)[]\n | ToolSet;\n\nexport interface AIToolRequestOptions extends AIRequestOptions {\n /** Tool definitions for LLM tool calling. */\n tools?: ToolsOption;\n /** Maximum LLM turns in the tool-call loop. */\n maxTurns?: number;\n /** Maximum total tool calls allowed. */\n maxToolCalls?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Capability -> Tool Definition Conversion\n// ---------------------------------------------------------------------------\n\n/**\n * Convert discovery invocation_target format to agent.call() target format.\n *\n * Discovery returns colon-separated targets:\n * - \"node_id:skill:function_name\" for skills\n * - \"node_id:function_name\" for reasoners\n *\n * agent.call() expects dot-separated: \"node_id.function_name\"\n */\nfunction invocationTargetToCallTarget(invocationTarget: string): string {\n if (invocationTarget.includes(':skill:')) {\n const parts = invocationTarget.split(':skill:');\n return `${parts[0]}.${parts[1]}`;\n }\n if (invocationTarget.includes(':')) {\n const idx = invocationTarget.indexOf(':');\n return `${invocationTarget.substring(0, idx)}.${invocationTarget.substring(idx + 1)}`;\n }\n return invocationTarget;\n}\n\nfunction makeExecute(agent: Agent, invocationTarget: string) {\n const callTarget = invocationTargetToCallTarget(invocationTarget);\n return async (args: any) => agent.call(callTarget, args);\n}\n\n/**\n * Convert an invocation_target to an LLM-safe function name.\n * Many providers (e.g., Google) only allow alphanumeric, underscores, dashes, and dots.\n * Colons are replaced with double-underscores for a reversible mapping.\n */\nfunction sanitizeToolName(invocationTarget: string): string {\n return invocationTarget.replace(/:/g, '__');\n}\n\nfunction unsanitizeToolName(sanitizedName: string): string {\n return sanitizedName.replace(/__/g, ':');\n}\n\n/**\n * Convert a single ReasonerCapability or SkillCapability to a Vercel AI SDK tool.\n */\nexport function capabilityToTool(\n cap: ReasonerCapability | SkillCapability,\n agent: Agent\n): ToolSet[string] {\n const rawSchema = cap.inputSchema ?? { type: 'object', properties: {} };\n const schema = rawSchema.type ? rawSchema : { type: 'object', properties: rawSchema };\n\n return tool({\n description: cap.description ?? `Call ${cap.invocationTarget}`,\n inputSchema: jsonSchema(schema),\n execute: makeExecute(agent, cap.invocationTarget)\n });\n}\n\n/**\n * Convert a single capability to a metadata-only tool (no full schema).\n * Used for progressive/lazy discovery.\n */\nexport function capabilityToMetadataTool(\n cap: ReasonerCapability | SkillCapability,\n agent: Agent\n): ToolSet[string] {\n return tool({\n description: cap.description ?? `Call ${cap.invocationTarget}`,\n inputSchema: jsonSchema({ type: 'object', properties: {} }),\n execute: makeExecute(agent, cap.invocationTarget)\n });\n}\n\n/**\n * Convert a list of capabilities into a Vercel AI SDK tool map.\n */\nexport function capabilitiesToTools(\n capabilities: (AgentCapability | ReasonerCapability | SkillCapability)[],\n agent: Agent,\n metadataOnly = false\n): ToolSet {\n const tools: ToolSet = {};\n const convert = metadataOnly ? capabilityToMetadataTool : capabilityToTool;\n\n for (const cap of capabilities) {\n if ('reasoners' in cap && 'skills' in cap) {\n const agentCap = cap as AgentCapability;\n for (const r of agentCap.reasoners) {\n tools[sanitizeToolName(r.invocationTarget)] = convert(r, agent);\n }\n for (const s of agentCap.skills) {\n tools[sanitizeToolName(s.invocationTarget)] = convert(s, agent);\n }\n } else {\n const c = cap as ReasonerCapability | SkillCapability;\n tools[sanitizeToolName(c.invocationTarget)] = convert(c, agent);\n }\n }\n\n return tools;\n}\n\n// ---------------------------------------------------------------------------\n// Discovery helpers\n// ---------------------------------------------------------------------------\n\nfunction limitToolSet(tools: ToolSet, max: number): ToolSet {\n const entries = Object.entries(tools);\n if (entries.length <= max) return tools;\n const limited: ToolSet = {};\n for (let i = 0; i < max; i++) {\n limited[entries[i][0]] = entries[i][1];\n }\n return limited;\n}\n\nasync function discoverTools(\n agent: Agent,\n config: ToolCallConfig,\n hydrateSchemas = true\n): Promise<{ tools: ToolSet; capabilities: AgentCapability[] }> {\n const discoveryOpts: DiscoveryOptions = {\n tags: config.tags,\n agentIds: config.agentIds,\n includeInputSchema: hydrateSchemas,\n includeOutputSchema: false,\n includeDescriptions: true,\n healthStatus: config.healthStatus ?? DEFAULT_HEALTH_STATUS\n };\n\n const result = await agent.discover(discoveryOpts);\n if (!result.json) return { tools: {}, capabilities: [] };\n\n const caps = result.json.capabilities;\n let tools = capabilitiesToTools(caps, agent, !hydrateSchemas);\n\n if (config.maxCandidateTools) {\n tools = limitToolSet(tools, config.maxCandidateTools);\n }\n\n return { tools, capabilities: caps };\n}\n\nasync function hydrateSelectedTools(\n agent: Agent,\n config: ToolCallConfig,\n selectedNames: string[]\n): Promise<ToolSet> {\n const discoveryOpts: DiscoveryOptions = {\n tags: config.tags,\n agentIds: config.agentIds,\n includeInputSchema: true,\n includeOutputSchema: false,\n includeDescriptions: true,\n healthStatus: config.healthStatus ?? DEFAULT_HEALTH_STATUS\n };\n\n const result = await agent.discover(discoveryOpts);\n if (!result.json) return {};\n\n // selectedNames are sanitized (from LLM), unsanitize for matching\n const selectedSet = new Set(selectedNames.map(unsanitizeToolName));\n const tools: ToolSet = {};\n\n for (const cap of result.json.capabilities) {\n for (const r of cap.reasoners) {\n if (selectedSet.has(r.invocationTarget)) {\n tools[sanitizeToolName(r.invocationTarget)] = capabilityToTool(r, agent);\n }\n }\n for (const s of cap.skills) {\n if (selectedSet.has(s.invocationTarget)) {\n tools[sanitizeToolName(s.invocationTarget)] = capabilityToTool(s, agent);\n }\n }\n }\n\n if (config.maxHydratedTools) {\n return limitToolSet(tools, config.maxHydratedTools);\n }\n\n return tools;\n}\n\n// ---------------------------------------------------------------------------\n// Build tool config from various input forms\n// ---------------------------------------------------------------------------\n\nfunction isToolCallConfig(obj: any): obj is ToolCallConfig {\n const keys = ['maxTurns', 'maxToolCalls', 'tags', 'schemaHydration', 'agentIds',\n 'healthStatus', 'fallbackBroadening', 'maxCandidateTools', 'maxHydratedTools'];\n return typeof obj === 'object' && !Array.isArray(obj) && keys.some(k => k in obj);\n}\n\nfunction isDiscoveryResult(obj: any): obj is DiscoveryResult {\n return typeof obj === 'object' && !Array.isArray(obj) && 'raw' in obj && 'format' in obj;\n}\n\nexport async function buildToolConfig(\n toolsParam: ToolsOption,\n agent: Agent\n): Promise<{\n tools: ToolSet;\n config: ToolCallConfig;\n needsLazyHydration: boolean;\n}> {\n const baseConfig: ToolCallConfig = {\n maxTurns: DEFAULT_MAX_TURNS,\n maxToolCalls: DEFAULT_MAX_TOOL_CALLS,\n schemaHydration: 'eager',\n fallbackBroadening: false,\n healthStatus: DEFAULT_HEALTH_STATUS\n };\n\n // \"discover\" - simple auto-discovery\n if (toolsParam === 'discover') {\n const { tools } = await discoverTools(agent, baseConfig);\n return { tools, config: baseConfig, needsLazyHydration: false };\n }\n\n // ToolCallConfig object\n if (isToolCallConfig(toolsParam)) {\n const config = { ...baseConfig, ...toolsParam };\n const isLazy = config.schemaHydration === 'lazy';\n const { tools } = await discoverTools(agent, config, !isLazy);\n return { tools, config, needsLazyHydration: isLazy };\n }\n\n // DiscoveryResult\n if (isDiscoveryResult(toolsParam)) {\n if (toolsParam.json) {\n const tools = capabilitiesToTools(toolsParam.json.capabilities, agent);\n return { tools, config: baseConfig, needsLazyHydration: false };\n }\n return { tools: {}, config: baseConfig, needsLazyHydration: false };\n }\n\n // Array of capabilities\n if (Array.isArray(toolsParam)) {\n const tools = capabilitiesToTools(toolsParam, agent);\n return { tools, config: baseConfig, needsLazyHydration: false };\n }\n\n // Raw ToolSet map - pass through directly\n if (typeof toolsParam === 'object') {\n return { tools: toolsParam as ToolSet, config: baseConfig, needsLazyHydration: false };\n }\n\n throw new Error(\n `Invalid tools parameter: expected \"discover\", ToolCallConfig, DiscoveryResult, ` +\n `capability array, or tool map, got ${typeof toolsParam}`\n );\n}\n\n// ---------------------------------------------------------------------------\n// Tool-call execution loop\n// ---------------------------------------------------------------------------\n\nfunction wrapToolsWithObservability(\n toolMap: ToolSet,\n agent: Agent,\n trace: ToolCallTrace,\n maxToolCalls: number,\n getCurrentTurn: () => number\n): { tools: ToolSet; getTotalCalls: () => number } {\n let totalCalls = 0;\n const observableTools: ToolSet = {};\n\n for (const [name, t] of Object.entries(toolMap)) {\n const originalTool = t as any;\n observableTools[name] = tool({\n description: originalTool.description ?? '',\n inputSchema: originalTool.inputSchema,\n execute: async (args: any) => {\n totalCalls++;\n trace.totalToolCalls = totalCalls;\n\n if (totalCalls > maxToolCalls) {\n const record: ToolCallRecord = {\n toolName: name,\n arguments: args,\n error: 'Tool call limit reached',\n latencyMs: 0,\n turn: getCurrentTurn()\n };\n trace.calls.push(record);\n return { error: 'Tool call limit reached. Please provide a final response.' };\n }\n\n const record: ToolCallRecord = {\n toolName: name,\n arguments: args,\n latencyMs: 0,\n turn: getCurrentTurn()\n };\n\n const invocationTarget = unsanitizeToolName(name);\n const callTarget = invocationTargetToCallTarget(invocationTarget);\n const start = Date.now();\n try {\n const result = await agent.call(callTarget, args);\n record.result = result;\n record.latencyMs = Date.now() - start;\n trace.calls.push(record);\n return result;\n } catch (err: any) {\n record.error = err.message ?? String(err);\n record.latencyMs = Date.now() - start;\n trace.calls.push(record);\n return { error: record.error, tool: name };\n }\n }\n });\n }\n\n return { tools: observableTools, getTotalCalls: () => totalCalls };\n}\n\nexport async function executeToolCallLoop(\n agent: Agent,\n prompt: string,\n toolMap: ToolSet,\n config: ToolCallConfig,\n needsLazyHydration: boolean,\n buildModel: () => any,\n options: AIRequestOptions = {}\n): Promise<{ text: string; trace: ToolCallTrace }> {\n const maxTurns = config.maxTurns ?? DEFAULT_MAX_TURNS;\n const maxToolCalls = config.maxToolCalls ?? DEFAULT_MAX_TOOL_CALLS;\n\n const trace: ToolCallTrace = {\n calls: [],\n totalTurns: 0,\n totalToolCalls: 0\n };\n\n let activeTools = toolMap;\n\n // Lazy hydration: first do a selection pass with non-executable tools to see\n // which tools the LLM picks, then hydrate full schemas for those tools.\n if (needsLazyHydration) {\n // Create non-executable tool stubs so the LLM selects but doesn't execute\n const selectionTools: ToolSet = {};\n for (const [name, t] of Object.entries(toolMap)) {\n const orig = t as any;\n selectionTools[name] = tool({\n description: orig.description ?? '',\n inputSchema: orig.inputSchema,\n // No execute — AI SDK will stop after LLM selects tools\n });\n }\n\n const selectionResult = await generateText({\n model: buildModel(),\n prompt,\n system: options.system,\n temperature: options.temperature,\n maxOutputTokens: options.maxTokens,\n tools: selectionTools,\n stopWhen: stepCountIs(1) // Stop after LLM's first response (tool selection)\n });\n\n // Extract which tools the LLM tried to call\n const selectedNames = new Set<string>();\n for (const step of selectionResult.steps) {\n for (const tc of step.toolCalls) {\n selectedNames.add(tc.toolName);\n }\n }\n\n if (selectedNames.size > 0) {\n // Hydrate full schemas for selected tools\n const hydratedTools = await hydrateSelectedTools(\n agent, config, Array.from(selectedNames)\n );\n if (Object.keys(hydratedTools).length > 0) {\n activeTools = hydratedTools;\n }\n } else {\n // LLM didn't select any tools in the selection pass — just return text\n trace.totalTurns = selectionResult.steps.length;\n trace.finalResponse = selectionResult.text;\n return { text: selectionResult.text, trace };\n }\n }\n\n let currentTurn = 0;\n const { tools: observableTools } = wrapToolsWithObservability(\n activeTools, agent, trace, maxToolCalls, () => currentTurn\n );\n\n const model = buildModel();\n const result = await generateText({\n model,\n prompt,\n system: options.system,\n temperature: options.temperature,\n maxOutputTokens: options.maxTokens,\n tools: observableTools,\n stopWhen: stepCountIs(maxTurns),\n onStepFinish: () => {\n currentTurn++;\n trace.totalTurns = currentTurn;\n }\n });\n\n trace.finalResponse = result.text;\n trace.totalTurns = result.steps.length;\n\n return { text: result.text, trace };\n}\n","import type express from 'express';\nimport { ExecutionContext } from './ExecutionContext.js';\nimport type { AIClient, AIRequestOptions, AIStream, ZodSchema } from '../ai/AIClient.js';\nimport type { MemoryInterface } from '../memory/MemoryInterface.js';\nimport type { Agent } from '../agent/Agent.js';\nimport type { WorkflowReporter } from '../workflow/WorkflowReporter.js';\nimport type { DiscoveryOptions } from '../types/agent.js';\nimport type { DidInterface } from '../did/DidInterface.js';\nimport type { AIToolRequestOptions, ToolCallTrace } from '../ai/ToolCalling.js';\nimport { buildToolConfig, executeToolCallLoop } from '../ai/ToolCalling.js';\nimport type { ExecutionLogger } from '../observability/ExecutionLogger.js';\n\nexport class ReasonerContext<TInput = any> {\n readonly input: TInput;\n readonly executionId: string;\n readonly runId?: string;\n readonly sessionId?: string;\n readonly actorId?: string;\n readonly workflowId?: string;\n readonly rootWorkflowId?: string;\n readonly parentExecutionId?: string;\n readonly reasonerId?: string;\n readonly callerDid?: string;\n readonly targetDid?: string;\n readonly agentNodeDid?: string;\n readonly req: express.Request;\n readonly res: express.Response;\n readonly agent: Agent;\n readonly logger: ExecutionLogger;\n readonly aiClient: AIClient;\n readonly memory: MemoryInterface;\n readonly workflow: WorkflowReporter;\n readonly did: DidInterface;\n\n constructor(params: {\n input: TInput;\n executionId: string;\n runId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n req: express.Request;\n res: express.Response;\n agent: Agent;\n logger: ExecutionLogger;\n aiClient: AIClient;\n memory: MemoryInterface;\n workflow: WorkflowReporter;\n did: DidInterface;\n }) {\n this.input = params.input;\n this.executionId = params.executionId;\n this.runId = params.runId;\n this.sessionId = params.sessionId;\n this.actorId = params.actorId;\n this.workflowId = params.workflowId;\n this.rootWorkflowId = params.rootWorkflowId;\n this.parentExecutionId = params.parentExecutionId;\n this.reasonerId = params.reasonerId;\n this.callerDid = params.callerDid;\n this.targetDid = params.targetDid;\n this.agentNodeDid = params.agentNodeDid;\n this.req = params.req;\n this.res = params.res;\n this.agent = params.agent;\n this.logger = params.logger;\n this.aiClient = params.aiClient;\n this.memory = params.memory;\n this.workflow = params.workflow;\n this.did = params.did;\n }\n\n ai<T>(prompt: string, options: AIRequestOptions & { schema: ZodSchema<T> }): Promise<T>;\n ai(prompt: string, options?: AIToolRequestOptions): Promise<string>;\n ai(prompt: string, options?: AIToolRequestOptions): Promise<unknown> {\n if (options?.tools) {\n return this.aiWithTools(prompt, options);\n }\n return this.aiClient.generate(prompt, options);\n }\n\n /**\n * AI call with automatic tool calling via discover -> ai -> call loop.\n *\n * Discovers available capabilities, presents them as tools to the LLM,\n * dispatches tool calls via agent.call(), and iterates until a final response.\n *\n * @returns Object with `text` (final response) and `trace` (observability data).\n */\n async aiWithTools(\n prompt: string,\n options: AIToolRequestOptions = {}\n ): Promise<{ text: string; trace: ToolCallTrace }> {\n const toolsParam = options.tools ?? 'discover';\n const { tools, config, needsLazyHydration } = await buildToolConfig(toolsParam, this.agent);\n\n const mergedConfig = {\n ...config,\n maxTurns: options.maxTurns ?? config.maxTurns ?? 10,\n maxToolCalls: options.maxToolCalls ?? config.maxToolCalls ?? 25\n };\n\n return executeToolCallLoop(\n this.agent,\n prompt,\n tools,\n mergedConfig,\n needsLazyHydration,\n () => this.aiClient.getModel(options),\n options\n );\n }\n\n aiStream(prompt: string, options?: AIRequestOptions): Promise<AIStream> {\n return this.aiClient.stream(prompt, options);\n }\n\n call(target: string, input: any) {\n return this.agent.call(target, input);\n }\n\n discover(options?: DiscoveryOptions) {\n return this.agent.discover(options);\n }\n\n note(message: string, tags: string[] = []): void {\n this.agent.note(message, tags, {\n executionId: this.executionId,\n runId: this.runId,\n sessionId: this.sessionId,\n actorId: this.actorId,\n workflowId: this.workflowId,\n rootWorkflowId: this.rootWorkflowId,\n parentExecutionId: this.parentExecutionId,\n reasonerId: this.reasonerId,\n callerDid: this.callerDid,\n targetDid: this.targetDid,\n agentNodeDid: this.agentNodeDid\n });\n }\n}\n\nexport function getCurrentContext<TInput = any>(): ReasonerContext<TInput> | undefined {\n const execution = ExecutionContext.getCurrent();\n if (!execution) return undefined;\n const { metadata, input, agent, req, res } = execution;\n return new ReasonerContext<TInput>({\n input,\n executionId: metadata.executionId,\n runId: metadata.runId,\n sessionId: metadata.sessionId,\n actorId: metadata.actorId,\n workflowId: metadata.workflowId,\n rootWorkflowId: metadata.rootWorkflowId,\n parentExecutionId: metadata.parentExecutionId,\n reasonerId: metadata.reasonerId,\n callerDid: metadata.callerDid,\n targetDid: metadata.targetDid,\n agentNodeDid: metadata.agentNodeDid,\n req,\n res,\n agent,\n logger: agent.getExecutionLogger(),\n aiClient: agent.getAIClient(),\n memory: agent.getMemoryInterface(metadata),\n workflow: agent.getWorkflowReporter(metadata),\n did: agent.getDidInterface(metadata, input)\n });\n}\n","import type express from 'express';\nimport { ExecutionContext } from './ExecutionContext.js';\nimport type { Agent } from '../agent/Agent.js';\nimport type { MemoryInterface } from '../memory/MemoryInterface.js';\nimport type { WorkflowReporter } from '../workflow/WorkflowReporter.js';\nimport type { DiscoveryOptions } from '../types/agent.js';\nimport type { DidInterface } from '../did/DidInterface.js';\nimport type { ExecutionLogger } from '../observability/ExecutionLogger.js';\n\nexport class SkillContext<TInput = any> {\n readonly input: TInput;\n readonly executionId: string;\n readonly sessionId?: string;\n readonly workflowId?: string;\n readonly rootWorkflowId?: string;\n readonly reasonerId?: string;\n readonly callerDid?: string;\n readonly agentNodeDid?: string;\n readonly req: express.Request;\n readonly res: express.Response;\n readonly agent: Agent;\n readonly logger: ExecutionLogger;\n readonly memory: MemoryInterface;\n readonly workflow: WorkflowReporter;\n readonly did: DidInterface;\n\n constructor(params: {\n input: TInput;\n executionId: string;\n sessionId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n reasonerId?: string;\n callerDid?: string;\n agentNodeDid?: string;\n req: express.Request;\n res: express.Response;\n agent: Agent;\n logger: ExecutionLogger;\n memory: MemoryInterface;\n workflow: WorkflowReporter;\n did: DidInterface;\n }) {\n this.input = params.input;\n this.executionId = params.executionId;\n this.sessionId = params.sessionId;\n this.workflowId = params.workflowId;\n this.rootWorkflowId = params.rootWorkflowId;\n this.reasonerId = params.reasonerId;\n this.callerDid = params.callerDid;\n this.agentNodeDid = params.agentNodeDid;\n this.req = params.req;\n this.res = params.res;\n this.agent = params.agent;\n this.logger = params.logger;\n this.memory = params.memory;\n this.workflow = params.workflow;\n this.did = params.did;\n }\n\n discover(options?: DiscoveryOptions) {\n return this.agent.discover(options);\n }\n}\n\nexport function getCurrentSkillContext<TInput = any>(): SkillContext<TInput> | undefined {\n const execution = ExecutionContext.getCurrent();\n if (!execution) return undefined;\n const { metadata, input, agent, req, res } = execution;\n return new SkillContext<TInput>({\n input,\n executionId: metadata.executionId,\n sessionId: metadata.sessionId,\n workflowId: metadata.workflowId,\n rootWorkflowId: metadata.rootWorkflowId,\n reasonerId: metadata.reasonerId,\n callerDid: metadata.callerDid,\n agentNodeDid: metadata.agentNodeDid,\n req,\n res,\n agent,\n logger: agent.getExecutionLogger(),\n memory: agent.getMemoryInterface(metadata),\n workflow: agent.getWorkflowReporter(metadata),\n did: agent.getDidInterface(metadata, input)\n });\n}\n","import crypto from 'node:crypto';\nimport os from 'node:os';\n\nexport class RateLimitError extends Error {\n retryAfter?: number;\n\n constructor(message: string, retryAfter?: number) {\n super(message);\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\nexport interface RateLimiterOptions {\n maxRetries?: number;\n baseDelay?: number;\n maxDelay?: number;\n jitterFactor?: number;\n circuitBreakerThreshold?: number;\n circuitBreakerTimeout?: number;\n}\n\n/**\n * Stateless rate limiter with adaptive exponential backoff.\n *\n * Designed to work across many containers without coordination.\n * Uses container-specific jitter to naturally distribute load.\n */\nexport class StatelessRateLimiter {\n readonly maxRetries: number;\n readonly baseDelay: number;\n readonly maxDelay: number;\n readonly jitterFactor: number;\n readonly circuitBreakerThreshold: number;\n readonly circuitBreakerTimeout: number;\n\n protected _containerSeed: number;\n protected _consecutiveFailures = 0;\n protected _circuitOpenTime?: number;\n\n constructor(options: RateLimiterOptions = {}) {\n this.maxRetries = options.maxRetries ?? 5;\n this.baseDelay = options.baseDelay ?? 0.5;\n this.maxDelay = options.maxDelay ?? 30.0;\n this.jitterFactor = options.jitterFactor ?? 0.25;\n this.circuitBreakerThreshold = options.circuitBreakerThreshold ?? 5;\n this.circuitBreakerTimeout = options.circuitBreakerTimeout ?? 30;\n\n this._containerSeed = this._getContainerSeed();\n }\n\n protected _getContainerSeed(): number {\n const identifier = `${os.hostname()}-${process.pid}`;\n const hash = crypto.createHash('md5').update(identifier).digest('hex');\n return parseInt(hash.slice(0, 8), 16);\n }\n\n protected _isRateLimitError(error: unknown): boolean {\n if (!error) return false;\n const err = error as any;\n\n const className = err?.constructor?.name;\n if (className && className.includes('RateLimitError')) {\n return true;\n }\n\n const response = err?.response;\n const statusCandidates = [\n err?.status,\n err?.statusCode,\n response?.status,\n response?.statusCode,\n response?.status_code\n ];\n if (statusCandidates.some((code: any) => code === 429 || code === 503)) {\n return true;\n }\n\n const message = String(err?.message ?? err ?? '').toLowerCase();\n const rateLimitKeywords = [\n 'rate limit',\n 'rate-limit',\n 'rate_limit',\n 'too many requests',\n 'quota exceeded',\n 'temporarily rate-limited',\n 'rate limited',\n 'requests per',\n 'rpm exceeded',\n 'tpm exceeded',\n 'usage limit',\n 'throttled',\n 'throttling'\n ];\n\n return rateLimitKeywords.some((keyword) => message.includes(keyword));\n }\n\n protected _extractRetryAfter(error: unknown): number | undefined {\n if (!error) return undefined;\n const err = error as any;\n\n const headers = err?.response?.headers ?? err?.response?.Headers ?? err?.response?.header;\n if (headers && typeof headers === 'object') {\n const retryAfterKey = Object.keys(headers).find((k) => k.toLowerCase() === 'retry-after');\n if (retryAfterKey) {\n const value = Array.isArray(headers[retryAfterKey]) ? headers[retryAfterKey][0] : headers[retryAfterKey];\n const parsed = parseFloat(value);\n if (!Number.isNaN(parsed)) {\n return parsed;\n }\n }\n }\n\n const retryAfter = err?.retryAfter ?? err?.retry_after;\n const parsed = parseFloat(retryAfter);\n if (!Number.isNaN(parsed)) {\n return parsed;\n }\n\n return undefined;\n }\n\n protected _createJitterRng(seed: number): () => number {\n let x = seed >>> 0;\n return () => {\n x = (1664525 * x + 1013904223) % 4294967296;\n return x / 4294967296;\n };\n }\n\n protected _calculateBackoffDelay(attempt: number, retryAfter?: number): number {\n let baseDelay: number;\n if (retryAfter && retryAfter <= this.maxDelay) {\n baseDelay = retryAfter;\n } else {\n baseDelay = Math.min(this.baseDelay * 2 ** attempt, this.maxDelay);\n }\n\n const jitterRange = baseDelay * this.jitterFactor;\n const rng = this._createJitterRng(this._containerSeed + attempt);\n const jitter = (rng() * 2 - 1) * jitterRange;\n\n const delay = Math.max(0.1, baseDelay + jitter);\n return delay;\n }\n\n protected _checkCircuitBreaker(): boolean {\n if (this._circuitOpenTime === undefined) {\n return false;\n }\n\n if (this._now() - this._circuitOpenTime > this.circuitBreakerTimeout) {\n this._circuitOpenTime = undefined;\n this._consecutiveFailures = 0;\n return false;\n }\n\n return true;\n }\n\n protected _updateCircuitBreaker(success: boolean) {\n if (success) {\n this._consecutiveFailures = 0;\n this._circuitOpenTime = undefined;\n return;\n }\n\n this._consecutiveFailures += 1;\n if (this._consecutiveFailures >= this.circuitBreakerThreshold && this._circuitOpenTime === undefined) {\n this._circuitOpenTime = this._now();\n }\n }\n\n protected async _sleep(delaySeconds: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, delaySeconds * 1000));\n }\n\n protected _now(): number {\n return Date.now() / 1000;\n }\n\n async executeWithRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (this._checkCircuitBreaker()) {\n throw new RateLimitError(\n `Circuit breaker is open. Too many consecutive rate limit failures. Will retry after ${this.circuitBreakerTimeout} seconds.`\n );\n }\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt += 1) {\n try {\n const result = await fn();\n this._updateCircuitBreaker(true);\n return result;\n } catch (error) {\n lastError = error;\n\n if (!this._isRateLimitError(error)) {\n throw error;\n }\n\n this._updateCircuitBreaker(false);\n\n if (attempt >= this.maxRetries) {\n break;\n }\n\n const retryAfter = this._extractRetryAfter(error);\n const delay = this._calculateBackoffDelay(attempt, retryAfter);\n await this._sleep(delay);\n }\n }\n\n throw new RateLimitError(\n `Rate limit retries exhausted after ${this.maxRetries} attempts. Last error: ${String(lastError)}`,\n this._extractRetryAfter(lastError)\n );\n }\n}\n","import {\n embed,\n embedMany,\n generateObject,\n generateText,\n streamText\n} from 'ai';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { createAnthropic } from '@ai-sdk/anthropic';\nimport { createGoogleGenerativeAI } from '@ai-sdk/google';\nimport { createMistral } from '@ai-sdk/mistral';\nimport { createGroq } from '@ai-sdk/groq';\nimport { createXai } from '@ai-sdk/xai';\nimport { createDeepSeek } from '@ai-sdk/deepseek';\nimport { createCohere } from '@ai-sdk/cohere';\nimport type { z } from 'zod';\nimport type { AIConfig } from '../types/agent.js';\nimport { StatelessRateLimiter } from './RateLimiter.js';\n\nexport type ZodSchema<T> = z.Schema<T, z.ZodTypeDef, any>;\n\n/**\n * Attempts to repair malformed JSON text from model responses.\n * Handles common issues like markdown code blocks, trailing commas, etc.\n */\nfunction repairJsonText(text: string): string | null {\n let cleaned = text.trim();\n\n // Remove markdown code blocks (```json ... ``` or ``` ... ```)\n const codeBlockMatch = cleaned.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n if (codeBlockMatch) {\n cleaned = codeBlockMatch[1].trim();\n }\n\n // Try to extract JSON object/array if there's extra text\n const jsonMatch = cleaned.match(/(\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])/);\n if (jsonMatch) {\n cleaned = jsonMatch[1];\n }\n\n // Remove trailing commas before } or ]\n cleaned = cleaned.replace(/,(\\s*[}\\]])/g, '$1');\n\n // Try to parse to verify it's valid\n try {\n JSON.parse(cleaned);\n return cleaned;\n } catch {\n return null;\n }\n}\n\nexport interface AIRequestOptions {\n system?: string;\n schema?: ZodSchema<any>;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n provider?: AIConfig['provider'];\n /**\n * Mode for structured output generation.\n * - 'auto': Let the provider choose (default in ai-sdk, uses tool calling)\n * - 'json': Use JSON mode (more compatible across providers/models)\n * - 'tool': Force tool calling mode\n */\n mode?: 'auto' | 'json' | 'tool';\n}\n\nexport type AIStream = AsyncIterable<string>;\n\nexport interface AIEmbeddingOptions {\n model?: string;\n provider?: AIConfig['provider'];\n}\n\nexport class AIClient {\n private readonly config: AIConfig;\n private rateLimiter?: StatelessRateLimiter;\n\n constructor(config: AIConfig = {}) {\n this.config = {\n enableRateLimitRetry: true,\n rateLimitMaxRetries: 20,\n rateLimitBaseDelay: 1.0,\n rateLimitMaxDelay: 300.0,\n rateLimitJitterFactor: 0.25,\n rateLimitCircuitBreakerThreshold: 10,\n rateLimitCircuitBreakerTimeout: 300,\n ...config\n };\n }\n\n async generate<T>(prompt: string, options: AIRequestOptions & { schema: ZodSchema<T> }): Promise<T>;\n async generate(prompt: string, options?: AIRequestOptions): Promise<string>;\n async generate<T = any>(prompt: string, options: AIRequestOptions = {}): Promise<T | string> {\n const model = this.buildModel(options);\n\n if (options.schema) {\n const schema = options.schema;\n // Default to 'json' mode for better compatibility across providers\n // 'auto' mode uses tool calling which some models/providers don't support well\n const mode = options.mode ?? 'json';\n const call = async () =>\n generateObject({\n model: model,\n prompt,\n output: 'object',\n mode,\n system: options.system,\n temperature: options.temperature ?? this.config.temperature,\n maxOutputTokens: options.maxTokens ?? this.config.maxTokens,\n schema,\n experimental_repairText: async ({ text }) => repairJsonText(text)\n });\n\n const response = await this.withRateLimitRetry(call);\n return response.object as T;\n }\n\n const call = async () =>\n generateText({\n model: model,\n prompt,\n system: options.system,\n temperature: options.temperature ?? this.config.temperature,\n maxOutputTokens: options.maxTokens ?? this.config.maxTokens\n });\n\n const response = await this.withRateLimitRetry(call);\n return (response).text as string;\n }\n\n async stream(prompt: string, options: AIRequestOptions = {}): Promise<AIStream> {\n const model = this.buildModel(options);\n const streamResult = streamText({\n model: model,\n prompt,\n system: options.system,\n temperature: options.temperature ?? this.config.temperature,\n maxOutputTokens: options.maxTokens ?? this.config.maxTokens\n });\n\n return streamResult.textStream;\n }\n\n async embed(value: string, options: AIEmbeddingOptions = {}) {\n const model = this.buildEmbeddingModel(options);\n const result = await this.withRateLimitRetry(() =>\n embed({\n model: model,\n value\n })\n );\n return (result).embedding as number[];\n }\n\n async embedMany(values: string[], options: AIEmbeddingOptions = {}) {\n const model = this.buildEmbeddingModel(options);\n const result = await this.withRateLimitRetry(() =>\n embedMany({\n model: model,\n values\n })\n );\n return (result).embeddings as number[][];\n }\n\n /**\n * Build and return the AI model instance for a given set of options.\n * Exposed for use by the tool-calling loop.\n */\n getModel(options: AIRequestOptions = {}) {\n return this.buildModel(options);\n }\n\n private buildModel(options: AIRequestOptions) {\n const provider = options.provider ?? this.config.provider ?? 'openai';\n const modelName = options.model ?? this.config.model ?? 'gpt-4o';\n\n switch (provider) {\n case 'anthropic': {\n const anthropic = createAnthropic({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return anthropic(modelName);\n }\n\n case 'google': {\n const google = createGoogleGenerativeAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return google(modelName);\n }\n\n case 'mistral': {\n const mistral = createMistral({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return mistral(modelName);\n }\n\n case 'groq': {\n const groq = createGroq({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return groq(modelName);\n }\n\n case 'xai': {\n const xai = createXai({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return xai(modelName);\n }\n\n case 'deepseek': {\n const deepseek = createDeepSeek({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return deepseek(modelName);\n }\n\n case 'cohere': {\n const cohere = createCohere({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return cohere(modelName);\n }\n\n case 'openrouter': {\n // OpenRouter is OpenAI-compatible but doesn't support Responses API\n const openrouter = createOpenAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl ?? 'https://openrouter.ai/api/v1'\n });\n return openrouter.chat(modelName);\n }\n\n case 'ollama': {\n // Ollama is OpenAI-compatible but doesn't support Responses API\n const ollama = createOpenAI({\n apiKey: this.config.apiKey ?? 'ollama', // Ollama doesn't need real key\n baseURL: this.config.baseUrl ?? 'http://localhost:11434/v1'\n });\n return ollama.chat(modelName);\n }\n\n case 'openai':\n default: {\n const openai = createOpenAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return openai(modelName);\n }\n }\n }\n\n private buildEmbeddingModel(options: AIEmbeddingOptions) {\n const provider = options.provider ?? this.config.provider ?? 'openai';\n const modelName = options.model ?? this.config.embeddingModel ?? 'text-embedding-3-small';\n\n // Providers without embedding support\n const noEmbeddingProviders = ['anthropic', 'xai', 'deepseek', 'groq'];\n if (noEmbeddingProviders.includes(provider)) {\n throw new Error(`Embedding generation is not supported for ${provider} provider`);\n }\n\n switch (provider) {\n case 'google': {\n const google = createGoogleGenerativeAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return google.textEmbeddingModel(modelName);\n }\n\n case 'mistral': {\n const mistral = createMistral({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return mistral.textEmbeddingModel(modelName);\n }\n\n case 'cohere': {\n const cohere = createCohere({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return cohere.textEmbeddingModel(modelName);\n }\n\n case 'openai':\n case 'openrouter':\n case 'ollama':\n default: {\n const openai = createOpenAI({\n apiKey: this.config.apiKey ?? (provider === 'ollama' ? 'ollama' : undefined),\n baseURL:\n this.config.baseUrl ??\n (provider === 'openrouter'\n ? 'https://openrouter.ai/api/v1'\n : provider === 'ollama'\n ? 'http://localhost:11434/v1'\n : undefined)\n });\n return openai.embedding(modelName);\n }\n }\n }\n\n private getRateLimiter() {\n if (!this.rateLimiter) {\n this.rateLimiter = new StatelessRateLimiter({\n maxRetries: this.config.rateLimitMaxRetries,\n baseDelay: this.config.rateLimitBaseDelay,\n maxDelay: this.config.rateLimitMaxDelay,\n jitterFactor: this.config.rateLimitJitterFactor,\n circuitBreakerThreshold: this.config.rateLimitCircuitBreakerThreshold,\n circuitBreakerTimeout: this.config.rateLimitCircuitBreakerTimeout\n });\n }\n return this.rateLimiter;\n }\n\n private withRateLimitRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (this.config.enableRateLimitRetry === false) {\n return fn();\n }\n return this.getRateLimiter().executeWithRetry(fn);\n }\n}\n","import type { WriteStream } from 'node:tty';\n\nexport type ExecutionLogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface ExecutionLogContext {\n executionId?: string;\n runId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n sessionId?: string;\n actorId?: string;\n agentNodeId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n}\n\nexport interface ExecutionLogAttributes {\n [key: string]: unknown;\n}\n\nexport interface ExecutionLogEntry extends ExecutionLogContext {\n v: 1;\n ts: string;\n level: ExecutionLogLevel;\n source: string;\n message: string;\n eventType?: string;\n systemGenerated?: boolean;\n attributes?: ExecutionLogAttributes;\n}\n\nexport interface ExecutionLogWireEntry {\n v: 1;\n ts: string;\n execution_id?: string;\n run_id?: string;\n workflow_id?: string;\n root_workflow_id?: string;\n parent_execution_id?: string;\n session_id?: string;\n actor_id?: string;\n agent_node_id?: string;\n reasoner_id?: string;\n caller_did?: string;\n target_did?: string;\n agent_node_did?: string;\n level: ExecutionLogLevel;\n source: string;\n event_type?: string;\n message: string;\n attributes?: ExecutionLogAttributes;\n system_generated?: boolean;\n}\n\nexport interface ExecutionLogBatchPayload {\n entries: ExecutionLogWireEntry[];\n}\n\nexport type ExecutionLogTransportPayload = ExecutionLogWireEntry | ExecutionLogBatchPayload;\n\nexport function isExecutionLogBatchPayload(\n payload: ExecutionLogTransportPayload\n): payload is ExecutionLogBatchPayload {\n return 'entries' in payload;\n}\n\nexport interface ExecutionLogEmitOptions {\n eventType?: string;\n source?: string;\n systemGenerated?: boolean;\n}\n\nexport interface ExecutionLogTransport {\n emit(payload: ExecutionLogTransportPayload): void | Promise<void>;\n}\n\nexport interface ExecutionLoggerOptions {\n contextProvider?: () => ExecutionLogContext | undefined;\n transport?: ExecutionLogTransport;\n mirrorToStdout?: boolean;\n stdout?: Pick<WriteStream, 'write'>;\n source?: string;\n}\n\nfunction safeJsonStringify(value: unknown): string {\n const seen = new WeakSet<object>();\n return JSON.stringify(value, (_key, current) => {\n if (typeof current === 'bigint') {\n return current.toString();\n }\n if (typeof current === 'object' && current !== null) {\n if (seen.has(current)) {\n return '[Circular]';\n }\n seen.add(current);\n }\n return current;\n });\n}\n\nfunction mergeAttributes(\n existing?: ExecutionLogAttributes,\n next?: ExecutionLogAttributes\n): ExecutionLogAttributes | undefined {\n if (!existing && !next) {\n return undefined;\n }\n return {\n ...(existing ?? {}),\n ...(next ?? {})\n };\n}\n\nexport function normalizeExecutionLogEntry(entry: ExecutionLogEntry): ExecutionLogWireEntry {\n return {\n v: entry.v,\n ts: entry.ts,\n execution_id: entry.executionId,\n run_id: entry.runId,\n workflow_id: entry.workflowId,\n root_workflow_id: entry.rootWorkflowId,\n parent_execution_id: entry.parentExecutionId,\n session_id: entry.sessionId,\n actor_id: entry.actorId,\n agent_node_id: entry.agentNodeId,\n reasoner_id: entry.reasonerId,\n caller_did: entry.callerDid,\n target_did: entry.targetDid,\n agent_node_did: entry.agentNodeDid,\n level: entry.level,\n source: entry.source,\n event_type: entry.eventType,\n message: entry.message,\n attributes: entry.attributes,\n system_generated: entry.systemGenerated\n };\n}\n\nexport function serializeExecutionLogEntry(entry: ExecutionLogEntry): string {\n return safeJsonStringify(normalizeExecutionLogEntry(entry));\n}\n\nexport class ExecutionLogger {\n private readonly contextProvider?: () => ExecutionLogContext | undefined;\n private readonly transport?: ExecutionLogTransport;\n private readonly mirrorToStdout: boolean;\n private readonly stdout?: Pick<WriteStream, 'write'>;\n private readonly defaultSource: string;\n\n constructor(options: ExecutionLoggerOptions = {}) {\n this.contextProvider = options.contextProvider;\n this.transport = options.transport;\n this.mirrorToStdout = options.mirrorToStdout ?? true;\n this.stdout = options.stdout ?? (typeof process !== 'undefined' ? process.stdout : undefined);\n this.defaultSource = options.source ?? 'sdk.logger';\n }\n\n log(\n level: ExecutionLogLevel,\n message: string,\n attributes?: ExecutionLogAttributes,\n options: ExecutionLogEmitOptions = {}\n ): ExecutionLogEntry {\n const context = this.contextProvider?.() ?? {};\n const entry: ExecutionLogEntry = {\n v: 1,\n ts: new Date().toISOString(),\n level,\n source: options.source ?? this.defaultSource,\n message,\n ...context,\n ...(options.eventType ? { eventType: options.eventType } : {}),\n ...(options.systemGenerated ? { systemGenerated: true } : {}),\n ...(attributes ? { attributes: mergeAttributes(undefined, attributes) } : {})\n };\n\n this.emit(entry);\n return entry;\n }\n\n debug(\n message: string,\n attributes?: ExecutionLogAttributes,\n options?: ExecutionLogEmitOptions\n ): ExecutionLogEntry {\n return this.log('debug', message, attributes, options);\n }\n\n info(\n message: string,\n attributes?: ExecutionLogAttributes,\n options?: ExecutionLogEmitOptions\n ): ExecutionLogEntry {\n return this.log('info', message, attributes, options);\n }\n\n warn(\n message: string,\n attributes?: ExecutionLogAttributes,\n options?: ExecutionLogEmitOptions\n ): ExecutionLogEntry {\n return this.log('warn', message, attributes, options);\n }\n\n error(\n message: string,\n attributes?: ExecutionLogAttributes,\n options?: ExecutionLogEmitOptions\n ): ExecutionLogEntry {\n return this.log('error', message, attributes, options);\n }\n\n system(\n eventType: string,\n message: string,\n attributes?: ExecutionLogAttributes\n ): ExecutionLogEntry {\n return this.log('info', message, attributes, {\n eventType,\n source: 'sdk.runtime',\n systemGenerated: true\n });\n }\n\n private emit(entry: ExecutionLogEntry): void {\n const wire = normalizeExecutionLogEntry(entry);\n const line = safeJsonStringify(wire) + '\\n';\n\n if (this.mirrorToStdout && this.stdout?.write) {\n this.stdout.write(line);\n }\n\n if (this.transport && wire.execution_id) {\n try {\n const result = this.transport.emit(wire);\n if (result && typeof (result as Promise<void>).catch === 'function') {\n void Promise.resolve(result).catch(() => {});\n }\n } catch {\n // Logging must never break execution flow.\n }\n }\n }\n}\n\nexport function createExecutionLogger(options: ExecutionLoggerOptions = {}): ExecutionLogger {\n return new ExecutionLogger(options);\n}\n","import http from 'node:http';\nimport https from 'node:https';\n\n/**\n * Shared HTTP agents with connection pooling to prevent socket exhaustion.\n *\n * These agents are shared across all SDK HTTP clients (AgentFieldClient,\n * MemoryClient, DidClient, MCPClient) to ensure consistent connection\n * pooling behavior and prevent socket leaks.\n *\n * Configuration:\n * - keepAlive: true - Reuse connections instead of creating new ones\n * - maxSockets: 10 - Max connections per host (IPv4/IPv6 counted separately)\n * - maxTotalSockets: 50 - Total connections across all hosts (prevents exhaustion)\n * - maxFreeSockets: 5 - Idle sockets to keep for reuse\n */\nexport const httpAgent = new http.Agent({\n keepAlive: true,\n maxSockets: 10,\n maxTotalSockets: 50,\n maxFreeSockets: 5\n});\n\nexport const httpsAgent = new https.Agent({\n keepAlive: true,\n maxSockets: 10,\n maxTotalSockets: 50,\n maxFreeSockets: 5\n});\n","import crypto from 'node:crypto';\n\nexport const HEADER_CALLER_DID = 'X-Caller-DID';\nexport const HEADER_DID_SIGNATURE = 'X-DID-Signature';\nexport const HEADER_DID_TIMESTAMP = 'X-DID-Timestamp';\nexport const HEADER_DID_NONCE = 'X-DID-Nonce';\n\n/**\n * Ed25519 PKCS#8 DER prefix for wrapping a 32-byte seed into a valid\n * PKCS#8 structure that Node.js `crypto.createPrivateKey` can parse.\n */\nconst ED25519_PKCS8_PREFIX = Buffer.from([\n 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,\n 0x03, 0x2b, 0x65, 0x70, 0x04, 0x22, 0x04, 0x20\n]);\n\ninterface EdDSAJWK {\n kty: string;\n crv: string;\n d?: string;\n x?: string;\n}\n\nexport class DIDAuthenticator {\n private _did?: string;\n private _privateKey?: crypto.KeyObject;\n\n constructor(did?: string, privateKeyJwk?: string) {\n if (did && privateKeyJwk) {\n this.setCredentials(did, privateKeyJwk);\n }\n }\n\n get isConfigured(): boolean {\n return this._did !== undefined && this._privateKey !== undefined;\n }\n\n get did(): string | undefined {\n return this._did;\n }\n\n signRequest(body: Buffer | Uint8Array): Record<string, string> {\n if (!this.isConfigured) {\n return {};\n }\n\n const timestamp = Math.floor(Date.now() / 1000).toString();\n const nonce = crypto.randomBytes(16).toString('hex');\n const bodyHash = crypto.createHash('sha256').update(body).digest('hex');\n const payload = `${timestamp}:${nonce}:${bodyHash}`;\n const signature = crypto.sign(null, Buffer.from(payload), this._privateKey!);\n const signatureB64 = signature.toString('base64');\n\n return {\n [HEADER_CALLER_DID]: this._did!,\n [HEADER_DID_SIGNATURE]: signatureB64,\n [HEADER_DID_TIMESTAMP]: timestamp,\n [HEADER_DID_NONCE]: nonce\n };\n }\n\n setCredentials(did: string, privateKeyJwk: string): void {\n this._privateKey = parsePrivateKeyJWK(privateKeyJwk);\n this._did = did;\n }\n}\n\nfunction parsePrivateKeyJWK(jwkJSON: string): crypto.KeyObject {\n let key: EdDSAJWK;\n try {\n key = JSON.parse(jwkJSON);\n } catch {\n throw new Error('Invalid JWK format: failed to parse JSON');\n }\n\n if (key.kty !== 'OKP' || key.crv !== 'Ed25519') {\n throw new Error('Invalid key type: expected Ed25519 OKP key');\n }\n\n if (!key.d) {\n throw new Error(\"Missing 'd' (private key) in JWK\");\n }\n\n const seedBytes = Buffer.from(key.d, 'base64url');\n if (seedBytes.length !== 32) {\n throw new Error(`Invalid private key length: expected 32 bytes, got ${seedBytes.length}`);\n }\n\n return crypto.createPrivateKey({\n key: Buffer.concat([ED25519_PKCS8_PREFIX, seedBytes]),\n format: 'der',\n type: 'pkcs8'\n });\n}\n","import axios, { AxiosInstance } from 'axios';\nimport type {\n AgentConfig,\n DiscoveryOptions,\n DiscoveryFormat,\n DiscoveryResult,\n DiscoveryResponse,\n CompactDiscoveryResponse,\n HealthStatus\n} from '../types/agent.js';\nimport {\n isExecutionLogBatchPayload,\n type ExecutionLogTransportPayload\n} from '../observability/ExecutionLogger.js';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\nimport { DIDAuthenticator } from './DIDAuthenticator.js';\n\nexport interface ExecutionStatusUpdate {\n status?: string;\n result?: Record<string, any>;\n error?: string;\n durationMs?: number;\n progress?: number;\n statusReason?: string;\n}\n\nexport class AgentFieldClient {\n private readonly http: AxiosInstance;\n private readonly config: AgentConfig;\n private readonly defaultHeaders: Record<string, string>;\n private didAuthenticator: DIDAuthenticator;\n\n constructor(config: AgentConfig) {\n const baseURL = (config.agentFieldUrl ?? 'http://localhost:8080').replace(/\\/$/, '');\nthis.http = axios.create({\n baseURL,\n timeout: 30000,\n httpAgent,\n httpsAgent\n });\n this.config = config;\n\n const mergedHeaders = { ...(config.defaultHeaders ?? {}) };\n if (config.apiKey) {\n mergedHeaders['X-API-Key'] = config.apiKey;\n }\n this.defaultHeaders = this.sanitizeHeaders(mergedHeaders);\n this.didAuthenticator = new DIDAuthenticator(config.did, config.privateKeyJwk);\n }\n\n async register(payload: any): Promise<any> {\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const res = await this.http.post('/api/v1/nodes/register', bodyStr, {\n headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders })\n });\n return res.data;\n }\n\n async getNode(nodeId: string): Promise<any> {\n const res = await this.http.get(`/api/v1/nodes/${encodeURIComponent(nodeId)}`, {\n headers: this.mergeHeaders({})\n });\n return res.data;\n }\n\n async heartbeat(status: 'starting' | 'ready' | 'degraded' | 'offline' = 'ready'): Promise<HealthStatus> {\n const nodeId = this.config.nodeId;\n const bodyStr = JSON.stringify({ status, version: this.config.version ?? '', timestamp: new Date().toISOString() });\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const res = await this.http.post(\n `/api/v1/nodes/${nodeId}/heartbeat`,\n bodyStr,\n { headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders }) }\n );\n return res.data as HealthStatus;\n }\n\n async execute<T = any>(\n target: string,\n input: any,\n metadata?: {\n runId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n sessionId?: string;\n actorId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n agentNodeId?: string;\n }\n ): Promise<T> {\n const headers: Record<string, string> = {};\n if (metadata?.runId) headers['X-Run-ID'] = metadata.runId;\n if (metadata?.workflowId) headers['X-Workflow-ID'] = metadata.workflowId;\n if (metadata?.rootWorkflowId) headers['X-Root-Workflow-ID'] = metadata.rootWorkflowId;\n if (metadata?.parentExecutionId) headers['X-Parent-Execution-ID'] = metadata.parentExecutionId;\n if (metadata?.reasonerId) headers['X-Reasoner-ID'] = metadata.reasonerId;\n if (metadata?.sessionId) headers['X-Session-ID'] = metadata.sessionId;\n if (metadata?.actorId) headers['X-Actor-ID'] = metadata.actorId;\n if (metadata?.callerDid) headers['X-Caller-DID'] = metadata.callerDid;\n if (metadata?.targetDid) headers['X-Target-DID'] = metadata.targetDid;\n if (metadata?.agentNodeDid) headers['X-Agent-Node-DID'] = metadata.agentNodeDid;\n if (metadata?.agentNodeId) headers['X-Agent-Node-ID'] = metadata.agentNodeId;\n\n const bodyStr = JSON.stringify({ input });\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n try {\n const res = await this.http.post(\n `/api/v1/execute/${target}`,\n bodyStr,\n { headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...headers, ...authHeaders }) }\n );\n return (res.data?.result as T) ?? res.data;\n } catch (err: any) {\n // Extract structured error from control plane response (e.g., 403 permission_denied).\n const respData = err?.response?.data;\n if (respData) {\n const status = err.response.status;\n const msg = respData.message || respData.error || JSON.stringify(respData);\n const enriched = new Error(`execute ${target} failed (${status}): ${msg}`);\n (enriched as any).status = status;\n (enriched as any).responseData = respData;\n throw enriched;\n }\n throw err;\n }\n }\n\n async publishWorkflowEvent(event: {\n executionId: string;\n runId: string;\n workflowId?: string;\n rootWorkflowId?: string;\n reasonerId: string;\n agentNodeId: string;\n status: 'waiting' | 'running' | 'succeeded' | 'failed';\n parentExecutionId?: string;\n parentWorkflowId?: string;\n statusReason?: string;\n inputData?: Record<string, any>;\n result?: any;\n error?: string;\n durationMs?: number;\n }) {\n const payload = {\n execution_id: event.executionId,\n workflow_id: event.workflowId ?? event.runId,\n run_id: event.runId,\n root_workflow_id: event.rootWorkflowId ?? event.workflowId ?? event.runId,\n reasoner_id: event.reasonerId,\n type: event.reasonerId,\n agent_node_id: event.agentNodeId,\n status: event.status,\n status_reason: event.statusReason,\n parent_execution_id: event.parentExecutionId,\n parent_workflow_id: event.parentWorkflowId ?? event.workflowId ?? event.runId,\n input_data: event.inputData ?? {},\n result: event.result,\n error: event.error,\n duration_ms: event.durationMs\n };\n\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const request = this.http\n .post('/api/v1/workflow/executions/events', bodyStr, {\n headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders }),\n timeout: this.config.devMode ? 1000 : undefined\n })\n .catch(() => {\n // Best-effort; avoid throwing to keep agent execution resilient\n });\n\n // Fire and forget to avoid blocking local executions in tests/dev mode.\n void request;\n }\n\n publishExecutionLogs(payload: ExecutionLogTransportPayload): void {\n const executionId = isExecutionLogBatchPayload(payload)\n ? payload.entries[0]?.execution_id\n : payload.execution_id;\n\n if (!executionId) {\n return;\n }\n\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const request = this.http\n .post(`/api/v1/executions/${encodeURIComponent(executionId)}/logs`, bodyStr, {\n headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders }),\n timeout: this.config.devMode ? 1000 : 5000\n })\n .catch(() => {\n // Best-effort; execution logs must never break the agent runtime.\n });\n\n void request;\n }\n\n async updateExecutionStatus(executionId: string, update: ExecutionStatusUpdate) {\n if (!executionId) {\n throw new Error('executionId is required to update workflow status');\n }\n\n const payload = {\n status: update.status ?? 'running',\n result: update.result,\n error: update.error,\n duration_ms: update.durationMs,\n progress: update.progress !== undefined ? Math.round(update.progress) : undefined,\n status_reason: update.statusReason\n };\n\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n await this.http.post(`/api/v1/executions/${executionId}/status`, bodyStr, {\n headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders })\n });\n }\n\n async discoverCapabilities(options: DiscoveryOptions = {}): Promise<DiscoveryResult> {\n const format = (options.format ?? 'json').toLowerCase() as DiscoveryFormat;\n const params: Record<string, string> = { format };\n const dedupe = (values?: string[]) =>\n Array.from(new Set((values ?? []).filter(Boolean))).map((v) => v!);\n\n const combinedAgents = dedupe([\n ...(options.agent ? [options.agent] : []),\n ...(options.nodeId ? [options.nodeId] : []),\n ...(options.agentIds ?? []),\n ...(options.nodeIds ?? [])\n ]);\n\n if (combinedAgents.length === 1) {\n params.agent = combinedAgents[0];\n } else if (combinedAgents.length > 1) {\n params.agent_ids = combinedAgents.join(',');\n }\n\n if (options.reasoner) params.reasoner = options.reasoner;\n if (options.skill) params.skill = options.skill;\n if (options.tags?.length) params.tags = dedupe(options.tags).join(',');\n\n if (options.includeInputSchema !== undefined) {\n params.include_input_schema = String(Boolean(options.includeInputSchema));\n }\n if (options.includeOutputSchema !== undefined) {\n params.include_output_schema = String(Boolean(options.includeOutputSchema));\n }\n if (options.includeDescriptions !== undefined) {\n params.include_descriptions = String(Boolean(options.includeDescriptions));\n }\n if (options.includeExamples !== undefined) {\n params.include_examples = String(Boolean(options.includeExamples));\n }\n if (options.healthStatus) params.health_status = options.healthStatus.toLowerCase();\n if (options.limit !== undefined) params.limit = String(options.limit);\n if (options.offset !== undefined) params.offset = String(options.offset);\n\n const res = await this.http.get('/api/v1/discovery/capabilities', {\n params,\n headers: this.mergeHeaders({\n ...(options.headers ?? {}),\n Accept: format === 'xml' ? 'application/xml' : 'application/json'\n }),\n responseType: format === 'xml' ? 'text' : 'json',\n transformResponse: (data) => data // preserve raw body for xml\n });\n\n const raw = typeof res.data === 'string' ? res.data : JSON.stringify(res.data);\n if (format === 'xml') {\n return { format: 'xml', raw, xml: raw };\n }\n\n const parsed = typeof res.data === 'string' ? JSON.parse(res.data) : res.data;\n if (format === 'compact') {\n return {\n format: 'compact',\n raw,\n compact: this.mapCompactDiscovery(parsed as any)\n };\n }\n\n return {\n format: 'json',\n raw,\n json: this.mapDiscoveryResponse(parsed as any)\n };\n }\n\n private mapDiscoveryResponse(payload: any): DiscoveryResponse {\n return {\n discoveredAt: String(payload?.discovered_at ?? ''),\n totalAgents: Number(payload?.total_agents ?? 0),\n totalReasoners: Number(payload?.total_reasoners ?? 0),\n totalSkills: Number(payload?.total_skills ?? 0),\n pagination: {\n limit: Number(payload?.pagination?.limit ?? 0),\n offset: Number(payload?.pagination?.offset ?? 0),\n hasMore: Boolean(payload?.pagination?.has_more)\n },\n capabilities: (payload?.capabilities ?? []).map((cap: any) => ({\n agentId: cap?.agent_id ?? '',\n baseUrl: cap?.base_url ?? '',\n version: cap?.version ?? '',\n healthStatus: cap?.health_status ?? '',\n deploymentType: cap?.deployment_type,\n lastHeartbeat: cap?.last_heartbeat,\n reasoners: (cap?.reasoners ?? []).map((r: any) => ({\n id: r?.id ?? '',\n description: r?.description,\n tags: r?.tags ?? [],\n inputSchema: r?.input_schema,\n outputSchema: r?.output_schema,\n examples: r?.examples,\n invocationTarget: r?.invocation_target ?? ''\n })),\n skills: (cap?.skills ?? []).map((s: any) => ({\n id: s?.id ?? '',\n description: s?.description,\n tags: s?.tags ?? [],\n inputSchema: s?.input_schema,\n invocationTarget: s?.invocation_target ?? ''\n }))\n }))\n };\n }\n\n private mapCompactDiscovery(payload: any): CompactDiscoveryResponse {\n const toCap = (cap: any) => ({\n id: cap?.id ?? '',\n agentId: cap?.agent_id ?? '',\n target: cap?.target ?? '',\n tags: cap?.tags ?? []\n });\n\n return {\n discoveredAt: String(payload?.discovered_at ?? ''),\n reasoners: (payload?.reasoners ?? []).map(toCap),\n skills: (payload?.skills ?? []).map(toCap)\n };\n }\n\n private sanitizeHeaders(headers: Record<string, any>): Record<string, string> {\n const sanitized: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n sanitized[key] = typeof value === 'string' ? value : String(value);\n });\n return sanitized;\n }\n\n private mergeHeaders(headers?: Record<string, any>): Record<string, string> {\n return {\n ...this.defaultHeaders,\n ...this.sanitizeHeaders(headers ?? {})\n };\n }\n\n private buildExecutionHeaders(metadata: {\n runId?: string;\n executionId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n agentNodeId?: string;\n }): Record<string, string> {\n const headers: Record<string, string> = {};\n if (metadata.runId) headers['x-run-id'] = metadata.runId;\n if (metadata.executionId) headers['x-execution-id'] = metadata.executionId;\n if (metadata.sessionId) headers['x-session-id'] = metadata.sessionId;\n if (metadata.actorId) headers['x-actor-id'] = metadata.actorId;\n if (metadata.workflowId) headers['x-workflow-id'] = metadata.workflowId;\n if (metadata.rootWorkflowId) headers['x-root-workflow-id'] = metadata.rootWorkflowId;\n if (metadata.parentExecutionId) headers['x-parent-execution-id'] = metadata.parentExecutionId;\n if (metadata.reasonerId) headers['x-reasoner-id'] = metadata.reasonerId;\n if (metadata.callerDid) headers['x-caller-did'] = metadata.callerDid;\n if (metadata.targetDid) headers['x-target-did'] = metadata.targetDid;\n if (metadata.agentNodeDid) headers['x-agent-node-did'] = metadata.agentNodeDid;\n if (metadata.agentNodeId) headers['x-agent-node-id'] = metadata.agentNodeId;\n return headers;\n }\n\n setDIDCredentials(did: string, privateKeyJwk: string): void {\n this.didAuthenticator.setCredentials(did, privateKeyJwk);\n }\n\n get didAuthConfigured(): boolean {\n return this.didAuthenticator.isConfigured;\n }\n\n getDID(): string | undefined {\n return this.didAuthenticator.did;\n }\n\n sendNote(message: string, tags: string[], agentNodeId: string, metadata: {\n runId?: string;\n executionId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n }, uiApiBaseUrl: string, devMode?: boolean): void {\n const payload = {\n message,\n tags: tags ?? [],\n timestamp: Date.now() / 1000,\n agent_node_id: agentNodeId\n };\n\n const executionHeaders = this.buildExecutionHeaders({ ...metadata, agentNodeId });\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const headers = this.mergeHeaders({\n 'Content-Type': 'application/json',\n ...executionHeaders,\n ...authHeaders\n });\n\n const request = axios\n .post(`${uiApiBaseUrl}/executions/note`, bodyStr, {\n headers,\n timeout: devMode ? 5000 : 10000,\n httpAgent,\n httpsAgent\n })\n .catch(() => {});\n void request;\n }\n}\n","import axios, { AxiosInstance, isAxiosError } from 'axios';\nimport type { MemoryScope } from '../types/agent.js';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\n\nexport interface MemoryRequestMetadata {\n workflowId?: string;\n sessionId?: string;\n actorId?: string;\n runId?: string;\n executionId?: string;\n parentExecutionId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n agentNodeId?: string;\n}\n\nexport interface MemoryRequestOptions {\n scope?: MemoryScope;\n scopeId?: string;\n metadata?: MemoryRequestMetadata;\n headers?: Record<string, string | number | boolean | undefined>;\n}\n\nexport interface VectorSearchOptions extends MemoryRequestOptions {\n topK?: number;\n filters?: Record<string, any>;\n}\n\nexport interface VectorSearchResult {\n key: string;\n scope: string;\n scopeId: string;\n score: number;\n metadata?: Record<string, any>;\n}\n\nexport class MemoryClientBase {\n protected readonly http: AxiosInstance;\n private readonly defaultHeaders: Record<string, string>;\n\n constructor(baseUrl: string, defaultHeaders?: Record<string, string | number | boolean | undefined>) {\n this.http = axios.create({\n baseURL: baseUrl.replace(/\\/$/, ''),\n timeout: 30000,\n httpAgent,\n httpsAgent\n });\n this.defaultHeaders = this.sanitizeHeaders(defaultHeaders ?? {});\n }\n\n protected buildHeaders(options: MemoryRequestOptions = {}) {\n const { scope, scopeId, metadata } = options;\n const headers: Record<string, string> = { ...this.defaultHeaders };\n\n const workflowId = metadata?.workflowId ?? metadata?.runId;\n if (workflowId) headers['X-Workflow-ID'] = workflowId;\n if (metadata?.sessionId) headers['X-Session-ID'] = metadata.sessionId;\n if (metadata?.actorId) headers['X-Actor-ID'] = metadata.actorId;\n if (metadata?.runId) headers['X-Run-ID'] = metadata.runId;\n if (metadata?.executionId) headers['X-Execution-ID'] = metadata.executionId;\n if (metadata?.parentExecutionId) headers['X-Parent-Execution-ID'] = metadata.parentExecutionId;\n if (metadata?.callerDid) headers['X-Caller-DID'] = metadata.callerDid;\n if (metadata?.targetDid) headers['X-Target-DID'] = metadata.targetDid;\n if (metadata?.agentNodeDid) headers['X-Agent-Node-DID'] = metadata.agentNodeDid;\n if (metadata?.agentNodeId) headers['X-Agent-Node-ID'] = metadata.agentNodeId;\n\n const headerName = this.scopeToHeader(scope);\n const resolvedScopeId = this.resolveScopeId(scope, scopeId, metadata);\n if (headerName && resolvedScopeId) {\n headers[headerName] = resolvedScopeId;\n }\n\n return { ...headers, ...this.sanitizeHeaders(options.headers ?? {}) };\n }\n\n private scopeToHeader(scope?: MemoryScope) {\n switch (scope) {\n case 'workflow':\n return 'X-Workflow-ID';\n case 'session':\n return 'X-Session-ID';\n case 'actor':\n return 'X-Actor-ID';\n default:\n return undefined;\n }\n }\n\n private resolveScopeId(scope?: MemoryScope, scopeId?: string, metadata?: MemoryRequestMetadata) {\n if (scopeId) return scopeId;\n switch (scope) {\n case 'workflow':\n return metadata?.workflowId ?? metadata?.runId;\n case 'session':\n return metadata?.sessionId;\n case 'actor':\n return metadata?.actorId;\n case 'global':\n return 'global';\n default:\n return undefined;\n }\n }\n\n private sanitizeHeaders(headers: Record<string, any>): Record<string, string> {\n const sanitized: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n sanitized[key] = typeof value === 'string' ? value : String(value);\n });\n return sanitized;\n }\n\n}\n\nexport class MemoryClient extends MemoryClientBase {\n\n constructor(baseUrl: string, defaultHeaders?: Record<string, string | number | boolean | undefined>) {\n super(baseUrl, defaultHeaders);\n }\n\n async set(key: string, data: any, options: MemoryRequestOptions = {}) {\n const payload: any = { key, data };\n if (options.scope) payload.scope = options.scope;\n\n await this.http.post('/api/v1/memory/set', payload, {\n headers: this.buildHeaders(options)\n });\n }\n\n async get<T = any>(key: string, options: MemoryRequestOptions = {}): Promise<T | undefined> {\n try {\n const payload: any = { key };\n if (options.scope) payload.scope = options.scope;\n\n const res = await this.http.post('/api/v1/memory/get', payload, {\n headers: this.buildHeaders(options)\n });\n return res.data?.data as T;\n } catch (err) {\n if (isAxiosError(err) && err.response?.status === 404) {\n return undefined;\n }\n throw err;\n }\n }\n\n async delete(key: string, options: MemoryRequestOptions = {}) {\n const payload: any = { key };\n if (options.scope) payload.scope = options.scope;\n\n await this.http.post('/api/v1/memory/delete', payload, {\n headers: this.buildHeaders(options)\n });\n }\n\n async listKeys(scope: MemoryScope, options: MemoryRequestOptions = {}) {\n const res = await this.http.get('/api/v1/memory/list', {\n params: { scope },\n headers: this.buildHeaders({ ...options, scope })\n });\n return (res.data ?? []).map((item: any) => item?.key).filter(Boolean) as string[];\n }\n\n async exists(key: string, options: MemoryRequestOptions = {}) {\n const value = await this.get(key, options);\n return value !== undefined;\n }\n\n async setVector(key: string, embedding: number[], metadata?: any, options: MemoryRequestOptions = {}) {\n const payload: any = {\n key,\n embedding\n };\n if (metadata !== undefined) payload.metadata = metadata;\n if (options.scope) payload.scope = options.scope;\n\n await this.http.post('/api/v1/memory/vector/set', payload, {\n headers: this.buildHeaders(options)\n });\n }\n\n async deleteVector(key: string, options: MemoryRequestOptions = {}) {\n const payload: any = { key };\n if (options.scope) payload.scope = options.scope;\n\n await this.http.post('/api/v1/memory/vector/delete', payload, {\n headers: this.buildHeaders(options)\n });\n }\n\n async searchVector(queryEmbedding: number[], options: VectorSearchOptions = {}): Promise<VectorSearchResult[]> {\n const payload: any = {\n query_embedding: queryEmbedding,\n top_k: options.topK ?? 10\n };\n if (options.filters) payload.filters = options.filters;\n if (options.scope) payload.scope = options.scope;\n\n const res = await this.http.post('/api/v1/memory/vector/search', payload, {\n headers: this.buildHeaders(options)\n });\n return res.data ?? [];\n }\n}\n","import WebSocket from 'ws';\nimport type { MemoryChangeEvent } from './MemoryInterface.js';\nimport { MemoryClientBase, MemoryRequestOptions } from './MemoryClient.js';\n\nexport type MemoryEventHandler = (event: MemoryChangeEvent) => Promise<void> | void;\n\nexport interface MemoryEventHistoryOptions extends MemoryRequestOptions {\n patterns?: string[],\n since?: Date,\n limit?: number,\n};\n\nexport class MemoryEventClient extends MemoryClientBase {\n private readonly url: string;\n private ws?: WebSocket;\n private handlers: MemoryEventHandler[] = [];\n private reconnectDelay = 1000;\n private closed = false;\n private reconnectPending = false;\n private reconnectTimer?: ReturnType<typeof setTimeout>;\n private readonly headers: Record<string, string>;\n private readonly apiKey?: string;\n\n constructor(baseUrl: string, headers?: Record<string, string | number | boolean | undefined>, apiKey?: string) {\n super(baseUrl, headers);\n this.url = `${baseUrl.replace(/^http/, 'ws')}/api/v1/memory/events/ws`;\n this.headers = this.buildForwardHeaders(headers ?? {});\n this.apiKey = apiKey;\n }\n\n start() {\n if (this.ws) return;\n this.connect();\n }\n\n onEvent(handler: MemoryEventHandler) {\n this.handlers.push(handler);\n }\n\n stop() {\n this.closed = true;\n this.cleanup();\n }\n\n private cleanup() {\n // Clear any pending reconnect timer\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = undefined;\n }\n if (this.ws) {\n // Remove all listeners to prevent reconnect triggers during cleanup\n this.ws.removeAllListeners();\n // Terminate forcefully to ensure socket is closed\n this.ws.terminate();\n this.ws = undefined;\n }\n }\n\n private connect() {\n // Clean up any existing connection first\n this.cleanup();\n this.reconnectPending = false;\n\n this.ws = new WebSocket(this.url, { headers: this.headers });\n\n this.ws.on('open', () => {\n this.reconnectDelay = 1000;\n });\n\n this.ws.on('message', async (raw) => {\n try {\n const parsed = JSON.parse(raw.toString()) as MemoryChangeEvent;\n for (const handler of this.handlers) {\n await handler(parsed);\n }\n } catch (err) {\n // swallow parsing errors to keep connection alive\n console.error('Failed to handle memory event', err);\n }\n });\n\n // Use a single handler for both close and error to prevent duplicate reconnects\n const handleDisconnect = () => this.scheduleReconnect();\n this.ws.on('close', handleDisconnect);\n this.ws.on('error', handleDisconnect);\n }\n\n private scheduleReconnect() {\n // Prevent duplicate reconnect scheduling\n if (this.closed || this.reconnectPending) return;\n this.reconnectPending = true;\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = undefined;\n if (this.closed) return;\n this.reconnectDelay = Math.min(this.reconnectDelay * 2, 30000);\n this.connect();\n }, this.reconnectDelay);\n }\n\n private buildForwardHeaders(headers: Record<string, any>): Record<string, string> {\n const allowed = new Set(['authorization', 'cookie']);\n const sanitized: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n const lower = key.toLowerCase();\n if (lower.startsWith('x-') || allowed.has(lower)) {\n sanitized[key] = typeof value === 'string' ? value : String(value);\n }\n });\n return sanitized;\n }\n\n\n async history(options: MemoryEventHistoryOptions = {}): Promise<MemoryChangeEvent[]> {\n const {\n patterns,\n since,\n limit = 100,\n scope,\n scopeId,\n } = options;\n\n try {\n const headers = this.buildHeaders(options);\n if (this.apiKey) {\n headers['X-API-Key'] = this.apiKey;\n }\n\n const params: Record<string, any> = {\n limit,\n };\n\n if (patterns && patterns.length > 0) {\n params.patterns = patterns.join(\",\");\n }\n\n if (since) {\n params.since = since.toISOString();\n }\n\n if (scope) {\n params.scope = scope;\n }\n\n if (scopeId) {\n params.scope_id = scopeId;\n }\n\n const res = await this.http.get('/api/v1/memory/events/history', {\n params: params,\n headers: headers\n });\n\n return (res.data ?? []) as MemoryChangeEvent[];\n } catch (e) {\n console.error(`Failed to get event history: ${e}`);\n return [];\n }\n }\n}\n","import type { MemoryScope } from '../types/agent.js';\nimport type { MemoryClient, MemoryRequestMetadata, VectorSearchOptions } from './MemoryClient.js';\nimport type { MemoryEventClient } from './MemoryEventClient.js';\nimport type { AIClient, AIEmbeddingOptions } from '../ai/AIClient.js';\n\nexport interface MemoryChangeEvent {\n key: string;\n data: any;\n scope: MemoryScope;\n scopeId: string;\n timestamp: string | Date;\n agentId: string;\n}\n\nexport type MemoryWatchHandler = (event: MemoryChangeEvent) => Promise<void> | void;\n\nexport class MemoryInterface {\n private readonly client: MemoryClient;\n private readonly eventClient?: MemoryEventClient;\n private readonly aiClient?: AIClient;\n private readonly defaultScope: MemoryScope;\n private readonly defaultScopeId?: string;\n private readonly metadata?: MemoryRequestMetadata;\n\n constructor(params: {\n client: MemoryClient;\n eventClient?: MemoryEventClient;\n aiClient?: AIClient;\n defaultScope?: MemoryScope;\n defaultScopeId?: string;\n metadata?: MemoryRequestMetadata;\n }) {\n this.client = params.client;\n this.eventClient = params.eventClient;\n this.aiClient = params.aiClient;\n this.defaultScope = params.defaultScope ?? 'workflow';\n this.defaultScopeId = params.defaultScopeId;\n this.metadata = params.metadata;\n }\n\n async set(key: string, data: any, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n await this.client.set(key, data, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n get<T = any>(key: string, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n // If caller uses defaults, perform hierarchical fallback lookup; otherwise fetch the explicit scope only.\n if (scope === this.defaultScope && scopeId === this.defaultScopeId) {\n return this.getWithFallback<T>(key);\n }\n\n return this.client.get<T>(key, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n async getWithFallback<T = any>(key: string) {\n for (const candidate of this.getScopeOrder()) {\n const value = await this.client.get<T>(key, {\n scope: candidate.scope,\n scopeId: candidate.scopeId,\n metadata: this.metadata\n });\n if (value !== undefined) return value;\n }\n return undefined;\n }\n\n async setVector(\n key: string,\n embedding: number[],\n metadata?: any,\n scope: MemoryScope = this.defaultScope,\n scopeId = this.defaultScopeId\n ) {\n await this.client.setVector(key, embedding, metadata, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n async deleteVector(key: string, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n await this.client.deleteVector(key, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n searchVector(queryEmbedding: number[], options: Omit<VectorSearchOptions, 'metadata'> = {}) {\n return this.client.searchVector(queryEmbedding, {\n ...options,\n metadata: this.metadata\n });\n }\n\n delete(key: string, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n return this.client.delete(key, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n exists(key: string, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n return this.client.exists(key, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n listKeys(scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n return this.client.listKeys(scope, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n async embedText(text: string, options?: AIEmbeddingOptions) {\n if (!this.aiClient) {\n throw new Error('AI client not configured for embeddings');\n }\n return this.aiClient.embed(text, options);\n }\n\n async embedTexts(texts: string[], options?: AIEmbeddingOptions) {\n if (!this.aiClient) {\n throw new Error('AI client not configured for embeddings');\n }\n return this.aiClient.embedMany(texts, options);\n }\n\n async embedAndSet(\n key: string,\n text: string,\n metadata?: any,\n scope: MemoryScope = this.defaultScope,\n scopeId = this.defaultScopeId,\n embeddingOptions?: AIEmbeddingOptions\n ) {\n const embedding = await this.embedText(text, embeddingOptions);\n await this.setVector(key, embedding, metadata, scope, scopeId);\n return embedding;\n }\n\n async deleteVectors(keys: string[], scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n for (const key of keys) {\n await this.deleteVector(key, scope, scopeId);\n }\n }\n\n workflow(scopeId: string) {\n return this.cloneWithScope('workflow', scopeId);\n }\n\n session(scopeId: string) {\n return this.cloneWithScope('session', scopeId);\n }\n\n actor(scopeId: string) {\n return this.cloneWithScope('actor', scopeId);\n }\n\n get globalScope() {\n return this.cloneWithScope('global', 'global');\n }\n\n onEvent(handler: MemoryWatchHandler) {\n this.eventClient?.onEvent(handler);\n }\n\n private cloneWithScope(scope: MemoryScope, scopeId?: string) {\n return new MemoryInterface({\n client: this.client,\n eventClient: this.eventClient,\n aiClient: this.aiClient,\n defaultScope: scope,\n defaultScopeId: scopeId ?? this.resolveScopeId(scope, this.metadata),\n metadata: this.metadata\n });\n }\n\n private getScopeOrder(): Array<{ scope: MemoryScope; scopeId?: string }> {\n const metadata = this.metadata ?? {};\n const order: Array<{ scope: MemoryScope; scopeId?: string }> = [];\n\n const pushUnique = (scope: MemoryScope, scopeId?: string) => {\n const key = `${scope}:${scopeId ?? ''}`;\n if (!order.some((c) => `${c.scope}:${c.scopeId ?? ''}` === key)) {\n order.push({ scope, scopeId });\n }\n };\n\n pushUnique(this.defaultScope, this.defaultScopeId ?? this.resolveScopeId(this.defaultScope, metadata));\n\n const defaultSequence: MemoryScope[] = ['workflow', 'session', 'actor', 'global'];\n defaultSequence.forEach((scope) => {\n pushUnique(scope, this.resolveScopeId(scope, metadata));\n });\n\n return order;\n }\n\n private resolveScopeId(scope: MemoryScope, metadata?: MemoryRequestMetadata) {\n switch (scope) {\n case 'workflow':\n return metadata?.workflowId ?? metadata?.runId;\n case 'session':\n return metadata?.sessionId;\n case 'actor':\n return metadata?.actorId;\n case 'global':\n return 'global';\n default:\n return undefined;\n }\n }\n}\n","import { Buffer } from 'node:buffer';\nimport axios, { type AxiosInstance } from 'axios';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\n\n// ============================================================================\n// DID Identity Types\n// ============================================================================\n\nexport interface DIDIdentity {\n did: string;\n privateKeyJwk?: string;\n publicKeyJwk: string;\n derivationPath: string;\n componentType: string;\n functionName?: string;\n}\n\nexport interface DIDIdentityPackage {\n agentDid: DIDIdentity;\n reasonerDids: Record<string, DIDIdentity>;\n skillDids: Record<string, DIDIdentity>;\n agentfieldServerId: string;\n}\n\nexport interface DIDRegistrationRequest {\n agentNodeId: string;\n reasoners: Array<{ id: string; [key: string]: any }>;\n skills: Array<{ id: string; [key: string]: any }>;\n}\n\nexport interface DIDRegistrationResponse {\n success: boolean;\n identityPackage?: DIDIdentityPackage;\n message?: string;\n error?: string;\n}\n\n// ============================================================================\n// Credential Types\n// ============================================================================\n\nexport interface ExecutionCredential {\n vcId: string;\n executionId: string;\n workflowId: string;\n sessionId?: string;\n issuerDid?: string;\n targetDid?: string;\n callerDid?: string;\n vcDocument: any;\n signature?: string;\n inputHash?: string;\n outputHash?: string;\n status: string;\n createdAt: string;\n}\n\nexport interface WorkflowCredential {\n workflowId: string;\n sessionId?: string;\n componentVcs: string[];\n workflowVcId: string;\n status: string;\n startTime: string;\n endTime?: string;\n totalSteps: number;\n completedSteps: number;\n}\n\nexport interface AuditTrailFilters {\n workflowId?: string;\n sessionId?: string;\n issuerDid?: string;\n status?: string;\n limit?: number;\n}\n\nexport interface AuditTrailExport {\n agentDids: string[];\n executionVcs: Array<{\n vcId: string;\n executionId: string;\n workflowId: string;\n sessionId?: string;\n issuerDid?: string;\n targetDid?: string;\n callerDid?: string;\n status: string;\n createdAt: string;\n }>;\n workflowVcs: WorkflowCredential[];\n totalCount: number;\n filtersApplied?: Record<string, any>;\n}\n\nexport interface GenerateCredentialParams {\n executionContext: {\n executionId: string;\n workflowId?: string;\n sessionId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n timestamp?: string | Date;\n };\n inputData?: any;\n outputData?: any;\n status?: string;\n errorMessage?: string;\n durationMs?: number;\n headers?: Record<string, string>;\n}\n\nexport class DidClient {\n private readonly http: AxiosInstance;\n private readonly defaultHeaders: Record<string, string>;\n\n constructor(baseUrl: string, defaultHeaders?: Record<string, string | number | boolean | undefined>) {\n this.http = axios.create({\n baseURL: baseUrl.replace(/\\/$/, ''),\n timeout: 30000,\n httpAgent,\n httpsAgent\n });\n this.defaultHeaders = this.sanitizeHeaders(defaultHeaders ?? {});\n }\n\n /**\n * Register an agent with the DID system and obtain an identity package.\n * This must be called before generating VCs to get the caller/target DIDs.\n */\n async registerAgent(request: DIDRegistrationRequest): Promise<DIDRegistrationResponse> {\n const payload = {\n agent_node_id: request.agentNodeId,\n reasoners: request.reasoners,\n skills: request.skills\n };\n\n const res = await this.http.post('/api/v1/did/register', payload, {\n headers: this.mergeHeaders()\n });\n\n const data = res.data ?? {};\n if (!data.success) {\n return {\n success: false,\n error: data.error ?? 'DID registration failed'\n };\n }\n\n return {\n success: true,\n identityPackage: this.parseIdentityPackage(data.identity_package),\n message: data.message\n };\n }\n\n private parseIdentityPackage(pkg: any): DIDIdentityPackage {\n const parseIdentity = (data: any): DIDIdentity => ({\n did: data?.did ?? '',\n privateKeyJwk: data?.private_key_jwk,\n publicKeyJwk: data?.public_key_jwk ?? '',\n derivationPath: data?.derivation_path ?? '',\n componentType: data?.component_type ?? '',\n functionName: data?.function_name\n });\n\n const reasonerDids: Record<string, DIDIdentity> = {};\n if (pkg?.reasoner_dids) {\n for (const [name, data] of Object.entries(pkg.reasoner_dids)) {\n reasonerDids[name] = parseIdentity(data);\n }\n }\n\n const skillDids: Record<string, DIDIdentity> = {};\n if (pkg?.skill_dids) {\n for (const [name, data] of Object.entries(pkg.skill_dids)) {\n skillDids[name] = parseIdentity(data);\n }\n }\n\n return {\n agentDid: parseIdentity(pkg?.agent_did),\n reasonerDids,\n skillDids,\n agentfieldServerId: pkg?.agentfield_server_id ?? ''\n };\n }\n\n async generateCredential(params: GenerateCredentialParams): Promise<ExecutionCredential> {\n const ctx = params.executionContext;\n const timestamp =\n ctx.timestamp instanceof Date\n ? ctx.timestamp.toISOString()\n : ctx.timestamp ?? new Date().toISOString();\n\n const payload = {\n execution_context: {\n execution_id: ctx.executionId,\n workflow_id: ctx.workflowId,\n session_id: ctx.sessionId,\n caller_did: ctx.callerDid,\n target_did: ctx.targetDid,\n agent_node_did: ctx.agentNodeDid,\n timestamp\n },\n input_data: this.serializeDataForJson(params.inputData),\n output_data: this.serializeDataForJson(params.outputData),\n status: params.status ?? 'succeeded',\n error_message: params.errorMessage,\n duration_ms: params.durationMs ?? 0\n };\n\n const res = await this.http.post('/api/v1/execution/vc', payload, {\n headers: this.mergeHeaders(params.headers)\n });\n\n return this.mapExecutionCredential(res.data);\n }\n\n async exportAuditTrail(filters: AuditTrailFilters = {}): Promise<AuditTrailExport> {\n const res = await this.http.get('/api/v1/did/export/vcs', {\n params: this.cleanFilters(filters),\n headers: this.mergeHeaders()\n });\n\n const data = res.data ?? {};\n return {\n agentDids: data.agent_dids ?? [],\n executionVcs: (data.execution_vcs ?? []).map((vc: any) => ({\n vcId: vc.vc_id,\n executionId: vc.execution_id,\n workflowId: vc.workflow_id,\n sessionId: vc.session_id,\n issuerDid: vc.issuer_did,\n targetDid: vc.target_did,\n callerDid: vc.caller_did,\n status: vc.status,\n createdAt: vc.created_at\n })),\n workflowVcs: (data.workflow_vcs ?? []).map((vc: any) => ({\n workflowId: vc.workflow_id,\n sessionId: vc.session_id,\n componentVcs: vc.component_vcs ?? [],\n workflowVcId: vc.workflow_vc_id ?? vc.workflowVcId ?? vc.workflow_id,\n status: vc.status,\n startTime: vc.start_time,\n endTime: vc.end_time,\n totalSteps: vc.total_steps ?? 0,\n completedSteps: vc.completed_steps ?? 0\n })),\n totalCount: data.total_count ?? 0,\n filtersApplied: data.filters_applied\n };\n }\n\n private serializeDataForJson(data: any) {\n if (data === undefined || data === null) return '';\n let value: string;\n if (typeof data === 'string') {\n value = data;\n } else if (data instanceof Uint8Array) {\n value = Buffer.from(data).toString('utf-8');\n } else if (typeof data === 'object') {\n try {\n value = JSON.stringify(data, Object.keys(data).sort());\n } catch {\n value = String(data);\n }\n } else {\n value = String(data);\n }\n return Buffer.from(value, 'utf-8').toString('base64');\n }\n\n private mapExecutionCredential(data: any): ExecutionCredential {\n return {\n vcId: data?.vc_id ?? '',\n executionId: data?.execution_id ?? '',\n workflowId: data?.workflow_id ?? '',\n sessionId: data?.session_id,\n issuerDid: data?.issuer_did,\n targetDid: data?.target_did,\n callerDid: data?.caller_did,\n vcDocument: data?.vc_document,\n signature: data?.signature,\n inputHash: data?.input_hash,\n outputHash: data?.output_hash,\n status: data?.status ?? '',\n createdAt: data?.created_at ?? ''\n };\n }\n\n private cleanFilters(filters: AuditTrailFilters) {\n const cleaned: Record<string, any> = {};\n if (filters.workflowId) cleaned.workflow_id = filters.workflowId;\n if (filters.sessionId) cleaned.session_id = filters.sessionId;\n if (filters.issuerDid) cleaned.issuer_did = filters.issuerDid;\n if (filters.status) cleaned.status = filters.status;\n if (filters.limit !== undefined) cleaned.limit = filters.limit;\n return cleaned;\n }\n\n private mergeHeaders(headers?: Record<string, any>) {\n return {\n ...this.defaultHeaders,\n ...this.sanitizeHeaders(headers ?? {})\n };\n }\n\n private sanitizeHeaders(headers: Record<string, any>): Record<string, string> {\n const sanitized: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n sanitized[key] = typeof value === 'string' ? value : String(value);\n });\n return sanitized;\n }\n}\n","import type { ExecutionMetadata } from '../context/ExecutionContext.js';\nimport { DidClient, type AuditTrailFilters, type ExecutionCredential, type AuditTrailExport } from './DidClient.js';\n\nexport interface GenerateCredentialOptions {\n inputData?: any;\n outputData?: any;\n status?: string;\n errorMessage?: string;\n durationMs?: number;\n timestamp?: string | Date;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n workflowId?: string;\n sessionId?: string;\n executionId?: string;\n headers?: Record<string, string>;\n}\n\nexport class DidInterface {\n private readonly client: DidClient;\n private readonly metadata: ExecutionMetadata;\n private readonly enabled: boolean;\n private readonly defaultInput: any;\n\n constructor(params: { client: DidClient; metadata: ExecutionMetadata; enabled: boolean; defaultInput?: any }) {\n this.client = params.client;\n this.metadata = params.metadata;\n this.enabled = params.enabled;\n this.defaultInput = params.defaultInput;\n }\n\n async generateCredential(options: GenerateCredentialOptions = {}): Promise<ExecutionCredential> {\n if (!this.enabled) {\n throw new Error('DID/VC features are disabled. Enable didEnabled in AgentConfig to use ctx.did.');\n }\n\n const executionContext = {\n executionId: options.executionId ?? this.metadata.executionId,\n workflowId: options.workflowId ?? this.metadata.workflowId ?? this.metadata.runId,\n sessionId: options.sessionId ?? this.metadata.sessionId,\n callerDid: options.callerDid ?? this.metadata.callerDid,\n targetDid: options.targetDid ?? this.metadata.targetDid,\n agentNodeDid: options.agentNodeDid ?? this.metadata.agentNodeDid,\n timestamp: options.timestamp\n };\n\n return this.client.generateCredential({\n executionContext,\n inputData: options.inputData ?? this.defaultInput,\n outputData: options.outputData,\n status: options.status,\n errorMessage: options.errorMessage,\n durationMs: options.durationMs,\n headers: options.headers\n });\n }\n\n exportAuditTrail(filters?: AuditTrailFilters): Promise<AuditTrailExport> {\n if (!this.enabled) {\n throw new Error('DID/VC features are disabled. Enable didEnabled in AgentConfig to use ctx.did.');\n }\n return this.client.exportAuditTrail(filters);\n }\n}\n","import {\n DidClient,\n type DIDIdentityPackage,\n type DIDRegistrationRequest\n} from './DidClient.js';\n\n/**\n * Manages DID registration and identity package storage for an agent.\n *\n * This class handles:\n * - Registering the agent with the DID system\n * - Storing the identity package (agent DID, reasoner DIDs, skill DIDs)\n * - Resolving DIDs for specific functions (reasoners/skills)\n */\nexport class DidManager {\n private readonly client: DidClient;\n private readonly agentNodeId: string;\n private identityPackage?: DIDIdentityPackage;\n private _enabled = false;\n\n constructor(client: DidClient, agentNodeId: string) {\n this.client = client;\n this.agentNodeId = agentNodeId;\n }\n\n /**\n * Register agent with the DID system and obtain identity package.\n *\n * @param reasoners - List of reasoner definitions\n * @param skills - List of skill definitions\n * @returns true if registration succeeded\n */\n async registerAgent(\n reasoners: Array<{ id: string; [key: string]: any }>,\n skills: Array<{ id: string; [key: string]: any }>\n ): Promise<boolean> {\n const request: DIDRegistrationRequest = {\n agentNodeId: this.agentNodeId,\n reasoners,\n skills\n };\n\n const response = await this.client.registerAgent(request);\n\n if (response.success && response.identityPackage) {\n this.identityPackage = response.identityPackage;\n this._enabled = true;\n return true;\n }\n\n console.warn(`[DID] Registration failed: ${response.error ?? 'Unknown error'}`);\n return false;\n }\n\n /**\n * Check if DID system is enabled and identity package is available.\n */\n get enabled(): boolean {\n return this._enabled && this.identityPackage !== undefined;\n }\n\n /**\n * Get the agent node DID.\n */\n getAgentDid(): string | undefined {\n return this.identityPackage?.agentDid.did;\n }\n\n /**\n * Get DID for a specific function (reasoner or skill).\n * Falls back to agent DID if function not found.\n *\n * @param functionName - Name of the reasoner or skill\n * @returns DID string or undefined if not registered\n */\n getFunctionDid(functionName: string): string | undefined {\n if (!this.identityPackage) {\n return undefined;\n }\n\n // Check reasoners first\n const reasonerDid = this.identityPackage.reasonerDids[functionName];\n if (reasonerDid) {\n return reasonerDid.did;\n }\n\n // Check skills\n const skillDid = this.identityPackage.skillDids[functionName];\n if (skillDid) {\n return skillDid.did;\n }\n\n // Fall back to agent DID\n return this.identityPackage.agentDid.did;\n }\n\n /**\n * Get the full identity package (for debugging/inspection).\n */\n getIdentityPackage(): DIDIdentityPackage | undefined {\n return this.identityPackage;\n }\n\n /**\n * Get a summary of the identity for debugging/monitoring.\n */\n getIdentitySummary(): Record<string, any> {\n if (!this.identityPackage) {\n return { enabled: false, message: 'No identity package available' };\n }\n\n return {\n enabled: true,\n agentDid: this.identityPackage.agentDid.did,\n agentfieldServerId: this.identityPackage.agentfieldServerId,\n reasonerCount: Object.keys(this.identityPackage.reasonerDids).length,\n skillCount: Object.keys(this.identityPackage.skillDids).length,\n reasonerDids: Object.fromEntries(\n Object.entries(this.identityPackage.reasonerDids).map(([name, identity]) => [name, identity.did])\n ),\n skillDids: Object.fromEntries(\n Object.entries(this.identityPackage.skillDids).map(([name, identity]) => [name, identity.did])\n )\n };\n }\n}\n","export function matchesPattern(pattern: string, value: string) {\n const escaped = pattern.replace(/[-/\\\\^$+?.()|[\\]{}]/g, '\\\\$&').replace(/\\*/g, '.*');\n const regex = new RegExp(`^${escaped}$`);\n return regex.test(value);\n}\n","import { zodToJsonSchema } from 'zod-to-json-schema';\nimport type { ZodType } from 'zod';\n\n/**\n * Check if a value is a Zod schema by looking for Zod's internal structure.\n */\nfunction isZodSchema(value: unknown): value is ZodType {\n if (!value || typeof value !== 'object') return false;\n const obj = value as Record<string, unknown>;\n // Zod schemas have _def with typeName, or ~standard with vendor: 'zod'\n return (\n ('_def' in obj && typeof obj._def === 'object') ||\n ('~standard' in obj && (obj['~standard'] as Record<string, unknown>)?.vendor === 'zod')\n );\n}\n\n/**\n * Convert a schema to JSON Schema format.\n * If the input is a Zod schema, converts it using zod-to-json-schema.\n * If the input is already a plain object (assumed to be JSON Schema), returns it as-is.\n * If the input is undefined/null, returns an empty object.\n */\nexport function toJsonSchema(schema: unknown): Record<string, unknown> {\n if (schema === undefined || schema === null) {\n return {};\n }\n\n if (isZodSchema(schema)) {\n // Convert Zod schema to JSON Schema\n // Use 'openApi3' target for better compatibility with tool calling\n const jsonSchema = zodToJsonSchema(schema, {\n target: 'openApi3',\n $refStrategy: 'none', // Inline all definitions instead of using $ref\n });\n\n // Remove the $schema property as it's not needed for tool calling\n if (typeof jsonSchema === 'object' && jsonSchema !== null) {\n const { $schema, ...rest } = jsonSchema as Record<string, unknown>;\n return rest;\n }\n return jsonSchema as Record<string, unknown>;\n }\n\n // Assume it's already a JSON Schema or plain object\n if (typeof schema === 'object') {\n return schema as Record<string, unknown>;\n }\n\n return {};\n}\n","import type { AgentFieldClient } from '../client/AgentFieldClient.js';\n\nexport interface WorkflowMetadata {\n executionId: string;\n runId?: string;\n workflowId?: string;\n agentNodeId?: string;\n reasonerId?: string;\n}\n\nexport interface WorkflowProgressOptions {\n status?: string;\n result?: Record<string, any>;\n error?: string;\n durationMs?: number;\n}\n\nexport class WorkflowReporter {\n private readonly client: AgentFieldClient;\n private readonly metadata: WorkflowMetadata;\n\n constructor(client: AgentFieldClient, metadata: WorkflowMetadata) {\n if (!metadata.executionId) {\n throw new Error('WorkflowReporter requires an executionId');\n }\n this.client = client;\n this.metadata = metadata;\n }\n\n async progress(progress: number, options?: WorkflowProgressOptions) {\n const normalized = Math.min(100, Math.max(0, Math.round(progress)));\n return this.client.updateExecutionStatus(this.metadata.executionId, {\n status: options?.status ?? 'running',\n progress: normalized,\n result: options?.result,\n error: options?.error,\n durationMs: options?.durationMs\n });\n }\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport type { MCPServerConfig } from '../types/agent.js';\nimport type { MCPTool } from '../types/mcp.js';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\n\nexport class MCPClient {\n readonly alias: string;\n readonly baseUrl: string;\n readonly transport: 'http' | 'bridge';\n private readonly http: AxiosInstance;\n private readonly devMode: boolean;\n private lastHealthy = false;\n\n constructor(config: MCPServerConfig, devMode?: boolean) {\n if (!config.alias) {\n throw new Error('MCP server alias is required');\n }\n if (!config.url && !config.port) {\n throw new Error(`MCP server \"${config.alias}\" requires a url or port`);\n }\n\n this.alias = config.alias;\n this.transport = config.transport ?? 'http';\n this.baseUrl = (config.url ?? `http://localhost:${config.port}`).replace(/\\/$/, '');\n this.http = axios.create({\n baseURL: this.baseUrl,\n headers: config.headers,\n timeout: 30000,\n httpAgent,\n httpsAgent\n });\n this.devMode = Boolean(devMode);\n }\n\n async healthCheck(): Promise<boolean> {\n try {\n await this.http.get('/health');\n this.lastHealthy = true;\n return true;\n } catch (err) {\n this.lastHealthy = false;\n if (this.devMode) {\n console.warn(`MCP health check failed for ${this.alias}:`, err instanceof Error ? err.message : err);\n }\n return false;\n }\n }\n\n async listTools(): Promise<MCPTool[]> {\n try {\n if (this.transport === 'bridge') {\n const res = await this.http.post('/mcp/tools/list');\n const tools = res.data?.tools ?? [];\n return this.normalizeTools(tools);\n }\n\n const res = await this.http.post('/mcp/v1', {\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'tools/list',\n params: {}\n });\n const tools = res.data?.result?.tools ?? [];\n return this.normalizeTools(tools);\n } catch (err) {\n if (this.devMode) {\n console.warn(`MCP listTools failed for ${this.alias}:`, err instanceof Error ? err.message : err);\n }\n return [];\n }\n }\n\n async callTool(toolName: string, arguments_: Record<string, any> = {}): Promise<any> {\n if (!toolName) {\n throw new Error('toolName is required');\n }\n\n try {\n if (this.transport === 'bridge') {\n const res = await this.http.post('/mcp/tools/call', {\n tool_name: toolName,\n arguments: arguments_\n });\n return res.data?.result ?? res.data;\n }\n\n const res = await this.http.post('/mcp/v1', {\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'tools/call',\n params: { name: toolName, arguments: arguments_ }\n });\n\n if (res.data?.error) {\n throw new Error(String(res.data.error?.message ?? res.data.error));\n }\n\n if (res.data?.result !== undefined) {\n return res.data.result;\n }\n\n return res.data;\n } catch (err) {\n if (this.devMode) {\n console.warn(`MCP callTool failed for ${this.alias}.${toolName}:`, err instanceof Error ? err.message : err);\n }\n throw err;\n }\n }\n\n get lastHealthStatus() {\n return this.lastHealthy;\n }\n\n private normalizeTools(tools: any[]): MCPTool[] {\n return (tools ?? []).map((tool) => ({\n name: tool?.name ?? 'unknown',\n description: tool?.description,\n inputSchema: tool?.inputSchema ?? tool?.input_schema,\n input_schema: tool?.input_schema\n }));\n }\n}\n","import type { MCPServerConfig } from '../types/agent.js';\nimport type { MCPHealthSummary } from '../types/mcp.js';\nimport { MCPClient } from './MCPClient.js';\n\nexport class MCPClientRegistry {\n private readonly clients = new Map<string, MCPClient>();\n private readonly devMode: boolean;\n\n constructor(devMode?: boolean) {\n this.devMode = Boolean(devMode);\n }\n\n register(config: MCPServerConfig): MCPClient {\n const client = new MCPClient(config, this.devMode);\n this.clients.set(config.alias, client);\n return client;\n }\n\n get(alias: string) {\n return this.clients.get(alias);\n }\n\n list(): MCPClient[] {\n return Array.from(this.clients.values());\n }\n\n clear(): void {\n this.clients.clear();\n }\n\n async healthSummary(): Promise<MCPHealthSummary> {\n if (!this.clients.size) {\n return {\n status: 'disabled',\n totalServers: 0,\n healthyServers: 0,\n servers: []\n };\n }\n\n const results = await Promise.all(\n Array.from(this.clients.values()).map(async (client) => {\n const healthy = await client.healthCheck();\n return {\n alias: client.alias,\n baseUrl: client.baseUrl,\n transport: client.transport,\n healthy\n };\n })\n );\n\n const healthyCount = results.filter((r) => r.healthy).length;\n const status: MCPHealthSummary['status'] =\n healthyCount === 0 ? 'degraded' : healthyCount === results.length ? 'ok' : 'degraded';\n\n return {\n status,\n totalServers: results.length,\n healthyServers: healthyCount,\n servers: results\n };\n }\n}\n","import type { Agent } from '../agent/Agent.js';\nimport type { MCPServerConfig } from '../types/agent.js';\nimport type { MCPTool, MCPToolRegistration } from '../types/mcp.js';\nimport { MCPClientRegistry } from './MCPClientRegistry.js';\n\nexport interface MCPToolRegistrarOptions {\n namespace?: string;\n tags?: string[];\n devMode?: boolean;\n}\n\nexport class MCPToolRegistrar {\n private readonly registered = new Set<string>();\n private readonly devMode: boolean;\n\n constructor(\n private readonly agent: Agent,\n private readonly registry: MCPClientRegistry,\n private readonly options: MCPToolRegistrarOptions = {}\n ) {\n this.devMode = Boolean(options.devMode);\n }\n\n registerServers(servers: MCPServerConfig[]) {\n servers.forEach((server) => this.registry.register(server));\n }\n\n async registerAll(): Promise<{ registered: MCPToolRegistration[] }> {\n const registrations: MCPToolRegistration[] = [];\n const clients = this.registry.list();\n\n for (const client of clients) {\n const healthy = await client.healthCheck();\n if (!healthy) {\n if (this.devMode) {\n console.warn(`Skipping MCP server ${client.alias} (health check failed)`);\n }\n continue;\n }\n\n const tools = await client.listTools();\n for (const tool of tools) {\n if (!tool?.name) continue;\n\n const skillName = this.buildSkillName(client.alias, tool.name);\n if (this.registered.has(skillName) || this.agent.skills.get(skillName)) {\n continue;\n }\n\n this.agent.skill(\n skillName,\n async (ctx) => {\n const args = (ctx.input && typeof ctx.input === 'object') ? (ctx.input as Record<string, any>) : {};\n const result = await client.callTool(tool.name, args);\n return {\n status: 'success',\n result,\n server: client.alias,\n tool: tool.name\n };\n },\n {\n description: tool.description ?? `MCP tool ${tool.name} from ${client.alias}`,\n inputSchema: tool.inputSchema ?? tool.input_schema ?? {},\n tags: this.buildTags(client.alias)\n }\n );\n\n this.registered.add(skillName);\n registrations.push({ server: client.alias, skillName, tool });\n if (this.devMode) {\n console.info(`Registered MCP skill ${skillName}`);\n }\n }\n }\n\n return { registered: registrations };\n }\n\n private buildTags(alias: string) {\n return Array.from(new Set(['mcp', alias, ...(this.options.tags ?? [])]));\n }\n\n private buildSkillName(serverAlias: string, toolName: string) {\n const base = [this.options.namespace, serverAlias, toolName].filter(Boolean).join('_');\n return this.sanitize(base);\n }\n\n private sanitize(value: string) {\n const collapsed = value.replace(/[^a-zA-Z0-9_]/g, '_').replace(/_+/g, '_').replace(/^_+|_+$/g, '');\n if (/^[0-9]/.test(collapsed)) {\n return `mcp_${collapsed}`;\n }\n return collapsed || 'mcp_tool';\n }\n}\n","/**\n * Local verification for AgentField SDK (TypeScript).\n *\n * Provides decentralized verification of incoming requests by caching policies,\n * revocation lists, and the admin's Ed25519 public key from the control plane.\n */\n\nimport { createHash } from 'node:crypto';\nimport axios, { type AxiosInstance } from 'axios';\n\nexport interface PolicyEntry {\n name: string;\n caller_tags: string[];\n target_tags: string[];\n allow_functions: string[];\n deny_functions: string[];\n constraints: Record<string, ConstraintEntry>;\n action: string;\n priority: number;\n enabled?: boolean;\n}\n\nexport interface ConstraintEntry {\n operator: string;\n value: number;\n}\n\nexport class LocalVerifier {\n private readonly agentFieldUrl: string;\n private readonly refreshInterval: number;\n private readonly timestampWindow: number;\n private readonly apiKey?: string;\n\n private policies: PolicyEntry[] = [];\n private revokedDids: Set<string> = new Set();\n private registeredDids: Set<string> = new Set();\n private adminPublicKeyBytes: Uint8Array | null = null;\n private issuerDid: string | null = null;\n private lastRefresh = 0;\n private initialized = false;\n\n constructor(\n agentFieldUrl: string,\n refreshInterval = 300,\n timestampWindow = 300,\n apiKey?: string,\n ) {\n this.agentFieldUrl = agentFieldUrl.replace(/\\/+$/, '');\n this.refreshInterval = refreshInterval;\n this.timestampWindow = timestampWindow;\n this.apiKey = apiKey;\n }\n\n get needsRefresh(): boolean {\n return Date.now() / 1000 - this.lastRefresh > this.refreshInterval;\n }\n\n async refresh(): Promise<boolean> {\n const headers: Record<string, string> = {};\n if (this.apiKey) {\n headers['X-API-Key'] = this.apiKey;\n }\n\n let success = true;\n\n // Fetch policies\n try {\n const resp = await axios.get(`${this.agentFieldUrl}/api/v1/policies`, {\n headers,\n timeout: 10_000,\n });\n if (resp.status !== 200) {\n success = false;\n } else {\n this.policies = resp.data?.policies ?? [];\n }\n } catch {\n success = false;\n }\n\n // Fetch revocations\n try {\n const resp = await axios.get(`${this.agentFieldUrl}/api/v1/revocations`, {\n headers,\n timeout: 10_000,\n });\n if (resp.status !== 200) {\n success = false;\n } else {\n this.revokedDids = new Set(resp.data?.revoked_dids ?? []);\n }\n } catch {\n success = false;\n }\n\n // Fetch registered DIDs\n try {\n const resp = await axios.get(`${this.agentFieldUrl}/api/v1/registered-dids`, {\n headers,\n timeout: 10_000,\n });\n if (resp.status !== 200) {\n success = false;\n } else {\n this.registeredDids = new Set(resp.data?.registered_dids ?? []);\n }\n } catch {\n success = false;\n }\n\n // Fetch admin public key\n try {\n const resp = await axios.get(`${this.agentFieldUrl}/api/v1/admin/public-key`, {\n headers,\n timeout: 10_000,\n });\n if (resp.status !== 200) {\n success = false;\n } else {\n const jwk = resp.data?.public_key_jwk;\n this.issuerDid = resp.data?.issuer_did ?? null;\n\n if (jwk?.x) {\n // Decode base64url public key (Node 15.7+ supports 'base64url' natively)\n this.adminPublicKeyBytes = new Uint8Array(Buffer.from(jwk.x, 'base64url'));\n }\n }\n } catch {\n success = false;\n }\n\n if (success) {\n this.lastRefresh = Date.now() / 1000;\n this.initialized = true;\n }\n\n return success;\n }\n\n checkRevocation(callerDid: string): boolean {\n return this.revokedDids.has(callerDid);\n }\n\n /**\n * Check if a caller DID is registered with the control plane.\n * Returns true if registered (known), false if unknown.\n * When the cache is empty (not yet loaded), returns true to avoid\n * blocking requests before the first refresh completes.\n */\n checkRegistration(callerDid: string): boolean {\n if (this.registeredDids.size === 0) {\n return true; // Cache not populated yet — allow\n }\n return this.registeredDids.has(callerDid);\n }\n\n /**\n * Resolve the public key bytes from a DID.\n *\n * For did:key, the public key is self-contained in the identifier:\n * did:key:z<base64url(0xed01 + 32-byte-pubkey)>\n *\n * For other DID methods, falls back to the admin public key.\n */\n private resolvePublicKey(callerDid: string): Uint8Array | null {\n if (callerDid.startsWith('did:key:z')) {\n try {\n const encoded = callerDid.slice('did:key:z'.length);\n const decoded = Buffer.from(encoded, 'base64url');\n // Verify Ed25519 multicodec prefix: 0xed, 0x01\n if (decoded.length >= 34 && decoded[0] === 0xed && decoded[1] === 0x01) {\n return new Uint8Array(decoded.subarray(2, 34));\n }\n return null;\n } catch {\n return null;\n }\n }\n\n // Fallback: use admin public key for non-did:key methods\n return this.adminPublicKeyBytes;\n }\n\n async verifySignature(\n callerDid: string,\n signatureB64: string,\n timestamp: string,\n body: Buffer,\n nonce?: string,\n ): Promise<boolean> {\n // Validate timestamp window\n const ts = parseInt(timestamp, 10);\n if (isNaN(ts)) return false;\n\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - ts) > this.timestampWindow) return false;\n\n // Resolve public key from the caller's DID\n const publicKeyBytes = this.resolvePublicKey(callerDid);\n if (!publicKeyBytes || publicKeyBytes.length !== 32) {\n return false;\n }\n\n try {\n const { createPublicKey, verify } = await import('node:crypto');\n\n // Reconstruct the signed payload: \"{timestamp}[:{nonce}]:{sha256(body)}\"\n // Must match the format used by SDK signing (DIDAuthenticator)\n const bodyHash = createHash('sha256').update(body).digest('hex');\n const payloadStr = nonce\n ? `${timestamp}:${nonce}:${bodyHash}`\n : `${timestamp}:${bodyHash}`;\n const payload = Buffer.from(payloadStr, 'utf-8');\n\n // Decode the signature\n const signatureBytes = Buffer.from(signatureB64, 'base64');\n\n // Create Ed25519 public key object\n const publicKey = createPublicKey({\n key: Buffer.concat([\n // Ed25519 DER prefix for a 32-byte public key\n Buffer.from('302a300506032b6570032100', 'hex'),\n Buffer.from(publicKeyBytes),\n ]),\n format: 'der',\n type: 'spki',\n });\n\n return verify(null, payload, publicKey, signatureBytes);\n } catch {\n return false;\n }\n }\n\n evaluatePolicy(\n callerTags: string[],\n targetTags: string[],\n functionName: string,\n inputParams?: Record<string, any>,\n ): boolean {\n if (!this.policies || this.policies.length === 0) {\n return false; // No policies — fail closed\n }\n\n // Sort by priority descending\n const sorted = [...this.policies].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n\n for (const policy of sorted) {\n if (policy.enabled === false) continue;\n\n // Check caller tags match\n if (policy.caller_tags?.length > 0) {\n if (!policy.caller_tags.some((t) => callerTags.includes(t))) continue;\n }\n\n // Check target tags match\n if (policy.target_tags?.length > 0) {\n if (!policy.target_tags.some((t) => targetTags.includes(t))) continue;\n }\n\n // Check deny functions first\n if (policy.deny_functions?.length > 0 && functionMatches(functionName, policy.deny_functions)) {\n return false;\n }\n\n // Check allow functions\n if (policy.allow_functions?.length > 0 && !functionMatches(functionName, policy.allow_functions)) {\n continue;\n }\n\n // Check constraints\n if (policy.constraints && inputParams) {\n if (!evaluateConstraints(policy.constraints, inputParams)) {\n return false;\n }\n }\n\n const action = policy.action || 'allow';\n return action === 'allow';\n }\n\n // No matching policy — allow by default.\n // Agent-side verification cannot resolve caller tags, so policies requiring\n // specific caller tags will never match here. The DID signature verification\n // is the primary security gate. The control plane enforces full tag-based\n // policy with caller context.\n return true;\n }\n}\n\nfunction functionMatches(name: string, patterns: string[]): boolean {\n for (const pattern of patterns) {\n if (pattern === '*') return true;\n if (pattern.endsWith('*') && name.startsWith(pattern.slice(0, -1))) return true;\n if (pattern.startsWith('*') && name.endsWith(pattern.slice(1))) return true;\n if (name === pattern) return true;\n }\n return false;\n}\n\nfunction evaluateConstraints(\n constraints: Record<string, ConstraintEntry>,\n inputParams: Record<string, any>,\n): boolean {\n for (const [paramName, constraint] of Object.entries(constraints)) {\n if (!(paramName in inputParams)) continue;\n\n const value = Number(inputParams[paramName]);\n const threshold = Number(constraint.value);\n if (isNaN(value) || isNaN(threshold)) return false;\n\n switch (constraint.operator) {\n case '<=':\n if (value > threshold) return false;\n break;\n case '>=':\n if (value < threshold) return false;\n break;\n case '<':\n if (value >= threshold) return false;\n break;\n case '>':\n if (value <= threshold) return false;\n break;\n case '==':\n if (Math.abs(value - threshold) > 1e-9) return false;\n break;\n }\n }\n return true;\n}\n","type LogEntry = {\n v: number;\n seq: number;\n ts: string;\n stream: string;\n line: string;\n level?: string;\n source?: string;\n truncated?: boolean;\n};\n\nfunction logsEnabled(): boolean {\n const v = (process.env.AGENTFIELD_LOGS_ENABLED ?? 'true').trim().toLowerCase();\n return !['0', 'false', 'no', 'off'].includes(v);\n}\n\nfunction maxBufferBytes(): number {\n const raw = parseInt(process.env.AGENTFIELD_LOG_BUFFER_BYTES ?? '4194304', 10);\n return Number.isFinite(raw) && raw >= 1024 ? raw : 4194304;\n}\n\nfunction maxLineBytes(): number {\n const raw = parseInt(process.env.AGENTFIELD_LOG_MAX_LINE_BYTES ?? '16384', 10);\n return Number.isFinite(raw) && raw >= 256 ? raw : 16384;\n}\n\nfunction maxTailLines(): number {\n const raw = parseInt(process.env.AGENTFIELD_LOG_MAX_TAIL_LINES ?? '50000', 10);\n return Number.isFinite(raw) && raw >= 1 ? raw : 50000;\n}\n\nfunction internalBearerOk(authHeader: string | undefined): boolean {\n const want = (process.env.AGENTFIELD_AUTHORIZATION_INTERNAL_TOKEN ?? '').trim();\n if (!want) return true;\n if (!authHeader?.toLowerCase().startsWith('bearer ')) return false;\n return authHeader.slice(7).trim() === want;\n}\n\nexport class ProcessLogRing {\n private seq = 0;\n private entries: LogEntry[] = [];\n private approxBytes = 0;\n private readonly maxBytes: number;\n\n constructor() {\n this.maxBytes = maxBufferBytes();\n }\n\n append(stream: string, line: string, truncated: boolean): void {\n const ts = new Date().toISOString();\n this.seq += 1;\n const sl = stream.toLowerCase();\n const level = sl === 'stderr' ? 'error' : sl === 'stdout' ? 'info' : 'log';\n const e: LogEntry = {\n v: 1,\n seq: this.seq,\n ts,\n stream,\n line,\n level,\n source: 'process',\n truncated,\n };\n this.entries.push(e);\n this.approxBytes += line.length + 64;\n while (this.approxBytes > this.maxBytes && this.entries.length > 1) {\n const old = this.entries.shift()!;\n this.approxBytes -= old.line.length + 64;\n }\n }\n\n tail(n: number): LogEntry[] {\n if (n <= 0) return [];\n return this.entries.length <= n ? [...this.entries] : this.entries.slice(-n);\n }\n\n snapshotAfter(sinceSeq: number, limit: number | null): LogEntry[] {\n const buf = this.entries.filter((e) => e.seq > sinceSeq);\n if (limit != null && limit > 0 && buf.length > limit) {\n return buf.slice(-limit);\n }\n return buf;\n }\n\n}\n\nlet captureInstalled = false;\n\nexport function installStdioLogCapture(ring: ProcessLogRing): void {\n if (captureInstalled || !logsEnabled()) return;\n captureInstalled = true;\n const maxLB = maxLineBytes();\n\n const hook = (stream: NodeJS.WriteStream, name: string) => {\n const orig = stream.write.bind(stream);\n let buf = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (stream as any).write = (chunk: any, ...args: any[]) => {\n const s =\n typeof chunk === 'string'\n ? chunk\n : Buffer.isBuffer(chunk)\n ? chunk.toString('utf8')\n : String(chunk);\n buf += s;\n let idx: number;\n while ((idx = buf.indexOf('\\n')) >= 0) {\n const line = buf.slice(0, idx);\n buf = buf.slice(idx + 1);\n let out = line;\n let trunc = false;\n if (Buffer.byteLength(out, 'utf8') > maxLB) {\n out = Buffer.from(out, 'utf8').subarray(0, maxLB).toString('utf8');\n trunc = true;\n }\n ring.append(name, out, trunc);\n }\n return orig(chunk, ...args);\n };\n };\n\n hook(process.stdout, 'stdout');\n hook(process.stderr, 'stderr');\n}\n\nexport function registerAgentfieldLogsRoute(\n app: import('express').Express,\n ring: ProcessLogRing\n): void {\n app.get('/agentfield/v1/logs', (req, res) => {\n if (!logsEnabled()) {\n return res.status(404).json({\n error: 'logs_disabled',\n message: 'Process logs API is disabled'\n });\n }\n const auth = req.headers.authorization;\n if (!internalBearerOk(auth)) {\n return res.status(401).json({\n error: 'unauthorized',\n message: 'Valid Authorization Bearer required'\n });\n }\n let tailLines = parseInt(String(req.query.tail_lines ?? '0'), 10);\n const sinceSeq = parseInt(String(req.query.since_seq ?? '0'), 10);\n const follow = ['1', 'true', 'yes'].includes(String(req.query.follow ?? '').toLowerCase());\n const cap = maxTailLines();\n if (tailLines > cap) {\n return res.status(413).json({\n error: 'tail_too_large',\n message: `tail_lines exceeds max ${cap}`\n });\n }\n if (tailLines <= 0 && sinceSeq <= 0 && !follow) tailLines = 200;\n\n let initial: LogEntry[];\n if (sinceSeq > 0) {\n initial = ring.snapshotAfter(sinceSeq, tailLines > 0 ? tailLines : null);\n } else {\n const n = tailLines > 0 ? tailLines : 200;\n initial = ring.tail(n);\n }\n\n res.setHeader('Content-Type', 'application/x-ndjson');\n res.setHeader('Cache-Control', 'no-store');\n res.status(200);\n\n const writeLines = (entries: LogEntry[]) => {\n for (const e of entries) {\n res.write(`${JSON.stringify(e)}\\n`);\n }\n (res as import('express').Response & { flush?: () => void }).flush?.();\n };\n\n writeLines(initial);\n let lastSeq = sinceSeq;\n if (initial.length) lastSeq = initial[initial.length - 1]!.seq;\n\n if (!follow) {\n return res.end();\n }\n\n const iv = setInterval(() => {\n const newer = ring.snapshotAfter(lastSeq, null);\n if (newer.length) {\n writeLines(newer);\n lastSeq = newer[newer.length - 1]!.seq;\n }\n }, 400);\n\n req.on('close', () => {\n clearInterval(iv);\n });\n });\n}\n","import express from 'express';\nimport rateLimit from 'express-rate-limit';\nimport type http from 'node:http';\nimport { randomUUID } from 'node:crypto';\nimport axios, { AxiosInstance } from 'axios';\nimport type {\n AgentConfig,\n AgentHandler,\n DeploymentType,\n HealthStatus,\n ServerlessEvent,\n ServerlessResponse\n} from '../types/agent.js';\nimport { ReasonerRegistry } from './ReasonerRegistry.js';\nimport { SkillRegistry } from './SkillRegistry.js';\nimport { AgentRouter } from '../router/AgentRouter.js';\nimport type { ReasonerHandler, ReasonerOptions } from '../types/reasoner.js';\nimport type { SkillHandler, SkillOptions } from '../types/skill.js';\nimport { ExecutionContext, type ExecutionMetadata } from '../context/ExecutionContext.js';\nimport { ReasonerContext } from '../context/ReasonerContext.js';\nimport { SkillContext } from '../context/SkillContext.js';\nimport { AIClient } from '../ai/AIClient.js';\nimport { AgentFieldClient } from '../client/AgentFieldClient.js';\nimport type { HarnessRunner } from '../harness/runner.js';\nimport type { HarnessOptions, HarnessResult } from '../harness/types.js';\nimport { MemoryClient } from '../memory/MemoryClient.js';\nimport { MemoryEventClient } from '../memory/MemoryEventClient.js';\nimport {\n MemoryInterface,\n type MemoryChangeEvent,\n type MemoryWatchHandler\n} from '../memory/MemoryInterface.js';\nimport { DidClient } from '../did/DidClient.js';\nimport { DidInterface } from '../did/DidInterface.js';\nimport { DidManager } from '../did/DidManager.js';\nimport { matchesPattern } from '../utils/pattern.js';\nimport { toJsonSchema } from '../utils/schema.js';\nimport { WorkflowReporter } from '../workflow/WorkflowReporter.js';\nimport type { DiscoveryOptions } from '../types/agent.js';\nimport type { MCPToolRegistration } from '../types/mcp.js';\nimport {\n createExecutionLogger,\n type ExecutionLogContext,\n type ExecutionLogger\n} from '../observability/ExecutionLogger.js';\nimport { MCPClientRegistry } from '../mcp/MCPClientRegistry.js';\nimport { MCPToolRegistrar } from '../mcp/MCPToolRegistrar.js';\nimport { LocalVerifier } from '../verification/LocalVerifier.js';\nimport {\n installStdioLogCapture,\n ProcessLogRing,\n registerAgentfieldLogsRoute\n} from './processLogs.js';\n\nclass TargetNotFoundError extends Error {}\n\nconst harnessRunners = new WeakMap<object, HarnessRunner>();\n\nexport class Agent {\n readonly config: AgentConfig;\n readonly app: express.Express;\n readonly reasoners = new ReasonerRegistry();\n readonly skills = new SkillRegistry();\n private server?: http.Server;\n private heartbeatTimer?: NodeJS.Timeout;\n private readonly aiClient: AIClient;\n private readonly agentFieldClient: AgentFieldClient;\n private readonly memoryClient: MemoryClient;\n private readonly memoryEventClient: MemoryEventClient;\n private readonly didClient: DidClient;\n private readonly didManager: DidManager;\n private readonly memoryWatchers: Array<{ pattern: string; handler: MemoryWatchHandler; scope?: string; scopeId?: string }> = [];\n private readonly mcpClientRegistry?: MCPClientRegistry;\n private readonly mcpToolRegistrar?: MCPToolRegistrar;\n private readonly localVerifier?: LocalVerifier;\n private readonly realtimeValidationFunctions = new Set<string>();\n private readonly processLogRing = new ProcessLogRing();\n private readonly executionLogger: ExecutionLogger;\n\n constructor(config: AgentConfig) {\n const mcp = config.mcp\n ? {\n autoRegisterTools: config.mcp.autoRegisterTools ?? true,\n ...config.mcp\n }\n : undefined;\n\n this.config = {\n port: 8001,\n agentFieldUrl: 'http://localhost:8080',\n host: '0.0.0.0',\n ...config,\n didEnabled: config.didEnabled ?? true,\n deploymentType: config.deploymentType ?? 'long_running',\n mcp\n };\n\n this.app = express();\n this.app.use(express.json());\n\n this.aiClient = new AIClient(this.config.aiConfig);\n this.agentFieldClient = new AgentFieldClient(this.config);\n this.memoryClient = new MemoryClient(this.config.agentFieldUrl!, this.config.defaultHeaders);\n this.memoryEventClient = new MemoryEventClient(this.config.agentFieldUrl!, this.config.defaultHeaders);\n this.didClient = new DidClient(this.config.agentFieldUrl!, this.config.defaultHeaders);\n this.didManager = new DidManager(this.didClient, this.config.nodeId);\n this.executionLogger = createExecutionLogger({\n contextProvider: () => this.buildExecutionLogContext(),\n transport: {\n emit: (payload) => this.agentFieldClient.publishExecutionLogs(payload)\n }\n });\n this.memoryEventClient.onEvent((event) => this.dispatchMemoryEvent(event));\n\n if (this.config.mcp?.servers?.length) {\n this.mcpClientRegistry = new MCPClientRegistry(this.config.devMode);\n this.mcpToolRegistrar = new MCPToolRegistrar(this, this.mcpClientRegistry, {\n namespace: this.config.mcp.namespace,\n tags: this.config.mcp.tags,\n devMode: this.config.devMode\n });\n this.mcpToolRegistrar.registerServers(this.config.mcp.servers);\n }\n\n // Initialize local verifier for decentralized verification\n if (this.config.localVerification && this.config.agentFieldUrl) {\n this.localVerifier = new LocalVerifier(\n this.config.agentFieldUrl,\n this.config.verificationRefreshInterval ?? 300,\n 300,\n this.config.apiKey,\n );\n }\n\n this.registerDefaultRoutes();\n installStdioLogCapture(this.processLogRing);\n registerAgentfieldLogsRoute(this.app, this.processLogRing);\n }\n\n reasoner<TInput = any, TOutput = any>(\n name: string,\n handler: ReasonerHandler<TInput, TOutput>,\n options?: ReasonerOptions\n ) {\n this.reasoners.register(name, handler, options);\n if (options?.requireRealtimeValidation) {\n this.realtimeValidationFunctions.add(name);\n }\n return this;\n }\n\n skill<TInput = any, TOutput = any>(\n name: string,\n handler: SkillHandler<TInput, TOutput>,\n options?: SkillOptions\n ) {\n this.skills.register(name, handler, options);\n if (options?.requireRealtimeValidation) {\n this.realtimeValidationFunctions.add(name);\n }\n return this;\n }\n\n includeRouter(router: AgentRouter) {\n this.reasoners.includeRouter(router);\n this.skills.includeRouter(router);\n }\n\n handler(adapter?: (event: any, context?: any) => ServerlessEvent): AgentHandler {\n return async (event: any, res?: any): Promise<ServerlessResponse | void> => {\n // If a response object is provided, treat this as a standard HTTP request (e.g., Vercel/Netlify)\n if (res && typeof res === 'object' && typeof (res as any).setHeader === 'function') {\n return this.handleHttpRequest(event as http.IncomingMessage, res as http.ServerResponse);\n }\n\n // Fallback to a generic serverless event contract (AWS Lambda, Cloud Functions, etc.)\n const normalized = adapter ? adapter(event) : (event as ServerlessEvent);\n return this.handleServerlessEvent(normalized);\n };\n }\n\n watchMemory(pattern: string | string[], handler: MemoryWatchHandler, options?: { scope?: string; scopeId?: string }) {\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n patterns.forEach((p) =>\n this.memoryWatchers.push({ pattern: p, handler, scope: options?.scope, scopeId: options?.scopeId })\n );\n this.memoryEventClient.start();\n }\n\n discover(options?: DiscoveryOptions) {\n return this.agentFieldClient.discoverCapabilities(options);\n }\n\n async registerMcpTools(): Promise<{ registered: MCPToolRegistration[] }> {\n if (!this.mcpToolRegistrar) return { registered: [] };\n return this.mcpToolRegistrar.registerAll();\n }\n\n getAIClient() {\n return this.aiClient;\n }\n\n getExecutionLogger() {\n return this.executionLogger;\n }\n\n async getHarnessRunner(): Promise<HarnessRunner> {\n const cached = harnessRunners.get(this);\n if (cached) return cached;\n const { HarnessRunner: RunnerClass } = await import('../harness/runner.js');\n const runner = new RunnerClass(this.config.harnessConfig);\n harnessRunners.set(this, runner);\n return runner;\n }\n\n async harness(prompt: string, options?: HarnessOptions): Promise<HarnessResult> {\n const runner = await this.getHarnessRunner();\n return runner.run(prompt, options ?? {});\n }\n\n getMemoryInterface(metadata?: ExecutionMetadata) {\n const defaultScope = this.config.memoryConfig?.defaultScope ?? 'workflow';\n const defaultScopeId =\n defaultScope === 'session'\n ? metadata?.sessionId\n : defaultScope === 'actor'\n ? metadata?.actorId\n : metadata?.workflowId ?? metadata?.runId ?? metadata?.sessionId ?? metadata?.actorId;\n return new MemoryInterface({\n client: this.memoryClient,\n eventClient: this.memoryEventClient,\n aiClient: this.aiClient,\n defaultScope,\n defaultScopeId,\n metadata: {\n workflowId: metadata?.workflowId ?? metadata?.runId,\n sessionId: metadata?.sessionId,\n actorId: metadata?.actorId,\n runId: metadata?.runId,\n executionId: metadata?.executionId,\n parentExecutionId: metadata?.parentExecutionId,\n callerDid: metadata?.callerDid,\n targetDid: metadata?.targetDid,\n agentNodeDid: metadata?.agentNodeDid,\n agentNodeId: this.config.nodeId\n }\n });\n }\n\n getWorkflowReporter(metadata: ExecutionMetadata) {\n return new WorkflowReporter(this.agentFieldClient, {\n executionId: metadata.executionId,\n runId: metadata.runId,\n workflowId: metadata.workflowId,\n agentNodeId: this.config.nodeId,\n reasonerId: metadata.reasonerId\n });\n }\n\n getDidInterface(metadata: ExecutionMetadata, defaultInput?: any, targetName?: string) {\n // Resolve DIDs from the identity package if available\n const agentNodeDid = metadata.agentNodeDid\n ?? this.didManager.getAgentDid()\n ?? this.config.defaultHeaders?.['X-Agent-Node-DID']?.toString();\n\n // For caller DID: use provided value, or fall back to agent DID\n const callerDid = metadata.callerDid ?? this.didManager.getAgentDid();\n\n // For target DID: use provided value, or resolve from function name\n const targetDid = metadata.targetDid\n ?? (targetName ? this.didManager.getFunctionDid(targetName) : undefined)\n ?? this.didManager.getAgentDid();\n\n return new DidInterface({\n client: this.didClient,\n metadata: {\n ...metadata,\n agentNodeDid,\n callerDid,\n targetDid\n },\n enabled: Boolean(this.config.didEnabled),\n defaultInput\n });\n }\n\n note(message: string, tags: string[] = [], metadata?: ExecutionMetadata): void {\n const execCtx = ExecutionContext.getCurrent();\n const execMetadata = metadata ?? execCtx?.metadata;\n if (!execMetadata) return;\n\n const baseUrl = (this.config.agentFieldUrl ?? 'http://localhost:8080').replace(/\\/$/, '');\n let uiApiUrl = baseUrl.replace(/\\/api\\/v1$/, '/api/ui/v1');\n if (!uiApiUrl.includes('/api/ui/v1')) {\n uiApiUrl = `${baseUrl}/api/ui/v1`;\n }\n\n this.agentFieldClient.sendNote(message, tags, this.config.nodeId, execMetadata, uiApiUrl, this.config.devMode);\n }\n\n private buildExecutionLogContext(metadata?: ExecutionMetadata): ExecutionLogContext | undefined {\n const current = metadata ?? ExecutionContext.getCurrent()?.metadata;\n if (!current) return undefined;\n\n return {\n executionId: current.executionId,\n runId: current.runId,\n workflowId: current.workflowId,\n rootWorkflowId: current.rootWorkflowId ?? current.workflowId ?? current.runId ?? current.executionId,\n parentExecutionId: current.parentExecutionId,\n sessionId: current.sessionId,\n actorId: current.actorId,\n agentNodeId: this.config.nodeId,\n reasonerId: current.reasonerId,\n callerDid: current.callerDid,\n targetDid: current.targetDid,\n agentNodeDid: current.agentNodeDid\n };\n }\n\n async serve(): Promise<void> {\n if (this.config.mcp?.autoRegisterTools !== false) {\n try {\n await this.registerMcpTools();\n } catch (err) {\n if (this.config.devMode) {\n console.warn('MCP tool registration failed', err);\n }\n }\n }\n\n await this.registerWithControlPlane();\n\n // Perform a blocking initial refresh for local verification before accepting requests\n if (this.localVerifier) {\n try {\n const ok = await this.localVerifier.refresh();\n if (!ok) {\n console.warn('[LocalVerifier] Initial refresh partially failed — some verification data may be stale');\n }\n } catch (err) {\n console.warn('[LocalVerifier] Initial refresh failed:', err);\n }\n }\n\n const port = this.config.port ?? 8001;\n const host = this.config.host ?? '0.0.0.0';\n // First heartbeat marks the node as starting; subsequent interval sets ready.\n await this.agentFieldClient.heartbeat('starting');\n await new Promise<void>((resolve, reject) => {\n this.server = this.app\n .listen(port, host, () => resolve())\n .on('error', reject);\n });\n this.memoryEventClient.start();\n this.startHeartbeat();\n }\n\n async shutdown(): Promise<void> {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n }\n await new Promise<void>((resolve, reject) => {\n this.server?.close((err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n this.memoryEventClient.stop();\n }\n\n async call(target: string, input: any) {\n const { agentId, name } = this.parseTarget(target);\n const parentMetadata = ExecutionContext.getCurrent()?.metadata;\n if (!agentId || agentId === this.config.nodeId) {\n const local = this.reasoners.get(name);\n if (!local) throw new Error(`Reasoner not found: ${name}`);\n const runId = parentMetadata?.runId ?? parentMetadata?.executionId ?? randomUUID();\n const rootWorkflowId = parentMetadata?.rootWorkflowId ?? parentMetadata?.workflowId ?? runId;\n const metadata = {\n ...parentMetadata,\n executionId: randomUUID(),\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId: parentMetadata?.workflowId ?? runId,\n rootWorkflowId,\n reasonerId: name\n };\n const dummyReq = {} as express.Request;\n const dummyRes = {} as express.Response;\n const execCtx = new ExecutionContext({\n input,\n metadata: {\n ...metadata,\n executionId: metadata.executionId ?? randomUUID()\n },\n req: dummyReq,\n res: dummyRes,\n agent: this\n });\n const startTime = Date.now();\n this.executionLogger.system('agent.call.started', 'Local agent call started', {\n target,\n reasonerId: name,\n executionId: metadata.executionId,\n parentExecutionId: metadata.parentExecutionId,\n runId: metadata.runId,\n workflowId: metadata.workflowId,\n rootWorkflowId: metadata.rootWorkflowId\n });\n\n const emitEvent = async (status: 'running' | 'succeeded' | 'failed', payload: any) => {\n await this.agentFieldClient.publishWorkflowEvent({\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId ?? execCtx.metadata.executionId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n reasonerId: name,\n agentNodeId: this.config.nodeId,\n status,\n parentExecutionId: execCtx.metadata.parentExecutionId,\n parentWorkflowId: execCtx.metadata.workflowId,\n inputData: status === 'running' ? input : undefined,\n result: status === 'succeeded' ? payload : undefined,\n error: status === 'failed' ? (payload?.message ?? String(payload)) : undefined,\n durationMs: status === 'running' ? undefined : Date.now() - startTime\n });\n };\n\n await emitEvent('running', null);\n\n return ExecutionContext.run(execCtx, async () => {\n this.executionLogger.system('execution.started', 'Execution started', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n parentExecutionId: execCtx.metadata.parentExecutionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId\n });\n this.executionLogger.system('reasoner.started', 'Reasoner execution started', {\n target: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId\n });\n try {\n const result = await local.handler(\n new ReasonerContext({\n input,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n sessionId: execCtx.metadata.sessionId,\n actorId: execCtx.metadata.actorId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n parentExecutionId: execCtx.metadata.parentExecutionId,\n reasonerId: name,\n callerDid: execCtx.metadata.callerDid,\n targetDid: execCtx.metadata.targetDid,\n agentNodeDid: execCtx.metadata.agentNodeDid,\n req: dummyReq,\n res: dummyRes,\n agent: this,\n logger: this.executionLogger,\n aiClient: this.aiClient,\n memory: this.getMemoryInterface(execCtx.metadata),\n workflow: this.getWorkflowReporter(execCtx.metadata),\n did: this.getDidInterface(execCtx.metadata, input, name)\n })\n );\n this.executionLogger.system('reasoner.completed', 'Reasoner execution completed', {\n target: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime\n });\n this.executionLogger.system('execution.completed', 'Execution completed', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime\n });\n this.executionLogger.system('agent.call.completed', 'Local agent call completed', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime\n });\n await emitEvent('succeeded', result);\n return result;\n } catch (err) {\n this.executionLogger.error('Reasoner execution failed', {\n target: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime,\n error: err instanceof Error ? err.message : String(err)\n }, {\n eventType: 'reasoner.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n this.executionLogger.error('Execution failed', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime,\n error: err instanceof Error ? err.message : String(err)\n }, {\n eventType: 'execution.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n this.executionLogger.error('Local agent call failed', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime,\n error: err instanceof Error ? err.message : String(err)\n }, {\n eventType: 'agent.call.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n await emitEvent('failed', err);\n throw err;\n }\n });\n }\n\n const executionId = parentMetadata?.executionId ?? randomUUID();\n const runId = parentMetadata?.runId ?? parentMetadata?.executionId ?? executionId;\n const workflowId = parentMetadata?.workflowId ?? runId;\n const rootWorkflowId = parentMetadata?.rootWorkflowId ?? workflowId;\n this.executionLogger.system('agent.call.started', 'Remote agent call started', {\n target,\n agentNodeId: agentId,\n executionId,\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId,\n rootWorkflowId,\n reasonerId: name\n });\n\n try {\n const result = await this.agentFieldClient.execute(target, input, {\n runId,\n workflowId,\n rootWorkflowId,\n parentExecutionId: parentMetadata?.executionId,\n reasonerId: name,\n sessionId: parentMetadata?.sessionId,\n actorId: parentMetadata?.actorId,\n callerDid: parentMetadata?.callerDid,\n targetDid: parentMetadata?.targetDid,\n agentNodeDid: parentMetadata?.agentNodeDid,\n agentNodeId: this.config.nodeId\n });\n this.executionLogger.system('agent.call.completed', 'Remote agent call completed', {\n target,\n agentNodeId: agentId,\n executionId,\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId,\n rootWorkflowId,\n reasonerId: name\n });\n return result;\n } catch (err) {\n this.executionLogger.error('Remote agent call failed', {\n target,\n agentNodeId: agentId,\n executionId,\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId,\n rootWorkflowId,\n reasonerId: name,\n error: err instanceof Error ? err.message : String(err)\n }, {\n eventType: 'agent.call.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n throw err;\n }\n }\n\n private registerDefaultRoutes() {\n this.app.get('/health', (_req, res) => {\n res.json(this.health());\n });\n\n // Discovery endpoint used for serverless registration (mirrors Python behaviour)\n this.app.get('/discover', (_req, res) => {\n res.json(this.discoveryPayload(this.config.deploymentType ?? 'long_running'));\n });\n\n // MCP health probe expected by control-plane UI\n this.app.get('/health/mcp', async (_req, res) => {\n if (!this.mcpClientRegistry) {\n res.json({ status: 'disabled', totalServers: 0, healthyServers: 0, servers: [] });\n return;\n }\n\n try {\n const summary = await this.mcpClientRegistry.healthSummary();\n res.json(summary);\n } catch (err: any) {\n res.status(500).json({ status: 'error', error: err?.message ?? 'MCP health check failed' });\n }\n });\n\n this.app.get('/mcp/status', (_req, res) => {\n res.json(this.mcpStatus());\n });\n\n this.app.get('/status', (_req, res) => {\n res.json({\n ...this.health(),\n reasoners: this.reasoners.all().map((r) => r.name),\n skills: this.skills.all().map((s) => s.name)\n });\n });\n\n this.app.get('/reasoners', (_req, res) => {\n res.json(this.reasoners.all().map((r) => r.name));\n });\n\n this.app.get('/skills', (_req, res) => {\n res.json(this.skills.all().map((s) => s.name));\n });\n\n // Local verification middleware for execution endpoints\n if (this.localVerifier) {\n const verifier = this.localVerifier;\n const realtimeFunctions = this.realtimeValidationFunctions;\n\n // Rate limiter for auth endpoints: max 30 attempts per identity per 60s window.\n // Uses X-Caller-DID when present so agents behind shared NAT/gateway don't\n // exhaust each other's quota. Falls back to IP when no DID is claimed.\n const authRateLimiter = rateLimit({\n windowMs: 60_000,\n max: 30,\n standardHeaders: true,\n legacyHeaders: false,\n keyGenerator: (req) => {\n const callerDID = req.headers['x-caller-did'];\n if (typeof callerDID === 'string' && callerDID.length > 0) {\n return callerDID;\n }\n return req.ip ?? 'unknown';\n },\n message: { error: 'rate_limit_exceeded', message: 'Too many authentication attempts. Try again later.' },\n skip: (req) => {\n const path = req.path;\n if (!path.startsWith('/reasoners/') && !path.startsWith('/skills/') &&\n !path.startsWith('/execute') && !path.startsWith('/api/v1/reasoners/') &&\n !path.startsWith('/api/v1/skills/')) {\n return true;\n }\n const parts = path.replace(/^\\/+/, '').split('/');\n const funcName = parts[parts.length - 1] ?? '';\n return realtimeFunctions.has(funcName);\n },\n });\n this.app.use(authRateLimiter);\n\n this.app.use(async (req, res, next) => {\n const path = req.path;\n\n // Only verify execution endpoints\n if (!path.startsWith('/reasoners/') && !path.startsWith('/skills/') &&\n !path.startsWith('/execute') && !path.startsWith('/api/v1/reasoners/') &&\n !path.startsWith('/api/v1/skills/')) {\n return next();\n }\n\n // Extract function name\n const parts = path.replace(/^\\/+/, '').split('/');\n const funcName = parts[parts.length - 1] ?? '';\n\n // Skip for realtime-validated functions\n if (realtimeFunctions.has(funcName)) {\n return next();\n }\n\n // Refresh cache if stale\n if (verifier.needsRefresh) {\n try {\n await verifier.refresh();\n } catch (err) {\n console.warn('[LocalVerifier] Cache refresh failed:', err);\n }\n }\n\n // Extract DID auth headers\n const callerDid = req.headers['x-caller-did'] as string | undefined;\n const signature = req.headers['x-did-signature'] as string | undefined;\n const timestamp = req.headers['x-did-timestamp'] as string | undefined;\n const nonce = req.headers['x-did-nonce'] as string | undefined;\n\n // C4: Require DID authentication — fail closed when callerDid is missing\n if (!callerDid) {\n return res.status(401).json({\n error: 'did_auth_required',\n message: 'DID authentication required',\n });\n }\n\n // Check revocation\n if (verifier.checkRevocation(callerDid)) {\n return res.status(403).json({\n error: 'did_revoked',\n message: `Caller DID ${callerDid} has been revoked`,\n });\n }\n\n // Check registration — reject DIDs not registered with the control plane\n if (!verifier.checkRegistration(callerDid)) {\n return res.status(403).json({\n error: 'did_not_registered',\n message: `Caller DID ${callerDid} is not registered with the control plane`,\n });\n }\n\n // C5: Require signature when callerDid is present\n if (!signature) {\n return res.status(401).json({\n error: 'signature_required',\n message: 'DID signature required',\n });\n }\n\n // Verify signature\n if (timestamp) {\n const body = Buffer.isBuffer(req.body) ? req.body : Buffer.from(JSON.stringify(req.body));\n const valid = await verifier.verifySignature(callerDid, signature, timestamp, body, nonce);\n if (!valid) {\n return res.status(401).json({\n error: 'signature_invalid',\n message: 'DID signature verification failed',\n });\n }\n } else {\n // Timestamp is required for signature verification\n return res.status(401).json({\n error: 'signature_invalid',\n message: 'DID signature verification failed: missing timestamp',\n });\n }\n\n // C6: Evaluate access policy after successful signature verification\n // Caller tags cannot be resolved at agent-side middleware level (would require\n // a control plane lookup). Pass empty array — policies that require specific\n // caller tags will not match, which is correct fail-open behavior for\n // agent-side verification. The control plane remains the primary policy\n // enforcement point with full caller context.\n const agentTags = this.config.tags ?? [];\n const allowed = verifier.evaluatePolicy(\n [], // caller tags (not resolvable without control plane)\n agentTags, // target tags (this agent's own tags)\n funcName,\n typeof req.body === 'object' && req.body !== null ? req.body : {},\n );\n if (!allowed) {\n return res.status(403).json({\n error: 'policy_denied',\n message: 'Access denied by policy',\n });\n }\n\n next();\n });\n }\n\n this.app.post('/api/v1/reasoners/*', (req, res) => this.executeReasoner(req, res, (req.params as any)[0]));\n this.app.post('/reasoners/:name', (req, res) => this.executeReasoner(req, res, req.params.name));\n\n this.app.post('/api/v1/skills/*', (req, res) => this.executeSkill(req, res, (req.params as any)[0]));\n this.app.post('/skills/:name', (req, res) => this.executeSkill(req, res, req.params.name));\n\n // Serverless-friendly execute endpoint that accepts { target, input } or { reasoner, input }\n this.app.post('/execute', (req, res) => this.executeServerlessHttp(req, res));\n this.app.post('/execute/:name', (req, res) => this.executeServerlessHttp(req, res, req.params.name));\n }\n\n private async executeReasoner(req: express.Request, res: express.Response, name: string) {\n try {\n await this.executeInvocation({\n targetName: name,\n targetType: 'reasoner',\n input: req.body,\n metadata: this.buildMetadata(req),\n req,\n res,\n respond: true\n });\n } catch (err: any) {\n if (err instanceof TargetNotFoundError) {\n res.status(404).json({ error: err.message });\n } else {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n // Propagate upstream HTTP status (e.g. 403 from permission middleware)\n const statusCode = (err?.status >= 400) ? err.status : 500;\n res.status(statusCode).json(body);\n }\n }\n }\n\n private async executeSkill(req: express.Request, res: express.Response, name: string) {\n try {\n await this.executeInvocation({\n targetName: name,\n targetType: 'skill',\n input: req.body,\n metadata: this.buildMetadata(req),\n req,\n res,\n respond: true\n });\n } catch (err: any) {\n if (err instanceof TargetNotFoundError) {\n res.status(404).json({ error: err.message });\n } else {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n // Propagate upstream HTTP status (e.g. 403 from permission middleware)\n const statusCode = (err?.status >= 400) ? err.status : 500;\n res.status(statusCode).json(body);\n }\n }\n }\n\n private buildMetadata(req: express.Request) {\n return this.buildMetadataFromHeaders(req.headers);\n }\n\n private async executeServerlessHttp(req: express.Request, res: express.Response, explicitName?: string) {\n const invocation = this.extractInvocationDetails({\n path: req.path,\n explicitTarget: explicitName,\n query: req.query as Record<string, any>,\n body: req.body\n });\n\n if (!invocation.name) {\n res.status(400).json({ error: \"Missing 'target' or 'reasoner' in request\" });\n return;\n }\n\n try {\n const result = await this.executeInvocation({\n targetName: invocation.name,\n targetType: invocation.targetType,\n input: invocation.input,\n metadata: this.buildMetadata(req),\n req,\n res,\n respond: true\n });\n\n if (result !== undefined && !res.headersSent) {\n res.json(result);\n }\n } catch (err: any) {\n if (err instanceof TargetNotFoundError) {\n res.status(404).json({ error: err.message });\n } else {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n // Propagate upstream HTTP status (e.g. 403 from permission middleware)\n const statusCode = (err?.status >= 400) ? err.status : 500;\n res.status(statusCode).json(body);\n }\n }\n }\n\n private buildMetadataFromHeaders(\n headers: Record<string, string | string[] | undefined>,\n overrides?: Partial<ExecutionMetadata>\n ): ExecutionMetadata {\n const normalized: Record<string, string | undefined> = {};\n Object.entries(headers ?? {}).forEach(([key, value]) => {\n normalized[key.toLowerCase()] = Array.isArray(value) ? value[0] : value;\n });\n\n const executionId = overrides?.executionId ?? normalized['x-execution-id'] ?? randomUUID();\n const runId = overrides?.runId ?? normalized['x-run-id'] ?? executionId;\n const workflowId = overrides?.workflowId ?? normalized['x-workflow-id'] ?? runId;\n const rootWorkflowId =\n overrides?.rootWorkflowId ?? normalized['x-root-workflow-id'] ?? workflowId;\n\n return {\n executionId,\n runId,\n workflowId,\n rootWorkflowId,\n sessionId: overrides?.sessionId ?? normalized['x-session-id'],\n actorId: overrides?.actorId ?? normalized['x-actor-id'],\n parentExecutionId: overrides?.parentExecutionId ?? normalized['x-parent-execution-id'],\n reasonerId: overrides?.reasonerId ?? normalized['x-reasoner-id'],\n callerDid: overrides?.callerDid ?? normalized['x-caller-did'],\n targetDid: overrides?.targetDid ?? normalized['x-target-did'],\n agentNodeDid:\n overrides?.agentNodeDid ?? normalized['x-agent-node-did'] ?? normalized['x-agent-did']\n };\n }\n\n private handleHttpRequest(req: http.IncomingMessage | express.Request, res: http.ServerResponse | express.Response) {\n const handler = this.app as unknown as (req: http.IncomingMessage, res: http.ServerResponse) => void;\n return handler(req as any, res as any);\n }\n\n private async handleServerlessEvent(event: ServerlessEvent): Promise<ServerlessResponse> {\n const path = event?.path ?? event?.rawPath ?? '';\n const action = event?.action ?? '';\n\n if (path === '/discover' || action === 'discover') {\n return {\n statusCode: 200,\n headers: { 'content-type': 'application/json' },\n body: this.discoveryPayload(this.config.deploymentType ?? 'serverless')\n };\n }\n\n const body = this.normalizeEventBody(event);\n const invocation = this.extractInvocationDetails({\n path,\n query: event?.queryStringParameters,\n body,\n reasoner: event?.reasoner,\n target: event?.target,\n skill: event?.skill,\n type: event?.type\n });\n\n if (!invocation.name) {\n return {\n statusCode: 400,\n headers: { 'content-type': 'application/json' },\n body: { error: \"Missing 'target' or 'reasoner' in request\" }\n };\n }\n\n const metadata = this.buildMetadataFromHeaders(event?.headers ?? {}, this.mergeExecutionContext(event));\n\n try {\n const result = await this.executeInvocation({\n targetName: invocation.name,\n targetType: invocation.targetType,\n input: invocation.input,\n metadata\n });\n\n return { statusCode: 200, headers: { 'content-type': 'application/json' }, body: result };\n } catch (err: any) {\n if (err instanceof TargetNotFoundError) {\n return {\n statusCode: 404,\n headers: { 'content-type': 'application/json' },\n body: { error: err.message }\n };\n }\n\n return {\n statusCode: 500,\n headers: { 'content-type': 'application/json' },\n body: { error: err?.message ?? 'Execution failed' }\n };\n }\n }\n\n private normalizeEventBody(event: ServerlessEvent) {\n const parsed = this.parseBody((event as any)?.body);\n if (parsed && typeof parsed === 'object' && event?.input !== undefined && (parsed as any).input === undefined) {\n return { ...(parsed as Record<string, any>), input: event.input };\n }\n if ((parsed === undefined || parsed === null) && event?.input !== undefined) {\n return { input: event.input };\n }\n return parsed;\n }\n\n private mergeExecutionContext(event: ServerlessEvent): Partial<ExecutionMetadata> {\n const ctx = (event?.executionContext ?? (event as any)?.execution_context) as Partial<\n ExecutionMetadata & {\n execution_id?: string;\n run_id?: string;\n workflow_id?: string;\n root_workflow_id?: string;\n parent_execution_id?: string;\n reasoner_id?: string;\n session_id?: string;\n actor_id?: string;\n caller_did?: string;\n target_did?: string;\n agent_node_did?: string;\n }\n >;\n\n if (!ctx) return {};\n\n return {\n executionId: (ctx as any).executionId ?? ctx.execution_id ?? ctx.executionId,\n runId: ctx.runId ?? (ctx as any).run_id,\n workflowId: ctx.workflowId ?? (ctx as any).workflow_id,\n rootWorkflowId: ctx.rootWorkflowId ?? (ctx as any).root_workflow_id,\n parentExecutionId: ctx.parentExecutionId ?? (ctx as any).parent_execution_id,\n reasonerId: ctx.reasonerId ?? (ctx as any).reasoner_id,\n sessionId: ctx.sessionId ?? (ctx as any).session_id,\n actorId: ctx.actorId ?? (ctx as any).actor_id,\n callerDid: (ctx as any).callerDid ?? (ctx as any).caller_did,\n targetDid: (ctx as any).targetDid ?? (ctx as any).target_did,\n agentNodeDid: (ctx as any).agentNodeDid ?? (ctx as any).agent_node_did\n };\n }\n\n private extractInvocationDetails(params: {\n path?: string;\n explicitTarget?: string;\n query?: Record<string, any>;\n body?: any;\n reasoner?: string;\n target?: string;\n skill?: string;\n type?: string;\n }): { name?: string; targetType?: 'reasoner' | 'skill'; input: any } {\n const pathTarget = this.parsePathTarget(params.path);\n const name =\n this.firstDefined<string>(\n params.explicitTarget,\n pathTarget.name,\n params.query?.target,\n params.query?.reasoner,\n params.query?.skill,\n params.target,\n params.reasoner,\n params.skill,\n params.body?.target,\n params.body?.reasoner,\n params.body?.skill\n ) ?? pathTarget.name;\n\n const typeValue = (this.firstDefined<string>(\n pathTarget.targetType,\n params.type,\n params.query?.type,\n params.query?.targetType,\n params.body?.type,\n params.body?.targetType\n ) ?? undefined) as 'reasoner' | 'skill' | undefined;\n\n const input = this.normalizeInputPayload(params.body);\n\n return { name: name ?? undefined, targetType: typeValue, input };\n }\n\n private parsePathTarget(\n path?: string\n ): { name?: string; targetType?: 'reasoner' | 'skill' } {\n if (!path) return {};\n\n const normalized = path.split('?')[0];\n const reasonerMatch = normalized.match(/\\/reasoners\\/([^/]+)/);\n if (reasonerMatch?.[1]) {\n return { name: reasonerMatch[1], targetType: 'reasoner' };\n }\n\n const skillMatch = normalized.match(/\\/skills\\/([^/]+)/);\n if (skillMatch?.[1]) {\n return { name: skillMatch[1], targetType: 'skill' };\n }\n\n const executeMatch = normalized.match(/\\/execute\\/([^/]+)/);\n if (executeMatch?.[1]) {\n return { name: executeMatch[1] };\n }\n\n return {};\n }\n\n private parseBody(body: any) {\n if (body === undefined || body === null) return body;\n if (typeof body === 'string') {\n try {\n return JSON.parse(body);\n } catch {\n return body;\n }\n }\n return body;\n }\n\n private normalizeInputPayload(body: any) {\n if (body === undefined || body === null) return {};\n const parsed = this.parseBody(body);\n\n if (parsed && typeof parsed === 'object') {\n const { target, reasoner, skill, type, targetType, ...rest } = parsed as Record<string, any>;\n if ((parsed as any).input !== undefined) {\n return (parsed as any).input;\n }\n if ((parsed as any).data !== undefined) {\n return (parsed as any).data;\n }\n if (Object.keys(rest).length === 0) {\n return {};\n }\n return rest;\n }\n\n return parsed;\n }\n\n private firstDefined<T>(...values: Array<T | undefined | null>): T | undefined {\n for (const value of values) {\n if (value !== undefined && value !== null) {\n return value as T;\n }\n }\n return undefined;\n }\n\n private reasonerDefinitions() {\n return this.reasoners.all().map((r) => {\n const tags = r.options?.tags ?? [];\n return {\n id: r.name,\n input_schema: toJsonSchema(r.options?.inputSchema),\n output_schema: toJsonSchema(r.options?.outputSchema),\n memory_config: r.options?.memoryConfig ?? {\n auto_inject: [] as string[],\n memory_retention: '',\n cache_results: false\n },\n tags,\n proposed_tags: tags\n };\n });\n }\n\n private skillDefinitions() {\n return this.skills.all().map((s) => {\n const tags = s.options?.tags ?? [];\n return {\n id: s.name,\n input_schema: toJsonSchema(s.options?.inputSchema),\n tags,\n proposed_tags: tags\n };\n });\n }\n\n private discoveryPayload(deploymentType: DeploymentType) {\n return {\n node_id: this.config.nodeId,\n version: this.config.version,\n deployment_type: deploymentType,\n reasoners: this.reasonerDefinitions(),\n skills: this.skillDefinitions()\n };\n }\n\n private async executeInvocation(params: {\n targetName: string;\n targetType?: 'reasoner' | 'skill';\n input: any;\n metadata: ExecutionMetadata;\n req?: express.Request;\n res?: express.Response;\n respond?: boolean;\n }) {\n const targetType = params.targetType;\n\n if (targetType === 'skill') {\n const skill = this.skills.get(params.targetName);\n if (!skill) {\n throw new TargetNotFoundError(`Skill not found: ${params.targetName}`);\n }\n return this.runSkill(skill, params);\n }\n\n const reasoner = this.reasoners.get(params.targetName);\n if (reasoner) {\n return this.runReasoner(reasoner, params);\n }\n\n const fallbackSkill = this.skills.get(params.targetName);\n if (fallbackSkill) {\n return this.runSkill(fallbackSkill, params);\n }\n\n throw new TargetNotFoundError(`Reasoner not found: ${params.targetName}`);\n }\n\n private async runReasoner(\n reasoner: { handler: ReasonerHandler<any, any> },\n params: {\n targetName: string;\n input: any;\n metadata: ExecutionMetadata;\n req?: express.Request;\n res?: express.Response;\n respond?: boolean;\n }\n ) {\n const req = params.req ?? ({} as express.Request);\n const res = params.res ?? ({} as express.Response);\n const executionMetadata: ExecutionMetadata = {\n ...params.metadata,\n rootWorkflowId:\n params.metadata.rootWorkflowId ?? params.metadata.workflowId ?? params.metadata.runId ?? params.metadata.executionId,\n reasonerId: params.metadata.reasonerId ?? params.targetName\n };\n const execCtx = new ExecutionContext({\n input: params.input,\n metadata: executionMetadata,\n req,\n res,\n agent: this\n });\n\n return ExecutionContext.run(execCtx, async () => {\n this.executionLogger.system('execution.started', 'Execution started', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n this.executionLogger.system('reasoner.started', 'Reasoner execution started', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n try {\n const ctx = new ReasonerContext({\n input: params.input,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n sessionId: executionMetadata.sessionId,\n actorId: executionMetadata.actorId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n parentExecutionId: executionMetadata.parentExecutionId,\n reasonerId: executionMetadata.reasonerId,\n callerDid: executionMetadata.callerDid,\n targetDid: executionMetadata.targetDid,\n agentNodeDid: executionMetadata.agentNodeDid,\n req,\n res,\n agent: this,\n logger: this.executionLogger,\n aiClient: this.aiClient,\n memory: this.getMemoryInterface(executionMetadata),\n workflow: this.getWorkflowReporter(executionMetadata),\n did: this.getDidInterface(executionMetadata, params.input, params.targetName)\n });\n\n const result = await reasoner.handler(ctx);\n this.executionLogger.system('reasoner.completed', 'Reasoner execution completed', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n this.executionLogger.system('execution.completed', 'Execution completed', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n if (params.respond && params.res) {\n params.res.json(result);\n return;\n }\n return result;\n } catch (err: any) {\n this.executionLogger.error('Reasoner execution failed', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n error: err?.message ?? 'Execution failed'\n }, {\n eventType: 'reasoner.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n this.executionLogger.error('Execution failed', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n error: err?.message ?? 'Execution failed'\n }, {\n eventType: 'execution.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n if (params.respond && params.res) {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n const statusCode = (err?.status >= 400)\n ? err.status\n : ((err?.statusCode >= 400) ? err.statusCode : 500);\n params.res.status(statusCode).json(body);\n return;\n }\n throw err;\n }\n });\n }\n\n private async runSkill(\n skill: { handler: SkillHandler<any, any> },\n params: {\n targetName: string;\n input: any;\n metadata: ExecutionMetadata;\n req?: express.Request;\n res?: express.Response;\n respond?: boolean;\n }\n ) {\n const req = params.req ?? ({} as express.Request);\n const res = params.res ?? ({} as express.Response);\n const executionMetadata: ExecutionMetadata = {\n ...params.metadata,\n rootWorkflowId:\n params.metadata.rootWorkflowId ?? params.metadata.workflowId ?? params.metadata.runId ?? params.metadata.executionId,\n reasonerId: params.metadata.reasonerId ?? params.targetName\n };\n const execCtx = new ExecutionContext({\n input: params.input,\n metadata: executionMetadata,\n req,\n res,\n agent: this\n });\n\n return ExecutionContext.run(execCtx, async () => {\n this.executionLogger.system('execution.started', 'Execution started', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n this.executionLogger.system('skill.started', 'Skill execution started', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n try {\n const ctx = new SkillContext({\n input: params.input,\n executionId: executionMetadata.executionId,\n sessionId: executionMetadata.sessionId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n reasonerId: executionMetadata.reasonerId,\n req,\n res,\n agent: this,\n logger: this.executionLogger,\n memory: this.getMemoryInterface(executionMetadata),\n workflow: this.getWorkflowReporter(executionMetadata),\n did: this.getDidInterface(executionMetadata, params.input, params.targetName)\n });\n\n const result = await skill.handler(ctx);\n this.executionLogger.system('skill.completed', 'Skill execution completed', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n this.executionLogger.system('execution.completed', 'Execution completed', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n if (params.respond && params.res) {\n params.res.json(result);\n return;\n }\n return result;\n } catch (err: any) {\n this.executionLogger.error('Skill execution failed', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n error: err?.message ?? 'Execution failed'\n }, {\n eventType: 'skill.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n this.executionLogger.error('Execution failed', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n error: err?.message ?? 'Execution failed'\n }, {\n eventType: 'execution.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n if (params.respond && params.res) {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n const statusCode = (err?.status >= 400)\n ? err.status\n : ((err?.statusCode >= 400) ? err.statusCode : 500);\n params.res.status(statusCode).json(body);\n return;\n }\n throw err;\n }\n });\n }\n\n private async registerWithControlPlane() {\n try {\n const reasoners = this.reasonerDefinitions();\n const skills = this.skillDefinitions();\n\n const port = this.config.port ?? 8001;\n const hostForUrl = this.config.publicUrl\n ? undefined\n : (this.config.host && this.config.host !== '0.0.0.0' ? this.config.host : '127.0.0.1');\n const publicUrl =\n this.config.publicUrl ?? `http://${hostForUrl ?? '127.0.0.1'}:${port}`;\n\n const agentTags = this.config.tags ?? [];\n const regResponse = await this.agentFieldClient.register({\n id: this.config.nodeId,\n version: this.config.version ?? '',\n base_url: publicUrl,\n public_url: publicUrl,\n deployment_type: this.config.deploymentType ?? 'long_running',\n reasoners,\n skills,\n proposed_tags: agentTags,\n tags: agentTags\n });\n\n // Handle pending approval state: poll until approved\n if (regResponse?.status === 'pending_approval') {\n const pendingTags = regResponse.pending_tags ?? [];\n console.log(`[AgentField] Node ${this.config.nodeId} registered but awaiting tag approval (pending tags: ${pendingTags.join(', ')})`);\n await this.waitForApproval();\n console.log(`[AgentField] Node ${this.config.nodeId} tag approval granted`);\n }\n\n // Register with DID system if enabled\n if (this.config.didEnabled) {\n try {\n const didRegistered = await this.didManager.registerAgent(reasoners, skills);\n if (didRegistered) {\n const summary = this.didManager.getIdentitySummary();\n console.log(`[DID] Agent registered with DID: ${summary.agentDid}`);\n console.log(`[DID] Reasoner DIDs: ${summary.reasonerCount}, Skill DIDs: ${summary.skillCount}`);\n\n // Wire DID credentials to the HTTP client for request signing\n const pkg = this.didManager.getIdentityPackage();\n if (pkg?.agentDid?.did && pkg?.agentDid?.privateKeyJwk) {\n this.agentFieldClient.setDIDCredentials(pkg.agentDid.did, pkg.agentDid.privateKeyJwk);\n }\n }\n } catch (didErr) {\n if (!this.config.devMode) {\n console.warn('[DID] DID registration failed:', didErr);\n }\n // DID registration failure is non-fatal - agent can still operate without VCs\n }\n }\n } catch (err) {\n if (!this.config.devMode) {\n throw err;\n }\n console.warn('Control plane registration failed (devMode=true), continuing locally', err);\n }\n }\n\n private async waitForApproval(): Promise<void> {\n const pollInterval = 5000; // 5 seconds\n const timeoutMs = 5 * 60 * 1000; // 5 minutes\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n await new Promise(resolve => setTimeout(resolve, pollInterval));\n try {\n const node = await this.agentFieldClient.getNode(this.config.nodeId);\n const status = node?.lifecycle_status;\n if (status && status !== 'pending_approval') {\n return;\n }\n console.log(`[AgentField] Node ${this.config.nodeId} still pending approval...`);\n } catch (err) {\n console.warn('[AgentField] Polling for approval status failed:', err);\n }\n }\n\n throw new Error(\n `[AgentField] Node ${this.config.nodeId} approval timed out after ${timeoutMs / 1000}s`\n );\n }\n\n private startHeartbeat() {\n const interval = this.config.heartbeatIntervalMs ?? 30_000;\n if (interval <= 0) return;\n\n const tick = async () => {\n try {\n await this.agentFieldClient.heartbeat('ready');\n } catch (err) {\n console.warn('Heartbeat failed', err);\n }\n };\n\n this.heartbeatTimer = setInterval(tick, interval);\n tick();\n }\n\n private health(): HealthStatus {\n return {\n status: 'running',\n node_id: this.config.nodeId,\n version: this.config.version\n };\n }\n\n private mcpStatus() {\n const servers = this.mcpClientRegistry\n ? this.mcpClientRegistry.list().map((client) => ({\n alias: client.alias,\n baseUrl: client.baseUrl,\n transport: client.transport\n }))\n : [];\n\n const skills = this.skills\n .all()\n .filter((skill) => skill.options?.tags?.includes('mcp'))\n .map((skill) => skill.name);\n\n return {\n status: servers.length ? 'configured' : 'disabled',\n servers,\n skills\n };\n }\n\n private dispatchMemoryEvent(event: MemoryChangeEvent) {\n this.memoryWatchers.forEach(({ pattern, handler, scope, scopeId }) => {\n const scopeMatch = (!scope || scope === event.scope) && (!scopeId || scopeId === event.scopeId);\n if (scopeMatch && matchesPattern(pattern, event.key)) {\n handler(event);\n }\n });\n }\n\n private parseTarget(target: string): { agentId?: string; name: string } {\n if (!target.includes('.')) {\n return { name: target };\n }\n const [agentId, remainder] = target.split('.', 2);\n const name = remainder.replace(':', '/');\n return { agentId, name };\n }\n}\n","import type { ReasonerDefinition, ReasonerHandler, ReasonerOptions } from '../types/reasoner.js';\nimport type { SkillDefinition, SkillHandler, SkillOptions } from '../types/skill.js';\n\nexport interface AgentRouterOptions {\n prefix?: string;\n tags?: string[];\n}\n\nexport class AgentRouter {\n readonly prefix?: string;\n readonly tags?: string[];\n readonly reasoners: ReasonerDefinition[] = [];\n readonly skills: SkillDefinition[] = [];\n\n constructor(options: AgentRouterOptions = {}) {\n this.prefix = options.prefix;\n this.tags = options.tags;\n }\n\n reasoner<TInput = any, TOutput = any>(\n name: string,\n handler: ReasonerHandler<TInput, TOutput>,\n options?: ReasonerOptions\n ) {\n const fullName = this.prefix ? `${sanitize(this.prefix)}_${name}` : name;\n this.reasoners.push({ name: fullName, handler, options });\n return this;\n }\n\n skill<TInput = any, TOutput = any>(\n name: string,\n handler: SkillHandler<TInput, TOutput>,\n options?: SkillOptions\n ) {\n const fullName = this.prefix ? `${sanitize(this.prefix)}_${name}` : name;\n this.skills.push({ name: fullName, handler, options });\n return this;\n }\n}\n\nfunction sanitize(value: string) {\n return value.replace(/[^0-9a-zA-Z]+/g, '_').replace(/_+/g, '_').replace(/^_+|_+$/g, '');\n}\n","/**\n * Multimodal content helpers for AI prompts.\n * Provides Image, Audio, and File classes with factory methods for creating\n * multimodal content from various sources (files, URLs, buffers, base64).\n */\n\nimport { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\n\n// MIME type mappings for common image formats\nconst IMAGE_MIME_TYPES: Record<string, string> = {\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.png': 'image/png',\n '.gif': 'image/gif',\n '.webp': 'image/webp',\n '.bmp': 'image/bmp',\n};\n\n// MIME type mappings for common audio formats\nconst AUDIO_MIME_TYPES: Record<string, string> = {\n '.wav': 'audio/wav',\n '.mp3': 'audio/mpeg',\n '.flac': 'audio/flac',\n '.ogg': 'audio/ogg',\n};\n\n/**\n * Represents text content in a multimodal prompt.\n */\nexport class Text {\n readonly type: 'text' = 'text';\n readonly text: string;\n\n constructor(text: string) {\n this.text = text;\n }\n}\n\n/**\n * Represents image content in a multimodal prompt.\n */\nexport class Image {\n readonly type: 'image_url' = 'image_url';\n readonly imageUrl: { url: string; detail?: 'low' | 'high' | 'auto' };\n\n private constructor(imageUrl: { url: string; detail?: 'low' | 'high' | 'auto' }) {\n this.imageUrl = imageUrl;\n }\n\n /**\n * Create Image from a local file by converting to base64 data URL.\n */\n static async fromFile(\n filePath: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n ): Promise<Image> {\n const absolutePath = resolve(filePath);\n\n // Read file and encode to base64\n const buffer = await readFile(absolutePath);\n const base64Data = buffer.toString('base64');\n\n // Determine MIME type from extension\n const ext = getExtension(absolutePath).toLowerCase();\n const mimeType = IMAGE_MIME_TYPES[ext] || 'image/jpeg';\n\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new Image({ url: dataUrl, detail });\n }\n\n /**\n * Create Image from a URL.\n */\n static fromUrl(\n url: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n ): Image {\n return new Image({ url, detail });\n }\n\n /**\n * Create Image from a buffer.\n */\n static async fromBuffer(\n buffer: Buffer | Uint8Array,\n mimeType: string = 'image/jpeg',\n detail: 'low' | 'high' | 'auto' = 'high'\n ): Promise<Image> {\n const base64Data = Buffer.from(buffer).toString('base64');\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new Image({ url: dataUrl, detail });\n }\n\n /**\n * Create Image from a base64 string.\n */\n static async fromBase64(\n base64Data: string,\n mimeType: string = 'image/jpeg',\n detail: 'low' | 'high' | 'auto' = 'high'\n ): Promise<Image> {\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new Image({ url: dataUrl, detail });\n }\n}\n\n/**\n * Represents audio content in a multimodal prompt.\n */\nexport class Audio {\n readonly type: 'input_audio' = 'input_audio';\n readonly audio: { data: string; format: string };\n\n private constructor(audio: { data: string; format: string }) {\n this.audio = audio;\n }\n\n /**\n * Create Audio from a local file by converting to base64.\n */\n static async fromFile(\n filePath: string,\n format?: 'wav' | 'mp3' | 'flac' | 'ogg'\n ): Promise<Audio> {\n const absolutePath = resolve(filePath);\n\n // Auto-detect format from extension if not provided\n const ext = getExtension(absolutePath).toLowerCase().replace('.', '');\n const audioFormat =\n format ||\n (['wav', 'mp3', 'flac', 'ogg'].includes(ext) ? (ext as 'wav' | 'mp3' | 'flac' | 'ogg') : 'wav');\n\n // Read file and encode to base64\n const buffer = await readFile(absolutePath);\n const base64Data = buffer.toString('base64');\n\n return new Audio({ data: base64Data, format: audioFormat });\n }\n\n /**\n * Create Audio from a URL (downloads and converts to base64).\n */\n static async fromUrl(\n url: string,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n ): Promise<Audio> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch audio from URL: ${response.status} ${response.statusText}`);\n }\n const arrayBuffer = await response.arrayBuffer();\n const base64Data = Buffer.from(arrayBuffer).toString('base64');\n return new Audio({ data: base64Data, format });\n } catch (error) {\n if (error instanceof TypeError && error.message.includes('fetch')) {\n throw new Error('URL download requires a fetch-compatible environment');\n }\n throw error;\n }\n }\n\n /**\n * Create Audio from a buffer.\n */\n static async fromBuffer(\n buffer: Buffer | Uint8Array,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n ): Promise<Audio> {\n const base64Data = Buffer.from(buffer).toString('base64');\n return new Audio({ data: base64Data, format });\n }\n\n /**\n * Create Audio from a base64 string.\n */\n static async fromBase64(\n base64Data: string,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n ): Promise<Audio> {\n return new Audio({ data: base64Data, format });\n }\n}\n\n/**\n * Represents a generic file content in a multimodal prompt.\n */\nexport class File {\n readonly type: 'file' = 'file';\n readonly file: { url: string; mimeType?: string };\n\n private constructor(file: { url: string; mimeType?: string }) {\n this.file = file;\n }\n\n /**\n * Create File from a local file path.\n */\n static async fromFile(filePath: string, mimeType?: string): Promise<File> {\n const absolutePath = resolve(filePath);\n\n // Auto-detect MIME type if not provided\n const detectedMimeType =\n mimeType ||\n guessMimeType(absolutePath) ||\n 'application/octet-stream';\n\n const buffer = await readFile(absolutePath);\n const base64Data = buffer.toString('base64');\n const dataUrl = `data:${detectedMimeType};base64,${base64Data}`;\n return new File({ url: dataUrl, mimeType: detectedMimeType });\n }\n\n /**\n * Create File from a URL.\n */\n static fromUrl(url: string, mimeType?: string): File {\n return new File({ url, mimeType });\n }\n\n /**\n * Create File from a buffer.\n */\n static async fromBuffer(buffer: Buffer | Uint8Array, mimeType: string): Promise<File> {\n const base64Data = Buffer.from(buffer).toString('base64');\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new File({ url: dataUrl, mimeType });\n }\n\n /**\n * Create File from a base64 string.\n */\n static async fromBase64(base64Data: string, mimeType: string): Promise<File> {\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new File({ url: dataUrl, mimeType });\n }\n}\n\n// Utility functions\n\n/**\n * Get the file extension from a path.\n */\nfunction getExtension(filePath: string): string {\n const lastDot = filePath.lastIndexOf('.');\n if (lastDot === -1) {\n return '';\n }\n return filePath.slice(lastDot);\n}\n\n/**\n * Guess MIME type from file extension.\n */\nfunction guessMimeType(filePath: string): string | null {\n const ext = getExtension(filePath).toLowerCase();\n\n // Check image types\n if (ext in IMAGE_MIME_TYPES) {\n return IMAGE_MIME_TYPES[ext];\n }\n\n // Check audio types\n if (ext in AUDIO_MIME_TYPES) {\n return AUDIO_MIME_TYPES[ext];\n }\n\n // Common document types\n const documentMimeTypes: Record<string, string> = {\n '.pdf': 'application/pdf',\n '.doc': 'application/msword',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.xls': 'application/vnd.ms-excel',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n '.txt': 'text/plain',\n '.csv': 'text/csv',\n '.html': 'text/html',\n '.json': 'application/json',\n '.xml': 'application/xml',\n '.zip': 'application/zip',\n };\n\n return documentMimeTypes[ext] || null;\n}\n\n// Convenience factory functions\n\n/**\n * Create text content.\n */\nexport function text(content: string): Text {\n return new Text(content);\n}\n\n/**\n * Create image content from a local file.\n */\nexport async function imageFromFile(\n filePath: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n): Promise<Image> {\n return Image.fromFile(filePath, detail);\n}\n\n/**\n * Create image content from a URL.\n */\nexport function imageFromUrl(\n url: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n): Image {\n return Image.fromUrl(url, detail);\n}\n\n/**\n * Create image content from a buffer.\n */\nexport async function imageFromBuffer(\n buffer: Buffer | Uint8Array,\n mimeType: string = 'image/jpeg',\n detail: 'low' | 'high' | 'auto' = 'high'\n): Promise<Image> {\n return Image.fromBuffer(buffer, mimeType, detail);\n}\n\n/**\n * Create image content from a base64 string.\n */\nexport async function imageFromBase64(\n base64Data: string,\n mimeType?: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n): Promise<Image> {\n return Image.fromBase64(base64Data, mimeType, detail);\n}\n\n/**\n * Create audio content from a local file.\n */\nexport async function audioFromFile(\n filePath: string,\n format?: 'wav' | 'mp3' | 'flac' | 'ogg'\n): Promise<Audio> {\n return Audio.fromFile(filePath, format);\n}\n\n/**\n * Create audio content from a URL.\n */\nexport async function audioFromUrl(\n url: string,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n): Promise<Audio> {\n return Audio.fromUrl(url, format);\n}\n\n/**\n * Create audio content from a buffer.\n */\nexport async function audioFromBuffer(\n buffer: Buffer | Uint8Array,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n): Promise<Audio> {\n return Audio.fromBuffer(buffer, format);\n}\n\n/**\n * Create audio content from a base64 string.\n */\nexport async function audioFromBase64(\n base64Data: string,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n): Promise<Audio> {\n return Audio.fromBase64(base64Data, format);\n}\n\n/**\n * Create file content from a local file.\n */\nexport async function fileFromPath(filePath: string, mimeType?: string): Promise<File> {\n return File.fromFile(filePath, mimeType);\n}\n\n/**\n * Create file content from a URL.\n */\nexport function fileFromUrl(url: string, mimeType?: string): File {\n return File.fromUrl(url, mimeType);\n}\n\n/**\n * Create file content from a buffer.\n */\nexport async function fileFromBuffer(buffer: Buffer | Uint8Array, mimeType: string): Promise<File> {\n return File.fromBuffer(buffer, mimeType);\n}\n\n/**\n * Create file content from a base64 string.\n */\nexport async function fileFromBase64(base64Data: string, mimeType: string): Promise<File> {\n return File.fromBase64(base64Data, mimeType);\n}\n\n// Type for all multimodal content types\nexport type MultimodalContent = Text | Image | Audio | File;\n","/**\n * Multimodal response classes for handling LLM multimodal outputs.\n * Provides seamless integration with audio, image, and file outputs while maintaining backward compatibility.\n */\n\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Represents image output from LLM with convenient access methods.\n */\nexport interface ImageOutput {\n /** URL to image */\n url?: string;\n /** Base64-encoded image data */\n b64Json?: string;\n /** Revised prompt used for generation */\n revisedPrompt?: string;\n}\n\n/**\n * Represents audio output from LLM with convenient access methods.\n */\nexport interface AudioOutput {\n /** Base64-encoded audio data */\n data?: string;\n /** Audio format (wav, mp3, etc.) */\n format: string;\n /** URL to audio file if available */\n url?: string;\n}\n\n/**\n * Represents generic file output from LLM.\n */\nexport interface FileOutput {\n /** URL to file */\n url?: string;\n /** Base64-encoded file data */\n data?: string;\n /** MIME type of file */\n mimeType?: string;\n /** Suggested filename */\n filename?: string;\n}\n\n/**\n * Enhanced response object that provides seamless access to multimodal content\n * while maintaining backward compatibility with string responses.\n */\nexport class MultimodalResponse {\n private _text: string;\n private _audio: AudioOutput | null;\n private _images: ImageOutput[];\n private _files: FileOutput[];\n private _rawResponse: unknown;\n private _costUsd: number | null;\n private _usage: {\n promptTokens?: number;\n completionTokens?: number;\n totalTokens?: number;\n };\n\n constructor(\n text: string = '',\n audio: AudioOutput | null = null,\n images: ImageOutput[] = [],\n files: FileOutput[] = [],\n rawResponse: unknown = null,\n costUsd: number | null = null,\n usage: { promptTokens?: number; completionTokens?: number; totalTokens?: number } = {}\n ) {\n this._text = text;\n this._audio = audio;\n this._images = images;\n this._files = files;\n this._rawResponse = rawResponse;\n this._costUsd = costUsd;\n this._usage = usage;\n }\n\n /**\n * Get text content.\n */\n get text(): string {\n return this._text;\n }\n\n /**\n * Get audio output if available.\n */\n get audio(): AudioOutput | null {\n return this._audio;\n }\n\n /**\n * Get list of image outputs.\n */\n get images(): ImageOutput[] {\n return this._images;\n }\n\n /**\n * Get list of file outputs.\n */\n get files(): FileOutput[] {\n return this._files;\n }\n\n /**\n * Check if response contains audio.\n */\n hasAudio(): boolean {\n return this._audio !== null;\n }\n\n /**\n * Check if response contains images.\n */\n hasImage(): boolean {\n return this._images.length > 0;\n }\n\n /**\n * Check if response contains files.\n */\n hasFile(): boolean {\n return this._files.length > 0;\n }\n\n /**\n * Check if response contains any multimodal content.\n */\n isMultimodal(): boolean {\n return this.hasAudio() || this.hasImage() || this.hasFile();\n }\n\n /**\n * Get the raw LLM response object.\n */\n get rawResponse(): unknown {\n return this._rawResponse;\n }\n\n /**\n * Estimated cost of this LLM call in USD, if available.\n */\n get costUsd(): number | null {\n return this._costUsd;\n }\n\n /**\n * Token usage breakdown.\n */\n get usage(): { promptTokens?: number; completionTokens?: number; totalTokens?: number } {\n return this._usage;\n }\n\n /**\n * Get all images.\n * Alias for images property for API consistency.\n */\n getImages(): ImageOutput[] {\n return this._images;\n }\n\n /**\n * Get audio.\n * Alias for audio property for API consistency.\n */\n getAudio(): AudioOutput | null {\n return this._audio;\n }\n\n /**\n * Get all files.\n * Alias for files property for API consistency.\n */\n getFiles(): FileOutput[] {\n return this._files;\n }\n\n /**\n * Get raw image bytes from an ImageOutput.\n */\n private decodeBase64(data: string): Uint8Array {\n return new Uint8Array(Buffer.from(data, 'base64'));\n }\n\n private async getUrlBytes(sourceUrl: string): Promise<Uint8Array> {\n if (sourceUrl.startsWith('data:')) {\n const base64Data = sourceUrl.split(',', 2)[1];\n if (!base64Data) {\n throw new Error('Invalid data URL');\n }\n return this.decodeBase64(base64Data);\n }\n\n const response = await fetch(sourceUrl);\n if (!response.ok) {\n throw new Error(`Failed to download multimodal asset: ${response.status} ${response.statusText}`);\n }\n const arrayBuffer = await response.arrayBuffer();\n return new Uint8Array(arrayBuffer);\n }\n\n private async getImageBytes(image: ImageOutput): Promise<Uint8Array> {\n if (image.b64Json) {\n return this.decodeBase64(image.b64Json);\n } else if (image.url) {\n return this.getUrlBytes(image.url);\n }\n throw new Error('No image data available');\n }\n\n /**\n * Get raw audio bytes from an AudioOutput.\n */\n private async getAudioBytes(audio: AudioOutput): Promise<Uint8Array> {\n if (audio.data) {\n return this.decodeBase64(audio.data);\n }\n if (audio.url) {\n return this.getUrlBytes(audio.url);\n }\n throw new Error('No audio data available');\n }\n\n /**\n * Get raw file bytes from a FileOutput.\n */\n private async getFileBytes(file: FileOutput): Promise<Uint8Array> {\n if (file.data) {\n return this.decodeBase64(file.data);\n }\n if (file.url) {\n return this.getUrlBytes(file.url);\n }\n throw new Error('No file data available');\n }\n\n /**\n * Save a single image to file.\n */\n async saveImage(image: ImageOutput, imagePath: string): Promise<void> {\n const bytes = await this.getImageBytes(image);\n await fs.mkdir(path.dirname(imagePath), { recursive: true });\n await fs.writeFile(imagePath, bytes);\n }\n\n /**\n * Save a single audio to file.\n */\n async saveAudio(audio: AudioOutput, audioPath: string): Promise<void> {\n const bytes = await this.getAudioBytes(audio);\n await fs.mkdir(path.dirname(audioPath), { recursive: true });\n await fs.writeFile(audioPath, bytes);\n }\n\n /**\n * Save a single file to disk.\n */\n async saveFile(file: FileOutput, filePath: string): Promise<void> {\n const bytes = await this.getFileBytes(file);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, bytes);\n }\n\n /**\n * Save all multimodal content to a directory.\n * Returns a dict mapping content type to saved file paths.\n */\n async save(outputDir: string, prefix: string = 'output'): Promise<Record<string, string>> {\n const savedFiles: Record<string, string> = {};\n\n // Ensure output directory exists\n await fs.mkdir(outputDir, { recursive: true });\n\n // Save audio\n if (this._audio) {\n const audioPath = path.join(outputDir, `${prefix}_audio.${this._audio.format}`);\n await this.saveAudio(this._audio, audioPath);\n savedFiles['audio'] = audioPath;\n }\n\n // Save images\n for (let i = 0; i < this._images.length; i++) {\n const image = this._images[i];\n // Determine extension from URL or default to png\n let ext = 'png';\n if (image.url) {\n const urlExt = path.extname(image.url).slice(1);\n if (urlExt) ext = urlExt;\n }\n const imagePath = path.join(outputDir, `${prefix}_image_${i}.${ext}`);\n await this.saveImage(image, imagePath);\n savedFiles[`image_${i}`] = imagePath;\n }\n\n // Save files\n for (let i = 0; i < this._files.length; i++) {\n const file = this._files[i];\n const filename = file.filename || `${prefix}_file_${i}`;\n const filePath = path.join(outputDir, filename);\n await this.saveFile(file, filePath);\n savedFiles[`file_${i}`] = filePath;\n }\n\n // Save text content\n if (this._text) {\n const textPath = path.join(outputDir, `${prefix}_text.txt`);\n await fs.writeFile(textPath, this._text, 'utf-8');\n savedFiles['text'] = textPath;\n }\n\n return savedFiles;\n }\n\n /**\n * String representation for backward compatibility.\n */\n toString(): string {\n return this._text;\n }\n\n /**\n * Developer-friendly representation.\n */\n toJSON(): object {\n const parts: string[] = [];\n if (this._audio) parts.push(`audio=${this._audio.format}`);\n if (this._images.length > 0) parts.push(`images=${this._images.length}`);\n if (this._files.length > 0) parts.push(`files=${this._files.length}`);\n return {\n text: this._text,\n audio: this._audio,\n images: this._images,\n files: this._files,\n _debug: `MultimodalResponse(${parts.join(', ')})`\n };\n }\n}\n\n/**\n * Create a MultimodalResponse from raw LLM response data.\n * Handles multiple formats: OpenRouter, OpenAI, and generic patterns.\n */\nexport function createMultimodalResponse(\n rawResponse: unknown,\n text: string = ''\n): MultimodalResponse {\n let audio: AudioOutput | null = null;\n let images: ImageOutput[] = [];\n let files: FileOutput[] = [];\n\n // Extract images from response\n const extractedImages = extractImages(rawResponse);\n if (extractedImages.length > 0) {\n images = extractedImages;\n }\n\n // Extract audio from response\n const extractedAudio = extractAudio(rawResponse);\n if (extractedAudio) {\n audio = extractedAudio;\n }\n\n // Extract files from response\n const extractedFiles = extractFiles(rawResponse);\n if (extractedFiles.length > 0) {\n files = extractedFiles;\n }\n\n return new MultimodalResponse(text, audio, images, files, rawResponse);\n}\n\n/**\n * Extract images from various data structures.\n */\nfunction extractImages(data: unknown): ImageOutput[] {\n const images: ImageOutput[] = [];\n\n if (!data) return images;\n\n // Handle array of images\n if (Array.isArray(data)) {\n for (const item of data) {\n const extracted = extractSingleImage(item);\n if (extracted) images.push(extracted);\n }\n return images;\n }\n\n // Handle object with image data\n if (typeof data === 'object') {\n const obj = data as Record<string, unknown>;\n\n // Check for images array\n if (Array.isArray(obj.images)) {\n for (const img of obj.images) {\n const extracted = extractSingleImage(img);\n if (extracted) images.push(extracted);\n }\n }\n\n // Check for image_url structure (OpenRouter pattern)\n if (obj.image_url) {\n const extracted = extractSingleImage(obj.image_url);\n if (extracted) images.push(extracted);\n }\n\n // Check for direct url/b64_json\n if (obj.url || obj.b64_json || obj.b64Json) {\n const extracted = extractSingleImage(obj);\n if (extracted) images.push(extracted);\n }\n }\n\n return images;\n}\n\n/**\n * Extract a single image from data.\n */\nfunction extractSingleImage(data: unknown): ImageOutput | null {\n if (!data) return null;\n\n if (typeof data === 'string') {\n // Direct URL string\n if (data.startsWith('http') || data.startsWith('data:')) {\n return { url: data };\n }\n return null;\n }\n\n if (typeof data === 'object') {\n const obj = data as Record<string, unknown>;\n\n // Handle image_url nested structure\n if (obj.image_url) {\n const imageUrl = obj.image_url as Record<string, unknown>;\n const url = imageUrl.url as string | undefined;\n if (url) {\n // Handle data URLs\n if (url.startsWith('data:image')) {\n const base64Data = url.split(',', 2)[1];\n return { url, b64Json: base64Data || undefined };\n }\n return { url };\n }\n }\n\n // Direct url/b64_json\n const url = (obj.url || obj.image_url) as string | undefined;\n const b64Json = (obj.b64_json || obj.b64Json) as string | undefined;\n const revisedPrompt = (obj.revised_prompt || obj.revisedPrompt) as string | undefined;\n\n if (url || b64Json) {\n return { url, b64Json, revisedPrompt };\n }\n }\n\n return null;\n}\n\n/**\n * Extract audio from response data.\n */\nfunction extractAudio(data: unknown): AudioOutput | null {\n if (!data || typeof data !== 'object') return null;\n\n const obj = data as Record<string, unknown>;\n\n // Check for audio object\n if (obj.audio && typeof obj.audio === 'object') {\n const audio = obj.audio as Record<string, unknown>;\n return {\n data: audio.data as string | undefined,\n format: (audio.format as string) || 'wav',\n url: audio.url as string | undefined\n };\n }\n\n // Check for input_audio structure\n if (obj.input_audio && typeof obj.input_audio === 'object') {\n const inputAudio = obj.input_audio as Record<string, unknown>;\n return {\n data: inputAudio.data as string | undefined,\n format: (inputAudio.format as string) || 'wav'\n };\n }\n\n return null;\n}\n\n/**\n * Extract files from response data.\n */\nfunction extractFiles(data: unknown): FileOutput[] {\n const files: FileOutput[] = [];\n\n if (!data) return files;\n\n if (typeof data === 'object') {\n const obj = data as Record<string, unknown>;\n\n // Check for files array\n if (Array.isArray(obj.files)) {\n for (const file of obj.files) {\n const extracted = extractSingleFile(file);\n if (extracted) files.push(extracted);\n }\n }\n }\n\n return files;\n}\n\n/**\n * Extract a single file from data.\n */\nfunction extractSingleFile(data: unknown): FileOutput | null {\n if (!data || typeof data !== 'object') return null;\n\n const obj = data as Record<string, unknown>;\n\n const url = obj.url as string | undefined;\n const data_b64 = obj.data as string | undefined;\n const mimeType = (obj.mime_type || obj.mimeType) as string | undefined;\n const filename = obj.filename as string | undefined;\n\n if (url || data_b64) {\n return { url, data: data_b64, mimeType, filename };\n }\n\n return null;\n}\n","export type { HarnessConfig, HarnessOptions, Metrics, RawResult, HarnessResult } from './types.js';\nexport { createHarnessResult, createMetrics, createRawResult } from './types.js';\nexport type { HarnessProvider } from './providers/base.js';\nexport { buildProvider, SUPPORTED_PROVIDERS } from './providers/factory.js';\nexport { HarnessRunner } from './runner.js';\n","/**\n * Canonical execution status utilities for the AgentField TypeScript SDK.\n *\n * Mirrors the control plane's status normalization and terminal-state logic\n * so that SDK consumers can classify execution statuses consistently.\n */\n\n/** Canonical execution status values used by the control plane. */\nexport const ExecutionStatus = {\n PENDING: 'pending',\n QUEUED: 'queued',\n WAITING: 'waiting',\n RUNNING: 'running',\n SUCCEEDED: 'succeeded',\n FAILED: 'failed',\n CANCELLED: 'cancelled',\n TIMEOUT: 'timeout',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type ExecutionStatusValue = (typeof ExecutionStatus)[keyof typeof ExecutionStatus];\n\n/** All canonical status strings. */\nexport const CANONICAL_STATUSES: ReadonlySet<string> = new Set<string>(\n Object.values(ExecutionStatus)\n);\n\n/** Statuses that represent a completed execution (no further transitions). */\nexport const TERMINAL_STATUSES: ReadonlySet<string> = new Set<string>([\n ExecutionStatus.SUCCEEDED,\n ExecutionStatus.FAILED,\n ExecutionStatus.CANCELLED,\n ExecutionStatus.TIMEOUT,\n]);\n\n/** Statuses that represent an active, pollable execution. */\nexport const ACTIVE_STATUSES: ReadonlySet<string> = new Set<string>([\n ExecutionStatus.PENDING,\n ExecutionStatus.QUEUED,\n ExecutionStatus.WAITING,\n ExecutionStatus.RUNNING,\n]);\n\n/** Human-friendly aliases that map to canonical statuses. */\nconst STATUS_ALIASES: Record<string, string> = {\n success: 'succeeded',\n successful: 'succeeded',\n completed: 'succeeded',\n complete: 'succeeded',\n done: 'succeeded',\n ok: 'succeeded',\n error: 'failed',\n failure: 'failed',\n errored: 'failed',\n canceled: 'cancelled',\n cancel: 'cancelled',\n timed_out: 'timeout',\n wait: 'queued',\n awaiting_approval: 'waiting',\n awaiting_human: 'waiting',\n approval_pending: 'waiting',\n in_progress: 'running',\n processing: 'running',\n};\n\n/**\n * Normalize an arbitrary status string to its canonical form.\n *\n * Returns `\"unknown\"` for unrecognized or empty values.\n */\nexport function normalizeStatus(status: string | null | undefined): string {\n if (status == null) return 'unknown';\n const normalized = status.trim().toLowerCase();\n if (!normalized) return 'unknown';\n if (CANONICAL_STATUSES.has(normalized)) return normalized;\n return STATUS_ALIASES[normalized] ?? 'unknown';\n}\n\n/** Return `true` if the status represents a terminal (completed) execution. */\nexport function isTerminal(status: string | null | undefined): boolean {\n return TERMINAL_STATUSES.has(normalizeStatus(status));\n}\n\n/** Return `true` if the status represents an active, pollable execution. */\nexport function isActive(status: string | null | undefined): boolean {\n return ACTIVE_STATUSES.has(normalizeStatus(status));\n}\n","/**\n * Approval workflow helpers for the AgentField TypeScript SDK.\n *\n * Provides methods to request human approval for an execution,\n * poll for approval status, and wait until resolved.\n */\n\nimport axios, { type AxiosInstance } from 'axios';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\n\n/** Payload sent when requesting approval. */\nexport interface RequestApprovalPayload {\n title?: string;\n description?: string;\n templateType?: string;\n payload?: Record<string, any>;\n projectId: string;\n expiresInHours?: number;\n}\n\n/** Response from the control plane after creating an approval request. */\nexport interface ApprovalRequestResponse {\n approvalRequestId: string;\n approvalRequestUrl: string;\n}\n\n/** Approval status returned by the polling endpoint. */\nexport interface ApprovalStatusResponse {\n status: 'pending' | 'approved' | 'rejected' | 'expired';\n response?: Record<string, any>;\n requestUrl?: string;\n requestedAt?: string;\n respondedAt?: string;\n}\n\n/** Options for the blocking `waitForApproval` helper. */\nexport interface WaitForApprovalOptions {\n /** Initial polling interval in milliseconds (default: 5000). */\n pollIntervalMs?: number;\n /** Maximum polling interval in milliseconds (default: 60000). */\n maxIntervalMs?: number;\n /** Total timeout in milliseconds (default: unlimited). */\n timeoutMs?: number;\n}\n\nexport class ApprovalClient {\n private readonly http: AxiosInstance;\n private readonly nodeId: string;\n private readonly headers: Record<string, string>;\n\n constructor(opts: {\n baseURL: string;\n nodeId: string;\n apiKey?: string;\n headers?: Record<string, string>;\n }) {\n this.http = axios.create({\n baseURL: opts.baseURL.replace(/\\/$/, ''),\n timeout: 30_000,\n httpAgent,\n httpsAgent,\n });\n this.nodeId = opts.nodeId;\n\n const merged: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.apiKey) {\n merged['X-API-Key'] = opts.apiKey;\n }\n this.headers = merged;\n }\n\n /**\n * Request human approval, transitioning the execution to `waiting`.\n *\n * Calls `POST /api/v1/agents/{node}/executions/{id}/request-approval`.\n */\n async requestApproval(\n executionId: string,\n payload: RequestApprovalPayload\n ): Promise<ApprovalRequestResponse> {\n const body = {\n title: payload.title ?? 'Approval Request',\n description: payload.description ?? '',\n template_type: payload.templateType ?? 'plan-review-v1',\n payload: payload.payload ?? {},\n project_id: payload.projectId,\n expires_in_hours: payload.expiresInHours ?? 72,\n };\n\n const res = await this.http.post(\n `/api/v1/agents/${encodeURIComponent(this.nodeId)}/executions/${encodeURIComponent(executionId)}/request-approval`,\n body,\n { headers: { ...this.headers, 'Content-Type': 'application/json' } }\n );\n\n return {\n approvalRequestId: res.data.approval_request_id ?? '',\n approvalRequestUrl: res.data.approval_request_url ?? '',\n };\n }\n\n /**\n * Get the current approval status for an execution.\n *\n * Calls `GET /api/v1/agents/{node}/executions/{id}/approval-status`.\n */\n async getApprovalStatus(executionId: string): Promise<ApprovalStatusResponse> {\n const res = await this.http.get(\n `/api/v1/agents/${encodeURIComponent(this.nodeId)}/executions/${encodeURIComponent(executionId)}/approval-status`,\n { headers: this.headers }\n );\n\n const data = res.data;\n return {\n status: data.status ?? 'pending',\n response: data.response,\n requestUrl: data.request_url,\n requestedAt: data.requested_at,\n respondedAt: data.responded_at,\n };\n }\n\n /**\n * Poll approval status with exponential backoff until resolved.\n *\n * Returns once the status is no longer `pending` (i.e. approved, rejected,\n * or expired).\n */\n async waitForApproval(\n executionId: string,\n opts?: WaitForApprovalOptions\n ): Promise<ApprovalStatusResponse> {\n const pollInterval = opts?.pollIntervalMs ?? 5_000;\n const maxInterval = opts?.maxIntervalMs ?? 60_000;\n const timeout = opts?.timeoutMs;\n const backoffFactor = 2;\n\n const startTime = Date.now();\n let interval = pollInterval;\n\n while (true) {\n if (timeout != null && Date.now() - startTime >= timeout) {\n throw new Error(\n `Approval for execution ${executionId} timed out after ${timeout}ms`\n );\n }\n\n await sleep(interval);\n\n let data: ApprovalStatusResponse;\n try {\n data = await this.getApprovalStatus(executionId);\n } catch {\n // Transient failure — back off and retry\n interval = Math.min(interval * backoffFactor, maxInterval);\n continue;\n }\n\n if (data.status !== 'pending') {\n return data;\n }\n\n interval = Math.min(interval * backoffFactor, maxInterval);\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"]}
1
+ {"version":3,"sources":["../src/harness/schema.ts","../src/harness/types.ts","../src/harness/providers/claude.ts","../src/harness/cli.ts","../src/harness/providers/codex.ts","../src/harness/providers/gemini.ts","../src/harness/providers/opencode.ts","../src/harness/providers/factory.ts","../src/harness/runner.ts","../src/agent/ReasonerRegistry.ts","../src/agent/SkillRegistry.ts","../src/context/ExecutionContext.ts","../src/ai/ToolCalling.ts","../src/context/ReasonerContext.ts","../src/context/SkillContext.ts","../src/ai/RateLimiter.ts","../src/ai/AIClient.ts","../src/observability/ExecutionLogger.ts","../src/utils/httpAgents.ts","../src/client/DIDAuthenticator.ts","../src/client/AgentFieldClient.ts","../src/memory/MemoryClient.ts","../src/memory/MemoryEventClient.ts","../src/memory/MemoryInterface.ts","../src/did/DidClient.ts","../src/did/DidInterface.ts","../src/did/DidManager.ts","../src/utils/pattern.ts","../src/utils/schema.ts","../src/workflow/WorkflowReporter.ts","../src/mcp/MCPClient.ts","../src/mcp/MCPClientRegistry.ts","../src/mcp/MCPToolRegistrar.ts","../src/verification/LocalVerifier.ts","../src/agent/processLogs.ts","../src/agent/Agent.ts","../src/router/AgentRouter.ts","../src/ai/multimodal.ts","../src/ai/MultimodalResponse.ts","../src/harness/index.ts","../src/status/ExecutionStatus.ts","../src/approval/ApprovalClient.ts"],"names":["require","text","path","jsonSchema","isRecord","resolve","ClaudeCodeProvider","CodexProvider","GeminiProvider","OpenCodeProvider","record","crypto","parsed","call","response","generateText","axios","Buffer","res","tools","tool","runId","rootWorkflowId","fs","url"],"mappings":"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","file":"index.js","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { createRequire } from 'node:module';\n\nexport const OUTPUT_FILENAME = '.agentfield_output.json';\nexport const SCHEMA_FILENAME = '.agentfield_schema.json';\nexport const LARGE_SCHEMA_TOKEN_THRESHOLD = 4000;\n\ntype JsonSchemaRecord = Record<string, unknown>;\n\ntype JsonSchemaFactory = (schema: unknown) => JsonSchemaRecord;\n\ntype JsonSchemaModule = {\n zodToJsonSchema?: JsonSchemaFactory;\n default?: JsonSchemaFactory;\n};\n\ntype JsonSchemaProvider = {\n jsonSchema: () => JsonSchemaRecord;\n};\n\ntype ParseSchema = {\n parse: (value: unknown) => unknown;\n};\n\nlet zodConverter: JsonSchemaFactory | null | undefined;\n\nfunction getZodConverter(): JsonSchemaFactory | null {\n if (zodConverter !== undefined) {\n return zodConverter;\n }\n\n try {\n const require = createRequire(import.meta.url);\n const mod = require('zod-to-json-schema') as JsonSchemaModule;\n zodConverter = mod.zodToJsonSchema ?? mod.default ?? null;\n } catch {\n zodConverter = null;\n }\n\n return zodConverter;\n}\n\nfunction isRecord(value: unknown): value is JsonSchemaRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction hasJsonSchema(value: unknown): value is JsonSchemaProvider {\n return isRecord(value) && typeof value.jsonSchema === 'function';\n}\n\nfunction hasParse(value: unknown): value is ParseSchema {\n return isRecord(value) && typeof value.parse === 'function';\n}\n\nfunction estimateTokens(text: string): number {\n return Math.floor(text.length / 4);\n}\n\nfunction writeSchemaFile(schemaJson: string, cwd: string): string {\n const filePath = getSchemaPath(cwd);\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const fd = fs.openSync(filePath, 'w', 0o600);\n try {\n fs.writeFileSync(fd, schemaJson, 'utf8');\n } finally {\n fs.closeSync(fd);\n }\n return filePath;\n}\n\nfunction validateAgainstSchema(data: unknown, schema: unknown): unknown {\n if (hasParse(schema)) {\n return schema.parse(data);\n }\n return data;\n}\n\nexport function getOutputPath(cwd: string): string {\n return path.join(cwd, OUTPUT_FILENAME);\n}\n\nexport function getSchemaPath(cwd: string): string {\n return path.join(cwd, SCHEMA_FILENAME);\n}\n\nexport function schemaToJsonSchema(schema: unknown): JsonSchemaRecord {\n if (isRecord(schema)) {\n if ('type' in schema || 'properties' in schema || '$schema' in schema) {\n return schema;\n }\n if (hasJsonSchema(schema)) {\n return schema.jsonSchema();\n }\n }\n\n const converter = getZodConverter();\n if (converter !== null) {\n return converter(schema);\n }\n\n throw new TypeError('Unsupported schema type. Expected a Zod schema, JSON schema object, or jsonSchema() provider.');\n}\n\nexport function isLargeSchema(schemaJson: string): boolean {\n return estimateTokens(schemaJson) > LARGE_SCHEMA_TOKEN_THRESHOLD;\n}\n\nexport function buildPromptSuffix(schema: unknown, cwd: string): string {\n const jsonSchema = schemaToJsonSchema(schema);\n const schemaJson = JSON.stringify(jsonSchema, null, 2);\n const outputPath = getOutputPath(cwd);\n\n if (isLargeSchema(schemaJson)) {\n const schemaPath = writeSchemaFile(schemaJson, cwd);\n return (\n '\\n\\n---\\n' +\n 'OUTPUT REQUIREMENTS:\\n' +\n `Read the JSON Schema at: ${schemaPath}\\n` +\n `Write your final answer as valid JSON conforming to that schema to: ${outputPath}\\n` +\n 'Do not include any text outside the JSON in that file. Do not wrap in markdown fences.'\n );\n }\n\n return (\n '\\n\\n---\\n' +\n 'OUTPUT REQUIREMENTS:\\n' +\n `Write your final answer as valid JSON to the file: ${outputPath}\\n` +\n 'The JSON must conform to this schema:\\n' +\n `${schemaJson}\\n` +\n 'Do not include any text outside the JSON in that file. Do not wrap in markdown fences.'\n );\n}\n\nexport function cosmeticRepair(raw: string): string {\n let text = raw.trim();\n\n const fenceMatch = text.match(/^```(?:json)?\\s*\\n([\\s\\S]*?)```\\s*$/);\n if (fenceMatch) {\n text = fenceMatch[1].trim();\n }\n\n if (text.length > 0 && text[0] !== '{' && text[0] !== '[') {\n const firstJsonCharIndex = [...text].findIndex((char) => char === '{' || char === '[');\n if (firstJsonCharIndex >= 0) {\n text = text.slice(firstJsonCharIndex);\n }\n }\n\n text = text.replace(/,\\s*([}\\]])/g, '$1');\n\n const openBraces = (text.match(/{/g)?.length ?? 0) - (text.match(/}/g)?.length ?? 0);\n const openBrackets = (text.match(/\\[/g)?.length ?? 0) - (text.match(/\\]/g)?.length ?? 0);\n\n if (openBraces > 0 || openBrackets > 0) {\n text += ']'.repeat(openBrackets) + '}'.repeat(openBraces);\n }\n\n return text;\n}\n\nexport function readAndParse(filePath: string): unknown | null {\n try {\n const content = fs.readFileSync(filePath, 'utf8');\n if (content.trim().length === 0) {\n return null;\n }\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\nexport function readRepairAndParse(filePath: string): unknown | null {\n try {\n const content = fs.readFileSync(filePath, 'utf8');\n if (content.trim().length === 0) {\n return null;\n }\n return JSON.parse(cosmeticRepair(content));\n } catch {\n return null;\n }\n}\n\nexport function parseAndValidate(filePath: string, schema: unknown): unknown | null {\n const parsed = readAndParse(filePath);\n if (parsed !== null) {\n try {\n return validateAgainstSchema(parsed, schema);\n } catch {\n }\n }\n\n const repaired = readRepairAndParse(filePath);\n if (repaired !== null) {\n try {\n return validateAgainstSchema(repaired, schema);\n } catch {\n return null;\n }\n }\n\n return null;\n}\n\nexport function cleanupTempFiles(cwd: string): void {\n for (const filename of [OUTPUT_FILENAME, SCHEMA_FILENAME]) {\n try {\n fs.unlinkSync(path.join(cwd, filename));\n } catch {\n }\n }\n}\n\nexport function buildFollowupPrompt(errorMessage: string, cwd: string): string {\n const outputPath = getOutputPath(cwd);\n return (\n `The JSON at ${outputPath} failed validation: ${errorMessage}\\n` +\n 'Please rewrite the corrected, valid JSON to the same file.'\n );\n}\n","export interface HarnessConfig {\n provider: 'claude-code' | 'codex' | 'gemini' | 'opencode';\n model?: string;\n maxTurns?: number;\n maxBudgetUsd?: number;\n maxRetries?: number;\n initialDelay?: number;\n maxDelay?: number;\n backoffFactor?: number;\n tools?: string[];\n permissionMode?: string;\n systemPrompt?: string;\n env?: Record<string, string>;\n cwd?: string;\n codexBin?: string;\n geminiBin?: string;\n opencodeBin?: string;\n}\n\nexport interface HarnessOptions {\n provider?: string;\n model?: string;\n maxTurns?: number;\n maxBudgetUsd?: number;\n maxRetries?: number;\n initialDelay?: number;\n maxDelay?: number;\n backoffFactor?: number;\n tools?: string[];\n permissionMode?: string;\n systemPrompt?: string;\n env?: Record<string, string>;\n cwd?: string;\n codexBin?: string;\n geminiBin?: string;\n opencodeBin?: string;\n schema?: unknown;\n}\n\nexport interface Metrics {\n durationMs: number;\n durationApiMs: number;\n numTurns: number;\n totalCostUsd?: number;\n usage?: Record<string, unknown>;\n sessionId: string;\n}\n\nexport interface RawResult {\n result?: string;\n messages: Array<Record<string, unknown>>;\n metrics: Metrics;\n isError: boolean;\n errorMessage?: string;\n}\n\nexport interface HarnessResult {\n result?: string;\n parsed?: unknown;\n isError: boolean;\n errorMessage?: string;\n costUsd?: number;\n numTurns: number;\n durationMs: number;\n sessionId: string;\n messages: Array<Record<string, unknown>>;\n readonly text: string;\n}\n\nexport function createHarnessResult(partial?: Partial<Omit<HarnessResult, 'text'>>): HarnessResult {\n const r = {\n isError: false,\n numTurns: 0,\n durationMs: 0,\n sessionId: '',\n messages: [],\n ...partial,\n get text(): string {\n return this.result ?? '';\n },\n };\n return r;\n}\n\nexport function createMetrics(partial?: Partial<Metrics>): Metrics {\n return { durationMs: 0, durationApiMs: 0, numTurns: 0, sessionId: '', ...partial };\n}\n\nexport function createRawResult(partial?: Partial<RawResult>): RawResult {\n return { messages: [], metrics: createMetrics(), isError: false, ...partial };\n}\n","import type { HarnessProvider } from './base.js';\nimport type { RawResult } from '../types.js';\nimport { createMetrics, createRawResult } from '../types.js';\n\ntype QueryInput = {\n prompt: string;\n options: Record<string, unknown>;\n};\n\ntype ClaudeSdkModule = {\n query: (input: QueryInput) => AsyncIterable<unknown>;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction getString(record: Record<string, unknown>, key: string): string | undefined {\n const value = record[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction getNumber(record: Record<string, unknown>, key: string): number | undefined {\n const value = record[key];\n return typeof value === 'number' ? value : undefined;\n}\n\nexport class ClaudeCodeProvider implements HarnessProvider {\n public async execute(prompt: string, options: Record<string, unknown>): Promise<RawResult> {\n let sdk: ClaudeSdkModule;\n try {\n const mod = await import('@anthropic-ai/claude-agent-sdk');\n sdk = mod as ClaudeSdkModule;\n } catch {\n throw new Error(\n \"@anthropic-ai/claude-agent-sdk is required for the 'claude-code' provider. \" +\n 'Install it with: npm install @anthropic-ai/claude-agent-sdk'\n );\n }\n\n const agentOptions: Record<string, unknown> = {};\n if (options.model !== undefined) agentOptions.model = options.model;\n if (options.cwd !== undefined) agentOptions.cwd = options.cwd;\n if (options.maxTurns !== undefined) agentOptions.max_turns = options.maxTurns;\n if (options.tools !== undefined) agentOptions.allowed_tools = options.tools;\n if (options.systemPrompt !== undefined) agentOptions.system_prompt = options.systemPrompt;\n if (options.maxBudgetUsd !== undefined) agentOptions.max_budget_usd = options.maxBudgetUsd;\n if (options.permissionMode !== undefined) {\n const modeMap: Record<string, string> = { auto: 'bypassPermissions', plan: 'plan' };\n const raw = String(options.permissionMode);\n agentOptions.permission_mode = modeMap[raw] ?? raw;\n }\n if (options.env !== undefined) agentOptions.env = options.env;\n\n const messages: Array<Record<string, unknown>> = [];\n let resultText: string | undefined;\n let totalCost: number | undefined;\n let numTurns = 0;\n let sessionId = '';\n const startApi = Date.now();\n\n try {\n for await (const msg of sdk.query({ prompt, options: agentOptions })) {\n const msgObj = isRecord(msg) ? msg : { raw: String(msg) };\n messages.push(msgObj);\n\n const msgType = getString(msgObj, 'type') ?? '';\n if (msgType === 'result') {\n const resultValue = msgObj.result ?? msgObj.text;\n resultText = typeof resultValue === 'string' ? resultValue : resultValue == null ? '' : String(resultValue);\n\n const sid = getString(msgObj, 'session_id');\n if (sid !== undefined) {\n sessionId = sid;\n }\n\n const costUsd = getNumber(msgObj, 'cost_usd');\n const totalCostUsd = getNumber(msgObj, 'total_cost_usd');\n if (costUsd !== undefined) {\n totalCost = costUsd;\n } else if (totalCostUsd !== undefined) {\n totalCost = totalCostUsd;\n }\n\n const turns = getNumber(msgObj, 'num_turns');\n numTurns = turns === undefined ? messages.length : Math.trunc(turns);\n } else if (msgType === 'assistant' && resultText === undefined) {\n let content: unknown = msgObj.content;\n if (content === undefined && isRecord(msgObj.message)) {\n content = msgObj.message.content;\n }\n\n if (typeof content === 'string') {\n resultText = content;\n } else if (Array.isArray(content)) {\n for (const block of content) {\n if (isRecord(block) && block.type === 'text' && typeof block.text === 'string') {\n resultText = block.text;\n }\n }\n }\n }\n }\n\n return createRawResult({\n result: resultText,\n messages,\n metrics: createMetrics({\n durationApiMs: Date.now() - startApi,\n numTurns,\n totalCostUsd: totalCost,\n sessionId,\n }),\n isError: false,\n });\n } catch (error: unknown) {\n return createRawResult({\n result: undefined,\n messages,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi, sessionId }),\n isError: true,\n errorMessage: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n","import { spawn } from 'node:child_process';\n\nexport interface CliResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\nexport function runCli(\n cmd: string[],\n options?: { env?: Record<string, string>; cwd?: string; timeout?: number }\n): Promise<CliResult> {\n return new Promise((resolve, reject) => {\n const [bin, ...args] = cmd;\n const proc = spawn(bin, args, {\n env: { ...process.env, ...options?.env },\n cwd: options?.cwd,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout.on('data', (data: Uint8Array | string) => {\n stdout += data.toString();\n });\n proc.stderr.on('data', (data: Uint8Array | string) => {\n stderr += data.toString();\n });\n\n const timer = options?.timeout\n ? setTimeout(() => {\n proc.kill();\n reject(new Error(`CLI timed out after ${options.timeout}ms`));\n }, options.timeout)\n : undefined;\n\n proc.on('close', (code) => {\n if (timer) {\n clearTimeout(timer);\n }\n resolve({ stdout, stderr, exitCode: code ?? 0 });\n });\n\n proc.on('error', (err) => {\n if (timer) {\n clearTimeout(timer);\n }\n reject(err);\n });\n });\n}\n\nexport function parseJsonl(text: string): Array<Record<string, unknown>> {\n const events: Array<Record<string, unknown>> = [];\n for (const line of text.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n try {\n events.push(JSON.parse(trimmed) as Record<string, unknown>);\n } catch {\n continue;\n }\n }\n return events;\n}\n\nexport function extractFinalText(events: Array<Record<string, unknown>>): string | undefined {\n let result: string | undefined;\n for (const event of events) {\n const type = event.type;\n if (type === 'item.completed') {\n const item = event.item;\n if (typeof item === 'object' && item !== null) {\n const itemType = (item as Record<string, unknown>).type;\n const itemText = (item as Record<string, unknown>).text;\n if (itemType === 'agent_message' && typeof itemText === 'string') {\n result = itemText;\n }\n }\n } else if (type === 'result') {\n const candidate = event.result ?? event.text;\n if (typeof candidate === 'string') {\n result = candidate;\n }\n } else if (type === 'turn.completed' && typeof event.text === 'string') {\n result = event.text;\n } else if ((type === 'message' || type === 'assistant') && typeof event.content === 'string') {\n result = event.content;\n }\n }\n return result;\n}\n","import type { HarnessProvider } from './base.js';\nimport type { RawResult } from '../types.js';\nimport { createRawResult, createMetrics } from '../types.js';\nimport { runCli, parseJsonl, extractFinalText } from '../cli.js';\n\nexport class CodexProvider implements HarnessProvider {\n private readonly bin: string;\n\n constructor(binPath = 'codex') {\n this.bin = binPath;\n }\n\n async execute(prompt: string, options: Record<string, unknown>): Promise<RawResult> {\n const cmd = [this.bin, 'exec', '--json'];\n\n if (options.cwd) {\n cmd.push('-C', String(options.cwd));\n }\n if (options.permissionMode === 'auto') {\n cmd.push('--full-auto');\n }\n cmd.push(prompt);\n\n const startApi = Date.now();\n try {\n const { stdout, stderr, exitCode } = await runCli(cmd, {\n env: options.env as Record<string, string> | undefined,\n cwd: options.cwd as string | undefined,\n });\n\n const events = parseJsonl(stdout);\n const resultText = extractFinalText(events);\n\n let numTurns = 0;\n let sessionId = '';\n for (const event of events) {\n if (event.type === 'turn.completed') {\n numTurns += 1;\n }\n if (event.type === 'thread.started') {\n const threadId = event.thread_id;\n if (typeof threadId === 'string') {\n sessionId = threadId;\n }\n }\n }\n\n const isError = exitCode !== 0 && !resultText;\n\n return createRawResult({\n result: resultText,\n messages: events,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi, numTurns, sessionId }),\n isError,\n errorMessage: isError ? stderr.trim() : undefined,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('ENOENT')) {\n return createRawResult({\n isError: true,\n errorMessage: `Codex binary not found at '${this.bin}'. Install: https://github.com/openai/codex`,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n return createRawResult({\n isError: true,\n errorMessage: msg,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n }\n}\n","import type { HarnessProvider } from './base.js';\nimport type { RawResult } from '../types.js';\nimport { createRawResult, createMetrics } from '../types.js';\nimport { runCli } from '../cli.js';\n\nexport class GeminiProvider implements HarnessProvider {\n private readonly bin: string;\n\n constructor(binPath = 'gemini') {\n this.bin = binPath;\n }\n\n async execute(prompt: string, options: Record<string, unknown>): Promise<RawResult> {\n const cmd = [this.bin];\n\n if (options.cwd) {\n cmd.push('-C', String(options.cwd));\n }\n if (options.permissionMode === 'auto') {\n cmd.push('--sandbox');\n }\n if (options.model) {\n cmd.push('-m', String(options.model));\n }\n cmd.push('-p', prompt);\n\n const startApi = Date.now();\n try {\n const { stdout, stderr, exitCode } = await runCli(cmd, {\n env: options.env as Record<string, string> | undefined,\n cwd: options.cwd as string | undefined,\n });\n\n const resultText = stdout.trim() || undefined;\n const isError = exitCode !== 0 && !resultText;\n\n return createRawResult({\n result: resultText,\n messages: [],\n metrics: createMetrics({\n durationApiMs: Date.now() - startApi,\n numTurns: resultText ? 1 : 0,\n sessionId: '',\n }),\n isError,\n errorMessage: isError ? stderr.trim() : undefined,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('ENOENT')) {\n return createRawResult({\n isError: true,\n errorMessage: `Gemini binary not found at '${this.bin}'. Install: https://github.com/google-gemini/gemini-cli`,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n return createRawResult({\n isError: true,\n errorMessage: msg,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n }\n}\n","import type { HarnessProvider } from './base.js';\nimport type { RawResult } from '../types.js';\nimport { createRawResult, createMetrics } from '../types.js';\nimport { runCli } from '../cli.js';\n\nexport class OpenCodeProvider implements HarnessProvider {\n private readonly bin: string;\n\n constructor(binPath = 'opencode') {\n this.bin = binPath;\n }\n\n async execute(prompt: string, options: Record<string, unknown>): Promise<RawResult> {\n const cmd = [this.bin];\n\n // Use -c for cwd (project directory)\n if (options.cwd && typeof options.cwd === 'string') {\n cmd.push('-c', options.cwd);\n } else if (options.project_dir && typeof options.project_dir === 'string') {\n cmd.push('-c', options.project_dir);\n }\n\n // Model is set via environment variable, not CLI flag\n const env: Record<string, string> = { ...(options.env as Record<string, string>) };\n if (options.model) {\n env['MODEL'] = String(options.model);\n }\n\n // Handle system prompt - prepend to user prompt since OpenCode\n // has no native --system-prompt flag\n let effectivePrompt = prompt;\n if (options.system_prompt && typeof options.system_prompt === 'string' && options.system_prompt.trim()) {\n effectivePrompt = `SYSTEM INSTRUCTIONS:\\n${options.system_prompt.trim()}\\n\\n---\\n\\nUSER REQUEST:\\n${prompt}`;\n }\n\n // Use -p for single prompt mode (non-interactive)\n cmd.push('-p', effectivePrompt);\n\n const startApi = Date.now();\n try {\n const { stdout, stderr, exitCode } = await runCli(cmd, { env });\n\n const resultText = stdout.trim() || undefined;\n const isError = exitCode !== 0 && !resultText;\n\n return createRawResult({\n result: resultText,\n messages: [],\n metrics: createMetrics({\n durationApiMs: Date.now() - startApi,\n numTurns: resultText ? 1 : 0,\n sessionId: '',\n }),\n isError,\n errorMessage: isError ? stderr.trim() : undefined,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('ENOENT')) {\n return createRawResult({\n isError: true,\n errorMessage: `OpenCode binary not found at '${this.bin}'. Install: https://github.com/opencode-ai/opencode`,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n return createRawResult({\n isError: true,\n errorMessage: msg,\n metrics: createMetrics({ durationApiMs: Date.now() - startApi }),\n });\n }\n }\n}\n","import type { HarnessProvider } from './base.js';\nimport type { HarnessConfig } from '../types.js';\n\nexport const SUPPORTED_PROVIDERS = new Set(['claude-code', 'codex', 'gemini', 'opencode']);\n\nexport async function buildProvider(config: HarnessConfig): Promise<HarnessProvider> {\n if (!SUPPORTED_PROVIDERS.has(config.provider)) {\n throw new Error(\n `Unknown harness provider: \"${config.provider}\". Supported: ${[...SUPPORTED_PROVIDERS].sort().join(', ')}`\n );\n }\n if (config.provider === 'claude-code') {\n const { ClaudeCodeProvider } = await import('./claude.js');\n return new ClaudeCodeProvider();\n }\n if (config.provider === 'codex') {\n const { CodexProvider } = await import('./codex.js');\n return new CodexProvider(config.codexBin ?? 'codex');\n }\n if (config.provider === 'gemini') {\n const { GeminiProvider } = await import('./gemini.js');\n return new GeminiProvider(config.geminiBin ?? 'gemini');\n }\n if (config.provider === 'opencode') {\n const { OpenCodeProvider } = await import('./opencode.js');\n return new OpenCodeProvider(config.opencodeBin ?? 'opencode');\n }\n throw new Error(`Provider \"${config.provider}\" is not yet implemented.`);\n}\n","import { buildPromptSuffix, cleanupTempFiles, getOutputPath, parseAndValidate } from './schema.js';\nimport { buildProvider } from './providers/factory.js';\nimport type { HarnessProvider } from './providers/base.js';\nimport { createHarnessResult, createRawResult, type HarnessConfig, type HarnessOptions, type RawResult } from './types.js';\n\nconst TRANSIENT_PATTERNS = [\n 'rate limit',\n 'rate_limit',\n 'overloaded',\n 'timeout',\n 'timed out',\n 'connection reset',\n 'connection refused',\n 'temporarily unavailable',\n 'service unavailable',\n '503',\n '502',\n '504',\n 'internal server error',\n '500',\n];\n\ntype RunnerOptions = Omit<HarnessOptions, 'schema'> & {\n maxRetries?: number;\n initialDelay?: number;\n maxDelay?: number;\n backoffFactor?: number;\n codexBin?: string;\n geminiBin?: string;\n opencodeBin?: string;\n};\n\nexport class HarnessRunner {\n public constructor(private readonly config?: HarnessConfig) {}\n\n public async run(prompt: string, options: HarnessOptions = {}) {\n const { schema, ...rest } = options;\n const resolved = this.resolveOptions(this.config, rest);\n\n if (!resolved.provider) {\n throw new Error(\"No harness provider specified. Set 'provider' in HarnessConfig or pass it to .harness() call.\");\n }\n\n const cwd = resolved.cwd ?? '.';\n const provider = await this.buildProvider(resolved.provider, resolved);\n const effectivePrompt = schema === undefined ? prompt : `${prompt}${buildPromptSuffix(schema, cwd)}`;\n const startTime = Date.now();\n\n try {\n const raw = await this.executeWithRetry(provider, effectivePrompt, resolved);\n\n if (schema !== undefined) {\n return this.handleSchemaOutput(raw, schema, cwd, startTime);\n }\n\n return createHarnessResult({\n result: raw.result,\n isError: raw.isError,\n errorMessage: raw.errorMessage,\n costUsd: raw.metrics.totalCostUsd,\n numTurns: raw.metrics.numTurns,\n durationMs: Date.now() - startTime,\n sessionId: raw.metrics.sessionId,\n messages: raw.messages,\n });\n } finally {\n if (schema !== undefined) {\n cleanupTempFiles(cwd);\n }\n }\n }\n\n public resolveOptions(config: Partial<HarnessConfig> | undefined, overrides: RunnerOptions): RunnerOptions {\n const out: RunnerOptions = {};\n if (config) {\n for (const key of [\n 'provider',\n 'model',\n 'maxTurns',\n 'maxBudgetUsd',\n 'maxRetries',\n 'initialDelay',\n 'maxDelay',\n 'backoffFactor',\n 'tools',\n 'permissionMode',\n 'systemPrompt',\n 'env',\n 'cwd',\n 'codexBin',\n 'geminiBin',\n 'opencodeBin',\n ] as const) {\n const value = config[key];\n if (value !== undefined && value !== null) {\n (out as Record<string, unknown>)[key] = value;\n }\n }\n }\n\n for (const [key, value] of Object.entries(overrides)) {\n if (value !== undefined && value !== null) {\n out[key as keyof RunnerOptions] = value as never;\n }\n }\n\n return out;\n }\n\n public isTransient(errorStr: string): boolean {\n const lower = errorStr.toLowerCase();\n return TRANSIENT_PATTERNS.some((pattern) => lower.includes(pattern));\n }\n\n public async executeWithRetry(provider: HarnessProvider, prompt: string, options: RunnerOptions): Promise<RawResult> {\n const maxRetries = options.maxRetries ?? 3;\n const initialDelay = options.initialDelay ?? 1.0;\n const maxDelay = options.maxDelay ?? 30.0;\n const backoffFactor = options.backoffFactor ?? 2.0;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt += 1) {\n try {\n const result = await provider.execute(prompt, options as Record<string, unknown>);\n if (!result.isError) {\n return result;\n }\n\n const message = result.errorMessage ?? '';\n if (this.isTransient(message) && attempt < maxRetries) {\n const delay = this.computeBackoffDelay(initialDelay, backoffFactor, maxDelay, attempt);\n await this.sleep(delay);\n continue;\n }\n return result;\n } catch (error: unknown) {\n lastError = error;\n const message = error instanceof Error ? error.message : String(error);\n if (this.isTransient(message) && attempt < maxRetries) {\n const delay = this.computeBackoffDelay(initialDelay, backoffFactor, maxDelay, attempt);\n await this.sleep(delay);\n continue;\n }\n throw error;\n }\n }\n\n if (lastError !== undefined) {\n throw lastError;\n }\n return createRawResult({ isError: true, errorMessage: 'Max retries exceeded' });\n }\n\n public handleSchemaOutput(raw: RawResult, schema: unknown, cwd: string, startTime: number) {\n const outputPath = getOutputPath(cwd);\n const parsed = parseAndValidate(outputPath, schema);\n\n if (parsed !== null) {\n return createHarnessResult({\n result: raw.result,\n parsed,\n isError: false,\n costUsd: raw.metrics.totalCostUsd,\n numTurns: raw.metrics.numTurns,\n durationMs: Date.now() - startTime,\n sessionId: raw.metrics.sessionId,\n messages: raw.messages,\n });\n }\n\n return createHarnessResult({\n result: raw.result,\n isError: true,\n errorMessage: 'Schema validation failed after parse and cosmetic repair attempts.',\n costUsd: raw.metrics.totalCostUsd,\n numTurns: raw.metrics.numTurns,\n durationMs: Date.now() - startTime,\n sessionId: raw.metrics.sessionId,\n messages: raw.messages,\n });\n }\n\n private async buildProvider(providerName: string, options: RunnerOptions): Promise<HarnessProvider> {\n const { provider: _, ...rest } = options;\n return buildProvider({ provider: providerName as HarnessConfig['provider'], ...rest });\n }\n\n private computeBackoffDelay(\n initialDelay: number,\n backoffFactor: number,\n maxDelay: number,\n attempt: number\n ): number {\n const base = Math.min(initialDelay * backoffFactor ** attempt, maxDelay);\n const jitter = (Math.random() * (base * 0.5)) - (base * 0.25);\n return base + jitter;\n }\n\n private sleep(delaySeconds: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, Math.max(0, delaySeconds) * 1000);\n });\n }\n}\n","import type { AgentRouter } from '../router/AgentRouter.js';\nimport type { ReasonerDefinition, ReasonerHandler, ReasonerOptions } from '../types/reasoner.js';\n\nexport class ReasonerRegistry {\n private readonly reasoners = new Map<string, ReasonerDefinition>();\n\n register<TInput = any, TOutput = any>(\n name: string,\n handler: ReasonerHandler<TInput, TOutput>,\n options?: ReasonerOptions\n ) {\n this.reasoners.set(name, { name, handler, options });\n }\n\n includeRouter(router: AgentRouter) {\n router.reasoners.forEach((reasoner) => {\n this.reasoners.set(reasoner.name, reasoner);\n });\n }\n\n get(name: string) {\n return this.reasoners.get(name);\n }\n\n all() {\n return Array.from(this.reasoners.values());\n }\n}\n","import type { AgentRouter } from '../router/AgentRouter.js';\nimport type { SkillDefinition, SkillHandler, SkillOptions } from '../types/skill.js';\n\nexport class SkillRegistry {\n private readonly skills = new Map<string, SkillDefinition>();\n\n register<TInput = any, TOutput = any>(\n name: string,\n handler: SkillHandler<TInput, TOutput>,\n options?: SkillOptions\n ) {\n this.skills.set(name, { name, handler, options });\n }\n\n includeRouter(router: AgentRouter) {\n router.skills.forEach((skill) => {\n this.skills.set(skill.name, skill);\n });\n }\n\n get(name: string) {\n return this.skills.get(name);\n }\n\n all() {\n return Array.from(this.skills.values());\n }\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport type express from 'express';\nimport type { Agent } from '../agent/Agent.js';\nimport type { ExecutionLogger } from '../observability/ExecutionLogger.js';\n\nexport interface ExecutionMetadata {\n executionId: string;\n runId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n}\n\nconst store = new AsyncLocalStorage<ExecutionContext>();\n\nexport class ExecutionContext {\n readonly input: any;\n readonly metadata: ExecutionMetadata;\n readonly req: express.Request;\n readonly res: express.Response;\n readonly agent: Agent;\n\n constructor(params: {\n input: any;\n metadata: ExecutionMetadata;\n req: express.Request;\n res: express.Response;\n agent: Agent;\n }) {\n this.input = params.input;\n this.metadata = params.metadata;\n this.req = params.req;\n this.res = params.res;\n this.agent = params.agent;\n }\n\n get logger(): ExecutionLogger {\n return this.agent.getExecutionLogger();\n }\n\n static run<T>(ctx: ExecutionContext, fn: () => T): T {\n return store.run(ctx, fn);\n }\n\n static getCurrent(): ExecutionContext | undefined {\n return store.getStore();\n }\n}\n","/**\n * Tool calling support for AgentField agents.\n *\n * Converts discovered capabilities into Vercel AI SDK tool definitions and provides\n * an automatic tool-call execution loop that dispatches calls via agent.call().\n */\n\nimport { generateText, tool, jsonSchema, stepCountIs } from 'ai';\nimport type { ToolSet } from 'ai';\nimport type {\n AgentCapability,\n ReasonerCapability,\n SkillCapability,\n DiscoveryOptions,\n DiscoveryResult\n} from '../types/agent.js';\nimport type { Agent } from '../agent/Agent.js';\nimport type { AIRequestOptions } from './AIClient.js';\n\n// ---------------------------------------------------------------------------\n// Configuration\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallConfig {\n /** Maximum number of LLM turns in the tool-call loop (default: 10). */\n maxTurns?: number;\n /** Maximum total tool calls allowed (default: 25). */\n maxToolCalls?: number;\n /** Maximum candidate tools to present to the LLM. */\n maxCandidateTools?: number;\n /** Maximum tools to hydrate with full schemas (lazy mode). */\n maxHydratedTools?: number;\n /** Schema hydration mode: \"eager\" includes full schemas, \"lazy\" sends metadata first. */\n schemaHydration?: 'eager' | 'lazy';\n /** Whether to broaden discovery if no tools match (default: false). */\n fallbackBroadening?: boolean;\n /** Filter by tags during discovery. */\n tags?: string[];\n /** Filter by agent IDs during discovery. */\n agentIds?: string[];\n /** Filter by health status (default: \"healthy\"). */\n healthStatus?: string;\n}\n\nconst DEFAULT_MAX_TURNS = 10;\nconst DEFAULT_MAX_TOOL_CALLS = 25;\nconst DEFAULT_HEALTH_STATUS = undefined;\n\n// ---------------------------------------------------------------------------\n// Observability\n// ---------------------------------------------------------------------------\n\nexport interface ToolCallRecord {\n toolName: string;\n arguments: Record<string, any>;\n result?: any;\n error?: string;\n latencyMs: number;\n turn: number;\n}\n\nexport interface ToolCallTrace {\n calls: ToolCallRecord[];\n totalTurns: number;\n totalToolCalls: number;\n finalResponse?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Tool options for ctx.ai()\n// ---------------------------------------------------------------------------\n\n/**\n * Options for tool-calling in ctx.ai().\n *\n * Accepts multiple forms:\n * - \"discover\": auto-discover all tools from control plane\n * - ToolCallConfig: discover with filtering/progressive options\n * - DiscoveryResult: use pre-fetched discovery results\n * - AgentCapability[]: convert capability list directly\n * - ToolSet: raw Vercel AI SDK tool map\n */\nexport type ToolsOption =\n | 'discover'\n | ToolCallConfig\n | DiscoveryResult\n | AgentCapability[]\n | (ReasonerCapability | SkillCapability)[]\n | ToolSet;\n\nexport interface AIToolRequestOptions extends AIRequestOptions {\n /** Tool definitions for LLM tool calling. */\n tools?: ToolsOption;\n /** Maximum LLM turns in the tool-call loop. */\n maxTurns?: number;\n /** Maximum total tool calls allowed. */\n maxToolCalls?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Capability -> Tool Definition Conversion\n// ---------------------------------------------------------------------------\n\n/**\n * Convert discovery invocation_target format to agent.call() target format.\n *\n * Discovery returns colon-separated targets:\n * - \"node_id:skill:function_name\" for skills\n * - \"node_id:function_name\" for reasoners\n *\n * agent.call() expects dot-separated: \"node_id.function_name\"\n */\nfunction invocationTargetToCallTarget(invocationTarget: string): string {\n if (invocationTarget.includes(':skill:')) {\n const parts = invocationTarget.split(':skill:');\n return `${parts[0]}.${parts[1]}`;\n }\n if (invocationTarget.includes(':')) {\n const idx = invocationTarget.indexOf(':');\n return `${invocationTarget.substring(0, idx)}.${invocationTarget.substring(idx + 1)}`;\n }\n return invocationTarget;\n}\n\nfunction makeExecute(agent: Agent, invocationTarget: string) {\n const callTarget = invocationTargetToCallTarget(invocationTarget);\n return async (args: any) => agent.call(callTarget, args);\n}\n\n/**\n * Convert an invocation_target to an LLM-safe function name.\n * Many providers (e.g., Google) only allow alphanumeric, underscores, dashes, and dots.\n * Colons are replaced with double-underscores for a reversible mapping.\n */\nfunction sanitizeToolName(invocationTarget: string): string {\n return invocationTarget.replace(/:/g, '__');\n}\n\nfunction unsanitizeToolName(sanitizedName: string): string {\n return sanitizedName.replace(/__/g, ':');\n}\n\n/**\n * Convert a single ReasonerCapability or SkillCapability to a Vercel AI SDK tool.\n */\nexport function capabilityToTool(\n cap: ReasonerCapability | SkillCapability,\n agent: Agent\n): ToolSet[string] {\n const rawSchema = cap.inputSchema ?? { type: 'object', properties: {} };\n const schema = rawSchema.type ? rawSchema : { type: 'object', properties: rawSchema };\n\n return tool({\n description: cap.description ?? `Call ${cap.invocationTarget}`,\n inputSchema: jsonSchema(schema),\n execute: makeExecute(agent, cap.invocationTarget)\n });\n}\n\n/**\n * Convert a single capability to a metadata-only tool (no full schema).\n * Used for progressive/lazy discovery.\n */\nexport function capabilityToMetadataTool(\n cap: ReasonerCapability | SkillCapability,\n agent: Agent\n): ToolSet[string] {\n return tool({\n description: cap.description ?? `Call ${cap.invocationTarget}`,\n inputSchema: jsonSchema({ type: 'object', properties: {} }),\n execute: makeExecute(agent, cap.invocationTarget)\n });\n}\n\n/**\n * Convert a list of capabilities into a Vercel AI SDK tool map.\n */\nexport function capabilitiesToTools(\n capabilities: (AgentCapability | ReasonerCapability | SkillCapability)[],\n agent: Agent,\n metadataOnly = false\n): ToolSet {\n const tools: ToolSet = {};\n const convert = metadataOnly ? capabilityToMetadataTool : capabilityToTool;\n\n for (const cap of capabilities) {\n if ('reasoners' in cap && 'skills' in cap) {\n const agentCap = cap as AgentCapability;\n for (const r of agentCap.reasoners) {\n tools[sanitizeToolName(r.invocationTarget)] = convert(r, agent);\n }\n for (const s of agentCap.skills) {\n tools[sanitizeToolName(s.invocationTarget)] = convert(s, agent);\n }\n } else {\n const c = cap as ReasonerCapability | SkillCapability;\n tools[sanitizeToolName(c.invocationTarget)] = convert(c, agent);\n }\n }\n\n return tools;\n}\n\n// ---------------------------------------------------------------------------\n// Discovery helpers\n// ---------------------------------------------------------------------------\n\nfunction limitToolSet(tools: ToolSet, max: number): ToolSet {\n const entries = Object.entries(tools);\n if (entries.length <= max) return tools;\n const limited: ToolSet = {};\n for (let i = 0; i < max; i++) {\n limited[entries[i][0]] = entries[i][1];\n }\n return limited;\n}\n\nasync function discoverTools(\n agent: Agent,\n config: ToolCallConfig,\n hydrateSchemas = true\n): Promise<{ tools: ToolSet; capabilities: AgentCapability[] }> {\n const discoveryOpts: DiscoveryOptions = {\n tags: config.tags,\n agentIds: config.agentIds,\n includeInputSchema: hydrateSchemas,\n includeOutputSchema: false,\n includeDescriptions: true,\n healthStatus: config.healthStatus ?? DEFAULT_HEALTH_STATUS\n };\n\n const result = await agent.discover(discoveryOpts);\n if (!result.json) return { tools: {}, capabilities: [] };\n\n const caps = result.json.capabilities;\n let tools = capabilitiesToTools(caps, agent, !hydrateSchemas);\n\n if (config.maxCandidateTools) {\n tools = limitToolSet(tools, config.maxCandidateTools);\n }\n\n return { tools, capabilities: caps };\n}\n\nasync function hydrateSelectedTools(\n agent: Agent,\n config: ToolCallConfig,\n selectedNames: string[]\n): Promise<ToolSet> {\n const discoveryOpts: DiscoveryOptions = {\n tags: config.tags,\n agentIds: config.agentIds,\n includeInputSchema: true,\n includeOutputSchema: false,\n includeDescriptions: true,\n healthStatus: config.healthStatus ?? DEFAULT_HEALTH_STATUS\n };\n\n const result = await agent.discover(discoveryOpts);\n if (!result.json) return {};\n\n // selectedNames are sanitized (from LLM), unsanitize for matching\n const selectedSet = new Set(selectedNames.map(unsanitizeToolName));\n const tools: ToolSet = {};\n\n for (const cap of result.json.capabilities) {\n for (const r of cap.reasoners) {\n if (selectedSet.has(r.invocationTarget)) {\n tools[sanitizeToolName(r.invocationTarget)] = capabilityToTool(r, agent);\n }\n }\n for (const s of cap.skills) {\n if (selectedSet.has(s.invocationTarget)) {\n tools[sanitizeToolName(s.invocationTarget)] = capabilityToTool(s, agent);\n }\n }\n }\n\n if (config.maxHydratedTools) {\n return limitToolSet(tools, config.maxHydratedTools);\n }\n\n return tools;\n}\n\n// ---------------------------------------------------------------------------\n// Build tool config from various input forms\n// ---------------------------------------------------------------------------\n\nfunction isToolCallConfig(obj: any): obj is ToolCallConfig {\n const keys = ['maxTurns', 'maxToolCalls', 'tags', 'schemaHydration', 'agentIds',\n 'healthStatus', 'fallbackBroadening', 'maxCandidateTools', 'maxHydratedTools'];\n return typeof obj === 'object' && !Array.isArray(obj) && keys.some(k => k in obj);\n}\n\nfunction isDiscoveryResult(obj: any): obj is DiscoveryResult {\n return typeof obj === 'object' && !Array.isArray(obj) && 'raw' in obj && 'format' in obj;\n}\n\nexport async function buildToolConfig(\n toolsParam: ToolsOption,\n agent: Agent\n): Promise<{\n tools: ToolSet;\n config: ToolCallConfig;\n needsLazyHydration: boolean;\n}> {\n const baseConfig: ToolCallConfig = {\n maxTurns: DEFAULT_MAX_TURNS,\n maxToolCalls: DEFAULT_MAX_TOOL_CALLS,\n schemaHydration: 'eager',\n fallbackBroadening: false,\n healthStatus: DEFAULT_HEALTH_STATUS\n };\n\n // \"discover\" - simple auto-discovery\n if (toolsParam === 'discover') {\n const { tools } = await discoverTools(agent, baseConfig);\n return { tools, config: baseConfig, needsLazyHydration: false };\n }\n\n // ToolCallConfig object\n if (isToolCallConfig(toolsParam)) {\n const config = { ...baseConfig, ...toolsParam };\n const isLazy = config.schemaHydration === 'lazy';\n const { tools } = await discoverTools(agent, config, !isLazy);\n return { tools, config, needsLazyHydration: isLazy };\n }\n\n // DiscoveryResult\n if (isDiscoveryResult(toolsParam)) {\n if (toolsParam.json) {\n const tools = capabilitiesToTools(toolsParam.json.capabilities, agent);\n return { tools, config: baseConfig, needsLazyHydration: false };\n }\n return { tools: {}, config: baseConfig, needsLazyHydration: false };\n }\n\n // Array of capabilities\n if (Array.isArray(toolsParam)) {\n const tools = capabilitiesToTools(toolsParam, agent);\n return { tools, config: baseConfig, needsLazyHydration: false };\n }\n\n // Raw ToolSet map - pass through directly\n if (typeof toolsParam === 'object') {\n return { tools: toolsParam as ToolSet, config: baseConfig, needsLazyHydration: false };\n }\n\n throw new Error(\n `Invalid tools parameter: expected \"discover\", ToolCallConfig, DiscoveryResult, ` +\n `capability array, or tool map, got ${typeof toolsParam}`\n );\n}\n\n// ---------------------------------------------------------------------------\n// Tool-call execution loop\n// ---------------------------------------------------------------------------\n\nfunction wrapToolsWithObservability(\n toolMap: ToolSet,\n agent: Agent,\n trace: ToolCallTrace,\n maxToolCalls: number,\n getCurrentTurn: () => number\n): { tools: ToolSet; getTotalCalls: () => number } {\n let totalCalls = 0;\n const observableTools: ToolSet = {};\n\n for (const [name, t] of Object.entries(toolMap)) {\n const originalTool = t as any;\n observableTools[name] = tool({\n description: originalTool.description ?? '',\n inputSchema: originalTool.inputSchema,\n execute: async (args: any) => {\n totalCalls++;\n trace.totalToolCalls = totalCalls;\n\n if (totalCalls > maxToolCalls) {\n const record: ToolCallRecord = {\n toolName: name,\n arguments: args,\n error: 'Tool call limit reached',\n latencyMs: 0,\n turn: getCurrentTurn()\n };\n trace.calls.push(record);\n return { error: 'Tool call limit reached. Please provide a final response.' };\n }\n\n const record: ToolCallRecord = {\n toolName: name,\n arguments: args,\n latencyMs: 0,\n turn: getCurrentTurn()\n };\n\n const invocationTarget = unsanitizeToolName(name);\n const callTarget = invocationTargetToCallTarget(invocationTarget);\n const start = Date.now();\n try {\n const result = await agent.call(callTarget, args);\n record.result = result;\n record.latencyMs = Date.now() - start;\n trace.calls.push(record);\n return result;\n } catch (err: any) {\n record.error = err.message ?? String(err);\n record.latencyMs = Date.now() - start;\n trace.calls.push(record);\n return { error: record.error, tool: name };\n }\n }\n });\n }\n\n return { tools: observableTools, getTotalCalls: () => totalCalls };\n}\n\nexport async function executeToolCallLoop(\n agent: Agent,\n prompt: string,\n toolMap: ToolSet,\n config: ToolCallConfig,\n needsLazyHydration: boolean,\n buildModel: () => any,\n options: AIRequestOptions = {}\n): Promise<{ text: string; trace: ToolCallTrace }> {\n const maxTurns = config.maxTurns ?? DEFAULT_MAX_TURNS;\n const maxToolCalls = config.maxToolCalls ?? DEFAULT_MAX_TOOL_CALLS;\n\n const trace: ToolCallTrace = {\n calls: [],\n totalTurns: 0,\n totalToolCalls: 0\n };\n\n let activeTools = toolMap;\n\n // Lazy hydration: first do a selection pass with non-executable tools to see\n // which tools the LLM picks, then hydrate full schemas for those tools.\n if (needsLazyHydration) {\n // Create non-executable tool stubs so the LLM selects but doesn't execute\n const selectionTools: ToolSet = {};\n for (const [name, t] of Object.entries(toolMap)) {\n const orig = t as any;\n selectionTools[name] = tool({\n description: orig.description ?? '',\n inputSchema: orig.inputSchema,\n // No execute — AI SDK will stop after LLM selects tools\n });\n }\n\n const selectionResult = await generateText({\n model: buildModel(),\n prompt,\n system: options.system,\n temperature: options.temperature,\n maxOutputTokens: options.maxTokens,\n tools: selectionTools,\n stopWhen: stepCountIs(1) // Stop after LLM's first response (tool selection)\n });\n\n // Extract which tools the LLM tried to call\n const selectedNames = new Set<string>();\n for (const step of selectionResult.steps) {\n for (const tc of step.toolCalls) {\n selectedNames.add(tc.toolName);\n }\n }\n\n if (selectedNames.size > 0) {\n // Hydrate full schemas for selected tools\n const hydratedTools = await hydrateSelectedTools(\n agent, config, Array.from(selectedNames)\n );\n if (Object.keys(hydratedTools).length > 0) {\n activeTools = hydratedTools;\n }\n } else {\n // LLM didn't select any tools in the selection pass — just return text\n trace.totalTurns = selectionResult.steps.length;\n trace.finalResponse = selectionResult.text;\n return { text: selectionResult.text, trace };\n }\n }\n\n let currentTurn = 0;\n const { tools: observableTools } = wrapToolsWithObservability(\n activeTools, agent, trace, maxToolCalls, () => currentTurn\n );\n\n const model = buildModel();\n const result = await generateText({\n model,\n prompt,\n system: options.system,\n temperature: options.temperature,\n maxOutputTokens: options.maxTokens,\n tools: observableTools,\n stopWhen: stepCountIs(maxTurns),\n onStepFinish: () => {\n currentTurn++;\n trace.totalTurns = currentTurn;\n }\n });\n\n trace.finalResponse = result.text;\n trace.totalTurns = result.steps.length;\n\n return { text: result.text, trace };\n}\n","import type express from 'express';\nimport { ExecutionContext } from './ExecutionContext.js';\nimport type { AIClient, AIRequestOptions, AIStream, ZodSchema } from '../ai/AIClient.js';\nimport type { MemoryInterface } from '../memory/MemoryInterface.js';\nimport type { Agent } from '../agent/Agent.js';\nimport type { WorkflowReporter } from '../workflow/WorkflowReporter.js';\nimport type { DiscoveryOptions } from '../types/agent.js';\nimport type { DidInterface } from '../did/DidInterface.js';\nimport type { AIToolRequestOptions, ToolCallTrace } from '../ai/ToolCalling.js';\nimport { buildToolConfig, executeToolCallLoop } from '../ai/ToolCalling.js';\nimport type { ExecutionLogger } from '../observability/ExecutionLogger.js';\n\nexport class ReasonerContext<TInput = any> {\n readonly input: TInput;\n readonly executionId: string;\n readonly runId?: string;\n readonly sessionId?: string;\n readonly actorId?: string;\n readonly workflowId?: string;\n readonly rootWorkflowId?: string;\n readonly parentExecutionId?: string;\n readonly reasonerId?: string;\n readonly callerDid?: string;\n readonly targetDid?: string;\n readonly agentNodeDid?: string;\n readonly req: express.Request;\n readonly res: express.Response;\n readonly agent: Agent;\n readonly logger: ExecutionLogger;\n readonly aiClient: AIClient;\n readonly memory: MemoryInterface;\n readonly workflow: WorkflowReporter;\n readonly did: DidInterface;\n\n constructor(params: {\n input: TInput;\n executionId: string;\n runId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n req: express.Request;\n res: express.Response;\n agent: Agent;\n logger: ExecutionLogger;\n aiClient: AIClient;\n memory: MemoryInterface;\n workflow: WorkflowReporter;\n did: DidInterface;\n }) {\n this.input = params.input;\n this.executionId = params.executionId;\n this.runId = params.runId;\n this.sessionId = params.sessionId;\n this.actorId = params.actorId;\n this.workflowId = params.workflowId;\n this.rootWorkflowId = params.rootWorkflowId;\n this.parentExecutionId = params.parentExecutionId;\n this.reasonerId = params.reasonerId;\n this.callerDid = params.callerDid;\n this.targetDid = params.targetDid;\n this.agentNodeDid = params.agentNodeDid;\n this.req = params.req;\n this.res = params.res;\n this.agent = params.agent;\n this.logger = params.logger;\n this.aiClient = params.aiClient;\n this.memory = params.memory;\n this.workflow = params.workflow;\n this.did = params.did;\n }\n\n ai<T>(prompt: string, options: AIRequestOptions & { schema: ZodSchema<T> }): Promise<T>;\n ai(prompt: string, options?: AIToolRequestOptions): Promise<string>;\n ai(prompt: string, options?: AIToolRequestOptions): Promise<unknown> {\n if (options?.tools) {\n return this.aiWithTools(prompt, options);\n }\n return this.aiClient.generate(prompt, options);\n }\n\n /**\n * AI call with automatic tool calling via discover -> ai -> call loop.\n *\n * Discovers available capabilities, presents them as tools to the LLM,\n * dispatches tool calls via agent.call(), and iterates until a final response.\n *\n * @returns Object with `text` (final response) and `trace` (observability data).\n */\n async aiWithTools(\n prompt: string,\n options: AIToolRequestOptions = {}\n ): Promise<{ text: string; trace: ToolCallTrace }> {\n const toolsParam = options.tools ?? 'discover';\n const { tools, config, needsLazyHydration } = await buildToolConfig(toolsParam, this.agent);\n\n const mergedConfig = {\n ...config,\n maxTurns: options.maxTurns ?? config.maxTurns ?? 10,\n maxToolCalls: options.maxToolCalls ?? config.maxToolCalls ?? 25\n };\n\n return executeToolCallLoop(\n this.agent,\n prompt,\n tools,\n mergedConfig,\n needsLazyHydration,\n () => this.aiClient.getModel(options),\n options\n );\n }\n\n aiStream(prompt: string, options?: AIRequestOptions): Promise<AIStream> {\n return this.aiClient.stream(prompt, options);\n }\n\n call(target: string, input: any) {\n return this.agent.call(target, input);\n }\n\n discover(options?: DiscoveryOptions) {\n return this.agent.discover(options);\n }\n\n note(message: string, tags: string[] = []): void {\n this.agent.note(message, tags, {\n executionId: this.executionId,\n runId: this.runId,\n sessionId: this.sessionId,\n actorId: this.actorId,\n workflowId: this.workflowId,\n rootWorkflowId: this.rootWorkflowId,\n parentExecutionId: this.parentExecutionId,\n reasonerId: this.reasonerId,\n callerDid: this.callerDid,\n targetDid: this.targetDid,\n agentNodeDid: this.agentNodeDid\n });\n }\n}\n\nexport function getCurrentContext<TInput = any>(): ReasonerContext<TInput> | undefined {\n const execution = ExecutionContext.getCurrent();\n if (!execution) return undefined;\n const { metadata, input, agent, req, res } = execution;\n return new ReasonerContext<TInput>({\n input,\n executionId: metadata.executionId,\n runId: metadata.runId,\n sessionId: metadata.sessionId,\n actorId: metadata.actorId,\n workflowId: metadata.workflowId,\n rootWorkflowId: metadata.rootWorkflowId,\n parentExecutionId: metadata.parentExecutionId,\n reasonerId: metadata.reasonerId,\n callerDid: metadata.callerDid,\n targetDid: metadata.targetDid,\n agentNodeDid: metadata.agentNodeDid,\n req,\n res,\n agent,\n logger: agent.getExecutionLogger(),\n aiClient: agent.getAIClient(),\n memory: agent.getMemoryInterface(metadata),\n workflow: agent.getWorkflowReporter(metadata),\n did: agent.getDidInterface(metadata, input)\n });\n}\n","import type express from 'express';\nimport { ExecutionContext } from './ExecutionContext.js';\nimport type { Agent } from '../agent/Agent.js';\nimport type { MemoryInterface } from '../memory/MemoryInterface.js';\nimport type { WorkflowReporter } from '../workflow/WorkflowReporter.js';\nimport type { DiscoveryOptions } from '../types/agent.js';\nimport type { DidInterface } from '../did/DidInterface.js';\nimport type { ExecutionLogger } from '../observability/ExecutionLogger.js';\n\nexport class SkillContext<TInput = any> {\n readonly input: TInput;\n readonly executionId: string;\n readonly sessionId?: string;\n readonly workflowId?: string;\n readonly rootWorkflowId?: string;\n readonly reasonerId?: string;\n readonly callerDid?: string;\n readonly agentNodeDid?: string;\n readonly req: express.Request;\n readonly res: express.Response;\n readonly agent: Agent;\n readonly logger: ExecutionLogger;\n readonly memory: MemoryInterface;\n readonly workflow: WorkflowReporter;\n readonly did: DidInterface;\n\n constructor(params: {\n input: TInput;\n executionId: string;\n sessionId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n reasonerId?: string;\n callerDid?: string;\n agentNodeDid?: string;\n req: express.Request;\n res: express.Response;\n agent: Agent;\n logger: ExecutionLogger;\n memory: MemoryInterface;\n workflow: WorkflowReporter;\n did: DidInterface;\n }) {\n this.input = params.input;\n this.executionId = params.executionId;\n this.sessionId = params.sessionId;\n this.workflowId = params.workflowId;\n this.rootWorkflowId = params.rootWorkflowId;\n this.reasonerId = params.reasonerId;\n this.callerDid = params.callerDid;\n this.agentNodeDid = params.agentNodeDid;\n this.req = params.req;\n this.res = params.res;\n this.agent = params.agent;\n this.logger = params.logger;\n this.memory = params.memory;\n this.workflow = params.workflow;\n this.did = params.did;\n }\n\n discover(options?: DiscoveryOptions) {\n return this.agent.discover(options);\n }\n}\n\nexport function getCurrentSkillContext<TInput = any>(): SkillContext<TInput> | undefined {\n const execution = ExecutionContext.getCurrent();\n if (!execution) return undefined;\n const { metadata, input, agent, req, res } = execution;\n return new SkillContext<TInput>({\n input,\n executionId: metadata.executionId,\n sessionId: metadata.sessionId,\n workflowId: metadata.workflowId,\n rootWorkflowId: metadata.rootWorkflowId,\n reasonerId: metadata.reasonerId,\n callerDid: metadata.callerDid,\n agentNodeDid: metadata.agentNodeDid,\n req,\n res,\n agent,\n logger: agent.getExecutionLogger(),\n memory: agent.getMemoryInterface(metadata),\n workflow: agent.getWorkflowReporter(metadata),\n did: agent.getDidInterface(metadata, input)\n });\n}\n","import crypto from 'node:crypto';\nimport os from 'node:os';\n\nexport class RateLimitError extends Error {\n retryAfter?: number;\n\n constructor(message: string, retryAfter?: number) {\n super(message);\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\nexport interface RateLimiterOptions {\n maxRetries?: number;\n baseDelay?: number;\n maxDelay?: number;\n jitterFactor?: number;\n circuitBreakerThreshold?: number;\n circuitBreakerTimeout?: number;\n}\n\n/**\n * Stateless rate limiter with adaptive exponential backoff.\n *\n * Designed to work across many containers without coordination.\n * Uses container-specific jitter to naturally distribute load.\n */\nexport class StatelessRateLimiter {\n readonly maxRetries: number;\n readonly baseDelay: number;\n readonly maxDelay: number;\n readonly jitterFactor: number;\n readonly circuitBreakerThreshold: number;\n readonly circuitBreakerTimeout: number;\n\n protected _containerSeed: number;\n protected _consecutiveFailures = 0;\n protected _circuitOpenTime?: number;\n\n constructor(options: RateLimiterOptions = {}) {\n this.maxRetries = options.maxRetries ?? 5;\n this.baseDelay = options.baseDelay ?? 0.5;\n this.maxDelay = options.maxDelay ?? 30.0;\n this.jitterFactor = options.jitterFactor ?? 0.25;\n this.circuitBreakerThreshold = options.circuitBreakerThreshold ?? 5;\n this.circuitBreakerTimeout = options.circuitBreakerTimeout ?? 30;\n\n this._containerSeed = this._getContainerSeed();\n }\n\n protected _getContainerSeed(): number {\n const identifier = `${os.hostname()}-${process.pid}`;\n const hash = crypto.createHash('md5').update(identifier).digest('hex');\n return parseInt(hash.slice(0, 8), 16);\n }\n\n protected _isRateLimitError(error: unknown): boolean {\n if (!error) return false;\n const err = error as any;\n\n const className = err?.constructor?.name;\n if (className && className.includes('RateLimitError')) {\n return true;\n }\n\n const response = err?.response;\n const statusCandidates = [\n err?.status,\n err?.statusCode,\n response?.status,\n response?.statusCode,\n response?.status_code\n ];\n if (statusCandidates.some((code: any) => code === 429 || code === 503)) {\n return true;\n }\n\n const message = String(err?.message ?? err ?? '').toLowerCase();\n const rateLimitKeywords = [\n 'rate limit',\n 'rate-limit',\n 'rate_limit',\n 'too many requests',\n 'quota exceeded',\n 'temporarily rate-limited',\n 'rate limited',\n 'requests per',\n 'rpm exceeded',\n 'tpm exceeded',\n 'usage limit',\n 'throttled',\n 'throttling'\n ];\n\n return rateLimitKeywords.some((keyword) => message.includes(keyword));\n }\n\n protected _extractRetryAfter(error: unknown): number | undefined {\n if (!error) return undefined;\n const err = error as any;\n\n const headers = err?.response?.headers ?? err?.response?.Headers ?? err?.response?.header;\n if (headers && typeof headers === 'object') {\n const retryAfterKey = Object.keys(headers).find((k) => k.toLowerCase() === 'retry-after');\n if (retryAfterKey) {\n const value = Array.isArray(headers[retryAfterKey]) ? headers[retryAfterKey][0] : headers[retryAfterKey];\n const parsed = parseFloat(value);\n if (!Number.isNaN(parsed)) {\n return parsed;\n }\n }\n }\n\n const retryAfter = err?.retryAfter ?? err?.retry_after;\n const parsed = parseFloat(retryAfter);\n if (!Number.isNaN(parsed)) {\n return parsed;\n }\n\n return undefined;\n }\n\n protected _createJitterRng(seed: number): () => number {\n let x = seed >>> 0;\n return () => {\n x = (1664525 * x + 1013904223) % 4294967296;\n return x / 4294967296;\n };\n }\n\n protected _calculateBackoffDelay(attempt: number, retryAfter?: number): number {\n let baseDelay: number;\n if (retryAfter && retryAfter <= this.maxDelay) {\n baseDelay = retryAfter;\n } else {\n baseDelay = Math.min(this.baseDelay * 2 ** attempt, this.maxDelay);\n }\n\n const jitterRange = baseDelay * this.jitterFactor;\n const rng = this._createJitterRng(this._containerSeed + attempt);\n const jitter = (rng() * 2 - 1) * jitterRange;\n\n const delay = Math.max(0.1, baseDelay + jitter);\n return delay;\n }\n\n protected _checkCircuitBreaker(): boolean {\n if (this._circuitOpenTime === undefined) {\n return false;\n }\n\n if (this._now() - this._circuitOpenTime > this.circuitBreakerTimeout) {\n this._circuitOpenTime = undefined;\n this._consecutiveFailures = 0;\n return false;\n }\n\n return true;\n }\n\n protected _updateCircuitBreaker(success: boolean) {\n if (success) {\n this._consecutiveFailures = 0;\n this._circuitOpenTime = undefined;\n return;\n }\n\n this._consecutiveFailures += 1;\n if (this._consecutiveFailures >= this.circuitBreakerThreshold && this._circuitOpenTime === undefined) {\n this._circuitOpenTime = this._now();\n }\n }\n\n protected async _sleep(delaySeconds: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, delaySeconds * 1000));\n }\n\n protected _now(): number {\n return Date.now() / 1000;\n }\n\n async executeWithRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (this._checkCircuitBreaker()) {\n throw new RateLimitError(\n `Circuit breaker is open. Too many consecutive rate limit failures. Will retry after ${this.circuitBreakerTimeout} seconds.`\n );\n }\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt += 1) {\n try {\n const result = await fn();\n this._updateCircuitBreaker(true);\n return result;\n } catch (error) {\n lastError = error;\n\n if (!this._isRateLimitError(error)) {\n throw error;\n }\n\n this._updateCircuitBreaker(false);\n\n if (attempt >= this.maxRetries) {\n break;\n }\n\n const retryAfter = this._extractRetryAfter(error);\n const delay = this._calculateBackoffDelay(attempt, retryAfter);\n await this._sleep(delay);\n }\n }\n\n throw new RateLimitError(\n `Rate limit retries exhausted after ${this.maxRetries} attempts. Last error: ${String(lastError)}`,\n this._extractRetryAfter(lastError)\n );\n }\n}\n","import {\n embed,\n embedMany,\n generateObject,\n generateText,\n streamText\n} from 'ai';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { createAnthropic } from '@ai-sdk/anthropic';\nimport { createGoogleGenerativeAI } from '@ai-sdk/google';\nimport { createMistral } from '@ai-sdk/mistral';\nimport { createGroq } from '@ai-sdk/groq';\nimport { createXai } from '@ai-sdk/xai';\nimport { createDeepSeek } from '@ai-sdk/deepseek';\nimport { createCohere } from '@ai-sdk/cohere';\nimport type { z } from 'zod';\nimport type { AIConfig } from '../types/agent.js';\nimport { StatelessRateLimiter } from './RateLimiter.js';\n\nexport type ZodSchema<T> = z.Schema<T, z.ZodTypeDef, any>;\n\n/**\n * Attempts to repair malformed JSON text from model responses.\n * Handles common issues like markdown code blocks, trailing commas, etc.\n */\nfunction repairJsonText(text: string): string | null {\n let cleaned = text.trim();\n\n // Remove markdown code blocks (```json ... ``` or ``` ... ```)\n const codeBlockMatch = cleaned.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n if (codeBlockMatch) {\n cleaned = codeBlockMatch[1].trim();\n }\n\n // Try to extract JSON object/array if there's extra text\n const jsonMatch = cleaned.match(/(\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])/);\n if (jsonMatch) {\n cleaned = jsonMatch[1];\n }\n\n // Remove trailing commas before } or ]\n cleaned = cleaned.replace(/,(\\s*[}\\]])/g, '$1');\n\n // Try to parse to verify it's valid\n try {\n JSON.parse(cleaned);\n return cleaned;\n } catch {\n return null;\n }\n}\n\nexport interface AIRequestOptions {\n system?: string;\n schema?: ZodSchema<any>;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n provider?: AIConfig['provider'];\n /**\n * Mode for structured output generation.\n * - 'auto': Let the provider choose (default in ai-sdk, uses tool calling)\n * - 'json': Use JSON mode (more compatible across providers/models)\n * - 'tool': Force tool calling mode\n */\n mode?: 'auto' | 'json' | 'tool';\n}\n\nexport type AIStream = AsyncIterable<string>;\n\nexport interface AIEmbeddingOptions {\n model?: string;\n provider?: AIConfig['provider'];\n}\n\nexport class AIClient {\n private readonly config: AIConfig;\n private rateLimiter?: StatelessRateLimiter;\n\n constructor(config: AIConfig = {}) {\n this.config = {\n enableRateLimitRetry: true,\n rateLimitMaxRetries: 20,\n rateLimitBaseDelay: 1.0,\n rateLimitMaxDelay: 300.0,\n rateLimitJitterFactor: 0.25,\n rateLimitCircuitBreakerThreshold: 10,\n rateLimitCircuitBreakerTimeout: 300,\n ...config\n };\n }\n\n async generate<T>(prompt: string, options: AIRequestOptions & { schema: ZodSchema<T> }): Promise<T>;\n async generate(prompt: string, options?: AIRequestOptions): Promise<string>;\n async generate<T = any>(prompt: string, options: AIRequestOptions = {}): Promise<T | string> {\n const model = this.buildModel(options);\n\n if (options.schema) {\n const schema = options.schema;\n const call = async () =>\n generateObject({\n model: model,\n prompt,\n output: 'object',\n system: options.system,\n temperature: options.temperature ?? this.config.temperature,\n maxOutputTokens: options.maxTokens ?? this.config.maxTokens,\n schema,\n experimental_repairText: async ({ text }) => repairJsonText(text)\n });\n\n const response = await this.withRateLimitRetry(call);\n return response.object as T;\n }\n\n const call = async () =>\n generateText({\n model: model,\n prompt,\n system: options.system,\n temperature: options.temperature ?? this.config.temperature,\n maxOutputTokens: options.maxTokens ?? this.config.maxTokens\n });\n\n const response = await this.withRateLimitRetry(call);\n return (response).text as string;\n }\n\n async stream(prompt: string, options: AIRequestOptions = {}): Promise<AIStream> {\n const model = this.buildModel(options);\n const streamResult = streamText({\n model: model,\n prompt,\n system: options.system,\n temperature: options.temperature ?? this.config.temperature,\n maxOutputTokens: options.maxTokens ?? this.config.maxTokens\n });\n\n return streamResult.textStream;\n }\n\n async embed(value: string, options: AIEmbeddingOptions = {}) {\n const model = this.buildEmbeddingModel(options);\n const result = await this.withRateLimitRetry(() =>\n embed({\n model: model,\n value\n })\n );\n return (result).embedding as number[];\n }\n\n async embedMany(values: string[], options: AIEmbeddingOptions = {}) {\n const model = this.buildEmbeddingModel(options);\n const result = await this.withRateLimitRetry(() =>\n embedMany({\n model: model,\n values\n })\n );\n return (result).embeddings as number[][];\n }\n\n /**\n * Build and return the AI model instance for a given set of options.\n * Exposed for use by the tool-calling loop.\n */\n getModel(options: AIRequestOptions = {}) {\n return this.buildModel(options);\n }\n\n private buildModel(options: AIRequestOptions) {\n const provider = options.provider ?? this.config.provider ?? 'openai';\n const modelName = options.model ?? this.config.model ?? 'gpt-4o';\n\n switch (provider) {\n case 'anthropic': {\n const anthropic = createAnthropic({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return anthropic(modelName);\n }\n\n case 'google': {\n const google = createGoogleGenerativeAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return google(modelName);\n }\n\n case 'mistral': {\n const mistral = createMistral({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return mistral(modelName);\n }\n\n case 'groq': {\n const groq = createGroq({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return groq(modelName);\n }\n\n case 'xai': {\n const xai = createXai({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return xai(modelName);\n }\n\n case 'deepseek': {\n const deepseek = createDeepSeek({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return deepseek(modelName);\n }\n\n case 'cohere': {\n const cohere = createCohere({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return cohere(modelName);\n }\n\n case 'openrouter': {\n // OpenRouter is OpenAI-compatible but doesn't support Responses API\n const openrouter = createOpenAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl ?? 'https://openrouter.ai/api/v1'\n });\n return openrouter.chat(modelName);\n }\n\n case 'ollama': {\n // Ollama is OpenAI-compatible but doesn't support Responses API\n const ollama = createOpenAI({\n apiKey: this.config.apiKey ?? 'ollama', // Ollama doesn't need real key\n baseURL: this.config.baseUrl ?? 'http://localhost:11434/v1'\n });\n return ollama.chat(modelName);\n }\n\n case 'openai':\n default: {\n const openai = createOpenAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return openai(modelName);\n }\n }\n }\n\n private buildEmbeddingModel(options: AIEmbeddingOptions) {\n const provider = options.provider ?? this.config.provider ?? 'openai';\n const modelName = options.model ?? this.config.embeddingModel ?? 'text-embedding-3-small';\n\n // Providers without embedding support\n const noEmbeddingProviders = ['anthropic', 'xai', 'deepseek', 'groq'];\n if (noEmbeddingProviders.includes(provider)) {\n throw new Error(`Embedding generation is not supported for ${provider} provider`);\n }\n\n switch (provider) {\n case 'google': {\n const google = createGoogleGenerativeAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return google.textEmbeddingModel(modelName);\n }\n\n case 'mistral': {\n const mistral = createMistral({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return mistral.textEmbeddingModel(modelName);\n }\n\n case 'cohere': {\n const cohere = createCohere({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl\n });\n return cohere.textEmbeddingModel(modelName);\n }\n\n case 'openai':\n case 'openrouter':\n case 'ollama':\n default: {\n const openai = createOpenAI({\n apiKey: this.config.apiKey ?? (provider === 'ollama' ? 'ollama' : undefined),\n baseURL:\n this.config.baseUrl ??\n (provider === 'openrouter'\n ? 'https://openrouter.ai/api/v1'\n : provider === 'ollama'\n ? 'http://localhost:11434/v1'\n : undefined)\n });\n return openai.embedding(modelName);\n }\n }\n }\n\n private getRateLimiter() {\n if (!this.rateLimiter) {\n this.rateLimiter = new StatelessRateLimiter({\n maxRetries: this.config.rateLimitMaxRetries,\n baseDelay: this.config.rateLimitBaseDelay,\n maxDelay: this.config.rateLimitMaxDelay,\n jitterFactor: this.config.rateLimitJitterFactor,\n circuitBreakerThreshold: this.config.rateLimitCircuitBreakerThreshold,\n circuitBreakerTimeout: this.config.rateLimitCircuitBreakerTimeout\n });\n }\n return this.rateLimiter;\n }\n\n private withRateLimitRetry<T>(fn: () => Promise<T>): Promise<T> {\n if (this.config.enableRateLimitRetry === false) {\n return fn();\n }\n return this.getRateLimiter().executeWithRetry(fn);\n }\n}\n","import type { WriteStream } from 'node:tty';\n\nexport type ExecutionLogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface ExecutionLogContext {\n executionId?: string;\n runId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n sessionId?: string;\n actorId?: string;\n agentNodeId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n}\n\nexport interface ExecutionLogAttributes {\n [key: string]: unknown;\n}\n\nexport interface ExecutionLogEntry extends ExecutionLogContext {\n v: 1;\n ts: string;\n level: ExecutionLogLevel;\n source: string;\n message: string;\n eventType?: string;\n systemGenerated?: boolean;\n attributes?: ExecutionLogAttributes;\n}\n\nexport interface ExecutionLogWireEntry {\n v: 1;\n ts: string;\n execution_id?: string;\n run_id?: string;\n workflow_id?: string;\n root_workflow_id?: string;\n parent_execution_id?: string;\n session_id?: string;\n actor_id?: string;\n agent_node_id?: string;\n reasoner_id?: string;\n caller_did?: string;\n target_did?: string;\n agent_node_did?: string;\n level: ExecutionLogLevel;\n source: string;\n event_type?: string;\n message: string;\n attributes?: ExecutionLogAttributes;\n system_generated?: boolean;\n}\n\nexport interface ExecutionLogBatchPayload {\n entries: ExecutionLogWireEntry[];\n}\n\nexport type ExecutionLogTransportPayload = ExecutionLogWireEntry | ExecutionLogBatchPayload;\n\nexport function isExecutionLogBatchPayload(\n payload: ExecutionLogTransportPayload\n): payload is ExecutionLogBatchPayload {\n return 'entries' in payload;\n}\n\nexport interface ExecutionLogEmitOptions {\n eventType?: string;\n source?: string;\n systemGenerated?: boolean;\n}\n\nexport interface ExecutionLogTransport {\n emit(payload: ExecutionLogTransportPayload): void | Promise<void>;\n}\n\nexport interface ExecutionLoggerOptions {\n contextProvider?: () => ExecutionLogContext | undefined;\n transport?: ExecutionLogTransport;\n mirrorToStdout?: boolean;\n stdout?: Pick<WriteStream, 'write'>;\n source?: string;\n}\n\nfunction safeJsonStringify(value: unknown): string {\n const seen = new WeakSet<object>();\n return JSON.stringify(value, (_key, current) => {\n if (typeof current === 'bigint') {\n return current.toString();\n }\n if (typeof current === 'object' && current !== null) {\n if (seen.has(current)) {\n return '[Circular]';\n }\n seen.add(current);\n }\n return current;\n });\n}\n\nfunction mergeAttributes(\n existing?: ExecutionLogAttributes,\n next?: ExecutionLogAttributes\n): ExecutionLogAttributes | undefined {\n if (!existing && !next) {\n return undefined;\n }\n return {\n ...(existing ?? {}),\n ...(next ?? {})\n };\n}\n\nexport function normalizeExecutionLogEntry(entry: ExecutionLogEntry): ExecutionLogWireEntry {\n return {\n v: entry.v,\n ts: entry.ts,\n execution_id: entry.executionId,\n run_id: entry.runId,\n workflow_id: entry.workflowId,\n root_workflow_id: entry.rootWorkflowId,\n parent_execution_id: entry.parentExecutionId,\n session_id: entry.sessionId,\n actor_id: entry.actorId,\n agent_node_id: entry.agentNodeId,\n reasoner_id: entry.reasonerId,\n caller_did: entry.callerDid,\n target_did: entry.targetDid,\n agent_node_did: entry.agentNodeDid,\n level: entry.level,\n source: entry.source,\n event_type: entry.eventType,\n message: entry.message,\n attributes: entry.attributes,\n system_generated: entry.systemGenerated\n };\n}\n\nexport function serializeExecutionLogEntry(entry: ExecutionLogEntry): string {\n return safeJsonStringify(normalizeExecutionLogEntry(entry));\n}\n\nexport class ExecutionLogger {\n private readonly contextProvider?: () => ExecutionLogContext | undefined;\n private readonly transport?: ExecutionLogTransport;\n private readonly mirrorToStdout: boolean;\n private readonly stdout?: Pick<WriteStream, 'write'>;\n private readonly defaultSource: string;\n\n constructor(options: ExecutionLoggerOptions = {}) {\n this.contextProvider = options.contextProvider;\n this.transport = options.transport;\n this.mirrorToStdout = options.mirrorToStdout ?? true;\n this.stdout = options.stdout ?? (typeof process !== 'undefined' ? process.stdout : undefined);\n this.defaultSource = options.source ?? 'sdk.logger';\n }\n\n log(\n level: ExecutionLogLevel,\n message: string,\n attributes?: ExecutionLogAttributes,\n options: ExecutionLogEmitOptions = {}\n ): ExecutionLogEntry {\n const context = this.contextProvider?.() ?? {};\n const entry: ExecutionLogEntry = {\n v: 1,\n ts: new Date().toISOString(),\n level,\n source: options.source ?? this.defaultSource,\n message,\n ...context,\n ...(options.eventType ? { eventType: options.eventType } : {}),\n ...(options.systemGenerated ? { systemGenerated: true } : {}),\n ...(attributes ? { attributes: mergeAttributes(undefined, attributes) } : {})\n };\n\n this.emit(entry);\n return entry;\n }\n\n debug(\n message: string,\n attributes?: ExecutionLogAttributes,\n options?: ExecutionLogEmitOptions\n ): ExecutionLogEntry {\n return this.log('debug', message, attributes, options);\n }\n\n info(\n message: string,\n attributes?: ExecutionLogAttributes,\n options?: ExecutionLogEmitOptions\n ): ExecutionLogEntry {\n return this.log('info', message, attributes, options);\n }\n\n warn(\n message: string,\n attributes?: ExecutionLogAttributes,\n options?: ExecutionLogEmitOptions\n ): ExecutionLogEntry {\n return this.log('warn', message, attributes, options);\n }\n\n error(\n message: string,\n attributes?: ExecutionLogAttributes,\n options?: ExecutionLogEmitOptions\n ): ExecutionLogEntry {\n return this.log('error', message, attributes, options);\n }\n\n system(\n eventType: string,\n message: string,\n attributes?: ExecutionLogAttributes\n ): ExecutionLogEntry {\n return this.log('info', message, attributes, {\n eventType,\n source: 'sdk.runtime',\n systemGenerated: true\n });\n }\n\n private emit(entry: ExecutionLogEntry): void {\n const wire = normalizeExecutionLogEntry(entry);\n const line = safeJsonStringify(wire) + '\\n';\n\n if (this.mirrorToStdout && this.stdout?.write) {\n this.stdout.write(line);\n }\n\n if (this.transport && wire.execution_id) {\n try {\n const result = this.transport.emit(wire);\n if (result && typeof (result as Promise<void>).catch === 'function') {\n void Promise.resolve(result).catch(() => {});\n }\n } catch {\n // Logging must never break execution flow.\n }\n }\n }\n}\n\nexport function createExecutionLogger(options: ExecutionLoggerOptions = {}): ExecutionLogger {\n return new ExecutionLogger(options);\n}\n","import http from 'node:http';\nimport https from 'node:https';\n\n/**\n * Shared HTTP agents with connection pooling to prevent socket exhaustion.\n *\n * These agents are shared across all SDK HTTP clients (AgentFieldClient,\n * MemoryClient, DidClient, MCPClient) to ensure consistent connection\n * pooling behavior and prevent socket leaks.\n *\n * Configuration:\n * - keepAlive: true - Reuse connections instead of creating new ones\n * - maxSockets: 10 - Max connections per host (IPv4/IPv6 counted separately)\n * - maxTotalSockets: 50 - Total connections across all hosts (prevents exhaustion)\n * - maxFreeSockets: 5 - Idle sockets to keep for reuse\n */\nexport const httpAgent = new http.Agent({\n keepAlive: true,\n maxSockets: 10,\n maxTotalSockets: 50,\n maxFreeSockets: 5\n});\n\nexport const httpsAgent = new https.Agent({\n keepAlive: true,\n maxSockets: 10,\n maxTotalSockets: 50,\n maxFreeSockets: 5\n});\n","import crypto from 'node:crypto';\n\nexport const HEADER_CALLER_DID = 'X-Caller-DID';\nexport const HEADER_DID_SIGNATURE = 'X-DID-Signature';\nexport const HEADER_DID_TIMESTAMP = 'X-DID-Timestamp';\nexport const HEADER_DID_NONCE = 'X-DID-Nonce';\n\n/**\n * Ed25519 PKCS#8 DER prefix for wrapping a 32-byte seed into a valid\n * PKCS#8 structure that Node.js `crypto.createPrivateKey` can parse.\n */\nconst ED25519_PKCS8_PREFIX = Buffer.from([\n 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06,\n 0x03, 0x2b, 0x65, 0x70, 0x04, 0x22, 0x04, 0x20\n]);\n\ninterface EdDSAJWK {\n kty: string;\n crv: string;\n d?: string;\n x?: string;\n}\n\nexport class DIDAuthenticator {\n private _did?: string;\n private _privateKey?: crypto.KeyObject;\n\n constructor(did?: string, privateKeyJwk?: string) {\n if (did && privateKeyJwk) {\n this.setCredentials(did, privateKeyJwk);\n }\n }\n\n get isConfigured(): boolean {\n return this._did !== undefined && this._privateKey !== undefined;\n }\n\n get did(): string | undefined {\n return this._did;\n }\n\n signRequest(body: Buffer | Uint8Array): Record<string, string> {\n if (!this.isConfigured) {\n return {};\n }\n\n const timestamp = Math.floor(Date.now() / 1000).toString();\n const nonce = crypto.randomBytes(16).toString('hex');\n const bodyHash = crypto.createHash('sha256').update(body).digest('hex');\n const payload = `${timestamp}:${nonce}:${bodyHash}`;\n const signature = crypto.sign(null, Buffer.from(payload), this._privateKey!);\n const signatureB64 = signature.toString('base64');\n\n return {\n [HEADER_CALLER_DID]: this._did!,\n [HEADER_DID_SIGNATURE]: signatureB64,\n [HEADER_DID_TIMESTAMP]: timestamp,\n [HEADER_DID_NONCE]: nonce\n };\n }\n\n setCredentials(did: string, privateKeyJwk: string): void {\n this._privateKey = parsePrivateKeyJWK(privateKeyJwk);\n this._did = did;\n }\n}\n\nfunction parsePrivateKeyJWK(jwkJSON: string): crypto.KeyObject {\n let key: EdDSAJWK;\n try {\n key = JSON.parse(jwkJSON);\n } catch {\n throw new Error('Invalid JWK format: failed to parse JSON');\n }\n\n if (key.kty !== 'OKP' || key.crv !== 'Ed25519') {\n throw new Error('Invalid key type: expected Ed25519 OKP key');\n }\n\n if (!key.d) {\n throw new Error(\"Missing 'd' (private key) in JWK\");\n }\n\n const seedBytes = Buffer.from(key.d, 'base64url');\n if (seedBytes.length !== 32) {\n throw new Error(`Invalid private key length: expected 32 bytes, got ${seedBytes.length}`);\n }\n\n return crypto.createPrivateKey({\n key: Buffer.concat([ED25519_PKCS8_PREFIX, seedBytes]),\n format: 'der',\n type: 'pkcs8'\n });\n}\n","import axios, { AxiosInstance } from 'axios';\nimport type {\n AgentConfig,\n DiscoveryOptions,\n DiscoveryFormat,\n DiscoveryResult,\n DiscoveryResponse,\n CompactDiscoveryResponse,\n HealthStatus\n} from '../types/agent.js';\nimport {\n isExecutionLogBatchPayload,\n type ExecutionLogTransportPayload\n} from '../observability/ExecutionLogger.js';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\nimport { DIDAuthenticator } from './DIDAuthenticator.js';\n\nexport interface ExecutionStatusUpdate {\n status?: string;\n result?: Record<string, any>;\n error?: string;\n durationMs?: number;\n progress?: number;\n statusReason?: string;\n}\n\nexport class AgentFieldClient {\n private readonly http: AxiosInstance;\n private readonly config: AgentConfig;\n private readonly defaultHeaders: Record<string, string>;\n private didAuthenticator: DIDAuthenticator;\n\n constructor(config: AgentConfig) {\n const baseURL = (config.agentFieldUrl ?? 'http://localhost:8080').replace(/\\/$/, '');\nthis.http = axios.create({\n baseURL,\n timeout: 30000,\n httpAgent,\n httpsAgent\n });\n this.config = config;\n\n const mergedHeaders = { ...(config.defaultHeaders ?? {}) };\n if (config.apiKey) {\n mergedHeaders['X-API-Key'] = config.apiKey;\n }\n this.defaultHeaders = this.sanitizeHeaders(mergedHeaders);\n this.didAuthenticator = new DIDAuthenticator(config.did, config.privateKeyJwk);\n }\n\n async register(payload: any): Promise<any> {\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const res = await this.http.post('/api/v1/nodes/register', bodyStr, {\n headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders })\n });\n return res.data;\n }\n\n async getNode(nodeId: string): Promise<any> {\n const res = await this.http.get(`/api/v1/nodes/${encodeURIComponent(nodeId)}`, {\n headers: this.mergeHeaders({})\n });\n return res.data;\n }\n\n async heartbeat(status: 'starting' | 'ready' | 'degraded' | 'offline' = 'ready'): Promise<HealthStatus> {\n const nodeId = this.config.nodeId;\n const bodyStr = JSON.stringify({ status, version: this.config.version ?? '', timestamp: new Date().toISOString() });\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const res = await this.http.post(\n `/api/v1/nodes/${nodeId}/heartbeat`,\n bodyStr,\n { headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders }) }\n );\n return res.data as HealthStatus;\n }\n\n async execute<T = any>(\n target: string,\n input: any,\n metadata?: {\n runId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n sessionId?: string;\n actorId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n agentNodeId?: string;\n }\n ): Promise<T> {\n const headers: Record<string, string> = {};\n if (metadata?.runId) headers['X-Run-ID'] = metadata.runId;\n if (metadata?.workflowId) headers['X-Workflow-ID'] = metadata.workflowId;\n if (metadata?.rootWorkflowId) headers['X-Root-Workflow-ID'] = metadata.rootWorkflowId;\n if (metadata?.parentExecutionId) headers['X-Parent-Execution-ID'] = metadata.parentExecutionId;\n if (metadata?.reasonerId) headers['X-Reasoner-ID'] = metadata.reasonerId;\n if (metadata?.sessionId) headers['X-Session-ID'] = metadata.sessionId;\n if (metadata?.actorId) headers['X-Actor-ID'] = metadata.actorId;\n if (metadata?.callerDid) headers['X-Caller-DID'] = metadata.callerDid;\n if (metadata?.targetDid) headers['X-Target-DID'] = metadata.targetDid;\n if (metadata?.agentNodeDid) headers['X-Agent-Node-DID'] = metadata.agentNodeDid;\n if (metadata?.agentNodeId) headers['X-Agent-Node-ID'] = metadata.agentNodeId;\n\n const bodyStr = JSON.stringify({ input });\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n try {\n const res = await this.http.post(\n `/api/v1/execute/${target}`,\n bodyStr,\n { headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...headers, ...authHeaders }) }\n );\n return (res.data?.result as T) ?? res.data;\n } catch (err: any) {\n // Extract structured error from control plane response (e.g., 403 permission_denied).\n const respData = err?.response?.data;\n if (respData) {\n const status = err.response.status;\n const msg = respData.message || respData.error || JSON.stringify(respData);\n const enriched = new Error(`execute ${target} failed (${status}): ${msg}`);\n (enriched as any).status = status;\n (enriched as any).responseData = respData;\n throw enriched;\n }\n throw err;\n }\n }\n\n async publishWorkflowEvent(event: {\n executionId: string;\n runId: string;\n workflowId?: string;\n rootWorkflowId?: string;\n reasonerId: string;\n agentNodeId: string;\n status: 'waiting' | 'running' | 'succeeded' | 'failed';\n parentExecutionId?: string;\n parentWorkflowId?: string;\n statusReason?: string;\n inputData?: Record<string, any>;\n result?: any;\n error?: string;\n durationMs?: number;\n }) {\n const payload = {\n execution_id: event.executionId,\n workflow_id: event.workflowId ?? event.runId,\n run_id: event.runId,\n root_workflow_id: event.rootWorkflowId ?? event.workflowId ?? event.runId,\n reasoner_id: event.reasonerId,\n type: event.reasonerId,\n agent_node_id: event.agentNodeId,\n status: event.status,\n status_reason: event.statusReason,\n parent_execution_id: event.parentExecutionId,\n parent_workflow_id: event.parentWorkflowId ?? event.workflowId ?? event.runId,\n input_data: event.inputData ?? {},\n result: event.result,\n error: event.error,\n duration_ms: event.durationMs\n };\n\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const request = this.http\n .post('/api/v1/workflow/executions/events', bodyStr, {\n headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders }),\n timeout: this.config.devMode ? 1000 : undefined\n })\n .catch(() => {\n // Best-effort; avoid throwing to keep agent execution resilient\n });\n\n // Fire and forget to avoid blocking local executions in tests/dev mode.\n void request;\n }\n\n publishExecutionLogs(payload: ExecutionLogTransportPayload): void {\n const executionId = isExecutionLogBatchPayload(payload)\n ? payload.entries[0]?.execution_id\n : payload.execution_id;\n\n if (!executionId) {\n return;\n }\n\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const request = this.http\n .post(`/api/v1/executions/${encodeURIComponent(executionId)}/logs`, bodyStr, {\n headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders }),\n timeout: this.config.devMode ? 1000 : 5000\n })\n .catch(() => {\n // Best-effort; execution logs must never break the agent runtime.\n });\n\n void request;\n }\n\n async updateExecutionStatus(executionId: string, update: ExecutionStatusUpdate) {\n if (!executionId) {\n throw new Error('executionId is required to update workflow status');\n }\n\n const payload = {\n status: update.status ?? 'running',\n result: update.result,\n error: update.error,\n duration_ms: update.durationMs,\n progress: update.progress !== undefined ? Math.round(update.progress) : undefined,\n status_reason: update.statusReason\n };\n\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n await this.http.post(`/api/v1/executions/${executionId}/status`, bodyStr, {\n headers: this.mergeHeaders({ 'Content-Type': 'application/json', ...authHeaders })\n });\n }\n\n async discoverCapabilities(options: DiscoveryOptions = {}): Promise<DiscoveryResult> {\n const format = (options.format ?? 'json').toLowerCase() as DiscoveryFormat;\n const params: Record<string, string> = { format };\n const dedupe = (values?: string[]) =>\n Array.from(new Set((values ?? []).filter(Boolean))).map((v) => v!);\n\n const combinedAgents = dedupe([\n ...(options.agent ? [options.agent] : []),\n ...(options.nodeId ? [options.nodeId] : []),\n ...(options.agentIds ?? []),\n ...(options.nodeIds ?? [])\n ]);\n\n if (combinedAgents.length === 1) {\n params.agent = combinedAgents[0];\n } else if (combinedAgents.length > 1) {\n params.agent_ids = combinedAgents.join(',');\n }\n\n if (options.reasoner) params.reasoner = options.reasoner;\n if (options.skill) params.skill = options.skill;\n if (options.tags?.length) params.tags = dedupe(options.tags).join(',');\n\n if (options.includeInputSchema !== undefined) {\n params.include_input_schema = String(Boolean(options.includeInputSchema));\n }\n if (options.includeOutputSchema !== undefined) {\n params.include_output_schema = String(Boolean(options.includeOutputSchema));\n }\n if (options.includeDescriptions !== undefined) {\n params.include_descriptions = String(Boolean(options.includeDescriptions));\n }\n if (options.includeExamples !== undefined) {\n params.include_examples = String(Boolean(options.includeExamples));\n }\n if (options.healthStatus) params.health_status = options.healthStatus.toLowerCase();\n if (options.limit !== undefined) params.limit = String(options.limit);\n if (options.offset !== undefined) params.offset = String(options.offset);\n\n const res = await this.http.get('/api/v1/discovery/capabilities', {\n params,\n headers: this.mergeHeaders({\n ...(options.headers ?? {}),\n Accept: format === 'xml' ? 'application/xml' : 'application/json'\n }),\n responseType: format === 'xml' ? 'text' : 'json',\n transformResponse: (data) => data // preserve raw body for xml\n });\n\n const raw = typeof res.data === 'string' ? res.data : JSON.stringify(res.data);\n if (format === 'xml') {\n return { format: 'xml', raw, xml: raw };\n }\n\n const parsed = typeof res.data === 'string' ? JSON.parse(res.data) : res.data;\n if (format === 'compact') {\n return {\n format: 'compact',\n raw,\n compact: this.mapCompactDiscovery(parsed as any)\n };\n }\n\n return {\n format: 'json',\n raw,\n json: this.mapDiscoveryResponse(parsed as any)\n };\n }\n\n private mapDiscoveryResponse(payload: any): DiscoveryResponse {\n return {\n discoveredAt: String(payload?.discovered_at ?? ''),\n totalAgents: Number(payload?.total_agents ?? 0),\n totalReasoners: Number(payload?.total_reasoners ?? 0),\n totalSkills: Number(payload?.total_skills ?? 0),\n pagination: {\n limit: Number(payload?.pagination?.limit ?? 0),\n offset: Number(payload?.pagination?.offset ?? 0),\n hasMore: Boolean(payload?.pagination?.has_more)\n },\n capabilities: (payload?.capabilities ?? []).map((cap: any) => ({\n agentId: cap?.agent_id ?? '',\n baseUrl: cap?.base_url ?? '',\n version: cap?.version ?? '',\n healthStatus: cap?.health_status ?? '',\n deploymentType: cap?.deployment_type,\n lastHeartbeat: cap?.last_heartbeat,\n reasoners: (cap?.reasoners ?? []).map((r: any) => ({\n id: r?.id ?? '',\n description: r?.description,\n tags: r?.tags ?? [],\n inputSchema: r?.input_schema,\n outputSchema: r?.output_schema,\n examples: r?.examples,\n invocationTarget: r?.invocation_target ?? ''\n })),\n skills: (cap?.skills ?? []).map((s: any) => ({\n id: s?.id ?? '',\n description: s?.description,\n tags: s?.tags ?? [],\n inputSchema: s?.input_schema,\n invocationTarget: s?.invocation_target ?? ''\n }))\n }))\n };\n }\n\n private mapCompactDiscovery(payload: any): CompactDiscoveryResponse {\n const toCap = (cap: any) => ({\n id: cap?.id ?? '',\n agentId: cap?.agent_id ?? '',\n target: cap?.target ?? '',\n tags: cap?.tags ?? []\n });\n\n return {\n discoveredAt: String(payload?.discovered_at ?? ''),\n reasoners: (payload?.reasoners ?? []).map(toCap),\n skills: (payload?.skills ?? []).map(toCap)\n };\n }\n\n private sanitizeHeaders(headers: Record<string, any>): Record<string, string> {\n const sanitized: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n sanitized[key] = typeof value === 'string' ? value : String(value);\n });\n return sanitized;\n }\n\n private mergeHeaders(headers?: Record<string, any>): Record<string, string> {\n return {\n ...this.defaultHeaders,\n ...this.sanitizeHeaders(headers ?? {})\n };\n }\n\n private buildExecutionHeaders(metadata: {\n runId?: string;\n executionId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n agentNodeId?: string;\n }): Record<string, string> {\n const headers: Record<string, string> = {};\n if (metadata.runId) headers['x-run-id'] = metadata.runId;\n if (metadata.executionId) headers['x-execution-id'] = metadata.executionId;\n if (metadata.sessionId) headers['x-session-id'] = metadata.sessionId;\n if (metadata.actorId) headers['x-actor-id'] = metadata.actorId;\n if (metadata.workflowId) headers['x-workflow-id'] = metadata.workflowId;\n if (metadata.rootWorkflowId) headers['x-root-workflow-id'] = metadata.rootWorkflowId;\n if (metadata.parentExecutionId) headers['x-parent-execution-id'] = metadata.parentExecutionId;\n if (metadata.reasonerId) headers['x-reasoner-id'] = metadata.reasonerId;\n if (metadata.callerDid) headers['x-caller-did'] = metadata.callerDid;\n if (metadata.targetDid) headers['x-target-did'] = metadata.targetDid;\n if (metadata.agentNodeDid) headers['x-agent-node-did'] = metadata.agentNodeDid;\n if (metadata.agentNodeId) headers['x-agent-node-id'] = metadata.agentNodeId;\n return headers;\n }\n\n setDIDCredentials(did: string, privateKeyJwk: string): void {\n this.didAuthenticator.setCredentials(did, privateKeyJwk);\n }\n\n get didAuthConfigured(): boolean {\n return this.didAuthenticator.isConfigured;\n }\n\n getDID(): string | undefined {\n return this.didAuthenticator.did;\n }\n\n sendNote(message: string, tags: string[], agentNodeId: string, metadata: {\n runId?: string;\n executionId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n rootWorkflowId?: string;\n parentExecutionId?: string;\n reasonerId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n }, uiApiBaseUrl: string, devMode?: boolean): void {\n const payload = {\n message,\n tags: tags ?? [],\n timestamp: Date.now() / 1000,\n agent_node_id: agentNodeId\n };\n\n const executionHeaders = this.buildExecutionHeaders({ ...metadata, agentNodeId });\n const bodyStr = JSON.stringify(payload);\n const authHeaders = this.didAuthenticator.signRequest(Buffer.from(bodyStr));\n const headers = this.mergeHeaders({\n 'Content-Type': 'application/json',\n ...executionHeaders,\n ...authHeaders\n });\n\n const request = axios\n .post(`${uiApiBaseUrl}/executions/note`, bodyStr, {\n headers,\n timeout: devMode ? 5000 : 10000,\n httpAgent,\n httpsAgent\n })\n .catch(() => {});\n void request;\n }\n}\n","import axios, { AxiosInstance, isAxiosError } from 'axios';\nimport type { MemoryScope } from '../types/agent.js';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\n\nexport interface MemoryRequestMetadata {\n workflowId?: string;\n sessionId?: string;\n actorId?: string;\n runId?: string;\n executionId?: string;\n parentExecutionId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n agentNodeId?: string;\n}\n\nexport interface MemoryRequestOptions {\n scope?: MemoryScope;\n scopeId?: string;\n metadata?: MemoryRequestMetadata;\n headers?: Record<string, string | number | boolean | undefined>;\n}\n\nexport interface VectorSearchOptions extends MemoryRequestOptions {\n topK?: number;\n filters?: Record<string, any>;\n}\n\nexport interface VectorSearchResult {\n key: string;\n scope: string;\n scopeId: string;\n score: number;\n metadata?: Record<string, any>;\n}\n\nexport class MemoryClientBase {\n protected readonly http: AxiosInstance;\n private readonly defaultHeaders: Record<string, string>;\n\n constructor(baseUrl: string, defaultHeaders?: Record<string, string | number | boolean | undefined>) {\n this.http = axios.create({\n baseURL: baseUrl.replace(/\\/$/, ''),\n timeout: 30000,\n httpAgent,\n httpsAgent\n });\n this.defaultHeaders = this.sanitizeHeaders(defaultHeaders ?? {});\n }\n\n protected buildHeaders(options: MemoryRequestOptions = {}) {\n const { scope, scopeId, metadata } = options;\n const headers: Record<string, string> = { ...this.defaultHeaders };\n\n const workflowId = metadata?.workflowId ?? metadata?.runId;\n if (workflowId) headers['X-Workflow-ID'] = workflowId;\n if (metadata?.sessionId) headers['X-Session-ID'] = metadata.sessionId;\n if (metadata?.actorId) headers['X-Actor-ID'] = metadata.actorId;\n if (metadata?.runId) headers['X-Run-ID'] = metadata.runId;\n if (metadata?.executionId) headers['X-Execution-ID'] = metadata.executionId;\n if (metadata?.parentExecutionId) headers['X-Parent-Execution-ID'] = metadata.parentExecutionId;\n if (metadata?.callerDid) headers['X-Caller-DID'] = metadata.callerDid;\n if (metadata?.targetDid) headers['X-Target-DID'] = metadata.targetDid;\n if (metadata?.agentNodeDid) headers['X-Agent-Node-DID'] = metadata.agentNodeDid;\n if (metadata?.agentNodeId) headers['X-Agent-Node-ID'] = metadata.agentNodeId;\n\n const headerName = this.scopeToHeader(scope);\n const resolvedScopeId = this.resolveScopeId(scope, scopeId, metadata);\n if (headerName && resolvedScopeId) {\n headers[headerName] = resolvedScopeId;\n }\n\n return { ...headers, ...this.sanitizeHeaders(options.headers ?? {}) };\n }\n\n private scopeToHeader(scope?: MemoryScope) {\n switch (scope) {\n case 'workflow':\n return 'X-Workflow-ID';\n case 'session':\n return 'X-Session-ID';\n case 'actor':\n return 'X-Actor-ID';\n default:\n return undefined;\n }\n }\n\n private resolveScopeId(scope?: MemoryScope, scopeId?: string, metadata?: MemoryRequestMetadata) {\n if (scopeId) return scopeId;\n switch (scope) {\n case 'workflow':\n return metadata?.workflowId ?? metadata?.runId;\n case 'session':\n return metadata?.sessionId;\n case 'actor':\n return metadata?.actorId;\n case 'global':\n return 'global';\n default:\n return undefined;\n }\n }\n\n private sanitizeHeaders(headers: Record<string, any>): Record<string, string> {\n const sanitized: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n sanitized[key] = typeof value === 'string' ? value : String(value);\n });\n return sanitized;\n }\n\n}\n\nexport class MemoryClient extends MemoryClientBase {\n\n constructor(baseUrl: string, defaultHeaders?: Record<string, string | number | boolean | undefined>) {\n super(baseUrl, defaultHeaders);\n }\n\n async set(key: string, data: any, options: MemoryRequestOptions = {}) {\n const payload: any = { key, data };\n if (options.scope) payload.scope = options.scope;\n\n await this.http.post('/api/v1/memory/set', payload, {\n headers: this.buildHeaders(options)\n });\n }\n\n async get<T = any>(key: string, options: MemoryRequestOptions = {}): Promise<T | undefined> {\n try {\n const payload: any = { key };\n if (options.scope) payload.scope = options.scope;\n\n const res = await this.http.post('/api/v1/memory/get', payload, {\n headers: this.buildHeaders(options)\n });\n return res.data?.data as T;\n } catch (err) {\n if (isAxiosError(err) && err.response?.status === 404) {\n return undefined;\n }\n throw err;\n }\n }\n\n async delete(key: string, options: MemoryRequestOptions = {}) {\n const payload: any = { key };\n if (options.scope) payload.scope = options.scope;\n\n await this.http.post('/api/v1/memory/delete', payload, {\n headers: this.buildHeaders(options)\n });\n }\n\n async listKeys(scope: MemoryScope, options: MemoryRequestOptions = {}) {\n const res = await this.http.get('/api/v1/memory/list', {\n params: { scope },\n headers: this.buildHeaders({ ...options, scope })\n });\n return (res.data ?? []).map((item: any) => item?.key).filter(Boolean) as string[];\n }\n\n async exists(key: string, options: MemoryRequestOptions = {}) {\n const value = await this.get(key, options);\n return value !== undefined;\n }\n\n async setVector(key: string, embedding: number[], metadata?: any, options: MemoryRequestOptions = {}) {\n const payload: any = {\n key,\n embedding\n };\n if (metadata !== undefined) payload.metadata = metadata;\n if (options.scope) payload.scope = options.scope;\n\n await this.http.post('/api/v1/memory/vector/set', payload, {\n headers: this.buildHeaders(options)\n });\n }\n\n async deleteVector(key: string, options: MemoryRequestOptions = {}) {\n const payload: any = { key };\n if (options.scope) payload.scope = options.scope;\n\n await this.http.post('/api/v1/memory/vector/delete', payload, {\n headers: this.buildHeaders(options)\n });\n }\n\n async searchVector(queryEmbedding: number[], options: VectorSearchOptions = {}): Promise<VectorSearchResult[]> {\n const payload: any = {\n query_embedding: queryEmbedding,\n top_k: options.topK ?? 10\n };\n if (options.filters) payload.filters = options.filters;\n if (options.scope) payload.scope = options.scope;\n\n const res = await this.http.post('/api/v1/memory/vector/search', payload, {\n headers: this.buildHeaders(options)\n });\n return res.data ?? [];\n }\n}\n","import WebSocket from 'ws';\nimport type { MemoryChangeEvent } from './MemoryInterface.js';\nimport { MemoryClientBase, MemoryRequestOptions } from './MemoryClient.js';\n\nexport type MemoryEventHandler = (event: MemoryChangeEvent) => Promise<void> | void;\n\nexport interface MemoryEventHistoryOptions extends MemoryRequestOptions {\n patterns?: string[],\n since?: Date,\n limit?: number,\n};\n\nexport class MemoryEventClient extends MemoryClientBase {\n private readonly url: string;\n private ws?: WebSocket;\n private handlers: MemoryEventHandler[] = [];\n private reconnectDelay = 1000;\n private closed = false;\n private reconnectPending = false;\n private reconnectTimer?: ReturnType<typeof setTimeout>;\n private readonly headers: Record<string, string>;\n private readonly apiKey?: string;\n\n constructor(baseUrl: string, headers?: Record<string, string | number | boolean | undefined>, apiKey?: string) {\n super(baseUrl, headers);\n this.url = `${baseUrl.replace(/^http/, 'ws')}/api/v1/memory/events/ws`;\n this.headers = this.buildForwardHeaders(headers ?? {});\n this.apiKey = apiKey;\n }\n\n start() {\n if (this.ws) return;\n this.connect();\n }\n\n onEvent(handler: MemoryEventHandler) {\n this.handlers.push(handler);\n }\n\n stop() {\n this.closed = true;\n this.cleanup();\n }\n\n private cleanup() {\n // Clear any pending reconnect timer\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = undefined;\n }\n if (this.ws) {\n // Remove all listeners to prevent reconnect triggers during cleanup\n this.ws.removeAllListeners();\n // Terminate forcefully to ensure socket is closed\n this.ws.terminate();\n this.ws = undefined;\n }\n }\n\n private connect() {\n // Clean up any existing connection first\n this.cleanup();\n this.reconnectPending = false;\n\n this.ws = new WebSocket(this.url, { headers: this.headers });\n\n this.ws.on('open', () => {\n this.reconnectDelay = 1000;\n });\n\n this.ws.on('message', async (raw) => {\n try {\n const parsed = JSON.parse(raw.toString()) as MemoryChangeEvent;\n for (const handler of this.handlers) {\n await handler(parsed);\n }\n } catch (err) {\n // swallow parsing errors to keep connection alive\n console.error('Failed to handle memory event', err);\n }\n });\n\n // Use a single handler for both close and error to prevent duplicate reconnects\n const handleDisconnect = () => this.scheduleReconnect();\n this.ws.on('close', handleDisconnect);\n this.ws.on('error', handleDisconnect);\n }\n\n private scheduleReconnect() {\n // Prevent duplicate reconnect scheduling\n if (this.closed || this.reconnectPending) return;\n this.reconnectPending = true;\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = undefined;\n if (this.closed) return;\n this.reconnectDelay = Math.min(this.reconnectDelay * 2, 30000);\n this.connect();\n }, this.reconnectDelay);\n }\n\n private buildForwardHeaders(headers: Record<string, any>): Record<string, string> {\n const allowed = new Set(['authorization', 'cookie']);\n const sanitized: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n const lower = key.toLowerCase();\n if (lower.startsWith('x-') || allowed.has(lower)) {\n sanitized[key] = typeof value === 'string' ? value : String(value);\n }\n });\n return sanitized;\n }\n\n\n async history(options: MemoryEventHistoryOptions = {}): Promise<MemoryChangeEvent[]> {\n const {\n patterns,\n since,\n limit = 100,\n scope,\n scopeId,\n } = options;\n\n try {\n const headers = this.buildHeaders(options);\n if (this.apiKey) {\n headers['X-API-Key'] = this.apiKey;\n }\n\n const params: Record<string, any> = {\n limit,\n };\n\n if (patterns && patterns.length > 0) {\n params.patterns = patterns.join(\",\");\n }\n\n if (since) {\n params.since = since.toISOString();\n }\n\n if (scope) {\n params.scope = scope;\n }\n\n if (scopeId) {\n params.scope_id = scopeId;\n }\n\n const res = await this.http.get('/api/v1/memory/events/history', {\n params: params,\n headers: headers\n });\n\n return (res.data ?? []) as MemoryChangeEvent[];\n } catch (e) {\n console.error(`Failed to get event history: ${e}`);\n return [];\n }\n }\n}\n","import type { MemoryScope } from '../types/agent.js';\nimport type { MemoryClient, MemoryRequestMetadata, VectorSearchOptions } from './MemoryClient.js';\nimport type { MemoryEventClient } from './MemoryEventClient.js';\nimport type { AIClient, AIEmbeddingOptions } from '../ai/AIClient.js';\n\nexport interface MemoryChangeEvent {\n key: string;\n data: any;\n scope: MemoryScope;\n scopeId: string;\n timestamp: string | Date;\n agentId: string;\n}\n\nexport type MemoryWatchHandler = (event: MemoryChangeEvent) => Promise<void> | void;\n\nexport class MemoryInterface {\n private readonly client: MemoryClient;\n private readonly eventClient?: MemoryEventClient;\n private readonly aiClient?: AIClient;\n private readonly defaultScope: MemoryScope;\n private readonly defaultScopeId?: string;\n private readonly metadata?: MemoryRequestMetadata;\n\n constructor(params: {\n client: MemoryClient;\n eventClient?: MemoryEventClient;\n aiClient?: AIClient;\n defaultScope?: MemoryScope;\n defaultScopeId?: string;\n metadata?: MemoryRequestMetadata;\n }) {\n this.client = params.client;\n this.eventClient = params.eventClient;\n this.aiClient = params.aiClient;\n this.defaultScope = params.defaultScope ?? 'workflow';\n this.defaultScopeId = params.defaultScopeId;\n this.metadata = params.metadata;\n }\n\n async set(key: string, data: any, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n await this.client.set(key, data, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n get<T = any>(key: string, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n // If caller uses defaults, perform hierarchical fallback lookup; otherwise fetch the explicit scope only.\n if (scope === this.defaultScope && scopeId === this.defaultScopeId) {\n return this.getWithFallback<T>(key);\n }\n\n return this.client.get<T>(key, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n async getWithFallback<T = any>(key: string) {\n for (const candidate of this.getScopeOrder()) {\n const value = await this.client.get<T>(key, {\n scope: candidate.scope,\n scopeId: candidate.scopeId,\n metadata: this.metadata\n });\n if (value !== undefined) return value;\n }\n return undefined;\n }\n\n async setVector(\n key: string,\n embedding: number[],\n metadata?: any,\n scope: MemoryScope = this.defaultScope,\n scopeId = this.defaultScopeId\n ) {\n await this.client.setVector(key, embedding, metadata, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n async deleteVector(key: string, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n await this.client.deleteVector(key, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n searchVector(queryEmbedding: number[], options: Omit<VectorSearchOptions, 'metadata'> = {}) {\n return this.client.searchVector(queryEmbedding, {\n ...options,\n metadata: this.metadata\n });\n }\n\n delete(key: string, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n return this.client.delete(key, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n exists(key: string, scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n return this.client.exists(key, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n listKeys(scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n return this.client.listKeys(scope, {\n scope,\n scopeId,\n metadata: this.metadata\n });\n }\n\n async embedText(text: string, options?: AIEmbeddingOptions) {\n if (!this.aiClient) {\n throw new Error('AI client not configured for embeddings');\n }\n return this.aiClient.embed(text, options);\n }\n\n async embedTexts(texts: string[], options?: AIEmbeddingOptions) {\n if (!this.aiClient) {\n throw new Error('AI client not configured for embeddings');\n }\n return this.aiClient.embedMany(texts, options);\n }\n\n async embedAndSet(\n key: string,\n text: string,\n metadata?: any,\n scope: MemoryScope = this.defaultScope,\n scopeId = this.defaultScopeId,\n embeddingOptions?: AIEmbeddingOptions\n ) {\n const embedding = await this.embedText(text, embeddingOptions);\n await this.setVector(key, embedding, metadata, scope, scopeId);\n return embedding;\n }\n\n async deleteVectors(keys: string[], scope: MemoryScope = this.defaultScope, scopeId = this.defaultScopeId) {\n for (const key of keys) {\n await this.deleteVector(key, scope, scopeId);\n }\n }\n\n workflow(scopeId: string) {\n return this.cloneWithScope('workflow', scopeId);\n }\n\n session(scopeId: string) {\n return this.cloneWithScope('session', scopeId);\n }\n\n actor(scopeId: string) {\n return this.cloneWithScope('actor', scopeId);\n }\n\n get globalScope() {\n return this.cloneWithScope('global', 'global');\n }\n\n onEvent(handler: MemoryWatchHandler) {\n this.eventClient?.onEvent(handler);\n }\n\n private cloneWithScope(scope: MemoryScope, scopeId?: string) {\n return new MemoryInterface({\n client: this.client,\n eventClient: this.eventClient,\n aiClient: this.aiClient,\n defaultScope: scope,\n defaultScopeId: scopeId ?? this.resolveScopeId(scope, this.metadata),\n metadata: this.metadata\n });\n }\n\n private getScopeOrder(): Array<{ scope: MemoryScope; scopeId?: string }> {\n const metadata = this.metadata ?? {};\n const order: Array<{ scope: MemoryScope; scopeId?: string }> = [];\n\n const pushUnique = (scope: MemoryScope, scopeId?: string) => {\n const key = `${scope}:${scopeId ?? ''}`;\n if (!order.some((c) => `${c.scope}:${c.scopeId ?? ''}` === key)) {\n order.push({ scope, scopeId });\n }\n };\n\n pushUnique(this.defaultScope, this.defaultScopeId ?? this.resolveScopeId(this.defaultScope, metadata));\n\n const defaultSequence: MemoryScope[] = ['workflow', 'session', 'actor', 'global'];\n defaultSequence.forEach((scope) => {\n pushUnique(scope, this.resolveScopeId(scope, metadata));\n });\n\n return order;\n }\n\n private resolveScopeId(scope: MemoryScope, metadata?: MemoryRequestMetadata) {\n switch (scope) {\n case 'workflow':\n return metadata?.workflowId ?? metadata?.runId;\n case 'session':\n return metadata?.sessionId;\n case 'actor':\n return metadata?.actorId;\n case 'global':\n return 'global';\n default:\n return undefined;\n }\n }\n}\n","import { Buffer } from 'node:buffer';\nimport axios, { type AxiosInstance } from 'axios';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\n\n// ============================================================================\n// DID Identity Types\n// ============================================================================\n\nexport interface DIDIdentity {\n did: string;\n privateKeyJwk?: string;\n publicKeyJwk: string;\n derivationPath: string;\n componentType: string;\n functionName?: string;\n}\n\nexport interface DIDIdentityPackage {\n agentDid: DIDIdentity;\n reasonerDids: Record<string, DIDIdentity>;\n skillDids: Record<string, DIDIdentity>;\n agentfieldServerId: string;\n}\n\nexport interface DIDRegistrationRequest {\n agentNodeId: string;\n reasoners: Array<{ id: string; [key: string]: any }>;\n skills: Array<{ id: string; [key: string]: any }>;\n}\n\nexport interface DIDRegistrationResponse {\n success: boolean;\n identityPackage?: DIDIdentityPackage;\n message?: string;\n error?: string;\n}\n\n// ============================================================================\n// Credential Types\n// ============================================================================\n\nexport interface ExecutionCredential {\n vcId: string;\n executionId: string;\n workflowId: string;\n sessionId?: string;\n issuerDid?: string;\n targetDid?: string;\n callerDid?: string;\n vcDocument: any;\n signature?: string;\n inputHash?: string;\n outputHash?: string;\n status: string;\n createdAt: string;\n}\n\nexport interface WorkflowCredential {\n workflowId: string;\n sessionId?: string;\n componentVcs: string[];\n workflowVcId: string;\n status: string;\n startTime: string;\n endTime?: string;\n totalSteps: number;\n completedSteps: number;\n}\n\nexport interface AuditTrailFilters {\n workflowId?: string;\n sessionId?: string;\n issuerDid?: string;\n status?: string;\n limit?: number;\n}\n\nexport interface AuditTrailExport {\n agentDids: string[];\n executionVcs: Array<{\n vcId: string;\n executionId: string;\n workflowId: string;\n sessionId?: string;\n issuerDid?: string;\n targetDid?: string;\n callerDid?: string;\n status: string;\n createdAt: string;\n }>;\n workflowVcs: WorkflowCredential[];\n totalCount: number;\n filtersApplied?: Record<string, any>;\n}\n\nexport interface GenerateCredentialParams {\n executionContext: {\n executionId: string;\n workflowId?: string;\n sessionId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n timestamp?: string | Date;\n };\n inputData?: any;\n outputData?: any;\n status?: string;\n errorMessage?: string;\n durationMs?: number;\n headers?: Record<string, string>;\n}\n\nexport class DidClient {\n private readonly http: AxiosInstance;\n private readonly defaultHeaders: Record<string, string>;\n\n constructor(baseUrl: string, defaultHeaders?: Record<string, string | number | boolean | undefined>) {\n this.http = axios.create({\n baseURL: baseUrl.replace(/\\/$/, ''),\n timeout: 30000,\n httpAgent,\n httpsAgent\n });\n this.defaultHeaders = this.sanitizeHeaders(defaultHeaders ?? {});\n }\n\n /**\n * Register an agent with the DID system and obtain an identity package.\n * This must be called before generating VCs to get the caller/target DIDs.\n */\n async registerAgent(request: DIDRegistrationRequest): Promise<DIDRegistrationResponse> {\n const payload = {\n agent_node_id: request.agentNodeId,\n reasoners: request.reasoners,\n skills: request.skills\n };\n\n const res = await this.http.post('/api/v1/did/register', payload, {\n headers: this.mergeHeaders()\n });\n\n const data = res.data ?? {};\n if (!data.success) {\n return {\n success: false,\n error: data.error ?? 'DID registration failed'\n };\n }\n\n return {\n success: true,\n identityPackage: this.parseIdentityPackage(data.identity_package),\n message: data.message\n };\n }\n\n private parseIdentityPackage(pkg: any): DIDIdentityPackage {\n const parseIdentity = (data: any): DIDIdentity => ({\n did: data?.did ?? '',\n privateKeyJwk: data?.private_key_jwk,\n publicKeyJwk: data?.public_key_jwk ?? '',\n derivationPath: data?.derivation_path ?? '',\n componentType: data?.component_type ?? '',\n functionName: data?.function_name\n });\n\n const reasonerDids: Record<string, DIDIdentity> = {};\n if (pkg?.reasoner_dids) {\n for (const [name, data] of Object.entries(pkg.reasoner_dids)) {\n reasonerDids[name] = parseIdentity(data);\n }\n }\n\n const skillDids: Record<string, DIDIdentity> = {};\n if (pkg?.skill_dids) {\n for (const [name, data] of Object.entries(pkg.skill_dids)) {\n skillDids[name] = parseIdentity(data);\n }\n }\n\n return {\n agentDid: parseIdentity(pkg?.agent_did),\n reasonerDids,\n skillDids,\n agentfieldServerId: pkg?.agentfield_server_id ?? ''\n };\n }\n\n async generateCredential(params: GenerateCredentialParams): Promise<ExecutionCredential> {\n const ctx = params.executionContext;\n const timestamp =\n ctx.timestamp instanceof Date\n ? ctx.timestamp.toISOString()\n : ctx.timestamp ?? new Date().toISOString();\n\n const payload = {\n execution_context: {\n execution_id: ctx.executionId,\n workflow_id: ctx.workflowId,\n session_id: ctx.sessionId,\n caller_did: ctx.callerDid,\n target_did: ctx.targetDid,\n agent_node_did: ctx.agentNodeDid,\n timestamp\n },\n input_data: this.serializeDataForJson(params.inputData),\n output_data: this.serializeDataForJson(params.outputData),\n status: params.status ?? 'succeeded',\n error_message: params.errorMessage,\n duration_ms: params.durationMs ?? 0\n };\n\n const res = await this.http.post('/api/v1/execution/vc', payload, {\n headers: this.mergeHeaders(params.headers)\n });\n\n return this.mapExecutionCredential(res.data);\n }\n\n async exportAuditTrail(filters: AuditTrailFilters = {}): Promise<AuditTrailExport> {\n const res = await this.http.get('/api/v1/did/export/vcs', {\n params: this.cleanFilters(filters),\n headers: this.mergeHeaders()\n });\n\n const data = res.data ?? {};\n return {\n agentDids: data.agent_dids ?? [],\n executionVcs: (data.execution_vcs ?? []).map((vc: any) => ({\n vcId: vc.vc_id,\n executionId: vc.execution_id,\n workflowId: vc.workflow_id,\n sessionId: vc.session_id,\n issuerDid: vc.issuer_did,\n targetDid: vc.target_did,\n callerDid: vc.caller_did,\n status: vc.status,\n createdAt: vc.created_at\n })),\n workflowVcs: (data.workflow_vcs ?? []).map((vc: any) => ({\n workflowId: vc.workflow_id,\n sessionId: vc.session_id,\n componentVcs: vc.component_vcs ?? [],\n workflowVcId: vc.workflow_vc_id ?? vc.workflowVcId ?? vc.workflow_id,\n status: vc.status,\n startTime: vc.start_time,\n endTime: vc.end_time,\n totalSteps: vc.total_steps ?? 0,\n completedSteps: vc.completed_steps ?? 0\n })),\n totalCount: data.total_count ?? 0,\n filtersApplied: data.filters_applied\n };\n }\n\n private serializeDataForJson(data: any) {\n if (data === undefined || data === null) return '';\n let value: string;\n if (typeof data === 'string') {\n value = data;\n } else if (data instanceof Uint8Array) {\n value = Buffer.from(data).toString('utf-8');\n } else if (typeof data === 'object') {\n try {\n value = JSON.stringify(data, Object.keys(data).sort());\n } catch {\n value = String(data);\n }\n } else {\n value = String(data);\n }\n return Buffer.from(value, 'utf-8').toString('base64');\n }\n\n private mapExecutionCredential(data: any): ExecutionCredential {\n return {\n vcId: data?.vc_id ?? '',\n executionId: data?.execution_id ?? '',\n workflowId: data?.workflow_id ?? '',\n sessionId: data?.session_id,\n issuerDid: data?.issuer_did,\n targetDid: data?.target_did,\n callerDid: data?.caller_did,\n vcDocument: data?.vc_document,\n signature: data?.signature,\n inputHash: data?.input_hash,\n outputHash: data?.output_hash,\n status: data?.status ?? '',\n createdAt: data?.created_at ?? ''\n };\n }\n\n private cleanFilters(filters: AuditTrailFilters) {\n const cleaned: Record<string, any> = {};\n if (filters.workflowId) cleaned.workflow_id = filters.workflowId;\n if (filters.sessionId) cleaned.session_id = filters.sessionId;\n if (filters.issuerDid) cleaned.issuer_did = filters.issuerDid;\n if (filters.status) cleaned.status = filters.status;\n if (filters.limit !== undefined) cleaned.limit = filters.limit;\n return cleaned;\n }\n\n private mergeHeaders(headers?: Record<string, any>) {\n return {\n ...this.defaultHeaders,\n ...this.sanitizeHeaders(headers ?? {})\n };\n }\n\n private sanitizeHeaders(headers: Record<string, any>): Record<string, string> {\n const sanitized: Record<string, string> = {};\n Object.entries(headers).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n sanitized[key] = typeof value === 'string' ? value : String(value);\n });\n return sanitized;\n }\n}\n","import type { ExecutionMetadata } from '../context/ExecutionContext.js';\nimport { DidClient, type AuditTrailFilters, type ExecutionCredential, type AuditTrailExport } from './DidClient.js';\n\nexport interface GenerateCredentialOptions {\n inputData?: any;\n outputData?: any;\n status?: string;\n errorMessage?: string;\n durationMs?: number;\n timestamp?: string | Date;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n workflowId?: string;\n sessionId?: string;\n executionId?: string;\n headers?: Record<string, string>;\n}\n\nexport class DidInterface {\n private readonly client: DidClient;\n private readonly metadata: ExecutionMetadata;\n private readonly enabled: boolean;\n private readonly defaultInput: any;\n\n constructor(params: { client: DidClient; metadata: ExecutionMetadata; enabled: boolean; defaultInput?: any }) {\n this.client = params.client;\n this.metadata = params.metadata;\n this.enabled = params.enabled;\n this.defaultInput = params.defaultInput;\n }\n\n async generateCredential(options: GenerateCredentialOptions = {}): Promise<ExecutionCredential> {\n if (!this.enabled) {\n throw new Error('DID/VC features are disabled. Enable didEnabled in AgentConfig to use ctx.did.');\n }\n\n const executionContext = {\n executionId: options.executionId ?? this.metadata.executionId,\n workflowId: options.workflowId ?? this.metadata.workflowId ?? this.metadata.runId,\n sessionId: options.sessionId ?? this.metadata.sessionId,\n callerDid: options.callerDid ?? this.metadata.callerDid,\n targetDid: options.targetDid ?? this.metadata.targetDid,\n agentNodeDid: options.agentNodeDid ?? this.metadata.agentNodeDid,\n timestamp: options.timestamp\n };\n\n return this.client.generateCredential({\n executionContext,\n inputData: options.inputData ?? this.defaultInput,\n outputData: options.outputData,\n status: options.status,\n errorMessage: options.errorMessage,\n durationMs: options.durationMs,\n headers: options.headers\n });\n }\n\n exportAuditTrail(filters?: AuditTrailFilters): Promise<AuditTrailExport> {\n if (!this.enabled) {\n throw new Error('DID/VC features are disabled. Enable didEnabled in AgentConfig to use ctx.did.');\n }\n return this.client.exportAuditTrail(filters);\n }\n}\n","import {\n DidClient,\n type DIDIdentityPackage,\n type DIDRegistrationRequest\n} from './DidClient.js';\n\n/**\n * Manages DID registration and identity package storage for an agent.\n *\n * This class handles:\n * - Registering the agent with the DID system\n * - Storing the identity package (agent DID, reasoner DIDs, skill DIDs)\n * - Resolving DIDs for specific functions (reasoners/skills)\n */\nexport class DidManager {\n private readonly client: DidClient;\n private readonly agentNodeId: string;\n private identityPackage?: DIDIdentityPackage;\n private _enabled = false;\n\n constructor(client: DidClient, agentNodeId: string) {\n this.client = client;\n this.agentNodeId = agentNodeId;\n }\n\n /**\n * Register agent with the DID system and obtain identity package.\n *\n * @param reasoners - List of reasoner definitions\n * @param skills - List of skill definitions\n * @returns true if registration succeeded\n */\n async registerAgent(\n reasoners: Array<{ id: string; [key: string]: any }>,\n skills: Array<{ id: string; [key: string]: any }>\n ): Promise<boolean> {\n const request: DIDRegistrationRequest = {\n agentNodeId: this.agentNodeId,\n reasoners,\n skills\n };\n\n const response = await this.client.registerAgent(request);\n\n if (response.success && response.identityPackage) {\n this.identityPackage = response.identityPackage;\n this._enabled = true;\n return true;\n }\n\n console.warn(`[DID] Registration failed: ${response.error ?? 'Unknown error'}`);\n return false;\n }\n\n /**\n * Check if DID system is enabled and identity package is available.\n */\n get enabled(): boolean {\n return this._enabled && this.identityPackage !== undefined;\n }\n\n /**\n * Get the agent node DID.\n */\n getAgentDid(): string | undefined {\n return this.identityPackage?.agentDid.did;\n }\n\n /**\n * Get DID for a specific function (reasoner or skill).\n * Falls back to agent DID if function not found.\n *\n * @param functionName - Name of the reasoner or skill\n * @returns DID string or undefined if not registered\n */\n getFunctionDid(functionName: string): string | undefined {\n if (!this.identityPackage) {\n return undefined;\n }\n\n // Check reasoners first\n const reasonerDid = this.identityPackage.reasonerDids[functionName];\n if (reasonerDid) {\n return reasonerDid.did;\n }\n\n // Check skills\n const skillDid = this.identityPackage.skillDids[functionName];\n if (skillDid) {\n return skillDid.did;\n }\n\n // Fall back to agent DID\n return this.identityPackage.agentDid.did;\n }\n\n /**\n * Get the full identity package (for debugging/inspection).\n */\n getIdentityPackage(): DIDIdentityPackage | undefined {\n return this.identityPackage;\n }\n\n /**\n * Get a summary of the identity for debugging/monitoring.\n */\n getIdentitySummary(): Record<string, any> {\n if (!this.identityPackage) {\n return { enabled: false, message: 'No identity package available' };\n }\n\n return {\n enabled: true,\n agentDid: this.identityPackage.agentDid.did,\n agentfieldServerId: this.identityPackage.agentfieldServerId,\n reasonerCount: Object.keys(this.identityPackage.reasonerDids).length,\n skillCount: Object.keys(this.identityPackage.skillDids).length,\n reasonerDids: Object.fromEntries(\n Object.entries(this.identityPackage.reasonerDids).map(([name, identity]) => [name, identity.did])\n ),\n skillDids: Object.fromEntries(\n Object.entries(this.identityPackage.skillDids).map(([name, identity]) => [name, identity.did])\n )\n };\n }\n}\n","export function matchesPattern(pattern: string, value: string) {\n const escaped = pattern.replace(/[-/\\\\^$+?.()|[\\]{}]/g, '\\\\$&').replace(/\\*/g, '.*');\n const regex = new RegExp(`^${escaped}$`);\n return regex.test(value);\n}\n","import { zodToJsonSchema } from 'zod-to-json-schema';\nimport type { ZodType } from 'zod';\n\n/**\n * Check if a value is a Zod schema by looking for Zod's internal structure.\n */\nfunction isZodSchema(value: unknown): value is ZodType {\n if (!value || typeof value !== 'object') return false;\n const obj = value as Record<string, unknown>;\n // Zod schemas have _def with typeName, or ~standard with vendor: 'zod'\n return (\n ('_def' in obj && typeof obj._def === 'object') ||\n ('~standard' in obj && (obj['~standard'] as Record<string, unknown>)?.vendor === 'zod')\n );\n}\n\n/**\n * Convert a schema to JSON Schema format.\n * If the input is a Zod schema, converts it using zod-to-json-schema.\n * If the input is already a plain object (assumed to be JSON Schema), returns it as-is.\n * If the input is undefined/null, returns an empty object.\n */\nexport function toJsonSchema(schema: unknown): Record<string, unknown> {\n if (schema === undefined || schema === null) {\n return {};\n }\n\n if (isZodSchema(schema)) {\n // Convert Zod schema to JSON Schema\n // Use 'openApi3' target for better compatibility with tool calling\n const jsonSchema = zodToJsonSchema(schema, {\n target: 'openApi3',\n $refStrategy: 'none', // Inline all definitions instead of using $ref\n });\n\n // Remove the $schema property as it's not needed for tool calling\n if (typeof jsonSchema === 'object' && jsonSchema !== null) {\n const { $schema, ...rest } = jsonSchema as Record<string, unknown>;\n return rest;\n }\n return jsonSchema as Record<string, unknown>;\n }\n\n // Assume it's already a JSON Schema or plain object\n if (typeof schema === 'object') {\n return schema as Record<string, unknown>;\n }\n\n return {};\n}\n","import type { AgentFieldClient } from '../client/AgentFieldClient.js';\n\nexport interface WorkflowMetadata {\n executionId: string;\n runId?: string;\n workflowId?: string;\n agentNodeId?: string;\n reasonerId?: string;\n}\n\nexport interface WorkflowProgressOptions {\n status?: string;\n result?: Record<string, any>;\n error?: string;\n durationMs?: number;\n}\n\nexport class WorkflowReporter {\n private readonly client: AgentFieldClient;\n private readonly metadata: WorkflowMetadata;\n\n constructor(client: AgentFieldClient, metadata: WorkflowMetadata) {\n if (!metadata.executionId) {\n throw new Error('WorkflowReporter requires an executionId');\n }\n this.client = client;\n this.metadata = metadata;\n }\n\n async progress(progress: number, options?: WorkflowProgressOptions) {\n const normalized = Math.min(100, Math.max(0, Math.round(progress)));\n return this.client.updateExecutionStatus(this.metadata.executionId, {\n status: options?.status ?? 'running',\n progress: normalized,\n result: options?.result,\n error: options?.error,\n durationMs: options?.durationMs\n });\n }\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport type { MCPServerConfig } from '../types/agent.js';\nimport type { MCPTool } from '../types/mcp.js';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\n\nexport class MCPClient {\n readonly alias: string;\n readonly baseUrl: string;\n readonly transport: 'http' | 'bridge';\n private readonly http: AxiosInstance;\n private readonly devMode: boolean;\n private lastHealthy = false;\n\n constructor(config: MCPServerConfig, devMode?: boolean) {\n if (!config.alias) {\n throw new Error('MCP server alias is required');\n }\n if (!config.url && !config.port) {\n throw new Error(`MCP server \"${config.alias}\" requires a url or port`);\n }\n\n this.alias = config.alias;\n this.transport = config.transport ?? 'http';\n this.baseUrl = (config.url ?? `http://localhost:${config.port}`).replace(/\\/$/, '');\n this.http = axios.create({\n baseURL: this.baseUrl,\n headers: config.headers,\n timeout: 30000,\n httpAgent,\n httpsAgent\n });\n this.devMode = Boolean(devMode);\n }\n\n async healthCheck(): Promise<boolean> {\n try {\n await this.http.get('/health');\n this.lastHealthy = true;\n return true;\n } catch (err) {\n this.lastHealthy = false;\n if (this.devMode) {\n console.warn(`MCP health check failed for ${this.alias}:`, err instanceof Error ? err.message : err);\n }\n return false;\n }\n }\n\n async listTools(): Promise<MCPTool[]> {\n try {\n if (this.transport === 'bridge') {\n const res = await this.http.post('/mcp/tools/list');\n const tools = res.data?.tools ?? [];\n return this.normalizeTools(tools);\n }\n\n const res = await this.http.post('/mcp/v1', {\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'tools/list',\n params: {}\n });\n const tools = res.data?.result?.tools ?? [];\n return this.normalizeTools(tools);\n } catch (err) {\n if (this.devMode) {\n console.warn(`MCP listTools failed for ${this.alias}:`, err instanceof Error ? err.message : err);\n }\n return [];\n }\n }\n\n async callTool(toolName: string, arguments_: Record<string, any> = {}): Promise<any> {\n if (!toolName) {\n throw new Error('toolName is required');\n }\n\n try {\n if (this.transport === 'bridge') {\n const res = await this.http.post('/mcp/tools/call', {\n tool_name: toolName,\n arguments: arguments_\n });\n return res.data?.result ?? res.data;\n }\n\n const res = await this.http.post('/mcp/v1', {\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'tools/call',\n params: { name: toolName, arguments: arguments_ }\n });\n\n if (res.data?.error) {\n throw new Error(String(res.data.error?.message ?? res.data.error));\n }\n\n if (res.data?.result !== undefined) {\n return res.data.result;\n }\n\n return res.data;\n } catch (err) {\n if (this.devMode) {\n console.warn(`MCP callTool failed for ${this.alias}.${toolName}:`, err instanceof Error ? err.message : err);\n }\n throw err;\n }\n }\n\n get lastHealthStatus() {\n return this.lastHealthy;\n }\n\n private normalizeTools(tools: any[]): MCPTool[] {\n return (tools ?? []).map((tool) => ({\n name: tool?.name ?? 'unknown',\n description: tool?.description,\n inputSchema: tool?.inputSchema ?? tool?.input_schema,\n input_schema: tool?.input_schema\n }));\n }\n}\n","import type { MCPServerConfig } from '../types/agent.js';\nimport type { MCPHealthSummary } from '../types/mcp.js';\nimport { MCPClient } from './MCPClient.js';\n\nexport class MCPClientRegistry {\n private readonly clients = new Map<string, MCPClient>();\n private readonly devMode: boolean;\n\n constructor(devMode?: boolean) {\n this.devMode = Boolean(devMode);\n }\n\n register(config: MCPServerConfig): MCPClient {\n const client = new MCPClient(config, this.devMode);\n this.clients.set(config.alias, client);\n return client;\n }\n\n get(alias: string) {\n return this.clients.get(alias);\n }\n\n list(): MCPClient[] {\n return Array.from(this.clients.values());\n }\n\n clear(): void {\n this.clients.clear();\n }\n\n async healthSummary(): Promise<MCPHealthSummary> {\n if (!this.clients.size) {\n return {\n status: 'disabled',\n totalServers: 0,\n healthyServers: 0,\n servers: []\n };\n }\n\n const results = await Promise.all(\n Array.from(this.clients.values()).map(async (client) => {\n const healthy = await client.healthCheck();\n return {\n alias: client.alias,\n baseUrl: client.baseUrl,\n transport: client.transport,\n healthy\n };\n })\n );\n\n const healthyCount = results.filter((r) => r.healthy).length;\n const status: MCPHealthSummary['status'] =\n healthyCount === 0 ? 'degraded' : healthyCount === results.length ? 'ok' : 'degraded';\n\n return {\n status,\n totalServers: results.length,\n healthyServers: healthyCount,\n servers: results\n };\n }\n}\n","import type { Agent } from '../agent/Agent.js';\nimport type { MCPServerConfig } from '../types/agent.js';\nimport type { MCPTool, MCPToolRegistration } from '../types/mcp.js';\nimport { MCPClientRegistry } from './MCPClientRegistry.js';\n\nexport interface MCPToolRegistrarOptions {\n namespace?: string;\n tags?: string[];\n devMode?: boolean;\n}\n\nexport class MCPToolRegistrar {\n private readonly registered = new Set<string>();\n private readonly devMode: boolean;\n\n constructor(\n private readonly agent: Agent,\n private readonly registry: MCPClientRegistry,\n private readonly options: MCPToolRegistrarOptions = {}\n ) {\n this.devMode = Boolean(options.devMode);\n }\n\n registerServers(servers: MCPServerConfig[]) {\n servers.forEach((server) => this.registry.register(server));\n }\n\n async registerAll(): Promise<{ registered: MCPToolRegistration[] }> {\n const registrations: MCPToolRegistration[] = [];\n const clients = this.registry.list();\n\n for (const client of clients) {\n const healthy = await client.healthCheck();\n if (!healthy) {\n if (this.devMode) {\n console.warn(`Skipping MCP server ${client.alias} (health check failed)`);\n }\n continue;\n }\n\n const tools = await client.listTools();\n for (const tool of tools) {\n if (!tool?.name) continue;\n\n const skillName = this.buildSkillName(client.alias, tool.name);\n if (this.registered.has(skillName) || this.agent.skills.get(skillName)) {\n continue;\n }\n\n this.agent.skill(\n skillName,\n async (ctx) => {\n const args = (ctx.input && typeof ctx.input === 'object') ? (ctx.input as Record<string, any>) : {};\n const result = await client.callTool(tool.name, args);\n return {\n status: 'success',\n result,\n server: client.alias,\n tool: tool.name\n };\n },\n {\n description: tool.description ?? `MCP tool ${tool.name} from ${client.alias}`,\n inputSchema: tool.inputSchema ?? tool.input_schema ?? {},\n tags: this.buildTags(client.alias)\n }\n );\n\n this.registered.add(skillName);\n registrations.push({ server: client.alias, skillName, tool });\n if (this.devMode) {\n console.info(`Registered MCP skill ${skillName}`);\n }\n }\n }\n\n return { registered: registrations };\n }\n\n private buildTags(alias: string) {\n return Array.from(new Set(['mcp', alias, ...(this.options.tags ?? [])]));\n }\n\n private buildSkillName(serverAlias: string, toolName: string) {\n const base = [this.options.namespace, serverAlias, toolName].filter(Boolean).join('_');\n return this.sanitize(base);\n }\n\n private sanitize(value: string) {\n const collapsed = value.replace(/[^a-zA-Z0-9_]/g, '_').replace(/_+/g, '_').replace(/^_+|_+$/g, '');\n if (/^[0-9]/.test(collapsed)) {\n return `mcp_${collapsed}`;\n }\n return collapsed || 'mcp_tool';\n }\n}\n","/**\n * Local verification for AgentField SDK (TypeScript).\n *\n * Provides decentralized verification of incoming requests by caching policies,\n * revocation lists, and the admin's Ed25519 public key from the control plane.\n */\n\nimport { createHash } from 'node:crypto';\nimport axios, { type AxiosInstance } from 'axios';\n\nexport interface PolicyEntry {\n name: string;\n caller_tags: string[];\n target_tags: string[];\n allow_functions: string[];\n deny_functions: string[];\n constraints: Record<string, ConstraintEntry>;\n action: string;\n priority: number;\n enabled?: boolean;\n}\n\nexport interface ConstraintEntry {\n operator: string;\n value: number;\n}\n\nexport class LocalVerifier {\n private readonly agentFieldUrl: string;\n private readonly refreshInterval: number;\n private readonly timestampWindow: number;\n private readonly apiKey?: string;\n\n private policies: PolicyEntry[] = [];\n private revokedDids: Set<string> = new Set();\n private registeredDids: Set<string> = new Set();\n private adminPublicKeyBytes: Uint8Array | null = null;\n private issuerDid: string | null = null;\n private lastRefresh = 0;\n private initialized = false;\n\n constructor(\n agentFieldUrl: string,\n refreshInterval = 300,\n timestampWindow = 300,\n apiKey?: string,\n ) {\n this.agentFieldUrl = agentFieldUrl.replace(/\\/+$/, '');\n this.refreshInterval = refreshInterval;\n this.timestampWindow = timestampWindow;\n this.apiKey = apiKey;\n }\n\n get needsRefresh(): boolean {\n return Date.now() / 1000 - this.lastRefresh > this.refreshInterval;\n }\n\n async refresh(): Promise<boolean> {\n const headers: Record<string, string> = {};\n if (this.apiKey) {\n headers['X-API-Key'] = this.apiKey;\n }\n\n let success = true;\n\n // Fetch policies\n try {\n const resp = await axios.get(`${this.agentFieldUrl}/api/v1/policies`, {\n headers,\n timeout: 10_000,\n });\n if (resp.status !== 200) {\n success = false;\n } else {\n this.policies = resp.data?.policies ?? [];\n }\n } catch {\n success = false;\n }\n\n // Fetch revocations\n try {\n const resp = await axios.get(`${this.agentFieldUrl}/api/v1/revocations`, {\n headers,\n timeout: 10_000,\n });\n if (resp.status !== 200) {\n success = false;\n } else {\n this.revokedDids = new Set(resp.data?.revoked_dids ?? []);\n }\n } catch {\n success = false;\n }\n\n // Fetch registered DIDs\n try {\n const resp = await axios.get(`${this.agentFieldUrl}/api/v1/registered-dids`, {\n headers,\n timeout: 10_000,\n });\n if (resp.status !== 200) {\n success = false;\n } else {\n this.registeredDids = new Set(resp.data?.registered_dids ?? []);\n }\n } catch {\n success = false;\n }\n\n // Fetch admin public key\n try {\n const resp = await axios.get(`${this.agentFieldUrl}/api/v1/admin/public-key`, {\n headers,\n timeout: 10_000,\n });\n if (resp.status !== 200) {\n success = false;\n } else {\n const jwk = resp.data?.public_key_jwk;\n this.issuerDid = resp.data?.issuer_did ?? null;\n\n if (jwk?.x) {\n // Decode base64url public key (Node 15.7+ supports 'base64url' natively)\n this.adminPublicKeyBytes = new Uint8Array(Buffer.from(jwk.x, 'base64url'));\n }\n }\n } catch {\n success = false;\n }\n\n if (success) {\n this.lastRefresh = Date.now() / 1000;\n this.initialized = true;\n }\n\n return success;\n }\n\n checkRevocation(callerDid: string): boolean {\n return this.revokedDids.has(callerDid);\n }\n\n /**\n * Check if a caller DID is registered with the control plane.\n * Returns true if registered (known), false if unknown.\n * When the cache is empty (not yet loaded), returns true to avoid\n * blocking requests before the first refresh completes.\n */\n checkRegistration(callerDid: string): boolean {\n if (this.registeredDids.size === 0) {\n return true; // Cache not populated yet — allow\n }\n return this.registeredDids.has(callerDid);\n }\n\n /**\n * Resolve the public key bytes from a DID.\n *\n * For did:key, the public key is self-contained in the identifier:\n * did:key:z<base64url(0xed01 + 32-byte-pubkey)>\n *\n * For other DID methods, falls back to the admin public key.\n */\n private resolvePublicKey(callerDid: string): Uint8Array | null {\n if (callerDid.startsWith('did:key:z')) {\n try {\n const encoded = callerDid.slice('did:key:z'.length);\n const decoded = Buffer.from(encoded, 'base64url');\n // Verify Ed25519 multicodec prefix: 0xed, 0x01\n if (decoded.length >= 34 && decoded[0] === 0xed && decoded[1] === 0x01) {\n return new Uint8Array(decoded.subarray(2, 34));\n }\n return null;\n } catch {\n return null;\n }\n }\n\n // Fallback: use admin public key for non-did:key methods\n return this.adminPublicKeyBytes;\n }\n\n async verifySignature(\n callerDid: string,\n signatureB64: string,\n timestamp: string,\n body: Buffer,\n nonce?: string,\n ): Promise<boolean> {\n // Validate timestamp window\n const ts = parseInt(timestamp, 10);\n if (isNaN(ts)) return false;\n\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - ts) > this.timestampWindow) return false;\n\n // Resolve public key from the caller's DID\n const publicKeyBytes = this.resolvePublicKey(callerDid);\n if (!publicKeyBytes || publicKeyBytes.length !== 32) {\n return false;\n }\n\n try {\n const { createPublicKey, verify } = await import('node:crypto');\n\n // Reconstruct the signed payload: \"{timestamp}[:{nonce}]:{sha256(body)}\"\n // Must match the format used by SDK signing (DIDAuthenticator)\n const bodyHash = createHash('sha256').update(body).digest('hex');\n const payloadStr = nonce\n ? `${timestamp}:${nonce}:${bodyHash}`\n : `${timestamp}:${bodyHash}`;\n const payload = Buffer.from(payloadStr, 'utf-8');\n\n // Decode the signature\n const signatureBytes = Buffer.from(signatureB64, 'base64');\n\n // Create Ed25519 public key object\n const publicKey = createPublicKey({\n key: Buffer.concat([\n // Ed25519 DER prefix for a 32-byte public key\n Buffer.from('302a300506032b6570032100', 'hex'),\n Buffer.from(publicKeyBytes),\n ]),\n format: 'der',\n type: 'spki',\n });\n\n return verify(null, payload, publicKey, signatureBytes);\n } catch {\n return false;\n }\n }\n\n evaluatePolicy(\n callerTags: string[],\n targetTags: string[],\n functionName: string,\n inputParams?: Record<string, any>,\n ): boolean {\n if (!this.policies || this.policies.length === 0) {\n return false; // No policies — fail closed\n }\n\n // Sort by priority descending\n const sorted = [...this.policies].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n\n for (const policy of sorted) {\n if (policy.enabled === false) continue;\n\n // Check caller tags match\n if (policy.caller_tags?.length > 0) {\n if (!policy.caller_tags.some((t) => callerTags.includes(t))) continue;\n }\n\n // Check target tags match\n if (policy.target_tags?.length > 0) {\n if (!policy.target_tags.some((t) => targetTags.includes(t))) continue;\n }\n\n // Check deny functions first\n if (policy.deny_functions?.length > 0 && functionMatches(functionName, policy.deny_functions)) {\n return false;\n }\n\n // Check allow functions\n if (policy.allow_functions?.length > 0 && !functionMatches(functionName, policy.allow_functions)) {\n continue;\n }\n\n // Check constraints\n if (policy.constraints && inputParams) {\n if (!evaluateConstraints(policy.constraints, inputParams)) {\n return false;\n }\n }\n\n const action = policy.action || 'allow';\n return action === 'allow';\n }\n\n // No matching policy — allow by default.\n // Agent-side verification cannot resolve caller tags, so policies requiring\n // specific caller tags will never match here. The DID signature verification\n // is the primary security gate. The control plane enforces full tag-based\n // policy with caller context.\n return true;\n }\n}\n\nfunction functionMatches(name: string, patterns: string[]): boolean {\n for (const pattern of patterns) {\n if (pattern === '*') return true;\n if (pattern.endsWith('*') && name.startsWith(pattern.slice(0, -1))) return true;\n if (pattern.startsWith('*') && name.endsWith(pattern.slice(1))) return true;\n if (name === pattern) return true;\n }\n return false;\n}\n\nfunction evaluateConstraints(\n constraints: Record<string, ConstraintEntry>,\n inputParams: Record<string, any>,\n): boolean {\n for (const [paramName, constraint] of Object.entries(constraints)) {\n if (!(paramName in inputParams)) continue;\n\n const value = Number(inputParams[paramName]);\n const threshold = Number(constraint.value);\n if (isNaN(value) || isNaN(threshold)) return false;\n\n switch (constraint.operator) {\n case '<=':\n if (value > threshold) return false;\n break;\n case '>=':\n if (value < threshold) return false;\n break;\n case '<':\n if (value >= threshold) return false;\n break;\n case '>':\n if (value <= threshold) return false;\n break;\n case '==':\n if (Math.abs(value - threshold) > 1e-9) return false;\n break;\n }\n }\n return true;\n}\n","type LogEntry = {\n v: number;\n seq: number;\n ts: string;\n stream: string;\n line: string;\n level?: string;\n source?: string;\n truncated?: boolean;\n};\n\nfunction logsEnabled(): boolean {\n const v = (process.env.AGENTFIELD_LOGS_ENABLED ?? 'true').trim().toLowerCase();\n return !['0', 'false', 'no', 'off'].includes(v);\n}\n\nfunction maxBufferBytes(): number {\n const raw = parseInt(process.env.AGENTFIELD_LOG_BUFFER_BYTES ?? '4194304', 10);\n return Number.isFinite(raw) && raw >= 1024 ? raw : 4194304;\n}\n\nfunction maxLineBytes(): number {\n const raw = parseInt(process.env.AGENTFIELD_LOG_MAX_LINE_BYTES ?? '16384', 10);\n return Number.isFinite(raw) && raw >= 256 ? raw : 16384;\n}\n\nfunction maxTailLines(): number {\n const raw = parseInt(process.env.AGENTFIELD_LOG_MAX_TAIL_LINES ?? '50000', 10);\n return Number.isFinite(raw) && raw >= 1 ? raw : 50000;\n}\n\nfunction internalBearerOk(authHeader: string | undefined): boolean {\n const want = (process.env.AGENTFIELD_AUTHORIZATION_INTERNAL_TOKEN ?? '').trim();\n if (!want) return true;\n if (!authHeader?.toLowerCase().startsWith('bearer ')) return false;\n return authHeader.slice(7).trim() === want;\n}\n\nexport class ProcessLogRing {\n private seq = 0;\n private entries: LogEntry[] = [];\n private approxBytes = 0;\n private readonly maxBytes: number;\n\n constructor() {\n this.maxBytes = maxBufferBytes();\n }\n\n append(stream: string, line: string, truncated: boolean): void {\n const ts = new Date().toISOString();\n this.seq += 1;\n const sl = stream.toLowerCase();\n const level = sl === 'stderr' ? 'error' : sl === 'stdout' ? 'info' : 'log';\n const e: LogEntry = {\n v: 1,\n seq: this.seq,\n ts,\n stream,\n line,\n level,\n source: 'process',\n truncated,\n };\n this.entries.push(e);\n this.approxBytes += line.length + 64;\n while (this.approxBytes > this.maxBytes && this.entries.length > 1) {\n const old = this.entries.shift()!;\n this.approxBytes -= old.line.length + 64;\n }\n }\n\n tail(n: number): LogEntry[] {\n if (n <= 0) return [];\n return this.entries.length <= n ? [...this.entries] : this.entries.slice(-n);\n }\n\n snapshotAfter(sinceSeq: number, limit: number | null): LogEntry[] {\n const buf = this.entries.filter((e) => e.seq > sinceSeq);\n if (limit != null && limit > 0 && buf.length > limit) {\n return buf.slice(-limit);\n }\n return buf;\n }\n\n}\n\nlet captureInstalled = false;\n\nexport function installStdioLogCapture(ring: ProcessLogRing): void {\n if (captureInstalled || !logsEnabled()) return;\n captureInstalled = true;\n const maxLB = maxLineBytes();\n\n const hook = (stream: NodeJS.WriteStream, name: string) => {\n const orig = stream.write.bind(stream);\n let buf = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (stream as any).write = (chunk: any, ...args: any[]) => {\n const s =\n typeof chunk === 'string'\n ? chunk\n : Buffer.isBuffer(chunk)\n ? chunk.toString('utf8')\n : String(chunk);\n buf += s;\n let idx: number;\n while ((idx = buf.indexOf('\\n')) >= 0) {\n const line = buf.slice(0, idx);\n buf = buf.slice(idx + 1);\n let out = line;\n let trunc = false;\n if (Buffer.byteLength(out, 'utf8') > maxLB) {\n out = Buffer.from(out, 'utf8').subarray(0, maxLB).toString('utf8');\n trunc = true;\n }\n ring.append(name, out, trunc);\n }\n return orig(chunk, ...args);\n };\n };\n\n hook(process.stdout, 'stdout');\n hook(process.stderr, 'stderr');\n}\n\nexport function registerAgentfieldLogsRoute(\n app: import('express').Express,\n ring: ProcessLogRing\n): void {\n app.get('/agentfield/v1/logs', (req, res) => {\n if (!logsEnabled()) {\n return res.status(404).json({\n error: 'logs_disabled',\n message: 'Process logs API is disabled'\n });\n }\n const auth = req.headers.authorization;\n if (!internalBearerOk(auth)) {\n return res.status(401).json({\n error: 'unauthorized',\n message: 'Valid Authorization Bearer required'\n });\n }\n let tailLines = parseInt(String(req.query.tail_lines ?? '0'), 10);\n const sinceSeq = parseInt(String(req.query.since_seq ?? '0'), 10);\n const follow = ['1', 'true', 'yes'].includes(String(req.query.follow ?? '').toLowerCase());\n const cap = maxTailLines();\n if (tailLines > cap) {\n return res.status(413).json({\n error: 'tail_too_large',\n message: `tail_lines exceeds max ${cap}`\n });\n }\n if (tailLines <= 0 && sinceSeq <= 0 && !follow) tailLines = 200;\n\n let initial: LogEntry[];\n if (sinceSeq > 0) {\n initial = ring.snapshotAfter(sinceSeq, tailLines > 0 ? tailLines : null);\n } else {\n const n = tailLines > 0 ? tailLines : 200;\n initial = ring.tail(n);\n }\n\n res.setHeader('Content-Type', 'application/x-ndjson');\n res.setHeader('Cache-Control', 'no-store');\n res.status(200);\n\n const writeLines = (entries: LogEntry[]) => {\n for (const e of entries) {\n res.write(`${JSON.stringify(e)}\\n`);\n }\n (res as import('express').Response & { flush?: () => void }).flush?.();\n };\n\n writeLines(initial);\n let lastSeq = sinceSeq;\n if (initial.length) lastSeq = initial[initial.length - 1]!.seq;\n\n if (!follow) {\n return res.end();\n }\n\n const iv = setInterval(() => {\n const newer = ring.snapshotAfter(lastSeq, null);\n if (newer.length) {\n writeLines(newer);\n lastSeq = newer[newer.length - 1]!.seq;\n }\n }, 400);\n\n req.on('close', () => {\n clearInterval(iv);\n });\n });\n}\n","import express from 'express';\nimport rateLimit from 'express-rate-limit';\nimport type http from 'node:http';\nimport { randomUUID } from 'node:crypto';\nimport axios, { AxiosInstance } from 'axios';\nimport type {\n AgentConfig,\n AgentHandler,\n DeploymentType,\n HealthStatus,\n ServerlessEvent,\n ServerlessResponse\n} from '../types/agent.js';\nimport { ReasonerRegistry } from './ReasonerRegistry.js';\nimport { SkillRegistry } from './SkillRegistry.js';\nimport { AgentRouter } from '../router/AgentRouter.js';\nimport type { ReasonerHandler, ReasonerOptions } from '../types/reasoner.js';\nimport type { SkillHandler, SkillOptions } from '../types/skill.js';\nimport { ExecutionContext, type ExecutionMetadata } from '../context/ExecutionContext.js';\nimport { ReasonerContext } from '../context/ReasonerContext.js';\nimport { SkillContext } from '../context/SkillContext.js';\nimport { AIClient } from '../ai/AIClient.js';\nimport { AgentFieldClient } from '../client/AgentFieldClient.js';\nimport type { HarnessRunner } from '../harness/runner.js';\nimport type { HarnessOptions, HarnessResult } from '../harness/types.js';\nimport { MemoryClient } from '../memory/MemoryClient.js';\nimport { MemoryEventClient } from '../memory/MemoryEventClient.js';\nimport {\n MemoryInterface,\n type MemoryChangeEvent,\n type MemoryWatchHandler\n} from '../memory/MemoryInterface.js';\nimport { DidClient } from '../did/DidClient.js';\nimport { DidInterface } from '../did/DidInterface.js';\nimport { DidManager } from '../did/DidManager.js';\nimport { matchesPattern } from '../utils/pattern.js';\nimport { toJsonSchema } from '../utils/schema.js';\nimport { WorkflowReporter } from '../workflow/WorkflowReporter.js';\nimport type { DiscoveryOptions } from '../types/agent.js';\nimport type { MCPToolRegistration } from '../types/mcp.js';\nimport {\n createExecutionLogger,\n type ExecutionLogContext,\n type ExecutionLogger\n} from '../observability/ExecutionLogger.js';\nimport { MCPClientRegistry } from '../mcp/MCPClientRegistry.js';\nimport { MCPToolRegistrar } from '../mcp/MCPToolRegistrar.js';\nimport { LocalVerifier } from '../verification/LocalVerifier.js';\nimport {\n installStdioLogCapture,\n ProcessLogRing,\n registerAgentfieldLogsRoute\n} from './processLogs.js';\n\nclass TargetNotFoundError extends Error {}\n\nconst harnessRunners = new WeakMap<object, HarnessRunner>();\n\nexport class Agent {\n readonly config: AgentConfig;\n readonly app: express.Express;\n readonly reasoners = new ReasonerRegistry();\n readonly skills = new SkillRegistry();\n private server?: http.Server;\n private heartbeatTimer?: NodeJS.Timeout;\n private readonly aiClient: AIClient;\n private readonly agentFieldClient: AgentFieldClient;\n private readonly memoryClient: MemoryClient;\n private readonly memoryEventClient: MemoryEventClient;\n private readonly didClient: DidClient;\n private readonly didManager: DidManager;\n private readonly memoryWatchers: Array<{ pattern: string; handler: MemoryWatchHandler; scope?: string; scopeId?: string }> = [];\n private readonly mcpClientRegistry?: MCPClientRegistry;\n private readonly mcpToolRegistrar?: MCPToolRegistrar;\n private readonly localVerifier?: LocalVerifier;\n private readonly realtimeValidationFunctions = new Set<string>();\n private readonly processLogRing = new ProcessLogRing();\n private readonly executionLogger: ExecutionLogger;\n\n constructor(config: AgentConfig) {\n const mcp = config.mcp\n ? {\n autoRegisterTools: config.mcp.autoRegisterTools ?? true,\n ...config.mcp\n }\n : undefined;\n\n this.config = {\n port: 8001,\n agentFieldUrl: 'http://localhost:8080',\n host: '0.0.0.0',\n ...config,\n didEnabled: config.didEnabled ?? true,\n deploymentType: config.deploymentType ?? 'long_running',\n mcp\n };\n\n this.app = express();\n this.app.use(express.json());\n\n this.aiClient = new AIClient(this.config.aiConfig);\n this.agentFieldClient = new AgentFieldClient(this.config);\n this.memoryClient = new MemoryClient(this.config.agentFieldUrl!, this.config.defaultHeaders);\n this.memoryEventClient = new MemoryEventClient(this.config.agentFieldUrl!, this.config.defaultHeaders);\n this.didClient = new DidClient(this.config.agentFieldUrl!, this.config.defaultHeaders);\n this.didManager = new DidManager(this.didClient, this.config.nodeId);\n this.executionLogger = createExecutionLogger({\n contextProvider: () => this.buildExecutionLogContext(),\n transport: {\n emit: (payload) => this.agentFieldClient.publishExecutionLogs(payload)\n }\n });\n this.memoryEventClient.onEvent((event) => this.dispatchMemoryEvent(event));\n\n if (this.config.mcp?.servers?.length) {\n this.mcpClientRegistry = new MCPClientRegistry(this.config.devMode);\n this.mcpToolRegistrar = new MCPToolRegistrar(this, this.mcpClientRegistry, {\n namespace: this.config.mcp.namespace,\n tags: this.config.mcp.tags,\n devMode: this.config.devMode\n });\n this.mcpToolRegistrar.registerServers(this.config.mcp.servers);\n }\n\n // Initialize local verifier for decentralized verification\n if (this.config.localVerification && this.config.agentFieldUrl) {\n this.localVerifier = new LocalVerifier(\n this.config.agentFieldUrl,\n this.config.verificationRefreshInterval ?? 300,\n 300,\n this.config.apiKey,\n );\n }\n\n this.registerDefaultRoutes();\n installStdioLogCapture(this.processLogRing);\n registerAgentfieldLogsRoute(this.app, this.processLogRing);\n }\n\n reasoner<TInput = any, TOutput = any>(\n name: string,\n handler: ReasonerHandler<TInput, TOutput>,\n options?: ReasonerOptions\n ) {\n this.reasoners.register(name, handler, options);\n if (options?.requireRealtimeValidation) {\n this.realtimeValidationFunctions.add(name);\n }\n return this;\n }\n\n skill<TInput = any, TOutput = any>(\n name: string,\n handler: SkillHandler<TInput, TOutput>,\n options?: SkillOptions\n ) {\n this.skills.register(name, handler, options);\n if (options?.requireRealtimeValidation) {\n this.realtimeValidationFunctions.add(name);\n }\n return this;\n }\n\n includeRouter(router: AgentRouter) {\n this.reasoners.includeRouter(router);\n this.skills.includeRouter(router);\n }\n\n handler(adapter?: (event: any, context?: any) => ServerlessEvent): AgentHandler {\n return async (event: any, res?: any): Promise<ServerlessResponse | void> => {\n // If a response object is provided, treat this as a standard HTTP request (e.g., Vercel/Netlify)\n if (res && typeof res === 'object' && typeof (res as any).setHeader === 'function') {\n return this.handleHttpRequest(event as http.IncomingMessage, res as http.ServerResponse);\n }\n\n // Fallback to a generic serverless event contract (AWS Lambda, Cloud Functions, etc.)\n const normalized = adapter ? adapter(event) : (event as ServerlessEvent);\n return this.handleServerlessEvent(normalized);\n };\n }\n\n watchMemory(pattern: string | string[], handler: MemoryWatchHandler, options?: { scope?: string; scopeId?: string }) {\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n patterns.forEach((p) =>\n this.memoryWatchers.push({ pattern: p, handler, scope: options?.scope, scopeId: options?.scopeId })\n );\n this.memoryEventClient.start();\n }\n\n discover(options?: DiscoveryOptions) {\n return this.agentFieldClient.discoverCapabilities(options);\n }\n\n async registerMcpTools(): Promise<{ registered: MCPToolRegistration[] }> {\n if (!this.mcpToolRegistrar) return { registered: [] };\n return this.mcpToolRegistrar.registerAll();\n }\n\n getAIClient() {\n return this.aiClient;\n }\n\n getExecutionLogger() {\n return this.executionLogger;\n }\n\n async getHarnessRunner(): Promise<HarnessRunner> {\n const cached = harnessRunners.get(this);\n if (cached) return cached;\n const { HarnessRunner: RunnerClass } = await import('../harness/runner.js');\n const runner = new RunnerClass(this.config.harnessConfig);\n harnessRunners.set(this, runner);\n return runner;\n }\n\n async harness(prompt: string, options?: HarnessOptions): Promise<HarnessResult> {\n const runner = await this.getHarnessRunner();\n return runner.run(prompt, options ?? {});\n }\n\n getMemoryInterface(metadata?: ExecutionMetadata) {\n const defaultScope = this.config.memoryConfig?.defaultScope ?? 'workflow';\n const defaultScopeId =\n defaultScope === 'session'\n ? metadata?.sessionId\n : defaultScope === 'actor'\n ? metadata?.actorId\n : metadata?.workflowId ?? metadata?.runId ?? metadata?.sessionId ?? metadata?.actorId;\n return new MemoryInterface({\n client: this.memoryClient,\n eventClient: this.memoryEventClient,\n aiClient: this.aiClient,\n defaultScope,\n defaultScopeId,\n metadata: {\n workflowId: metadata?.workflowId ?? metadata?.runId,\n sessionId: metadata?.sessionId,\n actorId: metadata?.actorId,\n runId: metadata?.runId,\n executionId: metadata?.executionId,\n parentExecutionId: metadata?.parentExecutionId,\n callerDid: metadata?.callerDid,\n targetDid: metadata?.targetDid,\n agentNodeDid: metadata?.agentNodeDid,\n agentNodeId: this.config.nodeId\n }\n });\n }\n\n getWorkflowReporter(metadata: ExecutionMetadata) {\n return new WorkflowReporter(this.agentFieldClient, {\n executionId: metadata.executionId,\n runId: metadata.runId,\n workflowId: metadata.workflowId,\n agentNodeId: this.config.nodeId,\n reasonerId: metadata.reasonerId\n });\n }\n\n getDidInterface(metadata: ExecutionMetadata, defaultInput?: any, targetName?: string) {\n // Resolve DIDs from the identity package if available\n const agentNodeDid = metadata.agentNodeDid\n ?? this.didManager.getAgentDid()\n ?? this.config.defaultHeaders?.['X-Agent-Node-DID']?.toString();\n\n // For caller DID: use provided value, or fall back to agent DID\n const callerDid = metadata.callerDid ?? this.didManager.getAgentDid();\n\n // For target DID: use provided value, or resolve from function name\n const targetDid = metadata.targetDid\n ?? (targetName ? this.didManager.getFunctionDid(targetName) : undefined)\n ?? this.didManager.getAgentDid();\n\n return new DidInterface({\n client: this.didClient,\n metadata: {\n ...metadata,\n agentNodeDid,\n callerDid,\n targetDid\n },\n enabled: Boolean(this.config.didEnabled),\n defaultInput\n });\n }\n\n note(message: string, tags: string[] = [], metadata?: ExecutionMetadata): void {\n const execCtx = ExecutionContext.getCurrent();\n const execMetadata = metadata ?? execCtx?.metadata;\n if (!execMetadata) return;\n\n const baseUrl = (this.config.agentFieldUrl ?? 'http://localhost:8080').replace(/\\/$/, '');\n let uiApiUrl = baseUrl.replace(/\\/api\\/v1$/, '/api/ui/v1');\n if (!uiApiUrl.includes('/api/ui/v1')) {\n uiApiUrl = `${baseUrl}/api/ui/v1`;\n }\n\n this.agentFieldClient.sendNote(message, tags, this.config.nodeId, execMetadata, uiApiUrl, this.config.devMode);\n }\n\n private buildExecutionLogContext(metadata?: ExecutionMetadata): ExecutionLogContext | undefined {\n const current = metadata ?? ExecutionContext.getCurrent()?.metadata;\n if (!current) return undefined;\n\n return {\n executionId: current.executionId,\n runId: current.runId,\n workflowId: current.workflowId,\n rootWorkflowId: current.rootWorkflowId ?? current.workflowId ?? current.runId ?? current.executionId,\n parentExecutionId: current.parentExecutionId,\n sessionId: current.sessionId,\n actorId: current.actorId,\n agentNodeId: this.config.nodeId,\n reasonerId: current.reasonerId,\n callerDid: current.callerDid,\n targetDid: current.targetDid,\n agentNodeDid: current.agentNodeDid\n };\n }\n\n async serve(): Promise<void> {\n if (this.config.mcp?.autoRegisterTools !== false) {\n try {\n await this.registerMcpTools();\n } catch (err) {\n if (this.config.devMode) {\n console.warn('MCP tool registration failed', err);\n }\n }\n }\n\n await this.registerWithControlPlane();\n\n // Perform a blocking initial refresh for local verification before accepting requests\n if (this.localVerifier) {\n try {\n const ok = await this.localVerifier.refresh();\n if (!ok) {\n console.warn('[LocalVerifier] Initial refresh partially failed — some verification data may be stale');\n }\n } catch (err) {\n console.warn('[LocalVerifier] Initial refresh failed:', err);\n }\n }\n\n const port = this.config.port ?? 8001;\n const host = this.config.host ?? '0.0.0.0';\n // First heartbeat marks the node as starting; subsequent interval sets ready.\n await this.agentFieldClient.heartbeat('starting');\n await new Promise<void>((resolve, reject) => {\n this.server = this.app\n .listen(port, host, () => resolve())\n .on('error', reject);\n });\n this.memoryEventClient.start();\n this.startHeartbeat();\n }\n\n async shutdown(): Promise<void> {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n }\n await new Promise<void>((resolve, reject) => {\n this.server?.close((err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n this.memoryEventClient.stop();\n }\n\n async call(target: string, input: any) {\n const { agentId, name } = this.parseTarget(target);\n const parentMetadata = ExecutionContext.getCurrent()?.metadata;\n if (!agentId || agentId === this.config.nodeId) {\n const local = this.reasoners.get(name);\n if (!local) throw new Error(`Reasoner not found: ${name}`);\n const runId = parentMetadata?.runId ?? parentMetadata?.executionId ?? randomUUID();\n const rootWorkflowId = parentMetadata?.rootWorkflowId ?? parentMetadata?.workflowId ?? runId;\n const metadata = {\n ...parentMetadata,\n executionId: randomUUID(),\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId: parentMetadata?.workflowId ?? runId,\n rootWorkflowId,\n reasonerId: name\n };\n const dummyReq = {} as express.Request;\n const dummyRes = {} as express.Response;\n const execCtx = new ExecutionContext({\n input,\n metadata: {\n ...metadata,\n executionId: metadata.executionId ?? randomUUID()\n },\n req: dummyReq,\n res: dummyRes,\n agent: this\n });\n const startTime = Date.now();\n this.executionLogger.system('agent.call.started', 'Local agent call started', {\n target,\n reasonerId: name,\n executionId: metadata.executionId,\n parentExecutionId: metadata.parentExecutionId,\n runId: metadata.runId,\n workflowId: metadata.workflowId,\n rootWorkflowId: metadata.rootWorkflowId\n });\n\n const emitEvent = async (status: 'running' | 'succeeded' | 'failed', payload: any) => {\n await this.agentFieldClient.publishWorkflowEvent({\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId ?? execCtx.metadata.executionId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n reasonerId: name,\n agentNodeId: this.config.nodeId,\n status,\n parentExecutionId: execCtx.metadata.parentExecutionId,\n parentWorkflowId: execCtx.metadata.workflowId,\n inputData: status === 'running' ? input : undefined,\n result: status === 'succeeded' ? payload : undefined,\n error: status === 'failed' ? (payload?.message ?? String(payload)) : undefined,\n durationMs: status === 'running' ? undefined : Date.now() - startTime\n });\n };\n\n await emitEvent('running', null);\n\n return ExecutionContext.run(execCtx, async () => {\n this.executionLogger.system('execution.started', 'Execution started', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n parentExecutionId: execCtx.metadata.parentExecutionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId\n });\n this.executionLogger.system('reasoner.started', 'Reasoner execution started', {\n target: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId\n });\n try {\n const result = await local.handler(\n new ReasonerContext({\n input,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n sessionId: execCtx.metadata.sessionId,\n actorId: execCtx.metadata.actorId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n parentExecutionId: execCtx.metadata.parentExecutionId,\n reasonerId: name,\n callerDid: execCtx.metadata.callerDid,\n targetDid: execCtx.metadata.targetDid,\n agentNodeDid: execCtx.metadata.agentNodeDid,\n req: dummyReq,\n res: dummyRes,\n agent: this,\n logger: this.executionLogger,\n aiClient: this.aiClient,\n memory: this.getMemoryInterface(execCtx.metadata),\n workflow: this.getWorkflowReporter(execCtx.metadata),\n did: this.getDidInterface(execCtx.metadata, input, name)\n })\n );\n this.executionLogger.system('reasoner.completed', 'Reasoner execution completed', {\n target: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime\n });\n this.executionLogger.system('execution.completed', 'Execution completed', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime\n });\n this.executionLogger.system('agent.call.completed', 'Local agent call completed', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime\n });\n await emitEvent('succeeded', result);\n return result;\n } catch (err) {\n this.executionLogger.error('Reasoner execution failed', {\n target: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime,\n error: err instanceof Error ? err.message : String(err)\n }, {\n eventType: 'reasoner.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n this.executionLogger.error('Execution failed', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime,\n error: err instanceof Error ? err.message : String(err)\n }, {\n eventType: 'execution.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n this.executionLogger.error('Local agent call failed', {\n target,\n reasonerId: name,\n executionId: execCtx.metadata.executionId,\n runId: execCtx.metadata.runId,\n workflowId: execCtx.metadata.workflowId,\n rootWorkflowId: execCtx.metadata.rootWorkflowId,\n durationMs: Date.now() - startTime,\n error: err instanceof Error ? err.message : String(err)\n }, {\n eventType: 'agent.call.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n await emitEvent('failed', err);\n throw err;\n }\n });\n }\n\n const executionId = parentMetadata?.executionId ?? randomUUID();\n const runId = parentMetadata?.runId ?? parentMetadata?.executionId ?? executionId;\n const workflowId = parentMetadata?.workflowId ?? runId;\n const rootWorkflowId = parentMetadata?.rootWorkflowId ?? workflowId;\n this.executionLogger.system('agent.call.started', 'Remote agent call started', {\n target,\n agentNodeId: agentId,\n executionId,\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId,\n rootWorkflowId,\n reasonerId: name\n });\n\n try {\n const result = await this.agentFieldClient.execute(target, input, {\n runId,\n workflowId,\n rootWorkflowId,\n parentExecutionId: parentMetadata?.executionId,\n reasonerId: name,\n sessionId: parentMetadata?.sessionId,\n actorId: parentMetadata?.actorId,\n callerDid: parentMetadata?.callerDid,\n targetDid: parentMetadata?.targetDid,\n agentNodeDid: parentMetadata?.agentNodeDid,\n agentNodeId: this.config.nodeId\n });\n this.executionLogger.system('agent.call.completed', 'Remote agent call completed', {\n target,\n agentNodeId: agentId,\n executionId,\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId,\n rootWorkflowId,\n reasonerId: name\n });\n return result;\n } catch (err) {\n this.executionLogger.error('Remote agent call failed', {\n target,\n agentNodeId: agentId,\n executionId,\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId,\n rootWorkflowId,\n reasonerId: name,\n error: err instanceof Error ? err.message : String(err)\n }, {\n eventType: 'agent.call.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n throw err;\n }\n }\n\n private registerDefaultRoutes() {\n this.app.get('/health', (_req, res) => {\n res.json(this.health());\n });\n\n // Discovery endpoint used for serverless registration (mirrors Python behaviour)\n this.app.get('/discover', (_req, res) => {\n res.json(this.discoveryPayload(this.config.deploymentType ?? 'long_running'));\n });\n\n // MCP health probe expected by control-plane UI\n this.app.get('/health/mcp', async (_req, res) => {\n if (!this.mcpClientRegistry) {\n res.json({ status: 'disabled', totalServers: 0, healthyServers: 0, servers: [] });\n return;\n }\n\n try {\n const summary = await this.mcpClientRegistry.healthSummary();\n res.json(summary);\n } catch (err: any) {\n res.status(500).json({ status: 'error', error: err?.message ?? 'MCP health check failed' });\n }\n });\n\n this.app.get('/mcp/status', (_req, res) => {\n res.json(this.mcpStatus());\n });\n\n this.app.get('/status', (_req, res) => {\n res.json({\n ...this.health(),\n reasoners: this.reasoners.all().map((r) => r.name),\n skills: this.skills.all().map((s) => s.name)\n });\n });\n\n this.app.get('/reasoners', (_req, res) => {\n res.json(this.reasoners.all().map((r) => r.name));\n });\n\n this.app.get('/skills', (_req, res) => {\n res.json(this.skills.all().map((s) => s.name));\n });\n\n // Local verification middleware for execution endpoints\n if (this.localVerifier) {\n const verifier = this.localVerifier;\n const realtimeFunctions = this.realtimeValidationFunctions;\n\n // Rate limiter for auth endpoints: max 30 attempts per identity per 60s window.\n // Uses X-Caller-DID when present so agents behind shared NAT/gateway don't\n // exhaust each other's quota. Falls back to IP when no DID is claimed.\n const authRateLimiter = rateLimit({\n windowMs: 60_000,\n max: 30,\n standardHeaders: true,\n legacyHeaders: false,\n keyGenerator: (req) => {\n const callerDID = req.headers['x-caller-did'];\n if (typeof callerDID === 'string' && callerDID.length > 0) {\n return callerDID;\n }\n return req.ip ?? 'unknown';\n },\n message: { error: 'rate_limit_exceeded', message: 'Too many authentication attempts. Try again later.' },\n skip: (req) => {\n const path = req.path;\n if (!path.startsWith('/reasoners/') && !path.startsWith('/skills/') &&\n !path.startsWith('/execute') && !path.startsWith('/api/v1/reasoners/') &&\n !path.startsWith('/api/v1/skills/')) {\n return true;\n }\n const parts = path.replace(/^\\/+/, '').split('/');\n const funcName = parts[parts.length - 1] ?? '';\n return realtimeFunctions.has(funcName);\n },\n });\n this.app.use(authRateLimiter);\n\n this.app.use(async (req, res, next) => {\n const path = req.path;\n\n // Only verify execution endpoints\n if (!path.startsWith('/reasoners/') && !path.startsWith('/skills/') &&\n !path.startsWith('/execute') && !path.startsWith('/api/v1/reasoners/') &&\n !path.startsWith('/api/v1/skills/')) {\n return next();\n }\n\n // Extract function name\n const parts = path.replace(/^\\/+/, '').split('/');\n const funcName = parts[parts.length - 1] ?? '';\n\n // Skip for realtime-validated functions\n if (realtimeFunctions.has(funcName)) {\n return next();\n }\n\n // Refresh cache if stale\n if (verifier.needsRefresh) {\n try {\n await verifier.refresh();\n } catch (err) {\n console.warn('[LocalVerifier] Cache refresh failed:', err);\n }\n }\n\n // Extract DID auth headers\n const callerDid = req.headers['x-caller-did'] as string | undefined;\n const signature = req.headers['x-did-signature'] as string | undefined;\n const timestamp = req.headers['x-did-timestamp'] as string | undefined;\n const nonce = req.headers['x-did-nonce'] as string | undefined;\n\n // C4: Require DID authentication — fail closed when callerDid is missing\n if (!callerDid) {\n return res.status(401).json({\n error: 'did_auth_required',\n message: 'DID authentication required',\n });\n }\n\n // Check revocation\n if (verifier.checkRevocation(callerDid)) {\n return res.status(403).json({\n error: 'did_revoked',\n message: `Caller DID ${callerDid} has been revoked`,\n });\n }\n\n // Check registration — reject DIDs not registered with the control plane\n if (!verifier.checkRegistration(callerDid)) {\n return res.status(403).json({\n error: 'did_not_registered',\n message: `Caller DID ${callerDid} is not registered with the control plane`,\n });\n }\n\n // C5: Require signature when callerDid is present\n if (!signature) {\n return res.status(401).json({\n error: 'signature_required',\n message: 'DID signature required',\n });\n }\n\n // Verify signature\n if (timestamp) {\n const body = Buffer.isBuffer(req.body) ? req.body : Buffer.from(JSON.stringify(req.body));\n const valid = await verifier.verifySignature(callerDid, signature, timestamp, body, nonce);\n if (!valid) {\n return res.status(401).json({\n error: 'signature_invalid',\n message: 'DID signature verification failed',\n });\n }\n } else {\n // Timestamp is required for signature verification\n return res.status(401).json({\n error: 'signature_invalid',\n message: 'DID signature verification failed: missing timestamp',\n });\n }\n\n // C6: Evaluate access policy after successful signature verification\n // Caller tags cannot be resolved at agent-side middleware level (would require\n // a control plane lookup). Pass empty array — policies that require specific\n // caller tags will not match, which is correct fail-open behavior for\n // agent-side verification. The control plane remains the primary policy\n // enforcement point with full caller context.\n const agentTags = this.config.tags ?? [];\n const allowed = verifier.evaluatePolicy(\n [], // caller tags (not resolvable without control plane)\n agentTags, // target tags (this agent's own tags)\n funcName,\n typeof req.body === 'object' && req.body !== null ? req.body : {},\n );\n if (!allowed) {\n return res.status(403).json({\n error: 'policy_denied',\n message: 'Access denied by policy',\n });\n }\n\n next();\n });\n }\n\n this.app.post('/api/v1/reasoners/*', (req, res) => this.executeReasoner(req, res, (req.params as any)[0]));\n this.app.post('/reasoners/:name', (req, res) => this.executeReasoner(req, res, req.params.name));\n\n this.app.post('/api/v1/skills/*', (req, res) => this.executeSkill(req, res, (req.params as any)[0]));\n this.app.post('/skills/:name', (req, res) => this.executeSkill(req, res, req.params.name));\n\n // Serverless-friendly execute endpoint that accepts { target, input } or { reasoner, input }\n this.app.post('/execute', (req, res) => this.executeServerlessHttp(req, res));\n this.app.post('/execute/:name', (req, res) => this.executeServerlessHttp(req, res, req.params.name));\n }\n\n private async executeReasoner(req: express.Request, res: express.Response, name: string) {\n try {\n await this.executeInvocation({\n targetName: name,\n targetType: 'reasoner',\n input: req.body,\n metadata: this.buildMetadata(req),\n req,\n res,\n respond: true\n });\n } catch (err: any) {\n if (err instanceof TargetNotFoundError) {\n res.status(404).json({ error: err.message });\n } else {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n // Propagate upstream HTTP status (e.g. 403 from permission middleware)\n const statusCode = (err?.status >= 400) ? err.status : 500;\n res.status(statusCode).json(body);\n }\n }\n }\n\n private async executeSkill(req: express.Request, res: express.Response, name: string) {\n try {\n await this.executeInvocation({\n targetName: name,\n targetType: 'skill',\n input: req.body,\n metadata: this.buildMetadata(req),\n req,\n res,\n respond: true\n });\n } catch (err: any) {\n if (err instanceof TargetNotFoundError) {\n res.status(404).json({ error: err.message });\n } else {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n // Propagate upstream HTTP status (e.g. 403 from permission middleware)\n const statusCode = (err?.status >= 400) ? err.status : 500;\n res.status(statusCode).json(body);\n }\n }\n }\n\n private buildMetadata(req: express.Request) {\n return this.buildMetadataFromHeaders(req.headers);\n }\n\n private async executeServerlessHttp(req: express.Request, res: express.Response, explicitName?: string) {\n const invocation = this.extractInvocationDetails({\n path: req.path,\n explicitTarget: explicitName,\n query: req.query as Record<string, any>,\n body: req.body\n });\n\n if (!invocation.name) {\n res.status(400).json({ error: \"Missing 'target' or 'reasoner' in request\" });\n return;\n }\n\n try {\n const result = await this.executeInvocation({\n targetName: invocation.name,\n targetType: invocation.targetType,\n input: invocation.input,\n metadata: this.buildMetadata(req),\n req,\n res,\n respond: true\n });\n\n if (result !== undefined && !res.headersSent) {\n res.json(result);\n }\n } catch (err: any) {\n if (err instanceof TargetNotFoundError) {\n res.status(404).json({ error: err.message });\n } else {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n // Propagate upstream HTTP status (e.g. 403 from permission middleware)\n const statusCode = (err?.status >= 400) ? err.status : 500;\n res.status(statusCode).json(body);\n }\n }\n }\n\n private buildMetadataFromHeaders(\n headers: Record<string, string | string[] | undefined>,\n overrides?: Partial<ExecutionMetadata>\n ): ExecutionMetadata {\n const normalized: Record<string, string | undefined> = {};\n Object.entries(headers ?? {}).forEach(([key, value]) => {\n normalized[key.toLowerCase()] = Array.isArray(value) ? value[0] : value;\n });\n\n const executionId = overrides?.executionId ?? normalized['x-execution-id'] ?? randomUUID();\n const runId = overrides?.runId ?? normalized['x-run-id'] ?? executionId;\n const workflowId = overrides?.workflowId ?? normalized['x-workflow-id'] ?? runId;\n const rootWorkflowId =\n overrides?.rootWorkflowId ?? normalized['x-root-workflow-id'] ?? workflowId;\n\n return {\n executionId,\n runId,\n workflowId,\n rootWorkflowId,\n sessionId: overrides?.sessionId ?? normalized['x-session-id'],\n actorId: overrides?.actorId ?? normalized['x-actor-id'],\n parentExecutionId: overrides?.parentExecutionId ?? normalized['x-parent-execution-id'],\n reasonerId: overrides?.reasonerId ?? normalized['x-reasoner-id'],\n callerDid: overrides?.callerDid ?? normalized['x-caller-did'],\n targetDid: overrides?.targetDid ?? normalized['x-target-did'],\n agentNodeDid:\n overrides?.agentNodeDid ?? normalized['x-agent-node-did'] ?? normalized['x-agent-did']\n };\n }\n\n private handleHttpRequest(req: http.IncomingMessage | express.Request, res: http.ServerResponse | express.Response) {\n const handler = this.app as unknown as (req: http.IncomingMessage, res: http.ServerResponse) => void;\n return handler(req as any, res as any);\n }\n\n private async handleServerlessEvent(event: ServerlessEvent): Promise<ServerlessResponse> {\n const path = event?.path ?? event?.rawPath ?? '';\n const action = event?.action ?? '';\n\n if (path === '/discover' || action === 'discover') {\n return {\n statusCode: 200,\n headers: { 'content-type': 'application/json' },\n body: this.discoveryPayload(this.config.deploymentType ?? 'serverless')\n };\n }\n\n const body = this.normalizeEventBody(event);\n const invocation = this.extractInvocationDetails({\n path,\n query: event?.queryStringParameters,\n body,\n reasoner: event?.reasoner,\n target: event?.target,\n skill: event?.skill,\n type: event?.type\n });\n\n if (!invocation.name) {\n return {\n statusCode: 400,\n headers: { 'content-type': 'application/json' },\n body: { error: \"Missing 'target' or 'reasoner' in request\" }\n };\n }\n\n const metadata = this.buildMetadataFromHeaders(event?.headers ?? {}, this.mergeExecutionContext(event));\n\n try {\n const result = await this.executeInvocation({\n targetName: invocation.name,\n targetType: invocation.targetType,\n input: invocation.input,\n metadata\n });\n\n return { statusCode: 200, headers: { 'content-type': 'application/json' }, body: result };\n } catch (err: any) {\n if (err instanceof TargetNotFoundError) {\n return {\n statusCode: 404,\n headers: { 'content-type': 'application/json' },\n body: { error: err.message }\n };\n }\n\n return {\n statusCode: 500,\n headers: { 'content-type': 'application/json' },\n body: { error: err?.message ?? 'Execution failed' }\n };\n }\n }\n\n private normalizeEventBody(event: ServerlessEvent) {\n const parsed = this.parseBody((event as any)?.body);\n if (parsed && typeof parsed === 'object' && event?.input !== undefined && (parsed as any).input === undefined) {\n return { ...(parsed as Record<string, any>), input: event.input };\n }\n if ((parsed === undefined || parsed === null) && event?.input !== undefined) {\n return { input: event.input };\n }\n return parsed;\n }\n\n private mergeExecutionContext(event: ServerlessEvent): Partial<ExecutionMetadata> {\n const ctx = (event?.executionContext ?? (event as any)?.execution_context) as Partial<\n ExecutionMetadata & {\n execution_id?: string;\n run_id?: string;\n workflow_id?: string;\n root_workflow_id?: string;\n parent_execution_id?: string;\n reasoner_id?: string;\n session_id?: string;\n actor_id?: string;\n caller_did?: string;\n target_did?: string;\n agent_node_did?: string;\n }\n >;\n\n if (!ctx) return {};\n\n return {\n executionId: (ctx as any).executionId ?? ctx.execution_id ?? ctx.executionId,\n runId: ctx.runId ?? (ctx as any).run_id,\n workflowId: ctx.workflowId ?? (ctx as any).workflow_id,\n rootWorkflowId: ctx.rootWorkflowId ?? (ctx as any).root_workflow_id,\n parentExecutionId: ctx.parentExecutionId ?? (ctx as any).parent_execution_id,\n reasonerId: ctx.reasonerId ?? (ctx as any).reasoner_id,\n sessionId: ctx.sessionId ?? (ctx as any).session_id,\n actorId: ctx.actorId ?? (ctx as any).actor_id,\n callerDid: (ctx as any).callerDid ?? (ctx as any).caller_did,\n targetDid: (ctx as any).targetDid ?? (ctx as any).target_did,\n agentNodeDid: (ctx as any).agentNodeDid ?? (ctx as any).agent_node_did\n };\n }\n\n private extractInvocationDetails(params: {\n path?: string;\n explicitTarget?: string;\n query?: Record<string, any>;\n body?: any;\n reasoner?: string;\n target?: string;\n skill?: string;\n type?: string;\n }): { name?: string; targetType?: 'reasoner' | 'skill'; input: any } {\n const pathTarget = this.parsePathTarget(params.path);\n const name =\n this.firstDefined<string>(\n params.explicitTarget,\n pathTarget.name,\n params.query?.target,\n params.query?.reasoner,\n params.query?.skill,\n params.target,\n params.reasoner,\n params.skill,\n params.body?.target,\n params.body?.reasoner,\n params.body?.skill\n ) ?? pathTarget.name;\n\n const typeValue = (this.firstDefined<string>(\n pathTarget.targetType,\n params.type,\n params.query?.type,\n params.query?.targetType,\n params.body?.type,\n params.body?.targetType\n ) ?? undefined) as 'reasoner' | 'skill' | undefined;\n\n const input = this.normalizeInputPayload(params.body);\n\n return { name: name ?? undefined, targetType: typeValue, input };\n }\n\n private parsePathTarget(\n path?: string\n ): { name?: string; targetType?: 'reasoner' | 'skill' } {\n if (!path) return {};\n\n const normalized = path.split('?')[0];\n const reasonerMatch = normalized.match(/\\/reasoners\\/([^/]+)/);\n if (reasonerMatch?.[1]) {\n return { name: reasonerMatch[1], targetType: 'reasoner' };\n }\n\n const skillMatch = normalized.match(/\\/skills\\/([^/]+)/);\n if (skillMatch?.[1]) {\n return { name: skillMatch[1], targetType: 'skill' };\n }\n\n const executeMatch = normalized.match(/\\/execute\\/([^/]+)/);\n if (executeMatch?.[1]) {\n return { name: executeMatch[1] };\n }\n\n return {};\n }\n\n private parseBody(body: any) {\n if (body === undefined || body === null) return body;\n if (typeof body === 'string') {\n try {\n return JSON.parse(body);\n } catch {\n return body;\n }\n }\n return body;\n }\n\n private normalizeInputPayload(body: any) {\n if (body === undefined || body === null) return {};\n const parsed = this.parseBody(body);\n\n if (parsed && typeof parsed === 'object') {\n const { target, reasoner, skill, type, targetType, ...rest } = parsed as Record<string, any>;\n if ((parsed as any).input !== undefined) {\n return (parsed as any).input;\n }\n if ((parsed as any).data !== undefined) {\n return (parsed as any).data;\n }\n if (Object.keys(rest).length === 0) {\n return {};\n }\n return rest;\n }\n\n return parsed;\n }\n\n private firstDefined<T>(...values: Array<T | undefined | null>): T | undefined {\n for (const value of values) {\n if (value !== undefined && value !== null) {\n return value as T;\n }\n }\n return undefined;\n }\n\n private reasonerDefinitions() {\n return this.reasoners.all().map((r) => {\n const tags = r.options?.tags ?? [];\n return {\n id: r.name,\n input_schema: toJsonSchema(r.options?.inputSchema),\n output_schema: toJsonSchema(r.options?.outputSchema),\n memory_config: r.options?.memoryConfig ?? {\n auto_inject: [] as string[],\n memory_retention: '',\n cache_results: false\n },\n tags,\n proposed_tags: tags\n };\n });\n }\n\n private skillDefinitions() {\n return this.skills.all().map((s) => {\n const tags = s.options?.tags ?? [];\n return {\n id: s.name,\n input_schema: toJsonSchema(s.options?.inputSchema),\n tags,\n proposed_tags: tags\n };\n });\n }\n\n private discoveryPayload(deploymentType: DeploymentType) {\n return {\n node_id: this.config.nodeId,\n version: this.config.version,\n deployment_type: deploymentType,\n reasoners: this.reasonerDefinitions(),\n skills: this.skillDefinitions()\n };\n }\n\n private async executeInvocation(params: {\n targetName: string;\n targetType?: 'reasoner' | 'skill';\n input: any;\n metadata: ExecutionMetadata;\n req?: express.Request;\n res?: express.Response;\n respond?: boolean;\n }) {\n const targetType = params.targetType;\n\n if (targetType === 'skill') {\n const skill = this.skills.get(params.targetName);\n if (!skill) {\n throw new TargetNotFoundError(`Skill not found: ${params.targetName}`);\n }\n return this.runSkill(skill, params);\n }\n\n const reasoner = this.reasoners.get(params.targetName);\n if (reasoner) {\n return this.runReasoner(reasoner, params);\n }\n\n const fallbackSkill = this.skills.get(params.targetName);\n if (fallbackSkill) {\n return this.runSkill(fallbackSkill, params);\n }\n\n throw new TargetNotFoundError(`Reasoner not found: ${params.targetName}`);\n }\n\n private async runReasoner(\n reasoner: { handler: ReasonerHandler<any, any> },\n params: {\n targetName: string;\n input: any;\n metadata: ExecutionMetadata;\n req?: express.Request;\n res?: express.Response;\n respond?: boolean;\n }\n ) {\n const req = params.req ?? ({} as express.Request);\n const res = params.res ?? ({} as express.Response);\n const executionMetadata: ExecutionMetadata = {\n ...params.metadata,\n rootWorkflowId:\n params.metadata.rootWorkflowId ?? params.metadata.workflowId ?? params.metadata.runId ?? params.metadata.executionId,\n reasonerId: params.metadata.reasonerId ?? params.targetName\n };\n const execCtx = new ExecutionContext({\n input: params.input,\n metadata: executionMetadata,\n req,\n res,\n agent: this\n });\n\n return ExecutionContext.run(execCtx, async () => {\n this.executionLogger.system('execution.started', 'Execution started', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n this.executionLogger.system('reasoner.started', 'Reasoner execution started', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n try {\n const ctx = new ReasonerContext({\n input: params.input,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n sessionId: executionMetadata.sessionId,\n actorId: executionMetadata.actorId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n parentExecutionId: executionMetadata.parentExecutionId,\n reasonerId: executionMetadata.reasonerId,\n callerDid: executionMetadata.callerDid,\n targetDid: executionMetadata.targetDid,\n agentNodeDid: executionMetadata.agentNodeDid,\n req,\n res,\n agent: this,\n logger: this.executionLogger,\n aiClient: this.aiClient,\n memory: this.getMemoryInterface(executionMetadata),\n workflow: this.getWorkflowReporter(executionMetadata),\n did: this.getDidInterface(executionMetadata, params.input, params.targetName)\n });\n\n const result = await reasoner.handler(ctx);\n this.executionLogger.system('reasoner.completed', 'Reasoner execution completed', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n this.executionLogger.system('execution.completed', 'Execution completed', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n if (params.respond && params.res) {\n params.res.json(result);\n return;\n }\n return result;\n } catch (err: any) {\n this.executionLogger.error('Reasoner execution failed', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n error: err?.message ?? 'Execution failed'\n }, {\n eventType: 'reasoner.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n this.executionLogger.error('Execution failed', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n error: err?.message ?? 'Execution failed'\n }, {\n eventType: 'execution.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n if (params.respond && params.res) {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n const statusCode = (err?.status >= 400)\n ? err.status\n : ((err?.statusCode >= 400) ? err.statusCode : 500);\n params.res.status(statusCode).json(body);\n return;\n }\n throw err;\n }\n });\n }\n\n private async runSkill(\n skill: { handler: SkillHandler<any, any> },\n params: {\n targetName: string;\n input: any;\n metadata: ExecutionMetadata;\n req?: express.Request;\n res?: express.Response;\n respond?: boolean;\n }\n ) {\n const req = params.req ?? ({} as express.Request);\n const res = params.res ?? ({} as express.Response);\n const executionMetadata: ExecutionMetadata = {\n ...params.metadata,\n rootWorkflowId:\n params.metadata.rootWorkflowId ?? params.metadata.workflowId ?? params.metadata.runId ?? params.metadata.executionId,\n reasonerId: params.metadata.reasonerId ?? params.targetName\n };\n const execCtx = new ExecutionContext({\n input: params.input,\n metadata: executionMetadata,\n req,\n res,\n agent: this\n });\n\n return ExecutionContext.run(execCtx, async () => {\n this.executionLogger.system('execution.started', 'Execution started', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n this.executionLogger.system('skill.started', 'Skill execution started', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n try {\n const ctx = new SkillContext({\n input: params.input,\n executionId: executionMetadata.executionId,\n sessionId: executionMetadata.sessionId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n reasonerId: executionMetadata.reasonerId,\n req,\n res,\n agent: this,\n logger: this.executionLogger,\n memory: this.getMemoryInterface(executionMetadata),\n workflow: this.getWorkflowReporter(executionMetadata),\n did: this.getDidInterface(executionMetadata, params.input, params.targetName)\n });\n\n const result = await skill.handler(ctx);\n this.executionLogger.system('skill.completed', 'Skill execution completed', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n this.executionLogger.system('execution.completed', 'Execution completed', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId\n });\n if (params.respond && params.res) {\n params.res.json(result);\n return;\n }\n return result;\n } catch (err: any) {\n this.executionLogger.error('Skill execution failed', {\n target: params.targetName,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n error: err?.message ?? 'Execution failed'\n }, {\n eventType: 'skill.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n this.executionLogger.error('Execution failed', {\n target: params.targetName,\n reasonerId: executionMetadata.reasonerId,\n executionId: executionMetadata.executionId,\n parentExecutionId: executionMetadata.parentExecutionId,\n runId: executionMetadata.runId,\n workflowId: executionMetadata.workflowId,\n rootWorkflowId: executionMetadata.rootWorkflowId,\n error: err?.message ?? 'Execution failed'\n }, {\n eventType: 'execution.failed',\n source: 'sdk.runtime',\n systemGenerated: true\n });\n if (params.respond && params.res) {\n const body: Record<string, any> = { error: err?.message ?? 'Execution failed' };\n if (err?.responseData) body.error_details = err.responseData;\n const statusCode = (err?.status >= 400)\n ? err.status\n : ((err?.statusCode >= 400) ? err.statusCode : 500);\n params.res.status(statusCode).json(body);\n return;\n }\n throw err;\n }\n });\n }\n\n private async registerWithControlPlane() {\n try {\n const reasoners = this.reasonerDefinitions();\n const skills = this.skillDefinitions();\n\n const port = this.config.port ?? 8001;\n const hostForUrl = this.config.publicUrl\n ? undefined\n : (this.config.host && this.config.host !== '0.0.0.0' ? this.config.host : '127.0.0.1');\n const publicUrl =\n this.config.publicUrl ?? `http://${hostForUrl ?? '127.0.0.1'}:${port}`;\n\n const agentTags = this.config.tags ?? [];\n const regResponse = await this.agentFieldClient.register({\n id: this.config.nodeId,\n version: this.config.version ?? '',\n base_url: publicUrl,\n public_url: publicUrl,\n deployment_type: this.config.deploymentType ?? 'long_running',\n reasoners,\n skills,\n proposed_tags: agentTags,\n tags: agentTags\n });\n\n // Handle pending approval state: poll until approved\n if (regResponse?.status === 'pending_approval') {\n const pendingTags = regResponse.pending_tags ?? [];\n console.log(`[AgentField] Node ${this.config.nodeId} registered but awaiting tag approval (pending tags: ${pendingTags.join(', ')})`);\n await this.waitForApproval();\n console.log(`[AgentField] Node ${this.config.nodeId} tag approval granted`);\n }\n\n // Register with DID system if enabled\n if (this.config.didEnabled) {\n try {\n const didRegistered = await this.didManager.registerAgent(reasoners, skills);\n if (didRegistered) {\n const summary = this.didManager.getIdentitySummary();\n console.log(`[DID] Agent registered with DID: ${summary.agentDid}`);\n console.log(`[DID] Reasoner DIDs: ${summary.reasonerCount}, Skill DIDs: ${summary.skillCount}`);\n\n // Wire DID credentials to the HTTP client for request signing\n const pkg = this.didManager.getIdentityPackage();\n if (pkg?.agentDid?.did && pkg?.agentDid?.privateKeyJwk) {\n this.agentFieldClient.setDIDCredentials(pkg.agentDid.did, pkg.agentDid.privateKeyJwk);\n }\n }\n } catch (didErr) {\n if (!this.config.devMode) {\n console.warn('[DID] DID registration failed:', didErr);\n }\n // DID registration failure is non-fatal - agent can still operate without VCs\n }\n }\n } catch (err) {\n if (!this.config.devMode) {\n throw err;\n }\n console.warn('Control plane registration failed (devMode=true), continuing locally', err);\n }\n }\n\n private async waitForApproval(): Promise<void> {\n const pollInterval = 5000; // 5 seconds\n const timeoutMs = 5 * 60 * 1000; // 5 minutes\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n await new Promise(resolve => setTimeout(resolve, pollInterval));\n try {\n const node = await this.agentFieldClient.getNode(this.config.nodeId);\n const status = node?.lifecycle_status;\n if (status && status !== 'pending_approval') {\n return;\n }\n console.log(`[AgentField] Node ${this.config.nodeId} still pending approval...`);\n } catch (err) {\n console.warn('[AgentField] Polling for approval status failed:', err);\n }\n }\n\n throw new Error(\n `[AgentField] Node ${this.config.nodeId} approval timed out after ${timeoutMs / 1000}s`\n );\n }\n\n private startHeartbeat() {\n const interval = this.config.heartbeatIntervalMs ?? 30_000;\n if (interval <= 0) return;\n\n const tick = async () => {\n try {\n await this.agentFieldClient.heartbeat('ready');\n } catch (err) {\n console.warn('Heartbeat failed', err);\n }\n };\n\n this.heartbeatTimer = setInterval(tick, interval);\n tick();\n }\n\n private health(): HealthStatus {\n return {\n status: 'running',\n node_id: this.config.nodeId,\n version: this.config.version\n };\n }\n\n private mcpStatus() {\n const servers = this.mcpClientRegistry\n ? this.mcpClientRegistry.list().map((client) => ({\n alias: client.alias,\n baseUrl: client.baseUrl,\n transport: client.transport\n }))\n : [];\n\n const skills = this.skills\n .all()\n .filter((skill) => skill.options?.tags?.includes('mcp'))\n .map((skill) => skill.name);\n\n return {\n status: servers.length ? 'configured' : 'disabled',\n servers,\n skills\n };\n }\n\n private dispatchMemoryEvent(event: MemoryChangeEvent) {\n this.memoryWatchers.forEach(({ pattern, handler, scope, scopeId }) => {\n const scopeMatch = (!scope || scope === event.scope) && (!scopeId || scopeId === event.scopeId);\n if (scopeMatch && matchesPattern(pattern, event.key)) {\n handler(event);\n }\n });\n }\n\n private parseTarget(target: string): { agentId?: string; name: string } {\n if (!target.includes('.')) {\n return { name: target };\n }\n const [agentId, remainder] = target.split('.', 2);\n const name = remainder.replace(':', '/');\n return { agentId, name };\n }\n}\n","import type { ReasonerDefinition, ReasonerHandler, ReasonerOptions } from '../types/reasoner.js';\nimport type { SkillDefinition, SkillHandler, SkillOptions } from '../types/skill.js';\n\nexport interface AgentRouterOptions {\n prefix?: string;\n tags?: string[];\n}\n\nexport class AgentRouter {\n readonly prefix?: string;\n readonly tags?: string[];\n readonly reasoners: ReasonerDefinition[] = [];\n readonly skills: SkillDefinition[] = [];\n\n constructor(options: AgentRouterOptions = {}) {\n this.prefix = options.prefix;\n this.tags = options.tags;\n }\n\n reasoner<TInput = any, TOutput = any>(\n name: string,\n handler: ReasonerHandler<TInput, TOutput>,\n options?: ReasonerOptions\n ) {\n const fullName = this.prefix ? `${sanitize(this.prefix)}_${name}` : name;\n this.reasoners.push({ name: fullName, handler, options });\n return this;\n }\n\n skill<TInput = any, TOutput = any>(\n name: string,\n handler: SkillHandler<TInput, TOutput>,\n options?: SkillOptions\n ) {\n const fullName = this.prefix ? `${sanitize(this.prefix)}_${name}` : name;\n this.skills.push({ name: fullName, handler, options });\n return this;\n }\n}\n\nfunction sanitize(value: string) {\n return value.replace(/[^0-9a-zA-Z]+/g, '_').replace(/_+/g, '_').replace(/^_+|_+$/g, '');\n}\n","/**\n * Multimodal content helpers for AI prompts.\n * Provides Image, Audio, and File classes with factory methods for creating\n * multimodal content from various sources (files, URLs, buffers, base64).\n */\n\nimport { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\n\n// MIME type mappings for common image formats\nconst IMAGE_MIME_TYPES: Record<string, string> = {\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.png': 'image/png',\n '.gif': 'image/gif',\n '.webp': 'image/webp',\n '.bmp': 'image/bmp',\n};\n\n// MIME type mappings for common audio formats\nconst AUDIO_MIME_TYPES: Record<string, string> = {\n '.wav': 'audio/wav',\n '.mp3': 'audio/mpeg',\n '.flac': 'audio/flac',\n '.ogg': 'audio/ogg',\n};\n\n/**\n * Represents text content in a multimodal prompt.\n */\nexport class Text {\n readonly type: 'text' = 'text';\n readonly text: string;\n\n constructor(text: string) {\n this.text = text;\n }\n}\n\n/**\n * Represents image content in a multimodal prompt.\n */\nexport class Image {\n readonly type: 'image_url' = 'image_url';\n readonly imageUrl: { url: string; detail?: 'low' | 'high' | 'auto' };\n\n private constructor(imageUrl: { url: string; detail?: 'low' | 'high' | 'auto' }) {\n this.imageUrl = imageUrl;\n }\n\n /**\n * Create Image from a local file by converting to base64 data URL.\n */\n static async fromFile(\n filePath: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n ): Promise<Image> {\n const absolutePath = resolve(filePath);\n\n // Read file and encode to base64\n const buffer = await readFile(absolutePath);\n const base64Data = buffer.toString('base64');\n\n // Determine MIME type from extension\n const ext = getExtension(absolutePath).toLowerCase();\n const mimeType = IMAGE_MIME_TYPES[ext] || 'image/jpeg';\n\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new Image({ url: dataUrl, detail });\n }\n\n /**\n * Create Image from a URL.\n */\n static fromUrl(\n url: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n ): Image {\n return new Image({ url, detail });\n }\n\n /**\n * Create Image from a buffer.\n */\n static async fromBuffer(\n buffer: Buffer | Uint8Array,\n mimeType: string = 'image/jpeg',\n detail: 'low' | 'high' | 'auto' = 'high'\n ): Promise<Image> {\n const base64Data = Buffer.from(buffer).toString('base64');\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new Image({ url: dataUrl, detail });\n }\n\n /**\n * Create Image from a base64 string.\n */\n static async fromBase64(\n base64Data: string,\n mimeType: string = 'image/jpeg',\n detail: 'low' | 'high' | 'auto' = 'high'\n ): Promise<Image> {\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new Image({ url: dataUrl, detail });\n }\n}\n\n/**\n * Represents audio content in a multimodal prompt.\n */\nexport class Audio {\n readonly type: 'input_audio' = 'input_audio';\n readonly audio: { data: string; format: string };\n\n private constructor(audio: { data: string; format: string }) {\n this.audio = audio;\n }\n\n /**\n * Create Audio from a local file by converting to base64.\n */\n static async fromFile(\n filePath: string,\n format?: 'wav' | 'mp3' | 'flac' | 'ogg'\n ): Promise<Audio> {\n const absolutePath = resolve(filePath);\n\n // Auto-detect format from extension if not provided\n const ext = getExtension(absolutePath).toLowerCase().replace('.', '');\n const audioFormat =\n format ||\n (['wav', 'mp3', 'flac', 'ogg'].includes(ext) ? (ext as 'wav' | 'mp3' | 'flac' | 'ogg') : 'wav');\n\n // Read file and encode to base64\n const buffer = await readFile(absolutePath);\n const base64Data = buffer.toString('base64');\n\n return new Audio({ data: base64Data, format: audioFormat });\n }\n\n /**\n * Create Audio from a URL (downloads and converts to base64).\n */\n static async fromUrl(\n url: string,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n ): Promise<Audio> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch audio from URL: ${response.status} ${response.statusText}`);\n }\n const arrayBuffer = await response.arrayBuffer();\n const base64Data = Buffer.from(arrayBuffer).toString('base64');\n return new Audio({ data: base64Data, format });\n } catch (error) {\n if (error instanceof TypeError && error.message.includes('fetch')) {\n throw new Error('URL download requires a fetch-compatible environment');\n }\n throw error;\n }\n }\n\n /**\n * Create Audio from a buffer.\n */\n static async fromBuffer(\n buffer: Buffer | Uint8Array,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n ): Promise<Audio> {\n const base64Data = Buffer.from(buffer).toString('base64');\n return new Audio({ data: base64Data, format });\n }\n\n /**\n * Create Audio from a base64 string.\n */\n static async fromBase64(\n base64Data: string,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n ): Promise<Audio> {\n return new Audio({ data: base64Data, format });\n }\n}\n\n/**\n * Represents a generic file content in a multimodal prompt.\n */\nexport class File {\n readonly type: 'file' = 'file';\n readonly file: { url: string; mimeType?: string };\n\n private constructor(file: { url: string; mimeType?: string }) {\n this.file = file;\n }\n\n /**\n * Create File from a local file path.\n */\n static async fromFile(filePath: string, mimeType?: string): Promise<File> {\n const absolutePath = resolve(filePath);\n\n // Auto-detect MIME type if not provided\n const detectedMimeType =\n mimeType ||\n guessMimeType(absolutePath) ||\n 'application/octet-stream';\n\n const buffer = await readFile(absolutePath);\n const base64Data = buffer.toString('base64');\n const dataUrl = `data:${detectedMimeType};base64,${base64Data}`;\n return new File({ url: dataUrl, mimeType: detectedMimeType });\n }\n\n /**\n * Create File from a URL.\n */\n static fromUrl(url: string, mimeType?: string): File {\n return new File({ url, mimeType });\n }\n\n /**\n * Create File from a buffer.\n */\n static async fromBuffer(buffer: Buffer | Uint8Array, mimeType: string): Promise<File> {\n const base64Data = Buffer.from(buffer).toString('base64');\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new File({ url: dataUrl, mimeType });\n }\n\n /**\n * Create File from a base64 string.\n */\n static async fromBase64(base64Data: string, mimeType: string): Promise<File> {\n const dataUrl = `data:${mimeType};base64,${base64Data}`;\n return new File({ url: dataUrl, mimeType });\n }\n}\n\n// Utility functions\n\n/**\n * Get the file extension from a path.\n */\nfunction getExtension(filePath: string): string {\n const lastDot = filePath.lastIndexOf('.');\n if (lastDot === -1) {\n return '';\n }\n return filePath.slice(lastDot);\n}\n\n/**\n * Guess MIME type from file extension.\n */\nfunction guessMimeType(filePath: string): string | null {\n const ext = getExtension(filePath).toLowerCase();\n\n // Check image types\n if (ext in IMAGE_MIME_TYPES) {\n return IMAGE_MIME_TYPES[ext];\n }\n\n // Check audio types\n if (ext in AUDIO_MIME_TYPES) {\n return AUDIO_MIME_TYPES[ext];\n }\n\n // Common document types\n const documentMimeTypes: Record<string, string> = {\n '.pdf': 'application/pdf',\n '.doc': 'application/msword',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.xls': 'application/vnd.ms-excel',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n '.txt': 'text/plain',\n '.csv': 'text/csv',\n '.html': 'text/html',\n '.json': 'application/json',\n '.xml': 'application/xml',\n '.zip': 'application/zip',\n };\n\n return documentMimeTypes[ext] || null;\n}\n\n// Convenience factory functions\n\n/**\n * Create text content.\n */\nexport function text(content: string): Text {\n return new Text(content);\n}\n\n/**\n * Create image content from a local file.\n */\nexport async function imageFromFile(\n filePath: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n): Promise<Image> {\n return Image.fromFile(filePath, detail);\n}\n\n/**\n * Create image content from a URL.\n */\nexport function imageFromUrl(\n url: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n): Image {\n return Image.fromUrl(url, detail);\n}\n\n/**\n * Create image content from a buffer.\n */\nexport async function imageFromBuffer(\n buffer: Buffer | Uint8Array,\n mimeType: string = 'image/jpeg',\n detail: 'low' | 'high' | 'auto' = 'high'\n): Promise<Image> {\n return Image.fromBuffer(buffer, mimeType, detail);\n}\n\n/**\n * Create image content from a base64 string.\n */\nexport async function imageFromBase64(\n base64Data: string,\n mimeType?: string,\n detail: 'low' | 'high' | 'auto' = 'high'\n): Promise<Image> {\n return Image.fromBase64(base64Data, mimeType, detail);\n}\n\n/**\n * Create audio content from a local file.\n */\nexport async function audioFromFile(\n filePath: string,\n format?: 'wav' | 'mp3' | 'flac' | 'ogg'\n): Promise<Audio> {\n return Audio.fromFile(filePath, format);\n}\n\n/**\n * Create audio content from a URL.\n */\nexport async function audioFromUrl(\n url: string,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n): Promise<Audio> {\n return Audio.fromUrl(url, format);\n}\n\n/**\n * Create audio content from a buffer.\n */\nexport async function audioFromBuffer(\n buffer: Buffer | Uint8Array,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n): Promise<Audio> {\n return Audio.fromBuffer(buffer, format);\n}\n\n/**\n * Create audio content from a base64 string.\n */\nexport async function audioFromBase64(\n base64Data: string,\n format: 'wav' | 'mp3' | 'flac' | 'ogg' = 'wav'\n): Promise<Audio> {\n return Audio.fromBase64(base64Data, format);\n}\n\n/**\n * Create file content from a local file.\n */\nexport async function fileFromPath(filePath: string, mimeType?: string): Promise<File> {\n return File.fromFile(filePath, mimeType);\n}\n\n/**\n * Create file content from a URL.\n */\nexport function fileFromUrl(url: string, mimeType?: string): File {\n return File.fromUrl(url, mimeType);\n}\n\n/**\n * Create file content from a buffer.\n */\nexport async function fileFromBuffer(buffer: Buffer | Uint8Array, mimeType: string): Promise<File> {\n return File.fromBuffer(buffer, mimeType);\n}\n\n/**\n * Create file content from a base64 string.\n */\nexport async function fileFromBase64(base64Data: string, mimeType: string): Promise<File> {\n return File.fromBase64(base64Data, mimeType);\n}\n\n// Type for all multimodal content types\nexport type MultimodalContent = Text | Image | Audio | File;\n","/**\n * Multimodal response classes for handling LLM multimodal outputs.\n * Provides seamless integration with audio, image, and file outputs while maintaining backward compatibility.\n */\n\nimport { promises as fs } from 'fs';\nimport * as path from 'path';\n\n/**\n * Represents image output from LLM with convenient access methods.\n */\nexport interface ImageOutput {\n /** URL to image */\n url?: string;\n /** Base64-encoded image data */\n b64Json?: string;\n /** Revised prompt used for generation */\n revisedPrompt?: string;\n}\n\n/**\n * Represents audio output from LLM with convenient access methods.\n */\nexport interface AudioOutput {\n /** Base64-encoded audio data */\n data?: string;\n /** Audio format (wav, mp3, etc.) */\n format: string;\n /** URL to audio file if available */\n url?: string;\n}\n\n/**\n * Represents generic file output from LLM.\n */\nexport interface FileOutput {\n /** URL to file */\n url?: string;\n /** Base64-encoded file data */\n data?: string;\n /** MIME type of file */\n mimeType?: string;\n /** Suggested filename */\n filename?: string;\n}\n\n/**\n * Enhanced response object that provides seamless access to multimodal content\n * while maintaining backward compatibility with string responses.\n */\nexport class MultimodalResponse {\n private _text: string;\n private _audio: AudioOutput | null;\n private _images: ImageOutput[];\n private _files: FileOutput[];\n private _rawResponse: unknown;\n private _costUsd: number | null;\n private _usage: {\n promptTokens?: number;\n completionTokens?: number;\n totalTokens?: number;\n };\n\n constructor(\n text: string = '',\n audio: AudioOutput | null = null,\n images: ImageOutput[] = [],\n files: FileOutput[] = [],\n rawResponse: unknown = null,\n costUsd: number | null = null,\n usage: { promptTokens?: number; completionTokens?: number; totalTokens?: number } = {}\n ) {\n this._text = text;\n this._audio = audio;\n this._images = images;\n this._files = files;\n this._rawResponse = rawResponse;\n this._costUsd = costUsd;\n this._usage = usage;\n }\n\n /**\n * Get text content.\n */\n get text(): string {\n return this._text;\n }\n\n /**\n * Get audio output if available.\n */\n get audio(): AudioOutput | null {\n return this._audio;\n }\n\n /**\n * Get list of image outputs.\n */\n get images(): ImageOutput[] {\n return this._images;\n }\n\n /**\n * Get list of file outputs.\n */\n get files(): FileOutput[] {\n return this._files;\n }\n\n /**\n * Check if response contains audio.\n */\n hasAudio(): boolean {\n return this._audio !== null;\n }\n\n /**\n * Check if response contains images.\n */\n hasImage(): boolean {\n return this._images.length > 0;\n }\n\n /**\n * Check if response contains files.\n */\n hasFile(): boolean {\n return this._files.length > 0;\n }\n\n /**\n * Check if response contains any multimodal content.\n */\n isMultimodal(): boolean {\n return this.hasAudio() || this.hasImage() || this.hasFile();\n }\n\n /**\n * Get the raw LLM response object.\n */\n get rawResponse(): unknown {\n return this._rawResponse;\n }\n\n /**\n * Estimated cost of this LLM call in USD, if available.\n */\n get costUsd(): number | null {\n return this._costUsd;\n }\n\n /**\n * Token usage breakdown.\n */\n get usage(): { promptTokens?: number; completionTokens?: number; totalTokens?: number } {\n return this._usage;\n }\n\n /**\n * Get all images.\n * Alias for images property for API consistency.\n */\n getImages(): ImageOutput[] {\n return this._images;\n }\n\n /**\n * Get audio.\n * Alias for audio property for API consistency.\n */\n getAudio(): AudioOutput | null {\n return this._audio;\n }\n\n /**\n * Get all files.\n * Alias for files property for API consistency.\n */\n getFiles(): FileOutput[] {\n return this._files;\n }\n\n /**\n * Get raw image bytes from an ImageOutput.\n */\n private decodeBase64(data: string): Uint8Array {\n return new Uint8Array(Buffer.from(data, 'base64'));\n }\n\n private async getUrlBytes(sourceUrl: string): Promise<Uint8Array> {\n if (sourceUrl.startsWith('data:')) {\n const base64Data = sourceUrl.split(',', 2)[1];\n if (!base64Data) {\n throw new Error('Invalid data URL');\n }\n return this.decodeBase64(base64Data);\n }\n\n const response = await fetch(sourceUrl);\n if (!response.ok) {\n throw new Error(`Failed to download multimodal asset: ${response.status} ${response.statusText}`);\n }\n const arrayBuffer = await response.arrayBuffer();\n return new Uint8Array(arrayBuffer);\n }\n\n private async getImageBytes(image: ImageOutput): Promise<Uint8Array> {\n if (image.b64Json) {\n return this.decodeBase64(image.b64Json);\n } else if (image.url) {\n return this.getUrlBytes(image.url);\n }\n throw new Error('No image data available');\n }\n\n /**\n * Get raw audio bytes from an AudioOutput.\n */\n private async getAudioBytes(audio: AudioOutput): Promise<Uint8Array> {\n if (audio.data) {\n return this.decodeBase64(audio.data);\n }\n if (audio.url) {\n return this.getUrlBytes(audio.url);\n }\n throw new Error('No audio data available');\n }\n\n /**\n * Get raw file bytes from a FileOutput.\n */\n private async getFileBytes(file: FileOutput): Promise<Uint8Array> {\n if (file.data) {\n return this.decodeBase64(file.data);\n }\n if (file.url) {\n return this.getUrlBytes(file.url);\n }\n throw new Error('No file data available');\n }\n\n /**\n * Save a single image to file.\n */\n async saveImage(image: ImageOutput, imagePath: string): Promise<void> {\n const bytes = await this.getImageBytes(image);\n await fs.mkdir(path.dirname(imagePath), { recursive: true });\n await fs.writeFile(imagePath, bytes);\n }\n\n /**\n * Save a single audio to file.\n */\n async saveAudio(audio: AudioOutput, audioPath: string): Promise<void> {\n const bytes = await this.getAudioBytes(audio);\n await fs.mkdir(path.dirname(audioPath), { recursive: true });\n await fs.writeFile(audioPath, bytes);\n }\n\n /**\n * Save a single file to disk.\n */\n async saveFile(file: FileOutput, filePath: string): Promise<void> {\n const bytes = await this.getFileBytes(file);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, bytes);\n }\n\n /**\n * Save all multimodal content to a directory.\n * Returns a dict mapping content type to saved file paths.\n */\n async save(outputDir: string, prefix: string = 'output'): Promise<Record<string, string>> {\n const savedFiles: Record<string, string> = {};\n\n // Ensure output directory exists\n await fs.mkdir(outputDir, { recursive: true });\n\n // Save audio\n if (this._audio) {\n const audioPath = path.join(outputDir, `${prefix}_audio.${this._audio.format}`);\n await this.saveAudio(this._audio, audioPath);\n savedFiles['audio'] = audioPath;\n }\n\n // Save images\n for (let i = 0; i < this._images.length; i++) {\n const image = this._images[i];\n // Determine extension from URL or default to png\n let ext = 'png';\n if (image.url) {\n const urlExt = path.extname(image.url).slice(1);\n if (urlExt) ext = urlExt;\n }\n const imagePath = path.join(outputDir, `${prefix}_image_${i}.${ext}`);\n await this.saveImage(image, imagePath);\n savedFiles[`image_${i}`] = imagePath;\n }\n\n // Save files\n for (let i = 0; i < this._files.length; i++) {\n const file = this._files[i];\n const filename = file.filename || `${prefix}_file_${i}`;\n const filePath = path.join(outputDir, filename);\n await this.saveFile(file, filePath);\n savedFiles[`file_${i}`] = filePath;\n }\n\n // Save text content\n if (this._text) {\n const textPath = path.join(outputDir, `${prefix}_text.txt`);\n await fs.writeFile(textPath, this._text, 'utf-8');\n savedFiles['text'] = textPath;\n }\n\n return savedFiles;\n }\n\n /**\n * String representation for backward compatibility.\n */\n toString(): string {\n return this._text;\n }\n\n /**\n * Developer-friendly representation.\n */\n toJSON(): object {\n const parts: string[] = [];\n if (this._audio) parts.push(`audio=${this._audio.format}`);\n if (this._images.length > 0) parts.push(`images=${this._images.length}`);\n if (this._files.length > 0) parts.push(`files=${this._files.length}`);\n return {\n text: this._text,\n audio: this._audio,\n images: this._images,\n files: this._files,\n _debug: `MultimodalResponse(${parts.join(', ')})`\n };\n }\n}\n\n/**\n * Create a MultimodalResponse from raw LLM response data.\n * Handles multiple formats: OpenRouter, OpenAI, and generic patterns.\n */\nexport function createMultimodalResponse(\n rawResponse: unknown,\n text: string = ''\n): MultimodalResponse {\n let audio: AudioOutput | null = null;\n let images: ImageOutput[] = [];\n let files: FileOutput[] = [];\n\n // Extract images from response\n const extractedImages = extractImages(rawResponse);\n if (extractedImages.length > 0) {\n images = extractedImages;\n }\n\n // Extract audio from response\n const extractedAudio = extractAudio(rawResponse);\n if (extractedAudio) {\n audio = extractedAudio;\n }\n\n // Extract files from response\n const extractedFiles = extractFiles(rawResponse);\n if (extractedFiles.length > 0) {\n files = extractedFiles;\n }\n\n return new MultimodalResponse(text, audio, images, files, rawResponse);\n}\n\n/**\n * Extract images from various data structures.\n */\nfunction extractImages(data: unknown): ImageOutput[] {\n const images: ImageOutput[] = [];\n\n if (!data) return images;\n\n // Handle array of images\n if (Array.isArray(data)) {\n for (const item of data) {\n const extracted = extractSingleImage(item);\n if (extracted) images.push(extracted);\n }\n return images;\n }\n\n // Handle object with image data\n if (typeof data === 'object') {\n const obj = data as Record<string, unknown>;\n\n // Check for images array\n if (Array.isArray(obj.images)) {\n for (const img of obj.images) {\n const extracted = extractSingleImage(img);\n if (extracted) images.push(extracted);\n }\n }\n\n // Check for image_url structure (OpenRouter pattern)\n if (obj.image_url) {\n const extracted = extractSingleImage(obj.image_url);\n if (extracted) images.push(extracted);\n }\n\n // Check for direct url/b64_json\n if (obj.url || obj.b64_json || obj.b64Json) {\n const extracted = extractSingleImage(obj);\n if (extracted) images.push(extracted);\n }\n }\n\n return images;\n}\n\n/**\n * Extract a single image from data.\n */\nfunction extractSingleImage(data: unknown): ImageOutput | null {\n if (!data) return null;\n\n if (typeof data === 'string') {\n // Direct URL string\n if (data.startsWith('http') || data.startsWith('data:')) {\n return { url: data };\n }\n return null;\n }\n\n if (typeof data === 'object') {\n const obj = data as Record<string, unknown>;\n\n // Handle image_url nested structure\n if (obj.image_url) {\n const imageUrl = obj.image_url as Record<string, unknown>;\n const url = imageUrl.url as string | undefined;\n if (url) {\n // Handle data URLs\n if (url.startsWith('data:image')) {\n const base64Data = url.split(',', 2)[1];\n return { url, b64Json: base64Data || undefined };\n }\n return { url };\n }\n }\n\n // Direct url/b64_json\n const url = (obj.url || obj.image_url) as string | undefined;\n const b64Json = (obj.b64_json || obj.b64Json) as string | undefined;\n const revisedPrompt = (obj.revised_prompt || obj.revisedPrompt) as string | undefined;\n\n if (url || b64Json) {\n return { url, b64Json, revisedPrompt };\n }\n }\n\n return null;\n}\n\n/**\n * Extract audio from response data.\n */\nfunction extractAudio(data: unknown): AudioOutput | null {\n if (!data || typeof data !== 'object') return null;\n\n const obj = data as Record<string, unknown>;\n\n // Check for audio object\n if (obj.audio && typeof obj.audio === 'object') {\n const audio = obj.audio as Record<string, unknown>;\n return {\n data: audio.data as string | undefined,\n format: (audio.format as string) || 'wav',\n url: audio.url as string | undefined\n };\n }\n\n // Check for input_audio structure\n if (obj.input_audio && typeof obj.input_audio === 'object') {\n const inputAudio = obj.input_audio as Record<string, unknown>;\n return {\n data: inputAudio.data as string | undefined,\n format: (inputAudio.format as string) || 'wav'\n };\n }\n\n return null;\n}\n\n/**\n * Extract files from response data.\n */\nfunction extractFiles(data: unknown): FileOutput[] {\n const files: FileOutput[] = [];\n\n if (!data) return files;\n\n if (typeof data === 'object') {\n const obj = data as Record<string, unknown>;\n\n // Check for files array\n if (Array.isArray(obj.files)) {\n for (const file of obj.files) {\n const extracted = extractSingleFile(file);\n if (extracted) files.push(extracted);\n }\n }\n }\n\n return files;\n}\n\n/**\n * Extract a single file from data.\n */\nfunction extractSingleFile(data: unknown): FileOutput | null {\n if (!data || typeof data !== 'object') return null;\n\n const obj = data as Record<string, unknown>;\n\n const url = obj.url as string | undefined;\n const data_b64 = obj.data as string | undefined;\n const mimeType = (obj.mime_type || obj.mimeType) as string | undefined;\n const filename = obj.filename as string | undefined;\n\n if (url || data_b64) {\n return { url, data: data_b64, mimeType, filename };\n }\n\n return null;\n}\n","export type { HarnessConfig, HarnessOptions, Metrics, RawResult, HarnessResult } from './types.js';\nexport { createHarnessResult, createMetrics, createRawResult } from './types.js';\nexport type { HarnessProvider } from './providers/base.js';\nexport { buildProvider, SUPPORTED_PROVIDERS } from './providers/factory.js';\nexport { HarnessRunner } from './runner.js';\n","/**\n * Canonical execution status utilities for the AgentField TypeScript SDK.\n *\n * Mirrors the control plane's status normalization and terminal-state logic\n * so that SDK consumers can classify execution statuses consistently.\n */\n\n/** Canonical execution status values used by the control plane. */\nexport const ExecutionStatus = {\n PENDING: 'pending',\n QUEUED: 'queued',\n WAITING: 'waiting',\n RUNNING: 'running',\n SUCCEEDED: 'succeeded',\n FAILED: 'failed',\n CANCELLED: 'cancelled',\n TIMEOUT: 'timeout',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type ExecutionStatusValue = (typeof ExecutionStatus)[keyof typeof ExecutionStatus];\n\n/** All canonical status strings. */\nexport const CANONICAL_STATUSES: ReadonlySet<string> = new Set<string>(\n Object.values(ExecutionStatus)\n);\n\n/** Statuses that represent a completed execution (no further transitions). */\nexport const TERMINAL_STATUSES: ReadonlySet<string> = new Set<string>([\n ExecutionStatus.SUCCEEDED,\n ExecutionStatus.FAILED,\n ExecutionStatus.CANCELLED,\n ExecutionStatus.TIMEOUT,\n]);\n\n/** Statuses that represent an active, pollable execution. */\nexport const ACTIVE_STATUSES: ReadonlySet<string> = new Set<string>([\n ExecutionStatus.PENDING,\n ExecutionStatus.QUEUED,\n ExecutionStatus.WAITING,\n ExecutionStatus.RUNNING,\n]);\n\n/** Human-friendly aliases that map to canonical statuses. */\nconst STATUS_ALIASES: Record<string, string> = {\n success: 'succeeded',\n successful: 'succeeded',\n completed: 'succeeded',\n complete: 'succeeded',\n done: 'succeeded',\n ok: 'succeeded',\n error: 'failed',\n failure: 'failed',\n errored: 'failed',\n canceled: 'cancelled',\n cancel: 'cancelled',\n timed_out: 'timeout',\n wait: 'queued',\n awaiting_approval: 'waiting',\n awaiting_human: 'waiting',\n approval_pending: 'waiting',\n in_progress: 'running',\n processing: 'running',\n};\n\n/**\n * Normalize an arbitrary status string to its canonical form.\n *\n * Returns `\"unknown\"` for unrecognized or empty values.\n */\nexport function normalizeStatus(status: string | null | undefined): string {\n if (status == null) return 'unknown';\n const normalized = status.trim().toLowerCase();\n if (!normalized) return 'unknown';\n if (CANONICAL_STATUSES.has(normalized)) return normalized;\n return STATUS_ALIASES[normalized] ?? 'unknown';\n}\n\n/** Return `true` if the status represents a terminal (completed) execution. */\nexport function isTerminal(status: string | null | undefined): boolean {\n return TERMINAL_STATUSES.has(normalizeStatus(status));\n}\n\n/** Return `true` if the status represents an active, pollable execution. */\nexport function isActive(status: string | null | undefined): boolean {\n return ACTIVE_STATUSES.has(normalizeStatus(status));\n}\n","/**\n * Approval workflow helpers for the AgentField TypeScript SDK.\n *\n * Provides methods to request human approval for an execution,\n * poll for approval status, and wait until resolved.\n */\n\nimport axios, { type AxiosInstance } from 'axios';\nimport { httpAgent, httpsAgent } from '../utils/httpAgents.js';\n\n/** Payload sent when requesting approval. */\nexport interface RequestApprovalPayload {\n title?: string;\n description?: string;\n templateType?: string;\n payload?: Record<string, any>;\n projectId: string;\n expiresInHours?: number;\n}\n\n/** Response from the control plane after creating an approval request. */\nexport interface ApprovalRequestResponse {\n approvalRequestId: string;\n approvalRequestUrl: string;\n}\n\n/** Approval status returned by the polling endpoint. */\nexport interface ApprovalStatusResponse {\n status: 'pending' | 'approved' | 'rejected' | 'expired';\n response?: Record<string, any>;\n requestUrl?: string;\n requestedAt?: string;\n respondedAt?: string;\n}\n\n/** Options for the blocking `waitForApproval` helper. */\nexport interface WaitForApprovalOptions {\n /** Initial polling interval in milliseconds (default: 5000). */\n pollIntervalMs?: number;\n /** Maximum polling interval in milliseconds (default: 60000). */\n maxIntervalMs?: number;\n /** Total timeout in milliseconds (default: unlimited). */\n timeoutMs?: number;\n}\n\nexport class ApprovalClient {\n private readonly http: AxiosInstance;\n private readonly nodeId: string;\n private readonly headers: Record<string, string>;\n\n constructor(opts: {\n baseURL: string;\n nodeId: string;\n apiKey?: string;\n headers?: Record<string, string>;\n }) {\n this.http = axios.create({\n baseURL: opts.baseURL.replace(/\\/$/, ''),\n timeout: 30_000,\n httpAgent,\n httpsAgent,\n });\n this.nodeId = opts.nodeId;\n\n const merged: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.apiKey) {\n merged['X-API-Key'] = opts.apiKey;\n }\n this.headers = merged;\n }\n\n /**\n * Request human approval, transitioning the execution to `waiting`.\n *\n * Calls `POST /api/v1/agents/{node}/executions/{id}/request-approval`.\n */\n async requestApproval(\n executionId: string,\n payload: RequestApprovalPayload\n ): Promise<ApprovalRequestResponse> {\n const body = {\n title: payload.title ?? 'Approval Request',\n description: payload.description ?? '',\n template_type: payload.templateType ?? 'plan-review-v1',\n payload: payload.payload ?? {},\n project_id: payload.projectId,\n expires_in_hours: payload.expiresInHours ?? 72,\n };\n\n const res = await this.http.post(\n `/api/v1/agents/${encodeURIComponent(this.nodeId)}/executions/${encodeURIComponent(executionId)}/request-approval`,\n body,\n { headers: { ...this.headers, 'Content-Type': 'application/json' } }\n );\n\n return {\n approvalRequestId: res.data.approval_request_id ?? '',\n approvalRequestUrl: res.data.approval_request_url ?? '',\n };\n }\n\n /**\n * Get the current approval status for an execution.\n *\n * Calls `GET /api/v1/agents/{node}/executions/{id}/approval-status`.\n */\n async getApprovalStatus(executionId: string): Promise<ApprovalStatusResponse> {\n const res = await this.http.get(\n `/api/v1/agents/${encodeURIComponent(this.nodeId)}/executions/${encodeURIComponent(executionId)}/approval-status`,\n { headers: this.headers }\n );\n\n const data = res.data;\n return {\n status: data.status ?? 'pending',\n response: data.response,\n requestUrl: data.request_url,\n requestedAt: data.requested_at,\n respondedAt: data.responded_at,\n };\n }\n\n /**\n * Poll approval status with exponential backoff until resolved.\n *\n * Returns once the status is no longer `pending` (i.e. approved, rejected,\n * or expired).\n */\n async waitForApproval(\n executionId: string,\n opts?: WaitForApprovalOptions\n ): Promise<ApprovalStatusResponse> {\n const pollInterval = opts?.pollIntervalMs ?? 5_000;\n const maxInterval = opts?.maxIntervalMs ?? 60_000;\n const timeout = opts?.timeoutMs;\n const backoffFactor = 2;\n\n const startTime = Date.now();\n let interval = pollInterval;\n\n while (true) {\n if (timeout != null && Date.now() - startTime >= timeout) {\n throw new Error(\n `Approval for execution ${executionId} timed out after ${timeout}ms`\n );\n }\n\n await sleep(interval);\n\n let data: ApprovalStatusResponse;\n try {\n data = await this.getApprovalStatus(executionId);\n } catch {\n // Transient failure — back off and retry\n interval = Math.min(interval * backoffFactor, maxInterval);\n continue;\n }\n\n if (data.status !== 'pending') {\n return data;\n }\n\n interval = Math.min(interval * backoffFactor, maxInterval);\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"]}