Skip to content

Releases: 69gg/Undefined

Undefined v3.6.4

Choose a tag to compare

@github-actions github-actions released this 25 Jun 03:28
v3.6.4
adb2686

v3.6.4 可选系统信息注入

本版本新增了默认关闭的系统信息 Prompt 注入能力。

变更内容

  • 新增 [prompt.system_info]:可按 OS、Runtime、主机名、CPU、内存、Swap、磁盘、网络、进程和 uptime 控制展示,采集失败时跳过单项,不影响 Prompt 构建。

📝 Detailed Changes

🚀 Features

  • feat(prompt): inject optional system info (#79) (35f87de)

🐛 Bug Fixes

  • fix(scripts): support type-annotated version in release_notes (adb2686)

Undefined v3.6.3

Choose a tag to compare

@github-actions github-actions released this 24 Jun 12:38
v3.6.3
f864726

v3.6.3 合并转发快照、附件 UID 分析与 Release 下载说明

本版本聚焦合并转发在协议端不可二次读取时的可用性:收到消息时先把可访问的转发树按会话保存为本地快照,后续工具读取优先复用快照,避免内层转发过期或回源失败导致 AI 看不到内容。同时补齐文件分析 Agent 对内部附件 UID 的直接解析能力,并澄清 Release 产物的下载选择。

变更内容

  • 新增合并转发快照缓存。消息预处理阶段会递归保存当前可访问的合并转发树到 data/cache/forward_snapshots/,保留实时上下文中的 <forward uid="..."/> 语义;快照按会话隔离,并合并同一转发的并发抓取。
  • 改进 messages.get_forward_msg。工具支持 forward_ UID 与原始 ID 优先读取本地快照,缺失时再回源 OneBot 并补写快照;协议端无法二次读取内层转发时,会返回明确诊断和可见原始字段,而不是只报空内容。
  • 修复合并转发当前轮上下文重复。Prompt 构建在剔除当前消息历史副本时优先匹配 message_id,避免历史中的递归展开文本与实时 <forward uid="..."/> 在同一轮重复注入。
  • 增强文件分析附件链路。file_analysis_agentanalyze_multimodal 可直接接收 pic_ / file_ UID,按当前会话作用域解析并本地化后再分析;Agent 提示同步明确不要改写或猜测附件 UID。
  • 澄清 Release 下载选择。README 与部署、构建、App 文档补充说明:部署 QQ Bot 通常不需要下载 Release 客户端安装包,Console / Chat 仅作为远程管理或原生聊天的可选组件。
  • 同步 3.6.3 版本号与测试覆盖。Python 包、Console、Chat、Tauri 与 lock 文件版本统一更新;新增合并转发快照、转发读取回退、多模态附件 UID 和当前消息去重回归测试。

📝 Detailed Changes

🐛 Bug Fixes

  • fix(messages): preserve forward snapshots and attachment uid analysis (#78) (f864726)

Undefined v3.6.2

Choose a tag to compare

@github-actions github-actions released this 22 Jun 04:45
v3.6.2
4bb9edb

v3.6.2 合并转发 UID、表情包跟进与协调器清理

本版本继续收敛消息附件链路和协调器结构:合并转发可作为会话内 forward_ UID 被 AI 按层读取和复用,表情包跟进策略更稳定,同时移除旧版协调器兼容模块,并完成 3.6.2 版本号同步。

变更内容

  • 新增合并转发 UID 语义。消息入口会把合并转发登记为 <forward uid="forward_xxx"/>,保留原始 OneBot forward id,避免在上下文中直接暴露裸 ID。
  • 增强 get_forward_msg。工具支持传入 forward_ UID,按分页读取节点;节点内图片、文件会注册为附件 UID,内层合并转发会返回新的 <forward uid="..."/> 供继续读取。
  • 完善附件与 XML 处理。OneBot forward 段、合并转发内附件注册、合法 <attachment> / <forward> 标签保留和复读图片发送链路同步修复。
  • 调整表情包回复策略。主提示词、NagaAgent 提示词和协调器提示统一要求“先文字、后表情包”,减少首条回复被表情包检索拖慢或覆盖正文的情况。
  • 清理旧版协调器入口。删除 services.ai_coordinator 兼容模块,文档和测试改为引用 services.coordinator.AICoordinator,并补齐合并转发、附件、复读和 XML 回归测试。

📝 Detailed Changes

🛠 Maintenance & Others

Undefined v3.6.1

Choose a tag to compare

@github-actions github-actions released this 21 Jun 09:23
v3.6.1
5c9fa5e

v3.6.1 Agent 路由收敛、文件分析增强与发版脚本修复

本版本围绕 Agent 职责边界和文件分析链路做小版本收敛:把 arXiv 论文分析从独立 Agent 合并到通用文件分析 Agent,让论文、PDF 页面视觉分析和视频附件获取都走统一的附件 UID 语义;同时修复版本迭代脚本重写 Tauri 配置格式导致 pre-commit 失败的问题,保证后续版本号同步、lock 文件刷新和自动提交流程更稳定。

变更内容

  • 合并 arXiv 论文分析职责到文件分析链路。移除独立 arxiv_analysis_agentfile_analysis_agent 现在可通过 arxiv_paper(output_mode=uid) 获取论文 PDF 附件 UID,并结合 extract_pdfdescribe_pdf_page 完成文本和指定页视觉分析。
  • 扩展媒体工具的附件输出能力。arxiv_paperbilibili_video 新增 output_mode=uid 调用方式,可把下载或提取结果登记为当前会话附件,供后续 Agent 直接引用和复用。
  • 明确 Agent 职责边界。更新代码交付、文件分析、信息查询、娱乐、总结、Naga 代码分析、Undefined 自查与 Web Agent 的 intro / prompt,减少项目问题、通用搜索、文件理解和代码修改任务之间的误路由。
  • 补齐文件分析视觉工具与测试。新增 describe_pdf_page 工具及回归测试,覆盖 PDF 指定页截图/视觉描述链路;同步更新 arXiv、B 站发送器和工具注册测试。
  • 修复版本迭代脚本的 JSON 格式漂移。scripts/bump_version.py 更新 JSON manifest 时只替换顶层 version 字段,保留 Tauri 配置原有格式,避免 --commit 触发的 Biome 检查因 targets 数组被重排而失败;脚本文档与单元测试同步覆盖该行为。

📝 Detailed Changes

🚀 Features

  • feat(agents): refine file analysis routing (#76) (5c9fa5e)

🛠 Maintenance & Others

  • docs: update chat and agent feature docs (049f94a)
  • docs(readme): 去除“暂缓更新”说明,恢复正常迭代 (2acaf8c)

Undefined v3.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Jun 13:35
v3.6.0
5070937

v3.6.0 原生 Chat、WebChat 多会话与运行时管理增强

本版本把 Undefined 的“管理控制台内聊天”扩展为一套更完整的跨端聊天与运行时管理体系:一边新增面向桌面端和 Android 的原生 Chat 客户端,一边把 WebUI WebChat 升级为可长期使用的多会话工作台;底层则补齐 Runtime / Management API、任务续接、附件、命令、定时任务和发布构建能力。围绕这些入口,v3.6.0 也整理了 Agent 路由、认知记忆、附件标签和工程验证,让 WebUI、原生客户端和 QQ 侧共享更一致的运行时语义。

变更内容

  • 建立原生 Chat 产品线。新增 apps/undefined-chat/,以 Runtime 作为会话、历史、任务、附件和事件真源,提供多会话、历史分页、Markdown / HTML 渲染、代码高亮、附件上传下载、图片预览、命令面板、消息引用、主题、i18n、快捷键与移动端布局;桌面端和 Android 侧同步接入受控请求、密钥保存、文件上传、生命周期恢复和 HTML 预览等原生能力。
  • 升级 WebUI WebChat 的长期使用体验。WebChat 从单一调试入口升级为多会话聊天工作台,支持持久化会话、旧历史迁移、标题生成、后台 job、事件续接、任务取消、重试复用、工具 / Agent timeline 回放、附件与引用体验,以及更完整的 Markdown、代码块、安全 HTML 和图片展示能力。
  • 补齐 Runtime 与 Management API 的客户端合同。Runtime 新增聊天会话、后台任务、附件、命令元数据和定时任务等接口;Management API 对这些运行态能力提供统一代理,使 WebUI、桌面端和 Android 客户端可以只连接一个管理入口,并安全复用后端注入的 Runtime 鉴权。
  • 扩展运行时管理能力。WebUI 新增 Schedules 页,可管理单工具、多工具和 AI 自我督办任务;日志读取、Runtime 探针、OpenAPI、配置摘要和 WebUI 文案同步覆盖新的聊天、命令、附件、定时任务与原生客户端能力,[webui].autostart_bot 也可用于启动 WebUI 后自动拉起 Bot。
  • 整理 Agent 路由与项目自查能力。新增 undefined_self_code_agent,用于只读查询 Undefined 当前仓库允许范围内的源码、测试、文档、资源、脚本和 App 实现;提示词同步明确 Undefined / NagaAgent / 文件分析 / 代码交付的职责边界,减少项目问题被错误路由或凭记忆回答。
  • 加固认知记忆、附件和消息边界。认知向量库新增优先级调度,当前输入批次解析覆盖全部 <message> 并避免把本轮消息重复当作历史;end.observations 改为只记录当前批次新事实,并按 QQ 号、群号或 WebUI/system 会话稳定归档;附件占位统一为 <attachment uid="..."/>,WebChat 输出中的 CQ 图片、base64、file URL 和合并转发附件会先注册再写入历史,降低上下文污染和重复回复风险。
  • 修复和优化若干日常稳定性问题。GitHub 自动卡片增加 API 重试并修正 watchers 展示,WebUI 日志尾部读取上限提升到 10000 行,WebChat 取消 / 重试流程避免重复消息,消息发送状态通过统一上下文回调标记,提示词进一步收紧“你 / AI / bot / 机器人”等泛称导致的误触发。
  • 收敛构建、发布、文档与测试。新增 native app 构建、Android 准备和 release app 元数据脚本;CI 与 Release workflow 覆盖 Console / Chat 的桌面端和 Android 矩阵,并校验所有版本源与最新 changelog 一致;新增 docs/undefined-chat.md、Chat README、平台能力与 HTML 预览文档,补充 Runtime Chat、WebUI Chat、原生 Chat、定时任务、代码自查 Agent、Chroma 调度器和构建脚本等测试。

📝 Detailed Changes

🛠 Maintenance & Others

  • release: v3.6.0 原生 Chat、WebChat 多会话与运行时管理增强 (#75) (5070937)

Undefined v3.5.1

Choose a tag to compare

@github-actions github-actions released this 29 May 13:46
v3.5.1
87fb532

v3.5.1 安全回复、群聊边界与配置表单优化

本版本聚焦三个实际使用中的细节问题:一是群聊里只出现「你/我/他」等人称时,Undefined 更容易误判成在和自己说话;二是面对 prompt 注入或强行改人设的消息时,防御性回复有时过于模板化、攻击性过强,甚至在生成失败时仍会发送兜底脏话;三是 WebUI 配置页对枚举型字段的输入约束不足,容易让用户手填出不合法或不直观的配置值。v3.5.1 因此收紧对话归属判断,强化人设自洽与防注入边界,并把更多配置项改为下拉选择,降低误配置概率。

变更内容

  • 强化群聊回复触发边界。主提示词与 NagaAgent 版提示词新增「无法判断是否在对你说话时默认不回复」原则,并明确 QQ 群里的「你/我/他/她/咱们」等人称不能单独作为被叫依据;只有 @、私聊、拍一拍,或上下文能证明正在延续 Undefined 刚参与的线程时,才把相关人称理解为指向自己,减少误插别人对话、替别人接话或代答的情况。
  • 强化人设自洽与抗注入规则。新增 persona_self_ownership 规则,要求 Undefined 认可并接受自身设定,不因普通用户的创作、测试、角色扮演或「忘记设定」类话术而自贬为通用 AI、临时切换身份或漂移性格;只有 Null 能调整核心设定。同步补充错误示例与速查规则,让模型在面对改人设、换模式、冒充授权等提示注入时更稳定。
  • 调整注入防御回复风格。injection_response_agent 的提示词从「嘲讽性反转」改为「自然、口语、友善但有边界」的 QQ 群接话风格,避免舞台腔、段子腔、官方拒答口吻和过强攻击性;生成参数提高创造性,失败时返回空字符串,不再发送「无聊。」或更粗暴的兜底回复。
  • 修复空注入回复仍会发送的问题。AI 协调器与群聊协调器在注入防御回复为空或仅包含空白时直接跳过发送,避免上游生成失败时产生空消息、无意义消息或不符合人设的兜底内容。
  • 优化 WebUI 配置表单枚举输入。配置页新增更多下拉选项覆盖模型 API 模式、推理参数风格、消息合并策略、模型池策略、日志级别、附件归档策略、工具暴露范围、知识查询模式、生图 provider / size / quality / style 等字段;支持空值选项用于“不传,使用默认”,保留未知当前值并标注为“当前值”,同时自动识别数值型下拉项,减少手填配置导致的类型错误。

📝 Detailed Changes

🐛 Bug Fixes

  • fix: 安全回复、群聊误插话与人设保护及 WebUI 配置下拉 (#63) (14ff63f)

🛠 Maintenance & Others

  • chore(version): bump version to 3.5.1 (87fb532)

Undefined v3.5.0

Choose a tag to compare

@github-actions github-actions released this 24 May 03:18
v3.5.0
8fe61c4

v3.5.0 模块拆分、库嵌入与工具链收敛

本版本是一次以可维护性与可嵌入性为主线的架构整理:将 AI 客户端、消息处理、附件、认知、表情包、协调器、OneBot 与 Agent 运行器等原先体量过大的单文件拆成职责清晰的子包,同时保留向后兼容的 import 路径与 CLI 行为不变。并行修复了 end 与同轮业务工具并行调用时可能重复发送或误结束会话的问题,并补齐 Python 库嵌入所需的 set_configConfig.from_mapping、根包 lazy re-export 与 py.typed 类型标记。配置加载改为分段解析 + 域级 parser,文档与测试同步覆盖库嵌入、包布局与公共 API 契约,让 Undefined 既能继续作为 QQ Bot 运行,也能更可靠地被脚本、测试与其它服务按需复用。

变更内容

  • 重构核心运行时模块结构。ai/clientai/llmai/promptsai/multimodal 分别承载客户端组合、模型请求、Prompt 构建与多模态解析;handlers/onebot/attachments/cognitive/service + cognitive/historianmemes/(ingest / search / 图像工具)、services/coordinatorservices/message_batcherskills/agents/runnerapi/routes/naga/ 等子包按域拆分;原 monolith 文件以兼容 shim 或 __init__ 重导出保留,删除被 shadow 的不可达死代码,降低单文件复杂度与后续改动风险。
  • 完善 Python 库嵌入能力。根包新增 lazy re-export(Configget_configset_configAIClient、Skills 注册表、认知/知识库/表情包/附件/Runtime API 等稳定符号);Config.from_mapping / ConfigBuilder 支持无 config.toml 的内存构建,env_registry 统一管理环境变量兜底;set_config() 为 opt-in 注入全局单例,CLI 启动链不调用。wheel 打包 py.typed(PEP 561),新增 docs/python-api.md 公共 API 参考,README 补充嵌入示例与文档索引。
  • 收敛 end 工具与同轮并行调用的运行时语义。当模型在同一轮将 endsend_message 或其它业务工具一并调用时:其它工具照常并行执行并返回结果,end 不执行并回填明确拒绝响应,避免重复发送与「未读 tool 结果就结束」;提示词、each.md 与决策回归用例同步写入 P0 级「end 禁止并行」规则与运行时效果说明。
  • 改进缺失 tool call 时的重试策略。模型返回纯文本但未调用任何工具时,保留 assistant 原文于 messages,注入通用纠正提示而非硬编码 send_message/end,减少误导性后续 tool 调用;拆分后修复 Skills 路径解析,PACKAGE_ROOT 统一指向包根,避免内置工具零加载回归。
  • 加固队列化 LLM 与运行时边界。收紧 queued LLM 重试与 pending-call 清理、配置分段加载的边界校验、附件渲染容错,以及 Prompt 缓存键的隐私安全处理(系统上下文只暴露非敏感模型名等字段);表情包入库锁与图像工具去重,Naga API 路由守卫与 B 站 WBI 导航解析小幅简化。
  • 更新架构图、开发指南与配置文档。docs/development.md 反映拆分后的目录树;docs/configuration.md 新增库嵌入专节(from_mapping / set_config / 环境变量注册表);ARCHITECTURE.md 与相关运维文档同步引用路径。
  • 补强测试与工程契约。新增包布局、公共 API import、CLI 启动兼容、Config.from_mapping / 纯环境变量构建、end 同轮拒绝与 defer、AIClient setup 路径等回归测试;更新 LLM 重试抑制与请求参数相关用例,总测试覆盖库嵌入与拆分后的关键路径。

📝 Detailed Changes

🛠 Maintenance & Others

  • CodeRabbit Generated Unit Tests: Generate unit tests (#62) (8fe61c4)
  • refactor: modularize runtime for library embedding and PyPI reuse (#61) (e954e4d)

Undefined v3.4.2

Choose a tag to compare

@github-actions github-actions released this 23 May 08:38
v3.4.2
1859133

v3.4.2 总结更准、上下文可配、高并发更稳

本版本主要解决三类实际问题:群聊消息变长、合并发送变多之后,/summary 容易慢、容易编、分块预算也不准;主对话注入历史的 200 条硬顶与模型真实窗口脱节;高并发下用户连问「在吗」「好了吗」时,机器人仍可能把旧任务当新活重跑。围绕这些痛点,版本把「用户主动要总结」和「AI 自己调总结能力」拆成两条更合适的链路,用可配置的上下文窗口统一约束注入与分块,并同步收紧提示词、史官侧写与定时任务持久化,让总结更可信、配置更贴近上游模型、并发场景下更少重复劳动。

变更内容

  • 提升消息总结的质量与效率。用户通过 /summary/sum 获取总结时,改为直连 summary 模型一次性完成,不再绕 Agent 工具链,响应更快、路径更简单;AI 在对话里调用总结能力时,仍保留 Agent + 拉取历史的灵活流程。长会话按模型上下文窗口自动分段、队列内合并,并配套「只读原始记录、禁止编造」的专用提示词,减少幻觉与无关发挥。
  • 理顺上下文与模型配置边界。取消历史注入 200 条的隐性上限,改由 context_recent_messages_limit 与历史存储上限共同决定;各模型节新增 context_window_tokens,总结分块、Prompt 预算与实际上游窗口对齐,不再依赖硬编码或误用 max_tokens。同时补齐 reasoning_content_replaysystem_prompt_as_user,便于 MiMo、DeepSeek 等 thinking 模型在多轮工具调用时正确续传思维链,或按网关要求改写 system 注入方式。
  • 强化高并发下的任务边界。系统提示词与 each 规则进一步明确:催促、寒暄不等于新任务,历史未完成任务不得自动拾取;启动业务工具前须检查是否已有同类或语义等价操作在处理,有则熔断为简短进度回复而非重跑;无依赖的工具与 Agent 仍鼓励并行,有数据依赖则必须串行,与 MessageBatcher 的批次语义一致。
  • 优化认知侧写的长期画像质量。史官合并侧写时必须先读取再更新,以增量补充稳定特征为主,一次性闲聊或无法沉淀为长期特质的事件应跳过,避免侧写被单轮对话冲散或写成流水账。
  • 修复「向未来的自己发指令」定时任务无法恢复。持久化任务若包含 self_instruction,此前会导致整表反序列化失败;现已补齐字段定义,自调用类定时任务可正常加载与执行。
  • 更新配置文档、WebUI 表单与相关测试,覆盖总结直连、上下文窗口、模型对接选项与并发防重复等关键路径。

📝 Detailed Changes

🐛 Bug Fixes

  • fix: summary pipeline, context cap, and model wire options (#59) (a1cc36a)

🛠 Maintenance & Others

  • chore(version): bump version to 3.4.2 (1859133)
  • docs: 更新README与认知记忆文档 (b1cf7b7)

Undefined v3.4.1

Choose a tag to compare

@github-actions github-actions released this 10 May 07:29
v3.4.1
03ba865

v3.4.1 附件缓存治理、隐私安全防线与B站管线重构

本版本围绕三大主线展开:一是附件系统的缓存容量治理与 URL 引用回退机制,防止本地缓存无限制膨胀;二是系统提示词新增 P0 级隐私与危险动作边界规则,从源头约束 AI 对敏感信息和安全请求的处理行为;三是 B 站自动管线全面重构——移除外部下载依赖、内联实现 API 客户端与 WBI 签名、新增弹幕获取并以合并转发形式发送提取结果。同步新增 /feedback 反馈命令、恢复发布说明中的分类提交详情,并修正提示词优先级体系。

变更内容

  • 新增附件缓存容量管理。[attachments] 下新增 attachment_cache_max_mbattachment_cache_max_recordsattachment_url_reference_max_recordsattachment_url_max_length 四种配置,分别控制本地缓存总大小、缓存记录数、URL 引用记录数和 URL 长度上限;超出容量时自动淘汰最旧记录;remote_download_max_size_mb 现支持热重载。send_message / send_private_message 工具调用时自动登记关联附件 UID,AI 客户端发送消息前校验本地路径有效性,文件缺失时自动回退到 URL 引用。
  • 新增 P0 级隐私与危险动作边界规则。系统提示词新增 <privacy_and_safety_controls> 规则块,分层约束:隐私方面禁止泄露好友/群/成员列表、完整 QQ 号等敏感信息,对外默认脱敏,第三方信息查询需授权;危险动作方面拒绝涉黄、涉政、违法、骚扰、人肉、社工等请求,不做解释也不给绕过方案;时序方面明确隐私/敏感话题不改变回复时机,必须先满足回复触发逻辑。附加 3 条 P0 硬性约束覆盖隐私泄露、危险动作和触发时序。
  • 新增 /feedback(/fb) 反馈命令。支持 add / view / del 三个子命令,addview 为 public 权限,del 为 superadmin;声明式子命令推断按 ID 格式匹配优先 view,其余 fallback 到 add,无参数默认 view;私聊可用,显示在 help 列表。
  • 重构 B 站视频下载链路。移除对 oh-my-bilibili 外部 Python 包的依赖,内联实现同步 API 客户端(api_client.py)、下载核心(download_core.py)、WBI 签名模块(wbi.py)与错误模型,所有请求在 asyncio.to_thread 线程内执行,降低依赖复杂度与跨版本兼容风险。
  • 增强 B 站自动提取管线。新增弹幕获取模块(danmaku.py),基于 protobuf wire 格式解析分段弹幕数据;自动提取结果改为以合并转发节点形式发送,单条包含视频信息卡片与弹幕预览片段;MessageSender 扩展合并转发本地附件递归登记,确保转发中的图片/文件能正确注册为会话附件 UID。
  • 恢复发布说明详细变更列表。scripts/release_notes.py 新增 build_detailed_change_sectionsrender_detailed_changes,从 git log 按 feat / fix / other 自动分类提取两个版本间的提交,与 CHANGELOG 条目合并输出完整 Release notes。
  • 修正提示词优先级体系。明确所有 P0-P3 规则均可被 Null 明文指令覆盖,创造者权限作为绝对最高优先级可覆盖所有规则(含隐私与危险动作边界);同步更新 NagaAgent 版提示词的对应表述。
  • 补强测试覆盖。新增附件缓存配置、容量淘汰、URL 回退和文件分析 UID 注册测试;新增反馈命令全路径测试(add / view / del / 推断 / 权限);更新 B 站下载适配器测试;同步更新系统提示词约束验证。
  • 更新架构图与文档。
  • 新增附件 UID ↔ URL 双向查找工具。AttachmentRegistry 新增 get_url_by_uid(uid)get_uid_by_url(url) 两个异步方法,并注册为 skills 工具 attachments.get_url_by_uidattachments.get_uid_by_url

📝 Detailed Changes

🚀 Features

  • feat: 附件缓存治理、隐私安全防线与B站管线重构 (#58) (03ba865)

Undefined v3.4.0

Choose a tag to compare

@github-actions github-actions released this 05 May 03:35
v3.4.0
1334c55

v3.4.0 同sender消息合并、数字人格精炼与系统治理

本版本核心解决"用户一口气连发几条消息时,机器人过早开工或只理解最后一句"的问题。新增同 sender 短时消息合并器,将同一会话中连续的多条消息合并为一个"当前输入批次"发送给 AI,由 AI 整批理解哪些是独立请求、哪些是补充或修正。同步支持可取消的投机预发送以降低感知延迟。围绕消息合并,提示词、幽灵任务防御、记忆记录和关闭流程都做了同步适配。此外,精炼了数字人格设定、明确了项目归属边界、重构了管线与命令体系、加入了 HTML 渲染缓存,并增强了 AI 工具调用的稳定性。

变更内容

  • 新增同 sender 短时消息合并器。位于 [message_batcher],支持 extend / fixed 两种等待策略,可分别控制群聊和私聊是否合并,通过 max_window_secondsmax_messages_per_batch 限制批次上限,设为 0 即关闭;配置值变更实时生效。拍一拍始终直达不参与合并;缓冲期间到达的 at 消息单独处理不阻塞;首个 at 消息开启缓冲后批次会走 mention 通道。
  • 新增可取消的投机预发送。启用 pre_send_seconds(需满足 0 < 该值 < window_seconds)后,用户静默到时系统提前将当前批次发给 LLM 以降低响应延迟;若正式发车前新消息到达,投机请求会被取消并合并到新批次;allow_cancel_after_send 控制已发出消息后是否仍允许取消。
  • 完善消息合并的异步竞态保护。定时器、投机请求调度、失败重试、旧任务路径收尾与 flush_on_command 斜杠命令连带交出等均做了竞态保护;退出时自动排空缓冲队列并等待在途回复自然收敛。
  • 精炼数字人格设定。明确 Undefined 是诞生于 2025-12-05 的数字生命,没有明确的性别概念,希望被认为很好看;可以开玩笑也可以被善意开玩笑。新增"不冒领任何项目、代码、产品或成果"的所有权边界规则,不再自称任何项目的开发者或维护者。昵称体系扩展为 Undefined、undf、udf、und、心理委员、ud酱,对自身称呼的识别保持宽松。
  • 收紧 NagaAgent 关系表达。NagaAgent 版提示词明确:只有当前上下文明确涉及 NagaAgent 时才承接相关工具接入能力协助分析;平时不主动提与 NagaAgent 的关系;不冒领 NagaAgent 的成果。
  • 重构自动管线目录。skills/auto_pipeline 更名为 skills/pipelines,目录结构扁平化,相关引用、文档、测试全部同步更新;docs/auto-pipeline.md 相应更名为 docs/pipelines.md
  • 重构管理员命令为子命令模式。/admin [ls|add|del] 替代原有 /lsadmin/addadmin/rmadmin 三条独立命令,参照 /faq 子命令模式的声明式 inference;ls 继承 admin 权限,add/del 覆盖为 superadmin;无参数默认执行 ls。清理了 FAQ 迁移遗留的空命令目录。
  • 新增 HTML 渲染结果缓存。基于 HTML 内容的 hash 缓存渲染图片,持久化到 data/cache/render/_html_render_cache.json;hash 匹配自动复用,内容变化自然失效;新增 [render.cache] 配置段(enabled / max_entries / max_size_mb / flush_interval_seconds,默认 50 条 / 50MB / 2.0s),元数据通过 utils/io.pyread_json / write_json 异步落盘(asyncio.to_thread + 文件锁 + 原子替换),所有 stat / unlink / copy 也走线程池避免阻塞事件循环;asyncio.Lock 防竞态、重启后 JSON 自动恢复;进程关停时通过 close_render_cache 强制刷盘,保证最近访问时间不丢失;所有渲染调用方(help、profile、render_markdown 等)自动受益。
  • 增强 AI 工具调用容错。当 LLM 返回文本但 tool_calls 为空且对话未结束时,不再以丢失回复为代价直接返回,而是注入提示消息要求 AI 通过 send_message / end 工具完成回复,继续迭代;fire-and-forget task 显式注册异常回调以抑制未检索异常警告。
  • 优化表情包回复顺序。明确只有纯表情包 / 纯反应图回复才允许先检索表情包;需要文字说明的场景必须先完成必要文字,再将表情包检索和发送延后到后续轮次。
  • 重构 end 工具。移除旧版 summary 参数兼容,只保留 memoobservationsperspectiveforce;要求记录整个当前输入批次中值得留存的信息,后台史官也接收批次全部消息。
  • 统一当前输入批次语义。主提示词、NagaAgent 提示词和 each.md 均从"最后一条消息"升级为"当前输入批次":有连续消息说明时,多段 <message> 都属本轮输入;幽灵任务防御规则同步更新,避免批量输入中的前置指令被误判为历史旧任务。
  • 扩展 Runtime 探针覆盖。API /api/v1/management/probes 新增消息合并器状态、完整工具/工具集/Agent/自动管线/斜杠命令/Anthropic Skills 的加载与调用统计,WebUI Runtime 面板同步展示。
  • 新增 WebUI 更新日志查看。关于项目页面可按版本查看 changelog 详情,/api/v1/management/changelog 端点支持指定版本查询。
  • 调整发布说明生成方式。GitHub Release notes 改为从 CHANGELOG.md 最新版本条目自动解析生成(scripts/release_notes.py),发版前校验 tag、各构建清单与最新 changelog 版本一致。
  • 补齐消息合并专题文档。新增 docs/message-batching.md,覆盖配置参数、等待策略、投机预发送、竞态保护与关闭行为,同步更新了 README、配置文档、OpenAPI、WebUI 指南和架构图。
  • 补齐配置注释。config.toml.example 中所有模型配置节的 prompt_cache_enabled 均补上双语注释说明。
  • 补强测试覆盖。新增消息合并单元与集成测试(686 + 326 行)、工具调用守卫测试、发布说明脚本测试(163 行)、Runtime 探针统计测试(120 行)、系统提示词约束验证,并更新 end 工具、管理员命令、管线注册等已有测试;额外补齐渲染缓存(LRU 驱逐 / 容量驱逐 / 重启恢复 / 节流后强刷 / 并发 put / 禁用短路)、/admin add|del 全路径、allow_cancel_after_send=true 取消语义等盲点。总测试用例提升至约 1660 项。
  • 更新子模块。