Repository navigation
Releases: kjx-talesofai/dsh-plugin-theme-workbench
Release list
v0.1.3 — the onboarding flow and the toolbar veils
Two surfaces the theme had left on the shipped cool palette, now derived from it.
Install
Add plugin → github:kjx-talesofai/dsh-plugin-theme-workbench#v0.1.3, then restart the desktop app.
Added
The onboarding flow. Its accent and its three gradient ramps are declared once upstream with no dark twin, so they kept their violet/blue/cyan on warm paper in both modes; the card fills had dark twins but cool ones (#2c2c2e 80 %, #48494c). All body-level, so all reachable — this was a coverage gap, not an impossibility.
- the accent is the theme's own;
- the three ramps are three rotations of that accent's hue (−20° / 0° / +20°), sampled at three OKLab lightnesses and gamut-mapped, at each token's shipped stop geometry. Upstream they are three hues because they are three selectable cards; this keeps them tellable apart without importing colours the theme does not own;
- the frosted card veil is re-sampled from the canvas, still translucent for the 32 px backdrop blur.
The toolbar veils (-fill, -hover, -fill-invisible). They were a single mid-grey in both modes (#54555780 / #54555799 / #1f1f1f5c) — a cool pill on warm paper, and close to invisible on a dark canvas. They are now the theme's ink mixed toward its canvas, so they follow the mode.
Not added, on purpose
--dsw-alias-code-diff-* and --dsw-alias-file-diff-*-bg. Those hues mean added/removed, the shipped values are already mode-aware, and the audit measured no readability or adaptation defect in them. Re-hueing a semantic green for warmth would trade meaning for decoration.
Verified
macOS (Apple Silicon) + DSH Desktop 0.2.0-rc.2, in a real profile. 49 tests (was 46), green on a bare checkout with no install step. The new assertions were mutation-checked: a collapsed ramp rotation, the shipped toolbar constant, and a veil stripped of its alpha each fail the suite.
v0.1.2 — the washes, solved
Two chips the theme was rendering illegibly, and the audit that found them.
Install
Add plugin → github:kjx-talesofai/dsh-plugin-theme-workbench#v0.1.2, then restart the desktop app.
Fixed
The three state washes were the last values in the palette still derived from a fixed fraction (12 % / 22 %) instead of solved — and each of them carries more than one colour, which is what a per-colour solve misses:
| wash | worst pair | was | now |
|---|---|---|---|
state-success-tertiary |
.success, the connection indicator |
4.21–4.48:1 in light mode under every theme | 4.60:1 |
state-warn-tertiary |
.warning under novel |
4.43:1 | 4.60:1 |
state-business-tertiary |
the plan chip | 3.70:1 | 4.60:1 |
The approval strip, the connection indicator, the install-safety note and an inherited label all sit on the warn wash, and which one binds differs by mode — so the wash is now solved against the whole set at once, and every one of them clears WCAG AA.
Added
tools/audit-contrast.mjs — the archive-wide audit that found these. It mines every rule in 0.2.0-rc.2 that paints a colour on a background and re-measures it under all ten palettes, which is the open-world complement to npm test: a test can only check a pairing someone already knew about. docs/readability-audit.md records the method, the coverage (207 of 454 such rules measured, 221 skipped as gradients/resets) and the results.
The result worth quoting: of the 1,820 pair-instances where the shipped palette reaches 4.5:1, zero are below it under any theme, in either mode — and no theme falls below a floor its siblings clear. One real finding is reported and left open: a dark-mode error fill under a hardcoded white icon, where every value that fixes the icon costs a pair that currently passes.
Verified
macOS (Apple Silicon) + DSH Desktop 0.2.0-rc.2, in a real profile. 46 tests, green on a bare checkout with no install step.
v0.1.1 — the invisible Recommended chip
The question card's "Recommended" chip was invisible: its label and its background were both the accent.
Install
Add plugin → github:kjx-talesofai/dsh-plugin-theme-workbench#v0.1.1, then restart the desktop app.
Fixed
.y21zpG_badge (ui-user-questions) paints background: sidebar-nav-item-active-accent; color: button-info-fill at 11px/600, and this plugin points button-info-fill at the accent itself. The background was derived independently — a 12–22 % mix of the accent into the sidebar, which is still essentially the accent — so the label sat at 1.25–1.53:1 in all five themes and both modes. Not faint: invisible.
The archive has exactly one consumer of that token, so the fix goes there rather than on the text side: button-info-fill is a real fill, with ui-conversation painting a white-text primary button in it. It is now the largest tint of the accent that still leaves the accent legible on it — the same solve state-business-tertiary already used — which lands at 4.50–4.54:1 everywhere. The shipped palette's own light pairing reaches 3.60:1.
Verified
macOS (Apple Silicon) + DSH Desktop 0.2.0-rc.2, in a real profile. 46 tests, green on a bare checkout with no install step.
Theme Workbench 0.1.0
Five themes for the DeepSeek Harness Web client. Each ships a light and a dark palette, and your light / dark / system setting still chooses between them.
Cream (default) · Novel · Calm · Modern Classic · Deep Work
Install
dsh plugin --profile desktop add github:kjx-talesofai/dsh-plugin-theme-workbench#v0.1.0Restart to load the Host half, then open Settings → General → Theme. Changing the theme afterwards needs no restart and no refresh.
What makes it behave
ctx.theme.overrideTokens, notregister.registerputs a theme in the registry, butsetThemeonly persists ids inside the built-inlight | dark | systemunion — so a registered third-party theme stays invisible to the shipped picker and loses its selection on restart. Stacking a token layer over the active built-in theme avoids both, and lets the OS scheme keep choosing the mode. Each theme therefore ships two palettes.- A real Host preference, not
localStorage: the Host half declares a.volatile()Config field and the browser half reads it throughctx.configForms, so it lands incordis.patch.yml. - The chosen palette renders first, because the persisted id is pushed into every index render as a
globalrow rather than waiting for the settings scope. - Light mode steps down. Cards, composer, sidebar, code blocks and bubbles are slightly darker than the page; only menus and popovers sit above it. A raised sheet is shadowed, and at L* 97–99 there is almost no sRGB room left for chroma, so a lighter warm surface is white by force of the colour space. Dark mode inverts the direction.
- Text tiers and semantic states are solved, not inherited. The built-in states are tuned for
#ffffffand measure 1.94:1–4.06:1 on cream; each theme supplies warm-paper equivalents. Text tiers meet or beat the built-in ladder, and the focus ring clears 4.5:1 on all sixty surface pairs. - Three seeds per theme — canvas, ink, accent — from which all 108 tokens are derived, so a theme cannot drift out of its hue or lose its warmth.
45 tests pass on a bare checkout; CI is green on Node 22 and 24. The three design references behind the numbers — docs/token-inventory.md, docs/surface-map.md and docs/design-notes.md — are in the repo and deliberately not shipped. Known limits (the macOS sidebar is native vibrancy and only tints; shadow recipes are re-declared per element) are documented in the README.