What's Changed
Features (v0.6.0)
- Generic telemetry events — all 230+ telemetry fields now produce OpenClaw events via a generic fallback emitter; unmapped fields emit as snake_case event types (
PackVoltage→pack_voltage) - Default filter for unconfigured fields —
DualGateFilterapplies sensible defaults (any-change, 5s throttle, 2min staleness) instead of silently dropping unconfigured fields telemetry.gethandler + MCP tool — agents can read the latest value of any telemetry field from the in-memory store- Trigger commands in capabilities —
NodeCapabilitiesadvertisestelemetry.get,trigger.list,trigger.create,trigger.delete - TUI per-frame updates — panel DataTables update immediately as telemetry arrives instead of polling on a 1s timer
Removed
trigger.poll— notifications are delivered exclusively via push callbacks over the OpenClaw WebSocket; the polling endpoint, MCP tool, and pending queue have been removed
Changed
_matches()→matches()(public API for cross-module consumers)- Shared
_internal/units.pyreplaces 3 duplicate temperature conversion implementations telemetry_getdistinguishes store-unavailable from pending
Fixed
- Port-in-use crash —
_resolve_port()pre-checks availability, auto-selects free port or raisesUsageError SystemExitkilling the event loop — uvicorn'ssys.exit(1)caught and converted toOSError- Empty "Error:" crash — shows
"Unexpected {Type}"+--verbosehint - Trigger notification queue overflow — logs before eviction
flush_pending_pushcrash after reconnect — guarded per-notification- Notification serialization guards narrowed to
(AttributeError, TypeError, ValueError) p.pop("field")mutating MCP params on retriessystem.rununknown method bumped to warning with resolved namecontextlib.suppressreplaced with explicit try/except + debug log- Reconnect/Tailscale warnings now include
exc_info - Environment-sourced
--porttreated as explicit - Code formatting and mypy type annotation fix (v0.6.1)
Full Changelog: v0.5.0...v0.6.1