Back to home

TheChengXi

dsh-focus

DSH 网页聚焦插件:?focus=<插槽名> 聚焦任意顶层插槽全宽显示,纯 CSS 实现;附完整 intent-flow 设计决策轨迹(需求→设计→执行→关账)DSH (DeepSeek Harness) web focus plugin: ?focus=<slot> shows one top-level slot full-width, pure CSS, no slot shadowing. Includes the complete intent-flow design trail (requirement → design → execute → report).

Stars
0
Language
TypeScript
Created
Aug 16, 2026
Updated
Aug 16, 2026

Introduction

@dsh-focus/focus-plugin

DeepSeek Harness (DSH) web 聚焦模式插件:让 DSH 页面按 URL 参数只显示指定的对话窗口,隐藏其余界面(大侧栏、另一窗口、详情面板),主视野留给代码。

功能

URL效果
http://host:port/?focus=conversation.composer只显示输入区(隐藏消息流 + 大侧栏 + 详情面板)
http://host:port/?focus=conversation.session只显示消息流(隐藏输入区 + 大侧栏 + 详情面板)
?focus= 参数完全正常,插件 no-op,不干扰 UI

聚焦模式下若 DSH 没有当前会话,插件自动恢复最近的非空白会话(否则消息流视图是空白 hero)。

原理

DSH 的 Web UI 是插槽树(sidebar | conversation | details 三栏)。本插件不改 DSH 任何代码,只做两件事:

  1. location.search?focus=,给 <html> 打上 data-focus 属性;
  2. 注入一段 CSS,按 DSH 原生渲染出的稳定 DOM 标记隐藏不想要的窗口:
标记来源用途
[data-slot="conversation.session"]DSH 渲染器 SlotOutlet 自动加的插槽标记定位消息流
[data-slot="conversation.session.header"]同上定位会话头部
[data-composer-seat]ConversationRoot 组件的输入区座位定位输入区
.pI_x6G_frame / .pI_x6G_sidebarCol / .pI_x6G_centerCol / .pI_x6G_detailsColAppFrame.module.css 编译产物类名(rc.6)三栏布局压列

关键修复:grid-column 锁定

sidebarColdisplay:none 后不再是 grid item,grid 自动放置会把 detailsCol 推进 center 列(1fr),导致详情面板占满视口、对话区被挤没。因此必须显式锁定三列:

html[data-focus] .pI_x6G_sidebarCol { grid-column: 1; display: none !important; }
html[data-focus] .pI_x6G_centerCol  { grid-column: 2; min-width: 0; }
html[data-focus] .pI_x6G_detailsCol { grid-column: 3; min-width: 0; }

安装 / 部署

DSH 从 ~/.dsh/profiles/node_modules 解析插件包。把本仓库链接(junction)到该位置,再经 patch 挂载:

# 1. 部署(Windows junction;修改本仓库代码即生效,无需重建)
mklink /J "$env:USERPROFILE\.dsh\profiles\node_modules\@dsh-focus\focus-plugin" "D:\w_dev\dsh-focus"

# 2. 挂载:在 .dsh/dsh.mcp.patch.yml(或任意 --patch overlay)里 insert
#    - id: focus-mode
#      name: '@dsh-focus/focus-plugin'

挂载行的 name 必须精确等于包名(@dsh-focus/focus-plugin),写错会导致 DSH 启动失败(端口打不开)。

挂载后重启 dsh web,打开上面的 URL 即可。

开发

npm install          # tsdown + typescript
npm run build        # 构建 lib/client.js
npm run typecheck    # 类型检查
  • 源码:src/client/index.ts(client 半:读参数、注入 CSS、auto-resume 会话)
  • 构建产物:lib/client.js(DSH 经 /plugins/<id>/client.js 伺服)
  • host 半:lib/index.js(空 cordis 插件壳)

基线对齐 @deepseek-ai/dsh@0.1.0-rc.6

演进方向(见 later-on)

  • 通用插槽聚焦:?focus=<任意 data-slot 路径>,按路径前缀规则自动推导隐藏规则,开发者注册自己的 single 插槽即可聚焦查看,无需逐窗硬编码。
  • list 插槽 occupant(如 trajectory/plan):需要走 view 切换器,二期扩展。

License

MIT