You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After upgrading from dsh-v0.1.3-alpha.1 to dsh-v0.1.3-alpha.2 (currently at c389f96bf3, merge #3713), booting dsh web fails when a third-party client plugin (dsh-ssh v0.3.0-pre, which registers its /dsh-ssh channel through ctx.connection.rpc.handle) tries to mount its channel:
Error: dsh: plugin tree failed to load: failed to apply loader entry ssh-web-channel (dsh-ssh/web): cannot get property "webServer" without inject
Error: cannot get property "webServer" without inject
at Fiber.<anonymous> (packages/client/connection/src/rpc-host.ts:179:19)
at Proxy.register (packages/client/connection/src/rpc-host.ts:178:18)
at Object.handle (packages/client/connection/src/rpc-host.ts:82:42)
at new apply (node_modules/dsh-ssh/src/web.ts:336:38)
Root cause
HostConnectionService.register / registerFetchRoute (packages/client/connection/src/rpc-host.ts:178-179) access owner.webServer.register(route) on the connection plugin's own context (owner = this.ctx), but connection's top-level inject list (packages/client/connection/src/index.ts:69) only declares ['credentials'] and does not declare webServer. With Cordis' strict service-access check (vendor/cordis/src/reflect.ts:144), reading an undeclared service on the plugin context throws and aborts the whole plugin-tree boot.
First-party plugins register routes through their own declared services, so only third-party plugins that register an HTTP channel via connection.rpc / connection.fetch hit this — dsh-ssh is the first one to expose the gap. dsh-v0.1.3-alpha.1 booted fine; the failure appeared after the alpha.2 upgrade.
Expected behavior
Either declare webServer in connection's top-level inject (it genuinely depends on the web server to mount channels), or wrap the owner.webServer.register(...) calls in register/registerFetchRoute with a local owner.inject(['webServer'], ...) so the dependency stays scoped.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Describe the bug
After upgrading from
dsh-v0.1.3-alpha.1todsh-v0.1.3-alpha.2(currently atc389f96bf3, merge #3713), bootingdsh webfails when a third-party client plugin (dsh-sshv0.3.0-pre, which registers its/dsh-sshchannel throughctx.connection.rpc.handle) tries to mount its channel:Root cause
HostConnectionService.register/registerFetchRoute(packages/client/connection/src/rpc-host.ts:178-179) accessowner.webServer.register(route)on the connection plugin's own context (owner=this.ctx), butconnection's top-level inject list (packages/client/connection/src/index.ts:69) only declares['credentials']and does not declarewebServer. With Cordis' strict service-access check (vendor/cordis/src/reflect.ts:144), reading an undeclared service on the plugin context throws and aborts the whole plugin-tree boot.First-party plugins register routes through their own declared services, so only third-party plugins that register an HTTP channel via
connection.rpc/connection.fetchhit this —dsh-sshis the first one to expose the gap.dsh-v0.1.3-alpha.1booted fine; the failure appeared after the alpha.2 upgrade.Expected behavior
Either declare
webServerinconnection's top-levelinject(it genuinely depends on the web server to mount channels), or wrap theowner.webServer.register(...)calls inregister/registerFetchRoutewith a localowner.inject(['webServer'], ...)so the dependency stays scoped.Workaround (local)
Environment
dsh-v0.1.3-alpha.2-133-gc389f96bf3(HEADc389f96bf3, 2026-09-08, merge An unset value in an MCP entry env kills the whole harness, and the error omits the key that caused it #3713)git clean -fdx && pnpm install && pnpm run buildall succeed;pnpm dsh webfails at plugin-tree boot$DSH_HOME/profiles/web/dsh-sshviactx.connection.rpc.handle, lib/web.js ~:298)All reactions