import { describe, expect, it } from "vitest"; import { OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST } from "./host-compat.js"; import { buildContextEngineRuntimeSettings } from "./runtime-settings.js"; describe("context engine runtime settings", () => { it("builds declared normal runtime settings from host and model inputs", () => { const settings = buildContextEngineRuntimeSettings({ contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST, harnessId: "embedded", runtimeId: "direct", provider: "openai", requestedModel: "gpt-5.5", resolvedModel: "gpt-5.5", selectedContextEngineId: "hypermem", contextEngineSelectionSource: "configured", promptTokenBudget: 128_000, maxOutputTokens: 8192, }); expect(settings).toMatchObject({ schemaVersion: 1, runtime: { host: "openclaw", mode: "normal", harnessId: "embedded", runtimeId: "direct", }, model: { requested: "gpt-5.5", resolved: "gpt-5.5", provider: "openai", }, contextEngineSelection: { selectedId: "hypermem", source: "configured", }, executionHost: { id: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST.id, label: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST.label, }, limits: { promptTokenBudget: 128_000, maxOutputTokens: 8192, }, diagnostics: { fallbackReason: null, degradedReason: null, }, }); }); it("marks fallback mode when a fallback reason is present", () => { const settings = buildContextEngineRuntimeSettings({ contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST, resolvedModel: "gpt-5-mini", fallbackReason: "primary_unavailable", }); expect(settings.runtime.mode).toBe("fallback"); expect(settings.diagnostics.fallbackReason).toBe("provider_unavailable"); }); it("preserves known fallback reason codes", () => { const settings = buildContextEngineRuntimeSettings({ contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST, resolvedModel: "gpt-5-mini", fallbackReason: "provider_timeout", }); expect(settings.runtime.mode).toBe("fallback"); expect(settings.diagnostics.fallbackReason).toBe("provider_timeout"); }); it("marks fallback mode when resolved model differs from the requested model", () => { const settings = buildContextEngineRuntimeSettings({ contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST, requestedModel: "openai/gpt-5.5", resolvedModel: "anthropic/claude-sonnet-4-6", }); expect(settings.runtime.mode).toBe("fallback"); expect(settings.diagnostics.fallbackReason).toBeNull(); }); it("marks degraded mode when a degraded reason is present", () => { const settings = buildContextEngineRuntimeSettings({ contextEngineHost: OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST, resolvedModel: "gpt-5-mini", degradedReason: "context_pressure_high", }); expect(settings.runtime.mode).toBe("degraded"); expect(settings.diagnostics.degradedReason).toBe("context_overflow"); }); it("keeps host and selection ids nullable when unknown", () => { const settings = buildContextEngineRuntimeSettings({ contextEngineHost: { ...OPENCLAW_EMBEDDED_CONTEXT_ENGINE_HOST, id: "", }, }); expect(settings.contextEngineSelection).toEqual({ selectedId: null, source: "unknown", }); expect(settings.executionHost.id).toBeNull(); }); });