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
package/src/mcp/readme.md
CHANGED
|
@@ -2,131 +2,136 @@
|
|
|
2
2
|
* 每个功能独立一个工具
|
|
3
3
|
|
|
4
4
|
## 工具列表说明
|
|
5
|
-
### 1:开发环境检查Tool
|
|
5
|
+
### 1:开发环境检查Tool - Dev Environment Validator ✅
|
|
6
6
|
* 用于检查当前环境,是否满足开发条件
|
|
7
7
|
* 需要使用知识库
|
|
8
8
|
|
|
9
|
-
### 2:创建开发环境Tool
|
|
9
|
+
### 2:创建开发环境Tool - Dev Environment Creator ✅
|
|
10
10
|
* 通过特定步骤创建一个开发模版项目
|
|
11
11
|
* 需要使用知识库
|
|
12
12
|
|
|
13
|
-
### 3:指导配置开发者密钥Tool
|
|
13
|
+
### 3:指导配置开发者密钥Tool - Developer Key Setup Guide ✅
|
|
14
14
|
* 检查当前环境的开发者密钥是否配置正确
|
|
15
15
|
* 指导如何获取密钥,以及如何配置
|
|
16
16
|
|
|
17
|
-
### 4:创建应用程序Tool
|
|
17
|
+
### 4:创建应用程序Tool - App Creator
|
|
18
18
|
* 创建一个应用程序
|
|
19
19
|
|
|
20
|
-
### 5:查询应用列表
|
|
20
|
+
### 5:查询应用列表 - App List Retriever
|
|
21
21
|
* 查询环境所有应用程序
|
|
22
22
|
|
|
23
|
-
### 6:创建自定义对象Tool
|
|
23
|
+
### 6:创建自定义对象Tool - Custom Object Creator ✅
|
|
24
24
|
* 创建一个自定义对象
|
|
25
25
|
|
|
26
|
-
### 7:查询对象列表Tool
|
|
26
|
+
### 7:查询对象列表Tool - Object List Retriever ✅
|
|
27
27
|
* 查询所有对象信息,包含标准以及自定义
|
|
28
28
|
|
|
29
|
-
###
|
|
30
|
-
* 查询某个对象的详细信息
|
|
31
|
-
|
|
32
|
-
### 9:创建字段Tool
|
|
29
|
+
### 9:创建字段Tool - Field Batch Creator ✅
|
|
33
30
|
* 为某个对象批量创建字段
|
|
34
31
|
* 需要所有字段知识库
|
|
35
32
|
|
|
36
|
-
### 10:查询某个对象字段列表Tool
|
|
33
|
+
### 10:查询某个对象字段列表Tool - Object Fields Retriever ✅
|
|
37
34
|
* 通过对象id查询对象的字段列表信息
|
|
38
35
|
|
|
39
|
-
### 11:创建自定义类Tool
|
|
36
|
+
### 11:创建自定义类Tool - Custom Class Creator ✅
|
|
40
37
|
* 创建一个自定义类
|
|
41
38
|
|
|
42
|
-
### 12:查询自定义类列表Tool
|
|
39
|
+
### 12:查询自定义类列表Tool - Class List Retriever ✅
|
|
43
40
|
* 查询自定义类列表
|
|
44
41
|
|
|
45
|
-
### 13:查询某个类的详细信息Tool
|
|
42
|
+
### 13:查询某个类的详细信息Tool - Class Detail Retriever ✅
|
|
46
43
|
* 根据id查询某个类详细信息
|
|
47
44
|
|
|
48
|
-
### 14:编辑类Tool
|
|
45
|
+
### 14:编辑类Tool - Custom Class Editor ✅
|
|
49
46
|
* 使用类的开发者知识库进行编辑开发
|
|
50
47
|
* 类的常用sdk
|
|
51
48
|
|
|
52
|
-
### 15:拉取自定义类到本地Tool
|
|
49
|
+
### 15:拉取自定义类到本地Tool - Class Puller (Pull Class To Local) ✅
|
|
53
50
|
* 拉取线上的某个类代码到本地
|
|
54
51
|
|
|
55
|
-
### 16:推送自定义类到线上Tool
|
|
52
|
+
### 16:推送自定义类到线上Tool - Class Publisher (Push Class Online) ✅
|
|
56
53
|
* 推送某个自定义类代码到线上
|
|
57
54
|
|
|
58
|
-
### 17:创建定时类Tool
|
|
59
|
-
*
|
|
55
|
+
### 17:创建定时类Tool - Scheduled Class Creator ✅
|
|
56
|
+
* 创建一个定时类
|
|
60
57
|
|
|
61
|
-
### 18:查询定时类列表Tool
|
|
62
|
-
*
|
|
58
|
+
### 18:查询定时类列表Tool - Scheduled Class List Retriever ✅
|
|
59
|
+
* 查询定时列表
|
|
63
60
|
|
|
64
|
-
### 19:查询某个定时类的详细信息Tool
|
|
65
|
-
* 根据id
|
|
61
|
+
### 19:查询某个定时类的详细信息Tool - Scheduled Class Detail Retriever ✅
|
|
62
|
+
* 根据id查询某个定时详细信息
|
|
66
63
|
|
|
67
|
-
###
|
|
68
|
-
*
|
|
69
|
-
* 类的常用sdk
|
|
64
|
+
### 21:拉取定时类到本地Tool - Scheduled Class Puller ✅
|
|
65
|
+
* 拉取线上的某个定时类代码到本地
|
|
70
66
|
|
|
71
|
-
###
|
|
72
|
-
*
|
|
67
|
+
### 22:推送定时类代码到线上Tool - Scheduled Class Publisher ✅
|
|
68
|
+
* 推送某个定时类代码到线上
|
|
73
69
|
|
|
74
|
-
###
|
|
75
|
-
*
|
|
70
|
+
### 23:创建触发器Tool - Trigger Creator ✅
|
|
71
|
+
* 创建一个触发器
|
|
76
72
|
|
|
77
|
-
###
|
|
78
|
-
*
|
|
73
|
+
### 24:查询触发器列表Tool - Trigger List Retriever ✅
|
|
74
|
+
* 查询触发器列表
|
|
79
75
|
|
|
80
|
-
###
|
|
81
|
-
*
|
|
76
|
+
### 25:查询某个触发器的详细信息Tool - Trigger Detail Retriever ✅
|
|
77
|
+
* 根据id查询某个触发器详细信息
|
|
82
78
|
|
|
83
|
-
###
|
|
84
|
-
*
|
|
79
|
+
### 26:编辑触发器Tool - Trigger Editor ✅
|
|
80
|
+
* 使用触发器的开发者知识库进行编辑开发
|
|
81
|
+
* 触发器的常用sdk
|
|
85
82
|
|
|
86
|
-
###
|
|
87
|
-
*
|
|
88
|
-
* 类的常用sdk
|
|
83
|
+
### 27:拉取触发器到本地Tool - Trigger Puller ✅
|
|
84
|
+
* 拉取线上的某个触发器代码到本地
|
|
89
85
|
|
|
90
|
-
###
|
|
91
|
-
*
|
|
86
|
+
### 28:推送触发器代码到线上Tool - Trigger Publisher ✅
|
|
87
|
+
* 推送某个触发器代码到线上
|
|
92
88
|
|
|
93
|
-
###
|
|
94
|
-
*
|
|
89
|
+
### 29:创建自定义组件Tool - Component Creator ✅
|
|
90
|
+
* 创建一个自定义组件(Vue组件)
|
|
95
91
|
|
|
96
|
-
###
|
|
97
|
-
*
|
|
92
|
+
### 30:查询自定义组件列表Tool - Component List Retriever ✅
|
|
93
|
+
* 查询自定义组件列表(本地和服务器)
|
|
98
94
|
|
|
99
|
-
###
|
|
100
|
-
*
|
|
95
|
+
### 31:查询某个自定义组件的详细信息Tool - Component Detail Retriever ✅
|
|
96
|
+
* 根据组件名或ID查询某个组件详细信息
|
|
101
97
|
|
|
102
|
-
###
|
|
103
|
-
*
|
|
98
|
+
### 32:编辑自定义组件Tool - Component Editor ✅
|
|
99
|
+
* 使用自定义组件的开发者知识库进行编辑开发
|
|
100
|
+
* Vue组件的常用API和最佳实践
|
|
104
101
|
|
|
105
|
-
###
|
|
106
|
-
*
|
|
107
|
-
* 类的常用sdk
|
|
102
|
+
### 33:拉取自定义组件到本地Tool - Component Puller ✅
|
|
103
|
+
* 拉取线上的某个组件代码到本地
|
|
108
104
|
|
|
109
|
-
###
|
|
110
|
-
*
|
|
105
|
+
### 34:推送自定义组件代码到线上Tool - Component Publisher ✅
|
|
106
|
+
* 推送某个自定义组件代码到线上
|
|
111
107
|
|
|
112
|
-
|
|
113
|
-
|
|
108
|
+
## 操作过于复杂
|
|
109
|
+
### 35:创建客户端脚本Tool - Client Script Creator ❌
|
|
110
|
+
* 创建一个客户端脚本
|
|
114
111
|
|
|
115
|
-
###
|
|
116
|
-
*
|
|
112
|
+
### 36:查询客户端脚本组件列表Tool - Client Script List Retriever ✅
|
|
113
|
+
* 查询客户端脚本列表
|
|
117
114
|
|
|
118
|
-
###
|
|
119
|
-
*
|
|
115
|
+
### 37:查询某个客户端脚本的详细信息Tool - Client Script Detail Retriever ✅
|
|
116
|
+
* 根据id查询某个客户端脚本详细信息
|
|
120
117
|
|
|
121
|
-
###
|
|
122
|
-
*
|
|
118
|
+
### 38:编辑客户端脚本Tool - Client Script Editor ✅
|
|
119
|
+
* 使用ccdk知识库开发
|
|
123
120
|
|
|
124
|
-
###
|
|
125
|
-
*
|
|
126
|
-
* 类的常用sdk
|
|
121
|
+
### 39:拉取客户端脚本到本地Tool - Client Script Puller ✅
|
|
122
|
+
* 拉取线上的某个客户端脚本代码到本地
|
|
127
123
|
|
|
128
|
-
###
|
|
129
|
-
*
|
|
124
|
+
### 40:推送客户端脚本件代码到线上Tool - Client Script Pusher ✅
|
|
125
|
+
* 推送某个自定义客户端脚本代码到线上
|
|
126
|
+
|
|
127
|
+
### 41:CloudCC开发项目概要Tool - CloudCC Development Overview ✅
|
|
128
|
+
* 【总纲工具】CloudCC 开发项目的总纲和工具导航
|
|
129
|
+
* 提供所有 MCP 工具的列表、使用提示和选择指南
|
|
130
|
+
* 帮助大模型在开发过程中快速找到并使用正确的工具
|
|
131
|
+
* 这是开始 CloudCC 开发前必须查看的工具
|
|
132
|
+
* 需要使用知识库
|
|
130
133
|
|
|
131
|
-
###
|
|
132
|
-
*
|
|
134
|
+
### 42:审批Tool - Approval
|
|
135
|
+
* 拉取所有的待审批的记录
|
|
136
|
+
* 通过id审批通过记录
|
|
137
|
+
* 通过id拒绝审批通过记录
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval 工具处理器
|
|
3
|
+
* 提供审批相关的功能:拉取待审批记录、审批通过、拒绝审批
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const { z } = require('zod');
|
|
7
|
+
const axios = require('axios');
|
|
8
|
+
|
|
9
|
+
const service = axios.create({
|
|
10
|
+
timeout: 60000,
|
|
11
|
+
headers: {
|
|
12
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const postClass = (url, data = {}, accessToken) => {
|
|
17
|
+
if (accessToken) {
|
|
18
|
+
return service({
|
|
19
|
+
url,
|
|
20
|
+
method: 'post',
|
|
21
|
+
headers: { accessToken },
|
|
22
|
+
data
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
console.error();
|
|
26
|
+
console.error('Failed: \nOpenAPI Token is null. \nPlease provide token via参数.');
|
|
27
|
+
console.error();
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// 统一校验 token 与 apiSvc,完全依赖入参便于迁移
|
|
31
|
+
async function loadConfig(token, apiSvcOverride) {
|
|
32
|
+
const apiSvc = apiSvcOverride;
|
|
33
|
+
const accessToken = token;
|
|
34
|
+
if (!apiSvc) {
|
|
35
|
+
throw new Error('缺少 apiSvc,请通过参数传入接口域名');
|
|
36
|
+
}
|
|
37
|
+
if (!accessToken) {
|
|
38
|
+
throw new Error('缺少访问 token,请通过参数传入');
|
|
39
|
+
}
|
|
40
|
+
return { accessToken, apiSvc };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function requestPendingApprovals(queryParams, token, apiSvcOverride) {
|
|
44
|
+
const { accessToken, apiSvc } = await loadConfig(token, apiSvcOverride);
|
|
45
|
+
const requestBody = {
|
|
46
|
+
approvalProjectType: queryParams.approvalProjectType || "0",
|
|
47
|
+
approvalProcessStatus: queryParams.approvalProcessStatus || "",
|
|
48
|
+
startTime: queryParams.startTime || "",
|
|
49
|
+
endTime: queryParams.endTime || "",
|
|
50
|
+
actor: queryParams.actor || "",
|
|
51
|
+
related: queryParams.related || "",
|
|
52
|
+
type: queryParams.type || "",
|
|
53
|
+
pageNum: queryParams.pageNum || 1,
|
|
54
|
+
pageSize: queryParams.pageSize || 10
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const url = `${apiSvc}/api/approval/getAllApprovalHistoryPendingList`;
|
|
58
|
+
const response = await postClass(url, requestBody, accessToken);
|
|
59
|
+
|
|
60
|
+
if (response.result) {
|
|
61
|
+
const { list = [], zylist = [], allpage } = response.data;
|
|
62
|
+
const zhaiyaoMap = {};
|
|
63
|
+
zylist.forEach(item => {
|
|
64
|
+
zhaiyaoMap[item.id] = item.zhaiyao;
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const enrichedList = list.map(record => ({
|
|
68
|
+
...record,
|
|
69
|
+
zhaiyao: zhaiyaoMap[record.workItemid] || null
|
|
70
|
+
}));
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
list: enrichedList,
|
|
74
|
+
allpage,
|
|
75
|
+
total: list.length
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
throw new Error('获取待审批记录失败: ' + (response.returnInfo || response.message || '未知错误'));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async function approveRequest(approvalParams, token, apiSvcOverride) {
|
|
83
|
+
const { accessToken, apiSvc } = await loadConfig(token, apiSvcOverride);
|
|
84
|
+
const { relatedId, workItemId } = approvalParams;
|
|
85
|
+
|
|
86
|
+
const getPermissionById = await postClass(
|
|
87
|
+
`${apiSvc}/api/objectdetail/getPermissionById`,
|
|
88
|
+
{ id: relatedId },
|
|
89
|
+
accessToken
|
|
90
|
+
);
|
|
91
|
+
const { objectApi } = getPermissionById.data;
|
|
92
|
+
|
|
93
|
+
const requestBody = {
|
|
94
|
+
data: JSON.stringify([{ id: relatedId }]),
|
|
95
|
+
relatedId,
|
|
96
|
+
comments: '',
|
|
97
|
+
workItemId,
|
|
98
|
+
actionType: 'Approved',
|
|
99
|
+
objectApiName: objectApi,
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const url = `${apiSvc}/api/approval/updateApprovalProcessOperation`;
|
|
103
|
+
const response = await postClass(url, requestBody, accessToken);
|
|
104
|
+
|
|
105
|
+
if (response.result) {
|
|
106
|
+
return {
|
|
107
|
+
success: true,
|
|
108
|
+
message: response.returnInfo || '审批通过成功',
|
|
109
|
+
data: response.data
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
throw new Error('审批通过失败: ' + (response.returnInfo || response.message || '未知错误'));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async function rejectRequest(approvalParams, token, apiSvcOverride) {
|
|
117
|
+
const { accessToken, apiSvc } = await loadConfig(token, apiSvcOverride);
|
|
118
|
+
const { relatedId, workItemId, comments } = approvalParams;
|
|
119
|
+
|
|
120
|
+
const getPermissionById = await postClass(
|
|
121
|
+
`${apiSvc}/api/objectdetail/getPermissionById`,
|
|
122
|
+
{ id: relatedId },
|
|
123
|
+
accessToken
|
|
124
|
+
);
|
|
125
|
+
const { objectApi } = getPermissionById.data;
|
|
126
|
+
|
|
127
|
+
const requestBody = {
|
|
128
|
+
data: JSON.stringify([{ id: relatedId }]),
|
|
129
|
+
relatedId,
|
|
130
|
+
comments,
|
|
131
|
+
workItemId,
|
|
132
|
+
actionType: 'Rejected',
|
|
133
|
+
objectApiName: objectApi,
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
const url = `${apiSvc}/api/approval/updateApprovalProcessOperation`;
|
|
137
|
+
const response = await postClass(url, requestBody, accessToken);
|
|
138
|
+
|
|
139
|
+
if (response.result) {
|
|
140
|
+
return {
|
|
141
|
+
success: true,
|
|
142
|
+
message: response.returnInfo || '审批拒绝成功',
|
|
143
|
+
data: response.data
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
throw new Error('审批拒绝失败: ' + (response.returnInfo || response.message || '未知错误'));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* 拉取所有的待审批的记录
|
|
152
|
+
* @param {Object} params - 参数对象
|
|
153
|
+
* @param {string} params.projectPath - 项目路径(可选,默认为当前工作目录)
|
|
154
|
+
* @param {string} params.approvalProjectType - 可选,审批项目类型,默认"0"
|
|
155
|
+
* @param {string} params.approvalProcessStatus - 可选,审批流程状态
|
|
156
|
+
* @param {string} params.startTime - 可选,开始时间
|
|
157
|
+
* @param {string} params.endTime - 可选,结束时间
|
|
158
|
+
* @param {string} params.actor - 可选,审批人
|
|
159
|
+
* @param {string} params.related - 可选,关联对象ID
|
|
160
|
+
* @param {string} params.type - 可选,类型
|
|
161
|
+
* @param {number} params.pageNum - 可选,页码,默认1
|
|
162
|
+
* @param {number} params.pageSize - 可选,每页数量,默认10
|
|
163
|
+
*/
|
|
164
|
+
async function getPendingApprovals({
|
|
165
|
+
token = '',
|
|
166
|
+
apiSvc = '',
|
|
167
|
+
approvalProjectType = "0",
|
|
168
|
+
approvalProcessStatus = "",
|
|
169
|
+
startTime = "",
|
|
170
|
+
endTime = "",
|
|
171
|
+
actor = "",
|
|
172
|
+
related = "",
|
|
173
|
+
type = "",
|
|
174
|
+
pageNum = 1,
|
|
175
|
+
pageSize = 10
|
|
176
|
+
}) {
|
|
177
|
+
try {
|
|
178
|
+
const queryParams = {
|
|
179
|
+
approvalProjectType,
|
|
180
|
+
approvalProcessStatus,
|
|
181
|
+
startTime,
|
|
182
|
+
endTime,
|
|
183
|
+
actor,
|
|
184
|
+
related,
|
|
185
|
+
type,
|
|
186
|
+
pageNum,
|
|
187
|
+
pageSize
|
|
188
|
+
};
|
|
189
|
+
const result = await requestPendingApprovals(queryParams, token, apiSvc);
|
|
190
|
+
|
|
191
|
+
return {
|
|
192
|
+
content: [
|
|
193
|
+
{ type: 'text', text: "将以下结果转换为markdown表格的模式展示:" + JSON.stringify(result, null, 2) }
|
|
194
|
+
]
|
|
195
|
+
};
|
|
196
|
+
} catch (error) {
|
|
197
|
+
return {
|
|
198
|
+
content: [{ type: 'text', text: `✗ 拉取待审批记录失败: ${error.message}` }]
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* 通过id审批通过记录
|
|
205
|
+
* @param {Object} params - 参数对象
|
|
206
|
+
* @param {boolean} params.confirm - 是否已获得用户明确确认(必填)
|
|
207
|
+
* @param {string} params.objid - 关联对象ID(必填)
|
|
208
|
+
* @param {string} params.workItemId - 工作项ID(必填)
|
|
209
|
+
*/
|
|
210
|
+
async function approveRecord({
|
|
211
|
+
confirm,
|
|
212
|
+
objid,
|
|
213
|
+
workItemId,
|
|
214
|
+
apiSvc = ''
|
|
215
|
+
}) {
|
|
216
|
+
try {
|
|
217
|
+
if (confirm !== true) {
|
|
218
|
+
return {
|
|
219
|
+
content: [{ type: 'text', text: '✗ 审批通过操作需要用户明确确认,请确认后再试' }]
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
if (!objid) {
|
|
223
|
+
return {
|
|
224
|
+
content: [{ type: 'text', text: '✗ 关联对象ID(objid)不能为空' }]
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
if (!workItemId) {
|
|
228
|
+
return {
|
|
229
|
+
content: [{ type: 'text', text: '✗ 工作项ID(workItemId)不能为空' }]
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
const approvalParams = {
|
|
233
|
+
relatedId: objid,
|
|
234
|
+
workItemId,
|
|
235
|
+
};
|
|
236
|
+
const result = await approveRequest(approvalParams, token, apiSvc);
|
|
237
|
+
|
|
238
|
+
return {
|
|
239
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }]
|
|
240
|
+
};
|
|
241
|
+
} catch (error) {
|
|
242
|
+
return {
|
|
243
|
+
content: [{ type: 'text', text: `✗ 审批通过失败: ${error.message}` }]
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* 通过id拒绝审批通过记录
|
|
250
|
+
* @param {Object} params - 参数对象
|
|
251
|
+
* @param {boolean} params.confirm - 是否已获得用户明确确认(必填)
|
|
252
|
+
* @param {string} params.objid - 从审批记录中的objid字段获取
|
|
253
|
+
* @param {string} params.comment - 拒绝原因(必填)
|
|
254
|
+
* @param {string} params.workItemId - 工作项ID(必填),从审批记录中的workItemid字段获取
|
|
255
|
+
*/
|
|
256
|
+
async function rejectRecord({ confirm, objid, comment = '', workItemId, token = '', apiSvc = '' }) {
|
|
257
|
+
try {
|
|
258
|
+
if (confirm !== true) {
|
|
259
|
+
return {
|
|
260
|
+
content: [{ type: 'text', text: '✗ 拒绝审批操作需要用户明确确认,请确认后再试' }]
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
if (!objid) {
|
|
264
|
+
return {
|
|
265
|
+
content: [{ type: 'text', text: '✗ 审批记录ID不能为空' }]
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
if (!comment) {
|
|
269
|
+
return {
|
|
270
|
+
content: [{ type: 'text', text: '✗ 拒绝原因不能为空' }]
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const approvalParams = {
|
|
275
|
+
relatedId: objid,
|
|
276
|
+
workItemId,
|
|
277
|
+
comments: comment
|
|
278
|
+
};
|
|
279
|
+
const result = await rejectRequest(approvalParams, token, apiSvc);
|
|
280
|
+
|
|
281
|
+
return {
|
|
282
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }]
|
|
283
|
+
};
|
|
284
|
+
} catch (error) {
|
|
285
|
+
return {
|
|
286
|
+
content: [{ type: 'text', text: `✗ 拒绝审批失败: ${error.message}` }]
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* 工具注册配置对象
|
|
293
|
+
* 用于在 mcpServerInstance 中注册工具
|
|
294
|
+
*/
|
|
295
|
+
const toolDefinitions = [
|
|
296
|
+
{
|
|
297
|
+
name: 'get_pending_approvals',
|
|
298
|
+
description: '拉取所有的待审批的记录。',
|
|
299
|
+
inputSchema: z.object({
|
|
300
|
+
token: z.string().optional().describe('访问 token,可用于覆盖配置中的 accessToken'),
|
|
301
|
+
apiSvc: z.string().optional().describe('接口域名,可覆盖配置中的 apiSvc'),
|
|
302
|
+
approvalProjectType: z.string().optional().describe('审批项目类型,默认"0"'),
|
|
303
|
+
approvalProcessStatus: z.string().optional().describe('审批流程状态'),
|
|
304
|
+
startTime: z.string().optional().describe('开始时间'),
|
|
305
|
+
endTime: z.string().optional().describe('结束时间'),
|
|
306
|
+
actor: z.string().optional().describe('审批人'),
|
|
307
|
+
related: z.string().optional().describe('关联对象ID(用于筛选特定对象的审批记录)'),
|
|
308
|
+
type: z.string().optional().describe('类型'),
|
|
309
|
+
pageNum: z.number().int().optional().describe('页码,默认1'),
|
|
310
|
+
pageSize: z.number().int().optional().describe('每页数量,默认10')
|
|
311
|
+
}),
|
|
312
|
+
handler: getPendingApprovals
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
name: 'approve_record',
|
|
316
|
+
description: '【危险操作】审批通过某条审批记录。\
|
|
317
|
+
在调用此工具前,必须向用户明确展示审批关键信息并进行二次确认。\
|
|
318
|
+
只有当用户明确回复“确认通过”或 confirm=true 时,才能调用该工具。',
|
|
319
|
+
inputSchema: z.object({
|
|
320
|
+
confirm: z.boolean().describe('是否已获得用户明确确认。未确认时必须为 false。'),
|
|
321
|
+
objid: z.string().min(1).describe('从审批记录中的objid字段获取'),
|
|
322
|
+
workItemId: z.string().min(1).describe('从审批记录中的workItemid字段获取'),
|
|
323
|
+
token: z.string().optional().describe('访问 token,可用于覆盖配置中的 accessToken'),
|
|
324
|
+
apiSvc: z.string().optional().describe('接口域名,可覆盖配置中的 apiSvc'),
|
|
325
|
+
}),
|
|
326
|
+
handler: approveRecord
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
name: 'reject_record',
|
|
330
|
+
description: '【危险操作】通过id拒绝审批通过记录。\
|
|
331
|
+
在调用此工具前,必须向用户明确展示审批关键信息并进行二次确认。\
|
|
332
|
+
只有当用户明确回复“确认拒绝”或 confirm=true 时,才能调用该工具。',
|
|
333
|
+
inputSchema: z.object({
|
|
334
|
+
confirm: z.boolean().describe('是否已获得用户明确确认。未确认时必须为 false。'),
|
|
335
|
+
objid: z.string().min(1).describe('从审批记录中的objid字段获取'),
|
|
336
|
+
workItemId: z.string().min(1).describe('从审批记录中的workItemid字段获取'),
|
|
337
|
+
comment: z.string().min(1).describe('拒绝原因(必填)'),
|
|
338
|
+
token: z.string().optional().describe('访问 token,可用于覆盖配置中的 accessToken'),
|
|
339
|
+
apiSvc: z.string().optional().describe('接口域名,可覆盖配置中的 apiSvc'),
|
|
340
|
+
}),
|
|
341
|
+
handler: rejectRecord
|
|
342
|
+
}
|
|
343
|
+
];
|
|
344
|
+
module.exports = {
|
|
345
|
+
getPendingApprovals,
|
|
346
|
+
approveRecord,
|
|
347
|
+
rejectRecord,
|
|
348
|
+
toolDefinitions
|
|
349
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classes 工具处理器
|
|
3
|
+
* 提供自定义类的创建、发布、拉取、查询等功能
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const createClassModule = require('../../../classes/create');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 创建自定义类
|
|
11
|
+
*/
|
|
12
|
+
async function createClass({ className, projectPath = process.cwd() }) {
|
|
13
|
+
try {
|
|
14
|
+
// 临时改变工作目录以兼容原有模块
|
|
15
|
+
const originalCwd = process.cwd();
|
|
16
|
+
process.chdir(projectPath);
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
await createClassModule(className);
|
|
20
|
+
const classPath = path.join(projectPath, `classes/${className}`);
|
|
21
|
+
return {
|
|
22
|
+
content: [{
|
|
23
|
+
type: 'text',
|
|
24
|
+
text: `✓ 创建成功!\n\n类路径: ${classPath}\n生成的文件:\n - ${className}.java (主类文件)\n - ${className}Test.java (测试类文件)\n - config.json (配置文件)`
|
|
25
|
+
}]
|
|
26
|
+
};
|
|
27
|
+
} finally {
|
|
28
|
+
process.chdir(originalCwd);
|
|
29
|
+
}
|
|
30
|
+
} catch (error) {
|
|
31
|
+
return { content: [{ type: 'text', text: `✗ 创建失败: ${error.message}` }] };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = {
|
|
36
|
+
createClass
|
|
37
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class Detail Getter 工具处理器
|
|
3
|
+
* 获取自定义类的详细信息
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const detailModule = require('../../../classes/detail');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 获取类详细信息
|
|
10
|
+
* @param {Object} params - 参数对象
|
|
11
|
+
* @param {string} params.className - 类名(可选,优先使用)
|
|
12
|
+
* @param {string} params.classId - 类ID(可选,当没有className时使用)
|
|
13
|
+
* @param {string} params.projectPath - 项目路径(可选,默认为当前工作目录)
|
|
14
|
+
*/
|
|
15
|
+
async function getClassDetail({ className, classId, projectPath = process.cwd() }) {
|
|
16
|
+
try {
|
|
17
|
+
const originalCwd = process.cwd();
|
|
18
|
+
process.chdir(projectPath);
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
const detail = await detailModule(className, classId);
|
|
22
|
+
return { content: [{ type: 'text', text: JSON.stringify(detail, null, 2) }] };
|
|
23
|
+
} finally {
|
|
24
|
+
process.chdir(originalCwd);
|
|
25
|
+
}
|
|
26
|
+
} catch (error) {
|
|
27
|
+
return { content: [{ type: 'text', text: `✗ 获取失败: ${error.message}` }] };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = {
|
|
32
|
+
getClassDetail
|
|
33
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class Detail Getter 工具知识库
|
|
3
|
+
* 提供类详细信息查看指南
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
module.exports = {
|
|
7
|
+
description: '查看自定义类的详细信息',
|
|
8
|
+
parameters: {
|
|
9
|
+
className: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
required: false,
|
|
12
|
+
description: '类名(可选,优先使用本地查询)'
|
|
13
|
+
},
|
|
14
|
+
classId: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
required: false,
|
|
17
|
+
description: '类ID(可选,当没有className时使用服务器查询)'
|
|
18
|
+
},
|
|
19
|
+
projectPath: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
required: false,
|
|
22
|
+
description: '项目路径,默认为当前工作目录'
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
notes: [
|
|
26
|
+
'至少需要提供 className 或 classId 其中之一',
|
|
27
|
+
'如果提供了 className,优先从本地文件获取(更快)',
|
|
28
|
+
'如果只提供 classId,从服务器查询',
|
|
29
|
+
'返回信息包括:基本配置、发布状态、服务器信息(如有)和源码预览'
|
|
30
|
+
],
|
|
31
|
+
displayedInfo: [
|
|
32
|
+
'基本信息:包括类名、版本号、服务器ID、数据来源',
|
|
33
|
+
'发布状态:是否已发布到服务器',
|
|
34
|
+
'服务器信息:API名称、状态、创建/更新时间(如有)',
|
|
35
|
+
'源码预览:显示前50行源码内容'
|
|
36
|
+
]
|
|
37
|
+
};
|