dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
8-bit / CRT skin for the DeepSeek Harness web GUI.
An out-of-tree web client plugin for DeepSeek Harness. It keeps the host untouched and layers a full pixel-art treatment over the built-in light and dark themes.
New session
In conversation, mid-work
Switchable palettes
Order: retro green · cyberpunk · sunset arcade · mono terminal.
Screenshots use the pixel skin with Font mode → Pure pixel enabled.
The working screenshot shows the conversation flow with Think and Bash tool rows.
ctx.theme.overrideTokens API.Fusion Pixel 12px Proportional SCFusion Pixel Latin subset + modern CJK fallbacks (PingFang SC / Microsoft YaHei)Fusion Pixel 12px Monospaced SClightningcss options as the harness build.bash, json, ts, …)retro — green Game Boy / CRT (default)cyberpunk — neon magenta + cyansunset — warm sunset arcademono — monochrome terminallocalStorage; controls master on/off, palette swatches, scanlines, cursor, vignette, and font mode.prefers-reduced-motion aware — animations are disabled when the OS requests reduced motion.| Mode | UI chrome | Long-form body | Code |
|---|---|---|---|
hybrid (default) |
Pixel proportional SC | Pixel Latin + modern CJK | Pixel monospaced SC |
pure |
Pixel proportional SC | Pixel proportional SC | Pixel monospaced SC |
Switch between them in Settings → General → Pixel skin → Font mode.
deepseek-harness reachable at ../deepseek-harness from this repository, or set DSH_REPO when building.lib/client.js artifacts) before the skin build scans their CSS Modules. In practice, a normal pnpm run build in the harness repo is enough.cd dsh-pixel-skin
npm run build
# If the harness checkout lives somewhere else:
DSH_REPO=/path/to/deepseek-harness npm run build
The build generates:
src/client/font-data.ts — base64-embedded Fusion Pixel fontssrc/client/literal-font-patches.ts — hash-scoped readability patches for the current harness checkoutsrc/client/pixel-favicon.ts — official favicon rasterized to a 32×32 gridsrc/client/structural-patches.ts — hash-scoped selectors for composer, stats line, and context ringlib/index.js — empty host plugin halflib/client.js — browser skin bundleRebuild the skin after pulling a new harness version or rebuilding its web packages.
After rebuilding, refresh the local web profile copy:
npm run refresh
This is required because pnpm installs file: profile dependencies as a copy,
not a symlink.
The package is a plain plugin, not a bundle.
dsh plugin --profile web add /absolute/path/to/dsh-pixel-skin
Then add to $DSH_HOME/profiles/web/cordis.patch.yml:
- insert:
- id: dsh-pixel-skin
name: dsh-pixel-skin
Restart and refresh:
dsh --profile web
Remove the insert block from cordis.patch.yml, then:
dsh plugin --profile web remove dsh-pixel-skin
dsh-pixel-skin/
├── assets/
│ ├── dsh-pixel-icon.svg # GitHub / favicon source
│ ├── fonts/ # OFL-1.1 Fusion Pixel woff2 files
│ └── screenshots/ # README screenshots
├── scripts/
│ ├── build.mjs # font embedding + CSS-module patch generator
│ └── pixelate-favicon.mjs # official favicon → 32×32 grid rasterizer
├── src/
│ ├── index.ts # empty host half
│ └── client/
│ ├── index.ts # plugin entry
│ ├── palette.ts # token overrides + font scale
│ ├── skin-style.ts # global skin CSS
│ ├── pixel-details.ts # pixel surface/details CSS
│ ├── settings.ts # localStorage settings
│ ├── settings-row.ts # Settings → General row
│ └── settings-row.module.css
└── lib/ # built artifacts
The skin embeds the Fusion Pixel font family by TakWolf:
Fusion Pixel 12px Proportional SCFusion Pixel 12px Monospaced SCAll font files are licensed under the SIL Open Font License 1.1. See THIRD_PARTY_NOTICES.md and assets/fonts/LICENSE.fusion-pixel.txt.
The plugin code is licensed under MIT.
deepseek-harness source tree.--dsw-* theme tokens; the skin never hard-codes a palette that bypasses light/dark resolution.deepseek-harness checkout (DSH_REPO can override the location).npm run build and npm run refresh again.dsh web process keeps its old plugin copy in memory; restart it after npm run refresh.lib/client.js. They perform no network requests and are decoded by the browser only when a glyph is rendered; splitting them further is possible but not currently necessary.CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。