## Summary #612 turned off the Gradle cache to save quota. The Android job is already the longest in every CI run, and measured runs show that without the cache it takes about **1m45s longer**. This PR turns the cache back on. The Rust dependency hash from #612 freed most of the quota needed for its 843 MB entry, and this PR frees another ~140 MB by deduplicating the Linux npm cache. ## Changes - **`build-android.yml`**: `setup-gradle` drops `cache-disabled: true`. It keeps `cache-provider: basic` (MIT, read-only off `master`). - **`.github/actions/npm-install`**: on Linux, the action sets `npm_config_cache` to `.npm-cache` inside the checkout (gitignored) and caches that literal path. Windows keeps its Dev Drive path, and macOS is unchanged. - Desktop Linux runs in an `ubuntu:22.04` container (`HOME=/github/home`) and Android runs on the host. With `~/.npm`, the two jobs had the same `npm-Linux-X64-…` key but saved two identical ~140 MB entries. `actions/cache` versions an entry by its literal `path`. - Matching the literal path alone isn't enough. `actions/cache` stores tar entries relative to `GITHUB_WORKSPACE`, so restoring a container `~/.npm` archive on the host would extract to `/home/runner/github/home/.npm`. That still counts as a hit, so the save is skipped. `.npm-cache` is the same directory in both environments and sits at the same position relative to the workspace. It can't be a sibling `../.npm-cache`: `actions/cache/save` rejects `..` in a path and only logs a warning. - **`docs/development/ci-caching.md`**: updates the Decisions table, adds the measured Gradle timings, and adds a new `## npm` section. **`release.md`** is updated to match. ### Gradle timings (Android job) | Phase | Uncached (38192218726 / 38197882367) | Cached (38111960581 / 38071840978) | |---|---|---| | `setup-gradle` restore | 1–2.5 s | 12–17 s | | Gradle startup to first Rust handoff | 92 s / 96 s | ~24 s | | Packaging after last Rust target | ~120 s | ~79 s | | `:app:lintUniversalDebug` | 49 s / 46 s | 37 s / 36 s | ### Effect - The first `master` CI run after this merges is cold for Gradle and for Linux npm. Each saves one entry: 843 MB for Gradle, and ~140 MB for npm in place of the two current Linux entries. - The two old `npm-Linux-X64-…` entries can be deleted by hand or left to eviction. ## Testing - `npm run check`, `npm test` and `npm run lint:fix` pass. This PR only changes YAML and docs. - CI caching can only be verified after merge, because PR runs don't save caches. After the merge, two dispatched `ci.yml` runs on `master` should show: - one `npm-Linux-X64` entry; - `Cache restored from key: npm-Linux-X64-…` in both the desktop Linux and Android logs; - no `Downloading https://services.gradle.org` line on Android in the second run. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01FsdTn4ZMvVxxETgpvb1Li3 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated Linux dependency caching so containerized desktop and Android builds can share the npm cache. * Re-enabled Gradle caching for Android builds, with read-only caching on non-default branches. These changes affect build workflows and do not add or change app features. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .cargo | ||
| .github | ||
| docs | ||
| scripts | ||
| src | ||
| src-tauri | ||
| static | ||
| third-party-licenses | ||
| .gitattributes | ||
| .gitignore | ||
| .nvmrc | ||
| .prettierrc | ||
| CLAUDE.md | ||
| compileApk.sh | ||
| components.json | ||
| eslint.config.js | ||
| lefthook.yml | ||
| LICENSE.md | ||
| logo.png | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| sun4.jpg | ||
| sun17.jpg | ||
| sun2022.png | ||
| svelte.config.js | ||
| tsconfig.json | ||
| vite.config.js | ||
| vitest.config.ts | ||
Aventuras
Interactive fiction with an AI that remembers. Play a text adventure or write collaboratively, on desktop and Android, with any LLM provider you like — cloud or running on your own machine.
Aventuras keeps the story straight: chapters are summarized as you play, a lorebook feeds the right entries into the right scene, an agent tidies that lorebook behind you, and the world state — who is present, where you are, what you carry — is tracked turn by turn.
Highlights
- Two modes — Adventure, with multiple-choice actions and world tracking; Creative Writing, freeform with AI suggestions. First/second/third person, past or present tense.
- Any provider — OpenRouter, OpenAI, Anthropic, Google, xAI, Groq, DeepSeek, Mistral, Z.AI, NanoGPT, Chutes, Pollinations, NVIDIA NIM, plus local llama.cpp, LM Studio and Ollama. Streaming, extended thinking, and per-subsystem Agent Profiles so retrieval, classification and narration can each use a different model.
- Memory that scales — automatic chapter summarization, and a retrieval step that goes and finds what the current scene needs from everything that came before.
- Lorebook — characters, locations, items, factions, concepts and events, with aliases, secrets, keyword and relevance-based injection, SillyTavern import, and an autonomous agent that consolidates duplicates and fills gaps.
- The Vault — a cross-story library of reusable characters, lorebooks and scenarios, with a tool-calling assistant that edits them and shows you a diff before anything lands.
- Every prompt is editable — they are Liquid templates, all of them, in an in-app editor.
- Images — inline
<pic>illustrations, scene backgrounds and character portraits, across nine backends including local ComfyUI and A1111. - Writing tools — local grammar checking (Harper/WASM), style analysis for repetition, suggestions that match how you write.
- Yours to keep — SQLite on your machine, full backup/restore,
.avtstory export, LAN sync between devices over QR pairing, and an optional translation layer over the whole app. - 26 themes, adjustable text size, dialogue highlighting.
Install
Pre-built binaries are on the Releases page:
| Platform | Download | Minimum |
|---|---|---|
| Windows | Aventuras_vX.Y.Z_x64-setup.exe |
Windows 10 |
| macOS | Aventuras_vX.Y.Z_x64.dmg / _aarch64.dmg |
macOS 13.3 |
| Linux | Aventuras_vX.Y.Z_amd64.deb / .AppImage, or _x86_64.rpm |
WebKitGTK 2.40 for the .deb / .rpm; the AppImage carries its own, needs glibc 2.35 |
| Android | Aventuras_vX.Y.Z.apk |
Android 8, with System WebView 111 or later |
| iOS | Aventuras_vX.Y.Z_ios-arm64-unsigned.ipa (sideload; unsigned) |
iOS 16.4 |
The minimums come from each platform's web engine, OS and runtime requirements. They are derived from documentation and have not been tested on devices at those versions; see docs/development/platform-support.md.
No API keys in config files — providers are set up in the app, under Settings → API Settings.
Build from source
Requires the Node.js version in .nvmrc, the latest stable Rust, (for Android) the
Android SDK, NDK r27d and JDK 21–24, and (for iOS) a Mac with Xcode.
git clone https://github.com/AventurasTeam/Aventuras.git
cd Aventuras
npm install
npx tauri dev
| Script | Does |
|---|---|
npm run dev |
Vite dev server (frontend only) |
npx tauri dev |
full app, with hot reload |
npm run build |
production build |
npm run check |
type checking (svelte-check) |
npm test |
test suite (Vitest) |
npm run lint |
lint:ts (ESLint) and lint:rust (rustfmt, Clippy); :fix fixes |
npm run format |
Prettier |
npm run release |
version bump, tag and push |
Desktop builds are npx tauri build; Android and iOS are documented in
docs/development/release.md. iOS produces an unsigned
device .ipa (no Apple certificates or signing secrets — see
docs/development/ios-build-target.md for the full
account of how the target was added and how the unsigned CI pipeline works).
Tech stack
TypeScript (strict) · SvelteKit 2 · Svelte 5 runes · Tauri 2 (Rust) · Tailwind + shadcn-svelte ·
SQLite (tauri-plugin-sql / sqlx) · Vercel AI SDK · LiquidJS · CodeMirror 6 · Zod ·
Harper.js (WASM) · Vitest
Contributing
Start with docs/ — the architecture is documented per area, and
CLAUDE.md has the conventions. CI runs lint, type-check, tests and a build on every
PR against master, develop or dev.
Acknowledgments
Tauri · SvelteKit · OpenRouter · Harper · Lucide
License
AGPL-3.0