中文EN

dsh-sidebar-session-provider-icon

ui已测通过npmMIT

DeepSeek Harness 插件:在侧边栏为每个会话显示 provider 与 model 图标,跟随输入框选择器即时更新,历史会话回退到最近一次请求;聚合路由(如 opencode-go、traex)显示 provider 主图并叠加 10px model 小图标。

下载量 / Downloads
1,122
依赖体积 / node_modules
18.97 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-sidebar-session-provider-icon

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-sidebar-session-provider-icon

![dsh.so risk](https://www.dsh.so/artifact/dsh-sidebar-session-provider-icon/)

[English](README.md) · 简体中文

上:隔离 DSH 实例中的真实侧边栏(演示会话);下:单一与复合角标的显示规则。

<!-- problem -->

DeepSeek Harness(DSH)的侧边栏里每个会话行看起来都一样,不打开会话就分不清它用的是哪个 provider 和 model。这个插件在每个会话标题前显示 provider + model 图标,取值于输入框当前选中的模型,切换后立刻更新。provider 和 model 不是同一家时(例如 opencode-go/deepseek-v4-flash),在 provider logo 的右下角叠一个缩小的 model logo。

  • 真实品牌标识,不靠生成。 logo 是固定版本、随包分发的 SVG,按实际 provider route 和 model id 选取,运行时不生成、不下载。
  • 实时跟随输入框。 当前打开的会话立即跟随输入框的选择;其他会话行使用下一次请求的选择,冷历史回退到最近一次真实请求。
  • 识别网关的复合徽标。 聚合 route 显示 route logo 加模型厂商角标;Magpie 等网关还能多显示一层中转平台,全部保持原来 14×14 的占位。

安装

需要 DeepSeek Harness 0.2.0-rc.2、Node.js >=22.19。

# 从 npm 安装:预构建,无需构建授权
dsh plugin --profile web add dsh-sidebar-session-provider-icon

# 或直接从源码安装:本地构建,dsh 请求授权时确认即可
dsh plugin --profile web add prgrmrwy/dsh-sidebar-session-provider-icon

重启 DSH 并刷新 Web 页面。除此之外不需要任何东西:无配置项、不访问网络、除安装它的 DSH profile 外不写任何文件。

行为

会话显示哪个 logo,按以下顺序取数据:

1. 即时选择(优先,且须可核验)。 官方 dsh-client-ui-model-selection 的 store,读作 ctx.modelDirectories.directoryFor(sessionId).store.current。它是输入框选择器与 /model 命令共享的唯一 per-session 状态,session.selectModel 成功后立即发布 { provider, model }。因此当前打开的会话(包括还没发过消息的空白会话)按输入框的选择显示。该 store 属于客户端 Session scope:每次会话列表 / DOM 信号都会重新解析,运行体给同一个 session 换了新 store(离开会话再回来就会发生)时立即重订阅并重读,身份未变时也重读快照。观测值只在其 session 仍是当前打开会话、且该目录仍可解析期间保留;视图离开或目录不再可解析时即丢弃——不再让客户端无法核验的旧值决定某一行的 logo。

2. 已选模型(持久)。 官方 modelSelection 投影的 next,即该 session 下一次请求将使用的选择。它由 Host 维护,也覆盖"已选但尚未发送"的选择,因此离开会话之后该行仍然正确。

3. 最近一次请求(冷历史 fallback)。 Host 的 provider session projection 折叠会话日志中的 request/header 事件,所以尚未在本浏览器加载选择器的历史会话,仍会显示它最近一次真实请求的 provider。重启不丢,不使用 localStorage。

品牌判断分两个独立维度:provider route 决定主图,model id 决定右下角小图标。

选择 · 显示

claude/claude-opus-5、codex/gpt-6-luna、deepseek-official/deepseek-v4-pro(同品牌) · 单一 Anthropic / OpenAI / DeepSeek logo

opencode-go/deepseek-v4-flash、opencode-go/qwen3.8-flash、opencode-go/kimi-k2.7-code · OpenCode 主图,右下角 DeepSeek / Qwen / Kimi

traex/GPT-5.6-Sol[1m]、traex/DeepSeek-V4-Flash、traex/Gemini-3.1-Pro-Preview · Trae 主图,右下角 OpenAI / DeepSeek / Gemini

traex/openrouter-3o[1m]、traex/Seed-2.1-Pro-0915 · Trae 主图,右下角 OpenRouter / ByteDance

dsh-magpie-connect + opencode-go/deepseek-v4.1-flash、opencode-go/glm-5.3-flash(Magpie 网关,经平台中转) · Magpie 主图,左下角 OpenCode(中转平台)+ 右下角 DeepSeek / GLM(模型厂商)

dsh-magpie-connect + claude/claude-haiku-5-5、codex/gpt-6-luna(Magpie 网关,直连厂商) · Magpie 主图,右下角 Anthropic / OpenAI,左下角为空

已知 route + 认不出的 model(如 opencode-go/omen-alpha) · 只显示 route 品牌,不叠小图标

未知或通用 route · 按 model 名显示单一 logo;仍匹配不上时显示中性的单字母徽标

  • route 优先。 opencode-go/deepseek-v4.1-flash 的主图是 OpenCode;DeepSeek 只会出现在右下角。
  • 网关最多三层。 主图是网关,右下角是模型厂商,左下角是中转平台——dsh-magpie-connect / opencode-go/deepseek-v4.1-flash 同时表达 Magpie、OpenCode、DeepSeek 三层身份。中转层只在上游段是可识别品牌且与模型厂商不同时出现,所以 claude/、codex/、opencode-go/private-model、auto|group|custom 仍是两层或单层。
  • 认不出不冒充。 查不到厂商的模型不加小图标,也不会用单字母徽标充当小图标。
  • 尺寸。 复合图标的外框和单一 logo 一样是 14×14,行布局不变。两个小图标都是 10px 的品牌图形本身,各自向所在下角溢出 4px,没有圆底、描边或内边距——在这个尺度下任何装饰都会挤掉图形需要的像素。左下角图标落在 badge 与官方状态点之间的空隙里,不覆盖 StateDot。
  • 悬停提示。 始终显示精确的 provider · model。

层 · 实现

Host · src/provider.ts 注册 provider projection(依赖 sessionProjections 服务),折叠 request/header;只承担冷历史 fallback

Client 数据 · selection-binding.ts 观测当前打开会话的 ctx.modelDirectories store(每次信号重新解析);provider-map.ts 依次取:可核验的即时观测 → 官方 modelSelection 选择 → provider fallback

Client DOM · row-locator.ts 收拢全部官方行 DOM 知识:每行按官方 data-row-key="session:<id>" 精确定位(标题反查仅作为没有该属性时的 fallback),因此同名会话不会互相串用徽标;MutationObserver 在标题前维护独立的 badge <span>

品牌图 · src/client/assets/*.svg,一次下载并随包打入;logos.ts 分别判定 provider 品牌与 model 品牌,不同时渲染复合图标

徽标内容只由 (provider, model) 决定;index.ts 只在这两个值或悬停提示变化时重建徽标。

配置

无。插件行没有任何 config 字段,也不读取环境变量。

Provider / model → 图标对应关系

下表列出可识别的 provider route 别名与 model 名称示例,不是固定的模型目录。匹配不区分大小写,并去掉 npm scope 和开头的 dsh- / dsh_。已知 provider 决定主图;model 品牌已知且不同时决定右下角小图标。— 表示该品牌不支持这一维度。精确规则见 [logos.ts](src/client/logos.ts)。

图标 · 品牌 · Provider route / 别名 · Model 名称 / 系列

<img src="src/client/assets/deepseek.svg" width="24" height="24" alt="DeepSeek"> · DeepSeek · deepseek、deepseek-official · deepseek-*

<img src="src/client/assets/openai.svg" width="24" height="24" alt="OpenAI"> · OpenAI · openai、codex · gpt-、codex-

<img src="src/client/assets/anthropic.svg" width="24" height="24" alt="Anthropic"> · Anthropic · anthropic、claude · claude-*、名称含 anthropic

<img src="src/client/assets/grok.svg" width="24" height="24" alt="Grok"> · Grok / xAI · grok、xai · grok-*

<img src="src/client/assets/kimi.svg" width="24" height="24" alt="Kimi"> · Kimi / Moonshot · kimi、moonshot · kimi-、moonshot-

<img src="src/client/assets/glm.svg" width="24" height="24" alt="GLM"> · GLM / 智谱 · glm、z-ai、zai、zhipu · glm-*

<img src="src/client/assets/minimax.svg" width="24" height="24" alt="MiniMax"> · MiniMax · minimax · minimax-*

<img src="src/client/assets/pi.svg" width="24" height="24" alt="Pi"> · Pi · pi、pi-ai · pi、pi-*

<img src="src/client/assets/openclaw.svg" width="24" height="24" alt="OpenClaw"> · OpenClaw · 名称含 openclaw · 名称含 openclaw

<img src="src/client/assets/hermes.svg" width="24" height="24" alt="Hermes"> · Hermes Agent · hermes、hermas、nousresearch、nous · 名称含 hermes、hermas、nousresearch

<img src="src/client/assets/opencode.s

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:7,最后更新 2026-11-02

链接

GitHub · Homepage · npm

同类插件