* Split routers on dashboard and extend retention periods
- Add Router node type with 12-hour stale timeout (vs 30 min for regular nodes)
- Create RouterList component to display router nodes separately
- Update NodeList to filter out routers (similar to gateways)
- Add yellow color scheme for router nodes to distinguish from gateways (green) and nodes (blue)
- Extend mesh traffic retention across the board:
- Client-side packet age filter: 12h → 24h
- Broker cache size: 50 → 200 packets
- Messages per channel: 100 → 500
* Update regular node activity threshold to 60 minutes
* Fix TypeScript errors in router filtering logic
* Fix docker-build to use buildx explicitly with --load flag
* Add default empty value for MESHSTREAM_GOOGLE_MAPS_API_KEY in docker-build
* Restructure docker buildx command to fix path argument parsing
* Remove trailing backslash before build context path in docker-build
* Quote build args and separate path argument in docker-build
- Add message type prefix in brief mode for quick identification
- Include GatewayID in brief mode summary
- Remove formatted output from structured fields
- Use proper structured fields for each message type
- Add common fields like hopLimit and ID for all messages
- Extract specific data for position, telemetry, and text messages
- Format structured data for better log aggregation compatibility
- Remove file-based logging completely
- Add brief mode for concise log output
- Add full mode with complete message details
- Use structured logging fields for all information
- Keep console output option for readability
- Add intelligent summary handling for different message types
- Update all components to accept a logger parameter
- Add default fallbacks when logger is not provided
- Ensure consistent logger naming with parent.Named() pattern
- Create a proper logger hierarchy originating from main.go
- Update MessageLogger to pass logger to BaseSubscriber
- Replace standard log package with prefab/logging
- Add context-aware logging in HTTP handlers
- Add structured logging with fields and levels
- Improve logging hierarchy and namespaces
- Implement named loggers for components
- Created Packet to combine DecodedPacket and TopicInfo
- Updated MQTT client to return Packet instead of wrapper type
- Modified main.go to use the simplified structure
- Updated tests to use the new Packet type
This change simplifies the API and reduces the cognitive load
for consumers of the MQTT package.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created new mqtt package with simple client interface
- Implemented buffered channel for decoded messages
- Updated main.go to use the new MQTT client
- Added tests for the MQTT client
- Simplified message handling to focus on 'e' and 'map' formats
- Added TODO for handling JSON format messages
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Simplify design by using DecodeMessage for map format too
- Remove redundant DecodeMapReport function
- Update FormatTopicAndMapData to format decoded packets
- Improve handling of map format packets
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added handling for topics with "map" format (2/map)
- Display map data as readable text rather than hex
- Added new FormatTopicAndMapData function to formatter.go
- Added map format condition in main.go message handler
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created new formatter.go file with all formatting functions
- Replaced deprecated FormatData with improved FormatDataMessage
- Updated main.go to separate decoding and formatting steps
- Created specialized formatting functions for different message types
- Better separation of concerns for improved maintainability
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>