import { MultiStepPayload } from "./multi-step-payload.js";
import { MultiStepTask } from "./multi-step-task.js";
import { TaskContext } from "./tasks-model.js";
/**
 * Technical workflow state persisted in `workflowPayload` by {@link ManagedWorkflowTask}.
 */
export type ManagedWorkflowState = {
    /**
     * Number of successful parent workflow passes that entered {@link run}.
     */
    runCount: number;
};
/**
 * Base class for parent workflows that must explicitly either:
 * - spawn a child task, or
 * - submit a final result,
 * on every parent run.
 *
 * The class owns technical workflow metadata (`runCount`) inside
 * `MultiStepPayload.workflowPayload` and keeps business state in `userPayload`.
 */
export declare abstract class ManagedWorkflowTask<TUserPayload extends object = Record<string, unknown>> extends MultiStepTask<TUserPayload> {
    protected readonly maxRuns: number;
    constructor(maxRuns?: number);
    private static validateMaxRuns;
    private readCurrentRunCount;
    /**
     * Business workflow logic supplied by subclasses.
     *
     * Contract per invocation:
     * - call `context.spawnChild(...)` exactly once, or
     * - call `context.submitResult(...)` exactly once,
     * and optionally update user payload through `context.setPayload(...)`.
     */
    protected abstract run(userPayload: TUserPayload, context: TaskContext): Promise<void>;
    protected processNext(payload: MultiStepPayload<TUserPayload>, context: TaskContext): Promise<void>;
}
