[Bug] l1-extractor 用 clean-workspace + 76 字节 stub context, LLM 返回空字符串
问题
l1-extractor 触发时, plugin 调用 CleanContextRunner 创建一个干净临时 workspace (memory-tdai-clean-workspace/memory-tdai-l1-extraction-<sessionId>) 并把这个空 workspace传给 embedded agent runner。LLM 拿到的 context 注入只有 76 字节 stub(injectedWorkspaceFiles[*].injectedChars=76, missing=true, rawChars=0),没有 SOUL.md / AGENTS.md / MEMORY.md。LLM 不知道要提取什么, 返回空字符串, plugin 解析空字符串找不到 JSON 数组 → 任务失败。
复现
- 在 OpenClaw 2026.6.5 上安装 TencentDB-Agent-Memory (memory-tencentdb plugin)
- main agent 用 deepseek-v4-flash (或任何 LLM)
- 触发任何会导致 l1-extractor 自动跑的场景
- 观察 OpenClaw gateway 日志, 看到
l1-extraction 任务 EMPTY_DUMP
- 检查临时 workspace 路径, AGENTS.md/SOUL.md 都 missing=true
实际日志 (2026-06-10 20:36 GMT+8, from OpenClaw gateway)
[plugins] [memory-tdai] [runner] run() empty output after 2654ms
[plugins] [memory-tdai] [runner] [l1-debug] EMPTY_DUMP taskId=l1-extraction
meta.agentMeta.provider=deepseek model=deepseek-v4-flash
systemPromptReport.injectedWorkspaceFiles=[
{name:"AGENTS.md", missing:true, rawChars:0, injectedChars:76, truncated:false},
{name:"SOUL.md", missing:true, rawChars:0, injectedChars:76, truncated:false}
]
[plugins] [memory-tdai][l1-extractor] No JSON array found in extraction response
[plugins] [memory-tdai][l1-extractor] [l1-debug] NO_JSON taskId=l1-extraction, rawLen=0, cleanedLen=0, rawFull=""
推测根因
src/utils/clean-context-runner.ts 创建 memory-tdai-clean-workspace 临时目录, 故意让 bootstrap 和 skill scans 找不到内容
src/core/record/l1-extractor.ts 通过这个 clean workspace 调 embedded agent runner
- embedded runner 期望从 workspace 读 SOUL/AGENTS/MEMORY 作为 system prompt 注入, 但 clean-workspace 是空目录, 只注入了 76 字节 stub
- LLM 看到 stub 不知道任务上下文, 输出空字符串
期望行为
l1-extractor 任务的 embedded runner 调用应该显式传入 extraction 专用 system + user prompt, 而不是依赖从 workspace 读 SOUL/AGENTS/MEMORY。当前设计把"上下文隔离"和"任务输入"混在一起, 导致上下文隔离吃掉任务输入。
实测 (上游 issue 参考)
OpenClaw 主仓库的关联 issue #91942 已经被 ClawSweeper bot 关闭, 原因:
The reported failure is in the separately installed TencentDB Agent Memory plugin
OpenClaw source confirms lightweight runs omit bootstrap files by design
修复点在 TencentDB 上游
详见 openclaw/openclaw#91942
建议修复
l1-extractor 在调 embedded runner 时:
- 保留 clean-workspace 隔离意图 (避免污染主 workspace)
- 但显式传入 extraction 任务 prompt 作为 system + user prompt 的一部分, 不依赖从 workspace 读
或:
- 在 clean-workspace 里写一个 76 字节以上的 extraction task brief (.NET .md 文件), 让 runner 能从 workspace 读到真实任务上下文
- 改
l1-extractor.ts 调 runAgent(workspace, {systemPrompt, userPrompt}) 而不是依赖默认 boot
影响
- l1-extraction 任务持续失败, 整天 EMPTY_DUMP
- plugin auto-restore backup 兜底 → 零数据丢失, 但 scene_blocks/ 目录不更新
- 与 model 选型无关 (MiniMax-M2.7 / deepseek-v4-flash 同样失败)
- 与 provider 配额无关 (不撞 429 / timeout)
- 与 session 内容无关 (任何 session 触发都失败)
环境
- TencentDB-Agent-Memory 0.x (main 分支, commit f92b102)
- OpenClaw 2026.6.5 (5181e4f)
- Node.js v26 / Windows 11
- 真 workspace:
C:\Users\Chen\.openclaw\workspace
- 临时 workspace:
C:\tmp\openclaw\memory-tdai-clean-workspace / C:\tmp\openclaw\memory-tdai-l1-extraction-<sessionId>
[Bug] l1-extractor 用 clean-workspace + 76 字节 stub context, LLM 返回空字符串
问题
l1-extractor 触发时, plugin 调用
CleanContextRunner创建一个干净临时 workspace (memory-tdai-clean-workspace/memory-tdai-l1-extraction-<sessionId>) 并把这个空 workspace传给 embedded agent runner。LLM 拿到的 context 注入只有 76 字节 stub(injectedWorkspaceFiles[*].injectedChars=76, missing=true, rawChars=0),没有 SOUL.md / AGENTS.md / MEMORY.md。LLM 不知道要提取什么, 返回空字符串, plugin 解析空字符串找不到 JSON 数组 → 任务失败。复现
l1-extraction任务 EMPTY_DUMP实际日志 (2026-06-10 20:36 GMT+8, from OpenClaw gateway)
推测根因
src/utils/clean-context-runner.ts创建memory-tdai-clean-workspace临时目录, 故意让 bootstrap 和 skill scans 找不到内容src/core/record/l1-extractor.ts通过这个 clean workspace 调 embedded agent runner期望行为
l1-extractor 任务的 embedded runner 调用应该显式传入 extraction 专用 system + user prompt, 而不是依赖从 workspace 读 SOUL/AGENTS/MEMORY。当前设计把"上下文隔离"和"任务输入"混在一起, 导致上下文隔离吃掉任务输入。
实测 (上游 issue 参考)
OpenClaw 主仓库的关联 issue #91942 已经被 ClawSweeper bot 关闭, 原因:
详见 openclaw/openclaw#91942
建议修复
l1-extractor在调 embedded runner 时:或:
l1-extractor.ts调runAgent(workspace, {systemPrompt, userPrompt})而不是依赖默认 boot影响
环境
C:\Users\Chen\.openclaw\workspaceC:\tmp\openclaw\memory-tdai-clean-workspace/C:\tmp\openclaw\memory-tdai-l1-extraction-<sessionId>