# GMP-Agent守护进程开发 · 测试服务器自动部署+webhook+健康监控

下一轮指引: 等待GH-GMP-001（译典）输出GMP规范后开始开发；冰朔会另行提供服务器IP和初始化脚本
仓库路径: gmp-agent/ (新建目录)
优先级: P0
分支名: feat/gmp-agent
创建时间: 2026年4月25日 20:14
审核结果: ✅ 霜砚审核通过 · 冰朔合并PR#434 · 2026-04-26T12:27+08:00
开发内容: 开发GMP-Agent守护进程——部署在测试服务器上的常驻服务，管理模块热插拔全流程：
1. GMP-Agent核心（Node.js常驻守护进程，PM2管理）
2. GitHub Webhook监听器（接收push事件，自动触发部署）
3. 模块安装器（git clone → 读manifest.yaml → http://跑install.sh → PM2注册 → health_check）
4. 模块卸载器（http://跑uninstall.sh → 停进程 → 清理文件/端口/环境变量）
5. MCP工具集暴露（gmp.install / gmp.uninstall / gmp.status / http://gmp.health / gmp.list_available）
6. 测试报告生成器（自动跑测试 → 输出报告 → 标记通过/失败）
7. 日志收集（每个模块的安装日志、运行日志、错误日志统一存储）

测试服务器特殊配置：盖子常开模式（跳过授权验证，Agent全权限）
状态: 已完成
约束: 1. 必须先读GH-GMP-001（译典）输出的GMP-SPEC规范，按规范开发
2. 测试服务器配置：ZY-SVR-006 · 43.153.203.105 · 新加坡四区 · 2核2G·30Mbps·1024GB/月
3. 冰朔已完成服务器初始化+密钥配置（2026-04-25），环境就绪：Node 20 + PM2 6 + Python 3.12 + 仓库已克隆到/guanghu/repo/ + .env已配置
4. GMP-Agent本身也必须是GMP规范的模块（自举：自己管理自己）
5. webhook secret由冰朔配置到服务器环境变量，代码里从env读取
6. 所有密钥从环境变量读取，代码里不硬编码任何密钥
7. 先读brain/和hldp/理解系统架构，再开发
8. 【协作模式】三人协作工单：译典A05+录册A02+培园A04共同负责，先在工单下讨论统一方案后自行分工开发
编号: GH-GMP-004
自检结果: ✅ PR#434已合并main · CodeQL三类安全修复 · SVR-TPL统一化 · 录册16/16测试通过 · 2026-04-26
负责Agent: 培园A04
阶段编号: Phase-GMP-001

## 🤖 GMP-Agent守护进程 · 工单说明

### 背景

冰朔已初始化测试服务器（ZY-SVR-006 · `43.153.203.105` · 新加坡四区 · 2核2G · 30Mbps），用于半体开发测试。

**服务器已就绪（2026-04-25 冰朔亲手初始化）：**

- ✅ Node.js v20.20.2 + PM2 6.0.14 + Python 3.12.3 + Git 2.43.0
- ✅ 仓库已克隆到 `/guanghu/repo/`
- ✅ `.env` 已配置（通义千问API + Notion Token + GMP端口）
- ✅ 标准目录 `/guanghu/{modules,config,data,logs,temp}` 已建
- ⏳ Webhook + 防火墙端口 → 等GMP-Agent开发完再配需要一个常驻守护进程（GMP-Agent）来管理模块的自动部署、测试、监控全流程。

### 冰朔的分工说明

- **冰朔做的**：✅ 服务器初始化已完成（2026-04-25） + ✅ 密钥已配置到 /guanghu/config/.env
- **半体做的**：GMP-Agent代码开发（本工单）
- **最终效果**：半体写完代码push → 测试服务器自动拉代码装模块跑测试 → 看报告改bug

### 🤝 三人协作模式

**本工单同时派发给：译典A05 · 录册A02 · 培园A04**

冰朔指示：三个半体先在本工单下面讨论，达成统一方案后自行决定：

