/**
 * S3-backed skill store.
 *
 * Layout (curator-compatible):
 *   <prefix>skills/<id>.json  — one JSON-serialized SkillDefinition per object
 *   <prefix>index.json        — { lastUpdated, skills: SkillIndexItem[] }
 *
 * The index document is upserted on every write and rebuilt from a bucket
 * listing when missing or unparsable (self-healing). Concurrent writers can
 * race the index read-modify-write; the rebuild path recovers from any
 * resulting drift, matching curator's production behavior.
 *
 * @aws-sdk/client-s3 is an optional peer — loaded lazily with the same
 * createRequire pattern as memory's @juspay/hippocampus so importing
 * NeuroLink core never requires the AWS SDK. Tests (and hosts with
 * pre-configured clients) inject a SkillS3ObjectOps implementation instead.
 */
import type { SkillDefinition, SkillIndexItem, SkillS3ObjectOps, SkillS3StorageConfig, SkillStore } from "../types/index.js";
export declare class S3SkillStore implements SkillStore {
    private readonly config;
    /** Test/host seam — omit to build ops from @aws-sdk/client-s3 lazily. */
    private readonly injectedOps?;
    private readonly prefix;
    private ops;
    constructor(config: SkillS3StorageConfig, 
    /** Test/host seam — omit to build ops from @aws-sdk/client-s3 lazily. */
    injectedOps?: SkillS3ObjectOps | undefined);
    private getOps;
    private skillKey;
    private indexKey;
    get(id: string): Promise<SkillDefinition | null>;
    put(skill: SkillDefinition): Promise<void>;
    delete(id: string): Promise<void>;
    index(): Promise<SkillIndexItem[]>;
    private writeIndex;
    /**
     * Read index.json; when missing or unparsable, rebuild it from a listing
     * of the skills/ prefix and persist the rebuilt document (self-heal).
     */
    private readOrRebuildIndex;
}
