flutter_agent_harness
Cross-platform AI agent harness for Dart and Flutter: streaming provider adapters, agent loop with tools, session persistence, context compaction.
0.1.203
5.4K downloads/mo
#3746 most downloaded on pub.dev
IstiN/flutter_agent_harness
What this package is like to depend on
Last release today
23 Aug 2026
Ships on a steady schedule
a new release about every 8 days
Nearly every release is documented
notes for 128 of 129 stable releases
Nothing withdrawn
no release was ever pulled
1 months old
129 releases · first in 2026
129 releases in the last 12 months
see the full history below
Release timeline
129 releases · Jul 2026 to Aug 2026Releases
latest 60 of 129-
0.1.20323 Aug 2026Release notes
Open source →- fix(cli): provider picker, CodeMie auth refresh, skills access
- feat(session): unify CLI and macOS app session storage
- fix(providers): restore Kimi endpoint (api.kimi.com/coding/v1) and default model k3
- fix(cli): auto-refresh expired CodeMie SSO cookie on startup
-
0.1.20222 Aug 2026Release notes
Open source →- fix(install): remove broken Dart fallback, respect FA_INSTALL_DIR, sign macOS CLI in CI
-
0.1.20022 Aug 2026Release notes
Open source →- fix(ios): correct force_load path — pod products live in a per-pod subdir
- fix(ios): force-load cupertino_http pod binary + CI gate on its FFI symbols
- fix(flutter_app): project mount sets agent cwd to /project so sessions are folder-scoped
-
0.1.19922 Aug 2026Release notes
Open source →- fix(cli): show auth-method picker when adding openrouter/codemie from TUI
-
0.1.19522 Aug 2026 -
0.1.19421 Aug 2026Release notes
Open source →- fix(ci): merge Release.entitlements into the signed macOS build, don't strip them
-
0.1.19121 Aug 2026Release notes
Open source →- feat(cli): add auth-method picker for CodeMie SSO/JWT and OpenRouter OAuth/key
- feat(cli): auto-restart CodeMie SSO when the saved cookie expired
- fix(cli): catch uncaught errors and harden provider switch against crashes
- fix(ui): make ChatComposer transparent and regenerate goldens
- fix(network): use platform HTTP client for sandbox env, allow local HTTP, log bookmark failures
- fix(macos): add app-scope bookmark entitlement and surface folder picker errors
-
0.1.18821 Aug 2026Release notes
Open source →- feat(app): js_widget_runtime back on hosted pub (
^0.4.79, the git pin dropped) — JS apps gain the Material 3 catalog: appBar/navigationBar/ navigationRail/tabBar/fab/segmentedButton/radio/searchBar/tooltip/ popupMenu/banner/bottomAppBar/carousel/drawer, modal overlay nodes (bottomSheet/dialog/snackBar/datePicker/timePicker),flChart(line/bar/pie/radar/scatter via fl_chart), new layout/display/input nodes (wrap/align/flexible/spacer/scroll/clipRRect/svg/markdown/chip/badge/ progress indicators/switch/checkbox/slider/dropdown, textButton/ outlinedButton/iconButton), M3 motion tokens — and the seededjs-appsskill documents the whole catalog - fix(providers): one shared keep-alive HTTP client for all provider streams
instead of a fresh client per call — per-turn TCP churn piled up TIME_WAIT
sockets until connect() stalled into the watchdog (
TimeoutException: Future not completed); kimi-cli/pi reuse one client for exactly this reason. Aborts still close just their own response subscription - fix(compaction): auto-compaction no longer spins identical no-op passes to the max after a compaction: a pass with nothing left to cut stops the loop, and the post-pass transcript restamp clears the kept messages' stale generation-time usage so the estimate reflects the compacted size (before, a compacted session kept reporting its pre-compaction ~200k and retriggered compaction on every idle wake)
- fix(tui): the status row is padded to the terminal width — switching from a long model id to a shorter one no longer leaves the old tail on screen
- fix(cli): the status line is live again — ctx% shows the current context pressure (provider-reported usage plus the estimated tail, i.e. what the next request carries, not the last turn's frozen prompt size) and the tok counter grows during streaming (settled turns + in-flight estimate)
- fix(providers): inline
<think>…</think>tags in the content stream (kimi k3 via openai-completions and other endpoints without a reasoning field) are extracted into the thinking block instead of rendering as raw tags — streaming-safe (tags may split across deltas) - fix(tui): history wrapping no longer breaks markdown styling — the wrap is now word-aware (no more mid-word cuts) and active SGR styles are closed at the cut and re-opened on the continuation row, so a wrapped bold/code span keeps its style instead of going plain (visible mostly after resizes)
- fix(tui): restored sessions no longer lose markdown formatting after an unclosed code fence — replay truncation (20-row cap) and the replay budget cut could leave the fence state dangling, rendering everything after as verbatim text; truncated messages now close their fence synthetically and a budget cut starting mid-fence prepends a balancing opener
- fix(tui): restored sessions no longer dump the raw
<summary>/<read-files>block into the history — a projected compaction/branch summary replays as one dim marker row with the summary's first line as a hint - feat(config): provider watchdogs are configurable —
providerTimeouts:section in~/.fah/config.yaml(connectTimeoutMs,streamIdleTimeoutMs; strict parsing) for slow endpoints whose first byte takes minutes; the connect default itself is raised 60s → 180s (loaded reasoning endpoints hold big requests before the first byte) and the stream-idle default 120s → 5min (reasoning models think for minutes between chunks — pi and kimi-cli carry no such watchdog at all / SDK's 600s total) - fix(tui): Cyrillic/CJK paste no longer arrives as mojibake — dart_tui 2.0.0's bracketed-paste decoder maps every pasted byte to a Latin-1 char code; fa re-decodes the (lossless) mis-decoded text as UTF-8 at the PasteMsg boundary
- fix(tui): Ctrl+S no longer freezes the terminal — dart_tui's raw mode left termios IXON on, so Ctrl+S was the tty driver's VSTOP (XOFF: output froze, the keypress never reached the app); the TUI now disables software flow control for its lifetime and restores the saved termios on exit
- feat(tools): background shell jobs —
bash background: trueruns detached (log in.fah/bash_jobs/<id>.log),bash_job {status|output|stop}manages them, completions re-enter the conversation as system-notices (steered mid-run, fresh turn while idle) - feat(agent): steer soft-yield — a message arriving mid tool-call phase
(Ctrl+S, subagent completion, inbox mail) asks yield-aware tools to finish
the call early WITHOUT stopping the work: a running foreground
bashmoves to a background job untouched, a blockingtaskconverts still-running children to background jobs; the user message is delivered at the next step boundary instead of after the whole tool call - feat(task): model-facing
task_cancelaborts a running background subagent job;/taskslists background agents AND shell jobs,/tasks cancel <id>routes by id - feat(app): background shell jobs on every platform — the desktop app
forwards the host shell's capability through
ProjectMountEnv; mobile'sWasiSandboxShelland web'sMemoryShellrun jobs as detached script Futures on job-local interpreter clones (own cwd/vars/output capture, shared filesystem), sobash background: true+ steer-yield work in the sandbox too
- feat(app): js_widget_runtime back on hosted pub (
-
0.1.18716 Aug 2026Release notes
Open source →- refactor(ui): sane Settings structure — providers include on-device, one Models group
-
0.1.18616 Aug 2026Release notes
Open source →- fix(crap): decompose FaTuiModel._submit/_wrappedInput (CRAP 12.14/12.01 -> in budget)
- refactor(cli): split provider key helpers out of provider_commands.dart (2800-line gate)
- fix(providers): roles-mode switches preserve the scoped key; messaging presence
- test(cli): visual integration coverage for the new TUI UX
- feat(tui): shell-style input history on ↑/↓
- feat(messaging): live cross-instance chat — discovery, self-address, idle wake
- test(app): web-safety guard — no Platform.is without a kIsWeb guard
- test(messaging): visual integration for the agents inbox + terminal-safe marker
- fix(app): no crash on CodeMie/ChatGPT taps in the web build
-
0.1.18516 Aug 2026Release notes
Open source →- feat(tui): leave the mouse to the terminal by default (FA_TUI_MOUSE=1 to capture)
- fix(app): iOS CodeMie SSO — run the real loopback callback server
-
0.1.18416 Aug 2026Nothing published for this version
-
0.1.18216 Aug 2026 -
0.1.18015 Aug 2026Release notes
Open source →- feat(memory): keyword-only search fallback without an LLM provider
- fix(subagents): fire-and-forget registry persistence + per-session rehydrate
- fix(providers): connect + idle watchdogs on provider streams
- feat(ui): brand provider icons in onboarding, file split, iOS icon sync
- feat(session): never keep an untouched session file
- chore: drop unused import
- fix(cli): provider wizard asks for the key in roles mode; switches accept it
- feat(subagents): crash-resilient child sessions — spawn-time async creation + incremental turn flush (serialized, fire-and-forget)
- fix(memory): inject the <memory> section into the system prompt (CLI + app)
- test(cli): drop flaky real-model live badge visual test (unit-covered badge logic); document why
-
0.1.17915 Aug 2026Release notes
Open source →- fix(crap): simplify pickAgentAction dispatch; broaden badge visual soft-skip catch
- chore: drop unused session_repo imports
- feat(cli): extract active-agents badge to pure helper + unit tests; soft-skip live badge visual test
- fix(tui): soft-wrap long input lines instead of horizontal clipping
- feat(subagents): real JSONL child sessions at completion + /agents open <id> (race-free register)
- feat(providers): list-first model pickers everywhere — quick search, manual escape, agent models flow
- feat(cli): /agents child → Open session action — switch into the subagent's session
-
0.1.17815 Aug 2026Release notes
Open source →- feat(app): live agents badge in FaWorkBar (CLI bg: parity) + fix cli_visual tests for new settings hub order and /agents tree
-
0.1.17715 Aug 2026Release notes
Open source →- feat(ui): onboarding provider step is real and mandatory
- test(crap): decompose + cover /agents panel methods (pure helpers in agent_tree.dart), public subagentManager getter
- fix(analyze): drop redundant null guard in agents section
- feat(app): agents panel in settings — live subagent tree with observe/send (CLI parity)
- test(cli): /agents tree panel integration test (keyless)
- feat(cli): agents viz A+B — live agents badge in status line, /agents tree panel with observe/send
- fix(ui): saturated glyph colors for the light brand icon
- feat(task): Claude Code agent compat — .claude/agents roots + model: frontmatter alias
- fix(ui): macOS traffic-light clearance for pushed AppBar routes
- fix(ui): pin the onboarding Privacy link to the footer center
- feat(ui): single brand tile everywhere, glyph rebalanced in the icon
- fix(analyze): drop unnecessary non-null assertion
- feat(task): subagent model role — settings-picked delegation model (TaskModelsStore + roles: config), smol/explore precedence
-
0.1.17615 Aug 2026Release notes
Open source →- fix(analyze): await in try block, drop unused imports
- test(crap): decompose + cover new subagents/a2a/memory methods (CRAP ≤ 12)
- feat(ui): brand icon in dark + light forms, styleguide colors in onboarding
- chore: drop unused imports
- fix(providers): commit the FA_PROVIDERS filter + enabledProviders definitions unbreaking main
- style: dart format task_executor
- docs(subagents): mark all phases done + AGENTS.md bullets for memory/a2a
- test(subagents): real-model test skips without ZAI key, longer timeout
- feat(a2a): phase 5b — fah serve --a2a HTTP mount + full client↔server loop verified live
- feat(ui): onboarding top padding, privacy link, centered wide layout + light macOS icon
- feat(a2a): phase 5a — a2a: config, A2aManager lazy connect, task tool a2a:<name> remote agents, /a2a status
- feat(memory): phase 2 — compaction extraction hook, maintain() pipeline, /memory command
- feat(ui): onboarding redesigned pixel-close to the reference prototype
- feat(subagents): reply tool, agent_message sibling messaging, completed_without_reply notice + pending-queue guards
- fix(ci): remove stray file "flutter_app/" breaking the windows checkout
- feat(ui): Focus Timer as standalone dark card with circular progress ring
- feat(ui): onboarding rewritten to match reference — 3-col mockups, circular Focus Timer, colorful icons
-
0.1.17515 Aug 2026Release notes
Open source →- feat(providers): DIAL provider kind —
{baseUrl}/openai/deployments/{model}/chat/completionswithApi-Keyauth, optionalDIAL_API_VERSIONquery,/openai/modelslisting;--provider dial --model <deployment>headless
- feat(providers): DIAL provider kind —
-
0.1.17314 Aug 2026Release notes
Open source →- fix(ci): restrict auto-release tag matching to v*..; fix pubspec version
- feat(ui): auto-focus composer input on session open/switch
- fix(testflight): fail on submit errors; fix framework bundle IDs; cleanup publish job
- feat: switch to hosted flutter_agent_memory dep, remove publish_to: none
- chore: add LICENSE to fa_llm for pub.dev
- feat: prepare fa_llm for pub.dev publishing
-
0.1.16410 Aug 2026Release notes
Open source →- test(cli): avoid real network in /provider custom default URL test
- refactor(self_manage): lower fallbackZipUpdate CRAP and cover zip path
- ci: pin crap4dart to 0.2.1 to match pre-commit ratchet
- fix(installer): fallback to .zip extraction when raw binary not in release
-
0.1.16210 Aug 2026Release notes
Open source →- fix(app): key field no longer prefills OPENROUTER_API_KEY for non-OpenRouter providers
- fix(oauth): native iOS/macOS OAuth via HTTPS callback + custom scheme redirect
- fix(oauth): iOS web redirect flow with state + verifier
-
0.1.15709 Aug 2026 -
0.1.15208 Aug 2026 -
0.1.14907 Aug 2026 -
0.1.14707 Aug 2026Release notes
Open source →- fix(macos): surface EventKit authorization failures
- feat(macos): allow explicit calendar permission bootstrap
-
0.1.14607 Aug 2026 -
0.1.14307 Aug 2026Release notes
Open source →- feat(macos): privacy prompts, configurable signing, and no-sandbox release for Fa
-
0.1.14006 Aug 2026Release notes
Open source →- feat(settings): show on-device providers in the Providers section
- feat(settings): voice selection for the TTS media slot
-
0.1.13906 Aug 2026 -
0.1.13805 Aug 2026Release notes
Open source →- feat(gemma): enable on-device Gemma provider on macOS
- feat(fa_ui): wire fa_llm/fa_llm_flutter into provider config
-
0.1.13705 Aug 2026Release notes
Open source →- chore(deps): bump flutter_gemma to latest official releases
- feat(fa_llm_flutter): add FlutterGemma on-device provider
-
0.1.13605 Aug 2026 -
0.1.13505 Aug 2026 -
0.1.13405 Aug 2026 -
0.1.13304 Aug 2026Release notes
Open source →- feat(fa_ui): avatar builder + theme-driven chat surfaces
- feat(fa_ui): host surface tokens + optional app bar in FaChatScreen
- fix(fa_ui): FaChatScreen honors the host FaUiTheme in the chat theme
-
0.1.13204 Aug 2026 -
0.1.13004 Aug 2026Release notes
Open source →- feat(launcher): 'Restore reference version' tile menu item for demo apps
-
0.1.12803 Aug 2026Release notes
Open source →- fix(apps): jscore multi-instance crash override + seed-error surface + map top inset
-
0.1.12502 Aug 2026Release notes
Open source →- fix(example): pin js_widget_runtime@9498d0c — revert the native-release grace that defeated the lifecycle serialization (tf-6 SIGSEGV); drop the test-only grace config
-
0.1.12302 Aug 2026 -
0.1.12002 Aug 2026Release notes
Open source →- feat(fa_ui): present editor/picker pages as constrained dialogs on wide canvases
-
0.1.11902 Aug 2026Release notes
Open source →- feat(yoclip): Fa promo video workspace — 19s promo in 3 aspects x en/ru (App Preview + social + YouTube), creative treatment, VO, music bed, frame QA
- test(example): realistic providers in the store_providers frame; pre-commit format gate scopes to package dirs (yoclip/ is a standalone workspace)
-
0.1.11701 Aug 2026Release notes
Open source →- feat(example): launcher home on all layouts (legacy session sidebar removed), App Store shots v2 ('your own apps, built by chat'), golden orphan gate
-
0.1.11601 Aug 2026Release notes
Open source →- fix(example): close action for full-chrome JS apps (map was unclosable), store copyright name
-
0.1.11401 Aug 2026Release notes
Open source →- ci(ios): scope codesign rewrite to Runner, auto-sign the FaLiveActivity extension (bundle-id collision 90685)
- fix(example): steer button interrupts the run, queued steers run after stop, sheet opens at the latest message
-
0.1.11301 Aug 2026 -
0.1.11201 Aug 2026Release notes
Open source →- feat(example): iOS background execution + Live Activity, key resolution fix, crash-churn guard, mini drag pill
-
0.1.11131 Jul 2026Release notes
Open source →- fix(example): TestFlight SIGSEGV root cause — serialized engine lifecycle
-
0.1.11031 Jul 2026Release notes
Open source →- fix(example): visible run errors, mini last-message strip, iOS-grade drag&drop, weather timeouts
-
0.1.10931 Jul 2026 -
0.1.10829 Jul 2026Release notes
Open source →- fix(example): TestFlight JSC crash, ownership-aware demo sync, CRAP yellow zone
-
0.1.10729 Jul 2026Release notes
Open source →- docs: privacy policy — PRIVACY.md + published site page, onboarding links it
-
0.1.10629 Jul 2026Release notes
Open source →- feat(example): app content respects the bottom safe area + onboarding replay
-
0.1.10529 Jul 2026 -
0.1.10429 Jul 2026 -
0.1.10329 Jul 2026Release notes
Open source →- feat(example): first-launch onboarding, scene3d wiring + 3D game demo, sheet/tile polish
-
0.1.10228 Jul 2026Release notes
Open source →- feat(example): iOS-style home grid — icon-unit alignment, live reflow, resizable tiles
- fix(example): drop the border on the floating chat bar/icon — shadow only
- feat(example): tile span sizes + floating mini chat bar, directional sheet swipes
- feat(example): live app tiles on the launcher + chat sheet mini-by-default
-
0.1.10128 Jul 2026 -
0.1.10028 Jul 2026Release notes
Open source →- refactor(example): drop unused members left by the sheet v3 rewrite
- feat(example): sheet v3 — ONE panel: round icon ↔ mini bar ↔ full sheet