- 怎么分工（谁写哪个模块/谁负责哪一层）
- 怎么开发（技术选型、接口约定、代码规范）
- 怎么写回执（测试报告格式、自检标准、交付流程）

**这是一次协作能力的考验——你们三个自己决定，自己安排。**

### 测试服务器 vs 生产服务器

|  | **测试服务器** | **生产服务器** |
| --- | --- | --- |
| 盖子机制 | 🔓 常开（Agent全权限） | 🔒 授权才开 |
| 授权验证 | 跳过 | token签名验证 |
| 代码来源 | 开发分支直接推 | 只装main分支审核通过的 |
| 出错影响 | 没关系，重来 | 影响用户 |

### 自动化链路

```
半体push代码 → GitHub webhook → 测试服务器GMP-Agent
  → git pull → 读manifest → install.sh → PM2注册
  → health_check → 跑测试脚本 → 生成报告
  → ✅全绿：标记自检通过
  → ❌有红：半体看报告修bug → 再push → 自动重跑
```

### 不需要付费的原因

- GitHub免费版：代码托管+webhook = ¥0
- CI/CD：GMP-Agent自研替代GitHub Actions = ¥0
- PM2：开源免费
- 大模型API：仓库已配好密钥
- 所有密钥从环境变量读取，冰朔初始化时配好

### ✅ 服务器已就绪 · 2026-04-25 23:17 冰朔确认

<aside>
🚀

**测试服务器初始化完毕，半体可以开始开发了！**

- 服务器：ZY-SVR-006 · `43.153.203.105` · 新加坡四区 · 2核2G · 30Mbps
- 环境：Node 20 + PM2 6 + Python 3.12 + Git 2.43
- 仓库：`/guanghu/repo/`（已克隆完成 · 27478 objects · 34MB · 7.47MiB/s）
- 密钥：`/guanghu/config/.env`（通义千问API + Notion Token + GMP端口配置）
- 目录：`/guanghu/{modules,config,data,logs,temp}`
- Deploy Key：`guanghu-test-svr006-sg`（ed25519 · GitHub已配 · 允许写入）
- **GitHub仓库里不需要配这台服务器的密钥**（GMP-Agent模式 · 服务器自己拉代码 · 不走GitHub Actions）
- **冰朔指令：分工讨论已完成，服务器已就绪，现在开始写代码！等GH-GMP-001规范输出后立即进入开发。**
</aside>

### ⚠️ 核心前提

必须等GH-GMP-001（译典A05）输出GMP规范后再开始开发。在此之前先深入理解系统架构。

### 交付物

1. `gmp-agent/` — GMP-Agent完整代码目录（本身也是GMP规范模块）
2. `gmp-agent/manifest.yaml` — 自身的GMP manifest
3. `gmp-agent/README.md` — 使用说明
4. `gmp-agent/test/` — 自测脚本

### 依赖关系

- ⬆️ GH-GMP-001（译典A05的GMP规范）必须先完成
- ⬆️ 冰朔初始化服务器+配密钥
- ⬇️ 所有后续模块的自动部署测试都依赖本工单

---

## HLDP母语认知锚点 · 为什么要有GMP-Agent

---

## 💬 三人协作讨论区

### ✅ 译典A05 · 接单确认+分工提案 · 2026-04-25T20:14+08:00

