import type { CacciaConfig, CacciaSettings } from '../../core/models/config-types.js'; import { type GitHubPullRequestTarget } from '../../infra/github/pull-request-target.js'; import { type CacciaDisplayOptions } from './output.js'; import type { WorkflowExecutionEventSink } from '../tasks/execute/types.js'; export interface CacciaReviewThread { id: string; author: string; body: string; replies: Array<{ author: string; body: string; }>; path?: string; line?: number; url?: string; isOutdated?: boolean; } export interface CacciaWorkflowDecision { threadId: string; valid: boolean; reason: string; } export type CacciaOutcome = 'not_run' | 'skipped' | 'success' | 'limit'; export interface CacciaResult { outcome: CacciaOutcome; unresolvedCount: number; headSha?: string; exitCode?: number; reason?: string; skipReason?: 'github_unavailable' | 'initial_review_unavailable' | 'review_rate_limited' | 'review_skipped'; } interface CacciaInputBase extends CacciaDisplayOptions { eventSink?: WorkflowExecutionEventSink; projectCwd: string; settings: CacciaSettings; abortSignal?: AbortSignal; } type CacciaPushedHeadListener = (headSha: string) => void; interface CacciaLinkedOptions { entry: 'linked'; expectedInitialHeadSha?: string; onPushedHead?: CacciaPushedHeadListener; } type CacciaNumberInput = CacciaInputBase & ({ entry: 'standalone'; prNumber: number; } | (CacciaLinkedOptions & { prNumber: number; pullRequest?: GitHubPullRequestTarget; })); export type CacciaInput = CacciaNumberInput | (CacciaInputBase & CacciaLinkedOptions & { prUrl: string; }); export interface CacciaReviewWaitOptions { timeoutMs: number; afterHeadSha?: string; } export type CacciaReviewWaitResult = { headSha: string; reviewSkipped?: boolean; }; export interface CacciaDependencies { detectVcsProvider(projectCwd: string): string | undefined; waitForCodeRabbitReview(prNumber: number, options: CacciaReviewWaitOptions): Promise; fetchCodeRabbitReviewThreads(prNumber: number, projectCwd: string, expectedHeadSha: string, signal?: AbortSignal): Promise; createTemporaryClone(prNumber: number, expectedHeadSha: string): Promise<{ cwd: string; }>; executeWorkflow(input: { prNumber: number; workflow: string; cwd: string; projectCwd: string; task: string; }): Promise<{ reportPath: string; decisions: CacciaWorkflowDecision[]; }>; commitAndPush(cwd: string, onPushedHead: CacciaPushedHeadListener | undefined): Promise<{ headSha: string; pushed: boolean; }>; fetchCurrentPullRequestHeadSha(prNumber: number, projectCwd: string, signal?: AbortSignal, deadlineAt?: number): Promise; resolveReviewThread(threadId: string, projectCwd: string, signal?: AbortSignal): Promise; removeTemporaryClone(cwd: string): Promise; logResult(result: CacciaResult): void; notifyResult(result: CacciaResult): Promise; } export declare function runCaccia(input: CacciaInput, dependencies?: CacciaDependencies): Promise; export declare function resolveCacciaSettings(settings: CacciaConfig | undefined): CacciaSettings; export {}; //# sourceMappingURL=index.d.ts.map