DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Plugin Status Bar — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

dsh-plugin-status-bar

Plugin Status Bar

DSH client plugin: Maintains a status bar above the input box (slightly narrower than the input card, centered, and aligned with the card’s top edge), providing an inputStatusBar segment registration interface for other client plugins. Contains no business logic.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add dsh-plugin-status-bar@0.2.1
READMECompatibilityVersions
输入框上方的一条状态条:左侧是 Agent Mesh 节点状态,右侧是本插件版本浅色主题下的同一条状态条

Compatibility and provenance

Plugin Status Bar is published as dsh-plugin-status-bar and currently resolves to version 0.2.1. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
10/14/2026

Versions

0.2.1stable
10/14/2026

Related plugins

Loading related plugins…

Latest
0.2.1
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
156.6 kB
Files
15
Surface
web
License
MIT
Source
npm
GitHub
★ 0
Weekly downloads
0
Last push
10/14/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in ui-customization.

Client Ui Skill Explorer@linxin666/dsh-client-ui-skill-explorerDSH skill center: browse loaded skills by source (bundled / project / user / custom / runtime), enable or disable, create and delete, in a web GUI panel.Remote Web Ui@linxin666/dsh-remote-web-uiScan-to-pair remote access for the dsh web GUI that shares one official interface: a QR beside the settings button pairs phones and PCs into the same Web GUI (a portrait-touch adaptation layer for phones, full desktop on PCs) through one-time tokens and rClient Ui Task Board@linxin666/dsh-client-ui-task-boardHost-authoritative task board for the DSH Web GUI with real session execution, Host cron scheduling, and optional cross-platform idle-sleep protection; mounted without DSH source changes.Client Ui Git Graph@linxin666/dsh-client-ui-git-graphExternal dsh web GUI plugin: a blank-session git branch selector + Git graph, with real host-side git operations and guards, as a dsh profile bundle

README

dsh-plugin-status-bar 📊

在输入框上方留一条状态条,让其它插件把「当前状态」放到它该在的地方。

安装 · 它做什么 · 注册一个段 · 几何是怎么定的 · 样式契约 · 已知边界 · 开发

· ·

输入框上方的一条状态条:左侧是 Agent Mesh 节点状态,右侧是本插件版本

DSH 的输入框上方有一条比输入卡片略窄、居中、与卡片上沿贴合的横条位置(宿主槽位 conversation.input.dock)。这个包把它做成一个通用容器:它自己不含任何业务逻辑、一个段都不注册, 只对外提供一个注册面,任何客户端插件都可以往里放自己的状态段。

于是"当前用的是哪台机器""插件市场有几条更新""这轮测试过了几条"这类一直该看得见、又不值得占一段对话 的信息,有了统一的落点——样式一致、位次不打架、主题跟着宿主走。

当前版本 0.2.1 · DSH 客户端插件 · 零运行时依赖 · 对着 DSH 0.2.0-rc.2 核对过几何与令牌

安装

dsh plugin --profile desktop add dsh-plugin-status-bar

--profile 填你实际在用的那个(桌面端是 desktop,Web 端是 web)。重启 DSH 生效—— 客户端半体是启动时加载的。

这条命令背后是 pnpm:装完包之后,它会自动把声明了 dsh.bundle 的依赖加进 profile 的 dsh.profile.bundles——不用手改 package.json。

从哪装命令
npm(推荐)dsh plugin --profile desktop add dsh-plugin-status-bar
GitHub 最新提交(还没发版的改动)dsh plugin --profile desktop add github:vianvio/dsh-plugin-status-bar
本地目录(改代码即时生效,用来开发)git clone https://github.com/vianvio/dsh-plugin-status-bar.git ~/dsh-plugin-status-bar
dsh plugin --profile desktop add link:$HOME/dsh-plugin-status-bar

以后升级、卸载:

dsh plugin --profile desktop update dsh-plugin-status-bar
dsh plugin --profile desktop remove dsh-plugin-status-bar

升级 DSH 大版本后状态条"消失"了? 先看插件管理器给的那行提示。宿主 preflight 会读 peerDependencies 里的 @deepseek-ai/dsh* 区间,不满足时会把整行禁用(不是崩,是静默缺席, 更难查)。本包声明的是 >=0.2.0-rc.2 <0.3.0-0。

