@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,524 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Workflow autónomo para resolver issues de GitHub (inspirado en SWE-agent)
|
|
3
|
+
level: auto-detect
|
|
4
|
+
personas: [backend-engineer, qa-engineer]
|
|
5
|
+
autonomous: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Resolve GitHub Issue Workflow
|
|
9
|
+
|
|
10
|
+
Este workflow permite que un agente analice y resuelva issues de GitHub de forma autónoma, inspirado en **SWE-agent**.
|
|
11
|
+
|
|
12
|
+
## Pre-requisitos
|
|
13
|
+
|
|
14
|
+
1. Leer [AGENTS.md](../AGENTS.md)
|
|
15
|
+
2. Leer [rules/workflow.md](../rules/workflow.md)
|
|
16
|
+
3. Issue con etiqueta `agent-resolvable` o asignado al agente
|
|
17
|
+
4. `GITHUB_TOKEN` configurado
|
|
18
|
+
|
|
19
|
+
## Información de Entrada
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
# Input esperado
|
|
23
|
+
github_issue:
|
|
24
|
+
owner: "org-name"
|
|
25
|
+
repo: "repo-name"
|
|
26
|
+
issue_number: 123
|
|
27
|
+
|
|
28
|
+
options:
|
|
29
|
+
max_cost: 2.00 # USD máximo
|
|
30
|
+
max_iterations: 15 # Pasos máximos
|
|
31
|
+
auto_create_pr: false # Crear PR automáticamente
|
|
32
|
+
require_review: true # Pedir review antes de PR
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Flujo de Resolución
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
41
|
+
│ RESOLVE GITHUB ISSUE WORKFLOW │
|
|
42
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
43
|
+
|
|
44
|
+
┌──────────────────────────────────────────────────────────┐
|
|
45
|
+
│ 1. FETCH ISSUE │
|
|
46
|
+
│ • Obtener título, descripción, comentarios │
|
|
47
|
+
│ • Identificar tipo (bug, feature, refactor) │
|
|
48
|
+
│ • Clasificar nivel de complejidad │
|
|
49
|
+
└────────────────────────┬─────────────────────────────────┘
|
|
50
|
+
│
|
|
51
|
+
▼
|
|
52
|
+
┌──────────────────────────────────────────────────────────┐
|
|
53
|
+
│ 2. ANALYZE & PLAN │
|
|
54
|
+
│ • Entender el problema │
|
|
55
|
+
│ • Localizar archivos relevantes │
|
|
56
|
+
│ • Proponer solución │
|
|
57
|
+
└────────────────────────┬─────────────────────────────────┘
|
|
58
|
+
│
|
|
59
|
+
▼
|
|
60
|
+
┌──────────────────────────────────────────────────────────┐
|
|
61
|
+
│ 3. REPRODUCE (si es bug) │
|
|
62
|
+
│ • Crear script de reproducción │
|
|
63
|
+
│ • Ejecutar en sandbox │
|
|
64
|
+
│ • Confirmar que el error ocurre │
|
|
65
|
+
└────────────────────────┬─────────────────────────────────┘
|
|
66
|
+
│
|
|
67
|
+
▼
|
|
68
|
+
┌──────────────────────────────────────────────────────────┐
|
|
69
|
+
│ 4. IMPLEMENT │
|
|
70
|
+
│ • Hacer cambios mínimos necesarios │
|
|
71
|
+
│ • Seguir patrones existentes │
|
|
72
|
+
│ • Agregar/actualizar tests │
|
|
73
|
+
└────────────────────────┬─────────────────────────────────┘
|
|
74
|
+
│
|
|
75
|
+
▼
|
|
76
|
+
┌──────────────────────────────────────────────────────────┐
|
|
77
|
+
│ 5. VALIDATE │
|
|
78
|
+
│ • Verificar que reproducción ya no falla │
|
|
79
|
+
│ • Ejecutar test suite completo │
|
|
80
|
+
│ • Verificar linting │
|
|
81
|
+
└────────────────────────┬─────────────────────────────────┘
|
|
82
|
+
│
|
|
83
|
+
▼
|
|
84
|
+
┌──────────────────────────────────────────────────────────┐
|
|
85
|
+
│ 6. SUBMIT │
|
|
86
|
+
│ • Crear branch fix/issue-{number} │
|
|
87
|
+
│ • Commit con mensaje descriptivo │
|
|
88
|
+
│ • Crear PR (o pedir review primero) │
|
|
89
|
+
│ • Adjuntar trajectory log │
|
|
90
|
+
└──────────────────────────────────────────────────────────┘
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Paso 1: Fetch Issue
|
|
96
|
+
|
|
97
|
+
### 1.1 Obtener Información del Issue
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
# Pseudocódigo del proceso
|
|
101
|
+
async def fetch_issue(owner: str, repo: str, issue_number: int):
|
|
102
|
+
"""Obtiene toda la información del issue."""
|
|
103
|
+
|
|
104
|
+
# Obtener issue principal
|
|
105
|
+
issue = await github.get_issue(owner, repo, issue_number)
|
|
106
|
+
|
|
107
|
+
# Obtener comentarios
|
|
108
|
+
comments = await github.get_issue_comments(owner, repo, issue_number)
|
|
109
|
+
|
|
110
|
+
# Obtener PRs relacionados (si hay)
|
|
111
|
+
related_prs = await github.search_prs(f"fixes #{issue_number}")
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
"title": issue.title,
|
|
115
|
+
"body": issue.body,
|
|
116
|
+
"labels": issue.labels,
|
|
117
|
+
"comments": comments,
|
|
118
|
+
"related_prs": related_prs,
|
|
119
|
+
"created_at": issue.created_at,
|
|
120
|
+
"author": issue.user.login
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 1.2 Clasificar Issue
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Determinar tipo:
|
|
128
|
+
- bug: Contiene "error", "bug", "fix", "broken"
|
|
129
|
+
- feature: Contiene "add", "new", "implement", "feature"
|
|
130
|
+
- refactor: Contiene "refactor", "improve", "optimize"
|
|
131
|
+
- docs: Contiene "doc", "readme", "typo"
|
|
132
|
+
|
|
133
|
+
Determinar nivel:
|
|
134
|
+
- Level 0: Typos, docs
|
|
135
|
+
- Level 1: Bug fix simple, feature pequeño
|
|
136
|
+
- Level 2: Bug complejo, feature mediano
|
|
137
|
+
- Level 3: Cambio arquitectural, múltiples archivos
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Paso 2: Analyze & Plan
|
|
143
|
+
|
|
144
|
+
### 2.1 Localizar Código Relevante
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
Estrategias de búsqueda:
|
|
148
|
+
1. Buscar keywords del issue en el código
|
|
149
|
+
2. Buscar archivos mencionados en stacktrace
|
|
150
|
+
3. Buscar funciones/clases mencionadas
|
|
151
|
+
4. Analizar imports y dependencias
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 2.2 Crear Plan de Solución
|
|
155
|
+
|
|
156
|
+
```markdown
|
|
157
|
+
## Plan de Resolución: Issue #{number}
|
|
158
|
+
|
|
159
|
+
### Problema
|
|
160
|
+
[Resumen del problema]
|
|
161
|
+
|
|
162
|
+
### Causa Raíz (si es bug)
|
|
163
|
+
[Análisis de la causa]
|
|
164
|
+
|
|
165
|
+
### Archivos a Modificar
|
|
166
|
+
- [ ] `path/to/file1.py` - [Cambio]
|
|
167
|
+
- [ ] `path/to/file2.py` - [Cambio]
|
|
168
|
+
|
|
169
|
+
### Tests Necesarios
|
|
170
|
+
- [ ] Test que reproduce el issue
|
|
171
|
+
- [ ] Test del fix
|
|
172
|
+
|
|
173
|
+
### Riesgos
|
|
174
|
+
- [Posible riesgo 1]
|
|
175
|
+
- [Posible riesgo 2]
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Paso 3: Reproduce (para bugs)
|
|
181
|
+
|
|
182
|
+
### 3.1 Crear Script de Reproducción
|
|
183
|
+
|
|
184
|
+
```python
|
|
185
|
+
# reproduce_issue_{number}.py
|
|
186
|
+
"""
|
|
187
|
+
Script para reproducir Issue #{number}.
|
|
188
|
+
|
|
189
|
+
Issue: {title}
|
|
190
|
+
URL: {url}
|
|
191
|
+
|
|
192
|
+
Comportamiento esperado: {expected}
|
|
193
|
+
Comportamiento actual: {actual}
|
|
194
|
+
"""
|
|
195
|
+
|
|
196
|
+
import asyncio
|
|
197
|
+
from app.main import app
|
|
198
|
+
from httpx import AsyncClient
|
|
199
|
+
|
|
200
|
+
async def reproduce():
|
|
201
|
+
"""Intenta reproducir el issue."""
|
|
202
|
+
async with AsyncClient(app=app, base_url="http://test") as client:
|
|
203
|
+
# Configurar estado según el issue
|
|
204
|
+
|
|
205
|
+
# Ejecutar acción que causa el problema
|
|
206
|
+
response = await client.post("/endpoint", json={
|
|
207
|
+
# Datos del issue
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
# Verificar si el bug ocurre
|
|
211
|
+
print(f"Status: {response.status_code}")
|
|
212
|
+
print(f"Response: {response.json()}")
|
|
213
|
+
|
|
214
|
+
# Assert que demuestra el bug
|
|
215
|
+
# assert response.status_code == 200 # FALLA antes del fix
|
|
216
|
+
|
|
217
|
+
if __name__ == "__main__":
|
|
218
|
+
asyncio.run(reproduce())
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### 3.2 Ejecutar en Sandbox
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
Usar sandbox_execute tool:
|
|
225
|
+
- language: python
|
|
226
|
+
- timeout: 30s
|
|
227
|
+
- network: none (aislado)
|
|
228
|
+
|
|
229
|
+
Verificar que el error ocurre como se describe en el issue.
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Paso 4: Implement
|
|
235
|
+
|
|
236
|
+
### 4.1 Principios de Implementación
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
✅ HACER:
|
|
240
|
+
- Cambios mínimos necesarios
|
|
241
|
+
- Seguir patrones existentes en el código
|
|
242
|
+
- Mantener estilo consistente
|
|
243
|
+
- Agregar comentarios donde sea necesario
|
|
244
|
+
|
|
245
|
+
❌ NO HACER:
|
|
246
|
+
- Refactors no relacionados
|
|
247
|
+
- Cambios de estilo/formato masivos
|
|
248
|
+
- Agregar dependencias innecesarias
|
|
249
|
+
- Cambiar APIs públicas sin necesidad
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### 4.2 Logging de Acciones (Trajectory)
|
|
253
|
+
|
|
254
|
+
Cada paso se registra en formato SWE-agent:
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
🤠 INFO ========================= STEP {n} =========================
|
|
258
|
+
💭 THOUGHT: {razonamiento del agente}
|
|
259
|
+
🎬 ACTION: {herramienta usada con parámetros}
|
|
260
|
+
📤 OBSERVATION: {resultado de la acción}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Ejemplo:
|
|
264
|
+
```
|
|
265
|
+
🤠 INFO ========================= STEP 3 =========================
|
|
266
|
+
💭 THOUGHT: El error está en la función validate_email().
|
|
267
|
+
No está manejando el caso cuando el email es None.
|
|
268
|
+
Necesito agregar un check al inicio de la función.
|
|
269
|
+
🎬 ACTION: file_write(
|
|
270
|
+
path="app/utils/validators.py",
|
|
271
|
+
content="...",
|
|
272
|
+
mode="replace"
|
|
273
|
+
)
|
|
274
|
+
📤 OBSERVATION: File updated successfully. 5 lines changed.
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Paso 5: Validate
|
|
280
|
+
|
|
281
|
+
### 5.1 Re-ejecutar Reproducción
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
python reproduce_issue_{number}.py
|
|
285
|
+
|
|
286
|
+
# Debería NO mostrar el error ahora
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### 5.2 Ejecutar Test Suite
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
# Ejecutar todos los tests
|
|
293
|
+
pytest --cov=app
|
|
294
|
+
|
|
295
|
+
# Verificar linting
|
|
296
|
+
ruff check .
|
|
297
|
+
ruff format --check .
|
|
298
|
+
|
|
299
|
+
# Verificar types (si aplica)
|
|
300
|
+
mypy app/
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### 5.3 Criterios de Éxito
|
|
304
|
+
|
|
305
|
+
- [ ] Script de reproducción pasa
|
|
306
|
+
- [ ] Tests existentes pasan
|
|
307
|
+
- [ ] Nuevos tests pasan
|
|
308
|
+
- [ ] Linting pasa
|
|
309
|
+
- [ ] Cobertura no disminuye
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Paso 6: Submit
|
|
314
|
+
|
|
315
|
+
### 6.1 Crear Branch y Commit
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
# Crear branch
|
|
319
|
+
git checkout -b fix/issue-{number}
|
|
320
|
+
|
|
321
|
+
# Stage cambios
|
|
322
|
+
git add -A
|
|
323
|
+
|
|
324
|
+
# Commit con mensaje descriptivo
|
|
325
|
+
git commit -m "fix(module): descripción corta
|
|
326
|
+
|
|
327
|
+
Fixes #{number}
|
|
328
|
+
|
|
329
|
+
- [Cambio 1]
|
|
330
|
+
- [Cambio 2]
|
|
331
|
+
|
|
332
|
+
Root cause: [Explicación breve]
|
|
333
|
+
|
|
334
|
+
🤖 Resolved by LMAgent
|
|
335
|
+
Trajectory: {trajectory_id}"
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### 6.2 Crear Pull Request
|
|
339
|
+
> 💡 **Tip**: Usa `/prompt` para generar la descripción del PR basada en el Trajectory Log.
|
|
340
|
+
|
|
341
|
+
```markdown
|
|
342
|
+
## Fix: {Issue Title}
|
|
343
|
+
|
|
344
|
+
Fixes #{number}
|
|
345
|
+
|
|
346
|
+
### Problem
|
|
347
|
+
{Descripción del problema}
|
|
348
|
+
|
|
349
|
+
### Root Cause
|
|
350
|
+
{Análisis de causa raíz}
|
|
351
|
+
|
|
352
|
+
### Solution
|
|
353
|
+
{Descripción de la solución}
|
|
354
|
+
|
|
355
|
+
### Testing
|
|
356
|
+
- [x] Created reproduction script
|
|
357
|
+
- [x] Fixed issue verified
|
|
358
|
+
- [x] All existing tests pass
|
|
359
|
+
- [x] Added new tests for fix
|
|
360
|
+
|
|
361
|
+
### Trajectory
|
|
362
|
+
<details>
|
|
363
|
+
<summary>Agent execution log</summary>
|
|
364
|
+
|
|
365
|
+
{Trajectory completo en formato collapsible}
|
|
366
|
+
|
|
367
|
+
</details>
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
🤖 *This PR was created by LMAgent*
|
|
371
|
+
Cost: ${cost}
|
|
372
|
+
Iterations: {iterations}
|
|
373
|
+
Time: {time}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### 6.3 Limpiar
|
|
377
|
+
|
|
378
|
+
```bash
|
|
379
|
+
# Eliminar script de reproducción (ya hay test)
|
|
380
|
+
rm reproduce_issue_{number}.py
|
|
381
|
+
|
|
382
|
+
# Guardar trajectory para análisis
|
|
383
|
+
mv trajectory.json trajectories/issue-{number}-{timestamp}.json
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## Límites de Seguridad
|
|
389
|
+
|
|
390
|
+
### Costo
|
|
391
|
+
```yaml
|
|
392
|
+
max_cost_per_issue: 2.00 # USD
|
|
393
|
+
alert_at: 1.50 # Alertar al 75%
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### Tiempo
|
|
397
|
+
```yaml
|
|
398
|
+
max_iterations: 15
|
|
399
|
+
max_time_minutes: 30
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Acceso
|
|
403
|
+
```yaml
|
|
404
|
+
allowed_operations:
|
|
405
|
+
- file_read
|
|
406
|
+
- file_write (non-protected)
|
|
407
|
+
- file_search
|
|
408
|
+
- sandbox_execute
|
|
409
|
+
- github_comment
|
|
410
|
+
- github_pr_create
|
|
411
|
+
|
|
412
|
+
blocked_operations:
|
|
413
|
+
- deploy
|
|
414
|
+
- database_write (production)
|
|
415
|
+
- secrets_access
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Archivos Protegidos
|
|
419
|
+
```yaml
|
|
420
|
+
protected_files:
|
|
421
|
+
- ".env*"
|
|
422
|
+
- "**/secrets/**"
|
|
423
|
+
- "docker-compose.prod.yml"
|
|
424
|
+
- "**/migrations/**" # Requiere review
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## Output del Workflow
|
|
430
|
+
|
|
431
|
+
### Éxito
|
|
432
|
+
```json
|
|
433
|
+
{
|
|
434
|
+
"success": true,
|
|
435
|
+
"issue_number": 123,
|
|
436
|
+
"resolution": {
|
|
437
|
+
"type": "fix",
|
|
438
|
+
"files_changed": ["app/utils/validators.py", "tests/test_validators.py"],
|
|
439
|
+
"lines_added": 15,
|
|
440
|
+
"lines_removed": 3
|
|
441
|
+
},
|
|
442
|
+
"pr": {
|
|
443
|
+
"number": 456,
|
|
444
|
+
"url": "https://github.com/org/repo/pull/456"
|
|
445
|
+
},
|
|
446
|
+
"cost": 0.45,
|
|
447
|
+
"iterations": 8,
|
|
448
|
+
"time_seconds": 120,
|
|
449
|
+
"trajectory_id": "issue-123-1705838400"
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### Fallo
|
|
454
|
+
```json
|
|
455
|
+
{
|
|
456
|
+
"success": false,
|
|
457
|
+
"issue_number": 123,
|
|
458
|
+
"reason": "Could not reproduce the issue",
|
|
459
|
+
"suggestion": "Issue may need more information or manual investigation",
|
|
460
|
+
"cost": 0.15,
|
|
461
|
+
"iterations": 5,
|
|
462
|
+
"trajectory_id": "issue-123-1705838400",
|
|
463
|
+
"comment_posted": true
|
|
464
|
+
}
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
## Comentario en Issue (si falla)
|
|
470
|
+
|
|
471
|
+
```markdown
|
|
472
|
+
🤖 **LMAgent Automated Analysis**
|
|
473
|
+
|
|
474
|
+
I attempted to resolve this issue automatically but encountered difficulties:
|
|
475
|
+
|
|
476
|
+
**Status**: Unable to complete resolution
|
|
477
|
+
|
|
478
|
+
**Reason**: {reason}
|
|
479
|
+
|
|
480
|
+
**What I tried**:
|
|
481
|
+
1. {step_1}
|
|
482
|
+
2. {step_2}
|
|
483
|
+
3. {step_3}
|
|
484
|
+
|
|
485
|
+
**Suggestions for manual investigation**:
|
|
486
|
+
- {suggestion_1}
|
|
487
|
+
- {suggestion_2}
|
|
488
|
+
|
|
489
|
+
<details>
|
|
490
|
+
<summary>Execution Details</summary>
|
|
491
|
+
|
|
492
|
+
- Cost: ${cost}
|
|
493
|
+
- Iterations: {iterations}
|
|
494
|
+
- Trajectory: {link}
|
|
495
|
+
|
|
496
|
+
</details>
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
*This is an automated analysis. A human developer should review this issue.*
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
---
|
|
503
|
+
|
|
504
|
+
## Checklist de Resolución
|
|
505
|
+
|
|
506
|
+
### Pre-ejecución
|
|
507
|
+
- [ ] Issue tiene información suficiente
|
|
508
|
+
- [ ] Etiqueta `agent-resolvable` presente
|
|
509
|
+
- [ ] GITHUB_TOKEN configurado
|
|
510
|
+
- [ ] Repositorio clonado localmente
|
|
511
|
+
|
|
512
|
+
### Durante ejecución
|
|
513
|
+
- [ ] Issue analizado y clasificado
|
|
514
|
+
- [ ] Plan de solución creado
|
|
515
|
+
- [ ] Bug reproducido (si aplica)
|
|
516
|
+
- [ ] Fix implementado
|
|
517
|
+
- [ ] Tests agregados
|
|
518
|
+
- [ ] Validación pasada
|
|
519
|
+
|
|
520
|
+
### Post-ejecución
|
|
521
|
+
- [ ] PR creado (o cambios listos para review)
|
|
522
|
+
- [ ] Trajectory guardado
|
|
523
|
+
- [ ] Issue comentado con resultado
|
|
524
|
+
- [ ] Métricas registradas
|