openprompt-lang 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +553 -32
  2. package/bin/cli.js +343 -74
  3. package/bin/create.js +135 -0
  4. package/bin/lint.js +21 -22
  5. package/docs/AI-MANUAL.md +578 -0
  6. package/docs/COMMANDS.md +200 -127
  7. package/docs/COMMITS/INDEX.md +1 -0
  8. package/docs/PROMPT_AI_CONTEXT.md +99 -0
  9. package/docs/ROADMAP-DESARROLLO.md +274 -0
  10. package/docs/langs/dotnet.md +36 -0
  11. package/docs/langs/java-spring.md +45 -0
  12. package/docs/langs/python-fastapi.md +35 -0
  13. package/docs/langs/unity.md +30 -0
  14. package/docs/langs/vue-nuxt.md +36 -0
  15. package/package.json +33 -4
  16. package/scaffolds/.cursorrules +6 -0
  17. package/scaffolds/AGENTS.md +27 -0
  18. package/scaffolds/Dockerfile +11 -0
  19. package/scaffolds/capacitor.config.ts +17 -0
  20. package/scaffolds/netlify.toml +8 -0
  21. package/scaffolds/prompt-lang.json +15 -0
  22. package/scaffolds/railway.json +12 -0
  23. package/scaffolds/tailwind.config.js +8 -0
  24. package/scaffolds/tauri.conf.json +26 -0
  25. package/schemas/language-module.json +116 -0
  26. package/schemas/prompt-lang.json +38 -3
  27. package/schemas/structures.json +145 -0
  28. package/src/ai/learn-prompt.js +90 -0
  29. package/src/ai/prompt-builder.js +182 -0
  30. package/src/ai/providers.js +247 -0
  31. package/src/annotations/registry.js +39 -0
  32. package/src/annotations/tags.json +24 -0
  33. package/src/commands/ai-gen.js +161 -0
  34. package/src/commands/component.js +315 -227
  35. package/src/commands/context.js +351 -153
  36. package/src/commands/db-rules.js +117 -0
  37. package/src/commands/extract.js +562 -0
  38. package/src/commands/figma.js +42 -42
  39. package/src/commands/init.js +763 -246
  40. package/src/commands/integrate.js +544 -0
  41. package/src/commands/lang.js +148 -0
  42. package/src/commands/learn.js +182 -0
  43. package/src/commands/qa-gen.js +139 -0
  44. package/src/commands/scaffold.js +127 -0
  45. package/src/commands/suggest.js +37 -15
  46. package/src/commands/teach.js +109 -0
  47. package/src/commands/validate.js +189 -89
  48. package/src/commands/wizard.js +458 -0
  49. package/src/generators/figma-prompt.js +25 -17
  50. package/src/knowledge/db-rules.json +162 -0
  51. package/src/language-service/plugin.cjs +94 -0
  52. package/src/language-service/plugin.d.ts +6 -0
  53. package/src/mcp-server.js +710 -0
  54. package/src/templates/langs/react/INDEX.json +262 -0
  55. package/src/templates/langs/react/MODULE.json +166 -0
  56. package/src/templates/langs/react/templates/hooks/useAuth.template.ts +134 -0
  57. package/src/templates/langs/react/templates/hooks/useDebounce.template.ts +45 -0
  58. package/src/templates/langs/react/templates/hooks/useForm.template.ts +146 -0
  59. package/src/templates/langs/react/templates/hooks/usePagination.template.ts +108 -0
  60. package/src/templates/langs/react/templates/services/apiService.template.ts +123 -0
  61. package/src/templates/langs/react/templates/ui/Button.template.tsx +87 -0
  62. package/src/templates/langs/react/templates/ui/Card.template.tsx +85 -0
  63. package/src/templates/langs/react/templates/ui/DataTable.template.tsx +163 -0
  64. package/src/templates/langs/react/templates/ui/Input.template.tsx +96 -0
  65. package/src/templates/langs/react/templates/ui/Modal.template.tsx +133 -0
  66. package/src/templates/langs/react/templates/ui/Select.template.tsx +99 -0
  67. package/src/templates/langs/vue/INDEX.json +246 -0
  68. package/src/templates/langs/vue/MODULE.json +105 -0
  69. package/src/templates/langs/vue/templates/composables/useAuth.template.ts +106 -0
  70. package/src/templates/langs/vue/templates/composables/useDebounce.template.ts +47 -0
  71. package/src/templates/langs/vue/templates/composables/useFetch.template.ts +54 -0
  72. package/src/templates/langs/vue/templates/composables/useForm.template.ts +127 -0
  73. package/src/templates/langs/vue/templates/composables/usePagination.template.ts +98 -0
  74. package/src/templates/langs/vue/templates/services/apiService.template.ts +116 -0
  75. package/src/templates/langs/vue/templates/ui/Button.template.vue +79 -0
  76. package/src/templates/langs/vue/templates/ui/Card.template.vue +73 -0
  77. package/src/templates/langs/vue/templates/ui/DataTable.template.vue +115 -0
  78. package/src/templates/langs/vue/templates/ui/Input.template.vue +70 -0
  79. package/src/templates/langs/vue/templates/ui/Modal.template.vue +112 -0
  80. package/src/templates/langs/vue/templates/ui/Select.template.vue +77 -0
  81. package/src/templates/scripts/log-actividad.sh +32 -0
  82. package/src/templates/scripts/log-commit.sh +35 -0
  83. package/src/templates/scripts/log-error.sh +45 -0
  84. package/src/templates/scripts/validate.sh +23 -0
  85. package/src/templates/semantic-index.json +84 -0
  86. package/src/ts-transformer/index.cjs +86 -0
  87. package/src/utils/ai.js +66 -77
  88. package/src/utils/annotations.js +297 -251
  89. package/src/utils/config.js +85 -34
  90. package/src/utils/doc-ingest.js +101 -0
  91. package/src/utils/error-learner.js +205 -0
  92. package/src/utils/file-utils.js +119 -0
  93. package/src/utils/language-loader.js +167 -0
  94. package/src/utils/module-generator.js +235 -0
  95. package/src/utils/semantic-index.js +93 -0
  96. package/src/utils/template-utils.js +44 -0
  97. package/src/vite-plugin/index.js +54 -0
  98. package/vscode-extension/package.json +23 -2
  99. package/vscode-extension/snippets/promptlang.json +1 -3
  100. package/vscode-extension/syntaxes/annotations-code.tmGrammar.json +15 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # OpenPrompt-Lang
