@vulcan-energy/mcp-helper 0.1.3 → 0.1.5

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 (80) hide show
  1. package/README.md +3 -3
  2. package/dist/src/tools/autoThermalBridges.d.ts +8 -0
  3. package/dist/src/tools/autoThermalBridges.d.ts.map +1 -0
  4. package/dist/src/tools/autoThermalBridges.js +12 -0
  5. package/dist/src/tools/autoThermalBridges.js.map +1 -0
  6. package/dist/src/tools/calculateMetrics.d.ts +1 -27
  7. package/dist/src/tools/calculateMetrics.d.ts.map +1 -1
  8. package/dist/src/tools/calculateMetrics.js +4 -430
  9. package/dist/src/tools/calculateMetrics.js.map +1 -1
  10. package/dist/src/tools/createBatchConfig.d.ts +1 -19
  11. package/dist/src/tools/createBatchConfig.d.ts.map +1 -1
  12. package/dist/src/tools/createBatchConfig.js +2 -122
  13. package/dist/src/tools/createBatchConfig.js.map +1 -1
  14. package/dist/src/tools/geometryCsvConversion.d.ts +3 -0
  15. package/dist/src/tools/geometryCsvConversion.d.ts.map +1 -0
  16. package/dist/src/tools/geometryCsvConversion.js +2 -0
  17. package/dist/src/tools/geometryCsvConversion.js.map +1 -0
  18. package/dist/src/tools/getBatchStatus.d.ts +1 -17
  19. package/dist/src/tools/getBatchStatus.d.ts.map +1 -1
  20. package/dist/src/tools/getBatchStatus.js +2 -191
  21. package/dist/src/tools/getBatchStatus.js.map +1 -1
  22. package/dist/src/tools/index.d.ts +25 -1
  23. package/dist/src/tools/index.d.ts.map +1 -1
  24. package/dist/src/tools/index.js +84 -3
  25. package/dist/src/tools/index.js.map +1 -1
  26. package/dist/src/tools/listBatchModels.d.ts +3 -20
  27. package/dist/src/tools/listBatchModels.d.ts.map +1 -1
  28. package/dist/src/tools/listBatchModels.js +3 -81
  29. package/dist/src/tools/listBatchModels.js.map +1 -1
  30. package/dist/src/tools/listCsvColumns.d.ts +3 -22
  31. package/dist/src/tools/listCsvColumns.d.ts.map +1 -1
  32. package/dist/src/tools/listCsvColumns.js +3 -88
  33. package/dist/src/tools/listCsvColumns.js.map +1 -1
  34. package/dist/src/tools/listParameters.d.ts +1 -19
  35. package/dist/src/tools/listParameters.d.ts.map +1 -1
  36. package/dist/src/tools/listParameters.js +2 -58
  37. package/dist/src/tools/listParameters.js.map +1 -1
  38. package/dist/src/tools/mergeCsvToJson.d.ts +2 -8
  39. package/dist/src/tools/mergeCsvToJson.d.ts.map +1 -1
  40. package/dist/src/tools/mergeCsvToJson.js +11 -121
  41. package/dist/src/tools/mergeCsvToJson.js.map +1 -1
  42. package/dist/src/tools/runBatch.d.ts +1 -13
  43. package/dist/src/tools/runBatch.d.ts.map +1 -1
  44. package/dist/src/tools/runBatch.js +6 -55
  45. package/dist/src/tools/runBatch.js.map +1 -1
  46. package/dist/src/tools/saveParameter.d.ts +1 -17
  47. package/dist/src/tools/saveParameter.d.ts.map +1 -1
  48. package/dist/src/tools/saveParameter.js +4 -68
  49. package/dist/src/tools/saveParameter.js.map +1 -1
  50. package/dist/src/tools/validateGeometryCsv.d.ts +8 -0
  51. package/dist/src/tools/validateGeometryCsv.d.ts.map +1 -0
  52. package/dist/src/tools/validateGeometryCsv.js +12 -0
  53. package/dist/src/tools/validateGeometryCsv.js.map +1 -0
  54. package/dist/src/tools/validateThermalBridges.d.ts +9 -0
  55. package/dist/src/tools/validateThermalBridges.d.ts.map +1 -0
  56. package/dist/src/tools/validateThermalBridges.js +13 -0
  57. package/dist/src/tools/validateThermalBridges.js.map +1 -0
  58. package/dist/src/tools/viewParameter.d.ts +1 -12
  59. package/dist/src/tools/viewParameter.d.ts.map +1 -1
  60. package/dist/src/tools/viewParameter.js +2 -45
  61. package/dist/src/tools/viewParameter.js.map +1 -1
  62. package/dist/src/utils/batchConfig.d.ts.map +1 -1
  63. package/dist/src/utils/batchConfig.js +17 -4
  64. package/dist/src/utils/batchConfig.js.map +1 -1
  65. package/dist/src/utils/defaultsPaths.d.ts +10 -0
  66. package/dist/src/utils/defaultsPaths.d.ts.map +1 -0
  67. package/dist/src/utils/defaultsPaths.js +47 -0
  68. package/dist/src/utils/defaultsPaths.js.map +1 -0
  69. package/dist/src/utils/fileLoader.d.ts +4 -3
  70. package/dist/src/utils/fileLoader.d.ts.map +1 -1
  71. package/dist/src/utils/fileLoader.js +26 -36
  72. package/dist/src/utils/fileLoader.js.map +1 -1
  73. package/dist/src/utils/schemaPaths.d.ts +2 -0
  74. package/dist/src/utils/schemaPaths.d.ts.map +1 -0
  75. package/dist/src/utils/schemaPaths.js +12 -0
  76. package/dist/src/utils/schemaPaths.js.map +1 -0
  77. package/package.json +2 -1
  78. package/wasm/wasm_version.json +5 -4
  79. package/wasm/wasm_wrapper.js +869 -790
  80. package/wasm/wasm_wrapper_bg.wasm +0 -0
