/**
 * GitHub changed files fetcher.
 *
 * Implements the ChangedFilesFetcher interface from @kici-dev/engine for GitHub.
 * Retrieves changed files for PR and push events via the GitHub API.
 */
import type { ChangedFilesFetcher } from '@kici-dev/engine';
import { type GitHubAppConfig } from './auth.js';
/**
 * Check if an error is a GitHub 429 rate limit response.
 * Octokit throws RequestError with a numeric `status` property.
 */
export declare function isRateLimitError(err: unknown): boolean;
/**
 * Execute a function with retry on 429 rate limit errors.
 * Uses exponential backoff: 1s, 2s, 4s.
 * Non-429 errors are rethrown immediately.
 */
export declare function withRateLimitRetry<T>(fn: () => Promise<T>, context: string): Promise<T>;
/**
 * GitHub-specific implementation of ChangedFilesFetcher.
 *
 * For PRs: uses paginated pulls.listFiles API (handles up to 3000 files).
 * For pushes: uses repos.compareCommits API (logs warning at 300+ files).
 * For initial pushes (zero SHA): returns empty array.
 * For unknown events: returns empty array.
 */
export declare class GitHubChangedFilesFetcher implements ChangedFilesFetcher {
    private readonly config;
    readonly provider: "github";
    constructor(config: GitHubAppConfig);
    /**
     * Get changed files for a GitHub webhook event.
     *
     * @param repoIdentifier - "owner/repo" format
     * @param eventType - GitHub event type ("pull_request" or "push")
     * @param payload - Raw GitHub webhook payload
     * @param credentials - Must be GitHubCredentials with installationId
     * @returns Array of changed file paths
     */
    getChangedFiles(repoIdentifier: string, eventType: string, payload: unknown, credentials: unknown): Promise<string[]>;
    /**
     * Get changed files for a pull request event using paginated listFiles API.
     */
    private getPrChangedFiles;
    /**
     * Get changed files for a push event using compareCommits API.
     */
    private getPushChangedFiles;
}
//# sourceMappingURL=changed-files.d.ts.map