2
2
 
3
- Framework de anotaciones para desarrollo asistido por IA. Sistema de anotaciones `@kind`, `@contract`, `@limit`, etc. para guiar a la IA en proyectos React + TypeScript.
3
+ Framework de anotaciones **como código** para desarrollo asistido por IA. Escribe `@kind`, `@contract`, `@limit` como sintaxis directa (sin comentarios) para guiar a la IA sobre estructura, contratos y límites de tu código. Las anotaciones se eliminan automáticamente en build mediante plugins oficiales para Vite y TypeScript, y se integran con OpenCode vía MCP server. Extensible por módulos de lenguaje y tags personalizados.
4
4
 
5
5
  ```bash
6
6
  openPrompt-Lang --version
@@ -11,6 +11,14 @@ openPrompt-Lang --version
11
11
  ## Índice
12
12
 
13
13
  - [Instalación](#instalación)
14
+ - [Nuevas Capacidades (v0.4.0)](#nuevas-capacidades-v040)
15
+ - [Aprender de proyectos reales](#aprender-de-proyectos-reales---extract---learn)
16
+ - [Aprender de documentación](#aprender-de-documentación---learn)
17
+ - [Transferencia de contexto](#transferencia-de-contexto---integrate---fromto)
18
+ - [Contexto por dominio](#contexto-por-dominio---context---domain)
19
+ - [Presets pre-ensamblados](#presets-pre-ensamblados---init---preset)
20
+ - [Reglas de base de datos](#reglas-de-base-de-datos---db-rules)
21
+ - [Filtros de componentes](#filtros-de-componentes---component-list---styletechvalidated)
14
22
  - [Anotaciones PromptLang (directorio completo)](#anotaciones-promptlang-directorio-completo)
15
23
  - [Tags de definición](#tags-de-definición)
16
24
  - [Tags de contrato](#tags-de-contrato)
@@ -31,7 +39,6 @@ openPrompt-Lang --version
31
39
  - [VS Code Extension](#vs-code-extension)
32
40
  - [Versionado (SemVer)](#versionado-semver)
33
41
  - [Documentación](#documentación)
34
- - [Publicación en npm](#publicación-en-npm)
35
42
 
36
43
  ---
37
44
 
@@ -84,10 +91,14 @@ npx openprompt-lang --help
84
91
 
85
92
  ## Anotaciones PromptLang (directorio completo)
86
93
 
87
- Las anotaciones se escriben como comentarios en el código. La IA las interpreta para entender restricciones, contratos y contexto del archivo.
94
+ Las anotaciones se escriben en el código para guiar a la IA sobre restricciones, contratos y contexto del archivo. El parser detecta anotaciones tanto en comentarios como en código directo.
88
95
 
89
96
  ### Sintaxis general
90
97
 
98
+ Soporta **dos modos**:
99
+
100
+ #### Modo comentario (compatible con TS/JS estándar)
101
+
91
102
  ```typescript
92
103
  // @nombre(args)
93
104
  // @nombre(key: value, key2: value2)
@@ -100,6 +111,21 @@ Las anotaciones se escriben como comentarios en el código. La IA las interpreta
100
111
  */
