dsh-scriptorium:在 DSH Web GUI 裏給每個 Harness 項目配一個筆記本

前言

用 DSH(DeepSeek Harness,主張「一切皆插件」)跑一段時間智能體之後,常見的一個問題是:項目裏散落的判斷、截圖、讀了一半的文檔,沒有明確的存放位置。它們可能出現在對話記錄裏,也可能出現在臨時目錄裏,過幾週就找不到了。已有做法大體是另外起一個筆記工具,然後在 Agent 和筆記之間手動搬運。

下面介紹的 santera-pixel/dsh-scriptorium 走的是另一條路:它把一個項目筆記本直接放進 DSH Web GUI 的側邊欄(書籍圖標,名爲 Scriptorium),筆記、附件、看板和關係圖都在同一個面板裏。

這是什麼

一句話定位:Scriptorium 是 DSH Web GUI 裏的項目知識庫,把工作區綁定到 Harness 項目,提供嵌套文檔、帶實時預覽的 Markdown 編輯器、全文搜索、命令面板、看板、自由排版的媒體畫布、Obsidian 風格的思維導圖,全部存儲在該插件自己擁有的一個 JSON 文件裏。

  • 維護者:santera-pixel
  • 許可證:MIT(見 package.json 與倉庫徽章)
  • 版本:1.0.1(見 package.json)
  • 分類:記憶(社區目錄按此歸類)
  • 運行要求:Node.js >= 22(見 package.json engines)

它解決的問題是:筆記和項目一一對應,編輯器和附件不再分離,做完的事能通過狀態和看板體現,而不用靠回憶。

功能一覽

