#pragma once // Step 656: Apiary browser panel model #include #include struct ApiaryToolEntry { std::string name; std::string version; std::string language; std::vector capabilities; std::string docSummary; std::string sourcePath; }; class ApiaryBrowserPanelModel { public: static std::vector filterByCapability(const std::vector& entries, const std::string& capability) { if (capability.empty()) return entries; std::vector out; for (const auto& e : entries) { for (const auto& cap : e.capabilities) { if (cap == capability) { out.push_back(e); break; } } } return out; } static std::string title(const ApiaryToolEntry& entry) { return entry.name + " v" + entry.version; } };