Reload skills when extensions change (#18225)

This commit is contained in:
christine betts
2026-02-03 15:31:14 -05:00
committed by GitHub
parent 0f918f0cc8
commit 2cf3a14439
3 changed files with 13 additions and 0 deletions

View File

@@ -133,6 +133,7 @@ describe('ExtensionManager theme loading', () => {
}),
isTrustedFolder: () => true,
getImportFormat: () => 'tree',
reloadSkills: vi.fn(),
} as unknown as Config;
await extensionManager.start(mockConfig);
@@ -208,6 +209,7 @@ describe('ExtensionManager theme loading', () => {
getAgentRegistry: () => ({
reload: vi.fn().mockResolvedValue(undefined),
}),
reloadSkills: vi.fn(),
} as unknown as Config;
await extensionManager.start(mockConfig);

View File

@@ -37,6 +37,7 @@ describe('SimpleExtensionLoader', () => {
>;
let mockHookSystemInit: MockInstance;
let mockAgentRegistryReload: MockInstance;
let mockSkillsReload: MockInstance;
const activeExtension: GeminiCLIExtension = {
name: 'test-extension',
@@ -65,6 +66,7 @@ describe('SimpleExtensionLoader', () => {
mockGeminiClientSetTools = vi.fn();
mockHookSystemInit = vi.fn();
mockAgentRegistryReload = vi.fn();
mockSkillsReload = vi.fn();
mockConfig = {
getMcpClientManager: () => mockMcpClientManager,
getEnableExtensionReloading: () => extensionReloadingEnabled,
@@ -78,6 +80,7 @@ describe('SimpleExtensionLoader', () => {
getAgentRegistry: () => ({
reload: mockAgentRegistryReload,
}),
reloadSkills: mockSkillsReload,
} as unknown as Config;
});
@@ -138,17 +141,20 @@ describe('SimpleExtensionLoader', () => {
expect(mockHookSystemInit).toHaveBeenCalledOnce();
expect(mockGeminiClientSetTools).toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).toHaveBeenCalledOnce();
expect(mockSkillsReload).toHaveBeenCalledOnce();
} else {
expect(mockMcpClientManager.startExtension).not.toHaveBeenCalled();
expect(mockRefreshServerHierarchicalMemory).not.toHaveBeenCalled();
expect(mockHookSystemInit).not.toHaveBeenCalled();
expect(mockGeminiClientSetTools).not.toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).not.toHaveBeenCalled();
expect(mockSkillsReload).not.toHaveBeenCalled();
}
mockRefreshServerHierarchicalMemory.mockClear();
mockHookSystemInit.mockClear();
mockGeminiClientSetTools.mockClear();
mockAgentRegistryReload.mockClear();
mockSkillsReload.mockClear();
await loader.unloadExtension(activeExtension);
if (reloadingEnabled) {
@@ -159,12 +165,14 @@ describe('SimpleExtensionLoader', () => {
expect(mockHookSystemInit).toHaveBeenCalledOnce();
expect(mockGeminiClientSetTools).toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).toHaveBeenCalledOnce();
expect(mockSkillsReload).toHaveBeenCalledOnce();
} else {
expect(mockMcpClientManager.stopExtension).not.toHaveBeenCalled();
expect(mockRefreshServerHierarchicalMemory).not.toHaveBeenCalled();
expect(mockHookSystemInit).not.toHaveBeenCalled();
expect(mockGeminiClientSetTools).not.toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).not.toHaveBeenCalled();
expect(mockSkillsReload).not.toHaveBeenCalled();
}
});
@@ -186,6 +194,7 @@ describe('SimpleExtensionLoader', () => {
expect(mockRefreshServerHierarchicalMemory).toHaveBeenCalledOnce();
expect(mockHookSystemInit).toHaveBeenCalledOnce();
expect(mockAgentRegistryReload).toHaveBeenCalledOnce();
expect(mockSkillsReload).toHaveBeenCalledOnce();
},
);
},
@@ -201,6 +210,7 @@ describe('SimpleExtensionLoader', () => {
await loader.restartExtension(activeExtension);
expect(loader.stopExtension).toHaveBeenCalledWith(activeExtension);
expect(loader.startExtension).toHaveBeenCalledWith(activeExtension);
expect(mockSkillsReload).toHaveBeenCalledTimes(2);
});
});
});

View File

@@ -113,6 +113,7 @@ export abstract class ExtensionLoader {
await refreshServerHierarchicalMemory(this.config);
await this.config.getHookSystem()?.initialize();
await this.config.getAgentRegistry().reload();
await this.config.reloadSkills();
}
}