Files
graph_explorer/issues/completed/0006-projects-subfolders.md
T
2026-04-30 23:47:08 +02:00

2.7 KiB

id, title, status, priority, created, completed
id title status priority created completed
0006 Sistema de proyectos dentro de la app — subcarpetas + switcher completed high 2026-04-30 2026-04-30

Objetivo

Cada "proyecto" es una subcarpeta junto al exe que contiene su propio operations.db, types.yaml y graph_explorer.db (layouts). El usuario crea proyectos, los nombra, y conmuta entre ellos sin reiniciar la app. Esto es lo que va a permitir guardar muchos datos separados por caso/tema sin acumularlos en un solo grafo.

Independiente del concepto de "project" del registry (projects/ raiz del repo) — aqui es organizativo, dentro de la app desplegada.

Layout en disco (junto al exe)

graph_explorer.exe
graph_explorer.ini             # estado global: ultimo proyecto abierto, recientes
projects/
  default/
    operations.db
    types.yaml                 # copia editable; semilla = examples/types.yaml
    graph_explorer.db          # layouts de este proyecto
    notes/                     # opcional, .md sueltos
  caso_aurgi/
    operations.db
    types.yaml
    graph_explorer.db
  osint_demo/
    ...

UI

  • Menu "Project" en la menubar:
    • New... (input de nombre, valida slug, crea carpeta + semilla types.yaml + operations.db vacio con schema migrado).
    • Open... (combo con los proyectos detectados en ./projects/).
    • Recent (lista los ultimos 5 desde graph_explorer.ini).
    • Reveal in explorer (abre la carpeta del proyecto activo).
  • Title bar muestra graph_explorer — <proyecto activo>.
  • Switch de proyecto: cierra BDs, limpia grafo + viewport, abre nuevas BDs, hace reload.

Cambios en codigo

  • main.cpp:
    • Resolver paths a traves de g_active_project en vez de ./operations.db y ./graph_explorer.db directos.
    • Modo legacy: si arranca con --input <path> o positional, no usa proyecto (compatibilidad con flujo actual).
  • app_state nuevo campo string active_project_dir.
  • Nueva fn project_create(name) que escribe schema base de operations.db (entities/relations/...) — extraerlo de lo que ya hace el registry o copiar el DDL.
  • graph_explorer.ini lee/escribe via app_settings_* ya existente.

Migracion del flujo actual

  • Al primer arranque sin --input, si no existe ./projects/, crear ./projects/default/ y mover ./operations.db + ./graph_explorer.db ahi (si existen).
  • Issues 0005/0007/0008 ya asumen este layout.

Definicion de hecho

  • Crear, abrir y conmutar proyectos sin reiniciar.
  • Cada proyecto tiene su operations.db, types.yaml, graph_explorer.db aislados.
  • "Recent" persiste entre sesiones via graph_explorer.ini.
  • El layout (posiciones de nodos) es por-proyecto: cambiar de proyecto recupera las posiciones del nuevo, no las del anterior.