scrum4me-mcp/src/presence/heartbeat.ts
Janpeter Visser f87b20744b
feat: worker presence layer + batch-loop docs (#7)
* feat: add next_action field to update_job_status response

* docs: add Batch-loop section to README

* feat: presence layer — registerWorker, startHeartbeat, registerShutdownHandlers

* feat: bootstrap worker presence at server startup, remove inline presence from wait-for-job

* docs: document worker presence layer in CLAUDE.md

* docs: refine Batch-loop intro — add 'Hier is de flow:' per implementation plan
2026-05-01 16:39:26 +02:00

23 lines
652 B
TypeScript

import { prisma } from '../prisma.js'
export function startHeartbeat(opts: {
tokenId: string
intervalMs?: number
}): { stop: () => void } {
const timer = setInterval(async () => {
try {
const result = await prisma.claudeWorker.updateMany({
where: { token_id: opts.tokenId },
data: { last_seen_at: new Date() },
})
if (result.count === 0) {
console.error('[scrum4me-mcp] Heartbeat: worker record not found — token may be revoked. Stopping.')
clearInterval(timer)
}
} catch {
// non-fatal
}
}, opts.intervalMs ?? 5_000)
return { stop: () => clearInterval(timer) }
}