dsh-dream-incubator:讓 DeepSeek Harness 在後臺做夢的插件

前言

寫 DSH(DeepSeek Harness)插件,大多數擴展都圍繞「正經事」:接工具、管會話、路由模型。會話裏積累的對話與工具日誌,通常只是躺在日誌文件裏,很少被二次利用。

dsh-dream-incubator 走的是另一條路。它監聽會話事件流,在你繼續工作的同時於後臺異步「做夢」,把當天的會話素材蒸餾成風格化的中文夢境報告,呈現在一個沉浸式網頁裏。定位上更像給 harness 加了一層「潛意識」,但工程實現是完整的:四種認知心理學機制、六個可輪換的夢境風格、一套 Web 路由和明確的隱私邊界。下面按安裝、機制、配置的順序介紹。

這是什麼

dsh-dream-incubator 由 Lisk809 維護,MIT 許可,當前版本 0.1.0。一句話定位:讓 DeepSeek Harness 擁有潛意識——後臺異步做夢,把日常對話與工具日誌釀成夢境報告,呈現在沉浸式 WebUI 中。

具體來說,插件通過 Cordis firehose 監聽會話事件流,在後臺異步做夢,每個會話每個冷卻期產出一篇夢境報告,集中呈現在 /dreams 沉浸式網頁。

安裝與啓用

dsh plugin --profile web add dsh-dream-incubator

這條命令通過補丁包註冊一行 dream-incubator。profile 的區別在於:headless profile 獲得引擎與命令;web profile 額外掛載 UI。serveUi 爲 true(默認值,僅對 web profile 生效)時,打開 http://<host>:<port>/dreams 即可瀏覽夢境頁面。

工作機制

先說素材從哪來。插件通過 Cordis firehose 監聽會話事件流,把會話事件整理成素材窗口;做夢時,引擎走「路由 → 取窗口 → 情緒掃描 → 生成 → 記錄」的週期,整個過程異步進行,不阻塞手頭的工作。

設計上遵循四種認知心理學機制:

  1. 激活-合成:每個夢從素材窗口的情緒掃描開始(PAD 模型:valence / arousal / dominance),再按六種風格之一合成敘事。
  2. 威脅模擬:失敗回合、工具錯誤、中止請求會被加權進素材與情緒提示——壓力大的日子和安靜的日子,做出來的夢不一樣。
  3. 記憶重組:引擎用按風格的噪聲種子重排真實會話事件窗口,每個夢都是對真實事件的一次重新詮釋,絕不原樣重放。
  4. 孵化效應:冷卻期與每日上限防止引擎過度做夢,間隔本身就是孵化。

夢境風格與自定義

內置六種風格:黑色懸疑、賽博朋克、超現實、奇幻、寓言、恐怖。風格庫每 styleRotationDays 天輪換一次。

支持自定義 styles,追加在內置六種之後,參與同一輪換。每個條目需要 id(唯一,不與內置衝突)、nameZh / nameEntriggerfatigue / joy / anxiety / boredom / confusion / conflict 六選一)、imagery(非空字符串數組),palette 可選(默認取 style id):

styles:
  - id: cosmic
    nameZh: 星際漂流
    nameEn: Cosmic Drift
    trigger: boredom
    imagery: [深空塵埃, 失重的茶, 土星環上的雪]
    # palette: nebula   # 可選;默認取 style id

命令

插件提供三個會話命令:

  • /dream:立即強制做夢,繞過冷卻與素材門檻。
  • /dreams:列出最近 8 條夢境,含風格、情緒、素材跨度,可逐條標記收錄(collect)或遺忘(forget)。
  • /dreamsettings:查看即時引擎設置:模型路由、噪聲、門檻、隱私、UI。

沉浸式 WebUI

serveUi 爲 true 時,打開 http://<host>:<port>/dreams。頁面是一間深夜畫廊:紫藍色星雲光效與漂浮雲霧作背景,首屏有一個大型 PAD 圖形(valence × arousal × dominance)與漂浮噪點;下方是碎片卡片拼成的懸浮拼貼——每張卡片是不規則四邊形或五邊形,形狀由夢的 id 派生,跨訪問保持穩定——隨鼠標 3D 傾斜,每種風格有一種低飽和強調色。點擊卡片進入夢境詳情;可按風格、情緒、時間篩選,統計行會告訴你最常夢見什麼。頁腳的月亮點擊 7 次會打開只讀 stardial 控制檯。新夢境通過 SSE 即時推送。

