import { type RunStore } from "../run-state/index.js";
export type LabMeetingStateStatus = "scheduled" | "wrap_up" | "awaiting_feedback";
export type LabMeetingState = {
    version: 1;
    run_id: string;
    enabled: boolean;
    interval_minutes: number;
    grace_minutes: number;
    require_feedback_before_resume: boolean;
    status: LabMeetingStateStatus;
    sequence: number;
    next_deadline_at: string;
    current_meeting_id?: string;
    current_meeting_ref?: string;
    current_meeting_json_ref?: string;
    wrap_up_requested_at?: string;
    grace_expires_at?: string;
    waiting_background_ids?: string[];
    awaiting_feedback_at?: string;
    representative_report_requested_at?: string;
    last_resumed_at?: string;
    latest_professor_feedback?: string;
    latest_decision?: string;
};
export type LabMeetingArtifact = {
    version: 1;
    meeting_id: string;
    run_id: string;
    sequence: number;
    status: "awaiting_feedback" | "resumed";
    created_at: string;
    deadline_at: string;
    wrap_up_requested_at: string;
    background_wait_started_at: string;
    waiting_background_ids: string[];
    grace_expires_at?: string;
    professor_goal: string;
    summary: {
        run_status: string;
        task_counts: Record<string, number>;
        team_task_counts: Record<string, number>;
        team_member_counts: Record<string, number>;
        background_counts: Record<string, number>;
        subplan_counts: Record<string, number>;
        model_call_counts: Record<string, number>;
        tool_call_counts: Record<string, number>;
        budget_status: string;
        budget_warnings: string[];
        stale_backgrounds: string[];
        active_workspace_leases: number;
        open_workspace_conflicts: number;
        evidence_refs: string[];
        blockers: string[];
        recent_events: string[];
    };
    recommended_actions: string[];
    feedback_options: string[];
    professor_feedback?: string;
    professor_decision?: string;
    resumed_at?: string;
};
export type LabMeetingCheckResult = {
    enabled: boolean;
    triggered: boolean;
    state?: LabMeetingState;
    artifact?: LabMeetingArtifact;
    message?: string;
};
export type LabMeetingGateResult = {
    allowed: true;
    state?: LabMeetingState;
} | {
    allowed: false;
    state: LabMeetingState;
    reason: string;
    meeting_path?: string;
};
export declare function initializeLabMeetingState(store: RunStore, runId: string, timestamp?: string, input?: {
    forceEnabled?: boolean;
}): Promise<LabMeetingState | undefined>;
export declare function readLabMeetingState(store: RunStore, runId: string): Promise<LabMeetingState | undefined>;
export declare function peekLabMeetingDeadline(store: RunStore, runId: string, input?: {
    now?: string;
}): Promise<LabMeetingCheckResult>;
export declare function checkLabMeetingDeadline(store: RunStore, runId: string, input?: {
    now?: string;
    reason?: string;
}): Promise<LabMeetingCheckResult>;
export declare function triggerLabMeetingNow(store: RunStore, runId: string, reason?: string): Promise<LabMeetingCheckResult>;
export declare function markLabMeetingRepresentativeReportRequested(store: RunStore, runId: string, timestamp?: string): Promise<{
    state?: LabMeetingState;
    changed: boolean;
}>;
export declare function resumeLabMeeting(store: RunStore, runId: string, input?: {
    feedback?: string;
    decision?: string;
    now?: string;
}): Promise<LabMeetingState>;
export declare function setLabMeetingEnabled(store: RunStore, runId: string, enabled: boolean, now?: string): Promise<LabMeetingState>;
export declare function assertLabMeetingAllowsInternalWork(store: RunStore, runId: string, action: string): Promise<LabMeetingGateResult>;
export declare function formatLabMeetingNotice(result: LabMeetingCheckResult): string;
