跳到主内容

dsh-code

27Star2Fork0Issue0Watching

DeepSeek Harness 的终端编码界面,承载 Ink 渲染的交互式 TUI、持久会话、Agent 预设、模型切换与 git 工作流命令。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
MIT
分支
main
claude-codeclicodexdeepseekdeepseek-harnessdshdsh-pluginharness

安装

命令web profile
$ dsh plugin --profile web add dsh-code

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 UNLINEARITY/dsh-code:先查看仓库 https://github.com/UNLINEARITY/dsh-code 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

dsh-code 是 DeepSeek Harness (dsh) 的终端编码界面,把 Agent、会话、模型和工具搬到命令行里,让你在终端里就能开新会话、跑代码、改文件、做 diff 审查。它作为树外 bundle 挂在官方 @deepseek-ai/dsh-base 之上,运行时和 Web UI 共用同一套 Cordis 注册表。

核心能力

  • 启动交互式 TUI,支持 dsh --profile cli、deepseek、dsh-code 三种入口命令(README.md:45-49 / bin/deepseek.mjs:197)
  • 新建、续接、按 ID 前缀恢复、分叉持久会话;会话事件记录可在终端重放(src/index.ts:255-285 / README.md:62-67)
  • 通过 Agent Preset(standard / code / minimal / cordis / 用户自定义)组合工具、技能、plan mode 和 subagent 行为,预设选择会随会话持久化(src/presets.ts:33-46 / README.md:78-79)
  • 在终端内切换模型、reasoning effort、权限 Preset 和 subagent 模型路由,并把每次选择写为全局默认(src/index.ts:956-994 / src/index.ts:529-541)
  • 提供 /diff、/review 工作流,结合 git 检查改动与只读代码审查;/export 把对话导出为 Markdown(README.md:104-108 / src/index.ts:1017-1040)
  • 持久保存状态栏项目、主题(dark/light/auto)和输入历史到 ~/.dsh/dsh-code/ 下的 JSON/JSONL 文件(src/index.ts:555-628)

技术实现

  • 语言: TypeScript
  • 关键依赖: ink (^5.2.1)、react (^18.3.1)、commander (^14.0.2)、@deepseek-ai/dsh-agent (^0.1.0-rc.8)
  • 架构模式: Cordis 插件树;以 bundle patch(cordis.patch.yml)挂载到宿主;启动时声明 tui-startup 服务,tui-runner 在 ctx.tuiStartup.startup 注入下懒加载会话
  • 入口文件: src/index.ts(runner)、src/startup.ts(命令行解析)、bin/deepseek.mjs(launcher wrapper)

适用场景

适合习惯在终端里完成编码工作的开发者:想直接在命令行里跑 AI 编程会话,不想切到 Web;需要复用持久会话做长任务(恢复、分叉、跨目录续接);要在 CI 或 SSH 远程环境里调用同一个 dsh 能力栈,而不是开浏览器。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness0.1.0-rc.8需全局安装 @deepseek-ai/[email protected];peer 依赖全部对齐 ^0.1.0-rc.8
Node.js^22.19 或 >=24engines.node 声明范围(package.json:63)
pnpm任意profile 插件安装依赖 pnpm,全局未装会报错(docs/problems.md:127-142)
平台macOS / Windows / Linuxwrapper 与 TUI 跨平台;Linux 上需 build-essential 才能编译 node-pty
原生模块node-pty(间接)由 DSH 主程序引入;Linux 缺预构建二进制需手动 node-gyp rebuild

安装方式

dsh plugin --profile web add github:UNLINEARITY/dsh-code

配置项

配置类型说明默认值
DSH_TOOLS_MODE环境变量控制 cordis.patch.yml 中 tools 行注入的工具模式;运行时读取进程环境决定,未设置则由宿主默认
DSH_SETTLED_ROWS环境变量历史回放最大行数;0 关闭封顶,恢复无限滚动(src/app.ts:94-99)3000
--theme <name>命令行 / 持久化终端配色:dark、light 或 auto;同时写入 ~/.dsh/dsh-code/theme.jsondark(README.md:96)
--mode <preset>命令行启动时锁定本次会话的 Agent Preset;首次 turn 之后即锁死standard
`--resume <id前缀>`命令行按 id 或唯一前缀恢复持久会话
--continue / -c命令行续接当前目录下最近修改的会话无
--session <id>命令行创建指定 id 的新会话(id 必须不存在)无
状态栏项目(~/.dsh/dsh-code/statusline.json)JSON 文件用户级持久化状态栏显示项;缺失或损坏时降级默认默认
输入历史(~/.dsh/dsh-code/history.jsonl)JSONL 文件提交过的提示词历史,最多保留 500 条空

