Skip to content

🐛 [P1] memory evidence_refs quote 落盘通道未脱敏——PR#445 的 sanitize 作用于从不落盘的字段 #449

Description

@CavinHuang

背景

PR #445(编排记忆批,已合入 main @ fb6dddc)review 发现:evidence quote 脱敏修复未覆盖真实落盘通道,密钥仍可经 memory frontmatter 泄漏给 agent 回吐链路。

问题

sanitizeEvidenceQuote(apps/sidecar/src/services/memory-v2/command-service.ts:77/150/619-621)只过滤 candidate.evidence.quote,但该字段全仓无任何消费点、从不落盘——实为无效修复。

真正的落盘通道是 evidence_refs[].quote,原样透传:

  • markdown-store.ts:197:evidence_refs: input.evidenceRefs ?? evidenceRefsFromCandidate(candidate) → YAML.stringify 进 frontmatter
  • markdown-store.ts:884:直接返回 candidate.evidenceRefs 原文
  • 三条来源均未过滤:
    • background-extractor(整条源消息 ≤12k 截断的 quote)
    • ingestion.ts:172(文件 chunk 2000 字符)
    • dream-organizer(workspace quote)
  • 落盘后经 memory.read 工具(tools.ts:141)回吐 agent

密钥正则扩展本身没问题(command-service.ts:608-614),问题只在作用对象错了。

建议修法

对构造后的 evidenceRefs 逐 ref 执行 containsSecret(ref.quote)→占位替换:

  • 方案 A:command-service.ts:79/152/87 三个构造点统一过滤
  • 方案 B(更收口):markdown-store.ts:197 writeEntry 序列化前统一过滤
  • 同时给 sanitizeEvidenceQuote 补消费点或直接删除

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions