New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

dsh-theme-plugin

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

dsh-theme-plugin

中国传统色 DeepSeek Harness 主题包 · Chinese traditional color themes for DeepSeek Harness

Source
npmnpm
Version
0.1.4
Version published
Weekly downloads
242
106.84%
Maintainers
1
Weekly downloads
 
Created
Source

dsh-theme-plugin

Chinese traditional colors as a DeepSeek Harness theme pack — 48 anchors × light/dark = 96 themes, each writing the full --dsw-* token vocabulary (89 tokens) and passing WCAG AA contrast checks (2208/2208 rows, 0 failures).

📖 中文文档

Install

npx -y @deepseek-ai/dsh plugin --profile web add dsh-theme-plugin@latest
npx -y @deepseek-ai/dsh --profile web          # boot → open http://127.0.0.1:3080/

That pulls the prebuilt bundle from npm — no clone, no build step. The web profile is created on first boot at ~/.dsh/profiles/web.

  • Verify: dsh --profile web --dump-config shows a theme-zhongguo row; the browser console logs registered 96/96 themes.
  • Update: run the same add command again (@latest).
  • Uninstall: dsh plugin --profile web remove dsh-theme-plugin

From source (development)

Requirements: Node.js 20+ (engines in package.json; pnpm test runs .ts directly and needs 23.6+) and pnpm.

