dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
General Agentics distribution bundle for DeepSeek Harness (DSH): one install brings white-label brand, curated plugins, bundled skills, and MCP pre-configuration. Built on DeepSeek Harness (DSH), MIT licensed.
General Agentics 發行套件(bundle)for DeepSeek Harness (DSH)。
用戶先安裝 DSH,再安裝本套件,一次獲得:
ga-identity + 13 個方法論技能,見下)ga-status(ga_bundle_info 身分回報 + ga_health_check 安裝健康自檢)Built on DeepSeek Harness (DSH), MIT licensed.
priority: -1 陰影覆蓋官方 occupants——slot 規則是「同 cell 最低 priority 者渲染」),不停用 ui-brand-official,不修改任何 DSH 檔案。~/.dsh/profiles/<name>/node_modules),DSH 升級不會覆蓋它;解除安裝即完全還原官方品牌。lib/client.js 採用 shell module loader 的 lazy-CJS 形狀(與 dsh-pomodoro 等第三方出貨格式一致),無需 repo 內未發佈的 build preset。| 表面 | 本套件 | 備註 |
|---|---|---|
| 側邊欄 mark / wordmark | ✅ | slot 佔位;2026-10-13 瀏覽器實測(乾淨 profile)確認渲染 |
| 對話首頁 hero mark | ✅ | slot 佔位;實測確認我們的 wordmark 渲染 |
| 品牌主色 | ✅ | theme.overrideTokens(light/dark 成對,契約要求)。注意 token 寫在 <body> 的 inline style 上,不是 :root;量測時別探 document.documentElement |
| 分頁標題 | ✅ | 執行期改寫 + MutationObserver 抵抗 shell 重設;實測 document.title === "General Agentics" |
| favicon | ✅ | 執行期替換 link[rel=icon];實測兩個 link 皆為 data URI 且含品牌色 |
| PWA 名稱 | ⚠️ 盡力 | manifest link 換 data URI,瀏覽器是否採納視實作 |
| 首跑 Preview Notice 彈窗 | ❌ 未覆蓋 | client 樹內字串,一次點名 DeepSeek Harness 三次,是客戶第一眼看到的畫面。2026-10-13 瀏覽器實測發現;client.js 修得到(尚未修) |
| Hero tagline「Into the Unknown」 | ❌ 未覆蓋 | 與我們的 hero wordmark 並排顯示;同為 client 樹內字串,尚未修 |
| 桌面殼(Dock icon/選單/About) | ❌ | 在簽章保護的 app.asar 內,本套件不碰 |
| host 端字串(system prompt、User-Agent) | ❌ | 硬編碼;以 ga-identity skill 於任務層補償 |
# 方式一:GUI(App 運行中)——側欄 Plugins → Add plugin → 貼包名或本機路徑
dsh-general-agentics # npm 包名(發佈後)
/path/to/dsh-general-agentics # 本機 clone 的絕對路徑
# 方式二:模型側工具(App 運行中)——對話中請 agent 執行
# plugin_manager { action: "install_bundle", target: "dsh-general-agentics" }
# 方式三:CLI(desktop profile 須先完全退出桌面 App)
dsh plugin --profile desktop add dsh-general-agentics
安裝後:
ga-identity 等 14 個技能與 mcp__ga-status__ga_bundle_info 工具(MCP 伺服器於組合套用時即由 host spawn)解除安裝/停用:
# 停用(保留檔案):GUI Plugins 頁關閉 bundle,或在 profile 的 cordis.patch.yml 寫:
# - id: general-agentics
# disabled: true
# 解除安裝:GUI Plugins → Remove,或退出 App 後 CLI:
dsh plugin --profile desktop remove dsh-general-agentics
開發迭代:以 link: 指向本機 clone 安裝——改 lib/client.js 後重新整理頁面即生效;
改 cordis.patch.yml 或 lib/index.js(host 半)則套用新組合(HMR live)。
內容變更後重新以 file: 安裝時記得升版號——pnpm 對同版號的 file: 包可能不重新解包。
離線驗證組合用拋棄式 profile:見 docs/ops-lessons.md rule 13。
發布前注意:
process.execPath + baseUrl,見 cordis.patch.yml;實測紀錄在 docs/ops-lessons.md rule 14)dsh-general-agentics/
├── package.json # dsh.bundle.patch + dsh.client 宣告+精選插件 dependencies
├── cordis.patch.yml # 本套件 Loader row+MCP row+精選插件 insert rows
├── lib/
│ ├── index.js # host half:技能 provider(掃 skills/ 註冊)
│ └── client.js # browser half:品牌 slot、主題、標題/favicon、START HERE
├── brand/
│ ├── mark.svg # 佔位 mark 設計檔(client.js 內有對應 inline 版本)
│ └── wordmark.svg # 佔位 wordmark 設計檔
├── skills/
│ ├── ga-identity/ # 自帶技能:General Agentics 身分與簽署
│ ├── (13 個方法論技能) # vendored from obra/superpowers @ bb92a77(MIT,逐字未改)
│ ├── superpowers/ # 上游 LICENSE + UPSTREAM-SHA(無 SKILL.md,不註冊)
│ └── THIRD-PARTY.md # 署名與更新指引
├── mcp/
│ └── ga-status-server.mjs # ga_bundle_info 狀態回報(零依賴 stdio MCP server)
└── test/
└── skill-provider.test.mjs # node --test,零依賴
| 要換什麼 | 改哪裡 |
|---|---|
| 產品名稱 | lib/client.js 的 PRODUCT_NAME / PRODUCT_SHORT_NAME |
| mark 圖形 | lib/client.js 的 GAMark(paths)+ brand/mark.svg |
| wordmark | lib/client.js 的 GAName |
| 品牌色 | lib/client.js 的 BRAND_COLOR / FAVICON_COLOR(light/dark 成對) |
| favicon | lib/client.js 的 faviconHref() |
14 個技能隨包註冊(ctx.skills.registerProvider,bundled rank 600——用戶自帶同名技能一律優先):
ga-identity:以 General Agentics 身分自介與簽署產出brainstorming、writing-plans、executing-plans、test-driven-development、systematic-debugging、verification-before-completion、writing-skills、diagnosing-superpowers、subagent-driven-development、dispatching-parallel-agents、requesting-code-review、receiving-code-review、finishing-a-development-branch
——15 個上游技能取 13;using-superpowers(其「任何回應前必查技能」規則與 ga-identity 的身分主導權衝突)與 using-git-worktrees(團隊 git 工作流)刻意不入,理由見 skills/THIRD-PARTY.md。感謝:Jesse Vincent (obra) 與 superpowers 貢獻者;詳見 skills/THIRD-PARTY.md。
隨套件安裝並自動啟用(dependencies + cordis.patch.yml 的 insert row;row id 一律 ga- 前綴,避免與用戶直裝的同名插件撞 id)。
| 插件 | 功能 | 需要什麼才會「看得見」 |
|---|---|---|
dshmarket | 插件市集 | 設定 → Plugin Market |
dsh-better-sidebar | 側欄:檔案樹/編輯器/變更/任務/側聊 | 基本即有;agentOpenTools 與 sentinel tab 已預設開啟(只新增,不動其他 tab) |
dsh-comments | 自家工具:劃選回覆片段、逐段點評,可一鍵把全部點評組裝成訊息送回 | 立即可用 |
dsh-promptimizer | 自家工具:一鍵用當前選定模型改寫草稿 prompt(Light/Standard/Deep) | 需要可用的模型 |
dsh-sentinel | 排程監看面板(BSD-3-Clause,隨包附授權) | 立即可用;better-sidebar 的 sentinel tab 已預設開啟 |
dsh-cost-meter | 會話費用統計 | 每條回覆的用量行(本套件已預設 performanceUsage: detailed) |
@changfenhuang/dsh-genui | 回覆內嵌互動 UI 卡片 | 本套件已預設區塊位置與提示 |
dsh-context | 上下文洞察/管理 | 本套件已預設開啟 fleet 分頁 |
@liustack/modsearch | 免費網頁+X 搜尋聚合 | 本套件已接管 web 的 searchProvider(用戶 profile patch 可改回) |
@ricardochen1996/dsh-browser-use | 瀏覽器自動化 | 需 uv(首次自動建 Python venv ~25MB) |
@xmanrui/dsh-im | 微信/飛書/企微/釘釘/TG/Slack… 橋接 | 需 IM 應用憑證,否則只有背景日誌 |
@liustack/modlens | 給純文字 LLM 的視覺能力 | 需 Antigravity CLI(未隨包) |
dsh-mobile | 手機/局域網安全訪問、目錄選擇器 | 佔用一個 TCP 埠(預設 3443);同機第二個 gateway 會撞埠 |
DSH 0.2.1 起,安裝時會先讀插件的 manifest 檢查相容性(dsh-app-boot 的 plugin-compatibility):有 engines.dsh 就只看它,否則檢查它對 @deepseek-ai/dsh* 的 peer 範圍,用 semver.satisfies(..., {includePrerelease:true}) 判斷。只要有一個插件不合格,整個安裝會被拒絕並回滾。
因此本套件:
engines.dsh: ">=0.2.1-rc.2"(只用 >=,才不會把 rc 版擋掉)npm run check-dsh-compat 核對| 插件 | 原因 |
|---|---|
@michengai/dsh-agency-agents | 所有已發佈版本的 peer 只列出 0.1.x 的 dsh,沒有任何版本被 0.2.1 接受 |
dsh-web-search-pro | 0.2.x 全部封頂 <0.2.1-0;唯一能過的是 0.1.2(降級,故不納入) |
| 需要它們時可手動安裝並自負風險: |
dsh plugin --profile <p> allow-version <pkg>@<ver> --dsh-version 0.2.1-rc.2 --accept-risk
上游發佈相容版本後,把 row 加回 cordis.patch.yml 即可(test/bundle-manifest.test.mjs 會檢查依賴與 row 是否一致)。設定側欄多一個 General Agentics 分頁,回答「這個 bundle 到底裝了什麼、要不要更新」,並在介面上分成五個區塊:
uv 等,附一鍵複製修法)、未提供(可複製安裝指令)、直裝重複aria-live,失敗顯示 code 與原因,並有可複製的手動指令首次開啟會有一張可關閉的「這個 bundle 給了你什麼」引導卡。面板語言跟隨瀏覽器(zh/en,可用 localStorage['general-agentics/lang'] 覆寫),所有字串來自兩份鍵集相同的字典。
有新版 / 最新 / 未提供 / 直裝重複 標記(後者代表這個 profile 又直裝了一份,會啟用兩次)installBundle);沒有 manager 的 profile 會顯示可複製的手動指令(desktop profile 的 CLI 被 Electron 獨佔,請用面板按鈕)。link:/file: 安裝會額外提示「更新會改用 registry 版本」^0.68.1 → ^0.72.0)時,一鍵更新才會把插件一起帶上去。發佈前用 npm run check-upstream 看差距,提 floor 後必須在乾淨 profile 驗證過再發(0.x 的 minor 依 semver 可能不相容)資料來自 host 半註冊的唯讀端點 GET /api/general-agentics/status(?plugins=1 才逐一查 registry,避免每次開面板都打 13 個請求);POST 同一路徑才會實際觸發更新。registry 不可達時面板仍會渲染,只是版本欄顯示「未知」。
npm test # 61 個測試:組合一致性、端點授權、i18n 字典、MCP、面板 payload
npm run ci # 與 GitHub Actions 相同的閘門(測試 + 打包演練)
npm run review # 對抗式探針(回滾失敗、stale 記錄、去識別化、資源上限…)+上游新鮮度報告
node scripts/check-upstream.mjs # bundled floor 與 catalog 的新鮮度對照
npm run prepublish-check # 再加上 overlay 的 YAML 解析(發佈前自動執行)
ci/github-actions.yml 是這個 repo 的 workflow。它放在 ci/ 而不是 .github/workflows/,
因為推送 workflow 需要 token 的 workflow scope;啟用方式(CLI 一行或 GitHub 網頁貼上)
寫在 ci/README.md。啟用前,npm run ci 提供等價的本地閘門。
| 區塊 | 能力 |
|---|---|
| 狀態 | 版本、狀態 chip、健康分數(0–100)、檢查時間、重新檢查 |
| 更新 | 更新預覽(diff 出會變動的相依範圍)、確認、進度計時、一鍵回滾到上一版、可複製的手動指令 |
| 需要注意 | 缺外部依賴(附修法)、未提供(附安裝指令)、直裝重複 |
| 外觀 | 四種品牌 accent(明暗都配好),即時套用並持久化 |
| 提醒 | 靜默時段(不靜默/22:00–08:00/09:00–18:00);靜默時側欄小點不出現 |
| 精選市集 | 第三方插件以型錄呈現(非依賴):一鍵安裝/一鍵升級,全部安裝/全部升級批次按鈕逐步執行並顯示進度;安裝即成為你 profile 的直屬插件;未安裝是選擇不扣健康分;bundle 時代的殘留檔案如實標示 |
| 隨附插件 | dsh-comments、dsh-promptimizer 隨 bundle 提供(範圍感知:超範圍新版顯示 floor 指令,不建議直裝) |
| 分頁 | 狀態/插件/技能/設定四頁,標題列 sticky,語言可即時切換不重載,←/→ 可切頁 |
| 狀態可見性 | 側欄 footer 狀態列與分頁標題的 ● 提示;靜默時段兩者都不出現 |
| 技能 | 14 個技能可搜尋、預設收合 6 筆;每筆一句描述與 Try(把 Use the "<skill>" skill for this task: 塞進輸入框) |
| 健康與使用 | 健康分數與扣分原因、複製診斷(Markdown)、最近使用(session/工具呼叫/技能次數,只計數) |
| 首次啟動 | 引導卡設定語言/accent/靜默時段,完成後不再出現 |
首頁 START HERE 的每張卡標出它引用的技能(能力地圖)。面板語言跟隨 App 的 locale 服務(取不到才退回瀏覽器語系),可中英切換。
| 面向 | 做法 |
|---|---|
| 寫入路由 | POST /api/general-agentics/status 是唯一會執行安裝的端點。它要求 same-origin(Sec-Fetch-Site/Origin 與 Host 相符)+ GET 下發的每 process 一次性 token(面板以 x-ga-csrf 回送)。沒有 CORS 標頭,跨站頁面讀不到 token;偽造的 curl、錯 token、跨站來源、外站 Origin 一律 403。 |
| 讀取路由 | GET 只回版本與狀態;在 loopback 上運作,不寫入任何東西。 |
| 安裝內容 | 所有插件都是上游 npm 套件(semver 範圍),本套件不含 fork/vendored 副本;engines.dsh 只用 >=。 |
| 驗證 | test/settings-panel.test.mjs 有 allowWrite 與 403 的單元測試;每個發佈前跑 npm run prepublish-check(測試+overlay YAML 解析)。 |
@michengai/dsh-agency-agents 會被 DSH 0.2.1 的安裝閘門拒絕:它宣告的 @deepseek-ai/dsh* peer 只列出 0.1.x 的版本,沒有任何已發佈版本被 0.2.1 接受。因此不能放進本 bundle 的預設清單(那會讓所有新用戶安裝失敗),但實測它在 0.2.1 上可正常運作——只要對「精確的套件版本 + 精確的 DSH 版本」給一次豁免:
// ~/.dsh/profiles/<profile>/compatibility.json
{ "@michengai/dsh-agency-agents@1.0.20": ["0.2.1-rc.2"] }
或執行 dsh plugin --profile <p> allow-version @michengai/dsh-agency-agents@1.0.20 --dsh-version 0.2.1-rc.2 --accept-risk(desktop profile 的 CLI 被 App 獨佔,需在 App 內操作或走手動路線)。之後把它加進該 profile 的 dependencies 與 dsh.profile.bundles,再用該 App 自己的 pnpm 安裝。dsh-web-search-pro 同理(0.2.x 封頂 <0.2.1-0)。
insert 不去重),舊版還會讓設定頁完全存不進去。裝本套件前先移除直裝,或用 ga_health_check 檢查(見下)。browser-use 要 uv、modlens 要 Antigravity CLI、dsh-im 要 IM 憑證——裝了不會報錯,但功能不會出現。cordis.patch.yml 的 MCP row 用 new URL(...).pathname,Windows 上會得到 /C:/…;屆時 ga-status 起不來(非致命,工具消失),需改成 win32-aware 寫法。自我診斷:新 session 中請 agent 呼叫 mcp__ga-status__ga_health_check,它會回報套件版本、哪些精選插件被直裝(重複)、以及每個插件缺哪個外部條件與該怎麼做。
THIRD_PARTY_NOTICES.md(DSH 端授權義務)。ga-identity skill 內含給 agent 的對外表述規則。