DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Plugin Ui Font Family — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-plugin-ui-font-family

Plugin Ui Font Family

DeepSeek Harness 网页插件:在 General 设置中提供一个 Font 行,包含四个内置预设、运行 dsh 的机器上已安装的字体,以及此部署向每个已连接浏览器提供的字体文件

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add dsh-plugin-ui-font-family@0.4.0
README兼容性版本
The Font row in General settings

兼容性与来源证明

Plugin Ui Font Family 以 dsh-plugin-ui-font-family 发布,当前版本为 0.4.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/9/17

版本

0.4.0stable
2026/9/17
0.3.0stable
2026/9/16

相关插件

正在加载相关插件…

最新版
0.4.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
380.9 kB
文件数
59
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
0
最近提交
2026/9/17
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

README


description: "A Font row in the dsh Web GUI General settings: four built-in presets, the fonts installed on the machine running dsh, and font files this deployment serves to every connected browser." kind: "package-bundle"

dsh-plugin-ui-font-family

English | 中文

Summary

The Font row in General settings changes the font the interface and the conversation use. Users pick one of four presets, search the fonts installed on the machine running dsh, or upload font files that this deployment then serves to every connected browser. A choice applies immediately and persists. The package installs as a profile bundle: dsh plugin --profile web add dsh-plugin-ui-font-family adds the row, and removing the package removes it. Code blocks keep the harness's own monospace stack.

Table of Contents

  • Use this package
  • Understand the implementation
  • Further Exploration
  • Model Experience
  • Known Limitations and Deferred Work

Use this package

Install into a profile

dsh plugin --profile web add dsh-plugin-ui-font-family
dsh plugin --profile web remove dsh-plugin-ui-font-family

The package declares dsh.bundle.patch, so add records it in the profile's dsh.profile.bundles and applies its layer, which inserts the ui-font-family row into the composition. Restart dsh web and the row appears in Settings → General, under Font size.

Installing from npm uses the published artifacts. Installing from a git ref or a source directory builds the package on that machine, and pnpm blocks the build script until the profile's pnpm-workspace.yaml allows it; follow the allowBuilds line the first attempt prints.

What you get

  • The Font row opens the picker: presets, uploaded fonts, and the fonts installed on the machine running dsh, with a search field and per-row previews drawn in the font each row names.
  • The management dialog uploads fonts (.ttf .otf .woff .woff2 .ttc, 20 MiB each by default), deletes them, and shows the directory uploaded files live in.
  • The installed stack places the chosen families ahead of the stack the harness declares for itself, so text the chosen font cannot draw falls back to the harness's own faces. Code blocks keep the monospace stack.

The Font row in General settings

The font picker

Configuration

Fields are optional and belong in the profile's own $DSH_HOME/profiles/web/cordis.patch.yml:

- id: ui-font-family
  config:
    defaultFamily:
      source: preset
      id: serif
FieldDefaultMeaning
fontDir$DSH_HOME/fontsDirectory holding uploaded fonts.
dshHome$DSH_HOME, then ~/.dshOverrides the harness home this package resolves paths against.
systemFontDirs[]Extra directories to scan, after the platform's own.
scanSystemFontstrueScans the platform directories; the directories named in systemFontDirs are still scanned.
maxUploadBytes20971520Largest accepted upload, in bytes. The page refuses a larger file before reading it.
defaultFamily{ source: preset, id: default }Font used until a user chooses one, and what "restore default" returns to.

defaultFamily.source is preset, system, or upload, with id naming a preset, a CSS family name, or a stored font. A user's own choice always wins over it. A value this package cannot act on — a non-integer limit, a preset id this build does not ship — fails at load rather than at first use.

Where uploaded fonts are stored

$DSH_HOME/fonts, which is ~/.dsh/fonts by default, next to settings.yaml. The management dialog shows the path in use.

  • One directory to back up, migrate, or delete; nothing is stored in the browser.
  • Copying a font file into it works without the settings page, and so does deleting one.
  • A stored file is named <family>-<16 hex characters>.<extension>; the extension follows the bytes, not the uploaded name. A write stages its bytes and renames them into place.
  • Fonts served to a browser come from the machine running dsh, so every browser connected to this deployment can use them.

Uninstall

dsh plugin --profile web remove dsh-plugin-ui-font-family

That removes the row and stops serving the fonts. Two things stay behind:

  • Uploaded files in $DSH_HOME/fonts. Delete that directory to remove them, or keep it and install the package again later.
  • The saved selection in $DSH_HOME/settings.yaml under ui-font-family. It is inert without the package and can be deleted with it.

