前言¶
在 DSH(DeepSeek Harness)裏寫 prompt 的人常有兩類重複動作:把一段鬆散的草稿改得更清楚,或只想把其中一句換個說法,其餘部分保持原樣。傳統做法是把整段粘進模型,得到結果再手動比對回原框,中間還要擔心改壞後無法回退。
下面介紹的插件 dsh-prompt-spark 針對的就是這個位置——它不在側邊欄或設置頁,而是直接掛在 DSH 輸入工具欄旁邊。按 README 的說法,它是「無設置頁、無配置文件,可選項藏在手勢裏」。
這是什麼¶
dsh-prompt-spark 由 mihoojj 維護,託管在 GitHub,通過 npm 以 dsh-prompt-spark 包名分發。定位一句話:點一下輸入框旁的 sparkle 按鈕,就用當前會話已在使用的那個模型路由,把草稿改寫成更清楚的版本,並支持即時撤銷。
它屬於模型推理類插件,複用現有會話的模型與密鑰,本身不新增 provider 配置。許可證是 MIT。
核心功能¶
-
改寫(Rewrite):點擊 sparkle 按鈕,按當前會話的建模路線把草稿改寫得更清楚,改寫結果直接替換輸入框內容。
-
撤銷(Undo):改寫後按鈕變爲 undo。只有在草稿仍與改寫結果完全一致時 undo 纔可用;一旦手動編輯,按鈕回到 sparkle,撤銷窗口關閉。
-
風格預設(Styles):長按或右鍵按鈕彈出四個固定預設——Clearer、Shorter、More formal、More casual。選擇後會記住,下一次單擊沿用該風格。
-
選區改寫(Selection rewrite):先選中草稿的一部分再點按鈕,只改寫選中片段;周邊文本作爲上下文一起發送,以保持結果流暢。
-
快捷鍵:DSH Desktop 下爲
Ctrl+Shift+O(macOS 是Cmd+Shift+O),Web 構建下爲Ctrl+Alt+Shift+O。兩者都在內置 Keyboard shortcuts 面板裏可重映射。Web 版之所以多一層 Alt,是因爲Ctrl+Shift+O被官方「在應用中打開」佔用了。 -
顯示控制:草稿爲空或只有空白字符、輸入框處於
adjudicating/submitting狀態時,控件自動隱藏。改寫失敗時草稿保持原樣,按鈕 tooltip 報告原因碼。
安裝與啓用¶
README 給出的安裝方式有兩種,包名都是 dsh-prompt-spark,不是 github:mihoojj/dsh-prompt-spark 這種形式。
第一種,在 DSH Desktop 裏操作:打開 Plugins,選擇 Add plugin,填入包名或該倉庫的絕對路徑,然後啓用:
dsh-prompt-spark
第二種,從終端針對指定 profile 安裝:
dsh plugin --profile <profile> add dsh-prompt-spark
修改 client.js(瀏覽器半邊)只需刷新頁面。改 index.js(宿主半邊)需要重啓應用。
典型用法¶
先輸入一段粗糙的草稿,例如目標、約束、輸出格式混寫在一起的描述。然後點工具欄旁的 sparkle 按鈕,框內文本被改寫後的結果替換。若不滿意,只要文本未被再次編輯,直接點 undo 回到原文。
只想調整中間一句時,選中該句再點 sparkle,被選中的片段被替換,其餘部分按上下文保留。想換一頭一尾的語氣差異時,長按按鈕在 Clearer / Shorter / More formal / More casual 之間選擇,下一次單擊即應用該風格。
內部結構¶
插件分宿主與瀏覽器兩半,入口各自獨立,這個劃分決定了調試時要不要重啓應用。
| 文件 | 角色 |
|---|---|
package.json |
npm bundle:dsh.bundle.patch 指向 cordis.patch.yml,dsh.client.platform 爲 web,對應 client.js |
cordis.patch.yml |
只有一行 insert,name 爲該包名 |
index.js |
宿主半邊。inject 爲 ['webServer','connection'],註冊精確的 POST /dsh-prompt-spark/rewrite,落在 Connection trust fence 之後,帶 body 大小限制,內部調用 llm.stream |
client.js |
瀏覽器半邊。通過 window.__ModuleLoader__.load({ id, factory }) 註冊,返回 { inject: ['slots','locale'], apply(ctx) } |
locale/*.json |
插件頁的顯示元數據 |
瀏覽器用 new URL('dsh-prompt-spark/rewrite', document.baseURI) 相對文檔解析路由,因此掛載前綴的場景也能工作。宿主不接觸 provider 密鑰或端點,而是順着組合的 llm 服務流式轉發,使用會話自身的 provider/model,失敗時回退到配置好的默認值。風格是固定指令後綴,沒有任何配置界面。
開發與驗證¶
npm test # node test/host.test.mjs && node test/client.test.mjs
npm run check # node --check index.js && node --check client.js
npm run pack:check # npm pack --dry-run
test/host.test.mjs 覆蓋路由邊界、方法與 body 限制、風格與選區請求的封裝、LLM 流的各種結果。test/client.test.mjs 用一個小型 React 支架驅動組件,覆蓋可見性規則、改寫/撤銷生命週期、風格菜單、長按、選區替換、失敗 tooltip 與註冊結構。
適用場景與注意¶
適合日常在 DSH 輸入框寫 prompt、希望就近改寫措辭卻又不想跳出窗口的人。它依賴當前會話已有的模型路由,所以行爲與該會話一致,風格切換不會改變底層模型選擇。
兩點需要注意。其一,這個插件以當前 dsh 進程的權限運行,安裝前應當自己審一遍源碼與許可證(README 標註爲 MIT)。其二,插件目錄頁屬於第三方社區站點,與 DeepSeek / 幻方無官方從屬關係,安裝渠道以包名爲準。
小結¶
dsh-prompt-spark 把改寫這件事壓到一個按鈕、一次撤銷、四個風格上,不引入配置面,也不打斷當前會話的模型上下文。對希望減少手動往返的用戶來說,這是個可以直接落地的小工具。
目錄頁:https://www.skillhub.cn/plugins/mihoojj/dsh-prompt-spark
源碼與說明:https://github.com/mihoojj/dsh-prompt-spark