@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/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.26"
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":"AAGA,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;AAqDjD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,UAAU,EAAE,MAAM;;;GA+HnB"}
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(elements)) {
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(outputFile, fullHtml);
175
- return { success: true, filePath: outputFile };
197
+ await fs.writeFile(finalOutputFile, fullHtml);
198
+ return { success: true, filePath: finalOutputFile };
176
199
  }
package/dog.png ADDED
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vint.tri/report_gen_mcp",
3
- "version": "1.7.26",
3
+ "version": "1.7.28",
4
4
  "description": "CLI tool for generating HTML reports with embedded charts and images",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -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
- Следование этим инструкциям обеспечит качественное и полное взаимодействие с пользователем при работе с инструментом генерации отчетов.