@opperai/agents 0.1.1 → 0.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/base/result.ts","../src/base/tool.ts","../src/base/context.ts","../src/utils/logger.ts","../src/base/hooks.ts","../src/base/agent.ts","../src/memory/memory.ts","../src/index.ts","../src/core/schemas.ts","../package.json","../src/utils/version.ts","../src/opper/client.ts","../src/utils/schema-utils.ts","../src/core/agent.ts","../src/mcp/client.ts","../src/mcp/config.ts","../src/mcp/provider.ts","../src/utils/tool-decorators.ts","../src/utils/tool-runner.ts"],"names":["Result","ok","err","ToolMetadataSchema","ToolCallRecordSchema","ToolResultSuccessSchema","ToolResultFailureSchema","ToolResultSchema","ToolResultFactory","createToolCallRecord","validateToolInput","coerceToolDefinition","isToolProvider","normalizeToolEntries","z","randomUUID","AgentContext","ExecutionCycleSchema","UsageSchema","LogLevel","tool","Opper","zodToJsonSchema","Client","StdioClientTransport","options","headers","StreamableHTTPClientTransport","SSEClientTransport","propertyKey","callTargetRef","toolMetadata","target"],"mappings":"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","file":"index.cjs","sourcesContent":["export type Result<T, E = Error> = Success<T> | Failure<E>;\n\nexport interface Success<T> {\n readonly ok: true;\n readonly value: T;\n}\n\nexport interface Failure<E> {\n readonly ok: false;\n readonly error: E;\n}\n\nexport const Result = {\n ok<T>(value: T): Success<T> {\n return { ok: true, value };\n },\n\n err<E>(error: E): Failure<E> {\n return { ok: false, error };\n },\n\n isOk<T, E>(result: Result<T, E>): result is Success<T> {\n return result.ok;\n },\n\n isErr<T, E>(result: Result<T, E>): result is Failure<E> {\n return !result.ok;\n },\n\n map<T, E, U>(result: Result<T, E>, mapper: (value: T) => U): Result<U, E> {\n if (result.ok) {\n return Result.ok(mapper(result.value));\n }\n\n return result;\n },\n\n mapError<T, E, F>(\n result: Result<T, E>,\n mapper: (error: E) => F,\n ): Result<T, F> {\n if (!result.ok) {\n return Result.err(mapper(result.error));\n }\n\n return result;\n },\n\n unwrapOr<T, E>(result: Result<T, E>, fallback: T): T {\n return result.ok ? result.value : fallback;\n },\n};\n\nexport const ok = Result.ok;\nexport const err = Result.err;\n","import { randomUUID } from \"node:crypto\";\nimport type { ZodType, ZodTypeAny } from \"zod\";\nimport { z } from \"zod\";\n\nimport type { BaseAgent } from \"./agent\";\nimport type { AgentContext } from \"./context\";\nimport { err, ok, type Result } from \"./result\";\n\nexport const ToolMetadataSchema = z.record(z.string(), z.unknown());\n\nexport const ToolCallRecordSchema = z.object({\n id: z\n .string()\n .optional()\n .default(() => randomUUID()),\n toolName: z.string(),\n input: z.unknown(),\n output: z.unknown().optional(),\n success: z.boolean().optional(),\n error: z\n .union([z.string(), z.object({ message: z.string() }).passthrough()])\n .optional(),\n startedAt: z.number().default(() => Date.now()),\n finishedAt: z.number().optional(),\n metadata: ToolMetadataSchema.default({}),\n});\n\nexport type ToolCallRecord = z.infer<typeof ToolCallRecordSchema>;\n\nconst toolResultBaseSchema = z.object({\n toolName: z.string(),\n metadata: ToolMetadataSchema.default({}),\n startedAt: z.number().optional(),\n finishedAt: z.number().optional(),\n});\n\nexport const ToolResultSuccessSchema = toolResultBaseSchema\n .extend({\n success: z.literal(true),\n output: z.any(),\n })\n .refine((data) => data.output !== undefined, {\n message: \"output is required\",\n });\n\nexport const ToolResultFailureSchema = toolResultBaseSchema.extend({\n success: z.literal(false),\n error: z.union([z.string(), z.instanceof(Error)]),\n});\n\nexport const ToolResultSchema = z.union([\n ToolResultSuccessSchema,\n ToolResultFailureSchema,\n]);\n\nexport type ToolResultData = z.infer<typeof ToolResultSchema>;\n\nexport interface ToolExecutionContext {\n agentContext: AgentContext;\n signal?: AbortSignal;\n metadata?: Record<string, unknown>;\n /**\n * Span ID for this tool execution (used as parent for nested operations)\n */\n spanId?: string;\n}\n\nexport interface ToolSuccess<TOutput> {\n success: true;\n toolName: string;\n output: TOutput;\n metadata: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n}\n\nexport interface ToolFailure {\n success: false;\n toolName: string;\n error: Error | string;\n metadata: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n}\n\nexport type ToolResult<TOutput = unknown> = ToolSuccess<TOutput> | ToolFailure;\n\nexport interface ToolDefinition<TInput, TOutput> {\n name: string;\n description?: string;\n schema?: ZodType<TInput>;\n execute: (\n input: TInput,\n context: ToolExecutionContext,\n ) => MaybePromise<ToolResult<TOutput>>;\n metadata?: Record<string, unknown>;\n timeoutMs?: number;\n}\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport type Tool<TInput, TOutput> = ToolDefinition<TInput, TOutput>;\n\nexport interface ToolProvider {\n setup(\n agent: BaseAgent<unknown, unknown>,\n ): Promise<Array<Tool<unknown, unknown>>>;\n teardown(): Promise<void>;\n}\n\nexport interface ToolResultInit {\n metadata?: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n}\n\nexport const ToolResultFactory = {\n success<TOutput>(\n toolName: string,\n output: TOutput,\n init: ToolResultInit = {},\n ): ToolSuccess<TOutput> {\n const result: ToolSuccess<TOutput> = {\n success: true,\n toolName,\n output,\n ...(init.startedAt !== undefined && { startedAt: init.startedAt }),\n finishedAt: init.finishedAt ?? Date.now(),\n metadata: init.metadata ?? {},\n };\n\n // Validate with schema\n ToolResultSuccessSchema.parse(result);\n\n return result;\n },\n\n failure(\n toolName: string,\n error: Error | string,\n init: ToolResultInit = {},\n ): ToolFailure {\n const result: ToolFailure = {\n success: false,\n toolName,\n error,\n ...(init.startedAt !== undefined && { startedAt: init.startedAt }),\n finishedAt: init.finishedAt ?? Date.now(),\n metadata: init.metadata ?? {},\n };\n\n // Validate with schema\n ToolResultFailureSchema.parse(result);\n\n return result;\n },\n\n isSuccess<TOutput>(\n result: ToolResult<TOutput>,\n ): result is ToolSuccess<TOutput> {\n return result.success;\n },\n\n isFailure<TOutput>(result: ToolResult<TOutput>): result is ToolFailure {\n return !result.success;\n },\n};\n\nexport const createToolCallRecord = (\n input: Partial<ToolCallRecord>,\n): ToolCallRecord => ToolCallRecordSchema.parse(input);\n\nexport const validateToolInput = <TSchema extends ZodTypeAny>(\n schema: TSchema,\n payload: unknown,\n): Result<z.infer<TSchema>, z.ZodError<z.infer<TSchema>>> => {\n const parsed = schema.safeParse(payload);\n if (!parsed.success) {\n return err(parsed.error);\n }\n\n return ok(parsed.data);\n};\n\nexport const coerceToolDefinition = <TInput, TOutput>(\n definition: ToolDefinition<TInput, TOutput>,\n): Tool<TInput, TOutput> => {\n if (!definition.name || definition.name.trim().length === 0) {\n throw new Error(\"Tool definition requires a non-empty name\");\n }\n\n if (!definition.metadata) {\n definition.metadata = {};\n }\n\n return definition;\n};\n\nexport const isToolProvider = (value: unknown): value is ToolProvider => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const candidate = value as Partial<ToolProvider>;\n return (\n typeof candidate.setup === \"function\" &&\n typeof candidate.teardown === \"function\"\n );\n};\n\nexport const normalizeToolEntries = (\n entries: Array<Tool<unknown, unknown> | ToolProvider>,\n): {\n tools: Array<Tool<unknown, unknown>>;\n providers: Array<ToolProvider>;\n} => {\n const tools: Array<Tool<unknown, unknown>> = [];\n const providers: Array<ToolProvider> = [];\n\n for (const entry of entries) {\n if (isToolProvider(entry)) {\n providers.push(entry);\n } else {\n tools.push(entry);\n }\n }\n\n return { tools, providers };\n};\n","import { randomUUID } from \"node:crypto\";\nimport { z } from \"zod\";\n\nimport { ToolCallRecordSchema, type ToolCallRecord } from \"./tool\";\n\nexport const UsageSchema = z.object({\n requests: z.number().int().nonnegative().default(0),\n inputTokens: z.number().int().nonnegative().default(0),\n outputTokens: z.number().int().nonnegative().default(0),\n totalTokens: z.number().int().nonnegative().default(0),\n cost: z\n .object({\n generation: z.number().nonnegative().default(0),\n platform: z.number().nonnegative().default(0),\n total: z.number().nonnegative().default(0),\n })\n .default({ generation: 0, platform: 0, total: 0 }),\n});\n\nexport type Usage = z.infer<typeof UsageSchema>;\n\nexport const ExecutionCycleSchema = z.object({\n iteration: z.number().int().nonnegative(),\n thought: z.unknown().nullable().optional(),\n toolCalls: z.array(ToolCallRecordSchema).default([]),\n results: z.array(z.unknown()).default([]),\n timestamp: z.number().default(() => Date.now()),\n});\n\nexport type ExecutionCycle = z.infer<typeof ExecutionCycleSchema>;\n\nexport interface AgentContextOptions {\n agentName: string;\n sessionId?: string;\n parentSpanId?: string | null;\n goal?: unknown;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AgentContextSnapshot {\n agentName: string;\n sessionId: string;\n parentSpanId: string | null;\n iteration: number;\n goal?: unknown;\n executionHistory: ExecutionCycle[];\n usage: Usage;\n toolCalls: ToolCallRecord[];\n metadata: Record<string, unknown>;\n startedAt: number;\n updatedAt: number;\n}\n\nexport interface IterationSummary {\n iteration: number;\n thought: Record<string, unknown>;\n toolCalls: Array<{ toolName: string; success?: boolean }>;\n results: unknown[];\n}\n\nexport class AgentContext {\n public readonly agentName: string;\n\n public readonly sessionId: string;\n\n public parentSpanId: string | null;\n\n public iteration = 0;\n\n public goal?: unknown;\n\n public readonly executionHistory: ExecutionCycle[] = [];\n\n public readonly toolCalls: ToolCallRecord[] = [];\n\n public usage: Usage;\n\n public metadata: Record<string, unknown>;\n\n public readonly startedAt: number;\n\n public updatedAt: number;\n\n constructor(options: AgentContextOptions) {\n const now = Date.now();\n this.agentName = options.agentName;\n this.sessionId = options.sessionId ?? randomUUID();\n this.parentSpanId = options.parentSpanId ?? null;\n this.goal = options.goal;\n this.metadata = { ...(options.metadata ?? {}) };\n this.startedAt = now;\n this.updatedAt = now;\n this.usage = UsageSchema.parse({});\n }\n\n public updateUsage(delta: Usage): void {\n const next = UsageSchema.parse(delta);\n this.usage = {\n requests: this.usage.requests + next.requests,\n inputTokens: this.usage.inputTokens + next.inputTokens,\n outputTokens: this.usage.outputTokens + next.outputTokens,\n totalTokens: this.usage.totalTokens + next.totalTokens,\n cost: {\n generation: this.usage.cost.generation + next.cost.generation,\n platform: this.usage.cost.platform + next.cost.platform,\n total: this.usage.cost.total + next.cost.total,\n },\n };\n this.touch();\n }\n\n public addCycle(cycle: ExecutionCycle): ExecutionCycle {\n const parsed = ExecutionCycleSchema.parse(cycle);\n this.executionHistory.push(parsed);\n this.touch();\n return parsed;\n }\n\n public recordToolCall(call: Omit<ToolCallRecord, \"id\">): ToolCallRecord {\n const parsed = ToolCallRecordSchema.parse(call);\n this.toolCalls.push(parsed);\n this.touch();\n return parsed;\n }\n\n public getContextSize(): number {\n return this.usage.totalTokens;\n }\n\n public getLastNCycles(count = 3): ExecutionCycle[] {\n if (count <= 0) {\n return [];\n }\n return this.executionHistory.slice(-count);\n }\n\n public getLastIterationsSummary(count = 2): IterationSummary[] {\n return this.getLastNCycles(count).map((cycle) => {\n const thought: Record<string, unknown> =\n typeof cycle.thought === \"object\" && cycle.thought !== null\n ? { ...(cycle.thought as Record<string, unknown>) }\n : { text: cycle.thought };\n\n return {\n iteration: cycle.iteration,\n thought,\n toolCalls: cycle.toolCalls.map((call) => ({\n toolName: call.toolName,\n ...(call.success !== undefined && { success: call.success }),\n })),\n results: [...cycle.results],\n } satisfies IterationSummary;\n });\n }\n\n public setMetadata(key: string, value: unknown): void {\n this.metadata[key] = value;\n this.touch();\n }\n\n public clearHistory(): void {\n this.executionHistory.length = 0;\n this.toolCalls.length = 0;\n this.touch();\n }\n\n public snapshot(): AgentContextSnapshot {\n return {\n agentName: this.agentName,\n sessionId: this.sessionId,\n parentSpanId: this.parentSpanId,\n iteration: this.iteration,\n goal: this.goal,\n executionHistory: [...this.executionHistory],\n usage: { ...this.usage },\n toolCalls: [...this.toolCalls],\n metadata: { ...this.metadata },\n startedAt: this.startedAt,\n updatedAt: this.updatedAt,\n };\n }\n\n private touch(): void {\n this.updatedAt = Date.now();\n }\n}\n","/**\n * Log levels\n */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n SILENT = 4,\n}\n\n/**\n * Logger interface for agent output\n */\nexport interface AgentLogger {\n /**\n * Log a debug message\n */\n debug(message: string, meta?: Record<string, unknown>): void;\n\n /**\n * Log an info message\n */\n info(message: string, meta?: Record<string, unknown>): void;\n\n /**\n * Log a warning message\n */\n warn(message: string, meta?: Record<string, unknown>): void;\n\n /**\n * Log an error message\n */\n error(\n message: string,\n error?: Error | unknown,\n meta?: Record<string, unknown>,\n ): void;\n\n /**\n * Get current log level\n */\n getLevel(): LogLevel;\n\n /**\n * Set log level\n */\n setLevel(level: LogLevel): void;\n}\n\n/**\n * Console-based logger implementation\n */\nconst formatMeta = (meta?: Record<string, unknown>): string => {\n if (!meta) {\n return \"\";\n }\n\n try {\n return ` ${JSON.stringify(meta)}`;\n } catch {\n return \" [unserializable meta]\";\n }\n};\n\nconst writeToStdout = (\n level: string,\n message: string,\n meta?: Record<string, unknown>,\n): void => {\n const suffix = formatMeta(meta);\n process.stdout.write(`[${level}] ${message}${suffix}\\n`);\n};\n\nexport class ConsoleLogger implements AgentLogger {\n private level: LogLevel;\n\n constructor(level: LogLevel = LogLevel.INFO) {\n this.level = level;\n }\n\n public debug(message: string, meta?: Record<string, unknown>): void {\n if (this.level <= LogLevel.DEBUG) {\n writeToStdout(\"DEBUG\", message, meta);\n }\n }\n\n public info(message: string, meta?: Record<string, unknown>): void {\n if (this.level <= LogLevel.INFO) {\n writeToStdout(\"INFO\", message, meta);\n }\n }\n\n public warn(message: string, meta?: Record<string, unknown>): void {\n if (this.level <= LogLevel.WARN) {\n console.warn(`[WARN] ${message}`, meta ? meta : \"\");\n }\n }\n\n public error(\n message: string,\n error?: Error | unknown,\n meta?: Record<string, unknown>,\n ): void {\n if (this.level <= LogLevel.ERROR) {\n if (error) {\n console.error(`[ERROR] ${message}`, error, meta ? meta : \"\");\n } else {\n console.error(`[ERROR] ${message}`, meta ? meta : \"\");\n }\n }\n }\n\n public getLevel(): LogLevel {\n return this.level;\n }\n\n public setLevel(level: LogLevel): void {\n this.level = level;\n }\n}\n\n/**\n * No-op logger that suppresses all output\n */\nexport class SilentLogger implements AgentLogger {\n public debug(message: string, meta?: Record<string, unknown>): void {\n void message;\n void meta;\n }\n\n public info(message: string, meta?: Record<string, unknown>): void {\n void message;\n void meta;\n }\n\n public warn(message: string, meta?: Record<string, unknown>): void {\n void message;\n void meta;\n }\n\n public error(\n message: string,\n error?: Error | unknown,\n meta?: Record<string, unknown>,\n ): void {\n void message;\n void error;\n void meta;\n }\n\n public getLevel(): LogLevel {\n return LogLevel.SILENT;\n }\n\n public setLevel(level: LogLevel): void {\n void level;\n }\n}\n\n/**\n * Default logger instance\n */\nlet defaultLogger: AgentLogger = new ConsoleLogger(LogLevel.WARN);\n\n/**\n * Get the default logger\n */\nexport function getDefaultLogger(): AgentLogger {\n return defaultLogger;\n}\n\n/**\n * Set the default logger\n */\nexport function setDefaultLogger(logger: AgentLogger): void {\n defaultLogger = logger;\n}\n","import type { AgentContext } from \"./context\";\nimport type { Tool, ToolCallRecord, ToolResult } from \"./tool\";\nimport type { AgentLogger } from \"../utils/logger\";\nimport { getDefaultLogger } from \"../utils/logger\";\n\nexport const HookEvents = {\n AgentStart: \"agent:start\",\n AgentEnd: \"agent:end\",\n LoopStart: \"loop:start\",\n LoopEnd: \"loop:end\",\n LlmCall: \"llm:call\",\n LlmResponse: \"llm:response\",\n ThinkEnd: \"think:end\",\n BeforeTool: \"tool:before\",\n AfterTool: \"tool:after\",\n ToolError: \"tool:error\",\n MemoryRead: \"memory:read\",\n MemoryWrite: \"memory:write\",\n MemoryError: \"memory:error\",\n} as const;\n\nexport type HookEventName = (typeof HookEvents)[keyof typeof HookEvents];\n\nexport interface HookPayloadMap {\n [HookEvents.AgentStart]: {\n context: AgentContext;\n };\n [HookEvents.AgentEnd]: {\n context: AgentContext;\n result?: unknown;\n error?: unknown;\n };\n [HookEvents.LoopStart]: {\n context: AgentContext;\n };\n [HookEvents.LoopEnd]: {\n context: AgentContext;\n };\n [HookEvents.LlmCall]: {\n context: AgentContext;\n callType: string;\n };\n [HookEvents.LlmResponse]: {\n context: AgentContext;\n callType: string;\n response: unknown;\n };\n [HookEvents.ThinkEnd]: {\n context: AgentContext;\n thought: unknown;\n };\n [HookEvents.BeforeTool]: {\n context: AgentContext;\n tool: Tool<unknown, unknown>;\n input: unknown;\n };\n [HookEvents.AfterTool]: {\n context: AgentContext;\n tool: Tool<unknown, unknown>;\n result: ToolResult<unknown>;\n record: ToolCallRecord;\n };\n [HookEvents.ToolError]: {\n context: AgentContext;\n toolName: string;\n tool?: Tool<unknown, unknown>;\n error: unknown;\n };\n [HookEvents.MemoryRead]: {\n context: AgentContext;\n key: string;\n value: unknown;\n };\n [HookEvents.MemoryWrite]: {\n context: AgentContext;\n key: string;\n value: unknown;\n };\n [HookEvents.MemoryError]: {\n context: AgentContext;\n operation: \"read\" | \"write\" | \"delete\" | \"clear\";\n error: unknown;\n };\n}\n\nexport type HookPayload<E extends HookEventName> = HookPayloadMap[E];\n\nexport type HookHandler<E extends HookEventName> = (\n payload: HookPayload<E>,\n) => void | Promise<void>;\n\nexport interface HookRegistration<E extends HookEventName> {\n event: E;\n handler: HookHandler<E>;\n}\n\nexport type UnregisterHook = () => void;\n\nexport class HookManager {\n private readonly registry = new Map<\n HookEventName,\n Set<HookHandler<HookEventName>>\n >();\n private readonly logger: AgentLogger;\n\n constructor(logger?: AgentLogger) {\n this.logger = logger ?? getDefaultLogger();\n }\n\n public on<E extends HookEventName>(\n event: E,\n handler: HookHandler<E>,\n ): UnregisterHook {\n const existing =\n this.registry.get(event) ?? new Set<HookHandler<HookEventName>>();\n existing.add(handler as HookHandler<HookEventName>);\n this.registry.set(event, existing);\n return () => existing.delete(handler as HookHandler<HookEventName>);\n }\n\n public once<E extends HookEventName>(\n event: E,\n handler: HookHandler<E>,\n ): UnregisterHook {\n const disposable: HookHandler<E> = async (payload) => {\n await handler(payload);\n this.off(event, disposable);\n };\n return this.on(event, disposable);\n }\n\n public off<E extends HookEventName>(event: E, handler: HookHandler<E>): void {\n const listeners = this.registry.get(event);\n if (!listeners) {\n return;\n }\n listeners.delete(handler as HookHandler<HookEventName>);\n if (listeners.size === 0) {\n this.registry.delete(event);\n }\n }\n\n public clear(): void {\n this.registry.clear();\n }\n\n public listenerCount(event?: HookEventName): number {\n if (event) {\n return this.registry.get(event)?.size ?? 0;\n }\n\n let total = 0;\n for (const listeners of this.registry.values()) {\n total += listeners.size;\n }\n return total;\n }\n\n public async emit<E extends HookEventName>(\n event: E,\n payload: HookPayload<E>,\n ): Promise<void> {\n const listeners = Array.from(\n (this.registry.get(event) as Set<HookHandler<E>> | undefined) ??\n new Set<HookHandler<E>>(),\n );\n\n if (listeners.length === 0) {\n return;\n }\n\n // Execute handlers sequentially but continue even if some fail\n for (const [index, listener] of listeners.entries()) {\n try {\n await Promise.resolve(listener(payload));\n } catch (error) {\n // Log failure without throwing\n this.logger.warn(`Hook handler failed for event \"${event}\"`, {\n event,\n handlerIndex: index,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n public registerMany<E extends HookEventName>(\n registrations: HookRegistration<E>[],\n ): UnregisterHook {\n const cleanups = registrations.map(({ event, handler }) =>\n this.on(event, handler),\n );\n return () => cleanups.forEach((dispose) => dispose());\n }\n}\n\nexport const createHookManager = (logger?: AgentLogger): HookManager =>\n new HookManager(logger);\n","import type { ZodType } from \"zod\";\n\nimport type { AgentContext } from \"./context\";\nimport {\n HookEvents,\n HookManager,\n type HookEventName,\n type HookHandler,\n} from \"./hooks\";\nimport type {\n Tool,\n ToolExecutionContext,\n ToolResult,\n ToolProvider,\n} from \"./tool\";\nimport {\n ToolResultFactory,\n coerceToolDefinition,\n normalizeToolEntries,\n} from \"./tool\";\nimport type { Memory } from \"../memory/memory\";\nimport { InMemoryStore } from \"../memory/memory\";\n\n//Default model:\nexport const DEFAULT_MODEL = \"gcp/gemini-flash-latest\";\n\n/**\n * Configuration options for BaseAgent\n */\nexport interface BaseAgentConfig<TInput, TOutput> {\n /**\n * Unique name identifying this agent\n */\n name: string;\n\n /**\n * Human-readable description of the agent's purpose\n */\n description?: string;\n\n /**\n * System instructions guiding agent behavior\n */\n instructions?: string;\n\n /**\n * List of tools available to the agent\n *\n * We intentionally accept Tool<any, any> here because tool inputs are ultimately validated\n * at runtime before execution. Using `any` keeps the API ergonomic for tool authors while\n * allowing the BaseAgent to store mixed tool definitions in a single registry.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tools?: Array<Tool<any, any> | ToolProvider>;\n\n /**\n * Maximum iterations before terminating the agent loop\n * @default 25\n */\n maxIterations?: number;\n\n /**\n * Model identifier(s).\n * Accepts a single model (e.g., \"gpt-4\", \"claude-3-sonnet\") or a list used as fallback.\n * @default \"gcp/gemini-flash-latest\"\n */\n model?: string | readonly string[];\n\n /**\n * Input schema for validation (Zod schema)\n */\n inputSchema?: ZodType<TInput>;\n\n /**\n * Output schema for validation (Zod schema)\n */\n outputSchema?: ZodType<TOutput>;\n\n /**\n * Enable memory subsystem\n * @default false\n */\n enableMemory?: boolean;\n\n /**\n * Custom memory implementation (defaults to InMemoryStore if enableMemory is true)\n */\n memory?: Memory;\n\n /**\n * Additional metadata for the agent\n */\n metadata?: Record<string, unknown>;\n\n /**\n * Opper API configuration\n */\n opperConfig?: OpperClientConfig;\n}\n\n/**\n * Opper client configuration\n */\nexport interface OpperClientConfig {\n /**\n * Opper API key (defaults to process.env.OPPER_API_KEY)\n */\n apiKey: string | undefined;\n\n /**\n * Opper API base URL\n */\n baseUrl: string | undefined;\n\n /**\n * Additional configuration options\n */\n [key: string]: unknown;\n}\n\n/**\n * Abstract base class for all Opper agents.\n * Provides lifecycle management, tool handling, hook system, and Opper integration.\n *\n * @template TInput - Type of input the agent accepts\n * @template TOutput - Type of output the agent produces\n */\nexport abstract class BaseAgent<TInput = unknown, TOutput = unknown> {\n /**\n * Agent name\n */\n public readonly name: string;\n\n /**\n * Agent description\n */\n public readonly description: string | undefined;\n\n /**\n * Agent instructions\n */\n public readonly instructions: string | undefined;\n\n /**\n * Maximum iterations for the agent loop\n */\n public readonly maxIterations: number;\n\n /**\n * Model identifier\n */\n public readonly model: string | readonly string[];\n\n /**\n * Input validation schema\n */\n public readonly inputSchema: ZodType<TInput> | undefined;\n\n /**\n * Output validation schema\n */\n public readonly outputSchema: ZodType<TOutput> | undefined;\n\n /**\n * Whether memory is enabled\n */\n public readonly enableMemory: boolean;\n\n /**\n * Memory instance for persistent storage (null if disabled or initialization failed)\n */\n public readonly memory: Memory | null;\n\n /**\n * Agent metadata\n */\n public readonly metadata: Record<string, unknown>;\n\n /**\n * Hook manager for lifecycle events\n */\n protected readonly hooks: HookManager;\n\n /**\n * Registry of available tools\n */\n protected readonly tools: Map<string, Tool<unknown, unknown>>;\n\n /**\n * Baseline tools registered directly on the agent\n */\n protected readonly baseTools: Map<string, Tool<unknown, unknown>>;\n\n /**\n * Registered tool providers that can expand into tools at runtime\n */\n protected readonly toolProviders: Set<ToolProvider>;\n\n /**\n * Active tools supplied by providers for the current execution\n */\n private readonly providerToolRegistry: Map<\n ToolProvider,\n Array<Tool<unknown, unknown>>\n >;\n\n /**\n * Opper client configuration\n */\n protected readonly opperConfig: OpperClientConfig;\n\n constructor(config: BaseAgentConfig<TInput, TOutput>) {\n this.name = config.name;\n this.description = config.description;\n this.instructions = config.instructions;\n this.maxIterations = config.maxIterations ?? 25;\n this.model = config.model ?? DEFAULT_MODEL;\n this.inputSchema = config.inputSchema;\n this.outputSchema = config.outputSchema;\n this.enableMemory = config.enableMemory ?? false;\n this.metadata = { ...(config.metadata ?? {}) };\n\n this.hooks = new HookManager();\n this.tools = new Map();\n this.baseTools = new Map();\n this.toolProviders = new Set();\n this.providerToolRegistry = new Map();\n\n // Initialize Opper configuration with environment fallback\n this.opperConfig = {\n apiKey: config.opperConfig?.apiKey ?? process.env[\"OPPER_API_KEY\"],\n baseUrl: config.opperConfig?.baseUrl,\n ...config.opperConfig,\n };\n\n // Initialize memory with graceful degradation\n this.memory = this.initializeMemory(config);\n\n // Register initial tools/providers\n if (config.tools) {\n this.registerTools(config.tools);\n }\n }\n\n /**\n * Initialize memory subsystem with graceful degradation\n *\n * @param config - Agent configuration\n * @returns Memory instance or null\n */\n private initializeMemory(\n config: BaseAgentConfig<TInput, TOutput>,\n ): Memory | null {\n // If memory disabled, return null\n if (!this.enableMemory && !config.memory) {\n return null;\n }\n\n try {\n // Use provided memory implementation or default to InMemoryStore\n return config.memory ?? new InMemoryStore();\n } catch (error) {\n // Log warning but don't throw - graceful degradation\n console.warn(\n `[${this.name}] Memory initialization failed, continuing without memory:`,\n error,\n );\n return null;\n }\n }\n\n /**\n * Main entry point for agent execution.\n * Orchestrates lifecycle: context initialization, hook triggering, loop execution, teardown.\n *\n * @param input - Input to process\n * @param parentSpanId - Optional parent span ID for tracing\n * @returns Processed output\n */\n public async process(input: TInput, parentSpanId?: string): Promise<TOutput> {\n // Validate input if schema provided\n const validatedInput = this.inputSchema\n ? this.inputSchema.parse(input)\n : input;\n\n // Initialize context\n const context = await this.initializeContext(validatedInput, parentSpanId);\n\n try {\n await this.activateToolProviders();\n\n // Trigger agent:start hook\n await this.triggerHook(HookEvents.AgentStart, { context });\n\n // Execute agent loop\n const result = await this.runLoop(validatedInput, context);\n\n // Validate output if schema provided\n const validatedOutput = this.outputSchema\n ? this.outputSchema.parse(result)\n : result;\n\n // Trigger agent:end hook (success)\n await this.triggerHook(HookEvents.AgentEnd, {\n context,\n result: validatedOutput,\n });\n\n return validatedOutput;\n } catch (error) {\n // Trigger agent:end hook (error)\n await this.triggerHook(HookEvents.AgentEnd, {\n context,\n error,\n });\n\n throw error;\n } finally {\n await this.deactivateToolProviders();\n // Teardown context\n await this.teardownContext(context);\n }\n }\n\n /**\n * Abstract method implementing the agent's main loop logic.\n * Must be implemented by concrete agent classes.\n *\n * @param input - Validated input\n * @param context - Agent execution context\n * @returns Processed output\n */\n protected abstract runLoop(\n input: TInput,\n context: AgentContext,\n ): Promise<TOutput>;\n\n /**\n * Initialize agent context before execution.\n * Can be overridden for custom initialization logic.\n *\n * @param input - Agent input\n * @param parentSpanId - Optional parent span ID\n * @returns Initialized context\n */\n protected async initializeContext(\n input: TInput,\n parentSpanId?: string,\n ): Promise<AgentContext> {\n const context = new (await import(\"./context\")).AgentContext({\n agentName: this.name,\n parentSpanId: parentSpanId ?? null,\n goal: input,\n metadata: { ...this.metadata },\n });\n\n return context;\n }\n\n /**\n * Teardown agent context after execution.\n * Can be overridden for custom cleanup logic.\n *\n * @param context - Agent context to teardown\n */\n protected async teardownContext(context: AgentContext): Promise<void> {\n // Default: no-op, subclasses can override for cleanup\n void context;\n }\n\n /**\n * Add a tool to the agent's tool registry.\n *\n * @param tool - Tool to add\n */\n public addTool<TInput = unknown, TOutput = unknown>(\n tool: Tool<TInput, TOutput>,\n ): void {\n const coerced = coerceToolDefinition(tool);\n\n if (this.tools.has(coerced.name)) {\n console.warn(\n `[${this.name}] Tool \"${coerced.name}\" already registered. Overwriting existing definition.`,\n );\n }\n\n const typedTool = coerced as Tool<unknown, unknown>;\n this.baseTools.set(coerced.name, typedTool);\n this.tools.set(coerced.name, typedTool);\n }\n\n /**\n * Remove a tool from the agent's tool registry.\n *\n * @param toolName - Name of tool to remove\n * @returns True if tool was removed, false if not found\n */\n public removeTool(toolName: string): boolean {\n this.baseTools.delete(toolName);\n return this.tools.delete(toolName);\n }\n\n /**\n * Get a tool by name.\n *\n * @param toolName - Name of tool to retrieve\n * @returns Tool instance or undefined\n */\n public getTool(toolName: string): Tool<unknown, unknown> | undefined {\n return this.tools.get(toolName);\n }\n\n /**\n * Get all registered tools.\n *\n * @returns Array of all tools\n */\n public getTools(): Array<Tool<unknown, unknown>> {\n return Array.from(this.tools.values());\n }\n\n /**\n * Register a tool provider that expands into tools at runtime.\n *\n * @param provider - Tool provider to add\n */\n public addToolProvider(provider: ToolProvider): void {\n this.toolProviders.add(provider);\n }\n\n /**\n * Convert this agent into a tool that can be used by other agents.\n *\n * @param toolName - Optional custom name for the tool (defaults to agent name)\n * @param toolDescription - Optional custom description (defaults to agent description)\n * @returns Tool wrapping this agent\n */\n public asTool(\n toolName?: string,\n toolDescription?: string,\n ): Tool<TInput, TOutput> {\n const tool: Tool<TInput, TOutput> = {\n name: toolName ?? this.name,\n description: toolDescription ?? this.description ?? `Agent: ${this.name}`,\n ...(this.inputSchema && { schema: this.inputSchema }),\n metadata: {\n isAgent: true,\n agentName: this.name,\n },\n execute: async (\n input: TInput,\n executionContext: ToolExecutionContext,\n ): Promise<ToolResult<TOutput>> => {\n try {\n // Use the tool's span ID as parent for nested agent\n const parentSpanId =\n executionContext.spanId ??\n executionContext.agentContext.parentSpanId ??\n undefined;\n const result = await this.process(input, parentSpanId);\n return ToolResultFactory.success(tool.name, result);\n } catch (error) {\n return ToolResultFactory.failure(\n tool.name,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n },\n };\n\n return tool;\n }\n\n /**\n * Register a hook handler for a specific event.\n *\n * @param event - Hook event name\n * @param handler - Hook handler function\n * @returns Cleanup function to unregister the hook\n */\n public registerHook<E extends HookEventName>(\n event: E,\n handler: HookHandler<E>,\n ): () => void {\n return this.hooks.on(event, handler);\n }\n\n /**\n * Trigger a hook event with a payload.\n * Swallows errors to prevent hook failures from breaking agent execution.\n *\n * @param event - Hook event name\n * @param payload - Event payload\n */\n protected async triggerHook<E extends HookEventName>(\n event: E,\n payload: Parameters<HookHandler<E>>[0],\n ): Promise<void> {\n try {\n await this.hooks.emit(event, payload);\n } catch (error) {\n // Log but don't throw - hook failures shouldn't break agent execution\n console.warn(`Hook error for event ${event}:`, error);\n }\n }\n\n /**\n * Execute a tool with proper context, hooks, and error handling.\n *\n * @param toolName - Name of tool to execute\n * @param input - Tool input\n * @param context - Agent context\n * @param options - Optional execution options (signal, span ID)\n * @returns Tool execution result\n */\n protected async executeTool(\n toolName: string,\n input: unknown,\n context: AgentContext,\n options?: { signal?: AbortSignal; spanId?: string },\n ): Promise<ToolResult<unknown>> {\n const tool = this.tools.get(toolName);\n\n if (!tool) {\n const failure = ToolResultFactory.failure(\n toolName,\n new Error(`Tool \"${toolName}\" not found in agent registry`),\n );\n\n const timestamp = Date.now();\n\n context.recordToolCall({\n toolName,\n input,\n success: false,\n error:\n failure.error instanceof Error\n ? failure.error.message\n : String(failure.error),\n startedAt: timestamp,\n finishedAt: timestamp,\n metadata: {},\n });\n\n await this.triggerHook(HookEvents.ToolError, {\n context,\n toolName,\n error: failure.error,\n });\n\n return failure;\n }\n\n const executionContext: ToolExecutionContext = {\n agentContext: context,\n ...(options?.signal && { signal: options.signal }),\n ...(options?.spanId && { spanId: options.spanId }),\n metadata: {},\n };\n\n const startedAt = Date.now();\n\n try {\n // Trigger before-tool hook\n await this.triggerHook(HookEvents.BeforeTool, {\n context,\n tool,\n input,\n });\n\n // Execute the tool\n const result = await tool.execute(input, executionContext);\n\n const finishedAt = Date.now();\n\n // Record the tool call\n const record = context.recordToolCall({\n toolName: tool.name,\n input,\n ...(result.success && { output: result.output }),\n success: result.success,\n ...(!result.success && {\n error:\n result.error instanceof Error\n ? result.error.message\n : String(result.error),\n }),\n startedAt,\n finishedAt,\n metadata: {},\n });\n\n // Trigger after-tool hook\n await this.triggerHook(HookEvents.AfterTool, {\n context,\n tool,\n result,\n record,\n });\n\n return result;\n } catch (error) {\n const failure = ToolResultFactory.failure(\n toolName,\n error instanceof Error ? error : new Error(String(error)),\n {\n startedAt,\n finishedAt: Date.now(),\n },\n );\n\n const record = context.recordToolCall({\n toolName: tool.name,\n input,\n success: false,\n error:\n failure.error instanceof Error\n ? failure.error.message\n : String(failure.error),\n startedAt,\n finishedAt: failure.finishedAt,\n metadata: {},\n });\n\n // Trigger tool-error hook\n await this.triggerHook(HookEvents.ToolError, {\n context,\n tool,\n toolName: tool.name,\n error,\n });\n\n // Ensure after-tool observers see the recorded failure\n await this.triggerHook(HookEvents.AfterTool, {\n context,\n tool,\n result: failure,\n record,\n });\n\n return failure;\n }\n }\n\n private registerTools(\n entries: Array<Tool<unknown, unknown> | ToolProvider>,\n ): void {\n const { tools, providers } = normalizeToolEntries(entries);\n\n for (const tool of tools) {\n this.addTool(tool);\n }\n\n for (const provider of providers) {\n this.toolProviders.add(provider);\n }\n }\n\n private async activateToolProviders(): Promise<void> {\n const activationPromises = Array.from(this.toolProviders)\n .filter((provider) => !this.providerToolRegistry.has(provider))\n .map(async (provider) => {\n try {\n const baseAgent = this as unknown as BaseAgent<unknown, unknown>;\n const providedTools = (await provider.setup(baseAgent)) ?? [];\n const normalizedTools = providedTools.map((tool) =>\n coerceToolDefinition(tool),\n );\n\n this.providerToolRegistry.set(provider, normalizedTools);\n\n for (const tool of normalizedTools) {\n if (this.tools.has(tool.name)) {\n console.warn(\n `[${this.name}] Tool \"${tool.name}\" from provider overwrites existing tool.`,\n );\n }\n this.tools.set(tool.name, tool);\n }\n } catch (error) {\n console.warn(\n `[${this.name}] Failed to activate tool provider:`,\n error,\n );\n }\n });\n\n await Promise.allSettled(activationPromises);\n }\n\n private async deactivateToolProviders(): Promise<void> {\n const teardownEntries = Array.from(this.providerToolRegistry.entries());\n this.providerToolRegistry.clear();\n\n const teardownPromises = teardownEntries.map(async ([provider, tools]) => {\n for (const tool of tools) {\n this.tools.delete(tool.name);\n\n const baseTool = this.baseTools.get(tool.name);\n if (baseTool) {\n this.tools.set(tool.name, baseTool);\n }\n }\n\n try {\n await provider.teardown();\n } catch (error) {\n console.warn(\n `[${this.name}] Error while tearing down tool provider:`,\n error,\n );\n }\n });\n\n await Promise.allSettled(teardownPromises);\n }\n}\n","import { z } from \"zod\";\n\n/**\n * Schema for memory entry metadata\n */\nexport const MemoryEntryMetadataSchema = z.object({\n createdAt: z.number(),\n updatedAt: z.number(),\n accessCount: z.number().default(0),\n});\n\nexport type MemoryEntryMetadata = z.infer<typeof MemoryEntryMetadataSchema>;\n\n/**\n * Schema for a single memory entry\n */\nexport const MemoryEntrySchema = z.object({\n key: z.string(),\n description: z.string(),\n value: z.unknown(),\n metadata: MemoryEntryMetadataSchema,\n});\n\nexport type MemoryEntry = z.infer<typeof MemoryEntrySchema>;\n\n/**\n * Catalog entry (summary without value) for LLM consumption\n */\nexport interface MemoryCatalogEntry {\n key: string;\n description: string;\n metadata: Record<string, unknown>;\n}\n\n/**\n * Memory interface for persistent key-value storage across agent invocations.\n * Implementations must be thread-safe and handle concurrent operations gracefully.\n */\nexport interface Memory {\n /**\n * Check if memory has any entries\n *\n * @returns True if memory contains entries\n */\n hasEntries(): Promise<boolean>;\n\n /**\n * List memory catalog (summaries without values) so LLM can decide what to load\n *\n * @returns Array of catalog entries with key, description, metadata (no values)\n */\n listEntries(): Promise<MemoryCatalogEntry[]>;\n\n /**\n * Read values from memory by keys\n *\n * @param keys - Optional array of keys to read (if omitted, reads all)\n * @returns Object mapping keys to their values\n */\n read(keys?: string[]): Promise<Record<string, unknown>>;\n\n /**\n * Write a value to memory with the specified key and description\n *\n * @param key - Memory key\n * @param value - Value to store\n * @param description - Human-readable description of what this memory contains\n * @param metadata - Optional metadata\n * @returns The created or updated memory entry\n */\n write(\n key: string,\n value: unknown,\n description?: string,\n metadata?: Record<string, unknown>,\n ): Promise<MemoryEntry>;\n\n /**\n * Delete a memory entry by key\n *\n * @param key - Memory key to delete\n * @returns True if entry was deleted, false if not found\n */\n delete(key: string): Promise<boolean>;\n\n /**\n * Clear all memory entries\n *\n * @returns Number of entries cleared\n */\n clear(): Promise<number>;\n}\n\n/**\n * Default in-memory implementation of Memory interface.\n * Stores data in a Map that persists across agent invocations within the same process.\n */\nexport class InMemoryStore implements Memory {\n private readonly store = new Map<string, MemoryEntry>();\n\n /**\n * Check if memory has any entries\n */\n async hasEntries(): Promise<boolean> {\n return this.store.size > 0;\n }\n\n /**\n * List memory catalog (summaries without values) for LLM consumption\n */\n async listEntries(): Promise<MemoryCatalogEntry[]> {\n const catalog: MemoryCatalogEntry[] = [];\n\n for (const entry of this.store.values()) {\n catalog.push({\n key: entry.key,\n description: entry.description,\n metadata: { ...entry.metadata },\n });\n }\n\n return catalog;\n }\n\n /**\n * Read values from memory by keys\n */\n async read(keys?: string[]): Promise<Record<string, unknown>> {\n const keysToRead = keys ?? Array.from(this.store.keys());\n const snapshot: Record<string, unknown> = {};\n\n for (const key of keysToRead) {\n const entry = this.store.get(key);\n\n if (entry) {\n // Update access tracking\n entry.metadata.accessCount += 1;\n entry.metadata.updatedAt = Date.now();\n\n snapshot[key] = entry.value;\n }\n }\n\n return snapshot;\n }\n\n /**\n * Write a value to memory with description\n */\n async write(\n key: string,\n value: unknown,\n description?: string,\n metadata?: Record<string, unknown>,\n ): Promise<MemoryEntry> {\n const now = Date.now();\n const existing = this.store.get(key);\n\n const entry: MemoryEntry = {\n key,\n description: description ?? existing?.description ?? key,\n value,\n metadata: existing\n ? {\n createdAt: existing.metadata.createdAt,\n updatedAt: now,\n accessCount: existing.metadata.accessCount,\n ...(metadata ?? {}),\n }\n : {\n createdAt: now,\n updatedAt: now,\n accessCount: 0,\n ...(metadata ?? {}),\n },\n };\n\n this.store.set(key, entry);\n\n // Return a copy\n return { ...entry, metadata: { ...entry.metadata } };\n }\n\n /**\n * Delete a memory entry by key\n */\n async delete(key: string): Promise<boolean> {\n return this.store.delete(key);\n }\n\n /**\n * Clear all memory entries\n */\n async clear(): Promise<number> {\n const count = this.store.size;\n this.store.clear();\n return count;\n }\n\n /**\n * Get the current size of the memory store\n *\n * @returns Number of entries in memory\n */\n get size(): number {\n return this.store.size;\n }\n}\n\n/**\n * Factory function to create a new in-memory store\n *\n * @returns New InMemoryStore instance\n */\nexport const createInMemoryStore = (): InMemoryStore => new InMemoryStore();\n","export * from \"./base/agent\";\nexport * from \"./base/context\";\nexport * from \"./base/hooks\";\nexport * from \"./base/result\";\nexport * from \"./base/tool\";\nexport * from \"./core/agent\";\nexport * from \"./core/schemas\";\nexport * from \"./memory/memory\";\nexport * from \"./mcp/client\";\nexport * from \"./mcp/config\";\nexport * from \"./mcp/provider\";\nexport * from \"./opper/client\";\nexport * from \"./utils/logger\";\nexport * from \"./utils/schema-utils\";\nexport * from \"./utils/tool-decorators\";\nexport * from \"./utils/tool-runner\";\n","import { z } from \"zod\";\n\n/**\n * Schema for agent's internal thought/reasoning\n */\nexport const ThoughtSchema = z.object({\n /**\n * The reasoning or internal monologue of the agent\n */\n reasoning: z.string(),\n\n /**\n * Planned next action(s)\n */\n plan: z.string().optional(),\n\n /**\n * Confidence level (0-1)\n */\n confidence: z.number().min(0).max(1).optional(),\n\n /**\n * Additional metadata\n */\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type Thought = z.infer<typeof ThoughtSchema>;\n\n/**\n * Schema for a tool call from the LLM\n */\nexport const ToolCallSchema = z.object({\n /**\n * Unique identifier for this tool call\n */\n id: z.string(),\n\n /**\n * Name of the tool to invoke\n */\n toolName: z.string(),\n\n /**\n * Arguments to pass to the tool\n */\n arguments: z.unknown(),\n});\n\nexport type ToolCall = z.infer<typeof ToolCallSchema>;\n\n/**\n * Schema for memory updates (write operations)\n */\nexport const MemoryUpdateSchema = z.object({\n /**\n * Value to store for this key\n */\n value: z.unknown(),\n\n /**\n * Optional description of the memory entry\n */\n description: z.string().optional(),\n\n /**\n * Optional metadata for the memory entry\n */\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type MemoryUpdate = z.infer<typeof MemoryUpdateSchema>;\n\n/**\n * Schema for agent's decision output from the \"think\" step\n */\nexport const AgentDecisionSchema = z.object({\n /**\n * Agent's internal reasoning\n */\n reasoning: z.string(),\n\n /**\n * Tool calls to execute (if any)\n * Empty array signals task completion\n */\n toolCalls: z.array(ToolCallSchema).default([]),\n\n /**\n * Memory keys to read during this iteration\n */\n memoryReads: z.array(z.string()).default([]),\n\n /**\n * Memory entries to write/update (key -> payload)\n */\n memoryUpdates: z.record(MemoryUpdateSchema).default({}),\n});\n\nexport type AgentDecision = z.infer<typeof AgentDecisionSchema>;\n\n/**\n * Schema for tool execution result summary\n */\nexport const ToolExecutionSummarySchema = z.object({\n /**\n * Tool name\n */\n toolName: z.string(),\n\n /**\n * Whether execution succeeded\n */\n success: z.boolean(),\n\n /**\n * Output if successful\n */\n output: z.unknown().optional(),\n\n /**\n * Error message if failed\n */\n error: z.string().optional(),\n});\n\nexport type ToolExecutionSummary = z.infer<typeof ToolExecutionSummarySchema>;\n","{\n \"name\": \"@opperai/agents\",\n \"version\": \"0.1.1\",\n \"description\": \"TypeScript SDK for building Opper AI agents\",\n \"type\": \"module\",\n \"engines\": {\n \"node\": \">=20\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/opper-ai/opperai-agent-sdk-node.git\"\n },\n \"license\": \"MIT\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint .\",\n \"format\": \"prettier --write .\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"test:integration\": \"vitest run tests/integration/opper-fixtures.test.ts\",\n \"test:integration:live\": \"vitest run tests/integration/opper-live.test.ts\",\n \"typecheck\": \"tsc --noEmit\",\n \"example\": \"tsx --tsconfig tsconfig.examples.json\",\n \"fixtures:generate\": \"tsx scripts/generate-fixtures.ts\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.19.1\",\n \"eventemitter3\": \"^5.0.1\",\n \"opperai\": \"^3.1.2\",\n \"reflect-metadata\": \"^0.2.2\",\n \"zod\": \"^3.23.8\",\n \"zod-to-json-schema\": \"^3.23.3\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.37.0\",\n \"@types/node\": \"^20.17.17\",\n \"@typescript-eslint/eslint-plugin\": \"^8.12.2\",\n \"@typescript-eslint/parser\": \"^8.12.2\",\n \"@vitest/coverage-v8\": \"^2.1.5\",\n \"eslint\": \"^9.14.0\",\n \"eslint-config-prettier\": \"^9.1.0\",\n \"eslint-plugin-import\": \"^2.31.0\",\n \"prettier\": \"^3.3.2\",\n \"tsup\": \"^8.2.4\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.7.2\",\n \"typescript-eslint\": \"^8.46.0\",\n \"vitest\": \"^2.1.5\"\n },\n \"packageManager\": \"pnpm@10.18.1+sha512.77a884a165cbba2d8d1c19e3b4880eee6d2fcabd0d879121e282196b80042351d5eb3ca0935fa599da1dc51265cc68816ad2bddd2a2de5ea9fdf92adbec7cd34\"\n}\n","/**\n * SDK version information\n *\n * This file provides version metadata that is included in the User-Agent header\n * for all Opper API requests made by this SDK.\n */\n\nimport packageJson from \"../../package.json\";\n\n/**\n * The SDK package name\n */\nexport const SDK_NAME = \"@opperai/agents\";\n\n/**\n * The current SDK version from package.json\n */\nexport const SDK_VERSION = packageJson.version;\n\n/**\n * The platform identifier (ts for TypeScript)\n */\nexport const SDK_PLATFORM = \"ts\";\n\n/**\n * Returns the formatted User-Agent string for this SDK\n *\n * Format: @opperai/agents-ts/0.1.0\n */\nexport function getUserAgent(): string {\n return `${SDK_NAME}-${SDK_PLATFORM}/${SDK_VERSION}`;\n}\n","import { Opper } from \"opperai\";\nimport type { z } from \"zod\";\nimport type { ZodTypeAny } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nimport type { AgentLogger } from \"../utils/logger\";\nimport { getDefaultLogger } from \"../utils/logger\";\nimport { getUserAgent } from \"../utils/version\";\n\ntype OpperCallResult = Awaited<ReturnType<Opper[\"call\"]>>;\n\ntype TokenUsageMetrics = {\n inputTokens: number;\n outputTokens: number;\n};\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isZodSchema = (value: unknown): value is ZodTypeAny =>\n typeof value === \"object\" &&\n value !== null &&\n \"_def\" in (value as Record<string, unknown>) &&\n typeof (value as { parse?: unknown }).parse === \"function\";\n\nconst readTokenCount = (\n usage: Record<string, unknown> | undefined,\n key: string,\n): number => {\n if (!usage) {\n return 0;\n }\n\n const value = usage[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n};\n\nconst extractUsage = (response: OpperCallResult): TokenUsageMetrics => {\n const usageRecord = isPlainRecord(response.usage)\n ? response.usage\n : undefined;\n\n return {\n inputTokens: readTokenCount(usageRecord, \"input_tokens\"),\n outputTokens: readTokenCount(usageRecord, \"output_tokens\"),\n };\n};\n\nconst extractCost = (\n response: OpperCallResult,\n): { generation: number; platform: number; total: number } => {\n const costRecord = isPlainRecord(response.cost) ? response.cost : undefined;\n\n return {\n generation: readTokenCount(costRecord, \"generation\"),\n platform: readTokenCount(costRecord, \"platform\"),\n total: readTokenCount(costRecord, \"total\"),\n };\n};\n\n/**\n * Opper call response\n */\nexport interface OpperCallResponse<TOutput = unknown> {\n /**\n * Parsed JSON output (if outputSchema provided)\n */\n jsonPayload?: TOutput;\n\n /**\n * Text message response\n */\n message?: string | null | undefined;\n\n /**\n * Span ID for this call\n */\n spanId: string;\n\n /**\n * Token usage information\n */\n usage: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n cost: {\n generation: number;\n platform: number;\n total: number;\n };\n };\n}\n\n/**\n * Options for Opper call\n */\nexport interface OpperCallOptions<TInput = unknown, TOutput = unknown> {\n /**\n * Unique name for this call/task\n */\n name: string;\n\n /**\n * Natural language instructions\n */\n instructions: string;\n\n /**\n * Input data for the call\n */\n input: TInput;\n\n /**\n * Input schema (Zod or JSON Schema)\n */\n inputSchema?: z.ZodType<TInput> | Record<string, unknown>;\n\n /**\n * Output schema (Zod or JSON Schema)\n */\n outputSchema?: z.ZodType<TOutput> | Record<string, unknown>;\n\n /**\n * Model to use. Accepts a single model identifier or an ordered list for fallback.\n * Example: \"anthropic/claude-3.7-sonnet\" or [\"openai/gpt-4o\", \"anthropic/claude-3.7-sonnet\"].\n */\n model?: string | readonly string[];\n\n /**\n * Parent span ID for tracing\n */\n parentSpanId?: string;\n}\n\n/**\n * Span information\n */\nexport interface OpperSpan {\n id: string;\n name: string;\n input?: unknown;\n output?: unknown;\n}\n\n/**\n * Options for creating a span\n */\nexport interface CreateSpanOptions {\n name: string;\n input?: unknown;\n parentSpanId?: string;\n}\n\n/**\n * Retry configuration\n */\nexport interface RetryConfig {\n /**\n * Maximum number of retry attempts\n */\n maxRetries: number;\n\n /**\n * Initial delay in milliseconds\n */\n initialDelayMs: number;\n\n /**\n * Backoff multiplier\n */\n backoffMultiplier: number;\n\n /**\n * Maximum delay in milliseconds\n */\n maxDelayMs: number;\n}\n\n/**\n * Default retry configuration\n */\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n initialDelayMs: 1000,\n backoffMultiplier: 2,\n maxDelayMs: 10000,\n};\n\n/**\n * Opper client wrapper with retry logic and usage tracking\n */\nexport class OpperClient {\n private readonly client: Opper;\n private readonly logger: AgentLogger;\n private readonly retryConfig: RetryConfig;\n\n constructor(\n apiKey?: string,\n options: {\n logger?: AgentLogger;\n retryConfig?: Partial<RetryConfig>;\n } = {},\n ) {\n this.client = new Opper({\n httpBearer: apiKey ?? process.env[\"OPPER_HTTP_BEARER\"] ?? \"\",\n userAgent: getUserAgent(),\n });\n this.logger = options.logger ?? getDefaultLogger();\n this.retryConfig = {\n ...DEFAULT_RETRY_CONFIG,\n ...(options.retryConfig ?? {}),\n };\n }\n\n /**\n * Make a call to Opper with retry logic\n */\n public async call<TInput = unknown, TOutput = unknown>(\n options: OpperCallOptions<TInput, TOutput>,\n ): Promise<OpperCallResponse<TOutput>> {\n return this.withRetry(async () => {\n // Convert Zod schemas to JSON Schema if needed\n const inputSchema = this.toJsonSchema(options.inputSchema);\n const outputSchema = this.toJsonSchema(options.outputSchema);\n\n const response = await this.client.call({\n name: options.name,\n instructions: options.instructions,\n input: options.input,\n ...(inputSchema && { inputSchema }),\n ...(outputSchema && { outputSchema }),\n ...(options.model && { model: options.model }),\n ...(options.parentSpanId && { parentSpanId: options.parentSpanId }),\n });\n\n // Parse usage information\n const usagePayload = extractUsage(response);\n const costPayload = extractCost(response);\n const usage = {\n inputTokens: usagePayload.inputTokens,\n outputTokens: usagePayload.outputTokens,\n totalTokens: usagePayload.inputTokens + usagePayload.outputTokens,\n cost: costPayload,\n };\n\n const result: OpperCallResponse<TOutput> = {\n ...(response.jsonPayload !== undefined && response.jsonPayload !== null\n ? { jsonPayload: response.jsonPayload as TOutput }\n : {}),\n ...(response.message !== undefined && response.message !== null\n ? { message: response.message }\n : {}),\n spanId: response.spanId,\n usage,\n };\n\n return result;\n }, options.name);\n }\n\n /**\n * Create a span for tracing\n */\n public async createSpan(options: CreateSpanOptions): Promise<OpperSpan> {\n return this.withRetry(async () => {\n const span = await this.client.spans.create({\n name: options.name,\n ...(options.input !== undefined && { input: options.input }),\n ...(options.parentSpanId && { parentId: options.parentSpanId }),\n });\n\n return {\n id: span.id,\n name: options.name,\n input: options.input,\n };\n }, `create-span:${options.name}`);\n }\n\n /**\n * Update a span with output or error\n */\n public async updateSpan(\n spanId: string,\n output: unknown,\n options?: { error?: string },\n ): Promise<void> {\n return this.withRetry(async () => {\n // Serialize output to string if it's an object\n const serializedOutput =\n output !== undefined && output !== null\n ? typeof output === \"object\"\n ? JSON.stringify(output)\n : String(output)\n : undefined;\n\n await this.client.spans.update(spanId, {\n ...(serializedOutput !== undefined && { output: serializedOutput }),\n ...(options?.error && { error: options.error }),\n });\n }, `update-span:${spanId}`);\n }\n\n /**\n * Get the underlying Opper client\n */\n public getClient(): Opper {\n return this.client;\n }\n\n /**\n * Execute a function with retry logic and exponential backoff\n */\n private async withRetry<T>(\n fn: () => Promise<T>,\n operationName: string,\n ): Promise<T> {\n let lastError: Error | undefined;\n let delay = this.retryConfig.initialDelayMs;\n\n for (let attempt = 0; attempt <= this.retryConfig.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Don't retry on last attempt\n if (attempt === this.retryConfig.maxRetries) {\n break;\n }\n\n // Check if error is retryable (network errors, rate limits, etc.)\n if (!this.isRetryableError(error)) {\n throw lastError;\n }\n\n this.logger.warn(\n `Opper operation \"${operationName}\" failed (attempt ${attempt + 1}/${this.retryConfig.maxRetries + 1}), retrying in ${delay}ms`,\n {\n error: lastError.message,\n attempt: attempt + 1,\n delayMs: delay,\n },\n );\n\n // Wait before retrying\n await this.sleep(delay);\n\n // Exponential backoff\n delay = Math.min(\n delay * this.retryConfig.backoffMultiplier,\n this.retryConfig.maxDelayMs,\n );\n }\n }\n\n this.logger.error(\n `Opper operation \"${operationName}\" failed after ${this.retryConfig.maxRetries + 1} attempts`,\n lastError,\n );\n throw lastError;\n }\n\n /**\n * Check if an error is retryable\n */\n private isRetryableError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n // Check for common retryable errors\n const errorMessage = error.message.toLowerCase();\n const retryablePatterns = [\n \"network\",\n \"timeout\",\n \"econnreset\",\n \"enotfound\",\n \"econnrefused\",\n \"etimedout\",\n \"rate limit\",\n \"429\",\n \"500\",\n \"502\",\n \"503\",\n \"504\",\n ];\n\n return retryablePatterns.some((pattern) => errorMessage.includes(pattern));\n }\n\n /**\n * Convert Zod schema to JSON Schema\n */\n private toJsonSchema(\n schema: ZodTypeAny | Record<string, unknown> | undefined,\n ): Record<string, unknown> | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (isZodSchema(schema)) {\n try {\n return zodToJsonSchema(schema) as Record<string, unknown>;\n } catch (error) {\n this.logger.warn(\"Failed to convert Zod schema to JSON Schema\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return undefined;\n }\n }\n\n if (isPlainRecord(schema)) {\n return schema;\n }\n\n this.logger.warn(\"Unsupported schema type provided to OpperClient\", {\n schemaType: typeof schema,\n });\n return undefined;\n }\n\n /**\n * Sleep for specified milliseconds\n */\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n\n/**\n * Create an Opper client with optional configuration\n */\nexport function createOpperClient(\n apiKey?: string,\n options?: {\n logger?: AgentLogger;\n retryConfig?: Partial<RetryConfig>;\n },\n): OpperClient {\n return new OpperClient(apiKey, options);\n}\n","import type { ZodIssue, ZodType, ZodTypeAny } from \"zod\";\nimport type { JsonSchema7Type } from \"zod-to-json-schema\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nexport class SchemaValidationError extends Error {\n public readonly issues: ZodIssue[];\n\n constructor(message: string, issues: ZodIssue[]) {\n super(message);\n this.name = \"SchemaValidationError\";\n this.issues = issues;\n }\n}\n\nexport type Schema<T> = ZodType<T>;\n\nexport interface SchemaValidationOptions {\n message?: string;\n}\n\nexport const validateSchema = <T>(\n schema: Schema<T>,\n value: unknown,\n options: SchemaValidationOptions = {},\n): T => {\n const result = schema.safeParse(value);\n if (!result.success) {\n throw new SchemaValidationError(\n options.message ?? \"Schema validation failed\",\n result.error.issues,\n );\n }\n\n return result.data;\n};\n\nexport const isSchemaValid = <T>(\n schema: Schema<T>,\n value: unknown,\n): value is T => {\n return schema.safeParse(value).success;\n};\n\nexport interface JsonSchemaOptions {\n name?: string;\n target?: \"jsonSchema7\" | \"openApi3\";\n}\n\nexport const schemaToJson = (\n schema: ZodTypeAny,\n options: JsonSchemaOptions = {},\n): JsonSchema7Type => {\n return zodToJsonSchema(schema, options) as JsonSchema7Type;\n};\n\nexport const getSchemaDefault = <T>(schema: Schema<T>): T | undefined => {\n const result = schema.safeParse(undefined);\n return result.success ? result.data : undefined;\n};\n\nexport const mergeSchemaDefaults = <T extends Record<string, unknown>>(\n schema: Schema<T>,\n value: Partial<T>,\n): T => {\n const defaults = getSchemaDefault(schema);\n if (defaults && typeof defaults === \"object\") {\n return validateSchema(schema, { ...defaults, ...value });\n }\n\n return validateSchema(schema, value);\n};\n","import { z } from \"zod\";\n\nimport {\n AgentDecisionSchema,\n type AgentDecision,\n type ToolExecutionSummary,\n ToolExecutionSummarySchema,\n} from \"./schemas\";\nimport { BaseAgent, type BaseAgentConfig } from \"../base/agent\";\nimport type { AgentContext } from \"../base/context\";\nimport { HookEvents } from \"../base/hooks\";\nimport type { ToolSuccess } from \"../base/tool\";\nimport { OpperClient } from \"../opper/client\";\nimport { getDefaultLogger, LogLevel, type AgentLogger } from \"../utils/logger\";\nimport { schemaToJson } from \"../utils/schema-utils\";\n\nconst isToolSuccessResult = (value: unknown): value is ToolSuccess<unknown> => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const candidate = value as Partial<ToolSuccess<unknown>>;\n return (\n candidate.success === true &&\n typeof candidate.toolName === \"string\" &&\n \"output\" in candidate\n );\n};\n\n/**\n * Configuration for the core Agent\n */\nexport interface AgentConfig<TInput, TOutput>\n extends BaseAgentConfig<TInput, TOutput> {\n /**\n * Custom Opper client instance (for testing or custom configuration)\n */\n opperClient?: OpperClient;\n\n /**\n * Logger instance\n */\n logger?: AgentLogger;\n\n /**\n * Verbose logging\n */\n verbose?: boolean;\n}\n\n/**\n * Core Agent implementation with \"while tools > 0\" loop.\n * Implements think → tool execution → memory handling cycle.\n */\nexport class Agent<TInput = unknown, TOutput = unknown> extends BaseAgent<\n TInput,\n TOutput\n> {\n private readonly opperClient: OpperClient;\n private readonly logger: AgentLogger;\n private readonly verbose: boolean;\n\n constructor(config: AgentConfig<TInput, TOutput>) {\n super(config);\n\n this.logger = config.logger ?? getDefaultLogger();\n this.verbose = config.verbose ?? false;\n\n // If verbose mode is enabled, ensure the logger emits info-level logs\n if (this.verbose) {\n try {\n this.logger.setLevel?.(LogLevel.INFO);\n } catch {\n // Ignore if the provided logger does not support dynamic level changes\n }\n }\n\n // Initialize Opper client\n this.opperClient =\n config.opperClient ??\n new OpperClient(this.opperConfig.apiKey, {\n logger: this.logger,\n });\n }\n\n /**\n * Serialize input for passing to LLM or spans\n */\n private serializeInput(input: TInput): string {\n if (typeof input === \"string\") {\n return input;\n }\n if (typeof input === \"object\" && input !== null) {\n return JSON.stringify(input);\n }\n return String(input);\n }\n\n /**\n * Main agent loop: think → tool execution → memory handling → repeat until complete\n */\n protected async runLoop(\n input: TInput,\n context: AgentContext,\n ): Promise<TOutput> {\n this.log(\"Starting agent loop\", {\n goal: input,\n maxIterations: this.maxIterations,\n tools: Array.from(this.tools.keys()),\n });\n\n // Create parent span for this agent execution\n const parentSpan = await this.opperClient.createSpan({\n name: `${this.name}_execution`,\n input: this.serializeInput(input),\n ...(context.parentSpanId ? { parentSpanId: context.parentSpanId } : {}),\n });\n context.parentSpanId = parentSpan.id;\n\n try {\n while (context.iteration < this.maxIterations) {\n const currentIteration = context.iteration + 1;\n\n this.log(`Iteration ${currentIteration}/${this.maxIterations}`, {\n toolsAvailable: this.tools.size,\n });\n\n // Hook: loop_start\n await this.triggerHook(HookEvents.LoopStart, { context });\n\n let loopComplete = false;\n\n try {\n // Step 1: Think - Get agent's decision\n const { decision, spanId: thinkSpanId } = await this.think(\n input,\n context,\n );\n\n // Step 2: Handle memory actions (Phase 7 integration point)\n const memoryResults = await this.handleMemoryActions(\n decision,\n context,\n thinkSpanId,\n );\n\n // Track tool call records captured during this iteration\n const toolCallStartIndex = context.toolCalls.length;\n\n // Step 3: Execute tool calls (if any)\n const toolResults = await this.executeToolCalls(\n decision,\n context,\n thinkSpanId,\n );\n const combinedResults = [...memoryResults, ...toolResults];\n\n const newToolCalls = context.toolCalls.slice(toolCallStartIndex);\n\n // Step 4: Record execution cycle (always capture reasoning per iteration)\n context.addCycle({\n iteration: currentIteration,\n thought: {\n reasoning: decision.reasoning,\n memoryReads: decision.memoryReads,\n memoryUpdates: decision.memoryUpdates,\n },\n toolCalls: newToolCalls,\n results: combinedResults,\n timestamp: Date.now(),\n });\n context.iteration = currentIteration;\n\n // Check if loop is complete\n const hasToolCalls = decision.toolCalls.length > 0;\n const hasMemoryReads =\n this.enableMemory && (decision.memoryReads?.length ?? 0) > 0;\n loopComplete = !hasToolCalls && !hasMemoryReads;\n } finally {\n // Hook: loop_end\n await this.triggerHook(HookEvents.LoopEnd, { context });\n }\n\n // Exit loop if complete\n if (loopComplete) {\n this.log(\"Loop complete, generating final result\", {\n iteration: context.iteration + 1,\n });\n break;\n }\n }\n\n // Check if we exceeded max iterations without completing\n if (context.iteration >= this.maxIterations) {\n throw new Error(\n `Agent exceeded maximum iterations (${this.maxIterations}) without completing the task`,\n );\n }\n\n // Generate final result\n const result = await this.generateFinalResult(input, context);\n\n // Update parent span with final output\n await this.opperClient.updateSpan(parentSpan.id, result);\n\n return result;\n } catch (error) {\n // Update parent span with error\n await this.opperClient.updateSpan(parentSpan.id, undefined, {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n }\n\n /**\n * Think step: Call LLM to decide next action\n */\n private async think(\n input: TInput,\n context: AgentContext,\n ): Promise<{ decision: AgentDecision; spanId: string }> {\n const spanName = \"think\";\n this.log(\"Think step\", { iteration: context.iteration });\n\n // Trigger hook: llm_call\n await this.triggerHook(HookEvents.LlmCall, { context, callType: \"think\" });\n\n try {\n // Build static instructions\n const instructions = this.buildThinkInstructions();\n\n // Build dynamic context (execution history, tools, memory, etc.)\n const thinkContext = await this.buildThinkContext(input, context);\n\n // Call Opper with structured output\n const response = await this.opperClient.call<\n typeof thinkContext,\n AgentDecision\n >({\n name: spanName,\n instructions,\n input: thinkContext,\n outputSchema: AgentDecisionSchema as z.ZodType<AgentDecision>,\n model: this.model,\n ...(context.parentSpanId && { parentSpanId: context.parentSpanId }),\n });\n\n // Update usage\n context.updateUsage({\n requests: 1,\n inputTokens: response.usage.inputTokens,\n outputTokens: response.usage.outputTokens,\n totalTokens: response.usage.totalTokens,\n cost: response.usage.cost,\n });\n\n // Parse and validate decision\n const decision = AgentDecisionSchema.parse(response.jsonPayload);\n\n // Trigger hook: llm_response\n await this.triggerHook(HookEvents.LlmResponse, {\n context,\n callType: \"think\",\n response,\n });\n\n // Trigger hook: think_end\n await this.triggerHook(HookEvents.ThinkEnd, {\n context,\n thought: { reasoning: decision.reasoning },\n });\n\n this.log(\"Think result\", {\n reasoning: decision.reasoning,\n toolCalls: decision.toolCalls.length,\n memoryReads: decision.memoryReads?.length ?? 0,\n memoryWrites: Object.keys(decision.memoryUpdates ?? {}).length,\n });\n\n return { decision, spanId: response.spanId };\n } catch (error) {\n this.logger.error(\"Think step failed\", error);\n throw new Error(\n `Think step failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n /**\n * Build static instructions for the think step\n */\n private buildThinkInstructions(): string {\n let instructions = `You are in a Think-Act reasoning loop.\n\nYOUR TASK:\n1. Analyze the current situation\n2. Decide if the goal is complete or more actions are needed\n3. If more actions needed: specify tools to call\n4. If goal complete: return empty tool_calls list\n\nIMPORTANT:\n- Return empty toolCalls array when task is COMPLETE\n- Only use available tools\n- Provide clear reasoning for each decision`;\n\n // Add memory instructions if enabled\n if (this.enableMemory) {\n instructions += `\n\nMEMORY SYSTEM:\nYou have access to a persistent memory system that works across iterations.\n\nMemory Operations:\n1. READ: Add keys to memoryReads when you need to load existing entries\n2. WRITE: Populate memoryUpdates with key-value pairs (with optional description/metadata)\n Example: memoryUpdates = { \"favorite_color\": { \"value\": \"blue\", \"description\": \"User likes blue\" } }\n\nWhen to use memory:\n- Save important calculations, decisions, or user preferences\n- Load memory when you need information from earlier in the conversation\n- Use descriptive keys like \"budget_total\", \"user_favorite_city\", etc.\n- When a key appears in memory_catalog and you need its value, add it to memoryReads before continuing\n\nThe memory you write persists across all process() calls on this agent.`;\n }\n\n return instructions;\n }\n\n /**\n * Build dynamic context for the think step\n */\n private async buildThinkContext(input: TInput, context: AgentContext) {\n // Build available tools list\n const availableTools = Array.from(this.tools.values()).map((tool) => ({\n name: tool.name,\n description: tool.description || \"\",\n // Convert Zod schema to JSON Schema for LLM consumption\n parameters: tool.schema ? schemaToJson(tool.schema) : {},\n }));\n\n // Build execution history\n const executionHistory = context.getLastNCycles(3).map((cycle) => {\n // Extract reasoning from thought\n const thought =\n typeof cycle.thought === \"object\" && cycle.thought !== null\n ? ((cycle.thought as Record<string, unknown>)[\n \"reasoning\"\n ] as string) || \"\"\n : String(cycle.thought || \"\");\n\n // Map results to summary format\n const results = Array.isArray(cycle.results)\n ? cycle.results.map((r) => {\n const result = r as ToolExecutionSummary;\n\n // Extract the actual output value - handle case where output might be a ToolResult object\n let actualOutput = result.output;\n if (result.success && isToolSuccessResult(actualOutput)) {\n // Extract inner output when a full ToolResult is stored\n actualOutput = actualOutput.output;\n }\n\n return {\n tool: result.toolName,\n success: result.success,\n // Serialize result properly - use JSON for objects, String for primitives\n result: result.success\n ? typeof actualOutput === \"object\"\n ? JSON.stringify(actualOutput)\n : String(actualOutput)\n : undefined,\n error: !result.success ? result.error : undefined,\n };\n })\n : [];\n\n return {\n iteration: cycle.iteration,\n thought,\n results,\n };\n });\n\n // Build memory catalog if memory is enabled and has entries\n let memoryCatalog: unknown = null;\n if (this.enableMemory && this.memory && (await this.memory.hasEntries())) {\n memoryCatalog = await this.memory.listEntries();\n }\n\n // Get loaded memory from context metadata\n const loadedMemory = context.metadata[\"current_memory\"] ?? null;\n\n // Build context object\n return {\n goal: this.serializeInput(input),\n agent_description: this.description || \"\",\n instructions: this.instructions || \"No specific instructions.\",\n available_tools: availableTools,\n execution_history: executionHistory,\n current_iteration: context.iteration + 1,\n max_iterations: this.maxIterations,\n memory_catalog: memoryCatalog,\n loaded_memory: loadedMemory,\n };\n }\n\n /**\n * Execute all tool calls from a decision\n */\n private async executeToolCalls(\n decision: AgentDecision,\n context: AgentContext,\n parentSpanId?: string,\n ): Promise<ToolExecutionSummary[]> {\n if (decision.toolCalls.length === 0) {\n return [];\n }\n\n this.log(`Executing ${decision.toolCalls.length} tool call(s)`);\n\n const results: ToolExecutionSummary[] = [];\n\n for (const toolCall of decision.toolCalls) {\n // Verbose: announce the tool and parameters\n this.log(`Action: ${toolCall.toolName}`, {\n parameters: toolCall.arguments,\n });\n\n // Create span for this tool call\n const toolSpan = await this.opperClient.createSpan({\n name: `tool_${toolCall.toolName}`,\n input: toolCall.arguments,\n ...(parentSpanId\n ? { parentSpanId }\n : context.parentSpanId\n ? { parentSpanId: context.parentSpanId }\n : {}),\n });\n\n try {\n // Execute tool via base class method (handles hooks and recording)\n // Pass tool span ID so nested operations can use it as parent\n const result = await this.executeTool(\n toolCall.toolName,\n toolCall.arguments,\n context,\n { spanId: toolSpan.id },\n );\n\n // Update tool span with result\n if (result.success) {\n await this.opperClient.updateSpan(toolSpan.id, result.output);\n } else {\n await this.opperClient.updateSpan(toolSpan.id, undefined, {\n error:\n result.error instanceof Error\n ? result.error.message\n : String(result.error),\n });\n }\n\n // Create summary\n const summary: ToolExecutionSummary = {\n toolName: toolCall.toolName,\n success: result.success,\n ...(result.success && { output: result.output }),\n ...(!result.success && {\n error:\n result.error instanceof Error\n ? result.error.message\n : String(result.error),\n }),\n };\n\n results.push(ToolExecutionSummarySchema.parse(summary));\n\n this.log(\n `Tool ${toolCall.toolName} ${result.success ? \"succeeded\" : \"failed\"}`,\n {\n success: result.success,\n },\n );\n } catch (error) {\n // Update span with error\n await this.opperClient.updateSpan(toolSpan.id, undefined, {\n error: error instanceof Error ? error.message : String(error),\n });\n\n // Tool execution threw an error\n const summary: ToolExecutionSummary = {\n toolName: toolCall.toolName,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n\n results.push(ToolExecutionSummarySchema.parse(summary));\n\n this.logger.warn(`Tool ${toolCall.toolName} threw error`, {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return results;\n }\n\n /**\n * Handle memory operations from a decision\n * Supports read and write operations with graceful degradation\n */\n private async handleMemoryActions(\n decision: AgentDecision,\n context: AgentContext,\n parentSpanId?: string,\n ): Promise<ToolExecutionSummary[]> {\n if (!this.enableMemory || !this.memory) {\n return [];\n }\n\n const hasReads =\n Array.isArray(decision.memoryReads) && decision.memoryReads.length > 0;\n const updateEntries = Object.entries(decision.memoryUpdates ?? {}).filter(\n ([key, update]) =>\n typeof key === \"string\" &&\n key.length > 0 &&\n typeof update === \"object\" &&\n update !== null &&\n \"value\" in update,\n );\n const hasWrites = updateEntries.length > 0;\n\n if (!hasReads && !hasWrites) {\n return [];\n }\n\n this.log(\"Handling memory operations\", {\n reads: decision.memoryReads?.length ?? 0,\n writes: updateEntries.length,\n });\n\n const spanParentId = parentSpanId ?? context.parentSpanId ?? undefined;\n const summaries: ToolExecutionSummary[] = [];\n\n // Handle reads first\n if (hasReads) {\n try {\n const keySet = new Set(\n decision.memoryReads.filter(\n (key): key is string => typeof key === \"string\" && key.length > 0,\n ),\n );\n const keys = Array.from(keySet);\n\n if (keys.length > 0) {\n const memoryReadSpan = await this.opperClient.createSpan({\n name: \"memory_read\",\n input: keys,\n ...(spanParentId && { parentSpanId: spanParentId }),\n });\n\n const memoryData = await this.memory.read(keys);\n\n await this.opperClient.updateSpan(memoryReadSpan.id, memoryData);\n\n // Store loaded memory in context metadata\n context.setMetadata(\"current_memory\", memoryData);\n\n this.log(`Loaded ${Object.keys(memoryData).length} memory entries`, {\n keys,\n });\n\n summaries.push(\n ToolExecutionSummarySchema.parse({\n toolName: \"memory_read\",\n success: true,\n output: { keys, data: memoryData },\n }),\n );\n\n // Trigger hooks for each read\n for (const key of keys) {\n await this.triggerHook(HookEvents.MemoryRead, {\n context,\n key,\n value: memoryData[key],\n });\n }\n }\n } catch (error) {\n await this.triggerHook(HookEvents.MemoryError, {\n context,\n operation: \"read\",\n error,\n });\n\n this.logger.warn(\"Memory read failed\", {\n error: error instanceof Error ? error.message : String(error),\n });\n\n summaries.push(\n ToolExecutionSummarySchema.parse({\n toolName: \"memory_read\",\n success: false,\n error: error instanceof Error ? error.message : String(error),\n }),\n );\n }\n }\n\n // Handle writes\n if (hasWrites) {\n try {\n const memoryWriteSpan = await this.opperClient.createSpan({\n name: \"memory_write\",\n input: updateEntries.map(([key]) => key),\n ...(spanParentId && { parentSpanId: spanParentId }),\n });\n\n for (const [key, update] of updateEntries) {\n const castUpdate = update as {\n value: unknown;\n description?: string;\n metadata?: Record<string, unknown>;\n };\n\n await this.memory.write(\n key,\n castUpdate.value,\n castUpdate.description ?? key,\n castUpdate.metadata,\n );\n\n await this.triggerHook(HookEvents.MemoryWrite, {\n context,\n key,\n value: castUpdate.value,\n });\n }\n\n await this.opperClient.updateSpan(\n memoryWriteSpan.id,\n `Successfully wrote ${updateEntries.length} keys`,\n );\n\n this.log(`Wrote ${updateEntries.length} memory entries`);\n\n summaries.push(\n ToolExecutionSummarySchema.parse({\n toolName: \"memory_write\",\n success: true,\n output: {\n keys: updateEntries.map(([key]) => key),\n },\n }),\n );\n } catch (error) {\n await this.triggerHook(HookEvents.MemoryError, {\n context,\n operation: \"write\",\n error,\n });\n\n this.logger.warn(\"Memory write failed\", {\n error: error instanceof Error ? error.message : String(error),\n });\n\n summaries.push(\n ToolExecutionSummarySchema.parse({\n toolName: \"memory_write\",\n success: false,\n error: error instanceof Error ? error.message : String(error),\n }),\n );\n }\n }\n\n return summaries;\n }\n\n /**\n * Generate final result based on execution history\n */\n private async generateFinalResult(\n input: TInput,\n context: AgentContext,\n ): Promise<TOutput> {\n this.log(\"Generating final result\", { totalIterations: context.iteration });\n\n // Build context for final result generation\n const finalContext = {\n goal: this.serializeInput(input),\n instructions: this.instructions || \"No specific instructions.\",\n execution_history: context.executionHistory.map((cycle) => {\n const results = Array.isArray(cycle.results) ? cycle.results : [];\n return {\n iteration: cycle.iteration,\n actions_taken: results.map(\n (r) => (r as ToolExecutionSummary).toolName,\n ),\n results: results\n .filter((r) => (r as ToolExecutionSummary).success)\n .map((r) => {\n const result = r as ToolExecutionSummary;\n\n // Extract the actual output value - handle case where output might be a ToolResult object\n let actualOutput = result.output;\n if (isToolSuccessResult(actualOutput)) {\n // Extract inner output when a full ToolResult is stored\n actualOutput = actualOutput.output;\n }\n\n return {\n tool: result.toolName,\n // Serialize result properly - use JSON for objects, String for primitives\n result:\n typeof actualOutput === \"object\"\n ? JSON.stringify(actualOutput)\n : String(actualOutput),\n };\n }),\n };\n }),\n total_iterations: context.iteration,\n };\n\n const instructions = `Generate the final result based on the execution history.\nFollow any instructions provided for formatting and style.`;\n\n try {\n // Call Opper to generate final result\n const callOptions: {\n name: string;\n instructions: string;\n input: typeof finalContext;\n model: string | readonly string[];\n parentSpanId?: string;\n outputSchema?: z.ZodType<TOutput>;\n } = {\n name: \"generate_final_result\",\n instructions,\n input: finalContext,\n model: this.model,\n };\n\n if (context.parentSpanId) {\n callOptions.parentSpanId = context.parentSpanId;\n }\n\n if (this.outputSchema) {\n callOptions.outputSchema = this.outputSchema;\n }\n\n const response = await this.opperClient.call<\n typeof finalContext,\n TOutput\n >(callOptions);\n\n // Update usage\n context.updateUsage({\n requests: 1,\n inputTokens: response.usage.inputTokens,\n outputTokens: response.usage.outputTokens,\n totalTokens: response.usage.totalTokens,\n cost: response.usage.cost,\n });\n\n // Parse and return result\n if (this.outputSchema) {\n // With output schema, Opper returns jsonPayload\n const parsed = this.outputSchema.parse(response.jsonPayload) as TOutput;\n this.log(\"Final result generated (schema-validated)\");\n return parsed;\n }\n\n // Without output schema, Opper returns message\n this.log(\"Final result generated\");\n return response.message as TOutput;\n } catch (error) {\n this.logger.error(\"Failed to generate final result\", error);\n throw new Error(\n `Failed to generate final result: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n /**\n * Log helper\n */\n private log(message: string, data?: Record<string, unknown>): void {\n if (this.verbose) {\n this.logger.info(`[${this.name}] ${message}`, data);\n }\n }\n}\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { StreamableHTTPClientTransportOptions } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport type { Implementation } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { IOType } from \"node:child_process\";\nimport type { Stream } from \"node:stream\";\n\nimport { MCPServerConfig } from \"./config\";\n\nexport interface MCPTool {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n}\n\nexport interface MCPClientOptions {\n clientInfo?: Implementation;\n}\n\nconst DEFAULT_CLIENT_INFO: Implementation = {\n name: \"opper-agent-ts-mcp-client\",\n version: \"0.0.0\",\n};\n\nexport class MCPClient {\n private readonly config: MCPServerConfig;\n private readonly client: Client;\n private transport:\n | StdioClientTransport\n | SSEClientTransport\n | StreamableHTTPClientTransport\n | null;\n private connected: boolean;\n private toolCache: MCPTool[] | null;\n\n constructor(config: MCPServerConfig, options: MCPClientOptions = {}) {\n this.config = config;\n this.client = new Client(options.clientInfo ?? DEFAULT_CLIENT_INFO, {\n enforceStrictCapabilities: false,\n });\n this.transport = null;\n this.connected = false;\n this.toolCache = null;\n }\n\n static fromConfig(\n config: MCPServerConfig,\n options?: MCPClientOptions,\n ): MCPClient {\n return new MCPClient(config, options);\n }\n\n async connect(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n const transport = this.createTransport();\n this.transport = transport;\n\n try {\n await this.client.connect(transport as Transport);\n this.connected = true;\n } catch (error) {\n await transport.close().catch(() => {});\n this.transport = null;\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n if (!this.connected) {\n return;\n }\n\n await this.client.close().catch(() => {});\n await this.transport?.close().catch(() => {});\n this.transport = null;\n this.connected = false;\n this.toolCache = null;\n }\n\n async listTools(): Promise<MCPTool[]> {\n const session = this.ensureConnected();\n\n if (this.toolCache) {\n return this.toolCache;\n }\n\n const response = await session.listTools({});\n const tools =\n response.tools?.map((tool) => {\n const parameters = (tool.inputSchema ?? {}) as Record<string, unknown>;\n const outputSchema = tool[\"outputSchema\"] as\n | Record<string, unknown>\n | undefined;\n\n const normalized: MCPTool = {\n name: tool.name,\n description: tool.description ?? \"\",\n parameters,\n };\n\n if (outputSchema) {\n normalized.outputSchema = outputSchema;\n }\n\n return normalized;\n }) ?? [];\n\n this.toolCache = tools;\n return tools;\n }\n\n async callTool(\n toolName: string,\n args: Record<string, unknown> | undefined,\n ): Promise<unknown> {\n const session = this.ensureConnected();\n\n const response = await session.callTool({\n name: toolName,\n arguments: args,\n });\n\n return response;\n }\n\n get isConnected(): boolean {\n return this.connected;\n }\n\n private ensureConnected(): Client {\n if (!this.connected) {\n throw new Error(`MCP server \"${this.config.name}\" is not connected`);\n }\n\n return this.client;\n }\n\n private createTransport():\n | StdioClientTransport\n | SSEClientTransport\n | StreamableHTTPClientTransport {\n if (this.config.transport === \"stdio\") {\n const stdioOptions: {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n stderr?: IOType | Stream | number;\n } = {\n command: this.config.command,\n };\n\n if (this.config.args.length > 0) {\n stdioOptions.args = this.config.args;\n }\n\n if (Object.keys(this.config.env).length > 0) {\n stdioOptions.env = this.config.env;\n }\n\n if (this.config.cwd) {\n stdioOptions.cwd = this.config.cwd;\n }\n\n if (this.config.stderr) {\n stdioOptions.stderr = this.config.stderr as IOType;\n }\n\n return new StdioClientTransport(stdioOptions);\n }\n\n if (this.config.transport === \"streamable-http\") {\n const options: StreamableHTTPClientTransportOptions = {};\n const headers = this.config.headers;\n\n if (headers && Object.keys(headers).length > 0) {\n options.requestInit = { headers } satisfies RequestInit;\n }\n\n if (this.config.sessionId) {\n options.sessionId = this.config.sessionId;\n }\n\n return new StreamableHTTPClientTransport(\n new URL(this.config.url),\n options,\n );\n }\n\n const headers = this.config.headers ?? {};\n const headerEntries = Object.entries(headers);\n\n type EventSourceInitLike = {\n fetch?: (url: string | URL, init?: RequestInit) => Promise<Response>;\n };\n\n const options: {\n eventSourceInit?: EventSourceInitLike;\n requestInit?: RequestInit;\n } = {};\n\n if (headerEntries.length > 0) {\n options.eventSourceInit = {\n fetch: async (url: string | URL, init?: RequestInit) => {\n const mergedHeaders = new Headers(init?.headers ?? {});\n for (const [key, value] of headerEntries) {\n mergedHeaders.set(key, value);\n }\n if (!mergedHeaders.has(\"Accept\")) {\n mergedHeaders.set(\"Accept\", \"text/event-stream\");\n }\n return fetch(url, {\n ...init,\n headers: mergedHeaders,\n });\n },\n } satisfies EventSourceInitLike;\n }\n\n if (headerEntries.length > 0 || this.config.method === \"POST\") {\n options.requestInit = {\n ...(this.config.method ? { method: this.config.method } : {}),\n ...(headerEntries.length > 0 ? { headers } : {}),\n } satisfies RequestInit;\n }\n\n return new SSEClientTransport(new URL(this.config.url), options);\n }\n}\n","import { z } from \"zod\";\n\nconst MCPTransportSchema = z.enum([\"stdio\", \"http-sse\", \"streamable-http\"]);\n\nconst MCPBaseConfigSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n transport: MCPTransportSchema,\n timeout: z.number().positive(\"timeout must be positive\").default(30),\n metadata: z.record(z.string(), z.unknown()).default({}),\n});\n\nconst MCPStdIoConfigSchema = MCPBaseConfigSchema.extend({\n transport: z.literal(\"stdio\"),\n command: z.string().min(1, \"command is required for stdio transport\"),\n args: z.array(z.string()).default([]),\n env: z.record(z.string(), z.string()).default({}),\n cwd: z.string().optional(),\n stderr: z\n .union([z.literal(\"inherit\"), z.literal(\"pipe\"), z.literal(\"ignore\")])\n .optional(),\n});\n\nconst MCPHttpSseConfigSchema = MCPBaseConfigSchema.extend({\n transport: z.literal(\"http-sse\"),\n url: z.string().url(\"url must be a valid HTTP(S) URL\"),\n headers: z.record(z.string(), z.string()).default({}),\n method: z.enum([\"GET\", \"POST\"]).default(\"GET\"),\n});\n\nconst MCPStreamableHttpConfigSchema = MCPBaseConfigSchema.extend({\n transport: z.literal(\"streamable-http\"),\n url: z.string().url(\"url must be a valid HTTP(S) URL\"),\n headers: z.record(z.string(), z.string()).default({}),\n sessionId: z.string().optional(),\n});\n\nconst MCPConfigVariants = z.discriminatedUnion(\"transport\", [\n MCPStdIoConfigSchema,\n MCPHttpSseConfigSchema,\n MCPStreamableHttpConfigSchema,\n]);\n\nexport type MCPServerConfig = z.output<typeof MCPConfigVariants>;\nexport type MCPServerConfigInput = z.input<typeof MCPConfigVariants>;\n\nexport const MCPServerConfigSchema = MCPConfigVariants.superRefine(\n (value, ctx) => {\n if (\n value.transport === \"http-sse\" ||\n value.transport === \"streamable-http\"\n ) {\n if (!value.url) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `url is required for ${value.transport} transport`,\n path: [\"url\"],\n });\n } else if (\n !value.url.startsWith(\"http://\") &&\n !value.url.startsWith(\"https://\")\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"url must start with http:// or https://\",\n path: [\"url\"],\n });\n }\n }\n },\n);\n\nexport const MCPconfig = (config: MCPServerConfigInput): MCPServerConfig =>\n MCPServerConfigSchema.parse(config);\n\nexport const createMCPServerConfig = MCPconfig;\n","import { MCPClient, type MCPClientOptions, type MCPTool } from \"./client\";\nimport {\n MCPServerConfigSchema,\n type MCPServerConfig,\n type MCPServerConfigInput,\n} from \"./config\";\nimport type { BaseAgent } from \"../base/agent\";\nimport {\n ToolResultFactory,\n type Tool,\n type ToolExecutionContext,\n type ToolProvider,\n} from \"../base/tool\";\n\nexport interface MCPToolProviderOptions {\n namePrefix?: string;\n clientOptions?: MCPClientOptions;\n clientFactory?: (\n config: MCPServerConfig,\n options?: MCPClientOptions,\n ) => MCPClient;\n logger?: {\n debug?: (message: string, context?: Record<string, unknown>) => void;\n info?: (message: string, context?: Record<string, unknown>) => void;\n warn?: (message: string, context?: Record<string, unknown>) => void;\n error?: (message: string, context?: Record<string, unknown>) => void;\n };\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\ntype ProviderLogger = {\n debug?: (message: string, context?: Record<string, unknown>) => void;\n info?: (message: string, context?: Record<string, unknown>) => void;\n warn?: (message: string, context?: Record<string, unknown>) => void;\n error?: (message: string, context?: Record<string, unknown>) => void;\n};\n\nexport class MCPToolProvider implements ToolProvider {\n private readonly configs: ReadonlyArray<MCPServerConfig>;\n private readonly namePrefix: string | undefined;\n private readonly clientOptions: MCPClientOptions | undefined;\n private readonly clientFactory: (\n config: MCPServerConfig,\n options?: MCPClientOptions,\n ) => MCPClient;\n private readonly logger: ProviderLogger;\n private readonly clients: Map<string, MCPClient>;\n\n constructor(\n configs: ReadonlyArray<MCPServerConfig>,\n options: MCPToolProviderOptions = {},\n ) {\n if (configs.length === 0) {\n throw new Error(\n \"MCPToolProvider requires at least one server configuration\",\n );\n }\n\n this.configs = configs;\n this.namePrefix = options.namePrefix ?? undefined;\n this.clientOptions = options.clientOptions ?? undefined;\n this.clientFactory =\n options.clientFactory ??\n ((config, factoryOptions) =>\n MCPClient.fromConfig(config, factoryOptions));\n this.logger = options.logger ?? {\n warn: (message: string, context?: Record<string, unknown>) =>\n console.warn(`[MCPToolProvider] ${message}`, context),\n error: (message: string, context?: Record<string, unknown>) =>\n console.error(`[MCPToolProvider] ${message}`, context),\n debug: () => {},\n };\n this.clients = new Map();\n }\n\n async setup(\n agent: BaseAgent<unknown, unknown>,\n ): Promise<Array<Tool<unknown, unknown>>> {\n void agent;\n const tools: Array<Tool<unknown, unknown>> = [];\n\n for (const config of this.configs) {\n let client: MCPClient | null = null;\n try {\n client = this.clientFactory(config, this.clientOptions);\n await client.connect();\n this.clients.set(config.name, client);\n\n const mcpTools = await client.listTools();\n for (const mcpTool of mcpTools) {\n tools.push(this.wrapTool(config, client, mcpTool));\n }\n\n this.logger?.debug?.(\"Registered MCP server tools\", {\n server: config.name,\n toolCount: mcpTools.length,\n });\n } catch (error) {\n this.logger?.warn?.(\"Failed to initialize MCP server\", {\n server: config.name,\n error: error instanceof Error ? error.message : String(error),\n });\n\n if (client) {\n await client.disconnect().catch(() => {});\n this.clients.delete(config.name);\n }\n }\n }\n\n return tools;\n }\n\n async teardown(): Promise<void> {\n const disconnects = Array.from(this.clients.entries()).map(\n async ([serverName, client]) => {\n try {\n await client.disconnect();\n this.logger?.debug?.(\"Disconnected MCP server\", {\n server: serverName,\n });\n } catch (error) {\n this.logger?.warn?.(\"Error disconnecting MCP server\", {\n server: serverName,\n error: error instanceof Error ? error.message : String(error),\n });\n } finally {\n this.clients.delete(serverName);\n }\n },\n );\n\n await Promise.allSettled(disconnects);\n }\n\n private wrapTool(\n config: MCPServerConfig,\n client: MCPClient,\n mcpTool: MCPTool,\n ): Tool<unknown, unknown> {\n const prefix = this.namePrefix ?? config.name;\n const toolName = `${prefix}:${mcpTool.name}`;\n\n return {\n name: toolName,\n description: mcpTool.description,\n metadata: {\n provider: \"mcp\",\n server: config.name,\n originalToolName: mcpTool.name,\n parameters: mcpTool.parameters,\n outputSchema: mcpTool.outputSchema,\n },\n execute: async (input: unknown, context: ToolExecutionContext) => {\n void context;\n const startedAt = Date.now();\n const args = isRecord(input)\n ? input\n : input === undefined\n ? {}\n : { value: input };\n\n try {\n const result = await client.callTool(mcpTool.name, args);\n return ToolResultFactory.success(toolName, result, {\n metadata: {\n provider: \"mcp\",\n server: config.name,\n tool: mcpTool.name,\n },\n startedAt,\n finishedAt: Date.now(),\n });\n } catch (error) {\n const failure =\n error instanceof Error ? error : new Error(String(error));\n return ToolResultFactory.failure(toolName, failure, {\n metadata: {\n provider: \"mcp\",\n server: config.name,\n tool: mcpTool.name,\n },\n startedAt,\n finishedAt: Date.now(),\n });\n }\n },\n };\n }\n}\n\nexport const mcp = (\n ...configs: ReadonlyArray<MCPServerConfig | MCPServerConfigInput>\n): MCPToolProvider => {\n if (configs.length === 0) {\n throw new Error(\"At least one MCP server configuration is required\");\n }\n\n const parsedConfigs = configs.map((config) =>\n MCPServerConfigSchema.parse(config),\n );\n\n return new MCPToolProvider(parsedConfigs);\n};\n","import type { ZodType } from \"zod\";\n\nimport type {\n Tool,\n ToolDefinition,\n ToolExecutionContext,\n ToolResult,\n} from \"../base/tool\";\nimport { ToolResultFactory } from \"../base/tool\";\n\n/**\n * Safe access to Reflect metadata API (from reflect-metadata package).\n * Returns undefined if reflect-metadata is not installed.\n */\ntype ReflectWithMetadata = typeof Reflect & {\n defineMetadata?: (\n metadataKey: string,\n metadataValue: unknown,\n target: object,\n propertyKey: string | symbol,\n ) => void;\n getMetadata?: (\n metadataKey: string,\n target: object,\n propertyKey: string | symbol,\n ) => unknown;\n};\n\nconst reflectWithMetadata = Reflect as ReflectWithMetadata;\n\nconst ReflectMetadata = {\n define: (\n metadataKey: string,\n metadataValue: unknown,\n target: object,\n propertyKey: string | symbol,\n ): void => {\n if (typeof reflectWithMetadata.defineMetadata === \"function\") {\n reflectWithMetadata.defineMetadata(\n metadataKey,\n metadataValue,\n target,\n propertyKey,\n );\n }\n },\n\n get: (\n metadataKey: string,\n target: object,\n propertyKey: string | symbol,\n ): unknown => {\n if (typeof reflectWithMetadata.getMetadata === \"function\") {\n return reflectWithMetadata.getMetadata(metadataKey, target, propertyKey);\n }\n return undefined;\n },\n};\n\nconst TOOL_METADATA_KEY = \"opper:tool\";\n\nconst toolMetadataStore = new WeakMap<\n object,\n Map<string | symbol, ToolDefinition<unknown, unknown>>\n>();\n\nfunction setToolMetadata<TInput, TOutput>(\n target: object,\n propertyKey: string | symbol,\n metadata: ToolDefinition<TInput, TOutput>,\n): void {\n ReflectMetadata.define(TOOL_METADATA_KEY, metadata, target, propertyKey);\n\n let metadataForTarget = toolMetadataStore.get(target);\n if (!metadataForTarget) {\n metadataForTarget = new Map();\n toolMetadataStore.set(target, metadataForTarget);\n }\n\n metadataForTarget.set(\n propertyKey,\n metadata as ToolDefinition<unknown, unknown>,\n );\n}\n\nfunction getToolMetadata<TInput, TOutput>(\n target: object,\n propertyKey: string | symbol,\n): ToolDefinition<TInput, TOutput> | undefined {\n const metadata = ReflectMetadata.get(\n TOOL_METADATA_KEY,\n target,\n propertyKey,\n ) as ToolDefinition<TInput, TOutput> | undefined;\n\n if (metadata) {\n return metadata;\n }\n\n const metadataForTarget = toolMetadataStore.get(target);\n return metadataForTarget?.get(propertyKey) as\n | ToolDefinition<TInput, TOutput>\n | undefined;\n}\n\n/**\n * Options for creating a tool from a function\n */\nexport interface ToolOptions<TInput> {\n /**\n * Tool name (defaults to function name)\n */\n name?: string;\n\n /**\n * Human-readable description\n */\n description?: string;\n\n /**\n * Input validation schema\n */\n schema?: ZodType<TInput>;\n\n /**\n * Execution timeout in milliseconds\n */\n timeoutMs?: number;\n\n /**\n * Additional metadata\n */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Function that can be converted to a tool\n */\nexport type ToolFunction<TInput, TOutput> = (\n input: TInput,\n context: ToolExecutionContext,\n) => TOutput | Promise<TOutput>;\n\ninterface CallTargetRef {\n current?: unknown;\n}\n\ntype ToolMethodDecorator<TInput, TOutput> = {\n <TMethod extends ToolFunction<TInput, TOutput>>(\n value: TMethod,\n context: ClassMethodDecoratorContext<unknown, TMethod>,\n ): TMethod | void;\n (\n target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor | undefined,\n ): PropertyDescriptor | void;\n};\n\nfunction isStage3DecoratorContext(\n value: unknown,\n): value is ClassMethodDecoratorContext<\n unknown,\n (...args: unknown[]) => unknown\n> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"kind\" in (value as Record<string, unknown>)\n );\n}\n\nfunction createExecuteWrapper<TInput, TOutput>(\n toolName: string,\n method: ToolFunction<TInput, TOutput>,\n options: ToolOptions<TInput>,\n callTargetRef: CallTargetRef,\n): (\n input: TInput,\n context: ToolExecutionContext,\n) => Promise<ToolResult<TOutput>> {\n return async (\n input: TInput,\n context: ToolExecutionContext,\n ): Promise<ToolResult<TOutput>> => {\n const startedAt = Date.now();\n\n try {\n if (options.schema) {\n options.schema.parse(input);\n }\n\n const invocationTarget = callTargetRef.current;\n const result = await Promise.resolve(\n method.call(invocationTarget, input, context),\n );\n\n return ToolResultFactory.success(toolName, result, {\n startedAt,\n finishedAt: Date.now(),\n ...(options.metadata && { metadata: options.metadata }),\n });\n } catch (error) {\n return ToolResultFactory.failure(\n toolName,\n error instanceof Error ? error : new Error(String(error)),\n {\n startedAt,\n finishedAt: Date.now(),\n ...(options.metadata && { metadata: options.metadata }),\n },\n );\n }\n };\n}\n\nfunction normalizePropertyKey(propertyKey: string | symbol): string {\n return typeof propertyKey === \"symbol\"\n ? (propertyKey.description ?? propertyKey.toString())\n : propertyKey;\n}\n\nfunction createToolDefinition<TInput, TOutput>(\n options: ToolOptions<TInput>,\n methodName: string,\n propertyKey: string | symbol,\n method: ToolFunction<TInput, TOutput>,\n callTargetRef: CallTargetRef,\n): ToolDefinition<TInput, TOutput> {\n const name = options.name ?? methodName;\n const description =\n options.description ??\n extractJSDocDescription(method) ??\n `Tool: ${normalizePropertyKey(propertyKey)}`;\n\n return {\n name,\n description,\n ...(options.schema && { schema: options.schema }),\n ...(options.timeoutMs !== undefined && { timeoutMs: options.timeoutMs }),\n metadata: {\n ...options.metadata,\n isDecorated: true,\n propertyKey: normalizePropertyKey(propertyKey),\n },\n execute: createExecuteWrapper(name, method, options, callTargetRef),\n };\n}\n\n/**\n * Convert a function into a Tool.\n * Handles both sync and async functions, wraps execution in ToolResult.\n *\n * @param fn - Function to wrap\n * @param options - Tool configuration\n * @returns Tool definition\n *\n * @example\n * const addTool = createFunctionTool(\n * (input: { a: number; b: number }) => input.a + input.b,\n * {\n * name: \"add\",\n * description: \"Add two numbers\",\n * schema: z.object({ a: z.number(), b: z.number() })\n * }\n * );\n */\nexport function createFunctionTool<TInput, TOutput>(\n fn: ToolFunction<TInput, TOutput>,\n options: ToolOptions<TInput> = {},\n): Tool<TInput, TOutput> {\n const name = options.name ?? (fn.name || \"anonymous_tool\");\n\n // Extract description from function if not provided\n const description =\n options.description ?? extractJSDocDescription(fn) ?? `Tool: ${name}`;\n\n const tool: Tool<TInput, TOutput> = {\n name,\n description,\n ...(options.schema && { schema: options.schema }),\n ...(options.timeoutMs !== undefined && { timeoutMs: options.timeoutMs }),\n metadata: {\n ...options.metadata,\n isFunction: true,\n functionName: fn.name,\n },\n execute: async (\n input: TInput,\n context: ToolExecutionContext,\n ): Promise<ToolResult<TOutput>> => {\n const startedAt = Date.now();\n\n try {\n // Validate input if schema provided\n if (options.schema) {\n options.schema.parse(input);\n }\n\n // Handle timeout if specified\n let result: TOutput;\n if (options.timeoutMs !== undefined) {\n result = await executeWithTimeout(\n fn(input, context),\n options.timeoutMs,\n name,\n );\n } else {\n result = await Promise.resolve(fn(input, context));\n }\n\n return ToolResultFactory.success(name, result, {\n startedAt,\n finishedAt: Date.now(),\n ...(options.metadata && { metadata: options.metadata }),\n });\n } catch (error) {\n return ToolResultFactory.failure(\n name,\n error instanceof Error ? error : new Error(String(error)),\n {\n startedAt,\n finishedAt: Date.now(),\n ...(options.metadata && { metadata: options.metadata }),\n },\n );\n }\n },\n };\n\n return tool;\n}\n\n/**\n * Decorator factory for creating tools from methods.\n * Can be used with or without arguments.\n *\n * @param options - Tool configuration\n * @returns Method decorator\n *\n * @example\n * class MyTools {\n * @tool({ description: \"Add numbers\", schema: AddSchema })\n * add(input: { a: number; b: number }): number {\n * return input.a + input.b;\n * }\n * }\n */\nexport function tool<TInput = unknown, TOutput = unknown>(\n options?: ToolOptions<TInput>,\n): ToolMethodDecorator<TInput, TOutput> {\n const decoratorOptions: ToolOptions<TInput> = options ?? {};\n\n function decorator<TMethod extends ToolFunction<TInput, TOutput>>(\n value: TMethod,\n context: ClassMethodDecoratorContext<unknown, TMethod>,\n ): void;\n function decorator(\n target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor | undefined,\n ): PropertyDescriptor | void;\n function decorator(\n ...decoratorArgs:\n | [\n ToolFunction<TInput, TOutput>,\n ClassMethodDecoratorContext<unknown, ToolFunction<TInput, TOutput>>,\n ]\n | [object, string | symbol, PropertyDescriptor | undefined]\n ): PropertyDescriptor | void {\n if (\n decoratorArgs.length === 2 &&\n isStage3DecoratorContext(decoratorArgs[1])\n ) {\n const [method, context] = decoratorArgs;\n\n if (context.kind !== \"method\") {\n throw new Error(\"@tool can only be applied to methods.\");\n }\n\n if (context.name === undefined) {\n throw new Error(\"@tool requires a named method to attach metadata.\");\n }\n\n const propertyKey = context.name;\n const inferredName =\n typeof propertyKey === \"string\" && propertyKey.length > 0\n ? propertyKey\n : method.name || \"anonymous_tool\";\n\n const callTargetRef: CallTargetRef = {};\n const toolMetadata = createToolDefinition(\n decoratorOptions,\n inferredName,\n propertyKey,\n method,\n callTargetRef,\n );\n\n const registerMetadata = (target: object) => {\n callTargetRef.current = target;\n setToolMetadata(target, propertyKey, toolMetadata);\n };\n\n if (typeof context.addInitializer === \"function\") {\n context.addInitializer(function (this: unknown) {\n const target = context.static\n ? (this as object)\n : Object.getPrototypeOf(this);\n if (target) {\n registerMetadata(target);\n }\n });\n }\n\n return;\n }\n\n const [target, propertyKey, descriptor] = decoratorArgs as [\n object,\n string | symbol,\n PropertyDescriptor | undefined,\n ];\n\n const resolvedDescriptor =\n descriptor ??\n Object.getOwnPropertyDescriptor(target, propertyKey) ??\n (() => {\n const value = (target as Record<string | symbol, unknown>)[propertyKey];\n if (typeof value === \"function\") {\n return { value } as PropertyDescriptor;\n }\n return undefined;\n })();\n\n if (!resolvedDescriptor || typeof resolvedDescriptor.value !== \"function\") {\n throw new Error(\n `@tool can only be applied to methods, not ${typeof resolvedDescriptor?.value}`,\n );\n }\n\n const originalMethod = resolvedDescriptor.value as ToolFunction<\n TInput,\n TOutput\n >;\n const callTargetRef: CallTargetRef = { current: target };\n const toolMetadata = createToolDefinition(\n decoratorOptions,\n normalizePropertyKey(propertyKey),\n propertyKey,\n originalMethod,\n callTargetRef,\n );\n\n setToolMetadata(target, propertyKey, toolMetadata);\n\n return resolvedDescriptor;\n }\n\n return decorator;\n}\n\n/**\n * Extract all tools defined via @tool decorator from a class instance\n *\n * @param instance - Class instance with @tool decorated methods\n * @returns Array of Tool definitions\n *\n * @example\n * class MyTools {\n * @tool() greet(input: { name: string }) { return `Hello ${input.name}`; }\n * }\n *\n * const tools = extractTools(new MyTools());\n */\nexport function extractTools(instance: object): Array<Tool<unknown, unknown>> {\n const tools: Array<Tool<unknown, unknown>> = [];\n const prototype = Object.getPrototypeOf(instance) as object;\n\n // Get all property names from the prototype\n const propertyKeys: Array<string | symbol> = [\n ...Object.getOwnPropertyNames(prototype),\n ...Object.getOwnPropertySymbols(prototype),\n ];\n\n for (const propertyKey of propertyKeys) {\n if (propertyKey === \"constructor\") continue;\n\n // Check if this property has tool metadata\n const toolMetadata = getToolMetadata(prototype, propertyKey) as\n | ToolDefinition<unknown, unknown>\n | undefined;\n\n if (toolMetadata) {\n // Get the actual method from the instance and create a properly bound tool\n const instanceMethod = (instance as Record<string | symbol, unknown>)[\n propertyKey\n ];\n\n if (typeof instanceMethod !== \"function\") {\n continue;\n }\n\n const tool: Tool<unknown, unknown> = {\n ...toolMetadata,\n execute: async (input: unknown, context: ToolExecutionContext) => {\n // Re-execute the tool logic but with the instance method properly bound\n const startedAt = Date.now();\n\n try {\n // Validate if schema exists\n if (toolMetadata.schema) {\n toolMetadata.schema.parse(input);\n }\n\n const result = await Promise.resolve(\n instanceMethod.call(instance, input, context),\n );\n\n return ToolResultFactory.success(toolMetadata.name, result, {\n startedAt,\n finishedAt: Date.now(),\n ...(toolMetadata.metadata && { metadata: toolMetadata.metadata }),\n });\n } catch (error) {\n return ToolResultFactory.failure(\n toolMetadata.name,\n error instanceof Error ? error : new Error(String(error)),\n {\n startedAt,\n finishedAt: Date.now(),\n ...(toolMetadata.metadata && {\n metadata: toolMetadata.metadata,\n }),\n },\n );\n }\n },\n };\n\n tools.push(tool);\n }\n }\n\n return tools;\n}\n\n/**\n * Execute a promise with a timeout\n *\n * @param promise - Promise to execute\n * @param timeoutMs - Timeout in milliseconds\n * @param toolName - Tool name for error messages\n * @returns Result or throws timeout error\n */\nasync function executeWithTimeout<T>(\n promise: T | Promise<T>,\n timeoutMs: number,\n toolName: string,\n): Promise<T> {\n return Promise.race([\n Promise.resolve(promise),\n new Promise<T>((_, reject) => {\n setTimeout(() => {\n reject(new Error(`Tool \"${toolName}\" timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n }),\n ]);\n}\n\n/**\n * Attempt to extract description from JSDoc comment.\n * Note: This is a best-effort attempt and may not work in all cases.\n *\n * @param fn - Function to extract description from\n * @returns Description or undefined\n */\nfunction extractJSDocDescription(fn: {\n toString(): string;\n}): string | undefined {\n const source = fn.toString();\n const match = /\\/\\*\\*\\s*\\n\\s*\\*\\s*(.+?)\\s*\\n/.exec(source);\n return match?.[1];\n}\n","import type { AgentContext } from \"../base/context\";\nimport type { Tool, ToolExecutionContext, ToolResult } from \"../base/tool\";\nimport { ToolResultFactory } from \"../base/tool\";\n\n/**\n * Options for tool execution\n */\nexport interface ToolRunOptions {\n /**\n * Abort signal for cancellation\n */\n signal?: AbortSignal;\n\n /**\n * Additional metadata to pass to the tool\n */\n metadata?: Record<string, unknown>;\n\n /**\n * Override timeout for this execution\n */\n timeoutMs?: number;\n}\n\n/**\n * Utility class for executing tools with validation and error handling\n */\nexport class ToolRunner {\n /**\n * Execute a tool with the given input and context\n *\n * @param tool - Tool to execute\n * @param input - Input data\n * @param context - Agent execution context\n * @param options - Execution options\n * @returns Tool execution result\n */\n public static async execute<TInput, TOutput>(\n tool: Tool<TInput, TOutput>,\n input: TInput,\n context: AgentContext,\n options: ToolRunOptions = {},\n ): Promise<ToolResult<TOutput>> {\n // Check for cancellation\n if (options.signal?.aborted) {\n return ToolResultFactory.failure(\n tool.name,\n new Error(`Tool \"${tool.name}\" execution was aborted`),\n );\n }\n\n // Validate input against schema if provided\n if (tool.schema) {\n const validation = tool.schema.safeParse(input);\n if (!validation.success) {\n return ToolResultFactory.failure(\n tool.name,\n new Error(\n `Invalid input for tool \"${tool.name}\": ${validation.error.message}`,\n ),\n );\n }\n }\n\n const executionContext: ToolExecutionContext = {\n agentContext: context,\n ...(options.signal && { signal: options.signal }),\n metadata: options.metadata ?? {},\n };\n\n try {\n // Determine timeout: option override > tool default > no timeout\n const timeoutMs = options.timeoutMs ?? tool.timeoutMs;\n\n let result: ToolResult<TOutput>;\n\n if (timeoutMs !== undefined) {\n // Execute with timeout\n result = await this.executeWithTimeout(\n Promise.resolve(tool.execute(input, executionContext)),\n timeoutMs,\n tool.name,\n );\n } else {\n // Execute without timeout\n result = await Promise.resolve(tool.execute(input, executionContext));\n }\n\n return result;\n } catch (error) {\n return ToolResultFactory.failure(\n tool.name,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n /**\n * Execute multiple tools in parallel\n *\n * @param executions - Array of tool execution tuples [tool, input, context, options?]\n * @returns Array of results in same order as input\n */\n public static async executeParallel<TInput, TOutput>(\n executions: Array<\n [Tool<TInput, TOutput>, TInput, AgentContext, ToolRunOptions?]\n >,\n ): Promise<Array<ToolResult<TOutput>>> {\n return Promise.all(\n executions.map(([tool, input, context, options]) =>\n this.execute(tool, input, context, options),\n ),\n );\n }\n\n /**\n * Execute multiple tools sequentially, stopping on first failure\n *\n * @param executions - Array of tool execution tuples\n * @returns Array of results up to first failure (inclusive)\n */\n public static async executeSequential<TInput, TOutput>(\n executions: Array<\n [Tool<TInput, TOutput>, TInput, AgentContext, ToolRunOptions?]\n >,\n ): Promise<Array<ToolResult<TOutput>>> {\n const results: Array<ToolResult<TOutput>> = [];\n\n for (const [tool, input, context, options] of executions) {\n const result = await this.execute(tool, input, context, options);\n results.push(result);\n\n if (!result.success) {\n break; // Stop on first failure\n }\n }\n\n return results;\n }\n\n /**\n * Execute a tool with timeout\n *\n * @param promise - Tool execution promise\n * @param timeoutMs - Timeout in milliseconds\n * @param toolName - Tool name for error messages\n * @returns Result or rejects with timeout error\n */\n private static async executeWithTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n toolName: string,\n ): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((_, reject) => {\n setTimeout(() => {\n reject(\n new Error(`Tool \"${toolName}\" timed out after ${timeoutMs}ms`),\n );\n }, timeoutMs);\n }),\n ]);\n }\n\n /**\n * Validate tool input without executing\n *\n * @param tool - Tool to validate input for\n * @param input - Input to validate\n * @returns true if valid, Error if invalid\n */\n public static validate<TInput>(\n tool: Tool<TInput, unknown>,\n input: TInput,\n ): true | Error {\n if (!tool.schema) {\n return true; // No schema means no validation needed\n }\n\n const validation = tool.schema.safeParse(input);\n if (!validation.success) {\n return new Error(\n `Invalid input for tool \"${tool.name}\": ${validation.error.message}`,\n );\n }\n\n return true;\n }\n\n /**\n * Check if a result indicates success\n *\n * @param result - Tool result to check\n * @returns true if success, false if failure\n */\n public static isSuccess<TOutput>(result: ToolResult<TOutput>): result is {\n success: true;\n toolName: string;\n output: TOutput;\n metadata: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n } {\n return result.success === true;\n }\n\n /**\n * Check if a result indicates failure\n *\n * @param result - Tool result to check\n * @returns true if failure, false if success\n */\n public static isFailure<TOutput>(result: ToolResult<TOutput>): result is {\n success: false;\n toolName: string;\n error: Error | string;\n metadata: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n } {\n return result.success === false;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/base/result.ts","../src/base/tool.ts","../src/base/context.ts","../src/utils/logger.ts","../src/base/hooks.ts","../src/base/agent.ts","../src/base/visualization.ts","../src/memory/memory.ts","../src/index.ts","../src/core/schemas.ts","../package.json","../src/utils/version.ts","../src/opper/client.ts","../src/utils/schema-utils.ts","../src/core/agent.ts","../src/mcp/client.ts","../src/mcp/config.ts","../src/mcp/provider.ts","../src/utils/tool-decorators.ts","../src/utils/tool-runner.ts"],"names":["Result","ok","err","ToolMetadataSchema","ToolCallRecordSchema","ToolResultSuccessSchema","ToolResultFailureSchema","ToolResultSchema","ToolResultFactory","createToolCallRecord","validateToolInput","coerceToolDefinition","isToolProvider","normalizeToolEntries","z","randomUUID","AgentContext","ExecutionCycleSchema","UsageSchema","LogLevel","tool","fs","Opper","zodToJsonSchema","Client","StdioClientTransport","options","headers","StreamableHTTPClientTransport","SSEClientTransport","propertyKey","callTargetRef","toolMetadata","target"],"mappings":"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","file":"index.cjs","sourcesContent":["export type Result<T, E = Error> = Success<T> | Failure<E>;\n\nexport interface Success<T> {\n readonly ok: true;\n readonly value: T;\n}\n\nexport interface Failure<E> {\n readonly ok: false;\n readonly error: E;\n}\n\nexport const Result = {\n ok<T>(value: T): Success<T> {\n return { ok: true, value };\n },\n\n err<E>(error: E): Failure<E> {\n return { ok: false, error };\n },\n\n isOk<T, E>(result: Result<T, E>): result is Success<T> {\n return result.ok;\n },\n\n isErr<T, E>(result: Result<T, E>): result is Failure<E> {\n return !result.ok;\n },\n\n map<T, E, U>(result: Result<T, E>, mapper: (value: T) => U): Result<U, E> {\n if (result.ok) {\n return Result.ok(mapper(result.value));\n }\n\n return result;\n },\n\n mapError<T, E, F>(\n result: Result<T, E>,\n mapper: (error: E) => F,\n ): Result<T, F> {\n if (!result.ok) {\n return Result.err(mapper(result.error));\n }\n\n return result;\n },\n\n unwrapOr<T, E>(result: Result<T, E>, fallback: T): T {\n return result.ok ? result.value : fallback;\n },\n};\n\nexport const ok = Result.ok;\nexport const err = Result.err;\n","import { randomUUID } from \"node:crypto\";\nimport type { ZodType, ZodTypeAny } from \"zod\";\nimport { z } from \"zod\";\n\nimport type { BaseAgent } from \"./agent\";\nimport type { AgentContext } from \"./context\";\nimport { err, ok, type Result } from \"./result\";\n\nexport const ToolMetadataSchema = z.record(z.string(), z.unknown());\n\nexport const ToolCallRecordSchema = z.object({\n id: z\n .string()\n .optional()\n .default(() => randomUUID()),\n toolName: z.string(),\n input: z.unknown(),\n output: z.unknown().optional(),\n success: z.boolean().optional(),\n error: z\n .union([z.string(), z.object({ message: z.string() }).passthrough()])\n .optional(),\n startedAt: z.number().default(() => Date.now()),\n finishedAt: z.number().optional(),\n metadata: ToolMetadataSchema.default({}),\n});\n\nexport type ToolCallRecord = z.infer<typeof ToolCallRecordSchema>;\n\nconst toolResultBaseSchema = z.object({\n toolName: z.string(),\n metadata: ToolMetadataSchema.default({}),\n startedAt: z.number().optional(),\n finishedAt: z.number().optional(),\n});\n\nexport const ToolResultSuccessSchema = toolResultBaseSchema\n .extend({\n success: z.literal(true),\n output: z.any(),\n })\n .refine((data) => data.output !== undefined, {\n message: \"output is required\",\n });\n\nexport const ToolResultFailureSchema = toolResultBaseSchema.extend({\n success: z.literal(false),\n error: z.union([z.string(), z.instanceof(Error)]),\n});\n\nexport const ToolResultSchema = z.union([\n ToolResultSuccessSchema,\n ToolResultFailureSchema,\n]);\n\nexport type ToolResultData = z.infer<typeof ToolResultSchema>;\n\nexport interface ToolExecutionContext {\n agentContext: AgentContext;\n signal?: AbortSignal;\n metadata?: Record<string, unknown>;\n /**\n * Span ID for this tool execution (used as parent for nested operations)\n */\n spanId?: string;\n}\n\nexport interface ToolSuccess<TOutput> {\n success: true;\n toolName: string;\n output: TOutput;\n metadata: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n}\n\nexport interface ToolFailure {\n success: false;\n toolName: string;\n error: Error | string;\n metadata: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n}\n\nexport type ToolResult<TOutput = unknown> = ToolSuccess<TOutput> | ToolFailure;\n\nexport interface ToolDefinition<TInput, TOutput> {\n name: string;\n description?: string;\n schema?: ZodType<TInput>;\n execute: (\n input: TInput,\n context: ToolExecutionContext,\n ) => MaybePromise<ToolResult<TOutput>>;\n metadata?: Record<string, unknown>;\n timeoutMs?: number;\n}\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport type Tool<TInput, TOutput> = ToolDefinition<TInput, TOutput>;\n\nexport interface ToolProvider {\n setup(\n agent: BaseAgent<unknown, unknown>,\n ): Promise<Array<Tool<unknown, unknown>>>;\n teardown(): Promise<void>;\n}\n\nexport interface ToolResultInit {\n metadata?: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n}\n\nexport const ToolResultFactory = {\n success<TOutput>(\n toolName: string,\n output: TOutput,\n init: ToolResultInit = {},\n ): ToolSuccess<TOutput> {\n const result: ToolSuccess<TOutput> = {\n success: true,\n toolName,\n output,\n ...(init.startedAt !== undefined && { startedAt: init.startedAt }),\n finishedAt: init.finishedAt ?? Date.now(),\n metadata: init.metadata ?? {},\n };\n\n // Validate with schema\n ToolResultSuccessSchema.parse(result);\n\n return result;\n },\n\n failure(\n toolName: string,\n error: Error | string,\n init: ToolResultInit = {},\n ): ToolFailure {\n const result: ToolFailure = {\n success: false,\n toolName,\n error,\n ...(init.startedAt !== undefined && { startedAt: init.startedAt }),\n finishedAt: init.finishedAt ?? Date.now(),\n metadata: init.metadata ?? {},\n };\n\n // Validate with schema\n ToolResultFailureSchema.parse(result);\n\n return result;\n },\n\n isSuccess<TOutput>(\n result: ToolResult<TOutput>,\n ): result is ToolSuccess<TOutput> {\n return result.success;\n },\n\n isFailure<TOutput>(result: ToolResult<TOutput>): result is ToolFailure {\n return !result.success;\n },\n};\n\nexport const createToolCallRecord = (\n input: Partial<ToolCallRecord>,\n): ToolCallRecord => ToolCallRecordSchema.parse(input);\n\nexport const validateToolInput = <TSchema extends ZodTypeAny>(\n schema: TSchema,\n payload: unknown,\n): Result<z.infer<TSchema>, z.ZodError<z.infer<TSchema>>> => {\n const parsed = schema.safeParse(payload);\n if (!parsed.success) {\n return err(parsed.error);\n }\n\n return ok(parsed.data);\n};\n\nexport const coerceToolDefinition = <TInput, TOutput>(\n definition: ToolDefinition<TInput, TOutput>,\n): Tool<TInput, TOutput> => {\n if (!definition.name || definition.name.trim().length === 0) {\n throw new Error(\"Tool definition requires a non-empty name\");\n }\n\n if (!definition.metadata) {\n definition.metadata = {};\n }\n\n return definition;\n};\n\nexport const isToolProvider = (value: unknown): value is ToolProvider => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const candidate = value as Partial<ToolProvider>;\n return (\n typeof candidate.setup === \"function\" &&\n typeof candidate.teardown === \"function\"\n );\n};\n\nexport const normalizeToolEntries = (\n entries: Array<Tool<unknown, unknown> | ToolProvider>,\n): {\n tools: Array<Tool<unknown, unknown>>;\n providers: Array<ToolProvider>;\n} => {\n const tools: Array<Tool<unknown, unknown>> = [];\n const providers: Array<ToolProvider> = [];\n\n for (const entry of entries) {\n if (isToolProvider(entry)) {\n providers.push(entry);\n } else {\n tools.push(entry);\n }\n }\n\n return { tools, providers };\n};\n","import { randomUUID } from \"node:crypto\";\nimport { z } from \"zod\";\n\nimport { ToolCallRecordSchema, type ToolCallRecord } from \"./tool\";\n\nexport const UsageSchema = z.object({\n requests: z.number().int().nonnegative().default(0),\n inputTokens: z.number().int().nonnegative().default(0),\n outputTokens: z.number().int().nonnegative().default(0),\n totalTokens: z.number().int().nonnegative().default(0),\n cost: z\n .object({\n generation: z.number().nonnegative().default(0),\n platform: z.number().nonnegative().default(0),\n total: z.number().nonnegative().default(0),\n })\n .default({ generation: 0, platform: 0, total: 0 }),\n});\n\nexport type Usage = z.infer<typeof UsageSchema>;\n\nexport const ExecutionCycleSchema = z.object({\n iteration: z.number().int().nonnegative(),\n thought: z.unknown().nullable().optional(),\n toolCalls: z.array(ToolCallRecordSchema).default([]),\n results: z.array(z.unknown()).default([]),\n timestamp: z.number().default(() => Date.now()),\n});\n\nexport type ExecutionCycle = z.infer<typeof ExecutionCycleSchema>;\n\nexport interface AgentContextOptions {\n agentName: string;\n sessionId?: string;\n parentSpanId?: string | null;\n goal?: unknown;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AgentContextSnapshot {\n agentName: string;\n sessionId: string;\n parentSpanId: string | null;\n iteration: number;\n goal?: unknown;\n executionHistory: ExecutionCycle[];\n usage: Usage;\n toolCalls: ToolCallRecord[];\n metadata: Record<string, unknown>;\n startedAt: number;\n updatedAt: number;\n}\n\nexport interface IterationSummary {\n iteration: number;\n thought: Record<string, unknown>;\n toolCalls: Array<{ toolName: string; success?: boolean }>;\n results: unknown[];\n}\n\nexport class AgentContext {\n public readonly agentName: string;\n\n public readonly sessionId: string;\n\n public parentSpanId: string | null;\n\n public iteration = 0;\n\n public goal?: unknown;\n\n public readonly executionHistory: ExecutionCycle[] = [];\n\n public readonly toolCalls: ToolCallRecord[] = [];\n\n public usage: Usage;\n\n public metadata: Record<string, unknown>;\n\n public readonly startedAt: number;\n\n public updatedAt: number;\n\n constructor(options: AgentContextOptions) {\n const now = Date.now();\n this.agentName = options.agentName;\n this.sessionId = options.sessionId ?? randomUUID();\n this.parentSpanId = options.parentSpanId ?? null;\n this.goal = options.goal;\n this.metadata = { ...(options.metadata ?? {}) };\n this.startedAt = now;\n this.updatedAt = now;\n this.usage = UsageSchema.parse({});\n }\n\n public updateUsage(delta: Usage): void {\n const next = UsageSchema.parse(delta);\n this.usage = {\n requests: this.usage.requests + next.requests,\n inputTokens: this.usage.inputTokens + next.inputTokens,\n outputTokens: this.usage.outputTokens + next.outputTokens,\n totalTokens: this.usage.totalTokens + next.totalTokens,\n cost: {\n generation: this.usage.cost.generation + next.cost.generation,\n platform: this.usage.cost.platform + next.cost.platform,\n total: this.usage.cost.total + next.cost.total,\n },\n };\n this.touch();\n }\n\n public addCycle(cycle: ExecutionCycle): ExecutionCycle {\n const parsed = ExecutionCycleSchema.parse(cycle);\n this.executionHistory.push(parsed);\n this.touch();\n return parsed;\n }\n\n public recordToolCall(call: Omit<ToolCallRecord, \"id\">): ToolCallRecord {\n const parsed = ToolCallRecordSchema.parse(call);\n this.toolCalls.push(parsed);\n this.touch();\n return parsed;\n }\n\n public getContextSize(): number {\n return this.usage.totalTokens;\n }\n\n public getLastNCycles(count = 3): ExecutionCycle[] {\n if (count <= 0) {\n return [];\n }\n return this.executionHistory.slice(-count);\n }\n\n public getLastIterationsSummary(count = 2): IterationSummary[] {\n return this.getLastNCycles(count).map((cycle) => {\n const thought: Record<string, unknown> =\n typeof cycle.thought === \"object\" && cycle.thought !== null\n ? { ...(cycle.thought as Record<string, unknown>) }\n : { text: cycle.thought };\n\n return {\n iteration: cycle.iteration,\n thought,\n toolCalls: cycle.toolCalls.map((call) => ({\n toolName: call.toolName,\n ...(call.success !== undefined && { success: call.success }),\n })),\n results: [...cycle.results],\n } satisfies IterationSummary;\n });\n }\n\n public setMetadata(key: string, value: unknown): void {\n this.metadata[key] = value;\n this.touch();\n }\n\n public clearHistory(): void {\n this.executionHistory.length = 0;\n this.toolCalls.length = 0;\n this.touch();\n }\n\n public snapshot(): AgentContextSnapshot {\n return {\n agentName: this.agentName,\n sessionId: this.sessionId,\n parentSpanId: this.parentSpanId,\n iteration: this.iteration,\n goal: this.goal,\n executionHistory: [...this.executionHistory],\n usage: { ...this.usage },\n toolCalls: [...this.toolCalls],\n metadata: { ...this.metadata },\n startedAt: this.startedAt,\n updatedAt: this.updatedAt,\n };\n }\n\n private touch(): void {\n this.updatedAt = Date.now();\n }\n}\n","/**\n * Log levels\n */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n SILENT = 4,\n}\n\n/**\n * Logger interface for agent output\n */\nexport interface AgentLogger {\n /**\n * Log a debug message\n */\n debug(message: string, meta?: Record<string, unknown>): void;\n\n /**\n * Log an info message\n */\n info(message: string, meta?: Record<string, unknown>): void;\n\n /**\n * Log a warning message\n */\n warn(message: string, meta?: Record<string, unknown>): void;\n\n /**\n * Log an error message\n */\n error(\n message: string,\n error?: Error | unknown,\n meta?: Record<string, unknown>,\n ): void;\n\n /**\n * Get current log level\n */\n getLevel(): LogLevel;\n\n /**\n * Set log level\n */\n setLevel(level: LogLevel): void;\n}\n\n/**\n * Console-based logger implementation\n */\nconst formatMeta = (meta?: Record<string, unknown>): string => {\n if (!meta) {\n return \"\";\n }\n\n try {\n return ` ${JSON.stringify(meta)}`;\n } catch {\n return \" [unserializable meta]\";\n }\n};\n\nconst writeToStdout = (\n level: string,\n message: string,\n meta?: Record<string, unknown>,\n): void => {\n const suffix = formatMeta(meta);\n process.stdout.write(`[${level}] ${message}${suffix}\\n`);\n};\n\nexport class ConsoleLogger implements AgentLogger {\n private level: LogLevel;\n\n constructor(level: LogLevel = LogLevel.INFO) {\n this.level = level;\n }\n\n public debug(message: string, meta?: Record<string, unknown>): void {\n if (this.level <= LogLevel.DEBUG) {\n writeToStdout(\"DEBUG\", message, meta);\n }\n }\n\n public info(message: string, meta?: Record<string, unknown>): void {\n if (this.level <= LogLevel.INFO) {\n writeToStdout(\"INFO\", message, meta);\n }\n }\n\n public warn(message: string, meta?: Record<string, unknown>): void {\n if (this.level <= LogLevel.WARN) {\n console.warn(`[WARN] ${message}`, meta ? meta : \"\");\n }\n }\n\n public error(\n message: string,\n error?: Error | unknown,\n meta?: Record<string, unknown>,\n ): void {\n if (this.level <= LogLevel.ERROR) {\n if (error) {\n console.error(`[ERROR] ${message}`, error, meta ? meta : \"\");\n } else {\n console.error(`[ERROR] ${message}`, meta ? meta : \"\");\n }\n }\n }\n\n public getLevel(): LogLevel {\n return this.level;\n }\n\n public setLevel(level: LogLevel): void {\n this.level = level;\n }\n}\n\n/**\n * No-op logger that suppresses all output\n */\nexport class SilentLogger implements AgentLogger {\n public debug(message: string, meta?: Record<string, unknown>): void {\n void message;\n void meta;\n }\n\n public info(message: string, meta?: Record<string, unknown>): void {\n void message;\n void meta;\n }\n\n public warn(message: string, meta?: Record<string, unknown>): void {\n void message;\n void meta;\n }\n\n public error(\n message: string,\n error?: Error | unknown,\n meta?: Record<string, unknown>,\n ): void {\n void message;\n void error;\n void meta;\n }\n\n public getLevel(): LogLevel {\n return LogLevel.SILENT;\n }\n\n public setLevel(level: LogLevel): void {\n void level;\n }\n}\n\n/**\n * Default logger instance\n */\nlet defaultLogger: AgentLogger = new ConsoleLogger(LogLevel.WARN);\n\n/**\n * Get the default logger\n */\nexport function getDefaultLogger(): AgentLogger {\n return defaultLogger;\n}\n\n/**\n * Set the default logger\n */\nexport function setDefaultLogger(logger: AgentLogger): void {\n defaultLogger = logger;\n}\n","import type { AgentContext } from \"./context\";\nimport type { Tool, ToolCallRecord, ToolResult } from \"./tool\";\nimport type { AgentLogger } from \"../utils/logger\";\nimport { getDefaultLogger } from \"../utils/logger\";\n\nexport const HookEvents = {\n AgentStart: \"agent:start\",\n AgentEnd: \"agent:end\",\n LoopStart: \"loop:start\",\n LoopEnd: \"loop:end\",\n LlmCall: \"llm:call\",\n LlmResponse: \"llm:response\",\n ThinkEnd: \"think:end\",\n BeforeTool: \"tool:before\",\n AfterTool: \"tool:after\",\n ToolError: \"tool:error\",\n MemoryRead: \"memory:read\",\n MemoryWrite: \"memory:write\",\n MemoryError: \"memory:error\",\n} as const;\n\nexport type HookEventName = (typeof HookEvents)[keyof typeof HookEvents];\n\nexport interface HookPayloadMap {\n [HookEvents.AgentStart]: {\n context: AgentContext;\n };\n [HookEvents.AgentEnd]: {\n context: AgentContext;\n result?: unknown;\n error?: unknown;\n };\n [HookEvents.LoopStart]: {\n context: AgentContext;\n };\n [HookEvents.LoopEnd]: {\n context: AgentContext;\n };\n [HookEvents.LlmCall]: {\n context: AgentContext;\n callType: string;\n };\n [HookEvents.LlmResponse]: {\n context: AgentContext;\n callType: string;\n response: unknown;\n };\n [HookEvents.ThinkEnd]: {\n context: AgentContext;\n thought: unknown;\n };\n [HookEvents.BeforeTool]: {\n context: AgentContext;\n tool: Tool<unknown, unknown>;\n input: unknown;\n };\n [HookEvents.AfterTool]: {\n context: AgentContext;\n tool: Tool<unknown, unknown>;\n result: ToolResult<unknown>;\n record: ToolCallRecord;\n };\n [HookEvents.ToolError]: {\n context: AgentContext;\n toolName: string;\n tool?: Tool<unknown, unknown>;\n error: unknown;\n };\n [HookEvents.MemoryRead]: {\n context: AgentContext;\n key: string;\n value: unknown;\n };\n [HookEvents.MemoryWrite]: {\n context: AgentContext;\n key: string;\n value: unknown;\n };\n [HookEvents.MemoryError]: {\n context: AgentContext;\n operation: \"read\" | \"write\" | \"delete\" | \"clear\";\n error: unknown;\n };\n}\n\nexport type HookPayload<E extends HookEventName> = HookPayloadMap[E];\n\nexport type HookHandler<E extends HookEventName> = (\n payload: HookPayload<E>,\n) => void | Promise<void>;\n\nexport interface HookRegistration<E extends HookEventName> {\n event: E;\n handler: HookHandler<E>;\n}\n\nexport type UnregisterHook = () => void;\n\nexport class HookManager {\n private readonly registry = new Map<\n HookEventName,\n Set<HookHandler<HookEventName>>\n >();\n private readonly logger: AgentLogger;\n\n constructor(logger?: AgentLogger) {\n this.logger = logger ?? getDefaultLogger();\n }\n\n public on<E extends HookEventName>(\n event: E,\n handler: HookHandler<E>,\n ): UnregisterHook {\n const existing =\n this.registry.get(event) ?? new Set<HookHandler<HookEventName>>();\n existing.add(handler as HookHandler<HookEventName>);\n this.registry.set(event, existing);\n return () => existing.delete(handler as HookHandler<HookEventName>);\n }\n\n public once<E extends HookEventName>(\n event: E,\n handler: HookHandler<E>,\n ): UnregisterHook {\n const disposable: HookHandler<E> = async (payload) => {\n await handler(payload);\n this.off(event, disposable);\n };\n return this.on(event, disposable);\n }\n\n public off<E extends HookEventName>(event: E, handler: HookHandler<E>): void {\n const listeners = this.registry.get(event);\n if (!listeners) {\n return;\n }\n listeners.delete(handler as HookHandler<HookEventName>);\n if (listeners.size === 0) {\n this.registry.delete(event);\n }\n }\n\n public clear(): void {\n this.registry.clear();\n }\n\n public listenerCount(event?: HookEventName): number {\n if (event) {\n return this.registry.get(event)?.size ?? 0;\n }\n\n let total = 0;\n for (const listeners of this.registry.values()) {\n total += listeners.size;\n }\n return total;\n }\n\n public async emit<E extends HookEventName>(\n event: E,\n payload: HookPayload<E>,\n ): Promise<void> {\n const listeners = Array.from(\n (this.registry.get(event) as Set<HookHandler<E>> | undefined) ??\n new Set<HookHandler<E>>(),\n );\n\n if (listeners.length === 0) {\n return;\n }\n\n // Execute handlers sequentially but continue even if some fail\n for (const [index, listener] of listeners.entries()) {\n try {\n await Promise.resolve(listener(payload));\n } catch (error) {\n // Log failure without throwing\n this.logger.warn(`Hook handler failed for event \"${event}\"`, {\n event,\n handlerIndex: index,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n public registerMany<E extends HookEventName>(\n registrations: HookRegistration<E>[],\n ): UnregisterHook {\n const cleanups = registrations.map(({ event, handler }) =>\n this.on(event, handler),\n );\n return () => cleanups.forEach((dispose) => dispose());\n }\n}\n\nexport const createHookManager = (logger?: AgentLogger): HookManager =>\n new HookManager(logger);\n","import type { ZodType } from \"zod\";\n\nimport type { AgentContext } from \"./context\";\nimport {\n HookEvents,\n HookManager,\n type HookEventName,\n type HookHandler,\n} from \"./hooks\";\nimport type {\n Tool,\n ToolExecutionContext,\n ToolResult,\n ToolProvider,\n} from \"./tool\";\nimport {\n ToolResultFactory,\n coerceToolDefinition,\n normalizeToolEntries,\n} from \"./tool\";\nimport {\n generateAgentFlowDiagram,\n type VisualizationOptions,\n} from \"./visualization\";\nimport type { Memory } from \"../memory/memory\";\nimport { InMemoryStore } from \"../memory/memory\";\n\n//Default model:\nexport const DEFAULT_MODEL = \"gcp/gemini-flash-latest\";\n\n/**\n * Configuration options for BaseAgent\n */\nexport interface BaseAgentConfig<TInput, TOutput> {\n /**\n * Unique name identifying this agent\n */\n name: string;\n\n /**\n * Human-readable description of the agent's purpose\n */\n description?: string;\n\n /**\n * System instructions guiding agent behavior\n */\n instructions?: string;\n\n /**\n * List of tools available to the agent\n *\n * We intentionally accept Tool<any, any> here because tool inputs are ultimately validated\n * at runtime before execution. Using `any` keeps the API ergonomic for tool authors while\n * allowing the BaseAgent to store mixed tool definitions in a single registry.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tools?: Array<Tool<any, any> | ToolProvider>;\n\n /**\n * Maximum iterations before terminating the agent loop\n * @default 25\n */\n maxIterations?: number;\n\n /**\n * Model identifier(s).\n * Accepts a single model (e.g., \"gpt-4\", \"claude-3-sonnet\") or a list used as fallback.\n * @default \"gcp/gemini-flash-latest\"\n */\n model?: string | readonly string[];\n\n /**\n * Input schema for validation (Zod schema)\n */\n inputSchema?: ZodType<TInput>;\n\n /**\n * Output schema for validation (Zod schema)\n */\n outputSchema?: ZodType<TOutput>;\n\n /**\n * Enable memory subsystem\n * @default false\n */\n enableMemory?: boolean;\n\n /**\n * Custom memory implementation (defaults to InMemoryStore if enableMemory is true)\n */\n memory?: Memory;\n\n /**\n * Additional metadata for the agent\n */\n metadata?: Record<string, unknown>;\n\n /**\n * Opper API configuration\n */\n opperConfig?: OpperClientConfig;\n}\n\n/**\n * Opper client configuration\n */\nexport interface OpperClientConfig {\n /**\n * Opper API key (defaults to process.env.OPPER_API_KEY)\n */\n apiKey: string | undefined;\n\n /**\n * Opper API base URL\n */\n baseUrl: string | undefined;\n\n /**\n * Additional configuration options\n */\n [key: string]: unknown;\n}\n\n/**\n * Abstract base class for all Opper agents.\n * Provides lifecycle management, tool handling, hook system, and Opper integration.\n *\n * @template TInput - Type of input the agent accepts\n * @template TOutput - Type of output the agent produces\n */\nexport abstract class BaseAgent<TInput = unknown, TOutput = unknown> {\n /**\n * Agent name\n */\n public readonly name: string;\n\n /**\n * Agent description\n */\n public readonly description: string | undefined;\n\n /**\n * Agent instructions\n */\n public readonly instructions: string | undefined;\n\n /**\n * Maximum iterations for the agent loop\n */\n public readonly maxIterations: number;\n\n /**\n * Model identifier\n */\n public readonly model: string | readonly string[];\n\n /**\n * Input validation schema\n */\n public readonly inputSchema: ZodType<TInput> | undefined;\n\n /**\n * Output validation schema\n */\n public readonly outputSchema: ZodType<TOutput> | undefined;\n\n /**\n * Whether memory is enabled\n */\n public readonly enableMemory: boolean;\n\n /**\n * Memory instance for persistent storage (null if disabled or initialization failed)\n */\n public readonly memory: Memory | null;\n\n /**\n * Agent metadata\n */\n public readonly metadata: Record<string, unknown>;\n\n /**\n * Hook manager for lifecycle events\n */\n protected readonly hooks: HookManager;\n\n /**\n * Registry of available tools\n */\n protected readonly tools: Map<string, Tool<unknown, unknown>>;\n\n /**\n * Baseline tools registered directly on the agent\n */\n protected readonly baseTools: Map<string, Tool<unknown, unknown>>;\n\n /**\n * Registered tool providers that can expand into tools at runtime\n */\n protected readonly toolProviders: Set<ToolProvider>;\n\n /**\n * Active tools supplied by providers for the current execution\n */\n private readonly providerToolRegistry: Map<\n ToolProvider,\n Array<Tool<unknown, unknown>>\n >;\n\n /**\n * Opper client configuration\n */\n protected readonly opperConfig: OpperClientConfig;\n\n constructor(config: BaseAgentConfig<TInput, TOutput>) {\n this.name = config.name;\n this.description = config.description;\n this.instructions = config.instructions;\n this.maxIterations = config.maxIterations ?? 25;\n this.model = config.model ?? DEFAULT_MODEL;\n this.inputSchema = config.inputSchema;\n this.outputSchema = config.outputSchema;\n this.enableMemory = config.enableMemory ?? false;\n this.metadata = { ...(config.metadata ?? {}) };\n\n this.hooks = new HookManager();\n this.tools = new Map();\n this.baseTools = new Map();\n this.toolProviders = new Set();\n this.providerToolRegistry = new Map();\n\n // Initialize Opper configuration with environment fallback\n this.opperConfig = {\n apiKey: config.opperConfig?.apiKey ?? process.env[\"OPPER_API_KEY\"],\n baseUrl: config.opperConfig?.baseUrl,\n ...config.opperConfig,\n };\n\n // Initialize memory with graceful degradation\n this.memory = this.initializeMemory(config);\n\n // Register initial tools/providers\n if (config.tools) {\n this.registerTools(config.tools);\n }\n }\n\n /**\n * Initialize memory subsystem with graceful degradation\n *\n * @param config - Agent configuration\n * @returns Memory instance or null\n */\n private initializeMemory(\n config: BaseAgentConfig<TInput, TOutput>,\n ): Memory | null {\n // If memory disabled, return null\n if (!this.enableMemory && !config.memory) {\n return null;\n }\n\n try {\n // Use provided memory implementation or default to InMemoryStore\n return config.memory ?? new InMemoryStore();\n } catch (error) {\n // Log warning but don't throw - graceful degradation\n console.warn(\n `[${this.name}] Memory initialization failed, continuing without memory:`,\n error,\n );\n return null;\n }\n }\n\n /**\n * Main entry point for agent execution.\n * Orchestrates lifecycle: context initialization, hook triggering, loop execution, teardown.\n *\n * @param input - Input to process\n * @param parentSpanId - Optional parent span ID for tracing\n * @returns Processed output\n */\n public async process(input: TInput, parentSpanId?: string): Promise<TOutput> {\n // Validate input if schema provided\n const validatedInput = this.inputSchema\n ? this.inputSchema.parse(input)\n : input;\n\n // Initialize context\n const context = await this.initializeContext(validatedInput, parentSpanId);\n\n try {\n await this.activateToolProviders();\n\n // Trigger agent:start hook\n await this.triggerHook(HookEvents.AgentStart, { context });\n\n // Execute agent loop\n const result = await this.runLoop(validatedInput, context);\n\n // Validate output if schema provided\n const validatedOutput = this.outputSchema\n ? this.outputSchema.parse(result)\n : result;\n\n // Trigger agent:end hook (success)\n await this.triggerHook(HookEvents.AgentEnd, {\n context,\n result: validatedOutput,\n });\n\n return validatedOutput;\n } catch (error) {\n // Trigger agent:end hook (error)\n await this.triggerHook(HookEvents.AgentEnd, {\n context,\n error,\n });\n\n throw error;\n } finally {\n await this.deactivateToolProviders();\n // Teardown context\n await this.teardownContext(context);\n }\n }\n\n /**\n * Abstract method implementing the agent's main loop logic.\n * Must be implemented by concrete agent classes.\n *\n * @param input - Validated input\n * @param context - Agent execution context\n * @returns Processed output\n */\n protected abstract runLoop(\n input: TInput,\n context: AgentContext,\n ): Promise<TOutput>;\n\n /**\n * Initialize agent context before execution.\n * Can be overridden for custom initialization logic.\n *\n * @param input - Agent input\n * @param parentSpanId - Optional parent span ID\n * @returns Initialized context\n */\n protected async initializeContext(\n input: TInput,\n parentSpanId?: string,\n ): Promise<AgentContext> {\n const context = new (await import(\"./context\")).AgentContext({\n agentName: this.name,\n parentSpanId: parentSpanId ?? null,\n goal: input,\n metadata: { ...this.metadata },\n });\n\n return context;\n }\n\n /**\n * Teardown agent context after execution.\n * Can be overridden for custom cleanup logic.\n *\n * @param context - Agent context to teardown\n */\n protected async teardownContext(context: AgentContext): Promise<void> {\n // Default: no-op, subclasses can override for cleanup\n void context;\n }\n\n /**\n * Add a tool to the agent's tool registry.\n *\n * @param tool - Tool to add\n */\n public addTool<TInput = unknown, TOutput = unknown>(\n tool: Tool<TInput, TOutput>,\n ): void {\n const coerced = coerceToolDefinition(tool);\n\n if (this.tools.has(coerced.name)) {\n console.warn(\n `[${this.name}] Tool \"${coerced.name}\" already registered. Overwriting existing definition.`,\n );\n }\n\n const typedTool = coerced as Tool<unknown, unknown>;\n this.baseTools.set(coerced.name, typedTool);\n this.tools.set(coerced.name, typedTool);\n }\n\n /**\n * Remove a tool from the agent's tool registry.\n *\n * @param toolName - Name of tool to remove\n * @returns True if tool was removed, false if not found\n */\n public removeTool(toolName: string): boolean {\n this.baseTools.delete(toolName);\n return this.tools.delete(toolName);\n }\n\n /**\n * Get a tool by name.\n *\n * @param toolName - Name of tool to retrieve\n * @returns Tool instance or undefined\n */\n public getTool(toolName: string): Tool<unknown, unknown> | undefined {\n return this.tools.get(toolName);\n }\n\n /**\n * Get all registered tools.\n *\n * @returns Array of all tools\n */\n public getTools(): Array<Tool<unknown, unknown>> {\n return Array.from(this.tools.values());\n }\n\n /**\n * Register a tool provider that expands into tools at runtime.\n *\n * @param provider - Tool provider to add\n */\n public addToolProvider(provider: ToolProvider): void {\n this.toolProviders.add(provider);\n }\n\n /**\n * Convert this agent into a tool that can be used by other agents.\n *\n * @param toolName - Optional custom name for the tool (defaults to agent name)\n * @param toolDescription - Optional custom description (defaults to agent description)\n * @returns Tool wrapping this agent\n */\n public asTool(\n toolName?: string,\n toolDescription?: string,\n ): Tool<TInput, TOutput> {\n const tool: Tool<TInput, TOutput> = {\n name: toolName ?? this.name,\n description: toolDescription ?? this.description ?? `Agent: ${this.name}`,\n ...(this.inputSchema && { schema: this.inputSchema }),\n metadata: {\n isAgent: true,\n agentName: this.name,\n wrappedAgent: this, // Store reference to this agent for visualization\n },\n execute: async (\n input: TInput,\n executionContext: ToolExecutionContext,\n ): Promise<ToolResult<TOutput>> => {\n try {\n // Use the tool's span ID as parent for nested agent\n const parentSpanId =\n executionContext.spanId ??\n executionContext.agentContext.parentSpanId ??\n undefined;\n const result = await this.process(input, parentSpanId);\n return ToolResultFactory.success(tool.name, result);\n } catch (error) {\n return ToolResultFactory.failure(\n tool.name,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n },\n };\n\n return tool;\n }\n\n /**\n * Register a hook handler for a specific event.\n *\n * @param event - Hook event name\n * @param handler - Hook handler function\n * @returns Cleanup function to unregister the hook\n */\n public registerHook<E extends HookEventName>(\n event: E,\n handler: HookHandler<E>,\n ): () => void {\n return this.hooks.on(event, handler);\n }\n\n /**\n * Trigger a hook event with a payload.\n * Swallows errors to prevent hook failures from breaking agent execution.\n *\n * @param event - Hook event name\n * @param payload - Event payload\n */\n protected async triggerHook<E extends HookEventName>(\n event: E,\n payload: Parameters<HookHandler<E>>[0],\n ): Promise<void> {\n try {\n await this.hooks.emit(event, payload);\n } catch (error) {\n // Log but don't throw - hook failures shouldn't break agent execution\n console.warn(`Hook error for event ${event}:`, error);\n }\n }\n\n /**\n * Execute a tool with proper context, hooks, and error handling.\n *\n * @param toolName - Name of tool to execute\n * @param input - Tool input\n * @param context - Agent context\n * @param options - Optional execution options (signal, span ID)\n * @returns Tool execution result\n */\n protected async executeTool(\n toolName: string,\n input: unknown,\n context: AgentContext,\n options?: { signal?: AbortSignal; spanId?: string },\n ): Promise<ToolResult<unknown>> {\n const tool = this.tools.get(toolName);\n\n if (!tool) {\n const failure = ToolResultFactory.failure(\n toolName,\n new Error(`Tool \"${toolName}\" not found in agent registry`),\n );\n\n const timestamp = Date.now();\n\n context.recordToolCall({\n toolName,\n input,\n success: false,\n error:\n failure.error instanceof Error\n ? failure.error.message\n : String(failure.error),\n startedAt: timestamp,\n finishedAt: timestamp,\n metadata: {},\n });\n\n await this.triggerHook(HookEvents.ToolError, {\n context,\n toolName,\n error: failure.error,\n });\n\n return failure;\n }\n\n const executionContext: ToolExecutionContext = {\n agentContext: context,\n ...(options?.signal && { signal: options.signal }),\n ...(options?.spanId && { spanId: options.spanId }),\n metadata: {},\n };\n\n const startedAt = Date.now();\n\n try {\n // Trigger before-tool hook\n await this.triggerHook(HookEvents.BeforeTool, {\n context,\n tool,\n input,\n });\n\n // Execute the tool\n const result = await tool.execute(input, executionContext);\n\n const finishedAt = Date.now();\n\n // Record the tool call\n const record = context.recordToolCall({\n toolName: tool.name,\n input,\n ...(result.success && { output: result.output }),\n success: result.success,\n ...(!result.success && {\n error:\n result.error instanceof Error\n ? result.error.message\n : String(result.error),\n }),\n startedAt,\n finishedAt,\n metadata: {},\n });\n\n // Trigger after-tool hook\n await this.triggerHook(HookEvents.AfterTool, {\n context,\n tool,\n result,\n record,\n });\n\n return result;\n } catch (error) {\n const failure = ToolResultFactory.failure(\n toolName,\n error instanceof Error ? error : new Error(String(error)),\n {\n startedAt,\n finishedAt: Date.now(),\n },\n );\n\n const record = context.recordToolCall({\n toolName: tool.name,\n input,\n success: false,\n error:\n failure.error instanceof Error\n ? failure.error.message\n : String(failure.error),\n startedAt,\n finishedAt: failure.finishedAt,\n metadata: {},\n });\n\n // Trigger tool-error hook\n await this.triggerHook(HookEvents.ToolError, {\n context,\n tool,\n toolName: tool.name,\n error,\n });\n\n // Ensure after-tool observers see the recorded failure\n await this.triggerHook(HookEvents.AfterTool, {\n context,\n tool,\n result: failure,\n record,\n });\n\n return failure;\n }\n }\n\n private registerTools(\n entries: Array<Tool<unknown, unknown> | ToolProvider>,\n ): void {\n const { tools, providers } = normalizeToolEntries(entries);\n\n for (const tool of tools) {\n this.addTool(tool);\n }\n\n for (const provider of providers) {\n this.toolProviders.add(provider);\n }\n }\n\n private async activateToolProviders(): Promise<void> {\n const activationPromises = Array.from(this.toolProviders)\n .filter((provider) => !this.providerToolRegistry.has(provider))\n .map(async (provider) => {\n try {\n const baseAgent = this as unknown as BaseAgent<unknown, unknown>;\n const providedTools = (await provider.setup(baseAgent)) ?? [];\n const normalizedTools = providedTools.map((tool) =>\n coerceToolDefinition(tool),\n );\n\n this.providerToolRegistry.set(provider, normalizedTools);\n\n for (const tool of normalizedTools) {\n if (this.tools.has(tool.name)) {\n console.warn(\n `[${this.name}] Tool \"${tool.name}\" from provider overwrites existing tool.`,\n );\n }\n this.tools.set(tool.name, tool);\n }\n } catch (error) {\n console.warn(\n `[${this.name}] Failed to activate tool provider:`,\n error,\n );\n }\n });\n\n await Promise.allSettled(activationPromises);\n }\n\n private async deactivateToolProviders(): Promise<void> {\n const teardownEntries = Array.from(this.providerToolRegistry.entries());\n this.providerToolRegistry.clear();\n\n const teardownPromises = teardownEntries.map(async ([provider, tools]) => {\n for (const tool of tools) {\n this.tools.delete(tool.name);\n\n const baseTool = this.baseTools.get(tool.name);\n if (baseTool) {\n this.tools.set(tool.name, baseTool);\n }\n }\n\n try {\n await provider.teardown();\n } catch (error) {\n console.warn(\n `[${this.name}] Error while tearing down tool provider:`,\n error,\n );\n }\n });\n\n await Promise.allSettled(teardownPromises);\n }\n\n /**\n * Generate a Mermaid flowchart diagram visualizing the agent's structure and flow.\n * Shows tools, hooks, schemas, providers, and nested agents.\n *\n * @param options - Visualization options\n * @returns Mermaid markdown string, or file path if outputPath was provided\n *\n * @example\n * ```typescript\n * // Generate diagram string\n * const diagram = await agent.visualizeFlow();\n * console.log(diagram);\n *\n * // Save to file\n * const path = await agent.visualizeFlow({ outputPath: \"agent_flow.md\" });\n * console.log(`Saved to ${path}`);\n *\n * // Include MCP tools details\n * const diagram = await agent.visualizeFlow({ includeMcpTools: true });\n * ```\n */\n public async visualizeFlow(options?: VisualizationOptions): Promise<string> {\n return generateAgentFlowDiagram(this, options);\n }\n}\n","import { promises as fs } from \"node:fs\";\nimport type { ZodType } from \"zod\";\n\nimport type { BaseAgent } from \"./agent\";\nimport type { HookManager } from \"./hooks\";\nimport { HookEvents } from \"./hooks\";\nimport type { Tool } from \"./tool\";\n\n/**\n * Options for generating agent flow visualization\n */\nexport interface VisualizationOptions {\n /**\n * Optional file path to save the Mermaid diagram\n * If provided, the diagram will be saved to this path\n * .md extension will be added automatically if not present\n */\n outputPath?: string;\n\n /**\n * Whether to include MCP tool providers in the visualization\n * When true, will show expanded tools from providers\n * When false, will show providers as single nodes\n * @default false\n */\n includeMcpTools?: boolean;\n\n /**\n * Internal parameter to track visited agents (prevents cycles)\n * @internal\n */\n _visited?: Set<string>;\n}\n\n/**\n * Sanitize a string to be used as a Mermaid node ID\n * Removes special characters and replaces spaces with underscores\n */\nfunction sanitizeId(name: string): string {\n return name\n .replace(/\\s/g, \"_\")\n .replace(/-/g, \"_\")\n .replace(/\\./g, \"_\")\n .replace(/[()]/g, \"\");\n}\n\n/**\n * Sanitize and truncate label text for Mermaid\n * Takes first sentence, removes problematic characters, and limits length\n */\nfunction sanitizeLabel(text: string): string {\n // Remove problematic characters\n let cleaned = text\n .replace(/\"/g, \"'\")\n .replace(/\\n/g, \" \")\n .replace(/`/g, \"\");\n\n // Take only first sentence\n cleaned = cleaned.split(\".\")[0]?.trim() || cleaned.trim();\n\n // Limit length\n if (cleaned.length > 45) {\n cleaned = cleaned.substring(0, 42) + \"...\";\n }\n\n return cleaned;\n}\n\n/**\n * Get schema name from Zod schema\n * Returns the description or a readable type name with field names for objects\n */\nfunction getSchemaName(schema: ZodType<unknown> | undefined): string {\n if (!schema) {\n return \"N/A\";\n }\n\n try {\n const schemaAny = schema as {\n _def?: {\n typeName?: string;\n description?: string;\n shape?: () => Record<string, ZodType<unknown>>;\n };\n description?: string;\n };\n\n // First check for explicit description (user-provided schema name)\n if (schemaAny.description) {\n return schemaAny.description;\n }\n\n // Then check _def.description\n if (schemaAny._def?.description) {\n return schemaAny._def.description;\n }\n\n // For object schemas, show field names\n const typeName = schemaAny._def?.typeName;\n if (typeName === \"ZodObject\" && schemaAny._def) {\n const shape = schemaAny._def.shape?.();\n if (shape && typeof shape === \"object\") {\n const keys = Object.keys(shape);\n if (keys.length > 0) {\n // Show first 3 keys\n const keyStr =\n keys.length > 3\n ? `{${keys.slice(0, 3).join(\", \")}...}`\n : `{${keys.join(\", \")}}`;\n return keyStr;\n }\n }\n return \"Object\";\n }\n\n // Fall back to cleaned type name\n if (typeName) {\n return typeName.replace(\"Zod\", \"\").replace(\"Type\", \"\");\n }\n\n return \"Any\";\n } catch {\n return \"Any\";\n }\n}\n\n/**\n * Extract parameter information from Zod schema\n * Returns list of \"paramName: type\" strings\n */\nfunction extractParameters(\n schema: ZodType<unknown> | undefined,\n): string[] | null {\n if (!schema) {\n return null;\n }\n\n try {\n const schemaAny = schema as {\n _def?: {\n typeName?: string;\n shape?: () => Record<string, ZodType<unknown>>;\n };\n };\n\n // For object schemas, extract field names and types\n if (schemaAny._def?.typeName === \"ZodObject\") {\n const shape = schemaAny._def.shape?.();\n if (shape && typeof shape === \"object\") {\n const params: string[] = [];\n for (const [key, value] of Object.entries(shape)) {\n const fieldType = (value as { _def?: { typeName?: string } })?._def\n ?.typeName;\n if (fieldType) {\n const cleanType = fieldType.replace(\"Zod\", \"\").toLowerCase();\n params.push(`${key}: ${cleanType}`);\n } else {\n params.push(key);\n }\n }\n return params.length > 0 ? params : null;\n }\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Get hook event names registered on a HookManager\n */\nfunction getRegisteredHooks(hooks: HookManager): string[] {\n const events: string[] = [];\n const allEvents = Object.values(HookEvents);\n\n for (const event of allEvents) {\n if (hooks.listenerCount(event) > 0) {\n events.push(event);\n }\n }\n\n return events;\n}\n\n/**\n * Get wrapped agent from tool metadata\n */\nfunction getWrappedAgent(\n tool: Tool<unknown, unknown>,\n): BaseAgent<unknown, unknown> | null {\n const wrapped = tool.metadata?.[\"wrappedAgent\"];\n if (wrapped && typeof wrapped === \"object\" && \"name\" in wrapped) {\n return wrapped as BaseAgent<unknown, unknown>;\n }\n return null;\n}\n\n/**\n * Check if a tool is from an MCP provider\n */\nfunction isMcpTool(tool: Tool<unknown, unknown>): boolean {\n return tool.metadata?.[\"provider\"] === \"mcp\";\n}\n\n/**\n * Generate Mermaid graph diagram for an agent's structure and flow\n *\n * @param agent - The agent to visualize\n * @param options - Visualization options\n * @returns Mermaid markdown string, or file path if outputPath was provided\n */\nexport async function generateAgentFlowDiagram<I, O>(\n agent: BaseAgent<I, O>,\n options: VisualizationOptions = {},\n): Promise<string> {\n const visited = options._visited ?? new Set<string>();\n const isRoot = visited.size === 0;\n\n const lines: string[] = [];\n\n if (isRoot) {\n lines.push(\"```mermaid\");\n lines.push(\"graph TB\");\n }\n\n // Avoid cycles\n const agentId = sanitizeId(agent.name);\n if (visited.has(agentId)) {\n return \"\";\n }\n visited.add(agentId);\n\n // Main agent node with description and schemas\n let agentLabel = `🤖 ${agent.name}`;\n\n if (\n agent.description &&\n agent.description !== `Agent: ${agent.name}` &&\n agent.description !== agent.name\n ) {\n const desc = sanitizeLabel(agent.description);\n agentLabel += `<br/><i>${desc}</i>`;\n }\n\n // Add schema info\n const inputSchemaName = getSchemaName(agent.inputSchema);\n const outputSchemaName = getSchemaName(agent.outputSchema);\n agentLabel += `<br/>In: ${inputSchemaName} | Out: ${outputSchemaName}`;\n\n lines.push(` ${agentId}[\"${agentLabel}\"]:::agent`);\n\n // Hooks\n const agentWithHooks = agent as unknown as { hooks: HookManager };\n const registeredHooks = getRegisteredHooks(agentWithHooks.hooks);\n\n if (registeredHooks.length > 0) {\n const hookId = `${agentId}_hooks`;\n // Show first 3 hooks\n const hookNames = registeredHooks.slice(0, 3).join(\", \");\n const hookLabel =\n registeredHooks.length > 3\n ? `${hookNames} +${registeredHooks.length - 3}`\n : hookNames;\n lines.push(` ${hookId}[\"🪝 ${hookLabel}\"]:::hook`);\n lines.push(` ${agentId} -.-> ${hookId}`);\n }\n\n // Get tools to show\n const tools = agent.getTools();\n\n // Separate regular tools from MCP tools and agent tools\n const regularTools: Tool<unknown, unknown>[] = [];\n const mcpToolsByServer = new Map<string, Tool<unknown, unknown>[]>();\n const agentTools: Tool<unknown, unknown>[] = [];\n\n for (const tool of tools) {\n const wrappedAgent = getWrappedAgent(tool);\n if (wrappedAgent) {\n agentTools.push(tool);\n } else if (isMcpTool(tool)) {\n const serverName =\n (tool.metadata?.[\"server\"] as string | undefined) ?? \"unknown\";\n const serverTools = mcpToolsByServer.get(serverName) ?? [];\n serverTools.push(tool);\n mcpToolsByServer.set(serverName, serverTools);\n } else {\n regularTools.push(tool);\n }\n }\n\n // Add regular tools\n for (const tool of regularTools) {\n const toolId = sanitizeId(`${agentId}_${tool.name}`);\n let toolLabel = `⚙️ ${sanitizeLabel(tool.name)}`;\n\n // Add description if available\n if (tool.description) {\n const desc = sanitizeLabel(tool.description);\n toolLabel += `<br/><i>${desc}</i>`;\n }\n\n // Add parameters\n const params = extractParameters(tool.schema);\n if (params && params.length > 0) {\n const paramsStr =\n params.length > 3\n ? `${params.slice(0, 3).join(\", \")}...`\n : params.join(\", \");\n toolLabel += `<br/>(${paramsStr})`;\n }\n\n lines.push(` ${toolId}[\"${toolLabel}\"]:::tool`);\n lines.push(` ${agentId} --> ${toolId}`);\n }\n\n // Add MCP providers or tools\n if (mcpToolsByServer.size > 0) {\n for (const [serverName, serverTools] of mcpToolsByServer.entries()) {\n if (options.includeMcpTools) {\n // Show individual tools\n for (const tool of serverTools) {\n const toolId = sanitizeId(`${agentId}_${tool.name}`);\n let toolLabel = `⚙️ ${sanitizeLabel(tool.name)}`;\n\n if (tool.description) {\n const desc = sanitizeLabel(tool.description);\n toolLabel += `<br/><i>${desc}</i>`;\n }\n\n toolLabel += `<br/>(MCP: ${sanitizeLabel(serverName)})`;\n\n lines.push(` ${toolId}[\"${toolLabel}\"]:::tool`);\n lines.push(` ${agentId} --> ${toolId}`);\n }\n } else {\n // Show provider node\n const providerId = sanitizeId(`${agentId}_provider_${serverName}`);\n lines.push(` ${providerId}[\"🔌 ${serverName}\"]:::provider`);\n lines.push(` ${agentId} --> ${providerId}`);\n }\n }\n }\n\n // Add sub-agents recursively\n for (const tool of agentTools) {\n const wrappedAgent = getWrappedAgent(tool);\n if (wrappedAgent) {\n const subAgentId = sanitizeId(wrappedAgent.name);\n lines.push(` ${agentId} --> ${subAgentId}`);\n\n // Recursively visualize sub-agent\n const subDiagram = await generateAgentFlowDiagram(wrappedAgent, {\n ...options,\n _visited: visited,\n });\n\n // Add sub-agent lines (filter out mermaid wrappers and styling)\n const subLines = subDiagram\n .split(\"\\n\")\n .filter(\n (line) =>\n line &&\n !line.includes(\"```mermaid\") &&\n !line.includes(\"```\") &&\n !line.includes(\"%% Styling\") &&\n !line.includes(\"classDef\"),\n );\n\n lines.push(...subLines);\n }\n }\n\n // Add styling (only for root call)\n if (isRoot) {\n lines.push(\"\");\n lines.push(\" %% Styling - Opper Brand Colors\");\n lines.push(\n \" classDef agent fill:#8CF0DC,stroke:#1B2E40,stroke-width:3px,color:#1B2E40\",\n );\n lines.push(\n \" classDef tool fill:#FFD7D7,stroke:#3C3CAF,stroke-width:2px,color:#1B2E40\",\n );\n lines.push(\n \" classDef schema fill:#F8F8F8,stroke:#3C3CAF,stroke-width:2px,color:#1B2E40\",\n );\n lines.push(\n \" classDef hook fill:#FFB186,stroke:#3C3CAF,stroke-width:2px,color:#1B2E40\",\n );\n lines.push(\n \" classDef provider fill:#8CECF2,stroke:#1B2E40,stroke-width:2px,color:#1B2E40\",\n );\n lines.push(\"```\");\n }\n\n const diagram = lines.join(\"\\n\");\n\n // Save to file if requested (only for root call)\n if (options.outputPath && isRoot) {\n let filePath = options.outputPath;\n if (!filePath.endsWith(\".md\")) {\n filePath += \".md\";\n }\n\n // Add title to markdown file\n const fileContent = `# Agent Flow: ${agent.name}\\n\\n${diagram}`;\n await fs.writeFile(filePath, fileContent, \"utf-8\");\n return filePath;\n }\n\n return diagram;\n}\n","import { z } from \"zod\";\n\n/**\n * Schema for memory entry metadata\n */\nexport const MemoryEntryMetadataSchema = z.object({\n createdAt: z.number(),\n updatedAt: z.number(),\n accessCount: z.number().default(0),\n});\n\nexport type MemoryEntryMetadata = z.infer<typeof MemoryEntryMetadataSchema>;\n\n/**\n * Schema for a single memory entry\n */\nexport const MemoryEntrySchema = z.object({\n key: z.string(),\n description: z.string(),\n value: z.unknown(),\n metadata: MemoryEntryMetadataSchema,\n});\n\nexport type MemoryEntry = z.infer<typeof MemoryEntrySchema>;\n\n/**\n * Catalog entry (summary without value) for LLM consumption\n */\nexport interface MemoryCatalogEntry {\n key: string;\n description: string;\n metadata: Record<string, unknown>;\n}\n\n/**\n * Memory interface for persistent key-value storage across agent invocations.\n * Implementations must be thread-safe and handle concurrent operations gracefully.\n */\nexport interface Memory {\n /**\n * Check if memory has any entries\n *\n * @returns True if memory contains entries\n */\n hasEntries(): Promise<boolean>;\n\n /**\n * List memory catalog (summaries without values) so LLM can decide what to load\n *\n * @returns Array of catalog entries with key, description, metadata (no values)\n */\n listEntries(): Promise<MemoryCatalogEntry[]>;\n\n /**\n * Read values from memory by keys\n *\n * @param keys - Optional array of keys to read (if omitted, reads all)\n * @returns Object mapping keys to their values\n */\n read(keys?: string[]): Promise<Record<string, unknown>>;\n\n /**\n * Write a value to memory with the specified key and description\n *\n * @param key - Memory key\n * @param value - Value to store\n * @param description - Human-readable description of what this memory contains\n * @param metadata - Optional metadata\n * @returns The created or updated memory entry\n */\n write(\n key: string,\n value: unknown,\n description?: string,\n metadata?: Record<string, unknown>,\n ): Promise<MemoryEntry>;\n\n /**\n * Delete a memory entry by key\n *\n * @param key - Memory key to delete\n * @returns True if entry was deleted, false if not found\n */\n delete(key: string): Promise<boolean>;\n\n /**\n * Clear all memory entries\n *\n * @returns Number of entries cleared\n */\n clear(): Promise<number>;\n}\n\n/**\n * Default in-memory implementation of Memory interface.\n * Stores data in a Map that persists across agent invocations within the same process.\n */\nexport class InMemoryStore implements Memory {\n private readonly store = new Map<string, MemoryEntry>();\n\n /**\n * Check if memory has any entries\n */\n async hasEntries(): Promise<boolean> {\n return this.store.size > 0;\n }\n\n /**\n * List memory catalog (summaries without values) for LLM consumption\n */\n async listEntries(): Promise<MemoryCatalogEntry[]> {\n const catalog: MemoryCatalogEntry[] = [];\n\n for (const entry of this.store.values()) {\n catalog.push({\n key: entry.key,\n description: entry.description,\n metadata: { ...entry.metadata },\n });\n }\n\n return catalog;\n }\n\n /**\n * Read values from memory by keys\n */\n async read(keys?: string[]): Promise<Record<string, unknown>> {\n const keysToRead = keys ?? Array.from(this.store.keys());\n const snapshot: Record<string, unknown> = {};\n\n for (const key of keysToRead) {\n const entry = this.store.get(key);\n\n if (entry) {\n // Update access tracking\n entry.metadata.accessCount += 1;\n entry.metadata.updatedAt = Date.now();\n\n snapshot[key] = entry.value;\n }\n }\n\n return snapshot;\n }\n\n /**\n * Write a value to memory with description\n */\n async write(\n key: string,\n value: unknown,\n description?: string,\n metadata?: Record<string, unknown>,\n ): Promise<MemoryEntry> {\n const now = Date.now();\n const existing = this.store.get(key);\n\n const entry: MemoryEntry = {\n key,\n description: description ?? existing?.description ?? key,\n value,\n metadata: existing\n ? {\n createdAt: existing.metadata.createdAt,\n updatedAt: now,\n accessCount: existing.metadata.accessCount,\n ...(metadata ?? {}),\n }\n : {\n createdAt: now,\n updatedAt: now,\n accessCount: 0,\n ...(metadata ?? {}),\n },\n };\n\n this.store.set(key, entry);\n\n // Return a copy\n return { ...entry, metadata: { ...entry.metadata } };\n }\n\n /**\n * Delete a memory entry by key\n */\n async delete(key: string): Promise<boolean> {\n return this.store.delete(key);\n }\n\n /**\n * Clear all memory entries\n */\n async clear(): Promise<number> {\n const count = this.store.size;\n this.store.clear();\n return count;\n }\n\n /**\n * Get the current size of the memory store\n *\n * @returns Number of entries in memory\n */\n get size(): number {\n return this.store.size;\n }\n}\n\n/**\n * Factory function to create a new in-memory store\n *\n * @returns New InMemoryStore instance\n */\nexport const createInMemoryStore = (): InMemoryStore => new InMemoryStore();\n","export * from \"./base/agent\";\nexport * from \"./base/context\";\nexport * from \"./base/hooks\";\nexport * from \"./base/result\";\nexport * from \"./base/tool\";\nexport * from \"./base/visualization\";\nexport * from \"./core/agent\";\nexport * from \"./core/schemas\";\nexport * from \"./memory/memory\";\nexport * from \"./mcp/client\";\nexport * from \"./mcp/config\";\nexport * from \"./mcp/provider\";\nexport * from \"./opper/client\";\nexport * from \"./utils/logger\";\nexport * from \"./utils/schema-utils\";\nexport * from \"./utils/tool-decorators\";\nexport * from \"./utils/tool-runner\";\n","import { z } from \"zod\";\n\n/**\n * Schema for agent's internal thought/reasoning\n */\nexport const ThoughtSchema = z.object({\n /**\n * The reasoning or internal monologue of the agent\n */\n reasoning: z.string(),\n\n /**\n * Planned next action(s)\n */\n plan: z.string().optional(),\n\n /**\n * Confidence level (0-1)\n */\n confidence: z.number().min(0).max(1).optional(),\n\n /**\n * Additional metadata\n */\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type Thought = z.infer<typeof ThoughtSchema>;\n\n/**\n * Schema for a tool call from the LLM\n */\nexport const ToolCallSchema = z.object({\n /**\n * Unique identifier for this tool call\n */\n id: z.string(),\n\n /**\n * Name of the tool to invoke\n */\n toolName: z.string(),\n\n /**\n * Arguments to pass to the tool\n */\n arguments: z.unknown(),\n});\n\nexport type ToolCall = z.infer<typeof ToolCallSchema>;\n\n/**\n * Schema for memory updates (write operations)\n */\nexport const MemoryUpdateSchema = z.object({\n /**\n * Value to store for this key\n */\n value: z.unknown(),\n\n /**\n * Optional description of the memory entry\n */\n description: z.string().optional(),\n\n /**\n * Optional metadata for the memory entry\n */\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type MemoryUpdate = z.infer<typeof MemoryUpdateSchema>;\n\n/**\n * Schema for agent's decision output from the \"think\" step\n */\nexport const AgentDecisionSchema = z.object({\n /**\n * Agent's internal reasoning\n */\n reasoning: z.string(),\n\n /**\n * Tool calls to execute (if any)\n * Empty array signals task completion\n */\n toolCalls: z.array(ToolCallSchema).default([]),\n\n /**\n * Memory keys to read during this iteration\n */\n memoryReads: z.array(z.string()).default([]),\n\n /**\n * Memory entries to write/update (key -> payload)\n */\n memoryUpdates: z.record(MemoryUpdateSchema).default({}),\n});\n\nexport type AgentDecision = z.infer<typeof AgentDecisionSchema>;\n\n/**\n * Schema for tool execution result summary\n */\nexport const ToolExecutionSummarySchema = z.object({\n /**\n * Tool name\n */\n toolName: z.string(),\n\n /**\n * Whether execution succeeded\n */\n success: z.boolean(),\n\n /**\n * Output if successful\n */\n output: z.unknown().optional(),\n\n /**\n * Error message if failed\n */\n error: z.string().optional(),\n});\n\nexport type ToolExecutionSummary = z.infer<typeof ToolExecutionSummarySchema>;\n","{\n \"name\": \"@opperai/agents\",\n \"version\": \"0.1.3\",\n \"description\": \"TypeScript SDK for building Opper AI agents\",\n \"type\": \"module\",\n \"engines\": {\n \"node\": \">=20\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/opper-ai/opperai-agent-sdk-node.git\"\n },\n \"license\": \"MIT\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint .\",\n \"format\": \"prettier --write .\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"test:integration\": \"vitest run tests/integration/opper-fixtures.test.ts\",\n \"test:integration:live\": \"vitest run tests/integration/opper-live.test.ts\",\n \"typecheck\": \"tsc --noEmit\",\n \"example\": \"tsx --tsconfig tsconfig.examples.json\",\n \"fixtures:generate\": \"tsx scripts/generate-fixtures.ts\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.19.1\",\n \"eventemitter3\": \"^5.0.1\",\n \"opperai\": \"^3.1.2\",\n \"reflect-metadata\": \"^0.2.2\",\n \"zod\": \"^3.23.8\",\n \"zod-to-json-schema\": \"^3.23.3\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.37.0\",\n \"@types/node\": \"^20.17.17\",\n \"@typescript-eslint/eslint-plugin\": \"^8.12.2\",\n \"@typescript-eslint/parser\": \"^8.12.2\",\n \"@vitest/coverage-v8\": \"^2.1.5\",\n \"eslint\": \"^9.14.0\",\n \"eslint-config-prettier\": \"^9.1.0\",\n \"eslint-plugin-import\": \"^2.31.0\",\n \"prettier\": \"^3.3.2\",\n \"tsup\": \"^8.2.4\",\n \"tsx\": \"^4.20.6\",\n \"typescript\": \"^5.7.2\",\n \"typescript-eslint\": \"^8.46.0\",\n \"vitest\": \"^2.1.5\"\n },\n \"packageManager\": \"pnpm@10.18.1+sha512.77a884a165cbba2d8d1c19e3b4880eee6d2fcabd0d879121e282196b80042351d5eb3ca0935fa599da1dc51265cc68816ad2bddd2a2de5ea9fdf92adbec7cd34\"\n}\n","/**\n * SDK version information\n *\n * This file provides version metadata that is included in the User-Agent header\n * for all Opper API requests made by this SDK.\n */\n\nimport packageJson from \"../../package.json\";\n\n/**\n * The SDK package name\n */\nexport const SDK_NAME = \"@opperai/agents\";\n\n/**\n * The current SDK version from package.json\n */\nexport const SDK_VERSION = packageJson.version;\n\n/**\n * The platform identifier (ts for TypeScript)\n */\nexport const SDK_PLATFORM = \"ts\";\n\n/**\n * Returns the formatted User-Agent string for this SDK\n *\n * Format: @opperai/agents-ts/0.1.0\n */\nexport function getUserAgent(): string {\n return `${SDK_NAME}-${SDK_PLATFORM}/${SDK_VERSION}`;\n}\n","import { Opper } from \"opperai\";\nimport type { z } from \"zod\";\nimport type { ZodTypeAny } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nimport type { AgentLogger } from \"../utils/logger\";\nimport { getDefaultLogger } from \"../utils/logger\";\nimport { getUserAgent } from \"../utils/version\";\n\ntype OpperCallResult = Awaited<ReturnType<Opper[\"call\"]>>;\n\ntype TokenUsageMetrics = {\n inputTokens: number;\n outputTokens: number;\n};\n\nconst isPlainRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isZodSchema = (value: unknown): value is ZodTypeAny =>\n typeof value === \"object\" &&\n value !== null &&\n \"_def\" in (value as Record<string, unknown>) &&\n typeof (value as { parse?: unknown }).parse === \"function\";\n\nconst readTokenCount = (\n usage: Record<string, unknown> | undefined,\n key: string,\n): number => {\n if (!usage) {\n return 0;\n }\n\n const value = usage[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n};\n\nconst extractUsage = (response: OpperCallResult): TokenUsageMetrics => {\n const usageRecord = isPlainRecord(response.usage)\n ? response.usage\n : undefined;\n\n return {\n inputTokens: readTokenCount(usageRecord, \"input_tokens\"),\n outputTokens: readTokenCount(usageRecord, \"output_tokens\"),\n };\n};\n\nconst extractCost = (\n response: OpperCallResult,\n): { generation: number; platform: number; total: number } => {\n const costRecord = isPlainRecord(response.cost) ? response.cost : undefined;\n\n return {\n generation: readTokenCount(costRecord, \"generation\"),\n platform: readTokenCount(costRecord, \"platform\"),\n total: readTokenCount(costRecord, \"total\"),\n };\n};\n\n/**\n * Opper call response\n */\nexport interface OpperCallResponse<TOutput = unknown> {\n /**\n * Parsed JSON output (if outputSchema provided)\n */\n jsonPayload?: TOutput;\n\n /**\n * Text message response\n */\n message?: string | null | undefined;\n\n /**\n * Span ID for this call\n */\n spanId: string;\n\n /**\n * Token usage information\n */\n usage: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n cost: {\n generation: number;\n platform: number;\n total: number;\n };\n };\n}\n\n/**\n * Options for Opper call\n */\nexport interface OpperCallOptions<TInput = unknown, TOutput = unknown> {\n /**\n * Unique name for this call/task\n */\n name: string;\n\n /**\n * Natural language instructions\n */\n instructions: string;\n\n /**\n * Input data for the call\n */\n input: TInput;\n\n /**\n * Input schema (Zod or JSON Schema)\n */\n inputSchema?: z.ZodType<TInput> | Record<string, unknown>;\n\n /**\n * Output schema (Zod or JSON Schema)\n */\n outputSchema?: z.ZodType<TOutput> | Record<string, unknown>;\n\n /**\n * Model to use. Accepts a single model identifier or an ordered list for fallback.\n * Example: \"anthropic/claude-3.7-sonnet\" or [\"openai/gpt-4o\", \"anthropic/claude-3.7-sonnet\"].\n */\n model?: string | readonly string[];\n\n /**\n * Parent span ID for tracing\n */\n parentSpanId?: string;\n}\n\n/**\n * Span information\n */\nexport interface OpperSpan {\n id: string;\n name: string;\n input?: unknown;\n output?: unknown;\n}\n\n/**\n * Options for creating a span\n */\nexport interface CreateSpanOptions {\n name: string;\n input?: unknown;\n parentSpanId?: string;\n}\n\n/**\n * Retry configuration\n */\nexport interface RetryConfig {\n /**\n * Maximum number of retry attempts\n */\n maxRetries: number;\n\n /**\n * Initial delay in milliseconds\n */\n initialDelayMs: number;\n\n /**\n * Backoff multiplier\n */\n backoffMultiplier: number;\n\n /**\n * Maximum delay in milliseconds\n */\n maxDelayMs: number;\n}\n\n/**\n * Default retry configuration\n */\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n initialDelayMs: 1000,\n backoffMultiplier: 2,\n maxDelayMs: 10000,\n};\n\n/**\n * Opper client wrapper with retry logic and usage tracking\n */\nexport class OpperClient {\n private readonly client: Opper;\n private readonly logger: AgentLogger;\n private readonly retryConfig: RetryConfig;\n\n constructor(\n apiKey?: string,\n options: {\n logger?: AgentLogger;\n retryConfig?: Partial<RetryConfig>;\n } = {},\n ) {\n this.client = new Opper({\n httpBearer: apiKey ?? process.env[\"OPPER_HTTP_BEARER\"] ?? \"\",\n userAgent: getUserAgent(),\n });\n this.logger = options.logger ?? getDefaultLogger();\n this.retryConfig = {\n ...DEFAULT_RETRY_CONFIG,\n ...(options.retryConfig ?? {}),\n };\n }\n\n /**\n * Make a call to Opper with retry logic\n */\n public async call<TInput = unknown, TOutput = unknown>(\n options: OpperCallOptions<TInput, TOutput>,\n ): Promise<OpperCallResponse<TOutput>> {\n return this.withRetry(async () => {\n // Convert Zod schemas to JSON Schema if needed\n const inputSchema = this.toJsonSchema(options.inputSchema);\n const outputSchema = this.toJsonSchema(options.outputSchema);\n\n const response = await this.client.call({\n name: options.name,\n instructions: options.instructions,\n input: options.input,\n ...(inputSchema && { inputSchema }),\n ...(outputSchema && { outputSchema }),\n ...(options.model && { model: options.model }),\n ...(options.parentSpanId && { parentSpanId: options.parentSpanId }),\n });\n\n // Parse usage information\n const usagePayload = extractUsage(response);\n const costPayload = extractCost(response);\n const usage = {\n inputTokens: usagePayload.inputTokens,\n outputTokens: usagePayload.outputTokens,\n totalTokens: usagePayload.inputTokens + usagePayload.outputTokens,\n cost: costPayload,\n };\n\n const result: OpperCallResponse<TOutput> = {\n ...(response.jsonPayload !== undefined && response.jsonPayload !== null\n ? { jsonPayload: response.jsonPayload as TOutput }\n : {}),\n ...(response.message !== undefined && response.message !== null\n ? { message: response.message }\n : {}),\n spanId: response.spanId,\n usage,\n };\n\n return result;\n }, options.name);\n }\n\n /**\n * Create a span for tracing\n */\n public async createSpan(options: CreateSpanOptions): Promise<OpperSpan> {\n return this.withRetry(async () => {\n const span = await this.client.spans.create({\n name: options.name,\n ...(options.input !== undefined && { input: options.input }),\n ...(options.parentSpanId && { parentId: options.parentSpanId }),\n });\n\n return {\n id: span.id,\n name: options.name,\n input: options.input,\n };\n }, `create-span:${options.name}`);\n }\n\n /**\n * Update a span with output or error\n */\n public async updateSpan(\n spanId: string,\n output: unknown,\n options?: { error?: string },\n ): Promise<void> {\n return this.withRetry(async () => {\n // Serialize output to string if it's an object\n const serializedOutput =\n output !== undefined && output !== null\n ? typeof output === \"object\"\n ? JSON.stringify(output)\n : String(output)\n : undefined;\n\n await this.client.spans.update(spanId, {\n ...(serializedOutput !== undefined && { output: serializedOutput }),\n ...(options?.error && { error: options.error }),\n });\n }, `update-span:${spanId}`);\n }\n\n /**\n * Get the underlying Opper client\n */\n public getClient(): Opper {\n return this.client;\n }\n\n /**\n * Execute a function with retry logic and exponential backoff\n */\n private async withRetry<T>(\n fn: () => Promise<T>,\n operationName: string,\n ): Promise<T> {\n let lastError: Error | undefined;\n let delay = this.retryConfig.initialDelayMs;\n\n for (let attempt = 0; attempt <= this.retryConfig.maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Don't retry on last attempt\n if (attempt === this.retryConfig.maxRetries) {\n break;\n }\n\n // Check if error is retryable (network errors, rate limits, etc.)\n if (!this.isRetryableError(error)) {\n throw lastError;\n }\n\n this.logger.warn(\n `Opper operation \"${operationName}\" failed (attempt ${attempt + 1}/${this.retryConfig.maxRetries + 1}), retrying in ${delay}ms`,\n {\n error: lastError.message,\n attempt: attempt + 1,\n delayMs: delay,\n },\n );\n\n // Wait before retrying\n await this.sleep(delay);\n\n // Exponential backoff\n delay = Math.min(\n delay * this.retryConfig.backoffMultiplier,\n this.retryConfig.maxDelayMs,\n );\n }\n }\n\n this.logger.error(\n `Opper operation \"${operationName}\" failed after ${this.retryConfig.maxRetries + 1} attempts`,\n lastError,\n );\n throw lastError;\n }\n\n /**\n * Check if an error is retryable\n */\n private isRetryableError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n // Check for common retryable errors\n const errorMessage = error.message.toLowerCase();\n const retryablePatterns = [\n \"network\",\n \"timeout\",\n \"econnreset\",\n \"enotfound\",\n \"econnrefused\",\n \"etimedout\",\n \"rate limit\",\n \"429\",\n \"500\",\n \"502\",\n \"503\",\n \"504\",\n ];\n\n return retryablePatterns.some((pattern) => errorMessage.includes(pattern));\n }\n\n /**\n * Convert Zod schema to JSON Schema\n */\n private toJsonSchema(\n schema: ZodTypeAny | Record<string, unknown> | undefined,\n ): Record<string, unknown> | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (isZodSchema(schema)) {\n try {\n return zodToJsonSchema(schema) as Record<string, unknown>;\n } catch (error) {\n this.logger.warn(\"Failed to convert Zod schema to JSON Schema\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return undefined;\n }\n }\n\n if (isPlainRecord(schema)) {\n return schema;\n }\n\n this.logger.warn(\"Unsupported schema type provided to OpperClient\", {\n schemaType: typeof schema,\n });\n return undefined;\n }\n\n /**\n * Sleep for specified milliseconds\n */\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n\n/**\n * Create an Opper client with optional configuration\n */\nexport function createOpperClient(\n apiKey?: string,\n options?: {\n logger?: AgentLogger;\n retryConfig?: Partial<RetryConfig>;\n },\n): OpperClient {\n return new OpperClient(apiKey, options);\n}\n","import type { ZodIssue, ZodType, ZodTypeAny } from \"zod\";\nimport type { JsonSchema7Type } from \"zod-to-json-schema\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nexport class SchemaValidationError extends Error {\n public readonly issues: ZodIssue[];\n\n constructor(message: string, issues: ZodIssue[]) {\n super(message);\n this.name = \"SchemaValidationError\";\n this.issues = issues;\n }\n}\n\nexport type Schema<T> = ZodType<T>;\n\nexport interface SchemaValidationOptions {\n message?: string;\n}\n\nexport const validateSchema = <T>(\n schema: Schema<T>,\n value: unknown,\n options: SchemaValidationOptions = {},\n): T => {\n const result = schema.safeParse(value);\n if (!result.success) {\n throw new SchemaValidationError(\n options.message ?? \"Schema validation failed\",\n result.error.issues,\n );\n }\n\n return result.data;\n};\n\nexport const isSchemaValid = <T>(\n schema: Schema<T>,\n value: unknown,\n): value is T => {\n return schema.safeParse(value).success;\n};\n\nexport interface JsonSchemaOptions {\n name?: string;\n target?: \"jsonSchema7\" | \"openApi3\";\n}\n\nexport const schemaToJson = (\n schema: ZodTypeAny,\n options: JsonSchemaOptions = {},\n): JsonSchema7Type => {\n return zodToJsonSchema(schema, options) as JsonSchema7Type;\n};\n\nexport const getSchemaDefault = <T>(schema: Schema<T>): T | undefined => {\n const result = schema.safeParse(undefined);\n return result.success ? result.data : undefined;\n};\n\nexport const mergeSchemaDefaults = <T extends Record<string, unknown>>(\n schema: Schema<T>,\n value: Partial<T>,\n): T => {\n const defaults = getSchemaDefault(schema);\n if (defaults && typeof defaults === \"object\") {\n return validateSchema(schema, { ...defaults, ...value });\n }\n\n return validateSchema(schema, value);\n};\n","import { z } from \"zod\";\n\nimport {\n AgentDecisionSchema,\n type AgentDecision,\n type ToolExecutionSummary,\n ToolExecutionSummarySchema,\n} from \"./schemas\";\nimport { BaseAgent, type BaseAgentConfig } from \"../base/agent\";\nimport type { AgentContext } from \"../base/context\";\nimport { HookEvents } from \"../base/hooks\";\nimport type { ToolSuccess } from \"../base/tool\";\nimport { OpperClient } from \"../opper/client\";\nimport { getDefaultLogger, LogLevel, type AgentLogger } from \"../utils/logger\";\nimport { schemaToJson } from \"../utils/schema-utils\";\n\nconst isToolSuccessResult = (value: unknown): value is ToolSuccess<unknown> => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const candidate = value as Partial<ToolSuccess<unknown>>;\n return (\n candidate.success === true &&\n typeof candidate.toolName === \"string\" &&\n \"output\" in candidate\n );\n};\n\n/**\n * Configuration for the core Agent\n */\nexport interface AgentConfig<TInput, TOutput>\n extends BaseAgentConfig<TInput, TOutput> {\n /**\n * Custom Opper client instance (for testing or custom configuration)\n */\n opperClient?: OpperClient;\n\n /**\n * Logger instance\n */\n logger?: AgentLogger;\n\n /**\n * Verbose logging\n */\n verbose?: boolean;\n}\n\n/**\n * Core Agent implementation with \"while tools > 0\" loop.\n * Implements think → tool execution → memory handling cycle.\n */\nexport class Agent<TInput = unknown, TOutput = unknown> extends BaseAgent<\n TInput,\n TOutput\n> {\n private readonly opperClient: OpperClient;\n private readonly logger: AgentLogger;\n private readonly verbose: boolean;\n\n constructor(config: AgentConfig<TInput, TOutput>) {\n super(config);\n\n this.logger = config.logger ?? getDefaultLogger();\n this.verbose = config.verbose ?? false;\n\n // If verbose mode is enabled, ensure the logger emits info-level logs\n if (this.verbose) {\n try {\n this.logger.setLevel?.(LogLevel.INFO);\n } catch {\n // Ignore if the provided logger does not support dynamic level changes\n }\n }\n\n // Initialize Opper client\n this.opperClient =\n config.opperClient ??\n new OpperClient(this.opperConfig.apiKey, {\n logger: this.logger,\n });\n }\n\n /**\n * Serialize input for passing to LLM or spans\n */\n private serializeInput(input: TInput): string {\n if (typeof input === \"string\") {\n return input;\n }\n if (typeof input === \"object\" && input !== null) {\n return JSON.stringify(input);\n }\n return String(input);\n }\n\n /**\n * Main agent loop: think → tool execution → memory handling → repeat until complete\n */\n protected async runLoop(\n input: TInput,\n context: AgentContext,\n ): Promise<TOutput> {\n this.log(\"Starting agent loop\", {\n goal: input,\n maxIterations: this.maxIterations,\n tools: Array.from(this.tools.keys()),\n });\n\n // Create parent span for this agent execution\n const parentSpan = await this.opperClient.createSpan({\n name: `${this.name}_execution`,\n input: this.serializeInput(input),\n ...(context.parentSpanId ? { parentSpanId: context.parentSpanId } : {}),\n });\n context.parentSpanId = parentSpan.id;\n\n try {\n while (context.iteration < this.maxIterations) {\n const currentIteration = context.iteration + 1;\n\n this.log(`Iteration ${currentIteration}/${this.maxIterations}`, {\n toolsAvailable: this.tools.size,\n });\n\n // Hook: loop_start\n await this.triggerHook(HookEvents.LoopStart, { context });\n\n let loopComplete = false;\n\n try {\n // Step 1: Think - Get agent's decision\n const { decision, spanId: thinkSpanId } = await this.think(\n input,\n context,\n );\n\n // Step 2: Handle memory actions (Phase 7 integration point)\n const memoryResults = await this.handleMemoryActions(\n decision,\n context,\n thinkSpanId,\n );\n\n // Track tool call records captured during this iteration\n const toolCallStartIndex = context.toolCalls.length;\n\n // Step 3: Execute tool calls (if any)\n const toolResults = await this.executeToolCalls(\n decision,\n context,\n thinkSpanId,\n );\n const combinedResults = [...memoryResults, ...toolResults];\n\n const newToolCalls = context.toolCalls.slice(toolCallStartIndex);\n\n // Step 4: Record execution cycle (always capture reasoning per iteration)\n context.addCycle({\n iteration: currentIteration,\n thought: {\n reasoning: decision.reasoning,\n memoryReads: decision.memoryReads,\n memoryUpdates: decision.memoryUpdates,\n },\n toolCalls: newToolCalls,\n results: combinedResults,\n timestamp: Date.now(),\n });\n context.iteration = currentIteration;\n\n // Check if loop is complete\n const hasToolCalls = decision.toolCalls.length > 0;\n const hasMemoryReads =\n this.enableMemory && (decision.memoryReads?.length ?? 0) > 0;\n loopComplete = !hasToolCalls && !hasMemoryReads;\n } finally {\n // Hook: loop_end\n await this.triggerHook(HookEvents.LoopEnd, { context });\n }\n\n // Exit loop if complete\n if (loopComplete) {\n this.log(\"Loop complete, generating final result\", {\n iteration: context.iteration + 1,\n });\n break;\n }\n }\n\n // Check if we exceeded max iterations without completing\n if (context.iteration >= this.maxIterations) {\n throw new Error(\n `Agent exceeded maximum iterations (${this.maxIterations}) without completing the task`,\n );\n }\n\n // Generate final result\n const result = await this.generateFinalResult(input, context);\n\n // Update parent span with final output\n await this.opperClient.updateSpan(parentSpan.id, result);\n\n return result;\n } catch (error) {\n // Update parent span with error\n await this.opperClient.updateSpan(parentSpan.id, undefined, {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n }\n\n /**\n * Think step: Call LLM to decide next action\n */\n private async think(\n input: TInput,\n context: AgentContext,\n ): Promise<{ decision: AgentDecision; spanId: string }> {\n const spanName = \"think\";\n this.log(\"Think step\", { iteration: context.iteration });\n\n // Trigger hook: llm_call\n await this.triggerHook(HookEvents.LlmCall, { context, callType: \"think\" });\n\n try {\n // Build static instructions\n const instructions = this.buildThinkInstructions();\n\n // Build dynamic context (execution history, tools, memory, etc.)\n const thinkContext = await this.buildThinkContext(input, context);\n\n // Call Opper with structured output\n const response = await this.opperClient.call<\n typeof thinkContext,\n AgentDecision\n >({\n name: spanName,\n instructions,\n input: thinkContext,\n outputSchema: AgentDecisionSchema as z.ZodType<AgentDecision>,\n model: this.model,\n ...(context.parentSpanId && { parentSpanId: context.parentSpanId }),\n });\n\n // Update usage\n context.updateUsage({\n requests: 1,\n inputTokens: response.usage.inputTokens,\n outputTokens: response.usage.outputTokens,\n totalTokens: response.usage.totalTokens,\n cost: response.usage.cost,\n });\n\n // Parse and validate decision\n const decision = AgentDecisionSchema.parse(response.jsonPayload);\n\n // Trigger hook: llm_response\n await this.triggerHook(HookEvents.LlmResponse, {\n context,\n callType: \"think\",\n response,\n });\n\n // Trigger hook: think_end\n await this.triggerHook(HookEvents.ThinkEnd, {\n context,\n thought: { reasoning: decision.reasoning },\n });\n\n this.log(\"Think result\", {\n reasoning: decision.reasoning,\n toolCalls: decision.toolCalls.length,\n memoryReads: decision.memoryReads?.length ?? 0,\n memoryWrites: Object.keys(decision.memoryUpdates ?? {}).length,\n });\n\n return { decision, spanId: response.spanId };\n } catch (error) {\n this.logger.error(\"Think step failed\", error);\n throw new Error(\n `Think step failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n /**\n * Build static instructions for the think step\n */\n private buildThinkInstructions(): string {\n let instructions = `You are in a Think-Act reasoning loop.\n\nYOUR TASK:\n1. Analyze the current situation\n2. Decide if the goal is complete or more actions are needed\n3. If more actions needed: specify tools to call\n4. If goal complete: return empty tool_calls list\n\nIMPORTANT:\n- Return empty toolCalls array when task is COMPLETE\n- Only use available tools\n- Provide clear reasoning for each decision`;\n\n // Add memory instructions if enabled\n if (this.enableMemory) {\n instructions += `\n\nMEMORY SYSTEM:\nYou have access to a persistent memory system that works across iterations.\n\nMemory Operations:\n1. READ: Add keys to memoryReads when you need to load existing entries\n2. WRITE: Populate memoryUpdates with key-value pairs (with optional description/metadata)\n Example: memoryUpdates = { \"favorite_color\": { \"value\": \"blue\", \"description\": \"User likes blue\" } }\n\nWhen to use memory:\n- Save important calculations, decisions, or user preferences\n- Load memory when you need information from earlier in the conversation\n- Use descriptive keys like \"budget_total\", \"user_favorite_city\", etc.\n- When a key appears in memory_catalog and you need its value, add it to memoryReads before continuing\n\nThe memory you write persists across all process() calls on this agent.`;\n }\n\n return instructions;\n }\n\n /**\n * Build dynamic context for the think step\n */\n private async buildThinkContext(input: TInput, context: AgentContext) {\n // Build available tools list\n const availableTools = Array.from(this.tools.values()).map((tool) => ({\n name: tool.name,\n description: tool.description || \"\",\n // Convert Zod schema to JSON Schema for LLM consumption\n parameters: tool.schema ? schemaToJson(tool.schema) : {},\n }));\n\n // Build execution history\n const executionHistory = context.getLastNCycles(3).map((cycle) => {\n // Extract reasoning from thought\n const thought =\n typeof cycle.thought === \"object\" && cycle.thought !== null\n ? ((cycle.thought as Record<string, unknown>)[\n \"reasoning\"\n ] as string) || \"\"\n : String(cycle.thought || \"\");\n\n // Map results to summary format\n const results = Array.isArray(cycle.results)\n ? cycle.results.map((r) => {\n const result = r as ToolExecutionSummary;\n\n // Extract the actual output value - handle case where output might be a ToolResult object\n let actualOutput = result.output;\n if (result.success && isToolSuccessResult(actualOutput)) {\n // Extract inner output when a full ToolResult is stored\n actualOutput = actualOutput.output;\n }\n\n return {\n tool: result.toolName,\n success: result.success,\n // Serialize result properly - use JSON for objects, String for primitives\n result: result.success\n ? typeof actualOutput === \"object\"\n ? JSON.stringify(actualOutput)\n : String(actualOutput)\n : undefined,\n error: !result.success ? result.error : undefined,\n };\n })\n : [];\n\n return {\n iteration: cycle.iteration,\n thought,\n results,\n };\n });\n\n // Build memory catalog if memory is enabled and has entries\n let memoryCatalog: unknown = null;\n if (this.enableMemory && this.memory && (await this.memory.hasEntries())) {\n memoryCatalog = await this.memory.listEntries();\n }\n\n // Get loaded memory from context metadata\n const loadedMemory = context.metadata[\"current_memory\"] ?? null;\n\n // Build context object\n return {\n goal: this.serializeInput(input),\n agent_description: this.description || \"\",\n instructions: this.instructions || \"No specific instructions.\",\n available_tools: availableTools,\n execution_history: executionHistory,\n current_iteration: context.iteration + 1,\n max_iterations: this.maxIterations,\n memory_catalog: memoryCatalog,\n loaded_memory: loadedMemory,\n };\n }\n\n /**\n * Execute all tool calls from a decision\n */\n private async executeToolCalls(\n decision: AgentDecision,\n context: AgentContext,\n parentSpanId?: string,\n ): Promise<ToolExecutionSummary[]> {\n if (decision.toolCalls.length === 0) {\n return [];\n }\n\n this.log(`Executing ${decision.toolCalls.length} tool call(s)`);\n\n const results: ToolExecutionSummary[] = [];\n\n for (const toolCall of decision.toolCalls) {\n // Verbose: announce the tool and parameters\n this.log(`Action: ${toolCall.toolName}`, {\n parameters: toolCall.arguments,\n });\n\n // Create span for this tool call\n const toolSpan = await this.opperClient.createSpan({\n name: `tool_${toolCall.toolName}`,\n input: toolCall.arguments,\n ...(parentSpanId\n ? { parentSpanId }\n : context.parentSpanId\n ? { parentSpanId: context.parentSpanId }\n : {}),\n });\n\n try {\n // Execute tool via base class method (handles hooks and recording)\n // Pass tool span ID so nested operations can use it as parent\n const result = await this.executeTool(\n toolCall.toolName,\n toolCall.arguments,\n context,\n { spanId: toolSpan.id },\n );\n\n // Update tool span with result\n if (result.success) {\n await this.opperClient.updateSpan(toolSpan.id, result.output);\n } else {\n await this.opperClient.updateSpan(toolSpan.id, undefined, {\n error:\n result.error instanceof Error\n ? result.error.message\n : String(result.error),\n });\n }\n\n // Create summary\n const summary: ToolExecutionSummary = {\n toolName: toolCall.toolName,\n success: result.success,\n ...(result.success && { output: result.output }),\n ...(!result.success && {\n error:\n result.error instanceof Error\n ? result.error.message\n : String(result.error),\n }),\n };\n\n results.push(ToolExecutionSummarySchema.parse(summary));\n\n this.log(\n `Tool ${toolCall.toolName} ${result.success ? \"succeeded\" : \"failed\"}`,\n {\n success: result.success,\n },\n );\n } catch (error) {\n // Update span with error\n await this.opperClient.updateSpan(toolSpan.id, undefined, {\n error: error instanceof Error ? error.message : String(error),\n });\n\n // Tool execution threw an error\n const summary: ToolExecutionSummary = {\n toolName: toolCall.toolName,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n\n results.push(ToolExecutionSummarySchema.parse(summary));\n\n this.logger.warn(`Tool ${toolCall.toolName} threw error`, {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return results;\n }\n\n /**\n * Handle memory operations from a decision\n * Supports read and write operations with graceful degradation\n */\n private async handleMemoryActions(\n decision: AgentDecision,\n context: AgentContext,\n parentSpanId?: string,\n ): Promise<ToolExecutionSummary[]> {\n if (!this.enableMemory || !this.memory) {\n return [];\n }\n\n const hasReads =\n Array.isArray(decision.memoryReads) && decision.memoryReads.length > 0;\n const updateEntries = Object.entries(decision.memoryUpdates ?? {}).filter(\n ([key, update]) =>\n typeof key === \"string\" &&\n key.length > 0 &&\n typeof update === \"object\" &&\n update !== null &&\n \"value\" in update,\n );\n const hasWrites = updateEntries.length > 0;\n\n if (!hasReads && !hasWrites) {\n return [];\n }\n\n this.log(\"Handling memory operations\", {\n reads: decision.memoryReads?.length ?? 0,\n writes: updateEntries.length,\n });\n\n const spanParentId = parentSpanId ?? context.parentSpanId ?? undefined;\n const summaries: ToolExecutionSummary[] = [];\n\n // Handle reads first\n if (hasReads) {\n try {\n const keySet = new Set(\n decision.memoryReads.filter(\n (key): key is string => typeof key === \"string\" && key.length > 0,\n ),\n );\n const keys = Array.from(keySet);\n\n if (keys.length > 0) {\n const memoryReadSpan = await this.opperClient.createSpan({\n name: \"memory_read\",\n input: keys,\n ...(spanParentId && { parentSpanId: spanParentId }),\n });\n\n const memoryData = await this.memory.read(keys);\n\n await this.opperClient.updateSpan(memoryReadSpan.id, memoryData);\n\n // Store loaded memory in context metadata\n context.setMetadata(\"current_memory\", memoryData);\n\n this.log(`Loaded ${Object.keys(memoryData).length} memory entries`, {\n keys,\n });\n\n summaries.push(\n ToolExecutionSummarySchema.parse({\n toolName: \"memory_read\",\n success: true,\n output: { keys, data: memoryData },\n }),\n );\n\n // Trigger hooks for each read\n for (const key of keys) {\n await this.triggerHook(HookEvents.MemoryRead, {\n context,\n key,\n value: memoryData[key],\n });\n }\n }\n } catch (error) {\n await this.triggerHook(HookEvents.MemoryError, {\n context,\n operation: \"read\",\n error,\n });\n\n this.logger.warn(\"Memory read failed\", {\n error: error instanceof Error ? error.message : String(error),\n });\n\n summaries.push(\n ToolExecutionSummarySchema.parse({\n toolName: \"memory_read\",\n success: false,\n error: error instanceof Error ? error.message : String(error),\n }),\n );\n }\n }\n\n // Handle writes\n if (hasWrites) {\n try {\n const memoryWriteSpan = await this.opperClient.createSpan({\n name: \"memory_write\",\n input: updateEntries.map(([key]) => key),\n ...(spanParentId && { parentSpanId: spanParentId }),\n });\n\n for (const [key, update] of updateEntries) {\n const castUpdate = update as {\n value: unknown;\n description?: string;\n metadata?: Record<string, unknown>;\n };\n\n await this.memory.write(\n key,\n castUpdate.value,\n castUpdate.description ?? key,\n castUpdate.metadata,\n );\n\n await this.triggerHook(HookEvents.MemoryWrite, {\n context,\n key,\n value: castUpdate.value,\n });\n }\n\n await this.opperClient.updateSpan(\n memoryWriteSpan.id,\n `Successfully wrote ${updateEntries.length} keys`,\n );\n\n this.log(`Wrote ${updateEntries.length} memory entries`);\n\n summaries.push(\n ToolExecutionSummarySchema.parse({\n toolName: \"memory_write\",\n success: true,\n output: {\n keys: updateEntries.map(([key]) => key),\n },\n }),\n );\n } catch (error) {\n await this.triggerHook(HookEvents.MemoryError, {\n context,\n operation: \"write\",\n error,\n });\n\n this.logger.warn(\"Memory write failed\", {\n error: error instanceof Error ? error.message : String(error),\n });\n\n summaries.push(\n ToolExecutionSummarySchema.parse({\n toolName: \"memory_write\",\n success: false,\n error: error instanceof Error ? error.message : String(error),\n }),\n );\n }\n }\n\n return summaries;\n }\n\n /**\n * Generate final result based on execution history\n */\n private async generateFinalResult(\n input: TInput,\n context: AgentContext,\n ): Promise<TOutput> {\n this.log(\"Generating final result\", { totalIterations: context.iteration });\n\n // Build context for final result generation\n const finalContext = {\n goal: this.serializeInput(input),\n instructions: this.instructions || \"No specific instructions.\",\n execution_history: context.executionHistory.map((cycle) => {\n const results = Array.isArray(cycle.results) ? cycle.results : [];\n return {\n iteration: cycle.iteration,\n actions_taken: results.map(\n (r) => (r as ToolExecutionSummary).toolName,\n ),\n results: results\n .filter((r) => (r as ToolExecutionSummary).success)\n .map((r) => {\n const result = r as ToolExecutionSummary;\n\n // Extract the actual output value - handle case where output might be a ToolResult object\n let actualOutput = result.output;\n if (isToolSuccessResult(actualOutput)) {\n // Extract inner output when a full ToolResult is stored\n actualOutput = actualOutput.output;\n }\n\n return {\n tool: result.toolName,\n // Serialize result properly - use JSON for objects, String for primitives\n result:\n typeof actualOutput === \"object\"\n ? JSON.stringify(actualOutput)\n : String(actualOutput),\n };\n }),\n };\n }),\n total_iterations: context.iteration,\n };\n\n const instructions = `Generate the final result based on the execution history.\nFollow any instructions provided for formatting and style.`;\n\n try {\n // Call Opper to generate final result\n const callOptions: {\n name: string;\n instructions: string;\n input: typeof finalContext;\n model: string | readonly string[];\n parentSpanId?: string;\n outputSchema?: z.ZodType<TOutput>;\n } = {\n name: \"generate_final_result\",\n instructions,\n input: finalContext,\n model: this.model,\n };\n\n if (context.parentSpanId) {\n callOptions.parentSpanId = context.parentSpanId;\n }\n\n if (this.outputSchema) {\n callOptions.outputSchema = this.outputSchema;\n }\n\n const response = await this.opperClient.call<\n typeof finalContext,\n TOutput\n >(callOptions);\n\n // Update usage\n context.updateUsage({\n requests: 1,\n inputTokens: response.usage.inputTokens,\n outputTokens: response.usage.outputTokens,\n totalTokens: response.usage.totalTokens,\n cost: response.usage.cost,\n });\n\n // Parse and return result\n if (this.outputSchema) {\n // With output schema, Opper returns jsonPayload\n const parsed = this.outputSchema.parse(response.jsonPayload) as TOutput;\n this.log(\"Final result generated (schema-validated)\");\n return parsed;\n }\n\n // Without output schema, Opper returns message\n this.log(\"Final result generated\");\n return response.message as TOutput;\n } catch (error) {\n this.logger.error(\"Failed to generate final result\", error);\n throw new Error(\n `Failed to generate final result: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n /**\n * Log helper\n */\n private log(message: string, data?: Record<string, unknown>): void {\n if (this.verbose) {\n this.logger.info(`[${this.name}] ${message}`, data);\n }\n }\n}\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { StreamableHTTPClientTransportOptions } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport type { Implementation } from \"@modelcontextprotocol/sdk/types.js\";\nimport type { IOType } from \"node:child_process\";\nimport type { Stream } from \"node:stream\";\n\nimport { MCPServerConfig } from \"./config\";\n\nexport interface MCPTool {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n outputSchema?: Record<string, unknown>;\n}\n\nexport interface MCPClientOptions {\n clientInfo?: Implementation;\n}\n\nconst DEFAULT_CLIENT_INFO: Implementation = {\n name: \"opper-agent-ts-mcp-client\",\n version: \"0.0.0\",\n};\n\nexport class MCPClient {\n private readonly config: MCPServerConfig;\n private readonly client: Client;\n private transport:\n | StdioClientTransport\n | SSEClientTransport\n | StreamableHTTPClientTransport\n | null;\n private connected: boolean;\n private toolCache: MCPTool[] | null;\n\n constructor(config: MCPServerConfig, options: MCPClientOptions = {}) {\n this.config = config;\n this.client = new Client(options.clientInfo ?? DEFAULT_CLIENT_INFO, {\n enforceStrictCapabilities: false,\n });\n this.transport = null;\n this.connected = false;\n this.toolCache = null;\n }\n\n static fromConfig(\n config: MCPServerConfig,\n options?: MCPClientOptions,\n ): MCPClient {\n return new MCPClient(config, options);\n }\n\n async connect(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n const transport = this.createTransport();\n this.transport = transport;\n\n try {\n await this.client.connect(transport as Transport);\n this.connected = true;\n } catch (error) {\n await transport.close().catch(() => {});\n this.transport = null;\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n if (!this.connected) {\n return;\n }\n\n await this.client.close().catch(() => {});\n await this.transport?.close().catch(() => {});\n this.transport = null;\n this.connected = false;\n this.toolCache = null;\n }\n\n async listTools(): Promise<MCPTool[]> {\n const session = this.ensureConnected();\n\n if (this.toolCache) {\n return this.toolCache;\n }\n\n const response = await session.listTools({});\n const tools =\n response.tools?.map((tool) => {\n const parameters = (tool.inputSchema ?? {}) as Record<string, unknown>;\n const outputSchema = tool[\"outputSchema\"] as\n | Record<string, unknown>\n | undefined;\n\n const normalized: MCPTool = {\n name: tool.name,\n description: tool.description ?? \"\",\n parameters,\n };\n\n if (outputSchema) {\n normalized.outputSchema = outputSchema;\n }\n\n return normalized;\n }) ?? [];\n\n this.toolCache = tools;\n return tools;\n }\n\n async callTool(\n toolName: string,\n args: Record<string, unknown> | undefined,\n ): Promise<unknown> {\n const session = this.ensureConnected();\n\n const response = await session.callTool({\n name: toolName,\n arguments: args,\n });\n\n return response;\n }\n\n get isConnected(): boolean {\n return this.connected;\n }\n\n private ensureConnected(): Client {\n if (!this.connected) {\n throw new Error(`MCP server \"${this.config.name}\" is not connected`);\n }\n\n return this.client;\n }\n\n private createTransport():\n | StdioClientTransport\n | SSEClientTransport\n | StreamableHTTPClientTransport {\n if (this.config.transport === \"stdio\") {\n const stdioOptions: {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n stderr?: IOType | Stream | number;\n } = {\n command: this.config.command,\n };\n\n if (this.config.args.length > 0) {\n stdioOptions.args = this.config.args;\n }\n\n if (Object.keys(this.config.env).length > 0) {\n stdioOptions.env = this.config.env;\n }\n\n if (this.config.cwd) {\n stdioOptions.cwd = this.config.cwd;\n }\n\n if (this.config.stderr) {\n stdioOptions.stderr = this.config.stderr as IOType;\n }\n\n return new StdioClientTransport(stdioOptions);\n }\n\n if (this.config.transport === \"streamable-http\") {\n const options: StreamableHTTPClientTransportOptions = {};\n const headers = this.config.headers;\n\n if (headers && Object.keys(headers).length > 0) {\n options.requestInit = { headers } satisfies RequestInit;\n }\n\n if (this.config.sessionId) {\n options.sessionId = this.config.sessionId;\n }\n\n return new StreamableHTTPClientTransport(\n new URL(this.config.url),\n options,\n );\n }\n\n const headers = this.config.headers ?? {};\n const headerEntries = Object.entries(headers);\n\n type EventSourceInitLike = {\n fetch?: (url: string | URL, init?: RequestInit) => Promise<Response>;\n };\n\n const options: {\n eventSourceInit?: EventSourceInitLike;\n requestInit?: RequestInit;\n } = {};\n\n if (headerEntries.length > 0) {\n options.eventSourceInit = {\n fetch: async (url: string | URL, init?: RequestInit) => {\n const mergedHeaders = new Headers(init?.headers ?? {});\n for (const [key, value] of headerEntries) {\n mergedHeaders.set(key, value);\n }\n if (!mergedHeaders.has(\"Accept\")) {\n mergedHeaders.set(\"Accept\", \"text/event-stream\");\n }\n return fetch(url, {\n ...init,\n headers: mergedHeaders,\n });\n },\n } satisfies EventSourceInitLike;\n }\n\n if (headerEntries.length > 0 || this.config.method === \"POST\") {\n options.requestInit = {\n ...(this.config.method ? { method: this.config.method } : {}),\n ...(headerEntries.length > 0 ? { headers } : {}),\n } satisfies RequestInit;\n }\n\n return new SSEClientTransport(new URL(this.config.url), options);\n }\n}\n","import { z } from \"zod\";\n\nconst MCPTransportSchema = z.enum([\"stdio\", \"http-sse\", \"streamable-http\"]);\n\nconst MCPBaseConfigSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n transport: MCPTransportSchema,\n timeout: z.number().positive(\"timeout must be positive\").default(30),\n metadata: z.record(z.string(), z.unknown()).default({}),\n});\n\nconst MCPStdIoConfigSchema = MCPBaseConfigSchema.extend({\n transport: z.literal(\"stdio\"),\n command: z.string().min(1, \"command is required for stdio transport\"),\n args: z.array(z.string()).default([]),\n env: z.record(z.string(), z.string()).default({}),\n cwd: z.string().optional(),\n stderr: z\n .union([z.literal(\"inherit\"), z.literal(\"pipe\"), z.literal(\"ignore\")])\n .optional(),\n});\n\nconst MCPHttpSseConfigSchema = MCPBaseConfigSchema.extend({\n transport: z.literal(\"http-sse\"),\n url: z.string().url(\"url must be a valid HTTP(S) URL\"),\n headers: z.record(z.string(), z.string()).default({}),\n method: z.enum([\"GET\", \"POST\"]).default(\"GET\"),\n});\n\nconst MCPStreamableHttpConfigSchema = MCPBaseConfigSchema.extend({\n transport: z.literal(\"streamable-http\"),\n url: z.string().url(\"url must be a valid HTTP(S) URL\"),\n headers: z.record(z.string(), z.string()).default({}),\n sessionId: z.string().optional(),\n});\n\nconst MCPConfigVariants = z.discriminatedUnion(\"transport\", [\n MCPStdIoConfigSchema,\n MCPHttpSseConfigSchema,\n MCPStreamableHttpConfigSchema,\n]);\n\nexport type MCPServerConfig = z.output<typeof MCPConfigVariants>;\nexport type MCPServerConfigInput = z.input<typeof MCPConfigVariants>;\n\nexport const MCPServerConfigSchema = MCPConfigVariants.superRefine(\n (value, ctx) => {\n if (\n value.transport === \"http-sse\" ||\n value.transport === \"streamable-http\"\n ) {\n if (!value.url) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `url is required for ${value.transport} transport`,\n path: [\"url\"],\n });\n } else if (\n !value.url.startsWith(\"http://\") &&\n !value.url.startsWith(\"https://\")\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"url must start with http:// or https://\",\n path: [\"url\"],\n });\n }\n }\n },\n);\n\nexport const MCPconfig = (config: MCPServerConfigInput): MCPServerConfig =>\n MCPServerConfigSchema.parse(config);\n\nexport const createMCPServerConfig = MCPconfig;\n","import { MCPClient, type MCPClientOptions, type MCPTool } from \"./client\";\nimport {\n MCPServerConfigSchema,\n type MCPServerConfig,\n type MCPServerConfigInput,\n} from \"./config\";\nimport type { BaseAgent } from \"../base/agent\";\nimport {\n ToolResultFactory,\n type Tool,\n type ToolExecutionContext,\n type ToolProvider,\n} from \"../base/tool\";\n\nexport interface MCPToolProviderOptions {\n namePrefix?: string;\n clientOptions?: MCPClientOptions;\n clientFactory?: (\n config: MCPServerConfig,\n options?: MCPClientOptions,\n ) => MCPClient;\n logger?: {\n debug?: (message: string, context?: Record<string, unknown>) => void;\n info?: (message: string, context?: Record<string, unknown>) => void;\n warn?: (message: string, context?: Record<string, unknown>) => void;\n error?: (message: string, context?: Record<string, unknown>) => void;\n };\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\ntype ProviderLogger = {\n debug?: (message: string, context?: Record<string, unknown>) => void;\n info?: (message: string, context?: Record<string, unknown>) => void;\n warn?: (message: string, context?: Record<string, unknown>) => void;\n error?: (message: string, context?: Record<string, unknown>) => void;\n};\n\nexport class MCPToolProvider implements ToolProvider {\n private readonly configs: ReadonlyArray<MCPServerConfig>;\n private readonly namePrefix: string | undefined;\n private readonly clientOptions: MCPClientOptions | undefined;\n private readonly clientFactory: (\n config: MCPServerConfig,\n options?: MCPClientOptions,\n ) => MCPClient;\n private readonly logger: ProviderLogger;\n private readonly clients: Map<string, MCPClient>;\n\n constructor(\n configs: ReadonlyArray<MCPServerConfig>,\n options: MCPToolProviderOptions = {},\n ) {\n if (configs.length === 0) {\n throw new Error(\n \"MCPToolProvider requires at least one server configuration\",\n );\n }\n\n this.configs = configs;\n this.namePrefix = options.namePrefix ?? undefined;\n this.clientOptions = options.clientOptions ?? undefined;\n this.clientFactory =\n options.clientFactory ??\n ((config, factoryOptions) =>\n MCPClient.fromConfig(config, factoryOptions));\n this.logger = options.logger ?? {\n warn: (message: string, context?: Record<string, unknown>) =>\n console.warn(`[MCPToolProvider] ${message}`, context),\n error: (message: string, context?: Record<string, unknown>) =>\n console.error(`[MCPToolProvider] ${message}`, context),\n debug: () => {},\n };\n this.clients = new Map();\n }\n\n async setup(\n agent: BaseAgent<unknown, unknown>,\n ): Promise<Array<Tool<unknown, unknown>>> {\n void agent;\n const tools: Array<Tool<unknown, unknown>> = [];\n\n for (const config of this.configs) {\n let client: MCPClient | null = null;\n try {\n client = this.clientFactory(config, this.clientOptions);\n await client.connect();\n this.clients.set(config.name, client);\n\n const mcpTools = await client.listTools();\n for (const mcpTool of mcpTools) {\n tools.push(this.wrapTool(config, client, mcpTool));\n }\n\n this.logger?.debug?.(\"Registered MCP server tools\", {\n server: config.name,\n toolCount: mcpTools.length,\n });\n } catch (error) {\n this.logger?.warn?.(\"Failed to initialize MCP server\", {\n server: config.name,\n error: error instanceof Error ? error.message : String(error),\n });\n\n if (client) {\n await client.disconnect().catch(() => {});\n this.clients.delete(config.name);\n }\n }\n }\n\n return tools;\n }\n\n async teardown(): Promise<void> {\n const disconnects = Array.from(this.clients.entries()).map(\n async ([serverName, client]) => {\n try {\n await client.disconnect();\n this.logger?.debug?.(\"Disconnected MCP server\", {\n server: serverName,\n });\n } catch (error) {\n this.logger?.warn?.(\"Error disconnecting MCP server\", {\n server: serverName,\n error: error instanceof Error ? error.message : String(error),\n });\n } finally {\n this.clients.delete(serverName);\n }\n },\n );\n\n await Promise.allSettled(disconnects);\n }\n\n private wrapTool(\n config: MCPServerConfig,\n client: MCPClient,\n mcpTool: MCPTool,\n ): Tool<unknown, unknown> {\n const prefix = this.namePrefix ?? config.name;\n const toolName = `${prefix}:${mcpTool.name}`;\n\n return {\n name: toolName,\n description: mcpTool.description,\n metadata: {\n provider: \"mcp\",\n server: config.name,\n originalToolName: mcpTool.name,\n parameters: mcpTool.parameters,\n outputSchema: mcpTool.outputSchema,\n },\n execute: async (input: unknown, context: ToolExecutionContext) => {\n void context;\n const startedAt = Date.now();\n const args = isRecord(input)\n ? input\n : input === undefined\n ? {}\n : { value: input };\n\n try {\n const result = await client.callTool(mcpTool.name, args);\n return ToolResultFactory.success(toolName, result, {\n metadata: {\n provider: \"mcp\",\n server: config.name,\n tool: mcpTool.name,\n },\n startedAt,\n finishedAt: Date.now(),\n });\n } catch (error) {\n const failure =\n error instanceof Error ? error : new Error(String(error));\n return ToolResultFactory.failure(toolName, failure, {\n metadata: {\n provider: \"mcp\",\n server: config.name,\n tool: mcpTool.name,\n },\n startedAt,\n finishedAt: Date.now(),\n });\n }\n },\n };\n }\n}\n\nexport const mcp = (\n ...configs: ReadonlyArray<MCPServerConfig | MCPServerConfigInput>\n): MCPToolProvider => {\n if (configs.length === 0) {\n throw new Error(\"At least one MCP server configuration is required\");\n }\n\n const parsedConfigs = configs.map((config) =>\n MCPServerConfigSchema.parse(config),\n );\n\n return new MCPToolProvider(parsedConfigs);\n};\n","import type { ZodType } from \"zod\";\n\nimport type {\n Tool,\n ToolDefinition,\n ToolExecutionContext,\n ToolResult,\n} from \"../base/tool\";\nimport { ToolResultFactory } from \"../base/tool\";\n\n/**\n * Safe access to Reflect metadata API (from reflect-metadata package).\n * Returns undefined if reflect-metadata is not installed.\n */\ntype ReflectWithMetadata = typeof Reflect & {\n defineMetadata?: (\n metadataKey: string,\n metadataValue: unknown,\n target: object,\n propertyKey: string | symbol,\n ) => void;\n getMetadata?: (\n metadataKey: string,\n target: object,\n propertyKey: string | symbol,\n ) => unknown;\n};\n\nconst reflectWithMetadata = Reflect as ReflectWithMetadata;\n\nconst ReflectMetadata = {\n define: (\n metadataKey: string,\n metadataValue: unknown,\n target: object,\n propertyKey: string | symbol,\n ): void => {\n if (typeof reflectWithMetadata.defineMetadata === \"function\") {\n reflectWithMetadata.defineMetadata(\n metadataKey,\n metadataValue,\n target,\n propertyKey,\n );\n }\n },\n\n get: (\n metadataKey: string,\n target: object,\n propertyKey: string | symbol,\n ): unknown => {\n if (typeof reflectWithMetadata.getMetadata === \"function\") {\n return reflectWithMetadata.getMetadata(metadataKey, target, propertyKey);\n }\n return undefined;\n },\n};\n\nconst TOOL_METADATA_KEY = \"opper:tool\";\n\nconst toolMetadataStore = new WeakMap<\n object,\n Map<string | symbol, ToolDefinition<unknown, unknown>>\n>();\n\nfunction setToolMetadata<TInput, TOutput>(\n target: object,\n propertyKey: string | symbol,\n metadata: ToolDefinition<TInput, TOutput>,\n): void {\n ReflectMetadata.define(TOOL_METADATA_KEY, metadata, target, propertyKey);\n\n let metadataForTarget = toolMetadataStore.get(target);\n if (!metadataForTarget) {\n metadataForTarget = new Map();\n toolMetadataStore.set(target, metadataForTarget);\n }\n\n metadataForTarget.set(\n propertyKey,\n metadata as ToolDefinition<unknown, unknown>,\n );\n}\n\nfunction getToolMetadata<TInput, TOutput>(\n target: object,\n propertyKey: string | symbol,\n): ToolDefinition<TInput, TOutput> | undefined {\n const metadata = ReflectMetadata.get(\n TOOL_METADATA_KEY,\n target,\n propertyKey,\n ) as ToolDefinition<TInput, TOutput> | undefined;\n\n if (metadata) {\n return metadata;\n }\n\n const metadataForTarget = toolMetadataStore.get(target);\n return metadataForTarget?.get(propertyKey) as\n | ToolDefinition<TInput, TOutput>\n | undefined;\n}\n\n/**\n * Options for creating a tool from a function\n */\nexport interface ToolOptions<TInput> {\n /**\n * Tool name (defaults to function name)\n */\n name?: string;\n\n /**\n * Human-readable description\n */\n description?: string;\n\n /**\n * Input validation schema\n */\n schema?: ZodType<TInput>;\n\n /**\n * Execution timeout in milliseconds\n */\n timeoutMs?: number;\n\n /**\n * Additional metadata\n */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Function that can be converted to a tool\n */\nexport type ToolFunction<TInput, TOutput> = (\n input: TInput,\n context: ToolExecutionContext,\n) => TOutput | Promise<TOutput>;\n\ninterface CallTargetRef {\n current?: unknown;\n}\n\ntype ToolMethodDecorator<TInput, TOutput> = {\n <TMethod extends ToolFunction<TInput, TOutput>>(\n value: TMethod,\n context: ClassMethodDecoratorContext<unknown, TMethod>,\n ): TMethod | void;\n (\n target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor | undefined,\n ): PropertyDescriptor | void;\n};\n\nfunction isStage3DecoratorContext(\n value: unknown,\n): value is ClassMethodDecoratorContext<\n unknown,\n (...args: unknown[]) => unknown\n> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"kind\" in (value as Record<string, unknown>)\n );\n}\n\nfunction createExecuteWrapper<TInput, TOutput>(\n toolName: string,\n method: ToolFunction<TInput, TOutput>,\n options: ToolOptions<TInput>,\n callTargetRef: CallTargetRef,\n): (\n input: TInput,\n context: ToolExecutionContext,\n) => Promise<ToolResult<TOutput>> {\n return async (\n input: TInput,\n context: ToolExecutionContext,\n ): Promise<ToolResult<TOutput>> => {\n const startedAt = Date.now();\n\n try {\n if (options.schema) {\n options.schema.parse(input);\n }\n\n const invocationTarget = callTargetRef.current;\n const result = await Promise.resolve(\n method.call(invocationTarget, input, context),\n );\n\n return ToolResultFactory.success(toolName, result, {\n startedAt,\n finishedAt: Date.now(),\n ...(options.metadata && { metadata: options.metadata }),\n });\n } catch (error) {\n return ToolResultFactory.failure(\n toolName,\n error instanceof Error ? error : new Error(String(error)),\n {\n startedAt,\n finishedAt: Date.now(),\n ...(options.metadata && { metadata: options.metadata }),\n },\n );\n }\n };\n}\n\nfunction normalizePropertyKey(propertyKey: string | symbol): string {\n return typeof propertyKey === \"symbol\"\n ? (propertyKey.description ?? propertyKey.toString())\n : propertyKey;\n}\n\nfunction createToolDefinition<TInput, TOutput>(\n options: ToolOptions<TInput>,\n methodName: string,\n propertyKey: string | symbol,\n method: ToolFunction<TInput, TOutput>,\n callTargetRef: CallTargetRef,\n): ToolDefinition<TInput, TOutput> {\n const name = options.name ?? methodName;\n const description =\n options.description ??\n extractJSDocDescription(method) ??\n `Tool: ${normalizePropertyKey(propertyKey)}`;\n\n return {\n name,\n description,\n ...(options.schema && { schema: options.schema }),\n ...(options.timeoutMs !== undefined && { timeoutMs: options.timeoutMs }),\n metadata: {\n ...options.metadata,\n isDecorated: true,\n propertyKey: normalizePropertyKey(propertyKey),\n },\n execute: createExecuteWrapper(name, method, options, callTargetRef),\n };\n}\n\n/**\n * Convert a function into a Tool.\n * Handles both sync and async functions, wraps execution in ToolResult.\n *\n * @param fn - Function to wrap\n * @param options - Tool configuration\n * @returns Tool definition\n *\n * @example\n * const addTool = createFunctionTool(\n * (input: { a: number; b: number }) => input.a + input.b,\n * {\n * name: \"add\",\n * description: \"Add two numbers\",\n * schema: z.object({ a: z.number(), b: z.number() })\n * }\n * );\n */\nexport function createFunctionTool<TInput, TOutput>(\n fn: ToolFunction<TInput, TOutput>,\n options: ToolOptions<TInput> = {},\n): Tool<TInput, TOutput> {\n const name = options.name ?? (fn.name || \"anonymous_tool\");\n\n // Extract description from function if not provided\n const description =\n options.description ?? extractJSDocDescription(fn) ?? `Tool: ${name}`;\n\n const tool: Tool<TInput, TOutput> = {\n name,\n description,\n ...(options.schema && { schema: options.schema }),\n ...(options.timeoutMs !== undefined && { timeoutMs: options.timeoutMs }),\n metadata: {\n ...options.metadata,\n isFunction: true,\n functionName: fn.name,\n },\n execute: async (\n input: TInput,\n context: ToolExecutionContext,\n ): Promise<ToolResult<TOutput>> => {\n const startedAt = Date.now();\n\n try {\n // Validate input if schema provided\n if (options.schema) {\n options.schema.parse(input);\n }\n\n // Handle timeout if specified\n let result: TOutput;\n if (options.timeoutMs !== undefined) {\n result = await executeWithTimeout(\n fn(input, context),\n options.timeoutMs,\n name,\n );\n } else {\n result = await Promise.resolve(fn(input, context));\n }\n\n return ToolResultFactory.success(name, result, {\n startedAt,\n finishedAt: Date.now(),\n ...(options.metadata && { metadata: options.metadata }),\n });\n } catch (error) {\n return ToolResultFactory.failure(\n name,\n error instanceof Error ? error : new Error(String(error)),\n {\n startedAt,\n finishedAt: Date.now(),\n ...(options.metadata && { metadata: options.metadata }),\n },\n );\n }\n },\n };\n\n return tool;\n}\n\n/**\n * Decorator factory for creating tools from methods.\n * Can be used with or without arguments.\n *\n * @param options - Tool configuration\n * @returns Method decorator\n *\n * @example\n * class MyTools {\n * @tool({ description: \"Add numbers\", schema: AddSchema })\n * add(input: { a: number; b: number }): number {\n * return input.a + input.b;\n * }\n * }\n */\nexport function tool<TInput = unknown, TOutput = unknown>(\n options?: ToolOptions<TInput>,\n): ToolMethodDecorator<TInput, TOutput> {\n const decoratorOptions: ToolOptions<TInput> = options ?? {};\n\n function decorator<TMethod extends ToolFunction<TInput, TOutput>>(\n value: TMethod,\n context: ClassMethodDecoratorContext<unknown, TMethod>,\n ): void;\n function decorator(\n target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor | undefined,\n ): PropertyDescriptor | void;\n function decorator(\n ...decoratorArgs:\n | [\n ToolFunction<TInput, TOutput>,\n ClassMethodDecoratorContext<unknown, ToolFunction<TInput, TOutput>>,\n ]\n | [object, string | symbol, PropertyDescriptor | undefined]\n ): PropertyDescriptor | void {\n if (\n decoratorArgs.length === 2 &&\n isStage3DecoratorContext(decoratorArgs[1])\n ) {\n const [method, context] = decoratorArgs;\n\n if (context.kind !== \"method\") {\n throw new Error(\"@tool can only be applied to methods.\");\n }\n\n if (context.name === undefined) {\n throw new Error(\"@tool requires a named method to attach metadata.\");\n }\n\n const propertyKey = context.name;\n const inferredName =\n typeof propertyKey === \"string\" && propertyKey.length > 0\n ? propertyKey\n : method.name || \"anonymous_tool\";\n\n const callTargetRef: CallTargetRef = {};\n const toolMetadata = createToolDefinition(\n decoratorOptions,\n inferredName,\n propertyKey,\n method,\n callTargetRef,\n );\n\n const registerMetadata = (target: object) => {\n callTargetRef.current = target;\n setToolMetadata(target, propertyKey, toolMetadata);\n };\n\n if (typeof context.addInitializer === \"function\") {\n context.addInitializer(function (this: unknown) {\n const target = context.static\n ? (this as object)\n : Object.getPrototypeOf(this);\n if (target) {\n registerMetadata(target);\n }\n });\n }\n\n return;\n }\n\n const [target, propertyKey, descriptor] = decoratorArgs as [\n object,\n string | symbol,\n PropertyDescriptor | undefined,\n ];\n\n const resolvedDescriptor =\n descriptor ??\n Object.getOwnPropertyDescriptor(target, propertyKey) ??\n (() => {\n const value = (target as Record<string | symbol, unknown>)[propertyKey];\n if (typeof value === \"function\") {\n return { value } as PropertyDescriptor;\n }\n return undefined;\n })();\n\n if (!resolvedDescriptor || typeof resolvedDescriptor.value !== \"function\") {\n throw new Error(\n `@tool can only be applied to methods, not ${typeof resolvedDescriptor?.value}`,\n );\n }\n\n const originalMethod = resolvedDescriptor.value as ToolFunction<\n TInput,\n TOutput\n >;\n const callTargetRef: CallTargetRef = { current: target };\n const toolMetadata = createToolDefinition(\n decoratorOptions,\n normalizePropertyKey(propertyKey),\n propertyKey,\n originalMethod,\n callTargetRef,\n );\n\n setToolMetadata(target, propertyKey, toolMetadata);\n\n return resolvedDescriptor;\n }\n\n return decorator;\n}\n\n/**\n * Extract all tools defined via @tool decorator from a class instance\n *\n * @param instance - Class instance with @tool decorated methods\n * @returns Array of Tool definitions\n *\n * @example\n * class MyTools {\n * @tool() greet(input: { name: string }) { return `Hello ${input.name}`; }\n * }\n *\n * const tools = extractTools(new MyTools());\n */\nexport function extractTools(instance: object): Array<Tool<unknown, unknown>> {\n const tools: Array<Tool<unknown, unknown>> = [];\n const prototype = Object.getPrototypeOf(instance) as object;\n\n // Get all property names from the prototype\n const propertyKeys: Array<string | symbol> = [\n ...Object.getOwnPropertyNames(prototype),\n ...Object.getOwnPropertySymbols(prototype),\n ];\n\n for (const propertyKey of propertyKeys) {\n if (propertyKey === \"constructor\") continue;\n\n // Check if this property has tool metadata\n const toolMetadata = getToolMetadata(prototype, propertyKey) as\n | ToolDefinition<unknown, unknown>\n | undefined;\n\n if (toolMetadata) {\n // Get the actual method from the instance and create a properly bound tool\n const instanceMethod = (instance as Record<string | symbol, unknown>)[\n propertyKey\n ];\n\n if (typeof instanceMethod !== \"function\") {\n continue;\n }\n\n const tool: Tool<unknown, unknown> = {\n ...toolMetadata,\n execute: async (input: unknown, context: ToolExecutionContext) => {\n // Re-execute the tool logic but with the instance method properly bound\n const startedAt = Date.now();\n\n try {\n // Validate if schema exists\n if (toolMetadata.schema) {\n toolMetadata.schema.parse(input);\n }\n\n const result = await Promise.resolve(\n instanceMethod.call(instance, input, context),\n );\n\n return ToolResultFactory.success(toolMetadata.name, result, {\n startedAt,\n finishedAt: Date.now(),\n ...(toolMetadata.metadata && { metadata: toolMetadata.metadata }),\n });\n } catch (error) {\n return ToolResultFactory.failure(\n toolMetadata.name,\n error instanceof Error ? error : new Error(String(error)),\n {\n startedAt,\n finishedAt: Date.now(),\n ...(toolMetadata.metadata && {\n metadata: toolMetadata.metadata,\n }),\n },\n );\n }\n },\n };\n\n tools.push(tool);\n }\n }\n\n return tools;\n}\n\n/**\n * Execute a promise with a timeout\n *\n * @param promise - Promise to execute\n * @param timeoutMs - Timeout in milliseconds\n * @param toolName - Tool name for error messages\n * @returns Result or throws timeout error\n */\nasync function executeWithTimeout<T>(\n promise: T | Promise<T>,\n timeoutMs: number,\n toolName: string,\n): Promise<T> {\n return Promise.race([\n Promise.resolve(promise),\n new Promise<T>((_, reject) => {\n setTimeout(() => {\n reject(new Error(`Tool \"${toolName}\" timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n }),\n ]);\n}\n\n/**\n * Attempt to extract description from JSDoc comment.\n * Note: This is a best-effort attempt and may not work in all cases.\n *\n * @param fn - Function to extract description from\n * @returns Description or undefined\n */\nfunction extractJSDocDescription(fn: {\n toString(): string;\n}): string | undefined {\n const source = fn.toString();\n const match = /\\/\\*\\*\\s*\\n\\s*\\*\\s*(.+?)\\s*\\n/.exec(source);\n return match?.[1];\n}\n","import type { AgentContext } from \"../base/context\";\nimport type { Tool, ToolExecutionContext, ToolResult } from \"../base/tool\";\nimport { ToolResultFactory } from \"../base/tool\";\n\n/**\n * Options for tool execution\n */\nexport interface ToolRunOptions {\n /**\n * Abort signal for cancellation\n */\n signal?: AbortSignal;\n\n /**\n * Additional metadata to pass to the tool\n */\n metadata?: Record<string, unknown>;\n\n /**\n * Override timeout for this execution\n */\n timeoutMs?: number;\n}\n\n/**\n * Utility class for executing tools with validation and error handling\n */\nexport class ToolRunner {\n /**\n * Execute a tool with the given input and context\n *\n * @param tool - Tool to execute\n * @param input - Input data\n * @param context - Agent execution context\n * @param options - Execution options\n * @returns Tool execution result\n */\n public static async execute<TInput, TOutput>(\n tool: Tool<TInput, TOutput>,\n input: TInput,\n context: AgentContext,\n options: ToolRunOptions = {},\n ): Promise<ToolResult<TOutput>> {\n // Check for cancellation\n if (options.signal?.aborted) {\n return ToolResultFactory.failure(\n tool.name,\n new Error(`Tool \"${tool.name}\" execution was aborted`),\n );\n }\n\n // Validate input against schema if provided\n if (tool.schema) {\n const validation = tool.schema.safeParse(input);\n if (!validation.success) {\n return ToolResultFactory.failure(\n tool.name,\n new Error(\n `Invalid input for tool \"${tool.name}\": ${validation.error.message}`,\n ),\n );\n }\n }\n\n const executionContext: ToolExecutionContext = {\n agentContext: context,\n ...(options.signal && { signal: options.signal }),\n metadata: options.metadata ?? {},\n };\n\n try {\n // Determine timeout: option override > tool default > no timeout\n const timeoutMs = options.timeoutMs ?? tool.timeoutMs;\n\n let result: ToolResult<TOutput>;\n\n if (timeoutMs !== undefined) {\n // Execute with timeout\n result = await this.executeWithTimeout(\n Promise.resolve(tool.execute(input, executionContext)),\n timeoutMs,\n tool.name,\n );\n } else {\n // Execute without timeout\n result = await Promise.resolve(tool.execute(input, executionContext));\n }\n\n return result;\n } catch (error) {\n return ToolResultFactory.failure(\n tool.name,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n /**\n * Execute multiple tools in parallel\n *\n * @param executions - Array of tool execution tuples [tool, input, context, options?]\n * @returns Array of results in same order as input\n */\n public static async executeParallel<TInput, TOutput>(\n executions: Array<\n [Tool<TInput, TOutput>, TInput, AgentContext, ToolRunOptions?]\n >,\n ): Promise<Array<ToolResult<TOutput>>> {\n return Promise.all(\n executions.map(([tool, input, context, options]) =>\n this.execute(tool, input, context, options),\n ),\n );\n }\n\n /**\n * Execute multiple tools sequentially, stopping on first failure\n *\n * @param executions - Array of tool execution tuples\n * @returns Array of results up to first failure (inclusive)\n */\n public static async executeSequential<TInput, TOutput>(\n executions: Array<\n [Tool<TInput, TOutput>, TInput, AgentContext, ToolRunOptions?]\n >,\n ): Promise<Array<ToolResult<TOutput>>> {\n const results: Array<ToolResult<TOutput>> = [];\n\n for (const [tool, input, context, options] of executions) {\n const result = await this.execute(tool, input, context, options);\n results.push(result);\n\n if (!result.success) {\n break; // Stop on first failure\n }\n }\n\n return results;\n }\n\n /**\n * Execute a tool with timeout\n *\n * @param promise - Tool execution promise\n * @param timeoutMs - Timeout in milliseconds\n * @param toolName - Tool name for error messages\n * @returns Result or rejects with timeout error\n */\n private static async executeWithTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n toolName: string,\n ): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((_, reject) => {\n setTimeout(() => {\n reject(\n new Error(`Tool \"${toolName}\" timed out after ${timeoutMs}ms`),\n );\n }, timeoutMs);\n }),\n ]);\n }\n\n /**\n * Validate tool input without executing\n *\n * @param tool - Tool to validate input for\n * @param input - Input to validate\n * @returns true if valid, Error if invalid\n */\n public static validate<TInput>(\n tool: Tool<TInput, unknown>,\n input: TInput,\n ): true | Error {\n if (!tool.schema) {\n return true; // No schema means no validation needed\n }\n\n const validation = tool.schema.safeParse(input);\n if (!validation.success) {\n return new Error(\n `Invalid input for tool \"${tool.name}\": ${validation.error.message}`,\n );\n }\n\n return true;\n }\n\n /**\n * Check if a result indicates success\n *\n * @param result - Tool result to check\n * @returns true if success, false if failure\n */\n public static isSuccess<TOutput>(result: ToolResult<TOutput>): result is {\n success: true;\n toolName: string;\n output: TOutput;\n metadata: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n } {\n return result.success === true;\n }\n\n /**\n * Check if a result indicates failure\n *\n * @param result - Tool result to check\n * @returns true if failure, false if success\n */\n public static isFailure<TOutput>(result: ToolResult<TOutput>): result is {\n success: false;\n toolName: string;\n error: Error | string;\n metadata: Record<string, unknown>;\n startedAt?: number;\n finishedAt?: number;\n } {\n return result.success === false;\n }\n}\n"]}