@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
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
| [group.set_settings](#groupset_settings) | 统一设置群参数(含公告、规则、入群要求、dispatch_mode 等) |
|
|
104
104
|
| [group.get_settings](#groupget_settings) | 统一读取群参数 |
|
|
105
105
|
|
|
106
|
-
**便利方法**:SDK 提供向后兼容的便利方法(`getAnnouncement`/`updateAnnouncement`/`getRules`/`updateRules`/`getJoinRequirements`/`updateJoinRequirements
|
|
106
|
+
**便利方法**:SDK 提供向后兼容的便利方法(`getAnnouncement`/`updateAnnouncement`/`getRules`/`updateRules`/`getJoinRequirements`/`updateJoinRequirements`)。读取方法优先返回 SDK 本地缓存,本地没有对应值时才调用 `get_settings` 初始化;即使观察到远端 etag 不一致也不会自动 pull 远端。indexed 写入方法内部调用 `updateGroupIndex` 生成签名 `group.index` 并通过 `set_settings` CAS 提交。
|
|
107
107
|
|
|
108
108
|
### 群文件系统
|
|
109
109
|
|
|
@@ -137,15 +137,17 @@
|
|
|
137
137
|
|
|
138
138
|
---
|
|
139
139
|
|
|
140
|
-
## Group ID
|
|
141
|
-
|
|
142
|
-
`
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
`group.
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
| `
|
|
164
|
-
| `
|
|
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": "
|
|
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/
|
|
193
|
-
"
|
|
194
|
-
"
|
|
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`
|
|
208
|
-
|
|
209
|
-
|
|
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 | 是 |
|
|
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 | 是 |
|
|
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":
|
|
259
|
+
"created_at": 1234567890000
|
|
257
260
|
}
|
|
258
261
|
```
|
|
259
262
|
|
|
@@ -269,7 +272,7 @@
|
|
|
269
272
|
|
|
270
273
|
| 参数 | 类型 | 必填 | 说明 |
|
|
271
274
|
|------|------|------|------|
|
|
272
|
-
| `group_id` | string | 是 |
|
|
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":
|
|
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
|
|
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
|
|
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
|
|
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 | 是 |
|
|
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":
|
|
418
|
+
"joined_at": 1234567890000
|
|
416
419
|
}
|
|
417
420
|
}
|
|
418
421
|
```
|
|
@@ -425,7 +428,7 @@
|
|
|
425
428
|
|
|
426
429
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
427
430
|
|------|------|------|--------|------|
|
|
428
|
-
| `group_id` | string | 是 | — |
|
|
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":
|
|
447
|
+
"joined_at": 1234567890000,
|
|
445
448
|
"last_ack_seq": 100,
|
|
446
|
-
"last_pull_at":
|
|
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 | 是 |
|
|
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
|
|
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 | 是 |
|
|
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":
|
|
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 | 是 |
|
|
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 | 是 |
|
|
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 | 是 |
|
|
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 | 是 |
|
|
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":
|
|
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
|
|
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
|
|
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":
|
|
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 | 是 |
|
|
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":
|
|
774
|
-
"updated_at":
|
|
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 | 是 | — |
|
|
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":
|
|
807
|
-
"updated_at":
|
|
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 | 是 |
|
|
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 | 是 |
|
|
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 | 是 |
|
|
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":
|
|
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
|
|
940
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
938
941
|
|
|
939
942
|
### group.revoke_invite_code
|
|
940
943
|
|
|
941
944
|
撤销邀请码。需要 admin 权限。
|
|
942
945
|
|
|
943
|
-
**参数**:`group_id
|
|
946
|
+
**参数**:`group_id`(string,兼容字段,值使用目标态 `group_aid`),`code` (string)
|
|
944
947
|
|
|
945
948
|
---
|
|
946
949
|
|
|
@@ -948,7 +951,9 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
|
|
|
948
951
|
|
|
949
952
|
### group.set_settings
|
|
950
953
|
|
|
951
|
-
统一写入群参数。需要 admin 及以上权限。`dispatch_mode` 是群消息的应用层分发模式标签,会随 `group.send` 生成的消息持久化,并由 SDK 在解密后注入到消息顶层和 `payload.dispatch_mode`。
|
|
954
|
+
统一写入群参数。需要 admin 及以上权限。`dispatch_mode` 是群消息的应用层分发模式标签,会随 `group.send` 生成的消息持久化,并由 SDK 在解密后注入到消息顶层和 `payload.dispatch_mode`。
|
|
955
|
+
|
|
956
|
+
`group.index` 是保留设置 key,用于保存 owner/admin SDK 生成并签名的群索引。更新 indexed settings 时必须同包提交新的签名 `group.index`,并通过 `expected_index_etag` 做 CAS。
|
|
952
957
|
|
|
953
958
|
`dispatch_mode` 不是 `group.send` 的单次入参;要修改后续消息的模式,请通过 `group.set_settings` 更新群设置。
|
|
954
959
|
|
|
@@ -956,11 +961,13 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
|
|
|
956
961
|
|
|
957
962
|
| 参数 | 类型 | 必填 | 说明 |
|
|
958
963
|
|------|------|------|------|
|
|
959
|
-
| `group_id` | string | 是 |
|
|
960
|
-
| `settings` | object | 是 | 要写入的设置键值 |
|
|
961
|
-
| `
|
|
962
|
-
| `settings["
|
|
963
|
-
| `settings["
|
|
964
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
965
|
+
| `settings` | object | 是 | 要写入的设置键值 |
|
|
966
|
+
| `expected_index_etag` | string | 写 `group.index` 时必填 | CAS 期望旧 etag;空字符串表示只允许创建首个 `group.index` |
|
|
967
|
+
| `settings["dispatch_mode"]` | string | 否 | `"broadcast"` / `"mention"`,默认 `"broadcast"` |
|
|
968
|
+
| `settings["rules.content"]` | string | 否 | 群规则正文 |
|
|
969
|
+
| `settings["announcement.content"]` | string | 否 | 群公告正文 |
|
|
970
|
+
| `settings["group.index"]` | object | 更新 indexed settings 时必填 | 签名 group index,当前结构至少包含 `body` |
|
|
964
971
|
|
|
965
972
|
**预定义群级参数**:
|
|
966
973
|
|
|
@@ -976,11 +983,28 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
|
|
|
976
983
|
| `join.mode` | string | 按 `visibility` 推导:`public -> open`,`private -> approval` | 入群模式:`"open"` / `"approval"` / `"invite_only"` / `"closed"` |
|
|
977
984
|
| `join.question` | string | `""` | 入群问题 |
|
|
978
985
|
| `join.auto_approve_patterns` | array | `[]` | 自动批准 AID 匹配规则 |
|
|
979
|
-
| `join.max_pending` | integer | `100` | 最大待审批入群申请数 |
|
|
980
|
-
| `dispatch_mode` | string | `"broadcast"` | 群消息分发标签:`"broadcast"` / `"mention"`;未显式设置时 `get_settings` 仍返回默认值 |
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
986
|
+
| `join.max_pending` | integer | `100` | 最大待审批入群申请数 |
|
|
987
|
+
| `dispatch_mode` | string | `"broadcast"` | 群消息分发标签:`"broadcast"` / `"mention"`;未显式设置时 `get_settings` 仍返回默认值 |
|
|
988
|
+
| `group.index` | object | — | 保留 key;签名 JSONL 群索引,由 SDK 生成,服务端只校验、CAS 保存和返回 |
|
|
989
|
+
|
|
990
|
+
**indexed settings**:
|
|
991
|
+
|
|
992
|
+
| key | 说明 |
|
|
993
|
+
|-----|------|
|
|
994
|
+
| `rules.content` / `rules.attachments` | 群规则正文与附件稳定引用 |
|
|
995
|
+
| `announcement.content` / `announcement.attachments` | 群公告正文与附件稳定引用 |
|
|
996
|
+
| `join.mode` / `join.question` / `join.auto_approve_patterns` / `join.max_pending` | 入群要求配置 |
|
|
997
|
+
|
|
998
|
+
写入规则:
|
|
999
|
+
|
|
1000
|
+
- 只更新非 indexed settings 时,继续直接调用 `set_settings`,不需要 `group.index`。
|
|
1001
|
+
- 更新任意 indexed setting 时,必须在同一次 `settings` 中携带签名 `group.index`。
|
|
1002
|
+
- 写入 `group.index` 时必须传 `expected_index_etag`。
|
|
1003
|
+
- 服务端在同一事务内比较当前 `group.index` etag、写 indexed settings、写 `group.index`。
|
|
1004
|
+
- CAS 失败时错误消息包含 `group.index etag conflict`;SDK 的 `updateGroupIndex` 会重新读取当前 index、重建签名并按 `max_attempts` 重试。
|
|
1005
|
+
|
|
1006
|
+
```python
|
|
1007
|
+
await client.call("group.set_settings", {
|
|
984
1008
|
"group_id": "g-abc123.agentid.pub",
|
|
985
1009
|
"settings": {"dispatch_mode": "mention"},
|
|
986
1010
|
})
|
|
@@ -989,33 +1013,86 @@ await client.call("group.set_settings", {
|
|
|
989
1013
|
**响应**:
|
|
990
1014
|
|
|
991
1015
|
```json
|
|
992
|
-
{
|
|
993
|
-
"group_id": "g-abc123.agentid.pub",
|
|
994
|
-
"
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1016
|
+
{
|
|
1017
|
+
"group_id": "g-abc123.agentid.pub",
|
|
1018
|
+
"group_aid": "g-abc123.agentid.pub",
|
|
1019
|
+
"updated_keys": ["dispatch_mode"]
|
|
1020
|
+
}
|
|
1021
|
+
```
|
|
1022
|
+
|
|
1023
|
+
写入 `group.index` 成功时,响应顶层会强制携带 `_meta.group_indexes`:
|
|
1024
|
+
|
|
1025
|
+
```json
|
|
1026
|
+
{
|
|
1027
|
+
"group_id": "g-abc123.agentid.pub",
|
|
1028
|
+
"group_aid": "g-abc123.agentid.pub",
|
|
1029
|
+
"updated_keys": ["announcement.content", "group.index"],
|
|
1030
|
+
"_meta": {
|
|
1031
|
+
"group_indexes": {
|
|
1032
|
+
"g-abc123.agentid.pub": {
|
|
1033
|
+
"etag": "\"sha256:...\"",
|
|
1034
|
+
"last_modified": 1780000000000,
|
|
1035
|
+
"schema": "aun.group.index.v1"
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
```
|
|
1041
|
+
|
|
1042
|
+
`group.index` 的正文格式:
|
|
1043
|
+
|
|
1044
|
+
```jsonl
|
|
1045
|
+
{"type":"index_meta","group_aid":"g-abc123.agentid.pub","etag":"\"sha256:...\"","last_modified":1780000000000,"schema":"aun.group.index.v1","body_hash":"sha256:...","signed_by":"alice.agentid.pub","sig_alg":"ECDSA-P256-SHA256","signature":"base64..."}
|
|
1046
|
+
{"key":"announcement.content","source":"db","etag":"\"sha256:...\"","last_modified":1780000000000}
|
|
1047
|
+
```
|
|
1048
|
+
|
|
1049
|
+
`etag` 和 `body_hash` 都由 index 条目的 canonical JSONL bytes 计算。`signature` 覆盖去掉 `signature` 字段后的 `index_meta` 和正文条目,`signed_by` 必须等于本次 RPC actor AID。服务端不会根据 DB 状态生成 `group.index`。
|
|
1050
|
+
|
|
1051
|
+
### group.get_settings
|
|
1052
|
+
|
|
1053
|
+
统一读取群参数。成员可读;不传 `keys` 时返回核心群资料和 settings 表中的全部设置。未显式设置 `dispatch_mode` 时,服务端仍返回默认值 `"broadcast"`。读取 `keys=["group.index"]` 可从服务端摘取当前签名 `group.index`。
|
|
1001
1054
|
|
|
1002
1055
|
**参数**:
|
|
1003
1056
|
|
|
1004
1057
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1005
1058
|
|------|------|------|------|
|
|
1006
|
-
| `group_id` | string | 是 |
|
|
1007
|
-
| `keys` | array | 否 | 只读取指定 key,如 `["dispatch_mode", "rules.content"]` |
|
|
1059
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1060
|
+
| `keys` | array | 否 | 只读取指定 key,如 `["dispatch_mode", "rules.content"]`;读取 `["group.index"]` 时强制返回 `_meta.group_indexes` |
|
|
1008
1061
|
|
|
1009
1062
|
**响应**:
|
|
1010
1063
|
|
|
1011
1064
|
```json
|
|
1012
|
-
{
|
|
1013
|
-
"group_id": "g-abc123.agentid.pub",
|
|
1014
|
-
"
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1065
|
+
{
|
|
1066
|
+
"group_id": "g-abc123.agentid.pub",
|
|
1067
|
+
"group_aid": "g-abc123.agentid.pub",
|
|
1068
|
+
"settings": [
|
|
1069
|
+
{"key": "dispatch_mode", "value": "broadcast", "updated_at": 1234567890000}
|
|
1070
|
+
]
|
|
1071
|
+
}
|
|
1072
|
+
```
|
|
1073
|
+
|
|
1074
|
+
如果服务端已保存 `group.index`,普通 settings 读取可能在顶层返回 `_meta.group_indexes`。该 meta 受服务端注入频率控制;显式读取 `group.index` 时会强制返回:
|
|
1075
|
+
|
|
1076
|
+
```json
|
|
1077
|
+
{
|
|
1078
|
+
"group_id": "g-abc123.agentid.pub",
|
|
1079
|
+
"group_aid": "g-abc123.agentid.pub",
|
|
1080
|
+
"settings": [
|
|
1081
|
+
{"key": "group.index", "value": {"body": "..."}, "updated_by": "alice.agentid.pub", "updated_at": 1780000000000}
|
|
1082
|
+
],
|
|
1083
|
+
"_meta": {
|
|
1084
|
+
"group_indexes": {
|
|
1085
|
+
"g-abc123.agentid.pub": {
|
|
1086
|
+
"etag": "\"sha256:...\"",
|
|
1087
|
+
"last_modified": 1780000000000,
|
|
1088
|
+
"schema": "aun.group.index.v1"
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
}
|
|
1093
|
+
```
|
|
1094
|
+
|
|
1095
|
+
SDK 观察到 `_meta.group_indexes` 只记录远端 etag,不会自动覆盖本地 index 或业务缓存。etag 不一致只表示本地与观察到的远端版本不同,方向由应用层决定:`checkGroupIndex` 用于检查是否不同步,`getGroupIndex` 用于显式 pull 远端 manifest 并同步本地缓存,`updateGroupIndex` 用于显式 CAS push 本地 indexed settings。
|
|
1019
1096
|
|
|
1020
1097
|
## 消息
|
|
1021
1098
|
|
|
@@ -1029,7 +1106,7 @@ await client.call("group.set_settings", {
|
|
|
1029
1106
|
|
|
1030
1107
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1031
1108
|
|------|------|------|------|
|
|
1032
|
-
| `group_id` | string | 是 |
|
|
1109
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1033
1110
|
| `payload` | object | 否 | 消息内容 |
|
|
1034
1111
|
| `type` | string | 否 | 信封/封装类型,普通业务消息无需填写;SDK 加密群消息时自动使用 `e2ee.group_encrypted` |
|
|
1035
1112
|
| `attachments` | array | 否 | 兼容旧接口的顶层附件元数据;推荐把业务附件放入 `payload.attachments` |
|
|
@@ -1037,7 +1114,7 @@ await client.call("group.set_settings", {
|
|
|
1037
1114
|
|
|
1038
1115
|
### Payload 参考约定
|
|
1039
1116
|
|
|
1040
|
-
`group.send.params.payload` 的统一业务负载格式见 [09-payload-reference](09-payload-reference.md)。完整群消息请求仍在 `payload` 同级传入 `group_id
|
|
1117
|
+
`group.send.params.payload` 的统一业务负载格式见 [09-payload-reference](09-payload-reference.md)。完整群消息请求仍在 `payload` 同级传入 `group_id`(兼容参数名,值使用目标态 `group_aid`);业务类型放在 `payload.type`,不要与 `group.send.params.type` 信封/封装类型混用。
|
|
1041
1118
|
|
|
1042
1119
|
`protected_headers` 只在 SDK 加密路径生效;裸 RPC 发送明文或已加密信封时,调用方需自行遵守 [05-E2EE加密通信](05-E2EE加密通信.md#protectedheaders-与可验证上下文) 的格式和校验规则。
|
|
1043
1120
|
|
|
@@ -1059,34 +1136,45 @@ await client.call("group.set_settings", {
|
|
|
1059
1136
|
},
|
|
1060
1137
|
"event": { ... },
|
|
1061
1138
|
"dispatch_mode": "broadcast",
|
|
1062
|
-
"dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
|
|
1063
|
-
"message_dispatch": { ... }
|
|
1064
|
-
|
|
1065
|
-
|
|
1139
|
+
"dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
|
|
1140
|
+
"message_dispatch": { ... },
|
|
1141
|
+
"envelope": {
|
|
1142
|
+
"from": "alice.agentid.pub",
|
|
1143
|
+
"group_id": "g-abc123.agentid.pub",
|
|
1144
|
+
"type": "text",
|
|
1145
|
+
"timestamp": 1234567890000,
|
|
1146
|
+
"encrypted": true,
|
|
1147
|
+
"payload_type": "text"
|
|
1148
|
+
},
|
|
1149
|
+
"payload": {"type": "text", "text": "Hello"}
|
|
1150
|
+
}
|
|
1151
|
+
```
|
|
1066
1152
|
|
|
1067
1153
|
| 字段 | 类型 | 说明 |
|
|
1068
1154
|
|------|------|------|
|
|
1069
|
-
| `group_id` | string |
|
|
1155
|
+
| `group_id` | string | 兼容字段,值语义为目标态 `group_aid` |
|
|
1070
1156
|
| `message` | object | 消息对象(含 seq、message_id、sender_aid 等) |
|
|
1071
1157
|
| `event` | object | 关联的群事件对象 |
|
|
1072
1158
|
| `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"` |
|
|
1159
|
+
| `dispatch` | object | 分发策略:`mode` 为 `"broadcast"`(广播全员)或 `"duty"`(值班分发);`reason` 说明原因(如 `"duty_disabled"` / `"active_duty"` / `"no_duty_candidate"` 等) |
|
|
1160
|
+
| `duty_state` | object | 可选,值班模式下的当前状态 |
|
|
1161
|
+
| `message_dispatch` | object | 运行时分发结果;常见 `status` 包括 `"broadcast"`、`"sent"`、`"queued_batch"`、`"debounced"`、`"skipped"`、`"failed"` |
|
|
1162
|
+
| `envelope` | object | SDK 回填的发送结果信封,包含发送方、群标识、业务类型、时间戳、加密标志、protected headers 等可转发元数据 |
|
|
1163
|
+
| `payload` | object | SDK 回填的应用层业务 payload;裸 RPC 或内部 `_skip_send_result_envelope` 路径可能没有该字段 |
|
|
1076
1164
|
|
|
1077
1165
|
### group.thought.put
|
|
1078
1166
|
|
|
1079
1167
|
写入某个发送者针对一个群上下文的思考内容。该内容不是普通群消息:服务端不分配消息 `seq`,不广播,不进入 `group.pull`,不需要 ack,也不持久化;只在内存中保留当前 head。
|
|
1080
1168
|
|
|
1081
|
-
SDK 调用时必须走群组 E2EE。应用层传入明文 `payload`,SDK 会加密成 `e2ee.group_encrypted` 信封、补齐 `thought_id` / `timestamp`,并附加 `client_signature`。裸 WebSocket 客户端若绕过 SDK
|
|
1169
|
+
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
1170
|
|
|
1083
|
-
|
|
1171
|
+
存储键为规范化后的 `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
1172
|
|
|
1085
1173
|
**参数**:
|
|
1086
1174
|
|
|
1087
1175
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1088
1176
|
|------|------|------|------|
|
|
1089
|
-
| `group_id` | string | 是 |
|
|
1177
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1090
1178
|
| `context.type` | string | 是 | 思考的上下文类型,推荐 `run` |
|
|
1091
1179
|
| `context.id` | string | 是 | 思考的上下文 ID,如 `run_id` |
|
|
1092
1180
|
| `payload` | object | 是 | SDK 加密前的思考内容;推荐格式见 [09-payload-reference](09-payload-reference.md#thought思考内容) |
|
|
@@ -1114,7 +1202,7 @@ await client.call("group.thought.put", {
|
|
|
1114
1202
|
"thought_id": "gt-...",
|
|
1115
1203
|
"type": "e2ee.group_encrypted",
|
|
1116
1204
|
"encrypted": true,
|
|
1117
|
-
"payload": {"type": "e2ee.group_encrypted", "...": "..."},
|
|
1205
|
+
"payload": {"type": "e2ee.group_encrypted", "version": "v2", "...": "..."},
|
|
1118
1206
|
"client_signature": { "...": "..." }
|
|
1119
1207
|
}
|
|
1120
1208
|
```
|
|
@@ -1140,7 +1228,7 @@ await client.call("group.thought.put", {
|
|
|
1140
1228
|
|
|
1141
1229
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1142
1230
|
|------|------|------|------|
|
|
1143
|
-
| `group_id` | string | 是 |
|
|
1231
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1144
1232
|
| `sender_aid` | string | 是 | thought 作者 AID |
|
|
1145
1233
|
| `context.type` | string | 是 | 思考的上下文类型,推荐 `run` |
|
|
1146
1234
|
| `context.id` | string | 是 | 思考的上下文 ID,如 `run_id` |
|
|
@@ -1189,9 +1277,9 @@ result = await client.call("group.thought.get", {
|
|
|
1189
1277
|
|
|
1190
1278
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
1191
1279
|
|------|------|------|--------|------|
|
|
1192
|
-
| `group_id` | string | 是 | — |
|
|
1280
|
+
| `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1193
1281
|
| `after_message_seq` | integer | 否 | 0 | 从该消息 seq 之后拉取 |
|
|
1194
|
-
| `limit` | integer | 否 |
|
|
1282
|
+
| `limit` | integer | 否 | 50 | 最大条数(最大 50;`pull_max_limit` 配置只能进一步收紧) |
|
|
1195
1283
|
| `device_id` | string | 否 | — | 设备 ID(多设备模式) |
|
|
1196
1284
|
|
|
1197
1285
|
**响应**:
|
|
@@ -1202,7 +1290,7 @@ result = await client.call("group.thought.get", {
|
|
|
1202
1290
|
"messages": [ ... ],
|
|
1203
1291
|
"latest_message_seq": 42,
|
|
1204
1292
|
"has_more": false,
|
|
1205
|
-
"limit":
|
|
1293
|
+
"limit": 50
|
|
1206
1294
|
}
|
|
1207
1295
|
```
|
|
1208
1296
|
|
|
@@ -1218,7 +1306,7 @@ result = await client.call("group.thought.get", {
|
|
|
1218
1306
|
|
|
1219
1307
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1220
1308
|
|------|------|------|------|
|
|
1221
|
-
| `group_id` | string | 是 |
|
|
1309
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1222
1310
|
| `device_id` | string | 是 | 设备 ID |
|
|
1223
1311
|
| `msg_seq` | integer | 是 | 确认到的消息序号 |
|
|
1224
1312
|
|
|
@@ -1243,7 +1331,7 @@ result = await client.call("group.thought.get", {
|
|
|
1243
1331
|
|
|
1244
1332
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1245
1333
|
|------|------|------|------|
|
|
1246
|
-
| `group_id` | string | 是 |
|
|
1334
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1247
1335
|
| `message_ids` | string[] | 是 | 待撤回消息 ID 列表,最多 100 个(`recall_max_batch`)|
|
|
1248
1336
|
| `reason` | string | 否 | 可选撤回理由,建议短文本(最长 255 字符)|
|
|
1249
1337
|
|
|
@@ -1392,7 +1480,7 @@ result = await client.call("group.thought.get", {
|
|
|
1392
1480
|
|
|
1393
1481
|
获取当前在线成员列表。
|
|
1394
1482
|
|
|
1395
|
-
**参数**:`group_id
|
|
1483
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
1396
1484
|
|
|
1397
1485
|
**响应**:
|
|
1398
1486
|
|
|
@@ -1407,10 +1495,10 @@ result = await client.call("group.thought.get", {
|
|
|
1407
1495
|
{
|
|
1408
1496
|
"aid": "alice.agentid.pub",
|
|
1409
1497
|
"role": "owner",
|
|
1410
|
-
"joined_at":
|
|
1498
|
+
"joined_at": 1234567890000,
|
|
1411
1499
|
"online": true,
|
|
1412
1500
|
"session_id": "sess_123",
|
|
1413
|
-
"last_active_at":
|
|
1501
|
+
"last_active_at": 1234567890000,
|
|
1414
1502
|
"expire_at": 1234571490
|
|
1415
1503
|
}
|
|
1416
1504
|
]
|
|
@@ -1431,12 +1519,12 @@ result = await client.call("group.thought.get", {
|
|
|
1431
1519
|
|
|
1432
1520
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
1433
1521
|
|------|------|------|--------|------|
|
|
1434
|
-
| `group_id` | string | 是 | — |
|
|
1522
|
+
| `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1435
1523
|
| `device_id` | string | 否 | — | 设备 ID,多设备模式必填 |
|
|
1436
1524
|
| `device_name` | string | 否 | — | 设备名称(首次注册时使用) |
|
|
1437
1525
|
| `device_type` | string | 否 | — | 设备类型 |
|
|
1438
1526
|
| `after_event_seq` | integer | 否 | 游标位置 | 从该事件 seq 之后拉取;多设备模式下默认使用设备游标 |
|
|
1439
|
-
| `limit` | integer | 否 |
|
|
1527
|
+
| `limit` | integer | 否 | 50 | 最大条数(最大 50;`pull_max_limit` 配置只能进一步收紧) |
|
|
1440
1528
|
|
|
1441
1529
|
**响应**:
|
|
1442
1530
|
|
|
@@ -1446,7 +1534,7 @@ result = await client.call("group.thought.get", {
|
|
|
1446
1534
|
"events": [ ... ],
|
|
1447
1535
|
"latest_event_seq": 100,
|
|
1448
1536
|
"has_more": false,
|
|
1449
|
-
"limit":
|
|
1537
|
+
"limit": 50,
|
|
1450
1538
|
"cursor": {
|
|
1451
1539
|
"current_seq": 50,
|
|
1452
1540
|
"join_seq": 0,
|
|
@@ -1466,7 +1554,7 @@ result = await client.call("group.thought.get", {
|
|
|
1466
1554
|
|
|
1467
1555
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1468
1556
|
|------|------|------|------|
|
|
1469
|
-
| `group_id` | string | 是 |
|
|
1557
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1470
1558
|
| `device_id` | string | 是 | 设备 ID |
|
|
1471
1559
|
| `msg_seq` | integer | 是 | 确认到的消息序号 |
|
|
1472
1560
|
|
|
@@ -1482,7 +1570,7 @@ result = await client.call("group.thought.get", {
|
|
|
1482
1570
|
|
|
1483
1571
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1484
1572
|
|------|------|------|------|
|
|
1485
|
-
| `group_id` | string | 是 |
|
|
1573
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1486
1574
|
| `device_id` | string | 是 | 设备 ID |
|
|
1487
1575
|
| `event_seq` | integer | 是 | 确认到的事件序号 |
|
|
1488
1576
|
|
|
@@ -1492,7 +1580,7 @@ result = await client.call("group.thought.get", {
|
|
|
1492
1580
|
|
|
1493
1581
|
列出当前用户在指定群组的所有设备及游标状态。
|
|
1494
1582
|
|
|
1495
|
-
**参数**:`group_id`
|
|
1583
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1496
1584
|
|
|
1497
1585
|
**响应**:
|
|
1498
1586
|
|
|
@@ -1515,7 +1603,7 @@ result = await client.call("group.thought.get", {
|
|
|
1515
1603
|
|
|
1516
1604
|
注销设备游标(清理不再使用的设备记录)。
|
|
1517
1605
|
|
|
1518
|
-
**参数**:`group_id
|
|
1606
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`),`device_id` (必填)
|
|
1519
1607
|
|
|
1520
1608
|
**响应**:`{ "success": true }`
|
|
1521
1609
|
|
|
@@ -1527,7 +1615,7 @@ result = await client.call("group.thought.get", {
|
|
|
1527
1615
|
|
|
1528
1616
|
获取管理员列表(owner + admin 角色)。
|
|
1529
1617
|
|
|
1530
|
-
**参数**:`group_id`
|
|
1618
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1531
1619
|
|
|
1532
1620
|
**响应**:
|
|
1533
1621
|
|
|
@@ -1538,7 +1626,7 @@ result = await client.call("group.thought.get", {
|
|
|
1538
1626
|
"aid": "alice.agentid.pub",
|
|
1539
1627
|
"role": "owner",
|
|
1540
1628
|
"member_type": "human",
|
|
1541
|
-
"joined_at":
|
|
1629
|
+
"joined_at": 1234567890000
|
|
1542
1630
|
}
|
|
1543
1631
|
]
|
|
1544
1632
|
}
|
|
@@ -1548,7 +1636,7 @@ result = await client.call("group.thought.get", {
|
|
|
1548
1636
|
|
|
1549
1637
|
获取群主 AID。
|
|
1550
1638
|
|
|
1551
|
-
**参数**:`group_id`
|
|
1639
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1552
1640
|
|
|
1553
1641
|
**响应**:`{ "group_id": "g-abc123.agentid.pub", "owner_aid": "alice.agentid.pub" }`
|
|
1554
1642
|
|
|
@@ -1556,7 +1644,7 @@ result = await client.call("group.thought.get", {
|
|
|
1556
1644
|
|
|
1557
1645
|
获取群组综合统计摘要。
|
|
1558
1646
|
|
|
1559
|
-
**参数**:`group_id`
|
|
1647
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1560
1648
|
|
|
1561
1649
|
**响应**:
|
|
1562
1650
|
|
|
@@ -1575,8 +1663,8 @@ result = await client.call("group.thought.get", {
|
|
|
1575
1663
|
"message_seq": 1000,
|
|
1576
1664
|
"event_seq": 2000,
|
|
1577
1665
|
"e2ee_epoch": 3,
|
|
1578
|
-
"created_at":
|
|
1579
|
-
"updated_at":
|
|
1666
|
+
"created_at": 1234567890000,
|
|
1667
|
+
"updated_at": 1234567890000
|
|
1580
1668
|
}
|
|
1581
1669
|
```
|
|
1582
1670
|
|
|
@@ -1585,7 +1673,7 @@ result = await client.call("group.thought.get", {
|
|
|
1585
1673
|
|
|
1586
1674
|
刷新成员类型分类统计。
|
|
1587
1675
|
|
|
1588
|
-
**参数**:`group_id`
|
|
1676
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1589
1677
|
|
|
1590
1678
|
**响应**:
|
|
1591
1679
|
|
|
@@ -1641,14 +1729,14 @@ result = await client.call("group.thought.get", {
|
|
|
1641
1729
|
}
|
|
1642
1730
|
```
|
|
1643
1731
|
|
|
1644
|
-
SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.
|
|
1732
|
+
SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.5.x 当前仍保留顶层 `module_id` / `action` / `group_id` / `event_seq` 等兼容别名;新代码应优先通过 `ev["envelope"]["action"]` 等路径访问。
|
|
1645
1733
|
|
|
1646
1734
|
| 字段 | 类型 | 说明 |
|
|
1647
1735
|
|------|------|------|
|
|
1648
1736
|
| `envelope` | object | 群事件信封,包含 `module_id`、`action`、`group_id`、`event_seq`、`event_type`、`actor_aid`、`created_at`、`device_id`、`slot_id` 等存在的字段 |
|
|
1649
1737
|
| `module_id` | string | 固定 `"group"` |
|
|
1650
1738
|
| `action` | string | 变更类型(见下表) |
|
|
1651
|
-
| `group_id` | string |
|
|
1739
|
+
| `group_id` | string | 兼容字段,值语义为目标态 `group_aid` |
|
|
1652
1740
|
| `event_seq` | integer | 可选,服务端分配的单调递增序号,用于 SDK 内部保序去重 |
|
|
1653
1741
|
| `path` | string | 可选,Group FS 相关 action 的节点路径 |
|
|
1654
1742
|
|
|
@@ -1686,12 +1774,9 @@ SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.4.x
|
|
|
1686
1774
|
| `invite_code_revoked` | 邀请码撤销 |
|
|
1687
1775
|
| `member_banned` | 成员封禁 |
|
|
1688
1776
|
| `member_unbanned` | 成员解封 |
|
|
1689
|
-
| `
|
|
1690
|
-
| `
|
|
1691
|
-
| `
|
|
1692
|
-
| `suspended` | 群组暂停 |
|
|
1693
|
-
| `resumed` | 群组恢复 |
|
|
1694
|
-
| `dissolved` | 群组解散 |
|
|
1777
|
+
| `suspended` | 群组暂停 |
|
|
1778
|
+
| `resumed` | 群组恢复 |
|
|
1779
|
+
| `dissolved` | 群组解散 |
|
|
1695
1780
|
|
|
1696
1781
|
**订阅**:
|
|
1697
1782
|
|
|
@@ -1715,11 +1800,21 @@ client.on("group.changed", lambda ev: print(ev["action"]))
|
|
|
1715
1800
|
"type": "e2ee.group_encrypted",
|
|
1716
1801
|
"dispatch_mode": "broadcast",
|
|
1717
1802
|
"payload": { "type": "e2ee.group_encrypted", "..." : "..." },
|
|
1718
|
-
"dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
|
|
1719
|
-
"kind": "group.broadcast",
|
|
1720
|
-
"member_aids": ["bob.agentid.pub"]
|
|
1721
|
-
|
|
1722
|
-
|
|
1803
|
+
"dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
|
|
1804
|
+
"kind": "group.broadcast",
|
|
1805
|
+
"member_aids": ["bob.agentid.pub"],
|
|
1806
|
+
"proximity": {
|
|
1807
|
+
"same_device": false,
|
|
1808
|
+
"same_egress_ip": true,
|
|
1809
|
+
"same_network": true,
|
|
1810
|
+
"basis": "egress_ip",
|
|
1811
|
+
"asserted_by": "gateway"
|
|
1812
|
+
},
|
|
1813
|
+
"same_device": false,
|
|
1814
|
+
"same_egress_ip": true,
|
|
1815
|
+
"same_network": true
|
|
1816
|
+
}
|
|
1817
|
+
```
|
|
1723
1818
|
|
|
1724
1819
|
SDK 收到后自动解密 `payload`,解密后的明文消息直接交付用户回调。
|
|
1725
1820
|
|
|
@@ -1760,7 +1855,7 @@ SDK 收到后自动调用 `group.pull` 拉取最新消息并逐条解密后交
|
|
|
1760
1855
|
}
|
|
1761
1856
|
```
|
|
1762
1857
|
|
|
1763
|
-
SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信封字段统一放在 `envelope`。`envelope` 只保留可转发的归一化元数据,`from` 由 `sender_aid` 归一化而来,`timestamp` 由 `created_at` / `t_server` 归一化而来。0.
|
|
1858
|
+
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
1859
|
|
|
1765
1860
|
### event/group.message_recalled
|
|
1766
1861
|
|
|
@@ -1792,13 +1887,13 @@ SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信
|
|
|
1792
1887
|
}
|
|
1793
1888
|
```
|
|
1794
1889
|
|
|
1795
|
-
SDK 交付给应用层的撤回事件同样带 `envelope`。`envelope` 表示当前交付的撤回 tombstone / 通知自身信封,不是被撤回原消息的信封;业务侧被撤回的原消息列表继续使用 `message_ids` / `target_message_seqs`。`message_id` / `seq` 继续只保留在顶层兼容字段中,不进入 `envelope`。0.
|
|
1890
|
+
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
1891
|
|
|
1797
1892
|
| 字段 | 类型 | 说明 |
|
|
1798
1893
|
|------|------|------|
|
|
1799
1894
|
| `envelope` | object | 撤回 tombstone / 通知自身信封,包含 `group_id`、`from`、`type`、`kind`、`timestamp`、`encrypted`、`context`、`protected_headers` 等存在的字段 |
|
|
1800
1895
|
| `module_id` | string | 固定 `"group"` |
|
|
1801
|
-
| `group_id` | string |
|
|
1896
|
+
| `group_id` | string | 兼容字段,值语义为目标态 `group_aid` |
|
|
1802
1897
|
| `seq` | integer | 当前交付的撤回 tombstone / 通知 seq;在线 push 为 notice_seq,原 seq 占位 tombstone 为原消息 seq |
|
|
1803
1898
|
| `message_id` | string | 当前交付的撤回 tombstone / 通知自己的 message_id |
|
|
1804
1899
|
| `tombstone_message_id` | string | 兼容别名,等同于撤回 tombstone / 通知自身的 `message_id` |
|