Add meteorologist skill with 9 weather/climate tools

New skill:
- .smallclaw/skills/meteorologist/SKILL.md — 기상 전문가 스킬 (Windy iframe 규칙 포함)

New weather tools (src/tools/weather.ts):
- weather_airpollution: OpenWeather 대기질 (AQI, PM2.5/PM10/O3/NO2)
- weather_openmeteo: Open-Meteo 시간별 예보 (ECMWF/GFS, 키 불필요)
- weather_kma: 기상청 공식 API (초단기실황·단기예보)
- weather_airkorea: 에어코리아 실시간 대기질
- weather_nasa_power: NASA POWER 기후 데이터 (MERRA-2, 키 불필요)
- weather_era5: ERA5 재분석 과거 데이터 (Open-Meteo Historical, 키 불필요)
- weather_cds: Copernicus CDS 정식 API (ERA5·CMIP6 SSP 시나리오)
- weather_cmip6: CMIP6 기후 모델 (Open-Meteo Climate API, 키 불필요)

Scripts:
- scripts/era5_cds_fetch.py — CDS/CMIP6 Python 헬퍼 (ZIP→NetCDF 처리 포함)

web-ui:
- Windy URL → iframe 자동 렌더링 (standalone URL + 마크다운 링크 모두 감지)
- windyToEmbedUrl: windy.com comma 형식 URL 파싱 개선

server-v2.ts:
- BROWSER RULE: "열어줘" 제거 → 오용 방지
- weather context: 9개 도구 선택 기준 추가
- JSON schema 8개 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
kim
2026-05-26 14:22:49 +09:00
co-authored by Claude Sonnet 4.6
parent ed25f457df
commit d7eb0abc6d
18 changed files with 2545 additions and 126 deletions
+10 -2
View File
@@ -20,7 +20,7 @@ import { imageReadTool, imagePreviewTool, imageInfoTool, imageEditTool } from '.
import { audioTranscribeTool } from './audio-transcribe.js';
import { pythonEvalTool } from './python.js';
import { sqliteTool } from './sqlite.js';
import { weatherSearchTool } from './weather.js';
import { weatherSearchTool, weatherAirPollutionTool, weatherOpenMeteoTool, weatherKmaTool, weatherAirKoreaTool, weatherNasaPowerTool, weatherEra5Tool, weatherCdsTool, weatherCmip6Tool } from './weather.js';
import { emailListTool, emailReadTool, emailSendTool, emailSearchTool, emailDeleteTool } from './email.js';
import { koreanLawSearchTool, koreanLawFetchTool, usCaseSearchTool } from './legal.js';
import { excelReadTool, excelWriteTool } from './excel.js';
@@ -206,8 +206,16 @@ class ToolRegistry {
this.registerSafe(audioTranscribeTool);
this.registerSafe(pythonEvalTool);
this.registerSafe(sqliteTool);
// Weather tool
// Weather tools
this.registerSafe(weatherSearchTool);
this.registerSafe(weatherAirPollutionTool);
this.registerSafe(weatherOpenMeteoTool);
this.registerSafe(weatherKmaTool);
this.registerSafe(weatherAirKoreaTool);
this.registerSafe(weatherNasaPowerTool);
this.registerSafe(weatherEra5Tool);
this.registerSafe(weatherCdsTool);
this.registerSafe(weatherCmip6Tool);
// Email tools (IMAP + SMTP)
this.registerSafe(emailListTool);
this.registerSafe(emailReadTool);
+1225 -23
View File
File diff suppressed because it is too large Load Diff