Fix idf.py path bug (tools/idf.py in ESP-IDF v5.x) that prevented
auto-detection. Add get_idf_path_found() for toolchain management
without requiring a fully configured environment.
Tier 1 (idf_path_found): idf_tools_list, idf_tools_check,
idf_tools_install, idf_env_info — always available when IDF directory
exists with idf_tools.py.
Tier 2 (idf_available): idf_build_project, idf_flash_project,
idf_monitor — require full IDF env, gate checked at invocation time
so they unlock after install without restart.
Includes input validation (target names, tool names, baud rates),
centralized subprocess cleanup via _run_idf_py, mtime-based cache
invalidation for tools.json, and esp://idf/status resource with
per-target readiness map.
Espressif product data fetched at build time via Content Layer API
and rendered as browsable Starlight pages. Alpine.js provides
client-side filtering by series, type, connectivity, and status.
- Products content collection with inline API loader + Zod schema
- Filterable browse page at /products/ with card grid
- Individual spec sheet pages at /products/[id]/ (94 products)
- Separate CSS with dark/light theme support
- Sidebar section linking to catalog
- Cross-references to MCP tool reference docs
Enriches the splash page from a bare title + 4 cards into a full
product page: hero SVG illustration, example detect→flash→verify
conversation, tabbed install instructions, supported chips table,
and capability summary. Frames content around MCP protocol rather
than any specific client.