@@ -9,6 +9,8 @@ import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi }
99import type { MemoryIndexManager } from "./index.js" ;
1010import { registerBuiltInMemoryEmbeddingProviders } from "./provider-adapters.js" ;
1111
12+ type WatchIgnoredFn = ( watchPath : string , stats ?: { isDirectory ?: ( ) => boolean } ) => boolean ;
13+
1214const { watchMock } = vi . hoisted ( ( ) => ( {
1315 watchMock : vi . fn ( ( ) => ( {
1416 on : vi . fn ( ) ,
@@ -123,7 +125,7 @@ describe("memory watcher config", () => {
123125 manager = result . manager as unknown as MemoryIndexManager ;
124126 }
125127
126- it ( "watches markdown globs and ignores dependency directories " , async ( ) => {
128+ it ( "watches the memory directory and ignores non-markdown churn " , async ( ) => {
127129 await setupWatcherWorkspace ( { name : "notes.md" , contents : "hello" } ) ;
128130 const cfg = createWatcherConfig ( ) ;
129131
@@ -138,20 +140,25 @@ describe("memory watcher config", () => {
138140 expect . arrayContaining ( [
139141 path . join ( workspaceDir , "MEMORY.md" ) ,
140142 path . join ( workspaceDir , "memory.md" ) ,
141- path . join ( workspaceDir , "memory" , "**" , "*.md" ) ,
143+ path . join ( workspaceDir , "memory" ) ,
142144 path . join ( extraDir , "**" , "*.md" ) ,
143145 ] ) ,
144146 ) ;
145147 expect ( options . ignoreInitial ) . toBe ( true ) ;
146148 expect ( options . awaitWriteFinish ) . toEqual ( { stabilityThreshold : 25 , pollInterval : 100 } ) ;
147149
148- const ignored = options . ignored as ( ( watchPath : string ) => boolean ) | undefined ;
150+ const ignored = options . ignored as WatchIgnoredFn | undefined ;
149151 expect ( ignored ) . toBeTypeOf ( "function" ) ;
150152 expect ( ignored ?.( path . join ( workspaceDir , "memory" , "node_modules" , "pkg" , "index.md" ) ) ) . toBe (
151153 true ,
152154 ) ;
153155 expect ( ignored ?.( path . join ( workspaceDir , "memory" , ".venv" , "lib" , "python.md" ) ) ) . toBe ( true ) ;
156+ expect ( ignored ?.( path . join ( workspaceDir , "memory" , "project" , "notes.tmp" ) ) ) . toBe ( true ) ;
157+ expect ( ignored ?.( path . join ( workspaceDir , "memory" , "project" , "notes.json" ) ) ) . toBe ( true ) ;
154158 expect ( ignored ?.( path . join ( workspaceDir , "memory" , "project" , "notes.md" ) ) ) . toBe ( false ) ;
159+ expect (
160+ ignored ?.( path . join ( workspaceDir , "memory" , "project" ) , { isDirectory : ( ) => true } ) ,
161+ ) . toBe ( false ) ;
155162 } ) ;
156163
157164 it ( "watches multimodal extensions with case-insensitive globs" , async ( ) => {
@@ -166,7 +173,7 @@ describe("memory watcher config", () => {
166173 await expectWatcherManager ( cfg ) ;
167174
168175 expect ( watchMock ) . toHaveBeenCalledTimes ( 1 ) ;
169- const [ watchedPaths ] = watchMock . mock . calls [ 0 ] as unknown as [
176+ const [ watchedPaths , options ] = watchMock . mock . calls [ 0 ] as unknown as [
170177 string [ ] ,
171178 Record < string , unknown > ,
172179 ] ;
@@ -176,5 +183,11 @@ describe("memory watcher config", () => {
176183 path . join ( extraDir , "**" , "*.[wW][aA][vV]" ) ,
177184 ] ) ,
178185 ) ;
186+
187+ const ignored = options . ignored as WatchIgnoredFn | undefined ;
188+ expect ( ignored ) . toBeTypeOf ( "function" ) ;
189+ expect ( ignored ?.( path . join ( extraDir , "nested" , "PHOTO.PNG" ) ) ) . toBe ( false ) ;
190+ expect ( ignored ?.( path . join ( extraDir , "nested" , "voice.WAV" ) ) ) . toBe ( false ) ;
191+ expect ( ignored ?.( path . join ( extraDir , "nested" , "metadata.json" ) ) ) . toBe ( true ) ;
179192 } ) ;
180193} ) ;
0 commit comments