@agentunion/fastaun-browser 0.4.13 → 0.5.0

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 (175) hide show
  1. package/CHANGELOG.md +480 -386
  2. package/_packed_docs/CHANGELOG.md +480 -386
  3. package/_packed_docs/INDEX.md +111 -53
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +43 -29
  5. package/_packed_docs/agent.md/SCHEMA.md +2 -0
  6. package/_packed_docs/agent.md/examples/codeagent-claudecode.md +2 -0
  7. package/_packed_docs/agent.md/examples/human-developer.md +2 -0
  8. package/_packed_docs/agent.md/examples/openclaw-lobster.md +2 -0
  9. package/_packed_docs/agent.md/examples/signed-openclaw-lobster.md +2 -0
  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 +2 -0
  11. package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +265 -686
  12. package/_packed_docs/collab-gateway-boundary-test-report.md +164 -0
  13. package/_packed_docs/design/2026-05-22-aun-rpc-trace-enhancement.md +2 -0
  14. package/_packed_docs/design/AUNClient/346/213/206/345/210/206/351/207/215/346/236/204/346/211/247/350/241/214/346/226/271/346/241/210.md +2 -0
  15. 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 +2 -0
  16. 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 +2 -0
  17. package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +2 -0
  18. 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 +2 -0
  19. 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 -0
  20. package/_packed_docs/protocol/02-/350/257/201/344/271/246/344/270/216/344/277/241/344/273/273/344/275/223/347/263/273.md +2 -0
  21. package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +2 -0
  22. package/_packed_docs/protocol/04-Peer-/345/255/220/345/215/217/350/256/256.md +2 -0
  23. package/_packed_docs/protocol/05-Relay-/345/255/220/345/215/217/350/256/256.md +2 -0
  24. 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 +2 -0
  25. package/_packed_docs/protocol/08-AUN-E2EE-Group.md +2 -0
  26. package/_packed_docs/protocol/08-AUN-E2EE.md +2 -0
  27. package/_packed_docs/protocol/09-/345/256/211/345/205/250/350/200/203/350/231/221.md +2 -0
  28. package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +28 -85
  29. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +49 -0
  30. package/_packed_docs/protocol/12-Stream-/345/255/220/345/215/217/350/256/256.md +2 -0
  31. package/_packed_docs/protocol/13-Agent/350/241/214/344/270/272/350/247/204/350/214/203.md +2 -0
  32. 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 +2 -0
  33. 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 +2 -0
  34. package/_packed_docs/protocol/README.md +2 -0
  35. package/_packed_docs/protocol/agent.md/SCHEMA.md +2 -0
  36. package/_packed_docs/protocol/agent.md/examples/codeagent-claudecode.md +2 -0
  37. package/_packed_docs/protocol/agent.md/examples/human-developer.md +2 -0
  38. package/_packed_docs/protocol/agent.md/examples/openclaw-lobster.md +2 -0
  39. package/_packed_docs/protocol/aun-docs-guide.md +2 -0
  40. package/_packed_docs/protocol/index.md +3 -1
  41. package/_packed_docs/protocol//350/215/211/346/241/210-agent.md/347/255/276/345/220/215/345/215/217/350/256/256.md +2 -0
  42. 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 +2 -0
  43. package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +2 -0
  44. 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 +2 -0
  45. package/_packed_docs/protocol//351/231/204/345/275/225C-/347/247/201/351/222/245/347/256/241/347/220/206/344/270/216/350/272/253/344/273/275/346/201/242/345/244/215.md +2 -0
  46. package/_packed_docs/protocol//351/231/204/345/275/225D-Root_CA_/346/262/273/347/220/206/346/234/272/345/210/266.md +2 -0
  47. package/_packed_docs/protocol//351/231/204/345/275/225E-Root_CA_/345/207/206/345/205/245/346/265/201/347/250/213.md +2 -0
  48. package/_packed_docs/protocol//351/231/204/345/275/225F-Issuer_CA_/347/224/263/350/257/267/346/265/201/347/250/213.md +2 -0
  49. package/_packed_docs/protocol//351/231/204/345/275/225G-AID_/345/255/244/345/204/277/351/242/204/351/230/262/344/270/216/346/225/221/346/217/264/346/234/272/345/210/266.md +2 -0
  50. package/_packed_docs/protocol//351/231/204/345/275/225H-Identity/346/234/215/345/212/241/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
  51. package/_packed_docs/protocol//351/231/204/345/275/225I-/350/267/250/345/237/237/346/266/210/346/201/257/350/267/257/347/224/261/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
  52. 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 +2 -0
  53. package/_packed_docs/protocol//351/231/204/345/275/225K-Agent_Web/345/217/221/347/216/260/345/215/217/350/256/256.md +2 -0
  54. package/_packed_docs/protocol//351/231/204/345/275/225L-E2EE/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
  55. 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 +2 -0
  56. 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 +2 -0
  57. package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +2 -0
  58. package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +2 -0
  59. package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +2 -0
  60. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +2 -0
  61. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +2 -0
  62. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +283 -267
  63. package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +4 -1
  64. package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +2 -0
  65. package/_packed_docs/sdk/09-collab-rpc-manual.md +550 -0
  66. package/_packed_docs/sdk/09-custody-api-manual.md +2 -0
  67. package/_packed_docs/sdk/09-group-rpc-manual.md +197 -443
  68. package/_packed_docs/sdk/09-message-rpc-manual.md +2 -0
  69. package/_packed_docs/sdk/09-meta-rpc-manual.md +2 -0
  70. package/_packed_docs/sdk/09-payload-reference.md +2 -0
  71. package/_packed_docs/sdk/09-proxy-rpc-manual.md +2 -0
  72. package/_packed_docs/sdk/09-storage-rpc-manual.md +952 -279
  73. package/_packed_docs/sdk/09-stream-rpc-manual.md +2 -0
  74. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +33 -20
  75. 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 +2 -0
  76. package/_packed_docs/sdk/INDEX.md +46 -29
  77. package/_packed_docs/sdk/Notify/351/200/232/347/237/245/346/226/271/346/241/210.md +2 -0
  78. package/_packed_docs/sdk/README.md +17 -15
  79. package/dist/aid-store.d.ts +25 -0
  80. package/dist/aid-store.d.ts.map +1 -1
  81. package/dist/aid-store.js +89 -8
  82. package/dist/aid-store.js.map +1 -1
  83. package/dist/bundle.js +19128 -16784
  84. package/dist/client/delivery.d.ts +2 -0
  85. package/dist/client/delivery.d.ts.map +1 -1
  86. package/dist/client/delivery.js +52 -8
  87. package/dist/client/delivery.js.map +1 -1
  88. package/dist/client/rpc-pipeline.d.ts +1 -0
  89. package/dist/client/rpc-pipeline.d.ts.map +1 -1
  90. package/dist/client/rpc-pipeline.js +70 -33
  91. package/dist/client/rpc-pipeline.js.map +1 -1
  92. package/dist/client.d.ts +31 -0
  93. package/dist/client.d.ts.map +1 -1
  94. package/dist/client.js +282 -20
  95. package/dist/client.js.map +1 -1
  96. package/dist/collab/client.d.ts +39 -0
  97. package/dist/collab/client.d.ts.map +1 -0
  98. package/dist/collab/client.js +124 -0
  99. package/dist/collab/client.js.map +1 -0
  100. package/dist/collab/errors.d.ts +16 -0
  101. package/dist/collab/errors.d.ts.map +1 -0
  102. package/dist/collab/errors.js +60 -0
  103. package/dist/collab/errors.js.map +1 -0
  104. package/dist/collab/index.d.ts +4 -0
  105. package/dist/collab/index.d.ts.map +1 -0
  106. package/dist/collab/index.js +4 -0
  107. package/dist/collab/index.js.map +1 -0
  108. package/dist/collab/types.d.ts +111 -0
  109. package/dist/collab/types.d.ts.map +1 -0
  110. package/dist/collab/types.js +2 -0
  111. package/dist/collab/types.js.map +1 -0
  112. package/dist/crypto.d.ts +6 -0
  113. package/dist/crypto.d.ts.map +1 -1
  114. package/dist/crypto.js +6 -0
  115. package/dist/crypto.js.map +1 -1
  116. package/dist/errors.d.ts.map +1 -1
  117. package/dist/errors.js +16 -1
  118. package/dist/errors.js.map +1 -1
  119. package/dist/facades.d.ts +89 -0
  120. package/dist/facades.d.ts.map +1 -0
  121. package/dist/facades.js +228 -0
  122. package/dist/facades.js.map +1 -0
  123. package/dist/group-fs.d.ts +103 -0
  124. package/dist/group-fs.d.ts.map +1 -0
  125. package/dist/group-fs.js +496 -0
  126. package/dist/group-fs.js.map +1 -0
  127. package/dist/group-resources.d.ts +98 -0
  128. package/dist/group-resources.d.ts.map +1 -0
  129. package/dist/group-resources.js +635 -0
  130. package/dist/group-resources.js.map +1 -0
  131. package/dist/index.d.ts +4 -1
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +6 -0
  134. package/dist/index.js.map +1 -1
  135. package/dist/register-flow.d.ts +1 -0
  136. package/dist/register-flow.d.ts.map +1 -1
  137. package/dist/register-flow.js +3 -0
  138. package/dist/register-flow.js.map +1 -1
  139. package/dist/service-proxy.d.ts +1 -0
  140. package/dist/service-proxy.d.ts.map +1 -1
  141. package/dist/service-proxy.js +15 -3
  142. package/dist/service-proxy.js.map +1 -1
  143. package/dist/storage/errors.d.ts +28 -0
  144. package/dist/storage/errors.d.ts.map +1 -0
  145. package/dist/storage/errors.js +65 -0
  146. package/dist/storage/errors.js.map +1 -0
  147. package/dist/storage/index.d.ts +2 -0
  148. package/dist/storage/index.d.ts.map +1 -0
  149. package/dist/storage/index.js +2 -0
  150. package/dist/storage/index.js.map +1 -0
  151. package/dist/storage/lowlevel.d.ts +314 -0
  152. package/dist/storage/lowlevel.d.ts.map +1 -0
  153. package/dist/storage/lowlevel.js +460 -0
  154. package/dist/storage/lowlevel.js.map +1 -0
  155. package/dist/storage/types.d.ts +59 -0
  156. package/dist/storage/types.d.ts.map +1 -0
  157. package/dist/storage/types.js +113 -0
  158. package/dist/storage/types.js.map +1 -0
  159. package/dist/storage/vfs.d.ts +144 -0
  160. package/dist/storage/vfs.d.ts.map +1 -0
  161. package/dist/storage/vfs.js +403 -0
  162. package/dist/storage/vfs.js.map +1 -0
  163. package/dist/tools/cross-sdk-agent.d.ts +3 -0
  164. package/dist/tools/cross-sdk-agent.d.ts.map +1 -0
  165. package/dist/tools/cross-sdk-agent.js +1089 -0
  166. package/dist/tools/cross-sdk-agent.js.map +1 -0
  167. package/dist/transport.d.ts +3 -0
  168. package/dist/transport.d.ts.map +1 -1
  169. package/dist/transport.js +33 -13
  170. package/dist/transport.js.map +1 -1
  171. package/dist/version.d.ts +1 -1
  172. package/dist/version.d.ts.map +1 -1
  173. package/dist/version.js +1 -1
  174. package/dist/version.js.map +1 -1
  175. package/package.json +44 -44