101
112
  ```
102
113
 
114
+ #### Modo código (sin //)
115
+
116
+ ```typescript
117
+ @nombre(args)
118
+ @nombre(key: value, key2: value2)
119
+ ```
120
+
121
+ El parser reconoce automáticamente ambos formatos. Puedes mezclarlos libremente:
122
+
123
+ ```typescript
124
+ // @use(kind, contract, deps)
125
+ @kind(service)
126
+ @contract(in: DTO -> out: Result @error: ServiceError)
127
+ ```
128
+
103
129
  ### @use — Declaración de tags (OBLIGATORIO)
104
130
 
105
131
  Primer tag de todo archivo. Declara qué tags se usan.
@@ -273,8 +299,69 @@ Compatibilidad:
273
299
 
274
300
  ---
275
301
 
302
+ ### Tags de aprendizaje y documentación
303
+
304
+ #### @learn-error — Error aprendido
305
+
306
+ Documenta un bug encontrado y su solución para prevenir regresiones:
307
+
308
+ ```
309
+ // @learn-error id=BUTTON-001 input='...' expected=200 actual=500 fix='...' category=validation
310
+ ```
311
+
312
+ Usado por `qa-gen` para generar tests de regresión automáticamente.
313
+
314
+ #### @goodPractice — Buena práctica
315
+
316
+ Marca una sección de código como ejemplo de buena práctica:
317
+
318
+ ```
319
+ // @goodPractice("Usar early return reduce indentación")
320
+ ```
321
+
322
+ #### @badPractice — Mala práctica
323
+
324
+ Marca una sección como ejemplo de lo que no debe hacerse:
325
+
326
+ ```
327
+ // @badPractice("No mutar props directamente")
328
+ ```
329
+
330
+ #### @teachMe — Enseñanza estructurada
331
+
332
+ Documenta el diseño, propósito o lección de un archivo para que la IA lo entienda:
333
+
334
+ ```
335
+ // @teachMe
336
+ // Este hook maneja autenticación con Supabase.
337
+ // Usa early return para errores de validación antes de llamar a la API.
338
+ // El token se persiste en localStorage y se verifica al montar.
339
+ ```
340
+
341
+ Usado por `openPrompt-Lang teach` y el agente de Opencode.
342
+
343
+ #### @template — Plantilla reutilizable
344
+
345
+ Marca un archivo como template reutilizable dentro del módulo de lenguaje.
346
+
347
+ #### @source — Origen de extracción
348
+
349
+ Indica el archivo original del que se extrajo un template (usado por `extract`).
350
+
351
+ #### @reuse — Reutilización
352
+
353
+ Indica cuántas veces se ha reutilizado un template extraído.
354
+
355
+ #### @extracted — Extraído
356
+
357
+ Marca un template como generado por el extractor automático.
358
+
359
+ ---
360
+
276
361
  ### Ejemplos completos
277
362
 
363
+ #### Modo comentario
364
+
278
365
  ```typescript
279
366
  // @use(kind, contract, limit, deps, platform, scope, meta)
280
367
  // @kind(hook)
@@ -297,26 +384,128 @@ export function useAuth() { ... }
297
384
  export function Button(props: ButtonProps) { ... }
298
385
  ```
299
386
 
387
+ #### Modo código
388
+
389
+ ```typescript
390
+ @use(kind, contract, limit, deps, platform, scope, meta)
391
+ @kind(hook)
392
+ @limit(lines: 75, params: 1)
393
+ @contract(in: email, password -> out: user, token @error: AuthError)
394
+ @deps(@external: [supabase], @forbidden: [axios])
395
+ @platform(web)
396
+ @scope(module: auth, affects: [login, register, session])
397
+ @meta(@version: "1.0.0", @tags: [auth, supabase])
398
+ export function useAuth() { ... }
399
+ ```
400
+
401
+ ```typescript
402
+ @use(kind, props, state, limit, pattern)
403
+ @kind(component)
404
+ @props({ variant: string, size: string, children: ReactNode, disabled?: boolean })
405
+ @state(idle, disabled, loading)
406
+ @limit(lines: 90, functions: 2)
407
+ @pattern(composition)
408
+ export function Button(props: ButtonProps) { ... }
409
+ ```
410
+
411
+ > **Nota:** El modo código usa la sintaxis `@tag( ... )` sin `//`. El parser solo reconoce tags conocidos (`@kind`, `@use`, `@props`, etc.) para evitar confundirlos con decoradores JS/TS como `@Component` o `@Injectable`. Funciona tanto en `.ts` como en `.js`, `.py`, `.vue`, etc.
412
+
300
413
  > 📖 **Especificación completa:** `docs/SYNTAX.md`
301
414
 
302
415
  ---
303
416
 
417
+ ## Nuevas Capacidades (v0.4.0)
418
+
419
+ ### Aprender de proyectos reales — `extract --learn`
420
+ Analiza un proyecto y extrae sus patrones: convención de nombres, arquitectura, estilo UI, hooks, anotaciones. Genera un perfil reutilizable.
421
+
422
+ ```bash
423
+ openPrompt-Lang extract ./proyecto-pulido --learn
424
+ openPrompt-Lang init --name nuevo --learn-from ./aprendizaje-perfil.json
425
+ ```
426
+
427
+ ### Aprender de documentación — `learn`
428
+ Usa IA para transformar documentación local en módulos de lenguaje funcionales con templates, tests y prácticas.
429
+
430
+ ```bash
431
+ openPrompt-Lang learn --docs ./docs-rust/ --name rust
432
+ openPrompt-Lang learn --docs ./docs-react/ --from ./proyecto-real/ --name react
433
+ openPrompt-Lang learn --docs ./docs/ --name django --integrate
434
+ ```
435
+
436
+ Los módulos se guardan en `~/.openprompt/knowledge/langs/<id>/` (accesibles para cualquier proyecto).
437
+
438
+ ### Transferencia de contexto — `integrate --from/--to`
439
+ Copia el contexto de negocio entre proyectos: stack, convenciones, @kind/@contract detectados, arquitectura.
440
+
441
+ ```bash
442
+ openPrompt-Lang integrate --from ./web-react --to ./app-mobile
443
+ ```
444
+
445
+ ### Contexto por dominio — `context --domain`
446
+ Filtra el contexto del proyecto por dominio de negocio: ecommerce, saas, mobile, api, admin, blog.
447
+
448
+ ```bash
449
+ openPrompt-Lang context --domain ecommerce
450
+ ```
451
+
452
+ ### Presets pre-ensamblados — `init --preset`
453
+ Stacks completos con servicios incluidos: Supabase, Stripe, Ionic, Tauri, Firebase.
454
+
455
+ ```bash
456
+ openPrompt-Lang init --preset react-supabase-stripe --name tienda
457
+ openPrompt-Lang init --list-presets
458
+ ```
459
+
460
+ ### Reglas de base de datos — `db-rules`
461
+ Knowledge base de buenas prácticas, anti-patrones y reglas para SQL, Supabase, Postgres, Docker.
462
+
463
+ ```bash
464
+ openPrompt-Lang db-rules --id db-001
465
+ openPrompt-Lang db-rules --tag performance
466
+ ```
467
+
468
+ ### Filtros de componentes — `component list --style/--tech/--validated`
469
+ ```bash
470
+ openPrompt-Lang component list --style shadcn
471
+ openPrompt-Lang component list --tech vue
472
+ openPrompt-Lang component list --validated
473
+ ```
474
+
475
+ > 📖 **Manual completo para IA:** `docs/AI-MANUAL.md` — todos los comandos, workflows ordenados y configuración.
476
+
477
+ ---
478
+
304
479
  ## Comandos CLI
