Class: Ace::Overseer::Organisms::StatusCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/overseer/organisms/status_collector.rb

Instance Method Summary collapse

Constructor Details

#initialize(worktree_manager: nil, context_collector: nil, project_root: nil) ⇒ StatusCollector

Returns a new instance of StatusCollector.



10
11
12
13
14
# File 'lib/ace/overseer/organisms/status_collector.rb', line 10

def initialize(worktree_manager: nil, context_collector: nil, project_root: nil)
  @worktree_manager = worktree_manager || Ace::Git::Worktree::Organisms::WorktreeManager.new
  @context_collector = context_collector || Molecules::WorktreeContextCollector.new
  @project_root = project_root
end

Instance Method Details

#collectObject

Raises:



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/ace/overseer/organisms/status_collector.rb', line 16

def collect
  result = @worktree_manager.list_all(show_tasks: true)
  raise Error, result[:error] || "Failed to list worktrees" unless result[:success]

  all_worktrees = Array(result[:worktrees]).reject(&:bare)
  # Exclude main worktree (handled separately via collect_main_context)
  main_root = @project_root || resolve_project_root
  non_main = all_worktrees.reject { |wt| main_root && wt.path == main_root }

  contexts = collect_contexts_parallel(non_main)

  # Keep task worktrees always; non-task worktrees only if they have assignments
  contexts.select! { |ctx| ctx.task_id != "unknown" || ctx.assignments.any? }

  main_context = collect_main_context
  contexts.unshift(main_context) if main_context && main_context.assignments.any?

  {
    contexts: contexts
  }
end

#collect_quick(previous_snapshot) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/ace/overseer/organisms/status_collector.rb', line 38

def collect_quick(previous_snapshot)
  previous_contexts = previous_snapshot[:contexts]
  return collect if previous_contexts.nil? || previous_contexts.empty?

  contexts = previous_contexts.map do |prev_ctx|
    @context_collector.collect_assignments_only(
      prev_ctx.worktree_path,
      cached_branch: prev_ctx.branch,
      cached_git_status: prev_ctx.git_status,
      location_type: prev_ctx.location_type
    )
  rescue
    nil
  end.compact

  {contexts: contexts}
end

#to_h(snapshot) ⇒ Object



60
61
62
63
64
# File 'lib/ace/overseer/organisms/status_collector.rb', line 60

def to_h(snapshot)
  {
    worktrees: snapshot[:contexts].map { |context| context_to_h(context) }
  }
end

#to_table(snapshot) ⇒ Object



56
57
58
# File 'lib/ace/overseer/organisms/status_collector.rb', line 56

def to_table(snapshot)
  Atoms::StatusFormatter.format_dashboard(snapshot[:contexts])
end