Repository navigation
Releases: YZBRH/keyrealm
Releases · YZBRH/keyrealm
Release list
v1.4.3
新增
- 检查到新版本时显示「更新内容」:正式版展示目标版本在远端
CHANGELOG.md里的那一段
(拿不到就退回该 Release 的说明正文),测试版列出当前 commit → 远端 commit 之间的全部提交
标题。取不到只提示一句,不影响检查结果本身。 - 「短信服务商」只保留下拉里能真验证的服务商:其余没有只读校验接口的一律移出选项,免得选了
却只能得到「未验证」。
变更
- 「更新」卡片挪到「系统设置」最后一栏(与「网络与代理」交换位置)。
- 邮箱的 TLS 交给框架的「TLS 版本」策略:邮箱原先自持一套「允许旧版 TLS」开关(插件字段
allow_legacy_tls),与框架重复造轮子;现复用plugin_sdk.ssl_context()。要连只开
TLS 1.0/1.1 的老邮件服务器,把该凭据的「TLS 版本」固定成 1.1(或 1.0)即可——框架在固定
旧版时会自动放宽 OpenSSL 安全级别。邮箱「不校验证书」的既有行为保持不变。 - 仓库转为公开:README 增「效果演示」截图小节;「访问令牌」的说明改为可选(不填也能检查
与更新,填了是认证 GitHub API、避开匿名限流;仓库转回私有时才必需)。 - 插件 docstring 与 manifest 提示文案整体精简;五家云厂商签名器的逐字校准证据集中到
docs/SIGNER_CALIBRATION.md;README 定稿新结构。
修复
- macOS 版启动一两秒后自己退出(应用完全不可用):托盘用的
pystray在 macOS 上会去跑
Cocoa 的主事件循环,而原先把它放进了后台守护线程——主线程的webview.start()于是拿不到
循环控制权、立刻返回,应用随即正常收尾退出(Windows / Linux 的 pystray 后端允许脱离主线程,
所以只在 macOS 上发作)。现改为把共享的NSApplication交给pystray.Icon(...)、再用
run_detached()挂到 pywebview 的主循环上;旧版 pystray 不支持该集成时直接不显示托盘,
绝不退回「抢主循环」那条路。 - 备份导入:经表单保存过的凭据一律导入失败:导入校验把「不在插件
fields_schema里的键」
判成未知字段,而保留键(_proxy_mode/_proxy_id/_tls_version)本就不由任何 manifest
声明,于是每条经表单存过的凭据都被整条判失败(导出再导入即复现)。现把保留键从该判定里豁免。
数据库
- 结构版本 1.2.1 → 1.2.2(一跳脚本
scripts/migrations/m_1.2.1__to_1.2.2.py,无表结构
变动,可在更新交棒阶段完成)。对应凭据数据格式变化:mail_smtp删掉allow_legacy_tls
字段;数据部分由backend/data_upgrades.py在解锁后 / 导入备份时完成(只删旧键,原先勾过
的人改在「TLS 版本」里重选)。
v1.4.2
新增
- 首页侧栏品牌名右侧显示版本号:小字灰色
v1.4.2(取自get_version的version,
不带 commit 尾巴);侧栏收起时不显示。
变更
- 「百度人脸」换上真实图标:原先用 emoji
🙂占位,现为百度蓝圆角底 + 「AI」字标。 - 「Google API 凭据」改名为「Google API」 —— 只改显示名,
credential_type与目录名不动。 - 「短信服务商」从「API 服务」移入「邮箱」类别,该类别改名「邮箱 / 短信」:
短信网关 / 接码服务商是发送通道,与邮箱同族;「API 服务」那一类装的都是在线服务的密钥
(Firecrawl / Tavily / 秘塔 / Coze / Dify / FOFA / Google API / 百度人脸)。 - 「Cloudflare」从「域名解析」移入「云服务商」:它验的是平台凭据本身——API Token 打
/user/tokens/verify、Email + Global API Key 打/user,不是 DNS 权限;credential_type
本来就是cloud_cloudflare(当年移入 dns 时留下的名字)。 - 类别计数:API 服务 9 → 8、邮箱 / 短信 1 → 2、域名解析 4 → 3、云服务商 11 → 12
(插件总数 64、类别数 10 不变)。
数据库
- 结构版本保持 1.2.1 —— 无结构变动,不需要迁移脚本。上面几次搬迁只改插件的
归属类别(目录),credential_type一律不变,存量凭据与启用状态都不受影响;
库里的plugin_path/category由upsert_plugin在启动时自动同步。
v1.4.1
修复
- 正式版更新装不上(
✗ 解压失败:[Errno 13] Permission denied: …\Keyrealm.exe):交棒进程自己
就跑在待替换的 exe 上,而 Windows 下运行中的 exe 不能原地覆盖(WinError 32,Python 报成
PermissionError)——「源码构建」那条路早已先改名腾位,「解压预编译包」这条路漏了,于是
1.4.0 的正式版更新在任何机器上都装不上。现在两条路复用同一套让位逻辑:包里带 exe 时先挪到
<exe>.old再解压;中途失败挪回来(宁可停在旧版本,也不让程序目录没有 exe)。
数据库
- 结构版本保持 1.2.1 —— 无结构变动,不需要迁移脚本。
v1.4.0
新增
- 「对象存储」类别(第 10 个类别):
- S3 兼容存储(
storage_s3):签名ListBuckets验证 Access Key(MinIO / 自建 / 任意 S3 兼容),
并提供桶列表、对象浏览、对象下载。 - 匿名对象存储(公开桶检测)(
storage_anon):不需要任何密钥,判定并浏览可匿名访问的桶
(只读列举 / 读取 / 打包下载 + 一次匿名写探测),通吃阿里云 OSS / 腾讯 COS / 华为 OBS / AWS S3 /
百度 BOS / MinIO 及任意 HTTP 桶。 - 插件总数 61 → 64,类别 9 → 10。
- S3 兼容存储(
- TLS 版本策略(框架级,走
make_client()的插件全部自动生效,插件无需改动):- 新增「TLS 版本」下拉:
auto(默认)/ 固定1.0/1.1/1.2/1.3;按
凭据 > 插件预设 > 类别预设 > 全局默认 逐级继承(与「代理」同一套),系统设置里可改全局默认。 auto= 先按标准协商;仅当握手在连接阶段失败才自动回退 TLS 1.2 重试一次(证书校验照旧)。- 连接失败时日志会打印异常链,可直接区分「被重置 / DNS 失败 / 证书失败 / 超时」。
- 新增「TLS 版本」下拉:
- MCP 记住开关状态:点「启动服务」后,下次启动应用会自动恢复;点过「停止服务」则保持关闭。
- 新增插件:百度人脸(
api/baidu_face);高德地图改为按「Key 类型」分档验证。 - 「数据升级」体系(
backend/data_upgrades.py):插件数据格式的变化按「结构变化」处理——
提升SCHEMA_VERSION并在scripts/migrations/留一跳脚本(哪怕表结构没动);需要解密的那部分
由本模块在导入备份与更新后解锁时一次性转换。插件与框架不再做运行时双格式兼容。 - 代码比库新时自动补齐结构:解锁时发现磁盘库的结构版本落后于代码,自动跑一遍逐级迁移;
导入备份前也先补齐。运行器每跳成功后才推进schema_version——版本号永不领先于实际结构。 - 数据库结构迁移的详细日志:状态(已最新 / 演练 / 链断档 / 被拒)、开始横幅(起止 + 跳数 + 库路径)、
每跳(脚本名 + 快照名 + 盘点 + 耗时)、失败定位、结束总耗时。 - 「上次更新」显示 commit 哈希,并且可关闭:测试版两版版本号常相同,靠 commit 才能区分变更;
关掉后换页 / 重启都不再出现,直到出现新的更新结果。 - 「检查更新」改成后台任务,结果持久化(换页 / 重启后仍在,直到被下次检查替换)。
- 「自动检测更新」开关(默认开启):启动后与解锁后各自动查一次。
- 私有仓库支持访问令牌(PAT):更新需访问私有 GitHub 仓库时,在设置里填一次即可。
- 「备份」升级为全量(含 salt,可跨保险库还原);更新前的备份复用它,产物落
data/backup/。 - 后台任务列表分页,列表区可滚动。
- 更新改为「两段式」:应用内先「准备」(下载 / 拉源码 / 构建,带进度),再交棒「提交」
(替换 / 迁移 / 重启,此时应用已退出)。
变更
- 更新 / 构建不再弹控制台黑窗;交棒阶段全程写日志(去掉黑窗后不能再静默)。
- 测试版拉源码默认丢弃本地改动;构建改用
npm ci,不再弄脏package-lock.json。 - MCP Token 移出数据库:改存
settings(mcp_token_hash+ 前缀),鉴权改为常量时间比对;
删掉从未启用的「Token 级工具范围」。备份不再单列该段,跨库还原后同一个 token 继续可用。 plugins.plugin_path改存相对路径(相对plugins/)——绝对路径会把程序目录钉死。- 百度文心
llm_wenxin1.0.0 → 1.1.0:凭证拆成 API Key + Secret Key 两个必填字段,
不再要求用户自己拼API_KEY|SECRET_KEY。 - 匿名桶 / S3 的「跳过 TLS 证书校验」统一走框架的
make_client(verify=…);删掉两个签名模块里
没人调用的 httpx 便利入口(签名部分保持零第三方依赖)。 - 设置页与凭据提示文案精简;界面不再把 markdown 的
**加粗**原样显示。
修复
- TLS 握手兼容会改写 ServerHello 的中间设备:OpenSSL 3 起默认拒绝「对端不支持 RFC 5746 安全重协商」
的握手,于是经企业网关 / 部分代理客户端的连接一律失败(UNSAFE_LEGACY_RENEGOTIATION_DISABLED;
同机curl因走 Schannel 而正常,容易误判成「目标不支持」)。现在恢复 OpenSSL 1.1 的默认行为——
只放宽「允许连接」,不开ALLOW_UNSAFE_LEGACY_RENEGOTIATION。 - 更新后自动重启会把「更新代理」漏给新应用:新进程一直带着
ALL_PROXY=<更新代理>,于是
全部插件请求都走了它,而界面上看不出任何设置。现在重启时还原更新前的代理环境变量。 - 更新替换失败(
WinError 32):交棒进程自己就运行在待替换的 exe 上,Windows 下不能覆盖——
改为先把旧文件改名腾位(Keyrealm.old)再放新的。 - 重启崩溃(
Failed to execute script 'pyiboot01_bootstrap'/_MEI…\base_library.zip不存在):
脱离起的子进程会复用父进程的临时解压目录、随父进程退出失效——现在一律带
PYINSTALLER_RESET_ENVIRONMENT=1。 - 备份不再因 WebView 缓存被占用而失败;修 sqlite 连接未关闭导致 Windows 上删不掉快照。
- 打包前的建表自检清单跟上删表(否则构建被挡下)。
- 匿名桶插件打到「站点页面 / 网关页」时的提示改为指向端点与路径——原先那条断言「桶名带下划线写错了」,是错的。
数据库
- 结构版本 1.0.0 → 1.2.1(三跳,各一跳脚本;都不需要主密码,可在更新交棒阶段完成,
应用解锁时也会自动补齐):1.0.0 → 1.1.0:文心凭证由单字段拆成api_key+secret_key(表结构无变化,只推进版本号)。1.1.0 → 1.2.0:删除mcp_tokens表(Token 搬进settings,用户不必重新生成);
plugins.plugin_path由绝对路径转为相对。1.2.0 → 1.2.1:清掉两条没人读的 settings 死键(data_version、data_schema_version)。
- 本次的 TLS 版本策略与 MCP 开关记忆无结构变动——新增的
settings键与凭据 JSON 里的
_tls_version保留键都带默认值,旧库无需迁移。
v1.3.0
新增
-
「地图」类别新增腾讯地图(腾讯位置服务)插件(
map_tencent)。WebService Key 验证走
IP 定位接口(/ws/location/v1/ip,无需参数、不消耗配额型服务),并区分「Key 无效」
(190/311)与「有效但受限」(配额120/121、白名单112、未开 WebService199、
签名未过111等)。Key 开启签名校验时,在凭据里补填 SK 即可,插件按
md5(path + "?" + 升序参数 + SK)自动计算sig。
另提供 8 个只读操作:地理编码 · 逆地址解析 · 地点搜索 · 行政区划 · 距离计算 · IP 定位 ·
实况天气 · 预报天气。插件总数 60 → 61(地图类别 2 → 3)。 -
程序内更新(两种渠道):「设置 → 更新」里检查并一键更新。
- 正式版:比对 GitHub Release 的最新正式版标签,有新版就下载对应平台的预编译包替换当前程序、
逐级迁移数据库、自动重启——不编译(源码部署据此切到二进制)。 - 测试版:跟
main最新提交(版本号 或 commit 任一不同即算有更新),从源码构建;本机没有源码
会先git init+fetch+checkout把程序目录转成源码部署,再建/补虚拟环境、装依赖、build.py --frontend。 - 更新代理:跟随全局默认 / 直连 / 指定「代理列表」里的某个代理(
git侧经-c http.proxy注入,
压过 git 全局配置里的http.proxy;pip/npm走环境变量);也可用KEYREALM_UPDATE_PROXY临时覆盖。 - 更新前自动备份(可执行文件 +
plugins/+data/,只留一份),完成后自动重启。 - 版本检查 / 更新 / 数据库逐级迁移 / 重启是四个独立脚本(
scripts/*.py+.sh/.bat薄引导,
无交互、缺环境自动建),核心实现在backend/updater.py;应用内交棒经main.py --self-update(打包版也适用)。
- 正式版:比对 GitHub Release 的最新正式版标签,有新版就下载对应平台的预编译包替换当前程序、
-
数据库逐级迁移:新增
scripts/migrations/,脚本命名m_<from>__to_<to>.py(只提供相邻两版、绝不跨级),
运行器把链逐级串起来升、每跳留 SQLite 快照;预编译包里也带一份(.update-meta/),让没源码的机器也能迁移。 -
预编译包自动发布:打 tag(
vX.Y.Z)触发.github/workflows/release.yml,在windows-latest与
macos-latest上并行构建,产出Keyrealm-<版本>-<平台>.zip并挂到该 tag 的 GitHub Release(也可手动触发)。
变更
- 构建产物默认落在仓库根(
.git同级),scripts/build.py新增--output/-o可指定落点
(--output release即旧行为);输出=仓库根时会跳过plugins/的自我复制、并保留Keyrealm.old供回滚。
数据库
- 结构版本保持 1.0.0 —— 本次无结构变动,不需要迁移脚本。