chore: 导入旧记忆备份供恢复

This commit is contained in:
2026-09-23 22:38:40 +08:00
parent 5313fcee7a
commit 6a6a895eaf
638 changed files with 29816 additions and 1 deletions
@@ -0,0 +1,45 @@
---
title: 2026-08-03 05:15:12 - 完整 AI 开发记忆工作流
type: checkpoint
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/2026-08-03-05-15-12-完整-ai-开发记忆工作流
stable_id: ccecd521-d8f9-4447-9a0b-46f6b4112bc9
scope: project
memory_type: checkpoint
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
status: active
revision: 1
request_id: 94652808-8728-43d7-a355-f5397b6ca6fb
created_at: '2026-08-02T21:15:12.119496+00:00'
updated_at: '2026-08-02T21:15:12.119496+00:00'
tags:
- memrelay
- checkpoint
- workflow
---
## 完成内容
- 自动初始管理员、记忆/检查点删除、项目归属搜索、秒级时间线和项目 aidocs ZIP 导出。
- 补齐项目、记忆、密码库、文件、系统与 Token 的完整 MCP 管理能力。
- 完善中英文 Agent 提示词、项目搜索与时间线、检查点删除、搜索归属和仪表盘。
- 重写 README 并加入架构、关系和 AI/MCP 时序图。
## 为什么这样做
让新项目、新设备和新聊天窗口只配置 MCP 与 Agent 提示词即可持续记录并恢复完整开发上下文。
## 关键修改
后端新增导出、提示词与仪表盘服务;前端新增时间线、搜索和聚合视图;正式凭证补齐到 Vaultwarden。
## 验证结果
Ruff 通过,38 项后端测试通过,Vue 类型检查与 ESLint 通过,17 项前端测试和生产构建通过,本机真实 Compose 已健康运行。
## 遇到的问题与解决方案
Windows PowerShell 并行读取触发 AMSI 崩溃,改为单进程检查;旧提示词测试契约更新为中英文动态提示词。
## 下一步
完成真实 Basic Memory/语义模型/Vaultwarden 审计,部署至 Armbian,配置 FRP 与公网 HTTPS并关闭本机容器。
@@ -0,0 +1,45 @@
---
title: 2026-08-06 10:26:26 - 桌面界面与模型连接优化完成
type: checkpoint
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/2026-08-06-10-26-26-桌面界面与模型连接优化完成
stable_id: fe738cfc-d1da-4472-9a49-ffd4975bea0c
scope: project
memory_type: checkpoint
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: checkpoint-ui-model-1e11820
created_at: '2026-08-06T02:26:27.444191+00:00'
updated_at: '2026-08-06T02:26:27.444191+00:00'
tags:
- memrelay
- ui
- model
- deployment
---
# 桌面界面与模型连接优化完成
## 完成内容
- 仪表盘记忆趋势和类型分布卡片固定为 280px 高。
- 记忆编辑抽屉限制为 62% 视口宽度、最大 1050px;范围、类型、标题和标签按桌面表单重新布局,窄视口由页面整体横向滚动。
- 项目开发时间线支持新增检查点;MCP Token 的“使用档案”更名为“记忆空间”,撤销与删除语义和操作布局已明确。
- TOTP、提示词、AI 模型、调度、策略、设置及全站表单统一短标题、提示图标和受控宽度。
- 项目操作统一为停用/永久删除,记忆操作统一为移入回收站;兼容 API 和 Git 技术状态继续保留 archive 内部语义。
- 模型发现、能力元数据、额度错误和空值状态处理已修复;中文和英文 Agent 提示词已更新。
## 验证结果
- 前端 Prettier、ESLint、32 项 Vitest、TypeScript/Vite 构建全部通过。
- 后端 Ruff 和完整 pytest 通过:133 passed、18 skipped。
- Windows AMD64 本地验证完成;Armbian ARM64 原生构建并部署到 https://mr.asio.asia。
- 正式实例数据库、Basic Memory、密码库、Git 和记忆数据完整;模型发现 9 个模型,Responses、非流式和结构化输出可用。
- 真实浏览器完成 1000/1280/1920px 布局、弹窗、菜单、提示词、调度和模型页验收,控制台无错误或警告。
## 发布信息
- Git 提交:dc1f58a、1e11820。
- ARM64 镜像:sha256:a1c8ae878876d72f1e4402ec151e1003c55834c3a7faa1407a96b61c24f27c7d。
- 备份:/data/memrelay-backups/memrelay-20260805T234836Z.tar.gz。
@@ -0,0 +1,27 @@
---
title: AI 与 MCP 完整工作流
type: decision
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/ai-与-mcp-完整工作流
stable_id: 6bb35bdc-e44f-4b8e-af69-b82961cd7c6c
scope: project
memory_type: decision
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
status: active
revision: 1
request_id: 5b7d40ba-da78-4671-bb69-969f31e1d1e5
created_at: '2026-08-02T21:15:11.633068+00:00'
updated_at: '2026-08-02T21:15:11.633068+00:00'
tags:
- memrelay
- mcp
- workflow
- decision
---
# AI 与 MCP 完整工作流
1. 会话开始发现能力并根据目录、Git remote 和名称解析或创建项目。
2. 实质工作前读取全局/项目上下文和最新检查点。
3. 过程中即时保存规则、偏好、事实、决定和经验;凭证写密码库,通用文件写仓储。
4. 每个有意义节点和结束前保存结构化检查点,记录完成内容、原因、修改、验证、问题解决和下一步。
5. 新窗口重复解析与读取后继续;需要本地文档时直接下载项目 ZIP 到 `aidocs/`,不由 AI 逐条重写。
@@ -0,0 +1,52 @@
---
title: Checkpoint 2026-08-02 22:06:17 UTC
type: checkpoint
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/checkpoint-2026-08-02-22-06-17-utc
stable_id: 9092af09-6a60-404e-88ad-3344f2fdf0ca
scope: project
memory_type: checkpoint
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
status: active
revision: 1
request_id: memrelay-production-checkpoint-20260803
created_at: '2026-08-02T22:06:17.411110+00:00'
updated_at: '2026-08-02T22:06:17.411110+00:00'
tags:
- deployment
- release
- verification
---
# MemRelay 正式部署完成
时间:`2026-08-03 06:06:10 CST`
## 完成内容
- 完成 AI 开发记忆工作流、46 个 MCP 工具、提示词、项目文档导出、密码库管理、目录仓储、项目搜索、秒级开发时间线和仪表盘。
- 将 Windows Docker Desktop 中的正式 SQLite、Markdown、模型缓存与 Vaultwarden CLI 数据一致迁移到 Armbian。
- 在物理 ARM64 主机原生构建并运行 `memrelay:0.1.0` 与 `memrelay-basic-memory:0.22.1`。
- 配置 OpenWrt `MemRelay_http` FRPC 映射,并启用公网域名 `https://mr.asio.asia`。
## 原因与关键决定
- 正式实例部署在常驻 Armbian 主机,避免依赖开发电脑持续运行。
- 动态接口不启用代理缓存,防止登录、MCP、密码库和签名地址被错误缓存。
- Cookie 安全属性跟随实际请求协议,使局域网 HTTP 与反向代理 HTTPS 可以同时使用。
## 验证结果
- 后端 39 项测试通过,Ruff 检查通过;前端 17 项测试、类型检查、Lint 和构建已通过。
- 局域网 `http://192.168.32.100:3003` 健康并可登录。
- 公网 `https://mr.asio.asia` 健康并可登录,正式数据为 2 个项目、17 条记忆、2 个既有检查点和 8 条密码库凭证。
- 公网 MCP 成功发现 46 个工具,`capabilities_get` 调用成功。
## 问题与解决方案
- Windows tar 无法读取模型缓存链接,改用 Linux 容器以只读挂载方式创建一致数据包。
- 公共 URL 为 HTTPS 时局域网 HTTP Cookie 原先无法保存,已改为按当前请求协议设置 Secure。
## 后续
- 后续开发会话先调用 `project_resolve`、`context_get` 和 `checkpoint_get`,阶段完成后继续写入检查点。
- 更新部署时在 Armbian Compose 目录重新构建应用镜像,保留 `/data/memrelay-stack`。
@@ -0,0 +1,20 @@
---
title: Checkpoint 2026-08-02 22:48:06 UTC
type: checkpoint
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/checkpoint-2026-08-02-22-48-06-utc
stable_id: f555c097-1877-41f5-ad8a-8ac6f80895a0
scope: project
memory_type: checkpoint
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
status: active
revision: 1
request_id: memrelay-final-completion-checkpoint-20260803
created_at: '2026-08-02T22:48:06.180363+00:00'
updated_at: '2026-08-02T22:48:06.180363+00:00'
tags:
- release
- deployment
- audit
---
完成 AI 开发记忆工作流、完整 MCP、密码库 CRUD、文件目录、项目文档 ZIP、秒级时间线、桌面 Web、README/Mermaid、ARM64 部署、FRPC 与公网 HTTPS 验收。最后补充 Bitwarden 条目快照缓存并完成全栈诊断;后续以 https://mr.asio.asia 作为正式实例继续使用。
@@ -0,0 +1,48 @@
---
title: Checkpoint 2026-08-04 15:04:17 UTC [4374fa1a21]
type: checkpoint
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/checkpoint-2026-08-04-15-04-17-utc-4374fa1a21
stable_id: c16b8950-20d2-4d3d-87b3-0a8bfd20790d
scope: project
memory_type: checkpoint
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: memrelay-complete-curation-delivery-20260804T225103+08
created_at: '2026-08-04T15:04:17.398217+00:00'
updated_at: '2026-08-04T15:04:17.398217+00:00'
tags:
- release
- curation
- git
- arm64
- production
---
## Completed work
Completed the full unattended curation and optional memory Git implementation, audit remediation, documentation, native ARM64 build, production migration, and public deployment.
## Why
MemRelay needed a complete AI-driven memory workflow without forcing private users or teams to configure external AI or Git. The no-AI/no-Git path remains a first-class mode.
## Key changes
- Added workspace source policies, schema-v2 structured curation, stable source cursors/tombstones, revision metadata, bounded queues, scheduling, retries, concurrency leases, and restart recovery.
- Added optional local memory Git, generic remotes, mode migration, offline push, divergence handling, push-to-create, history, diff, restore, import, and bootstrap.
- Added REST, Web, 93 MCP tools, three resources, client guidance, and reusable OpenResty asset-cache configuration.
- Added optional build-only proxy and Debian mirror parameters; all remain empty by default and runtime proxy variables stay empty.
## Verification
Ruff and backend pytest passed; live Responses covered non-streaming, SSE, JSON Schema, global/project incremental curation, history, diff, revert, and dependency recovery. Twenty-five frontend tests, lint, formatting, type checking, Vite, Playwright, Windows AMD64, backup cold restore, Alembic 0001 to 0009, and physical Armbian ARM64 passed. Public HTTPS and Streamable HTTP MCP work after restart. Static assets return MISS then HIT while API and MCP remain uncached.
## Problems and solutions
The ARM host downloaded PyPI and Debian dependencies very slowly. Optional build-only proxy and mirror arguments accelerated native builds without changing default or runtime networking. The first default AMD64 npm attempt hit a transient ECONNRESET; a retry with the same empty configuration succeeded.
## Next step
Use the production instance normally. Configure AI curation or memory Git only when the user explicitly wants either enhancement.
@@ -0,0 +1,42 @@
---
title: Checkpoint 2026-08-07 03:18:34 UTC [fb2fcd341e]
type: checkpoint
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/checkpoint-2026-08-07-03-18-34-utc-fb2fcd341e
stable_id: 109e5244-ad26-4650-8a49-e6cebbabe7d7
scope: project
memory_type: checkpoint
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: codex-20260807-full-system-audit-release
created_at: '2026-08-07T03:18:34.039065+00:00'
updated_at: '2026-08-07T03:18:34.039065+00:00'
tags:
- audit
- release
- arm64
- mcp
- curation
---
# 2026-08-07 全链路审计与发布
## 已完成
- 回顾并验证记忆、项目上下文、检查点时间线、外部 Vaultwarden、文件仓储、MCP、动态提示词、AI 整理和可选记忆 Git 链路。
- 完善 AI 整理的有限合并队列、依赖恢复探测、批次处理和 MCP 能力发现。
- 修复 `memrelay://capabilities` 遇到真实 `datetime` 时的 JSON 序列化错误,增加生产态回归测试。
- 后端 153 项测试通过,18 项环境依赖测试跳过,Ruff 通过;前端 34 项测试、ESLint、Prettier、TypeScript、Vite 和桌面 Playwright 均通过。
- 在 ARM64 Armbian 完成原生构建和滚动发布,只替换 MemRelay 容器,Basic Memory 与正式数据未覆盖。
## 验收
- 内网与 `https://mr.asio.asia` 的 Web、REST、Streamable HTTP MCP 均正常。
- 线上发现 95 个 MCP 工具和 3 个 Resource;`memrelay://capabilities` 已可正常读取。
- MemRelay 与 Basic Memory 均 healthy,Vaultwarden 已解锁,SQLite `quick_check=ok` 且使用 WAL,语义搜索和记忆 Git 正常。
- OpenResty 仅长期缓存 `/assets/`,API 和 MCP 未缓存。
## 当前边界
AI 上游存在间歇性 503 和超时。任务会进入 `waiting_dependency`,定期探测并在恢复后自动继续;队列保持有界。最终文档调用失败后下次会重新生成证据批次,可靠但可能重复消耗模型额度,后续可通过最小实验评估是否需要证据断点续跑。
@@ -0,0 +1,31 @@
---
title: MemRelay 密码库索引
type: rule
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/mem-relay-密码库索引
stable_id: 23bcc4c0-4992-41d6-b70e-210937a76a0f
scope: project
memory_type: rule
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
status: active
revision: 1
request_id: ffe4de34-147d-4949-b079-28425ba49641
created_at: '2026-08-02T21:15:11.912976+00:00'
updated_at: '2026-08-02T21:15:11.912976+00:00'
tags:
- memrelay
- vault
- index
- rule
---
# MemRelay 密码库索引
- `MemRelay Administrator`:Web 管理员。
- `BDYG18Pro Armbian SSH`:正式部署主机。
- `OpenWrt Router SSH`:FRPC 和局域网路由配置。
- `Public FRPS Server SSH`:公网 FRPS 与 OpenResty。
- `FRP ali.asio.asia Token`:FRPC/FRPS 认证。
- `Gitea git.asio.asia OAuth`:Git 访问与刷新凭证。
- `Armbian MySQL Root`:Armbian Docker MySQL。
使用前通过密码库工具读取,普通记忆不保存秘密值。
@@ -0,0 +1,32 @@
---
title: MemRelay 正式部署拓扑
type: fact
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/mem-relay-正式部署拓扑
stable_id: b9a463d1-5659-4baa-aaf4-6464661ef074
scope: project
memory_type: fact
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
status: active
revision: 1
request_id: memrelay-production-topology-20260803
created_at: '2026-08-02T22:06:13.714831+00:00'
updated_at: '2026-08-02T22:06:13.714831+00:00'
tags:
- deployment
- armbian
- frp
- production
---
# 正式部署拓扑
- 部署完成时间:`2026-08-03 06:06:10 CST`。
- 公网入口:`https://mr.asio.asia`,由公网 OpenResty 提供 HTTPS 并转发至 FRPS。
- 应用主机:Armbian ARM64 `192.168.32.100`,服务端口 `3003`。
- Compose 目录:`/opt/1panel/docker/compose/memrelay`。
- 持久化目录:`/data/memrelay-stack`,由 MemRelay 与 Basic Memory 共享挂载。
- OpenWrt FRPC:`0.70.1`,使用 WebSocket 连接 FRPS;`MemRelay_http` 将 `mr.asio.asia` 映射到 `192.168.32.100:3003`。
- FRPC 变更前配置备份:`/etc/config/frpc.memrelay-pre-20260803-055916.bak`。
- 管理端同时支持局域网 HTTP 与公网 HTTPS;会话 Cookie 根据当前请求协议决定是否使用 Secure 标记。
- OpenResty 不对登录、API、MCP、密码库、上传下载或签名地址启用代理缓存;静态资源使用 ETag 和浏览器缓存。
- 已验证局域网健康检查、公网 HTTPS 登录、46 个 MCP 工具、Basic Memory、Vaultwarden 和正式数据迁移。
@@ -0,0 +1,27 @@
---
title: MemRelay 项目概览
type: fact
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/mem-relay-项目概览
stable_id: 7ab8ac01-9e4d-4222-b224-7735fdeafdc8
scope: project
memory_type: fact
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
status: active
revision: 1
request_id: 393c81ff-464a-4b3e-8376-61691dbbb089
created_at: '2026-08-02T21:15:11.367811+00:00'
updated_at: '2026-08-02T21:15:11.367811+00:00'
tags:
- memrelay
- architecture
- fact
---
# MemRelay 项目概览
- 目标:为多个设备、项目、AI 客户端和聊天窗口提供可继承的个人规则、项目记忆、开发历史、密码库和文件仓储。
- 后端:Python 3.12、FastAPI、FastMCP、SQLAlchemy、SQLite。
- 前端:Vue 3、TypeScript、Vite、Element Plus、Vue I18n。
- 记忆引擎:固定 Basic Memory v0.22.1,正文为 Markdown,本地 MiniLM 提供中英文语义检索并可降级全文搜索。
- 部署:Windows Docker Desktop 与 Linux Docker Compose;正式测试 amd64 和 arm64。
- 当前源码提交:2d2e35a。
@@ -0,0 +1,77 @@
---
title: Current State (as of 2026‑08‑07)
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/current-state-as-of-2026-08-07
stable_id: d459e837-b05c-4f31-9b05-7f9d09c71f25
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: current_state
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:b9a463d1-5659-4baa-aaf4-6464661ef074: '1'
memory:109e5244-ad26-4650-8a49-e6cebbabe7d7: '1'
memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136: '1'
memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c: '1'
memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:d459e837-b05c-4f31-9b05-7f9d09c71f25
- memory:109e5244-ad26-4650-8a49-e6cebbabe7d7
- memory:b9a463d1-5659-4baa-aaf4-6464661ef074
- memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136
- curated_baseline:f48a08a1-f276-4045-8ffe-22e7ac39e5c9
- curated_baseline:c6d3254d-9cbb-4dba-924e-f79781d2c07d
- memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c
- memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d
job_cited_source_ids:
- curated_baseline:d459e837-b05c-4f31-9b05-7f9d09c71f25
conflicts: []
supersedes: []
preferences: []
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:19.256789+00:00'
updated_at: '2026-08-16T18:34:08.451713+00:00'
tags:
- state
- current
---
# 当前状态 (2026‑08‑07)
## 测试与验证概览
- **后端**:`153` 项测试全部通过,`18` 项因环境依赖跳过;Ruff 检查通过。
- **前端**:`34` 项测试全部通过,ESLint、Prettier、TypeScript、Vite 与 Playwright 全部通过。
- **构建**:Windows Docker Desktop (AMD64) 本地构建验证完成;Armbian ARM64 原生构建并完成滚动发布(仅替换 MemRelay 容器,Basic Memory 与正式数据保持不变)。
- **运行**:内网 `http://192.168.32.100:3003` 与公网 `https://mr.asio.asia` 的 Web、REST 与 Streamable HTTP MCP 正常;线上发现 `95` 个 MCP 工具和 `3` 个 Resource。
- **数据库**:SQLite `quick_check=ok` 并使用 WAL;语义搜索与 Memory‑Git 正常运行。
- **密码库性能**:VaultService 内部 Bitwarden 条目快照使 ARM64 公网列表响应时间约 **420‑431 ms**(原约 20 s)。
## 已知限制与未完成工作
1. **AI 上游间歇 503/超时** – 任务进入 `waiting_dependency`,模型恢复后自动继续;队列保持有界。
2. **文档调用失败重试** – 失败任务在下次重试时重新生成证据批次,可能导致模型额度重复消耗;需评估是否实现证据断点续跑。
3. **UI 微调** – 根据实际使用反馈继续细化滚动行为。
4. **Bitwarden 快照刷新间隔** – 进一步评估以降低 ARM64 延迟。
5. **未来版本升级** – 编写迁移文档(模式迁移、备份/恢复脚本)。
6. **回归测试扩展** – 增加对真实时间字段与 Streamable HTTP MCP 的自动化测试。
**来源**: `curated_baseline:d459e837-b05c-4f31-9b05-7f9d09c71f25`
@@ -0,0 +1,77 @@
---
title: Development Timeline
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/development-timeline
stable_id: 47740b04-4f30-47c0-a68c-8fe5e19133e7
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: timeline
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:9092af09-6a60-404e-88ad-3344f2fdf0ca: '1'
memory:f555c097-1877-41f5-ad8a-8ac6f80895a0: '1'
memory:ccecd521-d8f9-4447-9a0b-46f6b4112bc9: '1'
memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d: '1'
memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c: '1'
memory:109e5244-ad26-4650-8a49-e6cebbabe7d7: '1'
memory:b9a463d1-5659-4baa-aaf4-6464661ef074: '1'
memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:47740b04-4f30-47c0-a68c-8fe5e19133e7
- memory:9092af09-6a60-404e-88ad-3344f2fdf0ca
- memory:f555c097-1877-41f5-ad8a-8ac6f80895a0
- memory:ccecd521-d8f9-4447-9a0b-46f6b4112bc9
- memory:b9a463d1-5659-4baa-aaf4-6464661ef074
- memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d
- memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084
- memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c
- memory:109e5244-ad26-4650-8a49-e6cebbabe7d7
- curated_baseline:c6d3254d-9cbb-4dba-924e-f79781d2c07d
- curated_baseline:d459e837-b05c-4f31-9b05-7f9d09c71f25
job_cited_source_ids:
- curated_baseline:47740b04-4f30-47c0-a68c-8fe5e19133e7
conflicts: []
supersedes: []
preferences: []
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:25.234088+00:00'
updated_at: '2026-08-16T18:34:23.298851+00:00'
tags:
- timeline
---
# 项目时间线与检查点
| 日期 (UTC) | 里程碑 | 关键成果 |
|------------|--------|----------|
| **2026-08-02 22:06:17** | 正式部署完成 | 完成 AI 开发记忆工作流、46 个 MCP 工具、密码库管理、目录仓储、项目导出、秒级时间线。迁移至 Armbian ARM64 主机,公网 `https://mr.asio.asia` 开放。前端 17 项、后端 39 项测试通过。 |
| **2026-08-02 22:48:06** | AI 开发记忆工作流验收 | 完成完整 AI 开发记忆工作流、MCP、密码库 CRUD、文件目录、项目 ZIP、桌面 Web、README/Mermaid、ARM64 部署、FRPC 与公网 HTTPS 验收。 |
| **2026-08-03 05:15:12** | 完整 AI 开发记忆工作流 (首次) | 自动管理员、检查点删除、项目搜索、秒级时间线、MCP 完整能力 (46 工具)、双语 Agent 提示词、仪表盘。前端 17 项、后端 38 项通过。 |
| **2026-08-03 06:06:10 CST** | 部署拓扑完成 | 完成公网 HTTPS 入口、OpenWrt FRP 映射、持久化目录映射 (`/data/memrelay-stack`) 与应用主机配置。局域网和公网登录、MCP tools 均已验证。 |
| **2026-08-04 15:04:17** | unattended curation 与 memory‑Git 实装 | 添加工作流源策略、结构化 curation、队列、重试、并发租约、恢复;实现本地 memory‑Git、历史、diff、恢复、导入等功能。前端 25 项、后端 145 项通过。 |
| **2026-08-05 23:48:36** | 工作区 UI 与全档案 Token 发布 | 增加可滚动抽屉、统一表单宽度、删除独立进度页、统一检查点、Token 自动覆盖与数据库迁移 (`20260805_0010`)。前端 27 项、后端 145 项通过。 |
| **2026-08-06 10:26:26** | 桌面界面与模型连接优化 | UI 卡片高度 (280px)、抽屉宽度 (62% 视口, max 1050px)、表单布局统一;MCP Token 重命名为 “记忆空间”,操作统一;TOTP、提示词、模型能力修复。前端 32 项、后端 133 项通过。 |
| **2026-08-07 03:18:34** | 全链路审计与发布 | 完成全链路审计;修复 `memrelay://capabilities` JSON 序列化错误,增加回归测试;ARM64 滚动发布 (95 MCP 工具, 3 Resources)。前端 34 项、后端 153 项通过。 |
**来源**: `curated_baseline:47740b04-4f30-47c0-a68c-8fe5e19133e7`
@@ -0,0 +1,85 @@
---
title: Key Decisions and Guiding Rules
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/key-decisions-and-guiding-rules
stable_id: 08fb4703-1527-4983-bb8e-e4ca735e4316
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: decisions
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca: '1'
memory:6bb35bdc-e44f-4b8e-af69-b82961cd7c6c: '1'
memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:08fb4703-1527-4983-bb8e-e4ca735e4316
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca
- memory:6bb35bdc-e44f-4b8e-af69-b82961cd7c6c
- memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- global_guidance_document:2b47472d-3ac2-4394-8646-c6bf1c0fc270
- global_guidance_document:6973450e-6ecc-48e3-8cdd-4d7d7707d843
job_cited_source_ids:
- curated_baseline:08fb4703-1527-4983-bb8e-e4ca735e4316
conflicts: []
supersedes: []
preferences: []
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:21.764309+00:00'
updated_at: '2026-08-16T18:34:17.613727+00:00'
tags:
- decisions
---
# 决策记录
## 1. 生产级 MCP JSON 序列化
- **决策**:`memrelay://capabilities` 含 `datetime`、`UUID` 或 Pydantic 对象时,必须先使用 FastAPI `jsonable_encoder` 再进行 JSON 编码,以避免生产环境序列化错误。
- **验证**:回归测试使用真实时间字段,并通过 Streamable HTTP MCP 验证资源输出与 `capabilities_get` 一致。
## 2. 密码库读取性能优化
- **决策**:VaultService 引入进程内 Bitwarden 条目快照(启动、手动同步、周期同步刷新),列表、搜索、详情、密码读取与唯一匹配读取均走快照;写入操作即时更新快照;TOTP 仍实时调用 CLI。
- **结果**:ARM64 列表响应时间降至约 420‑431 ms。
## 3. 会话 Cookie `Secure` 标记动态化
- **决策**:管理端同时支持局域网 HTTP 与公网 HTTPS;Cookie `Secure` 标记依据当前请求协议动态决定(HTTPS 设置,HTTP 清除),解决 HTTPS 后局域网 HTTP 会话失效的问题。
## 4. 代理缓存策略
- **决策**:OpenResty 对登录、API、MCP、密码库、上传下载及签名地址不启用代理缓存;静态资源使用 ETag 与浏览器缓存。
## 5. ARM64 构建迁移方案
- **决策**:提供可选构建时代理与 Debian 镜像参数以加速依赖下载(不改变默认/运行时网络)。
- **其他**:Windows `tar` 的符号链接问题通过 Linux 容器只读挂载方式解决;首次迁移启动延迟通过保留一致性备份并待容器恢复健康后再验证。
## 6. 数据库迁移与 UI 统一
- **决策**:数据库迁移 `20260805_0010` 在 `mcp_tokens` 表加入 `all_profiles`,支持全档案 Token 自动覆盖后续创建的使用档案。
- **UI 改动**:删除独立进度页,检查点统一在项目开发时间线管理并支持删除;操作语义统一为项目“停用/永久删除”,记忆“移入回收站”。
**来源**: `curated_baseline:08fb4703-1527-4983-bb8e-e4ca735e4316`
@@ -0,0 +1,131 @@
---
title: MemRelay Development Tasks – Recent Checkpoints and Upcoming Work
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/mem-relay-development-tasks-recent-checkpoints-and-upcoming-work
stable_id: c6d3254d-9cbb-4dba-924e-f79781d2c07d
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: tasks
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c: '1'
memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084: '1'
memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d: '1'
memory:b9a463d1-5659-4baa-aaf4-6464661ef074: '1'
memory:f555c097-1877-41f5-ad8a-8ac6f80895a0: '1'
memory:9092af09-6a60-404e-88ad-3344f2fdf0ca: '1'
memory:109e5244-ad26-4650-8a49-e6cebbabe7d7: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:c6d3254d-9cbb-4dba-924e-f79781d2c07d
- curated_baseline:f48a08a1-f276-4045-8ffe-22e7ac39e5c9
- memory:109e5244-ad26-4650-8a49-e6cebbabe7d7
- memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c
- memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084
- memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d
- memory:b9a463d1-5659-4baa-aaf4-6464661ef074
- memory:f555c097-1877-41f5-ad8a-8ac6f80895a0
- memory:9092af09-6a60-404e-88ad-3344f2fdf0ca
job_cited_source_ids:
- curated_baseline:c6d3254d-9cbb-4dba-924e-f79781d2c07d
conflicts: []
supersedes: []
preferences:
- statement: 使用最简单且正确的实现(KISS & YAGNI)
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
- statement: 在任何登录、SSH、数据库或 API 调用前先查询 Vaultwarden,唯一匹配时直接使用
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
- statement: AI 驱动的记忆整理与 Memory‑Git 默认关闭,未启用时系统不探测模型或创建 .git 目录
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
- statement: 默认使用中文沟通,除非明确要求使用其他语言
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:29.522383+00:00'
updated_at: '2026-08-16T18:34:27.519319+00:00'
tags:
- tasks
- development
---
# MemRelay 开发任务与后续工作
## 已完成检查点
| 日期 (UTC) | 检查点 ID | 说明 |
|------------|-----------|------|
| 2026-08-07 03:18:34 | `109e5244-ad26-4650-8a49-e6cebbabe7d7` | 全链路审计与发布:修复 `memrelay://capabilities` JSON 序列化,后端 153 测试通过,前端 34 测试通过,ARM64 滚动发布。 |
| 2026-08-06 10:26:26 | `fe738cfc-d1da-4472-9a49-ffd4975bea0c` | 桌面 UI 与模型连接优化:卡片高度、抽屉宽度、表单布局,MCP Token 重命名为“记忆空间”。 |
| 2026-08-05 23:48:36 | `e20b1ae7-4ba7-4c1d-9d79-59af809f9084` | 工作区 UI 与全档案 Token 发布:滚动抽屉、统一表单宽度、Token 自动覆盖、数据库迁移 `20260805_0010`。 |
| 2026-08-04 15:04:17 | `c16b8950-20d2-4d3d-87b3-0a8bfd20790d` | 实现无人值守整理引擎与可选 memory‑Git,包含队列、重试、并发租约与 ARM64 构建优化。 |
| 2026-08-03 06:06:10 | `b9a463d1-5659-4baa-aaf4-6464661ef074` | 正式部署拓扑完成,公网 HTTPS 入口、FRP 映射、持久化存储与健康检查验证。 |
| 2026-08-02 22:48:06 | `f555c097-1877-41f5-ad8a-8ac6f80895a0` | 开发记忆工作流、完整 MCP、密码库 CRUD、目录仓储、ZIP 导出、ARM64 部署验收。 |
| 2026-08-02 22:06:17 | `9092af09-6a60-404e-88ad-3344f2fdf0ca` | 完成正式部署与数据迁移,容器构建与公网 HTTPS 验证。 |
## 未完成工作
- 微调 UI 滚动行为,以符合最新用户反馈。
- 为已明确启用的团队实现可选的 AI 整理功能(遵循默认禁用的全局规则)。
- 增加针对时间字段处理与 Streamable HTTP MCP 的自动化回归测试。
- 评估 Bitwarden 快照刷新间隔,进一步降低 ARM64 延迟。
- 编写未来版本升级的迁移文档(模式迁移、备份/恢复脚本)。
- 评估是否实现证据断点续跑,避免模型额度重复消耗。
@@ -0,0 +1,76 @@
---
title: MemRelay Glossary – Key Concepts and Terms
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/mem-relay-glossary-key-concepts-and-terms
stable_id: f66a40de-675c-4f63-ab33-77b033c364ee
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: glossary
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:7ab8ac01-9e4d-4222-b224-7735fdeafdc8: '1'
memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c: '1'
memory:b9a463d1-5659-4baa-aaf4-6464661ef074: '1'
memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136: '1'
memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084: '1'
memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca: '1'
memory:109e5244-ad26-4650-8a49-e6cebbabe7d7: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:f66a40de-675c-4f63-ab33-77b033c364ee
- memory:7ab8ac01-9e4d-4222-b224-7735fdeafdc8
- memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136
- memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca
- memory:109e5244-ad26-4650-8a49-e6cebbabe7d7
- memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c
- memory:b9a463d1-5659-4baa-aaf4-6464661ef074
- memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
job_cited_source_ids:
- curated_baseline:f66a40de-675c-4f63-ab33-77b033c364ee
conflicts: []
supersedes: []
preferences: []
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:32.518655+00:00'
updated_at: '2026-08-16T18:34:31.753932+00:00'
tags:
- glossary
---
# MemRelay 术语表
| 术语 | 定义 |
|------|------|
| **MemRelay** | 个人 AI 驱动的记忆与工作流平台,跨多设备、项目、AI 客户端和聊天窗口管理可继承的个人规则、项目记忆、开发历史、密码库和文件仓储。 |
| **Basic Memory** | MemRelay 使用的固定记忆引擎版本 (`v0.22.1`);以 Markdown 格式存储事实,并使用 MiniLM 语义搜索(可降级为全文搜索)。 |
| **MCP** | MemRelay 控制协议——通过 REST、Streamable HTTP 与 WebSocket 暴露的一组工具和资源(最新为 95 工具与 3 资源)。 |
| **FRP / FRPC / FRPS** | Fast Reverse Proxy 组件,用于通过 WebSocket 将内网 MemRelay 服务 (`mr.asio.asia`) 暴露到公网。 |
| **Vaultwarden / Bitwarden CLI** | 轻量密码库服务。通过进程内快照加速读取(在 ARM64 上约 420 ms)。 |
| **Checkpoint** | 开发时刻的结构化快照,记录做了什么、为什么、验证步骤、问题和下一步。 |
| **Token / MCP Token** | 用于保护 MemRelay API、MCP 和文件存储访问的认证令牌。 |
| **AI Curation** | 分析记忆条目并生成紧凑摘要的可选后台进程。默认禁用。 |
| **Memory‑Git** | 可选的本地 Git 集成,用于记忆快照的版本管理;默认禁用。 |
| **aidocs/project_context.md** | 本地项目记忆文件。固定头部,秒级时间戳,最新在前;已加入 `.gitignore`,不提交。 |
| **`memrelay://capabilities`** | 列出 MCP 能力的资源端点。需要使用 FastAPI `jsonable_encoder` 进行安全序列化。
@@ -0,0 +1,129 @@
---
title: MemRelay Project Overview
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/mem-relay-project-overview
stable_id: eebf38d3-36dc-4b57-b8d7-1f2c8be2f234
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: overview
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:7ab8ac01-9e4d-4222-b224-7735fdeafdc8: '1'
memory:23bcc4c0-4992-41d6-b70e-210937a76a0f: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:eebf38d3-36dc-4b57-b8d7-1f2c8be2f234
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- curated_baseline:6b2d8349-7a95-4a18-8e4b-20dd2ab95e2f
- curated_baseline:b54bd6b0-bbdd-4ab2-92d3-a4f5d58e8f83
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_document:2b47472d-3ac2-4394-8646-c6bf1c0fc270
- global_guidance_document:6973450e-6ecc-48e3-8cdd-4d7d7707d843
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- memory:7ab8ac01-9e4d-4222-b224-7735fdeafdc8
- memory:23bcc4c0-4992-41d6-b70e-210937a76a0f
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
job_cited_source_ids:
- curated_baseline:eebf38d3-36dc-4b57-b8d7-1f2c8be2f234
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
conflicts: []
supersedes: []
preferences: []
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:17.157448+00:00'
updated_at: '2026-08-16T18:34:02.725477+00:00'
tags:
- overview
- project
---
# MemRelay 项目概览
## 目标
- 为多个设备、项目、AI 客户端和聊天窗口提供可继承的个人规则、项目记忆、开发历史、密码库和文件仓储。
## 技术栈
- **后端**: Python 3.12, FastAPI, FastMCP, SQLAlchemy, SQLite
- **前端**: Vue 3, TypeScript, Vite, Element Plus, Vue I18n
- **记忆引擎**: Basic Memory v0.22.1(Markdown 存储),MiniLM 语义检索(必要时降级为全文搜索)
- **容器化**: Docker Desktop (Windows) & Docker‑Compose (Linux),支持 amd64 与 arm64 双平台
## 部署拓扑
- 公网入口: `https://mr.asio.asia`(OpenResty 终止 TLS 并转发至 FRPS)
- 应用主机: Armbian ARM64 `192.168.32.100`,监听端口 `3003`
- 持久化目录: `/data/memrelay-stack`(MemRelay 与 Basic Memory 共享挂载)
- FRP 栈: OpenWrt FRPC `0.70.1` 使用 WebSocket 连接 FRPS,映射 `mr.asio.asia → 192.168.32.100:3003`
- 会话 Cookie: 根据请求协议动态决定 `Secure` 标记,局域网 HTTP 与公网 HTTPS 均可使用
- 缓存策略: OpenResty 对登录、API、MCP、密码库等端点不启用代理缓存;静态资源使用 ETag 与浏览器缓存
- 备份: `/data/memrelay-backups/memrelay-20260805T234836Z.tar.gz`
## 开发实施原则 (KISS & YAGNI)
- 使用最简单且正确的实现
- 优先复用已有框架、服务、工具和约定,避免重复实现
- 不添加仅服务于假设未来需求的依赖、抽象或基础设施
- 修改范围与当前目标一致,测试覆盖随风险扩大;完成前清理临时内容和无用代码
- 前端以真实工作流、桌面可用性、信息层级和无重叠为验收标准
## 项目记忆与 Git 工作流
- 项目本地记忆位于 `aidocs/project_context.md`,文件顶部保留固定标题,随后按 **最新优先**、秒级时间戳倒序追加记录,描述 **做了什么、为什么、验证、问题与下一步**
- `aidocs/` 已加入 `.gitignore`,记忆文件不提交至 Git
- 完成任务后:清理临时文件 → 更新记忆 → 检查工作树 → 使用 `type: 中文说明` 格式提交有意义的代码改动
## 凭证与记忆边界
- 登录、SSH、数据库和 API 操作前先查询 Vaultwarden;唯一匹配时直接使用,不重复询问
- 新获得、生成或修改的账号、密码、Token、API 密钥和 TOTP 种子立即写入密码库
- 普通记忆仅记录密码库条目 **名称、用途、使用方式**,不保存秘密值
## 可选功能(默认禁用)
- AI 驱动的记忆整理(AI Curation)和 Memory‑Git 为可选增强,默认关闭。未开启时系统完整工作,不会探测模型、不创建 `.git` 目录或报错。
## UI 交互指南
- 表单采用 “标题在左、控件在右” 紧凑横向布局;多行/大块内容使用 “标题在上、内容在下”
- 页面顶部标题区域在滚动时保持可见,操作按钮固定在标题右侧
- 滚动区域局限于控件内部(如 Markdown 预览),避免整页滚动
- 表单标签列、控件列和分组间距保持紧凑一致,避免大面积留白
## 语言与工作方式
- 默认使用中文沟通,除非明确要求使用其他语言
- 开发环境为 Windows,所有命令、路径和验证步骤需兼容 Windows
- 在充分理解现有项目后实施,持续告知关键进展,可独立完成的工作直接完成并验证
## 密码库索引
| 条目 | 用途 |
|------|------|
| `MemRelay Administrator` | Web 管理员 |
| `BDYG18Pro Armbian SSH` | 部署主机 |
| `OpenWrt Router SSH` | FRPC 与局域网路由 |
| `Public FRPS Server SSH` | 公网 FRPS 与 OpenResty |
| `FRP ali.asio.asia Token` | FRPC/FRPS 认证 |
| `Gitea git.asio.asia OAuth` | Git 访问与令牌刷新 |
| `Armbian MySQL Root` | Docker MySQL |
**来源**: `curated_baseline:eebf38d3-36dc-4b57-b8d7-1f2c8be2f234`, `global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5`, `global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316`, `global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823`, `global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d`
@@ -0,0 +1,144 @@
---
title: MemRelay Ongoing Maintenance & Performance Highlights
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/development/mem-relay-ongoing-maintenance-performance-highlights
stable_id: f48a08a1-f276-4045-8ffe-22e7ac39e5c9
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: maintenance
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c: '1'
memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136: '1'
memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca: '1'
memory:109e5244-ad26-4650-8a49-e6cebbabe7d7: '1'
memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084: '1'
memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:f48a08a1-f276-4045-8ffe-22e7ac39e5c9
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- curated_baseline:08fb4703-1527-4983-bb8e-e4ca735e4316
- memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136
- memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca
- curated_baseline:d459e837-b05c-4f31-9b05-7f9d09c71f25
- curated_baseline:c6d3254d-9cbb-4dba-924e-f79781d2c07d
- curated_baseline:a6632d8d-f445-4932-8ffd-06f721ffc51b
- curated_baseline:6b2d8349-7a95-4a18-8e4b-20dd2ab95e2f
- curated_baseline:47740b04-4f30-47c0-a68c-8fe5e19133e7
- curated_baseline:eebf38d3-36dc-4b57-b8d7-1f2c8be2f234
- curated_baseline:f66a40de-675c-4f63-ab33-77b033c364ee
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- memory:fe738cfc-d1da-4472-9a49-ffd4975bea0c
- memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084
- memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d
- memory:109e5244-ad26-4650-8a49-e6cebbabe7d7
job_cited_source_ids:
- curated_baseline:f48a08a1-f276-4045-8ffe-22e7ac39e5c9
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
conflicts: []
supersedes: []
preferences:
- statement: 在任何登录、SSH、数据库或 API 调用前先查询 Vaultwarden,唯一匹配时直接使用。
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
- statement: 新获得、生成或修改的账号、密码、Token、API 密钥和 TOTP 种子必须立刻写入密码库。
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
- statement: '`memrelay://capabilities` 包含 datetime、UUID、Pydantic 对象时需先通过 FastAPI
`jsonable_encoder` 再 JSON 编码。'
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
counterexample_source_ids: []
occurrence_count: 2
explicit: true
confidence: 1.0
status: current
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:50.621894+00:00'
updated_at: '2026-08-16T18:34:49.923745+00:00'
tags:
- maintenance
- development
---
# MemRelay 维护报告 (development)
## 已完成关键优化
1. **VaultService 内部 Bitwarden 快照**
- 在进程启动、手动同步及周期同步时刷新快照。
- 所有读取路径(列表、搜索、详情、密码、唯一匹配)使用快照,写入即时更新快照,TOTP 仍实时调用 CLI。
- **效果**:ARM64 公网列表延迟从约 20 s 降至约 420‑431 ms。
2. **MCP JSON 序列化修复**
- 通过 FastAPI `jsonable_encoder` 预处理 `memrelay://capabilities` 输出,解决 `datetime` 对象导致的 `json.dumps` 异常。
- 添加包含真实时间戳的回归测试,确保序列化后资源可被 `capabilities_get` 正确解析。
3. **ARM64 构建迁移细节**
- 提供可选构建时代理与 Debian 镜像参数,加速依赖下载。
- Windows `tar` 符号链接问题通过在 Linux 容器中只读挂载解决。
- 初始迁移后容器启动时间较长,保留一致备份并在健康检查通过后再进行数据验证。
4. **UI 与交互改进**
- 仪表盘记忆趋势卡高度固定 280 px,编辑抽屉宽度限制 62% 视口宽度(最大 1050 px),窄视口采用水平滚动。
- 删除独立进度页,检查点统一在项目开发时间线管理,支持删除。
- 操作语义统一:项目 **停用/永久删除**,记忆 **移入回收站**。
- Modal 头部/脚注固定,语言选择器移至品牌标题旁,“使用档案”重命名为 **记忆空间**。
## 未决事项 / 持续工作
- **AI 上游间歇 503/超时**:任务进入 `waiting_dependency`,模型恢复后自动继续。计划实现 checkpoint‑resume 以避免重复消耗模型额度。
- **文档调用失败重试**:失败任务在下次重试时会重新生成证据批次,可能导致模型额度重复消耗。评估实现证据断点续跑的可行性。
- **UI 滚动细节**:继续根据用户反馈微调滚动行为。
- **Bitwarden 快照刷新间隔**:进一步评估最佳刷新频率,以进一步降低延迟。
- **迁移文档**:编写未来版本升级的模式迁移、备份/恢复脚本。
- **回归测试扩展**:增加对真实时间字段与 Streamable HTTP MCP 的自动化测试。
*本报告主要依据 `curated_baseline:f48a08a1-f276-4045-8ffe-22e7ac39e5c9`(维护)、`global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e`(凭证与记忆边界)以及相关全局指导文档生成。*
@@ -0,0 +1,197 @@
---
title: MemRelay Project Deployment Overview
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/development/mem-relay-project-deployment-overview
stable_id: b54bd6b0-bbdd-4ab2-92d3-a4f5d58e8f83
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: deployment
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:7ab8ac01-9e4d-4222-b224-7735fdeafdc8: '1'
memory:b9a463d1-5659-4baa-aaf4-6464661ef074: '1'
memory:9092af09-6a60-404e-88ad-3344f2fdf0ca: '1'
memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d: '1'
memory:23bcc4c0-4992-41d6-b70e-210937a76a0f: '1'
memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136: '1'
memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:b54bd6b0-bbdd-4ab2-92d3-a4f5d58e8f83
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- global_guidance_document:2b47472d-3ac2-4394-8646-c6bf1c0fc270
- global_guidance_document:6973450e-6ecc-48e3-8cdd-4d7d7707d843
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- curated_baseline:08fb4703-1527-4983-bb8e-e4ca735e4316
- curated_baseline:eebf38d3-36dc-4b57-b8d7-1f2c8be2f234
- memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136
- memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca
- curated_baseline:6b2d8349-7a95-4a18-8e4b-20dd2ab95e2f
- curated_baseline:d459e837-b05c-4f31-9b05-7f9d09c71f25
- memory:7ab8ac01-9e4d-4222-b224-7735fdeafdc8
- memory:23bcc4c0-4992-41d6-b70e-210937a76a0f
- memory:b9a463d1-5659-4baa-aaf4-6464661ef074
- memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d
- memory:9092af09-6a60-404e-88ad-3344f2fdf0ca
job_cited_source_ids:
- curated_baseline:b54bd6b0-bbdd-4ab2-92d3-a4f5d58e8f83
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- global_guidance_document:2b47472d-3ac2-4394-8646-c6bf1c0fc270
- global_guidance_document:6973450e-6ecc-48e3-8cdd-4d7d7707d843
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- curated_baseline:08fb4703-1527-4983-bb8e-e4ca735e4316
conflicts: []
supersedes: []
preferences:
- statement: 遵循 KISS 与 YAGNI,使用最简单且正确的实现。
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
- statement: 默认使用中文沟通,除非明确要求其他语言。
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
- statement: AI 驱动的记忆整理与 Memory‑Git 默认关闭,未配置时系统完整工作且不报错。
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
counterexample_source_ids: []
occurrence_count: 2
explicit: true
confidence: 1.0
status: current
- statement: 在任何登录、SSH、数据库或 API 调用前先查询 Vaultwarden,唯一匹配时直接使用。
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
counterexample_source_ids: []
occurrence_count: 2
explicit: true
confidence: 1.0
status: current
- statement: '`memrelay://capabilities` 包含 datetime、UUID、Pydantic 对象时需先通过 FastAPI
`jsonable_encoder` 再 JSON 编码。'
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
counterexample_source_ids: []
occurrence_count: 2
explicit: true
confidence: 1.0
status: current
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:44.504144+00:00'
updated_at: '2026-08-16T18:34:47.549231+00:00'
tags:
- deployment
- development
---
# MemRelay 部署概览 (development)
## 目标与技术栈
- 提供跨设备、项目、AI 客户端的个人规则、记忆、密码库与文件仓储。
- 后端: Python 3.12, FastAPI, FastMCP, SQLAlchemy, SQLite
- 前端: Vue 3, TypeScript, Vite, Element Plus, Vue I18n
- 记忆引擎: Basic Memory v0.22.1(Markdown 存储),MiniLM 语义检索(必要时降级为全文搜索)
## 部署拓扑
- **公网入口**: `https://mr.asio.asia`(OpenResty 终止 TLS 并转发至 FRPS)
- **应用主机**: Armbian ARM64 `192.168.32.100`,监听端口 `3003`
- **Compose 目录**: `/opt/1panel/docker/compose/memrelay`
- **持久化存储**: `/data/memrelay-stack`(MemRelay 与 Basic Memory 共享挂载)
- **FRP 栈**: OpenWrt FRPC `0.70.1`(WebSocket) → FRPS,映射 `mr.asio.asia → 192.168.32.100:3003`
- **会话 Cookie**: 根据请求协议动态设置 `Secure` 标记,兼容局域网 HTTP 与公网 HTTPS
- **缓存策略**: OpenResty 对登录、API、MCP、密码库、上传下载等端点不启用代理缓存;静态资源使用 ETag 与浏览器缓存
- **备份**: `/data/memrelay-backups/memrelay-20260805T234836Z.tar.gz`
## 密码库索引(Vaultwarden)
| 条目 | 用途 |
|------|------|
| `MemRelay Administrator` | Web 管理员 |
| `BDYG18Pro Armbian SSH` | 部署主机 |
| `OpenWrt Router SSH` | FRPC 与局域网路由 |
| `Public FRPS Server SSH` | 公网 FRPS 与 OpenResty |
| `FRP ali.asio.asia Token` | FRPC/FRPS 认证 |
| `Gitea git.asio.asia OAuth` | Git 访问与令牌刷新 |
| `Armbian MySQL Root` | Docker MySQL |
> **说明**:普通记忆仅记录名称、用途与使用方式,敏感值始终保存在 Vaultwarden 中。
## 可选特性(默认禁用)
- **AI 驱动的记忆整理(AI Curation)** 与 **Memory‑Git** 为可选增强,默认关闭。未开启时系统不探测模型、不创建 `.git` 目录,也不会因缺失功能报错。
## 关键决策概览
| 决策 | 说明 |
|------|------|
| **MCP JSON 序列化** | `memrelay://capabilities` 包含 `datetime`、`UUID` 或 Pydantic 对象时,先使用 FastAPI `jsonable_encoder` 再 `json.dumps`,避免生产环境序列化错误。 |
| **密码库读取性能** | 引入进程内 Bitwarden 快照,列表延迟从约 20 s 降至 ≈ 420‑431 ms(ARM64)。 |
| **Cookie `Secure` 动态化** | 根据请求协议动态决定 `Secure` 标记,解决公网 HTTPS 后局域网 HTTP 会话失效。 |
| **ARM64 构建迁移** | 提供可选构建时代理与 Debian 镜像参数,加速依赖下载;使用 Linux 容器只读挂载方式解决 Windows `tar` 符号链接问题。 |
| **数据库迁移 `20260805_0010`** | 为 `mcp_tokens` 表加入 `all_profiles`,实现全档案 Token 自动覆盖。 |
## 里程碑
- **2026‑08‑03**:完成部署拓扑,源码提交 `2d2e35a`,验证公网 HTTPS、FRP 映射、健康检查。
- **2026‑08‑05**:全链路审计,修复 JSON 序列化错误,ARM64 滚动发布 95 个 MCP 工具和 3 个资源。
- **2026‑08‑07**:完成全部测试(后端 153 项,前端 34 项),系统运行稳定。
*本文档引用的主要来源包括 `curated_baseline:b54bd6b0…`(部署概览)、`global_guidance_memory:bf88c265…`(开发实施原则)、`global_guidance_memory:3f91189b…`(可选 AI 与 Git)等。*
@@ -0,0 +1,92 @@
---
title: MemRelay System Architecture – Components and Deployment Topology
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/development/mem-relay-system-architecture-components-and-deployment-topology
stable_id: 6b2d8349-7a95-4a18-8e4b-20dd2ab95e2f
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: architecture
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:7ab8ac01-9e4d-4222-b224-7735fdeafdc8: '1'
memory:b9a463d1-5659-4baa-aaf4-6464661ef074: '1'
memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136: '1'
memory:23bcc4c0-4992-41d6-b70e-210937a76a0f: '1'
memory:9092af09-6a60-404e-88ad-3344f2fdf0ca: '1'
memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d: '1'
memory:109e5244-ad26-4650-8a49-e6cebbabe7d7: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:6b2d8349-7a95-4a18-8e4b-20dd2ab95e2f
- curated_baseline:eebf38d3-36dc-4b57-b8d7-1f2c8be2f234
- curated_baseline:b54bd6b0-bbdd-4ab2-92d3-a4f5d58e8f83
- curated_baseline:47740b04-4f30-47c0-a68c-8fe5e19133e7
- curated_baseline:d459e837-b05c-4f31-9b05-7f9d09c71f25
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- memory:7ab8ac01-9e4d-4222-b224-7735fdeafdc8
- memory:23bcc4c0-4992-41d6-b70e-210937a76a0f
- memory:b9a463d1-5659-4baa-aaf4-6464661ef074
- memory:9092af09-6a60-404e-88ad-3344f2fdf0ca
- memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d
- memory:109e5244-ad26-4650-8a49-e6cebbabe7d7
- memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136
job_cited_source_ids:
- curated_baseline:6b2d8349-7a95-4a18-8e4b-20dd2ab95e2f
conflicts: []
supersedes: []
preferences: []
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:36.631067+00:00'
updated_at: '2026-08-16T18:34:37.679408+00:00'
tags:
- architecture
---
# MemRelay 架构概览
## 高层技术栈
| 层级 | 技术 |
|------|------|
| **后端** | Python 3.12, FastAPI, FastMCP, SQLAlchemy, SQLite |
| **前端** | Vue 3, TypeScript, Vite, Element Plus, Vue I18n |
| **记忆引擎** | Basic Memory v0.22.1 (Markdown 存储), MiniLM 语义搜索 (降级为全文搜索) |
| **密码库** | Vaultwarden (兼容 Bitwarden) 带进程内快照 |
| **代理 / CDN** | OpenResty (HTTPS 终结, 静态资源缓存) |
| **容器化** | Docker Desktop (Windows) & Docker‑Compose (Linux) – 支持 `amd64` 与 `arm64` |
## 部署拓扑
- **公网入口**: `https://mr.asio.asia` – OpenResty 终止 TLS 并转发至 FRPS。
- **应用主机**: Armbian ARM64 (`192.168.32.100`) 监听端口 `3003`。
- **Compose 目录**: `/opt/1panel/docker/compose/memrelay`。
- **持久化存储**: `/data/memrelay-stack`(MemRelay 与 Basic Memory 共享挂载)。
- **FRP 栈**: OpenWrt 上的 FRPC `0.70.1` 使用 WebSocket 连接 FRPS;`MemRelay_http` 将 `mr.asio.asia` 映射到 `192.168.32.100:3003`。
- **会话 Cookie**: 根据请求协议动态决定 `Secure` 标记,局域网 HTTP 与公网 HTTPS 均可使用。
- **缓存策略**: OpenResty 对登录、API、MCP、密码库、上传下载等端点不启用代理缓存;静态资源使用 ETag 与浏览器缓存。
- **备份**: `/data/memrelay-backups/memrelay-20260805T234836Z.tar.gz`。
- **健康检查**: 内网、公网均验证登录、95 个 MCP 工具、Basic Memory、Vaultwarden 与数据迁移均正常。
@@ -0,0 +1,99 @@
---
title: MemRelay Troubleshooting Guide – Known Issues and Resolutions
type: curated
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/curated/development/mem-relay-troubleshooting-guide-known-issues-and-resolutions
stable_id: a6632d8d-f445-4932-8ffd-06f721ffc51b
scope: project
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: troubleshooting
revision: 8
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 20
source_revisions:
memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d: '1'
memory:9092af09-6a60-404e-88ad-3344f2fdf0ca: '1'
memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca: '1'
memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136: '1'
memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084: '1'
memory:109e5244-ad26-4650-8a49-e6cebbabe7d7: '1'
source_dispositions:
processed: 20
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:a6632d8d-f445-4932-8ffd-06f721ffc51b
- curated_baseline:f48a08a1-f276-4045-8ffe-22e7ac39e5c9
- curated_baseline:d459e837-b05c-4f31-9b05-7f9d09c71f25
- curated_baseline:b54bd6b0-bbdd-4ab2-92d3-a4f5d58e8f83
- curated_baseline:08fb4703-1527-4983-bb8e-e4ca735e4316
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- memory:c16b8950-20d2-4d3d-87b3-0a8bfd20790d
- memory:9092af09-6a60-404e-88ad-3344f2fdf0ca
- memory:41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca
- memory:b3fc5d7e-f1d7-4a63-860b-37f9f35cb136
- memory:e20b1ae7-4ba7-4c1d-9d79-59af809f9084
- memory:109e5244-ad26-4650-8a49-e6cebbabe7d7
job_cited_source_ids:
- curated_baseline:a6632d8d-f445-4932-8ffd-06f721ffc51b
conflicts: []
supersedes: []
preferences: []
source_cursor: 0
source_hash: cd96d5b27b5d1ef34ff30350e40c12b9d9b7e389c5813755521578d1f2597d9c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 4379a1f9-25d0-4c99-ae7e-6fd930239187
created_at: '2026-08-08T09:52:41.142992+00:00'
updated_at: '2026-08-16T18:34:43.976566+00:00'
tags:
- troubleshooting
---
# MemRelay 故障排查与性能优化
## 已知问题及解决方案
1. **ARM64 构建 / 依赖下载缓慢**
- *症状*: 在 ARM 主机上 PyPI 与 Debian 包下载极慢。
- *解决*: 在构建阶段使用仅生效的代理和 Debian 镜像参数,加速依赖下载,不影响运行时网络。
2. **Windows `tar` 无法读取模型缓存符号链接**
- *症状*: 正式部署期间 Windows `tar` 命令无法读取模型缓存的符号链接。
- *解决*: 使用 Linux 容器并在创建 ZIP 时以只读方式挂载缓存目录。
3. **局域网 HTTP 上的 Cookie `Secure` 属性**
- *症状*: 访问公网 HTTPS 后,内网 HTTP 会话因 Cookie 永久标记 `Secure` 而失效。
- *解决*: 根据当前请求协议动态设置 `Secure` 标记——HTTPS 设置,HTTP 清除,实现内网与公网同时可用。
4. **`memrelay://capabilities` JSON 序列化错误**
- *症状*: 序列化包含 `datetime` 对象的能力对象时抛出 `json.dumps` 异常。
- *解决*: 在 JSON 编码前通过 FastAPI `jsonable_encoder` 处理所有 MCP 资源和工具输出。已加入真实时间戳的回归测试。
5. **密码库列表延迟 (优化前)**
- *症状*: 在 ARM64 上列出 Vaultwarden 条目耗时约 20 秒。
- *解决*: 实现进程内 Bitwarden 快照,在启动、手动同步和定期同步时刷新。读取延迟降至约 420‑431 ms。
6. **ARM64 首次启动迁移延迟**
- *症状*: 迁移后容器首次启动耗时较长,健康检查失败。
- *解决*: 迁移前保留一致备份,容器完成数据库恢复后再执行健康检查。
## 未决事项 / 持续工作
- **AI 上游间歇 503/超时**: 任务进入 `waiting_dependency`,模型恢复后自动继续。计划实现 checkpoint‑resume 以避免重复消耗模型配额。
- **文档调用失败重试**: 失败任务在下次重试时重新生成证据批次,可能导致模型额度重复消耗。评估实现证据断点续跑的可行性。
- **UI 微调**: 继续根据实际使用反馈调整滚动行为。
- **Bitwarden 快照刷新间隔**: 进一步评估 optimal schedule 以降低延迟。
- **迁移文档**: 编写未来版本升级的模式迁移、备份/恢复脚本。
- **回归测试扩展**: 增加对真实时间字段与 Streamable HTTP MCP 的自动化测试。
@@ -0,0 +1,24 @@
---
title: 密码库读取性能优化与正式部署完成审计
type: experience
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/密码库读取性能优化与正式部署完成审计
stable_id: b3fc5d7e-f1d7-4a63-860b-37f9f35cb136
scope: project
memory_type: experience
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
status: active
revision: 1
request_id: memrelay-vault-cache-final-audit-20260803
created_at: '2026-08-02T22:48:05.110651+00:00'
updated_at: '2026-08-02T22:48:05.110651+00:00'
tags:
- vault
- performance
- deployment
- audit
- arm64
---
VaultService 已增加进程内 Bitwarden 条目快照:启动、手动同步和周期同步后刷新一次;列表、搜索、详情、密码读取和唯一匹配读取快照;新增、修改、删除立即更新快照;TOTP 仍实时调用 Bitwarden CLI;离线时保留最后快照。ARM64 公网密码库列表连续响应约 420-431 ms,替代原先约 20 秒的重复 CLI 列表调用。
最终审计:公网 MCP 提供 46 个工具和 3 个资源;项目名称、本机目录和 Git remote 可解析到同一项目;SPI NOR、TSO、cubic、reboot、MaskROM 混合检索均有结果且未降级;项目 ZIP 包含 aidocs/project_context.md、manifest 和精确到秒的倒序检查点时间线;正式密码库有 8 条凭证。MemRelay 0.1.0、Basic Memory 0.22.1、Bitwarden CLI 2026.7.0 正常,MemRelay 与 Basic Memory SQLite integrity_check 均为 ok,本地语义模型缓存完整。ARM64 容器与 FRPC 公网映射健康,OpenResty 未启用代理缓存,本机 Compose 已关闭。
@@ -0,0 +1,52 @@
---
title: 工作区界面与全档案 Token 发布
type: checkpoint
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/工作区界面与全档案-token-发布
stable_id: e20b1ae7-4ba7-4c1d-9d79-59af809f9084
scope: project
memory_type: checkpoint
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: dc95af81-47a8-4fe4-ad94-5a0e1097773d
created_at: '2026-08-05T12:21:55.706100+00:00'
updated_at: '2026-08-05T12:21:55.706100+00:00'
---
# 工作区界面与全档案 Token 发布
## 完成内容
- 弹窗头尾固定,Markdown、预览、日志和长列表改为内部滚动并按桌面浏览器高度自适应。
- 优化表单列宽、项目页标签与列表间距,工作区类型移到项目标题右侧。
- 删除独立进度页,检查点统一在项目开发时间线中管理并支持删除。
- 新增需求文档和任务列表记忆类型及全部类型的 Markdown 模板。
- 语言按钮移到品牌标题旁,使用档案管理迁入 MCP Token 页面。
- 新增全部档案 Token,自动覆盖后续创建的使用档案。
## 为什么这样做
- 减少页面级滚动和无意义留白,让高频编辑、列表浏览和项目历史查看更稳定。
- 统一检查点与开发时间线,避免重复入口。
- 让一个个人 MCP Token 可以自然覆盖当前及未来所有档案。
## 关键修改
- 数据库迁移到 20260805_0010,mcp_tokens 增加 all_profiles。
- 前后端、MCP、提示词、记忆类型、档案作用域和项目时间线同步更新。
## 验证结果
- 后端 145 passed、18 skipped,Ruff 通过。
- 前端 27 passed,ESLint、Prettier、TypeScript、Vite 和 Docker 构建通过。
- Windows Docker Desktop AMD64 与物理 Armbian ARM64 原生构建通过。
- https://mr.asio.asia、REST 健康检查、项目、记忆、Token、档案和模板浏览器验收通过。
## 遇到的问题与解决方案
- ARM64 首次迁移启动时间较长;保留一致性备份并等待迁移完成后,容器恢复健康且正式数据计数一致。
## 下一步
- 按实际使用反馈继续调整具体页面,不新增与真实工作流无关的抽象。
@@ -0,0 +1,37 @@
---
title: 生产态 MCP JSON 序列化约束
type: experience
permalink: main/projects/ebb54e31-5afe-4f9b-a291-4e3b03ca3b21/生产态-mcp-json-序列化约束
stable_id: 41e5bdb5-a67b-49bc-b8a6-ab20b4c66fca
scope: project
memory_type: experience
project_id: ebb54e31-5afe-4f9b-a291-4e3b03ca3b21
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: codex-20260807-production-mcp-json-serialization
created_at: '2026-08-07T03:18:32.413455+00:00'
updated_at: '2026-08-07T03:18:32.413455+00:00'
tags:
- mcp
- json
- datetime
- production
- regression
---
# 生产态 MCP JSON 序列化约束
## 问题
`memrelay://capabilities` 在 AI 整理状态含有 `datetime` 字段时,直接 `json.dumps` 会在生产环境触发 JSON 序列化错误。
## 结论
- MCP Resource 和工具输出应复用同一份能力数据。
- 输出 JSON 前统一经过 FastAPI `jsonable_encoder`,兼容 `datetime`、UUID 和 Pydantic 对象。
- 回归测试必须使用真实时间字段,并通过 Streamable HTTP MCP 同时验证 Resource 可解析且与 `capabilities_get` 一致。
## 经验
单元测试中的纯字典假数据无法覆盖此问题;能力发现、健康状态与 Resource 应在真实网络协议上做生产态验收。