dsh-mint
已验证@yanqd0/dsh-mint · v0.2.0 · MIT · Web 界面
DSH plugin: mint issue tracking integration — session context injection, event reminders, plan binding, a zero-approval `mint` tool, and a read-only mint panel in the right sidebar.
安装
dsh plugin add @yanqd0/dsh-mint 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
dsh-mint
English | 中文
把 mint 的事项跟踪装进 DSH 会话:每个会话 一开始就知道还有什么没做,每次改动都留下登记,宿主 plan 背后始终有一个 mint plan。
功能
- 会话上下文 —— 每个会话开头注入
[Mint]概览:活跃 issue 前列、当前 running milestone,以及"新 plan 与独立 issue 默认挂它"的口径。 mint工具,零授权 —— agent 经宿主工具使用完整 mint CLI:mint 在插件 进程内 spawn,不经 bash、不需要沙箱写权限、不弹审批。子代理同样继承该工具 (子代理的 bash 被 pin 为never)。危险子命令(delete、import、sync、export、tui)与全局参数--db会被拒绝。- 跨项目操作 ——
-p/--project(写在子命令之前)可在同一会话里读写 另一个项目的台账:读直接放行;写操作首次弹一次确认(写明目标项目与动作), 之后同一会话同一项目不再询问。目标项目不存在时报候选清单而不是静默新建, 且autoApprove不会让它免确认。 - plan 双向绑定 —— 项目没有活跃 mint plan 时
exit_plan_mode被拒,宿主 plan 不会与 mint plan 脱钩。 - 提醒 ——
git commit后提醒 agent 登记(issue state commit --sha); 工具调用失败时提示登记 issue。 - 内置 mint skill —— 随包发布的
mintskill 在插件加载时 content-sync 到$DSH_HOME/skills/mint,无需手工安装 skill,agent 即知 issue/plan/milestone 流程。 - bash 兜底 gate —— bash 只是兜底:仅当工具不可用或插件未安装时才走。那时
同一会话内首次 mint 沙箱提权批准一次、后续自动放行(
autoApprove: true连首次 也不再询问)。插件正常加载时,可识别的mint -p <项目> …写命令与工具走同一道 跨项目确认。
模型可见的文案(注入概览与提醒)目前是中文。
环境要求
- DSH(
@deepseek-ai/dsh);宿主接口按0.1.1-rc.2验证 - Node.js >= 20
- 无需全局安装 mint:插件经自身的
mint-faa依赖解析 mint CLI (>=0.8.0 <1.0.0)——见选择 mint 入口。1.0.0 以前的任意mint-faa版本都被信任,升级mint-faa无需本插件跟发;未发布的本地构建 用mintEntry/MINT_ENTRY指定
安装
装进 profile 即完成挂载。本包自带 DSH bundle 声明(dsh.bundle.patch),
dsh plugin 会按已装状态重算 profile 的层栈——没有任何 YAML 需要手工编辑。
装完重启 DSH 生效:插件配置与 profile 的包解析表都在启动时确定。
从源码安装(dsh plugin --profile web add ./)是 link 目录而非复制,pnpm
不会把被 link 包自己的依赖装进 profile。插件会先探测自身包根下的
mint-faa,所以仓库里改过依赖后要先 pnpm install(再重启)依赖链才可用——
或者直接选本地构建。
从 npm 安装
dsh plugin --profile web add @yanqd0/dsh-mint \
--allow-build=@yanqd0/dsh-mint --allow-build=mint-faa
web 是 dsh web 用的 profile,换成其它 profile 名同理。
dsh plugin 实际在 ~/.dsh/profiles/web 内跑 pnpm。pnpm 默认拦截依赖的构建
脚本,而这次安装有两个:插件的 skill 同步、mint-faa 下载 mint 二进制。不带
--allow-build 时报 ERR_PNPM_IGNORED_BUILDS——而且依赖已经写进 profile
清单,所以单纯重跑不会再重算 profile 的 bundle 列表。若已经踩到,用下面这组
命令恢复:
dsh plugin --profile web approve-builds --all # 批准并跑掉被拦的脚本
dsh plugin --profile web remove @yanqd0/dsh-mint # 已记录的依赖要删掉后
dsh plugin --profile web add @yanqd0/dsh-mint # 重新 add 才会写入挂载行
从未请求过本包的 profile 上跑 approve-builds 只会输出
"There are no packages awaiting approval",什么都没批准。一次性放行写法是
--allow-build=<pkg>,但它只对注册表依赖按名匹配——file:/tarball 安装
(dsh plugin --profile web add ./)用不上;这种场景 pnpm 10/11 可用
--config.dangerouslyAllowAllBuilds=true,pnpm 12 已忽略该参数。
安装失败时插件完全没挂载:dsh --profile web --dump-config 不会打印
id: mint。装完按下节验证。
从 GitHub Packages 安装
同名 @yanqd0/dsh-mint 同时发布到两个注册表。GitHub Packages 即使公开包也
需要认证:使用带 read:packages 权限的 classic personal access token。在
~/.npmrc(或 ~/.dsh/profiles/<profile>/.npmrc)写入两行:
@yanqd0:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}
之后同样一条命令安装——npm 那节的构建脚本步骤在这里同样适用:
dsh plugin --profile web add @yanqd0/dsh-mint \
--allow-build=@yanqd0/dsh-mint --allow-build=mint-faa
从源码安装(开发)
git clone https://github.com/yanqd0/dsh-mint.git
cd dsh-mint
pnpm install && pnpm build
dsh plugin --profile web add ./
link 目录不需要构建脚本批准(pnpm 不为 link: 依赖跑生命周期脚本),所以挂载行
会立即写入;内置 skill 在插件加载时同步。
验证
dsh --profile web --dump-config | grep -c "id: mint" # 必须是 1
id: mint 恰好出现一次、且没有 patch: 警告,即为挂载成功。重复挂载(profile
里手写的 insert 行与 bundle 声明并存)会显示为 2 次,并在启动时报
duplicate loader entry id: mint。
选择 mint 入口
插件需要一个 mint 可执行程序:已发布的 mint-faa 薄封装(默认,跑它对应版本的
官方二进制)或本地构建的 mint。用一个旋钮二选一——挂载行的 mintEntry 选项,或
环境变量 MINT_ENTRY;两者同时存在时以挂载行为准。
| 模式 | 怎么选 | 实际跑什么 |
|---|---|---|
| 依赖链(默认) | 不写,或 mintEntry: dependency |
已安装插件包内 mint-faa 的 run-mint.js,它执行该 mint-faa 版本对应的官方 release 二进制 |
| 本地构建 | mintEntry: ~/bin/mint、绝对路径(如 /path/to/mint/target/release/mint)、或裸名 mint(走 PATH 查找) |
直接执行该可执行程序 |
任一旋钮写 dependency 都是哨兵:即使另一个旋钮写了路径,也强制走依赖链——
开发 profile 固定成本地构建、但仍要验证已发布链路时很有用。
# 会话实际会跑哪个 mint?(不需要 DSH)
node node_modules/@yanqd0/dsh-mint/dist/check-mint-entry.js --mode dependency
node node_modules/@yanqd0/dsh-mint/dist/check-mint-entry.js --mode local --entry ~/bin/mint
两条都会打印模式、入口标签(mint-faa@<版本>、PATH:mint 或解析后的构建路径)
和 -V 输出;入口跑不起来时以非零退出。注入的 [Mint] 行用的是同一个入口标签
(…/target/release/mint),因此 debug 与 release 构建可区分(#58)。
改完任一旋钮都要重启 DSH。依赖链首次调用时若安装没跑构建脚本(pnpm 默认拦截, 见「安装」),会先下载 mint 二进制——这一次可能超过 30 s 工具超时。
若 mint 工具报 Cannot find module 'mint-faa/run-mint.js':说明 profile 里没有可用
的 mint-faa——要么它的构建脚本从未被批准(见「从 npm 安装」),要么在源码 link
安装下该依赖是上次 pnpm install 之后才加的。按上面重新安装并重启,或在仓库里跑
pnpm install;也可以直接把 mintEntry 指向本地构建。同样的故障会在 [Mint] 概览
里显示为 WARNING 行,而不是伪装成"项目里没有 issue"。
用法
在 mint 管理的项目里开会话:首轮就注入 [Mint] 概览,内置 skill 会把
issue → plan → milestone 的流程教给 agent。日常用自然语言说需求("下一步做什么"、
"把这个 bug 记下来")即可,agent 会用 mint 工具驱动 mint——你也可以直接要求
下面这些调用:
| 你想要 | 背后的工具调用 |
|---|---|
| 列出未完成 issue | mint({args:["list"]}) —— 一页 TSV,默认 5 条 |
| 登记一个 bug | mint({args:["issue","add","<标题>","--kind","problem"]}) |
| 开始做某个 issue | mint({args:["issue","state","start","42"]}) |
| 测试通过后关掉 plan | mint({args:["plan","close","7","--test-cmd","<命令>"]}) |
任何子命令都可达,mint({args:["<子命令>","--help"]}) 原样返回 mint 帮助。
配置
| 选项 | 默认值 | 作用 |
|---|---|---|
autoApprove |
false |
mint 沙箱提权(bash 兜底路径)不再询问——显式信任 mint CLI。 |
autoInstallSkill |
true |
插件加载时把内置 mint skill content-sync 到 $DSH_HOME/skills/mint。 |
debug |
false |
预留给插件的详细诊断输出。 |
mintEntry |
mint-faa 的 run-mint.js |
要运行的 mint CLI:run-mint.js 路径、原生 mint 二进制、~/ 前缀路径、裸名(走 PATH),或 dependency 哨兵。见选择 mint 入口。 |
在 profile 自己的 patch 层(~/.dsh/profiles/<profile>/cordis.patch.yml)覆盖。
同 id 的条目修补已挂载的那一行,而不是再挂一次——没写的选项保持默认:
- id: mint
config:
autoApprove: true
# 用本地构建的 mint 做 dogfooding,而不是已发布的依赖
# (`~` 会展开;裸名 `mint` 走 PATH 查找):
mintEntry: ~/bin/mint
# mintEntry: dependency # 反过来强制走已发布的 mint-faa 链路
环境变量 MINT_ENTRY 有同样效果、无需改 profile(两者同时存在时以 mintEntry 为准)。
两者都在启动时读取,改完任一都要重启 DSH。
路线图
0.2.0 补客户端面:右侧边栏的 mint 面板,从 tab 栏的新建按钮打开,与「工作区文件」「新建终端」并列。
面板以只读方式读取当前会话所在项目——issue(列表、筛选、详情)、plan 与 milestone(列表、详情)——
数据经宿主只读路由由 mint CLI 提供。文案当前只有简体中文,但词典已经走客户端 locale 通道,
0.3.0 补英文是纯数据变更。
开发
pnpm dev # 用 tsx 运行插件入口
pnpm build # tsup + skill 拷贝 → dist/
pnpm test # vitest
pnpm lint # ESLint
pnpm check-types # tsc --noEmit
AGENTS.md 是给编程 AI 的项目导航(中文):定位、硬约束与架构事实。
notes/ 放对内中文工程记录;docs/RELEASING.md 是对外的发布
runbook(docs/ 其余 i18n 工作暂不做)。