sino-bc-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +311 -0
  2. package/dist/SKILL.md +466 -0
  3. package/dist/commands/bc-mcp.command.d.ts +53 -0
  4. package/dist/commands/bc-mcp.command.js +208 -0
  5. package/dist/commands/bc-mcp.command.js.map +1 -0
  6. package/dist/commands/homepage.command.d.ts +19 -0
  7. package/dist/commands/homepage.command.js +96 -0
  8. package/dist/commands/homepage.command.js.map +1 -0
  9. package/dist/commands/index.d.ts +10 -0
  10. package/dist/commands/index.js +23 -0
  11. package/dist/commands/index.js.map +1 -0
  12. package/dist/commands/nexus-swagger.command.d.ts +19 -0
  13. package/dist/commands/nexus-swagger.command.js +95 -0
  14. package/dist/commands/nexus-swagger.command.js.map +1 -0
  15. package/dist/constants/api-doc.d.ts +6 -0
  16. package/dist/constants/api-doc.js +80 -0
  17. package/dist/constants/api-doc.js.map +1 -0
  18. package/dist/constants/gateway.d.ts +31 -0
  19. package/dist/constants/gateway.js +109 -0
  20. package/dist/constants/gateway.js.map +1 -0
  21. package/dist/constants/index.d.ts +38 -0
  22. package/dist/constants/index.js +52 -0
  23. package/dist/constants/index.js.map +1 -0
  24. package/dist/core/cli-app.d.ts +51 -0
  25. package/dist/core/cli-app.js +281 -0
  26. package/dist/core/cli-app.js.map +1 -0
  27. package/dist/core/command-registry.d.ts +71 -0
  28. package/dist/core/command-registry.js +195 -0
  29. package/dist/core/command-registry.js.map +1 -0
  30. package/dist/core/index.d.ts +2 -0
  31. package/dist/core/index.js +9 -0
  32. package/dist/core/index.js.map +1 -0
  33. package/dist/index.d.ts +12 -0
  34. package/dist/index.js +34 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/types/index.d.ts +120 -0
  37. package/dist/types/index.js +46 -0
  38. package/dist/types/index.js.map +1 -0
  39. package/dist/utils/browser.d.ts +36 -0
  40. package/dist/utils/browser.js +143 -0
  41. package/dist/utils/browser.js.map +1 -0
  42. package/dist/utils/common.d.ts +97 -0
  43. package/dist/utils/common.js +198 -0
  44. package/dist/utils/common.js.map +1 -0
  45. package/dist/utils/crypto.d.ts +53 -0
  46. package/dist/utils/crypto.js +153 -0
  47. package/dist/utils/crypto.js.map +1 -0
  48. package/dist/utils/http.d.ts +58 -0
  49. package/dist/utils/http.js +187 -0
  50. package/dist/utils/http.js.map +1 -0
  51. package/dist/utils/index.d.ts +6 -0
  52. package/dist/utils/index.js +16 -0
  53. package/dist/utils/index.js.map +1 -0
  54. package/dist/utils/logger.d.ts +56 -0
  55. package/dist/utils/logger.js +161 -0
  56. package/dist/utils/logger.js.map +1 -0
  57. package/dist/utils/prompt.d.ts +18 -0
  58. package/dist/utils/prompt.js +77 -0
  59. package/dist/utils/prompt.js.map +1 -0
  60. package/package.json +63 -0
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.GATEWAY_CONFIG = exports.DEFAULT_API_KEY = void 0;
37
+ exports.getGatewayConfig = getGatewayConfig;
38
+ exports.getGatewayBaseUrl = getGatewayBaseUrl;
39
+ exports.isEnvName = isEnvName;
40
+ exports.joinGatewayUrl = joinGatewayUrl;
41
+ /*
42
+ * @Author: dracula.li dracula.li@meetsocial.com
43
+ * @Date: 2026-09-07 14:50:07
44
+ * @LastEditors: dracula.li dracula.li@meetsocial.com
45
+ * @LastEditTime: 2026-09-07 17:16:47
46
+ * @FilePath: \sino-bc-cli\src\constants\gateway.ts
47
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
48
+ */
49
+ const _ = __importStar(require("lodash"));
50
+ const types_1 = require("../types");
51
+ /** 合法环境标识列表 */
52
+ const VALID_ENV_NAMES = [types_1.EnvName.TEST, types_1.EnvName.PRE, types_1.EnvName.PROD];
53
+ /**
54
+ * 调用 iCenter MCP 接口时的默认 API Key
55
+ * 请求头:Authorization: Bearer ${API_KEY}
56
+ */
57
+ exports.DEFAULT_API_KEY = "eyJraWQiOiIyMDI2MDkwNyIsImFsZyI6IlJTMjU2IiwidHlwIjoiSldUIn0.eyJzdWIiOiI4ODg4IiwiaWF0IjoxNzg4NzY3ODc1LCJleHAiOjE3OTEzNTk4NzV9.I4ZB2b__CYtnzUX2ThKPX3eUPnPdlDzvtZoXZlu-D0BiqsAw7vSsj8GpO-X4CpqwxTpfAKrSZnaIqT9JXVVQcRwmnUdMdbyV6Gm1bTiFoXYD_m2jEuKSpqLYzXVCMFuGfQrYg-FZJFhKcw2vb4i-Mm_Qmtp9AkaSzR6caWlbix9hPrU1JKTLWwFeXpRBu9AxA1rxcya8-aI8PRkTk4rhOzfcQ7Q91CnWmuq4Kfs2e-8t1dTp7TubXfG82wi8CLTkTMa1UrugSdogDqk2g6hiOWsoR6EtFQ3GcECVN1eU8YfiUSfoasXh8LANtuW3bDIJkn6Hn1ltt2d4vP3jOvAHTQ";
58
+ /**
59
+ * 三环境网关配置
60
+ */
61
+ exports.GATEWAY_CONFIG = {
62
+ [types_1.EnvName.TEST]: {
63
+ env: types_1.EnvName.TEST,
64
+ label: "测试环境",
65
+ baseUrl: "https://test-auth.beyondclick.com/",
66
+ },
67
+ [types_1.EnvName.PRE]: {
68
+ env: types_1.EnvName.PRE,
69
+ label: "预发环境",
70
+ baseUrl: "https://pre-auth.beyondclick.com/",
71
+ },
72
+ [types_1.EnvName.PROD]: {
73
+ env: types_1.EnvName.PROD,
74
+ label: "生产环境",
75
+ baseUrl: "https://auth.beyondclick.com/",
76
+ },
77
+ };
78
+ /**
79
+ * 按环境读取网关配置
80
+ * @param env 环境标识
81
+ */
82
+ function getGatewayConfig(env) {
83
+ return exports.GATEWAY_CONFIG[env];
84
+ }
85
+ /**
86
+ * 按环境读取网关地址
87
+ * @param env 环境标识
88
+ */
89
+ function getGatewayBaseUrl(env) {
90
+ return exports.GATEWAY_CONFIG[env].baseUrl;
91
+ }
92
+ /**
93
+ * 判断是否为合法环境标识
94
+ * @param value 待校验值
95
+ */
96
+ function isEnvName(value) {
97
+ return _.isString(value) && _.includes(VALID_ENV_NAMES, value);
98
+ }
99
+ /**
100
+ * 拼接网关完整请求地址
101
+ * @param env 环境标识
102
+ * @param path 接口相对路径(以 / 开头)
103
+ */
104
+ function joinGatewayUrl(env, path) {
105
+ const baseUrl = _.trimEnd(getGatewayBaseUrl(env), '/');
106
+ const normalizedPath = _.startsWith(path, '/') ? path : `/${path}`;
107
+ return `${baseUrl}${normalizedPath}`;
108
+ }
109
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/constants/gateway.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,4CAEC;AAMD,8CAEC;AAMD,8BAEC;AAOD,wCAIC;AA3ED;;;;;;;GAOG;AACH,0CAA4B;AAC5B,oCAAmD;AAEnD,eAAe;AACf,MAAM,eAAe,GAAc,CAAC,eAAO,CAAC,IAAI,EAAE,eAAO,CAAC,GAAG,EAAE,eAAO,CAAC,IAAI,CAAC,CAAC;AAE7E;;;GAGG;AACU,QAAA,eAAe,GAC1B,qdAAqd,CAAC;AAExd;;GAEG;AACU,QAAA,cAAc,GAAoC;IAC7D,CAAC,eAAO,CAAC,IAAI,CAAC,EAAE;QACd,GAAG,EAAE,eAAO,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,oCAAoC;KAC9C;IACD,CAAC,eAAO,CAAC,GAAG,CAAC,EAAE;QACb,GAAG,EAAE,eAAO,CAAC,GAAG;QAChB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,mCAAmC;KAC7C;IACD,CAAC,eAAO,CAAC,IAAI,CAAC,EAAE;QACd,GAAG,EAAE,eAAO,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,+BAA+B;KACzC;CACF,CAAC;AAEF;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,GAAY;IAC3C,OAAO,sBAAc,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,OAAO,sBAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,KAAc;IACtC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,GAAY,EAAE,IAAY;IACvD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACnE,OAAO,GAAG,OAAO,GAAG,cAAc,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { ICLIConfig } from '../types';
2
+ export { GATEWAY_CONFIG, DEFAULT_API_KEY, getGatewayConfig, getGatewayBaseUrl, isEnvName, joinGatewayUrl, } from './gateway';
3
+ export { ICENTER_MCP_APIS } from './api-doc';
4
+ /**
5
+ * CLI 全局配置常量
6
+ * 集中管理 CLI 的基本信息,便于后续维护和升级
7
+ */
8
+ export declare const CLI_CONFIG: ICLIConfig;
9
+ /**
10
+ * 平台相关 URL 配置
11
+ * 所有需要打开的网址统一在此管理
12
+ */
13
+ export declare const PLATFORM_URLS: {
14
+ /** BeyondClick 业务平台主页 */
15
+ readonly HOMEPAGE: "https://business.beyondclick.com/";
16
+ /** BeyondClick Nexus Swagger 文档页 */
17
+ readonly NEXUS_SWAGGER: "https://o-test-sino-bc-nexus.meetsocial.com/doc.html#/home";
18
+ };
19
+ /**
20
+ * 命令名称常量
21
+ * 避免硬编码,确保命令注册和调用时名称一致
22
+ */
23
+ export declare const COMMAND_NAMES: {
24
+ readonly HOMEPAGE: "homepage";
25
+ readonly NEXUS_SWAGGER: "nexus-swagger";
26
+ readonly BC_MCP: "bc-mcp";
27
+ };
28
+ /**
29
+ * 全局默认配置
30
+ */
31
+ export declare const DEFAULT_CONFIG: {
32
+ /** 默认浏览器类型 */
33
+ readonly browser: "default";
34
+ /** 默认日志级别 */
35
+ readonly logLevel: "info";
36
+ /** 命令执行超时时间(毫秒) */
37
+ readonly timeout: 30000;
38
+ };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_CONFIG = exports.COMMAND_NAMES = exports.PLATFORM_URLS = exports.CLI_CONFIG = exports.ICENTER_MCP_APIS = exports.joinGatewayUrl = exports.isEnvName = exports.getGatewayBaseUrl = exports.getGatewayConfig = exports.DEFAULT_API_KEY = exports.GATEWAY_CONFIG = void 0;
4
+ var gateway_1 = require("./gateway");
5
+ Object.defineProperty(exports, "GATEWAY_CONFIG", { enumerable: true, get: function () { return gateway_1.GATEWAY_CONFIG; } });
6
+ Object.defineProperty(exports, "DEFAULT_API_KEY", { enumerable: true, get: function () { return gateway_1.DEFAULT_API_KEY; } });
7
+ Object.defineProperty(exports, "getGatewayConfig", { enumerable: true, get: function () { return gateway_1.getGatewayConfig; } });
8
+ Object.defineProperty(exports, "getGatewayBaseUrl", { enumerable: true, get: function () { return gateway_1.getGatewayBaseUrl; } });
9
+ Object.defineProperty(exports, "isEnvName", { enumerable: true, get: function () { return gateway_1.isEnvName; } });
10
+ Object.defineProperty(exports, "joinGatewayUrl", { enumerable: true, get: function () { return gateway_1.joinGatewayUrl; } });
11
+ var api_doc_1 = require("./api-doc");
12
+ Object.defineProperty(exports, "ICENTER_MCP_APIS", { enumerable: true, get: function () { return api_doc_1.ICENTER_MCP_APIS; } });
13
+ /**
14
+ * CLI 全局配置常量
15
+ * 集中管理 CLI 的基本信息,便于后续维护和升级
16
+ */
17
+ exports.CLI_CONFIG = {
18
+ name: 'sino-bc-cli',
19
+ version: '1.0.0',
20
+ description: 'BeyondClick 命令行工具集合 - 提供快捷访问 BeyondClick 平台的命令行接口',
21
+ };
22
+ /**
23
+ * 平台相关 URL 配置
24
+ * 所有需要打开的网址统一在此管理
25
+ */
26
+ exports.PLATFORM_URLS = {
27
+ /** BeyondClick 业务平台主页 */
28
+ HOMEPAGE: 'https://business.beyondclick.com/',
29
+ /** BeyondClick Nexus Swagger 文档页 */
30
+ NEXUS_SWAGGER: 'https://o-test-sino-bc-nexus.meetsocial.com/doc.html#/home',
31
+ };
32
+ /**
33
+ * 命令名称常量
34
+ * 避免硬编码,确保命令注册和调用时名称一致
35
+ */
36
+ exports.COMMAND_NAMES = {
37
+ HOMEPAGE: 'homepage',
38
+ NEXUS_SWAGGER: 'nexus-swagger',
39
+ BC_MCP: 'bc-mcp',
40
+ };
41
+ /**
42
+ * 全局默认配置
43
+ */
44
+ exports.DEFAULT_CONFIG = {
45
+ /** 默认浏览器类型 */
46
+ browser: 'default',
47
+ /** 默认日志级别 */
48
+ logLevel: 'info',
49
+ /** 命令执行超时时间(毫秒) */
50
+ timeout: 30000,
51
+ };
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":";;;AAEA,qCAOmB;AANjB,yGAAA,cAAc,OAAA;AACd,0GAAA,eAAe,OAAA;AACf,2GAAA,gBAAgB,OAAA;AAChB,4GAAA,iBAAiB,OAAA;AACjB,oGAAA,SAAS,OAAA;AACT,yGAAA,cAAc,OAAA;AAEhB,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AAEzB;;;GAGG;AACU,QAAA,UAAU,GAAe;IACpC,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,mDAAmD;CACjE,CAAC;AAEF;;;GAGG;AACU,QAAA,aAAa,GAAG;IAC3B,yBAAyB;IACzB,QAAQ,EAAE,mCAAmC;IAC7C,oCAAoC;IACpC,aAAa,EAAE,4DAA4D;CACnE,CAAC;AAEX;;;GAGG;AACU,QAAA,aAAa,GAAG;IAC3B,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,MAAM,EAAE,QAAQ;CACR,CAAC;AAEX;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,cAAc;IACd,OAAO,EAAE,SAAS;IAClB,aAAa;IACb,QAAQ,EAAE,MAAM;IAChB,mBAAmB;IACnB,OAAO,EAAE,KAAK;CACN,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { CommandRegistry } from './command-registry';
2
+ /**
3
+ * CLI 应用主类
4
+ * 负责应用启动、参数解析、帮助信息展示、版本信息输出、命令分发等
5
+ * 作为整个 CLI 应用的编排入口,协调各模块工作
6
+ */
7
+ export declare class CLIApplication {
8
+ /** 命令注册器实例 */
9
+ private registry;
10
+ /**
11
+ * 构造函数
12
+ * @param registry 可选的命令注册器,默认使用全局单例
13
+ */
14
+ constructor(registry?: CommandRegistry);
15
+ /**
16
+ * 初始化 CLI 应用
17
+ * 包括注册所有内置命令
18
+ */
19
+ initialize(): void;
20
+ /**
21
+ * 应用启动入口
22
+ * 解析命令行参数并执行相应操作
23
+ * @param argv 命令行参数数组,默认使用 process.argv
24
+ */
25
+ run(argv?: string[]): Promise<number>;
26
+ /**
27
+ * 处理全局选项(如 --version、--help、--debug 等)
28
+ * @param args 命令行参数
29
+ */
30
+ private processGlobalOptions;
31
+ /**
32
+ * 显示欢迎信息(Banner)
33
+ */
34
+ private showWelcome;
35
+ /**
36
+ * 显示版本信息
37
+ */
38
+ private showVersion;
39
+ /**
40
+ * 显示帮助信息
41
+ */
42
+ private showHelp;
43
+ /**
44
+ * 格式化输出命令条目
45
+ */
46
+ private printCommand;
47
+ /**
48
+ * 格式化输出选项条目
49
+ */
50
+ private printOption;
51
+ }
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.CLIApplication = void 0;
40
+ const _ = __importStar(require("lodash"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const command_registry_1 = require("./command-registry");
43
+ const commands_1 = require("../commands");
44
+ const utils_1 = require("../utils");
45
+ const constants_1 = require("../constants");
46
+ const types_1 = require("../types");
47
+ /**
48
+ * CLI 应用主类
49
+ * 负责应用启动、参数解析、帮助信息展示、版本信息输出、命令分发等
50
+ * 作为整个 CLI 应用的编排入口,协调各模块工作
51
+ */
52
+ class CLIApplication {
53
+ /** 命令注册器实例 */
54
+ registry;
55
+ /**
56
+ * 构造函数
57
+ * @param registry 可选的命令注册器,默认使用全局单例
58
+ */
59
+ constructor(registry) {
60
+ this.registry = registry || command_registry_1.commandRegistry;
61
+ }
62
+ /**
63
+ * 初始化 CLI 应用
64
+ * 包括注册所有内置命令
65
+ */
66
+ initialize() {
67
+ utils_1.logger.debug('CLIApplication: 开始初始化...');
68
+ // 批量注册所有内置命令
69
+ const registeredCount = this.registry.registerAll(commands_1.commands);
70
+ utils_1.logger.debug(`CLIApplication: 已注册 ${registeredCount} 个内置命令`);
71
+ utils_1.logger.debug('CLIApplication: 初始化完成');
72
+ }
73
+ /**
74
+ * 应用启动入口
75
+ * 解析命令行参数并执行相应操作
76
+ * @param argv 命令行参数数组,默认使用 process.argv
77
+ */
78
+ async run(argv = process.argv) {
79
+ try {
80
+ // 1. 初始化应用
81
+ this.initialize();
82
+ // 2. 解析命令行参数(去除 node 和脚本路径)
83
+ const args = argv.slice(2);
84
+ utils_1.logger.debug(`CLIApplication: 收到命令行参数: ${JSON.stringify(args)}`);
85
+ // 3. 处理全局选项
86
+ const result = this.processGlobalOptions(args);
87
+ if (result.handled) {
88
+ // 全局选项已处理(如 --version、--help),直接返回
89
+ return result.exitCode;
90
+ }
91
+ // 4. 获取待执行的命令名称和剩余参数
92
+ const commandName = result.commandName;
93
+ const commandArgs = result.commandArgs;
94
+ const options = result.options;
95
+ // 5. 未指定命令时,显示帮助信息
96
+ if (_.isEmpty(commandName)) {
97
+ this.showWelcome();
98
+ this.showHelp();
99
+ return 0;
100
+ }
101
+ // 6. 分发执行命令
102
+ const success = await this.registry.execute(commandName, commandArgs, options);
103
+ return success ? 0 : 1;
104
+ }
105
+ catch (error) {
106
+ utils_1.logger.error('CLI 应用运行时发生未捕获错误:', error instanceof Error ? error.message : String(error));
107
+ if (error instanceof Error && !_.isEmpty(error.stack)) {
108
+ utils_1.logger.debug('错误堆栈:', error.stack);
109
+ }
110
+ return 1;
111
+ }
112
+ }
113
+ /**
114
+ * 处理全局选项(如 --version、--help、--debug 等)
115
+ * @param args 命令行参数
116
+ */
117
+ processGlobalOptions(args) {
118
+ const result = {
119
+ handled: false,
120
+ exitCode: 0,
121
+ commandName: '',
122
+ commandArgs: [],
123
+ options: {},
124
+ };
125
+ if (_.isEmpty(args)) {
126
+ return result;
127
+ }
128
+ const options = {};
129
+ const positional = [];
130
+ // 解析参数,区分选项(以 - 开头)和位置参数
131
+ _.forEach(args, (arg) => {
132
+ if (_.startsWith(arg, '--')) {
133
+ // 长选项
134
+ const option = _.trimStart(arg, '-');
135
+ if (option === 'version' || option === 'v') {
136
+ this.showVersion();
137
+ result.handled = true;
138
+ }
139
+ else if (option === 'help' || option === 'h') {
140
+ this.showHelp();
141
+ result.handled = true;
142
+ }
143
+ else if (option === 'debug') {
144
+ options.debug = true;
145
+ utils_1.logger.setLevel(types_1.LogLevel.DEBUG);
146
+ utils_1.logger.debug('已启用 Debug 日志模式');
147
+ }
148
+ else {
149
+ // 通用长选项,支持 --key=value 格式
150
+ const eqIndex = option.indexOf('=');
151
+ if (eqIndex > -1) {
152
+ const key = option.substring(0, eqIndex);
153
+ const value = option.substring(eqIndex + 1);
154
+ options[key] = value;
155
+ }
156
+ else {
157
+ options[option] = true;
158
+ }
159
+ }
160
+ }
161
+ else if (_.startsWith(arg, '-') && arg.length > 1) {
162
+ // 短选项
163
+ const short = arg.substring(1);
164
+ switch (short) {
165
+ case 'v':
166
+ this.showVersion();
167
+ result.handled = true;
168
+ break;
169
+ case 'h':
170
+ this.showHelp();
171
+ result.handled = true;
172
+ break;
173
+ case 'd':
174
+ options.debug = true;
175
+ utils_1.logger.setLevel(types_1.LogLevel.DEBUG);
176
+ utils_1.logger.debug('已启用 Debug 日志模式(短选项)');
177
+ break;
178
+ default:
179
+ options[short] = true;
180
+ }
181
+ }
182
+ else {
183
+ // 位置参数(命令名称或命令参数)
184
+ positional.push(arg);
185
+ }
186
+ });
187
+ result.options = options;
188
+ // 提取命令名称和命令参数
189
+ if (!_.isEmpty(positional)) {
190
+ result.commandName = positional[0];
191
+ result.commandArgs = positional.slice(1);
192
+ }
193
+ return result;
194
+ }
195
+ /**
196
+ * 显示欢迎信息(Banner)
197
+ */
198
+ showWelcome() {
199
+ const banner = `
200
+ ╔══════════════════════════════════════════════════════════════╗
201
+ ║ ║
202
+ ║ ${chalk_1.default.cyanBright('██████╗ ███████╗██╗ ██╗ ██████╗ ███╗ ██╗██████╗ ║')}
203
+ ║ ${chalk_1.default.cyanBright('██╔══██╗██╔════╝╚██╗ ██╔╝██╔═══██╗████╗ ██║██╔══██╗ ║')}
204
+ ║ ${chalk_1.default.cyanBright('██████╔╝█████╗ ╚████╔╝ ██║ ██║██╔██╗ ██║██║ ██║ ║')}
205
+ ║ ${chalk_1.default.cyanBright('██╔══██╗██╔══╝ ╚██╔╝ ██║ ██║██║╚██╗██║██║ ██║ ║')}
206
+ ║ ${chalk_1.default.cyanBright('██████╔╝███████╗ ██║ ╚██████╔╝██║ ╚████║██████╔╝ ║')}
207
+ ║ ${chalk_1.default.cyanBright('╚═════╝ ╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═════╝ ║')}
208
+ ║ ║
209
+ ║ ${chalk_1.default.greenBright('BeyondClick 命令行工具')} v${constants_1.CLI_CONFIG.version} ║
210
+ ║ ${chalk_1.default.gray(utils_1.CommonUtils.formatDate(undefined, 'YYYY-MM-DD'))} ║
211
+ ╚══════════════════════════════════════════════════════════════╝
212
+ `;
213
+ process.stdout.write(banner);
214
+ }
215
+ /**
216
+ * 显示版本信息
217
+ */
218
+ showVersion() {
219
+ const versionInfo = `${chalk_1.default.cyanBright(constants_1.CLI_CONFIG.name)} ${chalk_1.default.greenBright('v' + constants_1.CLI_CONFIG.version)}`;
220
+ process.stdout.write(versionInfo + '\n');
221
+ }
222
+ /**
223
+ * 显示帮助信息
224
+ */
225
+ showHelp() {
226
+ process.stdout.write('\n');
227
+ process.stdout.write(chalk_1.default.bold('📖 使用说明') + '\n');
228
+ process.stdout.write(chalk_1.default.gray(' 命令格式: ') +
229
+ chalk_1.default.whiteBright(`${constants_1.CLI_CONFIG.name} `) +
230
+ chalk_1.default.green('/<命令名称> ') +
231
+ chalk_1.default.gray('[选项]') +
232
+ '\n\n');
233
+ process.stdout.write(chalk_1.default.bold('🔧 全局选项') + '\n');
234
+ this.printOption('-v, --version', '显示版本信息');
235
+ this.printOption('-h, --help', '显示此帮助信息');
236
+ this.printOption('-d, --debug', '启用 Debug 日志模式');
237
+ process.stdout.write('\n');
238
+ process.stdout.write(chalk_1.default.bold('📦 可用命令') + '\n');
239
+ const allCommands = this.registry.getAllCommands();
240
+ if (_.isEmpty(allCommands)) {
241
+ process.stdout.write(chalk_1.default.yellow(' (暂无可用命令)\n'));
242
+ }
243
+ else {
244
+ // 使用 lodash 按命令名称排序显示
245
+ const sortedCommands = _.sortBy(allCommands, (cmd) => cmd.name);
246
+ _.forEach(sortedCommands, (cmd) => {
247
+ this.printCommand(cmd.name, cmd.description);
248
+ });
249
+ }
250
+ process.stdout.write('\n');
251
+ process.stdout.write(chalk_1.default.bold('💡 使用示例') + '\n');
252
+ process.stdout.write(chalk_1.default.gray(' # 打开 BeyondClick 业务平台主页') + '\n' +
253
+ chalk_1.default.cyan(` ${constants_1.CLI_CONFIG.name} /homepage`) + '\n\n');
254
+ process.stdout.write(chalk_1.default.gray(' # 打开 BeyondClick Nexus Swagger 文档页') + '\n' +
255
+ chalk_1.default.cyan(` ${constants_1.CLI_CONFIG.name} /nexus-swagger`) + '\n\n');
256
+ process.stdout.write(chalk_1.default.gray(' # 交互选择并调用 iCenter MCP 接口(默认 prod + 内置 API Key)') + '\n' +
257
+ chalk_1.default.cyan(` ${constants_1.CLI_CONFIG.name} /bc-mcp`) + '\n\n');
258
+ process.stdout.write(chalk_1.default.gray(' # 指定测试环境') + '\n' +
259
+ chalk_1.default.cyan(` ${constants_1.CLI_CONFIG.name} /bc-mcp test`) + '\n\n');
260
+ process.stdout.write(chalk_1.default.gray(' # 查看帮助信息') + '\n' +
261
+ chalk_1.default.cyan(` ${constants_1.CLI_CONFIG.name} --help`) + '\n\n');
262
+ }
263
+ /**
264
+ * 格式化输出命令条目
265
+ */
266
+ printCommand(name, description) {
267
+ const commandStr = chalk_1.default.greenBright(` /${_.padEnd(name, 20)}`);
268
+ const descStr = chalk_1.default.white(description);
269
+ process.stdout.write(`${commandStr}${descStr}\n`);
270
+ }
271
+ /**
272
+ * 格式化输出选项条目
273
+ */
274
+ printOption(name, description) {
275
+ const optionStr = chalk_1.default.yellowBright(` ${_.padEnd(name, 20)}`);
276
+ const descStr = chalk_1.default.white(description);
277
+ process.stdout.write(`${optionStr}${descStr}\n`);
278
+ }
279
+ }
280
+ exports.CLIApplication = CLIApplication;
281
+ //# sourceMappingURL=cli-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-app.js","sourceRoot":"","sources":["../../src/core/cli-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { ICommand } from '../types';
2
+ /**
3
+ * 命令注册器类
4
+ * 负责注册、查找和执行 CLI 命令
5
+ * 采用注册中心模式,实现命令的低耦合管理,方便后续扩展新命令
6
+ */
7
+ export declare class CommandRegistry {
8
+ /** 命令存储 Map,key 为命令名称,value 为命令实例 */
9
+ private commands;
10
+ /**
11
+ * 注册一个命令到注册中心
12
+ * 命令名称不区分大小写,会统一转为小写存储
13
+ * @param command 命令实例
14
+ * @returns 是否注册成功
15
+ */
16
+ register(command: ICommand): boolean;
17
+ /**
18
+ * 批量注册多个命令
19
+ * @param commands 命令实例数组
20
+ * @returns 成功注册的命令数量
21
+ */
22
+ registerAll(commands: ICommand[]): number;
23
+ /**
24
+ * 根据名称查找命令
25
+ * @param name 命令名称(不区分大小写)
26
+ * @returns 命令实例,未找到返回 undefined
27
+ */
28
+ find(name: string): ICommand | undefined;
29
+ /**
30
+ * 检查指定名称的命令是否存在
31
+ * @param name 命令名称
32
+ * @returns 是否存在
33
+ */
34
+ has(name: string): boolean;
35
+ /**
36
+ * 获取所有已注册的命令列表
37
+ * @returns 命令实例数组
38
+ */
39
+ getAllCommands(): ICommand[];
40
+ /**
41
+ * 获取所有已注册的命令名称列表
42
+ * @returns 命令名称数组
43
+ */
44
+ getAllCommandNames(): string[];
45
+ /**
46
+ * 执行指定名称的命令
47
+ * 自动解析命令名称(支持带斜杠前缀,如 /homepage)
48
+ * @param name 命令名称或带斜杠的命令(如 /homepage 或 homepage)
49
+ * @param args 命令参数
50
+ * @param options 命令选项
51
+ * @returns Promise<boolean> 是否执行成功
52
+ */
53
+ execute(name: string, args?: string[], options?: Record<string, unknown>): Promise<boolean>;
54
+ /**
55
+ * 注销一个命令
56
+ * @param name 命令名称
57
+ * @returns 是否成功注销
58
+ */
59
+ unregister(name: string): boolean;
60
+ /**
61
+ * 清空所有已注册的命令
62
+ */
63
+ clear(): void;
64
+ /**
65
+ * 获取已注册命令数量
66
+ * @returns 命令数量
67
+ */
68
+ size(): number;
69
+ }
70
+ /** 导出全局命令注册器单例 */
71
+ export declare const commandRegistry: CommandRegistry;