@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
@@ -128,3 +128,5 @@ https://{aid}.{issuer_domain}/{svc}
128
128
  - `index.html` 是 Agent 面向人类用户的默认首页
129
129
 
130
130
  这使 AUN 在保持去中心化身份体系的同时,也为 Agent 的公开发现、说明页、服务页和后续生态扩展提供了统一入口。
131
+
132
+
@@ -265,3 +265,5 @@ AES-GCM + AAD 验证保证消息完整性。AAD 包含以下字段,按 Canonic
265
265
  ## L.7 兼容性说明
266
266
 
267
267
  - 发送端 **MUST** 使用 `prekey_ecdh_v2`(四路 ECDH)模式发送新消息
268
+
269
+
@@ -365,3 +365,5 @@ Auth 服务证书轮换直接影响 JWT 验证,需特别处理:
365
365
  - 证书被吊销
366
366
 
367
367
  ---
368
+
369
+
@@ -255,3 +255,5 @@ if effective != client_mode:
255
255
  ## 文档版本
256
256
 
257
257
  - v1.0 — 2026-05-21 初稿,定义协议字段、链路传播、开关层级、安全约束
258
+
259
+
@@ -202,3 +202,5 @@ client := aun.NewAUNClient(aid.Data.AID)
202
202
  6. 通过 `close()` 释放连接和后台任务。
203
203
 
204
204
  详细 API 见 [06-API手册.md](06-API手册.md),RPC 参数见各领域的 `09-*-rpc-manual.md`。
205
+
206
+
@@ -356,3 +356,5 @@ async def main():
356
356
 
357
357
  asyncio.run(main())
358
358
  ```
359
+
360
+
@@ -166,3 +166,5 @@ client.on("message.received", lambda e: print(e["payload"]))
166
166
  ```
167
167
 
168
168
  RPC 方法参数见 `09-message-rpc-manual.md`、`09-group-rpc-manual.md`、`09-storage-rpc-manual.md` 等专项手册。
169
+
170
+
@@ -260,3 +260,5 @@ RPC 方法完整参数和响应格式见:
260
260
  | 群组 | [09-group-rpc-manual.md](09-group-rpc-manual.md) |
261
261
  | 存储 | [09-storage-rpc-manual.md](09-storage-rpc-manual.md) |
262
262
  | 元信息 | [09-meta-rpc-manual.md](09-meta-rpc-manual.md) |
263
+
264
+
@@ -611,3 +611,5 @@ client = AUNClient(aid)
611
611
  | 群组 E2EE 为固定启用能力 | `group_e2ee=true`,不可关闭 |
612
612
  | 默认要求前向保密 | `require_forward_secrecy=true`,无 prekey 时拒绝 long_term_key 降级 |
613
613
  | 客户端操作签名 | `group.send`/`group.kick`/`group.add_member`/`group.leave` 等操作自动附加 `client_signature`,服务端强制验签 |
