用 dsh-code 给 DeepSeek Harness 装上终端编码界面

前言

DeepSeek Harness(以下简称 DSH,命令行工具是 dsh)默认入口是网页:装好 Node.js 之后执行 npx @deepseek-ai/dsh web,浏览器里就能开智能体会话。对习惯在终端里写代码的人来说,这套流程并不总合适。你已经开着 tmux 或分屏编辑器,再切出去盯一个本机 Web UI,会话、权限、模型切换都要离开命令行。Claude Code、Codex CLI 这类工具把编码智能体放在终端里,斜杠命令、会话恢复、审批条都在同一块屏幕上完成;很多人在 DSH 上也想要类似的工作方式。

DSH 的核心理念是「一切皆插件」。官方仓库 deepseek-ai/deepseek-harness 写得很直接:模型、工具、技能、会话、沙箱、存储、循环调度和界面都可以换成插件,不必改 Harness 源码。界面既然也是插件,社区就可以在官方 @deepseek-ai/dsh-base 上面叠一层终端 UI,而不是再写一套 Agent 循环。

dsh-code 做的就是这件事。它由 UNLINEARITY 维护,社区目录把它归在「界面增强」。本文按插件目录页、GitHub 仓库 README、许可证、排障文档和 npm 包页面交叉核对后整理:它是什么、装哪条命令、终端里怎么用,以及安装前要看清的权限边界。

需要先分清两件事。DeepSeek Harness 本体在上面的官方仓库,目前仍是 developer preview,接口可能出现破坏兼容性的变化。下面用到的插件目录 deepseek-harness-plugin.com 是社区站点,和 DeepSeek / 幻方没有官方从属关系,不是官方应用商店。

这是什么

dsh-code 是一款 DeepSeek Harness 的终端编码界面插件,目录分类为「界面增强」,由 UNLINEARITY 维护,仓库地址为 UNLINEARITY/dsh-code。许可证为 MIT(Copyright (c) 2026 unlinearity),主要语言是 TypeScript。npm 上的包名同样是 dsh-code,本文核对到的发布版本为 0.9.0。GitHub API 当前显示该仓库 25 星;社区目录页上的星标数字可能滞后,以仓库实时数据为准。

目录页的定位是:带斜杠命令补全的 DeepSeek Harness 终端体验,用来在命令行里跑智能体对话。仓库 README 写得更具体:它以树外 bundle 的形式组合在官方 @deepseek-ai/dsh-base 之上,和 Harness Web UI 使用同一套 Agent、Session、工具、命令、技能、权限、sandbox、上下文压缩与插件服务。DSH-Code 没有另外实现一套 Agent loop,只是在 DSH 运行时上增加面向编码工作的 TUI。

交互上,它分别参考了两个已有工具:会话处理参考 Codex CLI(会话导航、有界浮层、历史检查、稳定底部布局),终端交互参考 Claude Code(斜杠命令发现、思考折叠、审批、提问与 turn steering)。README 同时写明:这是独立的 MIT 社区项目,与 OpenAI 或 Anthropic 无隶属关系。界面看起来眼熟,运行行为仍由 DSH 的服务和配置决定。

同一目录分类里还有 dsh-TUI 等其他终端界面插件。它们都是社区方案,安装源、profile 名称和启动命令并不相同,不要把仓库名混着用。

核心功能

下面这些能力都来自仓库 README,不是演示案例。

1. 不另起 Agent,只换界面

DSH-Code 读取 Harness 的实时注册表,不在本地维护另一套模型、工具或命令副本。模型适配器、工具 provider、技能来源、命令、权限策略、持久化后端、sandbox 和 subagent provider 都可以通过 DSH 的组合机制添加或替换。/plugin 提供当前 Cordis loader 的只读视图:loader 条目、启用状态、模块身份和 fiber 阶段。

整个进程只保留一个 Ink owner。/new/resume 替换的是活动 Agent,而不是把终端拆掉重挂。Agent 忙碌时,切换会等到当前 turn 自然结束;最新请求优先,目标加载失败也不会把当前会话弄坏。

2. 按会话选择 Agent Preset

Host 层共享注册表、持久化、会话查询、权限和 sandbox 策略;每个会话有自己的 Agent scope,由 Agent Preset 组合工具、提示词、技能、上下文压缩、plan mode 和委派能力。README 列出的内置 preset 包括:

  • standard:功能完整的通用编码 Agent
  • code:面向 Code Mode / PTC 的多操作工作流
  • minimal:只保留持久 shell 和 str_replace_editor
  • cordis:完整 Agent,外加运行时检查与 Preset 编写指导
  • 用户预设:自行定义工具、提示词段落、技能、上下文压缩、plan mode 与 subagent 行为

