Module: Brainiac::Plugins::Fizzy::Summarize
- Defined in:
- lib/brainiac/plugins/fizzy/handlers/summarize.rb
Overview
Handles re-dispatch summarize sessions and fallback comment posting. Extracted from Hooks to keep module length manageable.
Class Method Summary collapse
-
.agent_commented_on_card?(card_number, agent_name, repo_path:, since: nil) ⇒ Boolean
Check if the agent posted a comment on the card since a given time.
-
.dispatch_summarize_session(ctx) ⇒ Object
Re-dispatch an agent to post a summary comment when it completed work but didn't comment on the card.
-
.post_fallback_comment(card_number, branch, agent_name, project_config) ⇒ Object
Post a minimal server-generated comment when all else fails.
Class Method Details
.agent_commented_on_card?(card_number, agent_name, repo_path:, since: nil) ⇒ Boolean
Check if the agent posted a comment on the card since a given time.
If no since is provided, checks for any agent comment (legacy behavior).
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/brainiac/plugins/fizzy/handlers/summarize.rb', line 47 def agent_commented_on_card?(card_number, agent_name, repo_path:, since: nil) env = Helpers.fizzy_env_for(agent_name) output = run_cmd("fizzy", "comment", "list", "--card", card_number.to_s, chdir: repo_path, env: env) comments = JSON.parse(output)["data"] || [] agent_display = agent_display_name(agent_name) agent_comments = comments.select { |c| c["creator_name"]&.downcase == agent_display.downcase } return agent_comments.any? unless since agent_comments.any? do |c| comment_time = c["created_at"] && Time.parse(c["created_at"]) comment_time && comment_time > since end rescue StandardError false end |
.dispatch_summarize_session(ctx) ⇒ Object
Re-dispatch an agent to post a summary comment when it completed work but didn't comment on the card. Fires async with a 60s timeout. If this session also fails to comment, posts a minimal fallback.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/brainiac/plugins/fizzy/handlers/summarize.rb', line 15 def dispatch_summarize_session(ctx) card_number = ctx[:card_number] agent_name = ctx[:agent_name] project_config = ctx[:project_config] repo_path = project_config["repo_path"] session_started_at = ctx[:source_context]&.dig(:dispatched_at) map = load_work_item_map work_item = find_work_item(map, card_number) branch = work_item&.dig("branch") || "unknown" card_title = work_item&.dig("title") || ctx[:source_context]&.dig(:card_title) || "untitled" worktree_path = work_item&.dig("worktree") || repo_path if defined?(LOG) LOG.info "[Fizzy] Agent #{agent_name} completed card ##{card_number} without commenting — " \ "dispatching summarize session" end pid, log_file = dispatch_summarize_agent(card_number, card_title, branch, agent_name, project_config, worktree_path) register_session("card-#{card_number}-summarize", pid, log_file: log_file, agent_name: agent_name) monitor_summarize_session(pid, card_number, agent_name, branch, repo_path, session_started_at, project_config) rescue StandardError => e LOG.error "[Fizzy] Failed to dispatch summarize session for card ##{card_number}: #{e.}" if defined?(LOG) post_fallback_comment(card_number, work_item&.dig("branch") || "unknown", agent_name, project_config) end |
.post_fallback_comment(card_number, branch, agent_name, project_config) ⇒ Object
Post a minimal server-generated comment when all else fails.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/brainiac/plugins/fizzy/handlers/summarize.rb', line 65 def post_fallback_comment(card_number, branch, agent_name, project_config) repo_path = project_config["repo_path"] env = Helpers.fizzy_env_for(agent_name) pr_url = Helpers.send(:detect_pr_url, branch, project_config) body = "<p>✅ Work completed on this card.</p>" body += "<p><a href=\"#{pr_url}\">View PR</a></p>" if pr_url body += "<p><strong>Branch:</strong> <code>#{branch}</code></p>" run_cmd("fizzy", "comment", "create", "--card", card_number.to_s, "--body", body, chdir: repo_path, env: env) LOG.info "[Fizzy] Posted fallback comment on card ##{card_number}" if defined?(LOG) rescue StandardError => e LOG.error "[Fizzy] Failed to post fallback comment on card ##{card_number}: #{e.}" if defined?(LOG) end |