cloudcc-cli 2.2.3 → 2.2.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/.vscode/settings.json +3 -0
- package/README.md +35 -0
- package/bin/cc.js +11 -36
- package/bin/index.js +33 -0
- package/bin/mcp-svc.js +13 -0
- package/java/com/cloudcc/core/TriggerInvoker.java +17 -1
- package/package.json +3 -2
- package/pom.xml +1 -0
- package/prompt/DevelopmentEnvironmentConstruction.ts +133 -0
- package/prompt/ccdk.ts +1190 -0
- package/prompt/ccprompt.ts +8 -0
- package/prompt/cloudccdev.ts +109 -0
- package/prompt/index.ts +52 -0
- package/prompt/objectInfo.ts +94 -0
- package/prompt/objectList.ts +25 -0
- package/prompt/openapi.ts +310 -0
- package/prompt/system.ts +14 -0
- package/prompt/vscodeExtension.ts +27 -0
- package/src/approval/approve.js +105 -0
- package/src/approval/get.js +245 -0
- package/src/approval/index.js +11 -0
- package/src/approval/reject.js +105 -0
- package/src/brief/get.js +51 -0
- package/src/brief/index.js +7 -0
- package/src/config/get.js +1 -1
- package/src/fields/create.js +204 -0
- package/src/fields/fields/A.js +23 -0
- package/src/fields/fields/AD.js +25 -0
- package/src/fields/fields/B.js +28 -0
- package/src/fields/fields/C.js +28 -0
- package/src/fields/fields/D.js +27 -0
- package/src/fields/fields/E.js +28 -0
- package/src/fields/fields/ENC.js +28 -0
- package/src/fields/fields/ENCD.js +28 -0
- package/src/fields/fields/F.js +27 -0
- package/src/fields/fields/FL.js +25 -0
- package/src/fields/fields/H.js +27 -0
- package/src/fields/fields/IMG.js +27 -0
- package/src/fields/fields/J.js +26 -0
- package/src/fields/fields/L.js +32 -0
- package/src/fields/fields/LT.js +28 -0
- package/src/fields/fields/M.js +29 -0
- package/src/fields/fields/MR.js +24 -0
- package/src/fields/fields/N.js +30 -0
- package/src/fields/fields/P.js +28 -0
- package/src/fields/fields/Q.js +35 -0
- package/src/fields/fields/S.js +30 -0
- package/src/fields/fields/SCORE.js +24 -0
- package/src/fields/fields/T.js +27 -0
- package/src/fields/fields/U.js +28 -0
- package/src/fields/fields/X.js +28 -0
- package/src/fields/fields/Y.js +33 -0
- package/src/fields/get.js +36 -0
- package/src/fields/index.js +9 -0
- package/src/mcp/MCP/345/234/272/346/231/257/346/250/241/346/213/237.md +8 -0
- package/src/mcp/index-sse-svc.js +126 -0
- package/src/mcp/index-streamable-svc.js +180 -0
- package/src/mcp/index.js +519 -115
- package/src/mcp/readme.md +75 -70
- package/src/mcp/tools/Approval/handler.js +349 -0
- package/src/mcp/tools/Class Creator/handler.js +37 -0
- package/src/mcp/tools/Class Detail Retriever/handler.js +33 -0
- package/src/mcp/tools/Class Detail Retriever/prompt.js +37 -0
- package/src/mcp/tools/Class Editor Guide/handler.js +72 -0
- package/src/mcp/tools/Class Editor Guide/prompt.js +468 -0
- package/src/mcp/tools/Class List Retriever/handler.js +36 -0
- package/src/mcp/tools/Class Publisher/handler.js +29 -0
- package/src/mcp/tools/Class Publisher/prompt.js +40 -0
- package/src/mcp/tools/Class Puller/handler.js +86 -0
- package/src/mcp/tools/Class Puller/prompt.js +49 -0
- package/src/mcp/tools/Client Script Creator/handler.js +179 -0
- package/src/mcp/tools/Client Script Detail Retriever/handler.js +53 -0
- package/src/mcp/tools/Client Script Editor Guide/handler.js +633 -0
- package/src/mcp/tools/Client Script List Retriever/handler.js +68 -0
- package/src/mcp/tools/Client Script Publisher/handler.js +54 -0
- package/src/mcp/tools/Client Script Puller/handler.js +73 -0
- package/src/mcp/tools/CloudCC Development Overview/handler.js +48 -0
- package/src/mcp/tools/CloudCC Development Overview/prompt.js +870 -0
- package/src/mcp/tools/Component Creator/handler.js +44 -0
- package/src/mcp/tools/Component Detail Retriever/handler.js +38 -0
- package/src/mcp/tools/Component Editor Guide/handler.js +76 -0
- package/src/mcp/tools/Component Editor Guide/prompt.js +519 -0
- package/src/mcp/tools/Component List Retriever/handler.js +43 -0
- package/src/mcp/tools/Component Publisher/handler.js +18 -0
- package/src/mcp/tools/Component Puller/handler.js +63 -0
- package/src/mcp/tools/{dev-env/fetcher.js → Dev Environment Creator/fetcher.js } +8 -8
- package/src/mcp/tools/{dev-env/prompt.js → Dev Environment Creator/prompt.js } +19 -2
- package/src/mcp/tools/Dev Environment Validator/handler.js +88 -0
- package/src/mcp/tools/Dev Environment Validator/prompt.js +193 -0
- package/src/mcp/tools/{key-guide/fetcher.js → Developer Key Setup Guide/fetcher.js } +7 -7
- package/src/mcp/tools/{key-guide/prompt.js → Developer Key Setup Guide/prompt.js } +3 -3
- package/src/mcp/tools/Object Creator/handler.js +34 -0
- package/src/mcp/tools/Object Fields Creator/handler.js +64 -0
- package/src/mcp/tools/Object Fields Retriever/handler.js +37 -0
- package/src/mcp/tools/Object Fields Retriever/prompt.js +10 -0
- package/src/mcp/tools/Object List Retriever/handler.js +43 -0
- package/src/mcp/tools/Object List Retriever/prompt.js +10 -0
- package/src/mcp/tools/Scheduled Class Creator/handler.js +37 -0
- package/src/mcp/tools/Scheduled Class Detail Retriever/handler.js +34 -0
- package/src/mcp/tools/Scheduled Class List Retriever/handler.js +52 -0
- package/src/mcp/tools/Scheduled Class Publisher/handler.js +30 -0
- package/src/mcp/tools/Scheduled Class Puller/handler.js +92 -0
- package/src/mcp/tools/Trigger Creator/handler.js +53 -0
- package/src/mcp/tools/Trigger Detail Retriever/handler.js +33 -0
- package/src/mcp/tools/Trigger Editor Guide/handler.js +58 -0
- package/src/mcp/tools/Trigger List Retriever/handler.js +49 -0
- package/src/mcp/tools/Trigger Publisher/handler.js +34 -0
- package/src/mcp/tools/Trigger Puller/handler.js +40 -0
- package/src/mcp/tools/ccdk/fetcher.js +3 -3
- package/src/mcp/tools/ccdk/prompt.js +2 -2
- package/src/mcp/tools/index.js +23 -0
- package/src/object/create.js +105 -0
- package/src/object/get.js +43 -4
- package/src/object/index.js +2 -1
- package/src/plugin/create1.js +8 -7
- package/src/plugin/detail.js +91 -0
- package/src/plugin/get.js +79 -0
- package/src/plugin/index.js +4 -1
- package/src/plugin/publish.js +13 -13
- package/src/plugin/publish1.js +30 -22
- package/src/plugin/pull.js +173 -0
- package/src/project/create.js +9 -9
- package/src/project/create1.js +31 -17
- package/src/recordType/get.js +4 -2
- package/src/script/create.js +7 -7
- package/src/script/detail.js +95 -0
- package/src/script/get.js +4 -2
- package/src/script/index.js +1 -0
- package/src/script/publish.js +14 -14
- package/src/script/pull.js +12 -12
- package/src/script/pullList.js +5 -3
- package/src/timer/create.js +7 -7
- package/src/timer/detail.js +84 -0
- package/src/timer/get.js +6 -3
- package/src/timer/publish.js +7 -7
- package/src/timer/pull.js +8 -8
- package/src/timer/pullList.js +5 -3
- package/src/token/get.js +1 -1
- package/src/triggers/create.js +7 -7
- package/src/triggers/detail.js +90 -0
- package/src/triggers/get.js +4 -2
- package/src/triggers/index.js +1 -0
- package/src/triggers/publish.js +7 -7
- package/src/triggers/pull.js +8 -8
- package/src/triggers/pullList.js +5 -3
- package/src/version/get.js +3 -3
- package/target/ccopenapi-0.0.3-classes.jar +0 -0
- package/target/ccopenapi-0.0.3.jar +0 -0
- package/target/maven-archiver/pom.properties +3 -0
- package/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +18 -0
- package/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +19 -0
- package/template/Appvue +2 -2
- package/template/index.js +30 -19
- package/tool/branch/index.js +1 -1
- package/tool/checkLange/checkLang.js +6 -6
- package/tool/checkLange/clearLang.js +1 -1
- package/utils/accessClass.js +23 -0
- package/utils/checkVersion.js +22 -20
- package/utils/config.js +18 -3
- package/utils/http.js +10 -10
- package/utils/utils.js +97 -32
- package/java/com/cloudcc/core/CCTriggerDemo.java +0 -25
- package/src/classes/create.js +0 -66
- package/src/classes/get.js +0 -22
- package/src/classes/index.js +0 -11
- package/src/classes/publish.js +0 -51
- package/src/classes/pull.js +0 -55
- package/src/classes/pullList.js +0 -44
- package/src/mcp/tools/classes/handler.js +0 -358
- package/src/mcp/tools/classes/prompt.js +0 -1261
- package/src/mcp/tools/plugin/handler.js +0 -92
- /package/src/mcp/tools/{plugin → Component Publisher}/prompt.js +0 -0
- /package/src/mcp/tools/{dev-env → Dev Environment Creator}/handler.js +0 -0
- /package/src/mcp/tools/{key-guide → Developer Key Setup Guide}/handler.js +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class Puller 工具处理器
|
|
3
|
+
* 从服务器拉取自定义类
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const getClassModule = require('../../../classes/get');
|
|
9
|
+
const pullClassModule = require('../../../classes/pull');
|
|
10
|
+
const pullListModule = require('../../../classes/pullList');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 从服务器拉取类
|
|
14
|
+
*/
|
|
15
|
+
async function pullClass({ className, projectPath = process.cwd() }) {
|
|
16
|
+
try {
|
|
17
|
+
const classPath = path.join(projectPath, `classes/${className}`);
|
|
18
|
+
const configPath = path.join(classPath, 'config.json');
|
|
19
|
+
|
|
20
|
+
// 检查本地是否存在该类
|
|
21
|
+
if (!fs.existsSync(configPath)) {
|
|
22
|
+
// 本地不存在,查询服务器
|
|
23
|
+
try {
|
|
24
|
+
const queryString = encodeURI(JSON.stringify({
|
|
25
|
+
name: className
|
|
26
|
+
}));
|
|
27
|
+
const classList = await getClassModule(queryString, projectPath, true);
|
|
28
|
+
|
|
29
|
+
if (!classList || classList.length === 0) {
|
|
30
|
+
return {
|
|
31
|
+
content: [{
|
|
32
|
+
type: 'text',
|
|
33
|
+
text: `✗ 拉取失败: 服务器上不存在类 ${className}`
|
|
34
|
+
}]
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// 找到匹配的类
|
|
39
|
+
const targetClass = classList.find(item => item.name === className || item.apiname === className);
|
|
40
|
+
if (!targetClass) {
|
|
41
|
+
return {
|
|
42
|
+
content: [{
|
|
43
|
+
type: 'text',
|
|
44
|
+
text: `✗ 拉取失败: 服务器上未找到类 ${className}`
|
|
45
|
+
}]
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// 使用 ID 从服务器拉取并在本地创建
|
|
50
|
+
const originalCwd = process.cwd();
|
|
51
|
+
process.chdir(projectPath);
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
await pullListModule(targetClass.id, projectPath, true);
|
|
55
|
+
return {
|
|
56
|
+
content: [{
|
|
57
|
+
type: 'text',
|
|
58
|
+
text: `✓ 拉取成功!已从服务器拉取类 ${className} 并在本地创建\n\n本地路径: classes/${className}/`
|
|
59
|
+
}]
|
|
60
|
+
};
|
|
61
|
+
} finally {
|
|
62
|
+
process.chdir(originalCwd);
|
|
63
|
+
}
|
|
64
|
+
} catch (error) {
|
|
65
|
+
return { content: [{ type: 'text', text: `✗ 拉取失败: ${error.message}` }] };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// 本地存在,直接更新
|
|
70
|
+
const originalCwd = process.cwd();
|
|
71
|
+
process.chdir(projectPath);
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
await pullClassModule(className);
|
|
75
|
+
return { content: [{ type: 'text', text: `✓ 拉取成功!本地文件已更新: classes/${className}/${className}.java` }] };
|
|
76
|
+
} finally {
|
|
77
|
+
process.chdir(originalCwd);
|
|
78
|
+
}
|
|
79
|
+
} catch (error) {
|
|
80
|
+
return { content: [{ type: 'text', text: `✗ 拉取失败: ${error.message}` }] };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
module.exports = {
|
|
85
|
+
pullClass
|
|
86
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class Puller 工具知识库
|
|
3
|
+
* 提供类拉取指南
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
module.exports = {
|
|
7
|
+
description: '从服务器拉取自定义类到本地',
|
|
8
|
+
parameters: {
|
|
9
|
+
className: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
required: true,
|
|
12
|
+
description: '要拉取的类名'
|
|
13
|
+
},
|
|
14
|
+
projectPath: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
required: false,
|
|
17
|
+
description: '项目路径,默认为当前工作目录'
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
pullModes: [
|
|
21
|
+
{
|
|
22
|
+
mode: '本地不存在',
|
|
23
|
+
description: '自动从服务器查询类信息,下载并在本地创建完整的类目录结构',
|
|
24
|
+
steps: [
|
|
25
|
+
'1. 在服务器上查询该类',
|
|
26
|
+
'2. 获取类的ID',
|
|
27
|
+
'3. 根据ID下载类内容',
|
|
28
|
+
'4. 在本地创建classes/{ClassName}目录',
|
|
29
|
+
'5. 生成.java文件和config.json'
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
mode: '本地已存在',
|
|
34
|
+
description: '更新本地类文件为服务器最新版本',
|
|
35
|
+
steps: [
|
|
36
|
+
'1. 读取本地config.json获取类ID',
|
|
37
|
+
'2. 从服务器下载最新版本',
|
|
38
|
+
'3. 更新本地.java文件',
|
|
39
|
+
'4. 保留本地config.json配置'
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
notes: [
|
|
44
|
+
'拉取会覆盖@SOURCE_CONTENT_START和@SOURCE_CONTENT_END之间的内容',
|
|
45
|
+
'该标记外的内容(包括imports和其他)不会被覆盖',
|
|
46
|
+
'拉取前建议备份本地修改',
|
|
47
|
+
'拉取后应进行本地编译验证'
|
|
48
|
+
]
|
|
49
|
+
};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client Script Creator 工具处理器
|
|
3
|
+
* 提供客户端脚本的创建功能
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const createScriptModule = require('../../../script/create');
|
|
8
|
+
|
|
9
|
+
// pageId 选项定义
|
|
10
|
+
const PAGE_ID_OPTIONS = [
|
|
11
|
+
{ label: 'List View', id: 'list' },
|
|
12
|
+
{ label: 'Detail View', id: 'detail' },
|
|
13
|
+
{ label: 'Edit View', id: 'edit' },
|
|
14
|
+
{ label: 'New View', id: 'add' }
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
// usageScenario 选项定义
|
|
18
|
+
const USAGE_SCENARIO_OPTIONS = [
|
|
19
|
+
{ label: 'All', id: '' },
|
|
20
|
+
{ label: 'PC', id: 'PC' },
|
|
21
|
+
{ label: 'H5', id: 'H5' },
|
|
22
|
+
{ label: 'App', id: 'App' }
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
// event 选择范围根据 pageId 决定
|
|
26
|
+
const PAGE_EVENT_MAP = {
|
|
27
|
+
list: ['onCreated', 'onLoad', 'onDestroy'],
|
|
28
|
+
detail: ['onLoad'],
|
|
29
|
+
edit: ['onCreated', 'onLoad', 'onDestroy', 'beforeSave', 'afterSave'],
|
|
30
|
+
add: ['onCreated', 'onLoad', 'onDestroy', 'beforeSave', 'afterSave']
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 验证 event 是否在 pageId 对应的有效事件列表中
|
|
35
|
+
* @param {string} pageId - 页面ID
|
|
36
|
+
* @param {string} event - 事件名称
|
|
37
|
+
* @returns {boolean} 是否有效
|
|
38
|
+
*/
|
|
39
|
+
function validateEvent(pageId, event) {
|
|
40
|
+
if (!pageId || !event) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
const validEvents = PAGE_EVENT_MAP[pageId];
|
|
44
|
+
return validEvents && validEvents.includes(event);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 创建客户端脚本
|
|
49
|
+
* @param {Object} params - 参数对象
|
|
50
|
+
* @param {string} params.scriptName - 脚本名称(必填)
|
|
51
|
+
* @param {string} params.scriptDesc - 脚本描述(可选)
|
|
52
|
+
* @param {string} params.objId - 对象ID(必填)
|
|
53
|
+
* @param {string} params.objName - 对象名称(必填)
|
|
54
|
+
* @param {string} params.schemetableName - 对象表名(必填)
|
|
55
|
+
* @param {string} params.recordTypeId - 记录类型ID(可选)
|
|
56
|
+
* @param {string} params.recordTypeName - 记录类型名称(可选)
|
|
57
|
+
* @param {string} params.pageId - 页面ID:'list' | 'detail' | 'edit' | 'add'(必填)
|
|
58
|
+
* @param {string} params.eventType - 事件类型,默认为 'pageType'(可选)
|
|
59
|
+
* @param {string} params.event - 事件名称,根据 pageId 决定可选值(必填)
|
|
60
|
+
* @param {string} params.fieldId - 字段ID(可选)
|
|
61
|
+
* @param {string} params.usageScenario - 使用场景:'' | 'PC' | 'H5' | 'App'(可选)
|
|
62
|
+
* @param {string} params.projectPath - 项目根目录路径(可选)
|
|
63
|
+
*/
|
|
64
|
+
async function createClientScript({
|
|
65
|
+
scriptName,
|
|
66
|
+
scriptDesc = '',
|
|
67
|
+
objId,
|
|
68
|
+
objName,
|
|
69
|
+
schemetableName,
|
|
70
|
+
recordTypeId = '',
|
|
71
|
+
recordTypeName = '',
|
|
72
|
+
pageId,
|
|
73
|
+
eventType = 'pageType',
|
|
74
|
+
event,
|
|
75
|
+
fieldId = '',
|
|
76
|
+
usageScenario = '',
|
|
77
|
+
projectPath = process.cwd()
|
|
78
|
+
}) {
|
|
79
|
+
try {
|
|
80
|
+
// 验证必填参数
|
|
81
|
+
if (!scriptName || !objId || !objName || !schemetableName || !pageId || !event) {
|
|
82
|
+
return {
|
|
83
|
+
content: [{
|
|
84
|
+
type: 'text',
|
|
85
|
+
text: '✗ 创建失败: 缺少必填参数\n\n必填参数:\n- scriptName: 脚本名称\n- objId: 对象ID\n- objName: 对象名称\n- schemetableName: 对象表名\n- pageId: 页面ID (list/detail/edit/add)\n- event: 事件名称'
|
|
86
|
+
}]
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// 验证 pageId 是否有效
|
|
91
|
+
const validPageIds = PAGE_ID_OPTIONS.map(opt => opt.id);
|
|
92
|
+
if (!validPageIds.includes(pageId)) {
|
|
93
|
+
return {
|
|
94
|
+
content: [{
|
|
95
|
+
type: 'text',
|
|
96
|
+
text: `✗ 创建失败: pageId 无效\n\n有效的 pageId 值:\n${PAGE_ID_OPTIONS.map(opt => `- ${opt.id} (${opt.label})`).join('\n')}`
|
|
97
|
+
}]
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// 验证 event 是否在 pageId 对应的有效事件列表中
|
|
102
|
+
if (!validateEvent(pageId, event)) {
|
|
103
|
+
const validEvents = PAGE_EVENT_MAP[pageId];
|
|
104
|
+
return {
|
|
105
|
+
content: [{
|
|
106
|
+
type: 'text',
|
|
107
|
+
text: `✗ 创建失败: event 无效\n\n对于 pageId="${pageId}",有效的 event 值:\n${validEvents.map(e => `- ${e}`).join('\n')}`
|
|
108
|
+
}]
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// 验证 usageScenario 是否有效(如果提供)
|
|
113
|
+
if (usageScenario) {
|
|
114
|
+
const validScenarios = USAGE_SCENARIO_OPTIONS.map(opt => opt.id);
|
|
115
|
+
if (!validScenarios.includes(usageScenario)) {
|
|
116
|
+
return {
|
|
117
|
+
content: [{
|
|
118
|
+
type: 'text',
|
|
119
|
+
text: `✗ 创建失败: usageScenario 无效\n\n有效的 usageScenario 值:\n${USAGE_SCENARIO_OPTIONS.map(opt => `- ${opt.id} (${opt.label})`).join('\n')}`
|
|
120
|
+
}]
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// 临时改变工作目录以兼容原有模块
|
|
126
|
+
const originalCwd = process.cwd();
|
|
127
|
+
process.chdir(projectPath);
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
// 构建完整的 ScriptInfo 配置对象
|
|
131
|
+
const scriptInfo = {
|
|
132
|
+
scriptName,
|
|
133
|
+
scriptDesc,
|
|
134
|
+
objId,
|
|
135
|
+
objName,
|
|
136
|
+
schemetableName,
|
|
137
|
+
recordTypeId,
|
|
138
|
+
recordTypeName,
|
|
139
|
+
pageId,
|
|
140
|
+
eventType,
|
|
141
|
+
event,
|
|
142
|
+
fieldId,
|
|
143
|
+
usageScenario
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
// 将配置对象编码为 URI 格式(create.js 期望的格式)
|
|
147
|
+
const encodedBody = encodeURI(JSON.stringify(scriptInfo));
|
|
148
|
+
|
|
149
|
+
// 调用原有的 create 模块
|
|
150
|
+
await createScriptModule([null, null, encodedBody]);
|
|
151
|
+
|
|
152
|
+
const scriptPath = path.join(projectPath, `script/${objName}/${scriptName}`);
|
|
153
|
+
return {
|
|
154
|
+
content: [{
|
|
155
|
+
type: 'text',
|
|
156
|
+
text: `✓ 客户端脚本创建成功!\n\n脚本路径: ${scriptPath}\n生成的文件:\n - ${scriptName}.js (脚本文件)\n - config.json (配置文件)\n\n配置信息:\n${JSON.stringify(scriptInfo, null, 2)}\n\n下一步:\n1. 编辑 ${scriptName}.js 实现你的脚本逻辑\n2. 使用 publish_client_script 发布到服务器`
|
|
157
|
+
}]
|
|
158
|
+
};
|
|
159
|
+
} finally {
|
|
160
|
+
process.chdir(originalCwd);
|
|
161
|
+
}
|
|
162
|
+
} catch (error) {
|
|
163
|
+
return {
|
|
164
|
+
content: [{
|
|
165
|
+
type: 'text',
|
|
166
|
+
text: `✗ 创建失败: ${error.message}\n\n可能的原因:\n- 脚本名称已存在\n- 权限不足\n- 磁盘空间不足\n- 配置数据格式错误`
|
|
167
|
+
}]
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
module.exports = {
|
|
173
|
+
createClientScript,
|
|
174
|
+
PAGE_ID_OPTIONS,
|
|
175
|
+
USAGE_SCENARIO_OPTIONS,
|
|
176
|
+
PAGE_EVENT_MAP,
|
|
177
|
+
validateEvent
|
|
178
|
+
};
|
|
179
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client Script Detail Retriever 工具处理器
|
|
3
|
+
* 获取客户端脚本的详细信息
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const detailScriptModule = require('../../../script/detail');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 获取客户端脚本详细信息
|
|
10
|
+
* @param {Object} params - 参数对象
|
|
11
|
+
* @param {string} params.scriptPath - 脚本路径 "objName/scriptName"(可选,优先从本地查询)
|
|
12
|
+
* @param {string} params.scriptId - 脚本ID(可选,当没有scriptPath时从服务器查询)
|
|
13
|
+
* @param {string} params.projectPath - 项目根目录路径
|
|
14
|
+
*/
|
|
15
|
+
async function getClientScriptDetail({ scriptPath, scriptId, projectPath = process.cwd() }) {
|
|
16
|
+
try {
|
|
17
|
+
const originalCwd = process.cwd();
|
|
18
|
+
process.chdir(projectPath);
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
// 调用 detail.js 模块
|
|
22
|
+
const detail = await detailScriptModule(['detail', 'script', scriptPath, scriptId, projectPath]);
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
content: [{
|
|
26
|
+
type: 'text',
|
|
27
|
+
text: JSON.stringify(detail, null, 2)
|
|
28
|
+
}]
|
|
29
|
+
};
|
|
30
|
+
} catch (error) {
|
|
31
|
+
return {
|
|
32
|
+
content: [{
|
|
33
|
+
type: 'text',
|
|
34
|
+
text: `✗ 获取失败: ${error.message}`
|
|
35
|
+
}]
|
|
36
|
+
};
|
|
37
|
+
} finally {
|
|
38
|
+
process.chdir(originalCwd);
|
|
39
|
+
}
|
|
40
|
+
} catch (error) {
|
|
41
|
+
return {
|
|
42
|
+
content: [{
|
|
43
|
+
type: 'text',
|
|
44
|
+
text: `✗ 获取失败: ${error.message}`
|
|
45
|
+
}]
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
module.exports = {
|
|
51
|
+
getClientScriptDetail
|
|
52
|
+
};
|
|
53
|
+
|