@maxisoft/instantcms-mcp 1.2.3

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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +308 -0
  3. package/dist/__tests__/artifact-tool.test.js +196 -0
  4. package/dist/__tests__/db-tool.test.js +152 -0
  5. package/dist/__tests__/define-tool.test.js +106 -0
  6. package/dist/__tests__/find-tool.test.js +185 -0
  7. package/dist/__tests__/get-component-api.test.js +144 -0
  8. package/dist/__tests__/hardening.test.js +73 -0
  9. package/dist/__tests__/hooks-tool.test.js +173 -0
  10. package/dist/__tests__/mcp-integration-extra.test.js +166 -0
  11. package/dist/__tests__/mcp-integration.test.js +53 -0
  12. package/dist/__tests__/pagination.test.js +114 -0
  13. package/dist/__tests__/performance-baseline.test.js +56 -0
  14. package/dist/__tests__/project-patch.test.js +144 -0
  15. package/dist/__tests__/project-source.test.js +44 -0
  16. package/dist/__tests__/project-workflows-extra.test.js +165 -0
  17. package/dist/__tests__/project-workflows.test.js +51 -0
  18. package/dist/__tests__/scaffold-addon-roundtrip.test.js +287 -0
  19. package/dist/__tests__/serialization.test.js +170 -0
  20. package/dist/__tests__/source-knowledge-parsers.test.js +42 -0
  21. package/dist/__tests__/template-development.test.js +78 -0
  22. package/dist/__tests__/template-productivity.test.js +87 -0
  23. package/dist/__tests__/tools.test.js +2143 -0
  24. package/dist/data/components.js +2818 -0
  25. package/dist/data/controllers-map.js +7571 -0
  26. package/dist/data/core-api.js +9356 -0
  27. package/dist/data/database-schema.js +4555 -0
  28. package/dist/data/events-map.js +1339 -0
  29. package/dist/data/fields-map.js +3692 -0
  30. package/dist/data/hooks.js +2257 -0
  31. package/dist/data/js-api.js +123 -0
  32. package/dist/data/libs-api.js +264 -0
  33. package/dist/data/routes-map.js +203 -0
  34. package/dist/data/schemas-validation.js +255 -0
  35. package/dist/data/schemas.js +1404 -0
  36. package/dist/data/traits-map.js +1004 -0
  37. package/dist/data/version-profiles.js +41 -0
  38. package/dist/data/widgets-map.js +131 -0
  39. package/dist/data/wysiwyg-map.js +486 -0
  40. package/dist/generated/components-source.js +14748 -0
  41. package/dist/generated/hooks-source.js +3399 -0
  42. package/dist/generated/knowledge-meta.js +101 -0
  43. package/dist/index.js +13 -0
  44. package/dist/registry/database-tools.js +112 -0
  45. package/dist/registry/extension-tools.js +473 -0
  46. package/dist/registry/generator-tools.js +506 -0
  47. package/dist/registry/knowledge-tools.js +441 -0
  48. package/dist/registry/language-tools.js +99 -0
  49. package/dist/registry/meta-tools.js +152 -0
  50. package/dist/registry/project-tools.js +48 -0
  51. package/dist/registry/resources.js +98 -0
  52. package/dist/registry/source-tools.js +211 -0
  53. package/dist/registry/template-development-tools.js +79 -0
  54. package/dist/server.js +32 -0
  55. package/dist/tools/addon-tool.js +1437 -0
  56. package/dist/tools/admin-partial-tool.js +498 -0
  57. package/dist/tools/api-tool.js +294 -0
  58. package/dist/tools/artifact-tool.js +95 -0
  59. package/dist/tools/cache-tool.js +360 -0
  60. package/dist/tools/component-tool.js +415 -0
  61. package/dist/tools/controllers-tool.js +125 -0
  62. package/dist/tools/cron-tool.js +197 -0
  63. package/dist/tools/crud-tool.js +659 -0
  64. package/dist/tools/db-tool.js +198 -0
  65. package/dist/tools/email-tool.js +222 -0
  66. package/dist/tools/external-api-tool.js +596 -0
  67. package/dist/tools/filter-tool.js +341 -0
  68. package/dist/tools/form-tool.js +275 -0
  69. package/dist/tools/grid-tool.js +189 -0
  70. package/dist/tools/hooks-tool.js +104 -0
  71. package/dist/tools/import-export-tool.js +548 -0
  72. package/dist/tools/lang-tool.js +251 -0
  73. package/dist/tools/layout-override-tool.js +125 -0
  74. package/dist/tools/layout-tool.js +548 -0
  75. package/dist/tools/maria-tool.js +127 -0
  76. package/dist/tools/mariadb.js +201 -0
  77. package/dist/tools/migration-tool.js +329 -0
  78. package/dist/tools/oauth-tool.js +520 -0
  79. package/dist/tools/parser/components-parser.js +76 -0
  80. package/dist/tools/parser/controllers-parser.js +313 -0
  81. package/dist/tools/parser/core-parser.js +294 -0
  82. package/dist/tools/parser/coverage-generator.js +424 -0
  83. package/dist/tools/parser/events-parser.js +127 -0
  84. package/dist/tools/parser/fields-parser.js +382 -0
  85. package/dist/tools/parser/hooks-parser.js +106 -0
  86. package/dist/tools/parser/sql-parser.js +197 -0
  87. package/dist/tools/parser/traits-parser.js +161 -0
  88. package/dist/tools/parser/widgets-parser.js +150 -0
  89. package/dist/tools/permission-tool.js +348 -0
  90. package/dist/tools/project-patch-tool.js +73 -0
  91. package/dist/tools/project-source-tool.js +188 -0
  92. package/dist/tools/project-workflow-tool.js +186 -0
  93. package/dist/tools/requirement-tool.js +212 -0
  94. package/dist/tools/scaffold-tool.js +815 -0
  95. package/dist/tools/seo-tool.js +412 -0
  96. package/dist/tools/source-tool.js +155 -0
  97. package/dist/tools/template-development-tool.js +271 -0
  98. package/dist/tools/template-overrides-tool.js +294 -0
  99. package/dist/tools/template-productivity-tool.js +319 -0
  100. package/dist/tools/template-tool.js +665 -0
  101. package/dist/tools/test-tool.js +183 -0
  102. package/dist/tools/webhook-tool.js +427 -0
  103. package/dist/tools/widget-tool.js +331 -0
  104. package/dist/tools/wysiwyg-tool.js +137 -0
  105. package/dist/types/scaffold.js +68 -0
  106. package/dist/utils/define-tool.js +37 -0
  107. package/dist/utils/find-tool.js +97 -0
  108. package/dist/utils/mcp-result.js +18 -0
  109. package/dist/utils/pagination.js +27 -0
  110. package/dist/utils/serialization.js +27 -0
  111. package/package.json +94 -0
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Cron job scaffolding tool for InstantCMS
4
+ * Generates cron controller, manifest, and language files
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.scaffoldCron = scaffoldCron;
8
+ const scaffold_1 = require("../types/scaffold");
9
+ /**
10
+ * Formats a CronSchedule object into a crontab string
11
+ */
12
+ function formatSchedule(schedule) {
13
+ const parts = [
14
+ schedule.minute ?? '*',
15
+ schedule.hour ?? '*',
16
+ schedule.day ?? '*',
17
+ schedule.month ?? '*',
18
+ schedule.day_of_week ?? '*',
19
+ ];
20
+ return parts.join(' ');
21
+ }
22
+ /**
23
+ * Generates the main cron controller file
24
+ */
25
+ function generateCronMain(name, Name, tasks, options) {
26
+ const useLock = options?.use_lock_file ?? true;
27
+ const logExecution = options?.log_execution ?? true;
28
+ const taskCases = tasks
29
+ .map(t => {
30
+ return ` case '${t.name}':
31
+ ${t.action}();
32
+ break;`;
33
+ })
34
+ .join('\n');
35
+ return `<?php
36
+ // InstantCMS 2. ${name}/cron.php
37
+ // Generated by InstantCMS MCP Server
38
+
39
+ define('PATH', dirname(__DIR__));
40
+ define('DS', DIRECTORY_SEPARATOR);
41
+
42
+ // Загрузка ядра
43
+ require_once PATH . '/core/bootstrap.php';
44
+
45
+ ${useLock
46
+ ? `
47
+ // Блокировка от повторного запуска
48
+ \\$${name}_lock_file = cmsConfig::get('cache_path') . '/${name}_cron.lock';
49
+
50
+ function ${name}_is_locked() {
51
+ global \\$${name}_lock_file;
52
+ if (!file_exists(\\$${name}_lock_file)) {
53
+ return false;
54
+ }
55
+ $stat = stat(\\$${name}_lock_file);
56
+ if (time() - $stat['mtime'] > 3600) {
57
+ unlink(\\$${name}_lock_file);
58
+ return false;
59
+ }
60
+ return true;
61
+ }
62
+
63
+ function ${name}_lock() {
64
+ global \\$${name}_lock_file;
65
+ touch(\\$${name}_lock_file);
66
+ }
67
+
68
+ function ${name}_unlock() {
69
+ global \\$${name}_lock_file;
70
+ if (file_exists(\\$${name}_lock_file)) {
71
+ unlink(\\$${name}_lock_file);
72
+ }
73
+ }
74
+
75
+ if (${name}_is_locked()) {
76
+ die('Cron already running or locked');
77
+ }
78
+ ${name}_lock();
79
+ `
80
+ : ''}
81
+
82
+ ${logExecution
83
+ ? `
84
+ // Логирование
85
+ \\$${name}_log_file = cmsConfig::get('root_path') . '/cache/logs/${name}.log';
86
+ function ${name}_log($message) {
87
+ global \\$${name}_log_file;
88
+ $dir = dirname(\\$${name}_log_file);
89
+ if (!is_dir($dir)) {
90
+ mkdir($dir, 0755, true);
91
+ }
92
+ file_put_contents(\\$${name}_log_file, date('Y-m-d H:i:s') . ' - ' . $message . PHP_EOL, FILE_APPEND);
93
+ }
94
+
95
+ ${name}_log('Cron started');
96
+ `
97
+ : ''}
98
+
99
+ try {
100
+ $task = $_SERVER['argv'][1] ?? 'all';
101
+
102
+ switch ($task) {
103
+ ${taskCases}
104
+ default:
105
+ // Выполняем все задачи
106
+ ${tasks.map(t => `${t.action}();`).join('\n ')}
107
+ break;
108
+ }
109
+
110
+ ${logExecution ? `${name}_log('Cron completed successfully');` : ''}
111
+ } catch (Exception $e) {
112
+ ${logExecution ? `${name}_log('Error: ' . $e->getMessage());` : ''}
113
+ echo 'Error: ' . $e->getMessage() . PHP_EOL;
114
+ exit(1);
115
+ }
116
+
117
+ ${useLock
118
+ ? `
119
+ ${name}_unlock();
120
+ `
121
+ : ''}
122
+ `;
123
+ }
124
+ /**
125
+ * Generates the manifest.xml with task definitions
126
+ */
127
+ function generateManifest(name, Name, tasks) {
128
+ const taskElements = tasks
129
+ .map(t => {
130
+ return ` <task name="${t.name}" schedule="${formatSchedule(t.schedule)}" action="${t.action}" ${t.description ? `description="${t.description}"` : ''} />`;
131
+ })
132
+ .join('\n');
133
+ return `<?xml version="1.0"?>
134
+ <manifest>
135
+ <name>${Name}</name>
136
+ <description>${Name} component cron jobs</description>
137
+ <version>1.0.0</version>
138
+ <tasks>
139
+ ${taskElements}
140
+ </tasks>
141
+ </manifest>
142
+ `;
143
+ }
144
+ /**
145
+ * Generates language file with task titles
146
+ */
147
+ function generateLang(name, NAME, tasks) {
148
+ const langEntries = tasks
149
+ .map(t => {
150
+ return ` 'LANG_${NAME}_TASK_${t.name.toUpperCase()}' => '${t.description ?? t.name}',`;
151
+ })
152
+ .join('\n');
153
+ return `<?php
154
+ // InstantCMS 2. ${name} language file
155
+
156
+ return [
157
+ ${langEntries}
158
+ ];
159
+ `;
160
+ }
161
+ /**
162
+ * Generates cron job files for an InstantCMS addon
163
+ *
164
+ * @param opts - Configuration options for the cron job
165
+ * @returns Object containing generated files and metadata
166
+ *
167
+ * @example
168
+ * ```typescript
169
+ * const result = scaffoldCron({
170
+ * addon_name: 'my_component',
171
+ * tasks: [
172
+ * { name: 'cleanup', schedule: { minute: '0', hour: '*' }, action: 'taskCleanup' }
173
+ * ]
174
+ * });
175
+ * ```
176
+ */
177
+ function scaffoldCron(opts) {
178
+ const { lowercase } = (0, scaffold_1.normalizeAddonName)(opts.addon_name);
179
+ const { UpperCamelCase } = (0, scaffold_1.normalizeAddonName)(opts.addon_name);
180
+ const uppercase = lowercase.toUpperCase();
181
+ const files = {};
182
+ const ctrl = `package/system/controllers/${lowercase}`;
183
+ files[`${ctrl}/cron.php`] = generateCronMain(lowercase, UpperCamelCase, opts.tasks, opts.options);
184
+ files[`${ctrl}/manifest.xml`] = generateManifest(lowercase, UpperCamelCase, opts.tasks);
185
+ files[`package/system/languages/ru/controllers/${lowercase}/${lowercase}.php`] = generateLang(lowercase, uppercase, opts.tasks);
186
+ return {
187
+ addon_name: lowercase,
188
+ tasks_count: opts.tasks.length,
189
+ files,
190
+ tasks: opts.tasks.map(t => ({
191
+ name: t.name,
192
+ schedule: formatSchedule(t.schedule),
193
+ action: t.action,
194
+ description: t.description,
195
+ })),
196
+ };
197
+ }