@agentunion/fastaun-browser 0.5.1 → 0.5.2

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 (50) hide show
  1. package/CHANGELOG.md +548 -518
  2. package/_packed_docs/CHANGELOG-validators.md +134 -131
  3. package/_packed_docs/CHANGELOG.md +548 -518
  4. package/_packed_docs/INDEX.md +51 -44
  5. package/_packed_docs/KITE_DOCS_GUIDE.md +19 -16
  6. 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
  7. package/_packed_docs/aun-perf-audit-critical-bugs.md +315 -0
  8. package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +263 -261
  9. package/_packed_docs/cli/CLI/346/211/213/345/206/214.md +328 -328
  10. package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +2 -2
  11. 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
  12. 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
  13. package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +8 -5
  14. package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +18 -19
  15. 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
  16. package/_packed_docs/protocol/08-AUN-E2EE-Group.md +293 -294
  17. package/_packed_docs/protocol/08-AUN-E2EE.md +12 -10
  18. package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +85 -89
  19. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +4 -4
  20. 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
  21. 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
  22. package/_packed_docs/protocol/README.md +4 -4
  23. package/_packed_docs/protocol/aun-docs-guide.md +2 -2
  24. package/_packed_docs/protocol/index.md +4 -4
  25. 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
  26. package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +13 -13
  27. 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
  28. package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +15 -13
  29. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +26 -18
  30. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +33 -34
  31. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +22 -17
  32. package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +11 -7
  33. package/_packed_docs/sdk/09-group-rpc-manual.md +135 -114
  34. package/_packed_docs/sdk/09-message-rpc-manual.md +50 -28
  35. package/_packed_docs/sdk/09-payload-reference.md +3 -3
  36. package/_packed_docs/sdk/09-storage-rpc-manual.md +1 -1
  37. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +11 -10
  38. 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
  39. package/_packed_docs/sdk/INDEX.md +15 -14
  40. package/_packed_docs/sdk/Notify/351/200/232/347/237/245/346/226/271/346/241/210.md +6 -2
  41. package/dist/agent-md.d.ts.map +1 -1
  42. package/dist/agent-md.js +18 -9
  43. package/dist/agent-md.js.map +1 -1
  44. package/dist/bundle.js +104 -24
  45. package/dist/client/v2-e2ee.d.ts.map +1 -1
  46. package/dist/client/v2-e2ee.js +78 -7
  47. package/dist/client/v2-e2ee.js.map +1 -1
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.js +1 -1
  50. package/package.json +1 -1
@@ -137,15 +137,17 @@
137
137
 
138
138
  ---
139
139
 
140
- ## Group ID 规范
141
-
142
- `group_id` 的 canonical 形式为 `group.{issuer-domain}/{base}`,例如 `group.agentid.pub/10042`、`group.agentid.pub/team01`、`group.agentid.pub/g-abc123`。服务端接受输入后会规范化为 canonical group_id;响应和内部存储以 canonical 形式为准。SDK 发起 `group.*` 调用时也会对带域旧格式做同等规范化;裸客户端应使用同一规则生成签名和 E2EE AAD,避免同一群的不同别名产生不同材料。
143
-
144
- 兼容输入包括 canonical `group.{issuer-domain}/{base}`、本域简写 `{base}` / `g-{slug}`,以及旧跨域形式 `{base}@issuer-domain`、`{base}.issuer-domain`、`g-{slug}@issuer-domain`、`g-{slug}.issuer-domain`。`base` 支持 5 位及以上小写字母或数字,或 4 到 64 位 `[a-z0-9_-]` 风格名称;旧 `g-` 前缀形式继续兼容,`g-` 后为 4 32 位小写字母或数字。命名群使用 `group_name` 作为 base,规则见 `group.create` 参数说明。
145
-
146
- `group.create` 可以指定自定义 `group_id`,但不能是纯数字(纯数字群号保留给服务端自动分配),且规范化后的 canonical group_id 未被占用;如果已被占用或与旧别名碰撞会返回错误。不指定 `group_id` 时服务端按群号自动分配,并通过唯一约束兜底,发现碰撞会重新生成。
147
-
148
- `https://group.issuer-domain/...` 这类群链接中,host 已携带 issuer,path 中的 `group_id` 使用 base 简写形式,例如 `https://group.agentid.pub/10042/invite/ic-xxx`;旧 `g-` base 群也可以表示为 `https://group.agentid.pub/g-abc123/invite/ic-xxx`。
140
+ ## Group AID / Group ID 兼容规范
141
+
142
+ 目标态群组主标识是 `group_aid`,canonical 形式为 `{base}.{issuer-domain}`,例如 `10042.agentid.pub`、`team01.agentid.pub`、`g-abc123.agentid.pub`。新建群以 `group_aid` 为准;新群的兼容 `group_id` 列值也使用同一个 `group_aid` 字符串。历史 `group_id` 字段名和 RPC 参数名继续保留,但语义上只是兼容字段。
143
+
144
+ SDK 发起 `group.*` 调用时会把传入的 `group_id` / `groupId` / `group_aid` / `groupAid` 统一规范化为 `group_aid`。裸客户端也应使用同一 `group_aid` 生成签名材料和 E2EE AAD,避免同一群的历史别名产生不同材料。服务端响应可能同时返回 `group_id` `group_aid`;新代码应优先读取 `group_aid`,仅兼容旧版本或历史数据时回退读取 `group_id`。
145
+
146
+ 兼容输入包括目标态 `{base}.{issuer-domain}`、本域简写 `{base}` / `g-{slug}`,以及旧格式 `group.{issuer-domain}/{base}`、`{base}@issuer-domain`、`g-{slug}@issuer-domain`、`g-{slug}.{issuer-domain}`。带域的旧输入会转换为 `{base}.{issuer-domain}`;本域简写会在服务端或 SDK 有本域 issuer 配置时补成本域 `group_aid`。`base` 支持 5 位及以上小写字母或数字,或 4 到 64 位 `[a-z0-9_-]` 风格名称;旧 `g-` 前缀形式继续兼容,`g-` 后为 4 到 32 位小写字母或数字。命名群使用 `group_name` 作为 base,规则见 `group.create` 参数说明。
147
+
148
+ `group.create` 的新建语义以 `group_aid` 为准:命名群由 `group_name + issuer` 生成 `group_aid`,自动群由服务端群号生成 `{number}.{issuer}`。`group_id` 参数只作为旧客户端兼容别名;传入时不能是纯数字(纯数字群号保留给服务端自动分配),且规范化后的 `group_aid` 未被占用。如果已被占用或与历史别名碰撞会返回错误。
149
+
150
+ 在 `https://group.issuer-domain/...` 这类群链接中,path 使用单段 `group_aid`,例如 `https://group.agentid.pub/10042.agentid.pub/invite/ic-xxx`、`https://group.agentid.pub/g-abc123.agentid.pub/invite/ic-xxx`。历史 base 简写链接可继续由服务端兼容解析。
149
151
 
150
152
  ---
151
153
 
@@ -153,15 +155,16 @@
153
155
 
154
156
  ### group.create
155
157
 
156
- 创建群组。调用者自动成为 owner。支持创建命名群(传入 `group_name` + `public_key`)。
158
+ 创建群组。调用者自动成为 owner。支持创建命名群(传入 `group_name` + `public_key`)。新建群主标识以 `group_aid` 为准;`group_id` 仅作为兼容字段保留。
157
159
 
158
160
  **参数**:
159
161
 
160
162
  | 参数 | 类型 | 必填 | 说明 |
161
163
  |------|------|------|------|
162
164
  | `name` | string | 是 | 群组显示名称 |
163
- | `group_id` | string | 否 | 自定义群 ID;不提供则服务端自动生成 |
164
- | `group_name` | string | 否 | 命名群标识,4-64 字符,`[a-z0-9_-]+`,不以 `guest`/`g-` 开头。与 `public_key` 同时提供时创建命名群 |
165
+ | `group_aid` | string | 否 | 目标态群 AID;新代码优先使用。传入时会规范化为 `{base}.{issuer-domain}`,不能是纯数字 |
166
+ | `group_id` | string | 否 | 兼容旧客户端的别名;值语义同 `group_aid`,不再推荐新代码使用 |
167
+ | `group_name` | string | 否 | 命名群标识,4-64 字符,`[a-z0-9_-]+`,不以 `guest`/`g-` 开头。与 `public_key` 同时提供时创建命名群,并生成 `{group_name}.{issuer-domain}` |
165
168
  | `public_key` | string | 否 | 命名群公钥(base64 编码),与 `group_name` 同时提供 |
166
169
  | `curve` | string | 否 | 密钥曲线,默认 `"P-256"` |
167
170
  | `visibility` | string | 否 | `"public"` / `"private"`,默认由配置决定 |
@@ -178,7 +181,8 @@
178
181
  ```json
179
182
  {
180
183
  "group": {
181
- "group_id": "group.agentid.pub/10001",
184
+ "group_id": "my-team.agentid.pub",
185
+ "group_aid": "my-team.agentid.pub",
182
186
  "name": "测试群",
183
187
  "owner_aid": "alice.agentid.pub",
184
188
  "creator_aid": "alice.agentid.pub",
@@ -189,10 +193,9 @@
189
193
  "member_count": 1,
190
194
  "message_seq": 0,
191
195
  "event_seq": 0,
192
- "group_url": "https://group.agentid.pub/10001",
193
- "group_aid": "my-team.agentid.pub",
194
- "created_at": 1234567890,
195
- "updated_at": 1234567890
196
+ "group_url": "https://group.agentid.pub/my-team.agentid.pub",
197
+ "created_at": 1234567890000,
198
+ "updated_at": 1234567890000
196
199
  },
197
200
  "aid_cert": {
198
201
  "cert": "-----BEGIN CERTIFICATE-----...",
@@ -204,9 +207,9 @@
204
207
  }
205
208
  ```
206
209
 
207
- > `aid_cert` 仅在命名群创建时返回。`group_aid` `group_url` 仅在命名群时存在。
208
-
209
- **Group ID 格式**:新格式 `group.{issuer}/{group_no_or_name}`,旧格式 `{digits}.{issuer}` API 返回时自动转换。
210
+ > `aid_cert` 仅在命名群创建时返回。`group_aid` 是新代码应使用的主标识;`group_id` 为兼容字段,新群通常与 `group_aid` 相同,历史群可能保留旧存储值。
211
+
212
+ **标识格式**:目标态为 `{base}.{issuer-domain}`。旧格式 `group.{issuer-domain}/{base}`、`{base}@{issuer-domain}` 会在 API 边界转换为目标态 `group_aid`。
210
213
 
211
214
  ### group.bind_aid
212
215
 
@@ -216,7 +219,7 @@
216
219
 
217
220
  | 参数 | 类型 | 必填 | 说明 |
218
221
  |------|------|------|------|
219
- | `group_id` | string | 是 | 群组 ID |
222
+ | `group_id` | string | 是 | 群组标识;兼容参数名,值使用目标态 `group_aid` |
220
223
  | `group_name` | string | 是 | 命名群标识,4-64 字符,`[a-z0-9_-]+` |
221
224
  | `public_key` | string | 是 | 群公钥(base64 编码) |
222
225
  | `curve` | string | 否 | 密钥曲线,默认 `"P-256"` |
@@ -238,7 +241,7 @@
238
241
 
239
242
  | 参数 | 类型 | 必填 | 说明 |
240
243
  |------|------|------|------|
241
- | `group_id` | string | 是 | 群组 ID |
244
+ | `group_id` | string | 是 | 群组标识;兼容参数名,值使用目标态 `group_aid` |
242
245
  | `required` | string[] | 否 | 受限字段声明:`member`、`state`、`e2ee`、`avatar` |
243
246
 
244
247
  **默认响应**:
@@ -253,7 +256,7 @@
253
256
  "status": "active",
254
257
  "description": "技术讨论群",
255
258
  "member_count": 42,
256
- "created_at": 1234567890
259
+ "created_at": 1234567890000
257
260
  }
