feat: modelo por defecto por proyecto con selector y orden /modelo-proyecto

This commit is contained in:
sargatxet committed 2026-10-18 14:03:22 +02:00
1 parent b35bc7a607
commit f6d2870635
12 files changed
+372 -22

No files matched your search

+23 -6
View File
@@ -1,6 +1,6 @@
---
name: new-project
description: Genera la base documental de un proyecto nuevo (AGENTS.md, README.md, CHANGELOG.md, TODO.md, INSTALL.md y .gitignore) a partir de plantillas. Úsala cuando el usuario pida crear un proyecto, repositorio o directorio nuevo, inicializar su documentación o "montar el esqueleto" de un repo.
description: Genera la base documental de un proyecto nuevo (AGENTS.md, README.md, CHANGELOG.md, TODO.md, INSTALL.md y .gitignore) a partir de plantillas, y deja que el usuario elija el modelo por defecto del proyecto. Úsala cuando el usuario pida crear un proyecto, repositorio o directorio nuevo, inicializar su documentación o "montar el esqueleto" de un repo.
license: MIT
---
@@ -28,22 +28,37 @@ Genera el esqueleto documental de un proyecto. Todas las plantillas están en
El script no sobreescribe ficheros existentes salvo con `--force` y muestra
un resumen de lo creado. Usa `--dry-run` para revisar antes.
3. **Revisa el resultado**: abre `README.md` y `AGENTS.md` del proyecto generado
3. **Modelo por defecto del proyecto** (obligatorio): el usuario elige el modelo
de entre los existentes; tú no lo eliges.
- Llama a la herramienta `elegir_modelo_proyecto` con `ruta` = destino del
proyecto. Muestra al usuario el selector con los modelos disponibles y
guarda su elección en `<ruta>/.pi/settings.json` (`defaultProvider` y
`defaultModel`). pi lo usará en todas las sesiones nuevas del proyecto.
- Si la herramienta no existe o no hay interfaz: ejecuta `pi --list-models`,
enséñale la lista al usuario, pregúntale cuál quiere y guárdalo con
`scripts/new-project.sh --modelo proveedor/id <destino>` (solo crea
`.pi/settings.json` si no existe).
- Si el usuario cancela, déjalo sin fijar e indícale que puede hacerlo más
tarde con `/modelo-proyecto`.
4. **Revisa el resultado**: abre `README.md` y `AGENTS.md` del proyecto generado
y completa lo que quede como `PENDIENTE` (objetivos, stack, comandos de
verificación reales). No dejes marcadores de plantilla ni secciones vacías.
4. **Ajusta** `INSTALL.md` con los requisitos y pasos reales del stack elegido.
5. **Commit inicial** si se creó repo git:
5. **Ajusta** `INSTALL.md` con los requisitos y pasos reales del stack elegido.
6. **Commit inicial** si se creó repo git (incluye `.pi/settings.json`):
```bash
git add -A && git commit -m "docs: base documental inicial"
```
6. Informa al usuario de la ruta creada, los ficheros y del commit.
7. Informa al usuario de la ruta creada, los ficheros, el modelo elegido, el
commit y de que puede cambiar el modelo en cualquier momento con
`/modelo-proyecto` dentro del proyecto.
## Reglas
- No ejecutes el script sobre un directorio que ya tiene `AGENTS.md` o `README.md`
sin avisar y confirmar (usaría `--force`).
- Las secciones `## Reglas de modelo` y `## Reglas de funcionamiento` de
- Las secciones `## Reglas de modelo` (salvo el modelo por defecto, que gestiona
`/modelo-proyecto`) y `## Reglas de funcionamiento` de
`AGENTS.md` se dejan como `PENDIENTE` a propósito: se acuerdan después, por
proyecto. No las rellenes con suposiciones.
- Idioma de los documentos generados: español.
@@ -52,6 +67,8 @@ Genera el esqueleto documental de un proyecto. Todas las plantillas están en
## Referencia
- `scripts/new-project.sh --help` — todas las opciones.
- `/modelo-proyecto [proveedor/id]` — cambia el modelo por defecto del proyecto
del directorio actual (sin argumento, muestra el selector).
- `templates/` — plantillas con marcadores `{{PROYECTO}}`, `{{DESCRIPCION}}`,
`{{AUTOR}}`, `{{FECHA}}`, `{{FECHA_ISO}}`.
- `references/plantillas.md` — qué contiene cada documento y cuándo tocarlo.
+12 -1
View File
@@ -10,6 +10,7 @@ Qué genera `new-project.sh` y cuándo hay que tocar cada documento.
| `CHANGELOG.md` | Historial *Keep a Changelog*: `Añadido` / `Cambiado` / `Corregido` / `Eliminado`. | En cada cambio, sin excepción. |
| `TODO.md` | Tareas en curso, pendientes y hechas, incluida la deuda técnica. | Al abrir o cerrar tareas. |
| `.gitignore` | Exclusiones básicas: secretos, dependencias descargadas, artefactos de build, logs. | Al detectar ficheros que no deben versionarse. |
| `.pi/settings.json` | Modelo por defecto de pi para el proyecto (`defaultProvider`, `defaultModel`). Lo crea `elegir_modelo_proyecto` o `--modelo`. | Solo con `/modelo-proyecto`, a petición del usuario. |
## Marcadores
@@ -26,7 +27,17 @@ El script sustituye estos marcadores en todas las plantillas:
`AGENTS.md` incluye a propósito dos secciones con `PENDIENTE`:
- `## Reglas de modelo` — modelo de pi, contexto y criterio de selección.
- `## Reglas de modelo` — explica dónde está el modelo por defecto y cómo
cambiarlo; el criterio de selección por tarea queda `PENDIENTE`.
- `## Reglas de funcionamiento` — estándares, ramas, revisión y automatización.
No se rellenan al generar el proyecto: se acuerdan después, proyecto a proyecto.
## Modelo por defecto
- Al crear el proyecto, el usuario elige el modelo en el selector de la
herramienta `elegir_modelo_proyecto` (alternativa: `--modelo proveedor/id`).
- Se guarda en `<proyecto>/.pi/settings.json`; pi lo aplica en cada sesión nueva
del proyecto si éste es de confianza.
- Se cambia en cualquier momento con `/modelo-proyecto`, que fusiona el valor con
el resto de ajustes del fichero y activa el modelo en la sesión actual.
+32 -3
View File
@@ -13,6 +13,7 @@ PROYECTO=""
DESCRIPCION=""
AUTOR=""
DESTINO=""
MODELO=""
INIT_GIT=0
FORCE=0
DRY_RUN=0
@@ -28,6 +29,10 @@ Opciones:
-n, --nombre NOMBRE Nombre del proyecto (por defecto: nombre del directorio).
-d, --descripcion TEXTO Descripción en una frase (por defecto: PENDIENTE).
-a, --autor NOMBRE Autor (por defecto: git config user.name).
-m, --modelo PROV/ID Modelo por defecto del proyecto; se guarda en
.pi/settings.json (lista: pi --list-models).
En pi es preferible la herramienta
elegir_modelo_proyecto o la orden /modelo-proyecto.
-g, --git Inicializa un repositorio git en el destino.
-f, --force Sobreescribe ficheros que ya existan.
--dry-run Muestra lo que haría sin escribir nada.
@@ -37,12 +42,14 @@ EOF
die() { printf 'error: %s\n' "$*" >&2; exit 1; }
aviso() { printf 'aviso: %s\n' "$*" >&2; }
requiere() { [[ $# -ge 2 && -n "$2" && "$2" != -* ]] || die "$1 necesita un valor"; }
while [[ $# -gt 0 ]]; do
case "$1" in
-n | --nombre) PROYECTO="${2:-}"; shift 2 ;;
-d | --descripcion) DESCRIPCION="${2:-}"; shift 2 ;;
-a | --autor) AUTOR="${2:-}"; shift 2 ;;
-n | --nombre) requiere "$@"; PROYECTO="$2"; shift 2 ;;
-d | --descripcion) requiere "$@"; DESCRIPCION="$2"; shift 2 ;;
-a | --autor) requiere "$@"; AUTOR="$2"; shift 2 ;;
-m | --modelo) requiere "$@"; MODELO="$2"; shift 2 ;;
-g | --git) INIT_GIT=1; shift ;;
-f | --force) FORCE=1; shift ;;
--dry-run) DRY_RUN=1; shift ;;
@@ -74,6 +81,11 @@ if [[ -z "$AUTOR" ]]; then
[[ -n "$AUTOR" ]] || AUTOR="PENDIENTE"
fi
if [[ -n "$MODELO" ]]; then
[[ "$MODELO" =~ ^[^/[:space:]\"]+/[^[:space:]\"]+$ ]] \
|| die "--modelo debe tener la forma proveedor/id (p. ej. anthropic/claude-sonnet-4-5)"
fi
FICHEROS=(AGENTS.md README.md CHANGELOG.md TODO.md INSTALL.md .gitignore)
render() {
@@ -109,6 +121,22 @@ for fichero in "${FICHEROS[@]}"; do
creados+=("$fichero")
done
if [[ -n "$MODELO" ]]; then
settings="$DESTINO/.pi/settings.json"
if [[ -e "$settings" && $FORCE -eq 0 ]]; then
omitidos+=(".pi/settings.json")
aviso ".pi/settings.json ya existe; se omite (usa /modelo-proyecto en pi para cambiar el modelo sin perder otros ajustes)"
elif [[ $DRY_RUN -eq 1 ]]; then
printf 'dry-run: escribiría %s (modelo %s)\n' "$settings" "$MODELO"
creados+=(".pi/settings.json")
else
mkdir -p -- "$DESTINO/.pi"
printf '{\n "defaultProvider": "%s",\n "defaultModel": "%s"\n}\n' \
"${MODELO%%/*}" "${MODELO#*/}" > "$settings"
creados+=(".pi/settings.json")
fi
fi
if [[ $INIT_GIT -eq 1 && $DRY_RUN -eq 0 ]]; then
if [[ -d "$DESTINO/.git" ]]; then
aviso "$DESTINO ya es un repositorio git"
@@ -120,6 +148,7 @@ fi
printf '\nproyecto: %s\n' "$PROYECTO"
printf 'destino: %s\n' "$destino_abs"
printf 'modelo: %s\n' "${MODELO:-sin fijar (elígelo con /modelo-proyecto)}"
printf 'creados: %s\n' "${creados[*]:-ninguno}"
[[ ${#omitidos[@]} -eq 0 ]] || printf 'omitidos: %s\n' "${omitidos[*]}"
[[ $DRY_RUN -eq 1 ]] || printf 'siguiente: revisa README.md, INSTALL.md y las secciones PENDIENTE de AGENTS.md\n'
+18 -3
View File
@@ -16,13 +16,28 @@ Léela antes de tocar cualquier fichero y respétala en cada cambio.
| `INSTALL.md` | Instalación detallada y dependencias. |
| `CHANGELOG.md` | Historial de cambios (*Keep a Changelog*). |
| `TODO.md` | Tareas pendientes y deuda técnica. |
| `.pi/settings.json` | Ajustes de pi del proyecto: modelo por defecto. |
| _(completar)_ | Añade aquí el código y los recursos del proyecto. |
## Reglas de modelo
PENDIENTE: definir qué modelo de pi se usa en este proyecto, con qué contexto y
con qué criterio de selección (coste, VRAM, ventana, velocidad). Se acuerda
tarea por tarea; hasta entonces, no fijar valores aquí.
### Modelo por defecto
El modelo por defecto del proyecto se guarda en `.pi/settings.json`
(`defaultProvider` y `defaultModel`) y pi lo aplica al iniciar cada sesión nueva
en este directorio (requiere haber confiado en el proyecto: `/trust`).
- Para cambiarlo: `/modelo-proyecto` (muestra los modelos disponibles) o
`/modelo-proyecto proveedor/id`.
- No edites a mano ni cambies ese modelo sin que lo pida el usuario.
- `.pi/settings.json` se versiona; un cambio de modelo se commitea como
cualquier otro cambio.
### Otras reglas
PENDIENTE: definir el contexto y el criterio de selección de modelos por tarea
(coste, VRAM, ventana, velocidad). Se acuerda tarea por tarea; hasta entonces,
no fijar valores aquí.
## Reglas de funcionamiento
+3 -1
View File
@@ -39,7 +39,9 @@ PENDIENTE: ejemplo mínimo de uso o de arranque.
├── README.md # este documento
├── INSTALL.md # instalación y dependencias
├── CHANGELOG.md # historial de cambios
└── TODO.md # tareas pendientes
├── TODO.md # tareas pendientes
└── .pi/
└── settings.json # modelo por defecto de pi (cambiar con /modelo-proyecto)
```
## Documentación
+2 -1
View File
@@ -9,7 +9,8 @@ anota el cambio en `CHANGELOG.md`.
## Pendiente
- [ ] Definir las **reglas de modelo** del proyecto en `AGENTS.md`.
- [ ] Definir las **reglas de modelo** del proyecto en `AGENTS.md` (criterio por
tarea; el modelo por defecto se cambia con `/modelo-proyecto`).
- [ ] Definir las **reglas de funcionamiento** del proyecto en `AGENTS.md`.
- [ ] Completar los `PENDIENTE` de `README.md` e `INSTALL.md`.
- [ ] Fijar los comandos de verificación reales en `AGENTS.md`.