Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
264 commits
Select commit Hold shift + click to select a range
3477fcd
Atlas: podcast episodes (prompt or auto, length, style, extra researc…
claude Oct 3, 2026
cef1652
Atlas: downloadable Atlas library packs, podcast minutes and hosts by…
claude Oct 4, 2026
9ba1ee6
Audit fixes: TTS init race and errors, hands-free loop, Whisper noise…
claude Oct 4, 2026
20f9342
Offline maps: Mapsforge vector maps, GPS, saved places with distance/…
claude Oct 4, 2026
95ca751
Atlas packs: report why each download failed
claude Oct 4, 2026
45b494e
Atlas identity: remove Off Grid/Wednesday branding, new palette, seri…
claude Oct 4, 2026
d50e76c
Natural offline voices (Kokoro/Piper via sherpa-onnx) with in-app dow…
claude Oct 4, 2026
4de1dd8
Atlas packs: 40 new/fixed source links, safer archive.org fallback
claude Oct 4, 2026
23ad296
Learning: question bank cycle (learner proposes, judge approves/rejec…
claude Oct 4, 2026
5ccddd2
Review fixes: neural voice engine thread-safety and playback end, GPS…
claude Oct 4, 2026
845e493
Second review pass: TTS without an engine no longer hangs, Kiwix nati…
claude Oct 4, 2026
215baa9
README describes Atlas; 10 more library sources and 3 substitutes; AP…
claude Oct 4, 2026
ffd4d74
My models screen (delete any model, move to SD card, add/remove visio…
claude Oct 4, 2026
e24f328
Review fixes: safe model move (copy, save, then delete; shared vision…
claude Oct 4, 2026
35a4724
CI: report type errors in more Atlas files
claude Oct 4, 2026
2df460c
Fix thinking level type
claude Oct 4, 2026
81a83fe
First start: show the screen immediately and fill the model list in t…
claude Oct 4, 2026
064aa80
Audit fixes, earpiece output in voice mode, context size picker in ch…
claude Oct 4, 2026
c9b5e3c
Model tester: memory fit, load, writing and reading speed, context, G…
claude Oct 4, 2026
8ebb37c
Reply time estimates: learns each model's speed, live countdown in ch…
claude Oct 4, 2026
c3eb785
Daily briefing (news on your interests, fun facts, offline edition), …
claude Oct 4, 2026
4ed44cb
Memory-size safety net (falls back to last working size, recovers aft…
claude Oct 5, 2026
64be1f5
Fix type narrowing in text loader
claude Oct 5, 2026
d08f772
Import .safetensors SD1.5 checkpoints (converted on the phone, CPU/GP…
claude Oct 5, 2026
dde0096
checkpoint-runtime-audit-and-recovery-fixes
coolchan03 Oct 7, 2026
d673d9f
finalize-image-runtime-audit
coolchan03 Oct 7, 2026
c080c09
Finalize Atlas runtime audit
coolchan03 Oct 7, 2026
e1028bd
Step 1: improve automatic hardware acceleration
coolchan03 Oct 7, 2026
4e95bb5
Step 2: expose runtime status and fix Sonar gate
coolchan03 Oct 7, 2026
1df5702
Step 3: surface and optimize token speed
coolchan03 Oct 7, 2026
f6103a0
Step 4: keep display awake during AI work
coolchan03 Oct 7, 2026
899aaf1
Step 5: keep AI responses running in background
coolchan03 Oct 7, 2026
5c25cfd
Fix acceleration regression fixtures
coolchan03 Oct 7, 2026
384ff7b
Finalize Atlas regression and release fixes
coolchan03 Oct 7, 2026
5db3020
Fix Atlas packs workflow YAML
coolchan03 Oct 7, 2026
c371423
Fix final Sonar reliability issues
coolchan03 Oct 7, 2026
19ff4bc
Fix llama JSI native artifacts in Atlas APK
coolchan03 Oct 7, 2026
c89c9c8
Harden Atlas llama runtime and release validation
coolchan03 Oct 7, 2026
073e656
Add Atlas llama runtime health checks
coolchan03 Oct 7, 2026
af799f9
WIP: native SDXL/FLUX image weights, model attachments, download inte…
coolchan03 Oct 8, 2026
e10fbcc
Harden image checkpoint detection, ZIP readiness and add-on safety
coolchan03 Oct 8, 2026
40babc8
Resume large image downloads and extract ZIPs natively on Android
coolchan03 Oct 8, 2026
febb3ef
Update Atlas fork URL and download references after repository rename
coolchan03 Oct 8, 2026
3879038
Update Atlas fork URL and download references after repository rename
coolchan03 Oct 8, 2026
9556090
Add native image-model benchmark and SDXL quality defaults
coolchan03 Oct 8, 2026
595e120
Support Z-Image Anima Chroma native image pipelines and dependency ch…
coolchan03 Oct 8, 2026
177fbd1
Show Anima support file downloads and clarify Qwen text encoder
coolchan03 Oct 8, 2026
71d380d
Enable Vulkan GPU native diffusion with device fallback and step diag…
coolchan03 Oct 9, 2026
66df694
Fix Vulkan CI missing SPIRV-Headers CMake package
coolchan03 Oct 9, 2026
6b0e28d
Fix Android Vulkan C++ headers and refresh CI actions
coolchan03 Oct 9, 2026
03dc1bf
Fix Vulkan SPIRV header include path for ARM64 cross-compile
coolchan03 Oct 9, 2026
40916d4
Fix Android diffusion Process PID compilation
coolchan03 Oct 9, 2026
8c0afe4
Move Android image tests ahead of Vulkan build and retain failure rep…
coolchan03 Oct 9, 2026
ad463e9
Fix VAE decoding progress parser and extend Android regression tests
coolchan03 Oct 9, 2026
cd25261
Harden native image runtime memory GPU watchdog and CI gates
coolchan03 Oct 9, 2026
4e531a1
Clean up partial native image outputs on failure and cancellation
coolchan03 Oct 9, 2026
8b1599f
Fix hidden Vulkan probe regex bug and surface real GPU diagnostics
coolchan03 Oct 9, 2026
cda7e74
Avoid unsupported Adreno BF16 Vulkan shaders with on-load FP16 weights
coolchan03 Oct 9, 2026
13abae5
Guard BF16 Vulkan pipelines on unsupported GPUs and fully convert BF1…
coolchan03 Oct 9, 2026
4501ba1
Avoid BF16 shader pipelines on Qualcomm Adreno even when drivers adve…
coolchan03 Oct 9, 2026
a1c5d58
fix(image): use Vulkan shared-memory matvec on Adreno
coolchan03 Oct 9, 2026
222b756
fix: detect native GPUs and prefer compatible acceleration
coolchan03 Oct 10, 2026
70cf21f
fix: retry GPU before CPU after Hexagon load failure
coolchan03 Oct 10, 2026
528dcce
fix: report native prompt speed in model test
coolchan03 Oct 10, 2026
1a51cfb
build: pin llama.kt Vulkan source and add source contract
coolchan03 Oct 11, 2026
cc455b6
build: add opt-in llama.kt Gradle library adapter
coolchan03 Oct 11, 2026
0e2a53d
ci: build independent Vulkan JNI library from pinned source
coolchan03 Oct 11, 2026
d5797bb
ci: verify pinned Vulkan/OpenCL JNI and Android native packaging
coolchan03 Oct 11, 2026
70f6b85
ci: avoid fetching inaccessible private Atlas pro submodule
coolchan03 Oct 11, 2026
8bd6315
ci: install Android SDK command-line tools before pinned NDK
coolchan03 Oct 11, 2026
cdc0acc
feat: add optional native Vulkan backend discovery bridge
coolchan03 Oct 11, 2026
7b108f4
feat: implement experimental Vulkan model session and streaming bridge
coolchan03 Oct 11, 2026
2301219
docs: audit Atlas Vulkan and cross-device requirements
coolchan03 Oct 11, 2026
c65157e
ci: compile complete Atlas Vulkan APK and bridge
coolchan03 Oct 11, 2026
4ed4d2d
feat: add isolated Vulkan streaming adapter with session filtering
coolchan03 Oct 11, 2026
e4518b0
fix: register Vulkan native event subscriptions
coolchan03 Oct 11, 2026
e218467
fix: cancel queued Vulkan sessions without re-enabling inference
coolchan03 Oct 11, 2026
f91c06e
ci: upload only verified experimental Vulkan Atlas APK
coolchan03 Oct 11, 2026
9a3e6dd
feat: add Vulkan GGUF inference test to model tester
coolchan03 Oct 11, 2026
cb6c8f9
feat: integrate experimental Vulkan text inference with CPU fallback
coolchan03 Oct 11, 2026
0d2f7c0
ci: exclude vendored llama.cpp web UI from Atlas TypeScript checks
coolchan03 Oct 11, 2026
b48768e
test: verify Vulkan integration and package side-by-side test APK
coolchan03 Oct 11, 2026
96ba78d
fix(ci): restore verified sherpa AAR and modernize actions
coolchan03 Oct 11, 2026
640d200
test(ci): guard verified Sherpa AAR before Vulkan app build
coolchan03 Oct 11, 2026
c00e782
fix(vulkan): honor explicit GPU selection without silent CPU fallback
coolchan03 Oct 11, 2026
084b23d
fix(audit): harden Vulkan streaming and remove raw inference logs
coolchan03 Oct 11, 2026
1e8bfae
fix(vulkan): make native sessions atomic and reject decode failures
coolchan03 Oct 11, 2026
8bcfc5b
fix(audit): coordinate Vulkan cancellation and clarify offload diagno…
coolchan03 Oct 11, 2026
19e4a2a
fix(ci): align Vulkan adapter contract with promise-based completion
coolchan03 Oct 11, 2026
c608d05
fix(ci): align experimental Vulkan minimum SDK with native module
coolchan03 Oct 12, 2026
01a3418
fix(vulkan): prevent implicit CPU tool-call switching
coolchan03 Oct 12, 2026
3cd95e7
fix(image): require native Vulkan probe before GPU diffusion
coolchan03 Oct 12, 2026
17493b7
fix(image): refresh Vulkan probe and clarify GPU compatibility
coolchan03 Oct 12, 2026
200795c
fix(image): stop promptly on fatal Vulkan shader failures
coolchan03 Oct 12, 2026
06a76e4
fix(image): distinguish slow active diffusion from stalled steps
coolchan03 Oct 12, 2026
5a4f6ed
fix(image): clarify native activity and Vulkan progress status
coolchan03 Oct 12, 2026
928e61b
fix(image): report actual stall duration after watchdog extension
coolchan03 Oct 12, 2026
1aa3a1c
fix(image): preflight Vulkan before loading test checkpoints
coolchan03 Oct 12, 2026
15c6f07
fix(image): reject invalid GGUF and safetensors headers before genera…
coolchan03 Oct 12, 2026
d6d421c
fix(ui): accurately describe Vulkan backend fallback policy
coolchan03 Oct 12, 2026
cd45c5a
feat(acceleration): add CPU-free auto backend candidate policy
coolchan03 Oct 12, 2026
ad1e2e5
feat(acceleration): wire Auto GPU/NPU selection and strict image back…
coolchan03 Oct 12, 2026
005d855
atlas-audit-fallback-fixes
coolchan03 Oct 12, 2026
8f459a4
protect-atlas-backup-secrets
coolchan03 Oct 12, 2026
590a832
migrate-atlas-credentials-to-keychain
coolchan03 Oct 12, 2026
a45b4cb
allowlist-fresh-install-backup-restore
coolchan03 Oct 12, 2026
6f7bfe0
fix-context-reporting-across-backends
coolchan03 Oct 12, 2026
7ded029
flexible-context-window-backends
coolchan03 Oct 12, 2026
8c8952d
guard-compass-invalid-sensor-readings
coolchan03 Oct 12, 2026
848a2fd
field-id-photo-safety-guard
coolchan03 Oct 12, 2026
673f8ce
audit-branch-native-build-checks
coolchan03 Oct 12, 2026
875a063
package-vulkan-text-runtime-in-audit-apk
coolchan03 Oct 12, 2026
0168739
verify-vulkan-kotlin-and-apk-signature
coolchan03 Oct 12, 2026
15f9588
verify-llamakt-native-library-packaging
coolchan03 Oct 12, 2026
46ac5be
guard-android-opencl-htp-context-shift
coolchan03 Oct 12, 2026
e3db09d
generate-pinned-vulkan-shaders-before-gradle
coolchan03 Oct 12, 2026
4dbb8c8
include-opencl-context-shift-regression-in-ci
coolchan03 Oct 12, 2026
d288efe
include-accelerator-selection-tests-in-ci
coolchan03 Oct 12, 2026
25d0e5d
warn-before-plaintext-backups-and-validate-imports
coolchan03 Oct 12, 2026
eaa9548
make-audit-native-apk-builds-manual
coolchan03 Oct 12, 2026
ee9f94f
prevent-insecure-lock-disable-and-clarify-storage
coolchan03 Oct 12, 2026
cf96c77
track-deferred-chat-encryption-and-sync
coolchan03 Oct 12, 2026
113f38e
validate-native-image-support-file-formats
coolchan03 Oct 12, 2026
01c6321
validate-native-image-import-registration
coolchan03 Oct 12, 2026
9b430e4
log-image-download-recovery-failures
coolchan03 Oct 12, 2026
78e03ff
track-batch4-native-device-verification
coolchan03 Oct 12, 2026
52edbcb
validate-offline-map-download-paths
coolchan03 Oct 12, 2026
39c6814
reject-invalid-gps-fixes
coolchan03 Oct 12, 2026
b3f6b0c
fix-tts-stale-error-and-quiz-parsing
coolchan03 Oct 12, 2026
adaf2c1
track-batch5-device-verification
coolchan03 Oct 12, 2026
1f6e047
document-batch6-release-blockers
coolchan03 Oct 12, 2026
cbcc0db
fix-vulkan-build-opencl-link-and-plan-release
coolchan03 Oct 12, 2026
d503cbc
validate-auth-keychain-account
coolchan03 Oct 12, 2026
2dffb64
reject-untrusted-backup-size-metadata
coolchan03 Oct 12, 2026
bb34adc
limit-exported-backup-size
coolchan03 Oct 12, 2026
1fd3cc3
include-security-voice-and-image-attachment-tests-in-release-ci
coolchan03 Oct 12, 2026
8ebad3c
add-android-keystore-encrypted-chat-persistence
coolchan03 Oct 12, 2026
ffa5f0d
record-encrypted-chat-milestone-and-validation-gaps
coolchan03 Oct 12, 2026
e4feca8
add-companion-teacher-agents-and-chat-archive-longpress
coolchan03 Oct 12, 2026
931d83d
simplify-chat-header-move-agent-and-model-options-to-settings
coolchan03 Oct 12, 2026
db1681b
shorten-audio-mode-agent-responses-for-phone-calls
coolchan03 Oct 12, 2026
55b449a
choose-private-chat-before-conversation-starts
coolchan03 Oct 12, 2026
ab219b9
remember-agent-selection-per-conversation
coolchan03 Oct 12, 2026
b6a346d
enable-home-chat-longpress-and-hide-archived-from-recent
coolchan03 Oct 12, 2026
d957b0f
harden-encrypted-chat-writes-and-prepare-claude-audit
coolchan03 Oct 12, 2026
6bce3d0
repair-llm-keystore-test-mocks-and-add-chat-rename
coolchan03 Oct 12, 2026
f4bcb56
test-chat-rename-validation
coolchan03 Oct 12, 2026
340ba3d
choose-private-chats-from-home
coolchan03 Oct 12, 2026
fdc9701
implement-password-encrypted-portable-backup-core
coolchan03 Oct 12, 2026
2b19f48
add-encrypted-backup-settings-controls
coolchan03 Oct 12, 2026
ef857d4
track-portable-backup-implementation-and-pending-security
coolchan03 Oct 12, 2026
c66c1a6
add-per-chat-pin-gate-and-offline-arcade-starter
coolchan03 Oct 12, 2026
322f0d6
personalize-jake-agent-and-test-chat-pin-storage
coolchan03 Oct 12, 2026
d3d9106
expand-offline-arcade-and-correct-game-feedback
coolchan03 Oct 12, 2026
2e8d7a6
add-playable-offline-2048-with-regression-tests
coolchan03 Oct 12, 2026
58cb853
add-offline-minesweeper-with-logic-tests
coolchan03 Oct 12, 2026
04156d3
add-offline-snake-with-regression-tests
coolchan03 Oct 12, 2026
4ca2648
require-existing-pin-to-remove-chat-lock
coolchan03 Oct 12, 2026
4c9c67d
add-offline-word-guess-and-trivia-games
coolchan03 Oct 12, 2026
9d36272
add-offline-sudoku-puzzle-with-solution-tests
coolchan03 Oct 12, 2026
1a58988
add-offline-wilderness-survival-decision-game
coolchan03 Oct 12, 2026
7c9e09a
add-offline-civilization-tech-tree-strategy-challenge
coolchan03 Oct 12, 2026
5008d0b
add-project-feature-opt-ins-and-chess-puzzle-starter
coolchan03 Oct 12, 2026
df2d58b
consolidate-project-learning-toggle-and-move-arcade-to-emergency
coolchan03 Oct 12, 2026
4574c52
implement-source-grounded-project-crossword-wordsearch-matching
coolchan03 Oct 12, 2026
4afd956
implement-opt-in-per-chat-aes-gcm-and-shared-pin-unlock
coolchan03 Oct 12, 2026
717c2fc
implement-opt-in-project-metadata-encryption-and-pin-gates
coolchan03 Oct 13, 2026
6482648
Fix project games, PIN chat safety, backups, chat saving speed and Fi…
claude Oct 13, 2026
96091a0
Add 18 project-based learning games built from each project's documents
claude Oct 13, 2026
8e2617e
Add Emergency tools: survival drills, SOS/Morse signal, daylight left…
claude Oct 13, 2026
7568f49
Compass shows true north, off-grid enforced for tools, speech languag…
claude Oct 13, 2026
a3ddf46
Remove screenshot blocking (not wanted)
claude Oct 13, 2026
844789a
Fix stale tests: LiteRT path mocks, Auto-default residency sizing, Wh…
claude Oct 13, 2026
2ec45cf
Update UI tests for Atlas (no Off Grid promos/upsells, Regular/Privat…
claude Oct 13, 2026
3faf75d
Update project, security and tools screen tests for Atlas
claude Oct 13, 2026
2fe3e57
Web search reports offline/blocked failures; update hardware, image-b…
claude Oct 13, 2026
5071c65
Update image download and backend tests
claude Oct 13, 2026
a435c60
Explicit GPU/NPU choices fall back to CPU with a visible reason; test…
claude Oct 13, 2026
ff33919
Keep 'Load Anyway' for memory refusals (backend loop re-wrapped the e…
claude Oct 13, 2026
199e5fd
CI: run the full Jest suite before building the APK
claude Oct 13, 2026
815b953
Auto tries NPU, then OpenCL, then Vulkan, then CPU; move existing aut…
claude Oct 13, 2026
4afcf93
Chat lists: long-press shows every chat option; no swipe-to-delete
claude Oct 13, 2026
f931567
Chat input: keep the attach and settings buttons visible while typing
claude Oct 13, 2026
3e750cf
Model test: offer Load anyway when memory refuses, like chat does
claude Oct 13, 2026
73cc500
NPU and GPU: ship the Hexagon runtime and let models use the GPU fully
claude Oct 13, 2026
4eb3711
Images: choose Vulkan, OpenCL or CPU, and fall back when a GPU run fails
claude Oct 13, 2026
0006377
Appearance & AI style: theme, accent, font, text size, and how the AI…
claude Oct 13, 2026
7350e8d
CI: update the native image contract check for the OpenCL engine
claude Oct 13, 2026
31214f1
feat: polish chats, projects, model controls and deep research
coolchan03 Oct 13, 2026
ae9831c
fix: hide protected project initials and chat counts
coolchan03 Oct 13, 2026
b2c8198
Merge pull request #1 from coolchan03/feat/atlas-finishing-touches-20…
coolchan03 Oct 13, 2026
4312bea
fix: restore full Jest parity for simplified chats and five-tab works…
coolchan03 Oct 13, 2026
1930875
Merge pull request #2 from coolchan03/feat/atlas-finishing-touches-20…
coolchan03 Oct 13, 2026
7b40d21
Finish Atlas research, model settings and automatic acceleration UX (#3)
coolchan03 Oct 14, 2026
c186203
feat: offline Deep Research with cited project documents (#4)
coolchan03 Oct 14, 2026
74321e9
Complete Atlas native image JSON sampler and scheduler support (#5)
coolchan03 Oct 14, 2026
a27cd5b
New app icon: two-tone navigation arrow with an AI sparkle
claude Oct 14, 2026
df71ef3
Privacy and chat-list fixes after the merged changes
claude Oct 14, 2026
0509059
Images: bring back the engine choice; CPU opt-in only for heavy check…
claude Oct 14, 2026
913e674
Chat backend: offer NPU, OpenCL and Vulkan again; stop resetting the …
claude Oct 14, 2026
39924a6
Deep Research fixes
claude Oct 14, 2026
0fff277
Chats: private chat button is back; search folders can be closed
claude Oct 14, 2026
643fe02
Native image config: block AYS on families it blanks; size-limit JSON…
claude Oct 14, 2026
0aa619e
Image size: shape buttons only where they apply; the size slider keep…
claude Oct 14, 2026
cca832b
Model test: point NPU phones to the Q4_0 version of a model that cann…
claude Oct 14, 2026
51d15aa
My models: Fastest on this phone ranking from measured chat speeds
claude Oct 14, 2026
3d5fc98
Fix the native image config unit test setup
claude Oct 14, 2026
127ec30
Release signing: use a real keystore from GitHub secrets, debug signi…
claude Oct 14, 2026
3511920
Videos: save narrated slides as an MP4 on the phone (offline), with p…
claude Oct 14, 2026
4004b0e
Backups: locked chats stay locked in encrypted backups and open with …
claude Oct 14, 2026
b4f6d99
Protected projects can have documents: text, names and embeddings liv…
claude Oct 14, 2026
b11bdaa
Vulkan chat: say plainly that tools and picture input need OpenCL, Au…
claude Oct 14, 2026
2dd0da2
Appearance: font and text size apply to all text immediately, no restart
claude Oct 14, 2026
2e28bfd
Privacy: pictures from private or PIN-locked chats stay out of the Ga…
claude Oct 14, 2026
ee6d10e
Gallery: tolerate a missing hidden list
claude Oct 14, 2026
d23ab4e
globalText: name the render function as a component
claude Oct 14, 2026
be7029c
Study: forget the saved-video link when another item opens
claude Oct 14, 2026
f640045
Downloads: a database error while starting progress polling no longer…
claude Oct 14, 2026
c6a0425
Review fixes: nested text, shared files kept, secure delete, failure …
claude Oct 14, 2026
b2fbd68
Overnight report
claude Oct 14, 2026
292b80e
Podcast: episodes up to 60+ minutes (batched plan, per-part passages,…
claude Oct 14, 2026
f7791ea
Study: formula sheet, and share or save a study guide / formula sheet…
claude Oct 14, 2026
4c59766
Slides: save as a PowerPoint (.pptx) file, built offline on the phone
claude Oct 14, 2026
595fbe8
Study games: word scramble, prize ladder, fix the mistake
claude Oct 14, 2026
db99fcc
Bottom bar: choose, order and shortcut destinations; Models off the b…
claude Oct 14, 2026
e6f52e2
Appearance: vibration on/off
claude Oct 14, 2026
45cc7c4
Stability: PowerPoint zip layout, icon sizes, podcast stop/ending, ch…
claude Oct 14, 2026
c58cd25
Implement distinct appearance modes, font options and offline PPTX/PD…
Oct 14, 2026
11f11f3
Add appearance regression tests and clean up presentation lint
Oct 14, 2026
e113152
Move research into chat settings and align voice call with cog
Oct 14, 2026
4df762b
fix-atlas-audit-20261014
Oct 14, 2026
5f7f24d
docs-audit-architecture-and-ci-findings
Oct 14, 2026
a1e8151
fix-portable-project-file-backups-and-regressions
Oct 15, 2026
53f1927
fix-atlas-regression-chat-privacy-and-hardware-tests
Oct 15, 2026
c26f036
feat-encrypted-nearby-wifi-sync-and-qr-pairing
Oct 15, 2026
9e7d16c
fix-sync-merge-deletions-and-concurrent-edits
Oct 15, 2026
c8565a4
fix: complete Atlas core audit and harden release signing
Oct 15, 2026
e1426aa
fix: allow normal OpenSSL progress during Windows signing setup
Oct 15, 2026
a58b5ac
Configure reusable private Android APK release signing
coolchan03 Oct 15, 2026
7b32b61
fix(ci): use Node 24 for SQLite tests and attest release signing key
Oct 15, 2026
2facedd
ci: automatically publish only verified signed Atlas official APK
Oct 15, 2026
0fd7b07
fix(android): bootstrap pinned llama.kt Vulkan source before release …
Oct 15, 2026
a8580b7
fix(ci): recognize V2 APK signer digest and use Node 24 cache
coolchan03 Oct 15, 2026
30898d0
docs: record Atlas future release roadmap
coolchan03 Oct 16, 2026
af9de76
Integrate Atlas feature branch with security and release audit (valid…
atlas-integration Oct 16, 2026
4c467b4
fix(release): guard reconciled features and enforce explicit accelera…
atlas-integration Oct 16, 2026
ff31f06
Merge remote-tracking branch 'origin/atlas-voice' into integration/at…
atlas-integration Oct 16, 2026
d650f2d
test(release): assert explicit OpenCL failure never downgrades to CPU
atlas-integration Oct 16, 2026
a63c77a
fix(ci): make GPU regression guard type-safe on Linux
atlas-integration Oct 16, 2026
d334d31
test(ci): accept alert and persistent chat warning for explicit GPU f…
atlas-integration Oct 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
160 changes: 160 additions & 0 deletions .github/workflows/atlas-apk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
name: Build Atlas APK

# Builds an installable Android APK (arm64 phones) on every push to atlas-voice,
# and publishes it on the Releases page so it can be downloaded on the phone.
on:
push:
branches: [atlas-voice]
workflow_dispatch:

jobs:
apk:
permissions:
contents: write
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: '24'
cache: 'npm'
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
- name: Use the runner's Android SDK
run: |
echo "ANDROID_HOME=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
yes | "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --licenses > /dev/null || true
- name: Free disk space
run: sudo rm -rf /usr/share/dotnet /opt/ghc || true
- uses: actions/cache@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ hashFiles('android/**/*.gradle*', 'android/gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: gradle-
- name: Install JS dependencies
run: npm ci --ignore-scripts
- name: Install llama.rn native artifacts
run: node node_modules/llama.rn/install/download-native-artifacts.js
- name: Apply audited native dependency patches
run: ./node_modules/.bin/patch-package
- name: Reconciled feature contract gate
run: node scripts/release/check-reconciled-release.cjs
- name: TypeScript gate
run: ./node_modules/.bin/tsc --noEmit -p .
- name: Core regression gate
run: ./node_modules/.bin/jest --runInBand --forceExit --coverage=false --silent
- name: Checkout pinned public llama.kt sources (exclude private Pro)
run: |
set -euo pipefail
git submodule sync -- vendor/llama-kt
git submodule update --init --depth=1 -- vendor/llama-kt
git -C vendor/llama-kt submodule update --init --recursive --depth=1
node scripts/check-llamakt-source.cjs
test -f vendor/llama-kt/llama-kt/src/main/cpp/CMakeLists.txt
echo "Pinned llama.kt native CMake source is present."
- name: Install Vulkan shader-generator dependencies
run: |
set -euo pipefail
sudo apt-get update -qq
sudo apt-get install -y --no-install-recommends glslc spirv-headers libvulkan-dev ninja-build cmake python3
command -v glslc
- name: Bootstrap pinned llama.kt Vulkan sources
working-directory: vendor/llama-kt
run: |
set -euo pipefail
bash scripts/bootstrap.sh
test -s llama-kt/src/main/cpp/ggml-vulkan/ggml-vulkan.cpp
test -n "$(find llama-kt/src/main/cpp/ggml-vulkan/shaders -name '*.cpp' -print -quit)"
- name: Isolate llama.kt Vulkan backend from llama.rn OpenCL
run: |
set -euo pipefail
node scripts/prepare-llamakt-vulkan.cjs
node scripts/check-llamakt-vulkan-cmake.cjs
node scripts/verify-llamakt-gradle.cjs
- name: Get natural-voice engine (sherpa-onnx)
run: |
mkdir -p android/app/libs
curl --fail --silent --show-error --location --retry 3 --proto '=https' --proto-redir '=https' -o android/app/libs/sherpa-onnx.aar https://github.com/k2-fsa/sherpa-onnx/releases/download/v1.13.7/sherpa-onnx-1.13.7.aar
echo "c4ef49e309f24fcee5c106b8a279481aaecaabb078cd37b2cd6e9a62cc8a73c8 android/app/libs/sherpa-onnx.aar" | sha256sum -c -
# phones only need 64-bit ARM: drop the other CPU types to keep the APK small
zip -q -d android/app/libs/sherpa-onnx.aar 'jni/armeabi-v7a/*' 'jni/x86/*' 'jni/x86_64/*' || true
ls -la android/app/libs
- name: Require permanent release-signing keystore
env:
ATLAS_UPLOAD_KEYSTORE_B64: ${{ secrets.KEYSTORE_BASE64 }}
ATLAS_UPLOAD_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
ATLAS_UPLOAD_KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
ATLAS_UPLOAD_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: |
set -euo pipefail
for variable in ATLAS_UPLOAD_KEYSTORE_B64 ATLAS_UPLOAD_STORE_PASSWORD ATLAS_UPLOAD_KEY_ALIAS ATLAS_UPLOAD_KEY_PASSWORD; do
if [ -z "${!variable}" ]; then
echo "::error::Missing required release-signing secret: $variable"
exit 1
fi
done
umask 077
printf '%s' "$ATLAS_UPLOAD_KEYSTORE_B64" | base64 --decode > android/app/atlas-upload-keystore.p12
test -s android/app/atlas-upload-keystore.p12
keytool -list -keystore android/app/atlas-upload-keystore.p12 \
-storetype PKCS12 -storepass:env ATLAS_UPLOAD_STORE_PASSWORD \
-alias "$ATLAS_UPLOAD_KEY_ALIAS" >/dev/null
keytool -exportcert -keystore android/app/atlas-upload-keystore.p12 \
-storetype PKCS12 -storepass:env ATLAS_UPLOAD_STORE_PASSWORD \
-alias "$ATLAS_UPLOAD_KEY_ALIAS" | sha256sum | awk '{print $1}' > android/app/signing-cert.sha256
- name: Build release APK
working-directory: android
env:
OFFGRID_UPLOAD_STORE_FILE: atlas-upload-keystore.p12
OFFGRID_UPLOAD_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
OFFGRID_UPLOAD_KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
OFFGRID_UPLOAD_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: |
set -o pipefail
./gradlew assembleRelease -PatlasRequireReleaseSigning=true -PreactNativeArchitectures=arm64-v8a --no-daemon 2>&1 | tee ../gradle.log || {
grep -E "^e: |error:|What went wrong|Could not|Execution failed|Unresolved|Duplicate|Manifest merger|Attribute |Suggestion|> Task .*FAILED|Caused by" ../gradle.log | grep -v "^w: " | head -40 | while IFS= read -r l; do echo "::error::$l"; done
exit 1
}
- name: Verify release native runtime
run: |
APK=android/app/build/outputs/apk/release/app-release.apk
test -f "$APK"
unzip -l "$APK" > apk-contents.txt
grep -q 'lib/arm64-v8a/librnllama.so' apk-contents.txt
grep -q 'lib/arm64-v8a/librnllama_v8.so' apk-contents.txt
grep -q 'lib/arm64-v8a/librnllama_v8_2.so' apk-contents.txt
node -e "const p=require('./node_modules/llama.rn/package.json'); if(p.version!=='0.13.0-rc.4') { console.error('Unexpected llama.rn version:',p.version); process.exit(1) } console.log('Verified llama.rn',p.version)"
echo "Verified Atlas release contains the ARM64 llama.rn native runtime."
APKSIGNER="$ANDROID_SDK_ROOT/build-tools/$(ls "$ANDROID_SDK_ROOT/build-tools" | sort -V | tail -1)/apksigner"
"$APKSIGNER" verify --verbose --print-certs "$APK"
# Confirm exact GitHub keystore identity, rejecting other valid certificates.
expected_cert_sha="$(cat android/app/signing-cert.sha256)"
actual_cert_sha="$("$APKSIGNER" verify --print-certs "$APK" |
sed -nE 's/^.*certificate SHA-256 digest:[[:space:]]*([[:xdigit:]]{64})[[:space:]]*$/\1/p' | head -1)"
if [ -z "$expected_cert_sha" ] || [ -z "$actual_cert_sha" ] ||
[ "${expected_cert_sha,,}" != "${actual_cert_sha,,}" ]; then
echo "::error::APK signing certificate does not match the configured release keystore"
exit 1
fi
echo "::notice title=Signing verified::APK certificate matches configured GitHub release key"
- name: Rename APK
run: |
mkdir -p out
cp android/app/build/outputs/apk/release/app-release.apk out/Atlas-${{ github.run_number }}.apk
- uses: actions/upload-artifact@v4
with:
name: Atlas-apk
path: out/*.apk
- name: Publish release (stable branch only)
if: github.ref == 'refs/heads/atlas-voice'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create atlas-${{ github.run_number }} out/*.apk --latest \
--target ${{ github.sha }} --title "Atlas build ${{ github.run_number }}" \
--notes "Install this APK on your Android phone or tablet (download it, open it, allow installing from this source)."
36 changes: 36 additions & 0 deletions .github/workflows/atlas-core-audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Atlas Core Audit

on:
pull_request:
workflow_dispatch:
push:
branches:
- atlas-voice
- 'audit/**'

permissions:
contents: read

concurrency:
group: atlas-core-audit-${{ github.ref }}
cancel-in-progress: true

jobs:
core:
name: TypeScript and Jest
runs-on: ubuntu-latest
timeout-minutes: 35
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: '24'
cache: npm
- name: Install dependencies without native Android SDK
run: npm ci --ignore-scripts
- name: Apply audited dependency patches
run: ./node_modules/.bin/patch-package
- name: Type check
run: ./node_modules/.bin/tsc --noEmit -p .
- name: Run all available core regression tests
run: ./node_modules/.bin/jest --runInBand --forceExit --coverage=false --silent
Loading