Find a file
Ivan Kolos ec40511276
Default generation activity to the status line, and retire the pack mapping opt-in (#508)
## Why

Two settings were parked in a state that no longer matched what they
were for.

**Generation Activity** shipped as `Off`, so the feature added in #484 —
the one that exists to make a forty-second wait legible — was invisible
until someone went looking for it in Interface settings. Recording is
already guarded, session-only and never persisted or exported, and
`Status line` costs one line of chrome in place of the ellipsis.

**The pack mapping step for story files that record no pack** sat behind
a Labs switch that was hedged as "off by default, existing files import
as they always did". It has shipped, the path works, and the gate that
actually decides whether a prompt is useful — more than one pack
installed — is enforced independently. The switch only hid a correct
prompt from the people it was written for.

## What this does

- **`activityReporting` defaults to `line`.** New installs, and every
existing install that never touched the setting, report the deepest
running step and the turn's elapsed time instead of the animated
ellipsis. Reset All now lands on `Status line` too, through the
`setActivityReporting` call `resetAllSettings` already makes.
- **A user who chose `Off` keeps it.** `activity_reporting` is written
only by the setter and the interface reset, and `loadSettings` reads it
back before the default applies — so the new default reaches absent keys
only. No migration, no settings rewrite.
- **`legacyImportPackMapping` is retired**: gone from
`ExperimentalFeatures`, from `getDefaultExperimentalFeatures`, and from
the Labs panel. `decidePackPrompt` and `planPackBinding` lose the
parameter rather than defaulting it, so the no-binding branch reduces to
`packCount > 1`.
- **The pack-count gate stays.** With one pack installed there is
nothing to choose, so nothing is asked.

## A divergence this settles

The spec said the opt-in "SHALL NOT apply to sync", and a comment in
`packBinding.ts` claimed "Sync never calls this at all". Neither was
true of the code: `SyncModal` passed the same Labs flag into
`planPackBinding` as `LibraryView` did, so a no-pack sync payload was
silent only because the flag was off. Retiring the flag resolves this in
favour of the code — both interactive paths now behave identically — and
the comment is corrected.

Practically: a synced story recording no pack, arriving on a device with
more than one pack, now asks which pack to use. It asks before anything
is written or deleted, so cancelling still leaves the device untouched.

## Compatibility

The retired key is left behind in the stored `experimental_features`
blob. It is loaded as `{ ...getDefaultExperimentalFeatures(), ...loaded
}`, so an unknown key survives the spread harmlessly and is never read
again.

## Verification

`npm run check` 0 errors · `npm test` 1456 passed · `npm run lint` 0
errors.

**Not yet exercised in the running app** — worth a manual pass before
merge, since a Svelte-level mistake in the two markup edits passes all
three:

- [ ] A profile with no `activity_reporting` row shows the status line
without touching settings; setting it to `Off` brings the ellipsis back
and survives a restart
- [ ] Importing a story file recording no pack asks which pack on a
two-pack device, and does not on a single-pack one
- [ ] The Labs tab renders with no gap or stray separator where the
Story Import section was
- [ ] A sync payload recording no pack on a multi-pack device asks
before writing, and cancelling changes nothing

🤖 Generated with [Claude Code](https://claude.com/claude-code)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Changes**
  - Removed the experimental “Story Import” setting from Settings.
- Story files without a recorded prompt pack now prompt users to choose
one when multiple packs are available.
  - Sync and import use consistent prompt-pack selection behavior.
  - Single-pack devices continue using the available pack automatically.
  - Default activity reporting is now set to line-level reporting.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-10 21:42:00 -04:00
.cargo Add Incognito Keyboard option for Android (#467) 2026-08-26 20:45:30 -04:00
.github/workflows Android build hygiene: minSdk 26, lint in CI, resource cleanup (#468) 2026-08-29 21:52:01 -04:00
docs Default generation activity to the status line, and retire the pack mapping opt-in (#508) 2026-09-10 21:42:00 -04:00
scripts Add Incognito Keyboard option for Android (#467) 2026-08-26 20:45:30 -04:00
src Default generation activity to the status line, and retire the pack mapping opt-in (#508) 2026-09-10 21:42:00 -04:00
src-tauri chore: bump version to 0.7.9 2026-09-01 20:00:41 -04:00
static switched font for logo 2026-01-19 14:48:22 -06:00
third-party-licenses Added harper 2026-01-02 05:08:39 -07:00
.gitattributes Fix CRLF Migrations (#162) 2026-02-22 15:46:59 -05:00
.gitignore Lore management: a session ledger, a shared chapter-read budget, and a duplicate consolidation window (#437) 2026-08-12 15:32:41 +02:00
.prettierrc fix: prettier, eslint, pipeline (#71) 2026-02-06 00:49:36 +01:00
CLAUDE.md Lore management: a session ledger, a shared chapter-read budget, and a duplicate consolidation window (#437) 2026-08-12 15:32:41 +02:00
compileApk.sh Android build hygiene: minSdk 26, lint in CI, resource cleanup (#468) 2026-08-29 21:52:01 -04:00
components.json fix: prettier, eslint, pipeline (#71) 2026-02-06 00:49:36 +01:00
eslint.config.js Validated release script, extracted version arithmetic, lint config fixes (#416) 2026-08-08 19:55:23 +02:00
lefthook.yml Fix CRLF Migrations (#162) 2026-02-22 15:46:59 -05:00
LICENSE.md Db rework (#140) (#141) 2026-02-13 17:37:27 +05:30
logo.png switched font for logo 2026-01-19 14:48:22 -06:00
package-lock.json chore: bump version to 0.7.9 2026-09-01 20:00:41 -04:00
package.json chore: bump version to 0.7.9 2026-09-01 20:00:41 -04:00
README.md Lore management: a session ledger, a shared chapter-read budget, and a duplicate consolidation window (#437) 2026-08-12 15:32:41 +02:00
sun4.jpg Use custom icon for android 2026-01-03 07:08:45 -07:00
sun17.jpg Use custom icon for android 2026-01-03 07:08:45 -07:00
sun2022.png Use custom icon for android 2026-01-03 07:08:45 -07:00
svelte.config.js fix: prettier, eslint, pipeline (#71) 2026-02-06 00:49:36 +01:00
tsconfig.json Initial commit 2025-12-30 16:08:22 -07:00
vite.config.js fix: prettier, eslint, pipeline (#71) 2026-02-06 00:49:36 +01:00
vitest.config.ts Validated release script, extracted version arithmetic, lint config fixes (#416) 2026-08-08 19:55:23 +02:00

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, .avt story 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
Windows aventuras_x.x.x_x64-setup.exe
macOS aventuras_x.x.x_x64.dmg
Linux aventuras_x.x.x_amd64.deb / .AppImage
Android aventuras-release.apk

No API keys in config files — providers are set up in the app, under Settings → API Settings.

Build from source

Requires Node.js 22+, the latest stable Rust, and (for Android) the Android SDK, NDK r27 and JDK 1724.

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 ESLint — lint:fix to fix
npm run format Prettier
npm run release version bump, tag and push

Desktop builds are npx tauri build; Android is documented in docs/development/release.md.

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 build, lint and type-check on every PR against master, develop or dev.

Acknowledgments

Tauri · SvelteKit · OpenRouter · Harper · Lucide

License

AGPL-3.0