@agentunion/fastaun-browser 0.5.1 → 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 (50) hide show
  1. package/CHANGELOG.md +548 -518
  2. package/_packed_docs/CHANGELOG-validators.md +134 -131
  3. package/_packed_docs/CHANGELOG.md +548 -518
  4. package/_packed_docs/INDEX.md +51 -44
  5. package/_packed_docs/KITE_DOCS_GUIDE.md +19 -16
  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 -261
  9. package/_packed_docs/cli/CLI/346/211/213/345/206/214.md +328 -328
  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 +293 -294
  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 +85 -89
  19. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +4 -4
  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 -177
  22. package/_packed_docs/protocol/README.md +4 -4
  23. package/_packed_docs/protocol/aun-docs-guide.md +2 -2
  24. package/_packed_docs/protocol/index.md +4 -4
  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 +33 -34
  31. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +22 -17
  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-group-rpc-manual.md +135 -114
  34. package/_packed_docs/sdk/09-message-rpc-manual.md +50 -28
  35. package/_packed_docs/sdk/09-payload-reference.md +3 -3
  36. package/_packed_docs/sdk/09-storage-rpc-manual.md +1 -1
  37. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +11 -10
  38. 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
  39. package/_packed_docs/sdk/INDEX.md +15 -14
  40. package/_packed_docs/sdk/Notify/351/200/232/347/237/245/346/226/271/346/241/210.md +6 -2
  41. package/dist/agent-md.d.ts.map +1 -1
  42. package/dist/agent-md.js +18 -9
  43. package/dist/agent-md.js.map +1 -1
  44. package/dist/bundle.js +104 -24
  45. package/dist/client/v2-e2ee.d.ts.map +1 -1
  46. package/dist/client/v2-e2ee.js +78 -7
  47. package/dist/client/v2-e2ee.js.map +1 -1
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.js +1 -1
  50. package/package.json +1 -1
