@@ -67,11 +67,11 @@ function makeCompletedSelectorClient(selections: string[][]) {
6767 let sessionCount = 0
6868 return {
6969 session : {
70- async create ( _parameters ?: unknown , _requestOptions ?: unknown ) {
70+ async create ( _parameters ?: unknown ) {
7171 sessionCount += 1
7272 return { data : { id : `selector-session-${ sessionCount } ` } }
7373 } ,
74- async prompt ( _parameters : unknown , _requestOptions ?: unknown ) {
74+ async prompt ( _parameters : unknown ) {
7575 const selected = selections [ promptCount ] ?? selections . at ( - 1 ) ?? [ ]
7676 promptCount += 1
7777 return {
@@ -85,7 +85,7 @@ function makeCompletedSelectorClient(selections: string[][]) {
8585 } ,
8686 }
8787 } ,
88- async delete ( _parameters : unknown , _requestOptions ?: unknown ) {
88+ async delete ( _parameters : unknown ) {
8989 return { data : true }
9090 } ,
9191 } ,
@@ -261,16 +261,22 @@ describe("MemoryPlugin system transform", () => {
261261} )
262262
263263describe ( "MemoryPlugin LLM recall prefetch" , ( ) => {
264- test ( "fails fast when recall prefetch receives an unsupported session client " , async ( ) => {
264+ test ( "prefetches without failing user message transform when runtime client uses the default SDK shape " , async ( ) => {
265265 const repo = makeTempGitRepo ( )
266266 saveMemory ( repo , "testing_pref_unsupported" , "Testing Preference" , "Database integration test guidance" , "feedback" , "Use real databases in integration tests." )
267+ let createCalled = false
267268 const client = {
268269 session : {
269270 async create ( _parameters ?: unknown ) {
271+ createCalled = true
270272 return { data : { id : "selector-session" } }
271273 } ,
272274 async prompt ( _parameters : unknown ) {
273- return { data : { parts : [ ] } }
275+ return {
276+ data : {
277+ parts : [ { text : JSON . stringify ( { selected_memories : [ "testing_pref_unsupported.md" ] } ) } ] ,
278+ } ,
279+ }
274280 } ,
275281 async delete ( _parameters : unknown ) {
276282 return { data : true }
@@ -280,26 +286,28 @@ describe("MemoryPlugin LLM recall prefetch", () => {
280286
281287 const plugin = await MemoryPlugin ( { worktree : repo , directory : repo , client } as never )
282288 const messagesTransform = plugin [ "experimental.chat.messages.transform" ] as unknown as MessagesTransform
289+ const transform = plugin [ "experimental.chat.system.transform" ] as unknown as SystemTransform
283290
284- let error : unknown
285- try {
286- await messagesTransform (
287- { } ,
288- {
289- messages : [
290- {
291- info : { role : "user" , sessionID : "ses_unsupported_prefetch" } ,
292- parts : [ { type : "text" , text : "How should we test database changes?" } ] ,
293- } ,
294- ] ,
295- } ,
296- )
297- } catch ( caught ) {
298- error = caught
299- }
291+ await messagesTransform (
292+ { } ,
293+ {
294+ messages : [
295+ {
296+ info : { role : "user" , sessionID : "ses_unsupported_prefetch" } ,
297+ parts : [ { type : "text" , text : "How should we test database changes?" } ] ,
298+ } ,
299+ ] ,
300+ } ,
301+ )
302+ await flushPromises ( )
303+
304+ const output = { system : [ ] as string [ ] }
305+ await transform ( { model : "test-model" , sessionID : "ses_unsupported_prefetch" } , output )
300306
301- expect ( error ) . toBeInstanceOf ( Error )
302- expect ( ( error as Error ) . message ) . toContain ( "requires an OpenCode SDK with structured output session.prompt support" )
307+ expect ( createCalled ) . toBe ( true )
308+ expect ( output . system [ 0 ] ) . toContain ( "## MEMORY.md" )
309+ expect ( output . system [ 0 ] ) . toContain ( "## Recalled Memories" )
310+ expect ( output . system [ 0 ] ) . toContain ( "Testing Preference" )
303311 } )
304312
305313 test ( "does not wait for an unfinished selector and injects completed recall on the next loop" , async ( ) => {
@@ -309,13 +317,13 @@ describe("MemoryPlugin LLM recall prefetch", () => {
309317 const promptResult = deferred < unknown > ( )
310318 const client = {
311319 session : {
312- async create ( _parameters ?: unknown , _requestOptions ?: unknown ) {
320+ async create ( _parameters ?: unknown ) {
313321 return { data : { id : "selector-session" } }
314322 } ,
315- async prompt ( _parameters : unknown , _requestOptions ?: unknown ) {
323+ async prompt ( _parameters : unknown ) {
316324 return promptResult . promise
317325 } ,
318- async delete ( _parameters : unknown , _requestOptions ?: unknown ) {
326+ async delete ( _parameters : unknown ) {
319327 return { data : true }
320328 } ,
321329 } ,
0 commit comments