/** * GitHub Project V2 information */ export interface ProjectInfo { number: number; id: string; title: string; url: string; } /** * Project field information */ export interface ProjectField { id: string; name: string; dataType: string; options?: Array<{ id: string; name: string; }>; } /** * Project item (issue/PR in project) */ export interface ProjectItem { id: string; contentId: string; fieldValues: Record; } /** * Service for GitHub Projects V2 operations * Single Responsibility: GitHub Projects integration */ export declare class ProjectService { private fieldsCache; /** * Ensure GitHub CLI has project scope */ ensureProjectScope(): Promise; /** * Find existing HubLaunch project */ findExistingProject(owner: string): Promise; /** * Create new HubLaunch project */ createProject(owner: string): Promise; /** * Get or create project */ getOrCreateProject(owner: string): Promise; /** * Get project global ID */ getProjectId(owner: string, projectNumber: number): Promise; /** * List project fields (with caching to avoid rate limits) */ listFields(owner: string, projectNumber: number): Promise; /** * Create a single-select field with options using GraphQL */ createSingleSelectField(projectId: string, fieldName: string, options: Array<{ name: string; color?: string; description?: string; }>): Promise; /** * Ensure single-select field exists with given options */ ensureSingleSelectField(owner: string, projectNumber: number, projectId: string, fieldName: string, options: string[]): Promise; /** * Ensure tracking name field exists */ ensureTrackingNameField(owner: string, projectNumber: number): Promise; /** * Add issue to project */ addIssueToProject(issueNumber: number, projectNumber: number, owner?: string): Promise; /** * Update text field in project item */ updateTextField(projectId: string, itemId: string, fieldId: string, value: string): Promise; /** * Update single-select field in project item */ updateSingleSelectField(projectId: string, itemId: string, fieldId: string, optionId: string): Promise; /** * Set tracking name for project item */ setTrackingName(issueNumber: number, trackingName: string, projectNumber: number, projectId: string, owner?: string): Promise; /** * Remove issue from project */ removeIssueFromProject(itemId: string, projectNumber: number, owner?: string): Promise; /** * Get project info */ getProjectInfo(owner: string, projectNumber: number): Promise; /** * Find field by name */ findFieldByName(owner: string, projectNumber: number, fieldName: string): Promise; /** * Get option ID for single-select field */ getFieldOptionId(owner: string, projectNumber: number, fieldName: string, optionName: string): Promise; /** * Update status field for an issue in project */ updateIssueStatus(itemId: string, status: string, projectId: string, owner: string, projectNumber: number): Promise; /** * Update priority field for an issue in project */ updateIssuePriority(itemId: string, priority: string, projectId: string, owner: string, projectNumber: number): Promise; /** * Set issue tracking status (OwnerIsTracking or AssigneeIsFollowing) * Determines which field to update based on whether current user is the issue creator */ setIssueTracking(itemId: string, isTracking: boolean, projectId: string, owner: string, projectNumber: number): Promise; /** * Get all issues from project with their fields */ getProjectIssues(owner: string, projectNumber: number): Promise>; /** * Find project item by issue number */ findProjectItem(owner: string, projectNumber: number, issueNumber: number): Promise; } //# sourceMappingURL=ProjectService.d.ts.map