第一次 turn 之前可以用 /mode 查看或选择;也可以在启动时加 --mode。选中的 preset 会写入会话,恢复时还原。

3. 斜杠命令、模型与凭据

斜杠命令和用户技能从共享 Harness 注册表实时发现,不是写死在 TUI 里。进入界面后常用操作包括:

操作 用途
/new [preset] 不重启终端,创建并进入另一个会话
/resume [id\|前缀] 搜索根会话或全部对话,可按 cwd、排序和密度筛选
/mode [preset] 检查或选择空会话的 Agent 组合
/model 在实时 LLM 注册表提供的模型间切换;按 a 管理 provider 与 API key
/plugin [query] 检查 loader 条目、启用状态、模块身份和 fiber 阶段
/permission 切换权限预设;Shift+Tab 可循环切换
/help 浏览本地命令、Harness 命令、技能和快捷键
Ctrl+O 打开独占历史详情视图
Ctrl+R 折叠或展开模型思考过程
@ 引用工作区文件或持久会话的有界快照
Esc / Ctrl+C 关闭最上层界面或中断当前 turn

/model 的 provider 面板只读取凭据的已配置状态、来源和可写性;输入内容会遮蔽,并直接交给 Harness 持久化。由启动环境提供的 key 会标成只读,不能在 TUI 里覆盖或移除。DEEPSEEK_API_KEY 不是启动前置条件:没配 key 也可以进 TUI、查看会话、使用不依赖模型的功能,再在 /model 里按 a 添加。

4. 会话恢复与上下文

提示词、流式 chunk、工具调用与结果、模型选择、plan 状态、权限、标题和 preset 选择,都由持久 Session 事件投影得到。会话恢复、导出、历史检查、上下文统计和终端重放用同一份记录。React state 只保存输入草稿、光标、当前面板、选中项和滚动位置这类临时界面状态。

和会话相关的能力还包括:裸启动会延迟到首次真实输入才创建会话,未输入就退出不会留下空会话;全局输入历史可以用 Up/Down 跨会话召回,/history 搜索面板能回填输入框;subagent 对话可以只读检查,也可以通过 @ 注入有界会话引用。界面会显示上下文占用、缓存、token、TTFT 与耗时指标,并支持 Markdown 导出。

5. 审批、提问和终端布局

sandbox 升级与 hook 的 ask 决策会走一次性工具审批条。结构化 ask_user_question 与 plan review 菜单支持多选和自定义答案。turn steering 发生在下一个 step 边界,中断语义是明确的。Agent mode、plan、权限 preset、goal 与 sandbox 状态相互独立,不会因为切一个开关把另外几个一起改掉。

渲染上,已落定的历史只追加,流式可变区域有视口约束。思考过程可折叠,工具调用有紧凑摘要和完整结构化详情。双行状态栏里,mode 与 context 在第二行,context 用蓝色进度条表示。输入框始终紧贴状态栏上方;固定底部顺序是:内容或面板 → notice → 输入框 → 状态栏。欢迎头会显示已安装版本,以及仓库写明的双语 slogan「Into the Unknown 探索未至之境」。

另外,切换到 DeepSeek 路由、或在同一路由切换 reasoning effort 时,输入框会随机播放 Wave、Aurora 或 Pulse 三种局部动画,Flash 档位和其它 DeepSeek 模型的波段数不同。这是界面装饰,不改变 Agent 行为。

安装与启用

目录页给出的安装命令如下。在 DeepSeek Harness 终端中运行即可,dsh CLI 会从 GitHub 解析插件并装到当前配置:

dsh plugin add github:UNLINEARITY/dsh-code

如需可复现安装,目录页要求固定 commit 哈希:

dsh plugin add github:UNLINEARITY/dsh-code#commit

#commit 换成实际提交哈希。插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。

上面这条是目录页上的官方安装入口。若要按仓库 README 配出可启动的终端界面,还需要 Node ^22.19 || >=24、预览版 dsh CLI,以及 pnpm。README 当前推荐的安装步骤是:

npm install -g @deepseek-ai/dsh dsh-code
npm install -g pnpm
dsh plugin --profile cli add dsh-code@0.9.0

dsh-code@0.9.0 是 README 在本文核实时写明的版本。提示里说:pnpm 会忽略发布不足 24 小时的包,发布首日要用精确版本号;24 小时后可以省略版本,写成 dsh plugin --profile cli add dsh-code。npm 安装不受这个限制。只使用、不参与源码开发时,README 和排障文档都更推荐 npm 发布包,因为它已经包含 lib/ 构建产物。

装好之后,下面三条启动命令是并列的:

deepseek
dsh --profile cli
dsh-code

deepseekdsh-code 都是 dsh --profile cli 的全局别名,后续参数会原样转发,例如 deepseek --resume abc123

