dsh-composer-tweaks:DSH 輸入框與側欄會話行的客戶端微調

前言

DeepSeek Harness(DSH)的 Composer 是智能體對話裏寫提示詞、插引用、發指令的主入口。默認界面裏 GenUI 小按鈕、添加文件 與 添加文件夾 分兩條路、輸入框只有 Lexical 視圖、用戶消息按純文本顯示;側欄會話行的置頂與開窗、子智能體會話樹等,也與不少人日常習慣不完全一致。

@jason25417/dsh-composer-tweaks 把上述能力收進一個客戶端 bundle:從 0.2.0 起合併了原 dsh-markdown-composer 的全部功能,在不動宿主核心組件的前提下,用槽位與命令擴展輸入框和側欄。下面介紹它做什麼、怎麼裝、怎麼用,以及 macOS 混選文件/文件夾爲何必須依賴 Host 半。

這是什麼

  • 名稱:@jason25417/dsh-composer-tweaks(GitHub:Jason25417/dsh-composer-tweaks)
  • 維護者:Jason25417(package.json 作者爲 Jason Tu)
  • 分類:客戶端(dsh.client.platform: web)
  • 許可:MIT
  • 當前版本(資料中明確):0.2.3;要求 dsh 版本 >=0.2.1-rc.0 <0.3.0,Node >=20
  • 一句話:Composer 與側欄行的小調整——混選文件/文件夾、GenUI 提示詞開關、Markdown 源碼/視圖與用戶消息渲染、側欄開窗與子會話樹等。

若你本機仍單獨安裝着 dsh-markdown-composer,應與 README 遷移說明一致:不要兩個 bundle 並存,否則會重複註冊同一批槽位。

核心功能

輸入框與加號菜單

  1. 隱藏 GenUI 輸入框小按鈕(選擇器 button[aria-label="GenUI prompt"])。
  2. GenUI 提示詞開關進左下角加號菜單:command genui-prompt,菜單項實時顯示開/關。
  3. 「添加文件」與「添加文件夾」合併爲「文件或文件夾」:command files-and-folders;在 macOS 上由 Host 調原生 NSOpenPanel,可同時多選文件和目錄,插入語義與桌面端拖拽一致(@ 引用 chip,文件夾 appearance=folder)。
  4. 輸入框下方「源碼 / 視圖」開關(conversation.composer.dock,order 2):
    - 源碼模式:輸入框上方等寬 textarea 寫 Markdown,實時寫回宿主草稿;⌘/Ctrl+Enter 發送。
    - 模式記在 localStorage,key 仍爲 dsh-markdown-composer.mode(老用戶設置不丟)。
  5. 聊天記錄裏用戶消息按 Markdown 渲染(conversation.user.text.node 的 text 鍵,priority 0);助手消息仍由宿主渲染。

視圖模式是宿主原生 Lexical 輸入框(所見即所輸);源碼模式是等寬麪板。宿主 composer 沒有瀏覽器側 Markdown 富文本層,因此沒有輸入框內的所見即所得——編譯後的 Markdown 體現在發送後的用戶消息展示上。

側欄會話行(0.2.1 起及後續)

  1. 「在新窗口打開」:替換行內原「置頂」按鈕;調用 @local/dsh-popout-window 的 POST /popout/open;置頂仍在右鍵菜單。
  2. Agent 創建標記(0.2.2):非手開會話左側顯示小機器人圖標;數據來自 ~/.dsh/session-origin.ndjson,Host 提供 GET /api/dsh-session-origin/list。
  3. 子會話樹(0.2.3):有子智能體的父會話左側顯示 ▸,浮層按 subagentCatalog 展開,點節點在對話區打開子會話(不替換官方側欄組件)。

合併後的菜單與兼容

  • 加號 →「指令」區保留:GenUI 提示詞(開/關)、文件或文件夾。
  • 本插件將 composer 的 filePicker 判爲不可用以隱藏宿主內置「文件」行;若宿主改實現導致隱藏失敗,最壞情況是新舊兩個入口並存,能力不丟。
  • 0.2.0 合併說明:inject 爲 ['slots', 'locale', 'commandUi'];locale 爲扁平點號鍵;解析器唯一源在 markdown.js。

