feat: always report compaction status

This commit is contained in:
2026-08-01 19:09:10 +05:30
parent 39a2e32bb3
commit 55db9835a2
4 changed files with 19 additions and 27 deletions
+4
View File
@@ -1,5 +1,9 @@
# Changelog
## 0.2.3
- Always ask the model to report whether custom compaction instructions were applied.
## 0.2.2
- Add explicit markers for applied and skipped custom compaction instructions.
+1 -1
View File
@@ -47,7 +47,7 @@ Create `.opencode/compaction.md` in the project when you have project-specific c
Append mode is the recommended default because it preserves OpenCode's built-in compaction behavior. Replace mode is available when the complete prompt needs to be controlled by this plugin.
When neither a prompt nor a memory file is available, the plugin adds `opencode-plugin-compaction-prompt: No custom compaction applied.` instead.
When neither a prompt nor a memory file is available, the plugin asks the model to echo `opencode-plugin-compaction-prompt: No custom compaction applied.` instead.
## Development
+4 -16
View File
@@ -31,11 +31,7 @@ function buildInstructions(
prompt: string,
completionMarker: string,
memory: string,
): string | undefined {
if (!prompt && !memory) {
return undefined;
}
): string {
const sections = [
"## User Compaction Instructions",
`These instructions take precedence over previous instructions if there is conflict. At the very end of the summary, echo exactly: **${completionMarker}**`,
@@ -115,17 +111,9 @@ export const CompactionPromptPlugin: Plugin = async (
output,
): Promise<void> => {
const memory = await readMemory(memoryPath, logError);
const instructions = buildInstructions(prompt, completionMarker, memory);
if (!instructions) {
if (mode === "replace") {
output.prompt = skippedCompactionMarker;
} else {
output.context.push(skippedCompactionMarker);
}
return;
}
const marker =
prompt || memory ? completionMarker : skippedCompactionMarker;
const instructions = buildInstructions(prompt, marker, memory);
if (mode === "replace") {
output.prompt = instructions;
+10 -10
View File
@@ -116,9 +116,9 @@ describe("CompactionPromptPlugin", () => {
);
expect(context.logs).toHaveLength(0);
expect(output.context).toEqual([
"opencode-plugin-compaction-prompt: No custom compaction applied.",
]);
expect(output.context[0]).toContain(
"echo exactly: **opencode-plugin-compaction-prompt: No custom compaction applied.**",
);
});
test("adds a skipped marker when no instructions are provided", async () => {
@@ -133,10 +133,10 @@ describe("CompactionPromptPlugin", () => {
output,
);
expect(output.context).toEqual([
"Existing context",
"opencode-plugin-compaction-prompt: No custom compaction applied.",
]);
expect(output.context[0]).toBe("Existing context");
expect(output.context[1]).toContain(
"echo exactly: **opencode-plugin-compaction-prompt: No custom compaction applied.**",
);
expect(output.prompt).toBeUndefined();
});
@@ -154,8 +154,8 @@ describe("CompactionPromptPlugin", () => {
);
expect(context.logs).toHaveLength(1);
expect(output.context).toEqual([
"opencode-plugin-compaction-prompt: No custom compaction applied.",
]);
expect(output.context[0]).toContain(
"echo exactly: **opencode-plugin-compaction-prompt: No custom compaction applied.**",
);
});
});