All notable changes to FMTools will be documented in this file.
The format is based on Keep a Changelog. Versions increment by patch (0.0.205 → 0.0.206 → 0.0.207 → 0.0.208 ...).
Final Toga chat layout and transcript UX hardening for release.
- Sidebar layout now uses a fixed-width, height-responsive frame that stays top-aligned with the status area and bottom-aligned with the transcript frame boundary across window resize events.
- Main pane layout now allocates extra width/height proportionally to non-sidebar content (status/transcript/compose region) while preserving a stable sidebar width.
- Transcript rendering now auto-scrolls to newest content with throttled/coalesced scheduling to remain responsive during high-frequency streaming updates.
uv run --project examples/toga_local_chat_app --directory examples/toga_local_chat_app ruff check src/fmchat/app.py- Startup smoke:
uv run fmtools chat --python(process stayed alive for 10s, then cleanly terminated) - Async autoscroll stress probe: 120 rapid transcript updates coalesced into 6 scroll calls
Release and distribution hardening across GitHub, PyPI, and Homebrew.
- Automated standalone chat-repo publisher workflow and script:
.github/workflows/publish-chat-repo.ymlscripts/publish_chat_repo.sh
- Standalone
fmchatsync template and documentation understandalone/fmchat/.
- Standardized naming across parent and child app surfaces:
- repo/package naming:
fmtools/fmchat - app naming:
FMTools/FMChat
- repo/package naming:
- Toga chat app package path renamed to
fmchat. - Briefcase project metadata aligned with
FMChat. .gitignorehardened to prevent local data leakage from SQLite/chat-history artifacts (*.sqlite*,*.db*) and local publish workspaces.
uv run ruff check ...on touched Python filesuv run ruff format --check ...on touched Python filesuv run pytest tests/ -q(482 passed)- Standalone publisher idempotency verified against
adpena/fmchat
Release hardening focused on desktop-chat stability, no-gil fallback safety, and docs/packaging ergonomics.
- CLI
chat --standard-gilflag to force stable standard-GIL runtime for GUI demos. - Explicit runtime selection + fallback probing in
fmtools.clifor free-threaded vs standard-GIL execution.
fmtools chatnow prefers free-threaded CPython (3.14tthen3.13t) and retries with an explicit standard-GIL interpreter (3.14then3.13) if no-gil launch fails.- Toga desktop app UI polish:
- responsive wrapped sidebar title
- bottom-pinned action controls
- unified transcript/compose typography and text insets
- wrapped status messaging on narrow widths
- status bar width alignment with transcript/compose columns on compact windows
- Disabled no-gil-unsafe Cocoa Enter-key delegate path in free-threaded mode to avoid Rubicon/ObjC callback segfaults.
uv run ruff check .uv run ruff format --check .uv run ty check fmtools/uv run pytest(482 passed)uv run fmtools smoke(passed)
Release-candidate hardening pass for launch readiness.
- CLI
examplecommand to list and run standalone scripts underexamples/ - CLI
smokecommand to run full examples smoke suite with SDK preflight and per-script timeouts - CLI
notebookcommand to launchexamples/examples_notebook.pyvia marimo
audit_directory(...)now uses a bounded worker pool (max_concurrency) for better throughput under uneven per-file runtimes while preserving deterministic output orderingexamples/streaming_example.pynow prints token deltas correctly when SDK streaming returns cumulative text chunks- README and examples docs synchronized with current CLI/API surface and examples workflow
- Real Apple SDK smoke run completed across all top-level example scripts plus notebook startup
- Full quality gates:
ruff check,ruff format --check,ty check, and pytest suite all green
Initial public release. Consolidates all prior development into a clean baseline.
@local_extractdecorator — transforms functions into on-device structured extractorsstream_extractasync generator — concurrent streaming extraction with 4 history modes (clear, keep, hybrid, compact)Source >> Extract >> Sinkpipeline operators — composable async ETL pipelines@enhanced_debugdecorator — AI-powered crash analysis via Neural Engine- Polars
.local_llm.extract()namespace extension - DSPy
AppleFMLMprovider
fmtools.cache— sqlite3 content-addressable extraction cache + cached decorator helpersfmtools.protocols— typing.Protocol backend interfaces with swappable backend registry, wired through core extraction runtimefmtools.adapters— file/stdin/CSV/JSONL/iterable/trio adapters + chunking adapterfmtools._context— contextvars-based session scoping helpersfmtools._threading— free-threading detection and synchronization primitivesfmtools.scanner— mmap sliding-window scanner for large filesfmtools.watcher— hot-folder watcher daemon with extraction convenience APIfmtools._jit— runtime diagnostics and performance countersfmtools.arrow_bridge— Arrow IPC file/buffer bridge + Polars conversion helpersfmtools.functional— functional pipeline composition APIfmtools.auditor— on-device code auditor utilities
_context.session_scope(...)now uses the active backend registry (create_model/create_session) for full pluggable-backend parityline_split_scanner(...)now streams incrementally in batches instead of pre-buffering entire filesMMapScannernow guards UTF-8 boundary fixups to UTF-8 mode only and closes file descriptors safely ifmmapinitialization failscached_stream_extract(...)now supports both sync and async sourcessafe_model_cache()initialization is now race-safe under concurrent accessfunctionalpipeline steps now support async callable objects correctly and validate terminal-step orderingaudit_directory(...)now continues on per-file failures and parser handling is hardened for malformed model payloadswatcher.start(...)now awaits generic awaitables;process_folder(...)handlesmodifiedevents with mtime dedupeexamples/transcript_processing.pynow runs against a bundled sample transcript dataset by default (datasets/transcript_sample.json)
fmtoolsCLI withsetup,doctor,lint,format,typecheck,test, andcheckcommands (Click-based)scripts/setup.sh— one-command development environment setupscripts/doctor.sh— system prerequisites verification (9 checks)uvfor package management with[tool.uv.sources]git dependency for Apple FM SDKrufflinting and formatting with comprehensive rule set (zero violations)tytype checker (zero diagnostics)
- 400+ mock-based tests (zero Apple Silicon required to run)
- Full coverage of core + Phase 4 modules via pytest + pytest-asyncio
- Comprehensive README with API reference, tutorials, benchmarks, and architecture
- 9 use case examples with sample datasets
- GEMINI.md for AI-assisted development context