create-harness-btp 0.2.5 → 0.3.1

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.
Files changed (81) hide show
  1. package/AI/VERSION +1 -1
  2. package/AI/agents/analyst.md +30 -0
  3. package/AI/agents/architect.md +29 -0
  4. package/AI/agents/backend-cap.md +19 -0
  5. package/AI/agents/deploy-cf.md +26 -0
  6. package/AI/agents/documentarian.md +20 -0
  7. package/AI/agents/e2e-fiori.md +62 -0
  8. package/AI/agents/frontend-ui5.md +20 -0
  9. package/AI/agents/harness-evolution.md +38 -0
  10. package/AI/agents/orchestrator.md +41 -0
  11. package/AI/agents/qa-review.md +28 -0
  12. package/AI/agents/researcher.md +29 -0
  13. package/AI/clients/claude/agents/analyst.md +22 -0
  14. package/AI/clients/claude/agents/architect.md +21 -0
  15. package/AI/clients/claude/agents/backend-cap.md +18 -0
  16. package/AI/clients/claude/agents/deploy-cf.md +25 -0
  17. package/AI/clients/claude/agents/documentarian.md +15 -0
  18. package/AI/clients/claude/agents/e2e-fiori.md +61 -0
  19. package/AI/clients/claude/agents/frontend-ui5.md +19 -0
  20. package/AI/clients/claude/agents/harness-evolution.md +37 -0
  21. package/AI/clients/claude/agents/orchestrator.md +40 -0
  22. package/AI/clients/claude/agents/qa-review.md +27 -0
  23. package/AI/clients/claude/agents/researcher.md +21 -0
  24. package/AI/clients/claude/commands/flow.md +16 -0
  25. package/AI/clients/claude/commands/verify.md +18 -0
  26. package/AI/clients/claude/skills/cap-cli/SKILL.md +21 -0
  27. package/AI/clients/claude/skills/cf-cli/SKILL.md +41 -0
  28. package/AI/clients/claude/skills/mta-build/SKILL.md +45 -0
  29. package/AI/clients/claude/skills/sap-verify/SKILL.md +27 -0
  30. package/AI/clients/copilot/agents/analyst.agent.md +22 -0
  31. package/AI/clients/copilot/agents/architect.agent.md +21 -0
  32. package/AI/clients/copilot/agents/backend-cap.agent.md +18 -0
  33. package/AI/clients/copilot/agents/deploy-cf.agent.md +25 -0
  34. package/AI/clients/copilot/agents/documentarian.agent.md +15 -0
  35. package/AI/clients/copilot/agents/e2e-fiori.agent.md +61 -0
  36. package/AI/clients/copilot/agents/frontend-ui5.agent.md +19 -0
  37. package/AI/clients/copilot/agents/harness-evolution.agent.md +37 -0
  38. package/AI/clients/copilot/agents/orchestrator.agent.md +40 -0
  39. package/AI/clients/copilot/agents/qa-review.agent.md +27 -0
  40. package/AI/clients/copilot/agents/researcher.agent.md +21 -0
  41. package/AI/clients/copilot/prompts/flow.prompt.md +16 -0
  42. package/AI/clients/copilot/prompts/verify.prompt.md +18 -0
  43. package/AI/clients/copilot/skills/cap-cli/SKILL.md +21 -0
  44. package/AI/clients/copilot/skills/cf-cli/SKILL.md +41 -0
  45. package/AI/clients/copilot/skills/mta-build/SKILL.md +45 -0
  46. package/AI/clients/copilot/skills/sap-verify/SKILL.md +27 -0
  47. package/AI/clients/cursor/commands/flow.md +12 -0
  48. package/AI/clients/cursor/commands/verify.md +14 -0
  49. package/AI/clients/cursor/skills/cap-cli/SKILL.md +21 -0
  50. package/AI/clients/cursor/skills/cf-cli/SKILL.md +41 -0
  51. package/AI/clients/cursor/skills/mta-build/SKILL.md +45 -0
  52. package/AI/clients/cursor/skills/sap-verify/SKILL.md +27 -0
  53. package/AI/clients/opencode/agents/analyst.md +29 -0
  54. package/AI/clients/opencode/agents/architect.md +28 -0
  55. package/AI/clients/opencode/agents/backend-cap.md +18 -0
  56. package/AI/clients/opencode/agents/deploy-cf.md +25 -0
  57. package/AI/clients/opencode/agents/documentarian.md +19 -0
  58. package/AI/clients/opencode/agents/e2e-fiori.md +61 -0
  59. package/AI/clients/opencode/agents/frontend-ui5.md +19 -0
  60. package/AI/clients/opencode/agents/harness-evolution.md +37 -0
  61. package/AI/clients/opencode/agents/orchestrator.md +40 -0
  62. package/AI/clients/opencode/agents/qa-review.md +27 -0
  63. package/AI/clients/opencode/agents/researcher.md +28 -0
  64. package/AI/clients/opencode/commands/flow.md +16 -0
  65. package/AI/clients/opencode/commands/verify.md +18 -0
  66. package/AI/clients/opencode/skills/cap-cli/SKILL.md +21 -0
  67. package/AI/clients/opencode/skills/cf-cli/SKILL.md +41 -0
  68. package/AI/clients/opencode/skills/mta-build/SKILL.md +45 -0
  69. package/AI/clients/opencode/skills/sap-verify/SKILL.md +27 -0
  70. package/AI/commands/flow.md +16 -0
  71. package/AI/commands/verify.md +18 -0
  72. package/AI/skills/cap-cli/SKILL.md +21 -0
  73. package/AI/skills/cf-cli/SKILL.md +41 -0
  74. package/AI/skills/mta-build/SKILL.md +45 -0
  75. package/AI/skills/sap-verify/SKILL.md +27 -0
  76. package/README.md +83 -17
  77. package/VERSION +1 -1
  78. package/bin/harness-btp.js +74 -28
  79. package/install.ps1 +72 -22
  80. package/install.sh +88 -28
  81. package/package.json +1 -1
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: cf-cli
3
+ description: Uso estándar del CLI de Cloud Foundry (cf)
4
+ ---
5
+
6
+ # CLI Cloud Foundry (`cf`)
7
+
8
+ El CLI de Cloud Foundry se invoca **siempre** como `cf` (instalación
9
+ estándar del CLI; adapta rutas según tu equipo). Si `cf` en tu máquina
10
+ corresponde a otra herramienta, define un alias propio y úsalo de forma
11
+ consistente donde el harness diga `cf`.
12
+
13
+ ## Lectura segura (sin secretos)
14
+
15
+ ```
16
+ cf target # endpoint / org / espacio actuales
17
+ cf api # endpoint y versión API
18
+ cf orgs # solo nombres
19
+ cf spaces # solo nombres
20
+ cf apps # estado observable (started/stopped, rutas)
21
+ cf services # instancias visibles
22
+ cf logs <app> --recent
23
+ ```
24
+
25
+ `target`, `api`, `orgs`, `spaces` y `app <nombre>` nunca muestran tokens.
26
+ Si una salida incluyera un secreto, redáctalo antes de citarla.
27
+
28
+ ## Mutaciones (solo `deploy-cf`, con destino confirmado)
29
+
30
+ - Confirmar endpoint/org/espacio contra la spec **antes** de cada despliegue.
31
+ - `cf push` para apps simples; `cf deploy <archivo>.mtar` para MTA
32
+ (requiere plugin `multiapps`, no instalado: ver skill `mta-build`).
33
+ - Verificar después: `cf apps` + `cf logs <app> --recent` + URL.
34
+
35
+ ## Denylist
36
+
37
+ - Borrar o renombrar orgs, espacios, apps o servicios fuera del MVP.
38
+ - `cf login`/re-autenticaciones no solicitadas (si la sesión caduca,
39
+ pedir al usuario el flujo interactivo, nunca credenciales en texto).
40
+ - `--var`/`--vars-file` con secretos en shell compartida; usar archivos ya
41
+ ignorados por Git y no citar sus valores.
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: mta-build
3
+ description: Construir y verificar artefactos MTAR con mbt en este equipo
4
+ ---
5
+
6
+ # Build MTA (`mbt`)
7
+
8
+ `mbt` es Cloud MTA Build Tool 1.2.50 (verificado 2026-10-29). Invocarlo
9
+ siempre como `mbt`, nunca como `cf` ni rutas inventadas.
10
+
11
+ ## Flujo
12
+
13
+ ```
14
+ mbt build # requiere mta.yaml en la raíz del proyecto
15
+ ```
16
+
17
+ - El `.mtar` resultante queda en `mta_archives/` con el nombre/versión de
18
+ `mta.yaml`. Comprobar existencia y fecha antes de desplegar.
19
+ - Para módulos Node.js, `mbt` ejecuta `npm install`/`npm run build` según
20
+ `mta.yaml`; para Java necesita Maven (`mvn` no instalado: documentar como
21
+ pendiente si una spec lo exige).
22
+ - `mbt build --help` para flags (`--mtar`, `--platform=cf`).
23
+
24
+ ## Despliegue del MTAR
25
+
26
+ `cf deploy <archivo>.mtar` requiere el **plugin multiapps**. Verificar
27
+ siempre con `cf plugins` antes de asumir su ausencia (2026-10-30 resultó
28
+ ya instalado contra lo documentado). Instalarlo solo cuando un MVP necesite
29
+ despliegue MTA:
30
+
31
+ ```
32
+ cf install-plugin -r CF-Community multiapps
33
+ ```
34
+
35
+ Alternativa sin plugin para MVPs simples: `cf push` por app según plan.
36
+
37
+ ## Notas
38
+
39
+ - El binario `mbt.exe` se obtuvo con el propio `install.js` del paquete npm
40
+ (`node install.js cloud-mta-build-tool`). Si `mbt` vuelve a fallar tras
41
+ una actualización global, repetir ese comando en el directorio del paquete.
42
+ - Nunca versionar `mta_archives/*.mtar` ni `default-services.json` con claves.
43
+ - `mbt` exige `make` en `%PATH%` (ver `AGENTS.md` § Disciplina de shell y
44
+ CLIs): si falla `exec: "make": executable file not found`, anteponer el
45
+ `bin` de ezwinports/GnuWin32 al `$env:PATH` solo para el comando.
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: sap-verify
3
+ description: Clasificar disponibilidad, cuenta y coste de servicios SAP/BTP
4
+ ---
5
+
6
+ # Verificación de dependencias externas SAP
7
+
8
+ Toda afirmación sobre un servicio, plan, API o capacidad BTP se clasifica en
9
+ una de estas categorías, con fuente y fecha:
10
+
11
+ | Categoría | Significado |
12
+ |---|---|
13
+ | **Documentado** | Docs oficiales vigentes + evidencia (comando, consola o enlace con fecha). |
14
+ | **Pendiente en cuenta** | Existe en docs pero sin comprobar en la subcuenta/destino real. |
15
+ | **Coste por cotizar** | Requiere plan de pago o métrica no verificada; no activar sin confirmación. |
16
+
17
+ ## Reglas
18
+
19
+ - Desarrollo local y mocks primero; servicios reales solo con evidencia.
20
+ - Distinguir Windows local frente a BAS/dev space remoto: una instalación o
21
+ capacidad de un lado no implica la del otro.
22
+ - No afirmar que una integración está aprobada o disponible hasta comprobarla
23
+ con documentación y accesos vigentes.
24
+ - Costes: antes de activar cualquier recurso con coste, verificar precio y
25
+ documentarlo en la spec; capa gratuita por defecto.
26
+ - Bloqueos externos no paran el MVP: documentar evidencia y continuar con
27
+ mocks o adaptador local.
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Ciclo completo spec-despliegue de un MVP SAP BTP
3
+ agent: orchestrator
4
+ ---
5
+
6
+ Ejecuta el flujo sobre la especificación: $ARGUMENTS
7
+ (p. ej. `/flow specs/mi-mvp.md`).
8
+
9
+ El orquestador recorre las etapas 0–10 de `AGENTS.md` con los especialistas
10
+ adecuados (`analyst`, `researcher`, `architect`, `frontend-ui5`,
11
+ `backend-cap`, `qa-review`, `deploy-cf`, `documentarian`). En MVPs pequeños
12
+ puede saltar etapas irrelevantes y registrarlo; ningún riesgo o
13
+ incertidumbre bloquea por sí solo: se investiga, se decide con evidencia y
14
+ se continúa con lo resoluble. La puerta de despliegue (etapa 7) es
15
+ obligatoria antes de desplegar. Al cerrar: qué se hizo, verificaciones con
16
+ comandos y resultado real, y qué quedó pendiente y por qué.
@@ -0,0 +1,18 @@
1
+ ---
2
+ description: Puerta de despliegue CF sin desplegar
3
+ agent: orchestrator
4
+ ---
5
+
6
+ Ejecuta solo la puerta de despliegue (etapa 7) para $ARGUMENTS
7
+ (spec o nombre de app; si se omite, el MVP en curso).
8
+
9
+ Verificaciones (delegables en `qa-review` + `deploy-cf` en solo lectura):
10
+
11
+ 1. `cf target` coincide con el destino de la spec (endpoint/org/espacio).
12
+ 2. El artefacto existe y es reciente (`.mtar` en `mta_archives/` o bundle
13
+ para `push`).
14
+ 3. Todos los criterios de aceptación están en verde con evidencia.
15
+ 4. Diff/Git sin secretos ni archivos que debieran estar ignorados.
16
+
17
+ Veredicto: apto / no apto con motivos concretos. Este comando nunca
18
+ despliega ni muta nada en Cloud Foundry.
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: cap-cli
3
+ description: Invocación verificada del CLI de CAP y facets en este equipo
4
+ ---
5
+
6
+ # CLI de CAP (`cds`)
7
+
8
+ Nombres verificados el 2026-10-29 (docs cap.cloud.sap vía `context7`;
9
+ paquete `@cap-js/cds-dk` **no existe** — el correcto es `@sap/cds-dk`):
10
+
11
+ - CLI solo vía `npx -p @sap/cds-dk cds ...` (el `node_modules` del proyecto
12
+ no incluye el ejecutable `cds`; `npx cds` a secas falla).
13
+ - Runtime del proyecto: `@sap/cds` v10 + `@cap-js/sqlite` v3 (SQLite solo
14
+ para dev local; sin persistencia en CF).
15
+ - Scaffold: `npx -p @sap/cds-dk cds init <nombre> --nodejs` (no global).
16
+ - Facets usadas en este harness: `mta xsuaa approuter html5-repo
17
+ destination ui5` (lista completa real con `cds add --help`, no de memoria).
18
+ - Tras `cds add`, siempre `npm install` antes del siguiente comando.
19
+ - `cds add` es aditivo y genera `mta.yaml`/`xs-security.json`: revisar el
20
+ diff antes de aceptar lo generado (nombres de instancia deben coincidir
21
+ con las existentes en la subcuenta).
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: cf-cli
3
+ description: Uso estándar del CLI de Cloud Foundry (cf)
4
+ ---
5
+
6
+ # CLI Cloud Foundry (`cf`)
7
+
8
+ El CLI de Cloud Foundry se invoca **siempre** como `cf` (instalación
9
+ estándar del CLI; adapta rutas según tu equipo). Si `cf` en tu máquina
10
+ corresponde a otra herramienta, define un alias propio y úsalo de forma
11
+ consistente donde el harness diga `cf`.
12
+
13
+ ## Lectura segura (sin secretos)
14
+
15
+ ```
16
+ cf target # endpoint / org / espacio actuales
17
+ cf api # endpoint y versión API
18
+ cf orgs # solo nombres
19
+ cf spaces # solo nombres
20
+ cf apps # estado observable (started/stopped, rutas)
21
+ cf services # instancias visibles
22
+ cf logs <app> --recent
23
+ ```
24
+
25
+ `target`, `api`, `orgs`, `spaces` y `app <nombre>` nunca muestran tokens.
26
+ Si una salida incluyera un secreto, redáctalo antes de citarla.
27
+
28
+ ## Mutaciones (solo `deploy-cf`, con destino confirmado)
29
+
30
+ - Confirmar endpoint/org/espacio contra la spec **antes** de cada despliegue.
31
+ - `cf push` para apps simples; `cf deploy <archivo>.mtar` para MTA
32
+ (requiere plugin `multiapps`, no instalado: ver skill `mta-build`).
33
+ - Verificar después: `cf apps` + `cf logs <app> --recent` + URL.
34
+
35
+ ## Denylist
36
+
37
+ - Borrar o renombrar orgs, espacios, apps o servicios fuera del MVP.
38
+ - `cf login`/re-autenticaciones no solicitadas (si la sesión caduca,
39
+ pedir al usuario el flujo interactivo, nunca credenciales en texto).
40
+ - `--var`/`--vars-file` con secretos en shell compartida; usar archivos ya
41
+ ignorados por Git y no citar sus valores.
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: mta-build
3
+ description: Construir y verificar artefactos MTAR con mbt en este equipo
4
+ ---
5
+
6
+ # Build MTA (`mbt`)
7
+
8
+ `mbt` es Cloud MTA Build Tool 1.2.50 (verificado 2026-10-29). Invocarlo
9
+ siempre como `mbt`, nunca como `cf` ni rutas inventadas.
10
+
11
+ ## Flujo
12
+
13
+ ```
14
+ mbt build # requiere mta.yaml en la raíz del proyecto
15
+ ```
16
+
17
+ - El `.mtar` resultante queda en `mta_archives/` con el nombre/versión de
18
+ `mta.yaml`. Comprobar existencia y fecha antes de desplegar.
19
+ - Para módulos Node.js, `mbt` ejecuta `npm install`/`npm run build` según
20
+ `mta.yaml`; para Java necesita Maven (`mvn` no instalado: documentar como
21
+ pendiente si una spec lo exige).
22
+ - `mbt build --help` para flags (`--mtar`, `--platform=cf`).
23
+
24
+ ## Despliegue del MTAR
25
+
26
+ `cf deploy <archivo>.mtar` requiere el **plugin multiapps**. Verificar
27
+ siempre con `cf plugins` antes de asumir su ausencia (2026-10-30 resultó
28
+ ya instalado contra lo documentado). Instalarlo solo cuando un MVP necesite
29
+ despliegue MTA:
30
+
31
+ ```
32
+ cf install-plugin -r CF-Community multiapps
33
+ ```
34
+
35
+ Alternativa sin plugin para MVPs simples: `cf push` por app según plan.
36
+
37
+ ## Notas
38
+
39
+ - El binario `mbt.exe` se obtuvo con el propio `install.js` del paquete npm
40
+ (`node install.js cloud-mta-build-tool`). Si `mbt` vuelve a fallar tras
41
+ una actualización global, repetir ese comando en el directorio del paquete.
42
+ - Nunca versionar `mta_archives/*.mtar` ni `default-services.json` con claves.
43
+ - `mbt` exige `make` en `%PATH%` (ver `AGENTS.md` § Disciplina de shell y
44
+ CLIs): si falla `exec: "make": executable file not found`, anteponer el
45
+ `bin` de ezwinports/GnuWin32 al `$env:PATH` solo para el comando.
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: sap-verify
3
+ description: Clasificar disponibilidad, cuenta y coste de servicios SAP/BTP
4
+ ---
5
+
6
+ # Verificación de dependencias externas SAP
7
+
8
+ Toda afirmación sobre un servicio, plan, API o capacidad BTP se clasifica en
9
+ una de estas categorías, con fuente y fecha:
10
+
11
+ | Categoría | Significado |
12
+ |---|---|
13
+ | **Documentado** | Docs oficiales vigentes + evidencia (comando, consola o enlace con fecha). |
14
+ | **Pendiente en cuenta** | Existe en docs pero sin comprobar en la subcuenta/destino real. |
15
+ | **Coste por cotizar** | Requiere plan de pago o métrica no verificada; no activar sin confirmación. |
16
+
17
+ ## Reglas
18
+
19
+ - Desarrollo local y mocks primero; servicios reales solo con evidencia.
20
+ - Distinguir Windows local frente a BAS/dev space remoto: una instalación o
21
+ capacidad de un lado no implica la del otro.
22
+ - No afirmar que una integración está aprobada o disponible hasta comprobarla
23
+ con documentación y accesos vigentes.
24
+ - Costes: antes de activar cualquier recurso con coste, verificar precio y
25
+ documentarlo en la spec; capa gratuita por defecto.
26
+ - Bloqueos externos no paran el MVP: documentar evidencia y continuar con
27
+ mocks o adaptador local.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # harness-btp
2
2
 
