dsh-memory-nebula:把 DSH 的記憶攤開成一張星雲圖

前言

DSH 的記憶默認堆在 ~/.dsh/memory/ 下,一堆 markdown。能用,但你看不見:不知道寫了哪些記憶、它們之間有什麼關係、人格藏在哪個文件裏、上個會話說到哪兒斷了。插件 zyu-23/dsh-memory-nebula 想做的就是把這個目錄攤開——記憶可視化成力導向星雲圖,並且把記憶、人格、狀態三類數據的讀寫統一接管下來。

維護者是 Zyu-23,分類屬於「記憶」,GitHub 星標爲 0,版本 0.1.0,MIT 許可。屬於個人探索性質的插件,下面介紹的能力都來自其 README,不代表已大規模驗證。

這是什麼

一句話:一個 DSH 插件,做四件事:把記憶畫成力導向星雲圖;提供 memory_write / memory_read / memory_list / memory_delete / memory_search 五個記憶工具;把人格存成 persona.json 每輪注入;記錄「此刻正在做什麼」的狀態,換會話不丟。

它兼容 dsh-auto-memory 的 markdown 格式,思路借鑑了 peterpoal134/memory-brain(AGPL-3.0)的「存 / 喂 / 查」設計,本實現爲獨立編寫,採用 MIT 許可。

核心功能

星雲圖

  • 雙星雲:自動掃描 ~/.dsh/memory/<slug>/ 發現多個工作區,每個工作區一個「陣營」;只有一個工作區就是單星雲,不硬編碼路徑。
  • 力導向佈局:Canvas 2D 手寫物理引擎,參數爲斥力 2600 / 彈簧 0.045 / 阻尼 0.86;節點按類型着色(人 / 物 / 話題 / 地點 / 技能 / 人格)。
  • 點節點看詳情:關聯記憶列表 + 每條記憶的正本路徑。
  • 人格簇:圖中間一簇金色節點,對應「她是誰」。
  • 三種入口:側欄 Tab(小窗)/ 側欄圖標(全屏)/ 主面板。

記憶與檢索

memory_search 是四路打分合並:分詞(中文 bigram)→ IDF 加權 → 字段加權(名字 > 描述 > 正文)→ 關鍵詞、圖譜、重要性、新鮮度合併。沒有 embedding,同義不同詞可能查不到。

人格與狀態

人格數據在 ~/.dsh/memory-nebula/persona.json,每輪注入 <memory_nebula_persona>;狀態在 ~/.dsh/memory-nebula/state.json,每輪注入 <memory_nebula_state>。

狀態更新有兩條路:主力是手動調 nebula_state 工具,記錄準確;兜底是新會話開始時如果狀態超過 30 分鐘沒更新,插件用當前用戶消息自動記一筆,前綴「(自動)」,可被手動更新覆蓋。

注入與存儲

注入走 systemPrompt.section,order 4300 人格 / 4400 狀態 / 4500 記憶召回,注入文本按檢索結果簽名去抖,目的是減少 KV 緩存失效。記憶正本仍是 markdown + YAML frontmatter,寫入是原子的(tmp → rename)。

安裝與啓用

官方 README 只給了「手動安裝(推薦)」,這條路徑可用;npm 渠道暫未發佈,所以沒有可執行的一鍵命令。堅持不要憑插件名拼 dsh plugin add github:owner/repo,那個包名和命令不能保證可用。

1、把本倉庫整個目錄放進你 DSH profile 的 node_modules/:

<你的 DSH 目錄>/profiles/<profile>/node_modules/dsh-memory-nebula/

這一步是下載源碼後手工放置,README 未提供 dsh plugin 形式的快捷安裝。

2、編輯該 profile 的 package.json:

{
  "dependencies": {
    "dsh-memory-nebula": "0.1.0"
  },
  "dsh": {
    "profile": {
      "bundles": [
        "...",
        "dsh-memory-nebula"
      ]
    }
  }
}

3、重啓 DSH,然後驗證:打開側欄看到「記憶星雲」圖標即成功,點開是一張空白星雲圖 + 引導提示。

首次啓動插件會自動初始化兩個空白數據文件:~/.dsh/memory-nebula/entities.json(默認 entities: [])和 ~/.dsh/memory-nebula/persona.json(默認 directives: [] / sections: [])。這是設計如此,星雲圖開箱即空,內容要自己寫;已有數據不會被覆蓋,所以升級安全。

