dsh-manager 插件深度分析报告

任务:分析 github.com/as1350/dsh-manager 插件的依赖关系、功能实现、需求溯源与设计问题 方法论:对齐知识库 deepseek-harness-plugin-dag(dsh rc.7 插件 DAG 依赖图谱)的三硬依据框架 分析对象:@deepseek-ai/dsh-manager v0.35.6(commit ebbe995)|基线:dsh 0.1.0-rc.7 交互版:dsh-manager-plugin-page.html(cytoscape 动态 DAG,本报告的可视化镜像)

一、当时情况

二、制定计划

经拷问收敛五项决策:①方法论级一致(三硬依据 E1/E2/E3 + 源码行引用 + provides/depends_on/dependents 字段,独立交付不改知识库数据层);②新建独立留档目录;③基线用知识库内 RC7 官方源码;④可视化=单页交互 HTML(cytoscape);⑤DAG 范围=内部模块全节点 + 宿主依赖灰显 stub。

执行拆解:

  1. clone 源码并记录 commit → 2. 主 Agent 读装配文件 + 提取知识图谱上游节点 → 3. 并行委派两个 explore 子Agent(服务端半区 lib/index.js+三 core / 浏览器半区 client.js)→ 4. 主 Agent 裁决聚合设计问题 → 5. 组装 dag-data.json 后委派 general 子Agent 生成单页 HTML → 6. 静态门控 + agent-browser 渲染验证 + VLM 复核。

三、执行情况

  1. 源码获取:clone HEAD ebbe995a114a61e6f760d45041a759071560f391(2026-08-22, v0.35.6),首次 clone 超时一次后重试成功。
  2. 勘查:lib 共 ~10.7k 行(index.js 4514 / client.js 4626 / service-core 406 / repo-core 292 / ai-core 82),cordis.patch.yml 仅 9 行。确定“主 Agent 只读小文件、大体量拆子Agent”策略。
  3. 知识图谱上游对齐:从 webapp-dag.json 解析出 dsh-manager 全部宿主消费点对应的真实节点(webServer→dsh-host-webserver G25/L0、skills→dsh-skill G18、llm→dsh-llm G04、locale/slots/runtime/modules 等 18 个 stub 全部带组别+拓扑层标注)。
  4. 并行子Agent 分析(均 success):服务端半区产出 E2 硬证据(inject:['webServer'] index.js:70、webServer.register 单路由 :4409)、61 方法 RPC 面、三大功能机制、五道路径穿越防护、安全观察;浏览器半区产出 8 次 slots.inject 清单、单命名空间双语字典、四面板结构、14 个内部分区、8 项设计问题观察。
  5. 问题与应对:①rm -rf 被权限拦截→确认目录不存在后跳过;②snap chromium WSL 命名空间崩溃→换 browser-harness 的 agent-browser;③VLM 对小字号深底文字两次转写互相矛盾→改用 DOM 级真值核验(el._cyreg.cy.nodes() 逐节点比对标签),证实渲染正确、VLM 幻读排除。

四、完成情况

交付物清单(本仓库根目录)

文件说明验证
01-source/dsh-manager/源码 clone(commit ebbe995)git log 核验
02-analysis/dag-data.json结构化分析数据:5 core + 18 stub + 23 边 + 4 功能 + 6 需求 + 9 设计问题,全部带行号证据JSON 合法、边端点零悬空
dsh-manager-plugin-page.html单页交互 DAG 页(cytoscape+dagre LR,本地 vendor,点击详情卡)门控 ALL PASS + 渲染验证通过

质量门控结果

核心分析结论摘要

定位:传输面注册型宿主行——不 provide 任何 cordis 服务;提供物 = POST /api/dsh-manager 单路由(61 方法 RPC 面)+ 包内 6 技能注册 + 2 个 dispose effect。

双半边架构:node 半边 inject:['webServer'] 经 webServer.register 挂载;browser 半边经 __DSH_BOOT__ 机制注入(E3),inject:['slots'] 注册 sidebar.footer.action×4 触发器 + shell.overlay×4 面板;两端经同源 fetch JSON-RPC 闭合。

四大功能:Skills 统一管理(五来源 catalog + frontmatter 行级直写 + 回收站/备注/拼音索引);部署补丁管理器(replace/script(vm沙箱)/override 三类 + 内容寻址官方快照链重放 + RECOVERY.md + CLI 兜底);本地仓库面板(多根扫描自动分类 + 『只读面板+生成指令』模式);本地服务面板(services.json 账本 + 探活 + AI 诊断)。

需求溯源:六痛点(技能散落/误删不可逆/升级覆盖定制/仓库无账本/服务手动拉起/冷启动性能债),功能与痛点一一映射。

设计问题九项(高2/中4/低3):高=鉴权弱于宿主信任栅栏(自制 sameOrigin vs isTrustedApiRequest)、script 补丁 vm 沙箱自认非硬边界+服务启动 RCE 面;中=双单体文件(4626+4514 行)、依赖声明不实(inject=['slots'] 但实消费 6 服务)、轮询增殖(7 个 setInterval)、快照无 GC+CLI 双实现漂移;低=死代码/重复样板、硬编码本机路径、render-phase setState。每项均附对应建议(详见交互页或 dag-data.json)。

五、反思/分析/建议

  1. 方法论复用成功:知识图谱的“三硬依据+行号引用”框架可直接迁移到第三方插件分析;stub 对齐真实节点 ID(而非泛化包名)使分析结果可与 webapp-dag.json 无缝互查。
  2. VLM 小字幻读教训:深底小字号文本的 VLM 转写不可信(本次两次转写均幻觉),图形渲染验证应“像素计数确认非空白 + DOM/实例 API 取真值”,VLM 只用于布局/乱码级粗检。
  3. skill 适用性裁剪:version-upgrade-cascade 是“版本升级级联”工作流,本次为新插件分析任务,仅复用其 Step1 源码获取规范与 E1/E2/E3 判定法,三层 diff 不适用——按需裁剪而非全套照搬是正确决策。
  4. 后续建议(针对 dsh-manager 上游):优先落地两项高危修复(对齐宿主信任栅栏、补丁导入哈希校验);client.js 拆分可先从 locale 字典 JSON 化入手(收益最大、风险最小)。