305
480
 
306
481
  | Comando | Descripción |
307
- |---|---|
482
+ |---|---|---|
308
483
  | `openPrompt-Lang init --name miapp` | Crea proyecto desde 0 con scaffolding completo + scripts descriptivos |
309
484
  | `openPrompt-Lang init --existing` | Configura proyecto existente (solo archivos de config) |
310
485
  | `openPrompt-Lang context --output contexto.md` | Extrae todo el código + anotaciones para dar contexto a la IA |
311
- | `openPrompt-Lang validate` | Valida anotaciones y ejecuta pipeline de verificación |
486
+ | `openPrompt-Lang validate [--fix]` | Valida anotaciones y ejecuta pipeline de verificación |
312
487
  | `openPrompt-Lang figma` | Genera prompt para diseño Figma |
313
488
  | `openPrompt-Lang suggest "descripción"` | IA sugiere stack y estructura según descripción |
489
+ | `openPrompt-Lang wizard` | Asistente interactivo para configurar proyecto openPrompt-Lang |
490
+ | `openPrompt-Lang teach <templateId>` | Enseñanza estructurada desde template con @teachMe |
491
+ | `openPrompt-Lang ai-gen` | Genera componentes desde descripciones en lenguaje natural |
492
+ | `openPrompt-Lang ai-providers` | Lista proveedores IA disponibles y su estado |
493
+ | `openPrompt-Lang extract [sourceDir]` | Analiza proyecto y extrae componentes reutilizables como templates |
494
+ | `openPrompt-Lang analyze [sourceDir]` | Analiza estructura, dependencias y salud del proyecto |
495
+ | `openPrompt-Lang integrate [--all]` | Configura Opencode, Cursor y VS Code para el proyecto |
496
+ | `openPrompt-Lang qa-gen` | Genera tests desde errores aprendidos (@learn-error) |
497
+ | `openPrompt-Lang qa-learn` | Parsea @learn-error de un archivo al módulo de lenguaje |
498
+ | `openPrompt-Lang lang list` | Lista lenguajes disponibles |
499
+ | `openPrompt-Lang lang index <langId>` | Muestra índice de templates de un lenguaje |
500
+ | `openPrompt-Lang lang search <query>` | Busca templates en todos los lenguajes |
501
+ | `openPrompt-Lang lang errors [langId]` | Muestra errores aprendidos |
502
+ | `openPrompt-Lang scaffold folders <framework>` | Crea estructura de carpetas según framework |
503
+ | `openPrompt-Lang scaffold list` | Lista frameworks disponibles en el catálogo |
314
504
  | `openPrompt-Lang component init` | Inicializa biblioteca de componentes reutilizables |
315
505
  | `openPrompt-Lang component list` | Lista componentes disponibles (proyecto + biblioteca) |
316
506
  | `openPrompt-Lang component add <nombre>` | Agrega componente de la biblioteca al proyecto |
317
507
  | `openPrompt-Lang component manifest` | Muestra el manifiesto de la biblioteca |
318
-
319
- > 📖 **Comandos y opciones detallados:** `docs/COMMANDS.md`
508
+ | `openPrompt-Lang mcp` | Inicia servidor MCP para integración con Opencode |
320
509
 
321
510
  ---
322
511
 
@@ -512,25 +701,77 @@ Generados automáticamente por `npm init` (o mergeables con `--existing`).
512
701
 
