首页/开发者文档/插件数据管理

插件数据管理

数据目录、storage.json 文件级加密、导出文件、备份恢复

插件数据管理

数据目录

每个插件的全部数据位于 plugin_data/<pluginId>/:

plugin_data/<pluginId>/
├── storage.json              # storage.* API 数据 —— 落盘即加密(YZHENC1 格式)
├── encrypted_storage.json    # storage.encrypted.* 遗留 API 数据(AES-256-GCM)
├── exports/                  # file.exportFile 导出的文件(含系统分享来源)
└── ...                       # file.write/writeBinary 创建的其他文件
  • 覆盖安装(同 pluginId)不动此目录;卸载插件会删除整个目录,重要数据先导出
  • storage.json 上限 10MB;大文件(图片/音视频)走 file.writeBinary / file.exportFile,不要塞进键值存储

storage.json 文件级加密

storage.* 的所有数据在落盘时由宿主整文件加密(AES-256-GCM,YZHENC1: 前缀标识), 密钥来自托管密钥链,档位跟随权限页的「密码保护」开关:

密码保护 密钥包装 插件可用性
关(默认) 设备 KEK 托管 免密可用,没设安全密码也加密
开 密码层托管 需解锁安全中心;锁定时 storage 调用返回 {error:'locked', locked:true}
  • 加密/解密对插件完全透明,插件只管 storage.set/get
  • 开启/关闭密码保护时宿主自动迁移存量数据(提示 → 字节进度条 → 完成确认), 迁移写盘走临时文件+改名,中断不损坏数据

备份与恢复

  • 备份时 plugins/(插件本体)与 plugin_data/(数据)目录整体随行, storage.json 保持密文原样入包
  • 插件数据密钥随 tool_keys.json 一并携带(plugin:<id> 动态白名单, 密钥受备份密码整体加密保护)
  • 恢复到新设备:数据与密钥自动重包到新设备 KEK——密码保护关闭的插件恢复后 免密可用;开启的插件需解锁安全中心后解密
  • 恶意备份注入未知工具密钥会被白名单拒绝(plugin:<uuid> 形态动态放行)

导出文件(exports/)

file.exportFile 写入的文件位于 exports/ 子目录,行为约定:

  • 写入即自动弹出系统分享面板(用户发给微信/QQ 或保存到系统文件)
  • file.list('exports') 列出全部导出记录;file.share(name) 再次分享; file.delete(name, 'exports') 删除
  • 系统限制:沙箱目录无法用文件管理器直接打开,分享是取出文件的唯一途径

数据安全建议

  • 敏感数据优先开启插件的「密码保护」(数据进密码档),而不是依赖设备档
  • 不要在 storage 里存明文密码/令牌
  • 数据量大时注意 storage.get('__all__') 的内存占用(整文件读改写,上限 10MB)
MATRIX MODE: ON — 再输入一次或按 ESC 退出