@agentunion/fastaun-browser 0.5.1 → 0.5.3
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 +570 -504
- package/_packed_docs/CHANGELOG-validators.md +134 -131
- package/_packed_docs/CHANGELOG.md +570 -504
- package/_packed_docs/INDEX.md +65 -52
- package/_packed_docs/KITE_DOCS_GUIDE.md +23 -18
- 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 +169 -116
- package/_packed_docs/aun-perf-audit-critical-bugs.md +315 -0
- package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +263 -261
- package/_packed_docs/cli/CLI/346/211/213/345/206/214.md +328 -328
- package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +2 -2
- 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 +1 -1
- 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 +39 -16
- package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +8 -5
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +18 -19
- 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 +1 -1
- package/_packed_docs/protocol/08-AUN-E2EE-Group.md +293 -294
- package/_packed_docs/protocol/08-AUN-E2EE.md +12 -10
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +183 -60
- package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +4 -4
- 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 +1 -1
- package/_packed_docs/protocol/16-/347/263/273/347/273/237/347/233/256/345/275/225/344/277/235/346/212/244/346/226/271/346/241/210.md +177 -177
- package/_packed_docs/protocol/README.md +7 -6
- package/_packed_docs/protocol/aun-docs-guide.md +5 -4
- package/_packed_docs/protocol/index.md +9 -8
- 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 +1 -1
- package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +13 -13
- package/_packed_docs/protocol//351/231/204/345/275/225L-E2EE/345/256/236/347/216/260/346/214/207/345/215/227.md +9 -9
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +15 -13
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +20 -1
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +26 -18
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +33 -34
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +274 -4
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +41 -13
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +28 -12
- package/_packed_docs/sdk/09-group-rpc-manual.md +237 -142
- package/_packed_docs/sdk/09-message-rpc-manual.md +50 -28
- package/_packed_docs/sdk/09-payload-reference.md +3 -3
- package/_packed_docs/sdk/09-storage-rpc-manual.md +1 -1
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +12 -9
- 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 +3 -2
- package/_packed_docs/sdk/INDEX.md +29 -28
- package/_packed_docs/sdk/Notify/351/200/232/347/237/245/346/226/271/346/241/210.md +6 -2
- package/dist/agent-md.d.ts.map +1 -1
- package/dist/agent-md.js +18 -9
- package/dist/agent-md.js.map +1 -1
- package/dist/bundle.js +1084 -272
- package/dist/client/delivery.d.ts +4 -0
- package/dist/client/delivery.d.ts.map +1 -1
- package/dist/client/delivery.js +174 -7
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts.map +1 -1
- package/dist/client/v2-e2ee.js +79 -8
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +27 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +118 -12
- package/dist/client.js.map +1 -1
- package/dist/facades.d.ts +6 -0
- package/dist/facades.d.ts.map +1 -1
- package/dist/facades.js +213 -33
- package/dist/facades.js.map +1 -1
- package/dist/group-index.d.ts +105 -0
- package/dist/group-index.d.ts.map +1 -0
- package/dist/group-index.js +252 -0
- package/dist/group-index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +15 -0
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb-shared.d.ts +7 -1
- package/dist/keystore/indexeddb-shared.d.ts.map +1 -1
- package/dist/keystore/indexeddb-shared.js +63 -2
- package/dist/keystore/indexeddb-shared.js.map +1 -1
- package/dist/keystore/indexeddb-token-store.d.ts +3 -1
- package/dist/keystore/indexeddb-token-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-token-store.js +22 -1
- package/dist/keystore/indexeddb-token-store.js.map +1 -1
- package/dist/tools/cross-sdk-agent.js +3 -1
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +2 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +17 -31
- package/dist/transport.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -27,16 +27,17 @@ P2P `message.*` 的最终投递语义由连接阶段声明的 `delivery_mode`
|
|
|
27
27
|
| [message.recall](#messagerecall) | 撤回消息 |
|
|
28
28
|
| [message.query_online](#messagequery_online) | 批量查询在线状态 |
|
|
29
29
|
|
|
30
|
-
### E2EE 辅助方法(SDK 内部使用)
|
|
31
|
-
|
|
32
|
-
> 以下方法由 SDK E2EE 层自动调用,应用层通常无需直接使用。
|
|
33
|
-
|
|
34
|
-
| 方法 | 说明 |
|
|
35
|
-
|------|------|
|
|
36
|
-
| message.
|
|
37
|
-
| message.
|
|
38
|
-
| message.
|
|
39
|
-
|
|
30
|
+
### E2EE V2 辅助方法(SDK 内部使用)
|
|
31
|
+
|
|
32
|
+
> 以下方法由 SDK E2EE 层自动调用,应用层通常无需直接使用。
|
|
33
|
+
|
|
34
|
+
| 方法 | 说明 |
|
|
35
|
+
|------|------|
|
|
36
|
+
| message.v2.put_peer_pk | 注册/更新当前设备的 P2P SPK(`peer_device_prekey`) |
|
|
37
|
+
| message.v2.bootstrap | 拉取对端活跃设备、设备 IK/SPK、audit recipients 与 wrap 策略 |
|
|
38
|
+
| message.v2.group_bootstrap | Group 服务内部批量拉取成员设备 V2 公钥 |
|
|
39
|
+
|
|
40
|
+
> 旧 `message.e2ee.*` prekey/replay guard RPC 只属于 legacy E2EE 信封兼容路径;当前 SDK 主路径不再直接使用它们。新实现应使用 V2 多设备 wrap,详见 [05-E2EE加密通信](05-E2EE加密通信.md) 和 [E2EE_V2消息通信时序图](E2EE_V2消息通信时序图.md)。
|
|
40
41
|
|
|
41
42
|
## 事件索引
|
|
42
43
|
|
|
@@ -74,7 +75,7 @@ P2P `message.*` 的最终投递语义由连接阶段声明的 `delivery_mode`
|
|
|
74
75
|
|------|------|------|--------|------|
|
|
75
76
|
| `to` | string | 是 | — | 接收方 AID |
|
|
76
77
|
| `payload` | object | 是 | — | 消息内容(任意 JSON 对象) |
|
|
77
|
-
| `type` | string | 否 | — | 信封/封装类型,普通业务消息无需填写;SDK 加密发送时自动使用 `e2ee.
|
|
78
|
+
| `type` | string | 否 | — | 信封/封装类型,普通业务消息无需填写;SDK V2 加密发送时自动使用 `e2ee.p2p_encrypted` |
|
|
78
79
|
| `encrypted` | boolean | 否 | `false` | 底层 RPC 的 E2EE 标记。Python SDK 便捷层通常使用 `encrypt` 入参并由 SDK 自动填充此字段 |
|
|
79
80
|
| `message_id` | string | 否 | — | 幂等键(客户端提供或服务端生成 UUID) |
|
|
80
81
|
| `timestamp` | integer | 否 | — | 客户端时间戳(毫秒)。**服务端忽略此字段,始终使用服务端时间** |
|
|
@@ -96,8 +97,17 @@ P2P `message.*` 的最终投递语义由连接阶段声明的 `delivery_mode`
|
|
|
96
97
|
"message_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
97
98
|
"seq": 42,
|
|
98
99
|
"timestamp": 1234567890000,
|
|
99
|
-
"status": "delivered",
|
|
100
|
-
"delivery_mode": "fanout"
|
|
100
|
+
"status": "delivered",
|
|
101
|
+
"delivery_mode": "fanout",
|
|
102
|
+
"envelope": {
|
|
103
|
+
"from": "alice.agentid.pub",
|
|
104
|
+
"to": "bob.agentid.pub",
|
|
105
|
+
"type": "text",
|
|
106
|
+
"timestamp": 1234567890000,
|
|
107
|
+
"encrypted": false,
|
|
108
|
+
"payload_type": "text"
|
|
109
|
+
},
|
|
110
|
+
"payload": {"type": "text", "text": "Hello!"}
|
|
101
111
|
},
|
|
102
112
|
"id": 1
|
|
103
113
|
}
|
|
@@ -108,9 +118,11 @@ P2P `message.*` 的最终投递语义由连接阶段声明的 `delivery_mode`
|
|
|
108
118
|
| `message_id` | string | 消息 ID |
|
|
109
119
|
| `seq` | integer | 接收方收件箱序号 |
|
|
110
120
|
| `timestamp` | integer | 服务端时间戳(毫秒) |
|
|
111
|
-
| `status` | string | `"sent"` / `"delivered"` / `"duplicate"` |
|
|
112
|
-
| `delivery_mode` | string | 最终生效的连接级投递语义:`fanout` 或 `queue` |
|
|
113
|
-
| `
|
|
121
|
+
| `status` | string | `"sent"` / `"delivered"` / `"duplicate"` |
|
|
122
|
+
| `delivery_mode` | string | 最终生效的连接级投递语义:`fanout` 或 `queue` |
|
|
123
|
+
| `envelope` | object | SDK 回填的发送结果信封,包含发送方、接收方、业务类型、时间戳、加密标志、protected headers 等可转发元数据 |
|
|
124
|
+
| `payload` | object | SDK 回填的应用层业务 payload;裸 RPC 或内部 `_skip_send_result_envelope` 路径可能没有该字段 |
|
|
125
|
+
| `cross_domain` | boolean | 仅跨域投递时出现,当前值为 `true` |
|
|
114
126
|
| `target_issuer` | string | 仅跨域投递时出现,表示目标 issuer |
|
|
115
127
|
|
|
116
128
|
> **duplicate 响应**:当 `message_id` 重复时,若服务端仍缓存首次结果,返回完整首次响应并附加 `"status": "duplicate"`;若缓存已过期,仅返回 `message_id`、`timestamp`、`status`,**不含** `seq` 和 `delivery_mode`。客户端收到 `"duplicate"` 状态时应视为幂等成功,无需重试。
|
|
@@ -141,15 +153,15 @@ result = await client.call("message.send", {
|
|
|
141
153
|
|
|
142
154
|
写入当前发送者针对一个上下文的思考内容。它不是普通消息:不广播、不进 `message.pull`、不占用收件箱 `seq`,只通过 `message.thought.get` 主动读取。
|
|
143
155
|
|
|
144
|
-
SDK 调用时必须走 P2P E2EE。应用层传入明文 `payload`,SDK 会加密成 `e2ee.
|
|
156
|
+
SDK 调用时必须走 P2P E2EE。应用层传入明文 `payload`,SDK 会加密成 V2 `e2ee.p2p_encrypted` 信封、补齐 `thought_id` / `timestamp`,并附加 `client_signature`。裸 WebSocket 客户端若绕过 SDK,至少必须自行完成 V2 envelope、`sender_signature` 和 AAD 生成;`client_signature` 按 Gateway 连接级身份语义携带。
|
|
145
157
|
|
|
146
|
-
存储键为 `sender_aid + peer_aid + context.type + context.id`。其中 `sender_aid` 由认证态派生,`peer_aid` 来自 `to`;`context` 是 thought head 的唯一 selector,推荐使用 `{"type": "run", "id": "run-xxx"}`。同一会话里每个 sender 保留最近 N 个 context 对应的 head,N 由 Message 服务配置 `max_thought_heads_per_sender` 控制,当前默认值为
|
|
158
|
+
存储键为 `sender_aid + peer_aid + context.type + context.id`。其中 `sender_aid` 由认证态派生,`peer_aid` 来自 `to`;`context` 是 thought head 的唯一 selector,推荐使用 `{"type": "run", "id": "run-xxx"}`。同一会话里每个 sender 保留最近 N 个 context 对应的 head,N 由 Message 服务配置 `max_thought_heads_per_sender` 控制,当前默认值为 100;同一个 head 下可追加多条 thought item。
|
|
147
159
|
|
|
148
160
|
### 参数
|
|
149
161
|
|
|
150
162
|
| 参数 | 类型 | 必填 | 说明 |
|
|
151
163
|
|------|------|------|------|
|
|
152
|
-
| `to` | string | 是 | P2P 会话另一方 AID
|
|
164
|
+
| `to` | string | 是 | P2P 会话另一方 AID,不能是群 `group_aid` |
|
|
153
165
|
| `context.type` | string | 是 | 思考的上下文类型,推荐 `run` |
|
|
154
166
|
| `context.id` | string | 是 | 思考的上下文 ID,如 `run_id` |
|
|
155
167
|
| `payload` | object | 是 | SDK 加密前的思考内容;推荐格式见 [09-payload-reference](09-payload-reference.md#thought思考内容) |
|
|
@@ -175,9 +187,9 @@ await client.call("message.thought.put", {
|
|
|
175
187
|
"to": "bob.agentid.pub",
|
|
176
188
|
"context": {"type": "run", "id": "run-xxx"},
|
|
177
189
|
"thought_id": "mt-...",
|
|
178
|
-
"type": "e2ee.
|
|
179
|
-
"encrypted": true,
|
|
180
|
-
"payload": {"type": "e2ee.
|
|
190
|
+
"type": "e2ee.p2p_encrypted",
|
|
191
|
+
"encrypted": true,
|
|
192
|
+
"payload": {"type": "e2ee.p2p_encrypted", "version": "v2", "...": "..."},
|
|
181
193
|
"client_signature": { "...": "..." }
|
|
182
194
|
}
|
|
183
195
|
```
|
|
@@ -251,7 +263,7 @@ result = await client.call("message.thought.get", {
|
|
|
251
263
|
"to": "alice.agentid.pub",
|
|
252
264
|
"payload": {"type": "thought", "text": "需要补一个边界条件"},
|
|
253
265
|
"created_at": 1234567890000,
|
|
254
|
-
"e2ee": {"
|
|
266
|
+
"e2ee": {"version": "v2", "wrap_protocol": "3DH"}
|
|
255
267
|
}
|
|
256
268
|
],
|
|
257
269
|
"updated_at": 1234567890000
|
|
@@ -287,7 +299,7 @@ result = await client.call("message.thought.get", {
|
|
|
287
299
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
288
300
|
|------|------|------|--------|------|
|
|
289
301
|
| `after_seq` | integer | 否 | 0 | 拉取 seq > after_seq 的消息 |
|
|
290
|
-
| `limit` | integer | 否 |
|
|
302
|
+
| `limit` | integer | 否 | 50 | 单次返回上限(最大 50;`pull_max_limit` 配置只能在 1-50 内进一步收紧) |
|
|
291
303
|
| `device_id` | string | 否 | 当前连接实例 | 多实例消费上下文中的设备标识 |
|
|
292
304
|
| `slot_id` | string | 否 | 当前连接实例 | 同一设备下的消费槽位;可用 `/`、`:`、空格表达共享隔离键,如 `evolclaw cli` |
|
|
293
305
|
|
|
@@ -525,12 +537,22 @@ result = await client.call("message.ack", {"seq": 150})
|
|
|
525
537
|
"seq": 42,
|
|
526
538
|
"timestamp": 1234567890000,
|
|
527
539
|
"payload": {"type": "text", "text": "Hello!"},
|
|
528
|
-
"delivery_mode": "queue",
|
|
529
|
-
"encrypted": false
|
|
540
|
+
"delivery_mode": "queue",
|
|
541
|
+
"encrypted": false,
|
|
542
|
+
"proximity": {
|
|
543
|
+
"same_device": false,
|
|
544
|
+
"same_egress_ip": true,
|
|
545
|
+
"same_network": true,
|
|
546
|
+
"basis": "egress_ip",
|
|
547
|
+
"asserted_by": "gateway"
|
|
548
|
+
},
|
|
549
|
+
"same_device": false,
|
|
550
|
+
"same_egress_ip": true,
|
|
551
|
+
"same_network": true
|
|
530
552
|
}
|
|
531
553
|
```
|
|
532
554
|
|
|
533
|
-
SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;信封字段统一放在 `envelope`。`envelope` 只保留可转发的归一化元数据,`from` 由 `from_aid` / `sender_aid` 归一化而来,`timestamp` 由 `created_at` / `t_server` 归一化而来。0.
|
|
555
|
+
SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;信封字段统一放在 `envelope`。`envelope` 只保留可转发的归一化元数据,`from` 由 `from_aid` / `sender_aid` 归一化而来,`timestamp` 由 `created_at` / `t_server` 归一化而来。0.5.x 当前仍保留顶层 `message_id` / `from` / `to` / `seq` / `timestamp` 等兼容别名;新代码应优先通过 `msg["envelope"]["from"]`、`msg["envelope"]["timestamp"]` 等路径访问。`envelope.agent_md.sender` / `envelope.agent_md.group` 是 agent.md 云端版本提示,SDK 会自动观察并写入本地 `remote_etag`。Gateway 可能附加 `proximity` 及 `same_device` / `same_egress_ip` / `same_network`,表示由 Gateway 基于连接上下文判断的近端关系提示,不参与 E2EE AAD 或业务鉴权。
|
|
534
556
|
|
|
535
557
|
### 订阅
|
|
536
558
|
|
|
@@ -564,7 +586,7 @@ client.on("message.received", lambda msg: print(msg["payload"]))
|
|
|
564
586
|
}
|
|
565
587
|
```
|
|
566
588
|
|
|
567
|
-
SDK 交付给应用层的撤回事件同样带 `envelope`。`envelope` 表示撤回 tombstone / 通知自身的信封,不是被撤回原消息的信封;被撤回的原消息继续通过 `message_ids` 表达。`message_id` / `seq` 继续只保留在顶层兼容字段中,不进入 `envelope`。0.
|
|
589
|
+
SDK 交付给应用层的撤回事件同样带 `envelope`。`envelope` 表示撤回 tombstone / 通知自身的信封,不是被撤回原消息的信封;被撤回的原消息继续通过 `message_ids` 表达。`message_id` / `seq` 继续只保留在顶层兼容字段中,不进入 `envelope`。0.5.x 当前仍保留顶层 `message_id` / `from` / `to` / `seq` / `timestamp` 等兼容别名;新代码应优先读取 `envelope` 和 `message_ids`。
|
|
568
590
|
|
|
569
591
|
| 字段 | 类型 | 说明 |
|
|
570
592
|
|------|------|------|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`message.send.params.payload`、`message.thought.put.params.payload`、`group.send.params.payload` 和 `group.thought.put.params.payload` 使用同一套业务负载约定。`payload` 是应用层 JSON 对象,服务端只做大小、JSON 可序列化、信封/封装类型和加密相关的必要检查;业务字段由发送端和接收端协商,服务端不按本文字段做强制校验。
|
|
4
4
|
|
|
5
|
-
示例展示的是 `payload` 片段:P2P 完整请求仍需要在同级传入 `to`;群消息完整请求仍需要在同级传入 `group_id
|
|
5
|
+
示例展示的是 `payload` 片段:P2P 完整请求仍需要在同级传入 `to`;群消息完整请求仍需要在同级传入 `group_id`(兼容参数名,值使用目标态 `group_aid`);思考内容需要在顶层通过 `context.type + context.id` 指定 selector。文本、图片、文件、思考内容等业务消息类型只能放在 `payload.type`;`message.send.params.type` / `message.thought.put.params.type` / `group.send.params.type` / `group.thought.put.params.type` 是信封或封装类型,例如 SDK V2 加密发送时自动填充的 `e2ee.p2p_encrypted` / `e2ee.group_encrypted`。
|
|
6
6
|
|
|
7
7
|
## 类型总览
|
|
8
8
|
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
| 字段 | 所在位置 | 说明 |
|
|
39
39
|
|------|----------|------|
|
|
40
40
|
| `to` | `message.send.params` | P2P 接收方 AID |
|
|
41
|
-
| `group_id` | `group.send.params` 和群消息信封 |
|
|
41
|
+
| `group_id` | `group.send.params` 和群消息信封 | 兼容字段名;值语义为目标态 `group_aid` |
|
|
42
42
|
| `context.type + context.id` | `message.thought.put/get.params` 和 `group.thought.put/get.params` | 思考内容 selector;必填,不要只放在 payload 内 |
|
|
43
43
|
| `protected_headers` / `headers` | `message.send` / `message.thought.put` / `group.send` / `group.thought.put` 参数 | E2EE 信封元数据,类似 HTTP headers;推荐 `protected_headers`,`headers` 仅为兼容别名;SDK 验 `_auth` 后在 `e2ee.protected_headers` 暴露 |
|
|
44
44
|
| `from` / `sender_aid` | 服务端生成的消息信封 | 发送方身份 |
|
|
45
45
|
| `message_id` / `seq` / `timestamp` / `created_at` | 服务端生成或发送参数 | 当前消息 ID、序号和服务端时间 |
|
|
46
46
|
| `encrypted` / `delivery_mode` | 发送参数或连接上下文 | 加密和 P2P 投递语义 |
|
|
47
47
|
| `dispatch_mode` | 群消息信封和 SDK 注入的群消息 payload | 群消息应用层分发模式标签:`broadcast` / `mention`;由群设置决定,不作为 `group.send` 单次入参 |
|
|
48
|
-
| `type` / `message_type` | 发送参数或消息信封 | 信封/封装类型,如 `e2ee.
|
|
48
|
+
| `type` / `message_type` | 发送参数或消息信封 | 信封/封装类型,如 `e2ee.p2p_encrypted` / `e2ee.group_encrypted` |
|
|
49
49
|
| `dispatch` / `duty_state` / `message_dispatch` | `group.send` 响应和群消息事件 | 群消息运行时分发状态和值班分发结果 |
|
|
50
50
|
|
|
51
51
|
`protected_headers` 用于可见但需防篡改的信封元数据,例如 `device_id`、`slot_id`、`sdk_version`。它不属于业务 payload,也不提供机密性;需要端到端保密的上下文仍应放在 `payload.client_context` 或其他 payload 字段内。
|
|
@@ -1202,7 +1202,7 @@ fs 目录节点视图。
|
|
|
1202
1202
|
|
|
1203
1203
|
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
|
1204
1204
|
|------|------|------|------|------|
|
|
1205
|
-
| `group_id` | string | 是 | — |
|
|
1205
|
+
| `group_id` | string | 是 | — | 群组标识兼容字段,值语义为目标态 `group_aid` |
|
|
1206
1206
|
| `group_owner_aid` | string | 是 | — | 群 owner AID |
|
|
1207
1207
|
| `member_aid` | string | 否 | — | 成员 AID(不传=全员) |
|
|
1208
1208
|
| `reason` | string | 否 | `"membership_changed"` | `dissolved` / `membership_changed` |
|
|
@@ -11,10 +11,10 @@ AUN SDK 文档位于 `docs/sdk/`,索引文件 `docs/sdk/INDEX.md` 分三层:
|
|
|
11
11
|
- `AUNClient`:认证、连接、状态机、事件和 RPC。
|
|
12
12
|
- `ServiceProxyClient`:Python SDK 的 Service Proxy provider 侧客户端,负责 Gateway 控制面注册和 proxy-server 数据面隧道注册。
|
|
13
13
|
|
|
14
|
-
业务 RPC 的底层参数见 `09-*-rpc-manual.md`,可通过 `client.call(method, params)` 调用;Storage、Collab、Group FS、Service Proxy 等具备高层门面的能力以对应专项文档为准。`message.send`、`message.thought.put`、`group.send`、`group.thought.put` 的业务 payload 见 `09-payload-reference.md`。在线轻量通知和跨域 federation notify 方案见 `Notify通知方案.md`。
|
|
14
|
+
业务 RPC 的底层参数见 `09-*-rpc-manual.md`,可通过 `client.call(method, params)` 调用;Storage、Collab、Group FS、Service Proxy 等具备高层门面的能力以对应专项文档为准。`message.send`、`message.thought.put`、`group.send`、`group.thought.put` 的业务 payload 见 `09-payload-reference.md`。群组标识以 `group_aid` 为主,`group_id` 只作为兼容参数名;`group.index` 的签名索引、`_meta.group_indexes` 观察和 `expected_index_etag` CAS 详见 `09-group-rpc-manual.md`。在线轻量通知和跨域 federation notify 方案见 `Notify通知方案.md`。
|
|
15
15
|
|
|
16
16
|
Storage 的 SDK VFS、控制面/数据面分离、direct backend 上传下载、类 Linux 权限、mount/symlink 和服务端分层见 `AUN Storage架构设计.md`。
|
|
17
|
-
Group FS 的 `group.fs.*` RPC、`client.group.fs.*` 门面、`aun group fs` CLI、`cp/mv` 语义、群自有区角色 ACL 授权/撤销/查询与 `group_aid` 签名、`parents` 语义、JS string 差异和 memberdata 服务端映射见 `09-group-rpc-manual.md`。Collab 的 `gc`、`reflog`、`revert`、`clone` 及版本化文档/标签语义见 `09-collab-rpc-manual.md`。
|
|
17
|
+
Group FS 的 `group.fs.*` RPC、`client.group.fs.*` 门面、`aun group fs` CLI、`cp/mv` 语义、群自有区角色 ACL 授权/撤销/查询与 `group_aid` 签名、`parents` 语义、JS string 差异和 memberdata 服务端映射见 `09-group-rpc-manual.md`。Collab 的 `gc`、`reflog`、`revert`、`clone` 及版本化文档/标签语义见 `09-collab-rpc-manual.md`。
|
|
18
18
|
|
|
19
19
|
## 渐进式查阅流程
|
|
20
20
|
|
|
@@ -31,10 +31,11 @@ Group FS 的 `group.fs.*` RPC、`client.group.fs.*` 门面、`aun group fs` CLI
|
|
|
31
31
|
- E2EE:默认加密、ProtectedHeaders、P2P / Group V2
|
|
32
32
|
- RPC 与事件:`client.call()`、`client.on()`、`client.notify()`、RPC 手册
|
|
33
33
|
- Storage:SDK VFS、direct backend 数据面、`storage.*` low-level RPC、类 Linux 权限、mount/symlink、Storage Service 分层
|
|
34
|
+
- Group RPC:`group_aid` / `group_id` 兼容、`group.index` 签名索引、`_meta.group_indexes`、`check/get/updateGroupIndex`、`expected_index_etag` CAS(见 `09-group-rpc-manual.md`、`06-API手册.md`)
|
|
34
35
|
- 群文件系统:`group.fs.*`、`client.group.fs.*`、`aun group fs`、`cp/mv` 上传下载、群自有区角色 ACL 与 `group_aid` 签名、`parents`、JS string 差异和 memberdata 服务端映射(见 `09-group-rpc-manual.md`)
|
|
35
36
|
- 协作(collab):`collab.*` 版本化文档、乐观锁 CAS commit、三方合并、标签、GC、reflog、revert(见 `09-collab-rpc-manual.md`)
|
|
36
37
|
- Service Proxy:`ServiceProxyClient`、`proxy.register_services`、proxy-server `register_services`
|
|
37
|
-
- agent.md:`AIDStore.upload_agent_md()`、`AIDStore.download_agent_md()`、`AIDStore.check_agent_md()`
|
|
38
|
+
- agent.md:`AIDStore.upload_agent_md()`、`AIDStore.download_agent_md()`、`AIDStore.check_agent_md()`、Gateway `_meta.agent_md_etags` 被动观察、`requester` / `peer` / `group` 角色
|
|
38
39
|
- 错误处理:Result、异常、错误码、重试
|
|
39
40
|
|
|
40
41
|
### Step 3:读 Layer 3 摘要
|
|
@@ -47,10 +48,10 @@ Group FS 的 `group.fs.*` RPC、`client.group.fs.*` 门面、`aun group fs` CLI
|
|
|
47
48
|
|------|------|------|
|
|
48
49
|
| 01 | [快速开始](01-快速开始.md) | 安装、三主体模型、最小示例 |
|
|
49
50
|
| 02 | [WebSocket协议](02-WebSocket协议.md) | 握手流程、消息格式、裸 WebSocket |
|
|
50
|
-
| 03 | [核心概念](03-核心概念.md) | AID、状态机、认证、E2EE |
|
|
51
|
-
| 04 | [连接与认证](04-连接与认证.md) | AIDStore
|
|
52
|
-
| 05 | [E2EE加密通信](05-E2EE加密通信.md) | E2EE、ProtectedHeaders
|
|
53
|
-
| 06 | [API手册](06-API手册.md) | AIDStore / AID / AUNClient / ServiceProxyClient / 事件 / RPC |
|
|
51
|
+
| 03 | [核心概念](03-核心概念.md) | AID、状态机、认证、E2EE、Group Index 观察模型 |
|
|
52
|
+
| 04 | [连接与认证](04-连接与认证.md) | AIDStore、连接、网关发现、事件、agent.md 自动观察 |
|
|
53
|
+
| 05 | [E2EE加密通信](05-E2EE加密通信.md) | E2EE V2、ProtectedHeaders、agent.md 版本提示、recipient wrap |
|
|
54
|
+
| 06 | [API手册](06-API手册.md) | AIDStore / AID / AUNClient / agent.md / ServiceProxyClient / 事件 / RPC |
|
|
54
55
|
| 07 | [错误处理](07-错误处理.md) | Result、异常、错误码、重试 |
|
|
55
56
|
| 08 | [最佳实践](08-最佳实践.md) | 幂等、多 AID、资源清理、测试数据 |
|
|
56
57
|
| - | [AUN Storage架构设计](<AUN Storage架构设计.md>) | Storage SDK VFS、控制面/数据面分离、类 Linux 权限、mount/symlink、服务端分层 |
|
|
@@ -65,10 +66,12 @@ Group FS 的 `group.fs.*` RPC、`client.group.fs.*` 门面、`aun group fs` CLI
|
|
|
65
66
|
| 首次使用 SDK | [01-快速开始](01-快速开始.md) |
|
|
66
67
|
| 理解新构造入口 | [01-快速开始](01-快速开始.md)、[06-API手册](06-API手册.md) |
|
|
67
68
|
| 注册或加载 AID | [04-连接与认证](04-连接与认证.md) |
|
|
68
|
-
|
|
|
69
|
+
| 发布、下载、检查或排查 agent.md 远端 ETag | [04-连接与认证](04-连接与认证.md)、[06-API手册](06-API手册.md)、[../agent.md/远程agent.md缓存与etag透传方案.md](../agent.md/远程agent.md缓存与etag透传方案.md) |
|
|
69
70
|
| 状态机和重连 | [03-核心概念](03-核心概念.md)、[04-连接与认证](04-连接与认证.md) |
|
|
70
71
|
| 查方法签名 | [06-API手册](06-API手册.md) |
|
|
71
|
-
| 查消息或群组 RPC | 对应 `09-*-rpc-manual.md` |
|
|
72
|
+
| 查消息或群组 RPC | 对应 `09-*-rpc-manual.md` |
|
|
73
|
+
| 查群组标识 `group_aid` / `group_id` 兼容规范 | [09-group-rpc-manual.md](09-group-rpc-manual.md) |
|
|
74
|
+
| 查 group.index 签名索引、版本观察、不同步判断、CAS 更新和 facade | [03-核心概念.md](03-核心概念.md)、[06-API手册.md](06-API手册.md)、[09-group-rpc-manual.md](09-group-rpc-manual.md)、[08-最佳实践.md](08-最佳实践.md) |
|
|
72
75
|
| 查群文件系统 RPC / SDK / CLI 入口、群自有区角色 ACL 授权/撤销/查询、`parents` 和 JS string 差异 | [09-group-rpc-manual.md](09-group-rpc-manual.md)、[06-API手册](06-API手册.md) |
|
|
73
76
|
| 查 Storage 架构、SDK VFS、权限模型、mount/symlink 和上传下载链路 | [AUN Storage架构设计.md](<AUN Storage架构设计.md>) |
|
|
74
77
|
| 查 Storage RPC 参数 | [09-storage-rpc-manual.md](09-storage-rpc-manual.md) |
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
- SDK 默认 `message.send` / `group.send` 为 `encrypt=true`,由 SDK 本地构造 V2 加密 envelope。
|
|
8
8
|
- 显式 `encrypt=false` 时走明文发送;V2 SDK 接收端仍通过 `message.v2.pull` / `group.v2.pull` 合并拉取明文历史行。
|
|
9
9
|
- P2P 加密 envelope 类型为 `e2ee.p2p_encrypted`,通过 `message.send` 提交,服务端按 V2 分流处理。
|
|
10
|
-
- GROUP 加密 envelope 类型为 `e2ee.group_encrypted`,通过 `group.v2.send` 提交。
|
|
11
|
-
- 服务端只做认证、路由、结构校验、密文存储和事件通知,不持有明文 payload,也不执行端到端解密。
|
|
10
|
+
- GROUP 加密 envelope 类型为 `e2ee.group_encrypted`,通过 `group.v2.send` 提交。
|
|
11
|
+
- 服务端只做认证、路由、结构校验、密文存储和事件通知,不持有明文 payload,也不执行端到端解密。
|
|
12
|
+
- 图中的 `group_id` 是 RPC 兼容参数名,传值语义均为规范化后的 `group_aid`(`{base}.{issuer}`)。
|
|
12
13
|
|
|
13
14
|
## V2 设备密钥注册
|
|
14
15
|
|
|
@@ -10,19 +10,19 @@
|
|
|
10
10
|
|------|------|
|
|
11
11
|
| [01-快速开始](01-快速开始.md) | 安装 · 三主体模型 · 最小示例 · 多语言构造 |
|
|
12
12
|
| [02-WebSocket协议](02-WebSocket协议.md) | 握手流程 · JSON-RPC 消息格式 · 裸 WebSocket 示例 |
|
|
13
|
-
| [03-核心概念](03-核心概念.md) | AID · AIDStore · AUNClient · 九态状态机 · E2EE |
|
|
14
|
-
| [04-连接与认证](04-连接与认证.md) | 注册加载 · 认证连接 · 网关发现 · 事件 · agent.md |
|
|
15
|
-
| [05-E2EE加密通信](05-E2EE加密通信.md) | E2EE 消息 · ProtectedHeaders ·
|
|
13
|
+
| [03-核心概念](03-核心概念.md) | AID · AIDStore · AUNClient · 九态状态机 · E2EE · Group Index 观察模型 |
|
|
14
|
+
| [04-连接与认证](04-连接与认证.md) | 注册加载 · 认证连接 · 网关发现 · 事件 · agent.md 自动观察 |
|
|
15
|
+
| [05-E2EE加密通信](05-E2EE加密通信.md) | E2EE V2 消息 · ProtectedHeaders · agent.md 版本提示 · recipient wrap |
|
|
16
16
|
| [E2EE_V2消息通信时序图](E2EE_V2消息通信时序图.md) | V2 P2P/GROUP 明文与加密主链路 |
|
|
17
|
-
| [06-API手册](06-API手册.md) | AIDStore · AID · AUNClient · 事件 · E2EE 高级 API · RPC 索引 |
|
|
17
|
+
| [06-API手册](06-API手册.md) | AIDStore · AID · AUNClient · 事件 · agent.md · E2EE 高级 API · RPC 索引 |
|
|
18
18
|
| [07-错误处理](07-错误处理.md) | Result · 错误类层级 · 错误码 · 重试 |
|
|
19
|
-
| [08-最佳实践](08-最佳实践.md) | 幂等连接 · 多 AID · 资源清理 · 测试数据保护 |
|
|
19
|
+
| [08-最佳实践](08-最佳实践.md) | 幂等连接 · 多 AID · 资源清理 · group.index 更新流程 · 测试数据保护 |
|
|
20
20
|
| [09-payload-reference](09-payload-reference.md) | message / group / thought payload 格式 |
|
|
21
21
|
| [09-message-rpc-manual](09-message-rpc-manual.md) | P2P 消息 RPC |
|
|
22
|
-
| [09-group-rpc-manual](09-group-rpc-manual.md) | 群组 RPC(含 `group.fs.*` 群文件系统 RPC、群自有区角色 ACL 授权/撤销/查询和 `parents` 语义) |
|
|
22
|
+
| [09-group-rpc-manual](09-group-rpc-manual.md) | 群组 RPC(含 `group_aid` / `group_id` 兼容规范、`group.index` 签名索引与 CAS、`group.fs.*` 群文件系统 RPC、群自有区角色 ACL 授权/撤销/查询和 `parents` 语义) |
|
|
23
23
|
| [09-storage-rpc-manual](09-storage-rpc-manual.md) | 存储 RPC(对象 + POSIX VFS / 卷 / 软链 / ACL / token) |
|
|
24
24
|
| [09-collab-rpc-manual](09-collab-rpc-manual.md) | 协作 RPC(版本化文档 / 乐观锁 / 三方合并 / 标签 / GC / reflog / revert) |
|
|
25
|
-
| [group.fs POSIX 化详细设计](../aun-fs/group-fs/group.fs-POSIX化详细设计.md) | `client.group.fs.*` / `aun group fs` / `group.fs.*` 群文件系统设计,含群自有区角色 ACL、`parents` 和 JS string 语义 |
|
|
25
|
+
| [group.fs POSIX 化详细设计](../aun-fs/group-fs/group.fs-POSIX化详细设计.md) | `client.group.fs.*` / `aun group fs` / `group.fs.*` 群文件系统设计,含群自有区角色 ACL、`parents` 和 JS string 语义 |
|
|
26
26
|
| [group.fs POSIX 化分阶段实施计划](../aun-fs/group-fs/group.fs-POSIX化分阶段实施计划.md) | group.fs 重构的 IPO、Step-by-step、用例集、Checklist、验收和回滚 |
|
|
27
27
|
| [AUN Storage架构设计](<AUN Storage架构设计.md>) | Storage SDK VFS、控制面/数据面分离、服务端分层、类 Linux 权限、mount/symlink 与关键时序 |
|
|
28
28
|
| [09-meta-rpc-manual](09-meta-rpc-manual.md) | meta RPC 和信任根 |
|
|
@@ -37,9 +37,10 @@
|
|
|
37
37
|
|
|
38
38
|
### 身份与认证
|
|
39
39
|
|
|
40
|
-
- AID 格式、证书、不可变值对象 → [03-核心概念](03-核心概念.md)
|
|
41
|
-
- `AIDStore.register()` / `load()` / `exists()` / `resolve()` → [04-连接与认证](04-连接与认证.md)、[06-API手册](06-API手册.md)
|
|
42
|
-
-
|
|
40
|
+
- AID 格式、证书、不可变值对象 → [03-核心概念](03-核心概念.md)
|
|
41
|
+
- `AIDStore.register()` / `load()` / `exists()` / `resolve()` → [04-连接与认证](04-连接与认证.md)、[06-API手册](06-API手册.md)
|
|
42
|
+
- agent.md 上传/下载/检查、`remote_etag` / `last_modified` 自动观察、`requester` / `peer` / `group` 角色 → [04-连接与认证](04-连接与认证.md)、[06-API手册](06-API手册.md)、[远程 agent.md 缓存与 ETag 透传方案](../agent.md/远程agent.md缓存与etag透传方案.md)
|
|
43
|
+
- AID 构造约束与多语言入口 → [01-快速开始](01-快速开始.md)、[06-API手册](06-API手册.md)
|
|
43
44
|
- 认证链路和 token → [03-核心概念](03-核心概念.md)、[04-连接与认证](04-连接与认证.md)
|
|
44
45
|
- AID 托管恢复 / 跨设备复制 → [09-custody-api-manual](09-custody-api-manual.md)
|
|
45
46
|
|
|
@@ -53,7 +54,7 @@
|
|
|
53
54
|
### E2EE
|
|
54
55
|
|
|
55
56
|
- E2EE 原理和默认行为 → [03-核心概念](03-核心概念.md)
|
|
56
|
-
- ProtectedHeaders、
|
|
57
|
+
- ProtectedHeaders、agent.md 版本提示边界、V2 recipient wrap、sender_signature / AAD / recipient proof → [05-E2EE加密通信](05-E2EE加密通信.md)
|
|
57
58
|
- V2 P2P/GROUP 时序 → [E2EE_V2消息通信时序图](E2EE_V2消息通信时序图.md)
|
|
58
59
|
- 高级 E2EE API → [06-API手册](06-API手册.md)
|
|
59
60
|
- 解密失败排查 → [07-错误处理](07-错误处理.md)
|
|
@@ -63,10 +64,10 @@
|
|
|
63
64
|
- `client.call()` / `client.on()` → [04-连接与认证](04-连接与认证.md)、[06-API手册](06-API手册.md)
|
|
64
65
|
- `client.notify()` 在线轻量通知、跨域 federation、在线/离线边界 → [Notify通知方案](Notify通知方案.md)
|
|
65
66
|
- Message RPC → [09-message-rpc-manual](09-message-rpc-manual.md)
|
|
66
|
-
- Group RPC
|
|
67
|
+
- Group RPC、`group_aid` / `group_id` 兼容规范、`group.index` 签名索引、`_meta.group_indexes` 观察、`expected_index_etag` CAS、群文件系统 `group.fs.*` 控制面、群自有区角色 ACL 授权/撤销/查询和 `parents` 语义 → [09-group-rpc-manual](09-group-rpc-manual.md)
|
|
67
68
|
- 下一版群文件系统 `group.fs.*`、`client.group.fs.*`、`aun group fs`、`cp/mv` POSIX 化语义和 JS string 差异 → [group.fs POSIX 化详细设计](../aun-fs/group-fs/group.fs-POSIX化详细设计.md)、[分阶段实施计划](../aun-fs/group-fs/group.fs-POSIX化分阶段实施计划.md)
|
|
68
69
|
- Storage 架构、SDK VFS、控制面/数据面分离、类 Linux 权限和 mount/symlink → [AUN Storage架构设计](<AUN Storage架构设计.md>)
|
|
69
|
-
- Storage RPC(对象 + `storage.fs.*` / `storage.volume.*` / `storage.fs.touch` / 软链 / ACL / token)→ [09-storage-rpc-manual](09-storage-rpc-manual.md)
|
|
70
|
+
- Storage RPC(对象 + `storage.fs.*` / `storage.volume.*` / `storage.fs.touch` / 软链 / ACL / token)→ [09-storage-rpc-manual](09-storage-rpc-manual.md)
|
|
70
71
|
- Collab RPC(`collab.*` 版本化文档、乐观锁、标签、GC、reflog、revert)→ [09-collab-rpc-manual](09-collab-rpc-manual.md)
|
|
71
72
|
- Meta RPC → [09-meta-rpc-manual](09-meta-rpc-manual.md)
|
|
72
73
|
- Stream RPC → [09-stream-rpc-manual](09-stream-rpc-manual.md)
|
|
@@ -92,33 +93,33 @@
|
|
|
92
93
|
|
|
93
94
|
说明 Gateway WebSocket 握手、JSON-RPC 请求/响应/通知格式,以及裸 WebSocket 客户端如何借助 SDK 完成 token 获取。
|
|
94
95
|
|
|
95
|
-
### 03-核心概念
|
|
96
|
-
|
|
97
|
-
解释 AID 身份、三主体职责、device_id / slot_id 隔离键、九态状态机、认证挑战-响应、默认 E2EE
|
|
96
|
+
### 03-核心概念
|
|
97
|
+
|
|
98
|
+
解释 AID 身份、三主体职责、device_id / slot_id 隔离键、九态状态机、认证挑战-响应、默认 E2EE 行为、RPC/事件模型,以及 `group.index` 的 `_meta.group_indexes` 观察、不同步标记和应用层 pull/push 边界。
|
|
98
99
|
|
|
99
100
|
### 04-连接与认证
|
|
100
101
|
|
|
101
|
-
描述 `AIDStore` 注册加载、`AUNClient` 身份加载、显式认证、连接选项、长短连接共存、网关发现、agent.md
|
|
102
|
+
描述 `AIDStore` 注册加载、`AUNClient` 身份加载、显式认证、连接选项、长短连接共存、网关发现、agent.md 上传/下载/检查,以及连接后从 Gateway `_meta.agent_md_etags` 和信封 `agent_md` 自动观察远端版本。
|
|
102
103
|
|
|
103
104
|
### 05-E2EE加密通信
|
|
104
105
|
|
|
105
|
-
覆盖默认加密发送、接收自动解密、ProtectedHeaders、
|
|
106
|
-
|
|
107
|
-
### 06-API手册
|
|
108
|
-
|
|
109
|
-
列出 AIDStore、AID、AUNClient、事件、ServiceProxyClient、E2EE 高级 API 和 RPC 手册索引,包含 Python / TS / JS / Go 的主要命名差异。
|
|
110
|
-
|
|
111
|
-
### 07-错误处理
|
|
106
|
+
覆盖默认加密发送、接收自动解密、E2EE V2 多设备 wrap、ProtectedHeaders、agent.md 版本提示与 E2EE 安全边界、`sender_signature` / AAD / recipient proof、群 E2EE 和高级存储扩展边界。
|
|
112
107
|
|
|
113
|
-
|
|
108
|
+
### 06-API手册
|
|
109
|
+
|
|
110
|
+
列出 AIDStore、AID、AUNClient、事件、agent.md、ServiceProxyClient、E2EE 高级 API、Group Index facade 和 RPC 手册索引,包含 Python / TS / JS / Go 的主要命名差异。
|
|
114
111
|
|
|
115
|
-
###
|
|
112
|
+
### 07-错误处理
|
|
113
|
+
|
|
114
|
+
说明 Result 字典、AUNError 异常层级、错误码映射、重试策略、`group.index etag conflict` CAS 冲突处理和常见错误场景。
|
|
116
115
|
|
|
117
|
-
|
|
116
|
+
### 08-最佳实践
|
|
117
|
+
|
|
118
|
+
给出幂等加载身份、连接、关闭、多 AID 管理、protected_headers、Flow Control、Group Index 更新流程和测试数据保护建议。
|
|
118
119
|
|
|
119
120
|
### 09-*-rpc-manual
|
|
120
121
|
|
|
121
|
-
各业务服务的 RPC 参数、响应和错误语义。Storage、Collab、Group FS、Service Proxy 等明确提供高层门面的能力应优先使用门面;需要精确控制底层参数时再通过 `client.call()` 调用业务 RPC。
|
|
122
|
+
各业务服务的 RPC 参数、响应和错误语义。Group RPC 覆盖 `group.index` 签名索引、`expected_index_etag` CAS 和 `_meta.group_indexes` 观察。Storage、Collab、Group FS、Service Proxy 等明确提供高层门面的能力应优先使用门面;需要精确控制底层参数时再通过 `client.call()` 调用业务 RPC。
|
|
122
123
|
|
|
123
124
|
### AUN Storage架构设计
|
|
124
125
|
|
|
@@ -41,9 +41,11 @@
|
|
|
41
41
|
```python
|
|
42
42
|
await client.notify("notification/client.activity", {"state": "idle"})
|
|
43
43
|
await client.notify("event/app.typing", {"thread_id": "t1"}, to="bob.agentid.pub", ttl_ms=5000)
|
|
44
|
-
await client.notify("event/app.presence", {"state": "active"}, group_id="
|
|
44
|
+
await client.notify("event/app.presence", {"state": "active"}, group_id="g-abc123.agentid.pub")
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
+
> `group_id` 是兼容参数名,传值应使用目标态 `group_aid`。
|
|
48
|
+
|
|
47
49
|
`await client.notify(...)` 只表示 SDK 已尝试把 Notification 帧写入当前 WebSocket,不表示服务端接受、目标在线或对端收到。
|
|
48
50
|
|
|
49
51
|
## 路由模型
|
|
@@ -119,10 +121,12 @@ Gateway 校验发送方认证上下文、payload 大小、TTL、方法名前缀
|
|
|
119
121
|
|
|
120
122
|
### 4. 群在线转发
|
|
121
123
|
|
|
122
|
-
指定 `group_id` 时,SDK 发送 `notification/group.route`。Gateway 调用 Group 服务解析目标成员,Group 服务负责校验成员身份、群状态和权限;Gateway 只按 Group 服务返回的成员 AID 做在线 fanout。
|
|
124
|
+
指定 `group_id` 时,SDK 发送 `notification/group.route`。这里的 `group_id` 是兼容参数名,值使用目标态 `group_aid`。Gateway 调用 Group 服务解析目标成员,Group 服务负责校验成员身份、群状态和权限;Gateway 只按 Group 服务返回的成员 AID 做在线 fanout。
|
|
123
125
|
|
|
124
126
|
群成员包含外域 AID 时,Gateway 会按成员 AID issuer 做 federation 转发。Gateway 不直接跨域解析远端 `group_id`,群权限仍以 Group 服务返回的目标成员集合为准。
|
|
125
127
|
|
|
128
|
+
Gateway 在线推送 notify / event 时会复用 agent.md 元数据注入机制:缓存命中且未被节流时,`_meta.agent_md_etags.group` 表示群自身 `group_aid` / `group_id` 的 agent.md 版本,SDK 会自动观察并更新本地 `remote_etag`。
|
|
129
|
+
|
|
126
130
|
## 在线投递规则
|
|
127
131
|
|
|
128
132
|
- `to=aid`:默认投递该 AID 的所有在线长连接设备。
|
package/dist/agent-md.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-md.d.ts","sourceRoot":"","sources":["../src/agent-md.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-md.d.ts","sourceRoot":"","sources":["../src/agent-md.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-md.js
CHANGED
|
@@ -272,7 +272,7 @@ export class AgentMdManager {
|
|
|
272
272
|
const etags = meta.agent_md_etags;
|
|
273
273
|
if (!isJsonObject(etags))
|
|
274
274
|
return;
|
|
275
|
-
for (const key of ['requester', 'peer', 'receiver', 'target', 'to', 'sender', 'from']) {
|
|
275
|
+
for (const key of ['requester', 'peer', 'group', 'receiver', 'target', 'to', 'sender', 'from']) {
|
|
276
276
|
const item = etags[key];
|
|
277
277
|
if (!isJsonObject(item))
|
|
278
278
|
continue;
|
|
@@ -285,15 +285,24 @@ export class AgentMdManager {
|
|
|
285
285
|
if (!isJsonObject(envelope.agent_md))
|
|
286
286
|
return;
|
|
287
287
|
const agentMd = envelope.agent_md;
|
|
288
|
-
if (
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
288
|
+
if (isJsonObject(agentMd.sender)) {
|
|
289
|
+
const sender = agentMd.sender;
|
|
290
|
+
let senderAid = String(sender.aid ?? '').trim();
|
|
291
|
+
if (!senderAid) {
|
|
292
|
+
const aad = isJsonObject(envelope.aad) ? envelope.aad : {};
|
|
293
|
+
senderAid = String(aad.from ?? envelope.from ?? '').trim();
|
|
294
|
+
}
|
|
295
|
+
await this.observeMeta(senderAid, String(sender.etag ?? '').trim(), String(sender.last_modified ?? sender.lastModified ?? '').trim(), 'envelope.sender');
|
|
296
|
+
}
|
|
297
|
+
if (isJsonObject(agentMd.group)) {
|
|
298
|
+
const group = agentMd.group;
|
|
299
|
+
let groupAid = String(group.aid ?? '').trim();
|
|
300
|
+
if (!groupAid) {
|
|
301
|
+
const aad = isJsonObject(envelope.aad) ? envelope.aad : {};
|
|
302
|
+
groupAid = String(envelope.group_aid ?? envelope.group_id ?? aad.group_aid ?? aad.group_id ?? '').trim();
|
|
303
|
+
}
|
|
304
|
+
await this.observeMeta(groupAid, String(group.etag ?? '').trim(), String(group.last_modified ?? group.lastModified ?? '').trim(), 'envelope.group');
|
|
295
305
|
}
|
|
296
|
-
await this.observeMeta(senderAid, String(sender.etag ?? '').trim(), String(sender.last_modified ?? sender.lastModified ?? '').trim(), 'envelope');
|
|
297
306
|
}
|
|
298
307
|
eventSnapshot() {
|
|
299
308
|
if (!this._localAgentMdEtag && !this._remoteAgentMdEtag)
|