@@ -1,686 +1,265 @@
1
- # AUN CLI 设计文档
2
-
3
- ## 1. 定位
4
-
5
- AUN CLI 是面向开发者和运维的命令行工具,提供与 AUN 网络交互的完整能力:身份管理、消息收发、群组操作、加密状态检查、故障诊断。
6
-
7
- 核心价值:不写代码即可完成 AUN 协议的全部操作,同时作为 SDK 功能的验证工具和调试入口。
8
-
9
- ## 2. 架构
10
-
11
- ```
12
- ┌─────────────────────────────────────────────┐
13
- aun CLI │
14
- │ ┌─────────┐ ┌─────────┐ ┌──────────────┐ │
15
- │ │ typer │ config │ output fmt │ │
16
- │ │ routing │ │ manager │ │ (table/json) │ │
17
- │ └────┬────┘ └────┬────┘ └──────┬───────┘ │
18
- │ │ │ │ │
19
- │ ┌────▼────────────▼─────────────▼────────┐ │
20
- │ │ SDK Adapter Layer │ │
21
- │ (async sync bridge, session mgmt) │ │
22
- └────────────────┬───────────────────────┘
23
- └───────────────────┼─────────────────────────┘
24
-
25
- ┌───────────────────▼───────────────────────┐
26
- │ aun_core (SDK) │
27
- AUNClient / AuthFlow / E2EE / Groups │
28
- └───────────────────────────────────────────┘
29
- ```
30
-
31
- ### 2.1 关键设计决策
32
-
33
- | 决策 | 选择 | 理由 |
34
- |------|------|------|
35
- | 命令框架 | typer | 类型注解驱动,自动生成 help,比 click 更简洁 |
36
- | 异步桥接 | asyncio.run() 包装 | SDK 全异步,CLI 需要同步入口 |
37
- | 配置格式 | TOML | Python 生态标准,人类可读 |
38
- | 输出格式 | 默认 human-readable,`--json` 切换 | 兼顾交互和脚本管道 |
39
- | 状态持久化 | 复用 SDK 的 aun_path 目录 | 零额外存储概念 |
40
- | 分发方式 | pip + PyInstaller 独立二进制 | 覆盖开发者和终端用户 |
41
-
42
- ### 2.2 目录结构
43
-
44
- ```
45
- aun-sdk-core/python/
46
- ├── src/
47
- │ ├── aun_core/ # 现有 SDK(不动)
48
- │ └── aun_cli/ # CLI 工具
49
- │ ├── __init__.py
50
- │ ├── __main__.py # python -m aun_cli 入口
51
- │ ├── main.py # typer app 定义 + 全局选项
52
- │ ├── adapter.py # SDK 异步桥接 + 会话管理
53
- │ ├── config.py # profile/配置 CRUD
54
- │ ├── output.py # 输出格式化(table/json/plain)
55
- │ └── commands/
56
- │ ├── __init__.py
57
- │ ├── identity.py # register / login / whoami / list
58
- │ ├── message.py # send / pull / listen / ack
59
- │ ├── group.py # create / send / invite / kick / ...
60
- │ ├── storage.py # upload / download / delete
61
- │ ├── keys.py # list / rotate / export / import
62
- │ └── diag.py # doctor / status / ping / trace / logs
63
- └── pyproject.toml # 新增 [project.scripts] aun = "aun_cli.main:app"
64
- ```
65
-
66
- ## 3. 全局选项
67
-
68
- ```
69
- aun [全局选项] <command> [子选项] [参数]
70
-
71
- 全局选项:
72
- --profile, -p TEXT 使用指定 profile(默认 "default")
73
- --gateway, -g URL 覆盖网关地址
74
- --json JSON 格式输出
75
- --debug 启用 debug 日志
76
- --no-color 禁用彩色输出
77
- --timeout, -t INT 操作超时秒数(默认 30)
78
- --version, -V 显示版本
79
- --help, -h 显示帮助
80
- ```
81
-
82
- ## 4. 命令详细设计
83
-
84
- ### 4.1 身份管理 (identity)
85
-
86
- #### `aun register`
87
-
88
- 注册新 AID 并保存到本地 profile。
89
-
90
- ```
91
- aun register <aid> --gateway <url> [--password <seed-password>]
92
-
93
- 示例:
94
- aun register alice@aid.com --gateway wss://gw.aid.com/ws
95
- aun register bob@example.com -g wss://gw.example.com/ws -p work
96
- ```
97
-
98
- 流程:
99
- 1. 生成 P-256 密钥对
100
- 2. 连接网关,调用 `auth.create_aid()`
101
- 3. 保存身份材料到 `~/.aun/profiles/{profile}/AIDs/{aid}/`
102
- 4. 输出注册结果(AID、证书指纹、有效期)
103
-
104
- #### `aun login`
105
-
106
- 登录已有 AID(验证本地密钥可用,刷新 token)。
107
-
108
- ```
109
- aun login [aid]
110
-
111
- 示例:
112
- aun login # 登录当前 profile 的默认 AID
113
- aun login alice@aid.com # 指定 AID
114
- ```
115
-
116
- #### `aun whoami`
117
-
118
- 显示当前身份信息。
119
-
120
- ```
121
- aun whoami
122
-
123
- 输出:
124
- AID: alice@aid.com
125
- Profile: default
126
- Gateway: wss://gw.aid.com/ws
127
- Cert: SHA256:a1b2c3... (expires 2027-01-15)
128
- State: authenticated
129
- Device ID: d8f2...
130
- ```
131
-
132
- #### `aun identity list`
133
-
134
- 列出本地所有身份。
135
-
136
- ```
137
- aun identity list
138
-
139
- 输出:
140
- PROFILE AID GATEWAY STATUS
141
- default alice@aid.com wss://gw.aid.com active
142
- work bot@corp.com wss://gw.corp.com expired
143
- ```
144
-
145
- ### 4.2 消息 (message)
146
-
147
- #### `aun send`
148
-
149
- 发送 P2P 消息。
150
-
151
- ```
152
- aun send <target-aid> <message> [--no-encrypt] [--persist]
153
-
154
- 示例:
155
- aun send bob@aid.com "hello"
156
- aun send bob@aid.com --no-encrypt "plaintext msg"
157
- echo "piped content" | aun send bob@aid.com -
158
- ```
159
-
160
- - 默认 E2EE 加密
161
- - 支持 stdin 管道输入(`-` 表示从 stdin 读取)
162
- - `--persist` 标志控制消息持久化
163
-
164
- #### `aun pull`
165
-
166
- 拉取离线消息。
167
-
168
- ```
169
- aun pull [--from <aid>] [--limit N] [--after-seq N]
170
-
171
- 示例:
172
- aun pull # 拉取所有未读
173
- aun pull --from bob@aid.com # 只拉某人的
174
- aun pull --limit 10 # 最多 10 条
175
- ```
176
-
177
- #### `aun listen`
178
-
179
- 实时监听消息(长连接,类似 tail -f)。
180
-
181
- ```
182
- aun listen [--from <aid>] [--include-group]
183
-
184
- 示例:
185
- aun listen # 监听所有 P2P 消息
186
- aun listen --include-group # 同时监听群消息
187
- aun listen --from bob@aid.com # 只监听某人
188
-
189
- 输出(逐行):
190
- [2026-05-21 14:32:01] bob@aid.com → you: hello
191
- [2026-05-21 14:32:05] group:abc123 carol@aid.com: meeting at 3pm
192
- ```
193
-
194
- Ctrl+C 退出。
195
-
196
- #### `aun ack`
197
-
198
- 确认消息。
199
-
200
- ```
201
- aun ack <sender-aid> --seq <N>
202
- aun ack --all
203
- ```
204
-
205
- ### 4.3 群组 (group)
206
-
207
- #### `aun group create`
208
-
209
- ```
210
- aun group create <name> [--members <aid1,aid2,...>]
211
-
212
- 示例:
213
- aun group create "Project Alpha"
214
- aun group create "Team" --members bob@aid.com,carol@aid.com
215
- ```
216
-
217
- #### `aun group list`
218
-
219
- ```
220
- aun group list
221
-
222
- 输出:
223
- GROUP ID NAME MEMBERS ROLE EPOCH
224
- g:abc123 Project Alpha 5 owner 3
225
- g:def456 Team Chat 3 member 1
226
- ```
227
-
228
- #### `aun group send`
229
-
230
- ```
231
- aun group send <group-id> <message> [--no-encrypt]
232
-
233
- 示例:
234
- aun group send g:abc123 "hello team"
235
- ```
236
-
237
- #### `aun group invite`
238
-
239
- ```
240
- aun group invite <group-id> <aid> [<aid2> ...]
241
-
242
- 示例:
243
- aun group invite g:abc123 dave@aid.com eve@aid.com
244
- ```
245
-
246
- #### `aun group kick`
247
-
248
- ```
249
- aun group kick <group-id> <aid>
250
- ```
251
-
252
- #### `aun group leave`
253
-
254
- ```
255
- aun group leave <group-id>
256
- ```
257
-
258
- #### `aun group dissolve`
259
-
260
- ```
261
- aun group dissolve <group-id>
262
- ```
263
-
264
- #### `aun group members`
265
-
266
- ```
267
- aun group members <group-id>
268
-
269
- 输出:
270
- AID ROLE JOINED
271
- alice@aid.com owner 2026-05-01
272
- bob@aid.com admin 2026-05-02
273
- carol@aid.com member 2026-05-10
274
- ```
275
-
276
- #### `aun group info`
277
-
278
- ```
279
- aun group info <group-id>
280
-
281
- 输出:
282
- Name: Project Alpha
283
- ID: g:abc123
284
- Owner: alice@aid.com
285
- Members: 5
286
- Epoch: 3
287
- E2EE: enabled (V2)
288
- Created: 2026-05-01
289
- ```
290
-
291
- #### `aun group listen`
292
-
293
- ```
294
- aun group listen <group-id>
295
-
296
- 输出(逐行):
297
- [14:32:01] bob@aid.com: let's sync
298
- [14:32:05] carol@aid.com: sounds good
299
- ```
300
-
301
- ### 4.4 存储 (storage)
302
-
303
- #### `aun storage upload`
304
-
305
- ```
306
- aun storage upload <local-path> [--name <remote-name>]
307
-
308
- 示例:
309
- aun storage upload ./report.pdf
310
- aun storage upload ./img.png --name avatar.png
311
- ```
312
-
313
- #### `aun storage download`
314
-
315
- ```
316
- aun storage download <object-id> [--output <path>]
317
- ```
318
-
319
- #### `aun storage delete`
320
-
321
- ```
322
- aun storage delete <object-id>
323
- ```
324
-
325
- ### 4.5 密钥管理 (keys)
326
-
327
- #### `aun keys list`
328
-
329
- ```
330
- aun keys list
331
-
332
- 输出:
333
- TYPE ID/FINGERPRINT CREATED EXPIRES STATUS
334
- IK SHA256:a1b2c3... 2026-05-01 2027-05-01 active
335
- SPK SHA256:d4e5f6... 2026-05-20 2026-06-20 active
336
- SPK SHA256:789abc... 2026-04-20 2026-05-20 expired
337
- ```
338
-
339
- #### `aun keys rotate`
340
-
341
- ```
342
- aun keys rotate [--type spk|ik]
343
-
344
- 示例:
345
- aun keys rotate # 轮换 SPK
346
- aun keys rotate --type ik # 轮换 IK(需确认)
347
- ```
348
-
349
- #### `aun keys export`
350
-
351
- 导出身份(加密打包)。
352
-
353
- ```
354
- aun keys export [aid] --output <path> --password <password>
355
-
356
- 示例:
357
- aun keys export alice@aid.com --output ./alice-backup.aun
358
- ```
359
-
360
- #### `aun keys import`
361
-
362
- 导入身份。
363
-
364
- ```
365
- aun keys import <path> --password <password> [--profile <name>]
366
- ```
367
-
368
- ### 4.6 诊断 (diag)
369
-
370
- #### `aun doctor`
371
-
372
- 一键健康检查。
373
-
374
- ```
375
- aun doctor
376
-
377
- 输出:
378
- ✓ Profile "default" exists
379
- ✓ Identity alice@aid.com found
380
- ✓ Private key intact (P-256)
381
- ✓ Certificate valid (expires 2027-01-15)
382
- ✓ Gateway wss://gw.aid.com reachable (latency: 45ms)
383
- ✓ Authentication successful
384
- ✓ SPK valid (expires 2026-06-20)
385
- ✗ Trust root CA not configured (optional)
386
-
387
- 7/8 checks passed
388
- ```
389
-
390
- #### `aun status`
391
-
392
- 连接状态概览。
393
-
394
- ```
395
- aun status
396
-
397
- 输出:
398
- Gateway: wss://gw.aid.com/ws
399
- Protocol: AUN/1.0
400
- Connection: connected
401
- Latency: 42ms
402
- Session: active (expires in 23h)
403
- ```
404
-
405
- #### `aun ping`
406
-
407
- 验证目标 AID 可达性。
408
-
409
- ```
410
- aun ping <target-aid> [--count N]
411
-
412
- 示例:
413
- aun ping bob@aid.com
414
- aun ping bob@aid.com --count 5
415
-
416
- 输出:
417
- bob@aid.com is reachable (latency: 67ms)
418
- ```
419
-
420
- #### `aun logs`
421
-
422
- 查看本地 SDK 日志。
423
-
424
- ```
425
- aun logs [--tail N] [--follow]
426
-
427
- 示例:
428
- aun logs --tail 50
429
- aun logs --follow # 实时跟踪
430
- ```
431
-
432
- ## 5. 配置系统
433
-
434
- ### 5.1 配置文件
435
-
436
- ```toml
437
- # ~/.aun/cli.toml
438
-
439
- [default]
440
- profile = "default" # 默认 profile
441
- output = "table" # 默认输出格式: table | json | plain
442
- color = true # 彩色输出
443
- timeout = 30 # 默认超时(秒)
444
-
445
- [profiles.default]
446
- aid = "alice@aid.com"
447
- gateway = "wss://gw.aid.com/ws"
448
- aun_path = "~/.aun/profiles/default"
449
-
450
- [profiles.work]
451
- aid = "bot@corp.com"
452
- gateway = "wss://gw.corp.com/ws"
453
- aun_path = "~/.aun/profiles/work"
454
- ```
455
-
456
- ### 5.2 Profile 管理命令
457
-
458
- ```
459
- aun config init # 初始化配置
460
- aun config set <key> <value> # 设置配置项
461
- aun config get <key> # 读取配置项
462
- aun config profile create <name> # 创建 profile
463
- aun config profile delete <name> # 删除 profile
464
- aun config profile switch <name> # 切换默认 profile
465
- ```
466
-
467
- ### 5.3 配置优先级
468
-
469
- ```
470
- 命令行参数 > 环境变量 > cli.toml > 内置默认值
471
- ```
472
-
473
- 环境变量映射:
474
- - `AUN_PROFILE` → `--profile`
475
- - `AUN_GATEWAY` → `--gateway`
476
- - `AUN_DEBUG` → `--debug`
477
- - `AUN_DATA_ROOT` → 覆盖 aun_path
478
-
479
- ## 6. 会话管理
480
-
481
- ### 6.1 短命令模式(默认)
482
-
483
- 每次命令执行:连接 → 认证 → 操作 → 断开。
484
-
485
- 为避免每次都做完整握手,引入 session cache:
486
-
487
- ```
488
- ~/.aun/profiles/{profile}/.session.json
489
- {
490
- "gateway": "wss://gw.aid.com/ws",
491
- "token": "...",
492
- "expires_at": "2026-05-22T14:00:00Z",
493
- "device_id": "d8f2..."
494
- }
495
- ```
496
-
497
- - token 未过期:跳过认证,直接用 token 连接
498
- - token 过期:重新挑战-响应认证,更新 cache
499
-
500
- ### 6.2 长连接模式(listen)
501
-
502
- `aun listen` 和 `aun group listen` 保持 WebSocket 长连接:
503
- - 前台运行,Ctrl+C 优雅退出
504
- - 自动重连(SDK 内置机制)
505
- - 断线时输出提示,重连后继续
506
-
507
- ## 7. 输出格式
508
-
509
- ### 7.1 Human-readable(默认)
510
-
511
- ```
512
- aun group list
513
-
514
- GROUP ID NAME MEMBERS ROLE
515
- g:abc123 Project Alpha 5 owner
516
- g:def456 Team Chat 3 member
517
- ```
518
-
519
- ### 7.2 JSON(`--json`)
520
-
521
- ```json
522
- [
523
- {"group_id": "g:abc123", "name": "Project Alpha", "members": 5, "role": "owner"},
524
- {"group_id": "g:def456", "name": "Team Chat", "members": 3, "role": "member"}
525
- ]
526
- ```
527
-
528
- JSON 模式适合脚本管道:`aun group list --json | jq '.[0].group_id'`
529
-
530
- ## 8. 错误处理
531
-
532
- ### 8.1 退出码
533
-
534
- | 退出码 | 含义 |
535
- |--------|------|
536
- | 0 | 成功 |
537
- | 1 | 通用错误 |
538
- | 2 | 参数错误 |
539
- | 3 | 认证失败 |
540
- | 4 | 连接失败(网关不可达) |
541
- | 5 | 超时 |
542
- | 6 | 权限不足 |
543
- | 7 | 目标不存在(AID/群组) |
544
-
545
- ### 8.2 错误输出
546
-
547
- ```
548
- # 默认模式
549
- Error: Gateway wss://gw.aid.com unreachable (connection refused)
550
- Hint: Check network connectivity or verify gateway URL with `aun config get profiles.default.gateway`
551
-
552
- # JSON 模式
553
- {"error": "connection_failed", "message": "Gateway unreachable", "code": 4}
554
- ```
555
-
556
- ## 9. SDK Adapter Layer
557
-
558
- CLI 与 SDK 之间的桥接层,解决以下问题:
559
-
560
- ### 9.1 异步桥接
561
-
562
- ```python
563
- # adapter.py 核心模式
564
- import asyncio
565
- from aun_core import AUNClient
566
-
567
- def run_async(coro):
568
- """CLI 同步入口调用 SDK 异步方法"""
569
- return asyncio.run(coro)
570
-
571
- class CLISession:
572
- """管理 SDK client 生命周期"""
573
-
574
- def __init__(self, profile: str, gateway: str = None, timeout: int = 30):
575
- self.profile = profile
576
- self.gateway = gateway
577
- self.timeout = timeout
578
-
579
- async def __aenter__(self):
580
- # 加载配置 → 创建 client → 连接/认证
581
- ...
582
- return self.client
583
-
584
- async def __aexit__(self, *exc):
585
- await self.client.close()
586
- ```
587
-
588
- ### 9.2 命令实现模式
589
-
590
- ```python
591
- # commands/message.py 示例模式
592
- @app.command()
593
- def send(target: str, message: str, no_encrypt: bool = False):
594
- async def _send():
595
- async with CLISession(profile) as client:
596
- result = await client.call("message.send", {
597
- "to": target,
598
- "content": {"text": message},
599
- "encrypt": not no_encrypt,
600
- })
601
- return result
602
- result = run_async(_send())
603
- output(result)
604
- ```
605
-
606
- ## 10. 分发策略
607
-
608
- ### 10.1 开发阶段
609
-
610
- ```bash
611
- # 直接运行
612
- python -m aun_cli send bob@aid.com "hello"
613
-
614
- # 或 editable install
615
- pip install -e ".[cli]"
616
- aun send bob@aid.com "hello"
617
- ```
618
-
619
- ### 10.2 正式发布
620
-
621
- **pip 包**(面向 Python 开发者):
622
- ```bash
623
- pip install fastaun[cli]
624
- ```
625
-
626
- **独立二进制**(面向终端用户):
627
- ```bash
628
- # 构建
629
- pyinstaller --onefile src/aun_cli/main.py -n aun --hidden-import aun_core
630
-
631
- # 产出
632
- dist/aun (Linux/Mac)
633
- dist/aun.exe (Windows)
634
- ```
635
-
636
- ### 10.3 pyproject.toml 变更
637
-
638
- ```toml
639
- [project.optional-dependencies]
640
- cli = ["typer>=0.9", "rich>=13.0"]
641
-
642
- [project.scripts]
643
- aun = "aun_cli.main:app"
644
- ```
645
-
646
- ## 11. 实现优先级
647
-
648
- ### Phase 1:核心可用(MVP)
649
-
650
- - [ ] 项目骨架(typer app + 全局选项 + 配置加载)
651
- - [ ] `aun register` / `aun login` / `aun whoami`
652
- - [ ] `aun send` / `aun pull`
653
- - [ ] `aun status` / `aun ping`
654
- - [ ] 基本输出格式化(table + json)
655
-
656
- ### Phase 2:完整通信
657
-
658
- - [ ] `aun listen`(长连接)
659
- - [ ] `aun group create/send/list/members/invite/kick/leave`
660
- - [ ] `aun group listen`
661
- - [ ] `aun ack`
662
-
663
- ### Phase 3:管理与诊断
664
-
665
- - [ ] `aun keys list/rotate/export/import`
666
- - [ ] `aun doctor`
667
- - [ ] `aun logs`
668
- - [ ] `aun storage upload/download/delete`
669
- - [ ] `aun config` 子命令
670
-
671
- ### Phase 4:体验优化
672
-
673
- - [ ] Shell 自动补全(typer 内置支持)
674
- - [ ] PyInstaller 打包流程
675
- - [ ] 交互式模式(`aun interactive` — REPL 风格)
676
- - [ ] `aun trace <message-id>` 消息追踪
677
-
678
- ## 12. 与现有工具的关系
679
-
680
- | 工具 | 定位 | 用户 |
681
- |------|------|------|
682
- | **certool** | 服务端 CA 证书管理 | 运维 |
683
- | **aun CLI** | 客户端身份 + 通信 | 开发者/Agent |
684
- | **SDK** | 编程接口 | 应用开发者 |
685
-
686
- 三者互补:certool 管服务端证书链,CLI 管客户端身份和消息,SDK 供应用集成。
1
+ # AUN CLI 设计文档
2
+
3
+ ## 1. 定位
4
+
5
+ AUN CLI Python SDK 随包提供的命令行入口,用于在不编写业务代码的情况下完成身份管理、消息收发、群组操作、Storage / Group FS 文件操作、Collab 协作层操作、agent.md 管理、诊断和压测。
6
+
7
+ 当前实现位于:
8
+
9
+ - 源码目录:`D:\modelunion\kite\aun-sdk-core\python\src\aun_cli`
10
+ - 包内入口:`python/src/aun_cli/main.py`
11
+ - 模块入口:`python -m aun_cli`
12
+ - 安装后命令:`aun`
13
+ - 脚本注册:`python/pyproject.toml` 中的 `[project.scripts] aun = "aun_cli.main:app"`
14
+
15
+ CLI SDK 的薄封装和调试入口,不直接实现协议状态机、E2EE、Gateway 发现或业务 RPC 语义;这些能力由 `aun_core` 提供。
16
+
17
+ ## 2. 当前架构
18
+
19
+ ```text
20
+ aun CLI
21
+ ├─ main.py # Typer 根应用、全局选项、命令组注册
22
+ ├─ config.py # cli.toml、profile、终端标签页状态
23
+ ├─ adapter.py # AUNClient / AIDStore 生命周期桥接
24
+ ├─ output.py # human / table / JSON 输出
25
+ ├─ storage_core.py # storage object 上传下载数据面复用逻辑
26
+ ├─ fs_utils.py # AID:path 远程路径解析
27
+ └─ commands/
28
+ ├─ identity.py # identity list/check;根命令 register/login/whoami 复用这里
29
+ ├─ message.py # send/pull/ack
30
+ ├─ listen.py # listen 长连接监听
31
+ ├─ group.py # group.* 与 group fs
32
+ ├─ fs.py # storage VFS POSIX 风格 fs 命令
33
+ ├─ storage.py # object storage 兼容命令
34
+ ├─ collab.py # collab 与 collab tag
35
+ ├─ agentmd.py # agent.md 上传、下载、检查
36
+ ├─ keys.py # 本地密钥与 seed 迁移
37
+ ├─ diag.py # status/ping/doctor/logs
38
+ ├─ config.py # config/profile
39
+ └─ bench.py # message/group 发送压测
40
+ ```
41
+
42
+ 核心调用链:
43
+
44
+ ```text
45
+ Typer command
46
+ -> resolve_profile_config(ctx)
47
+ -> CLISession(ctx)
48
+ -> AIDStore.load(aid)
49
+ -> AUNClient.authenticate()
50
+ -> AUNClient.connect()
51
+ -> client.call(...) / client.storage.* / client.group.fs.* / client.collab.*
52
+ -> output_json / output_table / output_dict
53
+ ```
54
+
55
+ ## 3. 关键设计决策
56
+
57
+ | 主题 | 当前实现 |
58
+ |------|----------|
59
+ | 命令框架 | 使用 Typer,根应用在 `main.py` 中注册 |
60
+ | SDK 桥接 | `adapter.run_async()` `asyncio.run()` 执行 SDK 异步调用 |
61
+ | 会话生命周期 | 每个短命令创建一个 `CLISession`,完成后关闭 `AUNClient` `AIDStore` |
62
+ | Gateway | CLI 不提供 `--gateway` 覆盖;Gateway 发现交给 SDK |
63
+ | Profile | 默认读取 `~/.aun/cli.toml`,支持终端标签页级 profile 状态 |
64
+ | 输出 | 默认人类可读;`--json` 输出结构化 JSON |
65
+ | RPC 统计 | 非 JSON 模式下输出本次 CLI 调用的 RPC / phase summary |
66
+ | 长连接 | `aun listen` 使用 `background_sync=True`,监听 P2P 与群消息事件 |
67
+ | 数据面 | Storage / Group FS 的上传下载由 SDK 高层或 `storage_core.py` 编排 |
68
+
69
+ ## 4. 全局选项
70
+
71
+ 当前根命令支持:
72
+
73
+ ```text
74
+ aun [全局选项] <command> [参数]
75
+
76
+ --profile, -p TEXT 仅本次命令使用指定 profile
77
+ --json JSON 格式输出
78
+ --debug 启用 debug 日志
79
+ --no-color 禁用彩色输出
80
+ --timeout, -t INT 操作超时秒数,默认 30
81
+ --version, -V 显示 CLI 版本
82
+ --install-completion 安装当前 shell 的补全脚本,Typer 自动提供
83
+ --show-completion 输出补全脚本,Typer 自动提供
84
+ --help 显示帮助
85
+ ```
86
+
87
+ 注意:旧设计稿中的 `--gateway`、`-g` 不存在。当前 Gateway 路由由 SDK discovery 处理。
88
+
89
+ ## 5. 配置与 Profile
90
+
91
+ 配置文件默认路径为 `~/.aun/cli.toml`,可用 `AUN_CLI_CONFIG` 覆盖。配置结构:
92
+
93
+ ```toml
94
+ [default]
95
+ profile = "default"
96
+ output = "table"
97
+ color = true
98
+ timeout = 30
99
+
100
+ [profiles.default]
101
+ aid = "alice.agentid.pub"
102
+ aun_path = "~/.aun/profiles/default"
103
+ active_group = "group.agentid.pub/10042"
104
+ ```
105
+
106
+ 有效 profile 解析顺序:
107
+
108
+ ```text
109
+ --profile > AUN_PROFILE > 当前终端标签页状态 > [default].profile
110
+ ```
111
+
112
+ `aun profile switch` 会写入当前终端标签页状态,同时更新新标签页默认 profile。终端标签页状态目录默认在 `~/.aun/cli-sessions/`,可用 `AUN_CLI_STATE_DIR` 覆盖。
113
+
114
+ 常用环境变量:
115
+
116
+ | 变量 | 用途 |
117
+ |------|------|
118
+ | `AUN_CLI_CONFIG` | 覆盖 CLI 配置文件路径 |
119
+ | `AUN_PROFILE` | 覆盖本次命令 profile |
120
+ | `AUN_CLI_SESSION_ID` | 显式指定终端标签页状态 ID |
121
+ | `AUN_CLI_STATE_DIR` | 覆盖标签页状态目录 |
122
+ | `AUN_DATA_ROOT` | 覆盖当前 profile 的 `aun_path` |
123
+ | `AUN_DEBUG` | 开启 debug |
124
+ | `AUN_ENCRYPTION_SEED` / `AUN_SEED_PASSWORD` | 本地身份材料加密 seed |
125
+
126
+ ## 6. 命令注册面
127
+
128
+ 根命令在 `main.py` 中注册:
129
+
130
+ | 命令 | 来源模块 | 说明 |
131
+ |------|----------|------|
132
+ | `register` / `login` / `whoami` | `commands.identity` | 根级身份快捷命令 |
133
+ | `identity` | `commands.identity` | 身份列表和诊断 |
134
+ | `send` / `pull` / `ack` | `commands.message` | P2P 消息 |
135
+ | `listen` | `commands.listen` | P2P + 群消息实时监听 |
136
+ | `group` | `commands.group` | 群组管理和 `group fs` |
137
+ | `status` / `ping` / `doctor` / `logs` | `commands.diag` | 诊断 |
138
+ | `config` / `profile` | `commands.config` | 配置和 profile 管理;`profile` 也挂在 `config profile` 下 |
139
+ | `storage` | `commands.storage` | 对象存储兼容命令 |
140
+ | `fs` | `commands.fs` | Storage VFS / POSIX 风格命令 |
141
+ | `collab` | `commands.collab` | 版本化协作层 |
142
+ | `agentmd` | `commands.agentmd` | agent.md 管理 |
143
+ | `keys` | `commands.keys` | 本地密钥与 seed 管理 |
144
+ | `bench` | `commands.bench` | 消息发送压测 |
145
+
146
+ ## 7. 命令组职责
147
+
148
+ ### 7.1 身份与连接
149
+
150
+ - `aun register <aid>`:注册 AID,并写入当前 profile 的 `aid` / `aun_path`。
151
+ - `aun login [aid]`:加载本地身份、认证并连接一次,成功后更新当前 profile 的 AID。
152
+ - `aun whoami`:显示当前 profile、AID 和数据目录。
153
+ - `aun identity list`:列出本地身份。
154
+ - `aun identity check <aid>`:检查本地身份材料和远端注册状态。
155
+
156
+ ### 7.2 消息
157
+
158
+ - `aun send <target-aid> <message|-> [--no-encrypt]`:发送 P2P 消息,`-` 表示从 stdin 读取。
159
+ - `aun pull [--from <aid>] [--limit N] [--after-seq N]`:拉取离线消息。
160
+ - `aun ack <sender-aid> --seq N`:推进消息 ack。
161
+ - `aun listen [--from <aid>] [--group <group-id>]`:监听 P2P 和群消息,Ctrl+C 退出。
162
+
163
+ ### 7.3 群组
164
+
165
+ - `aun group create <name> [--members a,b] [--group-name name]`
166
+ - `aun group use <group-id>` / `aun group current`
167
+ - `aun group send [group-id] <message> [--no-encrypt]`
168
+ - `aun group list` / `aun group info [group-id]` / `aun group members [group-id]`
169
+ - `aun group invite [group-id] <aid...>`
170
+ - `aun group add-member [group-id] <aid> [--role member|admin] [--member-type human|ai]`
171
+ - `aun group kick [group-id] <aid>`
172
+ - `aun group leave [group-id]`
173
+ - `aun group dissolve [group-id]`
174
+ - `aun group bind [group-id] [--group-name name]`
175
+ - `aun group transfer [group-id] <new-owner>`
176
+ - `aun group complete-transfer [group-id]`
177
+
178
+ 公开兼容别名包括 `aun group bind-aid` 和 `aun group add_member`。
179
+
180
+ 多数群命令省略 `group-id` 时使用当前 profile 的 `active_group`。`aun group create` 成功后会自动把新群设为 active group。
181
+
182
+ ### 7.4 群文件系统
183
+
184
+ `aun group fs` 面向 `group.fs.*` 和 SDK `client.group.fs`。裸路径会绑定当前 active group;完整 group path 可直接传入。
185
+
186
+ 主要命令:
187
+
188
+ - `ls` / `find` / `stat` / `lstat`
189
+ - `mkdir` / `rm`
190
+ - `cp` / `mv`
191
+ - `df`
192
+ - `mount` / `umount`
193
+
194
+ 群自有区写入需要按服务端要求使用 `group_aid` 身份签名,CLI 通过 `--as` 传入操作者 AID。
195
+
196
+ ### 7.5 Storage VFS
197
+
198
+ `aun fs` 面向 SDK Storage VFS,路径格式为 `<AID>:/path`。裸路径会补当前 profile AID。
199
+
200
+ 主要命令:
201
+
202
+ - 读侧:`ls`、`stat`、`cat`、`find`、`df`
203
+ - 写侧:`cp`、`mv`、`rm`、`mkdir`、`ln -s`
204
+ - 权限:`chmod`、`setfacl`、`getfacl`
205
+ - 挂载:`mount`、`approve`、`reject`、`umount`
206
+ - token:`token issue`、`token revoke`、`token ls`
207
+
208
+ ### 7.6 对象存储兼容命令
209
+
210
+ `aun storage` 保留对象级快捷入口:
211
+
212
+ - `aun storage ls [prefix]`
213
+ - `aun storage info <object-key>`
214
+ - `aun storage upload <local-path> [--name key] [--public] [--force]`
215
+ - `aun storage download <object-key> [-o path] [--force]`
216
+ - `aun storage delete <object-key>`
217
+
218
+ 新应用优先使用 `aun fs`;对象命令主要用于兼容对象存储心智和低层调试。
219
+
220
+ ### 7.7 Collab
221
+
222
+ `aun collab` 面向版本化协作目录:
223
+
224
+ - 文档:`ls-files`、`create`、`show`、`commit`、`merge`、`log`、`diff`、`revert`
225
+ - 运维:`clone`、`prune`、`gc`、`reflog`
226
+ - 群发现:`ls-remote`、`unregister`
227
+ - 标签:`tag create/list/show/diff/restore/rm/prune`
228
+
229
+ `create` / `commit` / `merge` 的 `source` 支持 AID 远程路径、本地文件、base64 或普通文本。
230
+
231
+ ### 7.8 agent.md、keys、诊断与压测
232
+
233
+ - `aun agentmd upload/download/check`
234
+ - `aun keys list/rotate/change-seed`
235
+ - `aun status` / `aun ping` / `aun doctor` / `aun logs`
236
+ - `aun bench send` / `aun bench group-send` / `aun bench group send`
237
+
238
+ 公开兼容别名包括 `aun agentmd upload_agent_md/download_agent_md/check_agent_md` 和 `aun bench group_send`。
239
+
240
+ 当前没有 `keys export/import`、`group listen`、`config init`、`profile delete` 这些命令;需要新增时应先更新实现和本文档。
241
+
242
+ ## 8. 错误处理与退出码
243
+
244
+ 错误映射在 `adapter.handle_error()` 中:
245
+
246
+ | 退出码 | 含义 |
247
+ |--------|------|
248
+ | 0 | 成功 |
249
+ | 1 | 通用错误 |
250
+ | 2 | 参数错误 |
251
+ | 3 | 认证失败 |
252
+ | 4 | 连接失败 |
253
+ | 5 | 超时 |
254
+ | 6 | 权限不足 |
255
+ | 7 | 目标不存在 |
256
+
257
+ JSON 模式下错误仍通过统一错误输出函数输出,便于脚本判断。
258
+
259
+ ## 9. 当前实现边界
260
+
261
+ - CLI 不直接接受外部 Gateway URL,避免绕过 SDK discovery。
262
+ - CLI 不维护独立协议实现;业务行为以 SDK 和服务端为准。
263
+ - 默认短命令不启用长连接重连;`listen` 使用后台同步和自动重连。
264
+ - `--json` 会关闭 banner 和 RPC summary,适合脚本管道。
265
+ - `aun group fs` 是 Group FS 入口;`aun fs` 是普通 Storage VFS 入口,两者路径模型不同。