makecindy / makecindy/cindy

Bug: deferred Codex restart can leave a queued prompt permanently undelivered

Open
#2,506 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
TypeScript
Stars
2.7k
Forks
401
Avg merge
21h 40m
Merged PRs (30d)
805

Description

**提交人**: liuaiqing
**客户端版本**: 0.1.44

---

## 现象

已有会话中的后续消息被写入输入队列,但没有发送给 Codex,界面一直无响应。第一条消息正常完成;新建会话后可以继续使用。

## 复现步骤

1. 另一个本地 Codex 会话正在运行时,发生全局 Codex 凭据或运行时配置变更。
2. Cindy 因 Codex 忙而延期当前会话重启。
3. 在之前一轮已经完成的已有会话中发送后续消息。
4. 等待延期重启完成以及受影响会话被唤醒。

## 期望行为

重启 gate 清除后,后续消息应自动发送;如果暂时不能发送,应显示明确的等待/重试状态,而不是静默滞留。

## 实际行为

后续消息被写入持久化输入队列快照,但:

- 没有出现在会话的 `messages` 表中;
- 没有创建第二个 Codex submission;
- 没有观察到第二次上游模型请求;
- 延期重启报告唤醒 4 个会话后,消息仍未被消费。

## 复现频率

目前仅观察到一次。

## 已尝试

新建会话后可以恢复继续使用,但原会话中的排队消息没有恢复处理。

## 脱敏诊断摘要

观察时间为 2026-08-12:

- 上一轮约在 14:04 正常完成;
- 后续消息在约 14:04:40 发送;
- 早先日志出现:`codex busy during memory change; deferring live-session restart`;
- 约 14:11:32 日志显示延期重启完成:`wokenSessions: 4`;
- 此后仍没有对应的 Codex submission。

疑似链路:

```
延期的全局 Codex 重启
-> credential/restart gate 阻止输入派发
-> 消息被持久化但没有发送
-> 唤醒/恢复路径没有可靠 drain 恢复队列
```

## 可能相关代码路径

- `AgentInputCoordinator` 对 deferred credential/restart gate 的处理;
- `getDrainableHead` 在 gate pending 时返回不可派发;
- gate 清除后缺少可靠的 per-session retry;
- `wakeSession()` 可能早于 queue snapshot 恢复或状态/generation 对账而调度 drain;
- `onExternalTurnSettled(sessionId)` 可能没有消费当前会话自己的排队输入。

## 建议修复方向

- deferred restart gate 清除时为每个受影响会话增加可靠的重试;
- 确保 queue snapshot 恢复完成后再调度 drain;
- 重试前对账 turn state、generation 和 lease;
- 当前会话有排队输入时,让 external-turn-settled 路径也触发 wake/drain;
- 无法派发时显示明确的 pending/retry 状态。

以上仅为用户同意公开的脱敏摘要,不包含凭据、个人路径或原始数据库内容。
---
**版本区域**: CN
**OS**: darwin x64 (24.6.0)
**界面语言**: zh-CN

Contributor guide

Open the contributing guide

Research direction

Start by tracing AgentInputCoordinator through getDrainableHead and the deferred credential/restart gate. Then inspect wakeSession and onExternalTurnSettled(sessionId), paying attention to queue snapshot restoration, turn state, generation, and lease handling. Done means a queued prompt is reliably drained after the gate clears, or the UI exposes a clear pending/retry state.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend
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.