DSH Plugins Marketplace

DSH Plugins

Plugins

/

Sessions & Messages

/

dsh-sidebar-session-provider-icon

p

dsh-sidebar-session-provider-icon

Manifest valid★ 1

DeepSeek Harness plugin: show the brand logo of the model selected in each sidebar session, updated live from the composer selector, with a last-request fallback for history sessions

UI (client)hasBundlePatch

dsh-sidebar-session-provider-icon

English · 简体中文

The DSH session list with a different brand logo before each title (Grok, GLM, Kimi, OpenAI, DeepSeek), one per session's selected model; the models are local demo routes

Sidebar rendering: same-vendor selections show one logo; aggregator routes show the provider logo with the model logo in the corner (light and dark theme)

In the DeepSeek Harness (DSH) session list every row looks alike, so you cannot tell which model a conversation uses without opening it. This plugin puts the brand logo of the model currently selected in the input box in front of each session title, and updates it the moment you switch models. When the provider and the model come from different vendors (for example opencode-go/deepseek-v4-flash), the provider logo carries a small model logo in its bottom-right corner.

Install. DeepSeek Harness 0.2.0-rc.2, Node.js >=22.19.

# from npm — prebuilt, no build approval
dsh plugin --profile web add dsh-sidebar-session-provider-icon

# or straight from source — builds locally, approve the build when dsh asks
dsh plugin --profile web add prgrmrwy/dsh-sidebar-session-provider-icon

Restart DSH and refresh the Web page. Nothing else is needed: no configuration, no network access, and no files written outside the DSH profile that installs it.

In the ohmydsh repository this plugin is wired through the dsh.yaml entry sidebar-session-provider-icon (source: local), so a source change there only needs dsh build and a restart. Current behavior is specified in openspec/specs/sidebar-session-provider-icon; design history lives in the archived changes sidebar-session-provider-icon and sidebar-provider-icon-composite-model-badge.

How it behaves

The logo shown for a session comes from two sources, in this order:

  1. Live selection (preferred). The official dsh-client-ui-model-selection store, read as ctx.modelDirectories.directoryFor(sessionId).store.current. It is the single per-session state shared by the input-box selector and the /model command, and it publishes { provider, model } as soon as session.selectModel succeeds. The open session, including a blank one that has not sent a message yet, therefore follows the input-box selection.
  2. Last request (cold-history fallback). A Host provider session projection folds the request/header events of the session log, so a history session whose selector has not been loaded in this browser still shows the provider of its most recent real request. It survives restarts and uses no localStorage.

Brand resolution has two independent dimensions: the provider route picks the main logo, the model id picks the corner logo.

SelectionShown
claude/claude-opus-5, codex/gpt-6-luna, deepseek-official/deepseek-v4-pro (same vendor)a single Anthropic / OpenAI / DeepSeek logo
opencode-go/deepseek-v4-flash, opencode-go/qwen3.8-flash, opencode-go/kimi-k2.7-codeOpenCode, with DeepSeek / Qwen / Kimi in the corner
traex/GPT-5.6-Sol[1m], traex/DeepSeek-V4-Flash, traex/Gemini-3.1-Pro-PreviewTrae, with OpenAI / DeepSeek / Gemini in the corner
traex/openrouter-3o[1m], traex/Seed-2.1-Pro-0915Trae, with OpenRouter / ByteDance in the corner
known route + unrecognized model (e.g. opencode-go/omen-alpha)the route logo only, no corner logo
unknown or generic routea single logo from the model name; if that also fails, a neutral single-letter badge
  • Route first. opencode-go/deepseek-v4-flash shows OpenCode as the main logo; DeepSeek can only appear in the corner.
  • No impersonation. A model whose vendor cannot be identified gets no corner logo, and never a letter badge in the corner.
  • Size. The composite keeps the 14×14 footprint of a single logo, so the row layout does not move. The corner logo is the bare 10px glyph, overhanging the bottom-right by 4px, with no plate, ring or padding: at this scale any decoration eats the pixels the glyph needs.
  • Tooltip. Hovering always shows the exact provider · model.
