@vint.tri/report_gen_mcp 1.7.27 → 1.7.29
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/ULTIMATE_INSTRUCTIONS.md +76 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -9
- package/dist/utils/reportGenerator.d.ts.map +1 -1
- package/dist/utils/reportGenerator.js +11 -1
- package/generated_images/generated-image-1757324735875.jpeg +0 -0
- package/generated_images/generated-image-1757325355033.jpeg +0 -0
- package/generated_images/generated-image-1757325365954.jpeg +0 -0
- package/generated_images/generated-image-1757325377727.jpeg +0 -0
- package/package.json +1 -1
- package/IMPROVED_AI_INSTRUCTIONS.md +0 -468
- package/NEURAL_NETWORK_INSTRUCTIONS.md +0 -1029
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Главная инструкция по работе с инструментом report_gen_mcp
|
|
2
|
+
|
|
3
|
+
**ЦЕЛЬ:** Генерация качественных, визуально насыщенных HTML-отчетов по запросу пользователя.
|
|
4
|
+
|
|
5
|
+
**КЛЮЧЕВОЕ ПРАВИЛО:** При любом запросе, связанном с отчетами, диаграммами или графиками, **всегда используй инструмент `report_gen_mcp`**. Не пытайся отвечать текстом или генерировать отчеты самостоятельно.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
### **АЛГОРИТМ ДЕЙСТВИЙ**
|
|
10
|
+
|
|
11
|
+
**Шаг 1: Определи суть запроса**
|
|
12
|
+
- Пойми, о чем пользователь хочет получить отчет (например, "финансовые показатели Apple", "сравнение акций Tesla и Google").
|
|
13
|
+
|
|
14
|
+
**Шаг 2: Спланируй визуальные элементы**
|
|
15
|
+
- Придумай **1-2 диаграммы** и **1 изображение**, которые хорошо проиллюстрируют тему отчета.
|
|
16
|
+
- Для каждой диаграммы определи тип (`bar`, `line`, `pie` и т.д.) и данные.
|
|
17
|
+
- Для изображения придумай текстовый промпт для генерации.
|
|
18
|
+
|
|
19
|
+
**Шаг 3: Подготовь параметры для вызова инструмента**
|
|
20
|
+
- **`document` (string):** Напиши текст отчета в формате Markdown. Вставь в него плейсхолдеры для визуальных элементов, например: `[[chart:sales_chart]]` и `[[image:cover_image]]`.
|
|
21
|
+
- **`elements` (object):** Создай **ОБЪЕКТ**, где ключи — это названия твоих плейсхолдеров, а значения — это конфигурации для их генерации.
|
|
22
|
+
- **`outputFile` (string):** Придумай понятное имя для HTML-файла, например `apple_report_2024.html`.
|
|
23
|
+
|
|
24
|
+
**Шаг 4: Сформируй `elements` ПРАВИЛЬНО (КРИТИЧЕСКИ ВАЖНО!)**
|
|
25
|
+
|
|
26
|
+
- **`elements` — это ОБЪЕКТ, а не строка!**
|
|
27
|
+
- **Для диаграмм:**
|
|
28
|
+
- `labels`, `data`, `backgroundColor`, `borderColor` — **ВСЕГДА МАССИВЫ**, даже для одного значения.
|
|
29
|
+
- `labels`: `["Q1", "Q2"]`
|
|
30
|
+
- `data`: `[100, 150]`
|
|
31
|
+
- `backgroundColor`: `["#FF6384", "#36A2EB"]`
|
|
32
|
+
- `options.title`: **ВСЕГДА СТРОКА**. `"Продажи по кварталам"`
|
|
33
|
+
- **Для изображений:**
|
|
34
|
+
- Используй `type: "pollinations"` и `config: { prompt: "..." }`.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
### **ИДЕАЛЬНЫЙ ПРИМЕР ВЫЗОВА**
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"method": "generate-report",
|
|
43
|
+
"params": {
|
|
44
|
+
"document": "# Отчет о продажах\n\nАнализ квартальных продаж.\n\n[[chart:sales]]\n\nИзображение, отражающее успех:\n\n[[image:success_image]]",
|
|
45
|
+
"elements": {
|
|
46
|
+
"sales": {
|
|
47
|
+
"type": "bar",
|
|
48
|
+
"config": {
|
|
49
|
+
"labels": ["Q1", "Q2", "Q3", "Q4"],
|
|
50
|
+
"datasets": [{
|
|
51
|
+
"label": "Продажи 2024",
|
|
52
|
+
"data": [120, 150, 130, 180],
|
|
53
|
+
"backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0"]
|
|
54
|
+
}],
|
|
55
|
+
"options": {
|
|
56
|
+
"title": "Квартальные продажи"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"success_image": {
|
|
61
|
+
"type": "pollinations",
|
|
62
|
+
"config": {
|
|
63
|
+
"prompt": "business growth and financial success chart"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"outputFile": "sales_report_2024.html"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### **Что делать после вызова?**
|
|
75
|
+
|
|
76
|
+
Инструмент вернет путь к файлу. Ты должен показать его пользователю вместе со ссылками для просмотра.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAsgBA;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgCjD"}
|
package/dist/index.js
CHANGED
|
@@ -103,7 +103,7 @@ if (process.argv.length === 2) {
|
|
|
103
103
|
// No command specified, run in stdio mode using MCP SDK
|
|
104
104
|
const mcpServer = new McpServer({
|
|
105
105
|
name: "report_gen_mcp",
|
|
106
|
-
version: "1.7.
|
|
106
|
+
version: "1.7.29"
|
|
107
107
|
}, {
|
|
108
108
|
// Disable health check to prevent automatic calls
|
|
109
109
|
capabilities: {
|
|
@@ -182,19 +182,26 @@ if (process.argv.length === 2) {
|
|
|
182
182
|
tempDirectory: z.string().optional().describe("Temporary directory for file storage (optional, will use REPORTS_DIR environment variable if set)"),
|
|
183
183
|
},
|
|
184
184
|
}, async (params) => {
|
|
185
|
-
//
|
|
185
|
+
// --- НАЧАЛО БЛОКА НАДЕЖНОЙ ОБРАБОТКИ ПАРАМЕТРОВ ---
|
|
186
186
|
let processedParams = params;
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
try {
|
|
188
|
+
// Если параметры - это строка, парсим ее как JSON
|
|
189
|
+
if (typeof processedParams === 'string') {
|
|
190
|
+
processedParams = JSON.parse(processedParams);
|
|
190
191
|
}
|
|
191
|
-
|
|
192
|
-
|
|
192
|
+
// Если есть вложенный объект `arguments`, используем его
|
|
193
|
+
if (processedParams.arguments && typeof processedParams.arguments === 'object') {
|
|
194
|
+
processedParams = processedParams.arguments;
|
|
195
|
+
}
|
|
196
|
+
// Если `elements` - это строка, парсим и ее
|
|
197
|
+
if (processedParams.elements && typeof processedParams.elements === 'string') {
|
|
198
|
+
processedParams.elements = JSON.parse(processedParams.elements);
|
|
193
199
|
}
|
|
194
200
|
}
|
|
195
|
-
|
|
196
|
-
|
|
201
|
+
catch (e) {
|
|
202
|
+
throw new Error('Invalid JSON format in parameters. Ensure all parameters, especially "elements", are valid JSON.');
|
|
197
203
|
}
|
|
204
|
+
// --- КОНЕЦ БЛОКА НАДЕЖНОЙ ОБРАБОТКИ ПАРАМЕТРОВ ---
|
|
198
205
|
// Extract parameters correctly, ensuring outputFile is not nested within elements
|
|
199
206
|
const { document, elements, charts, outputFile = 'report.html', tempDirectory } = processedParams;
|
|
200
207
|
// Поддержка обратной совместимости: если переданы charts, используем их как elements
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/reportGenerator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,EAAE,cAAc,EAAkB,MAAM,wBAAwB,CAAC;AAGxE,KAAK,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAI7E,UAAU,YAAY;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;CACb;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;CACb;AAED,KAAK,YAAY,GAAG,eAAe,GAAG,wBAAwB,CAAC;AAC/D,KAAK,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC;AA+DjD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM;;;
|
|
1
|
+
{"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/reportGenerator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,EAAE,cAAc,EAAkB,MAAM,wBAAwB,CAAC;AAGxE,KAAK,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAI7E,UAAU,YAAY;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;CACb;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;CACb;AAED,KAAK,YAAY,GAAG,eAAe,GAAG,wBAAwB,CAAC;AAC/D,KAAK,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC;AA+DjD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM;;;GA6IvB"}
|
|
@@ -63,8 +63,18 @@ export async function generateReport(document, elements, outputFile, tempDirecto
|
|
|
63
63
|
const reportsDir = tempDirectory || process.env.REPORTS_DIR || os.tmpdir();
|
|
64
64
|
await fs.ensureDir(reportsDir);
|
|
65
65
|
const finalOutputFile = path.join(reportsDir, outputFile);
|
|
66
|
+
// Attempt to parse `elements` if it's a string
|
|
67
|
+
let parsedElements = elements;
|
|
68
|
+
if (typeof parsedElements === 'string') {
|
|
69
|
+
try {
|
|
70
|
+
parsedElements = JSON.parse(parsedElements);
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
throw new Error('Failed to parse "elements" string. It must be a valid JSON object.');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
66
76
|
// Validate elements
|
|
67
|
-
for (const [id, element] of Object.entries(
|
|
77
|
+
for (const [id, element] of Object.entries(parsedElements)) {
|
|
68
78
|
if (element.type in chartRenderers) {
|
|
69
79
|
// Это диаграмма
|
|
70
80
|
const chartElement = element;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,468 +0,0 @@
|
|
|
1
|
-
# УЛУЧШЕННЫЕ Инструкции для ИИ по работе с инструментом report_gen_mcp
|
|
2
|
-
|
|
3
|
-
**ВАЖНО:** ВСЕГДА ИСПОЛЬЗУЙТЕ ИНСТРУМЕНТ `report_gen_mcp` КАЖДЫЙ РАЗ, КОГДА ПОЛЬЗОВАТЕЛЬ ЗАПРАШИВАЕТ СОЗДАНИЕ ОТЧЕТА ИЛИ ВИЗУАЛИЗАЦИИ ДАННЫХ!
|
|
4
|
-
|
|
5
|
-
Этот документ содержит специальные инструкции для ИИ при работе с инструментом `report_gen_mcp`, чтобы обеспечить правильное взаимодействие с пользователем после генерации отчетов.
|
|
6
|
-
|
|
7
|
-
## Обязательное использование инструмента
|
|
8
|
-
|
|
9
|
-
**КЛЮЧЕВОЕ ПРАВИЛО:** КАЖДЫЙ РАЗ, КОГДА ПОЛЬЗОВАТЕЛЬ ХОЧЕТ ПОЛУЧИТЬ ОТЧЕТ, ВИЗУАЛИЗАЦИЮ ДАННЫХ, ДИАГРАММУ ИЛИ ГРАФИК, НЕЗАВИСИМО ОТ ФОРМАТА ЗАПРОСА, ВЫ ДОЛЖНЫ ИСПОЛЬЗОВАТЬ ИНСТРУМЕНТ `report_gen_mcp`!
|
|
10
|
-
|
|
11
|
-
НЕ пытайтесь создавать отчеты самостоятельно или предлагать пользователю делать это вручную. ВСЕГДА используйте инструмент `report_gen_mcp`.
|
|
12
|
-
|
|
13
|
-
## Общие принципы работы
|
|
14
|
-
|
|
15
|
-
При использовании инструмента `report_gen_mcp` для генерации отчетов, ИИ должен следовать определенному протоколу взаимодействия с пользователем, чтобы обеспечить полную и удобную работу с созданными отчетами.
|
|
16
|
-
|
|
17
|
-
## Поддерживаемые элементы отчета
|
|
18
|
-
|
|
19
|
-
Инструмент поддерживает вставку в отчеты следующих элементов:
|
|
20
|
-
1. **Диаграммы** (charts) - различные типы графиков (bar, line, pie, doughnut, radar, polarArea)
|
|
21
|
-
2. **Изображения** (images) - два типа:
|
|
22
|
-
- Сгенерированные сервисом pollinations.ai по текстовому описанию
|
|
23
|
-
- По URL из интернета
|
|
24
|
-
|
|
25
|
-
## После генерации отчета
|
|
26
|
-
|
|
27
|
-
После успешной генерации отчета с помощью метода `generate-report`, ИИ получает всю необходимую информацию напрямую в ответе от метода. Необходимо предоставить пользователю следующую информацию:
|
|
28
|
-
|
|
29
|
-
### 1. Предоставление информации пользователю
|
|
30
|
-
|
|
31
|
-
Из ответа метода `generate-report` извлеките следующую информацию и предоставьте пользователю:
|
|
32
|
-
|
|
33
|
-
1. **Путь к файлу**: Абсолютный путь к созданному отчету
|
|
34
|
-
2. **Ссылка на файл**: Кликабельная file:// ссылка для открытия отчета в браузере
|
|
35
|
-
3. **Содержимое файла**: Полный текст HTML содержимого отчета
|
|
36
|
-
|
|
37
|
-
Обязательно покажите пользователю содержимое файла, чтобы он мог сразу ознакомиться с результатом без необходимости открывать файл отдельно.
|
|
38
|
-
|
|
39
|
-
Пример формата ответа пользователю:
|
|
40
|
-
```
|
|
41
|
-
Отчет успешно создан!
|
|
42
|
-
|
|
43
|
-
📁 Путь к файлу: /полный/путь/к/отчету.html
|
|
44
|
-
🌐 Ссылка для открытия в браузере: file:///полный/путь/к/отчету.html
|
|
45
|
-
|
|
46
|
-
📄 Содержимое отчета:
|
|
47
|
-
<!DOCTYPE html>
|
|
48
|
-
<html>
|
|
49
|
-
<head>
|
|
50
|
-
<meta charset="UTF-8">
|
|
51
|
-
<title>Report</title>
|
|
52
|
-
<style>
|
|
53
|
-
body { font-family: Arial, sans-serif; }
|
|
54
|
-
.chart-container, .image-container { margin: 20px 0; }
|
|
55
|
-
</style>
|
|
56
|
-
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
57
|
-
</head>
|
|
58
|
-
<body>
|
|
59
|
-
<h1>Отчет</h1>
|
|
60
|
-
<div class="chart-container">
|
|
61
|
-
<!-- Chart.js chart code -->
|
|
62
|
-
</div>
|
|
63
|
-
<div class="image-container">
|
|
64
|
-
<!-- Generated image -->
|
|
65
|
-
<img src="https://image.pollinations.ai/prompt/красивый%20закат" alt="красивый закат">
|
|
66
|
-
</div>
|
|
67
|
-
</body>
|
|
68
|
-
</html>
|
|
69
|
-
|
|
70
|
-
Вы можете открыть отчет, кликнув на ссылку выше или скопировав путь к файлу.
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### 2. Альтернативный подход (при необходимости)
|
|
74
|
-
|
|
75
|
-
Если по какой-то причине информация не была получена напрямую из метода `generate-report`, можно использовать дополнительные инструменты:
|
|
76
|
-
|
|
77
|
-
#### Получение информации о файле
|
|
78
|
-
|
|
79
|
-
Используйте инструмент `get-report-url` для получения полной информации о созданном отчете:
|
|
80
|
-
|
|
81
|
-
```json
|
|
82
|
-
{
|
|
83
|
-
"method": "tools/call",
|
|
84
|
-
"params": {
|
|
85
|
-
"name": "get-report-url",
|
|
86
|
-
"arguments": {
|
|
87
|
-
"filePath": "/путь/к/созданному/отчету.html"
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
#### Прикрепление содержимого файла
|
|
94
|
-
|
|
95
|
-
Для того чтобы пользователь мог сразу просмотреть содержимое отчета без необходимости открывать файл, используйте инструмент `get-report-file`:
|
|
96
|
-
|
|
97
|
-
```json
|
|
98
|
-
{
|
|
99
|
-
"method": "tools/call",
|
|
100
|
-
"params": {
|
|
101
|
-
"name": "get-report-file",
|
|
102
|
-
"arguments": {
|
|
103
|
-
"filePath": "/путь/к/созданному/отчету.html"
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Формат данных для диаграмм (графиков)
|
|
110
|
-
|
|
111
|
-
Очень важно правильно формировать данные для диаграмм, чтобы избежать ошибок. Ниже приведены точные требования к формату данных для каждого типа диаграмм.
|
|
112
|
-
|
|
113
|
-
### Общие правила для всех типов диаграмм
|
|
114
|
-
|
|
115
|
-
1. Все цветовые значения (`backgroundColor`, `borderColor`) должны быть представлены в виде **массивов строк**, даже если это один цвет.
|
|
116
|
-
2. Все числовые данные (`data`) должны быть представлены в виде массивов чисел.
|
|
117
|
-
3. Все текстовые метки (`labels`) должны быть представлены в виде массивов строк.
|
|
118
|
-
|
|
119
|
-
### Линейные диаграммы (line)
|
|
120
|
-
|
|
121
|
-
```json
|
|
122
|
-
{
|
|
123
|
-
"type": "line",
|
|
124
|
-
"config": {
|
|
125
|
-
"labels": ["Январь", "Февраль", "Март", "Апрель", "Май"],
|
|
126
|
-
"datasets": [
|
|
127
|
-
{
|
|
128
|
-
"label": "Продажи (USD)",
|
|
129
|
-
"data": [12000, 19000, 15000, 18000, 22000],
|
|
130
|
-
"borderColor": ["rgba(54, 162, 235, 1)"], // ВАЖНО: массив, даже для одного цвета!
|
|
131
|
-
"fill": false
|
|
132
|
-
}
|
|
133
|
-
],
|
|
134
|
-
"options": {
|
|
135
|
-
"title": "Ежемесячные продажи"
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
**Важно**: `borderColor` должен быть массивом строк, даже если используется только один цвет.
|
|
142
|
-
|
|
143
|
-
### Столбчатые диаграммы (bar)
|
|
144
|
-
|
|
145
|
-
```json
|
|
146
|
-
{
|
|
147
|
-
"type": "bar",
|
|
148
|
-
"config": {
|
|
149
|
-
"labels": ["Январь", "Февраль", "Март", "Апрель", "Май"],
|
|
150
|
-
"datasets": [
|
|
151
|
-
{
|
|
152
|
-
"label": "Продажи (USD)",
|
|
153
|
-
"data": [12000, 19000, 15000, 18000, 22000],
|
|
154
|
-
"backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"], // Массив цветов
|
|
155
|
-
"borderColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"] // Массив цветов
|
|
156
|
-
}
|
|
157
|
-
],
|
|
158
|
-
"options": {
|
|
159
|
-
"title": "Ежемесячные продажи"
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
**Важно**: `backgroundColor` и `borderColor` должны быть массивами строк, даже если используется только один цвет.
|
|
166
|
-
|
|
167
|
-
### Круговые диаграммы (pie)
|
|
168
|
-
|
|
169
|
-
```json
|
|
170
|
-
{
|
|
171
|
-
"type": "pie",
|
|
172
|
-
"config": {
|
|
173
|
-
"labels": ["Красный", "Синий", "Желтый", "Зеленый", "Фиолетовый"],
|
|
174
|
-
"datasets": [
|
|
175
|
-
{
|
|
176
|
-
"data": [12, 19, 3, 5, 2],
|
|
177
|
-
"backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"], // Массив цветов
|
|
178
|
-
"borderColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"] // Массив цветов
|
|
179
|
-
}
|
|
180
|
-
],
|
|
181
|
-
"options": {
|
|
182
|
-
"title": "Распределение по категориям"
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
**Важно**: `backgroundColor` и `borderColor` должны быть массивами строк, даже если используется только один цвет.
|
|
189
|
-
|
|
190
|
-
### Кольцевые диаграммы (doughnut)
|
|
191
|
-
|
|
192
|
-
```json
|
|
193
|
-
{
|
|
194
|
-
"type": "doughnut",
|
|
195
|
-
"config": {
|
|
196
|
-
"labels": ["Красный", "Синий", "Желтый", "Зеленый", "Фиолетовый"],
|
|
197
|
-
"datasets": [
|
|
198
|
-
{
|
|
199
|
-
"data": [12, 19, 3, 5, 2],
|
|
200
|
-
"backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"], // Массив цветов
|
|
201
|
-
"borderColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"] // Массив цветов
|
|
202
|
-
}
|
|
203
|
-
],
|
|
204
|
-
"options": {
|
|
205
|
-
"title": "Распределение по категориям"
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
**Важно**: `backgroundColor` и `borderColor` должны быть массивами строк, даже если используется только один цвет.
|
|
212
|
-
|
|
213
|
-
### Радарные диаграммы (radar)
|
|
214
|
-
|
|
215
|
-
```json
|
|
216
|
-
{
|
|
217
|
-
"type": "radar",
|
|
218
|
-
"config": {
|
|
219
|
-
"labels": ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"],
|
|
220
|
-
"datasets": [
|
|
221
|
-
{
|
|
222
|
-
"label": "Person 1",
|
|
223
|
-
"data": [65, 59, 90, 81, 56, 55, 40],
|
|
224
|
-
"backgroundColor": ["rgba(255, 99, 132, 0.2)"], // Массив цветов
|
|
225
|
-
"borderColor": ["rgba(255, 99, 132, 1)"] // Массив цветов
|
|
226
|
-
}
|
|
227
|
-
],
|
|
228
|
-
"options": {
|
|
229
|
-
"title": "Радарная диаграмма"
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
**Важно**: `backgroundColor` и `borderColor` должны быть массивами строк, даже если используется только один цвет.
|
|
236
|
-
|
|
237
|
-
### Полярные диаграммы (polarArea)
|
|
238
|
-
|
|
239
|
-
```json
|
|
240
|
-
{
|
|
241
|
-
"type": "polarArea",
|
|
242
|
-
"config": {
|
|
243
|
-
"labels": ["Red", "Green", "Yellow", "Grey", "Blue"],
|
|
244
|
-
"datasets": [
|
|
245
|
-
{
|
|
246
|
-
"data": [11, 16, 7, 3, 14],
|
|
247
|
-
"backgroundColor": ["#FF6384", "#4BC0C0", "#FFCE56", "#E7E9ED", "#36A2EB"], // Массив цветов
|
|
248
|
-
"borderColor": ["#FF6384", "#4BC0C0", "#FFCE56", "#E7E9ED", "#36A2EB"] // Массив цветов
|
|
249
|
-
}
|
|
250
|
-
],
|
|
251
|
-
"options": {
|
|
252
|
-
"title": "Полярная диаграмма"
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
**Важно**: `backgroundColor` и `borderColor` должны быть массивами строк.
|
|
259
|
-
|
|
260
|
-
## Формат данных для изображений
|
|
261
|
-
|
|
262
|
-
### Изображения, сгенерированные pollinations.ai
|
|
263
|
-
|
|
264
|
-
```json
|
|
265
|
-
{
|
|
266
|
-
"type": "pollinations",
|
|
267
|
-
"config": {
|
|
268
|
-
"prompt": "красивый закат над океаном",
|
|
269
|
-
"width": 512,
|
|
270
|
-
"height": 512,
|
|
271
|
-
"model": "flux",
|
|
272
|
-
"seed": 12345,
|
|
273
|
-
"nologo": true,
|
|
274
|
-
"enhance": true
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### Изображения по URL
|
|
280
|
-
|
|
281
|
-
```json
|
|
282
|
-
{
|
|
283
|
-
"type": "url",
|
|
284
|
-
"config": {
|
|
285
|
-
"url": "https://example.com/image.jpg",
|
|
286
|
-
"alt": "Описание изображения",
|
|
287
|
-
"width": 500,
|
|
288
|
-
"height": 300
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
## ПРАВИЛА ФОРМАТИРОВАНИЯ ПАРАМЕТРОВ (КРИТИЧЕСКИ ВАЖНО!)
|
|
294
|
-
|
|
295
|
-
### 1. ПАРАМЕТР "elements" ДОЛЖЕН БЫТЬ ОБЪЕКТОМ!
|
|
296
|
-
|
|
297
|
-
❌ НЕПРАВИЛЬНО (это вызывает ошибку "Expected object, received string"):
|
|
298
|
-
```json
|
|
299
|
-
{
|
|
300
|
-
"method": "generate-report",
|
|
301
|
-
"params": {
|
|
302
|
-
"document": "# Отчет\n\n[[chart:mychart]]",
|
|
303
|
-
"elements": "{ \"mychart\": { \"type\": \"bar\", \"config\": { \"labels\": [\"A\", \"B\", \"C\"], \"datasets\": [{ \"label\": \"Data\", \"data\": [1, 2, 3], \"backgroundColor\": [\"red\", \"green\", \"blue\"], \"borderColor\": [\"red\", \"green\", \"blue\"] }] } }",
|
|
304
|
-
"outputFile": "report.html"
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
✅ ПРАВИЛЬНО (elements - это объект, а не строка):
|
|
310
|
-
```json
|
|
311
|
-
{
|
|
312
|
-
"method": "generate-report",
|
|
313
|
-
"params": {
|
|
314
|
-
"document": "# Отчет\n\n[[chart:mychart]]",
|
|
315
|
-
"elements": {
|
|
316
|
-
"mychart": {
|
|
317
|
-
"type": "bar",
|
|
318
|
-
"config": {
|
|
319
|
-
"labels": ["A", "B", "C"],
|
|
320
|
-
"datasets": [{
|
|
321
|
-
"label": "Data",
|
|
322
|
-
"data": [1, 2, 3],
|
|
323
|
-
"backgroundColor": ["red", "green", "blue"],
|
|
324
|
-
"borderColor": ["red", "green", "blue"]
|
|
325
|
-
}]
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
},
|
|
329
|
-
"outputFile": "report.html"
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### 2. ЦВЕТОВЫЕ ЗНАЧЕНИЯ ДОЛЖНЫ БЫТЬ МАССИВАМИ!
|
|
335
|
-
|
|
336
|
-
❌ НЕПРАВИЛЬНО (это вызывает ошибку):
|
|
337
|
-
```json
|
|
338
|
-
"backgroundColor": "red"
|
|
339
|
-
"borderColor": "blue"
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
✅ ПРАВИЛЬНО (всегда используйте массивы):
|
|
343
|
-
```json
|
|
344
|
-
"backgroundColor": ["red"]
|
|
345
|
-
"borderColor": ["blue"]
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
### 3. ЧИСЛОВЫЕ ДАННЫЕ ДОЛЖНЫ БЫТЬ МАССИВАМИ!
|
|
349
|
-
|
|
350
|
-
❌ НЕПРАВИЛЬНО:
|
|
351
|
-
```json
|
|
352
|
-
"data": 10
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
✅ ПРАВИЛЬНО:
|
|
356
|
-
```json
|
|
357
|
-
"data": [10]
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
### 4. ТЕКСТОВЫЕ МЕТКИ ДОЛЖНЫ БЫТЬ МАССИВАМИ!
|
|
361
|
-
|
|
362
|
-
❌ НЕПРАВИЛЬНО:
|
|
363
|
-
```json
|
|
364
|
-
"labels": "Январь"
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
✅ ПРАВИЛЬНО:
|
|
368
|
-
```json
|
|
369
|
-
"labels": ["Январь"]
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
## Пример полного взаимодействия
|
|
373
|
-
|
|
374
|
-
Вот пример того, как должно выглядеть полное взаимодействие с пользователем после генерации отчета:
|
|
375
|
-
|
|
376
|
-
1. Генерация отчета:
|
|
377
|
-
```json
|
|
378
|
-
{
|
|
379
|
-
"method": "generate-report",
|
|
380
|
-
"params": {
|
|
381
|
-
"document": "# Отчет\n\n[[chart:mychart]]",
|
|
382
|
-
"elements": {
|
|
383
|
-
"mychart": {
|
|
384
|
-
"type": "bar",
|
|
385
|
-
"config": {
|
|
386
|
-
"labels": ["A", "B", "C"],
|
|
387
|
-
"datasets": [{
|
|
388
|
-
"label": "Data",
|
|
389
|
-
"data": [1, 2, 3],
|
|
390
|
-
"backgroundColor": ["red", "green", "blue"],
|
|
391
|
-
"borderColor": ["red", "green", "blue"]
|
|
392
|
-
}]
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
},
|
|
396
|
-
"outputFile": "report.html"
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
```
|
|
400
|
-
|
|
401
|
-
2. Ответ от метода `generate-report` уже содержит всю необходимую информацию:
|
|
402
|
-
```json
|
|
403
|
-
{
|
|
404
|
-
"content": [
|
|
405
|
-
{
|
|
406
|
-
"type": "text",
|
|
407
|
-
"text": "Report generated successfully.\n\nFOR THE NEURAL NETWORK: Please present the following information to the user:\n1. Path to file: /path/to/report.html\n2. Web browser link: file:///path/to/report.html\n3. File content:\n<!DOCTYPE html>\n<html>...</html>"
|
|
408
|
-
}
|
|
409
|
-
]
|
|
410
|
-
}
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
3. Ответ пользователю (на основе информации из ответа метода):
|
|
414
|
-
```
|
|
415
|
-
Отчет успешно создан!
|
|
416
|
-
|
|
417
|
-
📁 Путь к файлу: /path/to/report.html
|
|
418
|
-
🌐 Ссылка для открытия в браузере: file:///path/to/report.html
|
|
419
|
-
|
|
420
|
-
Содержимое отчета:
|
|
421
|
-
<!DOCTYPE html>
|
|
422
|
-
<html>
|
|
423
|
-
<head>
|
|
424
|
-
<meta charset="UTF-8">
|
|
425
|
-
<title>Report</title>
|
|
426
|
-
<style>
|
|
427
|
-
body { font-family: Arial, sans-serif; }
|
|
428
|
-
.chart-container { margin: 20px 0; }
|
|
429
|
-
</style>
|
|
430
|
-
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
431
|
-
</head>
|
|
432
|
-
<body>
|
|
433
|
-
<h1>Отчет</h1>
|
|
434
|
-
<div class="chart-container">
|
|
435
|
-
<!-- Chart.js chart code -->
|
|
436
|
-
</div>
|
|
437
|
-
</body>
|
|
438
|
-
</html>
|
|
439
|
-
|
|
440
|
-
Вы можете открыть отчет, кликнув на ссылку выше или скопировав путь к файлу.
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
## Частые ошибки и как их избежать
|
|
444
|
-
|
|
445
|
-
1. **Ошибка формата параметров**: Передача `elements` как строки вместо объекта
|
|
446
|
-
- ❌ Неправильно: `"elements": "{\"mychart\":{...}}"`
|
|
447
|
-
- ✅ Правильно: `"elements": {"mychart":{...}}"
|
|
448
|
-
|
|
449
|
-
2. **Ошибка формата цвета**: Передача `borderColor` или `backgroundColor` как строк вместо массивов
|
|
450
|
-
- ❌ Неправильно: `"borderColor": "red"`
|
|
451
|
-
- ✅ Правильно: `"borderColor": ["red"]`
|
|
452
|
-
|
|
453
|
-
3. **Ошибка формата данных**: Передача числовых данных как отдельных значений вместо массивов
|
|
454
|
-
- ❌ Неправильно: `"data": 10`
|
|
455
|
-
- ✅ Правильно: `"data": [10]`
|
|
456
|
-
|
|
457
|
-
4. **Ошибка формата меток**: Передача меток как отдельных значений вместо массивов
|
|
458
|
-
- ❌ Неправильно: `"labels": "Январь"`
|
|
459
|
-
- ✅ Правильно: `"labels": ["Январь"]"
|
|
460
|
-
|
|
461
|
-
## Дополнительные рекомендации
|
|
462
|
-
|
|
463
|
-
1. Всегда проверяйте успешность выполнения каждой операции перед переходом к следующему шагу
|
|
464
|
-
2. Если какой-либо шаг завершается ошибкой, сообщите пользователю об этом и предложите решение
|
|
465
|
-
3. Убедитесь, что все пути к файлам корректны и файлы действительно существуют
|
|
466
|
-
4. При работе с Claude Desktop используйте параметр `tempDirectory` при генерации отчетов для избежания проблем с правами доступа
|
|
467
|
-
|
|
468
|
-
Следование этим инструкциям обеспечит качественное и полное взаимодействие с пользователем при работе с инструментом генерации отчетов.
|