@@ -146,6 +146,7 @@ import {
146146import { countActiveToolExecutions } from "../../embedded-agent-subscribe.handlers.tools.js" ;
147147import { subscribeEmbeddedAgentSession } from "../../embedded-agent-subscribe.js" ;
148148import { isTimeoutError } from "../../failover-error.js" ;
149+ import { runAgentEndSideEffects } from "../../harness/agent-end-side-effects.js" ;
149150import { resolveHeartbeatPromptForSystemPrompt } from "../../heartbeat-system-prompt.js" ;
150151import { resolveImageSanitizationLimits } from "../../image-sanitization.js" ;
151152import { filterLocalModelLeanTools , isLocalModelLeanEnabled } from "../../local-model-lean.js" ;
@@ -4393,33 +4394,26 @@ export async function runEmbeddedAttempt(
43934394 } ) ;
43944395 anthropicPayloadLogger ?. recordUsage ( messagesSnapshot , promptError ) ;
43954396
4396- // Run agent_end hooks to allow plugins to analyze the conversation
4397- // This is fire-and-forget, so we don't await
4398- // Run even on compaction timeout so plugins can log/cleanup
4399- if ( hookRunner ?. hasHooks ( "agent_end" ) ) {
4400- hookRunner
4401- . runAgentEnd (
4402- {
4403- messages : messagesSnapshot ,
4404- success : ! aborted && ! promptError ,
4405- error : promptError ? formatErrorMessage ( promptError ) : undefined ,
4406- durationMs : Date . now ( ) - promptStartedAt ,
4407- } ,
4408- {
4409- runId : params . runId ,
4410- trace : freezeDiagnosticTraceContext ( diagnosticTrace ) ,
4411- agentId : hookAgentId ,
4412- sessionKey : params . sessionKey ,
4413- sessionId : params . sessionId ,
4414- workspaceDir : params . workspaceDir ,
4415- trigger : params . trigger ,
4416- ...buildAgentHookContextChannelFields ( params ) ,
4417- } ,
4418- )
4419- . catch ( ( err ) => {
4420- log . warn ( `agent_end hook failed: ${ err } ` ) ;
4421- } ) ;
4422- }
4397+ runAgentEndSideEffects ( {
4398+ event : {
4399+ messages : messagesSnapshot ,
4400+ success : ! aborted && ! promptError ,
4401+ error : promptError ? formatErrorMessage ( promptError ) : undefined ,
4402+ durationMs : Date . now ( ) - promptStartedAt ,
4403+ } ,
4404+ ctx : {
4405+ runId : params . runId ,
4406+ trace : freezeDiagnosticTraceContext ( diagnosticTrace ) ,
4407+ agentId : hookAgentId ,
4408+ sessionKey : params . sessionKey ,
4409+ sessionId : params . sessionId ,
4410+ workspaceDir : params . workspaceDir ,
4411+ trigger : params . trigger ,
4412+ ...( params . config ? { config : params . config } : { } ) ,
4413+ ...buildAgentHookContextChannelFields ( params ) ,
4414+ } ,
4415+ hookRunner,
4416+ } ) ;
44234417 } finally {
44244418 clearTimeout ( abortTimer ) ;
44254419 if ( abortWarnTimer ) {
0 commit comments