dsh-tweaks

DSH PLUGINUI 与外观

仓库 pridurok-goxa/dsh-tweaks

UI 与外观 未标注验证等级 安全审查:未标注 可信度:未标注 可安装插件

为 DeepSeek Harness 提供可单独开关的界面微调,首个 tweak 用快捷键整体缩放 DSH 界面并修正弹窗、右键菜单与面板拖拽的坐标偏差。

一句话选型结论

按资料字段整理

dsh-tweaks 是UI 与外观类的 DSH 可安装插件,未做沙盒验证,暂无安全审查结论,列出 4 项功能,没有现成安装命令,需要按仓库 README 接入。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类UI 与外观 收录类型可安装插件 验证等级未标注验证等级 安全审查未标注
验证等级 UNKNOWN 未标注验证等级
GitHub 星标 0 复刻 0 · 未关闭 issue 未标注
最近更新 2026-10-08 创建于 2026-10-08
README 25.7 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

4 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-tweaks:为 DeepSeek Harness 提供可单独开关的界面微调

  • 快捷键整体缩放界面
  • 每个 tweak 可单独开关
  • 修正弹窗与菜单坐标
  • 右键菜单与面板拖拽适配

上游标签

deepseek-harnessdsh-plugintweaksui-zoom

验证等级与安全审查

未标注验证等级
自动化流程结论,不是人工审核
验证等级未标注验证等级上游未给出验证结论,安装前请自行确认
安全审查未标注静态分析结论,未标注不代表已通过审查
仓库健康度未标注按仓库活跃度与最近更新时间给出
可信度未标注综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 列出了 4 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 安全审查还没结论,装之前先看仓库改了什么、要什么权限。
  • 没有现成安装命令,要按仓库 README 手动接入。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在UI 与外观场景里给 DSH 补能力的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-tweaks当前 未做沙盒验证 未标注 0 未标注 无
nuwa-skill 未做沙盒验证 未标注 3.8 万 未标注 有
awesome-dsh-plugin L4 · 沙盒安装通过 低风险 1.8 万 0.1.1-rc.2 有
deepseek-balance-whale-widget L4 · 沙盒安装通过 低风险 4,492 0.1.7-rc.2 等 2 个 有
dsh-better-sidebar L4 · 沙盒安装通过 低风险 4,112 0.1.7-rc.2 等 10 个 有
dsh-deep-whale L4 · 沙盒安装通过 低风险 2,470 未标注 有

仓库档案

UI 与外观
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方pridurok-goxa仓库 dsh-tweaks · 默认分支 未标注
分类UI 与外观interface
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言JavaScript仓库主语言
许可证未标注商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 未标注收录时的数值,非实时
创建 / 更新2026-10-08 · 2026-10-08最后推送 未标注
本站收录2026-10-08首次进入本站目录的时间

README 全文

25.7 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-tweaks

Твики DeepSeek Harness одним пакетом. Каждый включается своей галочкой на странице
пакета (Settings → Plugins → dsh-tweaks) и выключается там же — без перезапуска.

Твик Что делает
zoom Масштаб всего интерфейса: пара клавиш меняет размер интерфейса, а не только шрифт переписки
contextMenu Своё меню по правой кнопке: системное меню Electron не масштабируется вместе с интерфейсом
whisper Распознавание русской речи локальной моделью Whisper (tweaks/whisper-host.js, Python-воркер): выключено по умолчанию
trafficLight Светофор дорогих часов DeepSeek: индикатор в шапке и под полем ввода, пауза расписаний и автоматической работы на пике
imageModelFallback Кнопка «Отправить с Flash» над полем ввода, когда выбранная модель не видит изображения: меняет модель и повторяет отправку

Кнопка «отправить с Flash» (твик imageModelFallback)

Когда сервер отвергает отправку с причиной «модель не поддерживает изображения»
(например, в чате выбран DeepSeek-V4-Pro), обычный текст ошибки ничего не предлагает
сделать. Твик добавляет над полем ввода плашку с кнопкой Отправить с Flash:

  • неудавшаяся отправка к этому моменту уже восстановлена в поле ввода (текст и
    картинки), поэтому кнопка не теряет вложение;
  • клик переключает модель через remote.session.selectModel (провайдер, модель и
    уровень рассуждений берутся из настроек и текущего выбора сессии) и повторяет
    ту же отправку публичным inputActions.submit();
  • причину отказа сервер присылает кодом MODEL_DOES_NOT_SUPPORT_IMAGES — по нему
    плашка и появляется, поэтому чужие ошибки она не перехватывает;
  • крестик скрывает плашку до следующего отказа.

