mirror of
https://github.com/cline/cline.git
synced 2026-09-21 05:10:09 +08:00
Add compaction budget hardening (#12142)
* Add compaction budget projection contract * Tighten budget projection contract types * Tighten dropped block action paths * Add pure compaction budget projection engine * Fix budget projection truncation accounting * Drop provider-native blocks during budget projection * Recompute protected tail after thinking pruning * Align budget projection test tool results * Clean up budget projection fixture indentation * fix(core): narrow compaction protected tail * Fix budget projection action accounting * Budget agentic compaction summary input * Harden agentic summary budget fallback * Align agentic compaction test tool result * Align agentic file ops with projected input * Budget basic compaction projections * Clarify basic projection budget logging * Align basic sanitization image expectation * Align basic compaction budget expectation * Emit compaction budget emergency telemetry * Tighten compaction budget telemetry types * Preserve compaction status notice reasons * fix(core): account compaction tokens consistently * fix(core): align skipped compaction token accounting
This commit is contained in:
@@ -1,9 +1,45 @@
|
||||
import type { AgentEvent, TeamEvent } from "@cline/core";
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { handleEvent, handleTeamEvent } from "./events";
|
||||
import {
|
||||
handleEvent,
|
||||
handleTeamEvent,
|
||||
resolveStatusNoticeLabel,
|
||||
} from "./events";
|
||||
import { setCurrentOutputMode } from "./output";
|
||||
import type { Config } from "./types";
|
||||
|
||||
describe("resolveStatusNoticeLabel", () => {
|
||||
it("maps compaction status reasons to stable labels", () => {
|
||||
expect(
|
||||
resolveStatusNoticeLabel({
|
||||
type: "notice",
|
||||
noticeType: "status",
|
||||
displayRole: "status",
|
||||
message: "auto-compacting",
|
||||
reason: "auto_compaction",
|
||||
} as AgentEvent),
|
||||
).toBe("auto-compacting");
|
||||
expect(
|
||||
resolveStatusNoticeLabel({
|
||||
type: "notice",
|
||||
noticeType: "status",
|
||||
displayRole: "status",
|
||||
message: "manual",
|
||||
reason: "manual_compaction",
|
||||
} as AgentEvent),
|
||||
).toBe("compacting");
|
||||
expect(
|
||||
resolveStatusNoticeLabel({
|
||||
type: "notice",
|
||||
noticeType: "status",
|
||||
displayRole: "status",
|
||||
message: "compaction-budget-adjusted",
|
||||
reason: "compaction_budget_emergency",
|
||||
} as AgentEvent),
|
||||
).toBe("context budget adjusted");
|
||||
});
|
||||
});
|
||||
|
||||
describe("handleEvent text formatting", () => {
|
||||
let output = "";
|
||||
|
||||
|
||||
@@ -27,8 +27,13 @@ export function resolveStatusNoticeLabel(
|
||||
if (event.type !== "notice" || event.displayRole !== "status") {
|
||||
return undefined;
|
||||
}
|
||||
if (event.reason === "auto_compaction") {
|
||||
return "auto-compacting";
|
||||
switch (event.reason) {
|
||||
case "auto_compaction":
|
||||
return "auto-compacting";
|
||||
case "manual_compaction":
|
||||
return "compacting";
|
||||
case "compaction_budget_emergency":
|
||||
return "context budget adjusted";
|
||||
}
|
||||
return event.message.trim() || undefined;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user