feat(infra): auto-commit con 88 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-11 00:16:46 +02:00
parent 6bc97df5c0
commit eb8dbf66a1
126 changed files with 10933 additions and 287 deletions
@@ -0,0 +1,67 @@
---
name: create_obsidian_note
kind: function
lang: py
domain: obsidian
version: "1.0.0"
purity: impure
signature: "def create_obsidian_note(vault_dir: str, rel_path: str, body: str = '', frontmatter: dict = None, overwrite: bool = False) -> str"
description: "Crea una nota Markdown nueva en un vault de Obsidian. Anade extension .md si falta, crea directorios padre, serializa frontmatter YAML + body con la funcion pura format_obsidian_note. Falla si la nota existe salvo overwrite=True. No depende de la app GUI de Obsidian: solo escribe un archivo .md plano en disco."
tags: [obsidian, markdown, frontmatter, create, write, notes]
uses_functions: ["format_obsidian_note_py_obsidian"]
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["os"]
params:
- name: vault_dir
desc: "directorio raiz del vault de Obsidian donde se crea la nota"
- name: rel_path
desc: "ruta relativa de la nota dentro del vault; se le anade .md si no lo trae"
- name: body
desc: "cuerpo Markdown de la nota sin frontmatter (default cadena vacia)"
- name: frontmatter
desc: "dict con el frontmatter YAML a escribir; None se trata como {}"
- name: overwrite
desc: "si False (default) y la nota existe lanza FileExistsError; True sobreescribe"
output: "ruta absoluta (str) del archivo .md escrito"
tested: true
tests:
- "crea nota con frontmatter y body"
- "anade extension md si falta"
- "crea directorios padre"
- "existente sin overwrite lanza fileexistserror"
- "overwrite true sobreescribe"
- "destino directorio lanza isadirectoryerror"
test_file_path: "python/functions/obsidian/create_obsidian_note_test.py"
file_path: "python/functions/obsidian/create_obsidian_note.py"
---
## Ejemplo
```python
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from obsidian import create_obsidian_note
path = create_obsidian_note(
vault_dir="/home/me/vault",
rel_path="Inbox/Idea rapida", # se convierte en Inbox/Idea rapida.md
body="Primer apunte. Ver [[Proyecto X]].",
frontmatter={"title": "Idea rapida", "tags": ["inbox", "wip"]},
)
print(path) # /home/me/vault/Inbox/Idea rapida.md
```
## Cuando usarla
Cuando quieras crear una nota nueva en un vault de Obsidian desde codigo o un agente: capturar una idea en el Inbox, generar notas a partir de datos, o materializar plantillas. Crea automaticamente los directorios padre, asi que sirve para sembrar estructuras de carpetas nuevas.
## Gotchas
- **Escribe en disco** (I/O impuro): crea el archivo y los directorios padre que falten (`os.makedirs(..., exist_ok=True)`).
- **No respeta locks de la app GUI**: si Obsidian esta abierto, el archivo nuevo aparecera en el vault, pero crear una nota cuyo nombre choque con una abierta y sin guardar puede provocar conflictos de version en el editor.
- Por defecto **no sobreescribe**: lanza `FileExistsError` si la nota ya existe. Pasa `overwrite=True` para reemplazar.
- Lanza `IsADirectoryError` si el destino resuelto es un directorio existente.
- El nombre de archivo se respeta tal cual (incluidos espacios); Obsidian admite espacios en nombres de nota.