Skip to content

Releases: AlphaWaveSystems/flutter-probe

v0.6.0

27 Apr 05:45

Choose a tag to compare

Added

  • Configurable auto-reconnect policyagent.reconnect_attempts (default 4) and agent.reconnect_backoff (default 1s base) in probe.yaml. Replaces the previous fixed 2-attempt, 1s-sleep policy with capped exponential backoff plus jitter (1s → 2s → 4s → 8s, ±20%, ~15s total budget). Slow devices and brief USB-C cable mode flips now recover transparently instead of failing the step.
  • iproxy tunnel TCP health check — physical iOS startup now verifies the iproxy tunnel is actually forwarding via a 127.0.0.1 probe (up to 3s) before the first dial. Dead-tunnel-on-live-process is detected immediately instead of failing later as a 30s WebSocket handshake timeout.
  • probe-mcp standalone binary — the MCP (Model Context Protocol) server now ships as its own binary alongside probe. Configure your MCP client (Claude Desktop, Cursor, etc.) to call probe-mcp directly. Same 10 tools, same protocol, smaller per-binary surface. Available via Homebrew (brew install probe) and GitHub release artifacts.
  • probe test --stream — when combined with --format json, emits one ndjson line per test as it completes ({"type":"test_result","result":{...}}), in addition to the final report. Built for live consumption by Studio, CI dashboards, and other tooling that wants real-time progress.
  • FlutterProbe Studio (Beta Preview) — new studio/ directory containing a Wails 2.12+ desktop app for visual ProbeScript test authoring. Cross-platform (macOS / Windows / Linux). Marked Beta Preview because the surface area (editor, lint, device pane, run integration) is feature-complete but stability work is ongoing. Features:
    • Monaco editor with ProbeScript syntax highlighting (keywords, strings, variables, tags, comments) and live lint markers driven by the runner's parser
    • File browser with workspace folder picker (persists across sessions in localStorage)
    • Device picker backed by internal/device.Manager (simulators and emulators)
    • Live device view at ~10 FPS via the existing take_screenshot RPC — no new agent code, works on all sim/emu platforms
    • In-process test execution by importing internal/runner directly — no subprocess shell-out, no JSON wire format
    • Live results timeline streamed via Wails event bus as tests complete
    • Widget tree inspector (refresh on demand)
    • Connection status indicator with semantic colors (connected / connecting / error / disconnected)
    • Toast notifications, keyboard shortcuts (⌘R run, ⌘S save, ⌘B connect, ⌘P workspace, ⌘K refresh devices, ? help)
    • Native macOS dark appearance, draggable title bar, About panel
      Build with cd studio && wails build. Physical device support, scrcpy/simctl native video, multi-device side-by-side, time-travel debugging, and AI chat pane via MCP are deferred to follow-ups.

Changed

  • probe mcp-server is deprecated — the subcommand still works for backwards compatibility (runs the same server code embedded in probe) but prints a one-time deprecation notice on stderr. Migrate your MCP client config to probe-mcp. Will be removed in a future release.
  • MCP server reports binary version — the initialize response's serverInfo.version now reflects the installed binary version (set at build time) instead of a hardcoded 0.5.7.

Fixed

  • Ctrl-C no longer leaks iproxy / idevicesyslog / ADB forwards. The probe test command now installs a SIGINT / SIGTERM handler that cancels the run context so deferred cleanup actually runs. Press Ctrl-C twice to force-exit.
  • Reconnect serialization — concurrent steps (loops, conditionals) that both observe a dropped connection no longer race on the executor's client reference. A generation counter ensures only one reconnect runs at a time and late callers reuse the new client.

Added

  • Relational selectorstap "Submit" below "Username", see "Price" right of "Label" — spatial anchoring via Flutter RenderBox positions (below, above, left of, right of)
  • open link "url" — opens a URL in the default external browser via url_launcher platform channel
  • wait for animations to end — polls SchedulerBinding.hasScheduledFrame until animations complete
  • see "Field" is focused — asserts that a widget holds keyboard focus via FocusManager.primaryFocus
  • store "value" as varName — stores a literal or ${variable} value for use in later steps
  • probe mcp-server — stdio MCP server (10 tools) for AI agent integration with Claude Desktop, Cursor, etc.: get_widget_tree, take_screenshot, read_test, write_test, run_script, run_tests, list_files, lint, get_report, generate_test; see MCP Server docs
  • --disable-animations flag (also defaults.disable_animations in probe.yaml) — sets Flutter timeDilation = 0 after connecting to skip animations and speed up tests
  • probe.open_link RPC — agent-side handler that invokes url_launcher or records the URL for verify_browser
  • probe.set_time_dilation RPC — sets timeDilation on the agent at runtime
  • probe.set_output / probe.drain_output RPCs — inter-step output variable exchange between Dart and CLI
  • device.ios_device_id / device.android_device_id in probe.yaml — set a preferred simulator UDID or emulator serial without requiring --device on every run

