chore: 导入旧记忆备份供恢复
This commit is contained in:
+77
@@ -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`
|
||||
+85
@@ -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`
|
||||
+131
@@ -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 延迟。
|
||||
- 编写未来版本升级的迁移文档(模式迁移、备份/恢复脚本)。
|
||||
- 评估是否实现证据断点续跑,避免模型额度重复消耗。
|
||||
+76
@@ -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`
|
||||
+144
@@ -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`(凭证与记忆边界)以及相关全局指导文档生成。*
|
||||
+197
@@ -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)等。*
|
||||
+92
@@ -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 与数据迁移均正常。
|
||||
+99
@@ -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 的自动化测试。
|
||||
Reference in New Issue
Block a user