import type { RepomixConfigMerged } from '../../config/configSchema.js';
import type { RepomixProgressCallback } from '../../shared/types.js';
import type { SkippedFileInfo } from '../file/fileCollect.js';
import type { ProcessedFile } from '../file/fileTypes.js';
import type { GitDiffResult } from '../git/gitDiffHandle.js';
import type { GitLogResult } from '../git/gitLogHandle.js';
import type { PackOptions, PackResult } from '../packager.js';
import type { SuspiciousFileResult } from '../security/securityCheck.js';
export interface SkillReferences {
    summary: string;
    structure: string;
    files: string;
    techStack?: string;
}
export interface SkillReferencesResult {
    references: SkillReferences;
    skillName: string;
    projectName: string;
    skillDescription: string;
    totalFiles: number;
    totalLines: number;
    statisticsSection: string;
    hasTechStack: boolean;
    sourceUrl?: string;
}
export interface SkillOutputResult {
    skillMd: string;
    references: SkillReferences;
}
export declare const generateSkillReferences: (skillName: string, rootDirs: string[], config: RepomixConfigMerged, processedFiles: ProcessedFile[], allFilePaths: string[], gitDiffResult?: GitDiffResult | undefined, gitLogResult?: GitLogResult | undefined, skillProjectName?: string, skillSourceUrl?: string, deps?: {
    buildOutputGeneratorContext: (rootDirs: string[], config: RepomixConfigMerged, allFilePaths: string[], processedFiles: ProcessedFile[], gitDiffResult?: GitDiffResult | undefined, gitLogResult?: GitLogResult | undefined, filePathsByRoot?: import("../file/fileTreeGenerate.js").FilesByRoot[], emptyDirPaths?: string[], deps?: {
        listDirectories: (rootDir: string, config: RepomixConfigMerged) => Promise<string[]>;
        listFiles: (rootDir: string, config: RepomixConfigMerged) => Promise<string[]>;
        searchFiles: (rootDir: string, config: RepomixConfigMerged, explicitFiles?: string[]) => Promise<import("../file/fileSearch.js").FileSearchResult>;
    }) => Promise<import("../output/outputGeneratorTypes.js").OutputGeneratorContext>;
    sortOutputFiles: (files: ProcessedFile[], config: RepomixConfigMerged, deps?: import("../output/outputSort.js").SortDeps) => Promise<ProcessedFile[]>;
}) => Promise<SkillReferencesResult>;
export declare const generateSkillMdFromReferences: (referencesResult: SkillReferencesResult, totalTokens: number) => SkillOutputResult;
export interface PackSkillParams {
    rootDirs: string[];
    config: RepomixConfigMerged;
    options: PackOptions;
    processedFiles: ProcessedFile[];
    allFilePaths: string[];
    gitDiffResult: GitDiffResult | undefined;
    gitLogResult: GitLogResult | undefined;
    suspiciousFilesResults: SuspiciousFileResult[];
    suspiciousGitDiffResults: SuspiciousFileResult[];
    suspiciousGitLogResults: SuspiciousFileResult[];
    safeFilePaths: string[];
    skippedFiles: SkippedFileInfo[];
    progressCallback: RepomixProgressCallback;
}
export declare const packSkill: (params: PackSkillParams, deps?: {
    buildOutputGeneratorContext: (rootDirs: string[], config: RepomixConfigMerged, allFilePaths: string[], processedFiles: ProcessedFile[], gitDiffResult?: GitDiffResult | undefined, gitLogResult?: GitLogResult | undefined, filePathsByRoot?: import("../file/fileTreeGenerate.js").FilesByRoot[], emptyDirPaths?: string[], deps?: {
        listDirectories: (rootDir: string, config: RepomixConfigMerged) => Promise<string[]>;
        listFiles: (rootDir: string, config: RepomixConfigMerged) => Promise<string[]>;
        searchFiles: (rootDir: string, config: RepomixConfigMerged, explicitFiles?: string[]) => Promise<import("../file/fileSearch.js").FileSearchResult>;
    }) => Promise<import("../output/outputGeneratorTypes.js").OutputGeneratorContext>;
    sortOutputFiles: (files: ProcessedFile[], config: RepomixConfigMerged, deps?: import("../output/outputSort.js").SortDeps) => Promise<ProcessedFile[]>;
    calculateMetrics: (processedFiles: ProcessedFile[], outputPromise: Promise<string | string[]>, progressCallback: RepomixProgressCallback, config: RepomixConfigMerged, gitDiffResult: GitDiffResult | undefined, gitLogResult: GitLogResult | undefined, overrideDeps?: Partial<{
        calculateFileMetrics: (processedFiles: ProcessedFile[], targetFilePaths: string[], tokenCounterEncoding: import("../metrics/tokenEncodings.js").TokenEncoding, progressCallback: RepomixProgressCallback, deps: {
            taskRunner: import("../metrics/metricsWorkerRunner.js").MetricsTaskRunner;
        }) => Promise<import("../metrics/workers/types.js").FileMetrics[]>;
        calculateOutputMetrics: (content: string, encoding: import("../metrics/tokenEncodings.js").TokenEncoding, path: string | undefined, deps: {
            taskRunner: import("../metrics/metricsWorkerRunner.js").MetricsTaskRunner;
        }) => Promise<number>;
        calculateGitDiffMetrics: (config: RepomixConfigMerged, gitDiffResult: GitDiffResult | undefined, deps: {
            taskRunner: import("../metrics/metricsWorkerRunner.js").MetricsTaskRunner;
        }) => Promise<number>;
        calculateGitLogMetrics: (config: RepomixConfigMerged, gitLogResult: GitLogResult | undefined, deps: {
            taskRunner: import("../metrics/metricsWorkerRunner.js").MetricsTaskRunner;
        }) => Promise<{
            gitLogTokenCount: number;
        }>;
        taskRunner: import("../metrics/metricsWorkerRunner.js").MetricsTaskRunner | undefined;
    }>) => Promise<import("../metrics/calculateMetrics.js").CalculateMetricsResult>;
    writeSkillOutput: (output: SkillOutputResult, skillDir: string, deps?: {
        mkdir: typeof import("fs/promises").mkdir;
        writeFile: typeof import("fs/promises").writeFile;
    }) => Promise<string>;
    generateDefaultSkillName: (rootDirs: string[]) => string;
}) => Promise<PackResult>;