Web 路由如下:

路由 用途
GET /dreams 頁面本體
GET /dreams/assets/* 靜態資源(字體、CSS、JS)
GET /dreams/api/dreams 賬本 JSON(最新在前)
POST /dreams/api/dreams 變更記錄(collect / forget)
GET /dreams/api/settings 即時引擎設置(只讀,stardial 的數據源)
GET /dreams/api/stream SSE,推送每條新夢

配置

所有配置鍵均可選,默認值由 harness patch 提供——本包不含硬編碼默認值,缺失鍵在加載時 fail loud;非法值(未知鍵、非整數限制、provider 缺 model、重複 style id 等)同樣在加載時拋錯,並顯示確切信息。

默認值 含義
cooldownMs 3600000 同一會話兩次夢之間的最小安靜間隔
minMaterialEvents 4 距上次做夢後,引擎做夢所需的最少素材事件數
maxDailyDreams 8 每會話每日硬上限(午夜重置)
styleRotationDays 4 風格庫(內置 + styles)每 N 天輪換
noiseIntensity medium 激活-合成噪聲強度:low / medium / high
maxOutputTokens 500 掃描與做夢兩次模型調用的輸出 token 上限
timeoutMs 120000 單次做夢週期的端到端截止時間
privacyMode false 爲 true 時,掃描提示只接收消息計數與工具名,不含用戶文本
provider / model null 可選顯式模型路由,必須同時出現;缺省時複用會話最近記錄的 request/header 路由
styles [] 自定義風格,追加在內置六種之後
storePath ~/.dsh/dream-incubator/dreams.json JSON 夢境賬本位置
serveUi true /dreams 提供頁面,僅 web profile 生效

隱私與數據邊界

隱私邊界是設計裏明確寫出來的一部分。privacyMode 爲 true 時,掃描提示只包含消息計數與工具名,不含用戶文本。每個夢引用其確切的 materialSeqs(構建它所用的素材事件序號),引擎不觸碰窗口外的會話數據。

夢境存儲爲版本化 JSON 賬本,原子寫入,上限 300 條,路徑由 storePath 配置。

開發與發佈

想看實現或做二次開發:

pnpm install
pnpm build    # tsdown → lib/
pnpm test     # vitest,86 個單元 + 集成 + 路由測試

發佈目標是 dsh-plugin npm tag:

npm publish --tag dsh-plugin

發佈產物包含 lib/(引擎、invariant 伴隨、lib/webui/ 靜態資源)以及供 dsh plugin add 使用的 cordis.patch.yml。依賴上,直接依賴 dsh-invariants、dsh-timeout、schemastery;peer 依賴 cordis 與 dsh-agent、dsh-llm、dsh-session 等 @deepseek-ai 系列包。

適用場景與注意

適合兩類人。一是長期使用 DSH 的開發者,想要一種不佔用注意力的會話回顧方式——夢境報告本質上是當天對話與錯誤的風格化摘要,情緒掃描還能提示「今天跑得不順」。二是想研究 DSH 插件怎麼組織的開發者,這個包覆蓋了引擎、命令、WebUI、SSE、invariant 伴隨等一整套結構,測試也比較齊全。

兩點注意。第一,插件以當前 dsh 進程的權限運行,安裝前應檢查源碼與許可證(本項目爲 MIT)。第二,DSH 的理念是「一切皆插件」,社區目錄是獨立站點,與 DeepSeek、幻方沒有官方從屬關係,安裝與使用以插件自身文檔爲準。

結尾

回顧一下:dsh-dream-incubator 用 Cordis firehose 監聽會話事件流,在後臺異步把日常對話與工具日誌蒸餾成風格化中文夢境報告;四種認知心理學機制控制做夢的節奏與內容,/dreams 提供沉浸式瀏覽,隱私與數據邊界寫得清楚。裝上它,你的 harness 會在你繼續工作的時候,替你把今天重新「想」一遍。

  • GitHub:https://github.com/Lisk809/dsh-dream-incubator
  • 社區目錄頁:https://www.skillhub.cn/plugins/Lisk809/dsh-dream-incubator
羽毛球分组比赛记分
小程序二维码

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

小夜