3
- [![version](https://img.shields.io/badge/version-v0.2.5-blue)](https://github.com/horangelmillan/harness-btp/releases/tag/v0.2.5)
3
+ [![version](https://img.shields.io/badge/version-v0.3.1-blue)](https://github.com/horangelmillan/harness-btp/releases/tag/v0.3.1)
4
4
  [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE)
5
5
  [![platform](https://img.shields.io/badge/platform-windows%20%7C%20linux%20%7C%20macos-lightgrey)](https://github.com/horangelmillan/harness-btp)
6
6
  [![agent](https://img.shields.io/badge/agent-any%20AGENTS.md--compatible-purple)](https://github.com/horangelmillan/harness-btp)
@@ -16,8 +16,10 @@ Para quien construye MVPs SAP BTP y quiere empezar cada proyecto con el mismo fl
16
16
  - [Quickstart](#quickstart)
17
17
  - [Instalación](#instalación)
18
18
  - [Instalación asistida por agente](#instalación-asistida-por-agente)
19
+ - [Manual de uso](#manual-de-uso)
19
20
  - [Actualizar y desinstalar](#actualizar-y-desinstalar)
20
21
  - [Adaptadores opcionales](#adaptadores-opcionales)
22
+ - [Multi-cliente](#multi-cliente)
21
23
  - [Estructura del repo](#estructura-del-repo)
22
24
  - [Cómo lo descubre el agente](#cómo-lo-descubre-el-agente)
23
25
  - [Troubleshooting](#troubleshooting)
@@ -55,7 +57,7 @@ El camino de 30 segundos en un proyecto nuevo. Elige tu shell:
55
57
  PowerShell (Windows):
56
58
 
57
59
  ```powershell
58
- npx -p degit degit horangelmillan/harness-btp#v0.2.5 AI-tmp -- AI-tmp
60
+ npx -p degit degit horangelmillan/harness-btp#v0.3.1 AI-tmp -- AI-tmp
59
61
  powershell -ExecutionPolicy Bypass -File AI-tmp/install.ps1 -Dest .
60
62
  Remove-Item -Recurse -Force AI-tmp
61
63
  ```
@@ -63,7 +65,7 @@ Remove-Item -Recurse -Force AI-tmp
63
65
  bash (Linux, macOS o Git Bash):
64
66
 
65
67
  ```bash
66
- npx -p degit degit horangelmillan/harness-btp#v0.2.5 AI-tmp -- AI-tmp
68
+ npx -p degit degit horangelmillan/harness-btp#v0.3.1 AI-tmp -- AI-tmp
67
69
  sh AI-tmp/install.sh --dest .
68
70
  rm -rf AI-tmp
69
71
  ```
@@ -79,7 +81,7 @@ Descarga solo lo necesario, sin historial git:
79
81
  PowerShell:
80
82
 
81
83
  ```powershell
82
- npx -p degit degit horangelmillan/harness-btp#v0.2.5 AI-tmp -- AI-tmp
84
+ npx -p degit degit horangelmillan/harness-btp#v0.3.1 AI-tmp -- AI-tmp
83
85
  powershell -ExecutionPolicy Bypass -File AI-tmp/install.ps1 -Dest .
84
86
  Remove-Item -Recurse -Force AI-tmp
85
87
  ```
@@ -87,7 +89,7 @@ Remove-Item -Recurse -Force AI-tmp
87
89
  bash:
88
90
 
89
91
  ```bash
90
- npx -p degit degit horangelmillan/harness-btp#v0.2.5 AI-tmp -- AI-tmp
92
+ npx -p degit degit horangelmillan/harness-btp#v0.3.1 AI-tmp -- AI-tmp
91
93
  sh AI-tmp/install.sh --dest .
92
94
  rm -rf AI-tmp
93
95
  ```
@@ -99,7 +101,7 @@ Clon superficial anclado al tag:
99
101
  PowerShell:
100
102
 
101
103
  ```powershell
102
- git clone --branch v0.2.5 --depth 1 https://github.com/horangelmillan/harness-btp AI-tmp
104
+ git clone --branch v0.3.1 --depth 1 https://github.com/horangelmillan/harness-btp AI-tmp
103
105
  powershell -ExecutionPolicy Bypass -File AI-tmp/install.ps1 -Dest .
104
106
  Remove-Item -Recurse -Force AI-tmp
105
107
  ```
@@ -107,7 +109,7 @@ Remove-Item -Recurse -Force AI-tmp
107
109
  bash:
108
110
 
109
111
  ```bash
110
- git clone --branch v0.2.5 --depth 1 https://github.com/horangelmillan/harness-btp AI-tmp
112
+ git clone --branch v0.3.1 --depth 1 https://github.com/horangelmillan/harness-btp AI-tmp
111
113
  sh AI-tmp/install.sh --dest .
112
114
  rm -rf AI-tmp
113
115
  ```
@@ -117,24 +119,25 @@ rm -rf AI-tmp
117
119
  Sin descargas manuales (requiere publicar `create-harness-btp` en el registry). Igual en todos los SO:
118
120
 
119
121
  ```bash
120
- pnpm dlx create-harness-btp@0.2.5 --dest .
122
+ pnpm dlx create-harness-btp@0.3.1 --dest .
121
123
  ```
122
124
 
123
125
  ### Qué hace el instalador
124
126
 
125
127
  - `CREATE: AI/` o `SKIP: AI/ ya existe` (solo lo reemplaza con `-Force` / `--force`, con backup a `AI.bak`).
126
128
  - `CREATE: AGENTS.md` o `SKIP: AGENTS.md ya existe` (tu `AGENTS.md` propio se conserva; con `-Force` / `--force` se respalda a `AGENTS.md.bak`).
127
- - Fusiona `.opencode/` raíz desde `AI/.opencode/` (`agents` + `commands` + `skills`, lo que OpenCode descubre en la raíz del proyecto): sin fuerza solo copia los archivos que falten (`SKIP: .opencode/<ruta> ya existe` por cada uno conservado y `CREATE: .opencode/ (+N archivos)`); con `-Force` / `--force` respalda `.opencode/` a `.opencode.bak` (`BACKUP: .opencode/ -> .opencode.bak`) y copia todo.
129
+ - Fusiona el árbol del cliente agéntico (`--client`, por defecto `auto`) desde `AI/clients/<cliente>/` en la raíz (ver [Multi-cliente](#multi-cliente)): sin fuerza solo copia los archivos que falten (`SKIP: <dir>/<ruta> ya existe` por cada uno conservado); con `-Force` / `--force` respalda cada dir a `<dir>.bak` (`BACKUP: <dir>/ -> <dir>.bak`) y copia todo.
128
130
  - Fusiona `.gitignore`: añade las líneas que falten, sin duplicar ni borrar las tuyas.
129
131
  - **No toca** `package.json` ni `mta.yaml` de tu proyecto, nunca.
130
132
 
131
133
  Salida típica en proyecto nuevo:
132
134
 
133
135
  ```text
134
- CREATE: AI/
136
+ CREATE: AI/ (v0.3.1)
135
137
  CREATE: AGENTS.md
138
+ CLIENT: auto -> opencode
136
139
  CREATE: .opencode/ (+17 archivos)
137
- OK: harness v0.2.5 instalado
140
+ OK: harness v0.3.1 instalado
138
141
  ```
139
142
 
140
143
  ## Instalación asistida por agente
@@ -147,6 +150,36 @@ Déjame este proyecto listo con el harness BTP: lee https://raw.githubuserconten
147
150
 
148
151
  Vale para proyecto nuevo (con URL), existente, Windows/Linux/macOS y cualquier cliente que lea este README. El archivo `prompts/setup.md` vive versionado con el harness: siempre está al día sin que cambies tu línea.
149
152
 
153
+ ## Manual de uso
154
+
155
+ El recorrido normal de un proyecto, en orden. Cada paso dice **qué hace, con qué comando y cuándo toca**.
156
+
157
+ **1. Instalar (una sola vez por proyecto).** Copia la carpeta `AI/` dentro de tu proyecto con `pnpm dlx`, `degit` o `git clone` (ver [Instalación](#instalación)). No mueve ni renombra nada tuyo; si `AI/` ya existe, avisa en vez de pisar.
158
+
159
+ **2. Comprobar que tu agente lo adoptó.** Abre el proyecto en tu cliente y verifica: el **orquestador** aparece entre sus agentes, existe el comando **`/flow`** y responde si le pides usar una **skill** (p. ej. que te muestre el `target` actual). Si algo de esto falta, mira [Troubleshooting](#troubleshooting) antes de seguir.
160
+
161
+ **3. Contar lo que quieres (la spec).** Copia `AI/specs/_template.md` a `AI/specs/<tu-proyecto>.md` y rellénala: qué debe hacer, dónde vive en SAP y cómo se comprueba que funciona. Sin esto escrito no hay despliegue — el agente lo exige.
162
+
163
+ **4. Ponerlo a trabajar: `/flow`.** Escribe `/flow AI/specs/<tu-proyecto>.md` y el orquestador recorre las etapas (revisar tu spec, investigar la doc oficial, planear, construir, probar, corregir). Te pregunta cuando le falta un dato y al cerrar te cuenta qué hizo, con qué comandos lo verificó y qué quedó pendiente.
164
+
165
+ **5. Revisar antes de publicar: `/verify`.** Es la puerta de despliegue: comprueba destino, artefacto construido, pruebas en verde y Git limpio **sin desplegar nada**. Solo un veredicto "apto" permite pasar al despliegue.
166
+
167
+ **6. Desplegar (solo con tu orden).** El despliegue lo ejecuta un único agente especialista y deja evidencia (apps en marcha, registros, URL). Primer despliegue a un destino nuevo siempre pide tu confirmación del destino.
168
+
169
+ **7. Guardar y contar.** Los cambios se guardan en commits locales; nada sale a remoto sin que lo pidas expresamente. La spec y los informes quedan al día al cerrar.
170
+
171
+ | Comando o guion | Para qué sirve (en una línea) | Cuándo usarlo |
172
+ |---|---|---|
173
+ | `pnpm dlx create-harness-btp …` / `degit` / `git clone` | traer el harness al proyecto | una vez por proyecto; repite contra otro tag para actualizar |
174
+ | `install.ps1` / `install.sh` | copiar `AI/`, crear el puntero y fusionar `.gitignore` sin romper nada | lo corre el paquete solo; úsalo directo si instalaste por `degit`/`clone` |
175
+ | `/flow <spec>` | ejecutar el ciclo completo sobre tu spec | cada vez que construyas o cambies el MVP |
176
+ | `/verify` | revisar que todo está listo sin desplegar | antes de cada despliegue, siempre |
177
+ | `AI/scripts/check-prereqs.*` | decirte qué herramientas te faltan y dónde instalarlas | al estrenar máquina o si algo falla por entorno |
178
+ | `AI/scripts/check-docs.*` | comprobar que los enlaces a documentación oficial siguen vivos | si sospechas docs viejas, o antes de un MVP delicado |
179
+ | `AI/scripts/cf-safe.*` | leer Cloud Foundry tapando secretos | no lo llamas tú: lo usan los agentes por dentro |
180
+
181
+ **Cómo saber que todo va bien:** el instalador termina en `OK:`, `AI/VERSION` dice la versión que instalaste, tu agente muestra al orquestador y `/flow` existe, y `/verify` explica cada veredicto con motivos. Si algo de esto no cuadra, no sigas: está en [Troubleshooting](#troubleshooting).
182
+
150
183
  ## Actualizar y desinstalar
151
184
 
152
185
  **Actualizar:** repite el mismo comando de instalación contra el tag nuevo. Sin `-Force` / `--force` lo existente se conserva (`SKIP:`); con fuerza se reemplaza con backup:
@@ -154,7 +187,7 @@ Vale para proyecto nuevo (con URL), existente, Windows/Linux/macOS y cualquier c
154
187
  PowerShell:
155
188
 
156
189
  ```powershell
157
- npx -p degit degit horangelmillan/harness-btp#v0.2.5 AI-tmp -- AI-tmp
190
+ npx -p degit degit horangelmillan/harness-btp#v0.3.1 AI-tmp -- AI-tmp
158
191
  powershell -ExecutionPolicy Bypass -File AI-tmp/install.ps1 -Dest . -Force
159
192
  Remove-Item -Recurse -Force AI-tmp
160
193
  # tu versión anterior queda en AI.bak por si quieres comparar
@@ -163,7 +196,7 @@ Remove-Item -Recurse -Force AI-tmp
163
196
  bash:
164
197
 
165
198
  ```bash
166
- npx -p degit degit horangelmillan/harness-btp#v0.2.5 AI-tmp -- AI-tmp
199
+ npx -p degit degit horangelmillan/harness-btp#v0.3.1 AI-tmp -- AI-tmp
167
200
  sh AI-tmp/install.sh --dest . --force
168
201
  rm -rf AI-tmp
169
202
  # tu versión anterior queda en AI.bak por si quieres comparar
@@ -194,9 +227,32 @@ El harness funciona con **cualquier** cliente agéntico que lea `AGENTS.md`. Est
194
227
  - **`AI/.opencode/`** — agentes, comandos y skills de ejemplo con el layout de OpenCode. Si tu cliente usa otro layout, ignóralos o adaptalos: el flujo vive en `AI/AGENTS.md`, `AI/INICIO.md`, `AI/docs/` y `AI/scripts/`, que son Markdown + shell portátil.
195
228
  - **`AI/opencode.fragment.jsonc`** — fragmento de ejemplo para fusionar en tu `opencode.jsonc` (p. ej. el bloque MCP `graphify-code`, deshabilitado por defecto). Solo aplica a OpenCode; otros clientes lo ignoran sin efecto.
196
229
  - **`install.ps1` / `install.sh`** — elige el de tu shell; ambos aplican la misma lógica idempotente. Los scripts de `AI/scripts/` también vienen en par `.ps1` / `.sh`.
230
+ - **Multi-cliente:** desde v0.3.0 la fuente única es `AI/agents/`, `AI/commands/`, `AI/skills/` y cada cliente recibe su árbol renderizado en `AI/clients/<cliente>/` (ver [Multi-cliente](#multi-cliente)). `AI/.opencode/` se conserva intacto por compatibilidad.
197
231
 
198
232
  Nada del núcleo exige OpenCode, Windows ni ningún modelo concreto.
199
233
 
234
+ ## Multi-cliente
235
+
236
+ El harness se configura para el cliente agéntico de turno desde UNA sola definición canónica:
237
+
238
+ - **Canónico (`AI/`):** `AI/agents/*.md` (11 agentes), `AI/commands/*.md` (`flow`, `verify`), `AI/skills/*/SKILL.md` (4 skills). Es la única fuente que se edita a mano.
239
+ - **Render (`AI/clients/`):** generado con `node scripts/render-clients.js` (sin dependencias); `node scripts/render-clients.js --check` solo verifica. El CI lo exige en verde antes de publicar (ver `.github/workflows/publish.yml`). No edites `AI/clients/` a mano: tus cambios se pierden en el próximo render.
240
+
241
+ | Cliente | `--client` | Rutas generadas en la raíz | Adaptación |
242
+ |---|---|---|---|
243
+ | OpenCode | `opencode` | `.opencode/agents/`, `.opencode/commands/`, `.opencode/skills/` | copia exacta de `AI/.opencode/` |
244
+ | Claude Code | `claude` | `.claude/agents/`, `.claude/commands/`, `.claude/skills/` | agents con `{name,description}` (sin `mode`) |
245
+ | Cursor | `cursor` | `.cursor/commands/`, `.agents/skills/` | commands sin frontmatter (solo cuerpo) |
246
+ | Copilot | `copilot` | `.github/agents/*.agent.md`, `.github/prompts/*.prompt.md`, `.github/skills/` | renombrados a su convención |
247
+ | Aider (y genéricos) | `aider` | nada que generar | usan el `AGENTS.md` raíz |
248
+
249
+ Flag `--client` en `install.ps1` (`-Client`), `install.sh` y `bin/harness-btp.js`:
250
+
251
+ - `auto` (defecto): detecta por huellas (`CLAUDE.md`/`.claude`→claude, `.cursor`→cursor, `.github`→copilot, `opencode.json*`/`.opencode`→opencode); sin huellas usa opencode por compatibilidad histórica. Si hay huellas de varios clientes, fusiona los detectados.
252
+ - `all`: fusiona los cuatro árboles.
253
+ - Lista explícita (`-Client claude,cursor` / `--client claude,cursor`): solo esos.
254
+ - Fusión idempotente con mensajes `CREATE:`/`SKIP:` por archivo y `BACKUP` a `<dir>.bak` con fuerza (mismo patrón que `AI/`).
255
+
200
256
  ## Estructura del repo
201
257
 
202
258
  ```text
@@ -204,18 +260,24 @@ harness-btp/
204
260
  ├── AI/ # lo que queda instalado en tu proyecto
205
261
  │ ├── AGENTS.md # reglas del harness (parametrizado, sin rutas absolutas)
206
262
  │ ├── INICIO.md # punto de entrada para el agente
263
+ │ ├── agents/ # CANÓNICO: 11 agentes (única fuente, se edita a mano)
264
+ │ ├── commands/ # CANÓNICO: flow + verify (única fuente)
265
+ │ ├── skills/ # CANÓNICO: 4 skills (única fuente)
266
+ │ ├── clients/ # RENDERIZADO por scripts/render-clients.js (no editar a mano)
207
267
  │ ├── opencode.fragment.jsonc# ADAPTER opcional: ejemplo para opencode.jsonc
208
- │ ├── .opencode/ # ADAPTER opcional: agents + commands + skills de ejemplo
268
+ │ ├── .opencode/ # ADAPTER opcional: se conserva intacto (compatibilidad)
209
269
  │ ├── scripts/ # pares .ps1 / .sh + provision-espacio.template.ps1
210
270
  │ ├── docs/ # flujo-etapas, cf-safe, habilitacion-trial
211
271
  │ ├── specs/ # plantilla _template.md
212
272
  │ └── .gitignore.fragment # líneas a fusionar en tu .gitignore
273
+ ├── scripts/
274
+ │ └── render-clients.js # genera AI/clients/ desde el canónico (--check en CI)
213
275
  ├── templates/
214
276
  │ └── AGENTS.pointer.md # plantilla del puntero AGENTS.md raíz
215
277
  ├── install.ps1 / install.sh # instaladores idempotentes (SKIP / CREATE / BACKUP / OK)
216
278
  ├── bin/ # ejecutable de create-harness-btp (pnpm dlx)
217
279
  ├── package.json # name create-harness-btp
218
- └── VERSION # 0.2.5
280
+ └── VERSION # 0.3.1
219
281
  ```
220
282
 
221
283
  ## Cómo lo descubre el agente
@@ -237,8 +299,9 @@ Tú no configuras nada: el agente se adapta solo.
237
299
  | Líneas duplicadas en `.gitignore` | edición manual tras la fusión | el instalador fusiona sin duplicar; borra el duplicado a mano |
238
300
  | `ExecutionPolicy` bloquea `install.ps1` | política de PowerShell | `powershell -ExecutionPolicy Bypass -File AI-tmp/install.ps1 -Dest .` (o usa `install.sh` en Git Bash) |
239
301
  | `ABORT: opción desconocida` en `install.sh` | flag inexistente | `sh install.sh --help` lista `--dest`, `--force` |
240
- | `degit` falla sin Node | `degit` corre sobre Node 18+ | instala Node o usa `git clone --branch v0.2.5` |
302
+ | `degit` falla sin Node | `degit` corre sobre Node 18+ | instala Node o usa `git clone --branch v0.3.1` |
241
303
  | Tu cliente no lee los agentes de `.opencode/` | layout específico de OpenCode | son un adapter opcional; el flujo está en `AI/AGENTS.md` + `AI/INICIO.md` |
304
+ | Mi cliente no ve los agentes (claude/cursor/copilot) | instalaste sin el `--client` que usa tu proyecto (`auto` no encontró sus huellas) | reinstala sin fuerza con `--client <tu-cliente>` (p. ej. `--client claude`) y verifica la tabla de [Multi-cliente](#multi-cliente): `.claude/`, `.cursor/commands/` + `.agents/skills/`, o `.github/agents\|prompts\|skills` según cliente; si sigue sin verlos, revisa la fusión y no dupliques archivos a mano |
242
305
  | No se deja borrar la carpeta del proyecto ("Carpeta en uso") | procesos huérfanos parados dentro (shells/MCPs de una sesión ya cerrada) | resmon → CPU → Identificadores asociados → busca la carpeta y termina solo esos PIDs; nunca fueron del instalador (solo copia archivos y termina) |
243
306
 
244
307
  ## Compatibilidad
@@ -265,9 +328,12 @@ MIT. Haz lo que quieras con el harness; sin garantía.
265
328
 
266
329
  ## Changelog
267
330
 
331
+ - **v0.3.1** — manual de uso: recorrido 1–7, tabla comando→para qué→cuándo, y señales de que todo va bien, en lenguaje normal.
332
+ - **v0.3.0** — multi-cliente: definición canónica única en `AI/agents/`, `AI/commands/`, `AI/skills/`; render a `AI/clients/<cliente>/` con `scripts/render-clients.js` (opencode byte-idéntico a `AI/.opencode/`, que se conserva intacto); instaladores con flag `--client auto|all|<lista>` (detección por huellas, fusión idempotente con `SKIP`/`BACKUP` por dir); `prompts/setup.md` pregunta el cliente si es ambiguo y verifica adopción por cliente; CI exige `render-clients.js --check` antes de la guardia de versiones.
333
+
268
334
  - **v0.2.5** — fusión a `.opencode/` raíz: el instalador sincroniza `AI/.opencode/` (agents + commands + skills) en `.opencode/` del proyecto para que OpenCode descubra `orchestrator` y `/flow` (SKIP sin fuerza, `.opencode.bak` con fuerza); `prompts/setup.md` verifica adopción y fusiona el fragmento MCP.
269
335
  - **v0.2.4** — estilo Neon: una línea que lee `prompts/setup.md` (versionado, siempre al día) en vez de un bloque que caduca.
270
336
  - **v0.2.3** — prompt universal todo-en-uno: clona + instala con la versión que indique el README (nunca caduca), verifica AI/VERSION instalado.
271
337
  - **v0.2.2** — anti-huérfanos: bloque de agente con regla de cierre limpio (no dejar servidores corriendo, no borrar carpetas con procesos dentro) + troubleshooting de carpeta bloqueada (resmon → Identificadores asociados).
272
338
  - **v0.2.1** — trazabilidad y versión visible: `AI/VERSION` viaja en el paquete, los instaladores imprimen la versión (`OK: harness vX.Y.Z…`, `BACKUP` con vieja→nueva) y el workflow exige que `package.json`, `VERSION` y `AI/VERSION` coincidan. Comandos fijados a `@0.2.1` / `#v0.2.1` / `--branch v0.2.1`.
273
- - **v0.2.0** — versión inicial: carpeta `AI/` parametrizada, instaladores idempotentes `install.ps1` / `install.sh`, `create-harness-btp` vía `pnpm dlx`, plantilla de puntero, docs de flujo / cf-safe / habilitación trial, plantilla de spec.
339
+ - **v0.2.0** — versión inicial: carpeta `AI/` parametrizada, instaladores idempotentes `install.ps1` / `install.sh`, `create-harness-btp` vía `pnpm dlx`, plantilla de puntero, docs de flujo / cf-safe / habilitación trial, plantilla de spec.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.5
1
+ 0.3.1