它做什么

谁做什么
本插件维护那条横条:宽度/圆角/材质/贴合全部按宿主令牌算;提供 inputStatusBar 注册面
使用方插件往注册面里 register() 自己的段——数据驱动(容器渲染标准触发器与面板外壳)或自带组件
  • 没有段时整条容器不渲染,不会在输入框上方留一条空壳占位。
  • 段之间自动插 1px 分隔线;align: "end" 的段被推到横条右侧。
  • 同一时刻只展开一个面板;Esc / 点击外部关闭;↑ ↓ 在面板项之间移动焦点。
  • 使用方插件被回收时,它注册的段自动注销。

注册一个段

// 你的客户端插件 client.js
window.__ModuleLoader__.load({
  id: "your-plugin",
  factory: (require) => {
    var module = { exports: {} };
    var exports = module.exports;
    var react = require("react");

    function CafeSegment(props) {
      return react.createElement(props.Segment, {
        id: "cafe",
        open: props.open,
        onToggle: props.toggle,
        title: "咖啡",
        menu: props.open ? react.createElement("div", { className: "dshStatusHint" }, "面板内容") : null,
        menuAvailable: true
      },
        react.createElement("span", { className: "dshStatusDot", style: { background: "#f59e0b" } }),
        react.createElement("span", { className: "dshStatusLabel" }, "咖啡"),
        react.createElement("span", { className: "dshStatusText" }, "2 杯")
      );
    }

    exports.name = "your-plugin";
    exports.inject = ["inputStatusBar"];
    exports.apply = (ctx) => {
      ctx.effect(() => ctx.inputStatusBar.register({
        id: "cafe",
        order: 120,
        component: CafeSegment
      }));
    };
    return module.exports;
  }
});

也可以完全走数据驱动(容器渲染标准触发器与面板外壳,你只给数据):

ctx.inputStatusBar.register({
  id: "market",
  order: 200,
  align: "start",                 // "end" 表示右对齐组
  label: "插件市场",
  status: "3 条更新",
  tone: "pass",                   // idle | running | pass | warn | fail
  dot: true,
  menu: MarketPanel,              // 组件:{ item, bar, host, close, toggle }
  onSelect: (api) => {},          // 无 menu 时的点击行为
});

注册面 API

方法说明
register(item)注册段,返回注销函数;id 必填且唯一;段上限 16
unregister(id)按 id 注销
update(id, patch)浅合并更新一个段(命中返回 true)
list()当前段快照(已按 order 升序)
subscribe(fn)订阅变更,返回退订函数
revision()变更计数(调试用)

段按 order(默认 100)升序排列,同序按 id 排序;空间不足时收缩省略 (text-overflow: ellipsis),不换行、不横向滚动。

拿不到 ctx 的集成方可以走 window.__DSH_INPUT_STATUS_BAR__——它和 cordis 服务指向同一个注册面。

几何是怎么定的

尺寸不写死,全部由宿主 composer 自己的令牌推出来(宿主调版面时状态条跟着走):

依赖的宿主令牌0.2.0-rc.2用途
--dsh-composer-side-clearance16px输入卡片距 composer 栈边缘的留白
--dsh-composer-dock-inset8pxdock 面板相对卡片边缘的内缩单位
--dsh-composer-card-max-widthcontent-width + 32px输入卡片宽度上限
--dsh-composer-stack-gap6px被负 margin 吃掉,让条体贴住卡片上沿
--dsw-radius-lg · --dsw-specific-menu · --dsw-menu-backdrop-filter主题提供圆角、表面材质、背板滤镜

推导式:相对 composer 栈边缘内缩 side-clearance + 2 × dock-inset,也就是相对输入卡片边缘 内缩 2 × dock-inset——与宿主自己的 GoalBar / QueueDock / TodoPanel 在同一槽位里的落位完全一致 (它们分别用 4 × dock-inset、2 × dock-inset + padding 达到同一个效果)。

