openprompt-lang 0.3.0 → 0.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 (90) hide show
  1. package/README.md +483 -32
  2. package/bin/cli.js +232 -41
  3. package/bin/create.js +135 -0
  4. package/bin/lint.js +20 -21
  5. package/docs/COMMANDS.md +200 -127
  6. package/docs/COMMITS/INDEX.md +1 -0
  7. package/docs/PROMPT_AI_CONTEXT.md +99 -0
  8. package/docs/langs/dotnet.md +36 -0
  9. package/docs/langs/java-spring.md +45 -0
  10. package/docs/langs/python-fastapi.md +35 -0
  11. package/docs/langs/unity.md +30 -0
  12. package/docs/langs/vue-nuxt.md +36 -0
  13. package/package.json +31 -3
  14. package/scaffolds/.cursorrules +6 -0
  15. package/scaffolds/AGENTS.md +27 -0
  16. package/scaffolds/Dockerfile +11 -0
  17. package/scaffolds/capacitor.config.ts +17 -0
  18. package/scaffolds/netlify.toml +8 -0
  19. package/scaffolds/prompt-lang.json +15 -0
  20. package/scaffolds/railway.json +12 -0
  21. package/scaffolds/tailwind.config.js +8 -0
  22. package/scaffolds/tauri.conf.json +26 -0
  23. package/schemas/language-module.json +116 -0
  24. package/schemas/prompt-lang.json +38 -3
  25. package/schemas/structures.json +145 -0
  26. package/src/ai/prompt-builder.js +184 -0
  27. package/src/ai/providers.js +247 -0
  28. package/src/annotations/registry.js +39 -0
  29. package/src/annotations/tags.json +24 -0
  30. package/src/commands/ai-gen.js +161 -0
  31. package/src/commands/component.js +242 -212
  32. package/src/commands/context.js +184 -109
  33. package/src/commands/extract.js +242 -0
  34. package/src/commands/figma.js +15 -15
  35. package/src/commands/init.js +197 -93
  36. package/src/commands/integrate.js +406 -0
  37. package/src/commands/lang.js +148 -0
  38. package/src/commands/qa-gen.js +139 -0
  39. package/src/commands/scaffold.js +127 -0
  40. package/src/commands/suggest.js +24 -14
  41. package/src/commands/teach.js +110 -0
  42. package/src/commands/validate.js +143 -83
  43. package/src/commands/wizard.js +456 -0
  44. package/src/generators/figma-prompt.js +20 -12
  45. package/src/language-service/plugin.cjs +94 -0
  46. package/src/language-service/plugin.d.ts +6 -0
  47. package/src/mcp-server.js +605 -0
  48. package/src/templates/langs/react/INDEX.json +262 -0
  49. package/src/templates/langs/react/MODULE.json +166 -0
  50. package/src/templates/langs/react/templates/hooks/useAuth.template.ts +134 -0
  51. package/src/templates/langs/react/templates/hooks/useDebounce.template.ts +45 -0
  52. package/src/templates/langs/react/templates/hooks/useForm.template.ts +146 -0
  53. package/src/templates/langs/react/templates/hooks/usePagination.template.ts +108 -0
  54. package/src/templates/langs/react/templates/services/apiService.template.ts +123 -0
  55. package/src/templates/langs/react/templates/ui/Button.template.tsx +87 -0
  56. package/src/templates/langs/react/templates/ui/Card.template.tsx +85 -0
  57. package/src/templates/langs/react/templates/ui/DataTable.template.tsx +163 -0
  58. package/src/templates/langs/react/templates/ui/Input.template.tsx +96 -0
  59. package/src/templates/langs/react/templates/ui/Modal.template.tsx +133 -0
  60. package/src/templates/langs/react/templates/ui/Select.template.tsx +99 -0
  61. package/src/templates/langs/vue/INDEX.json +246 -0
  62. package/src/templates/langs/vue/MODULE.json +105 -0
  63. package/src/templates/langs/vue/templates/composables/useAuth.template.ts +106 -0
  64. package/src/templates/langs/vue/templates/composables/useDebounce.template.ts +47 -0
  65. package/src/templates/langs/vue/templates/composables/useFetch.template.ts +54 -0
  66. package/src/templates/langs/vue/templates/composables/useForm.template.ts +127 -0
  67. package/src/templates/langs/vue/templates/composables/usePagination.template.ts +98 -0
  68. package/src/templates/langs/vue/templates/services/apiService.template.ts +116 -0
  69. package/src/templates/langs/vue/templates/ui/Button.template.vue +79 -0
  70. package/src/templates/langs/vue/templates/ui/Card.template.vue +73 -0
  71. package/src/templates/langs/vue/templates/ui/DataTable.template.vue +115 -0
  72. package/src/templates/langs/vue/templates/ui/Input.template.vue +70 -0
  73. package/src/templates/langs/vue/templates/ui/Modal.template.vue +112 -0
  74. package/src/templates/langs/vue/templates/ui/Select.template.vue +77 -0
  75. package/src/templates/scripts/log-actividad.sh +32 -0
  76. package/src/templates/scripts/log-commit.sh +35 -0
  77. package/src/templates/scripts/log-error.sh +45 -0
  78. package/src/templates/scripts/validate.sh +23 -0
  79. package/src/ts-transformer/index.cjs +86 -0
  80. package/src/utils/ai.js +35 -53
  81. package/src/utils/annotations.js +260 -214
  82. package/src/utils/config.js +61 -13
  83. package/src/utils/error-learner.js +203 -0
  84. package/src/utils/file-utils.js +119 -0
  85. package/src/utils/language-loader.js +167 -0
  86. package/src/utils/template-utils.js +45 -0
  87. package/src/vite-plugin/index.js +54 -0
  88. package/vscode-extension/package.json +23 -2
  89. package/vscode-extension/snippets/promptlang.json +1 -3
  90. 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
