/** User-attachment prompt section: describes uploaded files without reading file bytes. */
import type { TextContent } from '../../ai/types.js';
import type { AgentFileUpload } from '../../contracts/agent-uploads.js';
declare function basename(name: string): string;
declare function lowerExt(name: string): string;
declare function stem(name: string): string;
declare function formatBytes(bytes: number): string;
/** Strip path traversal segments and prompt-hostile characters from each segment. */
declare function sanitizeStoragePath(storageName: string): string;
/** Collapse newlines, strip markdown control chars, truncate. */
declare function sanitizeForPrompt(value: string): string;
declare function fallbackAttachmentId(originalName: string): string;
/** Build the "User Attached Files" section, or empty string when no files. */
export declare function buildUploadContextSection(files: readonly AgentFileUpload[]): string;
/**
 * Render uploads as a content block on the user `AgentMessage`.
 *
 * Wraps `buildUploadContextSection` to keep one source of truth for the rendered
 * text. Empty input → null (composer drops nulls).
 */
export declare function buildUploadsBlock(files: readonly AgentFileUpload[] | undefined): TextContent | null;
export declare const __test__: {
    basename: typeof basename;
    lowerExt: typeof lowerExt;
    stem: typeof stem;
    formatBytes: typeof formatBytes;
    sanitizeStoragePath: typeof sanitizeStoragePath;
    sanitizeForPrompt: typeof sanitizeForPrompt;
    fallbackAttachmentId: typeof fallbackAttachmentId;
};
export {};
//# sourceMappingURL=uploads.d.ts.map