@jablum/weather-mcp 1.7.0
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/LICENSE +21 -0
- package/README.md +1319 -0
- package/dist/analytics/anonymizer.d.ts +37 -0
- package/dist/analytics/anonymizer.d.ts.map +1 -0
- package/dist/analytics/anonymizer.js +112 -0
- package/dist/analytics/anonymizer.js.map +1 -0
- package/dist/analytics/collector.d.ts +72 -0
- package/dist/analytics/collector.d.ts.map +1 -0
- package/dist/analytics/collector.js +282 -0
- package/dist/analytics/collector.js.map +1 -0
- package/dist/analytics/config.d.ts +15 -0
- package/dist/analytics/config.d.ts.map +1 -0
- package/dist/analytics/config.js +172 -0
- package/dist/analytics/config.js.map +1 -0
- package/dist/analytics/index.d.ts +8 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +7 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/middleware.d.ts +33 -0
- package/dist/analytics/middleware.d.ts.map +1 -0
- package/dist/analytics/middleware.js +99 -0
- package/dist/analytics/middleware.js.map +1 -0
- package/dist/analytics/transport.d.ts +11 -0
- package/dist/analytics/transport.d.ts.map +1 -0
- package/dist/analytics/transport.js +92 -0
- package/dist/analytics/transport.js.map +1 -0
- package/dist/analytics/types.d.ts +74 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +6 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/config/api.d.ts +30 -0
- package/dist/config/api.d.ts.map +1 -0
- package/dist/config/api.js +32 -0
- package/dist/config/api.js.map +1 -0
- package/dist/config/cache.d.ts +31 -0
- package/dist/config/cache.d.ts.map +1 -0
- package/dist/config/cache.js +108 -0
- package/dist/config/cache.js.map +1 -0
- package/dist/config/displayThresholds.d.ts +83 -0
- package/dist/config/displayThresholds.d.ts.map +1 -0
- package/dist/config/displayThresholds.js +83 -0
- package/dist/config/displayThresholds.js.map +1 -0
- package/dist/config/tools.d.ts +44 -0
- package/dist/config/tools.d.ts.map +1 -0
- package/dist/config/tools.js +269 -0
- package/dist/config/tools.js.map +1 -0
- package/dist/errors/ApiError.d.ts +62 -0
- package/dist/errors/ApiError.d.ts.map +1 -0
- package/dist/errors/ApiError.js +171 -0
- package/dist/errors/ApiError.js.map +1 -0
- package/dist/handlers/airQualityHandler.d.ts +11 -0
- package/dist/handlers/airQualityHandler.d.ts.map +1 -0
- package/dist/handlers/airQualityHandler.js +154 -0
- package/dist/handlers/airQualityHandler.js.map +1 -0
- package/dist/handlers/alertsHandler.d.ts +11 -0
- package/dist/handlers/alertsHandler.d.ts.map +1 -0
- package/dist/handlers/alertsHandler.js +98 -0
- package/dist/handlers/alertsHandler.js.map +1 -0
- package/dist/handlers/currentConditionsHandler.d.ts +13 -0
- package/dist/handlers/currentConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/currentConditionsHandler.js +296 -0
- package/dist/handlers/currentConditionsHandler.js.map +1 -0
- package/dist/handlers/forecastHandler.d.ts +16 -0
- package/dist/handlers/forecastHandler.d.ts.map +1 -0
- package/dist/handlers/forecastHandler.js +454 -0
- package/dist/handlers/forecastHandler.js.map +1 -0
- package/dist/handlers/historicalWeatherHandler.d.ts +12 -0
- package/dist/handlers/historicalWeatherHandler.d.ts.map +1 -0
- package/dist/handlers/historicalWeatherHandler.js +188 -0
- package/dist/handlers/historicalWeatherHandler.js.map +1 -0
- package/dist/handlers/lightningHandler.d.ts +14 -0
- package/dist/handlers/lightningHandler.d.ts.map +1 -0
- package/dist/handlers/lightningHandler.js +258 -0
- package/dist/handlers/lightningHandler.js.map +1 -0
- package/dist/handlers/locationHandler.d.ts +12 -0
- package/dist/handlers/locationHandler.d.ts.map +1 -0
- package/dist/handlers/locationHandler.js +149 -0
- package/dist/handlers/locationHandler.js.map +1 -0
- package/dist/handlers/marineConditionsHandler.d.ts +13 -0
- package/dist/handlers/marineConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/marineConditionsHandler.js +270 -0
- package/dist/handlers/marineConditionsHandler.js.map +1 -0
- package/dist/handlers/riverConditionsHandler.d.ts +11 -0
- package/dist/handlers/riverConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/riverConditionsHandler.js +176 -0
- package/dist/handlers/riverConditionsHandler.js.map +1 -0
- package/dist/handlers/savedLocationsHandler.d.ts +50 -0
- package/dist/handlers/savedLocationsHandler.d.ts.map +1 -0
- package/dist/handlers/savedLocationsHandler.js +397 -0
- package/dist/handlers/savedLocationsHandler.js.map +1 -0
- package/dist/handlers/statusHandler.d.ts +12 -0
- package/dist/handlers/statusHandler.d.ts.map +1 -0
- package/dist/handlers/statusHandler.js +115 -0
- package/dist/handlers/statusHandler.js.map +1 -0
- package/dist/handlers/weatherImageryHandler.d.ts +14 -0
- package/dist/handlers/weatherImageryHandler.d.ts.map +1 -0
- package/dist/handlers/weatherImageryHandler.js +143 -0
- package/dist/handlers/weatherImageryHandler.js.map +1 -0
- package/dist/handlers/wildfireHandler.d.ts +11 -0
- package/dist/handlers/wildfireHandler.d.ts.map +1 -0
- package/dist/handlers/wildfireHandler.js +186 -0
- package/dist/handlers/wildfireHandler.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +735 -0
- package/dist/index.js.map +1 -0
- package/dist/services/blitzortung.d.ts +67 -0
- package/dist/services/blitzortung.d.ts.map +1 -0
- package/dist/services/blitzortung.js +475 -0
- package/dist/services/blitzortung.js.map +1 -0
- package/dist/services/geocoding.d.ts +57 -0
- package/dist/services/geocoding.d.ts.map +1 -0
- package/dist/services/geocoding.js +393 -0
- package/dist/services/geocoding.js.map +1 -0
- package/dist/services/locationStore.d.ts +62 -0
- package/dist/services/locationStore.d.ts.map +1 -0
- package/dist/services/locationStore.js +201 -0
- package/dist/services/locationStore.js.map +1 -0
- package/dist/services/ncei.d.ts +61 -0
- package/dist/services/ncei.d.ts.map +1 -0
- package/dist/services/ncei.js +126 -0
- package/dist/services/ncei.js.map +1 -0
- package/dist/services/nifc.d.ts +44 -0
- package/dist/services/nifc.d.ts.map +1 -0
- package/dist/services/nifc.js +159 -0
- package/dist/services/nifc.js.map +1 -0
- package/dist/services/noaa.d.ts +161 -0
- package/dist/services/noaa.d.ts.map +1 -0
- package/dist/services/noaa.js +681 -0
- package/dist/services/noaa.js.map +1 -0
- package/dist/services/nominatim.d.ts +62 -0
- package/dist/services/nominatim.d.ts.map +1 -0
- package/dist/services/nominatim.js +254 -0
- package/dist/services/nominatim.js.map +1 -0
- package/dist/services/openmeteo.d.ts +189 -0
- package/dist/services/openmeteo.d.ts.map +1 -0
- package/dist/services/openmeteo.js +936 -0
- package/dist/services/openmeteo.js.map +1 -0
- package/dist/services/rainviewer.d.ts +37 -0
- package/dist/services/rainviewer.d.ts.map +1 -0
- package/dist/services/rainviewer.js +115 -0
- package/dist/services/rainviewer.js.map +1 -0
- package/dist/types/imagery.d.ts +82 -0
- package/dist/types/imagery.d.ts.map +1 -0
- package/dist/types/imagery.js +6 -0
- package/dist/types/imagery.js.map +1 -0
- package/dist/types/lightning.d.ts +89 -0
- package/dist/types/lightning.d.ts.map +1 -0
- package/dist/types/lightning.js +6 -0
- package/dist/types/lightning.js.map +1 -0
- package/dist/types/noaa.d.ts +535 -0
- package/dist/types/noaa.d.ts.map +1 -0
- package/dist/types/noaa.js +5 -0
- package/dist/types/noaa.js.map +1 -0
- package/dist/types/nominatim.d.ts +72 -0
- package/dist/types/nominatim.d.ts.map +1 -0
- package/dist/types/nominatim.js +6 -0
- package/dist/types/nominatim.js.map +1 -0
- package/dist/types/openmeteo.d.ts +583 -0
- package/dist/types/openmeteo.d.ts.map +1 -0
- package/dist/types/openmeteo.js +6 -0
- package/dist/types/openmeteo.js.map +1 -0
- package/dist/types/savedLocations.d.ts +58 -0
- package/dist/types/savedLocations.d.ts.map +1 -0
- package/dist/types/savedLocations.js +5 -0
- package/dist/types/savedLocations.js.map +1 -0
- package/dist/types/wildfire.d.ts +83 -0
- package/dist/types/wildfire.d.ts.map +1 -0
- package/dist/types/wildfire.js +5 -0
- package/dist/types/wildfire.js.map +1 -0
- package/dist/utils/airQuality.d.ts +54 -0
- package/dist/utils/airQuality.d.ts.map +1 -0
- package/dist/utils/airQuality.js +251 -0
- package/dist/utils/airQuality.js.map +1 -0
- package/dist/utils/cache.d.ts +69 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +164 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/distance.d.ts +25 -0
- package/dist/utils/distance.d.ts.map +1 -0
- package/dist/utils/distance.js +40 -0
- package/dist/utils/distance.js.map +1 -0
- package/dist/utils/fireWeather.d.ts +76 -0
- package/dist/utils/fireWeather.d.ts.map +1 -0
- package/dist/utils/fireWeather.js +243 -0
- package/dist/utils/fireWeather.js.map +1 -0
- package/dist/utils/geography.d.ts +79 -0
- package/dist/utils/geography.d.ts.map +1 -0
- package/dist/utils/geography.js +266 -0
- package/dist/utils/geography.js.map +1 -0
- package/dist/utils/geohash.d.ts +62 -0
- package/dist/utils/geohash.d.ts.map +1 -0
- package/dist/utils/geohash.js +146 -0
- package/dist/utils/geohash.js.map +1 -0
- package/dist/utils/locationResolver.d.ts +34 -0
- package/dist/utils/locationResolver.d.ts.map +1 -0
- package/dist/utils/locationResolver.js +120 -0
- package/dist/utils/locationResolver.js.map +1 -0
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +153 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/marine.d.ts +59 -0
- package/dist/utils/marine.d.ts.map +1 -0
- package/dist/utils/marine.js +215 -0
- package/dist/utils/marine.js.map +1 -0
- package/dist/utils/normals.d.ts +86 -0
- package/dist/utils/normals.d.ts.map +1 -0
- package/dist/utils/normals.js +223 -0
- package/dist/utils/normals.js.map +1 -0
- package/dist/utils/snow.d.ts +45 -0
- package/dist/utils/snow.d.ts.map +1 -0
- package/dist/utils/snow.js +144 -0
- package/dist/utils/snow.js.map +1 -0
- package/dist/utils/temperatureConversion.d.ts +12 -0
- package/dist/utils/temperatureConversion.d.ts.map +1 -0
- package/dist/utils/temperatureConversion.js +17 -0
- package/dist/utils/temperatureConversion.js.map +1 -0
- package/dist/utils/timezone.d.ts +56 -0
- package/dist/utils/timezone.d.ts.map +1 -0
- package/dist/utils/timezone.js +167 -0
- package/dist/utils/timezone.js.map +1 -0
- package/dist/utils/units.d.ts +69 -0
- package/dist/utils/units.d.ts.map +1 -0
- package/dist/utils/units.js +158 -0
- package/dist/utils/units.js.map +1 -0
- package/dist/utils/validation.d.ts +89 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +177 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/version.d.ts +15 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +24 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache configuration for weather data
|
|
3
|
+
*
|
|
4
|
+
* TTL (Time To Live) values are set based on data volatility:
|
|
5
|
+
* - Historical data: Never changes once recorded
|
|
6
|
+
* - Geographic data: Static (grid coordinates, station locations)
|
|
7
|
+
* - Forecasts: Updated approximately hourly
|
|
8
|
+
* - Current conditions: Observations typically update every 20-60 minutes
|
|
9
|
+
*/
|
|
10
|
+
export declare const CacheConfig: {
|
|
11
|
+
readonly enabled: boolean;
|
|
12
|
+
readonly maxSize: number;
|
|
13
|
+
readonly apiTimeoutMs: number;
|
|
14
|
+
readonly ttl: {
|
|
15
|
+
readonly gridCoordinates: number;
|
|
16
|
+
readonly stations: number;
|
|
17
|
+
readonly forecast: number;
|
|
18
|
+
readonly currentConditions: number;
|
|
19
|
+
readonly alerts: number;
|
|
20
|
+
readonly recentHistorical: number;
|
|
21
|
+
readonly historicalData: number;
|
|
22
|
+
readonly serviceStatus: number;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Determine appropriate TTL for historical weather data based on date
|
|
27
|
+
* @param startDate Start date of the historical query
|
|
28
|
+
* @returns TTL in milliseconds
|
|
29
|
+
*/
|
|
30
|
+
export declare function getHistoricalDataTTL(startDate: string | Date): number;
|
|
31
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/config/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkDH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CA8Cd,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAYrE"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache configuration for weather data
|
|
3
|
+
*
|
|
4
|
+
* TTL (Time To Live) values are set based on data volatility:
|
|
5
|
+
* - Historical data: Never changes once recorded
|
|
6
|
+
* - Geographic data: Static (grid coordinates, station locations)
|
|
7
|
+
* - Forecasts: Updated approximately hourly
|
|
8
|
+
* - Current conditions: Observations typically update every 20-60 minutes
|
|
9
|
+
*/
|
|
10
|
+
// Time constants in milliseconds
|
|
11
|
+
const MINUTE = 60 * 1000;
|
|
12
|
+
const HOUR = 60 * MINUTE;
|
|
13
|
+
const DAY = 24 * HOUR;
|
|
14
|
+
/**
|
|
15
|
+
* Parse a boolean environment variable
|
|
16
|
+
* @param key Environment variable key
|
|
17
|
+
* @param defaultValue Default value if not set
|
|
18
|
+
* @returns Boolean value
|
|
19
|
+
*/
|
|
20
|
+
function getEnvBoolean(key, defaultValue) {
|
|
21
|
+
const value = process.env[key];
|
|
22
|
+
if (value === undefined)
|
|
23
|
+
return defaultValue;
|
|
24
|
+
return value !== 'false' && value !== '0';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse a number environment variable with validation
|
|
28
|
+
* @param key Environment variable key
|
|
29
|
+
* @param defaultValue Default value if not set or invalid
|
|
30
|
+
* @param min Minimum allowed value (optional)
|
|
31
|
+
* @param max Maximum allowed value (optional)
|
|
32
|
+
* @returns Validated number value
|
|
33
|
+
*/
|
|
34
|
+
function getEnvNumber(key, defaultValue, min, max) {
|
|
35
|
+
const value = process.env[key];
|
|
36
|
+
if (value === undefined)
|
|
37
|
+
return defaultValue;
|
|
38
|
+
const parsed = parseInt(value, 10);
|
|
39
|
+
if (isNaN(parsed)) {
|
|
40
|
+
console.warn(`Invalid ${key}: "${value}". Using default: ${defaultValue}`);
|
|
41
|
+
return defaultValue;
|
|
42
|
+
}
|
|
43
|
+
if (min !== undefined && parsed < min) {
|
|
44
|
+
console.warn(`${key} too low: ${parsed}. Using minimum: ${min}`);
|
|
45
|
+
return min;
|
|
46
|
+
}
|
|
47
|
+
if (max !== undefined && parsed > max) {
|
|
48
|
+
console.warn(`${key} too high: ${parsed}. Using maximum: ${max}`);
|
|
49
|
+
return max;
|
|
50
|
+
}
|
|
51
|
+
return parsed;
|
|
52
|
+
}
|
|
53
|
+
export const CacheConfig = {
|
|
54
|
+
// Enable/disable caching globally
|
|
55
|
+
enabled: getEnvBoolean('CACHE_ENABLED', true),
|
|
56
|
+
// Maximum number of entries in cache before LRU eviction
|
|
57
|
+
// Min: 100, Max: 10000, Default: 1000
|
|
58
|
+
maxSize: getEnvNumber('CACHE_MAX_SIZE', 1000, 100, 10000),
|
|
59
|
+
// API timeout configuration
|
|
60
|
+
// Min: 5000ms (5 seconds), Max: 120000ms (2 minutes), Default: 30000ms (30 seconds)
|
|
61
|
+
apiTimeoutMs: getEnvNumber('API_TIMEOUT_MS', 30000, 5000, 120000),
|
|
62
|
+
// TTL values for different data types
|
|
63
|
+
ttl: {
|
|
64
|
+
// Grid coordinate lookups (lat/lon -> grid mapping)
|
|
65
|
+
// These are geographic and never change
|
|
66
|
+
gridCoordinates: Infinity,
|
|
67
|
+
// Weather station lists
|
|
68
|
+
// Stations rarely change
|
|
69
|
+
stations: 24 * HOUR,
|
|
70
|
+
// 7-day forecasts
|
|
71
|
+
// NOAA updates forecasts approximately hourly
|
|
72
|
+
forecast: 2 * HOUR,
|
|
73
|
+
// Current weather conditions
|
|
74
|
+
// Observations typically update every 20-60 minutes
|
|
75
|
+
currentConditions: 15 * MINUTE,
|
|
76
|
+
// Weather alerts
|
|
77
|
+
// Alerts can change rapidly, cache for shorter period
|
|
78
|
+
alerts: 5 * MINUTE,
|
|
79
|
+
// Recent historical data (< 7 days old)
|
|
80
|
+
// Recent data may still be updated/corrected
|
|
81
|
+
recentHistorical: 1 * HOUR,
|
|
82
|
+
// Historical data (> 1 day old from current time)
|
|
83
|
+
// Historical data beyond 1 day is finalized and won't change
|
|
84
|
+
historicalData: Infinity,
|
|
85
|
+
// Service health check status
|
|
86
|
+
// Check freshness periodically
|
|
87
|
+
serviceStatus: 5 * MINUTE,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Determine appropriate TTL for historical weather data based on date
|
|
92
|
+
* @param startDate Start date of the historical query
|
|
93
|
+
* @returns TTL in milliseconds
|
|
94
|
+
*/
|
|
95
|
+
export function getHistoricalDataTTL(startDate) {
|
|
96
|
+
const start = typeof startDate === 'string' ? new Date(startDate) : startDate;
|
|
97
|
+
const now = new Date();
|
|
98
|
+
const daysDiff = (now.getTime() - start.getTime()) / DAY;
|
|
99
|
+
if (daysDiff > 1) {
|
|
100
|
+
// Data is more than 1 day old - it's finalized and won't change
|
|
101
|
+
return CacheConfig.ttl.historicalData;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Recent data may still be updated
|
|
105
|
+
return CacheConfig.ttl.recentHistorical;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/config/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display thresholds and constants for weather data formatting
|
|
3
|
+
*
|
|
4
|
+
* These values determine when certain weather metrics are shown or highlighted
|
|
5
|
+
*/
|
|
6
|
+
export declare const DisplayThresholds: {
|
|
7
|
+
/**
|
|
8
|
+
* Temperature thresholds (in Fahrenheit)
|
|
9
|
+
*/
|
|
10
|
+
readonly temperature: {
|
|
11
|
+
/** Show heat index when temperature is above this value */
|
|
12
|
+
readonly showHeatIndex: 80;
|
|
13
|
+
/** Show wind chill when temperature is below this value */
|
|
14
|
+
readonly showWindChill: 50;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Wind thresholds
|
|
18
|
+
*/
|
|
19
|
+
readonly wind: {
|
|
20
|
+
/** Show gusts if they are this ratio higher than sustained wind speed (1.2 = 20% higher) */
|
|
21
|
+
readonly gustSignificanceRatio: 1.2;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Visibility thresholds (in miles)
|
|
25
|
+
*/
|
|
26
|
+
readonly visibility: {
|
|
27
|
+
/** Dense fog */
|
|
28
|
+
readonly denseFog: 0.25;
|
|
29
|
+
/** Fog */
|
|
30
|
+
readonly fog: 1;
|
|
31
|
+
/** Haze or mist */
|
|
32
|
+
readonly hazeMist: 3;
|
|
33
|
+
/** Clear visibility */
|
|
34
|
+
readonly clear: 10;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Precipitation thresholds
|
|
38
|
+
*/
|
|
39
|
+
readonly precipitation: {
|
|
40
|
+
/** Light precipitation (inches per hour) */
|
|
41
|
+
readonly light: 0.1;
|
|
42
|
+
/** Moderate precipitation (inches per hour) */
|
|
43
|
+
readonly moderate: 0.3;
|
|
44
|
+
/** Heavy precipitation (inches per hour) */
|
|
45
|
+
readonly heavy: 0.5;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* API-related constants
|
|
50
|
+
*/
|
|
51
|
+
export declare const ApiConstants: {
|
|
52
|
+
/**
|
|
53
|
+
* Historical data threshold (in days)
|
|
54
|
+
* Data older than this uses archival API instead of recent observations
|
|
55
|
+
*/
|
|
56
|
+
readonly historicalDataThresholdDays: 7;
|
|
57
|
+
/**
|
|
58
|
+
* Maximum date range for hourly historical data (in days)
|
|
59
|
+
*/
|
|
60
|
+
readonly maxHourlyHistoricalDays: 31;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Formatting constants
|
|
64
|
+
*/
|
|
65
|
+
export declare const FormatConstants: {
|
|
66
|
+
/**
|
|
67
|
+
* Default forecast periods to show
|
|
68
|
+
*/
|
|
69
|
+
readonly defaultForecastDays: 7;
|
|
70
|
+
/**
|
|
71
|
+
* Maximum forecast days (Open-Meteo supports up to 16 days)
|
|
72
|
+
*/
|
|
73
|
+
readonly maxForecastDays: 16;
|
|
74
|
+
/**
|
|
75
|
+
* Default observation limit for historical data
|
|
76
|
+
*/
|
|
77
|
+
readonly defaultHistoricalLimit: 168;
|
|
78
|
+
/**
|
|
79
|
+
* Maximum observations to return
|
|
80
|
+
*/
|
|
81
|
+
readonly maxHistoricalLimit: 500;
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=displayThresholds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"displayThresholds.d.ts","sourceRoot":"","sources":["../../src/config/displayThresholds.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;;QAED,2DAA2D;;QAE3D,2DAA2D;;;IAI7D;;OAEG;;QAED,4FAA4F;;;IAI9F;;OAEG;;QAED,gBAAgB;;QAEhB,UAAU;;QAEV,mBAAmB;;QAEnB,uBAAuB;;;IAIzB;;OAEG;;QAED,4CAA4C;;QAE5C,+CAA+C;;QAE/C,4CAA4C;;;CAGtC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB;;;OAGG;;IAGH;;OAEG;;CAEK,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;CAEK,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display thresholds and constants for weather data formatting
|
|
3
|
+
*
|
|
4
|
+
* These values determine when certain weather metrics are shown or highlighted
|
|
5
|
+
*/
|
|
6
|
+
export const DisplayThresholds = {
|
|
7
|
+
/**
|
|
8
|
+
* Temperature thresholds (in Fahrenheit)
|
|
9
|
+
*/
|
|
10
|
+
temperature: {
|
|
11
|
+
/** Show heat index when temperature is above this value */
|
|
12
|
+
showHeatIndex: 80,
|
|
13
|
+
/** Show wind chill when temperature is below this value */
|
|
14
|
+
showWindChill: 50,
|
|
15
|
+
},
|
|
16
|
+
/**
|
|
17
|
+
* Wind thresholds
|
|
18
|
+
*/
|
|
19
|
+
wind: {
|
|
20
|
+
/** Show gusts if they are this ratio higher than sustained wind speed (1.2 = 20% higher) */
|
|
21
|
+
gustSignificanceRatio: 1.2,
|
|
22
|
+
},
|
|
23
|
+
/**
|
|
24
|
+
* Visibility thresholds (in miles)
|
|
25
|
+
*/
|
|
26
|
+
visibility: {
|
|
27
|
+
/** Dense fog */
|
|
28
|
+
denseFog: 0.25,
|
|
29
|
+
/** Fog */
|
|
30
|
+
fog: 1.0,
|
|
31
|
+
/** Haze or mist */
|
|
32
|
+
hazeMist: 3.0,
|
|
33
|
+
/** Clear visibility */
|
|
34
|
+
clear: 10.0,
|
|
35
|
+
},
|
|
36
|
+
/**
|
|
37
|
+
* Precipitation thresholds
|
|
38
|
+
*/
|
|
39
|
+
precipitation: {
|
|
40
|
+
/** Light precipitation (inches per hour) */
|
|
41
|
+
light: 0.1,
|
|
42
|
+
/** Moderate precipitation (inches per hour) */
|
|
43
|
+
moderate: 0.3,
|
|
44
|
+
/** Heavy precipitation (inches per hour) */
|
|
45
|
+
heavy: 0.5,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* API-related constants
|
|
50
|
+
*/
|
|
51
|
+
export const ApiConstants = {
|
|
52
|
+
/**
|
|
53
|
+
* Historical data threshold (in days)
|
|
54
|
+
* Data older than this uses archival API instead of recent observations
|
|
55
|
+
*/
|
|
56
|
+
historicalDataThresholdDays: 7,
|
|
57
|
+
/**
|
|
58
|
+
* Maximum date range for hourly historical data (in days)
|
|
59
|
+
*/
|
|
60
|
+
maxHourlyHistoricalDays: 31,
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Formatting constants
|
|
64
|
+
*/
|
|
65
|
+
export const FormatConstants = {
|
|
66
|
+
/**
|
|
67
|
+
* Default forecast periods to show
|
|
68
|
+
*/
|
|
69
|
+
defaultForecastDays: 7,
|
|
70
|
+
/**
|
|
71
|
+
* Maximum forecast days (Open-Meteo supports up to 16 days)
|
|
72
|
+
*/
|
|
73
|
+
maxForecastDays: 16,
|
|
74
|
+
/**
|
|
75
|
+
* Default observation limit for historical data
|
|
76
|
+
*/
|
|
77
|
+
defaultHistoricalLimit: 168, // One week of hourly data
|
|
78
|
+
/**
|
|
79
|
+
* Maximum observations to return
|
|
80
|
+
*/
|
|
81
|
+
maxHistoricalLimit: 500,
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=displayThresholds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"displayThresholds.js","sourceRoot":"","sources":["../../src/config/displayThresholds.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B;;OAEG;IACH,WAAW,EAAE;QACX,2DAA2D;QAC3D,aAAa,EAAE,EAAE;QACjB,2DAA2D;QAC3D,aAAa,EAAE,EAAE;KAClB;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,4FAA4F;QAC5F,qBAAqB,EAAE,GAAG;KAC3B;IAED;;OAEG;IACH,UAAU,EAAE;QACV,gBAAgB;QAChB,QAAQ,EAAE,IAAI;QACd,UAAU;QACV,GAAG,EAAE,GAAG;QACR,mBAAmB;QACnB,QAAQ,EAAE,GAAG;QACb,uBAAuB;QACvB,KAAK,EAAE,IAAI;KACZ;IAED;;OAEG;IACH,aAAa,EAAE;QACb,4CAA4C;QAC5C,KAAK,EAAE,GAAG;QACV,+CAA+C;QAC/C,QAAQ,EAAE,GAAG;QACb,4CAA4C;QAC5C,KAAK,EAAE,GAAG;KACX;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;;;OAGG;IACH,2BAA2B,EAAE,CAAC;IAE9B;;OAEG;IACH,uBAAuB,EAAE,EAAE;CACnB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;;OAEG;IACH,mBAAmB,EAAE,CAAC;IAEtB;;OAEG;IACH,eAAe,EAAE,EAAE;IAEnB;;OAEG;IACH,sBAAsB,EAAE,GAAG,EAAE,0BAA0B;IAEvD;;OAEG;IACH,kBAAkB,EAAE,GAAG;CACf,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool configuration for Weather MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Supports both presets and individual tool control for flexible configuration.
|
|
5
|
+
*
|
|
6
|
+
* Usage examples:
|
|
7
|
+
* - ENABLED_TOOLS=basic # Only basic weather tools
|
|
8
|
+
* - ENABLED_TOOLS=full # All tools except experimental
|
|
9
|
+
* - ENABLED_TOOLS=basic,+air_quality # Basic tools + air quality
|
|
10
|
+
* - ENABLED_TOOLS=all,-marine # All tools except marine
|
|
11
|
+
* - ENABLED_TOOLS=forecast,alerts,search # Specific tools only
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Available tool names in the Weather MCP Server
|
|
15
|
+
*/
|
|
16
|
+
export type ToolName = 'get_forecast' | 'get_alerts' | 'get_historical_weather' | 'check_service_status' | 'search_location' | 'get_air_quality' | 'get_marine_conditions' | 'get_weather_imagery' | 'get_lightning_activity' | 'get_river_conditions' | 'get_wildfire_info' | 'save_location' | 'list_saved_locations' | 'get_saved_location' | 'remove_saved_location';
|
|
17
|
+
/**
|
|
18
|
+
* Tool configuration singleton
|
|
19
|
+
*/
|
|
20
|
+
declare class ToolConfig {
|
|
21
|
+
private enabledTools;
|
|
22
|
+
constructor();
|
|
23
|
+
/**
|
|
24
|
+
* Check if a specific tool is enabled
|
|
25
|
+
*/
|
|
26
|
+
isEnabled(tool: ToolName): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Get all enabled tools
|
|
29
|
+
*/
|
|
30
|
+
getEnabledTools(): ToolName[];
|
|
31
|
+
/**
|
|
32
|
+
* Get available presets
|
|
33
|
+
*/
|
|
34
|
+
static getPresets(): Record<string, ToolName[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Get available tool aliases
|
|
37
|
+
*/
|
|
38
|
+
static getAliases(): Record<string, ToolName>;
|
|
39
|
+
}
|
|
40
|
+
export declare const toolConfig: ToolConfig;
|
|
41
|
+
export declare const PRESETS: Record<string, ToolName[]>;
|
|
42
|
+
export declare const ALIASES: Record<string, ToolName>;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,YAAY,GACZ,wBAAwB,GACxB,sBAAsB,GACtB,iBAAiB,GACjB,iBAAiB,GACjB,uBAAuB,GACvB,qBAAqB,GACrB,wBAAwB,GACxB,sBAAsB,GACtB,mBAAmB,GACnB,eAAe,GACf,sBAAsB,GACtB,oBAAoB,GACpB,uBAAuB,CAAC;AAiO5B;;GAEG;AACH,cAAM,UAAU;IACd,OAAO,CAAC,YAAY,CAAgB;;IAapC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAIlC;;OAEG;IACH,eAAe,IAAI,QAAQ,EAAE;IAI7B;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAI/C;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;CAG9C;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC;AAG3C,eAAO,MAAM,OAAO,4BAAe,CAAC;AACpC,eAAO,MAAM,OAAO,0BAAe,CAAC"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool configuration for Weather MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Supports both presets and individual tool control for flexible configuration.
|
|
5
|
+
*
|
|
6
|
+
* Usage examples:
|
|
7
|
+
* - ENABLED_TOOLS=basic # Only basic weather tools
|
|
8
|
+
* - ENABLED_TOOLS=full # All tools except experimental
|
|
9
|
+
* - ENABLED_TOOLS=basic,+air_quality # Basic tools + air quality
|
|
10
|
+
* - ENABLED_TOOLS=all,-marine # All tools except marine
|
|
11
|
+
* - ENABLED_TOOLS=forecast,alerts,search # Specific tools only
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Tool presets for easy configuration
|
|
15
|
+
*/
|
|
16
|
+
const TOOL_PRESETS = {
|
|
17
|
+
// Essential weather tools - minimal overhead
|
|
18
|
+
basic: [
|
|
19
|
+
'get_forecast',
|
|
20
|
+
'get_alerts',
|
|
21
|
+
'search_location',
|
|
22
|
+
'check_service_status',
|
|
23
|
+
'save_location',
|
|
24
|
+
'list_saved_locations',
|
|
25
|
+
'get_saved_location',
|
|
26
|
+
'remove_saved_location'
|
|
27
|
+
],
|
|
28
|
+
// Basic + historical data
|
|
29
|
+
standard: [
|
|
30
|
+
'get_forecast',
|
|
31
|
+
'get_alerts',
|
|
32
|
+
'get_historical_weather',
|
|
33
|
+
'search_location',
|
|
34
|
+
'check_service_status',
|
|
35
|
+
'save_location',
|
|
36
|
+
'list_saved_locations',
|
|
37
|
+
'get_saved_location',
|
|
38
|
+
'remove_saved_location'
|
|
39
|
+
],
|
|
40
|
+
// Standard + environmental data
|
|
41
|
+
full: [
|
|
42
|
+
'get_forecast',
|
|
43
|
+
'get_alerts',
|
|
44
|
+
'get_historical_weather',
|
|
45
|
+
'search_location',
|
|
46
|
+
'check_service_status',
|
|
47
|
+
'get_air_quality',
|
|
48
|
+
'save_location',
|
|
49
|
+
'list_saved_locations',
|
|
50
|
+
'get_saved_location',
|
|
51
|
+
'remove_saved_location'
|
|
52
|
+
],
|
|
53
|
+
// All available tools
|
|
54
|
+
all: [
|
|
55
|
+
'get_forecast',
|
|
56
|
+
'get_alerts',
|
|
57
|
+
'get_historical_weather',
|
|
58
|
+
'check_service_status',
|
|
59
|
+
'search_location',
|
|
60
|
+
'get_air_quality',
|
|
61
|
+
'get_marine_conditions',
|
|
62
|
+
'get_weather_imagery',
|
|
63
|
+
'get_lightning_activity',
|
|
64
|
+
'get_river_conditions',
|
|
65
|
+
'get_wildfire_info',
|
|
66
|
+
'save_location',
|
|
67
|
+
'list_saved_locations',
|
|
68
|
+
'get_saved_location',
|
|
69
|
+
'remove_saved_location'
|
|
70
|
+
]
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Tool aliases for convenience (short names)
|
|
74
|
+
*/
|
|
75
|
+
const TOOL_ALIASES = {
|
|
76
|
+
'forecast': 'get_forecast',
|
|
77
|
+
'alerts': 'get_alerts',
|
|
78
|
+
'warnings': 'get_alerts',
|
|
79
|
+
'historical': 'get_historical_weather',
|
|
80
|
+
'history': 'get_historical_weather',
|
|
81
|
+
'status': 'check_service_status',
|
|
82
|
+
'location': 'search_location',
|
|
83
|
+
'search': 'search_location',
|
|
84
|
+
'air_quality': 'get_air_quality',
|
|
85
|
+
'aqi': 'get_air_quality',
|
|
86
|
+
'marine': 'get_marine_conditions',
|
|
87
|
+
'ocean': 'get_marine_conditions',
|
|
88
|
+
'waves': 'get_marine_conditions',
|
|
89
|
+
'imagery': 'get_weather_imagery',
|
|
90
|
+
'radar': 'get_weather_imagery',
|
|
91
|
+
'satellite': 'get_weather_imagery',
|
|
92
|
+
'lightning': 'get_lightning_activity',
|
|
93
|
+
'strikes': 'get_lightning_activity',
|
|
94
|
+
'thunderstorm': 'get_lightning_activity',
|
|
95
|
+
'river': 'get_river_conditions',
|
|
96
|
+
'rivers': 'get_river_conditions',
|
|
97
|
+
'flood': 'get_river_conditions',
|
|
98
|
+
'streamflow': 'get_river_conditions',
|
|
99
|
+
'wildfire': 'get_wildfire_info',
|
|
100
|
+
'wildfires': 'get_wildfire_info',
|
|
101
|
+
'fire': 'get_wildfire_info',
|
|
102
|
+
'fires': 'get_wildfire_info',
|
|
103
|
+
'smoke': 'get_wildfire_info'
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Parse the ENABLED_TOOLS environment variable
|
|
107
|
+
*
|
|
108
|
+
* Supports:
|
|
109
|
+
* - Presets: "basic", "standard", "full", "all"
|
|
110
|
+
* - Individual tools: "forecast,current,alerts"
|
|
111
|
+
* - Adding to presets: "basic,+air_quality"
|
|
112
|
+
* - Removing from presets: "all,-marine"
|
|
113
|
+
* - Combinations: "standard,+air_quality,-alerts"
|
|
114
|
+
*
|
|
115
|
+
* @param envValue The ENABLED_TOOLS environment variable value
|
|
116
|
+
* @returns Set of enabled tool names
|
|
117
|
+
*/
|
|
118
|
+
function parseEnabledTools(envValue) {
|
|
119
|
+
// Default to "basic" preset if not specified
|
|
120
|
+
if (!envValue) {
|
|
121
|
+
return new Set(TOOL_PRESETS.basic);
|
|
122
|
+
}
|
|
123
|
+
const parts = envValue.toLowerCase().split(',').map(s => s.trim()).filter(Boolean);
|
|
124
|
+
let enabledTools = new Set();
|
|
125
|
+
let hasBaseSet = false;
|
|
126
|
+
for (const part of parts) {
|
|
127
|
+
// Handle additions (+tool)
|
|
128
|
+
if (part.startsWith('+')) {
|
|
129
|
+
const toolName = part.slice(1);
|
|
130
|
+
const resolvedTool = resolveToolName(toolName);
|
|
131
|
+
if (resolvedTool) {
|
|
132
|
+
enabledTools.add(resolvedTool);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
console.warn(`Unknown tool to add: "${toolName}"`);
|
|
136
|
+
}
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
// Handle removals (-tool)
|
|
140
|
+
if (part.startsWith('-')) {
|
|
141
|
+
const toolName = part.slice(1);
|
|
142
|
+
const resolvedTool = resolveToolName(toolName);
|
|
143
|
+
if (resolvedTool) {
|
|
144
|
+
enabledTools.delete(resolvedTool);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console.warn(`Unknown tool to remove: "${toolName}"`);
|
|
148
|
+
}
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
// Handle presets
|
|
152
|
+
if (part in TOOL_PRESETS) {
|
|
153
|
+
if (!hasBaseSet) {
|
|
154
|
+
// First preset replaces the default
|
|
155
|
+
enabledTools = new Set(TOOL_PRESETS[part]);
|
|
156
|
+
hasBaseSet = true;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Additional presets merge with existing
|
|
160
|
+
for (const tool of TOOL_PRESETS[part]) {
|
|
161
|
+
enabledTools.add(tool);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
// Handle individual tools
|
|
167
|
+
const resolvedTool = resolveToolName(part);
|
|
168
|
+
if (resolvedTool) {
|
|
169
|
+
if (!hasBaseSet) {
|
|
170
|
+
// First individual tool creates a new set
|
|
171
|
+
enabledTools = new Set([resolvedTool]);
|
|
172
|
+
hasBaseSet = true;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
enabledTools.add(resolvedTool);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
console.warn(`Unknown tool or preset: "${part}"`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return enabledTools;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Resolve a tool name or alias to the canonical tool name
|
|
186
|
+
* @param name Tool name or alias
|
|
187
|
+
* @returns Canonical tool name or undefined if not found
|
|
188
|
+
*/
|
|
189
|
+
function resolveToolName(name) {
|
|
190
|
+
const normalized = name.toLowerCase();
|
|
191
|
+
// Check if it's already a canonical name
|
|
192
|
+
if (isToolName(normalized)) {
|
|
193
|
+
return normalized;
|
|
194
|
+
}
|
|
195
|
+
// Check aliases
|
|
196
|
+
if (normalized in TOOL_ALIASES) {
|
|
197
|
+
return TOOL_ALIASES[normalized];
|
|
198
|
+
}
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Type guard to check if a string is a valid ToolName
|
|
203
|
+
*/
|
|
204
|
+
function isToolName(name) {
|
|
205
|
+
const validTools = [
|
|
206
|
+
'get_forecast',
|
|
207
|
+
'get_alerts',
|
|
208
|
+
'get_historical_weather',
|
|
209
|
+
'check_service_status',
|
|
210
|
+
'search_location',
|
|
211
|
+
'get_air_quality',
|
|
212
|
+
'get_marine_conditions',
|
|
213
|
+
'get_weather_imagery',
|
|
214
|
+
'get_lightning_activity',
|
|
215
|
+
'get_river_conditions',
|
|
216
|
+
'get_wildfire_info',
|
|
217
|
+
'save_location',
|
|
218
|
+
'list_saved_locations',
|
|
219
|
+
'get_saved_location',
|
|
220
|
+
'remove_saved_location'
|
|
221
|
+
];
|
|
222
|
+
return validTools.includes(name);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Tool configuration singleton
|
|
226
|
+
*/
|
|
227
|
+
class ToolConfig {
|
|
228
|
+
enabledTools;
|
|
229
|
+
constructor() {
|
|
230
|
+
this.enabledTools = parseEnabledTools(process.env.ENABLED_TOOLS);
|
|
231
|
+
// Log enabled tools for debugging
|
|
232
|
+
if (this.enabledTools.size > 0) {
|
|
233
|
+
console.error(`[ToolConfig] Enabled tools (${this.enabledTools.size}): ${Array.from(this.enabledTools).join(', ')}`);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
console.error('[ToolConfig] Warning: No tools enabled!');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Check if a specific tool is enabled
|
|
241
|
+
*/
|
|
242
|
+
isEnabled(tool) {
|
|
243
|
+
return this.enabledTools.has(tool);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get all enabled tools
|
|
247
|
+
*/
|
|
248
|
+
getEnabledTools() {
|
|
249
|
+
return Array.from(this.enabledTools);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get available presets
|
|
253
|
+
*/
|
|
254
|
+
static getPresets() {
|
|
255
|
+
return { ...TOOL_PRESETS };
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get available tool aliases
|
|
259
|
+
*/
|
|
260
|
+
static getAliases() {
|
|
261
|
+
return { ...TOOL_ALIASES };
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Export singleton instance
|
|
265
|
+
export const toolConfig = new ToolConfig();
|
|
266
|
+
// Export preset definitions for documentation
|
|
267
|
+
export const PRESETS = TOOL_PRESETS;
|
|
268
|
+
export const ALIASES = TOOL_ALIASES;
|
|
269
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"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"}
|