Skip to content

Implement output formatters and interaction strategies #40

@Sstark97

Description

@Sstark97

Phase 5: CLI Presentation

Implement output formatters and user interaction strategies.

Output Formatters (IOutputFormatter Strategy)

In Infrastructure/Cli/Output/:

SpectreOutputFormatter

  • Uses Spectre.Console for rich terminal UI
  • Markup for colors: [green], [red], [yellow]
  • Tables for analysis reports
  • Spinners for long operations
  • Progress bars for cleanup
  • Banner with ASCII art
  • Replaces all bash log_* functions and print_banner/print_completion

PlainTextOutputFormatter

  • Plain text, no ANSI codes
  • For CI/CD, piping, logging
  • Simple line-by-line output
  • Tables as plain text with alignment

JsonOutputFormatter

  • Structured JSON output
  • For MCP server, scripting, automation
  • All data serializable
  • Example:
{
  "timestamp": "2026-02-07T...",
  "mode": "analyze",
  "totalEstimatedSize": "15.3GB",
  "targets": [...]
}

User Interaction Strategies (IUserInteraction Strategy)

In Infrastructure/Cli/Interaction/:

InteractiveConsole

  • Human interactive mode
  • Prompts user for confirmations
  • Different prompts per ConfirmationLevel:
    • Simple: "Continue? (y/N)" - skipped with --force
    • Dangerous: Type "yes" - skipped with --force
    • Nuclear: Type "yes" - NEVER skipped, even with --force
  • Uses Spectre.Console ConfirmationPrompt and TextPrompt

AutoConfirmInteraction

  • For MCP server, CI/CD
  • Auto-confirms everything (no prompts)
  • Equivalent to --force but programmatic
  • Returns true for all confirmations except Nuclear
  • Nuclear still requires explicit "yes" from caller

InteractiveMenu

  • Multi-select module menu using Spectre.Console MultiSelectionPrompt
  • Loop for "cleanup more?" - ask_continue_cleanup
  • Replaces bash show_interactive_menu and show_multiselect_menu

Tests Required

All in tests/Infrastructure/Cli/:

Output Tests:

  • Output/SpectreOutputFormatterTests: Markup rendering, table formatting
  • Output/PlainTextOutputFormatterTests: Plain text output
  • Output/JsonOutputFormatterTests: JSON serialization, schema validation

Interaction Tests:

  • Interaction/InteractiveConsoleTests: Confirmation levels, force mode
  • Interaction/AutoConfirmInteractionTests: Auto-confirm behavior
  • Interaction/InteractiveMenuTests: Menu display, module selection

Port tests from bash tests/unit/analyze_mode_test.sh for display formatting.

Definition of Done

  • All 3 output formatters implemented
  • All 2 interaction strategies implemented
  • Interactive menu working with Spectre.Console
  • Tests verify each formatter/strategy
  • --output flag selects correct formatter
  • MCP-ready with AutoConfirmInteraction + JsonOutputFormatter

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions