Cron: dedupe gateway wake target resolution

This commit is contained in:
Vignesh Natarajan
2026-02-16 14:37:22 -08:00
committed by Peter Steinberger
parent f988abf202
commit a258503590

View File

@@ -115,6 +115,26 @@ export function buildGatewayCronService(params: {
return canonical; return canonical;
}; };
const resolveCronWakeTarget = (opts?: { agentId?: string; sessionKey?: string | null }) => {
const runtimeConfig = loadConfig();
const requestedAgentId = opts?.agentId ? resolveCronAgent(opts.agentId).agentId : undefined;
const derivedAgentId =
requestedAgentId ??
(opts?.sessionKey
? normalizeAgentId(resolveAgentIdFromSessionKey(opts.sessionKey))
: undefined);
const agentId = derivedAgentId || undefined;
const sessionKey =
opts?.sessionKey && agentId
? resolveCronSessionKey({
runtimeConfig,
agentId,
requestedSessionKey: opts.sessionKey,
})
: undefined;
return { runtimeConfig, agentId, sessionKey };
};
const defaultAgentId = resolveDefaultAgentId(params.cfg); const defaultAgentId = resolveDefaultAgentId(params.cfg);
const resolveSessionStorePath = (agentId?: string) => const resolveSessionStorePath = (agentId?: string) =>
resolveStorePath(params.cfg.session?.store, { resolveStorePath(params.cfg.session?.store, {
@@ -140,22 +160,7 @@ export function buildGatewayCronService(params: {
enqueueSystemEvent(text, { sessionKey, contextKey: opts?.contextKey }); enqueueSystemEvent(text, { sessionKey, contextKey: opts?.contextKey });
}, },
requestHeartbeatNow: (opts) => { requestHeartbeatNow: (opts) => {
const runtimeConfig = loadConfig(); const { agentId, sessionKey } = resolveCronWakeTarget(opts);
const requestedAgentId = opts?.agentId ? resolveCronAgent(opts.agentId).agentId : undefined;
const derivedAgentId =
requestedAgentId ??
(opts?.sessionKey
? normalizeAgentId(resolveAgentIdFromSessionKey(opts.sessionKey))
: undefined);
const agentId = derivedAgentId || undefined;
const sessionKey =
opts?.sessionKey && agentId
? resolveCronSessionKey({
runtimeConfig,
agentId,
requestedSessionKey: opts.sessionKey,
})
: undefined;
requestHeartbeatNow({ requestHeartbeatNow({
reason: opts?.reason, reason: opts?.reason,
agentId, agentId,
@@ -163,22 +168,7 @@ export function buildGatewayCronService(params: {
}); });
}, },
runHeartbeatOnce: async (opts) => { runHeartbeatOnce: async (opts) => {
const runtimeConfig = loadConfig(); const { runtimeConfig, agentId, sessionKey } = resolveCronWakeTarget(opts);
const requestedAgentId = opts?.agentId ? resolveCronAgent(opts.agentId).agentId : undefined;
const derivedAgentId =
requestedAgentId ??
(opts?.sessionKey
? normalizeAgentId(resolveAgentIdFromSessionKey(opts.sessionKey))
: undefined);
const agentId = derivedAgentId || undefined;
const sessionKey =
opts?.sessionKey && agentId
? resolveCronSessionKey({
runtimeConfig,
agentId,
requestedSessionKey: opts.sessionKey,
})
: undefined;
return await runHeartbeatOnce({ return await runHeartbeatOnce({
cfg: runtimeConfig, cfg: runtimeConfig,
reason: opts?.reason, reason: opts?.reason,