@agentfield/sdk 0.1.42 → 0.1.43
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.d.ts +37 -3
- package/dist/index.js +590 -56
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/agent/ReasonerRegistry.ts","../src/agent/SkillRegistry.ts","../src/context/ExecutionContext.ts","../src/context/ReasonerContext.ts","../src/context/SkillContext.ts","../src/ai/RateLimiter.ts","../src/ai/AIClient.ts","../src/utils/httpAgents.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/agent/Agent.ts","../src/router/AgentRouter.ts"],"names":["parsed","call","response","axios","res","tools","metadata"],"mappings":"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","file":"index.js","sourcesContent":["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';\n\nexport interface ExecutionMetadata {\n executionId: string;\n runId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n parentExecutionId?: 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 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","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';\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 parentExecutionId?: 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 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 parentExecutionId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n req: express.Request;\n res: express.Response;\n agent: Agent;\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.parentExecutionId = params.parentExecutionId;\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.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?: AIRequestOptions): Promise<string>;\n ai(prompt: string, options?: AIRequestOptions): Promise<unknown> {\n return this.aiClient.generate(prompt, options);\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 parentExecutionId: this.parentExecutionId,\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 parentExecutionId: metadata.parentExecutionId,\n callerDid: metadata.callerDid,\n targetDid: metadata.targetDid,\n agentNodeDid: metadata.agentNodeDid,\n req,\n res,\n agent,\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';\n\nexport class SkillContext<TInput = any> {\n readonly input: TInput;\n readonly executionId: string;\n readonly sessionId?: string;\n readonly workflowId?: 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 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 callerDid?: string;\n agentNodeDid?: string;\n req: express.Request;\n res: express.Response;\n agent: Agent;\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.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.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 callerDid: metadata.callerDid,\n agentNodeDid: metadata.agentNodeDid,\n req,\n res,\n agent,\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 ?? 20;\n this.baseDelay = options.baseDelay ?? 1.0;\n this.maxDelay = options.maxDelay ?? 300.0;\n this.jitterFactor = options.jitterFactor ?? 0.25;\n this.circuitBreakerThreshold = options.circuitBreakerThreshold ?? 10;\n this.circuitBreakerTimeout = options.circuitBreakerTimeout ?? 300;\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 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\n const openrouter = createOpenAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl ?? 'https://openrouter.ai/api/v1'\n });\n return openrouter(modelName);\n }\n\n case 'ollama': {\n // Ollama is OpenAI-compatible\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(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 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 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 { httpAgent, httpsAgent } from '../utils/httpAgents.js';\n\nexport interface ExecutionStatusUpdate {\n status?: string;\n result?: Record<string, any>;\n error?: string;\n durationMs?: number;\n progress?: number;\n}\n\nexport class AgentFieldClient {\n private readonly http: AxiosInstance;\n private readonly config: AgentConfig;\n private readonly defaultHeaders: Record<string, string>;\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 }\n\n async register(payload: any) {\n await this.http.post('/api/v1/nodes/register', payload, { headers: this.mergeHeaders() });\n }\n\n async heartbeat(status: 'starting' | 'ready' | 'degraded' | 'offline' = 'ready'): Promise<HealthStatus> {\n const nodeId = this.config.nodeId;\n const res = await this.http.post(\n `/api/v1/nodes/${nodeId}/heartbeat`,\n {\n status,\n timestamp: new Date().toISOString()\n },\n { headers: this.mergeHeaders() }\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 parentExecutionId?: 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?.parentExecutionId) headers['X-Parent-Execution-ID'] = metadata.parentExecutionId;\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 res = await this.http.post(\n `/api/v1/execute/${target}`,\n {\n input\n },\n { headers: this.mergeHeaders(headers) }\n );\n return (res.data?.result as T) ?? res.data;\n }\n\n async publishWorkflowEvent(event: {\n executionId: string;\n runId: string;\n workflowId?: string;\n reasonerId: string;\n agentNodeId: string;\n status: 'running' | 'succeeded' | 'failed';\n parentExecutionId?: string;\n parentWorkflowId?: 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 reasoner_id: event.reasonerId,\n type: event.reasonerId,\n agent_node_id: event.agentNodeId,\n status: event.status,\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 request = this.http\n .post('/api/v1/workflow/executions/events', payload, {\n headers: this.mergeHeaders(),\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 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 };\n\n await this.http.post(`/api/v1/executions/${executionId}/status`, payload, { headers: this.mergeHeaders() });\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 parentExecutionId?: 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.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 return headers;\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 parentExecutionId?: 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 headers = this.mergeHeaders({\n 'content-type': 'application/json',\n ...executionHeaders\n });\n\n const request = axios\n .post(`${uiApiBaseUrl}/executions/note`, payload, {\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 MemoryClient {\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 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 private 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","import WebSocket from 'ws';\nimport type { MemoryChangeEvent } from './MemoryInterface.js';\n\nexport type MemoryEventHandler = (event: MemoryChangeEvent) => Promise<void> | void;\n\nexport class MemoryEventClient {\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\n constructor(baseUrl: string, headers?: Record<string, string | number | boolean | undefined>) {\n this.url = `${baseUrl.replace(/^http/, 'ws')}/api/v1/memory/events/ws`;\n this.headers = this.buildForwardHeaders(headers ?? {});\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","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","import express from 'express';\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 { 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 { MCPClientRegistry } from '../mcp/MCPClientRegistry.js';\nimport { MCPToolRegistrar } from '../mcp/MCPToolRegistrar.js';\n\nclass TargetNotFoundError extends Error {}\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\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.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 this.registerDefaultRoutes();\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 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 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 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 });\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 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 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 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 parentMetadata = ExecutionContext.getCurrent()?.metadata;\n const runId = parentMetadata?.runId ?? parentMetadata?.executionId ?? randomUUID();\n const metadata = {\n ...parentMetadata,\n executionId: randomUUID(),\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId: parentMetadata?.workflowId ?? runId\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\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 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 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 parentExecutionId: execCtx.metadata.parentExecutionId,\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 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 await emitEvent('succeeded', result);\n return result;\n } catch (err) {\n await emitEvent('failed', err);\n throw err;\n }\n });\n }\n\n const metadata = ExecutionContext.getCurrent()?.metadata;\n return this.agentFieldClient.execute(target, input, {\n runId: metadata?.runId ?? metadata?.executionId,\n workflowId: metadata?.workflowId ?? metadata?.runId,\n parentExecutionId: metadata?.executionId,\n sessionId: metadata?.sessionId,\n actorId: metadata?.actorId,\n callerDid: metadata?.callerDid,\n targetDid: metadata?.targetDid,\n agentNodeDid: metadata?.agentNodeDid,\n agentNodeId: this.config.nodeId\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 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 res.status(500).json({ error: err?.message ?? 'Execution failed' });\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 res.status(500).json({ error: err?.message ?? 'Execution failed' });\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 res.status(500).json({ error: err?.message ?? 'Execution failed' });\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\n return {\n executionId,\n runId,\n workflowId,\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 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 parent_execution_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 parentExecutionId: ctx.parentExecutionId ?? (ctx as any).parent_execution_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 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: r.options?.tags ?? []\n }));\n }\n\n private skillDefinitions() {\n return this.skills.all().map((s) => ({\n id: s.name,\n input_schema: toJsonSchema(s.options?.inputSchema),\n tags: s.options?.tags ?? []\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 execCtx = new ExecutionContext({\n input: params.input,\n metadata: params.metadata,\n req,\n res,\n agent: this\n });\n\n return ExecutionContext.run(execCtx, async () => {\n try {\n const ctx = new ReasonerContext({\n input: params.input,\n executionId: params.metadata.executionId,\n runId: params.metadata.runId,\n sessionId: params.metadata.sessionId,\n actorId: params.metadata.actorId,\n workflowId: params.metadata.workflowId,\n parentExecutionId: params.metadata.parentExecutionId,\n callerDid: params.metadata.callerDid,\n targetDid: params.metadata.targetDid,\n agentNodeDid: params.metadata.agentNodeDid,\n req,\n res,\n agent: this,\n aiClient: this.aiClient,\n memory: this.getMemoryInterface(params.metadata),\n workflow: this.getWorkflowReporter(params.metadata),\n did: this.getDidInterface(params.metadata, params.input, params.targetName)\n });\n\n const result = await reasoner.handler(ctx);\n if (params.respond && params.res) {\n params.res.json(result);\n return;\n }\n return result;\n } catch (err: any) {\n if (params.respond && params.res) {\n params.res.status(500).json({ error: err?.message ?? 'Execution failed' });\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 execCtx = new ExecutionContext({\n input: params.input,\n metadata: params.metadata,\n req,\n res,\n agent: this\n });\n\n return ExecutionContext.run(execCtx, async () => {\n try {\n const ctx = new SkillContext({\n input: params.input,\n executionId: params.metadata.executionId,\n sessionId: params.metadata.sessionId,\n workflowId: params.metadata.workflowId,\n req,\n res,\n agent: this,\n memory: this.getMemoryInterface(params.metadata),\n workflow: this.getWorkflowReporter(params.metadata),\n did: this.getDidInterface(params.metadata, params.input, params.targetName)\n });\n\n const result = await skill.handler(ctx);\n if (params.respond && params.res) {\n params.res.json(result);\n return;\n }\n return result;\n } catch (err: any) {\n if (params.respond && params.res) {\n params.res.status(500).json({ error: err?.message ?? 'Execution failed' });\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 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 });\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 } 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 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"]}
|
|
1
|
+
{"version":3,"sources":["../src/agent/ReasonerRegistry.ts","../src/agent/SkillRegistry.ts","../src/context/ExecutionContext.ts","../src/context/ReasonerContext.ts","../src/context/SkillContext.ts","../src/ai/RateLimiter.ts","../src/ai/AIClient.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/Agent.ts","../src/router/AgentRouter.ts"],"names":["crypto","parsed","call","response","axios","Buffer","res","tools","metadata"],"mappings":"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","file":"index.js","sourcesContent":["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';\n\nexport interface ExecutionMetadata {\n executionId: string;\n runId?: string;\n sessionId?: string;\n actorId?: string;\n workflowId?: string;\n parentExecutionId?: 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 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","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';\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 parentExecutionId?: 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 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 parentExecutionId?: string;\n callerDid?: string;\n targetDid?: string;\n agentNodeDid?: string;\n req: express.Request;\n res: express.Response;\n agent: Agent;\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.parentExecutionId = params.parentExecutionId;\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.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?: AIRequestOptions): Promise<string>;\n ai(prompt: string, options?: AIRequestOptions): Promise<unknown> {\n return this.aiClient.generate(prompt, options);\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 parentExecutionId: this.parentExecutionId,\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 parentExecutionId: metadata.parentExecutionId,\n callerDid: metadata.callerDid,\n targetDid: metadata.targetDid,\n agentNodeDid: metadata.agentNodeDid,\n req,\n res,\n agent,\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';\n\nexport class SkillContext<TInput = any> {\n readonly input: TInput;\n readonly executionId: string;\n readonly sessionId?: string;\n readonly workflowId?: 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 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 callerDid?: string;\n agentNodeDid?: string;\n req: express.Request;\n res: express.Response;\n agent: Agent;\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.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.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 callerDid: metadata.callerDid,\n agentNodeDid: metadata.agentNodeDid,\n req,\n res,\n agent,\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 ?? 20;\n this.baseDelay = options.baseDelay ?? 1.0;\n this.maxDelay = options.maxDelay ?? 300.0;\n this.jitterFactor = options.jitterFactor ?? 0.25;\n this.circuitBreakerThreshold = options.circuitBreakerThreshold ?? 10;\n this.circuitBreakerTimeout = options.circuitBreakerTimeout ?? 300;\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 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\n const openrouter = createOpenAI({\n apiKey: this.config.apiKey,\n baseURL: this.config.baseUrl ?? 'https://openrouter.ai/api/v1'\n });\n return openrouter(modelName);\n }\n\n case 'ollama': {\n // Ollama is OpenAI-compatible\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(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 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 { 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}\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 parentExecutionId?: 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?.parentExecutionId) headers['X-Parent-Execution-ID'] = metadata.parentExecutionId;\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 reasonerId: string;\n agentNodeId: string;\n status: 'running' | 'succeeded' | 'failed';\n parentExecutionId?: string;\n parentWorkflowId?: 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 reasoner_id: event.reasonerId,\n type: event.reasonerId,\n agent_node_id: event.agentNodeId,\n status: event.status,\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 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 };\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 parentExecutionId?: 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.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 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 parentExecutionId?: 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 MemoryClient {\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 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 private 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","import WebSocket from 'ws';\nimport type { MemoryChangeEvent } from './MemoryInterface.js';\n\nexport type MemoryEventHandler = (event: MemoryChangeEvent) => Promise<void> | void;\n\nexport class MemoryEventClient {\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\n constructor(baseUrl: string, headers?: Record<string, string | number | boolean | undefined>) {\n this.url = `${baseUrl.replace(/^http/, 'ws')}/api/v1/memory/events/ws`;\n this.headers = this.buildForwardHeaders(headers ?? {});\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","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","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 { 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 { MCPClientRegistry } from '../mcp/MCPClientRegistry.js';\nimport { MCPToolRegistrar } from '../mcp/MCPToolRegistrar.js';\nimport { LocalVerifier } from '../verification/LocalVerifier.js';\n\nclass TargetNotFoundError extends Error {}\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\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.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 }\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 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 });\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 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 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 parentMetadata = ExecutionContext.getCurrent()?.metadata;\n const runId = parentMetadata?.runId ?? parentMetadata?.executionId ?? randomUUID();\n const metadata = {\n ...parentMetadata,\n executionId: randomUUID(),\n parentExecutionId: parentMetadata?.executionId,\n runId,\n workflowId: parentMetadata?.workflowId ?? runId\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\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 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 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 parentExecutionId: execCtx.metadata.parentExecutionId,\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 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 await emitEvent('succeeded', result);\n return result;\n } catch (err) {\n await emitEvent('failed', err);\n throw err;\n }\n });\n }\n\n const metadata = ExecutionContext.getCurrent()?.metadata;\n return this.agentFieldClient.execute(target, input, {\n runId: metadata?.runId ?? metadata?.executionId,\n workflowId: metadata?.workflowId ?? metadata?.runId,\n parentExecutionId: metadata?.executionId,\n sessionId: metadata?.sessionId,\n actorId: metadata?.actorId,\n callerDid: metadata?.callerDid,\n targetDid: metadata?.targetDid,\n agentNodeDid: metadata?.agentNodeDid,\n agentNodeId: this.config.nodeId\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\n return {\n executionId,\n runId,\n workflowId,\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 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 parent_execution_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 parentExecutionId: ctx.parentExecutionId ?? (ctx as any).parent_execution_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 execCtx = new ExecutionContext({\n input: params.input,\n metadata: params.metadata,\n req,\n res,\n agent: this\n });\n\n return ExecutionContext.run(execCtx, async () => {\n try {\n const ctx = new ReasonerContext({\n input: params.input,\n executionId: params.metadata.executionId,\n runId: params.metadata.runId,\n sessionId: params.metadata.sessionId,\n actorId: params.metadata.actorId,\n workflowId: params.metadata.workflowId,\n parentExecutionId: params.metadata.parentExecutionId,\n callerDid: params.metadata.callerDid,\n targetDid: params.metadata.targetDid,\n agentNodeDid: params.metadata.agentNodeDid,\n req,\n res,\n agent: this,\n aiClient: this.aiClient,\n memory: this.getMemoryInterface(params.metadata),\n workflow: this.getWorkflowReporter(params.metadata),\n did: this.getDidInterface(params.metadata, params.input, params.targetName)\n });\n\n const result = await reasoner.handler(ctx);\n if (params.respond && params.res) {\n params.res.json(result);\n return;\n }\n return result;\n } catch (err: any) {\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 execCtx = new ExecutionContext({\n input: params.input,\n metadata: params.metadata,\n req,\n res,\n agent: this\n });\n\n return ExecutionContext.run(execCtx, async () => {\n try {\n const ctx = new SkillContext({\n input: params.input,\n executionId: params.metadata.executionId,\n sessionId: params.metadata.sessionId,\n workflowId: params.metadata.workflowId,\n req,\n res,\n agent: this,\n memory: this.getMemoryInterface(params.metadata),\n workflow: this.getWorkflowReporter(params.metadata),\n did: this.getDidInterface(params.metadata, params.input, params.targetName)\n });\n\n const result = await skill.handler(ctx);\n if (params.respond && params.res) {\n params.res.json(result);\n return;\n }\n return result;\n } catch (err: any) {\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"]}
|