mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 10:30:44 +00:00
fix(agents): reapply compaction settings after resource loader reload (#65602)
This commit is contained in:
@@ -70,6 +70,7 @@ import {
|
||||
consumeCompactionSafeguardCancelReason,
|
||||
setCompactionSafeguardCancelReason,
|
||||
} from "../pi-hooks/compaction-safeguard-runtime.js";
|
||||
import { applyPiCompactionSettingsFromConfig } from "../pi-settings.js";
|
||||
import { createPreparedEmbeddedPiSettingsManager } from "../pi-project-settings.js";
|
||||
import { createOpenClawCodingTools } from "../pi-tools.js";
|
||||
import { wrapStreamFnTextTransforms } from "../plugin-text-transforms.js";
|
||||
@@ -834,6 +835,11 @@ export async function compactEmbeddedPiSessionDirect(
|
||||
extensionFactories,
|
||||
});
|
||||
await resourceLoader.reload();
|
||||
applyPiCompactionSettingsFromConfig({
|
||||
settingsManager,
|
||||
cfg: params.config,
|
||||
contextTokenBudget: ctxInfo.tokens,
|
||||
});
|
||||
}
|
||||
|
||||
const { builtInTools, customTools } = splitSdkTools({
|
||||
|
||||
@@ -79,6 +79,7 @@ import {
|
||||
resolveBootstrapTotalMaxChars,
|
||||
} from "../../pi-embedded-helpers.js";
|
||||
import { subscribeEmbeddedPiSession } from "../../pi-embedded-subscribe.js";
|
||||
import { applyPiCompactionSettingsFromConfig } from "../../pi-settings.js";
|
||||
import { createPreparedEmbeddedPiSettingsManager } from "../../pi-project-settings.js";
|
||||
import { applyPiAutoCompactionGuard } from "../../pi-settings.js";
|
||||
import {
|
||||
@@ -1030,6 +1031,13 @@ export async function runEmbeddedAttempt(
|
||||
extensionFactories,
|
||||
});
|
||||
await resourceLoader.reload();
|
||||
// DefaultResourceLoader.reload() rehydrates settings from disk and can drop OpenClaw
|
||||
// compaction overrides applied in createPreparedEmbeddedPiSettingsManager.
|
||||
applyPiCompactionSettingsFromConfig({
|
||||
settingsManager,
|
||||
cfg: params.config,
|
||||
contextTokenBudget: params.contextTokenBudget,
|
||||
});
|
||||
}
|
||||
|
||||
// Get hook runner early so it's available when creating tools
|
||||
|
||||
@@ -23,6 +23,39 @@ describe("applyPiCompactionSettingsFromConfig", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("can restore reserveTokens after a simulated resource loader reload drops them below floor", () => {
|
||||
const cfg = {
|
||||
agents: { defaults: { compaction: { reserveTokensFloor: DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR } } },
|
||||
} as const;
|
||||
let reserve = 16_384;
|
||||
const keep = 20_000;
|
||||
const settingsManager = {
|
||||
getCompactionReserveTokens: () => reserve,
|
||||
getCompactionKeepRecentTokens: () => keep,
|
||||
applyOverrides: vi.fn((overrides: { compaction: { reserveTokens?: number } }) => {
|
||||
if (overrides.compaction.reserveTokens !== undefined) {
|
||||
reserve = overrides.compaction.reserveTokens;
|
||||
}
|
||||
}),
|
||||
};
|
||||
|
||||
const first = applyPiCompactionSettingsFromConfig({
|
||||
settingsManager,
|
||||
cfg,
|
||||
contextTokenBudget: 100_000,
|
||||
});
|
||||
expect(first.compaction.reserveTokens).toBe(DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR);
|
||||
|
||||
reserve = 16_384;
|
||||
const second = applyPiCompactionSettingsFromConfig({
|
||||
settingsManager,
|
||||
cfg,
|
||||
contextTokenBudget: 100_000,
|
||||
});
|
||||
expect(second.compaction.reserveTokens).toBe(DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR);
|
||||
expect(reserve).toBe(DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR);
|
||||
});
|
||||
|
||||
it("does not override when already above floor and not in safeguard mode", () => {
|
||||
const settingsManager = {
|
||||
getCompactionReserveTokens: () => 32_000,
|
||||
|
||||
Reference in New Issue
Block a user