miuzel/dsh-subagent-ui
A Web client plugin that adds a 子代理管理 button to the conversation-header action row. It opens a searchable panel for the subagents currently discovered by the DSH client runtime.
catalog descriptioncatalog 简介 / catalog description:Searchable workspace subagent manager for DeepSeek Harness Web
Project Overview项目介绍
DSH Subagent Workspace UI is a Web client plugin that adds a subagent management button to the conversation header, opening a searchable panel of subagents discovered by the DSH runtime. Core capabilities include an active-child count badge, defaulting to the current workspace and session, grouping and sorting by workspace, session, category, or type, browser-local regex classification tabs, one-shot badges, local archiving with batch restore, paginated loading with wheel-scroll selection, and precise address jumps. It is intended for users managing many subagents across workspaces and sessions. Note that the plugin manages the discovered catalog only; unloaded types fall back to DSH session navigation, and archive state is local and never deletes DSH sessions.
DSH 子代理工作区 UI 是一款 Web 客户端插件,在对话头部操作栏注入「子代理管理」入口,点击后弹出可搜索面板,展示 DSH 客户端运行时已发现的子代理。核心能力包括活跃子代理数量徽标、当前工作区/会话的默认定位、按工作区、会话、类别、类型分组与排序、基于正则的浏览器本地分类标签、一键子代理 ⚡ 一次性徽标、本地化归档与批量恢复、分页加载与轮播选择,以及精确地址跳转。适用于需要在多工作区、多会话中快速定位、筛选与管理活跃及历史子代理的开发者与运维人员。注意事项:插件管理的是已发现子代理目录,未加载类型会回退至 DSH 原有会话导航;归档为本地状态,不会删除 DSH 会话。
请帮我了解并安装插件:【dsh-subagent-ui】【https://github.com/miuzel/dsh-subagent-ui】
Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。
Or use CLI install (for developers)或使用命令行安装(适合开发者)
CLI Install命令行安装
dsh plugin --profile web add github:miuzel/dsh-subagent-ui
把 miuzel/dsh-subagent-ui 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
DSH Subagent Workspace UI
A Web client plugin that adds a 子代理管理 button to the conversation-header action row. It opens a searchable panel for the subagents currently discovered by the DSH client runtime.
Features
- Compact title-bar trigger shows the active-child count and animated activity dot without opening the panel.
- Defaults to the main session's current workspace and current session, even when the user is viewing a child session.
- Workspace and session selectors support current workspace, all workspaces, named workspaces, current session, and named sessions.
- Sort by recent activity, name, or type; recently running children remain near the top after they finish.
- Group by session, workspace, category, type, or no grouping. Session headers show the workspace and parent session name.
- Browser-local classification tabs support custom regular expressions. Built-ins include all, other, review, test, implementation, and planning.
- One-shot children carry a compact
⚡ 一次性badge; continuable children remain visually uncluttered. - Archive state is local and never deletes a DSH session. Single-row archive actions and a batch mode support shift-selection, select-all, time-based selection (up to 1,000 rows), batch archive, restore, and archive-all.
- Load catalogs in pages of 40 with an independent wheel-scroll container; batch time selection expands loading up to 1,000 children.
- Batch mode changes cards into selection targets and hides individual archive/restore actions. The highlighted 完成 button exits batch mode.
- Open a loaded child at its exact
{ parentSessionId, childSessionId, mode }address. In normal mode the whole card opens the child; archive controls do not. - Show session IDs beside names, compact metadata, token totals, and creation time in the relative-time tooltip.
- Active children are grouped at the top in a collapsible section. When the runtime exposes conversation snapshots, the panel shows the latest two lines of live output, recent tool calls, context injection, command status, and a gray final snapshot after completion.
Screenshot guide
The screenshots demonstrate the compact manager and active-agent floating panel:


