youyli03 / dsh-palenight-theme

목록에 있음

A dynamic Cordis plugin that themes the dsh Harness Web UI — Palenight dark + warm-neutral light

main도구 소스 보기

설치

npx -y @deepseek-ai/dsh plugin --profile web add github:youyli03/dsh-palenight-theme

이 설치 명령은 GitHub 저장소 주소에서 생성된 확인되지 않은 시작점입니다.

README

유지 관리자가 작성한 문서 스냅샷입니다.

GitHub에서 보기 ↗
커밋 94d2f61동기화 2026. 8. 18.

DeepSeek Palenight Theme

A theme for the dsh Harness Web UI, delivered in two forms:

  1. Persistent dsh bundle (recommended)package.json declares dsh.bundle.patch + dsh.client, so installing the package into a dsh profile makes the theme part of the host composition: it is served at /plugins/dsh-palenight-theme/client.js, listed in window.__DSH_BOOT__, and survives host restarts (same mechanism as @liustack/modlens).
  2. Dynamic Cordis plugin — the original form (plugin/client.js + plugin/host.js), activated per-session via cordis_define/cordis_run; it dies with the process and is only kept for reference.

Both forms stack a token layer over the active theme — no rebuild of the harness shell is needed.

  • Dark mode — Community Material Theme Palenight: indigo #292D3E surfaces, periwinkle text #A6ACCD, teal accent #80CBC4.
  • Light mode — warm neutral: parchment #F5F4F0, warm grey text #4F4B45, teal accent #00897B.
  • Code blocks get clear contrast in both modes.
  • ~100 theme variables covered (surfaces, tabs/headers, inputs, menus, text tiers, borders, buttons, interactive states, code, scrollbars).

Preview

LightDark
Light modeDark mode

How it works

The dsh web frontend exposes a theme client service. overrideTokens(source, tokens) stacks a per-token CSS-variable layer on top of the active theme:

theme.overrideTokens('deepseek-palenight-theme', {
  '--dsw-alias-bg-base': { light: '#F5F4F0', dark: '#292D3E' },
  '--dsw-alias-brand-primary': { light: '#00897B', dark: '#80CBC4' },
  // ... ~100 tokens total
})

The browser half (plugin/client.js) applies the layer and registers small UI (run-card panel, composer status line). The host half (plugin/host.js) registers two package-private RPC handlers (demo/ping, demo/hello) and a model-visible demo tool (demo_greet) to prove both halves are live.

Activation (persistent bundle form — survives restarts)

The package is a dsh bundle: package.json declares dsh.bundle.patch (its cordis.patch.yml row) and dsh.client (the web client bundle). Install it so the dsh profile can resolve it:

  1. Resolve the package from the profile. Either install it with pnpm in the profile directory (dsh plugin --profile web add dsh-palenight-theme, once published), or — for a local checkout — copy the package directory into the profile's dependency store and register it:
    • copy to ~/.dsh/profiles/node_modules/dsh-palenight-theme/
    • add "dsh-palenight-theme": "1.0.0" to dependencies in ~/.dsh/profiles/web/package.json
    • append dsh-palenight-theme to dsh.profile.bundles in the same file
  2. Restart dsh. The row - id: dsh-palenight-theme composes into the host tree, and the client-modules registry adds /plugins/dsh-palenight-theme/client.js to the boot manifest (dsh.client.platform: web, immediately: true).
  3. The theme applies at every boot. Switch dsh Appearance to Light/Dark/System — both palettes are themed.

To remove: drop the dependency and bundle entry, then restart.

Activation gate. The client bundle declares inject: ['theme'], so the plugin activates only after the theme service (provided by @deepseek-ai/dsh-client-ui-theme) is available. Do not remove it: with inject: [] the immediately: true bundle runs before ui-theme provides the service, ctx.get('theme') is undefined, and the token layer silently never applies.

Hot updates. dsh-client-hmr watches served bundle files, so replacing plugin/client-module.js (same package, new content hash) reaches the graph without a host restart.

Activation (dynamic form, deprecated — dies on restart)

  1. cordis_define a new Plugin (kind: new, any idPrefix), pasting plugin/host.js as code.host and plugin/client.js as code.client.
  2. cordis_run the returned pluginId/packageId (mode: run).
  3. Approve the browser-side cordis/request-run prompt (client code only runs after you approve it).
  4. The theme applies immediately. Switch dsh Appearance to Light/Dark/System — both palettes are themed.

To revert: cordis_stop <pluginId> restores the default theme and removes all effects (badge, cards, tools). cordis_undefine removes it permanently.

Repository layout

dsh-palenight-theme/
├── README.md            This file
├── README.zh-CN.md      中文说明
├── LICENSE              MIT
├── package.json         Bundle manifest: dsh.bundle.patch + dsh.client
├── cordis.patch.yml     Host row insert (- id: dsh-palenight-theme)
└── plugin/
    ├── client-module.js Persistent bundle: browser half (token layer only,
    │                    module protocol, inject: ['theme'])
    ├── host-module.js   Persistent bundle: minimal host row (no-op)
    ├── client.js        Dynamic form: browser half (theme + demo UI)
    └── host.js          Dynamic form: host half (RPC handlers + demo tool)

Notes

  • Both halves are plain JavaScript (no TS/JSX/import). The client uses React.createElement only.
  • Theme.listTokens exposes only 13 tokens; the frontend actually consumes ~100. overrideTokens accepts any token name (only the { light, dark } pair shape is validated), so the full set is overridable.
  • Dark palette values are taken from the Community Material Theme Palenight VS Code extension (equinusocio.vsc-community-material-theme-1.4.7), whose license governs those colors; the code here is MIT.

License

MIT — see LICENSE.

저장소 정보

언어
JavaScript
라이선스
MIT
마지막 업데이트
2026. 8. 15. 오후 12:55

신중하게 설치하기

소스 코드, 권한, 수명 주기 스크립트, 의존성 및 네트워크 접근을 검토하고 신뢰하지 않는 플러그인은 격리 환경에서 테스트하세요.