export type StoragePolicyPurpose = "avoid-repeat" | "record" | "cursor" | "counter" | "observation";
export type StoragePolicyScope = "task" | "workspace";
export type StorageIdStrategy = "canonical-url-or-link" | "entity-key" | "date-bucket" | "content-hash";
export type StorageErrorBehavior = "fail_closed" | "continue_with_warning";
export type StoragePolicySource = "auto" | "manual" | "migration";
export interface StorageReadRule {
    timing: "before-candidate-action" | "before-run" | "before-observation";
    action: "has" | "get" | "count" | "list";
    idFrom?: StorageIdStrategy;
    bindAs?: string;
    onFound?: "skip-target" | "compare-before-writing" | "continue";
}
export interface StorageWriteRule {
    trigger: "after-verified-action" | "after-observation" | "after-progress" | "after-run";
    action: "put";
    idFrom: StorageIdStrategy;
    valueHint?: string;
    metaHint?: string[];
}
export interface StoragePolicy {
    version: 1;
    id: string;
    purpose: StoragePolicyPurpose;
    scope: StoragePolicyScope;
    collection: string;
    target: "acted-item" | "observed-entity" | "run" | "cursor" | "date-bucket";
    idStrategy: StorageIdStrategy;
    idHint?: string;
    readBefore?: StorageReadRule[];
    writeAfter?: StorageWriteRule[];
    errorBehavior: StorageErrorBehavior;
    source: StoragePolicySource;
    description?: string;
}
export interface StoragePolicyTaskInput {
    id: string;
    name?: string;
    prompt?: string;
    storagePolicies?: StoragePolicy[];
    storagePolicyMode?: "auto" | "off";
}
export declare function taskStorageCollection(taskId: string, suffix: string): string;
export declare function hasStorageIntent(text: string): boolean;
export declare function inferStoragePoliciesForTask(task: StoragePolicyTaskInput): StoragePolicy[];
export declare function normalizeStoragePolicies(policies: unknown, taskId: string): StoragePolicy[];
export declare function mergeAutoStoragePolicies(task: StoragePolicyTaskInput): StoragePolicy[];
export declare function renderStoragePolicySection(policies: StoragePolicy[]): string;
export declare class StoragePolicyRuntimeTracker {
    private readonly policies;
    private calls;
    private reminderSent;
    constructor(policies: StoragePolicy[]);
    recordStoreCall(action: string, collection: unknown): void;
    completionReminder(): string | null;
}
