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")) format_arg = "json";
30 if (parser.HasFlag("markdown") || parser.HasFlag("md")) format_arg = "markdown";
31 if (parser.HasFlag("compact") || parser.HasFlag("raw")) format_arg = "compact";
32
33 auto select_format = [](absl::string_view value)
34 -> std::optional<agent::AgentOutputFormat> {
35 std::string normalized = absl::AsciiStrToLower(value);
36 if (normalized == "json") return agent::AgentOutputFormat::kJson;
37 if (normalized == "markdown" || normalized == "md") return agent::AgentOutputFormat::kMarkdown;
38 if (normalized == "compact" || normalized == "raw") return agent::AgentOutputFormat::kCompact;
39 if (normalized == "text" || normalized == "friendly" || normalized == "pretty") {
41 }
42 return std::nullopt;
43 };
44
45 if (format_arg.has_value()) {
46 if (auto output_format = select_format(*format_arg); output_format.has_value()) {
47 config.output_format = *output_format;
48 } else {
49 return absl::InvalidArgumentError(
50 absl::StrCat("Unsupported chat format: ", *format_arg,
51 ". Supported formats: text, markdown, json, compact"));
52 }
53 } else if (absl::GetFlag(FLAGS_quiet)) {
55 }
56
57 std::optional<std::string> prompt = parser.GetString("prompt");
58 auto positional = parser.GetPositional();
59 for (const auto& token : positional) {
60 if (token == "-v") {
61 config.verbose = true;
62 continue;
63 }
64 if (!prompt.has_value() && !token.empty() && token.front() != '-') {
65 prompt = token;
66 }
67 }
68
69 session.SetConfig(config);
70
71 if (auto batch = parser.GetString("file")) {
72 formatter.AddField("mode", "batch");
73 formatter.AddField("file", *batch);
74 auto status = session.RunBatch(*batch);
75 if (status.ok()) {
76 formatter.AddField("status", "completed");
77 }
78 return status;
79 }
80
81 if (prompt.has_value()) {
82 formatter.AddField("mode", "single");
83 formatter.AddField("prompt", *prompt);
84
85 std::string response;
86 auto status = session.SendAndWaitForResponse(*prompt, &response);
87 if (!status.ok()) {
88 return status;
89 }
90 formatter.AddField("response", response);
91 return absl::OkStatus();
92 }
93
94 formatter.AddField("mode", "interactive");
95 auto status = session.RunInteractive();
96 if (status.ok()) {
97 formatter.AddField("status", "completed");
98 }
99 return status;
100}
101
102} // namespace handlers
103} // namespace cli
104} // namespace yaze
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:74
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.
Main namespace for the application.
Definition controller.cc:20
ABSL_DECLARE_FLAG(bool, quiet)