From af620d0197737ec52f1a6939531fa16c8557622b Mon Sep 17 00:00:00 2001
From: Stijnus
Date: Fri, 31 Jan 2025 12:55:52 +0100
Subject: [PATCH] Bug Fixes part1
---
.../settings/connections/ConnectionsTab.tsx | 18 ++
.../settings/features/FeaturesTab.tsx | 190 ++++++------------
.../settings/providers/CloudProvidersTab.tsx | 93 +++++----
app/lib/hooks/useSettings.ts | 61 +++---
app/lib/stores/settings.ts | 144 +++++++++++--
scripts/clean.js.zip | Bin 1042 -> 0 bytes
6 files changed, 289 insertions(+), 217 deletions(-)
delete mode 100644 scripts/clean.js.zip
diff --git a/app/components/settings/connections/ConnectionsTab.tsx b/app/components/settings/connections/ConnectionsTab.tsx
index e2431f67..caaedce5 100644
--- a/app/components/settings/connections/ConnectionsTab.tsx
+++ b/app/components/settings/connections/ConnectionsTab.tsx
@@ -311,6 +311,24 @@ export default function ConnectionsTab() {
'disabled:opacity-50',
)}
/>
+
+
+ Get your token
+
+
+
•
+
+ Required scopes:{' '}
+ {connection.tokenType === 'classic'
+ ? 'repo, read:org, read:user'
+ : 'Repository access, Organization access'}
+
+
diff --git a/app/components/settings/features/FeaturesTab.tsx b/app/components/settings/features/FeaturesTab.tsx
index 3de9c83c..2cf735d6 100644
--- a/app/components/settings/features/FeaturesTab.tsx
+++ b/app/components/settings/features/FeaturesTab.tsx
@@ -1,19 +1,11 @@
-import React, { memo, useEffect, useState } from 'react';
+// Remove unused imports
+import React, { memo, useCallback } from 'react';
import { motion } from 'framer-motion';
import { Switch } from '~/components/ui/Switch';
import { useSettings } from '~/lib/hooks/useSettings';
import { classNames } from '~/utils/classNames';
import { toast } from 'react-toastify';
import { PromptLibrary } from '~/lib/common/prompt-library';
-import {
- latestBranchStore,
- autoSelectStarterTemplate,
- enableContextOptimizationStore,
- isLocalModelsEnabled,
- isEventLogsEnabled,
- promptStore as promptAtom,
-} from '~/lib/stores/settings';
-import { logStore } from '~/lib/stores/logs';
interface FeatureToggle {
id: string;
@@ -114,133 +106,85 @@ const FeatureSection = memo(
);
export default function FeaturesTab() {
- const { autoSelectTemplate, isLatestBranch, contextOptimizationEnabled, eventLogs, isLocalModel } = useSettings();
+ const {
+ autoSelectTemplate,
+ isLatestBranch,
+ contextOptimizationEnabled,
+ eventLogs,
+ isLocalModel,
+ setAutoSelectTemplate,
+ enableLatestBranch,
+ enableContextOptimization,
+ setEventLogs,
+ enableLocalModels,
+ setPromptId,
+ promptId,
+ } = useSettings();
- const getLocalStorageBoolean = (key: string, defaultValue: boolean): boolean => {
- const value = localStorage.getItem(key);
+ const handleToggleFeature = useCallback(
+ (id: string, enabled: boolean) => {
+ switch (id) {
+ case 'latestBranch':
+ enableLatestBranch(enabled);
+ toast.success(`Main branch updates ${enabled ? 'enabled' : 'disabled'}`);
+ break;
+ case 'autoSelectTemplate':
+ setAutoSelectTemplate(enabled);
+ toast.success(`Auto select template ${enabled ? 'enabled' : 'disabled'}`);
+ break;
+ case 'contextOptimization':
+ enableContextOptimization(enabled);
+ toast.success(`Context optimization ${enabled ? 'enabled' : 'disabled'}`);
+ break;
+ case 'eventLogs':
+ setEventLogs(enabled);
+ toast.success(`Event logging ${enabled ? 'enabled' : 'disabled'}`);
+ break;
+ case 'localModels':
+ enableLocalModels(enabled);
+ toast.success(`Experimental providers ${enabled ? 'enabled' : 'disabled'}`);
+ break;
+ default:
+ break;
+ }
+ },
+ [enableLatestBranch, setAutoSelectTemplate, enableContextOptimization, setEventLogs, enableLocalModels],
+ );
- if (value === null) {
- return defaultValue;
- }
-
- try {
- return JSON.parse(value);
- } catch {
- return defaultValue;
- }
- };
-
- const autoSelectTemplateState = getLocalStorageBoolean('autoSelectTemplate', autoSelectTemplate);
- const enableLatestBranchState = getLocalStorageBoolean('enableLatestBranch', isLatestBranch);
- const contextOptimizationState = getLocalStorageBoolean('contextOptimization', contextOptimizationEnabled);
- const eventLogsState = getLocalStorageBoolean('eventLogs', eventLogs);
- const experimentalProvidersState = getLocalStorageBoolean('experimentalProviders', isLocalModel);
- const promptLibraryState = getLocalStorageBoolean('promptLibrary', false);
- const promptIdState = localStorage.getItem('promptId') ?? '';
-
- const [autoSelectTemplateLocal, setAutoSelectTemplateLocal] = useState(autoSelectTemplateState);
- const [enableLatestBranchLocal, setEnableLatestBranchLocal] = useState(enableLatestBranchState);
- const [contextOptimizationLocal, setContextOptimizationLocal] = useState(contextOptimizationState);
- const [eventLogsLocal, setEventLogsLocal] = useState(eventLogsState);
- const [experimentalProvidersLocal, setExperimentalProvidersLocal] = useState(experimentalProvidersState);
- const [promptLibraryLocal, setPromptLibraryLocal] = useState(promptLibraryState);
- const [promptIdLocal, setPromptIdLocal] = useState(promptIdState);
-
- useEffect(() => {
- localStorage.setItem('autoSelectTemplate', JSON.stringify(autoSelectTemplateLocal));
- localStorage.setItem('enableLatestBranch', JSON.stringify(enableLatestBranchLocal));
- localStorage.setItem('contextOptimization', JSON.stringify(contextOptimizationLocal));
- localStorage.setItem('eventLogs', JSON.stringify(eventLogsLocal));
- localStorage.setItem('experimentalProviders', JSON.stringify(experimentalProvidersLocal));
- localStorage.setItem('promptLibrary', JSON.stringify(promptLibraryLocal));
- localStorage.setItem('promptId', promptIdLocal);
-
- autoSelectStarterTemplate.set(autoSelectTemplateLocal);
- latestBranchStore.set(enableLatestBranchLocal);
- enableContextOptimizationStore.set(contextOptimizationLocal);
- isEventLogsEnabled.set(eventLogsLocal);
- isLocalModelsEnabled.set(experimentalProvidersLocal);
- promptAtom.set(promptIdLocal);
- }, [
- autoSelectTemplateLocal,
- enableLatestBranchLocal,
- contextOptimizationLocal,
- eventLogsLocal,
- experimentalProvidersLocal,
- promptLibraryLocal,
- promptIdLocal,
- ]);
-
- const handleToggleFeature = (featureId: string, enabled: boolean) => {
- logStore.logFeatureToggle(featureId, enabled);
-
- switch (featureId) {
- case 'latestBranch':
- setEnableLatestBranchLocal(enabled);
- latestBranchStore.set(enabled);
- toast.success(`Main branch updates ${enabled ? 'enabled' : 'disabled'}`);
- break;
- case 'autoSelectTemplate':
- setAutoSelectTemplateLocal(enabled);
- autoSelectStarterTemplate.set(enabled);
- toast.success(`Auto template selection ${enabled ? 'enabled' : 'disabled'}`);
- break;
- case 'contextOptimization':
- setContextOptimizationLocal(enabled);
- enableContextOptimizationStore.set(enabled);
- toast.success(`Context optimization ${enabled ? 'enabled' : 'disabled'}`);
- break;
- case 'localModels':
- setExperimentalProvidersLocal(enabled);
- isLocalModelsEnabled.set(enabled);
- toast.success(`Experimental providers ${enabled ? 'enabled' : 'disabled'}`);
- break;
- case 'eventLogs':
- setEventLogsLocal(enabled);
- isEventLogsEnabled.set(enabled);
- toast.success(`Event logging ${enabled ? 'enabled' : 'disabled'}`);
- break;
- case 'promptLibrary':
- setPromptLibraryLocal(enabled);
- toast.success(`Prompt Library ${enabled ? 'enabled' : 'disabled'}`);
- break;
- }
- };
-
- const features: Record<'stable' | 'beta' | 'experimental', FeatureToggle[]> = {
+ const features = {
stable: [
+ {
+ id: 'latestBranch',
+ title: 'Main Branch Updates',
+ description: 'Get the latest updates from the main branch',
+ icon: 'i-ph:git-branch',
+ enabled: isLatestBranch,
+ tooltip: 'Enable to receive updates from the main development branch',
+ },
{
id: 'autoSelectTemplate',
- title: 'Auto Select Code Template',
- description: 'Let Bolt select the best starter template for your project',
- icon: 'i-ph:magic-wand',
- enabled: autoSelectTemplateLocal,
- tooltip: 'Automatically choose the most suitable template based on your project type',
+ title: 'Auto Select Template',
+ description: 'Automatically select starter template',
+ icon: 'i-ph:selection',
+ enabled: autoSelectTemplate,
+ tooltip: 'Automatically select the most appropriate starter template',
},
{
id: 'contextOptimization',
title: 'Context Optimization',
- description: 'Optimize chat context by redacting file contents and using system prompts',
- icon: 'i-ph:arrows-in',
- enabled: contextOptimizationLocal,
- tooltip: 'Improve AI responses by optimizing the context window and system prompts',
+ description: 'Optimize context for better responses',
+ icon: 'i-ph:brain',
+ enabled: contextOptimizationEnabled,
+ tooltip: 'Enable context optimization for improved AI responses',
},
{
id: 'eventLogs',
title: 'Event Logging',
description: 'Enable detailed event logging and history',
icon: 'i-ph:list-bullets',
- enabled: eventLogsLocal,
+ enabled: eventLogs,
tooltip: 'Record detailed logs of system events and user actions',
},
- {
- id: 'promptLibrary',
- title: 'Prompt Library',
- description: 'Manage your prompt library settings',
- icon: 'i-ph:library',
- enabled: promptLibraryLocal,
- tooltip: 'Enable or disable the prompt library',
- },
],
beta: [],
experimental: [
@@ -249,7 +193,7 @@ export default function FeaturesTab() {
title: 'Experimental Providers',
description: 'Enable experimental providers like Ollama, LMStudio, and OpenAILike',
icon: 'i-ph:robot',
- enabled: experimentalProvidersLocal,
+ enabled: isLocalModel,
experimental: true,
tooltip: 'Try out new AI providers and models in development',
},
@@ -319,9 +263,9 @@ export default function FeaturesTab() {