dsh-pluginsv1.0.0

vladikdragon/dsh-plugins

安全管理 MIT 最近更新 2026-11-11
0Stars
0Forks
0待解决 Issue
安装命令 dsh plugin --profile web add github:vladikdragon/dsh-plugins#01d740dab0b5ba34afeae8825efb71b1b836807a

介绍

DeepSeek Harness plugins. dsh-session-full-access-badge marks sidebar session rows that run under the Full access (danger-full-access) permission preset.

标签

cordis deepseek-harness dsh dsh-plugin permissions plugin sidebar web-ui

概述

dsh-session-full-access-badge

Значок «Полный доступ» рядом со временем обновления в списке сессий боковой панели DeepSeek Harness.

English summary: a small DeepSeek Harness web plugin that marks every sidebar session row running under the danger-full-access permission preset with the same shield glyph the composer's permission picker uses.

Что делает

Для каждой сессии, у которой текущий режим разрешений — «Полный доступ» (danger-full-access), рядом со временем обновления показывается тот же щит со знаком «!», что и в выборе режима в композере.

Значок:

  • не кликается, не открывает и не удерживает сессию — он только читает проекцию permissions.currentValue из уже загруженного списка;
  • скрывается вместе с остальными иконками строки, когда на строку наведён курсор или у неё открыто меню (так ведёт себя сам слот);
  • подписан в трёх локалях: ru, en, zh.

Установка

Плагин ставится в профиль как обычный пакет:

dsh plugin --profile desktop add github:VladikDragon/dsh-plugins

После установки добавьте его в dsh.profile.bundles профиля — через менеджер плагинов или вручную в ~/.dsh/profiles/<профиль>/package.json:

"dsh": {
  "profile": {
    "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-session-full-access-badge"]
  }
}

Локальная разработка — из клона:

git clone https://github.com/VladikDragon/dsh-plugins
dsh plugin --profile desktop add file:C:/path/to/dsh-plugins

Перезапуск приложения нужен только при добавлении нового пакета. Правки уже подключённого плагина подхватываются выключением и включением его строки в менеджере плагинов.

Как это работает

package.json        манифест: dsh.bundle.patch + dsh.client (platform web)
cordis.patch.yml    одна строка Loader с id session-full-access-badge
index.js            host-половина: пустой apply(), нужен только чтобы у плагина
                    была строка на стороне хоста
client.js           браузерный бандл: регистрирует ячейку в слоте
                    sidebar.session.row.trailing

Клиентская половина объявляется в package.json:

"dsh": {
  "client": {
    "platform": "web",
    "immediately": true,
    "inject": ["@deepseek-ai/dsh-client-ui-workspace"]
  }
}

inject обязателен: слот sidebar.session.row.trailing объявляет ui-workspace, и без этой зависимости регистрация пришлась бы на слот, которого ещё нет.

Слот

sidebar.session.row.trailing — список неинтерактивных иконок после времени строки и до маркера закрепления, сортировка по order. Плагин занимает его ячейкой full-access-mark с order: 10.

Владелец слота передаёт в ячейку sessionId, остальные хуки (useSessions и прочие) приходят стандартными пропсами. Плагин подписывается только на своё значение:

const preset = useSessions(
  (state) => state.byId[sessionId]?.projectionValues?.permissions?.currentValue,
)

Глиф

PermissionIconFullAccessRegular из @deepseek-ai/dsh-client-ui-primitives — тот же, что рисует выбор режима в композере, поэтому значок выглядит знакомым. Ячейка 16×20 px, глиф 14 px, цвет — токен --dsw-alias-label-secondary.

Локаль

Словари лежат прямо в client.js и регистрируются в namespace sessionFullAccessBadge:

ctx.locale.register('sessionFullAccessBadge', DICTIONARIES)

Ключ один — mark.label. Он уходит и в aria-label, и в title, поэтому значок читается скринридером.

Ограничения

  • Только веб-клиент (platform: "web"); в TUI значка нет.
  • Значок показывает текущий режим сессии: смена режима в композере обновляет строку без перезагрузки, потому что значение читается из проекции, а не из снимка.
  • Плагин ничего не пишет и не вызывает RPC — это чистая презентация.

Разработка

Сборки нет: client.js — обычный скрипт, который загружается загрузчиком модулей хоста и получает react и примитивы через require. Правки применяются перезапуском приложения.

Проверить, что слот существует и ячейка зарегистрирована, можно инспектором слотов (Slots → listSubTree с корнем sidebar.session.row.trailing).

Лицензия

MIT — см. LICENSE.

星级评价

0.0 按 GitHub Stars 换算的社区热度,非用户打分
Stars0
Forks0
待解决 Issue0
最近更新2026-11-11

基本信息

作者VladikDragon
版本1.0.0
开源许可MIT
默认分支main
入库时间2026-11-11

插件信息来自公开 GitHub 仓库与 SkillHub,版权归原作者所有;安装前请自行审查仓库代码。