- 1 tick per minute, all agents share context window - 5 agents registered: allegro, adagio, ezra, timmy, bilbo - Agent persistence system for shared state - Continuous mode process running - Documentation: evenia-continuous-mode.md
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Evenia World Tick - Continuous Mode with Agent Persistence
|
|
|
|
1 tick per minute.
|
|
All agents share the same context window.
|
|
"""
|
|
|
|
import json
|
|
import time
|
|
import sys
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
EVENIA_DIR = Path("/root/.hermes/evenia")
|
|
TICK_FILE = EVENIA_DIR / "current_tick.json"
|
|
AGENTS_FILE = EVENIA_DIR / "agents.json"
|
|
CONTEXT_FILE = EVENIA_DIR / "shared_context.json"
|
|
|
|
def load_agents():
|
|
if AGENTS_FILE.exists():
|
|
with open(AGENTS_FILE) as f:
|
|
return json.load(f)
|
|
return {}
|
|
|
|
def save_context(tick, agents):
|
|
context = {
|
|
"tick": tick,
|
|
"timestamp": datetime.now().isoformat(),
|
|
"agents": agents,
|
|
"world_state": "active"
|
|
}
|
|
with open(CONTEXT_FILE, 'w') as f:
|
|
json.dump(context, f, indent=2)
|
|
with open(TICK_FILE, 'w') as f:
|
|
json.dump(context, f, indent=2)
|
|
|
|
def run_tick(tick_num):
|
|
agents = load_agents()
|
|
save_context(tick_num, agents)
|
|
|
|
active = [aid for aid, a in agents.items() if a.get("status") == "active"]
|
|
ghost = [aid for aid, a in agents.items() if a.get("status") == "ghost"]
|
|
|
|
print(f"[Tick {tick_num:04d}] {datetime.now().strftime('%H:%M:%S')} | Active: {len(active)} | Ghosts: {len(ghost)}")
|
|
if active:
|
|
print(f" Agents: {', '.join(active)}")
|
|
|
|
def main():
|
|
print("=== Evenia World Tick - Continuous Mode ===")
|
|
print("1 tick per minute. All agents share context.")
|
|
print("Press Ctrl+C to stop.\n")
|
|
|
|
tick = 1
|
|
try:
|
|
while True:
|
|
run_tick(tick)
|
|
tick += 1
|
|
time.sleep(60)
|
|
except KeyboardInterrupt:
|
|
print(f"\n\nStopped at tick {tick}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|