Class: Aidp::Harness::UI::StatusManager

Inherits:
Base
  • Object
show all
Defined in:
lib/aidp/harness/ui/status_manager.rb

Overview

Real-time status updates using CLI UI spinners

Defined Under Namespace

Classes: InvalidStatusError, StatusError, UpdateError

Instance Method Summary collapse

Constructor Details

#initialize(ui_components = {}) ⇒ StatusManager

Returns a new instance of StatusManager.



20
21
22
23
24
25
26
27
28
29
# File 'lib/aidp/harness/ui/status_manager.rb', line 20

def initialize(ui_components = {})
  super()
  @status_widget = ui_components[:status_widget] || StatusWidget.new
  @spinner_group = ui_components[:spinner_group] || SpinnerGroup.new
  @frame_manager = ui_components[:frame_manager] || FrameManager.new
  @formatter = ui_components[:formatter] || StatusManagerFormatter.new

  @active_statuses = {}
  @status_history = []
end

Instance Method Details

#clear_status_historyObject



130
131
132
# File 'lib/aidp/harness/ui/status_manager.rb', line 130

def clear_status_history
  @status_history.clear
end

#complete_status(status_id, final_message = "Completed") ⇒ Object

Raises:



89
90
91
92
93
94
95
96
97
98
99
# File 'lib/aidp/harness/ui/status_manager.rb', line 89

def complete_status(status_id, final_message = "Completed")
  validate_status_id(status_id)

  status = @active_statuses[status_id]
  raise InvalidStatusError, "Status #{status_id} not found" unless status

  complete_status_display(status, final_message)
  @active_statuses.delete(status_id)

  record_status_completion(status_id, final_message)
end

#create_status_tracker(name, initial_message = "Initializing...") ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/aidp/harness/ui/status_manager.rb', line 77

def create_status_tracker(name, initial_message = "Initializing...")
  validate_tracker_name(name)
  validate_message(initial_message)

  status_id = generate_status_id(name)
  status_tracker = create_status_instance(name, initial_message)
  @active_statuses[status_id] = status_tracker

  record_status_creation(status_id, name, initial_message)
  status_id
end

#get_status_summaryObject



121
122
123
124
125
126
127
128
# File 'lib/aidp/harness/ui/status_manager.rb', line 121

def get_status_summary
  {
    active_statuses: @active_statuses.size,
    completed_statuses: @status_history.count { |h| h[:status] == "completed" },
    total_statuses: @status_history.size,
    status_history: @status_history.dup
  }
end

#show_concurrent_statuses(operations, &block) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/aidp/harness/ui/status_manager.rb', line 55

def show_concurrent_statuses(operations, &block)
  validate_operations(operations)

  @frame_manager.section("Concurrent Operations") do
    @spinner_group.run_concurrent_operations(operations, &block)
  end
rescue => e
  raise UpdateError, "Failed to show concurrent statuses: #{e.message}"
end

#show_error_status(message) ⇒ Object



106
107
108
109
# File 'lib/aidp/harness/ui/status_manager.rb', line 106

def show_error_status(message)
  @status_widget.show_error_status(message)
  record_status_event(:error, message)
end

#show_info_status(message) ⇒ Object



116
117
118
119
# File 'lib/aidp/harness/ui/status_manager.rb', line 116

def show_info_status(message)
  @status_widget.show_info_status(message)
  record_status_event(:info, message)
end

#show_step_status(step_name, &block) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/aidp/harness/ui/status_manager.rb', line 43

def show_step_status(step_name, &block)
  validate_step_name(step_name)

  @frame_manager.step_frame(step_name, 1, 1) do
    @status_widget.show_loading_status("Processing #{step_name}") do |spinner|
      track_step_status(step_name, spinner, &block)
    end
  end
rescue => e
  raise UpdateError, "Failed to show step status: #{e.message}"
end

#show_success_status(message) ⇒ Object



101
102
103
104
# File 'lib/aidp/harness/ui/status_manager.rb', line 101

def show_success_status(message)
  @status_widget.show_success_status(message)
  record_status_event(:success, message)
end

#show_warning_status(message) ⇒ Object



111
112
113
114
# File 'lib/aidp/harness/ui/status_manager.rb', line 111

def show_warning_status(message)
  @status_widget.show_warning_status(message)
  record_status_event(:warning, message)
end

#show_workflow_status(workflow_name, &block) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/aidp/harness/ui/status_manager.rb', line 31

def show_workflow_status(workflow_name, &block)
  validate_workflow_name(workflow_name)

  @frame_manager.workflow_frame(workflow_name) do
    @status_widget.show_loading_status("Starting #{workflow_name}") do |spinner|
      track_workflow_status(workflow_name, spinner, &block)
    end
  end
rescue => e
  raise UpdateError, "Failed to show workflow status: #{e.message}"
end

#update_status(status_id, message, type = :info) ⇒ Object

Raises:



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/aidp/harness/ui/status_manager.rb', line 65

def update_status(status_id, message, type = :info)
  validate_status_id(status_id)
  validate_message(message)
  validate_status_type(type)

  status = @active_statuses[status_id]
  raise InvalidStatusError, "Status #{status_id} not found" unless status

  update_status_display(status, message, type)
  record_status_update(status_id, message, type)
end