@vint.tri/report_gen_mcp 1.7.26 → 1.7.28
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/NEURAL_NETWORK_INSTRUCTIONS.md +41 -985
- package/dist/index.js +1 -1
- package/dist/utils/reportGenerator.d.ts +1 -1
- package/dist/utils/reportGenerator.d.ts.map +1 -1
- package/dist/utils/reportGenerator.js +27 -4
- package/dog.png +0 -0
- package/dog_in_dollars.png +0 -0
- package/generated_images/generated-image-1757324735875.jpeg +0 -0
- package/package.json +1 -1
- package/IMPROVED_AI_INSTRUCTIONS.md +0 -468
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.28"
|
|
107
107
|
}, {
|
|
108
108
|
// Disable health check to prevent automatic calls
|
|
109
109
|
capabilities: {
|
|
@@ -16,7 +16,7 @@ interface PollinationsImageElement {
|
|
|
16
16
|
}
|
|
17
17
|
type ImageElement = UrlImageElement | PollinationsImageElement;
|
|
18
18
|
type ReportElement = ChartElement | ImageElement;
|
|
19
|
-
export declare function generateReport(document: string, elements: Record<string, ReportElement>, outputFile: string): Promise<{
|
|
19
|
+
export declare function generateReport(document: string, elements: Record<string, ReportElement>, outputFile: string, tempDirectory?: string): Promise<{
|
|
20
20
|
success: boolean;
|
|
21
21
|
filePath: string;
|
|
22
22
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/reportGenerator.ts"],"names":[],"mappings":"
|
|
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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
2
4
|
import ejs from 'ejs';
|
|
3
5
|
import { marked } from 'marked';
|
|
4
6
|
import { barSchema, renderBarChart } from '../charts/bar.js';
|
|
@@ -30,6 +32,10 @@ function normalizeChartConfig(config) {
|
|
|
30
32
|
return config;
|
|
31
33
|
}
|
|
32
34
|
const normalizedConfig = { ...config };
|
|
35
|
+
// Normalize labels
|
|
36
|
+
if (normalizedConfig.labels && typeof normalizedConfig.labels === 'string') {
|
|
37
|
+
normalizedConfig.labels = [normalizedConfig.labels];
|
|
38
|
+
}
|
|
33
39
|
// Normalize datasets
|
|
34
40
|
if (normalizedConfig.datasets && Array.isArray(normalizedConfig.datasets)) {
|
|
35
41
|
normalizedConfig.datasets = normalizedConfig.datasets.map((dataset) => {
|
|
@@ -44,14 +50,31 @@ function normalizeChartConfig(config) {
|
|
|
44
50
|
normalizedDataset[prop] = [normalizedDataset[prop]];
|
|
45
51
|
}
|
|
46
52
|
}
|
|
53
|
+
// Normalize data
|
|
54
|
+
if (normalizedDataset.data && !Array.isArray(normalizedDataset.data)) {
|
|
55
|
+
normalizedDataset.data = [normalizedDataset.data];
|
|
56
|
+
}
|
|
47
57
|
return normalizedDataset;
|
|
48
58
|
});
|
|
49
59
|
}
|
|
50
60
|
return normalizedConfig;
|
|
51
61
|
}
|
|
52
|
-
export async function generateReport(document, elements, outputFile) {
|
|
62
|
+
export async function generateReport(document, elements, outputFile, tempDirectory) {
|
|
63
|
+
const reportsDir = tempDirectory || process.env.REPORTS_DIR || os.tmpdir();
|
|
64
|
+
await fs.ensureDir(reportsDir);
|
|
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
|
+
}
|
|
53
76
|
// Validate elements
|
|
54
|
-
for (const [id, element] of Object.entries(
|
|
77
|
+
for (const [id, element] of Object.entries(parsedElements)) {
|
|
55
78
|
if (element.type in chartRenderers) {
|
|
56
79
|
// Это диаграмма
|
|
57
80
|
const chartElement = element;
|
|
@@ -171,6 +194,6 @@ export async function generateReport(document, elements, outputFile) {
|
|
|
171
194
|
`;
|
|
172
195
|
const fullHtml = ejs.render(template, { htmlContent }, { escape: (str) => str });
|
|
173
196
|
// Save to file
|
|
174
|
-
await fs.writeFile(
|
|
175
|
-
return { success: true, filePath:
|
|
197
|
+
await fs.writeFile(finalOutputFile, fullHtml);
|
|
198
|
+
return { success: true, filePath: finalOutputFile };
|
|
176
199
|
}
|
package/dog.png
ADDED
|
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
|
-
Следование этим инструкциям обеспечит качественное и полное взаимодействие с пользователем при работе с инструментом генерации отчетов.
|