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/docs/COMMANDS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# openPrompt-Lang — Comandos CLI
|
|
2
2
|
|
|
3
|
-
> **Versión:** 0.
|
|
3
|
+
> **Versión:** 0.4.0
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -18,160 +18,247 @@ npx openprompt-lang <comando>
|
|
|
18
18
|
|
|
19
19
|
### `init` — Inicializar proyecto
|
|
20
20
|
|
|
21
|
-
Crea la estructura base del proyecto con configuración openPrompt-Lang
|
|
21
|
+
Crea la estructura base del proyecto con configuración openPrompt-Lang.
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
npx openPrompt-Lang init [--name nombre] [--describe "descripción"]
|
|
24
|
+
npx openPrompt-Lang init [--name nombre] [--describe "descripción"] [--existing]
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
**Opciones:**
|
|
28
28
|
- `--name <nombre>` — Nombre del proyecto (default: mi-proyecto)
|
|
29
29
|
- `--describe <texto>` — Descripción para sugerencia de stack vía IA
|
|
30
|
+
- `--existing` — Configurar proyecto existente (solo prompt-lang.json + AGENTS.md)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
### `context` — Extraer contexto para IA
|
|
35
|
+
|
|
36
|
+
Genera un archivo markdown con el código y anotaciones del proyecto.
|
|
30
37
|
|
|
31
|
-
**Ejemplo interactivo:**
|
|
32
38
|
```bash
|
|
33
|
-
npx openPrompt-Lang
|
|
34
|
-
# ? Project name: mi-app
|
|
35
|
-
# ? Use AI to suggest stack? Yes
|
|
36
|
-
# → Crea: package.json (scripts descriptivos), prompt-lang.json, AGENTS.md, docs/, scripts/, estructura src/
|
|
39
|
+
npx openPrompt-Lang context [--output contexto.md] [--scope auth] [--no-ai]
|
|
37
40
|
```
|
|
38
41
|
|
|
39
|
-
**
|
|
42
|
+
**Opciones:**
|
|
43
|
+
- `--output <archivo>` — Archivo de salida (default: contexto.md)
|
|
44
|
+
- `--scope <módulo>` — Filtrar por módulo (@scope)
|
|
45
|
+
- `--no-ai` — No incluir anotaciones PromptLang en el output
|
|
40
46
|
|
|
41
|
-
|
|
42
|
-
|---|---|---|
|
|
43
|
-
| `dev:start` | `vite` | Iniciar servidor de desarrollo |
|
|
44
|
-
| `dev:preview` | `vite preview` | Vista previa del build |
|
|
45
|
-
| `build:prod` | `vite build` | Build para producción |
|
|
46
|
-
| `build:analyze` | `vite build --analyze` | Build con análisis de bundle |
|
|
47
|
-
| `lint:check` | `eslint src --ext .ts,.tsx` | Verificar lint |
|
|
48
|
-
| `lint:fix` | `eslint src --ext .ts,.tsx --fix` | Auto-corregir lint |
|
|
49
|
-
| `type:check` | `tsc --noEmit` | Verificar tipos TypeScript |
|
|
50
|
-
| `quality:doctor` | `npx react-doctor check ./src` | Auditoría React |
|
|
51
|
-
| `test:unit` | `vitest run` | Ejecutar tests unitarios |
|
|
52
|
-
| `test:watch` | `vitest` | Tests en modo watch |
|
|
53
|
-
| `test:coverage` | `vitest run --coverage` | Tests con cobertura |
|
|
54
|
-
| `validate:all` | lint + typecheck + doctor + test | Pipeline completo
|
|
47
|
+
---
|
|
55
48
|
|
|
56
|
-
### `
|
|
49
|
+
### `validate` — Validar proyecto
|
|
57
50
|
|
|
58
|
-
|
|
51
|
+
Ejecuta el pipeline de validación y verifica anotaciones PromptLang.
|
|
59
52
|
|
|
60
53
|
```bash
|
|
61
|
-
npx openPrompt-Lang
|
|
54
|
+
npx openPrompt-Lang validate [--fix]
|
|
62
55
|
```
|
|
63
56
|
|
|
64
57
|
**Opciones:**
|
|
65
|
-
- `--
|
|
66
|
-
|
|
67
|
-
|
|
58
|
+
- `--fix` — Auto-corregir estructura del proyecto (crea src/, docs/, prompt-lang.json, AGENTS.md si faltan)
|
|
59
|
+
|
|
60
|
+
---
|
|
68
61
|
|
|
69
62
|
### `figma` — Generar prompt para Figma
|
|
70
63
|
|
|
71
|
-
Genera un prompt listo para copiar-pegar en
|
|
64
|
+
Genera un prompt listo para copiar-pegar en Figma.
|
|
72
65
|
|
|
73
66
|
```bash
|
|
74
67
|
npx openPrompt-Lang figma
|
|
75
|
-
# ? Tipo: Dashboard SaaS
|
|
76
|
-
# ? Pantallas: Login, Dashboard, Products
|
|
77
|
-
# ? Mobile-first: Yes
|
|
78
|
-
# → docs/PROMPTS/figma-prompt.md
|
|
79
68
|
```
|
|
80
69
|
|
|
81
|
-
|
|
70
|
+
---
|
|
82
71
|
|
|
83
|
-
|
|
72
|
+
### `suggest` — Sugerir stack y estructura
|
|
73
|
+
|
|
74
|
+
Analiza una descripción y sugiere stack, módulos y prioridades vía IA.
|
|
84
75
|
|
|
85
76
|
```bash
|
|
86
|
-
npx openPrompt-Lang
|
|
77
|
+
npx openPrompt-Lang suggest "App de inventario con acceso mobile y dashboard"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### `wizard` — Asistente interactivo
|
|
83
|
+
|
|
84
|
+
Asistente paso a paso para configurar el proyecto openPrompt-Lang, detectar stack, elegir módulos y configurar templates.
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npx openPrompt-Lang wizard
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### `teach` — Enseñanza desde template
|
|
93
|
+
|
|
94
|
+
Muestra lección estructurada, buenas prácticas y código desde un template con @teachMe.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npx openPrompt-Lang teach <templateId> [--lang react] [--code] [--force]
|
|
87
98
|
```
|
|
88
99
|
|
|
89
100
|
**Opciones:**
|
|
90
|
-
- `--
|
|
101
|
+
- `--lang <lang>` — Lenguaje del template (default: react)
|
|
102
|
+
- `--code` — Mostrar código completo del template
|
|
103
|
+
- `--force` — Mostrar template aunque no tenga @teachMe
|
|
91
104
|
|
|
92
|
-
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### `ai-gen` — Generar componentes vía IA
|
|
93
108
|
|
|
94
|
-
|
|
109
|
+
Genera componentes desde descripciones en lenguaje natural usando OpenAI/Anthropic/Ollama.
|
|
95
110
|
|
|
96
111
|
```bash
|
|
97
|
-
npx openPrompt-Lang
|
|
112
|
+
npx openPrompt-Lang ai-gen --description "un botón con variante danger y loading state"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Opciones:**
|
|
116
|
+
- `--description <texto>` — Descripción de lo que generar
|
|
117
|
+
- `--name <nombre>` — Nombre del componente (auto-sugerido si se omite)
|
|
118
|
+
- `--lang <lang>` — Módulo de lenguaje (default: react)
|
|
119
|
+
- `--profile <profile>` — senior | mid | junior (default: mid)
|
|
120
|
+
- `--provider <provider>` — openai | anthropic | ollama | mock
|
|
121
|
+
- `--output <dir>` — Directorio de salida (default: src/components)
|
|
122
|
+
- `--force` — Sobrescribir archivos existentes
|
|
123
|
+
- `--validate` — Ejecutar validación de anotaciones después de generar
|
|
124
|
+
- `--temperature <num>` — Temperatura (default: 0.3)
|
|
125
|
+
- `--max-tokens <num>` — Max tokens (default: 4096)
|
|
126
|
+
|
|
127
|
+
### `ai-providers` — Listar proveedores IA
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npx openPrompt-Lang ai-providers
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
### `extract` — Extraer templates
|
|
136
|
+
|
|
137
|
+
Analiza el proyecto y extrae componentes reutilizables como templates en el módulo de lenguaje.
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
npx openPrompt-Lang extract [sourceDir] [--lang react] [--min-reuse 2] [--dry-run]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Opciones:**
|
|
144
|
+
- `sourceDir` — Directorio a analizar (default: src)
|
|
145
|
+
- `--lang <lang>` — Módulo de lenguaje destino
|
|
146
|
+
- `--min-reuse <n>` — Mínimo de imports para calificar (default: 2)
|
|
147
|
+
- `--dry-run` — Solo analizar, no escribir archivos
|
|
148
|
+
|
|
149
|
+
### `analyze` — Analizar proyecto
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
npx openPrompt-Lang analyze [sourceDir]
|
|
98
153
|
```
|
|
99
154
|
|
|
100
|
-
|
|
155
|
+
Muestra estructura, dependencias y salud del código.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### `integrate` — Integrar con editores
|
|
101
160
|
|
|
102
|
-
|
|
161
|
+
Configura Opencode, Cursor y VS Code para el proyecto.
|
|
103
162
|
|
|
104
163
|
```bash
|
|
105
|
-
|
|
106
|
-
|
|
164
|
+
npx openPrompt-Lang integrate [--all] [--lang react] [--no-ask]
|
|
165
|
+
```
|
|
107
166
|
|
|
108
|
-
|
|
109
|
-
|
|
167
|
+
**Opciones:**
|
|
168
|
+
- `--all` — Configurar todas las integraciones sin preguntar
|
|
169
|
+
- `--lang <lang>` — Lenguaje (auto-detectado desde prompt-lang.json)
|
|
170
|
+
- `--no-ask` — Saltar prompts interactivos
|
|
110
171
|
|
|
111
|
-
|
|
112
|
-
|
|
172
|
+
Genera:
|
|
173
|
+
- `.opencode/opencode.json` + `.opencode/agent/openPrompt.md` + `.opencode/skills/openPrompt/SKILL.md`
|
|
174
|
+
- `.cursor/config.json` + `.cursorrules`
|
|
175
|
+
- `.vscode/settings.json` + `.vscode/extensions.json`
|
|
113
176
|
|
|
114
|
-
|
|
115
|
-
npx openPrompt-Lang component manifest
|
|
177
|
+
---
|
|
116
178
|
|
|
117
|
-
|
|
118
|
-
|
|
179
|
+
### `qa-gen` — Generar tests desde errores aprendidos
|
|
180
|
+
|
|
181
|
+
Genera tests Vitest desde anotaciones @learn-error.
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
npx openPrompt-Lang qa-gen [--lang react] [--source src] [--output tests/] [--dry-run]
|
|
119
185
|
```
|
|
120
186
|
|
|
121
|
-
**
|
|
187
|
+
**Opciones:**
|
|
188
|
+
- `--lang <lang>` — Módulo de lenguaje
|
|
189
|
+
- `--source <dir>` — Directorio a escanear por @learn-error
|
|
190
|
+
- `--output <dir>` — Directorio de salida (default: src/__tests__)
|
|
191
|
+
- `--template <id>` — Generar tests solo para un template específico
|
|
192
|
+
- `--dry-run` — Previsualizar sin escribir archivos
|
|
193
|
+
- `--no-scan` — Saltar escaneo de nuevas anotaciones @learn-error
|
|
194
|
+
|
|
195
|
+
### `qa-learn` — Aprender de errores
|
|
122
196
|
|
|
197
|
+
Parsea @learn-error de un archivo y lo persiste al módulo de lenguaje.
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
npx openPrompt-Lang qa-learn --file src/mi-archivo.ts [--lang react]
|
|
123
201
|
```
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
### `lang` — Gestión de módulos de lenguaje
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
npx openPrompt-Lang lang list # Listar lenguajes
|
|
209
|
+
npx openPrompt-Lang lang index react [--category components] # Índice de templates
|
|
210
|
+
npx openPrompt-Lang lang search "button" [--lang react] # Buscar templates
|
|
211
|
+
npx openPrompt-Lang lang errors [react] [--template button-primary] # Errores aprendidos
|
|
132
212
|
```
|
|
133
213
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
### `scaffold` — Scaffolding de proyectos
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
npx openPrompt-Lang scaffold folders react [--name mi-app] [--force] # Crear estructura
|
|
220
|
+
npx openPrompt-Lang scaffold list # Frameworks disponibles
|
|
142
221
|
```
|
|
143
222
|
|
|
144
223
|
---
|
|
145
224
|
|
|
146
|
-
|
|
225
|
+
### `component` — Biblioteca de componentes
|
|
147
226
|
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
"base": ["react", "typescript", "vite", "tailwind"],
|
|
154
|
-
"extensions": ["supabase"]
|
|
155
|
-
},
|
|
156
|
-
"profile": "senior",
|
|
157
|
-
"pipeline": {
|
|
158
|
-
"pre-commit": ["lint", "typecheck", "doctor", "test"],
|
|
159
|
-
"scripts": {
|
|
160
|
-
"lint:check": "eslint src --ext .ts,.tsx",
|
|
161
|
-
"type:check": "tsc --noEmit",
|
|
162
|
-
"quality:doctor": "npx react-doctor check ./src",
|
|
163
|
-
"test:unit": "vitest run"
|
|
164
|
-
}
|
|
165
|
-
},
|
|
166
|
-
"annotations": { "enabled": true, "strict": false },
|
|
167
|
-
"docs": { "commits": true, "logs": true, "backlog": true },
|
|
168
|
-
"extractor": {
|
|
169
|
-
"ignore": [".env", "*.local", "dist"],
|
|
170
|
-
"output": "contexto.md"
|
|
171
|
-
}
|
|
172
|
-
}
|
|
227
|
+
```bash
|
|
228
|
+
npx openPrompt-Lang component init [--library ./diseno-componentes] [--name ...] # Inicializar biblioteca
|
|
229
|
+
npx openPrompt-Lang component list [--library ./diseno-componentes] # Listar componentes
|
|
230
|
+
npx openPrompt-Lang component add ConfirmModal [--library ./diseno-componentes] # Agregar componente
|
|
231
|
+
npx openPrompt-Lang component manifest [--library ./diseno-componentes] # Mostrar manifiesto
|
|
173
232
|
```
|
|
174
233
|
|
|
234
|
+
Agregar componente con opciones:
|
|
235
|
+
```bash
|
|
236
|
+
npx openPrompt-Lang component add Button --template --lang react --variants primary,danger --output MiBoton --force
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
### `mcp` — Servidor MCP
|
|
242
|
+
|
|
243
|
+
Inicia el servidor MCP (Model Context Protocol) para integración con Opencode.
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
npx openPrompt-Lang mcp
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Lee JSON-RPC de stdin y escribe respuestas en stdout. Expone 9 herramientas:
|
|
250
|
+
`validate`, `lint_file`, `parse_code`, `context`, `search_templates`, `teach_template`, `generate_tests`, `analyze_project`, `scaffold_project`.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
### `lint` — Linting de anotaciones (por archivo)
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
npx openPrompt-Lang lint src/hooks/useAuth.ts
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Muestra anotaciones encontradas, errores y warnings. Internamente usa `lintFile()` del parser de anotaciones.
|
|
261
|
+
|
|
175
262
|
---
|
|
176
263
|
|
|
177
264
|
## Pipeline de Validación
|
|
@@ -181,18 +268,13 @@ npx openPrompt-Lang validate
|
|
|
181
268
|
# → 1. Verifica estructura del proyecto
|
|
182
269
|
# → 2. Valida prompt-lang.json y AGENTS.md
|
|
183
270
|
# → 3. Analiza anotaciones PromptLang en archivos
|
|
184
|
-
# → 4.
|
|
185
|
-
# → 5. Reporta resumen
|
|
271
|
+
# → 4. Reporta resumen de errores/warnings
|
|
186
272
|
```
|
|
187
273
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
## Linting de Anotaciones (por archivo)
|
|
191
|
-
|
|
274
|
+
Con `--fix`:
|
|
192
275
|
```bash
|
|
193
|
-
npx openPrompt-Lang
|
|
194
|
-
# →
|
|
195
|
-
# → Reporta errores y warnings
|
|
276
|
+
npx openPrompt-Lang validate --fix
|
|
277
|
+
# → Además: crea src/, docs/, prompt-lang.json, AGENTS.md si faltan
|
|
196
278
|
```
|
|
197
279
|
|
|
198
280
|
---
|
|
@@ -200,30 +282,21 @@ npx openPrompt-Lang lint src/hooks/useAuth.ts
|
|
|
200
282
|
## Variables de Entorno
|
|
201
283
|
|
|
202
284
|
| Variable | Propósito |
|
|
203
|
-
|
|
204
|
-
| `OPENAI_API_KEY` | API key de OpenAI para sugerencias IA |
|
|
205
|
-
| `
|
|
285
|
+
|---|---|
|
|
286
|
+
| `OPENAI_API_KEY` | API key de OpenAI para sugerencias IA / ai-gen |
|
|
287
|
+
| `ANTHROPIC_API_KEY` | API key de Anthropic para ai-gen |
|
|
288
|
+
| `OPENPROMPT_API_KEY` | API key alternativa |
|
|
206
289
|
|
|
207
290
|
---
|
|
208
291
|
|
|
209
292
|
## VS Code Extension
|
|
210
293
|
|
|
211
|
-
El paquete incluye una extensión
|
|
212
|
-
|
|
213
|
-
- **Syntax highlighting**: todos los tags PromptLang
|
|
214
|
-
- **Snippets**:
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
- `@use-header` → declaración `@use()`
|
|
221
|
-
- `@props-ts` → props con sintaxis tipo TypeScript
|
|
222
|
-
- **Instalación**:
|
|
223
|
-
```bash
|
|
224
|
-
# Desde el proyecto
|
|
225
|
-
code --install-extension vscode-extension/
|
|
226
|
-
|
|
227
|
-
# O empaquetar como .vsix
|
|
228
|
-
cd vscode-extension && npx @vscode/vsce package && code --install-extension *.vsix
|
|
229
|
-
```
|
|
294
|
+
El paquete incluye una extensión VS Code en `vscode-extension/`:
|
|
295
|
+
|
|
296
|
+
- **Syntax highlighting**: todos los tags PromptLang se resaltan
|
|
297
|
+
- **Snippets**: `@kind-hook`, `@kind-component`, `@kind-service`, `@kind-page`, `@kind-store`, `@use-header`, `@props-ts`
|
|
298
|
+
|
|
299
|
+
**Instalación:**
|
|
300
|
+
```bash
|
|
301
|
+
code --install-extension ./node_modules/openprompt-lang/vscode-extension/
|
|
302
|
+
```
|
package/docs/COMMITS/INDEX.md
CHANGED
|
@@ -9,3 +9,4 @@
|
|
|
9
9
|
| 2026-05-14 | v0.3.0 | feat: versionado SemVer, sistema de componentes, preparar npm publish |
|
|
10
10
|
| 2026-05-15 | v0.3.0 | fix: eliminar dependencia glob no usada |
|
|
11
11
|
| 2026-05-15 | v0.3.0 | fix: parser paréntesis anidados, @props TS-like, @state(error) condicional, VS Code extension |
|
|
12
|
+
| 2026-05-15 | v0.4.0 | feat: 16 tests nuevos (ai-gen, extract, component), 12 templates Vue, ESLint+Prettier, bugfix analyzeImports |
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Prompt para dar contexto de openPrompt-Lang a cualquier IA
|
|
2
|
+
|
|
3
|
+
Copia y pega este prompt al empezar una conversación con **Google Gemini**, **Claude**, **ChatGPT**, o cualquier asistente de IA.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Prompt base
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Eres un desarrollador senior especializado en React + TypeScript.
|
|
11
|
+
Vas a trabajar en un proyecto que usa **openPrompt-Lang** — un framework de anotaciones como código para desarrollo asistido por IA.
|
|
12
|
+
|
|
13
|
+
## Reglas obligatorias
|
|
14
|
+
|
|
15
|
+
1. TODO archivo nuevo debe empezar con `// @use()` declarando los tags que usa
|
|
16
|
+
2. Usa `@kind` para definir el tipo de elemento (component, hook, service, page, store, util)
|
|
17
|
+
3. Respeta los límites de líneas por archivo:
|
|
18
|
+
- hook: max 80 líneas
|
|
19
|
+
- component: max 120 líneas
|
|
20
|
+
- page: max 200 líneas
|
|
21
|
+
- service: max 150 líneas
|
|
22
|
+
- util: max 100 líneas
|
|
23
|
+
4. Cada componente debe manejar los estados: loading, empty, error, success
|
|
24
|
+
5. 100% Tailwind utility classes (no CSS personalizado)
|
|
25
|
+
6. Named exports, no default exports
|
|
26
|
+
7. No usar `any` — usa `unknown` + narrowing
|
|
27
|
+
|
|
28
|
+
## Anotaciones disponibles
|
|
29
|
+
|
|
30
|
+
| Tag | Propósito | Ejemplo |
|
|
31
|
+
|-----|-----------|---------|
|
|
32
|
+
| @use | Importar tags | `// @use(kind, contract, limit, deps)` |
|
|
33
|
+
| @kind | Tipo de elemento | `// @kind(component)` |
|
|
34
|
+
| @contract | Contrato de función | `// @contract(in: X -> out: Y @error: Z)` |
|
|
35
|
+
| @props | Props de componente | `// @props({ name: string, age?: number })` |
|
|
36
|
+
| @limit | Límites del archivo | `// @limit(lines: 120, functions: 3)` |
|
|
37
|
+
| @state | Estados visuales | `// @state(loading, empty, error, success)` |
|
|
38
|
+
| @compose | Dependencias internas | `// @compose(Header, Sidebar)` |
|
|
39
|
+
| @deps | Dependencias externas | `// @deps(@external: [react, zustand])` |
|
|
40
|
+
| @platform | Plataforma target | `// @platform(web)` |
|
|
41
|
+
| @scope | Módulo de impacto | `// @scope(module: auth, affects: [login])` |
|
|
42
|
+
| @pattern | Patrón de diseño | `// @pattern(composition)` |
|
|
43
|
+
| @test | Requisitos de test | `// @test(@coverage: 80)` |
|
|
44
|
+
| @meta | Metadatos | `// @meta(@version: "1.0.0")` |
|
|
45
|
+
| @learn-error | Documentar bug | `// @learn-error id=X input='...' expected=N actual=N fix='...'` |
|
|
46
|
+
|
|
47
|
+
## Validación cruzada
|
|
48
|
+
|
|
49
|
+
- `@kind(hook)` → requiere `@contract`, prohíbe `@props`, max 80 líneas
|
|
50
|
+
- `@kind(component)` → requiere `@props` (recomendado), prohíbe `@contract`, max 120 líneas
|
|
51
|
+
- `@kind(page)` → requiere `@compose`, max 200 líneas
|
|
52
|
+
- `@kind(service)` → requiere `@contract`, prohíbe `@props` y `@state`, max 150 líneas
|
|
53
|
+
- `@kind(store)` → sugiere `@deps`, max 100 líneas
|
|
54
|
+
|
|
55
|
+
## Ejemplo
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// @use(kind, props, state, limit, pattern)
|
|
59
|
+
// @kind(component)
|
|
60
|
+
// @props({ variant: string, size: string, children: ReactNode, disabled?: boolean })
|
|
61
|
+
// @state(idle, disabled, loading)
|
|
62
|
+
// @limit(lines: 90, functions: 2)
|
|
63
|
+
// @pattern(composition)
|
|
64
|
+
export function Button(props: ButtonProps) { ... }
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Contexto del proyecto
|
|
68
|
+
|
|
69
|
+
[PEGA AQUI EL CONTENIDO DE contexto.md GENERADO CON: npx openprompt-lang context]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Cómo usarlo
|
|
75
|
+
|
|
76
|
+
1. **Extrae el contexto del proyecto:**
|
|
77
|
+
```bash
|
|
78
|
+
npx openprompt-lang context --output contexto.md
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
2. **Copia el prompt base arriba y pégalo en la conversación con la IA.**
|
|
82
|
+
|
|
83
|
+
3. **Reemplaza `[PEGA AQUI EL CONTENIDO DE contexto.md]` con el contenido real de `contexto.md`.**
|
|
84
|
+
|
|
85
|
+
4. **Alternativa rápida** (si el proyecto es pequeño):
|
|
86
|
+
```bash
|
|
87
|
+
# Pega directamente estos archivos a la IA:
|
|
88
|
+
cat contexto.md AGENTS.md docs/SYNTAX.md | pbcopy # macOS
|
|
89
|
+
cat contexto.md AGENTS.md docs/SYNTAX.md | clip # Windows
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Tips para mejores resultados
|
|
95
|
+
|
|
96
|
+
- **Sé específico**: di "genera un hook useAuth con @kind(hook) y @contract" en vez de solo "genera un hook"
|
|
97
|
+
- **Muestra ejemplos**: si la IA genera código sin anotaciones, muestra un ejemplo concreto
|
|
98
|
+
- **Valida siempre**: `npx openprompt-lang validate` detecta errores que la IA pueda pasar por alto
|
|
99
|
+
- **Documenta errores**: cuando la IA cometa un error, agrega `// @learn-error` para que futuras sesiones no lo repitan
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# PromptLang para C# / .NET
|
|
2
|
+
|
|
3
|
+
## Tags Adaptados
|
|
4
|
+
|
|
5
|
+
| Tag PromptLang | Equivalente C# | Descripción |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `@kind(controller)` | `[ApiController]` | Controlador Web API |
|
|
8
|
+
| `@kind(service)` | `class Service` | Lógica de negocio |
|
|
9
|
+
| `@kind(repository)` | `DbContext` / `Repository` | Acceso a datos EF Core |
|
|
10
|
+
| `@kind(entity)` | `class Entity` | Modelo de datos |
|
|
11
|
+
| `@kind(dto)` | `record` | DTO |
|
|
12
|
+
| `@kind(middleware)` | `Middleware` | Middleware pipeline |
|
|
13
|
+
|
|
14
|
+
## Contratos
|
|
15
|
+
|
|
16
|
+
```csharp
|
|
17
|
+
// @kind(controller)
|
|
18
|
+
// @contract(in: CreateUserRequest -> out: UserResponse @error: ValidationProblemDetails)
|
|
19
|
+
// @platform(dotnet)
|
|
20
|
+
[ApiController]
|
|
21
|
+
[Route("api/[controller]")]
|
|
22
|
+
public class UsersController : ControllerBase { ... }
|
|
23
|
+
|
|
24
|
+
// @kind(service)
|
|
25
|
+
// @contract(in: UserDto -> out: User @error: DbUpdateException)
|
|
26
|
+
// @limit(lines: 120)
|
|
27
|
+
public class UserService { ... }
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Scaffolding Generado
|
|
31
|
+
|
|
32
|
+
- `UsersController.cs` (endpoints REST)
|
|
33
|
+
- `UserService.cs` (lógica con DI)
|
|
34
|
+
- `UserRepository.cs` (EF Core queries)
|
|
35
|
+
- `User.cs` (entidad con data annotations)
|
|
36
|
+
- `UserDto.cs` (record inmutable)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# PromptLang para Java Spring Boot
|
|
2
|
+
|
|
3
|
+
## Tags Adaptados
|
|
4
|
+
|
|
5
|
+
| Tag PromptLang | Equivalente Java | Descripción |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `@kind(service)` | `@Service` | Servicio con lógica de negocio |
|
|
8
|
+
| `@kind(controller)` | `@RestController` | Controlador REST |
|
|
9
|
+
| `@kind(repository)` | `@Repository` | Acceso a datos JPA |
|
|
10
|
+
| `@kind(entity)` | `@Entity` | Entidad JPA |
|
|
11
|
+
| `@kind(dto)` | `record` / `class` | DTO de entrada/salida |
|
|
12
|
+
| `@kind(config)` | `@Configuration` | Configuración |
|
|
13
|
+
| `@kind(exception)` | `@ControllerAdvice` | Manejador de excepciones |
|
|
14
|
+
|
|
15
|
+
## Contratos
|
|
16
|
+
|
|
17
|
+
```java
|
|
18
|
+
// @kind(controller)
|
|
19
|
+
// @contract(in: CreateUserDTO -> out: UserDTO @error: ValidationException)
|
|
20
|
+
// @platform(spring-boot)
|
|
21
|
+
@RestController
|
|
22
|
+
@RequestMapping("/api/users")
|
|
23
|
+
public class UserController { ... }
|
|
24
|
+
|
|
25
|
+
// @kind(service)
|
|
26
|
+
// @contract(in: UserDTO -> out: User @error: DataIntegrityException)
|
|
27
|
+
// @limit(lines: 100)
|
|
28
|
+
@Service
|
|
29
|
+
public class UserService { ... }
|
|
30
|
+
|
|
31
|
+
// @kind(repository)
|
|
32
|
+
// @contract(in: Long -> out: Optional<User>)
|
|
33
|
+
@Repository
|
|
34
|
+
public interface UserRepository extends JpaRepository<User, Long> { ... }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Scaffolding Generado
|
|
38
|
+
|
|
39
|
+
`npx scaffold service --platform=spring-boot --contract="DTO->Entity"` genera:
|
|
40
|
+
- `UserController.java` (REST endpoints)
|
|
41
|
+
- `UserService.java` (lógica con @Transactional)
|
|
42
|
+
- `UserRepository.java` (JPA CRUD)
|
|
43
|
+
- `User.java` (entidad con validaciones @NotNull, @Email)
|
|
44
|
+
- `UserDTO.java` (record con @Valid)
|
|
45
|
+
- `GlobalExceptionHandler.java` (manejo errores)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# PromptLang para Python FastAPI
|
|
2
|
+
|
|
3
|
+
## Tags Adaptados
|
|
4
|
+
|
|
5
|
+
| Tag PromptLang | Equivalente Python | Descripción |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `@kind(router)` | `@router` | Router de FastAPI |
|
|
8
|
+
| `@kind(service)` | `class Service` | Lógica de negocio |
|
|
9
|
+
| `@kind(model)` | `BaseModel` (Pydantic) | Modelo de datos |
|
|
10
|
+
| `@kind(schema)` | `BaseModel` | Esquema request/response |
|
|
11
|
+
| `@kind(deps)` | `Depends()` | Dependencias FastAPI |
|
|
12
|
+
|
|
13
|
+
## Contratos
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
# @kind(router)
|
|
17
|
+
# @contract(in: CreateUserSchema -> out: UserSchema @error: HTTPException)
|
|
18
|
+
# @platform(fastapi)
|
|
19
|
+
@router.post("/users", response_model=UserSchema)
|
|
20
|
+
async def create_user(data: CreateUserSchema): ...
|
|
21
|
+
|
|
22
|
+
# @kind(service)
|
|
23
|
+
# @contract(in: UserCreate -> out: User @error: IntegrityError)
|
|
24
|
+
# @limit(lines: 80)
|
|
25
|
+
class UserService:
|
|
26
|
+
async def create(self, data: UserCreate) -> User: ...
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Scaffolding Generado
|
|
30
|
+
|
|
31
|
+
- `routes/users.py` (endpoints)
|
|
32
|
+
- `services/user_service.py` (lógica)
|
|
33
|
+
- `models/user.py` (SQLAlchemy model)
|
|
34
|
+
- `schemas/user.py` (Pydantic schemas)
|
|
35
|
+
- `core/database.py` (conexión)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# PromptLang para Unity (C#)
|
|
2
|
+
|
|
3
|
+
## Tags Adaptados
|
|
4
|
+
|
|
5
|
+
| Tag PromptLang | Equivalente Unity | Descripción |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `@kind(monobehaviour)` | `MonoBehaviour` | Componente Unity |
|
|
8
|
+
| `@kind(scriptable)` | `ScriptableObject` | Configuración/Data |
|
|
9
|
+
| `@kind(manager)` | `GameManager` | Singleton manager |
|
|
10
|
+
| `@kind(ui)` | `UI Behaviour` | Componente UI Unity |
|
|
11
|
+
| `@kind(state)` | `StateMachine` | Máquina de estados |
|
|
12
|
+
|
|
13
|
+
## Contratos
|
|
14
|
+
|
|
15
|
+
```csharp
|
|
16
|
+
// @kind(monobehaviour)
|
|
17
|
+
// @contract(in: float -> out: Vector3)
|
|
18
|
+
// @limit(lines: 150)
|
|
19
|
+
// @platform(unity)
|
|
20
|
+
public class PlayerMovement : MonoBehaviour { ... }
|
|
21
|
+
|
|
22
|
+
// @kind(manager)
|
|
23
|
+
// @contract(in: GameEvent -> out: Unit @error: GameException)
|
|
24
|
+
public class GameManager : MonoBehaviour { ... }
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Notas
|
|
28
|
+
- `@limit` default para MonoBehaviour: 150 líneas
|
|
29
|
+
- `@state` se mapea a animator parameters
|
|
30
|
+
- Usar `@deps(@external: [UniTask, DOTween])` para dependencias comunes
|