LayerImplementation
Hostsrc/provider.ts registers the provider projection (it requires the sessionProjections service) and folds request/header; it only serves the cold-history fallback
Client dataSubscribes to the per-session stores of ctx.modelDirectories; the selector choice wins over the projection fallback
Client DOMrow-locator.ts holds all knowledge of the official row DOM; a MutationObserver maintains a separate badge <span> in front of the title
Brand artsrc/client/assets/*.svg, downloaded once and bundled; logos.ts resolves the provider brand and the model brand separately and renders the composite when they differ

The badge content is derived only from (provider, model); index.ts rebuilds a badge only when those values or the tooltip change.

Configuration

None. The plugin row carries no config fields and the package reads no environment variables.

Recognized brands:

DimensionBrands
provider and modelDeepSeek, OpenAI/GPT/Codex, Anthropic/Claude, Grok/xAI, Kimi/Moonshot, GLM (Zhipu), MiniMax, Pi, OpenClaw, Hermes Agent (the misspelling hermas is also accepted), OpenCode, Qwen, Tencent Hunyuan (hy3, hy4-*), Meituan LongCat, Xiaomi MiMo, Gemini/Gemma, NVIDIA (Nemotron), Meta (Muse Spark, Llama), Ant Group (Ling/Ring), OpenRouter, ByteDance Seed
provider onlyTrae (trae, trae-ai, traex*; exact name or prefix, never a substring)

The model dimension covers every identifiable model family in the OpenCode Go / Zen catalogs, plus the GPT, DeepSeek, Gemini, OpenRouter and ByteDance Seed families in the current TraeX catalog.

Brand art is pinned and vendored, never hand-drawn and never fetched from a CDN at runtime:

  • every brand except OpenCode: @lobehub/icons-static-svg@1.94.0, MIT; the color variant is used where one exists;
  • OpenCode: the official provider SVG from anomalyco/opencode at commit 5e75e5e9901f0d178f425bfb47f1bd46cbe78a59, MIT.

Per-file source URLs and SHA-256 checksums are listed in src/client/assets/README.md. Some color SVGs carry gradient/clip ids; the corner instance suffixes them with -sub so copies on the same page never resolve each other's definitions.

To add a brand: put the SVG in src/client/assets/, record source, pin, license and SHA-256 in the assets README, then add rules and tests to providerBrandOf / modelBrandOf in logos.ts.

Boundaries & safety

  • The official StateDot is never replaced, moved or hidden; times, row menus and drag behavior stay official.
  • The badge is a standalone <span> in front of the title. If the row DOM cannot be located reliably, the plugin silently shows nothing and leaves the page intact.
  • No network requests of its own: the logos ship with the bundle and the data comes from DSH's own stores and session log.
  • Code is MIT-licensed (LICENSE). The brand icons are vendored from MIT-licensed upstreams; their copyright notices, the exact rendering changes, and the trademark position are in THIRD-PARTY-NOTICES.md. Brand owners retain their trademark rights; the marks only identify the selected provider route and model and imply no endorsement.

Development

lib/ is a gitignored build artifact. In a standalone checkout:

npm install
npm run typecheck
npm test
npm run build

In the ohmydsh monorepo this package is a workspace member: install once at the repository root and add --workspace dsh-sidebar-session-provider-icon to the last three commands. dsh build / sync also builds lib/ on demand before installing the local package; refresh the Web page to pick up a new client bundle.

Under vitest, small SVGs are inlined as data URLs with attribute quotes rewritten to '. Any regex that rewrites SVG attributes must accept both " and '.

Comments

Loading…

From the same category

billion-context

by ranxianglei

基本稳定可用 100K tokens is enough. Universal context-compression proxy for ALL AI coding agents,10w上下文足矣

Sessions & MessagesManifest valid

★ 1.1k

↓ 567.3k/wk

MIT

TypeScript

Oct 13, 2026

dsh plugin --profile web add billion-context

by Han-1413141

DeepSeek Harness session cost meter plugin: session/daily cost, budget, history, OpenCode Go quota, official & custom-provider balance, Codex-like token heatmap, peak/off-peak pricing with pre-switch

Sessions & MessagesManifest valid

★ 401

↓ 24.7k/wk

MIT

JavaScript

Oct 13, 2026

dsh plugin --profile web add dsh-cost-meter

by Nwflower

Import 14+ external agent chat histories (Claude Code, Codex, ChatGPT, Cursor, Gemini, Reasonix, opencode, ZCode, Grok Build, OpenClaw, Pi, Hermes, Kimi CLI, DSH) into DeepSeek Harness as resumable se

Sessions & MessagesManifest valid

★ 229

MIT

JavaScript

Oct 13, 2026

dsh plugin --profile web add dsh-chat-import

by Totoro-qaq

DeepSeek Harness plugin for previewable cross-preset session migration. Fixed-schema handoffs preserve state, source-model intent, and unresolved images; the original session stays untouched.

Sessions & MessagesManifest valid

★ 165

MIT

JavaScript

Oct 12, 2026

dsh plugin --profile web add dsh-plugin-bridge

by Anionex

deepseek harness对话和代码状态回退插件 | DSH — rewind conversation and workspace state, powered by a persistent Change Ledger

Sessions & MessagesManifest valid

★ 133

BSD-3-Clause

JavaScript

Oct 1, 2026

dsh plugin --profile web add @anionex/dsh-turn-rewind

by SiriLee

DSH 插件:真正便捷无感的同窗口内对话回退,从不新建分支;自带轻量工作区备份,可一并还原文件(完整 Claude Code /rewind 语义)。 · DSH plugin: genuinely effortless in-window conversation rewind — never forking a new session; ships a lightweight workspac

Sessions & MessagesManifest valid

★ 127

↓ 6.5k/wk

MIT

TypeScript

Oct 9, 2026

dsh plugin --profile web add dsh-rewind-plugin