跳到正文
dsh-market 浏览插件 GitHub EN

dsboylw/LazyNoobsCockloft#dsh-session-notes

会话备注 0.3.1:一个会话挂多条备注(1 2 3 按创建顺序编号),会话级颜色+置顶(弹窗标题行一键操作),复制挑选器(多条备注点哪条复制哪条),🗑 会话备注批量清理,兼容 DSH Desktop 0.8.2。

Star 数 ★ 1 分类 会话与消息 收录于 2026-09-06

安装

在 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 按创建顺序编号),不用再翻会话历史找提示语。

中文 | English

✅ 适配 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:手动

  1. 把 package.json + lib\index.js + lib\client.js 拷到 %APPDATA%\dsh-desktop\harness\profiles\web\node_modules\@deepseek-ai\dsh-session-notes\(保持 lib\ 子目录)

  2. 编辑 %APPDATA%\dsh-desktop\harness\profiles\web\cordis.patch.yml,在第一个 - insert: 块里加:

    - insert:
        # ...已有的行...
        - id: session-notes
          name: '@deepseek-ai/dsh-session-notes'
    
  3. 重启 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(external react / 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

内容来自项目 README(GitHub)↗

评论

评论存放在 GitHub Discussions。用 GitHub 账号登录后可发表评论或点表情。