证据快照复核于 2026-09-16GitHub 数据核对日期: 2026-08-21
证据已验证Plugin Bundle自动化与智能体dsh Profile

DSH LLM Network Retry

为 DSH 原生重试策略未识别为可重试的网关 network_error 模型失败补充重试。

快速了解

它能做什么

为 DSH 原生重试策略未识别为可重试的网关 network_error 模型失败补充重试。

本站提供的是中文说明,不代表该项目或 Plugin 自身提供中文界面;语言支持请以上游文档为准。

使用场景
自动化与智能体自动化配置调试
适配技术
dshdsh-llm-retrydsh-agent
兼容性

dsh Profile
dsh >=0.1.5-rc.2; Node.js >=22.19.0

可信度与状态

证据已验证
核对日期 2026/9/11 UTC 14:15

有代码证据的贡献

它为 DSH 增加什么

有界网络错误重试策略

为提供方重试策略拒绝处理的网关上报 network_error 失败提供兜底重试决策。

机制证据

选择前先看

该 DSH 插件包位于 agent request-error 瀑布流中提供方重试策略之后。当其他监听器放弃处理且失败消息匹配 network_error 变体时,它会按自身有界指数退避策略重试;已有的提供方重试决定会原样透传。

适合谁

使用 DeepSeek Harness 且其 OpenAI 兼容网关可能以 finish_reason: network_error 结束模型流的用户,包括受影响的 OpenCode Zen 配置。

常见任务

  • 避免 agent 或 subagent turn 因网关上报的 network_error 立即失败。
  • 在等待上游 DSH 修复期间补充有界重试。
  • 在 profile 的 Cordis patch 挂载条目中配置重试次数和退避参数。

权限与数据

在选定的 DSH profile 内检查请求错误结果、安排重试并写入重试会话事件。

权限
  • 接入 DSH 的 agent/request-error 瀑布流。
  • 使用选定 profile 的 bundle 配置。
数据处理
  • 随附文档称该插件不创建数据文件,也不占用 settings 命名空间。
  • 重试历史通过宿主会话事件体现。
外部服务
  • 匹配错误需要重试时,会经由已配置的模型网关重新发起模型请求。
凭据
  • 未声明插件专用凭据;网关凭据仍由宿主配置负责。

局限

  • 仅在其他 request-error 监听器放弃后,处理指定的 network_error 消息和 finish_reason 模式。
  • 不会重复匹配已被原生策略归类为传输错误、超时、HTTP 5xx 或其他原生可重试情形的失败。
  • 需要 DSH >=0.1.5-rc.2 和 Node.js >=22.19.0。
  • 提供的证据未审计 npm 注册表中发布包的内容。

DSHub 已核对

  • 已验证固定提交中的插件包结构和 Cordis patch。
  • manifest 声明了构建、类型检查、测试和 smoke 命令,且没有生命周期脚本。
  • 文档描述了单元测试、端到端测试和宿主测试。

DSHub 未核对

  • 本次整理未执行安装、运行时验证或测试。
  • 文档关于重试成功、干净卸载和宿主兼容性的说法未被独立复现。
  • 未审计已发布 npm 包的内容。

固定版本安装

安装 DSH LLM Network Retry

这个Plugin Bundle没有 DSH Plugin 安装操作,请根据源码文档使用真实交付方式。

访问源码项目

维护者原文

项目 README

查看 commit f47fec5 对应的 README
维护者编写的上游内容原文于 2026/9/11README.md 获取,正文和仓库相对媒体固定到 commit f47fec5e7877,内容哈希为 030955d24909。以下是未经 DSHub 翻译的上游原文,语言可能与当前页面不同;第三方托管的 badge 可能独立更新。

dsh-llm-net-retry

English

DeepSeek Harness(dsh)插件:重试网关以 finish_reason: "network_error" 上报的模型请求失败——这类失败被 dsh 原生重试策略归为不可重试, 导致整个 turn 直接硬失败。

背景

一些 OpenAI 兼容网关(如 OpenCode Zen)把自身上游连接的瞬时失败 作为流的终止 finish_reason 上报,而不是走 HTTP/传输层错误。在 dsh 0.1.5-rc.2(本插件 跟随的 rc/stable 线;alpha 线已退役)中,两条 adapter 路径仍把它误分类:

路径 产出的失败 原生分类
llm-pi-aiopenai-completions Provider finish_reason: network_error PI_AI_ERROR——不可重试
llm-deepseek model stopped: network_error,code NETWORK_ERROR 不可重试

dsh-llm-retry 只重试 provider retryableCodes 里的码(TRANSPORTRATE_LIMITSERVERTIMEOUTEMPTY_RESPONSE),于是没人重试,turn——包括 subagent turn——直接失败。 而这类故障立即重试几乎总能成功。

opencode 在上游修过同样的问题: 40282c1e0b9e68

