openprompt-lang 1.3.0 → 1.4.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/bin/cli.js +2 -0
- package/docs/00-ARCHITECTURE/OPL-BOOST-MULTI-AGENT.md +406 -0
- package/docs/02-STANDARDS/AGENTS.template.md +89 -0
- package/docs/02-STANDARDS/ticket-driven-development.md +99 -0
- package/docs/04-TICKETS/BOOST-001-profile-registry.md +66 -0
- package/docs/04-TICKETS/BOOST-002-context-compression.md +58 -0
- package/docs/04-TICKETS/BOOST-003-template-hydration.md +69 -0
- package/docs/04-TICKETS/BOOST-004-fewshot-engine.md +58 -0
- package/docs/04-TICKETS/BOOST-005-agent-pool.md +69 -0
- package/docs/04-TICKETS/BOOST-006-specialized-agents.md +53 -0
- package/docs/04-TICKETS/BOOST-007-validation-loop.md +56 -0
- package/docs/04-TICKETS/BOOST-008-orchestrator.md +71 -0
- package/docs/04-TICKETS/BOOST-009-cache-system.md +56 -0
- package/docs/04-TICKETS/BOOST-010-cli-mcp.md +67 -0
- package/docs/04-TICKETS/BOOST-011-self-learning.md +50 -0
- package/docs/04-TICKETS/BOOST-012-prompt-preamble.md +109 -0
- package/docs/04-TICKETS/BOOST-013-hydrator-duplicate-code.md +132 -0
- package/docs/04-TICKETS/BOOST-014-multiagent-missing-parts.md +87 -0
- package/docs/04-TICKETS/BOOST-015-skeleton-type-missing.md +76 -0
- package/docs/04-TICKETS/BOOST-016-output-path-duplicate.md +68 -0
- package/docs/04-TICKETS/INDEX.md +89 -0
- package/docs/04-TICKETS/_archive/BOOST-005-micro-tasking.md +67 -0
- package/docs/04-TICKETS/_archive/BOOST-006-validation-loop.md +66 -0
- package/docs/04-TICKETS/_archive/BOOST-007-progressive-pipeline.md +69 -0
- package/docs/04-TICKETS/_archive/BOOST-008-cli-mcp-integration.md +74 -0
- package/docs/AI_CONTEXT.md +16 -0
- package/package.json +3 -2
- package/src/boost/agent-pool.js +442 -0
- package/src/boost/agents/index.js +79 -0
- package/src/boost/cache.js +241 -0
- package/src/boost/context-compressor.js +354 -0
- package/src/boost/fewshot-retriever.js +332 -0
- package/src/boost/hardware-detector.js +486 -0
- package/src/boost/hydrator.js +398 -0
- package/src/boost/index.js +60 -0
- package/src/boost/orchestrator.js +615 -0
- package/src/boost/preamble.js +217 -0
- package/src/boost/profile-registry.js +264 -0
- package/src/boost/self-learn.js +247 -0
- package/src/boost/skeletons/component.skeleton.js +24 -0
- package/src/boost/skeletons/hook.skeleton.js +27 -0
- package/src/boost/skeletons/index.js +67 -0
- package/src/boost/skeletons/page.skeleton.js +22 -0
- package/src/boost/skeletons/service.skeleton.js +20 -0
- package/src/boost/skeletons/store.skeleton.js +18 -0
- package/src/boost/skeletons/type.skeleton.js +11 -0
- package/src/boost/task-dispatcher.js +142 -0
- package/src/boost/validation-loop.js +495 -0
- package/src/cli/commands-boost.js +394 -0
- package/src/mcp-refactor/handlers/boost.js +295 -0
- package/src/mcp-refactor/router.js +19 -0
- package/src/mcp-refactor/tools.js +113 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# BOOST-002 — Context Compression Engine
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-002 |
|
|
8
|
+
| **Título** | Context Compression Engine |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Alta |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-001 |
|
|
13
|
+
| **Archivos** | `src/boost/context-compressor.js` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Motor que comprime el contexto (AGENTS.md, reglas, documentación) a solo las secciones relevantes para la tarea actual. Un modelo small recibe ~20% del contexto original, eliminando secciones irrelevantes.
|
|
18
|
+
|
|
19
|
+
La compresión es adaptativa según el perfil: small comprime 80%, medium 50%, large 0%.
|
|
20
|
+
|
|
21
|
+
## Criterios de Aceptación
|
|
22
|
+
|
|
23
|
+
### CA-1: Compresión por tarea
|
|
24
|
+
- [ ] `compressContext(task, fullContext, profile)` → devuelve contexto comprimido
|
|
25
|
+
- [ ] El task description se usa para hacer keyword matching contra secciones
|
|
26
|
+
- [ ] Solo incluye secciones con score de relevancia > umbral (configurable por perfil)
|
|
27
|
+
|
|
28
|
+
### CA-2: Modos de compresión
|
|
29
|
+
- [ ] **Modo seguro** (default): siempre incluye reglas de enforcement (@limit, @kind, NUNCA)
|
|
30
|
+
- [ ] **Modo agresivo**: solo incluye lo estrictamente relevante a la tarea
|
|
31
|
+
- [ ] **Modo desactivado**: pasa el contexto completo sin modificar
|
|
32
|
+
|
|
33
|
+
### CA-3: Compresión cuantificable
|
|
34
|
+
- [ ] Retorna métricas: `{ originalChars, compressedChars, reductionPercent, sectionsKept, sectionsRemoved }`
|
|
35
|
+
- [ ] Las métricas son accesibles vía `opl boost check`
|
|
36
|
+
|
|
37
|
+
### CA-4: Preservación de estructura
|
|
38
|
+
- [ ] No rompe bloques de código, tablas, o listas
|
|
39
|
+
- [ ] Preserva la sección de NUNCA y ENFORCEMENT siempre (modo seguro)
|
|
40
|
+
- [ ] El output sigue siendo markdown válido
|
|
41
|
+
|
|
42
|
+
### CA-5: Tests
|
|
43
|
+
- [ ] Test con AGENTS.md completo: verify reduction % según perfil
|
|
44
|
+
- [ ] Test que preserve sectiones críticas (ENFORCEMENT, NUNCA)
|
|
45
|
+
- [ ] Test de keyword matching con diferentes task descriptions
|
|
46
|
+
|
|
47
|
+
## Archivos a crear/modificar
|
|
48
|
+
|
|
49
|
+
| Archivo | Acción |
|
|
50
|
+
|---------|--------|
|
|
51
|
+
| `src/boost/context-compressor.js` | ➕ Crear |
|
|
52
|
+
|
|
53
|
+
## Notas técnicas
|
|
54
|
+
|
|
55
|
+
- Implementar como función pura (sin side effects) para testabilidad
|
|
56
|
+
- El matching de secciones se hace por: título de sección (##, ###), palabras clave, y contexto
|
|
57
|
+
- Secciones protegidas: `ENFORCEMENT`, `NUNCA`, `REGLA ABSOLUTA`, `@limit`
|
|
58
|
+
- No necesita leer archivos — recibe el contexto como string
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# BOOST-003 — Template Hydration System
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-003 |
|
|
8
|
+
| **Título** | Template Hydration System |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Alta |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-001 |
|
|
13
|
+
| **Archivos** | `src/boost/hydrator.js`, `src/boost/skeletons/*` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Sistema que proporciona esqueletos de código (skeletons) por @kind (hook, component, page, service, store) donde el modelo solo rellena la lógica de negocio (~10%). OPL se encarga de armar el código final con imports, tipos, anotaciones OPL y exports correctos.
|
|
18
|
+
|
|
19
|
+
Esto reduce drásticamente los errores de estructura típicos de modelos pequeños.
|
|
20
|
+
|
|
21
|
+
## Criterios de Aceptación
|
|
22
|
+
|
|
23
|
+
### CA-1: Skeletons por @kind
|
|
24
|
+
- [ ] Existen skeletons para: `hook`, `component`, `page`, `service`, `store`
|
|
25
|
+
- [ ] Cada skeleton incluye: imports base, estructura OPL (@use, @kind, @limit), tipo/interface, función placeholder, export
|
|
26
|
+
- [ ] Los skeletons respetan los límites de líneas de AGENTS.md (hook:80, component:120, etc.)
|
|
27
|
+
|
|
28
|
+
### CA-2: Hydration
|
|
29
|
+
- [ ] `hydrate(kind, businessLogic)` → devuelve archivo completo con anotaciones
|
|
30
|
+
- [ ] El business logic del modelo se inyecta en el placeholder correcto
|
|
31
|
+
- [ ] Se agregan anotaciones @use con los valores correctos
|
|
32
|
+
- [ ] Se agrega @limit según el @kind
|
|
33
|
+
- [ ] Se agrega @contract (hooks/services) o @props (components) según el tipo
|
|
34
|
+
|
|
35
|
+
### CA-3: Validación post-hydration
|
|
36
|
+
- [ ] El archivo resultante pasa `npx openprompt-lang validate` sin errores
|
|
37
|
+
- [ ] El archivo resultante tiene TypeScript válido
|
|
38
|
+
|
|
39
|
+
### CA-4: CLI generate
|
|
40
|
+
- [ ] `opl boost generate "hook useAuth"` → hydrata un hook
|
|
41
|
+
- [ ] `opl boost generate "component Button" --kind component` → hydrata un componente
|
|
42
|
+
- [ ] Opción `--dry-run` muestra el skeleton sin rellenar
|
|
43
|
+
- [ ] Opción `--kind` para especificar tipo (auto-detecta si se omite)
|
|
44
|
+
|
|
45
|
+
### CA-5: Tests
|
|
46
|
+
- [ ] Test de hydratación para cada @kind
|
|
47
|
+
- [ ] Test que el output pase validate
|
|
48
|
+
- [ ] Test que el output tenga TypeScript válido (si tsc está disponible)
|
|
49
|
+
- [ ] Test con business logic mínimo
|
|
50
|
+
|
|
51
|
+
## Archivos a crear/modificar
|
|
52
|
+
|
|
53
|
+
| Archivo | Acción |
|
|
54
|
+
|---------|--------|
|
|
55
|
+
| `src/boost/hydrator.js` | ➕ Crear |
|
|
56
|
+
| `src/boost/skeletons/hook.skeleton.js` | ➕ Crear |
|
|
57
|
+
| `src/boost/skeletons/component.skeleton.js` | ➕ Crear |
|
|
58
|
+
| `src/boost/skeletons/page.skeleton.js` | ➕ Crear |
|
|
59
|
+
| `src/boost/skeletons/service.skeleton.js` | ➕ Crear |
|
|
60
|
+
| `src/boost/skeletons/store.skeleton.js` | ➕ Crear |
|
|
61
|
+
| `src/boost/skeletons/index.js` | ➕ Crear (export unificado) |
|
|
62
|
+
|
|
63
|
+
## Notas técnicas
|
|
64
|
+
|
|
65
|
+
- Los skeletons son archivos JavaScript/TypeScript válidos con marcadores `{{PLACEHOLDER_LOGIC}}`
|
|
66
|
+
- La hydratación es un simple string replace + wrapper injection
|
|
67
|
+
- Los skeletons deben seguir las convenciones de OPL (named exports, anotaciones primero)
|
|
68
|
+
- Para `component`: incluir estructura cva + cn() como en shadcn/ui
|
|
69
|
+
- Para `hook`: incluir estructura de estado + efecto + retorno tipado
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# BOOST-004 — Few-Shot Example Engine
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-004 |
|
|
8
|
+
| **Título** | Few-Shot Example Engine |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Media |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-001 |
|
|
13
|
+
| **Archivos** | `src/boost/fewshot-retriever.js` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Motor que busca ejemplos relevantes en el knowledge-repo y los injecta en el prompt como few-shot examples antes de que el modelo genere código. Los modelos pequeños mejoran dramáticamente cuando tienen ejemplos concretos del mismo dominio y @kind.
|
|
18
|
+
|
|
19
|
+
## Criterios de Aceptación
|
|
20
|
+
|
|
21
|
+
### CA-1: Búsqueda de ejemplos
|
|
22
|
+
- [ ] `retrieveExamples(kind, domain, query)` → devuelve 2-3 ejemplos relevantes
|
|
23
|
+
- [ ] Busca en templates de OPL (p.ej., hooks existentes en src/)
|
|
24
|
+
- [ ] Busca en knowledge-repo (documentación, ejemplos de código)
|
|
25
|
+
- [ ] Filtra por @kind (solo ejemplos del mismo tipo)
|
|
26
|
+
|
|
27
|
+
### CA-2: Ranking de relevancia
|
|
28
|
+
- [ ] Ordena resultados por: matching de dominio > matching de @kind > frescura (fecha)
|
|
29
|
+
- [ ] Devuelve máximo 3 ejemplos para no saturar el contexto del modelo
|
|
30
|
+
|
|
31
|
+
### CA-3: Inyección en prompt
|
|
32
|
+
- [ ] `buildFewShotPrompt(examples, userPrompt)` → prompt completo con ejemplos antes de la instrucción
|
|
33
|
+
- [ ] Los ejemplos se envuelven en bloques con metadata (archivo, @kind, propósito)
|
|
34
|
+
- [ ] El prompt resultante tiene estructura clara: [instrucción] → [ejemplos] → [tarea]
|
|
35
|
+
|
|
36
|
+
### CA-4: Configuración por perfil
|
|
37
|
+
- [ ] Perfil `small`: siempre busca ejemplos (fewShot: true)
|
|
38
|
+
- [ ] Perfil `medium`: busca ejemplos si hay matching > 70%
|
|
39
|
+
- [ ] Perfil `large`: no busca ejemplos (fewShot: false)
|
|
40
|
+
|
|
41
|
+
### CA-5: Tests
|
|
42
|
+
- [ ] Test de búsqueda con diferentes queries
|
|
43
|
+
- [ ] Test que no retorne más de 3 ejemplos
|
|
44
|
+
- [ ] Test de formato del prompt inyectado
|
|
45
|
+
- [ ] Test con knowledge-repo vacío (debe fallar graceful)
|
|
46
|
+
|
|
47
|
+
## Archivos a crear/modificar
|
|
48
|
+
|
|
49
|
+
| Archivo | Acción |
|
|
50
|
+
|---------|--------|
|
|
51
|
+
| `src/boost/fewshot-retriever.js` | ➕ Crear |
|
|
52
|
+
|
|
53
|
+
## Notas técnicas
|
|
54
|
+
|
|
55
|
+
- La búsqueda en knowledge-repo puede ser básica (grep/búsqueda textual) o usando los embeddings existentes
|
|
56
|
+
- Priorizar búsqueda textual simple para no depender de embeddings
|
|
57
|
+
- Los ejemplos deben ser cortos (máximo 50 líneas cada uno)
|
|
58
|
+
- Incluir metadata de cada ejemplo: tipo, dominio, propósito
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# BOOST-005 — Agent Pool + Ollama Connector
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-005 |
|
|
8
|
+
| **Título** | Agent Pool + Ollama Connector |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Alta |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-001 |
|
|
13
|
+
| **Documento** | `docs/00-ARCHITECTURE/OPL-BOOST-MULTI-AGENT.md` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Infraestructura que permite a OPL llamar a modelos locales vía Ollama. El Agent Pool gestiona una cola de solicitudes, maneja reintentos, timeouts y formatea los prompts según el rol del agente. Es el núcleo que permite el modelo de orquestación interna (Modelo A).
|
|
18
|
+
|
|
19
|
+
## Criterios de Aceptación
|
|
20
|
+
|
|
21
|
+
### CA-1: Conector Ollama
|
|
22
|
+
- [x] `callOllama(prompt, options)` → llama a `http://localhost:11434/api/generate`
|
|
23
|
+
- [x] Soporta: `model`, `temperature`, `maxTokens`, `stream` (false por defecto)
|
|
24
|
+
- [x] Timeout configurable (default: 30s)
|
|
25
|
+
- [x] Manejo de errores: conexión rechazada, timeout, respuesta inválida
|
|
26
|
+
|
|
27
|
+
### CA-2: Pool de agentes
|
|
28
|
+
- [x] `AgentPool` clase que mantiene cola de solicitudes
|
|
29
|
+
- [x] `pool.submit(role, input, profile)` → encola y retorna promesa
|
|
30
|
+
- [x] Modo cola: una solicitud a la vez (FIFO)
|
|
31
|
+
- [x] Modo paralelo: múltiples solicitudes simultáneas (configurable via perfil)
|
|
32
|
+
|
|
33
|
+
### CA-3: Formateo de prompts por rol
|
|
34
|
+
- [x] `buildPrompt(role, input)` → arma el prompt según el rol del agente
|
|
35
|
+
- [x] Roles iniciales: `types`, `state`, `logic`, `cleaner`, `validate`
|
|
36
|
+
- [x] Cada rol tiene: system prompt + template de input + formato de output esperado
|
|
37
|
+
|
|
38
|
+
### CA-4: Detección de Ollama
|
|
39
|
+
- [x] `checkOllama()` → verifica si Ollama está corriendo
|
|
40
|
+
- [x] `listModels()` → lista modelos disponibles en Ollama
|
|
41
|
+
- [x] `selectBestModel(profile)` → selecciona el mejor modelo según perfil
|
|
42
|
+
|
|
43
|
+
### CA-5: Integración con perfil
|
|
44
|
+
- [x] Lee configuración de `profile.agentPool` (mode, modelName, temperature)
|
|
45
|
+
- [x] Si Ollama no está disponible, falla graceful con mensaje claro
|
|
46
|
+
|
|
47
|
+
### CA-6: Tests
|
|
48
|
+
- [ ] Test de formateo de prompts por rol
|
|
49
|
+
- [ ] Test de cola FIFO
|
|
50
|
+
- [ ] Test de timeout y errores
|
|
51
|
+
- [ ] Test de detección de Ollama (mock)
|
|
52
|
+
|
|
53
|
+
## Archivos
|
|
54
|
+
|
|
55
|
+
| Archivo | Acción |
|
|
56
|
+
|---------|--------|
|
|
57
|
+
| `src/boost/agent-pool.js` | ➕ Crear (conector + pool + prompts) |
|
|
58
|
+
| `src/boost/agents/agent-types.js` | ➕ Crear |
|
|
59
|
+
| `src/boost/agents/agent-state.js` | ➕ Crear |
|
|
60
|
+
| `src/boost/agents/agent-logic.js` | ➕ Crear |
|
|
61
|
+
| `src/boost/agents/agent-validate.js` | ➕ Crear |
|
|
62
|
+
| `src/boost/agents/agent-cleaner.js` | ➕ Crear |
|
|
63
|
+
| `src/boost/agents/index.js` | ➕ Crear (export unificado) |
|
|
64
|
+
|
|
65
|
+
## Notas
|
|
66
|
+
|
|
67
|
+
- Node 18+ tiene `fetch` nativo — no necesita dependencias externas
|
|
68
|
+
- La URL de Ollama es configurable via `OLLAMA_HOST` env var (default: `http://localhost:11434`)
|
|
69
|
+
- Los prompts deben ser cortos (< 500 chars) para que quepan en contexto small
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# BOOST-006 — Agentes Especializados (Types, State, Logic, Cleaner, Validate)
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-006 |
|
|
8
|
+
| **Título** | Agentes Especializados |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Alta |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-005 |
|
|
13
|
+
| **Archivos** | `src/boost/agents/index.js`, `src/boost/agent-pool.js` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Registro de agentes especializados que envuelven los prompts del Agent Pool (BOOST-005) con lógica de validación y parseo de output. Cada agente tiene un rol específico en el pipeline de generación de código.
|
|
18
|
+
|
|
19
|
+
## Implementación
|
|
20
|
+
|
|
21
|
+
Los 5 agentes están implementados en `src/boost/agents/index.js`:
|
|
22
|
+
|
|
23
|
+
| Rol | ID | Validación |
|
|
24
|
+
|-----|-----|-----------|
|
|
25
|
+
| **Type Designer** | `types` | Output debe contener `interface` o `type ` |
|
|
26
|
+
| **State Architect** | `state` | Output debe contener `useState`, `useEffect`, o `useReducer` |
|
|
27
|
+
| **Logic Implementer** | `logic` | Output debe tener más de 50 caracteres |
|
|
28
|
+
| **Context Cleaner** | `cleaner` | Output debe ser más corto que el input |
|
|
29
|
+
| **Code Validator** | `validate` | Output debe tener más de 20 caracteres |
|
|
30
|
+
|
|
31
|
+
## Criterios de Aceptación
|
|
32
|
+
|
|
33
|
+
### CA-1: Agentes registrados
|
|
34
|
+
- [x] 5 roles definidos en `AGENTS` registry: types, state, logic, cleaner, validate
|
|
35
|
+
- [x] Cada agente exporta: `role`, `label`, `description`, `buildPrompt`, `validateOutput`, `parseOutput`
|
|
36
|
+
- [x] `getAgent(role)` → obtiene agente por ID
|
|
37
|
+
- [x] `listAgents()` → lista todos los agentes disponibles
|
|
38
|
+
|
|
39
|
+
### CA-2: Validación de output
|
|
40
|
+
- [x] `validateOutput(text)` → verifica que el output tenga sentido para el rol
|
|
41
|
+
- [x] Si un agente produce output inválido, se puede reintentar
|
|
42
|
+
- [x] Validación específica por tipo de agente
|
|
43
|
+
|
|
44
|
+
### CA-3: Tests
|
|
45
|
+
- [ ] Test unitario para cada agente
|
|
46
|
+
- [ ] Test de validación de output
|
|
47
|
+
- [ ] Test que `getAgent` falla con rol desconocido
|
|
48
|
+
|
|
49
|
+
## Notas
|
|
50
|
+
|
|
51
|
+
- Los prompts de sistema viven en `agent-pool.js` (buildPrompt), el registry en `agents/index.js`
|
|
52
|
+
- Cada agente usa `buildPrompt(role, input)` del Agent Pool
|
|
53
|
+
- No hay archivos individuales por agente — todo está en el registry centralizado con agent-pool.js
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# BOOST-007 — Validation Loop + Agent Validate
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-007 |
|
|
8
|
+
| **Título** | Validation Loop + Agent Validate |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Alta |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-006 |
|
|
13
|
+
| **Archivos** | `src/boost/validation-loop.js` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Sistema post-generación que ejecuta validación OPL y TypeScript sobre el código generado, retroalimentando errores específicos al agente `validate` para que los corrija. Los modelos pequeños son significativamente mejores corrigiendo errores específicos que generando código correcto la primera vez.
|
|
18
|
+
|
|
19
|
+
Si tras N reintentos el código sigue fallando, escala hacia abajo la complejidad.
|
|
20
|
+
|
|
21
|
+
## Criterios de Aceptación
|
|
22
|
+
|
|
23
|
+
### CA-1: Validación post-generación
|
|
24
|
+
- [ ] `validate(code, kind)` → ejecuta validación OPL sobre código generado
|
|
25
|
+
- [ ] Detecta: errores de anotaciones, violaciones de @limit, errores de sintaxis
|
|
26
|
+
- [ ] Retorna array de errores con: tipo, mensaje, línea, sugerencia de fix
|
|
27
|
+
|
|
28
|
+
### CA-2: Feedback loop con agente validate
|
|
29
|
+
- [ ] `feedbackLoop(code, errors, profile)` → itera: feedback → agente validate → re-validar
|
|
30
|
+
- [ ] El feedback dice exactamente qué está mal + sugerencia
|
|
31
|
+
- [ ] Número de reintentos según perfil: small=3, medium=2, large=1
|
|
32
|
+
|
|
33
|
+
### CA-3: Escalado de complejidad
|
|
34
|
+
- [ ] Si tras reintentos el código sigue fallando, reduce complejidad
|
|
35
|
+
- [ ] Estrategias: simplificar lógica, usar skeleton más básico, dividir en micro-tareas
|
|
36
|
+
- [ ] `escalateDown(task, attempt)` → versión simplificada de la tarea
|
|
37
|
+
|
|
38
|
+
### CA-4: Reporte de calidad
|
|
39
|
+
- [ ] `generateReport(codeHistory, errors)` → cuántos intentos tomó, qué errores se corrigieron
|
|
40
|
+
|
|
41
|
+
### CA-5: Tests
|
|
42
|
+
- [ ] Test de detección de errores de anotaciones
|
|
43
|
+
- [ ] Test de feedback loop con mock
|
|
44
|
+
- [ ] Test de escalado tras N reintentos fallidos
|
|
45
|
+
|
|
46
|
+
## Archivos a crear
|
|
47
|
+
|
|
48
|
+
| Archivo | Acción |
|
|
49
|
+
|---------|--------|
|
|
50
|
+
| `src/boost/validation-loop.js` | ➕ Crear |
|
|
51
|
+
|
|
52
|
+
## Notas técnicas
|
|
53
|
+
|
|
54
|
+
- La validación OPL se hace invocando `npx openprompt-lang validate` o usando el módulo de validación directamente
|
|
55
|
+
- El feedback loop necesita acceso al modelo vía agent-pool.js para re-generar
|
|
56
|
+
- El escalado de complejidad es determinista (no necesita IA)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# BOOST-008 — Orchestrator (Pipeline Unificado)
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-008 |
|
|
8
|
+
| **Título** | Orchestrator — Pipeline Unificado |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Alta |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-007 |
|
|
13
|
+
| **Archivos** | `src/boost/orchestrator.js`, `src/boost/task-dispatcher.js`, `src/boost/index.js` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Orquestador multi-etapa que coordina todos los componentes Boost en un flujo coherente. Incluye el **Task Dispatcher** que descompone tareas en un DAG de pasos con dependencias, y el **Orchestrator** que ejecuta el pipeline completo.
|
|
18
|
+
|
|
19
|
+
El pipeline completo:
|
|
20
|
+
1. **Profile detect** → carga perfil activo
|
|
21
|
+
2. **Context compress** → reduce contexto según perfil
|
|
22
|
+
3. **Few-shot retrieve** → busca ejemplos relevantes
|
|
23
|
+
4. **Task dispatch** → descompone en DAG
|
|
24
|
+
5. **Agent pool execute** → ejecuta agentes según dependencias
|
|
25
|
+
6. **Hydrate** → ensambla código final (usa BOOST-003)
|
|
26
|
+
7. **Validate loop** → corrige errores (usa BOOST-007)
|
|
27
|
+
8. **Output** → código listo
|
|
28
|
+
|
|
29
|
+
## Criterios de Aceptación
|
|
30
|
+
|
|
31
|
+
### CA-1: Task Dispatcher (DAG)
|
|
32
|
+
- [ ] `plan(task, kind)` → devuelve DAG con nodos y dependencias
|
|
33
|
+
- [ ] Nodos sin dependencias → paralelo; con dependencias → secuencial
|
|
34
|
+
- [ ] DAG serializable a JSON para cache/debug
|
|
35
|
+
- [ ] Soporta: hooks, components, pages, services, stores
|
|
36
|
+
|
|
37
|
+
### CA-2: Orchestrator unificado
|
|
38
|
+
- [ ] `boost(task, options)` → orquesta pipeline completo
|
|
39
|
+
- [ ] `options.profile` → perfil a usar
|
|
40
|
+
- [ ] `options.kind` → tipo de archivo
|
|
41
|
+
- [ ] `options.dryRun` → mostrar plan sin ejecutar
|
|
42
|
+
- [ ] `options.output` → archivo de salida
|
|
43
|
+
- [ ] Retorna: `{ code, metadata, report }`
|
|
44
|
+
|
|
45
|
+
### CA-3: Metadata de ejecución
|
|
46
|
+
- [ ] `{ profile, stages: [{name, duration, result}], totalTime, compressionRatio, validationAttempts }`
|
|
47
|
+
- [ ] Exportable como JSON para diagnóstico
|
|
48
|
+
|
|
49
|
+
### CA-4: Modo dry-run
|
|
50
|
+
- [ ] `boost(task, { dryRun: true })` → muestra DAG, skeletons, ejemplos sin ejecutar
|
|
51
|
+
|
|
52
|
+
### CA-5: Tests
|
|
53
|
+
- [ ] Test de planificación DAG para cada @kind
|
|
54
|
+
- [ ] Test de pipeline completo con mock de modelo
|
|
55
|
+
- [ ] Test de dry-run
|
|
56
|
+
- [ ] Test de metadata de ejecución
|
|
57
|
+
|
|
58
|
+
## Archivos a crear
|
|
59
|
+
|
|
60
|
+
| Archivo | Acción |
|
|
61
|
+
|---------|--------|
|
|
62
|
+
| `src/boost/orchestrator.js` | ➕ Crear (pipeline unificado) |
|
|
63
|
+
| `src/boost/task-dispatcher.js` | ➕ Crear (DAG planner) |
|
|
64
|
+
| `src/boost/index.js` | ➕ Crear (API público del módulo) |
|
|
65
|
+
|
|
66
|
+
## Notas técnicas
|
|
67
|
+
|
|
68
|
+
- El `index.js` es el API público del módulo Boost (`import { boost } from './boost/index.js'`)
|
|
69
|
+
- Cada etapa del pipeline se puede ejecutar independientemente
|
|
70
|
+
- Si una etapa falla, el pipeline devuelve error con estado parcial
|
|
71
|
+
- Los tiempos de cada etapa se registran para diagnóstico
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# BOOST-009 — Cache System
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-009 |
|
|
8
|
+
| **Título** | Cache System para Boost |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Media |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-008 |
|
|
13
|
+
| **Archivos** | `src/boost/cache.js` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Sistema de caché para resultados parciales de agentes Boost. Evita re-ejecutar agentes cuando el mismo input ya fue procesado, ahorrando tiempo y recursos.
|
|
18
|
+
|
|
19
|
+
## Criterios de Aceptación
|
|
20
|
+
|
|
21
|
+
### CA-1: Caché por clave/valor
|
|
22
|
+
- [ ] `cache.get(key)` → obtiene valor cacheado
|
|
23
|
+
- [ ] `cache.set(key, value, ttl)` → guarda valor con TTL
|
|
24
|
+
- [ ] `cache.has(key)` → verifica si existe y no ha expirado
|
|
25
|
+
- [ ] `cache.delete(key)` → elimina entrada
|
|
26
|
+
- [ ] `cache.clear()` → limpia toda la caché
|
|
27
|
+
|
|
28
|
+
### CA-2: Claves de caché predefinidas
|
|
29
|
+
| Clave | TTL | Beneficio |
|
|
30
|
+
|-------|-----|-----------|
|
|
31
|
+
| `compress:{task.kind}` | 1 hora | No re-comprimir contexto |
|
|
32
|
+
| `fewshot:{kind}:{domain}` | 1 día | No re-buscar ejemplos |
|
|
33
|
+
| `agent:{role}:{input_hash}` | 5 min | No re-ejecutar mismo input |
|
|
34
|
+
| `dag:{task_hash}` | 5 min | No re-planificar tarea igual |
|
|
35
|
+
|
|
36
|
+
### CA-3: Persistencia
|
|
37
|
+
- [ ] Caché en disco: `.opencode/boost/cache/`
|
|
38
|
+
- [ ] Limpieza automática al expirar TTL
|
|
39
|
+
- [ ] `opl boost cache clear` → comando para limpiar manualmente
|
|
40
|
+
|
|
41
|
+
### CA-4: Tests
|
|
42
|
+
- [ ] Test de set/get/delete/clear
|
|
43
|
+
- [ ] Test de expiración por TTL
|
|
44
|
+
- [ ] Test de persistencia en disco
|
|
45
|
+
|
|
46
|
+
## Archivos a crear
|
|
47
|
+
|
|
48
|
+
| Archivo | Acción |
|
|
49
|
+
|---------|--------|
|
|
50
|
+
| `src/boost/cache.js` | ➕ Crear |
|
|
51
|
+
|
|
52
|
+
## Notas técnicas
|
|
53
|
+
|
|
54
|
+
- Implementación simple: archivos JSON en `.opencode/boost/cache/`
|
|
55
|
+
- Hash de input: `crypto.createHash('md5').update(input).digest('hex')`
|
|
56
|
+
- No necesita dependencias externas
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# BOOST-010 — CLI + MCP Integration Completa
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-010 |
|
|
8
|
+
| **Título** | CLI + MCP Integration |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Media |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-008, BOOST-009 |
|
|
13
|
+
| **Archivos** | `src/cli/commands-boost.js`, `src/mcp-server.js`, `AGENTS.md` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Integrar el módulo Boost completo con la CLI de OPL (comandos `opl boost *`) y el servidor MCP (tools `OPL_Boost_*`). También actualizar AGENTS.md con la sección Boost Workflow.
|
|
18
|
+
|
|
19
|
+
## Estado Actual
|
|
20
|
+
|
|
21
|
+
✅ **Implementado:**
|
|
22
|
+
- `opl boost check` → diagnóstico del perfil activo
|
|
23
|
+
- `opl boost profile [name]` → ver/forzar perfil (small/medium/large/auto)
|
|
24
|
+
- `opl boost setup` → detección de hardware + configuración interactiva
|
|
25
|
+
|
|
26
|
+
🔴 **Pendiente:**
|
|
27
|
+
- `opl boost generate` → generar código con pipeline completo
|
|
28
|
+
- `opl boost microtask` → descomponer tarea en micro-tareas
|
|
29
|
+
- MCP tools: `OPL_Boost_generate`, `OPL_Boost_compress`, `OPL_Boost_profile`
|
|
30
|
+
- Sección Boost en AGENTS.md
|
|
31
|
+
- Tests de integración
|
|
32
|
+
|
|
33
|
+
## Criterios de Aceptación
|
|
34
|
+
|
|
35
|
+
### CA-1: CLI completa
|
|
36
|
+
- [x] `opl boost check` → diagnóstico
|
|
37
|
+
- [x] `opl boost profile [name]` → ver/forzar perfil
|
|
38
|
+
- [x] `opl boost setup` → detección de hardware
|
|
39
|
+
- [ ] `opl boost generate <desc>` → generar código con pipeline
|
|
40
|
+
- [ ] `opl boost microtask <task>` → descomponer en micro-tareas
|
|
41
|
+
- [ ] Todos los comandos tienen `--help` descriptivo
|
|
42
|
+
|
|
43
|
+
### CA-2: MCP tools Boost
|
|
44
|
+
- [ ] `OPL_Boost_profile` → mostrar perfil actual
|
|
45
|
+
- [ ] `OPL_Boost_compress` → comprimir contexto
|
|
46
|
+
- [ ] `OPL_Boost_generate` → generar código completo
|
|
47
|
+
- [ ] `OPL_Boost_microtask` → descomponer tarea
|
|
48
|
+
- [ ] Tools registradas en `src/mcp-refactor/tools.js`
|
|
49
|
+
|
|
50
|
+
### CA-3: AGENTS.md
|
|
51
|
+
- [ ] Nueva sección Boost con: qué es, perfiles, comandos, workflow
|
|
52
|
+
- [ ] Tabla de perfiles (small/medium/large)
|
|
53
|
+
- [ ] Referencia rápida de comandos
|
|
54
|
+
|
|
55
|
+
### CA-4: Tests
|
|
56
|
+
- [ ] Test de CLI: todos los comandos funcionan
|
|
57
|
+
- [ ] Test de MCP: tools registradas correctamente
|
|
58
|
+
- [ ] Test que todos los comandos tienen `--help`
|
|
59
|
+
- [ ] Test de integración: pipeline CLI → MCP
|
|
60
|
+
|
|
61
|
+
## Archivos a crear/modificar
|
|
62
|
+
|
|
63
|
+
| Archivo | Acción |
|
|
64
|
+
|---------|--------|
|
|
65
|
+
| `src/cli/commands-boost.js` | ✏️ Completar generate y microtask |
|
|
66
|
+
| `src/mcp-refactor/tools.js` | ✏️ Agregar Boost tools |
|
|
67
|
+
| `AGENTS.md` | ✏️ Agregar sección Boost |
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# BOOST-011 — Auto-aprendizaje entre Sesiones
|
|
2
|
+
|
|
3
|
+
## Metadatos
|
|
4
|
+
|
|
5
|
+
| Campo | Valor |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| **ID** | BOOST-011 |
|
|
8
|
+
| **Título** | Auto-aprendizaje entre sesiones |
|
|
9
|
+
| **Épica** | Módulo OPL Boost |
|
|
10
|
+
| **Prioridad** | Baja |
|
|
11
|
+
| **Estado** | ✅ Completado |
|
|
12
|
+
| **Depende de** | BOOST-010 |
|
|
13
|
+
| **Archivos** | `src/boost/self-learn.js` |
|
|
14
|
+
|
|
15
|
+
## Descripción
|
|
16
|
+
|
|
17
|
+
Sistema que registra métricas de cada ejecución Boost (qué perfil, cuántos reintentos, qué errores, cuánto tiempo) y las usa para mejorar automáticamente la configuración para futuras sesiones. Si un perfil consistentemente falla, Boost recomienda cambiar a un perfil más conservador.
|
|
18
|
+
|
|
19
|
+
## Criterios de Aceptación
|
|
20
|
+
|
|
21
|
+
### CA-1: Registro de métricas
|
|
22
|
+
- [ ] Cada ejecución guarda: `{ timestamp, profile, kind, duration, attempts, errors, success }`
|
|
23
|
+
- [ ] Almacenamiento en `.opencode/boost/metrics.json`
|
|
24
|
+
- [ ] Máximo 1000 entradas (rotación automática)
|
|
25
|
+
|
|
26
|
+
### CA-2: Recomendaciones automáticas
|
|
27
|
+
- [ ] Si perfil `large` falla >3 veces seguidas → recomienda bajar a `medium`
|
|
28
|
+
- [ ] Si validación toma >5 intentos → recomienda activar template hydration
|
|
29
|
+
- [ ] Las recomendaciones se muestran en `opl boost check`
|
|
30
|
+
|
|
31
|
+
### CA-3: Integración con profile-registry
|
|
32
|
+
- [ ] `autoProfile()` → ajusta perfil basado en historial
|
|
33
|
+
- [ ] El ajuste se puede aceptar o rechazar
|
|
34
|
+
|
|
35
|
+
### CA-4: Tests
|
|
36
|
+
- [ ] Test de registro de métricas
|
|
37
|
+
- [ ] Test de recomendaciones automáticas
|
|
38
|
+
- [ ] Test de rotación de historial
|
|
39
|
+
|
|
40
|
+
## Archivos a crear
|
|
41
|
+
|
|
42
|
+
| Archivo | Acción |
|
|
43
|
+
|---------|--------|
|
|
44
|
+
| `src/boost/self-learn.js` | ➕ Crear |
|
|
45
|
+
|
|
46
|
+
## Notas técnicas
|
|
47
|
+
|
|
48
|
+
- Baja prioridad — puede esperar a que el resto del módulo esté estable
|
|
49
|
+
- Las métricas se registran desde el orchestrator (BOOST-008)
|
|
50
|
+
- Las recomendaciones son no intrusivas: solo se muestran, no se aplican automáticamente
|