dsh-t3-session-ui:在 DSH 现有界面里呈现 T3 Code 式会话上下文

前言

在 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 设置里该插件一行中调整。

典型用法

  1. 安装并重启或刷新 DSH Web 客户端后,打开侧边栏会话列表:行首可见模型 chip 与状态点;悬停行可打开 context 卡片查看机器、工作区、分支、上下文占用等(取决于显示开关)。
  2. 进入会话后,在会话头查看 utilities 条与 lineage 面包屑;需要整包调试信息时,使用头 actions 或行菜单中的「复制 context JSON」。
  3. 上下文接近窗口上限时,在会话行 ... 菜单选择 Compact context,由 Host 调用 DSH /compact。
  4. 若默认主机名不便识别,在 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 的安装命令起步。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