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
16#ifdef YAZE_WITH_GRPC
18#endif
28
29namespace yaze {
30namespace cli {
31namespace agent {
32
33using namespace yaze::cli::handlers;
34using namespace yaze::cli::agent::tools;
35
36namespace {
37
38template <typename HandlerClass>
39void RegisterBuiltinTool(ToolRegistry& registry, ToolDefinition definition) {
40 registry.RegisterTool(std::move(definition),
41 []() { return std::make_unique<HandlerClass>(); });
42}
43
44#define REGISTER_BUILTIN_AGENT_TOOL(Name, Category, Desc, Usage, Examples, \
45 ReqRom, ReqProject, HandlerClass) \
46 RegisterBuiltinTool<HandlerClass>(registry, {Name, \
47 Category, \
48 Desc, \
49 Usage, \
50 Examples, \
51 ReqRom, \
52 ReqProject, \
53 ToolAccess::kReadOnly, \
54 {}, \
55 {}});
56
57} // namespace
58
59// Placeholder classes for meta-tools (they're handled specially in the
60// dispatcher) but still need handlers for registry metadata.
62 public:
63 std::string GetName() const override { return "tools-list"; }
64 std::string GetUsage() const override { return "tools-list"; }
65 bool RequiresRom() const override { return false; }
66
67 protected:
68 absl::Status ValidateArgs(const resources::ArgumentParser&) override {
69 return absl::OkStatus();
70 }
71 absl::Status Execute(Rom*, const resources::ArgumentParser&,
73 return absl::UnimplementedError(
74 "Handled by ToolDispatcher meta-tool handler");
75 }
76};
77
79 public:
80 std::string GetName() const override { return "tools-describe"; }
81 std::string GetUsage() const override {
82 return "tools-describe --name=<tool>";
83 }
84 bool RequiresRom() const override { return false; }
85
86 protected:
87 absl::Status ValidateArgs(const resources::ArgumentParser&) override {
88 return absl::OkStatus();
89 }
90 absl::Status Execute(Rom*, const resources::ArgumentParser&,
92 return absl::UnimplementedError(
93 "Handled by ToolDispatcher meta-tool handler");
94 }
95};
96
98 public:
99 std::string GetName() const override { return "tools-search"; }
100 std::string GetUsage() const override {
101 return "tools-search --query=<keyword>";
102 }
103 bool RequiresRom() const override { return false; }
104
105 protected:
106 absl::Status ValidateArgs(const resources::ArgumentParser&) override {
107 return absl::OkStatus();
108 }
109 absl::Status Execute(Rom*, const resources::ArgumentParser&,
110 resources::OutputFormatter&) override {
111 return absl::UnimplementedError(
112 "Handled by ToolDispatcher meta-tool handler");
113 }
114};
115
117 // Meta-tools (handled specially but registered for discovery)
118 REGISTER_BUILTIN_AGENT_TOOL("tools-list", "meta", "List all available tools",
119 "tools-list", {}, false, false,
121 REGISTER_BUILTIN_AGENT_TOOL("tools-describe", "meta",
122 "Get detailed information about a tool",
123 "tools-describe --name=<tool>", {}, false, false,
125 REGISTER_BUILTIN_AGENT_TOOL("tools-search", "meta", "Search tools by keyword",
126 "tools-search --query=<keyword>", {}, false,
128
129 // Resource commands
131 "resource-list", "resource", "List resource labels",
132 "resource-list --type=<type>", {"resource-list --type=dungeon"}, true,
135 "resource-search", "resource", "Search resource labels",
136 "resource-search --query=<query>", {"resource-search --query=castle"},
137 true, false, ResourceSearchCommandHandler)
138
139 // Dungeon commands
140 REGISTER_BUILTIN_AGENT_TOOL("dungeon-list-sprites", "dungeon",
141 "List sprites in a dungeon room",
142 "dungeon-list-sprites --room=<id>", {}, true,
144 REGISTER_BUILTIN_AGENT_TOOL("dungeon-describe-room", "dungeon",
145 "Describe a room",
146 "dungeon-describe-room --room=<id>", {}, true,
148 REGISTER_BUILTIN_AGENT_TOOL("dungeon-export-room", "dungeon",
149 "Export room data",
150 "dungeon-export-room --room=<id>", {}, true,
152 REGISTER_BUILTIN_AGENT_TOOL("dungeon-list-objects", "dungeon",
153 "List room objects",
154 "dungeon-list-objects --room=<id>", {}, true,
156 REGISTER_BUILTIN_AGENT_TOOL("dungeon-list-custom-collision", "dungeon",
157 "List custom collision tiles for a room",
158 "dungeon-list-custom-collision --room=<id>", {},
159 true, false,
162 "dungeon-export-custom-collision-json", "dungeon",
163 "Export custom collision maps to JSON",
164 "dungeon-export-custom-collision-json --out=<path> "
165 "[--room=<id>|--rooms=<ids>|--all] [--report=<path>]",
167 RegisterBuiltinTool<DungeonImportCustomCollisionJsonCommandHandler>(
168 registry,
169 {"dungeon-import-custom-collision-json",
170 "dungeon",
171 "Import custom collision maps and immediately save unless --dry-run",
172 "dungeon-import-custom-collision-json --in=<path> "
173 "[--dry-run [--report=<path>]] [--sandbox | --mock-rom] "
174 "[--replace-all --force]",
175 {},
176 true,
177 true,
179 {},
180 {"dry-run", "sandbox", "mock-rom", "replace-all", "force"}});
182 "dungeon-export-water-fill-json", "dungeon",
183 "Export water fill zones to JSON",
184 "dungeon-export-water-fill-json --out=<path> "
185 "[--room=<id>|--rooms=<ids>|--all] [--report=<path>]",
187 RegisterBuiltinTool<DungeonImportWaterFillJsonCommandHandler>(
188 registry,
189 {"dungeon-import-water-fill-json",
190 "dungeon",
191 "Import water fill zones and immediately save unless --dry-run",
192 "dungeon-import-water-fill-json --in=<path> "
193 "[--dry-run [--report=<path>]] [--sandbox | --mock-rom] "
194 "[--strict-masks]",
195 {},
196 true,
197 true,
199 {},
200 {"dry-run", "sandbox", "mock-rom", "strict-masks"}});
202 "dungeon-minecart-audit", "dungeon",
203 "Audit minecart-related room data (objects/sprites/collision)",
204 "dungeon-minecart-audit --room=<id>", {}, true, false,
207 "dungeon-minecart-map", "dungeon",
208 "Enumerate track tile positions/types with ASCII grid for "
209 "spatial reasoning",
210 "dungeon-minecart-map --room=<id>", {}, true, false,
212 REGISTER_BUILTIN_AGENT_TOOL("dungeon-get-room-tiles", "dungeon",
213 "Get room tiles",
214 "dungeon-get-room-tiles --room=<id>", {}, true,
217 "dungeon-tile-types", "dungeon",
218 "Vanilla collision tile types ($7F2000/$7F3000); pits are 0x20",
219 "dungeon-tile-types --room=<id> [--layer=upper|lower|both] "
220 "[--type=<hex>] [--no-rows]",
221 {}, true, false, DungeonTileTypesCommandHandler)
223 "dungeon-set-room-property", "dungeon", "Set room property",
224 "dungeon-set-room-property --room=<id> --key=<key> --value=<val>", {},
226 REGISTER_BUILTIN_AGENT_TOOL("dungeon-room-header", "dungeon",
227 "Debug room header bytes",
228 "dungeon-room-header --room=<id>", {}, true,
231 "dungeon-get-palette", "dungeon",
232 "Resolve a US/OOS room's shared dungeon palette and affected rooms",
233 "dungeon-get-palette --room=<hex> [--index=<0..89>]", {}, true, false,
235 RegisterBuiltinTool<DungeonSetPaletteColorCommandHandler>(
236 registry,
237 {"dungeon-set-palette-color",
238 "dungeon",
239 "Dry-run or persist one US/OOS shared dungeon palette color with CAS, "
240 "manifest, clean-file baseline, backup, atomic-save, and "
241 "external-readback guards",
242 "dungeon-set-palette-color --room=<hex> --index=<0..89> "
243 "--expect-palette-set=<hex> --expect-palette-index=<0..19> "
244 "--expect-color=<hex> --color=<hex> --manifest=<path> [--write]",
245 {},
246 true,
247 false,
249 {},
250 {"write"}});
251
252 // Overworld commands
254 "overworld-get-tile", "overworld",
255 "Get the tile16 id at an overworld area position. map is a hex screen "
256 "id; x/y are decimal tile16 coordinates relative to the parent area's "
257 "top-left (0-31 small, 0-63 on doubled axes of large/wide/tall areas)",
258 "overworld-get-tile --map=<hex> --x=<area_tile_x> --y=<area_tile_y>", {},
261 "overworld-set-tile", "overworld",
262 "Set one tile16 id at an overworld area position (coordinates as "
263 "overworld-get-tile). Dry-run unless write is set",
264 "overworld-set-tile --map=<hex> --x=<area_tile_x> --y=<area_tile_y> "
265 "--tile=<hex> [--write]",
266 {}, true, true, OverworldSetTileCommandHandler)
268 "overworld-find-tile", "overworld",
269 "Find every position of a tile16 id; x/y in each match feed "
270 "overworld-get-tile",
271 "overworld-find-tile --tile=<hex> [--map=<hex>] "
272 "[--world=<light|dark|special>]",
273 {}, true, false, OverworldFindTileCommandHandler)
274 REGISTER_BUILTIN_AGENT_TOOL("overworld-describe-map", "overworld",
275 "Describe a map",
276 "overworld-describe-map --screen=<hex>", {}, true,
278 REGISTER_BUILTIN_AGENT_TOOL("overworld-list-warps", "overworld", "List warps",
279 "overworld-list-warps [--screen=<hex>]", {}, true,
282 "overworld-list-sprites", "overworld", "List sprites",
283 "overworld-list-sprites --screen=<id> "
284 "[--phase=0|1|2]",
285 {}, true, false, OverworldListSpritesCommandHandler)
286 REGISTER_BUILTIN_AGENT_TOOL("overworld-get-entrance", "overworld",
287 "Get entrance info",
288 "overworld-get-entrance --entrance=<hex>", {},
291 "overworld-tile-stats", "overworld",
292 "Count tile16 usage per screen, per world and per tile16 id",
293 "overworld-tile-stats [--map=<hex>] [--world=<light|dark|special>] "
294 "[--tile=<hex>] [--top=<n>]",
295 {}, true, false, OverworldTileStatsCommandHandler)
296
297 // Message & Dialogue commands
298 REGISTER_BUILTIN_AGENT_TOOL("message-list", "message", "List messages",
299 "message-list", {}, true, false,
301 REGISTER_BUILTIN_AGENT_TOOL("message-read", "message", "Read message",
302 "message-read --id=<id>", {}, true, false,
304 REGISTER_BUILTIN_AGENT_TOOL("message-search", "message", "Search messages",
305 "message-search --query=<text>", {}, true, false,
308 "message-source-sync", "message",
309 "Dry-run or publish canonical expanded-message source artifacts",
310 "message-source-sync --project=<path> --file=<bundle.json> "
311 "[--expected-source-sha256=<sha256>] [--write]",
312 {}, false, false, MessageSourceSyncCommandHandler)
313 REGISTER_BUILTIN_AGENT_TOOL("dialogue-list", "dialogue", "List dialogues",
314 "dialogue-list", {}, true, false,
316 REGISTER_BUILTIN_AGENT_TOOL("dialogue-read", "dialogue", "Read dialogue",
317 "dialogue-read --id=<id>", {}, true, false,
319 REGISTER_BUILTIN_AGENT_TOOL("dialogue-search", "dialogue", "Search dialogues",
320 "dialogue-search --query=<text>", {}, true, false,
322
323 // GUI Automation commands
324 REGISTER_BUILTIN_AGENT_TOOL("gui-place-tile", "gui", "Place a tile on canvas",
325 "gui-place-tile --x=<x> --y=<y> --tile=<id>", {},
326 false, false, GuiPlaceTileCommandHandler)
328 "gui-click", "gui", "Click GUI element",
329 "gui-click --target=<type:label> [--widget-key=<key>] "
330 "[--click-type=<left|right|middle|double>]",
331 {}, false, false, GuiClickCommandHandler)
332 REGISTER_BUILTIN_AGENT_TOOL("gui-type", "gui", "Type text into a GUI element",
333 "gui-type --target=<type:label> --text=<text> "
334 "[--widget-key=<key>] [--clear-first]",
335 {}, false, false, GuiTypeCommandHandler)
336 REGISTER_BUILTIN_AGENT_TOOL("gui-wait", "gui",
337 "Wait for GUI condition/widget",
338 "gui-wait --condition=<condition> "
339 "[--widget-key=<key>] [--timeout-ms=<ms>]",
340 {}, false, false, GuiWaitCommandHandler)
342 "gui-assert", "gui", "Assert GUI condition/widget",
343 "gui-assert --condition=<condition> [--widget-key=<key>]", {}, false,
345 REGISTER_BUILTIN_AGENT_TOOL("gui-discover-tool", "gui", "Discover GUI tools",
346 "gui-discover-tool", {}, false, false,
348 REGISTER_BUILTIN_AGENT_TOOL("gui-screenshot", "gui", "Take screenshot",
349 "gui-screenshot", {}, false, false,
351 REGISTER_BUILTIN_AGENT_TOOL("gui-summarize-widgets", "gui",
352 "Get a high-level summary of visible GUI widgets",
353 "gui-summarize-widgets", {}, false, false,
355
356 // Music commands
357 REGISTER_BUILTIN_AGENT_TOOL("music-list", "music", "List music tracks",
358 "music-list", {}, true, false,
360 REGISTER_BUILTIN_AGENT_TOOL("music-info", "music", "Get music info",
361 "music-info --id=<id>", {}, true, false,
363 REGISTER_BUILTIN_AGENT_TOOL("music-tracks", "music", "List tracks",
364 "music-tracks", {}, true, false,
366
367 // Sprite commands
368 REGISTER_BUILTIN_AGENT_TOOL("sprite-list", "sprite", "List sprites",
369 "sprite-list", {}, true, false,
371 REGISTER_BUILTIN_AGENT_TOOL("sprite-properties", "sprite",
372 "Get sprite properties",
373 "sprite-properties --id=<id>", {}, true, false,
375 REGISTER_BUILTIN_AGENT_TOOL("sprite-palette", "sprite", "Get sprite palette",
376 "sprite-palette --id=<id>", {}, true, false,
378
379 // Filesystem commands
381 "filesystem-list", "filesystem", "List directory contents",
382 "filesystem-list --path=<path>", {}, false, false, FileSystemListTool)
384 "filesystem-read", "filesystem", "Read file contents",
385 "filesystem-read --path=<path>", {}, false, false, FileSystemReadTool)
387 "filesystem-exists", "filesystem", "Check file existence",
388 "filesystem-exists --path=<path>", {}, false, false, FileSystemExistsTool)
389 REGISTER_BUILTIN_AGENT_TOOL("filesystem-info", "filesystem", "Get file info",
390 "filesystem-info --path=<path>", {}, false, false,
392
393 // Build commands
395 "build-configure", "build",
396 "Configure the build system with a CMake preset",
397 "build-configure --preset <preset> [--build-dir <dir>] "
398 "[--verbose]",
399 {}, false, false, BuildConfigureCommandHandler)
401 "build-compile", "build", "Build a specific target or all targets",
402 "build-compile [--target <target>] [--config <config>] "
403 "[--build-dir <dir>] [--verbose]",
404 {}, false, false, BuildCompileCommandHandler)
406 "build-test", "build", "Run tests with optional filter",
407 "build-test [--filter <pattern>] [--rom-path <path>] "
408 "[--build-dir <dir>] [--verbose]",
409 {}, false, false, BuildTestCommandHandler)
410 REGISTER_BUILTIN_AGENT_TOOL("build-status", "build",
411 "Get current build operation status",
412 "build-status [--build-dir <dir>]", {}, false,
414
415 // Memory inspector commands
416 REGISTER_BUILTIN_AGENT_TOOL("memory-analyze", "memory",
417 "Analyze memory region",
418 "memory-analyze --address=<addr> --length=<len>",
419 {}, true, false, MemoryAnalyzeTool)
421 "memory-search", "memory", "Search for byte pattern",
422 "memory-search --pattern=<hex>", {}, true, false, MemorySearchTool)
423 REGISTER_BUILTIN_AGENT_TOOL("memory-compare", "memory",
424 "Compare memory regions", "memory-compare", {},
425 true, false, MemoryCompareTool)
426 REGISTER_BUILTIN_AGENT_TOOL("memory-check", "memory", "Check memory",
427 "memory-check", {}, true, false, MemoryCheckTool)
428 REGISTER_BUILTIN_AGENT_TOOL("memory-regions", "memory",
429 "List known memory regions", "memory-regions", {},
430 false, false, MemoryRegionsTool)
431
432 // Test helper tools
433 REGISTER_BUILTIN_AGENT_TOOL("tools-helper-list", "tools",
434 "List test helper tools", "tools-helper-list", {},
435 false, false, ToolsListCommandHandler)
436 REGISTER_BUILTIN_AGENT_TOOL("tools-harness-state", "tools",
437 "Generate WRAM state", "tools-harness-state", {},
440 "tools-extract-values", "tools", "Extract vanilla ROM values",
441 "tools-extract-values", {}, true, false, ToolsExtractValuesCommandHandler)
442 REGISTER_BUILTIN_AGENT_TOOL("tools-extract-golden", "tools",
443 "Extract golden data", "tools-extract-golden", {},
445 REGISTER_BUILTIN_AGENT_TOOL("tools-patch-v3", "tools",
446 "Create v3 patched ROM", "tools-patch-v3", {},
447 true, false, ToolsPatchV3CommandHandler)
448
449 // Visual analysis tools
451 "visual-find-similar-tiles", "visual", "Find tiles with similar patterns",
452 "visual-find-similar-tiles", {}, true, false, TileSimilarityTool)
454 "visual-analyze-spritesheet", "visual", "Identify unused regions",
455 "visual-analyze-spritesheet", {}, true, false, SpritesheetAnalysisTool)
456 REGISTER_BUILTIN_AGENT_TOOL("visual-palette-usage", "visual",
457 "Analyze palette usage", "visual-palette-usage",
458 {}, true, false, PaletteUsageTool)
460 "visual-tile-histogram", "visual", "Generate tile usage histogram",
461 "visual-tile-histogram", {}, true, false, TileHistogramTool)
462
463 // Code generation tools
464 REGISTER_BUILTIN_AGENT_TOOL("codegen-asm-hook", "codegen",
465 "Generate ASM hook", "codegen-asm-hook", {}, true,
466 false, CodeGenAsmHookTool)
467 REGISTER_BUILTIN_AGENT_TOOL("codegen-freespace-patch", "codegen",
468 "Generate patch", "codegen-freespace-patch", {},
469 true, false, CodeGenFreespacePatchTool)
470 REGISTER_BUILTIN_AGENT_TOOL("codegen-sprite-template", "codegen",
471 "Generate sprite ASM", "codegen-sprite-template",
472 {}, false, false, CodeGenSpriteTemplateTool)
473 REGISTER_BUILTIN_AGENT_TOOL("codegen-event-handler", "codegen",
474 "Generate event handler", "codegen-event-handler",
475 {}, false, false, CodeGenEventHandlerTool)
476
477 // Project management tools
478 REGISTER_BUILTIN_AGENT_TOOL("project-status", "project",
479 "Show current project state", "project-status",
480 {}, true, true, ProjectStatusTool)
481 REGISTER_BUILTIN_AGENT_TOOL("project-snapshot", "project",
482 "Create named checkpoint", "project-snapshot", {},
483 true, true, ProjectSnapshotTool)
484 REGISTER_BUILTIN_AGENT_TOOL("project-restore", "project",
485 "Restore ROM to checkpoint", "project-restore",
486 {}, true, true, ProjectRestoreTool)
487 REGISTER_BUILTIN_AGENT_TOOL("project-export", "project", "Export project",
488 "project-export", {}, true, true,
490 REGISTER_BUILTIN_AGENT_TOOL("project-import", "project", "Import project",
491 "project-import", {}, false, true,
493 REGISTER_BUILTIN_AGENT_TOOL("project-diff", "project",
494 "Compare project states", "project-diff", {},
495 true, true, ProjectDiffTool)
497 "project-graph", "project",
498 "Query project graph info (files, symbols, config)",
499 "project-graph --query=<info|files|symbols|lookup|writes|bank> "
500 "[--path=<folder>] [--symbol=<name>] [--address=<hex>] [--bank=<hex>]",
501 {}, true, true, ProjectGraphTool)
502
503#ifdef YAZE_WITH_GRPC
504 REGISTER_BUILTIN_AGENT_TOOL("emulator-step", "emulator", "Step emulator",
505 "emulator-step", {}, true, false,
507 REGISTER_BUILTIN_AGENT_TOOL("emulator-run", "emulator", "Run emulator",
508 "emulator-run", {}, true, false,
510 REGISTER_BUILTIN_AGENT_TOOL("emulator-pause", "emulator", "Pause emulator",
511 "emulator-pause", {}, true, false,
513 REGISTER_BUILTIN_AGENT_TOOL("emulator-reset", "emulator", "Reset emulator",
514 "emulator-reset", {}, true, false,
516 REGISTER_BUILTIN_AGENT_TOOL("emulator-get-state", "emulator",
517 "Get emulator state", "emulator-get-state", {},
519 REGISTER_BUILTIN_AGENT_TOOL("emulator-set-breakpoint", "emulator",
520 "Set breakpoint", "emulator-set-breakpoint", {},
522 REGISTER_BUILTIN_AGENT_TOOL("emulator-clear-breakpoint", "emulator",
523 "Clear breakpoint", "emulator-clear-breakpoint",
524 {}, true, false,
526 REGISTER_BUILTIN_AGENT_TOOL("emulator-list-breakpoints", "emulator",
527 "List breakpoints", "emulator-list-breakpoints",
528 {}, true, false,
530 REGISTER_BUILTIN_AGENT_TOOL("emulator-read-memory", "emulator", "Read memory",
531 "emulator-read-memory", {}, true, false,
533 REGISTER_BUILTIN_AGENT_TOOL("emulator-write-memory", "emulator",
534 "Write memory", "emulator-write-memory", {}, true,
536 REGISTER_BUILTIN_AGENT_TOOL("emulator-get-registers", "emulator",
537 "Get registers", "emulator-get-registers", {},
539 REGISTER_BUILTIN_AGENT_TOOL("emulator-get-metrics", "emulator", "Get metrics",
540 "emulator-get-metrics", {}, true, false,
542#endif
543}
544
545#undef REGISTER_BUILTIN_AGENT_TOOL
546
547} // namespace agent
548} // namespace cli
549} // 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:49
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.