dsh 本体的修复已备好并充分测试(fork 分支 fix/network-error-retryable; dsh 目前不接受外部 PR,已按官方渠道报告至 Discussions #3949)。 在修复合入前,本插件就是解决方案;合入后它也无害:只在整个 agent/request-error waterfall 弃权时才行动,且绝不触碰 llm-retry 自身的重试计数。

工作原理

插件挂在 agent/request-error waterfall 的末端

  1. 先调用 next()——provider 的策略执行器(dsh-llm-retry)先决策。任何一方决定重试, 该决策原样透传。
  2. 只有当所有 listener 都弃权,且失败消息命中漏网的 network 变体——network_error / network-error / network error,或 pi-ai 对未识别网关 stop reason 的 Provider finish_reason: 渲染——才调度本插件自己的有界重试。
  3. 重试持久化且可见:llm/retry / llm/retry-started session 事件,schema 与 llm-retry 兼容,TUI 无需改动即可展示。计数使用本插件自己的 policy key(net-retry:v1…), 绝不污染 llm-retry 的计数。

已被分类为 TRANSPORT 的失败(ECONNRESET、terminated、流截断、超时、HTTP 5xx)由原生 策略重试,本插件刻意不再重复匹配。

安装

本插件是独立的 dsh 插件,与宿主 UI 无关:装入任意 dsh profile 即可(把 <profile> 换成你的 profile 名——profile 由 dsh CLI 自建自管,不是 tui 专属):

dsh plugin --profile <profile> add @aiwayds/dsh-llm-net-retry

包内的 cordis.patch.yml 会以插件 id dsh-llm-net-retry 挂载,挂在哪个 profile, 就对哪个 profile 启动的 dsh 实例生效(tui / web / 自定义 launcher 均可)。

⚠️ 所有 @deepseek-ai/* 包都是 peerDependencies(由 dsh 闭包解析)——绝不要把它们当普通 dependencies 装进插件,否则会出现第二份 cordis 闭包和诡异的崩溃。

卸载

dsh plugin --profile <profile> remove @aiwayds/dsh-llm-net-retry

宿主自动清掉 profile bundles 里对应的条目和插件的 patch 层。本插件零落盘状态—— 没有数据文件,也不占用 settings 命名空间——卸载后不留任何残留(见「兼容性」一节的 「dispose 即干净移除」)。旧会话日志里历史留下的 llm/retry 事件不受影响——那是宿主 自己的良性数据,不属于本插件。

配置

全部可选,默认即用。本插件不占用 settings 命名空间——配置走组合树 entry config, 即在 patch 层(profile 的 cordis.patch.yml)的挂载条目里给 config: 段:

- insert:
    - id: dsh-llm-net-retry
      name: '@aiwayds/dsh-llm-net-retry'
      config:
        mode: on            # 'off' 完全摘除 listener
        maxRetries: 5
        backoff:
          initialDelayMs: 500
          maxDelayMs: 10000
          jitterRatio: 0.1

未知 key 报错。默认值对齐 llm-retry 原生策略(5 次重试、500 ms→10 s 指数退避、对称抖动 0.1)。

验证

  • 单测:匹配表(正/负例)、注入随机数的退避计算、配置校验、真实 cordis context 上的决策链 (透传/重试/计数/abort/mode off/下游异常韧性)。
  • e2e:真实 agent loop + 真实 llm-pi-ai openai-completions adapter,打脚本化本地网关 (前两次请求回 finish_reason: "network_error")——第三次请求完成 turn、llm/retry 事件落盘;负向对照(无插件)一次请求后 turn 即硬失败。
  • 真实宿主:已在 dsh 0.1.0-rc.8 的 --profile tui(dsh-tui-pi)上实测,重试链 (指数退避、稳定 retryId、事件落盘、TUI 展示)全部正确。
npm test        # 先构建:npm run build

e2e 在隔离的临时 $HOME 下运行,绝不触碰 ~/.dsh

兼容性

要求 dsh >= 0.1.5-rc.2 — 本插件只跟随 dsh RC/stable 线(CI 与发版在运行时解析 latest/next 中更新的 dist-tag)。不再支持 alpha 线。

面向 dsh >=0.1.5-rc.2agent/request-error waterfall 与 llm/retry 事件 schema。插件对 dsh 本体零侵入:无 monkey-patch、不替换服务,dispose 即干净移除。

许可证

MIT

有意识地管理

安装与管理

前置条件与目标 Profile

目标 dsh Profile

交付方式 Git Bundle — fan56/dsh-llm-net-retry#f47fec5e7877619eddaa89111e681928fa6992f4

验证、更新与移除

显示生命周期命令
验证
dsh plugin --profile dsh list

兼容性与访问范围

Requires DeepSeek Harness RC/stable-line interfaces dsh >=0.1.5-rc.2; Node.js >=22.19.0

检查兼容性证据

风险事实

retry_behavior

May reissue failed model requests up to its configured retry limit.

证据
session_events

Emits llm/retry and llm/retry-started session events for its retry activity.

证据
证据与编辑审查Manifest、Bundle patch、分发与新鲜度

不可变证据

审查状态与源码活动

AI 已审查

应使用已提供证据的不可变 Git 插件包来源;在生产 profile 启用前,请评估重试量和网关成本。

AI 审查于 2026/9/11 UTC 14:16GitHub 事实核对日期: 2026/9/11 UTC 14:16

自当前证据基线以来,没有记录到重要源码变化。

下一步

按 Plugin 安装流程操作

订阅重要变化: DSH LLM Network Retry