"""Transport for the `generate` domain — args in, delegate, format out.""" from __future__ import annotations import typer from tooling.core import cli, console, process from tooling.core.command import command from tooling.domains.generate import character_manifest, corp_stubs app = cli.domain("generate", "Content generators — brands, corporations, manifests.") @app.callback() def _domain() -> None: """Keeps `generate` a group (Typer collapses a single-command app).""" @app.command("brands") @command def brands(args: list[str] = typer.Argument(None, help="Passed to the binary.")) -> None: """Refresh wiki/economics/corporations/generated_brands.toml. Note this is also a SUBROUTINE of import_economics rather than only a standalone verb: `make regen-db` shells out to the same binary as its first step, which is why changes to its Rust source invalidate the systems.db stamp even though no Python changed (.claude/rules/asset-pipeline.md). """ output = process.cargo_binary("generate_brands", *(args or [])) if output.strip(): console.out(output.rstrip()) @app.command("corporations") @command def corporations( args: list[str] = typer.Argument(None, help="Passed to the binary."), ) -> None: """Generate corporation records.""" output = process.cargo_binary("generate_corporations", *(args or [])) if output.strip(): console.out(output.rstrip()) @app.command("character-manifest") @command def manifest() -> None: """Regenerate assets/characters/manifest.json from the asset directories.""" character_manifest.run() @app.command("corp-stubs") @command def stubs( dry_run: bool = typer.Option(False, "--dry-run", help="Report without writing."), ) -> None: """Write wiki stub pages for corporations that lack one.""" corp_stubs.run(dry_run=dry_run)