skx56/Relay-AI-Incident-Commander-for-Slack

GitHub: skx56/Relay-AI-Incident-Commander-for-Slack

Relay 是一个 Slack 原生的 AI 事故响应协调工具,通过多 Agent 架构和 MCP 协议将单条故障消息转化为完整的作战室创建、任务分配、状态追踪和自动复盘流程。

Stars: 0 | Forks: 0

# Relay — Slack 的 AI 事件指挥官 ## 🏆 Devpost 提交详情 - **黑客松赛道:** New Slack Agent Track - **开发者沙盒 URL:** `[https://slackaitryon.slack.com]` *(注:已授予 `slackhack@salesforce.com` 和 `testing@devpost.com` 访问权限)* - **Slack App ID:** `[A0BF1UKUW0J]` *(证明在黑客松期间向 Slack Marketplace 提交/重新提交)* - **黑客松期间的更新:** 这是一个在黑客松提交期间完全从零开始构建的全新应用程序。 ## 架构 ``` graph TD %% Styling classDef slack fill:#4A154B,stroke:#fff,stroke-width:2px,color:#fff; classDef agent fill:#0F9D58,stroke:#fff,stroke-width:2px,color:#fff; classDef tool fill:#4285F4,stroke:#fff,stroke-width:2px,color:#fff; classDef db fill:#F4B400,stroke:#fff,stroke-width:2px,color:#fff; User([👤 Slack User]):::slack subgraph BoltApp ["Slack Bolt App (Socket Mode)"] Orch[⚡️ Orchestrator Agent
Coordinates Workflow]:::agent Ctx[🔍 Context Agent
Gemini Flash + Slack History]:::agent Router[🛣️ Router Agent
Gemini Flash + Task Decomp]:::agent Digest[📊 Digest/Postmortem Agent
Gemini Flash + Summarization]:::agent end subgraph MCPServer ["Custom MCP Task Server"] MCP[🔌 MCP Server
@modelcontextprotocol/sdk]:::tool SQLite[(🗄️ SQLite Database)]:::db end %% Flows User -- "1. @Relay SEV-1: API down" --> Orch Orch -- "2. Retrieve past incidents" --> Ctx Orch -- "3. Break down incident into tasks" --> Router Router -- "4. create_task tool call" --> MCP MCP -- "5. Persist tasks" --> SQLite User -- "6. @Relay status 1 in_progress" --> MCP User -- "7. @Relay digest / postmortem" --> Digest Digest -- "8. list_tasks tool call" --> MCP Digest -- "9. Generate structured report" --> User ``` **技术栈:** Node.js · TypeScript · `@slack/bolt` · `@google/genai` (Gemini 2.5) · `@modelcontextprotocol/sdk` · SQLite ## 设置 ### 1. 克隆并安装 ``` npm install cd mcp-server && npm install && cd .. ``` ### 2. 配置环境 ``` cp .env.example .env # 填写 SLACK_BOT_TOKEN、SLACK_APP_TOKEN、GEMINI_API_KEY ``` ### 3. 创建 Slack App 1. 前往 [api.slack.com/apps](https://api.slack.com/apps) → **Create New App** → **From Scratch**。 2. 在 **OAuth & Permissions** 下,添加 Bot Token Scopes: - `app_mentions:read` - `chat:write` - `channels:history` - `channels:manage` (创建 `#incident-` 作战室频道时必需) - `groups:history` 3. 在 **Event Subscriptions** → **Subscribe to bot events** 下:添加 `app_mention`。 4. 在 **Socket Mode** 下:启用它。生成一个带有 `connections:write` 的 **App-Level Token**。 5. 将应用安装到你的工作区并复制 `Bot User OAuth Token` → `SLACK_BOT_TOKEN`。 6. 复制 App-Level Token → `SLACK_APP_TOKEN`。 ### 4. 运行 ``` npm run dev ``` Slack Bolt 应用将自动生成 MCP Task Tracker 服务器作为子进程。 ## 命令 | 命令 | 描述 | |---|---| | `@Relay SEV-: ` | 声明新事件 — 创建作战室、检索上下文、生成任务 | | `@Relay digest [incident_id]` | 获取最新的实时高管状态摘要 | | `@Relay status ` | 更新 MCP 跟踪器中的任务状态 | | `@Relay postmortem [incident_id]` | 根据频道历史记录生成结构化复盘 | ## 项目结构 ``` . ├── src/ │ ├── app.ts # Bolt app entry point + event routing │ ├── db.ts # SQLite schema + queries (incidents) │ ├── mcp-client.ts # MCP client singleton (spawns mcp-server) │ └── agents/ │ ├── orchestrator.ts # Orchestrator Agent (sequence coordinator) │ ├── context.ts # Context Agent (RTS-style search + Gemini summary) │ ├── router.ts # Router Agent (Gemini JSON decomp + MCP create) │ ├── digest.ts # Digest Agent (MCP list + Gemini summary + Block Kit) │ └── postmortem.ts # Postmortem Agent (Channel history + Gemini summary) ├── mcp-server/ │ └── src/ │ ├── index.ts # MCP server (create_task, list_tasks, update_task) │ └── db.ts # SQLite schema + queries (tasks) ├── data/ # Auto-created — SQLite DB files (gitignored) ├── .env.example └── package.json ``` ## 数据契约 ``` { "incident_id": "inc_1234567890_abc12", "title": "SEV-1: Payment API outage", "severity": "1", "incident_channel_id": "C0XXXXXXXXX", "description": "Payment API outage. Customers cannot complete checkout.", "context": [ { "channel": "C0XXXXXXXXX", "ts": "1234567890.123456", "summary": "Prior outage discussion." } ], "tasks": [ { "task_id": "1", "title": "Investigate Payment API logs", "assignee_slack_id": null, "external_ref_id": "1", "status": "todo", "due_date": null } ], "last_digest_ts": null } ```
标签:AI智能体, GNU通用公共许可证, MCP, MITM代理, Node.js, Slack应用, 自动化攻击, 运维监控