Config/Compaction: expose safeguard preserve and quality settings (#25557)

Merged via squash.

Prepared head SHA: ea9904039a
Co-authored-by: rodrigouroz <384037+rodrigouroz@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
This commit is contained in:
Rodrigo Uroz
2026-03-07 12:13:13 -03:00
committed by GitHub
parent bdd0f74188
commit 4c0b873a4d
9 changed files with 88 additions and 0 deletions

View File

@@ -87,6 +87,7 @@ export function buildEmbeddedExtensionFactories(params: {
qualityGuardEnabled: qualityGuardCfg?.enabled ?? false,
qualityGuardMaxRetries: qualityGuardCfg?.maxRetries,
model: params.model,
recentTurnsPreserve: compactionCfg?.recentTurnsPreserve,
});
factories.push(compactionSafeguardExtension);
}

View File

@@ -5,7 +5,9 @@ import type { AgentMessage } from "@mariozechner/pi-agent-core";
import type { Api, Model } from "@mariozechner/pi-ai";
import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
import { describe, expect, it, vi } from "vitest";
import type { OpenClawConfig } from "../../config/config.js";
import * as compactionModule from "../compaction.js";
import { buildEmbeddedExtensionFactories } from "../pi-embedded-runner/extensions.js";
import { castAgentMessage } from "../test-helpers/agent-message-fixtures.js";
import {
getCompactionSafeguardRuntime,
@@ -403,6 +405,39 @@ describe("compaction-safeguard runtime registry", () => {
model,
});
});
it("wires oversized safeguard runtime values when config validation is bypassed", () => {
const sessionManager = {} as unknown as Parameters<
typeof buildEmbeddedExtensionFactories
>[0]["sessionManager"];
const cfg = {
agents: {
defaults: {
compaction: {
mode: "safeguard",
recentTurnsPreserve: 99,
qualityGuard: { maxRetries: 99 },
},
},
},
} as OpenClawConfig;
buildEmbeddedExtensionFactories({
cfg,
sessionManager,
provider: "anthropic",
modelId: "claude-3-opus",
model: {
contextWindow: 200_000,
} as Parameters<typeof buildEmbeddedExtensionFactories>[0]["model"],
});
const runtime = getCompactionSafeguardRuntime(sessionManager);
expect(runtime?.qualityGuardMaxRetries).toBe(99);
expect(runtime?.recentTurnsPreserve).toBe(99);
expect(resolveQualityGuardMaxRetries(runtime?.qualityGuardMaxRetries)).toBe(3);
expect(resolveRecentTurnsPreserve(runtime?.recentTurnsPreserve)).toBe(12);
});
});
describe("compaction-safeguard recent-turn preservation", () => {