zmengle/dsh-plugin-sticky-wall:DSH 側欄的便籤牆插件

前言

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 。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