Repository navigation
同一进程两个工作区:第二次挂载 preset 失败,tool:pwsh 等 prompt section 报 already registered(dsh 0.2.2-rc.1) #12849
Replies: 1 comment
|
你读到的三条机制都能在源码里对上,问题在于注册时的 ctx 来自哪份模块图。 报错模板能定位到层: 挂载失败是终局:catch 把消息写进 Symbol 机制也对: 要小心的一步:scope 的解析由宿主服务自己做(system-prompt 用 判定方法:数清 profile 与宿主两边 |
Uh oh!
There was an error while loading. Please reload this page.
环境
@deepseek-ai/dsh0.2.2-rc.1,Windows x64,自定义 profile(非 web)node_modules里存在@deepseek-ai/*的真实副本(由dsh plugin add装入),宿主 asar 内另有一份@xmanrui/dsh-im)配的是另一个目录现象
先在一个工作区建过会话之后,第二个工作区首次创建会话即失败:
后面跟着
tool-fs/tool-fs-search/tool-jobs/tool-goal/tool-ask-user/tool-todo/tool-web/tool-skill/present/tool-plugin-manager/ … 一整串,逐条对应 preset 的插件清单。失败之后,该 preset 在本次进程内永久作废:此后所有新建会话都报同一个错,只能重启恢复(源码注释 "A mount failure is final")。
读到的机制
scopeOf(ctx)的父作用域)各建一份,所以第二个工作区会走第二次挂载,而不是复用第一次的 standing mount。@deepseek-ai/dsh-scope(profile 一份、宿主 asar 一份)。kScope是模块私有Symbol(),两份实例的 Symbol 不相等,scopeOf()返回undefined,于是new ToolLayer(undefined)把所有 per-agent 注册静默降级成全局层。tool:*prompt section。这和第 #3557 的分析一致(
dsh plugin add把@deepseek-ai/*传递依赖以真实副本装进 profile,破坏"全局唯一拷贝"契约)。和已有报告的关系
prompt section "deployment-persona" is already registered,同一层,已作为重复关闭。本例的触发面更宽:不需要两个 preset id,只要两个工作区(各自 generation)就会撞;而且报错落在 prompt section 层,而不是 inspect provider 层。这一点在现有讨论里没有记录。
最小复现
agent-preset/invalid;此后 A 也无法新建会话。判据补充:如果第二个入口是 IM 机器人,表现是消息被收下(
seenMessageIds增加)但不产生回合,会话文件不再写入——很容易被误判成"机器人没收到"。期望
scopeOf()解析失败时应当显式报错,而不是静默降级到全局层。双实例只是触发条件,静默降级才是把局部问题放大成"整个 preset 作废"的原因。record.broken只影响该工作区,不要污染整个进程。agent-preset-invalid显示出来。现在是console.warn('new session failed:', …),用户只看到"点新会话没反应"。目前的绕过
@deepseek-ai/*的副本清掉/指回宿主那份(治标,且部分第三方插件声明了直接依赖,删了会 import 失败)。如果需要,我可以补一份 profile 的
node_modules布局和完整报错原文。All reactions