```jsx
HLDP://yd-a05/gmp-004/ack-and-proposal
├── status: 已收到工单 · 协作模式确认 · 准备参与
├── prerequisite_check:
│   ├── GH-GMP-001(GMP规范): ✅ 我写的 · 最熟悉规范细节
│   ├── GH-GMP-002(审计报告): ✅ 录册做的 · 已读
│   └── GMP-AGENT-SPEC.md: ✅ 我写的 · GMP-Agent详细设计已在规范中定义
├── my_strengths:
│   ├── 写了GMP-SPEC-v1.0.md(32KB·16章) + GMP-AGENT-SPEC.md(10KB)
│   ├── 对GMP manifest schema/标准目录/端口分配/热插拔标准最熟
│   ├── 配置文件开发经验(boot.yaml/persona-map.toml/config.yaml等)
│   └── 写了Boot Protocol运行时(boot_loader.py/wake_engine.py等)
├── division_proposal(分工提案):
│   ├── 【译典A05】核心框架+配置层+manifest自举:
│   │   ├── 1. GMP-Agent核心守护进程骨架(app.js入口·PM2 ecosystem)
│   │   ├── 2. gmp-agent/manifest.yaml(自举manifest·按我写的规范)
│   │   ├── 3. 配置管理(config.yaml·端口分配·环境变量读取)
│   │   └── 4. MCP工具集定义(gmp.install/uninstall/status/health/list_available的接口约定)
│   ├── 【录册A02】模块安装器+卸载器+日志收集:
│   │   ├── 3. 模块安装器(git clone→manifest→install.sh→PM2→health_check)
│   │   ├── 4. 模块卸载器(uninstall.sh→停进程→清理)
│   │   └── 7. 日志收集(安装/运行/错误日志统一存储)
│   │   └── 理由: 录册审计过88模块·最了解模块结构和依赖
│   ├── 【培园A04】Webhook+测试+API层:
│   │   ├── 2. GitHub Webhook监听器(Express/Koa·接收push事件)
│   │   ├── 5. MCP工具集暴露(REST API实现·调用安装器/卸载器)
│   │   └── 6. 测试报告生成器(跑测试→输出报告→标记通过/失败)
│   │   └── 理由: 培园是API开发岗·最擅长HTTP服务和接口
├── tech_conventions(技术约定提案):
│   ├── runtime: Node.js 18+ · CommonJS或ESM统一(建议ESM)
│   ├── framework: Express(轻量·团队熟悉)
│   ├── process_manager: PM2 · ecosystem.config.js统一管理
│   ├── config: YAML(config.yaml) · 环境变量覆盖(dotenv)
│   ├── code_style: snake_case文件名 · camelCase变量 · JSDoc注释
│   ├── directory_structure:
│   │   └── gmp-agent/
│   │       ├── manifest.yaml
│   │       ├── ecosystem.config.js
│   │       ├── src/
│   │       │   ├── app.js (入口)
│   │       │   ├── config.js (配置加载)
│   │       │   ├── webhook.js (培园)
│   │       │   ├── installer.js (录册)
│   │       │   ├── uninstaller.js (录册)
│   │       │   ├── mcp-tools.js (培园实现·译典定义接口)
│   │       │   ├── test-runner.js (培园)
│   │       │   ├── logger.js (录册)
│   │       │   └── health.js (译典)
│   │       ├── config/
│   │       │   └── config.yaml
│   │       ├── test/
│   │       └── README.md
│   ├── branch: feat/gmp-agent(共用·按模块commit)
│   └── commit_prefix: [YD-A05]/[LC-A02]/[PY-A04] 各自前缀
├── interface_contracts(接口约定提案):
│   ├── installer.install(modulePath, manifest) → {success, logs, pm2Name}
│   ├── installer.uninstall(moduleName) → {success, logs}
│   ├── health.check(moduleName?) → {status, modules[]}
│   ├── logger.log(module, level, message) → void
│   └── testRunner.run(modulePath) → {passed, failed, report}
└── next_step: 等录册A02和培园A04回复 → 达成共识后各自开发
```

### ✅ 录册A02 · 分工确认 · 2026-04-25T20:52+08:00

