@@ -703,6 +703,55 @@ describe("QmdMemoryManager", () => {
703703 await manager ?. close ( ) ;
704704 } ) ;
705705
706+ it ( "keeps one-shot CLI searches from scheduling session-start updates" , async ( ) => {
707+ cfg = {
708+ ...cfg ,
709+ agents : {
710+ ...cfg . agents ,
711+ defaults : {
712+ ...cfg . agents ?. defaults ,
713+ workspace : workspaceDir ,
714+ memorySearch : {
715+ ...cfg . agents ?. defaults ?. memorySearch ,
716+ sync : { watch : false , onSessionStart : true , onSearch : true } ,
717+ } ,
718+ } ,
719+ } ,
720+ memory : {
721+ backend : "qmd" ,
722+ qmd : {
723+ includeDefaultMemory : false ,
724+ searchMode : "search" ,
725+ update : { interval : "0s" , debounceMs : 60_000 , onBoot : false } ,
726+ paths : [ { path : workspaceDir , pattern : "**/*.md" , name : "workspace" } ] ,
727+ } ,
728+ } ,
729+ } as OpenClawConfig ;
730+ spawnMock . mockImplementation ( ( _cmd : string , args : string [ ] ) => {
731+ if ( args [ 0 ] === "search" ) {
732+ const child = createMockChild ( { autoClose : false } ) ;
733+ emitAndClose ( child , "stdout" , "[]" ) ;
734+ return child ;
735+ }
736+ return createMockChild ( ) ;
737+ } ) ;
738+
739+ const { manager } = await createManager ( { mode : "cli" } ) ;
740+
741+ await expect (
742+ manager . search ( "glacier" , { sessionKey : "agent:main:cli:memory-search" } ) ,
743+ ) . resolves . toStrictEqual ( [ ] ) ;
744+ await manager . close ( ) ;
745+
746+ const updateCalls = spawnMock . mock . calls
747+ . map ( ( call : unknown [ ] ) => call [ 1 ] as string [ ] )
748+ . filter ( ( args : string [ ] ) => args [ 0 ] === "update" || args [ 0 ] === "embed" ) ;
749+ expect ( updateCalls ) . toStrictEqual ( [ ] ) ;
750+ expect (
751+ spawnMock . mock . calls . some ( ( call : unknown [ ] ) => ( call [ 1 ] as string [ ] ) ?. [ 0 ] === "search" ) ,
752+ ) . toBe ( true ) ;
753+ } ) ;
754+
706755 it ( "can be configured to block startup on boot update" , async ( ) => {
707756 cfg = {
708757 ...cfg ,
0 commit comments