前言¶
在 DeepSeek Harness(DSH)裏,很多任務靠純文字就能完成:問答、改寫、摘要、簡單列表。但當用戶需要看清複雜關係,或同時處理幾項相互影響的選擇時,來回描述往往低效。常見做法是預置組件目錄,讓模型輸出固定結構的卡片或表單;這類方案適合已知組件拼裝,卻難以覆蓋事先無法確定結構和交互的任務。
下面介紹社區插件 DeepSeek Harness GenUI(dsh-plugin-genui)。它走 code-first 路線:Coding Agent 爲當前任務編寫普通 React + TypeScript,界面保存用戶的選擇與輸入,供下一輪 Agent 讀取並繼續處理。
這是什麼¶
DeepSeek Harness GenUI 由 pengyue-polaron 維護,在 SkillHub 插件目錄 歸類爲「客戶端」。插件定位是:爲 DeepSeek Harness 生成任務專屬的 React 應用,並把有意義的狀態帶入後續 Agent 輪次。
源碼託管於 GitHub,MIT 許可證,當前版本 0.13.1。
核心功能¶
Code-first 生成界面¶
Agent 編寫普通 React + TypeScript,插件負責構建和檢查。生成代碼在沙箱內運行,不依賴組件樹 DSL 或中間表示(IR)。
任務狀態跨輪次保留¶
界面把選擇、表單答案、草稿和進度等語義值保存到當前任務。用戶繼續追問時,Agent 可以讀取這些結果,不必讓用戶重新描述。Inline、Canvas、全屏和 CLI/localhost 是同一份任務狀態的不同入口;在任一入口保存的內容,後續輪次均可使用。
Inline 與 Canvas 雙形態¶
同一應用可以嵌入回答(Inline),也可以在對話右側打開(Canvas)。前者適合緊湊控制項或聚焦選擇;後者提供更大空間,同時保留對話。
權限聲明與沙箱隔離¶
應用只聲明實際需要的 Harness/MCP/Skill 工具,或無需憑據的公開 HTTPS 接口。打開連接型應用前,Harness 集中展示完整權限清單,由用戶一次確認;能力變化時重新詢問,未聲明的調用會被拒絕。MCP 憑據不會進入生成代碼。Web 端可從頁面卡片查看或撤回權限。
失敗更新不覆蓋可用版本¶
後續修改更新同一個應用。若某次更新失敗,不會替換當前可用版本。
DESIGN.md 設計語言¶
在 設置 → 插件 → 插件配置 中,可爲新應用設置默認設計:自動選擇、選用內置風格、導入自定義 DESIGN.md,或導出當前設計作爲起點。DESIGN.md 控制設計語言,不限制頁面結構。
內置風格包括:
| 設計風格 | 視覺語言 |
|---|---|
material-3 |
Google Material 3:色調錶面、鮮明主色、清晰層級 |
apple-human-interface |
Apple Human Interface:剋制、精確、內容優先 |
shadcn-ui |
shadcn/ui:語義色彩變量、利落邊框、緊湊表單 |
與組件樹渲染器的分工¶
插件不替代輕量的 dsh-ui 組件渲染器。組件協議適合用已知組件拼卡片、表格或表單;GenUI 適合需要按任務編寫事先無法確定結構和交互的 React 應用,例如自由模擬、空間工具、連接型工作流或多步驟狀態。
安裝與啓用¶
環境要求:Node.js ^22.19.0 || >=24,DeepSeek Harness ^0.1.0-rc.6。
Web profile 支持 Inline、Canvas、全屏和 localhost 鏈接。終端 profile 將命令中的 web 換成 tui;TUI 返回本地鏈接,不嵌入 Canvas。
dsh plugin --profile web add dsh-plugin-genui
dsh --profile web
MCP 仍按原有方式連接到同一個 profile。插件不會下載或啓動瀏覽器;每個候選版本須通過編譯和源碼契約檢查,才能替換最後一個可用版本。
典型用法¶
兩分鐘試用¶
新建 Web 會話,複製下面任意一段提示詞:
幫我規劃一個週六行程,包含美術館、濱江花園和晚餐。做成可以直接調整時間的界面,
並讓我能把花園設爲下雨時跳過。
根據當前倉庫源碼,解釋生成頁面如何進入帶權限控制的運行時。做一個可交互的代碼
路徑圖,並標出文件、函數和權限檢查。
做一個可交互的雙縫干涉實驗,讓我調整波長、縫間距和屏幕距離,並即時觀察條紋變化。
在界面裏修改並保存後,再問:
我剛纔在界面裏選了什麼?請按保存結果繼續。
要驗證的不只是頁面是否出現,而是下一輪 Agent 能否接着剛纔的操作繼續。
CLI 示例¶
終端 profile 返回 localhost 頁面,下一輪可直接引用用戶在頁面裏選擇的路徑:
❯ 解釋這個倉庫裏生成頁面如何進入帶權限控制的運行時。做一個交互式代碼路徑頁面,
然後返回 localhost 地址。
我梳理了 src/tools.ts → src/artifacts/builder.ts → src/runtime/server.ts
→ src/artifacts/registry.ts。
http://127.0.0.1:<port>/genui/app/<task-app>
❯ 我剛纔選的路徑停在哪裏?
它到達了 src/runtime/server.ts 的權限檢查,然後停在真實工具調用之前,
因爲這項訪問還沒有獲得允許。
文檔中的三類場景¶
README 列舉了三個典型任務,可作爲能力參考:
- 選擇日曆時段:把候選空閒時間變成可操作的 90 分鐘時段,頁面保存選中的三個時段回任務。
- 探索光合作用:通過光照、二氧化碳、溫度和氣孔開度等控制項,交互式觀察各變量對反應的影響。
- 追蹤代碼路徑:根據真實項目源碼生成本地頁面,列出文件、函數、分支及用戶選中的路徑。
適用場景與注意¶
適合誰
- 需要在 DSH 中爲特定任務生成定製界面,而非固定組件拼裝的開發者。
- 任務涉及多步驟狀態、空間工具、模擬器或連接型工作流,且希望用戶操作能寫入任務狀態的場景。
安全與生命週期
- 生成代碼在沙箱中運行;頁面直連 API 僅支持已聲明、無需憑據的公開 HTTPS 接口。
- 臨時鏈接和已授予權限 7 天后失效;任務狀態在最後一次更新 7 天后過期。
安裝前須知
插件以當前 dsh 進程權限運行。安裝前應檢查源碼與 MIT 許可證,確認權限聲明機制符合預期。SkillHub 是獨立社區目錄,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
DeepSeek Harness GenUI 把「爲當前任務寫 React」和「把用戶狀態帶入下一輪 Agent」合在一起:比固定組件目錄更自由,又比跨客戶端 UI 協議更聚焦 DSH 任務生命週期。若你的工作流裏常有「文字說不清、選完還要接着做」的步驟,可以按上文命令安裝後,用兩分鐘試用提示詞驗證狀態是否真能跨輪次傳遞。