yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
tool_registration.cc
Go to the documentation of this file.
3
15#ifdef YAZE_WITH_GRPC
17#endif
27
28namespace yaze {
29namespace cli {
30namespace agent {
31
32using namespace yaze::cli::handlers;
33using namespace yaze::cli::agent::tools;
34
35namespace {
36
37template <typename HandlerClass>
38void RegisterBuiltinTool(ToolRegistry& registry, ToolDefinition definition) {
39 registry.RegisterTool(std::move(definition),
40 []() { return std::make_unique<HandlerClass>(); });
41}
42
43#define REGISTER_BUILTIN_AGENT_TOOL(Name, Category, Desc, Usage, Examples, \
44 ReqRom, ReqProject, HandlerClass) \
45 RegisterBuiltinTool<HandlerClass>(registry, {Name, \
46 Category, \
47 Desc, \
48 Usage, \
49 Examples, \
50 ReqRom, \
51 ReqProject, \
52 ToolAccess::kReadOnly, \
53 {}, \
54 {}});
55
56} // namespace
57
58// Placeholder classes for meta-tools (they're handled specially in the
59// dispatcher) but still need handlers for registry metadata.
61 public:
62 std::string GetName() const override { return "tools-list"; }
63 std::string GetUsage() const override { return "tools-list"; }
64 bool RequiresRom() const override { return false; }
65
66 protected:
67 absl::Status ValidateArgs(const resources::ArgumentParser&) override {
68 return absl::OkStatus();
69 }
70 absl::Status Execute(Rom*, const resources::ArgumentParser&,
72 return absl::UnimplementedError(
73 "Handled by ToolDispatcher meta-tool handler");
74 }
75};
76
78 public:
79 std::string GetName() const override { return "tools-describe"; }
80 std::string GetUsage() const override {
81 return "tools-describe --name=<tool>";
82 }
83 bool RequiresRom() const override { return false; }
84
85 protected:
86 absl::Status ValidateArgs(const resources::ArgumentParser&) override {
87 return absl::OkStatus();
88 }
89 absl::Status Execute(Rom*, const resources::ArgumentParser&,
91 return absl::UnimplementedError(
92 "Handled by ToolDispatcher meta-tool handler");
93 }
94};
95
97 public:
98 std::string GetName() const override { return "tools-search"; }
99 std::string GetUsage() const override {
100 return "tools-search --query=<keyword>";
101 }
102 bool RequiresRom() const override { return false; }
103
104 protected:
105 absl::Status ValidateArgs(const resources::ArgumentParser&) override {
106 return absl::OkStatus();
107 }
108 absl::Status Execute(Rom*, const resources::ArgumentParser&,
109 resources::OutputFormatter&) override {
110 return absl::UnimplementedError(
111 "Handled by ToolDispatcher meta-tool handler");
112 }
113};
114
116 // Meta-tools (handled specially but registered for discovery)
117 REGISTER_BUILTIN_AGENT_TOOL("tools-list", "meta", "List all available tools",
118 "tools-list", {}, false, false,
120 REGISTER_BUILTIN_AGENT_TOOL("tools-describe", "meta",
121 "Get detailed information about a tool",
122 "tools-describe --name=<tool>", {}, false, false,
124 REGISTER_BUILTIN_AGENT_TOOL("tools-search", "meta", "Search tools by keyword",
125 "tools-search --query=<keyword>", {}, false,
127
128 // Resource commands
130 "resource-list", "resource", "List resource labels",
131 "resource-list --type=<type>", {"resource-list --type=dungeon"}, true,
134 "resource-search", "resource", "Search resource labels",
135 "resource-search --query=<query>", {"resource-search --query=castle"},
136 true, false, ResourceSearchCommandHandler)
137
138 // Dungeon commands
139 REGISTER_BUILTIN_AGENT_TOOL("dungeon-list-sprites", "dungeon",
140 "List sprites in a dungeon room",
141 "dungeon-list-sprites --room=<id>", {}, true,
143 REGISTER_BUILTIN_AGENT_TOOL("dungeon-describe-room", "dungeon",
144 "Describe a room",
145 "dungeon-describe-room --room=<id>", {}, true,
147 REGISTER_BUILTIN_AGENT_TOOL("dungeon-export-room", "dungeon",
148 "Export room data",
149 "dungeon-export-room --room=<id>", {}, true,
151 REGISTER_BUILTIN_AGENT_TOOL("dungeon-list-objects", "dungeon",
152 "List room objects",
153 "dungeon-list-objects --room=<id>", {}, true,
155 REGISTER_BUILTIN_AGENT_TOOL("dungeon-list-custom-collision", "dungeon",
156 "List custom collision tiles for a room",
157 "dungeon-list-custom-collision --room=<id>", {},
158 true, false,
161 "dungeon-export-custom-collision-json", "dungeon",
162 "Export custom collision maps to JSON",
163 "dungeon-export-custom-collision-json --out=<path> "
164 "[--room=<id>|--rooms=<ids>|--all] [--report=<path>]",
166 RegisterBuiltinTool<DungeonImportCustomCollisionJsonCommandHandler>(
167 registry,
168 {"dungeon-import-custom-collision-json",
169 "dungeon",
170 "Import custom collision maps and immediately save unless --dry-run",
171 "dungeon-import-custom-collision-json --in=<path> "
172 "[--dry-run [--report=<path>]] [--sandbox | --mock-rom] "
173 "[--replace-all --force]",
174 {},
175 true,
176 true,
178 {},
179 {"dry-run", "sandbox", "mock-rom", "replace-all", "force"}});
181 "dungeon-export-water-fill-json", "dungeon",
182 "Export water fill zones to JSON",
183 "dungeon-export-water-fill-json --out=<path> "
184 "[--room=<id>|--rooms=<ids>|--all] [--report=<path>]",
186 RegisterBuiltinTool<DungeonImportWaterFillJsonCommandHandler>(
187 registry,
188 {"dungeon-import-water-fill-json",
189 "dungeon",
190 "Import water fill zones and immediately save unless --dry-run",
191 "dungeon-import-water-fill-json --in=<path> "
192 "[--dry-run [--report=<path>]] [--sandbox | --mock-rom] "
193 "[--strict-masks]",
194 {},
195 true,
196 true,
198 {},
199 {"dry-run", "sandbox", "mock-rom", "strict-masks"}});
201 "dungeon-minecart-audit", "dungeon",
202 "Audit minecart-related room data (objects/sprites/collision)",
203 "dungeon-minecart-audit --room=<id>", {}, true, false,
206 "dungeon-minecart-map", "dungeon",
207 "Enumerate track tile positions/types with ASCII grid for "
208 "spatial reasoning",
209 "dungeon-minecart-map --room=<id>", {}, true, false,
211 REGISTER_BUILTIN_AGENT_TOOL("dungeon-get-room-tiles", "dungeon",
212 "Get room tiles",
213 "dungeon-get-room-tiles --room=<id>", {}, true,
216 "dungeon-set-room-property", "dungeon", "Set room property",
217 "dungeon-set-room-property --room=<id> --key=<key> --value=<val>", {},
219 REGISTER_BUILTIN_AGENT_TOOL("dungeon-room-header", "dungeon",
220 "Debug room header bytes",
221 "dungeon-room-header --room=<id>", {}, true,
224 "dungeon-get-palette", "dungeon",
225 "Resolve a US/OOS room's shared dungeon palette and affected rooms",
226 "dungeon-get-palette --room=<hex> [--index=<0..89>]", {}, true, false,
228 RegisterBuiltinTool<DungeonSetPaletteColorCommandHandler>(
229 registry,
230 {"dungeon-set-palette-color",
231 "dungeon",
232 "Dry-run or persist one US/OOS shared dungeon palette color with CAS, "
233 "manifest, clean-file baseline, backup, atomic-save, and "
234 "external-readback guards",
235 "dungeon-set-palette-color --room=<hex> --index=<0..89> "
236 "--expect-palette-set=<hex> --expect-palette-index=<0..19> "
237 "--expect-color=<hex> --color=<hex> --manifest=<path> [--write]",
238 {},
239 true,
240 false,
242 {},
243 {"write"}});
244
245 // Overworld commands
246 REGISTER_BUILTIN_AGENT_TOOL("overworld-get-tile", "overworld",
247 "Get tile by map/x/y",
248 "overworld-get-tile --map=<id> --x=<x> --y=<y>",
249 {}, true, false, OverworldGetTileCommandHandler)
251 "overworld-set-tile", "overworld", "Set tile by map/x/y",
252 "overworld-set-tile --map=<id> --x=<x> --y=<y> --tile=<tile>", {}, true,
254 REGISTER_BUILTIN_AGENT_TOOL("overworld-find-tile", "overworld",
255 "Find tile locations",
256 "overworld-find-tile --tile=<id>", {}, true,
258 REGISTER_BUILTIN_AGENT_TOOL("overworld-describe-map", "overworld",
259 "Describe a map",
260 "overworld-describe-map --map=<id>", {}, true,
262 REGISTER_BUILTIN_AGENT_TOOL("overworld-list-warps", "overworld", "List warps",
263 "overworld-list-warps --map=<id>", {}, true,
265 REGISTER_BUILTIN_AGENT_TOOL("overworld-list-sprites", "overworld",
266 "List sprites",
267 "overworld-list-sprites --map=<id>", {}, true,
269 REGISTER_BUILTIN_AGENT_TOOL("overworld-get-entrance", "overworld",
270 "Get entrance info",
271 "overworld-get-entrance --id=<id>", {}, true,
273 REGISTER_BUILTIN_AGENT_TOOL("overworld-tile-stats", "overworld",
274 "Get tile statistics", "overworld-tile-stats", {},
276
277 // Message & Dialogue commands
278 REGISTER_BUILTIN_AGENT_TOOL("message-list", "message", "List messages",
279 "message-list", {}, true, false,
281 REGISTER_BUILTIN_AGENT_TOOL("message-read", "message", "Read message",
282 "message-read --id=<id>", {}, true, false,
284 REGISTER_BUILTIN_AGENT_TOOL("message-search", "message", "Search messages",
285 "message-search --query=<text>", {}, true, false,
288 "message-source-sync", "message",
289 "Dry-run or publish canonical expanded-message source artifacts",
290 "message-source-sync --project=<path> --file=<bundle.json> "
291 "[--expected-source-sha256=<sha256>] [--write]",
292 {}, false, false, MessageSourceSyncCommandHandler)
293 REGISTER_BUILTIN_AGENT_TOOL("dialogue-list", "dialogue", "List dialogues",
294 "dialogue-list", {}, true, false,
296 REGISTER_BUILTIN_AGENT_TOOL("dialogue-read", "dialogue", "Read dialogue",
297 "dialogue-read --id=<id>", {}, true, false,
299 REGISTER_BUILTIN_AGENT_TOOL("dialogue-search", "dialogue", "Search dialogues",
300 "dialogue-search --query=<text>", {}, true, false,
302
303 // GUI Automation commands
304 REGISTER_BUILTIN_AGENT_TOOL("gui-place-tile", "gui", "Place a tile on canvas",
305 "gui-place-tile --x=<x> --y=<y> --tile=<id>", {},
306 false, false, GuiPlaceTileCommandHandler)
308 "gui-click", "gui", "Click GUI element",
309 "gui-click --target=<type:label> [--widget-key=<key>] "
310 "[--click-type=<left|right|middle|double>]",
311 {}, false, false, GuiClickCommandHandler)
312 REGISTER_BUILTIN_AGENT_TOOL("gui-type", "gui", "Type text into a GUI element",
313 "gui-type --target=<type:label> --text=<text> "
314 "[--widget-key=<key>] [--clear-first]",
315 {}, false, false, GuiTypeCommandHandler)
316 REGISTER_BUILTIN_AGENT_TOOL("gui-wait", "gui",
317 "Wait for GUI condition/widget",
318 "gui-wait --condition=<condition> "
319 "[--widget-key=<key>] [--timeout-ms=<ms>]",
320 {}, false, false, GuiWaitCommandHandler)
322 "gui-assert", "gui", "Assert GUI condition/widget",
323 "gui-assert --condition=<condition> [--widget-key=<key>]", {}, false,
325 REGISTER_BUILTIN_AGENT_TOOL("gui-discover-tool", "gui", "Discover GUI tools",
326 "gui-discover-tool", {}, false, false,
328 REGISTER_BUILTIN_AGENT_TOOL("gui-screenshot", "gui", "Take screenshot",
329 "gui-screenshot", {}, false, false,
331 REGISTER_BUILTIN_AGENT_TOOL("gui-summarize-widgets", "gui",
332 "Get a high-level summary of visible GUI widgets",
333 "gui-summarize-widgets", {}, false, false,
335
336 // Music commands
337 REGISTER_BUILTIN_AGENT_TOOL("music-list", "music", "List music tracks",
338 "music-list", {}, true, false,
340 REGISTER_BUILTIN_AGENT_TOOL("music-info", "music", "Get music info",
341 "music-info --id=<id>", {}, true, false,
343 REGISTER_BUILTIN_AGENT_TOOL("music-tracks", "music", "List tracks",
344 "music-tracks", {}, true, false,
346
347 // Sprite commands
348 REGISTER_BUILTIN_AGENT_TOOL("sprite-list", "sprite", "List sprites",
349 "sprite-list", {}, true, false,
351 REGISTER_BUILTIN_AGENT_TOOL("sprite-properties", "sprite",
352 "Get sprite properties",
353 "sprite-properties --id=<id>", {}, true, false,
355 REGISTER_BUILTIN_AGENT_TOOL("sprite-palette", "sprite", "Get sprite palette",
356 "sprite-palette --id=<id>", {}, true, false,
358
359 // Filesystem commands
361 "filesystem-list", "filesystem", "List directory contents",
362 "filesystem-list --path=<path>", {}, false, false, FileSystemListTool)
364 "filesystem-read", "filesystem", "Read file contents",
365 "filesystem-read --path=<path>", {}, false, false, FileSystemReadTool)
367 "filesystem-exists", "filesystem", "Check file existence",
368 "filesystem-exists --path=<path>", {}, false, false, FileSystemExistsTool)
369 REGISTER_BUILTIN_AGENT_TOOL("filesystem-info", "filesystem", "Get file info",
370 "filesystem-info --path=<path>", {}, false, false,
372
373 // Build commands
375 "build-configure", "build",
376 "Configure the build system with a CMake preset",
377 "build-configure --preset <preset> [--build-dir <dir>] "
378 "[--verbose]",
379 {}, false, false, BuildConfigureCommandHandler)
381 "build-compile", "build", "Build a specific target or all targets",
382 "build-compile [--target <target>] [--config <config>] "
383 "[--build-dir <dir>] [--verbose]",
384 {}, false, false, BuildCompileCommandHandler)
386 "build-test", "build", "Run tests with optional filter",
387 "build-test [--filter <pattern>] [--rom-path <path>] "
388 "[--build-dir <dir>] [--verbose]",
389 {}, false, false, BuildTestCommandHandler)
390 REGISTER_BUILTIN_AGENT_TOOL("build-status", "build",
391 "Get current build operation status",
392 "build-status [--build-dir <dir>]", {}, false,
394
395 // Memory inspector commands
396 REGISTER_BUILTIN_AGENT_TOOL("memory-analyze", "memory",
397 "Analyze memory region",
398 "memory-analyze --address=<addr> --length=<len>",
399 {}, true, false, MemoryAnalyzeTool)
401 "memory-search", "memory", "Search for byte pattern",
402 "memory-search --pattern=<hex>", {}, true, false, MemorySearchTool)
403 REGISTER_BUILTIN_AGENT_TOOL("memory-compare", "memory",
404 "Compare memory regions", "memory-compare", {},
405 true, false, MemoryCompareTool)
406 REGISTER_BUILTIN_AGENT_TOOL("memory-check", "memory", "Check memory",
407 "memory-check", {}, true, false, MemoryCheckTool)
408 REGISTER_BUILTIN_AGENT_TOOL("memory-regions", "memory",
409 "List known memory regions", "memory-regions", {},
410 false, false, MemoryRegionsTool)
411
412 // Test helper tools
413 REGISTER_BUILTIN_AGENT_TOOL("tools-helper-list", "tools",
414 "List test helper tools", "tools-helper-list", {},
415 false, false, ToolsListCommandHandler)
416 REGISTER_BUILTIN_AGENT_TOOL("tools-harness-state", "tools",
417 "Generate WRAM state", "tools-harness-state", {},
420 "tools-extract-values", "tools", "Extract vanilla ROM values",
421 "tools-extract-values", {}, true, false, ToolsExtractValuesCommandHandler)
422 REGISTER_BUILTIN_AGENT_TOOL("tools-extract-golden", "tools",
423 "Extract golden data", "tools-extract-golden", {},
425 REGISTER_BUILTIN_AGENT_TOOL("tools-patch-v3", "tools",
426 "Create v3 patched ROM", "tools-patch-v3", {},
427 true, false, ToolsPatchV3CommandHandler)
428
429 // Visual analysis tools
431 "visual-find-similar-tiles", "visual", "Find tiles with similar patterns",
432 "visual-find-similar-tiles", {}, true, false, TileSimilarityTool)
434 "visual-analyze-spritesheet", "visual", "Identify unused regions",
435 "visual-analyze-spritesheet", {}, true, false, SpritesheetAnalysisTool)
436 REGISTER_BUILTIN_AGENT_TOOL("visual-palette-usage", "visual",
437 "Analyze palette usage", "visual-palette-usage",
438 {}, true, false, PaletteUsageTool)
440 "visual-tile-histogram", "visual", "Generate tile usage histogram",
441 "visual-tile-histogram", {}, true, false, TileHistogramTool)
442
443 // Code generation tools
444 REGISTER_BUILTIN_AGENT_TOOL("codegen-asm-hook", "codegen",
445 "Generate ASM hook", "codegen-asm-hook", {}, true,
446 false, CodeGenAsmHookTool)
447 REGISTER_BUILTIN_AGENT_TOOL("codegen-freespace-patch", "codegen",
448 "Generate patch", "codegen-freespace-patch", {},
449 true, false, CodeGenFreespacePatchTool)
450 REGISTER_BUILTIN_AGENT_TOOL("codegen-sprite-template", "codegen",
451 "Generate sprite ASM", "codegen-sprite-template",
452 {}, false, false, CodeGenSpriteTemplateTool)
453 REGISTER_BUILTIN_AGENT_TOOL("codegen-event-handler", "codegen",
454 "Generate event handler", "codegen-event-handler",
455 {}, false, false, CodeGenEventHandlerTool)
456
457 // Project management tools
458 REGISTER_BUILTIN_AGENT_TOOL("project-status", "project",
459 "Show current project state", "project-status",
460 {}, true, true, ProjectStatusTool)
461 REGISTER_BUILTIN_AGENT_TOOL("project-snapshot", "project",
462 "Create named checkpoint", "project-snapshot", {},
463 true, true, ProjectSnapshotTool)
464 REGISTER_BUILTIN_AGENT_TOOL("project-restore", "project",
465 "Restore ROM to checkpoint", "project-restore",
466 {}, true, true, ProjectRestoreTool)
467 REGISTER_BUILTIN_AGENT_TOOL("project-export", "project", "Export project",
468 "project-export", {}, true, true,
470 REGISTER_BUILTIN_AGENT_TOOL("project-import", "project", "Import project",
471 "project-import", {}, false, true,
473 REGISTER_BUILTIN_AGENT_TOOL("project-diff", "project",
474 "Compare project states", "project-diff", {},
475 true, true, ProjectDiffTool)
477 "project-graph", "project",
478 "Query project graph info (files, symbols, config)",
479 "project-graph --query=<info|files|symbols|lookup|writes|bank> "
480 "[--path=<folder>] [--symbol=<name>] [--address=<hex>] [--bank=<hex>]",
481 {}, true, true, ProjectGraphTool)
482
483#ifdef YAZE_WITH_GRPC
484 REGISTER_BUILTIN_AGENT_TOOL("emulator-step", "emulator", "Step emulator",
485 "emulator-step", {}, true, false,
487 REGISTER_BUILTIN_AGENT_TOOL("emulator-run", "emulator", "Run emulator",
488 "emulator-run", {}, true, false,
490 REGISTER_BUILTIN_AGENT_TOOL("emulator-pause", "emulator", "Pause emulator",
491 "emulator-pause", {}, true, false,
493 REGISTER_BUILTIN_AGENT_TOOL("emulator-reset", "emulator", "Reset emulator",
494 "emulator-reset", {}, true, false,
496 REGISTER_BUILTIN_AGENT_TOOL("emulator-get-state", "emulator",
497 "Get emulator state", "emulator-get-state", {},
499 REGISTER_BUILTIN_AGENT_TOOL("emulator-set-breakpoint", "emulator",
500 "Set breakpoint", "emulator-set-breakpoint", {},
502 REGISTER_BUILTIN_AGENT_TOOL("emulator-clear-breakpoint", "emulator",
503 "Clear breakpoint", "emulator-clear-breakpoint",
504 {}, true, false,
506 REGISTER_BUILTIN_AGENT_TOOL("emulator-list-breakpoints", "emulator",
507 "List breakpoints", "emulator-list-breakpoints",
508 {}, true, false,
510 REGISTER_BUILTIN_AGENT_TOOL("emulator-read-memory", "emulator", "Read memory",
511 "emulator-read-memory", {}, true, false,
513 REGISTER_BUILTIN_AGENT_TOOL("emulator-write-memory", "emulator",
514 "Write memory", "emulator-write-memory", {}, true,
516 REGISTER_BUILTIN_AGENT_TOOL("emulator-get-registers", "emulator",
517 "Get registers", "emulator-get-registers", {},
519 REGISTER_BUILTIN_AGENT_TOOL("emulator-get-metrics", "emulator", "Get metrics",
520 "emulator-get-metrics", {}, true, false,
522#endif
523}
524
525#undef REGISTER_BUILTIN_AGENT_TOOL
526
527} // namespace agent
528} // namespace cli
529} // namespace yaze
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:28
std::string GetUsage() const override
Get the command usage string.
bool RequiresRom() const override
Check if the command requires a loaded ROM.
std::string GetName() const override
Get the command name.
absl::Status ValidateArgs(const resources::ArgumentParser &) override
Validate command arguments.
absl::Status Execute(Rom *, const resources::ArgumentParser &, resources::OutputFormatter &) override
Execute the command business logic.
std::string GetName() const override
Get the command name.
bool RequiresRom() const override
Check if the command requires a loaded ROM.
absl::Status Execute(Rom *, const resources::ArgumentParser &, resources::OutputFormatter &) override
Execute the command business logic.
std::string GetUsage() const override
Get the command usage string.
absl::Status ValidateArgs(const resources::ArgumentParser &) override
Validate command arguments.
std::string GetUsage() const override
Get the command usage string.
absl::Status Execute(Rom *, const resources::ArgumentParser &, resources::OutputFormatter &) override
Execute the command business logic.
bool RequiresRom() const override
Check if the command requires a loaded ROM.
std::string GetName() const override
Get the command name.
absl::Status ValidateArgs(const resources::ArgumentParser &) override
Validate command arguments.
Centralized registry for all agent tools.
void RegisterTool(const ToolDefinition &def, HandlerFactory factory)
Generate ASM hook at a specific ROM address.
Generate patch using detected freespace regions.
Check if a file or directory exists.
Get detailed information about a file or directory.
List files and directories in a given path.
Analyze a memory region with structure awareness.
Check memory for anomalies and corruption.
Compare memory regions or detect changes.
List known memory regions and their descriptions.
Search for byte patterns in memory.
Analyze palette usage across maps.
Export project as portable archive.
Provides the AI agent with structured information about the project.
Restore ROM to named checkpoint.
Create named checkpoint with edit deltas.
Show current project state and pending edits.
Analyze spritesheets for unused graphics regions.
Command handler for listing dialogue messages.
Command handler for reading dialogue messages.
Command handler for searching dialogue messages.
Command handler for describing a dungeon room.
Command handler for exporting room data.
Resolve and inspect the shared dungeon palette used by one room.
Command handler for listing objects in a room.
Command handler for listing sprites in a dungeon room.
Command handler for reading raw room header bytes (diagnostic)
Command handler for setting room properties.
Command handler for GUI assertions.
Command handler for clicking GUI elements.
Command handler for discovering GUI tools.
Command handler for placing tiles via GUI automation.
Command handler for taking screenshots.
Command handler for summarizing GUI widgets.
Command handler for typing into GUI inputs.
Command handler for waiting on GUI conditions.
Command handler for listing messages.
Command handler for reading messages.
Command handler for searching messages.
Merge an expanded-message subset into project-owned source artifacts.
Command handler for getting music track information.
Command handler for listing music tracks.
Command handler for getting detailed music track data.
Command handler for describing overworld maps.
Command handler for finding tiles in overworld.
Command handler for getting entrance information.
Command handler for listing sprites in overworld.
Command handler for listing warps in overworld.
Command handler for getting tile statistics.
Command handler for listing resource labels by type.
Command handler for searching resource labels.
Command handler for listing sprites.
Command handler for getting sprite palette information.
Command handler for getting sprite properties.
Extract comprehensive golden data from ROM.
Create v3 ZSCustomOverworld patched ROM.
Utility for parsing common CLI argument patterns.
Base class for CLI command handlers.
Utility for consistent output formatting across commands.
Code generation tools for AI agents.
void RegisterBuiltinTool(ToolRegistry &registry, ToolDefinition definition)
void RegisterBuiltinAgentTools(ToolRegistry &registry)
Project management tools for AI agents.
Metadata describing a tool for the LLM.
CLI command handlers for test helper tools.
#define REGISTER_BUILTIN_AGENT_TOOL(Name, Category, Desc, Usage, Examples, ReqRom, ReqProject, HandlerClass)
Visual analysis tools for AI agents.