fix(ai): reset provider autocomplete state on search string change

When typing /ai start <prefix><tab>, the autocomplete was not properly
handling search string changes. For example, typing "/ai start o<tab>"
would return "openai", but then typing "/ai start p<tab>" would still
return "openai" because the autocomplete state was not reset.

This commit:
- Adds ai_providers_reset_ac() function to reset provider autocomplete
  state, following the same pattern as accounts_reset_all_search()
- Integrates ai_providers_reset_ac() into cmd_ac_reset() for proper
  state cleanup when user presses Ctrl+C or switches contexts
This commit is contained in:
2026-05-13 09:40:52 +00:00
parent 18fb7fa733
commit 1ecaceb59f
3 changed files with 21 additions and 10 deletions

View File

@@ -395,22 +395,15 @@ ai_list_providers(void)
* Provider autocomplete state
* ======================================================================== */
/* Stateful provider name finder with case-sensitive matching.
* Maintains position in sorted list for deterministic tab-completion cycling.
* The autocomplete is kept in sync via ai_add_provider/ai_remove_provider. */
gchar*
ai_providers_find(const char* const search_str, gboolean previous, void* context)
{
/* Initialize autocomplete on first use */
if (!providers_ac) {
providers_ac = autocomplete_new();
log_debug("[AI-AC] Uninitialized call to ai_providers_find");
return NULL;
}
/* NULL search_str is treated as empty string for cycling */
const char* effective_search = (search_str != NULL) ? search_str : "";
/* Use stateful autocomplete */
return autocomplete_complete(providers_ac, effective_search, FALSE, previous);
return autocomplete_complete(providers_ac, search_str, FALSE, previous);
}
/* Stateful model name finder for autocomplete.
@@ -444,6 +437,17 @@ ai_models_find(const char* const search_str, gboolean previous, void* context)
return result;
}
/* Reset the provider autocomplete state.
* Called from cmd_ac_reset() to clear autocomplete state when the user presses Ctrl+C. */
void
ai_providers_reset_ac(void)
{
if (!providers_ac) {
return;
}
autocomplete_reset(providers_ac);
}
gchar*
ai_get_provider_key(const gchar* provider_name)
{

View File

@@ -115,6 +115,12 @@ gchar* ai_providers_find(const char* const search_str, gboolean previous, void*
*/
gchar* ai_models_find(const char* const search_str, gboolean previous, void* context);
/**
* Reset the provider autocomplete state.
* Called from cmd_ac_reset() to clear autocomplete state.
*/
void ai_providers_reset_ac(void);
/**
* Get the API key for a provider.
* @param provider_name The provider name

View File

@@ -1697,6 +1697,7 @@ cmd_ac_reset(ProfWin* window)
win_reset_search_attempts();
win_close_reset_search_attempts();
plugins_reset_autocomplete();
ai_providers_reset_ac();
}
void