dsh-web-ui
zhu1090093659
Plugin and skin collection for DeepSeek Harness (DSH) Web UI - task board, git graph, right-side panel, remote mobile UI, pet, live token stats, and skin center.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:Eidosiny/dsh-accessory-hub
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
DSH(DeepSeek Harness)Web GUI 悬浮卡片插件:右上角折叠圆形(DeepSeek 鲸鱼图标)→ 点击展开浅色便签纸风格画布(米黄格子底 + 便签卡片)。
只显示你手动添加的配件(插件 / MCP 服务 / Agent 预设 / 技能,DSH 自带配件不会自动上画布),支持:
请使用llm-vision-mcp 分析一下这张图片)DSH_HOME/accessory-hub/state.json,刷新/重启后保留@deepseek-ai/dsh)web profile 已可运行(dsh --profile web)把本仓库放到 web profile 的 vendor 目录(确保 lib/index.js 与 lib/client.js 存在):
git clone https://github.com/Eidosiny/dsh-accessory-hub.git \
<DSH_HOME>/profiles/web/vendor/dsh-accessory-hub
编辑 <DSH_HOME>/profiles/web/cordis.patch.yml,追加一个插件行:
- insert:
- id: dsh-accessory-hub
name: '@dsh-external/dsh-accessory-hub'
config: {}
重启 web:dsh --profile web(或你的启动方式),然后刷新浏览器页面(客户端 bundle 在页面加载时装配)。
右上角出现鲸鱼圆形按钮即安装成功。
在 DSH 会话中使用超模注入器(dsh-super-injector)提供的 dev_inject_plugin 工具,或在其设置页「插件」中拖入 / 输入插件目录路径后「注入」:
dev_inject_plugin <本仓库绝对路径>
dsh.profile.bundles本包只声明 dsh.client(客户端注入包),没有 dsh.bundle.patch。把它写进 profiles/web/package.json 的 dsh.profile.bundles 会让 dsh web 启动即失败:
Error: dsh: profile bundle "@dsh-external/dsh-accessory-hub" declares no dsh.bundle in its package.json
客户端 bundle 的正确装配路径是 cordis.patch.yml 插件行(方式一):client-modules 会扫描 loader entries 中声明 dsh.client.platform: "web" 的包,自动把 exports["./client"] 指向的 bundle 挂到 /plugins/<id>/client.js 并在页面加载时注册。
lib/index.js — 宿主侧插件:提供 GET/POST /accessory-hub/api/* REST API(配件枚举 + 自定义状态持久化;skills 带文件系统兜底枚举 DSH_HOME/skills/;MCP 服务单独归类:检测 config.serverName 的 loader 条目 → mcps 数组,含 transport/url/command/args)。lib/client.js — 客户端 bundle:shell.overlay 槽位注册 React FC(浅色主题、米黄格子画布、添加/删除配件、拖动、编辑、连线、高亮、前缀注入)。package.json — 包元数据 + dsh.client 客户端注入声明。vision、playwright),描述显示传输方式与端点(stdio · npx -y @me9rez/llm-vision-mcp 等),可改名(如 llm-vision-mcp);| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /accessory-hub/api/catalog |
{ ok, plugins:[{id,name,active}], mcps:[{id,name,transport,url,command,args,active}], presets:[{id,name,description,broken}], skills:[{name,description,provider}], warnings } |
| GET | /accessory-hub/api/state |
读 DSH_HOME/accessory-hub/state.json,不存在/损坏回 {} |
| POST | /accessory-hub/api/state |
body { state: {...} },浅校验后原子写回(tmp + renameSync) |
持久化状态 schema:{ version, plugins, presets, skills, mcps, edges, ui },各配件 section 以配件 id 为键存 { label, color, x, y };edges 存关系连线,ui 存悬浮卡位置与面板尺寸。原子写复用 tmp + renameSync 模式。
详见 SECURITY.md。要点:
/accessory-hub/api/*。eval / new Function / 子进程 / shell。innerHTML/dangerouslySetInnerHTML),卡片名、目录描述等输入均被转义。127.0.0.1),响应不带 CORS 头 → 跨源网页无法读取或写入。/state 有 2MB 体积上限 + 浅校验,只写固定路径 DSH_HOME/accessory-hub/state.json(原子 tmp+rename),无路径穿越面。宿主侧:webServer、loader、agentPresets、skills。
客户端侧(dsh.client.inject):@deepseek-ai/dsh-client-runtime、@deepseek-ai/dsh-client-ui-layout、@deepseek-ai/dsh-client-ui-conversation。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: web-ui。