diff --git a/enterprise/app/models/captain/scenario.rb b/enterprise/app/models/captain/scenario.rb index 0878ab2e9..6f607bde1 100644 --- a/enterprise/app/models/captain/scenario.rb +++ b/enterprise/app/models/captain/scenario.rb @@ -25,6 +25,8 @@ # fk_rails_... (assistant_id => captain_assistants.id) # class Captain::Scenario < ApplicationRecord + include AgentToolsResolvable + self.table_name = 'captain_scenarios' belongs_to :assistant, class_name: 'Captain::Assistant' diff --git a/enterprise/app/models/concerns/agent_tools_resolvable.rb b/enterprise/app/models/concerns/agent_tools_resolvable.rb new file mode 100644 index 000000000..2f367ed39 --- /dev/null +++ b/enterprise/app/models/concerns/agent_tools_resolvable.rb @@ -0,0 +1,36 @@ +module AgentToolsResolvable + extend ActiveSupport::Concern + + class_methods do + def available_agent_tools + @available_agent_tools ||= load_agent_tools + end + + def resolve_tool_class(tool_id) + class_name = "Captain::Tools::#{tool_id.classify}Tool" + class_name.safe_constantize + end + + private + + def load_agent_tools + tools_config = YAML.load_file(Rails.root.join('config/agents/tools.yml')) + + tools_config.filter_map do |tool_config| + tool_class = resolve_tool_class(tool_config['id']) + + if tool_class + { + id: tool_config['id'], + title: tool_config['title'], + description: tool_config['description'], + icon: tool_config['icon'] + } + else + Rails.logger.warn "Tool class not found for ID: #{tool_config['id']}" + nil + end + end + end + end +end \ No newline at end of file