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.
Files changed (79) hide show
  1. package/README.md +62 -8
  2. package/bin/cli.js +2 -0
  3. package/docs/00-ARCHITECTURE/OPL-BOOST-MULTI-AGENT.md +406 -0
  4. package/docs/02-STANDARDS/AGENTS.template.md +89 -0
  5. package/docs/02-STANDARDS/ticket-driven-development.md +99 -0
  6. package/docs/04-TICKETS/BOOST-001-profile-registry.md +66 -0
  7. package/docs/04-TICKETS/BOOST-002-context-compression.md +58 -0
  8. package/docs/04-TICKETS/BOOST-003-template-hydration.md +69 -0
  9. package/docs/04-TICKETS/BOOST-004-fewshot-engine.md +58 -0
  10. package/docs/04-TICKETS/BOOST-005-agent-pool.md +69 -0
  11. package/docs/04-TICKETS/BOOST-006-specialized-agents.md +53 -0
  12. package/docs/04-TICKETS/BOOST-007-validation-loop.md +56 -0
  13. package/docs/04-TICKETS/BOOST-008-orchestrator.md +71 -0
  14. package/docs/04-TICKETS/BOOST-009-cache-system.md +56 -0
  15. package/docs/04-TICKETS/BOOST-010-cli-mcp.md +67 -0
  16. package/docs/04-TICKETS/BOOST-011-self-learning.md +50 -0
  17. package/docs/04-TICKETS/BOOST-012-prompt-preamble.md +109 -0
  18. package/docs/04-TICKETS/BOOST-013-hydrator-duplicate-code.md +132 -0
  19. package/docs/04-TICKETS/BOOST-014-multiagent-missing-parts.md +87 -0
  20. package/docs/04-TICKETS/BOOST-015-skeleton-type-missing.md +76 -0
  21. package/docs/04-TICKETS/BOOST-016-output-path-duplicate.md +68 -0
  22. package/docs/04-TICKETS/INDEX.md +89 -0
  23. package/docs/04-TICKETS/_archive/BOOST-005-micro-tasking.md +67 -0
  24. package/docs/04-TICKETS/_archive/BOOST-006-validation-loop.md +66 -0
  25. package/docs/04-TICKETS/_archive/BOOST-007-progressive-pipeline.md +69 -0
  26. package/docs/04-TICKETS/_archive/BOOST-008-cli-mcp-integration.md +74 -0
  27. package/docs/AI_CONTEXT.md +16 -0
  28. package/docs/EMBEDDINGS.md +214 -0
  29. package/docs/ONBOARDING_WORKFLOW.md +151 -0
  30. package/docs/OPL_ACADEMIC_ISSUES.md +158 -0
  31. package/docs/WEB_SCRAPER_PLAN.md +454 -0
  32. package/package.json +9 -2
  33. package/scripts/postinstall.js +37 -0
  34. package/src/boost/agent-pool.js +442 -0
  35. package/src/boost/agents/index.js +79 -0
  36. package/src/boost/cache.js +241 -0
  37. package/src/boost/context-compressor.js +354 -0
  38. package/src/boost/fewshot-retriever.js +332 -0
  39. package/src/boost/hardware-detector.js +486 -0
  40. package/src/boost/hydrator.js +398 -0
  41. package/src/boost/index.js +60 -0
  42. package/src/boost/orchestrator.js +615 -0
  43. package/src/boost/preamble.js +217 -0
  44. package/src/boost/profile-registry.js +264 -0
  45. package/src/boost/self-learn.js +247 -0
  46. package/src/boost/skeletons/component.skeleton.js +24 -0
  47. package/src/boost/skeletons/hook.skeleton.js +27 -0
  48. package/src/boost/skeletons/index.js +67 -0
  49. package/src/boost/skeletons/page.skeleton.js +22 -0
  50. package/src/boost/skeletons/service.skeleton.js +20 -0
  51. package/src/boost/skeletons/store.skeleton.js +18 -0
  52. package/src/boost/skeletons/type.skeleton.js +11 -0
  53. package/src/boost/task-dispatcher.js +142 -0
  54. package/src/boost/validation-loop.js +495 -0
  55. package/src/cli/commands-boost.js +394 -0
  56. package/src/cli/commands-knowledge.js +1 -0
  57. package/src/cli/commands-opl.js +79 -1
  58. package/src/cli/commands-workflow.js +125 -6
  59. package/src/commands/init-core.js +169 -5
  60. package/src/commands/knowledge-ops.js +52 -0
  61. package/src/commands/opl-embeddings.js +556 -0
  62. package/src/commands/opl-help.js +26 -2
  63. package/src/commands/opl-search.js +106 -2
  64. package/src/commands/opl-webscrape.js +390 -0
  65. package/src/commands/workflow/epic-cli.js +192 -0
  66. package/src/commands/workflow/select.js +146 -0
  67. package/src/commands/workflow/sprint-cli.js +174 -0
  68. package/src/core/webscrape/analyzer.js +481 -0
  69. package/src/core/webscrape/deep-scraper.js +1027 -0
  70. package/src/core/workflow/epic-manager.js +845 -0
  71. package/src/core/workflow/gates.js +180 -1
  72. package/src/core/workflow/selector.js +707 -0
  73. package/src/embeddings/chunker.js +450 -0
  74. package/src/embeddings/embedder.js +431 -0
  75. package/src/embeddings/index-pipeline.js +320 -0
  76. package/src/embeddings/vector-store.js +505 -0
  77. package/src/mcp-refactor/handlers/boost.js +295 -0
  78. package/src/mcp-refactor/router.js +19 -0
  79. package/src/mcp-refactor/tools.js +113 -0
