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");
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";
33 auto select_format = [](absl::string_view value)
34 -> std::optional<agent::AgentOutputFormat> {
35 std::string normalized = absl::AsciiStrToLower(value);
39 if (normalized ==
"text" || normalized ==
"friendly" || normalized ==
"pretty") {
45 if (format_arg.has_value()) {
46 if (
auto output_format = select_format(*format_arg); output_format.has_value()) {
49 return absl::InvalidArgumentError(
50 absl::StrCat(
"Unsupported chat format: ", *format_arg,
51 ". Supported formats: text, markdown, json, compact"));
53 }
else if (absl::GetFlag(FLAGS_quiet)) {
57 std::optional<std::string> prompt = parser.
GetString(
"prompt");
59 for (
const auto& token : positional) {
64 if (!prompt.has_value() && !token.empty() && token.front() !=
'-') {
71 if (
auto batch = parser.
GetString(
"file")) {
74 auto status = session.
RunBatch(*batch);
76 formatter.
AddField(
"status",
"completed");
81 if (prompt.has_value()) {
82 formatter.
AddField(
"mode",
"single");
83 formatter.
AddField(
"prompt", *prompt);
90 formatter.
AddField(
"response", response);
91 return absl::OkStatus();
94 formatter.
AddField(
"mode",
"interactive");
97 formatter.
AddField(
"status",
"completed");
The Rom class is used to load, save, and modify Rom data.
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.
Main namespace for the application.
ABSL_DECLARE_FLAG(bool, quiet)
AgentOutputFormat output_format