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 任何代码,只做两件事:
- 读
location.search的?focus=,给<html>打上data-focus属性; - 注入一段 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_detailsCol | AppFrame.module.css 编译产物类名(rc.6) | 三栏布局压列 |
关键修复:grid-column 锁定
sidebarCol 被 display: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