diff --git a/src/deepwork/cli/install.py b/src/deepwork/cli/install.py index d6909e96..4c5592a1 100644 --- a/src/deepwork/cli/install.py +++ b/src/deepwork/cli/install.py @@ -283,21 +283,25 @@ def _install_deepwork(platform_name: str | None, project_path: Path) -> None: available_adapters = detector.detect_all_platforms() if not available_adapters: - supported = ", ".join( - f"{AgentAdapter.get(name).display_name} ({AgentAdapter.get(name).config_dir}/)" - for name in AgentAdapter.list_names() - ) - raise InstallError( - f"No AI platform detected.\n" - f"DeepWork supports: {supported}.\n" - "Please set up one of these platforms first, or use --platform to specify." - ) - - # Add all detected platforms - for adapter in available_adapters: - console.print(f" [green]✓[/green] {adapter.display_name} detected") - platforms_to_add.append(adapter.name) - detected_adapters = available_adapters + # No platforms detected - default to Claude Code + console.print(" [dim]•[/dim] No AI platform detected, defaulting to Claude Code") + + # Create .claude directory + claude_dir = project_path / ".claude" + ensure_dir(claude_dir) + console.print(f" [green]✓[/green] Created {claude_dir.relative_to(project_path)}/") + + # Get Claude adapter + claude_adapter_class = AgentAdapter.get("claude") + claude_adapter = claude_adapter_class(project_root=project_path) + platforms_to_add = [claude_adapter.name] + detected_adapters = [claude_adapter] + else: + # Add all detected platforms + for adapter in available_adapters: + console.print(f" [green]✓[/green] {adapter.display_name} detected") + platforms_to_add.append(adapter.name) + detected_adapters = available_adapters # Step 3: Create .deepwork/ directory structure console.print("[yellow]→[/yellow] Creating DeepWork directory structure...") diff --git a/tests/integration/test_install_flow.py b/tests/integration/test_install_flow.py index 9e62a685..beabf811 100644 --- a/tests/integration/test_install_flow.py +++ b/tests/integration/test_install_flow.py @@ -79,14 +79,32 @@ def test_install_fails_without_git(self, temp_dir: Path) -> None: assert result.exit_code != 0 assert "Not a Git repository" in result.output - def test_install_fails_without_platform(self, mock_git_repo: Path) -> None: - """Test that install fails when no platform is detected.""" + def test_install_defaults_to_claude_when_no_platform(self, mock_git_repo: Path) -> None: + """Test that install defaults to Claude Code when no platform is detected.""" runner = CliRunner() - result = runner.invoke(cli, ["install", "--path", str(mock_git_repo)]) + result = runner.invoke( + cli, ["install", "--path", str(mock_git_repo)], catch_exceptions=False + ) - assert result.exit_code != 0 - assert "No AI platform detected" in result.output + assert result.exit_code == 0 + assert "No AI platform detected, defaulting to Claude Code" in result.output + assert "Created .claude/" in result.output + assert "DeepWork installed successfully for Claude Code" in result.output + + # Verify .claude directory was created + claude_dir = mock_git_repo / ".claude" + assert claude_dir.exists() + + # Verify config.yml has Claude + config_file = mock_git_repo / ".deepwork" / "config.yml" + config = load_yaml(config_file) + assert config is not None + assert "claude" in config["platforms"] + + # Verify skills were created for Claude + skills_dir = claude_dir / "skills" + assert (skills_dir / "deepwork_jobs" / "SKILL.md").exists() def test_install_with_multiple_platforms_auto_detect( self, mock_multi_platform_project: Path