@agentunion/fastaun 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 (114) hide show
  1. package/CHANGELOG.md +561 -472
  2. package/_packed_docs/CHANGELOG-validators.md +147 -0
  3. package/_packed_docs/CHANGELOG.md +561 -472
  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.js +18 -9
  43. package/dist/agent-md.js.map +1 -1
  44. package/dist/client/delivery.d.ts +9 -0
  45. package/dist/client/delivery.js +157 -24
  46. package/dist/client/delivery.js.map +1 -1
  47. package/dist/client/group-state.js +33 -11
  48. package/dist/client/group-state.js.map +1 -1
  49. package/dist/client/rpc-pipeline.d.ts +1 -0
  50. package/dist/client/rpc-pipeline.js +127 -40
  51. package/dist/client/rpc-pipeline.js.map +1 -1
  52. package/dist/client/v2-e2ee.d.ts +6 -1
  53. package/dist/client/v2-e2ee.js +284 -140
  54. package/dist/client/v2-e2ee.js.map +1 -1
  55. package/dist/client.d.ts +8 -1
  56. package/dist/client.js +227 -31
  57. package/dist/client.js.map +1 -1
  58. package/dist/collab/client.d.ts +8 -0
  59. package/dist/collab/client.js +12 -0
  60. package/dist/collab/client.js.map +1 -1
  61. package/dist/errors.d.ts +0 -20
  62. package/dist/errors.js +8 -53
  63. package/dist/errors.js.map +1 -1
  64. package/dist/facades.d.ts +9 -4
  65. package/dist/facades.js +137 -15
  66. package/dist/facades.js.map +1 -1
  67. package/dist/group-fs.d.ts +26 -9
  68. package/dist/group-fs.js +84 -84
  69. package/dist/group-fs.js.map +1 -1
  70. package/dist/group-id.d.ts +9 -12
  71. package/dist/group-id.js +41 -63
  72. package/dist/group-id.js.map +1 -1
  73. package/dist/index.d.ts +4 -2
  74. package/dist/index.js +4 -1
  75. package/dist/index.js.map +1 -1
  76. package/dist/keystore/aid-db.d.ts +1 -0
  77. package/dist/keystore/aid-db.js +37 -37
  78. package/dist/keystore/aid-db.js.map +1 -1
  79. package/dist/keystore/local-identity-store.d.ts +16 -0
  80. package/dist/keystore/local-identity-store.js +190 -18
  81. package/dist/keystore/local-identity-store.js.map +1 -1
  82. package/dist/keystore/local-token-store.d.ts +0 -13
  83. package/dist/keystore/local-token-store.js +0 -105
  84. package/dist/keystore/local-token-store.js.map +1 -1
  85. package/dist/logger.d.ts +2 -0
  86. package/dist/logger.js +4 -0
  87. package/dist/logger.js.map +1 -1
  88. package/dist/storage/lowlevel.d.ts +9 -1
  89. package/dist/storage/lowlevel.js +12 -1
  90. package/dist/storage/lowlevel.js.map +1 -1
  91. package/dist/storage/types.d.ts +0 -1
  92. package/dist/storage/types.js.map +1 -1
  93. package/dist/storage/vfs.d.ts +22 -3
  94. package/dist/storage/vfs.js +89 -54
  95. package/dist/storage/vfs.js.map +1 -1
  96. package/dist/tools/cross-sdk-agent.js +336 -49
  97. package/dist/tools/cross-sdk-agent.js.map +1 -1
  98. package/dist/transport.d.ts +2 -0
  99. package/dist/transport.js +52 -3
  100. package/dist/transport.js.map +1 -1
  101. package/dist/types.d.ts +38 -0
  102. package/dist/v2/session/session.d.ts +2 -0
  103. package/dist/v2/session/session.js +53 -23
  104. package/dist/v2/session/session.js.map +1 -1
  105. package/dist/v2/state/commitment.d.ts +1 -1
  106. package/dist/v2/state/commitment.js +4 -2
  107. package/dist/v2/state/commitment.js.map +1 -1
  108. package/dist/validators.d.ts +32 -0
  109. package/dist/validators.js +128 -0
  110. package/dist/validators.js.map +1 -0
  111. package/dist/version.d.ts +1 -1
  112. package/dist/version.js +1 -1
  113. package/package.json +46 -46
  114. package/_packed_docs/collab-gateway-boundary-test-report.md +0 -164
@@ -1,164 +0,0 @@
1
- # Collab 网关边界与群空间隔离测试报告
2
-
3
- ## 测试目标
4
-
5
- 针对你指出的三层问题:
6
- 1. **Collab 文档语义**:授权 = storage ACL(无发起人特权)
7
- 2. **Gateway 角色白名单**:viewer 不能调用 collab.*,agent 可以
8
- 3. **Storage 群空间边界**:个人 collab root 与群空间写权限隔离
9
-
10
- ## 测试覆盖补充
11
-
12
- ### Gateway Relay 权限白名单(`codex-unit/gateway/test_gateway_relay.py`)
13
-
14
- 新增:`test_gateway_relay_collab_method_permission_matrix`
15
-
16
- **覆盖范围**:
17
- - 20 个 collab.* 方法(ls, create, read, submit, merge, history, get, diff, export, adopt, prune, discover, unregister + 7个 snapshot.*)
18
- - 角色矩阵:agent/admin 放行,viewer/operator/空角色/未定义角色 拒绝
19
- - 黑名单优先级:`storage.collab.*` 对所有角色(包括 admin)一律拒绝
20
- - viewer 保留的只读方法:`*.status`, `launcher.list_modules`, `event.subscribe`
21
-
22
- **测试结果**:✅ 全部通过(27/27)
23
-
24
- ---
25
-
26
- ### Storage Collab 群空间边界(`storage/test_collab_orchestrator.py`)
27
-
28
- 新增 6 个边界测试:
29
-
30
- #### 1. `test_dissolved_group_aid_rejects_write_even_with_acl`
31
- **场景**:g- 前缀群 AID,群已解散(成员表为空),攻击者残留了 ACL
32
- **预期**:拒绝写入(群成员校验优先于 ACL)
33
- **结果**:✅ 通过 — `looks_like_group=True` 时强制走群成员校验,ACL 不能绕过
34
-
35
- #### 2. `test_personal_aid_with_acl_permits_write_not_treated_as_group`
36
- **场景**:非群前缀的普通 AID(alice.aid.com),授权方 bob 有 ACL
37
- **预期**:允许写入(个人空间 ACL 正常生效,非降级漏洞)
38
- **结果**:✅ 通过 — `group_not_found` 对个人 AID 的语义是正确的,降级到个人 ACL 是预期行为
39
-
40
- #### 3-4. `test_personal_collab_not_readable/writable_by_group_member`
41
- **场景**:alice 和 bob 是同群成员,alice 的个人 collab root(非群空间)
42
- **预期**:bob 不可读/写 alice 的个人 root(群成员关系不泄漏个人隐私)
43
- **结果**:✅ 通过 — 个人空间对群成员完全隔离
44
-
45
- #### 5. `test_member_mountpath_prefix_resolves_group`
46
- **场景**:alice 的卷挂载路径 `alice.aid.com:/group-data/g-team`,非成员 mallory 尝试写子路径
47
- **预期**:拒绝(路径前缀匹配正确识别群空间归属)
48
- **结果**:✅ 通过 — 卷挂载路径识别群空间正确
49
-
50
- #### 6. `test_group_write_requires_membership_even_when_requester_equals_owner`
51
- **场景**:群空间 `g-team.aid.com`,非成员但有 ACL,测试 `requester==owner` 短路是否绕过群成员检查
52
- **预期**:拒绝(群成员检查优先于 ACL 短路)
53
- **结果**:✅ 通过 — `_require_group_write` 在 `_assert_write` 前执行,短路不能绕过群边界
54
-
55
- **测试结果**:✅ 全部通过(40/40,新增 6 个)
56
-
57
- ---
58
-
59
- ## 关键发现
60
-
61
- ### 发现 1:Gateway 角色白名单已正确实现
62
-
63
- `relay.py:580-607` 的 `ROLE_PERMISSIONS`:
64
- - **agent** 有 `collab.*`, `storage.*`, `group.*`, `message.*` 等业务方法
65
- - **viewer** 只有 `launcher.list_modules`, `*.health`, `*.status`, `event.*` 等只读方法
66
-
67
- `ws_server.py:9647` 的默认降级:
68
- ```python
69
- role = auth_result.get("role", "viewer")
70
- ```
71
-
72
- **如果 `auth.verify` 返回的 `auth_result` 中缺失 `role` 字段,会降级到 `viewer`,导致 `collab.*` 被拒绝。**
73
-
74
- 但测试证明,`auth/entry.py:1390` 在 AID 认证成功时明确返回:
75
- ```python
76
- return {"success": True, "role": result["role"], "trust_level": "high", "aid": aid, "token": kite_token}
77
- ```
78
-
79
- 且 `auth/verifiers/aid.py:433`:
80
- ```python
81
- "role": self._aid_role_map.get(aid, self._default_role) # _default_role="agent"
82
- ```
83
-
84
- **结论**:正常 AID 登录会拿到 `"agent"` 角色,collab.* 可以正常调用。
85
-
86
- ### 发现 2:群空间边界的安全机制正确实现
87
-
88
- **群空间识别**:
89
- - 前缀判定:`g-`, `g_`, `g.`, `group.` → `looks_like_group=True`
90
- - resolver 判定:调用 `group.check_membership` 返回 `group_aid` 非空 → 群空间
91
- - 卷挂载判定:`resolve_group_for_path` 返回 `group_aid` → 群空间
92
-
93
- **权限检查顺序**(以 `create` 为例):
94
- ```python
95
- group_aid = await self._resolve_group(requester_aid, collab_root) # 1. 识别群空间
96
- await self._require_group_write(requester_aid, group_aid) # 2. 群成员校验
97
- await self._assert_write(requester_aid, owner, path, group_aid=group_aid) # 3. ACL 校验
98
- ```
99
-
100
- **关键安全保证**:
101
- 1. 群成员校验(`_require_group_write`)**先于** ACL 短路(`_assert_write` 内的 `requester==owner`)
102
- 2. `g-` 前缀的 AID 通过 `looks_like_group` 强制走群路径,不会降级为个人空间
103
- 3. 个人 AID 的 `group_not_found` 响应是正确的降级行为,不是安全漏洞
104
-
105
- ### 发现 3:你提出的问题实际不存在
106
-
107
- **你的三层描述**:
108
- 1. collab 文档语义 — ✅ 代码和测试一致,授权 = ACL,无特权
109
- 2. Gateway 角色拦截 — ✅ `viewer` 拒绝、`agent` 放行,白名单正确
110
- 3. 群空间边界 — ✅ 群成员校验优先,ACL 短路不能绕过
111
-
112
- **推测的真实场景**:
113
- - 如果某个 AID 登录后调用 `collab.create` 被拒绝,可能是:
114
- 1. `auth.verify` 返回的 `role` 字段缺失或为 `viewer`
115
- 2. 该 AID 在 `_aid_role_map` 中被显式配置为 `viewer`
116
- 3. Gateway 认证流程中 `auth_result` 未正确传递
117
-
118
- **需要你提供**:
119
- - 具体失败的测试用例或日志
120
- - 被拒绝的 AID 是什么
121
- - Gateway 日志中该 AID 的 `role` 值
122
-
123
- ---
124
-
125
- ## 测试统计
126
-
127
- | 测试套件 | 新增测试 | 总测试数 | 通过率 |
128
- |---------|---------|---------|--------|
129
- | `gateway/test_gateway_relay.py` | 1 | 27 | 100% |
130
- | `storage/test_collab_orchestrator.py` | 6 | 40 | 100% |
131
- | **合计** | **7** | **67** | **100%** |
132
-
133
- ---
134
-
135
- ## 建议
136
-
137
- 1. **如果你确实遇到了 collab.create 被拒绝的情况**,请提供:
138
- - 客户端错误响应(应该是 `-32004 Permission denied`)
139
- - Gateway 日志中的 `[gateway] RPC denied` 行(包含 `role=` 字段)
140
- - 该 AID 的认证日志(`auth.success` 事件中的 `role` 字段)
141
-
142
- 2. **添加端到端诊断测试**:
143
- - 模拟完整的认证 + collab.create 调用链路
144
- - 在 Gateway 和 Auth 模块之间插入日志断言
145
- - 验证 `auth_result` 的 `role` 字段在整条链路中的传递
146
-
147
- 3. **Review `_aid_role_map` 配置**:
148
- - 检查 `auth/entry.py:2804-2807` 的服务 AID 角色映射
149
- - 确认测试环境的 AID 不在 `_aid_role_map` 中被误配为 `viewer`
150
-
151
- ---
152
-
153
- ## 结论
154
-
155
- 测试证明:**Gateway 角色白名单和 Storage 群空间边界的安全机制已正确实现,无真实漏洞。**
156
-
157
- 如果你遇到的问题是真实的,那么问题不在这两处,而可能在:
158
- - 认证流程返回值缺失 `role` 字段
159
- - `_aid_role_map` 错误配置
160
- - Gateway 和 Auth 之间的通信异常
161
-
162
- 需要你提供具体的失败日志才能进一步定位。
163
-
164
-