dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Scene-independent icon grid container for DSH plugins
DSH(DeepSeek Host)插件:通用图标网格容器,把插件入口收进可拖拽排序的浮动网格。
外部插件通过 window.__dshIconRegistry 推入图标,本插件只负责「注册表 → 槽位」的排列、持久化、拖拽排序和设置面板。不依赖任何皮肤 / 主题插件,配色全部交给 DSH 当前的 CSS 变量。
window.__dshIconRegistry 推入的自定义入口,两者职责不重叠。+N 溢出格。+ 提示。dsh-ui 命名空间迁移 iconGrid 配置。weight 字段决定默认排序。0.2.0-rc.1(声明在 engines.dsh,未做严格校验)[class*="BynINW_centerCol"]、[data-composer-card] 两个 DSH DOM 标记做布局对齐;DSH 改版若改动这两个选择器,网格会回落到「贴屏幕右边」方案(代码里有兜底)。git clone <repo> dsh-icon-grid
cd dsh-icon-grid
pnpm install
pnpm check # typecheck + lint + test
pnpm build # tsdown → lib/client.js
挂载到 DSH 宿主(具体路径取决于 DSH 版本,见宿主文档)。
dsh-icon-grid — 查看当前网格状态dsh-icon-grid grid <cols> <rows> — 设置网格行列(列 3-16、行 2-24)右下角 ⚙️ 图标 → 打开图标网格设置面板。
插件通过全局注册表向网格推入图标:
window.__dshIconRegistry ??= []
window.__dshIconRegistry.push({
id: 'my-plugin',
icon: '🚀', // string 或 number,必填
label: '我的插件',
weight: 0, // 可选,越大越靠前;相同 weight 保持注册顺序
onClick: () => { /* 打开插件 */ }, // 可选,必须是函数
onUnload: () => { /* 卸载回调 */ }, // 可选,必须是函数
})
readRegistry() 会过滤掉以下条目,避免把 Grid 渲染崩掉:
id 不是非空字符串icon 不是 string / number(不允许 React 元素、对象)onClick / onUnload 存在但不是函数内建 ⚙️ 永远排在最前;外部图标按 weight 降序排列。
单一命名空间 dsh-icon-grid:
{
iconGrid: {
order: [], // 图标 id 排列('' 为空槽)
cols: 8, rows: 12,
cell: 46, gap: 6,
iconAlpha: 0.08,
gridAccent: '', // ''=跟随明暗半透明;'#rrggbb'=主色着色
marginRight: 24, marginBottom: 24,
showGridLines: true,
gridLineAlpha: 0.15,
},
}
网格配色不读取任何皮肤 token 表,全部交给浏览器解析 DSH 当前主题的 CSS 变量:
var(--dsw-alias-label-primary, ...)var(--dsw-alias-border-l1, ...)iconAlpha 半透明黑 / 白;或设置 gridAccent 后用
color-mix(in srgb, <accent> N%, transparent) 着色。window.__dshIconRegistry 可直接观察当前注册表。pnpm check # typecheck + lint + test
pnpm build # tsdown → lib/client.js
pnpm test:unit # Node 环境纯函数测试
pnpm test:dom # tsx 环境 DOM 相关测试
红线(详见 eslint.config.js 与 tsdown.config.ts):
.mjs 文件禁止任何 TypeScript 语法。tsdown.config.ts 的 banner id、cordis.patch.yml 的 id、
package.json 的 dsh.client.inject 三者必须保持一致。.gitignore 已忽略 node_modules / lib)。package.json 目前带 "private": true,发布前删掉该字段,再 pnpm build && npm publish。
files 字段已包含运行时必需的 src/、lib/client.js、cordis.patch.yml。dsh-ui 也是这个行为,暂未改。[class*="BynINW_centerCol"] 是 DSH 当前构建的 hash 选择器,
DSH 改版后需要同步;代码里对找不到该元素有「贴屏幕右边」兜底。MIT License