dsh-general-agentics
Verifieddsh-general-agentics · v0.3.0-alpha.3 · MIT · Web UI
General Agentics distribution bundle for DeepSeek Harness (DSH): one install brings the General Agentics white-label brand, curated plugins, bundled skills, and MCP pre-configuration. Built on DeepSeek Harness (DSH).
Install
dsh plugin add dsh-general-agentics Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-general-agentics
General Agentics 發行套件(bundle)for DeepSeek Harness (DSH)。
用戶先安裝 DSH,再安裝本套件,一次獲得:
- 貼牌:側邊欄 mark/wordmark、對話首頁 hero 文字 logo 與致敬行、品牌主色、分頁標題、favicon、輸入框下方的 START HERE 模塊(皆為執行期替換,不修改、不破壞已安裝的 DSH)
- 自帶技能:14 個(
ga-identity+ 13 個方法論技能,見下) - MCP 預配置:
ga-status(ga_bundle_info身分回報 +ga_health_check安裝健康自檢) - 設定面板:Settings → General Agentics(bundle 版本、每個精選插件的版本與更新狀態、隨附技能、一鍵/手動更新)
- 13 個精選第三方插件:隨套件安裝並啟用(見「精選插件」一節)
Built on DeepSeek Harness (DSH), MIT licensed.
設計原則
- 只走官方縫隙:品牌透過三個 generic brand slot 佔位(
priority: -1陰影覆蓋官方 occupants——slot 規則是「同 cell 最低 priority 者渲染」),不停用ui-brand-official,不修改任何 DSH 檔案。 - 不破簽章、不怕升級:本套件存在於 profile(
~/.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
安裝後:
- 網頁重新整理一次(Cmd+R)即可載入品牌 client half(側邊欄 mark/wordmark、hero 文字 logo 與致敬行、主色、分頁標題、favicon、輸入框下方的 START HERE 模塊)
- 新建的 session 會獲得
ga-identity等 14 個技能與mcp__ga-status__ga_bundle_info工具(MCP 伺服器於組合套用時即由 host spawn) - 完全重啟 App 亦無妨
解除安裝/停用:
# 停用(保留檔案):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。
發布前注意:
- LICENSE 已在 repo 根目錄(npm 自動收入 tarball)
- MCP row 已是可攜形式(
process.execPath+baseUrl,見cordis.patch.yml;實測紀錄在docs/ops-lessons.mdrule 14) - 對外表述維持 "Built on DeepSeek Harness (DSH), MIT licensed"
套件結構
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() |
隨附技能(bundled skills)
14 個技能隨包註冊(ctx.skills.registerProvider,bundled rank 600——用戶自帶同名技能一律優先):
ga-identity:以 General Agentics 身分自介與簽署產出- 13 個方法論技能 vendored 自 obra/superpowers(MIT,逐字未改):
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。
精選插件(curated plugins)
隨套件安裝並自動啟用(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 的安裝閘門)
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 版擋掉) - 精選清單以 0.2.1 可接受的版本為 floor;發佈前用
npm run check-dsh-compat核對 - 兩個插件目前不納入(在 0.2.1 上無法安裝,非我們能修):
插件 原因 @michengai/dsh-agency-agents所有已發佈版本的 peer 只列出 0.1.x 的 dsh,沒有任何版本被 0.2.1 接受 dsh-web-search-pro0.2.x 全部封頂 <0.2.1-0;唯一能過的是 0.1.2(降級,故不納入)需要它們時可手動安裝並自負風險:
上游發佈相容版本後,把 row 加回dsh plugin --profile <p> allow-version <pkg>@<ver> --dsh-version 0.2.1-rc.2 --accept-riskcordis.patch.yml即可(test/bundle-manifest.test.mjs會檢查依賴與 row 是否一致)。
設定面板(Settings → General Agentics)
設定側欄多一個 General Agentics 分頁,回答「這個 bundle 到底裝了什麼、要不要更新」,並在介面上分成五個區塊:
- 狀態總覽:版本、狀態 chip(已是最新/N 項待處理/可更新)、檢查時間,以及「重新檢查」
- 需要注意:缺少外部依賴(
uv等,附一鍵複製修法)、未提供(可複製安裝指令)、直裝重複 - 更新:一鍵更新(二次確認)+進度計時+
aria-live,失敗顯示code與原因,並有可複製的手動指令 - 精選插件:依用途分組(搜尋/介面/行動/自家/通訊),可篩選(全部/有新版/需注意/未提供)與搜尋;每列可展開看宣告範圍、已裝與 registry 版本、落後原因、複製安裝指令與 npm 連結
- 隨附技能與前置條件(無法隨 npm 套件提供的項目,標示已就緒/需自行確認)
首次開啟會有一張可關閉的「這個 bundle 給了你什麼」引導卡。面板語言跟隨瀏覽器(zh/en,可用 localStorage['general-agentics/lang'] 覆寫),所有字串來自兩份鍵集相同的字典。
- bundle 版本:目前版本 vs registry 最新版(本地開發版領先 registry 時會標「本地版本領先 registry」而不是誤報有更新)
- 13 個精選插件:每個的宣告範圍、實際已安裝版本、registry 最新版,以及
有新版/最新/未提供/直裝重複標記(後者代表這個 profile 又直裝了一份,會啟用兩次) - 14 個隨附技能:名稱清單
- 更新:一鍵更新走 profile 的 plugin manager(
installBundle);沒有 manager 的 profile 會顯示可複製的手動指令(desktop profile 的 CLI 被 Electron 獨佔,請用面板按鈕)。link:/file:安裝會額外提示「更新會改用 registry 版本」 - 精選插件怎麼更新:插件是上游 npm 套件的依賴,bundle 升版本身不會移動插件版本(pnpm 以 lock 為準);只有當該次發佈提高了 floor(例如
^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 不可達時面板仍會渲染,只是版本欄顯示「未知」。
開發與 CI
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 提供等價的本地閘門。
面板能做什麼(0.2.0-alpha.25)
| 區塊 | 能力 |
|---|---|
| 狀態 | 版本、狀態 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 解析)。 |
可選:需要風險豁免的插件(agency-agents)
@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/[email protected]": ["0.2.1-rc.2"] }
或執行 dsh plugin --profile <p> allow-version @michengai/[email protected] --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)。
安裝注意(常見「插件沒出現」的原因)
- 不要同時直裝這些插件。若該 profile 已經直裝任一精選插件,它會出現兩行 row、激活兩次(
insert不去重),舊版還會讓設定頁完全存不進去。裝本套件前先移除直裝,或用ga_health_check檢查(見下)。 - 品牌外觀要重新整理頁面(Cmd+R)才會載入;技能與 MCP 工具只出現在新建的 session。
- 缺外部條件不是壞掉:
browser-use要uv、modlens要 Antigravity CLI、dsh-im要 IM 憑證——裝了不會報錯,但功能不會出現。 - 專家團預設停用是上游設計,要在 設定 → 专家 手動啟用(團隊與成員都要)。
- Windows 提醒:
cordis.patch.yml的 MCP row 用new URL(...).pathname,Windows 上會得到/C:/…;屆時ga-status起不來(非致命,工具消失),需改成 win32-aware 寫法。
自我診斷:新 session 中請 agent 呼叫 mcp__ga-status__ga_health_check,它會回報套件版本、哪些精選插件被直裝(重複)、以及每個插件缺哪個外部條件與該怎麼做。
合規備忘
- 本套件 MIT;散布時保留 DSH 的 MIT 與
THIRD_PARTY_NOTICES.md(DSH 端授權義務)。 - 對外表述使用 "Built on DeepSeek Harness (DSH)";不以 DeepSeek Harness 作為產品名,不使用官方 logo。
ga-identityskill 內含給 agent 的對外表述規則。