import type { ChatMessage, FileContentPart, ImageUrlContentPart, MessageContent } from "./message"; /** Ordinary chat uses business copy; developer mode may retain diagnostics. */ export declare function chatErrorForDisplay(message: string, developer?: boolean): string; export declare function normalizeMessageContent(content: unknown): MessageContent; export declare function getTextContent(content: MessageContent): string; export declare function isSystemReminderText(text: string): boolean; export declare function isLegacyForkContextText(text: string): boolean; /** * 平台自己写进去、不该露给用户的内部提示。 * * 服务端的消息导航目录有一份同名同语义的 Python 实现 * (`server/.../routes/sessions.py` 的 `_is_hidden_internal_message`):客户端靠它决定 * 渲染不渲染,服务端靠它决定进不进目录。改这里必须同时改那边,否则目录会列出没有对应 * 行的死条目,或者把内部提示原文当标题露出去。 */ export declare function isHiddenInternalMessage(message: Pick, options?: { includeLegacyForkContext?: boolean; }): boolean; export declare function buildMessageContent(text: string, attachments: Array<{ kind: "file"; name: string; uploadedPath?: string; textContent?: string | null; mimeType?: string; }>): MessageContent; export declare function contentPreview(content: MessageContent, maxLen?: number): string; /** `/` 选中的技能当前处于什么状态,决定智能体要不要先装、先加载。 */ export interface SkillMentionAvailability { /** 本地已有(内置 / 技能目录 / 会话已加载),直接可用。 */ local?: boolean; /** Blade Hub 上该账号是否已安装。本地技能恒为 true。 */ installed?: boolean; } /** * Transform a skill mention into a natural language skill invocation. * Strips the `name` tag from the raw input and prepends the instruction. * * Hub 技能装没装、加载没加载,用户不需要知道,但智能体需要——所以把状态翻译 * 成它能直接照做的 CLI 步骤。不传 availability 时按本地技能处理,与旧行为一致。 */ export declare function transformSlashCommand(skillName: string, rawInput: string, { local, installed }?: SkillMentionAvailability): string; export interface ParsedTextAttachment { name: string; uploadedPath?: string; } export interface ParsedTextContext { label: string; content: string; } /** * Extract `[附件: name]` and `[上下文: label]` tags from text parts and return * the cleaned text plus the collected attachment / context metadata. 每个 text * part 独立匹配,以避免跨 part 拼接打乱正则。 */ export declare function extractTextAttachments(content: MessageContent): { cleanText: string; attachments: ParsedTextAttachment[]; contexts: ParsedTextContext[]; }; export declare function getImageParts(content: MessageContent): ImageUrlContentPart[]; export declare function getFileParts(content: MessageContent): FileContentPart[]; interface MessageGroup { root: ChatMessage | null; childLoops: { loopName: string; messages: ChatMessage[]; }[]; } export declare function groupMessagesByLoop(messages: ChatMessage[]): MessageGroup[]; /** A typed wake input stays internal for navigation, but has a visible notice. */ export declare function isBackgroundWakeMessage(message: Pick): boolean; export {};