@agentfield/sdk 0.1.24 → 0.1.25-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -38,3 +38,18 @@ import { StatelessRateLimiter } from '@agentfield/sdk';
|
|
|
38
38
|
const limiter = new StatelessRateLimiter({ maxRetries: 3, baseDelay: 0.5 });
|
|
39
39
|
const result = await limiter.executeWithRetry(() => makeAiCall());
|
|
40
40
|
```
|
|
41
|
+
|
|
42
|
+
## Execution Notes
|
|
43
|
+
|
|
44
|
+
Log execution progress with `ctx.note(message: string, tags?: string[])` for fire-and-forget debugging in the AgentField UI.
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
agent.reasoner('process', async (ctx) => {
|
|
48
|
+
ctx.note('Starting processing', ['debug']);
|
|
49
|
+
const result = await processData(ctx.input);
|
|
50
|
+
ctx.note(`Completed: ${result.length} items`, ['info']);
|
|
51
|
+
return result;
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Use `note()` for AgentField UI tracking, `console.log()` for local debugging.**
|
package/dist/index.d.ts
CHANGED
|
@@ -196,6 +196,18 @@ declare class AgentFieldClient {
|
|
|
196
196
|
private mapCompactDiscovery;
|
|
197
197
|
private sanitizeHeaders;
|
|
198
198
|
private mergeHeaders;
|
|
199
|
+
private buildExecutionHeaders;
|
|
200
|
+
sendNote(message: string, tags: string[], agentNodeId: string, metadata: {
|
|
201
|
+
runId?: string;
|
|
202
|
+
executionId?: string;
|
|
203
|
+
sessionId?: string;
|
|
204
|
+
actorId?: string;
|
|
205
|
+
workflowId?: string;
|
|
206
|
+
parentExecutionId?: string;
|
|
207
|
+
callerDid?: string;
|
|
208
|
+
targetDid?: string;
|
|
209
|
+
agentNodeDid?: string;
|
|
210
|
+
}, uiApiBaseUrl: string, devMode?: boolean): void;
|
|
199
211
|
}
|
|
200
212
|
|
|
201
213
|
interface WorkflowMetadata {
|
|
@@ -437,6 +449,7 @@ declare class ReasonerContext<TInput = any> {
|
|
|
437
449
|
aiStream(prompt: string, options?: AIRequestOptions): Promise<AIStream>;
|
|
438
450
|
call(target: string, input: any): Promise<any>;
|
|
439
451
|
discover(options?: DiscoveryOptions): Promise<DiscoveryResult>;
|
|
452
|
+
note(message: string, tags?: string[]): void;
|
|
440
453
|
}
|
|
441
454
|
declare function getCurrentContext<TInput = any>(): ReasonerContext<TInput> | undefined;
|
|
442
455
|
|
|
@@ -755,6 +768,7 @@ declare class Agent {
|
|
|
755
768
|
getMemoryInterface(metadata?: ExecutionMetadata): MemoryInterface;
|
|
756
769
|
getWorkflowReporter(metadata: ExecutionMetadata): WorkflowReporter;
|
|
757
770
|
getDidInterface(metadata: ExecutionMetadata, defaultInput?: any, targetName?: string): DidInterface;
|
|
771
|
+
note(message: string, tags?: string[], metadata?: ExecutionMetadata): void;
|
|
758
772
|
serve(): Promise<void>;
|
|
759
773
|
shutdown(): Promise<void>;
|
|
760
774
|
call(target: string, input: any): Promise<any>;
|
package/dist/index.js
CHANGED
|
@@ -126,6 +126,19 @@ var ReasonerContext = class {
|
|
|
126
126
|
discover(options) {
|
|
127
127
|
return this.agent.discover(options);
|
|
128
128
|
}
|
|
129
|
+
note(message, tags = []) {
|
|
130
|
+
this.agent.note(message, tags, {
|
|
131
|
+
executionId: this.executionId,
|
|
132
|
+
runId: this.runId,
|
|
133
|
+
sessionId: this.sessionId,
|
|
134
|
+
actorId: this.actorId,
|
|
135
|
+
workflowId: this.workflowId,
|
|
136
|
+
parentExecutionId: this.parentExecutionId,
|
|
137
|
+
callerDid: this.callerDid,
|
|
138
|
+
targetDid: this.targetDid,
|
|
139
|
+
agentNodeDid: this.agentNodeDid
|
|
140
|
+
});
|
|
141
|
+
}
|
|
129
142
|
};
|
|
130
143
|
function getCurrentContext() {
|
|
131
144
|
const execution = ExecutionContext.getCurrent();
|
|
@@ -815,6 +828,39 @@ var AgentFieldClient = class {
|
|
|
815
828
|
...this.sanitizeHeaders(headers ?? {})
|
|
816
829
|
};
|
|
817
830
|
}
|
|
831
|
+
buildExecutionHeaders(metadata) {
|
|
832
|
+
const headers = {};
|
|
833
|
+
if (metadata.runId) headers["x-run-id"] = metadata.runId;
|
|
834
|
+
if (metadata.executionId) headers["x-execution-id"] = metadata.executionId;
|
|
835
|
+
if (metadata.sessionId) headers["x-session-id"] = metadata.sessionId;
|
|
836
|
+
if (metadata.actorId) headers["x-actor-id"] = metadata.actorId;
|
|
837
|
+
if (metadata.workflowId) headers["x-workflow-id"] = metadata.workflowId;
|
|
838
|
+
if (metadata.parentExecutionId) headers["x-parent-execution-id"] = metadata.parentExecutionId;
|
|
839
|
+
if (metadata.callerDid) headers["x-caller-did"] = metadata.callerDid;
|
|
840
|
+
if (metadata.targetDid) headers["x-target-did"] = metadata.targetDid;
|
|
841
|
+
if (metadata.agentNodeDid) headers["x-agent-node-did"] = metadata.agentNodeDid;
|
|
842
|
+
if (metadata.agentNodeId) headers["x-agent-node-id"] = metadata.agentNodeId;
|
|
843
|
+
return headers;
|
|
844
|
+
}
|
|
845
|
+
sendNote(message, tags, agentNodeId, metadata, uiApiBaseUrl, devMode) {
|
|
846
|
+
const payload = {
|
|
847
|
+
message,
|
|
848
|
+
tags: tags ?? [],
|
|
849
|
+
timestamp: Date.now() / 1e3,
|
|
850
|
+
agent_node_id: agentNodeId
|
|
851
|
+
};
|
|
852
|
+
const executionHeaders = this.buildExecutionHeaders({ ...metadata, agentNodeId });
|
|
853
|
+
const headers = this.mergeHeaders({
|
|
854
|
+
"content-type": "application/json",
|
|
855
|
+
...executionHeaders
|
|
856
|
+
});
|
|
857
|
+
const uiHttp = axios.create({ baseURL: uiApiBaseUrl });
|
|
858
|
+
uiHttp.post("/executions/note", payload, {
|
|
859
|
+
headers,
|
|
860
|
+
timeout: devMode ? 5e3 : 1e4
|
|
861
|
+
}).catch(() => {
|
|
862
|
+
});
|
|
863
|
+
}
|
|
818
864
|
};
|
|
819
865
|
var MemoryClient = class {
|
|
820
866
|
http;
|
|
@@ -1885,6 +1931,17 @@ var Agent = class {
|
|
|
1885
1931
|
defaultInput
|
|
1886
1932
|
});
|
|
1887
1933
|
}
|
|
1934
|
+
note(message, tags = [], metadata) {
|
|
1935
|
+
const execCtx = ExecutionContext.getCurrent();
|
|
1936
|
+
const execMetadata = metadata ?? execCtx?.metadata;
|
|
1937
|
+
if (!execMetadata) return;
|
|
1938
|
+
const baseUrl = (this.config.agentFieldUrl ?? "http://localhost:8080").replace(/\/$/, "");
|
|
1939
|
+
let uiApiUrl = baseUrl.replace(/\/api\/v1$/, "/api/ui/v1");
|
|
1940
|
+
if (!uiApiUrl.includes("/api/ui/v1")) {
|
|
1941
|
+
uiApiUrl = `${baseUrl}/api/ui/v1`;
|
|
1942
|
+
}
|
|
1943
|
+
this.agentFieldClient.sendNote(message, tags, this.config.nodeId, execMetadata, uiApiUrl, this.config.devMode);
|
|
1944
|
+
}
|
|
1888
1945
|
async serve() {
|
|
1889
1946
|
if (this.config.mcp?.autoRegisterTools !== false) {
|
|
1890
1947
|
try {
|
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/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/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\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 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';\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(/\\/$/, '');\n this.http = axios.create({ baseURL });\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","import axios, { AxiosInstance, isAxiosError } from 'axios';\nimport type { MemoryScope } from '../types/agent.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 });\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 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.ws?.close();\n }\n\n private connect() {\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 this.ws.on('close', () => this.scheduleReconnect());\n this.ws.on('error', () => this.scheduleReconnect());\n }\n\n private scheduleReconnect() {\n if (this.closed) return;\n setTimeout(() => {\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';\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({ baseURL: baseUrl.replace(/\\/$/, '') });\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 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';\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 });\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 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 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 { 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 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: r.options?.inputSchema ?? {},\n output_schema: 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: 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 if (!this.config.devMode) {\n console.warn('Heartbeat failed', err);\n }\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/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/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 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';\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(/\\/$/, '');\n this.http = axios.create({ baseURL });\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 uiHttp = axios.create({ baseURL: uiApiBaseUrl });\n const request = uiHttp\n .post('/executions/note', payload, {\n headers,\n timeout: devMode ? 5000 : 10000\n })\n .catch(() => {});\n void request;\n }\n}\n","import axios, { AxiosInstance, isAxiosError } from 'axios';\nimport type { MemoryScope } from '../types/agent.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 });\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 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.ws?.close();\n }\n\n private connect() {\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 this.ws.on('close', () => this.scheduleReconnect());\n this.ws.on('error', () => this.scheduleReconnect());\n }\n\n private scheduleReconnect() {\n if (this.closed) return;\n setTimeout(() => {\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';\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({ baseURL: baseUrl.replace(/\\/$/, '') });\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 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';\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 });\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 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 { 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: r.options?.inputSchema ?? {},\n output_schema: 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: 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 if (!this.config.devMode) {\n console.warn('Heartbeat failed', err);\n }\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"]}
|