import type { ReadonlyJSONObject } from "assistant-stream/utils";
import type { AssistantCloudAPI } from "./AssistantCloudAPI.js";
export type CloudMessage = {
    id: string;
    parent_id: string | null;
    height: number;
    created_at: Date;
    updated_at: Date;
    format: "aui/v0" | string;
    content: ReadonlyJSONObject;
    external_id?: string | null | undefined;
    /** Present on a message that had a run lease: its running lease, or else its latest ended one. */
    run?: CloudMessageRun | undefined;
};
export type CloudMessageRun = {
    /** A lease runs until its holder ends it; the server never expires one. */
    status: "running" | "ended";
    /** Time since the lease's last heartbeat, measured by the server when it listed the message. */
    last_heartbeat_ms_ago: number;
};
/** A run lease the server granted. */
export type CloudRunLease = {
    lease_id: string;
    heartbeat_interval_ms: number;
};
type AssistantCloudThreadMessageListQuery = {
    format?: string;
    limit?: number;
    after?: string;
};
type AssistantCloudThreadMessageListResponse = {
    messages: CloudMessage[];
};
type AssistantCloudThreadMessageCreateBody = {
    parent_id: string | null;
    format: "aui/v0" | string;
    content: ReadonlyJSONObject;
    external_id?: string | undefined;
    parent_external_id?: string | undefined;
    /** Opens a run lease on the stored message in the same request. */
    open_run?: true | undefined;
    /** Writes the message with `external_id` as the holder of this lease. */
    lease_id?: string | undefined;
};
type AssistantCloudMessageCreateResponse = {
    message_id: string;
    /** Set when `open_run` opened a lease. */
    run?: CloudRunLease | undefined;
};
type AssistantCloudThreadMessageUpdateBody = {
    content: ReadonlyJSONObject;
    /** Writes as the holder of this run lease, which renews it. */
    lease_id?: string | undefined;
};
export type AssistantCloudThreadMessageFeedbackBody = {
    type: "positive" | "negative";
    comment?: string;
};
export type AssistantCloudThreadMessageFeedbackResponse = {
    feedback_id: string;
    type: "positive" | "negative";
    comment?: string | null;
};
export declare const decodeCloudMessage: (value: unknown, field: string) => CloudMessage;
export declare class AssistantCloudThreadMessages {
    private cloud;
    constructor(cloud: AssistantCloudAPI);
    list(threadId: string, query?: AssistantCloudThreadMessageListQuery): Promise<AssistantCloudThreadMessageListResponse>;
    create(threadId: string, body: AssistantCloudThreadMessageCreateBody): Promise<AssistantCloudMessageCreateResponse>;
    update(threadId: string, messageId: string, body: AssistantCloudThreadMessageUpdateBody): Promise<void>;
    delete(threadId: string, messageIds: string[]): Promise<void>;
    feedback(threadId: string, messageId: string, body: AssistantCloudThreadMessageFeedbackBody): Promise<AssistantCloudThreadMessageFeedbackResponse>;
}
export {};
//# sourceMappingURL=AssistantCloudThreadMessages.d.ts.map