Releases: off-grid-ai/OGAM
Releases · off-grid-ai/OGAM
Release list
Off Grid v0.0.97
What's Changed in v0.0.97
Features
- feat(chat): collapsible list of tools sent to the model (29344bb)
- feat(mcp): max out context window when MCP tools are enabled (7e9d7d2)
- feat(tools): route MCP tools via on-device embedding model (ea127b1)
- feat: Pro Tools page + chat quick-settings Pro Tools entry (7658d6b)
- feat(pro): explain monthly cancellation via email, drop unused portal URL (1b49b07)
- feat(models): keep STT/TTS co-resident, evict only as a last resort (78145bf)
- feat(pro): ambient framing, July-flip pricing, management card, settings (404fbff)
- feat(pro): reactive activation, DEV pro toggle, app-root wiring (81090bb)
- feat(pro): Keygen license-key activation with a hard device cap (d6421e5)
- feat(models): show Pro upsell in Home voice sheet for free builds (e52e839)
- feat(components): add centered alert dialog (3b13dd4)
- feat(mcp): wire MCP SDK OAuth — URL polyfill, deps, submodule bump (af5e596)
- feat(audio): bump pro to audio-mode progress captions (60d0303)
- feat(tools): two-pass tool routing for on-device models (iOS llama + LiteRT) (319c348)
- feat(litert): direct audio input for LiteRT models on Android (22e486b)
- feat(litert): surface curated LiteRT models in onboarding (d460cd1)
- feat(pro): Get Pro opens web pay page directly; modal is verify-only (db231bf)
- feat(audio): larger voice mic + taller chat input (ab319e3)
- feat(chat-input): header Chat/Voice toggle, drop thinking bar icon, pass onSend to audio (39e2ddb)
- feat(audio): render the voice empty-state hero slot (aa0b31c)
- feat(litert): two-pass tool selection for large tool sets (7d917e4)
- feat(pro): reframe unlock copy around 'membership' / Get Pro (3e83836)
- feat(home): animated load progress + rotating tips on the loading overlay (1db5d14)
- feat(settings): release-visible Debug Logs button + MCP OAuth browser log (34bec91)
- feat(mcp): native OAuth adapters, boot wiring, and redirect scheme (dab716b)
- feat(transcription): multi-model — select/download/delete per model (514202a)
- feat(settings): remove Voice Transcription + Text to Speech settings screens (b4ab879)
- feat(chat): Models selector in chat header → shared manager sheet (2cd681e)
- feat(home): collapsed Models control + per-type pickers; bump pro (66842eb)
- feat(audio): wire streaming TTS + chat-mode select-text; bump pro (ae5eeb9)
- feat(routing): warm selected models at boot (text -> image -> TTS -> STT) (cf1605b)
- feat(routing): auto-provision the default SmolLM2 classifier (a328699)
- feat(routing): use the SMOL LLM classifier for image-only routing (19130b4)
- feat(routing): differentiate text vs image + load text model on demand (7ce42ae)
- feat(routing): remember last text model + preload it on chat open (2159ba3)
- feat(routing): make residency manager authoritative for model memory (0bde2b9)
- feat(image): disable prompt enhancement when no text model is available (46b384c)
- feat(routing): add model residency manager (memory budget + eviction) (ccd6bbe)
- feat(downloads): show voice + transcription models in Download Manager (e1e2f98)
- feat(models): add Transcription Models (speech-to-text) tab (e9cdb00)
- feat(models): add Voice Models tab with pro panel + non-pro upsell (4c3cc32)
- feat(chat-input): inline Chat/Audio toggle slot + fix clipped pill icons (1d16749)
- feat: pro unlock modal polish (dismiss, border, input-gated CTA) (48bfd36)
- feat: add RevenueCat config key placeholders (66ff0c4)
- feat: pro-gated email/calendar tools via ToolExtension (fcbc9c9)
- feat: in-app debug log viewer (99718d6)
- feat: RevenueCat pro license service + unlock modal (3d5613b)
- feat: tool extension seam + MCP wiring into the generation loop (26db7c0)
- feat: pro feature registry, license seam, and submodule (d300dbb)
- feat: pluggable TTS engine interface with Kokoro + OuteTTS adapters (609ddd5)
- feat: seekbar overlaid on waveform, visible on both user and AI bubbles (c26d7cc)
- feat: WhatsApp-style waveform progress + increase voice change cooldown (a2b41ea)
- feat: word highlighting in transcript, stop TTS on record, fix multi-click play (097286e)
- feat: draggable seekbar — tap or drag to seek (a3c5891)
- feat: seekable progress bar — tap to jump to position in audio (d8c9e00)
- feat: rename voices to mood personas with pre-configured speeds (996b986)
- feat: audio mode system prompt for conversational voice responses (ac6de63)
- feat: ChatMessage speak action, test fixes, and TTS plan update (11f099b)
- feat: TTS store, service, TTSButton, KokoroTTSManager, and App wiring (908af16)
- feat: multimodal audio input — pass WAV directly to audio-capable models (ff834e1)
- feat: VoiceSettingsScreen — HuggingFace model search (c072873)
- feat: expand Whisper model catalogue and add downloadFromUrl (9f5ad0d)
- feat: add TTS accordion to GenerationSettingsModal (6b337f3)
- feat: VoiceRecordButton — inline download prompt instead of navigation (3d1eb33)
- feat: Audio Mode full voice conversation — user audio bubbles + auto-send (bb4ff1f)
- feat: audio attachment type — duration, format, and recorder service (ef9b973)
- feat: replace sliders with NumericStepper in all settings screens (ce920a4)
- feat: add NumericStepper component (8ab6a50)
- feat: add Voice mode toggle to quick settings popover (78e40d5)
- feat: trigger TTS generation automatically after streaming in Audio Mode (6d269de)
- feat: add TTS with Audio Mode and Chat Mode (767e0b9)
Bug Fixes
- fix(ci): exclude pro-importing MCP test suites from open-core CI (38d4133)
- fix(models): stop Whisper STT models showing under Text models (b23dafe)
- fix(downloads): tag Whisper downloads as STT so they file under Voice (73eea0d)
- fix(voice): Kokoro iOS playback + recognize installed Whisper models at boot (1923a53)
- fix(whisper): seed totalBytes so transcription download shows progress (b0fea62)
- fix(pro): keep license-key activation reachable above the keyboard (b2e59e2)
- fix(share): one-tap X compose via x.com/intent/post, ambient copy, org links (2890daf)
- fix(ci): exclude KokoroTTSBridge test from tsc (imports the pro submodule) (07c357f)
- fix(deps): resolve react-dom override conflict so npm ci accepts the lock (2ec61dc)
- fix(deps): pin react/react-dom to 19.2.0 so npm ci stays in sync (9303dfa)
- fix(voice): keep the voice note on the user message in image mode (62e75d6)
- fix(voice): speak only the answer aloud, not the thinking process (e6953fe)
- fix(pro): reflect Pro activation in the Voice tab/sheet without a restart (31bc750)
- fix(voice): show a spinner while the STT model downloads + carry progress to Models (0229cde)
- fix(voice): recommend Whisper Base (142MB) instead of Small (466MB) (f98cda6)
- fix(chat): anchor quick-settings popover correctly after keyboard dismiss (e0973ec)
- fix(android): status bar icons follow the app theme via SystemBars (7d1599e)
- fix(chat): image-mode gate accepts a downloaded model (cbb2170)
- fix(models): Home selection marks active, loads lazily on send (f2fbc37)
- fix(android): edge-to-edge status bar follows the app theme (510a0c8)
- fix(chat): keep Qwen3 reasoning block on completion (386ef3d)
- fix(chat): remove keyboard whitespace under edge-to-edge (3aa9468)
- fix: point Wednesday links to wednesday.is (51b8519)
- fix(share): open X via deep link with web fallback (989dbdf)
- fix(stt): remove HuggingFace Whisper search, keep the built-in catalogue (13ddf6d)
- fix(downloads): keep Whisper download state in sync across surfaces (8602aac)
- fix(lint): baseline NotificationPermission (unused audio-api playback notification) (9b280c9)
- fix(deps): remove unused react-native-background-downloader (c9cfdc9)
- fix(lint): use template literal in audioRecorderService (prefer-template) (aa13b25)
- fix(ios): activate the AVAudioSession before recording (cd7b947)
- fix(deps): pin react-native-zip-archive to 7.1.0 so patch-package applies (a83e465)
- fix(deps): pin react-native-zip-archive to 7.1.0 so patch-package applies (b54aa1b)
- fix(lint): drop unused loop var left by the log strip (1acba96)
- fix(navigation): dedupe screen registration by name (47dd59c)
- fix(audio): wire MCP sheet into the audio-mode quick settings (94dc271)
- fix(lint): resolve pre-existing inline-style and complexity errors (013ac5e)
- fix(chat): honour the Tools 'N/A' gate during generation (3b08ce2)
- fix(whisper): keep transcription model list in sync with disk (1fc39bf)
- fix(chat): update OpenCL warning message for clarity on GPU support options (96ad679)
- fix(audio): clear attachments after a keyboard send in audio mode (380d20b)
- fix(litert): send image and audio together in one turn (094dfef)
- fix(ui): open the next sheet only after the Models manager fully closes (2431011)
- fix(audio): bump pro for TTS low-RAM + react-native-fs shim (a890f7e)
- fix(ios): consolidate react-native-fs onto the @dr.pogodin fork (3780e72)
- fix(models): engine-aware loaded check so LiteRT models don't reload (7c97849)
- fix(chat): restore KeyboardAvoidingView keyboard avoidance (6d00bf2)
- fix(litert): recover from native tool-call parse failures instead of crashing (9e20444)
- fix(logging): re-wire in-app debug viewer dev-only after taking main's logger (0a4aca2)
- fix(pro): open unlock modal in verify mode from "Already paid?" (3d036cb)
- fix(android-test): relax bytecode verification for unit tests (Amazon IAP VerifyError) (57d5caf)
- fix(settings): keep Debug Logs dev-only; bump pro pointer (7b43df5)
- fix(ci): move pro-source tests into the pro submodule (35f00e6)
- fix(tools): inject MCP hint once, and only when no native tool calling (c48f671)
- fix(audio): bump pro — cumulative seekbar position across streamed sentences (3047ba2)
- fix: detect Ollama vision capability from capabilities array (cd729ce)
- fix: disable persistent file logging to stop UI stalls/ANRs (f8c5719)
- fix(routing): don't lose the message when the model selector...
Off Grid v0.0.96
What's Changed in v0.0.96
Bug Fixes
- fix(android): guard null job in whisper realtime finish to prevent SIGSEGV (bb37d8d)
- fix(android): fix double-close race in LiteRT conversation teardown (c747d79)
- fix(android): reduce LiteRT native crashes (74902d2)
Chores
- chore: bump version to 0.0.96 [skip ci] (bf69688)
Other
- improve pixel 10 warning ui bring in one line with i button and change colour to yellow (2698cbc)
- reduce number of lines (6745ea1)
- show ui msg gpu is not supported on pixel 10 (4478a9c)
- Update GitHub Sponsors username in FUNDING.yml (ca37944)
Full Changelog: v0.0.95...v0.0.96
Off Grid v0.0.95
What's Changed in v0.0.95
Features
- feat(tools): on-device HTML parsing for read_url, improve tool prompts (3009df8)
- feat(perf): enable React 19 compiler (64ae219)
- feat(tools): warn when more than 3 tools are enabled (4f0cfbd)
- feat(litert): memory-warning alert on E4B + show LiteRT label chip (8a52466)
- feat(litert): curated registry, integrity-by-commit-hash, vision flag fix (1021fad)
- feat(litert): add recommended models card on the models list (8d72df9)
- feat(litert): wire discriminated union across UI and services (41b541e)
- feat(litert): add per-engine settings and fix migration deep merge (8a88f65)
- feat(ui): split text settings UI by engine (Change 4) (867d6b3)
- feat(settings): per-engine settings for LiteRT (Change 2) (2a485b4)
- feat(types): discriminated union for DownloadedModel (Change 1) (26add6a)
- feat(litert): add getActiveEngineService helper (dbafafa)
- feat(litert): wire liteRTBackend to loader, pending-reload check, and settings UI (6b55efb)
- feat(litert): add liteRTBackend setting defaulting to gpu (b0c7d96)
- feat(litert): lower auto-compact threshold to 65% and seed token counter from history (8e9605a)
- feat(litert): add RAM-based context slider limits for LiteRT models (4d5ef28)
- feat(litert): filter settings UI per engine and add selectIsLiteRT store selector (491746e)
- feat(litert): pass maxNumTokens to engine, scale init timeout by context size, and wire tool call event bridge (7fa4f29)
- feat(litert): replace SDK benchmark with wall-clock stats and add GPU/NPU warmup (ed23438)
- feat(litert): expose full BenchmarkInfo - prefill speed, TTFT, decode tps, init time in generation details (6265011)
- feat(ui): DeviceStatsChip, hide irrelevant LiteRT settings, backend reload trigger, iOS guard (85f887d)
- feat(litert): add LiteRT-LM as second on-device inference engine (4db1119)
Bug Fixes
- fix(downloads): use fresh store snapshot in watchDownload completion callback (5d321dc)
- fix(downloads): align ModelCard retry with DownloadManager and fix listener split (8fde82b)
- fix(lint): remove unused colors variable and extract inline styles to StyleSheet (b60f24f)
- fix(models): show failed download state inline in model card with resume retry (69d17d2)
- fix(litert): cap native tool calls at 3 per response (73f85ff)
- fix(tools): fix amber dot position on settings gear icon (019a6ae)
- fix(settings): default thinking to off and remove excessive comments Co-Authored-By: Dishit Karia hanmadishit74@gmail.com (850dff1)
- fix(ios): hide LiteRT recommended card on iOS (aacc410)
- fix(tools): move showSettingsDot computation to parent to avoid store dependency in ChatInput (a0dfa4d)
- fix(lint): fix lint errors in tool warning UI components (67adafd)
- fix(remote): stop sending max_tokens/num_predict to remote servers (890cd2f)
- fix(litert): handle missing stopGeneration in summarizeSession timeout (939f805)
- fix(litert): fix context overflow, compaction race condition, and TTFT (92a4065)
- fix(litert): fix TTFT display and resolve lint errors (4c933ea)
- fix(litert): fix compaction death-spiral and unreliable summarisation (7f13167)
- fix(sonar): resolve final negated condition warnings and security hotspot (f0b0546)
- fix(tsc): type history array explicitly to restore Turn role inference (2019e44)
- fix(sonar): resolve second round of SonarCloud warnings and CC failure (a57d9f8)
- fix(tests): cast mock.calls tuple to any[] to satisfy strict tsc (9075a99)
- fix(lint): remove debug logs from assertLiteRTImageSupport to satisfy max-params (3b3cac9)
- fix(sonar): resolve SonarCloud quality gate failures and code style warnings (15be9c1)
- fix(android): patch react-native-gesture-handler@2.30.0 to compile with Kotlin 2.2.0 (358e4db)
- fix(litert): respect liteRTVision flag for supportsVision state (e58c4dc)
- fix(litert): extract liteRTCompaction helpers into standalone module (adec2ca)
- fix(generation): correct LiteRT TTFT unit and add fallback token count (c5016b1)
- fix(litert): reset native conversation state after stopGeneration (e87cf9b)
- fix(litert): fix stop+regenerate session crash and improve debug logging (8a87980)
- fix(litert): detect native module by existence, not Platform.OS (ff2a4e0)
- fix(litert): add display branch debug logs to getDisplayMessages (8934c29)
- fix(tools): update web_search and read_url descriptions for chained use (98b7ab8)
- fix(litert): enable thinking toggle and deduplicate tool text hint (4921b41)
- fix(litert): stream thinking tokens incrementally instead of all at once (a33f67e)
- fix(litert): pass image URI through tool loop and generation pipeline (c57a29c)
- fix(litert): fix engine variable scoping in initializeWithFallback (2da411a)
- fix(litert): fix tool call parsing, pass sampler config, unify init timeout (4bbf042)
- fix(chat): scroll to last message when keyboard opens (fde2aba)
- fix: resolve lint and type errors blocking push (cad3920)
- fix(litert): fix read_url colon-arg parsing, track context fill, and extend reload detection to context length (5b0169c)
- fix(litert): tool call parsing, regeneration, and context stability (6b8703c)
- fix(litert): production fixes - stopGeneration, multi-turn tracking, memory budget, BenchmarkInfo wiring (a8aa88b)
- fix(android): add BenchmarkInfo stats, getMemoryInfo, and sampler params to LiteRTModule (dcf40c8)
Refactors
- refactor(tests): consolidate test duplication and update litert bundle ID (ac0100c)
- refactor(generation): extract runLiteRTResponseImpl and use named handler objects (f51fbab)
Chores
- chore: bump version to 0.0.95 [skip ci] (b3ccf77)
- chore:delete unwanted files nd comments (deb6b1f)
- chore(android): increase JVM Metaspace limit to 1024m for LiteRT compile overhead (ecd3bf6)
- chore(android): align build config with main, migrate kapt to KSP, add LiteRT (642146f)
- chore(litert): remove debug logging from compaction and token tracking (0f84cee)
- chore(debug): strip debug store writes and remove debug logs panel (1a9148d)
- chore(ui): remove ContextRing from chat input (6fdfcc7)
- chore: remove DebugLiteRTScreen, DeviceStatsChip, and LiteRT debug button (7b2a790)
Tests
- test: push branch coverage to 80% with tests for recent changes (8e2850a)
- test(debug): update tests after debug store removal (70f25d0)
- test(coverage): add unit tests for liteRTCompaction and proPrompt (57c1b12)
- test: fix TypeScript discriminated-union errors in test fixtures (2909ec8)
- test: fix stale assertions across unit and RNTL tests (c0d9103)
- test(factories): default engine to 'llama' in createDownloadedModel (e5ffeb2)
- test: add LiteRT service tests and improve existing coverage (d560373)
Other
- fix sonar errors (1715831)
- fix test (e9ec787)
- fix test (1a80c41)
- fix lint (ff16147)
- add one more test (3dca3df)
- fix tests (5ed5743)
- perf(chat): fix ChatsListScreen re-renders and add OpenCL warning banner (78ad252)
- perf: remove high-frequency debug logs from hot paths (bc4204d)
- test: disable React Compiler for Jest (5ffdd19)
- for new users allow set 3 tools as default (7b5316a)
- style(litert): drop glow shadow and right stripe from recommended card (91884ce)
- fix tests (789adec)
- Add multi-image support to LiteRT direct and tool-based generation paths, update the JS and Android native LiteRT bridges to forward all image attachments instead of only the first image, and expand LiteRT generation tests to cover multi-image forwarding behavior (2b513de)
- temp care for lint (561d699)
- delete debug files (4523225)
Full Changelog: v0.0.94...v0.0.95
Off Grid v0.0.94
What's Changed
- chore: bump version to 0.0.94 [skip ci] (2f38389)
- fix(pro): fix iOS layout of Pro detail banner and MCP card (d40373f)
- fix lint (1146253)
- chore(pro): remove dead footer styles and fix feature grid layout (dfee07e)
- feat(pro): add crown icon to home screen header and settings nav (a21887a)
- feat(pro): redesign Pro detail screen and settings banner (c637a2c)
- fix(lan-discovery): restore IPv6 fallback subnet scan broken in 56790cf (00def5a)
- test: add coverage for Wednesday URL in OnboardingScreen (61debb8)
- fix(ios): prevent main-thread hang in download progress polling (93399bf)
- throttle ios events change freq from 0.5 s to 1.5s (7ee3b91)
- fix: address review comments - move URL and features to constants, fix duplicate import (9a65396)
- fix: revert stray imageUseOpenCL default back to true (200b395)
- feat(pro): set hasRegisteredPro on CTA tap, add UTM params to PRO URL (8b725e7)
- fix: decouple pro prompt from share prompt gate, fix duplicate animation index (64a195e)
- chore: remove unused babel-plugin-transform-inline-environment-variables (db22a63)
- test (57b8def)
- fix lint and tests (03e5e05)
- remove debug buttons and 10 dollar pro (4cba206)
- feat(pro): simplify PRO flow to website redirect, fix aha trigger logic (0fb8899)
- feat(pro): add PRO pre-order flow, about screen, and debug state tooling (719bc9b)
- change email address to support@offgridmobile.co from work@wednesday.is (e6a1a56)
- fix(ios): cancel stale native row before retrying image zip download (41f116d)
- git commit -m "fix(android): add Log.w in interrupted join catch to address review feedback" (e1554fb)
- fix ts (a2b6dfc)
- reduce duplication (d3056c2)
- sonar fixes (b3e38d8)
- add tests (3baedc2)
- fix ts error (ae1cad0)
- add tests and reduce (aa9ca8e)
- address sonar issues (dd3df74)
- reduce lines (67fb329)
- fix(ios): address Gemini review comments and fix multifile image re-hydration bug (7d34c28)
- fix lint (9dac0d7)
- fix(ios): add retry button for failed downloads on iOS (81bee0d)
- fix(android): join whisper threads before freeContext to prevent SIGSEGV (b41dc0e)
- fix(ios): address Gemini review -thread-safe downloadId, consistent modelType default, add createdAt (a786187)
- chore(ios): bump llama-rn from rc.5 to rc.9 (1c75718)
- fix(ios): align native download contract and fix downloadId mapping (91d7911)
- chore(readme): add UTM params to Wednesday CTAs for traffic attribution (8ac14cf)
- fix(readme): show Wednesday logo in light mode via picture tag (37f8776)
- Update README.md (f6355d3)
- Update README.md (6b44f2b)
- docs(readme): [OPTIONAL] add 100% money-back stat + reword 10x claim (ce33bc7)
- docs(readme): trim Wednesday section copy and update CTA (9a37fc4)
- fix(readme): add white background to Wednesday SVGs for dark mode (aad0f4f)
- docs: add Wednesday Solutions section to README (a441da4)
- fix(android): prevent NullPointerException crash in react-native-zip-archive (869ddd9)
- fix(patch): prevent NullPointerException crash in react-native-zip-archive (7a19c40)
- fix whisper size verification (aeebff7)
- Fix gradle wrapper + add Fastlane metadata for F-Droid/IzzyOnDroid (1efbb68)
- test: update image model loader assertions for auto backend (995a99a)
- fix(image-model): correct backend detection and loading for NPU models (90f9711)
- fix ts (92a3ef0)
- test: fix mock resets and add coverage for image download resume paths (c23714e)
- fix test (ee6e035)
- fix tests (ddcba69)
- fix(android): harden image model download recovery after restart (773fa7b)
- Refine Pro section: typographic header, remove payment-link mention (aadcffd)
- fix lint ,(disable temp for this file) (86a6308)
- add some tests (8a395d7)
- fix: correct mmproj retry finalization and persist already-downloaded models (394453e)
- fix: catch mmproj completed before onComplete listener registered (b9926a3)
- fix: resolve vision model download failures on network-drop + retry (8a51269)
- Add Founding Supporter banner + Coming in Pro section (71c1769)
- add some tests (e5a5317)
- fix vision and mmproj downlaod (478efa4)
- fix test //ps (0bd5071)
- fix(models): resume restored image downloads that enter processing after relaunch (bbf905a)
- feat(chats): open model selector from disabled New button when models are available (66a4bc4)
- on network failure dont remove progress from models screen (5c4f7bf)
- add some more tests (fee2106)
- fix erores (2496775)
- add testsimprove vision repair (52ba7bd)
- fix lint (f09b2cb)
- test: add coverage for size-mismatch filter in model downloads (028b6b7)
- temp (506754e)
- filter paritla files here as well (604608d)
- fix sonar errors (736efe7)
- fix(model-recovery): filter suspicious recovered text models during scan (5cd30ec)
- add filter for corrupted recovered fiels in downlaod mangaer ui as awell and (b493e01)
- fix sonar errors (d6e47fd)
- fix tests (6202199)
- fix(downloads): resolve image download vanish bugs and lint errors (ffd05c1)
- fix(image-downloads): restore interrupted finalizations on restart and fix lifecycle gaps (cd68f0f)
- disable htp in chat generation settings for users with npu backend (406875c)
- feat(android-downloads): replace auto-retry with manual resume on failure (038c806)
- fix test (6c1ba5a)
- perf(android-downloads): remove hot-path progress DB reads and raise update interval to 1500ms (bdd1002)
- fix test (20e7d8b)
- improve repairing model ui (9423c59)
- • fix(downloads): narrow mmproj hydration filtering to explicit linkage and mmproj names (504e33c)
- fix(downloads): harden recovery and hide orphaned mmproj repair rows on restart (6c260ec)
- fix(downloads): harden startup hydration and restore recovery (0239617)
- • fix(ios): align download manager downloadId contract with JS string IDs (3f6bcae)
- fix download progress on app kill and start (a8c6e70)
- docs: remove stale lastProgressAt and stuck detection from architecture doc (886fe27)
- fix(sonar): fix Promise-in-boolean and remove non-null assertion (dfb1a48)
- fix(sonar): reduce cognitive complexity and address remaining warnings (d996854)
- fix(sonar): address code quality warnings on PR 322 (c3e49d1)
- fix ts errors (372bc42)
- fix lints (20f07a5)
- reduce file lines (5469ed7)
- adress gemini comments and sonar errors (c1c23b4)
- fix test (1d63bad)
- fixts errors (7e26095)
- fix lints (550ee70)
- test(downloads): update tests for single-source-of-truth download architecture (ec7c0a8)
- refactor(downloads): finish image migration - phase 3+4+5 (0051d31)
- refactor(downloads): image-side phase 1+2 - UI reads via store, dead code deleted (b858153)
- feat(downloads): finish migration — durable retry states, strict add, mmproj-tolerant flow (e2ed2e6)
- fix(downloads): hydration preserves in-flight progress instead of overwriting (5204554)
- feat(downloads): stuck detection + restart button + better vision-repair signals (e17298d)
- fix(downloads): vision-icon visibility + completion cleanup + hydration (d995d0a)
- temp (958d055)
- upgrade packages (8227f3a)
- • fix(android): guard OpenCL llama init and upgrade llama.rn to rc.9 (3441f25)
- fix tests (d70e485)
- fix(downloads): include downloadId in progress updates and restore functions (617d6fb)
- fix(downloads): exclude failed entries from active download count, preserve downloadId on failure (9273743)
- dont count comple or failed downloads as active (d24c6c5)
- fix(downloads): remove refresh, guard concurrent limit, fix mmproj file collision, persist failed state, improve quant matching (39f2fd0)
- fix: address gemini review — add download handler tests, remove log file (8bad738)
- fix(android): remove unnecessary notification permission request (13e6369)
- fix test (101b4f0)
- fix test (c828ca4)
- fix: sync cpuThreads label fallback with slider value (e2622e9)
- fix(android): patch react-native-zip-archive 7.1.0 switch on double compile error (f401199)
- fix(threads): remove runaway nThreads migration and show resolved Auto count (366b61e)
- address gemini comments (fb03d18)
- fix(android): delete orphaned foreground service test; bump zip-archive to 7.1.0 (9d9e8f7)
- fix(android): remove DownloadForegroundService to eliminate foreground service crashes (bbe867c)
- fix(whisper): migrate model download to WorkManager via backgroundDownloadService (9c0e7f4)
Full Changelog: v0.0.89...v0.0.94
Off Grid v0.0.89
What's Changed in v0.0.89
Chores
- chore: bump version to 0.0.89 [skip ci] (1fdda0b)
Other
- fix: restrict DownloadRetrying event listener to Android only (f28d9af)
Full Changelog: v0.0.88...v0.0.89
Off Grid v0.0.88
What's Changed in v0.0.88
Features
- feat(website): add essay 'It's Not About Productivity. It's About the 35 Tabs.' (b240c6f)
- feat(website): add Vision page under Mission accordion (b39cce5)
- feat(website): rewrite mission page as manifesto — revolutionary framing (85c5169)
- feat(website): content audit pass — remove company/country names, add mission page and 3 new VA essays (0fd3515)
- feat(website): cross-link early access and Perspectives essays (8b513c1)
- feat(website): add plan preference text links to early access form (57a3427)
- feat(website): cleaner early access form - pricing caption + text platform links (57f52be)
- feat(website): add explicit pricing and plan preference to early access (ca40fda)
- feat(website): make reactions a fixed floating pill bottom-right (250e434)
- feat(website): rewrite early access as conversion-focused waitlist (3cf635c)
- feat(website): move reactions to top-right of content area (dad28f6)
- feat(website): add early access page styles (285e4b6)
- feat(website): toggle sidebar accordion closed on click when open (ccec65a)
- feat(website): show reactions on all pages, not just Perspectives (5afd49a)
- feat(website): add essay reactions, rewrite all essays to brand voice (19718b3)
- feat(website): full guide expansion with accurate model and feature data (9de3ac1)
- feat(website): add cover image as hero and OpenGraph image (f7c2754)
- feat(website): add logo, App Store/Play Store/Slack icons to buttons (55ebfa5)
- feat(website): add Jekyll docs site with SEO-optimised guides and GH Pages deploy (5c50bb8)
- feat(android): add production-grade download safeguards (0f0d7be)
- feat: show 'Needs repair' badge for vision models with broken mmproj link (57abb3d)
- feat(android): add explicit inference backend selector (CPU/OpenCL/HTP/Metal) (d7bae0e)
- feat(android): enable Hexagon HTP/NPU acceleration for text LLMs (f1c30cb)
- feat(android): migrate download layer to Room + WorkManager, fix security issues (781398f)
- feat(android): switch model downloads to WorkManager + OkHttp (bdd8d5b)
- feat: allow image generation without a text model (54c5856)
- feat: add API key support for remote servers (c5c706c)
Bug Fixes
- fix: cancel from Models screen now dismisses foreground notification (c91be26)
- fix(android): address SonarCloud reliability issues in download worker (92dc134)
- fix: repair concurrent download lifecycle and stale-progress bugs (a0f78da)
- fix(website): restore separate button for accordion, fix a11y and hit area (2ebb268)
- fix(website): use chevron span inside link for reliable accordion UX (6bf4d9e)
- fix(website): fix accordion chevron alignment in sidebar (2c7f999)
- fix(website): separate accordion toggle from nav link for Ethos (b23a9a7)
- fix(website): allow navigation to accordion parent pages on second click (8872991)
- fix(website): resolve subscription contradiction + vision/current-state framing (a69b843)
- fix(website): content audit fixes across guides and essays (84a50c0)
- fix(website): expose openSearch on window to fix ReferenceError in mobile script (a55604e)
- fix(website): place App Store and Google Play buttons side by side (db96470)
- fix(website): always preventDefault on accordion nav items to fix toggle (6594b5a)
- fix(website): deep brand voice pass - remove all remaining violations (e341b24)
- fix(website): fix Google Play icon, remove all em dashes, brand voice ethos (4149900)
- fix(website): correct Google Play SVG icon and widen newsletter input (56de6f3)
- fix(website): use Inter font for visual consistency across all sizes (958ec9e)
- fix(website): theme toggle position - sidebar-logo needs display:flex (2c6248f)
- fix(website): App Store button text invisible due to .content a specificity override (e661535)
- fix(website): replace broken Apple SVG (814x1000 viewBox) with correct 24x24 path (401eb6e)
- fix(website): address Gemini review comments (539c1c9)
- fix(ios): debounce document picker entry points (e74a436)
- fix(android): address remaining SonarCloud issues (6252bfc)
- fix(android): re-enqueue downloads stuck in PAUSED_WAITING_TO_RETRY with fresh URLs (dbee6ec)
- fix(tests): align defaults and assertions with 4096 context and shortened tool descriptions (45a87af)
- fix(llm): respect RAM-based GPU layer caps for HTP and OpenCL backends (2ee9746)
- fix(android): revert windowSoftInputMode to adjustResize (461be1c)
- fix: restore flash attention for Android CPU — only disable for OpenCL/HTP backends (2911054)
- fix(android): set windowSoftInputMode to adjustNothing (da005f5)
- fix(android): remove f16 KV cache forcing for HTP (8b3c076)
- fix(android): respect GPU settings for HTP and update UI labels (107a37e)
- fix(android): increase HTP init timeout from 8s to 30s (ff95e75)
- fix(ci): gracefully skip local Sonar scan when automatic analysis is enabled (c70a375)
- fix: allow viewing old chats without an active model (fixes #201) (2969a0a)
- fix(android): extract progress reporting to reduce streamToFile cognitive complexity (SonarCloud) (6ad49bc)
- fix(android): handle WorkManager retry state and surface reconnecting status in UI (3fc4e8b)
- fix(android): correctly handle WorkManager retry — show reconnecting state instead of false error (d13630d)
- fix(android): resolve compilation conflicts and SonarCloud reliability issue (5e9b2f1)
- fix(android): reduce doWork cognitive complexity from 39 to ~12 (SonarCloud) (911c66f)
- fix(android): resolve compilation conflicts and SonarCloud reliability issue (a3d4d0f)
- fix(android): address Gemini and SonarCloud findings in download layer (bd64b7f)
- fix: address Gemini code review on remote server API key form (fcebdd3)
Refactors
- refactor(threads): use 0 as sentinel for auto thread count instead of matching default 4 (7d1070d)
- refactor: replace InferenceBackend string literals with INFERENCE_BACKENDS constants (e2dbb3e)
Chores
- chore: bump version to 0.0.88 [skip ci] (61771d8)
- chore(website): eliminate prose dashes across all 13 essay files (af8dcd8)
- chore(website): eliminate dashes by restructuring sentences throughout new content (f2d6e68)
- chore(website): replace -- with - across all new content (45ecadd)
- chore(website): restructure accordion — Ethos as parent, Vision + Mission as children (432a836)
- chore(website): group Mission + Ethos under one sidebar accordion (18ede02)
- chore(website): update Slack invite link sitewide (70f8a80)
- chore(website): reorder sidebar nav - ethos, early access, guides, perspectives (d078988)
- chore(website): set custom domain to docs.offgridmobileai.co (1760528)
Tests
- test: update GPU tests for inferenceBackend architecture (e12b631)
- test(android): add unit tests for Hexagon HTP NPU activation (f7bd711)
- test(android): replace legacy download tests with WorkManager-layer tests (cedcedc)
Documentation
- docs: update CLAUDE.md em dash rule to use single hyphen (e91a7c2)
- docs(website): enforce brand voice compliance across new content (d6a39da)
- docs(website): rewrite 'A Day With a Personal AI OS' essay (9b84102)
- docs: add brand tone and voice guidelines (258f911)
- docs(website): add final 2 context-gap essays and complete index (962a4f4)
- docs(website): complete Perspectives section - 19 essays across all 5 tiers (a8fa93f)
- docs(website): add Perspectives section with 5 thought leadership essays (3282923)
- docs(website): add ethos page with Off Grid vision and manifesto (23ed637)
- docs(website): guides index page with categorised card grid (27b051a)
- docs(website): dark/light mode, system font, logo in heading, button polish (d48dd46)
- docs(website): add UTM params to sidebar GitHub link (862baa2)
- docs(website): add newsletter email capture, favicons, brand tone fixes, and expanded guides (c97f4fb)
Other
- flag phi is not supported yet (e109c56)
- put htp in beta now (82e898d)
- add back button in download manager (22f1e32)
- fix test (d800bfc)
- fix sonar comment (8481f64)
- remove logs fix lint and tests (61419ce)
- fix this isue (ad5eb57)
- adress sonar commens reduce complexity and duplication (d46dd47)
- fix model settings ui cpu threads used to show 0 (8c69fc9)
- fix tests (5a09019)
- remove DownloadLogs navigation button (c4f13fd)
- fix tests (95cc1f5)
- fix(downloads): improve retry handling and error messaging (d685644)
- improve remote server ui (8556f0c)
- fix hcl support for npu based devices force kv cache f14 for precision (5e4d2d3)
- fix test (7c86163)
- addres gemini comments (4a6747d)
- fix lint and improve remote server ui (f097a16)
- show mic icon instead of send button when nothing is typed (99816ef)
- placeholder text Load a model when in read mode only insteadof loading model ... (e1de57f)
- Fix image download cancellation and progress sync between Models and Download Manager (9358198)
- fix: Correct download progress desync on 5xx errors & add manual cancel (bf3952c)
- fix test (64d4320)
- fix test (111eb7f)
- Enhance remote server connection handling with API key support and improved URL formatting (e0a2549)
- add stale tests (de72723)
- fix test cases (0dd4d5c)
- reduce duplicaion in the test codee (3056934)
- chore(android): improve download layer architecture and planning (ca2eb54)
- Make tool calls heuristic based rather then pass on every msg to improve ttft (b9d0b2e)
- add test cases for pickerutil (1bd7c54)
- address gemini comments make common util for picker add debouncer to chat attachment as well (3b83473)
- perf(tools): skip text hint when model supports native Jinja tool calling (c307362)
- perf(tools): trim tool schema descriptions to reduce prompt token overhead (257a990)
- perf: raise default context to 4096 — eliminates double model init on load (2cb2190)
- perf: upgrade llama.rn params and dynamic thread scaling for faster inference (b1480b1)
- git commit -m "fix(android): resolve SonarCloud...
Off Grid v0.0.87
What's Changed in v0.0.87
Bug Fixes
- fix(chat): project selection doesn't stick on new conversations (d0d24bc)
- fix(android): restore keepLocalCopy for knowledge base document picker (e37fdd7)
- fix(android): throw on keepLocalCopy failure instead of falling through (7b88300)
- fix(android): extract resolvePickedFileUri to fix Sonar duplication and add tests (a0fb0b1)
- fix(chat): address Gemini review comments on pendingProjectId (aff7fc2)
Other
- make projects sticky across chat (0faddc8)
Full Changelog: v0.0.86...v0.0.87
Off Grid v0.0.86
What's Changed in v0.0.86
Bug Fixes
- fix: use best-fit scoring for trending models on onboarding screen (#242)
Features
- feat: add SmolVLM2 500M and SmolLM2 360M for ≤6GB devices (#243)
Chores
- chore: bump version to 0.0.86 [skip ci]
Full Changelog: v0.0.85...v0.0.86
Off Grid v0.0.85
What's Changed in v0.0.85
Bug Fixes
- fix: new chats no longer show the previous conversation's messages — opening New Chat now always starts a clean session
Full Changelog: v0.0.84...v0.0.85
Off Grid v0.0.84
What's Changed in v0.0.84
Features
- feat: defer conversation creation until first message is sent (9e0ea40)
- feat: add 'For You' sort — device-aware speed+quality balance (a342a7e)
- feat: add cancel and success tick to onboarding download screen (8798145)
- feat: replace trending slider with trending badge on model cards (4f5c888)
- feat: replace sort pill text with icons to save search bar space (9ac891e)
- feat: sort pill always visible, debounced search, smart model ordering (6831fdd)
- feat: add trending section and hardware-aware recommended sort (b23b917)
Bug Fixes
- fix: mmproj metadata filename, incompatible link detection, and test mocks (44757d9)
- fix: remove remaining eager conversation creation on model load; update tests (b9881b0)
- fix: remove unused createConversation import from useHomeScreen (f88b7dd)
- fix: improve vision not-supported alert with repair shortcut in chat input (e6cdf71)
- fix: reload model with mmproj when path becomes available; clear on failure (0236f8e)
- fix: run linkOrphanMmProj on app startup to recover missing mmproj links (8c147e0)
- fix: vision repair — fix mmproj naming, orphan linking, and incompatible detection (15f37d2)
- fix: prefix mmproj filename with model base name to prevent collision (bd56eee)
- fix: unify needsVisionRepair check and hide eye icon when mmproj linked (632a7e9)
- fix: auto-open model detail when navigating to ModelsTab for repair (e9480fb)
- fix: correct navigation from Chat to ModelsTab via root stack (8815fe6)
- fix: always show vision repair button for downloaded vision files; use DownloadManager for repair (84ab49f)
- fix: correct Gemma 4 E2B type to vision — ships mmproj files same as E4B (b442bc7)
- fix: show trending badge and downloaded state correctly on onboarding model screen (55e777c)
- fix: correct Qwen 3.5 0.8B type to vision — repo ships mmproj files (fc2ec39)
- fix: replace regex match with indexOf in extractChannelThinking to resolve SonarCloud hotspots (503e256)
- fix: extract Gemma 4 and Qwen thinking before stripping control tokens (8f62edc)
- fix: resolve SonarCloud hotspots — negated condition and unnecessary assertion (d52b308)
- fix: resolve TS spread errors and lint unused var in coverage tests (1499569)
- fix: remove unused setSortOption prop from TextFiltersSection (8cdc216)
- fix: extract runSearch to prevent filter chips collapsing on auto-search (b0ad76e)
- fix: resolve all lint errors — complexity, line counts, unused imports (fd7bd12)
- fix: use theme color token for trending badge instead of hardcoded hex (186cefc)
- fix: sort on left, filter on right in search row (2bbc681)
- fix: move fire icon after verified badge (last tag) (ac9f54b)
- fix: replace trending text badge with fire icon (whatshot) (04ae8ef)
- fix: use bestFitScore for trending family selection (c5bd6e6)
- fix: actually cancel background download when user cancels early (ccb8ac9)
- fix: stop progress callbacks firing after cancel in onboarding download screen (d92e243)
- fix: show trending badge on best-fit model per family only (f6ae053)
- fix: cancel always clears download UI regardless of downloadId timing (ab06bb8)
- fix: smart sort respects curated order instead of device best-fit (a6913bf)
- fix: sort recommended models by minRam and drop tiny SmolVLMs from tests (d84257d)
- fix: only show models with Q4_K_M in onboarding download screen (5cbe4c4)
- fix: select only Q4_K_M variant in onboarding download screen (9c8a2d7)
- fix: update search placeholder to clarify Hugging Face source (fb39c9e)
Performance
- perf: throttle download progress updates to max once per 500ms (15f6834)
Refactors
- refactor: reduce chatStore line count to satisfy max-lines lint rules (20737f6)
Chores
- chore: bump version to 0.0.84 [skip ci] (2786f72)
- chore: fetch tags before computing last tag in release script (60caaf4)
- chore: update Podfile.lock (c2e829b)
- chore: bump ESLint complexity limit to 20 (4d7ec64)
- chore: increase ESLint max-lines to 500 and max-lines-per-function to 350 (445af29)
- chore: update Hexagon HTP libs, patch device-info to 15.0.1, add trending selection tests (5d714e5)
- chore: put Gemma 4 first, then Qwen 3.5 in recommended models list (a6add9c)
- chore: suppress pre-existing react-hooks/exhaustive-deps warnings in changed files (2526792)
- chore: clean up recommended models list (415e697)
Tests
- test: update useChatModelActions test — no conversation created on model load (222246c)
- test: update startNewChat assertions for lazy conversation creation (179e66f)
- test: add linkOrphanMmProj to modelManager mock in HomeScreen tests (46f690d)
- test: fix stale repairMmProj test — update to startDownload API (3f26290)
- test: add coverage for uncovered handlers in ModelDownloadScreen and useTextModels (a03d421)
- test: fix misleading Qwen trending selection test name (d4e01af)
- test: update ModelsScreen tests for search-on-type behaviour (ff0d79f)
Documentation
- docs: merge persona plans, wire Audio Mode into persona voice settings (f6f0a69)
- docs: update TTS plan — Audio Mode vs Chat Mode as first-class setting (9f6ffd8)
- docs: add detailed personas implementation plan — data model, screens, skills, phases (e95f660)
- docs: add detailed TTS implementation plan (081682c)
- docs: add personas feature plan — screens, UX, data model, implementation order (8b93c46)
- docs: plan for image generation without requiring a text model (0f529bf)
- docs: add hardware acceleration performance improvement plan (8bc147e)
- docs: expand push workflow — lint/tsc/test, branch check, PR description refresh (59d24d0)
- docs: add design standards section to CLAUDE.md (736b117)
- docs: add CLAUDE.md with branch policy and project instructions (852a078)
Full Changelog: v0.0.83...v0.0.84