/** * GitHub service - encapsulates GitHub Issues and Projects v2 operations. * Uses gh CLI wrapper for API calls. */ import type { IGhCliClient } from '../clients/interfaces'; export interface IGitHubIssue { number: number; title: string; body?: string; state: 'open' | 'closed'; labels: string[]; assignees: string[]; url: string; createdAt: string; updatedAt: string; author?: string; milestone?: string; } export interface ICreateIssueArgs { repo: string; title: string; body?: string; labels?: string[]; assignee?: string; milestone?: string; } export interface IListIssuesArgs { repo: string; state?: 'open' | 'closed' | 'all'; labels?: string[]; assignee?: string; author?: string; milestone?: string; limit?: number; } export interface IViewIssueArgs { repo: string; number: number; } export interface ICloseIssueArgs { repo: string; number: number; reason?: 'completed' | 'not_planned'; } export interface IReopenIssueArgs { repo: string; number: number; } export interface IAssignIssueArgs { repo: string; number: number; assignees: string[]; } export interface ILabelIssueArgs { repo: string; number: number; add?: string[]; remove?: string[]; } export interface IGitHubProject { id: string; number: number; title: string; url: string; closed: boolean; shortDescription?: string; } export interface IGitHubProjectField { id: string; name: string; dataType: string; options?: Array<{ id: string; name: string; }>; } export interface IGitHubProjectItem { id: string; type: 'ISSUE' | 'PULL_REQUEST' | 'DRAFT_ISSUE'; content?: { number?: number; title: string; url?: string; state?: string; }; fieldValues: Record; } export interface IListProjectsArgs { repo: string; limit?: number; } export interface IGetProjectArgs { repo: string; number: number; } export interface IGetProjectItemsArgs { repo: string; projectNumber: number; limit?: number; } export interface IGetProjectFieldsArgs { repo: string; projectNumber: number; } export interface IAddToProjectArgs { repo: string; projectNumber: number; issueNumber: number; } export interface ISetProjectFieldArgs { repo: string; projectNumber: number; itemId: string; fieldName: string; value: string; } export interface IGitHubClient { createIssue(args: ICreateIssueArgs): Promise<{ number: number; url: string; title: string; }>; listIssues(args: IListIssuesArgs): Promise<{ issues: IGitHubIssue[]; total: number; }>; viewIssue(args: IViewIssueArgs): Promise; closeIssue(args: ICloseIssueArgs): Promise<{ number: number; state: string; }>; reopenIssue(args: IReopenIssueArgs): Promise<{ number: number; state: string; }>; assignIssue(args: IAssignIssueArgs): Promise<{ number: number; assignees: string[]; }>; labelIssue(args: ILabelIssueArgs): Promise<{ number: number; labels: string[]; }>; listProjects(args: IListProjectsArgs): Promise<{ projects: IGitHubProject[]; total: number; }>; getProject(args: IGetProjectArgs): Promise; getProjectItems(args: IGetProjectItemsArgs): Promise<{ items: IGitHubProjectItem[]; total: number; }>; getProjectFields(args: IGetProjectFieldsArgs): Promise<{ fields: IGitHubProjectField[]; }>; addToProject(args: IAddToProjectArgs): Promise<{ itemId: string; }>; setProjectField(args: ISetProjectFieldArgs): Promise<{ itemId: string; field: string; value: string; }>; } /** * Creates a GitHub client instance. */ export declare function createGitHubClient(ghCli: IGhCliClient): IGitHubClient; //# sourceMappingURL=GitHubService.d.ts.map