fix(host): ctx.set 前必须 ctx.provide,否则整个插件树加载失败、DSH 起不来(隔离实例实测复现;修复后正常启动并写出 endpoint.json 与 HTTP 路由)

This commit is contained in:
2026-09-27 14:11:06 +08:00
parent 0c730f424c
commit 90674cf165
+8 -2
View File
@@ -261,8 +261,14 @@ export function apply(ctx) {
} }
const pushHidden = () => broadcast({ type: 'cmd', cmd: 'hide' }) const pushHidden = () => broadcast({ type: 'cmd', cmd: 'hide' })
// 抓屏前隐藏:给其它插件/工具用的门面(没有消费者时静默) // 抓屏前隐藏的对外门面:交给宿主的共享对象。
ctx.set?.('floatWindow', { hide: pushHidden, show: () => broadcast({ type: 'cmd', cmd: 'show' }), snapshot, endpoint: () => endpointFile }) // 注意 cordis 要求先 provide 再 set,否则会抛 "cannot set property ... without provide"
// (实测:漏了 provide 会让整个插件树加载失败、DSH 起不来)。这里做成可选的,
// 拿不到 provide 就退化成只广播 SSE 命令。
try {
ctx.provide?.('floatWindow')
ctx.set?.('floatWindow', { hide: pushHidden, show: () => broadcast({ type: 'cmd', cmd: 'show' }), snapshot, endpoint: () => endpointFile })
} catch (e) { log('floatWindow facade skipped:', String(e?.message || e)) }
// ---------------------------------------------------------------- DSH 设置入口 // ---------------------------------------------------------------- DSH 设置入口
// 注册一个设置命名空间,DSH 的「设置 → 插件」会把它渲染成一张卡片。 // 注册一个设置命名空间,DSH 的「设置 → 插件」会把它渲染成一张卡片。