# dsh-liang-skin

> Provides a

## Metadata

- Author: [@kingOfSoySauce](https://github.com/kingOfSoySauce)
- Repo: <https://github.com/kingOfSoySauce/dsh-liang-skin.git>
- GitHub: [kingOfSoySauce/dsh-liang-skin](https://github.com/kingOfSoySauce/dsh-liang-skin)
- Stars: 120
- Language: TypeScript
- Topics: `dsh-plugin`
- Forks: 10
- Open Issues: 2
- Last push: 2026-08-18T11:34:49.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:kingOfSoySauce/dsh-liang-skin
```

## Wiki

## One-Line Description
Provides a custom skin called "Sliding Ancestor" for the DeepSeek Harness Web client, replacing the segmented model reasoning level buttons with a continuous slider that, when dragged, links character illustrations, background videos, and interface colors based on intensity levels 0–30.

## Core Features
- Injects a continuous slider on the right side of the model input box, with positions directly reading the current model's official `reasoning.efforts`, where any N positions are evenly distributed on the 0–30 intensity axis
- During dragging, only performs local visual preview; when released, keyboard operation completed, or focus lost, it snaps to the nearest position and submits that position's original ID via official `ModelDirectory.select`
- Synchronously switches character illustrations, background videos, and interface colors based on intensity (segments 0–23 retain Harness's native light shell, segment 24 and above switches to charcoal gray + antique gold dark shell)
- Provides 24 reviewed character anchor points and an 8-second interpolated video as visual assets, no additional downloads needed
- Adds "Sliding Ancestor" option in "Settings → General Settings → Appearance Skin", alongside Light / Dark / System options, with toggle state saved in browser local storage
- Additionally provides a sub-toggle for "whether slider links thinking level"; when disabled, slider only controls skin progress and no longer modifies model reasoning level

## Technical Implementation
- **Languages**: Server-side Node.js ESM (`src/index.js`) + Client-side TypeScript / React (`src/client/index.tsx`), CSS using modular style files
- **Key Dependencies**: `@deepseek-ai/dsh-client-runtime/client` (injects host runtime), `@deepseek-ai/dsh-client-ui-conversation`, `@deepseek-ai/dsh-client-ui-theme` (skin and theme bridging), `@deepseek-ai/dsh-client-locale` (i18n registration); client bundled as IIFE compatible format via esbuild
- **Architecture Pattern**: Dual-end plugin. Server-side follows Cordis plugin model (`inject = ["webServer"]`), uses `ctx.webServer.register` to mount 27 assets under `assets/` as HTTP exact routes with Range request support; client-side follows DSH client injection model (`inject = ["slots","Sessions","modelDirectories","locale","theme"]`), registers slider component via `slots.inject("conversation.input.right")` and extends native appearance selection row via MutationObserver
- **Entry Files**: `src/index.js` (server-side Cordis plugin) + `src/client/index.tsx` (client-side React component + injection logic), built by `scripts/build-client.mjs` using esbuild to output `lib/client.js`

## Use Cases
Players and creators who want to replace the scattered buttons for model reasoning level switching in the DSH Web client with a "drag-to-end" style slider, and want the slider to link to a set of stylized visual effects; if you only want to change the skin without caring about the slider itself, you can also use its color scheme and character backgrounds independently.

## Prerequisites & Compatibility
| Dependency | Minimum Version | Description |
|---|---|---|
| DSH | 0.1.0-rc.6+ | README line 59 declares verification on this version |
| Node.js | Not declared | `package.json` does not declare `engines.node` |
| pnpm | Follows DSH CLI | `dsh plugin` subcommand depends on pnpm in PATH |
| Platform | Cross-platform | `package.json` has no `os` / `cpu` restrictions, assets distributed via HTTP routes |
| Native Modules | `node:fs` / `node:url` | Server-side only uses Node built-in modules; client-side has no native dependencies |

## Installation
```bash
dsh plugin --profile web add github:kingOfSoySauce/dsh-liang-skin
```

## Configuration
This plugin requires no additional configuration. You can toggle the following preferences in "Settings → General Settings → Appearance Skin" (saved in browser localStorage):

| Config | Type | Description | Default |
|---|---|---|---|
| `dsh-liang-intensity-skin.enabled` | Boolean | When enabled, shows skin background layer, slider and characters; when disabled, restores Harness native UI | `true` |
| `dsh-liang-intensity-skin.bind-effort` | Boolean | When enabled, slider dragging submits and modifies model's reasoning level; when disabled, slider only controls skin progress, does not affect model | `true` |

## FAQ

**Q: What does this plugin do?**

A: It applies a "Sliding Ancestor" appearance skin to the DSH Web client and replaces the model reasoning level selector from segmented buttons to a continuous slider. When sliding, character illustrations, background videos, and interface colors change together; the selected position is only submitted when released.

**Q: Do I need additional configuration after installation?**

A: No. All assets and the slider are built into the plugin package; after installation, you'll see the new option in "Appearance Skin"; preferences are saved in browser local storage, no changes to model configuration or disk.

**Q: Will the slider show for models that don't support reasoning or only have one level?**

A: No. The client logic checks whether the current model has reasoning levels; if there are fewer than two levels or unrecognized, the slider simply won't render, and the skin background layer continues to work based on the current selection.

**Q: Will the slider show for sessions addressed by subagent?**

A: No. The code specifically checks `subagentAddress`; subagent sessions that are addressed will neither show nor submit slider changes, avoiding interference with the parent session's state.

**Q: Do I need to restart the browser or refresh after installation?**

A: No refresh needed; after restarting the DSH Web process, the browser automatically loads the new client plugin; the current session is interrupted, but DSH has disk persistence and can continue after restart.

**Q: Will slider misoperations pollute my conversation?**

A: During dragging, only local visual preview is updated, no position is submitted; only when released, keyboard confirmed, or focus lost will it snap and trigger a model reasoning level switch. Pressing Esc rolls back to the pre-drag position.

**Q: Will it crash if video or images fail to load?**

A: No. The client has three layers of fallback: character frame failure falls back to background video, video failure falls back to poster image, poster failure falls back to pure color mode; skin state is always preserved.

**Q: How to completely disable the skin?**

A: In "Settings → General Settings → Appearance Skin", select any of "Native", "Light", "Dark", or "System"; the skin layer, slider, and custom color variables will all be removed; to completely remove the plugin, run `dsh plugin --profile web remove dsh-client-liang-intensity-skin`.

## Difficulty Level
Beginner — Plug and play, all visual assets built-in, preference toggles in native settings, no documentation reading or config writing needed.

## Known Issues & Limitations
- Client relies on MutationObserver to match DSH native appearance selection row CSS class names (`[class*="_8HJdBW_group"]` / `[class*="_8HJdBW_cubeRow"]` / `[class*="_8HJdBW_themeCube"]`); if DSH upstream refactors appearance component class hashes, the "Sliding Ancestor" button may no longer be injected into the native appearance row; preferences as separate toggle items are not affected
- 24 character anchor points cover intensity points 0, 1, 3, 4, 6, 7, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 24, 25, 27, 28, 29, 30 — middle positions switch via nearest-neighbor snapping, no image crossfading
- Installation depends on pnpm in PATH; pnpm ≥ 10 does not execute third-party dependency prepare scripts by default, this plugin has no prepare script, so normally won't trigger; if installation fails with prompts, follow DSH output to add corresponding key in `~/.dsh/profiles/web/pnpm-workspace.yaml`'s `allowBuilds` and retry
- Installation / uninstallation modifies `~/.dsh/profiles/web/package.json`'s `dsh.profile.bundles`, but `remove` is "detach + restart", does not automatically roll back local preferences already written to disk; preferences exist only in browser localStorage

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-liang-skin](https://deepseek-plugin.org/plugins/kingOfSoySauce/dsh-liang-skin)
Wiki generated by AI (model: `MiniMax-M2.5`)
