v0.4.10
Pre-release
Pre-release
OpenViking v0.4.10 发布说明
OpenViking v0.4.10 重点增强了资源导入、重建索引、会话持久化、MCP 兼容性、媒体解析、记忆插件写入性能和 usage reporting 能力。本次发版包含较多代码层面的稳定性修复:reindex 会保留内容 owner,可清理孤儿向量;Session commit 的第二阶段改为 QueueFS 持久队列;MCP 对外暴露的 tool schema 更适配严格 function-calling API;Connector 导入、memory plugin 批量写入和 VectorDB 批量 upsert 也都有实质增强。
重点变化
Reindex 与资源一致性
- Reindex 现在会按配置的 VLM 并发数创建
SemanticProcessor,避免维护任务绕过全局并发控制。(#3220) - Reindex 写回语义和向量记录时会根据目标 URI 切换到内容 owner 上下文,避免 admin 或维护任务把用户资源、memory、skill 的 owner 改写掉。该改动同时为 Python、TypeScript、Go 客户端暴露了
dry_run参数。(#3096) - 新增
prune_orphansreindex 模式,可扫描 resource、memory、skill 向量记录,识别源文件、.abstract.md、.overview.md或 memory chunk 已不存在的孤儿记录,并支持 dry-run 预览待删除数量。(#3096) - 修复资源 auto-naming 预约失败时吞掉锁竞争/背压错误的问题,避免并发导入时误报为普通命名失败。(#3201)
- 一致性检查拒绝
file://URI,避免本地文件路径被误用到 VikingFS 资源一致性流程。(#3133) - 子目录 overview summary 改为批量处理,减少重复生成和队列侧不一致。(#3154)
Connector 导入
- 新增外部 Connector 集成:当
[connector]开启且 source scheme 命中allowed_add_types时,add_resource可把导入委托给 Connector 的doc/add和task/info接口。(#3084) - Connector 导入会创建
connector_importTaskRecord,并在后台轮询 Connector 任务状态,把succeeded、failed、cancelled、timeout 等状态同步回 OV 任务系统。(#3084) - 对
tos://等 Connector-only source 做了显式校验:Connector 未启用、目标不在viking://resources/...、wait=true、to=精确目标、watch、strict、include/exclude 等不支持参数都会提前报错,而不是走标准 pipeline 后再失败。(#3084)
Session、Snapshot 与 Usage Reporting
- Session commit 的 Phase 2 从
asyncio.create_task()改为 QueueFS 持久队列:归档后写入session_commit队列,服务重启后可从 archive 继续执行 memory extraction、relation 写入和.done/.failed.json标记更新。(#3254) - 生成的 session ID 更可读,降低排查和人工操作时只面对随机 ID 的成本。(#3287)
- Session compressor 和 trajectory analyzer 增加来源追踪,snapshot/experience 更新时能保留更明确的来源信息。(#3221)
- 新增可扩展 usage reporter 子系统,支持从 session 消息里的
search_experience、read_experiencetool part 提取memory.recalled、memory.injected事件,并通过自定义 sink 上报。(#3222) - Usage reporter 生命周期做了容错:extractor 和 sink 失败不会打断 session commit,sink 写入和关闭都带 timeout。(#3222)
MCP 与 Agent/Plugin 兼容性
- MCP search 类工具新增
context_typefilter,客户端可直接按 resource、memory、skill 等上下文类型筛选。(#3181) - MCP 对外 advertised tool schema 会被重写成 plain-typed schema:内联
$ref、移除anyOf/$defs、去掉 null 分支,并确保每个 schema node 都有显式type,以兼容 Gemini、n8n 等严格 function-calling/OpenAPI 子集。运行时参数校验仍保留原函数签名能力。(#3288) - OpenClaw 插件恢复
peer_role路由,区分消息归属 peer 与请求 actor peer,修复 assistant/person 模式下消息和数据面请求都被路由成同一身份的问题。(#3252) - PI coding agent 的 recall 改为先排队再异步查询,避免用户消息渲染被 recall 请求阻塞。(#3233)
- Codex memory plugin 的 type-quota recall 结果支持压缩:从 endpoint entries 中构造待压缩 item,必要时回退 digest,减少注入上下文过长的问题。(#3248)
- Memory plugins 新增共享
async-writer和batch-send,Claude Code、Codex、OpenCode、Cursor、Trae 等插件可批量调用/messages/batch,失败时按连续前缀入 pending queue,避免中间消息丢失。(#3261)
Bot 体验
- VikingBot 默认启用 OpenViking session context,并把默认保留最近消息数从 5 调整为 10。(#3236)
- Bot 从 OV 拉取历史时会按 token budget 裁剪,避免大量 tool output 把 prompt 撑爆;裁剪后的消息会带截断提示。(#3236)
- Bot 现在会保存中间 assistant turn 及其 tool calls/results,并在同步到 OV 时拆成结构化 text/tool parts,而不是只把最终回答和扁平 tools_used 写入。(#3236)
- Bot 请求依赖兼容
chardet 7,并增加依赖兼容性测试。(#3282)
媒体解析与检索/rerank
- 解析器新增 AC-3 音频支持:补充
audio/ac3MIME 映射、.ac3扩展名、AC-3 magic bytes,并把 AC-3 纳入音频 parser 支持列表。(#3229) - 多模态资源集成测试覆盖图片、音频、视频、文档等 31 个导入 case,便于用真实 OpenViking 服务验证端到端解析和队列处理。(#3229)
- 媒体向量化扩展名与 parser 支持范围同步,补齐
.mkv、.webm、.ogg、.m4a、.opus、.ac3等格式识别。(#3241) - 空文档 rerank 场景保留 fallback,避免 hierarchical retriever 因空内容丢掉原始检索结果。(#3231)
- Recall 结果隐藏 memory fields metadata,减少内部字段泄露到最终上下文。(#3240)
- Retrieval observer 统计聚合检索 yield 时会把 aggregate retrieval 也计入,修正观测数据偏差。(#3158)
- LiteLLM rerank 兼容 Voyage:documents 改为传 plain string list,并兼容 dict/object 两种 result item 结构,避免 Voyage 400 或 rerank silently no-op。(#3291)
VectorDB 与 Benchmark
- VectorDB 后端新增
upsert_many批量写入路径,批量校验 account、context_type、重复 ID 和返回 ID 顺序,再通过一次 adapter upsert 调用写入完整记录。(#3264) - VectorDB benchmark ingestion 从逐条 upsert 改为批量 upsert,并在 benchmark 事件中标记
upsert_rows_batch。(#3264) - WIKI-Dir benchmark 支持加载 corpus path mapping,区分 base queries 和 directory queries,并增加 query scope/path diagnostics,避免缺少目录约束时跑出 root-only 的误导性 Directory benchmark。(#3279)
文档、测试与清理
- 新增
sales-opportunity-order-builderagent skill 文档,覆盖销售机会转订单的 DSL 生成流程。(#3227) - 移除自动 pre-commit hooks 相关配置与贡献文档说明,避免本地提交流程被自动 hook 绑定。(#3228)
- OC2OV 测试在 OpenClaw CLI 输出为空时 fail fast,并补充诊断工具,减少空输出导致的误判。(#3250)
- Trusted admin target 允许 root key 访问,并补充认证测试。(#3249)
- 优化 preferences/profile memory prompt 模板,使生成内容更稳定。(#3242)
- 移除 embedding 中未使用的 batch APIs,清理多个 provider embedder 的废弃批量入口和相关测试。(#3260)
- 大规模清理未使用和已废弃 API,包括旧 bot channel、watch manager、旧 parse/accessor、旧 telemetry、部分 vectordb project/validation、setup wizard、redo log 等代码路径。(#3272)
- Trace 文档补充本地 trace 文件路径、产生和上传排查说明,并新增离线 trace 上传脚本。(#3263)
新贡献者
感谢以下新贡献者首次参与 OpenViking:
完整变更
完整 Changelog:
What's Changed
- Add sales-opportunity-order-builder skill under docs/images/agents/skills by @WeiJiacheng271 in #3227
- chore: remove automatic pre-commit hooks by @qin-ctx in #3228
- fix(reindex): honor configured VLM concurrency by @huangruiteng in #3220
- feat: track trajectory sources and snapshot experience updates by @heaoxiang-ai in #3221
- feat(parse): support AC-3 audio resources and add multimodal integration tests by @Hao-Yu-la in #3229
- fix(resource): preserve lock contention during auto-naming by @huangruiteng in #3201
- fix(mcp): expose context_type filter by @huangruiteng in #3181
- fix(observer): account for aggregate retrieval yield by @huangruiteng in #3158
- fix: batch child directory overview summaries by @huangruiteng in #3154
- fix: reject file URI for consistency check by @huangruiteng in #3133
- fix(retrieve): preserve rerank fallback for empty documents by @huangruiteng in #3231
- fix: sync media vectorization extensions by @Hao-Yu-la in #3241
- feat(bot): Opt doc add workspace desc, change the type of messages appended to ov by @yeshion23333 in #3236
- fix(recall): hide memory fields metadata by @huangruiteng in #3240
- Fix/reindex preserve owners by @zhoujh01 in #3096
- test(oc2ov): fail fast on empty OpenClaw output by @huangruiteng in #3250
- fix(auth): allow root key on trusted admin targets by @huangruiteng in #3249
- preferences/profile template improvement by @fujiajie666 in #3242
- fix(pi): avoid blocking user message rendering on recall by @pppobear in #3233
- fix(codex): compress type-quota recall results by @huangruiteng in #3248
- fix(session): 支持重启后恢复会话提交 by @qin-ctx in #3254
- feat(connector): delegate add_resource imports to external Connector by @zihengli-bytedance in #3084
- refactor(embedding): remove unused batch APIs by @qin-ctx in #3260
- fix(openclaw): restore peer_role routing by @qin-ctx in #3252
- perf(plugins): batch add-message writes and shared async detach across memory plugins by @t0saki in #3261
- perf(vectordb): add bulk upsert for benchmark ingestion by @yuanqingz in #3264
- docs: 本地 trace 文件路径改名 + 补充产生/上传 trace 排查文档 by @chenjw in #3263
- refactor: remove unused and deprecated APIs by @qin-ctx in #3272
- fix(deps): align bot requests with chardet 7 by @huangruiteng in #3282
- fix(benchmark): load WIKI-Dir path mapping by @yuanqingz in #3279
- feat(session): make generated IDs readable by @qin-ctx in #3287
- fix(mcp): advertise plain-typed tool schemas for strict function-calling APIs by @t0saki in #3288
- feat: add extensible usage reporting by @heaoxiang-ai in #3222
- fix(rerank): support Voyage via litellm (plain-string documents + dict results) by @michaeltarleton in #3291
New Contributors
- @WeiJiacheng271 made their first contribution in #3227
- @pppobear made their first contribution in #3233
- @zihengli-bytedance made their first contribution in #3084
- @michaeltarleton made their first contribution in #3291
Full Changelog: v0.4.9...v0.4.10