@vint.tri/report_gen_mcp 1.7.26 → 1.7.27
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.
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
|
|
111
111
|
Обязательно покажите пользователю содержимое файла, чтобы он мог сразу ознакомиться с результатом без необходимости открывать файл отдельно.
|
|
112
112
|
|
|
113
|
-
**ВАЖНОЕ ТРЕБОВАНИЕ**: Отчет должен быть максимально красивым и качественным. Содержать
|
|
113
|
+
**ВАЖНОЕ ТРЕБОВАНИЕ**: Отчет должен быть максимально красивым и качественным. Содержать **как минимум одну диаграмму и одно изображение**, а также выводы и рассуждения. Отчет должен быть строго в HTML формате!
|
|
114
114
|
|
|
115
115
|
**ВАЖНО**: Всегда выводите Web link 2 как кликабельную ссылку в формате `[Web link 2](http://localhost:3000/filename.html)`!
|
|
116
116
|
|
|
@@ -677,28 +677,32 @@
|
|
|
677
677
|
|
|
678
678
|
### 3. ЧИСЛОВЫЕ ДАННЫЕ ДОЛЖНЫ БЫТЬ МАССИВАМИ!
|
|
679
679
|
|
|
680
|
-
❌
|
|
680
|
+
❌ НЕПРАВИЛЬНО (это вызовет ошибку валидации):
|
|
681
681
|
```json
|
|
682
682
|
"data": 10
|
|
683
683
|
```
|
|
684
684
|
|
|
685
|
-
✅
|
|
685
|
+
✅ ПРАВИЛЬНО (даже для одного значения):
|
|
686
686
|
```json
|
|
687
687
|
"data": [10]
|
|
688
688
|
```
|
|
689
689
|
|
|
690
|
+
**КРИТИЧЕСКИ ВАЖНО:** Всегда оборачивайте числовые данные для диаграмм в массив. Хотя система теперь пытается исправлять некоторые ошибки, правильный формат гарантирует стабильную работу.
|
|
691
|
+
|
|
690
692
|
### 4. ТЕКСТОВЫЕ МЕТКИ ДОЛЖНЫ БЫТЬ МАССИВАМИ!
|
|
691
693
|
|
|
692
|
-
❌
|
|
694
|
+
❌ НЕПРАВИЛЬНО (это вызовет ошибку валидации):
|
|
693
695
|
```json
|
|
694
696
|
"labels": "Январь"
|
|
695
697
|
```
|
|
696
698
|
|
|
697
|
-
✅
|
|
699
|
+
✅ ПРАВИЛЬНО (даже для одной метки):
|
|
698
700
|
```json
|
|
699
701
|
"labels": ["Январь"]
|
|
700
702
|
```
|
|
701
703
|
|
|
704
|
+
**КРИТИЧЕСКИ ВАЖНО:** Всегда оборачивайте текстовые метки для диаграмм в массив. Хотя система теперь пытается исправлять некоторые ошибки, правильный формат гарантирует стабильную работу.
|
|
705
|
+
|
|
702
706
|
### 5. ЗНАЧЕНИЕ options.title ДОЛЖНО БЫТЬ СТРОКОЙ!
|
|
703
707
|
|
|
704
708
|
❌ НЕПРАВИЛЬНО (это вызывает ошибку):
|
|
@@ -1013,7 +1017,7 @@
|
|
|
1013
1017
|
1. Всегда проверяйте успешность выполнения каждой операции перед переходом к следующему шагу
|
|
1014
1018
|
2. Если какой-либо шаг завершается ошибкой, сообщите пользователю об этом и предложите решение
|
|
1015
1019
|
3. Убедитесь, что все пути к файлам корректны и файлы действительно существуют
|
|
1016
|
-
4.
|
|
1020
|
+
4. **Сохранение файлов**: Все отчеты автоматически сохраняются в системную временную директорию. Вам не нужно указывать путь, просто передайте имя файла в `outputFile`. Инструмент вернет полный путь к сохраненному файлу.
|
|
1017
1021
|
5. Создавайте отчеты с красивым оформлением, используя заголовки, списки и другие элементы форматирования
|
|
1018
1022
|
6. Добавляйте в отчеты диаграммы и изображения для лучшей визуализации данных
|
|
1019
1023
|
7. Всегда после генерации отчета возвращайте пользователю ссылку на файл отчета, путь к файлу отчета и содержимое файла
|
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.27"
|
|
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;;;GAmIvB"}
|
|
@@ -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,12 +50,19 @@ 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);
|
|
53
66
|
// Validate elements
|
|
54
67
|
for (const [id, element] of Object.entries(elements)) {
|
|
55
68
|
if (element.type in chartRenderers) {
|
|
@@ -171,6 +184,6 @@ export async function generateReport(document, elements, outputFile) {
|
|
|
171
184
|
`;
|
|
172
185
|
const fullHtml = ejs.render(template, { htmlContent }, { escape: (str) => str });
|
|
173
186
|
// Save to file
|
|
174
|
-
await fs.writeFile(
|
|
175
|
-
return { success: true, filePath:
|
|
187
|
+
await fs.writeFile(finalOutputFile, fullHtml);
|
|
188
|
+
return { success: true, filePath: finalOutputFile };
|
|
176
189
|
}
|
package/dog.png
ADDED
|
Binary file
|
|
Binary file
|