Skip to content
Open
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
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -198,13 +198,14 @@ python -m webwright.run.cli \

### 🚩 Flags

| Flag | Description |
|------|-------------|
| Flag / Command | Description |
|----------------|-------------|
| `-c` | Config file(s) from `src/webwright/config/` (stackable). |
| `-t` | Task instruction. |
| `--start-url` | Initial page. |
| `--task-id` | Output subfolder name. |
| `-o` | Output directory. |
| `list-configs` | Print all available built-in config file names (`python -m webwright.run.cli list-configs`). |
Comment on lines +201 to +208

---

Expand Down
27 changes: 22 additions & 5 deletions src/webwright/run/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from rich.console import Console

from webwright.agents import get_agent
from webwright.config import get_config_from_spec, snapshot_config_specs
from webwright.config import builtin_config_dir, get_config_from_spec, snapshot_config_specs
from webwright.environments import get_environment
from webwright.models import get_model
from webwright.utils.serialize import UNSET, recursive_merge
Expand All @@ -17,7 +17,7 @@

DEFAULT_CONFIGS = ["base.yaml", "model_openai.yaml"]

app = typer.Typer(no_args_is_help=True)
app = typer.Typer()
console = Console(highlight=False)


Expand Down Expand Up @@ -134,10 +134,22 @@ def run_one(
return result


@app.command()
@app.command("list-configs")
def list_configs() -> None:
"""List all available built-in config files."""
configs = sorted(builtin_config_dir.glob("*.yaml"))
if not configs:
console.print("No config files found.")
return
for path in configs:
console.print(path.name)
Comment on lines +137 to +145


@app.callback(invoke_without_command=True)
def main(
task: str = typer.Option(
..., "-t", "--task", help="Natural language task description."
ctx: typer.Context,
task: str | None = typer.Option(
None, "-t", "--task", help="Natural language task description."
),
task_id: str | None = typer.Option(
None, "--task-id", help="Optional identifier used in the output directory name."
Expand All @@ -153,6 +165,11 @@ def main(
help="Launch headed local Playwright with devtools and keep it open for inspection.",
),
) -> Any:
if ctx.invoked_subcommand is not None:
return
if task is None:
console.print(ctx.get_help())
raise typer.Exit()
return run_one(
task=task,
task_id=task_id,
Expand Down