diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ddd4edb..f8ba5259 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,7 @@ PyPI version — not the changelog header. `@cli` `success()/error()/warning()` helpers instead of raw `console.print` markup. Owners self-audited and self-fixed their own branches; devpulse verified each diff + re-ran each audit and committed per wave. Landed so far: spawn, - drone, flow, daemon, prax, ai_mail, backup, seedgo, memory, trigger, api. + drone, flow, daemon, prax, ai_mail, backup, seedgo, memory, trigger, api, cli. Remaining waves following. ### Fixed diff --git a/src/aipass/cli/apps/cli.py b/src/aipass/cli/apps/cli.py index 57c39e4f..d02d428d 100755 --- a/src/aipass/cli/apps/cli.py +++ b/src/aipass/cli/apps/cli.py @@ -282,6 +282,13 @@ def main() -> int: command = args[0] remaining = args[1:] if len(args) > 1 else [] + if remaining and remaining[0] in ["--help", "-h"]: + for module in modules: + if module.handle_command(command, ["--help"]): + return 0 + print_help() + return 0 + # Route to modules if route_command(command, remaining, modules): return 0 diff --git a/src/aipass/cli/apps/modules/display.py b/src/aipass/cli/apps/modules/display.py index cc7cde91..733f4d33 100755 --- a/src/aipass/cli/apps/modules/display.py +++ b/src/aipass/cli/apps/modules/display.py @@ -28,6 +28,7 @@ from typing import Dict, Any, Optional, List from rich.console import Console from rich.panel import Panel from rich.table import Table +from rich.text import Text from rich.columns import Columns from aipass.cli.apps.handlers.json import json_handler @@ -372,9 +373,13 @@ def error(message: str, suggestion: str | None = None) -> None: error('Branch not found', suggestion='Check branch name spelling') """ mark_command_failed() - err_console.print(f"❌ [red bold]{message}[/red bold]") + msg = Text("❌ ") + msg.append(message, style="red bold") + err_console.print(msg) if suggestion: - err_console.print(f" [yellow]→ Try: {suggestion}[/yellow]") + hint = Text(" → Try: ") + hint.append(suggestion, style="yellow") + err_console.print(hint) def warning(message: str, details: str | None = None) -> None: @@ -388,9 +393,13 @@ def warning(message: str, details: str | None = None) -> None: Example: warning('Branch already exists, skipping') """ - err_console.print(f"⚠️ [yellow]{message}[/yellow]") + msg = Text("⚠️ ") + msg.append(message, style="yellow") + err_console.print(msg) if details: - err_console.print(f" [dim]{details}[/dim]") + detail_text = Text(" ") + detail_text.append(details, style="dim") + err_console.print(detail_text) def fatal(message: str, suggestion: str | None = None) -> None: @@ -406,9 +415,13 @@ def fatal(message: str, suggestion: str | None = None) -> None: Example: fatal('Config file missing', suggestion='Run aipass init first') """ - err_console.print(f"❌ [red bold]{message}[/red bold]") + msg = Text("❌ ") + msg.append(message, style="red bold") + err_console.print(msg) if suggestion: - err_console.print(f" [yellow]→ Try: {suggestion}[/yellow]") + hint = Text(" → Try: ") + hint.append(suggestion, style="yellow") + err_console.print(hint) sys.exit(1)