Repository navigation
Bug: 源码启动 + 已构建 lib 共存时所有工具调用失败(双模块实例导致 scheduler 符号 miss) #7146
aibots-team
started this conversation in
General
Replies: 0 comments
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.
现象
源码启动(
pnpm dsh)时,每一轮的第一个工具调用必失败,会话显示:根因
TOOL_RUNTIME_SCHEDULER用Symbol('@deepseek-ai/dsh-tools.scheduler')定义(packages/core/tools/src/index.ts),是模块实例级的唯一符号。源码启动(tsx 应用根 tsconfig 的paths投射)与 loader 按包main解析,会在同一进程加载两份@deepseek-ai/dsh-tools(src/index.ts与lib/index.js各一份,后者在构建过lib/后存在)。两份拷贝各自生成不同的 Symbol 对象,导致dsh-agent-loop在ctx.tools[TOOL_RUNTIME_SCHEDULER]上取到undefined,调用.prepare崩溃。该耦合自 2026-08-13 引入调度器时即存在,不是 0.1.6-alpha.2 回归;触发条件是「源码启动 + 已构建的
lib/共存」,因此未构建产物的纯源码环境不会复现。复现
修复
已在我 fork 的分支
fix/tool-scheduler-symbol-registry上提交(one-line 修复 + 说明):https://github.com/aibots-team/deepseek-harness/commit/b6adb2eb935dd0535018e9f68d45db3115bea360
核心改动:
Symbol(...)→Symbol.for(...),全局注册表保证两份模块实例共享同一符号身份。验证:
pnpm exec vitest related packages/core/tools/src/index.ts --run --coverage→ 217 个测试文件 / 4557 个测试全部通过,改动文件 100% 覆盖率;修复后源码启动 + 已构建 lib 的组合下工具调用正常。由于本仓库关闭了 Issues/Pull Requests,无法直接提 PR,烦请维护者评估上述提交。另建议一并审计同类跨包身份符号:
Symbol('dsh.tool.execution')(packages/core/tools/src/index.ts)、Symbol('dsh.scope')(packages/core/scope/src/index.ts),或统一源码启动下的模块解析平面。All reactions