513
702
  ```
514
703
  openPrompt-Lang/
515
- ├── bin/cli.js ← Entry point del CLI
704
+ ├── bin/
705
+ │ ├── cli.js ← Entry point del CLI
706
+ │ ├── create.js ← Scafolder directo
707
+ │ └── lint.js ← Linter independiente
516
708
  ├── src/
517
709
  │ ├── commands/
518
710
  │ │ ├── init.js ← init + --existing
519
711
  │ │ ├── context.js ← Extractor de contexto
520
- │ │ ├── validate.js ← Validador de anotaciones
712
+ │ │ ├── validate.js ← Validador de anotaciones (con --fix)
521
713
  │ │ ├── figma.js ← Generador de prompts Figma
522
- │ │ └── suggest.js ← Sugerencia de stack vía IA
523
- └── utils/
524
- ├── annotations.js Parser + validador de anotaciones
525
- ├── config.js ← Loader de prompt-lang.json + detectStack
526
- └── ai.js Módulo de IA (OpenAI / opencode)
714
+ │ │ ├── suggest.js ← Sugerencia de stack vía IA
715
+ │ ├── wizard.js ← Asistente interactivo
716
+ ├── teach.js Enseñanza desde @teachMe
717
+ ├── ai-gen.js ← Generación de componentes vía IA
718
+ │ ├── extract.js Extractor de templates reutilizables
719
+ │ │ ├── integrate.js ← Integración con Opencode/Cursor/VS Code
720
+ │ │ ├── qa-gen.js ← Generación de tests desde @learn-error
721
+ │ │ ├── lang.js ← Gestión de módulos de lenguaje
722
+ │ │ ├── scaffold.js ← Scaffolding de proyectos
723
+ │ │ ├── component.js ← Biblioteca de componentes
724
+ │ │ └── mcp-server.js ← Servidor MCP (9 herramientas)
725
+ │ ├── utils/
726
+ │ │ ├── annotations.js ← Parser + validador de anotaciones
727
+ │ │ ├── config.js ← Loader de prompt-lang.json + deep merge
728
+ │ │ ├── ai.js ← Módulo de IA (OpenAI / Anthropic / Ollama)
729
+ │ │ ├── language-loader.js ← Cargador de módulos de lenguaje
730
+ │ │ ├── error-learner.js ← Sistema de @learn-error
731
+ │ │ ├── file-utils.js ← findAllFiles / findComponentFiles / analyzeImports / countFiles
732
+ │ │ └── template-utils.js ← extractLesson / extractTags (compartido)
733
+ │ ├── annotations/
734
+ │ │ ├── tags.json ← Lista canónica de 24 tags
735
+ │ │ └── registry.js ← Fusiona builtin + módulo + proyecto
736
+ │ ├── ai/
737
+ │ │ ├── providers.js ← Proveedores IA (OpenAI, Anthropic, Ollama, Mock, None)
738
+ │ │ └── prompt-builder.js ← Constructor de prompts
739
+ │ ├── generators/
740
+ │ │ └── figma-prompt.js ← Generador de prompts Figma
741
+ │ ├── vite-plugin/
742
+ │ │ └── index.js ← Plugin Vite para eliminar anotaciones en build
743
+ │ └── templates/
744
+ │ ├── langs/
745
+ │ │ ├── react/ ← 11 templates (Button, Input, Select, Card, Modal, DataTable, hooks, services)
746
+ │ │ └── vue/ ← 12 templates (6 UI components + 5 composables + 1 service)
747
+ │ └── scripts/ ← Scripts shell (validate.sh, etc.)
748
+ ├── .opencode/ ← Configuración para Opencode
749
+ │ ├── opencode.json ← MCP server + skills + default_agent
750
+ │ ├── agent/openPrompt.md ← Agente con 4 workflows + Default Workflow
751
+ │ └── skills/openPrompt/SKILL.md ← Skill auto-detectable con MCP tools
527
752
  ├── tests/
528
- │ ├── annotations.test.js ← ~65 tests de parser y validador
529
- └── config.test.js ← Tests de configuración
753
+ │ ├── annotations.test.js ← ~45 tests de parser y validador
754
+ ├── config.test.js ← Tests de deep merge
755
+ │ ├── init.test.js ← Tests de init
756
+ │ ├── language-loader.test.js ← Tests de language-loader
757
+ │ ├── wizard.test.js ← Tests de qualityGate
758
+ │ ├── scaffold.test.js ← Tests de scaffold
759
+ │ ├── validate.test.js ← Tests de validate
760
+ │ ├── qa-gen.test.js ← Tests de QA generation
761
+ │ ├── mcp-integration.test.js ← 14 tests MCP end-to-end
762
+ │ ├── context.test.js ← Tests de extracción de contexto
763
+ │ ├── integrate.test.js ← Tests de integración Opencode/Cursor/VS Code
764
+ │ ├── file-utils.test.js ← Tests de findAllFiles / countFiles
765
+ │ ├── template-utils.test.js ← Tests de extractLesson / extractTags
766
+ │ ├── teach.test.js ← Tests de enseñanza desde templates
767
+ │ ├── ai-gen.test.js ← Tests de generación vía IA
768
+ │ ├── extract.test.js ← Tests de extracción de templates
769
+ │ └── component.test.js ← Tests de biblioteca de componentes
530
770
  ├── docs/
531
771
  │ ├── COMMANDS.md ← Documentación completa de comandos
532
772
  │ ├── SYNTAX.md ← Especificación del lenguaje PromptLang
533
773
  │ ├── DEPENDENCIES.md ← Dependencias y versiones
774
+ │ ├── VERSIONING.md ← Convención SemVer
534
775
  │ ├── FRAMEWORK.md ← Framework spec (acceso rápido)
535
776
  │ └── referencia-metodologia/ ← Metodología completa (17 archivos)
536
777
  │ ├── Indice General.md
@@ -540,6 +781,8 @@ openPrompt-Lang/
540
781
  ├── vscode-extension/ ← Extensión VS Code (highlighting + snippets)
541
782
  ├── schemas/
542
783
  │ └── prompt-lang.json ← JSON Schema para la configuración
784
+ ├── scaffolds/ ← Scaffolds base para proyectos
785
+ │ └── AGENTS.md ← Template de AGENTS.md
543
786
  ├── package.json
544
787
  └── .gitignore
545
788
  ```
@@ -559,6 +802,7 @@ openPrompt-Lang/
559
802
  | `docs/referencia-metodologia/docs/CONVENCIONES_DB.md` | 18 prácticas de base de datos (RLS, índices, batch, etc.) |
