@agentunion/fastaun-browser 0.4.13 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/CHANGELOG.md +480 -386
  2. package/_packed_docs/CHANGELOG.md +480 -386
  3. package/_packed_docs/INDEX.md +111 -53
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +43 -29
  5. package/_packed_docs/agent.md/SCHEMA.md +2 -0
  6. package/_packed_docs/agent.md/examples/codeagent-claudecode.md +2 -0
  7. package/_packed_docs/agent.md/examples/human-developer.md +2 -0
  8. package/_packed_docs/agent.md/examples/openclaw-lobster.md +2 -0
  9. package/_packed_docs/agent.md/examples/signed-openclaw-lobster.md +2 -0
  10. package/_packed_docs/agent.md//350/277/234/347/250/213agent.md/347/274/223/345/255/230/344/270/216etag/351/200/217/344/274/240/346/226/271/346/241/210.md +2 -0
  11. package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +265 -686
  12. package/_packed_docs/collab-gateway-boundary-test-report.md +164 -0
  13. package/_packed_docs/design/2026-05-22-aun-rpc-trace-enhancement.md +2 -0
  14. package/_packed_docs/design/AUNClient/346/213/206/345/210/206/351/207/215/346/236/204/346/211/247/350/241/214/346/226/271/346/241/210.md +2 -0
  15. package/_packed_docs/design/E2EE_V2/347/256/200/345/214/226/344/270/2721DH/345/212/240Per-AID_Wrap/346/226/271/346/241/210.md +2 -0
  16. package/_packed_docs/design//350/267/250/350/257/255/350/250/200/345/256/271/345/231/250E2E/346/265/213/350/257/225/346/226/271/346/241/210.md +2 -0
  17. package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +2 -0
  18. package/_packed_docs/protocol/00A-/350/256/276/350/256/241/345/216/237/345/210/231-/344/270/272Agent/350/200/214/347/224/237.md +2 -0
  19. package/_packed_docs/protocol/01-/350/272/253/344/273/275/344/270/216/345/207/255/350/257/201/345/215/217/350/256/256-auth.md +2 -0
  20. package/_packed_docs/protocol/02-/350/257/201/344/271/246/344/270/216/344/277/241/344/273/273/344/275/223/347/263/273.md +2 -0
  21. package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +2 -0
  22. package/_packed_docs/protocol/04-Peer-/345/255/220/345/215/217/350/256/256.md +2 -0
  23. package/_packed_docs/protocol/05-Relay-/345/255/220/345/215/217/350/256/256.md +2 -0
  24. package/_packed_docs/protocol/07-/351/224/231/350/257/257/347/240/201/344/270/216/347/212/266/346/200/201/346/234/272.md +2 -0
  25. package/_packed_docs/protocol/08-AUN-E2EE-Group.md +2 -0
  26. package/_packed_docs/protocol/08-AUN-E2EE.md +2 -0
  27. package/_packed_docs/protocol/09-/345/256/211/345/205/250/350/200/203/350/231/221.md +2 -0
  28. package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +28 -85
  29. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +49 -0
  30. package/_packed_docs/protocol/12-Stream-/345/255/220/345/215/217/350/256/256.md +2 -0
  31. package/_packed_docs/protocol/13-Agent/350/241/214/344/270/272/350/247/204/350/214/203.md +2 -0
  32. package/_packed_docs/protocol/14-/344/272/244/344/272/222/346/234/272/345/210/266-/345/223/215/345/272/224/346/250/241/345/274/217/344/270/216/350/207/252/344/270/273/346/250/241/345/274/217.md +2 -0
  33. package/_packed_docs/protocol/15-/347/246/273/347/272/277/346/216/250/351/200/201/351/200/232/347/237/245/345/215/217/350/256/256.md +2 -0
  34. package/_packed_docs/protocol/README.md +2 -0
  35. package/_packed_docs/protocol/agent.md/SCHEMA.md +2 -0
  36. package/_packed_docs/protocol/agent.md/examples/codeagent-claudecode.md +2 -0
  37. package/_packed_docs/protocol/agent.md/examples/human-developer.md +2 -0
  38. package/_packed_docs/protocol/agent.md/examples/openclaw-lobster.md +2 -0
  39. package/_packed_docs/protocol/aun-docs-guide.md +2 -0
  40. package/_packed_docs/protocol/index.md +3 -1
  41. package/_packed_docs/protocol//350/215/211/346/241/210-agent.md/347/255/276/345/220/215/345/215/217/350/256/256.md +2 -0
  42. package/_packed_docs/protocol//350/215/211/346/241/210-/346/213/222/347/273/235/344/277/241/345/217/267/345/215/217/350/256/256.md +2 -0
  43. package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +2 -0
  44. package/_packed_docs/protocol//351/231/204/345/275/225B-/346/211/251/345/261/225/346/200/247/346/214/207/345/215/227.md +2 -0
  45. package/_packed_docs/protocol//351/231/204/345/275/225C-/347/247/201/351/222/245/347/256/241/347/220/206/344/270/216/350/272/253/344/273/275/346/201/242/345/244/215.md +2 -0
  46. package/_packed_docs/protocol//351/231/204/345/275/225D-Root_CA_/346/262/273/347/220/206/346/234/272/345/210/266.md +2 -0
  47. package/_packed_docs/protocol//351/231/204/345/275/225E-Root_CA_/345/207/206/345/205/245/346/265/201/347/250/213.md +2 -0
  48. package/_packed_docs/protocol//351/231/204/345/275/225F-Issuer_CA_/347/224/263/350/257/267/346/265/201/347/250/213.md +2 -0
  49. package/_packed_docs/protocol//351/231/204/345/275/225G-AID_/345/255/244/345/204/277/351/242/204/351/230/262/344/270/216/346/225/221/346/217/264/346/234/272/345/210/266.md +2 -0
  50. package/_packed_docs/protocol//351/231/204/345/275/225H-Identity/346/234/215/345/212/241/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
  51. package/_packed_docs/protocol//351/231/204/345/275/225I-/350/267/250/345/237/237/346/266/210/346/201/257/350/267/257/347/224/261/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
  52. package/_packed_docs/protocol//351/231/204/345/275/225J-/345/256/242/346/210/267/347/253/257/346/216/245/345/205/245/347/244/272/344/276/213.md +2 -0
  53. package/_packed_docs/protocol//351/231/204/345/275/225K-Agent_Web/345/217/221/347/216/260/345/215/217/350/256/256.md +2 -0
  54. package/_packed_docs/protocol//351/231/204/345/275/225L-E2EE/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
  55. package/_packed_docs/protocol//351/231/204/345/275/225M-JWT/350/256/244/350/257/201/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
  56. package/_packed_docs/protocol//351/231/204/345/275/225N-/345/210/206/345/270/203/345/274/217Trace/345/215/217/350/256/256.md +2 -0
  57. package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +2 -0
  58. package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +2 -0
  59. package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +2 -0
  60. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +2 -0
  61. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +2 -0
  62. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +283 -267
  63. package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +4 -1
  64. package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +2 -0
  65. package/_packed_docs/sdk/09-collab-rpc-manual.md +550 -0
  66. package/_packed_docs/sdk/09-custody-api-manual.md +2 -0
  67. package/_packed_docs/sdk/09-group-rpc-manual.md +197 -443
  68. package/_packed_docs/sdk/09-message-rpc-manual.md +2 -0
  69. package/_packed_docs/sdk/09-meta-rpc-manual.md +2 -0
  70. package/_packed_docs/sdk/09-payload-reference.md +2 -0
  71. package/_packed_docs/sdk/09-proxy-rpc-manual.md +2 -0
  72. package/_packed_docs/sdk/09-storage-rpc-manual.md +952 -279
  73. package/_packed_docs/sdk/09-stream-rpc-manual.md +2 -0
  74. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +33 -20
  75. package/_packed_docs/sdk/E2EE_V2/346/266/210/346/201/257/351/200/232/344/277/241/346/227/266/345/272/217/345/233/276.md +2 -0
  76. package/_packed_docs/sdk/INDEX.md +46 -29
  77. package/_packed_docs/sdk/Notify/351/200/232/347/237/245/346/226/271/346/241/210.md +2 -0
  78. package/_packed_docs/sdk/README.md +17 -15
  79. package/dist/aid-store.d.ts +25 -0
  80. package/dist/aid-store.d.ts.map +1 -1
  81. package/dist/aid-store.js +89 -8
  82. package/dist/aid-store.js.map +1 -1
  83. package/dist/bundle.js +19128 -16784
  84. package/dist/client/delivery.d.ts +2 -0
  85. package/dist/client/delivery.d.ts.map +1 -1
  86. package/dist/client/delivery.js +52 -8
  87. package/dist/client/delivery.js.map +1 -1
  88. package/dist/client/rpc-pipeline.d.ts +1 -0
  89. package/dist/client/rpc-pipeline.d.ts.map +1 -1
  90. package/dist/client/rpc-pipeline.js +70 -33
  91. package/dist/client/rpc-pipeline.js.map +1 -1
  92. package/dist/client.d.ts +31 -0
  93. package/dist/client.d.ts.map +1 -1
  94. package/dist/client.js +282 -20
  95. package/dist/client.js.map +1 -1
  96. package/dist/collab/client.d.ts +39 -0
  97. package/dist/collab/client.d.ts.map +1 -0
  98. package/dist/collab/client.js +124 -0
  99. package/dist/collab/client.js.map +1 -0
  100. package/dist/collab/errors.d.ts +16 -0
  101. package/dist/collab/errors.d.ts.map +1 -0
  102. package/dist/collab/errors.js +60 -0
  103. package/dist/collab/errors.js.map +1 -0
  104. package/dist/collab/index.d.ts +4 -0
  105. package/dist/collab/index.d.ts.map +1 -0
  106. package/dist/collab/index.js +4 -0
  107. package/dist/collab/index.js.map +1 -0
  108. package/dist/collab/types.d.ts +111 -0
  109. package/dist/collab/types.d.ts.map +1 -0
  110. package/dist/collab/types.js +2 -0
  111. package/dist/collab/types.js.map +1 -0
  112. package/dist/crypto.d.ts +6 -0
  113. package/dist/crypto.d.ts.map +1 -1
  114. package/dist/crypto.js +6 -0
  115. package/dist/crypto.js.map +1 -1
  116. package/dist/errors.d.ts.map +1 -1
  117. package/dist/errors.js +16 -1
  118. package/dist/errors.js.map +1 -1
  119. package/dist/facades.d.ts +89 -0
  120. package/dist/facades.d.ts.map +1 -0
  121. package/dist/facades.js +228 -0
  122. package/dist/facades.js.map +1 -0
  123. package/dist/group-fs.d.ts +103 -0
  124. package/dist/group-fs.d.ts.map +1 -0
  125. package/dist/group-fs.js +496 -0
  126. package/dist/group-fs.js.map +1 -0
  127. package/dist/group-resources.d.ts +98 -0
  128. package/dist/group-resources.d.ts.map +1 -0
  129. package/dist/group-resources.js +635 -0
  130. package/dist/group-resources.js.map +1 -0
  131. package/dist/index.d.ts +4 -1
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +6 -0
  134. package/dist/index.js.map +1 -1
  135. package/dist/register-flow.d.ts +1 -0
  136. package/dist/register-flow.d.ts.map +1 -1
  137. package/dist/register-flow.js +3 -0
  138. package/dist/register-flow.js.map +1 -1
  139. package/dist/service-proxy.d.ts +1 -0
  140. package/dist/service-proxy.d.ts.map +1 -1
  141. package/dist/service-proxy.js +15 -3
  142. package/dist/service-proxy.js.map +1 -1
  143. package/dist/storage/errors.d.ts +28 -0
  144. package/dist/storage/errors.d.ts.map +1 -0
  145. package/dist/storage/errors.js +65 -0
  146. package/dist/storage/errors.js.map +1 -0
  147. package/dist/storage/index.d.ts +2 -0
  148. package/dist/storage/index.d.ts.map +1 -0
  149. package/dist/storage/index.js +2 -0
  150. package/dist/storage/index.js.map +1 -0
  151. package/dist/storage/lowlevel.d.ts +314 -0
  152. package/dist/storage/lowlevel.d.ts.map +1 -0
  153. package/dist/storage/lowlevel.js +460 -0
  154. package/dist/storage/lowlevel.js.map +1 -0
  155. package/dist/storage/types.d.ts +59 -0
  156. package/dist/storage/types.d.ts.map +1 -0
  157. package/dist/storage/types.js +113 -0
  158. package/dist/storage/types.js.map +1 -0
  159. package/dist/storage/vfs.d.ts +144 -0
  160. package/dist/storage/vfs.d.ts.map +1 -0
  161. package/dist/storage/vfs.js +403 -0
  162. package/dist/storage/vfs.js.map +1 -0
  163. package/dist/tools/cross-sdk-agent.d.ts +3 -0
  164. package/dist/tools/cross-sdk-agent.d.ts.map +1 -0
  165. package/dist/tools/cross-sdk-agent.js +1089 -0
  166. package/dist/tools/cross-sdk-agent.js.map +1 -0
  167. package/dist/transport.d.ts +3 -0
  168. package/dist/transport.d.ts.map +1 -1
  169. package/dist/transport.js +33 -13
  170. package/dist/transport.js.map +1 -1
  171. package/dist/version.d.ts +1 -1
  172. package/dist/version.d.ts.map +1 -1
  173. package/dist/version.js +1 -1
  174. package/dist/version.js.map +1 -1
  175. package/package.json +44 -44
