@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
JavaScript
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