Repository navigation
Releases
v0.2.1 — 作用域解析双根回退(含一处判断更正)
修复
预设作用域解析改为双根回退。 @deepseek-ai/dsh-scope 原先只从 profile 根解析一次;该根不可用时 scopeModule 直接为 null,所有预设作用域静默降级为仅 global 覆盖,技能开关被闸门拒绝,而用户只看到「装不上」,看不到原因。
现在依次尝试 profile 根与 DSH 安装根(后者由 process.argv[1] 推导,与 lib/index.js 中包解析已有的第二基一致)。
差分实测 —— 人为把 profile 根的 junction 改名,重载插件后读 /skills:
| 代码版本 | presetInstall.installed |
reason |
|---|---|---|
| 旧(单根) | [] |
@deepseek-ai/dsh-scope 不可解析(部署未提供) |
| 新(双根) | standard,ptc,minimal,cordis |
空 |
恢复 junction 后两次读数均无差异。失败信息现在会列出实际尝试过的路径。
更正一处此前的错误说明
先前说明中称手工 junction ~/.dsh/profiles/node_modules/dsh-plugin-desk 是预设作用域生效的前提。该判断是错的。
实测:删除该 junction 后 presetInstall.installed 仍为 standard,ptc,minimal,cordis。它没有被任何代码路径解析——预设作用域靠运行时铸造 scope 建立,不靠这个 junction。
junction 已删除,并且没有为它添加自愈逻辑,因为要解决的问题并不存在。
结论:按 README 正常安装的用户不需要手工建任何东西。
测试
npm test 19 → 22 项全通过。
新增 3 项:
- 解析根回退(第一个根解析不到时由第二个根赢下)
- 全部根都失败时逐一列出尝试过的路径
- 基顺序与去重
仍然未验证(如实标注)
- 两维都关后从
/命令目录消失(未端到端走一遍) - 只关模型维时
get()仍返回真正文 - 状态文件损坏时的降级行为
与本插件无关的既有问题
5 个用户预设(anchored-standard / router-spec / router-standard / whoami-standard / zero-anchored-standard)自身无法挂载,在 presetInstall.failed 里如实暴露:
preset "router-standard" failed to mount:
failed to apply loader entry persona (@deepseek-ai/dsh-persona): invalid config:
- $.prefix missing required value
安装
dsh plugin --profile web add "github:Amouren7/dsh-plugin-desk#v0.2.1"v0.2.0 — 技能管理
v0.2.0 — 技能管理
插件管家页新增 插件 | 技能 分段控制。技能页回答三个原来无解的问题:它是做什么的、怎么触发它、怎么关掉它。
新增
-
技能盘点:60 个技能全量列出,含作用、
whenToUse、来源、指令文件路径。 -
标明唯一可用的触发方式。技能的 invocation 有两个独立维度,界面把它们翻成一句人话:
模型自动加载 /命令界面直接告诉你 ✓ ✓ 模型会自己调用;也可用 /name手动唤起✗ ✓ 模型看不到它 —— 只能用 /name手动唤起✓ ✗ 仅模型自动调用( /name不可用)✗ ✗ 已停用 本机实测有 14 个技能落在第二行:它们在模型目录里完全不存在,靠翻文件夹发现不了。
-
两个真开关(模型自动加载 /
/命令可用),热生效、可恢复默认,不修改任何 SKILL.md。 -
清理线索:实测 40 个技能目录里躺着一份不生效的
SKILL.md(加载器只认<技能名>/SKILL.md),且与生效那份内容不同;2 个目录混入了非技能文件。 -
来源与升级对象:从路径反解归属包与版本(如
archify←@tt-a1i/archify-dsh)。
实现要点
技能住在 agent preset 作用域,不在全局层。而服务读取走 topology-sensitive 属性代理 —— ctx.skills(声明式注入)返回绑定到访问上下文的反射,ctx.get('skills') 读的是全局存储。因此必须为每个 preset createScope 并走该作用域的 .skills 反射注册 rank-0 影子 provider,否则候选会被更近的层直接盖掉。这一步不需要修改任何预设文件,shipped 与用户预设一并覆盖。
停用是覆盖不是删除:技能文件仍在磁盘,ctx.skills.get() 直调仍可取到正文,但模型目录与 / 菜单都拿不到。删掉 ~/.dsh/plugin-desk-skills.json 即完全复原。
修复
- 客户端错误硬化:不再吞成裸
SyntaxError: Unexpected end of JSON input,改为显示 HTTP 状态 + 响应体头部 + 15 秒超时提示。原先 404 空响应体、服务端崩溃、响应被别的路由接管三种情况完全无法区分。 - 路由注册自愈:注册前先清自己的同名路由残留,避免上一代 fiber 的泄漏让本次
apply()抛duplicate prefix route而整体失败。
验证
单元测试 19 项(npm test),覆盖路由自愈、客户端错误硬化、技能派生函数,以及一个能跑通 apply() 全链路的冒烟测试。
系统级验证停用真的生效(由 harness 自身确认,非插件自证)—— 观察本会话的 <available_skills> 目录:
| 动作 | 目录变化 |
|---|---|
设 brainstorming 模型自动加载 = 关 |
brainstorming 消失 |
| 恢复默认 | 回来 |
设 grilling 模型自动加载 = 关 |
grilling 消失 |
| 恢复默认 | 回来 |
完整实测记录(含未验证项的如实标注)见 tests/acceptance.md。
已知限制
- 3 项验收未端到端验证:两维都关后从
/命令目录消失、只关模型维时get()是否返回真正文、状态文件损坏降级。机制已证实,但没走完整链路,不计入通过。 - 无自动升级按钮:实测 57 个技能 0 个是 git 仓库、无清单、无安装元数据,通用自动升级路径不存在,只标注该升级什么。
- 5 个用户预设自身无法挂载(与本插件无关):
anchored-standard/router-spec/router-standard/whoami-standard/zero-anchored-standard的persona行缺少必填的prefix。由于这些预设的技能同时也由可用的 shipped 预设提供,当前 60 个技能仍全部可开关。
安装
dsh plugin --profile web add "github:Amouren7/dsh-plugin-desk#v0.2.0"v0.1.0 — 插件管家首发:说明 + 一键启停 + 安全卸载
插件管家 v0.1.0
补上 DSH 官方「设置 → 插件」页(只读清单)缺的两件事:看不懂插件是做什么的、关不掉/卸不掉。
安装后位置:设置 → 插件 → 插件管家(与官方 插件配置/插件列表 并列)。
功能
- 一句话说明:按
dshhub.summary→package.json.description→README.md首段 的优先级取说明,自动剥离 Markdown/HTML 并按语义边界截断 - 来源徽章:官方 / 社区 / GitHub 直装 / 本地链接,判定读
pnpm-lock.yaml的 specifier - 一键停用/启用:走 Cordis 官方
Entry.update({ disabled }),fiber 热 dispose / 重装配,不需要重启 - 安全卸载:快照 →
loader.remove→ 校验 → 失败按快照恢复;@deepseek-ai/*官方组件拒绝卸载 - 噪声过滤:本机 168 个已安装包收敛为 5 个真插件(过滤 154 个非插件依赖 + 4 个框架内部条目)
- 状态持久化:
~/.dsh/plugin-manager.json,每次启动重放
实测环境
Windows 11 · DSH 0.1.5-rc.1 · Node 24.18.1 · web profile
- 官方插件页
data-slot-error为空,插件管家标签正常出现 - 5 张卡片渲染齐全:名称 / 说明 / 来源徽章 / 版本 / 运行状态
- 界面点「停用」→
fiber 已 dispose,工具与路由随即注销,徽章变「已停用」,按钮变「启用」 - 界面点「启用」→
fiber 重新装配完成,徽章回「运行中」 - 卸载:移除 → 校验确认 → 该插件路由端点随之失效(证明真 dispose)→ 记忆落盘
安装
dsh plugin --profile web add "github:Amouren7/dsh-plugin-desk#v0.1.0"装完重启 dsh web,然后 Ctrl+Shift+R 强制刷新页面。
已知限制
- 尚未发布到 npm,暂用 GitHub 源码安装(npm 上
dsh-plugin-manager/dsh-plugin-hub/dsh-plugin-console均已被他人占用) - 兼容性验证仅覆盖 DSH
0.1.5-rc.1;更低版本缺少settings.plugins.tab插槽 - 官方组件只能停用、不能卸载(卸载会破坏启动)
开发记录
docs/SLOT-CONTRACT.md 记录了设置页插槽的注册契约,以及排查过程中被实测推翻的几个假设(返回 DOM 节点、返回 { render() } 对象、在组件体内 require('react') 都会让官方页面变空白)。若你也在写 DSH 前端插件,这份记录能省掉同样的弯路。