# 回响 · Personal Memory OS

一个本地优先、可安装的个人 AI 记忆系统。

## 已实现

- 粘贴或导入 AI 对话文本
- 先区分资料知识、个人记忆和执行状态，再识别定义/机制、洞察/决定、任务/阻碍等多维语义角色
- 区分用户表达与 AI 建议
- 确认、修改或忽略记忆
- 使用自然语言查询历史记忆
- 查看回答对应的原始来源
- 将已确认记忆导出为 Obsidian Markdown
- 前端配置任意 OpenAI 兼容模型 URL、API Key 和模型名
- API Key 使用本地 AES-256-GCM 加密保存，设置接口不返回明文
- 模型记忆提取、模型回答和失败自动降级
- 可选 Embedding 向量与关键词混合检索
- Episode 经历、自动 Thread 与记忆关系
- 周认知回顾
- Obsidian 自定义路径和基础双向同步
- ChatGPT、Claude、TXT、Markdown 与 ZIP 批量导入
- 可解释混合检索、固定质量评测和隐私安全诊断
- 增量 Obsidian 同步、冲突处理与删除墓碑
- 带 SHA-256 校验的完整备份、加密便携备份和原子恢复
- macOS 原生 AppKit + WKWebView 桌面应用，捆绑独立 Node 24 LTS 运行时
- 随机本地端口、应用独立数据目录、钥匙串主密钥和退出自动收尾
- 无需标题、标签、说话人或固定格式的随手记录
- 短行动、碎片清单和无标点语音转写鲁棒解析
- 相近记忆自动合并为多份可查看来源证据
- 可搜索、筛选、分页和直接修正的完整记忆库
- 检索“有帮助/不相关”反馈会影响后续排序和主动唤回
- DNS rebinding、跨站本机写入、远程明文模型和模型伪造证据防护
- 页面顶部常驻快速记录入口；全局快捷键可自选、关闭并查看注册冲突状态
- 时间感知检索先解析今天、昨天、前天、周、月、最近 N 天和具体日期，再按发生时间筛选记录
- 每日/多日活动回顾按完成事项、决定、想法、问题和待办整理，并可逐条打开原始来源
- 记忆质量门禁、知识图谱准入与概念聚合，避免低质量碎片污染长期知识网络
- 个性化学习顾问与持续学习计划，支持技能状态、知识缺口、阶段推进、暂缓和完成反馈
- “设置 → 数据维护”统一查看数据健康、重评、向量重建、空间移动、备份恢复和危险操作
- 数据维护可查看并重建每个来源的画像、父子 Passage、FTS、向量与错误状态；来源类型可由用户覆盖并随时恢复自动识别
- 本地备份文件可在“设置 → 数据维护”统一查看、在 Finder/资源管理器中定位并二次确认删除
- 学习笔记和技术资料建立文档摘要、父块、子块与全文索引，问答同时检索个人记忆和资料原文并补回章节上下文
- 长结构化资料只建立可检索 Passage，不再为了凑候选记忆而拆成大量洞察、灵感或行动；状态候选默认不进入稳定知识图谱
- Passage 检索反馈会独立影响资料排序；整库清空与备份恢复同时治理 Profile、Passage、FTS 和反馈数据
- “我的空间”统一管理平级的个人、学习、工作和自定义空间，每个空间只使用自身数据
- 工作台统一管理任务、可追溯决策、头脑风暴和空间内学习计划
- 日历事件、任务排期、重复提醒、macOS 通知和 Windows 通知/托盘
- 对话只在证据明显更强时建议切换空间，用户确认后才重新检索
- “和过去的自己”问题建议由当前已确认记忆动态生成，可单独隐藏建议或删除对话
- 文件和快速记录先保存到本地资料库，再由用户决定何时整理、是否进入长期记忆
- 资料库只管理原文、整理进度、归档和可逆回收；候选记忆统一到“记忆”确认、忽略、恢复和撤销
- 侧栏“本地记忆库”可直接打开桌面应用数据目录，不直接打开 SQLite 文件
- 通用状态、记忆生命周期、认知演化图、跨模型任务分配与证据化主动回顾
- 可解释长期个性化：候选需达到证据门槛并由用户确认，可修改、暂停、删除和回滚
- `echo-platform/v1` 能力发现、标准资料导入协议、标准证据上下文查询与可扩展导入器/模型适配器注册表
- 独立提示词资产库：原生连接 Codex、Claude Code 和 Cursor，也可导入 ChatGPT、Claude 与结构化对话文件；支持证据回看、分类检索、变量填写、工作流、版本和使用反馈
- 0.19.1 完成状态项目/人物/日期筛选、记录问题后的本地情境唤回、证据化周回顾、承诺/目标/项目/学习缺口提醒，以及迁移前快照和失败自动恢复

