flutter_probe_agent 0.10.1
flutter_probe_agent: ^0.10.1 copied to clipboard
On-device E2E test agent for FlutterProbe. Embeds in your Flutter app and executes test commands via direct widget-tree access with sub-50ms latency.
Changelog #
0.10.1 - 2026-07-05 #
No changes to this package's own code — bumped to stay in lockstep with the
CLI's version (used for the probe.ping version-mismatch check). This patch
release's fixes (ProbeScript's wait for ... parsing, plus two CI-only
automation fixes) are entirely on the Go CLI/tooling side. Full detail in the
root CHANGELOG's [0.10.1] section.
0.10.0 - 2026-07-05 #
A hardening release — every fix below was found and verified against a real
device, working through a backlog of real E2E test issues surfaced by driver
projects. Full detail on each is in the root CHANGELOG's [Unreleased]
section (also being cut as part of this release); this is the summary
relevant to apps embedding this package directly.
probe.pingnow returnsagent_version(this package's version) alongsideok, and accepts an optionalclient_versionfield from the CLI. Part of the CLI↔agent version-compatibility handshake. Both fields are additive and ignored by older CLIs/agents that don't know about them.- Fixed: the version reported in mDNS advertisements and
GET /probe/statushad drifted to0.7.0while this file's version moved on — corrected to matchpubspec.yamland moved into its ownagent_version.dartfile. - Fixed:
scroll/swipecould report success while producing zero visible movement (a single-jump synthetic drag, and stale content from a route mounted underneath the current one both resolving as visible). - Fixed:
tap #idcould leave a text field genuinely unfocused, and thefocusedstate check (see/don't see #id is focused) had a false positive matching ancestors of the selected element. - Fixed:
tap #id's fast direct-invoke path now recognizesInkResponse(not justInkWell), covering more Material buttons before falling back to a real hit-tested pointer tap. - Fixed:
wait until #id appears/disappearsalways searched for the literal text"#my_button"instead of resolving the id — timed out on every non-text widget (icon buttons, etc.) regardless of visibility. - Fixed:
close keyboardandclose the appwere both complete no-ops.close keyboardnow callsFocusManager.instance.primaryFocus?.unfocus()directly;close the appcallsSystemNavigator.pop(). - Fixed:
don't see #id is <state>(negated state checks —focused,enabled,disabled,contains) silently ignored the checked state, degrading to a bare existence check. - Fixed:
scrollcould lose the gesture arena toDismissible-wrapped list rows and never actually scroll — now drives the nearestScrollable's ownScrollPositiondirectly instead of simulating a pointer gesture. - Fixed:
take screenshotcould capture stale content from a previous route instead of the current screen (missingwaitForSettled()call, and_captureViaRepaintBoundaryhad no route-awareness).
0.9.9 - 2026-05-13 #
awaitSignal(String name)— new public function. Blocks until the CLI deliversdeliver signal "name". Returns the value string sent with the step (default"true"). Use to unblock any OS-level interaction not in the Flutter widget tree: push permission prompts, payment sheets, App Tracking Transparency, custom deep-link handlers, etc.- New
probe.signalJSON-RPC method handled byProbeExecutor.
0.9.8 - 2026-05-12 #
awaitBiometricResult()— new public function exported fromflutter_probe_agent. Test apps in PROBE_AGENT builds call this instead oflocal_auth.authenticate()to receive the biometric match/no-match result from the CLI via the newprobe.biometric_signalJSON-RPC command. Required on iOS 26+ simulator wherenotifyutilno-match notifications no longer resolveLAContext.evaluatePolicy.- New
probe.biometric_signalJSON-RPC method (ProbeMethods.biometricSignal) that deliverstrue(match) orfalse(no-match) to a pendingawaitBiometricResult()Dart Completer.
0.9.7 - 2026-05-12 #
- Version bump to match CLI v0.9.7. No agent code changes — biometric authentication is driven via simctl/adb from the CLI, no on-device agent involvement needed.
0.9.6 - 2026-05-12 #
- Version bump to match CLI v0.9.6. No agent code changes — annotation DSL completeness work is in the flutter_probe_annotation & flutter_probe_gen packages.
0.9.5 - 2026-05-12 #
- Fix: iOS/Impeller screenshots —
take_screenshotpreviously calledOffsetLayer.toImage()on the root render view, which on iOS with the Impeller renderer returns a GPU-backed texture whosetoByteData(png)isnull— silently breaking screenshot capture. The agent now primarily captures via the largest visibleRenderRepaintBoundaryin the widget tree (Impeller-supported), and falls back to the oldOffsetLayer.toImage()path only when no boundary is found (Skia). AwaitsWidgetsBinding.instance.endOfFramebefore capture so the latest frame is always in the image. Uses the actual view'sdevicePixelRatiorather than a hard-coded2.0.
0.9.4 - 2026-05-09 #
- Version bump to match CLI v0.9.4. No agent code changes — the .mcpb Claude Desktop Extension is a CLI/server-side packaging change.
0.9.3 - 2026-05-09 #
- Version bump to match CLI v0.9.3. No agent code changes in this release. Annotation-driven test generation is delivered by the new flutter_probe_annotation and flutter_probe_gen packages.
0.9.2 - 2026-05-09 #
- Version bump to match CLI v0.9.2. No agent code changes in this release. Step feedback improvements are CLI-side only.
0.9.1 - 2026-05-09 #
- Version bump to match CLI v0.9.1. No agent code changes in this release. MCP parity improvements are CLI/server-side only.
0.9.0 - 2026-05-09 #
- Version bump to match CLI v0.9.0. No agent code changes in this release. Composite tests are a CLI-only feature — the agent runs identically on each participating device and is unaware of the multi-device coordination layer.
0.7.0 - 2026-05-02 #
- mDNS auto-discovery — when running in WiFi mode (
PROBE_WIFI=true), the agent now advertises itself over Bonjour/NSD as_flutterprobe._tcpso Studio (and any compatible client) can discover physical devices on the LAN without manual IP entry. The token is deliberately NOT included in TXT records — anyone on the same network would be able to read it. The agent still printsPROBE_TOKEN=...to logs as before. - New dependency:
bonsoir: ^5.1.10. Localhost-only deployments (noPROBE_WIFI) skip mDNS bring-up entirely so apps that only test on simulators pay zero overhead.
0.6.0 - 2026-04-26 #
- Version bump to keep in sync with CLI v0.6.0
- New RPCs:
probe.open_link,probe.set_time_dilation,probe.set_output,probe.drain_output - Relational selectors:
findRelationalresolves widgets by spatial relation (below,above,left of,right of) usingRenderBoxpositions - New asserts:
see "X" is focused(FocusManager.primaryFocus check) - New waits:
wait for animations to end(pollsSchedulerBinding.hasScheduledFrame)
0.5.7 - 2026-04-26 #
- No agent changes — version bump to keep in sync with CLI
0.5.6 - 2026-04-02 #
- Add Homebrew tap support (
brew tap AlphaWaveSystems/tap && brew install probe)
0.5.5 - 2026-04-02 #
- License changed from BSL 1.1 to MIT — free to embed in any Flutter app, including commercial and proprietary
0.5.4 #
- Restructured README: clear two-part system explanation (CLI + agent)
- Added CLI installation instructions (go install, GitHub Releases)
- Step-by-step getting started guide (install CLI → add agent → write test → run)
- Architecture diagram showing CLI ↔ agent communication
0.5.3 #
- Automated publishing via GitHub Actions (OIDC, no secrets needed)
- Publish workflow chains after Release workflow success
0.5.2 #
- Fix pub.dev score: shorten description to under 180 chars
- Fix dartdoc angle bracket warning in plugin.dart
- Reduce public API to
ProbeAgentandisProbeEnabledonly
0.5.1 #
- HTTP POST endpoint (
POST /probe/rpc) — stateless fallback transport for physical devices - WiFi testing mode (
PROBE_WIFI=true) — binds to0.0.0.0for network access - Pre-shared restart token — enables
restart the appover WiFi without USB - Direct
onTapfallback forSemantics-wrapped widgets on physical devices - Unique pointer IDs for synthetic gestures (prevents collision with real touches)
sendFnsetter onProbeExecutorfor HTTP request routing
0.5.0 #
- Profile mode support —
ProbeAgent.start()works in profile builds - Release mode safeguards — blocked by default, opt-in via
allowReleaseBuild: true - WebSocket ping/pong keepalive (5s interval)
- Widget finder visibility filtering (Offstage, Visibility)
- Token file persistence for both iOS and Android
0.2.0 #
- Initial release with WebSocket server, JSON-RPC 2.0 protocol
- Widget finder: text, key, type, ordinal, positional selectors
- Touch gestures: tap, double tap, long press, swipe, scroll, drag
- Text input via TextEditingController
- Screenshot capture with base64 encoding
- Triple-signal UI synchronization
- Test recording engine
- Clipboard copy/paste
- URL launcher interception