feat(0013): wire extract_panel into main + CMakeLists + app.md
- main.cpp: registra panel_extract en g_panels[], llama extract_panel_init tras jobs_init y extract_panel_shutdown en el cleanup, anade extract_panel_render(g_app) al render. - CMakeLists.txt: anade extract_panel.cpp al target. - app.md: declara extract_iocs_py_cybersecurity y extract_graph_hybrid_py_pipelines en uses_functions (regla uses_functions.md). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,7 @@ add_imgui_app(graph_explorer
|
|||||||
jobs.cpp
|
jobs.cpp
|
||||||
enrichers.cpp
|
enrichers.cpp
|
||||||
chat.cpp
|
chat.cpp
|
||||||
|
extract_panel.cpp
|
||||||
# --- viz ---
|
# --- viz ---
|
||||||
${FN_CPP_ROOT_DIR}/functions/viz/graph_renderer.cpp
|
${FN_CPP_ROOT_DIR}/functions/viz/graph_renderer.cpp
|
||||||
${FN_CPP_ROOT_DIR}/functions/viz/graph_force_layout.cpp
|
${FN_CPP_ROOT_DIR}/functions/viz/graph_force_layout.cpp
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ uses_functions:
|
|||||||
- fullscreen_window_cpp_core
|
- fullscreen_window_cpp_core
|
||||||
- badge_cpp_core
|
- badge_cpp_core
|
||||||
- empty_state_cpp_core
|
- empty_state_cpp_core
|
||||||
|
# paste & extract panel (issue 0013) — invoca enrichers/paste_extract/run.py
|
||||||
|
# via subprocess directo (no via jobs); uses extract_iocs + opcional hybrid.
|
||||||
|
- extract_iocs_py_cybersecurity
|
||||||
|
- extract_graph_hybrid_py_pipelines
|
||||||
uses_types: []
|
uses_types: []
|
||||||
framework: "imgui"
|
framework: "imgui"
|
||||||
entry_point: "main.cpp"
|
entry_point: "main.cpp"
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "jobs.h"
|
#include "jobs.h"
|
||||||
#include "enrichers.h"
|
#include "enrichers.h"
|
||||||
#include "chat.h"
|
#include "chat.h"
|
||||||
|
#include "extract_panel.h"
|
||||||
|
|
||||||
#include "../../../../cpp/vendor/sqlite3/sqlite3.h"
|
#include "../../../../cpp/vendor/sqlite3/sqlite3.h"
|
||||||
|
|
||||||
@@ -1233,6 +1234,7 @@ static fn_ui::PanelToggle g_panels[] = {
|
|||||||
{"Table", nullptr, &g_app.panel_table},
|
{"Table", nullptr, &g_app.panel_table},
|
||||||
{"Jobs", nullptr, &g_app.panel_jobs},
|
{"Jobs", nullptr, &g_app.panel_jobs},
|
||||||
{"Echo", nullptr, &g_app.panel_chat},
|
{"Echo", nullptr, &g_app.panel_chat},
|
||||||
|
{"Extract", nullptr, &g_app.panel_extract},
|
||||||
};
|
};
|
||||||
|
|
||||||
static void render() {
|
static void render() {
|
||||||
@@ -2176,6 +2178,12 @@ static void render() {
|
|||||||
ImGui::SetNextWindowSize(ImVec2(520.0f, 720.0f), ImGuiCond_FirstUseEver);
|
ImGui::SetNextWindowSize(ImVec2(520.0f, 720.0f), ImGuiCond_FirstUseEver);
|
||||||
ge::chat_render(&g_app.panel_chat);
|
ge::chat_render(&g_app.panel_chat);
|
||||||
|
|
||||||
|
// Extract panel (issue 0013) — flotante, dockeable.
|
||||||
|
ImGui::SetNextWindowPos (ImVec2(vp->WorkPos.x + W * 0.30f, top + 50.0f),
|
||||||
|
ImGuiCond_FirstUseEver);
|
||||||
|
ImGui::SetNextWindowSize(ImVec2(720.0f, 640.0f), ImGuiCond_FirstUseEver);
|
||||||
|
ge::extract_panel_render(g_app);
|
||||||
|
|
||||||
// Enricher config window (abierto desde context menu Run enricher).
|
// Enricher config window (abierto desde context menu Run enricher).
|
||||||
render_enricher_config_window();
|
render_enricher_config_window();
|
||||||
|
|
||||||
@@ -2482,6 +2490,12 @@ int main(int argc, char** argv) {
|
|||||||
(int)ge::enrichers_all().size());
|
(int)ge::enrichers_all().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Extract panel (issue 0013) — invoca enrichers/paste_extract/run.py
|
||||||
|
// directamente en su propio hilo, sin pasar por el sistema de jobs.
|
||||||
|
ge::extract_panel_init(enrichers_dir.c_str(),
|
||||||
|
app_dir.c_str(),
|
||||||
|
registry_root.c_str());
|
||||||
|
|
||||||
// Chat panel (claude -p) — el agente invoca gx-cli para mutar
|
// Chat panel (claude -p) — el agente invoca gx-cli para mutar
|
||||||
// operations.db. agent_mutations counter en graph_explorer.db dispara
|
// operations.db. agent_mutations counter en graph_explorer.db dispara
|
||||||
// reload del viewport en cada cambio.
|
// reload del viewport en cada cambio.
|
||||||
@@ -2571,6 +2585,7 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
ge::chat_shutdown();
|
ge::chat_shutdown();
|
||||||
|
ge::extract_panel_shutdown();
|
||||||
ge::jobs_shutdown();
|
ge::jobs_shutdown();
|
||||||
if (g_layout_storage) {
|
if (g_layout_storage) {
|
||||||
fn_ui::layout_storage_close(g_layout_storage);
|
fn_ui::layout_storage_close(g_layout_storage);
|
||||||
|
|||||||
Reference in New Issue
Block a user