Провайдер и модель-замена — служебные поля схемы Config (index.js), а не галочки:
imageFallbackProvider (по умолчанию deepseek-account), imageFallbackModel
(deepseek-flash) и imageFallbackLabel (Flash) — подпись на кнопке. Правятся
через патч профиля, если раскладка моделей на сервере другая.

Клавиши (твик zoom)

Действие Основной блок Нумпад Мышь
Крупнее Ctrl + = Ctrl + + Ctrl + колесо вверх
Мельче Ctrl + - Ctrl + − Ctrl + колесо вниз
Сброс 100% Ctrl + 0 Ctrl + 0 —

Shift не нужен: клавиша читается по позиции, поэтому Ctrl + Shift + = тоже
работает, и раскладка не важна. Шаг — 5%, диапазон — 50…200%. Размер показывается
плашкой в правом нижнем углу 1,2 с и хранится в localStorage (ключ dsh.ui-zoom.v1).

В браузере Ctrl + = / - / 0 забирает страница, поэтому там те же действия
доступны с Alt. Переназначить любую комбинацию: Settings → «Горячие клавиши».

Установка

plugin_manager action=install_bundle target=<путь к папке плагина>

Вручную: добавить "dsh-tweaks": "link:<путь>" в зависимости профиля, вписать
dsh-tweaks в dsh.profile.bundles, затем pnpm install в папке профиля.

Как устроено

  • client.js — браузерная половина: реестр TWEAKS, чтение флагов, форма, код твиков.
  • index.js — хост-половина: схема Config с флагами твиков и подключение
    хост-частей (tweaks/whisper-host.js, tweaks/traffic-light-host.js).
  • cordis.patch.yml — одна запись пакета (id: zoom); строка на странице Plugins
    выключает пакет целиком, поэтому отдельные твики живут флагами, а не записями.
  • locale/en.json, locale/ru.json — подписи карточки пакета (meta.title,
    meta.description); блок meta: в cordis.patch.yml страница Plugins не читает.

Включение и выключение твиков

Флаг твика — поле схемы Config в index.js, помеченное .volatile(): только такие
поля DSH показывает в настройках и принимает на запись, а их смена доходит до живой
записи без перезапуска. Имя поля = id твика в реестре TWEAKS в client.js.

Форму DSH не рисует — её рисует плагин. Галочки живут в слоте
plugins.bundle.config с ключом dsh-tweaks, то есть на странице самого пакета.
Клик по галочке сразу пишет значение (set с прочитанной ревизией) в клиентский
сервис configForms — тот же, откуда плагин читает флаги: namespace формы — id
записи в cordis.patch.yml, то есть zoom.

client.js держит один набор твиков на пакет: apply(ctx) читает флаги,
включает включённые, выключает выключенные и подписывается на изменения. Ресурсы
твика регистрируются через api.own и снимаются при выключении, поэтому повторное
включение не оставляет двойных обработчиков. Пока конфигурация не готова
(configForms нет или status !== 'ready'), работают дефолты реестра: zoom,
contextMenu и trafficLight включены, whisper — нет. В готовом снимке
отсутствие поля — это тоже дефолт реестра: пропавшее поле не включает твик,
выключенный по умолчанию.

Выключение zoom возвращает интерфейс к 100% (значение в localStorage остаётся,
включение вернёт прежний масштаб); попапы при этом возвращаются к исходным
координатам. Выключение contextMenu возвращает системное меню.

Новый твик: поле в Config (index.js), запись в TWEAKS (client.js) и, если у
твика есть код, свой регион в client.js — /* #region tweak- */. Соседей это
не задевает.

Хост-часть твика

Хост-часть твика (если нужна) — отдельный файл tweaks/-host.js, который
index.js подключает по флагу. Клиентская половина у пакета одна, отдельного
модуля на твик не бывает; клиентской части может не быть вовсе — у whisper её
нет, галочка включает хост-часть.

