cloudcc-cli 2.2.5 → 2.2.6
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/.cloudcc-cache.json +34 -0
- package/README.md +1423 -522
- package/bin/cc.js +0 -2
- package/bin/index.js +4 -0
- package/package.json +1 -1
- package/src/application/create.js +114 -0
- package/src/application/get.js +13 -0
- package/src/application/index.js +8 -0
- package/src/mcp/index.js +43 -9
- package/src/mcp/readme.md +6 -3
- package/src/mcp/tools/Application Creator/handler.js +80 -0
- package/src/mcp/tools/CloudCC Development Overview/prompt.js +4 -3
- package/src/mcp/tools/Menu Creator/handler.js +109 -0
- package/src/mcp/tools/Trigger Editor Guide/handler.js +4 -4
- package/src/menu/common.js +16 -0
- package/src/menu/create-object.js +94 -0
- package/src/menu/create-page.js +108 -0
- package/src/menu/create-script.js +108 -0
- package/src/menu/create-site.js +108 -0
- package/src/menu/create.js +54 -0
- package/src/menu/index.js +7 -0
- package/src/plugin/pull.js +3 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const { postClass } = require("../../utils/http")
|
|
2
|
+
const { getPackageJson } = require("../../utils/config");
|
|
3
|
+
const briefGet = require("../brief/get");
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { buildCommonMenuFields } = require('./common');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建自定义页面菜单
|
|
9
|
+
* @param {Array} argvs - 命令行参数数组
|
|
10
|
+
* @returns {Promise<Object>} 创建结果
|
|
11
|
+
*/
|
|
12
|
+
async function createPageMenu(argvs) {
|
|
13
|
+
try {
|
|
14
|
+
// 命令行参数格式:cc create menu page <path> <pageId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
15
|
+
// argvs: ['create', 'menu', 'page', '.', 'pageId', 'tabName', ...]
|
|
16
|
+
let path = argvs[3]; // 路径 (argvs[3])
|
|
17
|
+
let pageId = argvs[4]; // 页面ID (p1)
|
|
18
|
+
let tabName = argvs[5]; // 标签名称
|
|
19
|
+
let tabStyle = argvs[6] || "cloudtab145"; // 标签样式图标,默认 cloudtab145
|
|
20
|
+
let mobileimg = argvs[7] || "cloudcc01"; // 移动端图标,默认 cloudcc01
|
|
21
|
+
let cloudccservicetab = argvs[8] || "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
|
|
22
|
+
|
|
23
|
+
if (!pageId || !tabName) {
|
|
24
|
+
console.error();
|
|
25
|
+
console.error(chalk.red('Error: 缺少必需参数'));
|
|
26
|
+
console.error('用法: cc create menu page <path> <pageId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
27
|
+
console.error();
|
|
28
|
+
throw new Error('缺少必需参数: pageId 和 tabName');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let config = await getPackageJson(path);
|
|
32
|
+
|
|
33
|
+
// 从 brief/get 获取角色ID列表
|
|
34
|
+
// briefGet 期望 argvs[2] 是 path,所以需要调整参数数组
|
|
35
|
+
const briefArgvs = [argvs[0], argvs[1], path]; // ['create', 'menu', path]
|
|
36
|
+
let briefData = await briefGet(briefArgvs);
|
|
37
|
+
|
|
38
|
+
if (!briefData.success) {
|
|
39
|
+
console.error("获取角色列表失败:", briefData.message);
|
|
40
|
+
throw new Error("获取角色列表失败");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 提取所有角色的 ID 列表,格式为 "profileId_show"
|
|
44
|
+
const profileIds = briefData.data.map(profile => `${profile.id}_show`);
|
|
45
|
+
|
|
46
|
+
// 构建公共字段
|
|
47
|
+
const commonFields = buildCommonMenuFields(tabName, tabStyle, mobileimg, cloudccservicetab);
|
|
48
|
+
|
|
49
|
+
// 构建请求体
|
|
50
|
+
const requestBody = {
|
|
51
|
+
ed: "ed",
|
|
52
|
+
visited_0: "1",
|
|
53
|
+
visited_1: "1",
|
|
54
|
+
visited_2: "1",
|
|
55
|
+
allOrSome: "some",
|
|
56
|
+
type: "page",
|
|
57
|
+
p1: pageId,
|
|
58
|
+
p1_origin: {
|
|
59
|
+
label: "label.import.index.page",
|
|
60
|
+
fieldKey: "p1",
|
|
61
|
+
field: "Select",
|
|
62
|
+
required: "right",
|
|
63
|
+
hint: "label.customer.tab.step1.selectonepage",
|
|
64
|
+
rules: [
|
|
65
|
+
{
|
|
66
|
+
required: true,
|
|
67
|
+
message: "请选择页面",
|
|
68
|
+
trigger: "blur"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
value: pageId
|
|
72
|
+
},
|
|
73
|
+
...commonFields,
|
|
74
|
+
profileIds: profileIds,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// 显示创建进度
|
|
78
|
+
console.error();
|
|
79
|
+
console.error(chalk.green('Creating page menu, please wait...'));
|
|
80
|
+
console.error();
|
|
81
|
+
|
|
82
|
+
// 发送请求到服务器
|
|
83
|
+
const result = await postClass(
|
|
84
|
+
config.setupSvc + "/api/customTab/tabSetDone",
|
|
85
|
+
requestBody,
|
|
86
|
+
config.accessToken
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// API 返回结构中, result 字段决定调用是否成功
|
|
90
|
+
if (result && result.result) {
|
|
91
|
+
console.error();
|
|
92
|
+
console.error(chalk.green('Success!'));
|
|
93
|
+
console.error();
|
|
94
|
+
return result;
|
|
95
|
+
} else {
|
|
96
|
+
const msg = result && result.returnInfo ? result.returnInfo : 'Unknown error';
|
|
97
|
+
console.error();
|
|
98
|
+
console.error(chalk.red('Error:' + msg));
|
|
99
|
+
throw new Error('Create Page Menu Failed: ' + msg);
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error();
|
|
103
|
+
console.error(chalk.red("自定义页面菜单创建失败:"), error);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = createPageMenu;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const { postClass } = require("../../utils/http")
|
|
2
|
+
const { getPackageJson } = require("../../utils/config");
|
|
3
|
+
const briefGet = require("../brief/get");
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { buildCommonMenuFields } = require('./common');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建自定义脚本菜单
|
|
9
|
+
* @param {Array} argvs - 命令行参数数组
|
|
10
|
+
* @returns {Promise<Object>} 创建结果
|
|
11
|
+
*/
|
|
12
|
+
async function createScriptMenu(argvs) {
|
|
13
|
+
try {
|
|
14
|
+
// 命令行参数格式:cc create menu script <path> <scriptId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
15
|
+
// argvs: ['create', 'menu', 'script', '.', 'scriptId', 'tabName', ...]
|
|
16
|
+
let path = argvs[3]; // 路径 (argvs[3])
|
|
17
|
+
let scriptId = argvs[4]; // 脚本ID (p1)
|
|
18
|
+
let tabName = argvs[5]; // 标签名称
|
|
19
|
+
let tabStyle = argvs[6] || "cloudtab145"; // 标签样式图标,默认 cloudtab145
|
|
20
|
+
let mobileimg = argvs[7] || "cloudcc01"; // 移动端图标,默认 cloudcc01
|
|
21
|
+
let cloudccservicetab = argvs[8] || "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
|
|
22
|
+
|
|
23
|
+
if (!scriptId || !tabName) {
|
|
24
|
+
console.error();
|
|
25
|
+
console.error(chalk.red('Error: 缺少必需参数'));
|
|
26
|
+
console.error('用法: cc create menu script <path> <scriptId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
27
|
+
console.error();
|
|
28
|
+
throw new Error('缺少必需参数: scriptId 和 tabName');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let config = await getPackageJson(path);
|
|
32
|
+
|
|
33
|
+
// 从 brief/get 获取角色ID列表
|
|
34
|
+
// briefGet 期望 argvs[2] 是 path,所以需要调整参数数组
|
|
35
|
+
const briefArgvs = [argvs[0], argvs[1], path]; // ['create', 'menu', path]
|
|
36
|
+
let briefData = await briefGet(briefArgvs);
|
|
37
|
+
|
|
38
|
+
if (!briefData.success) {
|
|
39
|
+
console.error("获取角色列表失败:", briefData.message);
|
|
40
|
+
throw new Error("获取角色列表失败");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 提取所有角色的 ID 列表,格式为 "profileId_show"
|
|
44
|
+
const profileIds = briefData.data.map(profile => `${profile.id}_show`);
|
|
45
|
+
|
|
46
|
+
// 构建公共字段
|
|
47
|
+
const commonFields = buildCommonMenuFields(tabName, tabStyle, mobileimg, cloudccservicetab);
|
|
48
|
+
|
|
49
|
+
// 构建请求体
|
|
50
|
+
const requestBody = {
|
|
51
|
+
ed: "ed",
|
|
52
|
+
visited_0: "1",
|
|
53
|
+
visited_1: "1",
|
|
54
|
+
visited_2: "1",
|
|
55
|
+
allOrSome: "some",
|
|
56
|
+
type: "script",
|
|
57
|
+
p1: scriptId,
|
|
58
|
+
p1_origin: {
|
|
59
|
+
label: "label.import.index.script",
|
|
60
|
+
fieldKey: "p1",
|
|
61
|
+
field: "Select",
|
|
62
|
+
required: "right",
|
|
63
|
+
hint: "label.customer.tab.step1.selectonescript",
|
|
64
|
+
rules: [
|
|
65
|
+
{
|
|
66
|
+
required: true,
|
|
67
|
+
message: "请选择脚本",
|
|
68
|
+
trigger: "blur"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
value: scriptId
|
|
72
|
+
},
|
|
73
|
+
...commonFields,
|
|
74
|
+
profileIds: profileIds,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// 显示创建进度
|
|
78
|
+
console.error();
|
|
79
|
+
console.error(chalk.green('Creating script menu, please wait...'));
|
|
80
|
+
console.error();
|
|
81
|
+
|
|
82
|
+
// 发送请求到服务器
|
|
83
|
+
const result = await postClass(
|
|
84
|
+
config.setupSvc + "/api/customTab/tabSetDone",
|
|
85
|
+
requestBody,
|
|
86
|
+
config.accessToken
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// API 返回结构中, result 字段决定调用是否成功
|
|
90
|
+
if (result && result.result) {
|
|
91
|
+
console.error();
|
|
92
|
+
console.error(chalk.green('Success!'));
|
|
93
|
+
console.error();
|
|
94
|
+
return result;
|
|
95
|
+
} else {
|
|
96
|
+
const msg = result && result.returnInfo ? result.returnInfo : 'Unknown error';
|
|
97
|
+
console.error();
|
|
98
|
+
console.error(chalk.red('Error:' + msg));
|
|
99
|
+
throw new Error('Create Script Menu Failed: ' + msg);
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error();
|
|
103
|
+
console.error(chalk.red("自定义脚本菜单创建失败:"), error);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = createScriptMenu;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const { postClass } = require("../../utils/http")
|
|
2
|
+
const { getPackageJson } = require("../../utils/config");
|
|
3
|
+
const briefGet = require("../brief/get");
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const { buildCommonMenuFields } = require('./common');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建站点菜单
|
|
9
|
+
* @param {Array} argvs - 命令行参数数组
|
|
10
|
+
* @returns {Promise<Object>} 创建结果
|
|
11
|
+
*/
|
|
12
|
+
async function createSiteMenu(argvs) {
|
|
13
|
+
try {
|
|
14
|
+
// 命令行参数格式:cc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
15
|
+
// argvs: ['create', 'menu', 'site', '.', 'siteId', 'tabName', ...]
|
|
16
|
+
let path = argvs[3]; // 路径 (argvs[3])
|
|
17
|
+
let siteId = argvs[4]; // 站点ID (p1)
|
|
18
|
+
let tabName = argvs[5]; // 标签名称
|
|
19
|
+
let tabStyle = argvs[6] || "cloudtab145"; // 标签样式图标,默认 cloudtab145
|
|
20
|
+
let mobileimg = argvs[7] || "cloudcc01"; // 移动端图标,默认 cloudcc01
|
|
21
|
+
let cloudccservicetab = argvs[8] || "cloudccservicetab_1"; // 服务标签图标,默认 cloudccservicetab_1
|
|
22
|
+
|
|
23
|
+
if (!siteId || !tabName) {
|
|
24
|
+
console.error();
|
|
25
|
+
console.error(chalk.red('Error: 缺少必需参数'));
|
|
26
|
+
console.error('用法: cc create menu site <path> <siteId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
27
|
+
console.error();
|
|
28
|
+
throw new Error('缺少必需参数: siteId 和 tabName');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let config = await getPackageJson(path);
|
|
32
|
+
|
|
33
|
+
// 从 brief/get 获取角色ID列表
|
|
34
|
+
// briefGet 期望 argvs[2] 是 path,所以需要调整参数数组
|
|
35
|
+
const briefArgvs = [argvs[0], argvs[1], path]; // ['create', 'menu', path]
|
|
36
|
+
let briefData = await briefGet(briefArgvs);
|
|
37
|
+
|
|
38
|
+
if (!briefData.success) {
|
|
39
|
+
console.error("获取角色列表失败:", briefData.message);
|
|
40
|
+
throw new Error("获取角色列表失败");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 提取所有角色的 ID 列表,格式为 "profileId_show"
|
|
44
|
+
const profileIds = briefData.data.map(profile => `${profile.id}_show`);
|
|
45
|
+
|
|
46
|
+
// 构建公共字段
|
|
47
|
+
const commonFields = buildCommonMenuFields(tabName, tabStyle, mobileimg, cloudccservicetab);
|
|
48
|
+
|
|
49
|
+
// 构建请求体
|
|
50
|
+
const requestBody = {
|
|
51
|
+
ed: "ed",
|
|
52
|
+
visited_0: "1",
|
|
53
|
+
visited_1: "1",
|
|
54
|
+
visited_2: "1",
|
|
55
|
+
allOrSome: "some",
|
|
56
|
+
type: "site",
|
|
57
|
+
p1: siteId,
|
|
58
|
+
p1_origin: {
|
|
59
|
+
label: "label.import.index.site",
|
|
60
|
+
fieldKey: "p1",
|
|
61
|
+
field: "Select",
|
|
62
|
+
required: "right",
|
|
63
|
+
hint: "label.customer.tab.step1.selectonesite",
|
|
64
|
+
rules: [
|
|
65
|
+
{
|
|
66
|
+
required: true,
|
|
67
|
+
message: "请选择站点",
|
|
68
|
+
trigger: "blur"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
value: siteId
|
|
72
|
+
},
|
|
73
|
+
...commonFields,
|
|
74
|
+
profileIds: profileIds,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// 显示创建进度
|
|
78
|
+
console.error();
|
|
79
|
+
console.error(chalk.green('Creating site menu, please wait...'));
|
|
80
|
+
console.error();
|
|
81
|
+
|
|
82
|
+
// 发送请求到服务器
|
|
83
|
+
const result = await postClass(
|
|
84
|
+
config.setupSvc + "/api/customTab/tabSetDone",
|
|
85
|
+
requestBody,
|
|
86
|
+
config.accessToken
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// API 返回结构中, result 字段决定调用是否成功
|
|
90
|
+
if (result && result.result) {
|
|
91
|
+
console.error();
|
|
92
|
+
console.error(chalk.green('Success!'));
|
|
93
|
+
console.error();
|
|
94
|
+
return result;
|
|
95
|
+
} else {
|
|
96
|
+
const msg = result && result.returnInfo ? result.returnInfo : 'Unknown error';
|
|
97
|
+
console.error();
|
|
98
|
+
console.error(chalk.red('Error:' + msg));
|
|
99
|
+
throw new Error('Create Site Menu Failed: ' + msg);
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error();
|
|
103
|
+
console.error(chalk.red("站点菜单创建失败:"), error);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = createSiteMenu;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const createObjectMenu = require('./create-object');
|
|
3
|
+
const createPageMenu = require('./create-page');
|
|
4
|
+
const createScriptMenu = require('./create-script');
|
|
5
|
+
const createSiteMenu = require('./create-site');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 创建自定义菜单(标签页)
|
|
9
|
+
* 支持类型:object(自定义对象)、page(自定义页面)、script(自定义脚本)、site(站点)
|
|
10
|
+
* 命令格式:cc create menu <type> <path> <resourceId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
11
|
+
* @param {Array} argvs - 命令行参数数组
|
|
12
|
+
* @returns {Promise<Object>} 创建结果
|
|
13
|
+
*/
|
|
14
|
+
async function create(argvs) {
|
|
15
|
+
try {
|
|
16
|
+
// 命令行参数格式:cc create menu <type> <path> <resourceId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]
|
|
17
|
+
// argvs: ['create', 'menu', 'object', '.', 'resourceId', 'tabName', ...]
|
|
18
|
+
// type: object, page, script, site
|
|
19
|
+
let menuType = argvs[2]; // 菜单类型 (argvs[2])
|
|
20
|
+
|
|
21
|
+
// 验证菜单类型
|
|
22
|
+
const validTypes = ['object', 'page', 'script', 'site'];
|
|
23
|
+
if (!validTypes.includes(menuType)) {
|
|
24
|
+
console.error();
|
|
25
|
+
console.error(chalk.red('Error: 无效的菜单类型'));
|
|
26
|
+
console.error(`支持的菜单类型: ${validTypes.join(', ')}`);
|
|
27
|
+
console.error('用法: cc create menu <type> <path> <resourceId> <tabName> [tabStyle] [mobileimg] [cloudccservicetab]');
|
|
28
|
+
console.error('示例:');
|
|
29
|
+
console.error(' cc create menu object . <objectId> "我的对象菜单"');
|
|
30
|
+
console.error(' cc create menu page . <pageId> "我的页面菜单"');
|
|
31
|
+
console.error(' cc create menu script . <scriptId> "我的脚本菜单"');
|
|
32
|
+
console.error(' cc create menu site . <siteId> "我的站点菜单"');
|
|
33
|
+
console.error();
|
|
34
|
+
throw new Error(`无效的菜单类型: ${menuType}`);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// 根据菜单类型路由到不同的创建函数
|
|
38
|
+
if (menuType === 'object') {
|
|
39
|
+
return await createObjectMenu(argvs);
|
|
40
|
+
} else if (menuType === 'page') {
|
|
41
|
+
return await createPageMenu(argvs);
|
|
42
|
+
} else if (menuType === 'script') {
|
|
43
|
+
return await createScriptMenu(argvs);
|
|
44
|
+
} else if (menuType === 'site') {
|
|
45
|
+
return await createSiteMenu(argvs);
|
|
46
|
+
}
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.error();
|
|
49
|
+
console.error(chalk.red("菜单创建失败:"), error);
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = create;
|
package/src/plugin/pull.js
CHANGED
|
@@ -100,6 +100,9 @@ async function pullById(pluginId, projectPath) {
|
|
|
100
100
|
|
|
101
101
|
// 遍历所有文件并保存
|
|
102
102
|
Object.entries(contentMap).forEach(([filePath, content]) => {
|
|
103
|
+
// 统一路径分隔符(服务端可能返回 Windows 风格的反斜杠)
|
|
104
|
+
filePath = filePath.replace(/\\/g, '/');
|
|
105
|
+
|
|
103
106
|
// 获取文件名(不包含路径)
|
|
104
107
|
const fileName = path.basename(filePath);
|
|
105
108
|
|