560
803
  | `docs/referencia-metodologia/docs/CONVENCIONES_DOCUMENTACION.md` | Estándar de documentación (tablas DB, Mermaid, contratos RPC) |
561
804
  | `docs/referencia-metodologia/docs/PROMPTS/` | Biblioteca de prompts reutilizables (17 plantillas + 3 stacks) |
805
+ | `docs/PROMPT_AI_CONTEXT.md` | Prompt pre-hecho para copiar-pegar a Gemini/Claude/ChatGPT |
562
806
  | `vscode-extension/` | Extensión VS Code: syntax highlighting y snippets para anotaciones |
563
807
  | `schemas/prompt-lang.json` | JSON Schema para validar `prompt-lang.json` |
564
808
 
@@ -571,7 +815,7 @@ openPrompt-Lang sigue [SemVer estricto](docs/VERSIONING.md):
571
815
  | Bump | Cuándo | Ejemplo |
572
816
  |---|---|---|
573
817
  | **MAJOR** | Breaking changes en API, CLI o anotaciones | `1.0.0` → `2.0.0` |
574
- | **MINOR** | Nuevas funcionalidades, comandos, tags | `0.2.0` → `0.3.0` |
818
+ | **MINOR** | Nuevas funcionalidades, comandos, tags | `0.3.0` → `0.4.0` |
575
819
  | **PATCH** | Fixes, docs, refactors sin cambio de API | `0.2.0` → `0.2.1` |
576
820
 
577
821
  Pre-release: `1.0.0-alpha.1`, `1.0.0-beta.1`, `1.0.0-rc.1`
@@ -592,6 +836,139 @@ openPrompt-Lang incluye un sistema de **biblioteca de componentes reutilizables*
592
836
 
593
837
  ---
594
838
 
839
+ ## Extensibilidad
840
+
841
+ El sistema de tags es extensible en tres niveles sin modificar el core:
842
+
843
+ ### Nivel 1 — Módulo de lenguaje
844
+
845
+ Agrega `annotationTags` en el `MODULE.json` de tu módulo:
846
+
847
+ ```json
848
+ {
849
+ "id": "react-query",
850
+ "name": "React Query",
851
+ "annotationTags": ["query", "mutation"]
852
+ }
853
+ ```
854
+
855
+ ### Nivel 2 — Configuración del proyecto
856
+
857
+ Agrega `customTags` en `prompt-lang.json`:
858
+
859
+ ```json
860
+ {
861
+ "annotations": {
862
+ "customTags": ["audit", "security", "performance"]
863
+ }
864
+ }
865
+ ```
866
+
867
+ ### Nivel 3 — Plugins de build
868
+
869
+ Los plugins de Vite, TypeScript y Transformer aceptan la opción `tags` o `customTags`:
870
+
871
+ ```javascript
872
+ // vite.config.ts
873
+ import { openPromptAnnotations } from "openprompt-lang/vite-plugin";
874
+
875
+ export default {
876
+ plugins: [
877
+ openPromptAnnotations({ tags: ["audit", "security"] }),
878
+ ],
879
+ };
880
+ ```
881
+
882
+ ```jsonc
883
+ // tsconfig.json
884
+ {
885
+ "compilerOptions": {
886
+ "plugins": [
887
+ { "name": "openprompt-lang/ts-plugin", "customTags": ["audit"] }
888
+ ]
889
+ }
890
+ }
891
+ ```
892
+
893
+ ### Canonical tag list
894
+
895
+ La lista completa de tags builtin está en `src/annotations/tags.json`. El registry (`src/annotations/registry.js`) fusiona builtin + módulo + proyecto automáticamente. Todos los plugins y herramientas (parser, Vite, TS, grammar, MCP) consumen de esta misma fuente.
896
+
897
+ ---
898
+
899
+ ## Build Plugins
900
+
901
+ Para usar anotaciones como **código** (sin `//`), necesitas que el compilador las ignore en build.
902
+
903
+ ### Vite Plugin (Recomendado)
904
+
905
+ ```bash
906
+ npm install -D openprompt-lang
907
+ ```
908
+
909
+ ```typescript
910
+ // vite.config.ts
911
+ import { openPromptAnnotations } from "openprompt-lang/vite-plugin";
912
+
913
+ export default defineConfig({
914
+ plugins: [
915
+ openPromptAnnotations(),
916
+ ],
917
+ });
918
+ ```
919
+
920
+ Elimina las líneas `@tag(...)` antes de que esbuild las procese. Soporta paréntesis anidados y multi-línea.
921
+
922
+ ### TypeScript Language Service Plugin
923
+
924
+ Para VS Code (suprime errores rojos en `@tag(...)`):
925
+
926
+ ```jsonc
927
+ // tsconfig.json
928
+ {
929
+ "compilerOptions": {
930
+ "plugins": [
931
+ { "name": "openprompt-lang/ts-plugin" }
932
+ ]
933
+ }
934
+ }
935
+ ```
936
+
937
+ ### TS Transformer (para tsc / Next.js)
938
+
939
+ ```javascript
940
+ // next.config.js o en tsconfig.json via ts-patch
941
+ const { createTransformer } = require("openprompt-lang/ts-transformer");
942
+
943
+ module.exports = {
944
+ webpack: (config) => {
945
+ config.module.rules.push({
946
+ test: /\.tsx?$/,
947
+ use: {
948
+ loader: "ts-loader",
949
+ options: {
950
+ getCustomTransformers: () => ({
951
+ before: [createTransformer()],
952
+ }),
953
+ },
954
+ },
955
+ });
956
+ return config;
957
+ },
958
+ };
959
+ ```
960
+
961
+ ### Auto-configuración
962
+
963
+ ```bash
964
+ # Para proyectos existentes:
965
+ openPrompt-Lang init --existing
966
+
967
+ # Te preguntará si configurar Vite plugin y TS plugin automáticamente.
968
+ ```
969
+
970
+ ---
971
+
595
972
  ## VS Code Extension
