@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.
- package/LICENSE +21 -0
- package/README.md +308 -0
- package/dist/__tests__/artifact-tool.test.js +196 -0
- package/dist/__tests__/db-tool.test.js +152 -0
- package/dist/__tests__/define-tool.test.js +106 -0
- package/dist/__tests__/find-tool.test.js +185 -0
- package/dist/__tests__/get-component-api.test.js +144 -0
- package/dist/__tests__/hardening.test.js +73 -0
- package/dist/__tests__/hooks-tool.test.js +173 -0
- package/dist/__tests__/mcp-integration-extra.test.js +166 -0
- package/dist/__tests__/mcp-integration.test.js +53 -0
- package/dist/__tests__/pagination.test.js +114 -0
- package/dist/__tests__/performance-baseline.test.js +56 -0
- package/dist/__tests__/project-patch.test.js +144 -0
- package/dist/__tests__/project-source.test.js +44 -0
- package/dist/__tests__/project-workflows-extra.test.js +165 -0
- package/dist/__tests__/project-workflows.test.js +51 -0
- package/dist/__tests__/scaffold-addon-roundtrip.test.js +287 -0
- package/dist/__tests__/serialization.test.js +170 -0
- package/dist/__tests__/source-knowledge-parsers.test.js +42 -0
- package/dist/__tests__/template-development.test.js +78 -0
- package/dist/__tests__/template-productivity.test.js +87 -0
- package/dist/__tests__/tools.test.js +2143 -0
- package/dist/data/components.js +2818 -0
- package/dist/data/controllers-map.js +7571 -0
- package/dist/data/core-api.js +9356 -0
- package/dist/data/database-schema.js +4555 -0
- package/dist/data/events-map.js +1339 -0
- package/dist/data/fields-map.js +3692 -0
- package/dist/data/hooks.js +2257 -0
- package/dist/data/js-api.js +123 -0
- package/dist/data/libs-api.js +264 -0
- package/dist/data/routes-map.js +203 -0
- package/dist/data/schemas-validation.js +255 -0
- package/dist/data/schemas.js +1404 -0
- package/dist/data/traits-map.js +1004 -0
- package/dist/data/version-profiles.js +41 -0
- package/dist/data/widgets-map.js +131 -0
- package/dist/data/wysiwyg-map.js +486 -0
- package/dist/generated/components-source.js +14748 -0
- package/dist/generated/hooks-source.js +3399 -0
- package/dist/generated/knowledge-meta.js +101 -0
- package/dist/index.js +13 -0
- package/dist/registry/database-tools.js +112 -0
- package/dist/registry/extension-tools.js +473 -0
- package/dist/registry/generator-tools.js +506 -0
- package/dist/registry/knowledge-tools.js +441 -0
- package/dist/registry/language-tools.js +99 -0
- package/dist/registry/meta-tools.js +152 -0
- package/dist/registry/project-tools.js +48 -0
- package/dist/registry/resources.js +98 -0
- package/dist/registry/source-tools.js +211 -0
- package/dist/registry/template-development-tools.js +79 -0
- package/dist/server.js +32 -0
- package/dist/tools/addon-tool.js +1437 -0
- package/dist/tools/admin-partial-tool.js +498 -0
- package/dist/tools/api-tool.js +294 -0
- package/dist/tools/artifact-tool.js +95 -0
- package/dist/tools/cache-tool.js +360 -0
- package/dist/tools/component-tool.js +415 -0
- package/dist/tools/controllers-tool.js +125 -0
- package/dist/tools/cron-tool.js +197 -0
- package/dist/tools/crud-tool.js +659 -0
- package/dist/tools/db-tool.js +198 -0
- package/dist/tools/email-tool.js +222 -0
- package/dist/tools/external-api-tool.js +596 -0
- package/dist/tools/filter-tool.js +341 -0
- package/dist/tools/form-tool.js +275 -0
- package/dist/tools/grid-tool.js +189 -0
- package/dist/tools/hooks-tool.js +104 -0
- package/dist/tools/import-export-tool.js +548 -0
- package/dist/tools/lang-tool.js +251 -0
- package/dist/tools/layout-override-tool.js +125 -0
- package/dist/tools/layout-tool.js +548 -0
- package/dist/tools/maria-tool.js +127 -0
- package/dist/tools/mariadb.js +201 -0
- package/dist/tools/migration-tool.js +329 -0
- package/dist/tools/oauth-tool.js +520 -0
- package/dist/tools/parser/components-parser.js +76 -0
- package/dist/tools/parser/controllers-parser.js +313 -0
- package/dist/tools/parser/core-parser.js +294 -0
- package/dist/tools/parser/coverage-generator.js +424 -0
- package/dist/tools/parser/events-parser.js +127 -0
- package/dist/tools/parser/fields-parser.js +382 -0
- package/dist/tools/parser/hooks-parser.js +106 -0
- package/dist/tools/parser/sql-parser.js +197 -0
- package/dist/tools/parser/traits-parser.js +161 -0
- package/dist/tools/parser/widgets-parser.js +150 -0
- package/dist/tools/permission-tool.js +348 -0
- package/dist/tools/project-patch-tool.js +73 -0
- package/dist/tools/project-source-tool.js +188 -0
- package/dist/tools/project-workflow-tool.js +186 -0
- package/dist/tools/requirement-tool.js +212 -0
- package/dist/tools/scaffold-tool.js +815 -0
- package/dist/tools/seo-tool.js +412 -0
- package/dist/tools/source-tool.js +155 -0
- package/dist/tools/template-development-tool.js +271 -0
- package/dist/tools/template-overrides-tool.js +294 -0
- package/dist/tools/template-productivity-tool.js +319 -0
- package/dist/tools/template-tool.js +665 -0
- package/dist/tools/test-tool.js +183 -0
- package/dist/tools/webhook-tool.js +427 -0
- package/dist/tools/widget-tool.js +331 -0
- package/dist/tools/wysiwyg-tool.js +137 -0
- package/dist/types/scaffold.js +68 -0
- package/dist/utils/define-tool.js +37 -0
- package/dist/utils/find-tool.js +97 -0
- package/dist/utils/mcp-result.js +18 -0
- package/dist/utils/pagination.js +27 -0
- package/dist/utils/serialization.js +27 -0
- package/package.json +94 -0
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerExtensionTools = registerExtensionTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const wysiwyg_tool_js_1 = require("../tools/wysiwyg-tool.js");
|
|
6
|
+
const permission_tool_js_1 = require("../tools/permission-tool.js");
|
|
7
|
+
const filter_tool_js_1 = require("../tools/filter-tool.js");
|
|
8
|
+
const seo_tool_js_1 = require("../tools/seo-tool.js");
|
|
9
|
+
const import_export_tool_js_1 = require("../tools/import-export-tool.js");
|
|
10
|
+
const cache_tool_js_1 = require("../tools/cache-tool.js");
|
|
11
|
+
const webhook_tool_js_1 = require("../tools/webhook-tool.js");
|
|
12
|
+
const external_api_tool_js_1 = require("../tools/external-api-tool.js");
|
|
13
|
+
const oauth_tool_js_1 = require("../tools/oauth-tool.js");
|
|
14
|
+
const component_tool_js_1 = require("../tools/component-tool.js");
|
|
15
|
+
const widget_tool_js_1 = require("../tools/widget-tool.js");
|
|
16
|
+
const template_tool_js_1 = require("../tools/template-tool.js");
|
|
17
|
+
function registerExtensionTools(server) {
|
|
18
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
19
|
+
// WYSIWYG EDITORS TOOLS
|
|
20
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
21
|
+
// ── 43. Список WYSIWYG редакторов ─────────────────────────────────────
|
|
22
|
+
server.tool('list_wysiwyg_editors', 'Список всех доступных WYSIWYG редакторов: ace (редактор кода), markitup (разметка), redactor (Imperavi), tinymce.', {}, async () => {
|
|
23
|
+
const result = (0, wysiwyg_tool_js_1.listWysiwygEditors)();
|
|
24
|
+
return {
|
|
25
|
+
content: [
|
|
26
|
+
{
|
|
27
|
+
type: 'text',
|
|
28
|
+
text: JSON.stringify(result, null, 2),
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
// ── 40. Информация о WYSIWYG редакторе ───────────────────────────────
|
|
34
|
+
server.tool('get_wysiwyg_editor', 'Подробная информация о WYSIWYG редакторе: класс, файл, опции, плагины, кнопки, пример использования.', {
|
|
35
|
+
name: zod_1.z.string().describe('Имя редактора: ace, markitup, redactor, tinymce'),
|
|
36
|
+
}, async ({ name }) => {
|
|
37
|
+
const result = (0, wysiwyg_tool_js_1.getWysiwygEditor)(name);
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text',
|
|
42
|
+
text: JSON.stringify(result, null, 2),
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
// ── 41. Опции WYSIWYG редактора ──────────────────────────────────────
|
|
48
|
+
server.tool('get_wysiwyg_options', 'Список всех настроек WYSIWYG редактора с типами, описаниями и значениями по умолчанию.', {
|
|
49
|
+
name: zod_1.z.string().describe('Имя редактора: ace, markitup, redactor, tinymce'),
|
|
50
|
+
}, async ({ name }) => {
|
|
51
|
+
const result = (0, wysiwyg_tool_js_1.getWysiwygOptions)(name);
|
|
52
|
+
return {
|
|
53
|
+
content: [
|
|
54
|
+
{
|
|
55
|
+
type: 'text',
|
|
56
|
+
text: JSON.stringify(result, null, 2),
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
// ── 42. Плагины WYSIWYG редактора ────────────────────────────────────
|
|
62
|
+
server.tool('get_wysiwyg_plugins', 'Список плагинов WYSIWYG редактора. Redactor и TinyMCE поддерживают плагины.', {
|
|
63
|
+
name: zod_1.z.string().describe('Имя редактора: ace, markitup, redactor, tinymce'),
|
|
64
|
+
}, async ({ name }) => {
|
|
65
|
+
const result = (0, wysiwyg_tool_js_1.getWysiwygPlugins)(name);
|
|
66
|
+
return {
|
|
67
|
+
content: [
|
|
68
|
+
{
|
|
69
|
+
type: 'text',
|
|
70
|
+
text: JSON.stringify(result, null, 2),
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
// ── 43. Поиск WYSIWYG редакторов ─────────────────────────────────────
|
|
76
|
+
server.tool('search_wysiwyg_editors', 'Поиск WYSIWYG редакторов по описанию, функциям или плагинам.', {
|
|
77
|
+
query: zod_1.z.string().describe("Поисковый запрос. Пример: 'код', 'видео', 'смайлы'"),
|
|
78
|
+
}, async ({ query }) => {
|
|
79
|
+
const result = (0, wysiwyg_tool_js_1.searchWysiwygEditors)(query);
|
|
80
|
+
return {
|
|
81
|
+
content: [
|
|
82
|
+
{
|
|
83
|
+
type: 'text',
|
|
84
|
+
text: JSON.stringify(result, null, 2),
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
// ── 44. Кнопки WYSIWYG редактора ─────────────────────────────────────
|
|
90
|
+
server.tool('get_wysiwyg_buttons', 'Список кнопок тулбара WYSIWYG редактора. Для markitup возвращает объекты с настройками (openWith, closeWith).', {
|
|
91
|
+
name: zod_1.z.string().describe('Имя редактора: ace, markitup, redactor, tinymce'),
|
|
92
|
+
}, async ({ name }) => {
|
|
93
|
+
const result = (0, wysiwyg_tool_js_1.getWysiwygButtons)(name);
|
|
94
|
+
return {
|
|
95
|
+
content: [
|
|
96
|
+
{
|
|
97
|
+
type: 'text',
|
|
98
|
+
text: JSON.stringify(result, null, 2),
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
// ── 45. Система прав доступа ────────────────────────────────────────────
|
|
104
|
+
server.tool('scaffold_permission', 'Генерация системы прав доступа для дополнения InstantCMS с настройкой ролей и проверкой владельца', {
|
|
105
|
+
name: zod_1.z
|
|
106
|
+
.string()
|
|
107
|
+
.regex(/^[a-z][a-z0-9_]*$/)
|
|
108
|
+
.describe('Системное имя (латинница, snake_case)'),
|
|
109
|
+
title: zod_1.z.string().describe('Название дополнения'),
|
|
110
|
+
description: zod_1.z.string().optional().describe('Описание'),
|
|
111
|
+
controller: zod_1.z.string().optional().describe('Имя контроллера'),
|
|
112
|
+
permissions: zod_1.z
|
|
113
|
+
.array(zod_1.z.enum(['view', 'add', 'edit', 'delete', 'publish', 'moderate', 'admin']))
|
|
114
|
+
.optional()
|
|
115
|
+
.describe('Список разрешений'),
|
|
116
|
+
category: zod_1.z.string().optional().describe('Категория прав'),
|
|
117
|
+
options: zod_1.z
|
|
118
|
+
.object({
|
|
119
|
+
withCategories: zod_1.z.boolean().optional().describe('С категориями'),
|
|
120
|
+
withOwnership: zod_1.z.boolean().optional().describe('Проверка владельца'),
|
|
121
|
+
withRoles: zod_1.z.boolean().optional().describe('С ролями'),
|
|
122
|
+
})
|
|
123
|
+
.optional()
|
|
124
|
+
.describe('Дополнительные опции'),
|
|
125
|
+
}, async (opts) => {
|
|
126
|
+
const result = (0, permission_tool_js_1.scaffoldPermission)(opts);
|
|
127
|
+
return {
|
|
128
|
+
content: [
|
|
129
|
+
{
|
|
130
|
+
type: 'text',
|
|
131
|
+
text: JSON.stringify(result, null, 2),
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
// ── 46. Система фильтрации контента ─────────────────────────────────────
|
|
137
|
+
server.tool('scaffold_filter', 'Генерация системы фильтрации контента с поддержкой различных типов фильтров', {
|
|
138
|
+
addon_name: zod_1.z.string().describe('Имя дополнения'),
|
|
139
|
+
fields: zod_1.z
|
|
140
|
+
.array(zod_1.z.object({
|
|
141
|
+
field: zod_1.z.string().describe('Имя поля в БД'),
|
|
142
|
+
type: zod_1.z
|
|
143
|
+
.enum(['text', 'select', 'multiselect', 'checkbox', 'range', 'date', 'daterange'])
|
|
144
|
+
.describe('Тип фильтра'),
|
|
145
|
+
label: zod_1.z.string().optional().describe('Название поля'),
|
|
146
|
+
options: zod_1.z
|
|
147
|
+
.array(zod_1.z.object({ value: zod_1.z.string(), label: zod_1.z.string() }))
|
|
148
|
+
.optional()
|
|
149
|
+
.describe('Опции для select/multiselect'),
|
|
150
|
+
placeholder: zod_1.z.string().optional().describe('Placeholder'),
|
|
151
|
+
}))
|
|
152
|
+
.describe('Поля фильтра'),
|
|
153
|
+
options: zod_1.z
|
|
154
|
+
.object({
|
|
155
|
+
use_ajax: zod_1.z.boolean().optional().describe('AJAX фильтрация'),
|
|
156
|
+
use_url_params: zod_1.z.boolean().optional().describe('Параметры в URL'),
|
|
157
|
+
save_filters: zod_1.z.boolean().optional().describe('Сохранение фильтров'),
|
|
158
|
+
})
|
|
159
|
+
.optional()
|
|
160
|
+
.describe('Опции'),
|
|
161
|
+
}, async (opts) => {
|
|
162
|
+
const result = (0, filter_tool_js_1.scaffoldFilter)(opts);
|
|
163
|
+
return {
|
|
164
|
+
content: [
|
|
165
|
+
{
|
|
166
|
+
type: 'text',
|
|
167
|
+
text: JSON.stringify(result, null, 2),
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
// ── 47. SEO мета-теги и sitemap ─────────────────────────────────────────
|
|
173
|
+
server.tool('scaffold_seo', 'Генерация SEO мета-тегов, Open Graph разметки и sitemap для InstantCMS', {
|
|
174
|
+
addon_name: zod_1.z.string().describe('Имя дополнения'),
|
|
175
|
+
fields: zod_1.z
|
|
176
|
+
.array(zod_1.z.object({
|
|
177
|
+
field: zod_1.z.string().describe('Имя поля'),
|
|
178
|
+
type: zod_1.z
|
|
179
|
+
.enum(['title', 'description', 'keywords', 'og_image', 'canonical', 'robots'])
|
|
180
|
+
.describe('Тип поля'),
|
|
181
|
+
value: zod_1.z.string().optional().describe('Шаблон значения'),
|
|
182
|
+
}))
|
|
183
|
+
.optional()
|
|
184
|
+
.describe('Поля SEO'),
|
|
185
|
+
options: zod_1.z
|
|
186
|
+
.object({
|
|
187
|
+
auto_generation: zod_1.z.boolean().optional().describe('Автогенерация мета-тегов'),
|
|
188
|
+
use_sitemap: zod_1.z.boolean().optional().describe('Использовать sitemap'),
|
|
189
|
+
use_og_tags: zod_1.z.boolean().optional().describe('Open Graph теги'),
|
|
190
|
+
use_schema_org: zod_1.z.boolean().optional().describe('Schema.org разметка'),
|
|
191
|
+
})
|
|
192
|
+
.optional()
|
|
193
|
+
.describe('Опции'),
|
|
194
|
+
}, async (opts) => {
|
|
195
|
+
const result = (0, seo_tool_js_1.scaffoldSeo)(opts);
|
|
196
|
+
return {
|
|
197
|
+
content: [
|
|
198
|
+
{
|
|
199
|
+
type: 'text',
|
|
200
|
+
text: JSON.stringify(result, null, 2),
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
// ── 48. Импорт/экспорт данных ─────────────────────────────────────────────
|
|
206
|
+
server.tool('scaffold_import_export', 'Генерация системы импорта/экспорта данных с поддержкой CSV, Excel, JSON, XML', {
|
|
207
|
+
addon_name: zod_1.z.string().describe('Имя дополнения'),
|
|
208
|
+
fields: zod_1.z
|
|
209
|
+
.array(zod_1.z.object({
|
|
210
|
+
field: zod_1.z.string().describe('Имя поля'),
|
|
211
|
+
type: zod_1.z
|
|
212
|
+
.enum([
|
|
213
|
+
'string',
|
|
214
|
+
'text',
|
|
215
|
+
'number',
|
|
216
|
+
'date',
|
|
217
|
+
'datetime',
|
|
218
|
+
'bool',
|
|
219
|
+
'select',
|
|
220
|
+
'image',
|
|
221
|
+
'file',
|
|
222
|
+
])
|
|
223
|
+
.describe('Тип поля'),
|
|
224
|
+
label: zod_1.z.string().optional().describe('Название в CSV/заголовке'),
|
|
225
|
+
required: zod_1.z.boolean().optional().describe('Обязательное'),
|
|
226
|
+
default: zod_1.z.string().optional().describe('Значение по умолчанию'),
|
|
227
|
+
}))
|
|
228
|
+
.optional()
|
|
229
|
+
.describe('Поля для импорта/экспорта'),
|
|
230
|
+
options: zod_1.z
|
|
231
|
+
.object({
|
|
232
|
+
use_csv: zod_1.z.boolean().optional().describe('Поддержка CSV'),
|
|
233
|
+
use_xlsx: zod_1.z.boolean().optional().describe('Поддержка Excel'),
|
|
234
|
+
use_json: zod_1.z.boolean().optional().describe('Поддержка JSON API'),
|
|
235
|
+
use_xml: zod_1.z.boolean().optional().describe('Поддержка XML'),
|
|
236
|
+
batch_size: zod_1.z.number().optional().describe('Размер батча'),
|
|
237
|
+
skip_header: zod_1.z.boolean().optional().describe('Пропускать заголовки'),
|
|
238
|
+
update_existing: zod_1.z.boolean().optional().describe('Обновлять существующие'),
|
|
239
|
+
})
|
|
240
|
+
.optional()
|
|
241
|
+
.describe('Опции'),
|
|
242
|
+
}, async (opts) => {
|
|
243
|
+
const result = (0, import_export_tool_js_1.scaffoldImportExport)(opts);
|
|
244
|
+
return {
|
|
245
|
+
content: [
|
|
246
|
+
{
|
|
247
|
+
type: 'text',
|
|
248
|
+
text: JSON.stringify(result, null, 2),
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
// ── 49. Система кэширования ──────────────────────────────────────────────
|
|
254
|
+
server.tool('scaffold_cache', 'Генерация системы кэширования для InstantCMS с поддержкой тегов и различных бэкендов', {
|
|
255
|
+
addon_name: zod_1.z.string().describe('Имя дополнения'),
|
|
256
|
+
options: zod_1.z
|
|
257
|
+
.object({
|
|
258
|
+
use_memcached: zod_1.z.boolean().optional().describe('Использовать Memcached'),
|
|
259
|
+
use_redis: zod_1.z.boolean().optional().describe('Использовать Redis'),
|
|
260
|
+
default_ttl: zod_1.z.number().optional().describe('TTL по умолчанию (секунды)'),
|
|
261
|
+
use_tags: zod_1.z.boolean().optional().describe('Использовать теги кэша'),
|
|
262
|
+
})
|
|
263
|
+
.optional()
|
|
264
|
+
.describe('Опции'),
|
|
265
|
+
}, async (opts) => {
|
|
266
|
+
const result = (0, cache_tool_js_1.scaffoldCache)(opts);
|
|
267
|
+
return {
|
|
268
|
+
content: [
|
|
269
|
+
{
|
|
270
|
+
type: 'text',
|
|
271
|
+
text: JSON.stringify(result, null, 2),
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
};
|
|
275
|
+
});
|
|
276
|
+
// ── 50. Система веб-хуков ──────────────────────────────────────────────
|
|
277
|
+
server.tool('scaffold_webhook', 'Генерация системы веб-хуков для InstantCMS с поддержкой подписи и повторных попыток', {
|
|
278
|
+
addon_name: zod_1.z.string().describe('Имя дополнения'),
|
|
279
|
+
events: zod_1.z.array(zod_1.z.string()).describe('События для обработки'),
|
|
280
|
+
options: zod_1.z
|
|
281
|
+
.object({
|
|
282
|
+
use_signature: zod_1.z.boolean().optional().describe('Проверка подписи'),
|
|
283
|
+
use_retry: zod_1.z.boolean().optional().describe('Повтор при ошибках'),
|
|
284
|
+
retry_count: zod_1.z.number().optional().describe('Количество попыток'),
|
|
285
|
+
async_execution: zod_1.z.boolean().optional().describe('Асинхронное выполнение'),
|
|
286
|
+
})
|
|
287
|
+
.optional()
|
|
288
|
+
.describe('Опции'),
|
|
289
|
+
}, async (opts) => {
|
|
290
|
+
const result = (0, webhook_tool_js_1.scaffoldWebhook)(opts);
|
|
291
|
+
return {
|
|
292
|
+
content: [
|
|
293
|
+
{
|
|
294
|
+
type: 'text',
|
|
295
|
+
text: JSON.stringify(result, null, 2),
|
|
296
|
+
},
|
|
297
|
+
],
|
|
298
|
+
};
|
|
299
|
+
});
|
|
300
|
+
// ── 51. Клиент внешнего API ──────────────────────────────────────────────
|
|
301
|
+
server.tool('scaffold_external_api', 'Генерация клиента для внешнего API с поддержкой авторизации, rate limiting и кэширования', {
|
|
302
|
+
addon_name: zod_1.z.string().describe('Имя дополнения'),
|
|
303
|
+
base_url: zod_1.z.string().describe('Базовый URL API'),
|
|
304
|
+
endpoints: zod_1.z
|
|
305
|
+
.array(zod_1.z.object({
|
|
306
|
+
path: zod_1.z.string().describe('Путь эндпоинта'),
|
|
307
|
+
method: zod_1.z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).describe('HTTP метод'),
|
|
308
|
+
description: zod_1.z.string().optional().describe('Описание'),
|
|
309
|
+
}))
|
|
310
|
+
.describe('Эндпоинты API'),
|
|
311
|
+
options: zod_1.z
|
|
312
|
+
.object({
|
|
313
|
+
use_auth: zod_1.z.boolean().optional().describe('Использовать авторизацию'),
|
|
314
|
+
auth_type: zod_1.z
|
|
315
|
+
.enum(['api_key', 'bearer', 'basic', 'oauth2'])
|
|
316
|
+
.optional()
|
|
317
|
+
.describe('Тип авторизации'),
|
|
318
|
+
timeout: zod_1.z.number().optional().describe('Таймаут запроса'),
|
|
319
|
+
use_rate_limit: zod_1.z.boolean().optional().describe('Ограничение запросов'),
|
|
320
|
+
rate_limit: zod_1.z.number().optional().describe('Макс. запросов в минуту'),
|
|
321
|
+
use_cache: zod_1.z.boolean().optional().describe('Кэширование ответов'),
|
|
322
|
+
})
|
|
323
|
+
.optional()
|
|
324
|
+
.describe('Опции'),
|
|
325
|
+
}, async (opts) => {
|
|
326
|
+
const result = (0, external_api_tool_js_1.scaffoldExternalApi)(opts);
|
|
327
|
+
return {
|
|
328
|
+
content: [
|
|
329
|
+
{
|
|
330
|
+
type: 'text',
|
|
331
|
+
text: JSON.stringify(result, null, 2),
|
|
332
|
+
},
|
|
333
|
+
],
|
|
334
|
+
};
|
|
335
|
+
});
|
|
336
|
+
// ── 52. OAuth авторизация ────────────────────────────────────────────────
|
|
337
|
+
server.tool('scaffold_oauth', 'Генерация OAuth авторизации для InstantCMS с поддержкой различных провайдеров', {
|
|
338
|
+
addon_name: zod_1.z.string().describe('Имя дополнения'),
|
|
339
|
+
providers: zod_1.z
|
|
340
|
+
.array(zod_1.z.object({
|
|
341
|
+
name: zod_1.z.string().describe('Имя провайдера (google, vkontakte и т.д.)'),
|
|
342
|
+
client_id: zod_1.z.string().describe('Client ID'),
|
|
343
|
+
client_secret: zod_1.z.string().describe('Client Secret'),
|
|
344
|
+
auth_url: zod_1.z.string().describe('URL авторизации'),
|
|
345
|
+
token_url: zod_1.z.string().describe('URL для получения токена'),
|
|
346
|
+
scopes: zod_1.z.array(zod_1.z.string()).optional().describe('Scopes'),
|
|
347
|
+
}))
|
|
348
|
+
.describe('OAuth провайдеры'),
|
|
349
|
+
options: zod_1.z
|
|
350
|
+
.object({
|
|
351
|
+
use_refresh_token: zod_1.z.boolean().optional().describe('Использовать refresh token'),
|
|
352
|
+
store_tokens_in_db: zod_1.z.boolean().optional().describe('Хранить токены в БД'),
|
|
353
|
+
PKCE_support: zod_1.z.boolean().optional().describe('Поддержка PKCE'),
|
|
354
|
+
})
|
|
355
|
+
.optional()
|
|
356
|
+
.describe('Опции'),
|
|
357
|
+
}, async (opts) => {
|
|
358
|
+
const result = (0, oauth_tool_js_1.scaffoldOAuth)(opts);
|
|
359
|
+
return {
|
|
360
|
+
content: [
|
|
361
|
+
{
|
|
362
|
+
type: 'text',
|
|
363
|
+
text: JSON.stringify(result, null, 2),
|
|
364
|
+
},
|
|
365
|
+
],
|
|
366
|
+
};
|
|
367
|
+
});
|
|
368
|
+
// ── 53. Генерация компонента ───────────────────────────────────────────
|
|
369
|
+
server.tool('scaffold_component', 'Генерация полного компонента InstantCMS с backend, frontend, model', {
|
|
370
|
+
addon_name: zod_1.z.string().describe('Имя компонента'),
|
|
371
|
+
controllers: zod_1.z
|
|
372
|
+
.array(zod_1.z.object({
|
|
373
|
+
name: zod_1.z.string().describe('Имя контроллера'),
|
|
374
|
+
actions: zod_1.z.array(zod_1.z.string()).describe('Экшены'),
|
|
375
|
+
use_model: zod_1.z.boolean().optional().describe('Использовать модель'),
|
|
376
|
+
}))
|
|
377
|
+
.optional()
|
|
378
|
+
.describe('Контроллеры'),
|
|
379
|
+
options: zod_1.z
|
|
380
|
+
.object({
|
|
381
|
+
with_frontend: zod_1.z.boolean().optional().describe('С frontend'),
|
|
382
|
+
with_admin: zod_1.z.boolean().optional().describe('С админкой'),
|
|
383
|
+
with_model: zod_1.z.boolean().optional().describe('С моделью'),
|
|
384
|
+
with_routes: zod_1.z.boolean().optional().describe('С роутами'),
|
|
385
|
+
with_menu: zod_1.z.boolean().optional().describe('С меню'),
|
|
386
|
+
})
|
|
387
|
+
.optional()
|
|
388
|
+
.describe('Опции'),
|
|
389
|
+
}, async (opts) => {
|
|
390
|
+
const result = (0, component_tool_js_1.scaffoldComponent)(opts);
|
|
391
|
+
return {
|
|
392
|
+
content: [
|
|
393
|
+
{
|
|
394
|
+
type: 'text',
|
|
395
|
+
text: JSON.stringify(result, null, 2),
|
|
396
|
+
},
|
|
397
|
+
],
|
|
398
|
+
};
|
|
399
|
+
});
|
|
400
|
+
// ── 54. Генерация виджета ──────────────────────────────────────────────
|
|
401
|
+
server.tool('scaffold_widget', 'Генерация виджета InstantCMS с настройками и шаблонами', {
|
|
402
|
+
addon_name: zod_1.z.string().describe('Имя компонента'),
|
|
403
|
+
widget_name: zod_1.z.string().describe('Имя виджета'),
|
|
404
|
+
options: zod_1.z
|
|
405
|
+
.array(zod_1.z.object({
|
|
406
|
+
name: zod_1.z.string().describe('Имя опции'),
|
|
407
|
+
type: zod_1.z
|
|
408
|
+
.enum(['text', 'number', 'select', 'checkbox', 'textarea', 'image'])
|
|
409
|
+
.describe('Тип поля'),
|
|
410
|
+
label: zod_1.z.string().describe('Название'),
|
|
411
|
+
options: zod_1.z
|
|
412
|
+
.array(zod_1.z.object({ value: zod_1.z.string(), label: zod_1.z.string() }))
|
|
413
|
+
.optional()
|
|
414
|
+
.describe('Опции для select'),
|
|
415
|
+
default: zod_1.z
|
|
416
|
+
.union([zod_1.z.string(), zod_1.z.boolean(), zod_1.z.number()])
|
|
417
|
+
.optional()
|
|
418
|
+
.describe('Значение по умолчанию'),
|
|
419
|
+
}))
|
|
420
|
+
.optional()
|
|
421
|
+
.describe('Опции виджета'),
|
|
422
|
+
options_config: zod_1.z
|
|
423
|
+
.object({
|
|
424
|
+
with_template: zod_1.z.boolean().optional().describe('С шаблоном'),
|
|
425
|
+
with_styles: zod_1.z.boolean().optional().describe('Со стилями'),
|
|
426
|
+
with_cache: zod_1.z.boolean().optional().describe('С кэшированием'),
|
|
427
|
+
})
|
|
428
|
+
.optional()
|
|
429
|
+
.describe('Конфигурация'),
|
|
430
|
+
}, async (opts) => {
|
|
431
|
+
const result = (0, widget_tool_js_1.scaffoldWidget)(opts);
|
|
432
|
+
return {
|
|
433
|
+
content: [
|
|
434
|
+
{
|
|
435
|
+
type: 'text',
|
|
436
|
+
text: JSON.stringify(result, null, 2),
|
|
437
|
+
},
|
|
438
|
+
],
|
|
439
|
+
};
|
|
440
|
+
});
|
|
441
|
+
// ── 55. Генерация темы шаблона ─────────────────────────────────────────
|
|
442
|
+
server.tool('scaffold_template_theme', 'Генерация темы шаблона InstantCMS с layout, стилями и поддержкой dark mode', {
|
|
443
|
+
template_name: zod_1.z.string().describe('Имя шаблона'),
|
|
444
|
+
options: zod_1.z
|
|
445
|
+
.object({
|
|
446
|
+
with_layout: zod_1.z.boolean().optional().describe('С layout.yaml'),
|
|
447
|
+
with_responsive: zod_1.z.boolean().optional().describe('Адаптивный дизайн'),
|
|
448
|
+
with_dark_mode: zod_1.z.boolean().optional().describe('Тёмная тема'),
|
|
449
|
+
withRTL: zod_1.z.boolean().optional().describe('RTL поддержка'),
|
|
450
|
+
})
|
|
451
|
+
.optional()
|
|
452
|
+
.describe('Опции'),
|
|
453
|
+
layout_blocks: zod_1.z
|
|
454
|
+
.array(zod_1.z.object({
|
|
455
|
+
name: zod_1.z.string().describe('Название блока'),
|
|
456
|
+
position: zod_1.z.string().describe('Позиция виджетов'),
|
|
457
|
+
class: zod_1.z.string().optional().describe('CSS класс'),
|
|
458
|
+
}))
|
|
459
|
+
.optional()
|
|
460
|
+
.describe('Блоки layout'),
|
|
461
|
+
}, async (opts) => {
|
|
462
|
+
const result = (0, template_tool_js_1.scaffoldTemplate)(opts);
|
|
463
|
+
return {
|
|
464
|
+
content: [
|
|
465
|
+
{
|
|
466
|
+
type: 'text',
|
|
467
|
+
text: JSON.stringify(result, null, 2),
|
|
468
|
+
},
|
|
469
|
+
],
|
|
470
|
+
};
|
|
471
|
+
});
|
|
472
|
+
// RESOURCES (статичные данные для контекста)
|
|
473
|
+
}
|