import type { Logger } from 'pino';
import type { ReviewJob } from '../../../frameworks/queue/pQueueAdapter.js';
import type { PendingReviewRequestGateway } from '../../../modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.js';
import type { PendingReviewRequest, TriggerSource } from '../../../modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.js';
export type TriggerMode = 'full-auto' | 'semi-auto';
export type GateClaudeInvocationProcessor = (job: ReviewJob, signal: AbortSignal) => Promise<void>;
export type EnqueueReviewFunction = (job: ReviewJob, processor: GateClaudeInvocationProcessor) => Promise<boolean>;
export interface GateClaudeInvocationDependencies {
    triggerMode: TriggerMode;
    pendingReviewRequestGateway: PendingReviewRequestGateway;
    enqueue: EnqueueReviewFunction;
    broadcastPendingChanged: (pending: PendingReviewRequest) => void;
    logger: Logger;
    clock?: () => Date;
}
export interface GateClaudeInvocationInput {
    job: ReviewJob;
    triggerSource: TriggerSource;
    processor: GateClaudeInvocationProcessor;
}
export type GateClaudeInvocationResult = {
    status: 'enqueued';
    jobId: string;
} | {
    status: 'pending';
    pendingId: string;
} | {
    status: 'rejected';
    reason: string;
};
export declare class GateClaudeInvocationUseCase {
    private readonly deps;
    constructor(deps: GateClaudeInvocationDependencies);
    execute(input: GateClaudeInvocationInput): Promise<GateClaudeInvocationResult>;
}
//# sourceMappingURL=gateClaudeInvocation.usecase.d.ts.map