Repository navigation
DSH 0.2 plugin ecosystem: 5 questions after debugging plugins on Windows (notes included) #10519
Replies: 3 comments
|
Thanks for documenting these findings. Two of the issues you described can be investigated independently of the undocumented parts of the DSH plugin API. For the plugin migration issue, the important distinction is between a missing export and a plugin initialization failure. An error such as:
happens during ES module linking, before the plugin's initialization code executes. This means adding a runtime fallback inside the same module will not help if the removed symbol is still imported statically. I would approach the migration as follows:
A minimal export inspection can be performed with: node --input-type=module -e "import('@deepseek-ai/dsh-settings').then(m => console.log(Object.keys(m).sort())).catch(console.error)"This does not prove that an exported API is supported or compatible, but it helps distinguish an export mismatch from a runtime problem. For plugin health checks, I would also separate three different states:
A successful dynamic import only verifies the first part of that lifecycle. It does not guarantee that the plugin mounted successfully. A useful diagnostic tool could compare configured bundle IDs against registered runtime services and initialization errors, then report mismatches explicitly. Regarding the Windows sandbox issue, I would avoid using My suggestion would be to tackle the missing-export error first, because it is deterministic and can be reproduced without involving sandbox permissions, networking, or the complete plugin runtime. Have you identified whether |
|
@VitorRodi Thanks — this is exactly the kind of breakdown we needed, and you were right to challenge our assumption. Answering your questions and confirming what we could verify. Re:
Re: link-time vs init-time — agreed, and we now separate them explicitly. We only classify Re: the three states — this matches what we eventually worked out the hard way. Our current inventory only covers states 1 and 2 (dynamic Re: sandbox — agreed, we stopped treating danger-full-access as a workaround for routine plugin management. Our recent incident was self-inflicted: we upgraded the shared global runtime while the host was running, so the frontend assets and the running host ended up on different versions. Lesson learned — test upgrades against a copied runtime, never the live one. One follow-up: do you know whether the profile-level compatibility check (the Thanks again for the detailed pointers. |
|
For your compatibility-check follow-up, rc.2 already has profile-aware manager APIs. Inside a DSH client plugin, these are the calls used by the official plugin-manager UI: const inventory = await ctx.remote.pluginInventory.list()
const bundles = await ctx.remote.pluginManager.listBundles()
const plugins = await ctx.remote.pluginManager.listPlugins()Check each RPC result's
For the settings migration, import z from '@deepseek-ai/schemastery'
export const Config = z.object({
label: z.string().default('before').volatile(),
})The plugin reads I checked the published rc.2 backend on Node 24 and 26 with a real Loader and temporary profiles: incompatible, active and disabled entries reported the expected states; a form edit reached the live Config reference and profile patch, preserved ordinary fields, and rejected a stale revision. These checks covered the backend methods and Host forms. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Hi everyone 👋
I've been running DSH on Windows with
0.2.0-rc.2and spent the last few days debugging plugin issues for my setup. I wrote everything down and open-sourced it here: https://github.com/qinyangcheng8-lab/dsh-field-notesThe notes cover: plugin breakage after the 0.2 upgrade, pnpm lockfile recovery after an interrupted
pnpm remove, the 0.2 RPC wire format, Windows sandbox ACL problems, and building client-side (slot-injected) plugins.A few questions I could not answer from the docs or the code alone:
Plugin API migration. 0.2 removed
installSettingsSectionandsettingsNamespacefrom@deepseek-ai/dsh-settings, andassertNeverfrom@deepseek-ai/dsh-llm. Third-party plugins that statically import those names now fail at module-link time (The requested module ... does not provide an export named ...), so the host half never mounts. What is the recommended migration path —SettingsProvider.installSectionon newer hosts? Is there a compat shim, or are settings sections simply unsupported in 0.2?Plugin health check. Is there an official way to list loaded plugins and report load failures? Right now I smoke-test by dynamically
import()-ing every package under the profile'snode_modulesand diffing againstdsh.profile.bundles.bundlesappears to be the only source of truth for "is this plugin actually enabled" — worth documenting if so.Prompt-cache best practices. In long sessions every step re-sends the context. Any change to the tool set or injected sources breaks the prefix, and the cache hit rate can jump from ~0.1% to >10% (uncached tokens cost roughly 50x more). Is "freeze injected sources and batch all changes into one window" the recommended approach? Is there a recommended way to measure hit rate?
"webchat"-style plugins. Plugins that drive the DeepSeek web UI to avoid API billing — is that path still viable on 0.2, or is it deliberately not supported? If not supported, is there any recommended alternative for cheap "quick questions" outside the main session?
Sandbox boundary. Under
workspace-write, writing to$DSH_HOME/profiles/**fails withEPERMand requiresdanger-full-access. Is that intended (profiles are protected), or is it an oversight that could be relaxed for plugin management use cases?Happy to add more detail or reproduce any of these. Thanks for the great tool! 🐋
中文摘要(给中文用户)
这篇帖子是在 Windows + DSH
0.2.0-rc.2上踩了一周插件坑之后整理的,完整笔记开源在这里:https://github.com/qinyangcheng8-lab/dsh-field-notes想请教 5 个问题:
installSettingsSection/settingsNamespace(dsh-settings)和assertNever(dsh-llm),静态 import 的插件在模块链接期直接报does not provide an export named ...,host 段根本挂不上。推荐的迁移方式是SettingsProvider.installSection吗?有没有兼容层?node_modules逐个import()冒烟,再按dsh.profile.bundles判断是否启用——如果「bundles 才是唯一启用清单」属实,建议写进文档。workspace-write下写$DSH_HOME/profiles/**直接 EPERM,必须 danger-full-access。这是有意保护 profiles,还是可以放宽?感谢阅读 🙏
All reactions