Replies: 1 comment
|
你现场记录的 最小修复(锚点规范化为真实路径)+ 回归红绿 + A/B(有/无构建产物)+ 原句端到端复测见 #7048。你提到的构建入口启动方式可作为修复合入前的临时缓解。 |
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.
在 Linux aarch64、
0.1.6-alpha.2(commitddefc45fbc7f8e46dd73185e68295696d1297887)上独立复现了源码启动时的工具调用失败。不修改源码,改用pnpm exec node apps/cli/lib/bin.js web后,已手动确认 Web 对话可以正常调用工具。 希望维护者将这个可直接执行的临时启动方式补充到相关排障说明,并修复源码启动的模块解析。关联讨论:#6974、#7011、#7030、#7035。与这些报告属于同类问题;本帖补充当前环境的运行中调试证据和实际 Web 验证结果。#7035 的社区回复也提供了等价的构建入口启动方式。
环境与复现:
v24.16.0;pnpm11.7.0。pnpm run build后,用pnpm dsh web启动。本轮运行失败Cannot read properties of undefined (reading 'prepare')。pwd,也复现同样错误。实际堆栈(已去除本机目录前缀):
运行中调试确认同一进程已加载以下模块:
在
startCall异常现场检查ctx.tools,结果如下:因此,这次失败的直接原因已经确认:注册端与调用端持有不同的 Symbol 对象,调用方无法取到实际存在的调度器。
packages/core/tools/src/index.ts:463使用模块局部的Symbol('@deepseek-ai/dsh-tools.scheduler');源码与构建产物各自求值会产生不同的键。调用点是packages/core/agent-loop/src/tool-calls.ts:170。**已验证的临时解决方式:**停止原 Web 服务,在仓库根目录用构建后的 CLI 启动,并打开新进程打印的访问地址:
该方式由我手动确认可以正常调用 Web 工具。另通过
node apps/cli/lib/bin.js --profile headless运行只读诊断,真实调用 shell 执行pwd,工具和 CLI 均成功退出。排查和验证过程中没有修改源码、删除数据库或清理会话。这里只确认后续工具执行恢复,没有验证此前失败轮次的历史会话恢复。单独重新 build 不会改变
pnpm dsh web的启动入口:该脚本仍执行node --import tsx/esm apps/cli/src/bin.ts web。构建后的 CLI 则避开了这条 tsx 源码启动路径。建议上游评估的修复方向(以下未在本环境实施):
route.entry.declarer使用真实路径,再交给原 loader;这是一条值得评估的具体候选方案,其补丁验证属于该回复作者的结果。link默认值的方案,应明确区分 tsx 源码启动与普通 Node 构建入口,保留构建入口所需的runtime行为。我们尚未在本环境验证这一改动。apps/cli/src/profile-boot.ts:263的默认值变更(9ddef327a4)与现象吻合,但本次没有做提交二分或回退对照。Symbol.for(...)可以作为共享键的补强候选,但仍需要验证模块兼容性和 HMR;单独改变这个键无法保证两份模块中的其他身份与状态一致。lib/的工作区中,分别用 tsx 源码入口和构建入口执行一次受控工具调用,并检查结果与turn/end,覆盖 native 和 PTC 调度。仅验证--version、启动成功或页面可访问,无法捕获此次故障。希望官方优先公布上述已验证的构建入口 workaround,并将解析层修复及实际工具调用回归一起纳入后续版本。
All reactions