mcp-phase-gate 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.es.md +125 -57
- package/README.md +109 -50
- package/build/cli.d.ts +14 -0
- package/build/cli.js +98 -0
- package/build/config.d.ts +27 -2
- package/build/config.js +151 -22
- package/build/confirmacion.d.ts +15 -0
- package/build/confirmacion.js +100 -0
- package/build/diagnostico.d.ts +83 -0
- package/build/diagnostico.js +394 -0
- package/build/index.js +28 -388
- package/build/log.d.ts +6 -0
- package/build/log.js +27 -0
- package/build/paths.js +3 -3
- package/build/phases.d.ts +10 -1
- package/build/phases.js +48 -17
- package/build/prompts-mcp.d.ts +33 -0
- package/build/prompts-mcp.js +194 -0
- package/build/recursos.d.ts +8 -0
- package/build/recursos.js +306 -0
- package/build/schemas.d.ts +105 -51
- package/build/schemas.js +151 -78
- package/build/servidor.d.ts +3 -0
- package/build/servidor.js +372 -0
- package/build/tasks.d.ts +2 -0
- package/build/tasks.js +114 -2
- package/package.json +1 -2
- package/prompts/comandos/f1.md +14 -0
- package/prompts/comandos/f2.md +12 -0
- package/prompts/comandos/f3.md +9 -0
- package/prompts/comandos/f4.md +10 -0
- package/prompts/comandos/f5.md +12 -0
package/README.es.md
CHANGED
|
@@ -70,7 +70,7 @@ DOCUMENTACIÓN/
|
|
|
70
70
|
└── <nombre_de_la_tarea>/
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
`PROYECTO-A`, `PROYECTO-B` y `PROYECTO-C` son de ejemplo: tus proyectos son las carpetas que tú tengas ahí, con los nombres que tú les pongas. El nivel `Proyectos` es la subcarpeta de tareas, y su nombre también es configurable — ver `
|
|
73
|
+
`PROYECTO-A`, `PROYECTO-B` y `PROYECTO-C` son de ejemplo: tus proyectos son las carpetas que tú tengas ahí, con los nombres que tú les pongas. El nivel `Proyectos` es la subcarpeta de tareas, y su nombre también es configurable — ver `PHASE_GATE_TASKS_SUBDIR` más abajo.
|
|
74
74
|
|
|
75
75
|
**Lotes y recibos.** El plan de la Fase 3 parte el trabajo en lotes (`L01`, `L02`…): cada uno es un cambio que se revierte solo y deja la aplicación funcionando. La Fase 4 los ejecuta uno a la vez y cierra cada lote con un **recibo** corto (qué se hizo, qué se verificó, qué espera por ti) y un commit. Con un solo lote, el recibo es directamente `04 - Ejecución.md` y no hay subcarpeta, salvo que ese lote falle o se descarte: entonces su recibo va a `04 - Ejecución/` y la fase no se da por cerrada. Con varios, los recibos van en `04 - Ejecución/` y `04 - Ejecución.md` es el índice que se escribe al cerrar el último: hasta entonces la fase no aparece como terminada. Al pedir la Fase 4 o la 5, el servidor añade al prompt la lista de recibos que ya existen, para retomar en otro chat sin adivinar sus nombres.
|
|
76
76
|
|
|
@@ -99,7 +99,7 @@ El código es idéntico en todos lados; lo único que cambia de un equipo a otro
|
|
|
99
99
|
|
|
100
100
|
No hay nada que instalar: `npx` descarga el paquete la primera vez y lo cachea. Todo se configura en el archivo de tu cliente MCP.
|
|
101
101
|
|
|
102
|
-
**La clave que le pongas es la que identifica al servidor y la que prefija sus tools**, así que puedes ponerle la que quieras. En los ejemplos va `mcp-phase-gate`, igual que el nombre del paquete y el que el servidor declara de sí mismo
|
|
102
|
+
**La clave que le pongas es la que identifica al servidor y la que prefija sus tools y sus comandos**, así que puedes ponerle la que quieras. En los ejemplos va `mcp-phase-gate`, igual que el nombre del paquete y el que el servidor declara de sí mismo. Si lo registras por primera vez, una clave corta como `pg` deja los comandos más cortos (`/pg:f1` en Claude Code). **Si ya lo tienes registrado, conserva tu clave**: cambiarla cambia el nombre de todas las tools y comandos, y tendrías que volver a conceder sus permisos.
|
|
103
103
|
|
|
104
104
|
Recuerda que en JSON cada `\` va doble `\\`.
|
|
105
105
|
|
|
@@ -113,8 +113,8 @@ Recuerda que en JSON cada `\` va doble `\\`.
|
|
|
113
113
|
"command": "npx",
|
|
114
114
|
"args": ["-y", "mcp-phase-gate"],
|
|
115
115
|
"env": {
|
|
116
|
-
"
|
|
117
|
-
"
|
|
116
|
+
"PHASE_GATE_DOCS_PATH": "C:\\Users\\TU_USUARIO\\OneDrive - TU ORGANIZACIÓN\\Documentos\\DOCUMENTACIÓN",
|
|
117
|
+
"PHASE_GATE_REPOS_PATH": "C:\\proyectos"
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -135,8 +135,8 @@ Ojo con dos diferencias: la clave de arriba es `servers`, no `mcpServers`, y hay
|
|
|
135
135
|
"command": "npx",
|
|
136
136
|
"args": ["-y", "mcp-phase-gate"],
|
|
137
137
|
"env": {
|
|
138
|
-
"
|
|
139
|
-
"
|
|
138
|
+
"PHASE_GATE_DOCS_PATH": "C:\\Users\\TU_USUARIO\\OneDrive - TU ORGANIZACIÓN\\Documentos\\DOCUMENTACIÓN",
|
|
139
|
+
"PHASE_GATE_REPOS_PATH": "C:\\proyectos"
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
}
|
|
@@ -148,19 +148,21 @@ Ojo con dos diferencias: la clave de arriba es `servers`, no `mcpServers`, y hay
|
|
|
148
148
|
<summary><b>Claude Code</b> — de una sola línea</summary>
|
|
149
149
|
|
|
150
150
|
```bash
|
|
151
|
-
claude mcp add mcp-phase-gate --env
|
|
151
|
+
claude mcp add mcp-phase-gate --env PHASE_GATE_DOCS_PATH="C:\Users\TU_USUARIO\Documentos\DOCUMENTACIÓN" --env PHASE_GATE_REPOS_PATH="C:\proyectos" -- npx -y mcp-phase-gate
|
|
152
152
|
```
|
|
153
153
|
|
|
154
154
|
O a mano, en un `.mcp.json` en la raíz del proyecto, con la misma forma que el de Cursor.
|
|
155
155
|
</details>
|
|
156
156
|
|
|
157
|
-
Ese `
|
|
157
|
+
Ese `PHASE_GATE_DOCS_PATH` es solo un **ejemplo** con una carpeta de OneDrive. Sirve igual `G:\Mi unidad\Documentación`, `D:\Dropbox\Docs` o `C:\Docs` sin nube ninguna.
|
|
158
158
|
|
|
159
159
|
> **Por este camino no hay archivo `.env`.** El paquete vive dentro de `node_modules`, donde no tiene sentido dejar tu configuración, así que las rutas van **obligatoriamente** en el bloque `"env"`. El `.env` solo existe en el camino de abajo.
|
|
160
160
|
|
|
161
161
|
**Las dos variables son obligatorias y no tienen valor por defecto.** Si falta alguna, o si apunta a una carpeta que no existe, las tools que la necesitan te lo dicen con ese nombre exacto en vez de fallar más tarde por otro motivo.
|
|
162
162
|
|
|
163
|
-
>
|
|
163
|
+
> **¿Ya lo usabas con `ORQUESTADOR_*`?** Esos nombres siguen funcionando como alias de `PHASE_GATE_*`; no tienes que tocar nada. Si defines los dos con valores distintos gana `PHASE_GATE_*`, y `doctor` y el log del servidor te avisan.
|
|
164
|
+
|
|
165
|
+
> `npx mcp-phase-gate` escrito directamente en una terminal **parece que se cuelga**, y no está roto: es un servidor MCP esperando mensajes por stdin. Si lo que quieres es comprobar tu instalación, usa `npx mcp-phase-gate doctor` ([ver abajo](#-revisar-la-instalación-doctor)).
|
|
164
166
|
|
|
165
167
|
---
|
|
166
168
|
|
|
@@ -186,11 +188,11 @@ copy .env.example .env
|
|
|
186
188
|
Averigua tu ruta real abriendo la carpeta en el explorador y copiando la ruta de la barra de direcciones. Aquí las barras invertidas van **simples**, sin comillas:
|
|
187
189
|
|
|
188
190
|
```ini
|
|
189
|
-
|
|
190
|
-
|
|
191
|
+
PHASE_GATE_DOCS_PATH=C:\Users\TU_USUARIO\OneDrive - TU ORGANIZACIÓN\Documentos\DOCUMENTACIÓN
|
|
192
|
+
PHASE_GATE_REPOS_PATH=C:\proyectos
|
|
191
193
|
```
|
|
192
194
|
|
|
193
|
-
> Guarda el `.env` en **UTF-8 sin BOM
|
|
195
|
+
> Guarda el `.env` en **UTF-8** (con o sin BOM, da igual). Si lo creas desde PowerShell con `>` sale en UTF-16: el servidor lo detecta, no lo carga y te lo dice, tanto en el error de la variable que falta como en `doctor`.
|
|
194
196
|
|
|
195
197
|
**3. Registra el servidor** igual que en el camino A, pero cambiando `command` y `args` por el `build/index.js` de tu clon, y sin bloque `"env"` (las rutas ya vienen del `.env`):
|
|
196
198
|
|
|
@@ -207,8 +209,20 @@ En **Claude Code**, un `.mcp.json` en la raíz de este repo puede usar ruta **re
|
|
|
207
209
|
|
|
208
210
|
### ✅ Verificar que funciona
|
|
209
211
|
1. Reinicia el cliente, o desactiva y vuelve a activar el servidor en su panel de MCP.
|
|
210
|
-
2. Debe aparecer activo con sus
|
|
211
|
-
3. Pruébalo pidiendo en el chat: *"Usa la tool `
|
|
212
|
+
2. Debe aparecer activo con sus 9 tools listadas. En **Cursor** está en Settings → MCP; en **VS Code**, en la vista de extensiones/MCP; en **Claude Code**, con `/mcp`.
|
|
213
|
+
3. Pruébalo pidiendo en el chat: *"Usa la tool `get_orchestrator_status` del mcp-phase-gate"* — te devuelve la radiografía de la instalación: qué variables ve, qué prompts usa y qué proyectos encuentra.
|
|
214
|
+
|
|
215
|
+
### 🔍 Revisar la instalación: `doctor`
|
|
216
|
+
|
|
217
|
+
Desde una terminal, con las mismas variables que le das al cliente:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
npx mcp-phase-gate doctor
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Te dice qué versión corre y desde dónde (`npx`, global, una dependencia o un clon), qué valor tiene cada variable y de dónde salió (el entorno o el `.env`, y si usaste el nombre nuevo o el alias), qué archivo de prompt gana en cada fase, qué proyectos hay con su tarea activa, y una lista de hallazgos: una variable obligatoria que falta, un `.env` en UTF-16, un `global-rules.md` propio al que le faltan secciones que las fases citan, una fase sin documento… Sale con código `1` si hay algún error, así que sirve también en un script. `doctor --json` da lo mismo como JSON.
|
|
224
|
+
|
|
225
|
+
Es la misma información que devuelve la tool `get_orchestrator_status` y el recurso `phase-gate://estado`; desde el chat, además, incluye qué cliente está conectado y qué capacidades anunció.
|
|
212
226
|
|
|
213
227
|
---
|
|
214
228
|
|
|
@@ -236,23 +250,23 @@ Puede que quieras documentaciones separadas que no se mezclen: una del trabajo y
|
|
|
236
250
|
```jsonc
|
|
237
251
|
{
|
|
238
252
|
"mcpServers": {
|
|
239
|
-
"
|
|
253
|
+
"pg-trabajo": {
|
|
240
254
|
"command": "npx",
|
|
241
255
|
"args": ["-y", "mcp-phase-gate"],
|
|
242
256
|
"env": {
|
|
243
|
-
"
|
|
244
|
-
"
|
|
245
|
-
"
|
|
257
|
+
"PHASE_GATE_DOCS_PATH": "C:\\Users\\TU_USUARIO\\OneDrive - TU ORGANIZACIÓN\\Documentos\\DOCUMENTACIÓN",
|
|
258
|
+
"PHASE_GATE_REPOS_PATH": "C:\\proyectos",
|
|
259
|
+
"PHASE_GATE_STATE_PATH": "C:\\Users\\TU_USUARIO\\.orquestador\\trabajo"
|
|
246
260
|
}
|
|
247
261
|
},
|
|
248
|
-
"
|
|
262
|
+
"pg-personal": {
|
|
249
263
|
"command": "npx",
|
|
250
264
|
"args": ["-y", "mcp-phase-gate"],
|
|
251
265
|
"env": {
|
|
252
|
-
"
|
|
253
|
-
"
|
|
254
|
-
"
|
|
255
|
-
"
|
|
266
|
+
"PHASE_GATE_DOCS_PATH": "G:\\Mi unidad\\Documentación",
|
|
267
|
+
"PHASE_GATE_REPOS_PATH": "D:\\dev",
|
|
268
|
+
"PHASE_GATE_TASKS_SUBDIR": "",
|
|
269
|
+
"PHASE_GATE_STATE_PATH": "C:\\Users\\TU_USUARIO\\.orquestador\\personal"
|
|
256
270
|
}
|
|
257
271
|
}
|
|
258
272
|
}
|
|
@@ -261,12 +275,12 @@ Puede que quieras documentaciones separadas que no se mezclen: una del trabajo y
|
|
|
261
275
|
|
|
262
276
|
Es el mismo paquete en los dos: lo único que cambia son las rutas. Cada registro puede tener incluso su propia subcarpeta de tareas — arriba, la personal la deja vacía para que las tareas cuelguen directo del proyecto.
|
|
263
277
|
|
|
264
|
-
> ⚠️ **`
|
|
278
|
+
> ⚠️ **`PHASE_GATE_STATE_PATH` tiene que ser distinto en cada registro.** Si se comparte, los punteros de tarea activa se pisan **en silencio**: la clave del estado es el nombre del proyecto, así que dos documentaciones con un proyecto que se llame igual acaban compartiendo entrada y una le contesta a la otra. No da error; simplemente te responde la tarea equivocada.
|
|
265
279
|
|
|
266
280
|
Dos cosas más que muerden y no son evidentes:
|
|
267
281
|
|
|
268
282
|
- **Modo espejo, no streaming.** Google Drive en modo *streaming* y OneDrive con *Archivos a Petición* dejan los archivos como marcadores hasta que algo los abre. Este servidor vive de listar carpetas y comprobar si existen archivos, así que con marcadores se vuelve lento o falla cuando no hay red. Si puedes, ten la carpeta de Documentación **descargada localmente**.
|
|
269
|
-
- **Los repos de código, fuera de la carpeta sincronizada.** La Documentación en la nube no da problema. El código sí: la sincronización compitiendo con git sobre `.git/` corrompe repositorios. Que `
|
|
283
|
+
- **Los repos de código, fuera de la carpeta sincronizada.** La Documentación en la nube no da problema. El código sí: la sincronización compitiendo con git sobre `.git/` corrompe repositorios. Que `PHASE_GATE_REPOS_PATH` apunte a un disco local.
|
|
270
284
|
|
|
271
285
|
---
|
|
272
286
|
|
|
@@ -280,7 +294,7 @@ cambios, la causa está casi siempre aquí.
|
|
|
280
294
|
| El servidor compilado | `build/` en tu clon | Está gitignoreado. **Después de cada `git pull` que traiga cambios en `src/`, corre `npm run build`** o el cliente seguirá ejecutando la versión anterior. |
|
|
281
295
|
| Las rutas de este equipo | `.env` en la raíz ([camino B](#-camino-b--desde-el-código), paso 2) | Cambian el usuario del sistema y dónde tengas la carpeta de Documentación. |
|
|
282
296
|
| El registro del MCP | La configuración de tu cliente ([camino A](#-camino-a--con-npx-recomendado), o el paso 3 del [camino B](#-camino-b--desde-el-código)) | En Cursor y VS Code contiene la ruta absoluta a `build/index.js`, que depende de dónde clonaste y apunta a una carpeta gitignoreada. Ninguna ruta puede ser correcta en todos los equipos. Ver [`docs/decisiones.md`](docs/decisiones.md). La excepción es el `.mcp.json` de Claude Code, que va con ruta relativa. |
|
|
283
|
-
| Los comandos `/f1`–`/f5`
|
|
297
|
+
| Los comandos `/f1`–`/f5` como archivos, **solo si tu cliente no muestra bien los MCP Prompts** | `C:\Users\<TU_USUARIO>\.cursor\commands\f<N>.md` en Cursor | Desde la 2.2.0 el servidor los ofrece como MCP Prompts y llegan solos con cada versión ([ver abajo](#los-comandos-de-fase)). La copia en archivos solo hace falta como respaldo; en **Claude Code** dentro de este repo ya está versionada en `.claude/commands/`. |
|
|
284
298
|
|
|
285
299
|
### Los comandos de fase
|
|
286
300
|
|
|
@@ -302,19 +316,32 @@ Lo que hace cada uno:
|
|
|
302
316
|
Ningún comando nombra un archivo: el nombre lo declara la cabecera del prompt de cada fase
|
|
303
317
|
y `get_phase_prompt` se lo entrega al modelo.
|
|
304
318
|
|
|
305
|
-
`/f1`
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
**
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
319
|
+
`/f1` necesita project, task_name y el requerimiento completo. `/f5` acepta un rango de
|
|
320
|
+
commits; si no le das ninguno, audita los que registran los recibos de la Fase 4, y solo si no
|
|
321
|
+
hay recibos te pregunta. Los demás arrancan de `get_active_task`.
|
|
322
|
+
|
|
323
|
+
**Llegan solos, como MCP Prompts.** Desde la 2.2.0 el servidor ofrece cada comando como un
|
|
324
|
+
prompt MCP (`f1`…`f5`), con su texto en [`prompts/comandos/`](prompts/comandos). No hay que
|
|
325
|
+
copiar nada a ninguna carpeta y se actualizan con cada versión del paquete. Todos sus
|
|
326
|
+
argumentos son opcionales —`project`; en `/f1` también `task_name` y `contexto`; en `/f5`,
|
|
327
|
+
`commits`—: lo que no pases te lo pide el propio comando, y un contexto largo puede ir pegado
|
|
328
|
+
después del comando como texto normal. Una fase que añadas tú (una `fase-6`) recibe su `/f6`
|
|
329
|
+
con un texto genérico, y un `comandos/fN.md` en tu carpeta de prompts propia gana al de
|
|
330
|
+
fábrica.
|
|
331
|
+
|
|
332
|
+
Cómo se ven en cada cliente:
|
|
333
|
+
|
|
334
|
+
| Cliente | `/f1`…`/f5` visibles | Argumentos con espacios | `@` recursos | Confirmaciones directas | Notas |
|
|
335
|
+
|---------|----------------------|-------------------------|--------------|-------------------------|-------|
|
|
336
|
+
| Claude Code | Por verificar (según su documentación: `/<clave>:f1 (MCP)`, y `/mcp__<clave>__f1` como alias) | Por verificar | Por verificar | Por verificar | |
|
|
337
|
+
| Cursor | Por verificar (según su documentación: en el menú de prompts MCP) | Por verificar | Por verificar | Por verificar | En Windows, `PHASE_GATE_ELICITATION=off` mientras siga abierto el bug del formulario ([ver abajo](#-documentos-protegidos)) |
|
|
338
|
+
| VS Code | Por verificar (su documentación se contradice entre `/<clave>.f1` y `mcp.<clave>.f1`) | Por verificar | Por verificar | Por verificar | |
|
|
339
|
+
|
|
340
|
+
**Si tu cliente no los muestra cómodamente**, usa los archivos: en este repo, Claude Code ya
|
|
341
|
+
los lee de [`.claude/commands/`](.claude/commands) (idénticos a `prompts/comandos/`); para
|
|
342
|
+
usarlos en tus otros proyectos, cópialos a `C:\Users\<TU_USUARIO>\.claude\commands\`, o a
|
|
343
|
+
`C:\Users\<TU_USUARIO>\.cursor\commands\` en Cursor. Más detalle en
|
|
344
|
+
[`docs/comandos-de-fase.md`](docs/comandos-de-fase.md).
|
|
318
345
|
|
|
319
346
|
---
|
|
320
347
|
|
|
@@ -341,6 +368,8 @@ Tres cosas que **no** hace, a propósito:
|
|
|
341
368
|
- **No te obliga a escribir nada más.** Sigues escribiendo `/f4` a secas. Quien averigua de qué tarea se habla es el servidor, con el puntero que ya mantiene — no el modelo preguntándotelo.
|
|
342
369
|
- **No se calla cuando no puede comprobar.** Si tienes varios proyectos con tarea activa y no se indicó cuál, lo dice en vez de fingir que todo está en orden.
|
|
343
370
|
|
|
371
|
+
**También señala los pendientes que dejó la fase anterior.** Si el documento de la fase anterior tiene una sección `## Validaciones pendientes` con algo dentro, o si al pedir la Fase 5 algún recibo de lote quedó `con pendientes`, `fallido` o `descartado`, el prompt llega además con un bloque `## PENDIENTES HEREDADOS (detectados por el servidor)` que los nombra, para que la IA te los diga antes de empezar. Una sección que solo dice "Ninguna." no cuenta. Tampoco bloquea nada: solo señala lo que el prompt ya obligaba a escribir.
|
|
372
|
+
|
|
344
373
|
---
|
|
345
374
|
|
|
346
375
|
## 🔒 Documentos protegidos
|
|
@@ -350,7 +379,16 @@ Cada fase trabaja sobre los documentos de las anteriores, así que reescribir un
|
|
|
350
379
|
- **El contexto inicial** (`00 - Contexto Inicial.md`), siempre, incluso para crearlo. Solo `start_task` lo escribe sin `force`.
|
|
351
380
|
- **El documento de una fase congelada.** Una fase se congela en cuanto existe el documento de una fase posterior, o en cuanto la Fase 4 tiene algún recibo en `04 - Ejecución/`. Los recibos cuentan como de la Fase 4: a ellos y a `04 - Ejecución.md` solo los congela la Fase 5.
|
|
352
381
|
|
|
353
|
-
Crear un documento de fase que todavía no existe nunca se rechaza; un recibo nuevo sí, cuando la Fase 5 ya está presente. Los nombres se comparan sin distinguir mayúsculas y en la misma forma Unicode, así que escribirlos de otra manera no esquiva la protección.
|
|
382
|
+
Crear un documento de fase que todavía no existe nunca se rechaza; un recibo nuevo sí, cuando la Fase 5 ya está presente. Los nombres se comparan sin distinguir mayúsculas y en la misma forma Unicode, así que escribirlos de otra manera no esquiva la protección.
|
|
383
|
+
|
|
384
|
+
**Si hace falta una corrección legítima** —una errata en el análisis con las decisiones ya escritas—, depende de tu cliente:
|
|
385
|
+
|
|
386
|
+
- **Si tu cliente admite confirmaciones directas** (elicitation de MCP), el servidor **te pregunta a ti**, en un formulario de tu cliente con una casilla: "Reescribir `01 - Análisis Técnico.md`". Si la marcas y aceptas, se escribe y la respuesta dice que fue con tu confirmación; si dices que no o cierras el formulario, no se escribe nada. Aquí `force` no basta: lo pone la IA, y justo eso es lo que la pregunta evita.
|
|
387
|
+
- **Si no la admite**, sigue como antes: el mensaje de rechazo le explica a la IA que necesita tu confirmación explícita en el chat y `force: true`, y la respuesta avisa de que el documento se sobrescribió (o se creó, si no existía).
|
|
388
|
+
|
|
389
|
+
Lo mismo para **estrenar un proyecto** con `crear_proyecto: true`: con confirmaciones directas, el servidor te pregunta antes de crear la carpeta.
|
|
390
|
+
|
|
391
|
+
Si tu cliente anuncia confirmaciones directas pero el formulario nunca aparece, el servidor espera tres minutos y no escribe nada; a la segunda vez seguida tampoco escribe (aunque la IA haya puesto `force`) y deja de preguntar durante el resto de la sesión: desde ahí vuelve a decidir `force`, con tu confirmación en el chat. Si tu cliente cancela la llamada antes de que respondas, no se escribe nada. Para evitarlo desde el principio, registra el servidor con `PHASE_GATE_ELICITATION=off`. **En Cursor para Windows se recomienda `off`** mientras siga abierto el bug en el que el formulario no aparece.
|
|
354
392
|
|
|
355
393
|
Además, `write_central_doc` solo escribe **dentro de la carpeta de una tarea que ya existe**: no crea carpetas sueltas en la Documentación.
|
|
356
394
|
|
|
@@ -360,18 +398,34 @@ Además, `write_central_doc` solo escribe **dentro de la carpeta de una tarea qu
|
|
|
360
398
|
|
|
361
399
|
| Tool | Qué hace |
|
|
362
400
|
|------|----------|
|
|
363
|
-
| `start_task` | Crea la carpeta de una tarea **nueva** (`<PROYECTO>/Proyectos/<tarea>`), guarda el "00 - Contexto Inicial.md" y la deja como **activa de su proyecto**. Si la tarea ya existe se niega y te manda a `switch_task`, para no reescribir el contexto inicial. |
|
|
401
|
+
| `start_task` | Crea la carpeta de una tarea **nueva** (`<PROYECTO>/Proyectos/<tarea>`), guarda el "00 - Contexto Inicial.md" y la deja como **activa de su proyecto**. Si la tarea ya existe se niega y te manda a `switch_task`, para no reescribir el contexto inicial. Estrenar un proyecto pide `crear_proyecto: true` y, si tu cliente puede, tu confirmación directa. |
|
|
364
402
|
| `get_active_task` | Devuelve la tarea activa y **en qué fase va**, deducida de los documentos que ya tiene. Sin `project` responde la de cada proyecto. Úsalo al abrir un chat nuevo o si se perdió el contexto. |
|
|
365
403
|
| `list_tasks` | Lista las tareas que existen y la fase de cada una, de la más reciente a la más antigua. Para retomar algo viejo o ver qué quedó a medias. |
|
|
366
404
|
| `switch_task` | Cambia cuál es la tarea activa de un proyecto. **No toca ningún archivo**: es la forma correcta de retomar una tarea que ya existe. |
|
|
367
|
-
| `get_phase_prompt` | Trae las reglas de comportamiento globales según la fase (1–5): 1 Descubrimiento, 2 Decisiones, 3 Plan Técnico, 4 Ejecución, 5 Auditoría / Pre-PR. El texto vive en `prompts/` (ver abajo). Comprueba de paso la **compuerta**: si pasas `project` y te saltaste una fase, el prompt llega con el aviso al principio. |
|
|
405
|
+
| `get_phase_prompt` | Trae las reglas de comportamiento globales según la fase (1–5): 1 Descubrimiento, 2 Decisiones, 3 Plan Técnico, 4 Ejecución, 5 Auditoría / Pre-PR. El texto vive en `prompts/` (ver abajo). Comprueba de paso la **compuerta**: si pasas `project` y te saltaste una fase, el prompt llega con el aviso al principio, seguido de los pendientes heredados si los hay. |
|
|
368
406
|
| `read_central_doc` | Lee un archivo de la Documentación. **Recomendado:** pasar `project` + `task_name` + `file_name` (el servidor arma la ruta). También acepta `file_path` relativo. |
|
|
369
|
-
| `write_central_doc` | Escribe/sobrescribe un archivo dentro de la carpeta de una tarea. Mismos parámetros que `read_central_doc` + `content`, y `force` para los [documentos protegidos](#-documentos-protegidos). |
|
|
407
|
+
| `write_central_doc` | Escribe/sobrescribe un archivo dentro de la carpeta de una tarea. Mismos parámetros que `read_central_doc` + `content`, y `force` para los [documentos protegidos](#-documentos-protegidos) cuando tu cliente no admite confirmaciones directas. |
|
|
370
408
|
| `read_cross_repo` | Lee archivos de otros repos locales en tu carpeta de proyectos (ej. desde `repo-a` consultar cómo `repo-b` maneja un endpoint) sin cambiar de ventana. |
|
|
409
|
+
| `get_orchestrator_status` | La radiografía de la instalación, igual que [`doctor`](#-revisar-la-instalación-doctor): versión y ruta del paquete, variables y de dónde salió cada una, qué prompt gana en cada fase, proyectos con su tarea activa y avisos. Además, el cliente conectado y sus capacidades. Úsala cuando algo no se comporte como esperas. |
|
|
410
|
+
|
|
411
|
+
Todas declaran sus anotaciones MCP (solo lectura, destructiva, idempotente), así que un cliente cauto puede dejar pasar sin preguntar las de lectura. Solo `write_central_doc` es destructiva.
|
|
412
|
+
|
|
413
|
+
### Recursos `phase-gate://`
|
|
414
|
+
|
|
415
|
+
El servidor expone además los documentos como **recursos de solo lectura**, que los clientes compatibles muestran al escribir `@` en el chat para adjuntarlos sin pedírselo a la IA:
|
|
416
|
+
|
|
417
|
+
| Recurso | Qué es |
|
|
418
|
+
|---------|--------|
|
|
419
|
+
| `phase-gate://estado` | La radiografía de `doctor`, en Markdown |
|
|
420
|
+
| `phase-gate://fases` | Las fases disponibles, con su documento, sus recibos y qué archivo de prompt gana |
|
|
421
|
+
| `phase-gate://tareas/{proyecto}/{tarea}/{documento}` | Un documento de una tarea |
|
|
422
|
+
| `phase-gate://tareas/{proyecto}/{tarea}/recibos/{recibo}` | Un recibo de lote de la Fase 4 |
|
|
423
|
+
|
|
424
|
+
La lista solo incluye los documentos que existen de la **tarea activa de cada proyecto**, para no inundar el selector; el resto se alcanza con la plantilla, que autocompleta proyecto, tarea y documento. Tienen las mismas defensas que `read_central_doc`: no se salen de la carpeta de la tarea, no exponen archivos con punto y no leen más de 1 MB.
|
|
371
425
|
|
|
372
426
|
### Cómo el servidor arma las rutas
|
|
373
|
-
- **Documentación:** `
|
|
374
|
-
- **Repos de código:** `
|
|
427
|
+
- **Documentación:** `PHASE_GATE_DOCS_PATH` / `<PROYECTO>` / `PHASE_GATE_TASKS_SUBDIR` / `<tarea>` / `<archivo>`
|
|
428
|
+
- **Repos de código:** `PHASE_GATE_REPOS_PATH` / `<repo>` / `<archivo>`
|
|
375
429
|
|
|
376
430
|
### Qué cuenta como proyecto
|
|
377
431
|
|
|
@@ -379,7 +433,7 @@ No hay ninguna lista de proyectos que mantener. **Es proyecto la carpeta que con
|
|
|
379
433
|
|
|
380
434
|
Un proyecto que no existe se rechaza mostrando la lista de los que sí, en vez de crear una carpeta suelta. Para **estrenar** un proyecto hay que pedirlo a propósito: `start_task` acepta `crear_proyecto: true`, y sin esa bandera un nombre mal escrito no ensucia tu Documentación.
|
|
381
435
|
|
|
382
|
-
> Si dejas `
|
|
436
|
+
> Si dejas `PHASE_GATE_TASKS_SUBDIR` vacío, la regla no se puede aplicar y **cualquier** carpeta cuenta como proyecto.
|
|
383
437
|
|
|
384
438
|
---
|
|
385
439
|
|
|
@@ -394,7 +448,10 @@ prompts/
|
|
|
394
448
|
├── fase-2-decisiones.md
|
|
395
449
|
├── fase-3-plan-tecnico.md
|
|
396
450
|
├── fase-4-ejecucion.md
|
|
397
|
-
|
|
451
|
+
├── fase-5-auditoria-pr.md ← incluye el contrato de la descripción del PR
|
|
452
|
+
└── comandos/ ← el texto de /f1…/f5, que el servidor sirve como MCP Prompts
|
|
453
|
+
├── f1.md
|
|
454
|
+
└── …
|
|
398
455
|
```
|
|
399
456
|
|
|
400
457
|
**Se leen en cada llamada.** Si editas un `.md`, la siguiente vez que la IA invoque
|
|
@@ -426,7 +483,7 @@ Reglas del formato:
|
|
|
426
483
|
|
|
427
484
|
### Usar tus propios prompts sin perder los de fábrica
|
|
428
485
|
|
|
429
|
-
`
|
|
486
|
+
`PHASE_GATE_PROMPTS_PATH` apunta a una carpeta tuya que **se superpone** a la del paquete. No la sustituye.
|
|
430
487
|
|
|
431
488
|
Si quieres cambiar solo la Fase 2, tu carpeta lleva **un archivo**:
|
|
432
489
|
|
|
@@ -482,13 +539,16 @@ Se cargan desde el archivo `.env` de la raíz del repo (o desde el bloque `"env"
|
|
|
482
539
|
|
|
483
540
|
Las dos primeras **son obligatorias y no tienen valor por defecto**: apuntan a carpetas que solo existen en tu equipo, así que cualquier default sería la ruta de la máquina de otra persona. Si falta una, o apunta a algo que no existe o que no es una carpeta, las tools que la usan devuelven el nombre de la variable y dónde configurarla. Las que no dependen de ella —como `get_phase_prompt`— siguen funcionando.
|
|
484
541
|
|
|
542
|
+
Cada variable tiene además un **alias** con el nombre de antes, `ORQUESTADOR_*` (por ejemplo, `ORQUESTADOR_DOCS_PATH`), que sigue funcionando para no romper ninguna configuración. Si defines los dos con valores distintos gana `PHASE_GATE_*`, y `doctor` y el log del servidor te avisan.
|
|
543
|
+
|
|
485
544
|
| Variable | Por defecto | Descripción |
|
|
486
545
|
|----------|-------------|-------------|
|
|
487
|
-
| `
|
|
488
|
-
| `
|
|
489
|
-
| `
|
|
490
|
-
| `
|
|
491
|
-
| `
|
|
546
|
+
| `PHASE_GATE_DOCS_PATH` | **ninguno, es obligatoria** | Ruta a la carpeta raíz de la Documentación. Sincronizada o no, da igual. **Distinta en cada dispositivo.** |
|
|
547
|
+
| `PHASE_GATE_REPOS_PATH` | **ninguno, es obligatoria** | Ruta a la carpeta donde están tus repositorios de código. |
|
|
548
|
+
| `PHASE_GATE_TASKS_SUBDIR` | `Proyectos` | Subcarpeta donde viven las tareas dentro de cada proyecto. Vacía = las tareas cuelgan directo del proyecto. Es además la regla que decide qué carpeta cuenta como proyecto (ver abajo). |
|
|
549
|
+
| `PHASE_GATE_PROMPTS_PATH` | ninguno | Carpeta de prompts propios, que **se superponen** a los del paquete en vez de reemplazarlos: basta con poner los archivos de las fases que quieras cambiar ([ver arriba](#usar-tus-propios-prompts-sin-perder-los-de-fábrica)). |
|
|
550
|
+
| `PHASE_GATE_STATE_PATH` | Carpeta de datos del usuario (ver arriba) | Carpeta donde se guardan los punteros de tarea activa. Casi nunca hace falta tocarla; sirve para aislar el estado en pruebas y es **obligatoria si registras el servidor más de una vez** (ver [¿Varias carpetas de Documentación?](#-varias-carpetas-de-documentación-opcional)). |
|
|
551
|
+
| `PHASE_GATE_ELICITATION` | ninguno (activadas) | `off` (o `false`, `0`, `no`) para que el servidor no pida [confirmaciones directas](#-documentos-protegidos) al cliente y decida `force`, como antes. Recomendado en Cursor para Windows. No tiene alias. |
|
|
492
552
|
|
|
493
553
|
---
|
|
494
554
|
|
|
@@ -502,11 +562,19 @@ El código fuente está en `src/`, repartido por responsabilidad:
|
|
|
502
562
|
|
|
503
563
|
| Archivo | De qué se encarga |
|
|
504
564
|
|---------|-------------------|
|
|
505
|
-
| `config.ts` |
|
|
565
|
+
| `config.ts` | Variables del entorno y su alias, lectura del `.env`, dónde vive el estado, identidad del servidor |
|
|
506
566
|
| `paths.ts` | Cómo se arma cada ruta y la comprobación de que no se salga de su base |
|
|
507
567
|
| `phases.ts` | Descubrir las fases y armar el prompt de cada una |
|
|
508
|
-
| `tasks.ts` | Qué tareas existen, en qué fase va cada una
|
|
509
|
-
| `
|
|
568
|
+
| `tasks.ts` | Qué tareas existen, en qué fase va cada una, cuál está activa, la compuerta y los pendientes heredados |
|
|
569
|
+
| `schemas.ts` | Los argumentos de cada tool, con su descripción y su mensaje de error |
|
|
570
|
+
| `servidor.ts` | Las tools del servidor. No calcula nada: traduce entre el protocolo y lo anterior |
|
|
571
|
+
| `recursos.ts` | Los recursos `phase-gate://` |
|
|
572
|
+
| `prompts-mcp.ts` | Los comandos `/f1`…`/fN` como MCP Prompts |
|
|
573
|
+
| `confirmacion.ts` | Las confirmaciones directas al usuario (elicitation) |
|
|
574
|
+
| `diagnostico.ts` | La radiografía que comparten `doctor`, `get_orchestrator_status` y `phase-gate://estado` |
|
|
575
|
+
| `cli.ts` | La línea de comandos: `doctor`, `--help`, `--version` |
|
|
576
|
+
| `log.ts` | El log: stderr y, con un cliente conectado, notificaciones MCP |
|
|
577
|
+
| `index.ts` | El punto de entrada: la línea de comandos, o el servidor por stdio |
|
|
510
578
|
|
|
511
579
|
El cliente ejecuta la versión compilada `build/index.js`, así que después de cualquier cambio:
|
|
512
580
|
|
|
@@ -532,7 +600,7 @@ no tocan la tuya. El CI los corre en cada PR.
|
|
|
532
600
|
|------------|-------|
|
|
533
601
|
| Lo que el proyecto hace hoy | Este README (y su gemelo en inglés, [`README.md`](README.md) — **si cambias uno, cambia el otro**) |
|
|
534
602
|
| Por qué está diseñado así | [`docs/decisiones.md`](docs/decisiones.md) |
|
|
535
|
-
| Los comandos `/f1`–`/f5
|
|
603
|
+
| Los comandos `/f1`–`/f5` | Su texto en [`prompts/comandos/`](prompts/comandos); cómo llegan a cada cliente en [`docs/comandos-de-fase.md`](docs/comandos-de-fase.md) |
|
|
536
604
|
| Que un cambio no rompió nada | [`test/`](test), con `npm test`. El CI los corre en cada PR |
|
|
537
605
|
| Lo que falta por hacer | [Issues](https://github.com/Montse2308/mcp-phase-gate/issues) — agrupados con las labels `v1-uso-propio` y `v2-publico` |
|
|
538
606
|
| Lo que ya se hizo | El historial de commits y los PRs mergeados |
|