sino-bc-cli 1.8.2 → 1.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +588 -624
- package/dist/SKILL.md +34 -26
- package/dist/affordance/biz-line.md +129 -63
- package/dist/affordance/sso.md +15 -0
- package/dist/api-doc/{README.md → custom/README.md} +92 -86
- package/dist/api-doc/system/biz-line-query.md +19 -0
- package/dist/api-doc/system/biz-line-strategy.md +285 -0
- package/dist/api-doc/system/sso.md +13 -0
- package/dist/generated/api-catalog.json +1063 -0
- package/dist/index.js +1 -1
- package/dist/skills/{sino-bc-shared → custom/sino-bc-shared}/SKILL.md +33 -39
- package/dist/skills/{sino-bc-shared → custom/sino-bc-shared}/references/config-and-env.md +15 -12
- package/dist/skills/{sino-bc-shared → custom/sino-bc-shared}/references/output-contract.md +20 -20
- package/dist/skills/{sino-bc-shared → custom/sino-bc-shared}/references/write-approval.md +18 -18
- package/dist/skills/{sino-bc-biz-line → system/sino-bc-biz-line}/SKILL.md +61 -64
- package/dist/skills/system/sino-bc-biz-line/references/long-tail-api.md +17 -0
- package/dist/skills/system/sino-bc-sso/SKILL.md +35 -0
- package/package.json +69 -69
- package/scripts/postinstall.cjs +28 -28
- package/dist/api-doc/biz-line-query.md +0 -218
- package/dist/api-doc/biz-line-strategy.md +0 -319
- package/dist/skills/sino-bc-biz-line/references/enums.md +0 -7
- package/dist/skills/sino-bc-biz-line/references/long-tail-api.md +0 -16
- package/dist/skills/sino-bc-shared/references/mcp-reload.md +0 -9
package/README.md
CHANGED
|
@@ -1,624 +1,588 @@
|
|
|
1
|
-
# sino-bc-cli
|
|
2
|
-
|
|
3
|
-
BeyondClick 命令行工具集合 - 提供快捷访问 BeyondClick 平台的命令行接口。
|
|
4
|
-
|
|
5
|
-
## Install
|
|
6
|
-
|
|
7
|
-
> ⚠️ 本包是**全局 CLI 工具**。npm 官网右侧 Install 框里的 `npm i sino-bc-cli` 是网站写死的固定文案,不是本包的推荐用法,请以下面的命令为准(注意 `-g`)。
|
|
8
|
-
>
|
|
9
|
-
> 运行环境要求 Node.js >= 24.0.0。
|
|
10
|
-
|
|
11
|
-
### ① 安装最新版本(推荐)
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# npm
|
|
15
|
-
npm i sino-bc-cli@latest -g
|
|
16
|
-
|
|
17
|
-
# pnpm
|
|
18
|
-
pnpm add -g sino-bc-cli@latest
|
|
19
|
-
|
|
20
|
-
# yarn
|
|
21
|
-
yarn global add sino-bc-cli@latest
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
已经装过旧版本时,执行同样的命令即可升级覆盖。想先确认远端最新版本号:
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
npm view sino-bc-cli version # 查看 latest 版本号
|
|
28
|
-
npm outdated -g sino-bc-cli # 对比本地全局版本是否过期
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### ② 安装指定版本
|
|
32
|
-
|
|
33
|
-
把 `@latest` 换成目标版本号即可,适用于需要回退或锁定版本的场景:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
# npm
|
|
37
|
-
npm i sino-bc-cli@1.0.5 -g
|
|
38
|
-
|
|
39
|
-
# pnpm
|
|
40
|
-
pnpm add -g sino-bc-cli@1.0.5
|
|
41
|
-
|
|
42
|
-
# yarn
|
|
43
|
-
yarn global add sino-bc-cli@1.0.5
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
查看全部可安装版本:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
npm view sino-bc-cli versions --json
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### ③ 卸载
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
# npm
|
|
56
|
-
npm uninstall -g sino-bc-cli
|
|
57
|
-
|
|
58
|
-
# pnpm
|
|
59
|
-
pnpm remove -g sino-bc-cli
|
|
60
|
-
|
|
61
|
-
# yarn
|
|
62
|
-
yarn global remove sino-bc-cli
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
> 如果当初是在源码目录用 `npm link` 做的开发链接,请改用 `npm unlink -g sino-bc-cli` 解除。
|
|
66
|
-
|
|
67
|
-
### ④ 验证安装
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
sino-bc-cli --version # 输出版本号,说明命令已可用
|
|
71
|
-
sino-bc-cli --help # 输出帮助信息和全部可用命令
|
|
72
|
-
npm ls -g --depth=0 sino-bc-cli # 确认全局安装的版本
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
若提示「command not found / 无法将 sino-bc-cli 项识别为命令」,说明 npm 全局 bin 目录不在 `PATH` 中。用 `npm prefix -g` 查看全局安装根目录(Windows 下该目录即 bin 目录,macOS / Linux 下为其 `bin` 子目录),把它加入环境变量后重开终端。
|
|
76
|
-
|
|
77
|
-
### ⑤ 初始化(必须执行一次)
|
|
78
|
-
|
|
79
|
-
**装完之后必须完成 `/init` 初始化,CLI 的 Agent 技能才会生效。**
|
|
80
|
-
|
|
81
|
-
全局安装时 `postinstall` 会自动执行一次 `/init`。但在以下情况会被跳过,需要手动补执行:使用 `--ignore-scripts` 安装、安装目录权限不足、或通过 `npx` 临时运行。
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
sino-bc-cli /init
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
`/init`
|
|
88
|
-
|
|
89
|
-
> 每次升级版本后请重新执行一次 `sino-bc-cli /init`,以刷新本地技能文件。
|
|
90
|
-
|
|
91
|
-
### ⑥ 免安装临时执行
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
npx sino-bc-cli --help
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
注意 `npx` 方式不会持久注册 Agent 技能,需要技能能力时仍请走全局安装 + `/init`。
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## 📚 技术栈说明
|
|
102
|
-
|
|
103
|
-
| 技术/依赖 | 版本要求 | 用途说明 |
|
|
104
|
-
| :------------- | :----------- | :------------------------------------------------------ |
|
|
105
|
-
| **Node.js** | `>= v24.0.0` | CLI 运行时环境,要求使用 v24 及以上版本 |
|
|
106
|
-
| **TypeScript** | `^v5.5.0` | 开发语言,提供静态类型检查和更好的可维护性 |
|
|
107
|
-
| **lodash** | `^4.17.21` | 工具函数库,提供对象/数组/字符串处理等高效方法 |
|
|
108
|
-
| **dayjs** | `^1.11.11` | 轻量级日期处理库,替代 Moment.js 处理日期时间格式化 |
|
|
109
|
-
| **axios** | `^1.7.0` | HTTP 客户端库,用于网络请求、连通性检测等 |
|
|
110
|
-
| **crypto-js** | `^4.2.0` | 加密算法库,提供 MD5、SHA-256、AES、Base64 等加解密能力 |
|
|
111
|
-
| **commander** | `^12.1.0` | 命令行参数解析框架(预留,当前采用自研注册器模式) |
|
|
112
|
-
| **chalk** | `^4.1.2` | 终端彩色输出库,用于美化日志和帮助信息 |
|
|
113
|
-
| **open** | `^8.4.2` | 跨平台文件/URL 打开工具(兼容备用方案) |
|
|
114
|
-
|
|
115
|
-
### 开发依赖
|
|
116
|
-
|
|
117
|
-
| 依赖 | 版本 | 用途 |
|
|
118
|
-
| :----------------- | :-------- | :-------------------------------- |
|
|
119
|
-
| `@types/node` | `^22.0.0` | Node.js 类型声明 |
|
|
120
|
-
| `@types/lodash` | `^4.17.5` | lodash 类型声明 |
|
|
121
|
-
| `@types/crypto-js` | `^4.2.2` | crypto-js 类型声明 |
|
|
122
|
-
| `ts-node` | `^10.9.2` | 开发阶段直接运行 TypeScript 代码 |
|
|
123
|
-
| `rimraf` | `^5.0.7` | 跨平台目录清理工具,替代 `rm -rf` |
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## 📁 项目结构说明
|
|
128
|
-
|
|
129
|
-
项目采用 **模块化、低耦合、高内聚** 的分层设计,便于后续扩展和维护。
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
sino-bc-cli/
|
|
133
|
-
├── src/ # 源代码目录(TypeScript)
|
|
134
|
-
│ ├── index.ts # 🚀 CLI 入口文件,bin 关联点
|
|
135
|
-
│ │
|
|
136
|
-
│ ├── core/ # 🧠 核心模块层
|
|
137
|
-
│ │ ├── index.ts # 核心模块统一导出
|
|
138
|
-
│ │ ├── cli-app.ts # CLI 应用主类(参数解析、帮助展示、命令分发)
|
|
139
|
-
│ │ ├── route.ts # argv 路由(斜杠命令 / 域 + Shortcut)
|
|
140
|
-
│ │ └── command-registry.ts # 命令注册器(注册、查找、执行、注销命令)
|
|
141
|
-
│ │
|
|
142
|
-
│ ├── commands/ # 📦 命令实现层(每命令一个文件,可独立扩展)
|
|
143
|
-
│ │ ├── index.ts # 命令批量注册入口
|
|
144
|
-
│ │ ├── init.command.ts # /init 命令实现(注册 Agent 技能 +
|
|
145
|
-
│ │ ├── api
|
|
146
|
-
│ │ ├──
|
|
147
|
-
│ │ ├──
|
|
148
|
-
│ │ ├──
|
|
149
|
-
│ │
|
|
150
|
-
│ │
|
|
151
|
-
│
|
|
152
|
-
│ │
|
|
153
|
-
│ ├──
|
|
154
|
-
│ │ ├──
|
|
155
|
-
│ │
|
|
156
|
-
│ │
|
|
157
|
-
│ │
|
|
158
|
-
│ │ ├──
|
|
159
|
-
│ │ ├──
|
|
160
|
-
│ │
|
|
161
|
-
│ │
|
|
162
|
-
│
|
|
163
|
-
│ │
|
|
164
|
-
│ ├──
|
|
165
|
-
│ │ ├──
|
|
166
|
-
│ │ ├──
|
|
167
|
-
│ │ ├──
|
|
168
|
-
│ │ ├──
|
|
169
|
-
│ │ ├──
|
|
170
|
-
│ │ ├──
|
|
171
|
-
│ │ ├──
|
|
172
|
-
│ │ ├──
|
|
173
|
-
│ │ ├──
|
|
174
|
-
│ │ ├── prompt.ts
|
|
175
|
-
│ │
|
|
176
|
-
│ │
|
|
177
|
-
│
|
|
178
|
-
│ │
|
|
179
|
-
│ │
|
|
180
|
-
│
|
|
181
|
-
│
|
|
182
|
-
│
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
│
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
├──
|
|
190
|
-
│
|
|
191
|
-
│
|
|
192
|
-
|
|
193
|
-
├──
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
# 查看
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
npm
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
sino-bc-cli /
|
|
308
|
-
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
|
328
|
-
|
|
|
329
|
-
| `/
|
|
330
|
-
| `/
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
|
335
|
-
|
|
|
336
|
-
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
|
341
|
-
|
|
|
342
|
-
| `biz-line
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
|
349
|
-
|
|
|
350
|
-
|
|
351
|
-
`--
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
|
376
|
-
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
#
|
|
391
|
-
sino-bc-cli /
|
|
392
|
-
|
|
393
|
-
#
|
|
394
|
-
sino-bc-cli /set-config
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
#
|
|
448
|
-
sino-bc-cli --
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
```
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
```
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
#
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
```typescript
|
|
591
|
-
// src/commands/example.command.ts
|
|
592
|
-
import { ICommand } from "../types";
|
|
593
|
-
import { logger, BrowserUtils } from "../utils";
|
|
594
|
-
|
|
595
|
-
export class ExampleCommand implements ICommand {
|
|
596
|
-
public readonly name = "example";
|
|
597
|
-
public readonly description = "示例命令 - 打开示例网站";
|
|
598
|
-
|
|
599
|
-
public async execute(args: string[]): Promise<void> {
|
|
600
|
-
logger.info("执行示例命令,参数:", args);
|
|
601
|
-
await BrowserUtils.openUrl("https://example.com/");
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
```
|
|
605
|
-
|
|
606
|
-
```typescript
|
|
607
|
-
// src/commands/index.ts
|
|
608
|
-
import { ExampleCommand } from "./example.command"; // 新增导入
|
|
609
|
-
|
|
610
|
-
export const commands: ICommand[] = [
|
|
611
|
-
new InitCommand(),
|
|
612
|
-
new ApiListCommand(),
|
|
613
|
-
new GetConfigCommand(),
|
|
614
|
-
new ExampleCommand(), // 新增注册
|
|
615
|
-
];
|
|
616
|
-
```
|
|
617
|
-
|
|
618
|
-
完成后执行 `npm run build` 即可使用 `sino-bc-cli /example`。
|
|
619
|
-
|
|
620
|
-
---
|
|
621
|
-
|
|
622
|
-
## 📄 License
|
|
623
|
-
|
|
624
|
-
MIT License
|
|
1
|
+
# sino-bc-cli
|
|
2
|
+
|
|
3
|
+
BeyondClick 命令行工具集合 - 提供快捷访问 BeyondClick 平台的命令行接口。
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
> ⚠️ 本包是**全局 CLI 工具**。npm 官网右侧 Install 框里的 `npm i sino-bc-cli` 是网站写死的固定文案,不是本包的推荐用法,请以下面的命令为准(注意 `-g`)。
|
|
8
|
+
>
|
|
9
|
+
> 运行环境要求 Node.js >= 24.0.0。
|
|
10
|
+
|
|
11
|
+
### ① 安装最新版本(推荐)
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# npm
|
|
15
|
+
npm i sino-bc-cli@latest -g
|
|
16
|
+
|
|
17
|
+
# pnpm
|
|
18
|
+
pnpm add -g sino-bc-cli@latest
|
|
19
|
+
|
|
20
|
+
# yarn
|
|
21
|
+
yarn global add sino-bc-cli@latest
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
已经装过旧版本时,执行同样的命令即可升级覆盖。想先确认远端最新版本号:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm view sino-bc-cli version # 查看 latest 版本号
|
|
28
|
+
npm outdated -g sino-bc-cli # 对比本地全局版本是否过期
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### ② 安装指定版本
|
|
32
|
+
|
|
33
|
+
把 `@latest` 换成目标版本号即可,适用于需要回退或锁定版本的场景:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# npm
|
|
37
|
+
npm i sino-bc-cli@1.0.5 -g
|
|
38
|
+
|
|
39
|
+
# pnpm
|
|
40
|
+
pnpm add -g sino-bc-cli@1.0.5
|
|
41
|
+
|
|
42
|
+
# yarn
|
|
43
|
+
yarn global add sino-bc-cli@1.0.5
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
查看全部可安装版本:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm view sino-bc-cli versions --json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### ③ 卸载
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# npm
|
|
56
|
+
npm uninstall -g sino-bc-cli
|
|
57
|
+
|
|
58
|
+
# pnpm
|
|
59
|
+
pnpm remove -g sino-bc-cli
|
|
60
|
+
|
|
61
|
+
# yarn
|
|
62
|
+
yarn global remove sino-bc-cli
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
> 如果当初是在源码目录用 `npm link` 做的开发链接,请改用 `npm unlink -g sino-bc-cli` 解除。
|
|
66
|
+
|
|
67
|
+
### ④ 验证安装
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
sino-bc-cli --version # 输出版本号,说明命令已可用
|
|
71
|
+
sino-bc-cli --help # 输出帮助信息和全部可用命令
|
|
72
|
+
npm ls -g --depth=0 sino-bc-cli # 确认全局安装的版本
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
若提示「command not found / 无法将 sino-bc-cli 项识别为命令」,说明 npm 全局 bin 目录不在 `PATH` 中。用 `npm prefix -g` 查看全局安装根目录(Windows 下该目录即 bin 目录,macOS / Linux 下为其 `bin` 子目录),把它加入环境变量后重开终端。
|
|
76
|
+
|
|
77
|
+
### ⑤ 初始化(必须执行一次)
|
|
78
|
+
|
|
79
|
+
**装完之后必须完成 `/init` 初始化,CLI 的 Agent 技能才会生效。**
|
|
80
|
+
|
|
81
|
+
全局安装时 `postinstall` 会自动执行一次 `/init`。但在以下情况会被跳过,需要手动补执行:使用 `--ignore-scripts` 安装、安装目录权限不足、或通过 `npx` 临时运行。
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
sino-bc-cli /init
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
`/init` 会把根 `SKILL.md` 与 `skills/system/`、`skills/custom/` 下的标准子技能(`SKILL.md` + `references/`,同路径以 `custom` 为准)嵌进 `~/.agents/skills/sino-bc-cli/`,不出现 `system/` 或 `custom/` 这一层;同时删除旧的平级 `sino-bc-shared` / `sino-bc-<domain>` 技能目录。豆包本地列表里只应看到 **`sino-bc-cli`**。飞书豆包工作侧还需:技能·连接器 → 管理 → **本地** → 刷新。查看包内技能:`sino-bc-cli /skill`。
|
|
88
|
+
|
|
89
|
+
> 每次升级版本后请重新执行一次 `sino-bc-cli /init`,以刷新本地技能文件。
|
|
90
|
+
|
|
91
|
+
### ⑥ 免安装临时执行
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npx sino-bc-cli --help
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
注意 `npx` 方式不会持久注册 Agent 技能,需要技能能力时仍请走全局安装 + `/init`。
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 📚 技术栈说明
|
|
102
|
+
|
|
103
|
+
| 技术/依赖 | 版本要求 | 用途说明 |
|
|
104
|
+
| :------------- | :----------- | :------------------------------------------------------ |
|
|
105
|
+
| **Node.js** | `>= v24.0.0` | CLI 运行时环境,要求使用 v24 及以上版本 |
|
|
106
|
+
| **TypeScript** | `^v5.5.0` | 开发语言,提供静态类型检查和更好的可维护性 |
|
|
107
|
+
| **lodash** | `^4.17.21` | 工具函数库,提供对象/数组/字符串处理等高效方法 |
|
|
108
|
+
| **dayjs** | `^1.11.11` | 轻量级日期处理库,替代 Moment.js 处理日期时间格式化 |
|
|
109
|
+
| **axios** | `^1.7.0` | HTTP 客户端库,用于网络请求、连通性检测等 |
|
|
110
|
+
| **crypto-js** | `^4.2.0` | 加密算法库,提供 MD5、SHA-256、AES、Base64 等加解密能力 |
|
|
111
|
+
| **commander** | `^12.1.0` | 命令行参数解析框架(预留,当前采用自研注册器模式) |
|
|
112
|
+
| **chalk** | `^4.1.2` | 终端彩色输出库,用于美化日志和帮助信息 |
|
|
113
|
+
| **open** | `^8.4.2` | 跨平台文件/URL 打开工具(兼容备用方案) |
|
|
114
|
+
|
|
115
|
+
### 开发依赖
|
|
116
|
+
|
|
117
|
+
| 依赖 | 版本 | 用途 |
|
|
118
|
+
| :----------------- | :-------- | :-------------------------------- |
|
|
119
|
+
| `@types/node` | `^22.0.0` | Node.js 类型声明 |
|
|
120
|
+
| `@types/lodash` | `^4.17.5` | lodash 类型声明 |
|
|
121
|
+
| `@types/crypto-js` | `^4.2.2` | crypto-js 类型声明 |
|
|
122
|
+
| `ts-node` | `^10.9.2` | 开发阶段直接运行 TypeScript 代码 |
|
|
123
|
+
| `rimraf` | `^5.0.7` | 跨平台目录清理工具,替代 `rm -rf` |
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 📁 项目结构说明
|
|
128
|
+
|
|
129
|
+
项目采用 **模块化、低耦合、高内聚** 的分层设计,便于后续扩展和维护。
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
sino-bc-cli/
|
|
133
|
+
├── src/ # 源代码目录(TypeScript)
|
|
134
|
+
│ ├── index.ts # 🚀 CLI 入口文件,bin 关联点
|
|
135
|
+
│ │
|
|
136
|
+
│ ├── core/ # 🧠 核心模块层
|
|
137
|
+
│ │ ├── index.ts # 核心模块统一导出
|
|
138
|
+
│ │ ├── cli-app.ts # CLI 应用主类(参数解析、帮助展示、命令分发)
|
|
139
|
+
│ │ ├── route.ts # argv 路由(斜杠命令 / 域 + Shortcut)
|
|
140
|
+
│ │ └── command-registry.ts # 命令注册器(注册、查找、执行、注销命令)
|
|
141
|
+
│ │
|
|
142
|
+
│ ├── commands/ # 📦 命令实现层(每命令一个文件,可独立扩展)
|
|
143
|
+
│ │ ├── index.ts # 命令批量注册入口
|
|
144
|
+
│ │ ├── init.command.ts # /init 命令实现(注册 Agent 技能 + 初始化变量配置)
|
|
145
|
+
│ │ ├── bc-api.command.ts # /bc-api 已下线,仅打印迁移提示并非 0 退出
|
|
146
|
+
│ │ ├── get-config.command.ts # /get-config 命令实现(查看变量配置)
|
|
147
|
+
│ │ ├── set-config.command.ts # /set-config 命令实现(修改变量配置)
|
|
148
|
+
│ │ ├── skill.command.ts # /skill 命令实现(列出包内技能或打开 SKILL.md)
|
|
149
|
+
│ │ └── uninstall.command.ts # /uninstall 命令实现(清理技能目录与配置并卸载)
|
|
150
|
+
│ │
|
|
151
|
+
│ ├── shortcuts/ # ⚡ Shortcut 执行面(业务命令,域 + `+cmd`)
|
|
152
|
+
│ │ ├── index.ts # 注册表与执行器(flag 解析、输出格式、写确认门)
|
|
153
|
+
│ │ ├── flags.ts # Shortcut 面参数解析(含公共 flag)
|
|
154
|
+
│ │ ├── types.ts # Shortcut 声明与执行上下文类型
|
|
155
|
+
│ │ └── biz-line/ # biz-line 域
|
|
156
|
+
│ │ ├── index.ts # 该域全部 Shortcut 登记处
|
|
157
|
+
│ │ ├── read.ts # 只读 Shortcut(+channels/+categories/+list/+strategies)
|
|
158
|
+
│ │ ├── write.ts # 写 Shortcut(+save/+update/+status/+delete/+strategy-*)
|
|
159
|
+
│ │ ├── raw-api.ts # biz-line api <name> 点名调用
|
|
160
|
+
│ │ └── helpers.ts # 按名解析业务线、字典名称映射等编排
|
|
161
|
+
│ │
|
|
162
|
+
│ ├── utils/ # 🛠 工具类层(高内聚的可复用工具)
|
|
163
|
+
│ │ ├── index.ts # 工具模块统一导出
|
|
164
|
+
│ │ ├── logger.ts # 日志工具(多级别彩色输出 + 时间戳)
|
|
165
|
+
│ │ ├── browser.ts # 浏览器工具(跨平台 URL 打开,兼容 Win/macOS/Linux)
|
|
166
|
+
│ │ ├── crypto.ts # 加密工具(MD5、SHA-256、AES、Base64、签名生成)
|
|
167
|
+
│ │ ├── http.ts # HTTP 工具(axios 封装:请求/响应拦截、自动重试)
|
|
168
|
+
│ │ ├── gateway-client.ts # 网关调用唯一出口(拼地址、注入鉴权与来源头、解包 result)
|
|
169
|
+
│ │ ├── presenter.ts # 输出与退出码(table / JSON 信封,stdout / stderr 分流)
|
|
170
|
+
│ │ ├── cli-error.ts # 带分类的 CLI 错误(validation / config / api / 待确认)
|
|
171
|
+
│ │ ├── common.ts # 通用工具(日期、深拷贝、防抖节流、ID 生成等)
|
|
172
|
+
│ │ ├── prompt.ts # 终端交互(复用单一 readline 会话:提问、选择、确认)
|
|
173
|
+
│ │ ├── config-store.ts # 变量配置读写(字段元信息 + 读 / 写 / 删)
|
|
174
|
+
│ │ ├── config-prompt.ts # 变量配置交互采集(/init 与 /set-config 共用)
|
|
175
|
+
│ │ └── skill-install.ts # Agent 技能目录的写入与清理
|
|
176
|
+
│ │
|
|
177
|
+
│ ├── types/ # 📝 类型定义层
|
|
178
|
+
│ │ └── index.ts # 全局接口、枚举定义(ICommand、LogLevel 等)
|
|
179
|
+
│ │
|
|
180
|
+
│ └── constants/ # 🔧 常量配置层
|
|
181
|
+
│ └── index.ts # CLI 配置、命令名称、Shortcut 域、默认值
|
|
182
|
+
│
|
|
183
|
+
├── skills/ # Agent 技能树(shared + biz-line,含 references)
|
|
184
|
+
├── affordance/ # 各 Shortcut 的 WHEN / 别用 / 示例
|
|
185
|
+
├── tests/ # ✅ 单元测试(node --test + ts-node)
|
|
186
|
+
│ ├── helpers/ # HTTP 执行器桩、输出流桩
|
|
187
|
+
│ └── *.test.ts # 路由、flag、网关、输出契约、各类 Shortcut
|
|
188
|
+
│
|
|
189
|
+
├── dist/ # 📤 构建输出目录(构建后自动生成)
|
|
190
|
+
│ └── ... # 单文件混淆压缩产物 + SKILL.md + skills/ + affordance/ + api-doc(不含 SourceMap)
|
|
191
|
+
│
|
|
192
|
+
├── package.json # 📄 项目配置(依赖、脚本、bin 命令)
|
|
193
|
+
├── tsconfig.json # 📄 TypeScript 编译配置
|
|
194
|
+
├── .gitignore # 📄 Git 忽略配置
|
|
195
|
+
└── README.md # 📖 项目说明文档
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### 架构设计原则
|
|
199
|
+
|
|
200
|
+
1. **分层清晰**:`core → commands → utils → types/constants`,上层依赖下层,单向依赖无循环
|
|
201
|
+
2. **低耦合**:命令之间互相独立,通过注册器统一管理;新增命令只需在 `commands/` 下新建文件并加入 `commands/index.ts` 数组
|
|
202
|
+
3. **高内聚**:每个工具类只负责单一职责(如 `BrowserUtils` 只处理浏览器打开,`CryptoUtils` 只处理加解密)
|
|
203
|
+
4. **可扩展**:
|
|
204
|
+
- 新增命令:实现 `ICommand` 接口 → 放入 `commands/index.ts` 数组即可自动注册
|
|
205
|
+
- 新增工具:在 `utils/` 下新建类,通过 `utils/index.ts` 导出
|
|
206
|
+
- 命令注册器支持运行时动态注册/注销命令
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 🚀 项目使用说明
|
|
211
|
+
|
|
212
|
+
### 1. 环境要求
|
|
213
|
+
|
|
214
|
+
确保已安装 **Node.js v24** 或更高版本:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# 查看 Node.js 版本
|
|
218
|
+
node -v
|
|
219
|
+
# 要求输出 v24.x.x 或更高
|
|
220
|
+
|
|
221
|
+
# 查看 npm 版本
|
|
222
|
+
npm -v
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
> 如果 Node.js 版本不符合要求,建议通过 [nvm (Node Version Manager)](https://github.com/nvm-sh/nvm) 或 [nvm-windows](https://github.com/coreybutler/nvm-windows) 进行安装和版本管理。
|
|
226
|
+
|
|
227
|
+
### 2. 安装依赖
|
|
228
|
+
|
|
229
|
+
在项目根目录下执行:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
npm install
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
依赖安装完成后,`node_modules/` 目录将生成。
|
|
236
|
+
|
|
237
|
+
### 3. 编译项目
|
|
238
|
+
|
|
239
|
+
项目使用 TypeScript 编写,需要编译为 JavaScript 后才能运行:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# 编译(生成 dist/ 目录)
|
|
243
|
+
npm run build
|
|
244
|
+
|
|
245
|
+
# 清理旧的编译产物并重新编译
|
|
246
|
+
npm run rebuild
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
编译完成后,`dist/` 目录将包含:
|
|
250
|
+
|
|
251
|
+
- `*.js` — 编译后的 JavaScript 代码
|
|
252
|
+
- `*.d.ts` — TypeScript 类型声明文件
|
|
253
|
+
- `*.js.map` — SourceMap 调试映射文件
|
|
254
|
+
|
|
255
|
+
### 4. 开发模式(免编译运行)
|
|
256
|
+
|
|
257
|
+
开发阶段可使用 `ts-node` 直接运行 TypeScript 代码,无需手动编译:
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
# 直接运行 TypeScript 源码
|
|
261
|
+
npm run dev -- [参数]
|
|
262
|
+
|
|
263
|
+
# 示例:查看帮助
|
|
264
|
+
npm run dev -- --help
|
|
265
|
+
|
|
266
|
+
# 示例:执行业务命令
|
|
267
|
+
npm run dev -- biz-line +list --name <业务线名称>
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 4.1 运行测试
|
|
271
|
+
|
|
272
|
+
单元测试用 Node 内置 runner(`node --test`)配 `ts-node`,不额外引入测试框架:
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
# 跑全部用例
|
|
276
|
+
npm test
|
|
277
|
+
|
|
278
|
+
# 类型检查(tsc --noEmit)
|
|
279
|
+
npm run typecheck
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
用例放在 `tests/`,通过注入 HTTP 执行器桩断言请求,不产生真实网络调用。
|
|
283
|
+
|
|
284
|
+
### 5. 全局安装(推荐)
|
|
285
|
+
|
|
286
|
+
将 CLI 工具链接为全局命令,可在任意目录下直接使用 `sino-bc-cli`:
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# 方式一:从源码目录全局链接(开发/测试场景)
|
|
290
|
+
cd d:\Project\demo\sino-bc-cli
|
|
291
|
+
npm run build # 必须先编译
|
|
292
|
+
npm link # 全局链接(Windows 下需要管理员权限)
|
|
293
|
+
|
|
294
|
+
# 方式二:后续发布到 npm 后
|
|
295
|
+
npm i sino-bc-cli -g
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
安装完成后,即可在任意终端直接使用:
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
sino-bc-cli --help
|
|
302
|
+
sino-bc-cli /init
|
|
303
|
+
sino-bc-cli biz-line --help
|
|
304
|
+
sino-bc-cli biz-line +list --name <业务线名称>
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
`npm i sino-bc-cli -g` 完成后会自动执行 `/init`,把唯一技能 `sino-bc-cli` 写到 `~/.agents/skills/sino-bc-cli/`,并清掉旧的平级 `sino-bc-shared` / `sino-bc-<domain>`。飞书豆包工作:技能·连接器 → 管理 → **本地** → 刷新。若未出现,手动执行:
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
sino-bc-cli /init
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
> 卸载全局链接:`npm unlink` 或 `npm uninstall -g sino-bc-cli`
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## 📖 命令说明
|
|
318
|
+
|
|
319
|
+
命令分两类:**生命周期命令**用 `/` 前缀,负责安装与配置;**业务命令**是 Shortcut 执行面,形如 `<域> +<命令>`。
|
|
320
|
+
|
|
321
|
+
### 生命周期命令
|
|
322
|
+
|
|
323
|
+
| 命令 | 说明 |
|
|
324
|
+
| :---------- | :-------------------------------------------------------------------------------------------- |
|
|
325
|
+
| `/init` | 注册唯一技能 `sino-bc-cli` 到 Agent 技能目录(并删除旧平级 `sino-bc-shared` / `sino-bc-<domain>`),交互设置环境 / `API_KEY` |
|
|
326
|
+
| `/skill` | 列出包内 Agent 技能;传入 name 打开对应 `SKILL.md` |
|
|
327
|
+
| `/get-config` | 查看变量配置;密钥默认打码,`--show-secret` 显示明文,`--json` 输出 JSON |
|
|
328
|
+
| `/set-config` | 修改变量配置(环境 / API_KEY / 维护者的 `apifox-token`);不带参数时逐项交互修改环境与 API_KEY |
|
|
329
|
+
| `/uninstall` | 删除技能目录与变量配置文件,并从全局 npm 卸载本 CLI |
|
|
330
|
+
| `/bc-api` | **已下线**。只打印迁移提示并非 0 退出,改用 `biz-line +<shortcut>` 或 `biz-line api <name>` |
|
|
331
|
+
|
|
332
|
+
### 业务命令(`biz-line`)
|
|
333
|
+
|
|
334
|
+
| 命令 | 说明 |
|
|
335
|
+
| :--- | :--- |
|
|
336
|
+
| `biz-line +channels` | 查询投放渠道列表(`code` 即业务线里的 `mediaChannelId`) |
|
|
337
|
+
| `biz-line +categories` | 查询投放行业与品类字典树 |
|
|
338
|
+
| `biz-line +list` | 查询业务线;`--name` / `--id` / `--category`,不传即查全部(`pagination: false`) |
|
|
339
|
+
| `biz-line +strategies` | 查周策略与表现;`--name` 会先解析业务线 ID,或传单个 `--id` |
|
|
340
|
+
| `biz-line +save` / `+update` / `+status` / `+delete` | ⚠️ 业务线写操作 |
|
|
341
|
+
| `biz-line +strategy-save` / `+strategy-update` / `+strategy-delete` | ⚠️ 周策略写操作 |
|
|
342
|
+
| `biz-line api <name> --data '<json>'` | 按接口 `name` 点名调用,覆盖导出、对比、消耗等长尾接口 |
|
|
343
|
+
|
|
344
|
+
`+list --category` 同时接受数字 ID 与名称;传名称时会先查品类字典再映射,映射不到会报错并列出可选值。`+list` 不再接受 `--channel` / `--industry`。行业 / 品类 Top 没有 Shortcut。
|
|
345
|
+
|
|
346
|
+
### Shortcut 面公共参数
|
|
347
|
+
|
|
348
|
+
| 参数 | 说明 |
|
|
349
|
+
| :--- | :--- |
|
|
350
|
+
| `--format json\|table` | 输出格式。TTY 默认 `table`,非 TTY 默认 `json` |
|
|
351
|
+
| `--dry-run` | 只打印将要发起的 method / URL / 请求体,不发请求 |
|
|
352
|
+
| `--yes` | 跳过写操作确认,直接发起请求 |
|
|
353
|
+
|
|
354
|
+
### 输出契约与退出码
|
|
355
|
+
|
|
356
|
+
非 TTY(管道 / CI / Agent)默认输出 JSON 信封。成功走 stdout,失败走 stderr:
|
|
357
|
+
|
|
358
|
+
```json
|
|
359
|
+
{ "ok": true, "env": "prod", "command": "biz-line +list", "data": [], "meta": { "count": 0 } }
|
|
360
|
+
{ "ok": false, "env": "prod", "command": "biz-line +delete", "error": { "type": "confirmation_required", "message": "...", "hint": "..." } }
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
`data` 只包含上游 `result`。**判断成功请看 `ok` 或进程退出码,不要看上游 `code`。**
|
|
364
|
+
|
|
365
|
+
| 退出码 | 含义 |
|
|
366
|
+
| :----- | :--- |
|
|
367
|
+
| `0` | 成功 |
|
|
368
|
+
| `10` | 写操作待确认,**不是错误**;向用户确认后在原命令末尾追加 `--yes` 重试 |
|
|
369
|
+
| 其他非 0 | 失败,详见 `error.type`(`validation` / `config` / `api`) |
|
|
370
|
+
|
|
371
|
+
### 变量配置文件
|
|
372
|
+
|
|
373
|
+
环境、`API_KEY` 与维护者用的 `apifoxToken` 存放在 `<用户主目录>/.sino-bc-cli/config.json`。`X-GATEWAY-TYPE` 固定为 `A2C-CLI`,不开放配置。
|
|
374
|
+
|
|
375
|
+
| 字段 | 命令行键名 | 默认值 | 说明 |
|
|
376
|
+
| :--- | :--------- | :----- | :--- |
|
|
377
|
+
| `env` | `env` | `prod` | 目标环境,可选 `test` / `pre` / `prod` |
|
|
378
|
+
| `apiKey` | `api-key` | 内置默认 Key | 网关鉴权用的 API Key(业务命令使用) |
|
|
379
|
+
| `apifoxToken` | `apifox-token` | 空 | 仅维护者同步接口文档用(`npm run sync-api-doc`),与业务调用无关;`/init` 不会询问它 |
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
# 查看(密钥打码)
|
|
383
|
+
sino-bc-cli /get-config
|
|
384
|
+
|
|
385
|
+
# 三种修改写法等价
|
|
386
|
+
sino-bc-cli /set-config env test
|
|
387
|
+
sino-bc-cli /set-config env=test
|
|
388
|
+
sino-bc-cli /set-config --env=test
|
|
389
|
+
|
|
390
|
+
# 不带参数则逐项交互修改,直接回车保留当前值(只问环境与 API_KEY)
|
|
391
|
+
sino-bc-cli /set-config
|
|
392
|
+
|
|
393
|
+
# 维护者才需要:配置 Apifox token(默认打码,--show-secret 看明文)
|
|
394
|
+
sino-bc-cli /set-config apifox-token <你的 token>
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
> `/init` 在非交互环境(npm `postinstall`、CI、Agent 调用)下不提问:配置文件已存在则保持不变,不存在则按默认值创建。
|
|
398
|
+
|
|
399
|
+
### 全局选项
|
|
400
|
+
|
|
401
|
+
| 选项 | 短选项 | 说明 |
|
|
402
|
+
| :---------- | :----- | :---------------------------------------- |
|
|
403
|
+
| `--version` | `-v` | 显示版本信息 |
|
|
404
|
+
| `--help` | `-h` | 显示帮助信息 |
|
|
405
|
+
| `--debug` | `-d` | 启用 Debug 日志模式,输出更详细的运行信息 |
|
|
406
|
+
|
|
407
|
+
### 环境与请求网关
|
|
408
|
+
|
|
409
|
+
业务命令的请求地址由 [`src/constants/gateway.ts`](./src/constants/gateway.ts) 的 `GATEWAY_CONFIG` 决定,统一走 `joinGatewayUrl(env, path)` 拼接,实际请求由 [`src/utils/gateway-client.ts`](./src/utils/gateway-client.ts) 这一个出口发出。`path` 等于接口文档 / OpenAPI 路由,不再拼接 `/sino-opti-hive`。
|
|
410
|
+
|
|
411
|
+
| `ENV` | 说明 | 网关地址 |
|
|
412
|
+
| :----- | :------- | :----------------------------------- |
|
|
413
|
+
| `test` | 测试环境 | `https://test-agent.beyondclick.com` |
|
|
414
|
+
| `pre` | 预发环境 | `https://test-agent.beyondclick.com` |
|
|
415
|
+
| `prod` | 生产环境 | `https://test-agent.beyondclick.com` |
|
|
416
|
+
|
|
417
|
+
> 当前三环境同一地址。换地址只需改 `GATEWAY_CONFIG`,同时同步 [`SKILL.md`](./SKILL.md) 与 [`src/api-doc/`](./src/api-doc/custom/README.md) 中的示例地址。
|
|
418
|
+
|
|
419
|
+
### 使用示例
|
|
420
|
+
|
|
421
|
+
#### ① 查看版本和帮助
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
# 查看版本号
|
|
425
|
+
sino-bc-cli --version
|
|
426
|
+
sino-bc-cli -v
|
|
427
|
+
|
|
428
|
+
# 查看帮助文档(含所有可用命令列表)
|
|
429
|
+
sino-bc-cli --help
|
|
430
|
+
sino-bc-cli -h
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
#### ② 查看某域何时用哪条命令
|
|
434
|
+
|
|
435
|
+
```bash
|
|
436
|
+
sino-bc-cli biz-line --help
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
接口字段口径见 [`src/api-doc/custom/README.md`](./src/api-doc/custom/README.md)。
|
|
440
|
+
|
|
441
|
+
#### ③ 查询业务线数据
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
# 按名称查业务线
|
|
445
|
+
sino-bc-cli biz-line +list --name <业务线名称>
|
|
446
|
+
|
|
447
|
+
# 按品类筛选(接受名称或 ID)
|
|
448
|
+
sino-bc-cli biz-line +list --category <品类>
|
|
449
|
+
|
|
450
|
+
# 查某条业务线的周策略与表现
|
|
451
|
+
sino-bc-cli biz-line +strategies --name <业务线名称>
|
|
452
|
+
|
|
453
|
+
# 没有 Shortcut 的长尾接口
|
|
454
|
+
sino-bc-cli biz-line api biz-line-strategy-compare \
|
|
455
|
+
--data '{"bizLineId":123,"currentId":2,"prevId":1}'
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
执行效果:向配置文件指定环境的网关发起请求,路径等于接口文档路由,自动注入 `Authorization` 与 `X-GATEWAY-TYPE: A2C-CLI`。接口清单见 [`src/api-doc/custom/README.md`](./src/api-doc/custom/README.md)。
|
|
459
|
+
|
|
460
|
+
#### ④ 执行写操作(需确认)
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
# 先预览请求,不会真正发起
|
|
464
|
+
sino-bc-cli biz-line +status --id 123 --status 3 --dry-run
|
|
465
|
+
|
|
466
|
+
# 确认无误后追加 --yes
|
|
467
|
+
sino-bc-cli biz-line +status --id 123 --status 3 --yes
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
> ⚠️ 写操作会变更线上数据。不加 `--yes` 时:交互式终端会展示环境与关键参数并询问;非交互式环境以退出码 `10` 返回 `confirmation_required`,需人工确认后再重试。
|
|
471
|
+
|
|
472
|
+
#### ⑤ 启用 Debug 模式运行
|
|
473
|
+
|
|
474
|
+
```bash
|
|
475
|
+
sino-bc-cli --debug biz-line --help
|
|
476
|
+
# 或使用短选项
|
|
477
|
+
sino-bc-cli -d biz-line --help
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
Debug 模式会输出详细的日志,包括参数解析、命令注册、接口调用过程等信息,便于排查问题。
|
|
481
|
+
|
|
482
|
+
---
|
|
483
|
+
|
|
484
|
+
## 🌐 跨平台兼容性
|
|
485
|
+
|
|
486
|
+
本工具已针对以下操作系统进行兼容性处理:
|
|
487
|
+
|
|
488
|
+
| 操作系统 | 测试状态 | 打开浏览器方式 |
|
|
489
|
+
| :--------------------------- | :------- | :----------------------------------------------------------------- |
|
|
490
|
+
| **Windows** (10/11) | ✅ 支持 | 使用 `cmd /c start "" "url"`,已处理 URL 中 `&`/`^` 等特殊字符转义 |
|
|
491
|
+
| **macOS** | ✅ 支持 | 使用系统 `open` 命令 |
|
|
492
|
+
| **Linux** (Ubuntu/CentOS 等) | ✅ 支持 | 使用 `xdg-open` 命令 |
|
|
493
|
+
|
|
494
|
+
> 所有平台均通过 Node.js 内置 `child_process.exec` 调用,**不依赖任何 native 模块**,确保跨平台一致性。
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
## 📦 NPM 脚本说明
|
|
499
|
+
|
|
500
|
+
在 `package.json` 中预定义了以下脚本:
|
|
501
|
+
|
|
502
|
+
```bash
|
|
503
|
+
# 编译 TypeScript 为 JavaScript(输出到 dist/)
|
|
504
|
+
npm run build
|
|
505
|
+
|
|
506
|
+
# 类型检查(不产出文件)
|
|
507
|
+
npm run typecheck
|
|
508
|
+
|
|
509
|
+
# 跑单元测试
|
|
510
|
+
npm test
|
|
511
|
+
|
|
512
|
+
# 开发模式:直接运行 TypeScript 源码(ts-node)
|
|
513
|
+
npm run dev -- [参数]
|
|
514
|
+
|
|
515
|
+
# 运行已编译的 CLI(需要先 build)
|
|
516
|
+
npm start -- [参数]
|
|
517
|
+
|
|
518
|
+
# 清理编译产物(删除 dist/ 目录)
|
|
519
|
+
npm run clean
|
|
520
|
+
|
|
521
|
+
# 清理后重新编译
|
|
522
|
+
npm run rebuild
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
## 🔧 扩展新命令(开发者指南)
|
|
528
|
+
|
|
529
|
+
先判断要加的是哪一类:
|
|
530
|
+
|
|
531
|
+
- **生命周期命令**(安装、配置、维护,用 `/` 前缀)→ 加到 `src/commands/`
|
|
532
|
+
- **业务命令**(调接口拿数据,形如 `biz-line +xxx`)→ 加到 `src/shortcuts/`
|
|
533
|
+
|
|
534
|
+
### A. 新增业务 Shortcut
|
|
535
|
+
|
|
536
|
+
1. **写声明**:在 `src/shortcuts/biz-line/read.ts` 或 `write.ts` 里新增一条 `IShortcutDefinition`,声明 `command`、`risk`、`flags`,并在 `resolve()` 里返回目标接口与请求体
|
|
537
|
+
2. **登记**:加入 `src/shortcuts/biz-line/index.ts` 的 `BIZ_LINE_SHORTCUTS` 数组
|
|
538
|
+
3. **补测试**:在 `tests/` 下用 HTTP 桩断言请求与输出
|
|
539
|
+
4. **同步文档**:`skills/system/sino-bc-biz-line` 的意图表、`affordance/biz-line.md` 的 WHEN、`src/api-doc/system/` 的字段口径;手写补充放 `skills/custom/` 与 `src/api-doc/custom/`;根 `SKILL.md` 只做入口
|
|
540
|
+
|
|
541
|
+
参数解析、输出格式、写操作确认门、错误归类都由 `src/shortcuts/index.ts` 统一承担,声明里不要自己发 HTTP。接口 `name` 一律取自 `src/generated/api-catalog.json`,不要新造。
|
|
542
|
+
|
|
543
|
+
维护者同步 Apifox:`npm run sync-api-doc`。token 按三级回退取值——环境变量 `APIFOX_TOKEN` > `~/.sino-bc-cli/config.json` 的 `apifoxToken` > 终端交互输入;交互输入到的 token 会写回该配置文件,下次不再询问。三处都没有则非 0 退出。CI 用环境变量覆盖即可。**不要把 token 写入仓库任何文件。**
|
|
544
|
+
|
|
545
|
+
> 只是想调一个已有接口,通常不需要写新 Shortcut——直接 `biz-line api <name> --data '<json>'` 即可。Shortcut 应当带来智能默认值、参数编排或更友好的输出,否则不值得新增。
|
|
546
|
+
|
|
547
|
+
### B. 新增生命周期命令
|
|
548
|
+
|
|
549
|
+
1. **新建命令文件**:在 `src/commands/` 下创建 `xxx.command.ts`
|
|
550
|
+
2. **实现 ICommand 接口**:编写 `name`、`description` 和 `execute()` 方法
|
|
551
|
+
3. **注册命令**:在 `src/commands/index.ts` 的 `commands` 数组中添加实例
|
|
552
|
+
|
|
553
|
+
### 示例
|
|
554
|
+
|
|
555
|
+
```typescript
|
|
556
|
+
// src/commands/example.command.ts
|
|
557
|
+
import { ICommand } from "../types";
|
|
558
|
+
import { logger, BrowserUtils } from "../utils";
|
|
559
|
+
|
|
560
|
+
export class ExampleCommand implements ICommand {
|
|
561
|
+
public readonly name = "example";
|
|
562
|
+
public readonly description = "示例命令 - 打开示例网站";
|
|
563
|
+
|
|
564
|
+
public async execute(args: string[]): Promise<void> {
|
|
565
|
+
logger.info("执行示例命令,参数:", args);
|
|
566
|
+
await BrowserUtils.openUrl("https://example.com/");
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
```typescript
|
|
572
|
+
// src/commands/index.ts
|
|
573
|
+
import { ExampleCommand } from "./example.command"; // 新增导入
|
|
574
|
+
|
|
575
|
+
export const commands: ICommand[] = [
|
|
576
|
+
new InitCommand(),
|
|
577
|
+
new GetConfigCommand(),
|
|
578
|
+
new ExampleCommand(), // 新增注册
|
|
579
|
+
];
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
完成后执行 `npm run build` 即可使用 `sino-bc-cli /example`。
|
|
583
|
+
|
|
584
|
+
---
|
|
585
|
+
|
|
586
|
+
## 📄 License
|
|
587
|
+
|
|
588
|
+
MIT License
|