NathanTarbert/incident-copilot
GitHub: NathanTarbert/incident-copilot
基于CopilotKit和OpenAI构建的AI驱动网络安全事件响应仪表板,通过自然语言对话实现事件分诊、报告生成和威胁趋势分析。
Stars: 1 | Forks: 1
# incident-copilot
基于 **CopilotKit** + **OpenAI** 构建的 AI 驱动事件响应仪表板。通过对话方式对网络安全事件进行分诊,在 Human-in-the-Loop 聊天中填写报告表单,深入分析单个事件并查看跨事件时间轴,以及查看涵盖十年全球网络安全威胁(2015–2024)的图表。
## 技术栈
- **前端:** React + TypeScript + Vite, CopilotKit (`@copilotkit/react-core`, `@copilotkit/react-ui`), Recharts
- **后端:** Node + Express + `@copilotkit/runtime` 与 OpenAI 适配器
- **LLM:** OpenAI via `OpenAIAdapter`
- **数据:** [全球网络安全威胁 (2015–2024)](https://www.kaggle.com/datasets/atharvasoundankar/global-cybersecurity-threats-2015-2024/data) (参见 `README_DATASET.md`)
- **测试:** Vitest + Testing Library
## 运行说明
### 前置条件
- Node.js 20.19+ 或 22.12+
- pnpm — [安装](https://pnpm.io/installation)
- 一个 OpenAI API 密钥
### 设置
```
git clone https://github.com/NathanTarbert/incident-copilot.git
cd incident-copilot
pnpm install
cp .env.example .env # then paste your OPENAI_API_KEY
```
### 启动所有服务器
```
pnpm dev:all
```
- 前端: http://localhost:5173 (Vite)
- 后端: http://localhost:4000/copilotkit (CopilotKit 运行时)
### 或分别运行
```
pnpm dev:server # one terminal — Express + runtime
pnpm dev # another — Vite
```
### 测试
```
pnpm test # one-shot
pnpm test:watch # watch mode
```
## 应用功能
- **事件列表与详情** — 严重程度 P0–P4,状态包括 Open / Investigating / Mitigated / Resolved,支持排序和过滤。
- **AI 侧边栏** — `CopilotSidebar` 聊天组件,可读取应用状态并触发前端工具。
- **对话式事件报告** — AI 在聊天中填充结构化的 `ChatIncidentForm`,由用户审查并提交(经典的 HITL 模式)。
- **工具调用可视化** — Runbook 执行卡片、分析面板和跨事件时间轴通过工具结果在聊天内嵌渲染。
- **图表** — 基于 Recharts 的网络安全威胁数据集事件图表。
## CopilotKit 接入方式
前端使用 `` 和 `` 包裹应用。三个集成点承担了主要工作:
- **`useCopilotReadable`** — 与 Agent 共享实时事件列表和选择状态。
- **`useFrontendTool`** — 注册约 9 个可供 Agent 调用的工具(报告/解决/清除事件、填充聊天表单、导航至详情视图、运行 runbook 等)。
- **`useRenderToolCall`** — 在聊天线程内直接渲染特定工具调用的自定义 React UI(runbook 卡片、分析面板)。
后端 (`server.js`) 将 `copilotRuntimeNodeHttpEndpoint` 挂载到 `/copilotkit` 上并配合 `OpenAIAdapter`,使每个请求都能携带最新的应用上下文访问 OpenAI。
## 项目结构
```
incident-copilot/
├── server.js # Express + CopilotKit runtime + OpenAI adapter
├── src/
│ ├── App.tsx # CopilotKit provider, sidebar, frontend tools
│ ├── components/
│ │ ├── IncidentsList.tsx # Sort + filter incidents
│ │ ├── IncidentDetail.tsx # Per-incident detail view
│ │ ├── ChatIncidentForm.tsx # HITL form rendered inside the sidebar
│ │ ├── CrossIncidentTimeline.tsx
│ │ ├── AnalysisPanel.tsx
│ │ ├── RunbookExecutionCard.tsx
│ │ └── charts/IncidentCharts.tsx
│ ├── services/
│ │ ├── incidentDatabase.ts # In-memory store
│ │ └── mockApi.ts # Async wrapper
│ ├── data/ # Cybersecurity threats dataset
│ └── types/incident.ts
├── README_DATASET.md # How the dataset is wired in
└── package.json
```
## 配置
| 变量 | 描述 | 是否必需 |
|---|---|---|
| `OPENAI_API_KEY` | 由运行时的 OpenAI 适配器使用。 | 是 |
后端端口 (`4000`) 和前端的 `runtimeUrl` 在 `server.js` 和 `src/App.tsx` 中保持一致 — 如果需要使用其他端口,请同时更改这两处。
## 部署
作为单个 Node 服务进行部署。在生产环境中,`server.js` 绑定到 `process.env.PORT`,从 `dist/` 提供 Vite 构建产物,并在同源地址的 `/copilotkit` 路径上挂载运行时 — 无需 CORS,无需启动第二个服务。
- **构建:** `pnpm install --frozen-lockfile && pnpm build`
- **启动:** `pnpm start`
- **环境变量:** `NODE_ENV=production`, `OPENAI_API_KEY`, `VITE_COPILOTKIT_RUNTIME_URL=/copilotkit`
在本地运行生产包以进行健全性检查:
```
pnpm build
OPENAI_API_KEY=sk-... pnpm start # http://localhost:4000
```
## 故障排除
- **`Agent 'default' not found`** — 确保 `pnpm dev:server` 正在运行,并且 `App.tsx` 中的 `runtimeUrl` 匹配。
- **`OPENAI_API_KEY is not set`** — 填写 `.env` 文件并重启服务器。
- **端口 4000 已被占用** — `lsof -ti:4000 | xargs kill -9`。
## 了解更多
- [CopilotKit 文档](https://docs.copilotkit.ai/)
- [OpenAI API](https://platform.openai.com/docs/)
基于 **CopilotKit** + **OpenAI** 构建的 AI 驱动事件响应仪表板。通过对话方式对网络安全事件进行分诊,在 Human-in-the-Loop 聊天中填写报告表单,深入分析单个事件并查看跨事件时间轴,以及查看涵盖十年全球网络安全威胁(2015–2024)的图表。
## 技术栈
- **前端:** React + TypeScript + Vite, CopilotKit (`@copilotkit/react-core`, `@copilotkit/react-ui`), Recharts
- **后端:** Node + Express + `@copilotkit/runtime` 与 OpenAI 适配器
- **LLM:** OpenAI via `OpenAIAdapter`
- **数据:** [全球网络安全威胁 (2015–2024)](https://www.kaggle.com/datasets/atharvasoundankar/global-cybersecurity-threats-2015-2024/data) (参见 `README_DATASET.md`)
- **测试:** Vitest + Testing Library
## 运行说明
### 前置条件
- Node.js 20.19+ 或 22.12+
- pnpm — [安装](https://pnpm.io/installation)
- 一个 OpenAI API 密钥
### 设置
```
git clone https://github.com/NathanTarbert/incident-copilot.git
cd incident-copilot
pnpm install
cp .env.example .env # then paste your OPENAI_API_KEY
```
### 启动所有服务器
```
pnpm dev:all
```
- 前端: http://localhost:5173 (Vite)
- 后端: http://localhost:4000/copilotkit (CopilotKit 运行时)
### 或分别运行
```
pnpm dev:server # one terminal — Express + runtime
pnpm dev # another — Vite
```
### 测试
```
pnpm test # one-shot
pnpm test:watch # watch mode
```
## 应用功能
- **事件列表与详情** — 严重程度 P0–P4,状态包括 Open / Investigating / Mitigated / Resolved,支持排序和过滤。
- **AI 侧边栏** — `CopilotSidebar` 聊天组件,可读取应用状态并触发前端工具。
- **对话式事件报告** — AI 在聊天中填充结构化的 `ChatIncidentForm`,由用户审查并提交(经典的 HITL 模式)。
- **工具调用可视化** — Runbook 执行卡片、分析面板和跨事件时间轴通过工具结果在聊天内嵌渲染。
- **图表** — 基于 Recharts 的网络安全威胁数据集事件图表。
## CopilotKit 接入方式
前端使用 `标签:CopilotKit, DLL 劫持, Express, GNU通用公共许可证, HITL, MITM代理, Node.js, OpenAI, React, Recharts, Syscalls, TypeScript, Vite, 人工智能, 人机协同, 仪表盘, 内存规避, 可视化图表, 大语言模型, 威胁分析, 安全报告, 安全插件, 安全运营, 对话式AI, 扫描框架, 用户模式Hook绕过, 网络安全, 自动化侦查工具, 自动化分诊, 自动化攻击, 隐私保护