Skip to content

Instantly share code, notes, and snippets.

@koteitan
Last active March 19, 2026 11:57
Show Gist options
  • Select an option

  • Save koteitan/60e77e24ba0e344f7aa90269183d886b to your computer and use it in GitHub Desktop.

Select an option

Save koteitan/60e77e24ba0e344f7aa90269183d886b to your computer and use it in GitHub Desktop.
openclaw のモデルプロバイダ向けの http リクエストをログするための改造です

コード改造例

例えば、openai-codex の場合は下記のような感じ ~/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw/node_modules/@mariozechner/pi-ai/dist/providers/openai-codex-responses.js

//ここから挿入コード-------------------------
try {
  const controlPath = "/tmp/openclaw-request-dump.json";
  if (existsSync(controlPath)) {
    const cfg = JSON.parse(readFileSync(controlPath, "utf8"));
    const enabled = cfg?.enabled === true;
    const target = Array.isArray(cfg?.target) ? cfg.target : [];
    if (enabled && target.includes("openai-codex")) {
      const outputDir = cfg?.outputDir || "/tmp";
      const includeHeaders = cfg?.includeHeaders === true;

      mkdirSync(outputDir, { recursive: true });

      const now = new Date();
      const hhmmss = now.toISOString().slice(11, 19).replace(/:/g, "");

      const payload = {
        provider: "openai-codex",
        model: model?.id || model?.name,
        url: resolveCodexUrl(model.baseUrl),
        body: bodyJson
      };

      if (includeHeaders) payload.headers = Object.fromEntries(headers.entries());

      writeFileSync(
        `${outputDir}/${hhmmss}.json`,
        JSON.stringify(payload, null, 2)
      );
    }
  }
} catch (e) {
  // dump 失敗で本処理を止めない
}
//ここまで挿入コード-------------------------

response = await fetch(resolveCodexUrl(model.baseUrl), {
  method: "POST",
  headers,
  body: bodyJson,
  signal: options?.signal,
});

制御ファイル

制御ファイルは dump を出す出さないを gateway 稼働中に切り替えるための設定ファイル。

パス例:

/tmp/openclaw-request-dump.json

内容例:

{
  "enabled": false,
  "target": ["openai-codex"],
  "outputDir": "/tmp/openclaw-request-dumps",
  "includeHeaders": false
}

各フィールド

  • enabled: true でダンプする、false でダンプしない
  • target: dump 対象 provider の配列。例: openai-codex, anthropic, zai
  • outputDir: dump を書き出すディレクトリ
  • includeHeaders: true なら headers も保存
    • 認証情報があるので通常は false 推奨
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment