dsh-plugin-session-outline
by alonelypigeon
DeepSeek Harness cordis 插件:右侧浮层里的会话大纲导航
DeepSeek Harness cordis plugin: session outline navigator in the right-side overlay
安装
dsh plugin --profile web add github:alonelypigeon/dsh-plugin-session-outlineGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
English: README.md
dsh-plugin-session-outline
DeepSeek Harness cordis 插件:右侧浮动「会话大纲」导航面板。
- 面板入口是对话区右侧中部的圆形按钮(☰),点击展开/收起(Esc 或 × 收起)。
- 大纲只保留用户消息(
user/steering节点 = 一轮对话的开头,一级条目、带编号),点击任一条目平滑滚动到该轮对话开头。 - 面板可拖动(按住头部),位置记忆在 localStorage。
交互细节
- 当前位置指示:当前可见(最靠上)的用户消息在大纲里高亮;标题显示「会话大纲 · N」条目计数。
- 上/下一轮快速导航:面板底部「↑ 上一轮 / 下一轮 ↓」按钮,从当前位置逐轮跳转(未定位时上一轮=最后一条、下一轮=第一条);面板内聚焦时也可用 ↑/↓ 方向键(不劫持输入框按键)。
- 跳转反馈:命中后目标条目短暂高亮闪烁,提示当前跳到哪。
- 历史懒加载兜底:重开 DSH 时旧会话消息可能尚未渲染(或已被虚拟列表卸载),此时点击条目会显示「⏳ 加载中…」,自动按方向滚到会话顶部/底部触发加载,轮询等待目标消息出现后自动跳转(最多约 10s)。
- 刷新防抖:MutationObserver 合并为 150ms 一次 + 2s 定时兜底;且只对结构变化与 user 行内文本变化敏感 —— assistant 流式输出期间不再高频全量扫描。
- 空会话不打扰:会话里还没有用户消息时,连 ☰ 入口按钮都不显示。
- 双语文案:走 DSH locale 系统(
session.outlinenamespace,zh/en),跟随界面语言切换。 - 条目文本自动剥掉消息尾部的时间戳(HH:MM / 相对时间 / 日期等)。
实现机制
- 注册点:
shell.overlay(list/root)——layout 预留的空白浮动层扩展点,不与右侧 details 栏冲突;order: 100排在既有浮动条目之后。 - 数据来源:对话区消息节点的稳定 DOM 锚点
data-chat-anchor-key/data-chat-flow-kind(user/steering)。 - 跳转:手动计算 scrollTop +
scrollTo({ behavior: 'smooth' }),450ms 后校验强制落位(不依赖scrollIntoView,避免被页面滚动守卫/虚拟列表吞掉)。 - 性能:面板收起时只做廉价的存在性探测;展开时才全量扫描 + IntersectionObserver;插件自身 DOM 的 mutation 被过滤,assistant 流式文本变化不触发扫描(只对结构变化与 user 行内文本敏感);扫描结果无变化时不重渲染。
- 样式:全部使用 DSH 设计 token(
--dsw-alias-*),自动适配深浅主题;<style>注入带data-plugin去重守卫,HMR 重载不会重复挂样式。
兼容性
- 平台:DSH web(
dsh web),dsh.client.platform = "web"。 - peerDependencies:
@deepseek-ai/cordis^4.0.1@deepseek-ai/dsh-client-ui-slots^0.1.0-rc.6(类型/槽位契约)
- client 声明:
inject: ['slots', 'locale'](服务级依赖),包级dsh.client.inject指向@deepseek-ai/dsh-client-ui-slots(模块表静态词)。 - 对 DSH Web UI 内部结构的依赖仅限上述 DOM 锚点与
shell.overlay槽位,均为上游公开契约。
安装
方式一:从 npm 安装(发布后)
npm install -g dsh-plugin-session-outline # 或装进 profile 的 node_modules
方式二:手动拷贝
构建后把整个插件目录复制到 profile node_modules:
cp -r dsh-plugin-session-outline ~/.dsh/profiles/node_modules/
然后在 cordis.patch.yml 追加:
- insert:
- id: session-outline
name: dsh-plugin-session-outline
重启 DSH,打开一个会话,右侧中部出现 ☰ 按钮即加载成功。
开发与构建
client half 必须打包成 window.__ModuleLoader__.load({ id, factory }) 形式才能被
web 前端加载(dsh-client-modules 的 Node half 会扫描 loader 树里 enabled 插件,
resolve exports["./client"] 并 serve 进 /plugins boot graph)。
npm install # 仅需 devDependency: esbuild
npm run bundle # scripts/bundle.mjs:esbuild 打包 → lib/client.js
npm test # node --test:bundle 契约测试 + internals 单元测试(时间戳清洗/等价判定/导航推导)
npm run preflight # 发布/部署预检(陈旧 bundle 守卫 + 契约检查)
npm run check # node --check lib/client.js 语法校验
# npm publish 时 prepublishOnly 会自动执行 preflight
测试通过
internals导出(官方惯例,见 dsh-web-app)覆盖纯函数;lib/client.js的apply/inject契约在 vm 沙箱中黑盒验证。
本地验证(改完即见)
构建后用原子同步脚本把产物部署到运行中的 DSH profile(先写临时文件再 逐个 rename 替换,bundle 最后落盘,避免服务器在半更新状态被请求):
npm run bundle && npm run sync # 默认 ~/.dsh/profiles/node_modules/<name>
# 可选:DSH_WEB_URL=http://127.0.0.1:PORT npm run sync # 顺带打印新旧 boot rev
刷新浏览器后 boot manifest 的 rev 变化即说明新 bundle 已被 serve。
发布
当前状态:测试期私密发布。
package.json标记了"private": true, 不会(也不应)发布到公共 npm。测试期请用本地路径或 git 依赖安装:
dsh plugin --profile web add file:<本仓库路径> # 本地路径安装
# 或作为 git 依赖(私有仓库需 npm 凭证):
npm install git+https://<私有仓库地址>.git
插件转入稳定后:移除 "private": true,再执行 npm publish
(prepublishOnly 会自动跑 preflight + 全量测试,未通过会中止)。
发布内容由 files 字段控制:index.js、lib/client.js、README.md、LICENSE
(源码与构建脚本不随包发布)。
文件
index.js host half(最小,仅让 loader entry 可被发现)
src/client.jsx client 源码(React 组件 + shell.overlay 注册)
lib/client.js client bundle(构建产物,勿手改)
scripts/bundle.mjs 本地构建脚本(esbuild)
test/ bundle 契约测试(node --test)
LICENSE MIT
原始 README: https://github.com/alonelypigeon/dsh-plugin-session-outline/blob/main/README.zh.md ↗
同类插件
查看全部 →
archify
Agent 技能:生成美观、可校验的架构图、工作流图、时序图、数据流图与生命周期图——自包含 HTML、带动画与清晰导出

dsh-turn-rewind
对话回退:基于持久 Change Ledger 回滚会话与工作区状态。

dsh-plugin-cc
把 DeepSeek Harness 接入 Claude Code:评审、批评、委派与会话导入

dsh-interconnect
跨实例互联:经 interconnect 服务在多个 DSH 实例间转发消息与事件。

dsh-chat-import
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。

dsh-crew
DSH 插件:从 Claude Code / Codex 向 DSH agent 派活——原生 subagent 进度、宿主内 worker 会话(分级预设),以及为纯文本宿主补上视觉与图像生成的多模态桥