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,468 @@
1
+ /**
2
+ * EditClass 工具知识库 - 编辑类时需要的核心 API 文档
3
+ * 从 classes/prompt.js 迁移而来
4
+ */
5
+
6
+ /**
7
+ * 从 CCService 提取 API 文档
8
+ */
9
+ function extractCCServiceApis() {
10
+ return {
11
+ name: 'CCService 数据操作 API',
12
+ description: '核心服务类,用于数据增删改查和业务逻辑操作',
13
+ apis: {
14
+ // 查询方法
15
+ cquery: {
16
+ description: '无条件查询所有数据',
17
+ signature: 'List<CCObject> cquery(String apiName)',
18
+ example: 'List<CCObject> accounts = cs.cquery("account");',
19
+ returns: 'CCObject 列表'
20
+ },
21
+ cqueryWithCondition: {
22
+ description: '条件查询数据',
23
+ signature: 'List<CCObject> cquery(String apiName, String expression)',
24
+ example: 'List<CCObject> result = cs.cquery("account", "name like \'%销售%\'");',
25
+ returns: 'CCObject 列表',
26
+ params: [
27
+ { name: 'apiName', type: 'String', desc: '对象 API 名称,如 account, contact 等' },
28
+ { name: 'expression', type: 'String', desc: '查询条件,支持 like, =, >, <, >= <= 等操作符' }
29
+ ]
30
+ },
31
+ cqlQuery: {
32
+ description: 'CQL 条件查询(推荐)',
33
+ signature: 'List<CCObject> cqlQuery(String apiName, String expression)',
34
+ example: 'List<CCObject> result = cs.cqlQuery("account", "status = \'active\'");',
35
+ returns: 'CCObject 列表',
36
+ note: '性能比 cquery 更优,推荐使用'
37
+ },
38
+
39
+ // 插入方法
40
+ insert: {
41
+ description: '新增单条记录',
42
+ signature: 'ServiceResult insert(CCObject cobj)',
43
+ example: `CCObject obj = new CCObject("account");
44
+ obj.put("name", "新客户");
45
+ obj.put("type", "1");
46
+ ServiceResult sr = cs.insert(obj);
47
+ String id = sr.get("id"); // 获取新增记录的 ID`,
48
+ returns: 'ServiceResult 包含新增记录的 ID'
49
+ },
50
+ insertBatch: {
51
+ description: '批量新增记录',
52
+ signature: 'ServiceResult insert(List<CCObject> datalist)',
53
+ example: `List<CCObject> list = new ArrayList<>();
54
+ for(int i=0; i<3; i++) {
55
+ CCObject obj = new CCObject("account");
56
+ obj.put("name", "客户"+i);
57
+ list.add(obj);
58
+ }
59
+ ServiceResult sr = cs.insert(list);`,
60
+ returns: 'ServiceResult 包含所有新增记录的 ID'
61
+ },
62
+
63
+ // 更新方法
64
+ update: {
65
+ description: '更新单条记录',
66
+ signature: 'void update(CCObject cobj)',
67
+ example: `CCObject obj = new CCObject("account");
68
+ obj.put("id", "existingId");
69
+ obj.put("name", "更新的名称");
70
+ cs.update(obj);`,
71
+ note: 'CCObject 必须包含 id 字段用于标识更新的记录'
72
+ },
73
+
74
+ // 删除方法
75
+ delete: {
76
+ description: '删除记录',
77
+ signature: 'void delete(CCObject cobj)',
78
+ example: `CCObject obj = new CCObject("account");
79
+ obj.put("id", "recordId");
80
+ cs.delete(obj);`
81
+ },
82
+
83
+ // Upsert 方法
84
+ upsert: {
85
+ description: '新增或更新记录(有 id 则更新,无则新增)',
86
+ signature: 'ServiceResult upsert(CCObject cobj)',
87
+ example: `CCObject obj = new CCObject("account");
88
+ obj.put("id", "existingId"); // 存在则更新,不存在则新增
89
+ obj.put("name", "账户名称");
90
+ ServiceResult sr = cs.upsert(obj);`,
91
+ returns: 'ServiceResult 包含记录的 ID'
92
+ },
93
+
94
+ // 邮件方法
95
+ sendEmail: {
96
+ description: '发送邮件',
97
+ signature: 'String sendEmail(String subject, String htmlBody, String toAddress, String relatedid, String ccaddress, String bccaddress, String attachmentId, String s, String s1)',
98
+ example: 'cs.sendEmail("邮件主题", "<h1>邮件内容</h1>", "user@example.com", "", "", "", "", "", "");',
99
+ note: '该方法支持 HTML 格式的邮件内容'
100
+ }
101
+ },
102
+ bestPractices: [
103
+ '查询时优先使用 cqlQuery,性能更优',
104
+ '批量操作使用 insertBatch 而非循环调用 insert',
105
+ '修改数据前建议先查询验证数据存在',
106
+ '操作后检查 ServiceResult 的返回值确保成功',
107
+ '大量数据操作建议分批处理以避免超时'
108
+ ]
109
+ };
110
+ }
111
+
112
+ /**
113
+ * 从 CCObject 提取对象操作文档
114
+ */
115
+ function extractCCObjectDocs() {
116
+ return {
117
+ name: 'CCObject 对象操作',
118
+ description: 'CloudCC 数据对象,继承自 HashMap<String, Object>',
119
+ constructors: [
120
+ {
121
+ signature: 'CCObject(String ccobj)',
122
+ desc: '创建指定对象类型的 CCObject',
123
+ example: `CCObject account = new CCObject("account");`,
124
+ recommended: true
125
+ }
126
+ ],
127
+ methods: {
128
+ dataAccess: {
129
+ items: [
130
+ {
131
+ name: 'put/get/containsKey/remove/keySet',
132
+ desc: '继承自 HashMap 的标准方法',
133
+ example: `obj.put("name", "值");
134
+ String name = (String) obj.get("name");`
135
+ }
136
+ ]
137
+ }
138
+ },
139
+ bestPractices: {
140
+ creation: ['使用 new CCObject("objectApi") 构造方法'],
141
+ dataManipulation: ['获取字段值时进行类型转换和 null 检查'],
142
+ withCCService: ['更新前先查询,批量操作使用 List<CCObject>']
143
+ },
144
+ commonObjects: [
145
+ { name: 'account', label: '客户', commonFields: ['id', 'name', 'type', 'owner'] },
146
+ { name: 'contact', label: '联系人', commonFields: ['id', 'name', 'account', 'email'] },
147
+ { name: 'opportunity', label: '商机', commonFields: ['id', 'name', 'stage', 'amount'] }
148
+ ]
149
+ };
150
+ }
151
+
152
+ /**
153
+ * 从 SendEmail 提取邮件发送文档
154
+ */
155
+ function extractSendEmailDocs() {
156
+ return {
157
+ name: 'SendEmail 邮件服务',
158
+ methods: {
159
+ sendMailFromSystem: {
160
+ description: '发送邮件',
161
+ example: `SendEmail sender = new SendEmail(userInfo);
162
+ sender.sendMailFromSystem(
163
+ new String[]{"user@example.com"},
164
+ null, null, "主题", "<h1>内容</h1>", false
165
+ );`
166
+ }
167
+ }
168
+ };
169
+ }
170
+
171
+ /**
172
+ * 从 TimeUtil 提取时间工具文档
173
+ */
174
+ function extractTimeUtilDocs() {
175
+ return {
176
+ name: 'TimeUtil 时间工具',
177
+ methods: {
178
+ getSimpleDateFormat: {
179
+ example: `SimpleDateFormat sdf = TimeUtil.getSimpleDateFormat("yyyy-MM-dd HH:mm:ss", userInfo);
180
+ String dateStr = sdf.format(new Date());`
181
+ }
182
+ }
183
+ };
184
+ }
185
+
186
+ /**
187
+ * 从 UserInfo 提取用户信息文档
188
+ */
189
+ function extractUserInfoDocs() {
190
+ return {
191
+ name: 'UserInfo 用户信息',
192
+ properties: [
193
+ { name: 'getUserId()', desc: '获取用户ID' },
194
+ { name: 'getUserName()', desc: '获取用户名' },
195
+ { name: 'getRoleId()', desc: '获取角色ID' }
196
+ ]
197
+ };
198
+ }
199
+
200
+ /**
201
+ * 从 DevLogger 提取日志文档
202
+ */
203
+ function extractDevLoggerDocs() {
204
+ return {
205
+ name: 'DevLogger 开发日志',
206
+ methods: [
207
+ { name: 'devLogInfo(String log)', desc: '输出信息日志', example: 'DevLogger.devLogInfo("处理开始");' },
208
+ { name: 'devLogError(String log)', desc: '输出错误日志', example: 'DevLogger.devLogError("失败");' },
209
+ { name: 'devLogError(String log, Exception e)', desc: '输出异常', example: 'DevLogger.devLogError("错误", e);' }
210
+ ]
211
+ };
212
+ }
213
+
214
+ /**
215
+ * 常见编辑需求场景
216
+ */
217
+ function getEditScenarios() {
218
+ return [
219
+ {
220
+ scenario: '数据查询和更新',
221
+ example: `List<CCObject> records = cs.cqlQuery("account", "status = 'active'");
222
+ for(CCObject obj : records) {
223
+ obj.put("lastCheck", new Date());
224
+ cs.update(obj);
225
+ }`
226
+ },
227
+ {
228
+ scenario: '批量创建',
229
+ example: `List<CCObject> list = new ArrayList<>();
230
+ for(int i=0; i<10; i++) {
231
+ CCObject obj = new CCObject("contact");
232
+ obj.put("name", "联系人"+i);
233
+ list.add(obj);
234
+ }
235
+ cs.insert(list);`
236
+ }
237
+ ];
238
+ }
239
+
240
+ // 初始化 API 文档
241
+ const editCCServiceApis = extractCCServiceApis();
242
+ const editCCObjectDocs = extractCCObjectDocs();
243
+ const editSendEmailDocs = extractSendEmailDocs();
244
+ const editTimeUtilDocs = extractTimeUtilDocs();
245
+ const editUserInfoDocs = extractUserInfoDocs();
246
+ const editDevLoggerDocs = extractDevLoggerDocs();
247
+ const editScenarios = getEditScenarios();
248
+
249
+
250
+ /**
251
+ * 格式化 API 文档
252
+ */
253
+ function formatApiDocs(api) {
254
+ const lines = [`### ${api.name}\n${api.description}\n`];
255
+
256
+ for (const [key, method] of Object.entries(api.apis || api.methods || {})) {
257
+ lines.push(`#### ${method.description}`);
258
+ lines.push(`\`\`\`java\n${method.example}\n\`\`\``);
259
+
260
+ if (method.params) {
261
+ lines.push('**参数**:');
262
+ method.params.forEach(p => {
263
+ lines.push(`- ${p.name} (${p.type}): ${p.desc}`);
264
+ });
265
+ }
266
+ if (method.returns) lines.push(`**返回**: ${method.returns}`);
267
+ if (method.note) lines.push(`**提示**: ${method.note}`);
268
+ lines.push('');
269
+ }
270
+
271
+ if (api.bestPractices) {
272
+ lines.push('### 最佳实践');
273
+ api.bestPractices.forEach(p => {
274
+ lines.push(`- ${p}`);
275
+ });
276
+ }
277
+
278
+ return lines.join('\n');
279
+ }
280
+
281
+ /**
282
+ * 生成API类概要(简要信息)
283
+ */
284
+ function generateApiSummary() {
285
+ return [
286
+ '## 📚 可用 API 类',
287
+ '1. CCService - 数据CRUD (`topic: "ccservice"`)',
288
+ '2. CCObject - 数据对象 (`topic: "object"`)',
289
+ '3. SendEmail - 邮件服务 (`topic: "email"`)',
290
+ '4. TimeUtil - 时间工具 (`topic: "time"`)',
291
+ '5. UserInfo - 用户信息 (`topic: "user"`)',
292
+ '6. DevLogger - 日志工具 (`topic: "logger"`)',
293
+ '7. 场景示例 (`topic: "scenarios"`)'
294
+ ].join('\n');
295
+ }
296
+
297
+ /**
298
+ * 生成概览(包含规范、最佳实践、API概要)
299
+ */
300
+ function generateOverview() {
301
+ return [
302
+ '# CloudCC 类编辑知识库',
303
+ '',
304
+ '## 🔴 核心规则',
305
+ '**所有代码必须写在以下标记之间**:',
306
+ '```java',
307
+ '// @SOURCE_CONTENT_START',
308
+ '// 业务代码',
309
+ '// @SOURCE_CONTENT_END',
310
+ '```',
311
+ '',
312
+ '## ⚠️ 常见错误',
313
+ '| 错误 | 正确 |',
314
+ '|------|------|',
315
+ '| `DevLogger.error()` | `DevLogger.devLogError()` |',
316
+ '| `new CCObject()` | `new CCObject("account")` |',
317
+ '| `obj.get("field")` | `(String) obj.get("field")` |',
318
+ '',
319
+ '## ✅ 编码规范与最佳实践',
320
+ '',
321
+ '### 数据验证',
322
+ '- 新增或更新前验证数据的合法性',
323
+ '- 检查必填字段是否为空',
324
+ '- 验证数据格式是否正确',
325
+ '- 检查是否存在重复数据',
326
+ '',
327
+ '### 错误处理',
328
+ '- 使用 try-catch 捕获异常',
329
+ '- 使用 DevLogger 记录错误信息',
330
+ '- 对关键操作进行日志记录',
331
+ '- 返回有意义的错误提示',
332
+ '',
333
+ '### 性能优化',
334
+ '- 使用批量操作替代循环调用',
335
+ '- 避免在循环中进行数据库查询',
336
+ '- 大数据量操作时分批处理',
337
+ '- 优先使用条件查询减少数据传输',
338
+ '- 使用 cqlQuery 替代 cquery(性能更优)',
339
+ '',
340
+ '### 安全规范',
341
+ '- 验证用户权限和数据访问权限',
342
+ '- 不要在日志中输出敏感数据',
343
+ '- 对外部输入进行验证和清理',
344
+ '- 使用 UserInfo 进行权限检查',
345
+ '',
346
+ generateApiSummary(),
347
+ ''
348
+ ].join('\n');
349
+ }
350
+
351
+ /**
352
+ * 生成 CCService 指南
353
+ */
354
+ function generateCCServiceGuide() {
355
+ return formatApiDocs(editCCServiceApis);
356
+ }
357
+
358
+ /**
359
+ * 生成 CCObject 指南
360
+ */
361
+ function generateCCObjectGuide() {
362
+ const obj = editCCObjectDocs;
363
+ const lines = [`## ${obj.name}\n${obj.description}\n`];
364
+ obj.constructors.forEach(c => lines.push(`\`\`\`java\n${c.example}\n\`\`\``));
365
+ if (obj.methods?.dataAccess?.items) {
366
+ obj.methods.dataAccess.items.forEach(item => {
367
+ lines.push(`**${item.name}**: ${item.desc}\n\`\`\`java\n${item.example}\n\`\`\``);
368
+ });
369
+ }
370
+ return lines.join('\n');
371
+ }
372
+
373
+ /**
374
+ * 生成邮件服务指南
375
+ */
376
+ function generateEmailGuide() {
377
+ return formatApiDocs({ ...editSendEmailDocs, apis: editSendEmailDocs.methods });
378
+ }
379
+
380
+ /**
381
+ * 生成时间工具指南
382
+ */
383
+ function generateTimeUtilGuide() {
384
+ const lines = [`## ${editTimeUtilDocs.name}\n`];
385
+ for (const [key, method] of Object.entries(editTimeUtilDocs.methods)) {
386
+ lines.push(`\`\`\`java\n${method.example}\n\`\`\``);
387
+ }
388
+ return lines.join('\n');
389
+ }
390
+
391
+ /**
392
+ * 生成用户信息指南
393
+ */
394
+ function generateUserInfoGuide() {
395
+ const lines = [`## ${editUserInfoDocs.name}\n`];
396
+ editUserInfoDocs.properties.forEach(prop => {
397
+ lines.push(`- \`${prop.name}\`: ${prop.desc}`);
398
+ });
399
+ return lines.join('\n');
400
+ }
401
+
402
+ /**
403
+ * 生成日志输出指南
404
+ */
405
+ function generateLoggerGuide() {
406
+ const lines = [`## ${editDevLoggerDocs.name}\n`];
407
+ editDevLoggerDocs.methods.forEach(method => {
408
+ lines.push(`**${method.name}**: ${method.desc}\n\`\`\`java\n${method.example}\n\`\`\``);
409
+ });
410
+ return lines.join('\n');
411
+ }
412
+
413
+ /**
414
+ * 生成常见场景
415
+ */
416
+ function generateScenariosGuide() {
417
+ const lines = ['## 常见场景\n'];
418
+ editScenarios.forEach(s => {
419
+ lines.push(`### ${s.scenario}\n\`\`\`java\n${s.example}\n\`\`\`\n`);
420
+ });
421
+ return lines.join('\n');
422
+ }
423
+
424
+
425
+ /**
426
+ * 获取快速 API 参考(用于详细API主题)
427
+ */
428
+ function getQuickApiReference() {
429
+ return `\n---\n💡 提示:代码必须写在 \`@SOURCE_CONTENT_START\` 和 \`@SOURCE_CONTENT_END\` 之间`;
430
+ }
431
+
432
+
433
+ /**
434
+ * 获取指定主题的编辑文档
435
+ */
436
+ function getEditGuide(topic) {
437
+ const guides = {
438
+ overview: generateOverview, // 规范 + 最佳实践 + API概要(默认)
439
+ ccservice: generateCCServiceGuide, // CCService 详细API
440
+ object: generateCCObjectGuide, // CCObject 详细API
441
+ email: generateEmailGuide, // SendEmail 详细API
442
+ time: generateTimeUtilGuide, // TimeUtil 详细API
443
+ user: generateUserInfoGuide, // UserInfo 详细API
444
+ logger: generateLoggerGuide, // DevLogger 详细API
445
+ scenarios: generateScenariosGuide // 常见场景示例
446
+ };
447
+
448
+ const result = guides[topic] ? guides[topic]() : `✗ 未知的主题: ${topic}\n\n支持的主题: ${Object.keys(guides).join(', ')}`;
449
+
450
+ // overview 已经包含了所有规范和最佳实践,其他主题只添加简化的 API 标准提示
451
+ if (topic !== 'overview' && result.includes('```java')) {
452
+ return result + '\n\n---\n\n' + getQuickApiReference();
453
+ }
454
+
455
+ return result;
456
+ }
457
+
458
+ module.exports = {
459
+ getEditGuide,
460
+ generateOverview,
461
+ generateCCServiceGuide,
462
+ generateCCObjectGuide,
463
+ generateEmailGuide,
464
+ generateTimeUtilGuide,
465
+ generateUserInfoGuide,
466
+ generateLoggerGuide,
467
+ generateScenariosGuide
468
+ };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Classes 工具处理器
3
+ * 提供自定义类的查询功能
4
+ */
5
+
6
+ const getClassModule = require('../../../classes/get');
7
+
8
+ /**
9
+ * 获取类列表
10
+ */
11
+ async function listClasses({ projectPath = process.cwd() }) {
12
+ try {
13
+
14
+ let classList = await getClassModule('', projectPath, true);
15
+
16
+ if (!classList || classList.length === 0) {
17
+ return { content: [{ type: 'text', text: '未找到任何类' }] };
18
+ }
19
+
20
+ let result = `## 类列表\n\n找到 ${classList.length} 个类\n\n`;
21
+
22
+ classList.forEach((item, index) => {
23
+ result += `### ${index + 1}. ${item.name || item.apiname}\n`;
24
+ result += `- **ID**: ${item.id}\n`;
25
+ result += `- **API名称**: ${item.apiname || 'N/A'}\n\n`;
26
+ });
27
+
28
+ return { content: [{ type: 'text', text: result }] };
29
+ } catch (error) {
30
+ return { content: [{ type: 'text', text: `✗ 查询失败: ${error.message}` }] };
31
+ }
32
+ }
33
+
34
+ module.exports = {
35
+ listClasses
36
+ };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Class Publisher 工具处理器
3
+ * 发布自定义类到服务器
4
+ */
5
+
6
+ const publishClassModule = require('../../../classes/publish');
7
+
8
+ /**
9
+ * 发布类到服务器
10
+ */
11
+ async function publishClass({ className, projectPath = process.cwd() }) {
12
+ try {
13
+ const originalCwd = process.cwd();
14
+ process.chdir(projectPath);
15
+
16
+ try {
17
+ await publishClassModule(className);
18
+ return { content: [{ type: 'text', text: `✓ 发布成功!类 ${className} 已发布到服务器` }] };
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
+ publishClass
29
+ };
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Class Publisher 工具知识库
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
+ publishProcess: [
21
+ '1. 验证本地类文件是否存在和有效',
22
+ '2. 检查config.json配置文件',
23
+ '3. 提取 @SOURCE_CONTENT_START 和 @SOURCE_CONTENT_END 之间的源码',
24
+ '4. 上传源码到服务器',
25
+ '5. 更新本地config.json中的服务器ID'
26
+ ],
27
+ requirements: [
28
+ '类必须已本地创建,拥有完整的classes/{ClassName}目录',
29
+ '必须包含{ClassName}.java主类文件',
30
+ '必须包含config.json配置文件',
31
+ '源码必须位于@SOURCE_CONTENT_START和@SOURCE_CONTENT_END之间',
32
+ '必须有效的网络连接和服务器权限'
33
+ ],
34
+ bestPractices: [
35
+ '发布前进行本地测试和编译检查',
36
+ '确保代码注释清晰,便于后续维护',
37
+ '版本号应遵循语义化版本规范',
38
+ '发布成功后备份config.json文件'
39
+ ]
40
+ };
@@ -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
+ };