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
}
```
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-
标签:AI智能体, GNU通用公共许可证, MCP, MITM代理, Node.js, Slack应用, 自动化攻击, 运维监控