lcgash / dsh-cli-mode

已收录

Terminal-first CLI for DeepSeek Harness — chat with agents, switch sessions/models/permissions, approve actions, codex-style workspace.

main模型工具会话 查看源代码

安装

npx -y @deepseek-ai/dsh plugin --profile web add github:lcgash/dsh-cli-mode

此安装命令根据 GitHub 仓库地址生成,是未经验证的安装起点。

README

维护者编写的文档快照。

在 GitHub 查看 ↗
提交版本 d4b76f7同步于 2026年8月18日

dsh-cli-mode

English | 中文

DeepSeek Harness 会话变成终端可交互的 CLI——在 terminal 里直接和 agent 对话、开发代码,不用一直盯着网页。逻辑类似 codex:在哪个目录启动 CLI,哪个目录就是工作区

  • 插件(Cordis,Host-only):在 harness 的 web 端口上注册 /dsh-cli/* 路由,桥接会话、事件流、权限与审批。
  • 客户端(dsh-cli,纯 Node 零依赖):逐 token 流式输出、markdown 渲染、竖排菜单、会话切换、模式/模型/权限切换、审批 y/n。

特性

能力说明
流式输出 + markdown 渲染回答逐 token 流式显示,标题/加粗/代码块/表格实时渲染;思考内容默认折叠(/think 查看)
codex 式工作区启动目录即会话工作区,workspaceRegistry 绑定
会话管理/open /resume /switch /attach /close,/sessions 按工作区过滤
竖排菜单输入 / 弹出(claude 式:↑↓ 选择、打字过滤、备用屏幕渲染、主屏零滚动)
模式/模型/权限/mode(agent preset)、/model/permission(read-only / workspace-write / danger-full-access)
授权桥接agent 需要审批时终端弹出 🔐,y/n 答复(走 harness mux 通道,与网页同源)
工具折叠工具调用默认折叠为一行汇总(/tools on 看详情),任务完成显示 ✓ 完成 标记
自举安装首次运行自动把插件装进 harness(经 session.prompt + cordis_define/cordis_run)
底部状态行提示符上方常驻显示当前模型与 reasoning 级别(灰色小字)

安装

方式 A:作为 composition 插件挂载(推荐,重启自动加载)

在 harness 的 cordis.yml(或 agent preset)里加一行:

- id: cli-mode
  name: 'dsh-cli-mode'

或通过 dsh CLI 安装依赖:

dsh plugin --profile web add dsh-cli-mode

方式 B:客户端自举(无需改配置)

dsh-cli 首次连接时若发现插件未激活,会自动安装并启用(需要一个 cordis preset 会话,没有则自动创建一个)。

使用

npm install -g dsh-cli-mode   # 安装客户端(或 npx / 本地运行 bin/dsh-cli.mjs)
dsh-cli                        # 首次会询问 web 地址,记录到 ~/.dsh/cli.config
dsh-cli --resume [id]          # 恢复历史会话
dsh-cli --attach <id>          # 接到某个 live 会话

内置命令

/help  /sessions  /switch  /attach  /open  /resume  /close
/mode  /model  /permission  /tools  /think  /transcript  /cancel  /clear  /exit

输入 / 弹出命令菜单;行尾 \ 续行多行输入。

引用文件/目录:输入 @ 弹出文件选择器(codex 式,前缀/模糊搜索,↑↓ 选择),选中自动插入 @路径;也可以手写 @路径。内容会自动内联给 agent;相对路径基于 CLI 启动目录(即工作区);超过 64KB 或二进制文件不内联。

授权交互

🔐 授权请求 (bash)
  escalate sandbox to danger-full-access: 目标文件 ... 位于会话工作区之外...
  y = 允许一次 | n = 拒绝

配置

  • ~/.dsh/cli.config:{ "url": "http://127.0.0.1:3080" }(web 地址,--url 覆盖并写入)
  • API key 等基础配置在网页页面完成,CLI 不做密钥管理。

架构

┌─ dsh-cli(终端)──────────────────────────────┐
│  bin/dsh-cli.mjs                             │
│   · /dsh-cli/* HTTP 路由调用(会话/权限)       │
│   · /dsh-cli/stream SSE(对话流式输出)         │
│   · /api/events.mux WebSocket(审批请求)       │
│   · /api/respond(审批答复)                    │
└──────────────┬───────────────────────────────┘
               │ http://127.0.0.1:3080
┌──────────────▼───────────────────────────────┐
│  harness(web 进程)                           │
│  lib/index.js —— cli-mode 插件(Host)          │
│   · /dsh-cli/* 路由(webServer)                │
│   · session/event → SSE 流(assistant/chunk 等)│
│   · permissionPresets 切换权限                │
│  apiProxy —— 会话/模型/预设 RPC、审批 pending  │
└──────────────────────────────────────────────┘
  • 会话流:输入经 agent.followup() 注入(与网页同通道),输出由 session/event 渲染为 SSE。
  • 审批:网页 answerer 拥有 approval/request 瀑布;客户端订阅 mux 流拿到 approval/requested(含 rpcId),经 /api/respond 答复。
  • 自举:客户端把 lib/plugin-source.txt(插件原始体)内嵌进安装消息,让 cordis preset 会话的 agent 执行 cordis_define + cordis_run

开发

git clone <gitee 仓库地址>
cd dsh-cli-mode
npm run check         # 语法检查
npm test              # 冒烟测试

保持 lib/index.jslib/plugin-source.txt 同步:自举安装用的是 plugin-source.txt(原始函数体文本),挂载安装用的是 lib/index.js。修改插件逻辑后执行:

npm run sync-source   # 从 lib/index.js 重新生成 plugin-source.txt

发布

项目托管于 Gitee。发布到 npm(发布包内容由 package.jsonfiles 决定):

npm version patch     # 或 minor / major
npm publish           # 需 npm 账号与包名

CI/自动发布可在 Gitee 上自行配置(如 Gitee Go),本仓库不携带平台特定的工作流配置。

License

MIT

项目文件与信号

以下项目是目录快照中检测到的公开仓库信号。

测试已检测

仓库信息

开发语言
JavaScript
许可证
MIT
最后更新
2026年8月17日 10:46

谨慎安装

请检查源代码、权限、生命周期脚本、依赖与网络访问;不受信任的插件应先在隔离环境中测试。