Replies: 4 comments
|
The I think the more robust boundary is to make The dangling |
|
Verified against rc.7 ( 1. Family confirmation — duplicate-copy symbol crash (5 reports).
2. The convergence: this IS the 3. On bevinkatti's points — agree, with one precision.
4. One-PR shape if the channel opens (all pieces verified): Solid report — the before/after timeline is what makes it conclusive. This thread deserves a link from #2660. |
|
Correction/addendum to my earlier comment: I stated #2660 "was missing the trigger" — that was wrong. #2660 is the canonical root-cause thread and predates yours: same duplicate-copy symbol mechanism, with runtime probe evidence (realpath comparisons DIAG-TOP/DIAG-CTOR2) and a repro on Windows/rc.6 (pnpm-hoisted copy). Your report remains valuable as the second independent confirmation — macOS/rc.7/bundled-copy trigger, extending the model from "pnpm hoisting" to "any second physical copy" — but credit for the root-cause identification belongs to #2660. I've posted the full convergence (family lineage, fix-blueprint reconciliation incl. #2660's loader-priority idea) on #2660 — linking both threads so each carries the complete chain: trigger (duplicate copy) → crash ( |
|
Thanks for the clarification and for tracing this back to #2660. The distinction between fixing the symbol lookup and actually eliminating duplicate runtime instances was what I was getting at with Symbol.for() vs a host-owned capability. The tool/result guard also makes sense as an independent safety net for preventing the scheduler failure from poisoning the session chain. |
Uh oh!
There was an error while loading. Please reload this page.
Summary
After installing a third-party plugin (
dsh-computer-use) into the web profile, every tool call in the web UI crashes with:After the crash, the session is left with a dangling
tool/call(notool/result), so every subsequent turn in that session — and in any session forked/seeded from it — fails with:Environment
0.1.0-rc.7(global npm install)web, with third-party plugins installed viadsh plugin/ dshmarketRoot cause
TOOL_RUNTIME_SCHEDULERis a module-levelSymbolcreated in@deepseek-ai/dsh-tools:Installing a plugin that depends on
@deepseek-ai/dsh-tools(e.g.dsh-computer-use@0.1.0, which bundles@deepseek-ai/dsh-tools@0.1.0-rc.6as a real dependency under its ownnode_modules, and other plugins with^0.1.0-rc.6peer ranges hoisting an rc.6 copy to$DSH_HOME/profiles/web/node_modules/@deepseek-ai/dsh-tools) results in two physical copies of the dsh-tools module in one process:dsh-agent-loopnode_modulesEach module instance creates its own unique
Symbol, soctx.tools[TOOL_RUNTIME_SCHEDULER]indsh-agent-loopresolves toundefinedand the first.prepare()call throws:Timeline confirms it: tool calls worked until the plugin was installed; removing the plugin and all stray
dsh-toolscopies from the profile restored normal operation.Reproduction
dsh plugin --profile web add dsh-computer-use(or any plugin that pulls@deepseek-ai/dsh-toolsinto the profile'snode_modules)dsh web, open a new session, send any prompt that triggers a tool call (e.g. "list files in the current directory")prepareTypeError; continuing the session then fails withINVALID_REQUESTNote:
--profile headlessis unaffected (no third-party plugin bundles loaded).Secondary issue: unrecoverable session corruption
When a turn crashes between
tool/callandtool/result, the session log keeps a dangling tool call. Because sessions are seeded/forked with their full history (parentSession/seedLength), the corruption propagates to every descendant session and the API rejects every subsequent request. There is no built-in recovery: the user has to abandon the whole session chain (or hand-repair the log). Suggestion: on resume, detect a trailing unansweredtool_callsblock and either synthesize an error tool-result or truncate it.Suggestions
@deepseek-ai/*packages as peer-only, and/or make the plugin loader resolve@deepseek-ai/*imports from the core installation so only one module instance ever exists.dsh plugin addcould warn/block when a plugin bundles a different version of a core@deepseek-ai/*package than the running harness.Workaround (for anyone hitting this)
then restart
dsh web.All reactions