import type { GitAction } from './common.js';
import type { GeneratedDocument } from './docs.js';
export interface GitConfig {
    branchPrefix?: Record<string, string>;
    commitFormat?: 'conventional' | 'spec-id' | 'custom';
    customCommitTemplate?: string;
    autoCreateBranch?: boolean;
    requireSpecInCommit?: boolean;
    protectedBranches?: string[];
    baseBranch?: string;
    stalenessThreshold?: number;
    changelogFormat?: 'technical' | 'user-facing';
}
export interface PrTemplate {
    title: string;
    body: string;
    labels: string[];
    reviewers?: string[];
    linkedIssues?: string[];
}
export interface LinkedCommit {
    hash: string;
    message: string;
    specId: string;
    author: string;
    date: string;
    filesChanged: string[];
}
export interface GitSpecStatus {
    currentBranch: string;
    linkedSpec?: string;
    uncommittedChanges: number;
    commitsAhead: number;
    specsCoveredByCommits: string[];
    specsInProgress: string[];
}
export interface ManageGitResult {
    action: GitAction;
    branchName?: string;
    prTemplate?: PrTemplate;
    linkedCommits?: LinkedCommit[];
    changelog?: GeneratedDocument;
    hooksInstalled?: string[];
    status?: GitSpecStatus;
    message: string;
}
export interface PreCommitHookConfig {
    validateSpecExists: boolean;
    validateBranchName: boolean;
    runLinting: boolean;
    runTests: boolean;
    checkEnvSecrets: boolean;
    maxFilesPerCommit?: number;
}
export interface ManageGitInput {
    projectId: string;
    action: GitAction;
    specId?: string;
    config?: GitConfig;
    files?: string[];
}
export type ChangelogFormat = 'technical' | 'user-facing';
export type HookManager = 'husky' | 'lefthook' | 'simple-git-hooks' | 'native';
export type GitFlowType = 'gitflow' | 'github-flow' | 'trunk-based';
export type BreakingChangeType = 'breaking' | 'non-breaking' | 'deprecation';
export interface BranchConvention {
    prefix: string;
    specId: string;
    slug: string;
    fullName: string;
}
export interface ChangelogEntry {
    type: string;
    specId?: string;
    description: string;
    commits: string[];
    version?: string;
}
export interface HookConfig {
    type: 'commit-msg' | 'pre-commit' | 'pre-push';
    manager: HookManager;
    script: string;
    enabled: boolean;
}
export interface GitStatusView {
    specsInProgress: string[];
    activeBranches: string[];
    unmergedChanges: number;
    branchesCommitsBehind: Record<string, number>;
}
export interface BreakingChange {
    type: BreakingChangeType;
    description: string;
    file?: string;
    consumers?: string[];
    migrationPlan?: string;
}
export interface ReleaseInfo {
    version: string;
    bumpType: 'major' | 'minor' | 'patch';
    tagName: string;
    releaseBranch?: string;
    releaseNotes: string;
    mergeInstructions: string[];
}
export interface SyncBranchResult {
    commitsBehinds: number;
    strategy: 'rebase' | 'merge';
    gitFlowType: GitFlowType;
    conflictingFiles?: string[];
    message: string;
}
export interface BreakingCheckResult {
    hasBreakingChanges: boolean;
    changes: BreakingChange[];
    summary: string;
}
export interface OrphanCommit {
    hash: string;
    message: string;
    author: string;
    date: string;
    suggestedSpecId?: string;
}
export interface GitSetupResult {
    data: Record<string, unknown>;
    branch: string;
}
export interface AutoSetupResult {
    action: 'auto-setup';
    gitFlowType: GitFlowType;
    baseBranch: string;
    newBranch: string;
    syncedBase: boolean;
    message: string;
}
//# sourceMappingURL=git.d.ts.map