596
973
 
597
974
  openPrompt-Lang incluye una extensión para VS Code en `vscode-extension/` con resaltado de sintaxis y snippets.
@@ -622,7 +999,7 @@ code --install-extension openprompt-lang-*.vsix
622
999
 
623
1000
  ### Funcionalidades
624
1001
 
625
- - **Syntax highlighting**: todos los tags (`@kind`, `@props`, `@contract`, etc.) se resaltan en comentarios de TypeScript/JavaScript
1002
+ - **Syntax highlighting**: todos los tags (`@kind`, `@props`, `@contract`, etc.) se resaltan tanto en comentarios (`// @kind`) como en código directo (`@kind`)
626
1003
  - **Snippets**: escribe `@kind-` y autocompleta:
627
1004
  - `@kind-hook` → hook con `@contract`
628
1005
  - `@kind-component` → componente con `@props`
@@ -639,25 +1016,169 @@ code --install-extension openprompt-lang-*.vsix
639
1016
 
640
1017
  ---
641
1018
 
642
- ## Publicación en npm
1019
+ ## OpenCode Integration
1020
+
1021
+ openPrompt-Lang tiene integración nativa con [OpenCode](https://opencode.ai) mediante **MCP server**, **agente especializado**, y **skill auto-detectable**.
1022
+
1023
+ ### Configuración rápida
643
1024
 
644
1025
  ```bash
645
- # 1. Build (si aplica)
646
- npm run build
1026
+ npx openprompt-lang integrate --all
1027
+ ```
647
1028
 
648
- # 2. Test
649
- npm test
1029
+ Esto genera:
650
1030
 
651
- # 3. Versionar (e.g. 0.3.0 0.4.0 para nuevas features)
652
- npm version minor -m "feat: %s"
1031
+ - **`.opencode/opencode.json`** Configuración con MCP server, skill paths y default_agent
1032
+ - **`.opencode/agent/openPrompt.md`** Agente con 4 workflows + Default Workflow
1033
+ - **`.opencode/skills/openPrompt/SKILL.md`** — Skill auto-detectable (solo se activa si el proyecto usa anotaciones)
1034
+ - **MCP server** — Expone 9 herramientas que Opencode puede llamar directamente
653
1035
 
654
- # 4. Publicar
655
- npm publish --access public
1036
+ ### MCP Server
656
1037
 
657
- # 5. Tag de release
658
- git push --follow-tags
1038
+ El MCP (Model Context Protocol) server permite que Opencode invoque herramientas de openPrompt-Lang de forma nativa, sin comandos slash. Las herramientas retornan estructura consistente:
1039
+
1040
+ ```
1041
+ ## Result: success|error|warning
1042
+ <summary>
1043
+ ### Details
1044
+ - <detalle 1>
1045
+ ### Recommended Actions
1046
+ - <acción 1>
659
1047
  ```
660
1048
 
661
- > ⚠️ Requiere cuenta npm: `npm login` primero.
662
- >
663
- > Pre-release: `npm publish --tag next`
1049
+ | Contexto | Herramienta | Descripción |
1050
+ |---|---|---|
1051
+ | **Auditar proyecto** | `analyze_project(dir)` | **Primera herramienta** en proyectos nuevos. Retorna config, conteo de archivos, estadísticas |
1052
+ | **Validar** | `validate([dir, filePath])` | Escanea proyecto/archivo buscando errores. Usar **antes de commits** |
1053
+ | | `lint_file(filePath, strict)` | Debug detallado de un archivo. Más información que `validate` |
1054
+ | | `parse_code(code)` | Valida sintaxis inline. Útil durante generación de código |
1055
+ | **Contexto** | `context([dir, scope])` | Extrae estructura del proyecto con resumen de config |
1056
+ | **Templates** | `search_templates(query, lang)` | Busca templates por keyword (button, auth, fetch) |
1057
+ | | `teach_template(templateId, showCode)` | Lección estructurada, prácticas y código del template |
1058
+ | **Testing** | `generate_tests(sourceDir, lang, output)` | Genera tests desde `@learn-error`. Usar **después de documentar un bug** |
1059
+ | **Scaffold** | `scaffold_project(framework, name)` | Crea estructura de proyecto y archivos base |
1060
+
1061
+ ### Auto-supervisión IA (Default Workflow)
1062
+
1063
+ El **skill auto-detectable** se activa cuando el proyecto usa anotaciones y guía a la IA con este ciclo:
1064
+
1065
+ ```
1066
+ 1. analyze_project → entender el proyecto
1067
+ 2. validate → diagnosticar errores
1068
+ 3. lint_file → debug profundo de archivos con errores
1069
+ 4. fix + @learn-error → documentar lo aprendido
1070
+ 5. generate_tests → prevenir regresión
1071
+ 6. validate → verificar que todo está limpio
1072
+ ```
1073
+
1074
+ El **agente `openPrompt`** incluye 4 workflows especializados (debugging de anotaciones, implementar componente, onboarding, nuevo proyecto) que la IA sigue automáticamente.
1075
+
1076
+ ### Uso manual (sin `integrate`)
1077
+
1078
+ Crea `.opencode/opencode.json`:
1079
+
1080
+ ```jsonc
1081
+ {
1082
+ "$schema": "https://opencode.ai/config.json",
1083
+ "mcp": {
1084
+ "openPrompt": {
1085
+ "type": "local",
1086
+ "command": ["npx", "openprompt-lang", "mcp"],
1087
+ "enabled": true
1088
+ }
1089
+ },
1090
+ "skills": {
1091
+ "paths": [".opencode/skills"]
1092
+ },
1093
+ "default_agent": "openPrompt",
1094
+ "instructions": ["AGENTS.md"]
1095
+ }
1096
+ ```
1097
+
1098
+ Luego agrega `.opencode/agent/openPrompt.md` (instrucciones del agente) y `.opencode/skills/openPrompt/SKILL.md` (skill). O simplemente ejecuta `npx openprompt-lang integrate --all`.
1099
+
1100
+ ---
1101
+
1102
+ ## Tutorial: Usar openPrompt-Lang con cualquier IA
1103
+
1104
+ Puedes usar openPrompt-Lang con **cualquier asistente de IA** — Google Gemini, Claude, ChatGPT, Cursor AI, etc. El framework no depende de Opencode; las anotaciones son simplemente código que cualquier IA puede leer e interpretar.
1105
+
1106
+ ### Con Google Gemini (u otro chat de IA)
1107
+
1108
+ #### Paso 1: Extraer contexto del proyecto
1109
+
1110
+ ```bash
1111
+ npx openprompt-lang context --output contexto.md
1112
+ ```
1113
+
1114
+ Esto genera `contexto.md` con la estructura del proyecto, configuración, y archivos anotados.
1115
+
1116
+ #### Paso 2: Compartir contexto con la IA
1117
+
1118
+ Abre Google Gemini (o Claude, ChatGPT) y proporciona:
1119
+
1120
+ 1. El archivo `contexto.md` generado
1121
+ 2. El archivo `AGENTS.md` del proyecto (stack, convenciones, reglas)
1122
+ 3. El archivo `docs/SYNTAX.md` (especificación del lenguaje de anotaciones)
1123
+
1124
+ **Prompt sugerido:**
1125
+
1126
+ ```
1127
+ Eres un desarrollador senior trabajando en este proyecto.
1128
+ Usa las anotaciones @kind, @contract, @props, @limit, @use para todo código nuevo que generes.
1129
+ Contexto del proyecto: [pega contexto.md]
1130
+ Reglas del proyecto: [pega AGENTS.md]
1131
+ Especificación de anotaciones: [pega SYNTAX.md]
1132
+ ```
1133
+
1134
+ #### Paso 3: La IA genera código con anotaciones
1135
+
1136
+ La IA entenderá las anotaciones y generará código como:
1137
+
1138
+ ```typescript
1139
+ // @use(kind, contract, limit, deps)
1140
+ // @kind(hook)
1141
+ // @limit(lines: 60, params: 1)
1142
+ // @contract(in: email, password -> out: User | null @error: string)
1143
+ // @deps(@external: [supabase])
1144
+ export function useAuth() { ... }
1145
+ ```
1146
+
1147
+ #### Paso 4: Validar el resultado
1148
+
1149
+ ```bash
1150
+ npx openprompt-lang validate src/mi-archivo.ts
1151
+ ```
1152
+
1153
+ ### Con Cursor AI
1154
+
1155
+ Cursor AI tiene integración nativa con openPrompt-Lang:
1156
+
1157
+ ```bash
1158
+ npx openprompt-lang integrate --all
1159
+ ```
1160
+
1161
+ Esto genera `.cursor/config.json` y `.cursorrules` con reglas específicas para que Cursor entienda las anotaciones. Luego solo abre el proyecto en Cursor:
1162
+
1163
+ 1. El archivo `.cursorrules` le dice a Cursor que use `@kind`, `@props`, etc.
1164
+ 2. Cuando Cursor genere código, seguirá las convenciones del proyecto
1165
+ 3. Ejecuta `openPrompt-Lang validate` para verificar el código generado
1166
+
1167
+ ### Con cualquier editor + API de IA
1168
+
1169
+ Flujo genérico que funciona con cualquier herramienta:
1170
+
1171
+ ```
1172
+ 1. Extraer contexto: npx openprompt-lang context --output contexto.md
1173
+ 2. Validar proyecto: npx openprompt-lang validate
1174
+ 3. Ver sintaxis: docs/SYNTAX.md
1175
+ 4. Compartir: contexto.md + AGENTS.md + SYNTAX.md → IA
1176
+ 5. Iterar: IA genera código → validar → corregir
1177
+ ```
1178
+
1179
+ ### Tips para mejores resultados
1180
+
1181
+ - **Sé explícito**: dile a la IA "usa anotaciones @kind, @contract, @limit en todo el código"
1182
+ - **Comparte ejemplos**: muestra un archivo anotado como referencia (los ejemplos de este README funcionan bien)
1183
+ - **Valida siempre**: `npx openprompt-lang validate` detecta errores que la IA podría pasar por alto
1184
+ - **Documenta errores**: cuando la IA cometa un error de anotación, agrega `// @learn-error` para que futuras sesiones no repitan el mismo error