dsh-workbuddy
Wordless-style landing view for DeepSeek Harness (dsh).
Replaces the blank-session hero — the brand mark and the welcome workspace — with a warm, minimal landing panel modeled 1:1 on Wordless. The native dsh web composer (the dialog box) is never touched.

What it changes
| Slot | Kind | What you get |
|---|---|---|
conversation.hero.brand.mark |
single |
Lime logo tile + Manrope wordmark |
conversation.hero.workspace |
single |
44px headline, mode pills (日常办公 / 代码开发), scene chips, composer card + workspace bar |
conversation.composer.bar |
— | Untouched — the original dsh dialog stays |
Both target slots are kind: 'single', so the plugin uses ctx.slots.inject to supersede the shipped occupants rather than adding alongside them. Each slot is injected independently — inject waits for its slot to be declared, so chaining would couple the workspace occupant to the brand-mark slot's lifetime.
Install
dsh plugin add Austin-Patrician/dsh-workbuddy
Design
Tokens live in src/client/styles/tokens.module.css, scoped under .root with a --wb-* prefix so they never collide with dsh's own --dsw-* theme variables. Light and dark follow prefers-color-scheme.
| Token | Light | Dark |
|---|---|---|
| Workspace | #fbfbfa |
#1c1c1a |
| Sidebar | #f1f1ee |
#262624 |
| Accent | #ccf257 |
#ccf257 |
| Chip selected bg | #eef4dc |
#2b3316 |
Type is Manrope for headlines/UI and DM Mono for meta. Category glyphs are the original Wordless SVG paths, copied verbatim.
Layout
src/
index.ts host loader (no-op, browser-only plugin)
invariant.ts package-owned invariant companion
client/
index.ts slot registration
BrandMark.tsx conversation.hero.brand.mark
HeroWorkspace.tsx conversation.hero.workspace
SceneChips.tsx mode-scoped entry chips
locales.ts zh / en dictionaries (namespace `workbuddy`)
icons.tsx inline SVG
styles/ CSS Modules + design tokens
tests/
browser-plugin.client.spec.tsx
invariant.client.spec.ts
Development
npm install
npm run typecheck
npm run test
npm run lint
License
MIT
No comments yet. Be the first to write one.