fix: 加密 mbank 把密钥写进包内(运行端 get_key() 才取得到)

运行端 public/utils/launch.py 的 init_module_bank 用 PythonToSQLite.get_key() 从
**包内**取密钥,它不读旁挂 <包>.key —— 只写旁挂文件的话,--encrypt 产物启动即报
"模块 'plugins' 的字节码是加密的,但没有提供解密密钥",插件全部加载失败、契约
校验不过,网关直接起不来。

打包时改为一并调 packer.packer_key(key)(module-bank 0.4+ 存在包根部 packer_key,
不进模块清单);旁挂 .key 保留,分发/测试口径不变。
This commit is contained in:
2026-10-14 15:29:25 +08:00
parent 7bdd80a7a5
commit e9879ea2a3
+7
View File
@@ -283,6 +283,11 @@ def _pack_mbank(
encrypt=False(默认,加 --encrypt 才打开)时传 key=None:module-bank 存
**明文**字节码,模块元信息里 encrypted=False,加载端不需要密钥也能导入。
加密时密钥写两处:旁挂 ``<包>.key``(分发/测试口径)**和包内根部的
``packer_key``**(运行端口径)—— ``public/utils/launch.py`` 的 init_module_bank
是用 ``PythonToSQLite.get_key()`` 取密钥的,它只读包内那份;只写旁挂文件的话
加密产物启动时会报"模块 'plugins' 的字节码是加密的,但没有提供解密密钥",
插件全部加载失败、契约校验不过,网关直接起不来。
"""
# 每次从空文件开始:旧包里的历史版本既让体积膨胀,也会留下重名/空的版本
Path(output_path).unlink(missing_ok=True)
@@ -302,6 +307,8 @@ def _pack_mbank(
packer.pack_directory(source_dir, package_name)
packer.verify_package_structure()
packer.delete_source_code(None)
if key:
packer.packer_key(key)
packer.sign_version("my_key", key_id="ci-2026")
# 给"当前这一版(已签名的)"起名,不派生工作版本 —— 加载端跟最新走就是它
packer.vfs.rename_snapshot(packer.vfs.snapshot_id, "v1.0.0")