建立包结构
创建 manifest.json 与 index.html;settings.json 和 assets 为可选内容。
MYTOOLBOX · DEVELOPER PLATFORM
使用 HTML、CSS 和 JavaScript 构建工作模式卡片,并通过宿主管理的 Bridge、按需授权、独立加密和七天审计接入 MyToolbox 能力。
当前协议Schema 12 · 兼容 Schema 1–11
最小模块是以 .mytoolbox-workmodule 结尾的文件夹。首屏必须在无网络、无 Cookie、未授权环境中仍能显示可理解的 UI。
创建 manifest.json 与 index.html;settings.json 和 assets 为可选内容。
使用永久反向域名 identifier、语义版本、双语名称、SF Symbol 和安全相对入口。
页面在四秒内显示文字、按钮、输入框、图片、SVG 或 Canvas,不以空白等待授权。
使用 window.mytoolbox.request;权限由 operation 决定,manifest 不直接授予能力。
处理拒绝、离线、停止、重载和 mytoolbox-plugin-stop,并取消计时器与请求。
在插件中心检查自动识别权限、运行表面、审计、加密数据和签名身份。
运行期 Cache 与 Data 由宿主建立,不应预先放入发行包。绝对路径、符号链接和 .. 路径穿越会被拒绝。
Example.mytoolbox-workmodule/
├── manifest.json
├── index.html
├── settings.json # 可选,生成原生设置
└── assets/ # 可选,包内静态资源清单描述身份、表面、入口、尺寸、介绍、命令和受控宿主能力;第三方 permissions 自述不会直接获得授权。
{
"schemaVersion": 12,
"identifier": "dev.example.weather",
"version": "1.0.0",
"runtime": "web",
"names": {"zh-Hans": "城市天气", "en": "City Weather"},
"summaries": {"zh-Hans": "当前天气", "en": "Current weather"},
"symbol": "cloud.sun",
"entryPoint": "index.html",
"preferredHeight": 220,
"supportedSurfaces": ["floatingWindow", "menuBar", "horizontalStrip"],
"cardSizing": {"mode": "content", "minHeight": 120, "maxHeight": 520},
"minimumAppVersion": "0.4.0"
}标题栏、排序、置顶、设置、收起、关闭、键盘焦点和媒体终止由 MyToolbox 统一管理。真实 WKWebView 不参与卡片位置动画。
适合纵向信息流和持续可见的轻量工具;内容宽度通常在 330–600pt。
适合短任务和快速查询;非置顶时会随外部点击或 App 失焦收起。
位于 Dock 上方并水平滚动;可提供 260–520pt 宽、160–300pt 高的专用入口。
收到 mytoolbox-plugin-stop 后取消网络、计时器、媒体和后台任务,旧结果不得继续回填。
调用已知 operation 时,宿主在运行期核对总策略、单插件授权、数据锁定和审计;动态拼接或压缩源码不能绕过检查。
const result = await window.mytoolbox.request(
"currency.snapshot",
{}
);clipboard.recent / writeTextclipboardRead / clipboardWrite读取最近剪贴板或写入指定文本
translation.history / executetranslationRead / translationExecute读取翻译历史或执行当前翻译源
currency.snapshotcurrencyRead读取 MyToolbox 本地汇率快照
notes.recentnotesRead读取最近记事,不开放任意改写
favorites.recent / asset.read / importfavoritesRead / favoritesWrite通过 ID 和 Base64 安全代理收藏内容
vault.index / entriesvaultMetadataRead / vaultSecretRead元数据与私密字段使用不同授权
network.fetchnetwork通过无 Cookie、无缓存的宿主临时 HTTPS 会话访问
external.file.readfilePickerRead只读取用户选择或长期授权的单个文件
plugin.window.* / appearance.*nativeWindow / appearance请求宿主管理窗口或受限视觉 token
network.relay.* / packet.*networkRelayControl / packetRelayControl受审计的中转或临时分段流
用户可以允许一次、始终允许或永不允许。永不允许后,插件只能引导用户前往授权管理,不能自行重复弹框。
每个插件使用从软件主密钥与永久插件 ID 经 HKDF 派生的独立 AES-GCM 密钥;JavaScript 永远拿不到文件密钥或真实路径。
await window.mytoolbox.request("plugin.cache.write", {
path: "Responses/latest.json",
base64: encoded
});
await window.mytoolbox.request("plugin.data.write", {
path: "Preferences/state.bin",
base64: encoded
});官方、认证开发者和普通第三方使用不同信任级别,但总开关、全局权限上限、离线模式和单插件授权仍然有效。
每次发布都应作为一次全新的安全边界验证,而不是只确认页面能打开。