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
Defined Under Namespace
Modules: Cli, Config, Helpers, Hooks, Planning, Prompts
Constant Summary collapse
- VERSION =
"0.0.7"
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) ⇒ 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.
132 133 134 |
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 132 def self.cli(args) Cli.run(args) end |
.completions ⇒ Object
Subcommand names for bash completion.
137 138 139 |
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 137 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) ⇒ Object
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/brainiac/plugins/fizzy.rb', line 177 def handle_publish_or_triage(action, payload) 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) if assignees.any? { |a| local_agent_names.include?(a["name"]) } end handle_card_published(payload) 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.
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 142 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"] ||= [] # Don't add if already present 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.
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 173 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.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/brainiac/plugins/fizzy.rb', line 27 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 |