@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.
Files changed (140) hide show
  1. package/CHANGELOG.md +550 -464
  2. package/_packed_docs/CHANGELOG-validators.md +147 -0
  3. package/_packed_docs/CHANGELOG.md +550 -464
  4. package/_packed_docs/INDEX.md +201 -177
  5. package/_packed_docs/KITE_DOCS_GUIDE.md +38 -32
  6. package/_packed_docs/agent.md//350/277/234/347/250/213agent.md/347/274/223/345/255/230/344/270/216etag/351/200/217/344/274/240/346/226/271/346/241/210.md +169 -116
  7. package/_packed_docs/aun-perf-audit-critical-bugs.md +315 -0
  8. package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +263 -260
  9. package/_packed_docs/cli/CLI/346/211/213/345/206/214.md +331 -0
  10. package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +2 -2
  11. package/_packed_docs/protocol/00A-/350/256/276/350/256/241/345/216/237/345/210/231-/344/270/272Agent/350/200/214/347/224/237.md +1 -1
  12. package/_packed_docs/protocol/01-/350/272/253/344/273/275/344/270/216/345/207/255/350/257/201/345/215/217/350/256/256-auth.md +39 -16
  13. package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +8 -5
  14. package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +18 -19
  15. package/_packed_docs/protocol/07-/351/224/231/350/257/257/347/240/201/344/270/216/347/212/266/346/200/201/346/234/272.md +1 -1
  16. package/_packed_docs/protocol/08-AUN-E2EE-Group.md +139 -746
  17. package/_packed_docs/protocol/08-AUN-E2EE.md +12 -10
  18. package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +117 -171
  19. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +6 -0
  20. package/_packed_docs/protocol/15-/347/246/273/347/272/277/346/216/250/351/200/201/351/200/232/347/237/245/345/215/217/350/256/256.md +1 -1
  21. package/_packed_docs/protocol/16-/347/263/273/347/273/237/347/233/256/345/275/225/344/277/235/346/212/244/346/226/271/346/241/210.md +177 -0
  22. package/_packed_docs/protocol/README.md +5 -4
  23. package/_packed_docs/protocol/aun-docs-guide.md +2 -2
  24. package/_packed_docs/protocol/index.md +12 -7
  25. package/_packed_docs/protocol//350/215/211/346/241/210-/346/213/222/347/273/235/344/277/241/345/217/267/345/215/217/350/256/256.md +1 -1
  26. package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +13 -13
  27. package/_packed_docs/protocol//351/231/204/345/275/225L-E2EE/345/256/236/347/216/260/346/214/207/345/215/227.md +9 -9
  28. package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +15 -13
  29. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +26 -18
  30. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +35 -284
  31. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +473 -442
  32. package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +11 -7
  33. package/_packed_docs/sdk/09-collab-rpc-manual.md +581 -550
  34. package/_packed_docs/sdk/09-group-rpc-manual.md +367 -433
  35. package/_packed_docs/sdk/09-message-rpc-manual.md +50 -28
  36. package/_packed_docs/sdk/09-payload-reference.md +3 -3
  37. package/_packed_docs/sdk/09-storage-rpc-manual.md +57 -20
  38. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +18 -17
  39. 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
  40. package/_packed_docs/sdk/INDEX.md +25 -24
  41. package/_packed_docs/sdk/Notify/351/200/232/347/237/245/346/226/271/346/241/210.md +6 -2
  42. package/dist/agent-md.d.ts.map +1 -1
  43. package/dist/agent-md.js +18 -9
  44. package/dist/agent-md.js.map +1 -1
  45. package/dist/bundle.js +1661 -1180
  46. package/dist/client/delivery.d.ts +13 -2
  47. package/dist/client/delivery.d.ts.map +1 -1
  48. package/dist/client/delivery.js +251 -46
  49. package/dist/client/delivery.js.map +1 -1
  50. package/dist/client/group-state.d.ts.map +1 -1
  51. package/dist/client/group-state.js +36 -14
  52. package/dist/client/group-state.js.map +1 -1
  53. package/dist/client/lifecycle.js +2 -2
  54. package/dist/client/lifecycle.js.map +1 -1
  55. package/dist/client/rpc-pipeline.d.ts +1 -0
  56. package/dist/client/rpc-pipeline.d.ts.map +1 -1
  57. package/dist/client/rpc-pipeline.js +166 -50
  58. package/dist/client/rpc-pipeline.js.map +1 -1
  59. package/dist/client/v2-e2ee.d.ts +14 -1
  60. package/dist/client/v2-e2ee.d.ts.map +1 -1
  61. package/dist/client/v2-e2ee.js +376 -126
  62. package/dist/client/v2-e2ee.js.map +1 -1
  63. package/dist/client.d.ts +5 -4
  64. package/dist/client.d.ts.map +1 -1
  65. package/dist/client.js +187 -46
  66. package/dist/client.js.map +1 -1
  67. package/dist/collab/client.d.ts +8 -0
  68. package/dist/collab/client.d.ts.map +1 -1
  69. package/dist/collab/client.js +12 -0
  70. package/dist/collab/client.js.map +1 -1
  71. package/dist/errors.d.ts +0 -20
  72. package/dist/errors.d.ts.map +1 -1
  73. package/dist/errors.js +8 -51
  74. package/dist/errors.js.map +1 -1
  75. package/dist/facades.d.ts +9 -4
  76. package/dist/facades.d.ts.map +1 -1
  77. package/dist/facades.js +192 -31
  78. package/dist/facades.js.map +1 -1
  79. package/dist/group-fs.d.ts +17 -0
  80. package/dist/group-fs.d.ts.map +1 -1
  81. package/dist/group-fs.js +54 -11
  82. package/dist/group-fs.js.map +1 -1
  83. package/dist/group-id.d.ts +9 -12
  84. package/dist/group-id.d.ts.map +1 -1
  85. package/dist/group-id.js +41 -63
  86. package/dist/group-id.js.map +1 -1
  87. package/dist/index.d.ts +4 -2
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +4 -1
  90. package/dist/index.js.map +1 -1
  91. package/dist/keystore/index.d.ts +2 -54
  92. package/dist/keystore/index.d.ts.map +1 -1
  93. package/dist/keystore/indexeddb-identity-store.d.ts +3 -0
  94. package/dist/keystore/indexeddb-identity-store.d.ts.map +1 -1
  95. package/dist/keystore/indexeddb-identity-store.js +65 -0
  96. package/dist/keystore/indexeddb-identity-store.js.map +1 -1
  97. package/dist/keystore/indexeddb-shared.d.ts +3 -17
  98. package/dist/keystore/indexeddb-shared.d.ts.map +1 -1
  99. package/dist/keystore/indexeddb-shared.js +4 -47
  100. package/dist/keystore/indexeddb-shared.js.map +1 -1
  101. package/dist/keystore/indexeddb-token-store.d.ts +1 -64
  102. package/dist/keystore/indexeddb-token-store.d.ts.map +1 -1
  103. package/dist/keystore/indexeddb-token-store.js +45 -774
  104. package/dist/keystore/indexeddb-token-store.js.map +1 -1
  105. package/dist/logger.d.ts +2 -0
  106. package/dist/logger.d.ts.map +1 -1
  107. package/dist/logger.js +4 -0
  108. package/dist/logger.js.map +1 -1
  109. package/dist/storage/lowlevel.d.ts +9 -1
  110. package/dist/storage/lowlevel.d.ts.map +1 -1
  111. package/dist/storage/lowlevel.js +12 -1
  112. package/dist/storage/lowlevel.js.map +1 -1
  113. package/dist/storage/vfs.d.ts +22 -0
  114. package/dist/storage/vfs.d.ts.map +1 -1
  115. package/dist/storage/vfs.js +54 -0
  116. package/dist/storage/vfs.js.map +1 -1
  117. package/dist/tools/cross-sdk-agent.js +336 -49
  118. package/dist/tools/cross-sdk-agent.js.map +1 -1
  119. package/dist/transport.d.ts +2 -0
  120. package/dist/transport.d.ts.map +1 -1
  121. package/dist/transport.js +96 -3
  122. package/dist/transport.js.map +1 -1
  123. package/dist/types.d.ts +39 -56
  124. package/dist/types.d.ts.map +1 -1
  125. package/dist/v2/session/session.d.ts +2 -0
  126. package/dist/v2/session/session.d.ts.map +1 -1
  127. package/dist/v2/session/session.js +58 -22
  128. package/dist/v2/session/session.js.map +1 -1
  129. package/dist/v2/state/commitment.d.ts +1 -1
  130. package/dist/v2/state/commitment.d.ts.map +1 -1
  131. package/dist/v2/state/commitment.js +5 -3
  132. package/dist/v2/state/commitment.js.map +1 -1
  133. package/dist/validators.d.ts +35 -0
  134. package/dist/validators.d.ts.map +1 -0
  135. package/dist/validators.js +127 -0
  136. package/dist/validators.js.map +1 -0
  137. package/dist/version.d.ts +1 -1
  138. package/dist/version.js +1 -1
  139. package/package.json +1 -1
  140. package/_packed_docs/collab-gateway-boundary-test-report.md +0 -164