## 安装 macOS 应用

Apple Silicon（macOS 14 或更高）的 0.19.1 目标产物名如下：

- `EchoMemory-0.19.1-macOS-arm64.dmg`
- `EchoMemory-0.19.1-macOS-arm64.zip`
- `SHA256SUMS.txt`

打开 DMG，把“回响”拖到 Applications。当前构建是 ad hoc 本地签名，因为本机没有 Developer ID 证书；面向其他用户公开分发前，需要执行 `desktop/script/sign_and_notarize.sh` 完成 Developer ID 签名与 Apple 公证。

如果从较早的 ad hoc 测试包升级，macOS 可能会要求确认一次“回响”访问既有钥匙串密钥；这是临时签名身份随构建变化造成的。正式 Developer ID 签名后应用身份将保持稳定。

桌面数据保存在 `~/Library/Application Support/EchoMemory/data/`。API Key 的 AES-256-GCM 主密钥保存在 macOS 钥匙串，不会写入日志或普通配置文件。

## 安装 Windows 应用

Windows 10 22H2 / Windows 11 x64 便携版位于：

- `windows/build/release/EchoMemory-0.19.1-windows-x64.exe`
- `windows/build/release/EchoMemory-Setup-0.19.1-windows-x64.exe`
- `windows/build/release/SHA256SUMS.txt`

