cloudcc-cli 2.2.2 → 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 +47 -0
  3. package/bin/cc.js +11 -35
  4. package/bin/index.js +33 -0
  5. package/bin/mcp-svc.js +13 -0
  6. package/bin/mcp.js +18 -0
  7. package/java/com/cloudcc/core/TriggerInvoker.java +17 -1
  8. package/package.json +16 -7
  9. package/pom.xml +1 -0
  10. package/prompt/DevelopmentEnvironmentConstruction.ts +133 -0
  11. package/prompt/ccdk.ts +1190 -0
  12. package/prompt/ccprompt.ts +8 -0
  13. package/prompt/cloudccdev.ts +109 -0
  14. package/prompt/index.ts +52 -0
  15. package/prompt/objectInfo.ts +94 -0
  16. package/prompt/objectList.ts +25 -0
  17. package/prompt/openapi.ts +310 -0
  18. package/prompt/system.ts +14 -0
  19. package/prompt/vscodeExtension.ts +27 -0
  20. package/src/approval/approve.js +105 -0
  21. package/src/approval/get.js +245 -0
  22. package/src/approval/index.js +11 -0
  23. package/src/approval/reject.js +105 -0
  24. package/src/brief/get.js +51 -0
  25. package/src/brief/index.js +7 -0
  26. package/src/config/get.js +1 -1
  27. package/src/fields/create.js +204 -0
  28. package/src/fields/fields/A.js +23 -0
  29. package/src/fields/fields/AD.js +25 -0
  30. package/src/fields/fields/B.js +28 -0
  31. package/src/fields/fields/C.js +28 -0
  32. package/src/fields/fields/D.js +27 -0
  33. package/src/fields/fields/E.js +28 -0
  34. package/src/fields/fields/ENC.js +28 -0
  35. package/src/fields/fields/ENCD.js +28 -0
  36. package/src/fields/fields/F.js +27 -0
  37. package/src/fields/fields/FL.js +25 -0
  38. package/src/fields/fields/H.js +27 -0
  39. package/src/fields/fields/IMG.js +27 -0
  40. package/src/fields/fields/J.js +26 -0
  41. package/src/fields/fields/L.js +32 -0
  42. package/src/fields/fields/LT.js +28 -0
  43. package/src/fields/fields/M.js +29 -0
  44. package/src/fields/fields/MR.js +24 -0
  45. package/src/fields/fields/N.js +30 -0
  46. package/src/fields/fields/P.js +28 -0
  47. package/src/fields/fields/Q.js +35 -0
  48. package/src/fields/fields/S.js +30 -0
  49. package/src/fields/fields/SCORE.js +24 -0
  50. package/src/fields/fields/T.js +27 -0
  51. package/src/fields/fields/U.js +28 -0
  52. package/src/fields/fields/X.js +28 -0
  53. package/src/fields/fields/Y.js +33 -0
  54. package/src/fields/get.js +36 -0
  55. package/src/fields/index.js +9 -0
  56. package/src/mcp/MCP/345/234/272/346/231/257/346/250/241/346/213/237.md +8 -0
  57. package/src/mcp/index-sse-svc.js +126 -0
  58. package/src/mcp/index-streamable-svc.js +180 -0
  59. package/src/mcp/index.js +631 -0
  60. package/src/mcp/readme.md +137 -0
  61. package/src/mcp/tools/Approval/handler.js +349 -0
  62. package/src/mcp/tools/Class Creator/handler.js +37 -0
  63. package/src/mcp/tools/Class Detail Retriever/handler.js +33 -0
  64. package/src/mcp/tools/Class Detail Retriever/prompt.js +37 -0
  65. package/src/mcp/tools/Class Editor Guide/handler.js +72 -0
  66. package/src/mcp/tools/Class Editor Guide/prompt.js +468 -0
  67. package/src/mcp/tools/Class List Retriever/handler.js +36 -0
  68. package/src/mcp/tools/Class Publisher/handler.js +29 -0
  69. package/src/mcp/tools/Class Publisher/prompt.js +40 -0
  70. package/src/mcp/tools/Class Puller/handler.js +86 -0
  71. package/src/mcp/tools/Class Puller/prompt.js +49 -0
  72. package/src/mcp/tools/Client Script Creator/handler.js +179 -0
  73. package/src/mcp/tools/Client Script Detail Retriever/handler.js +53 -0
  74. package/src/mcp/tools/Client Script Editor Guide/handler.js +633 -0
  75. package/src/mcp/tools/Client Script List Retriever/handler.js +68 -0
  76. package/src/mcp/tools/Client Script Publisher/handler.js +54 -0
  77. package/src/mcp/tools/Client Script Puller/handler.js +73 -0
  78. package/src/mcp/tools/CloudCC Development Overview/handler.js +48 -0
  79. package/src/mcp/tools/CloudCC Development Overview/prompt.js +870 -0
  80. package/src/mcp/tools/Component Creator/handler.js +44 -0
  81. package/src/mcp/tools/Component Detail Retriever/handler.js +38 -0
  82. package/src/mcp/tools/Component Editor Guide/handler.js +76 -0
  83. package/src/mcp/tools/Component Editor Guide/prompt.js +519 -0
  84. package/src/mcp/tools/Component List Retriever/handler.js +43 -0
  85. package/src/mcp/tools/Component Publisher/handler.js +18 -0
  86. package/src/mcp/tools/Component Publisher/prompt.js +659 -0
  87. package/src/mcp/tools/Component Puller/handler.js +63 -0
  88. package/src/mcp/tools/Dev Environment Creator/fetcher.js +500 -0
  89. package/src/mcp/tools/Dev Environment Creator/handler.js +92 -0
  90. package/src/mcp/tools/Dev Environment Creator/prompt.js +273 -0
  91. package/src/mcp/tools/Dev Environment Validator/handler.js +88 -0
  92. package/src/mcp/tools/Dev Environment Validator/prompt.js +193 -0
  93. package/src/mcp/tools/Developer Key Setup Guide/fetcher.js +278 -0
  94. package/src/mcp/tools/Developer Key Setup Guide/handler.js +43 -0
  95. package/src/mcp/tools/Developer Key Setup Guide/prompt.js +71 -0
  96. package/src/mcp/tools/Object Creator/handler.js +34 -0
  97. package/src/mcp/tools/Object Fields Creator/handler.js +64 -0
  98. package/src/mcp/tools/Object Fields Retriever/handler.js +37 -0
  99. package/src/mcp/tools/Object Fields Retriever/prompt.js +10 -0
  100. package/src/mcp/tools/Object List Retriever/handler.js +43 -0
  101. package/src/mcp/tools/Object List Retriever/prompt.js +10 -0
  102. package/src/mcp/tools/Scheduled Class Creator/handler.js +37 -0
  103. package/src/mcp/tools/Scheduled Class Detail Retriever/handler.js +34 -0
  104. package/src/mcp/tools/Scheduled Class List Retriever/handler.js +52 -0
  105. package/src/mcp/tools/Scheduled Class Publisher/handler.js +30 -0
  106. package/src/mcp/tools/Scheduled Class Puller/handler.js +92 -0
  107. package/src/mcp/tools/Trigger Creator/handler.js +53 -0
  108. package/src/mcp/tools/Trigger Detail Retriever/handler.js +33 -0
  109. package/src/mcp/tools/Trigger Editor Guide/handler.js +58 -0
  110. package/src/mcp/tools/Trigger List Retriever/handler.js +49 -0
  111. package/src/mcp/tools/Trigger Publisher/handler.js +34 -0
  112. package/src/mcp/tools/Trigger Puller/handler.js +40 -0
  113. package/src/mcp/tools/ccdk/fetcher.js +18 -0
  114. package/src/mcp/tools/ccdk/handler.js +98 -0
  115. package/src/mcp/tools/ccdk/prompt.js +453 -0
  116. package/src/mcp/tools/index.js +23 -0
  117. package/src/object/create.js +105 -0
  118. package/src/object/get.js +43 -4
  119. package/src/object/index.js +2 -1
  120. package/src/plugin/create.js +1 -2
  121. package/src/plugin/create1.js +9 -9
  122. package/src/plugin/detail.js +91 -0
  123. package/src/plugin/get.js +79 -0
  124. package/src/plugin/index.js +4 -1
  125. package/src/plugin/publish.js +13 -13
  126. package/src/plugin/publish1.js +33 -24
  127. package/src/plugin/pull.js +173 -0
  128. package/src/project/create.js +9 -9
  129. package/src/project/create1.js +31 -17
  130. package/src/recordType/get.js +4 -2
  131. package/src/script/create.js +7 -7
  132. package/src/script/detail.js +95 -0
  133. package/src/script/get.js +4 -2
  134. package/src/script/index.js +1 -0
  135. package/src/script/publish.js +14 -14
  136. package/src/script/pull.js +12 -12
  137. package/src/script/pullList.js +5 -3
  138. package/src/timer/create.js +7 -7
  139. package/src/timer/detail.js +84 -0
  140. package/src/timer/get.js +6 -3
  141. package/src/timer/publish.js +7 -7
  142. package/src/timer/pull.js +8 -8
  143. package/src/timer/pullList.js +5 -3
  144. package/src/token/get.js +1 -1
  145. package/src/triggers/create.js +7 -7
  146. package/src/triggers/detail.js +90 -0
  147. package/src/triggers/get.js +4 -2
  148. package/src/triggers/index.js +1 -0
  149. package/src/triggers/publish.js +7 -7
  150. package/src/triggers/pull.js +8 -8
  151. package/src/triggers/pullList.js +5 -3
  152. package/src/version/get.js +3 -3
  153. package/target/ccopenapi-0.0.3-classes.jar +0 -0
  154. package/target/ccopenapi-0.0.3.jar +0 -0
  155. package/target/maven-archiver/pom.properties +3 -0
  156. package/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +18 -0
  157. package/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +19 -0
  158. package/template/Appvue +452 -12
  159. package/template/index.js +30 -19
  160. package/tool/branch/index.js +1 -1
  161. package/tool/checkLange/checkLang.js +6 -6
  162. package/tool/checkLange/clearLang.js +1 -1
  163. package/utils/accessClass.js +23 -0
  164. package/utils/checkVersion.js +22 -20
  165. package/utils/config.js +18 -3
  166. package/utils/http.js +10 -10
  167. package/utils/utils.js +128 -40
  168. package/java/com/cloudcc/core/CCTriggerDemo.java +0 -25
  169. package/src/classes/create.js +0 -65
  170. package/src/classes/get.js +0 -21
  171. package/src/classes/index.js +0 -11
  172. package/src/classes/publish.js +0 -50
  173. package/src/classes/pull.js +0 -54
  174. package/src/classes/pullList.js +0 -44
