@agentunion/fastaun-browser 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +550 -464
- package/_packed_docs/CHANGELOG-validators.md +147 -0
- package/_packed_docs/CHANGELOG.md +550 -464
- package/_packed_docs/INDEX.md +201 -177
- package/_packed_docs/KITE_DOCS_GUIDE.md +38 -32
- 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 -260
- package/_packed_docs/cli/CLI/346/211/213/345/206/214.md +331 -0
- 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 +139 -746
- 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 +117 -171
- package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +6 -0
- 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 -0
- package/_packed_docs/protocol/README.md +5 -4
- package/_packed_docs/protocol/aun-docs-guide.md +2 -2
- package/_packed_docs/protocol/index.md +12 -7
- 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/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 +35 -284
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +473 -442
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +11 -7
- package/_packed_docs/sdk/09-collab-rpc-manual.md +581 -550
- package/_packed_docs/sdk/09-group-rpc-manual.md +367 -433
- 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 +57 -20
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +18 -17
- 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 +25 -24
- 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 +1661 -1180
- package/dist/client/delivery.d.ts +13 -2
- package/dist/client/delivery.d.ts.map +1 -1
- package/dist/client/delivery.js +251 -46
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/group-state.d.ts.map +1 -1
- package/dist/client/group-state.js +36 -14
- package/dist/client/group-state.js.map +1 -1
- package/dist/client/lifecycle.js +2 -2
- package/dist/client/lifecycle.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts +1 -0
- package/dist/client/rpc-pipeline.d.ts.map +1 -1
- package/dist/client/rpc-pipeline.js +166 -50
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +14 -1
- package/dist/client/v2-e2ee.d.ts.map +1 -1
- package/dist/client/v2-e2ee.js +376 -126
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +5 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +187 -46
- package/dist/client.js.map +1 -1
- package/dist/collab/client.d.ts +8 -0
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +12 -0
- package/dist/collab/client.js.map +1 -1
- package/dist/errors.d.ts +0 -20
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +8 -51
- package/dist/errors.js.map +1 -1
- package/dist/facades.d.ts +9 -4
- package/dist/facades.d.ts.map +1 -1
- package/dist/facades.js +192 -31
- package/dist/facades.js.map +1 -1
- package/dist/group-fs.d.ts +17 -0
- package/dist/group-fs.d.ts.map +1 -1
- package/dist/group-fs.js +54 -11
- package/dist/group-fs.js.map +1 -1
- package/dist/group-id.d.ts +9 -12
- package/dist/group-id.d.ts.map +1 -1
- package/dist/group-id.js +41 -63
- package/dist/group-id.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +2 -54
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb-identity-store.d.ts +3 -0
- package/dist/keystore/indexeddb-identity-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-identity-store.js +65 -0
- package/dist/keystore/indexeddb-identity-store.js.map +1 -1
- package/dist/keystore/indexeddb-shared.d.ts +3 -17
- package/dist/keystore/indexeddb-shared.d.ts.map +1 -1
- package/dist/keystore/indexeddb-shared.js +4 -47
- package/dist/keystore/indexeddb-shared.js.map +1 -1
- package/dist/keystore/indexeddb-token-store.d.ts +1 -64
- package/dist/keystore/indexeddb-token-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-token-store.js +45 -774
- package/dist/keystore/indexeddb-token-store.js.map +1 -1
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +4 -0
- package/dist/logger.js.map +1 -1
- package/dist/storage/lowlevel.d.ts +9 -1
- package/dist/storage/lowlevel.d.ts.map +1 -1
- package/dist/storage/lowlevel.js +12 -1
- package/dist/storage/lowlevel.js.map +1 -1
- package/dist/storage/vfs.d.ts +22 -0
- package/dist/storage/vfs.d.ts.map +1 -1
- package/dist/storage/vfs.js +54 -0
- package/dist/storage/vfs.js.map +1 -1
- package/dist/tools/cross-sdk-agent.js +336 -49
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +2 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +96 -3
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +39 -56
- package/dist/types.d.ts.map +1 -1
- package/dist/v2/session/session.d.ts +2 -0
- package/dist/v2/session/session.d.ts.map +1 -1
- package/dist/v2/session/session.js +58 -22
- package/dist/v2/session/session.js.map +1 -1
- package/dist/v2/state/commitment.d.ts +1 -1
- package/dist/v2/state/commitment.d.ts.map +1 -1
- package/dist/v2/state/commitment.js +5 -3
- package/dist/v2/state/commitment.js.map +1 -1
- package/dist/validators.d.ts +35 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +127 -0
- package/dist/validators.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/_packed_docs/collab-gateway-boundary-test-report.md +0 -164
|
@@ -17,15 +17,13 @@
|
|
|
17
17
|
|------|------|
|
|
18
18
|
| [group.create](#groupcreate) | 创建群组 |
|
|
19
19
|
| [group.bind_aid](#groupbind_aid) | 为普通群绑定命名 AID |
|
|
20
|
-
| [group.
|
|
20
|
+
| [group.get_info](#groupget_info) | 查询群组信息(平铺格式,唯一推荐入口) |
|
|
21
21
|
| [group.update](#groupupdate) | 更新群组资料 |
|
|
22
22
|
| [group.list_my](#grouplist_my) | 列出我的群组 |
|
|
23
23
|
| [group.search](#groupsearch) | 搜索公开群 |
|
|
24
|
-
| [group.get_public_info](#groupget_public_info) | 查询公开群信息 |
|
|
25
24
|
| [group.suspend](#groupsuspend) | 暂停群组 |
|
|
26
25
|
| [group.resume](#groupresume) | 恢复群组 |
|
|
27
26
|
| [group.dissolve](#groupdissolve) | 解散群组 |
|
|
28
|
-
| [group.get_stats](#groupget_stats) | 获取统计信息 |
|
|
29
27
|
|
|
30
28
|
### 成员管理
|
|
31
29
|
|
|
@@ -37,6 +35,8 @@
|
|
|
37
35
|
| [group.leave](#groupleave) | 主动退群 |
|
|
38
36
|
| [group.set_role](#groupset_role) | 设置角色 |
|
|
39
37
|
| [group.transfer_owner](#grouptransfer_owner) | 转让群主 |
|
|
38
|
+
| [group.bind_group_aid](#groupbind_group_aid) | 为匿名群绑定群身份 |
|
|
39
|
+
| [group.renew_group_aid](#grouprenew_group_aid) | 轮换群身份密钥 |
|
|
40
40
|
| [group.ban](#groupban) | 封禁成员 |
|
|
41
41
|
| [group.unban](#groupunban) | 解封成员 |
|
|
42
42
|
| [group.get_banlist](#groupget_banlist) | 获取封禁列表 |
|
|
@@ -60,7 +60,6 @@
|
|
|
60
60
|
|------|------|
|
|
61
61
|
| [group.set_settings](#groupset_settings) | 统一设置群参数,含 `dispatch_mode` |
|
|
62
62
|
| [group.get_settings](#groupget_settings) | 统一读取群参数 |
|
|
63
|
-
| [group.get_dispatch_log](#groupget_dispatch_log) | 查看值班分发日志 |
|
|
64
63
|
|
|
65
64
|
### 消息
|
|
66
65
|
|
|
@@ -96,63 +95,59 @@
|
|
|
96
95
|
| 方法 | 说明 |
|
|
97
96
|
|------|------|
|
|
98
97
|
| [group.get_summary](#groupget_summary) | 获取群组摘要 |
|
|
99
|
-
| [group.get_metrics](#groupget_metrics) | 获取性能指标 |
|
|
100
98
|
|
|
101
|
-
###
|
|
99
|
+
### 群设置
|
|
102
100
|
|
|
103
101
|
| 方法 | 说明 |
|
|
104
102
|
|------|------|
|
|
105
|
-
| [group.
|
|
106
|
-
| [group.
|
|
103
|
+
| [group.set_settings](#groupset_settings) | 统一设置群参数(含公告、规则、入群要求、dispatch_mode 等) |
|
|
104
|
+
| [group.get_settings](#groupget_settings) | 统一读取群参数 |
|
|
105
|
+
|
|
106
|
+
**便利方法**:SDK 提供向后兼容的便利方法(`getAnnouncement`/`updateAnnouncement`/`getRules`/`updateRules`/`getJoinRequirements`/`updateJoinRequirements`),内部调用 `set_settings`/`get_settings`,返回旧格式。新代码建议直接使用 `set_settings`/`get_settings`。
|
|
107
107
|
|
|
108
|
-
###
|
|
108
|
+
### 群文件系统
|
|
109
109
|
|
|
110
110
|
| 方法 | 说明 |
|
|
111
111
|
|------|------|
|
|
112
|
-
| [group.
|
|
113
|
-
| [group.
|
|
114
|
-
| [group.
|
|
115
|
-
| [group.
|
|
116
|
-
| [group.
|
|
117
|
-
| [group.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
|
122
|
-
|
|
123
|
-
| [group.fs.
|
|
124
|
-
| [group.fs.
|
|
125
|
-
| [group.fs.
|
|
126
|
-
| [group.fs.
|
|
127
|
-
| [group.fs.
|
|
128
|
-
| [group.fs.
|
|
129
|
-
| [group.fs.
|
|
130
|
-
| [group.fs.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
|
135
|
-
| [group.fs.complete_upload](#groupfscomplete_upload) | 完成上传 |
|
|
136
|
-
| [group.fs.mount](#groupfsmount) | 挂载成员数据区 |
|
|
137
|
-
| [group.fs.umount](#groupfsumount) | 卸载成员数据区 |
|
|
138
|
-
|
|
139
|
-
### 在线状态
|
|
140
|
-
|
|
141
|
-
| 方法 | 说明 |
|
|
112
|
+
| [group.fs.ls](#groupfsls) | 列出目录 |
|
|
113
|
+
| [group.fs.find](#groupfsfind) | 查找节点 |
|
|
114
|
+
| [group.fs.stat](#groupfsstat) | 查看节点 |
|
|
115
|
+
| [group.fs.lstat](#groupfslstat) | 查看链接本身 |
|
|
116
|
+
| [group.fs.df](#groupfsdf) | 查看用量 |
|
|
117
|
+
| [group.fs.create_download_ticket](#groupfscreate_download_ticket) | 创建下载票据 |
|
|
118
|
+
| [group.fs.set_acl](#groupfsset_acl) | 授予群自有区角色写 ACL |
|
|
119
|
+
| [group.fs.remove_acl](#groupfsremove_acl) | 撤销群自有区角色写 ACL |
|
|
120
|
+
| [group.fs.get_acl](#groupfsget_acl) | 查询群自有区角色 ACL |
|
|
121
|
+
| [group.fs.list_acl](#groupfslist_acl) | 查询群自有区角色 ACL(别名) |
|
|
122
|
+
| [group.fs.mkdir](#groupfsmkdir) | 创建目录 |
|
|
123
|
+
| [group.fs.rm](#groupfsrm) | 删除节点 |
|
|
124
|
+
| [group.fs.cp](#groupfscp) | 远程复制 |
|
|
125
|
+
| [group.fs.mv](#groupfsmv) | 远程移动 |
|
|
126
|
+
| [group.fs.check_upload](#groupfscheck_upload) | 上传前检查 |
|
|
127
|
+
| [group.fs.create_upload_session](#groupfscreate_upload_session) | 创建上传会话 |
|
|
128
|
+
| [group.fs.complete_upload](#groupfscomplete_upload) | 完成上传 |
|
|
129
|
+
| [group.fs.mount](#groupfsmount) | 挂载成员数据区 |
|
|
130
|
+
| [group.fs.umount](#groupfsumount) | 卸载成员数据区 |
|
|
131
|
+
|
|
132
|
+
### 在线状态
|
|
133
|
+
|
|
134
|
+
| 方法 | 说明 |
|
|
142
135
|
|------|------|
|
|
143
136
|
| [group.get_online_members](#groupget_online_members) | 在线成员 |
|
|
144
137
|
|
|
145
138
|
---
|
|
146
139
|
|
|
147
|
-
## Group ID
|
|
148
|
-
|
|
149
|
-
`group_id` 的 canonical 形式为 `group.{issuer-domain}/{base}`,例如 `group.agentid.pub/10042`、`group.agentid.pub/team01`、`group.agentid.pub/g-abc123`。服务端接受输入后会规范化为 canonical group_id;响应和内部存储以 canonical 形式为准。SDK 发起 `group.*` 调用时也会对带域旧格式做同等规范化;裸客户端应使用同一规则生成签名和 E2EE AAD,避免同一群的不同别名产生不同材料。
|
|
140
|
+
## Group AID / Group ID 兼容规范
|
|
150
141
|
|
|
151
|
-
|
|
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 参数名继续保留,但语义上只是兼容字段。
|
|
152
143
|
|
|
153
|
-
`group
|
|
144
|
+
SDK 发起 `group.*` 调用时会把传入的 `group_id` / `groupId` / `group_aid` / `groupAid` 统一规范化为 `group_aid`。裸客户端也应使用同一 `group_aid` 生成签名材料和 E2EE AAD,避免同一群的历史别名产生不同材料。服务端响应可能同时返回 `group_id` 和 `group_aid`;新代码应优先读取 `group_aid`,仅兼容旧版本或历史数据时回退读取 `group_id`。
|
|
154
145
|
|
|
155
|
-
|
|
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 简写链接可继续由服务端兼容解析。
|
|
156
151
|
|
|
157
152
|
---
|
|
158
153
|
|
|
@@ -160,15 +155,16 @@
|
|
|
160
155
|
|
|
161
156
|
### group.create
|
|
162
157
|
|
|
163
|
-
创建群组。调用者自动成为 owner。支持创建命名群(传入 `group_name` + `public_key
|
|
158
|
+
创建群组。调用者自动成为 owner。支持创建命名群(传入 `group_name` + `public_key`)。新建群主标识以 `group_aid` 为准;`group_id` 仅作为兼容字段保留。
|
|
164
159
|
|
|
165
160
|
**参数**:
|
|
166
161
|
|
|
167
162
|
| 参数 | 类型 | 必填 | 说明 |
|
|
168
163
|
|------|------|------|------|
|
|
169
164
|
| `name` | string | 是 | 群组显示名称 |
|
|
170
|
-
| `
|
|
171
|
-
| `
|
|
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}` |
|
|
172
168
|
| `public_key` | string | 否 | 命名群公钥(base64 编码),与 `group_name` 同时提供 |
|
|
173
169
|
| `curve` | string | 否 | 密钥曲线,默认 `"P-256"` |
|
|
174
170
|
| `visibility` | string | 否 | `"public"` / `"private"`,默认由配置决定 |
|
|
@@ -185,7 +181,8 @@
|
|
|
185
181
|
```json
|
|
186
182
|
{
|
|
187
183
|
"group": {
|
|
188
|
-
"group_id": "
|
|
184
|
+
"group_id": "my-team.agentid.pub",
|
|
185
|
+
"group_aid": "my-team.agentid.pub",
|
|
189
186
|
"name": "测试群",
|
|
190
187
|
"owner_aid": "alice.agentid.pub",
|
|
191
188
|
"creator_aid": "alice.agentid.pub",
|
|
@@ -196,10 +193,9 @@
|
|
|
196
193
|
"member_count": 1,
|
|
197
194
|
"message_seq": 0,
|
|
198
195
|
"event_seq": 0,
|
|
199
|
-
"group_url": "https://group.agentid.pub/
|
|
200
|
-
"
|
|
201
|
-
"
|
|
202
|
-
"updated_at": 1234567890
|
|
196
|
+
"group_url": "https://group.agentid.pub/my-team.agentid.pub",
|
|
197
|
+
"created_at": 1234567890000,
|
|
198
|
+
"updated_at": 1234567890000
|
|
203
199
|
},
|
|
204
200
|
"aid_cert": {
|
|
205
201
|
"cert": "-----BEGIN CERTIFICATE-----...",
|
|
@@ -211,9 +207,9 @@
|
|
|
211
207
|
}
|
|
212
208
|
```
|
|
213
209
|
|
|
214
|
-
> `aid_cert` 仅在命名群创建时返回。`group_aid`
|
|
215
|
-
|
|
216
|
-
|
|
210
|
+
> `aid_cert` 仅在命名群创建时返回。`group_aid` 是新代码应使用的主标识;`group_id` 为兼容字段,新群通常与 `group_aid` 相同,历史群可能保留旧存储值。
|
|
211
|
+
|
|
212
|
+
**标识格式**:目标态为 `{base}.{issuer-domain}`。旧格式 `group.{issuer-domain}/{base}`、`{base}@{issuer-domain}` 会在 API 边界转换为目标态 `group_aid`。
|
|
217
213
|
|
|
218
214
|
### group.bind_aid
|
|
219
215
|
|
|
@@ -223,7 +219,7 @@
|
|
|
223
219
|
|
|
224
220
|
| 参数 | 类型 | 必填 | 说明 |
|
|
225
221
|
|------|------|------|------|
|
|
226
|
-
| `group_id` | string | 是 |
|
|
222
|
+
| `group_id` | string | 是 | 群组标识;兼容参数名,值使用目标态 `group_aid` |
|
|
227
223
|
| `group_name` | string | 是 | 命名群标识,4-64 字符,`[a-z0-9_-]+` |
|
|
228
224
|
| `public_key` | string | 是 | 群公钥(base64 编码) |
|
|
229
225
|
| `curve` | string | 否 | 密钥曲线,默认 `"P-256"` |
|
|
@@ -237,27 +233,36 @@
|
|
|
237
233
|
}
|
|
238
234
|
```
|
|
239
235
|
|
|
240
|
-
### group.
|
|
236
|
+
### group.get_info
|
|
241
237
|
|
|
242
|
-
|
|
238
|
+
查询群组信息,返回平铺格式。默认返回公开字段;需要成员或管理员权限的字段必须通过 `required` 显式声明。
|
|
243
239
|
|
|
244
240
|
**参数**:
|
|
245
241
|
|
|
246
242
|
| 参数 | 类型 | 必填 | 说明 |
|
|
247
243
|
|------|------|------|------|
|
|
248
|
-
| `group_id` | string | 是 |
|
|
244
|
+
| `group_id` | string | 是 | 群组标识;兼容参数名,值使用目标态 `group_aid` |
|
|
245
|
+
| `required` | string[] | 否 | 受限字段声明:`member`、`state`、`e2ee`、`avatar` |
|
|
249
246
|
|
|
250
|
-
|
|
247
|
+
**默认响应**:
|
|
251
248
|
|
|
252
249
|
```json
|
|
253
250
|
{
|
|
254
251
|
"found": true,
|
|
255
252
|
"group_id": "g-abc123.agentid.pub",
|
|
256
|
-
"
|
|
253
|
+
"group_aid": "g-abc123.agentid.pub",
|
|
254
|
+
"name": "开发讨论组",
|
|
255
|
+
"visibility": "public",
|
|
256
|
+
"status": "active",
|
|
257
|
+
"description": "技术讨论群",
|
|
258
|
+
"member_count": 42,
|
|
259
|
+
"created_at": 1234567890000
|
|
257
260
|
}
|
|
258
261
|
```
|
|
259
262
|
|
|
260
|
-
|
|
263
|
+
`required=["member"]` 会额外返回 `owner_aid`、`creator_aid`、`message_seq`、`event_seq`、`e2ee_epoch`、`updated_at`、`my_role` 等成员可见字段。
|
|
264
|
+
|
|
265
|
+
> `group.get` 和 `group.info` 已合并到 `group.get_info`;`group.get_info` 默认行为等价于原公开信息查询。
|
|
261
266
|
|
|
262
267
|
### group.update
|
|
263
268
|
|
|
@@ -267,7 +272,7 @@
|
|
|
267
272
|
|
|
268
273
|
| 参数 | 类型 | 必填 | 说明 |
|
|
269
274
|
|------|------|------|------|
|
|
270
|
-
| `group_id` | string | 是 |
|
|
275
|
+
| `group_id` | string | 是 | 群组标识;兼容参数名,值使用目标态 `group_aid` |
|
|
271
276
|
| `name` | string | 否 | 新名称 |
|
|
272
277
|
| `visibility` | string | 否 | 新可见性 |
|
|
273
278
|
| `description` | string | 否 | 新描述 |
|
|
@@ -296,7 +301,7 @@
|
|
|
296
301
|
"name": "项目讨论",
|
|
297
302
|
"visibility": "private",
|
|
298
303
|
"member_count": 5,
|
|
299
|
-
"updated_at":
|
|
304
|
+
"updated_at": 1234567890000,
|
|
300
305
|
"role": "owner"
|
|
301
306
|
}
|
|
302
307
|
],
|
|
@@ -334,26 +339,11 @@
|
|
|
334
339
|
|
|
335
340
|
> **注意**:当前 `page` 固定为 1,不支持翻页。仅返回公开群组。
|
|
336
341
|
|
|
337
|
-
### group.get_public_info
|
|
338
|
-
|
|
339
|
-
查询公开群组信息。仅限 `visibility=public` 的群组可查询。
|
|
340
|
-
|
|
341
|
-
**参数**:`group_id` (string, 必填)
|
|
342
|
-
|
|
343
|
-
**响应**:
|
|
344
|
-
|
|
345
|
-
```json
|
|
346
|
-
{
|
|
347
|
-
"group_id": "g-abc123.agentid.pub",
|
|
348
|
-
"group": { ... }
|
|
349
|
-
}
|
|
350
|
-
```
|
|
351
|
-
|
|
352
342
|
### group.suspend
|
|
353
343
|
|
|
354
344
|
暂停群组。暂停期间不能发送消息。需要 **admin 及以上**权限。
|
|
355
345
|
|
|
356
|
-
**参数**:`group_id
|
|
346
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
357
347
|
|
|
358
348
|
**响应**:
|
|
359
349
|
|
|
@@ -370,7 +360,7 @@
|
|
|
370
360
|
|
|
371
361
|
恢复暂停的群组。需要 **admin 及以上**权限。
|
|
372
362
|
|
|
373
|
-
**参数**:`group_id
|
|
363
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
374
364
|
|
|
375
365
|
**响应**:
|
|
376
366
|
|
|
@@ -387,7 +377,7 @@
|
|
|
387
377
|
|
|
388
378
|
永久解散群组。不可恢复。需要 **owner** 权限。
|
|
389
379
|
|
|
390
|
-
**参数**:`group_id
|
|
380
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
391
381
|
|
|
392
382
|
**响应**:
|
|
393
383
|
|
|
@@ -398,29 +388,6 @@
|
|
|
398
388
|
}
|
|
399
389
|
```
|
|
400
390
|
|
|
401
|
-
### group.get_stats
|
|
402
|
-
|
|
403
|
-
获取群组统计信息。需要 **admin 及以上**权限。
|
|
404
|
-
|
|
405
|
-
**参数**:`group_id` (string, 必填)
|
|
406
|
-
|
|
407
|
-
**响应**:
|
|
408
|
-
|
|
409
|
-
```json
|
|
410
|
-
{
|
|
411
|
-
"group_id": "g-abc123.agentid.pub",
|
|
412
|
-
"status": "active",
|
|
413
|
-
"member_count": 42,
|
|
414
|
-
"message_seq": 1000,
|
|
415
|
-
"event_seq": 500,
|
|
416
|
-
"pending_join_request_count": 3,
|
|
417
|
-
"active_invite_code_count": 2,
|
|
418
|
-
"ban_count": 1,
|
|
419
|
-
"online_count": 10,
|
|
420
|
-
"runtime_stats": { ... },
|
|
421
|
-
"cleanup": { ... }
|
|
422
|
-
}
|
|
423
|
-
```
|
|
424
391
|
|
|
425
392
|
---
|
|
426
393
|
|
|
@@ -434,7 +401,7 @@
|
|
|
434
401
|
|
|
435
402
|
| 参数 | 类型 | 必填 | 说明 |
|
|
436
403
|
|------|------|------|------|
|
|
437
|
-
| `group_id` | string | 是 |
|
|
404
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
438
405
|
| `aid` | string | 是 | 要添加的 AID |
|
|
439
406
|
| `role` | string | 否 | `"admin"` / `"member"`,默认 `"member"` |
|
|
440
407
|
| `member_type` | string | 否 | `"human"` / `"ai"`,默认 `"human"` |
|
|
@@ -448,7 +415,7 @@
|
|
|
448
415
|
"aid": "bob.agentid.pub",
|
|
449
416
|
"role": "member",
|
|
450
417
|
"member_type": "human",
|
|
451
|
-
"joined_at":
|
|
418
|
+
"joined_at": 1234567890000
|
|
452
419
|
}
|
|
453
420
|
}
|
|
454
421
|
```
|
|
@@ -461,7 +428,7 @@
|
|
|
461
428
|
|
|
462
429
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
463
430
|
|------|------|------|--------|------|
|
|
464
|
-
| `group_id` | string | 是 | — |
|
|
431
|
+
| `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
465
432
|
| `page` | integer | 否 | 1 | 页码 |
|
|
466
433
|
| `size` | integer | 否 | 50 | 每页条数(最大 200) |
|
|
467
434
|
| `role` | string | 否 | — | 按角色过滤(owner/admin/member) |
|
|
@@ -477,9 +444,9 @@
|
|
|
477
444
|
"aid": "alice.agentid.pub",
|
|
478
445
|
"role": "owner",
|
|
479
446
|
"member_type": "human",
|
|
480
|
-
"joined_at":
|
|
447
|
+
"joined_at": 1234567890000,
|
|
481
448
|
"last_ack_seq": 100,
|
|
482
|
-
"last_pull_at":
|
|
449
|
+
"last_pull_at": 1234567890000
|
|
483
450
|
}
|
|
484
451
|
],
|
|
485
452
|
"total": 1,
|
|
@@ -497,7 +464,7 @@
|
|
|
497
464
|
|
|
498
465
|
| 参数 | 类型 | 必填 | 说明 |
|
|
499
466
|
|------|------|------|------|
|
|
500
|
-
| `group_id` | string | 是 |
|
|
467
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
501
468
|
| `aid` | string | 是 | 要踢出的 AID |
|
|
502
469
|
|
|
503
470
|
**响应**:
|
|
@@ -513,7 +480,7 @@
|
|
|
513
480
|
|
|
514
481
|
主动退出群组。owner 不能直接退群,需先转让群主。
|
|
515
482
|
|
|
516
|
-
**参数**:`group_id
|
|
483
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
517
484
|
|
|
518
485
|
**响应**:
|
|
519
486
|
|
|
@@ -526,13 +493,13 @@
|
|
|
526
493
|
|
|
527
494
|
### group.set_role
|
|
528
495
|
|
|
529
|
-
设置成员角色。需要 **owner** 权限。不能改变 owner
|
|
496
|
+
设置成员角色。需要 **owner** 权限。不能改变 owner 角色。该 RPC 只改变 membership 中的角色事实,不授予或撤销群自有区写 ACL;`role:admin` 是否可写群自有区由 `group.fs.set_acl` / `group.fs.remove_acl` 显式控制。
|
|
530
497
|
|
|
531
498
|
**参数**:
|
|
532
499
|
|
|
533
500
|
| 参数 | 类型 | 必填 | 说明 |
|
|
534
501
|
|------|------|------|------|
|
|
535
|
-
| `group_id` | string | 是 |
|
|
502
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
536
503
|
| `aid` | string | 是 | 目标 AID |
|
|
537
504
|
| `role` | string | 是 | `"admin"` / `"member"` |
|
|
538
505
|
|
|
@@ -540,16 +507,20 @@
|
|
|
540
507
|
|
|
541
508
|
```json
|
|
542
509
|
{
|
|
543
|
-
"
|
|
510
|
+
"group": { ... },
|
|
544
511
|
"member": {
|
|
545
512
|
"group_id": "g-abc123.agentid.pub",
|
|
546
513
|
"aid": "bob.agentid.pub",
|
|
547
514
|
"role": "admin",
|
|
548
515
|
"member_type": "human",
|
|
549
|
-
"joined_at":
|
|
516
|
+
"joined_at": 1234567890000,
|
|
550
517
|
"last_ack_seq": 0,
|
|
551
518
|
"last_pull_at": 0
|
|
552
|
-
}
|
|
519
|
+
},
|
|
520
|
+
"old_role": "member",
|
|
521
|
+
"new_role": "admin",
|
|
522
|
+
"acl_model": "role_based",
|
|
523
|
+
"acl_policy": "unchanged"
|
|
553
524
|
}
|
|
554
525
|
```
|
|
555
526
|
|
|
@@ -561,7 +532,7 @@
|
|
|
561
532
|
|
|
562
533
|
| 参数 | 类型 | 必填 | 说明 |
|
|
563
534
|
|------|------|------|------|
|
|
564
|
-
| `group_id` | string | 是 |
|
|
535
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
565
536
|
| `new_owner` | string | 是 | 新群主 AID(也接受 `aid`) |
|
|
566
537
|
|
|
567
538
|
**响应**:
|
|
@@ -574,6 +545,113 @@
|
|
|
574
545
|
}
|
|
575
546
|
```
|
|
576
547
|
|
|
548
|
+
### group.bind_group_aid
|
|
549
|
+
|
|
550
|
+
为匿名群绑定群身份(group_aid)。需要 owner 权限。
|
|
551
|
+
|
|
552
|
+
**幂等保证**:
|
|
553
|
+
- 已绑定且公钥匹配:返回已绑定的 group_aid 和证书
|
|
554
|
+
- 已绑定但公钥不同:报错 `group_aid_already_bound_different_key`
|
|
555
|
+
- 未绑定:签发新 group_aid 并绑定
|
|
556
|
+
|
|
557
|
+
**参数**:
|
|
558
|
+
|
|
559
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
560
|
+
|------|------|------|------|
|
|
561
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
562
|
+
| `public_key` | string | 是 | 公钥 DER base64(SPKI 格式) |
|
|
563
|
+
| `curve` | string | 否 | 曲线名称(默认 P-256) |
|
|
564
|
+
|
|
565
|
+
**响应**:
|
|
566
|
+
|
|
567
|
+
```json
|
|
568
|
+
{
|
|
569
|
+
"group": {
|
|
570
|
+
"group_id": "my-team.agentid.pub",
|
|
571
|
+
"group_aid": "my-team.agentid.pub",
|
|
572
|
+
...
|
|
573
|
+
},
|
|
574
|
+
"aid_cert": {
|
|
575
|
+
"cert": "-----BEGIN CERTIFICATE-----...",
|
|
576
|
+
"agentid": "my-team.agentid.pub"
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
**SDK 封装**:
|
|
582
|
+
|
|
583
|
+
各语言 SDK 的 `bindGroupAid` 方法已实现幂等逻辑:
|
|
584
|
+
1. 优先从 pending 槽位加载暂存密钥(崩溃恢复)
|
|
585
|
+
2. 未命中则生成新密钥并暂存到 pending 槽位
|
|
586
|
+
3. 调用 RPC 成功后导入 group_aid 身份并清理 pending 槽位
|
|
587
|
+
|
|
588
|
+
### group.renew_group_aid
|
|
589
|
+
|
|
590
|
+
轮换群身份密钥。需要 owner 权限,且必须持有旧 group_aid 私钥。
|
|
591
|
+
|
|
592
|
+
**用途**:
|
|
593
|
+
- 群主密钥泄露后的安全轮换
|
|
594
|
+
- 定期密钥更新符合安全策略
|
|
595
|
+
|
|
596
|
+
**验证**:
|
|
597
|
+
- 服务端验证 `renew_proof` 签名(用旧私钥签名 canonical payload)
|
|
598
|
+
- 验证 `old_public_key` 与当前 group_aid 证书匹配
|
|
599
|
+
- 签发新证书并更新 group_aid
|
|
600
|
+
|
|
601
|
+
**参数**:
|
|
602
|
+
|
|
603
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
604
|
+
|------|------|------|------|
|
|
605
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
606
|
+
| `group_aid` | string | 否 | 群身份 AID(可选,服务端可推导) |
|
|
607
|
+
| `old_public_key` | string | 是 | 旧公钥 DER base64 |
|
|
608
|
+
| `new_public_key` | string | 是 | 新公钥 DER base64 |
|
|
609
|
+
| `curve` | string | 否 | 新密钥曲线(默认 P-256) |
|
|
610
|
+
| `renew_proof` | object | 是 | 轮换授权签名 |
|
|
611
|
+
|
|
612
|
+
**renew_proof 结构**:
|
|
613
|
+
|
|
614
|
+
```json
|
|
615
|
+
{
|
|
616
|
+
"nonce": "随机 nonce(32 字符十六进制)",
|
|
617
|
+
"issued_ms": 1234567890000,
|
|
618
|
+
"signature": "用旧私钥签名的 base64"
|
|
619
|
+
}
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
**签名 canonical payload**:
|
|
623
|
+
|
|
624
|
+
```
|
|
625
|
+
aun-group-aid-renew-v1|{group_id}|{group_aid}|{sha256(old_public_key)}|{sha256(new_public_key)}|{nonce}|{issued_ms}
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
所有字段小写,用 `|` 分隔。
|
|
629
|
+
|
|
630
|
+
**响应**:
|
|
631
|
+
|
|
632
|
+
```json
|
|
633
|
+
{
|
|
634
|
+
"group": {
|
|
635
|
+
"group_id": "my-team.agentid.pub",
|
|
636
|
+
"group_aid": "my-team.agentid.pub",
|
|
637
|
+
...
|
|
638
|
+
},
|
|
639
|
+
"aid_cert": {
|
|
640
|
+
"cert": "-----BEGIN CERTIFICATE-----...",
|
|
641
|
+
"agentid": "my-team.agentid.pub"
|
|
642
|
+
},
|
|
643
|
+
"old_cert_revoked": true
|
|
644
|
+
}
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
**SDK 封装**:
|
|
648
|
+
|
|
649
|
+
各语言 SDK 的 `renewGroupAid` 方法自动处理:
|
|
650
|
+
1. 加载旧 group_aid 私钥
|
|
651
|
+
2. 生成新密钥对
|
|
652
|
+
3. 用旧私钥签名 canonical payload
|
|
653
|
+
4. 调用 RPC 并用新密钥覆盖本地 group_aid 身份
|
|
654
|
+
|
|
577
655
|
### group.ban
|
|
578
656
|
|
|
579
657
|
封禁成员。被封禁者禁止发消息但保留成员身份,且不能重新加入(如先被移除再封禁)。需要 **admin 及以上**权限。
|
|
@@ -582,7 +660,7 @@
|
|
|
582
660
|
|
|
583
661
|
| 参数 | 类型 | 必填 | 说明 |
|
|
584
662
|
|------|------|------|------|
|
|
585
|
-
| `group_id` | string | 是 |
|
|
663
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
586
664
|
| `subject` | string | 是 | 要封禁的 AID(也接受 `aid`) |
|
|
587
665
|
| `reason` | string | 否 | 封禁原因 |
|
|
588
666
|
| `expires_at` | integer | 否 | 过期时间戳(0 = 永久) |
|
|
@@ -599,7 +677,7 @@
|
|
|
599
677
|
"banned_by": "alice.agentid.pub",
|
|
600
678
|
"reason": "垃圾消息",
|
|
601
679
|
"expires_at": 0,
|
|
602
|
-
"created_at":
|
|
680
|
+
"created_at": 1234567890000
|
|
603
681
|
}
|
|
604
682
|
}
|
|
605
683
|
```
|
|
@@ -608,7 +686,7 @@
|
|
|
608
686
|
|
|
609
687
|
解除封禁。需要 **admin 及以上**权限。
|
|
610
688
|
|
|
611
|
-
**参数**:`group_id
|
|
689
|
+
**参数**:`group_id`(string,兼容字段,值使用目标态 `group_aid`),`subject` 或 `aid` (string)
|
|
612
690
|
|
|
613
691
|
**响应**:
|
|
614
692
|
|
|
@@ -624,7 +702,7 @@
|
|
|
624
702
|
|
|
625
703
|
获取封禁列表。需要 **admin 及以上**权限。
|
|
626
704
|
|
|
627
|
-
**参数**:`group_id
|
|
705
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
628
706
|
|
|
629
707
|
**响应**:
|
|
630
708
|
|
|
@@ -638,7 +716,7 @@
|
|
|
638
716
|
"banned_by": "alice.agentid.pub",
|
|
639
717
|
"reason": "垃圾消息",
|
|
640
718
|
"expires_at": 0,
|
|
641
|
-
"created_at":
|
|
719
|
+
"created_at": 1234567890000
|
|
642
720
|
}
|
|
643
721
|
],
|
|
644
722
|
"total": 1,
|
|
@@ -659,7 +737,7 @@
|
|
|
659
737
|
|
|
660
738
|
| 参数 | 类型 | 必填 | 说明 |
|
|
661
739
|
|------|------|------|------|
|
|
662
|
-
| `group_id` | string | 是 |
|
|
740
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
663
741
|
| `message` | string | 否 | 申请留言 |
|
|
664
742
|
| `answer` | string | 否 | 入群问题的答案 |
|
|
665
743
|
|
|
@@ -695,8 +773,8 @@
|
|
|
695
773
|
"message": "请加我",
|
|
696
774
|
"answer": "...",
|
|
697
775
|
"status": "pending",
|
|
698
|
-
"created_at":
|
|
699
|
-
"updated_at":
|
|
776
|
+
"created_at": 1234567890000,
|
|
777
|
+
"updated_at": 1234567890000,
|
|
700
778
|
"expires_at": 1234654290,
|
|
701
779
|
"reviewed_by": null,
|
|
702
780
|
"rejection_reason": null
|
|
@@ -712,7 +790,7 @@
|
|
|
712
790
|
|
|
713
791
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
714
792
|
|------|------|------|--------|------|
|
|
715
|
-
| `group_id` | string | 是 | — |
|
|
793
|
+
| `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
716
794
|
| `status` | string | 否 | `"pending"` | `"pending"` / `"approved"` / `"rejected"` |
|
|
717
795
|
| `page` | integer | 否 | 1 | 页码 |
|
|
718
796
|
| `size` | integer | 否 | — | 每页数量 |
|
|
@@ -728,8 +806,8 @@
|
|
|
728
806
|
"aid": "carol.agentid.pub",
|
|
729
807
|
"message": "请加我",
|
|
730
808
|
"status": "pending",
|
|
731
|
-
"created_at":
|
|
732
|
-
"updated_at":
|
|
809
|
+
"created_at": 1234567890000,
|
|
810
|
+
"updated_at": 1234567890000
|
|
733
811
|
}
|
|
734
812
|
],
|
|
735
813
|
"total": 1,
|
|
@@ -746,7 +824,7 @@
|
|
|
746
824
|
|
|
747
825
|
| 参数 | 类型 | 必填 | 说明 |
|
|
748
826
|
|------|------|------|------|
|
|
749
|
-
| `group_id` | string | 是 |
|
|
827
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
750
828
|
| `aid` | string | 是 | 申请人 AID |
|
|
751
829
|
| `approve` | boolean | 否 | 批准或拒绝,默认 `true` |
|
|
752
830
|
| `reason` | string | 否 | 拒绝原因 |
|
|
@@ -784,7 +862,7 @@
|
|
|
784
862
|
|
|
785
863
|
| 参数 | 类型 | 必填 | 说明 |
|
|
786
864
|
|------|------|------|------|
|
|
787
|
-
| `group_id` | string | 是 |
|
|
865
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
788
866
|
| `requests` | array | 是 | 审批列表 |
|
|
789
867
|
|
|
790
868
|
`requests` 数组每项:
|
|
@@ -816,7 +894,7 @@
|
|
|
816
894
|
|
|
817
895
|
| 参数 | 类型 | 必填 | 说明 |
|
|
818
896
|
|------|------|------|------|
|
|
819
|
-
| `group_id` | string | 是 |
|
|
897
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
820
898
|
| `code` | string | 否 | 自定义邀请码(不提供则自动生成) |
|
|
821
899
|
| `max_uses` | integer | 否 | 最大使用次数,默认 1,必须 > 0 |
|
|
822
900
|
| `expires_in_seconds` | integer | 否 | 有效期(秒),默认由 invite_code_ttl_days 配置(7 天) |
|
|
@@ -834,7 +912,7 @@
|
|
|
834
912
|
"max_uses": 10,
|
|
835
913
|
"used_count": 0,
|
|
836
914
|
"status": "active",
|
|
837
|
-
"created_at":
|
|
915
|
+
"created_at": 1234567890000
|
|
838
916
|
}
|
|
839
917
|
}
|
|
840
918
|
```
|
|
@@ -859,13 +937,13 @@
|
|
|
859
937
|
|
|
860
938
|
列出群组的邀请码。需要 admin 权限。
|
|
861
939
|
|
|
862
|
-
**参数**:`group_id
|
|
940
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
863
941
|
|
|
864
942
|
### group.revoke_invite_code
|
|
865
943
|
|
|
866
944
|
撤销邀请码。需要 admin 权限。
|
|
867
945
|
|
|
868
|
-
**参数**:`group_id
|
|
946
|
+
**参数**:`group_id`(string,兼容字段,值使用目标态 `group_aid`),`code` (string)
|
|
869
947
|
|
|
870
948
|
---
|
|
871
949
|
|
|
@@ -881,7 +959,7 @@
|
|
|
881
959
|
|
|
882
960
|
| 参数 | 类型 | 必填 | 说明 |
|
|
883
961
|
|------|------|------|------|
|
|
884
|
-
| `group_id` | string | 是 |
|
|
962
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
885
963
|
| `settings` | object | 是 | 要写入的设置键值 |
|
|
886
964
|
| `settings["dispatch_mode"]` | string | 否 | `"broadcast"` / `"mention"`,默认 `"broadcast"` |
|
|
887
965
|
| `settings["rules.content"]` | string | 否 | 群规则正文 |
|
|
@@ -928,7 +1006,7 @@ await client.call("group.set_settings", {
|
|
|
928
1006
|
|
|
929
1007
|
| 参数 | 类型 | 必填 | 说明 |
|
|
930
1008
|
|------|------|------|------|
|
|
931
|
-
| `group_id` | string | 是 |
|
|
1009
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
932
1010
|
| `keys` | array | 否 | 只读取指定 key,如 `["dispatch_mode", "rules.content"]` |
|
|
933
1011
|
|
|
934
1012
|
**响应**:
|
|
@@ -942,32 +1020,6 @@ await client.call("group.set_settings", {
|
|
|
942
1020
|
}
|
|
943
1021
|
```
|
|
944
1022
|
|
|
945
|
-
### group.get_dispatch_log
|
|
946
|
-
|
|
947
|
-
读取值班分发日志。成员可读,主要用于诊断 `dispatch.mode=duty`、超时回退、批量分发等运行时行为。
|
|
948
|
-
|
|
949
|
-
**参数**:
|
|
950
|
-
|
|
951
|
-
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
952
|
-
|------|------|------|--------|------|
|
|
953
|
-
| `group_id` | string | 是 | — | 群组 ID |
|
|
954
|
-
| `date` | string | 否 | 当天 | 日志日期,格式由服务端日志文件名解析 |
|
|
955
|
-
| `size` / `limit` | integer | 否 | 100 | 返回最后 N 条,最大 500 |
|
|
956
|
-
|
|
957
|
-
**响应**:
|
|
958
|
-
|
|
959
|
-
```json
|
|
960
|
-
{
|
|
961
|
-
"group_id": "g-abc123.agentid.pub",
|
|
962
|
-
"items": [],
|
|
963
|
-
"total": 0,
|
|
964
|
-
"page": 1,
|
|
965
|
-
"size": 100
|
|
966
|
-
}
|
|
967
|
-
```
|
|
968
|
-
|
|
969
|
-
---
|
|
970
|
-
|
|
971
1023
|
## 消息
|
|
972
1024
|
|
|
973
1025
|
### group.send
|
|
@@ -980,7 +1032,7 @@ await client.call("group.set_settings", {
|
|
|
980
1032
|
|
|
981
1033
|
| 参数 | 类型 | 必填 | 说明 |
|
|
982
1034
|
|------|------|------|------|
|
|
983
|
-
| `group_id` | string | 是 |
|
|
1035
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
984
1036
|
| `payload` | object | 否 | 消息内容 |
|
|
985
1037
|
| `type` | string | 否 | 信封/封装类型,普通业务消息无需填写;SDK 加密群消息时自动使用 `e2ee.group_encrypted` |
|
|
986
1038
|
| `attachments` | array | 否 | 兼容旧接口的顶层附件元数据;推荐把业务附件放入 `payload.attachments` |
|
|
@@ -988,7 +1040,7 @@ await client.call("group.set_settings", {
|
|
|
988
1040
|
|
|
989
1041
|
### Payload 参考约定
|
|
990
1042
|
|
|
991
|
-
`group.send.params.payload` 的统一业务负载格式见 [09-payload-reference](09-payload-reference.md)。完整群消息请求仍在 `payload` 同级传入 `group_id
|
|
1043
|
+
`group.send.params.payload` 的统一业务负载格式见 [09-payload-reference](09-payload-reference.md)。完整群消息请求仍在 `payload` 同级传入 `group_id`(兼容参数名,值使用目标态 `group_aid`);业务类型放在 `payload.type`,不要与 `group.send.params.type` 信封/封装类型混用。
|
|
992
1044
|
|
|
993
1045
|
`protected_headers` 只在 SDK 加密路径生效;裸 RPC 发送明文或已加密信封时,调用方需自行遵守 [05-E2EE加密通信](05-E2EE加密通信.md#protectedheaders-与可验证上下文) 的格式和校验规则。
|
|
994
1046
|
|
|
@@ -1010,34 +1062,45 @@ await client.call("group.set_settings", {
|
|
|
1010
1062
|
},
|
|
1011
1063
|
"event": { ... },
|
|
1012
1064
|
"dispatch_mode": "broadcast",
|
|
1013
|
-
"dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
|
|
1014
|
-
"message_dispatch": { ... }
|
|
1015
|
-
|
|
1016
|
-
|
|
1065
|
+
"dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
|
|
1066
|
+
"message_dispatch": { ... },
|
|
1067
|
+
"envelope": {
|
|
1068
|
+
"from": "alice.agentid.pub",
|
|
1069
|
+
"group_id": "g-abc123.agentid.pub",
|
|
1070
|
+
"type": "text",
|
|
1071
|
+
"timestamp": 1234567890000,
|
|
1072
|
+
"encrypted": true,
|
|
1073
|
+
"payload_type": "text"
|
|
1074
|
+
},
|
|
1075
|
+
"payload": {"type": "text", "text": "Hello"}
|
|
1076
|
+
}
|
|
1077
|
+
```
|
|
1017
1078
|
|
|
1018
1079
|
| 字段 | 类型 | 说明 |
|
|
1019
1080
|
|------|------|------|
|
|
1020
|
-
| `group_id` | string |
|
|
1081
|
+
| `group_id` | string | 兼容字段,值语义为目标态 `group_aid` |
|
|
1021
1082
|
| `message` | object | 消息对象(含 seq、message_id、sender_aid 等) |
|
|
1022
1083
|
| `event` | object | 关联的群事件对象 |
|
|
1023
1084
|
| `dispatch_mode` | string | 群消息持久化分发模式标签:`"broadcast"` / `"mention"`;SDK 解密后也会注入到 `payload.dispatch_mode` |
|
|
1024
|
-
| `dispatch` | object | 分发策略:`mode` 为 `"broadcast"`(广播全员)或 `"duty"`(值班分发);`reason` 说明原因(如 `"duty_disabled"` / `"active_duty"` / `"no_duty_candidate"` 等) |
|
|
1025
|
-
| `duty_state` | object | 可选,值班模式下的当前状态 |
|
|
1026
|
-
| `message_dispatch` | object | 运行时分发结果;常见 `status` 包括 `"broadcast"`、`"sent"`、`"queued_batch"`、`"debounced"`、`"skipped"`、`"failed"` |
|
|
1085
|
+
| `dispatch` | object | 分发策略:`mode` 为 `"broadcast"`(广播全员)或 `"duty"`(值班分发);`reason` 说明原因(如 `"duty_disabled"` / `"active_duty"` / `"no_duty_candidate"` 等) |
|
|
1086
|
+
| `duty_state` | object | 可选,值班模式下的当前状态 |
|
|
1087
|
+
| `message_dispatch` | object | 运行时分发结果;常见 `status` 包括 `"broadcast"`、`"sent"`、`"queued_batch"`、`"debounced"`、`"skipped"`、`"failed"` |
|
|
1088
|
+
| `envelope` | object | SDK 回填的发送结果信封,包含发送方、群标识、业务类型、时间戳、加密标志、protected headers 等可转发元数据 |
|
|
1089
|
+
| `payload` | object | SDK 回填的应用层业务 payload;裸 RPC 或内部 `_skip_send_result_envelope` 路径可能没有该字段 |
|
|
1027
1090
|
|
|
1028
1091
|
### group.thought.put
|
|
1029
1092
|
|
|
1030
1093
|
写入某个发送者针对一个群上下文的思考内容。该内容不是普通群消息:服务端不分配消息 `seq`,不广播,不进入 `group.pull`,不需要 ack,也不持久化;只在内存中保留当前 head。
|
|
1031
1094
|
|
|
1032
|
-
SDK 调用时必须走群组 E2EE。应用层传入明文 `payload`,SDK 会加密成 `e2ee.group_encrypted` 信封、补齐 `thought_id` / `timestamp`,并附加 `client_signature`。裸 WebSocket 客户端若绕过 SDK
|
|
1095
|
+
SDK 调用时必须走群组 E2EE。应用层传入明文 `payload`,SDK 会加密成 V2 `e2ee.group_encrypted` 信封、补齐 `thought_id` / `timestamp`,并附加 `client_signature`。裸 WebSocket 客户端若绕过 SDK,至少必须自行完成 V2 envelope、`sender_signature`、AAD 和 state commitment 生成;`client_signature` 按 Gateway 连接级身份语义携带。
|
|
1033
1096
|
|
|
1034
|
-
|
|
1097
|
+
存储键为规范化后的 `group_aid + sender_aid + context.type + context.id`。RPC 字段名仍为 `group_id` 以兼容旧客户端,但服务端会先规范化为目标态群标识;`sender_aid` 由服务端认证态派生,不能由客户端指定;`context` 是 thought head 的唯一 selector,推荐使用 `{"type": "run", "id": "run-xxx"}`。同一 `(group_aid, sender_aid)` 保留最近 N 个 context 对应的 head,N 由群服务配置 `max_thought_heads_per_sender` 控制,当前默认值为 100;同一个 head 下可追加多条 thought item。
|
|
1035
1098
|
|
|
1036
1099
|
**参数**:
|
|
1037
1100
|
|
|
1038
1101
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1039
1102
|
|------|------|------|------|
|
|
1040
|
-
| `group_id` | string | 是 |
|
|
1103
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1041
1104
|
| `context.type` | string | 是 | 思考的上下文类型,推荐 `run` |
|
|
1042
1105
|
| `context.id` | string | 是 | 思考的上下文 ID,如 `run_id` |
|
|
1043
1106
|
| `payload` | object | 是 | SDK 加密前的思考内容;推荐格式见 [09-payload-reference](09-payload-reference.md#thought思考内容) |
|
|
@@ -1065,7 +1128,7 @@ await client.call("group.thought.put", {
|
|
|
1065
1128
|
"thought_id": "gt-...",
|
|
1066
1129
|
"type": "e2ee.group_encrypted",
|
|
1067
1130
|
"encrypted": true,
|
|
1068
|
-
"payload": {"type": "e2ee.group_encrypted", "...": "..."},
|
|
1131
|
+
"payload": {"type": "e2ee.group_encrypted", "version": "v2", "...": "..."},
|
|
1069
1132
|
"client_signature": { "...": "..." }
|
|
1070
1133
|
}
|
|
1071
1134
|
```
|
|
@@ -1091,7 +1154,7 @@ await client.call("group.thought.put", {
|
|
|
1091
1154
|
|
|
1092
1155
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1093
1156
|
|------|------|------|------|
|
|
1094
|
-
| `group_id` | string | 是 |
|
|
1157
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1095
1158
|
| `sender_aid` | string | 是 | thought 作者 AID |
|
|
1096
1159
|
| `context.type` | string | 是 | 思考的上下文类型,推荐 `run` |
|
|
1097
1160
|
| `context.id` | string | 是 | 思考的上下文 ID,如 `run_id` |
|
|
@@ -1140,9 +1203,9 @@ result = await client.call("group.thought.get", {
|
|
|
1140
1203
|
|
|
1141
1204
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
1142
1205
|
|------|------|------|--------|------|
|
|
1143
|
-
| `group_id` | string | 是 | — |
|
|
1206
|
+
| `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1144
1207
|
| `after_message_seq` | integer | 否 | 0 | 从该消息 seq 之后拉取 |
|
|
1145
|
-
| `limit` | integer | 否 |
|
|
1208
|
+
| `limit` | integer | 否 | 50 | 最大条数(最大 50;`pull_max_limit` 配置只能进一步收紧) |
|
|
1146
1209
|
| `device_id` | string | 否 | — | 设备 ID(多设备模式) |
|
|
1147
1210
|
|
|
1148
1211
|
**响应**:
|
|
@@ -1153,7 +1216,7 @@ result = await client.call("group.thought.get", {
|
|
|
1153
1216
|
"messages": [ ... ],
|
|
1154
1217
|
"latest_message_seq": 42,
|
|
1155
1218
|
"has_more": false,
|
|
1156
|
-
"limit":
|
|
1219
|
+
"limit": 50
|
|
1157
1220
|
}
|
|
1158
1221
|
```
|
|
1159
1222
|
|
|
@@ -1169,7 +1232,7 @@ result = await client.call("group.thought.get", {
|
|
|
1169
1232
|
|
|
1170
1233
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1171
1234
|
|------|------|------|------|
|
|
1172
|
-
| `group_id` | string | 是 |
|
|
1235
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1173
1236
|
| `device_id` | string | 是 | 设备 ID |
|
|
1174
1237
|
| `msg_seq` | integer | 是 | 确认到的消息序号 |
|
|
1175
1238
|
|
|
@@ -1194,7 +1257,7 @@ result = await client.call("group.thought.get", {
|
|
|
1194
1257
|
|
|
1195
1258
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1196
1259
|
|------|------|------|------|
|
|
1197
|
-
| `group_id` | string | 是 |
|
|
1260
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1198
1261
|
| `message_ids` | string[] | 是 | 待撤回消息 ID 列表,最多 100 个(`recall_max_batch`)|
|
|
1199
1262
|
| `reason` | string | 否 | 可选撤回理由,建议短文本(最长 255 字符)|
|
|
1200
1263
|
|
|
@@ -1234,191 +1297,116 @@ result = await client.call("group.thought.get", {
|
|
|
1234
1297
|
|
|
1235
1298
|
---
|
|
1236
1299
|
|
|
1237
|
-
##
|
|
1300
|
+
## 群文件系统
|
|
1238
1301
|
|
|
1239
|
-
|
|
1302
|
+
新代码统一使用 `group.fs.*`。路径为 POSIX 风格 group path:`group_aid:/docs/a.md`、`https://{group_aid}/docs/a.md` 或带 `group_id` 参数的裸路径。`group_aid:/memberdata/{member_ref}/...` 只由服务端映射到真实成员 storage,SDK 不拼接 `group_data/{group_aid}`。
|
|
1240
1303
|
|
|
1241
|
-
|
|
1304
|
+
推荐通过 SDK/CLI 使用:
|
|
1242
1305
|
|
|
1243
|
-
|
|
1306
|
+
| 语言 | 入口 |
|
|
1307
|
+
|------|------|
|
|
1308
|
+
| Python | `client.group.fs` |
|
|
1309
|
+
| TypeScript / JavaScript | `client.group.fs` |
|
|
1310
|
+
| Go | `client.Group().FS()` |
|
|
1311
|
+
| CLI | `aun group fs ...` |
|
|
1244
1312
|
|
|
1245
|
-
|
|
1313
|
+
权限与签名约束:
|
|
1246
1314
|
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
```
|
|
1315
|
+
- 群自有区是除 `memberdata` 等系统保留路径外的整个 `group_aid` namespace。`group_aid` 当前证书签名可写;`role:owner` 默认可写;`role:admin` 需要 owner 通过 `group.fs.set_acl` 显式授权后才可写。
|
|
1316
|
+
- `group.fs.set_acl` / `group.fs.remove_acl` / `group.fs.get_acl` / `group.fs.list_acl` 只能由当前 group owner 调用,且当前只允许管理或查询 `grantee_aid="role:admin"` 的群自有区角色 ACL;成员升降级、退群、踢出不会联动授权或撤销。
|
|
1317
|
+
- `memberdata/{member_ref}` 写入默认只允许该成员本人;SDK 只传 group path,不拼接真实 storage 路径。
|
|
1318
|
+
- 上传控制面会透传 `parents` 到 storage:默认 `parents=true` 时可递归创建父目录,显式 `parents=false` 时父目录必须已存在。
|
|
1319
|
+
- JavaScript 浏览器版 `cp(string, group)` 默认把 string 当文本内容上传;Node 本地路径需显式传 `sourceType: "path"`、`localPath: true` 或使用 `local:` 前缀。Python、TypeScript 和 Go 默认把 string 当本地路径。
|
|
1253
1320
|
|
|
1254
|
-
### group.
|
|
1321
|
+
### group.fs.ls
|
|
1255
1322
|
|
|
1256
|
-
|
|
1323
|
+
列出目录。参数:`path` 必填;可选 `page`、`size`、`marker`、`long`、`recursive`。响应返回 group view `items`,节点 `path` 仍为 group path。
|
|
1257
1324
|
|
|
1258
|
-
|
|
1325
|
+
### group.fs.find
|
|
1259
1326
|
|
|
1260
|
-
|
|
1261
|
-
|------|------|------|------|
|
|
1262
|
-
| `group_id` | string | 是 | 群组 ID |
|
|
1263
|
-
| `content` | string | 是 | 公告内容(上限由 announcement_max_length 配置,默认 4000) |
|
|
1264
|
-
| `attachments` | array | 否 | 存储引用数组 |
|
|
1327
|
+
查找节点。参数:`path` 必填;可选 `pattern`、`name`、`type`、`size`、`mtime`、`page`、`page_size`。
|
|
1265
1328
|
|
|
1266
|
-
|
|
1329
|
+
### group.fs.stat
|
|
1267
1330
|
|
|
1268
|
-
|
|
1269
|
-
{
|
|
1270
|
-
"group_id": "g-abc123.agentid.pub",
|
|
1271
|
-
"announcement": { ... }
|
|
1272
|
-
}
|
|
1273
|
-
```
|
|
1331
|
+
查看节点。参数:`path` 必填。响应为 NodeView。
|
|
1274
1332
|
|
|
1275
|
-
### group.
|
|
1333
|
+
### group.fs.lstat
|
|
1276
1334
|
|
|
1277
|
-
|
|
1335
|
+
查看链接节点本身。参数同 `group.fs.stat`。
|
|
1278
1336
|
|
|
1279
|
-
|
|
1337
|
+
### group.fs.df
|
|
1280
1338
|
|
|
1281
|
-
|
|
1339
|
+
查看群文件系统用量。参数可传 `path` 或 `group_id`。
|
|
1282
1340
|
|
|
1283
|
-
|
|
1284
|
-
{
|
|
1285
|
-
"group_id": "g-abc123.agentid.pub",
|
|
1286
|
-
"rules": { ... }
|
|
1287
|
-
}
|
|
1288
|
-
```
|
|
1341
|
+
### group.fs.create_download_ticket
|
|
1289
1342
|
|
|
1290
|
-
|
|
1343
|
+
创建下载票据。参数:`path` 必填。响应包含 `download_url`、可选 `sha256`、`content_type`、`file_name`。SDK 下载数据面使用该票据执行 HTTP GET 并校验 sha256。
|
|
1291
1344
|
|
|
1292
|
-
|
|
1345
|
+
### group.fs.set_acl
|
|
1293
1346
|
|
|
1294
|
-
|
|
1347
|
+
授予群自有区角色 ACL。需要当前 group owner 身份签名调用;底层由 group 服务以内部门面写入 `storage.set_acl`。
|
|
1295
1348
|
|
|
1296
|
-
|
|
1349
|
+
参数:`path` 必填,指向群自有区路径;`grantee_aid` 只能为 `role:admin`;`perms` 默认 `rwx`,必须包含写权限。`path` 可传 `group_aid:/archive` 等 group path。服务端写入 storage 内部权限位时会把 POSIX 删除位 `x` 映射为内部 `d`,对外响应仍显示 `rwx`。
|
|
1297
1350
|
|
|
1298
|
-
|
|
1351
|
+
### group.fs.remove_acl
|
|
1299
1352
|
|
|
1300
|
-
|
|
1353
|
+
撤销群自有区角色 ACL。需要当前 group owner 身份签名调用;底层由 group 服务以内部门面写入 `storage.remove_acl`。
|
|
1301
1354
|
|
|
1302
|
-
|
|
1355
|
+
参数:`path` 必填,指向群自有区路径;`grantee_aid` 只能为 `role:admin`。撤销后,当前 admin 角色成员不再因该路径的 `role:admin` ACL 获得写权限。
|
|
1303
1356
|
|
|
1304
|
-
|
|
1305
|
-
{
|
|
1306
|
-
"group_id": "g-abc123.agentid.pub",
|
|
1307
|
-
"join_requirements": {
|
|
1308
|
-
"group_id": "g-abc123.agentid.pub",
|
|
1309
|
-
"mode": "approval",
|
|
1310
|
-
"question": "请描述你的用途",
|
|
1311
|
-
"auto_approve_patterns": [],
|
|
1312
|
-
"max_pending": 100,
|
|
1313
|
-
"updated_by": "alice.agentid.pub",
|
|
1314
|
-
"updated_at": 1234567890
|
|
1315
|
-
}
|
|
1316
|
-
}
|
|
1317
|
-
```
|
|
1357
|
+
### group.fs.get_acl
|
|
1318
1358
|
|
|
1319
|
-
|
|
1359
|
+
查询群自有区角色 ACL。需要当前 group owner 身份签名调用;普通 admin/member 不能查询。参数:`path` 必填,指向群自有区路径;可传裸路径 + `group_id`,也可传完整 `group_aid:/...`。
|
|
1320
1360
|
|
|
1321
|
-
|
|
1361
|
+
响应包含 `group_id`、`group_aid`、`path`、`area`、`storage` 和 `acls`。`acls[].perms` 使用 POSIX 视图,删除权限显示为 `x`,因此 owner 授权 `role:admin:rwx` 后查询也返回 `rwx`。
|
|
1322
1362
|
|
|
1323
|
-
|
|
1363
|
+
### group.fs.list_acl
|
|
1324
1364
|
|
|
1325
|
-
|
|
1326
|
-
|------|------|------|------|
|
|
1327
|
-
| `group_id` | string | 是 | 群组 ID |
|
|
1328
|
-
| `mode` | string | 否 | `"open"` / `"approval"` / `"invite_only"` / `"closed"` |
|
|
1329
|
-
| `question` | string | 否 | 入群问题 |
|
|
1330
|
-
| `auto_approve_patterns` | array | 否 | 自动批准正则列表 |
|
|
1331
|
-
| `max_pending` | integer | 否 | 最大待审批数 |
|
|
1365
|
+
`group.fs.get_acl` 的别名,参数、权限和返回结构完全相同。
|
|
1332
1366
|
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
### group.
|
|
1372
|
-
|
|
1373
|
-
查看群文件系统用量。参数可传 `path` 或 `group_id`。
|
|
1374
|
-
|
|
1375
|
-
### group.fs.create_download_ticket
|
|
1376
|
-
|
|
1377
|
-
创建下载票据。参数:`path` 必填。响应包含 `download_url`、可选 `sha256`、`content_type`、`file_name`。SDK 下载数据面使用该票据执行 HTTP GET 并校验 sha256。
|
|
1378
|
-
|
|
1379
|
-
### group.fs.mkdir
|
|
1380
|
-
|
|
1381
|
-
创建目录。参数:`path` 必填;`parents` 可选,默认 `false`。
|
|
1382
|
-
|
|
1383
|
-
### group.fs.rm
|
|
1384
|
-
|
|
1385
|
-
删除节点。参数:`path` 必填;`recursive`、`force` 可选。
|
|
1386
|
-
|
|
1387
|
-
### group.fs.cp
|
|
1388
|
-
|
|
1389
|
-
只处理 group→group 远程复制。参数:`src`、`dst` 必填;`force`、`recursive`、`follow_symlinks` 可选。本地上传和下载由 SDK 的 `cp` 编排数据面,不直接调用此 RPC。
|
|
1390
|
-
|
|
1391
|
-
### group.fs.mv
|
|
1392
|
-
|
|
1393
|
-
只处理 group→group 远程移动。参数:`src`、`dst` 必填;`force` 可选。本地路径参与时 SDK/CLI 应拒绝。
|
|
1394
|
-
|
|
1395
|
-
### group.fs.check_upload
|
|
1396
|
-
|
|
1397
|
-
上传前检查。参数:`path`、`size_bytes`、`sha256`、`content_type`;可选 `force`、`parents`、`expected_version`、`metadata`。响应可包含 `target_exists`、`within_limit`、`instant`、`dedup_hit` 或 `skip_upload`。
|
|
1398
|
-
|
|
1399
|
-
### group.fs.create_upload_session
|
|
1400
|
-
|
|
1401
|
-
创建上传会话。参数同 `check_upload`。响应包含 `upload_url`、`session_id`、可选 `headers`。SDK 使用该 URL 执行 HTTP PUT。
|
|
1402
|
-
|
|
1403
|
-
### group.fs.complete_upload
|
|
1404
|
-
|
|
1405
|
-
完成上传。参数包含 `path`、`sha256`、`size_bytes`、可选 `session_id`、`skip_blob`、`metadata`、`expected_version`。响应为 group view NodeView。
|
|
1406
|
-
|
|
1407
|
-
### group.fs.mount
|
|
1408
|
-
|
|
1409
|
-
挂载成员数据区。参数:`path` 必填;可选 `readonly`、`require_approval`、`source_bucket`、`expires_at`、`volume_id`。
|
|
1410
|
-
|
|
1411
|
-
### group.fs.umount
|
|
1412
|
-
|
|
1413
|
-
卸载成员数据区。参数:`path` 必填。对成员数据区卸载不删除成员源数据。
|
|
1414
|
-
|
|
1415
|
-
## 在线状态
|
|
1416
|
-
|
|
1417
|
-
### group.get_online_members
|
|
1367
|
+
### group.fs.mkdir
|
|
1368
|
+
|
|
1369
|
+
创建目录。参数:`path` 必填;`parents` 可选,默认 `false`。
|
|
1370
|
+
|
|
1371
|
+
### group.fs.rm
|
|
1372
|
+
|
|
1373
|
+
删除节点。参数:`path` 必填;`recursive`、`force` 可选。
|
|
1374
|
+
|
|
1375
|
+
### group.fs.cp
|
|
1376
|
+
|
|
1377
|
+
只处理 group→group 远程复制。参数:`src`、`dst` 必填;`force`、`recursive`、`follow_symlinks` 可选。本地上传和下载由 SDK 的 `cp` 编排数据面,不直接调用此 RPC。
|
|
1378
|
+
|
|
1379
|
+
### group.fs.mv
|
|
1380
|
+
|
|
1381
|
+
只处理 group→group 远程移动。参数:`src`、`dst` 必填;`force` 可选。本地路径参与时 SDK/CLI 应拒绝。
|
|
1382
|
+
|
|
1383
|
+
### group.fs.check_upload
|
|
1384
|
+
|
|
1385
|
+
上传前检查。参数:`path`、`size_bytes`、`sha256`、`content_type`;可选 `force`、`parents`、`expected_version`、`metadata`。响应可包含 `target_exists`、`within_limit`、`instant`、`dedup_hit` 或 `skip_upload`。
|
|
1386
|
+
|
|
1387
|
+
### group.fs.create_upload_session
|
|
1388
|
+
|
|
1389
|
+
创建上传会话。参数同 `check_upload`。响应包含 `upload_url`、`session_id`、可选 `headers`。SDK 使用该 URL 执行 HTTP PUT。
|
|
1390
|
+
|
|
1391
|
+
### group.fs.complete_upload
|
|
1392
|
+
|
|
1393
|
+
完成上传。参数包含 `path`、`sha256`、`size_bytes`、可选 `session_id`、`skip_blob`、`metadata`、`expected_version`。响应为 group view NodeView。
|
|
1394
|
+
|
|
1395
|
+
### group.fs.mount
|
|
1396
|
+
|
|
1397
|
+
挂载成员数据区。参数:`path` 必填;可选 `readonly`、`require_approval`、`source_bucket`、`expires_at`、`volume_id`。
|
|
1398
|
+
|
|
1399
|
+
### group.fs.umount
|
|
1400
|
+
|
|
1401
|
+
卸载成员数据区。参数:`path` 必填。对成员数据区卸载不删除成员源数据。
|
|
1402
|
+
|
|
1403
|
+
## 在线状态
|
|
1404
|
+
|
|
1405
|
+
### group.get_online_members
|
|
1418
1406
|
|
|
1419
1407
|
获取当前在线成员列表。
|
|
1420
1408
|
|
|
1421
|
-
**参数**:`group_id
|
|
1409
|
+
**参数**:`group_id`(string,必填;兼容字段,值使用目标态 `group_aid`)
|
|
1422
1410
|
|
|
1423
1411
|
**响应**:
|
|
1424
1412
|
|
|
@@ -1433,10 +1421,10 @@ result = await client.call("group.thought.get", {
|
|
|
1433
1421
|
{
|
|
1434
1422
|
"aid": "alice.agentid.pub",
|
|
1435
1423
|
"role": "owner",
|
|
1436
|
-
"joined_at":
|
|
1424
|
+
"joined_at": 1234567890000,
|
|
1437
1425
|
"online": true,
|
|
1438
1426
|
"session_id": "sess_123",
|
|
1439
|
-
"last_active_at":
|
|
1427
|
+
"last_active_at": 1234567890000,
|
|
1440
1428
|
"expire_at": 1234571490
|
|
1441
1429
|
}
|
|
1442
1430
|
]
|
|
@@ -1457,12 +1445,12 @@ result = await client.call("group.thought.get", {
|
|
|
1457
1445
|
|
|
1458
1446
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
1459
1447
|
|------|------|------|--------|------|
|
|
1460
|
-
| `group_id` | string | 是 | — |
|
|
1448
|
+
| `group_id` | string | 是 | — | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1461
1449
|
| `device_id` | string | 否 | — | 设备 ID,多设备模式必填 |
|
|
1462
1450
|
| `device_name` | string | 否 | — | 设备名称(首次注册时使用) |
|
|
1463
1451
|
| `device_type` | string | 否 | — | 设备类型 |
|
|
1464
1452
|
| `after_event_seq` | integer | 否 | 游标位置 | 从该事件 seq 之后拉取;多设备模式下默认使用设备游标 |
|
|
1465
|
-
| `limit` | integer | 否 |
|
|
1453
|
+
| `limit` | integer | 否 | 50 | 最大条数(最大 50;`pull_max_limit` 配置只能进一步收紧) |
|
|
1466
1454
|
|
|
1467
1455
|
**响应**:
|
|
1468
1456
|
|
|
@@ -1472,7 +1460,7 @@ result = await client.call("group.thought.get", {
|
|
|
1472
1460
|
"events": [ ... ],
|
|
1473
1461
|
"latest_event_seq": 100,
|
|
1474
1462
|
"has_more": false,
|
|
1475
|
-
"limit":
|
|
1463
|
+
"limit": 50,
|
|
1476
1464
|
"cursor": {
|
|
1477
1465
|
"current_seq": 50,
|
|
1478
1466
|
"join_seq": 0,
|
|
@@ -1492,7 +1480,7 @@ result = await client.call("group.thought.get", {
|
|
|
1492
1480
|
|
|
1493
1481
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1494
1482
|
|------|------|------|------|
|
|
1495
|
-
| `group_id` | string | 是 |
|
|
1483
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1496
1484
|
| `device_id` | string | 是 | 设备 ID |
|
|
1497
1485
|
| `msg_seq` | integer | 是 | 确认到的消息序号 |
|
|
1498
1486
|
|
|
@@ -1508,7 +1496,7 @@ result = await client.call("group.thought.get", {
|
|
|
1508
1496
|
|
|
1509
1497
|
| 参数 | 类型 | 必填 | 说明 |
|
|
1510
1498
|
|------|------|------|------|
|
|
1511
|
-
| `group_id` | string | 是 |
|
|
1499
|
+
| `group_id` | string | 是 | 群组标识;兼容字段,值语义为目标态 `group_aid` |
|
|
1512
1500
|
| `device_id` | string | 是 | 设备 ID |
|
|
1513
1501
|
| `event_seq` | integer | 是 | 确认到的事件序号 |
|
|
1514
1502
|
|
|
@@ -1518,7 +1506,7 @@ result = await client.call("group.thought.get", {
|
|
|
1518
1506
|
|
|
1519
1507
|
列出当前用户在指定群组的所有设备及游标状态。
|
|
1520
1508
|
|
|
1521
|
-
**参数**:`group_id`
|
|
1509
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1522
1510
|
|
|
1523
1511
|
**响应**:
|
|
1524
1512
|
|
|
@@ -1541,7 +1529,7 @@ result = await client.call("group.thought.get", {
|
|
|
1541
1529
|
|
|
1542
1530
|
注销设备游标(清理不再使用的设备记录)。
|
|
1543
1531
|
|
|
1544
|
-
**参数**:`group_id
|
|
1532
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`),`device_id` (必填)
|
|
1545
1533
|
|
|
1546
1534
|
**响应**:`{ "success": true }`
|
|
1547
1535
|
|
|
@@ -1553,7 +1541,7 @@ result = await client.call("group.thought.get", {
|
|
|
1553
1541
|
|
|
1554
1542
|
获取管理员列表(owner + admin 角色)。
|
|
1555
1543
|
|
|
1556
|
-
**参数**:`group_id`
|
|
1544
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1557
1545
|
|
|
1558
1546
|
**响应**:
|
|
1559
1547
|
|
|
@@ -1564,7 +1552,7 @@ result = await client.call("group.thought.get", {
|
|
|
1564
1552
|
"aid": "alice.agentid.pub",
|
|
1565
1553
|
"role": "owner",
|
|
1566
1554
|
"member_type": "human",
|
|
1567
|
-
"joined_at":
|
|
1555
|
+
"joined_at": 1234567890000
|
|
1568
1556
|
}
|
|
1569
1557
|
]
|
|
1570
1558
|
}
|
|
@@ -1574,7 +1562,7 @@ result = await client.call("group.thought.get", {
|
|
|
1574
1562
|
|
|
1575
1563
|
获取群主 AID。
|
|
1576
1564
|
|
|
1577
|
-
**参数**:`group_id`
|
|
1565
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1578
1566
|
|
|
1579
1567
|
**响应**:`{ "group_id": "g-abc123.agentid.pub", "owner_aid": "alice.agentid.pub" }`
|
|
1580
1568
|
|
|
@@ -1582,7 +1570,7 @@ result = await client.call("group.thought.get", {
|
|
|
1582
1570
|
|
|
1583
1571
|
获取群组综合统计摘要。
|
|
1584
1572
|
|
|
1585
|
-
**参数**:`group_id`
|
|
1573
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1586
1574
|
|
|
1587
1575
|
**响应**:
|
|
1588
1576
|
|
|
@@ -1601,47 +1589,17 @@ result = await client.call("group.thought.get", {
|
|
|
1601
1589
|
"message_seq": 1000,
|
|
1602
1590
|
"event_seq": 2000,
|
|
1603
1591
|
"e2ee_epoch": 3,
|
|
1604
|
-
"created_at":
|
|
1605
|
-
"updated_at":
|
|
1592
|
+
"created_at": 1234567890000,
|
|
1593
|
+
"updated_at": 1234567890000
|
|
1606
1594
|
}
|
|
1607
1595
|
```
|
|
1608
1596
|
|
|
1609
|
-
### group.get_metrics
|
|
1610
|
-
|
|
1611
|
-
获取群组性能指标,包含 E2EE epoch 范围记录。需要 **admin 及以上**权限。
|
|
1612
|
-
|
|
1613
|
-
**参数**:`group_id` (必填)
|
|
1614
|
-
|
|
1615
|
-
**响应**:
|
|
1616
|
-
|
|
1617
|
-
```json
|
|
1618
|
-
{
|
|
1619
|
-
"group_id": "g-abc123.agentid.pub",
|
|
1620
|
-
"message_seq": 1000,
|
|
1621
|
-
"event_seq": 2000,
|
|
1622
|
-
"member_count": 10,
|
|
1623
|
-
"online_count": 5,
|
|
1624
|
-
"e2ee_epoch": 3,
|
|
1625
|
-
"epoch_count": 4,
|
|
1626
|
-
"epoch_ranges": [
|
|
1627
|
-
{
|
|
1628
|
-
"epoch": 0,
|
|
1629
|
-
"start_msg_seq": 0,
|
|
1630
|
-
"start_event_seq": 0,
|
|
1631
|
-
"end_msg_seq": 100,
|
|
1632
|
-
"end_event_seq": 200,
|
|
1633
|
-
"rotated_by": "alice.agentid.pub",
|
|
1634
|
-
"rotated_at": 1234567890
|
|
1635
|
-
}
|
|
1636
|
-
]
|
|
1637
|
-
}
|
|
1638
|
-
```
|
|
1639
1597
|
|
|
1640
1598
|
### group.refresh_member_types
|
|
1641
1599
|
|
|
1642
1600
|
刷新成员类型分类统计。
|
|
1643
1601
|
|
|
1644
|
-
**参数**:`group_id`
|
|
1602
|
+
**参数**:`group_id`(必填;兼容字段,值使用目标态 `group_aid`)
|
|
1645
1603
|
|
|
1646
1604
|
**响应**:
|
|
1647
1605
|
|
|
@@ -1659,37 +1617,6 @@ result = await client.call("group.thought.get", {
|
|
|
1659
1617
|
|
|
1660
1618
|
---
|
|
1661
1619
|
|
|
1662
|
-
## E2EE
|
|
1663
|
-
|
|
1664
|
-
### group.e2ee.rotate_epoch
|
|
1665
|
-
|
|
1666
|
-
CAS 轮换群组 E2EE Epoch。需要 **admin 及以上**权限。
|
|
1667
|
-
|
|
1668
|
-
**参数**:
|
|
1669
|
-
|
|
1670
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
1671
|
-
|------|------|------|------|
|
|
1672
|
-
| `group_id` | string | 是 | 群组 ID |
|
|
1673
|
-
| `current_epoch` | integer | 是 | 当前 epoch 值(CAS 校验) |
|
|
1674
|
-
| `rotation_signature` | string | 是 | 轮换签名(Base64,ECDSA SHA-256) |
|
|
1675
|
-
| `rotation_timestamp` | string | 是 | 轮换时间戳(秒) |
|
|
1676
|
-
|
|
1677
|
-
**响应**:`{ "group_id": "g-abc123.agentid.pub", "success": true, "epoch": 4 }`
|
|
1678
|
-
|
|
1679
|
-
> 签名格式:`{group_id}|{current_epoch}|{new_epoch}|{aid}|{rotation_timestamp}`。时间戳必须在 5 分钟窗口内。签名去重防止重放攻击(10 分钟窗口)。
|
|
1680
|
-
|
|
1681
|
-
### group.e2ee.get_epoch
|
|
1682
|
-
|
|
1683
|
-
获取当前 E2EE Epoch 值。
|
|
1684
|
-
|
|
1685
|
-
**参数**:`group_id` (必填)
|
|
1686
|
-
|
|
1687
|
-
**响应**:`{ "group_id": "g-abc123.agentid.pub", "epoch": 3 }`
|
|
1688
|
-
|
|
1689
|
-
---
|
|
1690
|
-
|
|
1691
|
-
---
|
|
1692
|
-
|
|
1693
1620
|
## 事件
|
|
1694
1621
|
|
|
1695
1622
|
### event/group.created
|
|
@@ -1728,17 +1655,16 @@ CAS 轮换群组 E2EE Epoch。需要 **admin 及以上**权限。
|
|
|
1728
1655
|
}
|
|
1729
1656
|
```
|
|
1730
1657
|
|
|
1731
|
-
SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.
|
|
1658
|
+
SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.5.x 当前仍保留顶层 `module_id` / `action` / `group_id` / `event_seq` 等兼容别名;新代码应优先通过 `ev["envelope"]["action"]` 等路径访问。
|
|
1732
1659
|
|
|
1733
1660
|
| 字段 | 类型 | 说明 |
|
|
1734
1661
|
|------|------|------|
|
|
1735
1662
|
| `envelope` | object | 群事件信封,包含 `module_id`、`action`、`group_id`、`event_seq`、`event_type`、`actor_aid`、`created_at`、`device_id`、`slot_id` 等存在的字段 |
|
|
1736
1663
|
| `module_id` | string | 固定 `"group"` |
|
|
1737
1664
|
| `action` | string | 变更类型(见下表) |
|
|
1738
|
-
| `group_id` | string |
|
|
1665
|
+
| `group_id` | string | 兼容字段,值语义为目标态 `group_aid` |
|
|
1739
1666
|
| `event_seq` | integer | 可选,服务端分配的单调递增序号,用于 SDK 内部保序去重 |
|
|
1740
|
-
| `
|
|
1741
|
-
| `resource_path` | string | 可选,仅资源相关 action |
|
|
1667
|
+
| `path` | string | 可选,Group FS 相关 action 的节点路径 |
|
|
1742
1668
|
|
|
1743
1669
|
**保序去重(SDK 内部行为)**:
|
|
1744
1670
|
|
|
@@ -1774,12 +1700,9 @@ SDK 交付给应用层的群事件信封字段统一放在 `envelope`。0.4.x
|
|
|
1774
1700
|
| `invite_code_revoked` | 邀请码撤销 |
|
|
1775
1701
|
| `member_banned` | 成员封禁 |
|
|
1776
1702
|
| `member_unbanned` | 成员解封 |
|
|
1777
|
-
| `
|
|
1778
|
-
| `
|
|
1779
|
-
| `
|
|
1780
|
-
| `suspended` | 群组暂停 |
|
|
1781
|
-
| `resumed` | 群组恢复 |
|
|
1782
|
-
| `dissolved` | 群组解散 |
|
|
1703
|
+
| `suspended` | 群组暂停 |
|
|
1704
|
+
| `resumed` | 群组恢复 |
|
|
1705
|
+
| `dissolved` | 群组解散 |
|
|
1783
1706
|
|
|
1784
1707
|
**订阅**:
|
|
1785
1708
|
|
|
@@ -1803,11 +1726,21 @@ client.on("group.changed", lambda ev: print(ev["action"]))
|
|
|
1803
1726
|
"type": "e2ee.group_encrypted",
|
|
1804
1727
|
"dispatch_mode": "broadcast",
|
|
1805
1728
|
"payload": { "type": "e2ee.group_encrypted", "..." : "..." },
|
|
1806
|
-
"dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
|
|
1807
|
-
"kind": "group.broadcast",
|
|
1808
|
-
"member_aids": ["bob.agentid.pub"]
|
|
1809
|
-
|
|
1810
|
-
|
|
1729
|
+
"dispatch": {"mode": "broadcast", "reason": "duty_disabled"},
|
|
1730
|
+
"kind": "group.broadcast",
|
|
1731
|
+
"member_aids": ["bob.agentid.pub"],
|
|
1732
|
+
"proximity": {
|
|
1733
|
+
"same_device": false,
|
|
1734
|
+
"same_egress_ip": true,
|
|
1735
|
+
"same_network": true,
|
|
1736
|
+
"basis": "egress_ip",
|
|
1737
|
+
"asserted_by": "gateway"
|
|
1738
|
+
},
|
|
1739
|
+
"same_device": false,
|
|
1740
|
+
"same_egress_ip": true,
|
|
1741
|
+
"same_network": true
|
|
1742
|
+
}
|
|
1743
|
+
```
|
|
1811
1744
|
|
|
1812
1745
|
SDK 收到后自动解密 `payload`,解密后的明文消息直接交付用户回调。
|
|
1813
1746
|
|
|
@@ -1848,7 +1781,7 @@ SDK 收到后自动调用 `group.pull` 拉取最新消息并逐条解密后交
|
|
|
1848
1781
|
}
|
|
1849
1782
|
```
|
|
1850
1783
|
|
|
1851
|
-
SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信封字段统一放在 `envelope`。`envelope` 只保留可转发的归一化元数据,`from` 由 `sender_aid` 归一化而来,`timestamp` 由 `created_at` / `t_server` 归一化而来。0.
|
|
1784
|
+
SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信封字段统一放在 `envelope`。`envelope` 只保留可转发的归一化元数据,`from` 由 `sender_aid` 归一化而来,`timestamp` 由 `created_at` / `t_server` 归一化而来。0.5.x 当前仍保留顶层 `group_id` / `seq` / `message_id` / `sender_aid` / `dispatch_mode` 等兼容别名;新代码应优先通过 `msg["envelope"]["from"]`、`msg["envelope"]["timestamp"]` 等路径访问。Gateway 可能附加 `proximity` 及 `same_device` / `same_egress_ip` / `same_network`,表示由 Gateway 基于连接上下文判断的近端关系提示,不参与 E2EE AAD 或业务鉴权。
|
|
1852
1785
|
|
|
1853
1786
|
### event/group.message_recalled
|
|
1854
1787
|
|
|
@@ -1880,13 +1813,13 @@ SDK 交付给应用层的 `payload` 是明文业务 JSON 对象;群消息信
|
|
|
1880
1813
|
}
|
|
1881
1814
|
```
|
|
1882
1815
|
|
|
1883
|
-
SDK 交付给应用层的撤回事件同样带 `envelope`。`envelope` 表示当前交付的撤回 tombstone / 通知自身信封,不是被撤回原消息的信封;业务侧被撤回的原消息列表继续使用 `message_ids` / `target_message_seqs`。`message_id` / `seq` 继续只保留在顶层兼容字段中,不进入 `envelope`。0.
|
|
1816
|
+
SDK 交付给应用层的撤回事件同样带 `envelope`。`envelope` 表示当前交付的撤回 tombstone / 通知自身信封,不是被撤回原消息的信封;业务侧被撤回的原消息列表继续使用 `message_ids` / `target_message_seqs`。`message_id` / `seq` 继续只保留在顶层兼容字段中,不进入 `envelope`。0.5.x 当前仍保留顶层 `group_id` / `seq` / `message_id` / `sender_aid` 等兼容别名;新代码应优先读取 `envelope`、`message_ids` 和 `target_message_seqs`。
|
|
1884
1817
|
|
|
1885
1818
|
| 字段 | 类型 | 说明 |
|
|
1886
1819
|
|------|------|------|
|
|
1887
1820
|
| `envelope` | object | 撤回 tombstone / 通知自身信封,包含 `group_id`、`from`、`type`、`kind`、`timestamp`、`encrypted`、`context`、`protected_headers` 等存在的字段 |
|
|
1888
1821
|
| `module_id` | string | 固定 `"group"` |
|
|
1889
|
-
| `group_id` | string |
|
|
1822
|
+
| `group_id` | string | 兼容字段,值语义为目标态 `group_aid` |
|
|
1890
1823
|
| `seq` | integer | 当前交付的撤回 tombstone / 通知 seq;在线 push 为 notice_seq,原 seq 占位 tombstone 为原消息 seq |
|
|
1891
1824
|
| `message_id` | string | 当前交付的撤回 tombstone / 通知自己的 message_id |
|
|
1892
1825
|
| `tombstone_message_id` | string | 兼容别名,等同于撤回 tombstone / 通知自身的 `message_id` |
|
|
@@ -1920,9 +1853,10 @@ Group 服务定义了以下专用错误码(-33xxx 段):
|
|
|
1920
1853
|
| -33005 | Not a member | 需先加入群组 |
|
|
1921
1854
|
| -33006 | Invite code invalid or expired | 获取新邀请码 |
|
|
1922
1855
|
| -33007 | Join request pending | 等待审批,勿重复提交 |
|
|
1923
|
-
| -33008 |
|
|
1856
|
+
| -33008 | Group FS path not found | 检查 path |
|
|
1924
1857
|
| -33009 | Resource request not found | 检查 request_id |
|
|
1925
1858
|
|
|
1926
1859
|
> SDK 客户端将 -33001 映射为 `GroupNotFoundError`,-33002~-33003 映射为 `GroupStateError`,其余映射为 `GroupError`。未识别的错误码 fallback 到 `AUNError`。
|
|
1927
1860
|
|
|
1928
1861
|
|
|
1862
|
+
|