@agentunion/fastaun-browser 0.5.4 → 0.5.6
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 +130 -94
- package/_packed_docs/AUN/347/246/273/347/272/277/346/216/250/351/200/201/346/216/245/345/205/245/344/270/216/346/274/224/347/244/272/346/214/207/345/215/227.md +290 -0
- package/_packed_docs/AUN/347/246/273/347/272/277/346/216/250/351/200/201/346/234/215/345/212/241/346/236/266/346/236/204/344/270/216/350/257/246/347/273/206/345/256/236/347/216/260/350/256/241/345/210/222-codex.md +994 -0
- package/_packed_docs/AUN/347/246/273/347/272/277/346/216/250/351/200/201/346/234/215/345/212/241/350/277/220/347/273/264/344/270/216/345/217/221/345/270/203/346/214/207/345/215/227.md +144 -0
- package/_packed_docs/CHANGELOG.md +130 -94
- package/_packed_docs/INDEX.md +127 -69
- package/_packed_docs/KITE_DOCS_GUIDE.md +63 -29
- package/_packed_docs/audit/AUN/346/234/215/345/212/241Go/345/214/226/351/207/215/346/236/204/347/262/276/347/273/206/345/214/226/346/272/220/347/240/201/345/256/241/346/237/245-20260718.md +366 -0
- package/_packed_docs/aun/345/205/254/347/275/221/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +227 -0
- package/_packed_docs/aun/345/210/206/345/270/203/345/274/217/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +1004 -0
- package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +999 -0
- package/_packed_docs/cli/CLI/346/211/213/345/206/214.md +6 -4
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +58 -20
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +219 -247
- package/_packed_docs/protocol/12-Stream-/345/255/220/345/215/217/350/256/256.md +14 -14
- package/_packed_docs/protocol/13-Agent/350/241/214/344/270/272/350/247/204/350/214/203.md +3 -3
- 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 +165 -421
- package/_packed_docs/protocol/README.md +1 -0
- package/_packed_docs/protocol/aun-docs-guide.md +7 -4
- package/_packed_docs/protocol/index.md +25 -19
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +62 -17
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +22 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +67 -78
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +6 -2
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +50 -14
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +18 -5
- package/_packed_docs/sdk/09-group-rpc-manual.md +312 -282
- package/_packed_docs/sdk/09-message-rpc-manual.md +142 -103
- package/_packed_docs/sdk/09-payload-reference.md +1 -1
- package/_packed_docs/sdk/09-stream-rpc-manual.md +8 -8
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +26 -17
- package/_packed_docs/sdk/INDEX.md +42 -34
- package/_packed_docs/sdk/README.md +7 -6
- package/_packed_docs//346/266/210/346/201/257/345/220/214/346/255/245/344/270/216/345/216/206/345/217/262/346/213/211/345/217/226/344/273/243/347/240/201/345/256/241/346/237/245/351/227/256/351/242/230/346/270/205/345/215/225.md +229 -0
- package/_packed_docs//346/266/210/346/201/257/345/220/214/346/255/245/344/270/216/345/216/206/345/217/262/346/213/211/345/217/226/346/224/271/351/200/240/346/226/271/346/241/210.md +750 -0
- package/dist/agent-md.d.ts +4 -5
- package/dist/agent-md.d.ts.map +1 -1
- package/dist/agent-md.js +66 -43
- package/dist/agent-md.js.map +1 -1
- package/dist/aid-store.d.ts +2 -6
- package/dist/aid-store.d.ts.map +1 -1
- package/dist/aid-store.js +20 -14
- package/dist/aid-store.js.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +30 -11
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +3297 -1023
- package/dist/client/delivery.d.ts +75 -8
- package/dist/client/delivery.d.ts.map +1 -1
- package/dist/client/delivery.js +1419 -245
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/group-state.d.ts.map +1 -1
- package/dist/client/group-state.js +27 -24
- package/dist/client/group-state.js.map +1 -1
- package/dist/client/lifecycle.d.ts.map +1 -1
- package/dist/client/lifecycle.js +48 -4
- package/dist/client/lifecycle.js.map +1 -1
- package/dist/client/mention-mode.d.ts +7 -0
- package/dist/client/mention-mode.d.ts.map +1 -0
- package/dist/client/mention-mode.js +184 -0
- package/dist/client/mention-mode.js.map +1 -0
- package/dist/client/peers.d.ts +1 -1
- package/dist/client/peers.d.ts.map +1 -1
- package/dist/client/peers.js +26 -3
- package/dist/client/peers.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts +22 -1
- package/dist/client/rpc-pipeline.d.ts.map +1 -1
- package/dist/client/rpc-pipeline.js +309 -74
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +25 -2
- package/dist/client/v2-e2ee.d.ts.map +1 -1
- package/dist/client/v2-e2ee.js +606 -97
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +24 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +404 -215
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -1
- package/dist/errors.js.map +1 -1
- package/dist/facades.d.ts +3 -0
- package/dist/facades.d.ts.map +1 -1
- package/dist/facades.js +91 -53
- package/dist/facades.js.map +1 -1
- package/dist/group-index.d.ts +6 -1
- package/dist/group-index.d.ts.map +1 -1
- package/dist/group-index.js +44 -25
- package/dist/group-index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- 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 +10 -5
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb-identity-store.d.ts +0 -12
- package/dist/keystore/indexeddb-identity-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-identity-store.js +0 -60
- package/dist/keystore/indexeddb-identity-store.js.map +1 -1
- package/dist/keystore/indexeddb-shared.d.ts.map +1 -1
- package/dist/keystore/indexeddb-shared.js +9 -5
- package/dist/keystore/indexeddb-shared.js.map +1 -1
- package/dist/keystore/indexeddb-token-store.d.ts +3 -1
- package/dist/keystore/indexeddb-token-store.d.ts.map +1 -1
- package/dist/keystore/indexeddb-token-store.js +47 -2
- package/dist/keystore/indexeddb-token-store.js.map +1 -1
- package/dist/register-flow.d.ts.map +1 -1
- package/dist/register-flow.js +28 -3
- package/dist/register-flow.js.map +1 -1
- package/dist/seq-tracker.d.ts +28 -8
- package/dist/seq-tracker.d.ts.map +1 -1
- package/dist/seq-tracker.js +218 -61
- package/dist/seq-tracker.js.map +1 -1
- package/dist/storage/vfs.d.ts +1 -0
- package/dist/storage/vfs.d.ts.map +1 -1
- package/dist/storage/vfs.js +26 -2
- package/dist/storage/vfs.js.map +1 -1
- package/dist/tools/cross-sdk-agent.js +376 -10
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +12 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +218 -101
- package/dist/transport.js.map +1 -1
- package/dist/v2/session/session.d.ts.map +1 -1
- package/dist/v2/session/session.js +3 -4
- package/dist/v2/session/session.js.map +1 -1
- package/dist/v2/state/commitment.d.ts.map +1 -1
- package/dist/v2/state/commitment.js +1 -2
- package/dist/v2/state/commitment.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -5
- package/dist/group-resources.d.ts +0 -98
- package/dist/group-resources.d.ts.map +0 -1
- package/dist/group-resources.js +0 -635
- package/dist/group-resources.js.map +0 -1
- package/dist/keystore/indexeddb.d.ts +0 -179
- package/dist/keystore/indexeddb.d.ts.map +0 -1
- package/dist/keystore/indexeddb.js +0 -2031
- package/dist/keystore/indexeddb.js.map +0 -1
- package/dist/namespaces/auth.d.ts +0 -98
- package/dist/namespaces/auth.d.ts.map +0 -1
- package/dist/namespaces/auth.js +0 -992
- package/dist/namespaces/auth.js.map +0 -1
- package/dist/namespaces/custody.d.ts +0 -51
- package/dist/namespaces/custody.d.ts.map +0 -1
- package/dist/namespaces/custody.js +0 -302
- package/dist/namespaces/custody.js.map +0 -1
- package/dist/namespaces/meta.d.ts +0 -109
- package/dist/namespaces/meta.d.ts.map +0 -1
- package/dist/namespaces/meta.js +0 -549
- package/dist/namespaces/meta.js.map +0 -1
|
@@ -28,93 +28,76 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
28
28
|
|
|
29
29
|
| 字段 | 类型 | 说明 |
|
|
30
30
|
|------|------|------|
|
|
31
|
-
| `
|
|
32
|
-
| `group_id` | string | 兼容字段;新群通常等于 `group_aid`,旧群可能保留历史值 |
|
|
31
|
+
| `group_id` | string | 群组唯一 ID(自动生成或自定义) |
|
|
33
32
|
| `name` | string | 群组名称 |
|
|
34
33
|
| `owner_aid` | string | 群主 AID |
|
|
35
34
|
| `creator_aid` | string | 创建者 AID |
|
|
36
35
|
| `visibility` | string | `"public"` / `"private"` |
|
|
37
|
-
| `status` | string | `"active"` / `"suspended"` / `"
|
|
38
|
-
| `description` | string | 群组描述 |
|
|
39
|
-
| `metadata` | object | 自定义元数据 |
|
|
40
|
-
| `
|
|
41
|
-
| `member_count` | integer | 成员数量 |
|
|
36
|
+
| `status` | string | `"active"` / `"suspended"` / `"closed"` |
|
|
37
|
+
| `description` | string | 群组描述 |
|
|
38
|
+
| `metadata` | object | 自定义元数据 |
|
|
39
|
+
| `mention_mode` | string | 群提及过滤模式:`"disabled"`(默认)/ `"mention-only"`,详见 [10.2.3 群提及过滤模式](#1023-群提及过滤模式mention_mode) |
|
|
40
|
+
| `member_count` | integer | 成员数量 |
|
|
42
41
|
| `message_seq` | integer | 最新消息序号 |
|
|
43
42
|
| `event_seq` | integer | 最新事件序号 |
|
|
44
|
-
| `created_at` | integer | 创建时间(Unix
|
|
45
|
-
|
|
46
|
-
### Group AID / Group ID 兼容规范
|
|
43
|
+
| `created_at` | integer | 创建时间(Unix 秒) |
|
|
47
44
|
|
|
48
|
-
|
|
45
|
+
### Group ID 格式与规范化
|
|
49
46
|
|
|
50
|
-
|
|
51
|
-
- **Legacy 格式**: `g-[a-z0-9]{4,32}` — 以 `g-` 开头,后接 4 到 32 位小写字母或数字
|
|
52
|
-
- **新格式**: `[a-z0-9]{5,}` — 5 位或更多小写字母或数字,无上限
|
|
53
|
-
- **Group name 格式**: `[a-z0-9][a-z0-9_-]{3,63}` — 4 到 64 个字符,可包含下划线和短横线
|
|
47
|
+
`group_id` 是群组的全网唯一标识,前缀 `g-` 为 Group 保留前缀。普通 AID 的本地名称不得以 `g-` 开头,避免与群 ID 混淆。短形式必须以 `g-` 开头,总长度 6 到 16 字符;`g-` 后面的 slug 为 4 到 14 位,只能使用小写字母和数字。
|
|
54
48
|
|
|
55
|
-
|
|
49
|
+
服务端必须接受以下三种输入形式,并在内部统一为 canonical group_id:
|
|
56
50
|
|
|
57
|
-
| 输入形式 | 用途 |
|
|
51
|
+
| 输入形式 | 用途 | canonical 结果 |
|
|
58
52
|
|----------|------|----------------|
|
|
59
|
-
| `{
|
|
60
|
-
| `{
|
|
61
|
-
| `{
|
|
62
|
-
| `group.issuer-domain/{base}` | 旧 URL 风格兼容形式 | 规范化为 `{base}.issuer-domain` |
|
|
53
|
+
| `g-{slug}` | 本地域内简写别名 | 若本域 issuer 为 `issuer-domain`,规范化为 `g-{slug}.issuer-domain` |
|
|
54
|
+
| `g-{slug}@issuer-domain` | 跨域传播兼容形式 | 规范化为 `g-{slug}.issuer-domain` |
|
|
55
|
+
| `g-{slug}.issuer-domain` | canonical 形式 | 保持为 `g-{slug}.issuer-domain` |
|
|
63
56
|
|
|
64
57
|
规范化规则:
|
|
65
58
|
|
|
66
|
-
- `
|
|
67
|
-
- 输入必须先 trim
|
|
68
|
-
- 本域内客户端可以提交 `{
|
|
69
|
-
-
|
|
70
|
-
- `group.create` 可以指定 `
|
|
71
|
-
-
|
|
72
|
-
- 在 `
|
|
73
|
-
|
|
74
|
-
### 10.2.3
|
|
75
|
-
|
|
76
|
-
`
|
|
77
|
-
|
|
78
|
-
| 取值 | 中文名 | 语义 |
|
|
79
|
-
|------|--------|------|
|
|
80
|
-
| `
|
|
81
|
-
| `mention` |
|
|
82
|
-
|
|
83
|
-
**关键性质**:
|
|
84
|
-
|
|
85
|
-
1.
|
|
86
|
-
2. **channel 层执行**:过滤发生在 LLM 之前,对 Agent
|
|
87
|
-
3.
|
|
88
|
-
4.
|
|
89
|
-
5. **变更不追溯**:群管理员变更 `
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
**适用场景**:
|
|
94
|
-
|
|
95
|
-
- `broadcast`:小型协作群、Agent 团队、需要 Agent 像人一样感知群上下文的场景
|
|
96
|
-
- `mention`:大型公告频道、工具 Agent 集合区、降低 LLM 推理成本的场景
|
|
97
|
-
|
|
98
|
-
**约束**:
|
|
99
|
-
|
|
100
|
-
- 仅适用于群组(`group.*`);点对点消息(`message.*`)不适用
|
|
101
|
-
- 群管理员(`owner` / `admin`)有权变更,普通成员只读
|
|
59
|
+
- `group_id` 比较、数据库存储、成员归属、权限校验、E2EE AAD / 签名输入均必须使用 canonical group_id。
|
|
60
|
+
- 输入必须先 trim 并转换为小写;`@issuer-domain` 形式仅作为兼容输入,进入内部前必须转换为 `.issuer-domain`。
|
|
61
|
+
- 本域内客户端可以提交 `g-{slug}` 简写;服务端按本域 `AUN_ISSUER_DOMAIN` 解析为 canonical group_id。没有本域 issuer 配置时,简写保持为 `g-{slug}`。
|
|
62
|
+
- 跨域消息、邀请传播、日志和协议响应应使用 canonical group_id,避免远端误把短 ID 当成本域群。
|
|
63
|
+
- `group.create` 可以指定 `group_id`;指定时必须满足上述格式且未被占用,被占用时返回错误。未指定时由服务端自动分配。
|
|
64
|
+
- 自动生成的群 ID 使用 `g-` 加随机小写十六进制短 slug,服务端必须通过唯一约束或等效机制保证 canonical group_id 唯一;发现碰撞时重新生成。
|
|
65
|
+
- 在 `group.{issuer-domain}` 这类已携带 issuer 的公开 HTTP 主机下,生成的群链接 path 应使用本域简写,例如 `https://group.issuer-domain/g-abc123` 或 `https://group.issuer-domain/g-abc123/invite/ic-xxx`。
|
|
66
|
+
|
|
67
|
+
### 10.2.3 群提及过滤模式(mention_mode)
|
|
68
|
+
|
|
69
|
+
`mention_mode` 是**群级配置**,决定接收方 channel 层向 Agent 大模型分发群消息的过滤策略。它不影响 AUN 协议层对消息的投递(消息仍然送达所有在线成员),仅影响“哪些消息会进入接收方 Agent 的 LLM 上下文”。
|
|
70
|
+
|
|
71
|
+
| 取值 | 中文名 | 语义 |
|
|
72
|
+
|------|--------|------|
|
|
73
|
+
| `disabled`(默认) | 关闭提及过滤 | 群内所有消息都送进每个成员 Agent 的 LLM 上下文 |
|
|
74
|
+
| `mention-only` | 仅提及时处理 | 仅当消息 `payload.mentions` 包含某成员 AID(或 `scope: "all"`),该成员 Agent 的 LLM 才会收到此消息 |
|
|
75
|
+
|
|
76
|
+
**关键性质**:
|
|
77
|
+
|
|
78
|
+
1. **群级配置**:通过 `group.set_settings` 设置,所有成员遵循同一规则;不在每条消息的发送参数里单独指定
|
|
79
|
+
2. **channel 层执行**:过滤发生在 LLM 之前,对 Agent 大模型透明
|
|
80
|
+
3. **不丢弃**:被过滤掉的消息仍应在接收方 channel 本地存档,仅是不进入 LLM 上下文
|
|
81
|
+
4. **不违反自主原则**:自主原则约束“看见消息后如何应对”,`mention_mode` 约束“什么消息该被看见”,两者正交
|
|
82
|
+
5. **变更不追溯**:群管理员变更 `mention_mode` 后仅对之后的新消息生效;服务端随消息保存发送时的模式快照
|
|
83
|
+
|
|
84
|
+
`mention-only` 必须基于结构化的 `payload.mentions` 判断,不得仅扫描文本中的 `@xxx`;`{ "scope": "all" }` 视为命中所有成员。该设置仅适用于群组,群 owner/admin 可写,普通成员只读。
|
|
102
85
|
|
|
103
86
|
### Member 对象
|
|
104
87
|
|
|
105
88
|
| 字段 | 类型 | 说明 |
|
|
106
89
|
|------|------|------|
|
|
107
90
|
| `aid` | string | 成员 AID |
|
|
108
|
-
| `group_id` | string |
|
|
91
|
+
| `group_id` | string | 群组 ID |
|
|
109
92
|
| `role` | string | `"owner"` / `"admin"` / `"member"` |
|
|
110
|
-
| `joined_at` | integer | 加入时间(Unix
|
|
93
|
+
| `joined_at` | integer | 加入时间(Unix 秒) |
|
|
111
94
|
| `last_ack_seq` | integer | 最后已读消息序号 |
|
|
112
95
|
|
|
113
96
|
### Message 对象
|
|
114
97
|
|
|
115
98
|
| 字段 | 类型 | 说明 |
|
|
116
99
|
|------|------|------|
|
|
117
|
-
| `group_id` | string |
|
|
100
|
+
| `group_id` | string | 群组 ID |
|
|
118
101
|
| `seq` | integer | 消息序号(群内单调递增) |
|
|
119
102
|
| `message_id` | string | 消息 UUID |
|
|
120
103
|
| `sender_aid` | string | 发送者 AID |
|
|
@@ -139,7 +122,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
139
122
|
| 审批申请 | ✅ | ✅ | ❌ |
|
|
140
123
|
| 暂停/关闭群 | ✅ | ✅ | ❌ |
|
|
141
124
|
| 转让群主 | ✅ | ❌ | ❌ |
|
|
142
|
-
|
|
|
125
|
+
| Group FS 写入 | ✅ | 配置决定 | ❌ |
|
|
143
126
|
|
|
144
127
|
---
|
|
145
128
|
|
|
@@ -154,8 +137,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
154
137
|
| 参数 | 类型 | 必填 | 说明 |
|
|
155
138
|
|------|------|:----:|------|
|
|
156
139
|
| `name` | string | ✅ | 群组名称 |
|
|
157
|
-
| `
|
|
158
|
-
| `group_id` | string | ❌ | 兼容别名,值语义同 `group_aid`;支持 legacy base `g-[a-z0-9]{4,32}`、新 base `[a-z0-9]{5,64}` 或 group name `[a-z0-9][a-z0-9_-]{3,63}` |
|
|
140
|
+
| `group_id` | string | ❌ | 自定义群 ID,短形式必须以 `g-` 开头且总长度 6 到 16 字符;不提供则服务端自动生成;已被占用时返回错误 |
|
|
159
141
|
| `visibility` | string | ❌ | `"public"` / `"private"`,默认由服务配置决定 |
|
|
160
142
|
| `description` | string | ❌ | 群组描述 |
|
|
161
143
|
| `metadata` | object | ❌ | 自定义元数据 |
|
|
@@ -170,7 +152,6 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
170
152
|
{
|
|
171
153
|
"group": {
|
|
172
154
|
"group_id": "g-abc123.agentid.pub",
|
|
173
|
-
"group_aid": "g-abc123.agentid.pub",
|
|
174
155
|
"name": "测试群",
|
|
175
156
|
"owner_aid": "alice.agentid.pub",
|
|
176
157
|
"creator_aid": "alice.agentid.pub",
|
|
@@ -179,7 +160,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
179
160
|
"member_count": 1,
|
|
180
161
|
"message_seq": 0,
|
|
181
162
|
"event_seq": 0,
|
|
182
|
-
"created_at":
|
|
163
|
+
"created_at": 1234567890
|
|
183
164
|
},
|
|
184
165
|
"aid": "alice.agentid.pub"
|
|
185
166
|
}
|
|
@@ -187,16 +168,18 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
187
168
|
|
|
188
169
|
### `group.get_info`
|
|
189
170
|
|
|
190
|
-
|
|
171
|
+
查询群组信息,返回平铺格式。默认返回公开字段;需要成员权限的字段必须通过 `required` 显式声明。
|
|
191
172
|
|
|
192
173
|
**参数**:
|
|
193
174
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
| `group_id` | string | ✅ | 群组标识兼容字段,值语义为 `group_aid` |
|
|
197
|
-
| `required` | string[] | ❌ | 可选值:`member` / `state` / `e2ee` / `avatar` |
|
|
175
|
+
- `group_id` (string, 必填)
|
|
176
|
+
- `required` (string[], 可选):受限字段声明,可取 `member`、`state`、`e2ee`、`avatar`
|
|
198
177
|
|
|
199
|
-
|
|
178
|
+
**默认响应**:
|
|
179
|
+
|
|
180
|
+
`{ "found": true, "group_id": "g-abc123.agentid.pub", "group_aid": "g-abc123.agentid.pub", "name": "项目讨论", "visibility": "public", "status": "active", "description": "", "member_count": 3, "created_at": 1234567890 }`
|
|
181
|
+
|
|
182
|
+
`required=["member"]` 会额外返回 `owner_aid`、`creator_aid`、`message_seq`、`event_seq`、`e2ee_epoch`、`updated_at`、`my_role` 等成员可见字段。
|
|
200
183
|
|
|
201
184
|
> `group.get` 和 `group.info` 已合并到 `group.get_info`;`group.get_info` 默认行为等价于原公开信息查询。
|
|
202
185
|
|
|
@@ -261,7 +244,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
261
244
|
|
|
262
245
|
| 参数 | 类型 | 必填 | 说明 |
|
|
263
246
|
|------|------|:----:|------|
|
|
264
|
-
| `group_id` | string | ✅ |
|
|
247
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
265
248
|
| `aid` | string | ✅ | 要添加的 AID |
|
|
266
249
|
| `role` | string | ❌ | `"member"` / `"admin"`,默认 `"member"` |
|
|
267
250
|
| `member_type` | string | ❌ | `"human"` / `"ai"`,默认 `"human"` |
|
|
@@ -308,7 +291,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
308
291
|
|
|
309
292
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
310
293
|
|------|------|:----:|--------|------|
|
|
311
|
-
| `group_id` | string | ✅ | — |
|
|
294
|
+
| `group_id` | string | ✅ | — | 群组 ID |
|
|
312
295
|
| `page` | integer | ❌ | 1 | 页码 |
|
|
313
296
|
| `size` | integer | ❌ | 50 | 每页条数 |
|
|
314
297
|
| `role` | string | ❌ | — | 按角色过滤 |
|
|
@@ -351,14 +334,14 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
351
334
|
|
|
352
335
|
| 参数 | 类型 | 必填 | 说明 |
|
|
353
336
|
|------|------|:----:|------|
|
|
354
|
-
| `group_id` | string | ✅ |
|
|
337
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
355
338
|
| `type` | string | ❌ | 信封/封装类型,普通业务消息无需填写;SDK 加密群消息时自动使用 `e2ee.group_encrypted` |
|
|
356
339
|
| `payload` | object | ✅ | 消息内容 |
|
|
357
340
|
| `attachments` | array | ❌ | 存储引用列表 |
|
|
358
341
|
|
|
359
342
|
##### Payload 参考约定
|
|
360
343
|
|
|
361
|
-
`group.send.params.payload` 的统一业务负载格式见 [消息Payload参考约定](../sdk/消息Payload参考约定.md)。完整群消息请求仍在 `payload` 同级传入 `group_id
|
|
344
|
+
`group.send.params.payload` 的统一业务负载格式见 [消息Payload参考约定](../sdk/消息Payload参考约定.md)。完整群消息请求仍在 `payload` 同级传入 `group_id`;业务类型放在 `payload.type`,不要与 `group.send.params.type` 信封/封装类型混用。
|
|
362
345
|
|
|
363
346
|
协议层只要求 `payload` 是 JSON 对象,并按服务端配置做大小、信封/封装类型和 E2EE epoch 相关检查;字段语义由应用层约定,接收端应对未知 `payload.type`、未知 `kind` 和缺失展示字段做降级处理。
|
|
364
347
|
|
|
@@ -399,26 +382,49 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
399
382
|
|
|
400
383
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
401
384
|
|------|------|:----:|--------|------|
|
|
402
|
-
| `group_id` | string | ✅ | — |
|
|
403
|
-
| `after_message_seq` | integer | ❌ | 0 | 拉取该 seq 之后的消息 |
|
|
404
|
-
| `limit` | integer | ❌ | 50 | 最大条数(最大 50
|
|
405
|
-
| `device_id` | string | ❌ | — | 设备 ID(多设备模式) |
|
|
385
|
+
| `group_id` | string | ✅ | — | 群组 ID |
|
|
386
|
+
| `after_message_seq` | integer | ❌ | 0 | 拉取该 seq 之后的消息 |
|
|
387
|
+
| `limit` | integer | ❌ | 50 | 最大条数(最大 50) |
|
|
388
|
+
| `device_id` | string | ❌ | — | 设备 ID(多设备模式) |
|
|
389
|
+
| `window_mode` | string | ❌ | — | 可选 Pull 模式;`tail` 表示读取以安全 Head 结尾的最新一页 |
|
|
406
390
|
|
|
407
391
|
**响应**:
|
|
408
392
|
|
|
409
393
|
```json
|
|
410
394
|
{
|
|
411
395
|
"group_id": "g-abc123.agentid.pub",
|
|
412
|
-
"messages": [ ... ],
|
|
413
|
-
"latest_message_seq": 42,
|
|
414
|
-
"has_more": false,
|
|
415
|
-
"limit": 50
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
396
|
+
"messages": [ ... ],
|
|
397
|
+
"latest_message_seq": 42,
|
|
398
|
+
"has_more": false,
|
|
399
|
+
"limit": 50,
|
|
400
|
+
"retention_floor_message_seq": 20,
|
|
401
|
+
"earliest_available_message_seq": 31
|
|
402
|
+
}
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
多设备模式时额外返回 `cursor` 对象(含 `current_seq`、`join_seq`、`latest_seq`、`unread_count`)。
|
|
406
|
+
|
|
407
|
+
普通 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,但不得把后两者写成 retention floor。Tail 不使用该可见性下界推进 A。
|
|
408
|
+
|
|
409
|
+
Tail 模式使用 `after_seq` 作为兼容和诊断水位,响应额外返回 `window_mode="tail"`、`window_start_seq`、`head_seq`、`covered_through_seq`。Tail 不推进 `last_ack_msg_seq`、visibility/retention floor 或 Pull activity,不接受 piggy ACK 或 `force=true`。seq band 内未返回的序号视为服务端永久空号,客户端不得为页内缺号创建 Gap。无 `window_mode` 的旧请求保持原行为,以兼容旧 SDK。
|
|
410
|
+
|
|
411
|
+
### `group.pull_events`
|
|
412
|
+
|
|
413
|
+
增量拉取群事件,使用独立的 Group Event Forward Cursor,不增加 T/H。响应中的 `retention_floor_event_seq` 只表示已提交物理 GC;`earliest_available_event_seq` 是综合 retention、入群点和 epoch 后的第一条成员可见事件。SDK 以 `max(retention_floor_event_seq, cursor.current_seq, cursor.join_seq, earliest_available_event_seq-1)` 恢复或推进事件 A,ACK 仍只能提交已持久化的 A。
|
|
414
|
+
|
|
415
|
+
### `group.history`
|
|
416
|
+
|
|
417
|
+
按 `before_seq` 排他上界向前只读翻页群消息。Group Event 不进入该接口。
|
|
418
|
+
|
|
419
|
+
**参数**:`group_id`(必填)、`before_seq`(正整数,必填)、`limit`(默认 50,最大 50)。
|
|
420
|
+
|
|
421
|
+
**响应**:包含 `messages`、`window_start_seq`、`next_before_seq`、`has_older`、`retention_floor_seq`、`earliest_available_seq`。页内消息按 seq 升序;下一页必须直接复用 `next_before_seq`。
|
|
422
|
+
|
|
423
|
+
History 不推进消息或事件 ACK,不修改 cursor/floor/Pull activity,也不触发实时群消息事件。
|
|
424
|
+
|
|
425
|
+
**客户端发布语义**:单个通过校验的 Tail/Forward 响应页内必须按 seq 升序处理,并折叠页内重复 seq。A/T/H 只描述扫描进度,不是应用发布账本;跨 Push/Tail/Forward 页不承诺唯一或有序。全局去重与排序属于应用层业务仓库职责,不是 SDK 交付契约;应用层必须在群 namespace 内按 `message_id` 幂等,并按 `seq` 排序。SDK 进程内折叠只能作为 best-effort 优化。History 不进入实时发布流。
|
|
426
|
+
|
|
427
|
+
### `group.ack`
|
|
422
428
|
|
|
423
429
|
提交已读游标(per-AID,非 per-device)。
|
|
424
430
|
|
|
@@ -446,7 +452,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
446
452
|
|
|
447
453
|
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
448
454
|
|------|------|:----:|--------|------|
|
|
449
|
-
| `group_id` | string | ✅ | — |
|
|
455
|
+
| `group_id` | string | ✅ | — | 群组 ID |
|
|
450
456
|
| `status` | string | ❌ | `"pending"` | `"pending"` / `"approved"` / `"rejected"` |
|
|
451
457
|
| `page` | integer | ❌ | 1 | 页码 |
|
|
452
458
|
| `size` | integer | ❌ | 50 | 每页条数 |
|
|
@@ -461,7 +467,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
461
467
|
|
|
462
468
|
| 参数 | 类型 | 必填 | 说明 |
|
|
463
469
|
|------|------|:----:|------|
|
|
464
|
-
| `group_id` | string | ✅ |
|
|
470
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
465
471
|
| `aid` | string | ✅ | 申请人 AID |
|
|
466
472
|
| `approve` | boolean | ❌ | 批准(true)或拒绝(false),默认 true |
|
|
467
473
|
| `reason` | string | ❌ | 拒绝原因 |
|
|
@@ -476,6 +482,22 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
476
482
|
|
|
477
483
|
**响应**:`{ "group_id": "g-abc123.agentid.pub", "results": [ ... ] }`
|
|
478
484
|
|
|
485
|
+
### `group.get_join_requirements`
|
|
486
|
+
|
|
487
|
+
获取入群要求配置。
|
|
488
|
+
|
|
489
|
+
**参数**:`group_id` (string, 必填)
|
|
490
|
+
|
|
491
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "requirements": { "mode": "approval", "question": "...", ... } }`
|
|
492
|
+
|
|
493
|
+
### `group.update_join_requirements`
|
|
494
|
+
|
|
495
|
+
更新入群要求配置。需要 admin 及以上权限。
|
|
496
|
+
|
|
497
|
+
**参数**:`group_id` (必填), `mode` / `question` / `auto_approve_patterns` / `max_pending` (可选)
|
|
498
|
+
|
|
499
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "requirements": { ... } }`
|
|
500
|
+
|
|
479
501
|
### `group.create_invite_code`
|
|
480
502
|
|
|
481
503
|
创建邀请码。需要 owner/admin 权限,或群规则允许成员邀请。
|
|
@@ -484,7 +506,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
484
506
|
|
|
485
507
|
| 参数 | 类型 | 必填 | 说明 |
|
|
486
508
|
|------|------|:----:|------|
|
|
487
|
-
| `group_id` | string | ✅ |
|
|
509
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
488
510
|
| `code` | string | ❌ | 自定义邀请码,不提供则自动生成 |
|
|
489
511
|
| `max_uses` | integer | ❌ | 最大使用次数,默认 1,必须 > 0 |
|
|
490
512
|
| `expires_in_seconds` | integer | ❌ | 有效期(秒),默认由配置决定(7 天) |
|
|
@@ -517,180 +539,127 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
|
|
|
517
539
|
|
|
518
540
|
---
|
|
519
541
|
|
|
520
|
-
## 10.8
|
|
521
|
-
|
|
522
|
-
群文件系统统一使用 `group.fs.*`。群路径采用 `group_aid:/path` 或 `https://{group_aid}/path`,也可在 RPC 参数中同时传 `group_id` 与裸路径。除 `memberdata` 等系统保留路径外,整个 `group_aid` namespace 都是群自有区;成员数据区为 `memberdata/{member_ref}`,服务端映射到成员自己的 `group_data/{group_aid}` 存储根。
|
|
523
|
-
|
|
524
|
-
`memberdata` 是 Group FS 视图层的虚拟系统目录,根节点和成员槽位根不得被普通文件操作删除、覆盖或重命名;成员槽位下的子路径写入只允许对应成员本人通过 `group.fs.*` 完成。完整保护规则见 [16-系统目录保护方案.md](16-系统目录保护方案.md)。
|
|
525
|
-
|
|
526
|
-
群自有区写权限由角色 ACL 决定:当前 `group_aid` 证书签名可写;`role:owner` 默认可写;`role:admin` 只有在 group owner 通过 `group.fs.set_acl` 显式授权后才可写。授权、撤销和查询的是 `role:admin` 角色策略,不与某个 admin 成员绑定;成员升降级、退群、踢出不会联动 ACL。成员数据区写入只允许对应成员本人。角色 ACL 对外使用 POSIX 权限位,删除权限显示为 `x`。
|
|
527
|
-
|
|
528
|
-
| 方法 | 说明 |
|
|
529
|
-
|------|------|
|
|
530
|
-
| `group.fs.ls` | 列出目录 |
|
|
531
|
-
| `group.fs.find` | 查找节点 |
|
|
532
|
-
| `group.fs.stat` | 查看节点 |
|
|
533
|
-
| `group.fs.lstat` | 查看链接本身 |
|
|
534
|
-
| `group.fs.df` | 查看群文件系统用量 |
|
|
535
|
-
| `group.fs.create_download_ticket` | 创建下载票据,SDK 使用票据执行数据面下载 |
|
|
536
|
-
| `group.fs.set_acl` | owner 授予群自有区 `role:admin` 写 ACL |
|
|
537
|
-
| `group.fs.remove_acl` | owner 撤销群自有区 `role:admin` 写 ACL |
|
|
538
|
-
| `group.fs.get_acl` | owner 查询群自有区角色 ACL |
|
|
539
|
-
| `group.fs.list_acl` | owner 查询群自有区角色 ACL(别名) |
|
|
540
|
-
| `group.fs.mkdir` | 创建目录 |
|
|
541
|
-
| `group.fs.rm` | 删除节点 |
|
|
542
|
-
| `group.fs.cp` | group→group 远程复制;本地上传/下载由 SDK 数据面编排 |
|
|
543
|
-
| `group.fs.mv` | group→group 远程移动 |
|
|
544
|
-
| `group.fs.check_upload` | 上传前检查 |
|
|
545
|
-
| `group.fs.create_upload_session` | 创建上传会话 |
|
|
546
|
-
| `group.fs.complete_upload` | 完成上传 |
|
|
547
|
-
| `group.fs.mount` | 挂载成员数据区 |
|
|
548
|
-
| `group.fs.umount` | 卸载成员数据区 |
|
|
549
|
-
|
|
550
|
-
`group.fs.set_acl/remove_acl/get_acl/list_acl` 只允许当前 group owner 调用,`grantee_aid` 当前只允许 `role:admin`;底层由 group 服务以内部门面调用 storage ACL,不允许客户端直接对 `group_aid` 空间设置或查询 `role:*`。逐方法 SDK 参数以 `docs/sdk/09-group-rpc-manual.md` 为准,详细设计见 `docs/aun-fs/group-fs/`。
|
|
551
|
-
|
|
552
|
-
---
|
|
553
|
-
|
|
554
|
-
## 10.12 在线状态
|
|
555
|
-
|
|
556
|
-
群组在线状态是 per-AID 的全局状态(非 per-group)。在线索引由 Gateway 的 `client.online` / `client.offline` 事件驱动,Group 服务消费这些事件维护在线状态;客户端不需要也不能调用单独的上线、下线或心跳 RPC。
|
|
542
|
+
## 10.8 公告与规则
|
|
557
543
|
|
|
558
|
-
### `group.
|
|
544
|
+
### `group.get_announcement`
|
|
559
545
|
|
|
560
|
-
|
|
546
|
+
获取群公告。需要是群成员。
|
|
561
547
|
|
|
562
548
|
**参数**:`group_id` (string, 必填)
|
|
563
549
|
|
|
564
|
-
**响应**:`{ "group_id": "g-abc123.agentid.pub", "
|
|
565
|
-
|
|
566
|
-
字段约定:`members` 是主字段;`items` 和 `online_members` 是兼容别名,内容与 `members` 完全相同。
|
|
550
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "announcement": { ... } }`
|
|
567
551
|
|
|
568
|
-
|
|
552
|
+
### `group.update_announcement`
|
|
569
553
|
|
|
570
|
-
|
|
554
|
+
更新群公告。需要 admin 及以上权限。
|
|
571
555
|
|
|
572
|
-
`
|
|
556
|
+
**参数**:`group_id` (必填), `content` (string, 必填,上限默认 4000 字符), `attachments` (array, 可选)
|
|
573
557
|
|
|
574
|
-
###
|
|
558
|
+
### `group.get_rules`
|
|
575
559
|
|
|
576
|
-
|
|
560
|
+
获取群规则(可见性设置、加入模式等)。
|
|
577
561
|
|
|
578
|
-
|
|
579
|
-
|-----|------|
|
|
580
|
-
| `rules.content` | 群规则正文 |
|
|
581
|
-
| `rules.attachments` | 群规则附件稳定引用 |
|
|
582
|
-
| `announcement.content` | 群公告正文 |
|
|
583
|
-
| `announcement.attachments` | 群公告附件稳定引用 |
|
|
584
|
-
| `join.mode` | 入群模式 |
|
|
585
|
-
| `join.question` | 入群问题 |
|
|
586
|
-
| `join.auto_approve_patterns` | 自动批准规则 |
|
|
587
|
-
| `join.max_pending` | 最大待审批数量 |
|
|
562
|
+
**参数**:`group_id` (string, 必填)
|
|
588
563
|
|
|
589
|
-
|
|
564
|
+
### `group.update_rules`
|
|
590
565
|
|
|
591
|
-
|
|
566
|
+
更新入群要求。需要 admin 及以上权限。
|
|
592
567
|
|
|
593
|
-
|
|
568
|
+
**参数**:
|
|
594
569
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
570
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
571
|
+
|------|------|:----:|------|
|
|
572
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
573
|
+
| `mode` | string | ❌ | `"open"` / `"approval"` / `"invite_only"` / `"closed"` |
|
|
574
|
+
| `question` | string | ❌ | 入群问题 |
|
|
575
|
+
| `auto_approve_patterns` | array | ❌ | 自动批准正则列表 |
|
|
576
|
+
| `max_pending` | integer | ❌ | 最大待审批数 |
|
|
599
577
|
|
|
600
|
-
|
|
578
|
+
---
|
|
601
579
|
|
|
602
|
-
|
|
603
|
-
- `schema` 当前为 `aun.group.index.v1`。
|
|
604
|
-
- `etag` 是正文条目的 canonical JSONL bytes 的 SHA-256,格式为 `"sha256:<hex>"`(meta 行与 entries 行的 etag 字段均采用此格式)。
|
|
605
|
-
- `body_hash` 是同一正文条目 bytes 的 SHA-256,格式为 `sha256:<hex>`(不带引号)。
|
|
606
|
-
- `signed_by` 必须等于本次 RPC actor AID。
|
|
607
|
-
- `signature` 覆盖去掉 `signature` 字段后的 `index_meta` 和正文条目的 canonical JSONL bytes。
|
|
608
|
-
- canonical JSONL 使用 AUN V2 canonical JSON 规则:对象 key 按 Unicode code point 排序,非 ASCII 直出,数字不用科学计数法,整数值 float 输出为整数 token,NaN/Infinity 和超过安全整数范围的数字必须拒绝。
|
|
609
|
-
- 当前 P-256 身份使用 `sig_alg=ECDSA-P256-SHA256`;服务端校验实现已支持 Ed25519(`sig_alg=Ed25519`)和 RSA(`sig_alg=RSA-PKCS1v15-SHA256`)签名算法,**但当前版本四个语言 SDK 的 `verifyGroupIndex` / `buildSignedGroupIndex` 仅支持 ECDSA-P256-SHA256**。使用 Ed25519 或 RSA 算法签名的 `group.index` 无法被 SDK 侧验证,建议统一使用 P-256 身份。
|
|
580
|
+
## 10.9 Group FS
|
|
610
581
|
|
|
611
|
-
Group
|
|
582
|
+
Group FS 是群文件系统的唯一对外模型,所有群文件浏览、创建目录、移动、删除、上传、下载和成员数据挂载都通过 `group.fs.*` 完成;不再提供独立的旧资源引用接口。
|
|
612
583
|
|
|
613
|
-
###
|
|
584
|
+
### 路径语义
|
|
614
585
|
|
|
615
|
-
|
|
586
|
+
- `group_aid:/memberdata`:系统保留虚拟目录。
|
|
587
|
+
- `group_aid:/memberdata/{member_aid}`:成员挂载槽位,只能通过 `group.fs.mount` / `group.fs.umount` 等受控流程管理。
|
|
588
|
+
- 除 `memberdata` 和其它系统保留路径外,整个群根命名空间都属于群自有区。
|
|
616
589
|
|
|
617
|
-
|
|
618
|
-
|------|------|:----:|------|
|
|
619
|
-
| `group_id` | string | ✅ | 群组标识兼容字段,值语义为 `group_aid` |
|
|
620
|
-
| `settings` | object | ✅ | 要写入的设置键值 |
|
|
621
|
-
| `expected_index_etag` | string | 写 `group.index` 时必填 | CAS 期望旧 etag;空字符串表示只允许创建首个 `group.index` |
|
|
590
|
+
### 常用 RPC
|
|
622
591
|
|
|
623
|
-
|
|
592
|
+
| 方法 | 说明 |
|
|
593
|
+
|------|------|
|
|
594
|
+
| `group.fs.ls` / `group.fs.find` | 列目录、查找节点 |
|
|
595
|
+
| `group.fs.stat` / `group.fs.lstat` | 查看节点状态 |
|
|
596
|
+
| `group.fs.mkdir` / `group.fs.rm` | 创建目录、删除节点 |
|
|
597
|
+
| `group.fs.cp` / `group.fs.mv` | 复制、移动或改名 |
|
|
598
|
+
| `group.fs.check_upload` / `group.fs.create_upload_session` / `group.fs.complete_upload` | 上传流程控制面 |
|
|
599
|
+
| `group.fs.create_download_ticket` | 创建下载票据 |
|
|
600
|
+
| `group.fs.mount` / `group.fs.umount` | 管理成员数据挂载 |
|
|
601
|
+
| `group.fs.set_visibility` | 设置群自有区节点可见性 |
|
|
602
|
+
| `group.fs.set_acl` | owner 授予群自有区 `role:admin` 写 ACL |
|
|
603
|
+
| `group.fs.remove_acl` | owner 撤销群自有区 `role:admin` 写 ACL |
|
|
624
604
|
|
|
625
|
-
|
|
626
|
-
- 更新任意 indexed setting 时,`settings` 必须同时包含 `group.index`。
|
|
627
|
-
- 写入 `group.index` 时必须传 `expected_index_etag`。
|
|
628
|
-
- 服务端在同一事务内比较当前 `group.index` etag、写 indexed settings、写 `group.index`;同请求内混入的普通 settings 和可事务化群元数据也一起提交或回滚。
|
|
629
|
-
- CAS 失败返回错误,错误消息包含 `group.index etag conflict`;SDK 应重新 `getGroupIndex`,合并本地修改并重新签名后再提交。
|
|
605
|
+
### 权限规则
|
|
630
606
|
|
|
631
|
-
|
|
607
|
+
- 群自有区默认 `public` 表示群内公开,当前群成员可读。
|
|
608
|
+
- `private` 节点不再自动授予所有成员读权限,需要显式读授权或下载票据。
|
|
609
|
+
- 群自有区写权限默认授予当前 `group_aid` 证书签名和 `role:owner`;`role:admin` 只有在 group owner 通过 `group.fs.set_acl` 显式授权后才可写。
|
|
610
|
+
- `group.fs.set_acl/remove_acl` 只允许当前 group owner 调用,当前只允许管理 `grantee_aid="role:admin"`;授权和撤销的是角色策略,不与某个 admin 成员绑定,成员升降级、退群、踢出不会联动 ACL。
|
|
611
|
+
- `memberdata` 不受普通群自有区规则覆盖;群主、管理员和 `group_aid` 都不能用普通文件操作删除或改名成员槽位根。
|
|
612
|
+
- 成员写自己的挂载区,本质上写入成员个人 Storage 的群专属目录,由 `group.fs` 映射到 `/memberdata/{member_aid}`。
|
|
632
613
|
|
|
633
|
-
|
|
634
|
-
{
|
|
635
|
-
"group_id": "g-abc123.agentid.pub",
|
|
636
|
-
"group_aid": "g-abc123.agentid.pub",
|
|
637
|
-
"updated_keys": ["announcement.content", "group.index"],
|
|
638
|
-
"_meta": {
|
|
639
|
-
"group_indexes": {
|
|
640
|
-
"g-abc123.agentid.pub": {
|
|
641
|
-
"etag": "\"sha256:...\"",
|
|
642
|
-
"last_modified": 1780000000000,
|
|
643
|
-
"schema": "aun.group.index.v1"
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
```
|
|
649
|
-
|
|
650
|
-
### `group.get_settings`
|
|
614
|
+
---
|
|
651
615
|
|
|
652
|
-
|
|
616
|
+
## 10.12 在线状态
|
|
653
617
|
|
|
654
|
-
|
|
655
|
-
|------|------|:----:|------|
|
|
656
|
-
| `group_id` | string | ✅ | 群组标识兼容字段,值语义为 `group_aid` |
|
|
657
|
-
| `keys` | string[] | ❌ | 只读取指定 key;读取 `group.index` 时服务端强制返回对应 `_meta.group_indexes` |
|
|
618
|
+
群组在线状态是 per-AID 的全局状态(非 per-group)。在线索引由 Gateway 的 `client.online` / `client.offline` 事件驱动,Group 服务消费这些事件维护在线状态;客户端不需要也不能调用单独的上线、下线或心跳 RPC。
|
|
658
619
|
|
|
659
|
-
|
|
620
|
+
### `group.get_online_members`
|
|
660
621
|
|
|
661
|
-
|
|
662
|
-
{
|
|
663
|
-
"group_id": "g-abc123.agentid.pub",
|
|
664
|
-
"group_aid": "g-abc123.agentid.pub",
|
|
665
|
-
"settings": [
|
|
666
|
-
{"key": "group.index", "value": {"body": "..."}, "updated_by": "alice.agentid.pub", "updated_at": 1780000000000}
|
|
667
|
-
],
|
|
668
|
-
"_meta": {
|
|
669
|
-
"group_indexes": {
|
|
670
|
-
"g-abc123.agentid.pub": {
|
|
671
|
-
"etag": "\"sha256:...\"",
|
|
672
|
-
"last_modified": 1780000000000,
|
|
673
|
-
"schema": "aun.group.index.v1"
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
|
-
```
|
|
622
|
+
查询群内在线成员列表。
|
|
679
623
|
|
|
680
|
-
|
|
624
|
+
**参数**:`group_id` (string, 必填)
|
|
681
625
|
|
|
682
|
-
|
|
626
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "members": [ ... ], "items": [ ... ], "online_members": [ ... ], "online_count": 2, "total": 10, "page": 1, "size": 10 }`
|
|
683
627
|
|
|
684
|
-
|
|
685
|
-
- value 当前包含 `etag`、`last_modified`、`schema`。
|
|
686
|
-
- Group 服务负责注入;Gateway/Message 最多透传或合并 `_meta`,不得计算、生成或改写 group index。
|
|
687
|
-
- 普通 settings 读取会按 actor/device/slot + group + etag 做注入频率控制;显式读取 `group.index` 和写入成功时强制注入。
|
|
688
|
-
- SDK 观察到新 `etag` 只记录远端版本提示;etag 不一致只表示本地与远端不同步,不表示远端一定应覆盖本地。
|
|
689
|
-
- 是否调用 `getGroupIndex` pull 远端,或调用 `updateGroupIndex` push 本地修改,由应用层决定。
|
|
628
|
+
字段约定:`members` 是主字段;`items` 和 `online_members` 是兼容别名,内容与 `members` 完全相同。
|
|
690
629
|
|
|
691
630
|
---
|
|
692
631
|
|
|
693
|
-
## 10.
|
|
632
|
+
## 10.13 群设置与 `group.index`
|
|
633
|
+
|
|
634
|
+
`group.set_settings` / `group.get_settings` 是群公告、群规则、入群要求、提及过滤模式等群级设置的统一 RPC。`group.index` 是保留设置 key,用于保存 owner/admin SDK 生成并签名的群索引 JSONL。
|
|
635
|
+
|
|
636
|
+
`mention_mode`、`name`、`description`、`visibility` 等设置不属于 indexed settings,可继续通过普通 `group.set_settings` 写入,不要求 `group.index`。
|
|
637
|
+
|
|
638
|
+
修改 `rules.content`、`rules.attachments`、`announcement.content`、`announcement.attachments`、`join.mode`、`join.question`、`join.auto_approve_patterns`、`join.max_pending` 等 indexed settings 时,必须同包提交新的签名 `group.index`,并在 RPC 参数中传入 `expected_index_etag`。Group 服务在同一事务内比较当前 `group.index` etag、写 indexed settings、写 `group.index`;同请求内混入的普通 settings 和可事务化群元数据也一起提交或回滚。CAS 失败返回错误,错误消息包含 `group.index etag conflict`。
|
|
639
|
+
|
|
640
|
+
`group.index` 正文由 owner/admin 侧 SDK 生成,首行 `index_meta` 包含 `etag`、`last_modified`、`schema=aun.group.index.v1`、`body_hash`、`signed_by`、`sig_alg` 和 `signature`。正文使用 AUN V2 canonical JSONL:对象 key 按 Unicode code point 排序,非 ASCII 直出,数字不用科学计数法,整数值 float 输出为整数 token,NaN/Infinity 和超过安全整数范围的数字必须拒绝。服务端只校验 owner/admin 权限、签名、schema、`body_hash`、`etag` 和 `signed_by`,不根据 DB 状态生成索引正文。
|
|
641
|
+
|
|
642
|
+
响应可在顶层携带 `_meta.group_indexes`:
|
|
643
|
+
|
|
644
|
+
```json
|
|
645
|
+
{
|
|
646
|
+
"_meta": {
|
|
647
|
+
"group_indexes": {
|
|
648
|
+
"g-abc123.agentid.pub": {
|
|
649
|
+
"etag": "\"sha256:...\"",
|
|
650
|
+
"last_modified": 1780000000000,
|
|
651
|
+
"schema": "aun.group.index.v1"
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
`_meta.group_indexes` 只是版本提示,不是正文。Group 服务负责注入;Gateway/Message 最多透传或合并 `_meta`,不得计算、生成或改写 group index。SDK 观察到新 `etag` 只标记 stale,是否调用 `getGroupIndex` 摘取正文由应用层决定。
|
|
659
|
+
|
|
660
|
+
---
|
|
661
|
+
|
|
662
|
+
## 10.14 事件
|
|
694
663
|
|
|
695
664
|
Group 服务通过 `event/group.*` 事件推送变更通知给相关 AID。
|
|
696
665
|
|
|
@@ -743,6 +712,9 @@ Group 服务通过 `event/group.*` 事件推送变更通知给相关 AID。
|
|
|
743
712
|
| `suspended` | 群组暂停 |
|
|
744
713
|
| `resumed` | 群组恢复 |
|
|
745
714
|
| `dissolved` | 群组解散 |
|
|
715
|
+
| `fs_updated` | Group FS 节点更新 |
|
|
716
|
+
| `fs_visibility_updated` | Group FS 可见性更新 |
|
|
717
|
+
| `fs_deleted` | Group FS 节点删除 |
|
|
746
718
|
|
|
747
719
|
### `event/group.message_created`
|
|
748
720
|
|
|
@@ -784,7 +756,7 @@ Group 服务通过 `event/group.*` 事件推送变更通知给相关 AID。
|
|
|
784
756
|
|
|
785
757
|
---
|
|
786
758
|
|
|
787
|
-
## 10.15 错误码
|
|
759
|
+
## 10.15 错误码
|
|
788
760
|
|
|
789
761
|
| 错误码 | 说明 | 客户端处理 |
|
|
790
762
|
|--------|------|-----------|
|
|
@@ -792,7 +764,7 @@ Group 服务通过 `event/group.*` 事件推送变更通知给相关 AID。
|
|
|
792
764
|
| -32602 | Invalid params(如缺少 group_id) | 检查参数 |
|
|
793
765
|
| -32004 | Permission denied(权限不足) | 提示用户,不重试 |
|
|
794
766
|
| -32001 | Authentication failed | 重新认证 |
|
|
795
|
-
| -33001 | Group not found |
|
|
767
|
+
| -33001 | Group not found | 检查 group_id |
|
|
796
768
|
| -33002 | Group state invalid(群状态不允许该操作) | 检查群状态 |
|
|
797
769
|
| -33003 | Group suspended | 等待恢复或联系管理员 |
|
|
798
770
|
| -33004 | Group member limit reached | 不重试 |
|
|
@@ -800,21 +772,21 @@ Group 服务通过 `event/group.*` 事件推送变更通知给相关 AID。
|
|
|
800
772
|
| -33006 | Not a member | 先加入群组 |
|
|
801
773
|
| -33007 | Role insufficient(权限不足) | 检查角色 |
|
|
802
774
|
| -33008 | Invite code invalid or expired | 获取新邀请码 |
|
|
803
|
-
| -33009 | Join rejected | 不重试 |
|
|
804
|
-
|
|
805
|
-
`group.index etag conflict` 表示 `expected_index_etag` 与服务端当前 `group.index` etag
|
|
806
|
-
|
|
807
|
-
---
|
|
808
|
-
|
|
809
|
-
## 10.16 设计约束与实现说明
|
|
810
|
-
|
|
811
|
-
- **Group Service 是独立 AID 持有者**:所有 `group.*` 方法都通过 Group Service 的 AID 暴露,不内嵌于 Gateway。
|
|
812
|
-
- **group.index 由 SDK 生成**:Group 服务只校验、CAS 保存和注入 meta,不根据 DB 状态拼装 `group.index`。
|
|
813
|
-
- **Gateway/Message 不承载 group.index 业务语义**:只能转发或合并 `_meta`,不能生成或改写 `_meta.group_indexes`。
|
|
814
|
-
- **消息 seq 单调递增**:per-group 粒度,确保顺序一致性,`ack_seq` 仅增不减。
|
|
775
|
+
| -33009 | Join rejected | 不重试 |
|
|
776
|
+
|
|
777
|
+
`group.index etag conflict` 表示 `expected_index_etag` 与服务端当前 `group.index` etag 不一致。客户端应重新读取 `group.index`,在最新 index 上合并本地修改并重新签名后再提交。
|
|
778
|
+
|
|
779
|
+
---
|
|
780
|
+
|
|
781
|
+
## 10.16 设计约束与实现说明
|
|
782
|
+
|
|
783
|
+
- **Group Service 是独立 AID 持有者**:所有 `group.*` 方法都通过 Group Service 的 AID 暴露,不内嵌于 Gateway。
|
|
784
|
+
- **group.index 由 SDK 生成**:Group 服务只校验、CAS 保存和注入 meta,不根据 DB 状态拼装 `group.index`。
|
|
785
|
+
- **Gateway/Message 不承载 group.index 业务语义**:只能转发或合并 `_meta`,不能生成或改写 `_meta.group_indexes`。
|
|
786
|
+
- **消息 seq 单调递增**:per-group 粒度,确保顺序一致性,`ack_seq` 仅增不减。
|
|
815
787
|
- **事件 seq 独立计数**:`event_seq` 与 `message_seq` 独立;消息增量拉取使用 `group.pull`,事件增量拉取使用 `group.pull_events`。
|
|
816
788
|
- **duty 模式**:`duty_mode` 非 `"none"` 且 `duty_human_message_policy = "dispatch"` 时,消息先推送给当班成员处理,回复后再广播;`group.pull` 始终可拉取全量消息。
|
|
817
|
-
-
|
|
789
|
+
- **Group FS**:群文件能力统一由 `group.fs.*` 提供;不再提供独立资源审批 RPC。
|
|
818
790
|
- **在线状态**:通过 `group.get_online_members` 查询当前在线成员列表。
|
|
819
|
-
|
|
791
|
+
- **Group FS 系统目录保护**:`memberdata` 是 Group FS 视图层的虚拟系统目录;根节点和成员槽位根不得被普通文件操作删除、覆盖或重命名。成员槽位子路径映射到成员个人 Storage 的 `group_data/{group_aid}`,只能通过 `group.fs.*` 间接访问。完整保护规则见 [16-系统目录保护方案.md](16-系统目录保护方案.md)。
|
|
820
792
|
|