yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
command_registry.h
Go to the documentation of this file.
1#ifndef YAZE_CLI_SERVICE_COMMAND_REGISTRY_H_
2#define YAZE_CLI_SERVICE_COMMAND_REGISTRY_H_
3
4#include <map>
5#include <memory>
6#include <string>
7#include <vector>
8
9#include "absl/status/statusor.h"
11#include "cli/util/ansi_style.h"
12
13namespace yaze {
14namespace cli {
15
31 public:
33 std::string name; // e.g., "resource-list"
34 std::string category; // e.g., "resource", "emulator", "dungeon"
35 std::string description; // Short description
36 std::string usage; // Full usage string
37 bool available_to_agent; // Can AI call this via tool dispatch?
38 bool requires_rom; // Requires ROM context?
39 bool requires_grpc; // Requires gRPC/emulator running?
40 std::vector<std::string> aliases; // Alternative names
41 std::vector<std::string> examples; // Usage examples
42 std::string todo_reference; // TODO tracker reference (if incomplete)
43 };
44
45 static CommandRegistry& Instance();
46
50 void Register(std::unique_ptr<resources::CommandHandler> handler,
51 const CommandMetadata& metadata);
52
57 std::vector<std::unique_ptr<resources::CommandHandler>> handlers);
58
62 resources::CommandHandler* Get(const std::string& name) const;
63
67 const CommandMetadata* GetMetadata(const std::string& name) const;
68
72 std::vector<std::string> GetCommandsInCategory(
73 const std::string& category) const;
74
78 std::vector<std::string> GetCategories() const;
79
83 std::vector<std::string> GetAgentCommands() const;
84
91 std::string ExportFunctionSchemas() const;
92
98 std::string GenerateHelp(
99 const std::string& name,
100 const util::AnsiStyle& style = util::AnsiStyle(false)) const;
101
105 std::string GenerateCategoryHelp(
106 const std::string& category,
107 const util::AnsiStyle& style = util::AnsiStyle(false)) const;
108
112 std::string GenerateCompleteHelp(
113 const util::AnsiStyle& style = util::AnsiStyle(false)) const;
114
118 absl::Status Execute(const std::string& name,
119 const std::vector<std::string>& args,
120 Rom* rom_context = nullptr,
121 std::string* captured_output = nullptr);
122
126 bool HasCommand(const std::string& name) const;
127
131 size_t Count() const { return handlers_.size(); }
132
133 private:
134 CommandRegistry() = default;
135
136 // Storage
137 std::map<std::string, std::unique_ptr<resources::CommandHandler>> handlers_;
138 std::map<std::string, CommandMetadata> metadata_;
139 std::map<std::string, std::string> aliases_; // alias → canonical name
140
141 // Auto-register CLI commands
142 void RegisterCliCommands();
143};
144
145} // namespace cli
146} // namespace yaze
147
148#endif // YAZE_CLI_SERVICE_COMMAND_REGISTRY_H_
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:52
Single source of truth for all z3ed commands.
std::string GenerateCompleteHelp(const util::AnsiStyle &style=util::AnsiStyle(false)) const
Generate complete help text (all commands)
std::string GenerateCategoryHelp(const std::string &category, const util::AnsiStyle &style=util::AnsiStyle(false)) const
Generate category help text.
std::map< std::string, std::string > aliases_
std::vector< std::string > GetCommandsInCategory(const std::string &category) const
Get all commands in a category.
static CommandRegistry & Instance()
std::string ExportFunctionSchemas() const
Export function schemas for AI tool calling (JSON)
const CommandMetadata * GetMetadata(const std::string &name) const
Get command metadata.
std::vector< std::string > GetAgentCommands() const
Get all commands available to AI agents.
std::string GenerateHelp(const std::string &name, const util::AnsiStyle &style=util::AnsiStyle(false)) const
Generate help text for a command.
size_t Count() const
Get total command count.
std::map< std::string, CommandMetadata > metadata_
absl::Status Execute(const std::string &name, const std::vector< std::string > &args, Rom *rom_context=nullptr, std::string *captured_output=nullptr)
Execute a command by name.
std::map< std::string, std::unique_ptr< resources::CommandHandler > > handlers_
resources::CommandHandler * Get(const std::string &name) const
Get a command handler by name or alias.
bool HasCommand(const std::string &name) const
Check if command exists.
std::vector< std::string > GetCategories() const
Get all categories.
void Register(std::unique_ptr< resources::CommandHandler > handler, const CommandMetadata &metadata)
Register a command handler.
void RegisterHandlers(std::vector< std::unique_ptr< resources::CommandHandler > > handlers)
Register a set of command handlers (idempotent)
Base class for CLI command handlers.