還要注意 peerDependencies 的版本區間:@deepseek-ai/cordis >=4.0.2 <5.0.0,@deepseek-ai/dsh-home-paths / dsh-llm / dsh-tools 都是 >=0.1.5-rc.2 <0.3.0,node 要求 ^22.19.0 || >=24.0.0。

典型用法

下面四步來自 README 的「使用(從零開始)」,是一個可復現的最小閉環。

第 1 步,看圖。打開側欄「記憶星雲」,剛裝好時圖是空白的,中間顯示提示:星雲還是空的 → memory_write 寫記憶 → nebula_extract 抽實體 → 刷新。

第 2 步,寫第一條記憶:

{
  "name": "my-first-memory",
  "description": "一句話摘要",
  "type": "project",
  "body": "記憶正文……"
}

第 3 步,抽實體,讓這條記憶進圖:

{ "memoryName": "my-first-memory", "side": "host" }

它會讀這條記憶,用 LLM 判斷涉及哪些實體、要不要新建,然後更新 entities.json。

第 4 步,刷新星雲圖,節點就長出來了。之後每條記憶重複「寫 → 抽」,圖會越來越豐富。

交互上:拖拽節點、滾輪縮放、拖空白平移;點節點看關聯記憶和正本路徑;金色人格節點點開看人格條目內容。注意圖是靜態快照,改了記憶要刷新頁面,抽實體也要手動調 nebula_extract。

想自定義人格,默認是空的,編輯 ~/.dsh/memory-nebula/persona.json:

{
  "directives": ["LANG_ZH_CN_ONLY", "ADDRESS_AS_USER"],
  "sections": [
    { "id": "identity", "title": "身份", "category": "身份", "content": "你是……" }
  ]
}

directives 是壓縮指令(給模型解析用),sections 是自然語言描述,每條在圖上對應一個金色節點。填好後每輪自動注入。

想手工加實體,也可以直接編輯 ~/.dsh/memory-nebula/entities.json:

{
  "entities": [
    { "id": 1, "name": "我的項目", "type": "topic", "side": "host" }
  ],
  "edges": [],
  "memoryEntities": { "host": {}, "qq": {} }
}

實體 id 不要重複,圖佈局依賴 id 做確定性定位。

數據位置

數據 位置
記憶正本 ~/.dsh/memory/<slug>/*.md(markdown + frontmatter)
實體關係 ~/.dsh/memory-nebula/entities.json
人格 ~/.dsh/memory-nebula/persona.json
狀態 ~/.dsh/memory-nebula/state.json(多工作區時按工作區拆成 state-<key>.json)
節點目錄 ~/.dsh/memory-nebula/contexts/
注入調試 ~/.dsh/memory-nebula/last-inject.json

排障時先看 last-inject.json,能直接看到這輪注入的內容。

適用場景與注意

適合這幾類人:想看到記憶之間關係的 DSH 用戶;想把人格從 AGENTS.md 挪到結構化文件、要求每輪注入的人;在多個工作區之間切換、希望「正在做什麼」跨會話保留的人。

注意幾點:

  • 插件以當前 dsh 進程的權限運行,能讀寫你 profile 下的文件和 ~/.dsh/ 數據。安裝前請檢查源碼,確認 entities.json / persona.json / state.json 的寫入內容符合預期。
  • 許可證是 MIT,但 persona.json 裏寫的是自定義人格指令,屬於你自己的配置。
  • README 明確寫了本插件不提供備份功能,要備份請自行向 DSH 提要求寫備份腳本,或用 git / 雲盤同步 ~/.dsh/memory/。
  • 已知限制:檢索無 embedding,同義不同詞可能查不到;圖是靜態快照;抽實體是手動的。
  • 若要改客戶端渲染代碼:修改 lib/client.template.js 後複製爲 client.js,lib/*.js 是宿主模塊。

結尾

這款插件的價值在把記憶從一堆 markdown 變成看得見的星雲,並順手統一了記憶 / 人格 / 狀態的管理。它當前還是早期版本(0.1.0,星標 0),收益取決於你是否有真的需要可視化記憶、需要跨會話狀態的場景;純文本記憶工具的用戶不必急着換。

目錄頁:https://www.skillhub.cn/plugins/Zyu-23/dsh-memory-nebula

GitHub:https://github.com/Zyu-23/dsh-memory-nebula

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

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

小夜