Files
fn_registry/cpp/functions/viz/data_table_ai_panel.h
T
egutierrez 7eb7b3d0c8 chore: snapshot WIP previo + flow 0008 + 7 sub-issues (0112-0119)
Snapshot de WIP acumulado de sesiones previas antes de merge wave 1
del flow 0008 (kanban_cpp + agent_runner_api + DoD schema).

Incluye:
- dev/flows/0008-kanban-cpp-and-agent-workflows.md
- dev/issues/0112-0119*.md (7 sub-issues)
- WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 18:17:08 +02:00

62 lines
2.6 KiB
C++

#pragma once
// data_table_ai_panel — modal "Ask AI" de la tabla TQL.
// Sub-funcion extraida de modules/data_table/data_table.cpp (issue 0107c).
//
// Responsabilidad:
// - draw_ask_ai_modal: modal ImGui con prompt de lenguaje natural, llamada
// a llm_anthropic::ask, render de la respuesta (codigo TQL/SQL editable),
// botones Apply/Reject/Close, export CSV de la respuesta.
//
// El modal usa UiState.ask_* que se mueve aqui (AskAiState) para
// encapsulacion. Vive en UiState del data_table principal — no en State.
//
// Dependencia con llm_anthropic:
// - Si FN_LLM_ANTHROPIC esta definido: usa core/llm_anthropic.h (real).
// - Si no: el stub del data_table.cpp provee tipos/funciones no-op.
// - Tras la extraccion este modulo incluye el stub o el header real.
//
// Rangos del fuente original:
// - Modal "Ask AI" : lineas 4636-4755
// - Boton trigger : linea 1869 (dentro de draw_viz_selector)
//
// Dependencias: data_table_types.h, llm_anthropic.h (o stub), imgui.h.
#include "core/data_table_types.h"
#include "imgui.h"
#include <string>
#include <vector>
namespace data_table {
// AskAiState: estado del modal Ask AI. Debe persistir entre frames
// (es parte de UiState). Extraido aqui para encapsulacion.
struct AskAiState {
bool open = false;
bool busy = false;
int mode = 0; // 0 = TQL, 1 = SQL (DuckDB)
char question[2048] = {};
std::string current_tql; // TQL emitido del state al abrir modal
std::string response_raw; // texto raw del modelo
std::string response_code; // bloque extraido (Lua o SQL)
std::string error;
std::string status; // "Sending..." / "Got response." / error
char edit_buf[8192] = {}; // buffer editable de la propuesta
};
// draw_ask_ai_modal — dibuja el modal "Ask AI".
// Debe llamarse cada frame (pattern ImGui). Abre el popup si ask_ai.open==true.
//
// Parametros:
// ask_ai — estado mutable del modal.
// st — State principal (para tql::apply en Apply + active_headers/types).
// active_headers / active_types — snapshot del output activo (para la llamada llm).
// orig_cols — numero de cols originales (para tql::apply signature).
// ---------------------------------------------------------------------------
void draw_ask_ai_modal(AskAiState& ask_ai,
State& st,
const std::vector<std::string>& active_headers,
const std::vector<ColumnType>& active_types,
int orig_cols);
} // namespace data_table