Плагин читает флаги через событие loader/volatile-update: смена одних только
volatile-полей не перезапускает плагин, а DSH компилирует новые значения в уже
выданную конфигурацию и уведомляет владельца записи. Значения volatile-полей
приходят ссылками Volatile (.get()), поэтому хост-часть получает развёрнутую
копию конфигурации обычными значениями. Жизненный цикл твика whisper: флаг
включён — activate(ctx, config); выключен — deactivate(); сменился
whisperModel у включённого — deactivate() и следом activate() с новыми
значениями (размер модели провайдер читает один раз при регистрации).
Переключения идут очередью, а выгрузка плагина ждёт deactivate() — Python-воркер
не переживает твик.

Жизненный цикл твика trafficLight проще: activate(ctx, config) ставит
слушателей и таймер, а смена значений политики приходит в update(config) без
перезапуска — удержанные на красном напоминания переживают правку окон.
deactivate() снимает слушателей, будит ожидающие вызовы и возвращает удержанное
в работу.

Модуль твика импортируется динамически и в try/catch: файла может не быть
(другая ветка, неполная поставка), и тогда причина уходит в лог, а схема Config
и остальные твики продолжают работать. Поле files в package.json включает
tweaks/**, поэтому Python-воркер (tweaks/worker.py) попадает в поставку.

При первом включении твика «речь» хост-половина один раз выставляет настройки
распознавания: после успешного activate (провайдер whisper-local уже
зарегистрирован) идёт ctx.speechToText.configure({ providerId: 'whisper-local', language: 'ru' }), а затем в своё служебное volatile-поле whisperSelectionApplied
записывается признак «выставлено». Галочки у этого поля нет: форма строится из
реестра TWEAKS, а не из схемы. Дальше выбор не перезаписывается — сменил
пользователь провайдера или язык руками, configure больше не зовётся. Ошибка
(службы распознавания нет, язык не поддержан, служба настроек недоступна) уходит
в лог и твик не роняет; признак при этом не ставится, поэтому при следующем
включении попытка повторяется.

Светофор дорогих часов

Правило тарифов DeepSeek (сверено с официальной страницей цен,
ред. 2026-09-10): пиковая цена действует по будням 09:00–12:00 и 14:00–18:00
по Пекину
(для Москвы это 04:00–07:00 и 09:00–13:00), кроме официальных
праздников КНР; всё остальное время — полцены. Полуинтервалы: граница 12:00 уже
вне пика, 14:00 — снова пик.

Индикатор — круглая лампа в левом верхнем углу (рядом с логотипом) и её дубль
под полем ввода, самым первым в строке дока (перед системными показателями): зелёный — полцены, жёлтый мигает
за выбранное время до пика, красный — пик. На красном при работающих сессиях
лампа дышит (плавно растёт от меньшего размера до нормального) и на каждом
максимуме роста от её края уходит мягкая волна — радиус ограничен 2.6 диаметра
лампы, поэтому волна не выходит за пределы индикатора. Панель открывается только по нажатию на лампу и повторяет
системный попап (беседа «Token usage»/контекст): матовый полупрозрачный фон
--dsw-specific-menu, блюр подложки --dsw-menu-backdrop-filter, системные тень и
скругление. Внутри — горизонтальная шкала суток: 24 кружочка от 0 до 24 часов в
местном времени разработчика, красные — дорогие часы, зелёные — дешёвые (в
выходные и праздники вся полоска зелёная), текущий час крупнее и под указателем
«сейчас». Жёлтых кружочков на шкале нет: жёлтой мигает только лампа, предупреждая о
приближении дорогого времени. Под каждым кружочком постоянно видна подпись его часа,
а часы, открывающие зелёный диапазон (после дорогого окна или с начала суток),
выделены жирнее — по ним читается структура дня: для московских окон это 00, 07 и 13.
Подписи часов есть в панелях обоих индикаторов — и в шапке, и под полем ввода.
Сама лампа в шапке подписей не имеет ни в каком варианте; текст рядом с ней — системный
заголовок сессии, его рисует DSH и твик его не трогает.
Подпись под шкалой в покое показывает текущий час, при наведении — час под курсором,
формат один и тот же, поэтому ничего не появляется и не пропадает. Ниже — отсчёт до смены тарифа,
правило тарифов отдельными строками (будни и часы, праздники, текущий часовой пояс)
и строка «Смена тарифа» с адресом: например «пн 09:00 (через 60 ч)» — в пятницу
вечером следующее дорогое окно действительно в понедельник, потому что выходные
целиком дешёвые. Наведение на шкалу подсвечивает час под курсором и его статус: зона
наведения — вся полоска, поэтому на переходах между кружочками шкала не мигает.
В шапке лампа всегда без текста: рядом стоит системный заголовок сессии, который
рисует сам DSH, а не плагин.

Настройки твика — на странице пакета рядом с галочкой, свои у каждого браузера
(лежат в localStorage, ключ dsh.ui-light.settings.v1, хост-половине они не нужны):

Настройка Значения
Нижний индикатор только индикатор · индикатор и время, без «ещё» и адреса (по умолчанию) · индикатор и оставшееся время (с адресом) · индикатор, время и тариф

Умолчания одинаковы для всех: твик включён, нижний индикатор — «Индикатор и время»,
предупреждение — за 10 минут до пика. Личные правки в браузере перекрывают умолчания
только у того, кто их сделал.
| Предупреждение | за 10 (по умолчанию), 20 или 30 минут до пика |

Масштаб

zoom ставится корню приложения (#root). Размеры корня не подменяются: движок сам
отдаёт содержимому логическую ширину «ширина / масштаб», и интерфейс заполняет окно.
transform: scale не подходит — с ним расходится попадание курсора в элементы.

Настройку «Font size» в Settings плагин не трогает: она меняет только текст переписки.

Попапы

Меню и подсказки приложение монтирует порталами в body, мимо корня. Общий zoom до них
не достаёт, поэтому каждый слой получает свой, а координаты плагин заворачивает в формулу:

/* приложение пишет --dsh-ui-zoom-src-left: 270px */
left: calc(var(--dsh-ui-zoom-src-left) / var(--dsh-ui-zoom));

Делит браузер, а не JS. --dsh-ui-zoom лежит на корне документа, поэтому смена масштаба
пересчитывает все попапы разом. JS-деление давало дрейф: на нецелом масштабе частное —
периодическая дробь, браузер округляет inline-длину, и меню уезжало в разные места экрана.

offsetWidth и offsetHeight попапов плагин отдаёт приложению в вьюпортных пикселях:
по ним оно выравнивает меню по кнопке и подгоняет его под экран. При смене масштаба
плагин шлёт resize — якорь переехал.

Меню по правой кнопке

Системное меню рисует Electron, и zoom до него не достаёт. Плагин перехватывает правый
клик и показывает своё: в поле ввода — Undo, Redo, Cut, Copy, Paste, Select All,
при выделении вне поля — только Copy. Вставка идёт через Clipboard API.

Своё меню — обычный слой в body, поэтому масштаб ему отдаёт твик zoom через мост
(пока твик выключен, мост молчит: масштабировать нечего). Фон и текст — токены темы.
Подписи берутся через translate(): штатный переводчик отдаёт сам ключ, если словарь
не успел подключиться, и в меню появлялось menu.copy.

Полоски изменения ширины

Приложение прибавляет к ширине панели сдвиг e.clientX - origin, а ширина — в логических
пикселях. Курсор визуальный, поэтому плагин отдаёт событиям на полоске логический
clientX: иначе на 150% панель проходит в полтора раза больше курсора.

Позицию полоска получает как left: viewport - rightbar. Под zoom эта арифметика
расходится с сеткой — при 125% полоска стояла на 1078 px, а граница панели на 1202 px.
Поэтому плагин ставит полоску по границе колонки: offsetLeft и offsetWidth.

Рамка интерфейса

AppFrame измеряет себя через getBoundingClientRect() и из этой ширины считает колонки.
Под zoom движок отдаёт визуальную ширину, поэтому плагин возвращает логическую. Ниже
1024 логических пикселей не опускает: по этому порогу приложение сворачивает сайдбар
(SIDEBAR_AUTO_COLLAPSE). Подмена живёт на уровне пакета и идемпотентна, поэтому
повторное включение твика не делит замер дважды.

Ограничения

  • Меню Application и Edit рисует Windows — плагин до них не достаёт.
  • Чем крупнее масштаб, тем раньше сворачивается сайдбар: zoom уменьшает логическую
    ширину, а порог у приложения — 1024 логических пикселя. При окне 1180 px панель
    сворачивается примерно со 120%.
  • Ширина правой панели хранится в пикселях, поэтому с ростом масштаба занимает большую
    долю окна. Меняется перетаскиванием полоски.
  • Вставка в своём меню зависит от доступа к буферу обмена.
  • Длинное меню ограничивается по высоте в vh, а vh зум не масштабирует.
  • На не-loopback Web служба конфигурации недоступна (status: 'unavailable'): там
    галочки заблокированы, а твики работают на дефолтах. В Desktop и на loopback всё в порядке.
  • @deepseek-ai/schemastery объявлен в peerDependencies: пакет берётся из установки
    DSH, отдельная установка не нужна. Правка index.js подхватывается после перезапуска
    приложения — HMR по умолчанию следит только за файлами профиля (root: []).

