feat(cli): Add state management and plumbing for agent configuration dialog (#17259)

This commit is contained in:
Sandy Tao
2026-01-22 10:30:44 -08:00
committed by GitHub
parent ba8c64459b
commit 902e5d6dae
9 changed files with 246 additions and 1 deletions

View File

@@ -188,6 +188,7 @@ describe('useSlashCommandProcessor', () => {
openSettingsDialog: vi.fn(),
openSessionBrowser: vi.fn(),
openModelDialog: mockOpenModelDialog,
openAgentConfigDialog: vi.fn(),
openPermissionsDialog: vi.fn(),
quit: mockSetQuittingMessages,
setDebugMessage: vi.fn(),
@@ -520,6 +521,82 @@ describe('useSlashCommandProcessor', () => {
expect(mockFn).toHaveBeenCalled();
},
);
it('should handle "dialog: agentConfig" action with props', async () => {
const mockOpenAgentConfigDialog = vi.fn();
const agentDefinition = { name: 'test-agent' };
const commandName = 'agentconfigcmd';
const command = createTestCommand({
name: commandName,
action: vi.fn().mockResolvedValue({
type: 'dialog',
dialog: 'agentConfig',
props: {
name: 'test-agent',
displayName: 'Test Agent',
definition: agentDefinition,
},
}),
});
// Re-setup the hook with the mock action that we can inspect
mockBuiltinLoadCommands.mockResolvedValue(Object.freeze([command]));
mockFileLoadCommands.mockResolvedValue(Object.freeze([]));
mockMcpLoadCommands.mockResolvedValue(Object.freeze([]));
let result!: { current: ReturnType<typeof useSlashCommandProcessor> };
await act(async () => {
const hook = renderHook(() =>
useSlashCommandProcessor(
mockConfig,
mockSettings,
mockAddItem,
mockClearItems,
mockLoadHistory,
vi.fn(),
vi.fn(),
vi.fn(),
{
openAuthDialog: vi.fn(),
openThemeDialog: vi.fn(),
openEditorDialog: vi.fn(),
openPrivacyNotice: vi.fn(),
openSettingsDialog: vi.fn(),
openSessionBrowser: vi.fn(),
openModelDialog: vi.fn(),
openAgentConfigDialog: mockOpenAgentConfigDialog,
openPermissionsDialog: vi.fn(),
quit: vi.fn(),
setDebugMessage: vi.fn(),
toggleCorgiMode: vi.fn(),
toggleDebugProfiler: vi.fn(),
dispatchExtensionStateUpdate: vi.fn(),
addConfirmUpdateExtensionRequest: vi.fn(),
setText: vi.fn(),
},
new Map(),
true,
vi.fn(),
vi.fn(),
),
);
result = hook.result;
});
await waitFor(() =>
expect(result.current.slashCommands).toHaveLength(1),
);
await act(async () => {
await result.current.handleSlashCommand(`/${commandName}`);
});
expect(mockOpenAgentConfigDialog).toHaveBeenCalledWith(
'test-agent',
'Test Agent',
agentDefinition,
);
});
});
it('should handle "load_history" action', async () => {