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
|
||||
enrichers.cpp
|
||||
chat.cpp
|
||||
extract_panel.cpp
|
||||
# --- viz ---
|
||||
${FN_CPP_ROOT_DIR}/functions/viz/graph_renderer.cpp
|
||||
${FN_CPP_ROOT_DIR}/functions/viz/graph_force_layout.cpp
|
||||
|
||||
@@ -30,6 +30,10 @@ uses_functions:
|
||||
- fullscreen_window_cpp_core
|
||||
- badge_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: []
|
||||
framework: "imgui"
|
||||
entry_point: "main.cpp"
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "jobs.h"
|
||||
#include "enrichers.h"
|
||||
#include "chat.h"
|
||||
#include "extract_panel.h"
|
||||
|
||||
#include "../../../../cpp/vendor/sqlite3/sqlite3.h"
|
||||
|
||||
@@ -1233,6 +1234,7 @@ static fn_ui::PanelToggle g_panels[] = {
|
||||
{"Table", nullptr, &g_app.panel_table},
|
||||
{"Jobs", nullptr, &g_app.panel_jobs},
|
||||
{"Echo", nullptr, &g_app.panel_chat},
|
||||
{"Extract", nullptr, &g_app.panel_extract},
|
||||
};
|
||||
|
||||
static void render() {
|
||||
@@ -2176,6 +2178,12 @@ static void render() {
|
||||
ImGui::SetNextWindowSize(ImVec2(520.0f, 720.0f), ImGuiCond_FirstUseEver);
|
||||
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).
|
||||
render_enricher_config_window();
|
||||
|
||||
@@ -2482,6 +2490,12 @@ int main(int argc, char** argv) {
|
||||
(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
|
||||
// operations.db. agent_mutations counter en graph_explorer.db dispara
|
||||
// reload del viewport en cada cambio.
|
||||
@@ -2571,6 +2585,7 @@ int main(int argc, char** argv) {
|
||||
|
||||
// Cleanup
|
||||
ge::chat_shutdown();
|
||||
ge::extract_panel_shutdown();
|
||||
ge::jobs_shutdown();
|
||||
if (g_layout_storage) {
|
||||
fn_ui::layout_storage_close(g_layout_storage);
|
||||
|
||||
Reference in New Issue
Block a user