@saulwade/swl-ses 1.6.1 → 1.6.3

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 (50) hide show
  1. package/CLAUDE.md +2 -2
  2. package/README.md +4 -4
  3. package/agentes/_intent-spec.md +73 -0
  4. package/agentes/auto-evolucion-swl.md +24 -0
  5. package/agentes/cloud-infra-swl.md +25 -0
  6. package/agentes/datos-swl.md +23 -0
  7. package/agentes/devops-ci-swl.md +24 -0
  8. package/agentes/migrador-swl.md +22 -0
  9. package/agentes/pagos-swl.md +25 -0
  10. package/agentes/release-manager-swl.md +24 -0
  11. package/agentes/sre-swl.md +24 -0
  12. package/comandos/swl/planear-fase.md +16 -0
  13. package/habilidades/aprender-de-git-diff/SKILL.md +288 -0
  14. package/habilidades/diseno-herramientas-agente/SKILL.md +17 -1
  15. package/habilidades/meta-skills-estandar/SKILL.md +6 -0
  16. package/habilidades/meta-skills-estandar/recursos/skill-judge-rubrica.md +281 -0
  17. package/habilidades/proceso-autoverificacion-evidencias/SKILL.md +258 -0
  18. package/habilidades/proceso-confianza-pre-implementacion/SKILL.md +246 -0
  19. package/habilidades/proceso-ddia-fundamentos/SKILL.md +255 -0
  20. package/habilidades/proceso-ddia-streaming/SKILL.md +231 -0
  21. package/habilidades/proceso-intent-engineering/SKILL.md +269 -0
  22. package/habilidades/reducir-entropia/SKILL.md +219 -0
  23. package/hooks/lib/task-budget.js +218 -0
  24. package/hooks/validar-intent-spec.js +222 -0
  25. package/manifiestos/hooks-config.json +9 -0
  26. package/manifiestos/modulos.json +11 -2
  27. package/manifiestos/skills-lock.json +90 -41
  28. package/package.json +2 -2
  29. package/plugin.json +9 -2
  30. package/reglas/fragmentos-compartidos.md +26 -0
  31. package/reglas/intent-engineering.md +214 -0
  32. package/reglas/registro-componentes-nuevos.md +38 -0
  33. package/schemas/agent-frontmatter.schema.json +294 -167
  34. package/schemas/agent-message.schema.json +73 -53
  35. package/schemas/agent-output-implementacion.schema.json +114 -85
  36. package/schemas/agent-output-planificacion.schema.json +150 -113
  37. package/schemas/agent-output-review.schema.json +98 -78
  38. package/schemas/diary-entry.schema.json +42 -10
  39. package/schemas/hook-profiles.schema.json +54 -39
  40. package/schemas/hooks-config.schema.json +89 -74
  41. package/schemas/instinct.schema.json +152 -115
  42. package/schemas/modulos.schema.json +38 -29
  43. package/schemas/perfiles.schema.json +36 -28
  44. package/schemas/plugin.schema.json +77 -64
  45. package/schemas/skill-evals.schema.json +119 -95
  46. package/schemas/skill-frontmatter.schema.json +245 -170
  47. package/scripts/generar-inventario.js +3 -1
  48. package/scripts/lib/schema-version.js +164 -0
  49. package/scripts/validar-manifest.js +1 -1
  50. package/scripts/validar.js +3 -2