从 GitHub 源码安装(用于开发)时,README 写的是:

dsh plugin --profile cli add github:unlinearity/dsh-code

Git 包会在安装阶段构建。若 pnpm 要求添加 allowBuilds,需要把输出的完整条目复制到 ~/.dsh/profiles/cli/pnpm-workspace.yaml,再重新执行命令。该键包含 Git URL 与 commit,不能只写 dsh-code: true。本地 checkout 则使用 dsh plugin --profile cli add file:C:/path/to/dsh-code,把路径换成本机目录。

卸载要分两步,两条都执行才是全量卸载:

dsh plugin --profile cli remove dsh-code
npm uninstall -g dsh-code

第一条只解除 cli profile 的插件挂载,此时 deepseek 命令可能还在,并提示 the cli profile does not mount dsh-code yet;第二条才去掉全局 npm 包和启动别名。卸载不影响 @deepseek-ai/dsh 本体,也不删除已经持久化的会话数据。

典型用法

下面的命令和操作都来自仓库 README,可以按原样复现。

先用 cli profile 起一个会话。默认是 standard preset:

dsh --profile cli

要用面向编码工作流的 preset,加上 --mode

dsh --profile cli --mode code

恢复当前目录最近一次会话、按 id(或唯一前缀)恢复、或指定新会话 id:

dsh --profile cli --continue
dsh --profile cli --resume abc123
dsh --profile cli --session my-id

进入 TUI 之后,一个常见顺序是:

  1. 第一次发消息前执行 /mode,确认当前 Agent Preset。
  2. 执行 /model,需要的话按 a 添加 provider 和 API key。
  3. /help 查看本地命令、Harness 命令、技能和快捷键。
  4. 编码过程中用 @ 引用工作区文件;需要对照历史时用 Ctrl+O
  5. 模型思考太长时用 Ctrl+R 折叠;工具调用需要批准时走界面上的审批条。
  6. 另开一个会话用 /new,找回旧会话用 /resume,不必退出终端。

插件有没有挂上,可以用下面这条检查。排障文档要求输出里能看到 dsh-code/startup

dsh --profile cli --dump-config

适用场景与注意事项

适合已经在用 DSH、又希望把编码智能体留在终端里的人:需要斜杠命令、会话恢复、权限切换、模型管理和工具审批,但不想离开命令行去开 Web UI。它依赖官方 dsh-base 的 Agent、会话和工具服务,所以 DSH 生态里其它插件(技能、模型适配器、sandbox 策略)仍然可以按 Harness 的组合方式叠加。不适合把 DSH-Code 理解成「另一个独立 Agent 产品」——README 反复强调,它没有自己的 Agent loop。

使用前有几件事需要看清楚。

  1. 权限与许可证。 插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查 源代码仓库 和 MIT 许可证。目录页也写了同一条警告。
  2. 预览版接口。 DeepSeek Harness 仍处于 developer preview,可能出现破坏兼容性的变化;DSH-Code 会跟随插件接口演进,但不保证某次 dsh 升级后旧版本界面一定还能启动。
  3. 运行时依赖。 需要 Node ^22.19 || >=24,以及 PATH 上的 pnpm。缺少 pnpm 时,启动会提示 dsh: pnpm not found on PATH — install pnpm to manage profile plugins
  4. Linux 上的 pty.node 排障文档记录:DSH 的本地子进程插件依赖 node-pty,在部分 Linux x64 / Node 24 环境里可能找不到预构建的 pty.node。需要先安装 build-essential、Python 和 make,再进入全局 DSH 安装里的 node-pty 执行 npx node-gyp rebuild。这与 DeepSeek Harness 上游讨论一致,不是 DSH-Code 单独引入的问题,但用终端界面时更容易碰到。
  5. GitHub 源码安装。github:unlinearity/dsh-code 时,pnpm 可能拦截 prepare 构建。只使用发布包更省事;必须跟仓库源码时,按 pnpm 输出的完整 allowBuilds 键授权,不要简化成包名。
  6. 凭据不要写进对话。 环境变量里的 key 在 TUI 中是只读的;在 /model 里新增的 key 会交给 Harness 持久化,输入过程是遮蔽的。不要把密钥贴进聊天记录。

小结

dsh-code 把 DeepSeek Harness 的编码智能体从浏览器挪回终端:斜杠命令、会话恢复、Agent Preset、模型与凭据、审批和思考折叠都在同一个 TUI 里完成,底层仍用官方 dsh-base 的 Agent、Session 和工具服务。它是 UNLINEARITY 维护的 MIT 社区插件,不是 DeepSeek 官方界面,也和 Claude Code、Codex CLI 没有产品从属关系。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-code/

GitHub:https://github.com/UNLINEARITY/dsh-code

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

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

小夜