openprompt-lang 1.2.7 → 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/README.md +62 -8
- 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/docs/EMBEDDINGS.md +214 -0
- package/docs/ONBOARDING_WORKFLOW.md +151 -0
- package/docs/OPL_ACADEMIC_ISSUES.md +158 -0
- package/docs/WEB_SCRAPER_PLAN.md +454 -0
- package/package.json +9 -2
- package/scripts/postinstall.js +37 -0
- 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/cli/commands-knowledge.js +1 -0
- package/src/cli/commands-opl.js +79 -1
- package/src/cli/commands-workflow.js +125 -6
- package/src/commands/init-core.js +169 -5
- package/src/commands/knowledge-ops.js +52 -0
- package/src/commands/opl-embeddings.js +556 -0
- package/src/commands/opl-help.js +26 -2
- package/src/commands/opl-search.js +106 -2
- package/src/commands/opl-webscrape.js +390 -0
- package/src/commands/workflow/epic-cli.js +192 -0
- package/src/commands/workflow/select.js +146 -0
- package/src/commands/workflow/sprint-cli.js +174 -0
- package/src/core/webscrape/analyzer.js +481 -0
- package/src/core/webscrape/deep-scraper.js +1027 -0
- package/src/core/workflow/epic-manager.js +845 -0
- package/src/core/workflow/gates.js +180 -1
- package/src/core/workflow/selector.js +707 -0
- package/src/embeddings/chunker.js +450 -0
- package/src/embeddings/embedder.js +431 -0
- package/src/embeddings/index-pipeline.js +320 -0
- package/src/embeddings/vector-store.js +505 -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
package/README.md
CHANGED
|
@@ -30,6 +30,25 @@ Guarda conceptos visuales o técnicos para que la IA los entienda como tú los e
|
|
|
30
30
|
### Repositorio de Conocimiento (Knowledge)
|
|
31
31
|
Almacena, indexa y procesa documentos PDF y fuentes web técnicas. Detecta capítulos automáticamente y los divide en secciones de lectura rápida para que la IA los use. Incluye **33 libros y guías pre-empaquetados** (JavaScript, TypeScript, Rust, React, Node.js, Python, Scrum, accesibilidad, algoritmos, API de pagos, etc.) accesibles sin configuración previa vía MCP (`knowledge_search`, `knowledge_list`, `knowledge_read`, `knowledge_concept`) o CLI (`knowledge search`, `knowledge sync --all`). Genera automáticamente `.openprompt/FRAMEWORK.md` con el manual operativo restrictivo para la IA.
|
|
32
32
|
|
|
33
|
+
### Búsqueda Semántica por Embeddings (Vector Search)
|
|
34
|
+
Reemplaza el mapa semántico manual con vectores numéricos generados por IA local. Divide documentos en chunks semánticos, los convierte en vectores (768d con Ollama o 384d con Transformers.js), y busca por similitud de coseno. Incluye un pipeline completo: chunker (3 estrategias), embedder (Ollama + Transformers.js con auto-fallback), vector store (SQLite + FTS5), y soporte de búsqueda híbrida (FTS5 + reordenamiento semántico). Se integra con `opl search --mode vector` y el indexado automático tras la ingesta de PDFs.
|
|
35
|
+
|
|
36
|
+
**Requisitos:**
|
|
37
|
+
- **Primario**: [Ollama](https://ollama.com) con `ollama pull nomic-embed-text` (recomendado)
|
|
38
|
+
- **Fallback**: `@xenova/transformers` (incluido como dependencia opcional, se activa automáticamente si Ollama no está disponible)
|
|
39
|
+
|
|
40
|
+
**Comandos:**
|
|
41
|
+
```bash
|
|
42
|
+
opl embeddings status # Ver estado del índice vectorial
|
|
43
|
+
opl embeddings index <docId> # Indexar un documento
|
|
44
|
+
opl embeddings remove <docId> # Eliminar embeddings
|
|
45
|
+
opl embeddings config # Ver/configurar proveedor
|
|
46
|
+
opl search "consulta" --mode vector # Búsqueda semántica
|
|
47
|
+
opl search "consulta" --mode hybrid # Híbrido (incluye vectorial)
|
|
48
|
+
opl webscrape <url> --domain frontend # Scrapear web e indexar
|
|
49
|
+
knowledge ingest doc.pdf # Ingesta PDF + auto-embedding
|
|
50
|
+
```
|
|
51
|
+
|
|
33
52
|
### IA Local (Local Setup)
|
|
34
53
|
Configura un entorno de desarrollo completamente local y desconectado. Prepara la integración con modelos locales en Ollama (como Llama 3 o Qwen 2.5 Coder) y la suite de herramientas OpenCode, permitiendo trabajar sin internet ni costos de API, pero manteniendo el 100% de la precisión del framework.
|
|
35
54
|
|
|
@@ -582,6 +601,25 @@ openPrompt-Lang component list --validated
|
|
|
582
601
|
| `openPrompt-Lang knowledge rebuild` | Reconstruye el índice general desde metadatos individuales |
|
|
583
602
|
| `openPrompt-Lang knowledge sync [--all]` | Sincroniza libros de la biblioteca empaquetada al proyecto local |
|
|
584
603
|
| `openPrompt-Lang local-setup` | Configura integración con IA local (Ollama + OpenCode) |
|
|
604
|
+
| `opl workflow select <desc>` | Selecciona workflow óptimo según descripción de la tarea (usar SIEMPRE primero) |
|
|
605
|
+
| `opl workflow delivery` | Inicia desarrollo por tickets (E.3) |
|
|
606
|
+
| `opl workflow close` | Cierra sesión activa y genera reporte (E.4) |
|
|
607
|
+
| `opl epic create --title "..." --desc "..."` | Crea épica con tickets generados automáticamente |
|
|
608
|
+
| `opl epic list` | Lista épicas con métricas de progreso |
|
|
609
|
+
| `opl epic show <id>` | Muestra detalle de épica y sus tickets |
|
|
610
|
+
| `opl epic close <id>` | Cierra épica |
|
|
611
|
+
| `opl sprint create <name> --goal "..."` | Crea sprint con duración configurable |
|
|
612
|
+
| `opl sprint list` | Lista sprints con métricas |
|
|
613
|
+
| `opl sprint plan <id> --capacity N` | Planifica sprint automáticamente desde épicas activas |
|
|
614
|
+
| `opl sprint close <id>` | Cierra sprint |
|
|
615
|
+
| `opl ticket create --title "..." --severity ...` | Crea ticket de bug/tarea |
|
|
616
|
+
| `opl ticket list` | Lista tickets del proyecto |
|
|
617
|
+
| `opl ticket close <id>` | Cierra ticket como fixed |
|
|
618
|
+
| `opl embeddings status` | Ver estado del índice vectorial semántico |
|
|
619
|
+
| `opl embeddings index <docId>` | Indexa un documento en el vector store |
|
|
620
|
+
| `opl embeddings remove <docId>` | Elimina embeddings de un documento |
|
|
621
|
+
| `opl embeddings config` | Ver/configurar proveedor de embeddings |
|
|
622
|
+
| `opl webscrape <url>` | Extrae contenido web y lo indexa en knowledge + embeddings |
|
|
585
623
|
|
|
586
624
|
### Base de Conocimiento Empaquetada
|
|
587
625
|
|
|
@@ -1128,17 +1166,33 @@ El **Work Context** es un sistema integrado de trazabilidad obligatoria que regi
|
|
|
1128
1166
|
| `openPrompt-Lang work-context check` | Verifica consistencia del work-context: valida que `SESSION.json` exista y tenga estructura correcta, detecta sesiones activas olvidadas (>24h), confirma que los planes referenciados existen en disco, valida que `LOG.json` sea un array válido |
|
|
1129
1167
|
| `validate --work-context` | Incluye la verificación de work-context dentro del pipeline de validación estándar |
|
|
1130
1168
|
|
|
1131
|
-
### Flujo de trabajo obligatorio
|
|
1169
|
+
### Flujo de trabajo obligatorio (v1.3.0)
|
|
1132
1170
|
|
|
1133
|
-
La IA debe seguir este ciclo en **cada sesión de trabajo
|
|
1171
|
+
La IA debe seguir este ciclo en **cada sesión de trabajo**. No hay excepciones:
|
|
1134
1172
|
|
|
1135
1173
|
```
|
|
1136
|
-
1.
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1174
|
+
1. → workflow_select → "opl workflow select <descripción>"
|
|
1175
|
+
La IA describe su tarea, el sistema selecciona workflow óptimo
|
|
1176
|
+
2. → create_ticket → "opl ticket create --title ... --severity ..."
|
|
1177
|
+
TODO cambio requiere ticket ANTES de implementar
|
|
1178
|
+
3. → check_gates → workflow_selected ✓, ticket_created ✓, plan_approved ✓
|
|
1179
|
+
4. → work_context_plan → Planificar usando work-context con búsqueda de conocimiento
|
|
1180
|
+
5. → implement → Codificar con anotaciones OPL primero (@kind → @contract → @limit)
|
|
1181
|
+
6. → validate → "opl validate" antes de cerrar
|
|
1182
|
+
7. → docs_updated → Actualizar documentación (OBLIGATORIO antes de cerrar)
|
|
1183
|
+
8. → work_context_close → Cerrar sesión y generar reporte
|
|
1184
|
+
```
|
|
1185
|
+
|
|
1186
|
+
**Reglas inquebrantables:**
|
|
1187
|
+
- **Regla #1**: `workflow select` primero — Sin workflow seleccionado no hay implementación
|
|
1188
|
+
- **Regla #2**: `ticket create` antes de código — Sin ticket no se escribe código
|
|
1189
|
+
- **Regla #3**: `docs_updated` antes de cerrar — Sin documentación actualizada no se cierra sesión
|
|
1190
|
+
|
|
1191
|
+
El sistema de gates (`workflow_selected`, `ticket_created`, `plan_approved`, `docs_updated`)
|
|
1192
|
+
bloquea herramientas automáticamente si no se cumplen los prerrequisitos (configurable en
|
|
1193
|
+
`prompt-lang.json` → `workflow.enforcement`).
|
|
1194
|
+
|
|
1195
|
+
Ver también: `AGENTS.md` para instrucciones detalladas de cada paso.
|
|
1142
1196
|
7. INTEGRATE → actualizar AGENTS.md si toca
|
|
1143
1197
|
8. LEARN + REFERENCES.md → checklist de referencias seguras
|
|
1144
1198
|
9. CLOSE → reporte, métricas finales
|
package/bin/cli.js
CHANGED
|
@@ -21,6 +21,7 @@ import { register as registerOpl } from "../src/cli/commands-opl.js"
|
|
|
21
21
|
import { register as registerMisc } from "../src/cli/commands-misc.js"
|
|
22
22
|
import { register as registerWorkflow } from "../src/cli/commands-workflow.js"
|
|
23
23
|
import { register as registerTeach } from "../src/cli/commands-teach.js"
|
|
24
|
+
import { register as registerBoost } from "../src/cli/commands-boost.js"
|
|
24
25
|
|
|
25
26
|
import { handleUncaughtErrors, EXIT_CODES } from "../src/utils/errors.js"
|
|
26
27
|
|
|
@@ -67,6 +68,7 @@ registerLearning(program)
|
|
|
67
68
|
registerMisc(program)
|
|
68
69
|
registerWorkflow(program)
|
|
69
70
|
registerTeach(program)
|
|
71
|
+
registerBoost(program)
|
|
70
72
|
|
|
71
73
|
try {
|
|
72
74
|
await program.parseAsync(process.argv)
|
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
# OPL Boost — Arquitectura Multi-Agente (MoA)
|
|
2
|
+
|
|
3
|
+
> **Documento de diseño** — Versión borrador para discusión
|
|
4
|
+
> Última actualización: 2026-05-26
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. Concepto Central
|
|
9
|
+
|
|
10
|
+
**Modelos pequeños colaborando pueden superar a uno grande.** Es el principio de **Mixture of Agents (MoA)** validado por Together AI (2024): tres modelos de 7B especializados y coordinados pueden igualar o superar a GPT-4 en tareas específicas de generación de código.
|
|
11
|
+
|
|
12
|
+
La clave está en que **cada modelo solo necesita resolver la parte del problema que cabe en su ventana de contexto**.
|
|
13
|
+
|
|
14
|
+
### Analogía: Fábrica de código
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
[ Modelo Grande ] → Un artesano que lo hace todo, pero caro y escaso
|
|
18
|
+
[ Boost Multi-Agente ] → Una línea de ensamblaje con 5 operarios baratos, cada uno especializado
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
| Aspecto | Modelo grande único | Boost Multi-Agente |
|
|
22
|
+
|---------|-------------------|-------------------|
|
|
23
|
+
| RAM requerida | ~20-40 GB | ~4-12 GB |
|
|
24
|
+
| Velocidad | Secuencial, un paso a la vez | Paralelo, varios pasos simultáneos |
|
|
25
|
+
| Costo operativo | Alto (GPU grande) | Bajo (varias GPUs chicas o una sola con cola) |
|
|
26
|
+
| Especialización | Generalista | Agentes especializados por rol |
|
|
27
|
+
| Respaldo científico | — | MoA (Together AI, 2024) |
|
|
28
|
+
| Degradación | Si falla, todo falla | Si un agente falla, se reasigna |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 2. Arquitectura
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
┌─────────────────────────────────────────────────────────────────────┐
|
|
36
|
+
│ Boost Orchestrator │
|
|
37
|
+
│ (src/boost/index.js + orchestrator.js) │
|
|
38
|
+
│ │
|
|
39
|
+
│ 1. Recibe tarea → "crea hook useAuth" │
|
|
40
|
+
│ 2. Descompone en DAG de pasos │
|
|
41
|
+
│ 3. Asigna agentes según dependencias │
|
|
42
|
+
│ 4. Ejecuta en paralelo o secuencial según DAG │
|
|
43
|
+
│ 5. Recolecta resultados parciales │
|
|
44
|
+
│ 6. Ensambla resultado final │
|
|
45
|
+
│ 7. Pasa por validation loop │
|
|
46
|
+
└──────┬────────────────────────────────────┬──────────────────────────┘
|
|
47
|
+
│ │
|
|
48
|
+
│ Fase 1: Paralela │ Fase 2: Secuencial
|
|
49
|
+
│ (tareas independientes) │ (tareas con dependencias)
|
|
50
|
+
▼ ▼
|
|
51
|
+
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
52
|
+
│ Agent A │ │ Agent B │ │ Agent D │
|
|
53
|
+
│ Tipos │ │ Estado │ │ Lógica │
|
|
54
|
+
│ "Define │ │ "Diseña el │ │ "Implementa │
|
|
55
|
+
│ interfaces"│ │ estado y │ │ la función"│
|
|
56
|
+
└──────┬──────┘ │ efectos" │ └──────┬──────┘
|
|
57
|
+
│ └──────┬──────┘ │
|
|
58
|
+
│ │ │
|
|
59
|
+
└────────┬───────┘ │
|
|
60
|
+
│ │
|
|
61
|
+
▼ ▼
|
|
62
|
+
┌──────────────┐ ┌──────────────┐
|
|
63
|
+
│ Agent C │ │ Agent E │
|
|
64
|
+
│ Props/Contract│ │ Validación │
|
|
65
|
+
│ (paralelo a │ │ (último paso)│
|
|
66
|
+
│ A y B) │ │ │
|
|
67
|
+
└──────────────┘ └──────────────┘
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 2.1 Componentes del Sistema
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
src/boost/
|
|
74
|
+
├── index.js → Punto de entrada (orquestador general)
|
|
75
|
+
├── orchestrator.js → Motor de planificación + scheduling de agentes
|
|
76
|
+
├── agent-pool.js → Pool de agentes: gestión, cola, paralelismo
|
|
77
|
+
├── task-dispatcher.js → Descompone tarea en DAG + asigna
|
|
78
|
+
├── agents/ → Agentes especializados
|
|
79
|
+
│ ├── agent-types.js → Prompt + validator por rol
|
|
80
|
+
│ ├── agent-types.js → Define interfaces de tipos/tipado
|
|
81
|
+
│ ├── agent-state.js → Diseña estado y efectos
|
|
82
|
+
│ ├── agent-logic.js → Implementa lógica de negocio
|
|
83
|
+
│ ├── agent-validate.js → Corre validación + retroalimentación
|
|
84
|
+
│ └── agent-cleaner.js → Comprime/pule contexto (AI Cleaner)
|
|
85
|
+
├── context-cache/ → Contexto limpio cacheado por tipo de tarea
|
|
86
|
+
├── profile-registry.js → ✅ Ya existe (Ticket 1)
|
|
87
|
+
├── context-compressor.js → Capa 1: determinística (Ticket 2)
|
|
88
|
+
├── hydrator.js → Hidratación de skeletons (Ticket 3)
|
|
89
|
+
├── fewshot-retriever.js → Búsqueda de ejemplos (Ticket 4)
|
|
90
|
+
└── validation-loop.js → Feedback loop post-generación (Ticket 6)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 2.2 Pool de Agentes vs Instancias de Modelo
|
|
94
|
+
|
|
95
|
+
El pool de agentes es **lógico**, no necesariamente físico:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
┌──────────────────────────────────┐
|
|
99
|
+
│ Agent Pool │
|
|
100
|
+
│ (gestiona tareas vs instancias) │
|
|
101
|
+
│ │
|
|
102
|
+
│ ┌──────────┐ ┌──────────┐ │
|
|
103
|
+
│ │ Agent A │ │ Agent B │ │ ← Agentes lógicos (roles)
|
|
104
|
+
│ │ (Tipos) │ │ (Estado) │ │
|
|
105
|
+
│ └────┬─────┘ └────┬─────┘ │
|
|
106
|
+
│ │ │ │
|
|
107
|
+
│ ▼ ▼ │
|
|
108
|
+
│ ┌──────────────────────────┐ │
|
|
109
|
+
│ │ Instancia de modelo │ │ ← Física (Ollama, API)
|
|
110
|
+
│ │ deepseek-coder-7b │ │ Se reusa entre agentes
|
|
111
|
+
│ └──────────────────────────┘ │
|
|
112
|
+
└──────────────────────────────────┘
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Un solo modelo físico puede servir múltiples agentes lógicos en serie (no en paralelo real si no hay GPU suficiente):
|
|
116
|
+
|
|
117
|
+
- **Modo paralelo real**: varias instancias del modelo en GPUs diferentes (o misma con batching)
|
|
118
|
+
- **Modo cola**: una sola instancia atiende agentes en secuencia, como si fuera un solo núcleo compartido
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 3. Agentes Especializados
|
|
123
|
+
|
|
124
|
+
Cada agente tiene:
|
|
125
|
+
|
|
126
|
+
| Rol | Nombre | Input | Output | Prompt característico |
|
|
127
|
+
|-----|--------|-------|--------|----------------------|
|
|
128
|
+
| **Tipos** | `agent-types` | Descripción de la tarea | Interfaces, types, DTOs | _"Define solo los tipos. Sin implementación."_ |
|
|
129
|
+
| **Estado** | `agent-state` | Descripción de la tarea + tipos | Estado, hooks, efectos | _"Diseña el estado y efectos. Sin JSX."_ |
|
|
130
|
+
| **Contrato** | `agent-contract` | Descripción de la tarea + tipos | Props, anotaciones @contract | _"Define el contrato del componente."_ |
|
|
131
|
+
| **Lógica** | `agent-logic` | tipos + estado + contrato | Lógica de negocio completa | _"Implementa la función usando tipos y estado ya definidos."_ |
|
|
132
|
+
| **Validación** | `agent-validate` | Código completo | Versión corregida o reporte | _"Este código falló en X línea. Corrígelo."_ |
|
|
133
|
+
| **Cleaner** | `agent-cleaner` | Contexto completo | Contexto comprimido minimal | _"Comprime este contexto a solo lo esencial para generar un hook."_ |
|
|
134
|
+
|
|
135
|
+
**Cada prompt es 3-5 líneas máximo.** Un modelo de 8K procesa esto sin saturarse.
|
|
136
|
+
|
|
137
|
+
### 3.1 Prompt de ejemplo para Agent-Cleaner
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
Eres un compresor de contexto para un asistente de código.
|
|
141
|
+
Recibe estas reglas y devuélvelas en su forma más compacta.
|
|
142
|
+
|
|
143
|
+
Reglas críticas a preservar:
|
|
144
|
+
- @kind limits (hook:80, component:120, page:200)
|
|
145
|
+
- @limit NO es sugerencia, bloquea commit
|
|
146
|
+
- @use() obligatorio al inicio
|
|
147
|
+
- Named exports sobre default exports
|
|
148
|
+
- NUNCA: any types, modificar *.template.*, eliminar @use
|
|
149
|
+
|
|
150
|
+
Tarea actual: generar un hook useDebounce
|
|
151
|
+
Contexto a comprimir:
|
|
152
|
+
[CONTEXTO AQUÍ]
|
|
153
|
+
|
|
154
|
+
Output: solo las reglas relevantes para hooks, en formato minimal.
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 4. Modos de Ejecución
|
|
160
|
+
|
|
161
|
+
### 4.1 Modo Paralelo (múltiples GPUs/instancias)
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
Tiempo: 0s ─────────────────────────────────────►
|
|
165
|
+
|
|
166
|
+
Agent A (Tipos): ████████░░░░░░░░░░░░░░░░░░░░ 2s
|
|
167
|
+
Agent B (Estado): ██████████░░░░░░░░░░░░░░░░░░ 2.5s
|
|
168
|
+
Agent C (Contrato): ██████░░░░░░░░░░░░░░░░░░░░░░ 1.5s
|
|
169
|
+
│ paralelo
|
|
170
|
+
▼
|
|
171
|
+
Agent D (Lógica): ░░░░░░░░░░░████████░░░░░░░░░░ 2s
|
|
172
|
+
│ secuencial
|
|
173
|
+
▼
|
|
174
|
+
Agent E (Validar): ░░░░░░░░░░░░░░░░░░████████░░ 2s
|
|
175
|
+
|
|
176
|
+
Total: ~6.5s (vs ~10s secuencial, vs ~8s un modelo grande)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### 4.2 Modo Cola (una sola instancia de modelo)
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
Agent A → B → C → (paralelo lógico) → D → E
|
|
183
|
+
|
|
184
|
+
Tiempo: ~10s pero con ~4GB RAM en lugar de ~24GB
|
|
185
|
+
Vs un modelo grande: 8s pero necesita 24GB de RAM
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### 4.3 Comparación de costos
|
|
189
|
+
|
|
190
|
+
| Config | RAM | VRAM | Tiempo | Tokens/s | Puede correr en |
|
|
191
|
+
|--------|-----|------|--------|----------|-----------------|
|
|
192
|
+
| 1× Qwen 32B | 24 GB | 20 GB | 8s | ~15 tok/s | RTX 4090, Mac M2 Ultra |
|
|
193
|
+
| 3× DeepSeek 7B (cola) | 12 GB | 8 GB | 10s | ~25 tok/s (compartido) | RTX 3060, Mac M1 Pro |
|
|
194
|
+
| 3× DeepSeek 7B (paralelo) | 12 GB | 24 GB | 6s | ~75 tok/s (3 instancias) | RTX 4090, 2× RTX 3060 |
|
|
195
|
+
| 5× DeepSeek 7B (cola, con cache) | 8 GB | 4 GB | 12s | ~35 tok/s (cuantizado) | Laptop con GPU modesta |
|
|
196
|
+
|
|
197
|
+
La conclusión: **3 modelos chicos en cola en una RTX 3060 dan resultados competitivos vs un modelo grande en RTX 4090**, con un costo de hardware 3-4× menor.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 5. DAG de Tareas (Task Dispatcher)
|
|
202
|
+
|
|
203
|
+
El dispatcher convierte una descripción tipo _"crea hook useAuth"_ en un grafo dirigido:
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"task": "crea hook useAuth con Supabase y Zustand",
|
|
208
|
+
"kind": "hook",
|
|
209
|
+
"dag": {
|
|
210
|
+
"nodes": [
|
|
211
|
+
{ "id": "types", "agent": "agent-types", "deps": [] },
|
|
212
|
+
{ "id": "state", "agent": "agent-state", "deps": [] },
|
|
213
|
+
{ "id": "effects", "agent": "agent-logic", "deps": ["types", "state"] },
|
|
214
|
+
{ "id": "final", "agent": "agent-validate", "deps": ["effects"] }
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Reglas del DAG:
|
|
221
|
+
- **Nodos sin dependencias** → se ejecutan en paralelo
|
|
222
|
+
- **Nodos con dependencias** → esperan a que sus predecesores terminen
|
|
223
|
+
- **Si un nodo falla** → se reintenta (según perfil) o se reasigna a otro agente
|
|
224
|
+
- **El DAG es serializable** → se puede cachear y re-ejecutar
|
|
225
|
+
|
|
226
|
+
El DAG se puede representar como Mermaid para visualización:
|
|
227
|
+
|
|
228
|
+
```mermaid
|
|
229
|
+
graph TD
|
|
230
|
+
Task["hook useAuth"] --> Types[Agent: Tipos]
|
|
231
|
+
Task --> State[Agent: Estado]
|
|
232
|
+
Types --> Logic[Agent: Lógica]
|
|
233
|
+
State --> Logic
|
|
234
|
+
Logic --> Validate[Agent: Validación]
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 6. Integración con el Pipeline Existente
|
|
240
|
+
|
|
241
|
+
Boost no reemplaza el flujo actual de OPL — lo envuelve:
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
Flujo normal OPL:
|
|
245
|
+
workflow select → ticket → plan → implement → validate → close
|
|
246
|
+
|
|
247
|
+
Con Boost Multi-Agente:
|
|
248
|
+
boost generate "hook useAuth"
|
|
249
|
+
│
|
|
250
|
+
├── 1. Profile Registry → detecta small (activa Boost)
|
|
251
|
+
├── 2. Context Compressor → reduce AGENTS.md
|
|
252
|
+
├── 3. FewShot Retriever → busca ejemplos
|
|
253
|
+
├── 4. Task Dispatcher → DAG de agentes
|
|
254
|
+
├── 5. Agent Pool → ejecuta DAG (paralelo/cola)
|
|
255
|
+
├── 6. Hydrator → ensambla código final con anotaciones
|
|
256
|
+
├── 7. Validation Loop → corrige errores
|
|
257
|
+
└── 8. Output → archivo listo para validar
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
El `opl boost generate` se convierte en el **punto de entrada único** que dispara todo el pipeline multi-agente. Funciona igual para MCP vía `OPL_Boost_microtask`.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## 7. Modelo de Datos
|
|
265
|
+
|
|
266
|
+
### Profile → define capacidades
|
|
267
|
+
```json
|
|
268
|
+
{
|
|
269
|
+
"name": "small",
|
|
270
|
+
"agentPool": {
|
|
271
|
+
"mode": "queue", // "parallel" | "queue"
|
|
272
|
+
"maxConcurrency": 3, // paralelo máximo
|
|
273
|
+
"modelName": "deepseek-coder-7b",
|
|
274
|
+
"modelProvider": "ollama",
|
|
275
|
+
"modelEndpoint": "http://localhost:11434",
|
|
276
|
+
"contextWindow": 8000,
|
|
277
|
+
"temperature": 0.2,
|
|
278
|
+
"cacheEnabled": true
|
|
279
|
+
},
|
|
280
|
+
"features": {
|
|
281
|
+
"compress": true,
|
|
282
|
+
"fewShot": true,
|
|
283
|
+
"agents": true,
|
|
284
|
+
"hydration": true,
|
|
285
|
+
"validation": true
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Agent → define un worker
|
|
291
|
+
```json
|
|
292
|
+
{
|
|
293
|
+
"id": "agent-types",
|
|
294
|
+
"role": "types",
|
|
295
|
+
"modelName": "deepseek-coder-7b",
|
|
296
|
+
"systemPrompt": "Define solo tipos e interfaces. Sin implementación.",
|
|
297
|
+
"inputSchema": { "description": "string" },
|
|
298
|
+
"outputSchema": { "types": "string", "interfaces": "string" },
|
|
299
|
+
"timeoutMs": 30000,
|
|
300
|
+
"retries": 2,
|
|
301
|
+
"cacheTtl": 3600
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Task → instancia de trabajo
|
|
306
|
+
```json
|
|
307
|
+
{
|
|
308
|
+
"id": "task_001",
|
|
309
|
+
"description": "crea hook useAuth con Supabase",
|
|
310
|
+
"kind": "hook",
|
|
311
|
+
"dag": { "nodes": [...] },
|
|
312
|
+
"profile": "small",
|
|
313
|
+
"status": "running",
|
|
314
|
+
"startedAt": "2026-05-26T14:00:00Z",
|
|
315
|
+
"agents": {
|
|
316
|
+
"agent-types": { "status": "completed", "output": "..." },
|
|
317
|
+
"agent-state": { "status": "running", "output": null },
|
|
318
|
+
"agent-logic": { "status": "pending", "output": null },
|
|
319
|
+
"agent-validate":{ "status": "pending", "output": null }
|
|
320
|
+
},
|
|
321
|
+
"metadata": {
|
|
322
|
+
"totalTime": 0,
|
|
323
|
+
"tokenCount": 0,
|
|
324
|
+
"retries": 0
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## 8. Cache Inteligente
|
|
332
|
+
|
|
333
|
+
Resultados de agentes se cachean para reúso:
|
|
334
|
+
|
|
335
|
+
| Clave de caché | Se cachea | TTL | Beneficio |
|
|
336
|
+
|---------------|-----------|-----|-----------|
|
|
337
|
+
| `compress:{task.kind}` | Contexto comprimido | 1 hora | No re-comprimir por cada generate |
|
|
338
|
+
| `fewshot:{kind}:{domain}` | Ejemplos encontrados | 1 día | No re-buscar en knowledge-repo |
|
|
339
|
+
| `agent:{role}:{input_hash}` | Output del agente | 5 min | No re-ejecutar idéntico input |
|
|
340
|
+
| `dag:{task_hash}` | Plan de tareas | 5 min | No re-planificar tarea idéntica |
|
|
341
|
+
|
|
342
|
+
La caché vive en `.opencode/boost/cache/` y se limpia automáticamente.
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## 9. Comparación: Plan Original vs Multi-Agente
|
|
347
|
+
|
|
348
|
+
| Aspecto | Plan original (micro-tasking) | Multi-agente |
|
|
349
|
+
|---------|------------------------------|--------------|
|
|
350
|
+
| Modelo subyacente | 1 modelo principal | Múltiples modelos pequeños |
|
|
351
|
+
| Paralelismo | Solo secuencial | Paralelo + secuencial |
|
|
352
|
+
| Especialización | El mismo modelo hace todo | Agentes especializados |
|
|
353
|
+
| Tolerancia a fallos | Si falla, reinicia | Reasigna agente |
|
|
354
|
+
| Cache | No | Sí, por agente |
|
|
355
|
+
| Costo hardware | GPU grande (24GB+) | GPU modesta (8-12GB) |
|
|
356
|
+
| DAG | Lineal | Grafo dirigido con dependencias |
|
|
357
|
+
| AI Cleaner | No | Sí (agente dedicado) |
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## 10. Tickets Actualizados (versión Multi-Agente)
|
|
362
|
+
|
|
363
|
+
| ID | Título | Depende de |
|
|
364
|
+
|----|--------|------------|
|
|
365
|
+
| BOOST-001 | ✅ Profile Registry + Config Base | — |
|
|
366
|
+
| BOOST-002 | Context Compressor (Capa 1 + AI Cleaner) | BOOST-001 |
|
|
367
|
+
| BOOST-003 | Template Hydration System | BOOST-001 |
|
|
368
|
+
| BOOST-004 | Few-Shot Engine | BOOST-001 |
|
|
369
|
+
| BOOST-005 | Agent Pool + Task Dispatcher | BOOST-001 |
|
|
370
|
+
| BOOST-006 | Agentes Especializados (types, state, logic) | BOOST-005 |
|
|
371
|
+
| BOOST-007 | Validation Loop + Agent Validate | BOOST-006 |
|
|
372
|
+
| BOOST-008 | Orchestrator (index.js + progressive pipeline) | BOOST-007 |
|
|
373
|
+
| BOOST-009 | Cache System | BOOST-008 |
|
|
374
|
+
| BOOST-010 | CLI + MCP Integration | BOOST-009 |
|
|
375
|
+
| BOOST-011 | Auto-aprendizaje: feedback entre sesiones | BOOST-010 |
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## 11. Preguntas Abiertas para Discutir
|
|
380
|
+
|
|
381
|
+
1. **¿Paralelismo real o cola?** — ¿Vale la pena tener múltiples instancias del modelo, o basta una en cola (más lento pero menos RAM)?
|
|
382
|
+
|
|
383
|
+
2. **¿Cuántos agentes simultáneos?** — 3 en paralelo? 5? ¿El usuario configura?
|
|
384
|
+
|
|
385
|
+
3. **¿Soporte para diferentes providers?** — Solo Ollama? ¿O también OpenAI API, Anthropic? Podríamos mezclar: un agente barato (local) + otro caro (API) solo para validación.
|
|
386
|
+
|
|
387
|
+
4. **¿Cache por sesión o persistente?** — TTL de 1 hora parece razonable, pero ¿el usuario puede limpiar manualmente?
|
|
388
|
+
|
|
389
|
+
5. **¿Cuándo activar Boost automáticamente?** — ¿Solo cuando el perfil es "small"? ¿O también como opción voluntaria en "medium"?
|
|
390
|
+
|
|
391
|
+
6. **¿El AI Cleaner debe ser obligatorio?** — ¿O el usuario decide si quiere usar un modelo para comprimir contexto (más preciso) o la capa determinística (más rápido)?
|
|
392
|
+
|
|
393
|
+
7. **¿Cómo exponer el DAG al usuario?** — Un `opl boost microtask --dag` que muestre el grafo antes de ejecutar, para que el usuario entienda qué va a pasar.
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## 12. Recursos Relacionados
|
|
398
|
+
|
|
399
|
+
- **Paper**: Mixture-of-Agents Enhances Large Language Model Capabilities (Together AI, 2024)
|
|
400
|
+
- **Tecnología base**: Ollama (`ollama run deepseek-coder-7b`)
|
|
401
|
+
- **Proyecto OPL existente**: `src/boost/` (en construcción), `src/cli/commands-boost.js`
|
|
402
|
+
- **Tickets activos**: `docs/04-TICKETS/INDEX.md`
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
*Este documento es un diseño vivo. Se actualiza a medida que evoluciona el módulo Boost.*
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# AGENTS.template.md — Plantilla Universal para Proyectos
|
|
2
|
+
|
|
3
|
+
> **Versión:** 1.0
|
|
4
|
+
> **Uso:** La IA debe ejecutar el Protocolo de Inicialización al detectar un proyecto sin AGENTS.md o con AGENTS.md incompleto.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Protocolo de Inicialización — EJECUTAR AUTOMÁTICAMENTE
|
|
9
|
+
|
|
10
|
+
Cuando la IA detecte un proyecto NUEVO o un proyecto EXISTENTE sin AGENTS.md completo, DEBE ejecutar los siguientes pasos EN ORDEN:
|
|
11
|
+
|
|
12
|
+
### Paso 1: Detectar el stack del proyecto
|
|
13
|
+
```
|
|
14
|
+
Leer package.json:
|
|
15
|
+
- Buscar en dependencies/devDependencies: react, vue, angular, next, svelte, etc.
|
|
16
|
+
- Buscar runtime: node, deno, bun
|
|
17
|
+
- Buscar DB: supabase, firebase, prisma, mongoose, etc.
|
|
18
|
+
- Buscar CSS: tailwind, styled-components, emotion, etc.
|
|
19
|
+
- Buscar lenguaje: typescript (tsconfig.json), javascript
|
|
20
|
+
- Buscar plataforma: ionic, capacitor, tauri, electron, etc.
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Paso 2: Inicializar openPrompt-Lang
|
|
24
|
+
```
|
|
25
|
+
ejecutar: opl init → Crea prompt-lang.json y estructura base docs/
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Paso 3: Generar AGENTS.md con el stack detectado
|
|
29
|
+
```
|
|
30
|
+
Copiar ESTE archivo como AGENTS.md en la raíz del proyecto.
|
|
31
|
+
Reemplazar "## Stack" con las tecnologías detectadas.
|
|
32
|
+
Reemplazar "## Perfil" según nivel (senior por defecto).
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Paso 4: Detectar archivos fuente sin anotaciones
|
|
36
|
+
```
|
|
37
|
+
ejecutar: npx openprompt-lang validate
|
|
38
|
+
Archivos que DEBEN tener @use: service, hook, page, context, component
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Paso 5: Verificar cobertura
|
|
42
|
+
```
|
|
43
|
+
Calcular: (archivos con @use / archivos que deben tener @use) * 100
|
|
44
|
+
Si cobertura < 80% → seguir agregando anotaciones
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Paso 6: Verificar estado del proyecto
|
|
48
|
+
```
|
|
49
|
+
ejecutar: npx tsc --noEmit → 0 errores
|
|
50
|
+
ejecutar: npx openprompt-lang validate → 0 errores
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Stack
|
|
56
|
+
<!-- COMPLETAR con tecnologías del proyecto -->
|
|
57
|
+
- react
|
|
58
|
+
- tailwind
|
|
59
|
+
- typescript
|
|
60
|
+
|
|
61
|
+
## Convenciones
|
|
62
|
+
- Anotaciones OPL con @kind, @contract, @limit
|
|
63
|
+
- NO usar any
|
|
64
|
+
- NO superar límites de líneas sin refactorizar
|
|
65
|
+
- TODO list para tareas >3 pasos
|
|
66
|
+
|
|
67
|
+
## Enforcement — REGLAS QUE SE CUMPLEN O SE BLOQUEA
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
PRE-COMMIT HOOK ACTIVO:
|
|
71
|
+
npx openprompt-lang validate --strict + tsc --noEmit
|
|
72
|
+
Bloquea commits si hay violaciones @limit
|
|
73
|
+
|
|
74
|
+
REGLA FUNDAMENTAL:
|
|
75
|
+
@limit(lines: N) NO es una sugerencia — es un LÍMITE que bloquea el commit.
|
|
76
|
+
Si un archivo supera su @limit, refactorizar ANTES de committear.
|
|
77
|
+
|
|
78
|
+
LECCIÓN APRENDIDA (RULES-001):
|
|
79
|
+
Las reglas sin enforcement son aspiraciones.
|
|
80
|
+
Las reglas CON enforcement son restricciones. Este proyecto usa enforcement.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Perfil
|
|
84
|
+
<!-- COMPLETAR: senior, mid, junior -->
|
|
85
|
+
senior
|
|
86
|
+
|
|
87
|
+
## Referencias
|
|
88
|
+
- Framework: openPrompt-Lang
|
|
89
|
+
- Tickets OPL: `opl ticket list`
|