summaryrefslogtreecommitdiffhomepage
path: root/packages/core/src/config/loader.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-29 01:51:03 +0900
committerAdam Malczewski <[email protected]>2026-06-29 01:51:03 +0900
commitfdc2d0df8fa5ffca8c1c0957cc8bbbe5f4a5304c (patch)
tree27422f665b3c332f0a2a923dc64466dedf16baea /packages/core/src/config/loader.ts
parent6dd9ea9b935e5011c16faed6c869c976cf5ff172 (diff)
downloaddispatch-fdc2d0df8fa5ffca8c1c0957cc8bbbe5f4a5304c.tar.gz
dispatch-fdc2d0df8fa5ffca8c1c0957cc8bbbe5f4a5304c.zip
feat(heartbeat): add inactiveOnly mode (skip fire while workspace has active agents)
A new per-workspace heartbeat setting `inactiveOnly` (default true): when on, the heartbeat SKIPS a scheduled fire whenever the configured workspace has any active agents — a conversation whose persisted status is "active" (driving a turn) or "queued" (waiting on the message queue). The fire is silently skipped (no run recorded); the scheduler re-arms and retries at the next interval. Set false to fire unconditionally (the prior behavior). The check is wired against conversationStore.listConversations({ workspaceId, status: ["active","queued"] }) at fire time — the orchestrator sets "active" on turn start and "idle" on settle, so it is the live busy/idle signal. The spawned heartbeat conversation lives in the dedicated heartbeat workspace, so a heartbeat run never counts as an active agent of the configured workspace (no self-block). - transport-contract: add inactiveOnly to HeartbeatConfig + UpdateHeartbeatRequest - heartbeat config-store: default true, apply/persist, legacy-parse default true - heartbeat service: injectable hasActiveAgents dep + skip logic in fire() - heartbeat extension: wire hasActiveAgents against the conversation store - transport-http: validate inactiveOnly (boolean) on PUT /workspaces/:id/heartbeat - tests: config-store (+4), heartbeat service (+7), transport-http (+3) - notes/heartbeat-setting-handoff.md: API contract for the frontend Verification: typecheck EXIT 0; tests 2013 passed | 6 skipped; biome EXIT 0.
Diffstat (limited to 'packages/core/src/config/loader.ts')
0 files changed, 0 insertions, 0 deletions