feat: init_jupyter_analysis v1.1.0 — soporte --project, --desc, --tags

Nueva funcion write_analysis_md_bash_infra genera analysis.md con frontmatter.
El pipeline ahora acepta --project para crear analisis directamente en
projects/{proyecto}/analysis/{nombre}/, valida que el proyecto exista,
genera analysis.md con dir_path correcto y ejecuta fn index al final.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-17 15:39:20 +02:00
parent 69b626a426
commit 814262130d
7 changed files with 252 additions and 52 deletions
+39
View File
@@ -0,0 +1,39 @@
---
id: write_analysis_md_bash_infra
name: write_analysis_md
kind: function
lang: bash
domain: infra
version: 1.0.0
purity: impure
signature: "write_analysis_md(analysis_dir: string, name: string, description: string, tags_csv: string) -> string"
description: "Genera un archivo analysis.md con frontmatter valido para el registry. Calcula dir_path relativo a FN_REGISTRY_ROOT (o lo deduce buscando registry.db hacia arriba). Acepta tags como CSV."
tags: [analysis, frontmatter, registry, markdown]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
example: "source write_analysis_md.sh && write_analysis_md projects/aurgi/analysis/ventas ventas 'Analisis de ventas' 'aurgi,ventas'"
tested: false
file_path: "bash/functions/infra/write_analysis_md.sh"
params:
- name: analysis_dir
desc: "Directorio del analisis donde se escribira analysis.md"
- name: name
desc: "Nombre del analisis (se usa en frontmatter name)"
- name: description
desc: "Descripcion breve del analisis"
- name: tags_csv
desc: "Tags separados por coma (opcional)"
output: "Ruta absoluta del analysis.md creado"
---
## Notas
Forma parte del workflow de creacion rapida de analyses dentro de proyectos.
Requiere que `analysis_dir` exista fisicamente antes de llamar (para resolver path absoluto). Normalmente se llama dentro del pipeline `init_jupyter_analysis` despues de crear la estructura de carpetas.
El `dir_path` del frontmatter debe ser relativo a la raiz del registry para que `fn index` lo enlace correctamente al `project_id` si esta bajo `projects/{nombre}/analysis/`.
+67
View File
@@ -0,0 +1,67 @@
# write_analysis_md
# -----------------
# Genera un archivo analysis.md con frontmatter valido para el registry.
# El dir_path se calcula relativo a FN_REGISTRY_ROOT.
#
# USO (sourced):
# source write_analysis_md.sh
# write_analysis_md <analysis_dir> <name> <description> [tags_csv]
#
# EJEMPLOS:
# write_analysis_md projects/aurgi/analysis/sale_prices sale_prices "Comprobacion precios"
# write_analysis_md analysis/finanzas finanzas "Exploracion gastos" "finanzas,personal"
write_analysis_md() {
local analysis_dir="${1:-}"
local name="${2:-}"
local description="${3:-}"
local tags_csv="${4:-}"
if [ -z "$analysis_dir" ] || [ -z "$name" ]; then
echo "Uso: write_analysis_md <analysis_dir> <name> <description> [tags_csv]" >&2
return 1
fi
# dir_path relativo a FN_REGISTRY_ROOT
local registry_root="${FN_REGISTRY_ROOT:-}"
if [ -z "$registry_root" ]; then
# Intenta deducirlo: buscar registry.db hacia arriba
local probe="$(cd "$analysis_dir" && pwd)"
while [ "$probe" != "/" ] && [ ! -f "$probe/registry.db" ]; do
probe="$(dirname "$probe")"
done
registry_root="$probe"
fi
local abs_dir="$(cd "$analysis_dir" && pwd)"
local rel_dir="${abs_dir#${registry_root}/}"
# Construir array YAML de tags
local tags_yaml="[]"
if [ -n "$tags_csv" ]; then
tags_yaml="[$(echo "$tags_csv" | sed 's/,/, /g')]"
fi
local md_path="${analysis_dir}/analysis.md"
cat > "$md_path" << EOF
---
name: ${name}
lang: py
domain: datascience
description: "${description}"
tags: ${tags_yaml}
uses_functions: []
uses_types: []
framework: "jupyterlab"
entry_point: "notebooks/main.ipynb"
dir_path: "${rel_dir}"
repo_url: ""
---
## Notas
${description}
EOF
echo "$md_path"
}