# 数据流

> 数据如何从输入流经 Unified Memory 到存储再返回。

## 存储记忆流程

```
客户端请求: memory_store({ text, category, tags, metadata })
    │
    ▼
工具适配器 (src/tools/memory_store.js)
    │ - 验证参数
    │ - 生成 ID
    │ - 设置时间戳
    └─┬
      │
      ▼
插件钩子 (beforeStore)
    │ - 转换记忆
    │ - 验证
    └─┬
      │
      ▼
记忆服务
    │ - 协调存储
    │ - 处理事务
    └─┬
      │
      ├────────────┬────────────┐
      ▼            ▼            ▼
JSON 存储    向量存储    WAL 记录器
      │            │            │
      └────────────┴────────────┘
                    │
                    ▼
插件钩子 (afterStore)
    │ - 同步外部
    │ - 发出事件
    └─┬
      │
      ▼
响应: { success: true, id: 'mem_xxx' }
```

## 搜索记忆流程

```
客户端: memory_search({ query, mode, topK, filters })
    │
    ▼
工具适配器 (验证 + 解析)
    │
    ▼
插件钩子 (beforeSearch)
    │
    ▼
缓存检查
    │
    ├─ 缓存命中 → 返回缓存的结果
    │
    └─ 缓存未命中 → 混合搜索
                        │
                        ├─────────────────┐
                        ▼                 ▼
                   BM25 搜索        向量搜索
                        │                 │
                        └────────┬────────┘
                                 ▼
                          RRF 融合
                                 │
                                 ▼
                          应用过滤器
                                 │
                                 ▼
                          缓存结果
                                 │
                                 ▼
插件钩子 (afterSearch)
    │
    ▼
响应: { count, results, query, mode }
```

## 数据一致性保证

| 操作 | JSON 存储 | 向量存储 | WAL | 一致性 |
|------|-----------|----------|-----|--------|
| 存储 | 同步写入 | 异步写入 | 同步 | 最终一致 |
| 删除 | 同步删除 | 同步删除 | 同步 | 立即 |
| 更新 | 同步更新 | 异步更新 | 同步 | 最终一致 |
| 恢复 | 重放 WAL | 重放 WAL | - | 已恢复 |

## 下一步

- [概述](./overview.md) - 系统架构
- [设计原则](./design-principles.md) - 关键决策
- [模块](./modules.md) - 模块参考