258
261
  ```
259
262
 
@@ -269,7 +272,7 @@
269
272
 
270
273
  | 参数 | 类型 | 必填 | 说明 |
271
274
  |------|------|------|------|
272
- | `group_id` | string | 是 | 群组 ID |
275
+ | `group_id` | string | 是 | 群组标识;兼容参数名,值使用目标态 `group_aid` |
273
276
  | `name` | string | 否 | 新名称 |
274
277
  | `visibility` | string | 否 | 新可见性 |
275
278
  | `description` | string | 否 | 新描述 |
@@ -298,7 +301,7 @@
298
301
  "name": "项目讨论",
299
302
  "visibility": "private",
300
303
  "member_count": 5,
301
- "updated_at": 1234567890,
304
+ "updated_at": 1234567890000,
302
305
  "role": "owner"
303
306
  }
304
307
  ],
@@ -340,7 +343,7 @@
340
343
 
341
344
  暂停群组。暂停期间不能发送消息。需要 **admin 及以上**权限。
342
345
 
343
- **参数**:`group_id` (string, 必填)
346
+ **参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
344
347
 
345
348
  **响应**:
346
349
 
@@ -357,7 +360,7 @@
357
360
 
358
361
  恢复暂停的群组。需要 **admin 及以上**权限。
359
362
 
360
- **参数**:`group_id` (string, 必填)
363
+ **参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
361
364
 
362
365
  **响应**:
363
366
 
@@ -374,7 +377,7 @@
374
377
 
375
378
  永久解散群组。不可恢复。需要 **owner** 权限。
376
379
 
377
- **参数**:`group_id` (string, 必填)
380
+ **参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
378
381
 
379
382
  **响应**:
380
383
 
@@ -398,7 +401,7 @@
398
401
 
399
402
  | 参数 | 类型 | 必填 | 说明 |
400
403
  |------|------|------|------|
401
- | `group_id` | string | 是 | 群组 ID |
404
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
402
405
  | `aid` | string | 是 | 要添加的 AID |
403
406
  | `role` | string | 否 | `"admin"` / `"member"`,默认 `"member"` |
404
407
  | `member_type` | string | 否 | `"human"` / `"ai"`,默认 `"human"` |
@@ -412,7 +415,7 @@
412
415
  "aid": "bob.agentid.pub",
413
416
  "role": "member",
414
417
  "member_type": "human",
415
- "joined_at": 1234567890
418
+ "joined_at": 1234567890000
416
419
  }
417
420
  }
418
421
  ```
@@ -425,7 +428,7 @@
425
428
 
426
429
  | 参数 | 类型 | 必填 | 默认值 | 说明 |
427
430
  |------|------|------|--------|------|
428
- | `group_id` | string | 是 | — | 群组 ID |
431
+ | `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
429
432
  | `page` | integer | 否 | 1 | 页码 |
430
433
  | `size` | integer | 否 | 50 | 每页条数(最大 200) |
431
434
  | `role` | string | 否 | — | 按角色过滤(owner/admin/member) |
@@ -441,9 +444,9 @@
441
444
  "aid": "alice.agentid.pub",
442
445
  "role": "owner",
443
446
  "member_type": "human",
444
- "joined_at": 1234567890,
447
+ "joined_at": 1234567890000,
445
448
  "last_ack_seq": 100,
446
- "last_pull_at": 1234567890
449
+ "last_pull_at": 1234567890000
447
450
  }
448
451
  ],
449
452
  "total": 1,
@@ -461,7 +464,7 @@
461
464
 
462
465
  | 参数 | 类型 | 必填 | 说明 |
463
466
  |------|------|------|------|
464
- | `group_id` | string | 是 | 群组 ID |
467
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
465
468
  | `aid` | string | 是 | 要踢出的 AID |
466
469
 
467
470
  **响应**:
@@ -477,7 +480,7 @@
477
480
 
478
481
  主动退出群组。owner 不能直接退群,需先转让群主。
479
482
 
480
- **参数**:`group_id` (string, 必填)
483
+ **参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
481
484
 
482
485
  **响应**:
483
486
 
@@ -496,7 +499,7 @@
496
499
 
497
500
  | 参数 | 类型 | 必填 | 说明 |
498
501
  |------|------|------|------|
499
- | `group_id` | string | 是 | 群组 ID |
502
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
500
503
  | `aid` | string | 是 | 目标 AID |
501
504
  | `role` | string | 是 | `"admin"` / `"member"` |
502
505
 
@@ -510,7 +513,7 @@
510
513
  "aid": "bob.agentid.pub",
511
514
  "role": "admin",
512
515
  "member_type": "human",
513
- "joined_at": 1234567890,
516
+ "joined_at": 1234567890000,
514
517
  "last_ack_seq": 0,
515
518
  "last_pull_at": 0
516
519
  },
@@ -529,7 +532,7 @@
529
532
 
530
533
  | 参数 | 类型 | 必填 | 说明 |
531
534
  |------|------|------|------|
532
- | `group_id` | string | 是 | 群组 ID |
535
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
533
536
  | `new_owner` | string | 是 | 新群主 AID(也接受 `aid`) |
534
537
 
535
538
  **响应**:
@@ -555,7 +558,7 @@
555
558
 
556
559
  | 参数 | 类型 | 必填 | 说明 |
557
560
  |------|------|------|------|
558
- | `group_id` | string | 是 | 群组 ID |
561
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
559
562
  | `public_key` | string | 是 | 公钥 DER base64(SPKI 格式) |
560
563
  | `curve` | string | 否 | 曲线名称(默认 P-256) |
561
564
 
@@ -564,7 +567,7 @@
564
567
  ```json
