前言¶
在 DSH 里和模型协作时,右侧栏往往同时开着文件、内置浏览器和终端。模型侧只有对话上下文,看不到你正在看的标签页、终端滚动区或侧边栏里打开的页面正文。常见做法是请用户复制粘贴,或用 web_fetch 去拉 URL——对终端输出和仅在侧边栏 WebView 里的内容并不够用。下面介绍社区插件 dsh-sidebar-reader:在当前会话范围内,按需抓取活动标签、官方右侧栏标签列表、终端全屏快照和(桌面端)浏览器页文本,供模型一次读取。
这是什么¶
dsh-sidebar-reader 由维护者 LaFantasque520 发布在 GitHub(LaFantasque520/dsh-sidebar-reader),许可证 MIT,当前版本 1.0.1。插件不依赖第三方侧边栏扩展,只使用 DSH 官方能力:sidebarRight、remote.terminal.attach。
一句话定位:安装后,你对模型说「read my sidebar」或「show me my terminal」,模型通过插件命令通道触发抓取,数秒内拿到一次结构化快照;也可直接调用自动注册的智能体工具 sidebar_read(零参数),无需 HTTP 配置。
工作原理概览¶
数据流可以概括为「模型发命令 → 主机路由 → Web UI 客户端轮询并采集 → 客户端回传最新快照 → 模型读取」。
model ──POST /sidebar-reader/command──▶ host route (lib/index.js)
client polls every 2s
▼
client capture (lib/client.js, runs in the Web UI)
├── active tab
├── right-sidebar tabs (current session only)
├── terminal screens (first full-screen snapshot)
└── web page text (desktop only)
│
client ──POST /sidebar-reader/latest──▶ host keeps the latest snapshot only
model ◀──GET /sidebar-reader/latest─── host
主机侧还会在 DSH 工具注册表里注册原生工具 sidebar_read;每个新会话的工具列表里会自动出现,一次无参调用即可返回完整快照。HTTP 端点(前缀 /sidebar-reader)仍可作为备用通道。
设计上有几条约束(来自仓库说明):只读屏幕上当前会话,其他会话不可见;各通道独立降级,单通道失败不影响其余;每次读取都会在界面 Toast 提示;副作用挂在 ctx.effect,禁用插件时可回收。
核心功能¶
| 通道 | 数据来源 | 说明 |
|---|---|---|
| 活动标签 | sidebarRight.active() |
活动窗格的活动标签(id / kind / title / contentId),以及列是否展开(expanded) |
| 右侧栏标签 | sidebarRight.openTabs 实时快照 |
当前会话全部已打开标签(tabId / kind / contentId) |
| 终端 | remote.terminal.attach 首帧 |
含回滚区的全屏文本;读完后释放输入控制 |
| 网页正文 | 侧边栏浏览器 WebView innerText |
仅 DSH Desktop(Electron);严格模式见下 |
网页正文的严格模式:仅当活动标签为浏览器且侧栏列处于展开时才返回 page;否则 page 为 null。原因是后台浏览器标签的 WebView 仍可能在 DOM 中但宽度为 0,避免模型读到用户并未注视的页面。
你能读到什么(README 对照表):
| 场景 | 可读性 | 备注 |
|---|---|---|
| 侧边栏浏览器中的页面 | ✅ 标题 + URL + 文本 | 须为活动浏览器标签且列已展开 |
| 文件 / 文档标签 | ⚠️ 仅地址信息 | 得到 contentId(如 dsh-resource://file/...),需按该路径再读文件 |
| 终端 | ✅ 全屏 | 含回滚(单终端最多约 40k 字符) |
| 纯 Web 构建(浏览器访问) | ❌ 无页内文本 | 无 WebView;标签与终端仍可用 |
快照 JSON 结构示例(字段以仓库 README 为准):
{
"page": { "title": "…", "url": "https://…", "text": "…", "chars": 1235 },
"right": {
"sessionId": "session-…",
"expanded": true,
"active": { "id": "tab5", "type": "browser", "title": "Browser", "path": "sidebar://browser/…" },
"tabs": [
{ "id": "tab3", "type": "files", "path": "sidebar://files" },
{ "id": "tab5", "type": "browser", "path": "sidebar://browser/…" }
]
},
"terminals": { "sessionId": "session-…", "terminals": [ { "id": "…", "title": "…", "state": "running", "screen": "…" } ] },
"commandId": "cmd-…",
"receivedAt": "2026-11-08T13:11:42.350Z"
}
环境要求与兼容性¶
- DSH >= 0.2.1-rc.2(终端采集依赖
remote.terminal.attach;在 0.2.0-rc.2 上插件可加载、标签可用,但终端会因 API 仍叫follow而报错) - 不需要 better-sidebar
- 网页正文仅桌面端;Web 构建仍可获得活动标签、标签列表和终端
仓库给出的兼容性摘要:0.2.1-rc.2~0.2.2-rc.1 上四类通道在桌面端均可用(网页正文在 Web 构建上为 ❌);0.2.0-rc.2 上终端为 ❌。作者在 0.2.1-rc.5 上验证了四通道,并在 0.2.1-rc.2、0.2.2-rc.1 上做过安装与客户端模块注册相关测试(scripts/test-plugin.ps1)。
package.json 中 peer 依赖约定:@deepseek-ai/dsh 为 >=0.2.1-rc.2 <0.2.2-0 || >=0.2.2-rc.1 <0.3.0-0。
安装与启用¶
插件以你当前 DSH 配置文件的权限运行;安装前建议浏览仓库源码与 MIT 许可证,确认可接受其读取范围(当前会话侧边栏与终端等本地数据)。
CLI(命令来自仓库 README,请将 <your-profile> 换成你的 profile 名):
# 从插件市场(dshmarket / 官方 Discover,上架后):搜索 "Sidebar Reader"
# 或使用 CLI:
dsh plugin --profile <your-profile> add dsh-sidebar-reader
在 DSH Desktop 上,也可在应用内 Settings → Plugins 安装;或把仓库克隆到本地后,在插件管理器里指向该目录做本地安装(README 原文说明,非本文新增流程)。
社区目录页:skillhub.cn 上的 dsh-sidebar-reader。该站点为社区插件目录,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,安装来源以你信任的市场或 GitHub 仓库为准。
典型用法¶
- 安装并启用插件,确保 DSH 版本满足要求。
- 在对话中让模型读取侧边栏,例如说明「read my sidebar」或「show me my terminal」;模型走命令通道或调用
sidebar_read。 - 根据返回快照:浏览器页直接看
page.text;文件标签用contentId路径继续读文件;终端看terminals[].screen。
工具描述中建议:涉及终端或当前页面时,优先使用本插件提供的 sidebar_read,而不是用 PowerShell 或 web_fetch 间接猜测。
若走 HTTP 备用通道,主机路由包括(均在本机 loopback):
| 端点 | 方法 | 用途 |
|---|---|---|
/sidebar-reader/health |
GET | 自检 |
/sidebar-reader/latest |
GET | 模型读快照(空则 404) |
/sidebar-reader/latest |
POST | 客户端提交快照(仅保留最新一份) |
/sidebar-reader/command |
GET | 客户端领取命令(读后消费) |
/sidebar-reader/command |
POST | 模型下发命令 |
隐私与安全¶
- 仅读取当前会话;其他会话数据不离开浏览器。
- 路由在本机 HTTP,无浏览器鉴权对外发送,无遥测、无外部请求。
- 每次读取都有 Toast 提示,非静默采集。
开发与排错提示¶
仓库附带 Windows PowerShell 冒烟与多版本测试脚本(需在对应环境执行)。维护者特别提到:修改客户端代码后需要刷新页面,否则已加载模块不会被 HMR 替换;__ModuleLoader__.load({ id }) 的 id 必须与 npm 包名 dsh-sidebar-reader 一致,否则会静默失败——sidebar_read 仍可能响应,但采集会一直超时。1.0.1 变更日志中修复的正是客户端模块注册 id 不匹配问题。
结尾¶
dsh-sidebar-reader 把「模型看不见右侧栏」缩小为一次工具调用或一条自然语言指令:在当前会话内统一给出活动标签、标签列表、终端全屏和(桌面端)浏览器正文,并明确不对其他会话、不对错误的后台页面做静默读取。需要试用或查阅更新说明时,可访问社区目录页 https://www.skillhub.cn/plugins/LaFantasque520/dsh-sidebar-reader 与 GitHub 仓库 https://github.com/LaFantasque520/dsh-sidebar-reader。