feat(core): Refresh agents after loading an extension. (#17355)

This commit is contained in:
joshualitt
2026-01-22 16:22:22 -08:00
committed by GitHub
parent a1f5d39029
commit 678c58634b
2 changed files with 12 additions and 0 deletions

View File

@@ -36,6 +36,7 @@ describe('SimpleExtensionLoader', () => {
typeof GeminiClient.prototype.setTools
>;
let mockHookSystemInit: MockInstance;
let mockAgentRegistryReload: MockInstance;
const activeExtension: GeminiCLIExtension = {
name: 'test-extension',
@@ -63,6 +64,7 @@ describe('SimpleExtensionLoader', () => {
extensionReloadingEnabled = false;
mockGeminiClientSetTools = vi.fn();
mockHookSystemInit = vi.fn();
mockAgentRegistryReload = vi.fn();
mockConfig = {
getMcpClientManager: () => mockMcpClientManager,
getEnableExtensionReloading: () => extensionReloadingEnabled,
@@ -73,6 +75,9 @@ describe('SimpleExtensionLoader', () => {
getHookSystem: () => ({
initialize: mockHookSystemInit,
}),
getAgentRegistry: () => ({
reload: mockAgentRegistryReload,
}),
} as unknown as Config;
});
@@ -132,15 +137,18 @@ describe('SimpleExtensionLoader', () => {
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
expect(mockHookSystemInit).toHaveBeenCalledOnce();
expect(mockGeminiClientSetTools).toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).toHaveBeenCalledOnce();
} else {
expect(mockMcpClientManager.startExtension).not.toHaveBeenCalled();
expect(mockRefreshServerHierarchicalMemory).not.toHaveBeenCalled();
expect(mockHookSystemInit).not.toHaveBeenCalled();
expect(mockGeminiClientSetTools).not.toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).not.toHaveBeenCalled();
}
mockRefreshServerHierarchicalMemory.mockClear();
mockHookSystemInit.mockClear();
mockGeminiClientSetTools.mockClear();
mockAgentRegistryReload.mockClear();
await loader.unloadExtension(activeExtension);
if (reloadingEnabled) {
@@ -150,11 +158,13 @@ describe('SimpleExtensionLoader', () => {
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
expect(mockHookSystemInit).toHaveBeenCalledOnce();
expect(mockGeminiClientSetTools).toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).toHaveBeenCalledOnce();
} else {
expect(mockMcpClientManager.stopExtension).not.toHaveBeenCalled();
expect(mockRefreshServerHierarchicalMemory).not.toHaveBeenCalled();
expect(mockHookSystemInit).not.toHaveBeenCalled();
expect(mockGeminiClientSetTools).not.toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).not.toHaveBeenCalled();
}
});
@@ -175,6 +185,7 @@ describe('SimpleExtensionLoader', () => {
]);
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
expect(mockHookSystemInit).toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).toHaveBeenCalledOnce();
},
);
},

View File

@@ -112,6 +112,7 @@ export abstract class ExtensionLoader {
// cache, we want to only do it once.
await refreshServerHierarchicalMemory(this.config);
await this.config.getHookSystem()?.initialize();
await this.config.getAgentRegistry().reload();
}
}