fix(captain/mcp): save_agent_spec — passa categorias já serializadas pra build_skill_md

Bug: build_skill_md recebia AR Captain::PricingCategory objects mas o
format_pricing_block fazia cat['amounts'] (índice de hash). AR respondem
a .amounts, não a ['amounts'] → nil → undefined method 'group_by' for nil.

Fix: serializa primeiro, reusa em ambos os lugares.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Rodribm10 2026-05-02 13:17:38 -03:00
parent 5ef59ecc12
commit 828e2e6af3

View File

@ -99,6 +99,7 @@ class Captain::Mcp::Tools::SaveAgentSpecTool < Captain::Mcp::Tools::BaseTool
return [{}, errors] if errors.any?
name = spec['name'].presence || slug.tr('_', ' ').split.map(&:capitalize).join(' ')
serialized_categories = pricing_categories.map { |c| serialize_category(c) }
{
'slug' => slug,
@ -112,8 +113,8 @@ class Captain::Mcp::Tools::SaveAgentSpecTool < Captain::Mcp::Tools::BaseTool
'skill_name' => "#{slug.tr('_', '-')}-reservas",
'humanization' => spec['humanization'] || default_humanization,
'soul_md' => build_soul_md(name, brand, spec),
'skill_md' => build_skill_md(name, brand, spec, pricing_categories),
'categories' => pricing_categories.map { |c| serialize_category(c) },
'skill_md' => build_skill_md(name, brand, spec, serialized_categories),
'categories' => serialized_categories,
'saved_at' => Time.current.iso8601,
'saved_by_tool' => 'mcp_save_agent_spec'
}