/** * On-demand OMS campaign owner. * * This is a bounded pump, not a daemon: one call advances immediate durable * work until the campaign reaches an external wait, terminal state, needs-human * state, repeated/no-progress decision, or the hard step limit. */ import { type DispatchService, type DispatchServiceConfig } from "../kernel/dispatch-service.js"; import { type TaskAdviceEvidence } from "../kernel/loop-decision.js"; import { type ResultService, type StopAdapter } from "../kernel/result-service.js"; import { type RolePolicyConfig } from "../domain/role-policy.js"; import type { ConductorRecoveryBinding } from "../kernel/types.js"; import type { CampaignStatus, Clock, KernelPaths } from "../kernel/types.js"; export declare const DEFAULT_CAMPAIGN_PUMP_STEPS = 16; export declare const MAX_CAMPAIGN_PUMP_STEPS = 16; export declare const CAMPAIGN_PUMP_LOCK_NAME = "campaign-pump"; export interface CampaignDispatchService { readonly resolveAdvice: (input: { readonly taskId: string; }) => TaskAdviceEvidence; readonly requestAdvice: DispatchService["requestAdvice"]; readonly launchWorker: DispatchService["launchWorker"]; } export interface CampaignResultService { readonly inspectTaskTerminal: (input: { readonly expectedRunId?: string; readonly expectedRunVersion?: number; readonly taskId: string; }) => { readonly status: "non_terminal" | "done" | "blocked"; readonly task_id: string; readonly version: number; }; readonly processResult: ResultService["processResult"]; } export interface CampaignTaskCounts { readonly total: number; readonly idle: number; readonly working: number; readonly done: number; readonly blocked: number; readonly parked: number; readonly pending_verification: number; } export interface CampaignPumpOutcome { readonly status: "progressed" | "waiting" | "terminal" | "needs_human"; readonly steps: number; readonly last_action: string; readonly run_status: CampaignStatus | "none"; readonly pending_wakes: number; readonly tasks: CampaignTaskCounts; } export interface CampaignLoop { readonly stepOnce: () => CampaignPumpOutcome; readonly pumpCampaign: (options?: { readonly maxSteps?: number; }) => CampaignPumpOutcome; readonly advanceCampaign: () => CampaignPumpOutcome; } export declare function createProductionCampaignLoop(input: { readonly paths: KernelPaths; readonly clock: Clock; readonly recoveryBinding: ConductorRecoveryBinding; readonly dispatch: Omit; readonly rolePolicy?: RolePolicyConfig; readonly packageRoot?: string; readonly claudeExecutablePath?: string; }): CampaignLoop; export declare function createCampaignLoop(input: { readonly paths: KernelPaths; readonly clock: Clock; readonly dispatch: CampaignDispatchService; readonly resultService: CampaignResultService; readonly stopAdapter?: StopAdapter; }): CampaignLoop;