UNPKG

@nanocollective/nanocoder

Version:

A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter

196 lines 9.66 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { createLLMClient } from '../client-factory.js'; import { ErrorMessage, SuccessMessage } from '../components/message-box.js'; import { reloadAppConfig } from '../config/index.js'; import { loadPreferences, updateLastUsed } from '../config/preferences.js'; import { getToolManager } from '../message-handler.js'; export function useModeHandlers({ client, currentModel, currentProvider, currentTheme: _currentTheme, setClient, setCurrentModel, setCurrentProvider, setCurrentTheme: _setCurrentTheme, setMessages, setIsModelSelectionMode, setIsProviderSelectionMode, setIsModelDatabaseMode, setIsConfigWizardMode, setIsSettingsMode, setIsMcpWizardMode, setIsExplorerMode, setIsIdeSelectionMode, addToChatQueue, getNextComponentKey, reinitializeMCPServers, }) { // Helper function to enter model selection mode const enterModelSelectionMode = () => { setIsModelSelectionMode(true); }; // Helper function to enter provider selection mode const enterProviderSelectionMode = () => { setIsProviderSelectionMode(true); }; // Handle model selection const handleModelSelect = async (selectedModel) => { if (client && selectedModel !== currentModel) { client.setModel(selectedModel); setCurrentModel(selectedModel); // Clear message history when switching models setMessages([]); await client.clearContext(); // Update preferences updateLastUsed(currentProvider, selectedModel); // Add success message to chat queue addToChatQueue(_jsx(SuccessMessage, { message: `Model changed to: ${selectedModel}. Chat history cleared.`, hideBox: true }, `model-changed-${getNextComponentKey()}`)); } setIsModelSelectionMode(false); }; // Handle model selection cancel const handleModelSelectionCancel = () => { setIsModelSelectionMode(false); }; // Handle provider selection const handleProviderSelect = async (selectedProvider) => { if (selectedProvider !== currentProvider) { try { // Create new client for the selected provider const { client: newClient, actualProvider } = await createLLMClient(selectedProvider); // Check if we got the provider we requested if (actualProvider !== selectedProvider) { // Provider was forced to a different one (likely due to missing config) addToChatQueue(_jsx(ErrorMessage, { message: `${selectedProvider} is not available. Please ensure it's properly configured in agents.config.json.`, hideBox: true }, `provider-forced-${getNextComponentKey()}`)); return; // Don't change anything } setClient(newClient); setCurrentProvider(actualProvider); // Set the model from the new client const newModel = newClient.getCurrentModel(); setCurrentModel(newModel); // Clear message history when switching providers setMessages([]); await newClient.clearContext(); // Update preferences - use the actualProvider (which is what was successfully created) updateLastUsed(actualProvider, newModel); // Add success message to chat queue addToChatQueue(_jsx(SuccessMessage, { message: `Provider changed to: ${actualProvider}, model: ${newModel}. Chat history cleared.`, hideBox: true }, `provider-changed-${getNextComponentKey()}`)); } catch (error) { // Add error message if provider change fails addToChatQueue(_jsx(ErrorMessage, { message: `Failed to change provider to ${selectedProvider}: ${String(error)}`, hideBox: true }, `provider-error-${getNextComponentKey()}`)); } } setIsProviderSelectionMode(false); }; // Handle provider selection cancel const handleProviderSelectionCancel = () => { setIsProviderSelectionMode(false); }; // Helper function to enter model database mode const enterModelDatabaseMode = () => { setIsModelDatabaseMode(true); }; // Handle model database cancel const handleModelDatabaseCancel = () => { setIsModelDatabaseMode(false); }; // Helper function to enter config wizard mode const enterConfigWizardMode = () => { setIsConfigWizardMode(true); }; // Handle config wizard cancel/complete const handleConfigWizardComplete = async (configPath) => { setIsConfigWizardMode(false); if (configPath) { addToChatQueue(_jsx(SuccessMessage, { message: `Configuration saved to: ${configPath}.`, hideBox: true }, `config-wizard-complete-${getNextComponentKey()}`)); // Reload the app configuration to pick up the newly saved config reloadAppConfig(); // Reinitialize client with new configuration try { const preferences = loadPreferences(); const { client: newClient, actualProvider } = await createLLMClient(preferences.lastProvider); setClient(newClient); setCurrentProvider(actualProvider); const newModel = newClient.getCurrentModel(); setCurrentModel(newModel); // Clear message history when switching providers setMessages([]); await newClient.clearContext(); // Reinitialize MCP servers with the new configuration const toolManager = getToolManager(); if (toolManager) { try { await reinitializeMCPServers(toolManager); addToChatQueue(_jsx(SuccessMessage, { message: "MCP servers reinitialized with new configuration.", hideBox: true }, `mcp-reinit-${getNextComponentKey()}`)); } catch (mcpError) { addToChatQueue(_jsx(ErrorMessage, { message: `Failed to reinitialize MCP servers: ${String(mcpError)}`, hideBox: true }, `mcp-reinit-error-${getNextComponentKey()}`)); } } addToChatQueue(_jsx(SuccessMessage, { message: `Ready! Using provider: ${actualProvider}, model: ${newModel}`, hideBox: true }, `config-init-${getNextComponentKey()}`)); } catch (error) { addToChatQueue(_jsx(ErrorMessage, { message: `Failed to initialize with new configuration: ${String(error)}`, hideBox: true }, `config-init-error-${getNextComponentKey()}`)); } } }; const handleConfigWizardCancel = () => { setIsConfigWizardMode(false); }; // Helper function to enter MCP wizard mode const enterMcpWizardMode = () => { setIsMcpWizardMode(true); }; // Handle MCP wizard cancel/complete const handleMcpWizardComplete = async (configPath) => { setIsMcpWizardMode(false); if (configPath) { addToChatQueue(_jsx(SuccessMessage, { message: `MCP configuration saved to: ${configPath}.`, hideBox: true }, `mcp-wizard-complete-${getNextComponentKey()}`)); // Reload the app configuration to pick up the newly saved config reloadAppConfig(); // Reinitialize MCP servers with the new configuration const toolManager = getToolManager(); if (toolManager) { try { await reinitializeMCPServers(toolManager); addToChatQueue(_jsx(SuccessMessage, { message: "MCP servers reinitialized with new configuration.", hideBox: true }, `mcp-reinit-${getNextComponentKey()}`)); } catch (mcpError) { addToChatQueue(_jsx(ErrorMessage, { message: `Failed to reinitialize MCP servers: ${String(mcpError)}`, hideBox: true }, `mcp-reinit-error-${getNextComponentKey()}`)); } } } }; const handleMcpWizardCancel = () => { setIsMcpWizardMode(false); }; // Helper function to enter settings mode const enterSettingsMode = () => { setIsSettingsMode(true); }; // Handle settings cancel const handleSettingsCancel = () => { setIsSettingsMode(false); }; // Helper function to enter explorer mode const enterExplorerMode = () => { setIsExplorerMode(true); }; // Handle explorer cancel const handleExplorerCancel = () => { setIsExplorerMode(false); }; // Helper function to enter IDE selection mode const enterIdeSelectionMode = () => { setIsIdeSelectionMode(true); }; // Handle IDE selection cancel const handleIdeSelectionCancel = () => { setIsIdeSelectionMode(false); }; return { enterModelSelectionMode, enterProviderSelectionMode, enterModelDatabaseMode, enterConfigWizardMode, enterSettingsMode, enterMcpWizardMode, handleModelSelect, handleModelSelectionCancel, handleProviderSelect, handleProviderSelectionCancel, handleModelDatabaseCancel, handleConfigWizardComplete, handleConfigWizardCancel, handleMcpWizardComplete, handleMcpWizardCancel, handleSettingsCancel, enterExplorerMode, handleExplorerCancel, enterIdeSelectionMode, handleIdeSelectionCancel, }; } //# sourceMappingURL=useModeHandlers.js.map