import type { AdapterState, AdapterHealth } from "../../types/index.js"; export type GitHubConfig = { owner: string; repo: string; token: string; baseUrl?: string; defaultBranch?: string; }; export type GitHubIssue = { number: number; title: string; state: string; url: string; }; export type GitHubPullRequest = { number: number; title: string; state: string; url: string; head: string; base: string; mergeCommitSha?: string; }; export type GitHubRelease = { id: number; tagName: string; url: string; }; export type GitHubRepositoryStatus = { owner: string; repo: string; defaultBranch: string; openIssues: number; openPullRequests: number; adapterEnabled: boolean; state: AdapterState; }; export type GitHubRepositoryHealth = { healthy: boolean; checks: { authenticated: boolean; repositoryReachable: boolean; defaultBranchExists: boolean; }; message: string; }; export type CreateIssueResult = { success: boolean; issue?: GitHubIssue; message: string; }; export type CreatePullRequestResult = { success: boolean; pullRequest?: GitHubPullRequest; message: string; }; export type MergePullRequestResult = { success: boolean; pullRequest?: GitHubPullRequest; mergeCommitSha?: string; message: string; }; export type CreateReleaseResult = { success: boolean; release?: GitHubRelease; message: string; }; export interface GitHubAdapter { readonly metadata: { name: string; version: string; kind: "github"; category: "integration"; description: string; }; readonly state: AdapterState; readonly health: AdapterHealth; readonly config?: GitHubConfig; initialize(): Promise; configure(config: Record): Promise; validate(): Promise; enable(): Promise; disable(): Promise; healthCheck(): Promise; status(): Promise; checkHealth(): Promise; createIssue(title: string, body?: string): Promise; updateIssue(number: number, updates: Partial): Promise; closeIssue(number: number): Promise; createPullRequest(title: string, head: string, base: string, body?: string): Promise; reviewPullRequest(number: number, event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT", body?: string): Promise; mergePullRequest(number: number): Promise; createRelease(tagName: string, name: string, body?: string): Promise; syncRepository(): Promise; }