Skip to content

[Grok/dsh 54] 记忆捕获、整理与诊断 #186

Closed

Description

@Blackman99

Parent

#132

Ticket: 54

Status: ready-for-agent

User Stories: 52, 63, 64(见父规格)

What to build

用户启用后可自动捕获或手动整理会话知识,看到处理进度、结果和本地诊断,后台调用使用已配置模型。

Acceptance criteria

  • 以参考实际版本核实捕获/整理契约,文档过时冲突必须实证,不把不同存储代际拼在一起。
  • 提供商、发送内容范围与费用行为可解释;失败、取消、并发整理和重启不会覆盖人工修改。
  • 诊断默认不包含提示、秘密和自由文本,用户能关闭后台处理而不丢已有记忆。
  • 受控模型完成捕获到跨会话使用的测试,真实服务验证按已批准费用范围执行。

Blocked by

Delivery contract

用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。

Activity

  1. Blackman99 commented on Sep 26, 2026

    @Blackman99
    OwnerAuthor

    实现已在 rewrite/grok-dsh-20260920:e896d31(记忆捕获、Dream 整理与诊断)。真实模型验收发现的 4 个问题已修复:9b6eb6c(基于 95070ba,无需 rebase;#215 #216 #217 #218 已关闭)。

    真实运行验证(本机免费模型,无密钥,无费用)

    Qwen3-4B-Instruct-2507 Q4_K_M 跑在 llama.cpp b11200 CPU 上(llama-server,-c 20480,chat_completions),配置为 [model.local]。使用真实 launcher codsh --rust --fullscreen(PTY 驱动),隔离 HOME,不用 mock overlay,也没有 DSH_CODE_CLI_MOCK_*。第一轮在 95070ba 上逐条跑验收标准;修复后在全新 HOME 上复验 4 个问题。证据在 box 的 /workspace/evidence-186/(各阶段 README.md、屏幕、memory.log)和 /workspace/evidence-186/fixes/。

    • 按参考实际版本核实契约,不混用存储代际:对照 grok-build a28ee2b 的 flush.rs、dream.rs、dream_lock.rs、index.rs、query_expansion.rs、memory_state.rs、memory_dream.rs。只用旧版存储(MEMORY.md、sessions/*.md、index.sqlite)。[memory_v2] enabled = true 明确拒绝(capture 和 Dream 关闭,不碰 memory-v2/);修复后 inspect 只剩一条“not implemented”说明([Grok/dsh 54 跟进] memory_v2=true 时 inspect 另外报 unknown security/policy field #217)。首回合召回改为参考实现的关键词 OR + BM25([Grok/dsh 54 跟进] 首回合召回把所有词用 AND 连接,Dream 前召回不到会话日志 #216)。
    • 提供商、发送范围、费用可解释;失败、取消、并发和重启不覆盖人工修改:每次 /flush 和 /dream 都显示路由与发送量,例如 sent 7 messages / 3,003 chars to llamacpp/qwen3-4b-instruct-2507 · tokens in 634, out 66 · cost not reported by the provider。
    • 诊断默认不含提示、秘密和自由文本;可关闭后台处理且不丢已有记忆:/memory → s 的诊断只有游标、队列、gate、租约、上次结果和归档计数,没有测试秘密和提示原文。GROK_MEMORY_LOG 只写事件行。--no-memory 和 [memory] enabled = false 下,已有文件逐字节不变。
    • 受控模型完成从捕获到跨会话使用;真实服务按批准费用范围:
      • 真实模型完成了 3 轮对话、/flush 和增量 flush、session-end 摘要、/dream 合并(4 个日志归档),也完成了自动 Dream(launch gate)和空闲 flush。
      • 新会话从 MEMORY.md 答出了 BLUEHERON / blueheron-backups。
      • 修复后,Dream 之前的新会话,首回合就带上 [session sessions/2026-09-26-user_requested-1ee9a1f2.md],回答引用其中的 Redis 7 和 blueheron-backups([Grok/dsh 54 跟进] 首回合召回把所有词用 AND 连接,Dream 前召回不到会话日志 #216)。
      • keyless mock 的单测和 PTY 覆盖同一链路。
      • 真实服务只用本地免费模型,没有购买或调用付费服务。

    检查(本机 Linux x86_64,修复提交 9b6eb6c)

    • pnpm run typecheck 通过。pnpm test 107 个文件通过 / 2 个跳过,2638 passed / 15 skipped。
    • cargo test --locked --workspace:codsh-rust 777 passed / 4 失败,都是已知 Linux 基线失败(2 个 filesystem_sandbox Landlock、privacy structured_feedback、voice language);其他 crate 1043 passed。本次新增的单测:
      • first_flush_after_restart_uses_the_last_flush_on_disk
      • recall_matches_any_keyword_ranked_and_ignores_stop_words
      • memory_v2_is_a_known_field_with_one_refusal
      • memory_notice_retires_a_stale_busy_refusal_only
      • busy_refusals_are_recognized
      • 移植的 14 个 memory_keywords::tests
    • cargo fmt --check 干净。严格 Clippy -D warnings 只有基线已有的 filesystem_sandbox.rs:743 和 :1372 两项;加 -A dead_code -A clippy::needless_return 后 0 警告。
    • pnpm run build 和 pnpm run build:rust 成功,check:rust-package(linux-x64)和 rust-install-test.py 通过。
    • PTY:Linux 可运行的 18 个脚本全部通过,包括 rust-memory-capture-pty-test.py(新增 resumed flush、Dream 前召回、忙碌拒绝清除、memory_v2 inspect 四项检查,在 95070ba 上全部 RED,现已加入 test:rust:pty)以及 image-gen 和 video-gen。remote 因没有 OpenSSH 跳过;其余脚本需要 macOS,在 Linux 上按设计拒绝。
    • legacy e2e(pnpm 10)wrapper / pty-input / pty-session 41/41。

    与参考实现仍有的差异(均已写入文档)

    • [memory_v2](topics/observations 存储)未实现,明确拒绝。
    • pre-compaction flush 没有接入(压缩归 dsh 管)。语义去重需要 embeddings,也没有接入。
    • 不做秘密剥离(未批准该改动):flush 和 Dream 会把对话里出现的秘密原样写入本地会话日志和 MEMORY.md(真实运行中,测试用的 sk-demo 令牌就被模型写入了)。诊断和 GROK_MEMORY_LOG 不含内容。
    • 以下为本地改动,都为了保留人工修改:已有会话日志只追加;Dream 冲突时不写入;旧 MEMORY.md 和已整理日志移到 sessions/.archive/ 而不删除;重启后的增量 flush 从磁盘读回上一次 flush([Grok/dsh 54 跟进] 重启或 --resume 后的第一次 /flush 变成完整 flush,内容重复 #215,参考实现只放在内存)。
    • Dream 锁的过期回收与参考 dream_lock.rs 相同(真实运行中看到的锁竞争行为与参考实现一致)。5 分钟内改动过的会话日志不归档(参考实现的 recency guard)。

    另发现(未修)

    首回合带有记忆块的会话,dsh 自动标题会变成 <local-memory> Local memory notes the,因为标题取自带注入块的首条消息。修复前就存在,不影响记忆本身。是否另开跟进待确认。

    未改动

    main、npm 发布和默认切换都没有改动。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions