DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Tweaks — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
T

dsh-tweaks

Tweaks

DeepSeek Harness 调整:界面缩放、自定义右键菜单,以及 DeepSeek 高昂时段的红绿灯提示。每项功能都可在软件包页面中勾选启用。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:pridurok-goxa/dsh-tweaks#beaf320c058098acd8c11317e7be2f203d2a414c
README兼容性版本

兼容性与来源证明

Tweaks 以 dsh-tweaks 发布,当前版本为 2.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/16

版本

2.1.0stable
2026/10/16
2.0.0stable
2026/10/8

相关插件

正在加载相关插件…

最新版
2.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
未声明
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/16
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

README

dsh-tweaks

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

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

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

ДействиеОсновной блокНумпадМышь
КрупнееCtrl + =Ctrl + +Ctrl + колесо вверх
МельчеCtrl + -Ctrl + −Ctrl + колесо вниз
Сброс 100%Ctrl + 0Ctrl + 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-<id> */. Соседей это не задевает.

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

Хост-часть твика (если нужна) — отдельный файл tweaks/<id>-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 — снова пик.

Индикатор — круглая лампа в левом верхнем углу (рядом с логотипом) и её дубль под полем ввода, рядом с заполнением контекста: зелёный — полцены, жёлтый мигает за trafficLightWarningMinutes до пика, красный — пик. На красном при работающих сессиях вокруг лампы расходятся волны. Наведение показывает часы тарифа на сутки: 24 цветных слота в местном времени разработчика, стрелка текущего времени, подсветка текущего слота, отсчёт до перехода и правило тарифов. Наведение на слот циферблата показывает его часы и статус.

На красном хост-половина (tweaks/traffic-light-host.js) не тратит дорогие токены фоном: напоминания расписаний, сработавшие в пик, удерживаются и уходят агенту после возврата зелёного; автоматические шаги агентов и субагентов (цели, расписания, субагенты автоматических родителей) ждут зелёного на ближайшем модельном вызове. Ручные сообщения работают и на красном — разработчик сам решает, платить ли пиковую цену. Вызов модели, уже начавшийся к моменту включения красного, дорабатывает.

Ограничения: удержанные напоминания живут в памяти хоста — рестарт DSH во время пика теряет их (планировщик уже пометил доставку совершённой); праздники встроены только на 2026 год, остальные годы считаются «по будням»; неизвестные источники сообщений никогда не блокируются (fail-open).

Поля конфигурации: trafficLightPeakWindows (окна по Пекину, { start, end } в формате HH:MM), trafficLightHolidays (даты YYYY-MM-DD), trafficLightWarningMinutes, trafficLightPauseSchedules, trafficLightPauseAgents — все volatile, правятся в настройках записи. Политика — один файл tweaks/traffic-light-policy.js; его копия вшита в client.js между маркерами region traffic-light-policy, и тест test/check-traffic-light.cjs следит, чтобы копии не разошлись.

Масштаб

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 и четырёх раскладках, отдельно проверяет полоску панели, перетаскивание и меню под курсором.

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Ab Chartdsh-ab-chart带有绘制其调用的浏览器卡片的图表渲染工具,封装在一个可发布的插件包中Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义