/** * 日志写入侧可见的元素最小形状:采集器传入 h 实例,回填传入镜像对象, * 两者结构同形,提取逻辑不区分来源。 */ export interface LogTextElement { type: string; attrs?: Record | null; children?: ReadonlyArray; } export interface LogTextMessage { content?: string; elements?: ReadonlyArray; user?: { id?: string; name?: string; }; quote?: LogTextMessage; } /** 适配器会将引用从正文中分离;采集与回填在此还原为同一元素结构。 */ export declare const toMessageElements: (message: LogTextMessage) => ReadonlyArray; /** * at 目标的用户昵称解析。与说话人标签同一口径(bot.getUser().name), * 使「@昵称」能与聊天记录中的说话人昵称互相指认;返回 null 时退回 @id。 * 同步签名:渲染与实时入账不得因解析让出事件循环,异步查询留在通道层。 */ export type AtLabelResolver = (userId: string) => string | null; /** * 消息元素到日志文本的统一提取(同步纯函数):文本元素直取正文,文字 * 格式容器递归提取正文(br/段落边界换行),非文本元素替换为占位说明, * 元素标签的序列化形式不得进入模型可见历史。采集与回填共用。 */ export declare const elementsToLogText: (elements: ReadonlyArray | null | undefined, resolveAtLabel?: AtLabelResolver) => string; /** * 收集渲染会实际展开的 at 目标 id,遍历规则与 appendElementText 共用 * 同一文字容器集合——占位元素内部的 at 对输出不可见,不进入查询范围。 */ export declare const collectVisibleAtTargetIds: (elements: ReadonlyArray, ids: Set) => void;