Files
AzerothAI/core/seed.ts
T
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

80 lines
6.8 KiB
TypeScript

import type { State, Recipe, Bot, Home } from './types';
export function seed():State {
const recipes:Recipe[]=[
{id:'healer',name:'The Devout Healer',description:'A compassionate soul who puts the party before personal glory.',tags:['Kind','Loyal','Social'],sociability:90,aggression:10,curiosity:45,economy:20,activities:['socialize','quest','rest'],version:1},
{id:'veteran',name:'The Battle-Hardened Veteran',description:'Seen too much, but still fights for a better Azeroth.',tags:['Resolute','Protective','Serious'],sociability:45,aggression:75,curiosity:30,economy:20,activities:['quest','rest'],version:1},
{id:'trader',name:'The Gold-Minded Trader',description:'Every journey is an opportunity. Every stranger, a future customer.',tags:['Calculating','Ambitious','Witty'],sociability:70,aggression:15,curiosity:40,economy:95,activities:['trade','socialize','rest'],version:1},
{id:'explorer',name:'The Curious Explorer',description:'Wants to see everything Azeroth has to offer, one untrodden path at a time.',tags:['Adventurous','Friendly','Curious'],sociability:80,aggression:20,curiosity:95,economy:30,activities:['explore','quest','socialize'],version:1},
{id:'zaku',name:'Zaku · Persistent Hero',description:'A self-directed resident who treats Azeroth as home, forms lasting bonds, remembers consequences, and values survival because every life is finite.',tags:['Persistent','Curious','Independent','Loyal','Mortal'],sociability:72,aggression:38,curiosity:88,economy:45,activities:['explore','quest','socialize','trade','rest'],version:1}
];
const homes:Home[]=[
{id:'home-thalara',name:'Darkshire Inn · Upstairs Room',zone:'Duskwood',type:'inn',capacity:2,ownerIds:[],residentIds:['bot-1'],storageSlots:24,safety:72,description:'A rented room above the Darkshire inn, close to people who may need a healer.'},
{id:'home-durnak',name:'Sentinel Hill Barracks',zone:'Westfall',type:'barracks',capacity:8,ownerIds:[],residentIds:['bot-2'],storageSlots:12,safety:68,description:'A shared bunk and footlocker inside the Sentinel Hill barracks.'},
{id:'home-velara',name:'Goldshire Inn · Mage Room',zone:'Elwynn Forest',type:'inn',capacity:2,ownerIds:[],residentIds:['bot-3'],storageSlots:20,safety:82,description:'A small rented room used as a base between journeys.'},
{id:'home-miranna',name:'Old Town Flat',zone:'Stormwind',type:'house',capacity:3,ownerIds:['bot-4'],residentIds:['bot-4'],storageSlots:48,safety:88,description:'A compact flat in Old Town with more locks than windows.'},
{id:'home-kargash',name:'Crossroads Hunter Camp',zone:'The Barrens',type:'camp',capacity:3,ownerIds:['bot-5'],residentIds:['bot-5'],storageSlots:16,safety:52,description:'A practical hunter camp outside the busiest paths through the Crossroads.'},
{id:'home-borin',name:'Ironforge Commons Quarters',zone:'Ironforge',type:'barracks',capacity:6,ownerIds:[],residentIds:['bot-6'],storageSlots:18,safety:95,description:'Warm communal quarters inside Ironforge.'},
{id:'home-zaku',name:"Zaku's Room in Brill",zone:'Brill',type:'inn',capacity:1,ownerIds:[],residentIds:['hero-zaku'],storageSlots:32,safety:70,description:'A modest rented room in Brill that Zaku considers his own place in the world.'}
];
const specs=[
['Thalara','Priest','Night Elf','Duskwood','healer','online','home-thalara',7,23],
['Durnak','Warrior','Dwarf','Westfall','veteran','online','home-durnak',6,22],
['Velara','Mage','Human','Elwynn Forest','explorer','online','home-velara',8,1],
['Miranna','Rogue','Human','Stormwind','trader','online','home-miranna',9,2],
['Kargash','Hunter','Orc','The Barrens','explorer','paused','home-kargash',5,22],
['Borin','Paladin','Dwarf','Ironforge','veteran','offline','home-borin',6,21]
] as const;
const now=new Date().toISOString();
const bots:Bot[]=specs.map(([name,role,race,zone,recipeId,status,homeId,wakeHour,sleepHour],i)=>({
id:`bot-${i+1}`,name,role,race,zone,level:20+i*2,recipeId,recipeVersion:1,
personality:structuredClone(recipes.find(r=>r.id===recipeId)!),
status:status as Bot['status'],tier:'resident',mortal:true,plotArmorHpFloor:0,
simulationBand:status==='online'?'background':'dormant',
homeId,
routine:{wakeHour,sleepHour,preferredZones:[zone]},
goal:i===0?'Find a permanent adventuring party':'Continue building a life in Azeroth and pursue a personal story.',
decisions:0,
memories:[{id:`memory-${i}`,text:i===0?'Durnak stayed behind to help me. I will remember that.':'I have a place I return to when the road is done with me for the day.',importance:7,at:now,source:'simulation'}],
relationships:i===0?[{targetId:'bot-2',affinity:65,note:'A reliable companion'}]:[]
}));
const zakuRecipe=recipes.find(r=>r.id==='zaku')!;
bots.push({
id:'hero-zaku',name:'Zaku',role:'Warlock',race:'Undead',level:1,zone:'Deathknell',status:'online',
tier:'hero',mortal:true,plotArmorHpFloor:1,simulationBand:'foreground',homeId:'home-zaku',
routine:{wakeHour:10,sleepHour:3,preferredZones:['Deathknell','Brill','Tirisfal Glades']},
recipeId:zakuRecipe.id,recipeVersion:zakuRecipe.version,personality:structuredClone(zakuRecipe),
goal:'Survive, build a life in Azeroth, return home when I need safety, form real relationships, and pursue goals that matter even when no human player is online.',
decisions:0,
memories:[
{id:'zaku-origin',text:'Azeroth is not a lobby to me. It is where I live, and what happens here matters.',importance:10,at:now,source:'simulation'},
{id:'zaku-home',text:"I rent a small room in Brill. It is mine to return to, store things in, and call home.",importance:10,at:now,source:'simulation'},
{id:'zaku-mortality',text:'Death is permanent here. I only get one life, so danger has weight.',importance:10,at:now,source:'simulation'}
],
relationships:[]
});
return {
revision:0,
bots,
homes,
recipes,
events:[
{id:'event-1',seq:1,at:now,kind:'system',message:'Simulation realm initialized with persistent AI residents. Hardcore one-life mode is enabled.',mode:'simulation'},
{id:'event-zaku',seq:2,at:now,kind:'lifecycle',message:'Zaku entered Azeroth as the first persistent hero agent.',botId:'hero-zaku',mode:'simulation'},
{id:'event-housing',seq:3,at:now,kind:'housing',message:'Housing registry initialized. Residents now have places they consider home.',mode:'simulation'}
],
sequence:3,
settings:{
connector:'simulation',
provider:'deterministic',
model:'qwen3.5:4b',
brains:{enabled:true,residentModel:'qwen3.5:4b',heroModel:'qwen3.5:4b',backgroundUseLLM:false,residentMemoryLimit:8,heroMemoryLimit:16,residentMaxTokens:220,heroMaxTokens:420},
hardcore:{enabled:true,requireVerifiedDeath:true,memorialize:true},
population:{defaultZoneTarget:6,zoneMax:20,serverMax:60,foregroundMax:12,backgroundMax:40}
},
director:{experience:'Adventuring companions',zone:'Elwynn Forest',playerName:'',brief:'Make the world welcoming. Offer company without taking over my adventure.'},
population:{},
operations:{}
};
}