dsh-session-row-actions:側欄會話行懸浮按鈕可配置

前言

在 DeepSeek Harness(DSH)裏,工作區側欄會列出大量會話。鼠標懸停在某一行時,行尾會出現一排快捷操作;其中不少能力藏在「…」菜單裏,需要多點一次。官方把各按鈕的 order 寫死在行組件裏,沒法按個人習慣把「歸檔」「分叉」等菜單項提到懸浮條上,也沒法調整它們的出現順序。

下面介紹社區客戶端插件 dsh-session-row-actions(維護者 railgun20001):用可勾選、可拖拽的配置,重繪懸停時的那一排按鈕;行上右鍵仍可打開官方完整菜單。配置入口在「插件管理 → 本插件詳情頁」,不在「設置 → 通用」。

這是什麼

dsh-session-row-actions 是 DSH 的 web 客戶端半插件(@deepseek-ai/dsh-client-ui-workspace 注入,immediately: true)。當前 npm 包版本爲 0.5.1,許可證 MIT,GitHub 星標爲 0(以倉庫頁面爲準)。

它解決的是側欄 會話行尾懸浮操作區 的展示與順序問題:官方「…」菜單裏的動作可以勾選成懸浮按鈕並排好序;默認勾選「歸檔」「分叉」。簡介裏提到的「置頂會話換成分叉會話」指的是:在可配置的懸浮條裏,你可以用「分叉」等菜單動作替代原先行尾那套固定佈局,而不是刪除官方菜單裏的「置頂」——置頂、重命名仍通過官方菜單條目觸發。

核心功能

懸停條與右鍵菜單的分工

懸停一行會話時,行尾顯示的是你配置的那排按鈕。默認示例(README)如下:

懸停一行會話  →   (…)  歸檔會話  分叉會話        ← 默認:只勾了「歸檔」「分叉」
在行上右鍵    →   官方「…」菜單(置頂 / 重命名 / 分叉 / 歸檔 / 複製 Session ID)

「更多(…)」在懸浮列表裏 位置固定:永遠在第一行、也永遠在懸浮條最前,不能拖動也不能從列表移除,只有勾選框控制顯隱(單獨存爲 moreVisible)。列表下方說明:在會話行上點右鍵也能打開同一套菜單。

插件管理頁的兩個列表

路徑:插件管理 → 會話行懸浮按鈕(本插件詳情頁)。界面是兩個 各自獨立排序 的列表:

列表 內容 操作
懸浮按鈕 第一行固定是「更多(…)」,其餘是已勾選的動作 「更多」只可切顯隱;其餘可拖動排序、取消勾選即移出
更多菜單 置頂 / 重命名 / 分叉 / 歸檔 / 複製 Session ID(不含「更多」) 勾選即加入懸浮按鈕;拖動隻影響這個列表

要點:

  1. 兩個列表的數據分別是 hoverOrder 與 menuOrder,拖動一個不會改動另一個。
  2. 勾選時按 menuOrder 的相對位置插入 hoverOrder;之後可在懸浮列表裏再拖。
  3. 菜單列表的排序 不會 改變系統自帶菜單的排列。

實現上做了什麼(便於排查問題)

插件通過樣式隱藏官方插槽裏的默認按鈕,再按配置渲染整排;官方「更多」觸發器收成 0 寬但留在 DOM 裏,作爲菜單錨點。右鍵用 window 捕獲 mouseup(button 2)去點官方觸發器,避免本應用裏 contextmenu 不可靠以及菜單被遮罩立刻關掉的競態。

  • 置頂 / 重命名:打開官方菜單再點對應條目(uiWorkspace 未直接暴露這兩項 API)。
  • 分叉 / 歸檔 / 複製 Session ID:調用 uiWorkspace.forkSession、archiveSession / unarchiveSession、navigator.clipboard 等已有契約。

偏好保存在瀏覽器 localStorage 鍵 dsh-session-row-actions/prefs-v4({ menuOrder, hoverOrder, moreVisible }),改完即時生效,無需重啓;v1–v3 舊數據會自動遷移。

插件作者記錄的兩條插槽契約值得留意:側欄行動作插槽須用 ctx.slots.inject 而非過早 register;所有註冊包在 try/catch 裏,避免 apply 失敗導致整窗無法啓動。

安裝與啓用

DSH 生態按「一切皆插件」組織;SkillHub 是社區目錄站點,與 DeepSeek / 幻方無官方從屬關係。該插件在目錄頁的「發送給 DeepSeek Harness 安裝」會給出一段自然語言指令,大意是:

請安裝 DSH 插件 railgun20001/dsh-session-row-actions。

把目錄頁上的 完整 安裝說明覆制給當前 Harness 會話,或按你本地 DSH 已支持的插件安裝方式添加 railgun20001/dsh-session-row-actions(README 與 package.json 未給出單獨的 shell 一行命令,請勿自行拼接未在文檔出現的 dsh plugin add 參數)。

啓用後,在 插件管理 打開本插件詳情頁即可看到「會話行懸浮按鈕」配置區塊(keyed 插槽 plugins.bundle.config,包名 dsh-session-row-actions)。

典型用法

  1. 打開 插件管理 → dsh-session-row-actions → 會話行懸浮按鈕。
  2. 在 更多菜單 列表勾選希望出現在懸停條上的動作(例如「複製 Session ID」)。
  3. 在 懸浮按鈕 列表拖動已勾選項,調整懸停時的從左到右順序;不需要「…」時取消「更多」的勾選(仍可右鍵出菜單)。
  4. 回到側欄,懸停任意會話行,確認行尾按鈕與配置一致;在行上 右鍵,確認官方五項菜單齊全。

維護者在 2026-10-23 的驗證記錄:本地 node test/client-half-test.mjs 通過工廠、插槽、兩個列表、勾選、排序、分叉權限與 v1 遷移;隔離 profile 下瀏覽器中配置即時生效,默認懸浮條爲「歸檔」「分叉」。

倉庫自測命令(開發或審源碼時):

node test/client-half-test.mjs

要求 Node >= 20(見 package.json 的 engines)。

適用場景與注意

適合誰:長期在 DSH web 客戶端管理大量會話、希望把常用動作固定在懸停條、並保留官方菜單與確認彈窗(置頂、重命名)的開發者。

注意:

  • 本插件是 客戶端模塊,在瀏覽器側運行,讀寫本地 localStorage;不 import Harness 客戶端包,只依賴主題令牌與 DOM 穩定標記,DSH 大版本升級後若側欄 DOM 或插槽變更,可能需要等插件更新。
  • 插件與當前 DSH 進程/瀏覽器上下文 同等權限;安裝前應閱讀 GitHub 源碼 與 MIT 許可證,確認可接受後再啓用。
  • 問題反饋可走倉庫 Issues。

結尾

dsh-session-row-actions 把側欄會話行懸停操作從固定佈局改成可配置的一排按鈕,並用右鍵保留官方「…」菜單完整能力;配置集中在插件詳情頁,改完即生效。

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

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

小夜