feat(projects): project_manager module — DDL bootstrap, slug/paths, settings, reveal
Modulo nuevo que gestiona el sistema de proyectos del issue 0006. Cada proyecto vive como subcarpeta junto al exe con su operations.db, types.yaml y graph_explorer.db propios. Helpers: - project_validate_slug / project_paths / project_list / project_exists - project_create — bootstrap operations.db con DDL completo (entities, relations, fts5, triggers, assertions, executions, logs) + types.yaml semilla (copia de examples/types.yaml o embed si no existe). - projects_migrate_legacy_layout — mueve operations.db / graph_explorer.db del cwd a projects/default/ si el directorio projects/ no existe. - project_settings_load/save/touch — graph_explorer.ini con last_active y recent (max 5). - project_reveal_in_explorer — Windows ShellExecute / Linux xdg-open. CMakeLists registra project_manager.cpp en add_imgui_app. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
---
|
||||
id: 0006
|
||||
title: Sistema de proyectos dentro de la app — subcarpetas + switcher
|
||||
status: pending
|
||||
priority: high
|
||||
created: 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.
|
||||
Reference in New Issue
Block a user