前言¶
DSH(DeepSeek Harness)的理念是「一切皆插件」,宿主通过 bundle patch 和客户端 slot 注入能力。做智能体应用时经常遇到这类需求:临时记一条想法、随手列个清单、把模型生成的任务落到一块「看得见」的墙上,又不想把正式待办体系搞乱。现有的做法是让模型调用 todo_write,但那是「我有几件事要做」的管理视角;问题在于,有些东西只是「先记一下」,不想立刻纳入流程。
zmengle/dsh-plugin-sticky-wall 处理的是这个「先记一下」的场景:在 DSH 侧栏加一块可自由摆放的便签墙,纸条可以拖动、改大小、换颜色、折叠、进回收站,同时暴露 5 个 sticky_wall_* 模型工具,说一句「记到便签墙」就能落到墙上。插件由 zmengle 维护,分类为客户端,MIT 许可,仓库地址见文末。
下面介绍安装、功能和与模型的联动方式。
手头已有资料¶
写作依据是插件的 GitHub README 与 package.json,版本号、工具名、端点均取自资料原文。目录页(skillhub.cn)抓取返回内容有限,仅作为来源归属参考。
安装¶
安装命令来自 README 原文:
dsh plugin add dsh-plugin-sticky-wall
安装后重启 DSH,侧栏会出现一个便签图标。插件没有配置文件、没有登录、不联网,数据默认写在 ~/.dsh/sticky-wall.json。
支持环境来自 package.json 的 engines:Node >= 20,DSH 版本在 >=0.2.1-rc.4 <0.3.0-0 区间内。
功能:一块可以随手摆的墙¶
便签墙注册为侧栏面板(sidebar.panellist,id = sticky-wall),点击图标切到主面板。纸条可以按住纸头拖到任意位置,双击墙面空白处在该处新建一张;右下角的斜线手柄可以拖动改大小(宽 196–560px,高按整行增减),双击回默认。
四种行格式混排:正文、待办(☐)、无序(•)、有序(1.)。行首敲 -、1.、- [ ] 当场变成对应格式;悬停纸条底部还有四个格式按钮,作用在当前行上,点「≡」回到普通正文。待办方框点了即完成(打勾加删除线),抬头显示 1/3 这样的进度。
每行本质是一个输入框,回车拆行、行首退格并回上一行、↑↓ 跨行移动;输入 0.65 秒后自动落盘,失焦、⌘/Ctrl+Enter、Esc 会立即保存。
纸的外观有几个固定选择:8 种纸色(亮纸加深夜色)、可选横线纸(14px/22px 行距,逐张独立)、8px 圆角、内外两层阴影。插件刻意不做倾斜——旋转层里的文字会丢次像素抗锯齿,看着发虚。抬头最左边的「∨」把纸条收成两行,折叠时正文只读但可以直接选词复制;折叠只截高度,不动宽度。
删除、回收站与备份¶
删除(工具栏垃圾桶、清空墙面、模型工具删除)都只是把便签移进右侧回收站,不会立刻销毁。回收站抽屉里可以逐张恢复或彻底删除,也可以一次清空;图钉可以固定抽屉,偏好记在本地。删除后的 toast 里有「撤销」直达,Esc 也能关抽屉(正在写便签时 Esc 优先给输入框)。恢复时如果原位置已被别的纸占了(重叠超过自身面积 20%),会自动挪到第一个空格子并提示。回收站容量 500 张 / 30 天,超期在加载时清掉。
换电脑时,设置面板里可以导出 JSON(含回收站),文件名形如 sticky-wall-20261107-0216.json;导入时先显示要导入几张,再让你选合并进来(保留现有便签,id 撞了自动换新 id)或覆盖现有(整体替换,要点两次确认)。设置面板还显示版本、条数、数据大小和存储路径。
模型工具¶
插件给模型暴露 5 个工具:
| 工具 | 用途 |
|---|---|
sticky_wall_list |
读墙上的便签(id、纸色、时间、正文;清单带 - [ ] / 1. 标记),可按 pinned / query 过滤;回收站里的不列 |
sticky_wall_add |
贴一张新便签(text 必填,支持 Markdown 清单,color、pinned 可选) |
sticky_wall_update |
改正文 / 纸色 / 置顶(正文重新解析成行,勾选状态重置;回收站里的便签要先恢复) |
sticky_wall_remove |
移到回收站(软删除) |
sticky_wall_restore |
把回收站里的便签恢复回墙面(恢复后在最上层) |
返回文本里带 [n-xxxxxx] 这样的短 id,后续 update / remove 用它。模型贴来的 Markdown(- [ ]、-、1.)会自动解析成复选框和列表;面板可见时,模型贴的便签约 6 秒内自动出现在墙面上。
数据格式与配置¶
数据是单一 JSON 文件,默认路径 ~/.dsh/sticky-wall.json,原子写(tmp + rename),内容没变就跳过写盘;写失败会备份原文件。每条便签的结构是 lines[](每行 kind / text / done)加纸色、位置、置顶、横线开关、尺寸、折叠状态、回收站标记;text 是从行派生的可读副本,老数据(只有 text)能直接读,下次保存时自动升级成行结构。
上限:500 张便签,每张 200 行 / 每行 1000 字 / 合计 4000 字。超出是截断而不是拒绝,保存回包带 truncated: true,面板会提示「内容超出上限,已截断」。
想换存储位置,改插件配置里的 storePath 然后重启 DSH:
# cordis.patch.yml
- insert:
- id: sticky-wall
name: dsh-plugin-sticky-wall
config:
storePath: D:/notes/sticky-wall.json
绝对路径、~/notes/... 或相对 $DSH_HOME 的路径都可以;换路径时如果新文件不存在而默认文件在,会先复制过去。当前实际用的路径显示在面板页脚右侧,点一下可复制。
实现要点¶
插件是双面结构:Host 侧(index.js)起 webServer 前缀路由 /api/dsh-sticky-wall/*,暴露 /snapshot、/upsert、/remove、/restore、/purge、/purge-all、/clear、GET /export、POST /import 等端点;Client 侧(client.js)同源 fetch 读写,不碰 typert/remote,因此没有版本适配问题。写操作带 Sec-Fetch-Site / Origin 校验,跨站直接 403,POST 只接受 application/json。
性能上,每张便签是 React.memo 组件,只收 note 和 focusId,不订阅 store,打字时只有正在编辑的那一张重渲染。README 里的实测数据是 200 张便签下从 42.7ms/键降到 6.7ms/键(20 张时 4.5ms/键)。另有两条瘦身通道:请求 /snapshot?trash=0 只回条数不回明细,/upsert 带 light: true 时不回整面墙(保存回包实测 1.1MB 降到几 KB)。
适用场景与注意¶
适合想在侧栏放一块临时记东西的地方的 DSH 用户,尤其是想把「记到便签墙」这类指令真正落到界面上的智能体应用开发者。它和自带待办(todo_write)的差异是定位不同:待办是流程管理,便签墙是随手贴的桌面,行首输入 - 或 1. 也能当场变成清单。
几点注意:
- 插件以当前 DSH 进程的权限运行,安装前应先读一遍源码(
index.js、client.js)并确认许可证(MIT)。 - 数据只在本机,不联网;导出备份文件里含全部内容(含回收站),注意保管。
- 回收站超限(500 张 / 30 天)会丢东西,「丢」只发生在看得见的删除动作上,读盘时不裁剪。
便签墙的价值在于它把「记一下」和「办一下」分开了:墙上的东西可以乱放、可以折叠、可以在 30 天内找回,而模型工具让「记到便签墙」不再只是意向。项目目录页:https://www.skillhub.cn/plugins/zmengle/dsh-plugin-sticky-wall ,源码:https://github.com/zmengle/dsh-plugin-sticky-wall 。