export type DaemonJobKind = "repo_tool" | "persistent_monitor"; export type DaemonJobPriority = "interactive" | "background"; export type DaemonJobState = "queued" | "running"; export interface DaemonJobRequest { readonly sessionId: string | null; readonly sliceId: string | null; readonly repoId: string; readonly worktreeId: string | null; readonly tool: string; readonly kind: DaemonJobKind; readonly priority: DaemonJobPriority; readonly writerId: string; } export interface DaemonJobView extends DaemonJobRequest { readonly jobId: string; readonly state: DaemonJobState; readonly enqueuedAt: string; readonly startedAt: string | null; readonly waitMs: number; } export interface DaemonSchedulerCounts { readonly maxConcurrentJobs: number; readonly activeJobs: number; readonly queuedJobs: number; readonly interactiveQueuedJobs: number; readonly backgroundQueuedJobs: number; readonly activeWriterLanes: number; readonly queuedWriterLanes: number; readonly completedJobs: number; readonly failedJobs: number; readonly longestQueuedWaitMs: number; } export interface DaemonJobSchedulerOptions { readonly maxConcurrentJobs?: number | undefined; } export declare const ZERO_SCHEDULER_COUNTS: DaemonSchedulerCounts; export declare class DaemonJobScheduler { private readonly maxConcurrentJobs; private readonly interactiveQueues; private readonly backgroundQueues; private readonly running; private completedJobs; private failedJobs; private lastInteractiveLaneKey; private lastBackgroundLaneKey; constructor(options?: DaemonJobSchedulerOptions); enqueue(request: DaemonJobRequest, run: () => Promise): Promise; getCounts(nowMs?: number): DaemonSchedulerCounts; listJobs(nowMs?: number): readonly DaemonJobView[]; private enqueueJob; private dispatch; private startJob; private takeNextJob; private takeNextJobForPriority; private takeNextJobFromQueues; private listQueuedJobs; private hasRunningLane; private getQueues; } //# sourceMappingURL=daemon-job-scheduler.d.ts.map