DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Remote Retry Llm Plugin — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
R

dsh-remote-retry-llm-plugin

Remote Retry Llm Plugin

用于 SSH 远程开发的 DSH 插件(exec/read/write 工具),增加 LLM 重试次数——适用于不稳定或受速率限制的远程 LLM 端点。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:xiazhicheng/dsh-remote-retry-llm-plugin#6482c77c817a60a8e76d9ac04003bda6dfae8147
README兼容性版本

兼容性与来源证明

Remote Retry Llm Plugin 以 dsh-remote-retry-llm-plugin 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/9/24

版本

0.1.0stable
2026/9/24

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
Apache-2.0
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/25
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Subagent Codex@deepseek-ai/dsh-subagent-codex基于官方 app-server 协议的一次性 Codex 子代理提供程序

README

dsh-remote-retry-llm-plugin

English | 中文

A DeepSeek Harness plugin that provides SSH remote development tools (exec, read, write) and boosts LLM retries to 50+ for unstable endpoints.

When your LLM is flaky — frequent 429/RATE_LIMIT, 5xx/SERVER, timeouts, empty responses — the built-in recovery ends the turn after just 5 retries. This plugin installs an additional listener on the agent loop's agent/request-error recovery waterfall that retries 50 times by default, or forever in always mode, stopping only on success, turn cancellation, or plugin disposal.

Written in TypeScript. Host-only — no client/UI bundle. Safe to mount alongside the built-in @deepseek-ai/dsh-llm-retry.


Why

The user request, verbatim:

因为我连的 LLM 不稳定,经常被限制,所以我需要你给 dsh 增加一个功能就是重试支持多次,目前默认的是就 5 次,我希望改成更多次,比如 50 次,一直不断重试,一直到 LLM 能正常返回。

Translation: "The LLM I connect to is unstable and frequently gets rate-limited. Add a feature to DSH that retries many times — the default is only 5, I want more, like 50, keep retrying until the LLM returns normally."

This plugin does exactly that, as an installable bundle.

How it works

DSH executes provider retry policy on the agent/request-error waterfall — an open-step extension point where each listener receives a failed request's { agent, turn, step, provider, failure, retryPolicy, signal } and returns { kind: 'retry' } to re-run the step, or calls next() to delegate. The built-in @deepseek-ai/dsh-llm-retry already listens there and enforces the provider-owned retryPolicy (normal = 5 retries by default).

This plugin adds a second listener on the same waterfall with its own, more aggressive policy:

  • always (default) — retry every eligible failure without an attempt limit.
  • normal — retry only retryableCodes up to maxRetries (default 50).

Both plugins cooperate by waterfall order: whichever owns a given retry returns { kind: 'retry' }. This plugin keeps its own per-step retry count in memory (keyed by agent object identity + turn + step + provider) and registers no session projection, so it never conflicts with the built-in retry plugin's llmRetry projection. It respects the turn abort signal and disposes cleanly (aborts active waits, drains them), so it never blocks turn quiescence or plugin disposal.

