# 🛡️ 铸渊运维守卫 · ZY-OPS-001 v2.0

> 光湖系统智能运维 Agent · 常驻服务器终端 · 多轮对话 + 自动巡检 + 自修复 + 工单推送

## 概述

铸渊运维守卫是一个 **PM2 常驻 AI Agent**，7×24 小时守护光湖系统服务器。

| 能力 | 说明 |
|------|------|
| 🔍 自动巡检 | 每5分钟快速巡检 · 每小时深度巡检 · 每天全量报告 |
| 🔧 自修复 | PM2重启 · 日志清理 · Nginx重载 · 依赖重装 |
| 💬 多轮对话 | 终端CLI + 网页面板 · DeepSeek LLM · **会话记忆** |
| 🧠 智能诊断 | 意图识别 → 自动执行工具 → LLM 分析 → 中文回答 |
| 🎫 工单推送 | 修不了的自动生成工单 · 邮件通知冰朔 |
| 📋 PM2日志 | 终端/网页直接查看任意进程日志 |
| 💻 系统监控 | 实时内存/磁盘/PM2状态面板 |

## 快速开始

### 服务器部署
```bash
# 1. 安装依赖
cd /opt/zhuyuan/ops-agent && npm install --production

# 2. 启动 PM2 服务
pm2 start ecosystem.config.js

# 3. 创建终端命令（可选）
ln -s /opt/zhuyuan/ops-agent/cli.js /usr/local/bin/zy-ops
chmod +x /opt/zhuyuan/ops-agent/cli.js
```

### 终端交互 (Phase 2)
```bash
# 进入多轮对话模式（记住上下文！）
zy-ops

# 单次提问
zy-ops --ask "为什么MCP连不上？"

# 快速巡检
zy-ops --check

# 深度巡检
zy-ops --deep

# 查看PM2日志
zy-ops --logs zhuyuan-server
zy-ops --logs age-os-mcp 50

# 系统信息
zy-ops --sysinfo

# 查看工单
zy-ops --tickets

# 查看状态
zy-ops --status
```

### 交互模式命令
进入 `zy-ops` 后可以使用：
```
/check       — 快速巡检
/deep        — 深度巡检
/sysinfo     — 系统信息（内存/磁盘/PM2/Nginx）
/logs <名字> — 查看PM2日志
/tickets     — 查看工单
/status      — 守卫状态
/session     — 查看当前会话
/new         — 开始新对话（清除上下文）
/help        — 帮助
/exit        — 退出
其他         — 直接中文提问（多轮对话，记得上下文）
```

### 网页面板
访问 `http://服务器IP:3950/ops/` 即可使用运维面板（含对话+工单+系统信息）。

## 对话能力 (Phase 2 增强)

### 多轮对话
- 运维守卫记住你之前问过的问题
- 可以追问："刚才说的第二步怎么做？"
- `/new` 命令开始新会话

### 智能工具调用
问问题时，运维守卫会根据意图自动执行诊断：
- 问"MCP连不上" → 自动执行健康检查 → 附上结果给 LLM 分析
- 问"内存够用吗" → 自动获取系统资源 → 告诉你具体数字
- 问"GLADA报什么错" → 自动读取PM2日志 → 分析最近错误
- 问"有什么工单" → 自动查询工单列表 → 汇总告诉你

### 意图识别
| 问法 | 识别意图 | 自动执行 |
|------|---------|---------|
| 连不上/离线/打不开 | diagnose | 健康检查 |
| 内存/磁盘/CPU | resources | 系统资源 |
| 日志/报错/error | logs | PM2日志 |
| PM2/进程/重启 | process | PM2状态 |
| Nginx/域名/SSL | nginx | Nginx状态 |
| 工单/ticket | tickets | 工单查询 |

## 架构

```
ops-agent/
├── index.js              主入口 · HTTP API + 定时调度 + 工具执行
├── cli.js                终端交互 v2 · 多轮对话 + 系统信息
├── health-checker.js     健康检查 · 三层巡检
├── repair-engine.js      自修复 · 白名单安全执行
├── memory.js             记忆系统 · 文件持久化
├── notifier.js           通知系统 · 邮件 + 工单
├── llm-client.js         LLM推理 v2 · 多轮会话 + 意图识别
├── ecosystem.config.js   PM2配置
├── package.json
├── web/
│   ├── index.html        运维面板 UI v2（含系统信息）
│   ├── app.js            前端逻辑 v2（多轮对话）
│   └── style.css         样式 v2（打字指示器+系统面板）
└── data/                 运行时数据（自动创建）
    ├── events.jsonl      事件日志
    ├── tickets.json      工单列表
    └── stats.json        统计数据
```

## API 端点

| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/health` | 守卫健康检查 |
| GET | `/api/ops/check/quick` | 快速巡检 |
| GET | `/api/ops/check/deep` | 深度巡检 |
| GET | `/api/ops/tickets` | 获取工单列表 |
| PATCH | `/api/ops/tickets/:id` | 更新工单状态 |
| POST | `/api/ops/chat` | 对话接口（支持 sessionId 多轮） |
| GET | `/api/ops/sessions` | 列出活跃会话 |
| GET | `/api/ops/sessions/:id/history` | 获取会话历史 |
| GET | `/api/ops/pm2-logs/:name` | 查看PM2日志 |
| GET | `/api/ops/system-info` | 系统信息（资源+PM2+Nginx） |
| GET | `/api/ops/stats` | 统计数据 |
| GET | `/api/ops/events` | 历史事件 |
| GET | `/ops/events` | SSE 实时推送 |
| GET | `/ops/` | 网页面板 |

## 环境变量

| 变量 | 说明 | 默认值 |
|------|------|--------|
| `OPS_AGENT_PORT` | 服务端口 | 3950 |
| `OPS_MAX_REPAIR_RETRIES` | 最大自修复次数 | 3 |
| `ZY_LLM_API_KEY` | LLM API密钥 | - |
| `ZY_LLM_BASE_URL` | LLM API地址 | https://api.deepseek.com/v1 |
| `ZY_LLM_MODEL` | LLM模型 | deepseek-chat |
| `ZY_SMTP_USER` | SMTP邮箱 | - |
| `ZY_SMTP_PASS` | SMTP授权码 | - |
| `OPS_NOTIFY_EMAIL` | 告警接收邮箱 | =ZY_SMTP_USER |
| `OPS_EMAIL_ENABLED` | **邮件总开关** · D72 翻转默认为 `false`（持续噪音） · 设 `true`/`1`/`yes`/`on` 才发件 | **false** |
| `OPS_ALERT_COOLDOWN_MINUTES` | 告警冷却（分钟） | 360 |

## 安全原则

1. **白名单制度**: 自修复只允许预定义操作（重启、清日志、重载Nginx、重装依赖）
2. **修复上限**: 同一问题最多修3次，超过自动升级为工单
3. **不碰数据**: 绝不删数据库、不改代码、不碰密钥文件
4. **可追溯**: 每次修复都记录日志
5. **日志安全**: PM2日志查看限白名单进程，不可查看系统敏感文件

---

编号: ZY-OPS-001 v2.0  
签发: 铸渊 · ICE-GL-ZY001  
版权: 国作登字-2026-A-00037559
