c0764a8fc6e09012415e0c3715c93f25cef7628a
oc-retry-guard
模型严重错误自动重试插件(OpenCode TUI)。
功能
当模型在流式返回中出现严重解析层错误(HTTP 层返回 200 但响应体含特征错误串,例如 content after the finish reason),插件不会让会话停下,而是:
- 自动补发一次请求:在原请求 body 的
messages末尾追加一条 nudge 提示(「上一次回复因流式解析层严重错误被截断……请重新完整作答」),重新 POST 同一端点; - 替换原 response:把重发成功的 response 回传给 OC,会话流式解析继续,用户侧体验为模型"接着答"而不是报错;
- 事不过三:同一个 session 在 2 分钟周期内最多自动重发 3 次(count ≥ 3 记 STOP 停手);超过 2 分钟窗口计数器自动归零,进入新周期。
技术链路
| 环节 | 机制 |
|---|---|
| 错误识别 | http.response 钩子读 response.clone().text(),对 body 做 ERR_SIGS 特征匹配 |
| 计数 | Map<sessionKey, {count, firstAt}>,firstAt + 120000ms 内有效,超时归零 |
| 重发 | http.request 钩子缓存上一条请求 body(lastReqBody),命中错误时 fetch 重发 + 追加 nudge |
| 替换 | 钩子 return 改后的 response,OC 用 Sy(we, ot.response) 消费 |
日志
~/.config/opencode/oc-retry-guard.log(append 模式)
关键行:
RETRY [sessionID前8位] 第N/3次 错误串=...STOP [sessionID前8位] 3次均失败,停手重发成功已替换 response计数器归零(超过2分钟窗口)
部署
| 端 | 路径 |
|---|---|
| Windows 本机 | ~/.config/opencode/plugins/oc-retry-guard.ts |
| WSL | /root/.config/opencode/plugins/oc-retry-guard.ts |
由 tools/sync_wsl.py 的 ITEMS 清单管理,python D:/桌面/源码/oc_session/tools/sync_wsl.py 一次性同步(自动算 sha256,diff 时写盘 + mcpctl reload)。
已知取舍
- 路线B 成本:出错时额外打一次上游(最多 3 次 / 2 分钟),有重复 token 费用;换来的是会话不停、体验连续。
- nudge 非真隐藏:nudge 文本会进
messages数组,模型可见;不是 system 层注入。实测(A/B 实验)模型只认 messages 末尾的指令,这是最稳妥的位置。 - 只对严重解析层错误生效:普通 4xx/5xx 由 OC 自身重试逻辑处理,本插件不介入。
文件
oc-retry-guard.ts— 插件主文件(TypeScript,OC 的tsx运行时直接执行)
Languages
JavaScript
57.9%
Python
35.9%
TypeScript
6.2%