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"
28 std::optional<std::string> format_arg = parser.
GetString(
"format");
32 format_arg =
"markdown";
34 format_arg =
"compact";
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") {
52 if (format_arg.has_value()) {
53 if (
auto output_format = select_format(*format_arg);
54 output_format.has_value()) {
57 return absl::InvalidArgumentError(
58 absl::StrCat(
"Unsupported chat format: ", *format_arg,
59 ". Supported formats: text, markdown, json, compact"));
61 }
else if (absl::GetFlag(FLAGS_quiet)) {
65 std::optional<std::string> prompt = parser.
GetString(
"prompt");
67 for (
const auto& token : positional) {
72 if (!prompt.has_value() && !token.empty() && token.front() !=
'-') {
79 if (
auto batch = parser.
GetString(
"file")) {
82 auto status = session.
RunBatch(*batch);
84 formatter.
AddField(
"status",
"completed");
89 if (prompt.has_value()) {
90 formatter.
AddField(
"mode",
"single");
91 formatter.
AddField(
"prompt", *prompt);
98 formatter.
AddField(
"response", response);
99 return absl::OkStatus();
102 formatter.
AddField(
"mode",
"interactive");
105 formatter.
AddField(
"status",
"completed");
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Simple text-based chat session for AI agent interaction.
void SetRomContext(Rom *rom)
void SetConfig(const AgentConfig &config)
absl::Status RunBatch(const std::string &input_file)
absl::Status RunInteractive()
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.
ABSL_DECLARE_FLAG(bool, quiet)
AgentOutputFormat output_format