diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index f0806e41..86f491ca 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -1192,7 +1192,6 @@ cmd_ac_init(void) autocomplete_add_unsorted(ai_set_subcommands_ac, "provider", FALSE); autocomplete_add_unsorted(ai_set_subcommands_ac, "token", FALSE); - autocomplete_add_unsorted(ai_set_subcommands_ac, "default-provider", FALSE); autocomplete_add_unsorted(ai_set_subcommands_ac, "default-model", FALSE); autocomplete_add_unsorted(ai_set_subcommands_ac, "custom", FALSE); @@ -4511,12 +4510,6 @@ _ai_autocomplete(ProfWin* window, const char* const input, gboolean previous) return result; } - // /ai set default-provider - autocomplete provider names - result = autocomplete_param_with_func(input, "/ai set default-provider", ai_providers_find, previous, NULL); - if (result) { - return result; - } - // /ai set default-model - autocomplete provider names result = autocomplete_param_with_func(input, "/ai set default-model", ai_providers_find, previous, NULL); if (result) { @@ -4584,7 +4577,7 @@ _ai_autocomplete(ProfWin* window, const char* const input, gboolean previous) } // /ai switch - autocomplete model names from current session's provider - ProfAiWin* aiwin = (window && window->type == WIN_AI) ? (ProfAiWin*)window : wins_get_ai(); + ProfAiWin* aiwin = (window && window->type == WIN_AI) ? (ProfAiWin*)window : NULL; result = autocomplete_param_with_func(input, "/ai switch", ai_models_find, previous, aiwin); if (result) { return result; diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index 0c3364d8..0f748e33 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -2804,7 +2804,6 @@ static const struct cmd_t command_defs[] = { "/ai", "/ai set provider ", "/ai set token ", - "/ai set default-provider ", "/ai set default-model ", "/ai set custom ", "/ai remove provider ", @@ -2823,14 +2822,12 @@ static const struct cmd_t command_defs[] = { { "", "Display current AI settings and configured providers" }, { "set provider ", "Add or update a provider with custom API endpoint" }, { "set token ", "Set API token for a provider (e.g., openai, perplexity)" }, - { "set default-provider ", "Set global default provider for /ai start" }, { "set default-model ", "Set default model for a provider" }, { "set custom ", "Set provider-level setting (e.g., tools, search)" }, { "remove provider ", "Remove a custom provider" }, { "providers", "List configured providers with full details" }, - { "start [] []", "Start new AI chat (space-separated, uses defaults if omitted)" }, + { "start []", "Start new AI chat (space-separated, uses defaults if omitted)" }, { "switch []", "Switch to different provider (and optionally model)" }, - { "switch ", "Change model in current session (keeps provider)" }, { "models ", "Fetch and display available models for provider" }, { "clear", "Clear current chat history" }) CMD_EXAMPLES( @@ -2838,7 +2835,6 @@ static const struct cmd_t command_defs[] = { "/ai set token openai sk-xxx", "/ai set token perplexity pplx-xxx", "/ai set provider custom https://my-api.com/v1/chat/completions", - "/ai set default-provider perplexity", "/ai set default-model perplexity sonar", "/ai set custom perplexity tools enabled", "/ai remove provider custom", diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index c19fe7fb..52f29acb 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -10876,23 +10876,6 @@ cmd_ai_set(ProfWin* window, const char* const command, gchar** args) cons_show("Setting '%s' for provider '%s' set to: %s", args[3], args[2], args[4]); cons_show(""); return TRUE; - } else if (g_strcmp0(args[1], "default-provider") == 0) { - // /ai set default-provider - if (g_strv_length(args) < 3) { - cons_bad_cmd_usage(command); - return TRUE; - } - const gchar* provider_name = args[2]; - AIProvider* provider = ai_get_provider(provider_name); - if (!provider) { - cons_show_error("Provider '%s' not found. Use '/ai set provider %s ' to add it.", - provider_name, provider_name); - return TRUE; - } - prefs_set_string(PREF_AI_PROVIDER, provider_name); - cons_show("Default provider set to: %s", provider_name); - cons_show(""); - return TRUE; } cons_bad_cmd_usage(command); @@ -11024,12 +11007,12 @@ cmd_ai_model(ProfWin* window, const char* const command, gchar** args) const gchar* model = args[1]; - // Get current AI window - ProfAiWin* aiwin = (window && window->type == WIN_AI) ? (ProfAiWin*)window : wins_get_ai(); - if (!aiwin) { - cons_show("No active AI chat window. Use '/ai start' first."); + // Must be in an AI window to use this command + if (!window || window->type != WIN_AI) { + cons_show_error("Must be in an AI chat window to use this command."); return TRUE; } + ProfAiWin* aiwin = (ProfAiWin*)window; assert(aiwin->memcheck == PROFAIWIN_MEMCHECK); @@ -11055,12 +11038,12 @@ cmd_ai_switch(ProfWin* window, const char* const command, gchar** args) return TRUE; } - // Get current AI window - ProfAiWin* aiwin = (window && window->type == WIN_AI) ? (ProfAiWin*)window : wins_get_ai(); - if (!aiwin) { - cons_show("No active AI chat window. Use '/ai start' first."); + // Must be in an AI window to use this command + if (!window || window->type != WIN_AI) { + cons_show_error("Must be in an AI chat window to use this command."); return TRUE; } + ProfAiWin* aiwin = (ProfAiWin*)window; assert(aiwin->memcheck == PROFAIWIN_MEMCHECK); @@ -11158,7 +11141,11 @@ cmd_ai_models(ProfWin* window, const char* const command, gchar** args) cons_show("Use '/ai models %s' to fetch fresh models from the API.", provider_name); } else { // Default: fetch fresh models from API - ProfAiWin* aiwin = (window && window->type == WIN_AI) ? (ProfAiWin*)window : wins_get_ai(); + if (!window || window->type != WIN_AI) { + cons_show_error("Must be in an AI chat window to fetch models."); + return TRUE; + } + ProfAiWin* aiwin = (ProfAiWin*)window; ai_fetch_models(provider_name, aiwin); } @@ -11169,18 +11156,20 @@ gboolean cmd_ai_clear(ProfWin* window, const char* const command, gchar** args) { // /ai clear - ProfAiWin* aiwin = (window && window->type == WIN_AI) ? (ProfAiWin*)window : wins_get_ai(); - - if (aiwin) { - assert(aiwin->memcheck == PROFAIWIN_MEMCHECK); - if (aiwin->session) { - ai_session_clear_history(aiwin->session); - } - cons_show("Chat history cleared."); - } else { - cons_show("No active AI chat window to clear."); + // Must be in an AI window to use this command + if (!window || window->type != WIN_AI) { + cons_show_error("Must be in an AI chat window to use this command."); + return TRUE; } - cons_show(""); + ProfAiWin* aiwin = (ProfAiWin*)window; + + assert(aiwin->memcheck == PROFAIWIN_MEMCHECK); + if (aiwin->session) { + ai_session_clear_history(aiwin->session); + } + + win_clear(window); + cons_show("AI Chat history cleared."); return TRUE; } diff --git a/src/ui/window_list.c b/src/ui/window_list.c index ecf1e3e6..34424b3a 100644 --- a/src/ui/window_list.c +++ b/src/ui/window_list.c @@ -867,24 +867,6 @@ wins_get_prune_wins(void) return result; } -ProfAiWin* -wins_get_ai(void) -{ - GList* curr = values; - - while (curr) { - ProfWin* window = curr->data; - if (window->type == WIN_AI) { - ProfAiWin* aiwin = (ProfAiWin*)window; - assert(aiwin->memcheck == PROFAIWIN_MEMCHECK); - return aiwin; - } - curr = g_list_next(curr); - } - - return NULL; -} - gboolean wins_ai_exists(ProfAiWin* const aiwin) { diff --git a/src/ui/window_list.h b/src/ui/window_list.h index ef9efe86..79c84a0d 100644 --- a/src/ui/window_list.h +++ b/src/ui/window_list.h @@ -63,7 +63,6 @@ ProfPrivateWin* wins_get_private(const char* const fulljid); ProfPluginWin* wins_get_plugin(const char* const tag); ProfXMLWin* wins_get_xmlconsole(void); ProfVcardWin* wins_get_vcard(void); -ProfAiWin* wins_get_ai(void); gboolean wins_ai_exists(ProfAiWin* const aiwin); void wins_close_plugin(char* tag);