## Why Entry numbers already exist and are already how a reader names a place in the story — the navigation panel jumps to one, the timeline panel labels its findings with one, a narration's Response info reports its own. But the number is only ever visible where one of those surfaces happens to print it. Reading the story itself, a reader cannot see where they are; and the Memory panel, which is entirely about which stretch of story a chapter covers, never named that stretch — a chapter card said `26 entries` and its expanded list showed untitled excerpts with no way back to the text they came from. ## What changed **Memory panel** - A chapter card reports the range of entries it covers beside the count, marked with a milestone glyph: `26 entries (3 → 29)`. The two figures are derived independently — on a story whose numbering has gaps they disagree, and both are true, so neither is adjusted to match the other. A one-entry chapter names its entry once rather than as a range to itself. - Each row of an expanded chapter shows its entry number, and the row itself jumps to that entry. The list says so above it. - The ten-row cap on that list is gone. It hid entries the card's new range advertises. **Story view** - A new Appearance setting, *Show Entry Number and Time*, off by default, puts a narration's number and the in-story time it covers on the entry, each marked by a glyph rather than a label. The number keeps a fixed place on the header at every width; the time sits there where there is room and moves to a row of its own where there is not. - Player actions and system entries are excluded: an action is an instant with no span to show, and a system entry is an application message rather than story. Where a narration records no time, it says so rather than showing nothing. **Entry header sizing** — a fix found along the way The header hid its chips and folded its toolbar on viewport breakpoints, which could never fire on desktop: `tauri.conf.json` floors the window at 800px and the gate sat at 640px. Worse, the thing that actually narrows the story column is a panel opening beside it, which a media query cannot see at all. The entry card is now a query container and its header gives way against its own width, in order: the in-story time drops to its own row, then the turn-duration chip goes, then the token count, then the buttons fold into the overflow menu. ## Notable - **The duration chip and its fallback are decided by one measurement.** The chip toggles the generation-activity timeline, and its fallback is a toggle in Response info — which renders in a portal outside the card, where no container query can reach. Gating the two separately left a band of widths where the chip had gone and the overflow menu had not yet arrived, so a report auto-opened during generation could not be closed. One measured card width now decides both, so exactly one of them exists at any width. - `jumpToEntry` consolidates the guard-request-switch-confirm sequence that `StoryNavPanel` and `BranchPanel` had each inlined. They had already drifted: one closed the nav panel on mobile and the other the sidebar; one reported "not in this branch" on a miss and the other reported nothing. - `retry` entries are treated as narrations. No code path creates one any more, and every other reader in the tree already treats an old `retry` entry as a narration. ## Testing `npm run check`, `npm test` and `npm run lint` all pass; 11 new unit tests cover `jumpToEntry` and `entryNumberRange`, including the gapped-numbering case. Not yet exercised: the narrowest header grades need a card under ~27rem, which an 800px window floor cannot produce — those want the Android emulator. The container also establishes a containing block for fixed-position descendants; the Response info popover portals to the document body and so escapes it, but the overflow menu is worth a look in a running app. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added an option to show entry numbers and in-story times on story entries. * Chapter cards now display entry counts and entry number ranges. * Chapter entry lists now show all entries with numbered navigation buttons. * Improved navigation to entries, including mobile panel handling and clearer confirmations. * **UI Improvements** * Updated entry layouts to adapt across screen sizes. * Activity details remain accessible when space is limited. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 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 |
|---|---|
| Windows | Aventuras_vX.Y.Z_x64-setup.exe |
| macOS | Aventuras_vX.Y.Z_x64.dmg / _aarch64.dmg |
| Linux | Aventuras_vX.Y.Z_amd64.deb / .AppImage, or _x86_64.rpm |
| Android | Aventuras_vX.Y.Z.apk |
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, and (for Android)
the Android SDK, NDK r27d and JDK 21–24.
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 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