Fixed

  • Token acquisition reliability: simctl token reader now globs all app data containers, resolving stale-container mismatches after reinstalls or clear-data operations
  • WebSocket dial now retries on transient errors (connection refused, reset, timeout) within the configured dial_timeout window, eliminating the race between token file write and agent server startup

Added

  • Homebrew tap: brew tap AlphaWaveSystems/tap && brew install probe (macOS + Linux)
  • Homebrew formula auto-updates on every release tag via HOMEBREW_TAP_TOKEN

Changed

  • flutter_probe_agent Dart package re-licensed from BSL 1.1 to MIT (Go CLI remains BSL 1.1)
  • CI: added Dart agent validation job — dart analyze, flutter test, dart pub publish --dry-run, CHANGELOG enforcement
  • CI: added PR template with pub.dev and docs checklist

Added

  • Automated pub.dev publishing via GitHub Actions using official dart-lang/setup-dart reusable workflow
  • FAQ section on landing page (WiFi testing, physical devices, CI/CD, setup)
  • ProbeScript Dictionary — complete reference of all keywords, commands, and modifiers
  • Comprehensive third-party tool requirements documentation

Changed

  • Renamed Dart package from probe_agent to flutter_probe_agent for pub.dev branding
  • Publish workflow chains after Release workflow (prevents publishing broken versions)
  • Version badge auto-updates from git tags (no more hardcoded versions)

Fixed

  • Broken wiki link on landing page (AlphaWaveSystems/wikiflutter-probe/wiki)
  • Old domain references (flutterprobe.comflutterprobe.dev)
  • Old package name references in vscode README and docs
  • pub.dev score: shorter description, dartdoc warning, clean public API

Added

  • Pre-shared restart token (probe.set_next_token) — CLI sends a token to the agent before restart the app; agent persists it and uses it after restart, enabling WiFi reconnection without idevicesyslog
  • --host flag for WiFi testing — connect directly to device IP, no iproxy needed
  • --token flag to skip USB-dependent token auto-detection
  • PROBE_WIFI=true dart-define — binds agent to 0.0.0.0 for network access
  • HTTP POST fallback transport (POST /probe/rpc) — stateless per-request communication for physical devices
  • ProbeClient interface — both WebSocket and HTTP clients satisfy it for transport-agnostic execution
  • tap "X" if visible ProbeScript syntax — silently skips when widget is not found; works with tap, type, clear, long press, double tap
  • Direct onTap invocation fallback for Semantics-wrapped GestureDetector widgets on physical devices
  • take screenshot "name" now accepts name directly (no called keyword needed)
  • Physical device E2E test suite for FlutterProbe Test App (12 tests covering all 10 screens)

Fixed

  • clear app data on physical iOS now skips immediately (before confirmation prompt) to avoid killing the agent
  • Connection error detection in if visible — propagates connection errors for auto-reconnect instead of silently swallowing them
  • Screenshot parser accepts take screenshot "name" without requiring called keyword

Added

  • Physical iOS device support: launch/terminate via xcrun devicectl, token reading via idevicesyslog, port forwarding via iproxy
  • Physical Android device validation: EnsureADB() verifies binary, device reachability, and cleans stale port forwards
  • Physical device detection: IsPhysicalIOS (simctl list check) and IsPhysicalAndroid (ro.hardware property check)
  • Physical iOS devices listed in probe device list via idevice_id
  • WebSocket ping/pong keepalive (5s interval) — prevents idle connection drops on physical devices via iproxy
  • Auto-reconnect on WebSocket connection loss — up to 2 transparent retries per step with full re-dial
  • EnsureIProxy() — automatic iproxy lifecycle management: checks installation, kills stale processes, starts fresh, defers cleanup
  • Visibility filtering in widget finder — off-screen widgets (behind routes, Offstage, Visibility) no longer match see/if appears
  • Unique pointer IDs for synthetic gestures — prevents collision with real touch events on physical devices
  • ProbeAgent profile mode support — ProbeAgent.start() works in profile builds (required for physical iOS)
  • ProbeAgent release mode safeguards — blocked by default, opt-in via allowReleaseBuild: true + PROBE_AGENT_FORCE=true
  • Test files for all packages: cmd/probe, internal/cli, internal/ios, internal/device (manager tests)
  • HTTP POST fall...
Read more

v0.5.6

02 Apr 14:27
c8f0669

Choose a tag to compare

Added

  • Homebrew tap: brew tap AlphaWaveSystems/tap && brew install probe (macOS + Linux)
  • Homebrew formula auto-updates on every release tag via HOMEBREW_TAP_TOKEN

v0.5.5

02 Apr 13:16
19f11dc

Choose a tag to compare