@@ -61,7 +61,8 @@ except AUNError as e:
61
61
  | -32009 | 版本冲突 | `VersionConflictError` |
62
62
  | -32010 / -32011 / -32013 | 会话错误 | `SessionError` |
63
63
  | -32051 | 客户端签名验证失败 | `ClientSignatureError`(继承自 `ValidationError`) |
64
- | -32029 | 请求限流 | `RateLimitError` |
64
+ | -32029 | 请求限流(目标/联邦维度) | `RateLimitError` |
65
+ | -32429 | 请求限流(Gateway 入口背压,排队超时) | `RateLimitError` |
65
66
  | -32600 / -32601 / -32602 | JSON-RPC 参数错误 | `ValidationError` |
66
67
  | -32040 ~ -32044 | E2EE 群组错误 | `E2EEError` 子类 |
67
68
  | 4090 | 身份冲突 | `IdentityConflictError` |
@@ -149,3 +150,5 @@ if not client.can_send:
149
150
  ### E2EE 解密失败
150
151
 
151
152
  P2P 或群消息解密失败通常由 prekey 不匹配、AAD 篡改、密文损坏或群 epoch 不一致引起。SDK 会发布 `message.undecryptable` / `group.message_undecryptable` 事件,应用可记录并继续处理其他消息。
