7#include "absl/flags/declare.h"
8#include "absl/flags/flag.h"
9#include "absl/status/status.h"
36 return handler.
Run(args, rom);
41 return handler.
Run(args, rom);
46 return handler.
Run(args, rom);
51 return handler.
Run(args, rom);
56 return handler.
Run(args, rom);
61 return handler.
Run(args, rom);
66 return handler.
Run(args, rom);
74 "Usage: agent <subcommand> [options]\n"
76 "AI-Powered Agent Subcommands:\n"
77 " simple-chat Simple text-based chat (recommended for testing)\n"
78 " Modes: interactive | piped | batch | single-message\n"
79 " Example: agent simple-chat \"What dungeons exist?\" --rom=zelda3.sfc\n"
80 " Example: agent simple-chat --rom=zelda3.sfc --ai_provider=ollama\n"
81 " Example: echo \"List sprites\" | agent simple-chat --rom=zelda3.sfc\n"
82 " Example: agent simple-chat --file=queries.txt --rom=zelda3.sfc\n"
84 " test-conversation Run automated test conversation with AI\n"
85 " Example: agent test-conversation --rom=zelda3.sfc --ai_provider=ollama\n"
87 " chat Full FTXUI-based chat interface\n"
88 " Example: agent chat --rom=zelda3.sfc\n"
90 "ROM Inspection Tools (can be called by AI or directly):\n"
91 " resource-list List labeled resources (dungeons, sprites, etc.)\n"
92 " Example: agent resource-list --type=dungeon --format=json\n"
94 " resource-search Search resource labels by fuzzy text\n"
95 " Example: agent resource-search --query=soldier --type=sprite\n"
97 " dungeon-list-sprites List sprites in a dungeon room\n"
98 " Example: agent dungeon-list-sprites --room=5 --format=json\n"
100 " dungeon-describe-room Summarize metadata for a dungeon room\n"
101 " Example: agent dungeon-describe-room --room=0x12 --format=text\n"
103 " overworld-find-tile Search for tile placements in overworld\n"
104 " Example: agent overworld-find-tile --tile=0x02E --format=json\n"
106 " overworld-describe-map Get metadata about an overworld map\n"
107 " Example: agent overworld-describe-map --map=0 --format=json\n"
109 " overworld-list-warps List entrances/exits/holes in overworld\n"
110 " Example: agent overworld-list-warps --map=0 --format=json\n"
112 "Proposal & Testing Commands:\n"
113 " run Execute agent task\n"
114 " plan Generate execution plan\n"
115 " diff Show ROM differences\n"
116 " accept Accept and apply proposal changes\n"
117 " test Run agent tests\n"
118 " gui Launch GUI components\n"
119 " learn Train agent on examples\n"
120 " list List available resources\n"
121 " commit Commit changes\n"
122 " revert Revert changes\n"
123 " describe Describe agent capabilities\n"
124 " todo Manage tasks and project planning\n"
127 " --rom=<path> Path to Zelda3 ROM file (required for most commands)\n"
128 " --ai_provider=<name> AI provider: mock (default) | ollama | gemini\n"
129 " --ai_model=<name> Model name (e.g., qwen2.5-coder:7b for Ollama)\n"
130 " --ollama_host=<url> Ollama server URL (default: http://localhost:11434)\n"
131 " --gemini_api_key=<key> Gemini API key (or set GEMINI_API_KEY env var)\n"
132 " --format=<type> Output format: text | markdown | json | compact\n"
134 "For more details, see: docs/simple_chat_input_methods.md";
143 if (arg_vec.empty()) {
144 return absl::InvalidArgumentError(std::string(kUsage));
147 const std::string& subcommand = arg_vec[0];
148 std::vector<std::string> subcommand_args(arg_vec.begin() + 1, arg_vec.end());
150 if (subcommand ==
"run") {
151 return absl::UnimplementedError(
"Agent run command requires ROM context - not yet implemented");
153 if (subcommand ==
"plan") {
156 if (subcommand ==
"diff") {
157 return absl::UnimplementedError(
"Agent diff command requires ROM context - not yet implemented");
159 if (subcommand ==
"accept") {
160 return absl::UnimplementedError(
"Agent accept command requires ROM context - not yet implemented");
162 if (subcommand ==
"test") {
165 if (subcommand ==
"test-conversation") {
168 if (subcommand ==
"gui") {
171 if (subcommand ==
"learn") {
174 if (subcommand ==
"list") {
177 if (subcommand ==
"commit") {
178 return absl::UnimplementedError(
"Agent commit command requires ROM context - not yet implemented");
180 if (subcommand ==
"revert") {
181 return absl::UnimplementedError(
"Agent revert command requires ROM context - not yet implemented");
183 if (subcommand ==
"describe") {
186 if (subcommand ==
"resource-list") {
189 if (subcommand ==
"resource-search") {
192 if (subcommand ==
"dungeon-list-sprites") {
195 if (subcommand ==
"dungeon-describe-room") {
198 if (subcommand ==
"overworld-find-tile") {
201 if (subcommand ==
"overworld-describe-map") {
204 if (subcommand ==
"overworld-list-warps") {
236 return absl::InvalidArgumentError(std::string(kUsage));
ABSL_DECLARE_FLAG(bool, quiet)
The Rom class is used to load, save, and modify Rom data.
Command handler for describing a dungeon room.
Command handler for listing sprites in a dungeon room.
Command handler for describing overworld maps.
Command handler for finding tiles in overworld.
Command handler for listing warps in overworld.
Command handler for listing resource labels by type.
Command handler for searching resource labels.
absl::Status Run(const std::vector< std::string > &args, Rom *rom_context)
Execute the command.
absl::Status HandleDungeonListSpritesCommand(const std::vector< std::string > &args, Rom *rom)
absl::Status HandleGuiCommand(const std::vector< std::string > &args)
absl::Status HandleLearnCommand(const std::vector< std::string > &args)
absl::Status HandleTestConversationCommand(const std::vector< std::string > &args)
absl::Status HandleOverworldListWarpsCommand(const std::vector< std::string > &args, Rom *rom)
absl::Status HandleResourceListCommand(const std::vector< std::string > &args, Rom *rom)
absl::Status HandleOverworldDescribeMapCommand(const std::vector< std::string > &args, Rom *rom)
absl::Status HandleTestCommand(const std::vector< std::string > &args)
absl::Status HandleOverworldFindTileCommand(const std::vector< std::string > &args, Rom *rom)
absl::Status HandleDescribeCommand(const std::vector< std::string > &args)
absl::Status HandleDungeonDescribeRoomCommand(const std::vector< std::string > &args, Rom *rom)
absl::Status HandleResourceSearchCommand(const std::vector< std::string > &args, Rom *rom)
absl::Status HandleListCommand()
absl::Status HandlePlanCommand(const std::vector< std::string > &args)
constexpr absl::string_view kUsage
absl::Status HandleAgentCommand(const std::vector< std::string > &arg_vec)
Main namespace for the application.