@@ -1,10 +1,12 @@
1
- # AUN-E2EE 扩展规范
2
-
3
- > 版本:2.0-draft
4
- > 状态:规范性文档
5
- > 适用范围:AUN 客户端 SDK、客户端应用、跨语言实现
6
- > 不适用范围:Gateway、Message 模块的加解密实现
7
- > 定位:**独立安全层**,横跨 `gateway`、`peer`、`relay` 三种连接模式
1
+ # AUN-E2EE 历史扩展规范(Legacy)
2
+
3
+ > 版本:2.0-draft
4
+ > 状态:历史兼容文档
5
+ > 适用范围:AUN 客户端 SDK、客户端应用、跨语言实现
6
+ > 不适用范围:Gateway、Message 模块的加解密实现
7
+ > 定位:旧 P2P E2EE 信封说明;当前默认主路径已迁移到 E2EE V2 多设备 wrap
8
+
9
+ > **当前实现说明**:最近版本的 SDK 默认使用 V2 多设备 wrap。P2P 加密消息通过 `message.send` 承载 `e2ee.p2p_encrypted` envelope,Group 加密消息通过 `group.v2.send` 承载 `e2ee.group_encrypted` envelope;每条消息一把 `master_key`,按 recipient 设备生成 `3DH` / `1DH` wrap,接收端验证 `sender_signature`、AAD、recipient digest/proof 后解密。当前 V2 链路见 [E2EE_V2消息通信时序图](../sdk/E2EE_V2消息通信时序图.md);群组 V2 规范见 [08-AUN-E2EE-Group](08-AUN-E2EE-Group.md)。本文保留 `prekey_ecdh_v2` / `long_term_key` 旧格式,用于历史兼容和迁移排查,不应作为新实现的默认发送格式。
8
10
 
