dsh 0.1.1 upgrade breaks third-party plugins with no compat check: registration.adapter.prepareCall is not a function #4013
Replies: 1 comment
|
I hit this exact contract change from the other side — maintaining a bridge that has to run on both generations — so here is the fix pattern for plugin authors, and a note on your proposal. The fix is not "implement
|
Uh oh!
There was an error while loading. Please reload this page.
Summary
Upgrading
@deepseek-ai/dshfrom0.1.0-rc.6to0.1.1-rc.2silently breaks third-party plugins that were written against the rc.6/rc.7 adapter contract. In our case, the community plugindsh-vision-routerv1.6.2 crashed the web UI on the first message with:This is a breaking API change in dsh 0.1.1 (
prepareCallwas added to the adapter contract) with no detection, warning, or migration path for installed plugins.Environment
0.1.0-rc.6→0.1.1-rc.2(vianpm install -g @deepseek-ai/dsh)dsh-vision-routerv1.6.2 (community, at~/.dsh/profiles/*/node_modules, pnpm-managed)Steps to reproduce
prepareCallcontract.dsh web, send any message (or trigger context injection / memory recall that reaches the adapter).registration.adapter.prepareCall is not a function.Root cause
prepareCallmethod on registered adapters.Workaround (verified)
Upgrading the plugin to v1.7.6 (commit
dae05e10, "support DSH 0.1.1 prepareCall adapter contract") fixes the crash.Feature request: plugin compatibility self-check after upgrade
Since DSH's design philosophy is "Everything is a Plugin", upgrade-time plugin compatibility is a first-class UX concern. Proposals:
prepareCall) exist on every registered plugin adapter; on failure, emit an actionable error naming the plugin, its version, and the required dsh version — instead of a bareis not a function.profiles/*/node_modulesfor plugins and report which ones may need a companion upgrade (like adsh doctorcommand).npm install -g @deepseek-ai/dshto repair" where applicable.Bonus (minor)
dsh webspawns amarkitdown-mcpchild process; when the process is interrupted, it prints a large misleadingKeyboardInterrupttraceback. Clean child-process exit handling would help.All reactions