xiajiajun516
dsh-settings-organizer
Low-intrusion Settings presentation layer for DeepSeek Harness (DSH): group plugins, hide settings, search and restore - additive client-slot + settings-namespace seams.
- Stars
- 1
- Language
- TypeScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
🧰 DSH Settings Organizer
A low-intrusion Settings presentation layer for DeepSeek Harness (DSH): group, hide, search and restore your settings — without ever changing another plugin's configuration.
✨ Highlights
| Icon | Feature | In one line |
|---|---|---|
| 🗂️ | Group by plugin | Every plugin's settings render as one collapsible group |
| 🎚️ | Collapse / expand | Per-group, state persisted across restarts |
| 🙈 | Hide anything | Hide a single field or a whole plugin's settings |
| 🔍 | Search | Matches label / key / path / plugin name / description; ignores collapsed state |
| ↩️ | Manage Hidden | Restore one field, one plugin, or everything in one click |
| 🧹 | Zero side effects | Never edits other plugins; uninstall leaves no trace |
🚀 Quick start (30 seconds)
1️⃣ Install the plugin (one command — see below)
2️⃣ Restart DSH
3️⃣ Open Settings → "Settings Overview"
4️⃣ Collapse groups you don't care about → search → hide noise → done
📥 Installation
dsh plugin --profile web add dsh-settings-organizer@latest --config.auto-install-peers=false
💡
--config.auto-install-peers=falseskips a few DSH core packages that aren't on the public registry — the DSH runtime provides them.
🐛
@latestresolves an old version? That's pnpm 11'sminimumReleaseAgesupply-chain policy (versions younger than ~30 days are excluded from resolution). Install an exact version once — it auto-whitelists, then@latestworks:dsh plugin --profile web add dsh-settings-organizer@0.1.1 --config.auto-install-peers=falseOr disable the age gate entirely by adding
minimumReleaseAge: 0at the top of the profile'spnpm-workspace.yaml(PowerShell one-liner):$f = "$env:USERPROFILE\.dsh\profiles\web\pnpm-workspace.yaml" $c = Get-Content $f -Raw if ($c -notmatch '(?m)^minimumReleaseAge:') { Set-Content -LiteralPath $f -Value ("minimumReleaseAge: 0`n" + $c) -Encoding utf8 Write-Output "已添加 minimumReleaseAge: 0" } else { Write-Output "已存在,无需修改" }
🧩 What it does
Registered as a new, additive Settings section ("Settings Overview") plus a header "Manage Hidden" action:
- Plugin groups — each settings namespace (
ns) fromsettings.describe()renders as one collapsible group. - Collapse / expand — per-group, with the collapsed state persisted.
- Hide a single setting — removes one field from the overview (pure presentation).
- Hide a whole plugin — hides every field of a namespace group.
- Search — matches label / key / path / plugin name / description; search ignores collapsed state, and a hidden item that matches shows a "Hidden · Restore" hint — it is never auto-unhidden.
- Manage Hidden — a header action opening a modal that restores a single hidden field, a whole hidden plugin, or everything.
🛡️ Safety guarantees
- Hiding ≠ disabling ≠ deleting. Hiding only edits our own persisted presentation lists — another plugin's config is never updated, replaced, or unregistered.
- Removable with zero residue. Everything this plugin registers lives on its own cordis fiber; disabling/removing it restores DSH stock settings pages exactly.
- No DSH Core surgery. No DOM monkey-patching, no fragile CSS selectors, no private-state manipulation — only the official
settings,settingsScopeandslotsseams. - Robust to bad state. Invalid persisted data is sanitized before it reaches the view — it can't crash or miswrite.
🔄 Compatibility
- DSH web profile with the settings domain (
dsh-client-ui-settings/ the-generalshell), client runtime/slots and the locale plugin. - Peer packages:
@deepseek-ai/dsh-client-*^0.1.0-rc.6,@deepseek-ai/cordis^4.0.1,react^18.2.0.
❓ FAQ
Q: Does hiding a setting change its value? No. Hiding only edits this plugin's own presentation lists; the setting's value and its owning plugin's config stay untouched.
Q: Will uninstalling the plugin break my settings? No. Everything is registered on the plugin's own cordis fiber and disposed on removal — other plugins' pages return to DSH stock.
Q: Is the collapsed state saved?
Yes — persisted in the shared settings document (~/.dsh/settings.yaml) under this plugin's own namespace.
Q: Can search unhide things? No. A hidden item is never auto-unhidden — you'll see a "Hidden · Restore" hint and restore deliberately.
Q: Does it work if I have a lot of plugins? Yes — groups are lazy-rendered by namespace; collapse hides the noise, search finds anything instantly.
📋 Known limitation
Hiding applies to the overview page only: DSH has no per-field renderer inside other plugins' own Settings pages, so a field hidden here still appears on its owner's page. Hiding outside the overview would need an optional Core extension point (see docs).
👩💻 For developers
- DEVELOPERS.md — build / typecheck / the tag-triggered auto-publish pipeline (npm via OIDC trusted publishing + GitHub Release with auto notes).
- Spec & architecture —
docs/dsh-settings-tidy.md,docs/phase-a/architecture.md,docs/phase-a/rfc-option-c-section-filter.md(hard invariants, mounting & packaging, state model).
📄 License
MIT — see LICENSE.