From 02c11ee5a03cf6884d1f97e4993c0407cbf82950 Mon Sep 17 00:00:00 2001 From: Petr Mironychev <9195189+Palm1r@users.noreply.github.com> Date: Sat, 30 May 2026 14:50:49 +0200 Subject: [PATCH] refactor: Remove experimental flag --- CMakeLists.txt | 9 +------ qodeassist.cpp | 8 ------ settings/ProviderDetailPane.cpp | 26 ++++++++++++++++++- settings/ProviderDetailPane.hpp | 2 ++ settings/ProviderSettings.cpp | 44 ++++++++++++++++++++++++++++++--- settings/ProviderSettings.hpp | 8 ++++++ sources/CMakeLists.txt | 5 +--- 7 files changed, 77 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f1956b8..41deddc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,10 +2,6 @@ cmake_minimum_required(VERSION 3.16) project(QodeAssist) -option(QODEASSIST_EXPERIMENTAL - "Enable experimental features" OFF) -message(STATUS "QodeAssist experimental features: ${QODEASSIST_EXPERIMENTAL}") - set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) @@ -170,10 +166,7 @@ add_qtc_plugin(QodeAssist settings/McpClientsListAspect.hpp settings/McpClientsListAspect.cpp ) -if(QODEASSIST_EXPERIMENTAL) - target_compile_definitions(QodeAssist PRIVATE QODEASSIST_EXPERIMENTAL) - target_link_libraries(QodeAssist PRIVATE QodeAssistAgentPipelines) -endif() +target_link_libraries(QodeAssist PRIVATE QodeAssistAgentPipelines) get_target_property(QtCreatorCorePath QtCreator::Core LOCATION) find_program(QtCreatorExecutable diff --git a/qodeassist.cpp b/qodeassist.cpp index c678a7e..0a6795f 100644 --- a/qodeassist.cpp +++ b/qodeassist.cpp @@ -54,21 +54,17 @@ #include "settings/ChatAssistantSettings.hpp" #include "settings/GeneralSettings.hpp" #include "settings/ProjectSettingsPanel.hpp" -#ifdef QODEASSIST_EXPERIMENTAL #include "settings/AgentsSettingsPage.hpp" #include "settings/ProvidersSettingsPage.hpp" #include "sources/settings/AgentPipelinesPage.hpp" -#endif #include "settings/QuickRefactorSettings.hpp" #include "settings/SettingsConstants.hpp" -#ifdef QODEASSIST_EXPERIMENTAL #include "ProviderInstanceFactory.hpp" #include "ProviderLauncher.hpp" #include "ProviderSecretsStore.hpp" #include -#endif #include "templates/Templates.hpp" #include "widgets/CustomInstructionsManager.hpp" #include "widgets/QuickRefactorDialog.hpp" @@ -209,7 +205,6 @@ public: Settings::setupProjectPanel(); ConfigurationManager::instance().init(); -#ifdef QODEASSIST_EXPERIMENTAL m_providerInstanceFactory = new Providers::ProviderInstanceFactory(this); m_providerSecretsStore = new Providers::ProviderSecretsStore(this); m_providerLauncher = new Providers::ProviderLauncher(this); @@ -228,7 +223,6 @@ public: m_agentPipelinesPageNavigator = new Settings::AgentPipelinesPageNavigator(this); m_agentPipelinesOptionsPage = Settings::createAgentPipelinesSettingsPage( m_agentFactory, m_agentPipelinesPageNavigator, m_agentsPageNavigator); -#endif m_mcpServerManager = new Mcp::McpServerManager(this); m_mcpServerManager->init(); @@ -524,7 +518,6 @@ private: QPointer m_mcpServerManager; QPointer m_engine; QPointer m_skillsManager; -#ifdef QODEASSIST_EXPERIMENTAL QPointer m_providerInstanceFactory; QPointer m_providerSecretsStore; QPointer m_providerLauncher; @@ -535,7 +528,6 @@ private: std::unique_ptr m_agentsOptionsPage; QPointer m_agentPipelinesPageNavigator; std::unique_ptr m_agentPipelinesOptionsPage; -#endif }; } // namespace QodeAssist::Internal diff --git a/settings/ProviderDetailPane.cpp b/settings/ProviderDetailPane.cpp index 4d49756..7546524 100644 --- a/settings/ProviderDetailPane.cpp +++ b/settings/ProviderDetailPane.cpp @@ -19,6 +19,7 @@ #include #include "ProviderInstanceWriter.hpp" +#include "ProviderSettings.hpp" #include "SectionBox.hpp" #include "SettingsTheme.hpp" #include "SettingsUiBuilders.hpp" @@ -157,6 +158,14 @@ ProviderDetailPane::ProviderDetailPane(QWidget *parent) m_apiKeySaveBtn->setEnabled(false); m_apiKeyClearBtn = new QPushButton(tr("Clear"), this); m_apiKeyClearBtn->setToolTip(tr("Erase the stored API key for this provider")); + m_legacyKeyBtn = new QPushButton(tr("Insert legacy key"), this); + m_legacyKeyBtn->setVisible(false); + connect(m_legacyKeyBtn, &QPushButton::clicked, this, [this] { + if (m_legacyKeyValue.isEmpty()) + return; + m_apiKeyEdit->setText(m_legacyKeyValue); + m_revealKeyBtn->setChecked(true); + }); connect(m_apiKeyEdit, &QLineEdit::textChanged, this, [this](const QString &t) { m_apiKeySaveBtn->setEnabled(!t.isEmpty()); }); @@ -189,7 +198,8 @@ ProviderDetailPane::ProviderDetailPane(QWidget *parent) credGrid->setVerticalSpacing(4); FormBuilder credForm(credGrid); credForm.row(tr("API key:"), keyRow); - credGrid->addWidget(m_keyHint, credForm.currentRow(), 1); + credGrid->addWidget(m_legacyKeyBtn, credForm.currentRow(), 1, Qt::AlignLeft); + credGrid->addWidget(m_keyHint, credForm.currentRow() + 1, 1); credSection->bodyLayout()->addLayout(credGrid); m_launchSection = new SectionBox(tr("Launch"), this); @@ -318,6 +328,18 @@ void ProviderDetailPane::populate(const Providers::ProviderInstance &inst, bool m_keyHint->setText(tr("No key stored yet. Type a key and press Save key.")); } + const LegacyApiKeyEntry legacy + = needsKey ? legacyApiKeyForClientApi(inst.clientApi) : LegacyApiKeyEntry{}; + m_legacyKeyValue = legacy.value; + if (!legacy.value.isEmpty()) { + m_legacyKeyBtn->setToolTip( + tr("Insert the API key saved in the old %1 settings into the field.") + .arg(legacy.label)); + m_legacyKeyBtn->setVisible(true); + } else { + m_legacyKeyBtn->setVisible(false); + } + m_samplePreview->setText( QStringLiteral("# sample request line\nPOST %1/").arg(inst.url)); applyPreviewPalette(); @@ -348,6 +370,8 @@ void ProviderDetailPane::clear() m_apiKeySaveBtn->setEnabled(false); m_apiKeyClearBtn->setEnabled(false); m_revealKeyBtn->setEnabled(false); + m_legacyKeyValue.clear(); + m_legacyKeyBtn->setVisible(false); m_samplePreview->clear(); m_rawToml->clear(); m_editBtn->setVisible(false); diff --git a/settings/ProviderDetailPane.hpp b/settings/ProviderDetailPane.hpp index 97d30c1..2526150 100644 --- a/settings/ProviderDetailPane.hpp +++ b/settings/ProviderDetailPane.hpp @@ -84,6 +84,8 @@ private: QLabel *m_keyHint = nullptr; QPushButton *m_apiKeySaveBtn = nullptr; QPushButton *m_apiKeyClearBtn = nullptr; + QPushButton *m_legacyKeyBtn = nullptr; + QString m_legacyKeyValue; SectionBox *m_launchSection = nullptr; QLabel *m_launchEmptyHint = nullptr; diff --git a/settings/ProviderSettings.cpp b/settings/ProviderSettings.cpp index 069ce3f..651b744 100644 --- a/settings/ProviderSettings.cpp +++ b/settings/ProviderSettings.cpp @@ -21,6 +21,46 @@ ProviderSettings &providerSettings() return settings; } +LegacyApiKeyEntry legacyApiKeyForClientApi(const QString &clientApi) +{ + ProviderSettings &s = providerSettings(); + QString label; + QString value; + + if (clientApi == "Claude") { + label = QStringLiteral("Claude"); + value = s.claudeApiKey(); + } else if (clientApi == "OpenRouter") { + label = QStringLiteral("OpenRouter"); + value = s.openRouterApiKey(); + } else if (clientApi == "OpenAI Compatible") { + label = QStringLiteral("OpenAI Compatible"); + value = s.openAiCompatApiKey(); + } else if (clientApi == "OpenAI (Chat Completions)" || clientApi == "OpenAI (Responses API)") { + label = QStringLiteral("OpenAI"); + value = s.openAiApiKey(); + } else if (clientApi == "Mistral AI") { + label = QStringLiteral("Mistral AI"); + value = s.mistralAiApiKey(); + } else if (clientApi == "Codestral") { + label = QStringLiteral("Codestral"); + value = s.codestralApiKey(); + } else if (clientApi == "Google AI") { + label = QStringLiteral("Google AI"); + value = s.googleAiApiKey(); + } else if (clientApi == "Ollama (Native)" || clientApi == "Ollama (OpenAI-compatible)") { + label = QStringLiteral("Ollama (Bearer)"); + value = s.ollamaBasicAuthApiKey(); + } else if (clientApi == "llama.cpp") { + label = QStringLiteral("llama.cpp"); + value = s.llamaCppApiKey(); + } + + if (value.isEmpty()) + return {}; + return {label, value}; +} + ProviderSettings::ProviderSettings() { setAutoApply(false); @@ -256,8 +296,4 @@ public: } }; -#ifndef QODEASSIST_EXPERIMENTAL -const ProviderSettingsPage providerSettingsPage; -#endif - } // namespace QodeAssist::Settings diff --git a/settings/ProviderSettings.hpp b/settings/ProviderSettings.hpp index c50e4be..8bf68da 100644 --- a/settings/ProviderSettings.hpp +++ b/settings/ProviderSettings.hpp @@ -39,4 +39,12 @@ private: ProviderSettings &providerSettings(); +struct LegacyApiKeyEntry +{ + QString label; + QString value; +}; + +LegacyApiKeyEntry legacyApiKeyForClientApi(const QString &clientApi); + } // namespace QodeAssist::Settings diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 9139c6c..aad5078 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -6,7 +6,4 @@ add_subdirectory(providers) add_subdirectory(templates) add_subdirectory(agents) add_subdirectory(providersConfig) - -if(QODEASSIST_EXPERIMENTAL) - add_subdirectory(settings) -endif() +add_subdirectory(settings)