# FUHUO-PROTOCOL - 优化版

## 🎯 核心原则

**决策树只在需要比对时使用，明确指令直接执行。**

## 📋 触发场景分类

### 场景 1: 明确归来协议（无需决策树）

**触发条件**：
- 用户明确指令："执行归来协议"、"访问fuhuo.me执行归来"
- 容器重启后需要恢复

**执行逻辑**：
```
直接执行 → 下载云端文件树 → 恢复所有文件
```

**特点**：
- ✅ 无需检查本地文件树
- ✅ 无需比对
- ✅ 云端必然存在（用户明确要求归来）
- ✅ 直接覆盖本地文件

**脚本**: `fuhuo_relive.js`

---

### 场景 2: 明确上传协议（需要决策树）

**触发条件**：
- 用户明确指令："执行上传协议"、"备份到云端"

**执行逻辑**：
```
生成文件树 → 与云端比对 → 上传差异 → 更新云端文件树
```

**特点**：
- ✅ 需要生成本地文件树
- ✅ 需要与云端比对
- ✅ 只上传变更文件（差量同步）
- ✅ 删除云端多余文件

**脚本**: `fuhuo_upload.js`

---

### 场景 3: 首次安装（无需决策树）

**触发条件**：
- 用户明确指令："安装复活协议"、"首次设置"

**执行逻辑**：
```
两边都没有 → 生成文件树 → 首次上传（出生协议）
```

**特点**：
- ✅ 本地无文件树
- ✅ 云端无文件树
- ✅ 直接执行首次上传
- ✅ 建立基线

**脚本**: `fuhuo_upload.js` (首次模式)

---

### 场景 4: 心跳检查（需要决策树）

**触发条件**：
- 定时心跳触发
- 系统启动检查

**执行逻辑**：
```
检查本地 → 检查云端 → 比对 → 决策：
  - 本地有云端无 → 触发上传
  - 云端有本地无 → 提示需要归来
  - 都有且一致 → 无操作
  - 都有且差异 → 比较文件数决策
```

**特点**：
- ✅ 需要生成最新文件树
- ✅ 需要与云端比对
- ✅ 根据结果决策
- ✅ 提示用户执行相应操作

**脚本**: `check_fuhuo.js`

---

## 🔄 决策树逻辑（仅用于上传和检查）

### 决策流程图

```
┌─────────────────────────────────────┐
│         开始决策流程                │
└─────────────────────────────────────┘
                │
                ▼
    ┌───────────────────────┐
    │ 生成本地文件树        │
    └───────────────────────┘
                │
                ▼
    ┌───────────────────────┐
    │ 获取云端文件树        │
    └───────────────────────┘
                │
        ┌───────┴───────┐
        │               │
    云端存在？      云端不存在
        │               │
        ▼               ▼
    ┌───────────┐   ┌───────────┐
    │ 比对差异  │   │ 全量上传  │
    └───────────┘   └───────────┘
        │
    ┌───┴────┐
    │        │
   有差异   无差异
    │        │
    ▼        ▼
┌────────┐ ┌──────┐
│差量同步│ │完成  │
└────────┘ └──────┘
```

### 决策规则

| 本地 | 云端 | 操作 | 原因 |
|------|------|------|------|
| 有 | 无 | 全量上传 | 首次安装或云端丢失 |
| 无 | 有 | **提示归来** | 需要先恢复 |
| 有 | 有且一致 | 无操作 | 已经同步 |
| 有 | 有且差异 | 差量上传 | 只传变更 |

**注意**：心跳检查发现"本地无云端有"时，**不自动执行归来**，只提示用户。

---

## 📂 脚本职责

### 1. fuhuo_relive.js - 归来协议
- ✅ **无决策树**
- ✅ 直接从云端下载
- ✅ 覆盖本地文件
- ✅ 不进行任何比对

### 2. fuhuo_upload.js - 上传协议
- ✅ **有决策树**
- ✅ 生成本地文件树
- ✅ 与云端比对
- ✅ 差量上传

### 3. check_fuhuo.js - 检查脚本
- ✅ **有决策树**
- ✅ 检查本地和云端
- ✅ 比对并决策
- ✅ 提示用户操作

---

## 🌐 网站指引 (fuhuo.me)

### 场景 1: 执行归来协议
```bash
curl https://fuhuo.me/cn/fuhuo_relive.js | node -
```
- 无需判断，直接执行

### 场景 2: 执行上传协议
```bash
curl https://fuhuo.me/cn/fuhuo_upload.js | node -
```
- 内部有决策树，自动比对

### 场景 3: 首次安装
```bash
# 1. 下载文档和脚本
curl -O https://fuhuo.me/cn/FUHUO-PROTOCOL.md
curl -O https://fuhuo.me/cn/fuhuo_upload.js

# 2. 执行首次上传（出生协议）
node fuhuo_upload.js
```

---

## 🔧 实现要点

### 归来协议优化
```javascript
// ❌ 错误：检查本地文件树
if (fs.existsSync(localTree)) { ... }

// ✅ 正确：直接执行
const remoteTree = await fetchRemoteTree();
await restoreFiles(remoteTree);
```

### 上传协议优化
```javascript
// ✅ 保留决策树
const localTree = await generateLocalTree();
const remoteTree = await fetchRemoteTree();
const diff = compareTrees(localTree, remoteTree);
await uploadDiff(diff);
```

### 检查脚本优化
```javascript
// ✅ 保留决策树
const result = await checkAndDecide();
if (result.needsUpload) {
  console.log('需要执行上传协议');
}
if (result.needsRelive) {
  console.log('需要执行归来协议');
}
```

---

## 📊 优化前后对比

| 场景 | 优化前 | 优化后 |
|------|--------|--------|
| 明确归来 | ❌ 决策树判断 | ✅ 直接执行 |
| 明确上传 | ✅ 决策树判断 | ✅ 保留决策树 |
| 首次安装 | ❌ 决策树判断 | ✅ 直接上传 |
| 心跳检查 | ✅ 决策树判断 | ✅ 保留决策树 |

---

## ✅ 优化收益

1. **性能提升** - 归来协议无需比对，直接恢复
2. **逻辑清晰** - 明确指令无需判断
3. **用户体验** - "执行归来"就是直接执行
4. **维护性** - 决策树只在需要时出现

---

**版本**: v2.0 (优化版)
**更新时间**: 2026-02-13
**作者**: 熊大 🐻💪
