diff --git a/CHANGELOG.md b/CHANGELOG.md index 495b0b8f..2700b137 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,10 @@ PyPI version — not the changelog header. 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, cli, - aipass. Remaining: commons. + aipass, commons — all 14 offenders now at 100%. **Fleet: 17/17 branches at + 100% seedgo compliance** (hooks, skills, devpulse were already compliant). + Owners self-audited and self-fixed; devpulse verified every diff, re-ran each + branch's full test suite, and committed per wave. ### Fixed diff --git a/src/aipass/commons/apps/commons.py b/src/aipass/commons/apps/commons.py index 1c4ec40f..984e3660 100644 --- a/src/aipass/commons/apps/commons.py +++ b/src/aipass/commons/apps/commons.py @@ -292,7 +292,7 @@ def print_introspection(modules: List[Any]) -> None: console.print("[dim]A gathering place where branches post, comment, vote, and discuss.[/dim]") console.print() - console.print(f"[yellow]Discovered Modules:[/yellow] {len(modules)}") + warning(f"Discovered Modules: {len(modules)}") console.print() if modules: diff --git a/src/aipass/commons/apps/modules/activity.py b/src/aipass/commons/apps/modules/activity.py index cb1619ff..bd8e7185 100644 --- a/src/aipass/commons/apps/modules/activity.py +++ b/src/aipass/commons/apps/modules/activity.py @@ -20,12 +20,13 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error except ImportError: logger.warning("[activity] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] from rich.table import Table @@ -81,7 +82,7 @@ def _handle_activity(args: List[str]) -> bool: if not result["success"]: if result.get("error"): - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True if result.get("help"): diff --git a/src/aipass/commons/apps/modules/artifact.py b/src/aipass/commons/apps/modules/artifact.py index 271d2e6f..b51c2993 100644 --- a/src/aipass/commons/apps/modules/artifact.py +++ b/src/aipass/commons/apps/modules/artifact.py @@ -20,12 +20,15 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success, warning except ImportError: logger.warning("[artifact] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] + warning = console.print # type: ignore[assignment] from rich.panel import Panel from rich.table import Table @@ -96,12 +99,12 @@ def handle_command(command: str, args: List[str]) -> bool: def _handle_craft(args: List[str]) -> bool: result = craft_artifact(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True rarity_color = RARITY_COLORS.get(result["rarity"], "white") console.print() - console.print("[green]Artifact crafted![/green]") + success("Artifact crafted!") console.print(f" [dim]ID:[/dim] {result['artifact_id']}") console.print(f" [dim]Name:[/dim] {result['name']}") console.print(f" [dim]Type:[/dim] {result['type']}") @@ -115,7 +118,7 @@ def _handle_craft(args: List[str]) -> bool: def _handle_list(args: List[str]) -> bool: result = list_artifacts(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True artifacts = result["artifacts"] @@ -155,7 +158,7 @@ def _handle_list(args: List[str]) -> bool: def _handle_inspect(args: List[str]) -> bool: result = inspect_artifact(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True artifact = result["artifact"] @@ -212,7 +215,7 @@ def _handle_inspect(args: List[str]) -> bool: elif action == "found": console.print(f" [yellow]*[/yellow] {timestamp[:19]} | Found by {to_agent}") elif action == "expired": - console.print(f" [red]x[/red] {timestamp[:19]} | Expired: {entry.get('details', '')}") + console.print(f" [dim]x[/dim] {timestamp[:19]} | Expired: {entry.get('details', '')}") else: console.print(f" [dim]-[/dim] {timestamp[:19]} | {action.title()}: {entry.get('details', '')}") @@ -228,15 +231,15 @@ def _handle_inspect(args: List[str]) -> bool: def _handle_collab(args: List[str]) -> bool: result = collab_artifact(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True - for warning in result.get("warnings", []): - console.print(f"[yellow]Warning: {warning}[/yellow]") + for warn_msg in result.get("warnings", []): + warning(f"Warning: {warn_msg}") rarity_color = RARITY_COLORS.get(result["rarity"], "white") console.print() - console.print("[green]Joint artifact initiated![/green]") + success("Joint artifact initiated!") console.print(f" [dim]Pending ID:[/dim] {result['pending_id']}") console.print(f" [dim]Name:[/dim] {result['name']}") console.print(f" [dim]Rarity:[/dim] [{rarity_color}]{result['rarity']}[/{rarity_color}]") @@ -252,13 +255,13 @@ def _handle_collab(args: List[str]) -> bool: def _handle_sign(args: List[str]) -> bool: result = sign_artifact(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True if result["completed"]: rarity_color = RARITY_COLORS.get(result["rarity"], "white") console.print() - console.print("[bold green]Joint artifact completed![/bold green]") + success("Joint artifact completed!") console.print(f" [dim]Artifact ID:[/dim] {result['artifact_id']}") console.print(f" [dim]Name:[/dim] [{rarity_color}]{result['name']}[/{rarity_color}]") console.print(f" [dim]Rarity:[/dim] [{rarity_color}]{result['rarity']}[/{rarity_color}]") diff --git a/src/aipass/commons/apps/modules/capsule.py b/src/aipass/commons/apps/modules/capsule.py index d913e288..bfb52ecd 100644 --- a/src/aipass/commons/apps/modules/capsule.py +++ b/src/aipass/commons/apps/modules/capsule.py @@ -20,12 +20,13 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error except ImportError: logger.warning("[capsule] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] from rich.panel import Panel from rich.table import Table @@ -84,7 +85,7 @@ def handle_command(command: str, args: List[str]) -> bool: def _handle_seal(args: List[str]) -> bool: result = seal_capsule(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True console.print() @@ -109,7 +110,7 @@ def _handle_seal(args: List[str]) -> bool: def _handle_list(args: List[str]) -> bool: result = list_capsules(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True capsules = result["capsules"] @@ -152,7 +153,7 @@ def _handle_list(args: List[str]) -> bool: def _handle_open(args: List[str]) -> bool: result = open_capsule(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True capsule = result["capsule"] diff --git a/src/aipass/commons/apps/modules/catchup.py b/src/aipass/commons/apps/modules/catchup.py index d7244ad4..5a83f0c5 100644 --- a/src/aipass/commons/apps/modules/catchup.py +++ b/src/aipass/commons/apps/modules/catchup.py @@ -20,12 +20,13 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error except ImportError: logger.warning("[catchup] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] from aipass.commons.apps.handlers.catchup.catchup_ops import run_catchup from aipass.commons.apps.handlers.json import json_handler @@ -75,7 +76,7 @@ def _handle_catchup(args: List[str]) -> bool: result = run_catchup(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True is_first_visit = result["is_first_visit"] @@ -139,7 +140,7 @@ def _handle_catchup(args: List[str]) -> bool: if karma_change > 0: console.print(f" [green]KARMA:[/green] +{karma_change} since last session") elif karma_change < 0: - console.print(f" [red]KARMA:[/red] {karma_change} since last session") + error(f"KARMA: {karma_change} since last session") else: console.print(" [dim]KARMA:[/dim] [dim]No change[/dim]") diff --git a/src/aipass/commons/apps/modules/central.py b/src/aipass/commons/apps/modules/central.py index 3ebfc366..a4efce44 100644 --- a/src/aipass/commons/apps/modules/central.py +++ b/src/aipass/commons/apps/modules/central.py @@ -21,12 +21,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success except ImportError: logger.warning("[central] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] from aipass.commons.apps.handlers.central.central_writer import update_central from aipass.commons.apps.handlers.json import json_handler @@ -74,10 +76,10 @@ def handle_command(command: str, args: List[str]) -> bool: try: stats = update_central() branch_count = len(stats.get("branch_stats", {})) - console.print(f"[green]Central file updated:[/green] {branch_count} branches") + success(f"Central file updated: {branch_count} branches") json_handler.log_operation("push-central_executed", {"command": "push-central", "success": True}) return True except Exception as e: logger.error(f"[commons] push-central failed: {e}") - console.print(f"[red]Error:[/red] {e}") + error(f"Error: {e}") return True diff --git a/src/aipass/commons/apps/modules/comment.py b/src/aipass/commons/apps/modules/comment.py index 10525845..1299dcc8 100644 --- a/src/aipass/commons/apps/modules/comment.py +++ b/src/aipass/commons/apps/modules/comment.py @@ -20,12 +20,15 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success except ImportError: logger.warning("[comment] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] + from aipass.commons.apps.handlers.comments.comment_ops import add_comment, vote_on_content from aipass.commons.apps.handlers.identity.identity_ops import resolve_display_name @@ -85,12 +88,12 @@ def _handle_comment(args: List[str]) -> bool: result = add_comment(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True parent_note = f" (reply to comment {result['parent_id']})" if result.get("parent_id") else "" console.print() - console.print(f"[green]Comment added to post {result['post_id']}{parent_note}[/green]") + success(f"Comment added to post {result['post_id']}{parent_note}") console.print(f" [dim]Comment ID:[/dim] {result['comment_id']}") console.print(f" [dim]Author:[/dim] {resolve_display_name(result['author'])}") if result.get("mentions"): @@ -105,7 +108,7 @@ def _handle_vote(args: List[str]) -> bool: result = vote_on_content(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True action_msg = { @@ -117,10 +120,7 @@ def _handle_vote(args: List[str]) -> bool: arrow = "^" if result["direction"] == "up" else "v" console.print() - console.print( - f"[green]{arrow} {action_msg} on {result['target_type']} " - f"{result['target_id']}[/green] [dim](score: {result['new_score']})[/dim]" - ) + success(f"{arrow} {action_msg} on {result['target_type']} {result['target_id']} (score: {result['new_score']})") console.print() return True diff --git a/src/aipass/commons/apps/modules/commons_identity.py b/src/aipass/commons/apps/modules/commons_identity.py index a3e6f2d5..92fa338d 100644 --- a/src/aipass/commons/apps/modules/commons_identity.py +++ b/src/aipass/commons/apps/modules/commons_identity.py @@ -23,22 +23,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console - from aipass.cli.apps.modules.display import error, warning + from aipass.cli.apps.modules import console, error, warning except ImportError: logger.warning("[commons_identity] CLI console unavailable, using fallback") from rich.console import Console console = Console() - - def error(message: str, suggestion: str | None = None) -> None: - """Display error message in red.""" - console.print(f"[red]{message}[/red]") - - def warning(message: str, details: str | None = None) -> None: - """Display warning message in yellow.""" - console.print(f"[yellow]{message}[/yellow]") - + error = console.print # type: ignore[assignment] + warning = console.print # type: ignore[assignment] # Re-export all public functions for backward compatibility from aipass.commons.apps.handlers.identity.identity_ops import ( @@ -133,5 +125,5 @@ def _handle_whoami(args: List[str]) -> bool: except Exception as e: logger.error(f"[commons.identity] whoami failed: {e}") - console.print(f"[red]Error detecting identity:[/red] {e}") + error(f"Error detecting identity: {e}") return True diff --git a/src/aipass/commons/apps/modules/digest.py b/src/aipass/commons/apps/modules/digest.py index aca2d96d..4dbb7c90 100644 --- a/src/aipass/commons/apps/modules/digest.py +++ b/src/aipass/commons/apps/modules/digest.py @@ -20,12 +20,13 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error except ImportError: logger.warning("[digest] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] from rich.panel import Panel @@ -79,7 +80,7 @@ def _handle_digest(args: List[str]) -> bool: result = show_digest(args) if not result["success"]: - console.print(f"[red]Failed to generate digest: {result['error']}[/red]") + error(f"Failed to generate digest: {result['error']}") return True top_posts = result["top_posts"] diff --git a/src/aipass/commons/apps/modules/engagement.py b/src/aipass/commons/apps/modules/engagement.py index 5db7523c..d01ec7b1 100644 --- a/src/aipass/commons/apps/modules/engagement.py +++ b/src/aipass/commons/apps/modules/engagement.py @@ -21,12 +21,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success except ImportError: logger.warning("[engagement] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] from aipass.commons.apps.handlers.engagement.engagement_ops import generate_prompt, create_event from aipass.commons.apps.handlers.json import json_handler @@ -88,7 +90,7 @@ def _handle_prompt(args: List[str]) -> bool: result = generate_prompt(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True if result.get("dry_run"): @@ -100,7 +102,7 @@ def _handle_prompt(args: List[str]) -> bool: return True console.print() - console.print("[green]Daily prompt posted![/green]") + success("Daily prompt posted!") console.print(f" [dim]ID:[/dim] {result['post_id']}") console.print(f" [dim]Room:[/dim] r/{result['room']}") console.print(f" [dim]Theme:[/dim] {result['theme']}") @@ -115,7 +117,7 @@ def _handle_event(args: List[str]) -> bool: result = create_event(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True if result.get("dry_run"): @@ -127,7 +129,7 @@ def _handle_event(args: List[str]) -> bool: return True console.print() - console.print("[green]Event created![/green]") + success("Event created!") console.print(f" [dim]ID:[/dim] {result['post_id']}") console.print(f" [dim]Room:[/dim] r/{result['room']}") console.print(f" [dim]Title:[/dim] {result['title']}") diff --git a/src/aipass/commons/apps/modules/explore.py b/src/aipass/commons/apps/modules/explore.py index a0ced7e1..bd4aefed 100644 --- a/src/aipass/commons/apps/modules/explore.py +++ b/src/aipass/commons/apps/modules/explore.py @@ -20,12 +20,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success except ImportError: logger.warning("[explore] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] from rich.panel import Panel from rich.table import Table @@ -77,7 +79,7 @@ def handle_command(command: str, args: List[str]) -> bool: def _handle_explore(args: List[str]) -> bool: result = explore_rooms(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True hidden_rooms = result["hidden_rooms"] @@ -108,8 +110,8 @@ def _handle_explore(args: List[str]) -> bool: revealed = result.get("revealed") if revealed: - console.print(f"[green]Your exploration has paid off! You've visited {rooms_visited} rooms.[/green]") - console.print(f"[green]A secret room reveals itself:[/green] [bold magenta]r/{revealed['name']}[/bold magenta]") + success(f"Your exploration has paid off! You've visited {rooms_visited} rooms.") + success(f"A secret room reveals itself: r/{revealed['name']}") console.print(f" [dim]{revealed['description']}[/dim]") console.print() console.print(f"[dim]Try: commons enter {revealed['name']}[/dim]") @@ -126,7 +128,7 @@ def _handle_explore(args: List[str]) -> bool: def _handle_secrets(args: List[str]) -> bool: result = list_secrets(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True discovered = result["discovered"] diff --git a/src/aipass/commons/apps/modules/feed.py b/src/aipass/commons/apps/modules/feed.py index 1c36d404..53e4771b 100644 --- a/src/aipass/commons/apps/modules/feed.py +++ b/src/aipass/commons/apps/modules/feed.py @@ -20,12 +20,13 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error except ImportError: logger.warning("[feed] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] from rich.table import Table @@ -81,7 +82,7 @@ def _handle_feed(args: List[str]) -> bool: result = display_feed(args) if not result["success"]: - console.print(f"[red]Feed error: {result['error']}[/red]") + error(f"Feed error: {result['error']}") return True posts = result["posts"] diff --git a/src/aipass/commons/apps/modules/leaderboard.py b/src/aipass/commons/apps/modules/leaderboard.py index fdb4a23e..466dd014 100644 --- a/src/aipass/commons/apps/modules/leaderboard.py +++ b/src/aipass/commons/apps/modules/leaderboard.py @@ -20,12 +20,13 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error except ImportError: logger.warning("[leaderboard] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] from rich.table import Table @@ -94,7 +95,7 @@ def _handle_leaderboard(args: List[str]) -> bool: result = show_leaderboard(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True boards = result["boards"] diff --git a/src/aipass/commons/apps/modules/notification.py b/src/aipass/commons/apps/modules/notification.py index c5611ae3..6a754624 100644 --- a/src/aipass/commons/apps/modules/notification.py +++ b/src/aipass/commons/apps/modules/notification.py @@ -21,12 +21,13 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error except ImportError: logger.warning("[notification] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] from aipass.commons.apps.handlers.notifications.notification_ops import ( set_watch, @@ -110,7 +111,7 @@ LEVEL_LABELS = { def _handle_level(result: dict, level: str) -> bool: """Display the result of setting a notification level.""" if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True label, color, description = LEVEL_LABELS[level] @@ -127,7 +128,7 @@ def _handle_preferences(args: List[str]) -> bool: result = show_preferences(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True prefs = result["preferences"] diff --git a/src/aipass/commons/apps/modules/post.py b/src/aipass/commons/apps/modules/post.py index 310e127d..56bbce7d 100644 --- a/src/aipass/commons/apps/modules/post.py +++ b/src/aipass/commons/apps/modules/post.py @@ -20,12 +20,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success except ImportError: logger.warning("[post] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] from rich.panel import Panel from rich.text import Text @@ -91,11 +93,11 @@ def _handle_create_post(args: List[str]) -> bool: result = create_post(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True console.print() - console.print(f"[green]Post created in r/{result['room']}[/green]") + success(f"Post created in r/{result['room']}") console.print(f" [dim]ID:[/dim] {result['post_id']}") console.print(f" [dim]Title:[/dim] {result['title']}") console.print(f" [dim]Type:[/dim] {result['post_type']}") @@ -112,7 +114,7 @@ def _handle_view_thread(args: List[str]) -> bool: result = view_thread(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True post = result["post"] @@ -187,8 +189,8 @@ def _handle_delete_post(args: List[str]) -> bool: result = delete_post(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True - console.print(f"[green]Post {result['post_id']} deleted.[/green]") + success(f"Post {result['post_id']} deleted.") return True diff --git a/src/aipass/commons/apps/modules/profile.py b/src/aipass/commons/apps/modules/profile.py index bfa2f1c8..76eeee1e 100644 --- a/src/aipass/commons/apps/modules/profile.py +++ b/src/aipass/commons/apps/modules/profile.py @@ -21,12 +21,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success except ImportError: logger.warning("[profile] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] from rich.panel import Panel @@ -85,11 +87,11 @@ def _handle_profile(args: List[str]) -> bool: result = show_profile(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True if result["action"] == "set": - console.print(f"[green]Updated {result['field']} for {result['branch']}[/green]") + success(f"Updated {result['field']} for {result['branch']}") return True # View profile @@ -128,7 +130,7 @@ def _handle_who(args: List[str]) -> bool: result = list_members(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True agents = result["agents"] diff --git a/src/aipass/commons/apps/modules/reaction.py b/src/aipass/commons/apps/modules/reaction.py index afb4ebf6..06893f42 100644 --- a/src/aipass/commons/apps/modules/reaction.py +++ b/src/aipass/commons/apps/modules/reaction.py @@ -21,12 +21,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success except ImportError: logger.warning("[reaction] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] from aipass.commons.apps.handlers.curation.curation_ops import ( add_react, @@ -127,7 +129,7 @@ def _handle_react(args: List[str]) -> bool: result = add_react(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True emoji = result["emoji"] @@ -151,7 +153,7 @@ def _handle_unreact(args: List[str]) -> bool: result = remove_react(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True emoji = result["emoji"] @@ -174,7 +176,7 @@ def _handle_reactions(args: List[str]) -> bool: result = show_reactions(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True detailed = result["reactions"] @@ -200,11 +202,11 @@ def _handle_pin(args: List[str]) -> bool: result = pin_post_cmd(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True console.print() - console.print(f'[green]Pinned post #{result["post_id"]} "{result["title"]}"[/green]') + success(f'Pinned post #{result["post_id"]} "{result["title"]}"') console.print() return True @@ -215,11 +217,11 @@ def _handle_unpin(args: List[str]) -> bool: result = unpin_post_cmd(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True console.print() - console.print(f'[green]Unpinned post #{result["post_id"]} "{result["title"]}"[/green]') + success(f'Unpinned post #{result["post_id"]} "{result["title"]}"') console.print() return True @@ -230,7 +232,7 @@ def _handle_pinned(args: List[str]) -> bool: result = show_pinned(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True posts = result["posts"] @@ -260,7 +262,7 @@ def _handle_trending(args: List[str]) -> bool: result = show_trending(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True posts = result["posts"] diff --git a/src/aipass/commons/apps/modules/room.py b/src/aipass/commons/apps/modules/room.py index e1c67e32..a2a5ee66 100644 --- a/src/aipass/commons/apps/modules/room.py +++ b/src/aipass/commons/apps/modules/room.py @@ -20,12 +20,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success except ImportError: logger.warning("[room] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] from rich.table import Table @@ -82,7 +84,7 @@ def handle_command(command: str, args: List[str]) -> bool: elif subcommand == "leave": result = _handle_leave_room(sub_args) else: - console.print(f"[red]Unknown room subcommand: {subcommand}[/red]") + error(f"Unknown room subcommand: {subcommand}") console.print("[dim]Available: create, list, join, leave[/dim]") return True @@ -101,11 +103,11 @@ def _handle_create_room(args: List[str]) -> bool: result = create_room(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True console.print() - console.print(f"[green]Room '{result['name']}' created![/green]") + success(f"Room '{result['name']}' created!") if result.get("description"): console.print(f" [dim]Description:[/dim] {result['description']}") console.print(f" [dim]Created by:[/dim] {result['created_by']}") @@ -119,7 +121,7 @@ def _handle_list_rooms(args: List[str]) -> bool: result = list_rooms(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True rooms = result["rooms"] @@ -158,11 +160,11 @@ def _handle_join_room(args: List[str]) -> bool: result = join_room(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True console.print() - console.print(f"[green]{result['agent']} joined room '{result['room']}'![/green]") + success(f"{result['agent']} joined room '{result['room']}'!") console.print() return True @@ -173,11 +175,11 @@ def _handle_leave_room(args: List[str]) -> bool: result = leave_room(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True console.print() - console.print(f"[green]{result['agent']} left room '{result['room']}'.[/green]") + success(f"{result['agent']} left room '{result['room']}'.") console.print() return True diff --git a/src/aipass/commons/apps/modules/search.py b/src/aipass/commons/apps/modules/search.py index 9bb9bda4..7cbcc3c5 100644 --- a/src/aipass/commons/apps/modules/search.py +++ b/src/aipass/commons/apps/modules/search.py @@ -20,12 +20,13 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error except ImportError: logger.warning("[search] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] from aipass.commons.apps.handlers.search.search_ops import run_search, run_log_export from aipass.commons.apps.handlers.json import json_handler @@ -82,7 +83,7 @@ def _handle_search(args: List[str]) -> bool: result = run_search(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True posts = result["posts"] @@ -137,7 +138,7 @@ def _handle_log(args: List[str]) -> bool: result = run_log_export(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True console.print() diff --git a/src/aipass/commons/apps/modules/space.py b/src/aipass/commons/apps/modules/space.py index 12a29e0f..fd55da3b 100644 --- a/src/aipass/commons/apps/modules/space.py +++ b/src/aipass/commons/apps/modules/space.py @@ -20,22 +20,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, success except ImportError: logger.warning("[space] CLI console unavailable, using fallback") from rich.console import Console console = Console() - -try: - from aipass.cli.apps.modules.display import error -except ImportError: - logger.warning("[space] CLI error function unavailable, using fallback") - - def error(message, suggestion=None): - """Display error message in red.""" - console.print(f"[red]{message}[/red]") # type: ignore[assignment] - + error = console.print # type: ignore[assignment] + success = console.print # type: ignore[assignment] from rich.panel import Panel @@ -146,18 +138,18 @@ def handle_command(command: str, args: List[str]) -> bool: def _cmd_enter(args: List[str]) -> bool: """Enter a room -- render entrance panel with mood, flavor, decorations.""" if not args: - console.print("[red]Usage: commons enter [/red]") + error("Usage: commons enter ") return True room_name = args[0].lower() data = get_room_enter_data(room_name) if data.get("error"): - console.print(f"[red]{data['error']}[/red]") + error(data["error"]) return True if not data["found"]: - console.print(f"[red]Room '{room_name}' not found[/red]") + error(f"Room '{room_name}' not found") return True room = data["room"] @@ -220,11 +212,11 @@ def _cmd_look(args: List[str]) -> bool: data = get_room_look_data(room_name) if data.get("error"): - console.print(f"[red]{data['error']}[/red]") + error(data["error"]) return True if not data["found"]: - console.print(f"[red]Room '{room_name}' not found[/red]") + error(f"Room '{room_name}' not found") return True room = data["room"] @@ -294,11 +286,11 @@ def _cmd_decorate(args: List[str]) -> bool: if result["success"]: console.print() - console.print(f"[green]Placed '{result['display_name']}' in r/{room_name}[/green]") + success(f"Placed '{result['display_name']}' in r/{room_name}") console.print(f" [dim]{description}[/dim]") console.print() else: - console.print("[red]Failed to place decoration[/red]") + error("Failed to place decoration") return True @@ -311,18 +303,18 @@ def _cmd_decorate(args: List[str]) -> bool: def _cmd_visitors(args: List[str]) -> bool: """Show recent visitors in a room (last 48h).""" if not args: - console.print("[red]Usage: commons visitors [/red]") + error("Usage: commons visitors ") return True room_name = args[0].lower() data = get_visitors_data(room_name) if data.get("error"): - console.print(f"[red]{data['error']}[/red]") + error(data["error"]) return True if not data["found"]: - console.print(f"[red]Room '{room_name}' not found[/red]") + error(f"Room '{room_name}' not found") return True visitors = data["visitors"] diff --git a/src/aipass/commons/apps/modules/trade.py b/src/aipass/commons/apps/modules/trade.py index ec70c944..b3b670f6 100644 --- a/src/aipass/commons/apps/modules/trade.py +++ b/src/aipass/commons/apps/modules/trade.py @@ -20,12 +20,14 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error, warning except ImportError: logger.warning("[trade] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] + warning = console.print # type: ignore[assignment] from rich.panel import Panel @@ -97,7 +99,7 @@ def handle_command(command: str, args: List[str]) -> bool: def _handle_gift(args: List[str]) -> bool: result = gift_artifact(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True rarity_color = RARITY_COLORS.get(result["rarity"], "white") @@ -119,7 +121,7 @@ def _handle_gift(args: List[str]) -> bool: def _handle_trade(args: List[str]) -> bool: result = trade_artifact(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True yours = result["your_artifact"] @@ -147,7 +149,7 @@ def _handle_trade(args: List[str]) -> bool: def _handle_drop(args: List[str]) -> bool: result = drop_item(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True console.print() @@ -170,7 +172,7 @@ def _handle_drop(args: List[str]) -> bool: def _handle_find(args: List[str]) -> bool: result = find_item(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True rarity_color = RARITY_COLORS.get(result["rarity"], "white") @@ -194,11 +196,11 @@ def _handle_find(args: List[str]) -> bool: def _handle_mint(args: List[str]) -> bool: result = mint_event_artifact(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True - for warning in result.get("warnings", []): - console.print(f"[yellow]Warning: {warning}[/yellow]") + for warn_msg in result.get("warnings", []): + warning(f"Warning: {warn_msg}") minted = result["minted"] lines = [f"[bold]Event:[/bold] {result['event_name']}\n"] diff --git a/src/aipass/commons/apps/modules/welcome.py b/src/aipass/commons/apps/modules/welcome.py index 30d58a19..b8e58556 100644 --- a/src/aipass/commons/apps/modules/welcome.py +++ b/src/aipass/commons/apps/modules/welcome.py @@ -20,12 +20,13 @@ from typing import List from aipass.prax.apps.modules.logger import system_logger as logger try: - from aipass.cli.apps.modules import console + from aipass.cli.apps.modules import console, error except ImportError: logger.warning("[welcome] CLI console unavailable, using fallback") from rich.console import Console console = Console() + error = console.print # type: ignore[assignment] from aipass.commons.apps.handlers.welcome.welcome_ops import run_welcome from aipass.commons.apps.handlers.json import json_handler @@ -75,7 +76,7 @@ def _handle_welcome(args: List[str]) -> bool: result = run_welcome(args) if not result["success"]: - console.print(f"[red]{result['error']}[/red]") + error(result["error"]) return True if result.get("dry_run"):