siesa-agents 2.1.72-qa.2 → 2.1.72-qa.21
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/bmad/bmm/config.yaml +33 -0
- package/claude/skills/sa-agent-sre-sentinel/SKILL.md +180 -0
- package/claude/skills/sa-aplicar/SKILL.md +268 -0
- package/claude/skills/sa-auditar-servicio/SKILL.md +255 -0
- package/claude/skills/sa-nueva-transversal/SKILL.md +317 -0
- package/claude/skills/sa-nuevo-ambiente/SKILL.md +147 -0
- package/claude/skills/sa-nuevo-servicio/SKILL.md +530 -0
- package/claude/skills/sa-onboard-db/SKILL.md +122 -0
- package/claude/skills/sa-qa-data-generator/SKILL.md +200 -51
- package/claude/skills/sa-quality-process/SKILL.md +6 -0
- package/claude/skills/sa-registrar-permisos/SKILL.md +233 -0
- package/package.json +1 -1
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_design_test.md +1037 -60
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_dor_gate.md +419 -379
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_e2e_executor.md +273 -0
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_playwright_impl.md +359 -355
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_test_plan.md +73 -111
- package/siesa-agents/bmm/workflows/3-solutioning/quality-process/workflow.md +1320 -997
- package/siesa-agents/resources/playwright-kit/.env.example +42 -0
- package/siesa-agents/resources/playwright-kit/README.md +228 -0
- package/siesa-agents/resources/playwright-kit/allure/categories.json +26 -0
- package/siesa-agents/resources/playwright-kit/global-setup.ts +34 -0
- package/siesa-agents/resources/playwright-kit/helpers/blazor-e2e-helpers.ts +417 -0
- package/siesa-agents/resources/playwright-kit/helpers/react-e2e-helpers.ts +297 -0
- package/siesa-agents/resources/playwright-kit/package-lock.json +850 -0
- package/siesa-agents/resources/playwright-kit/package.json +27 -0
- package/siesa-agents/resources/playwright-kit/playwright.config.ts +60 -0
- package/siesa-agents/resources/playwright-kit/proposed/.gitkeep +0 -0
- package/siesa-agents/resources/playwright-kit/reporters/agiletest-reporter.ts +252 -0
- package/siesa-agents/resources/playwright-kit/specs/.gitkeep +0 -0
- package/siesa-agents/resources/playwright-kit/specs/architecture-brief-siesa-erp.md +85 -0
- package/siesa-agents/resources/playwright-kit/specs/architecture-brief-siesa-react.md +109 -0
- package/siesa-agents/resources/playwright-kit/specs/architecture-brief-template.md +69 -0
- package/siesa-agents/resources/playwright-kit/tests/seed-example.spec.ts +95 -0
- package/siesa-agents/resources/playwright-kit/tools/locator-overlay.js +1306 -0
- package/siesa-agents/resources/playwright-kit/tools/locator-recorder.spec.ts +986 -0
- package/siesa-agents/scripts/__pycache__/bmad_to_agiletest.cpython-36.pyc +0 -0
- package/siesa-agents/scripts/bmad_to_agiletest.py +352 -337
- package/siesa-agents/scripts/converters/convert_csv_to_test_design.py +327 -0
- package/siesa-agents/scripts/converters/convert_excel_to_test_design.py +360 -0
- package/siesa-agents/scripts/converters/convert_md_to_test_design.py +359 -0
- package/siesa-agents/scripts/converters/convert_pdf_to_test_design.py +412 -0
- package/siesa-agents/scripts/converters/export_yaml_to_csv.py +149 -0
- package/siesa-agents/scripts/converters/export_yaml_to_excel.py +233 -0
- package/siesa-agents/scripts/converters/export_yaml_to_markdown.py +172 -0
- package/siesa-agents/scripts/converters/export_yaml_to_pdf.py +297 -0
- package/siesa-agents/scripts/merge_test_design.py +106 -106
- package/siesa-agents/scripts/playwright/yaml-to-playwright-spec.ts +203 -0
- package/siesa-agents/scripts/requirements.txt +7 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sa-registrar-permisos
|
|
3
|
+
description: 'Generates the exact curl command to register a services permissions in access-manager via POST /internal/v1/permissions/register. Use whenever the user needs to wire a new services permissions into the access-manager API.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Contexto de ejecución:** este skill asume que el cwd está dentro de la carpeta del workspace de despliegue (`_siesa-agents/devops/` en Siesa-Agents tras correr `/sa-init-devops`, o la raíz de un clon directo de `architecture-sa-devops`). Las rutas relativas (`environments/`, `terraform/`, `k8s/`, `scripts/`, etc.) se resuelven contra ese cwd.
|
|
7
|
+
|
|
8
|
+
Genera el curl exacto para registrar los permisos de un servicio en access-manager via POST /internal/v1/permissions/register.
|
|
9
|
+
|
|
10
|
+
**Uso:** `/sa-registrar-permisos {servicio} {prefijo} {entidad1} {entidad2} ...`
|
|
11
|
+
|
|
12
|
+
**Ejemplo:** `/sa-registrar-permisos treasury tax treasury-accounts treasury-transactions`
|
|
13
|
+
|
|
14
|
+
**Prefijos existentes por servicio:**
|
|
15
|
+
| Servicio | Prefijo |
|
|
16
|
+
|---|---|
|
|
17
|
+
| segments | `segment` |
|
|
18
|
+
| base-config | `base-config` |
|
|
19
|
+
| third-party | `third-party` |
|
|
20
|
+
| accounting | `acct` |
|
|
21
|
+
| liquid-tax | `tax` |
|
|
22
|
+
|
|
23
|
+
**Acciones estándar por entidad:** `create`, `read`, `update`, `delete`, `change_status`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Instrucciones
|
|
28
|
+
|
|
29
|
+
Los argumentos son: `$ARGUMENTS`
|
|
30
|
+
|
|
31
|
+
- `SERVICIO` = primer argumento (ej: `treasury`)
|
|
32
|
+
- `PREFIJO` = segundo argumento (ej: `tax`)
|
|
33
|
+
- `ENTIDADES` = todos los argumentos restantes (ej: `treasury-accounts treasury-transactions`)
|
|
34
|
+
|
|
35
|
+
Lee `environments/dev.yaml` para obtener:
|
|
36
|
+
- `DOMINIO` = `.dns.domain` (ej: `finance.siesacloud.dev`)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### Paso 1 — Explicar el formato de permisos
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Formato: Resource="{PREFIJO}.{entidad-plural-kebab}" + Action="{acción}"
|
|
44
|
+
Cadena en Redis = Resource + "." + Action
|
|
45
|
+
|
|
46
|
+
Ejemplo para prefijo "tax", entidad "treasury-accounts":
|
|
47
|
+
Resource: "tax.treasury-accounts"
|
|
48
|
+
Actions: "create", "read", "update", "delete", "change_status"
|
|
49
|
+
→ Redis keys: "tax.treasury-accounts.create", "tax.treasury-accounts.read", etc.
|
|
50
|
+
|
|
51
|
+
IMPORTANTE:
|
|
52
|
+
- Entidad: kebab-case (ej: treasury-accounts ✅ / treasuryAccounts ❌)
|
|
53
|
+
- Acción: snake_case (ej: change_status ✅ / changeStatus ❌)
|
|
54
|
+
- Prefijo: siempre usar el prefijo del servicio (ej: "tax.treasury-accounts" ✅ / "treasury-accounts" ❌)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Paso 2 — Generar el curl
|
|
58
|
+
|
|
59
|
+
Para cada entidad en ENTIDADES, genera permisos con las 5 acciones estándar.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# ============================================================
|
|
63
|
+
# Registrar permisos: servicio {SERVICIO}
|
|
64
|
+
# Ejecutar con acceso a https://{DOMINIO}
|
|
65
|
+
# Obtener X-Api-Key del Secret Manager: accmgr-sandbox-internal-api-key
|
|
66
|
+
# ============================================================
|
|
67
|
+
|
|
68
|
+
curl -X POST https://{DOMINIO}/api/access-manager/internal/v1/permissions/register \
|
|
69
|
+
-H "Content-Type: application/json" \
|
|
70
|
+
-H "X-Api-Key: <INTERNAL_API_KEY>" \
|
|
71
|
+
-H "X-Microservice-Source: {SERVICIO}" \
|
|
72
|
+
-d '{
|
|
73
|
+
"permissions": [
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Para cada ENTIDAD genera:
|
|
77
|
+
```json
|
|
78
|
+
{ "resource": "{PREFIJO}.{ENTIDAD}", "action": "create" },
|
|
79
|
+
{ "resource": "{PREFIJO}.{ENTIDAD}", "action": "read" },
|
|
80
|
+
{ "resource": "{PREFIJO}.{ENTIDAD}", "action": "update" },
|
|
81
|
+
{ "resource": "{PREFIJO}.{ENTIDAD}", "action": "delete" },
|
|
82
|
+
{ "resource": "{PREFIJO}.{ENTIDAD}", "action": "change_status" },
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Cierra el JSON:
|
|
86
|
+
```json
|
|
87
|
+
]
|
|
88
|
+
}'
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Paso 3 — Mostrar cómo usar en el código
|
|
92
|
+
|
|
93
|
+
```csharp
|
|
94
|
+
// En el endpoint del servicio {SERVICIO}:
|
|
95
|
+
|
|
96
|
+
// ✅ Correcto — con prefijo
|
|
97
|
+
[RequirePermission("{PREFIJO}.{ENTIDAD}.read")]
|
|
98
|
+
|
|
99
|
+
// ❌ Incorrecto — sin prefijo
|
|
100
|
+
[RequirePermission("{ENTIDAD}.read")]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Paso 4 — Notas
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
⚠️ NOTAS:
|
|
107
|
+
|
|
108
|
+
1. Obtener X-Api-Key:
|
|
109
|
+
gcloud secrets versions access latest \
|
|
110
|
+
--secret="accmgr-sandbox-internal-api-key" \
|
|
111
|
+
--project={PROJECT_ID}
|
|
112
|
+
|
|
113
|
+
2. Registro manual — NO auto-registrar en startup.
|
|
114
|
+
El patrón de auto-registro fue eliminado.
|
|
115
|
+
|
|
116
|
+
3. InternalApiKey (sin doble guión bajo) es la clave de configuración.
|
|
117
|
+
InternalApi__Key mapea a InternalApi:Key — NO es leída por el filtro.
|
|
118
|
+
|
|
119
|
+
4. Para validar que quedaron registrados:
|
|
120
|
+
curl https://{DOMINIO}/api/access-manager/internal/v1/permissions \
|
|
121
|
+
-H "X-Api-Key: <INTERNAL_API_KEY>"
|
|
122
|
+
|
|
123
|
+
5. Si el servicio tiene más acciones personalizadas (ej: approve, export),
|
|
124
|
+
agregarlas manualmente al JSON de permisos antes de ejecutar el curl.
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Inventario de permisos ya registrados en BD
|
|
130
|
+
|
|
131
|
+
> Re-ejecutar estos curls si se resetea `access_manager.permissions`.
|
|
132
|
+
|
|
133
|
+
### segments (`prefijo: segment`)
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
curl -X POST https://{DOMINIO}/api/access-manager/internal/v1/permissions/register \
|
|
137
|
+
-H "Content-Type: application/json" \
|
|
138
|
+
-H "X-Api-Key: <INTERNAL_API_KEY>" \
|
|
139
|
+
-H "X-Microservice-Source: segments" \
|
|
140
|
+
-d '{
|
|
141
|
+
"permissions": [
|
|
142
|
+
{"resource": "segment.companies", "action": "read", "description": "Ver listado de compañías", "summary": "Leer compañías", "displayOrder": 1},
|
|
143
|
+
{"resource": "segment.companies", "action": "create", "description": "Crear compañías", "summary": "Crear compañía", "displayOrder": 2},
|
|
144
|
+
{"resource": "segment.companies", "action": "update", "description": "Editar compañías", "summary": "Editar compañía", "displayOrder": 3},
|
|
145
|
+
{"resource": "segment.companies", "action": "change_status", "description": "Activar/desactivar compañías", "summary": "Cambiar estado compañía", "displayOrder": 4},
|
|
146
|
+
{"resource": "segment.cost-center-groups", "action": "read", "description": "Ver grupos de centros de costo", "summary": "Leer grupos CC", "displayOrder": 10},
|
|
147
|
+
{"resource": "segment.cost-center-groups", "action": "create", "description": "Crear grupos de centros de costo", "summary": "Crear grupo CC", "displayOrder": 11},
|
|
148
|
+
{"resource": "segment.cost-center-groups", "action": "update", "description": "Editar grupos de centros de costo", "summary": "Editar grupo CC", "displayOrder": 12},
|
|
149
|
+
{"resource": "segment.cost-center-groups", "action": "change_status", "description": "Activar/desactivar grupos CC", "summary": "Cambiar estado grupo CC", "displayOrder": 13},
|
|
150
|
+
{"resource": "segment.cost-center-groups", "action": "assign", "description": "Asignar centros de costo a grupos", "summary": "Asignar CC a grupo", "displayOrder": 14},
|
|
151
|
+
{"resource": "segment.cost-center-groups", "action": "update_global", "description": "Actualizar configuración global grupos CC", "summary": "Actualizar global grupos CC", "displayOrder": 15},
|
|
152
|
+
{"resource": "segment.segment-configurations", "action": "read", "description": "Ver configuraciones de segmentos", "summary": "Leer configuraciones", "displayOrder": 20},
|
|
153
|
+
{"resource": "segment.segment-configurations", "action": "create", "description": "Crear configuraciones de segmentos", "summary": "Crear configuración", "displayOrder": 21},
|
|
154
|
+
{"resource": "segment.segment-configurations", "action": "update", "description": "Editar configuraciones de segmentos", "summary": "Editar configuración", "displayOrder": 22},
|
|
155
|
+
{"resource": "segment.segment-configurations", "action": "change_status", "description": "Activar/desactivar configuraciones", "summary": "Cambiar estado configuración", "displayOrder": 23},
|
|
156
|
+
{"resource": "segment.segment-configurations", "action": "assign", "description": "Asignar compañías a configuraciones", "summary": "Asignar compañía a configuración", "displayOrder": 24},
|
|
157
|
+
{"resource": "segment.segments", "action": "read", "description": "Ver segmentos", "summary": "Leer segmentos", "displayOrder": 30},
|
|
158
|
+
{"resource": "segment.segments", "action": "create", "description": "Crear segmentos", "summary": "Crear segmento", "displayOrder": 31},
|
|
159
|
+
{"resource": "segment.segments", "action": "update", "description": "Editar segmentos", "summary": "Editar segmento", "displayOrder": 32},
|
|
160
|
+
{"resource": "segment.segments", "action": "delete", "description": "Eliminar segmentos", "summary": "Eliminar segmento", "displayOrder": 33},
|
|
161
|
+
{"resource": "segment.segments", "action": "change_status", "description": "Activar/desactivar segmentos", "summary": "Cambiar estado segmento", "displayOrder": 34},
|
|
162
|
+
{"resource": "segment.segments", "action": "assign", "description": "Asignar compañías a segmentos", "summary": "Asignar compañía a segmento", "displayOrder": 35}
|
|
163
|
+
]
|
|
164
|
+
}'
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### third-party (`prefijo: third-party`)
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
curl -X POST https://{DOMINIO}/api/access-manager/internal/v1/permissions/register \
|
|
171
|
+
-H "Content-Type: application/json" \
|
|
172
|
+
-H "X-Api-Key: <INTERNAL_API_KEY>" \
|
|
173
|
+
-H "X-Microservice-Source: third-party" \
|
|
174
|
+
-d '{
|
|
175
|
+
"permissions": [
|
|
176
|
+
{"resource": "third-party.economic-activities", "action": "read", "description": "Ver listado de actividades económicas", "summary": "Leer actividades económicas", "displayOrder": 40},
|
|
177
|
+
{"resource": "third-party.economic-activities", "action": "create", "description": "Crear actividades económicas", "summary": "Crear actividad económica", "displayOrder": 41},
|
|
178
|
+
{"resource": "third-party.economic-activities", "action": "update", "description": "Editar actividades económicas", "summary": "Editar actividad económica", "displayOrder": 42},
|
|
179
|
+
{"resource": "third-party.economic-activities", "action": "update_global", "description": "Actualizar configuración global actividades económicas","summary": "Actualizar global act. económica", "displayOrder": 43},
|
|
180
|
+
{"resource": "third-party.economic-activities", "action": "change_status", "description": "Activar/desactivar actividades económicas", "summary": "Cambiar estado actividad económica", "displayOrder": 44},
|
|
181
|
+
{"resource": "third-party.economic-activities", "action": "delete", "description": "Eliminar actividades económicas", "summary": "Eliminar actividad económica", "displayOrder": 45},
|
|
182
|
+
{"resource": "third-party.economic-activities", "action": "assign", "description": "Asignar actividades económicas", "summary": "Asignar actividad económica", "displayOrder": 46},
|
|
183
|
+
{"resource": "third-party.identification-types", "action": "read", "description": "Ver listado de tipos de identificación", "summary": "Leer tipos de identificación", "displayOrder": 50},
|
|
184
|
+
{"resource": "third-party.identification-types", "action": "create", "description": "Crear tipos de identificación", "summary": "Crear tipo de identificación", "displayOrder": 51},
|
|
185
|
+
{"resource": "third-party.identification-types", "action": "update", "description": "Editar tipos de identificación", "summary": "Editar tipo de identificación", "displayOrder": 52},
|
|
186
|
+
{"resource": "third-party.identification-types", "action": "update_global", "description": "Actualizar configuración global tipos de identificación","summary": "Actualizar global tipo ID", "displayOrder": 53},
|
|
187
|
+
{"resource": "third-party.identification-types", "action": "change_status", "description": "Activar/desactivar tipos de identificación", "summary": "Cambiar estado tipo identificación", "displayOrder": 54},
|
|
188
|
+
{"resource": "third-party.identification-types", "action": "delete", "description": "Eliminar tipos de identificación", "summary": "Eliminar tipo de identificación", "displayOrder": 55},
|
|
189
|
+
{"resource": "third-party.identification-types", "action": "assign", "description": "Asignar tipos de identificación", "summary": "Asignar tipo de identificación", "displayOrder": 56}
|
|
190
|
+
]
|
|
191
|
+
}'
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### liquid-tax (`prefijo: tax`)
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
curl -X POST https://{DOMINIO}/api/access-manager/internal/v1/permissions/register \
|
|
198
|
+
-H "Content-Type: application/json" \
|
|
199
|
+
-H "X-Api-Key: <INTERNAL_API_KEY>" \
|
|
200
|
+
-H "X-Microservice-Source: liquid-tax" \
|
|
201
|
+
-d '{
|
|
202
|
+
"permissions": [
|
|
203
|
+
{"resource": "tax.withholding-keys", "action": "read", "description": "Ver listado de claves de retención", "summary": "Leer claves de retención", "displayOrder": 60},
|
|
204
|
+
{"resource": "tax.withholding-keys", "action": "create", "description": "Crear claves de retención", "summary": "Crear clave de retención", "displayOrder": 61},
|
|
205
|
+
{"resource": "tax.withholding-keys", "action": "update", "description": "Editar claves de retención", "summary": "Editar clave de retención", "displayOrder": 62},
|
|
206
|
+
{"resource": "tax.withholding-keys", "action": "change_status", "description": "Activar/desactivar claves de retención", "summary": "Cambiar estado clave retención", "displayOrder": 63},
|
|
207
|
+
{"resource": "tax.withholding-keys", "action": "delete", "description": "Eliminar claves de retención", "summary": "Eliminar clave de retención", "displayOrder": 64},
|
|
208
|
+
{"resource": "tax.tax_keys", "action": "read", "description": "Ver listado de claves de impuesto", "summary": "Leer claves de impuesto", "displayOrder": 65},
|
|
209
|
+
{"resource": "tax.tax_keys", "action": "create", "description": "Crear claves de impuesto", "summary": "Crear clave de impuesto", "displayOrder": 66},
|
|
210
|
+
{"resource": "tax.tax_keys", "action": "update", "description": "Editar claves de impuesto", "summary": "Editar clave de impuesto", "displayOrder": 67},
|
|
211
|
+
{"resource": "tax.tax_keys", "action": "change_status", "description": "Activar/desactivar claves de impuesto", "summary": "Cambiar estado clave impuesto", "displayOrder": 68}
|
|
212
|
+
]
|
|
213
|
+
}'
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### accounting (`prefijo: acct`)
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
curl -X POST https://{DOMINIO}/api/access-manager/internal/v1/permissions/register \
|
|
220
|
+
-H "Content-Type: application/json" \
|
|
221
|
+
-H "X-Api-Key: <INTERNAL_API_KEY>" \
|
|
222
|
+
-H "X-Microservice-Source: accounting" \
|
|
223
|
+
-d '{
|
|
224
|
+
"permissions": [
|
|
225
|
+
{"resource": "acct.accounting-concepts", "action": "read", "description": "Ver listado de conceptos contables", "summary": "Leer conceptos contables", "displayOrder": 80},
|
|
226
|
+
{"resource": "acct.accounting-concepts", "action": "create", "description": "Crear conceptos contables", "summary": "Crear concepto contable", "displayOrder": 81},
|
|
227
|
+
{"resource": "acct.accounting-concepts", "action": "update", "description": "Editar conceptos contables", "summary": "Editar concepto contable", "displayOrder": 82},
|
|
228
|
+
{"resource": "acct.accounting-concepts", "action": "update_global", "description": "Actualizar configuración global conceptos contables","summary": "Actualizar global concepto contable","displayOrder": 83},
|
|
229
|
+
{"resource": "acct.accounting-concepts", "action": "change_status", "description": "Activar/desactivar conceptos contables", "summary": "Cambiar estado concepto contable", "displayOrder": 84},
|
|
230
|
+
{"resource": "acct.accounting-concepts", "action": "assign", "description": "Asignar conceptos contables a compañías", "summary": "Asignar concepto contable", "displayOrder": 85}
|
|
231
|
+
]
|
|
232
|
+
}'
|
|
233
|
+
```
|