Skip to content

运行环境与安全红线 ​

宿主 Python 版本、预置库、私有依赖怎么带、绝对不能做什么。


运行环境 ​

项事实
Python宿主 3.11 – 3.12
宿主预置核心库numpy、PySide6(含 QtWebSockets 等全套)、torch、transformers、sounddevice、requests、httpx
沙箱无 —— 插件与主程序同权限
运行时 pip严禁

私有依赖:libs/ 与 vendor/ ​

如果依赖宿主未包含的轻量 Python 库(opencc、deepl、openai、jieba…), 严禁在运行时调用 pip。标准做法:

  1. 在插件源码根目录创建 libs/ 或 vendor/:

    bash
    pip install <package_name> -t ./libs
  2. 依赖目录随 MOD 打包发布。

  3. 宿主 PluginRegistry 加载插件时自动探测并把 插件目录/libs 与 插件目录/vendor 注入 sys.path,插件内部及其子线程可直接 import。

  4. 插件卸载时宿主自动从 sys.path 移除这些路径,保持全局环境纯净。

重模型 / 重运行时:独立进程 + 本地 HTTP,插件内只做请求。 或者直接用 宿主运行库 / 模型工件 分发。


禁止事项 ​

禁止原因
os.system("pip install …") / subprocess 装包污染用户环境、静默失败、无版本控制
私自上传麦克风 / 字幕 / 历史数据隐私红线
修改主程序全局配置 / 其它插件配置越权;只读写 plugins_config/<本插件 id> 与 plugin_data/<本插件 id>
木马 / 挖矿 / 未授权的后台行为直接封禁
改主程序核心词库(src/transbox/ui/locales/*.json)用插件自带 locales/ 增量覆盖
把二进制/权重放进 data/models/那是纯权重目录,用户点「清除缓存」会误伤
把几十 MB 二进制打进 .tbmod上传通道 20 MB 上限

网络 ​

  • 只访问自己声明的 API / 模型源。
  • 建议在 permissions 里声明用到的能力:
json
"permissions": ["net", "clipboard", "hotkey", "window"]
值含义
net访问网络
clipboard读写剪贴板
hotkey注册全局热键
window创建窗口 / 修改窗口属性

permissions 目前用于工坊展示与审计(未来可能做门禁)——声明了不代表自动放行, 但不声明会被视为隐瞒。


凭据处理 ​

  • 让用户在 config_schema 里填("type": "password", "is_secret": true), 不要硬编码私钥、个人路径、开发者机器的绝对路径。
  • Key 存进插件配置即可(宿主按插件隔离);不要把 Key 写进日志或 emit_event 的 payload。

数据存放 ​

内容位置
配置plugins_config/<plugin_id>(宿主管理)
小状态host.get_plugin_kv()
缓存 / 文件 / 参考音频self.get_data_dir() → <安装目录>/data/plugins/<plugin_id>/
模型权重由宿主管理(model_artifacts)

见 配置与私有数据。


安全等级说明 ​

数据类插件(theme / glossary / i18n)相对更安全;脚本类插件(Python)请用户自担风险。 平台对 script 类做人工审核,对 data 类与信任作者可自动上架。

核心团队保留规范演进与上下架的权利。


相关 ​

TransBox - 赋能全人类无界限跨语言交流