Module: Brainiac::Plugins::Fizzy
- Defined in:
- lib/brainiac/plugins/fizzy.rb,
lib/brainiac/plugins/fizzy/cli.rb,
lib/brainiac/plugins/fizzy/hooks.rb,
lib/brainiac/plugins/fizzy/config.rb,
lib/brainiac/plugins/fizzy/helpers.rb,
lib/brainiac/plugins/fizzy/prompts.rb,
lib/brainiac/plugins/fizzy/version.rb,
lib/brainiac/plugins/fizzy/metadata.rb,
lib/brainiac/plugins/fizzy/planning.rb,
lib/brainiac/plugins/fizzy/handlers/summarize.rb
Defined Under Namespace
Modules: Cli, Config, Helpers, Hooks, Planning, Prompts, Summarize
Constant Summary collapse
- VERSION =
"0.0.18"
Class Method Summary collapse
-
.cli(args) ⇒ Object
Plugin CLI entry point — called by brainiac core's plugin delegation.
-
.completions ⇒ Object
Subcommand names for bash completion.
-
.configured? ⇒ Boolean
Returns true if Fizzy has at least one board configured.
- .handle_publish_or_triage(action, payload, board_key: nil) ⇒ Object
-
.help_text ⇒ Object
Help text shown in
brainiac helpwhen the plugin is installed. -
.on_agent_created(agent_key, entry) ⇒ Object
Called by brainiac CLI after
agent create— prompts for Fizzy user ID. -
.on_agent_removed(agent_key, display_name) ⇒ Object
Called by brainiac CLI after
agent remove— removes from Fizzy authorized_users. -
.register(app) ⇒ Object
Called by Brainiac plugin system during server startup.
Class Method Details
.cli(args) ⇒ Object
Plugin CLI entry point — called by brainiac core's plugin delegation.
597 598 599 |
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 597 def self.cli(args) Cli.run(args) end |
.completions ⇒ Object
Subcommand names for bash completion.
602 603 604 |
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 602 def self.completions %w[config status setup] end |
.configured? ⇒ Boolean
Returns true if Fizzy has at least one board configured.
12 13 14 15 16 17 18 19 20 |
# File 'lib/brainiac/plugins/fizzy/metadata.rb', line 12 def self.configured? config_file = File.join(ENV.fetch("BRAINIAC_DIR", File.join(Dir.home, ".brainiac")), "fizzy.json") return false unless File.exist?(config_file) config = JSON.parse(File.read(config_file)) !(config["boards"] || {}).empty? rescue StandardError false end |
.handle_publish_or_triage(action, payload, board_key: nil) ⇒ Object
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/brainiac/plugins/fizzy.rb', line 178 def handle_publish_or_triage(action, payload, board_key: nil) eventable = payload["eventable"] || {} card_number = eventable["number"]&.to_s if action == "card_triaged" && card_number return [200, { status: "ignored", reason: "self_move" }.to_json] if self_move_recent?(card_number) return [200, { status: "ignored", reason: "card_merged" }.to_json] if work_item_merged?(card_number) card_key = "card-#{card_number}" return [200, { status: "ignored", reason: "recently_completed" }.to_json] if recently_completed?(card_key) end if action == "card_published" assignees = eventable["assignees"] || [] return handle_card_assigned(payload, board_key: board_key) if assignees.any? { |a| local_agent_names.include?(a["name"]) } end handle_card_published(payload, board_key: board_key) end |
.help_text ⇒ Object
Help text shown in brainiac help when the plugin is installed.
23 24 25 |
# File 'lib/brainiac/plugins/fizzy/metadata.rb', line 23 def self.help_text " brainiac fizzy <command> Manage Fizzy boards" end |
.on_agent_created(agent_key, entry) ⇒ Object
Called by brainiac CLI after agent create — prompts for Fizzy user ID.
607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 607 def self.on_agent_created(agent_key, entry) return unless $stdin.tty? config_file = File.join(ENV.fetch("BRAINIAC_DIR", File.join(Dir.home, ".brainiac")), "fizzy.json") return unless File.exist?(config_file) display_name = entry["display_name"] || agent_key.capitalize puts "" puts " [Fizzy] Configure Fizzy for #{display_name}?" print " Fizzy user ID (or blank to skip): " user_id = $stdin.gets&.chomp return if user_id.nil? || user_id.empty? config = JSON.parse(File.read(config_file)) config["authorized_users"] ||= [] existing = config["authorized_users"].find { |u| u["id"] == user_id || u["name"]&.downcase == display_name.downcase } if existing puts " ✓ #{display_name} already in authorized_users (id: #{existing["id"]})" return end config["authorized_users"] << { "id" => user_id, "name" => display_name, "human" => false } File.write(config_file, JSON.pretty_generate(config)) puts " ✓ Added #{display_name} (#{user_id}) to fizzy.json authorized_users" rescue JSON::ParserError => e puts " ⚠ Could not update fizzy.json: #{e.}" end |
.on_agent_removed(agent_key, display_name) ⇒ Object
Called by brainiac CLI after agent remove — removes from Fizzy authorized_users.
637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 |
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 637 def self.on_agent_removed(agent_key, display_name) config_file = File.join(ENV.fetch("BRAINIAC_DIR", File.join(Dir.home, ".brainiac")), "fizzy.json") return unless File.exist?(config_file) config = JSON.parse(File.read(config_file)) users = config["authorized_users"] return unless users original_size = users.size users.reject! { |u| u["name"]&.downcase == display_name.downcase || u["name"]&.downcase == agent_key } return if users.size == original_size File.write(config_file, JSON.pretty_generate(config)) puts " [Fizzy] Removed #{display_name} from fizzy.json authorized_users" rescue JSON::ParserError nil end |
.register(app) ⇒ Object
Called by Brainiac plugin system during server startup.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/brainiac/plugins/fizzy.rb', line 28 def register(app) # Load Fizzy config Brainiac::Plugins::Fizzy::Config.load! # Register channel prompt Brainiac.register_channel_prompt(:fizzy, Brainiac::Plugins::Fizzy::Prompts::CHANNEL, pre_post_check: Brainiac::Plugins::Fizzy::Prompts::PRE_POST_CHECK) # Register lifecycle hooks Brainiac::Plugins::Fizzy::Hooks.register_all! # Set up webhook route setup_routes(app) LOG.info "[Fizzy] Plugin registered (webhook: /fizzy)" end |