git clone https://github.com/nevertoday/dsh-theme-plugin
cd dsh-theme-plugin
pnpm install && pnpm build                                # ① build lib/client.js (browser bundle)
dsh plugin --profile web add -w .                         # ② register ('.' = this directory)
dsh --profile web                                         # ③ boot → open http://127.0.0.1:3080/
  • ① pnpm install already builds once through its prepare script; the explicit pnpm build is a safety net (and required if you install with --ignore-scripts). It needs tsdown; fallback node scripts/build-esbuild.mjs (esbuild is already a devDependency). The repo ships an .npmrc with auto-install-peers=false — without it pnpm ≥ 9 cannot install: it tries to fetch the @deepseek-ai/* peers (even though all are marked optional), and the latest of dsh-client-runtime depends on a package that was never published to npm, so the install dies with ERR_PNPM_FETCH_404.
  • ② -w is required because the profile directory is a pnpm workspace root. add anchors relative specs like . to the directory you run it from. It links the directory (link: dependency) and auto-appends the package to dsh.profile.bundles; the loader reads lib/client.js straight from your working copy — step ① creates that file, so committing lib/ is not required (committing it is fine too; the cost is 553KB of output plus a 790KB sourcemap showing up as changes after every install).
  • Gates, no harness needed: pnpm check (2208 contrast rows plus invariants) and pnpm test (23 behavioral assertions, including a load-time lock on lib/client.js).
  • Update: git pull && pnpm install && pnpm build, then boot — no re-registration needed.

Usage

Open Settings → Traditional Colors (after "Agent presets" in the nav) and pick a theme — applies immediately. Or share/bookmark a deep link:

http://127.0.0.1:3080/#theme=zhuqing-light      # 竹青 light
http://127.0.0.1:3080/#theme=qunqing-dark       # 群青 dark

Changing the hash switches themes live. Your pick is remembered per browser (localStorage), not in settings.yaml — it does not follow you across devices.

Settings → Traditional Colors on 竹青 light: 48 anchors grouped by paper family, each row a swatch, a name, and a seal dot The same panel on 朱红 dark: it is themed by the pack itself, because its styles only reference --dsw-* tokens

The panel is themed by the pack itself — its styles reference nothing but --dsw-* tokens, so it doubles as a demo of the theme you are picking.

Design: Paper · Veil · Seal

Chinese painting does not start with color. It starts with preparing the paper, then washes over it, and signs last. These themes are built in the same order, and the three characters map onto three implementation layers.

  • 纸 Paper (layer A, ~60% of surface area) — the ground is not "the traditional color, lightened". It is a different material: four families (su juan raw silk, shu xuan sized paper, xue qing violet silk, zhe zhi ochre paper) each with their own lightness and chroma gates. The anchor is left as a trace, chroma clamped hard, so the ground reads as "this particular white (or black) is a little unusual". No two of the 96 themes share a background.
  • 帘 Veil (layer B, ~25%) — the sidebar and message bubbles are the anchor color itself, undiluted by paper, on their own chroma gate. You recognize which traditional color you are in by the bubbles, not by the background.
  • 印 Seal (layer D, <0.5%) — the primary button is deliberately not the anchor. It is a curated relative of it: green-blue paired with a vermilion seal, gold ground with an azurite one. The most saturated patch on screen is this one and only this one, so a single focus point comes for free. The generator records sealName / sealRel / sealWhy per theme.
  • Ink and empty space (layer C) — text, rules, and secondary surfaces run down one ink ramp (the paper color pushed darker). Every nb-XX reference from the base stylesheet becomes a tinted neutral N(XX) of the same lightness; hover offsets, elevation steps, borders, and interaction alphas are copied verbatim. Hue changes, relations do not.
  • Provenance — the generator distinguishes a named color (a traditional hex used directly) from a fallback (a value derived along OKLab lightness by ensure()), and records each in degraded. Current roster: bubble-chroma fallback in 18 themes, seal fallback in 10, across 27 themes total. Anchors that fail the AA assertion matrix are dropped whole, with the reason logged.

Anchor distribution across paper families: 素绢 12 · 熟宣 14 · 雪青 15 · 赭纸 7.

Theme roster

48 anchors × light/dark = 96 themes — click to expand

Display names are <name>·亮 / <name>·暗 (e.g. 竹青·暗). Paper families: 素绢 = raw silk, 熟宣 = sized xuan paper, 雪青 = violet-tinted silk, 赭纸 = ochre paper.

Color中文AnchorPaperSealTheme ids (light / dark)
Zhu Qing竹青#00A86B素绢茜红zhuqing-light / zhuqing-dark
Zhu Hong朱红#ED5126熟宣赭石zhuhong-light / zhuhong-dark
Qun Qing群青#1772B4雪青枫叶红qunqing-light / qunqing-dark
Teng Huang藤黄#FFD111赭纸绀青tenghuang-light / tenghuang-dark
Jiang Zi绛紫#8E354A熟宣洋葱紫jiangzi-light / jiangzi-dark
Zi Yun紫云#A020F0雪青蜻蜓红ziyun-light / ziyun-dark
Mei Hong Se玫红色#FF007F熟宣品红meihongse-light / meihongse-dark
Dan Shu Hong淡曙红#EE2746熟宣殷红danshuhong-light / danshuhong-dark
Gan Qing绀青#4F84FF雪青落霞ganqing-light / ganqing-dark
Mei Gui Zi玫瑰紫#BA2F7B熟宣高粱红meiguizi-light / meiguizi-dark
Ying Wu Lü鹦鹉绿#5BAE23素绢猩红yingwulv-light / yingwulv-dark
Bo Luo Hong菠萝红#FC7930熟宣芙蓉红boluohong-light / boluohong-dark
Fu Pen Zi Hong覆盆子红#AC1F18熟宣苋菜红fupenzihong-light / fupenzihong-dark
Cang Bi苍碧#2A52BE雪青猩红cangbi-light / cangbi-dark
Xiong Huang雄黄#FF9900赭纸绀青xionghuang-light / xionghuang-dark
Wei Zi魏紫#7E1671雪青魏紫·深weizi-light / weizi-dark
Gan Lan Huang Lü橄榄黄绿#BEC936素绢魏紫ganlanhuanglv-light / ganlanhuanglv-dark
Xin He Lü新禾绿#D2B116赭纸釉蓝xinhelv-light / xinhelv-dark
Huo Zhuan Hong火砖红#CD6227熟宣淡可可棕huozhuanhong-light / huozhuanhong-dark
Xiang Ye Hong香叶红#F07C82熟宣鹅冠红xiangyehong-light / xiangyehong-dark
Yan Ying Zi烟萦紫#8A4B9C雪青烟萦紫·深yanyingzi-light / yanyingzi-dark
Mei Ge韎韐#A5441B熟宣蟹蝥红meige-light / meige-dark
Li Shou綟绶#6B8E23素绢暗紫苑红lishou-light / lishou-dark
Zi Teng Luo紫藤萝#9B8AE8雪青紫藤萝·深zitengluo-light / zitengluo-dark
Han Xiu Lü汉绣绿#2E7D32素绢绛紫hanxiulv-light / hanxiulv-dark
Jin Zong金棕#B8860B赭纸柏林蓝jinzong-light / jinzong-dark
An Zi Yuan Hong暗紫苑红#82202B熟宣殷红anziyuanhong-light / anziyuanhong-dark
Xin Lü新绿#6CC788素绢茜裙xinlv-light / xinlv-dark
Ling Meng Hong菱锰红#D276A3熟宣苋菜紫lingmenghong-light / lingmenghong-dark
Man Tian Xing Zi满天星紫#2E317C雪青栗紫mantianxingzi-light / mantianxingzi-dark
Kong Que Lan孔雀蓝#0EB0C9雪青胭脂红kongquelan-light / kongquelan-dark
Mei Die Lü美蝶绿#12AA9C素绢枫叶红meidielv-light / meidielv-dark
Bian Dou Zi扁豆紫#A35C8F雪青扁豆紫·深biandouzi-light / biandouzi-dark
Qing Fan Lü青矾绿#2C9678素绢汉绣红qingfanlv-light / qingfanlv-dark
Bi Luo Chun Lü碧螺春绿#867018赭纸苍碧biluochunlv-light / biluochunlv-dark
Gan Lan Shi Lü橄榄石绿#B2CF87素绢酢酱草红ganlanshilv-light / ganlanshilv-dark
Fen Tuan Hua Hong粉团花红#EC9BAD熟宣锦葵红fentuanhuahong-light / fentuanhuahong-dark
He Ye Lü荷叶绿#1A6840素绢栗紫heyelv-light / heyelv-dark
Shi Lü石绿#57C3C2素绢银红shilv-light / shilv-dark
Zha Ye Zong柞叶棕#692A1B熟宣栗棕zhayezong-light / zhayezong-dark
Chang Chun Hua Lan长春花蓝#7EC0EE雪青香叶红changchunhualan-light / changchunhualan-dark
Shan Geng Zi山梗紫#61649F雪青满江红shangengzi-light / shangengzi-dark
Yan Lan鷃蓝#144A74雪青枣红yanlan-light / yanlan-dark
Fen Lü粉绿#83CBAC素绢梅红fenlv-light / fenlv-dark
Yu Qin Lan玉鈫蓝#126E82雪青赭石yuqinlan-light / yuqinlan-dark
Pi Bian皮弁#8B5D33赭纸石青pibian-light / pibian-dark
Gan Lan Lü橄榄绿#5E5314赭纸满天星紫ganlanlv-light / ganlanlv-dark
Dai Zi黛紫#5D3A6F雪青黛紫·深daizi-light / daizi-dark

The roster is whatever the generator emits — it is not maintained by hand. Re-export this table from the node scripts/generate-themes.mjs stdout summary.

Configuration

Under the plugin's row in cordis.yml:

config:
  defaultTheme: zhuqing-light   # theme applied at boot (optional)
  remember: true                # remember the pick in localStorage
  hashSelector: true            # honour #theme=<id> deep links
  settingsOrder: 40             # settings page position in the nav

License

MIT — see LICENSE.

Keywords

deepseek-harness

FAQs

Package last updated on 14 Aug 2026

Related posts