leonard_flutter 0.4.2
leonard_flutter: ^0.4.2 copied to clipboard
Host WidgetsBinding for Leonard.
Changelog #
0.4.2 #
Stable promotion of 0.4.2-dev.1 on Nico's promotion call (2026-10-21), after the live check on the macOS sample app and the publish workflow's live macOS gate passed. The prerelease entry below carries the details. One change on top:
- The bundled DevTools panel is rebuilt from current
leonard_devtools. The copy shipped since 0.4.0 was built on 2026-09-02, before the panel learned theacpprovider, so apps on publishedleonard_flutterhad no way to pick a Copilot or Codex harness (lenny-g7ie4). The panel now offers it; see theleonard_acpREADME for the bridge it needs.
0.4.2-dev.1 #
- Fix:
core.system_backis a back press, never an app exit (lenny-ssviv). It calledSystemNavigator.pop— the platform's "exit the app" call — so a back at the root quit the app and ended the run (seen live on the macOS sample app at its Home route). It now dispatches the press the way the engine does, throughWidgetsBinding.handlePopRouteand the app's registered observers (the rootNavigator, aRouter's back button dispatcher,PopScope, an open drawer). When nothing handles it, the tool absorbs the press instead of falling back toSystemNavigator.pop, so the app stays up. The result is stillokand now reports{handled, popped}—popped: falsemeans no route left the stack — and is carried into the next model turn.
0.4.1 #
Stable promotion of 0.4.1-dev.1: the same content, published on the stable rung on Nico's promotion call (2026-10-15), after the Android (Pixel 7a), iOS 26.5 simulator and macOS live suites passed. The prerelease entries below carry the full list.
0.4.1-dev.1 #
- Adopt canonical Genesis
ComponentandElementvocabulary throughout the binding and core perception path. FlutterWidget,Element, andBuildContextremain explicitly distinct from Genesis tree types. - Rename
buildCorePerceptionSeedtobuildCorePerceptionComponentand useTreeNode.componentTypein source while preserving diagnostics contract 1 and its literalseedTypeJSON key. - Require
genesis_perception ^0.4.0andleonard_contract ^0.3.0-dev.1.
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:
captureScreenshotno longer takes aRendererBinding. Migration: drop the argument —captureScreenshot(binding)becomescaptureScreenshot(). - Fix:
core.handshakecarriestoolDescriptors— each registered tool's description and raw input schema — beside the baretoolsnames, so a driver can reject a malformed call before it reaches the device (lenny#123). - Add: the
core.rememberandcore.recalltools — 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_contractfloor to^0.2.5, the version that introducesExtensionRegistry.handshakeManifest.
0.4.0-rc.2 #
- Fix live
ext.leonard.core.screenshotcapture by calling Flutter's stockWidgetInspectorService.screenshotimplementation in process. This removes the app's VM-service self-connection and the package's runtimevm_servicedependency. Screenshot failures now expose six distinct unavailable reasons while preserving the four-key success envelope and JSON-RPC error code 1. - Floors
leonard_contractto^0.2.4(the binding passescarryForward, introduced there).
0.4.0-rc.1 #
- Breaking:
captureScreenshotno longer takes aRendererBinding. The exported top-level function is nowcaptureScreenshot(), capturing through the stock Flutter inspector screenshot protocol behind one bounded capture path instead of protectedRenderViewlayer capture. Migration: drop the argument —captureScreenshot(binding)becomescaptureScreenshot(). Leonard's response and failure envelopes are unchanged, and the extension now registers through the catalog seam.ScreenshotConfiggains 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 strictcore.tapcontract is unchanged. - Raise the
leonard_contractfloor to^0.2.2; the declared^0.2.0floor was unsatisfiable against this package's owngenesis_perceptionrange.
0.3.1 #
- Fix:
core.enter_textnow enters text throughEditableTextState.userUpdateTextEditingValue(the same path a physical keystroke uses) instead of assigningcontroller.valuedirectly.onChangedwas never fired before, leaving app state that depends on it — button enablement,Formvalidation — stale afterenter_text. Submission callbacks are unaffected:onSubmitted/onFieldSubmittedfire fromperformAction, not from an edit, soenter_textstill does not submit. No API changes.
0.3.0 #
- Breaking: test helpers no longer ship from
leonard_flutter. Addleonard_flutter_test: ^0.1.0todev_dependenciesand import its barrel instead. Imports of the deletedpackage:leonard_flutter/test_support/perception_serializer.dartmust usepackage:genesis_perception/genesis_perception.dartdirectly.
0.2.2 #
- feat: on-demand
ext.leonard.core.get_diagnostics_treediagnostics 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 plainleonard_flutterdependency automatically discovers the bundled Leonard DevTools extension with Conversation and Diagnostics modes; no adopter dependency onleonard_devtoolsorgenesis_foundationis required. - Fix: move the test-only
leonard_agentdependency todev_dependencies, so applications can installleonard_flutteralongside packages that usesse_channel ^0.1.1(includingsignalr_netcore) without a version-solving conflict. No public API or runtime behavior changes.
0.2.1 #
- Bump
genesis_perceptionto^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 withkLeonardExtensionPrefixfromleonard_contract. - The binding emits
kLeonardProtocolVersionin its handshake.
0.1.8 #
- Republish so the pub.dev archive actually carries
LeonardBinding.extensionsReady(aFuture<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.7from pub.dev could not compile against it (butane_flutter-s2w).
0.1.7 #
- The core semantics fragment now emits
identifier(fromSemanticsData.identifier, set viaSemantics(identifier:)) alongsidelabelandvalue— 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
valuefield (fromSemanticsData.value) alongsidelabel, 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.handshakenow advertises acapabilitieslist alongside the extension manifest.screenshot(the rawcore.screenshotVM 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_contractpackage (Flutter-free):LeonardExtension,LeonardTool,PerceptionExtension,ExtensionRegistry, and the dispatch helpers now live there and are re-exported viacontract.dart, so consumers are unaffected. Adds aleonard_contractdependency. The unused frame-callback and error-handler hooks were dropped, removing theSchedulerBinding/FlutterErrorDetailscoupling from the contract; the binding's error-ring-buffer capture is unchanged.
0.1.3 #
- Perception serialization de-duplicated:
serializePerceptionFragmentnow lives ingenesis_perceptionand is re-exported here. Bumps thegenesis_perceptionfloor 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'score.done, so every subsequent action returnedsession_terminatedand the agent appeared stuck (model-agnostic).core.handshakenow 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-rootbuild/.gitignorerule excluded it (pub publishhonors.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). LeonardExtensionauthoring contract; core fragment is perception-native.- Ships the DevTools extension (the "Leonard" tab) via
extension/devtools/. - VM-service surface
ext.leonard.*(protocol-stable).