Проверка

node --check client.js
node --check index.js
node test\check-client.cjs
node test\check-whisper.cjs
node test\check-host.cjs
node test\check-traffic-light.cjs

test/check-client.cjs гоняет настоящий client.js в песочнице с заглушками DOM,
React, ctx и configForms: 56 проверок — флаги включают и выключают твики,
твик без клиентского кода (whisper) включается и выключается галочкой, повторное
включение не копит обработчики, дефолты без службы конфигурации, форма пишет
значения (операция set + ревизия), шаг и границы масштаба, хранилище, команды и их
привязки, плашка, Ctrl + колесо, попапы (перехват координат, calc(), сигнал
resize, отсутствие дрейфа), полоски, рамка и меню по правой кнопке.

test/check-host.cjs проверяет хост-половину без установки DSH: index.js грузится
с заглушкой @deepseek-ai/schemastery, флаг поднимает настоящий
tweaks/whisper-host.js, смена модели перезапускает его, выгрузка снимает, а
пропажа файла хост-части не роняет плагин. Там же — разовая настройка
распознавания: первое включение зовёт configure ровно один раз и сохраняет
признак в своё поле схемы, повторный запуск с готовым признаком выбор не трогает,
падение configure и отсутствие службы распознавания твик не роняют.
test/check-whisper.cjs — контракт самой хост-части.

test/zoom-stand.html прогоняется в headless Edge в реальном времени: --dump-dom
отдаёт страницу до конца её асинхронной работы, а --virtual-time-budget ломает
порядок ResizeObserver и даёт ложный сбой на перетаскивании полоски. Стенд прогоняет
связку «якорь — портал» на всех масштабах 0.5…2.0 и четырёх раскладках, отдельно
проверяет полоску панели, перетаскивание и меню под курсором.

常见问题

5 问
答案由本站依据条目字段整理,不引用上游原文
dsh-tweaks 怎么安装?

本站没有抓到该条目的安装命令,请到仓库主页确认安装方式;这类条目多数是生态应用或尚未发布安装包的项目。

dsh-tweaks 的验证等级是什么意思?

未标注验证等级。上游未给出验证结论,安装前请自行确认

dsh-tweaks 安全吗?

未标注。

dsh-tweaks 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-tweaks 有哪些功能?

快捷键整体缩放界面、每个 tweak 可单独开关、修正弹窗与菜单坐标、右键菜单与面板拖拽适配。

同名或近似条目

1 条
不同作者的仓库分开列,请确认你要装的是哪一个
UI 与外观
按星标排序,可作替代方案

nuwa-skill

nuwa-skill

女娲 DSH plugin 只需输入一个名字,就自动调研、提炼并验证任何人的心智模型、决策启发式与表达 DNA,生成可直接调用的思维视角 S

未标注验证等级 3.8 万 星

awesome-dsh-plugin

awesome-dsh-plugin

A curated list of plugins for DeepSeek Harness (dsh) · DeepSeek Harnes

L4 · 沙盒安装通过 1.8 万 星

deepseek-balance-whale-widget

DeepSeek-Balance-Whale-Widget

DSH 界面右下角的常驻小鲸鱼余额挂件,实时显示 DeepSeek 账户余额、今日已用与每轮对话消耗,支持拖拽吸附、Q 弹动画与音效,开箱即

L4 · 沙盒安装通过 4,492 星

dsh-better-sidebar

DSH-better-sidebar

面向 DeepSeek Harness 的服务化侧边栏工作台插件,把文件编辑、终端、Git 变更、子代理任务与侧边对话整合进右侧栏与底部面板

L4 · 沙盒安装通过 4,112 星

dsh-deep-whale

dsh-deep-whale

DSH Web 鲸鱼娘皮肤系列(深海女仆工坊 maid-atelier)。

L4 · 沙盒安装通过 2,470 星

deepseek-design

deepseek-design

可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。

L4 · 沙盒安装通过 1,438 星

pridurok-goxa 的其它插件

1 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。