安裝與啓用

市場或 SkillHub 目錄頁 安裝後,須完全退出並重開一次 DSH Desktop(Host 半僅在啓動時掛載;Client 半可熱加載)。未重開就點「文件或文件夾」會提示宿主半未加載。

CLI 安裝(README 原文):

dsh plugin --profile <profile> add @jason25417/dsh-composer-tweaks

也可通過 npm、release tarball 或源碼 link 安裝。卸載示例見 README:

# plugin_manager remove_bundle target=@local/dsh-composer-tweaks

典型用法

一次選多個文件和文件夾(macOS)

  1. 在 Composer 左下角加號菜單選 文件或文件夾(或觸發 command files-and-folders)。
  2. 宿主彈出 NSOpenPanel,多選文件與文件夾後確認。
  3. 每一項按拖拽同款規則插入輸入框:@相對路徑 或帶尾斜槓的文件夾 chip;路徑含空白時用 @"…" 包裹。
  4. 插件在 shell.overlay 顯示幀級 Toast:已插入 N 項 / 已取消選擇 / 失敗原因;取消時不插入。

非 macOS 上 Host 路由返回 501,error.code 爲 unsupported-platform,不假裝成功。

Markdown 源碼模式

  1. 在輸入框下方 dock 切換到 源碼。
  2. 從宿主草稿灌入 textarea;編輯時 inputActions.setDraft(value) 實時同步。
  3. 用宿主發送鍵或 ⌘/Ctrl+Enter(inputActions.submit())發送。
  4. 切回 視圖 時,宿主 setDraft 經 resolveDraftInput 把 @路徑、/命令 解析回 chip,引用一般不丟。

側欄

  • 點 在新窗口打開 將當前會話 popout。
  • 帶機器人圖標的行表示由 dsh-external-bridge / dsh-session-bridge 創建;有 ▸ 的父會話可展開子智能體樹。

Host 半接口(混選實現)

瀏覽器無法一次混選文件與目錄,故 macOS 上由 Host 執行與 DSH 自帶目錄選擇器同路的 osascript + NSOpenPanel:

  • 路由:POST /api/dsh-composer/pick(connection.fetch,同源 GUI)
  • 成功:{ ok: true, paths: [{ path, isDirectory }] };取消:paths: []

適用場景與注意

適合誰:長期在 DSH Desktop(尤其 macOS)裏寫帶 @ 引用的提示詞、希望輸入框更乾淨、需要 Markdown 源碼編輯與用戶消息可讀渲染,並依賴側欄開窗與子會話導航的開發者。

運行與信任:插件在當前 DSH 進程權限下執行;安裝前應查看 GitHub 源碼 與 MIT 許可證。SkillHub 等社區目錄爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係。

已知邊界(README):

  • 混選僅 macOS;Windows/Linux 明確 501。
  • 用戶消息 Markdown 爲子集(標題、圍欄代碼、引用、單層列表等);表格、嵌套列表按原文顯示;HTML 按文本防 XSS。
  • GenUI 隱藏依賴固定 aria-label="GenUI prompt";源碼模式隱藏原生輸入區依賴 [data-input-scroll] 與 html[data-dsh-markdown-source],宿主改 DOM 時可能雙輸入區同顯,但不壞草稿數據。
  • 插入的是路徑引用,不是把文件內容上傳到消息體(與普通文件拖拽一致;圖片上傳預覽不在此混選器範圍)。

維護者自測:node --test tests/*.test.mjs,README 記載 36 項通過。

結尾

dsh-composer-tweaks 把 Composer 微調、Markdown 輸入/展示和側欄會話行增強收成單一 bundle,減少多插件槽位衝突;macOS 上「文件或文件夾」一條入口覆蓋原先分立的文件與目錄選擇。安裝後記得完全重啓 Desktop,Host 路由纔會生效。

  • 目錄頁:https://www.skillhub.cn/plugins/Jason25417/dsh-composer-tweaks
  • 源碼與說明:https://github.com/Jason25417/dsh-composer-tweaks
羽毛球分组比赛记分
小程序二维码

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

小夜