@@ -10,11 +10,14 @@ export type HeartbeatRunResult =
1010 | { status : "skipped" ; reason : string }
1111 | { status : "failed" ; reason : string } ;
1212
13- export type HeartbeatWakeHandler = ( opts : {
13+ export type HeartbeatWakeRequest = {
1414 reason ?: string ;
1515 agentId ?: string ;
1616 sessionKey ?: string ;
17- } ) => Promise < HeartbeatRunResult > ;
17+ heartbeat ?: { target ?: string } ;
18+ } ;
19+
20+ export type HeartbeatWakeHandler = ( opts : HeartbeatWakeRequest ) => Promise < HeartbeatRunResult > ;
1821
1922let heartbeatsEnabled = true ;
2023
@@ -33,6 +36,7 @@ type PendingWakeReason = {
3336 requestedAt : number ;
3437 agentId ?: string ;
3538 sessionKey ?: string ;
39+ heartbeat ?: { target ?: string } ;
3640} ;
3741
3842let handler : HeartbeatWakeHandler | null = null ;
@@ -87,6 +91,7 @@ function queuePendingWakeReason(params?: {
8791 requestedAt ?: number ;
8892 agentId ?: string ;
8993 sessionKey ?: string ;
94+ heartbeat ?: { target ?: string } ;
9095} ) {
9196 const requestedAt = params ?. requestedAt ?? Date . now ( ) ;
9297 const normalizedReason = normalizeWakeReason ( params ?. reason ) ;
@@ -102,6 +107,7 @@ function queuePendingWakeReason(params?: {
102107 requestedAt,
103108 agentId : normalizedAgentId ,
104109 sessionKey : normalizedSessionKey ,
110+ heartbeat : params ?. heartbeat ,
105111 } ;
106112 const previous = pendingWakes . get ( wakeTargetKey ) ;
107113 if ( ! previous ) {
@@ -162,6 +168,7 @@ function schedule(coalesceMs: number, kind: WakeTimerKind = "normal") {
162168 reason : pendingWake . reason ?? undefined ,
163169 ...( pendingWake . agentId ? { agentId : pendingWake . agentId } : { } ) ,
164170 ...( pendingWake . sessionKey ? { sessionKey : pendingWake . sessionKey } : { } ) ,
171+ ...( pendingWake . heartbeat ? { heartbeat : pendingWake . heartbeat } : { } ) ,
165172 } ;
166173 const res = await active ( wakeOpts ) ;
167174 if ( res . status === "skipped" && res . reason === "requests-in-flight" ) {
@@ -170,6 +177,7 @@ function schedule(coalesceMs: number, kind: WakeTimerKind = "normal") {
170177 reason : pendingWake . reason ?? "retry" ,
171178 agentId : pendingWake . agentId ,
172179 sessionKey : pendingWake . sessionKey ,
180+ heartbeat : pendingWake . heartbeat ,
173181 } ) ;
174182 schedule ( DEFAULT_RETRY_MS , "retry" ) ;
175183 }
@@ -181,6 +189,7 @@ function schedule(coalesceMs: number, kind: WakeTimerKind = "normal") {
181189 reason : pendingWake . reason ?? "retry" ,
182190 agentId : pendingWake . agentId ,
183191 sessionKey : pendingWake . sessionKey ,
192+ heartbeat : pendingWake . heartbeat ,
184193 } ) ;
185194 }
186195 schedule ( DEFAULT_RETRY_MS , "retry" ) ;
@@ -241,11 +250,13 @@ export function requestHeartbeatNow(opts?: {
241250 coalesceMs ?: number ;
242251 agentId ?: string ;
243252 sessionKey ?: string ;
253+ heartbeat ?: { target ?: string } ;
244254} ) {
245255 queuePendingWakeReason ( {
246256 reason : opts ?. reason ,
247257 agentId : opts ?. agentId ,
248258 sessionKey : opts ?. sessionKey ,
259+ heartbeat : opts ?. heartbeat ,
249260 } ) ;
250261 schedule ( opts ?. coalesceMs ?? DEFAULT_COALESCE_MS , "normal" ) ;
251262}
0 commit comments