@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.
Files changed (74) hide show
  1. package/README.md +154 -0
  2. package/dist/bin/vulcan-mcp-helper.d.ts +9 -0
  3. package/dist/bin/vulcan-mcp-helper.d.ts.map +1 -0
  4. package/dist/bin/vulcan-mcp-helper.js +58 -0
  5. package/dist/bin/vulcan-mcp-helper.js.map +1 -0
  6. package/dist/src/engine/filesystem.d.ts +30 -0
  7. package/dist/src/engine/filesystem.d.ts.map +1 -0
  8. package/dist/src/engine/filesystem.js +61 -0
  9. package/dist/src/engine/filesystem.js.map +1 -0
  10. package/dist/src/engine/wasm.d.ts +23 -0
  11. package/dist/src/engine/wasm.d.ts.map +1 -0
  12. package/dist/src/engine/wasm.js +333 -0
  13. package/dist/src/engine/wasm.js.map +1 -0
  14. package/dist/src/engine/workspace.d.ts +23 -0
  15. package/dist/src/engine/workspace.d.ts.map +1 -0
  16. package/dist/src/engine/workspace.js +82 -0
  17. package/dist/src/engine/workspace.js.map +1 -0
  18. package/dist/src/server.d.ts +8 -0
  19. package/dist/src/server.d.ts.map +1 -0
  20. package/dist/src/server.js +166 -0
  21. package/dist/src/server.js.map +1 -0
  22. package/dist/src/tools/calculateMetrics.d.ts +31 -0
  23. package/dist/src/tools/calculateMetrics.d.ts.map +1 -0
  24. package/dist/src/tools/calculateMetrics.js +347 -0
  25. package/dist/src/tools/calculateMetrics.js.map +1 -0
  26. package/dist/src/tools/createBatchConfig.d.ts +25 -0
  27. package/dist/src/tools/createBatchConfig.d.ts.map +1 -0
  28. package/dist/src/tools/createBatchConfig.js +128 -0
  29. package/dist/src/tools/createBatchConfig.js.map +1 -0
  30. package/dist/src/tools/getBatchStatus.d.ts +23 -0
  31. package/dist/src/tools/getBatchStatus.d.ts.map +1 -0
  32. package/dist/src/tools/getBatchStatus.js +194 -0
  33. package/dist/src/tools/getBatchStatus.js.map +1 -0
  34. package/dist/src/tools/index.d.ts +67 -0
  35. package/dist/src/tools/index.d.ts.map +1 -0
  36. package/dist/src/tools/index.js +361 -0
  37. package/dist/src/tools/index.js.map +1 -0
  38. package/dist/src/tools/listBatchModels.d.ts +25 -0
  39. package/dist/src/tools/listBatchModels.d.ts.map +1 -0
  40. package/dist/src/tools/listBatchModels.js +86 -0
  41. package/dist/src/tools/listBatchModels.js.map +1 -0
  42. package/dist/src/tools/listCsvColumns.d.ts +27 -0
  43. package/dist/src/tools/listCsvColumns.d.ts.map +1 -0
  44. package/dist/src/tools/listCsvColumns.js +93 -0
  45. package/dist/src/tools/listCsvColumns.js.map +1 -0
  46. package/dist/src/tools/listParameters.d.ts +25 -0
  47. package/dist/src/tools/listParameters.d.ts.map +1 -0
  48. package/dist/src/tools/listParameters.js +64 -0
  49. package/dist/src/tools/listParameters.js.map +1 -0
  50. package/dist/src/tools/runBatch.d.ts +19 -0
  51. package/dist/src/tools/runBatch.d.ts.map +1 -0
  52. package/dist/src/tools/runBatch.js +90 -0
  53. package/dist/src/tools/runBatch.js.map +1 -0
  54. package/dist/src/tools/saveParameter.d.ts +23 -0
  55. package/dist/src/tools/saveParameter.d.ts.map +1 -0
  56. package/dist/src/tools/saveParameter.js +87 -0
  57. package/dist/src/tools/saveParameter.js.map +1 -0
  58. package/dist/src/tools/viewParameter.d.ts +18 -0
  59. package/dist/src/tools/viewParameter.d.ts.map +1 -0
  60. package/dist/src/tools/viewParameter.js +51 -0
  61. package/dist/src/tools/viewParameter.js.map +1 -0
  62. package/dist/src/utils/batchConfig.d.ts +32 -0
  63. package/dist/src/utils/batchConfig.d.ts.map +1 -0
  64. package/dist/src/utils/batchConfig.js +130 -0
  65. package/dist/src/utils/batchConfig.js.map +1 -0
  66. package/dist/src/utils/fileLoader.d.ts +21 -0
  67. package/dist/src/utils/fileLoader.d.ts.map +1 -0
  68. package/dist/src/utils/fileLoader.js +86 -0
  69. package/dist/src/utils/fileLoader.js.map +1 -0
  70. package/package.json +47 -0
  71. package/wasm/snippets/wasm-bindgen-rayon-38edf6e439f6d70d/src/workerHelpers.no-bundler.js +77 -0
  72. package/wasm/wasm_version.json +8 -0
  73. package/wasm/wasm_wrapper.js +1190 -0
  74. package/wasm/wasm_wrapper_bg.wasm +0 -0
@@ -0,0 +1,31 @@
1
+ import type { MCPConfig } from '../engine/workspace.js';
2
+ interface MetricDefinition {
3
+ id?: string;
4
+ metric_id?: string;
5
+ name?: string;
6
+ column?: string;
7
+ function?: string;
8
+ type?: string;
9
+ comparator?: string;
10
+ threshold?: number;
11
+ }
12
+ interface CalculateMetricsArgs {
13
+ config_name: string;
14
+ model_names: string[];
15
+ metric_definitions: MetricDefinition[];
16
+ time_range?: {
17
+ start?: number;
18
+ end?: number;
19
+ };
20
+ }
21
+ interface CalculateMetricsResult {
22
+ metrics: any[];
23
+ total_models: number;
24
+ total_metrics: number;
25
+ }
26
+ /**
27
+ * Calculate metrics by aggregating columns from simulation results
28
+ */
29
+ export declare function calculateMetrics(config: MCPConfig, args: CalculateMetricsArgs): Promise<CalculateMetricsResult>;
30
+ export {};
31
+ //# sourceMappingURL=calculateMetrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculateMetrics.d.ts","sourceRoot":"","sources":["../../../src/tools/calculateMetrics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,UAAU,gBAAgB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;IACvC,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,UAAU,sBAAsB;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAiND;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAsMjC"}
@@ -0,0 +1,347 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { initWasm, getWasmModule } from '../engine/wasm.js';
4
+ /**
5
+ * Parse CSV content into CoreResultsData format (matching browser app's CsvParser)
6
+ * CSV structure: Row 1 = headers, Row 2 = units, Row 3+ = data (first column is Timestep)
7
+ */
8
+ function parseCoreResults(csvContent, modelName, configName) {
9
+ console.error(`[parseCoreResults] Parsing CSV for model: ${modelName}`);
10
+ const lines = csvContent.split('\n').filter(line => line.trim());
11
+ console.error(`[parseCoreResults] Total lines after filtering: ${lines.length}`);
12
+ if (lines.length < 2) {
13
+ throw new Error('CSV must have at least headers and units rows');
14
+ }
15
+ // Parse headers (row 1)
16
+ const headers = lines[0].split(',').map(h => h.trim());
17
+ console.error(`[parseCoreResults] Headers count: ${headers.length}`);
18
+ console.error(`[parseCoreResults] First 5 headers: [${headers.slice(0, 5).join(', ')}]`);
19
+ // Parse units (row 2)
20
+ const units = lines[1].split(',').map(u => u.trim());
21
+ console.error(`[parseCoreResults] Units count: ${units.length}`);
22
+ // Initialize data structures
23
+ const timestamps = [];
24
+ const columnsMap = {};
25
+ const columnOrder = [];
26
+ const columnUnits = [];
27
+ // Initialize columns (skip first column which is Timestep)
28
+ for (let i = 1; i < headers.length; i++) {
29
+ const header = headers[i];
30
+ columnsMap[header] = [];
31
+ columnOrder.push(header);
32
+ columnUnits.push(i < units.length ? units[i] : '');
33
+ }
34
+ // Process data rows (starting from row 3)
35
+ let skippedRows = 0;
36
+ let processedRows = 0;
37
+ for (let rowIndex = 2; rowIndex < lines.length; rowIndex++) {
38
+ const row = lines[rowIndex].split(',').map(v => v.trim());
39
+ // Skip empty rows
40
+ if (row.length === 0 || (row.length === 1 && !row[0])) {
41
+ skippedRows++;
42
+ continue;
43
+ }
44
+ // Parse timestep (first column) - ensure it's a number (u64 in Rust)
45
+ let timestep = null;
46
+ if (row.length > 0) {
47
+ const ts = parseInt(row[0], 10);
48
+ if (!isNaN(ts) && ts >= 0) {
49
+ timestep = ts;
50
+ timestamps.push(ts);
51
+ }
52
+ else {
53
+ skippedRows++;
54
+ continue;
55
+ }
56
+ }
57
+ // Only process data columns if we have a valid timestep
58
+ if (timestep !== null) {
59
+ processedRows++;
60
+ // Parse data columns
61
+ for (let colIndex = 1; colIndex < headers.length && colIndex < row.length; colIndex++) {
62
+ const header = headers[colIndex];
63
+ if (columnsMap[header]) {
64
+ const value = parseFloat(row[colIndex]);
65
+ columnsMap[header].push(isNaN(value) ? 0.0 : value);
66
+ }
67
+ }
68
+ }
69
+ }
70
+ console.error(`[parseCoreResults] Processed ${processedRows} data rows, skipped ${skippedRows} rows`);
71
+ // Create metadata (snake_case for WASM compatibility)
72
+ const metadata = {
73
+ model_name: modelName,
74
+ config_name: configName.replace('.json', ''),
75
+ total_points: timestamps.length,
76
+ sample_rate: 1800, // Default to 30 minutes in seconds
77
+ };
78
+ console.error(`[parseCoreResults] Parsed structure:`);
79
+ console.error(` - Timestamps: ${timestamps.length}`);
80
+ console.error(` - Columns: ${Object.keys(columnsMap).length}`);
81
+ console.error(` - Column order: ${columnOrder.length}`);
82
+ console.error(` - Column units: ${columnUnits.length}`);
83
+ console.error(` - Metadata:`, JSON.stringify(metadata, null, 2));
84
+ // Verify column data lengths match
85
+ const firstColName = columnOrder[0];
86
+ if (firstColName && columnsMap[firstColName]) {
87
+ const firstColLength = columnsMap[firstColName].length;
88
+ console.error(` - First column "${firstColName}" has ${firstColLength} values`);
89
+ if (firstColLength !== timestamps.length) {
90
+ console.error(` - WARNING: Column length (${firstColLength}) doesn't match timestamps length (${timestamps.length})`);
91
+ }
92
+ }
93
+ return {
94
+ timestamps,
95
+ columns: columnsMap,
96
+ column_order: columnOrder,
97
+ column_units: columnUnits,
98
+ metadata,
99
+ // Compliance fields (null for non-compliance runs) - use null not undefined for Rust Option types
100
+ dwelling_emission_rate: null,
101
+ dwelling_primary_energy_rate: null,
102
+ dwelling_fabric_energy_efficiency: null,
103
+ };
104
+ }
105
+ /**
106
+ * Format metric definitions as "column|function" strings (matching WASM expectations)
107
+ */
108
+ const CONDITIONAL_FUNCS = new Set(['sumif', 'averageif', 'countif']);
109
+ const VALID_COMPARATORS = new Set(['>=', '<=', '>', '<', '=']);
110
+ function buildFunctionSegment(def) {
111
+ const rawFunc = (def.function || def.type || 'sum').toString();
112
+ const normalized = rawFunc.toLowerCase();
113
+ if (normalized === 'cost') {
114
+ throw new Error('Cost metrics are not supported via MCP yet. Please remove cost metrics or compute them in the desktop app.');
115
+ }
116
+ if (!CONDITIONAL_FUNCS.has(normalized)) {
117
+ return normalized;
118
+ }
119
+ const comparator = def.comparator || '>=';
120
+ if (!VALID_COMPARATORS.has(comparator)) {
121
+ throw new Error(`Invalid comparator "${comparator}" for ${rawFunc}. Use one of ${Array.from(VALID_COMPARATORS).join(', ')}`);
122
+ }
123
+ if (def.threshold === undefined || def.threshold === null || Number.isNaN(Number(def.threshold))) {
124
+ throw new Error(`threshold is required for ${rawFunc} metrics`);
125
+ }
126
+ return `${normalized}${comparator}${def.threshold}`;
127
+ }
128
+ function formatMetricDefinitions(metricDefinitions) {
129
+ if (!Array.isArray(metricDefinitions)) {
130
+ throw new Error(`metric_definitions must be an array, got ${typeof metricDefinitions}`);
131
+ }
132
+ const encodedMetrics = [];
133
+ const metadata = [];
134
+ metricDefinitions.forEach((def, index) => {
135
+ if (typeof def === 'string') {
136
+ const encoded = def.includes('|') ? def : `${def}|sum`;
137
+ encodedMetrics.push({ name: encoded });
138
+ const [column, func = 'sum'] = encoded.split('|');
139
+ metadata.push({
140
+ id: def,
141
+ name: def,
142
+ column,
143
+ function: func,
144
+ isCompliance: func.toLowerCase() === 'compliance'
145
+ });
146
+ return;
147
+ }
148
+ const column = def.column || (def.name && def.name.includes('|') ? def.name.split('|')[0] : def.name);
149
+ if (!column) {
150
+ throw new Error(`Metric definition at index ${index} missing column or name. Got: ${JSON.stringify(def)}`);
151
+ }
152
+ const funcSegment = def.name && def.name.includes('|') && !def.function
153
+ ? def.name.split('|')[1]
154
+ : buildFunctionSegment(def);
155
+ const encoded = `${column}|${funcSegment}`;
156
+ encodedMetrics.push({ name: encoded });
157
+ metadata.push({
158
+ id: def.id || def.metric_id || `${column}_${funcSegment}`,
159
+ name: def.name || def.id || column,
160
+ column,
161
+ function: funcSegment,
162
+ comparator: def.comparator,
163
+ threshold: def.threshold,
164
+ isCompliance: funcSegment.toLowerCase() === 'compliance'
165
+ });
166
+ });
167
+ return { encodedMetrics, metadata };
168
+ }
169
+ /**
170
+ * Calculate metrics by aggregating columns from simulation results
171
+ */
172
+ export async function calculateMetrics(config, args) {
173
+ console.error('[calculateMetrics] ===== START =====');
174
+ console.error('[calculateMetrics] Input args:', JSON.stringify({
175
+ config_name: args.config_name,
176
+ model_names: args.model_names,
177
+ metric_definitions_count: args.metric_definitions?.length,
178
+ time_range: args.time_range
179
+ }, null, 2));
180
+ const { workspace } = config;
181
+ const { config_name, model_names, metric_definitions, time_range } = args;
182
+ if (!config_name) {
183
+ throw new Error('config_name is required');
184
+ }
185
+ if (!model_names || !Array.isArray(model_names) || model_names.length === 0) {
186
+ throw new Error('model_names is required and must be a non-empty array');
187
+ }
188
+ if (!metric_definitions || !Array.isArray(metric_definitions) || metric_definitions.length === 0) {
189
+ throw new Error('metric_definitions is required and must be a non-empty array');
190
+ }
191
+ console.error('[calculateMetrics] Initializing WASM...');
192
+ // Initialize WASM if not already done
193
+ let wasm;
194
+ try {
195
+ await initWasm();
196
+ wasm = getWasmModule();
197
+ console.error('[calculateMetrics] WASM initialized successfully');
198
+ }
199
+ catch (error) {
200
+ const err = error;
201
+ console.error('[calculateMetrics] WASM initialization failed:', err);
202
+ throw new Error(`WASM initialization failed: ${err.message}`);
203
+ }
204
+ if (!wasm.calculate_metrics_from_parsed_data) {
205
+ console.error('[calculateMetrics] ERROR: calculate_metrics_from_parsed_data not found in WASM module');
206
+ console.error('[calculateMetrics] Available WASM functions:', Object.keys(wasm).filter(k => typeof wasm[k] === 'function'));
207
+ throw new Error('WASM calculate_metrics_from_parsed_data function not available');
208
+ }
209
+ const outputDir = path.join(workspace, 'output');
210
+ const configOutputDir = path.join(outputDir, config_name.replace('.json', ''));
211
+ const cleanConfigName = config_name.replace('.json', '');
212
+ // Format metric definitions as "column|function" strings
213
+ console.error('[calculateMetrics] Raw metric definitions:', JSON.stringify(metric_definitions, null, 2));
214
+ const { encodedMetrics, metadata: metricMetadata } = formatMetricDefinitions(metric_definitions);
215
+ console.error('[calculateMetrics] Formatted metrics:', JSON.stringify(encodedMetrics, null, 2));
216
+ // Load CSV files and parse them
217
+ const allResults = [];
218
+ for (const modelName of model_names) {
219
+ // Try both CSV filename patterns: __results.csv and __core__results.csv
220
+ // Also check in result_* directories if configOutputDir doesn't exist
221
+ let csvPath = path.join(configOutputDir, `${modelName}__core__results.csv`);
222
+ let csvContent;
223
+ try {
224
+ csvContent = await fs.readFile(csvPath, 'utf-8');
225
+ }
226
+ catch (e1) {
227
+ // Try alternative filename pattern
228
+ csvPath = path.join(configOutputDir, `${modelName}__results.csv`);
229
+ try {
230
+ csvContent = await fs.readFile(csvPath, 'utf-8');
231
+ }
232
+ catch (e2) {
233
+ // Try looking in result_* directories
234
+ try {
235
+ const files = await fs.readdir(outputDir);
236
+ const resultDirs = files.filter(f => f.startsWith(`result_${cleanConfigName}_`));
237
+ for (const resultDir of resultDirs) {
238
+ const altPath1 = path.join(outputDir, resultDir, `${modelName}__core__results.csv`);
239
+ const altPath2 = path.join(outputDir, resultDir, `${modelName}__results.csv`);
240
+ try {
241
+ csvContent = await fs.readFile(altPath1, 'utf-8');
242
+ csvPath = altPath1;
243
+ break;
244
+ }
245
+ catch {
246
+ try {
247
+ csvContent = await fs.readFile(altPath2, 'utf-8');
248
+ csvPath = altPath2;
249
+ break;
250
+ }
251
+ catch { }
252
+ }
253
+ }
254
+ if (!csvContent) {
255
+ throw e2;
256
+ }
257
+ }
258
+ catch (e3) {
259
+ throw new Error(`CSV file not found for model ${modelName}. Tried: ${csvPath}`);
260
+ }
261
+ }
262
+ }
263
+ if (!csvContent) {
264
+ throw new Error(`CSV file not found for model ${modelName}. Tried: ${csvPath}`);
265
+ }
266
+ try {
267
+ console.error(`[calculateMetrics] Processing model: ${modelName}`);
268
+ const coreResultsData = parseCoreResults(csvContent, modelName, config_name);
269
+ // Validate parsed data
270
+ if (!coreResultsData.timestamps || coreResultsData.timestamps.length === 0) {
271
+ throw new Error(`No timestamps found in CSV for model ${modelName}`);
272
+ }
273
+ if (!coreResultsData.columns || Object.keys(coreResultsData.columns).length === 0) {
274
+ throw new Error(`No columns found in CSV for model ${modelName}`);
275
+ }
276
+ // Prepare JSON for WASM
277
+ const dataJson = JSON.stringify(coreResultsData);
278
+ const metricsJson = JSON.stringify(encodedMetrics);
279
+ const timeRangeJson = time_range ? JSON.stringify(time_range) : null;
280
+ const tariffJson = null; // TODO: Support tariff if needed
281
+ // Validate column exists for metrics
282
+ const missingColumns = [];
283
+ encodedMetrics.forEach((metric, idx) => {
284
+ const columnName = metric.name.split('|')[0];
285
+ const meta = metricMetadata[idx];
286
+ if (meta?.isCompliance) {
287
+ return;
288
+ }
289
+ if (!coreResultsData.columns[columnName]) {
290
+ missingColumns.push(columnName);
291
+ }
292
+ });
293
+ if (missingColumns.length > 0) {
294
+ const availableColumns = Object.keys(coreResultsData.columns).slice(0, 10);
295
+ throw new Error(`Columns not found in CSV: ${missingColumns.join(', ')}. Available columns: ${availableColumns.join(', ')}...`);
296
+ }
297
+ // Call WASM metrics calculation
298
+ let resultJson;
299
+ try {
300
+ resultJson = wasm.calculate_metrics_from_parsed_data(dataJson, metricsJson, timeRangeJson || undefined, tariffJson || undefined);
301
+ }
302
+ catch (wasmError) {
303
+ const err = wasmError;
304
+ throw new Error(`WASM calculation failed: ${err.message}`);
305
+ }
306
+ if (!resultJson || typeof resultJson !== 'string') {
307
+ throw new Error(`WASM returned invalid result: ${typeof resultJson}`);
308
+ }
309
+ const results = JSON.parse(resultJson);
310
+ if (!Array.isArray(results)) {
311
+ throw new Error(`WASM returned non-array result: ${typeof results}`);
312
+ }
313
+ results.forEach((result, idx) => {
314
+ const meta = metricMetadata[idx] || {};
315
+ allResults.push({
316
+ id: meta.id || result.name,
317
+ name: meta.name || result.name,
318
+ column: meta.column || result.name.split('|')[0],
319
+ function: meta.function || result.name.split('|')[1] || 'sum',
320
+ comparator: meta.comparator,
321
+ threshold: meta.threshold,
322
+ value: result.value,
323
+ model_name: modelName
324
+ });
325
+ });
326
+ }
327
+ catch (error) {
328
+ const err = error;
329
+ if (err.code === 'ENOENT') {
330
+ console.warn(`CSV file not found for model ${modelName}: ${csvPath}`);
331
+ continue;
332
+ }
333
+ const errorMsg = err instanceof Error ? err.message : String(err);
334
+ console.error(`[calculateMetrics] Error processing model ${modelName}:`, errorMsg);
335
+ throw new Error(`Failed to process model ${modelName}: ${errorMsg}`);
336
+ }
337
+ }
338
+ console.error(`[calculateMetrics] ===== FINAL RESULTS =====`);
339
+ console.error(`[calculateMetrics] Total models processed: ${model_names.length}`);
340
+ console.error(`[calculateMetrics] Total metrics returned: ${allResults.length}`);
341
+ return {
342
+ metrics: allResults,
343
+ total_models: model_names.length,
344
+ total_metrics: allResults.length
345
+ };
346
+ }
347
+ //# sourceMappingURL=calculateMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculateMetrics.js","sourceRoot":"","sources":["../../../src/tools/calculateMetrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { MCPConfig } from '../engine/workspace.js';
2
+ interface CreateBatchConfigArgs {
3
+ config_name: string;
4
+ base_model: string;
5
+ weather_file: string;
6
+ wrapper?: string;
7
+ parameters: Record<string, string[]>;
8
+ }
9
+ interface CreateBatchConfigResult {
10
+ success: boolean;
11
+ valid: boolean;
12
+ errors?: string[];
13
+ warnings?: string[];
14
+ message: string;
15
+ config_path?: string;
16
+ permutations?: number;
17
+ structure?: any;
18
+ missingFiles?: any[];
19
+ }
20
+ /**
21
+ * Create a batch configuration with base model, weather file, wrapper, and parameters
22
+ */
23
+ export declare function createBatchConfig(config: MCPConfig, args: CreateBatchConfigArgs): Promise<CreateBatchConfigResult>;
24
+ export {};
25
+ //# sourceMappingURL=createBatchConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBatchConfig.d.ts","sourceRoot":"","sources":["../../../src/tools/createBatchConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,UAAU,qBAAqB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACtC;AAED,UAAU,uBAAuB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CAqIlC"}
@@ -0,0 +1,128 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { validateBatchConfigStructure, calculatePermutations, validateParameterFilesExist } from '../utils/batchConfig.js';
4
+ /**
5
+ * Create a batch configuration with base model, weather file, wrapper, and parameters
6
+ */
7
+ export async function createBatchConfig(config, args) {
8
+ const { workspace } = config;
9
+ const { config_name, base_model, weather_file, wrapper, parameters } = args;
10
+ if (!config_name) {
11
+ throw new Error('config_name is required');
12
+ }
13
+ if (!base_model) {
14
+ throw new Error('base_model is required');
15
+ }
16
+ if (!weather_file) {
17
+ throw new Error('weather_file is required');
18
+ }
19
+ if (!parameters || typeof parameters !== 'object') {
20
+ throw new Error('parameters is required and must be an object mapping category to parameter IDs array');
21
+ }
22
+ // Build batch config structure
23
+ // Use a default scenario name if not provided, or allow custom scenario structure
24
+ // Note: batch runner expects 'weather_files' (plural), not 'weather_file' (singular)
25
+ const batchConfig = {
26
+ scenario_1: {
27
+ base_json: [base_model],
28
+ weather_files: [weather_file], // Use plural to match batch runner expectations
29
+ ...(wrapper ? { model_wrappers: [wrapper] } : {}),
30
+ ...parameters
31
+ }
32
+ };
33
+ // Validate structure
34
+ const structureValidation = validateBatchConfigStructure(batchConfig);
35
+ if (!structureValidation.valid) {
36
+ return {
37
+ success: false,
38
+ valid: false,
39
+ errors: structureValidation.errors,
40
+ warnings: structureValidation.warnings,
41
+ message: `Config validation failed: ${structureValidation.errors.join('; ')}`
42
+ };
43
+ }
44
+ // Calculate permutations
45
+ const permutations = calculatePermutations(batchConfig);
46
+ if (permutations === null) {
47
+ return {
48
+ success: false,
49
+ valid: false,
50
+ errors: ['Failed to calculate permutations'],
51
+ message: 'Failed to calculate permutations for batch config'
52
+ };
53
+ }
54
+ if (permutations > 500) {
55
+ return {
56
+ success: false,
57
+ valid: false,
58
+ errors: [`Total permutations (${permutations}) exceeds maximum of 500`],
59
+ message: `Config would generate ${permutations} permutations, which exceeds the limit of 500`
60
+ };
61
+ }
62
+ // Validate that all parameter files exist
63
+ const fileValidation = await validateParameterFilesExist(workspace, batchConfig);
64
+ if (!fileValidation.valid) {
65
+ return {
66
+ success: false,
67
+ valid: false,
68
+ errors: fileValidation.errors,
69
+ missingFiles: fileValidation.missingFiles,
70
+ message: `Some parameter files are missing: ${fileValidation.errors.slice(0, 3).join('; ')}${fileValidation.errors.length > 3 ? '...' : ''}`
71
+ };
72
+ }
73
+ // Validate base model exists
74
+ const baseModelPath = path.join(workspace, 'input', 'batch_parameters', 'base_json', `${base_model}.json`);
75
+ try {
76
+ await fs.access(baseModelPath);
77
+ }
78
+ catch (error) {
79
+ return {
80
+ success: false,
81
+ valid: false,
82
+ errors: [`Base model '${base_model}' not found at ${baseModelPath}`],
83
+ message: `Base model file not found: ${base_model}`
84
+ };
85
+ }
86
+ // Validate weather file exists (check .epw extension)
87
+ const weatherFilePath = path.join(workspace, 'input', 'batch_parameters', 'weather_files', weather_file.endsWith('.epw') ? weather_file : `${weather_file}.epw`);
88
+ try {
89
+ await fs.access(weatherFilePath);
90
+ }
91
+ catch (error) {
92
+ return {
93
+ success: false,
94
+ valid: false,
95
+ errors: [`Weather file '${weather_file}' not found at ${weatherFilePath}`],
96
+ message: `Weather file not found: ${weather_file}`
97
+ };
98
+ }
99
+ // Save config file
100
+ const configDir = path.join(workspace, 'input', 'batch_configs');
101
+ await fs.mkdir(configDir, { recursive: true });
102
+ const configFileName = config_name.endsWith('.json') ? config_name : `${config_name}.json`;
103
+ const configPath = path.join(configDir, configFileName);
104
+ // Check if file exists
105
+ try {
106
+ await fs.access(configPath);
107
+ return {
108
+ success: false,
109
+ valid: false,
110
+ errors: [`Config file '${configFileName}' already exists`],
111
+ message: `Config file already exists. Use a different name or delete the existing file first.`
112
+ };
113
+ }
114
+ catch {
115
+ // File doesn't exist, proceed with save
116
+ }
117
+ const configJson = JSON.stringify(batchConfig, null, 2);
118
+ await fs.writeFile(configPath, configJson, 'utf-8');
119
+ return {
120
+ success: true,
121
+ valid: true,
122
+ message: `Batch config '${config_name}' created successfully`,
123
+ config_path: configPath,
124
+ permutations,
125
+ structure: batchConfig
126
+ };
127
+ }
128
+ //# sourceMappingURL=createBatchConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBatchConfig.js","sourceRoot":"","sources":["../../../src/tools/createBatchConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { MCPConfig } from '../engine/workspace.js';
2
+ interface GetBatchStatusArgs {
3
+ job_id?: string;
4
+ config_name?: string;
5
+ }
6
+ interface GetBatchStatusResult {
7
+ job_id?: string;
8
+ config_name?: string;
9
+ status: 'queued' | 'running' | 'completed' | 'error';
10
+ progress: number;
11
+ passes: number;
12
+ failures: number;
13
+ output_dir: string;
14
+ error: string | null;
15
+ batch_progress?: any;
16
+ sim_progress?: any;
17
+ }
18
+ /**
19
+ * Get the status, progress, and results summary of a batch run
20
+ */
21
+ export declare function getBatchStatus(config: MCPConfig, args?: GetBatchStatusArgs): Promise<GetBatchStatusResult>;
22
+ export {};
23
+ //# sourceMappingURL=getBatchStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBatchStatus.d.ts","sourceRoot":"","sources":["../../../src/tools/getBatchStatus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,oBAAoB,CAAC,CAuM/B"}