Repository navigation
v2.4.6 — 扫码账号每次打开都空白
2.4.4/2.4.5 之后侧栏能进、能滚了,但扫码过的渠道在账号池里经常整片空白,重开也一样。磁盘上账号是齐的(state.json 里 15 条),所以问题全在读取链。
16 秒的事实抓取把首屏挡掉了
load() 里先 await fetchChannelModels(...) 再 setEntries(...)。那次采样测到 16.5 秒——它要把每个模型逐个交给宿主适配器解析上下文窗口,冷启动时很慢。卡片区在这十几秒里是空的,看起来就像「没有账号」。
改成两阶段:provider.status 与 account.list 先回来(几十毫秒),卡片立刻渲染;事实(窗口/识图)随后合并进去。
失败被渲染成了「空」
provider.status 是「哪些渠道有账号」的唯一判据。它一旦整段返回 401,scanProviders 就是空的,entries 也是空的,组件走到 if (entries.length === 0 && error === undefined) return <></> —— 静默渲染空白,一个字都不说。读者无法区分「还没扫码」和「读取失败」。
现在保留原始信封判 ok:真的读失败就把错误显示出来。
RPC 桥只捕获一次
callPack 必须走 ctx.connection.rpc(裸 fetch('/api/channel-pack') 被宿主 401,因为 /api/* 只允许经 admission 的客户端)。但 installPackRpc(ctx) 在 apply() 里只跑一次,而提供 connection 的是另一个 fiber——那一刻没就绪,桥就永久为空,此后所有 callPack 都回落裸 fetch 吃 401,正好触发上一条的静默空白。
改为保存 ctx、每次调用前惰性解析,就绪后自动恢复。每一步仍各自 try:宿主给客户端 ctx 套的 Proxy 对未声明服务的属性访问会抛异常(并上报运行失败),?. 挡不住抛异常的 getter,只有 ctx.get() 豁免。
其他
- 全套 79 文件 1023 用例。