@@ -26,6 +26,13 @@ import type { DynamicAgentTemplate } from '@codebuff/common/types/dynamic-agent-
2626import type { ProjectFileContext } from '@codebuff/common/util/file'
2727import type { Logger } from '@codebuff/types/logger'
2828
29+ const logger : Logger = {
30+ debug : ( ) => { } ,
31+ error : ( ) => { } ,
32+ info : ( ) => { } ,
33+ warn : ( ) => { } ,
34+ }
35+
2936// Create mock static templates that will be used by the agent registry
3037const mockStaticTemplates : Record < string , AgentTemplate > = {
3138 base : {
@@ -101,15 +108,6 @@ describe('Agent Registry', () => {
101108 desc : ( field : any ) => ( { type : 'desc' , field } ) ,
102109 eq : ( field : any , value : any ) => ( { type : 'eq' , field, value } ) ,
103110 } ) )
104-
105- // Mock logger
106- mockModule ( '../util/logger' , ( ) => ( {
107- logger : {
108- debug : ( ) => { } ,
109- error : ( ) => { } ,
110- warn : ( ) => { } ,
111- } ,
112- } ) )
113111 } )
114112 let mockFileContext : ProjectFileContext
115113
@@ -149,15 +147,6 @@ describe('Agent Registry', () => {
149147 desc : ( field : any ) => ( { type : 'desc' , field } ) ,
150148 eq : ( field : any , value : any ) => ( { type : 'eq' , field, value } ) ,
151149 } ) )
152-
153- // Mock logger
154- mockModule ( '../util/logger' , ( ) => ( {
155- logger : {
156- debug : ( ) => { } ,
157- error : ( ) => { } ,
158- warn : ( ) => { } ,
159- } ,
160- } ) )
161150 } )
162151
163152 beforeEach ( async ( ) => {
@@ -251,33 +240,80 @@ describe('Agent Registry', () => {
251240 } as AgentTemplate ,
252241 }
253242
254- const result = await getAgentTemplate ( 'my-agent' , localAgents )
243+ const logger = {
244+ debug : ( ) => { } ,
245+ info : ( ) => { } ,
246+ warn : ( ) => { } ,
247+ error : ( ) => { } ,
248+ }
249+ const result = await getAgentTemplate ( {
250+ agentId : 'my-agent' ,
251+ localAgentTemplates : localAgents ,
252+ logger,
253+ } )
255254 expect ( result ) . toBeTruthy ( )
256255 expect ( result ?. id ) . toBe ( 'my-agent' )
257256 } )
258257
259258 it ( 'should handle agent IDs with publisher but no version' , async ( ) => {
260- const result = await getAgentTemplate ( 'publisher/agent-name' , { } )
259+ const logger = {
260+ debug : ( ) => { } ,
261+ info : ( ) => { } ,
262+ warn : ( ) => { } ,
263+ error : ( ) => { } ,
264+ }
265+ const result = await getAgentTemplate ( {
266+ agentId : 'publisher/agent-name' ,
267+ localAgentTemplates : { } ,
268+ logger,
269+ } )
261270 expect ( result ) . toBeNull ( )
262271 } )
263272
264273 it ( 'should handle agent IDs with publisher and version' , async ( ) => {
265- const result = await getAgentTemplate ( 'publisher/agent-name@1.0.0' , { } )
274+ const logger = {
275+ debug : ( ) => { } ,
276+ info : ( ) => { } ,
277+ warn : ( ) => { } ,
278+ error : ( ) => { } ,
279+ }
280+ const result = await getAgentTemplate ( {
281+ agentId : 'publisher/agent-name@1.0.0' ,
282+ localAgentTemplates : { } ,
283+ logger,
284+ } )
266285 expect ( result ) . toBeNull ( )
267286 } )
268287
269288 it ( 'should return null for invalid agent ID formats' , async ( ) => {
270- const result = await getAgentTemplate (
271- 'invalid/format/with/too/many/slashes' ,
272- { } ,
273- )
289+ const logger = {
290+ debug : ( ) => { } ,
291+ info : ( ) => { } ,
292+ warn : ( ) => { } ,
293+ error : ( ) => { } ,
294+ }
295+ const result = await getAgentTemplate ( {
296+ agentId : 'invalid/format/with/too/many/slashes' ,
297+ localAgentTemplates : { } ,
298+ logger,
299+ } )
274300 expect ( result ) . toBeNull ( )
275301 } )
276302 } )
277303
278304 describe ( 'fetchAgentFromDatabase' , ( ) => {
279305 it ( 'should return null when agent not found in database' , async ( ) => {
280- const result = await getAgentTemplate ( 'nonexistent/agent@1.0.0' , { } )
306+ const logger = {
307+ debug : ( ) => { } ,
308+ info : ( ) => { } ,
309+ warn : ( ) => { } ,
310+ error : ( ) => { } ,
311+ }
312+ const result = await getAgentTemplate ( {
313+ agentId : 'nonexistent/agent@1.0.0' ,
314+ localAgentTemplates : { } ,
315+ logger,
316+ } )
281317 expect ( result ) . toBeNull ( )
282318 } )
283319
@@ -315,10 +351,17 @@ describe('Agent Registry', () => {
315351 } ) as any ,
316352 )
317353
318- const result = await getAgentTemplate (
319- 'test-publisher/test-agent@1.0.0' ,
320- { } ,
321- )
354+ const logger = {
355+ debug : ( ) => { } ,
356+ info : ( ) => { } ,
357+ warn : ( ) => { } ,
358+ error : ( ) => { } ,
359+ }
360+ const result = await getAgentTemplate ( {
361+ agentId : 'test-publisher/test-agent@1.0.0' ,
362+ localAgentTemplates : { } ,
363+ logger,
364+ } )
322365 expect ( result ) . toBeTruthy ( )
323366 expect ( result ?. id ) . toBe ( 'test-publisher/test-agent@1.0.0' )
324367 } )
@@ -345,7 +388,17 @@ describe('Agent Registry', () => {
345388 } as AgentTemplate ,
346389 }
347390
348- const result = await getAgentTemplate ( 'test-agent' , localAgents )
391+ const logger = {
392+ debug : ( ) => { } ,
393+ info : ( ) => { } ,
394+ warn : ( ) => { } ,
395+ error : ( ) => { } ,
396+ }
397+ const result = await getAgentTemplate ( {
398+ agentId : 'test-agent' ,
399+ localAgentTemplates : localAgents ,
400+ logger,
401+ } )
349402 expect ( result ) . toBeTruthy ( )
350403 expect ( result ?. displayName ) . toBe ( 'Local Test Agent' )
351404 } )
@@ -385,18 +438,20 @@ describe('Agent Registry', () => {
385438 )
386439
387440 // First call - should hit database
388- const result1 = await getAgentTemplate (
389- 'test-publisher/cached-agent@1.0.0' ,
390- { } ,
391- )
441+ const result1 = await getAgentTemplate ( {
442+ agentId : 'test-publisher/cached-agent@1.0.0' ,
443+ localAgentTemplates : { } ,
444+ logger,
445+ } )
392446 expect ( result1 ) . toBeTruthy ( )
393447 expect ( selectSpy ) . toHaveBeenCalledTimes ( 1 )
394448
395449 // Second call - should use cache
396- const result2 = await getAgentTemplate (
397- 'test-publisher/cached-agent@1.0.0' ,
398- { } ,
399- )
450+ const result2 = await getAgentTemplate ( {
451+ agentId : 'test-publisher/cached-agent@1.0.0' ,
452+ localAgentTemplates : { } ,
453+ logger,
454+ } )
400455 expect ( result2 ) . toBeTruthy ( )
401456 expect ( result2 ?. displayName ) . toBe ( 'Cached Agent' )
402457 expect ( selectSpy ) . toHaveBeenCalledTimes ( 1 )
@@ -424,7 +479,13 @@ describe('Agent Registry', () => {
424479 } ,
425480 }
426481
427- const result = assembleLocalAgentTemplates ( fileContext )
482+ const logger = {
483+ debug : ( ) => { } ,
484+ info : ( ) => { } ,
485+ warn : ( ) => { } ,
486+ error : ( ) => { } ,
487+ }
488+ const result = assembleLocalAgentTemplates ( { fileContext, logger } )
428489
429490 // Should have dynamic template
430491 expect ( result . agentTemplates ) . toHaveProperty ( 'custom-agent' )
@@ -448,7 +509,13 @@ describe('Agent Registry', () => {
448509 } ,
449510 }
450511
451- const result = assembleLocalAgentTemplates ( fileContext )
512+ const logger = {
513+ debug : ( ) => { } ,
514+ info : ( ) => { } ,
515+ warn : ( ) => { } ,
516+ error : ( ) => { } ,
517+ }
518+ const result = assembleLocalAgentTemplates ( { fileContext, logger } )
452519
453520 // Should not have invalid template
454521 expect ( result . agentTemplates ) . not . toHaveProperty ( 'invalid-agent' )
@@ -463,7 +530,13 @@ describe('Agent Registry', () => {
463530 agentTemplates : { } ,
464531 }
465532
466- const result = assembleLocalAgentTemplates ( fileContext )
533+ const logger = {
534+ debug : ( ) => { } ,
535+ info : ( ) => { } ,
536+ warn : ( ) => { } ,
537+ error : ( ) => { } ,
538+ }
539+ const result = assembleLocalAgentTemplates ( { fileContext, logger } )
467540
468541 // Should have no validation errors
469542 expect ( result . validationErrors ) . toHaveLength ( 0 )
@@ -509,35 +582,83 @@ describe('Agent Registry', () => {
509582 )
510583
511584 // First call - should hit database and populate cache
512- await getAgentTemplate ( 'test-publisher/cache-test-agent@1.0.0' , { } )
585+ const logger = {
586+ debug : ( ) => { } ,
587+ info : ( ) => { } ,
588+ warn : ( ) => { } ,
589+ error : ( ) => { } ,
590+ }
591+ await getAgentTemplate ( {
592+ agentId : 'test-publisher/cache-test-agent@1.0.0' ,
593+ localAgentTemplates : { } ,
594+ logger,
595+ } )
513596 expect ( selectSpy ) . toHaveBeenCalledTimes ( 1 )
514597
515598 // Second call - should use cache
516- await getAgentTemplate ( 'test-publisher/cache-test-agent@1.0.0' , { } )
599+ await getAgentTemplate ( {
600+ agentId : 'test-publisher/cache-test-agent@1.0.0' ,
601+ localAgentTemplates : { } ,
602+ logger,
603+ } )
517604 expect ( selectSpy ) . toHaveBeenCalledTimes ( 1 )
518605
519606 // Clear cache
520607 clearDatabaseCache ( )
521608
522609 // Third call - should hit database again after cache clear
523- await getAgentTemplate ( 'test-publisher/cache-test-agent@1.0.0' , { } )
610+ await getAgentTemplate ( {
611+ agentId : 'test-publisher/cache-test-agent@1.0.0' ,
612+ localAgentTemplates : { } ,
613+ logger,
614+ } )
524615 expect ( selectSpy ) . toHaveBeenCalledTimes ( 2 )
525616 } )
526617 } )
527618
528619 describe ( 'edge cases' , ( ) => {
529620 it ( 'should handle empty agent ID' , async ( ) => {
530- const result = await getAgentTemplate ( '' , { } )
621+ const logger = {
622+ debug : ( ) => { } ,
623+ info : ( ) => { } ,
624+ warn : ( ) => { } ,
625+ error : ( ) => { } ,
626+ }
627+ const result = await getAgentTemplate ( {
628+ agentId : '' ,
629+ localAgentTemplates : { } ,
630+ logger,
631+ } )
531632 expect ( result ) . toBeNull ( )
532633 } )
533634
534635 it ( 'should handle agent ID with multiple @ symbols' , async ( ) => {
535- const result = await getAgentTemplate ( 'publisher/agent@1.0.0@extra' , { } )
636+ const logger = {
637+ debug : ( ) => { } ,
638+ info : ( ) => { } ,
639+ warn : ( ) => { } ,
640+ error : ( ) => { } ,
641+ }
642+ const result = await getAgentTemplate ( {
643+ agentId : 'publisher/agent@1.0.0@extra' ,
644+ localAgentTemplates : { } ,
645+ logger,
646+ } )
536647 expect ( result ) . toBeNull ( )
537648 } )
538649
539650 it ( 'should handle agent ID with only @ symbol' , async ( ) => {
540- const result = await getAgentTemplate ( 'publisher/agent@' , { } )
651+ const logger = {
652+ debug : ( ) => { } ,
653+ info : ( ) => { } ,
654+ warn : ( ) => { } ,
655+ error : ( ) => { } ,
656+ }
657+ const result = await getAgentTemplate ( {
658+ agentId : 'publisher/agent@' ,
659+ localAgentTemplates : { } ,
660+ logger,
661+ } )
541662 expect ( result ) . toBeNull ( )
542663 } )
543664
@@ -547,7 +668,17 @@ describe('Agent Registry', () => {
547668 throw new Error ( 'Database connection failed' )
548669 } )
549670
550- const result = await getAgentTemplate ( 'publisher/agent@1.0.0' , { } )
671+ const logger = {
672+ debug : ( ) => { } ,
673+ info : ( ) => { } ,
674+ warn : ( ) => { } ,
675+ error : ( ) => { } ,
676+ }
677+ const result = await getAgentTemplate ( {
678+ agentId : 'publisher/agent@1.0.0' ,
679+ localAgentTemplates : { } ,
680+ logger,
681+ } )
551682 expect ( result ) . toBeNull ( )
552683 } )
553684
@@ -577,10 +708,17 @@ describe('Agent Registry', () => {
577708 } ) as any ,
578709 )
579710
580- const result = await getAgentTemplate (
581- 'publisher/malformed-agent@1.0.0' ,
582- { } ,
583- )
711+ const logger = {
712+ debug : ( ) => { } ,
713+ info : ( ) => { } ,
714+ warn : ( ) => { } ,
715+ error : ( ) => { } ,
716+ }
717+ const result = await getAgentTemplate ( {
718+ agentId : 'publisher/malformed-agent@1.0.0' ,
719+ localAgentTemplates : { } ,
720+ logger,
721+ } )
584722 expect ( result ) . toBeNull ( )
585723 } )
586724 } )
0 commit comments