makecindy / makecindy/cindy

[Desktop][Codex Plan] Plan卡片步骤状态与当前执行进度不同步/未完成plan在多轮对话后仍残留显示进行中

Open
#1,735 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
TypeScript
Stars
2.7k
Forks
395
Avg merge
21h 48m
Merged PRs (30d)
776

Description

**提交人**: panwei
**客户端版本**: 0.1.27

---

## 现象

在 Cindy Desktop 的 Codex Plan 模式中,Plan 卡片的状态与当前执行动作不同步:

1. Plan 审批后开始执行时,当前动作已经进入后续步骤,但 Plan 进度仍停留在第 1 项(例如 1/5)。
2. 开启后续多轮会话后,之前轮次的 Plan 仍显示为进行中,并持续显示 spinner;在当前 session 有新任务或自动上下文压缩时尤其明显。

## 复现步骤

1. 新建一个会话,切换到 Codex Plan 模式。
2. 输入一个需要多个步骤完成的任务,使 Codex 生成一个包含多个步骤的 Plan。
3. 审批 Plan,开始执行。
4. 等待执行经过多个工具调用或动作步骤,观察当前动作已经进入后续步骤。
5. 观察 Plan 卡片的进度。
6. 在同一会话继续发送新的用户消息,或让会话继续运行并触发自动上下文压缩。
7. 回看前一轮 Plan 卡片及其 spinner 状态。

## 期望行为

- Plan 审批后启动的 implementation turn 应继承并更新原 Plan 的状态,Plan 进度应与结构化 Plan 更新保持一致。
- 新的用户 turn、implementation turn 或上下文压缩开始后,上一轮未完成的 Plan 应明确结束、归档或标记为 expired,而不是一直保持 active。
- 历史 Plan 可以保留用于回溯,但应以静态历史状态展示,不应随当前 session 的新任务继续动画。
- 如果没有新的结构化 Plan 更新,不应根据当前工具动作推断并伪装成准确的第 N 项进度。

## 实际行为

- 当前动作已经进入后续步骤,但 Plan 卡片仍停留在第 1 项 in progress,未反映真实执行进度。
- 旧轮次的 Plan 在后续多轮会话中仍被当作 active Plan 显示。
- 当前 session 只要有新 turn 在运行,历史 Plan 也可能继续显示 spinner,无法区分当前 Plan 与历史 Plan。

## 初步技术分析

- 当前动作和 Plan 使用不同状态链:动作来自 thinking/tool_use/tool_result,Plan 主要来自 turn/plan/updated 或 update_plan。
- Plan 状态按 plan: 绑定;Plan 审批后会启动新的 implementation turn,新的 turn 没有自动关联回原 Plan,因此工具动作进入后续步骤时,原 Plan 可能仍停留在第 1 项。
- 历史 Plan 的扫描逻辑只有在上一组 Plan 全部 completed 时才创建新的逻辑 Plan,不会因为新 user message、新 turn、Plan 审批完成、退出 Plan 模式或上下文压缩而关闭旧 Plan。
- agent_plan 的动画状态绑定到整个 session 的 streaming 状态,因此历史 Plan 也会跟随当前新 turn 显示 spinner。

## 建议验收标准

- Plan A 审批后创建 implementation turn B 时,B 能正确更新 Plan A。
- Plan A 未完成时开始新的用户 turn,Plan A 不再显示为当前 active Plan;其历史记录仍可查看。
- 当前 session streaming 时,历史 Plan 不显示 spinner。
- 增加回归测试覆盖“审批后新 turn”“旧 Plan + 新 user turn”“历史 Plan 动画隔离”等场景。
---
**版本区域**: CN
**OS**: win32 x64 (10.0.19045)
**界面语言**: zh-CN

Contributor guide

Open the contributing guide

Research direction

Start by tracing the thinking/tool_use/tool_result state chain alongside turn/plan/updated and update_plan events, including how agent_plan derives its animation state. Verify how an approved Plan turn relates to its implementation turn and how new user turns or context compression close historical plans. Done means adding regression coverage for approved-plan handoff, old-plan archival, and historical spinner isolation.

Written by the indexing model from the issue text.

Assessment

Tech stack
electron, typescript
Domain
ai, desktop
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.