Repository navigation
v1.3.4 — 凭据归属、执行身份与真实 pi 协议
v1.3.4 — 凭据归属、执行身份与真实 pi 协议
针对 v1.3.3 独立审计(50 项 = 29 缺陷 + 21 工程不足,commit 7a26217)中 29 项行为缺陷与可直接落地的工程项逐条修复。
凭据归属(全部按端点核对,不再按 provider 名硬继承)
- 改 URL 后"获取模型列表"不再把旧 Key 发往新地址:URL 变更且密钥留空时拒绝附加存储凭据,明确提示输入新端点密钥(保存路径 v1.3.3 已有守卫,discover 路径本次补齐)。
- 恢复备份不再把本机 Key 嫁接到改名端点:models.json 恢复合并先比对 baseUrl 再继承 apiKey/headers。
- 凭据头掩码可安全往返:GET 掩成
***的 Authorization 类头,POST 现在还原存储值而不是静默销毁;URL 变更时哨兵凭据头与 key 同步清除。 - "不含密钥"备份脱敏冷却/运行错误文本(上游错误可能内嵌触发它的密钥)。
执行身份(以 tab/cwd/请求为中心)
- 提示词不再可能发进运行在另一项目的 tab:submitPrompt 校验 tab 打开时的 cwd 与当前项目一致,不一致即分离重建——一条防线封住标题点击/添加项目/移除项目/配置重载全部旁路。
- 切项目 = detach:服务端把 tab 标记为无人管理(30 分钟孤儿 TTL 兜底),界面出"后台运行"通知条提供切回/结束;旧实现直接忘掉 tabId,留下无法管理、无法回收的子进程。
- 扩展确认框回复发回发出请求的那个 tab(旧实现读点击时的全局状态)。
- 失效回包不再污染已切换的项目:回退响应只在武装上下文仍然成立时才落地;故障上报携带武装 tabId,冷却落在正确的 key 槽。
- 删除当前项目时其运行中会话一并结束(弹窗明示)。
真实 pi 协议
- set_model 重绑真正生效:pi 0.85 返回 Model 对象(
{provider, id}),v1.3.3 读的data.model字符串从不存在——旧 key 索引残留导致 401 冷却打错供应商 key 池的路径已封死(对照随包 rpc-types 验证)。 - 同模型换 key 全链打通:
/api/routing/fail返回sameModelKey,前端优先用备用 key 重开同一模型,而不是直接跳供应商。 ${KEY}轮换真正到达 pi:环境覆盖此前写成{KEY},pi 永远读旧值;现写裸名。- 显式启动尊重供应商停用开关:
enabled: false现在拒绝 open(此前只过滤回退链)。
Cron
- 默认模型任务接入默认模型的密钥轮换;全部 key 冷却的供应商 fail-closed(报"keys cooled"),不再带着旧环境裸跑。
- 被在跑 interval 挤掉窗口的 daily 改为延期补跑(当日有效),排序修不了已关闭的窗口;窗口消耗移入真正 spawn 路径,拒绝不再反复写 cron.json。
前端 / 导入 / MCP / 壳
- 导入视图:迟到 replay 不再覆盖、导出按钮拦截(旧实现会导出上一个 live 会话)、点击列表项真正跳转工作台;工具结果按
data-id配对(dataset.callId从未被赋值过);replay 后工具卡映射保活;fork 缓存随发送失效 + 请求 id 防陈旧超时;重复分支与重复 get_state 去重。 - MCP 桥:陈旧子进程 stdout/stderr 不再污染新客户端;
null行不炸;失败路径与 shutdown 杀整棵进程树(Windows taskkill /T、POSIX 进程组);主 pi stdin 加异步 EPIPE 兜底。 - Tauri 壳:身份握手 3 秒读超时;剥离
NODE_OPTIONS/NODE_PATH(与 Electron 对齐)。 - 文档/供应链:README 开发启动补
PIWB_EMBED_TOKEN=1说明;MCP 面板文案对齐真实 lazy/eager 默认;故障文档指向真实日志文件 server.log;SBOM 重新解析多文件 vendor 行(uPlot 曾静默缺失);仓库描述去掉"10MB / data never leaves"。
验证
lint 0、测试 40-40、路由扫描 47 PASS、探针(ws / failover / ui / chat / contract)全 PASS;契约测试从 5 项扩到 16 项并进入 CI e2e(上一版有三条声明没有测试锁定,全部被审计击穿——本版起修复必须带锁)。CI 8 job 全绿后从 CI 产物发布(SHA256SUMS + SBOM 均含)。
代码签名仍等证书账号(唯一用户侧门控)。