Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 19 additions & 15 deletions src/deepwork/cli/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -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...")
Expand Down
28 changes: 23 additions & 5 deletions tests/integration/test_install_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading