# 防止重复保存的改进方案

## 问题

如果会话一直维持在 70% 以上但没有新消息，会不会每 30 分钟重复保存？

## 解决方案 - 四重检查机制

### 1. Token 阈值检查
```
Token < 70% → 跳过
```

### 2. 会话活跃度检查 ⭐ 新增
```
会话超过 30 分钟未更新 → 跳过
```
- 检查 `session.ageMs`（距上次更新的时间）
- 如果超过 30 分钟，说明会话已停止
- 不会保存静止的会话

### 3. 冷却期检查
```
距上次保存 < 30 分钟 → 跳过
```

### 4. Token 增长检查 ⭐ 新增
```
Token 数量未变化 → 跳过
```
- 记录上次保存时的 token 数量
- 如果 token 没有增长，说明没有新对话
- 避免重复保存同一状态

## 实际场景

### 场景 1: 正常对话触发
```
[对话进行中]
Token: 150k/200k (75%)
Age: 5 分钟
✅ 达到阈值
✅ 会话活跃
✅ 过了冷却期
✅ Token 有增长
→ 保存
```

### 场景 2: 会话停止（不会重复保存）
```
[30 分钟前停止对话]
Token: 150k/200k (75%)
Age: 35 分钟
✅ 达到阈值
❌ 会话已超过 30 分钟未活跃
→ 跳过
```

### 场景 3: Token 未增长（不会重复保存）
```
[刚保存完，继续对话但 token 未变]
Token: 150k/200k (75%)
Age: 2 分钟
Last tokens: 150k
Current tokens: 150k
✅ 达到阈值
✅ 会话活跃
❌ Token 未增长
→ 跳过
```

### 场景 4: 冷却期保护
```
[刚保存完 10 分钟]
Token: 155k/200k (77.5%)
Age: 2 分钟
✅ 达到阈值
✅ 会话活跃
✅ Token 有增长
❌ 距上次保存仅 10 分钟
→ 跳过（等到 30 分钟后）
```

## 状态文件结构

```json
{
  "lastSave": {
    "agent:main:main": 1771533737755
  },
  "lastTokens": {
    "agent:main:main": 150000
  },
  "history": [...]
}
```

## 总结

**四重保护机制：**
1. ✅ Token 阈值（70%）
2. ✅ 会话活跃度（30 分钟内有更新）
3. ✅ 冷却期（30 分钟）
4. ✅ Token 增长检测

**效果：**
- 不会重复保存静止的会话
- 不会保存没有新内容的会话
- 只在真正需要时保存
- 完全避免了重复保存问题

**测试结果：**
```
✅ 活跃会话（Age: 0 分钟）→ 正常检查
✅ 冷却期会话（6 分钟前保存）→ 跳过
✅ 停止会话（Age: 55 分钟）→ 跳过
```

完美解决了重复保存的问题！🎉
