v0.7.3 — 0.7.2 让宿主能起来了(兜底生效、DSH 不再崩),但人设菜单仍然是空的。
0.7.2 让宿主能起来了(兜底生效、DSH 不再崩),但人设菜单仍然是空的。原因:新宿主的
connection.rpc.handle 最终执行 owner.effect(() => owner.webServer.register(route)),而 owner 是
读这个服务的那个 ctx(dsh-client-connection 源码注释:channel registrations belong to the caller fiber)。
我们的入口 fiber 在 DSH Desktop 0.9.1 上解析不到 webServer → 那行抛错 → RPC 通道没建立 →
客户端菜单 list 拿不到列表(数据一直都在 storages 里,从未丢失)。
- fix RPC 注册改为双路径:主路径仍是宿主公开 API
connection.rpc.handle(依赖组合对齐宿主自带的
dsh-api-gateway:ctx.inject(["connection", "webServer"], …));它失败时回退为自注册 HTTP 路由
(webServer.register({ kind: "prefix", path: "/lume", handler }),宿主自带dsh-ppt的写法)。
报文与客户端conn.rpc.call严格一致:请求{type:"client-request",rpcId,method,payload}→
响应{type:"server-response",rpcId,result}。回退实现抽成纯函数模块src/host/rpc-bridge.ts,
由 12 例协议测试锁住(含 404/415/400、信封校验、rpcId 回显、异常不外漏、信任闸)。 - fix 错误信封补
details: {}:客户端parseConnectionResponse要求失败时error.details是对象,
缺失会直接抛invalid server-response failure——即此前任何 RPC 错误路径都会让客户端调用炸掉。 - fix RPC 诊断改成一行可 grep 的中文日志(宿主 logger 直接打 Error 会显示成
{}):成功时报走了哪条路径,
失败时报真实错误文本 + 环境形状(connection/rpc/handle/webServer/get各是什么),
下次宿主 API 变更时一眼可定位。 - RPC 注册依旧在 apply 末尾 + 独立 try/catch:它只服务客户端菜单,失败绝不拖累人设注入与工具。
影响面:0.7.2 及更早版本在新宿主上「人设菜单空白」都源于此。人设数据(2 个自定义人设、64 条会话映射、记忆/风格)全程完好。
安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.7.3)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.7.3