yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
simple_chat_command.cc
Go to the documentation of this file.
2
3#include <optional>
4
5#include "absl/flags/declare.h"
6#include "absl/flags/flag.h"
7#include "absl/strings/ascii.h"
8#include "absl/strings/str_cat.h"
10
11ABSL_DECLARE_FLAG(bool, quiet);
12
13namespace yaze {
14namespace cli {
15namespace handlers {
16
18 Rom* rom, const resources::ArgumentParser& parser,
19 resources::OutputFormatter& formatter) {
21 session.SetRomContext(rom);
22
23 agent::AgentConfig config;
24 config.verbose = parser.HasFlag("verbose");
25 config.enable_vim_mode = parser.HasFlag("vim");
26
27 // Determine desired output format
28 std::optional<std::string> format_arg = parser.GetString("format");
29 if (parser.HasFlag("json"))
30 format_arg = "json";
31 if (parser.HasFlag("markdown") || parser.HasFlag("md"))
32 format_arg = "markdown";
33 if (parser.HasFlag("compact") || parser.HasFlag("raw"))
34 format_arg = "compact";
35
36 auto select_format =
37 [](absl::string_view value) -> std::optional<agent::AgentOutputFormat> {
38 std::string normalized = absl::AsciiStrToLower(value);
39 if (normalized == "json")
41 if (normalized == "markdown" || normalized == "md")
43 if (normalized == "compact" || normalized == "raw")
45 if (normalized == "text" || normalized == "friendly" ||
46 normalized == "pretty") {
48 }
49 return std::nullopt;
50 };
51
52 if (format_arg.has_value()) {
53 if (auto output_format = select_format(*format_arg);
54 output_format.has_value()) {
55 config.output_format = *output_format;
56 } else {
57 return absl::InvalidArgumentError(
58 absl::StrCat("Unsupported chat format: ", *format_arg,
59 ". Supported formats: text, markdown, json, compact"));
60 }
61 } else if (absl::GetFlag(FLAGS_quiet)) {
63 }
64
65 std::optional<std::string> prompt = parser.GetString("prompt");
66 auto positional = parser.GetPositional();
67 for (const auto& token : positional) {
68 if (token == "-v") {
69 config.verbose = true;
70 continue;
71 }
72 if (!prompt.has_value() && !token.empty() && token.front() != '-') {
73 prompt = token;
74 }
75 }
76
77 session.SetConfig(config);
78
79 if (auto batch = parser.GetString("file")) {
80 formatter.AddField("mode", "batch");
81 formatter.AddField("file", *batch);
82 auto status = session.RunBatch(*batch);
83 if (status.ok()) {
84 formatter.AddField("status", "completed");
85 }
86 return status;
87 }
88
89 if (prompt.has_value()) {
90 formatter.AddField("mode", "single");
91 formatter.AddField("prompt", *prompt);
92
93 std::string response;
94 auto status = session.SendAndWaitForResponse(*prompt, &response);
95 if (!status.ok()) {
96 return status;
97 }
98 formatter.AddField("response", response);
99 return absl::OkStatus();
100 }
101
102 formatter.AddField("mode", "interactive");
103 auto status = session.RunInteractive();
104 if (status.ok()) {
105 formatter.AddField("status", "completed");
106 }
107 return status;
108}
109
110} // namespace handlers
111} // namespace cli
112} // 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:24
Simple text-based chat session for AI agent interaction.
void SetConfig(const AgentConfig &config)
absl::Status RunBatch(const std::string &input_file)
absl::Status SendAndWaitForResponse(const std::string &message, std::string *response_out=nullptr)
absl::Status Execute(Rom *rom, const resources::ArgumentParser &parser, resources::OutputFormatter &formatter) override
Execute the command business logic.
Utility for parsing common CLI argument patterns.
std::vector< std::string > GetPositional() const
Get all remaining positional arguments.
std::optional< std::string > GetString(const std::string &name) const
Parse a named argument (e.g., –format=json or –format json)
bool HasFlag(const std::string &name) const
Check if a flag is present.
Utility for consistent output formatting across commands.
void AddField(const std::string &key, const std::string &value)
Add a key-value pair.
ABSL_DECLARE_FLAG(bool, quiet)