The module identity failure

The scheduler key is a module-scoped plain Symbol. Node caches one identity per resolved module file, not per package name. When the agent loop imports one dsh-tools copy and the live ToolRuntime installs the scheduler under another copy’s Symbol, both symbols have the same description but are never equal.

LayerModule copy AModule copy B
Agent loopLooks up TOOL_RUNTIME_SCHEDULER from its resolved dsh-toolsDoes not know B’s Symbol identity
Tool runtimeDoes not own A’s keyRegisters the scheduler under B’s key
ResultLookup returns undefinedprepare is never reached

Why tools may still look registered

Registration and execution use different boundaries. A profile can list tools and a text-only turn can work even though the scheduler identity needed at execution time is split. That is why the most useful control forces exactly one built-in tool call.

Find the extra physical copy

Inspect the launcher tree and the failing profile tree separately. Mixing package managers, running npm or pnpm manually inside a profile, or linking a local checkout can all create an extra copy; the discussion does not confirm which operation created the reported duplicate.

Read-only module checks from the current directory
npm ls @deepseek-ai/dsh-tools --all
node -p "require.resolve('@deepseek-ai/dsh-tools/package.json')"

Recover with a reversible change

Back up the failing profile and its lockfile. Move only the confirmed profile-local duplicate outside the active module graph, then run the exact tool-call control again. If the crash remains, restore it and investigate the full stack; do not recursively remove the profile or DSH home.

What an upstream fix would need to address

A durable fix could prevent the duplicate graph, make the runtime identity global or structurally injected, or fail with a typed diagnostic that names both resolved module paths. No such fix is claimed in the current official release.

DeepSeek Harness is in developer preview. Recheck official documentation and plugin evidence when the host version changes.

Sources and evidence

Official documentation and community evidence are labeled separately in the source pages and in this article.