diff --git a/src/agents/cli-runner.ts b/src/agents/cli-runner.ts index 04d6a1a7aa2..e73afc4c1d0 100644 --- a/src/agents/cli-runner.ts +++ b/src/agents/cli-runner.ts @@ -205,6 +205,7 @@ export async function runPreparedCliAgent( ...(output.usage ? { usage: output.usage } : {}), }, ctx: hookContext, + hookRunner, }); } return { output, assistantText, lastAssistant }; @@ -290,6 +291,7 @@ export async function runPreparedCliAgent( runAgentHarnessLlmInputHook({ event: llmInputEvent, ctx: hookContext, + hookRunner, }); try { const { output, lastAssistant } = await executeCliAttempt( @@ -303,6 +305,7 @@ export async function runPreparedCliAgent( durationMs: Date.now() - context.started, }, ctx: hookContext, + hookRunner, }); return buildCliRunResult({ output, effectiveCliSessionId }); } catch (err) { @@ -325,6 +328,7 @@ export async function runPreparedCliAgent( durationMs: Date.now() - context.started, }, ctx: hookContext, + hookRunner, }); return buildCliRunResult({ output, effectiveCliSessionId }); } catch (retryErr) { @@ -332,6 +336,7 @@ export async function runPreparedCliAgent( runAgentHarnessAgentEndHook({ event: buildFailedAgentEndEvent(retryMessage), ctx: hookContext, + hookRunner, }); return toCliRunFailure(retryErr); } @@ -339,6 +344,7 @@ export async function runPreparedCliAgent( runAgentHarnessAgentEndHook({ event: buildFailedAgentEndEvent(formatErrorMessage(err)), ctx: hookContext, + hookRunner, }); throw err; } @@ -346,6 +352,7 @@ export async function runPreparedCliAgent( runAgentHarnessAgentEndHook({ event: buildFailedAgentEndEvent(message), ctx: hookContext, + hookRunner, }); return toCliRunFailure(err); } diff --git a/src/agents/harness/lifecycle-hook-helpers.ts b/src/agents/harness/lifecycle-hook-helpers.ts index 8e5bba3303c..fd45d7b6114 100644 --- a/src/agents/harness/lifecycle-hook-helpers.ts +++ b/src/agents/harness/lifecycle-hook-helpers.ts @@ -9,11 +9,14 @@ import { buildAgentHookContext, type AgentHarnessHookContext } from "./hook-cont const log = createSubsystemLogger("agents/harness"); +type AgentHarnessHookRunner = ReturnType; + export function runAgentHarnessLlmInputHook(params: { event: PluginHookLlmInputEvent; ctx: AgentHarnessHookContext; + hookRunner?: AgentHarnessHookRunner; }): void { - const hookRunner = getGlobalHookRunner(); + const hookRunner = params.hookRunner ?? getGlobalHookRunner(); if (!hookRunner?.hasHooks("llm_input")) { return; } @@ -25,8 +28,9 @@ export function runAgentHarnessLlmInputHook(params: { export function runAgentHarnessLlmOutputHook(params: { event: PluginHookLlmOutputEvent; ctx: AgentHarnessHookContext; + hookRunner?: AgentHarnessHookRunner; }): void { - const hookRunner = getGlobalHookRunner(); + const hookRunner = params.hookRunner ?? getGlobalHookRunner(); if (!hookRunner?.hasHooks("llm_output")) { return; } @@ -38,8 +42,9 @@ export function runAgentHarnessLlmOutputHook(params: { export function runAgentHarnessAgentEndHook(params: { event: PluginHookAgentEndEvent; ctx: AgentHarnessHookContext; + hookRunner?: AgentHarnessHookRunner; }): void { - const hookRunner = getGlobalHookRunner(); + const hookRunner = params.hookRunner ?? getGlobalHookRunner(); if (!hookRunner?.hasHooks("agent_end")) { return; }