- Header — title, current-session/workspace counts, and close action.
- Search and scope row — ordinary name/title/workspace search, with
id: xxxreserved for Session ID search; workspace, session, sorting, and grouping selectors stay on one compact row. - Classification row — built-in and custom categories, with custom-category deletion inside the same tab frame.
- Filter row — hide one-shot, hide stale children, show archived, and reset filters.
- Results — collapsible active group, workspace/session group headers, Session ID beside each name, relative activity time, and archive status.
- Live activity — when available, the last two output lines or the latest tool/context status appear at the bottom of the card; the final snapshot remains gray after completion.
Install in the Web profile
From this directory:
dsh plugin --profile web add file:.
The bundle includes cordis.patch.yml, which inserts the manager and disables DSH’s stock ui-subagent lineage dropdown while the package is installed. Removing the package removes this bundle layer and restores the underlying ui-subagent setting. Restart the existing dsh web process, then refresh http://127.0.0.1:3080 after the plugin is available.
If you previously disabled ui-subagent manually in $DSH_HOME/profiles/web/cordis.patch.yml, remove that manual stanza when testing automatic restoration; user-owned settings are intentionally preserved.
Runtime data boundary
The public DSH Web session store exposes subagent summaries that have been discovered in the current browser runtime. It deliberately does not expose a global historical subagent index or a mode for every unvisited child. Therefore this first plugin version manages the discovered catalog; rows whose type is not yet loaded remain visible and searchable and fall back to DSH's retained session navigation. Exact catalog navigation is used automatically as soon as DSH supplies the address and mode.
A full persistent workspace-wide archive view requires a host-side catalog RPC (or an upstream DSH API) that enumerates every child address and its mode. The public SessionSummary does not expose the original prompt or provider/model route, so those are intentionally not queried or displayed. Live output and tool/context activity are read from the bound session automatically: on dsh 0.1.2-alpha.2 they are derived from the raw binding.eventSource event stream (showing the tool description or target filename), while older hosts (e.g. 0.1.1-rc.2) fall back to session.getSnapshot().chat.legacy. Capability detection selects the path, so the plugin stays forward compatible. If the host publishes neither, the panel falls back to the durable summary. The UI is isolated in lib/client.js, so it can switch to a richer source without changing the panel interaction model.
Compatibility
v1.4.0 supports dsh 0.1.5-rc.2 and stays backward compatible with all DeepSeek Harness versions: the 0.1.2-series capability-detection paths (live output via binding.eventSource, chat-tab switch via slot actions) remain the primary branches, and the 0.1.1-rc.2 legacy fallbacks (chat.legacy snapshot) are unchanged.
v1.4.0
- Compatibility: supports DeepSeek Harness 0.1.5-rc.2, backward compatible with all dsh versions. 0.1.5-rc.2 changed the conversation view structure (the slot renderer no longer injects store
actionsinto entries that do not declare a store, and the selected view is now persisted per session, with new tabs such as Trajectory) — clicking a subagent lands back on the Chat tab again (whenactionsis unavailable the plugin clicks the host's own Chat tab, preserving the host's activation and persistence semantics). The 0.1.2 capability-detection path remains the untouched primary branch and the 0.1.1 legacy fallback is unchanged. - TypeScript migration:
src/client/*.tsis now the single source of truth andlib/client.jsis generated bypnpm run build(sucrase type erasure + deterministic linker) instead of being hand-written. New tooling:verify-build(token/line-level diff against the v1.3.4 hand-written golden — migration equivalence proof and delta viewer for intentional changes) andverify-fresh(stale-bundle gate);pnpm run checkruns build + typecheck + syntax + freshness in one shot. - Fix: a latent
scopeKeyReferenceError in the collapsed filter summary (found during the TypeScript migration) is corrected toworkspaceKey.
v1.3.4
- Feature: the whole UI is localized through DSH client-locale (zh/en, AI-assisted English strings). Labels, buttons, stats, live output (context injection / thinking / tool details) and confirm dialogs now use translation keys and follow the host language. Contributed by @Marcuss2 in PR #1 — thank you!
v1.3.3
- Fix: batch delete no longer errors on large selections (host request-body limit raised to 8 MiB).
- Feature: with details hidden, hovering a row/name shows the stats (
输入/输出 · 缓存命中 · 轮数 · 步数) via the title tooltip. - Fix: live output now shows context injection (
上下文注入 · <form>) and the thinking state. - Feature: while thinking, a rotating "思考中…" spinner indicates the state instead of the low-priority reasoning text.
v1.3.2
- Performance: the manager now does one base scan (
subagentRows) and derivesallRows/activeRows/tabCountsfrom it (no repeated full scans ormodeMapmerges),tabCountsis computed from a deferred value and is skipped while the panel is closed, anduseSessionssubscribes only the fields the manager reads. Live output is capped to a few simultaneous subagents (liveCap, default 3,0= unlimited) and fully releases its subscriptions when live display is off or the float/panel is closed. - UX: opening a subagent now auto-switches the session to the Chat tab.
- Fix: the batch "select N hours ago" now selects the truly-old subagents in the current view (accurate count) and no longer overwrites or re-selects your manual changes.
Validation
The client bundle lib/client.js is generated from the TypeScript sources in src/client/ — edit those, never the bundle, then rebuild:
pnpm install # dev deps: sucrase + typescript
pnpm run build # scripts/build.mjs -> lib/client.js
pnpm run check # build + tsc --noEmit + node --check lib/index.js + bundle freshness gate
pnpm run verify:build compares the generated bundle with the hand-written pre-refactor bundle (git ref v1.3.4) up to insignificant whitespace, using token-level and line-level comparison. After the migration it doubles as a delta viewer that prints the exact differences of any intentional change.
Smoke-test a specific dsh version:
./test.sh # local dsh, port 8084
DSH_VERSION=0.1.1-rc.2 ./test.sh # pnpx @deepseek-ai/dsh@0.1.1-rc.2 (via proxychains4 -q)
Acknowledgements
- UI localization (zh/en) contributed by @Marcuss2 via PR #1 — many thanks!
- Subagent permanent deletion and session cleanup design inspired by and referencing @heiheiha798/dsh-plugin-subagent-delete.
omdsh-dev/DSH-better-sidebar
NanmiCoder/dsh-agent-teams
LiPu-jpg/Openwrite
dream-num/dsh-univer-office
toolclub/dsh-agent-team-gui
cocode-agency/cocode
omdsh-dev/dsh_workflow