Header, message action, send/stop, history, model selector and dark-mode controls had no accessible name (icon-only buttons). Adds roles/labels and selected/disabled state; no visual change.
SettingsScreen CC 23 -> below 10. Form parsing, change detection and the dark-theme check moved to utils/ with unit tests; the dark switch now reads the OS scheme instead of comparing the background colour. Adds characterization tests for the screen.
The edit path duplicated the streaming flow with inline require() calls; it now reuses regenerateResponse, which also fixes:
- edited conversations were never saved to History
- the answer generated after an edit could not be stopped (no abort handle kept)
Stopping a stream now saves the partial conversation, like finishing or failing does.
Adds characterization tests for ChatScreen and useLMStudio.
- add babel.config.js with unstable_transformImportMeta: zustand/middleware ships
import.meta.env, which the Metro web bundle (a classic script) cannot parse, so
every page threw 'SyntaxError: Cannot use import.meta outside a module' and the
app never hydrated after the static export.
- declare the settings screen as 'settings/index' in the root stack: the old name
'settings' matched no route, so the modal presentation and the 'Settings' title
were silently dropped (expo-router logged 'No route named settings exists').
- add the missing app/+not-found.tsx that the root layout already referenced.
- update the About label from LocalAiApp to LocalMind.