@@ -1,167 +1,294 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://swl-ses.dev/schemas/agent-frontmatter.json",
4
- "title": "SWL Agent Frontmatter",
5
- "description": "Schema de validacion para el frontmatter YAML de agentes del sistema SWL",
6
- "type": "object",
7
- "required": ["name", "description", "tools", "model", "version", "nivelRiesgo"],
8
- "properties": {
9
- "name": {
10
- "type": "string",
11
- "pattern": "^[a-z][a-z0-9-]+-swl$",
12
- "maxLength": 64,
13
- "description": "Nombre en kebab-case terminado en -swl"
14
- },
15
- "description": {
16
- "type": "string",
17
- "minLength": 20,
18
- "maxLength": 1024,
19
- "description": "Descripcion que incluye QUE hace y CUANDO invocarlo"
20
- },
21
- "tools": {
22
- "type": "array",
23
- "items": {
24
- "type": "string",
25
- "enum": ["Read", "Write", "Edit", "Bash", "Grep", "Glob", "Agent", "Skill", "WebSearch", "WebFetch"]
26
- },
27
- "minItems": 1,
28
- "description": "Herramientas permitidas para este agente"
29
- },
30
- "model": {
31
- "type": "string",
32
- "oneOf": [
33
- { "enum": ["opus", "sonnet", "haiku", "inherit"] },
34
- { "pattern": "^claude-(opus|sonnet|haiku)-[0-9]+-[0-9]+(-[0-9]+)?$" }
35
- ],
36
- "description": "Modelo principal del agente. Acepta alias cortos (opus/sonnet/haiku), 'inherit' para sub-agentes, o nombre completo tipo 'claude-opus-4-7', 'claude-sonnet-4-6', 'claude-haiku-4-5-20251001'."
37
- },
38
- "modeloAlterno": {
39
- "type": "string",
40
- "oneOf": [
41
- { "enum": ["opus", "sonnet", "haiku", "inherit"] },
42
- { "pattern": "^claude-(opus|sonnet|haiku)-[0-9]+-[0-9]+(-[0-9]+)?$" }
43
- ],
44
- "description": "Modelo alternativo cuando el principal no esta disponible. Mismos formatos aceptados que 'model'."
45
- },
46
- "ventanaContexto": {
47
- "type": "string",
48
- "description": "Ventana de contexto recomendada"
49
- },
50
- "version": {
51
- "type": "string",
52
- "pattern": "^\\d+\\.\\d+\\.\\d+$",
53
- "description": "Version semantica del agente"
54
- },
55
- "nivelRiesgo": {
56
- "type": "string",
57
- "enum": ["BAJO", "MEDIO", "ALTO"],
58
- "description": "Nivel de riesgo de las operaciones del agente"
59
- },
60
- "skillsInvocables": {
61
- "type": "array",
62
- "items": { "type": "string" },
63
- "description": "Skills que este agente puede invocar. Valor especial 'todos' = wildcard (sin restriccion de skill); usar solo en agentes generalistas (investigador-swl, planificador-swl) cuando listar 162 skills es impractico. Para todos los demas agentes, listar skills especificos siguiendo privilegio minimo (regla seguridad-agentes.md)."
64
- },
65
- "skillsRestringidos": {
66
- "type": "array",
67
- "items": { "type": "string" },
68
- "description": "Skills que este agente NO debe invocar"
69
- },
70
- "permisosRed": {
71
- "type": "boolean",
72
- "description": "Si el agente puede hacer llamadas de red"
73
- },
74
- "permisosEscritura": {
75
- "type": "boolean",
76
- "description": "Si el agente puede escribir archivos"
77
- },
78
- "permisosComandos": {
79
- "type": "boolean",
80
- "description": "Si el agente puede ejecutar comandos bash"
81
- },
82
- "presupuestoMaxUsd": {
83
- "type": "number",
84
- "minimum": 0.01,
85
- "maximum": 50.0,
86
- "description": "Presupuesto maximo en USD por invocacion del agente. Inspirado en maxBudgetUsd del Anthropic Agent SDK. El hook tracking-costos emite alerta al 80% y sugiere detener al 100%"
87
- },
88
- "maxTurnos": {
89
- "type": "integer",
90
- "minimum": 1,
91
- "maximum": 100,
92
- "description": "Maximo de turnos (iteraciones de herramienta) por invocacion. Previene loops infinitos. Inspirado en maxTurns del Anthropic Agent SDK"
93
- },
94
- "toolBudget": {
95
- "type": "object",
96
- "properties": {
97
- "simple": { "type": "integer", "description": "Tool calls para tareas simples" },
98
- "standard": { "type": "integer", "description": "Tool calls para tareas estandar" },
99
- "complex": { "type": "integer", "description": "Tool calls para tareas complejas" }
100
- },
101
- "description": "Presupuesto de tool calls por nivel de complejidad"
102
- },
103
- "evolvable": {
104
- "type": "boolean",
105
- "description": "Marca AGP learnability. Si false, el loop de auto-evolucion NO debe proponer cambios a este agente. Default implicito (ausencia del campo): true para BAJO, false para MEDIO/ALTO."
106
- },
107
- "evolvable_scope": {
108
- "type": "array",
109
- "items": {
110
- "type": "string",
111
- "enum": ["description", "examples", "instructions", "skillsInvocables", "skillsRestringidos", "tools", "model", "nivelRiesgo", "permisosRed", "permisosEscritura", "permisosComandos"]
112
- },
113
- "description": "Si evolvable=true, limita las secciones/campos que el loop puede modificar. Ausente implica 'description' y 'examples' unicamente — campos de seguridad NUNCA evolucionan sin aprobacion humana."
114
- },
115
- "invariantes": {
116
- "type": "array",
117
- "items": {
118
- "type": "object",
119
- "required": ["campo", "operador", "valor"],
120
- "properties": {
121
- "campo": {
122
- "type": "string",
123
- "description": "Nombre de la propiedad del frontmatter a validar tras una evolucion (ej: 'permisosRed')."
124
- },
125
- "operador": {
126
- "type": "string",
127
- "enum": ["eq", "neq", "lte", "gte", "in", "not_in"],
128
- "description": "Operador de comparacion. eq/neq: igualdad; lte/gte: orden numerico; in/not_in: pertenencia a lista."
129
- },
130
- "valor": {
131
- "description": "Valor esperado. Para in/not_in debe ser array."
132
- },
133
- "razon": {
134
- "type": "string",
135
- "description": "Justificacion humana del invariante. Opcional pero recomendado."
136
- }
137
- },
138
- "additionalProperties": false
139
- },
140
- "description": "Safety invariants que el commit gate (run-skill-evals.js) debe verificar tras cada evolucion."
141
- },
142
- "exclusiones": {
143
- "type": "array",
144
- "items": { "type": "string" },
145
- "description": "Situaciones donde este agente NO debe invocarse aunque parezca relevante superficialmente. Campo propio de swl-ses; previene activacion tangencial (agent hijacking) por similitud de terminos en description. Equivalente estructural de la seccion 'Cuando NO invocarme' en el cuerpo, legible por herramientas de analisis sin parsear markdown. Aditivo, no breaking, aplicable a agentes con evolvable:false (metadata defensiva, no evolucion AGP — ver ADR-0004)."
146
- },
147
- "fase": {
148
- "type": "string",
149
- "enum": ["discover", "plan", "implement", "verify", "release", "learn", "meta", "cross"],
150
- "description": "Fase del SDLC en que opera el agente. Vocabulario controlado para routing deterministico del orquestador sin parsear description. discover=research/UX/discovery; plan=arquitectura/planificacion; implement=codigo/implementacion; verify=revision/testing/seguridad; release=deploy/release; learn=auto-evolucion/aprendizaje; meta=componentes del sistema SWL mismo; cross=transversal a varias fases. Aditivo, opcional. Inspirado en patron Phase de Bug-Bounty-Agents/AGENTS.md y patron Workflow-vs-Agent del articulo Anthropic 'Building Effective AI Agents'."
151
- },
152
- "dominio": {
153
- "type": "string",
154
- "enum": ["backend", "frontend", "mobile", "data", "infra", "security", "ux", "quality", "docs", "process", "meta", "general"],
155
- "description": "Dominio tecnico primario del agente. Vocabulario controlado para filtrado y matching. backend=APIs/servidores; frontend=UI/web; mobile=Android/iOS/cross; data=BD/ETL/datos; infra=cloud/CI/devops; security=auditoria/OWASP; ux=diseno/usabilidad; quality=tests/QA/code review; docs=documentacion; process=workflow/orquestacion; meta=sistema SWL; general=transversal. Aditivo, opcional."
156
- },
157
- "fragmentos": {
158
- "type": "array",
159
- "items": {
160
- "type": "string",
161
- "pattern": "^_[a-z][a-z0-9-]*$"
162
- },
163
- "description": "Lista de bloques de prompt compartidos no-routables (archivos agentes/_*.md) que este agente importa literalmente en su system prompt. Permite centralizar texto repetido entre multiples agentes sin duplicacion. Los fragmentos NO son skills (no se invocan dinamicamente) ni agentes (no son routables por el orquestador). Convencion: prefijo _ en kebab-case, sin sufijo -swl. Ejemplo: ['_brevedad-output-ref', '_hitl-alto-riesgo']. Inspirado en patron _scope-guard.md de Bug-Bounty-Agents."
164
- }
165
- },
166
- "additionalProperties": true
167
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://swl-ses.dev/schemas/agent-frontmatter.json",
4
+ "$schemaVersion": "1.0.0",
5
+ "title": "SWL Agent Frontmatter",
6
+ "description": "Schema de validacion para el frontmatter YAML de agentes del sistema SWL",
7
+ "type": "object",
8
+ "required": [
9
+ "name",
10
+ "description",
11
+ "tools",
12
+ "model",
13
+ "version",
14
+ "nivelRiesgo"
15
+ ],
16
+ "properties": {
17
+ "name": {
18
+ "type": "string",
19
+ "pattern": "^[a-z][a-z0-9-]+-swl$",
20
+ "maxLength": 64,
21
+ "description": "Nombre en kebab-case terminado en -swl"
22
+ },
23
+ "description": {
24
+ "type": "string",
25
+ "minLength": 20,
26
+ "maxLength": 1024,
27
+ "description": "Descripcion que incluye QUE hace y CUANDO invocarlo"
28
+ },
29
+ "tools": {
30
+ "type": "array",
31
+ "items": {
32
+ "type": "string",
33
+ "enum": [
34
+ "Read",
35
+ "Write",
36
+ "Edit",
37
+ "Bash",
38
+ "Grep",
39
+ "Glob",
40
+ "Agent",
41
+ "Skill",
42
+ "WebSearch",
43
+ "WebFetch"
44
+ ]
45
+ },
46
+ "minItems": 1,
47
+ "description": "Herramientas permitidas para este agente"
48
+ },
49
+ "model": {
50
+ "type": "string",
51
+ "oneOf": [
52
+ {
53
+ "enum": [
54
+ "opus",
55
+ "sonnet",
56
+ "haiku",
57
+ "inherit"
58
+ ]
59
+ },
60
+ {
61
+ "pattern": "^claude-(opus|sonnet|haiku)-[0-9]+-[0-9]+(-[0-9]+)?$"
62
+ }
63
+ ],
64
+ "description": "Modelo principal del agente. Acepta alias cortos (opus/sonnet/haiku), 'inherit' para sub-agentes, o nombre completo tipo 'claude-opus-4-7', 'claude-sonnet-4-6', 'claude-haiku-4-5-20251001'."
65
+ },
66
+ "modeloAlterno": {
67
+ "type": "string",
68
+ "oneOf": [
69
+ {
70
+ "enum": [
71
+ "opus",
72
+ "sonnet",
73
+ "haiku",
74
+ "inherit"
75
+ ]
76
+ },
77
+ {
78
+ "pattern": "^claude-(opus|sonnet|haiku)-[0-9]+-[0-9]+(-[0-9]+)?$"
79
+ }
80
+ ],
81
+ "description": "Modelo alternativo cuando el principal no esta disponible. Mismos formatos aceptados que 'model'."
82
+ },
83
+ "ventanaContexto": {
84
+ "type": "string",
85
+ "description": "Ventana de contexto recomendada"
86
+ },
87
+ "version": {
88
+ "type": "string",
89
+ "pattern": "^\\d+\\.\\d+\\.\\d+$",
90
+ "description": "Version semantica del agente"
91
+ },
92
+ "nivelRiesgo": {
93
+ "type": "string",
94
+ "enum": [
95
+ "BAJO",
96
+ "MEDIO",
97
+ "ALTO"
98
+ ],
99
+ "description": "Nivel de riesgo de las operaciones del agente"
100
+ },
101
+ "skillsInvocables": {
102
+ "type": "array",
103
+ "items": {
104
+ "type": "string"
105
+ },
106
+ "description": "Skills que este agente puede invocar. Valor especial 'todos' = wildcard (sin restriccion de skill); usar solo en agentes generalistas (investigador-swl, planificador-swl) cuando listar 162 skills es impractico. Para todos los demas agentes, listar skills especificos siguiendo privilegio minimo (regla seguridad-agentes.md)."
107
+ },
108
+ "skillsRestringidos": {
109
+ "type": "array",
110
+ "items": {
111
+ "type": "string"
112
+ },
113
+ "description": "Skills que este agente NO debe invocar"
114
+ },
115
+ "permisosRed": {
116
+ "type": "boolean",
117
+ "description": "Si el agente puede hacer llamadas de red"
118
+ },
119
+ "permisosEscritura": {
120
+ "type": "boolean",
121
+ "description": "Si el agente puede escribir archivos"
122
+ },
123
+ "permisosComandos": {
124
+ "type": "boolean",
125
+ "description": "Si el agente puede ejecutar comandos bash"
126
+ },
127
+ "presupuestoMaxUsd": {
128
+ "type": "number",
129
+ "minimum": 0.01,
130
+ "maximum": 50,
131
+ "description": "Presupuesto maximo en USD por invocacion del agente. Inspirado en maxBudgetUsd del Anthropic Agent SDK. El hook tracking-costos emite alerta al 80% y sugiere detener al 100%"
132
+ },
133
+ "maxTurnos": {
134
+ "type": "integer",
135
+ "minimum": 1,
136
+ "maximum": 100,
137
+ "description": "Maximo de turnos (iteraciones de herramienta) por invocacion. Previene loops infinitos. Inspirado en maxTurns del Anthropic Agent SDK"
138
+ },
139
+ "toolBudget": {
140
+ "type": "object",
141
+ "properties": {
142
+ "simple": {
143
+ "type": "integer",
144
+ "description": "Tool calls para tareas simples"
145
+ },
146
+ "standard": {
147
+ "type": "integer",
148
+ "description": "Tool calls para tareas estandar"
149
+ },
150
+ "complex": {
151
+ "type": "integer",
152
+ "description": "Tool calls para tareas complejas"
153
+ }
154
+ },
155
+ "description": "Presupuesto de tool calls por nivel de complejidad"
156
+ },
157
+ "evolvable": {
158
+ "type": "boolean",
159
+ "description": "Marca AGP learnability. Si false, el loop de auto-evolucion NO debe proponer cambios a este agente. Default implicito (ausencia del campo): true para BAJO, false para MEDIO/ALTO."
160
+ },
161
+ "evolvable_scope": {
162
+ "type": "array",
163
+ "items": {
164
+ "type": "string",
165
+ "enum": [
166
+ "description",
167
+ "examples",
168
+ "instructions",
169
+ "skillsInvocables",
170
+ "skillsRestringidos",
171
+ "tools",
172
+ "model",
173
+ "nivelRiesgo",
174
+ "permisosRed",
175
+ "permisosEscritura",
176
+ "permisosComandos"
177
+ ]
178
+ },
179
+ "description": "Si evolvable=true, limita las secciones/campos que el loop puede modificar. Ausente implica 'description' y 'examples' unicamente — campos de seguridad NUNCA evolucionan sin aprobacion humana."
180
+ },
181
+ "invariantes": {
182
+ "type": "array",
183
+ "items": {
184
+ "type": "object",
185
+ "required": [
186
+ "campo",
187
+ "operador",
188
+ "valor"
189
+ ],
190
+ "properties": {
191
+ "campo": {
192
+ "type": "string",
193
+ "description": "Nombre de la propiedad del frontmatter a validar tras una evolucion (ej: 'permisosRed')."
194
+ },
195
+ "operador": {
196
+ "type": "string",
197
+ "enum": [
198
+ "eq",
199
+ "neq",
200
+ "lte",
201
+ "gte",
202
+ "in",
203
+ "not_in"
204
+ ],
205
+ "description": "Operador de comparacion. eq/neq: igualdad; lte/gte: orden numerico; in/not_in: pertenencia a lista."
206
+ },
207
+ "valor": {
208
+ "description": "Valor esperado. Para in/not_in debe ser array."
209
+ },
210
+ "razon": {
211
+ "type": "string",
212
+ "description": "Justificacion humana del invariante. Opcional pero recomendado."
213
+ }
214
+ },
215
+ "additionalProperties": false
216
+ },
217
+ "description": "Safety invariants que el commit gate (run-skill-evals.js) debe verificar tras cada evolucion."
218
+ },
219
+ "exclusiones": {
220
+ "type": "array",
221
+ "items": {
222
+ "type": "string"
223
+ },
224
+ "description": "Situaciones donde este agente NO debe invocarse aunque parezca relevante superficialmente. Campo propio de swl-ses; previene activacion tangencial (agent hijacking) por similitud de terminos en description. Equivalente estructural de la seccion 'Cuando NO invocarme' en el cuerpo, legible por herramientas de analisis sin parsear markdown. Aditivo, no breaking, aplicable a agentes con evolvable:false (metadata defensiva, no evolucion AGP — ver ADR-0004)."
225
+ },
226
+ "fase": {
227
+ "type": "string",
228
+ "enum": [
229
+ "discover",
230
+ "plan",
231
+ "implement",
232
+ "verify",
233
+ "release",
234
+ "learn",
235
+ "meta",
236
+ "cross"
237
+ ],
238
+ "description": "Fase del SDLC en que opera el agente. Vocabulario controlado para routing deterministico del orquestador sin parsear description. discover=research/UX/discovery; plan=arquitectura/planificacion; implement=codigo/implementacion; verify=revision/testing/seguridad; release=deploy/release; learn=auto-evolucion/aprendizaje; meta=componentes del sistema SWL mismo; cross=transversal a varias fases. Aditivo, opcional. Inspirado en patron Phase de Bug-Bounty-Agents/AGENTS.md y patron Workflow-vs-Agent del articulo Anthropic 'Building Effective AI Agents'."
239
+ },
240
+ "dominio": {
241
+ "type": "string",
242
+ "enum": [
243
+ "backend",
244
+ "frontend",
245
+ "mobile",
246
+ "data",
247
+ "infra",
248
+ "security",
249
+ "ux",
250
+ "quality",
251
+ "docs",
252
+ "process",
253
+ "meta",
254
+ "general"
255
+ ],
256
+ "description": "Dominio tecnico primario del agente. Vocabulario controlado para filtrado y matching. backend=APIs/servidores; frontend=UI/web; mobile=Android/iOS/cross; data=BD/ETL/datos; infra=cloud/CI/devops; security=auditoria/OWASP; ux=diseno/usabilidad; quality=tests/QA/code review; docs=documentacion; process=workflow/orquestacion; meta=sistema SWL; general=transversal. Aditivo, opcional."
257
+ },
258
+ "fragmentos": {
259
+ "type": "array",
260
+ "items": {
261
+ "type": "string",
262
+ "pattern": "^_[a-z][a-z0-9-]*$"
263
+ },
264
+ "description": "Lista de bloques de prompt compartidos no-routables (archivos agentes/_*.md) que este agente importa literalmente en su system prompt. Permite centralizar texto repetido entre multiples agentes sin duplicacion. Los fragmentos NO son skills (no se invocan dinamicamente) ni agentes (no son routables por el orquestador). Convencion: prefijo _ en kebab-case, sin sufijo -swl. Ejemplo: ['_brevedad-output-ref', '_hitl-alto-riesgo']. Inspirado en patron _scope-guard.md de Bug-Bounty-Agents."
265
+ },
266
+ "strategy": {
267
+ "type": "string",
268
+ "maxLength": 500,
269
+ "description": "Intent Engineering Parte 1 (Pawel Huryn, Lead Agents Like Humans). Lineas que enmarcan las decisiones del agente: vision, mercado/proyecto donde opera, tradeoffs preferidos. Heredable del CLAUDE.md del proyecto pero declarable por agente cuando el rol lo requiera. Opcional, aditivo. Obligatorio para agentes nivelRiesgo:ALTO segun reglas/intent-engineering.md."
270
+ },
271
+ "healthMetrics": {
272
+ "type": "array",
273
+ "items": {
274
+ "type": "string"
275
+ },
276
+ "description": "Intent Engineering Parte 4 (Pawel Huryn). Lo que NO debe degradar mientras el agente persigue su objetivo (Goodhart's Law: cuando una medida se vuelve target, deja de ser una buena medida). Lista de invariantes blandas que el agente debe proteger. Distinto de invariantes hard (que viven en hooks/validadores). Opcional, aditivo. Obligatorio para agentes nivelRiesgo:ALTO."
277
+ },
278
+ "steering": {
279
+ "type": "array",
280
+ "items": {
281
+ "type": "string"
282
+ },
283
+ "description": "Intent Engineering Parte 6 (Pawel Huryn) - prompt-level constraints. Guias de comportamiento, riesgo preferido, tono. Influyen el razonamiento del agente pero NO lo obligan (sin enforcement). El modelo puede desviarse documentando por que. Distinto de hardGuardrails (orchestration-level). Acepta texto inline o referencia a regla global con sintaxis '@reglas/X.md'. Opcional, aditivo."
284
+ },
285
+ "hardGuardrails": {
286
+ "type": "array",
287
+ "items": {
288
+ "type": "string"
289
+ },
290
+ "description": "Intent Engineering Parte 6 (Pawel Huryn) - orchestration-level constraints. Restricciones aplicadas por hooks, schemas, permisos, sandbox. NO admiten desviacion bajo ninguna circunstancia. Si una hard guardrail bloquea una tarea legitima, el agente escala (no la rodea). Acepta texto inline o referencia a regla/hook con sintaxis '@reglas/X.md' o '@hooks/Y.js'. Opcional, aditivo. Obligatorio para agentes nivelRiesgo:ALTO."
291
+ }
292
+ },
293
+ "additionalProperties": true
294
+ }
@@ -1,53 +1,73 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://swl-ses.dev/schemas/agent-message.json",
4
- "title": "SWL Agent Message",
5
- "description": "Schema de validacion para mensajes entre agentes SWL",
6
- "type": "object",
7
- "required": ["id", "type", "from", "to", "timestamp", "status"],
8
- "properties": {
9
- "id": {
10
- "type": "string",
11
- "pattern": "^msg-[a-z0-9]+-[a-z0-9]+$",
12
- "description": "Identificador unico del mensaje generado por generarMessageId()"
13
- },
14
- "type": {
15
- "type": "string",
16
- "enum": ["task_handoff", "query", "response", "completed", "conflict"],
17
- "description": "Tipo de mensaje segun el protocolo SWL inter-agent"
18
- },
19
- "from": {
20
- "type": "string",
21
- "description": "Nombre del agente emisor"
22
- },
23
- "to": {
24
- "type": "string",
25
- "description": "Nombre del agente destinatario o 'broadcast' para todos"
26
- },
27
- "payload": {
28
- "type": "object",
29
- "description": "Datos del mensaje, estructura libre segun type"
30
- },
31
- "contextFiles": {
32
- "type": "array",
33
- "items": { "type": "string" },
34
- "description": "Rutas de archivos relevantes al mensaje, usadas para deteccion de conflictos"
35
- },
36
- "timestamp": {
37
- "type": "string",
38
- "format": "date-time",
39
- "description": "Fecha y hora de creacion del mensaje en formato ISO 8601"
40
- },
41
- "status": {
42
- "type": "string",
43
- "enum": ["pending", "processed", "expired"],
44
- "description": "Estado actual del mensaje en el ciclo de vida del protocolo"
45
- },
46
- "processedAt": {
47
- "type": "string",
48
- "format": "date-time",
49
- "description": "Fecha y hora en que el mensaje fue marcado como procesado"
50
- }
51
- },
52
- "additionalProperties": false
53
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://swl-ses.dev/schemas/agent-message.json",
4
+ "$schemaVersion": "1.0.0",
5
+ "title": "SWL Agent Message",
6
+ "description": "Schema de validacion para mensajes entre agentes SWL",
7
+ "type": "object",
8
+ "required": [
9
+ "id",
10
+ "type",
11
+ "from",
12
+ "to",
13
+ "timestamp",
14
+ "status"
15
+ ],
16
+ "properties": {
17
+ "id": {
18
+ "type": "string",
19
+ "pattern": "^msg-[a-z0-9]+-[a-z0-9]+$",
20
+ "description": "Identificador unico del mensaje generado por generarMessageId()"
21
+ },
22
+ "type": {
23
+ "type": "string",
24
+ "enum": [
25
+ "task_handoff",
26
+ "query",
27
+ "response",
28
+ "completed",
29
+ "conflict"
30
+ ],
31
+ "description": "Tipo de mensaje segun el protocolo SWL inter-agent"
32
+ },
33
+ "from": {
34
+ "type": "string",
35
+ "description": "Nombre del agente emisor"
36
+ },
37
+ "to": {
38
+ "type": "string",
39
+ "description": "Nombre del agente destinatario o 'broadcast' para todos"
40
+ },
41
+ "payload": {
42
+ "type": "object",
43
+ "description": "Datos del mensaje, estructura libre segun type"
44
+ },
45
+ "contextFiles": {
46
+ "type": "array",
47
+ "items": {
48
+ "type": "string"
49
+ },
50
+ "description": "Rutas de archivos relevantes al mensaje, usadas para deteccion de conflictos"
51
+ },
52
+ "timestamp": {
53
+ "type": "string",
54
+ "format": "date-time",
55
+ "description": "Fecha y hora de creacion del mensaje en formato ISO 8601"
56
+ },
57
+ "status": {
58
+ "type": "string",
59
+ "enum": [
60
+ "pending",
61
+ "processed",
62
+ "expired"
63
+ ],
64
+ "description": "Estado actual del mensaje en el ciclo de vida del protocolo"
65
+ },
66
+ "processedAt": {
67
+ "type": "string",
68
+ "format": "date-time",
69
+ "description": "Fecha y hora en que el mensaje fue marcado como procesado"
70
+ }
71
+ },
72
+ "additionalProperties": false
73
+ }