153
+
154
+
@@ -115,3 +115,5 @@ SDK 内部自动管理 RPC 并发,应用层无需配置:
115
115
  - RPC 方法手册:`09-*-rpc-manual.md`
116
116
  - E2EE 说明:[05-E2EE加密通信.md](05-E2EE加密通信.md)
117
117
  - API 手册:[06-API手册.md](06-API手册.md)
118
+
119
+
@@ -0,0 +1,550 @@
1
+ # 协作 — RPC Manual
2
+
3
+ > collab 层是「锚定在某块存储上的自包含版本化目录」。每个协作文档有独立版本线(`<doc>@current` 软链 + 台账),整目录有标签线(公开 API 为 `collab.tag.*`;内部仍使用 `@snapshot` 软链和 `.collab-snapshots/` manifest)。
4
+ >
5
+ > **服务端编排**:collab 编排已并入 storage 服务进程,`collab.*` RPC handler 与 `storage.*` 并列注册。collab handler 以调用者身份(Gateway 注入的 `_auth.aid`)直调 storage 原语,无特权通道。
6
+ >
7
+ > **授权 = 存储 ACL**:谁能 `commit` = 谁对 `collab_root` 有写权限(`storage.set_acl`)。无独立发起人特权。
8
+ >
9
+ > SDK 侧通过 `client.collab` 访问(`CollabClient`),每个命令 1:1 映射一条 `collab.*` RPC。
10
+
11
+ ## 方法索引
12
+
13
+ ### 文档版本线
14
+
15
+ | 方法 | 说明 |
16
+ |------|------|
17
+ | [collab.ls-files](#collabls-files) | 列出协作根下所有文档 |
18
+ | [collab.create](#collabcreate) | 创建协作文档(首版本) |
19
+ | [collab.show](#collabshow) | 读当前或指定版本内容 |
20
+ | [collab.commit](#collabcommit) | 提交新版本(乐观锁 CAS) |
21
+ | [collab.merge](#collabmerge) | 三方合并(服务端 diff3) |
22
+ | [collab.log](#collablog) | 查版本台账 |
23
+ | [collab.diff](#collabdiff) | 比较两版本 |
24
+ | [collab.revert](#collabrevert) | 以历史版本内容提交一个新版本 |
25
+ | [collab.prune](#collabprune) | 清理某文档的历史版本文件 |
26
+
27
+ ### 运维、备份与迁移
28
+
29
+ | 方法 | 说明 |
30
+ |------|------|
31
+ | [collab.gc](#collabgc) | 扫描不可达版本文件并可选删除 |
32
+ | [collab.reflog](#collabreflog) | 查看协作审计日志 |
33
+ | [collab.clone](#collabclone) | 深拷贝整个协作到新位置(可选 reroot) |
34
+
35
+ ### 目录级标签(Tag)
36
+
37
+ | 方法 | 说明 |
38
+ |------|------|
39
+ | [collab.tag.create](#collabtag.create) | 打目录标签(语义化版本) |
40
+ | [collab.tag.list](#collabtag.list) | 列出标签 |
41
+ | [collab.tag.show](#collabtag.show) | 查看标签详情 |
42
+ | [collab.tag.diff](#collabtag.diff) | 比较两标签 |
43
+ | [collab.tag.restore](#collabtag.restore) | 回滚到某标签(forward-only) |
44
+ | [collab.tag.rm](#collabtag.rm) | 删除单个标签 |
45
+ | [collab.tag.prune](#collabtag.prune) | 批量清理旧标签 |
46
+
47
+ ### 群内发现
48
+
49
+ | 方法 | 说明 |
50
+ |------|------|
51
+ | [collab.ls-remote](#collabls-remote) | 列出群内已登记的协作根 |
52
+ | [collab.unregister](#collabunregister) | 注销注册表中的协作根条目 |
53
+
54
+ ---
55
+
56
+ ## 核心概念
57
+
58
+ ### 协作根目录结构
59
+
60
+ ```
61
+ <aid>:<collab_root>/
62
+ ├── .collab ← 发现锚点(YAML frontmatter: name/authority/root)
63
+ ├── <doc>@current ← 软链 → .collab-versions/<doc>/<author>/vN
64
+ ├── <doc>@ledger ← 版本台账
65
+ ├── @snapshot ← 标签头软链 → .collab-snapshots/<semver>.json
66
+ ├── .collab-versions/<doc>/<author>/v1…vN ← 不可变版本文件(write-once)
67
+ └── .collab-snapshots/<semver>.json ← 不可变标签 manifest
68
+ ```
69
+
70
+ - **`collab_root` 参数格式**:`<aid>:<path>`(如 `alice.aid.pub:/projects/myapp`),来自 `.collab` 文件的 `root` 字段或上层响应。
71
+ - **响应一律回吐相对 `collab_root` 的内部 target 拼成的绝对 `<aid>:<path>`**——agent 原样用于下一条命令,无需拼接。
72
+
73
+ ### 乐观锁(commit)
74
+
75
+ 1. `put_object`(写新版本文件,永不失败,数据先存下)。
76
+ 2. 同一事务:`atomic_repoint(<doc>@current, new_target, expected_version=onto)` + 台账追加。
77
+ 3. CAS 成功 → version+1;CAS 失败 → 整事务回滚,返回 `{ok:false, current_version, hint}`。
78
+
79
+ `onto` 来源:`collab.show` 响应的 `version` 字段;merge 后用 commit 失败响应的 `current_version`。
80
+
81
+ ### 数据不变量
82
+
83
+ - 版本文件写一次永不覆盖;删指针不删数据。
84
+ - 回滚是 **forward-only**:restore 不回退 version 计数器,而是以旧内容写新版本,保证 version 单调递增。
85
+
86
+ ---
87
+
88
+ ## collab.ls-files
89
+
90
+ 列出协作根下所有协作文档(含当前 version)。
91
+
92
+ ### 参数
93
+
94
+ | 参数 | 类型 | 必填 | 说明 |
95
+ |------|------|------|------|
96
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
97
+
98
+ ### 响应
99
+
100
+ 返回文档数组,每项:
101
+
102
+ | 字段 | 类型 | 说明 |
103
+ |------|------|------|
104
+ | `doc` | string | 文档当前显示名 |
105
+ | `version` | integer | 当前版本号 |
106
+ | `author` | string | 最新版本作者 AID |
107
+ | `current_target` | string | 当前版本文件绝对路径 `<aid>:<path>` |
108
+
109
+ ### 示例
110
+
111
+ ```python
112
+ docs = await client.collab.ls_files("alice.aid.pub:/projects/myapp")
113
+ ```
114
+
115
+ ---
116
+
117
+ ## collab.create
118
+
119
+ 创建协作文档,写入首版本(version=1)。
120
+
121
+ ### 参数
122
+
123
+ | 参数 | 类型 | 必填 | 说明 |
124
+ |------|------|------|------|
125
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
126
+ | `doc` | string | 是 | 文档名 |
127
+ | `source` | string | 是 | 初始内容:本地文件路径或 `<aid>:<path>` |
128
+
129
+ ### 响应
130
+
131
+ | 字段 | 类型 | 说明 |
132
+ |------|------|------|
133
+ | `version` | integer | 固定为 `1` |
134
+ | `current_target` | string | 版本文件绝对路径 |
135
+
136
+ ---
137
+
138
+ ## collab.show
139
+
140
+ 读取文档当前内容或指定历史版本内容。`rev` 为空时返回当前版本;`rev` 有值时返回该历史版本。
141
+
142
+ ### 参数
143
+
144
+ | 参数 | 类型 | 必填 | 说明 |
145
+ |------|------|------|------|
146
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
147
+ | `doc` | string | 是 | 文档名 |
148
+ | `rev` | integer | 否 | 指定历史版本号;不传则读取当前版本 |
149
+
150
+ ### 响应
151
+
152
+ | 字段 | 类型 | 说明 |
153
+ |------|------|------|
154
+ | `content` | string | base64 编码的当前内容 |
155
+ | `version` | integer | 当前或指定版本号(**commit 的 onto 来源**) |
156
+ | `author` | string | 当前版本作者 AID |
157
+ | `anchor` | string | 台账锚点(读取历史版本时返回) |
158
+ | `current_target` | string | 当前版本文件绝对路径(读取当前版本时返回) |
159
+
160
+ ---
161
+
162
+ ## collab.commit
163
+
164
+ 提交新版本,乐观锁 CAS 切换 `@current`。
165
+
166
+ ### 参数
167
+
168
+ | 参数 | 类型 | 必填 | 说明 |
169
+ |------|------|------|------|
170
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
171
+ | `doc` | string | 是 | 文档名 |
172
+ | `source` | string | 是 | 新内容:本地路径或 `<aid>:<path>` |
173
+ | `onto` | integer | 是 | 基线版本号(来自 `collab.show` 的 `version`) |
174
+
175
+ ### 响应
176
+
177
+ **成功**:
178
+
179
+ | 字段 | 类型 | 说明 |
180
+ |------|------|------|
181
+ | `ok` | boolean | `true` |
182
+ | `version` | integer | 新版本号(onto+1) |
183
+ | `current_target` | string | 新版本文件绝对路径 |
184
+
185
+ **撞版本失败**(数据已安全保存,需 merge 后重提):
186
+
187
+ | 字段 | 类型 | 说明 |
188
+ |------|------|------|
189
+ | `ok` | boolean | `false` |
190
+ | `current_version` | integer | 当前权威版本号(**merge 后 commit 用此作新 onto**) |
191
+ | `current_target` | string | 当前权威版本文件绝对路径 |
192
+ | `hint` | string | 后端格式化好的下一步命令行字符串 |
193
+
194
+ ### 示例
195
+
196
+ ```python
197
+ cur = await client.collab.show(root, "design.md")
198
+ res = await client.collab.commit(root, "design.md", "./design.md", cur["version"])
199
+ if not res["ok"]:
200
+ await client.collab.merge(root, "design.md", "./design.md", cur["version"])
201
+ res = await client.collab.commit(root, "design.md", "./design.md", res["current_version"])
202
+ ```
203
+
204
+ ---
205
+
206
+ ## collab.merge
207
+
208
+ 三方合并(服务端 diff3,四语言 SDK 不实现 diff3)。合并 base 版本、本地 source、当前 `@current` 三方内容。
209
+
210
+ ### 参数
211
+
212
+ | 参数 | 类型 | 必填 | 说明 |
213
+ |------|------|------|------|
214
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
215
+ | `doc` | string | 是 | 文档名 |
216
+ | `source` | string | 是 | 本地草稿内容(ours):本地路径或 `<aid>:<path>` |
217
+ | `onto` | integer | 是 | 共同祖先版本号 |
218
+
219
+ ### 响应
220
+
221
+ | 字段 | 类型 | 说明 |
222
+ |------|------|------|
223
+ | `content` | string | base64 编码的合并结果 |
224
+ | `conflicts` | boolean | 是否含冲突标记(`<<<<<<<` / `=======` / `>>>>>>>`) |
225
+
226
+ `conflicts=true` 时需人工编辑消解冲突后再 commit。
227
+
228
+ ---
229
+
230
+ ## collab.log
231
+
232
+ 查文档版本台账。
233
+
234
+ ### 参数
235
+
236
+ | 参数 | 类型 | 必填 | 说明 |
237
+ |------|------|------|------|
238
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
239
+ | `doc` | string | 是 | 文档名(按物理目录名索引,改显示名后仍按原名查) |
240
+
241
+ ### 响应
242
+
243
+ 返回版本数组,每项 `{version, author, target, time}`,`target` 为完整 `<aid>:<path>`。
244
+
245
+ ---
246
+
247
+ ## collab.diff
248
+
249
+ 比较同一文档的两个版本,返回 unified diff 文本。
250
+
251
+ ### 参数
252
+
253
+ | 参数 | 类型 | 必填 | 说明 |
254
+ |------|------|------|------|
255
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
256
+ | `doc` | string | 是 | 文档名 |
257
+ | `from` | integer | 是 | 起始版本号(SDK 形参 `v_from`) |
258
+ | `to` | integer | 是 | 目标版本号(SDK 形参 `v_to`) |
259
+
260
+ ### 响应
261
+
262
+ | 字段 | 类型 | 说明 |
263
+ |------|------|------|
264
+ | `diff` | string | unified diff 文本 |
265
+
266
+ ---
267
+
268
+ ## collab.revert
269
+
270
+ 以指定历史版本的内容提交一个新版本。revert 不回退版本号,也不直接改写历史文件;它读取目标版本内容,以当前版本为 `onto` 再走普通 `commit` 流程,因此仍保持 forward-only 不变量。
271
+
272
+ ### 参数
273
+
274
+ | 参数 | 类型 | 必填 | 默认 | 说明 |
275
+ |------|------|------|------|------|
276
+ | `collab_root` | string | 是 | — | 协作根 `<aid>:<path>` |
277
+ | `doc` | string | 是 | — | 文档名 |
278
+ | `rev` | integer | 是 | — | 要恢复内容的历史版本号 |
279
+ | `message` | string | 否 | `""` | 记录到台账/审计日志的说明 |
280
+
281
+ ### 响应
282
+
283
+ 返回普通 `collab.commit` 的响应字段;如果当前版本已经等于目标版本,返回包含 `no_change: true` 的结果。
284
+
285
+ ---
286
+
287
+ ## collab.prune
288
+
289
+ 清理某文档的历史版本文件(保留台账与当前版本,回收旧 blob)。
290
+
291
+ ### 参数
292
+
293
+ | 参数 | 类型 | 必填 | 说明 |
294
+ |------|------|------|------|
295
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
296
+ | `doc` | string | 是 | 文档名 |
297
+
298
+ ### 响应
299
+
300
+ | 字段 | 类型 | 说明 |
301
+ |------|------|------|
302
+ | `pruned` | integer | 清理的版本文件数 |
303
+
304
+ ---
305
+
306
+ ## collab.gc
307
+
308
+ 目录级垃圾扫描。服务端会扫描 `.collab-versions`,从台账、当前指针和标签 manifest 标记可达版本文件;未被引用的版本文件计为 garbage。默认 `dry_run=true` 只返回统计,不删除。
309
+
310
+ ### 参数
311
+
312
+ | 参数 | 类型 | 必填 | 默认 | 说明 |
313
+ |------|------|------|------|------|
314
+ | `collab_root` | string | 是 | — | 协作根 `<aid>:<path>` |
315
+ | `dry_run` | boolean | 否 | `true` | 只扫描不删除 |
316
+
317
+ ### 响应
318
+
319
+ | 字段 | 类型 | 说明 |
320
+ |------|------|------|
321
+ | `scanned` | integer | 扫描到的版本文件数 |
322
+ | `reachable` | integer | 可达版本文件数 |
323
+ | `garbage` | integer | 不可达版本文件数 |
324
+ | `deleted` | integer | 实际删除数量;`dry_run=true` 时为 0 |
325
+ | `freed_bytes` | integer | 实际释放字节数 |
326
+
327
+ ---
328
+
329
+ ## collab.reflog
330
+
331
+ 读取协作审计日志,用于排查 commit/merge/revert/tag 等操作历史。可按文档过滤并限制条数。
332
+
333
+ ### 参数
334
+
335
+ | 参数 | 类型 | 必填 | 默认 | 说明 |
336
+ |------|------|------|------|------|
337
+ | `collab_root` | string | 是 | — | 协作根 `<aid>:<path>` |
338
+ | `doc` | string | 否 | — | 仅查看某个文档的日志 |
339
+ | `limit` | integer | 否 | `100` | 返回条数上限 |
340
+
341
+ ### 响应
342
+
343
+ 返回日志数组,每项包含 `seq`、`action`、`requester`、`doc`、`version`、`onto`、`target`、`status`、`error_code`、`error_msg`、`metadata`、`timestamp` 等字段。
344
+
345
+ ---
346
+
347
+ ## collab.clone
348
+
349
+ 克隆整个协作到新位置。默认 `reroot=false` 时做纯子树拷贝(用于备份);`reroot=true` 时在目标根重建并让目标 owner 成为新授权方(用于迁移 / 换主理人)。
350
+
351
+ ### 参数
352
+
353
+ | 参数 | 类型 | 必填 | 说明 |
354
+ |------|------|------|------|
355
+ | `src` | string | 是 | 源协作根 `<aid>:<path>` |
356
+ | `dest` | string | 是 | 目标路径 `<aid>:<path>` |
357
+ | `reroot` | boolean | 否 | 默认 `false`;`true` 表示重建 root 和授权方 |
358
+
359
+ ### 响应
360
+
361
+ | 字段 | 类型 | 说明 |
362
+ |------|------|------|
363
+ | `ok` | boolean | `true` |
364
+ | `dest` | string | 目标路径 |
365
+ | `copied_objects` | integer | 拷贝的对象数 |
366
+ | `new_root` | string | `reroot=true` 时的新协作根 |
367
+ | `new_authority_aid` | string | `reroot=true` 时的新授权方 AID(= dest 存储 owner) |
368
+
369
+ > collabRoot 整体改名/迁移用 `collab.clone(..., reroot=true)`,不要用 `storage.fs.rename`:后者在对象存储上可能是 O(n) copy+delete,且会让 `.collab` 的 `root` 字段失效。
370
+
371
+ ---
372
+
373
+ ## collab.tag.create
374
+
375
+ 打目录级标签。语义化版本自动判定:doc 集合变化 → minor;仅内容变化 → patch;`major=true` 强制 major;无变化 → 报错。
376
+
377
+ ### 参数
378
+
379
+ | 参数 | 类型 | 必填 | 默认 | 说明 |
380
+ |------|------|------|------|------|
381
+ | `collab_root` | string | 是 | — | 协作根 `<aid>:<path>` |
382
+ | `message` | string | 否 | `""` | 标签说明 |
383
+ | `major` | boolean | 否 | `false` | 强制 major bump |
384
+
385
+ ### 响应
386
+
387
+ | 字段 | 类型 | 说明 |
388
+ |------|------|------|
389
+ | `version` | string | 新标签语义化版本(如 `2.3.1`) |
390
+ | `bump` | string | 本次 bump 级别(`major`/`minor`/`patch`) |
391
+ | `changed` | array | 变化的文档名列表 |
392
+
393
+ ---
394
+
395
+ ## collab.tag.list
396
+
397
+ 列出所有标签。
398
+
399
+ ### 参数
400
+
401
+ | 参数 | 类型 | 必填 | 说明 |
402
+ |------|------|------|------|
403
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
404
+
405
+ ### 响应
406
+
407
+ 返回标签数组,每项 `{version, message, created_at, ...}`,按语义化版本升序。
408
+
409
+ ---
410
+
411
+ ## collab.tag.show
412
+
413
+ 查看单个标签详情(含文档清单 entries)。
414
+
415
+ ### 参数
416
+
417
+ | 参数 | 类型 | 必填 | 说明 |
418
+ |------|------|------|------|
419
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
420
+ | `version` | string | 是 | 标签版本(如 `2.3.1`) |
421
+
422
+ ### 响应
423
+
424
+ 标签 manifest,含 `collab_root`、`version` 与 `entries`(每项含 `doc`/`version`/`current_target` 绝对路径)。
425
+
426
+ ---
427
+
428
+ ## collab.tag.diff
429
+
430
+ 比较两标签的文档版本差异。
431
+
432
+ ### 参数
433
+
434
+ | 参数 | 类型 | 必填 | 说明 |
435
+ |------|------|------|------|
436
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
437
+ | `version_a` | string | 是 | 标签 A 版本 |
438
+ | `version_b` | string | 是 | 标签 B 版本 |
439
+
440
+ ### 响应
441
+
442
+ 返回新增/删除/版本变化的文档清单。
443
+
444
+ ---
445
+
446
+ ## collab.tag.restore
447
+
448
+ 回滚到某标签。**forward-only**:不回退 version 计数器,而是对每个文档以标签中的旧内容写一个新版本(vN+1),最后以回滚后状态自动创建新标签。
449
+
450
+ ### 参数
451
+
452
+ | 参数 | 类型 | 必填 | 默认 | 说明 |
453
+ |------|------|------|------|------|
454
+ | `collab_root` | string | 是 | — | 协作根 `<aid>:<path>` |
455
+ | `version` | string | 是 | — | 要回滚到的标签版本 |
456
+ | `message` | string | 否 | `""` | 回滚说明 |
457
+
458
+ ### 响应
459
+
460
+ | 字段 | 类型 | 说明 |
461
+ |------|------|------|
462
+ | `restored_from` | string | 回滚来源标签版本 |
463
+ | `new_snapshot_version` | string | 回滚后自动创建的新标签版本(历史字段名保留为 `new_snapshot_version`) |
464
+ | `warnings` | array | 回滚过程中的告警(如某文档被他人并发提交而跳过) |
465
+
466
+ ---
467
+
468
+ ## collab.tag.rm
469
+
470
+ 删除单个标签。
471
+
472
+ ### 参数
473
+
474
+ | 参数 | 类型 | 必填 | 说明 |
475
+ |------|------|------|------|
476
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
477
+ | `version` | string | 是 | 要删除的标签版本 |
478
+
479
+ ### 响应
480
+
481
+ | 字段 | 类型 | 说明 |
482
+ |------|------|------|
483
+ | `ok` | boolean | `true` |
484
+
485
+ ---
486
+
487
+ ## collab.tag.prune
488
+
489
+ 批量清理旧标签。
490
+
491
+ ### 参数
492
+
493
+ | 参数 | 类型 | 必填 | 说明 |
494
+ |------|------|------|------|
495
+ | `collab_root` | string | 是 | 协作根 `<aid>:<path>` |
496
+ | `before` | integer\|string | 否 | 清理此时间点之前的标签 |
497
+ | `keep_last` | integer | 否 | 保留最近 N 个标签 |
498
+
499
+ ### 响应
500
+
501
+ | 字段 | 类型 | 说明 |
502
+ |------|------|------|
503
+ | `pruned` | integer | 清理的标签数 |
504
+
505
+ ---
506
+
507
+ ## collab.ls-remote
508
+
509
+ 列出群内已登记的协作根(群 owner 优先查 `collab_registry`,免 O(n) 全树扇出)。
510
+
511
+ ### 参数
512
+
513
+ | 参数 | 类型 | 必填 | 说明 |
514
+ |------|------|------|------|
515
+ | `group_aid` | string | 是 | 群 AID |
516
+
517
+ ### 响应
518
+
519
+ 返回协作根数组,每项含 `collab_root` 等登记信息。
520
+
521
+ ---
522
+
523
+ ## collab.unregister
524
+
525
+ 注销注册表中的协作根条目(不删数据,仅去登记)。
526
+
527
+ ### 参数
528
+
529
+ | 参数 | 类型 | 必填 | 说明 |
530
+ |------|------|------|------|
531
+ | `group_aid` | string | 是 | 群 AID |
532
+ | `collab_root` | string | 是 | 要注销的协作根 `<aid>:<path>` |
533
+
534
+ ### 响应
535
+
536
+ | 字段 | 类型 | 说明 |
537
+ |------|------|------|
538
+ | `ok` | boolean | `true` |
539
+
540
+ ---
541
+
542
+ ## 错误码
543
+
544
+ | code | 说明 |
545
+ |------|------|
546
+ | -32002 | 服务暂不可用(数据库未连接) |
547
+ | -32004 | 权限拒绝(requester 对 collab_root 无写权限) |
548
+ | -32008 | 协作文档 / 版本 / 标签不存在 |
549
+ | -32009 | 版本冲突(commit 撞版本,见 `ok:false` 响应;tag create 时标签头已移动) |
550
+ | -32000 | 通用错误(参数校验失败、源内容读取失败、无变更可打标签等) |
@@ -444,3 +444,5 @@ Content-Type: application/json
444
444
  - 手机号不是 AID 身份,只是恢复凭据。
445
445
  - 服务端被攻破时,攻击者最多拿到证书和加密私钥密文;密文强度取决于客户端加密算法、用户密码和 KDF 参数。
446
446
  - 用户忘记加密密码时,服务端无法解密私钥,也不应提供后门恢复。
447
+
448
+