Skip to content

[Bug] l1-extractor 用 clean-workspace + 76 字节 stub context, LLM 返回空字符串 #176

@MOOSChen1989

Description

@MOOSChen1989

[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 数组 → 任务失败。

复现

  1. 在 OpenClaw 2026.6.5 上安装 TencentDB-Agent-Memory (memory-tencentdb plugin)
  2. main agent 用 deepseek-v4-flash (或任何 LLM)
  3. 触发任何会导致 l1-extractor 自动跑的场景
  4. 观察 OpenClaw gateway 日志, 看到 l1-extraction 任务 EMPTY_DUMP
  5. 检查临时 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=""

推测根因

  1. src/utils/clean-context-runner.ts 创建 memory-tdai-clean-workspace 临时目录, 故意让 bootstrap 和 skill scans 找不到内容
  2. src/core/record/l1-extractor.ts 通过这个 clean workspace 调 embedded agent runner
  3. embedded runner 期望从 workspace 读 SOUL/AGENTS/MEMORY 作为 system prompt 注入, 但 clean-workspace 是空目录, 只注入了 76 字节 stub
  4. 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 时:

  1. 保留 clean-workspace 隔离意图 (避免污染主 workspace)
  2. 显式传入 extraction 任务 prompt 作为 system + user prompt 的一部分, 不依赖从 workspace 读

或:

  • 在 clean-workspace 里写一个 76 字节以上的 extraction task brief (.NET .md 文件), 让 runner 能从 workspace 读到真实任务上下文
  • l1-extractor.tsrunAgent(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>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions