From f8171142ee36acf163191a9f2f3e8eb6b459ffd1 Mon Sep 17 00:00:00 2001 From: rob Date: Tue, 21 Jul 2026 13:01:54 -0300 Subject: [PATCH] Fix provider setup without discovery --- src/cmdforge/providers.py | 1 - tests/test_providers.py | 14 +++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/cmdforge/providers.py b/src/cmdforge/providers.py index a73f50a..b8211b8 100644 --- a/src/cmdforge/providers.py +++ b/src/cmdforge/providers.py @@ -642,7 +642,6 @@ def get_providers_file() -> Path: discovered = discover_installed_providers() selected = [] if discovered: - import sys print("=" * 60, file=sys.stderr) print("CmdForge First-Run Provider Setup", file=sys.stderr) print("=" * 60, file=sys.stderr) diff --git a/tests/test_providers.py b/tests/test_providers.py index 84d3215..f8d4cac 100644 --- a/tests/test_providers.py +++ b/tests/test_providers.py @@ -9,7 +9,7 @@ import yaml from cmdforge.providers import ( Provider, ProviderResult, ProviderExecutionPolicy, - load_providers, save_providers, get_provider, + load_providers, save_providers, get_provider, get_providers_file, add_provider, delete_provider, call_provider, discover_installed_providers, mock_provider, DEFAULT_PROVIDERS, strip_ansi @@ -192,6 +192,18 @@ class TestProviderPersistence: assert oct(temp_providers_file.stat().st_mode & 0o777) == "0o600" + def test_first_run_without_discovered_providers_writes_defaults( + self, temp_providers_file, capsys + ): + with patch( + "cmdforge.providers.discover_installed_providers", return_value=[] + ): + result = get_providers_file() + + assert result == temp_providers_file + assert temp_providers_file.is_file() + assert "No AI providers detected" in capsys.readouterr().err + def test_malformed_access_policy_fails_closed(self, temp_providers_file, capsys): temp_providers_file.parent.mkdir(parents=True) temp_providers_file.write_text(yaml.safe_dump({