DeepSeek Harness 插件

himeope/dsh-queue-first-enter

Star 数 ★ 0 分类 UI 增强 收录于 2026-09-10

agent 正在处理任务时,输入框空着按回车,队列第一条消息就会插话送进当前回合。

安装

# Release 预构建包

dsh plugin --profile web add "https://github.com/himeope/dsh-queue-first-enter/releases/latest/download/dsh-queue-first-enter.tgz"

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:himeope/dsh-queue-first-enter

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWEDERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yamlallowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

English | 中文

DeepSeek Harness(dsh)Web 插件:输入框空白时按 Enter,立即把队列第一条消息插话发送到正在运行的回合。

agent 繁忙时,输入框的回车会把下一条消息排进队列,而排队消息通常要等当前回合结束。本插件只加一个手势:清空输入框、按 Enter,队列里的第一条消息就在当前回合的下一个步进边界被送入模型,其余排队消息保持原顺序。

设置行

安装

从 GitHub 安装:

dsh plugin --profile web add github:himeope/dsh-queue-first-enter

从本地检出安装:

dsh plugin --profile web add /path/to/dsh-queue-first-enter

然后重启 dsh web

本插件只通过本仓库分发,没有发布到 npm,所以直接写包名(dsh plugin --profile web add dsh-queue-first-enter)解析不到。因为是 git 源安装,pnpm 可能拦截它的 prepare 脚本;如果 dsh plugin 打印了 allowBuilds 提示,把它给出的键加到 profile 的 pnpm-workspace.yaml 里再跑一次即可。这个包没有构建步骤,脚本被拦截也不影响使用。

需要 dsh web 0.1.0-rc.6 或更新版本。浏览器半边是 dsh.client 包(platform: web);宿主半边不带任何行为,只是为了让这个包成为一行正常可安装的插件。

行为

只有以下条件全部成立时才会触发:

  • 输入框空白——没有文字,也没有待发图片;
  • 当前 agent 正在运行(回合进行中);
  • 队列里至少有一条 placement: queued 的消息;
  • 输入框可用,且当前是普通会话(不是子 agent)。

其余情况一律不动:

  • 有文字或图片时,Enter 与原来完全一致(排队或直接发送);
  • Ctrl/Cmd+Enter 保留自带含义——插话发送全部排队消息;
  • 在设置里关掉本功能后,空输入框按 Enter 恢复为原本的无动作。

发送方式为严格插话(strict steer):消息在当前回合的下一个步进边界交给该回合,模型那时就能看到。它中断当前回合,也等回合结束。dsh 的队列 API 只有编辑、删除、插话三种操作,所以「跳过当前回合直接开新回合」不是本插件做的事;中断回合是另一个破坏性动作(cancel,保留队列)。

收敛行为:回合在同一瞬间结束(steer-unavailable)或消息已被 agent 领取(queue-item-not-found)时静默收敛,消息仍留在队列里。

设置

设置 → 通用 → 「回车立即发送队列首条」,就在 dsh 自带的「繁忙时 Enter 键行为」下面一行。

这一行的标题和说明跟随产品界面语言:界面切成 English 时显示 Enter sends the first queued message,切成简体中文时显示上面那行中文。开关本身没有分语言的状态,只有文案跟着变。

开关状态存在浏览器 localStoragedsh.queueFirstEnter.enabled(默认开启)。

实现说明

文件 作用
index.js 宿主半边:不带宿主行为,只为让包可挂载。
client.js 浏览器半边:通过客户端 slot 系统注册输入框监听与设置行。
cordis.patch.yml 把宿主行插进 profile 的层栈。
smoke-test.mjs 用桩模块系统和桩 Cordis 上下文加载 client.js,断言两个 slot 都注册成功、中英文词条都注册、且设置行文案跟随当前语言。

监听器以捕获阶段挂在输入框自己的 textarea 上,定位方式是插件自己的锚点元素向上找到 composer 卡片再取其中的 textarea——没有使用产品 CSS 类名,也没有写死 DOM 路径。它读取权威的 session/queue 快照,调用已有的 updateQueue(itemId, { kind: 'steer' }) RPC;自己不发 prompt、不访问网络,除开关状态外不存储任何东西。文案以 dsh-queue-first-enter 命名空间注册到产品自带的两种语言(zhen),通过客户端 locale 服务读取,因此跟随界面语言,切换语言时即时重渲染。

上面的截图由 screenshots/settings-mockup.htmlscreenshots/settings-mockup.en.html 渲染而来:这是设置 → 通用面板的静态模拟,复用了产品自带的设置行尺寸和插件自身的行内样式。用浏览器打开它们,就能看到这一行真实渲染的样子。

npm test          # node smoke-test.mjs
npm run check     # 两个半边都跑 node --check

许可

MIT

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。