6#include "absl/container/flat_hash_set.h"
7#include "absl/strings/str_cat.h"
18 const std::vector<UsageParameter>& parameters) {
19 std::vector<std::string> required_args;
21 if (!parameter.positional && parameter.required && parameter.takes_value) {
22 required_args.push_back(parameter.name);
29 const std::vector<UsageParameter>& parameters) {
30 std::vector<std::string> flag_args;
32 if (!parameter.positional && !parameter.takes_value) {
33 flag_args.push_back(parameter.name);
40 static const absl::flat_hash_set<std::string> kMutatingTools = {
44 "dungeon-import-custom-collision-json",
45 "dungeon-import-water-fill-json",
46 "dungeon-set-palette-color",
47 "dungeon-set-room-property",
48 "emulator-clear-breakpoint",
52 "emulator-set-breakpoint",
54 "emulator-write-memory",
58 "message-source-sync",
64 "tools-extract-golden",
76 const std::vector<UsageParameter> parameters =
112 const std::string tool_name = normalized.
name;
113 tools_[tool_name] = {std::move(normalized), std::move(factory)};
117 std::vector<ToolDefinition> defs;
118 defs.reserve(
tools_.size());
120 defs.push_back(entry.def);
126 const std::string&
name)
const {
129 return it->second.def;
135 const std::string&
category)
const {
136 std::vector<ToolDefinition> defs;
138 if (entry.def.category ==
category) {
139 defs.push_back(entry.def);
145absl::StatusOr<std::unique_ptr<resources::CommandHandler>>
147 auto it =
tools_.find(tool_name);
149 return absl::NotFoundError(absl::StrCat(
"Tool not found: ", tool_name));
151 return it->second.factory();
void RegisterBuiltinAgentTools(ToolRegistry ®istry)
std::vector< UsageParameter > ParseUsageParameters(absl::string_view usage)