fix(compact): return clear error for CLI providers (#3874)
This commit is contained in:
parent
5f4715acfc
commit
9fc62cefa2
69
src/agents/pi-embedded-runner/compact.test.ts
Normal file
69
src/agents/pi-embedded-runner/compact.test.ts
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
import { describe, expect, it, vi, beforeEach } from "vitest";
|
||||||
|
|
||||||
|
// Mock model-selection to control isCliProvider behavior
|
||||||
|
vi.mock("../model-selection.js", () => ({
|
||||||
|
isCliProvider: vi.fn((provider: string) => {
|
||||||
|
return provider === "claude-cli" || provider === "codex-cli";
|
||||||
|
}),
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Mock defaults
|
||||||
|
vi.mock("../defaults.js", () => ({
|
||||||
|
DEFAULT_PROVIDER: "anthropic",
|
||||||
|
DEFAULT_MODEL: "claude-sonnet-4",
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Mock models-config - ensure async function returns
|
||||||
|
vi.mock("../models-config.js", () => ({
|
||||||
|
ensureMoltbotModelsJson: vi.fn(async () => {}),
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Mock agent-paths
|
||||||
|
vi.mock("../agent-paths.js", () => ({
|
||||||
|
resolveMoltbotAgentDir: vi.fn(() => "/tmp/test-agent"),
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Mock utils
|
||||||
|
vi.mock("../../utils.js", () => ({
|
||||||
|
resolveUserPath: vi.fn((p: string) => p),
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Import after mocks are set up
|
||||||
|
import { compactEmbeddedPiSessionDirect } from "./compact.js";
|
||||||
|
|
||||||
|
describe("compactEmbeddedPiSessionDirect", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
vi.clearAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("returns error for CLI provider claude-cli", async () => {
|
||||||
|
const result = await compactEmbeddedPiSessionDirect({
|
||||||
|
sessionId: "test-session",
|
||||||
|
sessionFile: "/tmp/test.jsonl",
|
||||||
|
workspaceDir: "/tmp/workspace",
|
||||||
|
provider: "claude-cli",
|
||||||
|
model: "opus",
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.ok).toBe(false);
|
||||||
|
expect(result.compacted).toBe(false);
|
||||||
|
expect(result.reason).toContain("Compaction is not supported for CLI providers");
|
||||||
|
expect(result.reason).toContain("claude-cli");
|
||||||
|
expect(result.reason).toContain("Use /model to switch to an API provider");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("returns error for CLI provider codex-cli", async () => {
|
||||||
|
const result = await compactEmbeddedPiSessionDirect({
|
||||||
|
sessionId: "test-session",
|
||||||
|
sessionFile: "/tmp/test.jsonl",
|
||||||
|
workspaceDir: "/tmp/workspace",
|
||||||
|
provider: "codex-cli",
|
||||||
|
model: "default",
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result.ok).toBe(false);
|
||||||
|
expect(result.compacted).toBe(false);
|
||||||
|
expect(result.reason).toContain("Compaction is not supported for CLI providers");
|
||||||
|
expect(result.reason).toContain("codex-cli");
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -29,6 +29,7 @@ import { resolveMoltbotDocsPath } from "../docs-path.js";
|
|||||||
import type { ExecElevatedDefaults } from "../bash-tools.js";
|
import type { ExecElevatedDefaults } from "../bash-tools.js";
|
||||||
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../defaults.js";
|
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../defaults.js";
|
||||||
import { getApiKeyForModel, resolveModelAuthMode } from "../model-auth.js";
|
import { getApiKeyForModel, resolveModelAuthMode } from "../model-auth.js";
|
||||||
|
import { isCliProvider } from "../model-selection.js";
|
||||||
import { ensureMoltbotModelsJson } from "../models-config.js";
|
import { ensureMoltbotModelsJson } from "../models-config.js";
|
||||||
import {
|
import {
|
||||||
ensureSessionHeader,
|
ensureSessionHeader,
|
||||||
@ -114,6 +115,18 @@ export async function compactEmbeddedPiSessionDirect(
|
|||||||
|
|
||||||
const provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
const provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
||||||
const modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
const modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
||||||
|
|
||||||
|
// CLI providers (claude-cli, codex-cli, etc.) are not supported for compaction
|
||||||
|
// because they don't use the embedded Pi runner. Users need to switch to an
|
||||||
|
// API provider before compacting.
|
||||||
|
if (isCliProvider(provider, params.config)) {
|
||||||
|
return {
|
||||||
|
ok: false,
|
||||||
|
compacted: false,
|
||||||
|
reason: `Compaction is not supported for CLI providers (${provider}/${modelId}). Use /model to switch to an API provider before compacting.`,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const agentDir = params.agentDir ?? resolveMoltbotAgentDir();
|
const agentDir = params.agentDir ?? resolveMoltbotAgentDir();
|
||||||
await ensureMoltbotModelsJson(params.config, agentDir);
|
await ensureMoltbotModelsJson(params.config, agentDir);
|
||||||
const { model, error, authStorage, modelRegistry } = resolveModel(
|
const { model, error, authStorage, modelRegistry } = resolveModel(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user