Artifact Space(產物空間):在 DSH 側欄按會話翻看有效產物

前言

DSH 的一個會話跑完,工作區裏常常散落着十幾處寫入:交付給你的報告、順手改的腳本、生成的中間數據。宿主日誌裏這些都在,但要從日誌裏把它們撈出來不容易——你得記得文件名,還得在一次次 write、edit 事件裏篩出真正還存在於磁盤上的那幾個。Artifact Space 想做的就是這件事:把一個會話最終留下的有效產物按工作區、按會話列出來,直接在面板裏預覽。

下面介紹的插件是 Artifact Space(產物空間),倉庫 majestyjun/artifact-space,npm 包名 @xxjxx/artifact-space,當前版本 1.4.0,MIT 許可(見倉庫 LICENSE)。它定位爲客戶端插件,爲 DSH 增加一個「產物空間」側欄入口。

這是什麼

一句話:它在 DSH 側欄增加一個入口,按「工作區 → 會話」兩級列出每個會話最終產出的有效文件,並支持直接預覽。

技術上它是 package-bundle 形態,分宿主半邊和瀏覽器半邊:

半邊 文件 職責
宿主 index.js 註冊兩條需鑑權的路由:GET /api/artifact-space.rows 與 GET /api/artifact-space.read
瀏覽器 client.js 註冊側欄入口(sidebar.panellist)與主面板(main slot,鍵爲 artifact-space)

兩半邊通過 ctx.connection.fetch.register 註冊的鑑權宿主路由通信,憑證不會離開本機迴環。插件聲明不使用任何宿主私有 API。

什麼會被算作產物

宿主半邊摺疊每個會話自己的日誌事件,保留兩類:

  • 通過 deliverables/presented 聲明的文件,類型 presented;
  • 由成功的 write、edit 或 str_replace_editor 調用寫入或修改的文件,類型 produced。

只有仍然存在的文件纔會被列出;沒有任何存活產物的會話會被丟棄;會話與工作區都按最後活躍時間排序。

每個產物在面板上還會附帶三項來源信息:標記爲「交付」還是「產出」、來自第幾輪對話、會話當時對這個文件說了什麼。列表行只帶徽章,預覽區頭部完整展示輪次與說明。

核心功能

預覽按擴展名選渲染方式,而不是把原始文本直接甩出來:Markdown、HTML、YML/YAML、JSON 各有專屬渲染器,圖片直接顯示,其它格式回落到純文本。

代碼文件(js、ts、py、json、yml 等)以編輯器形態打開:行號欄隨滾動吸附、語法高亮,底部狀態欄顯示語言、行數、體積與編碼。

圖片走獨立路由:宿主在「文件位於所屬工作區內、擴展名確屬圖片、體積在 16 MB 以內」時返回原始字節,並帶上對應 Content-Type。SVG 同樣以圖片方式呈現,瀏覽器不執行其中的腳本。圖片預覽區提供全屏查看和下載兩項操作。

HTML 產物由宿主投遞,但文檔裏的相對引用(src、href、poster、srcset 等)會先被改寫成帶會話鑑權的資源地址;絕對地址、data: URI 與純錨點保持原樣,用 .. 爬出工作區根的引用會被拒絕。文檔投遞時帶 content-security-policy,預覽框另有 sandbox 收斂權限,文檔裏的腳本不會執行。

搜索跨三個層級匹配:工作區、會話、產物。空格分隔的多個詞是「備選」而非「收窄」,所以搜 client json 能同時找到 client.js 和 package.json。命中詞高亮,搜索框旁顯示結果數,Ctrl/Cmd+F 聚焦。

收藏以「所屬會話 + 路徑」爲鍵,通過 localStorage 跨重啓保留,鍵名前綴爲 artifactSpace.favorite.v1.*。每條收藏各佔一個鍵,取消收藏會直接刪掉那個鍵;存儲不可用時(隱私窗口、配額已滿)功能降級爲僅本次會話有效,而不是報錯。收藏的生命週期可以比會話長:所屬會話被刪除後條目標記爲失效且無法打開,收藏夾頭部的「清理 N 項失效」按鈕會刪除這些條目。失效條目不自動清理——宿主在會話日誌不可讀或等待遷移時會把該行整個丟掉,所以「列表裏沒有」不能證明「文件已刪除」。

安裝與啓用

從插件市場安裝:打開 Settings → Plugins → Discover,搜索 Artifact Space 並安裝,市場會安裝索引中指定的確切版本並通過 profile 補丁啓用它。README 中列出的公開目錄收錄情況如下:

目錄 位置 狀態
官方插件市場(awesome-dsh-plugin registry) awesome-dsh-plugin.com 收錄 PR 已提交
1024 社區插件目錄 deepseek1024.com 已收錄並同步上線
社區插件精選 kejixiaoliang/awesome-dsh-plugins 收錄 PR 已提交

從 registry 安裝:

npm install @xxjxx/artifact-space

或者直接用 DSH 的命令:

dsh plugin add @xxjxx/artifact-space

然後在自己的 profile 補丁(~/.dsh/profiles/desktop/cordis.patch.yml)中啓用:

- insert:
    - id: artifact-space
      name: 'artifact-space'

環境要求 DSH >= 0.1.5-alpha.2,插件在 engines.dsh 中聲明瞭該範圍,運行版本不滿足時宿主會拒絕加載。瀏覽器半邊通過 dsh-client-hmr 熱重載;改動宿主半邊需要重新啓用插件(或重啓應用),以便模塊被重新導入。

典型用法

裝好後側欄出現「產物空間」入口。打開它,先看到按最後活躍時間排序的工作區分組,展開某一項是該工作區下的會話列表,再展開某個會話就是它的產物行。

要找東西時直接在搜索框輸入產物名片段。因爲空格分詞的備選語義,client json 一次就能命中 client.js 和 package.json 兩個產物。會話行列過多時可以摺疊,默認只展開首屏放得下的那些。

點開一個產物行進入預覽區頭部,可以複製內容或複製絕對路徑。複製優先走異步 Clipboard API,宿主不支持時(缺少該 API、權限被拒)回退到隱藏 textarea 加 execCommand('copy');剪貼板拒絕寫入時按鈕會如實顯示失敗。二進制文件與工作區之外的文件沒有內容可複製,但路徑仍可複製。

值得留下的產物點行上星標收藏,之後在收藏夾視圖集中查看。

適用場景與注意

適合持續用 DSH 做多輪協作、產物分散在大量會話裏的開發者,尤其是需要回溯「某個報告是第幾輪產出的、當時說了什麼」的場景。

安裝前需要確認一點:插件以當前 dsh 進程的權限運行,能讀取宿主開放給它的會話日誌與工作區文件。它聲明不發起任何自己的網絡請求,也不向任何地方發送數據;但這一點仍需自行審閱源碼確認,MIT 許可也一併讀過。

收藏保存在瀏覽器本地 profile 下,取消收藏即刪除對應存儲記錄,收藏夾頭部的「清空」會連同全部收藏的存儲記錄一起刪除。隱私窗口或配額滿時收藏只保留在當次會話內。

結語

Artifact Space 的價值在於它不改變 DSH 的產出方式,只是把會話日誌裏已經存在的信息按工作區、按會話重新組織成可預覽、可搜索、可收藏的清單。對於需要頻繁回溯會話產物的開發者,它比翻日誌省事。

目錄頁:https://www.skillhub.cn/plugins/majestyjun/artifact-space
GitHub:https://github.com/majestyjun/artifact-space

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

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

小夜