import { logger } from "../middleware/logger.js"; type WakeupTriggerDetail = "manual" | "ping" | "callback" | "system"; type WakeupSource = "timer" | "assignment" | "on_demand" | "automation"; export interface IssueAssignmentWakeupDeps { wakeup: ( agentId: string, opts: { source?: WakeupSource; triggerDetail?: WakeupTriggerDetail; reason?: string | null; payload?: Record | null; requestedByActorType?: "user" | "agent" | "system"; requestedByActorId?: string | null; contextSnapshot?: Record; }, ) => Promise; } export function queueIssueAssignmentWakeup(input: { heartbeat: IssueAssignmentWakeupDeps; issue: { id: string; assigneeAgentId: string | null; status: string }; reason: string; mutation: string; contextSource: string; requestedByActorType?: "user" | "agent" | "system"; requestedByActorId?: string | null; }) { if (!input.issue.assigneeAgentId || input.issue.status === "backlog") return; return input.heartbeat .wakeup(input.issue.assigneeAgentId, { source: "assignment", triggerDetail: "system", reason: input.reason, payload: { issueId: input.issue.id, mutation: input.mutation }, requestedByActorType: input.requestedByActorType, requestedByActorId: input.requestedByActorId ?? null, contextSnapshot: { issueId: input.issue.id, source: input.contextSource }, }) .catch((err) => logger.warn({ err, issueId: input.issue.id }, "failed to wake assignee on issue assignment")); }