chore: auto-commit (799 archivos)
- .claude/CLAUDE.md - .claude/commands/subagentes.md - .claude/rules/INDEX.md - .mcp.json - bash/functions/cybersecurity/analyze_dns.md - bash/functions/cybersecurity/audit_http_headers.md - bash/functions/cybersecurity/audit_ssh_config.md - bash/functions/cybersecurity/check_firewall.md - bash/functions/cybersecurity/detect_suspicious_users.md - bash/functions/cybersecurity/encrypt_file.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
---
|
||||
name: generate_capability_doc
|
||||
kind: pipeline
|
||||
lang: bash
|
||||
domain: pipelines
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "generate_capability_doc(group: string, --registry: string?, --out: string?) -> void"
|
||||
description: "Regenera la tabla de funciones de una pagina capability en docs/capabilities/<group>.md consultando registry.db. Preserva bloques curated (Ejemplo canonico, Fronteras, Prerequisitos, Notas). Si el archivo no existe lo crea con plantilla minima."
|
||||
tags: ["capability-groups", "docs", "doctor", "generator", "pipeline"]
|
||||
uses_functions:
|
||||
- audit_capability_groups_go_infra
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: []
|
||||
params:
|
||||
- name: group
|
||||
desc: "slug del capability group (ej. notebook, metabase). Coincide con el tag canonico en frontmatter de funciones."
|
||||
- name: --registry
|
||||
desc: "path opcional a registry.db o a su directorio padre (default: walk-up desde cwd hasta encontrar registry.db)."
|
||||
- name: --out
|
||||
desc: "path opcional del archivo de salida (default: <root>/docs/capabilities/<group>.md)."
|
||||
output: "path del archivo actualizado o creado + count de funciones a stdout. Exit 0 ok, exit 1 si error."
|
||||
tested: false
|
||||
tests: []
|
||||
test_file_path: ""
|
||||
file_path: "bash/functions/pipelines/generate_capability_doc.sh"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```bash
|
||||
# Regenerar tabla de notebook (ya existe, preserva Ejemplo canonico / Fronteras)
|
||||
./bash/functions/pipelines/generate_capability_doc.sh notebook
|
||||
# → /home/lucas/fn_registry/docs/capabilities/notebook.md updated (5 functions)
|
||||
|
||||
# Crear pagina nueva para un grupo sin pagina todavia
|
||||
./bash/functions/pipelines/generate_capability_doc.sh metabase
|
||||
# → /home/lucas/fn_registry/docs/capabilities/metabase.md created (12 functions)
|
||||
|
||||
# Especificar registry y destino custom
|
||||
./bash/functions/pipelines/generate_capability_doc.sh android \
|
||||
--registry /ruta/alternativa/registry.db \
|
||||
--out /tmp/android_cap.md
|
||||
# → /tmp/android_cap.md created (8 functions)
|
||||
|
||||
# Grupo sin funciones todavia (avisa pero no falla)
|
||||
./bash/functions/pipelines/generate_capability_doc.sh nuevo_grupo
|
||||
# WARN: El grupo 'nuevo_grupo' no tiene funciones con ese tag en registry.db.
|
||||
# → /home/lucas/fn_registry/docs/capabilities/nuevo_grupo.md created (0 functions)
|
||||
```
|
||||
|
||||
## Comportamiento detallado
|
||||
|
||||
### Resolucion de root
|
||||
|
||||
Walk-up desde `cwd` buscando `registry.db`. Si se pasa `--registry`:
|
||||
- Si es un archivo: toma el directorio padre.
|
||||
- Si es un directorio: lo usa directamente.
|
||||
|
||||
### Tabla generada (SQL)
|
||||
|
||||
```sql
|
||||
SELECT f.id, f.signature, f.description
|
||||
FROM functions f, json_each(f.tags) j
|
||||
WHERE j.value = '<group>'
|
||||
ORDER BY f.id;
|
||||
```
|
||||
|
||||
JOIN custom via `json_each` — usa `sqlite3` directo (excepcion autorizada para JOINs no expuestos por MCP).
|
||||
|
||||
### Formato de tabla
|
||||
|
||||
```markdown
|
||||
| ID | Firma | Que hace |
|
||||
|---|---|---|
|
||||
| `<id>` | `<signature>` | <description> |
|
||||
```
|
||||
|
||||
Los `|` dentro de signatures y descriptions se escapan como `\|`.
|
||||
|
||||
### Preservacion de bloques curated
|
||||
|
||||
Cuando el archivo ya existe:
|
||||
- El bloque entre `## Funciones` y la siguiente `## ` se reemplaza.
|
||||
- Todo lo anterior y posterior (Ejemplo canonico, Fronteras, Prerequisitos, Notas, etc.) se mantiene intacto.
|
||||
- Implementado con `awk`: copia hasta `## Funciones`, imprime nueva tabla, salta contenido viejo hasta encontrar `^## `, reanuda copia.
|
||||
|
||||
### Archivo nuevo
|
||||
|
||||
Si `docs/capabilities/<group>.md` no existe, se crea con plantilla minima:
|
||||
- Titulo `# Capability: <group>`.
|
||||
- Placeholder de descripcion (editable a mano).
|
||||
- Tabla generada.
|
||||
- Secciones vacias: `## Ejemplo canonico`, `## Fronteras`.
|
||||
|
||||
## Codigos de salida
|
||||
|
||||
| Codigo | Significado |
|
||||
|--------|-------------|
|
||||
| 0 | Exito |
|
||||
| 1 | Error: grupo no especificado, registry.db no encontrado, fallo SQL, awk vacio |
|
||||
|
||||
## Notas
|
||||
|
||||
- `uses_functions: []` — depende de `sqlite3` y `awk` del sistema, no de funciones del registry.
|
||||
- El tag del grupo debe ser plano (ej. `notebook`, `metabase`), no `tag:notebook`.
|
||||
- Enganchado en `docs/capabilities/INDEX.md` como el mecanismo de auto-generacion referenciado bajo `fn doctor capabilities --update`.
|
||||
- Seguro para re-ejecucion: idempotente si el registry no cambia.
|
||||
Reference in New Issue
Block a user