9
11
  ---
10
12
 
@@ -108,7 +110,7 @@ AUN-E2EE 是 Layer 3 扩展协议,建立在以下核心能力之上:
108
110
 
109
111
  ### 5.2 密文消息
110
112
 
111
- 通过 `message.send` 传输的加密业务消息,`encrypted` 必须为 `true`,`payload.type` 必须为 `e2ee.encrypted`。
113
+ `e2ee.encrypted` 信封通过 `message.send` 传输时,`encrypted` 必须为 `true`,`payload.type` 必须为 `e2ee.encrypted`。当前新实现应使用 V2 `e2ee.p2p_encrypted` 信封。
112
114
 
113
115
  ---
114
116
 
@@ -186,7 +188,7 @@ AUN-E2EE 支持两种加密模式,SDK 自动按优先级选择。
186
188
 
187
189
  ### 7.3 模式选择策略
188
190
 
189
- SDK **MUST** 按以下优先级自动选择:
191
+ 旧版 SDK legacy 信封中按以下优先级自动选择:
190
192
 
191
193
  1. **优先**:prekey_ecdh_v2(服务端有接收方 prekey)
192
194
  2. **降级**:long_term_key(无 prekey 时,需客户端安全策略允许)
@@ -195,7 +197,7 @@ SDK **MUST** 按以下优先级自动选择:
195
197
 
196
198
  ### 7.4 兼容性
197
199
 
198
- - 发送端 **MUST** 使用 `prekey_ecdh_v2` 模式发送
200
+ - 旧版发送端应优先使用 `prekey_ecdh_v2` 模式发送;当前新实现应使用 V2 多设备 wrap。
199
201
 
200
202
  ---
201
203
 
@@ -26,43 +26,50 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
26
26
 
27
27
  ### Group 对象
28
28
 
29
- | 字段 | 类型 | 说明 |
30
- |------|------|------|
31
- | `group_id` | string | 群组唯一 ID(自动生成或自定义) |
32
- | `name` | string | 群组名称 |
33
- | `owner_aid` | string | 群主 AID |
34
- | `creator_aid` | string | 创建者 AID |
35
- | `visibility` | string | `"public"` / `"private"` |
36
- | `status` | string | `"active"` / `"suspended"` / `"closed"` |
29
+ | 字段 | 类型 | 说明 |
30
+ |------|------|------|
31
+ | `group_aid` | string | 群组主标识,目标态格式为 `{base}.{issuer-domain}` |
32
+ | `group_id` | string | 兼容字段;新群通常等于 `group_aid`,旧群可能保留历史值 |
33
+ | `name` | string | 群组名称 |
34
+ | `owner_aid` | string | 群主 AID |
35
+ | `creator_aid` | string | 创建者 AID |
36
+ | `visibility` | string | `"public"` / `"private"` |
37
+ | `status` | string | `"active"` / `"suspended"` / `"dissolved"` |
37
38
  | `description` | string | 群组描述 |
38
39
  | `metadata` | object | 自定义元数据 |
