Find a file
Tony Frazier 01760675d4
Some checks are pending
CI / build-desktop (push) Waiting to run
CI / build-android (push) Waiting to run
CI / build-ios (push) Waiting to run
Polyfill global Buffer so ComfyUI socket messages are handled (#632)
## Summary

`@saintno/comfyui-sdk@0.3.1` tests `z.data instanceof ArrayBuffer ||
z.data instanceof Buffer` on every socket message, with no guard
([comfy-addons/comfyui-sdk#32](https://github.com/comfy-addons/comfyui-sdk/pull/32)).
`Buffer` is undeclared in the WebView, so every message that isn't an
`ArrayBuffer` (all JSON status, progress and `executed` events) throws a
`ReferenceError` inside the handler's `try` and the SDK drops it.
ComfyUI generations never see progress or completion.

This installs a real `globalThis.Buffer` from the `buffer` npm package.

## Changes

- Add `buffer@^6.0.3` and set `globalThis.Buffer ??= Buffer` in
`providers/comfy.ts`, next to the only code that needs it. `??=` leaves
Node's `Buffer` alone under vitest.
- A stub class would not do: `ai-sdk-pollinations` calls
`globalThis.Buffer.from(...).toString('base64')` whenever a global
`Buffer` exists, and liquidjs calls `Buffer.isBuffer`. The real package
handles both.
- `package-lock.json` was re-derived with npm. Besides adding
`buffer@6.0.3` at the top level (the existing 5.7.1 now nests under
`@jimp/core`), the re-resolve moved some nested copies around and bumped
`@internationalized/date` from 3.12.3 to 3.12.4.

## Testing

- `aubr check`, `aube test` and `aubr lint:fix` pass; `aubr build`
prints no "externalized for browser compatibility" warning.
- Not covered by the suite, since vitest runs in Node where `Buffer`
always exists. Still to do by hand: `tauri dev` against a running
ComfyUI, one image per built-in mode, confirming progress updates and
the finished image arrive.

## Follow-up

The upstream fix,
[comfyui-sdk#33](https://github.com/comfy-addons/comfyui-sdk/pull/33),
guards the check with `typeof Buffer !== "undefined"` and reads
`event.data`. It is still open and unreleased (latest is 0.3.1). Once an
SDK release includes it, this polyfill can be dropped.

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

https://claude.ai/code/session_01Skpo6psWSMbdzbMiBscyGi

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 16:06:27 -04:00
.cargo Add Incognito Keyboard option for Android (#467) 2026-08-26 20:45:30 -04:00
.github Keep a generation running in the background on iOS (#626) 2026-10-18 15:01:14 +05:30
docs Drop Imagen and the fallback list from the Google image profile (#630) 2026-10-19 13:35:26 -04:00
scripts Harden the HTTP plugin transport: body timeouts, no Origin, decompression, OS roots (#622) 2026-10-18 13:27:54 -04:00
src Polyfill global Buffer so ComfyUI socket messages are handled (#632) 2026-10-19 16:06:27 -04:00
src-tauri Harden the HTTP plugin transport: body timeouts, no Origin, decompression, OS roots (#622) 2026-10-18 13:27:54 -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 Cache Gradle again and share one npm cache entry on Linux (#613) 2026-10-12 00:49:33 -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 WIP, Part 1 of 2 - State Tracking: record every world-state write, and create checkpoints at past entries (#618) 2026-10-16 21:14:03 -04:00
compileApk.sh Android build hygiene: minSdk 26, lint in CI, resource cleanup (#468) 2026-08-29 21:52:01 -04:00
eslint.config.js Harden the HTTP plugin transport: body timeouts, no Origin, decompression, OS roots (#622) 2026-10-18 13:27:54 -04:00
lefthook.yml Run Clippy on push and in CI, and split lint into lint:ts and lint:rust (#608) 2026-10-11 14:50:50 -04: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 Polyfill global Buffer so ComfyUI socket messages are handled (#632) 2026-10-19 16:06:27 -04:00
package.json Polyfill global Buffer so ComfyUI socket messages are handled (#632) 2026-10-19 16:06:27 -04:00
README.md Keep a generation running in the background on iOS (#626) 2026-10-18 15:01:14 +05:30
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
tsconfig.json Type-check vitest.config.ts and note TypeScript 6's strict default (#616) 2026-10-12 13:27:22 -04:00
vite.config.js Upgrade to SvelteKit 3, TypeScript 6 and vitest 5, and bump dependencies (#615) 2026-10-12 12:29:54 -04:00
vitest.config.ts Upgrade to SvelteKit 3, TypeScript 6 and vitest 5, and bump dependencies (#615) 2026-10-12 12:29:54 -04: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 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 26

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 3 · Svelte 5 runes · Tauri 2 (Rust) · Tailwind + bits-ui · 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