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,208 @@
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.BcMcpCommand = void 0;
40
+ const _ = __importStar(require("lodash"));
41
+ const dayjs_1 = __importDefault(require("dayjs"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const axios_1 = require("axios");
44
+ const types_1 = require("../types");
45
+ const utils_1 = require("../utils");
46
+ const constants_1 = require("../constants");
47
+ /**
48
+ * 调用 iCenter MCP 接口命令
49
+ * 命令名称: /bc-mcp
50
+ * 功能: 交互选择 api-doc 中的接口,使用文档默认请求体发起调用
51
+ */
52
+ class BcMcpCommand {
53
+ /** 命令名称 */
54
+ name = constants_1.COMMAND_NAMES.BC_MCP;
55
+ /** 命令描述 */
56
+ description = '交互选择并调用 iCenter MCP 接口(请求体默认使用文档示例)';
57
+ /** 命令使用示例 */
58
+ usage = `
59
+ /${constants_1.COMMAND_NAMES.BC_MCP}
60
+ /${constants_1.COMMAND_NAMES.BC_MCP} test
61
+ /${constants_1.COMMAND_NAMES.BC_MCP} prod sk-your-api-key
62
+ sino-bc-cli /${constants_1.COMMAND_NAMES.BC_MCP} --env=pre --api-key=sk-xxx
63
+ `;
64
+ /**
65
+ * 命令执行函数
66
+ * @param args 位置参数:[ENV] [API_KEY]
67
+ * @param options 解析后的选项,支持 --env / --api-key
68
+ */
69
+ async execute(args, options) {
70
+ utils_1.logger.debug(`[BcMcpCommand] 命令执行开始,参数: ${JSON.stringify(args)}`);
71
+ const startTime = (0, dayjs_1.default)();
72
+ const env = this.resolveEnv(args, options);
73
+ const apiKey = this.resolveApiKey(args, options);
74
+ const gateway = (0, constants_1.getGatewayConfig)(env);
75
+ utils_1.logger.info(`[${utils_1.CommonUtils.formatDate(startTime)}] 当前环境: ${gateway.label} (${env}),网关: ${gateway.baseUrl}`);
76
+ const api = await this.selectApi();
77
+ const url = (0, constants_1.joinGatewayUrl)(env, api.path);
78
+ this.printRequestPreview(api, url, apiKey);
79
+ await this.callApi(api, url, apiKey);
80
+ const durationSec = _.round((0, dayjs_1.default)().diff(startTime) / 1000, 2);
81
+ utils_1.logger.debug(`[BcMcpCommand] 命令执行完成,耗时: ${durationSec} 秒`);
82
+ }
83
+ /**
84
+ * 解析环境参数,优先级:--env > 位置参数中的合法 ENV > 默认 prod
85
+ */
86
+ resolveEnv(args, options) {
87
+ const optionValue = this.pickOption(options, ['env', 'ENV']);
88
+ if ((0, constants_1.isEnvName)(optionValue)) {
89
+ return optionValue;
90
+ }
91
+ if (!_.isNil(optionValue) && optionValue !== true) {
92
+ throw new Error(`无效的 ENV: ${String(optionValue)},仅支持 test / pre / prod`);
93
+ }
94
+ const argEnv = _.find(args, (item) => (0, constants_1.isEnvName)(_.toLower(_.trim(item))));
95
+ if (!_.isNil(argEnv)) {
96
+ return _.toLower(_.trim(argEnv));
97
+ }
98
+ return types_1.EnvName.PROD;
99
+ }
100
+ /**
101
+ * 解析 API Key,优先级:--api-key > 非 ENV 的位置参数 > 默认值
102
+ */
103
+ resolveApiKey(args, options) {
104
+ const optionValue = this.pickOption(options, ['api-key', 'apiKey', 'API_KEY']);
105
+ if (_.isString(optionValue) && !_.isEmpty(_.trim(optionValue))) {
106
+ return _.trim(optionValue);
107
+ }
108
+ const argKey = _.find(args, (item) => !(0, constants_1.isEnvName)(_.toLower(_.trim(item))));
109
+ if (!_.isNil(argKey) && !_.isEmpty(_.trim(argKey))) {
110
+ return _.trim(argKey);
111
+ }
112
+ return constants_1.DEFAULT_API_KEY;
113
+ }
114
+ /**
115
+ * 从 options 中按候选 key 取第一个有效值
116
+ */
117
+ pickOption(options, keys) {
118
+ if (_.isNil(options)) {
119
+ return undefined;
120
+ }
121
+ const matchedKey = _.find(keys, (key) => !_.isUndefined(options[key]));
122
+ return _.isNil(matchedKey) ? undefined : options[matchedKey];
123
+ }
124
+ /**
125
+ * 打印接口清单并让用户选择
126
+ */
127
+ async selectApi() {
128
+ process.stdout.write('\n');
129
+ process.stdout.write(chalk_1.default.bold('📦 可调用接口') + chalk_1.default.gray('(来源: src/api-doc)') + '\n\n');
130
+ _.forEach(constants_1.ICENTER_MCP_APIS, (api, index) => {
131
+ const serial = chalk_1.default.greenBright(` ${index + 1}.`);
132
+ const title = chalk_1.default.whiteBright(` ${api.displayName}`);
133
+ const meta = chalk_1.default.gray(` ${api.method} ${api.name}`);
134
+ const desc = chalk_1.default.white(` ${api.description}`);
135
+ process.stdout.write(`${serial}${title}\n${meta}\n${desc}\n\n`);
136
+ });
137
+ const selectedIndex = await utils_1.PromptUtils.selectIndex(constants_1.ICENTER_MCP_APIS.length);
138
+ return constants_1.ICENTER_MCP_APIS[selectedIndex];
139
+ }
140
+ /**
141
+ * 打印即将发起的请求概要
142
+ */
143
+ printRequestPreview(api, url, apiKey) {
144
+ utils_1.logger.info(`已选择: ${api.displayName} (${api.name})`);
145
+ utils_1.logger.info(`请求方法: ${api.method}`);
146
+ utils_1.logger.info(`请求地址: ${url}`);
147
+ utils_1.logger.debug(`Authorization: Bearer ${apiKey}`);
148
+ utils_1.logger.tip('已注入请求头 Authorization: Bearer ***');
149
+ if (!_.isNil(api.defaultBody)) {
150
+ utils_1.logger.info('请求体(文档默认示例):');
151
+ utils_1.logger.info(api.defaultBody);
152
+ }
153
+ else {
154
+ utils_1.logger.info('该接口无请求体');
155
+ }
156
+ }
157
+ /**
158
+ * 按接口方法发起请求并打印响应
159
+ */
160
+ async callApi(api, url, apiKey) {
161
+ const config = {
162
+ timeout: api.timeout,
163
+ headers: {
164
+ Authorization: `Bearer ${apiKey}`,
165
+ 'Content-Type': 'application/json',
166
+ },
167
+ };
168
+ try {
169
+ utils_1.logger.info('正在发起请求...');
170
+ const data = api.method === 'GET'
171
+ ? await utils_1.HttpUtils.get(url, config)
172
+ : await utils_1.HttpUtils.post(url, api.defaultBody, config);
173
+ utils_1.logger.success('接口调用成功,响应如下:');
174
+ process.stdout.write(this.formatResponse(data) + '\n');
175
+ }
176
+ catch (error) {
177
+ this.handleRequestError(error);
178
+ }
179
+ }
180
+ /**
181
+ * 将响应格式化为可读 JSON 文本
182
+ * version 接口可能返回 text/plain,需兜底解析
183
+ */
184
+ formatResponse(data) {
185
+ if (_.isString(data)) {
186
+ try {
187
+ return JSON.stringify(JSON.parse(data), null, 2);
188
+ }
189
+ catch {
190
+ return data;
191
+ }
192
+ }
193
+ return JSON.stringify(data, null, 2);
194
+ }
195
+ /**
196
+ * 统一处理 HTTP 失败:优先打印服务端响应体
197
+ */
198
+ handleRequestError(error) {
199
+ if (error instanceof axios_1.AxiosError && !_.isNil(error.response)) {
200
+ utils_1.logger.error(`接口调用失败,HTTP 状态码: ${error.response.status}`);
201
+ process.stdout.write(this.formatResponse(error.response.data) + '\n');
202
+ throw new Error(`接口调用失败: HTTP ${error.response.status}`);
203
+ }
204
+ throw error instanceof Error ? error : new Error(String(error));
205
+ }
206
+ }
207
+ exports.BcMcpCommand = BcMcpCommand;
208
+ //# sourceMappingURL=bc-mcp.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bc-mcp.command.js","sourceRoot":"","sources":["../../src/commands/bc-mcp.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAA4B;AAC5B,kDAA0B;AAC1B,kDAA0B;AAC1B,iCAAmC;AACnC,oCAA8D;AAC9D,oCAAuE;AACvE,4CAOsB;AAEtB;;;;GAIG;AACH,MAAa,YAAY;IACvB,WAAW;IACK,IAAI,GAAW,yBAAa,CAAC,MAAM,CAAC;IAEpD,WAAW;IACK,WAAW,GAAW,qCAAqC,CAAC;IAE5E,aAAa;IACG,KAAK,GAAW;OAC3B,yBAAa,CAAC,MAAM;OACpB,yBAAa,CAAC,MAAM;OACpB,yBAAa,CAAC,MAAM;mBACR,yBAAa,CAAC,MAAM;GACpC,CAAC;IAEF;;;;OAIG;IACI,KAAK,CAAC,OAAO,CAAC,IAAc,EAAE,OAAiC;QACpE,cAAM,CAAC,KAAK,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElE,MAAM,SAAS,GAAG,IAAA,eAAK,GAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAA,4BAAgB,EAAC,GAAG,CAAC,CAAC;QAEtC,cAAM,CAAC,IAAI,CACT,IAAI,mBAAW,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,OAAO,CAAC,KAAK,KAAK,GAAG,SAAS,OAAO,CAAC,OAAO,EAAE,CAChG,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAA,0BAAc,EAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAErC,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,IAAA,eAAK,GAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,cAAM,CAAC,KAAK,CAAC,6BAA6B,WAAW,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,IAAc,EAAE,OAAiC;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,IAAI,IAAA,qBAAS,EAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,qBAAS,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAY,CAAC;QAC9C,CAAC;QAED,OAAO,eAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAc,EAAE,OAAiC;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAA,qBAAS,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,2BAAe,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,UAAU,CAChB,OAA4C,EAC5C,IAAc;QAEd,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,CAAC;QAEzF,CAAC,CAAC,OAAO,CAAC,4BAAgB,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACzC,MAAM,MAAM,GAAG,eAAK,CAAC,WAAW,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,eAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,mBAAW,CAAC,WAAW,CAAC,4BAAgB,CAAC,MAAM,CAAC,CAAC;QAC7E,OAAO,4BAAgB,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,GAAoB,EAAE,GAAW,EAAE,MAAc;QAC3E,cAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QACrD,cAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACnC,cAAM,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QAC5B,cAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;QAChD,cAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAE/C,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,cAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC5B,cAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,cAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CAAC,GAAoB,EAAE,GAAW,EAAE,MAAc;QACrE,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC;QAEF,IAAI,CAAC;YACH,cAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,MAAM,IAAI,GACR,GAAG,CAAC,MAAM,KAAK,KAAK;gBAClB,CAAC,CAAC,MAAM,iBAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;gBAClC,CAAC,CAAC,MAAM,iBAAS,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAEzD,cAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,IAAa;QAClC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAc;QACvC,IAAI,KAAK,YAAY,kBAAU,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,cAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;CACF;AAvLD,oCAuLC"}
@@ -0,0 +1,19 @@
1
+ import { ICommand } from '../types';
2
+ /**
3
+ * 打开 BeyondClick 业务平台主页命令
4
+ * 命令名称: /homepage
5
+ * 功能: 使用默认浏览器打开 BeyondClick 业务平台主页
6
+ */
7
+ export declare class HomepageCommand implements ICommand {
8
+ /** 命令名称 */
9
+ readonly name: string;
10
+ /** 命令描述 */
11
+ readonly description: string;
12
+ /** 命令使用示例 */
13
+ readonly usage: string;
14
+ /**
15
+ * 命令执行函数
16
+ * @param args 命令行参数(此命令暂不使用参数)
17
+ */
18
+ execute(args: string[]): Promise<void>;
19
+ }
@@ -0,0 +1,96 @@
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.HomepageCommand = void 0;
40
+ const _ = __importStar(require("lodash"));
41
+ const dayjs_1 = __importDefault(require("dayjs"));
42
+ const utils_1 = require("../utils");
43
+ const constants_1 = require("../constants");
44
+ /**
45
+ * 打开 BeyondClick 业务平台主页命令
46
+ * 命令名称: /homepage
47
+ * 功能: 使用默认浏览器打开 BeyondClick 业务平台主页
48
+ */
49
+ class HomepageCommand {
50
+ /** 命令名称 */
51
+ name = constants_1.COMMAND_NAMES.HOMEPAGE;
52
+ /** 命令描述 */
53
+ description = '使用默认浏览器打开 BeyondClick 业务平台主页';
54
+ /** 命令使用示例 */
55
+ usage = `
56
+ /${constants_1.COMMAND_NAMES.HOMEPAGE}
57
+ sino-bc-cli /${constants_1.COMMAND_NAMES.HOMEPAGE}
58
+ `;
59
+ /**
60
+ * 命令执行函数
61
+ * @param args 命令行参数(此命令暂不使用参数)
62
+ */
63
+ async execute(args) {
64
+ utils_1.logger.debug(`[HomepageCommand] 命令执行开始,参数: ${JSON.stringify(args)}`);
65
+ // 使用 dayjs 记录执行时间
66
+ const startTime = (0, dayjs_1.default)();
67
+ utils_1.logger.info(`[${utils_1.CommonUtils.formatDate(startTime)}] 正在打开 BeyondClick 业务平台主页...`);
68
+ // 获取目标 URL
69
+ const targetUrl = constants_1.PLATFORM_URLS.HOMEPAGE;
70
+ utils_1.logger.debug(`[HomepageCommand] 目标 URL: ${targetUrl}`);
71
+ // 可选: 在打开前检测 URL 是否可访问(使用 HttpUtils)
72
+ // 这里不强制检测,避免因网络问题影响用户使用
73
+ try {
74
+ utils_1.logger.debug('[HomepageCommand] 正在检查目标站点连通性...');
75
+ // 仅做 HEAD 请求检测,设置较短超时,不阻塞主流程
76
+ await utils_1.HttpUtils.get(targetUrl, { timeout: 3000 });
77
+ utils_1.logger.success('目标站点连通性检查通过');
78
+ }
79
+ catch (error) {
80
+ // 连通性检查失败只给出警告,不阻止打开浏览器
81
+ utils_1.logger.warn('目标站点连通性检查未通过(可能是网络限制或超时),将继续尝试打开浏览器');
82
+ utils_1.logger.debug('连通性检查详情:', error instanceof Error ? error.message : String(error));
83
+ }
84
+ // 调用浏览器工具打开 URL
85
+ const openSuccess = await utils_1.BrowserUtils.openUrl(targetUrl);
86
+ if (!openSuccess) {
87
+ throw new Error('打开 BeyondClick 业务平台主页失败,请检查网络连接或手动访问');
88
+ }
89
+ // 使用 lodash 计算耗时
90
+ const durationMs = (0, dayjs_1.default)().diff(startTime);
91
+ const durationSec = _.round(durationMs / 1000, 2);
92
+ utils_1.logger.debug(`[HomepageCommand] 命令执行完成,耗时: ${durationSec} 秒`);
93
+ }
94
+ }
95
+ exports.HomepageCommand = HomepageCommand;
96
+ //# sourceMappingURL=homepage.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.command.js","sourceRoot":"","sources":["../../src/commands/homepage.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAA4B;AAC5B,kDAA0B;AAC1B,oCAAwE;AAExE,4CAA4D;AAE5D;;;;GAIG;AACH,MAAa,eAAe;IAC1B,WAAW;IACK,IAAI,GAAW,yBAAa,CAAC,QAAQ,CAAC;IAEtD,WAAW;IACK,WAAW,GAAW,8BAA8B,CAAC;IAErE,aAAa;IACG,KAAK,GAAW;OAC3B,yBAAa,CAAC,QAAQ;mBACV,yBAAa,CAAC,QAAQ;GACtC,CAAC;IAEF;;;OAGG;IACI,KAAK,CAAC,OAAO,CAAC,IAAc;QACjC,cAAM,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAErE,kBAAkB;QAClB,MAAM,SAAS,GAAG,IAAA,eAAK,GAAE,CAAC;QAC1B,cAAM,CAAC,IAAI,CAAC,IAAI,mBAAW,CAAC,UAAU,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAEjF,WAAW;QACX,MAAM,SAAS,GAAG,yBAAa,CAAC,QAAQ,CAAC;QACzC,cAAM,CAAC,KAAK,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;QAEvD,qCAAqC;QACrC,wBAAwB;QACxB,IAAI,CAAC;YACH,cAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACjD,6BAA6B;YAC7B,MAAM,iBAAS,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,cAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wBAAwB;YACxB,cAAM,CAAC,IAAI,CACT,qCAAqC,CACtC,CAAC;YACF,cAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,gBAAgB;QAChB,MAAM,WAAW,GAAG,MAAM,oBAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,IAAA,eAAK,GAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,cAAM,CAAC,KAAK,CAAC,gCAAgC,WAAW,IAAI,CAAC,CAAC;IAChE,CAAC;CACF;AAvDD,0CAuDC"}
@@ -0,0 +1,10 @@
1
+ import type { ICommand } from '../types';
2
+ /**
3
+ * 命令导出统一入口
4
+ * 集中导出所有命令实例,便于批量注册
5
+ * 新增命令时只需在此数组中添加即可,无需修改注册逻辑
6
+ */
7
+ export declare const commands: ICommand[];
8
+ export { HomepageCommand } from './homepage.command';
9
+ export { NexusSwaggerCommand } from './nexus-swagger.command';
10
+ export { BcMcpCommand } from './bc-mcp.command';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BcMcpCommand = exports.NexusSwaggerCommand = exports.HomepageCommand = exports.commands = void 0;
4
+ const homepage_command_1 = require("./homepage.command");
5
+ const nexus_swagger_command_1 = require("./nexus-swagger.command");
6
+ const bc_mcp_command_1 = require("./bc-mcp.command");
7
+ /**
8
+ * 命令导出统一入口
9
+ * 集中导出所有命令实例,便于批量注册
10
+ * 新增命令时只需在此数组中添加即可,无需修改注册逻辑
11
+ */
12
+ exports.commands = [
13
+ new homepage_command_1.HomepageCommand(),
14
+ new nexus_swagger_command_1.NexusSwaggerCommand(),
15
+ new bc_mcp_command_1.BcMcpCommand(),
16
+ ];
17
+ var homepage_command_2 = require("./homepage.command");
18
+ Object.defineProperty(exports, "HomepageCommand", { enumerable: true, get: function () { return homepage_command_2.HomepageCommand; } });
19
+ var nexus_swagger_command_2 = require("./nexus-swagger.command");
20
+ Object.defineProperty(exports, "NexusSwaggerCommand", { enumerable: true, get: function () { return nexus_swagger_command_2.NexusSwaggerCommand; } });
21
+ var bc_mcp_command_2 = require("./bc-mcp.command");
22
+ Object.defineProperty(exports, "BcMcpCommand", { enumerable: true, get: function () { return bc_mcp_command_2.BcMcpCommand; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,yDAAqD;AACrD,mEAA8D;AAC9D,qDAAgD;AAGhD;;;;GAIG;AACU,QAAA,QAAQ,GAAe;IAClC,IAAI,kCAAe,EAAE;IACrB,IAAI,2CAAmB,EAAE;IACzB,IAAI,6BAAY,EAAE;CACnB,CAAC;AAEF,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,mDAAgD;AAAvC,8GAAA,YAAY,OAAA"}
@@ -0,0 +1,19 @@
1
+ import { ICommand } from '../types';
2
+ /**
3
+ * 打开 BeyondClick Nexus Swagger 文档页命令
4
+ * 命令名称: /nexus-swagger
5
+ * 功能: 使用默认浏览器打开 BeyondClick Nexus Swagger 文档页
6
+ */
7
+ export declare class NexusSwaggerCommand implements ICommand {
8
+ /** 命令名称 */
9
+ readonly name: string;
10
+ /** 命令描述 */
11
+ readonly description: string;
12
+ /** 命令使用示例 */
13
+ readonly usage: string;
14
+ /**
15
+ * 命令执行函数
16
+ * @param args 命令行参数(此命令暂不使用参数)
17
+ */
18
+ execute(args: string[]): Promise<void>;
19
+ }
@@ -0,0 +1,95 @@
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.NexusSwaggerCommand = void 0;
40
+ const _ = __importStar(require("lodash"));
41
+ const dayjs_1 = __importDefault(require("dayjs"));
42
+ const utils_1 = require("../utils");
43
+ const constants_1 = require("../constants");
44
+ /**
45
+ * 打开 BeyondClick Nexus Swagger 文档页命令
46
+ * 命令名称: /nexus-swagger
47
+ * 功能: 使用默认浏览器打开 BeyondClick Nexus Swagger 文档页
48
+ */
49
+ class NexusSwaggerCommand {
50
+ /** 命令名称 */
51
+ name = constants_1.COMMAND_NAMES.NEXUS_SWAGGER;
52
+ /** 命令描述 */
53
+ description = '使用默认浏览器打开 BeyondClick Nexus Swagger 文档页';
54
+ /** 命令使用示例 */
55
+ usage = `
56
+ /${constants_1.COMMAND_NAMES.NEXUS_SWAGGER}
57
+ sino-bc-cli /${constants_1.COMMAND_NAMES.NEXUS_SWAGGER}
58
+ `;
59
+ /**
60
+ * 命令执行函数
61
+ * @param args 命令行参数(此命令暂不使用参数)
62
+ */
63
+ async execute(args) {
64
+ utils_1.logger.debug(`[NexusSwaggerCommand] 命令执行开始,参数: ${JSON.stringify(args)}`);
65
+ // 使用 dayjs 记录执行时间
66
+ const startTime = (0, dayjs_1.default)();
67
+ utils_1.logger.info(`[${utils_1.CommonUtils.formatDate(startTime)}] 正在打开 BeyondClick Nexus Swagger 文档页...`);
68
+ // 获取目标 URL
69
+ const targetUrl = constants_1.PLATFORM_URLS.NEXUS_SWAGGER;
70
+ utils_1.logger.debug(`[NexusSwaggerCommand] 目标 URL: ${targetUrl}`);
71
+ // 可选: 在打开前检测 URL 是否可访问
72
+ try {
73
+ utils_1.logger.debug('[NexusSwaggerCommand] 正在检查目标站点连通性...');
74
+ // 仅做请求检测,设置较短超时,不阻塞主流程
75
+ await utils_1.HttpUtils.get(targetUrl, { timeout: 3000 });
76
+ utils_1.logger.success('目标站点连通性检查通过');
77
+ }
78
+ catch (error) {
79
+ // 连通性检查失败只给出警告,不阻止打开浏览器
80
+ utils_1.logger.warn('目标站点连通性检查未通过(可能是网络限制、内网环境或超时),将继续尝试打开浏览器');
81
+ utils_1.logger.debug('连通性检查详情:', error instanceof Error ? error.message : String(error));
82
+ }
83
+ // 调用浏览器工具打开 URL
84
+ const openSuccess = await utils_1.BrowserUtils.openUrl(targetUrl);
85
+ if (!openSuccess) {
86
+ throw new Error('打开 BeyondClick Nexus Swagger 文档页失败,请检查网络连接或手动访问');
87
+ }
88
+ // 使用 lodash 计算耗时
89
+ const durationMs = (0, dayjs_1.default)().diff(startTime);
90
+ const durationSec = _.round(durationMs / 1000, 2);
91
+ utils_1.logger.debug(`[NexusSwaggerCommand] 命令执行完成,耗时: ${durationSec} 秒`);
92
+ }
93
+ }
94
+ exports.NexusSwaggerCommand = NexusSwaggerCommand;
95
+ //# sourceMappingURL=nexus-swagger.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nexus-swagger.command.js","sourceRoot":"","sources":["../../src/commands/nexus-swagger.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAA4B;AAC5B,kDAA0B;AAC1B,oCAAwE;AAExE,4CAA4D;AAE5D;;;;GAIG;AACH,MAAa,mBAAmB;IAC9B,WAAW;IACK,IAAI,GAAW,yBAAa,CAAC,aAAa,CAAC;IAE3D,WAAW;IACK,WAAW,GAAW,yCAAyC,CAAC;IAEhF,aAAa;IACG,KAAK,GAAW;OAC3B,yBAAa,CAAC,aAAa;mBACf,yBAAa,CAAC,aAAa;GAC3C,CAAC;IAEF;;;OAGG;IACI,KAAK,CAAC,OAAO,CAAC,IAAc;QACjC,cAAM,CAAC,KAAK,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzE,kBAAkB;QAClB,MAAM,SAAS,GAAG,IAAA,eAAK,GAAE,CAAC;QAC1B,cAAM,CAAC,IAAI,CAAC,IAAI,mBAAW,CAAC,UAAU,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;QAE5F,WAAW;QACX,MAAM,SAAS,GAAG,yBAAa,CAAC,aAAa,CAAC;QAC9C,cAAM,CAAC,KAAK,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;QAE3D,uBAAuB;QACvB,IAAI,CAAC;YACH,cAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACrD,uBAAuB;YACvB,MAAM,iBAAS,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,cAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wBAAwB;YACxB,cAAM,CAAC,IAAI,CACT,0CAA0C,CAC3C,CAAC;YACF,cAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,gBAAgB;QAChB,MAAM,WAAW,GAAG,MAAM,oBAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,IAAA,eAAK,GAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,cAAM,CAAC,KAAK,CAAC,oCAAoC,WAAW,IAAI,CAAC,CAAC;IACpE,CAAC;CACF;AAtDD,kDAsDC"}
@@ -0,0 +1,6 @@
1
+ import { IApiDocEndpoint } from '../types';
2
+ /**
3
+ * iCenter MCP 可调用接口清单
4
+ * 与 src/api-doc/README.md 及各接口文档中的请求示例保持一致
5
+ */
6
+ export declare const ICENTER_MCP_APIS: IApiDocEndpoint[];
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ICENTER_MCP_APIS = void 0;
4
+ /**
5
+ * iCenter MCP 可调用接口清单
6
+ * 与 src/api-doc/README.md 及各接口文档中的请求示例保持一致
7
+ */
8
+ exports.ICENTER_MCP_APIS = [
9
+ {
10
+ name: 'icenter-mcp-strategy-dimension-facebook-ad-list',
11
+ displayName: 'Facebook广告策略维度数据',
12
+ description: '查询广告策略配置(不含成效指标)',
13
+ method: 'POST',
14
+ path: '/mcp/strategy/dimension/facebook/ad/list',
15
+ timeout: 20000,
16
+ // 默认请求体取自文档「请求示例」
17
+ defaultBody: {
18
+ startDate: '2026-08-01',
19
+ endDate: '2026-08-31',
20
+ dimensionValues: {
21
+ account_id: ['act_1036928420879324'],
22
+ },
23
+ dimensions: [
24
+ 'account_id',
25
+ 'ad_id',
26
+ 'ad_name',
27
+ 'objective',
28
+ 'optimization_goal',
29
+ 'bid_strategy',
30
+ 'audience_type',
31
+ ],
32
+ order: 'ad_id',
33
+ orderType: 'asc',
34
+ page: 1,
35
+ size: 20,
36
+ },
37
+ },
38
+ {
39
+ name: 'icenter-mcp-strategy-metrics-facebook-ad-list',
40
+ displayName: 'Facebook广告策略成效数据',
41
+ description: '查询策略维度 + 成效指标(最多近 21 天)',
42
+ method: 'POST',
43
+ path: '/mcp/strategy/metrics/facebook/ad/list',
44
+ timeout: 20000,
45
+ // 默认请求体取自文档「请求示例」
46
+ defaultBody: {
47
+ startDate: '2026-08-10',
48
+ endDate: '2026-08-31',
49
+ dimensionValues: {
50
+ account_id: ['act_1036928420879324'],
51
+ },
52
+ dimensions: [
53
+ 'account_id',
54
+ 'objective',
55
+ 'optimization_goal',
56
+ 'bid_strategy',
57
+ ],
58
+ indicators: [
59
+ 'spend_usd',
60
+ 'impressions',
61
+ 'clicks',
62
+ 'purchase',
63
+ 'purchase_value',
64
+ ],
65
+ order: 'spend_usd',
66
+ orderType: 'desc',
67
+ page: 1,
68
+ size: 20,
69
+ },
70
+ },
71
+ {
72
+ name: 'icenter-mcp-version-query',
73
+ displayName: '查询git最新提交版本',
74
+ description: '查询 iCenter 服务 git 最新提交版本',
75
+ method: 'GET',
76
+ path: '/version',
77
+ timeout: 20000,
78
+ },
79
+ ];
80
+ //# sourceMappingURL=api-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-doc.js","sourceRoot":"","sources":["../../src/constants/api-doc.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACU,QAAA,gBAAgB,GAAsB;IACjD;QACE,IAAI,EAAE,iDAAiD;QACvD,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,kBAAkB;QAC/B,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,0CAA0C;QAChD,OAAO,EAAE,KAAK;QACd,kBAAkB;QAClB,WAAW,EAAE;YACX,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,YAAY;YACrB,eAAe,EAAE;gBACf,UAAU,EAAE,CAAC,sBAAsB,CAAC;aACrC;YACD,UAAU,EAAE;gBACV,YAAY;gBACZ,OAAO;gBACP,SAAS;gBACT,WAAW;gBACX,mBAAmB;gBACnB,cAAc;gBACd,eAAe;aAChB;YACD,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,EAAE;SACT;KACF;IACD;QACE,IAAI,EAAE,+CAA+C;QACrD,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,yBAAyB;QACtC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,wCAAwC;QAC9C,OAAO,EAAE,KAAK;QACd,kBAAkB;QAClB,WAAW,EAAE;YACX,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,YAAY;YACrB,eAAe,EAAE;gBACf,UAAU,EAAE,CAAC,sBAAsB,CAAC;aACrC;YACD,UAAU,EAAE;gBACV,YAAY;gBACZ,WAAW;gBACX,mBAAmB;gBACnB,cAAc;aACf;YACD,UAAU,EAAE;gBACV,WAAW;gBACX,aAAa;gBACb,QAAQ;gBACR,UAAU;gBACV,gBAAgB;aACjB;YACD,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,EAAE;SACT;KACF;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE,0BAA0B;QACvC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,KAAK;KACf;CACF,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { EnvName, IGatewayConfig } from '../types';
2
+ /**
3
+ * 调用 iCenter MCP 接口时的默认 API Key
4
+ * 请求头:Authorization: Bearer ${API_KEY}
5
+ */
6
+ export declare const DEFAULT_API_KEY = "eyJraWQiOiIyMDI2MDkwNyIsImFsZyI6IlJTMjU2IiwidHlwIjoiSldUIn0.eyJzdWIiOiI4ODg4IiwiaWF0IjoxNzg4NzY3ODc1LCJleHAiOjE3OTEzNTk4NzV9.I4ZB2b__CYtnzUX2ThKPX3eUPnPdlDzvtZoXZlu-D0BiqsAw7vSsj8GpO-X4CpqwxTpfAKrSZnaIqT9JXVVQcRwmnUdMdbyV6Gm1bTiFoXYD_m2jEuKSpqLYzXVCMFuGfQrYg-FZJFhKcw2vb4i-Mm_Qmtp9AkaSzR6caWlbix9hPrU1JKTLWwFeXpRBu9AxA1rxcya8-aI8PRkTk4rhOzfcQ7Q91CnWmuq4Kfs2e-8t1dTp7TubXfG82wi8CLTkTMa1UrugSdogDqk2g6hiOWsoR6EtFQ3GcECVN1eU8YfiUSfoasXh8LANtuW3bDIJkn6Hn1ltt2d4vP3jOvAHTQ";
7
+ /**
8
+ * 三环境网关配置
9
+ */
10
+ export declare const GATEWAY_CONFIG: Record<EnvName, IGatewayConfig>;
11
+ /**
12
+ * 按环境读取网关配置
13
+ * @param env 环境标识
14
+ */
15
+ export declare function getGatewayConfig(env: EnvName): IGatewayConfig;
16
+ /**
17
+ * 按环境读取网关地址
18
+ * @param env 环境标识
19
+ */
20
+ export declare function getGatewayBaseUrl(env: EnvName): string;
21
+ /**
22
+ * 判断是否为合法环境标识
23
+ * @param value 待校验值
24
+ */
25
+ export declare function isEnvName(value: unknown): value is EnvName;
26
+ /**
27
+ * 拼接网关完整请求地址
28
+ * @param env 环境标识
29
+ * @param path 接口相对路径(以 / 开头)
30
+ */
31
+ export declare function joinGatewayUrl(env: EnvName, path: string): string;