Merge pull request #2656 from QwenLM/fix-issue-qwen-code

fix: resolve /clear command and ESC key lag caused by hooks system
This commit is contained in:
顾盼 2026-03-30 15:32:42 +08:00 committed by GitHub
commit cd935a5896
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 297 additions and 25 deletions

View file

@ -1582,4 +1582,37 @@ describe('Model Switching and Config Updates', () => {
const updatedConfig = config.getContentGeneratorConfig();
expect(updatedConfig['contextWindowSize']).toBe(128_000);
});
describe('hasHooksForEvent', () => {
it('should return false when hookSystem is not initialized', () => {
const config = new Config(baseParams);
expect(config.hasHooksForEvent('Stop')).toBe(false);
});
it('should delegate to hookSystem.hasHooksForEvent when hookSystem exists', () => {
const config = new Config(baseParams);
const mockHasHooksForEvent = vi.fn().mockReturnValue(true);
const mockHookSystem = {
hasHooksForEvent: mockHasHooksForEvent,
};
// @ts-expect-error - accessing private for testing
config['hookSystem'] = mockHookSystem;
expect(config.hasHooksForEvent('UserPromptSubmit')).toBe(true);
expect(mockHasHooksForEvent).toHaveBeenCalledWith('UserPromptSubmit');
});
it('should return false when hookSystem has no hooks for the event', () => {
const config = new Config(baseParams);
const mockHasHooksForEvent = vi.fn().mockReturnValue(false);
const mockHookSystem = {
hasHooksForEvent: mockHasHooksForEvent,
};
// @ts-expect-error - accessing private for testing
config['hookSystem'] = mockHookSystem;
expect(config.hasHooksForEvent('Stop')).toBe(false);
expect(mockHasHooksForEvent).toHaveBeenCalledWith('Stop');
});
});
});

View file

@ -1769,6 +1769,15 @@ export class Config {
return this.hookSystem;
}
/**
* Fast-path check: returns true only when hooks are enabled AND there are
* registered hooks for the given event name. Callers can use this to skip
* expensive MessageBus round-trips when no hooks are configured.
*/
hasHooksForEvent(eventName: string): boolean {
return this.hookSystem?.hasHooksForEvent(eventName) ?? false;
}
/**
* Check if hooks are enabled.
*/