道童 114c235a60 docs: 更新 CHANGELOG.md
新增内容:
- 完整的版本发布说明(v1.0.0)
- 详细的新增功能列表(后端、前端、数据库)
- API 接口完整列表
- 依赖更新说明
- Git 提交记录
- 里程碑清单
- 致谢

记录所有重要的项目变更,便于追溯版本历史。
2026-04-05 14:39:32 +00:00
2026-04-05 14:39:32 +00:00

🦐 龙虾记忆同步系统

一个专为 OpenClaw 龙虾设计的记忆文件管理系统,提供文件树展示、差异对比、双向同步和属性管理功能。

核心特性

  • 分块流式处理8KB 分块读取,内存限制 256MB支持大文件处理
  • .lobsterignore 支持:正则表达式匹配,过滤不需要同步的文件
  • 智能差异对比:行级差异,颜色区分,支持大文件截断
  • 属性目录结构:支持嵌套属性键值对(如 author.name, metadata.tags
  • 完整审计日志:记录操作人、数据源、变动行数、执行时间
  • 语义摘要:自动生成文件内容摘要
  • 冲突判定:识别 HARD_CONFLICT 状态,智能判断严重冲突
  • 丝滑前端Ant Design 树形控件,点选-对比-同步流程

📋 目录

🚀 快速开始

前置条件

  • Docker 20.10+
  • Docker Compose 2.0+
  • 端口8086前端、8087后端、5432数据库

一键启动

# 克隆项目
git clone http://10.2.0.100:8989/daotong/lobster-memory-sync.git
cd lobster-memory-sync

# 启动服务
docker-compose up -d

# 执行数据库迁移
docker-compose exec backend python manage.py migrate

# 查看日志
docker-compose logs -f

访问应用

🎯 功能特性

1. 分块流式处理

  • ChunkedReadStream8KB 分块读取,避免大文件内存问题
  • 内存限制:最大 256MB 缓存,自动清理
  • 流式哈希:无需加载完整内容即可计算哈希
  • 智能对比:大文件只对比头尾,中间部分计算哈希

2. .lobsterignore 支持

  • 正则表达式re:.*\.log$ 匹配日志文件
  • 通配符*.pyc, node_modules/ 匹配目录和文件
  • 默认规则:自动过滤 .git, __pycache__, .DS_Store

3. 属性目录结构

  • 嵌套属性:使用点号分隔的键名(author.name, metadata.tags
  • 类型支持string, integer, float, boolean, json
  • 分类管理:支持属性分类和元数据
  • 索引优化:快速查询属性

4. 审计日志

  • 完整记录:操作人、操作时间、数据源、变动行数
  • 变更追踪:属性变更记录
  • 执行时间:精确到毫秒
  • 历史查询:支持按文件、操作类型查询

5. 冲突判定

  • 7 种状态consistent, local_newer, db_newer, conflict, hard_conflict, local_only, db_only
  • HARD_CONFLICT:版本 > 1 且 1 小时内更新
  • 智能判断:基于版本号和时间戳

6. 丝滑前端

  • Ant Design:现代化 UI 组件库
  • 文件树:直观的树形控件,状态标签
  • 差异对比:绿色(新增)、红色(删除),行级差异
  • 一键同步:同步到本地 / 同步到数据库

🏗️ 技术架构

后端

  • 框架Django 4.x + Django REST Framework
  • 数据库PostgreSQL 15
  • 内存管理ChunkedReadStream256MB 限制)
  • Python3.11

前端

  • 框架React 18
  • UI 库Ant Design 5.x
  • 差异对比diff + react-syntax-highlighter
  • HTTP 客户端Axios

部署

  • 容器Docker + Docker Compose
  • 反向代理Nginx
  • SSLLet's Encrypt

📁 项目结构

lobster-memory-sync/
├── backend/                          # Django 后端
│   ├── memory_app/
│   │   ├── chunked_stream.py        # 流式读取器(内存限制 256MB
│   │   ├── models.py                # 数据模型LobsterMemory, FileAttribute, SyncHistory
│   │   ├── services.py              # 业务逻辑
│   │   ├── views.py                 # API 视图
│   │   ├── serializers.py           # 序列化器
│   │   └── migrations/              # 数据库迁移
│   │       ├── 0001_initial.py
│   │       ├── 0002_add_summary_and_audit_fields.py
│   │       └── 0003_add_file_attribute.py
│   ├── memory_sync/
│   │   ├── settings.py              # Django 配置
│   │   ├── urls.py                  # 主路由
│   │   └── wsgi.py                  # WSGI 配置
│   ├── requirements.txt             # Python 依赖
│   ├── Dockerfile                   # 后端 Docker 配置
│   ├── manage.py                    # Django 管理脚本
│   └── test_simple.py               # 功能测试脚本
├── frontend/                         # React 前端
│   ├── src/
│   │   ├── components/
│   │   │   ├── FileTree.js          # 文件树组件
│   │   │   └── FileDiff.js          # 差异对比组件
│   │   ├── api/
│   │   │   └── index.js             # API 客户端
│   │   ├── App.js                   # 主应用
│   │   └── index.js                 # 入口文件
│   ├── package.json                 # Node 依赖
│   └── Dockerfile                   # 前端 Docker 配置
├── docker-compose.yml               # Docker Compose 配置
├── .lobsterignore.example           # .lobsterignore 示例
├── README.md                        # 项目文档
├── DEPLOY.md                        # 详细部署文档
├── CHANGELOG.md                     # 变更日志
└── .gitignore                       # Git 忽略规则

📡 API 文档

文件扫描

GET /api/scan/?lobster_id=daotong

响应示例:

{
  "success": true,
  "data": [
    {
      "file_path": "MEMORY.md",
      "full_path": "/app/memory_files/MEMORY.md",
      "hash": "abc123...",
      "size": 1234,
      "lobster_id": "daotong"
    }
  ],
  "total": 1
}

检查同步状态

GET /api/status/?lobster_id=daotong

响应示例:

{
  "success": true,
  "data": {
    "consistent": [],
    "local_newer": [],
    "db_newer": [],
    "conflict": [],
    "hard_conflict": [],
    "local_only": [{"file_path": "MEMORY.md", "status": "local_only", "hash": "abc123"}],
    "db_only": []
  }
}

获取文件差异

GET /api/diff/?lobster_id=daotong&file_path=MEMORY.md&chunked=true

响应示例:

{
  "success": true,
  "data": {
    "file_path": "MEMORY.md",
    "lobster_id": "daotong",
    "local_content": "本地内容",
    "db_content": "数据库内容",
    "local_hash": "abc123",
    "db_hash": "def456",
    "status": "conflict",
    "diff": {
      "local_lines": ["line1", "line2"],
      "db_lines": ["line1", "line3"],
      "has_diff": true,
      "is_truncated": false,
      "lines_changed": 1
    }
  }
}

同步到数据库

POST /api/sync/db/
Content-Type: application/json

{
  "lobster_id": "daotong",
  "file_path": "MEMORY.md",
  "operator": "逍遥子"
}

响应示例:

{
  "success": true,
  "message": "已同步到数据库",
  "data": {
    "id": 1,
    "lobster_id": "daotong",
    "file_path": "MEMORY.md",
    "content": "...",
    "hash": "abc123",
    "status": "consistent",
    "version": 1,
    "size": 1234,
    "summary": "文件摘要",
    "created_at": "2026-04-05T12:00:00Z",
    "updated_at": "2026-04-05T12:00:00Z"
  }
}

获取操作历史

GET /api/history/?lobster_id=daotong&limit=10

响应示例:

{
  "success": true,
  "data": [
    {
      "id": 1,
      "lobster_id": "daotong",
      "file_path": "MEMORY.md",
      "action": "sync_to_db",
      "status": "success",
      "source": "local",
      "old_version": null,
      "new_version": 1,
      "lines_changed": 10,
      "operator": "逍遥子",
      "execution_time": 0.123,
      "created_at": "2026-04-05T12:00:00Z"
    }
  ],
  "total": 1
}

.lobsterignore 管理

# 获取忽略规则
GET /api/ignore/patterns/

# 重新加载忽略规则
POST /api/ignore/reload/

📘 详细部署指南

详细的部署文档请查看 DEPLOY.md,包含:

  • 系统要求
  • Docker 安装
  • 环境配置
  • 数据库迁移
  • 生产环境部署Nginx + HTTPS
  • 数据库备份
  • 监控与维护
  • 故障排查
  • 常见问题 FAQ

🛠️ 开发指南

后端开发

# 进入后端容器
docker exec -it lobster-backend bash

# 创建迁移
python manage.py makemigrations memory_app
python manage.py migrate

# 运行测试
python test_simple.py

# 运行开发服务器
python manage.py runserver 0.0.0.0:8087

前端开发

# 本地开发(不使用 Docker
cd frontend
npm install
npm start

# 构建生产版本
npm run build

常见问题

Q: 如何修改龙虾记忆目录? A: 修改 docker-compose.yml 中的挂载路径:

backend:
  volumes:
    - /your/path/to/lobster/memory:/app/memory_files:ro

Q: 如何配置 .lobsterignore A: 在龙虾记忆目录创建 .lobsterignore 文件,参考 .lobsterignore.example

Q: 内存占用过高怎么办? A: 系统已限制最大内存 256MB自动清理缓存。如仍有问题检查是否有大文件正在处理。

Q: 如何查看操作日志? A: 访问 GET /api/history/ 接口,支持按文件、操作类型筛选。

📝 License

MIT

🤝 贡献

欢迎提交 Issue 和 Pull Request


项目仓库http://10.2.0.100:8989/daotong/lobster-memory-sync.git

Description
No description provided
Readme 133 KiB
Languages
TypeScript 83.7%
PLpgSQL 13.7%
Dockerfile 2.6%