Skip to content

superpowers 插件触发 tool_use without tool_result 协议适配错误 #79

Description

@aajj1314

环境

  • Moon Bridge: 4dd578a (main)
  • Go: 1.25.0
  • Codex CLI: @openai/codex (npm global)
  • 插件: superpowers@openai-curated v5.1.1 (obra/superpowers)
  • Provider: DeepSeek V4 Pro (api.deepseek.com/anthropic)
  • Mode: Transform

复现步骤

  1. 按 CookBook 配置 config.yml,路由到 deepseek-v4-pro
  2. codex 启动后在 Codex 中安装 superpowers 插件
  3. 正常对话 → Codex 加载插件 skill → 触发多轮工具调用

现象

插件加载后,模型尝试执行工具调用时陷入死循环重试,所有请求返回 400。Moon Bridge 日志中同一错误出现 120+ 次:

level=ERROR msg=提供商错误 model=deepseek-v4-pro status=400
error="messages.24: `tool_use` ids were found without `tool_result` blocks
immediately after: call_00_LNkq2jRqL1Dbu1ToYi7x7744. Each `tool_use` block
must have a corresponding `tool_result` block in the next message."
req_messages=25 req_tools=22

分析

Superpowers 插件工作流中会产生大量 tool_use/tool_result 消息交互(子代理调度、文件读写等)。adapter 在转换 Codex → DeepSeek Anthropic Messages 格式时,某条 tool_use 消息与其对应的 tool_result 被拆分到了不同的请求中,破坏了 DeepSeek API 的约束(每个 tool_use 必须紧跟 tool_result)。

Superpowers 是 Codex 目前最流行的插件框架之一,修复此问题能显著提升 moon-bridge 对 Codex 生态的兼容性。

config.yml (脱敏)

mode: "Transform"
server:
  addr: "127.0.0.1:38440"
models:
  deepseek-v4-pro:
    context_window: 1000000
    max_output_tokens: 384000
    extensions:
      deepseek_v4:
        enabled: true
    default_reasoning_level: "high"
    supported_reasoning_levels:
      - effort: "high"
      - effort: "xhigh"
    supports_reasoning_summaries: true
    default_reasoning_summary: "auto"
providers:
  deepseek:
    base_url: "https://api.deepseek.com/anthropic"
    api_key: "sk-***"
    offers:
      - model: deepseek-v4-pro
routes:
  moonbridge:
    model: deepseek-v4-pro
    provider: deepseek

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions