{
  "module": "ejabberd",
  "version": "1.0",
  "purpose": "Ejabberd XMPP 服务器运行在 Linux (246)，是整个 Agent 通信系统的底层消息总线。所有的 Agent（xxm、mohe、zhiwei、xiaoguo）都通过它建立群聊（MUC）和私聊。",
  "ui_location": "Infrastructure tab → Ejabberd",

  "human_help": {
    "title": "Ejabberd（XMPP 服务器）",
    "description": [
      "Ejabberd 是一个开源的 XMPP（Extensible Messaging and Presence Protocol）服务器。在这个系统中，它是所有 Agent 之间通信的底层基础设施。",
      "每个 Agent 有一个 JID（Jabber ID，类似邮箱地址），例如 xxm@yoin.fun。Agent 们在 coregroup@conference.yoin.fun 群聊中收发消息。",
      "Ejabberd 如果挂掉，所有 Agent 之间的消息都无法传递。dashboard 本身、WeChat Bridge、Hermes API 等都不依赖 Ejabberd（它们走 HTTP）。"
    ],
    "usage": [
      "监控状态：Infrastructure → Ejabberd 显示 ALIVE 或 DOWN",
      "同时能看到当前在线的 JID 列表（online_jids）",
      "如果显示 DOWN：必须立即登录 Linux 恢复"
    ],
    "troubleshooting": [
      "Ejabberd 挂掉时：ssh 到 246，运行 systemctl status ejabberd 查看状态",
      "重启：sudo systemctl restart ejabberd",
      "如果 Agent 连不上：检查 ejabberd 配置是否有对应的 JID 注册",
      "端口 3021：客户端连接（C2S），开启 STARTTLS"
    ],
    "related": "F 健康 tab 查看 XMPP bot 连接状态、G 规范查看 Agent 通信协议"
  },

  "ai_spec": {
    "apis": [
      {"method": "GET", "path": "/api/ejabberd", "returns": "{alive, xmpp_bot_connected, online_jids[], bot_jid}", "desc": "Ejabberd 存活状态 + 在线 JID 列表"}
    ],
    "dependencies": [
      "Ejabberd 本身不依赖其他服务",
      "Agent 们依赖 Ejabberd 收发消息"
    ],
    "constraints": [
      "Dashboard 通过 HTTP API 检测 Ejabberd 健康（非 XMPP 协议直连）",
      "online_jids 从 ejabberd API 获取（mod_admin_extra 需要开启）",
      "xmpp_bot_connected 标识是否有至少一个 xmpp_agent_core 实例在线"
    ],
    "related_files": [
      "gateway/scripts/dashboard.py — /api/ejabberd 端点",
      "gateway/scripts/templates/dashboard.html — fI() 状态展示",
      "gateway/scripts/specs/ejabberd.json — 本 spec 文件"
    ]
  }
}
