Skip to content

fix: idle timeout 在等待用户交互时误触发重试#245

Merged
ErlichLiu merged 1 commit intoErlichLiu:mainfrom
Andreaseszhang:fix/idle-timeout-during-user-input
Apr 12, 2026
Merged

fix: idle timeout 在等待用户交互时误触发重试#245
ErlichLiu merged 1 commit intoErlichLiu:mainfrom
Andreaseszhang:fix/idle-timeout-during-user-input

Conversation

@Andreaseszhang
Copy link
Copy Markdown
Contributor

Overview

修复 idle timeout 在用户交互等待期间误触发自动重试的问题。当 Agent 发出 AskUserQuestion、ExitPlanMode 审批请求或 acceptEdits 权限确认时,canUseTool 回调会阻塞等待用户操作,期间 SDK 不产出新事件。idle watcher(120s 超时)无法区分"API 挂了"和"正在等用户回答",导致会话被错误中断重试,用户回答后还需重复回答来自重试的相同问题。

Changes

  • apps/electron/src/main/lib/agent-orchestrator.ts — 添加 waitingForUserInput 标志:
    • canUseTool 中 AskUserQuestion、ExitPlanMode、acceptEdits 三个阻塞等待分支设置/清除标志(try/finally 保证异常路径也能清除)
    • idle watcher 协程每 30s 检查时,若标志为 true 则重置 lastActivityAt 并跳过本轮超时判断

How to Test

  1. 启动 Proma,进入任意 Agent 会话(acceptEdits 或 plan 模式)
  2. 触发 Agent 调用 AskUserQuestion(例如让 Agent 分析一个需要确认的任务)
  3. 出现问题选项后等待超过 120 秒再回答
  4. 验证:不应出现"Agent 响应超时,正在自动重试"的黄色提示
  5. 同样测试 ExitPlanMode 审批和 acceptEdits 权限确认场景

Notes

  • acceptEdits 模式下即使工具命中白名单立即返回,waitingForUserInput 也会短暂闪烁 true→false,但 idle watcher 30s 检查间隔远大于此窗口,不会产生误判
  • 修改仅涉及 1 个文件,TypeScript 类型检查和构建均通过

AskUserQuestion、ExitPlanMode 审批、acceptEdits 权限确认等场景下,
canUseTool 回调阻塞等待用户操作,期间 SDK 不产出新事件,导致 idle
watcher 120s 后误判为 API 无响应并触发自动重试。用户还没回答完问题,
会话就被强制中断重启,答完后又需要重新回答重试产生的相同问题。

修复:添加 waitingForUserInput 标志,canUseTool 进入阻塞等待前设为
true(try/finally 保证清除)。idle watcher 检查时若标志为 true 则
重置计时器并跳过本轮检查,等用户操作完成后恢复正常超时检测。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ErlichLiu ErlichLiu merged commit ea04be7 into ErlichLiu:main Apr 12, 2026
ErlichLiu added a commit that referenced this pull request Apr 13, 2026
…during-user-input"

This reverts commit ea04be7, reversing
changes made to d28a8fb.
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.

2 participants