Skip to content

fix: prevent user echo and duplicate snapshots in message:stream#73

Merged
liujuanjuan1984 merged 6 commits intomainfrom
bugfix/72-streaming-structured-output
Feb 14, 2026
Merged

fix: prevent user echo and duplicate snapshots in message:stream#73
liujuanjuan1984 merged 6 commits intomainfrom
bugfix/72-streaming-structured-output

Conversation

@liujuanjuan1984
Copy link
Collaborator

@liujuanjuan1984 liujuanjuan1984 commented Feb 13, 2026

模块变更

流通道架构 (Channeling)

  • 引入三类通道隔离流式输出:reasoningtool_callfinal_answer
  • 只有 final_answer 沿用原本的 task_id:stream 作为 artifact id,其余通道附带 :<channel> 后缀进行隔离。
  • 在流事件中补全 artifact.metadata.opencode 元数据,包含 channel、source、event_type、message_id 和 role。

回显过滤与状态管理

  • 增强并统一了角色的归一化处理(覆盖 ROLE_USERROLE_SYSTEM 等变体)。
  • 新增 _StreamOutputState 状态机,专门用于聚合、追踪流内已产生的文本块。
  • 增加首包保护机制:当流数据缺少 role 且文本与用户输入一模一样时,智能判定为回显并丢弃。

去重与幂等闭环

  • execute 的收尾阶段,如果流式处理已经输出了等价的 final_answer,则不再补发末尾的全量快照 (final snapshot)。
  • 仅当流内未捕捉到可消费的最终答复,且同步接口 send_message 返回了有效内容时,才补发一次 final snapshot 以兜底。

并发安全

  • 引入基于 session_id 级别的 asyncio.Lock,确保同一会话的多次连续请求会排队串行进入 send_message 阶段,从物理上杜绝交叉并发造成的串流污染。

测试用例

  • 新增 tests/test_streaming_output_contract.py 契约测试,全面覆盖用户回显、去重快照、多通道分类与会话锁并发场景。

关联

Closes #72

@liujuanjuan1984 liujuanjuan1984 changed the title [bug] 修复 message:stream 用户回显、通道混杂与重复快照 fix: prevent user echo and duplicate snapshots in message:stream Feb 14, 2026
@liujuanjuan1984 liujuanjuan1984 marked this pull request as ready for review February 14, 2026 05:30
@liujuanjuan1984 liujuanjuan1984 merged commit 7310219 into main Feb 14, 2026
1 check passed
@liujuanjuan1984 liujuanjuan1984 deleted the bugfix/72-streaming-structured-output branch February 14, 2026 05:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] message:stream 存在用户回显、内容通道混杂与答复重复

1 participant