565
568
  {
566
569
  "group": {
567
- "group_id": "my-team",
570
+ "group_id": "my-team.agentid.pub",
568
571
  "group_aid": "my-team.agentid.pub",
569
572
  ...
570
573
  },
@@ -599,7 +602,7 @@
599
602
 
600
603
  | 参数 | 类型 | 必填 | 说明 |
601
604
  |------|------|------|------|
602
- | `group_id` | string | 是 | 群组 ID |
605
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
603
606
  | `group_aid` | string | 否 | 群身份 AID(可选,服务端可推导) |
604
607
  | `old_public_key` | string | 是 | 旧公钥 DER base64 |
605
608
  | `new_public_key` | string | 是 | 新公钥 DER base64 |
@@ -629,7 +632,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
629
632
  ```json
630
633
  {
631
634
  "group": {
632
- "group_id": "my-team",
635
+ "group_id": "my-team.agentid.pub",
633
636
  "group_aid": "my-team.agentid.pub",
634
637
  ...
635
638
  },
@@ -657,7 +660,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
657
660
 
658
661
  | 参数 | 类型 | 必填 | 说明 |
659
662
  |------|------|------|------|
660
- | `group_id` | string | 是 | 群组 ID |
663
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
661
664
  | `subject` | string | 是 | 要封禁的 AID(也接受 `aid`) |
662
665
  | `reason` | string | 否 | 封禁原因 |
663
666
  | `expires_at` | integer | 否 | 过期时间戳(0 = 永久) |
@@ -674,7 +677,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
674
677
  "banned_by": "alice.agentid.pub",
675
678
  "reason": "垃圾消息",
676
679
  "expires_at": 0,
677
- "created_at": 1234567890
680
+ "created_at": 1234567890000
678
681
  }
679
682
  }
680
683
  ```
@@ -683,7 +686,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
683
686
 
684
687
  解除封禁。需要 **admin 及以上**权限。
685
688
 
686
- **参数**:`group_id` (string), `subject` 或 `aid` (string)
689
+ **参数**:`group_id`(string,兼容字段,值使用目标态 `group_aid`),`subject` 或 `aid` (string)
687
690
 
688
691
  **响应**:
689
692
 
@@ -699,7 +702,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
699
702
 
700
703
  获取封禁列表。需要 **admin 及以上**权限。
701
704
 
702
- **参数**:`group_id` (string, 必填)
705
+ **参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
703
706
 
704
707
  **响应**:
705
708
 
@@ -713,7 +716,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
713
716
  "banned_by": "alice.agentid.pub",
714
717
  "reason": "垃圾消息",
715
718
  "expires_at": 0,
716
- "created_at": 1234567890
719
+ "created_at": 1234567890000
717
720
  }
718
721
  ],
719
722
  "total": 1,
@@ -734,7 +737,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
734
737
 
735
738
  | 参数 | 类型 | 必填 | 说明 |
736
739
  |------|------|------|------|
737
- | `group_id` | string | 是 | 群组 ID |
740
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
738
741
  | `message` | string | 否 | 申请留言 |
739
742
  | `answer` | string | 否 | 入群问题的答案 |
740
743
 
@@ -770,8 +773,8 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
770
773
  "message": "请加我",
771
774
  "answer": "...",
772
775
  "status": "pending",
773
- "created_at": 1234567890,
774
- "updated_at": 1234567890,
776
+ "created_at": 1234567890000,
777
+ "updated_at": 1234567890000,
775
778
  "expires_at": 1234654290,
776
779
  "reviewed_by": null,
777
780
  "rejection_reason": null
@@ -787,7 +790,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
787
790
 
788
791
  | 参数 | 类型 | 必填 | 默认值 | 说明 |
789
792
  |------|------|------|--------|------|
790
- | `group_id` | string | 是 | — | 群组 ID |
793
+ | `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
791
794
  | `status` | string | 否 | `"pending"` | `"pending"` / `"approved"` / `"rejected"` |
792
795
  | `page` | integer | 否 | 1 | 页码 |
793
796
  | `size` | integer | 否 | — | 每页数量 |
@@ -803,8 +806,8 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
803
806
  "aid": "carol.agentid.pub",
804
807
  "message": "请加我",
805
808
  "status": "pending",
806
- "created_at": 1234567890,
807
- "updated_at": 1234567890
809
+ "created_at": 1234567890000,
810
+ "updated_at": 1234567890000
808
811
  }
809
812
  ],
810
813
  "total": 1,
@@ -821,7 +824,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
821
824
 
822
825
  | 参数 | 类型 | 必填 | 说明 |
823
826
  |------|------|------|------|
824
- | `group_id` | string | 是 | 群组 ID |
827
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
825
828
  | `aid` | string | 是 | 申请人 AID |
826
829
  | `approve` | boolean | 否 | 批准或拒绝,默认 `true` |
827
830
  | `reason` | string | 否 | 拒绝原因 |
@@ -859,7 +862,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
859
862
 
860
863
  | 参数 | 类型 | 必填 | 说明 |
861
864
  |------|------|------|------|
862
- | `group_id` | string | 是 | 群组 ID |
865
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
863
866
  | `requests` | array | 是 | 审批列表 |
864
867
 
865
868
  `requests` 数组每项:
@@ -891,7 +894,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
891
894
 
892
895
  | 参数 | 类型 | 必填 | 说明 |
893
896
  |------|------|------|------|
894
- | `group_id` | string | 是 | 群组 ID |
897
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
895
898
  | `code` | string | 否 | 自定义邀请码(不提供则自动生成) |
896
899
  | `max_uses` | integer | 否 | 最大使用次数,默认 1,必须 > 0 |
897
900
  | `expires_in_seconds` | integer | 否 | 有效期(秒),默认由 invite_code_ttl_days 配置(7 天) |
@@ -909,7 +912,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
909
912
  "max_uses": 10,
910
913
  "used_count": 0,
911
914
  "status": "active",
912
- "created_at": 1234567890
915
+ "created_at": 1234567890000
913
916
  }
914
917
  }
915
918
  ```
@@ -934,13 +937,13 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
934
937
 
935
938
  列出群组的邀请码。需要 admin 权限。
936
939
 
937
- **参数**:`group_id` (string, 必填)
940
+ **参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
938
941
 
939
942
  ### group.revoke_invite_code
940
943
 
941
944
  撤销邀请码。需要 admin 权限。
942
945
 
943
- **参数**:`group_id` (string), `code` (string)
946
+ **参数**:`group_id`(string,兼容字段,值使用目标态 `group_aid`),`code` (string)
944
947
 
945
948
  ---
946
949
 
@@ -956,7 +959,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
956
959
 
957
960
  | 参数 | 类型 | 必填 | 说明 |
958
961
  |------|------|------|------|
959
- | `group_id` | string | 是 | 群组 ID |
962
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
960
963
  | `settings` | object | 是 | 要写入的设置键值 |
