Bug 反馈:BYOK 会话转录文件丢失,错误被误报为 BYOK_PROVIDER_REQUEST_FAILED
环境
- 平台:macOS(Apple Silicon,Darwin 25.5.0)
- Qoder 版本:升级前后均能复现(2026-08-29 ~ 2026-08-30,升级到最新版后仍存在)
- 模型:BYOK(阿里云 Token Plan,千问3.8 Max)
现象
在 BYOK 模型的对话中发送消息,界面报错:
BYOK_PROVIDER_REQUEST_FAILED 重试会复用本轮原始输入,已产生的内容和日志会保留
点击重试永远失败。同一时段用官方托管模型的对话完全正常。
实际根因(通过本地日志定位)
真实错误不是 provider 请求失败,而是 worker 恢复会话时找不到转录文件,初始化即退出:
ERROR feedback.emitted Error resuming session: Invalid session identifier "c1f2d120-af79-46a0-b97e-2df88c9c4124".
Searched current project and same-repo worktrees:
- /Users/luoxiao/.qoder/projects/-Users-luoxiao-Documents---
WARN process.exiting exit_code=42 reason="input_error" error_name="TranscriptSessionError"
检查 ~/.qoder/projects/<project>/ 目录:
- 3 个 BYOK 会话(653b50ca、731cf9f0、c1f2d120)的
<sessionId>.jsonl转录文件全部消失 - 同项目 3 个托管模型会话的转录文件完好
- 这些 BYOK 会话此前均正常运行过多轮(resume 也成功过),转录文件是在会话正常结束后的数小时内被删除的
- 全盘搜索(含临时目录)确认文件不可恢复
时间线举例(会话 c1f2d120):
- 08-30 02:14~02:50 CST:会话正常创建并完成两轮(含一次 resume 成功)
- 08-30 13:08 CST:Qoder 升级后首次启动,
.last-cleanup更新 - 08-30 15:10 CST:再次发消息 → resume 失败,exit_code=42
(注:另一会话 653b50ca 在升级前的 08-30 01:40 CST 就已出现同样错误,说明不完全是升级清理导致)
问题点(两个)
- 数据丢失:BYOK 会话的转录文件被异常删除(疑似清理逻辑误删或 BYOK 路径的持久化 bug),托管模型会话不受影响
- 错误提示失真:exit_code=42 的
TranscriptSessionError被 UI 包装成BYOK_PROVIDER_REQUEST_FAILED,误导用户去排查模型服务商;且提示"重试会保留内容",实际重试永远失败
复现路径(推测)
- 使用 BYOK 模型创建对话并完成若干轮
- 等待转录文件被删除(触发条件未知,疑似与清理任务或 BYOK 会话生命周期管理有关)
- 回到该对话发送任意消息 → 必现 BYOK_PROVIDER_REQUEST_FAILED
日志证据
Worker 进程日志(~/.qoder/logs/runs/2026-08-30T15-10-55-644+08-00-tuu7p2-p1741/qodercli.log):
2026-08-30T15:10:55.691+08:00 INFO process.started run_id="2026-08-30T15-10-55-644+08-00-tuu7p2-p1741" pid=1741 role="main"
2026-08-30T15:10:57.269+08:00 INFO [session=92ed0cbe-581f-42ad-8bdf-704d04ad0108] session.config.loaded project_root="/Users/luoxiao/Documents/试玩" target_dir="/Users/luoxiao/Documents/试玩" debug_mode=false interactive=false model="auto" permission_mode="bypassPermissions" load_config_duration_ms=372
2026-08-30T15:10:57.283+08:00 ERROR feedback.emitted Error resuming session: Invalid session identifier "c1f2d120-af79-46a0-b97e-2df88c9c4124".
2026-08-30T15:10:59.362+08:00 WARN process.exiting exit_code=42 reason="input_error" message="Error resuming session: Invalid session identifier \"c1f2d120-af79-46a0-b97e-2df88c9c4124\".\n Searched current project and same-repo worktrees:\n - /Users/luoxiao/.qoder/projects/-Users-luoxiao-Documents---\n Use --list-sessions to see available sessions." source="gemini.resume" error_name="TranscriptSessionError" error_stack="TranscriptSessionError: Invalid session identifier \"c1f2d120-af79-46a0-b97e-2df88c9c4124\".\n Searched current project and same-repo worktrees:\n - /Users/luoxiao/.qoder/projects/-Users-luoxiao-Documents---\n Use --list-sessions to see available sessions.\n at JIA (file:///Applications/Qoder.app/Contents/Resources/app.asar.unpacked/node_modules/@qoder-ai/qoder-agent-sdk/dist/_worker/qoder-worker-runtime.obf.mjs:148:653525)\n at async kPu (...)\n at async RPu (...)" uptime_ms=3718
Qoder 主进程日志(main.log,同一时刻两次 turn 的失败记录):
[2026-08-30T07:10:36.470Z] [INFO] [ChatSession] turn starting {"sessionId":"c1f2d120-...","model":"byok:0c0c004b-a521-45c2-bf0f-021e1329497b",...}
[2026-08-30T07:10:36.471Z] [INFO] [ChatSession] turn started {"sessionId":"c1f2d120-...","turnId":"4d59ce85-...","isByok":true,...}
[2026-08-30T07:10:59.366Z] [ERROR] [ChatSession] ChatSession runtime message consumption failed {"sessionId":"c1f2d120-...","turnId":"4d59ce85-...","isByok":true,"errorKind":"QoderWorkerRuntimeError"}
[2026-08-30T07:10:59.367Z] [ERROR] [ChatSession] ChatSession message delivery failed {"sessionId":"c1f2d120-...","turnId":"4d59ce85-...","isByok":true,"errorKind":"QoderWorkerRuntimeError"}
[2026-08-30T07:11:15.329Z] [INFO] [ChatSession] turn starting {"sessionId":"c1f2d120-...","model":"byok:0c0c004b-...","permissionMode":"default",...}
[2026-08-30T07:11:35.469Z] [ERROR] [ChatSession] ChatSession runtime message consumption failed {"sessionId":"c1f2d120-...","turnId":"86701b7c-...","isByok":true,"errorKind":"QoderWorkerRuntimeError"}
[2026-08-30T07:11:35.469Z] [ERROR] [ChatSession] ChatSession message delivery failed {"sessionId":"c1f2d120-...","turnId":"86701b7c-...","isByok":true,"errorKind":"QoderWorkerRuntimeError"}
如需完整日志文件可另行提供。