import type { Attachment } from '../../domain/generated/output.js';
import type { IAttachmentStorageService, StoredAttachment } from '../../application/ports/output/services/feature-attachment-storage.interface.js';
export type { StoredAttachment };
export declare class AttachmentStorageService implements IAttachmentStorageService {
    /** In-memory dedup index: sessionId -> Map<sha256, StoredAttachment> */
    private readonly dedupIndex;
    /**
     * Store a file buffer in the pending attachment directory within SHEP_HOME.
     * Returns existing record if SHA-256 matches (dedup within same session).
     */
    store(buffer: Buffer, filename: string, mimeType: string, sessionId: string): StoredAttachment;
    /**
     * Commit pending uploads: rename pending dir to feature slug dir,
     * update paths on all attachment records.
     */
    commit(sessionId: string, featureSlug: string): Attachment[];
    /**
     * Delete all attachments for a feature.
     */
    delete(featureSlug: string): void;
    private getAttachmentsRoot;
    private getPendingDir;
    private getSlugDir;
    /** Generate unique filename by appending content hash when name collides (e.g. clipboard "image.png"). */
    private uniqueFilename;
    /** Strip path traversal and non-safe characters from filenames. */
    private sanitizeFilename;
}
//# sourceMappingURL=attachment-storage.service.d.ts.map