Releases: Oceanswave/tescmd
Releases · Oceanswave/tescmd
Release list
v0.6.1
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
v0.5.0
What's Changed
Changed
- Slim node capabilities — node now advertises only
location.get+system.runto the gateway (was 29 individual commands); all 34 handlers remain available viasystem.runmeta-dispatch, reducing handshake payload and simplifying capability negotiation - Explicit
send_connected()lifecycle —node.connectedevent is now sent explicitly afterconnect_with_backoff()and after successful reconnection, replacing the implicit first-frame trigger; CLI callers show a warning if the lifecycle event fails while the connection itself succeeded send_connected()returns bool — callers can now detect lifecycle event failure; bothopenclaw bridgeandservecommands display a yellow warning when the event fails to send- Separated reconnect error handling —
_maybe_reconnect()now handles connection failure and lifecycle event failure independently; a failednode.connectedno longer incorrectly doubles the reconnect backoff timer
Added
on_reconnectgateway callback —GatewayClientaccepts anon_reconnectcallback invoked after the receive loop successfully reconnects, ensuringnode.connectedis sent on every reconnection (not just the initial connect)system.runactivity logging — dispatcher logs the resolved inner method when routing throughsystem.run, so operational logs showsystem.run → door.lockinstead of justsystem.run
Fixed
send_connected()false-positive logging — no longer logs "Sent node.connected event" when the gateway is disconnected (the event was being silently dropped bysend_event())OpenClawPipeline.dispatchertyping — changed fromAnytoCommandDispatcherfor static analysis support
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's New
Setup Wizard Improvements
- Unique app names — generates
tescmd-<hex>names to prevent collisions on the Tesla Developer Portal - Phase reorder — keys → registration → OAuth → enrollment for a smoother flow
- Key mismatch warning — detects when remote public key differs from local key before Phase 2
- Auto-save credentials —
.envwritten automatically; removed the save prompt --forceflag — regenerates app name and re-runs all setup phases
Gateway & Dispatcher Fixes
- Concurrent recv prevention —
connect()cancels any existing receive loop before starting a new one, fixing aConcurrencyErrorrace condition system.runbot compat — accepts bothmethodandcommandkeys; normalizes list-typed values from gateway bots
Auth & Deploy
- In-process KeyServer — ephemeral HTTP server for Tailscale Funnel during setup
- Atomic Tailscale serve + Funnel — single CLI command instead of separate calls
- CLI/HTTP isolation — moved
httpx.get()out of CLI module into deploy layer - Proper
stop_funnel()cleanup — uses the TailscaleManager abstraction instead of low-level_run()
Documentation
- README rewrite — concise, scannable marketing copy (503 → 210 lines)
- Screenshots — TUI dashboard, navigation waypoints, MCP integration
Full Changelog: https://github.com/Oceanswave/tescmd/blob/main/CHANGELOG.md
v0.3.2
Fixes
- Print OAuth URL for manual browser fallback —
login_flow()now prints the authorization URL before opening the browser, so users can copy-paste when the browser doesn't auto-open - Handle 422 "already registered" —
register_partner_account()treats HTTP 422 "Public key hash has already been taken" as success instead of failing; call sites show "Already registered — no action needed" - Verify GitHub key matches local on setup rerun —
_deploy_key_github()fetches the hosted public key and compares it to the local key; if they differ, prompts before overwriting (defaults to No to protect working setups) - Added
fetch_key_pem()togithub_pages.pyfor remote key content retrieval
Install / Upgrade
pip install --upgrade tescmdv0.3.1
What's New
Vehicle Command Protocol (VCP)
- ECDH session handshake, HMAC signing, protobuf payload builders for all car-server commands
- Navigation proto builders (GPS, Supercharger, Waypoints) reverse-engineered from Teslemetry's extended proto
- VCPRequiredError detection and fault code propagation
OpenClaw Bridge
- Bidirectional command dispatch (reads, writes, triggers, system.run)
- DualGateFilter, EventEmitter, GatewayClient with Ed25519 auth
- TelemetryBridge orchestrator with
build_openclaw_pipeline()factory
MCP Server
- FastMCP-based server mapping CLI commands to MCP tools
- OAuth 2.1 HTTP transport with in-memory provider
- Nav tools:
nav_gps,nav_waypoints,nav_homelinkadded alongside existingnav_sendandnav_supercharger - Custom tools for trigger CRUD and polling
Trigger System
- TriggerManager with numeric comparison,
changeddetection, geofence enter/leave - One-shot and persistent (with cooldown) firing modes
TUI Dashboard
- 8-panel telemetry dashboard with command palette and keybindings
Bug Fixes
- Click 8.2 compatibility for
CliRunner.mix_stderrremoval - CacheSink first-frame flush on short-uptime CI runners
- VCSEC HMAC tag truncation and session expiry fixes
Full Changelog: v0.2.0...v0.3.1
v0.2.0
What's New in v0.2.0
Fleet Telemetry Streaming
tescmd vehicle telemetry stream [VIN]— real-time telemetry via WebSocket + Tailscale Funnel- Rich Live dashboard (TTY) or JSONL stream (piped) with field presets (
--fields driving/charging/climate/all) - Protobuf + FlatBuffer telemetry decoder with 120+ registered fields
- Automatic Funnel lifecycle and partner domain management
Key Hosting
tescmd key deploy --method tailscale— host public key via Tailscale Funnel- Auto-detection priority chain: GitHub Pages → Tailscale Funnel → manual
New Commands & Features
auth import— import tokens from JSON for headless/CI environments- Schnorr signature support for telemetry server handshake
- README badges (PyPI, Python, Build, License, Release)
- E2E smoke tests — 179 tests covering every CLI command (
pytest -m e2e)
Infrastructure
- GitHub Actions CI (Python 3.11–3.13) and PyPI publish workflow
- Setup guide (
docs/setup.md) and FAQ (docs/faq.md)
Bug Fixes
- Fixed telemetry dashboard uptime counter not incrementing
- Improved tunnel start/stop success messages
- Fixed cache TOCTOU race in response cache
- Added JSON parse safety in API client
- Improved WebSocket connection cleanup on server stop
Full Changelog: https://github.com/Oceanswave/tescmd/blob/main/CHANGELOG.md
v0.1.2
Full Changelog: https://github.com/Oceanswave/tescmd/commits/v0.1.2