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.
- package/README.md +483 -32
- package/bin/cli.js +232 -41
- package/bin/create.js +135 -0
- package/bin/lint.js +20 -21
- package/docs/COMMANDS.md +200 -127
- package/docs/COMMITS/INDEX.md +1 -0
- package/docs/PROMPT_AI_CONTEXT.md +99 -0
- package/docs/langs/dotnet.md +36 -0
- package/docs/langs/java-spring.md +45 -0
- package/docs/langs/python-fastapi.md +35 -0
- package/docs/langs/unity.md +30 -0
- package/docs/langs/vue-nuxt.md +36 -0
- package/package.json +31 -3
- package/scaffolds/.cursorrules +6 -0
- package/scaffolds/AGENTS.md +27 -0
- package/scaffolds/Dockerfile +11 -0
- package/scaffolds/capacitor.config.ts +17 -0
- package/scaffolds/netlify.toml +8 -0
- package/scaffolds/prompt-lang.json +15 -0
- package/scaffolds/railway.json +12 -0
- package/scaffolds/tailwind.config.js +8 -0
- package/scaffolds/tauri.conf.json +26 -0
- package/schemas/language-module.json +116 -0
- package/schemas/prompt-lang.json +38 -3
- package/schemas/structures.json +145 -0
- package/src/ai/prompt-builder.js +184 -0
- package/src/ai/providers.js +247 -0
- package/src/annotations/registry.js +39 -0
- package/src/annotations/tags.json +24 -0
- package/src/commands/ai-gen.js +161 -0
- package/src/commands/component.js +242 -212
- package/src/commands/context.js +184 -109
- package/src/commands/extract.js +242 -0
- package/src/commands/figma.js +15 -15
- package/src/commands/init.js +197 -93
- package/src/commands/integrate.js +406 -0
- package/src/commands/lang.js +148 -0
- package/src/commands/qa-gen.js +139 -0
- package/src/commands/scaffold.js +127 -0
- package/src/commands/suggest.js +24 -14
- package/src/commands/teach.js +110 -0
- package/src/commands/validate.js +143 -83
- package/src/commands/wizard.js +456 -0
- package/src/generators/figma-prompt.js +20 -12
- package/src/language-service/plugin.cjs +94 -0
- package/src/language-service/plugin.d.ts +6 -0
- package/src/mcp-server.js +605 -0
- package/src/templates/langs/react/INDEX.json +262 -0
- package/src/templates/langs/react/MODULE.json +166 -0
- package/src/templates/langs/react/templates/hooks/useAuth.template.ts +134 -0
- package/src/templates/langs/react/templates/hooks/useDebounce.template.ts +45 -0
- package/src/templates/langs/react/templates/hooks/useForm.template.ts +146 -0
- package/src/templates/langs/react/templates/hooks/usePagination.template.ts +108 -0
- package/src/templates/langs/react/templates/services/apiService.template.ts +123 -0
- package/src/templates/langs/react/templates/ui/Button.template.tsx +87 -0
- package/src/templates/langs/react/templates/ui/Card.template.tsx +85 -0
- package/src/templates/langs/react/templates/ui/DataTable.template.tsx +163 -0
- package/src/templates/langs/react/templates/ui/Input.template.tsx +96 -0
- package/src/templates/langs/react/templates/ui/Modal.template.tsx +133 -0
- package/src/templates/langs/react/templates/ui/Select.template.tsx +99 -0
- package/src/templates/langs/vue/INDEX.json +246 -0
- package/src/templates/langs/vue/MODULE.json +105 -0
- package/src/templates/langs/vue/templates/composables/useAuth.template.ts +106 -0
- package/src/templates/langs/vue/templates/composables/useDebounce.template.ts +47 -0
- package/src/templates/langs/vue/templates/composables/useFetch.template.ts +54 -0
- package/src/templates/langs/vue/templates/composables/useForm.template.ts +127 -0
- package/src/templates/langs/vue/templates/composables/usePagination.template.ts +98 -0
- package/src/templates/langs/vue/templates/services/apiService.template.ts +116 -0
- package/src/templates/langs/vue/templates/ui/Button.template.vue +79 -0
- package/src/templates/langs/vue/templates/ui/Card.template.vue +73 -0
- package/src/templates/langs/vue/templates/ui/DataTable.template.vue +115 -0
- package/src/templates/langs/vue/templates/ui/Input.template.vue +70 -0
- package/src/templates/langs/vue/templates/ui/Modal.template.vue +112 -0
- package/src/templates/langs/vue/templates/ui/Select.template.vue +77 -0
- package/src/templates/scripts/log-actividad.sh +32 -0
- package/src/templates/scripts/log-commit.sh +35 -0
- package/src/templates/scripts/log-error.sh +45 -0
- package/src/templates/scripts/validate.sh +23 -0
- package/src/ts-transformer/index.cjs +86 -0
- package/src/utils/ai.js +35 -53
- package/src/utils/annotations.js +260 -214
- package/src/utils/config.js +61 -13
- package/src/utils/error-learner.js +203 -0
- package/src/utils/file-utils.js +119 -0
- package/src/utils/language-loader.js +167 -0
- package/src/utils/template-utils.js +45 -0
- package/src/vite-plugin/index.js +54 -0
- package/vscode-extension/package.json +23 -2
- package/vscode-extension/snippets/promptlang.json +1 -3
- 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.
|
|
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
|
|
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/
|
|
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
|
-
│ │
|
|
523
|
-
│
|
|
524
|
-
│
|
|
525
|
-
│
|
|
526
|
-
│
|
|
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 ← ~
|
|
529
|
-
│
|
|
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.
|
|
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
|
|
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
|
-
##
|
|
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
|
-
|
|
646
|
-
|
|
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
|
-
|
|
649
|
-
|
|
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
|
-
|
|
652
|
-
npm version minor -m "feat: %s"
|
|
991
|
+
### Auto-supervisión IA (Default Workflow)
|
|
653
992
|
|
|
654
|
-
|
|
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
|
-
|
|
662
|
-
|
|
663
|
-
|
|
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
|