dsh-plugin-continue-on-limit: DeepSeek Harness Plugin to Automatically Continue Truncated Responses

前言

DeepSeek Harness (DSH) 原生不会自动续写。当一个 turn 因达到输出 token 限制(max-tokens)而结束时,harness 会停止会话,UI 上提示「回答被截断,发送「继续」可让模型接着输出」。这是有意为之的设计,等待用户决定是否继续。

对于需要连续输出的场景,每次手动输入两个字符会增加操作成本。dsh-plugin-continue-on-limit 解决这个问题:它监听宿主侧的 turn/end 事件,当检测到截断原因时,自动发送一条 follow-up 提示词。

核心功能

该插件是一个宿主侧插件,不涉及客户端逻辑,不依赖 UI 快照字段。它通过 agent.followup() 发送消息,消息的身份标识为 cordis-host-runner,在界面中渲染为插件触发状态,而非模拟用户输入。

插件受以下机制约束:
* 每会话 burst 上限
* 最小间隔
* 全局开关

安装与启用

安装前请确保环境满足条件:Node.js 版本需大于等于 22,且使用 pnpm 进行安装(pnpm 在某些沙箱环境下无法创建 junction,可能导致依赖不可达)。

  1. 在 profile 的 package.json 中添加依赖。
  2. 将插件加入到 bundles 列表。
{
  "dependencies": {
    "dsh-plugin-continue-on-limit": "^0.1.0"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app",
        "dsh-plugin-continue-on-limit"
      ]
    }
  }
}
  1. 在 profile 目录下运行 pnpm install。
  2. 重启 DeepSeek Harness。

插件通过 cordis.patch.yml 自动挂载,无需手动编写 patch 列表。安装完成后,请前往 Plugins 页面确认该插件已启用。

配置

插件的所有配置项均为 .volatile() 类型,在 Plugins 页面修改后无需重载 fiber,且 enabled: false 可以在运行中途切断正在进行的链路。

主要配置项如下:

字段 类型 默认值 说明
enabled boolean true 总开关
continueText string 继续 发送的续写文本,最大长度 200
maxConsecutive integer 3 单会话一条截断链最多自动续写次数。设置为 0 表示无上限(危险选项)
minIntervalMs integer 1500 两次续写的最小间隔(毫秒)

配置值会被钳制,负数或非法值会回落到默认值。

工作原理

检测机制

插件监听 session/event 中的 turn/end 事件,并检查 event.data.reason.kind 是否为 max-tokens。它不使用客户端 SessionSnapshot,因为该快照缺少检测所需的字段。

发送时机

插件不能在 turn/end 回调中同步发送消息。这是因为 Session.append 在广播期间会开启重入闸门,而 Agent.followup() 内部需要调用 append,同步调用会导致 “session append cannot reenter” 错误。

因此,发送逻辑被推迟到 agent.whenIdle() 之后执行。此时 phase.kind 必为 idle,wakeDriver 才会启动新的驱动循环处理 inbox 中的消息。

消息身份

为了不冒充人类输入,插件发送的消息 source.kind 被设置为 cordis-host-runner。这是 harness 为宿主侧行为预留的 source 类型,确保 approval 等流程不会误判。

安全与限制

三道闸

  • burst 上限:maxConsecutive 默认为 3,防止模型反复溢出占用过多上下文。设置为 0 需谨慎。
  • 死循环兜底:minIntervalMs 防止无意义的快速重复续写。
  • 输入校验:配置值经过严格校验和钳制,负数不会回落到 0(关闭限制),而是回落到默认值。

安全特性

  • 排队优先:当 inbox 中已有用户排队消息时,插件会跳过当前续写,让用户的请求先执行。
  • 去重:同一 turn 内不重复续写,发送排队期间(pending 状态)也不重复调度。
  • 异常隔离:followup() 抛错只记录日志,不向回调冒泡。

测试

该插件包含 61 个通过测试。测试覆盖了纯决策逻辑(不依赖 Cordis)、宿主侧集成测试(mock ctx 驱动真实 apply)以及加载契约测试。

运行测试命令:

npm test

总结

dsh-plugin-continue-on-limit 为 DeepSeek Harness 提供了自动续写截断回答的能力。它通过宿主侧事件监听和精确的时机控制,在不干扰用户意图的前提下,自动处理模型输出上限问题。适合需要长文本生成且希望减少手动交互的开发者使用。

更多信息请参考 SkillHub 插件目录 或 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye