Releases: 69gg/Undefined
Release list
Undefined v3.9.1
Undefined v3.9.0
v3.9.0 微信 iLink 私聊接入与统一消息路由
本版本将 Undefined 的实时会话能力从 QQ 扩展到微信,并围绕“逻辑身份与物理通道分离”重整私聊投递模型。微信用户可以复用既有 QQ 身份下的权限、历史、认知记忆和模型偏好,同时让回复、定时任务与媒体始终返回消息实际到达的通道;配套的登录管理、安全隔离和消息语义也形成了可完整使用的微信私聊链路。
变更内容
- 微信私聊成为一等会话通道。Undefined 可直接管理 ClawBot / iLink 扫码登录和消息收发,无需 OneBot 在线或安装 OpenClaw 微信插件;文本、Markdown、图片、文件、视频、语音转写、输入状态及长消息均纳入现有对话流程。底层协议能力由独立的 MIT SDK
weixin-ilink-client承载,主项目继续负责身份、历史、权限和业务编排。 - 统一跨通道身份与投递。微信帐号可绑定逻辑 QQ 号,并通过规范化地址区分 QQ 私聊、微信私聊与群聊;模型选择、命令、自动管线、表情包、附件、消息合并和定时任务共享同一套身份能力,但始终按照当前物理路由发送,避免 QQ 与微信之间串线。原有目标参数继续兼容,并在与规范地址并用时校验一致性。
- 补齐完整消息语义。微信入站内容保留 Markdown 和
<、>、&等字符的字面含义,混合文本与媒体在全量预检后按原始顺序发送,本地媒体路径不会泄露到正文;Bot 可通过统一工具把音频附件显式发送为 QQ 或微信原生语音,同时保留 WAV 等普通文件附件的下载语义;引用消息支持接收、历史恢复和同路由原生回复。微信转发会优先通过 SDK 的有界并发上传与保序item_list多项目消息投递,并在上游明确拒绝时回退逐段发送,附件登记及历史记录继续遵循现有消息体系的边界。 - 提供可运营的帐号管理与安全边界。WebUI 新增微信入口和完整的扫码绑定流程,Runtime / Management API 覆盖登录、刷新、验证码、启停、改绑、解绑、隔离与审计;一对一绑定、特权身份二次确认、未知来源隔离、敏感状态保护、二维码生命周期管理和异常退避恢复共同保证长期运行。同步补齐双语配置说明、架构与使用文档以及相关回归测试。
- 优化长期运行后的统计命令。
/stats按请求时间范围流式扫描 Token 记录,并通过归档时间边界跳过无关文件;图表在线程中串行渲染到请求独立目录,私聊优先整组投递,失败时保留纯文本摘要,避免大历史阻塞事件循环、缓存相互覆盖或媒体上传失败后完全无响应。
📝 Detailed Changes
🚀 Features
Undefined v3.8.1
v3.8.1 可配置长图渲染与浏览器运行时回退
本版本为 AI 渲染工具新增适合长内容发送的长图布局,可精确控制成图宽度与内边距;同时完善 Playwright 浏览器选择,在缺少内置浏览器时可使用已配置或系统安装的 Chrome / Chromium 完成渲染。
变更内容
- 扩展
render.render_html与render.render_markdown。新增layout=long、width和padding参数;长图默认宽度为 900 像素、内边距为 28 像素,并可通过[network]配置统一调整。默认布局保持原有行为,避免影响现有调用。 - 优化长图版式与输出尺寸。长图模式移除页面外部留白和 Markdown 内容最大宽度限制,使正文填满指定画布;截图使用 CSS 像素缩放,最终图片宽度与请求的
width一致,便于聊天平台直接预览和发送。 - 完善渲染浏览器选择。新增
render_browser_executable_path配置;Playwright 内置浏览器缺失时自动探测系统 Chrome / Chromium,显式配置路径无效或其他启动错误仍会直接报告,避免掩盖真实故障。 - 收紧 HTML 渲染网络边界。BrowserContext 强制离线、禁用 Service Worker,并在上下文级终止全部网络请求,不再依赖可被 DNS 重绑定绕过的主机名预检;内联 CSS、脚本及
data:/blob:资源仍可使用。LaTeX 同步收敛为本地 mathtext 渲染,复杂且不受支持的 TeX 不再等待外部 MathJax CDN。 - 加固渲染缓存与配置集成。缓存键纳入截图缩放和样式参数,避免不同布局错误复用缓存;同步环境变量、热更新边界、配置模板、部署与使用文档,并补充长图参数、缓存隔离、浏览器回退和实际渲染回归测试。
📝 Detailed Changes
🚀 Features
Undefined v3.8.0
v3.8.0 多协议 LLM SDK、推理回放与 WebUI 可用性
本版本重构生成模型请求层,统一 OpenAI Chat Completions、OpenAI Responses 与 Anthropic Messages 的 SDK 调用和配置语义,补全多轮工具调用中的原生推理载体回放,并修复 WebUI 配置编辑器与多行日志查询的可用性问题。
变更内容
- 新增原生 Anthropic Messages 支持。
api_mode现使用openai.chat_completions、openai.responses、anthropic.messages三种规范名称;旧chat_completions/responses仍兼容并给出弃用提示。Anthropic 链路通过官方AsyncAnthropicSDK 调用,支持系统提示、图片、函数工具、tool_use/tool_result、流式与非流式响应、usage 统计及错误归一化。 - 完善推理内容采集与原样回放。流式和非流式响应会保留 Chat 兼容接口的
reasoning_content、reasoning_details、reasoning、encrypted_content、thinking,Responses 的原始 reasoning output items 与reasoning.encrypted_content,以及 Anthropic 的thinking/redacted_thinkingblocks;reasoning_content_replay默认开启,续轮时按原顺序优先回传当前有效历史中的全部原生推理结构,仅在旧历史缺少原始载体时回退到可读reasoning_content,关闭后不向上游回放这些内容。 - 统一 reasoning / thinking 参数语义。移除
reasoning_effort_style,运行时根据api_mode自动映射到 Chat 的reasoning_effort、Responses 的reasoning.effort或 Anthropic 的output_config.effort;reasoning_effort继续接受自定义字符串,adaptive与其他值均保持原样透传。Anthropic thinking 可在显式预算和 adaptive thinking 间切换,并校验预算与输出上限关系。 - 加固 OpenAI 请求与工具续轮。Chat Completions 采用广泛兼容的 reasoning / thinking 字段处理;Responses 支持合并
request_params.reasoning的附加键、自动请求加密推理内容、previous_response_id增量续轮及完整 output item 无状态回放,并只定向清理 SDK 展开的无效 function call 空字段,保留真实 item id、namespace 和显式值。 - 统一输出上限语义。OpenAI Chat / Responses 下,所有生成模型、后台协调任务及模型池条目的
max_tokens设为0或负数时不发送输出 token 上限,交由服务端使用默认值;正数在 Chat 中发送为max_tokens,在 Responses 中发送为max_output_tokens。Anthropic Messages 按官方必填约束要求max_tokens > 0,非正数会在请求发出前明确报错。 - 补齐模型与模型池配置能力。Chat、Vision、Security、Agent、Historian、Summary、Grok、Naga 等生成模型节及池内条目统一支持规范
api_mode、reasoning、thinking、推理回放、Responses 兼容、prompt cache、stream 与request_params配置;Grok 不再固定使用 Chat Completions。同步环境变量注册、配置模板、热更新解析和 WebUI 字段说明。 - 稳定 WebUI 配置编辑体验。配置分组保持固定纵向顺序并按可用宽度排布字段,长分组的标题与折叠入口保持可见;局部编辑、展开折叠和搜索不再造成分组跳动、控件消失或无关状态丢失,清除搜索后恢复用户原有折叠状态,并补充“全部展开 / 全部折叠”操作。
- 优化 WebUI 日志查询。按时间戳起始行聚合完整日志记录,关键词、等级与时间范围过滤均以整条记录为单位;命中多行 JSON、工具参数或异常堆栈任一续行时保留并展示整条日志。WebUI 默认加载行数由 1000 提升到 5000,历史日志、实时流和高亮行为保持一致。
- 同步配置、模型对接、OpenAPI、WebUI、认知记忆与 Agent 文档,并新增 Anthropic transport、推理回放、请求参数、模型池、配置编辑器和多行日志过滤回归测试。
📝 Detailed Changes
🛠 Maintenance & Others
Undefined v3.7.1
v3.7.1 WebUI Release 更新提示
本版本将更新流程从启动时自动拉取改为 WebUI 内的可控交互:页面登录后在后台静默检查最新正式 GitHub Release,仅在发现新版本时提示用户,并在明确确认后拉取对应 Release 标签并重启。
变更内容
- 新增 WebUI Release 更新检查。鉴权成功后异步查询
69gg/Undefined的最新正式 GitHub Release,不阻塞页面或主事件循环;后端提供 15 分钟缓存,并让成功或失败的并发请求共享同一个在途任务,概览页也可随时手动检查。 - 新增更新确认对话框。检测到新版本时展示当前版本、目标版本和 Release 链接,并提供“稍后”与“拉取并重启”操作;对话框作为全局 overlay 在 Landing 与 App 视图均可正常使用,同时补齐中英文文案、键盘焦点管理、移动端布局、错误与不可更新状态提示。
- 收紧自动拉取边界。仅允许官方
origin、本地main和干净工作区,确认前重新校验目标版本;更新时验证 Release 标签属于官方main且可从当前提交快进,再精确更新到该标签,避免拉取尚未正式发布的后续提交。 - 完善更新后的恢复流程。代码更新后同步子模块,并仅在 Python 依赖清单变化时执行
uv sync;依赖同步失败会取消自动重启,成功后恢复更新前的 Bot 运行状态并重启 WebUI。 - 加固更新请求生命周期。Release 更新操作设置 30 分钟总等待上限,重启任务由模块持有到完成,Bot 自动恢复标记统一写入仓库根目录下的
data/cache/;Release 外链仅接受 HTTPS 地址。 - 新增
[webui].check_updates配置,默认开启并支持热更新;关闭后只停用页面打开时的自动检查,不影响手动检查。 - 移除 Bot 与 WebUI 启动阶段原有的无确认自动拉取和重启逻辑,更新行为统一由 WebUI 用户显式触发;同步更新配置模板、使用文档、Management API 能力声明及后端、前端和 Git 更新回归测试。
📝 Detailed Changes
🚀 Features
Undefined v3.7.0
v3.7.0 主 AI Tool Search 按需工具加载
本版本为主 AI 新增请求级 Tool Search:工具较多时不再必须把全部 function schema 一次性发送给模型,而是先提供基础工具、虚拟搜索工具和经过权限过滤的名称目录,再按模型实际需要从下一轮开始补充完整 schema。该能力使用普通 function tool 实现,可同时适配 Chat Completions 与 Responses,并保持子 Agent 现有私有工具集不变。
变更内容
- 新增请求级
ToolSearchSession。启用后,主 AI 首轮只加载send_message、end等配置项指定的常驻工具与虚拟tool_search;其余工具以稳定排序的<available_deferred_tools>名称目录注入。目录在会话权限与运行时功能过滤后生成,已加载集合在当前ask()内只增不减,新用户请求会重新建立最小快照。 - 支持精确选择与关键词检索。
tool_search接受select:tool_a,tool_b、完整工具名、普通关键词和+必需词查询,可按工具名、参数名、工具描述与参数描述稳定评分;max_results只能缩小配置上限,返回结果会区分新加载、已加载、未找到及是否截断。 - 加固逐轮 schema 扩展与执行边界。搜索命中的工具从下一模型轮开始可调用;同轮猜测未加载工具会被执行层拒绝,
end与其他调用同轮出现时仍按既有规则拒绝结束,所有 tool result 按原始 tool call 顺序回填,兼容 Responses 的严格调用链校验。 - 新增
[skills]配置与热更新。tool_search_enabled默认关闭,tool_search_always_loaded默认["send_message", "end"],tool_search_max_results默认5;配置变更从下一次ask()生效。预取工具隐藏、保留名冲突、无延迟工具和功能关闭场景均保留安全回退,不会覆盖真实工具或重复执行预取。 - 同步 Prompt、配置模板、根 README、架构、使用说明、Skills 文档与独立 Tool Search 专题文档;新增搜索内核、主循环、预取、配置、Prompt、Chat Completions、Responses 状态续轮及 stateless fallback 回归测试。
- 修复 Console 前端依赖审计告警。将 Vite 的最低版本提升到
6.4.3,并刷新picomatch、postcss与nanoid锁定版本,消除开发服务器路径读取、glob ReDoS 和 CSS stringify XSS 等已知漏洞;npm audit结果归零。
📝 Detailed Changes
🚀 Features
Undefined v3.6.8
v3.6.8 生图响应自动识别与 WebUI request_params 搜索修复
本版本修复 OpenAI 兼容生图链路对 response_format 的错误默认与解析依赖,并加固 base64 解码;同时修正 WebUI 配置搜索会把 request_params 结构化编辑器里的 key/type 控件单独隐藏的问题。
变更内容
- 生图响应按 payload 自动识别格式:
http(s) url/ data URL /url内原始 base64 /b64_json/base64,不再依赖请求或配置中的response_format做解析分支。 - 停止默认写入
response_format=base64:仅当工具参数显式传入时覆盖;否则保留request_params中的值(若有),避免上游网关因默认格式不兼容而失败。 - 加固 base64 解码:
validate=True校验字母表,并用 PNG/JPEG/GIF/BMP/WEBP 魔数确认结果为图片,拒绝把错误文本当成功生图。 - 修复 WebUI 配置搜索:索引与过滤仅针对带
data-path的表单项,嵌套 key/type 表单组不再被单独隐藏;request_params编辑器占满网格宽度,搜索匹配时 key/type 仍可见。 - 同步配置文档与回归测试:覆盖 payload 解析回落、edit-form 默认值、base64 校验,以及 config search 对 request_params 嵌套控件的可见性。
📝 Detailed Changes
🐛 Bug Fixes
Undefined v3.6.7
v3.6.7 Naga 会话级黑白名单
本版本将 Naga 启用粒度从进程全局细化到群聊/私聊会话:在总闸打开后,可按 mode 名单控制具体群与私聊是否启用 NagaAgent 提示词、相关 Agent 与外部网关能力,并保证提示词与工具暴露/执行结论一致。
变更内容
- 新增
[naga].mode(off/blacklist/allowlist)及allowed_group_ids/blocked_group_ids/allowed_private_ids/blocked_private_ids。allowlist下空名单 fail closed(拒绝全部,比[access]更严);未知 mode 拒绝。[features].nagaagent_mode_enabled与[naga].enabled仍为进程总闸。 - AI 侧(NagaAgent 提示词与
naga_code_analysis_agent工具 schema/执行)与外部网关(/naga、绑定、回调投递)共用同一套会话策略;私聊 superadmin 默认绕过私聊名单;群聊无 superadmin 绕过。 - 每轮请求按会话同步切换:放行时使用
undefined_nagaagent.xml并暴露 Naga Agent,拒绝时回退默认提示词并隐藏/拦截该 Agent。 - 兼容旧字段
allowed_groups(合并至allowed_group_ids;未写mode时自动allowlist)。策略拒绝时投递返回naga policy denied。 - 同步配置模板、文档(configuration / slash-commands / naga 契约 / access-control)与策略、命令、Runtime API、提示词/工具回归测试。
📝 Detailed Changes
🚀 Features
Undefined v3.6.6
v3.6.6 抖音视频提取与媒体信息模式
本版本把抖音视频纳入自动提取、工具调用和文件分析链路:可识别短链、长链与 aweme_id,下载并发送视频合并转发,也可只返回附件 UID 或元信息。同时补齐 B 站与 arXiv 工具的信息模式,并加固抖音真实视频地址探测。
变更内容
- 新增 Douyin 视频链路。新增
douyin模块与douyin_video工具,支持抖音短链、douyin.com/video/<id>和裸 aweme_id 解析,可按send/uid/info输出发送合并转发、注册附件 UID 或返回视频标题、作者、时长、简介等信息。 - 接入抖音自动处理管线。普通消息命中抖音链接或 aweme_id 后,可按
[douyin]配置自动下载并发送两节点合并转发;支持独立代理开关、时长与文件大小限制、清晰度探测顺序、群聊/私聊白名单和单条消息处理上限。 - 加固抖音下载与真实视频探测。下载链路从 SSR share 页提取
video.play_addrtoken,再按清晰度探测aweme/v1/play/;探测优先读取Content-Range总长度并按文件大小去重,ttid 获取失败时可回退直接请求 share 页,受限视频会返回更明确的过滤原因。 - 扩展媒体工具信息输出。
bilibili_video与arxiv_paper新增output_mode=info,可只获取视频或论文元信息而不发送/下载附件;file_analysis_agent提示同步覆盖抖音、B 站和 arXiv 的uid/info使用方式。
📝 Detailed Changes
🚀 Features
Undefined v3.6.5
v3.6.5 Firecrawl 搜索、代理作用域与热更新连接修复
本版本聚焦联网能力与出站配置治理:web_agent 新增 Firecrawl 搜索提供商和搜索优先级控制,代理配置从全局开关收敛为模型与功能段独立启用,并修复配置热更新时旧模型连接可能被提前关闭的问题。
变更内容
- 新增 Firecrawl 搜索。
web_agent可按[search].priority在 Grok、Firecrawl 与 SearXNG 间排序;未启用的搜索工具会从工具 schema 隐藏,Firecrawl 支持 API Key、base URL 与 keyless 模式。 - 收敛代理配置。
[proxy]仅保存http_proxy/https_proxy,是否走代理改由模型、搜索、附件、渲染、消息、Bilibili、arXiv、GitHub、Naga 和 API callback 等作用域的use_proxy独立控制。 - 修复模型热更新连接生命周期。清理模型客户端缓存时会延迟关闭仍在使用的 HTTP client,避免流式、检索或并发请求在热更新期间被提前断开。
- 同步配置解析、文档与测试覆盖。拆分模型配置 parser,补充 Firecrawl 开关兼容、代理环境变量映射、作用域代理与 LLM 代理回归测试。
📝 Detailed Changes
🚀 Features
- feat(config): add scoped proxy controls (a0ed74a)
- feat(search): add firecrawl search provider (#80) (10b7aaa)
🐛 Bug Fixes
- fix(llm): defer closing hot-reloaded model clients (84b79d1)
- fix(config): move firecrawl search switch (860a743)
🛠 Maintenance & Others
- chore(version): bump version to 3.6.5 (20b57b3)