diff --git a/examples/opencode-memory-plugin/openviking-memory.ts b/examples/opencode-memory-plugin/openviking-memory.ts index 6f2ef6b8b..102512197 100644 --- a/examples/opencode-memory-plugin/openviking-memory.ts +++ b/examples/opencode-memory-plugin/openviking-memory.ts @@ -1019,6 +1019,19 @@ async function pollCommitTaskOnce( return task.status } catch (error: any) { + // If task not found (404/expired), clear commit state so new commits can proceed + if (error.message?.includes("not found") || error.message?.includes("404")) { + log("INFO", "session", "Commit task expired or not found, clearing commit state", { + openviking_session: mapping.ovSessionId, + opencode_session: opencodeSessionId, + task_id: mapping.commitTaskId, + error: error.message, + }) + clearCommitState(mapping) + debouncedSaveSessionMap() + return "completed" + } + log("ERROR", "session", "Failed to poll OpenViking background commit", { openviking_session: mapping.ovSessionId, opencode_session: opencodeSessionId, @@ -1454,7 +1467,7 @@ export const OpenVikingMemoryPlugin = async (input: PluginInput): Promise role: role, }) } - } else if (role === "assistant" && finish === "stop") { + } else if (role === "assistant") { mapping.messageRoles.set(messageId, role) log("DEBUG", "message", `${role} message completed and role stored`, { @@ -1463,6 +1476,15 @@ export const OpenVikingMemoryPlugin = async (input: PluginInput): Promise role: role, finish: finish, }) + + if (finish && finish !== "stop") { + log("INFO", "message", `assistant message role stored with non-stop finish`, { + session_id: sessionId, + message_id: messageId, + role: role, + finish: finish, + }) + } } await flushPendingMessages(sessionId, mapping, config)