/**
 * Skills upload — pushes managed local user skills to cloud storage.
 *
 * Upload is whole-folder and git-style:
 * - new remote skill -> ask for approval, then upload
 * - existing remote skill with any diff -> ask for approval
 * - remote-only files inside an approved replaced skill are deleted
 * - remote-only skills are ignored; missing local skills never imply cloud deletion
 * - team skills are never uploaded
 */
export interface SkillUploadApprovalRequest {
    skillName: string;
    kind: 'create' | 'update';
    modifiedFiles: number;
    localOnlyFiles: number;
    remoteOnlyFiles: number;
    localModifiedAt?: string;
    cloudModifiedAt?: string;
    fileDiffs: SkillFileDiff[];
}
export interface SkillFileDiff {
    path: string;
    change: 'modified' | 'local-only' | 'remote-only';
}
export interface SkillUploadChange {
    skillName: string;
    kind: 'create' | 'update';
    localModifiedAt?: string;
    cloudModifiedAt?: string;
    fileDiffs: SkillFileDiff[];
}
export interface SkillsUploadResult {
    uploaded: string[];
    skipped: string[];
    skippedByUser: string[];
    blockedTeam: string[];
    changes: SkillUploadChange[];
    errors: string[];
}
export declare const TEAM_SKILL_ACCESS_UNRESOLVED_UPLOAD_ERROR = "Could not determine authorized team skill access; upload skipped to avoid overwriting a team-owned skill.";
type ApprovalHandler = (request: SkillUploadApprovalRequest) => Promise<boolean>;
export declare function uploadSkills(accessToken: string, approve: ApprovalHandler, authorizedSkillTeamIds?: readonly string[] | null): Promise<SkillsUploadResult>;
export {};
//# sourceMappingURL=skills-upload.d.ts.map