🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

miuzel/dsh-subagent-ui

DeepSeek 客户端兼容 / 相关生态spec-screened扫描:低风险在 GitHub 查看 ↗
✓ 可直接安装

DSH 子代理工作区管理器

自动检查通过:npm 包已发布且 engines 声明满足基线;该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/25 · 已提供中文文档

DeepSeek Harness Web 的可搜索工作区子代理管理器

综合分
36.2
GitHub 分
36.2
用户评分
—
★ Stars
3
周下载量
—
兼容 / 相关生态插件(非 dsh 原生,请按其对应运行时安装)
git clone https://github.com/miuzel/dsh-subagent-ui.git
信任档位:已验证本站已于 3 天前真实安装成功(L4 · 真实安装)
是什么
生态插件(可安装,未声明 dsh 能力)
装得上吗
本站已真实安装成功(L4 · 真实安装,非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 1 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/22
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/25(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-subagent-workspace-ui @ 1.5.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/22 11:28:49

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
DSH 子代理工作区管理器

面向 DeepSeek Harness Web 的子代理管理插件。插件在会话标题栏提供一个紧凑的 🧩 子代理 active/total 入口,用于搜索、筛选、分组、排序、查看和批量归档当前运行时已发现的子代理。

当前发布版本:v1.9.0

主要功能

会话与工作区范围

- 默认选择当前工作区。
- 默认选择当前主会话;即使当前页面已经进入某个子代理,会话管理器仍然以最上层主会话为基准。
- 工作区下拉框支持:
- 当前工作区
- 全部工作区
- 具体工作区列表
- 会话下拉框支持:
- 全部会话
- 当前工作区内的会话
- 当前会话标记
- 支持通过 id: 前缀单独搜索 Session ID,例如:

id: graph:g-a92e1406

普通搜索不会把 Session ID 或父会话 ID 当作搜索字段。

搜索、排序与分组

- 普通搜索匹配子代理名称、标题和工作区名称。
- 支持按以下方式排序:
- 最近活跃
- 名字
- 类型
- “最近活跃”优先使用 DSH 提供的 updatedAt。
- 最近进入运行状态的子代理会被记录,即使运行结束后仍会保持靠前显示。
- 支持以下分组:
- 按会话
- 按工作区
- 按分类
- 按类型
- 不分组
- 按会话分组时,分组标题显示“工作区 · 会话名称”,卡片中不再重复显示相同的归属信息。
- 活跃子代理单独置顶,并可折叠。

界面截图

两张截图拍摄于 1.7.0-dev 分支(commit 79d9d0f)上真实运行的 dsh 0.1.6-alpha.2 实例,深色主题。拍摄时同一个会话里并存 4 个后台子代理——3 个仍在运行、1 个已完成,因此每行都能展示真实的类型、模型与用量数字。这里是中文界面;英文界面两张见 README.md。

子代理管理抽屉(中文界面)

活跃子代理浮窗(中文界面)

管理面板自上而下依次是:

1. 标题栏 —— 面板标题、当前会话 n 个 · 当前工作区 n 个 · 活跃 n 个、活跃浮窗开关与关闭按钮。
2. 搜索与范围行 —— 名称/标题/工作区搜索,id: xxx 专用于 Session ID 搜索;工作区、会话、排序、分组四个选择器同处一行。
3. 分类行(展开筛选块后)—— 内置分类与自定义分类(带实时数量),自定义分类的新建与删除都在同一标签框内。
4. 筛选块 —— 默认折叠,只显示一行摘要(当前工作区 · 当前会话 … · 全部 + 排序 · 最近活跃 分组 · 按会话);点击该摘要行即可展开/收起,键盘 Enter/Space 同样有效(摘要行带 role=button / aria-expanded)。展开后才是上面的分类行、范围/会话/排序/分组选择器,以及选项行(隐藏一次性、隐藏长期未活跃、子代理背景色(浅色/深色)、重置筛选);折叠偏好仍然持久化。
5. 汇总行 —— 显示 n/m 个、显示详情、显示已隐藏,以及批量操作入口。
6. 活跃子代理分组 —— 置顶且可折叠,带「一键暂停」;每行包含状态点(运行中为绿点,已结束按结束方式显示空心绿环或实心红点)、名称、Session ID、相对活动时间,以及 ◫ 在侧边栏打开、⏸ 暂停、▶ 继续、⊘ 隐藏、🗑 删除。
7. 详情区 —— 直接来自宿主只读投影的 类型:… · 模型:…,以及官方口径的用量行 ↑ 计费输入 (未缓存…) / ↓ 输出 · 命中 n% · n tps · n 轮 · n 步;运行中的子代理都会显示最新的实时输出(不只当前选中的那一个),已完成的保留最终快照。
8. 活跃浮窗 —— 当前会话里运行中的子代理以紧凑浮窗常驻,每行带实时输出、用量行与暂停按钮;面板关闭且存在运行中子代理时自动出现。浮窗显示期间会为其中每个运行中的子代理各自保留实时会话,与主视图当前选中哪一个无关。

分类标签

内置分类包括:

- 全部
- 其他
- 审计
- 测试
- 实现
- 规划

分类标签会显示当前数量,超过 99 个显示为 99+。

用户可以创建自定义正则分类。自定义分类支持:

- 标签内显示数量。
- 未选中时不显示选中高亮。
- 删除前确认。
- 删除按钮与分类名称处于同一个标签框内。

一次性子代理名称后显示紧凑标签:

⚡ 一次性

可继续子代理不显示额外类型标签。

过滤与隐藏

支持以下过滤与个性化选项:

- 隐藏一次性
- 隐藏长期未活跃
- 显示已隐藏
- 显示活跃浮窗
- 子代理背景色自定义:可开启/关闭子代理会话的独立背景色,支持分别配置深色主题与浅色主题下的背景色,进入子代理时一目了然。
- 重置筛选

暂停与一键暂停

- 浮窗一键暂停:活跃子代理浮窗头部提供“⏸ 一键暂停”按钮,点击并二次确认后批量暂停所有活跃的可继续子代理。
- 浮窗单项暂停:浮窗内每个正在运行的可继续子代理卡片均有“⏸ 暂停”按钮,点击确认后暂停该子代理。
- 管理面板单项暂停:列表和活跃分组中的每个运行中可继续子代理均有“⏸ 暂停”按钮。
- 管理面板一键暂停:“活跃子代理”折叠分组头部右侧提供“⏸ 一键暂停”按钮,支持一键暂停全部活跃子代理。
- 继续已结束的子代理:已结束(非运行中)的可继续子代理行在操作区显示“▶ 继续”,点击后向该子代理发送一条本地化的继续指令(中文界面「继续」、英文界面 “continue”),让它接着跑。运行中与一次性子代理的行不显示该按钮;宿主没有该能力时按钮不渲染(纯能力探测,从不比较版本号)。管理器面板本身就在父会话 header 里,所以“父会话 agent 必须存活”这一前提在正常使用下天然满足;父会话不可用时只在控制台告警,不会把异常抛给用户。

隐藏是插件本地状态,只在列表不显示子代理,不会删除 DSH 会话或工作区文件。默认情况下:

- 列表不显示已隐藏子代理。
- 标题栏入口的总数和活跃数扣除已隐藏子代理。
- 勾选“隐藏一次性”后,入口按钮统计也会扣除一次性子代理。
- 卡片右侧提供 👁 隐藏 / 🙈 取消隐藏 按钮。

批量操作与永久删除

点击结果统计右侧的“批量操作”进入批量模式。批量模式下:

- 整张子代理卡片都变为选择区域。
- 点击卡片任意位置即可选中或取消选中。
- 复选框支持普通选择和 Shift 连续选择。
- 不会跳转到子代理会话。
- 隐藏单个操作按钮。
- 已隐藏项显示 已隐藏 标签。
- “完成”按钮使用高亮样式,点击后退出批量模式。

可用批量操作:

- 全选当前筛选结果。
- 清空选择。
- 选择 N 小时以前的子代理。
- 批量隐藏 / 批量取消隐藏 / 一键全部隐藏。
- 批量删除:将选中的子代理永久从磁盘、投影缓存、工作区索引和内存会话中彻底销毁。
- 一键删除全部:一键彻底清理当前视图中的所有子代理。

单项卡片在非批量模式下也提供 🗑 删除 按钮,点击确认后彻底销毁。所有删除操作完全由人类用户在 UI 侧主动操作,子代理不会也不需要耗费时间去感知或调用工具。

实时活动与流式输出

当 DSH 会话 API 提供绑定会话与实时事件时,卡片底部会显示实时活动:

- 最新两行模型文本或思考文本。
- 正在运行的工具调用,例如 Read、Bash(优先显示工具说明或目标文件名)。
- 最近完成的工具调用及成功/失败状态。
- 上下文注入,例如 skill-catalog 或插件系统提示。
- 命令状态。

实时输出具有金属光泽扫光动效;子代理结束后保留最后显示快照,并变为灰色。输出区域最多显示两行,避免持续滚动导致内容难以阅读。

每个运行中的子代理都有自己的实时流(dsh 0.1.6-alpha.2 起):宿主 sessions.binding(id) 的契约是「借用已被保留的绑定,不创建保留」,而官方客户端里唯一保留会话的是主会话视图——它只保留当前选中的那一个。因此插件改为自己成为保留者:sessions.retain(target, { source: 'subagentWorkspaceUi' }) 拿到 SessionReference,用 reference.binding 取 session / eventSource,不再依赖「是否被选中」。

保留是有界且成对释放的:

- 浮窗常驻:浮窗显示期间,对其中每个运行中的子代理各保留一个引用。
- 面板仅可见行:管理面板只对当前筛选/分组后实际渲染出来的运行中行保留,打开面板不会去加载全部历史子代理。
- 上限 8:浮窗优先,其次按最近活动优先;超出上限的运行中行按快照显示(仍有用量等持久信息)。
- 成对释放:行不再渲染、子代理转为非运行态、浮窗/面板关闭或插件卸载时调用 release();重复释放幂等。

兼容两个 API 代际(自动探测):

- dsh 0.1.6-alpha.2 起:自己 retain(reference.binding.eventSource 原始 SessionEvent 事件流);宿主未提供 retain 时回退借用式 binding(id)。
- dsh 0.1.2-alpha.2:binding.eventSource(原始 SessionEvent 事件流)推导实时输出。
- dsh 0.1.1-rc.2 及更早:回退 session.getSnapshot().chat.legacy(对话快照)路径。

按能力探测自动切换(不判版本号),向前兼容,老版本行为不变;两条路径都拿不到绑定时,界面回退到持久化摘要。

已结束的行还会用状态点区分结束方式:正常结束为空心绿环,异常结束(⏸ 停止/aborted、error、blocked、max-tokens 等)为实心红点,hover 显示「正常结束 / 异常结束」文字(zh+en)。判定只读子代理自身的公共只读投影 subagentTiming.lastTurnCompleted(宿主仅在 turn/end 写入、turn/start 删除);宿主不提供该投影时保持原样,绝不把“未知”显示成“正常”,运行中的行保持原绿点。

界面说明

从上到下依次为:

1. 标题栏入口:显示活跃数 / 总数,点击打开管理面板。
2. 搜索框:普通文本搜索;使用 id: xxx 查询 Session ID。
3. 范围和排序行:工作区、会话、排序、分组四个紧凑控件。
4. 分类标签行:分类名称和数量。
5. 筛选块:默认折叠为一行摘要(范围 · 会话 · 分类 | 排序 · 分组),点击摘要行或按 Enter/Space 展开;展开后包含分类标签、筛选选项(隐藏一次性、隐藏长期未活跃、子代理背景色、重置筛选)。
6. 结果统计:显示当前结果数量和批量操作入口。
7. 结果列表:活跃分组、会话/工作区分组、子代理卡片和实时状态。
8. 行内 ◫ 按钮:在右侧边栏打开该子代理,主对话不跳转(见「在右侧边栏打开子代理」一节)。
9. 行内用量与统计:卡片详情行与浮窗显示同一行 ↑ 计费输入 (未缓存…) / ↓ 输出 · 命中 n% · tps · 轮数 · 步数,口径与官方 composer 页脚一致;完整信息(总量、各分桶、命中率、速度、模型/工具/首字耗时)在原生 title tooltip 中。

插件不在左侧全局菜单增加入口按钮;入口仅位于会话标题栏。

安装

在插件目录执行:

dsh plugin --profile web add file:.

升级或重新安装时可以先移除旧版本:

dsh plugin --profile web remove dsh-subagent-workspace-ui
dsh plugin --profile web add file:.

插件 bundle 会自动加载 cordis.patch.yml:安装期间插入管理器,并且只遮蔽一个 slot——用 priority: -1 的标题位遮蔽占用 conversation.session.header.lineage,从而让 DSH 自带的 ui-subagent 血统下拉保持不可见。自带 ui-subagent 插件本身保持启用(本插件不再整体禁用它),因为新版「在侧边栏打开」按钮正是复用它提供的 subagentchat 右侧栏标签页。该遮蔽渲染的是会话标题而不是空内容,所以子代理会话标题不会消失。卸载插件后,这层 bundle patch 会被移除,宿主的 ui-subagent 设置从未被改动,恢复如初。请重启现有的 dsh web 进程,然后刷新:

http://127.0.0.1:3080

如果之前在 $DSH_HOME/profiles/web/cordis.patch.yml 中手动禁用了 ui-subagent,那条配置属于用户所有,插件不会覆盖、也不会依赖它——可以保留。

数据边界与兼容性

v1.8.0 及以后版本支持 dsh 0.1.5-rc.3、0.1.6-alpha.2 与 0.1.7-rc.1,并对所有 DeepSeek Harness 版本保持向后兼容。这些宿主分属两代接口——0.1.5-rc.3 与 0.1.6-alpha.2 仍发布 subagentsByParent、refreshSubagents 与 setSubagentCatalogOpen,而 0.1.7-rc.1 删除了 sessions.setSubagentCatalogOpen、把 refreshSubagents(parentSessionId) 改名为 refreshProjections(sessionId)、并把 SessionListState.subagentsByParent 换成父会话自身的 subagentCatalog 投影。插件对每一项都做能力探测,因此两代宿主各自走可用路径,从不比较版本号。

0.1.5-rc.3 上实测无降级:全新实例 + 一个运行中子代理时,管理器在实时会话上正常打开,行显示目录标签、类型:可继续、具体模型 id、◫、暂停/隐藏/删除、渲染该子代理正在运行的 bash 工具的实时输出区,以及用量数字——控制台没有来自本插件的错误。

插件只管理当前 DSH Web 客户端运行时已经发现的子代理目录,不伪造不存在的历史数据。首次加载以 40 条为一页;普通分页可以继续加载,批量时间选择最多扩展到 1000 条。

公共 SessionSummary 不保证提供原始提示词或全部历史日志,因此插件不查询、不显示提示词。类型与模型改由宿主的公开投影提供,见下一节;实时输出按能力探测自动切换两种公开接口:

dsh 0.1.6-alpha.2 起(retain 契约):插件自己创建并持有绑定
sessions.retain({ parentSessionId, childSessionId, mode }, { source: 'subagentWorkspaceUi' })
→ reference.binding.eventSource   # 引用存续期间始终可用
→ getSnapshot().entries           # 原始 SessionEvent:assistant/chunk、tool/call、tool/result…
→ release()                       # 行不再渲染 / 停止 / 浮窗·面板关闭 / 插件卸载

宿主没有 retain(能力探测):回退到借用他人保留的绑定(0.1.2-alpha.2 新 API)
sessions.binding(childId).eventSource
→ open()
→ getSnapshot().entries

dsh 0.1.1-rc.2 及更早(旧 API):对话快照
sessions.binding(childId).session
→ session.open()
→ session.getSnapshot().chat.legacy

如果在当前宿主拿不到对应的实时数据(没有 retain、也借不到绑定,或该行超出 8 个保留上限),插件只显示持久化的会话摘要和统计信息。

类型与模型(只读投影)

子代理的「类型」与「模型 provider/id」来自宿主的公开投影,不新增任何 RPC、也不写入任何状态:

类型:同一个取值函数,只读的目录来源与身份来源,按此顺序回退
ctx.sessions.list.getSnapshot().subagentsByParent[parentId].entries           # dsh ..0.1.6-alpha.2
→ entry.mode                       # 第 1 级:已发现的目录条目(该父会话的目录被拉取后才存在)
ctx.sessions.list.getSnapshot().byId[parentId].projectionValues.subagentCatalog   # dsh 0.1.7-rc.1..
→ entry.mode                       # 第 1' 级:父会话自身的目录投影(同一批直接子代理,目录事件顺序)
ctx.sessions.list.getSnapshot().byId[childId].projectionValues.subagent
→ { mode, label, seq } | null      # 第 2 级:子会话自身的身份投影(随实时控制流下发)
→ 显示值 = 第 1 级 ?? 第 1' 级 ?? 第 2 级   # 全部拿不到 = 沿用既有 typeLoading 兜底文案

模型:会话投影 modelSelection(按 key 能力探测,读不到即视为宿主不提供)
ctx.sessions.list.getSnapshot().byId[childId].projectionValues.modelSelection
→ { lastUsed, next }               # next = 待生效选择 ?? lastUsed
→ 显示值 = next ?? lastUsed        # { provider, model, reasoningEffort? }

显示规则在三处完全一致,只有密度不同:

| 位置 | 显示形态 |
| --- | --- |
| 管理面板列表行的元信息行 | 不含模型(保持原样:时间、统计) |
| 卡片详情行(默认展开) | 类型:可继续 · 模型:newapi-test/DeepSeek-V4.1-Flash · high |
| 活跃子代理浮窗 | 紧凑形态:可继续 · newapi-test/DeepSeek-V4.1-Flash · high |

- reasoningEffort 仅在宿主提供时追加( · high),宿主不提供就不显示占位符。
- 三处共用同一个 modelText() 取值函数,来源、优先级(next ?? lastUsed)与兜底逻辑完全相同,浮窗只省略字段标签。
- 类型由同一个取值函数 childModeOf 按同一回退顺序解析,详情行、条目徽章与浮窗共用:先取已发现的目录条目,再回退到子会话自身的 subagent 身份投影。第 2 级正是「刷新页面后不打开管理面板也能拿到正确类型」的原因——宿主在实时控制流与每次 session-added 摘要里都会下发该投影;而第 1 级只在某个父会话的目录被拉取(打开面板即其中一种)之后才出现。两级都拿不到时沿用既有兜底:面板与浮窗显示 类型待加载(英文界面 type loading…),不空白、不出现 null。
- 宿主未提供该投影(例如 0.1.1-rc.2)、投影值为空或 provider/model 为空串时,统一显示兜底文案 模型未知(英文界面 model unknown),不会出现空白或 null/null。该兜底使用独立 i18n 键 modelUnknown,不复用 typeLoading:老版本宿主上类型与模型各自独立降级(实测同行为 类型:类型加载中… · 模型未知)。
- 只读、无切换入口:插件不调用 selectedModel 等任何模型写入 API,也不提供模型切换 UI;官方 SDK 对子代理地址的模型选择明确不可用(model selection is unavailable for addressed subagent sessions)。

打开子代理会话的三级能力探测

dsh 0.1.2-alpha.5 ~ 0.1.6-alpha.1:会话控制器入口
ctx.sessions.openSubagent(address)   # 精确子代理地址
ctx.sessions.open(sessionId)         # 保留的会话导航

dsh 0.1.6-alpha.2 及以后:工作区导航服务
ctx.get('uiWorkspace').openSession({ parentSessionId, childSessionId, mode } | sessionId)

两者都不存在:提示当前 dsh 版本缺少可用的会话导航接口

uiWorkspace 通过 ctx.get('uiWorkspace') 读取,而不是必填注入,因此未注册该服务的宿主(0.1.2-alpha.5 之前的全部版本)仍能正常加载并继续走会话控制器路径;而移除了 openSubagent/open 的 0.1.6-alpha.2 则走工作区服务。探测顺序按「参数形态」而不是版本号决定:sessions.openSubagent 在所有带它的宿主上都吃 address 对象,而 uiWorkspace.openSession 直到 0.1.6-alpha.2 才接受 SessionTarget——在 0.1.5-alpha.2 … 0.1.6-alpha.1 上它是 openSession(sessionId),内部走 sessions.open(id),传入对象会抛错。因此先试会话控制器一级、把工作区服务作为兜底。控制器路径下优先使用 { parentSessionId, childSessionId, mode } 精确地址,仅在缺少 mode/child 时才降级为普通会话导航,因为 openSubagent 会拒绝非健康目录子项的地址。0.1.2 系列能力探测路径(实时输出走 binding.eventSource、对话标签切换走 slot actions)仍为首选分支,0.1.1-rc.2 legacy 回退路径保持不变。本版本与 v1.8.0 一样支持 dsh 0.1.5-rc.3、0.1.6-alpha.2 与 0.1.7-rc.1,并向下兼容所有 DeepSeek Harness 版本。

归档、分类和最近使用顺序保存在浏览器本地 localStorage 中,不会写入 DSH 会话日志。

在右侧边栏打开子代理(◫ 按钮)

管理面板的每个子代理条目、以及活跃子代理浮窗的每一行,都带一个 ◫ 图标按钮:点击后不离开当前主对话,直接把这个子代理作为 DSH 右侧栏的 subagentchat 标签页打开,标签标题就是子代理的名称/label。两处行为完全一致(浮窗只是紧凑样式),并遵循同一套降级规则:

能力探测(不判版本号):三者缺一就不渲染按钮
ctx.get('sidebarRight')      → 有 openResource 函数
ctx.get('sidebarRightTabs')  → 有 candidates 函数
ctx.sessions.subagentAddress → 是函数(按行取地址)

单行地址:subagentAddress(row.id) 重建为
dsh-resource://subagentchat/session/?parent=…&mode=…
再用 sidebarRightTabs.candidates(address)(官方认定的「谁能打开」检查)验证。
验证为空 → 该行按钮渲染为禁用态并给出可读说明,绝不抛异常给用户。

两个能力面按行、按次解析,绝不在激活时只探测一次:dsh 0.1.7-rc.1 在本插件 apply 之后才注册 sidebarRight/sidebarRightTabs(0.1.6-alpha.2 在 apply 时已就绪),因此激活时的一次性探测会让新宿主上的整列 ◫ 消失,而旧宿主毫无异样。

要点:

- 默认点击不变:点条目本身仍然把子代理打开到主对话区(与 v1.5.0 一致);新按钮 stopPropagation,既不触发默认跳转,也不会误触批量选择。
- 地址可用性:一次性与可继续子代理都能打开。ctx.sessions.subagentAddress() 只能解析当前客户端运行时已经发现的子代理,因此刚派发、尚未被目录刷新的子代理,其按钮会短暂处于「没有可用的子代理地址」的禁用态(打开一次管理面板即会刷新目录并恢复可用);跨工作区、基准测试等拿不到地址的条目同样只禁用、不报错。
- 落点:右栏会自动展开,主对话保持在原会话,可以一边看子代理一边继续主对话。
- 右侧栏里的子代理会话使用 DSH 官方的只读输入区(一次性子代理记录 / “one-shot subagent record”),这是复用官方标签页带来的既有行为,属预期。
- 图标按钮带 tooltip:可用时为「在侧边栏打开 」,不可用时为「该条目没有可用的子代理地址,无法在侧边栏打开」;中英文案均已接入 i18n。

开发与验证

插件的客户端实现自 v1.4.0 起使用 TypeScript 编写,位于 src/client/;发布产物 lib/client.js 由构建脚本生成,不要直接编辑。宿主入口 lib/index.js 仍为手写。

pnpm install      # 安装开发依赖(sucrase + typescript)
pnpm run build    # scripts/build.mjs 从 src/client 生成 lib/client.js
pnpm run check    # 构建 + tsc --noEmit + node --check lib/index.js + 产物新鲜度门禁

pnpm run verify:build 会对生成的 lib/client.js 与改造前的手写版本(git 引用 v1.3.4)做 token 级与行级比对;迁移完成后它同时充当差异查看器,可精确显示任何有意改动引入的 token/行差异。

冒烟测试(可指定 dsh 版本)

./test.sh                          # 本地 dsh 跑 web,端口 8084
./test.sh 8085                     # 指定端口
DSH_VERSION=0.1.6-alpha.2 ./test.sh  # 用 pnpx 拉取 0.1.6-alpha.2 跑 web(默认经 proxychains4 -q 走代理)
DSH_VERSION=0.1.1-rc.2 ./test.sh   # 旧版本兼容性冒烟(legacy 导航路径)
DSH_PLUGIN_DIR=.worktrees/x ./test.sh  # 冒烟其它 checkout 的产物

DSH_HOME 固定用隔离目录($HOME/tmp/dsh-test,可用 DSH_SMOKE_HOME=/path 覆盖),并在启动前拒绝把真实 ~/.dsh 当冒烟目录。DSH_VERSION 非空时用 pnpx @deepseek-ai/dsh@ 运行,可用于冒烟任意 dsh 版本(如 0.1.6-alpha.2、legacy 的 0.1.1-rc.2)。pnpm 12 默认忽略依赖的生命周期脚本,脚本会为 dsh 的原生依赖逐个传 --allow-build=(清单可用 DSH_ALLOW_BUILDS=… 覆盖)。

致谢与参考

- UI 本地化(zh/en)由 @Marcuss2 在 PR #1 中贡献,特此致谢!
- 子代理永久删除、会话生命周期清理及快照刷新机制的设计参考并致谢开源项目:@heiheiha798/dsh-plugin-subagent-delete。

v1.9.0 发布说明

- 特性:在管理器中让已结束的子代理继续运行。行的操作区(⏸ 暂停 / ⊘ 隐藏 / 🗑 删除 一组)新增“▶ 继续”,点击后向该子代理发送一条本地化的继续指令(中文界面「继续」、英文界面 “continue”),让它接着跑。实现是纯能力探测、从不比较版本号:有 retain 的宿主(0.1.6-alpha.2 起,含 0.1.7-rc.1)走 sessions.retain(...) → binding.session.prompt([{ type: 'text', text: '继续' }], 'queue')(英文界面传入 'continue'),0.1.5-rc.3 没有 retain,走借用 sessions.binding 得到的同一个 face,同样可用。宿主没有该能力时按钮不渲染;运行中与一次性子代理的行也不显示该按钮;管理器面板本身就在父会话 header 里,因此“父会话 agent 必须存活”在正常使用下天然满足(父会话不可用时只在控制台告警,不会变成未捕获的异常)。
- 特性:筛选块默认折叠。管理器筛选块首次打开即为折叠态,只显示一行摘要(当前工作区 · 当前会话 … · 全部 + 排序 · 最近活跃 分组 · 按会话);点击该摘要行即可展开/收起,键盘 Enter/Space 同样有效(摘要行带 role=button / aria-expanded)。折叠偏好仍持久化。顺带修掉一个 bug:此前在偏好未设置时,切换按钮因 !undefined === true 只能折叠、无法展开。
- 特性:已结束子代理区分正常/异常结束。正常结束显示空心绿环,异常结束(⏸ 停止/aborted、error、blocked、max-tokens 等)显示实心红点,hover 显示「正常结束 / 异常结束」文字(zh+en)。数据只来自子代理自身的公共只读投影 subagentTiming.lastTurnCompleted(宿主仅在 turn/end 写入、turn/start 删除);宿主不提供该投影时保持原样,绝不把“未知”显示成“正常”。该判定字段自 dsh 0.1.7-alpha.1 起才由宿主投影:0.1.5-rc.3 与 0.1.6-alpha.2 只发布 { settledMs, active? },因此那两台宿主上已结束行保持中性状态点、不区分结束方式(有据才下结论,绝不伪造判据)。运行中的行保持原绿点。
- 兼容性:以上三项都只依赖能力探测、从不比较版本号;v1.9.0 与 v1.8.0 一样支持 dsh 0.1.5-rc.3 / 0.1.6-alpha.2 / 0.1.7-rc.1(已在三台上实测;终态标记在 0.1.5-rc.3 / 0.1.6-alpha.2 上按上述边界保持中性点)。本版代码改动只有两处——行操作按钮对齐(src/client/styles.ts)与一处失实注释订正(src/client/format.ts)——其余为版本号与文档:pnpm run check 全绿(bundle 新鲜度一致)。

v1.8.0 发布说明

- 修复:只有当前被选中的子代理才更新实时输出。sessions.binding(id) 只是借用别人已经保留的绑定,而官方视图只保留主视图当前选中的那一个会话——于是其余子代理根本没有实时区域。现改为插件自己成为保留者:浮窗保留它显示的每个运行中子代理、面板保留它渲染的运行中行,两者共用上限 8(浮窗优先、最近活跃优先),行停止渲染或停止运行、界面关闭、插件卸载时成对释放;宿主没有 retain、以及超出上限的行,仍回落到借用式绑定、再回落到持久化摘要。随之落地的一项修复:未选中行的「暂停」现在真正生效——此前它调用的是一个并不存在的绑定,属于静默空操作。
- 兼容 dsh 0.1.7-rc.1:该宿主删除了 sessions.setSubagentCatalogOpen、把 refreshSubagents(parentSessionId) 改名为 refreshProjections(sessionId)、并把 SessionListState.subagentsByParent[parent] 换成父会话自身的 projectionValues.subagentCatalog 投影(同一批直接子代理,目录事件顺序;条目去掉了 kind 判别字段,并多出一个 mode: 'unknown' 取值)。在缺少防护的旧实现里,被删除的方法从管理器面板的打开副作用里抛出,错误边界随即带走整个标题栏 slot——点开管理器会让标题栏直接崩掉。现在所有宿主调用一律能力探测、从不比较版本号:同一个取值函数在 0.1.7-rc.1 及以上读父会话的 subagentCatalog、在 0.1.6-alpha.2 及以前读 subagentsByParent(宿主两者都发布时旧来源优先,因此旧宿主读到的与改动前逐字相同),刷新优先 refreshProjections、回落 refreshSubagents,setSubagentCatalogOpen 缺失则跳过;mode 为 unknown 的条目保留 label,并把类型让给子会话自身的身份投影,而不是直接采信该取值。
- 修复:0.1.7-rc.1 上每行的 ◫「在侧边栏打开」整列消失。该宿主在本插件 apply 之后才注册 sidebarRight/sidebarRightTabs,激活时的一次性探测便把两者永久判为不存在。现改为按行、按次解析:从不发布这两个能力的宿主依旧完全不渲染按钮(与改动前逐字相同),而能力可用但该行地址校验不通过时,仍保留既有的禁用按钮与可读原因。
- 文档:类型/模型阶梯补上两代目录来源;兼容性小节记录上述 0.1.7-rc.1 接口变化。
- 微调:活跃浮窗背景固定为 95% 不透明度。dsh 0.1.7-rc.1 把 --dsw-specific-menu 改成了带透明度的「玻璃」色——深色主题 #30313680(alpha 0x80 = 50%)、浅色 #f8f9fa94(58%)——而 0.1.6 把同一个令牌指向不透明的 --dsw-alias-bg-layer-3,于是浮窗在新宿主上变得半透明。现在浮窗改用宿主不透明的表面色令牌按恰好 95% 合成(color-mix,并把旧声明保留在其前,作为不具备 color-mix 的宿主的回落),顺带让浮窗在 0.1.6 与 0.1.7 上的观感一致——不判断版本号,色调仍来自宿主自己的主题令牌。

已在 dsh 0.1.6-alpha.2 与 0.1.7-rc.1 上验证:pnpm run check 全绿(bundle 新鲜度一致,98,439 字节)。0.1.7-rc.1 上打开一个真实运行中的会话,面板列出全部 7 个子代理,行名回到目录标签、Type: continuable、模型与用量齐全、每行都有 ◫,且点击后控制台没有任何错误;0.1.6-alpha.2 上面板对象与改动前逐字节相同,同一批数据仍显示与改动前相同的未知项(宿主从未发布过投影的子代理依旧是 model unknown,与 0.1.6 上的表现完全一致)。浮窗背景随后在一个真实运行中的 0.1.7-rc.1 实例上做了像素测量:它渲染为 rgb(51,52,54),正是 #353638 按 95% 合成、叠在其身后的 rgb(21,21,23) 标题栏背景上的精确预测值,而此前的 50% 玻璃色在该处应渲染成 rgb(34,35,38);把同一个浮窗放到亮 22 级的背景(rgb(43,43,45))上,它最多只变化 1 级——这正是 95% 表面的行为,50% 表面不可能如此(它会变化 11 级)。0.1.7-rc.1 宿主自带的 dsh-client-ui-open-in-app 会在加载期报一条 inactive context,与本插件无关,本次刻意不动。

v1.7.0 发布说明

- 修复:◫「在侧边栏打开」按钮的点击面积远小于 24×24 CSS px 下限:面板行实测 18.03×16、活跃浮窗 17.14×17,等于只有字形本身可点。现分别为 24.03×24 与 24.14×25,而布局盒、字形位置、行高与相邻按钮坐标逐像素不变——padding 的增量被等量负 margin 抵消,hover 药丸改由 ::after 伪元素承载、其 inset 恰好还原原边框盒(18.03×16 / 17.14×17)。唯一的渲染差异是合成顺序:hover 叠加层现在画在字形之上而非之下(深色主题每通道 ≲1.3/255、浅色 ≲0.7/255,肉眼不可分辨)。禁用行仍保持透明度与 not-allowed 光标;扩大后的区域不会把「按行」变成「拖浮窗」——closest('button,input,label') 判定的是 DOM 祖先而非几何。
- 文档:dshmarket 截图重拍:在 1.7.0-dev 分支(commit 79d9d0f)上真实运行的 dsh 0.1.6-alpha.2 实例拍摄,管理器面板与活跃浮窗各出中英两张(.en.png,真正切换宿主语言而非给中文图配英文题注),深色主题、1280×900 CSS @ DPR 1.75。拍摄时同一会话并存 4 个后台子代理(3 个运行中、1 个已完成),因此每行都带真实类型、模型与官方口径用量行(不再是兜底文案),◫、暂停、隐藏、删除四个动作齐全。screenshots.json 现列出全部四条路径(dshmarket 轮播上限 6),两个 README 各自引用对应语言的图(不再共用同一对),且「界面截图」导览已按新 UI 重写——旧导览仍在描述本版已不存在的控件(「显示已归档」「→ 归档」等)。

已在 dsh 0.1.6-alpha.2 上实机验证:pnpm run check 全绿——本版产物只有命中区这一处 CSS 改动,截图工作未触碰任何源码(只改 4 张 PNG + screenshots.json + 两个 README)。命中区另经几何核算(padding / margin / ::after inset 与原边框盒的算式)与按钮列改造前后的像素剖面对照;并用隔离 DSH_HOME 跑 ./test.sh 冒烟:在面板行与浮窗上点击新增的边缘内侧都能打开侧边栏、孤儿禁用行行为正确,且 A/B 验证了按按钮不会变成拖浮窗、也不会误触邻居的暂停按钮。

v1.6.0 发布说明

- 特性:在右侧边栏打开子代理(◫ 按钮):列表行与活跃浮窗都新增 ◫,把子代理打开为 DSH 自带的 subagentchat 右侧栏标签页,主对话不跳转。按钮按能力探测、不按版本号判断:运行时没有 sidebarRight / sidebarRightTabs 能力、或没有标签页类型认领该行地址时,按钮整体隐藏;单行地址解析不出来时保持可见但禁用,并给出可读原因。点击不会触发行的默认跳转,也不会误触批量选择。由于该标签页正是自带 ui-subagent 提供的,bundle patch 不再整体禁用该插件:现在只以 priority: -1 遮蔽 conversation.session.header.lineage(标题位遮蔽,子代理会话标题因此不会消失),ui-subagent 本身保持启用;卸载时用户自己的 cordis.patch.yml 配置依旧原样保留。
- 特性:显示子代理的类型与模型:provider/model(宿主发布时附推理档位)全部取自宿主公开只读投影,类型与模型各自独立降级(类型待加载 / 模型未知);不新增任何 RPC,也不提供模型切换入口。
- 修复:类型在打开过一次管理面板前显示「类型待加载」:此前 mode 只从「惰性拉取的子代理目录」读取,而该目录只有管理面板会拉,于是宿主明明已发布 mode、界面却落兜底,且打开一次面板后同一条目会突然「变对」。现改为同一个取值函数、同一回退顺序:① 已发现的目录条目 → ② 子会话自身的 subagent 身份投影(随实时控制流与每次 session-added 摘要下发,刷新页面即已具备)→ ③ 既有兜底文案;因此不打开面板、首屏即正确。刚派生的子代理在被发现前,其侧边栏按钮可能短暂禁用——这是既有的能力探测行为,不是缺陷。
- 修复:行内用量与官方 composer 页脚对不上:同一子代理,插件显示 in 39.1k / out 12.7k · cache hit 64%,官方页脚显示 143K tok · Cache hit 70%。原因有二:行内「输入」实为未缓存输入这一桶,且命中率分母取了四项总和(把输出 token 也算进提示词侧比例)。现全部改为官方口径:↑ 计费输入 (未缓存…) / ↓ 输出 · 命中 n% · tps · 轮数 · 步数,命中率分母只取计费输入,tps = decodeTokens / (decodeMs / 1000)(取自同一个公开 sessionStats 投影);完整信息——总量、各分桶、命中率、速度、以及模型/工具/首字耗时——移入行与浮窗的原生 title tooltip。官方命中率格式化函数已逐表达式移植,部分命中永远不会被凑成 100%。
- 文档:把血统 slot 遮蔽如实描述为标题位遮蔽。宿主会话模块在该 slot 一旦存在条目就会替换调用方 fallback,因此字面上的「空占位」会删掉子代理会话的标题。

已在 dsh 0.1.6-alpha.2 上实机验证:pnpm run check 全绿;并在同一张截图里对同一子代理与官方页脚交叉核对(132 tok/s / 缓存命中 98% / 29.8M tok 对 132 tps / 命中 98% / ↑ 29.7m + ↓ 119.6k = 29.8M)。命中率格式化函数另有差分测试:运行时从已安装的宿主客户端切片出官方三个函数,对 80,980 组 (read, billed) 断言输出完全一致(0 处不符,其中 425 组是旧实现给出不同结果的用例)。

v1.5.0 发布说明

- 修复:dsh 0.1.6-alpha.2 点击子代理行无法打开会话:报错 TypeError: ctx.sessions.openSubagent is not a function,且该错误被行点击的 try/catch 吞掉,界面表现为「点了没反应」。0.1.6-alpha.2 删除了 sessions.openSubagent(address) 与 sessions.open(id);插件改为运行时三级能力探测(sessions.openSubagent → sessions.open → uiWorkspace.openSession),不再硬切调用,同一份产物在上下游变更两侧都能工作;三级都不可用时在界面上提示当前版本不支持。
- 修复:三级探测的顺序按参数形态决定:0.1.5-alpha.2 … 0.1.6-alpha.1 这一带同时存在两级 API,但其中的 uiWorkspace.openSession(sessionId) 只接受字符串,传入 address 会走 sessions.open(id) 并抛 sessions.select: unknown session [object Object];而 sessions.openSubagent(address) 在这些宿主上仍然存在且吃对象。若优先试工作区服务,该异常会被吞掉并误报「当前版本不支持」,因此改为 address 先走会话控制器一级、uiWorkspace 作为 0.1.6-alpha.2+ 的兜底。已在危险带两侧实机验证:0.1.5-alpha.1(客户端包 0.1.5-rc.2)上顺序修正后的产物约 142 ms 完成会话切换、无告警、无导航报错;0.1.6-alpha.2 上服务端实际下发的产物仍命中 uiWorkspace.openSession 并正常打开子代理会话。
- 修复:dsh 0.1.6-alpha.2 的 current 字段缺失:会话列表快照不再提供 current,而当前会话解析与「对话」标签页兜底依赖它。两处均已优雅退化——兜底逻辑识别 current 缺失后立即尝试点击宿主自身的「对话」标签,并在 2 秒内安静放弃,不再空转 8 秒。

v1.4.0 发布说明

- 支持 DeepSeek Harness 0.1.5-rc.2,向下兼容所有 dsh 版本:适配 0.1.5-rc.2 的对话页视图结构变化(slot 渲染器不再向未声明 store 的注册项注入 actions;视图选择改为按会话持久化,新增「轨迹」等标签页)——点击子代理重新正确落回「对话」标签页(actions 缺失时改为点击宿主自身的「对话」标签完成切换,激活与持久化语义完整)。0.1.2 系列能力探测路径保留为首选分支、调用方式不变,0.1.1 legacy 回退路径零改动,旧版本行为完全一致。
- 客户端迁移至 TypeScript:src/client/.ts 成为唯一源码,lib/client.js 由 pnpm run build(sucrase 逐字类型擦除 + 确定性链接)生成,不再手写。新增 verify-build(与 v1.3.4 手写 golden 做 token/行级比对——迁移等价证明兼有意改动差异查看器)与 verify-fresh(过期 bundle 门禁);pnpm run check 一键完成构建 + 类型检查 + 语法检查 + 新鲜度校验。
- 修复:筛选摘要潜伏 ReferenceError:折叠筛选区且选中具体工作区时,scopeKey 未定义变量导致报错,已修正为 workspaceKey(TS 迁移期间发现)。

v1.3.4 发布说明

- 特性:UI 本地化(zh/en):通过 DSH client-locale 将插件全部 UI 文案本地化,支持中文/英文(英文为 AI 辅助翻译)。标签、按钮、统计、实时输出(上下文注入 / 思考中 / 工具说明)、确认弹窗等均改为走翻译键;跟随宿主语言切换。由 @Marcuss2 在 PR #1 中贡献,感谢!

v1.3.3 发布说明

- 修复:批量删除大数量不再报错:服务端请求体上限从 64 KiB 提升到 8 MiB,批量删除选中数百上千个子代理时不再触发「body too large」导致「删除请求失败」。
- 特性:隐藏详情时 tooltip 查看统计:关闭「显示详情」后,行/名字的悬停 tooltip 显示 输入/输出 · 缓存命中 · 轮数 · 步数 统计。
- 修复:实时输出显示上下文注入与思考:新 API 实时推导此前漏掉了 user/message 上下文注入;已补齐 上下文注入 ·  行,并修复思考被活动行掩盖的问题。
- 特性:思考中用动画图标标示:运行中思考阶段显示旋转的「思考中…」,不再依赖低优先级的思考文本。

v1.3.2 发布说明

- 性能优化(显著降低卡顿):
- 子代理管理器改为单次基础扫描(subagentRows),allRows/activeRows/tabCounts 不再各自全表扫描并重复合并 modeMap;tabCounts 用延迟值计算、面板关闭时不计算。
- useSessions 细粒度订阅(只订阅 byId/subagentsByParent/current 三字段并浅比较),无关的会话帧不再触发整组重渲染。
- 活跃浮窗/面板限制同时实时订阅的子代理数(liveCap,默认 3,0=不设限);关闭实时显示或关闭浮窗/面板时完全停止 live 订阅并释放资源,而非仅隐藏。
- 点击子代理自动切换到「对话」选项卡:进入子代理时自动落到对话视图。
- 修复:批量「选择 N 小时前」:按当前视图一次性选中真正超过 N 小时的子代理(数量准确),可正常增减,取消后不会自动勾回。

v1.3.1 发布说明

- 兼容 dsh 0.1.2-alpha.2 与 0.1.1-rc.2:实时输出按能力探测自动切换两条链路——新版本(0.1.2-alpha.2)走 binding.eventSource 原始事件流推导;旧版本(0.1.1-rc.2 及更早)回退 chat.legacy 对话快照。老版本行为不变,向前兼容。
- 实时工具调用显示说明/文件名:进行中与已完成的工具调用现在优先显示工具 description 或目标 path/file_path(例如 bash · Print current working directory、write · subagent-AJ.txt),不再只有工具名。工具参数跨分片累积,参数完整后才渲染详情,避免流式过程中显示残缺 JSON。
- 清理:移除已不存在的 dsh-client-runtime 客户端注入引用。
- 测试脚本支持指定版本:DSH_VERSION=0.1.1-rc.2 ./test.sh 可冒烟测试旧版本兼容性。

v1.2.4 发布说明

- 批量选择优化:修复批量模式下直接点击 checkbox 偶现无响应的问题;支持 Shift 连选与连续批量取消选中(跟随上一次点击意图)。

v1.2.3 发布说明

- 按需加载优化:列表默认仅自动加载最近 10 个子代理的历史最新消息;更早的历史子代理默认不建立会话绑定,改为显示「📥 加载最新消息」按钮,大幅降低大列表初始加载时的资源开销。
- 运行中不受限制:正在运行中的子代理始终保持自动连接与实时输出流更新。
- 单项按需加载:点击任意历史子代理的「📥 加载最新消息」按钮后即时打开会话并保持显示,不触发整行跳转。

v1.2.2 发布说明

- 自适应相对时间:子代理卡片的时间显示优化为自适应相对时间(x 秒前、x 分钟前、x 小时 x 分钟前、x 天前),提升可读性。
- 提示信息重命名:悬停时间的 Tooltip 标签统一优化为「最近活动:」。

v1.2.1 发布说明

- 修复活跃浮窗中点击子代理的实时输出区域时,第一下无法打开子代理、需要点击第二下的问题(流式输出高频重渲染导致点击事件丢失)。

v1.2.0 发布说明

永久删除

- 增加子代理永久删除功能(支持“带备份删除”与“不备份直接删除”)。
- 批量模式增加“批量删除(带备份/不备份)”以及“一键删除全部”操作。
- 备份目录保存于 $DSH_HOME/subagent-backups/。
- 彻底清理会话磁盘目录、投影缓存、工作区索引与内存注册表,并支持实时同步刷新。

隐藏与视觉

- 归档重构为「隐藏」:以 🙈/👁 眼睛图标一键隐藏或取消隐藏子代理,隐藏仅在列表不显示、不删除会话。
- 已隐藏子代理整行暗化,深浅主题自适应,与正常子代理形成强烈视觉对比。

浏览密度与筛选

- 新增「显示详情」开关(默认开启):取消勾选后卡片收拢为单行,token 统计、提示词预览与实时流式输出不再展开,提升单屏浏览密度。
- 搜索框新增 × 清空按钮,关闭抽屉后保留搜索关键词。
- 搜索框右侧 ⚙ 按钮可折叠/展开筛选区(分类标签、范围/会话/分组/排序下拉、选项行),折叠状态自动持久化。
- 筛选区折叠后在统计行上方显示当前筛选摘要(分类/工作区/会话/排序/分组)。

布局与交互

- 「显示活跃浮窗」开关固定到标题栏统计行(当前会话/工作区/活跃数)右侧。
- 「显示已隐藏」开关固定到列表统计行(显示 M/N 个)右侧。
- 详情区域宽度对齐整张卡片,左右不再截断。
- 子代理行内状态点与隐藏标记垂直居中。
- 筛选折叠按钮(⚙)点击热区加大,更易点中。

v1.1.4 发布说明

- 适配深浅两种主题色。
- 子代理会话专属背景色支持自定义与深浅色独立配置。
- 实时浮窗与管理清单支持单个子代理「⏸ 暂停」与「⏸ 一键暂停」全部活跃子代理(带二次确认)。

v1.1.2 发布说明

- 修复当无活跃子代理时,短路求值导致标题栏按钮左侧意外渲染出数字 0 的问题。

v1.1.1 发布说明

- 测试脚本不再强制要求预先设置 API Key。
- 测试脚本根据自身位置定位项目目录,可从任意工作目录运行。

v1.1.0 发布说明

- 增加右上角活跃子代理浮窗,显示运行时长、实时输出和统计信息。
- 支持在浮窗和管理抽屉中直接打断可取消的运行中子代理。
- 增加浮窗实时输出开关,关闭后可在有限空间显示更多子代理。
- 实时输出按 100ms 节流,并区分最新活动与已完成活动。
- 优先显示工具 description,长文件路径自动缩略。
- 增加 dsh-graph 工作流产生的大量子代理会话管理说明。

v1.0.1 发布说明

- 增加中文文档。
- 完善当前主会话、工作区和会话选择逻辑。
- 增加规划分类和分类数量徽章。
- 增加批量选择、Shift 连选、时间范围选择和批量归档。
- 改进批量模式下的卡片交互和完成按钮视觉反馈。
- 增加活跃子代理置顶、实时工具调用、上下文注入和结束快照。
- 移除 provider/model 查询和显示。
- 移除左侧全局菜单中的子代理入口。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

同作者(miuzel)的其他插件

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群