← 返回列表
⚠ 装前注意
给 DSH 实例装一块只读的生态总览面板:插件有没有加载、补丁还在不在、技能 frontmatter 有没有写坏、
基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/9/22 · 已提供中文文档
DSH plugin: read-only ecosystem health panel - bundle / patch / skill / upgrade / decoupling diagnosis in one view | DSH 插件:只读生态健康面板,六类体检一屏看完
综合分
29.9
GitHub 分
29.9
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add kira905/dsh-ecosystem-panel未发布到 npm registry,仅可从源码安装,改用 GitHub 源安装
信任档位:已验证本站已于 1 天前真实安装成功
- 是什么
- dsh 原生插件 · other
- 装得上吗
- 本站已真实安装成功(非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 4 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/25
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/22(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-ecosystem-panel(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=18.17 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
未发布到 npm registry,仅可从源码安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/22 15:34:06
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成dsh-ecosystem-panel
给 DSH 实例装一块只读的生态总览面板:插件有没有加载、补丁还在不在、技能 frontmatter 有没有写坏、
依赖有没有升级风险 —— 一屏看完,🟢🟡🔴 三色。
它只诊断,不动手:不装包、不卸包、不升级、不改配置、不写任何被体检对象。
侧边栏底部「设置」齿轮上方会多一个图标按钮,点开就是面板;服务端只暴露一个只读接口:
GET /api/dsh-ecosystem-panel/state
1. 它看什么(六类 + 一个可选类)
| 类目 | 数据来源 | 判定 | 数据缺失时 |
|---|---|---|---|
| ① bundle 插件 | profile 的 package.json(dsh.profile.bundles + dependencies)+ 各包实体 package.json + 宿主首页的 boot 清单 | 实体在不在 / 声明版本与实体版本是否漂移 / 声明了 client 能力但 boot 里没加载 = 🔴 | boot 抓不到 ⇒ 显示「加载状态未知」(黄),不当作已加载 |
| ② patch insert 插件 | profile 的 cordis.patch.yml 里的 insert 条目 | 实体目录能否解析到(profile 层 → 共享 fallback 层);被 disabled 的标黄 | YAML 解析器不可用 ⇒ 明说「不可解析」,不当成空清单 |
| ③ 补丁健康 | 你提供的补丁清单(外置 JSON) | 逐条做特征串扫描:contains 缺一个 = 定制被冲掉(黄);目标文件没了 = 🔴;notContains 命中 = 残留 | 清单没配 ⇒ 显示「未配置 ⇒ 不可判定」(黄),不显示"0 个补丁" |
| ④ 技能 | 数据根下 skills//SKILL.md 的 frontmatter | 缺 name / description、frontmatter 解析失败 | 目录不存在 ⇒ 报 skillsDirOk=false |
| ⑤ 升级体检 | 本地实体版本 + npm registry 最新版(24h 文件缓存)+ 你的规则表文案 | 颜色由外部只读 CLI 判定;本面板只渲染(拿不到就显示「档位不可用」+ 原因,绝不猜颜色) | 没配 CLI ⇒ 每行 unknown + 原因 |
| ⑥ 解耦健康 | 你提供的外部检查脚本(动态 import 复用其导出函数,不复制判定) | R1 静态 import 宿主符号 = 🔴;动态导入/依赖未归零 = 🟡 | 没配脚本 ⇒ 一条 🟡 + 配置指引 |
| ⑦ 跨表准入一致性(可选) | 你提供的外部校验器 | 三态显式枚举 ok / fail / unavailable;asOf 缺失即判 unavailable | 没配 ⇒ unavailable(不是 0/0/0 绿) |
设计红线(贯穿全仓):读不到的东西一律显示「不可探测 + 原因」,绝不显示 0、绝不假装全绿。
面板 meta 里还带一份配置来源自证(每个配置键到底是从 CLI / 环境变量 / 配置文件 / 自动探测 / 默认值
哪一层读到的),换机器排障时先看它。
2. 前置条件
- 一个 DSH 实例(web profile),主包线见 §6 兼容性表
- Node ≥ 18.17(用到了内置 fetch / AbortSignal.timeout)
- YAML 解析器(js-yaml):由宿主 profile 的依赖链提供(通常随主包自带)。解析不到时 ②④
两类会显式显示「不可解析」,其它四类不受影响
- 可选的三个/四个外部脚本(解耦检查、档位 CLI、跨表校验器、适配层一致性校验器)——没有也能跑,
对应类目会降级;本仓不附带这些脚本(它们属于你自己的体检体系)
3. 安装三步
① 把包放进 profile 的 node_modules(本仓 clone 到任意位置后拷进去,或直接 clone 到该目录)
/profiles//node_modules/dsh-ecosystem-panel/
git clone "/profiles/web/node_modules/dsh-ecosystem-panel"
② 注册:profile 的 package.json 里
"dependencies": 加一条 "dsh-ecosystem-panel": "0.4.0"
"dsh.profile.bundles": 数组里加 "dsh-ecosystem-panel"
③ 重启 DSH(本插件没有热加载),然后打开 GUI:侧边栏齿轮上方应出现面板按钮
验证(不依赖 GUI):
node "/profiles/web/node_modules/dsh-ecosystem-panel/scripts/verify-state.mjs"
终端里应打印六类结果 + 配置来源自证
本仓只发 Release,不发 npm:把目录放进 profile 即可,不需要 npm install(dependencies 为空)。
4. 配置
优先级(每个键独立):显式传入(插件 config / 调用参数) > 环境变量 > 配置文件 > 自动探测 > 内置默认。
4.1 环境变量
| 变量 | 作用 | 默认 |
|---|---|---|
| DSH_ECOSYSTEM_PANEL_HOME | DSH 数据根 | os.homedir()/.dsh(DSH_HOME 同效、优先级更低) |
| DSH_ECOSYSTEM_PANEL_PROFILE | profile 名 | web |
| DSH_ECOSYSTEM_PANEL_WEB_URL | 本实例基址(抓 boot 清单用) | DSH_WEB_URL,否则 http://127.0.0.1:3080 |
| DSH_ECOSYSTEM_PANEL_TOOLS_DIR | 外部工具目录(不自动探测) | 空 ⇒ 依赖它的类目降级 |
| DSH_ECOSYSTEM_PANEL_MAIN_NM | 宿主主包 node_modules | 按全局 npm 布局探测;探测不到即判不可用 |
| DSH_ECOSYSTEM_PANEL_CONFIG | 配置文件 JSON 路径 | 空 |
| DSH_ECOSYSTEM_PANEL_CACHE_FILE | 升级体检缓存文件 | /ecosystem-panel-upgrade-cache.json |
| DSH_ECOSYSTEM_PANEL_DECOUPLING_SCRIPT | 解耦检查脚本 | /check-decoupling.mjs |
| DSH_ECOSYSTEM_PANEL_TRIAGE_CLI | 升级档位只读 CLI | /upgrade-triage-cli.mjs |
| DSH_ECOSYSTEM_PANEL_REGISTRY_AUDIT_LIB | 跨表准入校验器 | /registry-audit.mjs |
| DSH_ECOSYSTEM_PANEL_HOST_ADAPTER_SYNC | 适配层一致性校验器(可选) | /sync-host-adapter.mjs |
| DSH_ECOSYSTEM_PANEL_PATCH_MANIFEST_FILE | 补丁清单 JSON | 空 ⇒ ③ 显示「未配置」 |
| DSH_ECOSYSTEM_PANEL_UPGRADE_RULES_FILE | 升级规则表 JSON | 空 |
| DSH_ECOSYSTEM_PANEL_BREAKING_SYMBOLS_FILE | 断裂符号表 JSON | 空 |
| DSH_ECOSYSTEM_PANEL_LABELS_FILE | 包名 → 一句话简介 JSON | 空(没登记的包只是没有简介) |
| DSH_ECOSYSTEM_PANEL_DISABLED_GROUPS | 整组停用的类目(逗号分隔) | 全开 |
| DSH_ECOSYSTEM_PANEL_WEBSERVER_SERVICE | 宿主 web server 服务名 | webServer |
4.2 配置文件与示例
examples/ 下有五份可直接抄的示例:
| 文件 | 对应配置 |
|---|---|
| ecosystem-panel.config.example.json | 总览(各键的位置与形态) |
| patch-manifest.example.json | ③ 补丁清单(checks / special / retired 三种形态都有例子,字符串里可用 ${HOME} 占位符) |
| upgrade-rules.example.json | ⑤ 规则表文案(verdict 只是文案分类,不决定颜色) |
| breaking-symbols.example.json | 宿主主包断裂符号参考底表 |
| labels.example.json | 包名 → 一句话简介 |
用法:
DSH_ECOSYSTEM_PANEL_CONFIG=/path/to/my.config.json # 指向你抄过去改的那份
4.3 降级语义(重要)
- 没配 ≠ 没有:③ 未配清单时显示「未配置 ⇒ 不可判定」,不会显示"0 个补丁全绿";
⑥⑦ 与 ⑤ 同理(都带配置指引)。
- 抓不到:宿主首页抓不到 boot 清单时,① 只把"未知"标黄,并把抓取错误原文放进 meta.bootError。
- 停用:确实不需要某一类,就把它写进 disabledGroups —— 面板会显示一条「已按配置停用」的提示项
(比静默消失更清楚,且不计入汇总)。
- 配置解析失败(比如清单 JSON 坏了)不会让面板崩:meta.configErrors 里能看到原因,该键回落默认。
5. 界面
- 六类各占一张标签卡(Tab),Tab 上的小圆点 = 该类最差状态(红 > 黄 > 绿)
- 点「刷新」会重新取数;GET /state?refresh=1 强制重查 npm 最新版(否则 24h 缓存)
- 颜色:🟢 正常 / 🟡 风险或不可判定 / 🔴 异常(比如 patch insert 的实体缺失)
- 面板底部说明与标题可由配置覆盖(text.title / text.note / text.tabs,服务端经 meta.ui 下发)
6. 兼容性
| 宿主主包线 | 状态 | 依据 |
|---|---|---|
| 0.1.1-rc.2 | ✅ 已实测 | 同源代码在一个隔离实例(独立数据根 + 独立端口)上只读核对通过;另与带内嵌清单的旧版逐条比对判定一致(51 条零差异) |
| 0.1.5 线(静态核对 0.1.5-rc.1 / 0.1.5-rc.2,2026-09-21) | ✅ 宿主面单一且已取证 | 唯一宿主符号是服务名 webServer(0.1.5 仍在,且可用 DSH_ECOSYSTEM_PANEL_WEBSERVER_SERVICE 覆盖);客户端半零 require(不依赖任何包)。静态审计报告:《开源/兼容性静态审计-20260921》 |
| ⚠️ 升级体检 / 解耦健康 两卡的读数 | ⚠️ 未在 0.1.5 实例上校准 | 0.1.5 把客户端资源改成"名册制 + 合并 URL"(dsh-client-modules、cordis.patch.yml 68 条名册),两卡是否读全未验证 —— 最可能的表现是读数偏保守,不是崩溃 |
| 其它 | ❓ 未知 | 需自测 |
7. 已知限制
1. js-yaml 依赖宿主提供 —— 解析不到时 ②④ 两类显示「不可解析」(不假绿),但也就查不了了。
2. boot 清单靠抓宿主首页的内联 __DSH_BOOT__ 段 —— 宿主若改了这个投影,① 的"加载状态"就变成未知(黄)。
3. ③ 的判定完全取决于你给的清单:本仓不内嵌任何环境的补丁清单,清单写错就会报错。
4. ⑤ 的颜色不来自本面板:它来自你配置的档位 CLI(唯一判定源)。本面板只渲染,绝不猜颜色。
5. ⑥⑦ 依赖外部脚本,本仓不带这些脚本;未配置时对应类目只会显示降级提示。
6. 升级体检会访问 npm registry(registry.npmjs.org),结果缓存 24h;离线时显示"远端查询失败"并继续用缓存。
7. 只读:面板没有任何写操作入口(唯一写文件的是升级体检自己的缓存)。
8. 前端只支持 web platform(dsh.client.inject 为空,不依赖任何 client 包)。
9. 界面文案为中文,可通过 text 配置覆盖;没有内置多语言切换。
10. 未做移动端专门优化(面板宽度自适应,但按钮/触摸交互没专门测过)。
8. 仓结构
lib/index.js 服务端:注册只读 route
lib/state.js 六类聚合逻辑(每个数据源都走配置层 + 显式降级)
lib/upgrade.js ⑤ 升级体检(本地事实 + npm 缓存 → 外部只读 CLI → 渲染)
lib/config.js 配置层(优先级解析 + 占位符展开 + 来源自证)
lib/host-protocol.js 宿主协议常量(本插件只用 webServer 一个服务名)
lib/client.js 浏览器端:侧边栏按钮 + 面板(零 import)
cordis.patch.yml bundle patch(把插件挂到宿主)
scripts/verify-source.mjs 发布前静态验证(语法 + 配置层行为 + 脱敏扫描)
scripts/test-fixture.mjs 干净临时路径上的端到端夹具(含缺数据降级断言)
scripts/verify-state.mjs 只读状态验证器(不依赖 GUI)
examples/ 五份配置示例
docs/RELEASING.md 发版规范与检查单
9. 自测
node scripts/verify-source.mjs . # 语法 + 配置层行为 + 脱敏扫描(发布前必跑)
node scripts/test-fixture.mjs # 端到端夹具:不需要任何真实安装,全在临时目录里造
node scripts/verify-state.mjs # 对当前实例只读体检(打印六类 + 配置来源)
test-fixture.mjs 会现场造一个最小数据根(假 profile / 假插件实体 / 假技能 / 四个外部工具 stub),
断言六类都能跑出结果,并专门验证「缺数据必显式降级」。
10. 相关组件
同属 DSH 生态的伴生组件,各自独立仓、独立版本、许可各自独立;它们都回链到同一份文档仓
ops-handoff-design
(Gitee 镜像 ):
| 组件仓 | 做什么 | 与本组件的关系 |
|---|---|---|
| dsh-ecosystem-panel | 只读生态总览面板 | 本仓 |
| dsh-butler-archive | 会话归档管理(列表 / 预览 / 恢复 / 删除 + 可选自动归档) | 它是本面板第 ③ 类的观察对象之一:靠 cordis.patch.yml 的 insert 注册,实体缺失时本面板报 🔴 |
| dsh-session-title-live | 会话标题跟着对话实时更新 | 同样靠 cordis.patch.yml 的 insert 注册(无 client 半);「插件到底加载上了没有」由本面板第 ① 类回答 |
| dsh-diagnostic-tools | 诊断取证工具组:依赖闭包体检 + 会话图片附件对账 | 分工互补:本面板回答「今天怎么样」(持续、只读、三色),它回答「具体坏在哪、怎么修」(离线、可复跑、带修法与回滚清单)——两者都只诊断 |
组件之间没有代码依赖,也不共享运行时 —— 之所以互指,是因为它们回答的是同一类人的同一批问题
(长期在自有机器上跑 agent:装得下、找得到、看得见、查得清)。谁装谁不装,互不影响。
11. 许可
AGPL-3.0-only(见 LICENSE 全文;package.json 的 license 字段同值)。
以 AGPL 发布意味着:你可以自由使用、修改、再分发,但通过网络向他人提供本软件的修改版时,
必须按 AGPL 一并提供对应源码*。