Files
MemRelay/docs/chat-handoff.md

3.8 KiB
Raw Permalink Blame History

MemRelay 对话交接入口

定位:跨聊天窗口、跨 AI 客户端的稳定入口文档,只记录很少变化的事实、路径与硬约束。

维护规则:仅当部署拓扑、安全边界或上下文获取路径变化时更新本文。功能迭代、模型选型、任务状态、近期讨论等易变信息一律不写在这里——它们的正确归宿见"上下文获取路径"。

项目定位

MemRelay 是自托管的 AI 记忆、开发历史、密码库接入和文件仓储服务:让 Codex、Cursor、Claude Code 等客户端跨设备、跨项目、跨窗口恢复上下文,持续沉淀规则、偏好、事实、决定、经验、凭证与秒级检查点。AI 整理与记忆 Git 为可选增强、默认关闭;零配置基础模式是正式支持的完整运行方式。

部署拓扑(稳定事实)

  • 正式实例:https://mr.asio.asia;ARM 板 192.168.32.100(Armbian,SSH root),Compose 位于 /opt/1panel/docker/compose/memrelay,数据 /data/memrelay-stack,宿主端口 3003。
  • Sub2API 模型网关:同一块板,宿主端口 3004(板内/内网直连 http://192.168.32.100:3004/v1),公网 https://sub2.asio.asia。同板服务间调用走内网地址,不绕公网。
  • 本机 Windows 不再部署 Docker 实例;开发目录 E:\NIXProject\MemRelay。
  • 技术栈:后端 Python 3.12 + FastAPI + FastMCP + SQLAlchemy/SQLite + uv;前端 Vue 3 + Vite + Element Plus + pnpm;记忆引擎 Basic Memory v0.22.1(third_party/ 子模块,独立容器经 MCP HTTP 调用)。
  • OpenResty 只缓存带哈希的 /assets/;API、MCP、认证、签名地址不进代理缓存。

上下文获取路径(新窗口按序执行)

  1. 读本文。
  2. 读 aidocs/project_context.md——本机项目记忆时间线,最新条目在最上,是最完整的演进记录(gitignore,本机专属)。
  3. 读 docs/implementation-plan.md 顶部数节——最近迭代的契约、诊断与验收结果。
  4. 需要正式记忆、检查点、密码库或文件时,走 MemRelay 本体:Web https://mr.asio.asia 或 Streamable HTTP MCP(Token 在 Web「MCP Token」页创建,用完可撤销)。模型选型、生产经验等长期结论保存在 MemRelay 全局记忆中,以那里为准。
  5. 不假设本地 git 与生产一致:核对 git log 与生产容器状态后再动手。

安全与工程边界(硬约束)

  • 秘密值不进仓库、记忆正文、日志或交接文档;聊天中出现过的测试密钥用后立即撤销轮换。
  • 发布纪律:完整门禁(后端 Ruff + pytest、前端 Vitest/ESLint/Prettier/构建)→ 停机备份(MEMRELAY_DATA_PATH=/data/memrelay-stack sh scripts/backup.sh)→ 只重建 memrelay 服务 → 保留回滚镜像标签 → 验证内外网 readiness。
  • 含中文的文件禁止用 PowerShell Get-Content/Set-Content 修改——ANSI 误读会把 UTF-8 写成"合法编码的乱码",常规校验发现不了;只用编辑工具或显式 UTF-8 编解码的 Python 脚本,改完做关键中文串的内容断言。
  • 长 SSH 组合命令拆分执行;生产只读诊断用脚本管道 docker exec -i memrelay-memrelay-1 python -(脚本含中文时先 scp 再远端重定向,避免 PowerShell 管道污染)。
  • Web、REST、MCP 共用服务层,改一处三端生效;提交信息格式 <type>: <中文描述>。
  • 模型只通过"提案 + 服务端校验"影响记忆,永远不给模型直接增删改查记忆文件的能力。

常用验证(稳定)

  • 就绪:curl http://192.168.32.100:3003/api/v1/health/ready、curl https://mr.asio.asia/api/v1/health/ready
  • 容器:docker ps --format '{{.Names}} {{.Status}}' | grep mem(应两个 healthy)
  • 数据库:容器内 PRAGMA quick_check 应为 ok;迁移版本查 alembic_version 表