From c771eb5acd8cdad09d61b0037b3b1a63b2f93e2b Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 15 Feb 2026 14:53:26 +0900 Subject: [PATCH] feat: implement SQLite backend for injectTextPart via HTTP PATCH --- .../storage/text-part-injector.ts | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/hooks/session-recovery/storage/text-part-injector.ts b/src/hooks/session-recovery/storage/text-part-injector.ts index 796f3cfdc..d20800a98 100644 --- a/src/hooks/session-recovery/storage/text-part-injector.ts +++ b/src/hooks/session-recovery/storage/text-part-injector.ts @@ -1,13 +1,16 @@ import { existsSync, mkdirSync, writeFileSync } from "node:fs" import { join } from "node:path" +import type { PluginInput } from "@opencode-ai/plugin" import { PART_STORAGE } from "../constants" import type { StoredTextPart } from "../types" import { generatePartId } from "./part-id" -import { log, isSqliteBackend } from "../../../shared" +import { log, isSqliteBackend, patchPart } from "../../../shared" + +type OpencodeClient = PluginInput["client"] export function injectTextPart(sessionID: string, messageID: string, text: string): boolean { if (isSqliteBackend()) { - log("[session-recovery] Disabled on SQLite backend: injectTextPart") + log("[session-recovery] Disabled on SQLite backend: injectTextPart (use async variant)") return false } @@ -34,3 +37,27 @@ export function injectTextPart(sessionID: string, messageID: string, text: strin return false } } + +export async function injectTextPartAsync( + client: OpencodeClient, + sessionID: string, + messageID: string, + text: string +): Promise { + const partId = generatePartId() + const part: Record = { + id: partId, + sessionID, + messageID, + type: "text", + text, + synthetic: true, + } + + try { + return await patchPart(client, sessionID, messageID, partId, part) + } catch (error) { + log("[session-recovery] injectTextPartAsync failed", { error: String(error) }) + return false + } +}