# dsh-web-ui

> DSH Web Suite: one-click installer for over a dozen UI extensions including task-board, git-graph, pet, and remote access, plus all skins, with built-in compatibility shims.

## Metadata

- Author: [@zhu1090093659](https://github.com/zhu1090093659)
- Repo: <https://github.com/zhu1090093659/dsh-web-ui.git>
- GitHub: [zhu1090093659/dsh-web-ui](https://github.com/zhu1090093659/dsh-web-ui)
- Stars: 4,062
- Language: TypeScript
- License: [Apache-2.0](https://spdx.org/licenses/Apache-2.0.html)
- Homepage: <https://gallery.dsh-market.com>
- Topics: `deepseek-harness`, `dsh`, `dsh-plugin`, `web-ui`
- Forks: 248
- Open Issues: 47
- Last push: 2026-08-17T14:51:13.000Z
- Added: 2026-08-14T00:00:00.000Z

## Install

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

## Wiki

## One-Line Description
DSH Web Suite Bundle: One installation automatically pulls in over ten UI extensions including task-board, git-graph, pet, remote access, skin center, and all skin resources. It has no business functionality itself, serving only as a distribution carrier and legacy DOM hook compatibility shim.

## Core Capabilities
- **Aggregates 13 sub-packages into a single installation**: One declaration automatically introduces 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, avoiding individual selection and repeated installations.
- **Compatibility shim**: When the dsh web host shell only renders css-module class names (e.g., `*_sidebarCol` / `*_centerCol` / `*_detailsCol`) without legacy `data-pane` / `data-dsh-frame` attributes, the browser side writes these attributes to the three-column containers and root container via selectors, allowing child plugins and skins mounted via legacy selectors to continue working.
- **React re-render automatically reapplies attributes**: Monitors DOM changes via MutationObserver, merges into a single scan next frame (`requestAnimationFrame` + done flag), automatically reapplies attributes when React rebuilds column containers; idempotent check confirms all attributes are in place before short-circuiting exit, avoiding repeated zone refreshing.
- **Coexists with independently installed plugins of the same name**: Aggregated entry IDs are uniformly namespaced with `web-ui-` (e.g., `web-ui-task-board`), while independent installations still use the original ID; loader no longer reports duplicate IDs, host side registers only once.
- **Does not break React reconciliation**: Shim only writes existing attribute values, does not delete nodes or modify structure, and does not interfere with the host shell's React rendering.

## Technical Implementation
- **Language**: TypeScript
- **Key Dependencies**: @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
- **Architecture Pattern**: cordis bundle aggregate; `aggregate.yml` is the only hand-written manifest (`patchFrom` contributes sub-package `cordis.patch.yml` insert lines and adds `web-ui-` namespace, `deps` parses sub-package names and writes to `package.json#dependencies`), generated by `scripts/aggregate.mjs` into `cordis.patch.yml`; host side has no business logic, browser side is the DOM compatibility shim
- **Entry Files**: src/index.ts (host, empty apply) / src/client/index.ts (compat shim)

## Use Cases
Users who are new to DSH Web and want to immediately get the full enhanced experience (task panel, Git view, pet, remote access, custom skins) without selecting plugins one by one. Also serves as a fallback shim when older plugins become invalid after official dsh web host updates, ensuring child plugins can still mount via legacy selectors.

## Prerequisites & Compatibility
| Dependency | Minimum Version | Description |
|---|---|---|
| DSH | Not declared | This package's package.json does not declare dsh engines; runtime is implicitly locked via `@deepseek-ai/*` SDK |
| Node | ^22.19 \|\| >=24 | Per packages/AGENTS.md:9; this package's package.json does not declare engines |
| Platform | Cross-platform | Primarily browser-side patch, works as long as host dsh web runs cross-platform |
| Native Modules | None | All via cordis bundle + Web DOM API, no native binding |

## Installation
```bash
dsh plugin --profile web add github:zhu1090093659/dsh-web-ui/packages/dsh-web-ui-all
```

## Configuration
This plugin requires no additional configuration (the aggregate bundle itself has no independent configuration surface; see respective sub-plugin READMEs and settings page's Web UI plugin group for sub-plugin configurations).

## FAQ

**Q: Is there anything else needed after installation for the plugin to take effect?**

A: Restart dsh web. If using source code development mode, besides `dsh plugin add`, you also need to first run `pnpm install && pnpm -r build && node scripts/link-profile.mjs`, then restart dsh web for it to take effect.

**Q: I only want to install one or two plugins, not the whole bundle. What should I do?**

A: Simply install the corresponding independent sub-package (e.g., `dsh plugin add @linxin666/dsh-client-ui-task-board`); no need to go through this bundle. Installing this package activates all sub-plugins, and you cannot select only a subset.

**Q: Will there be conflicts if installed simultaneously with a same-named independent plugin package?**

A: No. This package's aggregated entry IDs uniformly carry the `web-ui-` prefix (e.g., `web-ui-task-board`), while independent installations still use the original ID (`task-board`), and loader no longer rejects duplicate IDs. It's recommended to keep only one source; having both provides no additional benefit.

**Q: How should configuration lines written by plugin ID in profile be mapped?**

A: When plugins come from this bundle, use the `web-ui-` prefix (e.g., for remote-web-ui's `autoTunnel` config line, write `web-ui-remote-web-ui`), and use the plugin's original ID when independently installed.

**Q: After upgrading to a new version, the new version doesn't take effect. How to troubleshoot?**

A: After modifying the profile's `package.json` version number, execute `pnpm install`. Top-level `node_modules/@linxin666/*` entries may still link to the old store directory. Need to confirm these links point to the new version (Windows: `cmd /c rmdir <link>` then `cmd /c mklink /J <link> <target>`), then restart dsh web.

**Q: What custom logic is actually installed in this package's code?**

A: Host side has no business logic at all (`apply` is an empty function); browser side has only one compat shim that adds legacy `data-pane` / `data-dsh-frame` attributes to the dsh web host shell's sidebar/center/detail three-column containers, allowing child plugins mounted via legacy selectors to continue working.

**Q: After the official dsh web host upgrades, will this package still work?**

A: Yes. The compat shim uses MutationObserver to monitor DOM changes and reapplies attributes in the next frame. After React re-rendering rebuilds column containers, attributes are automatically reapplied, and idempotent checks prevent repeated triggers.

## Difficulty Level
Beginner — One installation command takes effect immediately, no configuration required; understanding underlying behavior requires reading README and source code, but daily use requires no intervention.

## Known Issues & Limitations
- Activating the bundle loads all sub-plugins together; partial selection is not possible; for partial installation, use the corresponding independent sub-packages (README.md:38).
- Aggregated entry IDs are uniformly namespaced with `web-ui-`, allowing this package to coexist with same-named independent plugin packages: loader no longer rejects duplicate IDs, host side registers only once (second source is a no-op), browser side deduplicates by package name; having both sources provides no additional benefit, recommended to keep only one (README.md:39).
- The `@deepseek-ai/*` SDK version is locked; compatibility follows this repository's release节奏; cross-major version upgrades require confirming SDK compatibility (README.md:40).

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-web-ui](https://deepseek-plugin.org/plugins/zhu1090093659/dsh-web-ui/packages/dsh-web-ui-all)
Wiki generated by AI (model: `MiniMax-M2.5`)
