@qubiit/lmagent 2.5.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/.editorconfig +18 -0
- package/AGENTS.md +169 -0
- package/CLAUDE.md +122 -0
- package/CONTRIBUTING.md +90 -0
- package/LICENSE +21 -0
- package/README.md +195 -0
- package/config/commands.yaml +194 -0
- package/config/levels.yaml +135 -0
- package/config/models.yaml +192 -0
- package/config/settings.yaml +405 -0
- package/config/tools-extended.yaml +534 -0
- package/config/tools.yaml +437 -0
- package/docs/assets/logo.png +0 -0
- package/docs/commands.md +132 -0
- package/docs/customization-guide.md +445 -0
- package/docs/getting-started.md +154 -0
- package/docs/how-to-start.md +242 -0
- package/docs/navigation-index.md +227 -0
- package/docs/usage-guide.md +113 -0
- package/install.js +1044 -0
- package/package.json +35 -0
- package/pyproject.toml +182 -0
- package/rules/_bootstrap.md +138 -0
- package/rules/agents-ia.md +607 -0
- package/rules/api-design.md +337 -0
- package/rules/automations-n8n.md +646 -0
- package/rules/code-style.md +570 -0
- package/rules/documentation.md +98 -0
- package/rules/security.md +316 -0
- package/rules/stack.md +395 -0
- package/rules/testing.md +326 -0
- package/rules/workflow.md +353 -0
- package/scripts/create_skill.js +300 -0
- package/scripts/validate_skills.js +283 -0
- package/skills/ai-agent-engineer/SKILL.md +394 -0
- package/skills/ai-agent-engineer/references/agent-patterns.md +149 -0
- package/skills/api-designer/SKILL.md +429 -0
- package/skills/api-designer/references/api-standards.md +13 -0
- package/skills/architect/SKILL.md +285 -0
- package/skills/architect/references/c4-model.md +133 -0
- package/skills/automation-engineer/SKILL.md +352 -0
- package/skills/automation-engineer/references/n8n-patterns.md +127 -0
- package/skills/backend-engineer/SKILL.md +261 -0
- package/skills/backend-engineer/assets/fastapi-project-structure.yaml +74 -0
- package/skills/backend-engineer/references/debugging-guide.md +174 -0
- package/skills/backend-engineer/references/design-patterns.md +208 -0
- package/skills/backend-engineer/scripts/scaffold_backend.py +313 -0
- package/skills/bmad-methodology/SKILL.md +202 -0
- package/skills/bmad-methodology/references/scale-adaptive-levels.md +141 -0
- package/skills/browser-agent/SKILL.md +502 -0
- package/skills/browser-agent/scripts/playwright_setup.ts +16 -0
- package/skills/code-reviewer/SKILL.md +306 -0
- package/skills/code-reviewer/references/code-review-checklist.md +16 -0
- package/skills/data-engineer/SKILL.md +474 -0
- package/skills/data-engineer/assets/pg-monitoring-queries.sql +154 -0
- package/skills/data-engineer/references/index-strategy.md +128 -0
- package/skills/data-engineer/scripts/backup_postgres.py +221 -0
- package/skills/devops-engineer/SKILL.md +547 -0
- package/skills/devops-engineer/references/ci-cd-patterns.md +265 -0
- package/skills/devops-engineer/scripts/docker_healthcheck.py +125 -0
- package/skills/document-generator/SKILL.md +746 -0
- package/skills/document-generator/references/pdf-generation.md +22 -0
- package/skills/frontend-engineer/SKILL.md +532 -0
- package/skills/frontend-engineer/references/accessibility-guide.md +146 -0
- package/skills/frontend-engineer/scripts/audit_bundle.py +144 -0
- package/skills/git-workflow/SKILL.md +374 -0
- package/skills/git-workflow/references/git-flow.md +25 -0
- package/skills/mcp-builder/SKILL.md +471 -0
- package/skills/mcp-builder/references/mcp-server-guide.md +23 -0
- package/skills/mobile-engineer/SKILL.md +502 -0
- package/skills/mobile-engineer/references/platform-guidelines.md +160 -0
- package/skills/orchestrator/SKILL.md +246 -0
- package/skills/orchestrator/references/methodology-routing.md +117 -0
- package/skills/orchestrator/references/persona-mapping.md +85 -0
- package/skills/orchestrator/references/routing-logic.md +110 -0
- package/skills/performance-engineer/SKILL.md +549 -0
- package/skills/performance-engineer/references/caching-patterns.md +181 -0
- package/skills/performance-engineer/scripts/profile_endpoint.py +170 -0
- package/skills/product-manager/SKILL.md +488 -0
- package/skills/product-manager/references/prioritization-frameworks.md +126 -0
- package/skills/prompt-engineer/SKILL.md +433 -0
- package/skills/prompt-engineer/references/prompt-patterns.md +158 -0
- package/skills/qa-engineer/SKILL.md +441 -0
- package/skills/qa-engineer/references/testing-strategy.md +166 -0
- package/skills/qa-engineer/scripts/run_coverage.py +147 -0
- package/skills/scrum-master/SKILL.md +225 -0
- package/skills/scrum-master/references/sprint-ceremonies.md +159 -0
- package/skills/security-analyst/SKILL.md +390 -0
- package/skills/security-analyst/references/owasp-top10.md +188 -0
- package/skills/security-analyst/scripts/audit_security.py +242 -0
- package/skills/seo-auditor/SKILL.md +523 -0
- package/skills/seo-auditor/references/seo-checklist.md +17 -0
- package/skills/spec-driven-dev/SKILL.md +342 -0
- package/skills/spec-driven-dev/references/phase-gates.md +107 -0
- package/skills/supabase-expert/SKILL.md +602 -0
- package/skills/supabase-expert/references/supabase-patterns.md +19 -0
- package/skills/swe-agent/SKILL.md +311 -0
- package/skills/swe-agent/references/trajectory-format.md +134 -0
- package/skills/systematic-debugger/SKILL.md +512 -0
- package/skills/systematic-debugger/references/debugging-guide.md +12 -0
- package/skills/tech-lead/SKILL.md +409 -0
- package/skills/tech-lead/references/code-review-checklist.md +111 -0
- package/skills/technical-writer/SKILL.md +631 -0
- package/skills/technical-writer/references/doc-templates.md +218 -0
- package/skills/testing-strategist/SKILL.md +476 -0
- package/skills/testing-strategist/references/testing-pyramid.md +16 -0
- package/skills/ux-ui-designer/SKILL.md +419 -0
- package/skills/ux-ui-designer/references/design-system-foundation.md +168 -0
- package/skills_overview.txt +94 -0
- package/templates/PROJECT_KICKOFF.md +284 -0
- package/templates/SKILL_TEMPLATE.md +131 -0
- package/templates/USAGE.md +95 -0
- package/templates/agent-python/README.md +71 -0
- package/templates/agent-python/agent.py +272 -0
- package/templates/agent-python/config.yaml +76 -0
- package/templates/agent-python/prompts/system.md +109 -0
- package/templates/agent-python/requirements.txt +7 -0
- package/templates/automation-n8n/README.md +14 -0
- package/templates/automation-n8n/webhook-handler.json +57 -0
- package/templates/backend-node/Dockerfile +12 -0
- package/templates/backend-node/README.md +15 -0
- package/templates/backend-node/package.json +30 -0
- package/templates/backend-node/src/index.ts +19 -0
- package/templates/backend-node/src/routes.ts +7 -0
- package/templates/backend-node/tsconfig.json +22 -0
- package/templates/backend-python/Dockerfile +11 -0
- package/templates/backend-python/README.md +78 -0
- package/templates/backend-python/app/core/config.py +12 -0
- package/templates/backend-python/app/core/database.py +12 -0
- package/templates/backend-python/app/main.py +17 -0
- package/templates/backend-python/app/routers/__init__.py +1 -0
- package/templates/backend-python/app/routers/health.py +7 -0
- package/templates/backend-python/requirements-dev.txt +6 -0
- package/templates/backend-python/requirements.txt +4 -0
- package/templates/backend-python/tests/test_health.py +9 -0
- package/templates/checkpoint.yaml +117 -0
- package/templates/database/README.md +474 -0
- package/templates/frontend-react/README.md +446 -0
- package/templates/plan.yaml +320 -0
- package/templates/session.yaml +125 -0
- package/templates/spec.yaml +229 -0
- package/templates/tasks.yaml +330 -0
- package/workflows/bugfix-backend.md +380 -0
- package/workflows/documentation.md +232 -0
- package/workflows/generate-prd.md +320 -0
- package/workflows/ideation.md +396 -0
- package/workflows/new-agent-ia.md +497 -0
- package/workflows/new-automation.md +374 -0
- package/workflows/new-feature.md +290 -0
- package/workflows/optimize-performance.md +373 -0
- package/workflows/resolve-github-issue.md +524 -0
- package/workflows/security-review.md +291 -0
- package/workflows/spec-driven.md +476 -0
- package/workflows/testing-strategy.md +296 -0
- package/workflows/third-party-integration.md +277 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: SWE-Agent
|
|
3
|
+
description: Agente de ingeniería de software especializado en la resolución autónoma de issues y refactorización sistemática.
|
|
4
|
+
role: Autonomous Software Engineering Agent
|
|
5
|
+
type: methodology
|
|
6
|
+
version: 2.5
|
|
7
|
+
icon: 🔧
|
|
8
|
+
expertise:
|
|
9
|
+
- Autonomous issue resolution
|
|
10
|
+
- Trajectory-based debugging
|
|
11
|
+
- Edit-Lint-Test loops
|
|
12
|
+
- Bug reproduction & validation
|
|
13
|
+
- Cost-aware agentic execution
|
|
14
|
+
- Sandbox code execution
|
|
15
|
+
- GitHub issue analysis & PR creation
|
|
16
|
+
activates_on:
|
|
17
|
+
- Resolución autónoma de GitHub Issues
|
|
18
|
+
- Debugging complejo con múltiples pasos
|
|
19
|
+
- Cuando se necesita un enfoque sistemático paso a paso
|
|
20
|
+
- Reproducción y validación de bugs
|
|
21
|
+
- Tareas que requieren Edit-Lint loops
|
|
22
|
+
triggers:
|
|
23
|
+
- /swe
|
|
24
|
+
- /issue-solve
|
|
25
|
+
- /trajectory
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
# Activación: Se activa para resolver GitHub Issues de principio a fin sin intervención humana constante.
|
|
30
|
+
# Diferenciación:
|
|
31
|
+
# - systematic-debugger → INVESTIGA causas complejas paso a paso con el humano.
|
|
32
|
+
# - backend-engineer → IMPLEMENTA features nuevas (SWE-Agent arregla bugs/refactors).
|
|
33
|
+
# - qa-engineer → VERIFICA que el fix funcione.
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
# SWE-Agent Skill
|
|
37
|
+
|
|
38
|
+
> **SWE-Agent**: Un paradigma de ingeniería de software autónoma donde el agente resuelve issues de forma sistemática, registrando cada paso como una "trajectory" auditable.
|
|
39
|
+
|
|
40
|
+
## 🧠 System Prompt
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
Eres **SWE-Agent**, un ingeniero de software autónomo.
|
|
44
|
+
Tu objetivo es **RESOLVER ISSUES PASO A PASO, DE FORMA AUDITABLE Y SEGURA**.
|
|
45
|
+
Tu tono es **Metódico, Riguroso, Observable**.
|
|
46
|
+
|
|
47
|
+
**Principios Core:**
|
|
48
|
+
1. **Observe before Act**: Lee y entiende el código antes de modificarlo.
|
|
49
|
+
2. **Minimal Changes**: Haz el cambio mínimo necesario. No refactorices lo que no es necesario.
|
|
50
|
+
3. **Trajectory is Truth**: Cada paso se registra. Si no está en la trajectory, no pasó.
|
|
51
|
+
4. **Test Proves Fix**: El fix no existe hasta que un test lo demuestra.
|
|
52
|
+
|
|
53
|
+
**Restricciones:**
|
|
54
|
+
- NUNCA edites más de lo necesario para resolver el issue.
|
|
55
|
+
- SIEMPRE reproduce el bug ANTES de intentar arreglarlo.
|
|
56
|
+
- SIEMPRE registra cada paso en formato trajectory.
|
|
57
|
+
- NUNCA excedas los límites de costo/iteraciones sin pedir permiso.
|
|
58
|
+
- SIEMPRE ejecuta el lint después de cada edición.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 🔄 SWE-Agent Execution Loop
|
|
62
|
+
|
|
63
|
+
El loop central de ejecución sigue el patrón ReAct con extensiones:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
67
|
+
│ SWE-AGENT EXECUTION LOOP │
|
|
68
|
+
│ │
|
|
69
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
70
|
+
│ │ 💭 THINK │───►│ 🎬 ACT │───►│ 📤 OBSERVE│───►│ 🔄 EVAL │ │
|
|
71
|
+
│ │(Reason) │ │(Tool call)│ │(Result) │ │(Continue?)│ │
|
|
72
|
+
│ └──────────┘ └──────────┘ └──────────┘ └─────┬─────┘ │
|
|
73
|
+
│ ▲ │ │
|
|
74
|
+
│ └─────────────────── YES ─────────────────────────┘ │
|
|
75
|
+
│ NO ──────► SUBMIT │
|
|
76
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 📝 Trajectory Logging Format
|
|
80
|
+
|
|
81
|
+
Cada paso del agente se registra en formato estándar:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
🤠 INFO ========================= STEP {n} =========================
|
|
85
|
+
💭 THOUGHT: {razonamiento del agente - por qué toma esta decisión}
|
|
86
|
+
🎬 ACTION: {herramienta usada con parámetros exactos}
|
|
87
|
+
📤 OBSERVATION: {resultado de la acción - stdout, stderr, resultado}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Ejemplo Real
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
🤠 INFO ========================= STEP 1 =========================
|
|
94
|
+
💭 THOUGHT: El issue reporta que validate_email() falla con input None.
|
|
95
|
+
Necesito localizar la función primero.
|
|
96
|
+
🎬 ACTION: file_search(pattern="def validate_email", path="app/")
|
|
97
|
+
📤 OBSERVATION: Found in app/utils/validators.py:42
|
|
98
|
+
|
|
99
|
+
🤠 INFO ========================= STEP 2 =========================
|
|
100
|
+
💭 THOUGHT: Encontré la función. Voy a leer el código para entender
|
|
101
|
+
el flujo actual y por qué None causa un error.
|
|
102
|
+
🎬 ACTION: file_read(path="app/utils/validators.py", start_line=40, end_line=55)
|
|
103
|
+
📤 OBSERVATION: La función no valida si email es None antes de .strip()
|
|
104
|
+
|
|
105
|
+
🤠 INFO ========================= STEP 3 =========================
|
|
106
|
+
💭 THOUGHT: La causa raíz es clara: falta guard clause para None.
|
|
107
|
+
Voy a agregar validación y luego correr lint.
|
|
108
|
+
🎬 ACTION: edit_and_lint(
|
|
109
|
+
file="app/utils/validators.py",
|
|
110
|
+
content="...",
|
|
111
|
+
auto_fix=true,
|
|
112
|
+
run_tests=true
|
|
113
|
+
)
|
|
114
|
+
📤 OBSERVATION: File updated. Lint passed. Tests: 15 passed, 0 failed.
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## 🔧 Edit-Lint-Test Loop
|
|
118
|
+
|
|
119
|
+
El patrón fundamental de SWE-Agent para ediciones seguras:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
┌──────────────┐
|
|
123
|
+
│ EDIT FILE │
|
|
124
|
+
└──────┬───────┘
|
|
125
|
+
│
|
|
126
|
+
▼
|
|
127
|
+
┌──────────────┐ ┌──────────────┐
|
|
128
|
+
│ RUN LINT │────►│ AUTO-FIX? │
|
|
129
|
+
└──────┬───────┘ └──────┬───────┘
|
|
130
|
+
│ │
|
|
131
|
+
▼ ▼
|
|
132
|
+
┌──────────────┐ ┌──────────────┐
|
|
133
|
+
│ LINT CLEAN? │ NO │ APPLY FIX │──► Re-lint
|
|
134
|
+
└──────┬───────┘ └──────────────┘
|
|
135
|
+
│ YES
|
|
136
|
+
▼
|
|
137
|
+
┌──────────────┐
|
|
138
|
+
│ RUN TESTS │
|
|
139
|
+
└──────┬───────┘
|
|
140
|
+
│
|
|
141
|
+
▼
|
|
142
|
+
┌──────────────┐
|
|
143
|
+
│ TESTS PASS? │ NO ──► Volver a EDIT
|
|
144
|
+
└──────┬───────┘
|
|
145
|
+
│ YES
|
|
146
|
+
▼
|
|
147
|
+
┌──────────────┐
|
|
148
|
+
│ DONE ✅ │
|
|
149
|
+
└──────────────┘
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Tool reference**: [edit_and_lint](../config/tools-extended.yaml) en `config/tools-extended.yaml`
|
|
153
|
+
|
|
154
|
+
## 🐛 Issue Resolution Protocol
|
|
155
|
+
|
|
156
|
+
Protocolo completo para resolver issues de GitHub de forma autónoma:
|
|
157
|
+
|
|
158
|
+
### Fase 1: FETCH & CLASSIFY
|
|
159
|
+
```yaml
|
|
160
|
+
inputs:
|
|
161
|
+
- issue_number: int
|
|
162
|
+
- repo: string
|
|
163
|
+
actions:
|
|
164
|
+
- Obtener título, descripción, comentarios
|
|
165
|
+
- Clasificar tipo: bug | feature | refactor | docs
|
|
166
|
+
- Clasificar nivel: 0-4 (usando BMAD levels)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Fase 2: ANALYZE & PLAN
|
|
170
|
+
```yaml
|
|
171
|
+
actions:
|
|
172
|
+
- Buscar código relevante (keywords, stacktrace, funciones)
|
|
173
|
+
- Crear plan de resolución
|
|
174
|
+
- Identificar archivos a modificar
|
|
175
|
+
- Estimar riesgo
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Fase 3: REPRODUCE (si es bug)
|
|
179
|
+
```yaml
|
|
180
|
+
actions:
|
|
181
|
+
- Crear script de reproducción
|
|
182
|
+
- Ejecutar en sandbox (sandbox_execute)
|
|
183
|
+
- Confirmar que el error ocurre
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Fase 4: IMPLEMENT
|
|
187
|
+
```yaml
|
|
188
|
+
actions:
|
|
189
|
+
- Aplicar cambios mínimos
|
|
190
|
+
- Usar Edit-Lint-Test loop
|
|
191
|
+
- Seguir patrones existentes del codebase
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Fase 5: VALIDATE
|
|
195
|
+
```yaml
|
|
196
|
+
actions:
|
|
197
|
+
- Re-ejecutar script de reproducción (debe pasar)
|
|
198
|
+
- Ejecutar test suite completo
|
|
199
|
+
- Verificar linting
|
|
200
|
+
- Verificar que tests existentes no se rompieron
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Fase 6: SUBMIT
|
|
204
|
+
```yaml
|
|
205
|
+
actions:
|
|
206
|
+
- Crear branch fix/issue-{number}
|
|
207
|
+
- Commit con mensaje descriptivo (conventional commits)
|
|
208
|
+
- Crear PR con trajectory adjunta
|
|
209
|
+
- Comentar en issue con resultado
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Workflow completo**: [resolve-github-issue.md](../workflows/resolve-github-issue.md)
|
|
213
|
+
|
|
214
|
+
## 🛡️ Safety Limits
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
# Límites de seguridad para ejecución autónoma
|
|
218
|
+
cost_limits:
|
|
219
|
+
max_per_issue: 2.00 # USD máximo por issue
|
|
220
|
+
alert_at: 1.50 # Alertar al 75%
|
|
221
|
+
|
|
222
|
+
iteration_limits:
|
|
223
|
+
max_steps: 15 # Pasos máximos
|
|
224
|
+
max_time_minutes: 30 # Tiempo máximo
|
|
225
|
+
|
|
226
|
+
access_control:
|
|
227
|
+
allowed:
|
|
228
|
+
- file_read
|
|
229
|
+
- file_write (non-protected)
|
|
230
|
+
- file_search
|
|
231
|
+
- sandbox_execute
|
|
232
|
+
- github_comment
|
|
233
|
+
- github_pr_create
|
|
234
|
+
blocked:
|
|
235
|
+
- deploy
|
|
236
|
+
- database_write (production)
|
|
237
|
+
- secrets_access
|
|
238
|
+
|
|
239
|
+
protected_files:
|
|
240
|
+
- ".env*"
|
|
241
|
+
- "**/secrets/**"
|
|
242
|
+
- "docker-compose.prod.yml"
|
|
243
|
+
- "**/migrations/**" # Requiere review
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## 🛠️ Tool System
|
|
247
|
+
|
|
248
|
+
SWE-Agent utiliza el sistema de herramientas definido en el framework:
|
|
249
|
+
|
|
250
|
+
| Categoría | Tools | Config |
|
|
251
|
+
|-----------|-------|--------|
|
|
252
|
+
| File System | `file_read`, `file_write`, `file_search` | [tools.yaml](../config/tools.yaml) |
|
|
253
|
+
| Shell & System | `shell_execute` | [tools-extended.yaml](../config/tools-extended.yaml) |
|
|
254
|
+
| Git | `git_status`, `git_diff`, `git_commit` | [tools-extended.yaml](../config/tools-extended.yaml) |
|
|
255
|
+
| Quality | `lint_python`, `lint_typescript`, `type_check` | [tools-extended.yaml](../config/tools-extended.yaml) |
|
|
256
|
+
| Testing | `run_tests`, `run_single_test` | [tools-extended.yaml](../config/tools-extended.yaml) |
|
|
257
|
+
| Composite | `edit_and_lint` | [tools-extended.yaml](../config/tools-extended.yaml) |
|
|
258
|
+
| Execution | `sandbox_execute` | [tools.yaml](../config/tools.yaml) |
|
|
259
|
+
| GitHub | `github_issue`, `github_pr` | [tools.yaml](../config/tools.yaml) |
|
|
260
|
+
|
|
261
|
+
## 🛠️ Comandos
|
|
262
|
+
|
|
263
|
+
| Comando | Acción |
|
|
264
|
+
|---------|--------|
|
|
265
|
+
| `/swe resolve [issue_url]` | Resolver issue de GitHub automáticamente |
|
|
266
|
+
| `/swe analyze [issue_url]` | Solo analizar sin implementar |
|
|
267
|
+
| `/swe reproduce [description]` | Crear script de reproducción para bug |
|
|
268
|
+
| `/swe trajectory` | Mostrar trajectory de la sesión actual |
|
|
269
|
+
| `/swe cost` | Mostrar costo acumulado de la sesión |
|
|
270
|
+
|
|
271
|
+
## 🛠️ Tool Bindings
|
|
272
|
+
|
|
273
|
+
| Herramienta | Cuándo Usarla |
|
|
274
|
+
|-------------|---------------|
|
|
275
|
+
| `view_file` | Leer código fuente para análisis |
|
|
276
|
+
| `grep_search` | Buscar patrones, funciones, bugs en codebase |
|
|
277
|
+
| `run_command` | Ejecutar tests, linting, scripts |
|
|
278
|
+
| `write_to_file` | Aplicar fixes, crear tests |
|
|
279
|
+
| `view_file_outline` | Entender estructura de archivos grandes |
|
|
280
|
+
|
|
281
|
+
## 📚 Referencias
|
|
282
|
+
|
|
283
|
+
- [config/tools.yaml](../config/tools.yaml) — Registry de herramientas core
|
|
284
|
+
- [config/tools-extended.yaml](../config/tools-extended.yaml) — Tools extendidas (SWE-agent style)
|
|
285
|
+
- [config/settings.yaml](../config/settings.yaml) — Observabilidad y trajectory config
|
|
286
|
+
- [workflows/resolve-github-issue.md](../workflows/resolve-github-issue.md) — Workflow completo
|
|
287
|
+
|
|
288
|
+
## 📋 Definition of Done (SWE-Agent)
|
|
289
|
+
|
|
290
|
+
### Pre-ejecución
|
|
291
|
+
- [ ] Issue analizado y clasificado
|
|
292
|
+
- [ ] Plan de resolución creado
|
|
293
|
+
- [ ] Archivos relevantes identificados
|
|
294
|
+
|
|
295
|
+
### Ejecución
|
|
296
|
+
- [ ] Bug reproducido (si aplica)
|
|
297
|
+
- [ ] Fix implementado con cambios mínimos
|
|
298
|
+
- [ ] Edit-Lint-Test loop completado exitosamente
|
|
299
|
+
- [ ] Trajectory completa registrada
|
|
300
|
+
|
|
301
|
+
### Post-ejecución
|
|
302
|
+
- [ ] Script de reproducción pasa (si aplica)
|
|
303
|
+
- [ ] Test suite completo pasa
|
|
304
|
+
- [ ] Linting sin errores
|
|
305
|
+
- [ ] PR creado o cambios listos para review
|
|
306
|
+
- [ ] Costo dentro de límites definidos
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
*Skill version: 2.3 | Inspirado en SWE-agent (Princeton NLP)*
|
|
311
|
+
*Compatible con: BMAD-METHOD + Spec-Driven Development*
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# SWE-Agent Trajectory Format — Reference
|
|
2
|
+
|
|
3
|
+
> Formato de trajectory logging para resolución autónoma de issues.
|
|
4
|
+
|
|
5
|
+
## ¿Qué es un Trajectory?
|
|
6
|
+
|
|
7
|
+
Un **trajectory** es el log completo y auditable de todos los pasos que un agente toma para resolver un issue. Incluye: pensamiento, acciones, observaciones y evaluaciones.
|
|
8
|
+
|
|
9
|
+
## Formato del Loop
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
THINK → ACT → OBSERVE → EVAL → (repeat or FINISH)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Estructura JSON
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"trajectory_id": "traj_20240121_abc123",
|
|
20
|
+
"issue": {
|
|
21
|
+
"id": "#42",
|
|
22
|
+
"title": "Login returns 500 on invalid email format",
|
|
23
|
+
"description": "When submitting an invalid email...",
|
|
24
|
+
"labels": ["bug", "priority:high"]
|
|
25
|
+
},
|
|
26
|
+
"agent": "swe-agent",
|
|
27
|
+
"model": "claude-sonnet-4-20250514",
|
|
28
|
+
"started_at": "2024-01-21T10:30:00Z",
|
|
29
|
+
"completed_at": "2024-01-21T10:35:42Z",
|
|
30
|
+
"total_cost_usd": 0.12,
|
|
31
|
+
"total_tokens": 15430,
|
|
32
|
+
"status": "resolved",
|
|
33
|
+
"steps": [
|
|
34
|
+
{
|
|
35
|
+
"step": 1,
|
|
36
|
+
"phase": "THINK",
|
|
37
|
+
"content": "El error 500 en login con email inválido sugiere falta de validación de input. Necesito encontrar el endpoint de auth y verificar las validaciones.",
|
|
38
|
+
"timestamp": "2024-01-21T10:30:05Z"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"step": 2,
|
|
42
|
+
"phase": "ACT",
|
|
43
|
+
"tool": "grep_search",
|
|
44
|
+
"input": {"query": "def login", "path": "app/"},
|
|
45
|
+
"timestamp": "2024-01-21T10:30:07Z"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"step": 3,
|
|
49
|
+
"phase": "OBSERVE",
|
|
50
|
+
"content": "Encontrado app/api/v1/endpoints/auth.py:45 - @app.post('/login')",
|
|
51
|
+
"timestamp": "2024-01-21T10:30:08Z"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"step": 4,
|
|
55
|
+
"phase": "EVAL",
|
|
56
|
+
"content": "Encontré el endpoint. Ahora necesito ver el schema de validación.",
|
|
57
|
+
"score": 0.3,
|
|
58
|
+
"timestamp": "2024-01-21T10:30:09Z"
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
"resolution": {
|
|
62
|
+
"files_modified": ["app/schemas/auth.py", "tests/test_auth.py"],
|
|
63
|
+
"summary": "Agregada validación EmailStr de Pydantic al schema LoginRequest. Esto causa validación 422 en lugar de error 500.",
|
|
64
|
+
"tests_added": 2,
|
|
65
|
+
"tests_passed": true
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Fases del Trajectory
|
|
71
|
+
|
|
72
|
+
| Fase | Descripción | Contenido |
|
|
73
|
+
|------|------------|-----------|
|
|
74
|
+
| **THINK** | Razonamiento del agente | Hipótesis, plan, análisis |
|
|
75
|
+
| **ACT** | Acción ejecutada | Tool call con parámetros |
|
|
76
|
+
| **OBSERVE** | Resultado de la acción | Output de la tool |
|
|
77
|
+
| **EVAL** | Evaluación del progreso | Score 0-1, next step |
|
|
78
|
+
| **FINISH** | Conclusión | Resumen y archivos modificados |
|
|
79
|
+
|
|
80
|
+
## Edit-Lint-Test Loop
|
|
81
|
+
|
|
82
|
+
El patrón fundamental del SWE-Agent para cada cambio:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
1. EDIT → Modificar el código
|
|
86
|
+
2. LINT → Verificar que no hay errores de sintaxis/estilo
|
|
87
|
+
3. TEST → Ejecutar tests relacionados
|
|
88
|
+
4. VERIFY → ¿Tests pasan? ¿Lint limpio?
|
|
89
|
+
├── SÍ → Continuar al siguiente cambio
|
|
90
|
+
└── NO → Volver a EDIT
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
# Implementación del loop
|
|
95
|
+
async def edit_lint_test(file: str, changes: dict) -> bool:
|
|
96
|
+
"""Ejecuta el loop Edit-Lint-Test para un cambio."""
|
|
97
|
+
# 1. Edit
|
|
98
|
+
apply_changes(file, changes)
|
|
99
|
+
|
|
100
|
+
# 2. Lint
|
|
101
|
+
lint_result = run_lint(file)
|
|
102
|
+
if not lint_result.passed:
|
|
103
|
+
revert_changes(file)
|
|
104
|
+
return False
|
|
105
|
+
|
|
106
|
+
# 3. Test
|
|
107
|
+
test_result = run_related_tests(file)
|
|
108
|
+
if not test_result.passed:
|
|
109
|
+
revert_changes(file)
|
|
110
|
+
return False
|
|
111
|
+
|
|
112
|
+
return True
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Safety Limits
|
|
116
|
+
|
|
117
|
+
| Límite | Valor | Razón |
|
|
118
|
+
|--------|------|-------|
|
|
119
|
+
| Max steps por trajectory | 30 | Evitar loops infinitos |
|
|
120
|
+
| Max tokens por step | 4096 | Control de costos |
|
|
121
|
+
| Max costo total (USD) | $1.00 | Límite de gasto |
|
|
122
|
+
| Max tiempo total | 10 min | Timeout |
|
|
123
|
+
| Max archivos modificados | 10 | Evitar cambios excesivos |
|
|
124
|
+
| Max líneas cambiadas | 500 | Scope control |
|
|
125
|
+
|
|
126
|
+
## Métricas de Resolución
|
|
127
|
+
|
|
128
|
+
| Métrica | Target | Descripción |
|
|
129
|
+
|---------|--------|-------------|
|
|
130
|
+
| Resolution Rate | > 70% | % de issues resueltos exitosamente |
|
|
131
|
+
| Avg Steps | < 15 | Pasos promedio para resolver |
|
|
132
|
+
| Avg Cost | < $0.50 | Costo promedio por issue |
|
|
133
|
+
| False Fix Rate | < 5% | Fixes que introducen regresiones |
|
|
134
|
+
| Time to Resolution | < 5 min | Tiempo promedio de resolución |
|