embed_flutter 0.1.0
embed_flutter: ^0.1.0 copied to clipboard
A powerful Flutter SDK that provides a powerful voice-enabled AI-agent functionality with real-time widget tree monitoring for screen context fetching and realtime voice communication.
Changelog #
0.1.0 #
New public API #
- Programmatic call control, available as statics on
EmbedWidgetand as top-level functions:startCall()/embedStartCall()(gated on FAB visibility),endCall()/embedEndCall()(not gated — a call can outlive the FAB),isCallActive/embedIsCallActive(), andcollapseWidget()/embedCollapseWidget()(UI-only; the call keeps running). - Exported
EmbedLogdeveloper diagnostics (opt-in viaEmbedWidget(debug: true)) — explains why the agent button is or isn't visible on the current screen.
Fixes — call lifecycle & resource leaks #
- Server-initiated disconnects now always tear the call down, including rooms that never published a local track. Teardown is re-entrancy-guarded, so
agent_conversation_endedfires exactly once. - The LiveKit
Room, its listener, and its event subscription are now released on every teardown path — previously each call cycle leaked one room and two subscriptions. - Removed a duplicate
TrackSubscribedEventhandler that ran audio-route setup and a rebuild twice per subscribed track. - Call teardown,
startCall(), and the inactivity auto-trigger now share a single FAB-visibility definition. A backendis_live: falseon config refresh and the host flippingshowEmbedWidgettofalseboth end an in-progress call.
Fixes — networking & events #
HttpClientis now closed after every API request; it previously leaked per call along with its connection pool.app_user_idis URL-encoded in query strings — emails with+or@no longer corrupt the query. A null user id now sends empty instead of the literal string"null".- All emitted event timestamps are now UTC (
.toUtc()); they previously used device-local time with no offset suffix, skewing every event by the device's offset. embedInitialize'sonResultno longer reports success on HTTP failure — success now means a usable config was obtained (fresh fetch or cached fallback).agent_conversation_endednow carries the real elapsedcallDuration(previously omitted; the started event carried0).- Rage clicks now emit the flat event name
rage_click(newSdkEventName.rageClick) instead of<elementId>_rage_clickper element;elementIdremains in the payload. embedTrackEventno longer silently drops the reserved keysuser_data,screen_state, andcustom_event— it always sends an analytics-data event with the key as the event name; useembedEventfor typed events.embedOnAgentdocumentation corrected to the keys that actually fire:agent_conversation_started,agent_conversation_ended,popup_message_visible.
Behaviour changes #
embedClearStorageCache()is now a full logout: it clears stored keys for every flow (plusagent_data_*), queued analytics events, tracked form/tap data, and the in-memoryapp_user_id— and ends an active call, firingagent_conversation_ended.embedInitializedeliberately clears nothing: returning users keep their stored identity and the agent button reappears without the host re-sending auser_dataevent.
Tweaks #
- Removed a dead token refresh on LiveKit reconnect — the server keeps the stored reconnect token current on its own.
- Bumped the SDK version reported to the backend (
sdk_version) to0.1.0.
0.0.20 #
Fixes #
- Fixed agent audio dropping when a wired/Bluetooth headset is connected mid-call. The SDK no longer forces the audio route on a polling timer; it relies on LiveKit's native headset prioritization and reacts only to real device-change events.
- The inactivity tooltip no longer appears while a call is connecting/connected (previously it could pop up after the bar auto-collapsed).
- The inactivity tooltip now auto-dismisses on any user interaction (tap, scroll, drag), not only a FAB tap.
Features #
- The expanded voice bar auto-collapses back to the FAB after a call connects while keeping the call live. Delay is configurable via
collapsedView.collapsedTime(seconds, default 15s). - Added a "live call" pulse around the collapsed FAB that appears only after the bar fully collapses and only while the user or agent is speaking. Color is configurable via
colorPalette.pulseColor(default purple#B391F3). - The default avatar fallback now uses a Lottie animation instead of the Material
chat/personicons.
Tweaks #
- Reduced the expanded bar height, Connect-button padding, and mute/end-call button sizes.
- Bumped the SDK version reported to the backend (
sdk_version) to0.0.20.
0.0.19 #
Fixes #
- Relaxed the
livekit_clientconstraint from the exact pin2.6.5back to^2.5.3. The exact pin transitively forcedmeta ^1.17.0(required by livekit_client 2.6.5), which brokepub getfor apps on older Flutter SDKs that pinmeta 1.16.0. The range lets pub select a compatible livekit_client version per app.
0.0.18 #
FAB pre-show delay & per-flow delay policy #
- Added
embedButtonDelayMs(onEmbedWidget/EmbedProvider) — global delay before the FAB appears after navigating to an enabled route. Default0(no delay). - Added
groupDelays(Map<String, EmbedButtonDelay>) — per-flow delay override withEmbedButtonDelayPolicy:perScreen,oncePerGroupEntry,oncePerAppSession. Falls back toembedButtonDelayMs. - Added React-API aliases on
EmbedButtonContinuity:continuous(=keepVisible) andperScreen(=reset), plusEmbedButtonContinuity.fromString/EmbedButtonDelayPolicy.fromStringparsers.
Fixes #
- Nudge/inactivity countdown now starts when the FAB becomes visible (after
embedButtonDelayMs), not when the route is first entered. inactivity_behaviour: "auto_trigger"now maps toInactivityMode.AUTO_TRIGGER(auto-starts the call likestart_call); previously it silently fell back to showing the popup. AddedInactivityMode.fromBehaviour.- FAB no longer renders off-screen on the app's initial/home route — position is recomputed once the screen size is available (post first layout) and on metrics changes.
- Fixed
agentTapToOpen/agentTapToCloseenum identifiers (backend valuesagent_tap_to_open/agent_tap_to_closeunchanged).
Docs #
- Added
doc/fab-visibility-advanced.md(Flutter FAB visibility guide) anddoc/embed-button-delay.md.
0.0.17 #
- Typewriter transcription panel: vertical expansion from bottom to top when
type == "calculation"data received via LiveKit - FAB positioning:
widget_position(bottom-right,bottom-left,top-right,top-left) now respected from backend config - Fixed
bottomPaddingandrightPaddingnot applying correctly to FAB position - Bounce animation on FAB when transcription panel closes
- Analytics event names updated:
agent_tap_to_open/agent_tap_to_close SdkEventNameenum added for all internally-fired analytics event names (exported as public API)- All public event APIs (
embedEvent,embedTrackEvent, etc.) now returnFuture<bool>for send-success feedback EmbedRouteListenerwidget added for GoRouter / ShellRoute automatic route detectionEmbedNavigatorObservernow accepts optionalnameExtractorfor GoRouter alias support- Route matching now strips leading slashes — GoRouter paths (
/home) match aliases (home) - Cache-first config strategy restored in
_fetchUIConfigwith API fallback on cold start - Removed all debug logs; all exceptions handled internally — zero crash guarantee for host app
- Removed dead
_buildTranscriptionPaneloverlay (superseded by inline vertical expansion)
0.0.16 #
- Graceful exception handling across SDK — zero crash guarantee
- Fixed event routing and SDK key resolution issues
- Stability Improvements
0.0.15 #
- Stability Improvements
0.0.14 #
- Minor Bug Fixes and Stability Improvements
0.0.13 #
- Minor Bug Fixes and Stability Improvements
0.0.12 #
- Added capability to send ANALYTICS_DATA event from screens which are not part of enabled routes.
0.0.11 #
- Added ANALYTICS_DATA event for tracking structured analytics events with a specific event identifier
0.0.10 #
- Minor Bug Fixes and UI improvements
0.0.9 #
- Added rightPadding and bottomPadding to set the initial position of Embed Widget
0.0.8 #
- Added onPermissionStatusChanged callback to recieve the permission status change events
- Minor Bug Fixes and Stability Improvements
0.0.7 #
- Minor Bug Fixes and Stability Improvements
0.0.6 #
- Bluetooth Headset Support added
- Added Inactivity Actions
- Minor Bug Fixes and Stability Improvements
0.0.5 #
- Added Multi Flow Support with enabledroutes
0.0.4 #
- Added Support for Re-initialisation of embed agent
0.0.3 #
- Added Support for Buttons
- Added Route based activation
- Added embedEvent call for user generated USER_DATA nd SCREEN_STATE events
- Added Embed Config Service for management of apiKey and embedUrl
- Improved widget context extraction
- Updated Documentation
0.0.2 #
- Removed the requirement for bluetooth permissions
- Updated License
0.0.1 #
- Initial release of Embedded Agent SDK
- Core functionality for automatic widget tree traversal
- Real-time widget monitoring with collapsible interface
- Comprehensive widget property extraction
- Cross-platform support for Android and iOS
- Example applications demonstrating SDK usage
- JSON output format for widget information
- Performance-optimized widget tree analysis