dsh-official-group-guard
Manifest validHide the DeepSeek official model group in the dsh UI unless a Konami code is entered / Default hide the dsh official model group, show it after entering the Konami code
dsh-official-group-guard
English | 中文
Hide the DeepSeek official model group in the dsh UI by default; press ↑↑↓↓←→←→BA to reveal it.
Why
On an intranet deployment the DeepSeek official models are often a personal route (e.g. relayed
out through a workstation). Colleagues should not see or pick them, while the owner still needs
them. This plugin keeps the official group hidden and reveals it only in the browser where the
Konami code was entered. Nothing under node_modules is touched and there is no server-side
change — same injection technique as dsh-download-button / dsh-force-motion.
What it covers
| Surface | Behaviour |
|---|---|
| Composer model picker | Hides the official group; keeps it visible when the current session already runs an official model (otherwise you cannot see your own selection) |
| Settings → Models page | Hides the official provider row |
Install
dsh plugin --profile web add github:maxesisnclaw/dsh-official-group-guard
Then restart dsh.
Usage
- By default the official group is not rendered.
- Press ↑ ↑ ↓ ↓ ← → ← → B A on the page → revealed (a small toast confirms). The state lives in
this browser's
localStorageunderdsh.official-group.visible. - Press again to hide.
- Skip the code: run
localStorage.setItem('dsh.official-group.visible','1')in the console and reload.
How it survives upgrades
dsh's CSS-module class names look like <hash>_group / <hash>_rowCard: the hash changes between
builds but the key suffix does not, so selectors match on the suffix ([class*="_group"] plus an
exact classList suffix check) and a MutationObserver re-applies after every render.
Iterating on the injected UI
The injected style/script lives in an external file client.html, read per index request (mtime
cached): edit it and hard-reload the browser — no dsh restart needed. Only changes to the plugin
code itself (index.js / cordis.patch.yml) require a restart. Override the path with
DSH_OFFICIAL_GROUP_GUARD_CLIENT.
Known timing issue and how it is handled
The picker stores its measured position in component state (style: menuPos ?? MEASURE_STYLE), and
the option data (title) can arrive after the first paint — hiding after that measurement shows up
as a floating menu. So the CSS has two paths (option-title match plus a JS data-dsh-ogg tag) and
dispatches resize whenever the hidden set changes so the component re-measures (it listens to
resize/scroll), plus a few extra re-applies on the frames right after the menu appears.
Boundary (important)
This is visual occlusion, not access control: the catalogue still reaches the browser (visible in devtools) and the server is unchanged. Real restriction has to happen server-side (e.g. an egress relay that only accepts requests under specific conditions).
License
MIT
Comments
Loading…
From the same category
by awesome-dsh-plugin
A curated list of plugins for DeepSeek Harness (dsh) · DeepSeek Harness 插件精选列表
★ 17.7k
CC0-1.0
Python
Oct 1, 2026
by 0xsline
DeepSeek Harness (DSH) ecosystem: curated plugins, tools, and infrastructure from dsh-external/hub and the public dsh-plugin topic.
★ 1.1k
CC0-1.0
Python
Sep 30, 2026
by pax-beehive
Open-source CLI, schemas, resolver, and DSH agent tools for DSH Plugin Hub
★ 458
MIT
TypeScript
Sep 22, 2026
by yjh051108
推荐组件(非必须):DeepSeek Harness 运行时注入器;已随 dsh-routing-suite 单仓库化保留,本仓库继续维护/发布。
★ 167
TypeScript
Sep 18, 2026
dsh plugin --profile web add @dsh-external/dsh-super-injectorby xiajiajun516
DeepSeek Harness (DSH) backup & restore plugin — export, import, migrate and sync your complete DSH configuration, plugins, MCP servers, skills and workspace. One-click migration to another machine.
★ 150
MIT
TypeScript
Sep 30, 2026
dsh plugin --profile web add dsh-config-managerby jigjoy-ai
A CLI that turns a goal into a pull request - and a sandbox for testing concurrent AI coding agents on the Mozaik runtime.
★ 124
MIT
TypeScript
Oct 2, 2026