Repository navigation
Undefined v3.17.1
v3.17.1 交付体积边界收敛
本版本收敛「内容一变大就发不出去」的两处交付边界:合并转发不再因为顶层节点塞满全文而被 QQ 拒收,长图不再因为页面自身更窄而右侧留白;同时补上图片消息段与 Agent 私有工具的静默丢失点。
变更内容
- 长图宽度自适应:
layout=long时width改为上限,渲染前探测页面自身布局宽度(html/body盒宽与后代最大右边界),比设定宽度窄时把视口收缩到「内容宽度 + 2 ×padding」(下限 320),两侧不再留白。只在页面自己更窄时收敛,铺满视口的响应式页面(含 Markdown 模板)宽度与旧版完全一致;探测失败只记日志并保持原视口,不影响渲染本身。[render].long_image_default_width语义随之变为上限,缓存键补上收敛参数。 - 合并转发预览收敛:NapCat packet 模式的转发卡片把顶层节点文本全部写进
news预览,顶层文本量因此约等于卡片体积,约 14KB 会被 QQ 以 retcode=1200(发送转发消息(res_id:… 失败)拒收。MessageSender在群聊与私聊发送前统一下沉:顶层直接文本合计超过 2000 字时,按文本量从大到小把节点内容改为 ≤1200 字的嵌套节点,嵌套节点段原样保留、不递归;发送被拒时以 error 级别记录节点数、顶层文本量、段数与图片数,便于定位。 - Bilibili 图文正文改为按单节点 1200 字(
format.NODE_TEXT_BUDGET)与单节点 9 张图切分,节点名形如正文 1/12;正文超过一个节点时整体收进顶层正文节点的嵌套内容,让卡片体积与正文长度解耦,不再出现「图文越长越容易被拒收」。未超预算时仍是单个顶层正文节点,结构与旧版一致。 - 图片消息段不再静默丢失:OneBot 图片段同时带 NapCat 的
fileid 与可下载url,先用get_image解析file;解析失败或返回的既不是 HTTP URL 也不是本地路径时(典型是 NapCat 富媒体下载超时只给裸文件名),回落到段内url登记远程附件。 - 修复 Agent 私有工具全部无法加载:随包技能的 handler 模块名一律以真实包根
Undefined/skills计算,agents/<agent>/tools/<tool>/handler.py不再被算成不存在的Undefined.skills.tools.<tool>;此前这些工具会在注册阶段被记入load_error并从 schema 中排除。不随包的目录(测试或外部注入)保持原有上溯规则。 - 裸数字不再误判为 Douyin aweme_id:只有不落在任何链接内的 16–25 位数字才算裸 ID,
bilibili.com/opus/933099353259638816这类链接里的数字不再让同一张图文链接同时触发抖音管线。 - 部署后的首次启动改为手动:
uv run deploy up在container与host模式统一写入[webui].autostart_bot = false,并在输出里给出「填配置 → NapCat 扫码 → WebUI 点启动机器人」的顺序,避免容器一起来就连不上未登录的协议端;文件发送同时从url改为stream([onebot].file_send_mode = "stream"),不再依赖共享发送目录或 Runtime 下载地址。 - 文档重排:新增面向使用者的 Docker 一键部署指南(环境准备、向导选项、首次配置与 QQ 登录、远程访问、可选服务、日常管理与排查),README 与部署指南统一为「源码部署 → Docker 一键部署 → pip / uv tool」的推荐顺序,并补上镜像构建与维护说明。