From 407eeb32748ef1a5a707fa6e76a92c94be9056f4 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Tue, 16 Dec 2025 21:02:38 +0900 Subject: [PATCH] fix(anthropic-auto-compact): use OpenCode's official compaction mechanism and proper retry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) --- src/hooks/anthropic-auto-compact/executor.ts | 18 +++++++++++++++--- src/hooks/anthropic-auto-compact/storage.ts | 10 ++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/hooks/anthropic-auto-compact/executor.ts b/src/hooks/anthropic-auto-compact/executor.ts index daeabb1..7897d27 100644 --- a/src/hooks/anthropic-auto-compact/executor.ts +++ b/src/hooks/anthropic-auto-compact/executor.ts @@ -15,9 +15,13 @@ type Client = { body: { messageID: string; partID?: string } query: { directory: string } }) => Promise + prompt_async: (opts: { + path: { sessionID: string } + body: { parts: Array<{ type: string; text: string }> } + query: { directory: string } + }) => Promise } tui: { - submitPrompt: (opts: { query: { directory: string } }) => Promise showToast: (opts: { body: { title: string; message: string; variant: string; duration: number } }) => Promise @@ -190,7 +194,11 @@ export async function executeCompact( setTimeout(async () => { try { - await (client as Client).tui.submitPrompt({ query: { directory } }) + await (client as Client).session.prompt_async({ + path: { sessionID }, + body: { parts: [{ type: "text", text: "Continue" }] }, + query: { directory }, + }) } catch {} }, 500) return @@ -230,7 +238,11 @@ export async function executeCompact( setTimeout(async () => { try { - await (client as Client).tui.submitPrompt({ query: { directory } }) + await (client as Client).session.prompt_async({ + path: { sessionID }, + body: { parts: [{ type: "text", text: "Continue" }] }, + query: { directory }, + }) } catch {} }, 500) return diff --git a/src/hooks/anthropic-auto-compact/storage.ts b/src/hooks/anthropic-auto-compact/storage.ts index 8b2e93b..95e9fac 100644 --- a/src/hooks/anthropic-auto-compact/storage.ts +++ b/src/hooks/anthropic-auto-compact/storage.ts @@ -21,6 +21,11 @@ interface StoredToolPart { input: Record output?: string error?: string + time?: { + start: number + end?: number + compacted?: number + } } truncated?: boolean originalSize?: number @@ -124,6 +129,11 @@ export function truncateToolResult(partPath: string): { part.originalSize = originalSize part.state.output = TRUNCATION_MESSAGE + if (!part.state.time) { + part.state.time = { start: Date.now() } + } + part.state.time.compacted = Date.now() + writeFileSync(partPath, JSON.stringify(part, null, 2)) return { success: true, toolName, originalSize }