dsh-sidebar-reader:让模型按需读取当前会话侧边栏

前言

在 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 仓库为准。

典型用法

  1. 安装并启用插件,确保 DSH 版本满足要求。
  2. 在对话中让模型读取侧边栏,例如说明「read my sidebar」或「show me my terminal」;模型走命令通道或调用 sidebar_read。
  3. 根据返回快照:浏览器页直接看 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。

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

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

小夜