Changed

  • flutter_probe_agent Dart package re-licensed from BSL 1.1 to MIT (Go CLI remains BSL 1.1)
  • CI: added Dart agent validation job — dart analyze, flutter test, dart pub publish --dry-run, CHANGELOG enforcement
  • CI: added PR template with pub.dev and docs checklist

v0.5.4

29 Mar 13:31
9d20486

Choose a tag to compare

Release v0.5.4

v0.5.3

28 Mar 14:21
2e9eb5e

Choose a tag to compare

Added

  • Automated pub.dev publishing via GitHub Actions using official dart-lang/setup-dart reusable workflow
  • FAQ section on landing page (WiFi testing, physical devices, CI/CD, setup)
  • ProbeScript Dictionary — complete reference of all keywords, commands, and modifiers
  • Comprehensive third-party tool requirements documentation

Changed

  • Renamed Dart package from probe_agent to flutter_probe_agent for pub.dev branding
  • Publish workflow chains after Release workflow (prevents publishing broken versions)
  • Version badge auto-updates from git tags (no more hardcoded versions)

Fixed

  • Broken wiki link on landing page (AlphaWaveSystems/wikiflutter-probe/wiki)
  • Old domain references (flutterprobe.comflutterprobe.dev)
  • Old package name references in vscode README and docs
  • pub.dev score: shorter description, dartdoc warning, clean public API

v0.5.2

28 Mar 14:07
291f633

Choose a tag to compare

Release v0.5.2

v0.5.1 — Physical Device Support, WiFi Testing, HTTP Fallback

26 Mar 08:41
d31e288

Choose a tag to compare

Added

  • Pre-shared restart token (probe.set_next_token) — CLI sends a token to the agent before restart the app; agent persists it and uses it after restart, enabling WiFi reconnection without idevicesyslog
  • --host flag for WiFi testing — connect directly to device IP, no iproxy needed
  • --token flag to skip USB-dependent token auto-detection
  • PROBE_WIFI=true dart-define — binds agent to 0.0.0.0 for network access
  • HTTP POST fallback transport (POST /probe/rpc) — stateless per-request communication for physical devices
  • ProbeClient interface — both WebSocket and HTTP clients satisfy it for transport-agnostic execution
  • tap "X" if visible ProbeScript syntax — silently skips when widget is not found; works with tap, type, clear, long press, double tap
  • Direct onTap invocation fallback for Semantics-wrapped GestureDetector widgets on physical devices
  • take screenshot "name" now accepts name directly (no called keyword needed)
  • Physical device E2E test suite for FlutterProbe Test App (12 tests covering all 10 screens)

Fixed

  • clear app data on physical iOS now skips immediately (before confirmation prompt) to avoid killing the agent
  • Connection error detection in if visible — propagates connection errors for auto-reconnect instead of silently swallowing them
  • Screenshot parser accepts take screenshot "name" without requiring called keyword

v0.4.0

25 Mar 06:00

Choose a tag to compare

Added

  • before all / after all hooks for suite-level setup and teardown (run once per file)
  • kill the app command — force-stop without relaunch (CLI-side via ADB/simctl)
  • open the app now performs CLI-side launch + reconnect when device context is available
  • copy "text" to clipboard and paste from clipboard commands (agent-side via Dart Clipboard API)
  • set location lat, lng command — set device GPS coordinates (ADB geo fix / simctl location)
  • verify external browser opened command — checks url_launcher platform channel for external launches
  • call GET/POST/PUT/DELETE "url" command — execute real HTTP requests from tests (Go-side net/http)
  • call ... with body "json" — HTTP calls with request body, response stored in <response.status> and <response.body> variables
  • <random.email>, <random.name>, <random.phone>, <random.uuid>, <random.number(min,max)>, <random.text(length)> data generators for form-heavy tests
  • with examples from "file.csv" — load data-driven test data from external CSV files
  • Unit tests for random data generators, CSV loader, all new parser commands
  • E2E test files for all new features: hooks, clipboard, app lifecycle, location, random data, HTTP calls, CSV-driven tests

v0.3.0

25 Mar 00:23

Choose a tag to compare

Fixed

  • Resolve all pre-existing staticcheck lint errors blocking CI
  • Replace deprecated Go 1.26 crypto/ecdsa field access with ecdh+x509 round-trip in wallet signing
  • Remove unused functions and variables across CLI, runner, and probe-convert packages
  • Fix error string style violations (punctuation, numeric HTTP status codes, nil context)

Added

  • Unit tests for 6 previously untested packages: config, plugin, visual, report, device, cloud/wallet
  • Test coverage for config loading/validation, plugin registry, visual regression comparison, HTML report generation, permission resolution, and wallet operations

Changed

  • Bump GitHub Actions: actions/checkout v5→v6, actions/upload-artifact v4→v7, actions/setup-node v4→v6, actions/upload-pages-artifact v3→v4, codecov/codecov-action v4→v5

v0.2.0

21 Mar 19:29

Choose a tag to compare

Release v0.2.0