flowmind_bridge 1.0.0
flowmind_bridge: ^1.0.0 copied to clipboard
FlowMind QA Bridge — embed in your Flutter app to enable autonomous AI-driven end-to-end testing. Exposes a localhost HTTP server for the QA agent to read the UI, dispatch taps/text, and capture screenshots.
Changelog #
All notable changes to flowmind_bridge are documented here.
This project follows Semantic Versioning.
1.0.0 #
First public release.
Features #
- HTTP bridge on
localhost:9999— debug-only viaassert(...), stripped from release builds by the Dart compiler. GET /ui_state— current screen's semantics tree as JSON, with deduplication of nested wrappers (Material's nestedSemanticslayers no longer leak duplicate entries for the same logical widget).POST /action/{tap,type,scroll,back,long_press}— UI action dispatch.tapfiresSemanticsAction.tapfor accessibility-aware widgets, and falls back to a synthetic pointer event at the widget's centre (DPR-corrected for high-density displays) for widgets where the semantic action doesn't route toonTap(BottomNavigationBar items, AlertDialog buttons, customGestureDetectors).typewrites directly to a registeredTextEditingControllerwhen available, falling back toSemanticsAction.setTextotherwise. Per-line label match handles widgets whose nestedSemanticsproduces newline-joined labels.
GET /screenshot— current frame as base64 PNG, captured viaOffsetLayer.toImage()on the rootRenderView(no host-app integration required).GET /logs+POST /logs/clear— captured Flutter framework logs for crash/exception detection.FlowMindFieldRegistry— opt-in registry for reliable form input. Register yourTextEditingControllerininitState()and unregister indispose(); the bridge writes directly to your controller, bypassing Material's nestedSemanticslayering issues. Owner-awareunregisterprevents race conditions during cross-screen navigation.- Diagnostic endpoints for debugging integration issues:
GET /debug/probe?label=...— inspect what the bridge sees for a labelled element (rect, computed global centre, semantic action flags).GET /debug/last_tap— inspect the most recent tap dispatch.GET /debug/last_extract_error— last exception thrown by the UI extractor, with stack trace, when/ui_statereturnstransitioning_screen.GET /debug/registry— list every key currently registered inFlowMindFieldRegistry.
- Romanian / multilingual support — labels are matched case-insensitively, diacritics are sanitised at the screen-id level but preserved in widget labels.