614
+
615
+
@@ -1,69 +1,69 @@
1
- # AUN SDK - API 手册
2
-
3
- ---
4
-
5
- ## 目录
6
-
7
- - [AIDStore](#aidstore)
8
- - [AID](#aid)
1
+ # AUN SDK - API 手册
2
+
3
+ ---
4
+
5
+ ## 目录
6
+
7
+ - [AIDStore](#aidstore)
8
+ - [AID](#aid)
9
9
  - [AUNClient](#aunclient)
10
10
  - [事件](#事件)
11
11
  - [ServiceProxyClient](#serviceproxyclient)
12
12
  - [E2EE 高级 API](#e2ee-高级-api)
13
13
  - [RPC 方法参考](#rpc-方法参考)
14
14
  - [Stream 使用指南](#stream-使用指南)
15
-
15
+
16
16
  > **多语言命名约定**:Python 使用 `snake_case`(如 `aun_path`、`download_agent_md`),TS/JS 使用 `camelCase`(如 `aunPath`、`downloadAgentMd`),Go 使用 `PascalCase` 公开方法(如 `Load`、`Register`)。本手册表格中各列对应各语言的实际命名。
17
-
18
- ---
19
-
20
- ## AIDStore
21
-
22
- Python:
23
-
24
- ```python
25
- store = AIDStore(
26
- aun_path: str,
27
- encryption_seed: str,
28
- *,
29
- device_id=None,
30
- slot_id="default",
31
- verify_ssl=None, # None=自动(由 AUN_ENV/KITE_ENV 决定),True/False=强制
32
- root_ca_path=None, # 私有部署时指定自定义根证书路径
33
- debug=False,
34
- )
35
- ```
36
-
37
- TypeScript / JavaScript:
38
-
39
- ```ts
40
- const store = new AIDStore({
41
- aunPath, encryptionSeed,
42
- deviceId, slotId,
43
- verifySsl, // 同 Python verify_ssl
44
- rootCaPath, // 同 Python root_ca_path
45
- debug,
46
- });
47
- ```
48
-
49
- Go:
50
-
51
- ```go
52
- store := aun.NewAIDStore(aunPath, encryptionSeed)
53
- // 可选配置通过 AIDStoreOptions 传入
54
- store := aun.NewAIDStore(aunPath, encryptionSeed, aun.AIDStoreOptions{
55
- VerifySSL: &[]bool{true}[0],
56
- RootCaPath: "/path/to/ca.crt",
57
- Debug: true,
58
- })
59
- ```
60
-
61
- ### 方法
62
-
63
- | Python | TS/JS | Go | 说明 |
64
- |--------|-------|----|------|
65
- | `load(aid)` | `load(aid)` | `Load(aid)` | 从本地加载 AID |
66
- | `register(aid)` | `register(aid)` | `Register(ctx, aid)` | 注册并落盘证书和私钥 |
17
+
18
+ ---
19
+
20
+ ## AIDStore
21
+
22
+ Python:
23
+
24
+ ```python
25
+ store = AIDStore(
26
+ aun_path: str,
27
+ encryption_seed: str,
28
+ *,
29
+ device_id=None,
30
+ slot_id="default",
31
+ verify_ssl=None, # None=自动(由 AUN_ENV/KITE_ENV 决定),True/False=强制
32
+ root_ca_path=None, # 私有部署时指定自定义根证书路径
33
+ debug=False,
34
+ )
35
+ ```
36
+
37
+ TypeScript / JavaScript:
38
+
39
+ ```ts
40
+ const store = new AIDStore({
41
+ aunPath, encryptionSeed,
42
+ deviceId, slotId,
43
+ verifySsl, // 同 Python verify_ssl
44
+ rootCaPath, // 同 Python root_ca_path
45
+ debug,
46
+ });
47
+ ```
48
+
49
+ Go:
50
+
51
+ ```go
52
+ store := aun.NewAIDStore(aunPath, encryptionSeed)
53
+ // 可选配置通过 AIDStoreOptions 传入
54
+ store := aun.NewAIDStore(aunPath, encryptionSeed, aun.AIDStoreOptions{
55
+ VerifySSL: &[]bool{true}[0],
56
+ RootCaPath: "/path/to/ca.crt",
57
+ Debug: true,
58
+ })
59
+ ```
60
+
61
+ ### 方法
62
+
63
+ | Python | TS/JS | Go | 说明 |
64
+ |--------|-------|----|------|
65
+ | `load(aid)` | `load(aid)` | `Load(aid)` | 从本地加载 AID |
66
+ | `register(aid)` | `register(aid)` | `Register(ctx, aid)` | 注册并落盘证书和私钥 |
67
67
  | `list()` | `list()` | `List()` | 列出本地 AID |
68
68
  | `exists(aid)` | `exists(aid)` | `Exists(ctx, aid)` | 远端存在性检查 |
69
69
  | `resolve(aid, opts=None)` | `resolve(aid, opts?)` | `Resolve(ctx, aid, opts...)` | 拉证书并缓存;默认下载 agent.md,可用 `skip_agent_md` / `skipAgentMd` 跳过 |
@@ -74,18 +74,18 @@ store := aun.NewAIDStore(aunPath, encryptionSeed, aun.AIDStoreOptions{
74
74
  | `renew_cert(aid)` / `rekey(aid)` | `renewCert(aid)` / `rekey(aid)` | `RenewCert(ctx, aid)` / `Rekey(ctx, aid)` | 证书运维 |
75
75
  | `change_seed(old, new)` | `changeSeed(old, new)` | `ChangeSeed(old, new)` | 本地密钥保护种子迁移 |
76
76
 
77
- Python / TS / JS / Go 的 `AIDStore` 方法都返回 Result 包装;Go 形态为 `Result[T]`,字段为 `Ok` / `Data` / `Error`。
78
-
79
- ### Result 类型
80
-
81
- ```python
82
- # ok=True 时
83
- {"ok": True, "data": {...}}
84
-
85
- # ok=False 时
86
- {"ok": False, "error": {"code": "ERROR_CODE", "message": "..."}}
87
- ```
88
-
77
+ PythonTS/Node Go 的 `AIDStore` 本地方法返回 Result 包装;浏览器 JS 因 IndexedDB / WebCrypto 约束返回 `Promise<Result>`。联网方法在 TS/JS 中均返回 `Promise<Result>`;Go 形态为 `Result[T]`,字段为 `Ok` / `Data` / `Error`。
78
+
79
+ ### Result 类型
80
+
81
+ ```python
82
+ # ok=True 时
83
+ {"ok": True, "data": {...}}
84
+
85
+ # ok=False 时
86
+ {"ok": False, "error": {"code": "ERROR_CODE", "message": "..."}}
87
+ ```
88
+
89
89
  ### DownloadAgentMdResult
90
90
 
91
91
  | 字段 | 类型 | 说明 |
@@ -117,128 +117,128 @@ Python / TS / JS / Go 的 `AIDStore` 方法都返回 Result 包装;Go 形态
117
117
  | `verify_status` / `verify_error` | str | 最近一次下载验签状态 |
118
118
 
119
119
  agent.md 本地记录不写入 SQLite。Python / TypeScript / Go 使用 `{aun_path}/AIDs/{aid}/agent.md` 与 `agentmd.json`;浏览器 JavaScript 使用 IndexedDB 等价 key,存储不可用时退化为内存缓存。
120
-
121
- > **v0.4.2 变更**:`discoveryPort` 配置项已移除,Gateway 地址完全由 SDK 根据 AID issuer 自动发现,无需手动指定端口。
122
-
123
- ---
124
-
125
- ## AID
126
-
127
- AID 由 `AIDStore.load()` 返回,应用层不直接构造。
128
-
129
- ### 只读属性
130
-
131
- | Python | TS/JS | Go | 说明 |
132
- |--------|-------|----|------|
133
- | `aid` | `aid` | `AID()` | AID 字符串 |
134
- | `cert_pem` | `certPem` | `CertPEM()` | 证书 PEM |
135
- | `public_key` | `publicKey` | `PublicKey()` | 公钥 |
136
- | `cert_fingerprint` | `certFingerprint` | `CertFingerprint()` | 证书指纹 |
137
- | `aun_path` | `aunPath` | `AUNPath()` | 所属数据目录 |
138
- | `device_id` | `deviceId` | `DeviceID` | 设备 ID |
120
+
121
+ > **v0.4.2 变更**:`discoveryPort` 配置项已移除,Gateway 地址完全由 SDK 根据 AID issuer 自动发现,无需手动指定端口。
122
+
123
+ ---
124
+
125
+ ## AID
126
+
127
+ AID 由 `AIDStore.load()` 返回,应用层不直接构造。
128
+
129
+ ### 只读属性
130
+
131
+ | Python | TS/JS | Go | 说明 |
132
+ |--------|-------|----|------|
133
+ | `aid` | `aid` | `AID()` | AID 字符串 |
134
+ | `cert_pem` | `certPem` | `CertPEM()` | 证书 PEM |
135
+ | `public_key` | `publicKey` | `PublicKey()` | 公钥 |
136
+ | `cert_fingerprint` | `certFingerprint` | `CertFingerprint()` | 证书指纹 |
137
+ | `aun_path` | `aunPath` | `AUNPath()` | 所属数据目录 |
138
+ | `device_id` | `deviceId` | `DeviceID` | 设备 ID |
139
139
  | `slot_id` | `slotId` | `SlotID` | 实例槽位 ID;允许 `/`、`:`、空格作为共享隔离键分隔符 |
140
- | `verify_ssl` | `verifySsl` | `VerifySSL` | 是否校验 TLS 证书 |
141
- | `root_ca_path` | `rootCaPath` | `RootCaPath` | 自定义根证书路径 |
142
- | `debug` | `debug` | `Debug` | 是否开启调试日志 |
143
- | `private_key_pem` | `privateKeyPem` | `PrivateKeyPem` | 明文私钥 PEM(由 `AIDStore.load()` 注入,空字符串表示无私钥)|
144
-
145
- ### 方法
146
-
147
- | Python | TS/JS | Go | 说明 |
148
- |--------|-------|----|------|
149
- | `is_cert_valid()` | `isCertValid()` | `IsCertValid()` | 证书是否有效 |
150
- | `is_private_key_valid()` | `isPrivateKeyValid()` | `IsPrivateKeyValid()` | 私钥是否可用 |
151
- | `sign(data)` | `sign(data)` | `Sign(data)` | 签名 bytes |
152
- | `verify(data, signature)` | `verify(data, signature)` | `Verify(data, signature)` | 验签 |
153
- | `sign_agent_md(content)` | `signAgentMd(content)` | `SignAgentMd(content)` | agent.md 签名 |
154
- | `verify_agent_md(content)` | `verifyAgentMd(content)` | `VerifyAgentMd(content)` | agent.md 验签 |
155
-
156
- ---
157
-
158
- ## AUNClient
159
-
160
- ### 构造
161
-
162
- Python:
163
-
164
- ```python
165
- client = AUNClient()
166
- client = AUNClient(aid)
167
- ```
168
-
169
- TS/JS:
170
-
171
- ```ts
172
- const client = new AUNClient();
173
- const client = new AUNClient(aid);
174
- ```
175
-
176
- Go:
177
-
178
- ```go
179
- client := aun.NewAUNClientEmpty()
180
- client := aun.NewAUNClient(aid)
181
- ```
182
-
183
- 构造约束:
184
-
185
- - `aid` 必须是 AID 对象(由 `AIDStore.load()` 返回)。
186
- - 不接受字符串 AID。
187
- - 不接受把 aid 放进 options。
188
- - 不接受旧的 `(config, debug)` 或 `(config, true)` 形态。
189
-
190
- ### 身份与状态
191
-
192
- | Python | TS/JS | Go | 说明 |
193
- |--------|-------|----|------|
140
+ | `verify_ssl` | `verifySsl` | `VerifySSL` | 是否校验 TLS 证书 |
141
+ | `root_ca_path` | `rootCaPath` | `RootCaPath` | 自定义根证书路径 |
142
+ | `debug` | `debug` | `Debug` | 是否开启调试日志 |
143
+ | `private_key_pem` | `privateKeyPem` | `PrivateKeyPem` | 明文私钥 PEM(由 `AIDStore.load()` 注入,空字符串表示无私钥)|
144
+
145
+ ### 方法
146
+
147
+ | Python | TS/JS | Go | 说明 |
148
+ |--------|-------|----|------|
149
+ | `is_cert_valid()` | `isCertValid()` | `IsCertValid()` | 证书是否有效 |
150
+ | `is_private_key_valid()` | `isPrivateKeyValid()` | `IsPrivateKeyValid()` | 私钥是否可用 |
151
+ | `sign(data)` | `sign(data)` | `Sign(data)` | 签名 bytes |
152
+ | `verify(data, signature)` | `verify(data, signature)` | `Verify(data, signature)` | 验签 |
153
+ | `sign_agent_md(content)` | `signAgentMd(content)` | `SignAgentMd(content)` | agent.md 签名 |
154
+ | `verify_agent_md(content)` | `verifyAgentMd(content)` | `VerifyAgentMd(content)` | agent.md 验签 |
155
+
156
+ ---
157
+
158
+ ## AUNClient
159
+
160
+ ### 构造
161
+
162
+ Python:
163
+
164
+ ```python
165
+ client = AUNClient()
166
+ client = AUNClient(aid)
167
+ ```
168
+
169
+ TS/JS:
170
+
171
+ ```ts
172
+ const client = new AUNClient();
173
+ const client = new AUNClient(aid);
174
+ ```
175
+
176
+ Go:
177
+
178
+ ```go
179
+ client := aun.NewAUNClientEmpty()
180
+ client := aun.NewAUNClient(aid)
181
+ ```
182
+
183
+ 构造约束:
184
+
185
+ - `aid` 必须是 AID 对象(由 `AIDStore.load()` 返回)。
186
+ - 不接受字符串 AID。
187
+ - 不接受把 aid 放进 options。
188
+ - 不接受旧的 `(config, debug)` 或 `(config, true)` 形态。
189
+
190
+ ### 身份与状态
191
+
192
+ | Python | TS/JS | Go | 说明 |
193
+ |--------|-------|----|------|
194
194
  | `load_identity(aid)` | `loadIdentity(aid)` | `LoadIdentity(aid)` | 在 `no_identity` / `closed` 状态加载身份 |
195
- | `state` | `state` | `ConnectionState()` | 九态公开状态 |
196
- | `gateway_url` | `gatewayUrl` | `GetGatewayURL()` | 当前连接的 Gateway URL(只读,自动发现,连接前为空) |
197
- | `current_aid` | `currentAid` | `CurrentAID()` | 当前 AID 对象 |
198
- | `aid` | `aid` | `AID()` | 当前 AID 字符串 |
199
- | `has_identity` | `hasIdentity` | `HasIdentity()` | 是否已加载身份 |
200
- | `can_sign` | `canSign` | `CanSign()` | 是否可签名 |
201
- | `can_connect` | `canConnect` | `CanConnect()` | 是否可连接 |
202
- | `can_send` / `is_ready` | `canSend` / `isReady` | `CanSend()` / `IsReady()` | 是否可发送 |
203
- | `is_online` | `isOnline` | `IsOnline()` | 是否处于在线或重连相关状态 |
204
- | `is_closed` | `isClosed` | `IsClosed()` | 是否已关闭 |
205
-
206
- 状态值:
207
-
208
- ```text
209
- no_identity / standby / authenticated / connecting / ready /
210
- retry_backoff / reconnecting / connection_failed / closed
211
- ```
212
-
213
- ### 生命周期
214
-
215
- Python:
216
-
217
- ```python
218
- auth = await client.authenticate()
219
- await client.connect({"slot_id": "main", "auto_reconnect": True})
220
- await client.disconnect()
221
- await client.close()
222
- ```
223
-
224
- 说明:
225
-
226
- - `authenticate()` 只取 token,不建立业务会话。
227
- - `connect()` 可从 `standby` 自动认证并进入 `ready`。
228
- - `disconnect()` 断开当前传输连接,对象仍可重新连接。
229
- - `close()` 关闭连接和后台任务;之后只能重新加载身份再复用。
230
-
195
+ | `state` | `state` | `ConnectionState()` | 九态公开状态 |
196
+ | `gateway_url` | `gatewayUrl` | `GetGatewayURL()` | 当前连接的 Gateway URL(只读,自动发现,连接前为空) |
197
+ | `current_aid` | `currentAid` | `CurrentAID()` | 当前 AID 对象 |
198
+ | `aid` | `aid` | `AID()` | 当前 AID 字符串 |
199
+ | `has_identity` | `hasIdentity` | `HasIdentity()` | 是否已加载身份 |
200
+ | `can_sign` | `canSign` | `CanSign()` | 是否可签名 |
201
+ | `can_connect` | `canConnect` | `CanConnect()` | 是否可连接 |
202
+ | `can_send` / `is_ready` | `canSend` / `isReady` | `CanSend()` / `IsReady()` | 是否可发送 |
203
+ | `is_online` | `isOnline` | `IsOnline()` | 是否处于在线或重连相关状态 |
204
+ | `is_closed` | `isClosed` | `IsClosed()` | 是否已关闭 |
205
+
206
+ 状态值:
207
+
208
+ ```text
209
+ no_identity / standby / authenticated / connecting / ready /
210
+ retry_backoff / reconnecting / connection_failed / closed
211
+ ```
212
+
213
+ ### 生命周期
214
+
215
+ Python:
216
+
217
+ ```python
218
+ auth = await client.authenticate()
219
+ await client.connect({"slot_id": "main", "auto_reconnect": True})
220
+ await client.disconnect()
221
+ await client.close()
222
+ ```
223
+
224
+ 说明:
225
+
226
+ - `authenticate()` 只取 token,不建立业务会话。
227
+ - `connect()` 可从 `standby` 自动认证并进入 `ready`。
228
+ - `disconnect()` 断开当前传输连接,对象仍可重新连接。
229
+ - `close()` 关闭连接和后台任务;之后只能重新加载身份再复用。
230
+
231
231
  四个 SDK 的公开构造入口均已对齐为“无参或 AID 对象”。调试、TLS、根证书、device_id、slot_id 等配置由 `AIDStore` 传递到 AID,再由 `AUNClient` 继承;连接级选项只传给 `connect()`。
232
-
233
- ### RPC
234
-
235
- ```python
236
- result = await client.call("message.send", {
237
- "to": "bob.agentid.pub",
238
- "payload": {"type": "text", "text": "hello"},
239
- })
240
- ```
241
-
232
+
233
+ ### RPC
234
+
235
+ ```python
236
+ result = await client.call("message.send", {
237
+ "to": "bob.agentid.pub",
238
+ "payload": {"type": "text", "text": "hello"},
239
+ })
240
+ ```
241
+
242
242
  常用 meta RPC 直接透传:
243
243
 
244
244
  ```python
@@ -289,16 +289,16 @@ client = AUNClient(aid)
289
289
  client.set_protected_headers({"sdk": "python", "trace": "abc"})
290
290
  headers = client.get_protected_headers()
291
291
  ```
292
-
293
- 只合并到以下 RPC:
294
-
295
- - `message.send`
296
- - `group.send`
297
- - `message.thought.put`
298
- - `group.thought.put`
299
-
300
- ### agent.md
301
-
292
+
293
+ 只合并到以下 RPC:
294
+
295
+ - `message.send`
296
+ - `group.send`
297
+ - `message.thought.put`
298
+ - `group.thought.put`
299
+
300
+ ### agent.md
301
+
302
302
  | Python | TS/JS | Go | 说明 |
303
303
  |--------|-------|----|------|
304
304
  | `AIDStore.upload_agent_md(aid, content=None)` | `store.uploadAgentMd(aid, content?)` | `store.UploadAgentMD(ctx, aid, content...)` | 发布指定本地 AID 的 agent.md |
@@ -314,6 +314,20 @@ headers = client.get_protected_headers()
314
314
 
315
315
  ---
316
316
 
317
+ ## 业务门面
318
+
319
+ 除 `client.call(method, params)` 外,四语言 SDK 对 storage、collab 和 group.fs 群文件系统提供高层门面。普通应用优先用门面,只有需要精确控制底层参数时再直调 RPC。
320
+
321
+ | 能力 | Python | TS/JS | Go | 说明 |
322
+ |------|--------|-------|----|------|
323
+ | Storage VFS | `client.storage` | `client.storage` | `client.Storage()` | 类 POSIX 文件操作;上传自动选择 inline / session / 秒传,下载自动选择 inline / ticket |
324
+ | Collab | `client.collab` | `client.collab` | `client.Collab()` | 版本化文档、标签、`gc` / `reflog` / `revert` |
325
+ | Group FS | `client.group.fs` | `client.group.fs` | `client.Group().FS()` | POSIX 风格群文件系统;`ls/find/stat/lstat/mkdir/rm/cp/mv/df/mount/umount`,上传下载数据面由 SDK 编排 |
326
+
327
+ 群文件系统路径统一使用 `group_aid:/...`,成员数据区使用 `group_aid:/memberdata/{member_ref}/...`。SDK 不拼接真实 storage 路径,`memberdata` 到成员 `groupdata/{group_id}` 的映射只在服务端完成。群自有区写入必须使用群主持有的 `group_aid` 身份并通过当前 group_identity 签名;admin/member 个人 AID 不直接拥有写权限。JS 浏览器版上传中 `string` 默认表示文本内容,Node 本地路径需显式 `sourceType: "path"`、`localPath: true` 或 `local:` 前缀;Python/TS/Go 默认把 `string` 当本地路径。
328
+
329
+ ---
330
+
317
331
  ## ServiceProxyClient
318
332
 
319
333
  Service Proxy 用于 provider 通过 AUN 身份暴露本地 HTTP / WebSocket 服务。当前公开封装在 Python SDK 的 `ServiceProxyClient` 中;其它语言可以按 [09-proxy-rpc-manual.md](09-proxy-rpc-manual.md) 直接实现同等控制面和隧道消息。
@@ -367,75 +381,77 @@ proxy-server 连接地址不能由应用外部传入或配置。`ServiceProxyCli
367
381
 
368
382
  ```python
369
383
  sub = client.on("message.received", handler)
370
- client.off("message.received", handler)
371
- sub.unsubscribe()
372
- ```
373
-
374
- 常用内置事件:
375
-
376
- | 事件 | 说明 |
377
- |------|------|
378
- | `state_change` | 状态变化,`state` 为九态公开值 |
379
- | `connection.error` | 连接或重连错误 |
380
- | `token.refreshed` | token 刷新完成 |
381
- | `message.received` | 收到 P2P 消息 |
382
- | `message.ack` | 消息 ack |
383
- | `message.undecryptable` | P2P E2EE 解密失败 |
384
- | `group.changed` | 群组事件 |
385
- | `group.message_undecryptable` | 群 E2EE 解密失败 |
386
-
387
- ---
388
-
389
- ## E2EE 高级 API
390
-
391
- 普通业务无需直接操作 E2EE manager;`message.send` / `group.send` 默认加密并自动解密收到的消息。
392
-
393
- 高级场景可使用:
394
-
395
- | API | 说明 |
396
- |-----|------|
397
- | `client.e2ee.encrypt_message(...)` | 裸 WebSocket 或特殊集成中的 P2P 加密 |
398
- | `client.e2ee.decrypt_message(...)` | 裸消息解密 |
399
- | `client.e2ee.generate_prekey()` | 生成 prekey |
400
- | `client.e2ee.invalidate_prekey_cache(peer_aid)` | 清理对端 prekey 缓存 |
401
- | `client.group_e2ee.encrypt(...)` | 群消息加密 |
402
- | `client.group_e2ee.decrypt(...)` | 群消息解密 |
403
- | `client.group_e2ee.current_epoch(group_id)` | 查询当前群 epoch |
404
-
405
- ---
406
-
407
- ## RPC 方法参考
408
-
409
- | 领域 | 手册 | 关键方法 |
410
- |------|------|----------|
411
- | 消息 | [09-message-rpc-manual.md](09-message-rpc-manual.md) | `message.send` / `message.pull` / `message.ack` / `message.thought.*` |
412
- | 群组 | [09-group-rpc-manual.md](09-group-rpc-manual.md) | `group.create` / `group.send` / `group.v2.*` / `group.resources.*` |
413
- | 存储 | [09-storage-rpc-manual.md](09-storage-rpc-manual.md) | `storage.put_object` / `storage.create_upload_session` / `storage.create_folder` / `storage.create_share_link` |
384
+ client.off("message.received", handler)
385
+ sub.unsubscribe()
386
+ ```
387
+
388
+ 常用内置事件:
389
+
390
+ | 事件 | 说明 |
391
+ |------|------|
392
+ | `state_change` | 状态变化,`state` 为九态公开值 |
393
+ | `connection.error` | 连接或重连错误 |
394
+ | `token.refreshed` | token 刷新完成 |
395
+ | `message.received` | 收到 P2P 消息 |
396
+ | `message.ack` | 消息 ack |
397
+ | `message.undecryptable` | P2P E2EE 解密失败 |
398
+ | `group.changed` | 群组事件 |
399
+ | `group.message_undecryptable` | 群 E2EE 解密失败 |
400
+
401
+ ---
402
+
403
+ ## E2EE 高级 API
404
+
405
+ 普通业务无需直接操作 E2EE manager;`message.send` / `group.send` 默认加密并自动解密收到的消息。
406
+
407
+ 高级场景可使用:
408
+
409
+ | API | 说明 |
410
+ |-----|------|
411
+ | `client.e2ee.encrypt_message(...)` | 裸 WebSocket 或特殊集成中的 P2P 加密 |
412
+ | `client.e2ee.decrypt_message(...)` | 裸消息解密 |
413
+ | `client.e2ee.generate_prekey()` | 生成 prekey |
414
+ | `client.e2ee.invalidate_prekey_cache(peer_aid)` | 清理对端 prekey 缓存 |
415
+ | `client.group_e2ee.encrypt(...)` | 群消息加密 |
416
+ | `client.group_e2ee.decrypt(...)` | 群消息解密 |
417
+ | `client.group_e2ee.current_epoch(group_id)` | 查询当前群 epoch |
418
+
419
+ ---
420
+
421
+ ## RPC 方法参考
422
+
423
+ | 领域 | 手册 | 关键方法 |
424
+ |------|------|----------|
425
+ | 消息 | [09-message-rpc-manual.md](09-message-rpc-manual.md) | `message.send` / `message.pull` / `message.ack` / `message.thought.*` |
426
+ | 群组 | [09-group-rpc-manual.md](09-group-rpc-manual.md) | `group.create` / `group.send` / `group.v2.*` / `group.fs.*` |
427
+ | 存储 | [09-storage-rpc-manual.md](09-storage-rpc-manual.md) | `storage.put_object` / `storage.fs.*` / `storage.volume.*` / ACL / token / share link |
428
+ | 协作 | [09-collab-rpc-manual.md](09-collab-rpc-manual.md) | `collab.ls-files` / `collab.show` / `collab.commit` / `collab.merge` / `collab.log` / `collab.diff` / `collab.clone` / `collab.prune` / `collab.gc` / `collab.reflog` / `collab.revert` / `collab.tag.*` / `collab.ls-remote` / `collab.unregister` |
414
429
  | 元信息 | [09-meta-rpc-manual.md](09-meta-rpc-manual.md) | `meta.ping` / `meta.status` / `meta.trust_roots` |
415
430
  | Stream | [09-stream-rpc-manual.md](09-stream-rpc-manual.md) | `stream.create` / `stream.close` / `stream.list_active` |
416
431
  | Service Proxy | [09-proxy-rpc-manual.md](09-proxy-rpc-manual.md) | `proxy.register_services` / `proxy.unregister_services` / `proxy.list_services` |
417
432
 
418
433
  ---
419
-
420
- ## Stream 使用指南
421
-
422
- 创建流:
423
-
424
- ```python
425
- stream = await client.call("stream.create", {
426
- "kind": "audio",
427
- "metadata": {"sample_rate": 16000},
428
- })
429
- ```
430
-
431
- 查询流:
432
-
433
- ```python
434
- info = await client.call("stream.get_info", {"stream_id": stream["stream_id"]})
435
- ```
436
-
437
- 关闭流:
438
-
439
- ```python
440
- await client.call("stream.close", {"stream_id": stream["stream_id"]})
441
- ```
434
+
435
+ ## Stream 使用指南
436
+
437
+ 创建流:
438
+
439
+ ```python
440
+ stream = await client.call("stream.create", {
441
+ "kind": "audio",
442
+ "metadata": {"sample_rate": 16000},
443
+ })
444
+ ```
445
+
446
+ 查询流:
447
+
448
+ ```python
449
+ info = await client.call("stream.get_info", {"stream_id": stream["stream_id"]})
450
+ ```
451
+
452
+ 关闭流:
453
+
454
+ ```python
455
+ await client.call("stream.close", {"stream_id": stream["stream_id"]})
456
+ ```
457
+