Skip to content

Commit 2f533a5

Browse files
committed
pass in logger to agent-validation
1 parent 2b3fa2e commit 2f533a5

File tree

9 files changed

+191
-101
lines changed

9 files changed

+191
-101
lines changed

backend/src/__tests__/agent-registry.test.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
import type { AgentTemplate } from '../templates/types'
2525
import type { DynamicAgentTemplate } from '@codebuff/common/types/dynamic-agent-template'
2626
import type { ProjectFileContext } from '@codebuff/common/util/file'
27+
import type { Logger } from '@codebuff/types/logger'
2728

2829
// Create mock static templates that will be used by the agent registry
2930
const mockStaticTemplates: Record<string, AgentTemplate> = {
@@ -169,7 +170,13 @@ describe('Agent Registry', () => {
169170
'@codebuff/common/templates/agent-validation'
170171
)
171172
spyOn(validationModule, 'validateAgents').mockImplementation(
172-
(agentTemplates: Record<string, DynamicAgentTemplate> = {}) => {
173+
({
174+
agentTemplates = {},
175+
logger,
176+
}: {
177+
agentTemplates?: Record<string, DynamicAgentTemplate>
178+
logger: Logger
179+
}) => {
173180
// Start with static templates (simulating the real behavior)
174181
const templates: Record<string, AgentTemplate> = {
175182
...mockStaticTemplates,
@@ -194,7 +201,7 @@ describe('Agent Registry', () => {
194201
)
195202

196203
spyOn(validationModule, 'validateSingleAgent').mockImplementation(
197-
(template: DynamicAgentTemplate, options?: any) => {
204+
({ template }: { template: DynamicAgentTemplate; filePath?: string }) => {
198205
// Check for malformed agents (missing required fields)
199206
if (
200207
template.id === 'malformed-agent' ||

backend/src/templates/agent-registry.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
import type { AgentTemplate } from '@codebuff/common/types/agent-template'
21
import db from '@codebuff/common/db'
32
import * as schema from '@codebuff/common/db/schema'
4-
import { and, desc, eq } from 'drizzle-orm'
5-
6-
import { ProjectFileContext } from '@codebuff/common/util/file'
7-
import { logger } from '../util/logger'
83
import {
9-
DynamicAgentValidationError,
104
validateAgents,
115
validateSingleAgent,
126
} from '@codebuff/common/templates/agent-validation'
13-
import { DynamicAgentTemplate } from '@codebuff/common/types/dynamic-agent-template'
14-
import { DEFAULT_ORG_PREFIX } from '@codebuff/common/util/agent-name-normalization'
157
import { parsePublishedAgentId } from '@codebuff/common/util/agent-id-parsing'
8+
import { DEFAULT_ORG_PREFIX } from '@codebuff/common/util/agent-name-normalization'
9+
import { and, desc, eq } from 'drizzle-orm'
10+
11+
import { logger } from '../util/logger'
12+
13+
import type { DynamicAgentValidationError } from '@codebuff/common/templates/agent-validation'
14+
import type { AgentTemplate } from '@codebuff/common/types/agent-template'
15+
import type { DynamicAgentTemplate } from '@codebuff/common/types/dynamic-agent-template'
16+
import type { ProjectFileContext } from '@codebuff/common/util/file'
1617

1718
export type AgentRegistry = Record<string, AgentTemplate>
1819

@@ -76,12 +77,10 @@ async function fetchAgentFromDatabase(parsedAgentId: {
7677
const rawAgentData = agentConfig.data as DynamicAgentTemplate
7778

7879
// Validate the raw agent data with the original agentId (not full identifier)
79-
const validationResult = validateSingleAgent(
80-
{ ...rawAgentData, id: agentId, version: agentConfig.version },
81-
{
82-
filePath: `${publisherId}/${agentId}@${agentConfig.version}`,
83-
},
84-
)
80+
const validationResult = validateSingleAgent({
81+
template: { ...rawAgentData, id: agentId, version: agentConfig.version },
82+
filePath: `${publisherId}/${agentId}@${agentConfig.version}`,
83+
})
8584

8685
if (!validationResult.success) {
8786
logger.error(
@@ -176,9 +175,10 @@ export function assembleLocalAgentTemplates(fileContext: ProjectFileContext): {
176175
validationErrors: DynamicAgentValidationError[]
177176
} {
178177
// Load dynamic agents using the service
179-
const { templates: dynamicTemplates, validationErrors } = validateAgents(
180-
fileContext.agentTemplates || {},
181-
)
178+
const { templates: dynamicTemplates, validationErrors } = validateAgents({
179+
agentTemplates: fileContext.agentTemplates,
180+
logger,
181+
})
182182

183183
// Use dynamic templates only
184184

common/src/__tests__/agent-validation.test.ts

Lines changed: 76 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,23 @@
1-
import {
2-
afterAll,
3-
beforeAll,
4-
beforeEach,
5-
describe,
6-
expect,
7-
it,
8-
test,
9-
} from 'bun:test'
1+
import { beforeEach, describe, expect, it, test } from 'bun:test'
102

113
import { validateAgents } from '../templates/agent-validation'
12-
import { clearMockedModules, mockModule } from '../testing/mock-modules'
134
import { DynamicAgentDefinitionSchema } from '../types/dynamic-agent-template'
145
import { getStubProjectFileContext } from '../util/file'
156

167
import type { DynamicAgentTemplate } from '../types/dynamic-agent-template'
178
import type { AgentState } from '../types/session-state'
189
import type { ProjectFileContext } from '../util/file'
10+
import type { Logger } from '@codebuff/types/logger'
1911

2012
describe('Agent Validation', () => {
2113
let mockFileContext: ProjectFileContext
2214
let mockAgentTemplate: DynamicAgentTemplate
23-
24-
beforeAll(() => {
25-
// Mock logger to avoid console output during tests
26-
mockModule('../util/logger', () => ({
27-
logger: {
28-
debug: () => {},
29-
warn: () => {},
30-
error: () => {},
31-
},
32-
}))
33-
})
15+
const logger: Logger = {
16+
debug: () => {},
17+
error: () => {},
18+
info: () => {},
19+
warn: () => {},
20+
}
3421

3522
beforeEach(() => {
3623
mockFileContext = getStubProjectFileContext()
@@ -53,10 +40,6 @@ describe('Agent Validation', () => {
5340
}
5441
})
5542

56-
afterAll(() => {
57-
clearMockedModules()
58-
})
59-
6043
describe('Dynamic Agent Loading', () => {
6144
it('should load valid dynamic agent template', async () => {
6245
const fileContext: ProjectFileContext = {
@@ -80,7 +63,10 @@ describe('Agent Validation', () => {
8063
},
8164
}
8265

83-
const result = validateAgents(fileContext.agentTemplates || {})
66+
const result = validateAgents({
67+
agentTemplates: fileContext.agentTemplates || {},
68+
logger,
69+
})
8470

8571
expect(result.validationErrors).toHaveLength(0)
8672
expect(result.templates).toHaveProperty('brainstormer')
@@ -110,7 +96,10 @@ describe('Agent Validation', () => {
11096
},
11197
}
11298

113-
const result = validateAgents(fileContext.agentTemplates || {})
99+
const result = validateAgents({
100+
agentTemplates: fileContext.agentTemplates || {},
101+
logger,
102+
})
114103

115104
expect(result.validationErrors).toHaveLength(1)
116105
expect(result.validationErrors[0].message).toContain(
@@ -140,7 +129,10 @@ describe('Agent Validation', () => {
140129
},
141130
}
142131

143-
const result = validateAgents(fileContext.agentTemplates || {})
132+
const result = validateAgents({
133+
agentTemplates: fileContext.agentTemplates || {},
134+
logger,
135+
})
144136

145137
// Should have dynamic templates
146138
expect(result.templates).toHaveProperty('custom-agent') // Dynamic
@@ -180,7 +172,10 @@ describe('Agent Validation', () => {
180172
},
181173
}
182174

183-
const result = validateAgents(fileContext.agentTemplates || {})
175+
const result = validateAgents({
176+
agentTemplates: fileContext.agentTemplates || {},
177+
logger,
178+
})
184179

185180
expect(result.validationErrors).toHaveLength(0)
186181
expect(result.templates).toHaveProperty('schema-agent')
@@ -213,7 +208,10 @@ describe('Agent Validation', () => {
213208
},
214209
}
215210

216-
const result = validateAgents(fileContext.agentTemplates || {})
211+
const result = validateAgents({
212+
agentTemplates: fileContext.agentTemplates || {},
213+
logger,
214+
})
217215

218216
expect(result.validationErrors).toHaveLength(1)
219217
expect(result.validationErrors[0].message).toContain(
@@ -245,7 +243,10 @@ describe('Agent Validation', () => {
245243
},
246244
}
247245

248-
const result = validateAgents(fileContext.agentTemplates || {})
246+
const result = validateAgents({
247+
agentTemplates: fileContext.agentTemplates || {},
248+
logger,
249+
})
249250

250251
expect(result.validationErrors).toHaveLength(0)
251252
expect(result.templates).toHaveProperty('no-override-agent')
@@ -288,7 +289,10 @@ describe('Agent Validation', () => {
288289
},
289290
}
290291

291-
const result = validateAgents(fileContext.agentTemplates || {})
292+
const result = validateAgents({
293+
agentTemplates: fileContext.agentTemplates || {},
294+
logger,
295+
})
292296

293297
expect(result.validationErrors).toHaveLength(0)
294298
expect(result.templates).toHaveProperty('codebuffai-git-committer')
@@ -324,7 +328,10 @@ describe('Agent Validation', () => {
324328
},
325329
}
326330

327-
const result = validateAgents(fileContext.agentTemplates || {})
331+
const result = validateAgents({
332+
agentTemplates: fileContext.agentTemplates || {},
333+
logger,
334+
})
328335

329336
expect(result.validationErrors).toHaveLength(0)
330337
expect(result.templates).toHaveProperty('no-prompt-schema-agent')
@@ -356,7 +363,10 @@ describe('Agent Validation', () => {
356363
},
357364
}
358365

359-
const result = validateAgents(fileContext.agentTemplates || {})
366+
const result = validateAgents({
367+
agentTemplates: fileContext.agentTemplates || {},
368+
logger,
369+
})
360370

361371
expect(result.validationErrors).toHaveLength(0)
362372
expect(result.templates).toHaveProperty('no-params-schema-agent')
@@ -412,7 +422,10 @@ describe('Agent Validation', () => {
412422
},
413423
}
414424

415-
const result = validateAgents(fileContext.agentTemplates || {})
425+
const result = validateAgents({
426+
agentTemplates: fileContext.agentTemplates || {},
427+
logger,
428+
})
416429

417430
expect(result.validationErrors).toHaveLength(0)
418431
expect(result.templates).toHaveProperty('both-schemas-agent')
@@ -484,7 +497,10 @@ describe('Agent Validation', () => {
484497
},
485498
}
486499

487-
const result = validateAgents(fileContext.agentTemplates || {})
500+
const result = validateAgents({
501+
agentTemplates: fileContext.agentTemplates || {},
502+
logger,
503+
})
488504

489505
expect(result.validationErrors).toHaveLength(0)
490506
expect(result.templates).toHaveProperty('complex-schema-agent')
@@ -543,7 +559,10 @@ describe('Agent Validation', () => {
543559
},
544560
}
545561

546-
const result = validateAgents(fileContext.agentTemplates || {})
562+
const result = validateAgents({
563+
agentTemplates: fileContext.agentTemplates || {},
564+
logger,
565+
})
547566

548567
expect(result.validationErrors).toHaveLength(1)
549568
expect(result.validationErrors[0].message).toContain(
@@ -592,7 +611,10 @@ describe('Agent Validation', () => {
592611
},
593612
}
594613

595-
const result = validateAgents(fileContext.agentTemplates || {})
614+
const result = validateAgents({
615+
agentTemplates: fileContext.agentTemplates || {},
616+
logger,
617+
})
596618

597619
expect(result.validationErrors).toHaveLength(0)
598620
expect(result.templates).toHaveProperty('codebuffai-git-committer')
@@ -637,7 +659,10 @@ describe('Agent Validation', () => {
637659
},
638660
}
639661

640-
const result = validateAgents(fileContext.agentTemplates || {})
662+
const result = validateAgents({
663+
agentTemplates: fileContext.agentTemplates || {},
664+
logger,
665+
})
641666

642667
expect(result.validationErrors).toHaveLength(0)
643668
expect(result.templates).toHaveProperty('empty-schema-agent')
@@ -715,7 +740,10 @@ describe('Agent Validation', () => {
715740
agentTemplates,
716741
}
717742

718-
const result = validateAgents(fileContext.agentTemplates || {})
743+
const result = validateAgents({
744+
agentTemplates: fileContext.agentTemplates || {},
745+
logger,
746+
})
719747

720748
expect(result.validationErrors).toHaveLength(0)
721749
expect(result.templates['test-agent']).toBeDefined()
@@ -793,7 +821,10 @@ describe('Agent Validation', () => {
793821
agentTemplates,
794822
}
795823

796-
const result = validateAgents(fileContext.agentTemplates || {})
824+
const result = validateAgents({
825+
agentTemplates: fileContext.agentTemplates || {},
826+
logger,
827+
})
797828

798829
expect(result.validationErrors.length).toBeGreaterThan(0)
799830
expect(result.validationErrors[0].message).toContain('generator function')
@@ -833,7 +864,10 @@ describe('Agent Validation', () => {
833864
}
834865

835866
// Load agents through the service
836-
const result = validateAgents(fileContext.agentTemplates || {})
867+
const result = validateAgents({
868+
agentTemplates: fileContext.agentTemplates || {},
869+
logger,
870+
})
837871

838872
// Verify no validation errors
839873
expect(result.validationErrors).toHaveLength(0)

0 commit comments

Comments
 (0)