DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
A

dsh-avatar-top

Avatar Top

将侧边栏账户头像(设置启动器)移出底部条,并在 Plugins 页面提供设置卡片:位置(包括零高度内联模式)、行高、间距以及开关。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:kiefeng/dsh-avatar-top#1fe8738394c8ce28bb912643ff8c5f1865abf4e0
README兼容性版本

兼容性与来源证明

Avatar Top 以 dsh-avatar-top 发布,当前版本为 0.3.1。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/26

版本

0.3.1stable
2026/10/26
0.3.0stable
2026/10/22

相关插件

正在加载相关插件…

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

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Client Ui Skill Explorer@linxin666/dsh-client-ui-skill-explorerDSH 技能中心:按来源(bundled / project / user / custom / runtime)浏览已加载的技能,在 Web GUI 面板中启用或禁用、创建和删除技能。Client Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。Client Ui Git Graph@linxin666/dsh-client-ui-git-graph外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包Client Ui Market@linxin666/dsh-client-ui-marketWorkshop 浏览卡片:浏览来自 dsh-market.com 的皮肤、宠物和社区插件,并在 GUI 中安装(资源安装到 DSH 主目录,插件通过可选的插件管理器安装)。

README

dsh-avatar-top

English | 中文

Moves the left sidebar's account avatar (which is also the Settings launcher) out of the bottom strip, so the session list gains the space back. Placement, height and spacing are adjustable from a card on the Plugins page; inline brand row costs zero vertical space.

Tested against DeepSeek Harness 0.2.1-rc.2 (desktop, Windows).

What it does

DSH pins a footer at the bottom of the left sidebar: the account row (头像 + 账号名) sits next to sidebar.footer.action, where plugins such as dsh-cost-meter mount their own widgets.

This plugin moves only the account row:

  • The footer becomes display: contents, so its two children join the sidebar's flex column; the account row is then reordered while _footerActions keeps its default order and stays pinned at the bottom. (Moving the whole footer would drag other plugins' widgets along — that was a real bug in 0.2.1.)
  • Four placements: top, below the brand row, below New Session, or inline inside the brand row (Windows desktop; position: absolute at the free right end, zero vertical cost).
  • Three heights: full 44px, compact 32px, avatar only 28px (hides the account name and shrinks the avatar to 20px).
  • Spacing 0–24px, and an on/off switch that restores the stock layout without uninstalling.
  • The desktop update pill (download progress / "ready") shares that flex row. While it is visible the inline placement temporarily returns to a normal 28px row under the brand row: an absolutely positioned row has no width to give the pill, so it would otherwise be drawn underneath the avatar. The avatar goes back to the corner as soon as the pill disappears.

Changes apply immediately — the browser half subscribes to the settings document and rewrites the stylesheet. Settings persist in the profile's cordis.patch.yml.

Settings

SettingValuesDefault
Enabledon / offon
Positiontop / below brand / below New Session / inline brand rowtop
Heightfull 44 / compact 32 / avatar only 28full 44
Spacing below0–24 px4
Restore defaultsbutton—

Install

dsh plugin add dsh-avatar-top

Restart DSH once after installing (the client bundle and package metadata are read at host start). Then open Plugins → dsh-avatar-top to configure it.

Git install works too, e.g. dsh plugin add git+https://github.com/<owner>/dsh-avatar-top.

Self-check: the plugin serves its current stylesheet at /dsh-avatar-top.css (public, read-only), so a wrong layout can be diagnosed without a session:

http://127.0.0.1:<dsh-port>/dsh-avatar-top.css

How it works

Injection channel

The Host contributes one structured style row through webserver/index-inject:

ctx.on('webserver/index-inject', (table) => {
  table.push({ kind: 'style', text: cssFor(readOptions(config)) })
})

Both shells render that row:

ShellWhere the page comes fromHow the row arrives
Browser / dsh webthe SPA dist server answers the index over HTTPrenderIndex() renders the rows into the HTML
Desktop appElectron serves dsh-web-frontend/dist/index.html itself over its dsh-app:// schemethe Host's injection table is handed to the page over IPC after startup; the page-side interpreter appends style rows to <head>

ctx.webServer.tapIndex() would only cover the HTTP shell; the desktop window never calls it.

The desktop snapshot is taken at Host start, so the browser half also applies the stylesheet live (<style id="dsh-avatar-top-live">, appended after the boot row, so it wins) and the boot row only prevents a flash on first paint.

The rule

The sidebar is a flex column; placement is pure order, and selectors key off the stable CSS-module class-name suffixes (_root, _footArea, _settingsArea, _trigger, _label, _avatar, _logoRow, _newSession, _panelList) rather than the per-build hash prefix.

html:not([data-platform='darwin']) [class*='_root']:not([class*='_collapsed']) > [class*='_footArea'] {
  display: contents;
}
… > [class*='_footArea'] > [class*='_settingsArea'] {
  order: -1;
  margin-bottom: 4px;
}
  • macOS keeps its traffic-light strip layout (:not([data-platform='darwin'])).
  • Collapsed rails are left untouched (on Windows the footer is display:none there anyway).
  • inlineBrand lifts the button out of the flow (top: 8px; right: 12px; z-index: 3) and forces the avatar-only shape. On non-Windows shells it falls back to top. While the update pill exists (:has([class*='_indicator'])) the row returns to position: static; order: -3, i.e. a normal 28px row under the brand row.
  • The button selector is [class*='_trigger']:not([class*='_triggerRow']):not([class*='_triggerLabel']). A bare [class*='_trigger'] also matches _triggerRow — the flex row holding the account button, the connection indicator and the update pill — which collapsed the row to 28px and drew the pill underneath the avatar (0.3.0 bug). The row itself only gets flex-wrap: wrap, so a pill that cannot fit wraps instead of being pushed out of the sidebar.

Settings plumbing

Config declares four volatile() fields (user settings, not deployment config), so the Host serves the avatar-top namespace (the loader row id). The browser half binds it through ctx.configForms.get('avatar-top'), writes through config.set() / config.unset() (which reach remote.settings.mutate), and registers its card into the plugins.bundle.config keyed slot under the package name.

Known limits

  • Only the account row moves. Plugins that mount into sidebar.settings (instead of sidebar.footer.action) would ride along; no shipped plugin does that today.
  • Layout depends on ui-sidebar's flex column. If upstream switches the footer to absolute positioning or moves it out of the column, the rules become no-ops (no errors, no misplacement).
  • inlineBrand needs the Windows titlebar (html[data-windows-titlebar]), where the collapse toggle lives in the native titlebar. Elsewhere it falls back to the top placement.
  • The diagnostics route is public and read-only; it returns this plugin's CSS text only.

Development

npm install      # @deepseek-ai/schemastery, for the tests' host-side import
node --check lib/index.js
node --check lib/client.js
npm test

The smoke test covers the schema defaults and rejections, volatile-ref and plain-value inputs, the full placement × height × spacing matrix, row de-duplication, the diagnostics route, a regression assertion that _footerActions is never reordered (so cost meters and friends stay at the bottom), and byte-equality of the two CSS generators across 120 option combinations.

lib/client.js is a hand-written bundle in the DSH client-module format (window.__ModuleLoader__.load); it has no build step.

License

MIT