feat: Add Alateya, Clan, Eonarch agents + fix gateway-router connection
## Agents Added - Alateya: R&D, biotech, innovations - Clan (Spirit): Community spirit agent - Eonarch: Consciousness evolution agent ## Changes - docker-compose.node1.yml: Added tokens for all 3 new agents - gateway-bot/http_api.py: Added configs and webhook endpoints - gateway-bot/clan_prompt.txt: New prompt file - gateway-bot/eonarch_prompt.txt: New prompt file ## Fixes - Fixed ROUTER_URL from :9102 to :8000 (internal container port) - All 9 Telegram agents now working ## Documentation - Created PROJECT-MASTER-INDEX.md - single entry point - Added various status documents and scripts Tokens configured: - Helion, NUTRA, Agromatrix (existing) - Alateya, Clan, Eonarch (new) - Druid, GreenFood, DAARWIZZ (configured)
This commit is contained in:
85
scripts/fix_neo4j_schema.py
Normal file
85
scripts/fix_neo4j_schema.py
Normal file
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Fix Neo4j schema - add missing relationships ASKED_ABOUT, WORKS_ON"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
|
||||
NEO4J_URL = "http://localhost:7474/db/neo4j/tx/commit"
|
||||
AUTH = ("neo4j", "DaarionNeo4j2026!")
|
||||
HEADERS = {"Content-Type": "application/json"}
|
||||
|
||||
def run_query(statement):
|
||||
"""Execute a single Cypher statement"""
|
||||
payload = {"statements": [{"statement": statement}]}
|
||||
resp = requests.post(NEO4J_URL, auth=AUTH, headers=HEADERS, json=payload)
|
||||
data = resp.json()
|
||||
if data.get("errors"):
|
||||
print(f"ERROR: {data['errors']}")
|
||||
return None
|
||||
return data
|
||||
|
||||
# Step 1: Add telegram_user_id alias to all User nodes
|
||||
print("1. Adding telegram_user_id to User nodes...")
|
||||
run_query("""
|
||||
MATCH (u:User)
|
||||
WHERE u.telegram_id IS NOT NULL AND u.telegram_user_id IS NULL
|
||||
SET u.telegram_user_id = u.telegram_id
|
||||
RETURN count(u) as updated
|
||||
""")
|
||||
|
||||
# Step 2: Create Topics
|
||||
print("2. Creating Topics...")
|
||||
topics = ["EcoMiner", "BioMiner", "DAO Governance", "Tokenomics", "Staking", "Infrastructure"]
|
||||
for topic in topics:
|
||||
run_query(f"MERGE (t:Topic {{name: '{topic}'}}) RETURN t")
|
||||
print(f" Created {len(topics)} topics")
|
||||
|
||||
# Step 3: Create Projects
|
||||
print("3. Creating Projects...")
|
||||
projects = ["Energy Union", "MicroDAO Daarion", "Helion Agent"]
|
||||
for project in projects:
|
||||
run_query(f"MERGE (p:Project {{name: '{project}', status: 'active'}}) RETURN p")
|
||||
print(f" Created {len(projects)} projects")
|
||||
|
||||
# Step 4: Create ASKED_ABOUT relationships
|
||||
print("4. Creating ASKED_ABOUT relationships...")
|
||||
run_query("""
|
||||
MATCH (u:User {username: 'ivantytar'})
|
||||
MATCH (t:Topic) WHERE t.name IN ['EcoMiner', 'BioMiner', 'Tokenomics']
|
||||
MERGE (u)-[:ASKED_ABOUT {count: 1, last_asked: datetime()}]->(t)
|
||||
RETURN count(*) as created
|
||||
""")
|
||||
|
||||
# Step 5: Create WORKS_ON relationships
|
||||
print("5. Creating WORKS_ON relationships...")
|
||||
run_query("""
|
||||
MATCH (u:User {username: 'ivantytar'})
|
||||
MATCH (p:Project) WHERE p.name IN ['Energy Union', 'MicroDAO Daarion']
|
||||
MERGE (u)-[:WORKS_ON {role: 'founder', since: datetime()}]->(p)
|
||||
RETURN count(*) as created
|
||||
""")
|
||||
|
||||
# Step 6: Create indexes
|
||||
print("6. Creating indexes...")
|
||||
run_query("CREATE INDEX topic_name IF NOT EXISTS FOR (t:Topic) ON (t.name)")
|
||||
run_query("CREATE INDEX project_name IF NOT EXISTS FOR (p:Project) ON (p.name)")
|
||||
run_query("CREATE INDEX user_telegram_id IF NOT EXISTS FOR (u:User) ON (u.telegram_user_id)")
|
||||
|
||||
# Verify
|
||||
print("\n=== Verification ===")
|
||||
result = run_query("CALL db.relationshipTypes()")
|
||||
if result:
|
||||
types = [row["row"][0] for row in result.get("results", [{}])[0].get("data", [])]
|
||||
print(f"Relationship types: {types}")
|
||||
|
||||
result = run_query("""
|
||||
MATCH (u:User {username: 'ivantytar'})-[r]->(n)
|
||||
RETURN type(r) as rel, labels(n)[0] as node, n.name as name
|
||||
""")
|
||||
if result:
|
||||
print("\nivantytar's relationships:")
|
||||
for row in result.get("results", [{}])[0].get("data", []):
|
||||
r = row["row"]
|
||||
print(f" -{r[0]}-> {r[1]}: {r[2]}")
|
||||
|
||||
print("\n✅ Neo4j schema updated!")
|
||||
Reference in New Issue
Block a user