前言¶
在 DSH 里做长任务时,常遇到两类记录需求:一类是给智能体下的临时提醒,比如”明天 10 点交周报”;另一类是开发过程中随手记的状态、待办、颜色约定。这些内容如果散落在对话里,随着会话滚动就丢了;如果回到外部笔记工具,又和当前在改的插件上下文隔开。dsh-sticky-notes 解决这个问题的方式是:把一块便签板塞进 Harness 的左侧栏,同时把 note_create / note_list / note_update / note_delete 四个工具暴露给智能体,让界面和工具写的是同一份存储。
下面介绍这个插件。
这是什么¶
dsh-sticky-notes 是社区开发者 439436269-ctrl 维护的 DSH 插件,分类为”记忆”。它在 DeepSeek Harness 的侧栏加一个便签入口,点击后打开一块平铺的便签板;同时通过四个 note_* 工具让智能体读同一批便签。
它的特点是存储落在插件的 sticky_notes storage domain 下($DSH_HOME/storages),而不是 localStorage。换句话说,换端口、换浏览器、重启桌面应用,笔记都还在。
核心功能¶
经核对官方 README,实际提供的能力包括:
- 侧栏入口与平铺板:左侧栏显示便签图标,点击后在主列打开板;每行密度可选 2 / 3 / 4 / 5,或自动填充宽度,选择会被记住。
- 七种颜色:plain、amber、rose、mint、sky、violet、slate。卡片主体、边框、圆点共用一个 accent,工具栏可按颜色过滤。
- 置顶与回收站:置顶卡片置顶并带图钉标记;删除进回收站标签页,可恢复、彻底删除或清空,删除时 toast 提供撤销。
- 编辑对话框:点击卡片打开浮层,含标题、正文、颜色、置顶开关、字数统计、复制、复制副本、归档/恢复、永久删除。打字停手约 0.55 秒后自动保存。
- 搜索、排序、导出:对标题和正文做文本搜索;按最近更新、创建时间、标题排序;一键把整板导出为 Markdown。
- 快捷键:
Ctrl/Cmd+N新建、Ctrl/Cmd+F聚焦搜索、Escape关闭。 - 持久化存储:见上文,落
$DSH_HOME/storages下的sticky_notesdomain。 - 智能体工具:
note_create、note_list、note_update、note_delete。
板子与工具操作同一份数据:对智能体说”记一条:明天 10 点交周报,放琥珀色”,卡片就会出现在板上。
四个工具的参数¶
这四个工具都以单个文本块返回结果,便签 id 形如 note-<base36 time>-<random>。
| 工具 | 参数 | 作用 |
|---|---|---|
note_create |
body、title?、color?、pinned? |
创建一条;省略 title 时取正文第一行 |
note_list |
query?、color?、pinned?、includeArchived?、sort? |
按板子的筛选条件列出;回收站默认不含,需显式请求 |
note_update |
id、title?、body?、color?、pinned?、archived? |
局部更新某条;archived: false 可恢复 |
note_delete |
id、permanent? |
默认移入回收站,permanent: true 时彻底删除 |
安装与启用¶
安装命令来自 README 原文,支持 npm 与本地目录两种来源:
dsh plugin add @vfvrpq/dsh-sticky-notes # from npm
dsh plugin add /path/to/dsh-sticky-notes # from a checkout, while developing
装完后 bundle patch 会插入一行 sticky-notes,dsh.client 块让 web 端加载 lib/client.js。目录方式安装后应用不需要重启,宿主会重载这一行;但已经打开的标签页只会在下次加载时拿到新 bundle。可以用下面这条命令确认行是否挂载:
dsh --profile <name> --dump-config | grep sticky-notes
运行环境要求 Node >= 22,依赖 @deepseek-ai/cordis ^4.0.1、@deepseek-ai/dsh-storage-domain ^0.2.0-rc.2、@deepseek-ai/dsh-tools ^0.2.0-rc.2。许可证为 MIT,包版本 0.2.0。
HTTP 接口¶
板子的浏览器端和后端只走一条需要鉴权的路由,挂载在 /api 之下,因此会先经过连接服务的 Host/Origin 校验和浏览器会话检查:
GET /api/dsh-notes -> { ok, notes: [...] } (含回收站)
POST /api/dsh-notes { action: ... } -> { ok, note?, notes: [...] }
create { title?, body, color?, pinned? }
update { id, title?, body?, color?, pinned?, archivedAt? }
archive { id } (alias: delete)
restore { id }
purge { id }
duplicate { id }
clear-trash { }
路由路径通过 globalThis.__DSH_STICKY_NOTES_CONFIG__ = { routePath } 注入页面,浏览器端不硬编码路径。
代码结构¶
如果想改这个插件,官方 README 给出的目录划分是:
lib/index.js wiring: domain, route, tools, page injection
lib/config.js route path, domain name, limits
lib/palette.js colour ids shared with the board
lib/notes.js pure shaping/patching/filtering/ordering(无运行时 import)
lib/domain.js storage domain + repository(archive、restore、purge、duplicate)
lib/route.js /api/dsh-notes 处理
lib/tools.js 四个工具的 spec
lib/client.js 浏览器端:侧栏入口、板子、编辑框、字典、样式
locale/*.json meta.title / meta.description
lib/notes.js 明确标注为纯函数,不依赖运行时,方便单测;adapter.test.js 用 stub 的 Harness 包挂载真实 lib/,验证 apply() 能把 domain、route、tools 和销毁钩子接在一起。
测试¶
单元测试直接跑:
node --test test/*.test.js
覆盖范围:notes.test.js 测纯 shaping、颜色、置顶、回收站和排序;route.test.js 测每个 HTTP 分支;client.test.js 测 bundle 注册和筛选/排序文案;adapter.test.js 测 apply() 的装配。
浏览器端 e2e 需要一个 web host,用隔离 profile 启动后再驱动:
dsh --profile <name> --no-open --port 0 # 输出 http://127.0.0.1:<port>/?token=…
node scripts/e2e-notes.mjs --base http://127.0.0.1:<port> --token <token>
该脚本会在 UI 里创建一条有色置顶卡片、把网格切到每行 3 列、搜索、归档再经回收站恢复,并在颜色、置顶、内容必须跨 reload 存活的前提下判定成败。运行证据在仓库的 VERIFY.md。
适用场景¶
适合以下几类使用者:
- 做长任务时需要给智能体留提醒、状态、颜色约定,希望对话里说一句就能落到板上的人。
- 想用程序化方式(API 或工具调用)读写同一份便签,而不是手动点 UI 的人。
- 需要在自动化流程里批量 create / list / update / delete 便签,把便签当作轻量结构化存储的人。
不适合以下需求:官方 README 明确写明没有文件夹、标签,也没有跨设备同步——同步范围限于持有该 storage domain 的 Host。卡片顺序按置顶加排序键生成,不支持拖拽重排。单条正文上限 20,000 字符,标题上限 200,超长会截断而非拒绝。
注意¶
- 插件以当前 dsh 进程的权限运行,能访问
$DSH_HOME/storages下的 domain 与工具层。安装前建议先读一遍源码和许可证(MIT),确认自己接受这些能力边界。 - npm 上的包名是
@vfvrpq/dsh-sticky-notes,GitHub 仓库为439436269-ctrl/dsh-sticky-notes,两者归同一作者维护。作者标注的仓库、主页、issue 入口都指向 GitHub。 - 该插件属于社区目录里的条目。社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,使用时不要当成官方应用商店的背书。
结尾¶
dsh-sticky-notes 的价值在于把”随手记”和”给智能体下达的提醒”合到同一块板、同一份存储里,省掉了在对话和外部笔记之间来回搬运的步骤。功能克制,边界清楚:没有文件夹、没有跨 Host 同步、没有拖拽排序。
目录页:https://www.skillhub.cn/plugins/439436269-ctrl/dsh-sticky-notes
GitHub:https://github.com/439436269-ctrl/dsh-sticky-notes