import type { FileChange, GitProvider, Issue, IssueOptions, PullRequest, PullRequestOptions } from '../types';
export declare class GitHubProvider implements GitProvider {
  readonly private apiUrl: any;
  private readonly token: string;
  private readonly owner: string;
  private readonly repo: string;
  constructor(token: string, owner: string, repo: string);
  createBranch(branchName: string, baseBranch: string): Promise<void>;
  commitChanges(branchName: string, message: string, files: FileChange[]): Promise<void>;
  private commitChangesWithGit(branchName: string, message: string, files: FileChange[]): Promise<void>;
  private commitChangesWithAPI(branchName: string, message: string, files: FileChange[]): Promise<void>;
  createPullRequest(options: PullRequestOptions): Promise<PullRequest>;
  private createPullRequestWithCLI(options: PullRequestOptions): Promise<PullRequest>;
  private createPullRequestWithAPI(options: PullRequestOptions): Promise<PullRequest>;
  private runCommand(command: string, args: string[]): Promise<string>;
  getPullRequests(state?: 'open' | 'closed' | 'all'): Promise<PullRequest[]>;
  updatePullRequest(prNumber: number, options: Partial<PullRequestOptions>): Promise<PullRequest>;
  closePullRequest(prNumber: number): Promise<void>;
  mergePullRequest(prNumber: number, strategy?: 'merge' | 'squash' | 'rebase'): Promise<void>;
  private apiRequest(endpoint: string, data?: any): Promise<any>;
  createIssue(options: IssueOptions): Promise<Issue>;
  getIssues(state?: 'open' | 'closed' | 'all'): Promise<Issue[]>;
  updateIssue(issueNumber: number, options: Partial<IssueOptions>): Promise<Issue>;
  closeIssue(issueNumber: number): Promise<void>;
  unpinIssue(issueNumber: number): Promise<void>;
}