Class: Collavre::Creatives::TreeFormatter

Inherits:
Object
  • Object
show all
Defined in:
app/services/collavre/creatives/tree_formatter.rb

Overview

Compact markdown tree formatter for AI Agent consumption. Used by: creative_retrieval_service, GeminiParentRecommender, Agent context injection.

Output format (header declared once, rows are values only):

<!-- format: [id] description (progress%) -->
- [123] My Task (50%)
  - [124] Subtask A (100%)
  - [125] Subtask B (0%)

Options:

max_depth:        Max tree depth (nil = unlimited)
include_header:   Include format comment header (default: true)
include_comments: Include recent comments per node (default: false)
use_permissions:  Use permission-filtered children (default: true)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(max_depth: nil, include_header: true, include_comments: false, use_permissions: true) ⇒ TreeFormatter

Returns a new instance of TreeFormatter.



18
19
20
21
22
23
# File 'app/services/collavre/creatives/tree_formatter.rb', line 18

def initialize(max_depth: nil, include_header: true, include_comments: false, use_permissions: true)
  @max_depth = max_depth
  @include_header = include_header
  @include_comments = include_comments
  @use_permissions = use_permissions
end

Class Method Details

.plain_description(creative) ⇒ Object

Extract plain text description from a creative (shared helper)



38
39
40
41
# File 'app/services/collavre/creatives/tree_formatter.rb', line 38

def self.plain_description(creative)
  raw = creative.effective_description(nil, true)
  ActionView::Base.full_sanitizer.sanitize(raw).strip
end

Instance Method Details

#format(creatives) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'app/services/collavre/creatives/tree_formatter.rb', line 25

def format(creatives)
  roots = Array(creatives)
  lines = []
  lines << "<!-- format: [id] description (progress%) -->" if @include_header

  roots.each do |root|
    format_node(root, 0, lines)
  end

  lines.join("\n")
end