Check that all required tools are installed.
()
| 380 | |
| 381 | @app.command() |
| 382 | def check(): |
| 383 | """Check that all required tools are installed.""" |
| 384 | show_banner() |
| 385 | console.print("[bold]Checking for installed tools...[/bold]\n") |
| 386 | |
| 387 | tracker = StepTracker("Check Available Tools") |
| 388 | |
| 389 | agent_results = {} |
| 390 | for agent_key, agent_config in AGENT_CONFIG.items(): |
| 391 | if agent_key == "generic": |
| 392 | continue # Generic is not a real agent to check |
| 393 | agent_name = agent_config["name"] |
| 394 | requires_cli = agent_config["requires_cli"] |
| 395 | |
| 396 | tracker.add(agent_key, agent_name) |
| 397 | |
| 398 | if requires_cli: |
| 399 | agent_results[agent_key] = check_tool(agent_key, tracker=tracker) |
| 400 | else: |
| 401 | # IDE-based agent - skip CLI check and mark as optional |
| 402 | tracker.skip(agent_key, "IDE-based, no CLI check") |
| 403 | agent_results[agent_key] = False # Don't count IDE agents as "found" |
| 404 | |
| 405 | # Check VS Code variants (not in agent config) |
| 406 | tracker.add("code", "Visual Studio Code") |
| 407 | check_tool("code", tracker=tracker) |
| 408 | |
| 409 | tracker.add("code-insiders", "Visual Studio Code Insiders") |
| 410 | check_tool("code-insiders", tracker=tracker) |
| 411 | |
| 412 | console.print(tracker.render()) |
| 413 | |
| 414 | console.print("\n[bold green]Specify CLI is ready to use![/bold green]") |
| 415 | |
| 416 | if not any(agent_results.values()): |
| 417 | console.print("[dim]Tip: Install a coding agent for the best experience[/dim]") |
| 418 | |
| 419 | console.print("[dim]Tip: Run 'specify self check' to verify you have the latest CLI version[/dim]") |
| 420 | |
| 421 | |
| 422 | def _feature_capabilities() -> dict[str, bool]: |