f8793f96ac
El generador de runner de fn run (cmd/fn/pyrunner.go::generatePyRunner)
parsea la signature de la funcion desde el frontmatter del .md y emite
`<param> = _args[i]` por cada parametro posicional. Cuando la firma es
keyword-only (`def f(*, ...)`), el `*` se trata como un nombre de parametro
y genera la linea invalida `* = _args[0]`, que rompe el runner con
`SyntaxError: invalid syntax` antes de ejecutar la funcion.
Se quita el separador keyword-only (`*,`) de la firma — tanto en la `def`
del .py como en el campo `signature:` del .md (la fuente que lee el
indexer y el runner) — convirtiendo los parametros keyword-only en
parametros normales con su mismo default. No cambia nombres, defaults ni
comportamiento: las llamadas con keyword siguen siendo validas.
Afecta a 5 funciones detectadas en el report 0208 §3.3, todas con
SyntaxError reproducido via `fn run <id>`:
- comfyui_fetch_civitai_image_meta
- comfyui_load_skill
- comfyui_save_skill
- comfyui_import_workflow_png
- comfyui_list_skills
Se completa ademas el fix de comfyui_interrupt_queue: el commit 643ebfb8
quito el `*,` del .py pero dejo el `*,` en el campo `signature:` del .md,
que es justo lo que lee el runner — por eso `fn run comfyui_interrupt_queue`
seguia fallando. Aqui se corrige el .md.
Verificado: tras el cambio las 6 despachan sin SyntaxError (las 4 con
primer arg requerido devuelven el `missing required arg` esperado del
runner; list_skills e interrupt_queue ejecutan `ok:true`). Tests
existentes verdes (comfyui_fetch_civitai_image_meta_test.py +
tests/test_comfyui_interrupt_queue.py: 8 passed).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.7 KiB
2.7 KiB
name, kind, lang, domain, version, purity, signature, description, error_type, tags, uses_functions, uses_types, params, output, file_path
| name | kind | lang | domain | version | purity | signature | description | error_type | tags | uses_functions | uses_types | params | output | file_path | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| comfyui_load_skill | function | py | ml | 1.0.0 | impure | def comfyui_load_skill(slug: str, version=None, library_dir: str = None) -> dict | Lee una receta de skill ComfyUI de la libreria de disco: recipe.json (version actual) o un snapshot versions/vN.json. Hermana inversa de comfyui_save_skill; el round-trip save(recipe)->load(slug) devuelve un dict identico. library_dir default ~/ComfyUI/skills_library. Slug, version o archivo inexistente -> {ok:False} sin lanzar. | error_go_core |
|
|
dict {ok, recipe, slug, path, version, error}. En exito ok=True y recipe es el dict guardado; si slug/version/archivo no existen ok=False y recipe=None. | python/functions/ml/comfyui_load_skill.py |
comfyui_load_skill
Carga una receta de skill guardada por comfyui_save_skill. Paso de
entrada del flujo del grupo comfyui-skill: load_skill →
comfyui_build_skill_workflow → submit → wait.
Ejemplo
import sys, os
sys.path.insert(0, os.path.join(os.environ["HOME"], "fn_registry", "python", "functions"))
from ml.comfyui_load_skill import comfyui_load_skill
# Version actual
res = comfyui_load_skill("portrait_cinematic_sdxl", library_dir="/tmp/skills_demo")
if res["ok"]:
recipe = res["recipe"]
# Un snapshot concreto (v1, v2, ...)
old = comfyui_load_skill("portrait_cinematic_sdxl", version=1, library_dir="/tmp/skills_demo")
O directo: ./fn run comfyui_load_skill demo_skill --library-dir /tmp/skills_demo.
Cuando usarla
- Para recuperar una receta antes de compilarla con
comfyui_build_skill_workflow. - Para inspeccionar un snapshot histórico concreto (
version=N) y comparar cómo evolucionó una skill.
Gotchas
- No lanza excepción: slug inexistente, versión inválida o archivo ausente devuelven
{ok: False, recipe: None, error: ...}. Compruebares["ok"]antes de usarres["recipe"]. versionacepta varios formatos: int1, str"1"o"v1"apuntan aversions/v1.json. Cualquier otra cosa da error de versión inválida.- Round-trip exacto con save: lee el JSON tal cual se guardó; no normaliza ni rellena campos.
- library_dir por defecto
~/ComfyUI/skills_library: pásalo explícito para librerías de test o aisladas.