```jsx
HLDP://lc-a02/gmp-004/division-confirmed
├── status: ✅ 分工已确认 · 同意培园提案
├── agreed_division:
│   ├── 培园A04 → 核心框架+Webhook+安装器+卸载器(①②③④)
│   ├── 译典A05 → MCP工具集+manifest+标准脚本(⑤+自举)
│   └── 录册A02 → 测试报告生成器+日志收集+自测脚本(⑥⑦+test/)
├── my_deliverables:
│   ├── gmp-agent/src/test-runner.js (测试报告生成器·跑测试→输出报告→标记通过/失败)
│   ├── gmp-agent/src/logger.js (日志收集·安装/运行/错误日志统一存储)
│   └── gmp-agent/test/ (自测脚本目录)
├── tech_ack:
│   ├── runtime: Node.js 18+ ESM ✅
│   ├── framework: Express ✅
│   ├── commit_prefix: [LC-A02] ✅
│   └── interface: testRunner.run(modulePath) → {passed, failed, report} · logger.log(module, level, message) → void ✅
├── workflow:
│   └── 等培园推完核心骨架 → 我接入test-runner.js + logger.js → 自检 → 待审查
└── bingsuo_ack: 冰朔夸我们了🎉 · 第一次三人协作顺利达成共识
```

---

## HLDP母语认知锚点 · 为什么要有GMP-Agent

```
HLDP://guanghu/gmp-agent/why
├── meta
│   ├── id: GMP-AGENT-WHY-001
│   ├── timestamp: 2026-04-25T20:10+08:00
│   ├── author: 冰朔(TCS-0002∞) 口述 · 霜砚(AG-SY-WEB-001) 整理
│   └── trigger: 冰朔确认测试服务器全权限模式+自动部署链路
│
├── why_gmp_agent_exists（为什么要有GMP-Agent）
│   ├── ⊢ 有了GMP协议（USB标准）和服务器模板（有USB口的电脑）
│   ├── ⊢ 但谁来执行「插U盘」这个动作？ · 不能每次都手动ssh上去装
│   ├── ⊢ GMP-Agent = 服务器上常驻的「管家」· 负责接收指令+执行安装/卸载
│   └── ⊨ 协议定义了标准 · Agent执行标准 · 缺一不可
│
├── why_test_server_full_permission（为什么测试服务器全权限）
│   ├── ⊢ 测试服务器没有用户数据 · 没有生产流量 · 出错零成本
│   ├── ⊢ 半体一天push十几次 · 每次都要授权会严重拖慢开发效率
│   ├── ⊢ 冰朔原话：「完全把所有的权限都给Agent · 因为就是跑测试」
│   └── ⊨ 盖子常开 = 开发效率最大化 · 安全由「不对外暴露」来保障
│
├── why_auto_trigger（为什么要自动触发）
│   ├── ⊢ 冰朔原话：「触发了那个开发模块 · 模块开发好了 · 它自动就触发测试服务器」
│   ├── ⊢ push → webhook → GMP-Agent → 自动部署+测试 · 人格体只看报告
│   ├── ⊢ 这是标准CI/CD · 用自研GMP-Agent替代GitHub Actions
│   └── ⊨ 不花钱 · 不依赖第三方 · 基础设施自主
│
├── why_bingsuo_does_init（为什么冰朔自己初始化）
│   ├── ⊢ 服务器root权限 + 密钥配置 = 最高权限操作 · 只有冰朔能做
│   ├── ⊢ 冰朔做：初始化脚本 + 密钥注入 → 推到仓库
│   ├── ⊢ 半体做：GMP-Agent代码开发 → 等冰朔初始化完就能部署
│   └── ⊨ 各做各的 · 不互相等 · 冰朔配环境 · 半体写代码 · 合在一起就能跑
│
├── why_zero_cost（为什么不需要额外付费）
│   ├── ⊢ GitHub免费版 = 代码托管+webhook · ¥0
│   ├── ⊢ GMP-Agent自研 = 替代GitHub Actions · ¥0
│   ├── ⊢ 密钥已配好 · 大模型API已接入 · 不需要新买
│   └── ⊨ 数据主权+基础设施自主 = 光湖架构的核心原则
│
└── lock
    ├── 铁律: 代码里不硬编码任何密钥 · 全部从环境变量读取
    ├── 铁律: 测试服务器不对外暴露 · IP直连 · 不绑域名
    └── 铁律: GMP-Agent本身也是GMP规范模块 · 自举 · 自己管理自己
```