Retries emit llm/retry and llm/retry-started session events so every retry is visible in the UI (matching the built-in retry plugin's format).

SSH Remote Development

This plugin also provides SSH tools that let the agent execute commands, read files, and write files on a remote server — enabling remote development without SSH-ing manually.

Tools

ToolDescriptionParameters
ssh-execExecute a shell command on the remote servercommand (required), timeoutMs (optional, default 30000)
ssh-readRead a file from the remote serverpath (required)
ssh-writeWrite content to a file on the remote serverpath (required), content (required)

Example usage

Agent: ssh-exec { command: "ls -la /home/user/project" }
→ { stdout: "total 48\ndrwxr-xr-x ...", stderr: "", exitCode: 0 }

Agent: ssh-read { path: "/home/user/project/config.yaml" }
→ { content: "host: ...\nport: 22", path: "/home/user/project/config.yaml" }

Agent: ssh-write { path: "/home/user/project/README.md", content: "# My Project" }
→ { success: true, path: "/home/user/project/README.md" }

The SSH connection is established lazily on first tool call and cached for the plugin's lifetime. Connection parameters are configured in the plugin config (see below).

Install

From a local clone (recommended for development)

git clone https://github.com/<you>/dsh-remote-retry-llm-plugin.git
cd dsh-remote-retry-llm-plugin
pnpm install            # optional: only needed to rebuild lib/ from src/
pnpm build              # optional: regenerates lib/ (already committed)

Then in DSH, install the bundle from the absolute package directory:

plugin_manager → install_bundle → target: /absolute/path/to/dsh-remote-retry-llm-plugin

The repo commits lib/, so the bundle loads without a build step and without pnpm build-script approval.

From GitHub directly

Point plugin_manager install_bundle at the GitHub URL; DSH runs pnpm add and selects the bundle.

Configure

The row ships with sensible defaults in cordis.patch.yml. Edit config there (HMR applies changes live in YAML-enabled profiles), or change it in Settings → Plugins:

- id: retry-llm-plugin
  name: dsh-remote-retry-llm-plugin
  config:
    mode: always                 # 'always' (default, no limit) | 'normal' (honor maxRetries)
    maxRetries: 50               # normal-mode budget after the first request (default 50)
    retryableCodes:              # normal-mode eligible codes (default transient set)
      - EMPTY_RESPONSE
      - RATE_LIMIT
      - SERVER
      - TIMEOUT
      - TRANSPORT
    excludeCodes:                # never retried, even in always mode
      - AUTH
      - MISSING_CREDENTIAL
      - NO_ADAPTER
      - INVALID_REQUEST
      - PROTOCOL
      - CONTEXT_OVERFLOW
      - IMAGE_OFFLOAD_REQUIRED
      - REGISTRATION_DISPOSED
    backoff:
      initialDelayMs: 500        # first local delay (default 500)
      maxDelayMs: 30000          # cap (default 30000; built-in uses 10000)
      jitterRatio: 0.2           # symmetric jitter range (default 0.2)
    respectProviderRetryAfter: true   # honor a valid provider Retry-After within maxDelayMs

    # ── SSH remote development ──
    ssh:
      host: myserver.com         # SSH hostname (default localhost)
      port: 22                   # SSH port (default 22)
      username: myuser           # SSH username
      identityFile: ~/.ssh/id_rsa  # SSH private key path
      password: ''               # password auth (alternative to key)
      remoteDir: /home/myuser    # default remote working directory

Defaults at a glance

OptionDefaultNotes
modealwaysRetry every eligible failure until success / cancel / dispose
maxRetries50Used only in normal mode
retryableCodesEMPTY_RESPONSE, RATE_LIMIT, SERVER, TIMEOUT, TRANSPORTNormal-mode eligible set
excludeCodesAUTH, MISSING_CREDENTIAL, NO_ADAPTER, INVALID_REQUEST, PROTOCOL, CONTEXT_OVERFLOW, IMAGE_OFFLOAD_REQUIRED, REGISTRATION_DISPOSEDPermanent failures + codes owned by other recovery policies
backoff.initialDelayMs500
backoff.maxDelayMs30000Wider than the built-in 10s, for slow-recovering remote endpoints
backoff.jitterRatio0.2
respectProviderRetryAftertrue
ssh.hostlocalhostSSH hostname
ssh.port22SSH port
ssh.username''SSH username
ssh.identityFile''SSH private key path
ssh.password''SSH password (alternative to key)
ssh.remoteDir''Default remote working directory

Backoff is bounded exponential with symmetric jitter, matching the built-in policy's formula.

Simpler alternative (no plugin)

You can also get unlimited retries without this plugin by setting retryPolicy.mode: always on your provider route directly — this is the native DSH knob:

- name: '@deepseek-ai/dsh-llm-deepseek'
  config:
    apiKeyEnv: DEEPSEEK_API_KEY
    retryPolicy:
      mode: always
      backoff:
        initialDelayMs: 1000
        maxDelayMs: 30000
        jitterRatio: 0.2

- name: '@deepseek-ai/dsh-llm-retry'

Use this plugin when you want the boost regardless of each provider's own policy, or a finite 50-retry budget that's larger than the default 5.

Repository layout

dsh-remote-retry-llm-plugin/
├── cordis.patch.yml      # Loader patch: installs the retry-llm-plugin plugin row + defaults
├── icon.svg              # Plugin Manager card icon
├── lib/                  # Committed build output (loads without a build step)
│   ├── index.js          # Host plugin: the agent/request-error recovery listener
│   └── types/
│       └── index.d.ts    # Type declarations
├── locale/
│   ├── en.json           # Plugin Manager display title + description (English)
│   └── zh.json           # (中文)
├── src/
│   └── index.ts          # TypeScript source — the plugin (source of truth)
├── tsdown.config.ts      # Build config: src/ -> lib/
├── tsconfig.json         # Type-check config (pnpm typecheck)
├── package.json          # Bundle manifest: dsh.bundle.patch, exports, icon, devDeps
├── README.md             # This file (English)
├── README.zh.md          # 中文说明
├── LICENSE               # Apache-2.0
└── .gitignore

Build

pnpm install
pnpm build        # tsdown: src/index.ts -> lib/index.js + lib/types/index.d.ts
pnpm typecheck   # tsc --noEmit

lib/ is committed so installations that skip the build still work. Rebuild after editing src/.

Compatibility

Built and tested against DeepSeek Harness 0.1.7-rc.1 (Cordis 4.0.4, schemastery 3.18.4). Runtime dependencies: ssh2 (SSH client), @deepseek-ai/schemastery (config schema), @deepseek-ai/dsh-tools (tool definitions). The @deepseek-ai/* entries in devDependencies are for type-checking and building only.

License

Apache-2.0 — see LICENSE.