CubicLM v1.10.1
Changelog
All notable changes to CubicLM are documented here. This is the single source of truth per docs/multiplatfrom.md §5.5.3 — Desktop and Android About → What's New links open this file's rendered route (or its GitHub URL), they do not keep separate copies.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[1.10.1+17] - 2026-09-08
Fixed
- Model Load instant-close — corrupt/truncated GGUF files aborted the native loader with no catch possible; Dart now validates the GGUF header (magic/version/tensors/size) before the FFI boundary and shows a re-download prompt instead of dying.
- RAM hard-block — loading when free RAM < file + KV cache + 1GB headroom silently crashed; now blocked outright with the exact shortfall. Pre-native evidence log added so any future abort is debuggable.
- Log .txt export on MIUI — share-sheet failure fell into "Export failed"; now falls back to app-files copy + clipboard with the saved path.
[1.10.0+16] - 2026-09-08
Added
- New cloud providers — AgentRouter (non-profit OpenAI gateway), OrcaRouter (cost-price gateway,
sk-orca-keys,vendor/modelIDs +orcarouter/auto), APInex (one-key gateway across 7 vendors). 23 providers total. - Verify-before-save keys — key dialog checks the live endpoint first (nothing saved), shows Verified — N models found, then unlocks Save; editing invalidates; clear (X) + paste moved above the field.
- Honest model probes — connection-fast testing (first chunk = online, 15s window), one retry for transient 429/5xx, 250ms stagger, fail-closed key lookup.
- Slide Maker chart layout — bar/donut/line charts (Flutter CustomPainter in-app, CSS/SVG in HTML, visual bars in PPTX); AI refine per slide, one-click restyle, audience targeting, thumbnail strip, duplicate slide, 20-slide max.
- CubicWeb Builder IDE split — wide screens show chat (left) + live preview/files (right) side by side with pane headers; narrow keeps tabs.
Fixed
- Ghost-key bug — unlisted provider IDs borrowed the OpenAI key and showed as configured; unknown IDs now fail closed in UI + send path.
- Provider ordering — Custom always top, keyed (pinned → time/name) above, keyless in a separate Add-Key section, switcher shows keyed only; removed dead auto-detected vendor cards.
- Zero-quota + wrong-key messages — quota-0 and non-
AIzaGemini keys now explain themselves. - Slide HTML export — comparison/timeline lists render; free-layout notes included; touch/swipe navigation on mobile.
- Image save on Windows — gallery plugin is Android/iOS only; desktop now saves via native file dialog.
- Edit dialog data loss — comparison columns + chart data preserved and editable.
[1.9.0+15] - 2026-09-07
Added
- CubicWeb Builder full flow - plan mode, checkpoint/undo history, syntax-highlighted editor, diff view, responsive viewports, screenshot-to-code, keyboard shortcuts, 6 project templates, split pane (landscape), deploy to Vercel/Netlify, share link, GitHub export, component library, extended-thinking + web-search toggles, browser auto-test with auto-fix.
- Live streaming build - files appear in the Files tab as the AI writes (writing badges, live highlighted editor, auto-open); static preview reloads live v0-style with progress pill; cancel rolls back to checkpoint.
- Real local runtime layer - project detector (static/Vite/Next/Node), source validator, dev-server manager (npm install, free-port pick, URL parse, health check, crash watcher, restart), real shell terminal with history/autocomplete/stdin attach.
- Terminal CLI manager - install catalog (Claude Code, OpenCode, Cline, Kilo — verified packages), one-tap npm installs, Open/Verify/Update/Repair/Uninstall, persistent registry, ANSI-safe log, storage + cache tools.
- CubicWeb System Logs - structured runtime/platform diagnostics (CW-* codes, evidence classifier, dedup, traces, redaction, persistence), diagnostics screen with filters/details/actions, AI no-rewrite guards.
- Next.js pipeline - atomic writes, byte-for-byte integrity gates, framework adapters,
npm run buildvalidation, load-failure forwarding, external-browser button. - Cloud model tools - Import from /models (new-count report), Test all models (online/failed dots + latency), auto-hide failed, auto-sync interval (configurable 6h–weekly) with sync row.
- Agent IDE chat tab + model switcher - conversation transcript with the builder AI; model/provider switch from the AppBar.
- Preview reload + live build status - reload button + URL bar; preview shows live progress (streaming/files) until output is ready.
- Browser-run prompt rules - Vue/React require import maps + esm.sh (kills the bare-specifier TypeError); plain-JS rule bans silent TS failures.
- Web TTS / downloads / notifications / Model Hub guard - read-aloud in browsers, real file downloads, background-done ping, model-download guard with Cloud pointer.
- Explore Toolkit tab - Model Hub + Toolkit; Battle Arena, Slide Maker and CubicWeb Builder as widget cards.
- Slide viewer modes + freehand layout + manual photos - Docs/Slides/PDF switcher, drag/resize boxes, gallery/camera per slide.
- F-Droid fastlane metadata - store submission title/descriptions/changelog/icon.
Fixed
- Header cleanup - project identity lives in the AppBar (name + framework/files, History + Auto-fix + New actions); duplicate below-header cards removed; composer options identical pre/post build.
- Template grid overflow - template picker scrolls on short screens.
- RadioListTile / Focus onKey deprecations - migrated to RadioGroup + onKeyEvent; const/lint pass clean.
- Chat menu + SizeTransition - menu always visible with graceful disables; SDK-spanning deprecation silence (CI green).
- Static 404 wording - neutral file-not-found; routing specifics live in the preview diagnosis card.
Performance
- Streaming throttles - partial parse ~2/sec, live disk write 1.5s, preview reload only on change; capped buffers and file sizes throughout.
Fixed
- Runtime hardening - npx version probe, live "which runtimes are running" registry (dev servers + CLI sessions), Case-A regression pins (framework kinds never route static), template grid scrolls on short screens.
[1.8.1+14] - 2026-09-05
Fixed
- Chat ⋮ menu always visible - was hidden entirely with no open chat, so Battle Arena (and everything else) was unreachable from the empty state; session items now disable gracefully instead.
[1.8.0+13] - 2026-09-05
Added
- Battle Arena - chat ⋮ menu → race up to 4 cloud models (same/different providers) on one prompt with live monitor (finish order, tok/s, length) and weighted overall verdict (40/30/30); One-by-one mode runs contenders serially in pick order and allows the loaded on-device model; v2 adds metric bars + TTFT, provider + FREE filters, full markdown responses with code preview, per-response TTS + .md export.
- F-Droid flavor -
fdroidbuild flavor (com.cubiclm.app.fdroidsuffix); Crashlytics inert withoutgoogle-services.json. - Staged rollout - backend-free buckets (10/25/50/100% over 7 days); manual checks bypass; rollout state on Update page.
- Opt-in local stats - device-only counters (messages/images/loads/cloud calls) with viewer + reset; off by default.
- Web build fixed - stub parity (shared SocFamily, engine + download stubs);
flutter build webgreen. - Windows installer script - Inno Setup
windows/installer/cubiclm.iss(unsigned; signing documented).
Fixed
- versionCode downgrade trap - v1.6.0 shipped code 2011 vs small pubspec numbers, which Android rejects as a downgrade;
build.gradle.ktsnow adds a +100000 base (verified 100012+) and the release checklist mandates aapt verification.
[1.7.0+12] - 2026-09-05
Added
- Windows toast notifications - background-done ping via WinRT (
win_toastfacade + web stub). - Desktop pause-draft - window blur snapshots streaming replies (kill-recovery parity with Android).
- Parity verification doc -
docs/TASK_VERIFICATION_ANDROID_TO_WIN.md(APK + bundle teardown, checklist, corrections). - Update center - App info → View Update status page (icon, status, version, highlights, check/install, ⋮ menu with Update Settings / What's New / More → Feedback & Privacy Policy).
- Update settings - auto-download master, Wi-Fi-only, mobile-data, scheduled hours with on/off time pickers, auto-install, auto-check; enforced via connectivity_plus + time window.
- Device specification card - Nodes → Config shows Device (brand+model), OS version, CPU cores/ABI, RAM with free-space bar, display size, plus one-tap refresh.
[1.6.0+11] - 2026-09-05
Added
- Offline outbox - network failures queue text/file prompts (FIFO, cap 20, per-chat); auto-send on next send/open with 2-min backoff.
- Pause-draft kill recovery - backgrounding mid-answer snapshots the partial reply; superseded drafts are dropped on completion/stop.
- Launcher shortcut - long-press app icon → New chat (Android static shortcut).
- Undo delete chat - 5s UNDO snackbar restores session + messages.
- Whole-chat PDF export - chat menu → Export as PDF (same Bangla-safe raster builder).
- Local sampling controls - Top-P / Top-K / repeat-penalty sliders (Nodes → Config); plumbed through GGUF + LiteRT (cloud keeps provider defaults).
- Chat labels/folders - free-form label per chat, drawer chips filter, menu dialog with existing-label shortcuts.
- Per-chat lock - device-auth gate on open (title stays visible); menu toggle.
- Settings-only sync - export/import preferences without secrets (API keys + custom profiles excluded by name + pattern).
- Skill share - preview dialog → Share .md (frontmatter bundle, re-importable via From file).
- Server request viewer - Nodes → Node shows last 10 requests (status/method/path/IP, 2s poll).
- Share-target - Android ACTION_SEND text lands in the composer (manifest + channel + warm/cold hooks).
- Background-done ping - answer finishing while backgrounded fires a notification with preview.
- Cold-start trace -
[boot +Nms]phase lines (critical path, first frame, deferred done) in System Logs. - CI gate - analyze + test on push/PR to main.
- Quant variants schema - catalog
variants[](quant/filename/url/size) parsed + card picker + filename-keyed download resolution (no data seeded yet). - History-budget unit tests - pure trim logic extracted to
lib/utils/history_budget.dart(9 tests).
[1.5.0+10] - 2026-09-05
Added
- Chat context memory guard - history rebuilt from storage with token-budget trim (local ~60% ctx, cloud 48k chars); oversized turns middle-truncated, current + previous turn always kept; UI fallback when storage is empty; per-send
Chat context: N turns…proof line in System Logs. - Prompt templates - 6 built-ins (explain/fix/summarize/ELI12/translate/mail) + custom add/delete, one-tap insert from the composer.
- Multi-select messages - long-press or header toggle → bulk copy/share/delete with a selection bar.
- Per-chat model pin - switcher-sheet toggle remembers the active local/cloud model for one chat (📌 pill), auto-applied on open.
- Side-by-side compare - one-shot challenger (cloud or downloaded local) answers the same prompt; primary setup restored in
finally. - Cloud usage estimates - per-provider in/out tokens + calls (chars/4) in Explore → Online, with reset.
- MCP tool approval - Deny / Allow once / Always-allow gate (fail-closed) + Explore toggle.
- Auto backup - silent JSON every N days (last 3 kept) in App Settings → DATA.
- Lock options - re-lock timeout (immediate/1/5/15 min) + biometric-only mode.
- Hidden chats - stronger hide than archive (out of drawer AND search) with show/hide toggle.
- Local API hardening - 120 POSTs/min/IP rate limit (429), in-memory request ring surfaced in capabilities, honest 400 for
/v1/embeddings. - Claude-style prompt View/Code - every AI answer gets a View ↔ raw toggle; Code mode copies/exports the exact visible text (.md + PDF via share sheet).
- Chat header overflow menu - Find / Export / Select moved into a ⋮ menu with icons (cleaner 360dp header).
Fixed
- HTML preview localStorage crash - preview now loads with
https://localhost/origin + DOM storage enabled (SecurityErrorgone for games with saves/high-scores). - Code-block header overflow - 39px right overflow on narrow screens; buttons go icon-only under 320dp.
- Provider 429 wall - rate-limit errors now show a short remedy bubble (wait/retry ETA, BYOK hint); full JSON stays in System Logs.
- Log spam - 60 per-vendor
Auto-detected providerrows collapsed to one summary line. - Assistant Copy included think tags - copy/export now uses the visible answer text.
[1.4.0+9] - 2026-09-04
Added
- Find in chat - in-conversation search with match counter, prev/next jump, and deep search across older pages.
- Per-chat persona - extra instructions per conversation (empty = global prompt), editable from the chat menu.
- Archive chats - hide from history with a show/hide toggle; survives backup/restore.
- Encrypted backups - optional AES-256-CBC passphrase encryption plus optional image inclusion (was plaintext, imageless).
- Multi-MCP servers - connect several servers at once with per-server tokens, merged tools, and collision-safe routing.
- Image controls - negative prompt, guidance (CFG) slider, and fixed/random seed in Settings.
- Hands-free voice mode - listen → auto-send → speak reply → listen loop with headset toggle.
- Tasks export ADB scripts - planner output becomes a runnable
.shvia share sheet (on-device shell exec is impossible for stock apps). - OTA model catalog -
assets/catalog/models.jsonfetched with validation, cache, and bundled fallback (dart run tool/gen_catalog.dartto regenerate).
Changed
- Updater picks the right APK - ABI-matched split asset instead of first
.apk; install-permission gate with settings deep-link. - Local server secure by default - auto-generated API key enforced on first start (LAN bind kept).
- Mic + STT - runtime microphone permission flow; recognition follows the app language (was hardcoded
en_US). - Streaming performance - memoized markdown stylesheets/builders, chat pagination (100/page with load-more), sidebar search on isolate, image preload, PDF/DOCX/PNG/base64 on workers.
- History hygiene - 500-session cap (unpinned eviction), paused-download TTL, crash-orphan
.partsweep, gallery existence cache. - MCP settings - card is now a multi-server summary linking to Explore manager.
- Deps - removed dead
flutter_inappwebview(+ orphan WebGPU asset),speech_to_text7.4 migration. - Windows build - vendored
speech_to_text_windowsfix (upstream registration bug). - Desktop parity - App Lock screenshot blackout (
FLAG_SECURE), real Windows RAM detection, close guard, shortcuts, save dialogs.
Fixed
- Backup restore always invalid (bytes stringified), pin-sort jump, Windows image-attach crash, lock race/enrollment, mic dead button.
- New-chat/revision/branch/export flows made pagination-safe (context from storage, full-history branch, window-edge guards).
[1.3.0+8] - 2026-09-03
Added
- Biometric App Lock -
local_authgate (Android biometrics + Windows Hello) on launch and background-resume, with lock screen, enrollment detection, and device-PIN fallback. - Chat backup & restore - export every session/message to JSON (Android share sheet, Windows save dialog), validated merge-import, plus session pinning (pinned chats float to top).
- In-app APK update - GitHub Releases check with download progress and one-tap install on Android; Windows links out to the desktop build.
- Save models to Downloads - Model Hub can save GGUF/LiteRT files to the system Downloads folder (Android DownloadManager bridge, desktop stream-then-move with auto-rename).
- Desktop shortcuts & close guard -
Ctrl+Nnew chat,Ctrl+Fhistory search,Ctrl+,settings,Ctrl+1..4tabs; window close confirms while generating/downloading. - Read-aloud (TTS) - per-bubble text-to-speech with App Settings toggle, locale-matched voices.
- Gallery history - SD1.5 generations persist (capped at 200, oldest evicted with files).
- 3-page onboarding - private/cloud/model setup flow with recommended-model deep link to Explore.
- Full i18n - 243 keys x 15 languages, 100% coverage with instant switch.
- Log viewer + notification history + web-fetch source pills - in-app diagnostics, past notifications, URL-augmented answers with Sources chips.
Changed
- Streaming performance - chat list no longer rebuilds per token (scoped
Obx+RepaintBoundary), token flush40msto150ms,cacheWidththumbnails, one-time base64 decode in composer. - Boot recovery -
BootReceiverno longer launches the UI (blocked since Android 10); resumes interrupted model downloads via the foreground service only. - Windows device info - real RAM via
device_info_plus(was fake 4 GB mistuning context sizes); processor label. - Manifest hardening - backup rules wired (
dataExtractionRules), predictive back, per-app language config (15 locales). - Deps - removed dead
firebase_messaging,speech_to_text7.4.0.
Fixed
- Backup restore always reporting invalid - picked bytes were stringified (
"[123, ...]") instead of UTF-8 decoded. - Windows image-attach crash - gallery pick routes through FilePicker (no
image_picker_windowsregistered); camera shows guidance instead ofMissingPluginException. - App Lock first-launch race - gate awaits biometric detection instead of fail-opening; nothing-enrolled honesty in settings.
- Mic dead button - hidden when STT unavailable, snackbar on failed start.
- Windows build (STT plugin) - vendored
speech_to_text_windows1.0.1 underlocal_plugins/fixing upstreampluginClass+ missing public header (fatal C1083/C3861). - Stale channel name -
com.aichat.ai_chat/model_importrenamed tocom.cubiclm.app/model_importon all 4 ends. - New chats jumping above pinned sessions until reload.
[1.2.0+7] - 2026-08-28
Added
- Multi-language support — 15 languages (EN, BN, HI, AR, ZH, ES, FR, JA, KO, PT, DE, TR, ID, RU, UR) with instant-switch Apple-style picker in App Settings. GetX translations, ~70 keys × 15 languages.
- GitHub community infrastructure — issue forms (15 types), PR template, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY, SUPPORT, auto-label workflows, Dependabot, FUNDING.yml, 51 synced labels.
Fixed
- Android build stability — Gradle JVM heap reduced from 8 GB to 3 GB (
-Xmx3072m) to prevent Kotlin daemon incremental cache OOM/corruption on 16 GB machines. Stale caches cleaned.
[1.1.0+6] - 2026-08-28
Added
- Windows Desktop (production) — Signed
cubiclm.exebundle (41.1 MB/16.22 MBzip) ships alongside Android APK. Samelib/codebase, no separate fork.
Fixed
- Windows build —
CMAKE_POLICY_VERSION_MINIMUM 3.5for Firebase C++ SDK (CMake 3.5 compat removed in 4.x),_SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGSforflutter_inappwebview_windows/ MSVC 14.51 STL1011,native_assetsinstall guard (if(EXISTS)), and missing ATL headers (Microsoft.VisualStudio.Component.VC.ATL).
Known Limitations
- Web —
dart:ffi(sd_ffi_bindings.dart) not yet web-compatible;flutter build webfails. Tracked for next release. Android + Windows are the supported targets forv1.1.0.
[1.0.5+5] - 2026-08-28
Added
- Windows Desktop — Flutter Windows shell via
flutter create --platforms=windows+window_manager(400×700min,1280×800default, centered,CubicLMtitle). Single codebase (lib/) ships to Android, Web, and Windows. - Shared platform links —
shared/constants/platformLinks.dart+lib/shared/constants/platformLinks.dart(re-export) withREPLACE_ME_*placeholders; allAboutscreens import from here (§5.4.1). - Cross-platform About — per §5.5.2: Web links to Desktop+Android+changelog, Desktop links to Website+Android+changelog, Android links to Website+Desktop+changelog; never to itself. Shows
platformLabel • versionfromPlatformLinks+SettingsController.appVersion(§5.5.5). - Startup auto-load —
App Settings → STARTUP → Auto-load last model(keyAutoLoadLastModel), deferred until chat UI idle (splash gone +DeviceInfoready +1200ms), with90scrash-loop guard,80%RAM guard,90sload timeout, and resident-model check.
Changed
- Warm native splash —
android/res/values/colors.xml+drawable*/launch_background.xmlnow#F8F4ED(Dt.canvas) instead of white — seamless native→Flutter transition. - Smooth splash exit —
splash_view.dartRepaintBoundaryisolation +760msfade-in/out,1380msdwell beforeGet.offAllNamed(home); deferred heavy services now2200msafterrunApp()(was900ms), never janks shimmer. - Header & composer sync — both
ObxonInferenceService.loadedModelName/LocalImageService.loadedModelName; composer pillFlexible+14char truncate fixesRenderFlex overflow 4.4/12pxon 360dp. - Download resume —
download_service.dartstalepaused_downloads.jsoncleanup viaisModelDownloaded+ModelController.refreshDownloaded()fixes “completed but still shows downloading”. - Log copy toast —
log_view.dartGet.snackbar BOTTOM→AppSnackbar.showTop(spring,copyCheck).
Fixed
HiveServiceper-box3stimeout +_MemoryBoxfallback (wasFuture.waiton 7 boxes, one corrupt killed all).ChatController→HiveServicedefensiveisOpen+on HiveError(wasBox has already been closedflood).InferenceServicegrowableresidentTextModels(wasFixedLengthListMixinonclear()).SkillRegistryServicemissingtrybrace.
[1.0.4] - 2026-08-21
Added
- Skills + MCP 4-way toggle in Explore, GitHub/URL skill import, MCP remote HTTP/SSE, notification history, web source favicon chips, ThinkingOrbs per-context picker.
Fixed
- Model switcher free filter, serial numbers, header model row non-tappable, sticky Explore toggle.
[1.0.0] - 2026-08-01
- Initial Android release — local llama.cpp/LiteRT-LM + cloud providers + OpenAI-compatible server.