{"version":3,"sources":["../src/agent/core/hooks.ts","../src/agent/core/agent.ts"],"names":[],"mappings":"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","file":"chunk-GHAIG4VL.mjs","sourcesContent":["/**\n * EADK Lifecycle Hooks\n *\n * Hook system for intercepting and modifying agent execution at key points.\n * Combines patterns from OpenAI Agents SDK, Google ADK, and Claude Agent SDK.\n */\n\nimport type {\n  RunHooks,\n  HookContext,\n  LLMRequest,\n  LLMResponse,\n  GuardrailResult,\n} from './types';\n\n/**\n * Merge multiple hook sets into a single composite hook set.\n * When multiple hooks exist for the same event, they run sequentially.\n * Transform hooks (onLLMStart, onLLMEnd, onToolStart, onToolEnd) chain their results.\n */\nexport function mergeHooks(...hookSets: (RunHooks | undefined)[]): RunHooks {\n  const defined = hookSets.filter(Boolean) as RunHooks[];\n  if (defined.length === 0) return {};\n  if (defined.length === 1) return defined[0];\n\n  return {\n    onAgentStart: async (ctx: HookContext) => {\n      for (const hooks of defined) {\n        if (hooks.onAgentStart) await hooks.onAgentStart(ctx);\n      }\n    },\n\n    onAgentEnd: async (ctx: HookContext) => {\n      for (const hooks of defined) {\n        if (hooks.onAgentEnd) await hooks.onAgentEnd(ctx);\n      }\n    },\n\n    onLLMStart: async (ctx: HookContext, request: LLMRequest) => {\n      let req = request;\n      for (const hooks of defined) {\n        if (hooks.onLLMStart) {\n          const result = await hooks.onLLMStart(ctx, req);\n          if (result) req = result;\n        }\n      }\n      return req;\n    },\n\n    onLLMEnd: async (ctx: HookContext, response: LLMResponse) => {\n      let res = response;\n      for (const hooks of defined) {\n        if (hooks.onLLMEnd) {\n          const result = await hooks.onLLMEnd(ctx, res);\n          if (result) res = result;\n        }\n      }\n      return res;\n    },\n\n    onToolStart: async (ctx: HookContext, name: string, args: unknown) => {\n      let currentArgs = args;\n      for (const hooks of defined) {\n        if (hooks.onToolStart) {\n          const result = await hooks.onToolStart(ctx, name, currentArgs);\n          if (result !== undefined) currentArgs = result;\n        }\n      }\n      return currentArgs;\n    },\n\n    onToolEnd: async (ctx: HookContext, name: string, result: unknown) => {\n      let currentResult = result;\n      for (const hooks of defined) {\n        if (hooks.onToolEnd) {\n          const modified = await hooks.onToolEnd(ctx, name, currentResult);\n          if (modified !== undefined) currentResult = modified;\n        }\n      }\n      return currentResult;\n    },\n\n    onHandoff: async (ctx: HookContext, from: string, to: string) => {\n      for (const hooks of defined) {\n        if (hooks.onHandoff) await hooks.onHandoff(ctx, from, to);\n      }\n    },\n\n    onGuardrailTriggered: async (\n      ctx: HookContext,\n      guardrailName: string,\n      result: GuardrailResult\n    ) => {\n      for (const hooks of defined) {\n        if (hooks.onGuardrailTriggered) {\n          await hooks.onGuardrailTriggered(ctx, guardrailName, result);\n        }\n      }\n    },\n\n    onCheckpoint: async (ctx: HookContext, state: unknown) => {\n      for (const hooks of defined) {\n        if (hooks.onCheckpoint) await hooks.onCheckpoint(ctx, state);\n      }\n    },\n  };\n}\n\n/**\n * Create a no-op hook context for testing.\n */\nexport function createNoOpHooks(): RunHooks {\n  return {};\n}\n","/**\n * EADK Agent\n *\n * Base Agent class and LLMAgent implementation.\n * Provides the autonomous reasoning loop with tool calling, guardrails,\n * handoffs, and compute-preference routing.\n */\n\nimport type {\n  EADKAgent,\n  EADKAgentConfig,\n  AgentType,\n  RunConfig,\n  RunResult,\n  RunEvent,\n  RunEventData,\n  Message,\n  ToolCall,\n  ToolCallResult,\n  TokenUsage,\n  LLMRequest,\n  LLMResponse,\n  AgentContext,\n  GuardrailResult,\n  ModelConfig,\n} from './types';\nimport {\n  createAgentContext,\n  createHookContext,\n  createGuardrailContext,\n} from './context';\nimport { Session } from './session';\nimport { mergeHooks } from './hooks';\nimport { executeTool, toolsToLLMDefinitions } from './tool';\n\n// ---------------------------------------------------------------------------\n// LLM Provider Interface (pluggable backend)\n// ---------------------------------------------------------------------------\n\nexport interface LLMProvider {\n  chat(request: LLMRequest): Promise<LLMResponse>;\n  stream?(request: LLMRequest): AsyncIterable<LLMResponse>;\n}\n\n/**\n * Default LLM provider registry. Agents look up providers by name.\n */\nconst providerRegistry = new Map<string, LLMProvider>();\n\nexport function registerProvider(name: string, provider: LLMProvider): void {\n  providerRegistry.set(name, provider);\n}\n\nexport function getProvider(name: string): LLMProvider | undefined {\n  return providerRegistry.get(name);\n}\n\n// ---------------------------------------------------------------------------\n// Base Agent\n// ---------------------------------------------------------------------------\n\nexport abstract class BaseAgent implements EADKAgent {\n  readonly config: EADKAgentConfig;\n  abstract readonly type: AgentType;\n\n  constructor(config: EADKAgentConfig) {\n    this.config = config;\n  }\n\n  abstract run(input: string, config?: RunConfig): Promise<RunResult>;\n\n  async *stream(input: string, config?: RunConfig): AsyncIterable<RunEvent> {\n    // Default: wrap run() as a single event stream\n    const startTime = Date.now();\n    yield {\n      type: 'agent_start',\n      agentName: this.config.name,\n      timestamp: startTime,\n      data: { type: 'agent_start', turn: 0 },\n    };\n\n    const result = await this.run(input, config);\n\n    yield {\n      type: 'agent_end',\n      agentName: this.config.name,\n      timestamp: Date.now(),\n      data: { type: 'agent_end', result },\n    };\n  }\n\n  /**\n   * Resolve model configuration.\n   */\n  protected resolveModel(override?: string | ModelConfig): ModelConfig {\n    const base = this.config.model;\n    if (override) {\n      return typeof override === 'string' ? { modelId: override } : override;\n    }\n    if (base) {\n      return typeof base === 'string' ? { modelId: base } : base;\n    }\n    return { modelId: 'default' };\n  }\n\n  /**\n   * Resolve instructions (static or dynamic).\n   */\n  protected async resolveInstructions(ctx: AgentContext): Promise<string> {\n    if (typeof this.config.instructions === 'function') {\n      return this.config.instructions(ctx);\n    }\n    return this.config.instructions;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// LLM Agent — Autonomous Reasoning Loop\n// ---------------------------------------------------------------------------\n\nexport class LLMAgent extends BaseAgent {\n  readonly type: AgentType = 'llm';\n\n  constructor(config: EADKAgentConfig) {\n    super(config);\n  }\n\n  async run(input: string, runConfig?: RunConfig): Promise<RunResult> {\n    const startTime = Date.now();\n    const session = runConfig?.session\n      ? new Session(runConfig.session)\n      : new Session();\n\n    const ctx = createAgentContext({\n      agentName: this.config.name,\n      session,\n      computePreference:\n        runConfig?.computePreference ?? this.config.computePreference ?? 'auto',\n      abortSignal: runConfig?.abortSignal,\n    });\n\n    const hooks = mergeHooks(\n      this.config.callbacks\n        ? callbacksToHooks(this.config.callbacks)\n        : undefined,\n      runConfig?.hooks\n    );\n\n    const maxTurns = runConfig?.maxTurns ?? this.config.maxTurns ?? 10;\n    const maxSteps = runConfig?.maxSteps ?? this.config.maxSteps ?? 25;\n    const modelConfig = this.resolveModel(runConfig?.model);\n\n    // Build initial messages\n    const instructions = await this.resolveInstructions(ctx);\n    const messages: Message[] = [\n      { role: 'system', content: instructions },\n      { role: 'user', content: input, timestamp: Date.now() },\n    ];\n    ctx.messages = messages;\n\n    // Run input guardrails\n    const guardrailsTriggered: string[] = [];\n    if (this.config.guardrails?.input) {\n      for (const guardrail of this.config.guardrails.input) {\n        const gCtx = createGuardrailContext(ctx, guardrail.name, 'input');\n        const result = await guardrail.validate(input, gCtx);\n\n        if (result.tripwireTriggered) {\n          guardrailsTriggered.push(guardrail.name);\n          if (hooks.onGuardrailTriggered) {\n            const hCtx = createHookContext(ctx);\n            await hooks.onGuardrailTriggered(hCtx, guardrail.name, result);\n          }\n          return createErrorResult(\n            `Guardrail '${guardrail.name}' tripwire triggered`,\n            messages,\n            startTime,\n            guardrailsTriggered\n          );\n        }\n\n        if (!result.passed) {\n          guardrailsTriggered.push(guardrail.name);\n          if (result.replacement !== undefined) {\n            // Replace input\n            messages[messages.length - 1] = {\n              role: 'user',\n              content: String(result.replacement),\n              timestamp: Date.now(),\n            };\n          }\n        }\n      }\n    }\n\n    // Notify agent start\n    if (hooks.onAgentStart) {\n      await hooks.onAgentStart(createHookContext(ctx));\n    }\n\n    // Get LLM provider\n    const provider = getProvider(modelConfig.provider ?? 'default');\n    if (!provider) {\n      return createErrorResult(\n        `No LLM provider registered for '${\n          modelConfig.provider ?? 'default'\n        }'. ` +\n          'Register a provider with registerProvider() before running agents.',\n        messages,\n        startTime,\n        guardrailsTriggered\n      );\n    }\n\n    const allToolCalls: ToolCallResult[] = [];\n    const totalUsage: TokenUsage = {\n      promptTokens: 0,\n      completionTokens: 0,\n      totalTokens: 0,\n    };\n\n    let turn = 0;\n    let stepCount = 0;\n\n    // Autonomous reasoning loop\n    while (turn < maxTurns) {\n      ctx.turn = turn;\n\n      // Check abort\n      if (ctx.abortSignal?.aborted) {\n        return createErrorResult(\n          'Agent run aborted',\n          messages,\n          startTime,\n          guardrailsTriggered\n        );\n      }\n\n      // Build LLM request\n      const tools = this.config.tools ?? [];\n      const handoffTools =\n        this.config.handoffs?.map((h) => ({\n          name: `handoff_to_${h.target.config.name}`,\n          description:\n            h.description ??\n            `Hand off to ${h.target.config.name}${\n              h.target.config.description\n                ? ': ' + h.target.config.description\n                : ''\n            }`,\n          parameters: {\n            type: 'object' as const,\n            properties: {\n              reason: {\n                type: 'string',\n                description: 'Reason for the handoff',\n              },\n            },\n            required: ['reason'],\n          },\n        })) ?? [];\n\n      const toolDefs = [...toolsToLLMDefinitions(tools), ...handoffTools];\n\n      let llmRequest: LLMRequest = {\n        model: modelConfig.modelId,\n        messages,\n        tools: toolDefs.length > 0 ? toolDefs : undefined,\n        temperature: modelConfig.temperature,\n        maxTokens: modelConfig.maxTokens,\n        topP: modelConfig.topP,\n        topK: modelConfig.topK,\n        stopSequences: modelConfig.stopSequences,\n        responseFormat: this.config.outputSchema ? 'json' : 'text',\n      };\n\n      // Hook: onLLMStart\n      if (hooks.onLLMStart) {\n        const hookCtx = createHookContext(ctx);\n        const modified = await hooks.onLLMStart(hookCtx, llmRequest);\n        if (modified) llmRequest = modified;\n      }\n\n      // Call LLM\n      let llmResponse: LLMResponse;\n      try {\n        llmResponse = await provider.chat(llmRequest);\n      } catch (err) {\n        return createErrorResult(\n          `LLM call failed: ${\n            err instanceof Error ? err.message : String(err)\n          }`,\n          messages,\n          startTime,\n          guardrailsTriggered\n        );\n      }\n\n      // Hook: onLLMEnd\n      if (hooks.onLLMEnd) {\n        const hookCtx = createHookContext(ctx);\n        const modified = await hooks.onLLMEnd(hookCtx, llmResponse);\n        if (modified) llmResponse = modified;\n      }\n\n      // Accumulate usage\n      totalUsage.promptTokens += llmResponse.usage.promptTokens;\n      totalUsage.completionTokens += llmResponse.usage.completionTokens;\n      totalUsage.totalTokens += llmResponse.usage.totalTokens;\n\n      // Add assistant message\n      const assistantMessage: Message = {\n        role: 'assistant',\n        content: llmResponse.content,\n        toolCalls: llmResponse.toolCalls,\n        agentName: this.config.name,\n        timestamp: Date.now(),\n      };\n      messages.push(assistantMessage);\n\n      // If no tool calls, we're done\n      if (\n        !llmResponse.toolCalls ||\n        llmResponse.toolCalls.length === 0 ||\n        llmResponse.finishReason === 'stop'\n      ) {\n        break;\n      }\n\n      // Process tool calls\n      for (const toolCall of llmResponse.toolCalls) {\n        if (stepCount >= maxSteps) break;\n        stepCount++;\n\n        // Check for handoff\n        if (toolCall.name.startsWith('handoff_to_')) {\n          const targetName = toolCall.name.replace('handoff_to_', '');\n          const handoff = this.config.handoffs?.find(\n            (h) => h.target.config.name === targetName\n          );\n\n          if (handoff) {\n            // Hook: onHandoff\n            if (hooks.onHandoff) {\n              await hooks.onHandoff(\n                createHookContext(ctx),\n                this.config.name,\n                targetName\n              );\n            }\n\n            // Check experience\n            if (handoff.experience) {\n              const allowed = await handoff.experience(ctx);\n              if (!allowed) {\n                messages.push({\n                  role: 'tool',\n                  content: `Handoff to ${targetName} was not allowed by the experience.`,\n                  toolCallId: toolCall.id,\n                  timestamp: Date.now(),\n                });\n                continue;\n              }\n            }\n\n            // Execute handoff\n            const handoffInput = (toolCall.arguments as { reason: string })\n              .reason;\n            const handoffResult = await handoff.target.run(\n              handoffInput,\n              runConfig\n            );\n\n            // Notify agent end\n            if (hooks.onAgentEnd) {\n              await hooks.onAgentEnd(createHookContext(ctx));\n            }\n\n            return {\n              output: handoffResult.output,\n              messages: [...messages, ...handoffResult.messages],\n              toolCalls: [...allToolCalls, ...handoffResult.toolCalls],\n              usage: {\n                promptTokens:\n                  totalUsage.promptTokens + handoffResult.usage.promptTokens,\n                completionTokens:\n                  totalUsage.completionTokens +\n                  handoffResult.usage.completionTokens,\n                totalTokens:\n                  totalUsage.totalTokens + handoffResult.usage.totalTokens,\n              },\n              durationMs: Date.now() - startTime,\n              turns: turn + 1,\n              maxTurnsReached: false,\n              handoff: {\n                targetAgent: targetName,\n                result: handoffResult,\n              },\n              guardrailsTriggered,\n            };\n          }\n        }\n\n        // Regular tool call\n        const tool = tools.find((t) => t.name === toolCall.name);\n        if (!tool) {\n          messages.push({\n            role: 'tool',\n            content: `Error: Unknown tool '${toolCall.name}'`,\n            toolCallId: toolCall.id,\n            timestamp: Date.now(),\n          });\n          continue;\n        }\n\n        // Hook: onToolStart\n        let toolArgs = toolCall.arguments;\n        if (hooks.onToolStart) {\n          const modified = await hooks.onToolStart(\n            createHookContext(ctx),\n            toolCall.name,\n            toolArgs\n          );\n          if (modified !== undefined) toolArgs = modified;\n        }\n\n        // Execute tool\n        const toolResult = await executeTool(tool, toolArgs, ctx);\n\n        // Hook: onToolEnd\n        let finalResult = toolResult.result;\n        if (hooks.onToolEnd) {\n          const modified = await hooks.onToolEnd(\n            createHookContext(ctx),\n            toolCall.name,\n            finalResult\n          );\n          if (modified !== undefined) finalResult = modified;\n        }\n\n        const callResult: ToolCallResult = {\n          toolCallId: toolCall.id,\n          name: toolCall.name,\n          result: finalResult,\n          error: toolResult.error,\n          durationMs: toolResult.durationMs,\n        };\n        allToolCalls.push(callResult);\n\n        // Add tool result message\n        messages.push({\n          role: 'tool',\n          content: toolResult.error\n            ? `Error: ${toolResult.error}`\n            : JSON.stringify(finalResult),\n          toolCallId: toolCall.id,\n          timestamp: Date.now(),\n        });\n\n        // Agent callbacks\n        if (this.config.callbacks?.onToolCall) {\n          this.config.callbacks.onToolCall(\n            this.config.name,\n            toolCall.name,\n            toolArgs\n          );\n        }\n        if (this.config.callbacks?.onToolResult) {\n          this.config.callbacks.onToolResult(\n            this.config.name,\n            toolCall.name,\n            finalResult\n          );\n        }\n      }\n\n      turn++;\n    }\n\n    // Run output guardrails\n    const finalOutput = messages[messages.length - 1]?.content ?? '';\n    let output = finalOutput;\n\n    if (this.config.guardrails?.output) {\n      for (const guardrail of this.config.guardrails.output) {\n        const gCtx = createGuardrailContext(ctx, guardrail.name, 'output');\n        const result = await guardrail.validate(output, gCtx);\n\n        if (result.tripwireTriggered) {\n          guardrailsTriggered.push(guardrail.name);\n          if (hooks.onGuardrailTriggered) {\n            const hCtx = createHookContext(ctx);\n            await hooks.onGuardrailTriggered(hCtx, guardrail.name, result);\n          }\n          return createErrorResult(\n            `Output guardrail '${guardrail.name}' tripwire triggered`,\n            messages,\n            startTime,\n            guardrailsTriggered\n          );\n        }\n\n        if (!result.passed) {\n          guardrailsTriggered.push(guardrail.name);\n          if (result.replacement !== undefined) {\n            output = String(result.replacement);\n          }\n        }\n      }\n    }\n\n    // Parse structured output if schema provided\n    let structuredOutput: unknown;\n    if (this.config.outputSchema) {\n      try {\n        const parsed = JSON.parse(output);\n        const validated = this.config.outputSchema.safeParse(parsed);\n        if (validated.success) {\n          structuredOutput = validated.data;\n        }\n      } catch {\n        // Not valid JSON — leave structuredOutput undefined\n      }\n    }\n\n    // Notify agent end\n    if (hooks.onAgentEnd) {\n      await hooks.onAgentEnd(createHookContext(ctx));\n    }\n\n    return {\n      output,\n      structuredOutput,\n      messages,\n      toolCalls: allToolCalls,\n      usage: totalUsage,\n      durationMs: Date.now() - startTime,\n      turns: turn + 1,\n      maxTurnsReached: turn >= maxTurns,\n      guardrailsTriggered,\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Custom Agent (extend base class)\n// ---------------------------------------------------------------------------\n\nexport class CustomAgent extends BaseAgent {\n  readonly type: AgentType = 'custom';\n  private readonly runFn: (\n    input: string,\n    ctx: AgentContext,\n    config?: RunConfig\n  ) => Promise<RunResult>;\n\n  constructor(\n    config: EADKAgentConfig,\n    runFn: (\n      input: string,\n      ctx: AgentContext,\n      config?: RunConfig\n    ) => Promise<RunResult>\n  ) {\n    super(config);\n    this.runFn = runFn;\n  }\n\n  async run(input: string, runConfig?: RunConfig): Promise<RunResult> {\n    const session = runConfig?.session\n      ? new Session(runConfig.session)\n      : new Session();\n\n    const ctx = createAgentContext({\n      agentName: this.config.name,\n      session,\n      computePreference:\n        runConfig?.computePreference ?? this.config.computePreference ?? 'auto',\n      abortSignal: runConfig?.abortSignal,\n    });\n\n    return this.runFn(input, ctx, runConfig);\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction createErrorResult(\n  error: string,\n  messages: Message[],\n  startTime: number,\n  guardrailsTriggered: string[]\n): RunResult {\n  return {\n    output: error,\n    messages,\n    toolCalls: [],\n    usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },\n    durationMs: Date.now() - startTime,\n    turns: 0,\n    maxTurnsReached: false,\n    guardrailsTriggered,\n  };\n}\n\nfunction callbacksToHooks(\n  callbacks: NonNullable<EADKAgentConfig['callbacks']>\n): import('./types').RunHooks {\n  return {\n    onAgentStart: callbacks.onStart\n      ? (ctx) => callbacks.onStart!(ctx.agentName)\n      : undefined,\n    onAgentEnd: callbacks.onEnd\n      ? async (ctx) => {\n          // Will be called with result in the runner\n        }\n      : undefined,\n  };\n}\n"]}