leonard_flutter 0.4.0 copy "leonard_flutter: ^0.4.0" to clipboard
leonard_flutter: ^0.4.0 copied to clipboard

Host WidgetsBinding for Leonard.

Changelog #

0.4.0 #

Promotes 0.4.0-rc.2 to stable. The candidates' full change lists are under those entries below; the break is restated here because this is the version a consumer on 0.3.x upgrades to.

  • Breaking: captureScreenshot no longer takes a RendererBinding. Migration: drop the argument — captureScreenshot(binding) becomes captureScreenshot().
  • Fix: core.handshake carries toolDescriptors — each registered tool's description and raw input schema — beside the bare tools names, so a driver can reject a malformed call before it reaches the device (lenny#123).
  • Add: the core.remember and core.recall tools — a trim-proof scratchpad whose entries survive conversation trimming. Shipped in the 0.4.0-rc.2 archive and undocumented there (lenny#116).
  • Raise the leonard_contract floor to ^0.2.5, the version that introduces ExtensionRegistry.handshakeManifest.

0.4.0-rc.2 #

  • Fix live ext.leonard.core.screenshot capture by calling Flutter's stock WidgetInspectorService.screenshot implementation in process. This removes the app's VM-service self-connection and the package's runtime vm_service dependency. Screenshot failures now expose six distinct unavailable reasons while preserving the four-key success envelope and JSON-RPC error code 1.
  • Floors leonard_contract to ^0.2.4 (the binding passes carryForward, introduced there).

0.4.0-rc.1 #

  • Breaking: captureScreenshot no longer takes a RendererBinding. The exported top-level function is now captureScreenshot(), capturing through the stock Flutter inspector screenshot protocol behind one bounded capture path instead of protected RenderView layer capture. Migration: drop the argument — captureScreenshot(binding) becomes captureScreenshot(). Leonard's response and failure envelopes are unchanged, and the extension now registers through the catalog seam. ScreenshotConfig gains the inspector capture timeout, object group, and argument builder.
  • Add core.tap_at: a strict fractional tap that resolves logical coordinates inside an observed semantics node's rect and drives them through the existing hit-test path. The strict core.tap contract is unchanged.
  • Raise the leonard_contract floor to ^0.2.2; the declared ^0.2.0 floor was unsatisfiable against this package's own genesis_perception range.

0.3.1 #

  • Fix: core.enter_text now enters text through EditableTextState.userUpdateTextEditingValue (the same path a physical keystroke uses) instead of assigning controller.value directly. onChanged was never fired before, leaving app state that depends on it — button enablement, Form validation — stale after enter_text. Submission callbacks are unaffected: onSubmitted/onFieldSubmitted fire from performAction, not from an edit, so enter_text still does not submit. No API changes.

0.3.0 #

  • Breaking: test helpers no longer ship from leonard_flutter. Add leonard_flutter_test: ^0.1.0 to dev_dependencies and import its barrel instead. Imports of the deleted package:leonard_flutter/test_support/perception_serializer.dart must use package:genesis_perception/genesis_perception.dart directly.

0.2.2 #

  • feat: on-demand ext.leonard.core.get_diagnostics_tree diagnostics extension. Projects the core + registered perception extensions to Genesis diagnostics contract 1 only when requested (e.g. while the DevTools Diagnostics panel is open) — get_stable_observation's hot path is unchanged and still carries no diagnostics tree. A plain leonard_flutter dependency automatically discovers the bundled Leonard DevTools extension with Conversation and Diagnostics modes; no adopter dependency on leonard_devtools or genesis_foundation is required.
  • Fix: move the test-only leonard_agent dependency to dev_dependencies, so applications can install leonard_flutter alongside packages that use sse_channel ^0.1.1 (including signalr_netcore) without a version-solving conflict. No public API or runtime behavior changes.

0.2.1 #

  • Bump genesis_perception to ^0.2.0 (the genesis builder wave). No API changes in this package; the perception wire contract is unchanged.

0.2.0 #

  • Breaking: VM-service methods now use ext.leonard.*. Construct names with kLeonardExtensionPrefix from leonard_contract.
  • The binding emits kLeonardProtocolVersion in its handshake.

0.1.8 #

  • Republish so the pub.dev archive actually carries LeonardBinding.extensionsReady (a Future<void> that completes once the leonard service extensions are registered). The getter landed in the repo while the version stayed 0.1.7, so the hosted 0.1.7 archive predates it and consumers pinning ^0.1.7 from pub.dev could not compile against it (butane_flutter-s2w).

0.1.7 #

  • The core semantics fragment now emits identifier (from SemanticsData.identifier, set via Semantics(identifier:)) alongside label and value — a stable, locale-independent key for addressing a node. Emitted present-only, so apps that set no identifiers are unaffected.

0.1.6 #

  • The core semantics fragment now emits a value field (from SemanticsData.value) alongside label, so the harness sees a node's current value (e.g. a text field's contents) uniformly with the native channel's record shape.
  • Stability: the settle loop no longer wedges when a framework callback stays registered across frames — the persistent-callback baseline is dropped from isAnyBusy, so a quiet frame is correctly reported as idle.

0.1.5 #

  • core.handshake now advertises a capabilities list alongside the extension manifest. screenshot (the raw core.screenshot VM extension) is reachable but is not a namespaced tool, so it never appeared in the manifest — a driver listing tools would wrongly conclude "no screenshot". It is now reported as a capability, gated on the same debug/profile condition as the extension itself (absent in release).

0.1.4 #

  • Extension contract extracted to the new leonard_contract package (Flutter-free): LeonardExtension, LeonardTool, PerceptionExtension, ExtensionRegistry, and the dispatch helpers now live there and are re-exported via contract.dart, so consumers are unaffected. Adds a leonard_contract dependency. The unused frame-callback and error-handler hooks were dropped, removing the SchedulerBinding / FlutterErrorDetails coupling from the contract; the binding's error-ring-buffer capture is unchanged.

0.1.3 #

  • Perception serialization de-duplicated: serializePerceptionFragment now lives in genesis_perception and is re-exported here. Bumps the genesis_perception floor to ^0.1.2 (the version that introduced it).
  • Observation: expose scroll extent (pos / min / max) on scrollable nodes, so the agent can see scroll position and bounds instead of guessing.

0.1.2 #

  • Fix: a new agent handshake resets the session-terminated latch set by core.done. Previously, reusing one running app across multiple agent drives left the binding permanently terminated after the first drive's core.done, so every subsequent action returned session_terminated and the agent appeared stuck (model-agnostic). core.handshake now clears the latch — a handshake marks the start of a new session.

0.1.1 #

  • Fix: ship the compiled DevTools extension bundle in the published package. 0.1.0 omitted extension/devtools/build/ because the repo-root build/ .gitignore rule excluded it (pub publish honors .gitignore), so the "Leonard" DevTools tab was missing for consumers. The bundle is now un-ignored and shipped.

0.1.0 #

  • Host WidgetsBinding (LeonardBinding) with a single-path perception observation pipeline (PerceptionOwner-backed serialization).
  • LeonardExtension authoring contract; core fragment is perception-native.
  • Ships the DevTools extension (the "Leonard" tab) via extension/devtools/.
  • VM-service surface ext.leonard.* (protocol-stable).