前言¶
DSH 的理念是「一切皆插件」,界面本身也是可替換的一環。對於日常要用 DSH 工作臺的人,純深色或純淺色主題看久了容易疲勞;想換換口味,又不希望動到聊天記錄、代碼塊字體這些真正影響閱讀的部分。dsh-theme-eva 就是衝着這個需求來的:它把工作臺換成《新世紀福音戰士》裏 EVA 機體的一整套視覺,包括開機動畫、同步率儀表和機體配色,但把聊天與代碼區保留給 DSH 自己的排版。
下面介紹 nerv-base/dsh-theme-eva,一個由 nerv-base 維護的 DSH 插件,分類屬於趣味換裝。它目前尚未發佈到插件市場,需要按 README 的方式自行構建後安裝。
這是什麼¶
一句話定位:dsh-theme-eva 是 DeepSeek Harness 的 EVA 主題插件,提供初號機(Unit-01)和弐號機(Unit-02)兩套機體配色,可在運行時實時切換。倉庫地址是 https://github.com/nerv-base/dsh-theme-eva ,目錄頁在 https://www.skillhub.cn/plugins/nerv-base/dsh-theme-eva ,當前版本 0.2.1,代碼以 MIT 許可發佈。
它解決的問題很具體:讓 DSH 的界面換上 EVA 機體的色彩語言(裝甲色、標記色),同時用代碼畫一段開機的「接入」動畫,而不是塞一堆第三方美術素材。兩套機體的差異參數如下:
| 機體 | 裝甲色 | 標記色 | 同步停止點 |
|---|---|---|---|
| 02 弐號機 · PRODUCTION MODEL | #d8262e |
#f06a22 |
99.2% |
| 01 初號機 · TEST TYPE | #8d4dde |
#a0da3b |
99.6% |
核心功能¶
接入動畫(Entry cinematic)¶
每次打開頁面會播放一段由代碼繪製的開機序列:起始閘門 → 賽璐璐着色(toon + 描邊)的插入栓以硬切鏡頭插入脊椎接口 → X 光視角看插入栓穿過鎖環 → LCL 灌滿駕駛艙並通電 → 指揮室監視器畫面的硬切序列(主電力分配、逐行展開的電路矩陣、按肢體逐一點亮的解剖神經連接圖、A10 迴路腦區生命體徵曲線、三臺計算機投票)穿插在明朝體字幕卡之間 → 諧波示波器中駕駛員與機體兩個波形(六邊形網格管)隨同步率上行到機體的停止點,等待駕駛員確認 → 100% → 「弐號機 起動」/「初號機 起動」標題卡 → 進入工作臺。
整段完全由 three.js 與 2D canvas 實時繪製,只在播放期間加載。想跳過,按住 Esc(或按住跳過按鈕)約 1.2 秒,進度條按住時填充、提前鬆手會回退。
同步率錶盤(Sync plate)¶
會話頭部有一塊小錶盤,同步率 = 100% − 上下文窗口占用率,取自會話真實的上下文壓力。低於 30% 變爲橙色(精神汚染),低於 10% 變爲紅色(シンクロ率低下)。
運行指示燈(Running indicator)¶
對話末尾的原生「Deep diving / 深度求索中」視覺被替換爲「內部電源」時鐘和機體標記色的淡信號線。時鐘讀取當前這一輪的真實開始時間戳,因此切換會話或在輪次中途掛載都不會重置它。關閉主題或關閉運行指示燈會恢復原生顯示,其靜態屏幕閱讀器播報仍被保留;撰寫區上方不會出現重複的指示燈。
背景層(Backdrop)¶
對話區背後是自制的監視器風格圖形:淡的「弐」/「初」水印、六邊形網格、豎排說明文字、相位列表和警示條紋。這些輪廓是從 OFL 字體描出來的,沒有使用第三方美術。
日常皮膚(Everyday skin)¶
日常使用的皮膚相對剋制,目的是讓聊天和代碼保持可讀:機體配色、倒角、側邊欄頂部的裝甲色漸變、「02」/「01」機體徽標、明朝體標題。消息和代碼塊仍然使用 DSH 自帶的字體。
設置項¶
設置位於「Settings → General → EVA 接入 / EVA Link」:主題、機體(搭乘機體:初號機 / 弐號機)、接入動畫、語音與音效、運行指示燈、同步率錶盤都可以單獨關閉,還有一個 Replay 按鈕。側邊欄底部另有「重新接入 / Re-link」按鈕。
有幾個行爲需要注意:
1、主題開啓時外觀被鎖定爲深色(EVA 沒有淺色模式),關閉主題會恢復你自己設置的淺色 / 深色 / 跟隨系統。
2、如果系統開啓了 Reduce motion,3D 接入動畫會被一段 2 秒的靜態標題卡替代,沒有閘門,也沒有運行指示燈動畫。
安裝與啓用¶
官方 README 給出的安裝方式是先構建 bundle:
git clone https://github.com/nerv-base/dsh-theme-eva.git
cd dsh-theme-eva
npm install
npm run build
上面的命令從倉庫源碼構建出 lib/client.js(主 bundle)與 lib/client.cinema.js(惰性加載的接入動畫 chunk)。構建完成後,在 DSH 會話裏讓 agent 用插件管理器的 install_bundle 安裝該目錄的絕對路徑;倉庫也說明,待插件市場發佈後可從市場安裝。安裝後需要重載窗口。
典型用法¶
globalThis.dshThemeEva.units // [{ id: "02", themeId: "eva-02", label, palette, … }, { id: "01", … }]
globalThis.dshThemeEva.getUnit() // 當前顯示的機體;主題關閉時爲 undefined
await globalThis.dshThemeEva.setUnit("01") // 持久化並切換(Host 拒絕時返回 false)
await globalThis.dshThemeEva.setEnabled(false)
window.addEventListener("dsh-theme-eva:change", (e) => e.detail) // { unit: "01", themeId: "eva-01" } | { unit: null, … }
每一臺機體註冊自己的 DSH theme(eva-01 / eva-02);切換時先激活新主題再收回舊主題,因此不會閃出默認調色板。皮膚與組件樣式讀取 --eva-accent、--eva-marking、--eva-green 等自定義屬性,其他插件也可以複用;body[data-eva-theme] 上存放機體 id。
選中的機體是 settings 文檔 theme-eva 段落裏持久化的 unit 字段("01" | "02",默認 "02"),因此設置界面、configForms.get("theme-eva").set("unit", "01") 或編輯 settings 文檔都能切換。
想單獨預覽某臺機體的接入動畫,用本地靜態服務器打開 /scripts/harness/cinema.html,加 ?unit=01 可以看另一臺機體的版本。
適用場景與注意¶
適合想把 DSH 界面換成 EVA 機體風格、又希望不影響閱讀的人;也適合想研究如何在 DSH 裏寫主題插件的開發者。README 裏還寫了完整的開發命令:
| 命令 | 作用 |
|---|---|
npm run build |
把 src/ 打包爲 lib/client.js 與惰性 chunk lib/client.cinema.js;-- --dev 跳過壓縮,-- --watch 監聽重建。 |
npm test |
運行機體數據、原生狀態適配器和掛載 React 生命週期的迴歸測試。 |
npm run fonts |
從完整 OTF/TTF 源重新子集化字體(EVA_FONT_SRC,默認 /tmp/evafonts);改動日文文案後需要執行。 |
npm run voice |
用 edge-tts 渲染缺失的播報音頻;-- --force 重新渲染全部。需要先 python3 -m pip install --user edge-tts。 |
使用前需要留意幾點。插件以當前 dsh 進程的權限運行,安裝前應先檢查源碼與許可證。倉庫聲明代碼是 MIT 許可,捆綁字體是 SIL OFL 1.1 子集的 Noto Serif CJK JP 和 Barlow Condensed,three.js 是 MIT;播報音頻不在 MIT 許可覆蓋範圍內,它們是用 Microsoft 的 ja-JP-NanamiNeural 聲音經 edge-tts 渲染的,Microsoft 並未對這類輸出授予明確的再分發許可,詳見倉庫的 NOTICE.md。另外這是非官方同人作品,與 khara、Studio Gainax 等版權方及 DeepSeek 均無關聯,不含原作的影像、音樂、配音、角色美術或標誌。
結尾¶
dsh-theme-eva 的價值不在於改了多少 DSH 的能力,而在於把「打開工作臺」這件事做了一層機體化的包裝:接入動畫只在播放時加載,同步率錶盤讀的是真實上下文壓力,日常皮膚保留 DSH 自己的字體排印。想試試的人,先按官方命令構建 bundle,再通過 install_bundle 掛載即可。
目錄頁:https://www.skillhub.cn/plugins/nerv-base/dsh-theme-eva
倉庫:https://github.com/nerv-base/dsh-theme-eva