fix: pass sessionKey to deliverOutboundPayloads for message:sent hook dispatch

Several call sites of deliverOutboundPayloads() were not passing the
sessionKey parameter, causing the internal message:sent hook to never
fire (the guard `if (!sessionKeyForInternalHooks) return` in deliver.ts
silently skipped the triggerInternalHook call).

Fixed call sites:
- commands/agent/delivery.ts (agent loop replies — main fix)
- infra/heartbeat-runner.ts (heartbeat OK + alert delivery)
- infra/outbound/message.ts (message tool sends)
- cron/isolated-agent/delivery-dispatch.ts (cron job delivery)
- gateway/server-node-events.ts (node event forwarding)

The sessionKey parameter already existed in DeliverOutboundPayloadsCoreParams
and was used by deliver.ts to emit the message:sent internal hook event,
but was simply not being passed from most callers.
This commit is contained in:
Lucas Teixeira Campos Araujo
2026-02-26 09:36:54 -04:00
committed by Peter Steinberger
parent 20730af20b
commit a4408a917e
5 changed files with 6 additions and 0 deletions

View File

@@ -230,6 +230,7 @@ export async function deliverAgentCommandResult(params: {
onError: (err) => logDeliveryError(err), onError: (err) => logDeliveryError(err),
onPayload: logPayload, onPayload: logPayload,
deps: createOutboundSendDeps(deps), deps: createOutboundSendDeps(deps),
sessionKey: opts.sessionKey,
}); });
} }
} }

View File

@@ -182,6 +182,7 @@ export async function dispatchCronDelivery(
bestEffort: params.deliveryBestEffort, bestEffort: params.deliveryBestEffort,
deps: createOutboundSendDeps(params.deps), deps: createOutboundSendDeps(params.deps),
abortSignal: params.abortSignal, abortSignal: params.abortSignal,
sessionKey: params.agentSessionKey,
}); });
delivered = deliveryResults.length > 0; delivered = deliveryResults.length > 0;
return null; return null;

View File

@@ -241,6 +241,7 @@ async function sendReceiptAck(params: {
agentId, agentId,
bestEffort: true, bestEffort: true,
deps: createOutboundSendDeps(params.deps), deps: createOutboundSendDeps(params.deps),
sessionKey: params.sessionKey,
}); });
} }

View File

@@ -723,6 +723,7 @@ export async function runHeartbeatOnce(opts: {
payloads: [{ text: heartbeatOkText }], payloads: [{ text: heartbeatOkText }],
agentId, agentId,
deps: opts.deps, deps: opts.deps,
sessionKey,
}); });
return true; return true;
}; };
@@ -928,6 +929,7 @@ export async function runHeartbeatOnce(opts: {
]), ]),
], ],
deps: opts.deps, deps: opts.deps,
sessionKey,
}); });
// Record last delivered heartbeat payload for dedupe. // Record last delivered heartbeat payload for dedupe.

View File

@@ -233,6 +233,7 @@ export async function sendMessage(params: MessageSendParams): Promise<MessageSen
mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : undefined, mediaUrls: mirrorMediaUrls.length ? mirrorMediaUrls : undefined,
} }
: undefined, : undefined,
sessionKey: params.mirror?.sessionKey,
}); });
return { return {