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.
Files changed (174) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/README.md +35 -0
  3. package/bin/cc.js +11 -36
  4. package/bin/index.js +33 -0
  5. package/bin/mcp-svc.js +13 -0
  6. package/java/com/cloudcc/core/TriggerInvoker.java +17 -1
  7. package/package.json +3 -2
  8. package/pom.xml +1 -0
  9. package/prompt/DevelopmentEnvironmentConstruction.ts +133 -0
  10. package/prompt/ccdk.ts +1190 -0
  11. package/prompt/ccprompt.ts +8 -0
  12. package/prompt/cloudccdev.ts +109 -0
  13. package/prompt/index.ts +52 -0
  14. package/prompt/objectInfo.ts +94 -0
  15. package/prompt/objectList.ts +25 -0
  16. package/prompt/openapi.ts +310 -0
  17. package/prompt/system.ts +14 -0
  18. package/prompt/vscodeExtension.ts +27 -0
  19. package/src/approval/approve.js +105 -0
  20. package/src/approval/get.js +245 -0
  21. package/src/approval/index.js +11 -0
  22. package/src/approval/reject.js +105 -0
  23. package/src/brief/get.js +51 -0
  24. package/src/brief/index.js +7 -0
  25. package/src/config/get.js +1 -1
  26. package/src/fields/create.js +204 -0
  27. package/src/fields/fields/A.js +23 -0
  28. package/src/fields/fields/AD.js +25 -0
  29. package/src/fields/fields/B.js +28 -0
  30. package/src/fields/fields/C.js +28 -0
  31. package/src/fields/fields/D.js +27 -0
  32. package/src/fields/fields/E.js +28 -0
  33. package/src/fields/fields/ENC.js +28 -0
  34. package/src/fields/fields/ENCD.js +28 -0
  35. package/src/fields/fields/F.js +27 -0
  36. package/src/fields/fields/FL.js +25 -0
  37. package/src/fields/fields/H.js +27 -0
  38. package/src/fields/fields/IMG.js +27 -0
  39. package/src/fields/fields/J.js +26 -0
  40. package/src/fields/fields/L.js +32 -0
  41. package/src/fields/fields/LT.js +28 -0
  42. package/src/fields/fields/M.js +29 -0
  43. package/src/fields/fields/MR.js +24 -0
  44. package/src/fields/fields/N.js +30 -0
  45. package/src/fields/fields/P.js +28 -0
  46. package/src/fields/fields/Q.js +35 -0
  47. package/src/fields/fields/S.js +30 -0
  48. package/src/fields/fields/SCORE.js +24 -0
  49. package/src/fields/fields/T.js +27 -0
  50. package/src/fields/fields/U.js +28 -0
  51. package/src/fields/fields/X.js +28 -0
  52. package/src/fields/fields/Y.js +33 -0
  53. package/src/fields/get.js +36 -0
  54. package/src/fields/index.js +9 -0
  55. package/src/mcp/MCP/345/234/272/346/231/257/346/250/241/346/213/237.md +8 -0
  56. package/src/mcp/index-sse-svc.js +126 -0
  57. package/src/mcp/index-streamable-svc.js +180 -0
  58. package/src/mcp/index.js +519 -115
  59. package/src/mcp/readme.md +75 -70
  60. package/src/mcp/tools/Approval/handler.js +349 -0
  61. package/src/mcp/tools/Class Creator/handler.js +37 -0
  62. package/src/mcp/tools/Class Detail Retriever/handler.js +33 -0
  63. package/src/mcp/tools/Class Detail Retriever/prompt.js +37 -0
  64. package/src/mcp/tools/Class Editor Guide/handler.js +72 -0
  65. package/src/mcp/tools/Class Editor Guide/prompt.js +468 -0
  66. package/src/mcp/tools/Class List Retriever/handler.js +36 -0
  67. package/src/mcp/tools/Class Publisher/handler.js +29 -0
  68. package/src/mcp/tools/Class Publisher/prompt.js +40 -0
  69. package/src/mcp/tools/Class Puller/handler.js +86 -0
  70. package/src/mcp/tools/Class Puller/prompt.js +49 -0
  71. package/src/mcp/tools/Client Script Creator/handler.js +179 -0
  72. package/src/mcp/tools/Client Script Detail Retriever/handler.js +53 -0
  73. package/src/mcp/tools/Client Script Editor Guide/handler.js +633 -0
  74. package/src/mcp/tools/Client Script List Retriever/handler.js +68 -0
  75. package/src/mcp/tools/Client Script Publisher/handler.js +54 -0
  76. package/src/mcp/tools/Client Script Puller/handler.js +73 -0
  77. package/src/mcp/tools/CloudCC Development Overview/handler.js +48 -0
  78. package/src/mcp/tools/CloudCC Development Overview/prompt.js +870 -0
  79. package/src/mcp/tools/Component Creator/handler.js +44 -0
  80. package/src/mcp/tools/Component Detail Retriever/handler.js +38 -0
  81. package/src/mcp/tools/Component Editor Guide/handler.js +76 -0
  82. package/src/mcp/tools/Component Editor Guide/prompt.js +519 -0
  83. package/src/mcp/tools/Component List Retriever/handler.js +43 -0
  84. package/src/mcp/tools/Component Publisher/handler.js +18 -0
  85. package/src/mcp/tools/Component Puller/handler.js +63 -0
  86. package/src/mcp/tools/{dev-env/fetcher.js → Dev Environment Creator/fetcher.js } +8 -8
  87. package/src/mcp/tools/{dev-env/prompt.js → Dev Environment Creator/prompt.js } +19 -2
  88. package/src/mcp/tools/Dev Environment Validator/handler.js +88 -0
  89. package/src/mcp/tools/Dev Environment Validator/prompt.js +193 -0
  90. package/src/mcp/tools/{key-guide/fetcher.js → Developer Key Setup Guide/fetcher.js } +7 -7
  91. package/src/mcp/tools/{key-guide/prompt.js → Developer Key Setup Guide/prompt.js } +3 -3
  92. package/src/mcp/tools/Object Creator/handler.js +34 -0
  93. package/src/mcp/tools/Object Fields Creator/handler.js +64 -0
  94. package/src/mcp/tools/Object Fields Retriever/handler.js +37 -0
  95. package/src/mcp/tools/Object Fields Retriever/prompt.js +10 -0
  96. package/src/mcp/tools/Object List Retriever/handler.js +43 -0
  97. package/src/mcp/tools/Object List Retriever/prompt.js +10 -0
  98. package/src/mcp/tools/Scheduled Class Creator/handler.js +37 -0
  99. package/src/mcp/tools/Scheduled Class Detail Retriever/handler.js +34 -0
  100. package/src/mcp/tools/Scheduled Class List Retriever/handler.js +52 -0
  101. package/src/mcp/tools/Scheduled Class Publisher/handler.js +30 -0
  102. package/src/mcp/tools/Scheduled Class Puller/handler.js +92 -0
  103. package/src/mcp/tools/Trigger Creator/handler.js +53 -0
  104. package/src/mcp/tools/Trigger Detail Retriever/handler.js +33 -0
  105. package/src/mcp/tools/Trigger Editor Guide/handler.js +58 -0
  106. package/src/mcp/tools/Trigger List Retriever/handler.js +49 -0
  107. package/src/mcp/tools/Trigger Publisher/handler.js +34 -0
  108. package/src/mcp/tools/Trigger Puller/handler.js +40 -0
  109. package/src/mcp/tools/ccdk/fetcher.js +3 -3
  110. package/src/mcp/tools/ccdk/prompt.js +2 -2
  111. package/src/mcp/tools/index.js +23 -0
  112. package/src/object/create.js +105 -0
  113. package/src/object/get.js +43 -4
  114. package/src/object/index.js +2 -1
  115. package/src/plugin/create1.js +8 -7
  116. package/src/plugin/detail.js +91 -0
  117. package/src/plugin/get.js +79 -0
  118. package/src/plugin/index.js +4 -1
  119. package/src/plugin/publish.js +13 -13
  120. package/src/plugin/publish1.js +30 -22
  121. package/src/plugin/pull.js +173 -0
  122. package/src/project/create.js +9 -9
  123. package/src/project/create1.js +31 -17
  124. package/src/recordType/get.js +4 -2
  125. package/src/script/create.js +7 -7
  126. package/src/script/detail.js +95 -0
  127. package/src/script/get.js +4 -2
  128. package/src/script/index.js +1 -0
  129. package/src/script/publish.js +14 -14
  130. package/src/script/pull.js +12 -12
  131. package/src/script/pullList.js +5 -3
  132. package/src/timer/create.js +7 -7
  133. package/src/timer/detail.js +84 -0
  134. package/src/timer/get.js +6 -3
  135. package/src/timer/publish.js +7 -7
  136. package/src/timer/pull.js +8 -8
  137. package/src/timer/pullList.js +5 -3
  138. package/src/token/get.js +1 -1
  139. package/src/triggers/create.js +7 -7
  140. package/src/triggers/detail.js +90 -0
  141. package/src/triggers/get.js +4 -2
  142. package/src/triggers/index.js +1 -0
  143. package/src/triggers/publish.js +7 -7
  144. package/src/triggers/pull.js +8 -8
  145. package/src/triggers/pullList.js +5 -3
  146. package/src/version/get.js +3 -3
  147. package/target/ccopenapi-0.0.3-classes.jar +0 -0
  148. package/target/ccopenapi-0.0.3.jar +0 -0
  149. package/target/maven-archiver/pom.properties +3 -0
  150. package/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +18 -0
  151. package/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +19 -0
  152. package/template/Appvue +2 -2
  153. package/template/index.js +30 -19
  154. package/tool/branch/index.js +1 -1
  155. package/tool/checkLange/checkLang.js +6 -6
  156. package/tool/checkLange/clearLang.js +1 -1
  157. package/utils/accessClass.js +23 -0
  158. package/utils/checkVersion.js +22 -20
  159. package/utils/config.js +18 -3
  160. package/utils/http.js +10 -10
  161. package/utils/utils.js +97 -32
  162. package/java/com/cloudcc/core/CCTriggerDemo.java +0 -25
  163. package/src/classes/create.js +0 -66
  164. package/src/classes/get.js +0 -22
  165. package/src/classes/index.js +0 -11
  166. package/src/classes/publish.js +0 -51
  167. package/src/classes/pull.js +0 -55
  168. package/src/classes/pullList.js +0 -44
  169. package/src/mcp/tools/classes/handler.js +0 -358
  170. package/src/mcp/tools/classes/prompt.js +0 -1261
  171. package/src/mcp/tools/plugin/handler.js +0 -92
  172. /package/src/mcp/tools/{plugin → Component Publisher}/prompt.js +0 -0
  173. /package/src/mcp/tools/{dev-env → Dev Environment Creator}/handler.js +0 -0
  174. /package/src/mcp/tools/{key-guide → Developer Key Setup Guide}/handler.js +0 -0
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Object Fields Retriever Handler
3
+ * 查询某个对象的字段列表(通过 objprefix 或 JSON 对象)
4
+ */
5
+
6
+ const path = require('path');
7
+ const fieldsGet = require('../../../fields/get');
8
+
9
+ /**
10
+ * 获取对象字段
11
+ * @param {{ objprefix?: string, projectPath?: string, object?: object|string }} params
12
+ */
13
+ async function getFields(params = {}) {
14
+ try {
15
+ const { objprefix, projectPath = process.cwd() } = params;
16
+ const resolvedPath = path.resolve(projectPath);
17
+
18
+ // Support both object JSON and raw prefix paramters. Prefer explicit object when provided.
19
+ let arg = objprefix
20
+ if (!arg) {
21
+ return { content: [{ type: 'text', text: '✗ 缺少参数: 需要 objprefix' }] };
22
+ }
23
+
24
+ const argv = [null, null, resolvedPath, objprefix];
25
+ const res = await fieldsGet(argv, true);
26
+
27
+ if (!res || (Array.isArray(res) && res.length === 0)) {
28
+ return { content: [{ type: 'text', text: '未找到任何字段' }] };
29
+ }
30
+
31
+ return { content: [{ type: 'text', text: JSON.stringify(res) }] };
32
+ } catch (error) {
33
+ return { content: [{ type: 'text', text: `✗ 查询失败: ${error.message}` }] };
34
+ }
35
+ }
36
+
37
+ module.exports = { getFields };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Object Fields Retriever prompt / knowledge metadata
3
+ */
4
+ const metadata = {
5
+ title: '查询对象字段 - CloudCC',
6
+ description: '通过对象前缀或对象描述 JSON 查询对象字段列表(包括字段名称和 API 名称)',
7
+ version: '1.0.0'
8
+ }
9
+
10
+ module.exports = metadata;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Object List Retriever Handler
3
+ * 用于查询 CloudCC 中的对象:标准对象、自定义对象或两者
4
+ */
5
+
6
+ const path = require('path');
7
+ const objectGet = require('../../../object/get');
8
+ /**
9
+ * 列出对象
10
+ * @param {{ type?: 'standard'|'custom'|'both', projectPath?: string }} params
11
+ */
12
+ async function listObjects(params = {}) {
13
+ try {
14
+ const { type = 'both', projectPath = process.cwd() } = params;
15
+ const resolvedPath = path.resolve(projectPath);
16
+
17
+ // Map our 'both' to no explicit type to get the combined list
18
+ const getType = type === 'both' ? undefined : type;
19
+
20
+ const argv = [null, null, resolvedPath, getType];
21
+ const objList = await objectGet(argv, true);
22
+ if (!objList || objList.length === 0) {
23
+ return { content: [{ type: 'text', text: '未找到任何对象' }] };
24
+ }
25
+ // no limit: list all objects
26
+ return { content: [{ type: 'text', text: JSON.stringify(objList) }] };
27
+ } catch (error) {
28
+ return { content: [{ type: 'text', text: `✗ 查询失败: ${error.message}` }] };
29
+ }
30
+ }
31
+
32
+ module.exports = {
33
+ listObjects
34
+ };
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Object List Retriever prompt / knowledge metadata
3
+ */
4
+ const metadata = {
5
+ title: '查询对象列表 - CloudCC',
6
+ description: '查询 CloudCC 中的对象列表,支持标准对象、自定义对象或两者。',
7
+ version: '1.0.0'
8
+ }
9
+
10
+ module.exports = metadata;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Scheduled Class Creator 工具处理器
3
+ * 创建定时类
4
+ */
5
+
6
+ const path = require('path');
7
+ const createScheduleModule = require('../../../timer/create');
8
+
9
+ /**
10
+ * 创建定时类
11
+ */
12
+ async function createSchedule({ scheduleName, projectPath = process.cwd() }) {
13
+ try {
14
+ // 临时改变工作目录以兼容原有模块
15
+ const originalCwd = process.cwd();
16
+ process.chdir(projectPath);
17
+
18
+ try {
19
+ await createScheduleModule(scheduleName);
20
+ const schedulePath = path.resolve(projectPath, `schedule/${scheduleName}`);
21
+ return {
22
+ content: [{
23
+ type: 'text',
24
+ text: `✓ 创建成功!\n\n定时类路径: ${schedulePath}\n生成的文件:\n - ${scheduleName}.java (主类文件,继承 CCSchedule)\n - config.json (配置文件)\n\n定时类与自定义类的区别:\n - 定时类继承 CCSchedule,用于定时任务执行\n - 代码写在构造函数中,系统会按设定的时间调度执行`
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
+ createSchedule
37
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Scheduled Class Detail Retriever 工具处理器
3
+ * 获取定时类的详细信息
4
+ */
5
+
6
+ const detailModule = require('../../../timer/detail');
7
+
8
+ /**
9
+ * 获取定时类详细信息
10
+ * @param {Object} params - 参数对象
11
+ * @param {string} params.scheduleName - 定时类名(可选,优先使用)
12
+ * @param {string} params.scheduleId - 定时类ID(可选,当没有scheduleName时使用)
13
+ * @param {string} params.projectPath - 项目路径(可选,默认为当前工作目录)
14
+ */
15
+ async function getScheduleDetail({ scheduleName, scheduleId, projectPath = process.cwd() }) {
16
+ try {
17
+ const originalCwd = process.cwd();
18
+ process.chdir(projectPath);
19
+
20
+ try {
21
+ const detail = await detailModule(scheduleName, scheduleId);
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
+ getScheduleDetail
33
+ };
34
+
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Scheduled Class List Retriever 工具处理器
3
+ * 查询定时类列表
4
+ */
5
+
6
+ const getScheduleModule = require('../../../timer/get');
7
+
8
+ /**
9
+ * 获取定时类列表
10
+ */
11
+ async function listSchedules({ projectPath = process.cwd() }) {
12
+ try {
13
+ const originalCwd = process.cwd();
14
+ process.chdir(projectPath);
15
+
16
+ try {
17
+ const result = await getScheduleModule('', projectPath, true);
18
+
19
+ if (!result || result.length === 0) {
20
+ return {
21
+ content: [{
22
+ type: 'text',
23
+ text: '未找到任何定时器类\n\n提示:使用 create_schedule 创建新定时器类'
24
+ }]
25
+ };
26
+ }
27
+ return {
28
+ content: [
29
+ {
30
+ type: "text",
31
+ text: JSON.stringify(result, null, 2)
32
+ }
33
+ ]
34
+ };
35
+ } finally {
36
+ process.chdir(originalCwd);
37
+ }
38
+ } catch (error) {
39
+ return {
40
+ content: [
41
+ { type: 'text', text: `获取定时类列表失败: ${error.message}` }
42
+ ]
43
+ };
44
+ }
45
+ }
46
+
47
+
48
+
49
+ module.exports = {
50
+ listSchedules
51
+ };
52
+
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Scheduled Class Publisher 工具处理器
3
+ * 发布定时类到服务器
4
+ */
5
+
6
+ const publishScheduleModule = require('../../../timer/publish');
7
+
8
+ /**
9
+ * 发布定时类到服务器
10
+ */
11
+ async function publishSchedule({ scheduleName, projectPath = process.cwd() }) {
12
+ try {
13
+ const originalCwd = process.cwd();
14
+ process.chdir(projectPath);
15
+
16
+ try {
17
+ await publishScheduleModule(scheduleName);
18
+ return { content: [{ type: 'text', text: `✓ 发布成功!定时类 ${scheduleName} 已发布到服务器` }] };
19
+ } finally {
20
+ process.chdir(originalCwd);
21
+ }
22
+ } catch (error) {
23
+ return { content: [{ type: 'text', text: `✗ 发布失败: ${error.message}` }] };
24
+ }
25
+ }
26
+
27
+ module.exports = {
28
+ publishSchedule
29
+ };
30
+
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Scheduled Class Puller 工具处理器
3
+ * 从服务器拉取定时类
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+ const getScheduleModule = require('../../../timer/get');
9
+ const pullScheduleModule = require('../../../timer/pull');
10
+ const pullListModule = require('../../../timer/pullList');
11
+
12
+ /**
13
+ * 从服务器拉取定时类
14
+ */
15
+ async function pullSchedule({ scheduleName, projectPath = process.cwd() }) {
16
+ try {
17
+ const schedulePath = path.join(projectPath, `schedule/${scheduleName}`);
18
+ const configPath = path.join(schedulePath, 'config.json');
19
+
20
+ // 检查本地是否存在该定时类
21
+ if (!fs.existsSync(configPath)) {
22
+ // 本地不存在,查询服务器
23
+ try {
24
+ const queryString = encodeURI(JSON.stringify({
25
+ shownum: "2000",
26
+ showpage: "1",
27
+ fid: "",
28
+ sname: scheduleName,
29
+ rptcond: '',
30
+ rptorder: ''
31
+ }));
32
+ const scheduleList = await getScheduleModule(queryString, projectPath);
33
+
34
+ if (!scheduleList || scheduleList.length === 0) {
35
+ return {
36
+ content: [{
37
+ type: 'text',
38
+ text: `✗ 拉取失败: 服务器上不存在定时类 ${scheduleName}`
39
+ }]
40
+ };
41
+ }
42
+
43
+ // 找到匹配的定时类
44
+ const targetSchedule = scheduleList.find(item => item.name === scheduleName || item.apiname === scheduleName);
45
+ if (!targetSchedule) {
46
+ return {
47
+ content: [{
48
+ type: 'text',
49
+ text: `✗ 拉取失败: 服务器上未找到定时类 ${scheduleName}`
50
+ }]
51
+ };
52
+ }
53
+
54
+ // 使用 ID 从服务器拉取并在本地创建
55
+ const originalCwd = process.cwd();
56
+ process.chdir(projectPath);
57
+
58
+ try {
59
+ await pullListModule(targetSchedule.id, projectPath);
60
+ return {
61
+ content: [{
62
+ type: 'text',
63
+ text: `✓ 拉取成功!已从服务器拉取定时类 ${scheduleName} 并在本地创建\n\n本地路径: schedule/${scheduleName}/`
64
+ }]
65
+ };
66
+ } finally {
67
+ process.chdir(originalCwd);
68
+ }
69
+ } catch (error) {
70
+ return { content: [{ type: 'text', text: `✗ 拉取失败: ${error.message}` }] };
71
+ }
72
+ }
73
+
74
+ // 本地存在,直接更新
75
+ const originalCwd = process.cwd();
76
+ process.chdir(projectPath);
77
+
78
+ try {
79
+ await pullScheduleModule(scheduleName);
80
+ return { content: [{ type: 'text', text: `✓ 拉取成功!本地文件已更新: schedule/${scheduleName}/${scheduleName}.java` }] };
81
+ } finally {
82
+ process.chdir(originalCwd);
83
+ }
84
+ } catch (error) {
85
+ return { content: [{ type: 'text', text: `✗ 拉取失败: ${error.message}` }] };
86
+ }
87
+ }
88
+
89
+ module.exports = {
90
+ pullSchedule
91
+ };
92
+
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Trigger Creator 工具处理器
3
+ * 创建触发器
4
+ */
5
+
6
+ const path = require('path');
7
+ const createTriggerModule = require('../../../triggers/create');
8
+
9
+ /**
10
+ * 创建触发器
11
+ * @param {Object} params - 参数对象
12
+ * @param {string} params.triggerName - 触发器名称
13
+ * @param {string} params.objectName - 对象名称(schemetableName)
14
+ * @param {string} params.targetObjectId - 目标对象ID
15
+ * @param {string} params.triggerTime - 触发时间(例如:beforeInsert, beforeUpdate, beforeUpsert, beforeDelete, afterInsert, afterUpdate, afterUpsert, afterDelete, afterInsertCommit, afterUpdateCommit, afterUpsertCommit, afterDeleteCommit, approval, beforeBatch, afterBatch, commitBatch)
16
+ * @param {string} params.projectPath - 项目路径(可选,默认为当前工作目录)
17
+ */
18
+ async function createTrigger({ triggerName, objectName, targetObjectId, triggerTime, projectPath = process.cwd() }) {
19
+ try {
20
+ // 构造传递给底层模块的参数
21
+ const body = {
22
+ name: triggerName,
23
+ schemetableName: objectName,
24
+ targetObjectId: targetObjectId,
25
+ triggerTime: triggerTime
26
+ };
27
+
28
+ const argvs = ['', '', encodeURI(JSON.stringify(body))];
29
+
30
+ // 临时改变工作目录以兼容原有模块
31
+ const originalCwd = process.cwd();
32
+ process.chdir(projectPath);
33
+
34
+ try {
35
+ await createTriggerModule(argvs);
36
+ const triggerPath = path.resolve(projectPath, `triggers/${objectName.toLowerCase()}/${triggerName}`);
37
+ return {
38
+ content: [{
39
+ type: 'text',
40
+ text: `✓ 创建成功!\n\n触发器路径: ${triggerPath}\n生成的文件:\n - ${triggerName}.java (主类文件,继承 CCTrigger)\n - config.json (配置文件)\n\n触发器说明:\n - 触发器继承 CCTrigger,用于在对象操作时执行特定逻辑\n - 对象:${objectName}\n - 触发时间:${triggerTime}\n - 代码写在构造函数中,系统会在指定时机自动执行`
41
+ }]
42
+ };
43
+ } finally {
44
+ process.chdir(originalCwd);
45
+ }
46
+ } catch (error) {
47
+ return { content: [{ type: 'text', text: `✗ 创建失败: ${error.message}` }] };
48
+ }
49
+ }
50
+
51
+ module.exports = {
52
+ createTrigger
53
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Trigger Detail Retriever 工具处理器
3
+ * 获取触发器的详细信息
4
+ */
5
+
6
+ const detailModule = require('../../../triggers/detail');
7
+
8
+ /**
9
+ * 获取触发器详细信息
10
+ * @param {Object} params - 参数对象
11
+ * @param {string} params.triggerPath - 触发器路径 "objectName/triggerName"(可选,优先使用)
12
+ * @param {string} params.triggerId - 触发器ID(可选,当没有triggerPath时使用)
13
+ * @param {string} params.projectPath - 项目路径(可选,默认为当前工作目录)
14
+ */
15
+ async function getTriggerDetail({ triggerPath, triggerId, projectPath = process.cwd() }) {
16
+ try {
17
+ const originalCwd = process.cwd();
18
+ process.chdir(projectPath);
19
+
20
+ try {
21
+ const detail = await detailModule(triggerPath, triggerId);
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
+ getTriggerDetail
33
+ };
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Trigger Editor Guide 工具处理器
3
+ * 提供触发器编辑指南,使用与自定义类和定时类相同的知识库
4
+ */
5
+
6
+ const classEditorGuideHandler = require('../Class Editor Guide/handler.js');
7
+
8
+ /**
9
+ * 获取触发器编辑指南
10
+ * 触发器继承CCTrigger,使用与自定义类和定时类相同的API和编辑规范
11
+ * @param {Object} params - 参数对象
12
+ * @param {string} params.topic - 编辑指南主题
13
+ */
14
+ async function editTrigger({ topic = 'overview' }) {
15
+ try {
16
+ // 触发器使用与自定义类和定时类相同的编辑指南
17
+ // 只是继承的基类不同(CCTrigger vs CCClass vs CCSchedule)
18
+ const result = await classEditorGuideHandler.editClass({ topic });
19
+
20
+ // 在结果前添加触发器特定说明
21
+ if (result.content && result.content[0]) {
22
+ const triggerNote = `
23
+ 📌 触发器特别说明:
24
+ ------------------
25
+ 触发器继承 CCTrigger 类,用于在对象操作时自动执行特定逻辑。
26
+
27
+ 触发器与自定义类/定时类的主要区别:
28
+ 1. 继承基类:extends CCTrigger
29
+ 2. 触发时机:通过 triggerTime 配置(beforeInsert, beforeUpdate, beforeUpsert, beforeDelete, afterInsert, afterUpdate, afterUpsert, afterDelete, afterInsertCommit, afterUpdateCommit, afterUpsertCommit, afterDeleteCommit, approval, beforeBatch, afterBatch, commitBatch)
30
+ 3. 关联对象:触发器与特定对象绑定(targetObjectId)
31
+ 4. 执行时机:在对象操作时自动触发,无需手动调用
32
+ 5. 常见用途:数据验证、字段自动填充、关联数据更新、业务规则检查等
33
+
34
+ 触发器中可访问的特殊变量:
35
+ - newList:新记录列表(insert/update操作)
36
+ - oldList:旧记录列表(update/delete操作)
37
+ - trigger.isInsert:是否为插入操作
38
+ - trigger.isUpdate:是否为更新操作
39
+ - trigger.isDelete:是否为删除操作
40
+ - trigger.isBefore:是否为before触发器
41
+ - trigger.isAfter:是否为after触发器
42
+
43
+ 以下是触发器开发的通用API文档(与自定义类、定时类共享):
44
+ ==========================================
45
+
46
+ `;
47
+ result.content[0].text = triggerNote + result.content[0].text;
48
+ }
49
+
50
+ return result;
51
+ } catch (error) {
52
+ return { content: [{ type: 'text', text: `✗ 获取触发器编辑指南失败: ${error.message}` }] };
53
+ }
54
+ }
55
+
56
+ module.exports = {
57
+ editTrigger
58
+ };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Trigger List Retriever 工具处理器
3
+ * 查询触发器列表
4
+ */
5
+
6
+ const getTriggerModule = require('../../../triggers/get');
7
+
8
+ /**
9
+ * 获取触发器列表
10
+ * @param {Object} params - 参数对象
11
+ * @param {string} params.triggerName - 可选,触发器名称(用于筛选)
12
+ * @param {string} params.targetObjectId - 可选,目标对象ID(用于筛选)
13
+ * @param {string} params.projectPath - 项目路径(可选,默认为当前工作目录)
14
+ */
15
+ async function listTriggers({ triggerName = '', targetObjectId = '', projectPath = process.cwd() }) {
16
+ try {
17
+ // 构造查询条件
18
+ const queryBody = {
19
+ shownum: "2000",
20
+ showpage: "1",
21
+ fid: targetObjectId || "",
22
+ sname: triggerName || "",
23
+ rptcond: '',
24
+ rptorder: ''
25
+ };
26
+
27
+ const argvs = ['', '', encodeURI(JSON.stringify(queryBody)), projectPath];
28
+
29
+ const result = await getTriggerModule(argvs, true);
30
+ return {
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: JSON.stringify(result, null, 2)
35
+ }
36
+ ]
37
+ };
38
+ } catch (error) {
39
+ return {
40
+ content: [
41
+ { type: 'text', text: `获取触发器列表失败: ${error.message}` }
42
+ ]
43
+ };
44
+ }
45
+ }
46
+
47
+ module.exports = {
48
+ listTriggers
49
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Trigger Publisher 工具处理器
3
+ * 发布触发器到服务器
4
+ */
5
+
6
+ const publishTriggerModule = require('../../../triggers/publish');
7
+
8
+ /**
9
+ * 发布触发器到服务器
10
+ * @param {Object} params - 参数对象
11
+ * @param {string} params.triggerPath - 触发器路径 "objectName/triggerName"
12
+ * @param {string} params.projectPath - 项目路径(可选,默认为当前工作目录)
13
+ */
14
+ async function publishTrigger({ triggerPath, projectPath = process.cwd() }) {
15
+ try {
16
+ const originalCwd = process.cwd();
17
+ process.chdir(projectPath);
18
+
19
+ try {
20
+ const argvs = ['', '', triggerPath];
21
+ await publishTriggerModule(argvs);
22
+ const triggerName = triggerPath.split("/")[1];
23
+ return { content: [{ type: 'text', text: `✓ 发布成功!触发器 ${triggerName} 已发布到服务器` }] };
24
+ } finally {
25
+ process.chdir(originalCwd);
26
+ }
27
+ } catch (error) {
28
+ return { content: [{ type: 'text', text: `✗ 发布失败: ${error.message}` }] };
29
+ }
30
+ }
31
+
32
+ module.exports = {
33
+ publishTrigger
34
+ };
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Trigger Puller 工具处理器
3
+ * 从服务器拉取触发器
4
+ */
5
+
6
+ const pullListModule = require('../../../triggers/pullList');
7
+
8
+ /**
9
+ * 从服务器拉取触发器
10
+ * @param {Object} params - 参数对象
11
+ * @param {string} params.id - 触发器ID
12
+ * @param {string} params.projectPath - 项目路径(可选,默认为当前工作目录)
13
+ */
14
+ async function pullTrigger({ id, projectPath = process.cwd() }) {
15
+ try {
16
+ // 使用 ID 从服务器拉取并创建/更新本地文件
17
+ const originalCwd = process.cwd();
18
+ process.chdir(projectPath);
19
+
20
+ try {
21
+ const argvs = ['', '', id, projectPath];
22
+ await pullListModule(argvs, true);
23
+
24
+ return {
25
+ content: [{
26
+ type: 'text',
27
+ text: `✓ 拉取成功!已从服务器拉取触发器(ID: ${id})并在本地创建/更新`
28
+ }]
29
+ };
30
+ } finally {
31
+ process.chdir(originalCwd);
32
+ }
33
+ } catch (error) {
34
+ return { content: [{ type: 'text', text: `✗ 拉取失败: ${error.message}` }] };
35
+ }
36
+ }
37
+
38
+ module.exports = {
39
+ pullTrigger
40
+ };
@@ -8,9 +8,9 @@
8
8
  * 目前 CCDK 文档是手动维护的,未来可以添加自动爬取功能
9
9
  */
10
10
 
11
- console.log('CCDK 文档爬取工具');
12
- console.log('注意:当前 CCDK 文档为手动维护,暂无自动爬取功能');
13
- console.log('如需更新文档,请手动编辑 prompt.js 文件');
11
+ console.error('CCDK 文档爬取工具');
12
+ console.error('注意:当前 CCDK 文档为手动维护,暂无自动爬取功能');
13
+ console.error('如需更新文档,请手动编辑 prompt.js 文件');
14
14
 
15
15
  // 预留:未来可以添加从官方文档网站爬取 CCDK API 的功能
16
16
  // 参考 dev-env 的实现方式
@@ -43,7 +43,7 @@ const ccdkApiTree = {
43
43
  "$on": {
44
44
  "name": "$on",
45
45
  "description": "订阅事件",
46
- "content": "### $on(event, callback)\n\n\n\n#### 订阅事件 v0.0.1\njs\n$CCDK.CCBus.$on('myevent',()=>{\n console.log('hello CloudCC')\n})\n\n| 参数 | 说明 | 类型 | 可选值 | 默认值 |\n|---------- |-------- |---------- |------------- |-------- |\n| event | 事件名称,唯一标识 | string | — | — |\n| callback | 回调方法 | function | — | — |",
46
+ "content": "### $on(event, callback)\n\n\n\n#### 订阅事件 v0.0.1\njs\n$CCDK.CCBus.$on('myevent',()=>{\n console.error('hello CloudCC')\n})\n\n| 参数 | 说明 | 类型 | 可选值 | 默认值 |\n|---------- |-------- |---------- |------------- |-------- |\n| event | 事件名称,唯一标识 | string | — | — |\n| callback | 回调方法 | function | — | — |",
47
47
  "keyword": "订阅事件,$on,事件总线,CCBus",
48
48
  "version": "v0.0.1"
49
49
  },
@@ -92,7 +92,7 @@ const ccdkApiTree = {
92
92
  "post": {
93
93
  "name": "post",
94
94
  "description": "请求自定义类",
95
- "content": "### post(className, methodName, params):object\n\n\n\n#### 请求自定义类 v0.6.9\njs\nlet className = \"test\"\nlet methodName = \"func1\"\nlet params = [\n {\n \"argType\": \"java.lang.String\",\n \"argValue\": \"hello\",\n },\n {\n \"argType\": \"java.lang.String\",\n \"argValue\": \"world\",\n }]\n$CCDK.CCCommon.post(className,methodName,params)\n.then((res)=>{let data = res.data;console.log(data)})\n.catch((error)=>{console.log(error)})\n\n| 参数 | 说明 | 类型 | 可选值 | 默认值 |\n|---------- |-------- |---------- |------------- |-------- |\n| className | 类名 | string | — | — |\n| methodName | 方法名 | string | — | — |\n| params | 参数集合 | array | — | — |\n| config | 配置参数 | object | — | {} |",
95
+ "content": "### post(className, methodName, params):object\n\n\n\n#### 请求自定义类 v0.6.9\njs\nlet className = \"test\"\nlet methodName = \"func1\"\nlet params = [\n {\n \"argType\": \"java.lang.String\",\n \"argValue\": \"hello\",\n },\n {\n \"argType\": \"java.lang.String\",\n \"argValue\": \"world\",\n }]\n$CCDK.CCCommon.post(className,methodName,params)\n.then((res)=>{let data = res.data;console.error(data)})\n.catch((error)=>{console.error(error)})\n\n| 参数 | 说明 | 类型 | 可选值 | 默认值 |\n|---------- |-------- |---------- |------------- |-------- |\n| className | 类名 | string | — | — |\n| methodName | 方法名 | string | — | — |\n| params | 参数集合 | array | — | — |\n| config | 配置参数 | object | — | {} |",
96
96
  "keyword": "请求自定义类,post,自定义接口交互,CCCommon",
97
97
  "version": "v0.6.9"
98
98
  }