fix: return clear error when compacting CLI provider sessions

CLI providers (claude-cli, codex-cli, custom backends) don't have
models in the standard registry, so compaction fails with a confusing
"Unknown model" error. Add an early isCliProvider() check to return
a clear message explaining compaction isn't supported for CLI providers.

Fixes #3874

Co-Authored-By: Ayush Ojha <ayushozha@outlook.com>
This commit is contained in:
Ayush Ojha 2026-01-30 01:24:13 -08:00
parent 6af205a13a
commit 35d7e46cd8

View File

@ -28,6 +28,7 @@ import { makeBootstrapWarn, resolveBootstrapContextForRun } from "../bootstrap-f
import { resolveOpenClawDocsPath } from "../docs-path.js";
import type { ExecElevatedDefaults } from "../bash-tools.js";
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../defaults.js";
import { isCliProvider } from "../model-selection.js";
import { getApiKeyForModel, resolveModelAuthMode } from "../model-auth.js";
import { ensureOpenClawModelsJson } from "../models-config.js";
import {
@ -114,6 +115,15 @@ export async function compactEmbeddedPiSessionDirect(
const provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
const modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
if (isCliProvider(provider, params.config)) {
return {
ok: false,
compacted: false,
reason: `Compaction is not supported for CLI providers (${provider}/${modelId}). Switch to an API-based model to use /compact.`,
};
}
const agentDir = params.agentDir ?? resolveOpenClawAgentDir();
await ensureOpenClawModelsJson(params.config, agentDir);
const { model, error, authStorage, modelRegistry } = resolveModel(