Repository navigation
agents subman skill references workspace data.zh CN
English | 简体中文
业务配置和生成输出保存在同一个私有 GitHub Gist:
- 描述:
SubMan-Data - Workspace ID:
gist:<gist-id> - 配置:
subman.json
浏览器只保留一个绑定,没有工作区列表、切换、本地业务模式、手动同步、本地覆盖 合并、仅绑定或业务 JSON 备份导入。首次连接可显式指定原始 Gist ID;歧义或无效发现 不得自动选择或创建另一份。重连或替换 Token 仍使用原身份,即使它暂时不可访问。
启动后先读最新云端,再启用业务页面。新 Gist 最初只有 subman.bootstrap.json,
首次协调器 mutation 创建空 V2 云端文档,不上传旧浏览器数据。
WorkspaceDocumentV2 包含:
-
version: 2、schemaVersion: 2 - 确定性的
workspaceId、单调递增的revision -
updatedAt、lastMutationId - nodes、subscriptions、aggregates、publish targets、client exports 业务集合
- 每个业务集合的 tombstone
所有 subman.json 变更都经过 WorkspaceCoordinator Durable Object。浏览器和
Server API 创建经过验证的带版本 mutation,都不直接写完整 Gist 状态。公开 REST
路由的鉴权和响应契约保持稳定;Worker 独立于浏览器发现 API 目标,需核对
workspace.gistId。/api/workspaces/:workspaceId/mutations 始终是内部浏览器协议。
每次变更都要求鉴权、成功加载的云端会话及初始化的自动绑定。未解决的发送或修复
证据阻止继续编辑。单个本地事务写入缓存与原始 mutation,然后立即发送。
completion 等待云端结果;只有 remote-committed 能报告成功或结束草稿。
排队、其他标签页接管、重试和确认不确定均保留草稿与原 mutation 身份。
IndexedDB subman-workspace v1 保存缓存、有序日志、重试/阻塞、租约、迁移和历史
队列证据;它不是第二业务数据源。成功时先保存已提交云端文档,再移除队列项。
网络失败保留原 ID 与持久化重试时间。登出清除鉴权、停止发送,但保留绑定和待处理证据。
GitHub 鉴权独立于 IndexedDB:默认使用会话级 sessionStorage;只有明确选择
Remember token 才使用 localStorage。持久化不能保护 Token 免受活动 XSS 窃取。
版本冲突暂停发送并保留可信的最新云端文档。恢复界面可重试原请求,或在确认后丢弃 完整活动队列并加载最新云端,再基于新版本重施编辑。没有本地推送、合并或强制覆盖, 远端 tombstone 必须保留。
云端重载在同一事务中比较预期快照、绑定和完整队列;并发编辑应触发受控重试,不能 被静默丢弃。重新绑定和修复不得将活动绑定替换成另一工作区。历史孤立队列只作为 安全证据,不自动重新绑定或发送。显式丢弃始终处理完整队列。
以下名称不区分大小写地受保护:
subman.jsonsubman.v1.backup.jsonsubman.bootstrap.json
聚合和客户端输出必须使用其他名字。文件管理可以删除输出,不能删除配置或恢复文件。
发现流程可读 V1,但不会重写它。连接已识别 V1 时显示预览;只有未绑定设备可以通过
原始 Gist ID 检查旧版,且检查不创建 Gist。描述必须为 SubMan-Data、文件名必须为
subman.json,文档必须有效。已绑定会话不能借旧版检查选择另一 Gist。
显式迁移使用内部 workspace.migrate,带预览原始字节的 SHA-256。协调器在同一次
经过回读验证的 Gist PATCH 中创建字节完全相同的不可变 subman.v1.backup.json
并写入 V2;业务对象、输出字节、文件名、URL 和时间戳保持不变,不重新发布。
源内容变化后必须重新检查;现有备份不匹配时返回 migration_backup_conflict。
迁移前解决待发送队列和修复证据,只有 remote-committed 才能完成预览。
scripts/audit-workspace.ts 离线读取下载的文件,报告 schema 和数量元数据;
--gist-id 可核对 V2 身份。保留的 --export-v1 以独占方式创建权限为 0600
的规范化运维恢复文件,不提供应用导入或恢复路径。历史
subman-business-configuration 文件缺少 revision/tombstone,不能替换远端
subman.json。诊断也不能恢复业务数据。
审计不访问 GitHub、不验证输出时效,也不从输出重建发布目标。另行授权的运维修复前
保留原云端文件与历史,不先清浏览器证据或批量删除外部文件:失去目标记录的旧输出
仍可能服务客户端。参阅 docs/legacy-workspace-migration.zh-CN.md 和
docs/workspace-v2-operations.zh-CN.md。
- 不添加其他运行时
subman.json写入者。 - 常规恢复不重置 revision 或清除 tombstone。
- 重试和替换 Token 时保留原 mutation ID。
- 需要稳定 raw URL 时保持输出文件名。
- GitHub Token 不进入 mutation、IndexedDB、Durable Object SQLite、响应、诊断或日志。
SubMan Wiki
| English | 简体中文 |
|---|---|
| User guide | 使用指南 |
| Development | 开发指南 |
| Server API | 接口文档 |
| Operations | 运维与恢复 |
| Migration | 旧版迁移 |
| sing-box export | sing-box 导出 |
| CI/CD | CI/CD |
| Roadmap | 路线图 |
| Changelog | 变更记录 |