Skip to content

Releases: Oceanswave/tescmd

v0.6.1

Choose a tag to compare

@Oceanswave Oceanswave released this 05 Feb 04:42
fd79666

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 — DualGateFilter applies sensible defaults (any-change, 5s throttle, 2min staleness) instead of silently dropping unconfigured fields
  • telemetry.get handler + MCP tool — agents can read the latest value of any telemetry field from the in-memory store
  • Trigger commands in capabilities — NodeCapabilities advertises telemetry.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.py replaces 3 duplicate temperature conversion implementations
  • telemetry_get distinguishes store-unavailable from pending

Fixed

  • Port-in-use crash — _resolve_port() pre-checks availability, auto-selects free port or raises UsageError
  • SystemExit killing the event loop — uvicorn's sys.exit(1) caught and converted to OSError
  • Empty "Error:" crash — shows "Unexpected {Type}" + --verbose hint
  • Trigger notification queue overflow — logs before eviction
  • flush_pending_push crash after reconnect — guarded per-notification
  • Notification serialization guards narrowed to (AttributeError, TypeError, ValueError)
  • p.pop("field") mutating MCP params on retries
  • system.run unknown method bumped to warning with resolved name
  • contextlib.suppress replaced with explicit try/except + debug log
  • Reconnect/Tailscale warnings now include exc_info
  • Environment-sourced --port treated as explicit
  • Code formatting and mypy type annotation fix (v0.6.1)

Full Changelog: v0.5.0...v0.6.1

v0.5.0

Choose a tag to compare

@Oceanswave Oceanswave released this 04 Feb 05:01
cf6078f

What's Changed

Changed

  • Slim node capabilities — node now advertises only location.get + system.run to the gateway (was 29 individual commands); all 34 handlers remain available via system.run meta-dispatch, reducing handshake payload and simplifying capability negotiation
  • Explicit send_connected() lifecycle — node.connected event is now sent explicitly after connect_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; both openclaw bridge and serve commands 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 failed node.connected no longer incorrectly doubles the reconnect backoff timer

Added

  • on_reconnect gateway callback — GatewayClient accepts an on_reconnect callback invoked after the receive loop successfully reconnects, ensuring node.connected is sent on every reconnection (not just the initial connect)
  • system.run activity logging — dispatcher logs the resolved inner method when routing through system.run, so operational logs show system.run → door.lock instead of just system.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 by send_event())
  • OpenClawPipeline.dispatcher typing — changed from Any to CommandDispatcher for static analysis support

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@Oceanswave Oceanswave released this 03 Feb 22:24
a125af6

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 — .env written automatically; removed the save prompt
  • --force flag — 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 a ConcurrencyError race condition
  • system.run bot compat — accepts both method and command keys; 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

Choose a tag to compare

@Oceanswave Oceanswave released this 02 Feb 21:30
1e07de0

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() to github_pages.py for remote key content retrieval

Install / Upgrade

pip install --upgrade tescmd

v0.3.1

Choose a tag to compare

@Oceanswave Oceanswave released this 02 Feb 08:56
2a2b5c1

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_homelink added alongside existing nav_send and nav_supercharger
  • Custom tools for trigger CRUD and polling

Trigger System

  • TriggerManager with numeric comparison, changed detection, 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_stderr removal
  • 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

Choose a tag to compare

@Oceanswave Oceanswave released this 01 Feb 03:12
7a56a5c

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

Choose a tag to compare

@Oceanswave Oceanswave released this 31 Jan 18:46