TiChuXiXi
dsh-command-md
File-driven slash commands for DSH: markdown command files become /commands, opencode-style
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 14, 2026
- Updated
- Aug 14, 2026
Introduction
dsh-command-md
文件驱动的全局斜杠命令插件,为 DeepSeek Harness 提供 opencode 风格的 /xxx 快捷指令:
在用户命令目录(~/.dsh/commands/)放一个 Markdown 文件,文件名就是命令名,文件正文就是命令内容。执行 /命令名 时,插件读取文件正文并作为新的用户消息注入当前对话,模型随即开始处理。
命令是全局的:插件启动时注册一次,在任何会话、任何工作区都可用,不区分工作区(如果你需要按工作区区分的项目级命令,本插件不做——那是另一套机制)。
命令文件格式
放在 ~/.dsh/commands/ 下,例如 ~/.dsh/commands/review.md:
---
description: 让模型审查当前工作区的改动
input-hint: 可选提示
---
请审查当前工作区的代码改动,重点关注:
1. 潜在 bug
2. 安全问题
$ARGUMENTS
- 文件名:
review.md→ 命令/review。只接受^[a-z][a-z0-9_-]*$(小写字母、数字、_、-)。 - frontmatter:
---包裹的key: value对。description用于命令菜单展示(缺省时用Run the <name> command);input-hint可选,展示为输入占位符。其余键忽略。 - 正文:
---之后的全部内容(首尾空行会被修剪)。$ARGUMENTS会被替换为用户在命令后输入的参数(去首尾空白)。
执行 /review 重点看安全 时,注入的消息为:
请审查当前工作区的代码改动,重点关注:
1. 潜在 bug
2. 安全问题
重点看安全
安装
从 npm 安装(推荐)
# 在 dsh web profile 中安装
dsh plugin --profile web add dsh-command-md
安装完成后重启 dsh web 即生效。
本插件的挂载由 profile 的
cordis.patch.yml完成(插入command-mdloader 行),npm 安装后该 loader 行会按包名解析到 registry 版本,无需额外配置。
从本地源码安装(开发调试)
- 把插件目录放到你喜欢的位置(当前位于
D:\zxh\deepseek\dsh-command-md)。 - 在
~/.dsh/profiles/web/package.json的dependencies中加入:"dsh-command-md": "link:D:/zxh/deepseek/dsh-command-md"link:是 pnpm 的本地目录引用:不拷贝代码,只建一个指向该目录的链接,改插件代码后重启 dsh 即生效。注意:link:指向绝对路径,换电脑后需把插件目录拷贝过去并更新此路径;要可移植请改用 npm 发布(见下文)。 - 在
~/.dsh/profiles/web/cordis.patch.yml的insert列表追加(与现有 MCP 插件同级):- id: command-md name: 'dsh-command-md' # 可选配置: # config: # dshHome: '~/.dsh' # 用户命令目录的 DSH home(默认 ~/.dsh) # maxBytes: 1048576 # 单文件大小上限 - 安装依赖并重启:
然后重启cd ~/.dsh/profiles/web && pnpm installdsh web。
换电脑 / 可移植性
- 本地 link(开发方式):配置不随电脑走——每台机器需要
git clone插件到同一路径(或改 link 路径)后再pnpm install。 - 发布 npm:
npm version patch && npm publish推到 registry 后,任何机器dsh plugin --profile web add dsh-command-md即装,更新用dsh plugin --profile web update dsh-command-md。适合插件功能稳定后迁移。
配置
| 字段 | 默认 | 说明 |
|---|---|---|
dshHome | ~/.dsh | DSH 主目录,用于推导用户命令目录 |
userDir | <dshHome>/commands | 用户命令目录(全局生效) |
maxBytes | 1048576 | 单个命令文件大小上限(字节) |
开发
node test/parse.test.mjs # 单元测试(零依赖)
# 集成测试需要能解析 @deepseek-ai/dsh-llm,可临时建 junction:
# New-Item -ItemType Junction -Path node_modules -Target C:\Users\<you>\.dsh\profiles\node_modules
node test/integration.mjs
纯解析逻辑位于 lib/parse.js(零运行时依赖),插件入口位于 lib/index.js。
限制
- 命令名不支持路径嵌套(
commands/foo/bar.md不会生成/foo/bar);请使用foo-bar.md风格。 - 每次执行都重新读文件,因此新增/删除命令文件需要重启(或 HMR)后才出现在命令菜单中;修改已存在文件的内容则立即生效。
- frontmatter 只解析标量键值对,不支持 YAML 列表/嵌套对象。
- 命令是全局的,不区分工作区;如需项目级命令请另行设计。