@agentunion/fastaun-browser 0.5.19 → 0.5.21
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 +176 -78
- package/_packed_docs/CHANGELOG.md +176 -78
- package/_packed_docs/INDEX.md +288 -269
- package/_packed_docs/KITE_DOCS_GUIDE.md +101 -95
- package/_packed_docs/agent.md/SCHEMA.md +7 -7
- package/_packed_docs/agent.md/working/AID/347/261/273/345/236/213-owner/345/205/263/347/263/273/344/270/216/346/215/242owner/347/274/226/346/216/222/346/226/271/346/241/210.md +530 -0
- package/_packed_docs/agent.md/working/AID/347/261/273/345/236/213-owner/345/205/263/347/263/273/345/256/214/346/225/264/350/256/276/350/256/241/344/270/216/345/256/236/346/226/275/350/256/241/345/210/222.md +685 -0
- package/_packed_docs/agent.md/working/agent.md-schema/344/270/216/347/255/276/345/217/221/351/252/214/347/255/276/346/265/201/347/250/213/346/276/204/346/270/205.md +349 -0
- package/_packed_docs/agent.md/working//346/234/254/345/234/260Docker/346/265/213/350/257/225Bug/346/270/205/345/215/225.md +40 -0
- 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 +11 -11
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +372 -331
- package/_packed_docs/protocol/08-AUN-E2EE.md +17 -12
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +676 -676
- package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +8 -12
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/211.md +445 -0
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.0.md +161 -0
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +666 -0
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2113.0.md +233 -0
- package/_packed_docs/protocol/agent.md/SCHEMA.md +1 -1
- package/_packed_docs/sdk/0.5.21-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +368 -0
- package/_packed_docs/sdk/0.5.21-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +350 -0
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +1 -1
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +5 -1
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +64 -64
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +70 -63
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +43 -40
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +179 -19
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +50 -49
- package/_packed_docs/sdk/09-group-rpc-manual.md +261 -254
- package/_packed_docs/sdk/09-message-rpc-manual.md +253 -160
- package/_packed_docs/sdk/09-storage-rpc-manual.md +18 -26
- package/_packed_docs/sdk/09-/345/207/255/350/257/201/346/234/215/345/212/241RPC/346/211/213/345/206/214.md +71 -0
- package/_packed_docs/sdk/09-/347/273/204/347/273/207/346/234/215/345/212/241RPC/346/211/213/345/206/214.md +88 -0
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +105 -92
- package/_packed_docs/sdk/INDEX.md +197 -167
- package/_packed_docs/sdk/Ownership-SDK/345/256/236/347/216/260/346/214/207/345/215/227.md +169 -0
- package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/227.md +349 -0
- package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +930 -0
- package/_packed_docs/sdk/Ownership-SDK/351/233/206/346/210/220/346/214/207/345/215/227.md +270 -0
- package/_packed_docs/sdk/Ownership2.1-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +363 -0
- package/_packed_docs/sdk/Ownership2.1-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +553 -0
- package/_packed_docs/sdk/Ownership2.1-TDD/345/210/206/351/230/266/346/256/265/345/256/236/346/226/275/350/256/241/345/210/222.md +708 -0
- package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +480 -0
- package/_packed_docs/sdk/Ownership/347/256/241/347/220/206/344/270/223/351/242/230.md +559 -0
- package/_packed_docs/sdk/ProtectedHeaders/347/224/250/346/263/225/344/270/223/351/242/230.md +299 -0
- package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +173 -0
- package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +211 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273SDK/345/256/236/347/216/260/347/247/273/346/244/215/346/214/207/345/215/227.md +331 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273SDK/351/233/206/346/210/220/346/214/207/345/215/227.md +207 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +252 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/345/256/236/346/226/275/350/256/241/345/210/222.md +156 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/346/226/271/346/241/210.md +273 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/350/257/246/347/273/206/350/256/276/350/256/241.md +211 -0
- package/dist/agent-md-schema.d.ts +16 -4
- package/dist/agent-md-schema.d.ts.map +1 -1
- package/dist/agent-md-schema.js +65 -30
- package/dist/agent-md-schema.js.map +1 -1
- package/dist/agent-md.d.ts +35 -3
- package/dist/agent-md.d.ts.map +1 -1
- package/dist/agent-md.js +384 -150
- package/dist/agent-md.js.map +1 -1
- package/dist/aid-store.d.ts +59 -0
- package/dist/aid-store.d.ts.map +1 -1
- package/dist/aid-store.js +202 -16
- package/dist/aid-store.js.map +1 -1
- package/dist/aid.d.ts +4 -1
- package/dist/aid.d.ts.map +1 -1
- package/dist/aid.js +24 -42
- package/dist/aid.js.map +1 -1
- package/dist/auth.d.ts +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +89 -18
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +6410 -1848
- package/dist/cert-utils.d.ts +50 -1
- package/dist/cert-utils.d.ts.map +1 -1
- package/dist/cert-utils.js +123 -56
- package/dist/cert-utils.js.map +1 -1
- package/dist/client/delivery.d.ts +108 -16
- package/dist/client/delivery.d.ts.map +1 -1
- package/dist/client/delivery.js +1411 -184
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts +4 -1
- package/dist/client/rpc-pipeline.d.ts.map +1 -1
- package/dist/client/rpc-pipeline.js +203 -117
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +22 -3
- package/dist/client/v2-e2ee.d.ts.map +1 -1
- package/dist/client/v2-e2ee.js +1312 -684
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +23 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +419 -101
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +8 -6
- package/dist/crypto.js.map +1 -1
- package/dist/events.d.ts +24 -3
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +171 -29
- package/dist/events.js.map +1 -1
- package/dist/facades.d.ts +42 -1
- package/dist/facades.d.ts.map +1 -1
- package/dist/facades.js +368 -12
- package/dist/facades.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +14 -1
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb-identity-store.d.ts +4 -0
- package/dist/keystore/indexeddb-identity-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-identity-store.js +30 -13
- package/dist/keystore/indexeddb-identity-store.js.map +1 -1
- package/dist/keystore/indexeddb-shared.d.ts +19 -2
- package/dist/keystore/indexeddb-shared.d.ts.map +1 -1
- package/dist/keystore/indexeddb-shared.js +193 -6
- package/dist/keystore/indexeddb-shared.js.map +1 -1
- package/dist/keystore/indexeddb-token-store.d.ts +15 -2
- package/dist/keystore/indexeddb-token-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-token-store.js +308 -27
- package/dist/keystore/indexeddb-token-store.js.map +1 -1
- package/dist/org-protocol.d.ts +45 -0
- package/dist/org-protocol.d.ts.map +1 -1
- package/dist/org-protocol.js +827 -21
- package/dist/org-protocol.js.map +1 -1
- package/dist/ownership-v21.d.ts +43 -9
- package/dist/ownership-v21.d.ts.map +1 -1
- package/dist/ownership-v21.js +183 -81
- package/dist/ownership-v21.js.map +1 -1
- package/dist/ownership-workflow.d.ts +36 -1
- package/dist/ownership-workflow.d.ts.map +1 -1
- package/dist/ownership-workflow.js +610 -89
- package/dist/ownership-workflow.js.map +1 -1
- package/dist/seq-tracker.d.ts +2 -0
- package/dist/seq-tracker.d.ts.map +1 -1
- package/dist/seq-tracker.js +3 -2
- package/dist/seq-tracker.js.map +1 -1
- package/dist/tools/cross-sdk-agent.d.ts +61 -3
- package/dist/tools/cross-sdk-agent.d.ts.map +1 -1
- package/dist/tools/cross-sdk-agent.js +524 -45
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +4 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +64 -30
- 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
|
@@ -29,28 +29,28 @@
|
|
|
29
29
|
|
|
30
30
|
| 方法 | 说明 |
|
|
31
31
|
|------|------|
|
|
32
|
-
| [group.add_member](#groupadd_member) | 添加成员 |
|
|
33
|
-
| [group.invite_member](#groupinvite_member) | 创建定向邀请 |
|
|
34
|
-
| [group.list_my_invites](#grouplist_my_invites) | 列出我的定向邀请 |
|
|
35
|
-
| [group.accept_invite](#groupaccept_invite) | 接受定向邀请 |
|
|
36
|
-
| [group.reject_invite](#groupreject_invite) | 拒绝定向邀请 |
|
|
37
|
-
| [group.revoke_invite](#grouprevoke_invite) | 撤回定向邀请 |
|
|
32
|
+
| [group.add_member](#groupadd_member) | 添加成员 |
|
|
33
|
+
| [group.invite_member](#groupinvite_member) | 创建定向邀请 |
|
|
34
|
+
| [group.list_my_invites](#grouplist_my_invites) | 列出我的定向邀请 |
|
|
35
|
+
| [group.accept_invite](#groupaccept_invite) | 接受定向邀请 |
|
|
36
|
+
| [group.reject_invite](#groupreject_invite) | 拒绝定向邀请 |
|
|
37
|
+
| [group.revoke_invite](#grouprevoke_invite) | 撤回定向邀请 |
|
|
38
38
|
| [group.get_members](#groupget_members) | 获取成员列表 |
|
|
39
39
|
| [group.kick](#groupkick) | 踢出成员 |
|
|
40
40
|
| [group.leave](#groupleave) | 主动退群 |
|
|
41
|
-
| [group.set_role](#groupset_role) | 设置角色 |
|
|
42
|
-
| [group.transfer_owner](#grouptransfer_owner) | 转让群主 |
|
|
43
|
-
| [group.complete_transfer](#groupcomplete_transfer) | 完成群主转让与群身份换钥 |
|
|
44
|
-
| [group.bind_group_aid](#groupbind_group_aid) | 为匿名群绑定群身份 |
|
|
41
|
+
| [group.set_role](#groupset_role) | 设置角色 |
|
|
42
|
+
| [group.transfer_owner](#grouptransfer_owner) | 转让群主 |
|
|
43
|
+
| [group.complete_transfer](#groupcomplete_transfer) | 完成群主转让与群身份换钥 |
|
|
44
|
+
| [group.bind_group_aid](#groupbind_group_aid) | 为匿名群绑定群身份 |
|
|
45
45
|
| [group.renew_group_aid](#grouprenew_group_aid) | 轮换群身份密钥 |
|
|
46
|
-
| [group.ban](#groupban) | 封禁成员 |
|
|
47
|
-
| [group.unban](#groupunban) | 解封成员 |
|
|
48
|
-
| [group.get_banlist](#groupget_banlist) | 获取封禁列表 |
|
|
49
|
-
| [group.block](#groupblock) | 屏蔽成员接收群消息 |
|
|
50
|
-
| [group.unblock](#groupunblock) | 取消屏蔽 |
|
|
51
|
-
| [group.get_blocklist](#groupget_blocklist) | 获取屏蔽列表 |
|
|
52
|
-
| [group.report_status](#groupreport_status) | 上报自己的群内状态 |
|
|
53
|
-
| [group.get_member_statuses](#groupget_member_statuses) | 获取群成员状态列表 |
|
|
46
|
+
| [group.ban](#groupban) | 封禁成员 |
|
|
47
|
+
| [group.unban](#groupunban) | 解封成员 |
|
|
48
|
+
| [group.get_banlist](#groupget_banlist) | 获取封禁列表 |
|
|
49
|
+
| [group.block](#groupblock) | 屏蔽成员接收群消息 |
|
|
50
|
+
| [group.unblock](#groupunblock) | 取消屏蔽 |
|
|
51
|
+
| [group.get_blocklist](#groupget_blocklist) | 获取屏蔽列表 |
|
|
52
|
+
| [group.report_status](#groupreport_status) | 上报自己的群内状态 |
|
|
53
|
+
| [group.get_member_statuses](#groupget_member_statuses) | 获取群成员状态列表 |
|
|
54
54
|
|
|
55
55
|
### 入群流程
|
|
56
56
|
|
|
@@ -83,11 +83,11 @@
|
|
|
83
83
|
| [group.pull](#grouppull) | 增量拉取消息 |
|
|
84
84
|
| [group.history](#grouphistory) | 向前只读翻页群消息 |
|
|
85
85
|
| [group.pull_events](#grouppull_events) | 增量拉取事件 |
|
|
86
|
-
| [group.ack](#groupack) | 确认投递消息游标(旧接口,等同 ack_messages) |
|
|
87
|
-
| [group.ack_messages](#groupack_messages) | 确认消息游标 |
|
|
88
|
-
| [group.ack_events](#groupack_events) | 确认事件游标 |
|
|
89
|
-
| [group.read](#groupread) | 上报当前设备的群话题业务已读位置 |
|
|
90
|
-
| [group.read_state](#groupread_state) | 查询当前 AID 的跨设备群已读汇总 |
|
|
86
|
+
| [group.ack](#groupack) | 确认投递消息游标(旧接口,等同 ack_messages) |
|
|
87
|
+
| [group.ack_messages](#groupack_messages) | 确认消息游标 |
|
|
88
|
+
| [group.ack_events](#groupack_events) | 确认事件游标 |
|
|
89
|
+
| [group.read](#groupread) | 上报当前设备的群话题业务已读位置 |
|
|
90
|
+
| [group.read_state](#groupread_state) | 查询当前 AID 的跨设备群已读汇总 |
|
|
91
91
|
|
|
92
92
|
### 多设备管理
|
|
93
93
|
|
|
@@ -171,17 +171,17 @@ SDK 发起 `group.*` 调用时会把传入的 `group_id` / `groupId` / `group_ai
|
|
|
171
171
|
|
|
172
172
|
### 群 agent.md 的 owner 代签与上传
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
新 SDK 群名片 aid 为 group_aid、type=group、owner 为当前群主,entity_cert_fingerprint 为当前群证书指纹;必须省略 ownership、ownership_proof、ownership_release。实体私钥主签,当前 owner token 上传,无需群登录,可选 owner 附签,存在时必须全块验证。取消实体额外 V2 授权头;群证书指纹仍绑定 owner/rekey 代际,完整多签与 CAS 见 [协议 §2.5](../protocol/Ownership协议定义2.1.md#25-grouporg-名片的实体主签与-owner-上传)。
|
|
175
175
|
|
|
176
|
-
管理员的
|
|
176
|
+
管理员的 group.update、group.index 或文件权限不授予现代群名片上传权。NS 新鲜校验当前 owner、生命周期及群当前证书;Group 旧群证书单签、群身份上传始终兼容,仍执行权威检查与文件 CAS,不据此开放 Org。转移完成后新 owner 用新群材料主签并以本人 token 上传;解散后禁止发布。普通 Ownership Facade 对群目标返回 not_applicable。
|
|
177
177
|
|
|
178
|
-
|
|
178
|
+
新 SDK 群名片全部 NS GET/HEAD/PUT 含 fresh 携带 X-AUN-Signature-Format: multi-v1,返回完整多签及对应 ETag;旧客户端按首签投影读取,多块投影不改完整存储,单块保持原文。实体 fresh GET 还必须同时携带 X-AUN-Ownership-Check: 1 和 Cache-Control: no-cache,Check 头才触发 NS 绕 LRU 全块新鲜验证,不进入通用账本;fresh 返回 not_applicable、实体 current/stale、权威 owner/证书指纹;真正 missing 为 404 且带权威头,无 ETag,依赖失败为 503。verified 下载全块验证历史证书和原文,历史验签不能作为当前授权;上传仍校验当前生命周期和证书,实体代际冲突 409、ETag 冲突 412。
|
|
179
179
|
|
|
180
180
|
### group.create
|
|
181
181
|
|
|
182
182
|
创建群组。调用者自动成为 owner,无需额外 Ownership 绑定。支持创建命名群(传入 `group_name` + `public_key`)。owner 本地生成、持有群私钥,服务端只接收公钥;证书导入 owner 本地后按本节 owner 规则发布群名片。新建群主标识以 `group_aid` 为准;`group_id` 仅作为兼容字段保留。
|
|
183
|
-
|
|
184
|
-
四种 SDK 的高层建群接口均支持崩溃恢复。命名群在 RPC 前持久化群密钥,并按 `group_name + public_key` 重放已提交结果;匿名群在 RPC 前持久化群密钥和创建上下文,重试会取回同一数字群并继续 `group_aid` 证书绑定与 `agent.md` 上传。群记录、群主成员、成员索引、入群设置、首个 `group.changed` 事件及匿名创建映射由服务端在同一数据库事务提交;证书服务和存储服务不参与该数据库事务,由 SDK pending 状态和服务端幂等重放恢复。
|
|
183
|
+
|
|
184
|
+
四种 SDK 的高层建群接口均支持崩溃恢复。命名群在 RPC 前持久化群密钥,并按 `group_name + public_key` 重放已提交结果;匿名群在 RPC 前持久化群密钥和创建上下文,重试会取回同一数字群并继续 `group_aid` 证书绑定与 `agent.md` 上传。群记录、群主成员、成员索引、入群设置、首个 `group.changed` 事件及匿名创建映射由服务端在同一数据库事务提交;证书服务和存储服务不参与该数据库事务,由 SDK pending 状态和服务端幂等重放恢复。
|
|
185
185
|
|
|
186
186
|
**参数**:
|
|
187
187
|
|
|
@@ -367,7 +367,7 @@ SDK 发起 `group.*` 调用时会把传入的 `group_id` / `groupId` / `group_ai
|
|
|
367
367
|
|
|
368
368
|
### group.suspend
|
|
369
369
|
|
|
370
|
-
暂停群组。暂停期间 owner/admin 可以继续通过 `group.send`、`group.v2.send` 和 `group.thought.put` 发言;member 禁止发言,入群、邀请、申请审批等准入操作继续拒绝。需要 **admin 及以上**权限。
|
|
370
|
+
暂停群组。暂停期间 owner/admin 可以继续通过 `group.send`、`group.v2.send` 和 `group.thought.put` 发言;member 禁止发言,入群、邀请、申请审批等准入操作继续拒绝。需要 **admin 及以上**权限。
|
|
371
371
|
|
|
372
372
|
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
373
373
|
|
|
@@ -421,7 +421,7 @@ SDK 发起 `group.*` 调用时会把传入的 `group_id` / `groupId` / `group_ai
|
|
|
421
421
|
|
|
422
422
|
### group.add_member
|
|
423
423
|
|
|
424
|
-
添加成员。需要 **owner** 权限;普通指定 AID 入群应使用 `group.invite_member`。若设置 `role=admin`,仍需 owner 权限。
|
|
424
|
+
添加成员。需要 **owner** 权限;普通指定 AID 入群应使用 `group.invite_member`。若设置 `role=admin`,仍需 owner 权限。
|
|
425
425
|
|
|
426
426
|
**参数**:
|
|
427
427
|
|
|
@@ -550,72 +550,72 @@ SDK 发起 `group.*` 调用时会把传入的 `group_id` / `groupId` / `group_ai
|
|
|
550
550
|
}
|
|
551
551
|
```
|
|
552
552
|
|
|
553
|
-
### group.transfer_owner
|
|
554
|
-
|
|
555
|
-
发起两阶段群主转让。需要 owner 权限;该调用只记录待换钥状态,不会立即变更群主。新群主完成 `group.complete_transfer` 后,原 owner 才转为 admin。
|
|
553
|
+
### group.transfer_owner
|
|
554
|
+
|
|
555
|
+
发起两阶段群主转让。需要 owner 权限;该调用只记录待换钥状态,不会立即变更群主。新群主完成 `group.complete_transfer` 后,原 owner 才转为 admin。
|
|
556
556
|
|
|
557
557
|
**参数**:
|
|
558
558
|
|
|
559
559
|
| 参数 | 类型 | 必填 | 说明 |
|
|
560
|
-
|------|------|------|------|
|
|
561
|
-
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
562
|
-
| `group_aid` | string | 否 | 群身份;高层 SDK 会查询并补齐 |
|
|
563
|
-
| `new_owner` | string | 是 | 新群主 AID(也接受 `aid`) |
|
|
564
|
-
| `transfer_auth` | object | 是 | 旧群主使用当前 group_aid 私钥签名的授权,包含 `nonce`、`issued_ms`、`signature` |
|
|
560
|
+
|------|------|------|------|
|
|
561
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
562
|
+
| `group_aid` | string | 否 | 群身份;高层 SDK 会查询并补齐 |
|
|
563
|
+
| `new_owner` | string | 是 | 新群主 AID(也接受 `aid`) |
|
|
564
|
+
| `transfer_auth` | object | 是 | 旧群主使用当前 group_aid 私钥签名的授权,包含 `nonce`、`issued_ms`、`signature` |
|
|
565
565
|
|
|
566
566
|
**响应**:
|
|
567
567
|
|
|
568
568
|
```json
|
|
569
|
-
{
|
|
570
|
-
"status": "pending_rekey",
|
|
571
|
-
"requires_ca_rekey": true,
|
|
572
|
-
"complete_rpc": "group.complete_transfer",
|
|
573
|
-
"group": { ... },
|
|
574
|
-
"group_id": "team.agentid.pub",
|
|
575
|
-
"group_aid": "team.agentid.pub",
|
|
576
|
-
"old_owner": "alice.agentid.pub",
|
|
577
|
-
"new_owner": "bob.agentid.pub",
|
|
578
|
-
"pending_owner_transfer": {
|
|
579
|
-
"status": "pending_rekey",
|
|
580
|
-
"old_owner": "alice.agentid.pub",
|
|
581
|
-
"new_owner": "bob.agentid.pub",
|
|
582
|
-
"group_aid": "team.agentid.pub",
|
|
583
|
-
"transfer_auth": { ... }
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
```
|
|
587
|
-
|
|
588
|
-
四语言 SDK 会在新群主在线收到 `owner_transfer_rekey_pending` 事件,或重连发现本地 pending 状态时自动尝试完成转让。发起方的高层转让方法返回上述 `pending_rekey`,不会等待新群主完成。Python / TypeScript / JavaScript 门面需要传入 `aid_store` / `aidStore` 才执行签名编排;Go 的高层发起入口为 `AUNClient.StartGroupTransfer`,`GroupFacade.TransferOwner` 当前是原始 RPC 门面。
|
|
589
|
-
|
|
590
|
-
### group.complete_transfer
|
|
591
|
-
|
|
569
|
+
{
|
|
570
|
+
"status": "pending_rekey",
|
|
571
|
+
"requires_ca_rekey": true,
|
|
572
|
+
"complete_rpc": "group.complete_transfer",
|
|
573
|
+
"group": { ... },
|
|
574
|
+
"group_id": "team.agentid.pub",
|
|
575
|
+
"group_aid": "team.agentid.pub",
|
|
576
|
+
"old_owner": "alice.agentid.pub",
|
|
577
|
+
"new_owner": "bob.agentid.pub",
|
|
578
|
+
"pending_owner_transfer": {
|
|
579
|
+
"status": "pending_rekey",
|
|
580
|
+
"old_owner": "alice.agentid.pub",
|
|
581
|
+
"new_owner": "bob.agentid.pub",
|
|
582
|
+
"group_aid": "team.agentid.pub",
|
|
583
|
+
"transfer_auth": { ... }
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
四语言 SDK 会在新群主在线收到 `owner_transfer_rekey_pending` 事件,或重连发现本地 pending 状态时自动尝试完成转让。发起方的高层转让方法返回上述 `pending_rekey`,不会等待新群主完成。Python / TypeScript / JavaScript 门面需要传入 `aid_store` / `aidStore` 才执行签名编排;Go 的高层发起入口为 `AUNClient.StartGroupTransfer`,`GroupFacade.TransferOwner` 当前是原始 RPC 门面。
|
|
589
|
+
|
|
590
|
+
### group.complete_transfer
|
|
591
|
+
|
|
592
592
|
由 pending 中的新群主完成群身份换钥和所有权切换,必须使用新密钥,禁止同密钥续证代替 rekey。成功后响应状态为 `transferred`,新群主成为 owner,原群主转为 admin;旧群证书失效,新群私钥及证书由新 owner 本地持有。
|
|
593
|
-
|
|
594
|
-
**参数**:
|
|
595
|
-
|
|
596
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
597
|
-
|------|------|------|------|
|
|
598
|
-
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
599
|
-
| `group_aid` | string | 否 | 群身份;高层 SDK 会查询并补齐 |
|
|
600
|
-
| `public_key` | string | 是 | 新 group_aid 公钥 DER base64(SPKI 格式) |
|
|
601
|
-
| `curve` | string | 否 | 曲线名称,默认 `P-256` |
|
|
602
|
-
| `transfer_accept` | object | 是 | 新群主使用自身 AID 私钥签名的接受证明,包含 `nonce`、`issued_ms`、`signature` |
|
|
603
|
-
|
|
604
|
-
**响应**:
|
|
605
|
-
|
|
606
|
-
```json
|
|
607
|
-
{
|
|
608
|
-
"status": "transferred",
|
|
609
|
-
"group": { ... },
|
|
610
|
-
"group_id": "team.agentid.pub",
|
|
611
|
-
"group_aid": "team.agentid.pub",
|
|
612
|
-
"old_owner": "alice.agentid.pub",
|
|
613
|
-
"new_owner": "bob.agentid.pub",
|
|
614
|
-
"aid_cert": { "cert": "-----BEGIN CERTIFICATE-----..." }
|
|
615
|
-
}
|
|
616
|
-
```
|
|
617
|
-
|
|
618
|
-
高层 SDK 会生成并暂存新群身份密钥,签名 `transfer_accept`,成功后导入新的 group_aid
|
|
593
|
+
|
|
594
|
+
**参数**:
|
|
595
|
+
|
|
596
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
597
|
+
|------|------|------|------|
|
|
598
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
599
|
+
| `group_aid` | string | 否 | 群身份;高层 SDK 会查询并补齐 |
|
|
600
|
+
| `public_key` | string | 是 | 新 group_aid 公钥 DER base64(SPKI 格式) |
|
|
601
|
+
| `curve` | string | 否 | 曲线名称,默认 `P-256` |
|
|
602
|
+
| `transfer_accept` | object | 是 | 新群主使用自身 AID 私钥签名的接受证明,包含 `nonce`、`issued_ms`、`signature` |
|
|
603
|
+
|
|
604
|
+
**响应**:
|
|
605
|
+
|
|
606
|
+
```json
|
|
607
|
+
{
|
|
608
|
+
"status": "transferred",
|
|
609
|
+
"group": { ... },
|
|
610
|
+
"group_id": "team.agentid.pub",
|
|
611
|
+
"group_aid": "team.agentid.pub",
|
|
612
|
+
"old_owner": "alice.agentid.pub",
|
|
613
|
+
"new_owner": "bob.agentid.pub",
|
|
614
|
+
"aid_cert": { "cert": "-----BEGIN CERTIFICATE-----..." }
|
|
615
|
+
}
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
高层 SDK 会生成并暂存新群身份密钥,签名 `transfer_accept`,成功后导入新的 group_aid 身份,并用新群私钥主签、由新 owner token 上传含新 owner 的群名片,可选 owner 附签;名片失败保留新代际原字节和原 CAS 条件,不反向撤销 owner 切换。重复提交同一已完成转让时,服务端可幂等返回已完成结果;旧 owner 的 pending 不得改用新代际自动续传。服务持久保留已验证旧证书用于 CA 轮换后复核原授权,以 transfer nonce 和旧 serial CAS 防止旧请求提交新任务;CA 已提交且可恢复的原待办即使超过 TTL 仍可收敛,尚未提交 CA 的过期待办拒绝。
|
|
619
619
|
|
|
620
620
|
### group.bind_group_aid
|
|
621
621
|
|
|
@@ -770,7 +770,7 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
|
|
|
770
770
|
}
|
|
771
771
|
```
|
|
772
772
|
|
|
773
|
-
### group.get_banlist
|
|
773
|
+
### group.get_banlist
|
|
774
774
|
|
|
775
775
|
获取封禁列表。需要 **admin 及以上**权限。
|
|
776
776
|
|
|
@@ -794,88 +794,88 @@ aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(n
|
|
|
794
794
|
"total": 1,
|
|
795
795
|
"page": 1,
|
|
796
796
|
"size": 200
|
|
797
|
-
}
|
|
798
|
-
```
|
|
799
|
-
|
|
800
|
-
禁言与屏蔽是两个独立状态,可以同时设置。禁言成员仍能接收群消息,但不能发送;屏蔽成员仍能发送群消息,但不再收到该群的实时消息 Push、离线消息 Push、Pull 或 E2EE wrap。
|
|
801
|
-
|
|
802
|
-
### group.block
|
|
803
|
-
|
|
804
|
-
屏蔽成员接收群消息。owner/admin 可以屏蔽其权限范围内的成员;所有成员都可以屏蔽自己。屏蔽只影响接收,不影响该成员向群内发送消息,也不改变已有禁言状态。
|
|
805
|
-
|
|
806
|
-
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`),`subject` 或 `aid`(string,必填;传入自己的 AID 即可屏蔽自己),`reason`(string,可选)。
|
|
807
|
-
|
|
808
|
-
**响应**:
|
|
809
|
-
|
|
810
|
-
```json
|
|
811
|
-
{
|
|
812
|
-
"group_id": "g-abc123.agentid.pub",
|
|
813
|
-
"group_aid": "g-abc123.agentid.pub",
|
|
814
|
-
"block": {
|
|
815
|
-
"group_id": "g-abc123.agentid.pub",
|
|
816
|
-
"subject": "bob.agentid.pub",
|
|
817
|
-
"blocked_by": "alice.agentid.pub",
|
|
818
|
-
"reason": "暂不接收群消息",
|
|
819
|
-
"created_at": 1234567890000
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
```
|
|
823
|
-
|
|
824
|
-
### group.unblock
|
|
825
|
-
|
|
826
|
-
取消屏蔽。owner/admin 可以取消其权限范围内成员的屏蔽;所有成员都可以取消自己的屏蔽。取消屏蔽不改变禁言状态。
|
|
827
|
-
|
|
828
|
-
**参数**:`group_id`(string,必填),`subject` 或 `aid`(string,必填;传入自己的 AID 即可取消自己的屏蔽)。
|
|
829
|
-
|
|
830
|
-
**响应**:`{ "group_id": "g-abc123.agentid.pub", "group_aid": "g-abc123.agentid.pub", "subject": "bob.agentid.pub", "status": "removed" }`
|
|
831
|
-
|
|
832
|
-
### group.get_blocklist
|
|
833
|
-
|
|
834
|
-
获取群屏蔽列表。需要 **admin 及以上**权限。
|
|
835
|
-
|
|
836
|
-
**参数**:`group_id`(string,必填)
|
|
837
|
-
|
|
838
|
-
**响应**:`{ "group_id": "g-abc123.agentid.pub", "group_aid": "g-abc123.agentid.pub", "items": [ ... ], "total": 1, "page": 1, "size": 1 }`
|
|
839
|
-
|
|
840
|
-
每个条目包含 `group_id`、`subject`、`blocked_by`、`reason` 和 `created_at`。
|
|
841
|
-
|
|
842
|
-
### group.report_status
|
|
843
|
-
|
|
844
|
-
上报当前成员在指定群内的在线状态和工作状态。调用者只能上报自己的状态;`updated_at` 由服务端记录。消息发送成功后,服务端独立维护该成员的 `last_message_at` 和 `last_payload_type`。
|
|
845
|
-
|
|
846
|
-
**参数**:`group_id`(string,必填),`online_status`(string,必填),`work_status`(string,必填)。
|
|
847
|
-
|
|
848
|
-
**响应**:`{ "group_id": "g-abc123.agentid.pub", "group_aid": "g-abc123.agentid.pub", "status": { ... } }`
|
|
849
|
-
|
|
850
|
-
### group.get_member_statuses
|
|
851
|
-
|
|
852
|
-
查询群内所有成员状态。调用者必须是群成员。响应始终以数组返回,并包含尚未上报状态的成员。
|
|
853
|
-
|
|
854
|
-
**参数**:`group_id`(string,必填)
|
|
855
|
-
|
|
856
|
-
**响应**:
|
|
857
|
-
|
|
858
|
-
```json
|
|
859
|
-
{
|
|
860
|
-
"group_id": "g-abc123.agentid.pub",
|
|
861
|
-
"group_aid": "g-abc123.agentid.pub",
|
|
862
|
-
"items": [
|
|
863
|
-
{
|
|
864
|
-
"group_id": "g-abc123.agentid.pub",
|
|
865
|
-
"aid": "alice.agentid.pub",
|
|
866
|
-
"online_status": "online",
|
|
867
|
-
"work_status": "busy",
|
|
868
|
-
"updated_at": 1234567890000,
|
|
869
|
-
"last_message_at": 1234567890123,
|
|
870
|
-
"last_payload_type": "text"
|
|
871
|
-
}
|
|
872
|
-
]
|
|
873
|
-
}
|
|
874
|
-
```
|
|
875
|
-
|
|
876
|
-
`online_status` 和 `work_status` 是成员上报值;未上报时为空字符串。`last_message_at` 为该成员在此群最后一条成功发送消息的时间,`last_payload_type` 为该消息的 `payload.type`;没有历史消息时分别为 `0` 和空字符串。
|
|
877
|
-
|
|
878
|
-
---
|
|
797
|
+
}
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
禁言与屏蔽是两个独立状态,可以同时设置。禁言成员仍能接收群消息,但不能发送;屏蔽成员仍能发送群消息,但不再收到该群的实时消息 Push、离线消息 Push、Pull 或 E2EE wrap。
|
|
801
|
+
|
|
802
|
+
### group.block
|
|
803
|
+
|
|
804
|
+
屏蔽成员接收群消息。owner/admin 可以屏蔽其权限范围内的成员;所有成员都可以屏蔽自己。屏蔽只影响接收,不影响该成员向群内发送消息,也不改变已有禁言状态。
|
|
805
|
+
|
|
806
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`),`subject` 或 `aid`(string,必填;传入自己的 AID 即可屏蔽自己),`reason`(string,可选)。
|
|
807
|
+
|
|
808
|
+
**响应**:
|
|
809
|
+
|
|
810
|
+
```json
|
|
811
|
+
{
|
|
812
|
+
"group_id": "g-abc123.agentid.pub",
|
|
813
|
+
"group_aid": "g-abc123.agentid.pub",
|
|
814
|
+
"block": {
|
|
815
|
+
"group_id": "g-abc123.agentid.pub",
|
|
816
|
+
"subject": "bob.agentid.pub",
|
|
817
|
+
"blocked_by": "alice.agentid.pub",
|
|
818
|
+
"reason": "暂不接收群消息",
|
|
819
|
+
"created_at": 1234567890000
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
```
|
|
823
|
+
|
|
824
|
+
### group.unblock
|
|
825
|
+
|
|
826
|
+
取消屏蔽。owner/admin 可以取消其权限范围内成员的屏蔽;所有成员都可以取消自己的屏蔽。取消屏蔽不改变禁言状态。
|
|
827
|
+
|
|
828
|
+
**参数**:`group_id`(string,必填),`subject` 或 `aid`(string,必填;传入自己的 AID 即可取消自己的屏蔽)。
|
|
829
|
+
|
|
830
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "group_aid": "g-abc123.agentid.pub", "subject": "bob.agentid.pub", "status": "removed" }`
|
|
831
|
+
|
|
832
|
+
### group.get_blocklist
|
|
833
|
+
|
|
834
|
+
获取群屏蔽列表。需要 **admin 及以上**权限。
|
|
835
|
+
|
|
836
|
+
**参数**:`group_id`(string,必填)
|
|
837
|
+
|
|
838
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "group_aid": "g-abc123.agentid.pub", "items": [ ... ], "total": 1, "page": 1, "size": 1 }`
|
|
839
|
+
|
|
840
|
+
每个条目包含 `group_id`、`subject`、`blocked_by`、`reason` 和 `created_at`。
|
|
841
|
+
|
|
842
|
+
### group.report_status
|
|
843
|
+
|
|
844
|
+
上报当前成员在指定群内的在线状态和工作状态。调用者只能上报自己的状态;`updated_at` 由服务端记录。消息发送成功后,服务端独立维护该成员的 `last_message_at` 和 `last_payload_type`。
|
|
845
|
+
|
|
846
|
+
**参数**:`group_id`(string,必填),`online_status`(string,必填),`work_status`(string,必填)。
|
|
847
|
+
|
|
848
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "group_aid": "g-abc123.agentid.pub", "status": { ... } }`
|
|
849
|
+
|
|
850
|
+
### group.get_member_statuses
|
|
851
|
+
|
|
852
|
+
查询群内所有成员状态。调用者必须是群成员。响应始终以数组返回,并包含尚未上报状态的成员。
|
|
853
|
+
|
|
854
|
+
**参数**:`group_id`(string,必填)
|
|
855
|
+
|
|
856
|
+
**响应**:
|
|
857
|
+
|
|
858
|
+
```json
|
|
859
|
+
{
|
|
860
|
+
"group_id": "g-abc123.agentid.pub",
|
|
861
|
+
"group_aid": "g-abc123.agentid.pub",
|
|
862
|
+
"items": [
|
|
863
|
+
{
|
|
864
|
+
"group_id": "g-abc123.agentid.pub",
|
|
865
|
+
"aid": "alice.agentid.pub",
|
|
866
|
+
"online_status": "online",
|
|
867
|
+
"work_status": "busy",
|
|
868
|
+
"updated_at": 1234567890000,
|
|
869
|
+
"last_message_at": 1234567890123,
|
|
870
|
+
"last_payload_type": "text"
|
|
871
|
+
}
|
|
872
|
+
]
|
|
873
|
+
}
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
`online_status` 和 `work_status` 是成员上报值;未上报时为空字符串。`last_message_at` 为该成员在此群最后一条成功发送消息的时间,`last_payload_type` 为该消息的 `payload.type`;没有历史消息时分别为 `0` 和空字符串。
|
|
877
|
+
|
|
878
|
+
---
|
|
879
879
|
|
|
880
880
|
## 入群流程
|
|
881
881
|
|
|
@@ -1257,7 +1257,7 @@ SDK 观察到 `_meta.group_indexes` 只记录远端 etag,不会自动覆盖本
|
|
|
1257
1257
|
|
|
1258
1258
|
### group.send
|
|
1259
1259
|
|
|
1260
|
-
发送群消息。需要 member 权限。群为 `suspended` 时仅 owner/admin 可以发送,member 会被拒绝。
|
|
1260
|
+
发送群消息。需要 member 权限。群为 `suspended` 时仅 owner/admin 可以发送,member 会被拒绝。
|
|
1261
1261
|
|
|
1262
1262
|
群消息的持久化 `mention_mode` 来自群设置,取值为 `"disabled"` / `"mention-only"`;服务端会写入消息对象并在 pull / push 中返回。运行时是否广播全员或分发给值班 Agent,由响应中的 `dispatch` / `message_dispatch` 描述。V2 加密消息把快照放在既有 `envelope_json` 元数据中,不改变 `per_device` 投递列。
|
|
1263
1263
|
|
|
@@ -1269,6 +1269,7 @@ SDK 观察到 `_meta.group_indexes` 只记录远端 etag,不会自动覆盖本
|
|
|
1269
1269
|
| `payload` | object | 否 | 消息内容 |
|
|
1270
1270
|
| `type` | string | 否 | 信封/封装类型,普通业务消息无需填写;SDK 加密群消息时自动使用 `e2ee.group_encrypted` |
|
|
1271
1271
|
| `attachments` | array | 否 | 兼容旧接口的顶层附件元数据;推荐把业务附件放入 `payload.attachments` |
|
|
1272
|
+
| `need_render` | boolean | 否 | 默认 `true`,表示消息是否需要应用渲染;不改变群 seq/Pull/ACK 模型 |
|
|
1272
1273
|
| `protected_headers` / `headers` | object | 否 | SDK 加密前读取的 E2EE 信封元数据,类似 HTTP headers;推荐使用 `protected_headers`,`headers` 仅作为兼容别名;服务端不解释,接收端验 `_auth` 后在 `e2ee.protected_headers` 暴露 |
|
|
1273
1274
|
|
|
1274
1275
|
### Payload 参考约定
|
|
@@ -1277,6 +1278,8 @@ SDK 观察到 `_meta.group_indexes` 只记录远端 etag,不会自动覆盖本
|
|
|
1277
1278
|
|
|
1278
1279
|
`protected_headers` 只在 SDK 加密路径生效;裸 RPC 发送明文或已加密信封时,调用方需自行遵守 [05-E2EE加密通信](05-E2EE加密通信.md#protectedheaders-与可验证上下文) 的格式和校验规则。
|
|
1279
1280
|
|
|
1281
|
+
`need_render` 与 P2P 一致,由 SDK 提取到外层信封,接收消息保留该标记;历史缺字段或 NULL 按 `true`。该字段不参与 E2EE AAD、`protected_headers`、消息保护签名或元数据 HMAC,RPC `client_signature` 仍按既有完整业务参数规则覆盖它。服务端不按此标记拆流或优先拉取。
|
|
1282
|
+
|
|
1280
1283
|
**响应**:
|
|
1281
1284
|
|
|
1282
1285
|
```json
|
|
@@ -1323,7 +1326,7 @@ SDK 观察到 `_meta.group_indexes` 只记录远端 etag,不会自动覆盖本
|
|
|
1323
1326
|
|
|
1324
1327
|
### group.thought.put
|
|
1325
1328
|
|
|
1326
|
-
写入某个发送者针对一个群上下文的思考内容。该内容不是普通群消息:服务端不分配消息 `seq`,不广播,不进入 `group.pull`,不需要 ack,也不持久化;只在内存中保留当前 head。群为 `suspended` 时仅 owner/admin 可以写入,member 会被拒绝。
|
|
1329
|
+
写入某个发送者针对一个群上下文的思考内容。该内容不是普通群消息:服务端不分配消息 `seq`,不广播,不进入 `group.pull`,不需要 ack,也不持久化;只在内存中保留当前 head。群为 `suspended` 时仅 owner/admin 可以写入,member 会被拒绝。
|
|
1327
1330
|
|
|
1328
1331
|
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 连接级身份语义携带。
|
|
1329
1332
|
|
|
@@ -1438,7 +1441,7 @@ result = await client.call("group.thought.get", {
|
|
|
1438
1441
|
|------|------|------|--------|------|
|
|
1439
1442
|
| `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1440
1443
|
| `after_message_seq` | integer | 否 | 0 | 从该消息 seq 之后拉取 |
|
|
1441
|
-
| `limit` | integer | 否 | 50 |
|
|
1444
|
+
| `limit` | integer | 否 | 50 | Python V2 Forward 最大 200;其余模式保留原限制,`pull_max_limit` 配置可进一步收紧 |
|
|
1442
1445
|
| `device_id` | string | 否 | — | 设备 ID(多设备模式) |
|
|
1443
1446
|
|
|
1444
1447
|
**响应**:
|
|
@@ -1457,13 +1460,17 @@ result = await client.call("group.thought.get", {
|
|
|
1457
1460
|
|
|
1458
1461
|
多设备模式时额外返回 `cursor` 对象(含 `current_seq`、`join_seq`、`latest_seq`、`unread_count`)。
|
|
1459
1462
|
|
|
1463
|
+
旧 `group.pull` 的服务端 `has_more` 通过 `limit + 1` 可见消息探测及响应截页确定,表示仍有当前成员可见的消息未返回,不由 `unread_count` 或恰好满页推断。底层 `group.v2.pull` 的 Forward 响应可不含该字段,SDK 仍结合 head 与游标判断是否续页。
|
|
1464
|
+
|
|
1465
|
+
Group V2 拉取默认每页 50;Python SDK 的 Forward 上限已为 200。直接调用底层 `group.v2.pull` 时,服务端默认 50、最大 200,受 `pull_max_limit` 配置进一步限制;旧 `group.pull`、`group.history` 与 `group.pull_events` 仍为最大 50。
|
|
1466
|
+
|
|
1460
1467
|
`group.pull` 是公开的 Forward Pull。实时 A/T/H 最新页同步由 SDK 内部自动完成,不提供需要应用传入的模式参数。普通 Forward 中,`retention_floor_message_seq` 只表示已提交物理 GC;`earliest_available_message_seq-1` 表示服务端综合 retention、入群点和 epoch 后的当前成员可见性排他下界。SDK 以 `max(retention_floor_message_seq, cursor.join_seq, earliest_available_message_seq-1)` 推进 A;History 不修改 A/T/H。
|
|
1461
1468
|
|
|
1462
|
-
Forward 原始页校验通过后按页内最大 seq 推进 A,单条解密失败通过 `group.message_undecryptable` 报告而不阻塞水位。Piggy ACK
|
|
1463
|
-
|
|
1464
|
-
`group.pull` 与 `group.history` 进入当前 `AUNClient` 的客户端级 Pull Gate。该 Gate 与 P2P Message、Group Event Pull
|
|
1465
|
-
|
|
1466
|
-
解密当前群消息时若缺少 sender IK,SDK 先执行同发送端 single-flight 的有界同步 bootstrap,最多等待 3 秒;P2P bootstrap 未命中时可继续读取 Group bootstrap。成功后立即重试当前消息,失败或超时才 pending,且不阻塞实时扫描水位。
|
|
1469
|
+
Forward 原始页校验通过后按页内最大 seq 推进 A,单条解密失败通过 `group.message_undecryptable` 报告而不阻塞水位。Piggy ACK 保留:有后续页时携带待提交 ACK;没有续页证明时以独立 ACK 收尾,不为 ACK 额外拉取空页。
|
|
1470
|
+
|
|
1471
|
+
`group.pull` 与 `group.history` 进入当前 `AUNClient` 的客户端级 Pull Gate。该 Gate 与 P2P Message、Group Event Pull 共享,同一 namespace 内的 Tail、History、Forward 始终单飞,不同 namespace 最多 4 个并行。namespace 分别为 `p2p:{当前 AID}`、`group:{群标识}`、`group_event:{群标识}`,同群消息与群事件使用不同 namespace。相同完整请求 key 折叠并共享结果;可运行的不同 key 按前台 FIFO(Tail/History)优先于后台 FIFO(Forward/Gap Fill/Group Event)调度,跳过已被占用的 namespace。不同 `AUNClient` 实例之间不共享 Gate,应用层无需自行实现并发控制。
|
|
1472
|
+
|
|
1473
|
+
解密当前群消息时若缺少 sender IK,SDK 先执行同发送端 single-flight 的有界同步 bootstrap,最多等待 3 秒;P2P bootstrap 未命中时可继续读取 Group bootstrap。成功后立即重试当前消息,失败或超时才 pending,且不阻塞实时扫描水位。
|
|
1467
1474
|
|
|
1468
1475
|
SDK 只保证单个实时拉取响应页内按 seq 升序、同 seq 最多发布一次。A/T/H 是扫描水位,不记录应用是否已经收到回调;跨 Push、SDK 自动最新页同步和 Forward 页允许重复和乱序。全局去重与排序由应用业务仓库负责,不是 SDK 交付契约;应用必须在群 namespace 内按 `message_id` 幂等并按 `seq` 排序。SDK 进程内折叠仅作 best-effort 优化。History 只返回结果,不参与实时发布。
|
|
1469
1476
|
|
|
@@ -1483,7 +1490,7 @@ SDK 只保证单个实时拉取响应页内按 seq 升序、同 seq 最多发布
|
|
|
1483
1490
|
|
|
1484
1491
|
### group.ack
|
|
1485
1492
|
|
|
1486
|
-
提交群消息投递消费游标。等同于 `group.ack_messages`,需要 `device_id`;业务已读独立使用 `group.read/read_state`。
|
|
1493
|
+
提交群消息投递消费游标。等同于 `group.ack_messages`,需要 `device_id`;业务已读独立使用 `group.read/read_state`。
|
|
1487
1494
|
|
|
1488
1495
|
**参数**:
|
|
1489
1496
|
|
|
@@ -1596,11 +1603,11 @@ SDK 只保证单个实时拉取响应页内按 seq 升序、同 seq 最多发布
|
|
|
1596
1603
|
|
|
1597
1604
|
查看群文件系统用量。参数可传 `path` 或 `group_id`。
|
|
1598
1605
|
|
|
1599
|
-
### group.fs.create_download_ticket
|
|
1600
|
-
|
|
1601
|
-
创建下载票据。参数:`path` 必填。响应包含 `url` / `download_url`、`expire_at`,以及可选的 `token`、`sha256`、`content_type`、`file_name`。私有文件和跨 issuer 文件由资源所在域签发短 TTL 的 `?t=` 能力凭据;Group 只返回票据,不代理文件字节。
|
|
1602
|
-
|
|
1603
|
-
SDK Group FS 门面使用票据执行 HTTP GET 并校验 sha256。应用自行下载时遵守与 `storage.create_download_ticket` 相同的数据面规则:完整保留 URL 中的 `?t=`;只有端点明确要求 AID Bearer 时,才在每次请求前调用 Python `get_access_token()`、TypeScript / JavaScript `getAccessToken()` 或 Go `GetAccessToken()`;不得长期复用 `authenticate()` 首次返回的 token,也不得把当前域的 AID JWT 发送给另一 issuer 的 storage。401/403 仅在重新读取到不同 token 时重试一次;票据过期应重新申请。完整流程见 [Storage RPC 手册](09-storage-rpc-manual.md#数据面-http-下载流程)。
|
|
1606
|
+
### group.fs.create_download_ticket
|
|
1607
|
+
|
|
1608
|
+
创建下载票据。参数:`path` 必填。响应包含 `url` / `download_url`、`expire_at`,以及可选的 `token`、`sha256`、`content_type`、`file_name`。私有文件和跨 issuer 文件由资源所在域签发短 TTL 的 `?t=` 能力凭据;Group 只返回票据,不代理文件字节。
|
|
1609
|
+
|
|
1610
|
+
SDK Group FS 门面使用票据执行 HTTP GET 并校验 sha256。应用自行下载时遵守与 `storage.create_download_ticket` 相同的数据面规则:完整保留 URL 中的 `?t=`;只有端点明确要求 AID Bearer 时,才在每次请求前调用 Python `get_access_token()`、TypeScript / JavaScript `getAccessToken()` 或 Go `GetAccessToken()`;不得长期复用 `authenticate()` 首次返回的 token,也不得把当前域的 AID JWT 发送给另一 issuer 的 storage。401/403 仅在重新读取到不同 token 时重试一次;票据过期应重新申请。完整流程见 [Storage RPC 手册](09-storage-rpc-manual.md#数据面-http-下载流程)。
|
|
1604
1611
|
|
|
1605
1612
|
### group.fs.set_acl
|
|
1606
1613
|
|
|
@@ -1646,7 +1653,7 @@ SDK Group FS 门面使用票据执行 HTTP GET 并校验 sha256。应用自行
|
|
|
1646
1653
|
|
|
1647
1654
|
### group.fs.create_upload_session
|
|
1648
1655
|
|
|
1649
|
-
创建上传会话。参数同 `check_upload`。响应透传 Storage session 字段并增加 Group FS 路径视图,包含 `upload_url`、`content_type`、`size_bytes` 等;当前 Storage 服务不返回 `session_id` 或 `headers`。四个 SDK 的 Group FS 门面会按实际字节识别 MIME,并在 session、HTTP PUT 与 complete 中保持 `Content-Type` 一致;若 session 返回 headers,SDK 保留其它 header 并替换其中的 Content-Type,避免 OSS 签名不一致导致 403。
|
|
1656
|
+
创建上传会话。参数同 `check_upload`。响应透传 Storage session 字段并增加 Group FS 路径视图,包含 `upload_url`、`content_type`、`size_bytes` 等;当前 Storage 服务不返回 `session_id` 或 `headers`。四个 SDK 的 Group FS 门面会按实际字节识别 MIME,并在 session、HTTP PUT 与 complete 中保持 `Content-Type` 一致;若 session 返回 headers,SDK 保留其它 header 并替换其中的 Content-Type,避免 OSS 签名不一致导致 403。
|
|
1650
1657
|
|
|
1651
1658
|
### group.fs.complete_upload
|
|
1652
1659
|
|
|
@@ -1699,7 +1706,7 @@ SDK Group FS 门面使用票据执行 HTTP GET 并校验 sha256。应用自行
|
|
|
1699
1706
|
|
|
1700
1707
|
### group.pull_events
|
|
1701
1708
|
|
|
1702
|
-
增量拉取群事件,支持多设备独立游标。SDK 将其作为后台 Pull 放入当前 `AUNClient` 的客户端级 Pull Gate;该 Gate 与 P2P Message、Group Message Pull
|
|
1709
|
+
增量拉取群事件,支持多设备独立游标。SDK 将其作为后台 Pull 放入当前 `AUNClient` 的客户端级 Pull Gate;该 Gate 与 P2P Message、Group Message Pull 共享,同一 namespace 单飞,客户端最多 4 个不同 namespace 并行。Group Event 使用 `group_event:{群标识}`,与同群消息 namespace 独立;相同完整请求 key 折叠并共享结果,可运行的不同 key 按后台 FIFO 调度并让前台请求优先。Group Event 使用独立的 Forward Cursor,不修改消息 A/T/H;不同 `AUNClient` 实例之间不共享 Gate。应用层无需自行实现并发控制。
|
|
1703
1710
|
|
|
1704
1711
|
**参数**:
|
|
1705
1712
|
|
|
@@ -1733,7 +1740,7 @@ SDK Group FS 门面使用票据执行 HTTP GET 并校验 sha256。应用自行
|
|
|
1733
1740
|
}
|
|
1734
1741
|
```
|
|
1735
1742
|
|
|
1736
|
-
> `retention_floor_event_seq` 只表示已提交物理 GC;`earliest_available_event_seq-1` 是综合 retention、入群点和 epoch 后的当前成员可见性排他下界。SDK 以 `max(retention_floor_event_seq, cursor.current_seq, cursor.join_seq, earliest_available_event_seq-1)` 恢复或推进 Group Event A,ACK 仍只能提交已持久化 A。`cursor` 仅多设备模式(提供 `device_id`)时返回。响应大小受 `pull_max_response_bytes`
|
|
1743
|
+
> `retention_floor_event_seq` 只表示已提交物理 GC;`earliest_available_event_seq-1` 是综合 retention、入群点和 epoch 后的当前成员可见性排他下界。SDK 以 `max(retention_floor_event_seq, cursor.current_seq, cursor.join_seq, earliest_available_event_seq-1)` 恢复或推进 Group Event A,ACK 仍只能提交已持久化 A。`cursor` 仅多设备模式(提供 `device_id`)时返回。响应大小受 `pull_max_response_bytes` 配置限制。`has_more` 通过 `limit + 1` 可见事件探测及响应截页确定,不由 `unread_count` 或恰好满页推断。
|
|
1737
1744
|
|
|
1738
1745
|
### group.ack_messages
|
|
1739
1746
|
|
|
@@ -1880,27 +1887,27 @@ SDK Group FS 门面使用票据执行 HTTP GET 并校验 sha256。应用自行
|
|
|
1880
1887
|
|
|
1881
1888
|
---
|
|
1882
1889
|
|
|
1883
|
-
## group.read
|
|
1884
|
-
|
|
1885
|
-
请求为 `{"states":[{"group_id":"team.agentid.pub","topic_key":"topic-1","last_read_message_id":"gm-100"}]}`。`scope` 缺省或为空时按 `group` 处理,非空值只能为 `group`。AID 与 device ID 使用认证连接;历史 Group ID 别名先解析为 canonical ID,新写状态键、响应和事件使用 canonical `group_id`;历史别名同时参与事实、公共位置和设备映射的事务查询。Group 复用现有群成员及封禁检查,通过既有 `RequireSendGroup` 与版本同步刷新跨实例权限。批量至少一项,仅更新出现的键;只有省略 `states` 时才兼容顶层单条,显式空数组、null 或非数组值拒绝;字符串字段显式传入非字符串或 `null` 时拒绝。同域批量先校验该域全部项;混合域按所属域首次出现的顺序逐域校验和提交,任何域失败则 RPC 返回错误,已经提交的域不回滚,通过幂等重试收敛。owner/device/group/topic/message ID 各最多 128 字符,topic 原样保存。
|
|
1886
|
-
|
|
1887
|
-
响应为 `{"updated":1,"ignored":0,"states":[{"scope":"group","group_id":"team.agentid.pub","topic_key":"topic-1","last_read_message_id":"gm-100","changed":true}]}`。这是设备写入回执,不是共享汇总;`changed=true` 不保证汇总前进。按群公共顺序单调更新,重复或旧位置返回 `changed=false`。每个 RPC 只等待本次依赖的写入提交;跨多个数据库批次时,失败不回滚先前提交,原样幂等重试可收敛。`group.read` 与投递 `group.ack_messages/ack_events` 独立。
|
|
1888
|
-
|
|
1889
|
-
## group.read_state
|
|
1890
|
-
|
|
1891
|
-
可选字段为 `scope`、`group_id`、`topic_key` 和当前认证 `aid`。`scope` 缺省或为空时按 `group` 处理,非空值只能为 `group`;`aid` 非空值只能等于认证 AID。显式非字符串或 `null` 拒绝。查询返回有权限的群状态;提供 group ID 时先解析为 canonical ID 并校验成员权限。未提供 group ID 时通过完整成员目录发现远域群并逐群合并,保留 topic 过滤,不受默认群列表分页限制。响应始终有 `states`,只有一项时顶层镜像该项。每项包含 `scope=group`、`group_id`、`topic_key`、`last_read_message_id`、`last_read_order`、`current_device_seq`、`mapping_status` 和毫秒 `updated_at`。
|
|
1892
|
-
|
|
1893
|
-
`last_read_order` 为群公共消息顺序,用于缓存乱序保护。`current_device_seq` 只映射当前设备,无法映射返回 `null`。`resolved` 表示映射成功;`not_received` 表示公共位置已知但当前设备无投递记录;`unresolved` 表示公共位置无法解析。未知位置首次上报保存待解析事实,不广播汇总前进;未知不能覆盖已知,不以消息 ID 字典序猜测两个未知位置;晚到公共位置对仍匹配该消息且 order=0 的事实条件持久回填,不能只更新缓存或覆盖并发前进的事实。
|
|
1894
|
-
|
|
1895
|
-
网络 JSON 的公共顺序和 seq 为整数,Gateway 本域服务及 federation 回程必须无损保留;TS/JS 的 `last_read_order`、非空 `current_device_seq` 在安全整数范围内是 number,超出时是精确十进制字符串。四端 facade 分别为 Python `group.read/read_state`、TS/JS `group.read/readState`、Go `Group().Read/ReadState`。四个已读门面保留显式 `None/null/nil` 字段供服务端拒绝,不改变其他门面的空值处理。写入回执不进入共享缓存,旧事件不交付应用,同位置事件保留设备映射;未知顺序不按时间或 ID 猜测前进。该接口只返回同一 AID 的设备汇总,不返回其它设备明细,也不保存 Group 事件流的已读状态。
|
|
1896
|
-
|
|
1897
|
-
## group.read_changed
|
|
1898
|
-
|
|
1890
|
+
## group.read
|
|
1891
|
+
|
|
1892
|
+
请求为 `{"states":[{"group_id":"team.agentid.pub","topic_key":"topic-1","last_read_message_id":"gm-100"}]}`。`scope` 缺省或为空时按 `group` 处理,非空值只能为 `group`。AID 与 device ID 使用认证连接;历史 Group ID 别名先解析为 canonical ID,新写状态键、响应和事件使用 canonical `group_id`;历史别名同时参与事实、公共位置和设备映射的事务查询。Group 复用现有群成员及封禁检查,通过既有 `RequireSendGroup` 与版本同步刷新跨实例权限。批量至少一项,仅更新出现的键;只有省略 `states` 时才兼容顶层单条,显式空数组、null 或非数组值拒绝;字符串字段显式传入非字符串或 `null` 时拒绝。同域批量先校验该域全部项;混合域按所属域首次出现的顺序逐域校验和提交,任何域失败则 RPC 返回错误,已经提交的域不回滚,通过幂等重试收敛。owner/device/group/topic/message ID 各最多 128 字符,topic 原样保存。
|
|
1893
|
+
|
|
1894
|
+
响应为 `{"updated":1,"ignored":0,"states":[{"scope":"group","group_id":"team.agentid.pub","topic_key":"topic-1","last_read_message_id":"gm-100","changed":true}]}`。这是设备写入回执,不是共享汇总;`changed=true` 不保证汇总前进。按群公共顺序单调更新,重复或旧位置返回 `changed=false`。每个 RPC 只等待本次依赖的写入提交;跨多个数据库批次时,失败不回滚先前提交,原样幂等重试可收敛。`group.read` 与投递 `group.ack_messages/ack_events` 独立。
|
|
1895
|
+
|
|
1896
|
+
## group.read_state
|
|
1897
|
+
|
|
1898
|
+
可选字段为 `scope`、`group_id`、`topic_key` 和当前认证 `aid`。`scope` 缺省或为空时按 `group` 处理,非空值只能为 `group`;`aid` 非空值只能等于认证 AID。显式非字符串或 `null` 拒绝。查询返回有权限的群状态;提供 group ID 时先解析为 canonical ID 并校验成员权限。未提供 group ID 时通过完整成员目录发现远域群并逐群合并,保留 topic 过滤,不受默认群列表分页限制。响应始终有 `states`,只有一项时顶层镜像该项。每项包含 `scope=group`、`group_id`、`topic_key`、`last_read_message_id`、`last_read_order`、`current_device_seq`、`mapping_status` 和毫秒 `updated_at`。
|
|
1899
|
+
|
|
1900
|
+
`last_read_order` 为群公共消息顺序,用于缓存乱序保护。`current_device_seq` 只映射当前设备,无法映射返回 `null`。`resolved` 表示映射成功;`not_received` 表示公共位置已知但当前设备无投递记录;`unresolved` 表示公共位置无法解析。未知位置首次上报保存待解析事实,不广播汇总前进;未知不能覆盖已知,不以消息 ID 字典序猜测两个未知位置;晚到公共位置对仍匹配该消息且 order=0 的事实条件持久回填,不能只更新缓存或覆盖并发前进的事实。
|
|
1901
|
+
|
|
1902
|
+
网络 JSON 的公共顺序和 seq 为整数,Gateway 本域服务及 federation 回程必须无损保留;TS/JS 的 `last_read_order`、非空 `current_device_seq` 在安全整数范围内是 number,超出时是精确十进制字符串。四端 facade 分别为 Python `group.read/read_state`、TS/JS `group.read/readState`、Go `Group().Read/ReadState`。四个已读门面保留显式 `None/null/nil` 字段供服务端拒绝,不改变其他门面的空值处理。写入回执不进入共享缓存,旧事件不交付应用,同位置事件保留设备映射;未知顺序不按时间或 ID 猜测前进。该接口只返回同一 AID 的设备汇总,不返回其它设备明细,也不保存 Group 事件流的已读状态。
|
|
1903
|
+
|
|
1904
|
+
## group.read_changed
|
|
1905
|
+
|
|
1899
1906
|
数据库提交成功且 AID 汇总前进后,SDK 收到 `group.read_changed`。包含 `owner_aid`、`scope=group`、`group_id`、`topic_key`、`last_read_message_id`、`last_read_order` 和 `updated_at`。`owner_aid` 必须非空,SDK 要求其等于当前身份且 `scope=group` 匹配原事件。Gateway 即使收到显式 route 也只向该 AID 分发,校验 Kernel 转发的可信 Group 来源;群所属域可通过 federation 发送给该外域成员 AID,不能广播给其他群成员,来源绑定 canonical 群 ID 的 issuer。事件 ID 对 JSON 数组 `[owner_aid, group_id, topic_key, last_read_message_id]` 计算 SHA-256,不包含 `last_read_order`,失败日志不泄露 topic。事件不进入 Pull 队列,缺失依靠 `group.read_state` 补偿。
|
|
1900
|
-
|
|
1901
|
-
SDK 保留成功查询的原过滤范围,包括空结果、全量及按群查询。连接成功后补偿并在 SDK 本地发布 `read_state_sync`,含 `owner_aid`、去重 `states` 及 `{method, params, error}` 错误项;消息 `background_sync=false` 不关闭该补偿。AID/device 切换清理缓存及登记项;旧身份在途结果按身份代际隔离,A→B→A 也不写当前缓存或补偿完成事件,原 RPC 调用仍可返回结果。应用应在 connect 前订阅,完成事件的状态与映射处理见 [跨设备已读未读 SDK 集成指南](../跨设备已读未读SDK集成指南.md)。
|
|
1902
|
-
|
|
1903
|
-
## 事件
|
|
1907
|
+
|
|
1908
|
+
SDK 保留成功查询的原过滤范围,包括空结果、全量及按群查询。连接成功后补偿并在 SDK 本地发布 `read_state_sync`,含 `owner_aid`、去重 `states` 及 `{method, params, error}` 错误项;消息 `background_sync=false` 不关闭该补偿。AID/device 切换清理缓存及登记项;旧身份在途结果按身份代际隔离,A→B→A 也不写当前缓存或补偿完成事件,原 RPC 调用仍可返回结果。应用应在 connect 前订阅,完成事件的状态与映射处理见 [跨设备已读未读 SDK 集成指南](../跨设备已读未读SDK集成指南.md)。
|
|
1909
|
+
|
|
1910
|
+
## 事件
|
|
1904
1911
|
|
|
1905
1912
|
### event/group.created
|
|
1906
1913
|
|
|
@@ -1969,9 +1976,9 @@ SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.5.x
|
|
|
1969
1976
|
| `member_added` | 成员加入 |
|
|
1970
1977
|
| `member_left` | 成员退出 |
|
|
1971
1978
|
| `member_removed` | 成员被踢出 |
|
|
1972
|
-
| `role_changed` | 角色变更 |
|
|
1973
|
-
| `owner_transfer_rekey_pending` | 群主转让已发起,等待新群主完成群身份换钥 |
|
|
1974
|
-
| `owner_transferred` | 群主转让 |
|
|
1979
|
+
| `role_changed` | 角色变更 |
|
|
1980
|
+
| `owner_transfer_rekey_pending` | 群主转让已发起,等待新群主完成群身份换钥 |
|
|
1981
|
+
| `owner_transferred` | 群主转让 |
|
|
1975
1982
|
| `rules_updated` | 规则更新 |
|
|
1976
1983
|
| `announcement_updated` | 公告更新 |
|
|
1977
1984
|
| `join_requested` | 收到入群申请 |
|
|
@@ -1982,10 +1989,10 @@ SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.5.x
|
|
|
1982
1989
|
| `invite_code_created` | 邀请码创建 |
|
|
1983
1990
|
| `invite_code_used` | 邀请码使用 |
|
|
1984
1991
|
| `invite_code_revoked` | 邀请码撤销 |
|
|
1985
|
-
| `member_banned` | 成员封禁 |
|
|
1986
|
-
| `member_unbanned` | 成员解封 |
|
|
1987
|
-
| `member_blocked` | 成员被屏蔽 |
|
|
1988
|
-
| `member_unblocked` | 成员取消屏蔽 |
|
|
1992
|
+
| `member_banned` | 成员封禁 |
|
|
1993
|
+
| `member_unbanned` | 成员解封 |
|
|
1994
|
+
| `member_blocked` | 成员被屏蔽 |
|
|
1995
|
+
| `member_unblocked` | 成员取消屏蔽 |
|
|
1989
1996
|
| `suspended` | 群组暂停 |
|
|
1990
1997
|
| `resumed` | 群组恢复 |
|
|
1991
1998
|
| `dissolved` | 群组解散 |
|
|
@@ -2071,46 +2078,46 @@ SDK 收到新 Head 后自动同步最新消息页并逐条解密;若 A 与 T
|
|
|
2071
2078
|
}
|
|
2072
2079
|
```
|
|
2073
2080
|
|
|
2074
|
-
SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信封字段统一放在 `envelope`。`envelope` 只保留可转发的归一化元数据,`from` 由 `sender_aid` 归一化而来,`timestamp` 由 `created_at` / `t_server` 归一化而来。当前仍保留顶层 `group_id` / `seq` / `message_id` / `sender_aid` / `mention_mode` 等字段;新代码应优先通过 `msg["envelope"]["from"]`、`msg["envelope"]["timestamp"]` 等路径访问。Gateway 可能附加 `proximity` 及 `same_device` / `same_egress_ip` / `same_network`,表示由 Gateway 基于连接上下文判断的近端关系提示,不参与 E2EE AAD 或业务鉴权。
|
|
2075
|
-
|
|
2076
|
-
### delivery.changed
|
|
2077
|
-
|
|
2078
|
-
成功交付 `group.message_created` 后,四个 SDK 会通过本地 `delivery.changed` 事件通知应用合并刷新群会话 UI。群变更项使用 canonical group AID:
|
|
2079
|
-
|
|
2080
|
-
```json
|
|
2081
|
-
{
|
|
2082
|
-
"trigger": "pull_drained",
|
|
2083
|
-
"changes": [
|
|
2084
|
-
{"namespace": "group:g-abc123.agentid.pub", "delivered_count": 50}
|
|
2085
|
-
]
|
|
2086
|
-
}
|
|
2087
|
-
```
|
|
2088
|
-
|
|
2089
|
-
### group.invite_member
|
|
2090
|
-
|
|
2091
|
-
创建指定 AID 的待处理邀请,不写入正式成员表。公开群允许任意正式成员,非公开群仅 owner/admin;同一群、目标和邀请者重复调用幂等返回原记录。
|
|
2092
|
-
|
|
2093
|
-
**参数**:`group_id`、`aid`(或 `invitee_aid`)必填;`member_type` 可选(`human` / `ai`,默认 `human`)。
|
|
2094
|
-
|
|
2095
|
-
### group.list_my_invites
|
|
2096
|
-
|
|
2097
|
-
列出当前认证 AID 收到的待处理邀请,按群和目标 AID 聚合;支持 `page`、`size` 分页参数。
|
|
2098
|
-
|
|
2099
|
-
### group.accept_invite
|
|
2100
|
-
|
|
2101
|
-
被邀请 AID 以 `invite_id` 接受聚合邀请;成功后才原子写入正式成员表。
|
|
2102
|
-
|
|
2103
|
-
### group.reject_invite
|
|
2104
|
-
|
|
2105
|
-
被邀请 AID 以 `invite_id` 拒绝聚合邀请,不写入正式成员表。
|
|
2106
|
-
|
|
2107
|
-
### group.revoke_invite
|
|
2108
|
-
|
|
2109
|
-
原邀请发出者以 `invite_id` 撤回自己的待处理邀请。撤回、接受、拒绝和过期是互斥终态转换。
|
|
2110
|
-
|
|
2111
|
-
该事件不是服务端 `event/group.*`。多个群和 P2P 的 Pull 共用当前 `AUNClient` 的全局排空边界,因此一次 `pull_drained` 可以包含多个 `group:<canonical-group-aid>` 和 `p2p` 变更;有效 Push / Inline Push 则在原群消息事件处理完成后实时通知。完整 payload、折叠和零通知条件见 [06-API手册:delivery.changed](06-API手册.md#deliverychanged)。
|
|
2112
|
-
|
|
2113
|
-
### event/group.message_recalled
|
|
2081
|
+
SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信封字段统一放在 `envelope`。`envelope` 只保留可转发的归一化元数据,`from` 由 `sender_aid` 归一化而来,`timestamp` 由 `created_at` / `t_server` 归一化而来。当前仍保留顶层 `group_id` / `seq` / `message_id` / `sender_aid` / `mention_mode` 等字段;新代码应优先通过 `msg["envelope"]["from"]`、`msg["envelope"]["timestamp"]` 等路径访问。Gateway 可能附加 `proximity` 及 `same_device` / `same_egress_ip` / `same_network`,表示由 Gateway 基于连接上下文判断的近端关系提示,不参与 E2EE AAD 或业务鉴权。
|
|
2082
|
+
|
|
2083
|
+
### delivery.changed
|
|
2084
|
+
|
|
2085
|
+
成功交付 `group.message_created` 后,四个 SDK 会通过本地 `delivery.changed` 事件通知应用合并刷新群会话 UI。群变更项使用 canonical group AID:
|
|
2086
|
+
|
|
2087
|
+
```json
|
|
2088
|
+
{
|
|
2089
|
+
"trigger": "pull_drained",
|
|
2090
|
+
"changes": [
|
|
2091
|
+
{"namespace": "group:g-abc123.agentid.pub", "delivered_count": 50}
|
|
2092
|
+
]
|
|
2093
|
+
}
|
|
2094
|
+
```
|
|
2095
|
+
|
|
2096
|
+
### group.invite_member
|
|
2097
|
+
|
|
2098
|
+
创建指定 AID 的待处理邀请,不写入正式成员表。公开群允许任意正式成员,非公开群仅 owner/admin;同一群、目标和邀请者重复调用幂等返回原记录。
|
|
2099
|
+
|
|
2100
|
+
**参数**:`group_id`、`aid`(或 `invitee_aid`)必填;`member_type` 可选(`human` / `ai`,默认 `human`)。
|
|
2101
|
+
|
|
2102
|
+
### group.list_my_invites
|
|
2103
|
+
|
|
2104
|
+
列出当前认证 AID 收到的待处理邀请,按群和目标 AID 聚合;支持 `page`、`size` 分页参数。
|
|
2105
|
+
|
|
2106
|
+
### group.accept_invite
|
|
2107
|
+
|
|
2108
|
+
被邀请 AID 以 `invite_id` 接受聚合邀请;成功后才原子写入正式成员表。
|
|
2109
|
+
|
|
2110
|
+
### group.reject_invite
|
|
2111
|
+
|
|
2112
|
+
被邀请 AID 以 `invite_id` 拒绝聚合邀请,不写入正式成员表。
|
|
2113
|
+
|
|
2114
|
+
### group.revoke_invite
|
|
2115
|
+
|
|
2116
|
+
原邀请发出者以 `invite_id` 撤回自己的待处理邀请。撤回、接受、拒绝和过期是互斥终态转换。
|
|
2117
|
+
|
|
2118
|
+
该事件不是服务端 `event/group.*`。多个群和 P2P 的 Pull 共用当前 `AUNClient` 的全局排空边界,因此一次 `pull_drained` 可以包含多个 `group:<canonical-group-aid>` 和 `p2p` 变更;有效 Push / Inline Push 则在原群消息事件处理完成后实时通知。完整 payload、折叠和零通知条件见 [06-API手册:delivery.changed](06-API手册.md#deliverychanged)。
|
|
2119
|
+
|
|
2120
|
+
### event/group.message_recalled
|
|
2114
2121
|
|
|
2115
2122
|
群消息撤回后推送给所有在线成员(与 pull 双 tombstone 兜底互补)。在线 push 是实时通道,双 tombstone 是离线 / 未读 / push 丢失时的可靠性兜底;两者最终一致,SDK 去重保证应用层只感知一次。
|
|
2116
2123
|
|