@@ -31,7 +31,6 @@ openPrompt-Lang --version
31
31
  - [VS Code Extension](#vs-code-extension)
32
32
  - [Versionado (SemVer)](#versionado-semver)
33
33
  - [Documentación](#documentación)
34
- - [Publicación en npm](#publicación-en-npm)
35
34
 
36
35
  ---
37
36
 
@@ -84,10 +83,14 @@ npx openprompt-lang --help
84
83
 
85
84
  ## Anotaciones PromptLang (directorio completo)
86
85
 
87
- Las anotaciones se escriben como comentarios en el código. La IA las interpreta para entender restricciones, contratos y contexto del archivo.
86
+ 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
87
 
89
88
  ### Sintaxis general
90
89
 
90
+ Soporta **dos modos**:
91
+
92
+ #### Modo comentario (compatible con TS/JS estándar)
93
+
91
94
  ```typescript
92
95
  // @nombre(args)
93
96
  // @nombre(key: value, key2: value2)
@@ -100,6 +103,21 @@ Las anotaciones se escriben como comentarios en el código. La IA las interpreta
100
103
  */
101
104
  ```
102
105
 
106
+ #### Modo código (sin //)
107
+
108
+ ```typescript
109
+ @nombre(args)
110
+ @nombre(key: value, key2: value2)
111
+ ```
112
+
113
+ El parser reconoce automáticamente ambos formatos. Puedes mezclarlos libremente:
114
+
115
+ ```typescript
116
+ // @use(kind, contract, deps)
117
+ @kind(service)
118
+ @contract(in: DTO -> out: Result @error: ServiceError)
119
+ ```
120
+
103
121
  ### @use — Declaración de tags (OBLIGATORIO)
104
122
 
105
123
  Primer tag de todo archivo. Declara qué tags se usan.
@@ -273,8 +291,69 @@ Compatibilidad:
273
291
 
274
292
  ---
275
293
 
294
+ ### Tags de aprendizaje y documentación
295
+
296
+ #### @learn-error — Error aprendido
297
+
298
+ Documenta un bug encontrado y su solución para prevenir regresiones:
299
+
300
+ ```
301
+ // @learn-error id=BUTTON-001 input='...' expected=200 actual=500 fix='...' category=validation
302
+ ```
303
+
304
+ Usado por `qa-gen` para generar tests de regresión automáticamente.
305
+
306
+ #### @goodPractice — Buena práctica
307
+
308
+ Marca una sección de código como ejemplo de buena práctica:
309
+
310
+ ```
311
+ // @goodPractice("Usar early return reduce indentación")
312
+ ```
313
+
314
+ #### @badPractice — Mala práctica
315
+
316
+ Marca una sección como ejemplo de lo que no debe hacerse:
317
+
318
+ ```
319
+ // @badPractice("No mutar props directamente")
320
+ ```
321
+
322
+ #### @teachMe — Enseñanza estructurada
323
+
324
+ Documenta el diseño, propósito o lección de un archivo para que la IA lo entienda:
325
+
326
+ ```
327
+ // @teachMe
328
+ // Este hook maneja autenticación con Supabase.
329
+ // Usa early return para errores de validación antes de llamar a la API.
330
+ // El token se persiste en localStorage y se verifica al montar.
331
+ ```
332
+
333
+ Usado por `openPrompt-Lang teach` y el agente de Opencode.
334
+
335
+ #### @template — Plantilla reutilizable
336
+
337
+ Marca un archivo como template reutilizable dentro del módulo de lenguaje.
338
+
339
+ #### @source — Origen de extracción
340
+
341
+ Indica el archivo original del que se extrajo un template (usado por `extract`).
342
+
343
+ #### @reuse — Reutilización
344
+
345
+ Indica cuántas veces se ha reutilizado un template extraído.
346
+
347
+ #### @extracted — Extraído
348
+
349
+ Marca un template como generado por el extractor automático.
350
+
351
+ ---
352
+
276
353
  ### Ejemplos completos
277
354
 
355
+ #### Modo comentario
356
+
278
357
  ```typescript
279
358
  // @use(kind, contract, limit, deps, platform, scope, meta)
280
359
  // @kind(hook)
@@ -297,6 +376,32 @@ export function useAuth() { ... }
297
376
  export function Button(props: ButtonProps) { ... }
298
377
  ```
299
378
 
379
+ #### Modo código
380
+
381
+ ```typescript
382
+ @use(kind, contract, limit, deps, platform, scope, meta)
383
+ @kind(hook)
384
+ @limit(lines: 75, params: 1)
385
+ @contract(in: email, password -> out: user, token @error: AuthError)
386
+ @deps(@external: [supabase], @forbidden: [axios])
387
+ @platform(web)
388
+ @scope(module: auth, affects: [login, register, session])
389
+ @meta(@version: "1.0.0", @tags: [auth, supabase])
390
+ export function useAuth() { ... }
391
+ ```
392
+
393
+ ```typescript
394
+ @use(kind, props, state, limit, pattern)
395
+ @kind(component)
396
+ @props({ variant: string, size: string, children: ReactNode, disabled?: boolean })
397
+ @state(idle, disabled, loading)
398
+ @limit(lines: 90, functions: 2)
399
+ @pattern(composition)
400
+ export function Button(props: ButtonProps) { ... }
401
+ ```
402
+
403
+ > **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.
404
+
300
405
  > 📖 **Especificación completa:** `docs/SYNTAX.md`
301
406
 
302
407
  ---
@@ -304,19 +409,33 @@ export function Button(props: ButtonProps) { ... }
304
409
  ## Comandos CLI
305
410
 
306
411
  | Comando | Descripción |
307
- |---|---|
412
+ |---|---|---|
308
413
  | `openPrompt-Lang init --name miapp` | Crea proyecto desde 0 con scaffolding completo + scripts descriptivos |
309
414
  | `openPrompt-Lang init --existing` | Configura proyecto existente (solo archivos de config) |
310
415
  | `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 |
416
+ | `openPrompt-Lang validate [--fix]` | Valida anotaciones y ejecuta pipeline de verificación |
312
417
  | `openPrompt-Lang figma` | Genera prompt para diseño Figma |
313
418
  | `openPrompt-Lang suggest "descripción"` | IA sugiere stack y estructura según descripción |
419
+ | `openPrompt-Lang wizard` | Asistente interactivo para configurar proyecto openPrompt-Lang |
420
+ | `openPrompt-Lang teach <templateId>` | Enseñanza estructurada desde template con @teachMe |
421
+ | `openPrompt-Lang ai-gen` | Genera componentes desde descripciones en lenguaje natural |
422
+ | `openPrompt-Lang ai-providers` | Lista proveedores IA disponibles y su estado |
423
+ | `openPrompt-Lang extract [sourceDir]` | Analiza proyecto y extrae componentes reutilizables como templates |
424
+ | `openPrompt-Lang analyze [sourceDir]` | Analiza estructura, dependencias y salud del proyecto |
425
+ | `openPrompt-Lang integrate [--all]` | Configura Opencode, Cursor y VS Code para el proyecto |
426
+ | `openPrompt-Lang qa-gen` | Genera tests desde errores aprendidos (@learn-error) |
427
+ | `openPrompt-Lang qa-learn` | Parsea @learn-error de un archivo al módulo de lenguaje |
428
+ | `openPrompt-Lang lang list` | Lista lenguajes disponibles |
429
+ | `openPrompt-Lang lang index <langId>` | Muestra índice de templates de un lenguaje |
430
+ | `openPrompt-Lang lang search <query>` | Busca templates en todos los lenguajes |
431
+ | `openPrompt-Lang lang errors [langId]` | Muestra errores aprendidos |
432
+ | `openPrompt-Lang scaffold folders <framework>` | Crea estructura de carpetas según framework |
433
+ | `openPrompt-Lang scaffold list` | Lista frameworks disponibles en el catálogo |
314
434
  | `openPrompt-Lang component init` | Inicializa biblioteca de componentes reutilizables |
315
435
  | `openPrompt-Lang component list` | Lista componentes disponibles (proyecto + biblioteca) |
316
436
  | `openPrompt-Lang component add <nombre>` | Agrega componente de la biblioteca al proyecto |
317
437
  | `openPrompt-Lang component manifest` | Muestra el manifiesto de la biblioteca |
318
-
319
- > 📖 **Comandos y opciones detallados:** `docs/COMMANDS.md`
438
+ | `openPrompt-Lang mcp` | Inicia servidor MCP para integración con Opencode |
320
439
 
321
440
  ---
322
441
 
@@ -512,25 +631,77 @@ Generados automáticamente por `npm init` (o mergeables con `--existing`).
512
631
 
513
632
  ```
514
633
  openPrompt-Lang/
515
- ├── bin/cli.js ← Entry point del CLI
634
+ ├── bin/
635
+ │ ├── cli.js ← Entry point del CLI
636
+ │ ├── create.js ← Scafolder directo
637
+ │ └── lint.js ← Linter independiente
516
638
  ├── src/
517
639
  │ ├── commands/
518
640
  │ │ ├── init.js ← init + --existing
519
641
  │ │ ├── context.js ← Extractor de contexto
520
- │ │ ├── validate.js ← Validador de anotaciones
642
+ │ │ ├── validate.js ← Validador de anotaciones (con --fix)
521
643
  │ │ ├── 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)
644
+ │ │ ├── suggest.js ← Sugerencia de stack vía IA
645
+ │ ├── wizard.js ← Asistente interactivo
646
+ ├── teach.js Enseñanza desde @teachMe
647
+ ├── ai-gen.js ← Generación de componentes vía IA
648
+ │ ├── extract.js Extractor de templates reutilizables
649
+ │ │ ├── integrate.js ← Integración con Opencode/Cursor/VS Code
650
+ │ │ ├── qa-gen.js ← Generación de tests desde @learn-error
651
+ │ │ ├── lang.js ← Gestión de módulos de lenguaje
652
+ │ │ ├── scaffold.js ← Scaffolding de proyectos
653
+ │ │ ├── component.js ← Biblioteca de componentes
654
+ │ │ └── mcp-server.js ← Servidor MCP (9 herramientas)
655
+ │ ├── utils/
656
+ │ │ ├── annotations.js ← Parser + validador de anotaciones
657
+ │ │ ├── config.js ← Loader de prompt-lang.json + deep merge
658
+ │ │ ├── ai.js ← Módulo de IA (OpenAI / Anthropic / Ollama)
659
+ │ │ ├── language-loader.js ← Cargador de módulos de lenguaje
660
+ │ │ ├── error-learner.js ← Sistema de @learn-error
661
+ │ │ ├── file-utils.js ← findAllFiles / findComponentFiles / analyzeImports / countFiles
662
+ │ │ └── template-utils.js ← extractLesson / extractTags (compartido)
663
+ │ ├── annotations/
664
+ │ │ ├── tags.json ← Lista canónica de 24 tags
665
+ │ │ └── registry.js ← Fusiona builtin + módulo + proyecto
666
+ │ ├── ai/
667
+ │ │ ├── providers.js ← Proveedores IA (OpenAI, Anthropic, Ollama, Mock, None)
668
+ │ │ └── prompt-builder.js ← Constructor de prompts
669
+ │ ├── generators/
670
+ │ │ └── figma-prompt.js ← Generador de prompts Figma
671
+ │ ├── vite-plugin/
672
+ │ │ └── index.js ← Plugin Vite para eliminar anotaciones en build
673
+ │ └── templates/
674
+ │ ├── langs/
675
+ │ │ ├── react/ ← 11 templates (Button, Input, Select, Card, Modal, DataTable, hooks, services)
676
+ │ │ └── vue/ ← 12 templates (6 UI components + 5 composables + 1 service)
677
+ │ └── scripts/ ← Scripts shell (validate.sh, etc.)
678
+ ├── .opencode/ ← Configuración para Opencode
679
+ │ ├── opencode.json ← MCP server + skills + default_agent
680
+ │ ├── agent/openPrompt.md ← Agente con 4 workflows + Default Workflow
681
+ │ └── skills/openPrompt/SKILL.md ← Skill auto-detectable con MCP tools
527
682
  ├── tests/
528
- │ ├── annotations.test.js ← ~65 tests de parser y validador
529
- └── config.test.js ← Tests de configuración
683
+ │ ├── annotations.test.js ← ~45 tests de parser y validador
684
+ ├── config.test.js ← Tests de deep merge
685
+ │ ├── init.test.js ← Tests de init
686
+ │ ├── language-loader.test.js ← Tests de language-loader
687
+ │ ├── wizard.test.js ← Tests de qualityGate
688
+ │ ├── scaffold.test.js ← Tests de scaffold
689
+ │ ├── validate.test.js ← Tests de validate
690
+ │ ├── qa-gen.test.js ← Tests de QA generation
691
+ │ ├── mcp-integration.test.js ← 14 tests MCP end-to-end
692
+ │ ├── context.test.js ← Tests de extracción de contexto
693
+ │ ├── integrate.test.js ← Tests de integración Opencode/Cursor/VS Code
694
+ │ ├── file-utils.test.js ← Tests de findAllFiles / countFiles
695
+ │ ├── template-utils.test.js ← Tests de extractLesson / extractTags
696
+ │ ├── teach.test.js ← Tests de enseñanza desde templates
697
+ │ ├── ai-gen.test.js ← Tests de generación vía IA
698
+ │ ├── extract.test.js ← Tests de extracción de templates
699
+ │ └── component.test.js ← Tests de biblioteca de componentes
530
700
  ├── docs/
531
701
  │ ├── COMMANDS.md ← Documentación completa de comandos
532
702
  │ ├── SYNTAX.md ← Especificación del lenguaje PromptLang
533
703
  │ ├── DEPENDENCIES.md ← Dependencias y versiones
704
+ │ ├── VERSIONING.md ← Convención SemVer
534
705
  │ ├── FRAMEWORK.md ← Framework spec (acceso rápido)
535
706
  │ └── referencia-metodologia/ ← Metodología completa (17 archivos)
536
707
  │ ├── Indice General.md
@@ -540,6 +711,8 @@ openPrompt-Lang/
540
711
  ├── vscode-extension/ ← Extensión VS Code (highlighting + snippets)
541
712
  ├── schemas/
542
713
  │ └── prompt-lang.json ← JSON Schema para la configuración
714
+ ├── scaffolds/ ← Scaffolds base para proyectos
715
+ │ └── AGENTS.md ← Template de AGENTS.md
543
716
  ├── package.json
544
717
  └── .gitignore
545
718
  ```
@@ -559,6 +732,7 @@ openPrompt-Lang/
559
732
  | `docs/referencia-metodologia/docs/CONVENCIONES_DB.md` | 18 prácticas de base de datos (RLS, índices, batch, etc.) |
560
733
  | `docs/referencia-metodologia/docs/CONVENCIONES_DOCUMENTACION.md` | Estándar de documentación (tablas DB, Mermaid, contratos RPC) |
561
734
  | `docs/referencia-metodologia/docs/PROMPTS/` | Biblioteca de prompts reutilizables (17 plantillas + 3 stacks) |
735
+ | `docs/PROMPT_AI_CONTEXT.md` | Prompt pre-hecho para copiar-pegar a Gemini/Claude/ChatGPT |
562
736
  | `vscode-extension/` | Extensión VS Code: syntax highlighting y snippets para anotaciones |
563
737
  | `schemas/prompt-lang.json` | JSON Schema para validar `prompt-lang.json` |
564
738
 
@@ -571,7 +745,7 @@ openPrompt-Lang sigue [SemVer estricto](docs/VERSIONING.md):
571
745
  | Bump | Cuándo | Ejemplo |
572
746
  |---|---|---|
573
747
  | **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` |
748
+ | **MINOR** | Nuevas funcionalidades, comandos, tags | `0.3.0` → `0.4.0` |
575
749
  | **PATCH** | Fixes, docs, refactors sin cambio de API | `0.2.0` → `0.2.1` |
576
750
 
577
751
  Pre-release: `1.0.0-alpha.1`, `1.0.0-beta.1`, `1.0.0-rc.1`
@@ -592,6 +766,139 @@ openPrompt-Lang incluye un sistema de **biblioteca de componentes reutilizables*
592
766
 
593
767
  ---
594
768
 
769
+ ## Extensibilidad
770
+
771
+ El sistema de tags es extensible en tres niveles sin modificar el core:
772
+
773
+ ### Nivel 1 — Módulo de lenguaje
774
+
775
+ Agrega `annotationTags` en el `MODULE.json` de tu módulo:
776
+
777
+ ```json
778
+ {
779
+ "id": "react-query",
780
+ "name": "React Query",
781
+ "annotationTags": ["query", "mutation"]
782
+ }
783
+ ```
784
+
785
+ ### Nivel 2 — Configuración del proyecto
786
+
787
+ Agrega `customTags` en `prompt-lang.json`:
788
+
789
+ ```json
790
+ {
791
+ "annotations": {
792
+ "customTags": ["audit", "security", "performance"]
793
+ }
794
+ }
795
+ ```
796
+
797
+ ### Nivel 3 — Plugins de build
798
+
799
+ Los plugins de Vite, TypeScript y Transformer aceptan la opción `tags` o `customTags`:
800
+
801
+ ```javascript
802
+ // vite.config.ts
803
+ import { openPromptAnnotations } from "openprompt-lang/vite-plugin";
804
+
805
+ export default {
806
+ plugins: [
807
+ openPromptAnnotations({ tags: ["audit", "security"] }),
808
+ ],
809
+ };
810
+ ```
811
+
812
+ ```jsonc
813
+ // tsconfig.json
814
+ {
815
+ "compilerOptions": {
816
+ "plugins": [
817
+ { "name": "openprompt-lang/ts-plugin", "customTags": ["audit"] }
818
+ ]
819
+ }
820
+ }
821
+ ```
822
+
823
+ ### Canonical tag list
824
+
825
+ 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.
826
+
827
+ ---
828
+
829
+ ## Build Plugins
830
+
831
+ Para usar anotaciones como **código** (sin `//`), necesitas que el compilador las ignore en build.
832
+
833
+ ### Vite Plugin (Recomendado)
834
+
835
+ ```bash
836
+ npm install -D openprompt-lang
837
+ ```
838
+
839
+ ```typescript
840
+ // vite.config.ts
841
+ import { openPromptAnnotations } from "openprompt-lang/vite-plugin";
842
+
843
+ export default defineConfig({
844
+ plugins: [
845
+ openPromptAnnotations(),
846
+ ],
847
+ });
848
+ ```
849
+
850
+ Elimina las líneas `@tag(...)` antes de que esbuild las procese. Soporta paréntesis anidados y multi-línea.
851
+
852
+ ### TypeScript Language Service Plugin
853
+
854
+ Para VS Code (suprime errores rojos en `@tag(...)`):
855
+
856
+ ```jsonc
857
+ // tsconfig.json
858
+ {
859
+ "compilerOptions": {
860
+ "plugins": [
861
+ { "name": "openprompt-lang/ts-plugin" }
862
+ ]
863
+ }
864
+ }
865
+ ```
866
+
867
+ ### TS Transformer (para tsc / Next.js)
868
+
869
+ ```javascript
870
+ // next.config.js o en tsconfig.json via ts-patch
871
+ const { createTransformer } = require("openprompt-lang/ts-transformer");
872
+
873
+ module.exports = {
874
+ webpack: (config) => {
875
+ config.module.rules.push({
876
+ test: /\.tsx?$/,
877
+ use: {
878
+ loader: "ts-loader",
879
+ options: {
880
+ getCustomTransformers: () => ({
881
+ before: [createTransformer()],
882
+ }),
883
+ },
884
+ },
885
+ });
886
+ return config;
887
+ },
888
+ };
889
+ ```
890
+
891
+ ### Auto-configuración
892
+
893
+ ```bash
894
+ # Para proyectos existentes:
895
+ openPrompt-Lang init --existing
896
+
897
+ # Te preguntará si configurar Vite plugin y TS plugin automáticamente.
898
+ ```
899
+
900
+ ---
901
+
595
902
  ## VS Code Extension
596
903
 
597
904
  openPrompt-Lang incluye una extensión para VS Code en `vscode-extension/` con resaltado de sintaxis y snippets.
@@ -622,7 +929,7 @@ code --install-extension openprompt-lang-*.vsix
622
929
 
623
930
  ### Funcionalidades
624
931
 
625
- - **Syntax highlighting**: todos los tags (`@kind`, `@props`, `@contract`, etc.) se resaltan en comentarios de TypeScript/JavaScript
932
+ - **Syntax highlighting**: todos los tags (`@kind`, `@props`, `@contract`, etc.) se resaltan tanto en comentarios (`// @kind`) como en código directo (`@kind`)
626
933
  - **Snippets**: escribe `@kind-` y autocompleta:
627
934
  - `@kind-hook` → hook con `@contract`
628
935
  - `@kind-component` → componente con `@props`
@@ -639,25 +946,169 @@ code --install-extension openprompt-lang-*.vsix
639
946
 
640
947
  ---
641
948
 
642
- ## Publicación en npm
949
+ ## OpenCode Integration
950
+
951
+ openPrompt-Lang tiene integración nativa con [OpenCode](https://opencode.ai) mediante **MCP server**, **agente especializado**, y **skill auto-detectable**.
952
+
953
+ ### Configuración rápida
643
954
 
644
955
  ```bash
645
- # 1. Build (si aplica)
646
- npm run build
956
+ npx openprompt-lang integrate --all
957
+ ```
958
+
959
+ Esto genera:
960
+
961
+ - **`.opencode/opencode.json`** — Configuración con MCP server, skill paths y default_agent
962
+ - **`.opencode/agent/openPrompt.md`** — Agente con 4 workflows + Default Workflow
963
+ - **`.opencode/skills/openPrompt/SKILL.md`** — Skill auto-detectable (solo se activa si el proyecto usa anotaciones)
964
+ - **MCP server** — Expone 9 herramientas que Opencode puede llamar directamente
647
965
 
648
- # 2. Test
649
- npm test
966
+ ### MCP Server
967
+
968
+ 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:
969
+
970
+ ```
971
+ ## Result: success|error|warning
972
+ <summary>
973
+ ### Details
974
+ - <detalle 1>
975
+ ### Recommended Actions
976
+ - <acción 1>
977
+ ```
978
+
979
+ | Contexto | Herramienta | Descripción |
980
+ |---|---|---|
981
+ | **Auditar proyecto** | `analyze_project(dir)` | **Primera herramienta** en proyectos nuevos. Retorna config, conteo de archivos, estadísticas |
982
+ | **Validar** | `validate([dir, filePath])` | Escanea proyecto/archivo buscando errores. Usar **antes de commits** |
983
+ | | `lint_file(filePath, strict)` | Debug detallado de un archivo. Más información que `validate` |
984
+ | | `parse_code(code)` | Valida sintaxis inline. Útil durante generación de código |
985
+ | **Contexto** | `context([dir, scope])` | Extrae estructura del proyecto con resumen de config |
986
+ | **Templates** | `search_templates(query, lang)` | Busca templates por keyword (button, auth, fetch) |
987
+ | | `teach_template(templateId, showCode)` | Lección estructurada, prácticas y código del template |
988
+ | **Testing** | `generate_tests(sourceDir, lang, output)` | Genera tests desde `@learn-error`. Usar **después de documentar un bug** |
989
+ | **Scaffold** | `scaffold_project(framework, name)` | Crea estructura de proyecto y archivos base |
650
990
 
651
- # 3. Versionar (e.g. 0.3.0 → 0.4.0 para nuevas features)
652
- npm version minor -m "feat: %s"
991
+ ### Auto-supervisión IA (Default Workflow)
653
992
 
654
- # 4. Publicar
655
- npm publish --access public
993
+ El **skill auto-detectable** se activa cuando el proyecto usa anotaciones y guía a la IA con este ciclo:
656
994
 
657
- # 5. Tag de release
658
- git push --follow-tags
659
995
  ```
996
+ 1. analyze_project → entender el proyecto
997
+ 2. validate → diagnosticar errores
998
+ 3. lint_file → debug profundo de archivos con errores
999
+ 4. fix + @learn-error → documentar lo aprendido
1000
+ 5. generate_tests → prevenir regresión
1001
+ 6. validate → verificar que todo está limpio
1002
+ ```
1003
+
1004
+ El **agente `openPrompt`** incluye 4 workflows especializados (debugging de anotaciones, implementar componente, onboarding, nuevo proyecto) que la IA sigue automáticamente.
1005
+
1006
+ ### Uso manual (sin `integrate`)
1007
+
1008
+ Crea `.opencode/opencode.json`:
1009
+
1010
+ ```jsonc
1011
+ {
1012
+ "$schema": "https://opencode.ai/config.json",
1013
+ "mcp": {
1014
+ "openPrompt": {
1015
+ "type": "local",
1016
+ "command": ["npx", "openprompt-lang", "mcp"],
1017
+ "enabled": true
1018
+ }
1019
+ },
1020
+ "skills": {
1021
+ "paths": [".opencode/skills"]
1022
+ },
1023
+ "default_agent": "openPrompt",
1024
+ "instructions": ["AGENTS.md"]
1025
+ }
1026
+ ```
1027
+
1028
+ Luego agrega `.opencode/agent/openPrompt.md` (instrucciones del agente) y `.opencode/skills/openPrompt/SKILL.md` (skill). O simplemente ejecuta `npx openprompt-lang integrate --all`.
1029
+
1030
+ ---
1031
+
1032
+ ## Tutorial: Usar openPrompt-Lang con cualquier IA
1033
+
1034
+ 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.
1035
+
1036
+ ### Con Google Gemini (u otro chat de IA)
1037
+
1038
+ #### Paso 1: Extraer contexto del proyecto
1039
+
1040
+ ```bash
1041
+ npx openprompt-lang context --output contexto.md
1042
+ ```
1043
+
1044
+ Esto genera `contexto.md` con la estructura del proyecto, configuración, y archivos anotados.
1045
+
1046
+ #### Paso 2: Compartir contexto con la IA
1047
+
1048
+ Abre Google Gemini (o Claude, ChatGPT) y proporciona:
1049
+
1050
+ 1. El archivo `contexto.md` generado
1051
+ 2. El archivo `AGENTS.md` del proyecto (stack, convenciones, reglas)
1052
+ 3. El archivo `docs/SYNTAX.md` (especificación del lenguaje de anotaciones)
1053
+
1054
+ **Prompt sugerido:**
1055
+
1056
+ ```
1057
+ Eres un desarrollador senior trabajando en este proyecto.
1058
+ Usa las anotaciones @kind, @contract, @props, @limit, @use para todo código nuevo que generes.
1059
+ Contexto del proyecto: [pega contexto.md]
1060
+ Reglas del proyecto: [pega AGENTS.md]
1061
+ Especificación de anotaciones: [pega SYNTAX.md]
1062
+ ```
1063
+
1064
+ #### Paso 3: La IA genera código con anotaciones
1065
+
1066
+ La IA entenderá las anotaciones y generará código como:
1067
+
1068
+ ```typescript
1069
+ // @use(kind, contract, limit, deps)
1070
+ // @kind(hook)
1071
+ // @limit(lines: 60, params: 1)
1072
+ // @contract(in: email, password -> out: User | null @error: string)
1073
+ // @deps(@external: [supabase])
1074
+ export function useAuth() { ... }
1075
+ ```
1076
+
1077
+ #### Paso 4: Validar el resultado
1078
+
1079
+ ```bash
1080
+ npx openprompt-lang validate src/mi-archivo.ts
1081
+ ```
1082
+
1083
+ ### Con Cursor AI
1084
+
1085
+ Cursor AI tiene integración nativa con openPrompt-Lang:
1086
+
1087
+ ```bash
1088
+ npx openprompt-lang integrate --all
1089
+ ```
1090
+
1091
+ Esto genera `.cursor/config.json` y `.cursorrules` con reglas específicas para que Cursor entienda las anotaciones. Luego solo abre el proyecto en Cursor:
1092
+
1093
+ 1. El archivo `.cursorrules` le dice a Cursor que use `@kind`, `@props`, etc.
1094
+ 2. Cuando Cursor genere código, seguirá las convenciones del proyecto
1095
+ 3. Ejecuta `openPrompt-Lang validate` para verificar el código generado
1096
+
1097
+ ### Con cualquier editor + API de IA
1098
+
1099
+ Flujo genérico que funciona con cualquier herramienta:
1100
+
1101
+ ```
1102
+ 1. Extraer contexto: npx openprompt-lang context --output contexto.md
1103
+ 2. Validar proyecto: npx openprompt-lang validate
1104
+ 3. Ver sintaxis: docs/SYNTAX.md
1105
+ 4. Compartir: contexto.md + AGENTS.md + SYNTAX.md → IA
1106
+ 5. Iterar: IA genera código → validar → corregir
1107
+ ```
1108
+
1109
+ ### Tips para mejores resultados
660
1110
 
661
- > ⚠️ Requiere cuenta npm: `npm login` primero.
662
- >
663
- > Pre-release: `npm publish --tag next`
1111
+ - **Sé explícito**: dile a la IA "usa anotaciones @kind, @contract, @limit en todo el código"
1112
+ - **Comparte ejemplos**: muestra un archivo anotado como referencia (los ejemplos de este README funcionan bien)
1113
+ - **Valida siempre**: `npx openprompt-lang validate` detecta errores que la IA podría pasar por alto
1114
+ - **Documenta errores**: cuando la IA cometa un error de anotación, agrega `// @learn-error` para que futuras sesiones no repitan el mismo error