@@ -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
@@ -0,0 +1,109 @@
1
+ # BOOST-012 — Universal Workflow Preamble (System Prompt Injection)
2
+
3
+ > **Nota:** Este ticket surge de una idea durante la sesión de implementación de Boost.
4
+ > La idea es independiente del módulo Boost pero se integra naturalmente con él.
5
+
6
+ ## Metadatos
7
+
8
+ | Campo | Valor |
9
+ |-------|-------|
10
+ | **ID** | BOOST-012 |
11
+ | **Título** | Universal Workflow Preamble — System Prompt Injector |
12
+ | **Épica** | OPL Workflow Enforcement |
13
+ | **Prioridad** | Media |
14
+ | **Estado** | ✅ Completado |
15
+ | **Depende de** | — |
16
+ | **Archivos** | `src/workflow/preamble.js`, `prompt-lang.json`, `AGENTS.md` |
17
+
18
+ ## Descripción
19
+
20
+ Crear un mecanismo que inyecte un **mensaje de sistema** al inicio de cada interacción con la IA, forzando que siga el workflow OPL sin depender de MCP tools.
21
+
22
+ El problema: actualmente el enforcement MCP solo funciona cuando la IA se conecta mediante el servidor MCP (OpenCode, Cursor). Si alguien usa la IA desde otro cliente (o si MCP no está disponible), no hay garantía de que siga el workflow.
23
+
24
+ La solución: un **preamble universal** que se antepone a cada solicitud del usuario, instruyendo a la IA sobre el workflow obligatorio.
25
+
26
+ ## Idea Central
27
+
28
+ ```
29
+ [Solicitud del usuario]
30
+
31
+ [OPL Preamble Injector] ← se antepone automáticamente
32
+ ├── "Debes seguir este workflow obligatorio antes de responder..."
33
+ ├── "1. workflow_select → 2. ticket_create → 3. check_gates → ..."
34
+ ├── "Reglas: no implementar sin ticket, no cerrar sin docs..."
35
+ └── [Solicitud original del usuario]
36
+
37
+ [IA recibe el mensaje completo]
38
+ ```
39
+
40
+ ## Criterios de Aceptación
41
+
42
+ ### CA-1: Preamble configurable
43
+ - [ ] Archivo `src/workflow/preamble.js` con el mensaje de sistema
44
+ - [ ] El preamble se puede personalizar en `prompt-lang.json` → `preamble.enabled`, `preamble.text`
45
+ - [ ] Por defecto incluye: workflow steps, reglas críticas, prohibiciones
46
+
47
+ ### CA-2: Modos de inyección
48
+ - [ ] **Modo automático**: se inyecta en cada solicitud hecha a través de OPL
49
+ - [ ] **Modo archivo**: se escribe en un archivo que el AI client lee (ej. `.opencode/preamble.md`)
50
+ - [ ] **Modo hook**: se integra con el sistema de templates para que todo `ai-gen` lo incluya
51
+
52
+ ### CA-3: Contenido del preamble
53
+ - [ ] Flujo obligatorio: workflow select → ticket create → check gates → plan → implement → validate → docs → close
54
+ - [ ] Prohibiciones: no implementar sin ticket, no cerrar sin docs, no mutar sin analyze_blast_radius
55
+ - [ ] Referencia a comandos OPL útiles
56
+ - [ ] Máximo 300 palabras (no satura el contexto)
57
+ - [ ] Debe ser markdown válido
58
+
59
+ ### CA-4: Integración con MCP
60
+ - [ ] El preamble se envía como `systemPrompt` en el MCP server
61
+ - [ ] Se incluye en `OPL_analyze_project` como parte del output
62
+ - [ ] Se puede consultar con `OPL_workflow_preamble`
63
+
64
+ ### CA-5: Tests
65
+ - [ ] Test que el preamble no excede 300 palabras
66
+ - [ ] Test que las reglas críticas están presentes
67
+ - [ ] Test de inyección en prompt
68
+
69
+ ## Archivos a crear/modificar
70
+
71
+ | Archivo | Acción |
72
+ |---------|--------|
73
+ | `src/workflow/preamble.js` | ➕ Crear |
74
+ | `prompt-lang.json` | ✏️ Modificar (sección preamble) |
75
+ | `AGENTS.md` | ✏️ Modificar (referencia al preamble) |
76
+
77
+ ## Ejemplo de Preamble (borrador)
78
+
79
+ ```markdown
80
+ ## ⚠️ OPL Workflow Obligatorio
81
+
82
+ Antes de implementar cualquier cosa, DEBES seguir este orden:
83
+
84
+ 1. `opl workflow select <descripción>` — Seleccionar workflow
85
+ 2. `opl ticket create` — Crear ticket (sin ticket no hay código)
86
+ 3. `opl check gates` — Verificar prerrequisitos
87
+ 4. `work_context_plan` — Planificar (features/refactors)
88
+ 5. Implementar con anotaciones OPL primero
89
+ 6. `npx openprompt-lang validate` — Validar
90
+ 7. Actualizar documentación
91
+ 8. `work_context_close` — Cerrar sesión
92
+
93
+ ### ⛔ Prohibido
94
+ - Implementar sin ticket
95
+ - Cerrar sin documentación
96
+ - Mutar código sin analyze_blast_radius
97
+ - Modificar *.template.* archivos
98
+ ```
99
+
100
+ ## Notas técnicas
101
+
102
+ - No debe ser un archivo más que la IA tenga que leer — debe ser INYECTADO activamente
103
+ - Se puede implementar como un wrapper que envuelve la solicitud del usuario
104
+ - Para OpenCode: se puede configurar como `systemPrompt` en `opencode.json`
105
+ - El preamble idealmente se regenera dinámicamente según el estado actual del proyecto (tickets abiertos, perfil activo, etc.)
106
+
107
+ ---
108
+
109
+ *Idea original: durante sesión de implementación de OPL Boost, mayo 2026*
@@ -0,0 +1,132 @@
1
+ # BOOST-013 — Hydrator duplica código generado por LLM
2
+
3
+ ## Metadatos
4
+
5
+ | Campo | Valor |
6
+ |-------|-------|
7
+ | **ID** | BOOST-013 |
8
+ | **Título** | Hydrator duplica código cuando LLM genera output sin @kind |
9
+ | **Épica** | Módulo OPL Boost |
10
+ | **Prioridad** | Alta |
11
+ | **Severidad** | Bug |
12
+ | **Estado** | ✅ Resuelto |
13
+ | **Archivos** | `src/boost/orchestrator.js`, `src/boost/hydrator.js` |
14
+
15
+ ## Descripción
16
+
17
+ Cuando el LLM (Ollama) genera código completo que **no contiene** `@kind()`, el hydrator lo envuelve dentro de un skeleton template, resultando en código duplicado. El archivo final contiene:
18
+
19
+ 1. El skeleton template con placeholders sin reemplazar
20
+ 2. El código crudo del LLM dentro del placeholder `PLACEHOLDER_LOGIC`
21
+ 3. Una función `Generated()` que envuelve el código nuevamente
22
+
23
+ ### Ejemplo del output duplicado
24
+
25
+ ```typescript
26
+ // Skeleton template for @kind(hook)
27
+ // Markers: , , , ```typescript
28
+ import { useState } from 'react'; // <-- código del LLM empieza
29
+
30
+ type CartItem = { ... };
31
+ // ... 58 líneas de código funcional ...
32
+
33
+ export default useCart; // <-- código del LLM termina
34
+ ```, default // <-- markers del skeleton
35
+ // @use(kind, contract, limit)
36
+ // @kind(hook)
37
+ // @contract(in: unknown -> out: unknown @error: Error)
38
+
39
+ export function Generated() { // <-- wrapper del skeleton
40
+ ```typescript // <-- marker literal
41
+ import { useState } from 'react'; // <-- código del LLM DUPLICADO
42
+ // ... mismo código重复 ...
43
+ ```
44
+ }
45
+ export default Generated // <-- export del skeleton
46
+ ```
47
+
48
+ ## Causa Raíz
49
+
50
+ En `orchestrator.js`, línea 260-292 (`stageHydrate`):
51
+
52
+ ```javascript
53
+ function stageHydrate(kind, code, profile) {
54
+ if (/@kind\(/.test(code)) {
55
+ return { ... code, hydrated: false } // ✅ Si ya tiene @kind, pasa directo
56
+ }
57
+
58
+ // ❌ Si no tiene @kind, intenta hidratar
59
+ const hydrated = hydrate(kind, {
60
+ imports: "",
61
+ types: "",
62
+ logic: code, // <-- Todo el código del LLM va como "logic"
63
+ name: "Generated",
64
+ ...
65
+ })
66
+ }
67
+ ```
68
+
69
+ El hydrator interpola `logic` dentro del skeleton, pero como el LLM ya generó código completo (imports, types, exports), el resultado es un archivo con el código del LLM **más** el skeleton wrapper.
70
+
71
+ ## Solución Propuesta
72
+
73
+ ### Opción A: Smart detection (recomendada)
74
+ Detectar si el código del LLM ya es un archivo completo (tiene imports y exports) y en ese caso:
75
+ 1. Agregar anotaciones OPL al inicio del archivo
76
+ 2. NO envolverlo en skeleton
77
+
78
+ ```javascript
79
+ function stageHydrate(kind, code, profile) {
80
+ if (/@kind\(/.test(code)) {
81
+ return { code, hydrated: false }
82
+ }
83
+
84
+ // NEW: Detectar código completo del LLM
85
+ const hasImports = /^import\s/m.test(code)
86
+ const hasExport = /^export\s/m.test(code)
87
+
88
+ if (hasImports && hasExport) {
89
+ // Código completo del LLM — solo agregar anotaciones
90
+ const annotations = generateOPLAnnotations(kind, code)
91
+ return {
92
+ code: annotations + "\n\n" + code,
93
+ hydrated: false,
94
+ reason: "llm-complete-injection"
95
+ }
96
+ }
97
+
98
+ // Código parcial — hidratar con skeleton
99
+ const hydrated = hydrate(kind, { logic: code, name: "Generated", ... })
100
+ return { code: hydrated.code, hydrated: true }
101
+ }
102
+ ```
103
+
104
+ ### Opción B: Mejorar prompt del LLM
105
+ Incluir en el system prompt del agente que la salida DEBE incluir `@kind()` para que el hydrator lo detecte y pase directo.
106
+
107
+ ### Opción C (combinada): A + B
108
+ Mejorar el prompt + smart detection como fallback.
109
+
110
+ ## Pasos para Reproducir
111
+
112
+ 1. Ejecutar: `opl boost generate "hook useCart para carrito de compras" --kind hook`
113
+ 2. El LLM genera código completo sin @kind
114
+ 3. El hydrator envuelve en skeleton → código duplicado
115
+
116
+ ## Impacto
117
+
118
+ - Archivos generados tienen ~2x más líneas de las necesarias
119
+ - Código duplicado dentro de código funcional
120
+ - Markers del skeleton (`\`\`\`typescript`, `default`) aparecen como texto literal
121
+ - La validación pasa (quickValidate es leniente) pero el código no es utilizable directamente
122
+
123
+ ## @learn-error
124
+
125
+ ```
126
+ // @learn-error id=BOOST-HYDRATE-001
127
+ // input='Hydrator envuelve código completo del LLM en skeleton, creando duplicación'
128
+ // expected='Código completo del LLM se usa directamente con anotaciones OPL inyectadas al inicio'
129
+ // actual='Código del LLM aparece 2 veces: una dentro del skeleton y otra como contenido del placeholder'
130
+ // fix='Implementar smart detection en stageHydrate: si el código tiene imports+exports, inyectar solo anotaciones OPL sin skeleton'
131
+ // category=boost
132
+ ```
@@ -0,0 +1,87 @@
1
+ # BOOST-014 — Multi-agent mode falla con "Partes requeridas faltantes"
2
+
3
+ ## Metadatos
4
+
5
+ | Campo | Valor |
6
+ |-------|-------|
7
+ | **ID** | BOOST-014 |
8
+ | **Título** | Multi-agent mode falla al hidratar resultados del DAG |
9
+ | **Épica** | Módulo OPL Boost |
10
+ | **Prioridad** | Media |
11
+ | **Severidad** | Bug |
12
+ | **Estado** | ✅ Resuelto |
13
+ | **Archivos** | `src/boost/orchestrator.js`, `src/boost/hydrator.js` |
14
+
15
+ ## Descripción
16
+
17
+ Al ejecutar `opl boost generate` con `--multi-agent`, el pipeline falla con error:
18
+
19
+ ```
20
+ ✘ Error inesperado: Partes requeridas faltantes para "hook": name
21
+ ✘ Error inesperado: Partes requeridas faltantes para "store": name
22
+ ```
23
+
24
+ El modo multi-agent ejecuta agentes especializados (types, state, logic, cleaner, validate) para cada nodo del DAG, pero los resultados no se mapean correctamente a las partes requeridas por el hydrator.
25
+
26
+ ## Causa Raíz
27
+
28
+ En `orchestrator.js`, la función `stageGenerateMultiAgent` (línea 179-243):
29
+
30
+ 1. Ejecuta agentes en paralelo para los nodos sin dependencias
31
+ 2. Ejecuta agentes en secuencia para los nodos con dependencias
32
+ 3. Los resultados se almacenan como `{ types: "código...", state: "código...", logic: "código..." }`
33
+ 4. Se pasa a `hydrateFromAgentResults(kind, results)` que mapea `results.types` → `PLACEHOLDER_TYPES`, etc.
34
+
35
+ Pero el hydrator requiere `name` como parte obligatoria para hook, component, service, store — y ningún agente genera explícitamente el `name`.
36
+
37
+ ```javascript
38
+ // hydrator.js líneas 36-48
39
+ const PLACEHOLDER_MAP = {
40
+ hook: {
41
+ required: ["name"], // ← Falla aquí
42
+ placeholders: { ... }
43
+ },
44
+ ...
45
+ }
46
+ ```
47
+
48
+ ## Solución Propuesta
49
+
50
+ ### Opción A: Extraer name del prompt de entrada
51
+ Antes de pasar al hydrator, extraer el nombre del identificador de la tarea:
52
+
53
+ ```javascript
54
+ function extractNameFromTask(task) {
55
+ // "hook useProducts para ..." → "useProducts"
56
+ // "service ProductService para ..." → "ProductService"
57
+ const match = task.match(/\b(use[A-Z]\w+|[A-Z]\w*Service|[A-Z]\w*Store|[A-Z]\w*Page)/)
58
+ return match ? match[1] : "Generated"
59
+ }
60
+ ```
61
+
62
+ ### Opción B: Agente "name" en el DAG
63
+ Añadir un paso de pre-procesamiento que extraiga el nombre del componente antes de los agentes.
64
+
65
+ ### Opción C: Hacer name opcional en hydrator
66
+ Si no se provee `name`, usar "Generated" como default sin error.
67
+
68
+ ## Pasos para Reproducir
69
+
70
+ 1. Ejecutar: `opl boost generate "hook useAuth para autenticación" --kind hook --multi-agent`
71
+ 2. Error: `Partes requeridas faltantes para "hook": name`
72
+
73
+ ## Impacto
74
+
75
+ - Modo `--multi-agent` es completamente no funcional
76
+ - No se puede usar el pipeline multi-agente para ningún @kind
77
+
78
+ ## @learn-error
79
+
80
+ ```
81
+ // @learn-error id=BOOST-MULTIAGENT-001
82
+ // input='Ejecutar boost generate --multi-agent para cualquier @kind'
83
+ // expected='Código generado por múltiples agentes especializados'
84
+ // actual='Error: Partes requeridas faltantes para "kind": name'
85
+ // fix='Extraer name del prompt de entrada antes de hidratar, o hacer name opcional con default "Generated"'
86
+ // category=boost
87
+ ```
@@ -0,0 +1,76 @@
1
+ # BOOST-015 — Skeleton "type" no soportado
2
+
3
+ ## Metadatos
4
+
5
+ | Campo | Valor |
6
+ |-------|-------|
7
+ | **ID** | BOOST-015 |
8
+ | **Título** | Skeleton @kind(type) no soportado — solo 5 kinds |
9
+ | **Épica** | Módulo OPL Boost |
10
+ | **Prioridad** | Baja |
11
+ | **Severidad** | Feature |
12
+ | **Estado** | ✅ Resuelto |
13
+ | **Archivos** | `src/boost/skeletons/index.js`, `src/boost/hydrator.js`, `src/boost/task-dispatcher.js` |
14
+
15
+ ## Descripción
16
+
17
+ Al ejecutar `opl boost generate "tipos TypeScript para ecommerce..." --kind type`, el sistema responde:
18
+
19
+ ```
20
+ ✘ Error inesperado: Skeleton desconocido: "type". Tipos: hook, component, page, service, store
21
+ ```
22
+
23
+ Solo existen 5 skeletons: hook, component, page, service, store. Pero OPL define `@kind(type)` como un tipo válido en sus reglas de anotaciones (con `@limit(lines: sin límite)`).
24
+
25
+ ## Causa Raíz
26
+
27
+ `skeletons/index.js` solo registra 5 tipos:
28
+
29
+ ```javascript
30
+ const skeletons = {
31
+ hook: () => import("./hook.skeleton.js").then(m => m.default),
32
+ component: () => import("./component.skeleton.js").then(m => m.default),
33
+ page: () => import("./page.skeleton.js").then(m => m.default),
34
+ service: () => import("./service.skeleton.js").then(m => m.default),
35
+ store: () => import("./store.skeleton.js").then(m => m.default),
36
+ }
37
+ ```
38
+
39
+ Y `task-dispatcher.js` no tiene `type` en `detectKind()`.
40
+
41
+ ## Solución Propuesta
42
+
43
+ ### Crear type.skeleton.js
44
+ Skeleton para archivos de tipos TypeScript:
45
+
46
+ ```typescript
47
+ // @use(kind, limit)
48
+ // @kind(type)
49
+ // @limit(lines: 100)
50
+
51
+ {{PLACEHOLDER_IMPORTS}}
52
+
53
+ {{PLACEHOLDER_TYPES}}
54
+
55
+ {{PLACEHOLDER_EXPORTS}}
56
+ ```
57
+
58
+ ### Agregar a detectKind
59
+ ```javascript
60
+ if (/\b(type|interface|types|typings|dtype)\b/.test(lower)) return "type"
61
+ ```
62
+
63
+ ### Registrar en skeletons/index.js
64
+ ```javascript
65
+ type: () => import("./type.skeleton.js").then(m => m.default),
66
+ ```
67
+
68
+ ## Pasos para Reproducir
69
+
70
+ 1. `opl boost generate "tipos TypeScript para Product, CartItem, ApiResponse" --kind type`
71
+ 2. Error: `Skeleton desconocido: "type"`
72
+
73
+ ## Impacto
74
+
75
+ - No se pueden generar archivos de tipos con Boost
76
+ - Workaround: generar manualmente o usar `--kind service` como aproximación
@@ -0,0 +1,68 @@
1
+ # BOOST-016 — --output con ruta relativa crea estructura duplicada
2
+
3
+ ## Metadatos
4
+
5
+ | Campo | Valor |
6
+ |-------|-------|
7
+ | **ID** | BOOST-016 |
8
+ | **Título** | Flag --output con ruta relativa crea directorios duplicados |
9
+ | **Épica** | Módulo OPL Boost |
10
+ | **Prioridad** | Baja |
11
+ | **Severidad** | Bug |
12
+ | **Estado** | ✅ Resuelto |
13
+ | **Archivos** | `src/boost/orchestrator.js`, `src/cli/commands-boost.js` |
14
+
15
+ ## Descripción
16
+
17
+ Al ejecutar `opl boost generate "descripcion" --output /ruta/absoluta/archivo.ts`, se crea una estructura de directorios duplicada dentro del directorio de trabajo en lugar de usar la ruta directamente.
18
+
19
+ ### Ejemplo
20
+
21
+ ```bash
22
+ cd /home/nodead/Escritorio/TestOPLBoost
23
+ opl boost generate "hook useCart" --output /home/nodead/Escritorio/TestOPLBoost/useCart.ts
24
+ ```
25
+
26
+ Resultado: el archivo se crea en:
27
+ ```
28
+ /home/nodead/Escritorio/TestOPLBoost/home/nodead/Escritorio/TestOPLBoost/useCart.ts
29
+ ```
30
+
31
+ En lugar de:
32
+ ```
33
+ /home/nodead/Escritorio/TestOPLBoost/useCart.ts
34
+ ```
35
+
36
+ ## Causa Raíz
37
+
38
+ En `orchestrator.js`, línea 417:
39
+
40
+ ```javascript
41
+ const outputPath = join(process.cwd(), opts.output)
42
+ ```
43
+
44
+ Si `opts.output` ya es una ruta absoluta, `path.join(cwd, '/absolute/path')` en algunos entornos puede comportarse inesperadamente. Además, `path.join` con una ruta absoluta debería mantener la ruta absoluta, pero el comportamiento real muestra que crea una estructura anidada.
45
+
46
+ El problema real es que `join(process.cwd(), '/home/nodead/...')` en Node.js ignora el primer argumento cuando el segundo es absoluto... PERO si hay un pre-procesamiento del path en commands-boost.js, podría estar causando la duplicación.
47
+
48
+ ## Solución Propuesta
49
+
50
+ ```javascript
51
+ // orchestrator.js línea 417
52
+ const outputPath = path.isAbsolute(opts.output)
53
+ ? opts.output
54
+ : join(process.cwd(), opts.output)
55
+ ```
56
+
57
+ Y en `commands-boost.js`, no transformar la ruta de output.
58
+
59
+ ## Pasos para Reproducir
60
+
61
+ 1. `cd /home/user/project`
62
+ 2. `opl boost generate "hook useCart" --output /home/user/project/src/hooks/useCart.ts`
63
+ 3. Archivo se crea en `/home/user/project/home/user/project/src/hooks/useCart.ts`
64
+
65
+ ## Impacto
66
+
67
+ - Archivos se guardan en ubicaciones incorrectas
68
+ - Workaround: usar rutas relativas (`--output src/hooks/useCart.ts`)
@@ -0,0 +1,89 @@
1
+ # Índice de Tickets — Módulo OPL Boost
2
+
3
+ > **Épica**: Sistema multi-agente para potenciar modelos pequeños de IA
4
+ > **Arquitectura**: MoA (Mixture of Agents) — modelos colaborando como núcleos de CPU
5
+ > **Versión objetivo**: OPL 1.4.0
6
+ > **Documento de diseño**: `docs/00-ARCHITECTURE/OPL-BOOST-MULTI-AGENT.md`
7
+ > **Código fuente**: `src/boost/`
8
+
9
+ ## Tickets
10
+
11
+ | ID | Título | Prioridad | Estado | Depende de |
12
+ |----|--------|-----------|--------|------------|
13
+ | [BOOST-001](./BOOST-001-profile-registry.md) | Profile Registry + Config Base | Alta | ✅ Completado | — |
14
+ | [BOOST-002](./BOOST-002-context-compression.md) | Context Compressor + AI Cleaner | Alta | ✅ Completado | BOOST-001 |
15
+ | [BOOST-003](./BOOST-003-template-hydration.md) | Template Hydration System | Alta | ✅ Completado | BOOST-001 |
16
+ | [BOOST-004](./BOOST-004-fewshot-engine.md) | Few-Shot Example Engine | Media | ✅ Completado | BOOST-001 |
17
+ | [BOOST-005](./BOOST-005-agent-pool.md) | Agent Pool + Ollama Connector | Alta | ✅ Completado | BOOST-001 |
18
+ | [BOOST-006](./BOOST-006-specialized-agents.md) | Agentes Especializados | Alta | ✅ Completado | BOOST-005 |
19
+ | [BOOST-007](./BOOST-007-validation-loop.md) | Validation Loop + Agent Validate | Alta | ✅ Completado | BOOST-006 |
20
+ | [BOOST-008](./BOOST-008-orchestrator.md) | Orchestrator (pipeline unificado) | Alta | ✅ Completado | BOOST-007 |
21
+ | [BOOST-009](./BOOST-009-cache-system.md) | Cache System | Media | ✅ Completado | BOOST-008 |
22
+ | [BOOST-010](./BOOST-010-cli-mcp.md) | CLI + MCP Integration | Media | ✅ Completado | BOOST-009 |
23
+ | [BOOST-011](./BOOST-011-self-learning.md) | Auto-aprendizaje entre sesiones | Baja | ✅ Completado | BOOST-010 |
24
+ | [BOOST-012](./BOOST-012-prompt-preamble.md) | Universal Workflow Preamble | Media | ✅ Completado | — |
25
+ | [BOOST-013](./BOOST-013-hydrator-duplicate-code.md) | Hydrator duplica código del LLM | Alta | ✅ Resuelto | BOOST-003 |
26
+ | [BOOST-014](./BOOST-014-multiagent-missing-parts.md) | Multi-agent falla con partes faltantes | Media | ✅ Resuelto | BOOST-008 |
27
+ | [BOOST-015](./BOOST-015-skeleton-type-missing.md) | Skeleton @kind(type) no soportado | Baja | ✅ Resuelto | BOOST-003 |
28
+ | [BOOST-016](./BOOST-016-output-path-duplicate.md) | --output con ruta absoluta duplica directorios | Baja | ✅ Resuelto | BOOST-010 |
29
+
30
+ ## Resumen
31
+
32
+ | Estado | Cantidad |
33
+ |--------|----------|
34
+ | ✅ Completado | 12 |
35
+ | ✅ Resuelto | 4 |
36
+
37
+ ## Archivos implementados
38
+
39
+ | Archivo | Ticket | Líneas | Descripción |
40
+ |---------|--------|--------|-------------|
41
+ | `src/boost/profile-registry.js` | BOOST-001 | 264 | Perfiles, detección, API |
42
+ | `src/boost/hardware-detector.js` | BOOST-001* | 490 | Detección HW, setup, monitoreo |
43
+ | `src/boost/agent-pool.js` | BOOST-005 | 446 | Pool, Ollama, cola FIFO |
44
+ | `src/boost/agents/index.js` | BOOST-006 | 79 | Registro de 5 agentes |
45
+ | `src/boost/context-compressor.js` | BOOST-002 | 358 | Compresión determinística |
46
+ | `src/boost/hydrator.js` | BOOST-003 | ~300 | Hidratación skeletons + anotaciones |
47
+ | `src/boost/skeletons/*.js` | BOOST-003 | ~110 | 5 skeletons por @kind |
48
+ | `src/boost/fewshot-retriever.js` | BOOST-004 | ~250 | Búsqueda por relevancia |
49
+ | `src/boost/validation-loop.js` | BOOST-007 | ~300 | Feedback loop + validación |
50
+ | `src/boost/task-dispatcher.js` | BOOST-008 | ~135 | DAG planner |
51
+ | `src/boost/orchestrator.js` | BOOST-008 | ~350 | Pipeline single-pass + multi-agent |
52
+ | `src/boost/cache.js` | BOOST-009 | ~245 | Caché en disco con TTL |
53
+ | `src/boost/self-learn.js` | BOOST-011 | ~200 | Métricas y auto-perfilado |
54
+ | `src/boost/preamble.js` | BOOST-012 | ~150 | Preamble de workflow |
55
+ | `src/boost/index.js` | BOOST-008 | ~60 | API pública unificada |
56
+ | `src/cli/commands-boost.js` | BOOST-010 | ~400 | 6 comandos CLI |
57
+ | `src/mcp-refactor/handlers/boost.js` | BOOST-010 | ~250 | 5 tools MCP |
58
+
59
+ **Total: ~3,700 líneas de código implementadas**
60
+
61
+ ## Comandos CLI disponibles
62
+
63
+ ```
64
+ opl boost check → Diagnóstico del perfil activo + estado del sistema
65
+ opl boost profile [name] → Ver/forzar perfil (small/medium/large/auto)
66
+ opl boost setup → Detectar hardware + configurar Boost
67
+ opl boost generate <desc> → Generar código con pipeline completo
68
+ opl boost microtask <task> → Descomponer tarea en DAG de micro-tareas
69
+ opl boost cache [action] → Gestionar caché (stats, clear, clean)
70
+ ```
71
+
72
+ ## Tools MCP disponibles
73
+
74
+ ```
75
+ OPL_Boost_generate → Genera código usando el pipeline completo
76
+ OPL_Boost_compress → Comprime contexto según perfil y tarea
77
+ OPL_Boost_profile → Muestra perfil Boost + estado del sistema
78
+ OPL_Boost_plan → Planifica DAG de micro-tareas
79
+ OPL_Boost_validate → Valida código generado con feedback
80
+ ```
81
+
82
+ ## Notas
83
+
84
+ - Todos los tickets completados ✅
85
+ - La arquitectura es MoA (Mixture of Agents) — ver `docs/00-ARCHITECTURE/OPL-BOOST-MULTI-AGENT.md`
86
+ - El pipeline funciona en dos modos: single-pass (default) y multi-agent (opt-in con `--multi-agent`)
87
+ - BOOST-012 (preamble) es un sistema independiente que se puede usar sin el resto de Boost
88
+ - Tickets antiguos (micro-tasking lineal) archivados en `_archive/`
89
+ - **v1.3.0**: Testing con Ollama reveló 4 bugs (BOOST-013 a BOOST-016) — hydrator duplica código, multi-agent falla, skeleton type falta, output path duplica