dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
本插件的工作区布局(规范见 plugins/README.md)
code/运行代码 |tests/测试代码 |docs/开发文档 |reference/参考资料package.json/cordis.patch.yml/README.md/LICENSE是包契约文件,必须留在本目录根- 状态:休眠 | 运行实体:
~/.dsh/profiles/desktop/plugins/dsh-model-cascade/- 本目录是备份 + 开发文档存放处,不在这里开发:要改代码请改运行实体,验证通过后再回写到这里
把输入框(composer)右下角的模型座位换成三级级联菜单:供应商 → 系列 → 完整模型。
内置座位是一层扁平长列表,模型一多就得靠滚动和记忆找;这里先选供应商、再选系列,
最后才落到具体模型 id,并在同一菜单里给出「思考强度」入口。纯 UI 插件:宿主半是空的
apply()(只为在 Loader 里占一行),
真正干活的是浏览器半lib/client.js,它注册到conversation.input.model座位,
以priority: -1遮蔽内置的两级列表。
group.name,即配置里那条 API 路由),{ provider, model, reasoningEffort }。modelDirectories.directoryFor(sessionId) 拿到的是内置座位model-cascade 命名空间字典(zh / en),无其它配置。cordis.patch.yml 是 bundle patch 层,内容就是一行挂载:
- insert:
- id: dsh-model-cascade
name: dsh-model-cascade
lib/index.js 的 apply() {} 是空函数,不注册服务、不读配置、不占端口。dsh-model-cascade 条目。package.json 的 dsh.bundle.patch 与 dsh.clientplatform: "web"),浏览器半从 exports["./client"] 载入。inject):slots、modelDirectories、sessions、locale、remote、remote.session。ui-model-selection 的 directoryFor 在铸造 per-session 目录时会解引用this.ctx["remote.session"],缺了就会抛 "without inject",座位被错误边界摘掉、内置座位重新生效node_modules 并追加上面的 insert 行后,浏览器半随实例加载;dsh-qq-bridge 同类,本插件代码内未体现)。priority: -1,无配置。宿主半没有 settings.register(...),客户端半只注册 locale 字典:
ctx.effect(() => ctx.locale.register('model-cascade', { zh, en }), 'dsh-model-cascade: dictionaries')
档位、开关、默认模型等都不由本插件提供;它只改写选择器的交互形态。
注册的 Slot
| 项 | 值 |
|---|---|
| slot 名 | conversation.input.model |
locale | model-cascade |
priority | -1(遮蔽内置座位) |
| 组件入参 | locked、available、directory、load、select、t |
available = sessions.subagentAddress(sessionId) === undefined:子代理会话里座位不渲染(return null)。load() 调目录 store 的 load();select(selection) 调 directory.select(...),error 弹 Toast。directory.subscribe / directory.getSnapshot(),读 groups / current / statusloading / ready / selecting)/ error / failures。交互
· 连接),locked 时禁用;aria-haspopup="menu" / aria-expanded / aria-label 齐备。<body>)。菜单内容
/ 之后、- 之前的字符串(如 deepseek/deepseek-chat → deepseek);无 - 时退化为整段。dsh-model-cascade/
├── README.md # 本文件
├── package.json # name/version 0.1.2;dsh.bundle.patch 指向 cordis.patch.yml;dsh.client(web)
├── cordis.patch.yml # bundle patch 层:一行 insert 挂载 id/name = dsh-model-cascade
└── lib/
├── index.js # 宿主半:空 apply(),只为让插件出现在 Loader 里
└── client.js # 浏览器半(预构建产物,window.__ModuleLoader__.load 工厂):三级级联座位组件 + 字典
package.json 的 dsh.client.inject 声明了@deepseek-ai/dsh-client-locale 与 @deepseek-ai/dsh-client-ui-model-selection;lib/client.js 实际 require 的是 react、react/jsx-runtime、@deepseek-ai/dsh-client-ui-primitives(用到 Toast、IconCheckOutline16、IconChevronRightOutline14、IconChevronDownOutline14、IconChevronLeftOutline14、IconWarningOutline16)。也就是说:真正被 require 的 ui-primitives 未声明,ui-model-selection 从未被 require(它只作为被遮蔽的服务提供方间接存在)。lib/client.js 是预构建产物(window.__ModuleLoader__.load 工厂 + react/jsx-runtimejsx/jsxs 调用),不是可直接阅读的 ESM/JSX 源码;源码形态未随包提供。-v4 前缀差异)会裂成多个系列;这仅是显示层的分组,选择时提交的始终是data-plugin-css="dsh-model-cascade/ModelCascadeSelect.module.css";Toast 的 anchor[data-composer-card] 这个属性选择器;宽度/高度用的是 min(280px, 100vw - 32px)min(420px, 100vh - 96px) 固定值。lib/index.js。modelDirectories / sessions.subagentAddress / remote.session 等都是 DSH 0.1.5-rc.1directoryFor 时失败。dsh-client-ui-primitives 把尺寸后缀图标整族删除IconChevronDownOutline14、IconWarningOutline16…),改为描边档…Artwork / …Regular / …Medium。旧名字渲染时取到 undefined 会抛错,而 0.1.7 的槽位新增size: 14(Regular 档默认 16px)。--dsw-specific-menu 在 0.1.7 由不透明改为半透明#f8f9fa94 / 深 #30313680,官方菜单配 backdrop-filter 做毛玻璃),本插件没配模糊--dsw-alias-bg-layer-3。