@@ -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
+ };
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * CCDK API 文档爬取工具
5
+ * 用于从 CloudCC 官方文档爬取 CCDK API 信息并生成结构化知识库
6
+ *
7
+ * TODO: 实现 CCDK 文档的自动爬取功能
8
+ * 目前 CCDK 文档是手动维护的,未来可以添加自动爬取功能
9
+ */
10
+
11
+ console.error('CCDK 文档爬取工具');
12
+ console.error('注意:当前 CCDK 文档为手动维护,暂无自动爬取功能');
13
+ console.error('如需更新文档,请手动编辑 prompt.js 文件');
14
+
15
+ // 预留:未来可以添加从官方文档网站爬取 CCDK API 的功能
16
+ // 参考 dev-env 的实现方式
17
+
18
+ process.exit(0);
@@ -0,0 +1,98 @@
1
+ /**
2
+ * CCDK 工具处理器
3
+ * 提供 CCDK API 文档查询、搜索等功能的具体实现
4
+ */
5
+
6
+ const { ccdkApiTree } = require('./prompt.js');
7
+
8
+ /**
9
+ * 获取 CCDK 文档(完整或指定模块)
10
+ */
11
+ async function getCcdkDocs({ module } = {}) {
12
+ const tree = ccdkApiTree;
13
+
14
+ if (module) {
15
+ const moduleInfo = tree[module];
16
+ if (moduleInfo) {
17
+ let content = `# ${module} - ${moduleInfo.name}\n\n${moduleInfo.description}\n\n---\n\n`;
18
+ Object.entries(moduleInfo.apis).forEach(([apiName, apiInfo]) => {
19
+ content += `## ${apiName}\n\n**描述**: ${apiInfo.description}\n\n**版本**: ${apiInfo.version}\n\n${apiInfo.content}\n\n---\n\n`;
20
+ });
21
+ return { content: [{ type: 'text', text: content }] };
22
+ } else {
23
+ const modules = Object.keys(tree);
24
+ return { content: [{ type: 'text', text: `未找到 "${module}" 模块的文档。\n\n可用模块:\n${modules.map(m => `- ${m}`).join('\n')}` }] };
25
+ }
26
+ } else {
27
+ let content = '# CloudCC CCDK API 模块概览\n\n';
28
+ Object.entries(tree).forEach(([moduleName, moduleInfo]) => {
29
+ const apiCount = Object.keys(moduleInfo.apis).length;
30
+ content += `## ${moduleName} - ${moduleInfo.name}\n\n${moduleInfo.description}\n\n**API 数量**: ${apiCount}\n\n---\n\n`;
31
+ });
32
+ content += '\n💡 使用 `get_ccdk_docs` 工具并指定 `module` 参数获取模块详细文档';
33
+ return { content: [{ type: 'text', text: content }] };
34
+ }
35
+ }
36
+
37
+ /**
38
+ * 搜索 CCDK 文档
39
+ */
40
+ async function searchCcdkDocs({ keyword, maxResults = 20 }) {
41
+ const tree = ccdkApiTree;
42
+ const keywordLower = keyword.toLowerCase();
43
+ const results = [];
44
+
45
+ Object.entries(tree).forEach(([moduleName, moduleInfo]) => {
46
+ Object.entries(moduleInfo.apis).forEach(([apiName, apiInfo]) => {
47
+ let score = 0;
48
+ if (apiName.toLowerCase() === keywordLower) score += 100;
49
+ else if (apiName.toLowerCase().includes(keywordLower)) score += 50;
50
+ if (apiInfo.keyword.toLowerCase().includes(keywordLower)) score += 30;
51
+ if (apiInfo.description.toLowerCase().includes(keywordLower)) score += 20;
52
+ if (apiInfo.content.toLowerCase().includes(keywordLower)) score += 10;
53
+ if (moduleInfo.name.toLowerCase().includes(keywordLower)) score += 15;
54
+ if (moduleInfo.description.toLowerCase().includes(keywordLower)) score += 10;
55
+ if (score > 0) results.push({ score, moduleName, moduleInfo, apiName, apiInfo });
56
+ });
57
+ });
58
+
59
+ results.sort((a, b) => b.score - a.score);
60
+ const topResults = results.slice(0, maxResults);
61
+
62
+ if (topResults.length > 0) {
63
+ let content = `# 搜索结果:${keyword}\n\n找到 ${topResults.length} 个相关 API (共 ${results.length} 个匹配)\n\n---\n\n`;
64
+ topResults.forEach(({ moduleName, moduleInfo, apiName, apiInfo }) => {
65
+ content += `## ${moduleName}.${apiName}\n\n**模块**: ${moduleInfo.name}\n\n**描述**: ${apiInfo.description}\n\n**版本**: ${apiInfo.version}\n\n${apiInfo.content}\n\n---\n\n`;
66
+ });
67
+ return { content: [{ type: 'text', text: content }] };
68
+ } else {
69
+ return { content: [{ type: 'text', text: `未找到包含 "${keyword}" 的内容。` }] };
70
+ }
71
+ }
72
+
73
+ /**
74
+ * 列出 CCDK 模块
75
+ */
76
+ async function listCcdkModules({ showApis = false }) {
77
+ const tree = ccdkApiTree;
78
+ let content = '# CCDK API 模块列表\n\n';
79
+ Object.entries(tree).forEach(([moduleName, moduleInfo]) => {
80
+ const apiCount = Object.keys(moduleInfo.apis).length;
81
+ content += `## ${moduleName} - ${moduleInfo.name}\n\n${moduleInfo.description}\n\n**API 数量**: ${apiCount}\n\n`;
82
+ if (showApis) {
83
+ content += '**包含 API**:\n';
84
+ Object.entries(moduleInfo.apis).forEach(([apiName, apiInfo]) => {
85
+ content += `- \`${apiName}\`: ${apiInfo.description}\n`;
86
+ });
87
+ content += '\n';
88
+ }
89
+ content += '---\n\n';
90
+ });
91
+ return { content: [{ type: 'text', text: content }] };
92
+ }
93
+
94
+ module.exports = {
95
+ getCcdkDocs,
96
+ searchCcdkDocs,
97
+ listCcdkModules
98
+ };