import { type Static } from "@sinclair/typebox"; import type { EventId } from "./EventId.js"; /** Longest human-readable folder name Rig stores. */ export declare const FOLDER_NAME_MAX_LENGTH = 200; /** Longest description or rules text Rig stores for one folder. */ export declare const FOLDER_TEXT_MAX_LENGTH = 8000; /** * Longest folder icon Rig stores. Only an emoji is accepted for now, and a single emoji can be a * long grapheme cluster once skin tones, gender signs, and zero-width joiners are counted. */ export declare const FOLDER_ICON_MAX_LENGTH = 64; /** * One folder in the virtual tree. * * Folders are nested only virtually: `parentId` places a folder in the tree, while `path` is a flat * storage directory named after the folder's opaque id. Moving a folder rewrites `parentId` and * `orderKey` and never touches the filesystem. */ export declare const folderSchema: import("@sinclair/typebox").TObject<{ archivedAt: import("@sinclair/typebox").TOptional; createdAt: import("@sinclair/typebox").TNumber; /** What the folder is for, shown to people and given to agents working inside it. */ description: import("@sinclair/typebox").TOptional; /** A single emoji. Pictures and built-in icons are not stored yet. */ icon: import("@sinclair/typebox").TOptional; id: import("@sinclair/typebox").TString; name: import("@sinclair/typebox").TString; /** Fractional index ordering this folder among every direct child of its parent. */ orderKey: import("@sinclair/typebox").TString; /** Absent for a folder at the root of the tree. */ parentId: import("@sinclair/typebox").TOptional; /** Flat storage directory holding this folder's files. */ path: import("@sinclair/typebox").TString; /** Standing instructions every agent working in this folder must follow. */ rules: import("@sinclair/typebox").TOptional; /** True only for the root represented by one Murmur folder-sharing group. */ shared: import("@sinclair/typebox").TBoolean; updatedAt: import("@sinclair/typebox").TNumber; version: import("@sinclair/typebox").TNumber; }>; export type Folder = Static; export declare const folderItemTargetSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"project">; projectId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"workspace">; workspaceId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ documentId: import("@sinclair/typebox").TString; kind: import("@sinclair/typebox").TLiteral<"document">; }>]>; export type FolderItemTarget = Static; export declare const folderItemSchema: import("@sinclair/typebox").TObject<{ archivedAt: import("@sinclair/typebox").TOptional; createdAt: import("@sinclair/typebox").TNumber; folderId: import("@sinclair/typebox").TString; id: import("@sinclair/typebox").TString; /** Shared fractional index ordering this item with the folder's child folders. */ orderKey: import("@sinclair/typebox").TString; target: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"project">; projectId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"workspace">; workspaceId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ documentId: import("@sinclair/typebox").TString; kind: import("@sinclair/typebox").TLiteral<"document">; }>]>; updatedAt: import("@sinclair/typebox").TNumber; version: import("@sinclair/typebox").TNumber; }>; export type FolderItem = Static; export declare const createFolderItemRequestSchema: import("@sinclair/typebox").TObject<{ afterId: import("@sinclair/typebox").TOptional>; id: import("@sinclair/typebox").TOptional; mutationId: import("@sinclair/typebox").TOptional; target: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"project">; projectId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"workspace">; workspaceId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ documentId: import("@sinclair/typebox").TString; kind: import("@sinclair/typebox").TLiteral<"document">; }>]>; }>; export type CreateFolderItemRequest = Static; export declare const moveFolderItemRequestSchema: import("@sinclair/typebox").TObject<{ afterId: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>; folderId: import("@sinclair/typebox").TString; mutationId: import("@sinclair/typebox").TOptional; }>; export type MoveFolderItemRequest = Static; export declare const createFolderRequestSchema: import("@sinclair/typebox").TObject<{ description: import("@sinclair/typebox").TOptional; icon: import("@sinclair/typebox").TOptional; /** Client-chosen cuid2 identity. Repeating it returns the same folder. */ id: import("@sinclair/typebox").TOptional; name: import("@sinclair/typebox").TString; mutationId: import("@sinclair/typebox").TOptional; parentId: import("@sinclair/typebox").TOptional; rules: import("@sinclair/typebox").TOptional; }>; export type CreateFolderRequest = Static; /** * Changing a folder's own fields. An explicit `null` clears an optional field; an absent field is * left as it is. */ export declare const updateFolderRequestSchema: import("@sinclair/typebox").TObject<{ description: import("@sinclair/typebox").TOptional>; icon: import("@sinclair/typebox").TOptional>; name: import("@sinclair/typebox").TOptional; mutationId: import("@sinclair/typebox").TOptional; rules: import("@sinclair/typebox").TOptional>; }>; export type UpdateFolderRequest = Static; /** * One drag-and-drop. `parentId` is the folder it was dropped into, `null` for the root, and * `afterId` is the folder or item it was dropped below, `null` when it landed first. Rig derives * the shared fractional order key from that pair, so a client never invents one. */ export declare const moveFolderRequestSchema: import("@sinclair/typebox").TObject<{ afterId: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>; mutationId: import("@sinclair/typebox").TOptional; parentId: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>; }>; export type MoveFolderRequest = Static; export declare const folderErrorCodeSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"invalid_request">, import("@sinclair/typebox").TLiteral<"folder_not_found">, import("@sinclair/typebox").TLiteral<"parent_not_found">, import("@sinclair/typebox").TLiteral<"sibling_not_found">, import("@sinclair/typebox").TLiteral<"item_not_found">, import("@sinclair/typebox").TLiteral<"target_not_found">, import("@sinclair/typebox").TLiteral<"cycle">, import("@sinclair/typebox").TLiteral<"version_conflict">, import("@sinclair/typebox").TLiteral<"storage_unavailable">, import("@sinclair/typebox").TLiteral<"shared_folder_boundary">, import("@sinclair/typebox").TLiteral<"shared_folder_contents_forbidden">]>; export type FolderErrorCode = Static; export declare const folderErrorResponseSchema: import("@sinclair/typebox").TObject<{ error: import("@sinclair/typebox").TObject<{ code: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"invalid_request">, import("@sinclair/typebox").TLiteral<"folder_not_found">, import("@sinclair/typebox").TLiteral<"parent_not_found">, import("@sinclair/typebox").TLiteral<"sibling_not_found">, import("@sinclair/typebox").TLiteral<"item_not_found">, import("@sinclair/typebox").TLiteral<"target_not_found">, import("@sinclair/typebox").TLiteral<"cycle">, import("@sinclair/typebox").TLiteral<"version_conflict">, import("@sinclair/typebox").TLiteral<"storage_unavailable">, import("@sinclair/typebox").TLiteral<"shared_folder_boundary">, import("@sinclair/typebox").TLiteral<"shared_folder_contents_forbidden">]>; message: import("@sinclair/typebox").TString; }>; }>; export type FolderErrorResponse = Static; export declare const listFoldersResponseSchema: import("@sinclair/typebox").TObject<{ folders: import("@sinclair/typebox").TArray; createdAt: import("@sinclair/typebox").TNumber; /** What the folder is for, shown to people and given to agents working inside it. */ description: import("@sinclair/typebox").TOptional; /** A single emoji. Pictures and built-in icons are not stored yet. */ icon: import("@sinclair/typebox").TOptional; id: import("@sinclair/typebox").TString; name: import("@sinclair/typebox").TString; /** Fractional index ordering this folder among every direct child of its parent. */ orderKey: import("@sinclair/typebox").TString; /** Absent for a folder at the root of the tree. */ parentId: import("@sinclair/typebox").TOptional; /** Flat storage directory holding this folder's files. */ path: import("@sinclair/typebox").TString; /** Standing instructions every agent working in this folder must follow. */ rules: import("@sinclair/typebox").TOptional; /** True only for the root represented by one Murmur folder-sharing group. */ shared: import("@sinclair/typebox").TBoolean; updatedAt: import("@sinclair/typebox").TNumber; version: import("@sinclair/typebox").TNumber; }>>; /** Ordered independently inside each item's own folder. */ items: import("@sinclair/typebox").TArray; createdAt: import("@sinclair/typebox").TNumber; folderId: import("@sinclair/typebox").TString; id: import("@sinclair/typebox").TString; /** Shared fractional index ordering this item with the folder's child folders. */ orderKey: import("@sinclair/typebox").TString; target: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"project">; projectId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"workspace">; workspaceId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ documentId: import("@sinclair/typebox").TString; kind: import("@sinclair/typebox").TLiteral<"document">; }>]>; updatedAt: import("@sinclair/typebox").TNumber; version: import("@sinclair/typebox").TNumber; }>>; /** Durable tree revision represented by this response. */ revision: import("@sinclair/typebox").TInteger; }>; export type ListFoldersResponse = Static; export interface FolderResponse { folder: Folder; /** Durable tree revision committed with this folder response. */ revision: number; } export declare const folderItemResponseSchema: import("@sinclair/typebox").TObject<{ item: import("@sinclair/typebox").TObject<{ archivedAt: import("@sinclair/typebox").TOptional; createdAt: import("@sinclair/typebox").TNumber; folderId: import("@sinclair/typebox").TString; id: import("@sinclair/typebox").TString; /** Shared fractional index ordering this item with the folder's child folders. */ orderKey: import("@sinclair/typebox").TString; target: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"project">; projectId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ kind: import("@sinclair/typebox").TLiteral<"workspace">; workspaceId: import("@sinclair/typebox").TString; }>, import("@sinclair/typebox").TObject<{ documentId: import("@sinclair/typebox").TString; kind: import("@sinclair/typebox").TLiteral<"document">; }>]>; updatedAt: import("@sinclair/typebox").TNumber; version: import("@sinclair/typebox").TNumber; }>; revision: import("@sinclair/typebox").TInteger; }>; export type FolderItemResponse = Static; export interface BaseFolderEvent { createdAt: number; data: TData; id: EventId; type: TType; } /** * A light invalidation for the folder catalog. * * Folder entities travel by request-response. The durable revision lets a client keep loading until * its snapshot includes every invalidation it has already observed. */ export type FolderEvent = BaseFolderEvent<"folders_changed", { mutationId?: string; revision: number; }>; /** * How long a chat may stay in Unsorted before Rig puts it away. A chat that never files itself into * a folder is archived once this has passed since it was created. */ export declare const UNSORTED_SESSION_ARCHIVE_AFTER_MS: number;