Repository navigation
Allay Server 6.0.0
For Allay 6.0, which sends the credentials this version wants. Breaking: Allay 5.x gets 401 from this backend; update the plugin first, then the backend. A self-hosted backend needs PLUGIN_TOKEN in its environment and the same value in the plugin's server.token.
- 🔐 Every request says who sends it. A hosted backend wants the server's license on every plugin request, a self-hosted one its new
PLUGIN_TOKEN(24 characters or more, compared in constant time). Without one configured, a self-hosted backend answers no plugin instead of everyone. Only health, license creation, and Telegram's webhook stay open; a test walks the route table to keep it so. - 🧱 Servers never see each other's players. Memories, sessions, task threads, task outcomes, and the public thread are kept per tenant (
license:<id>orself) and player. Before, anyone who knew a player's UUID could read, add to, or wipe their memories through/api/v2/users, or send theiruser_idto/api/v2/chatand have the agent read out their memories and session; another server's public thread opened to anyone who sent itsserver.id. - 🔑 BYOK needs a license as identity. It's free from
POST /api/v2/licenseand pays for nothing. Limits count per license instead of theserver.ida request claimed, all BYOK servers together take at mostBYOK_ACTIVE_RUNS(100) slots so paying servers keep theirs, and a blocked license can't ask with its own key either. - 🧰 Tool results only from the run's own server.
POST /api/v2/chat/{run}/tools/{call}wants the same credentials as the question; another tenant's answer gets404. - 🚪
/allay initonly for the backend's own plugin.POST /api/v2/admin/initwantsPLUGIN_TOKEN: its recovery code resets any admin's password, and before anyone who reached the backend could ask for one. - 🌐 Client addresses come only from trusted proxies. New settings
TRUSTED_PROXIESandCLIENT_IP_HEADER: forwarding headers count only when the peer is a proxy the operator named,X-Forwarded-Foris read from the right, and an IPv6 /64 counts as one address. Behind a proxy, license creation and the panel's sign-in limits no longer share one bucket, and nobody can spoof their way around them. Moonlands-style setups setTRUSTED_PROXIESto their proxy's address. - 🕵️ Players are pseudonyms in the statistics. Runs keep a keyed digest of the player instead of their UUID and name; the panel lists and searches players by it, and finds one from a UUID an operator types. The digest's key comes from
SECRETS_KEY. - 🗑️ Export and erasure per player (GDPR).
GET /api/v2/users/{id}returns everything kept about a player,DELETEerases it: memories, sessions, outcomes, agents' threads, and their traces go, runs keep only numbers. Admins erase a player from the Players page by server and UUID; the audit log keeps only the pseudonym. - ⏳ Data doesn't stay forever. Memories go 365 days after a player's last question, audit entries after 365 days, and days older than 400 keep how many players they had, not who.
- 🧹 Less in logs and answers. Logs carry run ids and tenants, never player names, ids, or questions; errors from inside the backend reach the client as a code without the details;
/api/healthno longer shows the process's memory and uptime; API answers carrynosniff,DENYframing, andno-referrer; bodies are capped at 2 MB. - 🛡️ BYOK requests can't be bounced inside. Every request to a server's own provider checks its address again and refuses redirects; NAT64, 6to4, and benchmark ranges count as private too.
- 👀 Viewers no longer see who paid. Telegram ids of payers show to admins and owners only.
- 🐳 The stock
docker-compose.yamlpublishes only the backend, on 127.0.0.1. MongoDB and Redis have no ports and want their passwords (MONGO_INITDB_ROOT_*,REDIS_PASSWORD);MONGODB_URIcarries the user with?authSource=admin. - 🚚 Data moves on its own. On start, memories get their tenant (
selfon a self-hosted backend), runs lose players' ids and names, and sessions from before 6.0, which carry no tenant, are dropped.bun run dist/application/migrate.js retag --from self --to license:<id>moves an imported self-hosted dump to a license;statusandpurge-untaggedhelp around it.
docker pull ghcr.io/allay-ai/server:6.0.0