← 返回列表
未验证
在终端里流式对话并调用工具,支持 @ 引用文件
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/15 · 已提供中文文档
为当代CLI动员量身定制的最小DeepSeek Harness扩展。
综合分
26.7
GitHub 分
26.7
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add kit-zeason/dsh-simple-CLI该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-agent@deepseek-ai/dsh-base@deepseek-ai/dsh-cmdline@deepseek-ai/dsh-code-runtime-worker-thread@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/schemastery用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-simple-cli — DeepSeek Harness 的交互式终端配置
v0.1.2 - 发布版本 · 更新日志
dsh-simple-cli 将 DeepSeek Harness(dsh)变成一个交互式终端聊天工具,就像 Claude Code 一样:输入一条消息,看着回答流式输出,让对话持续进行。它通过 dsh-cli 命令启动(等同于 dsh --profile cli)。
English · 中文
它是什么
dsh 自带 web / headless 配置。本仓库新增了一个 cli 配置,完全在终端中运行,风格类似 Claude Code:
- 带推理与工具调用的流式输出 —— 助手文本、模型推理(▸ 推理,暗灰色)和工具调用(⛭ name: args + ✓/✗ 结果)实时流式输出,与 TUI 体验一致。推理在思考时折叠为最新一行(web 风格),渲染合并到约 30fps,因此快速思考不会让终端闪烁
- @ 文件选择器 —— 在输入框中输入 @ 即可浏览工作目录(输入以过滤,↑/↓ 导航,Enter 进入文件夹或选择文件,Esc 关闭);选择后插入 @relative/path,提交时每个引用的文本文件都会附加到消息中(每个最大 64 KB,超出会截断并附注;二进制文件保留为路径提及)
- ── 输入区域 —— 一条分隔线框住输入框;Enter 提交,Shift+Enter / Ctrl+Enter 插入换行(多行消息;需要 kitty 键盘协议 —— Windows Terminal 1.19+、kitty、WezTerm、iTerm2、Konsole、foot —— 否则 Ctrl+J 或 Alt+Enter 可作为备选),↑/↓ 导航历史或逻辑行
- 状态栏 —— 位于输入框下方:当前模型与权限,切换命令始终可见
- 连续对话 —— 在单个 Agent 会话上进行多轮上下文
- 工具调用审批 —— 在 "ask" 策略下,于同一输入区域中内联使用 y / n / Enter
- 命令 —— /new 新建会话 · /model [provider/] 切换模型(单独输入 /model 打开可过滤的选择器) · /preset [id] 切换 agent 预设(单独输入 /preset 打开可过滤的选择器) · /permission ask|never 切换审批策略 · /clear · /exit;可选的首条消息可作为参数传入
- 默认配色方案 —— 每个角色都有自己的颜色(用户绿色、推理灰色、工具黄色/青色……);可通过 DSH_CLI_THEME 环境变量覆盖(见下文)
要求
- Node.js ≥ 22(已在 24 上测试)
- PATH 中有 dsh ≥ 0.1.0-rc.6:npm i -g @deepseek-ai/dsh
- install.ps1 需要 PowerShell 5.1+ / pwsh(Windows 与 Unix)
安装
一键安装(Windows 与 Unix,PowerShell)
git clone https://github.com/kit-zeason/dsh-simple-CLI.git
cd dsh-simple-CLI
.\install.ps1 # install into $DSH_HOME/profiles/cli, shim onto PATH, verify
.\install.ps1 -Force # re-install / overwrite existing profile files
安装程序:
1. 创建 $DSH_HOME/profiles/cli(默认 ~/.dsh/profiles/cli)
2. 将 dsh-simple-cli 包复制到该配置文件的 node_modules 中
3. 写入配置文件清单(package.json、cordis.patch.yml、pnpm-workspace.yaml)
4. 安装全局 dsh-cli 命令垫片
5. 验证 dsh --profile cli --help
无需 git clone —— 直接安装特定的已发布版本:
Invoke-WebRequest -Uri https://raw.githubusercontent.com/kit-zeason/dsh-simple-CLI/main/install.ps1 -OutFile install.ps1
.\install.ps1 -Version 0.1.0 # 下载 release v0.1.0 并安装
.\install.ps1 -Version 0.1.0 -Force # 重新安装,覆盖已有的配置文件
-Version 接受 0.1.0 或 v0.1.0;如果不提供,脚本会安装它所属的
检出内容(例如你克隆的 main)。
手动安装(任意操作系统)
$profiles = Join-Path $env:USERPROFILE '.dsh\profiles'
New-Item -ItemType Directory -Force -Path "$profiles\cli\node_modules\dsh-simple-cli\lib"
Copy-Item package.json, cordis.patch.yml "$profiles\cli\node_modules\dsh-simple-cli\"
Copy-Item lib\index.js, lib\startup.js "$profiles\cli\node_modules\dsh-simple-cli\lib\"
Copy-Item profile\package.json, profile\cordis.patch.yml, profile\pnpm-workspace.yaml "$profiles\cli\"
可选:将 bin\dsh-cli(.cmd/.ps1) 放到 PATH 上的某个位置
用法
dsh-cli # 启动交互式聊天
dsh --profile cli # 同上
dsh-cli "run the tests" # 发送首个任务,然后继续聊天
┌───────────────────────────────────────────────┐
│ dsh-cli: DeepSeek Harness 交互模式(/help …) │
│ ▸ 推理 let me check the repo layout… │ ← 暗灰色,流式输出
│ ⛭ pwsh: Get-ChildItem -Recurse . │ ← 黄色
│ ✓ Directory: … │ ← 青色
│ 这里是最新的文件清单:… │ ← 流式回复
│───────────────────────────────────────────────│
│ > 输入你的消息… (Shift+Enter 换行, Enter 发送) │ ← 输入区域
│ 模型: deepseek/deepseek-v4-flash · 权限: ask … │ ← 状态栏
└───────────────────────────────────────────────┘
命令(在输入区域输入):
| 命令 | 效果 |
| --- | --- |
| /model | 打开模型选择器(浏览或关键词搜索,然后选择) |
| /model | 切换模型(同一提供商),例如 /model deepseek-v4-flash |
| /model / | 切换提供商 + 模型 |
| /preset | 打开预设选择器(标准 / PTC / 极简 / 创造 + 你自己的) |
| /preset | 切换预设(在空白会话中实时生效,否则在 /new 时应用) |
| /permission ask / never | 切换审批策略(别名:/perm) |
| /new | 开始一个新会话 |
| /clear | 清空回滚缓冲区 |
| /help、/exit | 帮助 / 退出(Ctrl+C 也可退出) |
预设:每个会话由一个 DSH agent 预设组成(与 Web 应用相同的机制——标准/standard、PTC/code、极简/minimal、创造/cordis)。默认是 standard;在 $DSH_HOME/settings.yaml 的 agent-presets.default 下设置持久默认值,并在 $DSH_HOME/.agent-presets/ 中编写你自己的预设(一个包含 agent.cordis.yml + 可选 preset.yml 的目录)。
工具授权提示(内联在同一输入区域):
? [授权] pwsh: … — y 允许一次 / n 拒绝 / 回车 允许
配色方案(通过环境变量 DSH_CLI_THEME= 覆盖;每个值是一个 SGR 参数字符串):
{ "user": "1;92", "reasoning": "2;90", "toolCall": "33",
"toolResult": "36", "toolError": "1;31", "system": "35", "status": "36" }
工作原理
三层,全部是普通文件:
| 层 | 位置 | 内容 |
| ------- | -------------------------------------------------- | ----------------------------------------------------- |
| bundle | 仓库根目录(npm 包 dsh-simple-cli) | cordis.patch.yml + lib/ —— runner 插件 |
| profile | $DSH_HOME/profiles/cli | 列出 bundle @deepseek-ai/dsh-base + dsh-simple-cli 的清单 |
| shim | npm 全局 bin 目录 | dsh-cli → dsh --profile cli |
- Bundle 解析(resolveBundleDir)先检查 dsh 安装目录,再检查 profile 自身的 node_modules —— 因此把 bundle 放到 profiles/cli/node_modules/dsh-simple-cli 就足够了。
- 依赖 —— 每个运行时导入(@deepseek-ai/dsh-agent、dsh-llm、dsh-session、schemastery、commander……)都会沿目录树向上解析到随 dsh 一起提供的共享 profiles/node_modules。无需 pnpm install。
- Runner —— lib/index.js 通过核心注册表创建一个 Agent,然后实时渲染 session/event 事件流:assistant/chunk 增量流式输出推理/文本/工具调用参数,tool/call + tool/result 绘制工具行,approval/request 在同一输入区域内联应答。非 TTY stdin(管道/CI)回退到普通的 readline 循环。
- UI —— lib/ui.js 是一个无依赖的 raw 模式迷你 TUI(仅 ANSI):滚动回看 + ── 分隔符 + 多行编辑器 + 状态栏;lib/theme.js 保存调色板。
- 注意 —— dsh 每次启动都会把 profile 的 cordis.yml 重写为 [];请把你的改动保留在 cordis.patch.yml 中。
仓库布局
dsh-simple-cli/
├── README.md # 本文件
├── LICENSE # MIT
├── package.json # dsh-simple-cli bundle 包
├── cordis.patch.yml # bundle 补丁(loader 补丁列表)
├── lib/
│ ├── index.js # cli-runner 插件:agent 循环、事件渲染器、/model /permission
│ ├── startup.js # cli-startup 插件:命令行解析
│ ├── ui.js # 原始模式迷你 TUI:输入区、流式视图、状态栏
│ ├── theme.js # 调色板 + DSH_CLI_THEME 覆盖
│ └── refs.js # @file 引用:查找并附加被引用文件的内容
├── test/
│ ├── ui.test.mjs # Tui 单元测试(node test/ui.test.mjs)
│ └── refs.test.mjs # @file 引用单元测试(node test/refs.test.mjs)
├── profile/ # cli profile 模板
│ ├── package.json
│ ├── cordis.patch.yml
│ └── pnpm-workspace.yaml
├── bin/ # dsh-cli 命令垫片
│ ├── dsh-cli.cmd # Windows cmd
│ ├── dsh-cli.ps1 # PowerShell
│ └── dsh-cli # POSIX sh
└── install.ps1 # 一键安装器
开发
在此仓库中编辑 bundle 源码,然后同步正在运行的副本:
Copy-Item -Recurse -Force .\lib, .\package.json, .\cordis.patch.yml "$HOME\.dsh\profiles\cli\node_modules\dsh-simple-cli\"
故障排查
- dsh --profile cli 提示 profile 不存在 —— profile 目录需要 package.json;运行 .\install.ps1。
- cordis.yml 总是变回 [] —— 这是预期行为;dsh 会重新生成它。请改为编辑 cordis.patch.yml。
- 重命名了 bundle —— 请保持 package.json 中的 name、cordis.patch.yml 中的插件名称,以及 profile 的 bundle 列表三者同步。
路线图
- 在 $DSH_HOME 下实现跨会话的 ↑/↓ 历史持久化
- /sessions 会话列表
- 发布到 npm(dsh-simple-cli),以便他人可以通过 dsh plugin --profile cli add dsh-simple-cli 安装
许可证
MIT © godzeason
中文
这是什么
v0.1.2 - Releases · Changelog
dsh-simple-cli 给 DeepSeek Harness(dsh)加了一个纯终端交互式 profile(启动命令为 dsh-cli):像 Claude Code 一样在终端里持续对话,流式输出、↑/↓ 历史、工具调用授权提示。
特性
- 流式输出(含推理与工具调用):正文、模型推理(▸ 推理,暗灰)与工具调用(⛭ 名称: 参数 + ✓/✗ 结果)实时流入,与 TUI 体验一致。思考时推理折叠为单行、实时显示最新一行(网页端风格),渲染合并到约 30fps,快速思考不会导致终端闪屏
- @ 文件选择器:输入 @ 即可浏览工作目录(继续输入过滤、↑/↓ 选择、Enter 进入目录或选中文件、Esc 关闭);选中后插入 @相对路径,提交时每个被引用的文本文件会作为附件注入消息(单个上限 64KB,超出截断并注明;二进制文件只保留路径引用)
- ── 输入区:分隔线框住输入框;Enter 发送,Shift+Enter / Ctrl+Enter 换行(支持多行消息;需要终端支持 kitty 键盘协议——Windows Terminal 1.19+、kitty、WezTerm、iTerm2、Konsole、foot 等——否则可用 Ctrl+J 或 Alt+Enter 兜底换行),↑/↓ 翻历史或跨行移动
- 状态栏:输入区下方实时显示当前模型与权限,并常驻切换命令提示
- 多轮持续对话:同一 Agent 会话保持上下文连续
- 工具授权:agent 请求调用工具时("ask" 策略)在同一输入区内联应答 y/n/回车
- 命令:/new 新会话 · /model [provider/] 切换模型(裸 /model 弹出可过滤的模型选择框) · /preset [id] 切换预设(裸 /preset 弹出可过滤的预设选择框) · /permission ask|never 切换权限 · /clear · /exit;支持可选首条消息参数
- 默认配色:各角色分色(用户绿、推理灰、工具黄/青…);可用 DSH_CLI_THEME 环境变量覆盖
安装
一键安装(Windows / Unix,PowerShell)
git clone https://github.com/kit-zeason/dsh-simple-CLI.git
cd dsh-simple-CLI
.\install.ps1 # 安装到 $DSH_HOME/profiles/cli,注册 dsh-cli 命令并自检
.\install.ps1 -Force # 覆盖已有 profile 配置文件
脚本会:创建 profile 目录 → 复制 bundle → 写 profile 清单 → 安装全局 dsh-cli shim → 验证 dsh --profile cli --help。
不想 clone?可直接下载安装脚本并指定版本安装:
Invoke-WebRequest -Uri https://raw.githubusercontent.com/kit-zeason/dsh-simple-CLI/main/install.ps1 -OutFile install.ps1
.\install.ps1 -Version 0.1.0 # 下载 release v0.1.0 并安装
.\install.ps1 -Version 0.1.0 -Force # 重新安装,覆盖已有 profile 配置
-Version 接受 0.1.0 或 v0.1.0;不带该参数时安装脚本所在目录的代码(如 clone 的 main)。
手动安装(任意平台)
$profiles = Join-Path $env:USERPROFILE '.dsh\profiles'
New-Item -ItemType Directory -Force -Path "$profiles\cli\node_modules\dsh-simple-cli\lib"
Copy-Item package.json, cordis.patch.yml "$profiles\cli\node_modules\dsh-simple-cli\"
Copy-Item lib\index.js, lib\startup.js "$profiles\cli\node_modules\dsh-simple-cli\lib\"
Copy-Item profile\package.json, profile\cordis.patch.yml, profile\pnpm-workspace.yaml "$profiles\cli\"
使用
dsh-cli # 开始交互对话
dsh --profile cli # 等价
dsh-cli "run the tests" # 先发一条任务,之后继续对话
界面示意:
┌──────────────────────────────────────────────┐
│ dsh-cli: DeepSeek Harness 交互模式(/help …) │
│ ▸ 推理 let me check the repo layout… │ ← 暗灰,流式
│ ⛭ pwsh: Get-ChildItem -Recurse . │ ← 黄色
│ ✓ Directory: … │ ← 青色
│ 这里是最新的文件清单:… │ ← 流式正文
│──────────────────────────────────────────────│
│ > 输入你的消息… (Shift+Enter 换行, Enter 发送) │ ← 输入区
│ 模型: deepseek/deepseek-v4-flash · 权限: ask … │ ← 状态栏
└──────────────────────────────────────────────┘
命令一览:
| 命令 | 作用 |
| --- | --- |
| /model | 弹出模型选择框(浏览或输入关键字过滤后选中) |
| /model | 切换模型(保持 provider),如 /model deepseek-v4-flash |
| /model / | 同时切换 provider 与模型 |
| /preset | 弹出预设选择框(标准 / PTC / 极简 / 创造 + 自定义) |
| /preset | 切换预设(空白会话立即生效,否则 /new 后生效) |
| /permission ask / never | 切换权限策略(别名 /perm) |
| /new | 开启新会话 |
| /clear | 清空回滚区 |
| /help、/exit | 帮助 / 退出(Ctrl+C 也可退出) |
预设:每个会话由一个 DSH agent preset(与网页端同一套机制——标准/standard、PTC/code、极简/minimal、创造/cordis)组装而成。默认是 standard;可在 $DSH_HOME/settings.yaml 的 agent-presets.default 设置持久默认值,自定义 preset 放在 $DSH_HOME/.agent-presets/(一个含 agent.cordis.yml 与可选 preset.yml 的目录)。
工具授权提示(同一输入区内联):
? [授权] pwsh: … — y 允许一次 / n 拒绝 / 回车 允许
配色覆盖(DSH_CLI_THEME=,值为 SGR 参数串):
{ "user": "1;92", "reasoning": "2;90", "toolCall": "33",
"toolResult": "36", "toolError": "1;31", "system": "35", "status": "36" }
工作原理
三层结构,全是普通文件:
| 层 | 位置 | 内容 |
| --- | --- | --- |
| bundle | 仓库根(npm 包 dsh-simple-cli) | cordis.patch.yml + lib/ 运行器插件 |
| profile | $DSH_HOME/profiles/cli | 清单:@deepseek-ai/dsh-base + dsh-simple-cli |
| shim | npm 全局 bin | dsh-cli → dsh --profile cli |
- bundle 解析:先查 dsh 安装目录,再查 profile 自身 node_modules,因此把 bundle 放进 profiles/cli/node_modules/dsh-simple-cli 即可
- 依赖:所有运行时 import 沿目录树上溯到 dsh 自带的共享 profiles/node_modules,无需 pnpm install
- 运行器:lib/index.js 通过核心注册表建一个 Agent,把 session/event 事件流实时渲染:assistant/chunk 增量流式显示推理/正文/工具参数,tool/call + tool/result 绘制工具行,approval/request 在同一输入区内联应答;非 TTY(管道/CI)自动回退为普通 readline 循环
- UI:lib/ui.js 是无依赖的 raw 模式迷你 TUI(纯 ANSI):回滚区 + ── 分隔线 + 多行编辑器 + 状态栏;lib/theme.js 提供配色
- 注意:dsh 每次启动会把 profile 的 cordis.yml 重写为 [],改动请写在 cordis.patch.yml
仓库结构
dsh-simple-cli/
├── README.md # 本文件(中英双语)
├── LICENSE # MIT
├── package.json # dsh-simple-cli bundle 包
├── cordis.patch.yml # bundle patch(loader patch 列表)
├── lib/
│ ├── index.js # cli-runner 插件:agent 循环 / 事件渲染 / /model /permission
│ ├── startup.js # cli-startup 插件:命令行解析
│ ├── ui.js # raw 模式迷你 TUI:输入区 / 流式视图 / 状态栏
│ ├── theme.js # 配色 + DSH_CLI_THEME 覆盖
│ └── refs.js # @file 引用:查找并附加引用文件内容
├── test/
│ ├── ui.test.mjs # Tui 单元测试(node test/ui.test.mjs)
│ └── refs.test.mjs # @file 引用单元测试(node test/refs.test.mjs)
├── profile/ # cli profile 模板
│ ├── package.json
│ ├── cordis.patch.yml
│ └── pnpm-workspace.yaml
├── bin/ # dsh-cli 命令 shim
│ ├── dsh-cli.cmd # Windows cmd
│ ├── dsh-cli.ps1 # PowerShell
│ └── dsh-cli # POSIX sh
└── install.ps1 # 一键安装脚本
开发
改完本仓库的 bundle 源码后,同步运行副本:
Copy-Item -Recurse -Force .\lib, .\package.json, .\cordis.patch.yml "$HOME\.dsh\profiles\cli\node_modules\dsh-simple-cli\"
已知的坑
- dsh --profile cli 报 profile 不存在 → 需先建 profiles/cli/package.json,跑一遍 .\install.ps1
- cordis.yml 总被重置为 [] → 正常现象,改 cordis.patch.yml
- 改 bundle name → 同步 cordis.patch.yml 里的插件名和 profile 的 bundles 列表
路线图
- 跨会话 ↑/↓ 历史持久化(存 $DSH_HOME)
- /sessions 历史会话列表
- 发布 npm(dsh-simple-cli),他人可 dsh plugin --profile cli add dsh-simple-cli
License
MIT © godzeason扫码进群