长任务被自动中止,并误报为用户中断和 iOS Simulator 拦截
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 401
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
**提交人**: 午夜乐园管理员
**客户端版本**: 0.1.44
---
## 现象
执行长时间、跨文件、包含多次工具调用的 Codex 任务时,当前 turn 会在用户未点击停止的情况下被自动终止,记录为:
```text
aborted by user after 0.1s
turn_aborted
reason: interrupted
```
界面同时可能闪过:
```text
Cindy blocked a shell command that would bypass the embedded iOS Simulator.
Use cindy_ios_simulator for device lifecycle, app install/launch,
interaction, screenshots, and diagnostics.
```
实际命令仅涉及读取项目文件、解析 JSON、查看日志或检查服务状态,没有调用 iOS Simulator、`simctl`、`xcrun`、Simulator.app 或相关自动化。问题会跨任务出现:新建任务以及独立排障任务仍可复现。
## 复现步骤
1. 启动一个持续时间较长、包含多次工具调用的 Codex 任务。
2. 执行复合但只读的诊断,例如查找并读取文件/JSON、并行检查文件与服务状态、用 Python 解析本地 JSON,或一次工具调用包含多个 Shell 子命令。
3. 工具可能尚未真正执行,也可能已经成功返回输出。
4. 约 0.1–0.2 秒后观察到 `aborted by user`、`turn_aborted` 和 `reason: interrupted`。
5. 界面可能同时出现与命令无关的 iOS Simulator 拦截提示。
6. 同时使用桌面端与手机端并发生切换/重连时,丢帧、活动状态停止和任务状态异常更明显。
## 期望行为
- 安全规则拒绝命令时,应返回准确、可恢复的工具错误;需要权限时应提示授权。
- 单条命令被拒绝不应终止整个 turn,也不应把普通文件读取误报为 iOS Simulator 绕过。
- 手机端断线或重连不应改变桌面端任务运行状态。
- 只有用户真正点击停止时才应记录 `aborted by user`。
- 工具失败后 Agent 应能继续当前 turn 并尝试安全替代方案。
## 实际行为
- 用户未停止任务,却被记录为 `aborted by user`。
- 命令拦截或授权失败疑似被映射成整个 turn 的 `interrupted`。
- 普通只读命令被错误映射为 iOS Simulator 专用拦截提示。
- 手机设备链路同时出现断线、ACK 超时、丢帧和 `DEVICE_OFFLINE`,任务状态可能随之异常。
## 复现频率
偶发后会连续发生。在约 24 小时的脱敏检查窗口内:
- 错误的 iOS Simulator 拦截横幅:35 次
- 对应的 `turn_aborted / interrupted`:35 次
- 多个样本时间戳直接对应
- 手机链路另记录到 35 条 `device-link disconnected (code=1006)`、3 次 reliable transport ACK timeout、24 条 pending-frame 丢弃及多次 `DEVICE_OFFLINE`
以上为日志条数,不一定等于唯一故障次数。另有少量模型容量、额度及普通网络重连事件,但与这 35 次中断是不同问题。
## 已尝试
- 新建任务:仍复现。
- 建立独立排障任务读取日志:同样自动中止。
- 等待后续客户端自动更新:问题仍持续。
- 将命令限制为只读文件/JSON/日志/服务状态检查:仍可能被拦截。
- 反复发送“继续”:新 turn 仍可能再次中止。
## 影响
长任务无法稳定连续运行;成功的工具调用也可能导致整个 turn 随即终止。用户必须反复续办,容易造成重复执行、重复消耗模型额度以及流水线状态无法收口。手机端还可能表现为活动图标停止或任务突然静止。
## 已脱敏诊断摘要
用户已同意公开本摘要;未附原始日志。日志显示问题在一次客户端自动更新后集中出现,并在后续更新后持续。一次现场复现中,新任务运行只读诊断后约 0.1 秒即返回 `aborted by user`;数分钟后的独立排障任务读取日志时再次复现。
基于时间对应关系,初步怀疑以下链路之一或组合:
1. Shell/Host Authorization 安全分类误判。
2. 工具拒绝或授权失败被错误转换为“用户中断”并终止整个 turn。
3. 手机 device-link 重连或状态同步不稳定,放大任务取消或 UI 状态丢失。
建议检查:近期 Shell command safety/host authorization 变更、普通命令命中 iOS Simulator 专用错误的路径、工具错误到 `turn_aborted` 的生命周期映射、SDK session 标识为空时的处理,以及 device-link 重连是否触发 turn cancellation 或状态重置。
---
**OS**: darwin arm64 (25.5.0)
**界面语言**: zh-CN
Contributor guide
Research direction
No file or test is named. Start by reviewing recent Shell/Host Authorization changes, then trace tool rejection errors into turn_aborted and inspect SDK session identifiers and device-link reconnect handling. Done means safe read-only commands receive accurate recoverable errors, only an actual stop records user interruption, and device-link state changes do not cancel desktop turns.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- electron, ios, react-native, shell, typescript
- Domain
- desktop-dev, devtools, mobile-dev, security
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 32/100