← 返回列表
未验证
高亮会话句子并记便签,跨重启保留可回填追问
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/9 · 已提供中文文档
使用便签高亮并注释 DeepSeek Harness(DSH)对话——动态 Cordis 插件
综合分
30
GitHub 分
30
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add iptton-ai/dsh-plugin-session-notes该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
会话便签 — DSH 会话划线便签插件
非官方项目,由社区成员独立开发和维护。
非官方项目,由社区成员独立开发和维护。
English · 中文说明
在 DeepSeek Harness (DSH) 会话中高亮任意句子,为其附加一张便签,并将所有便签保存在右侧面板中——可按当前工作区(目录)或当前会话进行筛选。便签在重启后依然保留,并可直接发送回输入框。
在 DeepSeek Harness (DSH) 的会话消息中选中任意句子划线并记一张小便签;右侧面板聚合展示全部便签,支持按当前目录 / 本会话过滤;便签跨重启持久化,还可一键发送到对话框继续追问。
截图:高亮 + 便签面板
功能特性
- ✍️ 高亮与批注 — 选中消息中的任意文本(可跨粗体/代码/段落边界),点击浮动 📝 记便签 按钮,写下你的便签。所选内容会获得持久的黄色高亮(CSS Custom Highlight API——零 DOM 变更,对 React 安全)。
- 🗂 三种作用域 — 每条便签属于本会话、本工作区(目录)或全局(整个 DSH)。可在面板中创建、编辑和删除;同一作用域下的便签可从该作用域的任意会话中看到。
- 🔍 可筛选面板 — 在全部 / 当前目录 / 当前会话之间切换,并显示实时计数。
- 📤 发送到输入框 — 将便签(内容 + 引用来源)追加到当前输入草稿中,随时可发送。
- 👀 查看优先的弹窗 — 点击高亮处以只读方式打开便签;编辑是显式操作。
- 🔄 自愈高亮 — MutationObserver + 5 秒对账,在重新渲染、虚拟化或分页后重新应用高亮。
- 💾 持久化存储 — 纯 JSON,位于 ~/.dsh/storages/session-notes/notes.json;使用 fs-service 写入并以 shell 作为回退,串行队列。
安装
支持两种形式:A. 常驻 profile 插件(常驻,重启后仍在,推荐)和 B. 动态 cordis 包(动态,免装即用,重启即失)。
A. 常驻 — web profile 插件
1. 将本仓库克隆到磁盘上的任意位置。
2. 将其链接到你的 web profile 并安装:
cd ~/.dsh/profiles/web
package.json → "dependencies": { "dsh-session-notes": "link:" }
pnpm install
3. 追加到 ~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: session-notes
name: 'dsh-session-notes'
4. 重启 dsh web。宿主端提供 /session-notes/api/;客户端端通过包的 dsh.client 声明被加载,并在每次页面加载时打包(UI 在刷新后依然保留)。
B. 动态 — cordis_define
在当前 dsh web 进程中运行——无需构建步骤,无需 npm。
1. 克隆或下载本仓库。
2. 打开一个 DSH 会话(创造模式 / cordis 预设——即带有 cordis_define / cordis_run 工具的那个),并让 agent:
帮我安装这个插件:仓库 https://github.com/iptton-ai/dsh-plugin-session-notes。
用 cordis_define 定义(读取 src/host.js 作为 code.host、src/client.js 作为 code.client,plugin id 前缀 snote),
然后 cordis_run 激活并批准。
或者,如果你更愿意手动操作:把 src/host.js 和 src/client.js 中的两个函数体粘贴到 cordis_define 的 code.host / code.client 中,然后对返回的包执行 cordis_run,并在 UI 中批准它。
3. 刷新页面,打开一个会话,并选中一些消息文本。
动态插件的生命周期与 dsh web 进程相同。DSH 重启后,请重新执行第 2 步(你在磁盘上的笔记会被保留)。
工作原理
| 部分 | 位置 | 作用 |
| --- | --- | --- |
| 零 DOM 高亮引擎 | src/client.js | 将每条笔记的引文与消息流进行匹配,采用空白折叠 + 感知间隙的文本组装(块级/ 边界插入 \n,内联相邻节点无缝拼接——与 Selection.toString() 一致),然后将 Range 注册到 CSS.highlights(::highlight(snote-hl))。在不支持 Highlight API 的引擎上回退到 包裹。 |
| 消息流锚点 | src/client.js | conversation.composer.dock 槽位中的一个隐藏条目向上走到滚动容器——不使用产品类名,不替换 DOM。 |
| 侧边面板 / 弹窗 / 选区按钮 | src/client.js | 仅使用附加式槽位条目:shell.overlay、conversation.session.header.utilities。 |
| 持久化 | src/host.js | 通过 harness.handle 提供包私有 RPC(notes/list|add|update|delete|diag);将 JSON 存储在 ~/.dsh/storages/session-notes/ 下;针对其自身的存储文件使用每次调用的 danger-full-access 沙箱策略(默认的 workspace-write 围栏不包含 ~/.dsh)。 |
沙箱说明
宿主端明确传递 sandboxPolicy: { mode: 'danger-full-access' },仅针对其自身的存储文件(~/.dsh/storages/session-notes/notes.json),因为部署默认的 workspace-write 围栏不包含 DSH 主目录。该插件从不触碰其他路径。
中文说明
Session Notes(会话划线便签) 是一个 DeepSeek Harness (DSH) 的动态 Cordis 插件:像在书上做批注一样,在 AI 会话里边聊边划线、记便签。
功能特性
- ✍️ 划线记便签 —— 在任意消息中选中一段文字(跨加粗/行内代码/段落边界的选区都支持),点选区上方的「📝 记便签」按钮写下想法,选中文本即获得持久的黄色划线。基于 CSS Custom Highlight API,零 DOM 修改,React 重渲染不会破坏高亮。
- 🗂 三种归属 —— 每条便签可归属本会话、当前目录(workspace)或全局(整个 DSH)*;在面板里可新建/编辑/删除,目录级与全局便签在该范围内所有会话可见。
- 🔍 可过滤面板 —— 右侧面板支持 全部 / 当前目录 / 本会话 三档过滤,实时计数;点击划线默认打开只读查看弹窗,点「编辑」才进入编辑态。
- 📤 发送到对话框 —— 把便签(内容 + 引用原文)一键追加到当前输入框草稿,直接继续追问。
- 🔄 高亮自愈 —— MutationObserver + 5 秒对账,消息重渲染、翻页加载、虚拟化后划线自动恢复。
- 💾 持久存储 —— 纯 JSON 落盘于 ~/.dsh/storages/session-notes/notes.json,跨重启保留;fs 服务写入失败时自动降级 shell 通道,写队列失败隔离。
安装方法
这是一个 DSH 动态 Cordis 插件,直接运行在当前 dsh web 进程里 —— 无需构建、无需 npm。
1. 克隆或下载本仓库。
2. 打开一个带 cordis_define / cordis_run 工具的 DSH 会话(创造模式 / cordis 预设),对 agent 说:
帮我安装这个插件:仓库 https://github.com/iptton-ai/dsh-plugin-session-notes。
用 cordis_define 定义(读取 src/host.js 作为 code.host、src/client.js 作为 code.client,plugin id 前缀 snote),
然后 cordis_run 激活并批准。
也可以手动:把 src/host.js、src/client.js 两个函数体分别粘贴进 cordis_define 的 code.host / code.client,再 cordis_run 激活返回的 package 并在界面上批准。
3. 刷新页面,打开会话,选中一段消息文字即可开始。
动态插件的生命周期与 dsh web 进程一致。DSH 重启后重新执行第 2 步即可(磁盘上的便签数据不会丢)。
工作原理
| 模块 | 位置 | 说明 |
| --- | --- | --- |
| 零 DOM 高亮引擎 | src/client.js | 用空白折叠 + 间隙感知拼接(块级/ 边界补 \n、inline 紧邻节点无缝相连,与 Selection.toString() 语义一致)把每条便签的引用文本匹配回消息流,然后构造 Range 注册进 CSS.highlights(::highlight(snote-hl) 伪元素绘制)。不支持该 API 的浏览器自动回退 包裹方案。 |
| 消息流锚点 | src/client.js | 在 conversation.composer.dock 插槽注册一个隐藏锚点组件,向上定位消息滚动容器 —— 不依赖产品 class 名,不替换任何产品 UI。 |
| 面板 / 弹窗 / 选区按钮 | src/client.js | 全部为增量插槽项:shell.overlay、conversation.session.header.utilities。 |
| 持久化 | src/host.js | 通过 harness.handle 提供包私有 RPC(notes/list|add|update|delete|diag);JSON 存储于 ~/.dsh/storages/session-notes/;对自己的存储文件按调用声明 danger-full-access 沙箱策略(部署默认的 workspace-write 围栏不覆盖 ~/.dsh)。 |
沙箱说明
Host 半仅对自己的存储文件(~/.dsh/storages/session-notes/notes.json)显式传 sandboxPolicy: { mode: 'danger-full-access' },原因是部署默认的 workspace-write 文件围栏不包含 DSH 主目录。插件不触碰其他任何路径。
License
MIT扫码进群