package main // 本文件只有一件事:给循环的记忆提取器套上「剔除子代理结果注记」这一层,并把这条 // 口径写在一个可测的入口上(M32)。 // // 为什么要单独一个函数,而不是在 `wire_runtime.go` 的 Options 字面量里就地调一次: // // - 它是**红线级**口径(子代理结论绝不进记忆库),值得有一个名字与一个测试, // 而不是夹在一长串 Options 里的一行调用 —— 那一行被删掉时没有任何东西会红; // - 组合根里所有「必须套上」的装饰都走这种小函数(同 `a.buildMemoryExtractor()` // 之于提取器本身),语义在函数名下,接线在唯一一处。 // // 判据与实现见 `internal/services/gateway/subagent_backfill_extract.go`:元数据 // (role=system + 注记标记),不是提示词。 import ( "git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/memory" "git.yeij.top/AskaEth/Cyrene_v2/internal/services/gateway" ) // loopMemoryExtractor 返回循环实际使用的提取器(`wire_runtime.go` 的 // `loop.Options.Extractor` 就是它):内层是组合根按配置构建的那个(LLM 或确定性), // 外层保证子代理结果注记**永远不进**抽取输入。 // // base 为 nil 时返回 nil(未配置提取器的部署逐字不变:循环那边同样是 nil 即跳过)。 func loopMemoryExtractor(base memory.Extractor) memory.Extractor { return gateway.WithoutSubagentNotes(base) }