package/README.md CHANGED
@@ -30,7 +30,7 @@ This creates `vulcan-mcp-config.json` in your workspace root with:
30
30
  ```json
31
31
  {
32
32
  "workspace": ".",
33
- "license_token": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9..."
33
+ "license_token": "<license-token>"
34
34
  }
35
35
  ```
36
36
 
@@ -259,8 +259,8 @@ Convert geometry CSV files to JSON format.
259
259
  **Parameters:**
260
260
  - `csv_path` (required, string): Path to CSV file (relative to workspace or absolute)
261
261
  - `output_path` (optional, string): Output JSON path (defaults to input/batch_parameters/base_json/{csv_filename}.json)
262
- - `schema_path` (optional, string): Custom schema path (defaults to input_core_allowing_fhs.schema.json)
263
- - `defaults_path` (optional, string): Custom defaults path (defaults to utility/defaults_template.json)
262
+ - `schema_path` (optional, string): Custom schema path (defaults to the core schema with workspace fallbacks)
263
+ - `defaults_path` (optional, string): Custom defaults path (defaults to `input/batch_parameters/base_json/defaults_template.json`)
264
264
 
265
265
  **Example:**
266
266
  ```json
@@ -0,0 +1,8 @@
1
+ import { type AutoThermalBridgeArgs, type AutoThermalBridgeResult } from '@repo/workspace-tools';
2
+ import type { MCPConfig } from '../engine/workspace.js';
3
+ export interface AutoThermalBridgesArgs {
4
+ csv_path: string;
5
+ mode?: AutoThermalBridgeArgs['mode'];
6
+ }
7
+ export declare function generateAutoThermalBridges(config: MCPConfig, args: AutoThermalBridgesArgs): Promise<AutoThermalBridgeResult>;
8
+ //# sourceMappingURL=autoThermalBridges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoThermalBridges.d.ts","sourceRoot":"","sources":["../../../src/tools/autoThermalBridges.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,uBAAuB,CAAC,CAQlC"}
@@ -0,0 +1,12 @@
1
+ import { generateAutoThermalBridges as generateWorkspaceAutoThermalBridges, } from '@repo/workspace-tools';
2
+ import path from 'node:path';
3
+ export async function generateAutoThermalBridges(config, args) {
4
+ return generateWorkspaceAutoThermalBridges({
5
+ csvPath: path.isAbsolute(args.csv_path)
6
+ ? args.csv_path
7
+ : path.join(config.workspace, args.csv_path),
8
+ mode: args.mode,
9
+ repoRoot: process.cwd(),
10
+ });
11
+ }
12
+ //# sourceMappingURL=autoThermalBridges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoThermalBridges.js","sourceRoot":"","sources":["../../../src/tools/autoThermalBridges.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,IAAI,mCAAmC,GAGlE,MAAM,uBAAuB,CAAC;AAC/B,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAiB,EACjB,IAA4B;IAE5B,OAAO,mCAAmC,CAAC;QACzC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,QAAQ;YACf,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE;KACxB,CAAC,CAAC;AACL,CAAC"}
@@ -1,33 +1,7 @@
1
+ import { type CalculateMetricsArgs, type CalculateMetricsResult } from '@repo/workspace-tools';
1
2
  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
- tariff_file_path?: string;
21
- tariff_column_index?: number;
22
- }
23
- interface CalculateMetricsResult {
24
- metrics: any[];
25
- total_models: number;
26
- total_metrics: number;
27
- }
28
3
  /**
29
4
  * Calculate metrics by aggregating columns from simulation results
30
5
  */
31
6
  export declare function calculateMetrics(config: MCPConfig, args: CalculateMetricsArgs): Promise<CalculateMetricsResult>;
32
- export {};
33
7
  //# sourceMappingURL=calculateMetrics.d.ts.map
@@ -1 +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;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,sBAAsB;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AA2SD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CA8NjC"}
1
+ {"version":3,"file":"calculateMetrics.d.ts","sourceRoot":"","sources":["../../../src/tools/calculateMetrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAiBjC"}
@@ -1,449 +1,23 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
1
+ import { calculateMetrics as calculateWorkspaceMetrics, } from '@repo/workspace-tools';
3
2
  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 headerLine = lines[0];
17
- if (!headerLine) {
18
- throw new Error('CSV header row is missing');
19
- }
20
- const headers = headerLine.split(',').map(h => h.trim());
21
- console.error(`[parseCoreResults] Headers count: ${headers.length}`);
22
- console.error(`[parseCoreResults] First 5 headers: [${headers.slice(0, 5).join(', ')}]`);
23
- // Parse units (row 2)
24
- const unitLine = lines[1];
25
- if (!unitLine) {
26
- throw new Error('CSV units row is missing');
27
- }
28
- const units = unitLine.split(',').map(u => u.trim());
29
- console.error(`[parseCoreResults] Units count: ${units.length}`);
30
- // Initialize data structures
31
- const timestamps = [];
32
- const columnsMap = {};
33
- const columnOrder = [];
34
- const columnUnits = [];
35
- // Initialize columns (skip first column which is Timestep)
36
- for (let i = 1; i < headers.length; i++) {
37
- const header = headers[i];
38
- if (!header)
39
- continue;
40
- columnsMap[header] = [];
41
- columnOrder.push(header);
42
- columnUnits.push(i < units.length ? (units[i] || '') : '');
43
- }
44
- // Process data rows (starting from row 3)
45
- let skippedRows = 0;
46
- let processedRows = 0;
47
- for (let rowIndex = 2; rowIndex < lines.length; rowIndex++) {
48
- const line = lines[rowIndex];
49
- if (!line)
50
- continue;
51
- const row = line.split(',').map(v => v.trim());
52
- // Skip empty rows
53
- if (row.length === 0 || (row.length === 1 && !row[0])) {
54
- skippedRows++;
55
- continue;
56
- }
57
- // Parse timestep (first column) - ensure it's a number (u64 in Rust)
58
- let timestep = null;
59
- if (row.length > 0) {
60
- const tsValue = row[0];
61
- if (!tsValue) {
62
- skippedRows++;
63
- continue;
64
- }
65
- const ts = parseInt(tsValue, 10);
66
- if (!isNaN(ts) && ts >= 0) {
67
- timestep = ts;
68
- timestamps.push(ts);
69
- }
70
- else {
71
- skippedRows++;
72
- continue;
73
- }
74
- }
75
- // Only process data columns if we have a valid timestep
76
- if (timestep !== null) {
77
- processedRows++;
78
- // Parse data columns
79
- for (let colIndex = 1; colIndex < headers.length && colIndex < row.length; colIndex++) {
80
- const header = headers[colIndex];
81
- if (!header || !columnsMap[header])
82
- continue;
83
- const rowValue = row[colIndex];
84
- if (rowValue === undefined)
85
- continue;
86
- const value = parseFloat(rowValue);
87
- columnsMap[header].push(isNaN(value) ? 0.0 : value);
88
- }
89
- }
90
- }
91
- console.error(`[parseCoreResults] Processed ${processedRows} data rows, skipped ${skippedRows} rows`);
92
- // Create metadata (snake_case for WASM compatibility)
93
- const metadata = {
94
- model_name: modelName,
95
- config_name: configName.replace('.json', ''),
96
- total_points: timestamps.length,
97
- sample_rate: 1800, // Default to 30 minutes in seconds
98
- };
99
- console.error(`[parseCoreResults] Parsed structure:`);
100
- console.error(` - Timestamps: ${timestamps.length}`);
101
- console.error(` - Columns: ${Object.keys(columnsMap).length}`);
102
- console.error(` - Column order: ${columnOrder.length}`);
103
- console.error(` - Column units: ${columnUnits.length}`);
104
- console.error(` - Metadata:`, JSON.stringify(metadata, null, 2));
105
- // Verify column data lengths match
106
- const firstColName = columnOrder[0];
107
- if (firstColName && columnsMap[firstColName]) {
108
- const firstColLength = columnsMap[firstColName].length;
109
- console.error(` - First column "${firstColName}" has ${firstColLength} values`);
110
- if (firstColLength !== timestamps.length) {
111
- console.error(` - WARNING: Column length (${firstColLength}) doesn't match timestamps length (${timestamps.length})`);
112
- }
113
- }
114
- return {
115
- timestamps,
116
- columns: columnsMap,
117
- column_order: columnOrder,
118
- column_units: columnUnits,
119
- metadata,
120
- // Compliance fields (null for non-compliance runs) - use null not undefined for Rust Option types
121
- dwelling_emission_rate: null,
122
- dwelling_primary_energy_rate: null,
123
- dwelling_fabric_energy_efficiency: null,
124
- };
125
- }
126
- /**
127
- * Format metric definitions as "column|function" strings (matching WASM expectations)
128
- */
129
- const CONDITIONAL_FUNCS = new Set(['sumif', 'averageif', 'countif']);
130
- const VALID_COMPARATORS = new Set(['>=', '<=', '>', '<', '=']);
131
- function buildFunctionSegment(def) {
132
- const rawFunc = (def.function || def.type || 'sum').toString();
133
- const normalized = rawFunc.toLowerCase();
134
- // Cost metrics are now supported (requires tariff_file_path and tariff_column_index)
135
- if (normalized === 'cost') {
136
- return 'cost';
137
- }
138
- if (!CONDITIONAL_FUNCS.has(normalized)) {
139
- return normalized;
140
- }
141
- const comparator = def.comparator || '>=';
142
- if (!VALID_COMPARATORS.has(comparator)) {
143
- throw new Error(`Invalid comparator "${comparator}" for ${rawFunc}. Use one of ${Array.from(VALID_COMPARATORS).join(', ')}`);
144
- }
145
- if (def.threshold === undefined || def.threshold === null || Number.isNaN(Number(def.threshold))) {
146
- throw new Error(`threshold is required for ${rawFunc} metrics`);
147
- }
148
- return `${normalized}${comparator}${def.threshold}`;
149
- }
150
- function formatMetricDefinitions(metricDefinitions) {
151
- if (!Array.isArray(metricDefinitions)) {
152
- throw new Error(`metric_definitions must be an array, got ${typeof metricDefinitions}`);
153
- }
154
- const encodedMetrics = [];
155
- const metadata = [];
156
- metricDefinitions.forEach((def, index) => {
157
- if (typeof def === 'string') {
158
- const encoded = def.includes('|') ? def : `${def}|sum`;
159
- encodedMetrics.push({ name: encoded });
160
- const [column, func = 'sum'] = encoded.split('|');
161
- metadata.push({
162
- id: def,
163
- name: def,
164
- column,
165
- function: func,
166
- isCompliance: func.toLowerCase() === 'compliance'
167
- });
168
- return;
169
- }
170
- const column = def.column || (def.name && def.name.includes('|') ? def.name.split('|')[0] : def.name);
171
- if (!column) {
172
- throw new Error(`Metric definition at index ${index} missing column or name. Got: ${JSON.stringify(def)}`);
173
- }
174
- const funcSegment = def.name && def.name.includes('|') && !def.function
175
- ? (def.name.split('|')[1] || 'sum')
176
- : buildFunctionSegment(def);
177
- if (!funcSegment) {
178
- throw new Error(`Metric definition at index ${index} missing function segment. Got: ${JSON.stringify(def)}`);
179
- }
180
- const encoded = `${column}|${funcSegment}`;
181
- encodedMetrics.push({ name: encoded });
182
- metadata.push({
183
- id: def.id || def.metric_id || `${column}_${funcSegment}`,
184
- name: def.name || def.id || column,
185
- column,
186
- function: funcSegment,
187
- comparator: def.comparator,
188
- threshold: def.threshold,
189
- isCompliance: funcSegment.toLowerCase() === 'compliance'
190
- });
191
- });
192
- return { encodedMetrics, metadata };
193
- }
194
- /**
195
- * Load tariff data from CSV file (similar to browser implementation)
196
- * @param tariffFilePath - Path to tariff CSV file (can be relative to workspace or absolute)
197
- * @param columnIndex - Zero-based index of the tariff column
198
- * @param workspacePath - Workspace root path for resolving relative paths
199
- * @returns Array of tariff rates (17,520 values for half-hourly year)
200
- */
201
- async function loadTariffData(tariffFilePath, columnIndex, workspacePath) {
202
- console.error(`[loadTariffData] Loading tariff from: ${tariffFilePath}, column: ${columnIndex}`);
203
- // Resolve path: if relative, resolve against workspace; if absolute, use as-is
204
- const resolvedPath = path.isAbsolute(tariffFilePath)
205
- ? tariffFilePath
206
- : path.resolve(workspacePath, tariffFilePath);
207
- console.error(`[loadTariffData] Resolved path: ${resolvedPath}`);
208
- // Read CSV file
209
- let csvContent;
210
- try {
211
- csvContent = await fs.readFile(resolvedPath, 'utf-8');
212
- }
213
- catch (error) {
214
- const err = error;
215
- throw new Error(`Failed to read tariff file: ${resolvedPath}. Error: ${err.message}`);
216
- }
217
- const lines = csvContent.split('\n').filter(line => line.trim());
218
- if (lines.length === 0) {
219
- throw new Error(`Tariff file is empty: ${resolvedPath}`);
220
- }
221
- // Skip header row, parse numeric values
222
- const rates = [];
223
- for (let i = 1; i < lines.length; i++) {
224
- const line = lines[i];
225
- if (!line)
226
- continue;
227
- const columns = line.split(',').map(col => col.trim().replace(/"/g, ''));
228
- if (columnIndex >= columns.length) {
229
- throw new Error(`Column index ${columnIndex} not found in record ${i} with ${columns.length} columns`);
230
- }
231
- const raw = columns[columnIndex];
232
- if (raw === undefined) {
233
- throw new Error(`Column index ${columnIndex} is undefined in record ${i}`);
234
- }
235
- const parsed = parseFloat(raw);
236
- if (isNaN(parsed)) {
237
- throw new Error(`Could not parse '${raw}' as number in row ${i + 1}, column ${columnIndex + 1}`);
238
- }
239
- rates.push(parsed);
240
- }
241
- // Validation: exactly 17,520 rows required (half-hourly for a full year)
242
- if (rates.length !== 17_520) {
243
- throw new Error(`Tariff must contain 17,520 rows (found ${rates.length})`);
244
- }
245
- console.error(`[loadTariffData] Successfully loaded tariff with ${rates.length} rates`);
246
- return rates;
247
- }
248
3
  /**
249
4
  * Calculate metrics by aggregating columns from simulation results
250
5
  */
251
6
  export async function calculateMetrics(config, args) {
252
- console.error('[calculateMetrics] ===== START =====');
253
- console.error('[calculateMetrics] Input args:', JSON.stringify({
254
- config_name: args.config_name,
255
- model_names: args.model_names,
256
- metric_definitions_count: args.metric_definitions?.length,
257
- time_range: args.time_range
258
- }, null, 2));
259
- const { workspace } = config;
260
- const { config_name, model_names, metric_definitions, time_range, tariff_file_path, tariff_column_index } = args;
261
- if (!config_name) {
262
- throw new Error('config_name is required');
263
- }
264
- if (!model_names || !Array.isArray(model_names) || model_names.length === 0) {
265
- throw new Error('model_names is required and must be a non-empty array');
266
- }
267
- if (!metric_definitions || !Array.isArray(metric_definitions) || metric_definitions.length === 0) {
268
- throw new Error('metric_definitions is required and must be a non-empty array');
269
- }
270
- console.error('[calculateMetrics] Initializing WASM...');
271
- // Initialize WASM if not already done
272
7
  let wasm;
273
8
  try {
274
9
  await initWasm();
275
10
  wasm = getWasmModule();
276
- console.error('[calculateMetrics] WASM initialized successfully');
277
11
  }
278
12
  catch (error) {
279
13
  const err = error;
280
- console.error('[calculateMetrics] WASM initialization failed:', err);
281
14
  throw new Error(`WASM initialization failed: ${err.message}`);
282
15
  }
283
16
  if (!wasm.calculate_metrics_from_parsed_data) {
284
- console.error('[calculateMetrics] ERROR: calculate_metrics_from_parsed_data not found in WASM module');
285
- console.error('[calculateMetrics] Available WASM functions:', Object.keys(wasm).filter(k => typeof wasm[k] === 'function'));
286
17
  throw new Error('WASM calculate_metrics_from_parsed_data function not available');
287
18
  }
288
- const outputDir = path.join(workspace, 'output');
289
- const configOutputDir = path.join(outputDir, config_name.replace('.json', ''));
290
- const cleanConfigName = config_name.replace('.json', '');
291
- // Format metric definitions as "column|function" strings
292
- console.error('[calculateMetrics] Raw metric definitions:', JSON.stringify(metric_definitions, null, 2));
293
- const { encodedMetrics, metadata: metricMetadata } = formatMetricDefinitions(metric_definitions);
294
- console.error('[calculateMetrics] Formatted metrics:', JSON.stringify(encodedMetrics, null, 2));
295
- // Check if any metric uses 'cost' function - requires tariff params
296
- const hasCostMetric = metric_definitions.some(m => m.function === 'cost');
297
- if (hasCostMetric && (!tariff_file_path || tariff_column_index === undefined)) {
298
- throw new Error('Cost metrics require both tariff_file_path and tariff_column_index parameters');
299
- }
300
- // Load tariff data once if provided (same for all models)
301
- let tariffJson = null;
302
- if (tariff_file_path && tariff_column_index !== undefined) {
303
- try {
304
- const tariffRates = await loadTariffData(tariff_file_path, tariff_column_index, workspace);
305
- tariffJson = JSON.stringify(tariffRates);
306
- console.error(`[calculateMetrics] Loaded tariff data: ${tariffRates.length} rates`);
307
- }
308
- catch (error) {
309
- const err = error;
310
- console.error(`[calculateMetrics] Failed to load tariff data: ${err.message}`);
311
- throw new Error(`Failed to load tariff data: ${err.message}`);
312
- }
313
- }
314
- // Load CSV files and parse them
315
- const allResults = [];
316
- for (const modelName of model_names) {
317
- // Try both CSV filename patterns: __results.csv and __core__results.csv
318
- // Also check in result_* directories if configOutputDir doesn't exist
319
- let csvPath = path.join(configOutputDir, `${modelName}__core__results.csv`);
320
- let csvContent;
321
- try {
322
- csvContent = await fs.readFile(csvPath, 'utf-8');
323
- }
324
- catch (e1) {
325
- // Try alternative filename pattern
326
- csvPath = path.join(configOutputDir, `${modelName}__results.csv`);
327
- try {
328
- csvContent = await fs.readFile(csvPath, 'utf-8');
329
- }
330
- catch (e2) {
331
- // Try looking in result_* directories
332
- try {
333
- const files = await fs.readdir(outputDir);
334
- const resultDirs = files.filter(f => f.startsWith(`result_${cleanConfigName}_`));
335
- for (const resultDir of resultDirs) {
336
- const altPath1 = path.join(outputDir, resultDir, `${modelName}__core__results.csv`);
337
- const altPath2 = path.join(outputDir, resultDir, `${modelName}__results.csv`);
338
- try {
339
- csvContent = await fs.readFile(altPath1, 'utf-8');
340
- csvPath = altPath1;
341
- break;
342
- }
343
- catch {
344
- try {
345
- csvContent = await fs.readFile(altPath2, 'utf-8');
346
- csvPath = altPath2;
347
- break;
348
- }
349
- catch { }
350
- }
351
- }
352
- if (!csvContent) {
353
- throw e2;
354
- }
355
- }
356
- catch (e3) {
357
- throw new Error(`CSV file not found for model ${modelName}. Tried: ${csvPath}`);
358
- }
359
- }
360
- }
361
- if (!csvContent) {
362
- throw new Error(`CSV file not found for model ${modelName}. Tried: ${csvPath}`);
363
- }
364
- try {
365
- console.error(`[calculateMetrics] Processing model: ${modelName}`);
366
- const coreResultsData = parseCoreResults(csvContent, modelName, config_name);
367
- // Validate parsed data
368
- if (!coreResultsData.timestamps || coreResultsData.timestamps.length === 0) {
369
- throw new Error(`No timestamps found in CSV for model ${modelName}`);
370
- }
371
- if (!coreResultsData.columns || Object.keys(coreResultsData.columns).length === 0) {
372
- throw new Error(`No columns found in CSV for model ${modelName}`);
373
- }
374
- // Prepare JSON for WASM
375
- const dataJson = JSON.stringify(coreResultsData);
376
- const metricsJson = JSON.stringify(encodedMetrics);
377
- const timeRangeJson = time_range ? JSON.stringify(time_range) : null;
378
- // tariffJson already loaded above (outside loop for efficiency)
379
- // Validate column exists for metrics
380
- const missingColumns = [];
381
- encodedMetrics.forEach((metric, idx) => {
382
- const nameParts = metric.name.split('|');
383
- const columnName = nameParts[0];
384
- if (!columnName) {
385
- throw new Error(`Invalid metric name format: ${metric.name}`);
386
- }
387
- const meta = metricMetadata[idx];
388
- if (meta?.isCompliance) {
389
- return;
390
- }
391
- if (!coreResultsData.columns[columnName]) {
392
- missingColumns.push(columnName);
393
- }
394
- });
395
- if (missingColumns.length > 0) {
396
- const availableColumns = Object.keys(coreResultsData.columns).slice(0, 10);
397
- throw new Error(`Columns not found in CSV: ${missingColumns.join(', ')}. Available columns: ${availableColumns.join(', ')}...`);
398
- }
399
- // Call WASM metrics calculation
400
- let resultJson;
401
- try {
402
- resultJson = wasm.calculate_metrics_from_parsed_data(dataJson, metricsJson, timeRangeJson || undefined, tariffJson || undefined);
403
- }
404
- catch (wasmError) {
405
- const err = wasmError;
406
- throw new Error(`WASM calculation failed: ${err.message}`);
407
- }
408
- if (!resultJson || typeof resultJson !== 'string') {
409
- throw new Error(`WASM returned invalid result: ${typeof resultJson}`);
410
- }
411
- const results = JSON.parse(resultJson);
412
- if (!Array.isArray(results)) {
413
- throw new Error(`WASM returned non-array result: ${typeof results}`);
414
- }
415
- results.forEach((result, idx) => {
416
- const meta = metricMetadata[idx] || {};
417
- allResults.push({
418
- id: meta.id || result.name,
419
- name: meta.name || result.name,
420
- column: meta.column || result.name.split('|')[0],
421
- function: meta.function || result.name.split('|')[1] || 'sum',
422
- comparator: meta.comparator,
423
- threshold: meta.threshold,
424
- value: result.value,
425
- model_name: modelName
426
- });
427
- });
428
- }
429
- catch (error) {
430
- const err = error;
431
- if (err.code === 'ENOENT') {
432
- console.warn(`CSV file not found for model ${modelName}: ${csvPath}`);
433
- continue;
434
- }
435
- const errorMsg = err instanceof Error ? err.message : String(err);
436
- console.error(`[calculateMetrics] Error processing model ${modelName}:`, errorMsg);
437
- throw new Error(`Failed to process model ${modelName}: ${errorMsg}`);
438
- }
439
- }
440
- console.error(`[calculateMetrics] ===== FINAL RESULTS =====`);
441
- console.error(`[calculateMetrics] Total models processed: ${model_names.length}`);
442
- console.error(`[calculateMetrics] Total metrics returned: ${allResults.length}`);
443
- return {
444
- metrics: allResults,
445
- total_models: model_names.length,
446
- total_metrics: allResults.length
447
- };
19
+ return calculateWorkspaceMetrics(config.workspace, args, {
20
+ calculateMetricsFromParsedData: wasm.calculate_metrics_from_parsed_data.bind(wasm),
21
+ });
448
22
  }
449
23
  //# sourceMappingURL=calculateMetrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calculateMetrics.js","sourceRoot":"","sources":["../../../src/tools/calculateMetrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calculateMetrics.js","sourceRoot":"","sources":["../../../src/tools/calculateMetrics.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,IAAI,yBAAyB,GAG9C,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAiB,EACjB,IAA0B;IAE1B,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,MAAM,QAAQ,EAAE,CAAC;QACjB,IAAI,GAAG,aAAa,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,yBAAyB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE;QACvD,8BAA8B,EAAE,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC;KACnF,CAAC,CAAC;AACL,CAAC"}
@@ -1,25 +1,7 @@
1
+ import { type CreateBatchConfigArgs, type CreateBatchConfigResult } from '@repo/workspace-tools';
1
2
  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
3
  /**
21
4
  * Create a batch configuration with base model, weather file, wrapper, and parameters
22
5
  */
23
6
  export declare function createBatchConfig(config: MCPConfig, args: CreateBatchConfigArgs): Promise<CreateBatchConfigResult>;
24
- export {};
25
7
  //# sourceMappingURL=createBatchConfig.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"createBatchConfig.d.ts","sourceRoot":"","sources":["../../../src/tools/createBatchConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CAElC"}