Repository navigation
Conversation
|
@jubaoliang 按你在 #942 的建议,将取消回合的历史落库修复独立到这个 PR,OAuth 安全修复留在 #942。 取消状态按当前 invocation 跟踪,并通过共享的历史记录逻辑保留 本地 |
4778a02 to
8438d58
Compare
bbb984c to
306a5fb
Compare
|
@jubaoliang 已 rebase 到最新拉取的 验证:首轮 rebase 后 请按你的节奏测试;后续我会继续跟进 develop 并及时 rebase。 |
306a5fb to
b421e8d
Compare
|
@jubaoliang 同步到新 |
5c03212 to
0fef591
Compare
183f841 to
4496981
Compare
4496981 to
00d1a56
Compare
|
@jubaoliang 这个是自己用的时候踩到的:点了停止之后,历史里半截回答还是标成 complete,看着像答案给全了,其实没有。 你 9/23 看过说值得合,当时只提了 rebase CHANGELOG,后来也一直跟着最新 develop 在走,刚又推了一版。修复就一件事:取消的回合保留 interrupted 状态,没动 #940 那条路径。 正文最底下贴了修复前后的验证截图,麻烦有空再看一眼。 |
00d1a56 to
79a8be6
Compare
79a8be6 to
84ec01a
Compare
Summary
Fixes #944. 从 #942 拆出的独立取消状态修复,仅涉及回合取消与历史落库。
harness 收到取消后会正常结束异步迭代器,原先下游把部分回复记录成
complete。现在AgentManager为当前活动调用追踪取消并发出内部标记,共享RecordingTracker据此将回合保留为interrupted。Dashboard、IM 和 HITL 恢复共用同一判定,新旧历史格式后续再次收尾也不会将中断覆盖为完成。Target branch
developmainType of change
Test plan
ec70e5f4rebase 后完成本地核对:合并 Unreleased changelog 冲突,功能补丁的 stable patch-id 未变,git diff --check通过。此前本地 versioned history / WebSocket / HITL 回归 75 passed;最新 Linux / Windows 结果见 GitHub Checks。develop的963cb140(headb421e8dd):功能 diff 未变;agent manager / HITL / versioned history / WebSocket 定向回归 177 passed, 1 skipped。develop的728ca521后,make all PYTEST_JOBS=2通过:Ruff / 格式 / mypy;3733 passed, 17 skipped。develop的6f7815bb,功能 diff 未变。此前 head306a5fb5的make lint typecheck及 agent manager / HITL / versioned history / WebSocket 回归通过:177 passed, 1 skipped。本地验证使用 macOS / Python 3.14。上述全量结果来自最后一次仅同步上游之前;最新推送 head 的 Linux / Windows 全量结果以 GitHub CI 为准。
Reproduction evidence (before / after)
WS turn cancelled mid-stream (harness cancel semantics — generator returns cleanly): on
developthe turn is archivedstatus='complete'with no client signal; on this branch it is archivedstatus='interrupted', partial content preserved, no internal marker leaked.Before (
develop@4667bd7b):After (this branch):
Red-test run (this PR's new tests executed against
origin/develop, i.e. the bug state):Marker leak check —
octop_stream_cancelledis appended only byAgentManager.stream/resume_hitlafter the harness stream returns cleanly. Both processor consumers (iter_turn_chunks,iter_hitl_resume_chunks) callhistory_tracker.observe()first and thencontinue, so the marker both drives theinterruptedstatus and never reaches the client or triggers a flush. The IM projection pathstream_project._project_chunksalso observes before dispatch, and its if/elif chain matches no branch for this type, so nothing is emitted. Team rooms ignore it (_RELAY_CHUNK_TYPESdoes not include it) andcron/delivery.pyignores unknown chunk types as before.Checklist
CHANGELOG.md