mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-14 05:42:54 -07:00
refactor: implement DelegateToAgentTool with discriminated union (#14769)
This commit is contained in:
@@ -138,8 +138,12 @@ vi.mock('../agents/registry.js', () => {
|
||||
return { AgentRegistry: AgentRegistryMock };
|
||||
});
|
||||
|
||||
vi.mock('../agents/subagent-tool-wrapper.js', () => ({
|
||||
SubagentToolWrapper: vi.fn(),
|
||||
vi.mock('../agents/delegate-to-agent-tool.js', () => ({
|
||||
DelegateToAgentTool: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock('../resources/resource-registry.js', () => ({
|
||||
ResourceRegistry: vi.fn(),
|
||||
}));
|
||||
|
||||
const mockCoreEvents = vi.hoisted(() => ({
|
||||
@@ -842,11 +846,11 @@ describe('Server Config (config.ts)', () => {
|
||||
mockAgentDefinition,
|
||||
);
|
||||
|
||||
const SubagentToolWrapperMock = (
|
||||
(await vi.importMock('../agents/subagent-tool-wrapper.js')) as {
|
||||
SubagentToolWrapper: Mock;
|
||||
const DelegateToAgentToolMock = (
|
||||
(await vi.importMock('../agents/delegate-to-agent-tool.js')) as {
|
||||
DelegateToAgentTool: Mock;
|
||||
}
|
||||
).SubagentToolWrapper;
|
||||
).DelegateToAgentTool;
|
||||
|
||||
await config.initialize();
|
||||
|
||||
@@ -856,16 +860,16 @@ describe('Server Config (config.ts)', () => {
|
||||
}
|
||||
).ToolRegistry.prototype.registerTool;
|
||||
|
||||
expect(SubagentToolWrapperMock).toHaveBeenCalledTimes(1);
|
||||
expect(SubagentToolWrapperMock).toHaveBeenCalledWith(
|
||||
mockAgentDefinition,
|
||||
expect(DelegateToAgentToolMock).toHaveBeenCalledTimes(1);
|
||||
expect(DelegateToAgentToolMock).toHaveBeenCalledWith(
|
||||
expect.anything(), // AgentRegistry
|
||||
config,
|
||||
undefined,
|
||||
);
|
||||
|
||||
const calls = registerToolMock.mock.calls;
|
||||
const registeredWrappers = calls.filter(
|
||||
(call) => call[0] instanceof SubagentToolWrapperMock,
|
||||
(call) => call[0] instanceof DelegateToAgentToolMock,
|
||||
);
|
||||
expect(registeredWrappers).toHaveLength(1);
|
||||
});
|
||||
@@ -877,15 +881,15 @@ describe('Server Config (config.ts)', () => {
|
||||
};
|
||||
const config = new Config(params);
|
||||
|
||||
const SubagentToolWrapperMock = (
|
||||
(await vi.importMock('../agents/subagent-tool-wrapper.js')) as {
|
||||
SubagentToolWrapper: Mock;
|
||||
const DelegateToAgentToolMock = (
|
||||
(await vi.importMock('../agents/delegate-to-agent-tool.js')) as {
|
||||
DelegateToAgentTool: Mock;
|
||||
}
|
||||
).SubagentToolWrapper;
|
||||
).DelegateToAgentTool;
|
||||
|
||||
await config.initialize();
|
||||
|
||||
expect(SubagentToolWrapperMock).not.toHaveBeenCalled();
|
||||
expect(DelegateToAgentToolMock).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should not set default codebase investigator model in config (defaults in registry)', () => {
|
||||
|
||||
@@ -84,7 +84,8 @@ import { getCodeAssistServer } from '../code_assist/codeAssist.js';
|
||||
import type { Experiments } from '../code_assist/experiments/experiments.js';
|
||||
import { AgentRegistry } from '../agents/registry.js';
|
||||
import { setGlobalProxy } from '../utils/fetch.js';
|
||||
import { SubagentToolWrapper } from '../agents/subagent-tool-wrapper.js';
|
||||
import { DelegateToAgentTool } from '../agents/delegate-to-agent-tool.js';
|
||||
import { DELEGATE_TO_AGENT_TOOL_NAME } from '../tools/tool-names.js';
|
||||
import { getExperiments } from '../code_assist/experiments/experiments.js';
|
||||
import { ExperimentFlags } from '../code_assist/experiments/flagNames.js';
|
||||
import { debugLogger } from '../utils/debugLogger.js';
|
||||
@@ -1571,26 +1572,24 @@ export class Config {
|
||||
}
|
||||
|
||||
// Register Subagents as Tools
|
||||
if (this.getCodebaseInvestigatorSettings().enabled) {
|
||||
const definition = this.agentRegistry.getDefinition(
|
||||
'codebase_investigator',
|
||||
);
|
||||
if (definition) {
|
||||
// We must respect the main allowed/exclude lists for agents too.
|
||||
const allowedTools = this.getAllowedTools();
|
||||
// Register DelegateToAgentTool if agents are enabled
|
||||
if (
|
||||
this.isAgentsEnabled() ||
|
||||
this.getCodebaseInvestigatorSettings().enabled
|
||||
) {
|
||||
// Check if the delegate tool itself is allowed (if allowedTools is set)
|
||||
const allowedTools = this.getAllowedTools();
|
||||
const isAllowed =
|
||||
!allowedTools || allowedTools.includes(DELEGATE_TO_AGENT_TOOL_NAME);
|
||||
|
||||
const isAllowed =
|
||||
!allowedTools || allowedTools.includes(definition.name);
|
||||
|
||||
if (isAllowed) {
|
||||
const messageBusEnabled = this.getEnableMessageBusIntegration();
|
||||
const wrapper = new SubagentToolWrapper(
|
||||
definition,
|
||||
this,
|
||||
messageBusEnabled ? this.getMessageBus() : undefined,
|
||||
);
|
||||
registry.registerTool(wrapper);
|
||||
}
|
||||
if (isAllowed) {
|
||||
const messageBusEnabled = this.getEnableMessageBusIntegration();
|
||||
const delegateTool = new DelegateToAgentTool(
|
||||
this.agentRegistry,
|
||||
this,
|
||||
messageBusEnabled ? this.getMessageBus() : undefined,
|
||||
);
|
||||
registry.registerTool(delegateTool);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user