一个插件 = 一个完整的 .svfs 包:客户端把插件前端经 svfs://<插件id>/ 直接加载 进 WebView(不落盘、不起端口、不解包),每个插件一个独立 origin(浏览器按 origin 隔离 localStorage)与独立键值存储;快照即版本——升级 = 派生快照的增量 打包,回滚 = 把注册表指针切回旧快照,包文件一个字节不用动。svfs_client 复用 svfs_studio 的主题与基础部件,故两个包一并入库。 按评估结论补齐的 P0 三块: * 会话:桥在"宿主注入的 token 被 401 拒绝"时通知壳层,提示一次并给出一键 「重新登录…」;服务器状态灯把「在线但登录失效」(黄)与「离线」(红)分开, 不再把凭据失效误报成网络不可达; * 凭据:新增 credentials.py——token 不再明文进 settings.json。Windows 走 DPAPI (密文只有当前用户在本机解得开),其它平台走系统凭据库(可选依赖 keyring), 都没有才明文兜底并在「设置 → 登录凭据」如实提示;令牌与签发它的 base_url 绑定(换服务器不会把旧令牌发出去);老字段 auth_token 启动时自动迁移; * 强登录链路保持:启动动画 → 静默校验 → 登录窗 → 主窗口,不可达时离线宽限。 P1/P2:net 超时与重试(只对幂等方法,避免重发 POST 变两单)可配、代理与 自签 CA 可配(loopback 永远直连);诊断日志滚动落盘(1MB×3,可关)——崩溃后 还能回看现场;客户端自更新检查(静态 <base_url>/client/manifest.json,缺失 即静默);插件清单可选 net_hosts 白名单;notify 改走系统托盘(无托盘降级状态栏); 设置界面新增网络 / 登录凭据 / 诊断日志三块。 examples/:示例服务端(FastAPI,含登录、上传即 publish、客户端版本接口)、 Vue 3 插件模板(带浏览器版宿主模拟器)、svfs-plugins-root/ 为模板配套的演示 插件实体。测试:tests/test_client_*.py(纯层 + Qt 层 + 一次真实 WebEngine 冒烟)、 tests/test_studio_*.py、tests/test_plugin_server.py。
57 lines
1.4 KiB
JSON
57 lines
1.4 KiB
JSON
{
|
|
"blob_dir": "blobs",
|
|
"entries": {
|
|
"app.js": {
|
|
"hash": "7bee0271377e51324261839349c6f59d460d3f0cf4a3d556c2d30aa089e3b8d7",
|
|
"mime": "text/javascript",
|
|
"mode": 438,
|
|
"mtime": 1789458308,
|
|
"size": 2955
|
|
},
|
|
"icon.svg": {
|
|
"hash": "a86a4e282266dfc54b728435fc022a9338a41345dc54fb06ca7abd3148f5f1db",
|
|
"mime": "image/svg+xml",
|
|
"mode": 438,
|
|
"mtime": 1789404516,
|
|
"size": 272
|
|
},
|
|
"index.html": {
|
|
"hash": "e87bc4fd4a0c7a3dddc7919a724a45ec84dd9c99d550d5d36fd53a6047c8a701",
|
|
"mime": "text/html",
|
|
"mode": 438,
|
|
"mtime": 1789406426,
|
|
"size": 1564
|
|
},
|
|
"plugin.json": {
|
|
"hash": "4b8c8b29f0fa76262277aa1bb90eafc1dc9951355f4c6182276ab30c6fde54bd",
|
|
"mime": "application/json",
|
|
"mode": 438,
|
|
"mtime": 1789458402,
|
|
"size": 334
|
|
},
|
|
"style.css": {
|
|
"hash": "d4aaec893ca84ba86e7b365ed55d18ac5f902f4090051d59b5d6779b0b657df8",
|
|
"mime": "text/css",
|
|
"mode": 438,
|
|
"mtime": 1789404516,
|
|
"size": 1294
|
|
}
|
|
},
|
|
"format": "svfs-objects",
|
|
"name": "packed_filesystem",
|
|
"shard": 2,
|
|
"snapshot": {
|
|
"created_time": "2026-09-15T14:22:29.122983",
|
|
"digest": "308fe2e39369c94be63fc0f1c638b82bfe69d616ae80a065d8bb1c23e16e4bf6",
|
|
"id": 6,
|
|
"name": "2.0.0-4"
|
|
},
|
|
"stats": {
|
|
"directories": 0,
|
|
"files": 5,
|
|
"objects": 11,
|
|
"objects_stored_size": 9038,
|
|
"total_size": 6419
|
|
},
|
|
"version": 1
|
|
} |