mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-28 10:22:20 +00:00
Behavior addressed: The codex-cli metadata branch no longer calls process.exit(0) immediately after writing stdout, and it still emits exactly one unsupported-backend JSON object. Real environment tested: Local OpenClaw source checkout on macOS with Node/tsx. Exact steps or command run after this patch: pnpm test test/scripts/print-cli-backend-live-metadata.test.ts test/scripts/docker-build-helper.test.ts; node --import tsx scripts/print-cli-backend-live-metadata.ts codex-cli | python3 -c 'import sys,json; print(json.load(sys.stdin)["provider"])'; autoreview --mode branch --base origin/main --no-web-search. Evidence after fix: Focused tooling test shard passed 2 files / 23 tests; direct pipe parse printed codex-cli; autoreview reported no accepted/actionable findings; PR status rollup was clean. Observed result after fix: stdout is parseable as a single JSON payload and the normal metadata path is skipped for codex-cli. What was not tested: Live provider metadata paths beyond the focused existing test coverage. Co-authored-by: Iftekhar Uddin <ifuddin3@gmail.com>
84 lines
2.7 KiB
TypeScript
84 lines
2.7 KiB
TypeScript
import { resolveCliBackendConfig, resolveCliBackendLiveTest } from "../src/agents/cli-backends.js";
|
|
|
|
const provider = process.argv[2]?.trim().toLowerCase();
|
|
|
|
if (!provider) {
|
|
console.error("usage: node scripts/print-cli-backend-live-metadata.ts <provider>");
|
|
process.exit(1);
|
|
}
|
|
|
|
if (provider === "codex-cli") {
|
|
process.stdout.write(
|
|
JSON.stringify(
|
|
{
|
|
provider,
|
|
unsupported: true,
|
|
reason:
|
|
"codex-cli is no longer a bundled CLI backend. Use openai/* with the Codex app-server runtime instead.",
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
process.exitCode = 0;
|
|
} else {
|
|
await printBackendMetadata(provider);
|
|
}
|
|
|
|
async function printBackendMetadata(provider: string) {
|
|
const resolved = resolveCliBackendConfig(provider);
|
|
const liveTest = resolveCliBackendLiveTest(provider);
|
|
const fallbackBackend =
|
|
!resolved || !liveTest?.defaultModelRef ? await loadFallbackBackend(provider) : null;
|
|
const backendConfig = resolved?.config ?? fallbackBackend?.config;
|
|
const backendLiveTest =
|
|
liveTest ??
|
|
(fallbackBackend
|
|
? {
|
|
defaultModelRef: fallbackBackend.liveTest?.defaultModelRef,
|
|
defaultImageProbe: fallbackBackend.liveTest?.defaultImageProbe === true,
|
|
defaultMcpProbe: fallbackBackend.liveTest?.defaultMcpProbe === true,
|
|
dockerNpmPackage: fallbackBackend.liveTest?.docker?.npmPackage,
|
|
dockerBinaryName: fallbackBackend.liveTest?.docker?.binaryName,
|
|
}
|
|
: null);
|
|
|
|
process.stdout.write(
|
|
JSON.stringify(
|
|
{
|
|
provider,
|
|
command: backendConfig?.command,
|
|
args: backendConfig?.args,
|
|
clearEnv: backendConfig?.clearEnv ?? [],
|
|
imageArg: backendConfig?.imageArg,
|
|
imageMode: backendConfig?.imageMode,
|
|
systemPromptWhen: backendConfig?.systemPromptWhen ?? "never",
|
|
bundleMcp: resolved?.bundleMcp === true || fallbackBackend?.bundleMcp === true,
|
|
bundleMcpMode: resolved?.bundleMcpMode ?? fallbackBackend?.bundleMcpMode,
|
|
defaultModelRef: backendLiveTest?.defaultModelRef,
|
|
defaultImageProbe: backendLiveTest?.defaultImageProbe === true,
|
|
defaultMcpProbe: backendLiveTest?.defaultMcpProbe === true,
|
|
dockerNpmPackage: backendLiveTest?.dockerNpmPackage,
|
|
dockerBinaryName: backendLiveTest?.dockerBinaryName,
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
}
|
|
|
|
async function loadFallbackBackend(id: string) {
|
|
switch (id) {
|
|
case "claude-cli": {
|
|
const mod = await import("../extensions/anthropic/cli-backend.ts");
|
|
return mod.buildAnthropicCliBackend();
|
|
}
|
|
case "google-gemini-cli": {
|
|
const mod = await import("../extensions/google/cli-backend.ts");
|
|
return mod.buildGoogleGeminiCliBackend();
|
|
}
|
|
default:
|
|
return null;
|
|
}
|
|
}
|