@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,194 +1,194 @@
1
- # AUN SDK 0.4.0 — 设计文档 vs 实际实现对比分析
2
-
3
- **分析日期**:2026-05-30
4
- **SDK 版本**:`@agentunion/fastaun@0.4.0`
5
- **对比基准**:`docs/AUN_SDK_重构设计方案_v3.md`(实际标题 v4.0)
6
-
7
- ---
8
-
9
- ## 一、一致的部分
10
-
11
- | 设计项 | SDK 实现 | 状态 |
12
- |--------|----------|:----:|
13
- | **三主体架构** AIDStore / AID / AUNClient | 全部导出,职责分离 | ✅ |
14
- | **AIDStore 构造** `{ aunPath, encryptionSeed, deviceId?, slotId? }` | 完全一致,额外有 `verifySsl`, `discoveryPort`, `rootCaPath`, `debug` | ✅ |
15
- | **AIDStore.load(aid)** 返回 `Result<{ aid: AID }>` | 一致(同步) | ✅ |
16
- | **AIDStore.register(aid)** 返回 `Promise<Result<{ registered: true }>>` | 一致 | ✅ |
17
- | **AIDStore.list()** 返回 `Result<{ identities: AIDInfo[] }>` | 一致(同步) | ✅ |
18
- | **AIDStore.exists(aid)** 返回 `Promise<Result<{ exists: boolean }>>` | 一致 | ✅ |
19
- | **AIDStore.resolve(aid, opts?)** | 一致,`ResolveOpts` 有 `forceRefresh` + `skipAgentMd` | ✅ |
20
- | **AIDStore.fetchAgentMd / headAgentMd / checkAgentMd / diagnose / renewCert / rekey** | 全部存在 | ✅ |
21
- | **AIDStore.changeSeed(old, new)** | 一致(同步) | ✅ |
22
- | **AID 只读属性** `aid`, `aunPath`, `certPem`, `publicKey`, `certSubject`, `certNotBefore`, `certNotAfter`, `certIssuer`, `certFingerprint` | 全部存在 | ✅ |
23
- | **AID.isCertValid() / isPrivateKeyValid()** | 一致 | ✅ |
24
- | **AID.sign / verify / signAgentMd / verifyAgentMd** 返回 `Result<T>` | 一致 | ✅ |
25
- | **VerifyResult** `{ status, payload, reason? }` | 一致,额外有 `aid?`, `cert_fingerprint?`, `timestamp?` | ✅ |
26
- | **Result\<T\>** 统一格式 `{ ok, data } \| { ok, error: { code, message, cause? } }` | 完全一致 | ✅ |
27
- | **AUNClient 构造** 可选传入 AID | 一致:`constructor(options?)` 或 `constructor(aid, options?)` | ✅ |
28
- | **AUNClient.loadIdentity(aid: AID)** | 一致 | ✅ |
29
- | **AUNClient.authenticate() / connect() / disconnect() / close()** | 全部存在 | ✅ |
30
- | **AUNClient.call(method, params)** | 一致 | ✅ |
31
- | **AUNClient.on / off** | 一致 | ✅ |
32
- | **AUNClient capability getters** `hasIdentity`, `canSign`, `canConnect`, `canSend`, `isReady`, `isOnline`, `isClosed` | 全部存在 | ✅ |
33
- | **AUNClient 重连 getters** `nextRetryAt`, `nextRetryInSeconds`, `retryAttempt`, `retryMaxAttempts`, `lastError`, `lastErrorCode` | 全部存在 | ✅ |
34
- | **AUNClient.setProtectedHeaders / getProtectedHeaders** | 一致 | ✅ |
35
- | **AUNClient.publishAgentMd()** | 存在 | ✅ |
36
- | **AUNClient 对端管理** `lookupPeer`, `getPeer`, `cachePeer`, `peers` | 全部存在 | ✅ |
37
- | **ConnectionState 枚举** 9 个状态 | 全部一致 | ✅ |
38
- | **AUNClient.gatewayHealth** getter | 存在 | ✅ |
39
- | **AUNClient.state / currentAid / aunPath** getters | 存在 | ✅ |
40
-
41
- ---
42
-
43
- ## 二、不一致 / 差异
44
-
45
- ### 2.1 同步 vs 异步
46
-
47
- | # | 方法 | 设计文档 | SDK 实际 | 影响 |
48
- |---|------|---------|---------|------|
49
- | 1 | `AIDStore.load()` | `Promise<Result<...>>` | **同步** `Result<{ aid: AID }>` | 调用方不需要 await |
50
- | 2 | `AIDStore.list()` | `Promise<Result<...>>` | **同步** `Result<{ identities: AIDInfo[] }>` | 同上 |
51
- | 3 | `AIDStore.changeSeed()` | `Promise<Result<...>>` | **同步** `Result<{ changed, count }>` | 同上 |
52
-
53
- **评估**:SDK 实现更优(纯本地操作无需异步),设计文档需更新。
54
-
55
- ---
56
-
57
- ### 2.2 类型精度
58
-
59
- | # | 方法 | 设计文档 | SDK 实际 |
60
- |---|------|---------|---------|
61
- | 4 | `AIDStore.resolve()` | `Promise<Result<ResolveData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
62
- | 5 | `AIDStore.fetchAgentMd()` | `Promise<Result<AgentMdFetchData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
63
- | 6 | `AIDStore.headAgentMd()` | `Promise<Result<AgentMdHeadData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
64
- | 7 | `AIDStore.checkAgentMd()` | `Promise<Result<AgentMdCheckData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
65
- | 8 | `AIDStore.diagnose()` | `Promise<Result<DiagnoseData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
66
- | 9 | `AIDStore.renewCert()` | `Promise<Result<{ renewed, newCertNotAfter }>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
67
- | 10 | `AIDStore.rekey()` | `Promise<Result<{ rekeyed, newFingerprint }>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
68
-
69
- **评估**:运行时数据可能是完整的,但 `.d.ts` 类型定义未细化。可能是:
70
- - 有意为之(避免频繁改类型定义)
71
- - 或 .d.ts 生成时未展开内部类型
72
-
73
- **建议**:确认运行时返回的实际字段是否与设计一致,如果一致则补充 `.d.ts` 类型。
74
-
75
- ---
76
-
77
- ### 2.3 AIDStore 额外内容
78
-
79
- | # | 差异 | 设计文档 | SDK 实际 |
80
- |---|------|---------|---------|
81
- | 11 | 构造参数 | 只有 `aunPath`, `encryptionSeed`, `deviceId?`, `slotId?` | 多了 `verifySsl?`, `discoveryPort?`, `rootCaPath?`, `debug?` |
82
- | 12 | `close()` 方法 | 未提及 | 存在 `close(): void` |
83
-
84
- **评估**:SDK 比设计多了运维/调试参数和资源清理方法,合理扩展。设计文档可补充。
85
-
86
- ---
87
-
88
- ### 2.4 AID 额外属性
89
-
90
- | # | 差异 | 设计文档 | SDK 实际 |
91
- |---|------|---------|---------|
92
- | 13 | `deviceId` / `slotId` | AID 无此属性 | `readonly deviceId: string` / `readonly slotId: string` |
93
-
94
- **评估**:AID 携带创建它的 store 的 deviceId/slotId,便于 AUNClient 使用。合理。
95
-
96
- ---
97
-
98
- ### 2.5 AIDInfo 额外字段
99
-
100
- | # | 差异 | 设计文档 | SDK 实际 |
101
- |---|------|---------|---------|
102
- | 14 | `AIDInfo` 字段 | `{ aid, certNotAfter, certIssuer }` | 多了 `certFingerprint: string` |
103
-
104
- **评估**:有用的额外信息,设计文档可补充。
105
-
106
- ---
107
-
108
- ### 2.6 AUNClient 构造与独立性
109
-
110
- | # | 差异 | 设计文档 | SDK 实际 |
111
- |---|------|---------|---------|
112
- | 15 | 构造签名 | `constructor(aid?: AID)` | `constructor(options?: AUNClientOptions)` 或 `constructor(aid: AID, options?: AUNClientOptions)` |
113
- | 16 | 独立使用 | 设计说配置由 AIDStore 管理,AUNClient 不接受配置 | `AUNClientOptions` 保留了 `aun_path`, `encryption_seed` 等,AUNClient 可独立使用 |
114
- | 17 | `setLocalAgentMdPath` | 设计说已移除 | 实际仍存在 `setLocalAgentMdPath(path): string` |
115
-
116
- **评估**:SDK 保留了向后兼容路径——不强制必须通过 AIDStore 使用 AUNClient。这是务实选择,但与设计文档"AUNClient 只接收 AID"的纯粹设计有偏差。
117
-
118
- ---
119
-
120
- ### 2.7 uploadAgentMd 可见性
121
-
122
- | # | 差异 | 设计文档 | SDK 实际 |
123
- |---|------|---------|---------|
124
- | 18 | `uploadAgentMd` | 公开方法,在 AUNClient 上 | **私有** `_uploadAgentMd`,仅 `publishAgentMd()` 公开 |
125
-
126
- **评估**:SDK 简化了公开 API——`publishAgentMd` 内部自动签名+上传,不再暴露裸上传。设计文档需更新。
127
-
128
- ---
129
-
130
- ### 2.8 authenticate 状态约束
131
-
132
- | # | 差异 | 设计文档 | SDK 实际 |
133
- |---|------|---------|---------|
134
- | 19 | `authenticate()` 可调状态 | 仅 Standby | Standby **和** Authenticated 都可调 |
135
-
136
- **评估**:SDK 允许在 Authenticated 状态重新认证(刷新 token),比设计宽松。合理。
137
-
138
- ---
139
-
140
- ### 2.9 connect() 参数
141
-
142
- | # | 差异 | 设计文档 | SDK 实际 |
143
- |---|------|---------|---------|
144
- | 20 | `connect()` 参数 | `{ gateway? }` | `connect(options?: RpcParams)` 接受任意 RPC 参数 |
145
-
146
- **评估**:更灵活,`gateway` 只是其中一个可选字段。
147
-
148
- ---
149
-
150
- ### 2.10 ConnectionState 命名风格
151
-
152
- | # | 差异 | 设计文档 | SDK 实际 |
153
- |---|------|---------|---------|
154
- | 21 | 枚举值命名 | kebab-case: `'no-identity'`, `'retry-backoff'` | snake_case: `'no_identity'`, `'retry_backoff'` |
155
-
156
- **评估**:设计文档需更新为 snake_case。
157
-
158
- ---
159
-
160
- ### 2.11 ResolveOpts 缺少 timeout
161
-
162
- | # | 差异 | 设计文档 | SDK 实际 |
163
- |---|------|---------|---------|
164
- | 22 | `ResolveOpts.timeout` | 有,默认 10000ms | 不存在,只有 `forceRefresh?` 和 `skipAgentMd?` |
165
-
166
- **评估**:SDK 未实现 timeout 参数。可能内部有默认超时,或后续版本补充。
167
-
168
- ---
169
-
170
- ## 三、总结
171
-
172
- ### 核心设计一致性:高
173
-
174
- 三主体架构、Result 统一错误处理、AID 不可变值对象、AUNClient 状态机、capability getters——这些核心设计全部落地,且实现质量高。
175
-
176
- ### 主要偏差分类
177
-
178
- | 类别 | 数量 | 严重程度 | 建议 |
179
- |------|:----:|:--------:|------|
180
- | 同步 vs 异步(设计写 Promise,实际同步) | 3 | 低 | 更新设计文档 |
181
- | 类型定义未细化(`Record<string, unknown>`) | 7 | 中 | 确认运行时字段,补充 .d.ts |
182
- | SDK 比设计多内容(额外参数/属性/方法) | 6 | 低 | 更新设计文档 |
183
- | AUNClient 独立性保留(未强制依赖 AIDStore) | 2 | 中 | 决策:是否在后续版本收紧 |
184
- | uploadAgentMd 变私有 | 1 | 低 | 更新设计文档 |
185
- | 命名风格(kebab vs snake) | 1 | 低 | 更新设计文档 |
186
- | ResolveOpts 缺 timeout | 1 | 低 | 后续版本补充或设计文档删除 |
187
-
188
- ### 建议优先级
189
-
190
- 1. **P0**:确认 `resolve` / `fetchAgentMd` 等方法运行时返回的实际字段,决定是否补充强类型
191
- 2. **P1**:更新设计文档中 `load()` / `list()` / `changeSeed()` 为同步签名
192
- 3. **P1**:更新 ConnectionState 枚举命名为 snake_case
193
- 4. **P2**:决定 AUNClient 独立使用路径是否保留(当前保留是合理的兼容策略)
194
- 5. **P2**:补充设计文档中缺失的 `AIDStore.close()`、额外构造参数、AID.deviceId/slotId
1
+ # AUN SDK 0.4.0 — 设计文档 vs 实际实现对比分析
2
+
3
+ **分析日期**:2026-05-30
4
+ **SDK 版本**:`@agentunion/fastaun@0.4.0`
5
+ **对比基准**:`docs/AUN_SDK_重构设计方案_v3.md`(实际标题 v4.0)
6
+
7
+ ---
8
+
9
+ ## 一、一致的部分
10
+
11
+ | 设计项 | SDK 实现 | 状态 |
12
+ |--------|----------|:----:|
13
+ | **三主体架构** AIDStore / AID / AUNClient | 全部导出,职责分离 | ✅ |
14
+ | **AIDStore 构造** `{ aunPath, encryptionSeed, deviceId?, slotId? }` | 完全一致,额外有 `verifySsl`, `discoveryPort`, `rootCaPath`, `debug` | ✅ |
15
+ | **AIDStore.load(aid)** 返回 `Result<{ aid: AID }>` | 一致(同步) | ✅ |
16
+ | **AIDStore.register(aid)** 返回 `Promise<Result<{ registered: true }>>` | 一致 | ✅ |
17
+ | **AIDStore.list()** 返回 `Result<{ identities: AIDInfo[] }>` | 一致(同步) | ✅ |
18
+ | **AIDStore.exists(aid)** 返回 `Promise<Result<{ exists: boolean }>>` | 一致 | ✅ |
19
+ | **AIDStore.resolve(aid, opts?)** | 一致,`ResolveOpts` 有 `forceRefresh` + `skipAgentMd` | ✅ |
20
+ | **AIDStore.fetchAgentMd / headAgentMd / checkAgentMd / diagnose / renewCert / rekey** | 全部存在 | ✅ |
21
+ | **AIDStore.changeSeed(old, new)** | 一致(同步) | ✅ |
22
+ | **AID 只读属性** `aid`, `aunPath`, `certPem`, `publicKey`, `certSubject`, `certNotBefore`, `certNotAfter`, `certIssuer`, `certFingerprint` | 全部存在 | ✅ |
23
+ | **AID.isCertValid() / isPrivateKeyValid()** | 一致 | ✅ |
24
+ | **AID.sign / verify / signAgentMd / verifyAgentMd** 返回 `Result<T>` | 一致 | ✅ |
25
+ | **VerifyResult** `{ status, payload, reason? }` | 一致,额外有 `aid?`, `cert_fingerprint?`, `timestamp?` | ✅ |
26
+ | **Result\<T\>** 统一格式 `{ ok, data } \| { ok, error: { code, message, cause? } }` | 完全一致 | ✅ |
27
+ | **AUNClient 构造** 可选传入 AID | 一致:`constructor(options?)` 或 `constructor(aid, options?)` | ✅ |
28
+ | **AUNClient.loadIdentity(aid: AID)** | 一致 | ✅ |
29
+ | **AUNClient.authenticate() / connect() / disconnect() / close()** | 全部存在 | ✅ |
30
+ | **AUNClient.call(method, params)** | 一致 | ✅ |
31
+ | **AUNClient.on / off** | 一致 | ✅ |
32
+ | **AUNClient capability getters** `hasIdentity`, `canSign`, `canConnect`, `canSend`, `isReady`, `isOnline`, `isClosed` | 全部存在 | ✅ |
33
+ | **AUNClient 重连 getters** `nextRetryAt`, `nextRetryInSeconds`, `retryAttempt`, `retryMaxAttempts`, `lastError`, `lastErrorCode` | 全部存在 | ✅ |
34
+ | **AUNClient.setProtectedHeaders / getProtectedHeaders** | 一致 | ✅ |
35
+ | **AUNClient.publishAgentMd()** | 存在 | ✅ |
36
+ | **AUNClient 对端管理** `lookupPeer`, `getPeer`, `cachePeer`, `peers` | 全部存在 | ✅ |
37
+ | **ConnectionState 枚举** 9 个状态 | 全部一致 | ✅ |
38
+ | **AUNClient.gatewayHealth** getter | 存在 | ✅ |
39
+ | **AUNClient.state / currentAid / aunPath** getters | 存在 | ✅ |
40
+
41
+ ---
42
+
43
+ ## 二、不一致 / 差异
44
+
45
+ ### 2.1 同步 vs 异步
46
+
47
+ | # | 方法 | 设计文档 | SDK 实际 | 影响 |
48
+ |---|------|---------|---------|------|
49
+ | 1 | `AIDStore.load()` | `Promise<Result<...>>` | **同步** `Result<{ aid: AID }>` | 调用方不需要 await |
50
+ | 2 | `AIDStore.list()` | `Promise<Result<...>>` | **同步** `Result<{ identities: AIDInfo[] }>` | 同上 |
51
+ | 3 | `AIDStore.changeSeed()` | `Promise<Result<...>>` | **同步** `Result<{ changed, count }>` | 同上 |
52
+
53
+ **评估**:SDK 实现更优(纯本地操作无需异步),设计文档需更新。
54
+
55
+ ---
56
+
57
+ ### 2.2 类型精度
58
+
59
+ | # | 方法 | 设计文档 | SDK 实际 |
60
+ |---|------|---------|---------|
61
+ | 4 | `AIDStore.resolve()` | `Promise<Result<ResolveData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
62
+ | 5 | `AIDStore.fetchAgentMd()` | `Promise<Result<AgentMdFetchData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
63
+ | 6 | `AIDStore.headAgentMd()` | `Promise<Result<AgentMdHeadData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
64
+ | 7 | `AIDStore.checkAgentMd()` | `Promise<Result<AgentMdCheckData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
65
+ | 8 | `AIDStore.diagnose()` | `Promise<Result<DiagnoseData>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
66
+ | 9 | `AIDStore.renewCert()` | `Promise<Result<{ renewed, newCertNotAfter }>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
67
+ | 10 | `AIDStore.rekey()` | `Promise<Result<{ rekeyed, newFingerprint }>>`(强类型) | `Promise<Result<Record<string, unknown>>>` |
68
+
69
+ **评估**:运行时数据可能是完整的,但 `.d.ts` 类型定义未细化。可能是:
70
+ - 有意为之(避免频繁改类型定义)
71
+ - 或 .d.ts 生成时未展开内部类型
72
+
73
+ **建议**:确认运行时返回的实际字段是否与设计一致,如果一致则补充 `.d.ts` 类型。
74
+
75
+ ---
76
+
77
+ ### 2.3 AIDStore 额外内容
78
+
79
+ | # | 差异 | 设计文档 | SDK 实际 |
80
+ |---|------|---------|---------|
81
+ | 11 | 构造参数 | 只有 `aunPath`, `encryptionSeed`, `deviceId?`, `slotId?` | 多了 `verifySsl?`, `discoveryPort?`, `rootCaPath?`, `debug?` |
82
+ | 12 | `close()` 方法 | 未提及 | 存在 `close(): void` |
83
+
84
+ **评估**:SDK 比设计多了运维/调试参数和资源清理方法,合理扩展。设计文档可补充。
85
+
86
+ ---
87
+
88
+ ### 2.4 AID 额外属性
89
+
90
+ | # | 差异 | 设计文档 | SDK 实际 |
91
+ |---|------|---------|---------|
92
+ | 13 | `deviceId` / `slotId` | AID 无此属性 | `readonly deviceId: string` / `readonly slotId: string` |
93
+
94
+ **评估**:AID 携带创建它的 store 的 deviceId/slotId,便于 AUNClient 使用。合理。
95
+
96
+ ---
97
+
98
+ ### 2.5 AIDInfo 额外字段
99
+
100
+ | # | 差异 | 设计文档 | SDK 实际 |
101
+ |---|------|---------|---------|
102
+ | 14 | `AIDInfo` 字段 | `{ aid, certNotAfter, certIssuer }` | 多了 `certFingerprint: string` |
103
+
104
+ **评估**:有用的额外信息,设计文档可补充。
105
+
106
+ ---
107
+
108
+ ### 2.6 AUNClient 构造与独立性
109
+
110
+ | # | 差异 | 设计文档 | SDK 实际 |
111
+ |---|------|---------|---------|
112
+ | 15 | 构造签名 | `constructor(aid?: AID)` | `constructor(options?: AUNClientOptions)` 或 `constructor(aid: AID, options?: AUNClientOptions)` |
113
+ | 16 | 独立使用 | 设计说配置由 AIDStore 管理,AUNClient 不接受配置 | `AUNClientOptions` 保留了 `aun_path`, `encryption_seed` 等,AUNClient 可独立使用 |
114
+ | 17 | `setLocalAgentMdPath` | 设计说已移除 | 实际仍存在 `setLocalAgentMdPath(path): string` |
115
+
116
+ **评估**:SDK 保留了向后兼容路径——不强制必须通过 AIDStore 使用 AUNClient。这是务实选择,但与设计文档"AUNClient 只接收 AID"的纯粹设计有偏差。
117
+
118
+ ---
119
+
120
+ ### 2.7 uploadAgentMd 可见性
121
+
122
+ | # | 差异 | 设计文档 | SDK 实际 |
123
+ |---|------|---------|---------|
124
+ | 18 | `uploadAgentMd` | 公开方法,在 AUNClient 上 | **私有** `_uploadAgentMd`,仅 `publishAgentMd()` 公开 |
125
+
126
+ **评估**:SDK 简化了公开 API——`publishAgentMd` 内部自动签名+上传,不再暴露裸上传。设计文档需更新。
127
+
128
+ ---
129
+
130
+ ### 2.8 authenticate 状态约束
131
+
132
+ | # | 差异 | 设计文档 | SDK 实际 |
133
+ |---|------|---------|---------|
134
+ | 19 | `authenticate()` 可调状态 | 仅 Standby | Standby **和** Authenticated 都可调 |
135
+
136
+ **评估**:SDK 允许在 Authenticated 状态重新认证(刷新 token),比设计宽松。合理。
137
+
138
+ ---
139
+
140
+ ### 2.9 connect() 参数
141
+
142
+ | # | 差异 | 设计文档 | SDK 实际 |
143
+ |---|------|---------|---------|
144
+ | 20 | `connect()` 参数 | `{ gateway? }` | `connect(options?: RpcParams)` 接受任意 RPC 参数 |
145
+
146
+ **评估**:更灵活,`gateway` 只是其中一个可选字段。
147
+
148
+ ---
149
+
150
+ ### 2.10 ConnectionState 命名风格
151
+
152
+ | # | 差异 | 设计文档 | SDK 实际 |
153
+ |---|------|---------|---------|
154
+ | 21 | 枚举值命名 | kebab-case: `'no-identity'`, `'retry-backoff'` | snake_case: `'no_identity'`, `'retry_backoff'` |
155
+
156
+ **评估**:设计文档需更新为 snake_case。
157
+
158
+ ---
159
+
160
+ ### 2.11 ResolveOpts 缺少 timeout
161
+
162
+ | # | 差异 | 设计文档 | SDK 实际 |
163
+ |---|------|---------|---------|
164
+ | 22 | `ResolveOpts.timeout` | 有,默认 10000ms | 不存在,只有 `forceRefresh?` 和 `skipAgentMd?` |
165
+
166
+ **评估**:SDK 未实现 timeout 参数。可能内部有默认超时,或后续版本补充。
167
+
168
+ ---
169
+
170
+ ## 三、总结
171
+
172
+ ### 核心设计一致性:高
173
+
174
+ 三主体架构、Result 统一错误处理、AID 不可变值对象、AUNClient 状态机、capability getters——这些核心设计全部落地,且实现质量高。
175
+
176
+ ### 主要偏差分类
177
+
178
+ | 类别 | 数量 | 严重程度 | 建议 |
179
+ |------|:----:|:--------:|------|
180
+ | 同步 vs 异步(设计写 Promise,实际同步) | 3 | 低 | 更新设计文档 |
181
+ | 类型定义未细化(`Record<string, unknown>`) | 7 | 中 | 确认运行时字段,补充 .d.ts |
182
+ | SDK 比设计多内容(额外参数/属性/方法) | 6 | 低 | 更新设计文档 |
183
+ | AUNClient 独立性保留(未强制依赖 AIDStore) | 2 | 中 | 决策:是否在后续版本收紧 |
184
+ | uploadAgentMd 变私有 | 1 | 低 | 更新设计文档 |
185
+ | 命名风格(kebab vs snake) | 1 | 低 | 更新设计文档 |
186
+ | ResolveOpts 缺 timeout | 1 | 低 | 后续版本补充或设计文档删除 |
187
+
188
+ ### 建议优先级
189
+
190
+ 1. **P0**:确认 `resolve` / `fetchAgentMd` 等方法运行时返回的实际字段,决定是否补充强类型
191
+ 2. **P1**:更新设计文档中 `load()` / `list()` / `changeSeed()` 为同步签名
192
+ 3. **P1**:更新 ConnectionState 枚举命名为 snake_case
193
+ 4. **P2**:决定 AUNClient 独立使用路径是否保留(当前保留是合理的兼容策略)
194
+ 5. **P2**:补充设计文档中缺失的 `AIDStore.close()`、额外构造参数、AID.deviceId/slotId