@@ -1,144 +1,147 @@
1
- # AID 和 Group ID 格式校验实现 (2026-06-18)
2
-
3
- ## 背景
4
-
5
- 发现测试环境中 SDK 发送的目标对象(AID 和 Group ID)存在完全不合法的格式(如 `__system__`),这些非法格式应该在客户端早期拦截,避免发送到服务端。
6
-
7
- ## 问题
8
-
9
- 1. SDK 没有在关键发送接口进行格式校验
10
- 2. 文档中的 Group ID 格式描述与实际代码不一致
11
-
12
- ## 解决方案
13
-
14
- ### 1. 修正文档
15
-
16
- **原文档错误**(`docs/protocol/10-Group-子协议.md`):
17
- - 声称 Group ID slug 为 4-14 位小写字母数字
18
- - 声称总长度 6-16 字符
19
-
20
- **实际格式**(基于服务端代码 `extensions/services/group/service.py`):
21
- - **Legacy 格式**: `g-[a-z0-9]{4,32}` — 4 到 32 位
22
- - **新格式**: `[a-z0-9]{5,}` — 5 位或更多,无上限
23
- - **Group name 格式**: `[a-z0-9][a-z0-9_-]{3,63}` — 4 到 64 个字符
24
-
25
- 已更新文档以反映实际实现。
26
-
27
- ### 2. Python SDK 实现
28
-
29
- #### 新增模块
30
- - `python/src/aun_core/validators.py`
31
- - `validate_aid_format(aid, *, param_name="aid") -> str`
32
- - `validate_group_id_format(group_id, *, param_name="group_id") -> str`
33
-
34
- #### 集成位置
35
- - `python/src/aun_core/_client/rpc_pipeline.py` (`validate_outbound_call` 方法)
36
- - `message.send` → 校验 `to` (AID)
37
- - `group.send` → 校验 `group_id`
38
- - `message.thought.put` → 校验 `to` (AID)
39
- - `message.thought.get` → 校验 `sender_aid` (AID)
40
- - `group.thought.put` → 校验 `group_id`
41
- - `group.thought.get` → 校验 `sender_aid` (AID) 和 `group_id`
42
-
43
- - `python/src/aun_core/client.py` (`notify` 方法)
44
- - 校验 `to` (AID)
45
- - 校验 `group_id`
46
-
47
- #### 测试
48
- - `python/tests/unit/test_validators.py` — 26 个测试用例
49
- - 所有单元测试通过(1058 个)
50
-
51
- ### 3. Go/TypeScript/JavaScript SDK 实现
52
-
53
- 四个 SDK 全部在 **pipeline 层**(`validateOutboundCall` / `validate_outbound_call`)集成校验,确保 `client.call(...)` 直接调用也无法绕过:
54
-
55
- | SDK | 校验器文件 | 集成点 | 测试结果 |
56
- |-----|-----------|--------|---------|
57
- | Python | `python/src/aun_core/validators.py` | `_client/rpc_pipeline.py` + `client.py` notify | 1058 单测通过 |
58
- | Go | `go/validators.go` | `client_rpc_pipeline.go` + `client.go` Notify | 全部通过 |
59
- | TypeScript | `ts/src/validators.ts` | `client/rpc-pipeline.ts` + `client.ts` notify | 582 单测通过 |
60
- | JavaScript | `js/src/validators.ts` | `client/rpc-pipeline.ts` + `client.ts` notify | 599 单测通过 |
61
-
62
- **注意**:TS SDK 最初由 workflow 放在 facade 层(`facades.ts`),存在被 `client.call()` 绕过的风险,已修正为 pipeline 层(与其他三个 SDK 对齐)。facade 层保留了冗余的早期校验。
63
-
64
- **测试夹具修正**:四个 SDK 的测试中存在不合法的占位标识符(如 `bob.*` name 仅 3 字符、`g1`/`g-1` group base 过短),已统一改为合法形式(`bob1.*`、`grp01`、`g-test1`),并同步更新对应的 seq-tracker namespace(`group:g1` → `group:grp01`)。
65
-
66
- ## AID 格式规范
67
-
68
- ```
69
- {name}.{issuer}
70
- ```
71
-
72
- - **name**: 4-64 字节,仅 `[a-z0-9_-]`,首字符不能是 `-`,不能以 `guest` 开头
73
- - **issuer**: 合法的可注册域名
74
-
75
- **示例**:
76
- - ✅ `alice.aid.pub`
77
- - ✅ `test_user.example.com`
78
- - ✅ `user-123.aid.pub`
79
- - ❌ `bob.aid.pub` (name 只有 3 个字符)
80
- - ❌ `__system__` (无 issuer,包含非法字符)
81
- - ❌ `guest.aid.pub` (以 guest 开头)
82
-
83
- ## Group ID 格式规范
84
-
85
- ### Base 格式(不含域名部分)
86
-
87
- 支持三种格式:
88
-
89
- 1. **Legacy 格式**: `g-[a-z0-9]{4,32}`
90
- - 以 `g-` 开头
91
- - 后接 432 位小写字母或数字
92
- - 示例: `g-abc123`, `g-test`
93
-
94
- 2. **新格式**: `[a-z0-9]{5,}`
95
- - 5 位或更多小写字母或数字
96
- - 无上限
97
- - 示例: `12345`, `abcdef`
98
-
99
- 3. **Group name 格式**: `[a-z0-9][a-z0-9_-]{3,63}`
100
- - 4 到 64 个字符
101
- - 首字符为 `[a-z0-9]`
102
- - 可包含下划线和短横线
103
- - 示例: `team_alpha`, `my-group`
104
-
1
+ # AID 和 Group AID / Group ID 格式校验实现 (2026-06-18)
2
+
3
+ ## 背景
4
+
5
+ 发现测试环境中 SDK 发送的目标对象(AID 和 Group ID)存在完全不合法的格式(如 `__system__`),这些非法格式应该在客户端早期拦截,避免发送到服务端。
6
+
7
+ ## 问题
8
+
9
+ 1. SDK 没有在关键发送接口进行格式校验
10
+ 2. 文档中的群组标识格式描述与实际代码不一致
11
+
12
+ ## 解决方案
13
+
14
+ ### 1. 修正文档
15
+
16
+ **原文档错误**(`docs/protocol/10-Group-子协议.md`):
17
+ - 声称 Group ID slug 为 4-14 位小写字母数字
18
+ - 声称总长度 6-16 字符
19
+
20
+ **实际格式**(基于服务端代码 `extensions/services/group/service.py`):
21
+ - **Legacy 格式**: `g-[a-z0-9]{4,32}` — 4 到 32 位
22
+ - **新格式**: `[a-z0-9]{5,}` — 5 位或更多,无上限
23
+ - **Group name 格式**: `[a-z0-9][a-z0-9_-]{3,63}` — 4 到 64 个字符
24
+
25
+ 已更新文档以反映实际实现。
26
+
27
+ ### 2. Python SDK 实现
28
+
29
+ #### 新增模块
30
+ - `python/src/aun_core/validators.py`
31
+ - `validate_aid_format(aid, *, param_name="aid") -> str`
32
+ - `validate_group_id_format(group_id, *, param_name="group_id") -> str`
33
+
34
+ #### 集成位置
35
+ - `python/src/aun_core/_client/rpc_pipeline.py` (`validate_outbound_call` 方法)
36
+ - `message.send` → 校验 `to` (AID)
37
+ - `group.send` → 校验 `group_id`
38
+ - `message.thought.put` → 校验 `to` (AID)
39
+ - `message.thought.get` → 校验 `sender_aid` (AID)
40
+ - `group.thought.put` → 校验 `group_id`
41
+ - `group.thought.get` → 校验 `sender_aid` (AID) 和 `group_id`
42
+
43
+ - `python/src/aun_core/client.py` (`notify` 方法)
44
+ - 校验 `to` (AID)
45
+ - 校验 `group_id`
46
+
47
+ #### 测试
48
+ - `python/tests/unit/test_validators.py` — 26 个测试用例
49
+ - 所有单元测试通过(1058 个)
50
+
51
+ ### 3. Go/TypeScript/JavaScript SDK 实现
52
+
53
+ 四个 SDK 全部在 **pipeline 层**(`validateOutboundCall` / `validate_outbound_call`)集成校验,确保 `client.call(...)` 直接调用也无法绕过:
54
+
55
+ | SDK | 校验器文件 | 集成点 | 测试结果 |
56
+ |-----|-----------|--------|---------|
57
+ | Python | `python/src/aun_core/validators.py` | `_client/rpc_pipeline.py` + `client.py` notify | 1058 单测通过 |
58
+ | Go | `go/validators.go` | `client_rpc_pipeline.go` + `client.go` Notify | 全部通过 |
59
+ | TypeScript | `ts/src/validators.ts` | `client/rpc-pipeline.ts` + `client.ts` notify | 582 单测通过 |
60
+ | JavaScript | `js/src/validators.ts` | `client/rpc-pipeline.ts` + `client.ts` notify | 599 单测通过 |
61
+
62
+ **注意**:TS SDK 最初由 workflow 放在 facade 层(`facades.ts`),存在被 `client.call()` 绕过的风险,已修正为 pipeline 层(与其他三个 SDK 对齐)。facade 层保留了冗余的早期校验。
63
+
64
+ **测试夹具修正**:四个 SDK 的测试中存在不合法的占位标识符(如 `bob.*` name 仅 3 字符、`g1`/`g-1` group base 过短),已统一改为合法形式(`bob1.*`、`grp01`、`g-test1`),并同步更新对应的 seq-tracker namespace(`group:g1` → `group:grp01`)。
65
+
66
+ ## AID 格式规范
67
+
68
+ ```
69
+ {name}.{issuer}
70
+ ```
71
+
72
+ - **name**: 4-64 字节,仅 `[a-z0-9_-]`,首字符不能是 `-`,不能以 `guest` 开头
73
+ - **issuer**: 合法的可注册域名
74
+
75
+ **示例**:
76
+ - ✅ `alice.aid.pub`
77
+ - ✅ `test_user.example.com`
78
+ - ✅ `user-123.aid.pub`
79
+ - ❌ `bob.aid.pub` (name 只有 3 个字符)
80
+ - ❌ `__system__` (无 issuer,包含非法字符)
81
+ - ❌ `guest.aid.pub` (以 guest 开头)
82
+
83
+ ## Group AID / Group ID 格式规范
84
+
85
+ 当前实现中,群组主标识是 `group_aid`,目标态格式为 `{base}.{issuer}`。`group_id` 字段名和 `validate_group_id_format()` 函数名继续保留用于兼容,但规范化结果也返回目标态 `group_aid`,不再返回 `group.{issuer}/{base}`。
86
+
87
+ ### Base 格式(不含域名部分)
88
+
89
+ 支持三种格式:
90
+
91
+ 1. **Legacy 格式**: `g-[a-z0-9]{4,32}`
92
+ - `g-` 开头
93
+ - 后接 4 到 32 位小写字母或数字
94
+ - 示例: `g-abc123`, `g-test`
95
+
96
+ 2. **新格式**: `[a-z0-9]{5,}`
97
+ - 5 位或更多小写字母或数字
98
+ - 无上限
99
+ - 示例: `12345`, `abcdef`
100
+
101
+ 3. **Group name 格式**: `[a-z0-9][a-z0-9_-]{3,63}`
102
+ - 4 到 64 个字符
103
+ - 首字符为 `[a-z0-9]`
104
+ - 可包含下划线和短横线
105
+ - 示例: `team_alpha`, `my-group`
106
+
105
107
  ### 完整格式
106
108
 
107
- - `group.{issuer}/{base}` — canonical 格式
108
- - `{base}.{issuer}` — 旧格式(会被规范化)
109
+ - `{base}.{issuer}` — 目标态 `group_aid`
110
+ - `group.{issuer}/{base}` — 旧 URL 风格兼容格式(会被规范化)
109
111
  - `{base}@{issuer}` — 兼容格式(会被规范化)
110
112
  - `{base}` — 本域简写(需要服务端补全)
111
113
 
112
114
  **示例**:
113
115
  - ✅ `g-abc123.aid.pub`
114
- - ✅ `group.aid.pub/g-test1`
116
+ - ✅ `g-test1.aid.pub`
117
+ - ✅ `group.aid.pub/g-test1`(兼容输入,规范化为 `g-test1.aid.pub`)
115
118
  - ✅ `team_alpha`
116
119
  - ✅ `12345678`
117
- - ❌ `g-1` (只有 3 个字符)
118
- - ❌ `abc` (只有 3 个字符,不满足任何格式)
119
-
120
- ## 服务端已有校验
121
-
122
- 服务端在 `group.create` 中已经有以下校验:
123
-
120
+ - ❌ `g-1` (只有 3 个字符)
121
+ - ❌ `abc` (只有 3 个字符,不满足任何格式)
122
+
123
+ ## 服务端已有校验
124
+
125
+ 服务端在 `group.create` 中已经有以下校验:
126
+
124
127
  ```python
125
- # extensions/services/group/service.py:1036-1037
128
+ # extensions/services/group/service.py
126
129
  if requested_group_id and self._is_numeric_group_id(requested_group_id):
127
130
  raise ValueError("custom group_id cannot be numeric; numeric group_id is reserved for generated group_no")
128
131
  ```
