@agentunion/fastaun-browser 0.4.3 → 0.4.4

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 (45) hide show
  1. package/CHANGELOG.md +190 -178
  2. package/_packed_docs/AUN_SDK_0.4.0_/350/256/276/350/256/241/345/257/271/346/257/224/345/210/206/346/236/220.md +194 -194
  3. package/_packed_docs/AUN_SDK_/351/207/215/346/236/204/345/256/236/346/226/275/350/256/241/345/210/222.md +596 -596
  4. package/_packed_docs/AUN_SDK_/351/207/215/346/236/204/350/256/276/350/256/241/346/226/271/346/241/210_v3.md +1698 -1697
  5. package/_packed_docs/CHANGELOG.md +190 -178
  6. package/_packed_docs/INDEX.md +17 -17
  7. package/_packed_docs/KITE_DOCS_GUIDE.md +11 -11
  8. package/_packed_docs/agent.md/SCHEMA.md +49 -49
  9. package/_packed_docs/agent.md/examples/signed-openclaw-lobster.md +22 -22
  10. 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 +327 -327
  11. package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +686 -686
  12. package/_packed_docs/design/2026-05-22-aun-rpc-trace-enhancement.md +542 -542
  13. package/_packed_docs/design/E2EE_V2/347/256/200/345/214/226/344/270/2721DH/345/212/240Per-AID_Wrap/346/226/271/346/241/210.md +124 -124
  14. package/_packed_docs/design//350/267/250/350/257/255/350/250/200/345/256/271/345/231/250E2E/346/265/213/350/257/225/346/226/271/346/241/210.md +665 -665
  15. 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 +2 -2
  16. package/_packed_docs/protocol/14-/344/272/244/344/272/222/346/234/272/345/210/266-/345/223/215/345/272/224/346/250/241/345/274/217/344/270/216/350/207/252/344/270/273/346/250/241/345/274/217.md +170 -170
  17. 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 +419 -419
  18. package/_packed_docs/protocol/README.md +1 -1
  19. package/_packed_docs/protocol/aun-docs-guide.md +1 -1
  20. package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +15 -15
  21. package/_packed_docs/protocol//351/231/204/345/275/225B-/346/211/251/345/261/225/346/200/247/346/214/207/345/215/227.md +4 -4
  22. package/_packed_docs/protocol//351/231/204/345/275/225J-/345/256/242/346/210/267/347/253/257/346/216/245/345/205/245/347/244/272/344/276/213.md +98 -98
  23. package/_packed_docs/protocol//351/231/204/345/275/225M-JWT/350/256/244/350/257/201/345/256/236/347/216/260/346/214/207/345/215/227.md +46 -46
  24. package/_packed_docs/protocol//351/231/204/345/275/225N-/345/210/206/345/270/203/345/274/217Trace/345/215/217/350/256/256.md +257 -257
  25. package/_packed_docs/python-sdk-v2-only-changelog.md +189 -189
  26. package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +1 -1
  27. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +1 -1
  28. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +1 -0
  29. package/_packed_docs/sdk/09-payload-reference.md +13 -13
  30. 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 +171 -171
  31. package/dist/aid.d.ts +2 -1
  32. package/dist/aid.d.ts.map +1 -1
  33. package/dist/aid.js +7 -6
  34. package/dist/aid.js.map +1 -1
  35. package/dist/auth.d.ts.map +1 -1
  36. package/dist/auth.js +4 -0
  37. package/dist/auth.js.map +1 -1
  38. package/dist/bundle.js +237 -149
  39. package/dist/client.d.ts +7 -1
  40. package/dist/client.d.ts.map +1 -1
  41. package/dist/client.js +238 -153
  42. package/dist/client.js.map +1 -1
  43. package/dist/version.d.ts +1 -1
  44. package/dist/version.js +1 -1
  45. package/package.json +1 -1
@@ -1,124 +1,124 @@
1
- # E2EE V2 简化为 1DH + Per-AID Wrap 方案
2
-
3
- > 状态:执行方案
4
- > 目标:新消息优先使用服务端控制的 `1DH + per-AID wrap`,同时兼容旧 SDK、旧服务端和历史消息。
5
-
6
- ## 1. 最终协议边界
7
-
8
- - `e2ee_wrap_policy` 只出现在 `message.v2.bootstrap` / `group.v2.bootstrap` 返回值中。
9
- - policy 不写入 envelope,不新增 AAD 字段,不新增 `wrap_scope` / `wrap_policy_version`。
10
- - 现有 AAD 里的 `wrap_protocol` 仍由实际 recipient rows 推导;1DH/per-AID 时自然为 `1DH`。
11
- - recipient row schema 不变,仍是 8 字段:
12
- `[aid, device_id, role, key_source, ik_fp, spk_id, wrap_nonce, wrapped_key]`
13
- - per-AID row 通过 `device_id == ""` 区分:
14
- `[aid, "", role, "aid_master", ik_fp, "", wrap_nonce, wrapped_key]`
15
- - per-device 旧 row 格式不变,历史消息继续按原逻辑解密。
16
-
17
- ## 2. Bootstrap Policy
18
-
19
- 新 SDK 在 bootstrap 请求中声明能力,旧 SDK 不传该参数:
20
-
21
- ```json
22
- {
23
- "e2ee_wrap_capabilities": {
24
- "version": "v2.1",
25
- "protocols": ["1DH", "3DH"],
26
- "scopes": ["aid", "device"],
27
- "per_aid_wrap": true,
28
- "per_device_wrap": true
29
- }
30
- }
31
- ```
32
-
33
- 服务端返回实际生效 policy:
34
-
35
- ```json
36
- {
37
- "e2ee_wrap_policy": {
38
- "version": "v2.1",
39
- "protocol": "1DH",
40
- "scope": "aid",
41
- "per_aid_wrap": true,
42
- "per_device_wrap": false,
43
- "source": "server_default"
44
- }
45
- }
46
- ```
47
-
48
- SDK 行为:
49
-
50
- - SDK 只能声明能力,不能强制选择 policy;实际 `1DH/3DH`、`aid/device` 由服务端返回的 `e2ee_wrap_policy` 决定。
51
- - 旧 SDK / 未声明能力的 bootstrap:服务端返回 legacy `3DH + per-device`,并保留 SPK 字段,避免新发送端生成老解密端不支持的 `device_id=""` row。
52
- - policy 缺失:保持旧行为,继续按 bootstrap devices 生成 per-device wrap。
53
- - `protocol=1DH`:忽略 SPK,清空 `spk_id`,使用 AID IK 做 1DH。
54
- - `scope=aid`:按 `(aid, role)` 折叠 target,生成 `device_id=""` 的 row。
55
- - `scope=aid` 强制 `protocol=1DH`;不支持 `3DH + per-AID`。
56
-
57
- 服务端只在调用方显式声明支持 per-AID wrap 后才可能返回 `scope=aid`。在 1DH 策略下服务端也会从 bootstrap 返回中剥掉 SPK 字段,让新 SDK 即使只按设备条目本身判断,也会自然退到 1DH。
58
-
59
- ## 3. 服务端投递语义
60
-
61
- 服务端能区分 per-device / per-AID:
62
-
63
- - `row[1] != ""`:per-device wrap,直接投递给该 device。
64
- - `row[1] == ""`:per-AID wrap,服务端查当前应投递的实际 device 列表并 fanout。
65
-
66
- 投递账本不变:
67
-
68
- - P2P 仍写 `v2_peer_wraps(owner_aid, owner_device_id, seq, ...)`。
69
- - Group 仍写 `v2_group_wraps(group_id, owner_aid, owner_device_id, seq, ...)`。
70
- - push、pull、ack、seq tracker、GC 仍按真实 device 执行。
71
-
72
- 关键兼容点:
73
-
74
- - DB 新增 `recipient_row_json` 保存 sender 原始 row。
75
- - aid-wide row fanout 时,`owner_device_id` 写真实 device,但 `recipient_row_json` 保留 `device_id=""`。
76
- - pull 重建 envelope 时优先使用 `recipient_row_json` 生成 `envelope.recipient`。
77
- - Merkle proof 和 `recipients_digest` 始终基于 sender 原始 recipients 数组,不能把 `recipient.device_id` 改成真实 device,否则 proof 会失败。
78
-
79
- ## 4. SDK 修改范围
80
-
81
- 只改发送端 target 构造和解密 row 匹配:
82
-
83
- - Python:`python/src/aun_core/client.py`
84
- - TypeScript:`ts/src/client.ts`
85
- - JavaScript:`js/src/client.ts`
86
- - Go:`go/v2_p2p.go`、`go/v2_group.go`、`go/v2_thought.go`
87
- - C++:`D:/modelunion/ACP-APP/aun-so/core/src/client/aun_client.cpp`
88
-
89
- 不改各语言 e2ee `EncryptOptions`,不把 policy 传入纯加密层,不改 AAD。
90
-
91
- 解密端仅补 full-envelope/thought 场景的匹配:
92
-
93
- ```text
94
- row[0] == self_aid AND (row[1] == self_device_id OR row[1] == "")
95
- ```
96
-
97
- per-device pull envelope 中,`recipient.device_id=""` 直接按 1DH 解密。
98
-
99
- ## 5. 执行计划
100
-
101
- 1. 服务端 P2P
102
- - `message.v2.bootstrap` 读取 `e2ee_wrap_capabilities`,未声明时返回 legacy `3DH/device`。
103
- - 显式支持 per-AID 时返回服务端配置决定的 `e2ee_wrap_policy`。
104
- - 1DH policy 下剥离 `peer_devices/self_devices/audit_recipients` 的 SPK 字段。
105
- - `_rpc_send_v2_p2p` 接受 `device_id=""` row,并 fanout 到当前 active devices。
106
- - `v2_peer_wraps` 增加 `recipient_row_json`,pull 时用原始 row 重建 recipient。
107
-
108
- 2. 服务端 Group
109
- - `group.v2.bootstrap` 读取 `e2ee_wrap_capabilities`,未声明时返回 legacy `3DH/device`。
110
- - 显式支持 per-AID 时返回服务端配置决定的 `e2ee_wrap_policy`,不再由 join_mode 隐式决定。
111
- - `_rpc_v2_send` 接受 per-AID row,按 AID fanout 到群成员实际 devices。
112
- - `v2_group_wraps` 增加 `recipient_row_json`,pull 时用原始 row 重建 recipient。
113
-
114
- 3. SDK
115
- - 五个 SDK 调 `message.v2.bootstrap` / `group.v2.bootstrap` 时声明 `e2ee_wrap_capabilities`。
116
- - 五个 SDK 缓存 bootstrap 时同时缓存 policy。
117
- - envelope 构造前按 policy 转换 targets。
118
- - 解密端补 `device_id=""` 匹配。
119
-
120
- 4. 验证
121
- - Python/服务端文件做语法检查。
122
- - Go 跑相关 package 测试。
123
- - TS/JS 跑类型检查或最小编译检查。
124
- - 用 1DH/per-AID 构造 P2P 和 Group envelope,验证 row 格式、AAD 无新增字段、解密成功。
1
+ # E2EE V2 简化为 1DH + Per-AID Wrap 方案
2
+
3
+ > 状态:执行方案
4
+ > 目标:新消息优先使用服务端控制的 `1DH + per-AID wrap`,同时兼容旧 SDK、旧服务端和历史消息。
5
+
6
+ ## 1. 最终协议边界
7
+
8
+ - `e2ee_wrap_policy` 只出现在 `message.v2.bootstrap` / `group.v2.bootstrap` 返回值中。
9
+ - policy 不写入 envelope,不新增 AAD 字段,不新增 `wrap_scope` / `wrap_policy_version`。
10
+ - 现有 AAD 里的 `wrap_protocol` 仍由实际 recipient rows 推导;1DH/per-AID 时自然为 `1DH`。
11
+ - recipient row schema 不变,仍是 8 字段:
12
+ `[aid, device_id, role, key_source, ik_fp, spk_id, wrap_nonce, wrapped_key]`
13
+ - per-AID row 通过 `device_id == ""` 区分:
14
+ `[aid, "", role, "aid_master", ik_fp, "", wrap_nonce, wrapped_key]`
15
+ - per-device 旧 row 格式不变,历史消息继续按原逻辑解密。
16
+
17
+ ## 2. Bootstrap Policy
18
+
19
+ 新 SDK 在 bootstrap 请求中声明能力,旧 SDK 不传该参数:
20
+
21
+ ```json
22
+ {
23
+ "e2ee_wrap_capabilities": {
24
+ "version": "v2.1",
25
+ "protocols": ["1DH", "3DH"],
26
+ "scopes": ["aid", "device"],
27
+ "per_aid_wrap": true,
28
+ "per_device_wrap": true
29
+ }
30
+ }
31
+ ```
32
+
33
+ 服务端返回实际生效 policy:
34
+
35
+ ```json
36
+ {
37
+ "e2ee_wrap_policy": {
38
+ "version": "v2.1",
39
+ "protocol": "1DH",
40
+ "scope": "aid",
41
+ "per_aid_wrap": true,
42
+ "per_device_wrap": false,
43
+ "source": "server_default"
44
+ }
45
+ }
46
+ ```
47
+
48
+ SDK 行为:
49
+
50
+ - SDK 只能声明能力,不能强制选择 policy;实际 `1DH/3DH`、`aid/device` 由服务端返回的 `e2ee_wrap_policy` 决定。
51
+ - 旧 SDK / 未声明能力的 bootstrap:服务端返回 legacy `3DH + per-device`,并保留 SPK 字段,避免新发送端生成老解密端不支持的 `device_id=""` row。
52
+ - policy 缺失:保持旧行为,继续按 bootstrap devices 生成 per-device wrap。
53
+ - `protocol=1DH`:忽略 SPK,清空 `spk_id`,使用 AID IK 做 1DH。
54
+ - `scope=aid`:按 `(aid, role)` 折叠 target,生成 `device_id=""` 的 row。
55
+ - `scope=aid` 强制 `protocol=1DH`;不支持 `3DH + per-AID`。
56
+
57
+ 服务端只在调用方显式声明支持 per-AID wrap 后才可能返回 `scope=aid`。在 1DH 策略下服务端也会从 bootstrap 返回中剥掉 SPK 字段,让新 SDK 即使只按设备条目本身判断,也会自然退到 1DH。
58
+
59
+ ## 3. 服务端投递语义
60
+
61
+ 服务端能区分 per-device / per-AID:
62
+
63
+ - `row[1] != ""`:per-device wrap,直接投递给该 device。
64
+ - `row[1] == ""`:per-AID wrap,服务端查当前应投递的实际 device 列表并 fanout。
65
+
66
+ 投递账本不变:
67
+
68
+ - P2P 仍写 `v2_peer_wraps(owner_aid, owner_device_id, seq, ...)`。
69
+ - Group 仍写 `v2_group_wraps(group_id, owner_aid, owner_device_id, seq, ...)`。
70
+ - push、pull、ack、seq tracker、GC 仍按真实 device 执行。
71
+
72
+ 关键兼容点:
73
+
74
+ - DB 新增 `recipient_row_json` 保存 sender 原始 row。
75
+ - aid-wide row fanout 时,`owner_device_id` 写真实 device,但 `recipient_row_json` 保留 `device_id=""`。
76
+ - pull 重建 envelope 时优先使用 `recipient_row_json` 生成 `envelope.recipient`。
77
+ - Merkle proof 和 `recipients_digest` 始终基于 sender 原始 recipients 数组,不能把 `recipient.device_id` 改成真实 device,否则 proof 会失败。
78
+
79
+ ## 4. SDK 修改范围
80
+
81
+ 只改发送端 target 构造和解密 row 匹配:
82
+
83
+ - Python:`python/src/aun_core/client.py`
84
+ - TypeScript:`ts/src/client.ts`
85
+ - JavaScript:`js/src/client.ts`
86
+ - Go:`go/v2_p2p.go`、`go/v2_group.go`、`go/v2_thought.go`
87
+ - C++:`D:/modelunion/ACP-APP/aun-so/core/src/client/aun_client.cpp`
88
+
89
+ 不改各语言 e2ee `EncryptOptions`,不把 policy 传入纯加密层,不改 AAD。
90
+
91
+ 解密端仅补 full-envelope/thought 场景的匹配:
92
+
93
+ ```text
94
+ row[0] == self_aid AND (row[1] == self_device_id OR row[1] == "")
95
+ ```
96
+
97
+ per-device pull envelope 中,`recipient.device_id=""` 直接按 1DH 解密。
98
+
99
+ ## 5. 执行计划
100
+
101
+ 1. 服务端 P2P
102
+ - `message.v2.bootstrap` 读取 `e2ee_wrap_capabilities`,未声明时返回 legacy `3DH/device`。
103
+ - 显式支持 per-AID 时返回服务端配置决定的 `e2ee_wrap_policy`。
104
+ - 1DH policy 下剥离 `peer_devices/self_devices/audit_recipients` 的 SPK 字段。
105
+ - `_rpc_send_v2_p2p` 接受 `device_id=""` row,并 fanout 到当前 active devices。
106
+ - `v2_peer_wraps` 增加 `recipient_row_json`,pull 时用原始 row 重建 recipient。
107
+
108
+ 2. 服务端 Group
109
+ - `group.v2.bootstrap` 读取 `e2ee_wrap_capabilities`,未声明时返回 legacy `3DH/device`。
110
+ - 显式支持 per-AID 时返回服务端配置决定的 `e2ee_wrap_policy`,不再由 join_mode 隐式决定。
111
+ - `_rpc_v2_send` 接受 per-AID row,按 AID fanout 到群成员实际 devices。
112
+ - `v2_group_wraps` 增加 `recipient_row_json`,pull 时用原始 row 重建 recipient。
113
+
114
+ 3. SDK
115
+ - 五个 SDK 调 `message.v2.bootstrap` / `group.v2.bootstrap` 时声明 `e2ee_wrap_capabilities`。
116
+ - 五个 SDK 缓存 bootstrap 时同时缓存 policy。
117
+ - envelope 构造前按 policy 转换 targets。
118
+ - 解密端补 `device_id=""` 匹配。
119
+
120
+ 4. 验证
121
+ - Python/服务端文件做语法检查。
122
+ - Go 跑相关 package 测试。
123
+ - TS/JS 跑类型检查或最小编译检查。
124
+ - 用 1DH/per-AID 构造 P2P 和 Group envelope,验证 row 格式、AAD 无新增字段、解密成功。