mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-12 21:03:05 -07:00
feat(core): Refresh agents after loading an extension. (#17355)
This commit is contained in:
@@ -36,6 +36,7 @@ describe('SimpleExtensionLoader', () => {
|
|||||||
typeof GeminiClient.prototype.setTools
|
typeof GeminiClient.prototype.setTools
|
||||||
>;
|
>;
|
||||||
let mockHookSystemInit: MockInstance;
|
let mockHookSystemInit: MockInstance;
|
||||||
|
let mockAgentRegistryReload: MockInstance;
|
||||||
|
|
||||||
const activeExtension: GeminiCLIExtension = {
|
const activeExtension: GeminiCLIExtension = {
|
||||||
name: 'test-extension',
|
name: 'test-extension',
|
||||||
@@ -63,6 +64,7 @@ describe('SimpleExtensionLoader', () => {
|
|||||||
extensionReloadingEnabled = false;
|
extensionReloadingEnabled = false;
|
||||||
mockGeminiClientSetTools = vi.fn();
|
mockGeminiClientSetTools = vi.fn();
|
||||||
mockHookSystemInit = vi.fn();
|
mockHookSystemInit = vi.fn();
|
||||||
|
mockAgentRegistryReload = vi.fn();
|
||||||
mockConfig = {
|
mockConfig = {
|
||||||
getMcpClientManager: () => mockMcpClientManager,
|
getMcpClientManager: () => mockMcpClientManager,
|
||||||
getEnableExtensionReloading: () => extensionReloadingEnabled,
|
getEnableExtensionReloading: () => extensionReloadingEnabled,
|
||||||
@@ -73,6 +75,9 @@ describe('SimpleExtensionLoader', () => {
|
|||||||
getHookSystem: () => ({
|
getHookSystem: () => ({
|
||||||
initialize: mockHookSystemInit,
|
initialize: mockHookSystemInit,
|
||||||
}),
|
}),
|
||||||
|
getAgentRegistry: () => ({
|
||||||
|
reload: mockAgentRegistryReload,
|
||||||
|
}),
|
||||||
} as unknown as Config;
|
} as unknown as Config;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -132,15 +137,18 @@ describe('SimpleExtensionLoader', () => {
|
|||||||
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
|
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
|
||||||
expect(mockHookSystemInit).toHaveBeenCalledOnce();
|
expect(mockHookSystemInit).toHaveBeenCalledOnce();
|
||||||
expect(mockGeminiClientSetTools).toHaveBeenCalledOnce();
|
expect(mockGeminiClientSetTools).toHaveBeenCalledOnce();
|
||||||
|
expect(mockAgentRegistryReload).toHaveBeenCalledOnce();
|
||||||
} else {
|
} else {
|
||||||
expect(mockMcpClientManager.startExtension).not.toHaveBeenCalled();
|
expect(mockMcpClientManager.startExtension).not.toHaveBeenCalled();
|
||||||
expect(mockRefreshServerHierarchicalMemory).not.toHaveBeenCalled();
|
expect(mockRefreshServerHierarchicalMemory).not.toHaveBeenCalled();
|
||||||
expect(mockHookSystemInit).not.toHaveBeenCalled();
|
expect(mockHookSystemInit).not.toHaveBeenCalled();
|
||||||
expect(mockGeminiClientSetTools).not.toHaveBeenCalledOnce();
|
expect(mockGeminiClientSetTools).not.toHaveBeenCalledOnce();
|
||||||
|
expect(mockAgentRegistryReload).not.toHaveBeenCalled();
|
||||||
}
|
}
|
||||||
mockRefreshServerHierarchicalMemory.mockClear();
|
mockRefreshServerHierarchicalMemory.mockClear();
|
||||||
mockHookSystemInit.mockClear();
|
mockHookSystemInit.mockClear();
|
||||||
mockGeminiClientSetTools.mockClear();
|
mockGeminiClientSetTools.mockClear();
|
||||||
|
mockAgentRegistryReload.mockClear();
|
||||||
|
|
||||||
await loader.unloadExtension(activeExtension);
|
await loader.unloadExtension(activeExtension);
|
||||||
if (reloadingEnabled) {
|
if (reloadingEnabled) {
|
||||||
@@ -150,11 +158,13 @@ describe('SimpleExtensionLoader', () => {
|
|||||||
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
|
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
|
||||||
expect(mockHookSystemInit).toHaveBeenCalledOnce();
|
expect(mockHookSystemInit).toHaveBeenCalledOnce();
|
||||||
expect(mockGeminiClientSetTools).toHaveBeenCalledOnce();
|
expect(mockGeminiClientSetTools).toHaveBeenCalledOnce();
|
||||||
|
expect(mockAgentRegistryReload).toHaveBeenCalledOnce();
|
||||||
} else {
|
} else {
|
||||||
expect(mockMcpClientManager.stopExtension).not.toHaveBeenCalled();
|
expect(mockMcpClientManager.stopExtension).not.toHaveBeenCalled();
|
||||||
expect(mockRefreshServerHierarchicalMemory).not.toHaveBeenCalled();
|
expect(mockRefreshServerHierarchicalMemory).not.toHaveBeenCalled();
|
||||||
expect(mockHookSystemInit).not.toHaveBeenCalled();
|
expect(mockHookSystemInit).not.toHaveBeenCalled();
|
||||||
expect(mockGeminiClientSetTools).not.toHaveBeenCalledOnce();
|
expect(mockGeminiClientSetTools).not.toHaveBeenCalledOnce();
|
||||||
|
expect(mockAgentRegistryReload).not.toHaveBeenCalled();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -175,6 +185,7 @@ describe('SimpleExtensionLoader', () => {
|
|||||||
]);
|
]);
|
||||||
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
|
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
|
||||||
expect(mockHookSystemInit).toHaveBeenCalledOnce();
|
expect(mockHookSystemInit).toHaveBeenCalledOnce();
|
||||||
|
expect(mockAgentRegistryReload).toHaveBeenCalledOnce();
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ export abstract class ExtensionLoader {
|
|||||||
// cache, we want to only do it once.
|
// cache, we want to only do it once.
|
||||||
await refreshServerHierarchicalMemory(this.config);
|
await refreshServerHierarchicalMemory(this.config);
|
||||||
await this.config.getHookSystem()?.initialize();
|
await this.config.getHookSystem()?.initialize();
|
||||||
|
await this.config.getAgentRegistry().reload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user