Repository navigation
Releases
Releases · YUYUY9527/dsh-plugin-management
v1.2.1 · 界面对齐 dsh
修复
界面与 dsh 字体不一致、整体不够清爽:
- 字体改用 dsh 自己的设计变量 —— 正文
--dsw-font-family、等宽--ds-font-family-code、小字号--dsw-font-xs-13。此前没有声明正文字体、等宽写死ui-monospace(Windows 上会退化成 Courier),所以一眼看着「不是 dsh 的字」。 - 安装命令单行省略号截断:长
github:spec 不再折行把「复制」挤到下一行;完整命令挂在悬停提示(title)上。 - 徽标与操作合并为右侧固定一列:不换行、跨行对齐;行内边距/圆角/字号与设置页其它 tab 对齐。
- 顶部信息行压缩为
profile · 外部插件 N · 已核对最新版本(目录移入悬停提示),底部说明缩短为一行。
升级
pnpm --dir "$env:USERPROFILE\.dsh\profiles\web" update dsh-plugin-management纯客户端(样式)改动,客户端 bundle 会热加载;若没变化刷新一次页面即可,不必重启 dsh。
v1.2.0 · 卸载按钮 + 四项修复
新增
- 每行的「卸载」按钮:点一下变「确认卸载」,4 秒内再点一下才执行(破坏性操作不做单点即触发)。走
dsh plugin --profile <p> remove <pkg>,官方转发器会同步把包名从dsh.profile.bundles摘掉,避免残留 bundle 行导致下次启动报错。结果面板提示重启 dsh 后才真正不再加载。
host 侧必须点名:不带names一律拒绝;只允许该 profile 里真实存在且非官方的依赖。模型工具同步支持action="uninstall"。 config.sandboxMode(默认danger-full-access)。
修复
- 沙箱可写根与 workdir 对不上 → 一键更新必失败:之前没给
ShellExecRequest传sandboxPolicy,执行器按 dsh 自己的可写根跑,而pnpm update要写 pnpm store(如D:\.pnpm-store\v11,不在任何 profile 目录里)→ 即使沙箱健康也会在写 store 时Access is denied。现在显式传{ mode, workspaceRoot: workdir }。 - 执行器/沙箱不可用不该让整条链路崩:此前只有「shell 服务没挂载」才退
child_process;现在shell.run()的任何 rejection(含SANDBOX_UNAVAILABLE)都归入「执行器不可用」走同一条兜底并留告警。沙箱明确 denied 不兜底(那是策略,不是故障)。 - 客户端吞异常:版本检查那次请求的
.catch(() => null)会把任何后端异常变成一句无辜的「未检查」→ 现在把失败原因显示在面板上。 registerTool被调两次:第二次必然抛tool "external_plugins" is already registered→ 只调一次。- 同类隐患一并堵掉:
void mount()与 webServer handler 两处 fire-and-forget promise 补.catch—— 未捕获的 rejection 在 Node 22 默认策略下会直接终止 dsh 进程。
升级
pnpm --dir "$env:USERPROFILE\.dsh\profiles\web" update dsh-plugin-management
# 或
dsh plugin --profile web add github:YUYUY9527/dsh-plugin-management#v1.2.0装完重启 dsh。
sha256(dsh-plugin-management-1.2.0.tgz) = EEFAF94DC72B7DA8470FB4747F3D8F809E74DB9FC6569E230336AC640D370CB5
v1.1.0 · 每行显示安装命令
新增
每个插件下方显示自己的安装命令 —— 一行可直接复制的 dsh plugin --profile <profile> add …,右侧带「复制」按钮(点一下即复制,1.5 秒内显示「已复制」);命令本身 user-select: all,点一下全选也能 Ctrl+C。
命令怎么拼:
| 依赖来源 | 生成的命令 | 为什么 |
|---|---|---|
| registry 包,已知最新版 | dsh plugin --profile web add <name>@<latest> |
等价于把该包升到最新 |
| registry 包,未知最新版 | dsh plugin --profile web add <name> |
装最新 |
本地链接 / file: |
dsh plugin --profile web add link:… / file:… |
原样复用依赖里的 spec,不会把来源换成 registry |
github: / tarball URL |
dsh plugin --profile web add github:… / https:… |
同上,命令可复现 |
profile 跟随面板当前选中的 profile(含「自动」解析结果)。该字段同时出现在模型工具 external_plugins 的 action=list 结果里(installCommand)。
升级
dsh plugin --profile web update dsh-plugin-management # 跟随 main 的安装会刷新到最新
# 或
dsh plugin --profile web add github:YUYUY9527/dsh-plugin-management#v1.1.0装完重启 dsh。
v1.0.1 · 修复模型工具未注册
修复
- 模型工具
external_plugins在 1.0.0 里从未注册:createToolSpec()把 JSON Schema 形态的参数喂给defineTool()(报parameters.type must be a value schema object),回落时又把 author-only 的output.schema: { type: 'json' }交给ctx.tools.register(),被assertSupportedJsonSchema拒绝(raw 形态里json非法,等价于{})。两次失败都只写一行日志 —— 工具静默消失。
现在 DSL 交defineTool、raw 交register,两条路各有回归测试钉住。 - 参数非法时统一返回 JSON
{ ok: false, error },不再从execute抛错。
新增
- host 把工具注册状态随
/inventory回给面板:若工具没注册上,「外部插件」页会直接显示模型工具未注册:<state>(<原因>),不必去翻 dsh 日志。
安装 / 升级
# 升级已装的版本
dsh plugin --profile web add github:YUYUY9527/dsh-plugin-management#v1.0.1
# 或按 tarball 安装(本 Release 资产)
dsh plugin --profile web add https://github.com/YUYUY9527/dsh-plugin-management/releases/download/v1.0.1/dsh-plugin-management-1.0.1.tgz装完重启 dsh。面板与 external_plugins 工具都应可用(面板底部会显示工具注册状态)。
v1.0.0 · 外部插件管理器
首个公开发布:dsh-plugin-management —— 外部插件管理器(DeepSeek Harness / dsh 插件)。
安装
# 从 GitHub 直接装(纯 JS,无构建步骤)
dsh plugin --profile web add github:YUYUY9527/dsh-plugin-management
# 或就地安装本 Release 的 tgz(锁定版本 / 内网分发)
dsh plugin --profile web add ./dsh-plugin-management-1.0.0.tgz装完重启 dsh,然后打开 设置 → 插件 → 外部插件。
这个版本有什么
- 清单:该 profile 的所有外部依赖 —— 已装版本、版本范围、是否生效为插件层(
dsh.profile.bundles)、registry 包还是本地link: - 版本检查:
pnpm outdated --format json,区分「范围内可更新」与「需--latest的跨大版本升级」 - 一键更新:单个 / 全部 / 跨大版本三种粒度;走
dsh plugin --profile <p> update(官方转发器,会顺带校正 bundles),dsh不在 PATH 时回落pnpm update - 模型工具
external_plugins:action=list | update,agent 自己就能查与更新 - host API:
GET /dsh-plugin-management/api/inventory、POST /dsh-plugin-management/api/update(仅同源) - 纯 ESM、零构建、零运行时依赖;29 条
node:test用例(含打包契约测试)
注意
更新落地 ≠ 生效:就地替换的包要重启 dsh 才会被 Loader 读进进程;面板会把这句话写在更新结果里。