Files
AzerothAI/README.md
Richard Clark 5f0fc86cf9
Core tests / core (push) Successful in 9m57s
Full verification / application (push) Failing after 5m16s
Full verification / local-brain (push) Failing after 6m15s
Realm simulation / simulated-live-world (push) Failing after 5m32s
WoW integration lab / real-worldserver (push) Canceled after 17m23s
Import verified AzerothAI snapshot from GitHub
Source branch: feature/ai-brain-router
Source commit: c2a09e0460465201a58aaab56c71424e9a96405e
2026-09-22 13:12:54 -04:00

99 lines
6.0 KiB
Markdown

# AzerothAI — Living Realm prototype
A working private web control plane for an AI-populated, self-hosted realm. The real player is the center of the experience: the Realm Director sets the tone, bot identities provide continuity, and the GM console lets the operator stage the world.
**Boundary:** AzerothCore handles movement, combat, inventory, progression, and game rules. AzerothAI owns identity, personality, high-level goals, memory, and relationships. No model gets GM access.
## What runs today
- Dark navy/gold dashboard inspired by the supplied Living Realm mockup.
- Persistent bot creation, spawn, pause, resume, despawn, and retirement.
- Versioned recipes with per-bot snapshots; explicit recipe reapplication.
- Operator memories, generated observation memories, and directed relationships.
- Realm Director updates goals around a named player and focus zone.
- Manual decision loop: observe → assemble context → decide → validate → connector acknowledgment → memory/event.
- Reconnectable SSE event feed with sequence replay and a 500-event retention window.
- Deterministic personality simulator, Ollama provider, and OpenAI-compatible local model provider.
- GM terminal with history and simulated or confirmed live SOAP commands.
- Durable D1/SQLite state with optimistic revision checks and bounded operation leases.
- Modular TypeScript interfaces for additional game connectors and inference providers.
- Live World Monitor for Zaku, population bands, zones, Hardcore deaths, ALE pulse, and system health.
- Disposable playable realm profile for AzerothCore + Playerbots + ALE.
- Temporary Windows-PC/Ubuntu-VM lab profile with Windows-hosted Ollama/Qwen and migration export.
The default demo contains six sample identities and four recipes. **It is not connected to an actual game server or LLM.** Simulation acknowledgments do not mean a character was created in WoW.
## Source layout
```text
app/page.tsx Dashboard and all management views
app/globals.css Navy/gold visual theme and responsive layout
app/api/state/route.ts Persistent realm snapshot
app/api/actions/route.ts Validated commands
app/api/events/route.ts Reconnectable SSE batches
app/api/health/route.ts Configuration availability (no secrets)
core/types.ts Game-neutral contracts and domain types
core/service.ts Lifecycle, recipes, memory, director, audit
core/validation.ts Zod input and decision validation
core/connectors/index.ts Simulation and AzerothCore HTTP bridge adapters
core/llm/index.ts Deterministic, Ollama, compatible providers
core/gm.ts Human-only allowlisted SOAP command channel
core/store.ts D1 repository and optimistic concurrency
core/seed.ts Explicit demo data
db/schema.ts Drizzle schema
drizzle/ Generated schema migrations
docs/CONNECTORS.md Bridge contract and extension guide
docs/OPERATIONS.md Local setup, credentials, limitations
tests/core.test.cjs Core behavior and failure tests
scripts/test-core.mjs Compile/run tests
deploy/playable/ Private playable-realm bootstrap
deploy/pc-lab/ Temporary Windows + Ubuntu VM lab
```
## Local quick start
Use Node 22.13+ and the pnpm version pinned in `package.json`. The project runs locally with Cloudflare's Worker emulator and SQLite; no paid cloud account or model is required for simulation.
```bash
corepack enable
pnpm install --frozen-lockfile
pnpm build
node --import ./scripts/sites-env.mjs ./node_modules/wrangler/bin/wrangler.js d1 execute DB --local --config dist/server/wrangler.json --persist-to .wrangler/state --file drizzle/0000_old_deathbird.sql
pnpm start
```
Open the loopback URL printed by Wrangler (normally http://127.0.0.1:8787). `pnpm start` is local, not a deployment. Preserve `.wrangler/state` for persistence. The managed Work environment uses its supervised preview instead.
For live integrations, copy `.env.example` to `.dev.vars`, populate the needed settings, and restart the local runtime. Do not commit that file. Hosted settings are supplied separately through the hosting platform. A cloud-hosted app cannot reach your home server's `localhost`.
## Fastest path to a playable temporary lab
For a Windows gaming PC with an Ubuntu VM, use `deploy/pc-lab/README.md`. It keeps WoW and Qwen/Ollama on Windows while AzerothCore, Playerbots, ALE, MySQL, and AzerothAI run inside the VM.
For a dedicated Linux host, use `deploy/playable/README.md`.
## Try the intended flow
1. Open Realm Director. Pick the experience, enter your character and zone, and apply your brief.
2. Create an offline bot with a recipe. Open its profile and spawn it in simulation.
3. Add a memory and a relationship. Run a decision and inspect the resulting intent.
4. Edit its recipe. Notice that the bot keeps its old snapshot until explicitly updated.
5. Open GM Console and try `.announce Welcome to the realm!`. The response is labeled simulated.
6. Watch Event Stream and reload the app to verify state persists.
## Checks
```bash
node node_modules/typescript/bin/tsc --noEmit
node scripts/test-core.mjs
pnpm build
```
## Integration status
The GM SOAP client is implemented against AzerothCore's documented remote-access protocol; live execution needs your server and credentials. The bot HTTP connector is an implemented client for **our bridge contract**, not an assertion that stock AzerothCore exposes those endpoints. A game-side adapter for your actual core/Playerbots branch still needs implementation and end-to-end testing.
AzerothCore version/client selection must be settled before that adapter is written; a Classic-style experience does not establish compatibility with the modern WoW Classic client. This prototype deliberately stores no client-version assumption in its domain model.
See [operations](docs/OPERATIONS.md) for operational limits and [connectors](docs/CONNECTORS.md) for API contracts.