import type { AgentService } from '../../agent/service.js';
import type { Config } from '../../config/schema.js';
import { CronService } from '../../cron/service.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;
    cronService: CronService;
    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;
}
