Class: AIA::Adapter::ToolFilter
- Inherits:
-
Object
- Object
- AIA::Adapter::ToolFilter
- Defined in:
- lib/aia/adapter/tool_filter.rb
Class Method Summary collapse
- .detect_conflicts ⇒ Object
- .drop_duplicates(tools) ⇒ Object
- .filter_allowed(tools) ⇒ Object
- .filter_rejected(tools) ⇒ Object
Class Method Details
.detect_conflicts ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/aia/adapter/tool_filter.rb', line 33 def self.detect_conflicts allowed = AIA.config.tools.allowed rejected = AIA.config.tools.rejected return [] if allowed.nil? || allowed.empty? || rejected.nil? || rejected.empty? allowed_list = Array(allowed).map(&:strip) rejected_list = Array(rejected).map(&:strip) conflicts = allowed_list & rejected_list return [] if conflicts.empty? logger = LoggerManager.aia_logger conflicts.each do |pattern| msg = "Tool pattern '#{pattern}' appears in both --allowed-tools and --rejected-tools. Rejected takes precedence." logger.warn(msg) warn "WARNING: #{msg}" end conflicts end |
.drop_duplicates(tools) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/aia/adapter/tool_filter.rb', line 54 def self.drop_duplicates(tools) seen_names = Set.new original_size = tools.size logger = LoggerManager.aia_logger logger.debug("Checking tools for duplicates", tool_count: original_size) result = tools.select do |tool| tool_name = tool.name if seen_names.include?(tool_name) logger.warn("Duplicate tool detected - keeping first occurrence only", tool: tool_name) warn "WARNING: Duplicate tool name detected: '#{tool_name}'. Only the first occurrence will be used." false else seen_names.add(tool_name) true end end removed_count = original_size - result.size if removed_count > 0 logger.info("Removed duplicate tools", removed_count: removed_count, remaining_count: result.size) warn "Removed #{removed_count} duplicate tools" else logger.debug("No duplicate tools found") end result end |
.filter_allowed(tools) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/aia/adapter/tool_filter.rb', line 9 def self.filter_allowed(tools) allowed = AIA.config.tools.allowed return tools if allowed.nil? || allowed.empty? allowed_list = Array(allowed).map(&:strip) tools.select do |tool| tool_name = tool.respond_to?(:name) ? tool.name : tool.class.name allowed_list.any? { |allowed_pattern| tool_name.include?(allowed_pattern) } end end |
.filter_rejected(tools) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/aia/adapter/tool_filter.rb', line 21 def self.filter_rejected(tools) rejected = AIA.config.tools.rejected return tools if rejected.nil? || rejected.empty? rejected_list = Array(rejected).map(&:strip) tools.reject do |tool| tool_name = tool.respond_to?(:name) ? tool.name : tool.class.name rejected_list.any? { |rejected_pattern| tool_name.include?(rejected_pattern) } end end |