yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
agent.cc
Go to the documentation of this file.
2#include "cli/cli.h"
3
4#include <string>
5#include <vector>
6
7#include "absl/flags/declare.h"
8#include "absl/flags/flag.h"
9#include "absl/status/status.h"
17
18ABSL_DECLARE_FLAG(bool, quiet);
19
20namespace yaze {
21namespace cli {
22
23// Forward declarations from general_commands.cc
24namespace agent {
25absl::Status HandlePlanCommand(const std::vector<std::string>& args);
26absl::Status HandleTestCommand(const std::vector<std::string>& args);
27absl::Status HandleTestConversationCommand(const std::vector<std::string>& args);
28absl::Status HandleGuiCommand(const std::vector<std::string>& args);
29absl::Status HandleLearnCommand(const std::vector<std::string>& args);
30absl::Status HandleListCommand();
31absl::Status HandleDescribeCommand(const std::vector<std::string>& args);
32
33// Wrapper functions to call CommandHandlers
34absl::Status HandleResourceListCommand(const std::vector<std::string>& args, Rom* rom) {
36 return handler.Run(args, rom);
37}
38
39absl::Status HandleResourceSearchCommand(const std::vector<std::string>& args, Rom* rom) {
41 return handler.Run(args, rom);
42}
43
44absl::Status HandleDungeonListSpritesCommand(const std::vector<std::string>& args, Rom* rom) {
46 return handler.Run(args, rom);
47}
48
49absl::Status HandleDungeonDescribeRoomCommand(const std::vector<std::string>& args, Rom* rom) {
51 return handler.Run(args, rom);
52}
53
54absl::Status HandleOverworldFindTileCommand(const std::vector<std::string>& args, Rom* rom) {
56 return handler.Run(args, rom);
57}
58
59absl::Status HandleOverworldDescribeMapCommand(const std::vector<std::string>& args, Rom* rom) {
61 return handler.Run(args, rom);
62}
63
64absl::Status HandleOverworldListWarpsCommand(const std::vector<std::string>& args, Rom* rom) {
66 return handler.Run(args, rom);
67}
68
69} // namespace agent
70
71namespace {
72
73constexpr absl::string_view kUsage =
74 "Usage: agent <subcommand> [options]\n"
75 "\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"
83 "\n"
84 " test-conversation Run automated test conversation with AI\n"
85 " Example: agent test-conversation --rom=zelda3.sfc --ai_provider=ollama\n"
86 "\n"
87 " chat Full FTXUI-based chat interface\n"
88 " Example: agent chat --rom=zelda3.sfc\n"
89 "\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"
93 "\n"
94 " resource-search Search resource labels by fuzzy text\n"
95 " Example: agent resource-search --query=soldier --type=sprite\n"
96 "\n"
97 " dungeon-list-sprites List sprites in a dungeon room\n"
98 " Example: agent dungeon-list-sprites --room=5 --format=json\n"
99 "\n"
100 " dungeon-describe-room Summarize metadata for a dungeon room\n"
101 " Example: agent dungeon-describe-room --room=0x12 --format=text\n"
102 "\n"
103 " overworld-find-tile Search for tile placements in overworld\n"
104 " Example: agent overworld-find-tile --tile=0x02E --format=json\n"
105 "\n"
106 " overworld-describe-map Get metadata about an overworld map\n"
107 " Example: agent overworld-describe-map --map=0 --format=json\n"
108 "\n"
109 " overworld-list-warps List entrances/exits/holes in overworld\n"
110 " Example: agent overworld-list-warps --map=0 --format=json\n"
111 "\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"
125 "\n"
126 "Global Options:\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"
133 "\n"
134 "For more details, see: docs/simple_chat_input_methods.md";
135
136} // namespace
137
138namespace handlers {
139
140// Legacy Agent class removed - using new CommandHandler system
141// This implementation should be moved to a proper AgentCommandHandler
142absl::Status HandleAgentCommand(const std::vector<std::string>& arg_vec) {
143 if (arg_vec.empty()) {
144 return absl::InvalidArgumentError(std::string(kUsage));
145 }
146
147 const std::string& subcommand = arg_vec[0];
148 std::vector<std::string> subcommand_args(arg_vec.begin() + 1, arg_vec.end());
149
150 if (subcommand == "run") {
151 return absl::UnimplementedError("Agent run command requires ROM context - not yet implemented");
152 }
153 if (subcommand == "plan") {
154 return agent::HandlePlanCommand(subcommand_args);
155 }
156 if (subcommand == "diff") {
157 return absl::UnimplementedError("Agent diff command requires ROM context - not yet implemented");
158 }
159 if (subcommand == "accept") {
160 return absl::UnimplementedError("Agent accept command requires ROM context - not yet implemented");
161 }
162 if (subcommand == "test") {
163 return agent::HandleTestCommand(subcommand_args);
164 }
165 if (subcommand == "test-conversation") {
166 return agent::HandleTestConversationCommand(subcommand_args);
167 }
168 if (subcommand == "gui") {
169 return agent::HandleGuiCommand(subcommand_args);
170 }
171 if (subcommand == "learn") {
172 return agent::HandleLearnCommand(subcommand_args);
173 }
174 if (subcommand == "list") {
176 }
177 if (subcommand == "commit") {
178 return absl::UnimplementedError("Agent commit command requires ROM context - not yet implemented");
179 }
180 if (subcommand == "revert") {
181 return absl::UnimplementedError("Agent revert command requires ROM context - not yet implemented");
182 }
183 if (subcommand == "describe") {
184 return agent::HandleDescribeCommand(subcommand_args);
185 }
186 if (subcommand == "resource-list") {
187 return agent::HandleResourceListCommand(subcommand_args, nullptr);
188 }
189 if (subcommand == "resource-search") {
190 return agent::HandleResourceSearchCommand(subcommand_args, nullptr);
191 }
192 if (subcommand == "dungeon-list-sprites") {
193 return agent::HandleDungeonListSpritesCommand(subcommand_args, nullptr);
194 }
195 if (subcommand == "dungeon-describe-room") {
196 return agent::HandleDungeonDescribeRoomCommand(subcommand_args, nullptr);
197 }
198 if (subcommand == "overworld-find-tile") {
199 return agent::HandleOverworldFindTileCommand(subcommand_args, nullptr);
200 }
201 if (subcommand == "overworld-describe-map") {
202 return agent::HandleOverworldDescribeMapCommand(subcommand_args, nullptr);
203 }
204 if (subcommand == "overworld-list-warps") {
205 return agent::HandleOverworldListWarpsCommand(subcommand_args, nullptr);
206 }
207 // if (subcommand == "chat") {
208 // return absl::UnimplementedError("Agent chat command requires ROM context - not yet implemented");
209 // }
210 // if (subcommand == "todo") {
211 // return handlers::HandleTodoCommand(subcommand_args);
212 // }
213
214 // // Hex manipulation commands
215 // if (subcommand == "hex-read") {
216 // return HandleHexRead(subcommand_args, nullptr);
217 // }
218 // if (subcommand == "hex-write") {
219 // return HandleHexWrite(subcommand_args, nullptr);
220 // }
221 // if (subcommand == "hex-search") {
222 // return HandleHexSearch(subcommand_args, nullptr);
223 // }
224
225 // // Palette manipulation commands
226 // if (subcommand == "palette-get-colors") {
227 // return HandlePaletteGetColors(subcommand_args, nullptr);
228 // }
229 // if (subcommand == "palette-set-color") {
230 // return HandlePaletteSetColor(subcommand_args, nullptr);
231 // }
232 // if (subcommand == "palette-analyze") {
233 // return HandlePaletteAnalyze(subcommand_args, nullptr);
234 // }
235
236 return absl::InvalidArgumentError(std::string(kUsage));
237}
238
239// Handler functions are now implemented in command_wrappers.cc
240
241} // namespace handlers
242} // namespace cli
243} // namespace yaze
ABSL_DECLARE_FLAG(bool, quiet)
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:71
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)
Definition agent.cc:44
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)
Definition agent.cc:64
absl::Status HandleResourceListCommand(const std::vector< std::string > &args, Rom *rom)
Definition agent.cc:34
absl::Status HandleOverworldDescribeMapCommand(const std::vector< std::string > &args, Rom *rom)
Definition agent.cc:59
absl::Status HandleTestCommand(const std::vector< std::string > &args)
absl::Status HandleOverworldFindTileCommand(const std::vector< std::string > &args, Rom *rom)
Definition agent.cc:54
absl::Status HandleDescribeCommand(const std::vector< std::string > &args)
absl::Status HandleDungeonDescribeRoomCommand(const std::vector< std::string > &args, Rom *rom)
Definition agent.cc:49
absl::Status HandleResourceSearchCommand(const std::vector< std::string > &args, Rom *rom)
Definition agent.cc:39
absl::Status HandleListCommand()
absl::Status HandlePlanCommand(const std::vector< std::string > &args)
constexpr absl::string_view kUsage
Definition agent.cc:73
absl::Status HandleAgentCommand(const std::vector< std::string > &arg_vec)
Definition agent.cc:142
Main namespace for the application.