Skip to content

v0.2.0 — 稳定性、可观测性与基础设施全面升级

Choose a tag to compare

@PineappleBond PineappleBond released this 21 Sep 14:38
· 359 commits to dev since this release

v0.2.0 — 稳定性、可观测性与基础设施全面升级

自 v0.1.1-rc.0 以来,本版本包含 206 次提交(18 项新特性、90 项修复、54 项重构、27 项文档改进、6 项测试增强、1 项性能优化),是 RTC Agent Server 迄今为止内容最丰富的一次发布。

✨ 新特性

会话与生命周期

  • OpenSession RPC:新增独立 RPC 接口,改进内存管理与超时处理
  • Turn 恢复机制:支持服务器重启后的 stale turn 恢复与 checkpoint 续跑
  • 周期性 stale turn 扫描器:基于分布式锁的后台巡检,自动回收卡住的 turn
  • 防御性消息归一化器:确保 LLM API 合规,防止异常消息序列导致崩溃

循环任务(Loop)系统

  • Loop 命令:支持周期性任务执行
  • Asynq 后台任务系统:基于 Redis 的可靠任务调度,支持重试、监控与仪表板

OAuth 认证

  • GitHub & Google OAuth2:完整实现两大第三方 OAuth2 提供商接入

内存与记忆

  • 统一内存基础设施(pkg/memory):解耦 pkg/memory 与 internal/model
  • OKF 导出 API:HTTP 接口导出记忆数据
  • 基于 Tool Calling 的记忆抽取:替代原有 embedding 语义搜索

Token 与成本

  • Token 用量追踪与预估:集成 tiktoken-go,支持可配置计数
  • Token 成本计算:为每次 turn 提供成本核算

可观测性与监控

  • 战略缓存断点(Cache Breakpoints):保护稳定内容,提升缓存命中率
  • Debug 端点与 goroutine 监控:新增调试接口与 goroutine 泄漏检测
  • HTTP 指标中间件:跳过 WebSocket 升级请求的精准度量
  • 错误反馈告警与仪表板:Phase 8 监控体系完整落地
  • 用户可见错误反馈:turn 失败时向用户插入可读错误消息
  • 脚本执行异步记录器:带指标与仪表板的执行追踪

消息与内容

  • user_message 内容类型:支持场景化注入
  • 批量中断支持:一次操作中断多个 turn

基础设施

  • 配置校验、生命周期管理器、限流器与安全加固:一站式基础能力
  • 服务器重启恢复与 checkpoint 续跑:生产环境高可用保障

🐛 关键修复

并发与数据一致性 (P0/P1)

  • 修复 turn 生命周期、流式传输与错误处理中的 4 个关键 bug
  • 修复 split-brain 问题、互斥锁死锁、定时器泄漏
  • 修复 RTC-queue 数据竞争、内存泄漏
  • 修复 Redis Pub/Sub 竞态导致的 StopTurn 取消信号丢失
  • 修复 toolcall_output 数据丢失的拆分事务问题
  • 修复 cascade 取消子 agent 时的 goroutine 泄漏
  • 修复 DB 操作与已取消 callback 上下文的耦合

上下文与生命周期

  • 将 fire-and-forget callback 从已取消的调用方上下文解耦
  • 将关键 DB 操作隔离于已取消的 callback 上下文之外
  • 修复 context timeout 在 goroutine 内过早取消的问题
  • 修复 compact 操作与父 context 生命周期耦合
  • 修复 Start 与 Stop 并发执行问题

流式与消息处理

  • 修复 thinking-only stream finalization 的 token usage 丢失
  • 修复 appendStreamChunk 失败时的 markdown 消息 finalize
  • 修复 streaming fallback 中 ContentData 结构破坏
  • 修复 streamState 在 markdown 追加失败时的清理
  • 修复 UTF-8 安全截断(thinking concat、memory extractor 等多处)

分布式安全

  • 修复 sub-agent 通知的 session 加载失败回滚
  • 修复 batch resume 中 SRem 返回值误用
  • 修复 reactive compact escalation 跨 Process 重启
  • 修复 Redis 原子性与错误处理

错误处理与日志

  • 消除恢复与清理路径中的 error swallowing
  • 修复 sanitizer 规则对 IPv6 与 token 误报
  • 修复 panic recovery 堆栈追踪与 sub-agent 通知缺口
  • 统一日志字段排序与命名常量替换 magic string

🔧 代码质量

重构

  • 500 行合规:拆分所有超限文件(9+ 个超过 500 行的文件)
  • 循环复杂度降低:使用 cenkalti/backoff 替代手写指数退避;提取大量 helper 函数
  • 重复消除:提取 extractSessionIDFromContext、notifyParentAndCascadeCancel、publishLifecycleFallback 等共享逻辑
  • Magic number/ string 替换:优先级常量、typed constants、Redis key prefix 命名化
  • 日志规范化:NoopLogger 替代 logIfEnabled 反模式;统一 log fields 排序

类型安全与测试

  • 新增 lifecycle Manager 测试(覆盖率 0% → 97.5%)
  • 新增 agent、loop、updates 包单元测试
  • 修复测试 helper 未使用参数

性能

  • 预分配 slice 减少分配开销

📚 文档

  • 中文注释英文化:完成 27 次专项文档提交,覆盖 oauth、centrifuge-plus、updates、logger、repo、config、cache、memory、infra、cmd、handler、rtc-queue、eino-agent、turn-agent 等所有内部包
  • API 注释完善:澄清 sub_agent resume 状态检查、token usage 语义、stream TTL 默认值等

🙏 致谢

本次发布涉及整个服务端代码库的系统性加固,感谢所有参与代码评审、bug 复现与压测的贡献者。v0.2.0 为后续的 RTC 协议演进与多 agent 协作奠定了坚实的工程基础。


Full Changelog: v0.1.1-rc.0...v0.2.0