dsh-web-ui/packages/dsh-web-ui-all

4.1kStar248Fork47Issue4Watching

DSH 网页版全家桶聚合包,一键安装 task-board、git-graph、pet、远程访问等十余个 UI 扩展与全部皮肤,并内置兼容垫片。

语言
TypeScript
License
Apache-2.0
分支
main
deepseek-harnessdshdsh-pluginweb-ui

安装

$ dsh plugin --profile web add github:zhu1090093659/dsh-web-ui/packages/dsh-web-ui-all

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

DSH 网页版全家桶聚合包:一次安装自动拉入 task-board、git-graph、pet、远程访问、皮肤中心等十余个 UI 扩展与全部皮肤资源。它自身没有业务功能,仅作为分发载体与老式 DOM 钩子的兼容垫片。

核心能力

  • 聚合 13 个子包为单一安装:一次声明即自动引入 task-board / git-graph / pet / ssh / remote-web-ui / live-stats / aionui-panel / tool-describe-image / liangshen / web-ui-settings / community-plugins / skins / skin-center,避免逐个挑选与逐次安装。
  • 兼容垫片 (compat shim):当 dsh web 当前外壳只渲染 css-module 类名(如 *_sidebarCol / *_centerCol / *_detailsCol)而没有老式 data-pane / data-dsh-frame 属性时,浏览器半区按选择器给三列容器与根容器补写属性,让按老选择器挂载的子插件与皮肤继续生效。
  • React 重渲染自动重打属性:通过 MutationObserver 监听 DOM 变化,下一帧合并为一次扫描(requestAnimationFrame + done 标记),React 重建列容器时自动补回;幂等检查确认所有属性就位后短路退出,不会反复刷选区。
  • 与独立安装同名插件共存:聚合行 id 统一加 web-ui- 命名空间(如 web-ui-task-board),独立装仍用原 id,loader 不再报重复 id,host 半区只注册一次。
  • 不破坏 React 协调:垫片只写入已有的属性值,不删节点、不改结构,与外壳的 React 渲染互不干扰。

技术实现

  • 语言: TypeScript
  • 关键依赖: @linxin666/dsh-client-ui-task-board / @linxin666/dsh-skins / @linxin666/dsh-client-ui-skin-center / @linxin666/dsh-client-ui-web-ui-settings / @linxin666/dsh-remote-web-ui
  • 架构模式: cordis bundle 聚合包;aggregate.yml 是唯一手写清单(patchFrom 贡献子包 cordis.patch.yml 的 insert 行并加 web-ui- 命名空间,deps 解析子包 name 写入 package.json#dependencies),由 scripts/aggregate.mjs 生成 cordis.patch.yml;host 半区无业务逻辑,浏览器半区是 DOM 兼容垫片
  • 入口文件: src/index.ts (host,空 apply) / src/client/index.ts (compat shim)

适用场景

刚接触 DSH 网页版、希望立刻拿到完整增强体验(任务面板、Git 视图、宠物、远程访问、自定义皮肤)但不想逐个挑选插件的用户。同时作为官方 dsh web 外壳更新后老插件失效时的兜底垫片,保证子插件按老选择器仍能挂载。

前置依赖与兼容性

依赖最低版本说明
DSH未声明本包 package.json 未声明 dsh engines;运行时通过 @deepseek-ai/* SDK 隐式锁定
Node^22.19 || >=24据 packages/AGENTS.md:9;本包 package.json 未声明 engines
平台跨平台以浏览器端 patch 为主,宿主 dsh web 跨平台运行即可
原生模块全部走 cordis bundle + Web DOM API,无 native binding

安装方式

dsh plugin --profile web add github:zhu1090093659/dsh-web-ui/packages/dsh-web-ui-all

配置项

本插件无需额外配置(聚合包本身无独立配置面;各子插件的配置详见其各自 README 与设置页的 Web UI 插件分组)。

常见问题

Q: 安装完还需要做什么才能让插件生效?

A: 重启 dsh web。如果是源码开发模式,除 dsh plugin add 外还需先 pnpm install && pnpm -r build && node scripts/link-profile.mjs,最后重启 dsh web 才生效。

Q: 只想装其中一两个插件,不想全家桶一起装,怎么办?

A: 直接装对应独立子包即可(如 dsh plugin add @linxin666/dsh-client-ui-task-board),不必走本全家桶;本包安装会激活全部子插件,无法只挑其中一部分。

Q: 跟同名独立插件包同时安装会冲突吗?

A: 不会。本包聚合行 id 统一带 web-ui- 前缀(如 web-ui-task-board),独立装的仍用原 id(task-board),loader 不再拒绝重复 id。建议只保留一个来源,两个并存没有额外收益。

Q: profile 里按插件 id 写的配置行要怎么对应?

A: 插件来自本全家桶时用 web-ui- 前缀(如 remote-web-ui 的 autoTunnel 配置行写成 web-ui-remote-web-ui),独立安装时仍用插件原 id。

Q: 升级到新版本后新版没有生效,怎么排查?

A: 改 profile 的 package.json 版本号后执行 pnpm install,顶层 node_modules/@linxin666/* 条目可能仍链接到旧版 store 目录。需要确认这些链接已指向新版(Windows: cmd /c rmdir <link>cmd /c mklink /J <link> <target>),然后重启 dsh web。

Q: 本包代码里到底装了什么自定义逻辑?

A: host 半区没有任何业务逻辑(apply 是空函数);浏览器半区只有一个 compat shim,给 dsh web 外壳侧栏/中间/详情三列容器补上老式 data-pane / data-dsh-frame 属性,让按老选择器挂载的子插件能继续工作。

Q: 官方 dsh web 外壳升级后,本包还能正常工作吗?

A: 可以。compat shim 用 MutationObserver 监听 DOM 变化,在下一帧合并重打属性,React 重渲染重建列容器后会自动补回属性,幂等不会重复触发。

上手难度

入门 — 安装一条命令即生效,无配置项;如需理解底层行为可读 README 与源码,但日常使用无需介入。

已知问题与限制

  • 全家桶激活即全部子插件一并加载,无法只挑选部分;如需部分安装请改用对应独立子包(README.md:38)。
  • 聚合行 id 统一加 web-ui- 命名空间,本包可与同名独立插件包共存:loader 不再拒绝重复 id,host 半区只注册一次(第二个来源为空操作),浏览器半区按包名去重;两个来源并存没有额外收益,建议只保留一个(README.md:39)。
  • 依赖的 @deepseek-ai/* SDK 版本已锁定,兼容性跟随本仓库的发版节奏,跨大版本升级前需确认 SDK 兼容(README.md:40)。