fix(a2a): correctly index agents by overridden name and prevent collisions

This commit is contained in:
Alisa Novikova
2026-03-06 05:22:38 -08:00
parent 1112c0f966
commit 4163039f1f
2 changed files with 13 additions and 16 deletions

View File

@@ -942,28 +942,14 @@ describe('AgentRegistry', () => {
);
});
it('should maintain registration under canonical name even if overrides are applied', async () => {
it('should maintain registration under canonical name', async () => {
const originalName = 'my-agent';
const definition = { ...MOCK_AGENT_V1, name: originalName };
// Mock overrides in settings
vi.spyOn(mockConfig, 'getAgentsSettings').mockReturnValue({
overrides: {
[originalName]: {
enabled: true,
modelConfig: { model: 'overridden-model' },
},
},
});
await registry.testRegisterAgent(definition);
const registered = registry.getDefinition(originalName);
expect(registered).toBeDefined();
expect((registered as LocalAgentDefinition).modelConfig.model).toBe(
'overridden-model',
);
// Ensure it is NOT registered under some other key
expect(registry.getAllAgentNames()).toEqual([originalName]);
});

View File

@@ -345,7 +345,18 @@ export class AgentRegistry {
}
const mergedDefinition = this.applyOverrides(definition, settingsOverrides);
this.agents.set(definition.name, mergedDefinition);
// Ensure we don't accidentally overwrite an existing agent with a different canonical name
if (
mergedDefinition.name !== definition.name &&
this.agents.has(mergedDefinition.name)
) {
throw new Error(
`Cannot register agent '${definition.name}' as '${mergedDefinition.name}': Name collision with an already registered agent.`,
);
}
this.agents.set(mergedDefinition.name, mergedDefinition);
this.registerModelConfigs(mergedDefinition);
this.addAgentPolicy(mergedDefinition);