@vulcan-energy/mcp-helper 0.1.1
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/README.md +154 -0
- package/dist/bin/vulcan-mcp-helper.d.ts +9 -0
- package/dist/bin/vulcan-mcp-helper.d.ts.map +1 -0
- package/dist/bin/vulcan-mcp-helper.js +58 -0
- package/dist/bin/vulcan-mcp-helper.js.map +1 -0
- package/dist/src/engine/filesystem.d.ts +30 -0
- package/dist/src/engine/filesystem.d.ts.map +1 -0
- package/dist/src/engine/filesystem.js +61 -0
- package/dist/src/engine/filesystem.js.map +1 -0
- package/dist/src/engine/wasm.d.ts +23 -0
- package/dist/src/engine/wasm.d.ts.map +1 -0
- package/dist/src/engine/wasm.js +333 -0
- package/dist/src/engine/wasm.js.map +1 -0
- package/dist/src/engine/workspace.d.ts +23 -0
- package/dist/src/engine/workspace.d.ts.map +1 -0
- package/dist/src/engine/workspace.js +82 -0
- package/dist/src/engine/workspace.js.map +1 -0
- package/dist/src/server.d.ts +8 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +166 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/tools/calculateMetrics.d.ts +31 -0
- package/dist/src/tools/calculateMetrics.d.ts.map +1 -0
- package/dist/src/tools/calculateMetrics.js +347 -0
- package/dist/src/tools/calculateMetrics.js.map +1 -0
- package/dist/src/tools/createBatchConfig.d.ts +25 -0
- package/dist/src/tools/createBatchConfig.d.ts.map +1 -0
- package/dist/src/tools/createBatchConfig.js +128 -0
- package/dist/src/tools/createBatchConfig.js.map +1 -0
- package/dist/src/tools/getBatchStatus.d.ts +23 -0
- package/dist/src/tools/getBatchStatus.d.ts.map +1 -0
- package/dist/src/tools/getBatchStatus.js +194 -0
- package/dist/src/tools/getBatchStatus.js.map +1 -0
- package/dist/src/tools/index.d.ts +67 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +361 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/listBatchModels.d.ts +25 -0
- package/dist/src/tools/listBatchModels.d.ts.map +1 -0
- package/dist/src/tools/listBatchModels.js +86 -0
- package/dist/src/tools/listBatchModels.js.map +1 -0
- package/dist/src/tools/listCsvColumns.d.ts +27 -0
- package/dist/src/tools/listCsvColumns.d.ts.map +1 -0
- package/dist/src/tools/listCsvColumns.js +93 -0
- package/dist/src/tools/listCsvColumns.js.map +1 -0
- package/dist/src/tools/listParameters.d.ts +25 -0
- package/dist/src/tools/listParameters.d.ts.map +1 -0
- package/dist/src/tools/listParameters.js +64 -0
- package/dist/src/tools/listParameters.js.map +1 -0
- package/dist/src/tools/runBatch.d.ts +19 -0
- package/dist/src/tools/runBatch.d.ts.map +1 -0
- package/dist/src/tools/runBatch.js +90 -0
- package/dist/src/tools/runBatch.js.map +1 -0
- package/dist/src/tools/saveParameter.d.ts +23 -0
- package/dist/src/tools/saveParameter.d.ts.map +1 -0
- package/dist/src/tools/saveParameter.js +87 -0
- package/dist/src/tools/saveParameter.js.map +1 -0
- package/dist/src/tools/viewParameter.d.ts +18 -0
- package/dist/src/tools/viewParameter.d.ts.map +1 -0
- package/dist/src/tools/viewParameter.js +51 -0
- package/dist/src/tools/viewParameter.js.map +1 -0
- package/dist/src/utils/batchConfig.d.ts +32 -0
- package/dist/src/utils/batchConfig.d.ts.map +1 -0
- package/dist/src/utils/batchConfig.js +130 -0
- package/dist/src/utils/batchConfig.js.map +1 -0
- package/dist/src/utils/fileLoader.d.ts +21 -0
- package/dist/src/utils/fileLoader.d.ts.map +1 -0
- package/dist/src/utils/fileLoader.js +86 -0
- package/dist/src/utils/fileLoader.js.map +1 -0
- package/package.json +47 -0
- package/wasm/snippets/wasm-bindgen-rayon-38edf6e439f6d70d/src/workerHelpers.no-bundler.js +77 -0
- package/wasm/wasm_version.json +8 -0
- package/wasm/wasm_wrapper.js +1190 -0
- package/wasm/wasm_wrapper_bg.wasm +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MCPConfig } from '../engine/workspace.js';
|
|
2
|
+
export interface ListBatchModelsArgs {
|
|
3
|
+
config_name: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ModelInfo {
|
|
6
|
+
name: string;
|
|
7
|
+
csv_path?: string;
|
|
8
|
+
has_results: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface ListBatchModelsResult {
|
|
11
|
+
config_name: string;
|
|
12
|
+
models: ModelInfo[];
|
|
13
|
+
total_models: number;
|
|
14
|
+
output_dir: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* List all model names from a completed batch run
|
|
19
|
+
*
|
|
20
|
+
* @param config - MCP config with workspace path
|
|
21
|
+
* @param args - Tool arguments { config_name }
|
|
22
|
+
* @returns List of model names that can be used in vulcan_calculate_metrics
|
|
23
|
+
*/
|
|
24
|
+
export declare function listBatchModels(config: MCPConfig, args: ListBatchModelsArgs): Promise<ListBatchModelsResult>;
|
|
25
|
+
//# sourceMappingURL=listBatchModels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listBatchModels.d.ts","sourceRoot":"","sources":["../../../src/tools/listBatchModels.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAiFhC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { pathExists } from '../engine/filesystem.js';
|
|
4
|
+
/**
|
|
5
|
+
* List all model names from a completed batch run
|
|
6
|
+
*
|
|
7
|
+
* @param config - MCP config with workspace path
|
|
8
|
+
* @param args - Tool arguments { config_name }
|
|
9
|
+
* @returns List of model names that can be used in vulcan_calculate_metrics
|
|
10
|
+
*/
|
|
11
|
+
export async function listBatchModels(config, args) {
|
|
12
|
+
const { workspace } = config;
|
|
13
|
+
const { config_name } = args;
|
|
14
|
+
const outputDir = path.join(workspace, 'output');
|
|
15
|
+
const cleanConfigName = config_name.replace('.json', '');
|
|
16
|
+
const models = [];
|
|
17
|
+
const modelNamesSet = new Set();
|
|
18
|
+
try {
|
|
19
|
+
// Check in config-specific output directory
|
|
20
|
+
const configOutputDir = path.join(outputDir, cleanConfigName);
|
|
21
|
+
if (await pathExists(configOutputDir)) {
|
|
22
|
+
const files = await fs.readdir(configOutputDir);
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
// Match pattern: {model_name}__core__results.csv or {model_name}__results.csv
|
|
25
|
+
const match = file.match(/^(.+?)__(?:core__)?results\.csv$/);
|
|
26
|
+
if (match && match[1]) {
|
|
27
|
+
const modelName = match[1];
|
|
28
|
+
if (!modelNamesSet.has(modelName)) {
|
|
29
|
+
modelNamesSet.add(modelName);
|
|
30
|
+
models.push({
|
|
31
|
+
name: modelName,
|
|
32
|
+
csv_path: path.join(configOutputDir, file),
|
|
33
|
+
has_results: true
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Also check in result_* directories
|
|
40
|
+
const filesInOutputDir = await fs.readdir(outputDir);
|
|
41
|
+
const resultDirs = filesInOutputDir.filter(f => f.startsWith(`result_${cleanConfigName}_`));
|
|
42
|
+
for (const resultDir of resultDirs) {
|
|
43
|
+
const resultDirPath = path.join(outputDir, resultDir);
|
|
44
|
+
try {
|
|
45
|
+
const files = await fs.readdir(resultDirPath);
|
|
46
|
+
for (const file of files) {
|
|
47
|
+
// Match pattern: {model_name}__core__results.csv or {model_name}__results.csv
|
|
48
|
+
const match = file.match(/^(.+?)__(?:core__)?results\.csv$/);
|
|
49
|
+
if (match && match[1]) {
|
|
50
|
+
const modelName = match[1];
|
|
51
|
+
if (!modelNamesSet.has(modelName)) {
|
|
52
|
+
modelNamesSet.add(modelName);
|
|
53
|
+
models.push({
|
|
54
|
+
name: modelName,
|
|
55
|
+
csv_path: path.join(resultDirPath, file),
|
|
56
|
+
has_results: true
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
// Ignore errors reading individual result directories
|
|
64
|
+
console.warn(`Failed to read result directory ${resultDir}: ${e.message}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Sort models by name for consistent ordering
|
|
68
|
+
models.sort((a, b) => a.name.localeCompare(b.name));
|
|
69
|
+
return {
|
|
70
|
+
config_name: cleanConfigName,
|
|
71
|
+
models,
|
|
72
|
+
total_models: models.length,
|
|
73
|
+
output_dir: outputDir
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return {
|
|
78
|
+
config_name: cleanConfigName,
|
|
79
|
+
models: [],
|
|
80
|
+
total_models: 0,
|
|
81
|
+
output_dir: outputDir,
|
|
82
|
+
error: `Failed to list models: ${error.message}`
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=listBatchModels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listBatchModels.js","sourceRoot":"","sources":["../../../src/tools/listBatchModels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { MCPConfig } from '../engine/workspace.js';
|
|
2
|
+
export interface ListCsvColumnsArgs {
|
|
3
|
+
config_name: string;
|
|
4
|
+
model_name: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ColumnInfo {
|
|
7
|
+
name: string;
|
|
8
|
+
unit: string;
|
|
9
|
+
index: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ListCsvColumnsResult {
|
|
12
|
+
config_name: string;
|
|
13
|
+
model_name: string;
|
|
14
|
+
columns: ColumnInfo[];
|
|
15
|
+
total_columns: number;
|
|
16
|
+
csv_path?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* List available columns from a CSV result file
|
|
21
|
+
*
|
|
22
|
+
* @param config - MCP config with workspace path
|
|
23
|
+
* @param args - Tool arguments { config_name, model_name }
|
|
24
|
+
* @returns List of columns with names and units
|
|
25
|
+
*/
|
|
26
|
+
export declare function listCsvColumns(config: MCPConfig, args: ListCsvColumnsArgs): Promise<ListCsvColumnsResult>;
|
|
27
|
+
//# sourceMappingURL=listCsvColumns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listCsvColumns.d.ts","sourceRoot":"","sources":["../../../src/tools/listCsvColumns.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,oBAAoB,CAAC,CA6F/B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { pathExists } from '../engine/filesystem.js';
|
|
4
|
+
/**
|
|
5
|
+
* List available columns from a CSV result file
|
|
6
|
+
*
|
|
7
|
+
* @param config - MCP config with workspace path
|
|
8
|
+
* @param args - Tool arguments { config_name, model_name }
|
|
9
|
+
* @returns List of columns with names and units
|
|
10
|
+
*/
|
|
11
|
+
export async function listCsvColumns(config, args) {
|
|
12
|
+
const { workspace } = config;
|
|
13
|
+
const { config_name, model_name } = args;
|
|
14
|
+
const outputDir = path.join(workspace, 'output');
|
|
15
|
+
const cleanConfigName = config_name.replace('.json', '');
|
|
16
|
+
// Try various paths for the CSV file
|
|
17
|
+
const potentialCsvPaths = [
|
|
18
|
+
path.join(outputDir, cleanConfigName, `${model_name}__core__results.csv`),
|
|
19
|
+
path.join(outputDir, cleanConfigName, `${model_name}__results.csv`),
|
|
20
|
+
];
|
|
21
|
+
// Also check in result_* directories
|
|
22
|
+
try {
|
|
23
|
+
const filesInOutputDir = await fs.readdir(outputDir);
|
|
24
|
+
const resultDirs = filesInOutputDir.filter(f => f.startsWith(`result_${cleanConfigName}_`));
|
|
25
|
+
for (const resultDir of resultDirs) {
|
|
26
|
+
potentialCsvPaths.push(path.join(outputDir, resultDir, `${model_name}__core__results.csv`));
|
|
27
|
+
potentialCsvPaths.push(path.join(outputDir, resultDir, `${model_name}__results.csv`));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
// Ignore errors reading directory
|
|
32
|
+
}
|
|
33
|
+
let csvPath;
|
|
34
|
+
let csvContent;
|
|
35
|
+
for (const p of potentialCsvPaths) {
|
|
36
|
+
if (await pathExists(p)) {
|
|
37
|
+
csvPath = p;
|
|
38
|
+
try {
|
|
39
|
+
csvContent = await fs.readFile(csvPath, 'utf-8');
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
console.warn(`Failed to read CSV from ${p}: ${e.message}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (!csvContent || !csvPath) {
|
|
48
|
+
return {
|
|
49
|
+
config_name: cleanConfigName,
|
|
50
|
+
model_name,
|
|
51
|
+
columns: [],
|
|
52
|
+
total_columns: 0,
|
|
53
|
+
error: `CSV file not found for model ${model_name}. Tried: ${potentialCsvPaths.join(', ')}`
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Parse CSV headers and units
|
|
57
|
+
const lines = csvContent.split('\n').filter(line => line.trim());
|
|
58
|
+
if (lines.length < 2) {
|
|
59
|
+
return {
|
|
60
|
+
config_name: cleanConfigName,
|
|
61
|
+
model_name,
|
|
62
|
+
columns: [],
|
|
63
|
+
total_columns: 0,
|
|
64
|
+
csv_path: csvPath,
|
|
65
|
+
error: 'CSV must have at least headers and units rows'
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Parse headers (row 1)
|
|
69
|
+
const headers = lines[0]?.split(',').map(h => h.trim()) || [];
|
|
70
|
+
// Parse units (row 2)
|
|
71
|
+
const units = lines[1]?.split(',').map(u => u.trim()) || [];
|
|
72
|
+
// Build column info (skip first column which is Timestep)
|
|
73
|
+
const columns = [];
|
|
74
|
+
for (let i = 1; i < headers.length; i++) {
|
|
75
|
+
const header = headers[i];
|
|
76
|
+
const unit = i < units.length ? units[i] : '';
|
|
77
|
+
if (header) {
|
|
78
|
+
columns.push({
|
|
79
|
+
name: header,
|
|
80
|
+
unit: unit || '',
|
|
81
|
+
index: i - 1 // 0-based index excluding Timestep
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
config_name: cleanConfigName,
|
|
87
|
+
model_name,
|
|
88
|
+
columns,
|
|
89
|
+
total_columns: columns.length,
|
|
90
|
+
csv_path: csvPath
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=listCsvColumns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listCsvColumns.js","sourceRoot":"","sources":["../../../src/tools/listCsvColumns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MCPConfig } from '../engine/workspace.js';
|
|
2
|
+
interface ListParametersArgs {
|
|
3
|
+
category?: string;
|
|
4
|
+
}
|
|
5
|
+
interface ParameterInfo {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
category: string;
|
|
10
|
+
}
|
|
11
|
+
interface CategoryInfo {
|
|
12
|
+
category: string;
|
|
13
|
+
parameters: ParameterInfo[];
|
|
14
|
+
}
|
|
15
|
+
interface ListParametersResult {
|
|
16
|
+
catalog: Record<string, CategoryInfo>;
|
|
17
|
+
total_categories: number;
|
|
18
|
+
total_parameters: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* List available parameter categories and their JSON snippets
|
|
22
|
+
*/
|
|
23
|
+
export declare function listParameters(config: MCPConfig, args?: ListParametersArgs): Promise<ListParametersResult>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=listParameters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listParameters.d.ts","sourceRoot":"","sources":["../../../src/tools/listParameters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,oBAAoB,CAAC,CAuE/B"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* List available parameter categories and their JSON snippets
|
|
5
|
+
*/
|
|
6
|
+
export async function listParameters(config, args = {}) {
|
|
7
|
+
const { workspace } = config;
|
|
8
|
+
const { category: filterCategory } = args;
|
|
9
|
+
const batchParamsDir = path.join(workspace, 'input', 'batch_parameters');
|
|
10
|
+
// Read directory structure
|
|
11
|
+
const entries = await fs.readdir(batchParamsDir, { withFileTypes: true });
|
|
12
|
+
const catalog = {};
|
|
13
|
+
for (const entry of entries) {
|
|
14
|
+
if (!entry.isDirectory()) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const categoryName = entry.name;
|
|
18
|
+
// If filtering by category, skip others
|
|
19
|
+
if (filterCategory && categoryName !== filterCategory) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const categoryPath = path.join(batchParamsDir, categoryName);
|
|
23
|
+
const categoryFiles = await fs.readdir(categoryPath);
|
|
24
|
+
const parameters = [];
|
|
25
|
+
for (const file of categoryFiles) {
|
|
26
|
+
if (!file.endsWith('.json')) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const parameterId = file.replace('.json', '');
|
|
30
|
+
const filePath = path.join(categoryPath, file);
|
|
31
|
+
try {
|
|
32
|
+
// Read JSON file to extract metadata
|
|
33
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
34
|
+
const json = JSON.parse(content);
|
|
35
|
+
// Extract name and description if available
|
|
36
|
+
const name = json.name || parameterId;
|
|
37
|
+
const description = json.description || '';
|
|
38
|
+
parameters.push({
|
|
39
|
+
id: parameterId,
|
|
40
|
+
name,
|
|
41
|
+
description,
|
|
42
|
+
category: categoryName
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
// Skip files that can't be parsed
|
|
47
|
+
const err = error;
|
|
48
|
+
console.error(`Failed to parse ${filePath}: ${err.message}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (parameters.length > 0) {
|
|
52
|
+
catalog[categoryName] = {
|
|
53
|
+
category: categoryName,
|
|
54
|
+
parameters: parameters.sort((a, b) => a.name.localeCompare(b.name))
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
catalog,
|
|
60
|
+
total_categories: Object.keys(catalog).length,
|
|
61
|
+
total_parameters: Object.values(catalog).reduce((sum, cat) => sum + cat.parameters.length, 0)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=listParameters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listParameters.js","sourceRoot":"","sources":["../../../src/tools/listParameters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MCPConfig } from '../engine/workspace.js';
|
|
2
|
+
interface RunBatchArgs {
|
|
3
|
+
config_name: string;
|
|
4
|
+
job_id?: string;
|
|
5
|
+
}
|
|
6
|
+
interface RunBatchResult {
|
|
7
|
+
job_id: string;
|
|
8
|
+
status: 'started' | 'error';
|
|
9
|
+
message: string;
|
|
10
|
+
config_name?: string;
|
|
11
|
+
output_dir?: string;
|
|
12
|
+
error?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Run a batch simulation configuration asynchronously
|
|
16
|
+
*/
|
|
17
|
+
export declare function runBatch(config: MCPConfig, args: RunBatchArgs): Promise<RunBatchResult>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=runBatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runBatch.d.ts","sourceRoot":"","sources":["../../../src/tools/runBatch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,UAAU,YAAY;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,cAAc,CAAC,CAgGzB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { randomUUID } from 'crypto';
|
|
4
|
+
import { initWasm, getWasmModule, setWorkspace } from '../engine/wasm.js';
|
|
5
|
+
/**
|
|
6
|
+
* Run a batch simulation configuration asynchronously
|
|
7
|
+
*/
|
|
8
|
+
export async function runBatch(config, args) {
|
|
9
|
+
const { workspace } = config;
|
|
10
|
+
const { config_name, job_id } = args;
|
|
11
|
+
if (!config_name) {
|
|
12
|
+
throw new Error('config_name is required');
|
|
13
|
+
}
|
|
14
|
+
// Generate job ID with mcp_ prefix
|
|
15
|
+
const finalJobId = job_id || `mcp_${randomUUID()}`;
|
|
16
|
+
// Load batch config
|
|
17
|
+
const configFileName = config_name.endsWith('.json') ? config_name : `${config_name}.json`;
|
|
18
|
+
const configPath = path.join(workspace, 'input', 'batch_configs', configFileName);
|
|
19
|
+
let configContent;
|
|
20
|
+
try {
|
|
21
|
+
configContent = await fs.readFile(configPath, 'utf-8');
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const err = error;
|
|
25
|
+
if (err.code === 'ENOENT') {
|
|
26
|
+
throw new Error(`Batch config '${config_name}' not found at ${configPath}`);
|
|
27
|
+
}
|
|
28
|
+
throw new Error(`Failed to read config file: ${err.message}`);
|
|
29
|
+
}
|
|
30
|
+
// Initialize WASM if not already done
|
|
31
|
+
let wasm;
|
|
32
|
+
try {
|
|
33
|
+
await initWasm();
|
|
34
|
+
wasm = getWasmModule();
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const err = error;
|
|
38
|
+
return {
|
|
39
|
+
job_id: finalJobId,
|
|
40
|
+
status: 'error',
|
|
41
|
+
message: `WASM initialization failed: ${err.message}`,
|
|
42
|
+
error: err.message
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
if (!wasm.process_batch_config) {
|
|
46
|
+
return {
|
|
47
|
+
job_id: finalJobId,
|
|
48
|
+
status: 'error',
|
|
49
|
+
message: 'WASM process_batch_config function not available',
|
|
50
|
+
error: 'WASM function missing'
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// Set workspace for file system bridge functions
|
|
54
|
+
setWorkspace(workspace);
|
|
55
|
+
// Prepare paths
|
|
56
|
+
const outputDir = path.join(workspace, 'output');
|
|
57
|
+
await fs.mkdir(outputDir, { recursive: true });
|
|
58
|
+
// Call WASM batch processing
|
|
59
|
+
// Note: process_batch_config expects: (config_json, project_root, output_dir, config_name, job_id)
|
|
60
|
+
try {
|
|
61
|
+
const resultJson = wasm.process_batch_config(configContent, workspace, outputDir, config_name.replace('.json', ''), finalJobId);
|
|
62
|
+
const result = JSON.parse(resultJson);
|
|
63
|
+
// Check if there was an error in the result
|
|
64
|
+
if (result.error) {
|
|
65
|
+
return {
|
|
66
|
+
job_id: finalJobId,
|
|
67
|
+
status: 'error',
|
|
68
|
+
message: `Batch execution failed: ${result.error}`,
|
|
69
|
+
error: result.error
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
job_id: finalJobId,
|
|
74
|
+
status: 'started',
|
|
75
|
+
message: 'Batch execution started successfully',
|
|
76
|
+
config_name,
|
|
77
|
+
output_dir: outputDir
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const err = error;
|
|
82
|
+
return {
|
|
83
|
+
job_id: finalJobId,
|
|
84
|
+
status: 'error',
|
|
85
|
+
message: `Failed to start batch execution: ${err.message}`,
|
|
86
|
+
error: err.message
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=runBatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runBatch.js","sourceRoot":"","sources":["../../../src/tools/runBatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { MCPConfig } from '../engine/workspace.js';
|
|
2
|
+
interface SaveParameterArgs {
|
|
3
|
+
category: string;
|
|
4
|
+
parameter_id: string;
|
|
5
|
+
content: any;
|
|
6
|
+
markdown_content?: string;
|
|
7
|
+
}
|
|
8
|
+
interface SaveParameterResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
valid: boolean;
|
|
11
|
+
errors: string[];
|
|
12
|
+
message: string;
|
|
13
|
+
paths?: {
|
|
14
|
+
json: string;
|
|
15
|
+
markdown: string | null;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create or edit a parameter JSON snippet with validation
|
|
20
|
+
*/
|
|
21
|
+
export declare function saveParameter(config: MCPConfig, args: SaveParameterArgs): Promise<SaveParameterResult>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=saveParameter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saveParameter.d.ts","sourceRoot":"","sources":["../../../src/tools/saveParameter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIxD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAkG9B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { initWasm, getWasmModule } from '../engine/wasm.js';
|
|
4
|
+
import { loadSchema, loadBaseline, loadSimplifiedExample, ensureDir } from '../utils/fileLoader.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create or edit a parameter JSON snippet with validation
|
|
7
|
+
*/
|
|
8
|
+
export async function saveParameter(config, args) {
|
|
9
|
+
const { workspace } = config;
|
|
10
|
+
const { category, parameter_id, content, markdown_content } = args;
|
|
11
|
+
if (!category) {
|
|
12
|
+
throw new Error('category is required');
|
|
13
|
+
}
|
|
14
|
+
if (!parameter_id) {
|
|
15
|
+
throw new Error('parameter_id is required');
|
|
16
|
+
}
|
|
17
|
+
if (!content) {
|
|
18
|
+
throw new Error('content is required');
|
|
19
|
+
}
|
|
20
|
+
// Validate JSON syntax
|
|
21
|
+
let jsonContent;
|
|
22
|
+
try {
|
|
23
|
+
jsonContent = typeof content === 'string' ? JSON.parse(content) : content;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const err = error;
|
|
27
|
+
throw new Error(`Invalid JSON syntax: ${err.message}`);
|
|
28
|
+
}
|
|
29
|
+
// Initialize WASM if not already done
|
|
30
|
+
let wasm;
|
|
31
|
+
try {
|
|
32
|
+
await initWasm();
|
|
33
|
+
wasm = getWasmModule();
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
const err = error;
|
|
37
|
+
throw new Error(`WASM initialization failed: ${err.message}`);
|
|
38
|
+
}
|
|
39
|
+
if (!wasm.validate_snippet_js) {
|
|
40
|
+
throw new Error('WASM validate_snippet_js function not available');
|
|
41
|
+
}
|
|
42
|
+
// Load required files for validation
|
|
43
|
+
const [schema, baseline, simplifiedExample] = await Promise.all([
|
|
44
|
+
loadSchema(workspace),
|
|
45
|
+
loadBaseline(workspace),
|
|
46
|
+
loadSimplifiedExample(workspace, category)
|
|
47
|
+
]);
|
|
48
|
+
// Prepare validation inputs
|
|
49
|
+
const snippetJson = JSON.stringify(jsonContent);
|
|
50
|
+
const schemaJson = JSON.stringify(schema);
|
|
51
|
+
const baselineJson = JSON.stringify(baseline);
|
|
52
|
+
const simplifiedExampleJson = simplifiedExample ? JSON.stringify(simplifiedExample) : null;
|
|
53
|
+
// Call WASM validation
|
|
54
|
+
const validationResult = wasm.validate_snippet_js(category, snippetJson, schemaJson, baselineJson, simplifiedExampleJson);
|
|
55
|
+
const validation = JSON.parse(validationResult);
|
|
56
|
+
if (!validation.ok) {
|
|
57
|
+
return {
|
|
58
|
+
success: false,
|
|
59
|
+
valid: false,
|
|
60
|
+
errors: validation.errors.map((e) => e.message || String(e)),
|
|
61
|
+
message: `Validation failed: ${validation.errors.map((e) => e.message || String(e)).join('; ')}`
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// Validation passed - save files
|
|
65
|
+
const paramDir = path.join(workspace, 'input', 'batch_parameters', category);
|
|
66
|
+
await ensureDir(paramDir);
|
|
67
|
+
const jsonPath = path.join(paramDir, `${parameter_id}.json`);
|
|
68
|
+
const jsonContentString = JSON.stringify(jsonContent, null, 2);
|
|
69
|
+
await fs.writeFile(jsonPath, jsonContentString, 'utf-8');
|
|
70
|
+
// Save markdown if provided
|
|
71
|
+
let markdownPath = null;
|
|
72
|
+
if (markdown_content) {
|
|
73
|
+
markdownPath = path.join(paramDir, `${parameter_id}.md`);
|
|
74
|
+
await fs.writeFile(markdownPath, markdown_content, 'utf-8');
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
success: true,
|
|
78
|
+
valid: true,
|
|
79
|
+
errors: [],
|
|
80
|
+
message: `Parameter '${parameter_id}' saved successfully in category '${category}'`,
|
|
81
|
+
paths: {
|
|
82
|
+
json: jsonPath,
|
|
83
|
+
markdown: markdownPath
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=saveParameter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saveParameter.js","sourceRoot":"","sources":["../../../src/tools/saveParameter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MCPConfig } from '../engine/workspace.js';
|
|
2
|
+
interface ViewParameterArgs {
|
|
3
|
+
category: string;
|
|
4
|
+
parameter_id: string;
|
|
5
|
+
}
|
|
6
|
+
interface ViewParameterResult {
|
|
7
|
+
category: string;
|
|
8
|
+
parameter_id: string;
|
|
9
|
+
json: any;
|
|
10
|
+
markdown: string | null;
|
|
11
|
+
has_markdown: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* View a specific parameter JSON snippet and its markdown documentation
|
|
15
|
+
*/
|
|
16
|
+
export declare function viewParameter(config: MCPConfig, args: ViewParameterArgs): Promise<ViewParameterResult>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=viewParameter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewParameter.d.ts","sourceRoot":"","sources":["../../../src/tools/viewParameter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAgD9B"}
|