39
40
  | `dispatch_mode` | string | 群分发模式:`"broadcast"`(默认)/ `"mention"`,详见 [10.2.x 群分发模式](#1023-群分发模式dispatch_mode) |
40
41
  | `member_count` | integer | 成员数量 |
41
42
  | `message_seq` | integer | 最新消息序号 |
42
43
  | `event_seq` | integer | 最新事件序号 |
43
- | `created_at` | integer | 创建时间(Unix 秒) |
44
-
45
- ### Group ID 格式与规范化
46
-
47
- `group_id` 是群组的全网唯一标识,前缀 `g-` Group 保留前缀。普通 AID 的本地名称不得以 `g-` 开头,避免与群 ID 混淆。短形式必须以 `g-` 开头,总长度 6 16 字符;`g-` 后面的 slug 4 到 14 位,只能使用小写字母和数字。
48
-
49
- 服务端必须接受以下三种输入形式,并在内部统一为 canonical group_id:
50
-
51
- | 输入形式 | 用途 | canonical 结果 |
52
- |----------|------|----------------|
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` |
44
+ | `created_at` | integer | 创建时间(Unix 毫秒) |
45
+
46
+ ### Group AID / Group ID 兼容规范
47
+
48
+ 当前实现的群组主标识是 `group_aid`,格式为 `{base}.{issuer-domain}`,例如 `10042.agentid.pub`、`team01.agentid.pub`、`g-abc123.agentid.pub`。`group_id` 字段名和参数名继续保留,用于兼容旧 SDK / 旧数据库行;新建群以 `group_aid` 为准,新群的 `group_id` 通常也写入同一个 `group_aid` 值。前缀 `g-` Group 保留前缀(legacy base 格式),普通 AID 的本地名称不得以 `g-` 开头,避免与群标识混淆。
56
49
 
57
- 规范化规则:
50
+ **支持的 base 格式**(不含域名部分):
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 个字符,可包含下划线和短横线
58
54
 
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`。
55
+ 服务端必须接受以下输入形式,并在 API 边界统一为目标态 `group_aid`:
56
+
57
+ | 输入形式 | 用途 | 规范化结果 |
58
+ |----------|------|----------------|
59
+ | `{base}` | 本地域内简写(base 为上述任一格式) | 若本域 issuer 为 `issuer-domain`,规范化为 `{base}.issuer-domain` |
60
+ | `{base}@issuer-domain` | 旧跨域兼容形式 | 规范化为 `{base}.issuer-domain` |
61
+ | `{base}.issuer-domain` | 目标态形式 | 保持为 `{base}.issuer-domain` |
62
+ | `group.issuer-domain/{base}` | 旧 URL 风格兼容形式 | 规范化为 `{base}.issuer-domain` |
63
+
64
+ 规范化规则:
65
+
66
+ - `group_aid` 比较、成员归属、权限校验、E2EE AAD / 签名输入应使用目标态 `{base}.{issuer-domain}`。
67
+ - 输入必须先 trim 并转换为小写;`group.{issuer}/{base}`、`{base}@issuer` 等形式仅作为兼容输入,进入主流程前必须转换为目标态 `group_aid`。
68
+ - 本域内客户端可以提交 `{base}` 简写;服务端按本域 `AUN_ISSUER_DOMAIN` 解析为 `{base}.{issuer-domain}`。没有本域 issuer 配置时,简写保持为 `{base}`。
69
+ - 跨域消息、邀请传播、日志和协议响应应优先使用 `group_aid`,避免远端误把短 ID 当成本域群。
70
+ - `group.create` 可以指定 `group_aid`;`group_id` 仍作为兼容别名。指定时必须满足上述格式且未被占用,被占用时返回错误。未指定时由服务端自动分配数字 base。
71
+ - 自动生成的群标识使用单调群号 base(例如 `10042`)并按本域 issuer 生成 `{group_no}.{issuer-domain}`;服务端通过唯一约束或等效机制保证 `group_aid` 唯一,发现碰撞时重新生成。
72
+ - 在 `https://group.{issuer-domain}/...` 这类已携带 issuer 的公开 HTTP 主机下,当前生成的群链接 path 使用单段 `group_aid`,例如 `https://group.agentid.pub/10042.agentid.pub/invite/ic-xxx`。历史 `{base}` 简写链接可继续由服务端兼容解析。
66
73
 
67
74
  ### 10.2.3 群分发模式(dispatch_mode)
68
75
 
@@ -95,20 +102,20 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
95
102
 
96
103
  ### Member 对象
97
104
 
98
- | 字段 | 类型 | 说明 |
99
- |------|------|------|
100
- | `aid` | string | 成员 AID |
101
- | `group_id` | string | 群组 ID |
102
- | `role` | string | `"owner"` / `"admin"` / `"member"` |
103
- | `joined_at` | integer | 加入时间(Unix 秒) |
104
- | `last_ack_seq` | integer | 最后已读消息序号 |
105
+ | 字段 | 类型 | 说明 |
106
+ |------|------|------|
107
+ | `aid` | string | 成员 AID |
108
+ | `group_id` | string | 群组标识兼容字段,值语义为 `group_aid` |
109
+ | `role` | string | `"owner"` / `"admin"` / `"member"` |
110
+ | `joined_at` | integer | 加入时间(Unix 毫秒) |
111
+ | `last_ack_seq` | integer | 最后已读消息序号 |
105
112
 
106
113
  ### Message 对象
107
114
 
108
- | 字段 | 类型 | 说明 |
109
- |------|------|------|
110
- | `group_id` | string | 群组 ID |
111
- | `seq` | integer | 消息序号(群内单调递增) |
115
+ | 字段 | 类型 | 说明 |
116
+ |------|------|------|
117
+ | `group_id` | string | 群组标识兼容字段,值语义为 `group_aid` |
118
+ | `seq` | integer | 消息序号(群内单调递增) |
112
119
  | `message_id` | string | 消息 UUID |
113
120
  | `sender_aid` | string | 发送者 AID |
114
121
  | `message_type` | string | 信封/封装类型,如 `e2ee.group_encrypted`;业务负载类型在 `payload.type` 中 |
@@ -144,10 +151,11 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
144
151
 
145
152
  **参数**:
146
153
 
147
- | 参数 | 类型 | 必填 | 说明 |
148
- |------|------|:----:|------|
149
- | `name` | string | ✅ | 群组名称 |
150
- | `group_id` | string | ❌ | 自定义群 ID,短形式必须以 `g-` 开头且总长度 6 到 16 字符;不提供则服务端自动生成;已被占用时返回错误 |
154
+ | 参数 | 类型 | 必填 | 说明 |
155
+ |------|------|:----:|------|
156
+ | `name` | string | ✅ | 群组名称 |
157
+ | `group_aid` | string | ❌ | 自定义群主标识,目标态为 `{base}.{issuer-domain}`;不提供则服务端自动生成 |
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}` |
151
159
  | `visibility` | string | ❌ | `"public"` / `"private"`,默认由服务配置决定 |
152
160
  | `description` | string | ❌ | 群组描述 |
153
161
  | `metadata` | object | ❌ | 自定义元数据 |
@@ -160,9 +168,10 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
160
168
 
161
169
  ```json
