dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
A DeepSeek Harness web plugin that replaces the font settings in general settings with searchable font pickers.
English | 中文
A DeepSeek Harness web plugin that replaces the font settings in Settings → General with searchable font pickers: text, code, and terminal fonts are set independently, and the fonts installed on your machine can be listed on request.
The shipped rows ask you to type a comma-separated font name from memory. This plugin shows you the list instead — and draws every candidate in its own face, so you pick by sight.
queryLocalFonts; where it is unsupported or denied, the button says so and everything else keeps working). The catalog is searchable rather than dumped: type part of a family name and its matches are listed.The plugin installs as a profile bundle. Use the Web sidebar's Plugins page, or the plugin_manager tool's install_bundle (it requires danger-full-access). The spec can be a git address, a local path, or a registry name:
https://github.com/yiqiuacc/dsh-font-settings.git (the manager runs git ls-remote against GitHub before installing; pnpm's github:yiqiuacc/dsh-font-settings shorthand works too).link:<absolute path to this directory>.@styiqiu/dsh-font-settings.Installing enables the bundle by default. Opening Settings → General then shows one "Font settings" row where the built-in font group used to be.
The plugin owns no storage and no stylesheet. Every read and write goes through the harness theme service (ctx.theme), so the shipped machinery does the rest:
ui-theme config row of its cordis.patch.yml.--dsh-font-family-<role> onto body as inline styles, and the token sheet composes the interface and code stacks from them.Because both surfaces read one store, this plugin's choices and the built-in font rows are always the same data. (Once installed, the built-in rows are not rendered — they are shadowed, see below.)
client.js is the whole plugin. It registers one entry in the General section's item slot using the built-in entry's id at a lower priority, which shadows that entry: a list slot renders one row per id and the lowest priority wins. The group replaces the built-in font rows rather than sitting beside them.Input, MenuSurface, and MenuGroup from @deepseek-ai/dsh-client-ui-primitives, a client baseline module — so the shared field geometry, menu material, sticky group headings, and focus behavior come from the harness rather than from this plugin.theme service is taken through a scoped injection (ctx.inject(['theme'], …)). Where that service is absent, the plugin registers nothing at all: the built-in font settings keep their place and the plugin is simply inert. The outer plugin never waits on the service, so a composition without it still boots.index.js is an empty mount shell (export function apply() {}). A profile bundle needs a mountable Host plugin for the Loader row to exist, and the browser bundle is discovered from that live entry — but this plugin has no Host-side behavior left.0.2.x web (and Desktop, which uses the same web profile template).ctx.theme is a pre-stable API: the harness states that public APIs can change, so a harness upgrade may require updating this plugin.font-size. If a future harness renames that entry, the shadow stops applying and this group renders beside the built-in font rows instead of replacing them — duplicated controls, no crash and no error.There is nothing to build and nothing to install.
client.js and reload the page — the client bundle is fetched per page load.index.js (the mount shell) needs a server restart.README.zh.md is the Chinese counterpart of this file.