常见问题

Q: 启动后报 the cli profile does not mount dsh-code yet 怎么办?

A: 意味着 alias 在的、但 profile 没挂上插件。执行 dsh plugin --profile cli add dsh-code(或带版本号 [email protected])挂上,再用同样命令启动即可(bin/deepseek.mjs:170-179)。

Q: 用 GitHub 源码安装时 pnpm 反复提示 allowBuilds?

A: Git 包不含发布版的 lib/,会在 prepare 阶段构建;需要把 pnpm 提示里的完整条目(含 git URL 和 commit)原样写入 ~/.dsh/profiles/cli/pnpm-workspace.yaml,再重跑安装命令(docs/problems.md:60-99)。

Q: Linux 上报 Cannot find module './prebuilds/linux-x64/pty.node'?

A: 这是 DSH 主程序依赖的 [email protected] 缺预构建二进制。先 apt install build-essential python3 make g++,再 cd "$(npm root -g)/@deepseek-ai/dsh/node_modules/node-pty" 下执行 npx node-gyp rebuild,确认 build/Release/pty.node 已生成(docs/problems.md:5-58)。

Q: 模型切换后子代理(subagent)还在用旧模型?

A: 正常。子代理在创建时就已经确定 AgentOptions,运行时改 /model 不会回灌到子任务;可以用 /subagent 单独指定子代理模型,覆盖默认行为(src/index.ts:529-541 / README.md:81)。

Q: 怎么彻底卸载?

A: 需要两条都做:dsh plugin --profile cli remove dsh-code 解除挂载、npm uninstall -g dsh-code 移除全局包和 deepseek/dsh-code 命令。只解挂载时 alias 仍存在并报错提示(README.md:255-260)。

Q: 切换 Preset 报 mode is locked after the first turn?

A: 这是设计行为:首次 turn 之后 Preset 写进会话事件并锁定。要换 Preset 只能 /new <mode> 开新会话(src/presets.ts:60-72)。

Q: TUI 卡死或想中断当前 turn 怎么办?

A: Esc 中断当前 turn;Ctrl+C 依次用于取消任务、清空输入、退出;Ctrl+D 直接退出 DSH-Code。退出时 TUI 会按顺序 flush 会话、dispose agent、等待最后一次组合、写入历史再请求退出(README.md:181-188 / src/index.ts:647-682)。

上手难度

进阶 — 需要熟悉 Cordis 插件模型、DSH 持久会话事件流以及 pnpm 工作区机制才能理解 bundle patch 是怎么挂上去的;普通用户直接 dsh --profile cli 用即可。

已知问题与限制

  • DeepSeek Harness 仍处于 developer preview(0.1.0-rc.8),后续可能有不兼容变更;dsh-code 1.0.x 是基于 rc.8 插件线构建,需保持全局 dsh 与 dsh-code 版本一致(README.md:54 / package.json:73-100)
  • Linux x64 + Node 24 等无预构建二进制的环境下,[email protected] 全局安装可能留下缺失的 pty.node,需手动 node-gyp rebuild(docs/problems.md:5-58)
  • 通过 --session <id> 自定义 id 创建会话时,回退到持久后端的 SQLite 等无 locatable artifact 时 /delete 会拒绝删除(src/index.ts:1098-1125)
  • 续接子代理会话会被拒绝(subagent conversations are read-only),CLI 不能给子任务的持久日志追加根 turn(src/index.ts:276-279)
  • pnpm 在包发布首 24 小时内忽略未固定版本的包,GitHub 安装首日需用精确版本 [email protected];npm 安装不受此限(README.md:38-39)

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/UNLINEARITY/dsh-code)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录