162
170
  {
163
- "group": {
164
- "group_id": "g-abc123.agentid.pub",
165
- "name": "测试群",
171
+ "group": {
172
+ "group_id": "g-abc123.agentid.pub",
173
+ "group_aid": "g-abc123.agentid.pub",
174
+ "name": "测试群",
166
175
  "owner_aid": "alice.agentid.pub",
167
176
  "creator_aid": "alice.agentid.pub",
168
177
  "visibility": "private",
@@ -170,19 +179,26 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
170
179
  "member_count": 1,
171
180
  "message_seq": 0,
172
181
  "event_seq": 0,
173
- "created_at": 1234567890
182
+ "created_at": 1234567890000
174
183
  },
175
184
  "aid": "alice.agentid.pub"
176
185
  }
177
186
  ```
178
187
 
179
- ### `group.get`
188
+ ### `group.get_info`
180
189
 
181
- 查询群组信息。需要是群成员。
190
+ 查询群组信息。默认返回公开平铺字段;需要成员信息、状态或 E2EE 字段时,通过 `required` 声明所需字段并由服务端鉴权。
182
191
 
183
- **参数**:`group_id` (string, 必填)
192
+ **参数**:
184
193
 
185
- **响应**:`{ "group": { ... } }`
194
+ | 参数 | 类型 | 必填 | 说明 |
195
+ |------|------|:----:|------|
196
+ | `group_id` | string | ✅ | 群组标识兼容字段,值语义为 `group_aid` |
197
+ | `required` | string[] | ❌ | 可选值:`member` / `state` / `e2ee` / `avatar` |
198
+
199
+ **响应**:平铺对象。默认字段包含 `found`、`group_id`、`group_aid`、`name`、`visibility`、`status`、`description`、`member_count`、`created_at`。
200
+
201
+ > `group.get` 和 `group.info` 已合并到 `group.get_info`;`group.get_info` 默认行为等价于原公开信息查询。
186
202
 
187
203
  ### `group.update`
188
204
 
@@ -208,21 +224,6 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
208
224
 
209
225
  **响应**:`{ "query": "...", "items": [ ... ], "total": 3 }`
210
226
 
211
- ### `group.get_public_info`
212
-
213
- 查询公开群组信息,无需是成员。仅限 `visibility=public` 的群组。
214
-
215
- **参数**:`group_id` (string, 必填)
216
-
217
- **响应**:`{ "group": { ... } }`
218
-
219
- ### `group.get_stats`
220
-
221
- 获取群组统计信息。需要 admin 及以上权限。
222
-
223
- **参数**:`group_id` (string, 必填)
224
-
225
- **响应**:`{ "group_id": "g-abc123.agentid.pub", "stats": { ... } }`
226
227
 
227
228
  ### `group.suspend`
228
229
 
@@ -260,7 +261,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
260
261
 
261
262
  | 参数 | 类型 | 必填 | 说明 |
262
263
  |------|------|:----:|------|
263
- | `group_id` | string | ✅ | 群组 ID |
264
+ | `group_id` | string | ✅ | 群组标识兼容字段,值语义为 `group_aid` |
264
265
  | `aid` | string | ✅ | 要添加的 AID |
265
266
  | `role` | string | ❌ | `"member"` / `"admin"`,默认 `"member"` |
266
267
  | `member_type` | string | ❌ | `"human"` / `"ai"`,默认 `"human"` |
@@ -307,7 +308,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
307
308
 
308
309
  | 参数 | 类型 | 必填 | 默认值 | 说明 |
309
310
  |------|------|:----:|--------|------|
310
- | `group_id` | string | ✅ | — | 群组 ID |
311
+ | `group_id` | string | ✅ | — | 群组标识兼容字段,值语义为 `group_aid` |
311
312
  | `page` | integer | ❌ | 1 | 页码 |
312
313
  | `size` | integer | ❌ | 50 | 每页条数 |
313
314
  | `role` | string | ❌ | — | 按角色过滤 |
@@ -350,14 +351,14 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
350
351
 
351
352
  | 参数 | 类型 | 必填 | 说明 |
352
353
  |------|------|:----:|------|
353
- | `group_id` | string | ✅ | 群组 ID |
354
+ | `group_id` | string | ✅ | 群组标识兼容字段,值语义为 `group_aid` |
354
355
  | `type` | string | ❌ | 信封/封装类型,普通业务消息无需填写;SDK 加密群消息时自动使用 `e2ee.group_encrypted` |
355
356
  | `payload` | object | ✅ | 消息内容 |
356
357
  | `attachments` | array | ❌ | 存储引用列表 |
357
358
 
358
359
  ##### Payload 参考约定
359
360
 
360
- `group.send.params.payload` 的统一业务负载格式见 [消息Payload参考约定](../sdk/消息Payload参考约定.md)。完整群消息请求仍在 `payload` 同级传入 `group_id`;业务类型放在 `payload.type`,不要与 `group.send.params.type` 信封/封装类型混用。
361
+ `group.send.params.payload` 的统一业务负载格式见 [消息Payload参考约定](../sdk/消息Payload参考约定.md)。完整群消息请求仍在 `payload` 同级传入 `group_id`(兼容参数名,值使用目标态 `group_aid`);业务类型放在 `payload.type`,不要与 `group.send.params.type` 信封/封装类型混用。
361
362
 
362
363
  协议层只要求 `payload` 是 JSON 对象,并按服务端配置做大小、信封/封装类型和 E2EE epoch 相关检查;字段语义由应用层约定,接收端应对未知 `payload.type`、未知 `kind` 和缺失展示字段做降级处理。
363
364
 
@@ -398,9 +399,9 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
398
399
 
399
400
  | 参数 | 类型 | 必填 | 默认值 | 说明 |
400
401
  |------|------|:----:|--------|------|
401
- | `group_id` | string | ✅ | — | 群组 ID |
402
+ | `group_id` | string | ✅ | — | 群组标识兼容字段,值语义为 `group_aid` |
402
403
  | `after_message_seq` | integer | ❌ | 0 | 拉取该 seq 之后的消息 |
403
- | `limit` | integer | ❌ | 100 | 最大条数 |
404
+ | `limit` | integer | ❌ | 50 | 最大条数(最大 50;`pull_max_limit` 配置只能进一步收紧) |
404
405
  | `device_id` | string | ❌ | — | 设备 ID(多设备模式) |
405
406
 
406
407
  **响应**:
@@ -411,7 +412,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
411
412
  "messages": [ ... ],
412
413
  "latest_message_seq": 42,
413
414
  "has_more": false,
414
- "limit": 100
415
+ "limit": 50
415
416
  }
416
417
  ```
417
418
 
@@ -445,7 +446,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
445
446
 
446
447
  | 参数 | 类型 | 必填 | 默认值 | 说明 |
447
448
  |------|------|:----:|--------|------|
448
- | `group_id` | string | ✅ | — | 群组 ID |
449
+ | `group_id` | string | ✅ | — | 群组标识兼容字段,值语义为 `group_aid` |
449
450
  | `status` | string | ❌ | `"pending"` | `"pending"` / `"approved"` / `"rejected"` |
450
451
  | `page` | integer | ❌ | 1 | 页码 |
451
452
  | `size` | integer | ❌ | 50 | 每页条数 |
@@ -460,7 +461,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
460
461
 
461
462
  | 参数 | 类型 | 必填 | 说明 |
462
463
  |------|------|:----:|------|
463
- | `group_id` | string | ✅ | 群组 ID |
464
+ | `group_id` | string | ✅ | 群组标识兼容字段,值语义为 `group_aid` |
464
465
  | `aid` | string | ✅ | 申请人 AID |
465
466
  | `approve` | boolean | ❌ | 批准(true)或拒绝(false),默认 true |
466
467
  | `reason` | string | ❌ | 拒绝原因 |
@@ -475,22 +476,6 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
475
476
 
476
477
  **响应**:`{ "group_id": "g-abc123.agentid.pub", "results": [ ... ] }`
477
478
 
478
- ### `group.get_join_requirements`
479
-
480
- 获取入群要求配置。
481
-
482
- **参数**:`group_id` (string, 必填)
483
-
484
- **响应**:`{ "group_id": "g-abc123.agentid.pub", "requirements": { "mode": "approval", "question": "...", ... } }`
485
-
486
- ### `group.update_join_requirements`
487
-
488
- 更新入群要求配置。需要 admin 及以上权限。
489
-
490
- **参数**:`group_id` (必填), `mode` / `question` / `auto_approve_patterns` / `max_pending` (可选)
491
-
492
- **响应**:`{ "group_id": "g-abc123.agentid.pub", "requirements": { ... } }`
493
-
494
479
  ### `group.create_invite_code`
495
480
 
496
481
  创建邀请码。需要 owner/admin 权限,或群规则允许成员邀请。
@@ -499,7 +484,7 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
499
484
 
500
485
  | 参数 | 类型 | 必填 | 说明 |
501
486
  |------|------|:----:|------|
502
- | `group_id` | string | ✅ | 群组 ID |
487
+ | `group_id` | string | ✅ | 群组标识兼容字段,值语义为 `group_aid` |
503
488
  | `code` | string | ❌ | 自定义邀请码,不提供则自动生成 |
504
489
  | `max_uses` | integer | ❌ | 最大使用次数,默认 1,必须 > 0 |
505
490
  | `expires_in_seconds` | integer | ❌ | 有效期(秒),默认由配置决定(7 天) |
@@ -532,69 +517,37 @@ Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。
532
517
 
533
518
  ---
534
519
 
535
- ## 10.8 公告与规则
536
-
537
- ### `group.get_announcement`
538
-
539
- 获取群公告。需要是群成员。
540
-
541
- **参数**:`group_id` (string, 必填)
542
-
543
- **响应**:`{ "group_id": "g-abc123.agentid.pub", "announcement": { ... } }`
544
-
545
- ### `group.update_announcement`
546
-
547
- 更新群公告。需要 admin 及以上权限。
548
-
549
- **参数**:`group_id` (必填), `content` (string, 必填,上限默认 4000 字符), `attachments` (array, 可选)
550
-
551
- ### `group.get_rules`
552
-
553
- 获取群规则(可见性设置、加入模式等)。
554
-
555
- **参数**:`group_id` (string, 必填)
556
-
557
- ### `group.update_rules`
558
-
559
- 更新入群要求。需要 admin 及以上权限。
560
-
561
- **参数**:
562
-
563
- | 参数 | 类型 | 必填 | 说明 |
564
- |------|------|:----:|------|
565
- | `group_id` | string | | 群组 ID |
566
- | `mode` | string | ❌ | `"open"` / `"approval"` / `"invite_only"` / `"closed"` |
567
- | `question` | string | ❌ | 入群问题 |
568
- | `auto_approve_patterns` | array | ❌ | 自动批准正则列表 |
569
- | `max_pending` | integer | ❌ | 最大待审批数 |
570
-
571
- ---
572
-
573
- ## 10.9 群文件系统
574
-
575
- 群文件系统统一使用 `group.fs.*`。群路径采用 `group_aid:/path` 或 `https://{group_aid}/path`,也可在 RPC 参数中同时传 `group_id` 与裸路径。群自有区包括 `announce`、`public`、`archive`;成员数据区为 `memberdata/{member_ref}`,服务端映射到成员自己的 `groupdata/{group_id}` 存储根。
576
-
577
- 群自有区写入必须满足双身份规则:连接身份 `_auth.aid` 是群 owner,签名身份 `_auth.client_signature_aid` 是当前 `group_aid`。`group_aid` 私钥由群主持有,gateway 仅允许 `group.fs.*` 出现签名身份与连接身份不一致。成员数据区写入只允许对应成员本人。
578
-
579
- | 方法 | 说明 |
580
- |------|------|
581
- | `group.fs.ls` | 列出目录 |
582
- | `group.fs.find` | 查找节点 |
583
- | `group.fs.stat` | 查看节点 |
584
- | `group.fs.lstat` | 查看链接本身 |
585
- | `group.fs.df` | 查看群文件系统用量 |
586
- | `group.fs.create_download_ticket` | 创建下载票据,SDK 使用票据执行数据面下载 |
587
- | `group.fs.mkdir` | 创建目录 |
588
- | `group.fs.rm` | 删除节点 |
589
- | `group.fs.cp` | group→group 远程复制;本地上传/下载由 SDK 数据面编排 |
590
- | `group.fs.mv` | group→group 远程移动 |
591
- | `group.fs.check_upload` | 上传前检查 |
592
- | `group.fs.create_upload_session` | 创建上传会话 |
593
- | `group.fs.complete_upload` | 完成上传 |
594
- | `group.fs.mount` | 挂载成员数据区 |
595
- | `group.fs.umount` | 卸载成员数据区 |
596
-
597
- 逐方法 SDK 参数以 `docs/sdk/09-group-rpc-manual.md` 为准,详细设计见 `docs/aun-fs/group-fs/`。
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/`。
598
551
 
599
552
  ---
600
553
 
@@ -663,19 +616,12 @@ Group 服务通过 `event/group.*` 事件推送变更通知给相关 AID。
663
616
  | `invite_code_used` | 邀请码使用 |
664
617
  | `invite_code_revoked` | 邀请码撤销 |
665
618
  | `member_banned` | 成员被封禁 |
666
- | `member_unbanned` | 成员解除封禁 |
667
- | `suspended` | 群组暂停 |
668
- | `resumed` | 群组恢复 |
669
- | `dissolved` | 群组解散 |
670
- | `resource_put` | 资源添加/更新 |
671
- | `resource_updated` | 资源元数据更新 |
672
- | `resource_deleted` | 资源删除 |
673
- | `resource_request_created` | 资源申请创建 |
674
- | `resource_direct_added` | 资源直接添加(owner) |
675
- | `resource_request_approved` | 资源申请批准 |
676
- | `resource_request_rejected` | 资源申请拒绝 |
677
-
678
- ### `event/group.message_created`
619
+ | `member_unbanned` | 成员解除封禁 |
620
+ | `suspended` | 群组暂停 |
621
+ | `resumed` | 群组恢复 |
622
+ | `dissolved` | 群组解散 |
623
+
624
+ ### `event/group.message_created`
679
625
 
680
626
  群内新消息时推送给所有在线成员。支持两种模式:
681
627
 
@@ -723,7 +669,7 @@ Group 服务通过 `event/group.*` 事件推送变更通知给相关 AID。
723
669
  | -32602 | Invalid params(如缺少 group_id) | 检查参数 |
724
670
  | -32004 | Permission denied(权限不足) | 提示用户,不重试 |
725
671
  | -32001 | Authentication failed | 重新认证 |
726
- | -33001 | Group not found | 检查 group_id |
672
+ | -33001 | Group not found | 检查规范化后的 `group_aid`(`group_id` 为兼容参数名) |
727
673
  | -33002 | Group state invalid(群状态不允许该操作) | 检查群状态 |
728
674
  | -33003 | Group suspended | 等待恢复或联系管理员 |
729
675
  | -33004 | Group member limit reached | 不重试 |
@@ -741,7 +687,7 @@ Group 服务通过 `event/group.*` 事件推送变更通知给相关 AID。
741
687
  - **消息 seq 单调递增**:per-group 粒度,确保顺序一致性,`ack_seq` 仅增不减。
742
688
  - **事件 seq 独立计数**:`event_seq` 与 `message_seq` 独立;消息增量拉取使用 `group.pull`,事件增量拉取使用 `group.pull_events`。
743
689
  - **duty 模式**:`duty_mode` 非 `"none"` 且 `duty_human_message_policy = "dispatch"` 时,消息先推送给当班成员处理,回复后再广播;`group.pull` 始终可拉取全量消息。
744
- - **群文件系统写边界**:群自有区仅 owner 可写且必须使用 `group_aid` 签名;成员数据区仅对应成员可写。
690
+ - **群文件系统写边界**:群自有区允许当前 `group_aid` 签名、默认 `role:owner`、以及 owner 显式授权后的 `role:admin` 写入;成员数据区仅对应成员可写。
745
691
  - **在线状态**:通过 `group.get_online_members` 查询当前在线成员列表。
746
692
 
747
693
 
@@ -249,6 +249,8 @@ Storage 服务是 AUN 协议的应用层扩展,提供对象存储能力。负
249
249
 
250
250
  统一权限求值顺序(硬顺序,不可调换):① 公开位(`set_visibility`/`is_public`,仅读)→ ② token(`issue_token` 签发,scope 到路径)→ ③ 路径前缀 ACL(`set_acl`,最近祖先匹配,权限位 `r`/`w`/`rw`/`rwx`)→ ④ 角色(群内)→ ⑤ owner → ⑥ 拒绝 `EACCES`。方法:`storage.set_acl` / `remove_acl` / `list_acl` / `set_visibility` / `check_access`(非抛错探测)/ `issue_token` / `revoke_token` / `list_tokens`。
251
251
 
252
+ AID storage 的 ACL 面向具体 AID,主要用于写/删除授权;撤销写授权使用 `storage.remove_acl`。读权限不通过 AID ACL 直接下发,应用应使用 `storage.create_share_link` / `storage.get_by_share` 间接读取,撤销读分享使用 `storage.revoke_share_link`。`role:*` 伪主体只允许可信 group 内部门面管理;普通客户端不得直接对 `group_aid` 空间设置或删除角色 ACL,群自有区 `role:admin` 写授权统一由 `group.fs.set_acl/remove_acl` 管理。
253
+
252
254
  ### 11.5.5 卷与配额
253
255
 
254
256
  `storage.volume.create`(upsert 配额卷 + mount_point)/ `volume.renew`(续期)/ `volume.expire_due`(过期到期卷并标记其挂载 unavailable)。卷生命周期:active → grace(只读宽限,df 标 *)→ expired。
@@ -257,6 +259,10 @@ Storage 服务是 AUN 协议的应用层扩展,提供对象存储能力。负
257
259
 
258
260
  Storage 通过 CA 的 `aid_type` 字段(`normal`/`group`)识别群命名空间。命中 `aid_type=group` 且挂载路径落在 `/memberdata/` 时,放宽 owner 校验,改为调 `group.check_membership` RPC 实时校验成员身份 + 路径约束(mount_path 第一级 == requester_aid)。详见 `10-Group-子协议.md` 与 `docs/aun-fs/topics/group-space.md`。
259
261
 
262
+ 成员个人 Storage 内的 `group_data` 是系统级真实存储根,Storage 服务端必须对普通 `storage.*` / `storage.fs.*` 请求隐藏并拒绝直接写入、删除、重命名或挂载;`aun fs` / Storage VFS 只呈现服务端返回结果,不新增保护逻辑。`group_data` 只能由可信 `group.fs.*` 内部上下文间接访问,占用的空间仍必须计入真实 owner AID 的 Storage 配额。完整规则见 [16-系统目录保护方案.md](16-系统目录保护方案.md)。
263
+
264
+ POSIX VFS 写侧包含 `storage.fs.touch`:它可创建 0 字节文件或刷新已有文件、目录、软链的修改时间,支持 `parents`、`no_create`、`mtime` 和 `follow_symlinks`。这是普通 AID storage 的 VFS 能力;群自有区仍应通过 `group.fs.*` 面进入。
265
+
260
266
  ### 11.5.7 collab 协作编排
261
267
 
262
268
  协作层 `collab.*`(版本化文档 + 目录快照)的编排已并入 Storage 服务进程,handler 与 `storage.*` 并列注册,以调用者身份直调 storage 原语,授权下沉 storage ACL,无特权通道。方法清单与语义见 SDK 手册 `docs/sdk/09-collab-rpc-manual.md`。
@@ -290,7 +290,7 @@ Gateway 向 push_notify_aid 下发的事件通知:
290
290
  "unread_count": 3,
291
291
  "senders": ["alice.example.com", "charlie.example.com"],
292
292
  "latest_ts": 1716100005,
293
- "group_ids": ["group-uuid-1"]
293
+ "group_ids": ["g-abc123.agentid.pub"]
294
294
  }
295
295
  }
296
296
  ]