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.2.3
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 — 49 anchors × light/dark = 98 themes, each writing the full --dsw-* token vocabulary (89 tokens) and passing WCAG AA contrast checks (2254/2254 rows, 0 failures). The picker opens on a curated shortlist of 12.

📖 中文文档

竹青 light: raw-silk paper, a green veil on the bubble, and the send button in the anchor green itself 朱红 dark: sized-xuan paper in warm ink, a maroon veil, and a vermilion send button
群青 light: violet-silk paper, a blue veil, and a blue send button 藤黄 dark: ochre paper in olive ink, an olive veil, and a gold send button

竹青 · light(素绢)  |  朱红 · dark(熟宣)
群青 · light(雪青)  |  藤黄 · dark(赭纸)

One anchor per paper family. In every one of them, the most saturated patch on screen is the color you picked.

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 98/98 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 (2254 contrast rows plus invariants) and pnpm test (46 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: the curated shortlist first, then every anchor grouped by paper family; each row shows the theme's actual paper / veil / focus The same panel on 藤黄 dark: it is themed by the pack itself, because its styles only reference --dsw-* tokens

Each row's chip is the theme's real paper, veil and focus — not the anchor swatch at full chroma. The line under the current theme names the seal and why it was picked (茜红 · 策展印 · 冷暖对冲).

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), and their chroma is deliberately spread — roughly 0.010 / 0.015 / 0.019 / 0.024 in OKLab — so the four papers are told apart by eye, not only in the data. The ground sits at L ≈ 0.966–0.970, off-white rather than white, which is what leaves room for a raised surface above it. No two of the 98 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, held inside a band (1.25–1.55 against the paper) so the wash can neither vanish nor harden into a slab. You recognize which traditional color you are in by the bubbles, not by the background.
  • 印 Seal (layer D) — the focus is the anchor itself. The primary button and the send button are the anchor pressed darker; the curated relative retreats to the active-nav accent, i.e. a signature rather than a focus. This reverses the pack's original law (the seal used to fill the primary button, a median 109° away from the color you picked — so choosing 竹青 gave you a crimson CTA). The generator still records sealName / sealRel / sealWhy per theme, now for that signature mark.
  • 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 — with one deliberate exception: the ramp's endpoints are set here rather than inherited, because the base stylesheet's are the extremes. Light and dark now share one shape (body 16.9–17.5 / secondary ≈ 7.4–8.0 / tertiary ≈ 4.6–5.5), matching the colour studio's own --ink / --ink-soft / --muted.
  • 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. Anchors that fail the AA assertion matrix are dropped whole, with the reason logged. Run pnpm generate for the current tally.
  • 精选 Curated — 12 of the 49 anchors are flagged curated and shown first in the picker. The list is derived, not hand-kept: the CURATED names that survive the gates, topped up by farthest-point sampling in OKLab so the shortlist spreads across the space instead of clustering.

Anchor distribution across paper families: 素绢 11 · 熟宣 14 · 雪青 18 · 赭纸 6.

Theme roster

49 anchors × light/dark = 98 themes — click to expand

⭐ marks the 12 curated anchors the picker shows first. 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
Hu Po Huang琥珀黄#FEBA07赭纸绀青hupohuang-light / hupohuang-dark
Wei Zi魏紫#7E1671雪青魏紫·深weizi-light / weizi-dark
Gan Lan Huang Lü橄榄黄绿#BEC936素绢魏紫ganlanhuanglv-light / ganlanhuanglv-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
An Zi Yuan Hong暗紫苑红#82202B熟宣殷红anziyuanhong-light / anziyuanhong-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
Bao Shi Lan宝石蓝#2486B9雪青朱墙baoshilan-light / baoshilan-dark
Mei Die Lü美蝶绿#12AA9C素绢枫叶红meidielv-light / meidielv-dark
Bian Dou Zi扁豆紫#A35C8F雪青扁豆紫·深biandouzi-light / biandouzi-dark
Qian Zi Teng Luo浅紫藤萝 ⭐#D1B3FF雪青杏子qianzitengluo-light / qianzitengluo-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
Luo Lan Zi萝兰紫#C08EAF雪青萝兰紫·深luolanzi-light / luolanzi-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