@@ -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,16 +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 ( '@codebuff/backend/util/logger' , ( ) => ( {
107- logger : {
108- debug : ( ) => { } ,
109- log : ( ) => { } ,
110- error : ( ) => { } ,
111- warn : ( ) => { } ,
112- } ,
113- } ) )
114111 } )
115112 let mockFileContext : ProjectFileContext
116113
@@ -150,16 +147,6 @@ describe('Agent Registry', () => {
150147 desc : ( field : any ) => ( { type : 'desc' , field } ) ,
151148 eq : ( field : any , value : any ) => ( { type : 'eq' , field, value } ) ,
152149 } ) )
153-
154- // Mock logger
155- mockModule ( '@codebuff/backend/util/logger' , ( ) => ( {
156- logger : {
157- debug : ( ) => { } ,
158- log : ( ) => { } ,
159- error : ( ) => { } ,
160- warn : ( ) => { } ,
161- } ,
162- } ) )
163150 } )
164151
165152 beforeEach ( async ( ) => {
@@ -253,33 +240,80 @@ describe('Agent Registry', () => {
253240 } as AgentTemplate ,
254241 }
255242
256- 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+ } )
257254 expect ( result ) . toBeTruthy ( )
258255 expect ( result ?. id ) . toBe ( 'my-agent' )
259256 } )
260257
261258 it ( 'should handle agent IDs with publisher but no version' , async ( ) => {
262- 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+ } )
263270 expect ( result ) . toBeNull ( )
264271 } )
265272
266273 it ( 'should handle agent IDs with publisher and version' , async ( ) => {
267- 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+ } )
268285 expect ( result ) . toBeNull ( )
269286 } )
270287
271288 it ( 'should return null for invalid agent ID formats' , async ( ) => {
272- const result = await getAgentTemplate (
273- 'invalid/format/with/too/many/slashes' ,
274- { } ,
275- )
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+ } )
276300 expect ( result ) . toBeNull ( )
277301 } )
278302 } )
279303
280304 describe ( 'fetchAgentFromDatabase' , ( ) => {
281305 it ( 'should return null when agent not found in database' , async ( ) => {
282- 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+ } )
283317 expect ( result ) . toBeNull ( )
284318 } )
285319
@@ -317,10 +351,17 @@ describe('Agent Registry', () => {
317351 } ) as any ,
318352 )
319353
320- const result = await getAgentTemplate (
321- 'test-publisher/test-agent@1.0.0' ,
322- { } ,
323- )
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+ } )
324365 expect ( result ) . toBeTruthy ( )
325366 expect ( result ?. id ) . toBe ( 'test-publisher/test-agent@1.0.0' )
326367 } )
@@ -347,7 +388,17 @@ describe('Agent Registry', () => {
347388 } as AgentTemplate ,
348389 }
349390
350- 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+ } )
351402 expect ( result ) . toBeTruthy ( )
352403 expect ( result ?. displayName ) . toBe ( 'Local Test Agent' )
353404 } )
@@ -387,18 +438,20 @@ describe('Agent Registry', () => {
387438 )
388439
389440 // First call - should hit database
390- const result1 = await getAgentTemplate (
391- 'test-publisher/cached-agent@1.0.0' ,
392- { } ,
393- )
441+ const result1 = await getAgentTemplate ( {
442+ agentId : 'test-publisher/cached-agent@1.0.0' ,
443+ localAgentTemplates : { } ,
444+ logger,
445+ } )
394446 expect ( result1 ) . toBeTruthy ( )
395447 expect ( selectSpy ) . toHaveBeenCalledTimes ( 1 )
396448
397449 // Second call - should use cache
398- const result2 = await getAgentTemplate (
399- 'test-publisher/cached-agent@1.0.0' ,
400- { } ,
401- )
450+ const result2 = await getAgentTemplate ( {
451+ agentId : 'test-publisher/cached-agent@1.0.0' ,
452+ localAgentTemplates : { } ,
453+ logger,
454+ } )
402455 expect ( result2 ) . toBeTruthy ( )
403456 expect ( result2 ?. displayName ) . toBe ( 'Cached Agent' )
404457 expect ( selectSpy ) . toHaveBeenCalledTimes ( 1 )
@@ -426,7 +479,13 @@ describe('Agent Registry', () => {
426479 } ,
427480 }
428481
429- const result = assembleLocalAgentTemplates ( fileContext )
482+ const logger = {
483+ debug : ( ) => { } ,
484+ info : ( ) => { } ,
485+ warn : ( ) => { } ,
486+ error : ( ) => { } ,
487+ }
488+ const result = assembleLocalAgentTemplates ( { fileContext, logger } )
430489
431490 // Should have dynamic template
432491 expect ( result . agentTemplates ) . toHaveProperty ( 'custom-agent' )
@@ -450,7 +509,13 @@ describe('Agent Registry', () => {
450509 } ,
451510 }
452511
453- const result = assembleLocalAgentTemplates ( fileContext )
512+ const logger = {
513+ debug : ( ) => { } ,
514+ info : ( ) => { } ,
515+ warn : ( ) => { } ,
516+ error : ( ) => { } ,
517+ }
518+ const result = assembleLocalAgentTemplates ( { fileContext, logger } )
454519
455520 // Should not have invalid template
456521 expect ( result . agentTemplates ) . not . toHaveProperty ( 'invalid-agent' )
@@ -465,7 +530,13 @@ describe('Agent Registry', () => {
465530 agentTemplates : { } ,
466531 }
467532
468- const result = assembleLocalAgentTemplates ( fileContext )
533+ const logger = {
534+ debug : ( ) => { } ,
535+ info : ( ) => { } ,
536+ warn : ( ) => { } ,
537+ error : ( ) => { } ,
538+ }
539+ const result = assembleLocalAgentTemplates ( { fileContext, logger } )
469540
470541 // Should have no validation errors
471542 expect ( result . validationErrors ) . toHaveLength ( 0 )
@@ -511,35 +582,83 @@ describe('Agent Registry', () => {
511582 )
512583
513584 // First call - should hit database and populate cache
514- 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+ } )
515596 expect ( selectSpy ) . toHaveBeenCalledTimes ( 1 )
516597
517598 // Second call - should use cache
518- 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+ } )
519604 expect ( selectSpy ) . toHaveBeenCalledTimes ( 1 )
520605
521606 // Clear cache
522607 clearDatabaseCache ( )
523608
524609 // Third call - should hit database again after cache clear
525- 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+ } )
526615 expect ( selectSpy ) . toHaveBeenCalledTimes ( 2 )
527616 } )
528617 } )
529618
530619 describe ( 'edge cases' , ( ) => {
531620 it ( 'should handle empty agent ID' , async ( ) => {
532- 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+ } )
533632 expect ( result ) . toBeNull ( )
534633 } )
535634
536635 it ( 'should handle agent ID with multiple @ symbols' , async ( ) => {
537- 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+ } )
538647 expect ( result ) . toBeNull ( )
539648 } )
540649
541650 it ( 'should handle agent ID with only @ symbol' , async ( ) => {
542- 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+ } )
543662 expect ( result ) . toBeNull ( )
544663 } )
545664
@@ -549,7 +668,17 @@ describe('Agent Registry', () => {
549668 throw new Error ( 'Database connection failed' )
550669 } )
551670
552- 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+ } )
553682 expect ( result ) . toBeNull ( )
554683 } )
555684
@@ -579,10 +708,17 @@ describe('Agent Registry', () => {
579708 } ) as any ,
580709 )
581710
582- const result = await getAgentTemplate (
583- 'publisher/malformed-agent@1.0.0' ,
584- { } ,
585- )
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+ } )
586722 expect ( result ) . toBeNull ( )
587723 } )
588724 } )
0 commit comments