import type { ClawdbotConfig } from "../config/config.js"; export const DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR = 20_000; type PiSettingsManagerLike = { getCompactionReserveTokens: () => number; applyOverrides: (overrides: { compaction: { reserveTokens: number }; }) => void; }; export function ensurePiCompactionReserveTokens(params: { settingsManager: PiSettingsManagerLike; minReserveTokens?: number; }): { didOverride: boolean; reserveTokens: number } { const minReserveTokens = params.minReserveTokens ?? DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR; const current = params.settingsManager.getCompactionReserveTokens(); if (current >= minReserveTokens) { return { didOverride: false, reserveTokens: current }; } params.settingsManager.applyOverrides({ compaction: { reserveTokens: minReserveTokens }, }); return { didOverride: true, reserveTokens: minReserveTokens }; } export function resolveCompactionReserveTokensFloor( cfg?: ClawdbotConfig, ): number { const raw = cfg?.agents?.defaults?.compaction?.reserveTokensFloor; if (typeof raw === "number" && Number.isFinite(raw) && raw >= 0) { return Math.floor(raw); } return DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR; }