想自己调宽窄,覆盖 --dsh-status-bar-inset 即可(相对 composer 栈边缘,上面那套推导只作兜底)。

表面走宿主 dock 面板同一套材质,所以浅色主题下不会变成一条灰带:

浅色主题下的同一条状态条

上面两张图不是画的:npm run render 把本机 DSH 里那份真的 composer CSS 与设计令牌抽出来排版, 塞进插件真渲染出来的标记,再用无头 Chrome 量真实盒模型并截图——同一份产物就是那 81 条几何断言的依据。

样式契约

容器外壳(由本插件渲染,段不要覆盖):

类名用途
.dshStatusDockRow挂载行:宽度/上限按宿主令牌推导、居中、吃掉堆叠间距贴住输入卡片
.dshStatusBar整条容器(role="toolbar"):宿主 dock 面板材质、仅顶部圆角、接缝不描边
.dshStatusSeg / .dshStatusSegEnd段外壳(position: relative,面板以此为锚)
.dshStatusSegButton / .dshStatusSegStatic段触发器(可点击 / 静态)
.dshStatusSegBody段内容容器
.dshStatusChevron / .dshStatusChevronOpen面板箭头(展开旋转 180°)
.dshStatusPanel面板外壳(向上展开、宿主菜单底色与投影)

段内容与面板内容可直接复用的公开积木:

类名用途
.dshStatusDot / .dshStatusDotPulse状态点 / 脉冲动效
.dshStatusLabel / .dshStatusText主文案 / 次要文案
.dshStatusHead / .dshStatusBadge面板标题行 / 徽标
.dshStatusRow / .dshStatusRowLabel / .dshStatusRowValue面板信息行(label 左、value 右)
.dshStatusSep面板分隔线
.dshStatusCell / .dshStatusCellValue / .dshStatusCellValueOk面板动作项(配 role="menuitem")
.dshStatusHint面板底部说明文字

主题令牌:表面、圆角、描边与交互色全部走宿主 --dsw-* 变量并提供回退值。

可调变量默认含义
--dsh-status-bar-insetside-clearance + 2 × dock-inset相对 composer 栈边缘的每侧内缩
--dsh-status-bar-height32px条高

已知边界

  • 只负责输入卡片上方那一条。 卡片内部的工具行(模型选择、权限、附件)属于宿主的 conversation.composer.dock,本插件不碰——两边同时抢位次会让输入框抖动。
  • 它是基础设施,不认识任何业务。 段的文案、颜色语义、面板内容都由使用方决定; 本包只保证外壳、交互与主题一致。
  • 容器几何依赖宿主的 --dsh-composer-* 令牌。 宿主哪天改掉这些名字,宽度会退回回退值—— npm run compat 就是用来当场抓到这件事的。
  • render 需要本机装有 DSH。 它要读 app.asar 里的真实 CSS 与令牌;没装会明确报错, 不会静默跳过。

开发

产物就在仓根、没有构建步骤:client.js 是页面按 <script src> 加载的经典脚本;index.js 是 宿主半(空 apply,只为让这个包在 Loader 里有一个条目,客户端产物才会被编进 __DSH_BOOT__)。 零运行时依赖。

npm test            # 发布契约(package.json 里那几行声明)
npm run verify      # 静态契约:导出面 / 几何推导式 / 样式原语 / 无障碍 / 注册面 API
npm run compat      # 对着**本机安装的 DSH** 查槽位、位次、令牌、清单、版本区间
npm run smoke:client# react-dom/server 离线渲染体检
npm run render      # 真浏览器:宿主真 CSS + 真令牌里排版,量真实盒模型并出截图
npm run gate        # 上面全部

npm run render 需要 Chrome 与 react(CHROME_BIN / DSH_REACT_ROOT 可指定)。 compat 与 render 都不抄宿主的 CSS,而是从 app.asar 现读(DSH_ASAR 可覆盖)—— 所以宿主一改版面/令牌,这两条命令会立刻变红,而不是等到界面上看着别扭才发现。

机制细节、0.2.0 修掉的四处漂移、以及几个容易复刻错的坑,都在 docs/notes.md。

发版:先 npm version,再 npm publish,最后 git push --follow-tags。

许可

MIT