Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 03 Jun 15:57
· 126 commits to main since this release
ef75b10

v0.4.0 更新日志

refactor — 架构重构

Worker + Reactor 架构

  • 将原来的 AgentLoop 拆分为 Worker(纯状态机)与 Reactor(调度层)两部分
  • 引入 WorkerCommand / WorkerEvent 通道用于内部通信,解耦命令发送与状态反馈
  • 新增 PromptKind(Enter / AltEnter)和 PromptRequest 类型,统一管理用户输入
  • Reactor 负责接收 Worker 事件并按优先级调度命令,Worker 专注 LLM 调用状态流转

提示词队列系统

  • 新增 PromptQueued / PromptConsumed 事件,为 TUI 提供实时队列反馈
  • App 中新增 pending_prompts 追踪已入列提示词的 ID
  • Alt+Enter 提交的提示词进入队列,等待 Worker 空闲后逐条处理
  • 底层依赖:oy-tui 新增 uuid 依赖用于生成提示词 ID

fix — 修复

状态竞争条件 (stale-state race)

  • 乐观更新策略:在发送命令给 Worker 之前,TUI 层先将 worker_state 乐观更新为 Thinking,防止状态传播窗口期内 TUI 请求被错误转发
  • notify_statetry_send 改为 async send,确保状态变更不会被静默丢弃

Enter 提示词注入时序

  • StateChanged(ToolCall) 时 flush enter_queue;Worker 在 tool_call() 后 drain cmd_rx,将排队的提示词作为 user message 与 tool results 一起注入,在下一次 LLM 调用前发送
  • Alt+Enter 提示词保持排队,直到 Worker 回到 Idle 状态后才处理
  • FlushEnterQueue 错误吞噬修复:批处理所有提示词,返回最后一个错误而非静默覆盖中间错误

队列编号动态化

  • 移除 PromptQueued 消息中的持久化 number 字段
  • 移除 App 中的 next_prompt_number 循环计数器
  • 队列编号在渲染时根据位置动态计算(index + 1
  • 撤销提示词改为按队列中的第 N 个查找,而非存储的编号
  • 消除旧行为的两大问题:
    1. 消费 [1][2][3] 后新增显示 [4] 而非 [1](编号不重置)
    2. 撤销中间提示词后出现 [1][3] 而非 [1][2](编号不重排)

UI 状态文本

  • 更新状态栏文本,添加 Alt+Enter 快捷键提示,告知用户可将提示词发送到队列

chore — 工程维护

  • 各模块版本已更新至 v0.4.0
  • oy-tui 新增 dependency: uuid = { version = "1", features = ["v7"] }
  • Cargo.lock 自动更新

What's Changed

Full Changelog: v0.3.0...v0.4.0