bukesiyi-cli 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -42
  3. package/dist/main.js +14 -14
  4. package/package.json +3 -3
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 杭州维诺克科技有限公司
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # bukesiyi-cli
2
2
 
3
- 《不可思议》(<https://buke41.com>)开放接口的命令行客户端,命令名是 `buke`。
3
+ 《不可思议》(<https://buke41.com>)的命令行工具,命令名是 `buke`。
4
4
 
5
- 开放接口是《不可思议》平台给程序用的入口:你的脚本、流水线,或者替你干活的 AI agent,拿一把 API 密钥,不经过网页就能调用平台。这个工具替你把密钥带对、存好。
5
+ API 调用是《不可思议》给程序用的入口:你的脚本、流水线,或者替你干活的 AI agent,拿一把 API 密钥,不经过网页就能调用平台。这个工具替你把密钥带对、存好。
6
6
 
7
7
  ## 现状
8
8
 
9
9
  装之前先看这几条:
10
10
 
11
- - **这一版只做登录这一件事**,一共三条命令:`buke login`、`buke whoami`、`buke logout`——用一把 API 密钥登录、确认它能用、把它稳妥地保存在本机。下单、查进度、下载成片这些命令现在没有,随开放接口上线后提供。
12
- - **开放接口尚未对外开通。** 现在逐个账号开通,需要联系《不可思议》的客服为账号开通。没有开通的账号拿不到密钥;装了这个工具,也登录不了。
13
- - **密钥在网页上创建,不在这个工具里。** 已经开通的账号登录 Studio,在账号页的「API 密钥」里创建、查看和吊销:<https://buke41.com/account/api-keys>。完整的密钥只在创建成功的那一刻显示一次。没有开通的账号在账号页里看不到这个入口。
11
+ - **这一版只做登录这一件事**,一共三条命令:`buke login`、`buke whoami`、`buke logout`——用一把 API 密钥登录、确认它能用、把它稳妥地保存在本机。下单、查进度、下载成片这些命令现在没有,会在后续版本提供。
12
+ - **API 调用尚未对外开通。** 现在逐个账号开通,需要联系《不可思议》的客服为账号开通(联系方式见文末「联系我们」)。没有开通的账号拿不到密钥;装了这个工具,也登录不了。
13
+ - **密钥在网页上创建,不在这个工具里。** 已经开通的账号登录《不可思议》,在右上角头像菜单的「账号设置」里打开「API 密钥」,在那里创建、查看和吊销:<https://buke41.com/account/api-keys>。完整密钥只在创建成功的那一刻显示一次。没有开通的账号在「账号设置」里看不到这个入口。
14
14
 
15
15
  下面的输出例子都是用这一版实际跑出来的,对面是一个按接口约定应答的本机模拟服务;密钥、家目录、编号是演示用的占位。
16
16
 
@@ -26,14 +26,14 @@ npm install -g bukesiyi-cli
26
26
 
27
27
  ```console
28
28
  $ buke --version
29
- bukesiyi-cli/0.1.0
29
+ bukesiyi-cli/0.1.2
30
30
  ```
31
31
 
32
32
  不想全局安装时,可以用 npx 临时运行,写法是 `npx bukesiyi-cli <命令>`,例如 `npx bukesiyi-cli whoami`。下面的例子都直接写 `buke`。
33
33
 
34
34
  ## 三步上手
35
35
 
36
- 先准备一把 API 密钥:登录 Studio,在账号页的「API 密钥」(<https://buke41.com/account/api-keys>)里创建一把——起个名字,选有效期(30 天、90 天、180 天、365 天,或者长期有效),创建成功时把显示出来的完整密钥复制下来。它只显示这一次。
36
+ 先准备一把 API 密钥:登录《不可思议》,在右上角头像菜单的「账号设置」里打开「API 密钥」(<https://buke41.com/account/api-keys>),创建一把——起个名字,选有效期(30 天、90 天、180 天、365 天,或者长期有效),创建成功时把显示出来的完整密钥复制下来。它只显示这一次。
37
37
 
38
38
  第一步,登录。它先说一句要登录到哪个地址,再请你粘贴密钥;看一眼地址对不对,然后粘贴、回车。输入不会显示在屏幕上。
39
39
 
@@ -43,8 +43,8 @@ $ buke login
43
43
  请粘贴 API 密钥(输入不会显示),回车确认:
44
44
  已登录 https://buke41.com
45
45
  密钥:CI 机器(bk_test_0123456789abcdef)
46
- 制片空间:ws-11111111222243338444555555555555(owner)
47
- 权限:open:produce
46
+ 所属团队:ws-11111111222243338444555555555555(owner)
47
+ 权限范围:open:produce
48
48
  有效期:长期有效
49
49
  凭据保存在 /home/you/.config/buke/credentials.json(只有本人可读写)
50
50
  ```
@@ -55,8 +55,8 @@ $ buke login
55
55
  $ buke whoami
56
56
  当前登录 https://buke41.com
57
57
  密钥:CI 机器(bk_test_0123456789abcdef)
58
- 制片空间:ws-11111111222243338444555555555555(owner)
59
- 权限:open:produce
58
+ 所属团队:ws-11111111222243338444555555555555(owner)
59
+ 权限范围:open:produce
60
60
  有效期:长期有效
61
61
  密钥来自:/home/you/.config/buke/credentials.json
62
62
  ```
@@ -65,7 +65,7 @@ $ buke whoami
65
65
 
66
66
  ```console
67
67
  $ buke logout
68
- 已退出登录,本机保存的密钥已删除。这把密钥本身仍然有效,要作废请吊销它
68
+ 已退出登录,本机保存的密钥已删除。这把密钥本身仍然在用,不再使用请吊销它
69
69
  ```
70
70
 
71
71
  在脚本、流水线和 AI agent 里不要粘贴:把密钥放进环境变量 `BUKE_API_KEY`(由平台的保密变量注入),或者从管道送进去:
@@ -74,8 +74,8 @@ $ buke logout
74
74
  $ printf '%s' "$KEY" | buke login
75
75
  已登录 https://buke41.com
76
76
  密钥:CI 机器(bk_test_0123456789abcdef)
77
- 制片空间:ws-11111111222243338444555555555555(owner)
78
- 权限:open:produce
77
+ 所属团队:ws-11111111222243338444555555555555(owner)
78
+ 权限范围:open:produce
79
79
  有效期:长期有效
80
80
  凭据保存在 /home/you/.config/buke/credentials.json(只有本人可读写)
81
81
  ```
@@ -84,7 +84,7 @@ $ printf '%s' "$KEY" | buke login
84
84
 
85
85
  ```console
86
86
  $ buke login bk_test_0123456789abcdef_……
87
- 错误:密钥不要写在命令行里(会留在 shell 历史和进程列表里)。请用环境变量 BUKE_API_KEY,或者通过管道传给 buke login。刚才这把如果是真的,建议吊销后重建。
87
+ 错误:密钥不要写在命令行里(会留在 shell 历史和进程列表里)。请用环境变量 BUKE_API_KEY,或者通过管道传给 buke login。刚才这把如果是真的,建议吊销后重新创建。
88
88
  (错误码 CLI_KEY_IN_ARGV)
89
89
  ```
90
90
 
@@ -93,7 +93,7 @@ $ buke login bk_test_0123456789abcdef_……
93
93
  | 命令 | 做什么 |
94
94
  | --- | --- |
95
95
  | `buke login` | 取密钥、向服务端确认它可用,然后保存到本机。密钥依次从环境变量 `BUKE_API_KEY`、标准输入、终端粘贴里取 |
96
- | `buke whoami` | 显示当前这把密钥是谁的、绑定哪个制片空间、有什么权限、什么时候到期。设了 `BUKE_API_KEY` 就用它,否则用本机保存的 |
96
+ | `buke whoami` | 显示当前这把密钥是谁的、属于哪个团队、权限范围是什么、什么时候到期。设了 `BUKE_API_KEY` 就用它,否则用本机保存的 |
97
97
  | `buke logout` | 删除本机保存的密钥。不联网,也不会吊销密钥 |
98
98
  | `buke --version` | 显示版本 |
99
99
  | `buke --help`、`buke <命令> --help` | 显示用法 |
@@ -167,52 +167,79 @@ export NO_PROXY='localhost,127.0.0.1,[::1]'
167
167
  | 0 | 成功 | 会 |
168
168
  | 2 | 参数或用法不对 | 会 |
169
169
  | 3 | 没有登录,或者密钥、账号现在不能用 | 会 |
170
- | 4 | 余额或额度不够 | 不会 |
170
+ | 4 | 余额不足 | 不会 |
171
171
  | 5 | 服务端、网络或本机出错 | 会 |
172
172
  | 6 | 报价变了 | 不会 |
173
- | 7 | 请求太频繁,稍后重试 | 会 |
173
+ | 7 | 请求太频繁,请稍后再试 | 会 |
174
174
  | 8 | 等待超时 | 不会 |
175
175
  | 9 | 任务失败 | 不会 |
176
176
  | 10 | 要找的东西不存在 | 会 |
177
- | 130 | 被 Ctrl-C 打断;运行到一半被要求结束(SIGTERM)是 143,终端断开(SIGHUP)是 129 | 会 |
177
+ | 130 | 被 Ctrl-C 打断 | 会 |
178
+
179
+ 运行到一半被别的信号打断时数字不同:被要求结束(SIGTERM)是 143,终端断开(SIGHUP)是 129。
178
180
 
179
181
  脚本里先看退出码,再看 `--json` 输出里的 `error.code` 和 `error.retryable`;遇到 7,按 `error.retryAfterSeconds` 给的秒数等够了再试。要让脚本调得到 `buke`,它得在 PATH 上:全局安装之后就在。
180
182
 
183
+ ## 错误码
184
+
185
+ 出错时,给人看的输出里有一行「(错误码 …)」;加了 `--json` 时,错误码在 `error.code` 里。错误码有两类:
186
+
187
+ - `OPEN_API_` 开头的是服务端回的:请求送到了,服务端没有接受。报错的第一行是服务端的原话,写明了原因和该怎么办;这类报错带一个请求编号(`--json` 里是 `error.traceId`),联系客服时把它一起给出。退出码按上面那张表:密钥或账号现在不能用是 3,请求太频繁是 7,这个地址上没有接口是 10,服务端出错是 5。
188
+ - `CLI_` 开头的是这个工具自己发现的问题:命令的写法、密钥的给法、服务地址、本机的凭据文件、网络。这一版一共有下面这些:
189
+
190
+ | 错误码 | 退出码 | 怎么办 |
191
+ | --- | --- | --- |
192
+ | `CLI_USAGE` | 2 | 命令或选项写错了。运行 `buke --help` 对照用法 |
193
+ | `CLI_KEY_IN_ARGV` | 2 | 命令行参数里出现了像密钥的东西,命令什么都没做。改用环境变量 `BUKE_API_KEY`、管道或终端粘贴;那把密钥如果是真的,当作已经泄露:吊销后换一把 |
194
+ | `CLI_KEY_MISSING` | 2 | `login` 没有读到密钥:没设 `BUKE_API_KEY`,标准输入又是空的,或者等了 30 秒还没有结束。按「三步上手」里的三种给法之一重来 |
195
+ | `CLI_KEY_MALFORMED` | 2 | 给的东西不像一把密钥:不是 `bk_` 开头,或者中间有空格、换行。核对是不是贴错、贴漏了,或者把别的内容送了进来 |
196
+ | `CLI_BASE_URL_INVALID` | 2 | 服务地址不是一个完整的网址,或者带了路径、参数、账号密码。只写到域名为止,例如 `https://buke41.com` |
197
+ | `CLI_BASE_URL_INSECURE` | 2 | 服务地址不是 https(本机调试用的 `localhost`、`127.0.0.1`、`[::1]` 除外);或者地址是本机的明文地址,而环境里开着代理。换成 https 地址;本机调试遇到代理时,把本机地址排除在代理之外(见「环境变量」一节末尾) |
198
+ | `CLI_BASE_URL_MISMATCH` | 2 | `whoami` 用的是本机保存的密钥,而这次指定的地址和登录时的不一样,请求没有发出。去掉 `--base-url` 或 `BUKE_BASE_URL`;确实要换地址,就对新地址重新 `buke login` |
199
+ | `CLI_NOT_LOGGED_IN` | 3 | `whoami` 找不到密钥:没设 `BUKE_API_KEY`,本机也没有保存。先 `buke login`,或者设置 `BUKE_API_KEY` |
200
+ | `CLI_CONFIG_DIR_INVALID` | 2 | 不知道凭据该放在哪里:`BUKE_CONFIG_DIR` 写成了相对路径,或者系统说不出家目录在哪。把 `BUKE_CONFIG_DIR` 写成绝对路径,或者用 `~/` 开头 |
201
+ | `CLI_CREDENTIALS_UNREADABLE` | 5 | 本机的凭据文件读不懂(内容损坏、被手改过)或者读不了(没有权限,或者那个位置上不是一个普通文件)。`buke logout` 清掉后重新 `buke login`;是权限问题就先修权限 |
202
+ | `CLI_CREDENTIALS_WRITE_FAILED` | 5 | 凭据文件没能保存或没能删除,多半是目录没有写权限。修好目录权限,或者用 `BUKE_CONFIG_DIR` 换一个目录,再运行一次 |
203
+ | `CLI_NETWORK` | 5 | 连不上服务地址,冒号后面是系统给的原因。先核对地址和网络,确认无误后可以重试;证书和代理的情况见表后 |
204
+ | `CLI_TIMEOUT` | 5 | 等了 15 秒,服务端没有回完。稍后重试;总是超时就检查网络,或者中间有没有代理、防火墙拦着 |
205
+ | `CLI_REDIRECT` | 5 | 服务器要求跳转到别处;为了不把密钥带过去,没有跟随。核对服务地址(报错的括号里是跳转指向的地方),用正确的地址重新登录 |
206
+ | `CLI_BAD_RESPONSE` | 5 | 收到的回应不是约定的格式,多半是中间的网关或别的网站回的,括号里是 HTTP 状态码。状态码是 429 或 5xx 时稍后重试;其余的先核对服务地址,重试多半没有用 |
207
+ | `CLI_INTERRUPTED` | 130 | 命令被打断了:按了 Ctrl-C,或者收到了 SIGTERM、SIGHUP(这两种的退出码是 143、129)。需要时重新运行 |
208
+ | `CLI_INTERNAL` | 5 | 工具自己出了没有料到的错,正常使用不应该遇到。把完整的报错和运行的命令(不要带密钥)发给客服,联系方式见文末「联系我们」 |
209
+
210
+ 两种常见的「连不上」:
211
+
212
+ - **内部环境用的是自签证书**:报 `CLI_NETWORK`,冒号后面是 `DEPTH_ZERO_SELF_SIGNED_CERT` 这类证书原因。不要关掉证书校验;用 Node.js 的环境变量 `NODE_EXTRA_CA_CERTS` 指向你们的根证书文件,再运行。
213
+ - **要走代理**:`buke` 默认不读 `HTTP_PROXY`、`HTTPS_PROXY`,设了也是直连。要走代理,再加 Node.js 自己的开关 `NODE_USE_ENV_PROXY=1`:在 Node.js 24.18 上,加了它之后发往 https 地址的请求经 `HTTPS_PROXY` 指的代理出去;在 Node.js 20.19 和 22.19 上,加了它也仍然是直连。开着这个开关时连不上或者超时,出问题的也可能是代理——报错里写的是服务地址,给人看的输出最后会多一行提示。
214
+
215
+ 报错说「没有这个接口」,或者回应是 HTTP 404(退出码是 10;别的网站回的 404 报 `CLI_BAD_RESPONSE`,退出码是 5),原因只有两种:还没有对外开通,或者服务地址写错了。先核对这次有没有给 `--base-url`、环境里有没有 `BUKE_BASE_URL`;地址没错,就是还没有开通,重试没有用。
216
+
181
217
  ## 安全须知
182
218
 
183
- - 密钥就是权限:拿到它的人,可以用你的账号在那个制片空间里调用开放接口。
219
+ - 密钥就是权限:拿到它的人,可以以你这个账号的身份,在密钥所属的团队里调用《不可思议》。
184
220
  - 密钥只要进过命令行参数、地址、日志、截图、聊天或者和 AI 的对话,就当作已经泄露:吊销它,换一把新的。
185
- - `buke logout` 只删除本机的文件,**不等于吊销**;密钥在服务端仍然有效。
186
- - 吊销和新建都由账号本人在 Studio 账号页的「API 密钥」里做:<https://buke41.com/account/api-keys>。改登录密码不会让密钥失效,要作废只能吊销。
187
- - 输出里的公开前缀(形如 `bk_test_0123456789abcdef`)、密钥编号、追踪编号、错误码可以放心给别人看;完整的密钥不会出现在输出里。
221
+ - `buke logout` 只删除本机的文件,**不等于吊销**;这把密钥本身仍然在用。
222
+ - 创建和吊销都由账号本人在「账号设置」的「API 密钥」里做:<https://buke41.com/account/api-keys>。改登录密码不会让密钥失效;要让一把密钥不能再用,只能吊销它。
223
+ - 输出里的编号前缀(形如 `bk_test_0123456789abcdef`)、密钥编号、请求编号、错误码可以放心给别人看;完整密钥不会出现在输出里。
188
224
  - 每台机器、每条流水线、每个 agent 各用一把密钥,能设有效期就设。
189
225
 
190
226
  ## 从仓库源码运行
191
227
 
192
- 这一节只给拿得到代码仓库、要改这个工具的人;只是使用的话,按上面「安装」一节从 npm 装就够了。
228
+ 这一节只给拿得到代码仓库、要改这个工具的人:构建、直接运行、让 `buke` 这个名字指到仓库里那一份的做法,写在仓库的 `docs/open-api/cli.md` 第 2.2 节。只是使用的话,按上面「安装」一节从 npm 装就够了。
193
229
 
194
- 在仓库根目录、依赖已经装好的前提下,先构建,再用 Node.js 直接运行:
230
+ ## 许可
195
231
 
196
- ```sh
197
- npm run build -w bukesiyi-cli
198
- node packages/cli/bin/buke.js --version
199
- ```
232
+ 这个包里的代码按 MIT 许可发布,全文见包内的 `LICENSE` 文件。
200
233
 
201
- ```text
202
- bukesiyi-cli/0.1.0
203
- ```
234
+ 许可只管这个命令行工具的代码本身;用它调用《不可思议》的服务,仍然按注册账号时同意的用户协议。
204
235
 
205
- 要让 `buke` 这个名字指到仓库里的这一份,并且在脚本和别的程序里也能用,就在 PATH 上的某个目录里放一个两行的小脚本。下面放在 `$HOME/bin`;先把 `BUKE_REPO` 设成仓库所在的绝对路径:
236
+ 「不可思议」的名称与标识不在许可范围内。
206
237
 
207
- ```sh
208
- mkdir -p "$HOME/bin"
209
- printf '#!/bin/sh\nexec node "%s/packages/cli/bin/buke.js" "$@"\n' "$BUKE_REPO" > "$HOME/bin/buke"
210
- chmod +x "$HOME/bin/buke"
211
- export PATH="$HOME/bin:$PATH"
212
- ```
238
+ ## 联系我们
213
239
 
214
- 最后那句 `export PATH=…` 只对当前这个 shell 和它启动的程序有效;要长期用,把它写进 shell 的启动文件。
240
+ - 网站:<https://buke41.com>
241
+ - 客服邮箱:<winrock.inc@outlook.com>。为账号开通、这份说明没写到的地方、用的时候遇到的问题,都可以发到这里。
215
242
 
216
- ## 更多
243
+ 报问题时请带上:运行的命令、完整的报错(连同错误码;有请求编号的话一起给)、`buke --version` 的输出、大概的时间。**不要把完整密钥发过来**——要指明是哪一把,给编号前缀(形如 `bk_test_0123456789abcdef`)就够了。
217
244
 
218
- 完整的使用说明(鉴权是怎么做的、密钥的三种给法、地址规则、每条命令的输出与 JSON 字段、错误对照表、给脚本和 AI agent 的建议、常见问题排查)在代码仓库的 `docs/open-api/cli.md` 里,随开放接口开通后对外公布。在那之前,这份说明没写到的地方,请联系客服。
245
+ 更完整的使用说明(鉴权是怎么做的、每条命令的输出与 JSON 字段、给脚本和 AI agent 的建议、更多的问题排查)随对外开通一起公布。
package/dist/main.js CHANGED
@@ -394,7 +394,7 @@ async function readNewKey(io) {
394
394
 
395
395
  // package.json
396
396
  var name = "bukesiyi-cli";
397
- var version = "0.1.0";
397
+ var version = "0.1.2";
398
398
 
399
399
  // src/version.ts
400
400
  var PACKAGE_NAME = name;
@@ -404,7 +404,7 @@ var VERSION = version;
404
404
  var DEFAULT_REQUEST_TIMEOUT_MS = 15e3;
405
405
  var ME_PATH = "/api/open/v1/me";
406
406
  var MAX_BODY_BYTES = 1024 * 1024;
407
- var NOT_FOUND_HINT = "\u8FD9\u4E2A\u5730\u5740\u4E0A\u6CA1\u6709\u5F00\u653E\u63A5\u53E3\uFF1A\u53EF\u80FD\u8FD8\u6CA1\u6709\u5BF9\u5916\u5F00\u901A\uFF0C\u6216\u8005 --base-url \u5199\u9519\u4E86";
407
+ var NOT_FOUND_HINT = "\u8FD9\u4E2A\u5730\u5740\u4E0D\u63D0\u4F9B API \u8C03\u7528\uFF1A\u53EF\u80FD\u8FD8\u6CA1\u6709\u5BF9\u5916\u5F00\u901A\uFF0C\u6216\u8005 --base-url \u5199\u9519\u4E86";
408
408
  function userAgent() {
409
409
  return `${PACKAGE_NAME}/${VERSION} node/${process.versions.node}`;
410
410
  }
@@ -876,7 +876,7 @@ function errorDocument(error) {
876
876
  }
877
877
  function errorLines(error) {
878
878
  const details = [`\u9519\u8BEF\u7801 ${singleLine(error.code)}`];
879
- if (error.traceId) details.push(`\u8FFD\u8E2A\u7F16\u53F7 ${singleLine(error.traceId)}`);
879
+ if (error.traceId) details.push(`\u8BF7\u6C42\u7F16\u53F7 ${singleLine(error.traceId)}`);
880
880
  if (error.retryAfterSeconds !== void 0) details.push(`${error.retryAfterSeconds} \u79D2\u540E\u53EF\u4EE5\u91CD\u8BD5`);
881
881
  return [`\u9519\u8BEF\uFF1A${singleLine(error.message)}`, `\uFF08${details.join("\uFF1B")}\uFF09`, ...error.hints];
882
882
  }
@@ -941,8 +941,8 @@ function identityLines(me, displayPrefix) {
941
941
  const scopes = me.key.scopes.map(singleLine).filter((scope) => scope !== "");
942
942
  return [
943
943
  name2 === "" ? `\u5BC6\u94A5\uFF1A${prefix}` : `\u5BC6\u94A5\uFF1A${name2}\uFF08${prefix}\uFF09`,
944
- `\u5236\u7247\u7A7A\u95F4\uFF1A${singleLine(me.workspace.id)}\uFF08${singleLine(me.workspace.role)}\uFF09`,
945
- `\u6743\u9650\uFF1A${scopes.length > 0 ? scopes.join("\u3001") : "\u65E0"}`,
944
+ `\u6240\u5C5E\u56E2\u961F\uFF1A${singleLine(me.workspace.id)}\uFF08${singleLine(me.workspace.role)}\uFF09`,
945
+ `\u6743\u9650\u8303\u56F4\uFF1A${scopes.length > 0 ? scopes.join("\u3001") : "\u65E0"}`,
946
946
  `\u6709\u6548\u671F\uFF1A${me.key.expiresAt === null ? "\u957F\u671F\u6709\u6548" : `\u5230 ${singleLine(me.key.expiresAt)} \u4E3A\u6B62`}`
947
947
  ];
948
948
  }
@@ -988,7 +988,7 @@ async function login({ io, out, baseUrl: flag }) {
988
988
  async function logout({ io, out }) {
989
989
  const removed = await deleteCredentials(io, (line) => out.notice(line));
990
990
  out.result(
991
- [removed ? "\u5DF2\u9000\u51FA\u767B\u5F55\uFF0C\u672C\u673A\u4FDD\u5B58\u7684\u5BC6\u94A5\u5DF2\u5220\u9664\u3002\u8FD9\u628A\u5BC6\u94A5\u672C\u8EAB\u4ECD\u7136\u6709\u6548\uFF0C\u8981\u4F5C\u5E9F\u8BF7\u540A\u9500\u5B83" : "\u672C\u673A\u6CA1\u6709\u4FDD\u5B58\u7684\u5BC6\u94A5"],
991
+ [removed ? "\u5DF2\u9000\u51FA\u767B\u5F55\uFF0C\u672C\u673A\u4FDD\u5B58\u7684\u5BC6\u94A5\u5DF2\u5220\u9664\u3002\u8FD9\u628A\u5BC6\u94A5\u672C\u8EAB\u4ECD\u7136\u5728\u7528\uFF0C\u4E0D\u518D\u4F7F\u7528\u8BF7\u540A\u9500\u5B83" : "\u672C\u673A\u6CA1\u6709\u4FDD\u5B58\u7684\u5BC6\u94A5"],
992
992
  { removed, credentialsPath: credentialsPath(io) }
993
993
  );
994
994
  if (keyFromEnv(io.env) !== null) {
@@ -1081,7 +1081,7 @@ var COMMANDS = {
1081
1081
  help: [
1082
1082
  "\u7528\u6CD5\uFF1Abuke whoami [--base-url <\u5730\u5740>] [--json]",
1083
1083
  "",
1084
- "\u5411\u670D\u52A1\u7AEF\u786E\u8BA4\u5F53\u524D\u7528\u7684\u662F\u54EA\u628A\u5BC6\u94A5\uFF1A\u5B83\u5C5E\u4E8E\u54EA\u4E2A\u5236\u7247\u7A7A\u95F4\u3001\u6709\u54EA\u4E9B\u6743\u9650\u3001\u4EC0\u4E48\u65F6\u5019\u5230\u671F\u3002",
1084
+ "\u5411\u670D\u52A1\u7AEF\u786E\u8BA4\u5F53\u524D\u7528\u7684\u662F\u54EA\u628A\u5BC6\u94A5\uFF1A\u5B83\u5C5E\u4E8E\u54EA\u4E2A\u56E2\u961F\u3001\u6743\u9650\u8303\u56F4\u662F\u4EC0\u4E48\u3001\u4EC0\u4E48\u65F6\u5019\u5230\u671F\u3002",
1085
1085
  "\u8BBE\u4E86\u73AF\u5883\u53D8\u91CF BUKE_API_KEY \u65F6\u7528\u5B83\uFF0C\u5426\u5219\u7528 buke login \u4FDD\u5B58\u5728\u672C\u673A\u7684\u90A3\u4E00\u628A\u3002",
1086
1086
  "\u672C\u673A\u4FDD\u5B58\u7684\u5BC6\u94A5\u53EA\u4F1A\u53D1\u5F80\u767B\u5F55\u65F6\u7684\u90A3\u4E2A\u5730\u5740\u3002",
1087
1087
  "",
@@ -1096,7 +1096,7 @@ var COMMANDS = {
1096
1096
  help: [
1097
1097
  "\u7528\u6CD5\uFF1Abuke logout [--json]",
1098
1098
  "",
1099
- "\u5220\u9664\u672C\u673A\u4FDD\u5B58\u7684\u5BC6\u94A5\u3002\u8FD9\u628A\u5BC6\u94A5\u672C\u8EAB\u4ECD\u7136\u6709\u6548\uFF0C\u8981\u4F5C\u5E9F\u8BF7\u540A\u9500\u5B83\u3002",
1099
+ "\u5220\u9664\u672C\u673A\u4FDD\u5B58\u7684\u5BC6\u94A5\u3002\u8FD9\u628A\u5BC6\u94A5\u672C\u8EAB\u4ECD\u7136\u5728\u7528\uFF0C\u4E0D\u518D\u4F7F\u7528\u8BF7\u540A\u9500\u5B83\u3002",
1100
1100
  "",
1101
1101
  "\u9009\u9879\uFF1A",
1102
1102
  " --json \u53EA\u5728\u6807\u51C6\u8F93\u51FA\u6253\u5370\u4E00\u4E2A JSON \u6587\u6863\uFF0C\u65B9\u4FBF\u811A\u672C\u8BFB\u53D6"
@@ -1104,11 +1104,11 @@ var COMMANDS = {
1104
1104
  }
1105
1105
  };
1106
1106
  var GENERAL_HELP = [
1107
- "buke\uFF1A\u300A\u4E0D\u53EF\u601D\u8BAE\u300B\u5F00\u653E\u63A5\u53E3\u7684\u547D\u4EE4\u884C\u5BA2\u6237\u7AEF",
1107
+ "buke\uFF1A\u300A\u4E0D\u53EF\u601D\u8BAE\u300B\u7684\u547D\u4EE4\u884C\u5DE5\u5177",
1108
1108
  "",
1109
1109
  "\u7528\u6CD5\uFF1A",
1110
1110
  " buke login [--base-url <\u5730\u5740>] [--json] \u7528\u4E00\u628A API \u5BC6\u94A5\u767B\u5F55\uFF0C\u5E76\u628A\u5B83\u4FDD\u5B58\u5728\u672C\u673A",
1111
- " buke whoami [--base-url <\u5730\u5740>] [--json] \u67E5\u770B\u5F53\u524D\u7528\u7684\u662F\u54EA\u628A\u5BC6\u94A5\u3001\u5C5E\u4E8E\u54EA\u4E2A\u5236\u7247\u7A7A\u95F4",
1111
+ " buke whoami [--base-url <\u5730\u5740>] [--json] \u67E5\u770B\u5F53\u524D\u7528\u7684\u662F\u54EA\u628A\u5BC6\u94A5\u3001\u5C5E\u4E8E\u54EA\u4E2A\u56E2\u961F",
1112
1112
  " buke logout [--json] \u9000\u51FA\u767B\u5F55\uFF0C\u5220\u9664\u672C\u673A\u4FDD\u5B58\u7684\u5BC6\u94A5",
1113
1113
  " buke --help | -h \u663E\u793A\u8FD9\u4EFD\u8BF4\u660E\uFF1Bbuke <\u547D\u4EE4> --help \u770B\u5355\u6761\u547D\u4EE4",
1114
1114
  " buke --version | -v \u663E\u793A\u7248\u672C\u53F7",
@@ -1131,16 +1131,16 @@ var GENERAL_HELP = [
1131
1131
  " 0 \u6210\u529F",
1132
1132
  " 2 \u53C2\u6570\u6216\u7528\u6CD5\u4E0D\u5BF9",
1133
1133
  " 3 \u6CA1\u6709\u767B\u5F55\uFF0C\u6216\u8005\u5BC6\u94A5\u65E0\u6548\u3001\u5DF2\u540A\u9500\u3001\u5DF2\u8FC7\u671F\u3001\u6CA1\u6709\u6743\u9650",
1134
- " 4 \u4F59\u989D\u6216\u989D\u5EA6\u4E0D\u591F",
1134
+ " 4 \u4F59\u989D\u4E0D\u8DB3",
1135
1135
  " 5 \u670D\u52A1\u7AEF\u6216\u7F51\u7EDC\u51FA\u9519\uFF1B\u672C\u673A\u7684\u51ED\u636E\u6587\u4EF6\u8BFB\u4E0D\u4E86\u3001\u5199\u4E0D\u4E86\u4E5F\u662F\u8FD9\u4E2A\u7801",
1136
1136
  " 6 \u62A5\u4EF7\u53D8\u4E86",
1137
- " 7 \u8BF7\u6C42\u592A\u9891\u7E41\uFF0C\u7A0D\u540E\u91CD\u8BD5",
1137
+ " 7 \u8BF7\u6C42\u592A\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",
1138
1138
  " 8 \u7B49\u5F85\u8D85\u65F6",
1139
1139
  " 9 \u4EFB\u52A1\u5931\u8D25",
1140
1140
  " 10 \u8981\u627E\u7684\u4E1C\u897F\u4E0D\u5B58\u5728",
1141
1141
  " 130 \u88AB Ctrl-C \u6253\u65AD",
1142
1142
  "",
1143
- "\u5F53\u524D\u7248\u672C\u53EA\u6709\u767B\u5F55\u76F8\u5173\u7684\u547D\u4EE4\uFF1B\u4E0B\u5355\u3001\u67E5\u8FDB\u5EA6\u3001\u4E0B\u8F7D\u7B49\u547D\u4EE4\u968F\u5F00\u653E\u63A5\u53E3\u4E0A\u7EBF\u540E\u63D0\u4F9B\u3002"
1143
+ "\u5F53\u524D\u7248\u672C\u53EA\u6709\u767B\u5F55\u76F8\u5173\u7684\u547D\u4EE4\uFF1B\u4E0B\u5355\u3001\u67E5\u8FDB\u5EA6\u3001\u4E0B\u8F7D\u7B49\u547D\u4EE4\u4F1A\u5728\u540E\u7EED\u7248\u672C\u63D0\u4F9B\u3002"
1144
1144
  ].join("\n");
1145
1145
  var MAX_ECHO_LENGTH = 40;
1146
1146
  function echo(item) {
@@ -1187,7 +1187,7 @@ async function dispatch(argv, io, out) {
1187
1187
  throw new CliError({
1188
1188
  code: "CLI_KEY_IN_ARGV",
1189
1189
  exitCode: EXIT.USAGE,
1190
- message: "\u5BC6\u94A5\u4E0D\u8981\u5199\u5728\u547D\u4EE4\u884C\u91CC\uFF08\u4F1A\u7559\u5728 shell \u5386\u53F2\u548C\u8FDB\u7A0B\u5217\u8868\u91CC\uFF09\u3002\u8BF7\u7528\u73AF\u5883\u53D8\u91CF BUKE_API_KEY\uFF0C\u6216\u8005\u901A\u8FC7\u7BA1\u9053\u4F20\u7ED9 buke login\u3002\u521A\u624D\u8FD9\u628A\u5982\u679C\u662F\u771F\u7684\uFF0C\u5EFA\u8BAE\u540A\u9500\u540E\u91CD\u5EFA\u3002"
1190
+ message: "\u5BC6\u94A5\u4E0D\u8981\u5199\u5728\u547D\u4EE4\u884C\u91CC\uFF08\u4F1A\u7559\u5728 shell \u5386\u53F2\u548C\u8FDB\u7A0B\u5217\u8868\u91CC\uFF09\u3002\u8BF7\u7528\u73AF\u5883\u53D8\u91CF BUKE_API_KEY\uFF0C\u6216\u8005\u901A\u8FC7\u7BA1\u9053\u4F20\u7ED9 buke login\u3002\u521A\u624D\u8FD9\u628A\u5982\u679C\u662F\u771F\u7684\uFF0C\u5EFA\u8BAE\u540A\u9500\u540E\u91CD\u65B0\u521B\u5EFA\u3002"
1191
1191
  });
1192
1192
  }
1193
1193
  const parsed = parse(argv);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bukesiyi-cli",
3
- "version": "0.1.0",
4
- "description": "《不可思议》开放接口的命令行客户端(命令名 buke)",
3
+ "version": "0.1.2",
4
+ "description": "《不可思议》的命令行工具:用 API 密钥调用(命令名 buke)",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "buke": "bin/buke.js"
@@ -14,7 +14,7 @@
14
14
  "engines": {
15
15
  "node": ">=20"
16
16
  },
17
- "license": "UNLICENSED",
17
+ "license": "MIT",
18
18
  "homepage": "https://buke41.com",
19
19
  "publishConfig": {
20
20
  "access": "public",