@dangahagan/weather-mcp 0.1.2 → 0.4.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/README.md +295 -52
- package/dist/config/cache.d.ts +30 -0
- package/dist/config/cache.d.ts.map +1 -0
- package/dist/config/cache.js +105 -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/errors/ApiError.d.ts +62 -0
- package/dist/errors/ApiError.d.ts.map +1 -0
- package/dist/errors/ApiError.js +147 -0
- package/dist/errors/ApiError.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 +79 -0
- package/dist/handlers/alertsHandler.js.map +1 -0
- package/dist/handlers/currentConditionsHandler.d.ts +11 -0
- package/dist/handlers/currentConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/currentConditionsHandler.js +168 -0
- package/dist/handlers/currentConditionsHandler.js.map +1 -0
- package/dist/handlers/forecastHandler.d.ts +13 -0
- package/dist/handlers/forecastHandler.d.ts.map +1 -0
- package/dist/handlers/forecastHandler.js +226 -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/locationHandler.d.ts +11 -0
- package/dist/handlers/locationHandler.d.ts.map +1 -0
- package/dist/handlers/locationHandler.js +113 -0
- package/dist/handlers/locationHandler.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 +106 -0
- package/dist/handlers/statusHandler.js.map +1 -0
- package/dist/index.js +149 -343
- package/dist/index.js.map +1 -1
- package/dist/services/noaa.d.ts +23 -1
- package/dist/services/noaa.d.ts.map +1 -1
- package/dist/services/noaa.js +154 -41
- package/dist/services/noaa.js.map +1 -1
- package/dist/services/openmeteo.d.ts +63 -3
- package/dist/services/openmeteo.d.ts.map +1 -1
- package/dist/services/openmeteo.js +284 -50
- package/dist/services/openmeteo.js.map +1 -1
- package/dist/types/noaa.d.ts +64 -12
- package/dist/types/noaa.d.ts.map +1 -1
- package/dist/types/openmeteo.d.ts +156 -0
- package/dist/types/openmeteo.d.ts.map +1 -1
- 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/logger.d.ts +59 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +128 -0
- package/dist/utils/logger.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/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/package.json +10 -3
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for get_current_conditions tool
|
|
3
|
+
*/
|
|
4
|
+
import { validateCoordinates } from '../utils/validation.js';
|
|
5
|
+
import { convertToFahrenheit } from '../utils/temperatureConversion.js';
|
|
6
|
+
import { DisplayThresholds } from '../config/displayThresholds.js';
|
|
7
|
+
export async function handleGetCurrentConditions(args, noaaService) {
|
|
8
|
+
// Validate input parameters with runtime checks
|
|
9
|
+
const { latitude, longitude } = validateCoordinates(args);
|
|
10
|
+
// Get current observation
|
|
11
|
+
const observation = await noaaService.getCurrentConditions(latitude, longitude);
|
|
12
|
+
const props = observation.properties;
|
|
13
|
+
// Format current conditions
|
|
14
|
+
let output = `# Current Weather Conditions\n\n`;
|
|
15
|
+
output += `**Station:** ${props.station}\n`;
|
|
16
|
+
output += `**Time:** ${new Date(props.timestamp).toLocaleString()}\n\n`;
|
|
17
|
+
// Main conditions
|
|
18
|
+
if (props.textDescription) {
|
|
19
|
+
output += `**Conditions:** ${props.textDescription}\n`;
|
|
20
|
+
}
|
|
21
|
+
// Temperature section
|
|
22
|
+
const tempF = convertToFahrenheit(props.temperature.value, props.temperature.unitCode);
|
|
23
|
+
if (tempF !== null) {
|
|
24
|
+
output += `**Temperature:** ${Math.round(tempF)}°F\n`;
|
|
25
|
+
// Show heat index when temperature is high and heat index is available
|
|
26
|
+
if (props.heatIndex) {
|
|
27
|
+
const heatIndexF = convertToFahrenheit(props.heatIndex.value, props.heatIndex.unitCode);
|
|
28
|
+
if (heatIndexF !== null && tempF > DisplayThresholds.temperature.showHeatIndex && heatIndexF > tempF) {
|
|
29
|
+
output += `**Feels Like (Heat Index):** ${Math.round(heatIndexF)}°F\n`;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Show wind chill when temperature is low and wind chill is available
|
|
33
|
+
if (props.windChill) {
|
|
34
|
+
const windChillF = convertToFahrenheit(props.windChill.value, props.windChill.unitCode);
|
|
35
|
+
if (windChillF !== null && tempF < DisplayThresholds.temperature.showWindChill && windChillF < tempF) {
|
|
36
|
+
output += `**Feels Like (Wind Chill):** ${Math.round(windChillF)}°F\n`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// 24-hour temperature range
|
|
41
|
+
const max24F = props.maxTemperatureLast24Hours ? convertToFahrenheit(props.maxTemperatureLast24Hours.value, props.maxTemperatureLast24Hours.unitCode) : null;
|
|
42
|
+
const min24F = props.minTemperatureLast24Hours ? convertToFahrenheit(props.minTemperatureLast24Hours.value, props.minTemperatureLast24Hours.unitCode) : null;
|
|
43
|
+
if (max24F !== null || min24F !== null) {
|
|
44
|
+
let range = `**24-Hour Range:**`;
|
|
45
|
+
if (max24F !== null)
|
|
46
|
+
range += ` High ${Math.round(max24F)}°F`;
|
|
47
|
+
if (max24F !== null && min24F !== null)
|
|
48
|
+
range += ` /`;
|
|
49
|
+
if (min24F !== null)
|
|
50
|
+
range += ` Low ${Math.round(min24F)}°F`;
|
|
51
|
+
output += `${range}\n`;
|
|
52
|
+
}
|
|
53
|
+
if (props.dewpoint.value !== null) {
|
|
54
|
+
const dewF = convertToFahrenheit(props.dewpoint.value, props.dewpoint.unitCode);
|
|
55
|
+
if (dewF !== null) {
|
|
56
|
+
output += `**Dewpoint:** ${Math.round(dewF)}°F\n`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (props.relativeHumidity.value !== null) {
|
|
60
|
+
output += `**Humidity:** ${Math.round(props.relativeHumidity.value)}%\n`;
|
|
61
|
+
}
|
|
62
|
+
// Wind section
|
|
63
|
+
if (props.windSpeed && props.windSpeed.value !== null) {
|
|
64
|
+
const windMph = props.windSpeed.unitCode.includes('km_h')
|
|
65
|
+
? props.windSpeed.value * 0.621371
|
|
66
|
+
: props.windSpeed.value * 2.23694; // m/s to mph
|
|
67
|
+
const windDir = props.windDirection?.value ?? null;
|
|
68
|
+
output += `**Wind:** ${Math.round(windMph)} mph`;
|
|
69
|
+
if (windDir !== null) {
|
|
70
|
+
output += ` from ${Math.round(windDir)}°`;
|
|
71
|
+
}
|
|
72
|
+
// Add wind gust if available and significant
|
|
73
|
+
if (props.windGust && props.windGust.value !== null) {
|
|
74
|
+
const gustMph = props.windGust.unitCode.includes('km_h')
|
|
75
|
+
? props.windGust.value * 0.621371
|
|
76
|
+
: props.windGust.value * 2.23694;
|
|
77
|
+
if (gustMph > windMph * DisplayThresholds.wind.gustSignificanceRatio) {
|
|
78
|
+
output += `, gusting to ${Math.round(gustMph)} mph`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
output += `\n`;
|
|
82
|
+
}
|
|
83
|
+
if (props.barometricPressure && props.barometricPressure.value !== null) {
|
|
84
|
+
const pressureInHg = props.barometricPressure.value * 0.0002953;
|
|
85
|
+
output += `**Pressure:** ${pressureInHg.toFixed(2)} inHg\n`;
|
|
86
|
+
}
|
|
87
|
+
// Enhanced visibility and cloud cover
|
|
88
|
+
if (props.visibility && props.visibility.value !== null) {
|
|
89
|
+
const visibilityMiles = props.visibility.value * 0.000621371;
|
|
90
|
+
output += `**Visibility:** ${visibilityMiles.toFixed(1)} miles`;
|
|
91
|
+
// Add descriptive text for visibility
|
|
92
|
+
if (visibilityMiles < DisplayThresholds.visibility.denseFog) {
|
|
93
|
+
output += ` (dense fog)`;
|
|
94
|
+
}
|
|
95
|
+
else if (visibilityMiles < DisplayThresholds.visibility.fog) {
|
|
96
|
+
output += ` (fog)`;
|
|
97
|
+
}
|
|
98
|
+
else if (visibilityMiles < DisplayThresholds.visibility.hazeMist) {
|
|
99
|
+
output += ` (haze/mist)`;
|
|
100
|
+
}
|
|
101
|
+
else if (visibilityMiles >= DisplayThresholds.visibility.clear) {
|
|
102
|
+
output += ` (clear)`;
|
|
103
|
+
}
|
|
104
|
+
output += `\n`;
|
|
105
|
+
}
|
|
106
|
+
// Cloud cover details
|
|
107
|
+
if (props.cloudLayers && props.cloudLayers.length > 0) {
|
|
108
|
+
const cloudDescriptions = {
|
|
109
|
+
'FEW': 'Few clouds',
|
|
110
|
+
'SCT': 'Scattered clouds',
|
|
111
|
+
'BKN': 'Broken clouds',
|
|
112
|
+
'OVC': 'Overcast',
|
|
113
|
+
'CLR': 'Clear',
|
|
114
|
+
'SKC': 'Sky clear'
|
|
115
|
+
};
|
|
116
|
+
const clouds = props.cloudLayers
|
|
117
|
+
.filter(layer => layer.amount)
|
|
118
|
+
.map(layer => {
|
|
119
|
+
const desc = cloudDescriptions[layer.amount] || layer.amount;
|
|
120
|
+
if (layer.base?.value !== null && layer.base?.value !== undefined) {
|
|
121
|
+
const heightFt = layer.base.unitCode.includes('m')
|
|
122
|
+
? layer.base.value * 3.28084
|
|
123
|
+
: layer.base.value;
|
|
124
|
+
return `${desc} at ${Math.round(heightFt).toLocaleString()} ft`;
|
|
125
|
+
}
|
|
126
|
+
return desc;
|
|
127
|
+
});
|
|
128
|
+
if (clouds.length > 0) {
|
|
129
|
+
output += `**Cloud Cover:** ${clouds.join(', ')}\n`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Precipitation section
|
|
133
|
+
const precip1h = props.precipitationLastHour?.value ?? null;
|
|
134
|
+
const precip3h = props.precipitationLast3Hours?.value ?? null;
|
|
135
|
+
const precip6h = props.precipitationLast6Hours?.value ?? null;
|
|
136
|
+
if (precip1h !== null || precip3h !== null || precip6h !== null) {
|
|
137
|
+
output += `\n## Recent Precipitation\n`;
|
|
138
|
+
if (precip1h !== null && props.precipitationLastHour) {
|
|
139
|
+
const precipIn = props.precipitationLastHour.unitCode.includes('mm')
|
|
140
|
+
? precip1h * 0.0393701
|
|
141
|
+
: precip1h;
|
|
142
|
+
output += `**Last Hour:** ${precipIn.toFixed(2)} inches\n`;
|
|
143
|
+
}
|
|
144
|
+
if (precip3h !== null && props.precipitationLast3Hours) {
|
|
145
|
+
const precipIn = props.precipitationLast3Hours.unitCode.includes('mm')
|
|
146
|
+
? precip3h * 0.0393701
|
|
147
|
+
: precip3h;
|
|
148
|
+
output += `**Last 3 Hours:** ${precipIn.toFixed(2)} inches\n`;
|
|
149
|
+
}
|
|
150
|
+
if (precip6h !== null && props.precipitationLast6Hours) {
|
|
151
|
+
const precipIn = props.precipitationLast6Hours.unitCode.includes('mm')
|
|
152
|
+
? precip6h * 0.0393701
|
|
153
|
+
: precip6h;
|
|
154
|
+
output += `**Last 6 Hours:** ${precipIn.toFixed(2)} inches\n`;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
output += `\n---\n`;
|
|
158
|
+
output += `*Data source: NOAA National Weather Service*\n`;
|
|
159
|
+
return {
|
|
160
|
+
content: [
|
|
161
|
+
{
|
|
162
|
+
type: 'text',
|
|
163
|
+
text: output
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=currentConditionsHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"currentConditionsHandler.js","sourceRoot":"","sources":["../../src/handlers/currentConditionsHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for get_forecast tool
|
|
3
|
+
* Supports both NOAA (US) and Open-Meteo (global) forecast sources
|
|
4
|
+
*/
|
|
5
|
+
import { NOAAService } from '../services/noaa.js';
|
|
6
|
+
import { OpenMeteoService } from '../services/openmeteo.js';
|
|
7
|
+
export declare function handleGetForecast(args: unknown, noaaService: NOAAService, openMeteoService: OpenMeteoService): Promise<{
|
|
8
|
+
content: Array<{
|
|
9
|
+
type: string;
|
|
10
|
+
text: string;
|
|
11
|
+
}>;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=forecastHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forecastHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/forecastHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AA+B5D,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2C7D"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for get_forecast tool
|
|
3
|
+
* Supports both NOAA (US) and Open-Meteo (global) forecast sources
|
|
4
|
+
*/
|
|
5
|
+
import { validateCoordinates, validateForecastDays, validateGranularity, validateOptionalBoolean, } from '../utils/validation.js';
|
|
6
|
+
/**
|
|
7
|
+
* Determine if coordinates are within the United States (including Alaska, Hawaii, and territories)
|
|
8
|
+
* Uses bounding box approach for simplicity
|
|
9
|
+
*/
|
|
10
|
+
function isInUS(latitude, longitude) {
|
|
11
|
+
// Continental US, Alaska, Hawaii, Puerto Rico, and territories
|
|
12
|
+
const inContinentalUS = latitude >= 24.5 && latitude <= 49.4 && longitude >= -125 && longitude <= -66.9;
|
|
13
|
+
const inAlaska = latitude >= 51 && latitude <= 71.4 && longitude >= -180 && longitude <= -129.9;
|
|
14
|
+
const inHawaii = latitude >= 18.9 && latitude <= 28.5 && longitude >= -178.4 && longitude <= -154.8;
|
|
15
|
+
const inPuertoRico = latitude >= 17.9 && latitude <= 18.5 && longitude >= -67.3 && longitude <= -65.2;
|
|
16
|
+
return inContinentalUS || inAlaska || inHawaii || inPuertoRico;
|
|
17
|
+
}
|
|
18
|
+
export async function handleGetForecast(args, noaaService, openMeteoService) {
|
|
19
|
+
// Validate input parameters with runtime checks
|
|
20
|
+
const { latitude, longitude } = validateCoordinates(args);
|
|
21
|
+
const days = validateForecastDays(args);
|
|
22
|
+
const granularity = validateGranularity(args?.granularity);
|
|
23
|
+
const include_precipitation_probability = validateOptionalBoolean(args?.include_precipitation_probability, 'include_precipitation_probability', true);
|
|
24
|
+
// Get source preference or auto-detect
|
|
25
|
+
const requestedSource = args?.source || 'auto';
|
|
26
|
+
let useNOAA;
|
|
27
|
+
if (requestedSource === 'auto') {
|
|
28
|
+
// Auto-detect based on location (US = NOAA, elsewhere = Open-Meteo)
|
|
29
|
+
useNOAA = isInUS(latitude, longitude);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
useNOAA = requestedSource === 'noaa';
|
|
33
|
+
}
|
|
34
|
+
// Use NOAA for US locations or if explicitly requested
|
|
35
|
+
if (useNOAA) {
|
|
36
|
+
return await formatNOAAForecast(noaaService, latitude, longitude, days, granularity, include_precipitation_probability);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Use Open-Meteo for international locations
|
|
40
|
+
return await formatOpenMeteoForecast(openMeteoService, latitude, longitude, days, granularity, include_precipitation_probability);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Format NOAA forecast data for display
|
|
45
|
+
*/
|
|
46
|
+
async function formatNOAAForecast(noaaService, latitude, longitude, days, granularity, include_precipitation_probability) {
|
|
47
|
+
// Get forecast data based on granularity
|
|
48
|
+
const forecast = granularity === 'hourly'
|
|
49
|
+
? await noaaService.getHourlyForecastByCoordinates(latitude, longitude)
|
|
50
|
+
: await noaaService.getForecastByCoordinates(latitude, longitude);
|
|
51
|
+
// Determine how many periods to show
|
|
52
|
+
let periods;
|
|
53
|
+
if (granularity === 'hourly') {
|
|
54
|
+
// For hourly, show up to days * 24 hours
|
|
55
|
+
periods = forecast.properties.periods.slice(0, days * 24);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// For daily, show up to days * 2 (day/night periods)
|
|
59
|
+
periods = forecast.properties.periods.slice(0, days * 2);
|
|
60
|
+
}
|
|
61
|
+
// Format the forecast for display
|
|
62
|
+
let output = `# Weather Forecast (${granularity === 'hourly' ? 'Hourly' : 'Daily'})\n\n`;
|
|
63
|
+
output += `**Location:** ${latitude.toFixed(4)}, ${longitude.toFixed(4)}\n`;
|
|
64
|
+
output += `**Elevation:** ${forecast.properties.elevation.value}m\n`;
|
|
65
|
+
if (forecast.properties.updated) {
|
|
66
|
+
output += `**Updated:** ${new Date(forecast.properties.updated).toLocaleString()}\n`;
|
|
67
|
+
}
|
|
68
|
+
output += `**Showing:** ${periods.length} ${granularity === 'hourly' ? 'hours' : 'periods'}\n\n`;
|
|
69
|
+
for (const period of periods) {
|
|
70
|
+
// For hourly forecasts, use the start time as the header since period names are empty
|
|
71
|
+
const periodHeader = granularity === 'hourly' && !period.name
|
|
72
|
+
? new Date(period.startTime).toLocaleString()
|
|
73
|
+
: period.name;
|
|
74
|
+
output += `## ${periodHeader}\n`;
|
|
75
|
+
output += `**Temperature:** ${period.temperature}°${period.temperatureUnit}`;
|
|
76
|
+
// Add temperature trend if available
|
|
77
|
+
if (period.temperatureTrend && period.temperatureTrend.trim()) {
|
|
78
|
+
output += ` (${period.temperatureTrend})`;
|
|
79
|
+
}
|
|
80
|
+
output += `\n`;
|
|
81
|
+
// Add precipitation probability if requested and available
|
|
82
|
+
if (include_precipitation_probability && period.probabilityOfPrecipitation?.value !== null && period.probabilityOfPrecipitation?.value !== undefined) {
|
|
83
|
+
output += `**Precipitation Chance:** ${period.probabilityOfPrecipitation.value}%\n`;
|
|
84
|
+
}
|
|
85
|
+
output += `**Wind:** ${period.windSpeed} ${period.windDirection}\n`;
|
|
86
|
+
// Add humidity if available (more common in hourly forecasts)
|
|
87
|
+
if (period.relativeHumidity?.value !== null && period.relativeHumidity?.value !== undefined) {
|
|
88
|
+
output += `**Humidity:** ${period.relativeHumidity.value}%\n`;
|
|
89
|
+
}
|
|
90
|
+
output += `**Forecast:** ${period.shortForecast}\n\n`;
|
|
91
|
+
// For daily forecasts, include detailed forecast
|
|
92
|
+
if (granularity === 'daily' && period.detailedForecast) {
|
|
93
|
+
output += `${period.detailedForecast}\n\n`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
output += `---\n`;
|
|
97
|
+
output += `*Data source: NOAA National Weather Service (US)*\n`;
|
|
98
|
+
return {
|
|
99
|
+
content: [
|
|
100
|
+
{
|
|
101
|
+
type: 'text',
|
|
102
|
+
text: output
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Format Open-Meteo forecast data for display
|
|
109
|
+
*/
|
|
110
|
+
async function formatOpenMeteoForecast(openMeteoService, latitude, longitude, days, granularity, include_precipitation_probability) {
|
|
111
|
+
// Get forecast data from Open-Meteo
|
|
112
|
+
const forecast = await openMeteoService.getForecast(latitude, longitude, days, granularity === 'hourly');
|
|
113
|
+
let output = `# Weather Forecast (${granularity === 'hourly' ? 'Hourly' : 'Daily'})\n\n`;
|
|
114
|
+
output += `**Location:** ${latitude.toFixed(4)}, ${longitude.toFixed(4)}\n`;
|
|
115
|
+
output += `**Elevation:** ${forecast.elevation}m\n`;
|
|
116
|
+
output += `**Timezone:** ${forecast.timezone}\n`;
|
|
117
|
+
output += `**Forecast Days:** ${days}\n\n`;
|
|
118
|
+
if (granularity === 'hourly' && forecast.hourly) {
|
|
119
|
+
// Format hourly data
|
|
120
|
+
const hourly = forecast.hourly;
|
|
121
|
+
const numHours = Math.min(hourly.time.length, days * 24);
|
|
122
|
+
for (let i = 0; i < numHours; i++) {
|
|
123
|
+
const time = new Date(hourly.time[i]);
|
|
124
|
+
output += `## ${time.toLocaleString()}\n`;
|
|
125
|
+
if (hourly.temperature_2m?.[i] !== undefined) {
|
|
126
|
+
output += `**Temperature:** ${Math.round(hourly.temperature_2m[i])}°F`;
|
|
127
|
+
if (hourly.apparent_temperature?.[i] !== undefined) {
|
|
128
|
+
output += ` (feels like ${Math.round(hourly.apparent_temperature[i])}°F)`;
|
|
129
|
+
}
|
|
130
|
+
output += `\n`;
|
|
131
|
+
}
|
|
132
|
+
if (include_precipitation_probability && hourly.precipitation_probability?.[i] !== undefined) {
|
|
133
|
+
output += `**Precipitation Chance:** ${hourly.precipitation_probability[i]}%\n`;
|
|
134
|
+
}
|
|
135
|
+
if (hourly.precipitation?.[i] !== undefined && hourly.precipitation[i] > 0) {
|
|
136
|
+
output += `**Precipitation:** ${hourly.precipitation[i].toFixed(2)} in\n`;
|
|
137
|
+
}
|
|
138
|
+
if (hourly.wind_speed_10m?.[i] !== undefined) {
|
|
139
|
+
const windDir = hourly.wind_direction_10m?.[i] !== undefined
|
|
140
|
+
? ` ${getWindDirection(hourly.wind_direction_10m[i])}`
|
|
141
|
+
: '';
|
|
142
|
+
output += `**Wind:** ${Math.round(hourly.wind_speed_10m[i])} mph${windDir}\n`;
|
|
143
|
+
if (hourly.wind_gusts_10m?.[i] !== undefined && hourly.wind_gusts_10m[i] > hourly.wind_speed_10m[i] * 1.2) {
|
|
144
|
+
output += `**Wind Gusts:** ${Math.round(hourly.wind_gusts_10m[i])} mph\n`;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (hourly.relative_humidity_2m?.[i] !== undefined) {
|
|
148
|
+
output += `**Humidity:** ${hourly.relative_humidity_2m[i]}%\n`;
|
|
149
|
+
}
|
|
150
|
+
if (hourly.weather_code?.[i] !== undefined) {
|
|
151
|
+
output += `**Conditions:** ${openMeteoService.getWeatherDescription(hourly.weather_code[i])}\n`;
|
|
152
|
+
}
|
|
153
|
+
output += `\n`;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else if (forecast.daily) {
|
|
157
|
+
// Format daily data with sunrise/sunset
|
|
158
|
+
const daily = forecast.daily;
|
|
159
|
+
const numDays = Math.min(daily.time.length, days);
|
|
160
|
+
for (let i = 0; i < numDays; i++) {
|
|
161
|
+
const date = new Date(daily.time[i]);
|
|
162
|
+
output += `## ${date.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric' })}\n`;
|
|
163
|
+
if (daily.temperature_2m_max?.[i] !== undefined && daily.temperature_2m_min?.[i] !== undefined) {
|
|
164
|
+
output += `**Temperature:** High ${Math.round(daily.temperature_2m_max[i])}°F / Low ${Math.round(daily.temperature_2m_min[i])}°F\n`;
|
|
165
|
+
}
|
|
166
|
+
if (daily.apparent_temperature_max?.[i] !== undefined && daily.apparent_temperature_min?.[i] !== undefined) {
|
|
167
|
+
output += `**Feels Like:** High ${Math.round(daily.apparent_temperature_max[i])}°F / Low ${Math.round(daily.apparent_temperature_min[i])}°F\n`;
|
|
168
|
+
}
|
|
169
|
+
// Include sunrise/sunset data
|
|
170
|
+
if (daily.sunrise?.[i]) {
|
|
171
|
+
const sunrise = new Date(daily.sunrise[i]);
|
|
172
|
+
output += `**Sunrise:** ${sunrise.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })}\n`;
|
|
173
|
+
}
|
|
174
|
+
if (daily.sunset?.[i]) {
|
|
175
|
+
const sunset = new Date(daily.sunset[i]);
|
|
176
|
+
output += `**Sunset:** ${sunset.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })}\n`;
|
|
177
|
+
}
|
|
178
|
+
if (daily.daylight_duration?.[i] !== undefined) {
|
|
179
|
+
const hours = Math.floor(daily.daylight_duration[i] / 3600);
|
|
180
|
+
const minutes = Math.floor((daily.daylight_duration[i] % 3600) / 60);
|
|
181
|
+
output += `**Daylight Duration:** ${hours}h ${minutes}m\n`;
|
|
182
|
+
}
|
|
183
|
+
if (include_precipitation_probability && daily.precipitation_probability_max?.[i] !== undefined) {
|
|
184
|
+
output += `**Precipitation Chance:** ${daily.precipitation_probability_max[i]}%\n`;
|
|
185
|
+
}
|
|
186
|
+
if (daily.precipitation_sum?.[i] !== undefined && daily.precipitation_sum[i] > 0) {
|
|
187
|
+
output += `**Precipitation:** ${daily.precipitation_sum[i].toFixed(2)} in\n`;
|
|
188
|
+
}
|
|
189
|
+
if (daily.wind_speed_10m_max?.[i] !== undefined) {
|
|
190
|
+
const windDir = daily.wind_direction_10m_dominant?.[i] !== undefined
|
|
191
|
+
? ` ${getWindDirection(daily.wind_direction_10m_dominant[i])}`
|
|
192
|
+
: '';
|
|
193
|
+
output += `**Wind:** ${Math.round(daily.wind_speed_10m_max[i])} mph${windDir}\n`;
|
|
194
|
+
if (daily.wind_gusts_10m_max?.[i] !== undefined && daily.wind_gusts_10m_max[i] > daily.wind_speed_10m_max[i] * 1.2) {
|
|
195
|
+
output += `**Wind Gusts:** ${Math.round(daily.wind_gusts_10m_max[i])} mph\n`;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (daily.weather_code?.[i] !== undefined) {
|
|
199
|
+
output += `**Conditions:** ${openMeteoService.getWeatherDescription(daily.weather_code[i])}\n`;
|
|
200
|
+
}
|
|
201
|
+
if (daily.uv_index_max?.[i] !== undefined) {
|
|
202
|
+
output += `**UV Index:** ${daily.uv_index_max[i].toFixed(1)}\n`;
|
|
203
|
+
}
|
|
204
|
+
output += `\n`;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
output += `---\n`;
|
|
208
|
+
output += `*Data source: Open-Meteo (Global)*\n`;
|
|
209
|
+
return {
|
|
210
|
+
content: [
|
|
211
|
+
{
|
|
212
|
+
type: 'text',
|
|
213
|
+
text: output
|
|
214
|
+
}
|
|
215
|
+
]
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Convert wind direction degrees to cardinal direction
|
|
220
|
+
*/
|
|
221
|
+
function getWindDirection(degrees) {
|
|
222
|
+
const directions = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'];
|
|
223
|
+
const index = Math.round(degrees / 22.5) % 16;
|
|
224
|
+
return directions[index];
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=forecastHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forecastHandler.js","sourceRoot":"","sources":["../../src/handlers/forecastHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAWhC;;;GAGG;AACH,SAAS,MAAM,CAAC,QAAgB,EAAE,SAAiB;IACjD,+DAA+D;IAC/D,MAAM,eAAe,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,IAAI,CAAC,GAAG,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC;IACxG,MAAM,QAAQ,GAAG,QAAQ,IAAI,EAAE,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,IAAI,CAAC,GAAG,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC;IAChG,MAAM,QAAQ,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,IAAI,CAAC,KAAK,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC;IACpG,MAAM,YAAY,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC;IAEtG,OAAO,eAAe,IAAI,QAAQ,IAAI,QAAQ,IAAI,YAAY,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAa,EACb,WAAwB,EACxB,gBAAkC;IAElC,gDAAgD;IAChD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,mBAAmB,CAAE,IAAqB,EAAE,WAAW,CAAC,CAAC;IAC7E,MAAM,iCAAiC,GAAG,uBAAuB,CAC9D,IAAqB,EAAE,iCAAiC,EACzD,mCAAmC,EACnC,IAAI,CACL,CAAC;IAEF,uCAAuC;IACvC,MAAM,eAAe,GAAI,IAAqB,EAAE,MAAM,IAAI,MAAM,CAAC;IACjE,IAAI,OAAgB,CAAC;IAErB,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;QAC/B,oEAAoE;QACpE,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,eAAe,KAAK,MAAM,CAAC;IACvC,CAAC;IAED,uDAAuD;IACvD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,MAAM,kBAAkB,CAC7B,WAAW,EACX,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,WAAW,EACX,iCAAiC,CAClC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,6CAA6C;QAC7C,OAAO,MAAM,uBAAuB,CAClC,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,WAAW,EACX,iCAAiC,CAClC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAC/B,WAAwB,EACxB,QAAgB,EAChB,SAAiB,EACjB,IAAY,EACZ,WAA+B,EAC/B,iCAA0C;IAE1C,yCAAyC;IACzC,MAAM,QAAQ,GAAG,WAAW,KAAK,QAAQ;QACvC,CAAC,CAAC,MAAM,WAAW,CAAC,8BAA8B,CAAC,QAAQ,EAAE,SAAS,CAAC;QACvE,CAAC,CAAC,MAAM,WAAW,CAAC,wBAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEpE,qCAAqC;IACrC,IAAI,OAAO,CAAC;IACZ,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,yCAAyC;QACzC,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,kCAAkC;IAClC,IAAI,MAAM,GAAG,uBAAuB,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;IACzF,MAAM,IAAI,iBAAiB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,MAAM,IAAI,kBAAkB,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC;IACrE,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC;IACvF,CAAC;IACD,MAAM,IAAI,gBAAgB,OAAO,CAAC,MAAM,IAAI,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC;IAEjG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,sFAAsF;QACtF,MAAM,YAAY,GAAG,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI;YAC3D,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;YAC7C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAChB,MAAM,IAAI,MAAM,YAAY,IAAI,CAAC;QACjC,MAAM,IAAI,oBAAoB,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAE7E,qCAAqC;QACrC,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,MAAM,CAAC,gBAAgB,GAAG,CAAC;QAC5C,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;QAEf,2DAA2D;QAC3D,IAAI,iCAAiC,IAAI,MAAM,CAAC,0BAA0B,EAAE,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,0BAA0B,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YACrJ,MAAM,IAAI,6BAA6B,MAAM,CAAC,0BAA0B,CAAC,KAAK,KAAK,CAAC;QACtF,CAAC;QAED,MAAM,IAAI,aAAa,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC;QAEpE,8DAA8D;QAC9D,IAAI,MAAM,CAAC,gBAAgB,EAAE,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,gBAAgB,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5F,MAAM,IAAI,iBAAiB,MAAM,CAAC,gBAAgB,CAAC,KAAK,KAAK,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,iBAAiB,MAAM,CAAC,aAAa,MAAM,CAAC;QAEtD,iDAAiD;QACjD,IAAI,WAAW,KAAK,OAAO,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,MAAM,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,IAAI,OAAO,CAAC;IAClB,MAAM,IAAI,qDAAqD,CAAC;IAEhE,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;aACb;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,gBAAkC,EAClC,QAAgB,EAChB,SAAiB,EACjB,IAAY,EACZ,WAA+B,EAC/B,iCAA0C;IAE1C,oCAAoC;IACpC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,CACjD,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,WAAW,KAAK,QAAQ,CACzB,CAAC;IAEF,IAAI,MAAM,GAAG,uBAAuB,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;IACzF,MAAM,IAAI,iBAAiB,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,MAAM,IAAI,kBAAkB,QAAQ,CAAC,SAAS,KAAK,CAAC;IACpD,MAAM,IAAI,iBAAiB,QAAQ,CAAC,QAAQ,IAAI,CAAC;IACjD,MAAM,IAAI,sBAAsB,IAAI,MAAM,CAAC;IAE3C,IAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAChD,qBAAqB;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAEzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,IAAI,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;YAE1C,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,IAAI,oBAAoB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvE,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;oBACnD,MAAM,IAAI,gBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC5E,CAAC;gBACD,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;YAED,IAAI,iCAAiC,IAAI,MAAM,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7F,MAAM,IAAI,6BAA6B,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC;YAClF,CAAC;YAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3E,MAAM,IAAI,sBAAsB,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5E,CAAC;YAED,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS;oBAC1D,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE;oBACtD,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,IAAI,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,IAAI,CAAC;gBAE9E,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;oBAC1G,MAAM,IAAI,mBAAmB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC5E,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACnD,MAAM,IAAI,iBAAiB,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC;YACjE,CAAC;YAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC3C,MAAM,IAAI,mBAAmB,gBAAgB,CAAC,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClG,CAAC;YAED,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC1B,wCAAwC;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,IAAI,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC;YAEzG,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC/F,MAAM,IAAI,yBAAyB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACtI,CAAC;YAED,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC3G,MAAM,IAAI,wBAAwB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACjJ,CAAC;YAED,8BAA8B;YAC9B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,IAAI,gBAAgB,OAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC;YAC5G,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,IAAI,eAAe,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC;YAC1G,CAAC;YAED,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrE,MAAM,IAAI,0BAA0B,KAAK,KAAK,OAAO,KAAK,CAAC;YAC7D,CAAC;YAED,IAAI,iCAAiC,IAAI,KAAK,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChG,MAAM,IAAI,6BAA6B,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,KAAK,CAAC;YACrF,CAAC;YAED,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjF,MAAM,IAAI,sBAAsB,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/E,CAAC;YAED,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChD,MAAM,OAAO,GAAG,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS;oBAClE,CAAC,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC9D,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,IAAI,aAAa,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,IAAI,CAAC;gBAEjF,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;oBACnH,MAAM,IAAI,mBAAmB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC/E,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,IAAI,mBAAmB,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjG,CAAC;YAED,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,IAAI,iBAAiB,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAClE,CAAC;YAED,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,OAAO,CAAC;IAClB,MAAM,IAAI,sCAAsC,CAAC;IAEjD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;aACb;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACxH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for get_historical_weather tool
|
|
3
|
+
*/
|
|
4
|
+
import { NOAAService } from '../services/noaa.js';
|
|
5
|
+
import { OpenMeteoService } from '../services/openmeteo.js';
|
|
6
|
+
export declare function handleGetHistoricalWeather(args: unknown, noaaService: NOAAService, openMeteoService: OpenMeteoService): Promise<{
|
|
7
|
+
content: Array<{
|
|
8
|
+
type: string;
|
|
9
|
+
text: string;
|
|
10
|
+
}>;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=historicalWeatherHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historicalWeatherHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/historicalWeatherHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA+N7D"}
|