Releases: AlphaWaveSystems/flutter-probe
Releases · AlphaWaveSystems/flutter-probe
v0.6.0
Added
- Configurable auto-reconnect policy —
agent.reconnect_attempts(default 4) andagent.reconnect_backoff(default 1s base) inprobe.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-mcpstandalone binary — the MCP (Model Context Protocol) server now ships as its own binary alongsideprobe. Configure your MCP client (Claude Desktop, Cursor, etc.) to callprobe-mcpdirectly. 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_screenshotRPC — no new agent code, works on all sim/emu platforms - In-process test execution by importing
internal/runnerdirectly — 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 withcd 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-serveris deprecated — the subcommand still works for backwards compatibility (runs the same server code embedded inprobe) but prints a one-time deprecation notice on stderr. Migrate your MCP client config toprobe-mcp. Will be removed in a future release.- MCP server reports binary version — the
initializeresponse'sserverInfo.versionnow reflects the installed binary version (set at build time) instead of a hardcoded0.5.7.
Fixed
- Ctrl-C no longer leaks iproxy /
idevicesyslog/ ADB forwards. Theprobe testcommand now installs aSIGINT/SIGTERMhandler 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 selectors —
tap "Submit" below "Username",see "Price" right of "Label"— spatial anchoring via FlutterRenderBoxpositions (below,above,left of,right of) open link "url"— opens a URL in the default external browser viaurl_launcherplatform channelwait for animations to end— pollsSchedulerBinding.hasScheduledFrameuntil animations completesee "Field" is focused— asserts that a widget holds keyboard focus viaFocusManager.primaryFocusstore "value" as varName— stores a literal or${variable}value for use in later stepsprobe 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-animationsflag (alsodefaults.disable_animationsinprobe.yaml) — sets FluttertimeDilation = 0after connecting to skip animations and speed up testsprobe.open_linkRPC — agent-side handler that invokes url_launcher or records the URL forverify_browserprobe.set_time_dilationRPC — setstimeDilationon the agent at runtimeprobe.set_output/probe.drain_outputRPCs — inter-step output variable exchange between Dart and CLIdevice.ios_device_id/device.android_device_idinprobe.yaml— set a preferred simulator UDID or emulator serial without requiring--deviceon every run
Fixed
- Token acquisition reliability:
simctltoken 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 configureddial_timeoutwindow, 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_agentDart 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-dartreusable 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_agenttoflutter_probe_agentfor 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/wiki→flutter-probe/wiki) - Old domain references (
flutterprobe.com→flutterprobe.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 beforerestart the app; agent persists it and uses it after restart, enabling WiFi reconnection withoutidevicesyslog --hostflag for WiFi testing — connect directly to device IP, no iproxy needed--tokenflag to skip USB-dependent token auto-detectionPROBE_WIFI=truedart-define — binds agent to0.0.0.0for network access- HTTP POST fallback transport (
POST /probe/rpc) — stateless per-request communication for physical devices ProbeClientinterface — both WebSocket and HTTP clients satisfy it for transport-agnostic executiontap "X" if visibleProbeScript syntax — silently skips when widget is not found; works with tap, type, clear, long press, double tap- Direct
onTapinvocation fallback forSemantics-wrappedGestureDetectorwidgets on physical devices take screenshot "name"now accepts name directly (nocalledkeyword needed)- Physical device E2E test suite for FlutterProbe Test App (12 tests covering all 10 screens)
Fixed
clear app dataon 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 requiringcalledkeyword
Added
- Physical iOS device support: launch/terminate via
xcrun devicectl, token reading viaidevicesyslog, port forwarding viaiproxy - Physical Android device validation:
EnsureADB()verifies binary, device reachability, and cleans stale port forwards - Physical device detection:
IsPhysicalIOS(simctl list check) andIsPhysicalAndroid(ro.hardware property check) - Physical iOS devices listed in
probe device listviaidevice_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...
v0.5.6
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
Changed
flutter_probe_agentDart 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
Release v0.5.4
v0.5.3
Added
- Automated pub.dev publishing via GitHub Actions using official
dart-lang/setup-dartreusable 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_agenttoflutter_probe_agentfor 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/wiki→flutter-probe/wiki) - Old domain references (
flutterprobe.com→flutterprobe.dev) - Old package name references in vscode README and docs
- pub.dev score: shorter description, dartdoc warning, clean public API
v0.5.2
Release v0.5.2
v0.5.1 — Physical Device Support, WiFi Testing, HTTP Fallback
Added
- Pre-shared restart token (
probe.set_next_token) — CLI sends a token to the agent beforerestart the app; agent persists it and uses it after restart, enabling WiFi reconnection withoutidevicesyslog --hostflag for WiFi testing — connect directly to device IP, no iproxy needed--tokenflag to skip USB-dependent token auto-detectionPROBE_WIFI=truedart-define — binds agent to0.0.0.0for network access- HTTP POST fallback transport (
POST /probe/rpc) — stateless per-request communication for physical devices ProbeClientinterface — both WebSocket and HTTP clients satisfy it for transport-agnostic executiontap "X" if visibleProbeScript syntax — silently skips when widget is not found; works with tap, type, clear, long press, double tap- Direct
onTapinvocation fallback forSemantics-wrappedGestureDetectorwidgets on physical devices take screenshot "name"now accepts name directly (nocalledkeyword needed)- Physical device E2E test suite for FlutterProbe Test App (12 tests covering all 10 screens)
Fixed
clear app dataon 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 requiringcalledkeyword
v0.4.0
Added
before all/after allhooks for suite-level setup and teardown (run once per file)kill the appcommand — force-stop without relaunch (CLI-side via ADB/simctl)open the appnow performs CLI-side launch + reconnect when device context is availablecopy "text" to clipboardandpaste from clipboardcommands (agent-side via Dart Clipboard API)set location lat, lngcommand — set device GPS coordinates (ADB geo fix / simctl location)verify external browser openedcommand — checks url_launcher platform channel for external launchescall 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 testswith 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
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
Release v0.2.0