3#include <ftxui/component/component.hpp>
4#include <ftxui/component/screen_interactive.hpp>
5#include <ftxui/dom/elements.hpp>
7#include "absl/strings/str_cat.h"
8#include "absl/strings/str_format.h"
16 : rom_context_(rom_context) {
79 auto clear_button = Button(
"Clear", [
this] {
ClearHistory(); });
81 auto container = Container::Horizontal({input, send_button, clear_button});
93 return Renderer(container, [
this] {
94 return vbox({text(
"🤖 AI Chat") | bold | center, separator(),
97 text(
"Commands: /help, /exit, /clear, /rom_info, /status") |
104 if (event == Event::Return) {
112 if (event == Event::Character(
'q')) {
121 if (event == Event::ArrowUp) {
128 if (event == Event::ArrowDown) {
140 if (message ==
"/exit") {
145 if (message ==
"/clear") {
150 if (message ==
"/help") {
153 "Available commands: /help, /exit, /clear, /rom_info, /status");
157 if (message ==
"/rom_info") {
168 if (message ==
"/status") {
171 absl::StrFormat(
"Chat Status: %d messages, %s",
chat_history_.size(),
172 focused_ ?
"Focused" :
"Not focused"));
187 absl::StrCat(
"Error: ", response.status().message()));
194 const std::string& message) {
212 const std::string& message) {
214 if (sender ==
"You") {
215 sender_color = Color::Yellow;
216 }
else if (sender ==
"Agent") {
217 sender_color = Color::Green;
219 sender_color = Color::Cyan;
222 return hbox({text(sender) | bold | color(sender_color), text(
": "),
223 text(message) | flex});
232 return vbox({text(
"No messages yet. Start chatting!") | dim | center}) |
236 std::vector<Element> messages;
241 return vbox(messages) | flex;
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
void RegisterCommand(const std::string &cmd, const std::string &desc, const std::vector< std::string > &examples={})
void SendMessage(const std::string &message)
std::function< bool(const ftxui::Event &) input_event_handler_)
ftxui::Component history_component_
ftxui::Element RenderChatMessage(const std::string &sender, const std::string &message)
bool HandleHistoryEvents(const ftxui::Event &event)
ftxui::Component GetComponent()
void ProcessMessage(const std::string &message)
std::string input_message_
ftxui::Element RenderInputArea()
void AddMessageToHistory(const std::string &sender, const std::string &message)
void UpdateHistoryDisplay()
int selected_history_index_
agent::ConversationalAgentService agent_service_
bool HandleInputEvents(const ftxui::Event &event)
std::function< bool(const ftxui::Event &) history_event_handler_)
ftxui::Component CreateInputComponent()
ftxui::Component chat_container_
void SetRomContext(Rom *rom_context)
ftxui::Element RenderHistoryArea()
AutocompleteEngine autocomplete_engine_
std::vector< std::pair< std::string, std::string > > chat_history_
ftxui::Component CreateHistoryComponent()
EnhancedChatComponent(Rom *rom_context=nullptr)
ftxui::Component CreateChatContainer()
ftxui::Component input_component_
absl::StatusOr< ChatMessage > SendMessage(const std::string &message)
void SetRomContext(Rom *rom)