Windows 数据保存在 `%LOCALAPPDATA%\EchoMemory\data\`，主密钥保存在 Windows Credential Manager。便携版使用系统 WebView2；Windows 原生流水线还会生成带 WebView2 检查的 NSIS 安装器。详细说明见 `docs/windows-delivery.md`。

0.19.1 当前开发分支使用 schema 36，Windows 健康检查、自检和原生构建脚本均从迁移文件读取同一 schema 基线。Mac 上生成的 Windows EXE 只能算交叉编译候选包；必须回到真实 Windows 10/11 x64 执行 `--self-test`、主窗口、快速记录、通知、Credential Manager、安装升级/卸载、DPI、IME、睡眠和多屏矩阵后，才能升级为已验证发布包。正式签名、Defender/SmartScreen 和 MOTW 仍属于公开发行门禁。等级定义见 `docs/release-policy.md`。

在 Windows 系统中继续开发和验收前，请先阅读 `docs/windows-codex-handoff-0.19.1.md`，其中包含当前构建步骤、测试矩阵和接力清单。平台协议见 `docs/platform-api-v1.md`。

## 运行

```bash
npm install
npm run web:build
npm run web:start
```

打开 <http://127.0.0.1:8787>。

数据保存在 `data/memory-os.db`，Obsidian 导出到 `obsidian-vault/MemoryOS`。

## 本机浏览器版

`web:build` 和 `web:start` 启动的是可以实际使用的本机浏览器版，不是静态设计预览。浏览器页面与桌面应用共用同一套 Node API、SQLite 数据库、模型设置和资料处理链路，因此以下功能会真实写入本机数据：

- 快速记录、文件/文本导入、资料整理与记忆确认；
- 对话找回、原始证据查看、时间回顾与知识网络；
- 空间、工作台、学习计划、日历、数据维护、备份和模型配置。

网页顶部的“快速记录”会回到当前页面的记录框并自动聚焦，不依赖可能被浏览器拦截的弹窗；桌面应用仍会打开原生快速记录小窗。网页内的日历提醒以页面提示呈现，且需要页面保持打开。系统全局快捷键、托盘、系统级通知、直接打开本地数据目录和原生快速记录小窗属于 macOS/Windows 桌面应用能力。

当前浏览器版只监听 `127.0.0.1`，用于同一台电脑上的个人本机体验，不是公网多用户服务。公网部署需要另行实现账号认证、租户隔离、模型密钥代理、加密传输和服务端安全策略。

## 提示词资产库

打开侧栏“提示词”后，可以连接本机 Codex、Claude Code 和 Cursor，也可以导入 ChatGPT、Claude、通用 JSON 或结构化 Markdown 对话。建议按以下顺序使用：

1. 对需要使用的本机 Agent 先查看探测范围，再连接并同步；需要持续积累时为每个来源单独开启自动同步。
2. 选择“本地”或“模型”并预览整理范围，再生成待确认候选。模型模式使用“设置”中的 OpenAI 兼容模型，调用失败会回退到本地规则。
3. 在“待整理”中核对正文、推荐理由和来源证据，决定收藏或忽略。
4. 在“提示词库”中填写变量、复制使用、编辑版本，或将多步方法保存为带输入输出的工作流。
5. “已复制”“已使用”和“已验证”分别记录；复制次数不会被当成有效结果。

Codex 同步使用官方 App Server 的只读接口，覆盖可读的活动、归档和子任务。回响只保存用户消息和最终助手消息快照，不导入内部推理、工具命令、文件改动或 MCP 输出，也不会修改或删除 Codex 原始文件。断开来源只停止同步；清除快照需要输入来源名称确认，并保留已确认提示词和已有证据文字。

Claude Code 连接器逐行只读扫描本机项目历史，只保留用户和助手可见文本；Cursor 连接器只读扫描 Composer 数据库，只保留 HUMAN/AI 文本。两者都会排除 thinking、工具结果、Diff、控制台日志、附件及文件上下文。Cursor 使用其版本化内部存储格式，遇到不兼容 schema 会明确报错而不会猜测导入。

自动同步默认关闭。开启后，本地服务运行期间每五分钟检查一次增量；App 退出后不会常驻。ChatGPT 和 Claude 网页产品当前通过导出文件导入，不代表连接了对应云端账号。普通 Markdown 笔记不会被当作 Agent 对话，Markdown 导入必须包含明确的 `## 用户` / `## 助手` 标题或角色前缀。

## 验证与打包

```bash
npm run verify
desktop/script/build_and_run.sh --verify
desktop/script/package_release.sh
```

提示词提取规则可用脱敏夹具或本机 Codex 历史做只读评估；命令只输出聚合统计，不输出消息正文：

```bash
node --experimental-sqlite scripts/evaluate-prompt-extraction.mjs
node --experimental-sqlite scripts/evaluate-prompt-extraction.mjs --live --limit 20
```

桌面脚本还支持 `--debug`、`--logs` 和 `--telemetry`。

Windows 原生构建完成后可执行 `npm run windows:verify:native`，复验最终便携版、NSIS、自检、便携/安装应用的 x64 PE、NSIS 启动外壳、哈希和 Authenticode 状态，并生成 `windows-validation.json`。

原生构建会把完整 Git commit 写入 Windows EXE 和验收报告。将 Windows 生成的整个发布目录带回同一 commit 后，可执行 `npm run windows:evidence:verify` 跨平台复核发布/安装报告、两个 PE、SHA-256、schema、WebView2、Credential Manager 与 NSIS 生命周期；公开签名发行追加 `-- --require-authenticode`。

完整升级发布还应生成 `windows-upgrade-validation.json` 和 `upgrade-inputs`，再执行 `npm run windows:evidence:verify -- --require-upgrade --previous-version 0.18.0`，验证旧版输入、0.18→0.19 安装替换和默认卸载保留用户数据。

## 模型配置

打开“设置”，填写：

- 模型 URL，例如 `https://api.openai.com/v1`；
- 对话模型；
- API Key；
- 可选的 Embedding 模型。

系统使用 OpenAI 兼容的 `/chat/completions` 和 `/embeddings` 接口。没有配置模型时仍可使用本地规则；选择“自动”后，模型调用失败也会回退到本地能力。
