前言¶
在 DeepSeek Harness(DSH)里同时开多个会话时,侧边栏一行标题往往不够:机器名、工作区、分支、模型、审批状态、上下文占用等事实分散在 Host 侧,浏览器里的 Client 插件无法直接通过 ctx.remote 读到 sessions、tokenMeter、approval 等未暴露 @Remote 的 API。要在不改动输入框(composer)的前提下,把「这一会话正在什么环境里跑、处于什么状态」集中展示,需要专门的 Client 插件配合 Host 侧数据桥。
下面介绍社区插件 dsh-t3-session-ui(维护者 yusufameri),它把 T3 Code 的会话上下文信息层级移植到 DSH 已有插槽里:会话行悬停卡片、行首模型 chip、状态 pill、会话头工具条与 lineage 面包屑,以及通过菜单触发的上下文压缩;不在 composer 上增加任何 UI。
这是什么¶
dsh-t3-session-ui 是 DSH 的客户端类插件(package.json 中 dsh.client.platform 为 web)。每个会话对应一份由插件 Host 半部组装的 context bundle;Host 读不到的事实会省略而不是伪造——例如会话不在 git 工作树内时,分支行不会出现。
信息层级设计来自 T3 Code(MIT 开源);本插件保留相同展示形态,底层数据换成 DSH 的 Session、git 探测与事件瀑布。当前 package 版本为 0.2.0,许可证 MIT。
核心功能¶
挂载面(Seat)与展示内容¶
各 UI 面从同一套 per-session context 读取数据,注册在 DSH 已有插槽上:
| 界面位置 | Seat | 主要展示 |
|---|---|---|
| 会话行悬停卡片 | sidebar.session.row.hover |
状态、机器、工作区、分支(含 dirty)、worktree、模型·提供商、agent preset、父会话、委派深度、审批策略、上下文占用、错误行 |
| 行首 chip | sidebar.session.row.leading |
模型名 + 状态点 |
| 行悬停操作 | sidebar.workspaces.session.row.action |
复制 context bundle(与归档、固定按钮并列) |
| 会话头工具条 | conversation.session.header.utilities |
状态、模型、分支、工作区、审批策略、子 agent 数量、preset、委派深度 |
| 头 lineage | conversation.session.header.lineage |
会话标题及父会话、preset、深度 chip |
| 设置项 | settings.general.item |
本插件偏好:各事实是否显示、机器名覆盖 |
| 头操作 | conversation.session.header.actions |
整包 context 复制为 JSON |
| 行菜单 | sidebar.workspaces.session.menu.item |
复制 context JSON、复制分支名、复制工作目录 |
README 说明:早期版本曾在 composer 放上下文环,已移除;token 详情(如 42% · 83k/200k)现出现在悬停卡的 context 行,Compact context 在会话行 ... 菜单中,调用 DSH 自带 /compact,插件不重新实现压缩逻辑。
状态阶梯(Status ladder)¶
状态在 Host 侧按 T3 Code 优先级解析:
| 阶梯 | DSH 侧判定方式 |
|---|---|
| Pending approval | approval/request 瀑布在 next() 外 bracket,人工决策期间点亮 |
| Awaiting input | user-questions/request 瀑布,同样 bracket |
| Working | api-session/status 存活事件 + 会话日志中未闭合的 turn/start |
| Error | 失败的 turn/end,或 turn 外的 api-session/error |
| Subagent work | ctx.subagents.listChildren(sessionId) |
| Ready | 以上皆否 |
审批与待输入是进程内状态,故从瀑布读取而非仅依赖会话日志。
Host 与浏览器之间的桥¶
浏览器无法直接调用 node:os 或上述 Host API。插件 Host 半部提供围栏 JSON RPC 路由(仅 loopback 及部署声明的可信 authority,并校验 Origin):
POST /t3session/api/hostFacts -> 机器身份,无需 sessionId
POST /t3session/api/sessionContext -> { sessionId } -> context bundle
POST /t3session/api/compact -> { sessionId } -> 执行 /compact
Client 用相对路径 fetch 访问,与 dsh-better-sidebar、@michengai/dsh-codex-ui 同类桥接方式。
主要事实来源(节选):
| 事实 | 来源 |
|---|---|
| 机器标签 | os.hostname() 美化,可被配置或浏览器内显示设置覆盖 |
| 工作目录、preset、父会话、委派深度 | Session.header |
| 提供商、模型、上下文窗口大小 | Session.requestContext() |
| 分支、dirty、worktree | 会话目录下 git(缓存 5s) |
| 已用 token | ctx.tokenMeter.measure(session) |
| 存活与 pending ask | api-session/status、api-session/error、审批/用户问题瀑布 |
| 子 agent | ctx.subagents.listChildren(sessionId) |
| 审批策略 | ctx.approval.overrideOf(session) |
显示偏好¶
偏好出现在 DSH Settings → General 中本插件一行,按浏览器存储在 dsh.t3-session-ui.prefs.v1:可按事实开关(machine、workspace、branch、model、preset、approval、context),以及 machine label 覆盖(优先于 Host 美化主机名)。仅影响本插件渲染,无需 Host 往返;同一 Host 可被多浏览器连接。
安装与启用¶
在 desktop profile 下从插件目录安装(README 原文命令):
dsh plugin --profile desktop add dsh-t3-session-ui
若已有本地检出(无需构建步骤):
dsh plugin --profile desktop add /path/to/dsh-t3-session-ui
移除 bundle 会注销全部 seat,并恢复原有 composer 工具条,无残留。
可选 Host 配置(写入 bundle patch):
- id: t3-session-ui
name: 'dsh-t3-session-ui'
config:
machineLabel: "Shima's MacBook Pro" # 可选;默认使用美化后的 hostname
其余展示项在 DSH 设置里该插件一行中调整。
典型用法¶
- 安装并重启或刷新 DSH Web 客户端后,打开侧边栏会话列表:行首可见模型 chip 与状态点;悬停行可打开 context 卡片查看机器、工作区、分支、上下文占用等(取决于显示开关)。
- 进入会话后,在会话头查看 utilities 条与 lineage 面包屑;需要整包调试信息时,使用头 actions 或行菜单中的「复制 context JSON」。
- 上下文接近窗口上限时,在会话行
...菜单选择 Compact context,由 Host 调用 DSH/compact。 - 若默认主机名不便识别,在 Settings 中设置 machine label 覆盖,或在
cordis.patch.yml中配置machineLabel。
开发侧:纯 ESM、无构建;改 client.js 后刷新页面即可。仓库内 pnpm test 运行 101 项测试(README Development 节)。
适用场景与注意¶
适合:长期在 DSH desktop/Web 客户端多会话并行、需要一眼看到模型/分支/审批/上下文占用,并希望 UI 与 T3 Code 习惯一致的用户。
注意:
- 插件以当前 dsh 进程权限运行;安装前请阅读 GitHub 源码 与 MIT 许可证,自行评估 Host 路由与 git 探测行为。
- 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本介绍不代表官方背书。
- 非 git 工作区、Host 无法探测的分支/worktree 等字段会缺失,属设计行为而非故障。
结尾¶
dsh-t3-session-ui 把 T3 Code 的会话上下文 UX 接到 DSH 已有 sidebar 与会话头插槽,用 Host 侧 facts 桥补全 Client 拿不到的数据,并保留浏览器本地的展示偏好。若你正在整理 DSH 客户端体验,可从目录页或仓库 README 的安装命令起步。