@agentunion/fastaun 0.5.33 → 0.5.35
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.
- package/CHANGELOG.md +59 -2
- package/README.md +28 -26
- package/_packed_docs/CHANGELOG.md +59 -2
- package/_packed_docs/INDEX.md +26 -12
- package/_packed_docs/KITE_DOCS_GUIDE.md +17 -11
- package/_packed_docs/agent.md/SCHEMA.md +1 -1
- package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +2 -2
- package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +58 -8
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +17 -17
- package/_packed_docs/protocol/echo-probe-gateway.md +99 -0
- package/_packed_docs/protocol/echo-probe-sdk.md +91 -0
- package/_packed_docs/sdk/0.5.33-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +464 -316
- package/_packed_docs/sdk/0.5.33-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +499 -304
- package/_packed_docs/sdk/0.5.34-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +133 -0
- package/_packed_docs/sdk/0.5.34-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +107 -0
- package/_packed_docs/sdk/0.5.35-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +189 -0
- package/_packed_docs/sdk/0.5.35-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +204 -0
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +16 -13
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +13 -1
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +19 -9
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +87 -20
- package/_packed_docs/sdk/09-collab-rpc-manual.md +48 -30
- package/_packed_docs/sdk/09-custody-api-manual.md +3 -3
- package/_packed_docs/sdk/09-group-rpc-manual.md +60 -13
- package/_packed_docs/sdk/09-message-rpc-manual.md +22 -0
- package/_packed_docs/sdk/09-meta-rpc-manual.md +2 -1
- package/_packed_docs/sdk/09-payload-reference.md +9 -8
- package/_packed_docs/sdk/09-proxy-rpc-manual.md +20 -14
- package/_packed_docs/sdk/09-storage-rpc-manual.md +1698 -1659
- package/_packed_docs/sdk/09-stream-rpc-manual.md +33 -20
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +19 -17
- package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +125 -30
- package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/274/200/345/217/221/347/247/273/346/244/215/346/214/207/345/215/227.md +109 -33
- package/_packed_docs/sdk/INDEX.md +30 -18
- package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +1 -1
- package/_packed_docs/sdk/Ownership2.1-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +5 -5
- package/_packed_docs/sdk/Ownership2.1-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +5 -5
- package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +9 -9
- package/_packed_docs/sdk/README.md +11 -6
- package/_packed_docs//346/266/210/346/201/257/345/274/271/346/200/247/350/241/245/346/213/211/351/200/232/351/201/223/345/256/236/346/226/275/350/256/241/345/210/222.md +400 -0
- package/_packed_docs//346/266/210/346/201/257/345/274/271/346/200/247/350/241/245/346/213/211/351/200/232/351/201/223/346/226/271/346/241/210.md +485 -0
- package/dist/auth.js +39 -45
- package/dist/auth.js.map +1 -1
- package/dist/client/control-messages.js +2 -2
- package/dist/client/control-messages.js.map +1 -1
- package/dist/client/delivery.d.ts +12 -1
- package/dist/client/delivery.js +281 -46
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/lifecycle.js +13 -1
- package/dist/client/lifecycle.js.map +1 -1
- package/dist/client/rpc-budget.d.ts +21 -0
- package/dist/client/rpc-budget.js +82 -0
- package/dist/client/rpc-budget.js.map +1 -0
- package/dist/client/rpc-pipeline.d.ts +5 -0
- package/dist/client/rpc-pipeline.js +227 -63
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/sync-channels.d.ts +90 -0
- package/dist/client/sync-channels.js +508 -0
- package/dist/client/sync-channels.js.map +1 -0
- package/dist/client/v2-e2ee.d.ts +5 -1
- package/dist/client/v2-e2ee.js +420 -303
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +17 -0
- package/dist/client.js +373 -50
- package/dist/client.js.map +1 -1
- package/dist/events.d.ts +1 -0
- package/dist/events.js +5 -0
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mail-client.d.ts +101 -0
- package/dist/mail-client.js +369 -0
- package/dist/mail-client.js.map +1 -0
- package/dist/pubsub/binding.js +23 -3
- package/dist/pubsub/binding.js.map +1 -1
- package/dist/pubsub/channel.d.ts +15 -3
- package/dist/pubsub/channel.js +114 -7
- package/dist/pubsub/channel.js.map +1 -1
- package/dist/pubsub/client.d.ts +17 -2
- package/dist/pubsub/client.js +205 -40
- package/dist/pubsub/client.js.map +1 -1
- package/dist/pubsub/credentials.d.ts +3 -0
- package/dist/pubsub/credentials.js +57 -20
- package/dist/pubsub/credentials.js.map +1 -1
- package/dist/pubsub/index.d.ts +5 -2
- package/dist/pubsub/index.js +70 -54
- package/dist/pubsub/index.js.map +1 -1
- package/dist/pubsub/service.d.ts +9 -0
- package/dist/pubsub/service.js +266 -20
- package/dist/pubsub/service.js.map +1 -1
- package/dist/pubsub/types.d.ts +13 -1
- package/dist/storage/lowlevel.d.ts +3 -1
- package/dist/storage/lowlevel.js +13 -0
- package/dist/storage/lowlevel.js.map +1 -1
- package/dist/storage/types.d.ts +10 -0
- package/dist/storage/types.js.map +1 -1
- package/dist/storage/vfs.d.ts +3 -1
- package/dist/storage/vfs.js +2 -2
- package/dist/storage/vfs.js.map +1 -1
- package/dist/tools/cross-sdk-agent.d.ts +55 -5
- package/dist/tools/cross-sdk-agent.js +88 -21
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +16 -0
- package/dist/transport.js +129 -7
- package/dist/transport.js.map +1 -1
- package/dist/udp-standby.d.ts +89 -0
- package/dist/udp-standby.js +487 -0
- package/dist/udp-standby.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -1
- package/scripts/patch-imapflow-external.mjs +69 -0
|
@@ -1,316 +1,464 @@
|
|
|
1
|
-
# AUN SDK 0.5.33 应用集成指南
|
|
2
|
-
|
|
3
|
-
面向应用开发者,说明从仓库 0.5.32 基线升级到当前目标 0.5.33 的接入变化。本文对照 `072b7c69f` 与截至 2026-11-07 的未提交源码;0.5.33 为未发布目标,安装产物和配套服务部署需分别核对。四端实现差异见 [parity 0.5.33](../../python/CHANGES_FOR_PARITY.md#v0533),内部流程见[开发与移植指南](0.5.33-SDK开发与移植指南.md)。
|
|
4
|
-
|
|
5
|
-
## 1. 本版变化与整体架构
|
|
6
|
-
|
|
7
|
-
| 本版变化 | 应用如何使用 |
|
|
8
|
-
| --- | --- |
|
|
9
|
-
| 应用控制消息兼容 | 保留原 `control` 调用,SDK 按协商结果选择分类或普通投递;明文仍可发送 |
|
|
10
|
-
| Ownership 批量申请/审批 | 同批申请传同一 UUIDv4,Owner 归组展示后一次提交操作 ID 列表 |
|
|
11
|
-
| agent.md 与共识本地优先 | 保留本地身份仓库;新 Client 和连接成功不再触发无条件首查 |
|
|
12
|
-
| Storage 多 AID ACL | VFS/LowLevel
|
|
13
|
-
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
flowchart
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
classDef
|
|
47
|
-
classDef
|
|
48
|
-
classDef
|
|
49
|
-
classDef
|
|
50
|
-
classDef
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
style
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
declare const
|
|
67
|
-
declare const
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
|
77
|
-
|
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
participant
|
|
107
|
-
participant
|
|
108
|
-
participant
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
S->>G:
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
|
129
|
-
|
|
|
130
|
-
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
participant
|
|
179
|
-
participant
|
|
180
|
-
participant
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
V
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
V
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
1
|
+
# AUN SDK 0.5.33 应用集成指南
|
|
2
|
+
|
|
3
|
+
面向应用开发者,说明从仓库 0.5.32 基线升级到当前目标 0.5.33 的接入变化。本文对照 `072b7c69f` 与截至 2026-11-07 的未提交源码;0.5.33 为未发布目标,安装产物和配套服务部署需分别核对。四端实现差异见 [parity 0.5.33](../../python/CHANGES_FOR_PARITY.md#v0533),内部流程见[开发与移植指南](0.5.33-SDK开发与移植指南.md)。
|
|
4
|
+
|
|
5
|
+
## 1. 本版变化与整体架构
|
|
6
|
+
|
|
7
|
+
| 本版变化 | 应用如何使用 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| 应用控制消息兼容 | 保留原 `control` 调用,SDK 按协商结果选择分类或普通投递;明文仍可发送 |
|
|
10
|
+
| Ownership 批量申请/审批 | 同批申请传同一 UUIDv4,Owner 归组展示后一次提交操作 ID 列表 |
|
|
11
|
+
| agent.md 与共识本地优先 | 保留本地身份仓库;新 Client 和连接成功不再触发无条件首查 |
|
|
12
|
+
| Storage 多 AID/条件 ACL | VFS/LowLevel 支持 AID 列表,或按 Ownership 和名片条件授权;旧单项参数继续可用 |
|
|
13
|
+
| 弹性历史补拉 | Gateway 默认启用,显式关闭仍有效;本轮 Gateway 授权 0/1 条、同一 Gateway 内 AID+设备跨 slot 合计最多 1 条;SDK 按策略支持 0..N,现有协议能力和测试覆盖到 2 |
|
|
14
|
+
| Python 专项 | 拥塞等待采用新策略,容量压测使用新增 `bench run/report` |
|
|
15
|
+
|
|
16
|
+
EventService、设备租约、有界 fanout 和原有 VFS Cache 已由 0.5.32 提供,接入方法继续参考[上一版应用指南](0.5.32-SDK应用集成指南.md)。
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
%%{init: {"theme":"base","themeVariables":{"fontFamily":"Microsoft YaHei, sans-serif","fontSize":"14px"},"flowchart":{"curve":"linear","nodeSpacing":24,"rankSpacing":32}}}%%
|
|
20
|
+
flowchart TB
|
|
21
|
+
subgraph APP["各 AID 的应用进程"]
|
|
22
|
+
direction LR
|
|
23
|
+
U["Owner 应用<br/>批次展示与审批"]:::app
|
|
24
|
+
A["Agent 应用<br/>绑定 / 消息 / 文件"]:::app
|
|
25
|
+
end
|
|
26
|
+
subgraph SDK["每个 AID 各自持有 SDK"]
|
|
27
|
+
F["AUNClient 门面"]:::entry
|
|
28
|
+
O["Ownership<br/>批次 / agent.md / 本地共识"]:::owner
|
|
29
|
+
R["消息发送与接收<br/>分类协商 / E2EE / 应用回调"]:::entry
|
|
30
|
+
V["Storage VFS<br/>多 AID与条件 ACL / 读缓存"]:::storage
|
|
31
|
+
E["EventService · 继承 0.5.32<br/>Pub / Bus / Sub"]:::event
|
|
32
|
+
F --> O & R & V & E
|
|
33
|
+
end
|
|
34
|
+
G["Gateway<br/>认证会话 / 可信发送者 / RPC 转发"]:::gateway
|
|
35
|
+
subgraph SERVICES["AUN 服务"]
|
|
36
|
+
direction LR
|
|
37
|
+
M["Message / Group<br/>P2P / 群消息 / TTL 投递"]:::infra
|
|
38
|
+
N["Name Service<br/>归属关系 / 权威名片状态"]:::infra
|
|
39
|
+
S["Storage<br/>对象 / 条件 ACL / 条件写入"]:::infra
|
|
40
|
+
C["Credential<br/>事件授权凭证登记 / 状态证明"]:::infra
|
|
41
|
+
end
|
|
42
|
+
U & A --> F
|
|
43
|
+
O & R & V & E --> G
|
|
44
|
+
G --> M & N & S & C
|
|
45
|
+
S -->|"条件 ACL:按需查询名片"| N
|
|
46
|
+
classDef app fill:#eff6ff,stroke:#93c5fd,color:#1e3a8a,rx:10,ry:10
|
|
47
|
+
classDef entry fill:#f0f9ff,stroke:#7dd3fc,color:#0c4a6e,rx:10,ry:10
|
|
48
|
+
classDef owner fill:#eef2ff,stroke:#a5b4fc,color:#312e81,rx:10,ry:10
|
|
49
|
+
classDef storage fill:#fff7ed,stroke:#fdba74,color:#9a3412,rx:10,ry:10
|
|
50
|
+
classDef event fill:#f0fdf4,stroke:#86efac,color:#166534,rx:10,ry:10
|
|
51
|
+
classDef gateway fill:#f5f3ff,stroke:#a78bfa,color:#4c1d95,rx:10,ry:10
|
|
52
|
+
classDef infra fill:#f8fafc,stroke:#cbd5e1,color:#334155,rx:10,ry:10
|
|
53
|
+
style APP fill:#ffffff,stroke:#e2e8f0
|
|
54
|
+
style SDK fill:#ffffff,stroke:#e2e8f0
|
|
55
|
+
style SERVICES fill:#f8fafc,stroke:#e2e8f0
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
图中合并表示相同的 SDK 能力;每个 AID 的身份、连接和缓存分别保存。批次归组和审批界面由应用完成,归属共识仍由原有 Ownership 流程确认。EventService 的目录、订阅表和分发仍在 Bus SDK,Message 只负责承接实例租约及通用消息投递。
|
|
59
|
+
|
|
60
|
+
## 2. 示例前提与四端入口
|
|
61
|
+
|
|
62
|
+
以下 TypeScript 片段使用应用已加载身份且连接就绪的 Client,加载与连接沿用[快速开始](01-快速开始.md)。Owner 与新 Owner 为 human/agent 身份,两个 Agent 已符合 Ownership 适用条件。
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
import type { AUNClient } from '@agentunion/fastaun';
|
|
66
|
+
declare const ownerClient: AUNClient;
|
|
67
|
+
declare const nextOwnerClient: AUNClient;
|
|
68
|
+
declare const firstAgent: AUNClient;
|
|
69
|
+
declare const secondAgent: AUNClient;
|
|
70
|
+
const ownerAid = String(ownerClient.aid);
|
|
71
|
+
const nextOwnerAid = String(nextOwnerClient.aid);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
片段分别运行在相应身份的应用中;跨进程通过 SDK 收到的事件或应用界面传递选择结果。
|
|
75
|
+
|
|
76
|
+
| 用途 | Python | TypeScript/Browser JS | Go |
|
|
77
|
+
| --- | --- | --- | --- |
|
|
78
|
+
| 申请绑定 | `bind_owner_aid(..., batch_id=...)` | `bindOwneraid(..., { batchId })` | `BindOwneraid(..., OwnershipRequestOptions{BatchID: ...})` |
|
|
79
|
+
| Owner 发起绑定 | `bind_sub_aid` | `bindSubaid` | `BindSubaid` |
|
|
80
|
+
| 转移 | `transfer_sub_aid` | `transferSubaid` | `TransferSubaid` |
|
|
81
|
+
| 批量同意/拒绝 | `accept_ownership_requests/reject_ownership_requests` | `acceptOwnershipRequests/rejectOwnershipRequests` | `AcceptOwnershipRequests/RejectOwnershipRequests` |
|
|
82
|
+
| ACL 列表 | `grantee_aids` | `granteeAids` | `GranteeAIDs` |
|
|
83
|
+
| 条件 ACL | `subject` 字典,`owner_aid` | `subject` 对象,`ownerAid` | `Subject: *ACLSubject`,`OwnerAID` |
|
|
84
|
+
| 共识查询 | `check_ownership_consensus(..., force=True)` | `checkOwnershipConsensus(aid, true)` | `CheckOwnershipConsensusWithOptions(..., OwnershipConsensusOptions{Force: true})` |
|
|
85
|
+
|
|
86
|
+
Go 网络及等待方法还需传入 `context`。原有单次 Ownership 调用和 ACL 单 AID 参数保留。
|
|
87
|
+
|
|
88
|
+
## 3. 应用控制消息:保留调用,按能力投递
|
|
89
|
+
|
|
90
|
+
### 3.1 明文或加密的页面响应
|
|
91
|
+
|
|
92
|
+
发送应用控制消息时继续声明 `message_class: 'control'`,由 SDK 处理协商和加密位置。例如向 Owner 发送一条有期限的明文页面响应:
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
await firstAgent.call('message.send', {
|
|
96
|
+
to: ownerAid, message_class: 'control', encrypt: false, ttl: 60,
|
|
97
|
+
payload: { type: 'menu.response', request_id: 'request-1', data: { ready: true } },
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
需要加密时改为 `encrypt: true`。群应用控制使用既有 `group.send` 入口,并按群能力协商;应用无需自己移动保护头或构造 E2EE 信封。
|
|
102
|
+
|
|
103
|
+
```mermaid
|
|
104
|
+
sequenceDiagram
|
|
105
|
+
autonumber
|
|
106
|
+
participant A as 发送应用
|
|
107
|
+
participant S as 发送 SDK
|
|
108
|
+
participant G as Gateway
|
|
109
|
+
participant M as Message / Group
|
|
110
|
+
participant R as 接收 SDK
|
|
111
|
+
participant U as 接收应用
|
|
112
|
+
A->>S: send(control, encrypt, ttl)
|
|
113
|
+
alt 已协商应用控制类别
|
|
114
|
+
S->>G: 保留类别;按 encrypt 选择明文或 E2EE
|
|
115
|
+
else 未协商应用控制类别
|
|
116
|
+
S->>S: 构造请求时去掉外层及可改写保护头的类别
|
|
117
|
+
S->>G: 普通消息投递,保留正文、TTL 和设备目标
|
|
118
|
+
end
|
|
119
|
+
G->>M: 可信发送者身份与请求
|
|
120
|
+
M->>R: 在线 Push 或后续 Pull
|
|
121
|
+
R->>U: 通过原有消息事件交付
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
接收应用继续注册 `message.received`、`group.message_created` 等已有事件;按业务 `payload.type` 识别页面响应。降级后不依赖 `message_class` 仍为 `control` 来识别业务。
|
|
125
|
+
|
|
126
|
+
### 3.2 SDK 控制消息由 SDK 管理
|
|
127
|
+
|
|
128
|
+
| 消息 | 分类/协议能力已协商 | 未协商 |
|
|
129
|
+
| --- | --- | --- |
|
|
130
|
+
| 普通 P2P/群消息 | 普通投递 | 普通投递;普通群 TTL 不再被分类门禁阻断 |
|
|
131
|
+
| 明文/加密的应用 `control` | 保留控制类别 | 构造请求时降级为普通投递 |
|
|
132
|
+
| P2P 加密 `sdk_control` | SDK 校验并消费 | 外层路由降级,E2EE 保护头保留 SDK 类别及协议,仍由 SDK 消费 |
|
|
133
|
+
| 明文 `sdk_control`、群 `sdk_control` | 拒绝 | 拒绝 |
|
|
134
|
+
|
|
135
|
+
应用通过 `EventService`、Ownership 等门面调用 SDK 功能。SDK 控制消息不会因为普通通道投递就交给应用消息处理器。已签名的信封保持受保护内容,由配套服务完成通道路由;部署升级时应同时核对 Gateway、Message 和 Group 的兼容逻辑。
|
|
136
|
+
|
|
137
|
+
## 4. Ownership:一批申请,一次选择审批
|
|
138
|
+
|
|
139
|
+
### 4.1 Owner 先接收并按批次展示
|
|
140
|
+
|
|
141
|
+
注册处理器后,SDK 交付的 `ownership.request` 已经过原请求校验。以下集合是应用的待审批列表;没有批次的旧请求以自身操作 ID 单独展示。
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
type RequestItem = { batch_id?: string; operation_id: string; sub_aid: string };
|
|
145
|
+
const requests = new Map<string, RequestItem[]>();
|
|
146
|
+
ownerClient.on('ownership.request', (payload) => {
|
|
147
|
+
const item = payload as RequestItem;
|
|
148
|
+
const key = item.batch_id ?? item.operation_id;
|
|
149
|
+
requests.set(key, [...(requests.get(key) ?? []), item]);
|
|
150
|
+
});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
同一操作可能再次通知,应用列表可按 `operation_id` 合并展示。SDK 的审批接口也会对提交列表去重。
|
|
154
|
+
|
|
155
|
+
### 4.2 多个 Agent 向同一 Owner 申请绑定
|
|
156
|
+
|
|
157
|
+
由发起这批操作的应用生成一个 UUIDv4,并传给每个 Agent。实际使用可由同一进程里的多个 Client,也可由应用将批次号传到各进程。
|
|
158
|
+
|
|
159
|
+
```ts
|
|
160
|
+
const batchId = crypto.randomUUID();
|
|
161
|
+
const firstBinding = await firstAgent.bindOwneraid(ownerAid, { batchId });
|
|
162
|
+
const secondBinding = await secondAgent.bindOwneraid(ownerAid, { batchId });
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Owner 收到并展示两项请求后,用户点一次同意,将选中请求的操作 ID 提交给批量接口:
|
|
166
|
+
|
|
167
|
+
```ts
|
|
168
|
+
const selectedIds: string[] = [];
|
|
169
|
+
for (const item of requests.get(batchId) ?? []) selectedIds.push(item.operation_id);
|
|
170
|
+
const approval = await ownerClient.acceptOwnershipRequests(selectedIds);
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
拒绝时调用 `ownerClient.rejectOwnershipRequests(selectedIds, '本批不予绑定')`。`batchId` 只用于申请及展示归组,审批使用已收到的 `operation_id`,不会按一个批次号自动批准后来加入的请求。
|
|
174
|
+
|
|
175
|
+
```mermaid
|
|
176
|
+
sequenceDiagram
|
|
177
|
+
autonumber
|
|
178
|
+
participant A as Agent A
|
|
179
|
+
participant B as Agent B
|
|
180
|
+
participant M as AUN 消息投递
|
|
181
|
+
participant O as Owner SDK
|
|
182
|
+
participant U as Owner 审批界面
|
|
183
|
+
participant N as 原有文件与归属服务
|
|
184
|
+
A->>M: bind.request(operation A, batch X)
|
|
185
|
+
B->>M: bind.request(operation B, batch X)
|
|
186
|
+
M->>O: 认证原请求,保留各自上下文
|
|
187
|
+
O->>U: ownership.request,按 batch X 展示
|
|
188
|
+
U->>O: 一次同意 [operation A, operation B]
|
|
189
|
+
loop 对列表中每个独立操作
|
|
190
|
+
O->>N: 强制核对当前关系并执行单项绑定
|
|
191
|
+
N-->>O: 当前项结果
|
|
192
|
+
O->>M: 单项回复/后续通知
|
|
193
|
+
end
|
|
194
|
+
O-->>U: total / succeeded / failed / results
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
批量结果保留每项的 `result` 或 `error`。`succeeded` 表示该次审批调用未落入失败分类,结果仍可能为 `pending`;应用应查看每项状态,通过后续 `ownership.completed` 或共识查询确认归属完成。单项失败不回滚其它项。
|
|
198
|
+
|
|
199
|
+
### 4.3 批量转移给新 Owner
|
|
200
|
+
|
|
201
|
+
当前 Owner 使用新的批次号发起转移,审批发生在新 Owner:
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
const transferBatchId = crypto.randomUUID();
|
|
205
|
+
const firstTransfer = await ownerClient.transferSubaid(String(firstAgent.aid), nextOwnerAid, { batchId: transferBatchId });
|
|
206
|
+
const secondTransfer = await ownerClient.transferSubaid(String(secondAgent.aid), nextOwnerAid, { batchId: transferBatchId });
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
新 Owner 按 §4.1 注册自己的请求处理器;用户确认后提交已收到的转移操作列表:
|
|
210
|
+
|
|
211
|
+
```ts
|
|
212
|
+
declare const selectedTransferIds: string[];
|
|
213
|
+
const transferApproval = await nextOwnerClient.acceptOwnershipRequests(selectedTransferIds);
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
SDK 逐项保留原发送者、目标 Owner、关系版本和批次上下文;同一操作换批次或换内容会触发冲突。批量执行期间切换身份也不会继续用新身份批准旧请求。
|
|
217
|
+
|
|
218
|
+
## 5. 新 Client 与重连:本地名片和共识优先
|
|
219
|
+
|
|
220
|
+
应用保留原身份仓库及本地 `agent.md`,按原流程加载身份、连接即可。SDK 不再因“这个 Client 还没有查过”而强制访问服务器,群/组织首次访问同样复用有效本地状态。
|
|
221
|
+
|
|
222
|
+
```mermaid
|
|
223
|
+
flowchart LR
|
|
224
|
+
Q["连接后 / 首次查询"] --> L["读取本地 agent.md 与共识快照"]
|
|
225
|
+
L --> C{"本地记录仍一致?"}
|
|
226
|
+
C -->|"ETag / 摘要 / 关系声明一致"| H["复用本地名片及已达共识结果"]
|
|
227
|
+
C -->|"缺失 / 未共识 / 内容或 ETag 变化"| R["查询远端并更新观察"]
|
|
228
|
+
F["管理流程或 force=true"] --> R
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
本地有正文不等于已经达成归属共识;SDK 还核对已保存快照、锁状态、ETag、正文摘要、Owner 和关系版本。绑定、审批、转移、释放等管理流程继续强制核对当前状态。
|
|
232
|
+
|
|
233
|
+
```ts
|
|
234
|
+
const localFirst = await firstAgent.checkOwnershipConsensus();
|
|
235
|
+
const current = await firstAgent.checkOwnershipConsensus(undefined, true);
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
普通展示使用默认查询;应用确需当前远端事实时显式强刷。Ownership 状态变化后 SDK 清除相关快照,本轮没有新增周期共识查询任务。
|
|
239
|
+
|
|
240
|
+
## 6. Storage:多 AID 与条件 ACL
|
|
241
|
+
|
|
242
|
+
### 6.1 一次授予或撤销多个 AID
|
|
243
|
+
|
|
244
|
+
每次授权或撤销在 `subject`、`granteeAid`、`granteeAids` 中只选一种;全部省略或同时提供会返回参数错误。Python/RPC 对应 `grantee_aid/grantee_aids`,Go 对应 `GranteeAID/GranteeAIDs`。
|
|
245
|
+
|
|
246
|
+
以下文件已存在且属于 `ownerClient`;传入列表即可从 VFS 贯通到 LowLevel 和 RPC。数组也可以只有一个 AID。
|
|
247
|
+
|
|
248
|
+
```ts
|
|
249
|
+
await ownerClient.storage.setAcl('/reports/result.json', {
|
|
250
|
+
granteeAids: [String(firstAgent.aid), String(secondAgent.aid)],
|
|
251
|
+
perms: 'r', maxUses: 10,
|
|
252
|
+
});
|
|
253
|
+
await ownerClient.storage.removeAcl('/reports/result.json', {
|
|
254
|
+
granteeAids: [String(firstAgent.aid), String(secondAgent.aid)],
|
|
255
|
+
});
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
`maxUses: 10` 表示每个被授权 AID 各有自己的使用次数;权限、过期时间等设置应用到每项。配套 Storage 服务归一化并去重 AID,SDK 请求使用 `grantee_aids`。
|
|
259
|
+
|
|
260
|
+
原调用保持可用:
|
|
261
|
+
|
|
262
|
+
```ts
|
|
263
|
+
await ownerClient.storage.setAcl('/reports/result.json', {
|
|
264
|
+
granteeAid: String(firstAgent.aid), perms: 'r',
|
|
265
|
+
});
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
```mermaid
|
|
269
|
+
sequenceDiagram
|
|
270
|
+
autonumber
|
|
271
|
+
participant A as 应用
|
|
272
|
+
participant V as VFS / LowLevel
|
|
273
|
+
participant C as SDK 读缓存
|
|
274
|
+
participant S as Storage 服务
|
|
275
|
+
A->>V: setAcl 或 removeAcl,多 AID
|
|
276
|
+
V->>S: storage.set_acl / remove_acl,grantee_aids
|
|
277
|
+
S->>S: 逐项授予或撤销
|
|
278
|
+
S-->>V: 成功结果或中途错误
|
|
279
|
+
V->>C: 两种结果都失效相关路径缓存
|
|
280
|
+
V-->>A: 返回结果或保留原始错误
|
|
281
|
+
A->>V: 按需重新查询 ACL
|
|
282
|
+
V->>S: 回源确认当前实际权限
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
批量请求发生中途错误时,可能已有部分 AID 更新成功。应用保留错误并重新查询当前 ACL,再决定如何处理剩余项;SDK 会清理相关路径缓存,保留无关路径缓存。接口字段及精简后的对象/下载票据/共享链接返回值见 [Storage RPC 手册](09-storage-rpc-manual.md)。
|
|
286
|
+
|
|
287
|
+
### 6.2 允许符合条件的 sub 读取目录
|
|
288
|
+
|
|
289
|
+
目标:允许我的直接 sub 中,可信名片满足 `type=agent` 且 `exttype` 为 `assistant` 或 `worker` 的 AID,读取我的 `/reports/` 及其子路径。Owner 先准备私有文件:
|
|
290
|
+
|
|
291
|
+
```ts
|
|
292
|
+
await ownerClient.storage.mkdir('/reports/2026', { parents: true });
|
|
293
|
+
await ownerClient.storage.writeBytes('/reports/2026/summary.txt', '本月报告');
|
|
294
|
+
const subject = {
|
|
295
|
+
ownership: { ownerAid, scope: 'direct' as const },
|
|
296
|
+
card: { type: ['agent'], exttype: ['assistant', 'worker'] },
|
|
297
|
+
};
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Owner 授权后可查询规则;后续新增且满足条件的 sub 自动适用,无需再枚举 AID:
|
|
301
|
+
|
|
302
|
+
```ts
|
|
303
|
+
await ownerClient.storage.setAcl('/reports', { subject, perms: 'r' });
|
|
304
|
+
const rules = await ownerClient.storage.listAcl('/reports');
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Owner 的 `sub_aids/{firstAgent-aid}/owner.md` 已声明该 sub,且可信名片满足上述条件时,`firstAgent` 直接使用 VFS 读取。条件 ACL 只检查 Owner 的单方声明;`owner` 指明文件所属 AID,路径仍是普通绝对路径:
|
|
308
|
+
|
|
309
|
+
```ts
|
|
310
|
+
const entries = await firstAgent.storage.list('/reports', { owner: ownerAid });
|
|
311
|
+
const bytes = await firstAgent.storage.readBytes('/reports/2026/summary.txt', { owner: ownerAid });
|
|
312
|
+
const text = new TextDecoder().decode(bytes);
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
不再授权时,由 Owner 用同一条件撤销:
|
|
316
|
+
|
|
317
|
+
```ts
|
|
318
|
+
await ownerClient.storage.removeAcl('/reports', { subject });
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
```mermaid
|
|
322
|
+
sequenceDiagram
|
|
323
|
+
autonumber
|
|
324
|
+
participant O as Owner 应用与 VFS
|
|
325
|
+
participant S as Storage,经 Gateway
|
|
326
|
+
participant N as Name Service
|
|
327
|
+
participant A as sub 应用与 VFS
|
|
328
|
+
O->>S: setAcl(/reports, subject, r)
|
|
329
|
+
S-->>O: 保存并返回归一化条件规则
|
|
330
|
+
A->>S: list / readBytes,owner=Owner AID
|
|
331
|
+
S->>S: 核对 Owner 当前 owner.md 声明
|
|
332
|
+
opt 规则限定 card,且名片缓存需刷新
|
|
333
|
+
S->>N: svc RPC 批量查询普通名片
|
|
334
|
+
N-->>S: type / exttype / etag
|
|
335
|
+
end
|
|
336
|
+
S->>S: 检查路径、权限、有效期及条件
|
|
337
|
+
S-->>A: 元数据或正文,禁止复用读缓存
|
|
338
|
+
O->>S: removeAcl(/reports, 同一 subject)
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
`scope` 默认 `direct`,只含 Owner 声明的直接 sub;改为 `descendants` 时沿各级 Owner 的声明检查后代,最多 64 跳,Owner 自身不算 sub。声明、`type`、`exttype` 必须同时满足,同一属性数组内任意一项匹配即可;省略 `card` 时不查询名片,提供的属性数组必须非空。`exttype` 取 Name Service 的可信普通名片,应用不用随读取请求提交属性。
|
|
342
|
+
|
|
343
|
+
同一路径和归一化条件对应同一规则,重复 `setAcl` 更新该规则。若指定 `maxUses`,额度由所有匹配者共享;多 AID 列表授权仍按各 AID 独立计数。每次联网读取核对当前 Owner 声明;名片由 Storage 缓存 60 秒,缺失或过期时回源,不匹配时可提前刷新,相邻刷新至少间隔 5 秒。因此删除/释放 Owner 声明会在后续联网判权时生效,名片改为不匹配的撤权有最多 60 秒的缓存窗口。
|
|
344
|
+
|
|
345
|
+
条件读取响应不进入 SDK 可复用读缓存;大对象下载由 Storage 复核后直接返回或流式代理正文,再次下载会重新检查。服务端缓存按请求触发,无周期名片同步任务。四端调用方式不变,字段和实现边界见[移植指南 ACL 章节](0.5.33-SDK开发与移植指南.md#5-storage-acl从门面贯通到-rpc)。
|
|
346
|
+
|
|
347
|
+
### 6.3 条件 ACL 的完整使用场景
|
|
348
|
+
|
|
349
|
+
| 使用场景 | 应用操作 | 验收结果 |
|
|
350
|
+
| --- | --- | --- |
|
|
351
|
+
| 授权自己的直接 sub | `scope: 'direct'`,按需限定名片 | 满足条件的直接 sub 可读;孙级 sub 使用 `descendants` 后才可读 |
|
|
352
|
+
| 授权指定类型的 sub | `type: ['agent']`,`exttype: ['assistant', 'worker']` | 关系和两个属性同时满足;同一属性允许任意列出的值 |
|
|
353
|
+
| 仅按归属授权 | 省略 `card`,保留 `ownership` | Owner 当前单方声明的 sub 适用,不查询 NS 共识或名片 |
|
|
354
|
+
| 新增符合条件的 Agent | Owner 发布该 sub 的 `owner.md`,再访问已有授权目录 | 自动适用已有规则,无需重新枚举或修改授权 |
|
|
355
|
+
| 修改 Agent 名片 | 签名上传新的 `type/exttype`,保留当前归属声明 | 已匹配缓存最多保留 60 秒;不匹配时按至少 5 秒间隔提前刷新,恢复后重新允许 |
|
|
356
|
+
| 转移或释放归属 | 原 Owner 更新/删除其 `owner.md` 声明 | 后续联网判权失效,已有下载票据兑换时也重新检查声明 |
|
|
357
|
+
| 限定业务目录 | 只对 `/reports` 授权 `r` | 可读取其文件和子目录;相邻 `/reports-other` 不适用,写入和删除仍需相应权限 |
|
|
358
|
+
| 更新和撤销规则 | 用归一化后相同的条件 `setAcl/removeAcl` | 相同规则更新或删除;列表展示 `subject`,撤销后的联网读取被拒绝 |
|
|
359
|
+
| 设置期限或次数 | 使用 `expiresAt`、`maxUses` | 到期后拒绝;同一条件规则由所有匹配者共享次数,具体 AID 列表仍各自计数 |
|
|
360
|
+
| 下载大文件 | 使用 VFS `readBytes`,由 SDK 编排票据和 HTTP | 每次下载核对当前条件,正文直出或流式代理,响应使用 `private, no-store` |
|
|
361
|
+
| 保留原 AID 授权 | 选择 `granteeAid` 或 `granteeAids` | 原合法调用继续可用;每次授权目标三选一,禁止同时传 `subject` |
|
|
362
|
+
| 四端协作 | 不同 SDK 分别管理规则、读取和撤销 | Python、Node TS、浏览器 JS、Go 使用同一服务端规则,跨端结果一致 |
|
|
363
|
+
|
|
364
|
+
每轮验收使用独立 AID、slot 和目录,保存实际服务版本、SDK 版本与用例结果。逐个执行,失败后保留检查点,修复并从失败项续跑;详细用例与真实环境要求见[移植指南 E2E 矩阵](0.5.33-SDK开发与移植指南.md#71-条件-acl-的-ubuntu-docker-e2e-矩阵)。
|
|
365
|
+
|
|
366
|
+
## 7. Python 独有变化
|
|
367
|
+
|
|
368
|
+
### 7.1 限流与拥塞等待
|
|
369
|
+
|
|
370
|
+
| 响应条件 | Python 等待策略 |
|
|
371
|
+
| --- | --- |
|
|
372
|
+
| 有效正数 `retry_after_seconds/retry_after_ms` | 按服务端提示等待,取适用的较长值 |
|
|
373
|
+
| 无有效提示,`-32029/-32429` 且错误文本表明队列/背压/容量拥塞 | 默认 1 秒 |
|
|
374
|
+
| 其它可识别限流 | 默认 60 秒 |
|
|
375
|
+
|
|
376
|
+
这项调整仅为本轮 Python 变更,TS/JS/Go 没有同等退避修改;应用写请求不会因此自动重试。应用仍需根据单次请求结果决定后续操作。
|
|
377
|
+
|
|
378
|
+
### 7.2 容量压测 CLI
|
|
379
|
+
|
|
380
|
+
新增 `aun bench run` 和 `aun bench report`,支持 16 种场景、套件选择、多进程、多身份通道、预算和断点续跑。将 `<issuer>` 替换为目标域,先查看计划,再启动选定场景:
|
|
381
|
+
|
|
382
|
+
```sh
|
|
383
|
+
aun bench run "<issuer>" --suite messaging --dry-run
|
|
384
|
+
aun bench run "<issuer>" --case p2p-plain --budget 10 --run-id sdk033
|
|
385
|
+
aun bench run "<issuer>" --case p2p-plain --budget 10 --run-id sdk033 --resume
|
|
386
|
+
aun bench report ".aun-bench/<issuer>/runs/sdk033"
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
报告提供 JSON/HTML,区分延迟达标容量、稳态吞吐、边界区间和发压端瓶颈。`pubsub` 场景包含发压端的 Bus SDK;未验证的结果或发压端瓶颈不能当作已确认的纯服务端容量。
|
|
390
|
+
|
|
391
|
+
## 8. 升级与验收
|
|
392
|
+
|
|
393
|
+
| 检查项 | 验收行为 |
|
|
394
|
+
| --- | --- |
|
|
395
|
+
| 四 SDK 产物 | 核对目标版本 0.5.33;Browser JS 与 Node TS 使用各自包 |
|
|
396
|
+
| 消息兼容 | 已协商/未协商的明文和加密应用控制可投递;普通消息继续工作;SDK 控制由 SDK 消费 |
|
|
397
|
+
| 批次审批 | 同批多个 Agent 可一次选择;逐项显示结果,失败项可单独处理;最终归属以完成事件/共识为准 |
|
|
398
|
+
| 本地优先 | 保存的有效共识可跨 Client/重连复用;无共识或记录变化会查询远端;管理调用强刷 |
|
|
399
|
+
| ACL | 列表及旧单项调用可用、按 AID 独立计数;条件规则按当前 Owner 声明/TTL 名片匹配并共享额度;三种目标互斥,撤销后重新读取被拒绝 |
|
|
400
|
+
| 配套服务 | Gateway/Message/Group 支持兼容路由;Storage 支持批量/条件 ACL、Owner 单方声明检查及 NS 名片 svc 批查缓存;原 EventService 服务依赖继续保留 |
|
|
401
|
+
|
|
402
|
+
已有版本升级验证包括四端版本一致性、TS 加密回环 17 项、JS 加密回环 13 项、Go E2EE 包及对应类型/vet 检查。控制消息 runner 的 96 格脚本已纳入工作区,但本轮没有取得其完整通过产物;它只关闭发送端能力,不能代表接收端缺少能力的全部组合。详细覆盖与前序定向回归记录见 [parity 验证边界](../../python/CHANGES_FOR_PARITY.md#v0533)。本文整理不代替全量或跨 SDK E2E 验收。
|
|
403
|
+
|
|
404
|
+
## 9. 长期离线后的弹性补拉
|
|
405
|
+
|
|
406
|
+
应用继续使用原有消息订阅入口。主连接处理实时消息、页面响应、管理消息与普通 RPC;历史积压由 SDK 按 Gateway 授权选择主连接或专用辅助连接。四 SDK 共用这套协议,应用不创建第二个 AUNClient,也不维护补拉连接池。
|
|
407
|
+
|
|
408
|
+
### 9.1 在控制面板查看或调整
|
|
409
|
+
|
|
410
|
+
1. 打开控制面板的 Gateway 配置,选择实际使用的服务/节点/实例作用域。
|
|
411
|
+
2. 检查“启用弹性补拉通道”(`sync_channels_enabled`),按需调整并保存现有配置修订。
|
|
412
|
+
3. 查看各 Gateway 实例的应用状态:`applied` 为已应用,`pending` 为等待应用,`unknown` 为尚无有效诊断;保存成功表示配置已持久化。
|
|
413
|
+
|
|
414
|
+
开关默认开启,已有显式关闭配置继续生效;页面重开及服务重启后读取配置中心的有效值。仅主辅双能力协商成功的 SDK 可用,承接主连接的同一 Gateway 内,`(aid, device_id)` 跨 slot、主会话合计最多 1 条,当前不跨 Gateway 全局统计。不同设备分别计数,历史资源仍按 AID 汇总。在线修改会下发策略,无需重启 Gateway、应用重新登录或定时查询。本轮 Gateway 按开关与实时压力实际授权 `0/1`,压力可降为 0,关闭时为 0、开启时上限为 1;SDK 按策略支持 `0..N`,当前协议能力和测试覆盖到 2。关闭时停止新增辅助连接,通知已有连接退出,历史任务按当前额度退回主连接。
|
|
415
|
+
|
|
416
|
+
### 9.2 一次补拉的流程
|
|
417
|
+
|
|
418
|
+
```mermaid
|
|
419
|
+
sequenceDiagram
|
|
420
|
+
autonumber
|
|
421
|
+
participant A as 应用
|
|
422
|
+
participant S as 主 Client / SDK
|
|
423
|
+
participant X as 补拉辅助连接
|
|
424
|
+
participant G as Gateway
|
|
425
|
+
participant M as Message / Group
|
|
426
|
+
A->>S: 注册原有消息处理器并连接
|
|
427
|
+
S->>G: 主连接认证,声明两种弹性能力
|
|
428
|
+
G-->>S: 主连接 ID、能力结果与当前策略
|
|
429
|
+
alt 已开启且授权辅助数量大于 0,有历史积压
|
|
430
|
+
S->>X: 按共享预算申请辅助连接
|
|
431
|
+
X->>G: short + history_sync + 主连接 ID
|
|
432
|
+
G-->>X: 同 AID/device/slot 校验及能力协商
|
|
433
|
+
X->>G: persistent Pull + 页字节上限
|
|
434
|
+
else 辅助数量为 0,历史额度可用
|
|
435
|
+
S->>G: 主连接低优先级 persistent Pull
|
|
436
|
+
end
|
|
437
|
+
G->>M: 按历史共享额度转发
|
|
438
|
+
M-->>G: 一页消息与安全扫描位置
|
|
439
|
+
G-->>S: 经原请求通道返回页面及策略
|
|
440
|
+
S->>S: 解码、解密、按原游标交付
|
|
441
|
+
S->>A: 原有消息/批量消息事件
|
|
442
|
+
A-->>S: 本页处理完成
|
|
443
|
+
S->>G: 按原规则提交 ACK,释放消费预留
|
|
444
|
+
Note over S,G: 实时 volatile 独立从主连接 Pull,使用自己的游标
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
主辅均需协商 `elastic_connections_v1` 与 `sync_channels_v1`。前者提供通用弹性连接,后者授权本轮 `history_sync` 用途;应用无需拼装这些内部参数。
|
|
448
|
+
|
|
449
|
+
### 9.3 暂停、断线与应用边界
|
|
450
|
+
|
|
451
|
+
| 情况 | SDK 行为 |
|
|
452
|
+
| --- | --- |
|
|
453
|
+
| 仅 `max_aux_channels=0` | 历史额度可用时退回主连接,小页、低优先级继续 |
|
|
454
|
+
| 历史在途额度或速率为 `0` | 暂停历史,等待 Gateway 主动通知恢复,不占普通 RPC 额度 |
|
|
455
|
+
| 辅助连接被回收或断开 | 保持主 Client 在线;未完成页从安全游标退回主连接,使用剩余请求期限 |
|
|
456
|
+
| 同一策略版本下还有积压 | 记住辅助故障,不自动重连或冷却后补开;重复快照不解禁 |
|
|
457
|
+
| 新策略明确重新授权/新主会话 | 满足最新授权与本地预算后可再次按需申请辅助连接 |
|
|
458
|
+
| 单条消息超过页预算 | 收到 `sync.error`,`code=OVERSIZED_MESSAGE`;该流停止自动续页,其它流继续 |
|
|
459
|
+
|
|
460
|
+
应用仍按消息 ID 幂等保存或处理消息,顺序使用各 peer/群原有 seq;增加连接不建立跨流的全局顺序。半页、旧主会话页不会推进 ACK;实时临时消息保持原 TTL,过期后不由历史补拉恢复。
|
|
461
|
+
|
|
462
|
+
SDK 主辅合计沿用 RPC 总额 16、background 8、event 4、pull 4;历史最多占 3 个 pull 名额。同一 namespace 的网络 Pull 串行,不同 namespace 可在 Gateway 策略授权和共享预算允许时并行复用辅助连接;SDK 遵从 `max_aux_channels` 的 `0..N` 策略,当前协议能力和测试覆盖到 2,Gateway 本轮最多授权 1 条,实际并发不等于 1。初始页上限 256 KiB,历史编码预留合计 1 MiB、本地放大预留 8 MiB,预留持续到应用消费结束。慢处理会形成背压,应用应及时完成原有处理器。
|
|
463
|
+
|
|
464
|
+
配套部署需要 Gateway 的策略/配置能力,以及 Message、Group 的 `storage_scope`、`max_page_bytes` 支持。详细协议与内部流程见[移植指南第 8 节](0.5.33-SDK开发与移植指南.md#8-弹性补拉的四端共同实现契约);实际验收结果单独记录于[实施计划](../消息弹性补拉通道实施计划.md)。本轮 Gateway 当前授权上限待重新验收;前序测试不证明这项 Gateway cap 更改已通过。
|