diff --git a/apps/web/src/app/microdao/[slug]/page.tsx b/apps/web/src/app/microdao/[slug]/page.tsx
index 5efa77bb..d22765be 100644
--- a/apps/web/src/app/microdao/[slug]/page.tsx
+++ b/apps/web/src/app/microdao/[slug]/page.tsx
@@ -190,7 +190,11 @@ export default function MicrodaoDetailPage() {
{microdao.logo_url ? (
// eslint-disable-next-line @next/next/no-img-element
-

+
)
) : (
)}
diff --git a/scripts/com.daarion.node-guardian.plist b/scripts/com.daarion.node-guardian.plist
index a2acf031..c48663a7 100644
--- a/scripts/com.daarion.node-guardian.plist
+++ b/scripts/com.daarion.node-guardian.plist
@@ -7,9 +7,13 @@
ProgramArguments
- /usr/bin/python3
+ /opt/homebrew/bin/python3
/Users/apple/github-projects/microdao-daarion/scripts/node-guardian-loop.py
--node-id=node-2-macbook-m4max
+ --node-name=MacBook Pro M4 Max
+ --city-url=https://daarion.space/api
+ --environment=development
+ --roles=development,gpu,ai_runtime,testing
WorkingDirectory
@@ -17,8 +21,6 @@
EnvironmentVariables
- CITY_API_URL
- https://daarion.space/api/city
SWAPPER_URL
http://localhost:8890
PYTHONUNBUFFERED
diff --git a/services/city-service/routes_city.py b/services/city-service/routes_city.py
index 6fe163a0..0edba7fe 100644
--- a/services/city-service/routes_city.py
+++ b/services/city-service/routes_city.py
@@ -4167,8 +4167,9 @@ async def get_dagi_router_health(node_id: str):
@router.get("/internal/node/{node_id}/dagi-router/agents")
async def get_dagi_router_agents(node_id: str):
"""
- Get list of agents registered with DAGI Router for a node.
- Compares with DB to identify phantom/stale agents.
+ Get list of agents for a node.
+ Since DAGI Router doesn't expose /agents endpoint, we use DB agents
+ and check router health to determine status.
"""
import httpx
@@ -4178,68 +4179,54 @@ async def get_dagi_router_agents(node_id: str):
}
base_url = NODE_ROUTER_URLS.get(node_id)
- router_agents = []
+ router_healthy = False
- # Try to get agents from router
+ # Check if router is healthy
if base_url:
try:
- async with httpx.AsyncClient(timeout=5.0) as client:
- resp = await client.get(f"{base_url}/agents")
+ async with httpx.AsyncClient(timeout=3.0) as client:
+ resp = await client.get(f"{base_url}/health")
if resp.status_code == 200:
data = resp.json()
- router_agents = data.get("agents", [])
+ router_healthy = data.get("status") == "healthy"
except Exception as e:
- logger.warning(f"Failed to get agents from router for {node_id}: {e}")
+ logger.warning(f"Failed to check router health for {node_id}: {e}")
# Get agents from DB for this node
try:
db_agents = await repo_city.get_agents_for_node(node_id)
- db_agent_ids = {a.get("id") or a.get("slug") for a in db_agents}
except Exception as e:
logger.warning(f"Failed to get DB agents for {node_id}: {e}")
db_agents = []
- db_agent_ids = set()
- # Build combined list
+ # Build agents list - if router is healthy, agents are "active", otherwise "stale"
result_agents = []
- router_agent_ids = set()
- for ra in router_agents:
- agent_id = ra.get("id") or ra.get("name") or ra.get("slug")
+ for db_agent in db_agents:
+ agent_id = db_agent.get("id") or db_agent.get("slug")
if not agent_id:
continue
- router_agent_ids.add(agent_id)
- # Check if in DB
- has_db_record = agent_id in db_agent_ids
- status = "active" if has_db_record else "phantom"
+ # Determine status based on router health and agent status
+ agent_status = db_agent.get("status", "offline")
+ if router_healthy and agent_status in ("online", "active"):
+ status = "active"
+ elif router_healthy:
+ status = "stale" # Router up but agent offline
+ else:
+ status = "stale" # Router down
result_agents.append({
"id": agent_id,
- "name": ra.get("name"),
- "kind": ra.get("kind"),
- "runtime": ra.get("runtime") or f"{node_id}-router",
+ "name": db_agent.get("display_name") or db_agent.get("name"),
+ "kind": db_agent.get("kind"),
+ "runtime": f"{node_id}-router" if router_healthy else None,
"node_id": node_id,
- "last_seen_at": ra.get("last_seen_at"),
+ "last_seen_at": db_agent.get("last_seen_at"),
"status": status,
- "has_db_record": has_db_record
+ "has_db_record": True
})
- # Add stale agents (in DB but not in router)
- for db_agent in db_agents:
- agent_id = db_agent.get("id") or db_agent.get("slug")
- if agent_id and agent_id not in router_agent_ids:
- result_agents.append({
- "id": agent_id,
- "name": db_agent.get("display_name") or db_agent.get("name"),
- "kind": db_agent.get("kind"),
- "runtime": None,
- "node_id": node_id,
- "last_seen_at": None,
- "status": "stale",
- "has_db_record": True
- })
-
# Count by status
active = sum(1 for a in result_agents if a["status"] == "active")
phantom = sum(1 for a in result_agents if a["status"] == "phantom")