例えば、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,zaioutputDir: dump を書き出すディレクトリincludeHeaders:trueなら headers も保存- 認証情報があるので通常は
false推奨
- 認証情報があるので通常は