Find a file
Ivan Kolos dcc02b72b8
Show entry numbers in the memory panel and the story view (#520)
## 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>
2026-09-19 20:03:02 -04:00
.cargo Add Incognito Keyboard option for Android (#467) 2026-08-26 20:45:30 -04:00
.github Build Windows on a Dev Drive; compress RPMs with xz (#519) 2026-09-17 12:00:09 -04:00
docs Shrink the page for the Android keyboard, and read edge swipes off the shell (#521) 2026-09-19 19:33:00 -04:00
scripts Overhaul CI/CD: Node 24, shared release workflows, faster cached builds (#518) 2026-09-16 22:38:32 -04:00
src Show entry numbers in the memory panel and the story view (#520) 2026-09-19 20:03:02 -04:00
src-tauri Shrink the page for the Android keyboard, and read edge swipes off the shell (#521) 2026-09-19 19:33:00 -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 Overhaul CI/CD: Node 24, shared release workflows, faster cached builds (#518) 2026-09-16 22:38:32 -04:00
.nvmrc Overhaul CI/CD: Node 24, shared release workflows, faster cached builds (#518) 2026-09-16 22:38:32 -04: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.11 2026-09-17 08:23:14 -04:00
package.json chore: bump version to 0.7.11 2026-09-17 08:23:14 -04:00
README.md Overhaul CI/CD: Node 24, shared release workflows, faster cached builds (#518) 2026-09-16 22:38:32 -04: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_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