Fonts when the Host runs elsewhere

The installed-font list describes the machine running dsh and is served only to requests from that machine, so a browser on another machine gets no system group. Remote users can still choose an uploaded font, and a deployment can set defaultFamily to a system family name that exists on the browser's own machine: the Host validates the name for safe output, not for presence.

A reverse proxy running on the Host's machine makes remote requests arrive from a local address, which counts as the same machine. Withhold the installed-font list from such a deployment by setting scanSystemFonts: false.


Understand the implementation

Implementation internals — click to expand

The package has a Host half and a browser half, joined by package.json (dsh.client and the ./client export). The Host registers the settings section, scans font directories, answers the HTTP routes, and injects the pre-plugin row; the browser renders the settings row and projects every change onto the document.

PathRole
src/index.tsHost plugin body: config resolution, the settings section, the index-injection row, route registration.
src/font-routes.tsCatalogue, download, upload, and delete routes, with the same-origin and same-machine rules.
src/user-fonts.tsThe upload directory: storing, listing, and deleting files, with a per-file identity cache.
src/system-fonts.tsThe installed-font index: platform directories, a bounded concurrent scan, and the same identity cache.
src/font-selection.tsResolving a selection to families and placing them ahead of the harness stack; shared by both halves.
src/font-settings.ts, src/font-settings-schema.tsThe settings namespace, the family-name rule, and the schema the Host registers.
src/boot-font.ts, src/font-face.tsThe pre-plugin row and the @font-face block written into the served page.
src/client/The row, picker, management dialog, runtime, and the theme token layer that installs the stack.

Two decisions shape the rest. The boot row declares @font-face for the selected stored font only, because an index response cannot wait for a file read and the browser half declares the rest from the catalogue it reads on mount. Family names come from font files and from the settings document, so a character rule gates every name before it reaches the stylesheet or the served script.


Further Exploration

  • Package and install a plugin — bundles, profiles, and the layer order this package installs into.
  • Add a settings card — the settings-section and slot registration this row uses.
  • Web styling — the token and styling rules the installed stack follows.
  • ui-theme — the Font size row above this one, and the pre-plugin bootstrap this row mirrors.
  • License — MIT.

Model Experience

None, as the package is a browser-side UI plugin layer that registers nothing model-facing.

KV Cache effect

None; this package neither assembles nor sends a provider request.

Known Limitations and Deferred Work

These limits are current package constraints; they define what a font cannot change and what this deployment does not do.

  • Interface text only — code blocks, diffs, and terminal output keep the harness's monospace stack; installing a proportional font there would break their alignment.
  • A preset names only the faces it changes — the harness's own stack stays behind every installed stack, so text outside a chosen font's coverage, including Chinese when a preset has no Chinese face, is drawn by the harness's faces at their own metrics.
  • Some fonts change the text height — line boxes come from the font's ascent and descent, so a face with unusually large vertical metrics draws taller lines than the harness measured for. The plugin places families and never rewrites metrics, and it cannot correct a font whose metrics differ.
  • One face per family — a stored font's own weight and style variants are not offered, and bold text is synthesized from the single face.
  • A collection (.ttc) reports one family per contained face — choosing any of them downloads the whole collection file.
  • Uploads are capped per file, not in total — maxUploadBytes bounds one file; nothing bounds the size of the directory.
  • The installed-font list is only served to requests from the machine running dsh — a security rule rather than a config field, so a browser elsewhere sees no system group even when it could use those fonts.
  • A reverse proxy on the Host's machine defeats that rule — the judgement reads the peer address, and a local proxy is a local peer. Deployments that front dsh this way must set scanSystemFonts: false.
  • A crash during a write can leave one .staging file — every read ignores it and it is never served; delete it by hand if it is in the way.
  • Deferred — no total-upload quota, no per-face selection for collections, and no browser-local font enumeration, which the browser platform does not expose; uploaded fonts and the system default exist for that deployment shape.

Runtime invariant: No runtime invariant companion is published because every remembered family name is re-validated against the file's identity before reuse, so the catalogue cannot report a file the directory no longer holds.

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Remote Web Ui@linxin666/dsh-remote-web-ui通过扫码配对访问 dsh Web GUI,共享一个官方界面:设置按钮旁的二维码可将手机和 PC 配对到同一个 Web GUI(手机采用竖屏触控适配层,PC 使用完整桌面界面),通过一次性令牌和 rClient Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。