From b14ac4c4017adae647115ebb15e6508136c0d153 Mon Sep 17 00:00:00 2001 From: Kail Tian Date: Sun, 9 Aug 2026 16:05:00 +0800 Subject: [PATCH] fix(skills): make weather workflow Windows-safe --- nanobot/skills/weather/SKILL.md | 26 ++++++++++++++++++----- tests/agent/test_builtin_weather_skill.py | 14 ++++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 tests/agent/test_builtin_weather_skill.py diff --git a/nanobot/skills/weather/SKILL.md b/nanobot/skills/weather/SKILL.md index 8073de192..23cabce9a 100644 --- a/nanobot/skills/weather/SKILL.md +++ b/nanobot/skills/weather/SKILL.md @@ -11,23 +11,39 @@ Two free services, no API keys needed. ## wttr.in (primary) -Quick one-liner: +Choose one request that matches the user's scope. Do not fetch current +conditions separately when a today or forecast request already includes them. + +Platform notes: +- On Windows PowerShell, use `curl.exe`; bare `curl` may resolve to + `Invoke-WebRequest`. +- On macOS and Linux, use `curl`. + +Current conditions only: ```bash -curl -s "wttr.in/London?format=3" +curl -s "https://wttr.in/London?format=3" # Output: London: ⛅️ +8°C ``` -Compact format: +Custom current conditions format: ```bash -curl -s "wttr.in/London?format=%l:+%c+%t+%h+%w" +curl -s "https://wttr.in/London?format=%l:+%c+%t+%h+%w" # Output: London: ⛅️ +8°C 71% ↙5km/h ``` +Today's weather, including current conditions (use this single request for +questions about today's weather): +```bash +curl -s "https://wttr.in/London?1&m" +``` + Full forecast: ```bash -curl -s "wttr.in/London?T" +curl -s "https://wttr.in/London?T&m" ``` +On Windows PowerShell, replace `curl` with `curl.exe` in the commands above. + Format codes: `%c` condition · `%t` temp · `%h` humidity · `%w` wind · `%l` location · `%m` moon Tips: diff --git a/tests/agent/test_builtin_weather_skill.py b/tests/agent/test_builtin_weather_skill.py new file mode 100644 index 000000000..ab17f814d --- /dev/null +++ b/tests/agent/test_builtin_weather_skill.py @@ -0,0 +1,14 @@ +from nanobot.agent.skills import BUILTIN_SKILLS_DIR + + +def test_weather_skill_uses_windows_safe_single_today_request() -> None: + content = (BUILTIN_SKILLS_DIR / "weather" / "SKILL.md").read_text(encoding="utf-8") + normalized = " ".join(content.split()) + + assert "On Windows PowerShell, use `curl.exe`" in normalized + assert "bare `curl` may resolve to `Invoke-WebRequest`" in normalized + assert "https://wttr.in/London?1&m" in content + assert ( + "Do not fetch current conditions separately when a today or forecast " + "request already includes them." + ) in normalized