以下按 README 的「What you get」整理,只挑與日常使用關係直接的部分。

  1. 組織。工作區 → 文件夾 → 嵌套文檔,可以把文檔拖到文件夾上,支持就地重命名和重新排序。
  2. 項目映射。每個筆記本對應一個 Harness 項目,來源是 <DSH_HOME>/storages/workspace.json(與 Harness 工作區切換器用的是同一個文件)。側邊欄列出每個項目及其路徑,同步時會創建或重命名筆記本;項目消失時標記爲 missing,其文檔保留;未關聯的筆記本可以重新關聯,或合併進已有的項目筆記本。
  3. 寫作。Markdown 編輯器支持標題、加粗、斜體、刪除線、行內代碼、鏈接、圖片、表格、任務列表、::: note/tip/warning/danger 提示塊、帶複製按鈕的圍欄代碼塊、$math$ 和分隔線。
  4. 預覽。寫作、分屏、純預覽三種模式,任務複選框會同步改動源碼行,滾動同步。
  5. 查找。Ctrl+K 命令面板(模糊匹配、按最近使用排序)和全文搜索(標題與正文高亮、按相關性排序)。
  6. 追蹤。看板有 Draft / Active / Done 三列,直接來自每篇筆記的狀態;拖動卡片即改寫磁盤上的狀態。
  7. 分類。每篇文檔都可以打標籤,有標籤雲篩選、按標籤生成的配色和按標籤的視圖。
  8. 收納。收藏夾,軟刪除回收站(可恢復、可永久清除、可清空)。
  9. 附件。每個文檔可以上傳圖片、PDF、音頻、視頻和文本文件;有應用內預覽彈窗(PDF 走瀏覽器查看器);媒體沙箱視圖按類型篩選。
  10. 畫布。自由排版的媒體畫布:每個附件變成一張可拖拽、可調大小的卡片,放在所屬文檔旁邊,用邊線連接;支持平移、滾輪或按鈕縮放、適應屏幕、連接兩張卡片、鍵盤微調、刪除連線。
  11. 關聯。Obsidian 風格的思維導圖:筆記是節點,[[wiki links]](支持 |alias 和 #heading)和可選標籤是邊;力導向動畫布局,可拖拽節點、平移縮放、搜索時其餘淡出、高亮鄰居、點擊打開導航;「連接兩篇筆記」會把鏈接寫進源筆記。
  12. 可移植。導出 JSON,導出 ZIP(manifest + Markdown 筆記 + 媒體字節),導入 JSON(合併,不覆蓋),導入 ZIP(重映射 id、存儲媒體);導入導出時畫布一併遷移,並重新指向導入後的 id。

鍵盤快捷鍵:Ctrl+K 命令面板,Ctrl+N 新建文檔,Ctrl+S 保存,Ctrl+B/Ctrl+I 加粗/斜體,Esc 關閉浮層。光標在輸入框內時快捷鍵不會搶焦點。

數據落在哪

這部分值得先看清楚,因爲它直接決定備份和遷移方式。以下路徑來自 README 的 Storage 一節。

文檔數據寫在 <DSH_HOME>/scriptorium/data.json。寫入採用臨時文件加原子重命名,只有一個串行化隊列和一個修訂計數器;超大或格式錯誤的快照會以 400 拒絕。附件寫在 <DSH_HOME>/scriptorium/media/<id>,旁邊還有一個 <id>.json 旁車文件記錄名稱、MIME 類型和大小。畫布與圖譜的版面單獨存一份在 <DSH_HOME>/scriptorium/layout.json,只含 canvas 和 graph,每次保存都先寫它再寫 data.json。DSH_HOME 默認是 ~/.dsh。

項目列表是隻讀的:宿主讀取 <DSH_HOME>/storages/workspace.json 並返回 { projects, defaultProjectId, directory, source, exists },筆記本名稱和路徑來自 global.workspaceIds 順序加上 tables.workspaces 元數據。文件缺失時得到空列表,格式損壞時得到空列表加一條警告,GET /projects 不會改動 data.json。

保存前的校驗是逐字段的:工作區 id 唯一,每個節點都屬於存在的工作區,父鏈可解析且不跨工作區、無環,標籤是非空字符串,附件 id 唯一且可解析,畫布卡片指向存活的節點或附件並使用規範 id,畫布連線連接的是已存在的卡片,圖譜偏好是那三個已知布爾值。出錯時錯誤信息會指出具體路徑(例如 nodes[12].media[0].id),校驗失敗時不寫任何內容。比當前構建的 STORE_VERSION 新的快照會被拒絕並給出明確提示,更老版本的快照先按順序執行遷移;未知的頂級區塊會原樣保留。

這些都意味着:直接編輯或替換 JSON 是可行的應急手段,但應當儘量通過編輯器保存,以保持一致性。

安裝與啓用

只說有出處的部分。package.json 裏 description 寫明本項目「Installs through the official DSH plugin system」,exports 裏包含 .(lib/index.js)、./client(lib/client.js)和 ./cordis.patch.yml。dsh 字段聲明瞭 bundle patch(cordis.patch.yml)和客戶端注入(注入 slots,平臺 web)。

README 沒有給出安裝命令,社區目錄站點我打開後只返回了站點框架,沒有可見的條目正文,因此我不在此拼接 dsh plugin add 形式的命令。正確做法是打開下面的目錄頁或倉庫 README,按其給出的安裝方式執行。

安裝前值得先做兩件事:讀一遍發行物(files 裏是 lib/**/*.js、src、cordis.patch.yml、README.md、LICENSE),以及確認許可證(MIT)符合你的使用場景。

典型用法

下面三個場景取自 README 的「In practice」,保留原文寫法,未作延伸。

設計評審:把三張截圖拖進筆記,在畫布上把它們排在評審要點旁邊,連上線,思維導圖就會顯示哪些筆記引用了哪些筆記。

發佈:每篇筆記都帶狀態,所以看板就是計劃——拖一張卡片,對應筆記的狀態就落盤了。

一個月後:用 Ctrl+K 或搜索找到那篇筆記,思維導圖顯示它的鄰居,附件仍然待在它所解釋的那段文字旁邊。

適用場景與注意

適合這樣一類人:已經在 DSH 里長期跑項目,希望筆記就地存在項目旁邊、不額外維護一套系統的人。對於只需要臨時記幾筆、不想把筆記庫綁到 dsh 數據目錄上的場景,它的收益不明顯。

注意三點。第一,插件以當前 dsh 進程的權限運行,數據位置由插件決定(<DSH_HOME>/scriptorium/),備份和遷移要按這個路徑來。第二,它會讀 storages/workspace.json,項目名與其保持同步;改名或刪除項目時筆記本不會被刪除——消失的項目標爲 missing,文檔仍在。第三,它帶一個 cordis.patch.yml 補丁,README 裏說明了 pre-canvas 構建的降級行爲(重建 data.json 並重新合併版面),打算降級時可以先讀這一條。

另外必須說明:SkillHub 是獨立的社區站點,與 DeepSeek / 幻方無官方從屬關係,Scriptorium 也不是官方出品的插件。

相關鏈接

  • 社區目錄頁:https://www.skillhub.cn/plugins/santera-pixel/dsh-scriptorium
  • 倉庫:https://github.com/santera-pixel/dsh-scriptorium

結論:如果你在 DSH 裏維護長期項目,這個插件把筆記、附件、狀態和關聯四件事收斂進一個 JSON 目錄,代價是多一個需要備份的數據位置和一層校驗規則。是否採用,取決於你對這些取捨的看法。

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

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

小夜