- Remove band_assessment and band_detail from SWPC adapter
- Remove all frequency-specific conclusions (906 MHz, 10m-20m, etc.)
- Store only raw indices: SFI, Kp, R/S/G scales, dM/dz gradients
- Let LLM interpret propagation data based on user's band of interest
- Add full Environment page with feed status, solar indices, and ducting data
- Update Dashboard RF Propagation card to show raw values only
- Update alert messages to be frequency-agnostic
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Coverage:
- Single-gateway infra nodes named as critical risks per region
- Client single-gw nodes counted but not individually named
- Mesh-wide single-gw infra summary
Monitoring rules by node type:
- Infrastructure: full detail - battery, offline, coverage, neighbors, hardware
- Clients causing problems: named - high util, top senders
- Clients otherwise: counted per region, not individually tracked
- POWER breakdown now infra-only
Commands:
- Removed hardcoded command list from config.py system_prompt
- Dynamic command list in router.py from dispatcher (only enabled commands)
- MeshMonitor commands no longer listed as MeshAI commands
- !help overhaul: grouped by category, per-command detailed help
- LLM explicitly told to only mention listed commands
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create subscriptions.py with SubscriptionManager class for SQLite storage
- Add subscribe.py commands: !sub, !unsub, !mysubs with aliases
- Update dispatcher.py to register subscription commands
- Modify main.py with scheduler tick (60s) and _check_scheduled_subs()
- Add build_node_compact() and build_region_compact() to mesh_reporter.py
- Support daily, weekly, and alerts subscription types
- Support mesh, region, and node scope filtering
- 5-minute matching window for schedule tolerance
- Dedup via last_sent tracking
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Removed SNR-required filter from !neighbors command
- Show all infra neighbors, add signal quality when available
- Enrich edges with SNR from traceroute snrTowards/snrBack data
- Fallback: use node-level SNR for edges without traceroute data
- Sort by SNR when available, alphabetically otherwise
Co-Authored-By: Claude <noreply@anthropic.com>
New files:
- mesh_reporter.py: MeshReporter class for prompt injection
- build_tier1_summary(): ~500-800 token mesh health summary
- build_region_detail(): Detailed region breakdown
- build_node_detail(): Single node info with recommendations
- build_recommendations(): Optimization suggestions
- build_lora_compact(): Short format for LoRa messages
- list_regions_compact(): Region list with scores
- commands/health.py: !health and !region commands
- !health: Quick mesh summary (no LLM)
- !region [name]: Region info or list all regions
Modified files:
- router.py: Mesh question detection and prompt injection
- _is_mesh_question(): Keyword/phrase matching
- _detect_mesh_scope(): Node/region/mesh scope detection
- Inject Tier 1/2 data for mesh questions
- Add mesh awareness instructions to LLM
- main.py: Create MeshReporter, pass to dispatcher/router
- commands/dispatcher.py: Register health/region commands
- mesh_health.py: Fix role type (int -> str)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Unknown !commands (like !mail, !login, !bbs from advBBS users) were
getting "Unknown command, try !help" responses. Now returns None so
the bot stays silent on commands it doesn't recognize.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Delete unused CommandResult class from commands/base.py and unused
format_dm_response method from responder.py.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New features:
- Rate limiting (per-user and global)
- Enhanced logging with file rotation
- LLM fallback backend support
- Safety filtering (profanity, blocked phrases, emergency keywords)
- User management (blocklist, allowlist, admin/VIP nodes)
- Custom commands with static responses
- Personality/prompt templates with persona switching
- Web status page with JSON API
- Periodic announcements/broadcasts
- Webhook integrations
New modules:
- rate_limiter.py - Per-user and global rate limiting
- safety.py - Response filtering and user access control
- personality.py - Prompt templates and persona management
- web_status.py - Simple web status dashboard
- announcements.py - Periodic broadcast scheduler
- webhook.py - Webhook notification client
- log_setup.py - Enhanced logging configuration
- backends/fallback.py - LLM fallback wrapper
Config expanded from ~50 to ~200 lines with full documentation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Features:
- Multi-backend LLM support (OpenAI, Anthropic, Google)
- Rolling summary memory for token optimization (~70-80% reduction)
- Per-user conversation history with SQLite persistence
- Bang commands (!help, !ping, !reset, !status, !weather)
- Meshtastic integration via serial or TCP
- Message chunking for mesh network constraints (150 char limit)
- Rate limiting to prevent network congestion
- Rich TUI configurator
- Docker support
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>