feat(system): stderr routing migration Phase 3 — 10 branches migrated (FPLAN-0033)

Migrated error()/warning() calls across 10 branches to use CLI display API
which routes to stderr. 48 files modified across ai_mail, api, backup, daemon,
flow, memory, prax, seedgo, spawn, trigger. Seedgo stderr_routing standard
created (24th standard) with full-file scanning. System average 49% → 69%.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
AIOSAI
2026-03-14 00:41:38 -07:00
co-authored by Claude Opus 4.6
parent 154e92d13e
commit 97952124b5
48 changed files with 666 additions and 226 deletions
+11 -12
View File
@@ -27,7 +27,7 @@ from rich.panel import Panel
from rich import box
from aipass.prax import logger
from aipass.cli.apps.modules import console
from aipass.cli.apps.modules import console, error, warning
# =============================================================================
# INFRASTRUCTURE SETUP
@@ -139,7 +139,7 @@ def run_rollover() -> bool:
result = _handler_execute_rollover()
if not result.get('success') and result.get('error'):
console.print(f"[red]x[/red] {result['error']}")
error(result['error'])
return False
triggers_count = result.get('triggers_count', 0)
@@ -168,9 +168,8 @@ def run_rollover() -> bool:
if failed:
console.print()
console.print("[red]Failed operations:[/red]")
for fail in failed:
console.print(f" [red]x[/red] {fail['trigger']} - {fail['stage']}: {fail['error']}")
error(f"{fail['trigger']} - {fail['stage']}: {fail['error']}")
return success_count > 0
@@ -201,11 +200,11 @@ def sync_line_counts() -> None:
if result['success']:
console.print(f"[green]>[/green] Updated {result['updated']} files")
if result['failed'] > 0:
console.print(f"[yellow]![/yellow] {result['failed']} files failed:")
for branch, mem_type, error in result.get('failures', []):
console.print(f" [red]x[/red] {branch}.{mem_type}: {error}")
warning(f"{result['failed']} files failed")
for branch, mem_type, err_msg in result.get('failures', []):
error(f"{branch}.{mem_type}: {err_msg}")
else:
console.print("[red]x[/red] Failed to sync line counts")
error("Failed to sync line counts")
console.print()
@@ -235,7 +234,7 @@ def show_status() -> None:
stats_result = detector.get_rollover_stats()
if not stats_result['success']:
console.print(f"[red]x[/red] Failed to get status: {stats_result.get('error', 'Unknown error')}")
error(f"Failed to get status: {stats_result.get('error', 'Unknown error')}")
logger.error(f"[rollover] Failed to get status: {stats_result.get('error')}")
return
@@ -249,7 +248,7 @@ def show_status() -> None:
# Per-branch details
if stats['branches']:
console.print("[yellow]Branch Details:[/yellow]")
console.print("[bold cyan]Branch Details:[/bold cyan]")
console.print()
for branch_name, branch_stats in stats['branches'].items():
@@ -294,7 +293,7 @@ def check_triggers() -> None:
triggers_result = detector.check_all_branches()
if not triggers_result['success']:
console.print(f"[red]x[/red] Failed to check triggers: {triggers_result.get('error', 'Unknown error')}")
error(f"Failed to check triggers: {triggers_result.get('error', 'Unknown error')}")
logger.error(f"[rollover] Failed to check triggers: {triggers_result.get('error')}")
return
@@ -304,7 +303,7 @@ def check_triggers() -> None:
console.print("[green]>[/green] No files need rollover")
return
console.print(f"[yellow]Found {len(triggers)} files ready for rollover:[/yellow]")
console.print(f"[bold cyan]Found {len(triggers)} files ready for rollover:[/bold cyan]")
console.print()
for trigger in triggers:
+8 -17
View File
@@ -26,7 +26,7 @@ from rich.panel import Panel
from rich import box
from aipass.prax import logger
from aipass.cli.apps.modules import console
from aipass.cli.apps.modules import console, error, warning
# =============================================================================
# INFRASTRUCTURE SETUP
@@ -63,8 +63,7 @@ def handle_command(command: str, args: List[str]) -> bool:
if command == 'search':
if not args:
console.print("[red]Error:[/red] Search query required")
console.print("Usage: search <query> [--branch BRANCH] [--type TYPE] [--n N]")
error("Search query required", suggestion="Usage: search <query> [--branch BRANCH] [--type TYPE] [--n N]")
return True
# Parse arguments
@@ -85,7 +84,7 @@ def handle_command(command: str, args: List[str]) -> bool:
try:
n_results = int(args[i + 1])
except ValueError:
console.print(f"[red]Error:[/red] Invalid number: {args[i + 1]}")
error(f"Invalid number: {args[i + 1]}")
return True
i += 2
else:
@@ -94,7 +93,7 @@ def handle_command(command: str, args: List[str]) -> bool:
query = ' '.join(query_parts)
if not query:
console.print("[red]Error:[/red] Search query required")
error("Search query required")
return True
show_search_results(query, branch=branch, memory_type=memory_type, n_results=n_results)
@@ -126,7 +125,7 @@ def print_help() -> None:
console.print()
console.print("[bold]EXAMPLES:[/bold]")
console.print(" # Search all branches")
console.print(" [dim]drone @memory search \"error handling patterns\"[/dim]")
console.print(" [dim]drone @memory search \"performance patterns\"[/dim]")
console.print()
console.print(" # Search specific branch")
console.print(" [dim]drone @memory search \"registry bugs\" --branch SEED[/dim]")
@@ -191,7 +190,7 @@ def show_search_results(
)
if not result['success']:
console.print(f"[red]x[/red] {result.get('error', 'Unknown error')}")
error(result.get('error', 'Unknown error'))
return False
collections_searched = result.get('collections_searched', 0)
@@ -203,19 +202,11 @@ def show_search_results(
console.print()
if not filtered_results and total_results == 0:
console.print("[yellow]No matching memories found[/yellow]")
console.print()
console.print("[dim]Try:[/dim]")
console.print(" * Different search terms")
console.print(" * Broader query without filters")
console.print(" * Check if memories have been rolled over (drone @memory status)")
warning("No matching memories found", details="Try different search terms, broader query without filters, or check if memories have been rolled over (drone @memory status)")
return True
if not filtered_results:
console.print("[yellow]No relevant memories found[/yellow]")
console.print()
console.print("[dim]The search found some results but none were relevant enough (>40% similarity).[/dim]")
console.print("[dim]Try more specific search terms related to your AIPass work.[/dim]")
warning("No relevant memories found", details="Results found but none relevant enough (>40% similarity). Try more specific search terms.")
return True
for i, item in enumerate(filtered_results, 1):