@agentunion/fastaun-browser 0.3.3 → 0.3.5
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.
- package/CHANGELOG.md +113 -85
- package/_packed_docs/CHANGELOG.md +113 -85
- package/_packed_docs/INDEX.md +81 -0
- package/_packed_docs/KITE_DOCS_GUIDE.md +55 -0
- 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 +328 -0
- package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +686 -0
- 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 -0
- 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 -0
- 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 -0
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +5 -5
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +1 -1
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +2 -2
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +46 -6
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +89 -12
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +19 -1
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +20 -5
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +8 -8
- 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 -0
- package/_packed_docs/sdk/INDEX.md +22 -22
- package/_packed_docs/sdk/README.md +3 -3
- package/dist/auth.d.ts +10 -11
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +127 -91
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +649 -274
- package/dist/client.d.ts +19 -10
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +238 -111
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +4 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +7 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +5 -0
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb.d.ts +12 -0
- package/dist/keystore/indexeddb.d.ts.map +1 -1
- package/dist/keystore/indexeddb.js +64 -6
- package/dist/keystore/indexeddb.js.map +1 -1
- package/dist/namespaces/auth.d.ts +9 -3
- package/dist/namespaces/auth.d.ts.map +1 -1
- package/dist/namespaces/auth.js +64 -20
- package/dist/namespaces/auth.js.map +1 -1
- package/dist/secret-store/indexeddb-store.js +1 -1
- package/dist/secret-store/indexeddb-store.js.map +1 -1
- package/dist/transport.d.ts +9 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +158 -64
- package/dist/transport.js.map +1 -1
- package/dist/v2/e2ee/decrypt.js +1 -1
- package/dist/v2/e2ee/decrypt.js.map +1 -1
- package/dist/v2/e2ee/encrypt-p2p.d.ts.map +1 -1
- package/dist/v2/e2ee/encrypt-p2p.js +3 -2
- package/dist/v2/e2ee/encrypt-p2p.js.map +1 -1
- package/dist/v2/session/session.d.ts +1 -0
- package/dist/v2/session/session.d.ts.map +1 -1
- package/dist/v2/session/session.js +7 -1
- package/dist/v2/session/session.js.map +1 -1
- package/package.json +43 -43
- package/dist/e2ee-group.d.ts +0 -276
- package/dist/e2ee-group.d.ts.map +0 -1
- package/dist/e2ee-group.js +0 -1653
- package/dist/e2ee-group.js.map +0 -1
|
@@ -0,0 +1,686 @@
|
|
|
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 供应用集成。
|