dsh-user-message-jump:在 DSH Web 會話左側顯示用戶消息跳轉豎帶

前言

在 DSH 的 Web 客戶端裏,一條長會話往往由多段模型輸出和用戶消息交錯組成。想回看「我當時問了什麼」,只能一路向上滾動,消息越多這件事越費時。Codex 的會話界面在左側提供了一條目錄導航,點一下就能跳到對應消息,這個做法可以借鑑。

dsh-user-message-jump 把類似的能力帶進 DSH Web 客戶端:在會話區左緣顯示一條豎帶,每條短橫線代表一條用戶消息,懸停可預覽,點擊即跳轉。下面介紹它的功能、安裝方式和注意事項。

這是什麼

dsh-user-message-jump 是一個 DSH Web 客戶端插件,由 jiangnan-awa 維護,當前版本 0.1.0,許可證爲 MIT(README 與 package.json 均有聲明)。

它解決的是一個具體問題:長會話中快速定位用戶消息。插件不改動會話內容,只在客戶端界面上加一條導航豎帶。

核心功能

按 README 描述,插件行爲如下:

  • 豎帶與橫線:會話區左緣出現約 14px 寬的豎帶,每條短橫線代表一條用戶消息,既包括普通 user 消息,也包括運行中插入的 steering 消息,從上到下按時間排列。
  • 懸停預覽:橫線平滑變長(12px → 36px)並變爲品牌色,右側彈出氣泡,顯示消息文本預覽(最多 3 行)與發送時間。
  • 點擊跳轉:會話滾動到對應消息,頂部留 12px 空隙;該消息行以品牌色描邊高亮約 1.2 秒,對應橫線保持高亮標記。
  • 命中區與穿透:橫線之間爲無縫命中區(每個命中區 8px 高),鼠標在相鄰橫線間移動不會「選空」;豎帶空白處點擊穿透,不遮擋會話內容。
  • 自動隱藏:沒有用戶消息時豎帶自動隱藏。
  • 鍵盤操作:Tab 聚焦後按 Enter 或 Space 跳轉。
  • 主題跟隨:樣式僅使用 DSH 主題 token(如 --dsw-alias-bg-overlay、--dsw-alias-brand-primary),跟隨亮/暗主題。

安裝與啓用

先構建。倉庫已提交 lib/client.js,可直接使用;如需修改源碼,改完後再構建一次:

npm run build

再通過 DSH 官方安裝命令把插件裝進 profile 的 bundle 棧。本包聲明瞭 dsh.bundle(即 cordis.patch.yml 包級補丁層),所以可以直接裝:

dsh plugin --profile <name> add dsh-user-message-jump

這條命令等價於在 profile 的 cordis.patch.yml 中手工掛載:

- insert:
    - id: user-message-jump
      name: dsh-user-message-jump

注意:如果 profile 裏已經有上面這段手工掛載行,改用 bundle 通道前要先刪掉它,避免雙掛載。

經過上面的步驟,重啓 DSH。Web 端會通過 dsh.client 掃描把本包編入啓動圖(路徑形如 /plugins/<name>/client.js?rev=<hash>),刷新頁面後生效。

環境要求

  • DSH 版本需支持 web 客戶端模塊系統(dsh.client / window.__ModuleLoader__);
  • 運行環境需包含 react(seed 模塊,peerDependencies 爲 ^18.2.0)與聲明瞭 conversation.session.header.actions 槽位的會話 UI 包(DSH 自帶);
  • Node >= 18。

源碼與二次開發

倉庫結構如下:

├── package.json        # dsh.bundle 聲明 + dsh.client 聲明 + exports["./client"]
├── cordis.patch.yml    # dsh.bundle.patch 包級補丁層(一行 insert)
├── src/
│   ├── client.js       # 插件源碼(純 JS,createPlugin(React) 工廠)
│   └── style.css       # 豎帶樣式(僅使用 DSH 主題 token)
├── scripts/
│   └── build.mjs       # 打包爲 window.__ModuleLoader__.load 格式
├── lib/
│   └── client.js       # 構建產物(已提交,掃描時需要存在)
└── README.md

修改源碼後執行 npm run build,會重新生成 lib/client.js,產物帶內容哈希 rev,頁面會自動取新包。

另外,同一功能也可以作爲動態 Cordis 插件免安裝臨時加載。代碼形態略有差異:CSS 用 styles.insert,定時器走 ctx.timer(inject: ['timer']),無需 __ModuleLoader__ 包裝,具體見 DSH 的 cordis 插件開發文檔。

適用場景與注意事項

適合兩類人:經常在 DSH Web 客戶端跑長會話、需要回溯自己消息的使用者;想在 DSH 客戶端上做類似導航能力的開發者,可以把它當作一個可參考的完整樣例——從 dsh.bundle 聲明到客戶端模塊打包、再到主題 token 的使用,倉庫裏都有對應文件。

安裝前請注意:插件以當前 dsh 進程的權限運行,裝進 profile 前應先檢查源碼與許可證。本插件的許可證爲 MIT,源碼在 GitHub 上可查。此外確認 profile 裏沒有重複的手工掛載行,運行環境滿足上文列出的版本要求。

小結

dsh-user-message-jump 做的事情小而具體:把用戶消息變成一條可點擊的目錄豎帶,省掉長會話裏來回滾動的時間。它的打包與掛載方式也符合 DSH「一切皆插件」的思路,想寫自己的客戶端插件,可以直接參考這個倉庫。

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

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

小夜