安装
在 DeepSeek Harness 里通过 dsh-market 安装
dsh plugin --profile web add dshmarket
或使用命令行
dsh plugin --profile web add github:dsboylw/LazyNoobsCockloft#path:/dsh-session-notes
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。
README
DSH 会话备注插件(DSH Desktop / Web 通用,web 平台客户端插件)。给每个会话挂多条备注(1 2 3 按创建顺序编号),不用再翻会话历史找提示语。
✅ 适配 DSH Desktop 0.8.2(当前版本,实测正常);历史版本 0.7.x 起兼容。
为什么写这个插件
用 DSH 桌面版时发现一个问题:我经常在一个会话里反复用同一条提示语去要数据,每次都得往前翻聊天记录、拷贝、再粘回去,很麻烦;右键会话也没有备注栏,索性自己写了一个。
之前装过 fun-ticker,觉得不好用就卸载了——那个插件本身也不是按桌面版适配的,卸载也没卸干净。索性借着他的一些结构,改出了这个备注插件。
有备注的会话会列在总览里:点击备注可以跳转到对应会话,备注里写的内容(比如提示词)也能一键复制。
懒~~~~ 就是了~ 又菜又懒,咋办啊……
功能
- 📝 头部按钮(会话标题旁):打开编辑弹层;当前会话有备注时按钮带标签色圆点(颜色跟随备注标签)
- 编辑弹层
- 当前会话备注编辑,防抖自动保存(400ms),显示"已保存 ✓"
- 复制按钮:一键复制备注全文
- 📌 置顶开关:写完顺手置顶,置顶时琥珀色实底高亮
- 10 色标记(default / amber / rose / sky / lime / purple / pink / orange / teal / blue)
- 全部备注总览:工作区徽标 + 标题 + 每行复制按钮;当前会话也在列(带"本会话"标记,可直接置顶,点击只关闭弹层)
- 🔍 筛选框:按标题 / 工作区 / 备注内容实时过滤,备注再多也不怕
- 置顶优先排序;列表限高滚动,不撑爆屏幕
- 底部备注栏开关(持久化)
- 底部常驻条(始终显示在输入框上方,不随有无备注消失)
- 彩色工作区徽章(按标签着色,文字自动黑/白保证可读)+ 会话标题(20 字)
- 有备注:预览 + 复制按钮,点击预览打开弹层
- 没备注:灰色提示"本会话还没有备注 — 点这里写一条",点击直达编辑
- ☰ 会话列表:所有带备注会话的快捷切换菜单,随时可达不用翻顶部;置顶优先、含本会话、和弹层互斥(同时只开一个)
- 📌 置顶全链路:列表 / 菜单 / 编辑框三处都能置顶;置顶行排最前 + 标题带 📌;悬停提示始终是完整"工作区 / 标题 — 备注"
- 长文本截断:标题 20 字 / 工作区 10 字,超出显示 …;复制按钮始终复制完整内容
- 稳定性:弹层带错误边界(PopoverGuard),弹层崩溃不影响底栏与顶部按钮;宿主 API 为完整 PATCH 语义(省略字段沿用旧值,显式空文本 = 删除)
- 数据存宿主 settings 文档(命名空间
dsh-session-notes),按会话 ID 持久化,重启不丢 - 清空单条备注文本 = 删除该条;上限 2000 条 / 单条 20000 字符
更新日志
- 0.3.1
- 底部栏预览跟随弹窗选中:弹窗里点选哪条备注,底部栏就显示哪条(未选中时显示最新编辑条)
- 0.3.0
- 新增:多条备注(一个会话挂 N 条提示语,告别单条塞满)+ 序号(1 2 3 按创建顺序,稳定不重排)
- 新增:会话级颜色(弹窗标题行色点,一键全组换色)+ 会话级置顶(标题行 📌,在 ☰ 列表置顶整组)
- 新增:复制挑选器(1 条直复制;多条弹挑选菜单,点哪条复制哪条,置顶优先排序)
- 改进:底部栏精简(移除 +,新增统一走弹窗);稳定性修复(locale 未注册防御、rows 缺字段防御、空草稿存活、pin 不打乱顺序)
- 0.2.0
- 新增:📌 置顶全链路(总览列表 / 会话菜单 / 编辑框);🔍 全部备注筛选框;☰ 会话切换菜单;底部栏常驻(无备注可直写);列表含本会话行
- 改进:调色板 5 → 10 色;头部圆点与工作区徽章跟随标签色;标题 8 → 20 字、工作区 5 → 10 字;列表行只留标题(悬停看全文);弹层加宽 480~640px、限高滚动
- 修复:置顶清空备注(宿主 API 改为完整 PATCH 语义);新会话弹出错误弹窗(弹层归属分家,谁打开谁渲染);弹窗崩溃拖垮界面(PopoverGuard 错误边界);弹窗横向滚动条(盒模型修正)
- 0.1.0 — 首发:会话备注、编辑弹层、全部备注总览、底部备注栏
安装(DSH Desktop)
方式 A:一键脚本(推荐)
# 在仓库/解压目录里
powershell -ExecutionPolicy Bypass -File .\build.ps1 # 从源码构建(发布包可跳过)
powershell -ExecutionPolicy Bypass -File .\install.ps1 # 拷入 profile + 写入 patch
# 重启 DSH Desktop(完全退出再打开)
方式 B:手动
把
package.json+lib\index.js+lib\client.js拷到%APPDATA%\dsh-desktop\harness\profiles\web\node_modules\@deepseek-ai\dsh-session-notes\(保持lib\子目录)编辑
%APPDATA%\dsh-desktop\harness\profiles\web\cordis.patch.yml,在第一个- insert:块里加:- insert: # ...已有的行... - id: session-notes name: '@deepseek-ai/dsh-session-notes'重启 DSH Desktop
卸载
powershell -ExecutionPolicy Bypass -File .\uninstall.ps1
# 或手动:删掉 cordis.patch.yml 里那两行 session-notes + 删除 node_modules 里的包目录
改 cordis.patch.yml 前脚本会自动备份(cordis.patch.yml.bak-<时间戳>)。若应用无法启动,桌面安全模式会自动隔离插件,恢复后用备份文件还原即可。
构建
依赖:Windows PowerShell、node ≥ 20、esbuild 二进制(脚本里 $Esbuild 变量改成本机路径即可)。
.\build.ps1
- 宿主端:
src/index.js→ ESM bundle(external@deepseek-ai/*,闭包由 DSH 应用提供) - 客户端:
src/client/index.tsx→ CJS bundle(externalreact/react-dom/@deepseek-ai/*),再包一层window.__ModuleLoader__.load({ id, factory }) - 冒烟测试:stub 宿主服务 + ModuleLoader,跑完宿主路由全流程和客户端 slot 注册
架构 / 挂点
| 端 | 入口 | 做的事 |
|---|---|---|
| 宿主 | src/index.js |
注册 settings 命名空间(可调用 schema + toJSON)和 API 路由 |
| 客户端 | src/client/index.tsx |
slot 注册、store、会话行投影;inject: ['slots', 'locale', 'sessions'] |
| Slot | 内容 |
|---|---|
conversation.session.header.actions |
📝 按钮 + 弹层 |
conversation.input.dock |
底部常驻备注条 |
API(/plugins/dsh-session-notes/api,宿主 webServer 服务 prefix 路由):
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /settings |
读全部(notes + barEnabled) |
| POST | /settings |
整体替换(服务端清洗校验) |
| GET | /notes |
只读备注表 |
| PUT | /notes/:id |
新增/更新(PATCH 语义:text/color/pinned 省略字段沿用旧值;显式空文本 = 删除) |
| DELETE | /notes/:id |
删除一条 |
踩坑记录(给后来写 DSH 插件的人):
- 宿主端 HTTP 服务叫
webServer(ctx.inject(['settings', 'webServer'], ...)+host.webServer.register(...)),不存在httpServer服务 - 槽位条目的
sessionId不是组件 prop,是注入工厂的第一个参数:inject: (sessionId) => ({ ... }) - 客户端产物必须是
window.__ModuleLoader__.load({ id: "<包名>", factory: (require) => {...} })包裹的 CJS,react/react/jsx-runtime由 loader 的 require 提供 - settings 的 schema 必须可调用(
resolve会执行schema(merged))且带.toJSON()(describe()会用)
目录
src/index.js 宿主入口:settings + API 路由
src/client/index.tsx 客户端入口:slot 注册、store、会话投影
src/client/ui.tsx 弹层 + 底部条 UI
src/client/store.ts 自包含 observable store + useSyncExternalStore hook
src/client/api.ts 同源 fetch 封装
src/client/clipboard.ts 复制(clipboard API + execCommand 兜底)
src/client/locales.ts zh/en 词典
src/client/styles.ts 样式注入(dsw CSS 变量,适配深浅色)
build.ps1 构建 + 冒烟
install.ps1 一键安装到桌面 profile
uninstall.ps1 一键卸载
test/smoke.mjs 冒烟测试(宿主 + 客户端)
test/host-drive.mjs 宿主路由直驱复测
License
MIT
评论
评论存放在 GitHub Discussions。用 GitHub 账号登录后可发表评论或点表情。