chat: 技能脚本重试路径(run-script-with-retries)遇到内核 interrupt 会被判成 MODEL_CALL_FAILED,用户看到「沙箱返回的真实错误输出:deep agent run ended with status interrupted」
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 0
- Avg merge
- 1h 7m
- Merged PRs (30d)
- 969
Description
本地生产镜像矩阵(2026-09-07,main cf5da3f50)实测:pptx 脚本第一次在沙箱失败(环境缺模块)后,`run-skill-script.ts` 的重试路径用 `deps.model.complete()`(非 progress 路径)让内核重生成脚本;这次重生成的 run 停在了 interrupt(模型对脚本失败发起 `confirm_task_intent`/`fill_run_params`),而 `pollToTerminal` 对 `interrupted` 一律抛 MODEL_CALL_FAILED,用户看到的是:
```
⚠ 脚本执行失败(MODEL_CALL_FAILED),本轮**没有**产出文件。沙箱返回的真实错误输出:
deep agent run ended with status "interrupted"
```
——既不是沙箱的输出,也没有给用户裁决入口。
修法方向:重试路径要么把 interrupt 当成"需要人裁决"接回 HITL 卡片(走 completeWithProgress 的 interrupted 返回),要么在重试的 system 指令里禁止内核在脚本重生成时发起 HITL 工具;错误文案不得把内核状态包装成"沙箱返回"。优先级 P2(只在脚本首次失败 + 模型选择提问时触发)。
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in run-skill-script.ts and trace the retry path through deps.model.complete() and pollToTerminal, comparing it with completeWithProgress() handling of interrupted runs. Verify the first-failure retry case where the model invokes confirm_task_intent or fill_run_params; done means interruption reaches the HITL decision path or is explicitly prevented, and the error no longer presents kernel status as sandbox output.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- ai, backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100