/**
 * Read-only skills sync status for the interactive startup hint.
 *
 * The checker compares local skill folders against user and team cloud storage
 * without writing either side. It mirrors the safety boundary used by
 * /upload-skills: team-owned skill names are not uploadable, even when a user
 * skill with the same name also exists. Startup can therefore warn about drift
 * without promising that every local change can be pushed.
 */
import { type StorageContext } from './storage-client.js';
export interface SkillSyncStatusItem {
    skillName: string;
    kind: 'create' | 'update';
    /** Files present in both manifests with different content hashes. */
    modifiedFiles: number;
    /** Files that exist only in the local skill folder. */
    localOnlyFiles: number;
    /** Files that exist only in the cloud manifest. */
    remoteOnlyFiles: number;
    /** Cloud scope used for download/comparison. Local-only uploads omit this. */
    source?: StorageContext;
}
export interface SkillsSyncStatus {
    /** Cloud user/team skills missing locally or newer than the local copy. */
    needsDownload: SkillSyncStatusItem[];
    /** Local user skills missing in user cloud storage or newer than the user cloud copy. */
    needsUpload: SkillSyncStatusItem[];
    /** Team skills whose local copy differs; these are intentionally not uploadable. */
    changedTeam: SkillSyncStatusItem[];
    /** Non-fatal list/read/compare errors. A status can still contain partial results. */
    errors: string[];
}
/**
 * Return local/cloud drift for skills without mutating either side.
 *
 * Classification rules:
 * - User-only cloud skills can need download, and local user skills can need upload.
 * - Team cloud skills can need download when missing locally.
 * - Existing local copies of team skills go to changedTeam when they differ, because
 *   /upload-skills refuses to upload any skill name owned by the team scope.
 * - If user and team cloud scopes both contain the same skill name, team ownership wins.
 */
export declare function checkSkillsSyncStatus(accessToken: string, authorizedSkillTeamIds?: readonly string[] | null): Promise<SkillsSyncStatus>;
//# sourceMappingURL=skills-status.d.ts.map