Skip to content

Commit 14ac43b

Browse files
committed
Update error messages
1 parent 0857f83 commit 14ac43b

File tree

3 files changed

+40
-18
lines changed

3 files changed

+40
-18
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ All notable changes to the Specify CLI will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.0.14] - 2025-09-21
9+
10+
### Changed
11+
12+
- Error messages are now shown consistently.
13+
814
## [0.0.13] - 2025-09-21
915

1016
### Added

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "specify-cli"
3-
version = "0.0.13"
3+
version = "0.0.14"
44
description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)."
55
requires-python = ">=3.11"
66
dependencies = [

src/specify_cli/__init__.py

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -382,8 +382,6 @@ def check_tool(tool: str, install_hint: str) -> bool:
382382
if shutil.which(tool):
383383
return True
384384
else:
385-
console.print(f"[yellow]⚠️ {tool} not found[/yellow]")
386-
console.print(f" Install with: [cyan]{install_hint}[/cyan]")
387385
return False
388386

389387

@@ -817,7 +815,15 @@ def init(
817815
project_path = Path(project_name).resolve()
818816
# Check if project directory already exists
819817
if project_path.exists():
820-
console.print(f"[red]Error:[/red] Directory '{project_name}' already exists")
818+
error_panel = Panel(
819+
f"Directory '[cyan]{project_name}[/cyan]' already exists\n"
820+
"Please choose a different project name or remove the existing directory.",
821+
title="[red]Directory Conflict[/red]",
822+
border_style="red",
823+
padding=(1, 2)
824+
)
825+
console.print()
826+
console.print(error_panel)
821827
raise typer.Exit(1)
822828

823829
# Create formatted setup info with column alignment
@@ -861,35 +867,45 @@ def init(
861867
# Check agent tools unless ignored
862868
if not ignore_agent_tools:
863869
agent_tool_missing = False
870+
install_url = ""
864871
if selected_ai == "claude":
865-
if not check_tool("claude", "Install from: https://docs.anthropic.com/en/docs/claude-code/setup"):
866-
console.print("[red]Error:[/red] Claude CLI is required for Claude Code projects")
872+
if not check_tool("claude", "https://docs.anthropic.com/en/docs/claude-code/setup"):
873+
install_url = "https://docs.anthropic.com/en/docs/claude-code/setup"
867874
agent_tool_missing = True
868875
elif selected_ai == "gemini":
869-
if not check_tool("gemini", "Install from: https://github.com/google-gemini/gemini-cli"):
870-
console.print("[red]Error:[/red] Gemini CLI is required for Gemini projects")
876+
if not check_tool("gemini", "https://github.com/google-gemini/gemini-cli"):
877+
install_url = "https://github.com/google-gemini/gemini-cli"
871878
agent_tool_missing = True
872879
elif selected_ai == "qwen":
873-
if not check_tool("qwen", "Install from: https://github.com/QwenLM/qwen-code"):
874-
console.print("[red]Error:[/red] Qwen CLI is required for Qwen Code projects")
880+
if not check_tool("qwen", "https://github.com/QwenLM/qwen-code"):
881+
install_url = "https://github.com/QwenLM/qwen-code"
875882
agent_tool_missing = True
876883
elif selected_ai == "opencode":
877-
if not check_tool("opencode", "Install from: https://opencode.ai"):
878-
console.print("[red]Error:[/red] opencode CLI is required for opencode projects")
884+
if not check_tool("opencode", "https://opencode.ai"):
885+
install_url = "https://opencode.ai"
879886
agent_tool_missing = True
880887
elif selected_ai == "codex":
881-
if not check_tool("codex", "Install from: https://github.com/openai/codex"):
882-
console.print("[red]Error:[/red] Codex CLI is required for Codex projects")
888+
if not check_tool("codex", "https://github.com/openai/codex"):
889+
install_url = "https://github.com/openai/codex"
883890
agent_tool_missing = True
884891
elif selected_ai == "auggie":
885-
if not check_tool("auggie", "Install from: https://docs.augmentcode.com/cli/setup-auggie/install-auggie-cli"):
886-
console.print("[red]Error:[/red] Auggie CLI is required for Auggie CLI projects")
892+
if not check_tool("auggie", "https://docs.augmentcode.com/cli/setup-auggie/install-auggie-cli"):
893+
install_url = "https://docs.augmentcode.com/cli/setup-auggie/install-auggie-cli"
887894
agent_tool_missing = True
888895
# GitHub Copilot and Cursor checks are not needed as they're typically available in supported IDEs
889896

890897
if agent_tool_missing:
891-
console.print("\n[red]Required AI tool is missing![/red]")
892-
console.print("[yellow]Tip:[/yellow] Use --ignore-agent-tools to skip this check")
898+
error_panel = Panel(
899+
f"[cyan]{selected_ai}[/cyan] not found\n"
900+
f"Install with: [cyan]{install_url}[/cyan]\n"
901+
f"{AI_CHOICES[selected_ai]} is required to continue with this project type.\n\n"
902+
"Tip: Use [cyan]--ignore-agent-tools[/cyan] to skip this check",
903+
title="[red]Agent Detection Error[/red]",
904+
border_style="red",
905+
padding=(1, 2)
906+
)
907+
console.print()
908+
console.print(error_panel)
893909
raise typer.Exit(1)
894910

895911
# Determine script type (explicit, interactive, or OS default)

0 commit comments

Comments
 (0)