@zan_team/cli 0.0.2 → 0.0.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/README.md +111 -225
- package/dist/cli.js +206 -58
- package/package.json +2 -2
- package/dist/cli.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,47 +1,24 @@
|
|
|
1
1
|
# ZAN CLI
|
|
2
2
|
|
|
3
|
-
ZAN CLI 是面向开发者、自动化脚本和 AI Agent 的统一命令行入口,提供安全认证、ZAN Project 管理与套餐用量查询、动态多链发现、EVM 与 Hyperliquid
|
|
4
|
-
|
|
5
|
-
> 当前状态:认证、Project、套餐用量、Network、EVM 与 Hyperliquid 只读查询已经实现。npm 包尚未发布,当前请使用源码构建方式运行。示例中的 `example.com` 地址仅为配置占位符。
|
|
3
|
+
ZAN CLI 是面向开发者、自动化脚本和 AI Agent 的统一命令行入口,提供安全认证、ZAN Project 管理与套餐用量查询、动态多链发现、EVM 与 Hyperliquid 查询、钱包管理与本地签名,以及稳定的机器可读输出。
|
|
6
4
|
|
|
7
5
|
## 快速开始
|
|
8
6
|
|
|
9
7
|
### 环境要求
|
|
10
8
|
|
|
11
9
|
- Node.js 22 或更高版本。
|
|
12
|
-
-
|
|
10
|
+
- 可用的系统凭据库:macOS Keychain、Windows Credential Manager 或 Linux Secret Service。
|
|
13
11
|
|
|
14
12
|
### 安装
|
|
15
13
|
|
|
16
|
-
npm
|
|
14
|
+
使用 npm 全局安装:
|
|
17
15
|
|
|
18
16
|
```sh
|
|
19
17
|
npm install --global @zan_team/cli
|
|
20
18
|
zan --help
|
|
21
19
|
```
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
```sh
|
|
26
|
-
pnpm install
|
|
27
|
-
pnpm build
|
|
28
|
-
node dist/cli.js --help
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
下文统一使用 `zan`。运行源码构建产物时,将 `zan` 替换为 `node dist/cli.js`。
|
|
32
|
-
|
|
33
|
-
### 配置服务地址
|
|
34
|
-
|
|
35
|
-
CLI 未显式配置服务地址时默认连接生产环境 `https://zan.top`。也可以通过
|
|
36
|
-
环境变量覆盖 Auth/API Origin:
|
|
37
|
-
|
|
38
|
-
```sh
|
|
39
|
-
export ZAN_AUTH_BASE_URL=https://auth.example.com
|
|
40
|
-
export ZAN_API_BASE_URL=https://api.example.com
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
上述 `example.com` 地址仅用于展示配置方式,不能直接使用。日常使用无需覆盖
|
|
44
|
-
服务地址;内部环境地址和配置请通过授权渠道获取,不要写入公开文档或示例。
|
|
21
|
+
CLI 默认连接 ZAN 服务,无需配置服务地址。
|
|
45
22
|
|
|
46
23
|
### 登录
|
|
47
24
|
|
|
@@ -69,8 +46,7 @@ zan project active
|
|
|
69
46
|
```
|
|
70
47
|
|
|
71
48
|
`project create` 不会自动切换当前 Project。使用返回或列表中的 Project ID 执行
|
|
72
|
-
`project use
|
|
73
|
-
加密缓存。
|
|
49
|
+
`project use` 将其设为默认项目。
|
|
74
50
|
|
|
75
51
|
### 查看当前项目用量
|
|
76
52
|
|
|
@@ -88,11 +64,11 @@ zan --json --no-interactive usage
|
|
|
88
64
|
|
|
89
65
|
```sh
|
|
90
66
|
zan evm networks
|
|
91
|
-
zan settings set network
|
|
67
|
+
zan settings set network <network-id>
|
|
92
68
|
zan settings show
|
|
93
69
|
```
|
|
94
70
|
|
|
95
|
-
|
|
71
|
+
将 `<network-id>` 替换为 `evm networks` 返回的 Network ID。
|
|
96
72
|
|
|
97
73
|
### 第一次查询
|
|
98
74
|
|
|
@@ -117,7 +93,7 @@ zan \
|
|
|
117
93
|
--json \
|
|
118
94
|
--no-interactive \
|
|
119
95
|
--project <project-id> \
|
|
120
|
-
--network
|
|
96
|
+
--network <network-id> \
|
|
121
97
|
evm rpc eth_blockNumber
|
|
122
98
|
```
|
|
123
99
|
|
|
@@ -127,7 +103,7 @@ zan \
|
|
|
127
103
|
|
|
128
104
|
### 安装与升级
|
|
129
105
|
|
|
130
|
-
|
|
106
|
+
安装或升级到最新版本:
|
|
131
107
|
|
|
132
108
|
```sh
|
|
133
109
|
npm install --global @zan_team/cli
|
|
@@ -135,18 +111,6 @@ npm update --global @zan_team/cli
|
|
|
135
111
|
zan version
|
|
136
112
|
```
|
|
137
113
|
|
|
138
|
-
从源码构建:
|
|
139
|
-
|
|
140
|
-
```sh
|
|
141
|
-
pnpm install
|
|
142
|
-
pnpm typecheck
|
|
143
|
-
pnpm test
|
|
144
|
-
pnpm build
|
|
145
|
-
node dist/cli.js version
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
维护者发布流程见 [发布指南](docs/releasing.md),首次发布使用 `pnpm run release -- --version=0.0.1`。
|
|
149
|
-
|
|
150
114
|
### 全局参数
|
|
151
115
|
|
|
152
116
|
全局参数放在 `zan` 与子命令之间:
|
|
@@ -178,45 +142,14 @@ zan auth status --verify
|
|
|
178
142
|
zan auth logout
|
|
179
143
|
```
|
|
180
144
|
|
|
181
|
-
- `auth login`
|
|
182
|
-
- `--
|
|
183
|
-
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
scopes;`--json` 保留完整状态字段和 ISO 格式时间。旧登录状态执行一次
|
|
187
|
-
`auth status --verify` 补齐邮箱,之后普通 `auth status` 即可离线显示。
|
|
188
|
-
- `auth logout` 撤销服务端 Token,并清理当前环境的本地凭据、Session、加密
|
|
189
|
-
Endpoint 缓存、缓存密钥和 RPC API Key 覆盖。
|
|
145
|
+
- `auth login` 登录 ZAN 账号;`--device-code` 适用于无浏览器或远程终端。
|
|
146
|
+
- `--force` 替换当前登录状态。
|
|
147
|
+
- `auth status` 显示本地保存的邮箱、认证状态、过期时间和授权范围;
|
|
148
|
+
`--verify` 向 ZAN 验证登录状态并更新这些信息。
|
|
149
|
+
- `auth logout` 退出登录并清理本地登录凭据、项目缓存及项目 API Key。
|
|
190
150
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
用户目录下按凭据 Profile 隔离的跨进程锁协调一次 Refresh Token 轮换。
|
|
194
|
-
|
|
195
|
-
已认证的 Project 与 Network 请求遇到 Access Token 失效时,会静默刷新一次
|
|
196
|
-
Token,并原样重放请求一次。重放会保留 method、path、body 和创建请求的幂等键,
|
|
197
|
-
同时替换 Authorization 并为新的网络尝试生成新的 Request ID。若 Refresh
|
|
198
|
-
Session 已过期、撤销,或新 Access Token 仍被拒绝,CLI 返回:
|
|
199
|
-
|
|
200
|
-
```text
|
|
201
|
-
AUTH_EXPIRED: Authentication has expired and could not be renewed.
|
|
202
|
-
Hint: Run: zan auth login
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
Scope 不足继续返回 `AUTH_REQUIRED`,不会做无意义刷新。CLI 不会自动打开浏览器
|
|
206
|
-
重新登录,避免打断脚本或 Agent;所有认证重试最多一次,不会循环。
|
|
207
|
-
|
|
208
|
-
CLI 使用第一方账户权限 `account.profile:read`,不请求 `openid`、`profile`
|
|
209
|
-
或 OIDC ID Token。固定授权范围还包括 `offline_access`、
|
|
210
|
-
`node-service.projects:read`、`node-service.projects:create` 和
|
|
211
|
-
`node-service.rpc:read`。
|
|
212
|
-
|
|
213
|
-
`GET /v1/api/cli-oauth/authorize` 是浏览器 Redirect/PKCE 入口。Device
|
|
214
|
-
Authorization、Token 与 Revoke 使用同一 `/v1/api/cli-oauth/**` 前缀。
|
|
215
|
-
`ZAN_AUTH_BASE_URL` 与 `ZAN_API_BASE_URL` 只配置 origin,不附加协议路径。
|
|
216
|
-
OAuth 与 Session JSON 接口使用统一响应 envelope;CLI 只在 envelope 成功后
|
|
217
|
-
校验严格业务数据。`auth status --verify` 保存 `subject`、
|
|
218
|
-
`displayName`、`email`、`scopes` 和 `expiresAt`,不传递、保存或显示 organization。
|
|
219
|
-
兼容尚未返回邮箱的旧后端;账户未提供邮箱时显示 `not available`。
|
|
151
|
+
登录凭据保存在系统凭据库中。CLI 会尝试自动续期;若提示 `AUTH_EXPIRED`,请重新执行
|
|
152
|
+
`zan auth login`。非交互模式不会自动打开浏览器。
|
|
220
153
|
|
|
221
154
|
### Project 管理
|
|
222
155
|
|
|
@@ -229,11 +162,8 @@ zan project active
|
|
|
229
162
|
```
|
|
230
163
|
|
|
231
164
|
- Project 名称不保证唯一,选择和设置始终使用 Project ID。
|
|
232
|
-
- `project use`
|
|
233
|
-
默认设置;刷新失败时不会切换 Project。
|
|
165
|
+
- `project use` 验证项目并更新可用网络后,将其设为默认项目;失败时保留原选择。
|
|
234
166
|
- 使用 `--project <id>` 可以只覆盖当前命令,不修改本地设置。
|
|
235
|
-
- Project 与 Network API 使用统一响应 envelope,解包后的业务 DTO 仍执行
|
|
236
|
-
严格校验;创建接口固定为 `POST /v1/api/cli/createProject`。
|
|
237
167
|
|
|
238
168
|
### 套餐与 Key 用量
|
|
239
169
|
|
|
@@ -244,7 +174,7 @@ zan --json --no-interactive usage
|
|
|
244
174
|
```
|
|
245
175
|
|
|
246
176
|
默认查询当前 Project,选择优先级为 `--project` > `ZAN_PROJECT` > 本地设置。
|
|
247
|
-
|
|
177
|
+
无需选择 Network,也不会导出 API Key。
|
|
248
178
|
未选择 Project 时,交互终端会提示选择;非交互调用返回 `SETUP_REQUIRED`。
|
|
249
179
|
|
|
250
180
|
输出示例:
|
|
@@ -265,7 +195,7 @@ Status: VALID / service ON
|
|
|
265
195
|
```
|
|
266
196
|
|
|
267
197
|
`keyUsage` 是当前项目 Key 的累计消耗及单 Key 限额;`plan` 是所属账号共享的
|
|
268
|
-
Node Service
|
|
198
|
+
Node Service 套餐,余额与控制台使用相同口径,包含有效加油包。
|
|
269
199
|
两者的统计范围不同,不能用单 Key 累计消耗减套餐总量。用量有计量延迟。
|
|
270
200
|
|
|
271
201
|
对应的 `--json` 输出示例:
|
|
@@ -303,9 +233,8 @@ JSON 直接返回 `{ project, keyUsage, plan }`,额度字段为十进制整数
|
|
|
303
233
|
`expiresAt` 是套餐到期时间,`refreshAt` 是当前权益周期刷新时间;未知时间为 `null`。
|
|
304
234
|
耗尽时剩余量显示 `0`;已过期/关闭的套餐仍返回状态及到期时间,查询不会开通或续订套餐。
|
|
305
235
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
`GET /v1/api/cli/projects/{projectId}/usage`,沿用 `node-service.projects:read` Scope。
|
|
236
|
+
用量查询支持当前登录账号拥有的 `CHAIN_RPC` Project。无权访问或不存在的项目返回
|
|
237
|
+
`PROJECT_NOT_FOUND`。
|
|
309
238
|
|
|
310
239
|
### Network 与本地设置
|
|
311
240
|
|
|
@@ -317,14 +246,11 @@ zan evm networks --search base
|
|
|
317
246
|
zan evm networks --refresh
|
|
318
247
|
```
|
|
319
248
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
补齐服务端配置,也可以通过 `evm rpc eth_getBalance` 查询原始单位。
|
|
249
|
+
网络列表中的币种显示为 `-` 时,仍可使用 `evm rpc` 查询。
|
|
250
|
+
`evm data balance` 需要币种信息;信息缺失时可用 `evm rpc eth_getBalance`
|
|
251
|
+
查询以最小单位表示的余额。
|
|
324
252
|
|
|
325
|
-
|
|
326
|
-
请求 Project 详情或 Network 列表。缓存缺失、密钥缺失或密文校验失败时会自动
|
|
327
|
-
重新拉取;RPC Endpoint 返回 HTTP 401/403 时会刷新一次并重试一次。
|
|
253
|
+
CLI 会缓存网络列表。需要获取最新列表时使用 `--refresh`。
|
|
328
254
|
|
|
329
255
|
查看或清理当前 Project 的缓存:
|
|
330
256
|
|
|
@@ -333,45 +259,38 @@ zan project cache status
|
|
|
333
259
|
zan project cache clear
|
|
334
260
|
```
|
|
335
261
|
|
|
336
|
-
|
|
337
|
-
Project 使用不同缓存文件与密钥。普通设置文件仍只保存 Project ID 和 Network
|
|
338
|
-
ID,不保存 Endpoint 或 API Key。
|
|
262
|
+
#### 应用 API Key
|
|
339
263
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
需要临时替换当前 Project 的 RPC API Key 时,通过隐藏输入或 stdin 写入系统
|
|
343
|
-
凭据库:
|
|
264
|
+
仅通过 CLI 查询数据时无需导出 API Key。应用需要直接调用 ZAN API 时,在应用目录执行:
|
|
344
265
|
|
|
345
266
|
```sh
|
|
346
|
-
zan project rpc-key
|
|
347
|
-
printf '%s\n' "$TEST_RPC_API_KEY" \
|
|
348
|
-
| zan project rpc-key set --stdin
|
|
349
|
-
zan project rpc-key status
|
|
350
|
-
zan project rpc-key clear
|
|
267
|
+
zan project rpc-key pull
|
|
351
268
|
```
|
|
352
269
|
|
|
353
|
-
|
|
354
|
-
|
|
270
|
+
命令将所选项目的 API Key 写入当前目录 `.env` 的 `ZAN_API_KEY`:文件不存在时创建,
|
|
271
|
+
变量已存在时替换,否则追加。其他变量和其他环境配置文件保持不变,终端不显示 Key。
|
|
272
|
+
|
|
273
|
+
未选择项目时会提示选择;非交互模式请使用 `--project <project-id>`。
|
|
274
|
+
此命令无需选择 Network。
|
|
275
|
+
|
|
276
|
+
CLI 会尝试将 `.env` 加入 `.gitignore`;已有生效规则时不重复修改。若文件已被 Git
|
|
277
|
+
跟踪,或忽略规则检查、更新失败,仍会写入并提示风险,JSON 输出中包含 `warnings`。
|
|
278
|
+
提交代码前请确认 `.env` 不在暂存区,也不要将其打包或上传。
|
|
355
279
|
|
|
356
|
-
|
|
280
|
+
如需为当前项目指定其他 RPC API Key,可使用隐藏输入:
|
|
357
281
|
|
|
358
282
|
```sh
|
|
359
|
-
zan project rpc-key
|
|
283
|
+
zan project rpc-key set
|
|
284
|
+
zan project rpc-key status
|
|
285
|
+
zan project rpc-key clear
|
|
360
286
|
```
|
|
361
287
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
服务端下发的 Project Key;不要求选择 Network。命令不接受 Key、stdin、变量名
|
|
365
|
-
或输出路径,也不会在人工输出、JSON 输出、错误或日志中包含 Key。新文件及更新
|
|
366
|
-
后的文件在 POSIX 系统上使用 `0600` 权限,并通过文件锁和原子替换写入;符号链接
|
|
367
|
-
或非普通 `.env` 会被拒绝。
|
|
288
|
+
`set --stdin` 支持从标准输入读取 Key。已配置的覆盖值优先用于 RPC 请求及 `pull`;
|
|
289
|
+
`clear` 清除覆盖值后恢复使用项目默认 Key。凭据保存在系统凭据库中。
|
|
368
290
|
|
|
369
|
-
|
|
370
|
-
它不会检查 Git 跟踪状态或自动更新 `.gitignore`,请自行确保 `.env`
|
|
371
|
-
不会被提交。写入后,任何拥有当前目录读取权限的进程或 Agent 都可能读取这个明文
|
|
372
|
-
文件;“不泄露”保证只覆盖该命令自身的参数、输出、错误和日志边界。
|
|
291
|
+
#### 默认 Project 和 Network
|
|
373
292
|
|
|
374
|
-
|
|
293
|
+
管理默认选择:
|
|
375
294
|
|
|
376
295
|
```sh
|
|
377
296
|
zan settings get project
|
|
@@ -395,7 +314,7 @@ Project 和 Network 的选择优先级:
|
|
|
395
314
|
| ------------------------ | ------------------------------------- |
|
|
396
315
|
| `ZAN_PROJECT` | 默认 Project ID |
|
|
397
316
|
| `ZAN_NETWORK` | 默认 Network ID |
|
|
398
|
-
| `ZAN_HOME` |
|
|
317
|
+
| `ZAN_HOME` | 指定 CLI 数据目录 |
|
|
399
318
|
| `ZAN_REQUEST_TIMEOUT_MS` | 默认请求超时 |
|
|
400
319
|
|
|
401
320
|
非交互模式下缺少命令所需的 Project 或 Network 时,CLI 返回 `SETUP_REQUIRED`,不会显示选择器。
|
|
@@ -443,9 +362,7 @@ printf '["0x0000000000000000000000000000000000000000","latest"]' \
|
|
|
443
362
|
~/.zan-cli/config.yaml
|
|
444
363
|
```
|
|
445
364
|
|
|
446
|
-
|
|
447
|
-
`ZAN_ENV` 及所选 ZAN 后端环境无关;`ZAN_HOME` 不会改变它的位置,所有环境
|
|
448
|
-
读取同一个文件。
|
|
365
|
+
该文件位于当前用户的主目录,对所有项目生效;`ZAN_HOME` 不改变此路径。
|
|
449
366
|
|
|
450
367
|
YAML schema 支持两个顶层属性,分别控制 Raw JSON-RPC 和 Hyperliquid Info 方法:
|
|
451
368
|
|
|
@@ -464,17 +381,17 @@ allowedHyperliquidInfoMethods:
|
|
|
464
381
|
|
|
465
382
|
条目是精确且大小写敏感的方法名(1–128 字符,匹配 `^[A-Za-z][A-Za-z0-9_.-]*$`),不允许重复,最多 256 条。不支持通配、前缀或正则。空列表会拒绝所有 Raw RPC 方法。文件必须是单个 YAML 文档且不超过 64 KiB;注释允许,重复键、别名、自定义标签和合并键会被拒绝。
|
|
466
383
|
|
|
467
|
-
|
|
384
|
+
首次调用 `zan evm rpc` 或 `zan hyperliquid info` 时,若配置文件不存在,CLI 会创建默认查询方法列表。已有文件不会被升级覆盖;修改后在下一次调用生效。
|
|
468
385
|
|
|
469
|
-
旧版本生成、只有 `allowedRpcMethods` 的配置文件继续兼容:
|
|
386
|
+
旧版本生成、只有 `allowedRpcMethods` 的配置文件继续兼容:Hyperliquid Info 使用默认允许列表,不会自动改写用户文件。若要限制 Info 调用,请显式加入 `allowedHyperliquidInfoMethods`;空列表会拒绝所有 Info 方法。已有配置不会自动补入新增加的 `hl_*` JSON-RPC 方法,需要使用时请手动加入 `allowedRpcMethods`。
|
|
470
387
|
|
|
471
388
|
允许列表不保证所选 Network 或套餐支持某个方法;RPC 错误仍然是最终依据。诊断和跟踪类读取可能消耗更多额度。
|
|
472
389
|
|
|
473
|
-
> **警告**:默认列表是只读的,但加入 `eth_sendRawTransaction`、`avax.issueTx`、`personal_*` 或 `admin_*` 等方法后,CLI 会在不做方法级安全校验或确认的情况下直接分发这些方法。
|
|
390
|
+
> **警告**:默认列表是只读的,但加入 `eth_sendRawTransaction`、`avax.issueTx`、`personal_*` 或 `admin_*` 等方法后,CLI 会在不做方法级安全校验或确认的情况下直接分发这些方法。Raw RPC 命令不会替用户签名,但提交已签名交易可能产生链上状态变更。
|
|
474
391
|
|
|
475
|
-
|
|
392
|
+
方法不在允许列表中时返回 `INVALID_ARGS`;配置文件损坏或权限不安全时返回 `SETUP_REQUIRED`。
|
|
476
393
|
|
|
477
|
-
内置查询命令(`evm data balance`、`evm tx`、`evm receipt`、`evm block`、`evm gas`、`evm logs
|
|
394
|
+
内置查询命令(`evm data balance`、`evm tx`、`evm receipt`、`evm block`、`evm gas`、`evm logs`)不受该文件影响,使用固定的只读 RPC 方法。
|
|
478
395
|
|
|
479
396
|
#### Hyperliquid
|
|
480
397
|
|
|
@@ -509,7 +426,7 @@ printf '{"user":"0x0000000000000000000000000000000000000000"}' \
|
|
|
509
426
|
```sh
|
|
510
427
|
zan evm data balance 0x0000000000000000000000000000000000000000
|
|
511
428
|
zan evm data balance 0x0000000000000000000000000000000000000000 --block latest
|
|
512
|
-
zan --network
|
|
429
|
+
zan --network <network-id> evm data balance vitalik.eth
|
|
513
430
|
```
|
|
514
431
|
|
|
515
432
|
ENS 通过同一 Project 的 `ethereum-mainnet` Network 解析,然后在目标 Network 查询余额。如果 Project 不支持 `ethereum-mainnet`,请改用十六进制地址。
|
|
@@ -530,7 +447,7 @@ zan evm block 0x1036640
|
|
|
530
447
|
|
|
531
448
|
```sh
|
|
532
449
|
zan evm gas
|
|
533
|
-
zan --json --network
|
|
450
|
+
zan --json --network <network-id> evm gas
|
|
534
451
|
```
|
|
535
452
|
|
|
536
453
|
结果包含当前 Gas Price;节点支持时还包含 Priority Fee。
|
|
@@ -552,6 +469,46 @@ zan evm logs \
|
|
|
552
469
|
|
|
553
470
|
当前版本返回原始日志,不执行 ABI 解码或分页。
|
|
554
471
|
|
|
472
|
+
### 钱包与签名
|
|
473
|
+
|
|
474
|
+
添加钱包时通过终端隐藏输入私钥,私钥保存在系统凭据库中:
|
|
475
|
+
|
|
476
|
+
```sh
|
|
477
|
+
zan settings wallet add my-wallet
|
|
478
|
+
zan settings wallet list
|
|
479
|
+
zan settings wallet use my-wallet
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
使用当前钱包签署消息(EIP-191):
|
|
483
|
+
|
|
484
|
+
```sh
|
|
485
|
+
zan sign "Hello ZAN"
|
|
486
|
+
zan sign "Hello ZAN" --account my-wallet
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
签署交易前需选择 Project 和 Network。以下命令仅生成已签名交易,不广播:
|
|
490
|
+
|
|
491
|
+
```sh
|
|
492
|
+
zan evm tx sign --to <recipient-address> --value 0.01
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
可通过 `--nonce`、`--gas-limit`、`--max-fee-per-gas` 和 `--max-priority-fee-per-gas`
|
|
496
|
+
指定交易字段,其中费用参数的单位为 Gwei。签名和已签名交易可能被用于授权或广播,
|
|
497
|
+
请仅签署明确理解的内容。
|
|
498
|
+
|
|
499
|
+
编码合约调用数据:
|
|
500
|
+
|
|
501
|
+
```sh
|
|
502
|
+
zan evm contract encode --method 'balanceOf(address)' \
|
|
503
|
+
--args '["0x0000000000000000000000000000000000000000"]'
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
删除已保存的钱包:
|
|
507
|
+
|
|
508
|
+
```sh
|
|
509
|
+
zan settings wallet remove my-wallet
|
|
510
|
+
```
|
|
511
|
+
|
|
555
512
|
### 自动化与 JSON 输出
|
|
556
513
|
|
|
557
514
|
推荐的自动化调用形式:
|
|
@@ -566,7 +523,7 @@ zan --json --no-interactive --project <project-id> --network <network-id> <comma
|
|
|
566
523
|
zan --json --no-interactive --project <project-id> usage
|
|
567
524
|
```
|
|
568
525
|
|
|
569
|
-
- 成功时,stdout 只包含一个完整 JSON
|
|
526
|
+
- 成功时,stdout 只包含一个完整 JSON 值;部分命令可能同时向 stderr 输出风险警告。
|
|
570
527
|
- 失败时,stderr 只包含一个完整 JSON 错误。
|
|
571
528
|
- JSON 模式不输出进度提示。
|
|
572
529
|
- 非交互模式不读取交互输入、不打开浏览器。
|
|
@@ -594,7 +551,7 @@ zan inspect
|
|
|
594
551
|
zan --json --no-interactive inspect
|
|
595
552
|
```
|
|
596
553
|
|
|
597
|
-
|
|
554
|
+
获取 Agent 可读取的命令说明:
|
|
598
555
|
|
|
599
556
|
```sh
|
|
600
557
|
zan agent manifest
|
|
@@ -606,11 +563,11 @@ Agent 可用 `inspect` 检查本地状态;`ready: false` 需结合实际命令
|
|
|
606
563
|
|
|
607
564
|
### Agent Skill
|
|
608
565
|
|
|
609
|
-
|
|
566
|
+
CLI 随附 zan-cli Skill,包含命令使用说明、
|
|
610
567
|
Project/Network 选择、套餐与 Key 用量、EVM/Hyperliquid 查询、RPC Key 拉取及钱包签名指引。
|
|
611
|
-
|
|
568
|
+
安装 CLI 后,使用以下命令将 Skill 安装到 Agent 可发现的位置。
|
|
612
569
|
|
|
613
|
-
|
|
570
|
+
选择 Agent 和安装范围:
|
|
614
571
|
|
|
615
572
|
```sh
|
|
616
573
|
npm install -g @zan_team/cli
|
|
@@ -645,8 +602,7 @@ zan skills install --agent codex --global
|
|
|
645
602
|
zan skills install --agent claude-code --global
|
|
646
603
|
```
|
|
647
604
|
|
|
648
|
-
|
|
649
|
-
返回 `unchanged`。升级会替换完整目录并移除旧版本不再提供的资源。已有目录未经
|
|
605
|
+
重复执行且内容未变时返回 `unchanged`。升级会更新技能目录。已有目录未经
|
|
650
606
|
本命令管理,或文件被手动修改、增加、删除时,默认保留原内容并提示冲突。
|
|
651
607
|
先备份自己的修改,再用 `--force` 显式替换整个 `zan-cli` 技能目录:
|
|
652
608
|
|
|
@@ -654,20 +610,7 @@ zan skills install --agent claude-code --global
|
|
|
654
610
|
zan skills install --agent codex --global --force
|
|
655
611
|
```
|
|
656
612
|
|
|
657
|
-
|
|
658
|
-
`--force` 也不会被覆盖。安装结果支持 `--json --no-interactive`,包含 Agent、
|
|
659
|
-
范围、版本、绝对目标路径以及 `installed` / `updated` / `unchanged` / `linked` 状态。
|
|
660
|
-
|
|
661
|
-
本地测试无需发布 npm;构建后在目标业务项目目录调用绝对路径:
|
|
662
|
-
|
|
663
|
-
```sh
|
|
664
|
-
# 在 CLI 仓库构建
|
|
665
|
-
pnpm build
|
|
666
|
-
|
|
667
|
-
# 在目标业务项目目录执行,将路径替换为实际 CLI 仓库路径
|
|
668
|
-
node /absolute/path/to/zan-cli/dist/cli.js skills install --agent claude-code
|
|
669
|
-
node /absolute/path/to/zan-cli/dist/cli.js skills install --agent codex
|
|
670
|
-
```
|
|
613
|
+
安装结果支持 `--json --no-interactive`。
|
|
671
614
|
|
|
672
615
|
### Shell 补全
|
|
673
616
|
|
|
@@ -696,49 +639,23 @@ zan completions fish
|
|
|
696
639
|
|
|
697
640
|
只有限流、临时网络错误和服务端明确标记的临时错误适合自动重试。参数错误、认证拒绝和资源不存在不应自动重试。
|
|
698
641
|
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
由轮询流程处理;授权拒绝返回 `AUTH_DENIED`,Refresh Session 失效返回
|
|
702
|
-
`AUTH_EXPIRED`,Scope 不足返回 `AUTH_REQUIRED`,Project 不存在返回
|
|
703
|
-
`PROJECT_NOT_FOUND`。未纳入安全映射的正式错误码和未知错误码统一降级为
|
|
704
|
-
`ZAN_API_ERROR`;服务端原始错误码和 message 不进入人工或 JSON 输出。
|
|
705
|
-
|
|
706
|
-
创建 Project 时,已发布的套餐错误(`W3S-019-5-B027` 至 `B032`)仍使用
|
|
707
|
-
`ZAN_API_ERROR` 和退出码 `8`,但会明确提示免费套餐未配置、无领取资格、
|
|
708
|
-
初始化中、初始化失败、已有套餐不可用或 Project 数量超限。只有初始化中
|
|
709
|
-
标记为可重试;CLI 不会因此自动重复创建请求。
|
|
710
|
-
|
|
711
|
-
同名 Project 已存在(`W3S-019-5-B033`)时,CLI 会明确提示重名,并建议换一个
|
|
712
|
-
名称,或通过 `zan project list` 查找项目后执行 `zan project use <id>` 使用已有
|
|
713
|
-
项目;此错误不可重试,仍使用 `ZAN_API_ERROR` 和退出码 `8`。
|
|
714
|
-
|
|
715
|
-
已认证的 Project 与 Network 请求如果通过 HTTP 401 或已发布的 WebResult
|
|
716
|
-
语义表明 Access Token 无效,会刷新一次 Access Token 并重放一次请求。第二次
|
|
717
|
-
仍失败时返回 `AUTH_EXPIRED`,不会继续刷新。普通 HTTP 403 和 Scope 不足不会
|
|
718
|
-
触发刷新。该行为不适用于 OAuth、Device Flow 或原始 EVM JSON-RPC 请求。
|
|
642
|
+
创建 Project 时若提示名称重复,可更换名称,或执行 `zan project list` 查找已有项目。
|
|
643
|
+
套餐不可用或项目数量达到上限时,请根据错误提示检查账号套餐及项目状态。
|
|
719
644
|
|
|
720
645
|
### 安全注意事项
|
|
721
646
|
|
|
722
|
-
-
|
|
723
|
-
|
|
724
|
-
-
|
|
725
|
-
-
|
|
726
|
-
-
|
|
727
|
-
|
|
728
|
-
- 加密缓存主要防止配置文件、备份或日志意外泄露明文 Endpoint。它不能抵御已
|
|
729
|
-
同时取得本地文件和已解锁系统凭据库权限的恶意进程或系统管理员。
|
|
730
|
-
- RPC API Key 覆盖值只通过隐藏输入或 stdin 写入系统凭据库,不要放入命令参数
|
|
731
|
-
或脚本源码。仅在应用确实需要时使用 `project rpc-key pull` 创建 `.env`,并确保
|
|
732
|
-
文件不进入版本控制、构建产物或日志。
|
|
733
|
-
- 不要向 CLI 传入任意 RPC URL;Network 必须来自当前 Project。
|
|
734
|
-
- 自动化应使用 `--json --no-interactive` 并分别解析 stdout、stderr 和退出码。
|
|
735
|
-
- `--reveal` 只应在用户明确需要展示受保护结果字段时使用。
|
|
647
|
+
- 不要在聊天、问题反馈、日志或版本控制中包含私钥、API Key、登录凭据及含凭据的 RPC 地址。
|
|
648
|
+
- 仅在应用直接调用 ZAN API 时使用 `project rpc-key pull`,并妥善保管生成的 `.env`。
|
|
649
|
+
- 私钥和 API Key 使用隐藏输入或 stdin 传入,不要将真实值写在命令参数中。
|
|
650
|
+
- 自定义 RPC 允许列表可能开放写操作;执行前确认方法及参数的影响。
|
|
651
|
+
- 分享签名、已签名交易或查询结果前,确认其用途及接收方。
|
|
652
|
+
- 自动化调用使用 `--json --no-interactive`,同时检查退出码和风险警告。
|
|
736
653
|
|
|
737
654
|
### 常见问题
|
|
738
655
|
|
|
739
656
|
**返回 `SETUP_REQUIRED`**
|
|
740
657
|
|
|
741
|
-
|
|
658
|
+
检查当前 Project、Network 和本地凭据状态:
|
|
742
659
|
|
|
743
660
|
```sh
|
|
744
661
|
zan settings show
|
|
@@ -771,35 +688,4 @@ zan auth login
|
|
|
771
688
|
|
|
772
689
|
Key 是项目的累计用量,套餐余额由账号下的项目共享,与控制台按套餐类型读取的余额一致。
|
|
773
690
|
`Key limit: Not set` 表示未设置单 Key 限额,仍受套餐余额约束。
|
|
774
|
-
`PROJECT_NOT_FOUND`
|
|
775
|
-
|
|
776
|
-
## 已实现能力
|
|
777
|
-
|
|
778
|
-
- OAuth 2.1 PKCE 与 Device Flow 登录、刷新、验证和登出。
|
|
779
|
-
- 系统凭据库、跨进程 Access Token 复用与 Refresh Token 安全轮换。
|
|
780
|
-
- Project 管理、动态 Network 发现、加密 Endpoint 缓存与安全解析。
|
|
781
|
-
- `zan usage` 查询当前 Project 的 Key 用量、共享套餐余额及到期时间。
|
|
782
|
-
- Raw JSON-RPC、余额、ENS、交易、回执、区块、Gas 和日志查询。
|
|
783
|
-
- 稳定 JSON 协议、退出码、统一脱敏、Agent Manifest 和 shell completions。
|
|
784
|
-
- 单元、集成、CLI 黑盒、覆盖率和安装包冒烟测试。
|
|
785
|
-
|
|
786
|
-
## 架构与安全
|
|
787
|
-
|
|
788
|
-
命令层负责解析输入,认证、Session、Project、Network 和 EVM 查询由独立服务完成;HTTP、凭据库、文件存储、输出与错误映射位于可替换的基础设施边界。
|
|
789
|
-
|
|
790
|
-
完整 Network Endpoint 仅在进程内以明文用于 RPC 调用;持久化时使用
|
|
791
|
-
AES-256-GCM 加密,密钥由系统凭据库单独保存,不进入命令输出或普通设置。
|
|
792
|
-
|
|
793
|
-
## 路线图
|
|
794
|
-
|
|
795
|
-
- **Phase A**:认证、Session、设置、就绪检查、Agent Manifest 与 CLI 基础,已实现。
|
|
796
|
-
- **Phase B**:Project 管理、选择与动态多链发现,已实现。
|
|
797
|
-
- **Phase C**:动态多链 Endpoint、EVM 只读查询、ENS 与显式 stdin,已实现。
|
|
798
|
-
- **后续阶段**:事件查询、钱包签名、支付、Webhook 与 MCP 集成。
|
|
799
|
-
|
|
800
|
-
## 文档
|
|
801
|
-
|
|
802
|
-
- [ZAN CLI 设计规格](docs/superpowers/specs/2026-07-23-zan-cli-design-spec.md)
|
|
803
|
-
- [Phase A 设计](docs/superpowers/specs/2026-07-23-phase-a-cli-auth-foundation-design.md)
|
|
804
|
-
- [Phase B 设计](docs/superpowers/specs/2026-07-24-phase-b-project-dynamic-multichain-design.md)
|
|
805
|
-
- [Phase C 设计](docs/superpowers/specs/2026-07-24-phase-c-evm-readonly-queries-design.md)
|
|
691
|
+
`PROJECT_NOT_FOUND` 时检查项目 ID 及项目归属;用量查询不支持他人拥有的项目。
|