--- name: resolve_cpp_app_dir kind: function lang: bash domain: infra version: "1.0.0" purity: impure signature: "resolve_cpp_app_dir(app_name?: string) -> stdout: app_name\tapp_dir" description: "Resuelve el nombre y directorio absoluto de una app C++ del registry. Sin arg deduce desde CWD si esta dentro de cpp/apps// o projects/*/apps//. Con arg busca en ambas ubicaciones. Imprime 'TAB' en stdout, exit 0; si no resuelve, lista apps disponibles en stderr y sale con exit 1." tags: [cpp, resolve, app, directory, infra] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] tested: false tests: [] test_file_path: "" file_path: "bash/functions/infra/resolve_cpp_app_dir.sh" params: - name: app_name desc: "Nombre de la app C++ a resolver (opcional). Sin arg se deduce desde el directorio actual si estamos dentro de cpp/apps// o projects/*/apps//." output: "Una linea TAB-separada '\\t' en stdout. En caso de error imprime ayuda a stderr y sale con exit 1." --- ## Ejemplo ```bash # Desde dentro de cpp/apps/chart_demo/ cd /home/lucas/fn_registry/cpp/apps/chart_demo resolve_cpp_app_dir # -> chart_demo\t/home/lucas/fn_registry/cpp/apps/chart_demo # Con argumento explicito resolve_cpp_app_dir registry_dashboard # -> registry_dashboard\t/home/lucas/fn_registry/cpp/apps/registry_dashboard # Capturar los dos campos resolved=$(resolve_cpp_app_dir graph_explorer) APP="$(echo "$resolved" | cut -f1)" APP_DIR="$(echo "$resolved" | cut -f2)" ``` ## Notas Busca en orden: primero `$ROOT/cpp/apps/`, luego `$ROOT/projects/*/apps/` (primer match gana). Si ninguna ruta existe, imprime lista de apps disponibles (con prefijo de ubicacion) en stderr y sale con exit 1. Sourceable o ejecutable directamente.