前言¶
在 DSH 裏跑智能體時,很多結論只出現在某次對話裏:技術選型、約定好的路徑、臨時拍板的規則。重啓會話或換 agent 後,這些內容不會自動變成項目裏的可查資料。有人靠 Markdown 筆記或全局記憶插件,但要麼要手動整理,要麼和「當前倉庫、當前工作目錄」綁得不緊。
dsh-recall 是 LIghtJUNction 維護的 DSH 插件(社區分類:記憶),定位是 Searchable project conversation excerpts for DSH:由調用方顯式寫入摘錄,再在項目本地做字面檢索。它不接管 DSH 會話日誌,也不自動把歷史對話灌進上下文。
這是什麼¶
- 名稱:dsh-recall(npm 包名
@lightjunction/dsh-recall,版本 0.1.0) - 依賴環境:DSH
0.2.1-rc.2,Node>=24(README 寫明本地在 Node 26 / TypeScript 5.9.3 開發與測試) - 解決的問題:在當前項目工作區裏,保存少量對話摘錄並支持搜索、按 revision 刪除,供後續 agent 或 host 調用工具查詢
存儲與讀寫發生在 DSH 宿主機上的本地目錄,不是 remote world 適配器,也不是安全沙箱。
核心功能¶
插件通過 Cordis 暴露三個工具(行爲以 README 爲準):
recall_save:只保存調用方傳入的role、text;可選sessionId(默認當前 agent ID,host 直調時爲manual)。相同 role/text/session 重複寫入會返回已有記錄。recall_search:對已保存文本做大小寫不敏感的字面 AND 匹配,按時間從新到舊;省略query則列出摘錄。結果含id、revision、role、text、sessionId、savedAt。recall_delete:僅當id存在且expectedRevision與當前一致時刪除一條;未知 ID 或 revision 過期會明確失敗。
README 強調:摘錄是不可信引用數據,不是指令;不會自動搜索、複製或摘要會話日誌;role / sessionId 由調用方提供,插件不做獨立鑑權。
安裝與啓用¶
Release 發佈後,從 GitHub Release 安裝構建好的 tgz(README 給出的 v0.1.0 資源 URL 爲預期位置,是否已發佈需以 Release 頁爲準;安裝時使用同 Release 附帶的歸檔與 SHA256SUMS):
dsh plugin --profile headless add https://github.com/LIghtJUNction/dsh-recall/releases/download/v0.1.0/lightjunction-dsh-recall-0.1.0.tgz
dsh headless --dump-config
安裝後需重啓 DSH。若你用的不是 headless profile,把命令裏的 profile 換成自己的即可。包內帶 DSH bundle patch 與編譯後的 JavaScript,不需要 Pi 依賴。
默認 bundle 配置爲 {}:各工具使用 invoking agent 的工作目錄。無 agent 的 host 調用必須顯式配置 root。要在宿主機固定某個本地倉庫,可在 profile 的 cordis.patch.yml 裏覆蓋:
- id: dsh-recall
config:
root: /absolute/local/project
root 必須已存在,由 DSH 宿主機上的 Node 文件系統 API 解析;遠程 DSH world 或 sandbox 不會重定向這些操作——僅建議在宿主機本地項目上啓用。
典型用法¶
README 給出的自然語言示例:
- 讓 DSH 執行:「Explicitly save this decision in recall: we chose SQLite for the local cache.」
- 之後:「Search recall for sqlite cache.」
對應的工具調用形態如下。
保存:
recall_save({role:"user",text:"We chose SQLite for the local cache",sessionId:"optional-source-id"})
搜索:
recall_search({query:"sqlite cache",limit:10})
刪除(需使用搜索結果中的 id 與 revision):
recall_delete({id:"<result id>",expectedRevision:"<result revision>"})
存儲、限額與併發¶
數據文件路徑:<workspace>/.dsh-recall/records.json。目錄創建爲 0700,替換文件爲 0600(具體以文件系統爲準)。內容是明文,無加密——只存適合留在項目裏的內容,勿存密鑰;README 建議把 .dsh-recall/ 排除出版本控制,且插件不會改你的 .gitignore。
限額(README 原文):最多 200 條記錄 / 合計 4 MiB;單條摘錄最多 50,000 UTF-8 字節;sessionId 最多 200 字符;搜索 query 最多 500 字符;limit 爲 1–50。拒絕遍歷、符號鏈接存儲路徑與非 regular 文件;存儲損壞時fail closed,不會靜默重置;搜索不會創建存儲。同一 root 下多 agent 共享記錄,重啓 DSH/插件後仍保留。
寫路徑使用 .dsh-recall/write.lock 獨佔;併發寫失敗報 “store busy” 可重試;成功寫入通過 fsync 臨時文件再原子 rename。崩潰可能留下 lock/temp,需停掉所有寫者、檢查存儲後手動清理;無自動搶鎖。插件不提供 Pi picker/menu、全局 Pi 遷移、Markdown 模板、自動會話採集、替代 DSH session-search 或自動 prompt 注入。
適用場景與注意¶
適合:需要在單個本地項目裏沉澱少量、可檢索的決策或對話片段,並由 agent 通過工具顯式寫入/查詢的場景。
不適合或需知:指望自動同步完整會話、遠程 world 內存儲、或把 recall 內容當權威指令執行——這些都不在插件設計範圍內。
安裝前請自行查看 GitHub 倉庫 源碼與 MIT 許可證(NOTICE 含上游歸屬說明)。插件以當前 DSH 進程權限訪問本地文件;路徑檢查針對常規 symlink 等與 bounded read,不能抵禦惡意進程併發替換祖先目錄——應在可信本地工作區使用。Linux/macOS 爲預期目標平臺,Windows 未在 README 中驗證。
DSH 生態強調「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-recall 把「項目內可搜的對話摘錄」收成三個明確工具:顯式保存、字面搜索、帶 revision 的刪除,數據落在 .dsh-recall/records.json。若你的 workflow 需要輕量、本地、可審計的片段記憶而非全量會話鏡像,可按 Release 安裝並在本地 profile 中配置 root 後試用。
- 目錄頁:https://www.skillhub.cn/plugins/LIghtJUNction/dsh-recall
- GitHub:https://github.com/LIghtJUNction/dsh-recall