现象
- 执行
memos add "测试记忆" 命令返回成功(打印 memory added),但立即执行 memos get(用户描述为 memory list)时查不到刚写入的内容。
- 两个账号可稳定复现;退出重新登录仍存在。
复现步骤
- 已完成
memos init 或配置好 ~/.memos/config.yaml。
memos add "测试记忆" → 显示成功。
- 立即
memos get(或用户尝试的 memos list)→ 记忆缺失。
根因假设(基于代码证据)
1. memos list 命令根本不存在(表面 UX/文档不一致)
src/memos_cli/main.py:128-151 只注册了 add / search / get / origin / delete / extract / rerank / feedback / chat / message / status / kb;没有 list 命令,也没有 memory 子命令组。
- 但
MemOS CLI.md:52 与 skill 文档示例中出现 memos list --user-id ... --format table;README.md:145 又统一改为 memos get。
- 用户若照着
MemOS CLI.md 敲 memos list 会直接失败或落到 typer 的 help,Skill 层可能吞掉错误、看起来“查不到”。
2. add 走异步入库,但 CLI 的完成语义不准确
src/memos_cli/backend/memory_api.py:57-79:add_memory 调用 POST /add/message,是“消息 → 抽取 → 落库”的管道,天然是异步流程。
- API 支持
async_mode(memory_api.py:72),cmd_add 也透传该字段(src/memos_cli/commands/memory_cmd.py:251),但顶层 typer 命令没有暴露此选项,src/memos_cli/commands/memory.py:23-44 硬编码 async_mode=None,用户无法要求同步等待。
add 完成后 src/memos_cli/output.py:1084 直接打印 "memory added",未告知这是"入队成功"而非"已落库可查"。
- 后端
/get/status(src/memos_cli/backend/message_api.py:35-41)是现成的轮询入口,但 add 路径没有拿返回里的 task_id 去轮询,也没有把 task_id 提示给用户。
3. get 侧作用域正常,可以排除 scope 不匹配
src/memos_cli/backend/memory_api.py:168-190:/get/memory 只按 user_id 过滤,不受 conversation_id 影响。
- 而
add 默认走 DEFAULT_CONVERSATION_ID = "memos-cli-default"(memory_cmd.py:236-240),所以“scope 对不上”这个假设不成立,主因是时序 / 异步。
建议修复方向(供确认,不在本任务修改)
- 顶层
add 命令暴露 --async-mode/--wait/--wait-timeout,并在同步等待时基于响应中的 task_id 轮询 /get/status 直到 completed/failed。
- 完成信息更准确:
output.py 的 "memory added" 改为 "memory add accepted (task_id=..., not yet queryable)" 或在等待成功后再打印 added。
- 补齐
memos list 命令(作为 memos get 的别名 / 或替换文档)——统一 MemOS CLI.md、skill 示例、README.md 对该命令名的表述。
- 客户端可在
add 成功但 get 立即查询未命中时给出一次“记忆入库通常有异步延迟,请几秒后重试或使用 memos status <task_id>”的提示。
佐证行号
src/memos_cli/main.py:128-151(命令注册中没有 list)
src/memos_cli/commands/memory.py:23-44(add 未暴露 async_mode)
src/memos_cli/commands/memory_cmd.py:236-251(conversation_id 与 async_mode 传递)
src/memos_cli/backend/memory_api.py:57-79(/add/message)
src/memos_cli/backend/memory_api.py:168-190(/get/memory 按 user_id)
src/memos_cli/backend/message_api.py:35-41(/get/status 已存在但 add 未使用)
src/memos_cli/output.py:1084(提前打印 memory added)
MemOS CLI.md:52 vs README.md:145(memos list 与 memos get 表述冲突)
trace_id: a49426794ddd65d6ced38b27f2d47e63
现象
memos add "测试记忆"命令返回成功(打印memory added),但立即执行memos get(用户描述为memory list)时查不到刚写入的内容。复现步骤
memos init或配置好~/.memos/config.yaml。memos add "测试记忆"→ 显示成功。memos get(或用户尝试的memos list)→ 记忆缺失。根因假设(基于代码证据)
1.
memos list命令根本不存在(表面 UX/文档不一致)src/memos_cli/main.py:128-151只注册了add / search / get / origin / delete / extract / rerank / feedback / chat / message / status / kb;没有list命令,也没有memory子命令组。MemOS CLI.md:52与 skill 文档示例中出现memos list --user-id ... --format table;README.md:145又统一改为memos get。MemOS CLI.md敲memos list会直接失败或落到 typer 的 help,Skill 层可能吞掉错误、看起来“查不到”。2.
add走异步入库,但 CLI 的完成语义不准确src/memos_cli/backend/memory_api.py:57-79:add_memory调用POST /add/message,是“消息 → 抽取 → 落库”的管道,天然是异步流程。async_mode(memory_api.py:72),cmd_add也透传该字段(src/memos_cli/commands/memory_cmd.py:251),但顶层 typer 命令没有暴露此选项,src/memos_cli/commands/memory.py:23-44硬编码async_mode=None,用户无法要求同步等待。add完成后src/memos_cli/output.py:1084直接打印"memory added",未告知这是"入队成功"而非"已落库可查"。/get/status(src/memos_cli/backend/message_api.py:35-41)是现成的轮询入口,但add路径没有拿返回里的task_id去轮询,也没有把task_id提示给用户。3.
get侧作用域正常,可以排除 scope 不匹配src/memos_cli/backend/memory_api.py:168-190:/get/memory只按user_id过滤,不受conversation_id影响。add默认走DEFAULT_CONVERSATION_ID = "memos-cli-default"(memory_cmd.py:236-240),所以“scope 对不上”这个假设不成立,主因是时序 / 异步。建议修复方向(供确认,不在本任务修改)
add命令暴露--async-mode/--wait/--wait-timeout,并在同步等待时基于响应中的task_id轮询/get/status直到completed/failed。output.py的"memory added"改为"memory add accepted (task_id=..., not yet queryable)"或在等待成功后再打印 added。memos list命令(作为memos get的别名 / 或替换文档)——统一MemOS CLI.md、skill 示例、README.md 对该命令名的表述。add成功但get立即查询未命中时给出一次“记忆入库通常有异步延迟,请几秒后重试或使用memos status <task_id>”的提示。佐证行号
src/memos_cli/main.py:128-151(命令注册中没有list)src/memos_cli/commands/memory.py:23-44(add未暴露async_mode)src/memos_cli/commands/memory_cmd.py:236-251(conversation_id 与 async_mode 传递)src/memos_cli/backend/memory_api.py:57-79(/add/message)src/memos_cli/backend/memory_api.py:168-190(/get/memory 按 user_id)src/memos_cli/backend/message_api.py:35-41(/get/status 已存在但 add 未使用)src/memos_cli/output.py:1084(提前打印 memory added)MemOS CLI.md:52vsREADME.md:145(memos list与memos get表述冲突)trace_id: a49426794ddd65d6ced38b27f2d47e63