import type { AgentService } from '../../agent/service.js'; import type { Config } from '../../config/schema.js'; import type { MessageBus } from '../../infra/bus/index.js'; import type { SessionStore } from '../../session/store.js'; export interface HeartbeatRunnerConfig { enabled: boolean; intervalMs: number; target?: string; targetChatId?: string; prompt?: string; ackMaxChars?: number; isolatedSession?: boolean; activeHours?: { start: string; end: string; timezone?: string; }; } /** Map persisted gateway config to runner options (gateway start / reload). */ export declare function heartbeatRunnerConfigFromConfig(cfg: Config): HeartbeatRunnerConfig; export interface HeartbeatServiceDeps { agentService: AgentService; messageBus: MessageBus; sessionStore: SessionStore; /** Current app config (for HEARTBEAT.md path under the default agent `profile/` directory). */ getConfig: () => Config; } export declare class HeartbeatService { private deps; private intervalId; private wake; private lastHeartbeatText; private lastHeartbeatAt; private runnerConfig; constructor(deps: HeartbeatServiceDeps); start(config: HeartbeatRunnerConfig): void; /** Cron, exec completion, manual triggers, etc. */ requestNow(opts?: { reason?: string; }): void; stop(): void; updateConfig(config: Config): void; isRunning(): boolean; private runHeartbeatOnce; private isDuplicate; }