mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 15:30:47 +00:00
fix(models): normalize provider runtime selection (#71259)
* fix(models): normalize provider runtime selection * fix(models): reverse codex-only runtime migration * fix(models): default runtime selection to pi * fix(status): label model runtime clearly * fix(status): align pi runtime label * fix(plugins): align tool result middleware runtime naming * fix(models): validate runtime overrides
This commit is contained in:
@@ -153,7 +153,7 @@ function resolveConfiguredTextVerbosity(params: {
|
||||
);
|
||||
}
|
||||
|
||||
function resolveRuntimeLabel(
|
||||
function resolveExecutionLabel(
|
||||
args: Pick<StatusArgs, "config" | "agent" | "sessionKey" | "sessionScope">,
|
||||
): string {
|
||||
const sessionKey = args.sessionKey?.trim();
|
||||
@@ -197,8 +197,18 @@ function resolveRuntimeLabel(
|
||||
return `${runtime}/${sandboxMode}`;
|
||||
}
|
||||
|
||||
function resolveRunnerLabel(
|
||||
args: Pick<StatusArgs, "config" | "sessionEntry"> & { fallbackProvider?: string },
|
||||
const AGENT_RUNTIME_LABELS: Readonly<Record<string, string>> = {
|
||||
pi: "OpenClaw Pi Default",
|
||||
codex: "OpenAI Codex",
|
||||
"codex-cli": "OpenAI Codex",
|
||||
"claude-cli": "Claude CLI",
|
||||
"google-gemini-cli": "Gemini CLI",
|
||||
};
|
||||
|
||||
function resolveAgentRuntimeLabel(
|
||||
args: Pick<StatusArgs, "config" | "sessionEntry" | "resolvedHarness"> & {
|
||||
fallbackProvider?: string;
|
||||
},
|
||||
): string {
|
||||
const acpAgentRaw = normalizeOptionalString(args.sessionEntry?.acp?.agent);
|
||||
const acpAgent = acpAgentRaw ? sanitizeTerminalText(acpAgentRaw) : undefined;
|
||||
@@ -208,16 +218,28 @@ function resolveRunnerLabel(
|
||||
return backend ? `${acpAgent} (acp/${backend})` : `${acpAgent} (acp)`;
|
||||
}
|
||||
|
||||
const runtimeRaw =
|
||||
normalizeOptionalString(args.resolvedHarness) ??
|
||||
normalizeOptionalString(args.sessionEntry?.agentRuntimeOverride) ??
|
||||
normalizeOptionalString(args.sessionEntry?.agentHarnessId);
|
||||
const runtime = normalizeOptionalLowercaseString(runtimeRaw);
|
||||
if (runtime && runtime !== "auto" && runtime !== "default") {
|
||||
return AGENT_RUNTIME_LABELS[runtime] ?? sanitizeTerminalText(runtimeRaw ?? runtime);
|
||||
}
|
||||
|
||||
const providerRaw =
|
||||
normalizeOptionalString(args.sessionEntry?.modelProvider) ??
|
||||
normalizeOptionalString(args.sessionEntry?.providerOverride) ??
|
||||
normalizeOptionalString(args.fallbackProvider);
|
||||
const provider = providerRaw ? sanitizeTerminalText(providerRaw) : undefined;
|
||||
if (provider && isCliProvider(provider, args.config)) {
|
||||
return `${provider} (cli)`;
|
||||
return (
|
||||
AGENT_RUNTIME_LABELS[normalizeOptionalLowercaseString(providerRaw) ?? ""] ??
|
||||
`${provider} (cli)`
|
||||
);
|
||||
}
|
||||
|
||||
return "pi (embedded)";
|
||||
return AGENT_RUNTIME_LABELS.pi;
|
||||
}
|
||||
|
||||
const formatTokens = (total: number | null | undefined, contextTokens: number | null) => {
|
||||
@@ -264,14 +286,6 @@ const formatQueueDetails = (queue?: QueueStatus) => {
|
||||
return detailParts.length ? ` (${detailParts.join(" · ")})` : "";
|
||||
};
|
||||
|
||||
const formatHarnessLabel = (harnessId: string | undefined) => {
|
||||
const normalized = normalizeOptionalLowercaseString(harnessId);
|
||||
if (!normalized || normalized === "pi" || normalized === "auto") {
|
||||
return null;
|
||||
}
|
||||
return normalized;
|
||||
};
|
||||
|
||||
const readUsageFromSessionLog = (
|
||||
sessionId?: string,
|
||||
sessionEntry?: SessionEntry,
|
||||
@@ -685,10 +699,11 @@ export function buildStatusMessage(args: StatusArgs): string {
|
||||
args.agent?.elevatedDefault ??
|
||||
"on";
|
||||
|
||||
const runtime = { label: resolveRuntimeLabel(args) };
|
||||
const runnerLabel = resolveRunnerLabel({
|
||||
const execution = { label: resolveExecutionLabel(args) };
|
||||
const agentRuntimeLabel = resolveAgentRuntimeLabel({
|
||||
config: args.config,
|
||||
sessionEntry: args.sessionEntry,
|
||||
resolvedHarness: args.resolvedHarness,
|
||||
fallbackProvider: activeProvider,
|
||||
});
|
||||
|
||||
@@ -743,11 +758,10 @@ export function buildStatusMessage(args: StatusArgs): string {
|
||||
model: activeModel,
|
||||
});
|
||||
const optionParts = [
|
||||
`Runtime: ${runtime.label}`,
|
||||
`Runner: ${runnerLabel}`,
|
||||
`Execution: ${execution.label}`,
|
||||
`Runtime: ${agentRuntimeLabel}`,
|
||||
`Think: ${thinkLevel}`,
|
||||
formatFastModeLabel(fastMode),
|
||||
formatHarnessLabel(args.resolvedHarness),
|
||||
textVerbosity ? `Text: ${textVerbosity}` : null,
|
||||
verboseLabel,
|
||||
traceLabel,
|
||||
|
||||
Reference in New Issue
Block a user