中文 · English · 日本語 · 한국어 · Español · Français · Deutsch · Русский

# dsh-dream-skin 🔮 **Дайте DeepSeek Harness лицо, которое дышит, чувствует и принадлежит вам.** Нативные темы · обои · распространяемые наборы тем — проект, созданный с душой и полностью построенный на официальной системе токенов `--dsw-*` от DSH. > **Короче: код с атмосферой.** ✨ | 🎨 8 оригинальных тем | 🖼️ обои + прозрачность/размытие | 🌈 акцент в один клик | 📦 распространяемые наборы тем | |---|---|---|---| > Установка в одну строку · полностью нативно (без инъекций, без патчей установщика) · переживает обновления DSH [中文](./README.md) · [История изменений](./CHANGELOG.md) · [Заметки о проекте](./docs/PROJECT.md) · [Руководство по публикации](./docs/publishing-to-npm.md) ![npm version](https://img.shields.io/npm/v/dsh-dream-skin?color=4f83f2&label=npm) ![license](https://img.shields.io/github/license/RevolutionLA/dsh-dream-skin?color=34d399) [![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com) ![node](https://img.shields.io/badge/node-%3E%3D18-6d9af6) ![dsh](https://img.shields.io/badge/dsh-0.1.0--rc.6-blueviolet) ![plugin type](https://img.shields.io/badge/plugin-dual--face%20(dsh.bundle%2Bdsh.client)-4f83f2) ![ci](https://img.shields.io/github/actions/workflow/status/RevolutionLA/dsh-dream-skin/ci.yml?branch=main&label=CI&color=34d399) ![code size](https://img.shields.io/github/languages/code-size/RevolutionLA/dsh-dream-skin?color=orange)
## ⚡ Установка в одну строку **Скопируйте это предложение в свой DSH — и он установит всё за вас:** > Установите, пожалуйста, плагин скинов dsh-dream-skin (https://github.com/RevolutionLA/dsh-dream-skin или npm-пакет `dsh-dream-skin`) и подскажите, как перезапустить DSH Web. Предпочитаете CLI? Одна команда: ```sh dsh plugin --profile web add dsh-dream-skin && dsh web ``` > 🚀 **Теперь и на npm!** Если DSH установлен, добавьте плагин одной командой — клонировать не нужно. > **Дань уважения [Codex-Dream-Skin](https://github.com/Fei-Away/Codex-Dream-Skin).** Но подход другой: > Codex внедряет CSS в рендерер десктопного клиента через CDP, тогда как DSH — это **управляемый токенами Web-GUI** с первоклассной > поддержкой «сторонних плагинов, регистрирующих темы». Поэтому этот плагин **полностью нативный** — без инъекций, без бинарных > патчей, и он не сломается при обновлении клиента. > > **Не официальный продукт.** Просто способ украсить ваше рабочее пространство DeepSeek Harness. --- ## 📸 Скриншоты > Настоящие скриншоты, а не макеты. Слева: DSH после применения темы; справа: специальный раздел **Тема / Внешний вид** в Настройках.

DSH skin preview    Theme section in settings

--- ## 🏆 Почему он заслуживает звёздочку (по сравнению с альтернативами) | Возможность | Наш | Другие темы DSH | Codex-Dream-Skin (десктоп) | |------|:---:|:---:|:---:| | Нативные токен-темы — без инъекций и патчей установщика | ✅ | ✅ | ❌ (инъекция через CDP) | | Свои обои + прозрачность/размытие | ✅ | частично | ✅ | | **Импорт/экспорт наборов тем + ссылки для обмена** | ✅ | ❌ | ✅ (zip-наборы) | | **Акцентная переопределяемая тема для каждого пользователя** | ✅ | ❌ | частично | | **Обои 2.0 (URL / градиент / предложение под тему / авто-затемнение)** | ✅ | ❌ | ✅ | | Локальная библиотека наборов + избранное + «удиви меня» | ✅ | ❌ | частично | | Проверка + откат | ✅ | частично | ✅ | | **Веб-GUI в браузере, кроссплатформенно из коробки** | ✅ | ✅ | ❌ (нужно десктопное приложение) | ## ✨ Возможности | Возможность | Описание | |------------|-------------| | 🎨 **8 встроенных пресетов (Mirage)** | Мгновенное переключение в **Настройки → Тема / Внешний вид**, светлая и тёмная | | 🖼️ **Свои обои** | Выберите локальное изображение (автосжатие ≤2 МБ), настройте **прозрачность / размытие** | | 🔤 **Непрозрачные внутренние поверхности** | Карточки, поля ввода, пузыри сообщений остаются читаемыми — никогда не «выцветают» | | ↩️ **Восстановление по умолчанию** | Один клик назад к встроенному виду DSH (следовать за системой) | | 💾 **Локальное сохранение** | Тема и обои хранятся в `localStorage`, переживают перезагрузку | ## 🚀 Продвинутые возможности (P0) Дифференциация вдохновлена существующими проектами тем для DSH плюс UX тем от Codex: | Возможность | Описание | |------------|-------------| | 📦 **Формат набора тем + импорт/экспорт** | Набор `*.dsh-theme.json` = маркер формата + версия + манифест (id/имя/автор/scheme/акцент/токены). Импортируйте файл, применяйте в один клик и копируйте **ссылку для обмена** (закодированную в хэше URL) | | 🌈 **Акцент для каждого пользователя** | Накладывайте фирменный акцент поверх активной темы (слой `overrideTokens`, сама тема не трогается): **12 пресетов-образцов в один клик**, пипетка цвета, **случайный выбор** и сброс | | 🖼️ **Обои 2.0** | Локальное изображение / **URL изображения** / **пресеты градиентов**, с **предложенным градиентом под каждую тему** и **авто-затемнением**; **Недавние** (до 5) для возврата в один клик | | 🧩 **Локальная библиотека наборов** | Все импортированные наборы тем в одном месте; **применить / в избранное / удалить** в один клик (8 встроенных тем живут в ряду Тем) | | ✅ **Чёткая обратная связь о выборе** | Переключение тем мгновенно обновляет выделение галочкой/рамкой — никаких устаревших белых рамок | | 🎲 **«Удиви меня»** | Случайное переключение на тему, отличную от текущей | | ⭐ **Избранное** | Помечайте любимые темы звёздочкой и быстро переключайтесь между ними | | ✅ **Проверка + откат** | Импорт набора проверяет формат / обязательные токены / корректность цветов; при сбоях или удалении происходит безопасный откат | ## ⚡ Быстрый старт (3 шага) ```sh # 1. install dsh plugin --profile web add dsh-dream-skin # 2. restart dsh web # 3. open Settings → Theme / Appearance → pick a skin → done. ``` > Устанавливается опубликованный npm-пакет — клонирование не нужно. Если `dsh plugin add` сообщает об ошибке workspace, добавьте флаг `-w`. ## 🧩 Что это за плагин **Стандартный двуликий «всё есть плагин» `dsh-plugin` — загружается и используется точно так же, как официальный пакет `ui-theme`.** Девиз DeepSeek Harness — *всё есть плагин*: модели, инструменты, песочницы, сессии, UI и даже сам Agent Loop являются плагинами. `dsh-dream-skin` поставляет темы как npm-пакет, который **изоморфен официальным UI-пакетам**: ```text ┌──────────── dsh-dream-skin (standard dsh-plugin / dual-face) ─────────────┐ │ dsh.bundle → cordis.patch.yml inserts the dream-skin entry (host half)│ │ dsh.client → lib/client.js (browser bundle) (browser half)│ └───────────────────────────────────────────────────────────────────────────┘ ``` - **Команда установки = официальная**: `dsh plugin --profile web add dsh-dream-skin` - **Использует официальные точки расширения**: `ctx.theme` (регистрация тем), `ctx.theme.overrideTokens` (слои переопределений), `ctx.slots` (монтирование UI в специальный раздел **Настройки → Тема / Внешний вид**). - **Контракт манифеста совпадает с официальными пакетами**: `dsh.bundle` + `dsh.client` + `exports["./client"]`. Иными словами: вы устанавливаете не сомнительный скрипт — это стандартный плагин тем внутри официальной системы плагинов DSH. ## 🖼️ Превью — серия Mirage > Превью ниже генерируются из **реальных токенов** каждой темы — что видите, то и получаете.
abyss
abyss
aurora
aurora
nebula
nebula
ember
ember
midnight
midnight
ivory
ivory
mist
mist
rose
rose
## 🎲 Пресеты | id | scheme | атмосфера | |------|--------|------| | `abyss` | 🕶️ тёмная | глубоко-синяя бездна DeepSeek (якорная) | | `aurora` | 🌌 тёмная | бирюзово-зелёное северное сияние | | `nebula` | 🪐 тёмная | космический фиолетовый | | `ember` | 🔥 тёмная | тёплый оранжевый уголёк | | `midnight` | 🌚 тёмная | чисто-чёрный OLED | | `ivory` | 📜 светлая | тёплый айвори / бумага | | `mist` | 🌫️ светлая | прохладная голубая дымка | | `rose` | 🌸 светлая | розовый / румянец | ## 📦 Установка Выберите любой из четырёх вариантов, затем **перезапустите DSH Web** (текущая сессия прервётся, но сессии DSH сохраняются на диск и восстанавливаются после перезапуска). ### Вариант A: из npm (опубликован, **рекомендуется**) ```sh dsh plugin --profile web add dsh-dream-skin ``` ### Вариант B: из GitHub (привязка к проверенному коммиту) ```sh dsh plugin --profile web add 'github:RevolutionLA/dsh-dream-skin#<40-char-commit>' ``` > Привязка к коммиту релиза означает, что новые изменения в `main` никогда незаметно не изменят вашу установленную копию. ### Вариант C: из tarball релиза (офлайн / без git) Скачайте `dsh-dream-skin-.tgz` со страницы [Releases](https://github.com/RevolutionLA/dsh-dream-skin/releases) (в нём уже собран `lib/client.js`, так что prepare-скрипт при установке не запускается), затем: ```sh dsh plugin --profile web add ./dsh-dream-skin-.tgz ``` ### Вариант D: клонировать и установить из локального пути (разработка) ```sh git clone https://github.com/RevolutionLA/dsh-dream-skin.git cd dsh-dream-skin dsh plugin --profile web add . ``` > `dsh plugin` привязывает относительные пути к каталогу, **из которого вы запускаете команду**, устанавливая ссылочную > зависимость, указывающую на ваш клон: правите исходники, сохраняете, перезапускаете DSH — переустановка не нужна. **Перезапуск и проверка:** ```sh dsh web dsh --profile web --dump-config | grep -A2 dream-skin # a dream-skin loader entry should appear ``` Откройте **Настройки → Тема / Внешний вид**, чтобы увидеть ряды **Темы**, **Акцент**, **Обои** / **Расширенные обои** и **Наборы тем**. > Флаг `-w` (workspace) нужен при простом `add`, потому что каждый профиль поставляется с `pnpm-workspace.yaml`; pnpm > считает каталог профиля корнем workspace, поэтому простое добавление падает с ошибкой `ERR_PNPM_ADDING_TO_ROOT`. Если ваш > профиль уже использует workspace, повторять флаг не придётся. ## 🔄 Обновление / Удаление **Обновление до последней версии** (при установке из npm-релиза): ```sh dsh plugin --profile web update dsh-dream-skin dsh web # restart to pick it up ``` > Застряли на старой версии после обновления? Политика pnpm по минимальному возрасту релиза (supply-chain) может > придерживать свежеопубликованный релиз. В каталоге профиля выполните: > `pnpm add dsh-dream-skin@latest --config.minimumReleaseAge=0`, чтобы принудительно обновить. **Удаление:** ```sh dsh plugin --profile web remove dsh-dream-skin dsh web # restores the official appearance ``` ## 🧩 Совместимость | Пункт | Значение | |------|-------| | DeepSeek Harness (`dsh`) | `0.1.0-rc.6` (peerDependencies зафиксированы как `^0.1.0-rc.6`) | | Node.js | `>=18` | | Браузер | современный Chromium / WebKit (нативные CSS-переменные и `matchMedia`) | > При обновлении DSH не забудьте соответственно поднять peerDependencies в `package.json`. ## ⚙️ Как это работает Система тем DSH основана на токенах: веб-оболочка поставляет дизайн-токены `--dsw-*`, а `ThemeRuntime` позволяет сторонним плагинам регистрировать темы, переопределяющие слой алиасов (`--dsw-alias-*`). Этот пакет — стандартный двуликий плагин: ```text ┌─────────────────────────────────────────────┐ │ dsh-dream-skin (dual-face plugin) │ ├────────────────────────────┬────────────────┤ Host half │ lib/index.js │ Browser half │ │ cordis.patch.yml inserts │ lib/client.js │ │ dream-skin loader entry │ __ModuleLoader__│ └────────────────────────────┴────────────────┘ │ │ profile tree loaded /plugins/dsh-dream-skin/client.js │ ┌────────────────────────────────┬────────────────┐ │ │ │ ctx.theme.register(8 skins) ctx.theme.overrideTokens(wallpaper) ctx.slots.inject('settings.section' + 'settings.dreamSkin.item') ``` - **Хост-часть** (`lib/index.js`) — патч-слой `dsh.bundle`, вставляющий запись загрузчика `dream-skin`; `apply` — это no-op, ровно как у поставляемых пакетов `ui-*`. - **Браузерная часть** (`lib/client.js`): 1. регистрирует 8 тем через `ctx.theme.register(...)`; 2. восстанавливает сохранённую тему и применяет её через `ctx.theme.setTheme(...)`; 3. отрисовывает обои как фиксированный фон с `z-index:-1` и накладывает `ctx.theme.overrideTokens(...)`, делая основной холст (`--dsw-alias-bg-base`) и боковую панель (`--dsw-specific-sidebar-fill`) полупрозрачными; 4. слушает `theme/change` и перекрашивает подложку обоев при смене темы / схемы; 5. регистрирует специальный раздел **Настройки → Тема / Внешний вид** (`settings.section`) и монтирует пять рядов возможностей в слот `settings.dreamSkin.item`. Каждая тема несёт свой `colorScheme` (`light`/`dark`), управляющий `body[data-ds-dark-theme]`; переопределения алиас-токенов применяются как инлайновые custom properties на `` через ThemePresenter из ui-layout. ## 💼 Заметки о сохранении - Тема и обои хранятся в `localStorage` (ключи с префиксом `dsh-dream-skin:`), **для каждого браузера**. - Почему не в настройках Host? Проводка настроек Host предоставляет браузерным клиентам только разрешённый список пространств имён (`WEB_SETTINGS_NAMESPACES` в `dsh-host-apiproxy`), поэтому стороннее пространство имён ответит `settings-not-exposed`; сам продукт хранит удалённые браузерные предпочтения локально для процесса. `localStorage` соответствует этой границе и переживает перезагрузки. ## 🛠️ Разработка / расширение тем Браузерный бандл написан напрямую в формате `__ModuleLoader__` (тот же вид, что tsdown выдаёт для поставляемых пакетов `ui-*`), так что **шаг сборки не нужен**. `lib/client.js` может `require` только сущности модульной таблицы: сиды платформы (`react`, `react/jsx-runtime`, …) и зарегистрированные клиентские бандлы (`@deepseek-ai/dsh-client-runtime/client`, …). - **Добавить встроенную тему**: добавьте объект (`id` + `colorScheme` + `tokens`) в массив `SKINS` в `lib/client.js`; она появится в Настройках автоматически. Добавьте ключ `skin.` во **все 8 словарей языков** (`zh`/`en`/`ja`/`ko`/`es`/`fr`/`de`/`ru`). - **Поставлять набор тем (рекомендуется)**: следуйте [`docs/examples/sample-theme-pack.json`](./docs/examples/sample-theme-pack.json) — любой `*.dsh-theme.json` импортируется в Настройках и распространяется по ссылке, без изменений кода. - **Добавить свои обои**: положите изображения в [`wallpapers/`](./wallpapers/) (распространяйте только то, на что у вас есть права), затем импортируйте их через ряд «Обои» в DSH. - **Проверка**: `npm test` (VM-смоук-тесты: factory eval, `apply()`, импорт набора и сохранение). - **Перекраска**: используйте токены `--dsw-alias-*` (полный контракт в [`docs/themes-spec.md`](./docs/themes-spec.md)). ## 📌 Дорожная карта - [x] v0.1: 8 тем + свои обои (прозрачность / размытие) + локальное сохранение - [x] Формат набора тем + импорт / экспорт / ссылка для обмена (JSON + манифест + проверка) - [x] Акцент для каждого пользователя + случайный выбор - [x] Обои 2.0 (URL / градиент / предложение под тему / авто-затемнение) - [x] Локальная библиотека наборов + применение в один клик / избранное / «удиви меня» - [x] Полная i18n-локализация текстов и документации (zh / en / ja / ko / es / fr / de / ru) - [ ] Онлайн-студия палитр / превью тем (чистый фронтенд, проверка контраста) - [ ] Галерея тем сообщества (приём наборов в репозиторий / онлайн-галерея) - [ ] Улучшение первого рендера (FOUC) ## 🤝 Вклад Приветствуются issue и PR! Пожалуйста, прочитайте [Руководство по вкладу](./CONTRIBUTING.md) и соблюдайте [Кодекс поведения](./CODE_OF_CONDUCT.md). ## ⭐ Поддержите проект Если вам нравится: поставьте звёздочку **⭐** репозиторию, лайк **👍** на npm или поделитесь с друзьями по DSH — это помогает проекту находить аудиторию и оставаться поддерживаемым. Хотите добавить темы / онлайн-студию / больше скинов? Присоединяйтесь. ## 🔒 Безопасность Нашли проблему с безопасностью? Не открывайте публичный issue — см. [Политику безопасности](./SECURITY.md). ## 📄 Лицензия [MIT](./LICENSE) ## 🙏 Благодарности - Архитектура и справочник по API: официальный клиентский пакет DeepSeek Harness [ui-theme](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/client/ui-theme). - Концептуальная дань: [Codex-Dream-Skin](https://github.com/Fei-Away/Codex-Dream-Skin).