129
-
130
- **规则**: 创建命名群时,群 ID 不能为纯数字。纯数字的 ID 只能由系统自动分配,以免冲突。
131
-
132
- ## 验证效果
133
-
134
- 客户端校验成功拦截以下非法格式:
135
- - `__system__` → `ValidationError: Invalid aid '__system__': must be in format '{name}.{issuer}'`
136
- - `bob.aid.pub` → `ValidationError: Invalid aid 'bob.aid.pub': name 'bob' must be 4-64 characters`
137
- - `g-1` → `ValidationError: Invalid group_id 'g-1': base 'g-1' must be one of: ...`
138
-
139
- ## 参考
140
-
141
- - Python SDK 实现: `python/src/aun_core/validators.py`
142
- - 服务端格式定义: `extensions/services/group/service.py:53-58`
143
- - 协议文档: `docs/protocol/10-Group-子协议.md`
144
- - SDK 文档: `docs/sdk/03-核心概念.md`
132
+
133
+ **规则**: 创建命名群或自定义群标识时,base 不能为纯数字。纯数字 base 保留给系统自动分配的群号,以免冲突。
134
+
135
+ ## 验证效果
136
+
137
+ 客户端校验成功拦截以下非法格式:
138
+ - `__system__` → `ValidationError: Invalid aid '__system__': must be in format '{name}.{issuer}'`
139
+ - `bob.aid.pub` → `ValidationError: Invalid aid 'bob.aid.pub': name 'bob' must be 4-64 characters`
140
+ - `g-1` → `ValidationError: Invalid group_id 'g-1': base 'g-1' must be one of: ...`
141
+
142
+ ## 参考
143
+
144
+ - Python SDK 实现: `python/src/aun_core/validators.py`
145
+ - 服务端格式定义: `extensions/services/group/service.py:53-58`
146
+ - 协议文档: `docs/protocol/10-Group-子协议.md`
147
+ - SDK 文档: `docs/sdk/03-核心概念.md`