961
964
  | `settings["dispatch_mode"]` | string | 否 | `"broadcast"` / `"mention"`,默认 `"broadcast"` |
962
965
  | `settings["rules.content"]` | string | 否 | 群规则正文 |
@@ -1003,7 +1006,7 @@ await client.call("group.set_settings", {
1003
1006
 
1004
1007
  | 参数 | 类型 | 必填 | 说明 |
1005
1008
  |------|------|------|------|
1006
- | `group_id` | string | 是 | 群组 ID |
1009
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1007
1010
  | `keys` | array | 否 | 只读取指定 key,如 `["dispatch_mode", "rules.content"]` |
1008
1011
 
1009
1012
  **响应**:
@@ -1029,7 +1032,7 @@ await client.call("group.set_settings", {
1029
1032
 
1030
1033
  | 参数 | 类型 | 必填 | 说明 |
1031
1034
  |------|------|------|------|
1032
- | `group_id` | string | 是 | 群组 ID |
1035
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1033
1036
  | `payload` | object | 否 | 消息内容 |
1034
1037
  | `type` | string | 否 | 信封/封装类型,普通业务消息无需填写;SDK 加密群消息时自动使用 `e2ee.group_encrypted` |
1035
1038
  | `attachments` | array | 否 | 兼容旧接口的顶层附件元数据;推荐把业务附件放入 `payload.attachments` |
@@ -1037,7 +1040,7 @@ await client.call("group.set_settings", {
1037
1040
 
1038
1041
  ### Payload 参考约定
1039
1042
 
1040
- `group.send.params.payload` 的统一业务负载格式见 [09-payload-reference](09-payload-reference.md)。完整群消息请求仍在 `payload` 同级传入 `group_id`;业务类型放在 `payload.type`,不要与 `group.send.params.type` 信封/封装类型混用。
1043
+ `group.send.params.payload` 的统一业务负载格式见 [09-payload-reference](09-payload-reference.md)。完整群消息请求仍在 `payload` 同级传入 `group_id`(兼容参数名,值使用目标态 `group_aid`);业务类型放在 `payload.type`,不要与 `group.send.params.type` 信封/封装类型混用。
1041
1044
 
1042
1045
  `protected_headers` 只在 SDK 加密路径生效;裸 RPC 发送明文或已加密信封时,调用方需自行遵守 [05-E2EE加密通信](05-E2EE加密通信.md#protectedheaders-与可验证上下文) 的格式和校验规则。
1043
1046
 
@@ -1059,34 +1062,45 @@ await client.call("group.set_settings", {
1059
1062
  },
1060
1063
  "event": { ... },
1061
1064
  "dispatch_mode": "broadcast",
1062
- "dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
1063
- "message_dispatch": { ... }
1064
- }
1065
- ```
1065
+ "dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
1066
+ "message_dispatch": { ... },
1067
+ "envelope": {
1068
+ "from": "alice.agentid.pub",
1069
+ "group_id": "g-abc123.agentid.pub",
1070
+ "type": "text",
1071
+ "timestamp": 1234567890000,
1072
+ "encrypted": true,
1073
+ "payload_type": "text"
1074
+ },
1075
+ "payload": {"type": "text", "text": "Hello"}
1076
+ }
1077
+ ```
1066
1078
 
1067
1079
  | 字段 | 类型 | 说明 |
1068
1080
  |------|------|------|
1069
- | `group_id` | string | 群组 ID |
1081
+ | `group_id` | string | 兼容字段,值语义为目标态 `group_aid` |
1070
1082
  | `message` | object | 消息对象(含 seq、message_id、sender_aid 等) |
1071
1083
  | `event` | object | 关联的群事件对象 |
1072
1084
  | `dispatch_mode` | string | 群消息持久化分发模式标签:`"broadcast"` / `"mention"`;SDK 解密后也会注入到 `payload.dispatch_mode` |
1073
- | `dispatch` | object | 分发策略:`mode` 为 `"broadcast"`(广播全员)或 `"duty"`(值班分发);`reason` 说明原因(如 `"duty_disabled"` / `"active_duty"` / `"no_duty_candidate"` 等) |
1074
- | `duty_state` | object | 可选,值班模式下的当前状态 |
1075
- | `message_dispatch` | object | 运行时分发结果;常见 `status` 包括 `"broadcast"`、`"sent"`、`"queued_batch"`、`"debounced"`、`"skipped"`、`"failed"` |
1085
+ | `dispatch` | object | 分发策略:`mode` 为 `"broadcast"`(广播全员)或 `"duty"`(值班分发);`reason` 说明原因(如 `"duty_disabled"` / `"active_duty"` / `"no_duty_candidate"` 等) |
1086
+ | `duty_state` | object | 可选,值班模式下的当前状态 |
1087
+ | `message_dispatch` | object | 运行时分发结果;常见 `status` 包括 `"broadcast"`、`"sent"`、`"queued_batch"`、`"debounced"`、`"skipped"`、`"failed"` |
1088
+ | `envelope` | object | SDK 回填的发送结果信封,包含发送方、群标识、业务类型、时间戳、加密标志、protected headers 等可转发元数据 |
1089
+ | `payload` | object | SDK 回填的应用层业务 payload;裸 RPC 或内部 `_skip_send_result_envelope` 路径可能没有该字段 |
1076
1090
 
1077
1091
  ### group.thought.put
1078
1092
 
1079
1093
  写入某个发送者针对一个群上下文的思考内容。该内容不是普通群消息:服务端不分配消息 `seq`,不广播,不进入 `group.pull`,不需要 ack,也不持久化;只在内存中保留当前 head。
1080
1094
 
1081
- SDK 调用时必须走群组 E2EE。应用层传入明文 `payload`,SDK 会加密成 `e2ee.group_encrypted` 信封、补齐 `thought_id` / `timestamp`,并附加 `client_signature`。裸 WebSocket 客户端若绕过 SDK,则必须自行完成同等加密和签名。
1095
+ SDK 调用时必须走群组 E2EE。应用层传入明文 `payload`,SDK 会加密成 V2 `e2ee.group_encrypted` 信封、补齐 `thought_id` / `timestamp`,并附加 `client_signature`。裸 WebSocket 客户端若绕过 SDK,至少必须自行完成 V2 envelope、`sender_signature`、AAD 和 state commitment 生成;`client_signature` 按 Gateway 连接级身份语义携带。
1082
1096
 
1083
- 存储键为 `group_id + sender_aid + context.type + context.id`。其中 `sender_aid` 由服务端认证态派生,不能由客户端指定;`context` 是 thought head 的唯一 selector,推荐使用 `{"type": "run", "id": "run-xxx"}`。同一 `(group_id, sender_aid)` 保留最近 N 个 context 对应的 head,N 由群服务配置 `max_thought_heads_per_sender` 控制,当前默认值为 5;同一个 head 下可追加多条 thought item。
1097
+ 存储键为规范化后的 `group_aid + sender_aid + context.type + context.id`。RPC 字段名仍为 `group_id` 以兼容旧客户端,但服务端会先规范化为目标态群标识;`sender_aid` 由服务端认证态派生,不能由客户端指定;`context` 是 thought head 的唯一 selector,推荐使用 `{"type": "run", "id": "run-xxx"}`。同一 `(group_aid, sender_aid)` 保留最近 N 个 context 对应的 head,N 由群服务配置 `max_thought_heads_per_sender` 控制,当前默认值为 100;同一个 head 下可追加多条 thought item。
1084
1098
 
1085
1099
  **参数**:
1086
1100
 
1087
1101
  | 参数 | 类型 | 必填 | 说明 |
1088
1102
  |------|------|------|------|
1089
- | `group_id` | string | 是 | 群组 ID |
1103
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1090
1104
  | `context.type` | string | 是 | 思考的上下文类型,推荐 `run` |
1091
1105
  | `context.id` | string | 是 | 思考的上下文 ID,如 `run_id` |
1092
1106
  | `payload` | object | 是 | SDK 加密前的思考内容;推荐格式见 [09-payload-reference](09-payload-reference.md#thought思考内容) |
@@ -1114,7 +1128,7 @@ await client.call("group.thought.put", {
1114
1128
  "thought_id": "gt-...",
1115
1129
  "type": "e2ee.group_encrypted",
1116
1130
  "encrypted": true,
1117
- "payload": {"type": "e2ee.group_encrypted", "...": "..."},
1131
+ "payload": {"type": "e2ee.group_encrypted", "version": "v2", "...": "..."},
1118
1132
  "client_signature": { "...": "..." }
1119
1133
  }
1120
1134
  ```
@@ -1140,7 +1154,7 @@ await client.call("group.thought.put", {
1140
1154
 
1141
1155
  | 参数 | 类型 | 必填 | 说明 |
1142
1156
  |------|------|------|------|
1143
- | `group_id` | string | 是 | 群组 ID |
1157
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1144
1158
  | `sender_aid` | string | 是 | thought 作者 AID |
1145
1159
  | `context.type` | string | 是 | 思考的上下文类型,推荐 `run` |
1146
1160
  | `context.id` | string | 是 | 思考的上下文 ID,如 `run_id` |
@@ -1189,9 +1203,9 @@ result = await client.call("group.thought.get", {
1189
1203
 
1190
1204
  | 参数 | 类型 | 必填 | 默认值 | 说明 |
1191
1205
  |------|------|------|--------|------|
1192
- | `group_id` | string | 是 | — | 群组 ID |
1206
+ | `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1193
1207
  | `after_message_seq` | integer | 否 | 0 | 从该消息 seq 之后拉取 |
1194
- | `limit` | integer | 否 | 100 | 最大条数 |
1208
+ | `limit` | integer | 否 | 50 | 最大条数(最大 50;`pull_max_limit` 配置只能进一步收紧) |
1195
1209
  | `device_id` | string | 否 | — | 设备 ID(多设备模式) |
1196
1210
 
1197
1211
  **响应**:
@@ -1202,7 +1216,7 @@ result = await client.call("group.thought.get", {
1202
1216
  "messages": [ ... ],
1203
1217
  "latest_message_seq": 42,
1204
1218
  "has_more": false,
1205
- "limit": 100
1219
+ "limit": 50
1206
1220
  }
1207
1221
  ```
1208
1222
 
@@ -1218,7 +1232,7 @@ result = await client.call("group.thought.get", {
1218
1232
 
1219
1233
  | 参数 | 类型 | 必填 | 说明 |
1220
1234
  |------|------|------|------|
1221
- | `group_id` | string | 是 | 群组 ID |
1235
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1222
1236
  | `device_id` | string | 是 | 设备 ID |
1223
1237
  | `msg_seq` | integer | 是 | 确认到的消息序号 |
1224
1238
 
@@ -1243,7 +1257,7 @@ result = await client.call("group.thought.get", {
1243
1257
 
1244
1258
  | 参数 | 类型 | 必填 | 说明 |
1245
1259
  |------|------|------|------|
1246
- | `group_id` | string | 是 | 群组 ID |
1260
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1247
1261
  | `message_ids` | string[] | 是 | 待撤回消息 ID 列表,最多 100 个(`recall_max_batch`)|
1248
1262
  | `reason` | string | 否 | 可选撤回理由,建议短文本(最长 255 字符)|
1249
1263
 
@@ -1392,7 +1406,7 @@ result = await client.call("group.thought.get", {
1392
1406
 
1393
1407
  获取当前在线成员列表。
1394
1408
 
1395
- **参数**:`group_id` (string, 必填)
1409
+ **参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
1396
1410
 
1397
1411
  **响应**:
1398
1412
 
@@ -1407,10 +1421,10 @@ result = await client.call("group.thought.get", {
1407
1421
  {
1408
1422
  "aid": "alice.agentid.pub",
1409
1423
  "role": "owner",
1410
- "joined_at": 1234567890,
1424
+ "joined_at": 1234567890000,
1411
1425
  "online": true,
1412
1426
  "session_id": "sess_123",
1413
- "last_active_at": 1234567890,
1427
+ "last_active_at": 1234567890000,
1414
1428
  "expire_at": 1234571490
1415
1429
  }
1416
1430
  ]
@@ -1431,12 +1445,12 @@ result = await client.call("group.thought.get", {
1431
1445
 
1432
1446
  | 参数 | 类型 | 必填 | 默认值 | 说明 |
1433
1447
  |------|------|------|--------|------|
1434
- | `group_id` | string | 是 | — | 群组 ID |
1448
+ | `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1435
1449
  | `device_id` | string | 否 | — | 设备 ID,多设备模式必填 |
1436
1450
  | `device_name` | string | 否 | — | 设备名称(首次注册时使用) |
1437
1451
  | `device_type` | string | 否 | — | 设备类型 |
1438
1452
  | `after_event_seq` | integer | 否 | 游标位置 | 从该事件 seq 之后拉取;多设备模式下默认使用设备游标 |
1439
- | `limit` | integer | 否 | 100 | 最大条数(受 `pull_max_limit` 配置限制) |
1453
+ | `limit` | integer | 否 | 50 | 最大条数(最大 50;`pull_max_limit` 配置只能进一步收紧) |
1440
1454
 
1441
1455
  **响应**:
1442
1456
 
@@ -1446,7 +1460,7 @@ result = await client.call("group.thought.get", {
1446
1460
  "events": [ ... ],
1447
1461
  "latest_event_seq": 100,
1448
1462
  "has_more": false,
1449
- "limit": 100,
1463
+ "limit": 50,
1450
1464
  "cursor": {
1451
1465
  "current_seq": 50,
1452
1466
  "join_seq": 0,
@@ -1466,7 +1480,7 @@ result = await client.call("group.thought.get", {
1466
1480
 
1467
1481
  | 参数 | 类型 | 必填 | 说明 |
1468
1482
  |------|------|------|------|
1469
- | `group_id` | string | 是 | 群组 ID |
1483
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1470
1484
  | `device_id` | string | 是 | 设备 ID |
1471
1485
  | `msg_seq` | integer | 是 | 确认到的消息序号 |
1472
1486
 
@@ -1482,7 +1496,7 @@ result = await client.call("group.thought.get", {
1482
1496
 
1483
1497
  | 参数 | 类型 | 必填 | 说明 |
1484
1498
  |------|------|------|------|
1485
- | `group_id` | string | 是 | 群组 ID |
1499
+ | `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
1486
1500
  | `device_id` | string | 是 | 设备 ID |
1487
1501
  | `event_seq` | integer | 是 | 确认到的事件序号 |
1488
1502
 
@@ -1492,7 +1506,7 @@ result = await client.call("group.thought.get", {
1492
1506
 
1493
1507
  列出当前用户在指定群组的所有设备及游标状态。
1494
1508
 
1495
- **参数**:`group_id` (必填)
1509
+ **参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
1496
1510
 
1497
1511
  **响应**:
1498
1512
 
@@ -1515,7 +1529,7 @@ result = await client.call("group.thought.get", {
1515
1529
 
1516
1530
  注销设备游标(清理不再使用的设备记录)。
1517
1531
 
1518
- **参数**:`group_id` (必填), `device_id` (必填)
1532
+ **参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`),`device_id` (必填)
1519
1533
 
1520
1534
  **响应**:`{ "success": true }`
1521
1535
 
@@ -1527,7 +1541,7 @@ result = await client.call("group.thought.get", {
1527
1541
 
1528
1542
  获取管理员列表(owner + admin 角色)。
1529
1543
 
1530
- **参数**:`group_id` (必填)
1544
+ **参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
1531
1545
 
1532
1546
  **响应**:
1533
1547
 
@@ -1538,7 +1552,7 @@ result = await client.call("group.thought.get", {
1538
1552
  "aid": "alice.agentid.pub",
1539
1553
  "role": "owner",
1540
1554
  "member_type": "human",
1541
- "joined_at": 1234567890
1555
+ "joined_at": 1234567890000
1542
1556
  }
1543
1557
  ]
1544
1558
  }
@@ -1548,7 +1562,7 @@ result = await client.call("group.thought.get", {
1548
1562
 
1549
1563
  获取群主 AID。
1550
1564
 
1551
- **参数**:`group_id` (必填)
1565
+ **参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
1552
1566
 
1553
1567
  **响应**:`{ "group_id": "g-abc123.agentid.pub", "owner_aid": "alice.agentid.pub" }`
1554
1568
 
@@ -1556,7 +1570,7 @@ result = await client.call("group.thought.get", {
1556
1570
 
1557
1571
  获取群组综合统计摘要。
1558
1572
 
1559
- **参数**:`group_id` (必填)
1573
+ **参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
1560
1574
 
1561
1575
  **响应**:
1562
1576
 
@@ -1575,8 +1589,8 @@ result = await client.call("group.thought.get", {
1575
1589
  "message_seq": 1000,
1576
1590
  "event_seq": 2000,
1577
1591
  "e2ee_epoch": 3,
1578
- "created_at": 1234567890,
1579
- "updated_at": 1234567890
1592
+ "created_at": 1234567890000,
1593
+ "updated_at": 1234567890000
1580
1594
  }
1581
1595
  ```
1582
1596
 
@@ -1585,7 +1599,7 @@ result = await client.call("group.thought.get", {
1585
1599
 
1586
1600
  刷新成员类型分类统计。
1587
1601
 
1588
- **参数**:`group_id` (必填)
1602
+ **参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
1589
1603
 
1590
1604
  **响应**:
1591
1605
 
@@ -1641,14 +1655,14 @@ result = await client.call("group.thought.get", {
1641
1655
  }
1642
1656
  ```
1643
1657
 
1644
- SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.4.x 兼容期仍保留顶层 `module_id` / `action` / `group_id` / `event_seq` 等别名,下一个大版本 0.5.* 将移除这些顶层别名,请通过 `ev["envelope"]["action"]` 等路径访问。
1658
+ SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.5.x 当前仍保留顶层 `module_id` / `action` / `group_id` / `event_seq` 等兼容别名;新代码应优先通过 `ev["envelope"]["action"]` 等路径访问。
1645
1659
 
1646
1660
  | 字段 | 类型 | 说明 |
1647
1661
  |------|------|------|
1648
1662
  | `envelope` | object | 群事件信封,包含 `module_id`、`action`、`group_id`、`event_seq`、`event_type`、`actor_aid`、`created_at`、`device_id`、`slot_id` 等存在的字段 |
1649
1663
  | `module_id` | string | 固定 `"group"` |
1650
1664
  | `action` | string | 变更类型(见下表) |
1651
- | `group_id` | string | 群组 ID |
1665
+ | `group_id` | string | 兼容字段,值语义为目标态 `group_aid` |
1652
1666
  | `event_seq` | integer | 可选,服务端分配的单调递增序号,用于 SDK 内部保序去重 |
1653
1667
  | `path` | string | 可选,Group FS 相关 action 的节点路径 |
1654
1668
 
@@ -1686,12 +1700,9 @@ SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.4.x
1686
1700
  | `invite_code_revoked` | 邀请码撤销 |
1687
1701
  | `member_banned` | 成员封禁 |
1688
1702
  | `member_unbanned` | 成员解封 |
1689
- | `resource_put` | 资源上传 |
1690
- | `resource_updated` | 资源更新 |
1691
- | `resource_deleted` | 资源删除 |
1692
- | `suspended` | 群组暂停 |
1693
- | `resumed` | 群组恢复 |
1694
- | `dissolved` | 群组解散 |
1703
+ | `suspended` | 群组暂停 |
1704
+ | `resumed` | 群组恢复 |
1705
+ | `dissolved` | 群组解散 |
1695
1706
 
1696
1707
  **订阅**:
1697
1708
 
@@ -1715,11 +1726,21 @@ client.on("group.changed", lambda ev: print(ev["action"]))
1715
1726
  "type": "e2ee.group_encrypted",
1716
1727
  "dispatch_mode": "broadcast",
1717
1728
  "payload": { "type": "e2ee.group_encrypted", "..." : "..." },
1718
- "dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
1719
- "kind": "group.broadcast",
1720
- "member_aids": ["bob.agentid.pub"]
1721
- }
1722
- ```
1729
+ "dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
1730
+ "kind": "group.broadcast",
1731
+ "member_aids": ["bob.agentid.pub"],
1732
+ "proximity": {
1733
+ "same_device": false,
1734
+ "same_egress_ip": true,
1735
+ "same_network": true,
1736
+ "basis": "egress_ip",
1737
+ "asserted_by": "gateway"
1738
+ },
1739
+ "same_device": false,
1740
+ "same_egress_ip": true,
1741
+ "same_network": true
1742
+ }
1743
+ ```
1723
1744
 
1724
1745
  SDK 收到后自动解密 `payload`,解密后的明文消息直接交付用户回调。
1725
1746
 
@@ -1760,7 +1781,7 @@ SDK 收到后自动调用 `group.pull` 拉取最新消息并逐条解密后交
1760
1781
  }
1761
1782
  ```
1762
1783
 
1763
- SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信封字段统一放在 `envelope`。`envelope` 只保留可转发的归一化元数据,`from` 由 `sender_aid` 归一化而来,`timestamp` 由 `created_at` / `t_server` 归一化而来。0.4.x 兼容期仍保留顶层 `group_id` / `seq` / `message_id` / `sender_aid` / `dispatch_mode` 等别名,下一个大版本 0.5.* 将移除这些顶层别名;请通过 `msg["envelope"]["from"]`、`msg["envelope"]["timestamp"]` 等路径访问。
1784
+ SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信封字段统一放在 `envelope`。`envelope` 只保留可转发的归一化元数据,`from` 由 `sender_aid` 归一化而来,`timestamp` 由 `created_at` / `t_server` 归一化而来。0.5.x 当前仍保留顶层 `group_id` / `seq` / `message_id` / `sender_aid` / `dispatch_mode` 等兼容别名;新代码应优先通过 `msg["envelope"]["from"]`、`msg["envelope"]["timestamp"]` 等路径访问。Gateway 可能附加 `proximity` 及 `same_device` / `same_egress_ip` / `same_network`,表示由 Gateway 基于连接上下文判断的近端关系提示,不参与 E2EE AAD 或业务鉴权。
1764
1785
 
1765
1786
  ### event/group.message_recalled
1766
1787
 
@@ -1792,13 +1813,13 @@ SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信
1792
1813
  }
1793
1814
  ```
1794
1815
 
1795
- SDK 交付给应用层的撤回事件同样带 `envelope`。`envelope` 表示当前交付的撤回 tombstone / 通知自身信封,不是被撤回原消息的信封;业务侧被撤回的原消息列表继续使用 `message_ids` / `target_message_seqs`。`message_id` / `seq` 继续只保留在顶层兼容字段中,不进入 `envelope`。0.4.x 兼容期仍保留顶层 `group_id` / `seq` / `message_id` / `sender_aid` 等别名,下一个大版本 0.5.* 将移除这些顶层别名。
1816
+ SDK 交付给应用层的撤回事件同样带 `envelope`。`envelope` 表示当前交付的撤回 tombstone / 通知自身信封,不是被撤回原消息的信封;业务侧被撤回的原消息列表继续使用 `message_ids` / `target_message_seqs`。`message_id` / `seq` 继续只保留在顶层兼容字段中,不进入 `envelope`。0.5.x 当前仍保留顶层 `group_id` / `seq` / `message_id` / `sender_aid` 等兼容别名;新代码应优先读取 `envelope`、`message_ids` 和 `target_message_seqs`。
1796
1817
 
1797
1818
  | 字段 | 类型 | 说明 |
1798
1819
  |------|------|------|
1799
1820
  | `envelope` | object | 撤回 tombstone / 通知自身信封,包含 `group_id`、`from`、`type`、`kind`、`timestamp`、`encrypted`、`context`、`protected_headers` 等存在的字段 |
1800
1821
  | `module_id` | string | 固定 `"group"` |
1801
- | `group_id` | string | 群组 ID |
1822
+ | `group_id` | string | 兼容字段,值语义为目标态 `group_aid` |
1802
1823
  | `seq` | integer | 当前交付的撤回 tombstone / 通知 seq;在线 push 为 notice_seq,原 seq 占位 tombstone 为原消息 seq |
1803
1824
  | `message_id` | string | 当前交付的撤回 tombstone / 通知自己的 message_id |
1804
1825
  | `tombstone_message_id` | string | 兼容别名,等同于撤回 tombstone / 通知自身的 `message_id` |