Replies: 2 comments
|
这个提案我强烈支持,而且可以提供一个存在性证明:故障隔离是能做的,我们在自己的挂载路径上就是这么做的。 一个已经在跑的对照实现我维护的兼容层在挂载它负责的那批插件时,挂载失败不炸启动、也不炸 Agent:按能力缺口分级捕获,记进一个账本,然后一次性告诉用户"哪个包的哪个能力不可用、其余照常、如果这就是你装它的主要用途、建议卸载它"。也就是你提案里的第 2 条 + 第 3 条。 做下来有两个经验值得写进你的提案:
但这条不覆盖你要的场景,必须说清楚我们的隔离只作用在经这座桥挂载的那批插件上。DSH 原生的 cordis 插件行仍然是全有全无——你在提案里描述的那个"任何一行插件出错就整个 WebUI 起不来",我们改不了,那在宿主的加载器里。 所以我这条只能作为"这件事可行"的旁证,不是替代方案。 给现在被卡住的人(这帖搜到的人多半是)在官方做隔离之前,恢复和预防的办法:
你提案里的第 3 条(报出是哪个 bundle / 哪一层 / 哪一行)我觉得是最值钱的一条——现在这个"逐行注释二分排查"的过程,本身就是把定位成本转嫁给了用户。 利益相关:我维护 pi2dsh。上面"给被卡住的人"那段全是 DSH 官方机制,跟我的包无关;对照实现那段只是设计参考,不是让你装什么。 |
0 replies
|
我是插件库,我感觉你的插件很好,我想收录,可以提ISSUE。 具体提的方法如下。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
问题描述
DeepSeek Harness 的 Web 应用(
dsh web)在启动时会按 profile 配置(dsh.profile.bundles、cordis.patch.yml、--patch覆盖层)加载组合中的全部插件。目前任何一行插件在加载或初始化阶段出错(例如:依赖缺失、配置错误、apply()抛异常、代码语法/运行时错误),都会导致整个应用启动失败:cordis.patch.yml/--patch)出错;cordis.patch.yml、卸载插件等)并重启,恢复成本高。在「多个 bundle + 用户 patch 覆盖」的大规模组合下尤其脆弱:任何一个非核心插件的问题都会拖垮整体。
期望行为
希望 WebUI 的启动做到「核心优先、故障隔离」:
dsh-web-app提供的部分)正常加载即可启动界面;非核心/可选插件不阻塞启动。cordis.patch.yml或--patch中的哪一层/哪一行);整体思路类似 VS Code 的插件系统:扩展运行在独立的 Extension Host 中,扩展启动失败或崩溃只提示「扩展 xxx 已终止」,编辑器界面本身始终可用,通知中给出错误详情,用户可查看日志或禁用该扩展。
建议的实现方向(供讨论)
critical: true或核心插件白名单),只有核心插件加载失败才中止启动,非核心插件失败走隔离路径。dsh web终端输出中给出带插件标识的详细错误。边界情况
收益
补充说明
cordis.patch.yml中新增一个存在问题的插件后运行dsh web,进程直接失败,界面无法打开,终端错误难以定位具体插件。cordis.patch.yml、--patch覆盖层组合而成,报错时标注来源层即可大幅降低定位成本。All reactions