From d9859fff8153e68c995f6bfe9138c5ab04bd32ad Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Wed, 28 Jan 2026 23:31:08 -0500 Subject: [PATCH] fix(memory-claudemem): pass last_assistant_message to summarize hook The summarize hook needs the last assistant message to generate proper session summaries. Extract it from agent_end event.messages array. --- extensions/memory-claudemem/index.ts | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/extensions/memory-claudemem/index.ts b/extensions/memory-claudemem/index.ts index 8ea567f97..3cb4e74ba 100644 --- a/extensions/memory-claudemem/index.ts +++ b/extensions/memory-claudemem/index.ts @@ -329,12 +329,33 @@ export default function (api: ClawdbotPluginApi) { }); // agent_end → hook claude-code summarize (generate session summary) - api.on("agent_end", async (_event, ctx) => { + api.on("agent_end", async (event, ctx) => { const contentSessionId = getContentSessionId(ctx.sessionKey); + // Extract the last assistant message from the conversation + let lastAssistantMessage = ""; + if (Array.isArray(event.messages)) { + for (let i = event.messages.length - 1; i >= 0; i--) { + const msg = event.messages[i] as any; + if (msg?.role === "assistant") { + // Handle different content formats + if (typeof msg.content === "string") { + lastAssistantMessage = msg.content; + } else if (Array.isArray(msg.content)) { + const textParts = msg.content + .filter((c: any) => c.type === "text" && c.text) + .map((c: any) => c.text); + lastAssistantMessage = textParts.join("\n"); + } + break; + } + } + } + // Fire-and-forget summary generation callHookFireAndForget("summarize", { session_id: contentSessionId, + last_assistant_message: lastAssistantMessage, cwd: hookCwd, }); });