nex-app 0.2.2 → 0.2.4
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/generator/cursor-integration.js +7 -4
- package/package.json +3 -1
- package/registry/README.md +433 -0
- package/registry/ada/manifest.yaml +205 -0
- package/registry/rex/manifest.yaml +242 -0
- package/registry/vex/README.md +500 -0
- package/registry/vex/manifest.yaml +242 -0
- package/scripts/publish.js +136 -0
- package/ui/assets/app.js +6 -1
- package/ui/index.html +3 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# BMAD Agent Manifest - VEX
|
|
2
|
+
id: vex
|
|
3
|
+
name: "VEX - The Conversion Hypnotist"
|
|
4
|
+
tagline: "Expert em Hipnose de Conversão para SaaS"
|
|
5
|
+
icon: "🎭"
|
|
6
|
+
type: bmad
|
|
7
|
+
framework: Cursor
|
|
8
|
+
category: expert
|
|
9
|
+
subcategory: sales-marketing
|
|
10
|
+
|
|
11
|
+
# Version
|
|
12
|
+
version: 1.2.0
|
|
13
|
+
semantic_version:
|
|
14
|
+
major: 1
|
|
15
|
+
minor: 2
|
|
16
|
+
patch: 0
|
|
17
|
+
|
|
18
|
+
# Author
|
|
19
|
+
author:
|
|
20
|
+
name: INOSX
|
|
21
|
+
email: contact@inosx.com
|
|
22
|
+
github: INOSX
|
|
23
|
+
organization: INOSX
|
|
24
|
+
|
|
25
|
+
# Description
|
|
26
|
+
description: |
|
|
27
|
+
Especialista em Conversion Rate Optimization para plataformas SaaS.
|
|
28
|
+
Aplica os 5 Gatilhos de Cialdini e framework AIDA Hypnotic para
|
|
29
|
+
otimizar páginas de conversão através de análise de copy, design e UX.
|
|
30
|
+
|
|
31
|
+
long_description: |
|
|
32
|
+
VEX combina psicologia de persuasão de Robert Cialdini com análise
|
|
33
|
+
técnica de UX para identificar quick wins que aumentam conversão
|
|
34
|
+
em 30-60%. Framework AIDA Hypnotic exclusivo mapeia exatamente onde
|
|
35
|
+
o "transe de conversão" quebra e como reconstruí-lo.
|
|
36
|
+
|
|
37
|
+
Principais metodologias:
|
|
38
|
+
- 5 Gatilhos de Cialdini (Reciprocidade, Compromisso, Prova Social, Autoridade, Escassez)
|
|
39
|
+
- Framework AIDA Hypnotic (Attention, Interest, Desire, Action)
|
|
40
|
+
- Análise de copy persuasivo
|
|
41
|
+
- UX/UI para conversão
|
|
42
|
+
- A/B testing hypothesis generation
|
|
43
|
+
- Psychological triggers mapping
|
|
44
|
+
|
|
45
|
+
# Tags
|
|
46
|
+
tags:
|
|
47
|
+
- conversion
|
|
48
|
+
- cro
|
|
49
|
+
- saas
|
|
50
|
+
- marketing
|
|
51
|
+
- ux
|
|
52
|
+
- psychology
|
|
53
|
+
- cialdini
|
|
54
|
+
- persuasion
|
|
55
|
+
- landing-pages
|
|
56
|
+
- optimization
|
|
57
|
+
- bmad
|
|
58
|
+
- cursor
|
|
59
|
+
- expert
|
|
60
|
+
|
|
61
|
+
# Compatibility
|
|
62
|
+
compatibility:
|
|
63
|
+
cursor_version: ">=0.40.0"
|
|
64
|
+
nex_version: ">=1.0.0" # Também funciona com NEX
|
|
65
|
+
os: ["windows", "macos", "linux"]
|
|
66
|
+
required_tools:
|
|
67
|
+
- browser # Para análise de páginas
|
|
68
|
+
|
|
69
|
+
# BMAD Specific
|
|
70
|
+
bmad:
|
|
71
|
+
expert_type: conversion
|
|
72
|
+
cursor_integration: true
|
|
73
|
+
rules_file: vex.cursorrules
|
|
74
|
+
activation_trigger: "@vex"
|
|
75
|
+
|
|
76
|
+
# Dependencies
|
|
77
|
+
dependencies:
|
|
78
|
+
agents: []
|
|
79
|
+
tools:
|
|
80
|
+
- mcp_cursor-ide-browser # Browser MCP para análise
|
|
81
|
+
optional_tools:
|
|
82
|
+
- mcp_vercel # Para analisar deployments Vercel
|
|
83
|
+
- screenshot # Para análise visual
|
|
84
|
+
|
|
85
|
+
# Capabilities
|
|
86
|
+
capabilities:
|
|
87
|
+
- Landing page analysis (5 Gatilhos de Cialdini)
|
|
88
|
+
- Pricing page optimization
|
|
89
|
+
- Conversion funnel mapping
|
|
90
|
+
- A/B test hypothesis generation
|
|
91
|
+
- Copy optimization (persuasive writing)
|
|
92
|
+
- Psychological triggers identification
|
|
93
|
+
- CTA optimization
|
|
94
|
+
- Social proof implementation
|
|
95
|
+
- Urgency & scarcity tactics
|
|
96
|
+
- Trust signals analysis
|
|
97
|
+
- Mobile conversion optimization
|
|
98
|
+
- User journey mapping
|
|
99
|
+
|
|
100
|
+
# Commands (Cursor-style)
|
|
101
|
+
commands:
|
|
102
|
+
- trigger: analyze-page
|
|
103
|
+
description: Análise completa com 5 gatilhos de Cialdini
|
|
104
|
+
usage: "@vex analyze-page [URL]"
|
|
105
|
+
example: "@vex analyze-page https://myapp.com/pricing"
|
|
106
|
+
|
|
107
|
+
- trigger: hypnotic-analysis
|
|
108
|
+
description: Framework AIDA Hypnotic completo
|
|
109
|
+
usage: "@vex hypnotic-analysis [URL]"
|
|
110
|
+
example: "@vex hypnotic-analysis https://myapp.com/landing"
|
|
111
|
+
|
|
112
|
+
- trigger: quick-scan
|
|
113
|
+
description: Top 3 quick wins em 5 minutos
|
|
114
|
+
usage: "@vex quick-scan [URL]"
|
|
115
|
+
example: "@vex quick-scan https://myapp.com"
|
|
116
|
+
|
|
117
|
+
- trigger: cta-optimize
|
|
118
|
+
description: Otimização de CTAs (Call-to-Action)
|
|
119
|
+
usage: "@vex cta-optimize [context]"
|
|
120
|
+
|
|
121
|
+
- trigger: copy-review
|
|
122
|
+
description: Review de copy com sugestões persuasivas
|
|
123
|
+
usage: "@vex copy-review [text or file]"
|
|
124
|
+
|
|
125
|
+
- trigger: ab-test-ideas
|
|
126
|
+
description: Geração de hipóteses para A/B tests
|
|
127
|
+
usage: "@vex ab-test-ideas [page-type]"
|
|
128
|
+
|
|
129
|
+
# Installation
|
|
130
|
+
installation:
|
|
131
|
+
size_mb: 0.5
|
|
132
|
+
install_time_minutes: 1
|
|
133
|
+
complexity: simple
|
|
134
|
+
cursor_setup: |
|
|
135
|
+
1. VEX será adicionado ao seu .cursorrules
|
|
136
|
+
2. Ative com @vex em qualquer arquivo
|
|
137
|
+
3. Browser tools recomendado para análise de páginas
|
|
138
|
+
|
|
139
|
+
post_install: |
|
|
140
|
+
🎭 VEX instalado com sucesso!
|
|
141
|
+
|
|
142
|
+
Como usar no Cursor:
|
|
143
|
+
@vex analyze-page https://seu-site.com
|
|
144
|
+
@vex quick-scan https://seu-site.com/pricing
|
|
145
|
+
|
|
146
|
+
Como usar via NEX CLI:
|
|
147
|
+
nex agent run vex analyze-page --url https://seu-site.com
|
|
148
|
+
|
|
149
|
+
# Pricing
|
|
150
|
+
pricing:
|
|
151
|
+
model: free
|
|
152
|
+
price: 0
|
|
153
|
+
currency: USD
|
|
154
|
+
license: PROPRIETARY
|
|
155
|
+
|
|
156
|
+
# Stats
|
|
157
|
+
stats:
|
|
158
|
+
installs: 450
|
|
159
|
+
stars: 23
|
|
160
|
+
rating: 4.9
|
|
161
|
+
last_updated: "2026-01-09"
|
|
162
|
+
|
|
163
|
+
# Links
|
|
164
|
+
links:
|
|
165
|
+
repository: https://github.com/INOSX/nex-agents
|
|
166
|
+
documentation: https://docs.inosx.com/nex/agents/vex
|
|
167
|
+
homepage: https://inosx.com/nex
|
|
168
|
+
issues: https://github.com/INOSX/nex-agents/issues
|
|
169
|
+
examples: https://github.com/INOSX/nex-agents/tree/main/examples/vex
|
|
170
|
+
|
|
171
|
+
# Metadata
|
|
172
|
+
metadata:
|
|
173
|
+
is_official: true
|
|
174
|
+
is_verified: true
|
|
175
|
+
maturity: stable
|
|
176
|
+
support_level: full
|
|
177
|
+
language: cursorrules
|
|
178
|
+
framework: BMAD-Cursor
|
|
179
|
+
works_with: [Cursor, NEX]
|
|
180
|
+
|
|
181
|
+
# Quality badges
|
|
182
|
+
badges:
|
|
183
|
+
- official
|
|
184
|
+
- verified
|
|
185
|
+
- cursor-compatible
|
|
186
|
+
- well-documented
|
|
187
|
+
- actively-maintained
|
|
188
|
+
- high-conversion
|
|
189
|
+
|
|
190
|
+
# Use Cases
|
|
191
|
+
use_cases:
|
|
192
|
+
- SaaS landing pages
|
|
193
|
+
- Pricing pages
|
|
194
|
+
- Sign-up flows
|
|
195
|
+
- Product pages
|
|
196
|
+
- E-commerce checkouts
|
|
197
|
+
- Lead generation forms
|
|
198
|
+
- Webinar registration pages
|
|
199
|
+
|
|
200
|
+
# Success Stories (Examples)
|
|
201
|
+
success_metrics:
|
|
202
|
+
average_conversion_increase: "30-60%"
|
|
203
|
+
analysis_time: "5-15 minutes"
|
|
204
|
+
recommendations: "3-10 actionable items"
|
|
205
|
+
implementation_difficulty: "Easy to Medium"
|
|
206
|
+
|
|
207
|
+
# Cialdini Framework
|
|
208
|
+
cialdini_triggers:
|
|
209
|
+
reciprocity:
|
|
210
|
+
description: "Dar algo primeiro para receber depois"
|
|
211
|
+
examples:
|
|
212
|
+
- Free trial
|
|
213
|
+
- Valuable content
|
|
214
|
+
- Free tools
|
|
215
|
+
|
|
216
|
+
commitment:
|
|
217
|
+
description: "Pequenos compromissos levam a maiores"
|
|
218
|
+
examples:
|
|
219
|
+
- Multi-step forms
|
|
220
|
+
- Micro-conversions
|
|
221
|
+
- Progress indicators
|
|
222
|
+
|
|
223
|
+
social_proof:
|
|
224
|
+
description: "Pessoas seguem o que outros fazem"
|
|
225
|
+
examples:
|
|
226
|
+
- Testimonials
|
|
227
|
+
- User counts
|
|
228
|
+
- Case studies
|
|
229
|
+
|
|
230
|
+
authority:
|
|
231
|
+
description: "Expertise e credibilidade"
|
|
232
|
+
examples:
|
|
233
|
+
- Certifications
|
|
234
|
+
- Press mentions
|
|
235
|
+
- Expert endorsements
|
|
236
|
+
|
|
237
|
+
scarcity:
|
|
238
|
+
description: "Urgência e disponibilidade limitada"
|
|
239
|
+
examples:
|
|
240
|
+
- Limited spots
|
|
241
|
+
- Time-limited offers
|
|
242
|
+
- Stock indicators
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Script para publicar create-nex-app no npm
|
|
5
|
+
* Similar ao publish-cli.js do projeto principal
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { execSync } from 'child_process'
|
|
9
|
+
import { readFileSync, writeFileSync } from 'fs'
|
|
10
|
+
import { fileURLToPath } from 'url'
|
|
11
|
+
import { dirname, join } from 'path'
|
|
12
|
+
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
14
|
+
const __dirname = dirname(__filename)
|
|
15
|
+
|
|
16
|
+
const packageJsonPath = join(__dirname, '..', 'package.json')
|
|
17
|
+
|
|
18
|
+
function log(message, color = 'reset') {
|
|
19
|
+
const colors = {
|
|
20
|
+
reset: '\x1b[0m',
|
|
21
|
+
red: '\x1b[31m',
|
|
22
|
+
green: '\x1b[32m',
|
|
23
|
+
yellow: '\x1b[33m',
|
|
24
|
+
blue: '\x1b[34m',
|
|
25
|
+
cyan: '\x1b[36m'
|
|
26
|
+
}
|
|
27
|
+
console.log(`${colors[color]}${message}${colors.reset}`)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function exec(command, options = {}) {
|
|
31
|
+
try {
|
|
32
|
+
return execSync(command, {
|
|
33
|
+
encoding: 'utf-8',
|
|
34
|
+
stdio: 'inherit',
|
|
35
|
+
...options
|
|
36
|
+
})
|
|
37
|
+
} catch (error) {
|
|
38
|
+
log(`\n❌ Erro ao executar: ${command}`, 'red')
|
|
39
|
+
process.exit(1)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function publish() {
|
|
44
|
+
log('\n📦 Publicando create-nex-app no npm...\n', 'blue')
|
|
45
|
+
|
|
46
|
+
// Ler package.json
|
|
47
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'))
|
|
48
|
+
const currentVersion = packageJson.version
|
|
49
|
+
|
|
50
|
+
log(`Versão atual: ${currentVersion}`, 'cyan')
|
|
51
|
+
|
|
52
|
+
// Verificar se está logado no npm
|
|
53
|
+
try {
|
|
54
|
+
const whoami = execSync('npm whoami', { encoding: 'utf-8' }).trim()
|
|
55
|
+
log(`Usuário npm: ${whoami}`, 'green')
|
|
56
|
+
} catch {
|
|
57
|
+
log('❌ Não está logado no npm. Execute: npm login', 'red')
|
|
58
|
+
process.exit(1)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Verificar se nome está disponível (apenas primeira vez)
|
|
62
|
+
if (currentVersion === '0.1.0') {
|
|
63
|
+
log('\n🔍 Verificando se nome está disponível...', 'yellow')
|
|
64
|
+
try {
|
|
65
|
+
execSync('npm view create-nex-app', { stdio: 'ignore' })
|
|
66
|
+
log('⚠️ Pacote já existe no npm!', 'yellow')
|
|
67
|
+
log(' Considere usar outro nome ou scoped package (@inosx/create-nex-app)', 'yellow')
|
|
68
|
+
const readline = await import('readline')
|
|
69
|
+
const rl = readline.createInterface({
|
|
70
|
+
input: process.stdin,
|
|
71
|
+
output: process.stdout
|
|
72
|
+
})
|
|
73
|
+
const answer = await new Promise(resolve => {
|
|
74
|
+
rl.question('\nContinuar mesmo assim? (s/N): ', resolve)
|
|
75
|
+
})
|
|
76
|
+
rl.close()
|
|
77
|
+
if (answer.toLowerCase() !== 's') {
|
|
78
|
+
log('Publicação cancelada', 'yellow')
|
|
79
|
+
process.exit(0)
|
|
80
|
+
}
|
|
81
|
+
} catch {
|
|
82
|
+
log('✅ Nome disponível!', 'green')
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Executar testes
|
|
87
|
+
log('\n🧪 Executando testes...', 'yellow')
|
|
88
|
+
try {
|
|
89
|
+
exec('node cli/create.js --version', { stdio: 'pipe' })
|
|
90
|
+
log('✅ Testes passaram', 'green')
|
|
91
|
+
} catch {
|
|
92
|
+
log('⚠️ Testes falharam, mas continuando...', 'yellow')
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Verificar o que será publicado
|
|
96
|
+
log('\n📋 Verificando arquivos que serão publicados...', 'yellow')
|
|
97
|
+
exec('npm pack --dry-run')
|
|
98
|
+
|
|
99
|
+
// Perguntar confirmação
|
|
100
|
+
const readline = await import('readline')
|
|
101
|
+
const rl = readline.createInterface({
|
|
102
|
+
input: process.stdin,
|
|
103
|
+
output: process.stdout
|
|
104
|
+
})
|
|
105
|
+
const answer = await new Promise(resolve => {
|
|
106
|
+
rl.question(`\n📤 Publicar create-nex-app@${currentVersion}? (s/N): `, resolve)
|
|
107
|
+
})
|
|
108
|
+
rl.close()
|
|
109
|
+
|
|
110
|
+
if (answer.toLowerCase() !== 's') {
|
|
111
|
+
log('Publicação cancelada', 'yellow')
|
|
112
|
+
process.exit(0)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Publicar
|
|
116
|
+
log('\n🚀 Publicando...', 'blue')
|
|
117
|
+
|
|
118
|
+
const args = process.argv.slice(2)
|
|
119
|
+
const otp = args.find(arg => arg.startsWith('--otp='))?.split('=')[1]
|
|
120
|
+
const otpEnv = process.env.NPM_OTP
|
|
121
|
+
|
|
122
|
+
if (otp || otpEnv) {
|
|
123
|
+
exec(`npm publish --otp=${otp || otpEnv}`)
|
|
124
|
+
} else {
|
|
125
|
+
exec('npm publish')
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
log(`\n✅ create-nex-app@${currentVersion} publicado com sucesso!`, 'green')
|
|
129
|
+
log(`\n🔗 https://www.npmjs.com/package/create-nex-app`, 'cyan')
|
|
130
|
+
log(`\n🧪 Teste com: npx create-nex-app`, 'cyan')
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
publish().catch(error => {
|
|
134
|
+
log(`\n❌ Erro: ${error.message}`, 'red')
|
|
135
|
+
process.exit(1)
|
|
136
|
+
})
|
package/ui/assets/app.js
CHANGED
|
@@ -180,7 +180,12 @@ nex agent list --all
|
|
|
180
180
|
nex agent install <agent-id>
|
|
181
181
|
|
|
182
182
|
# Usar no Cursor:
|
|
183
|
-
|
|
183
|
+
@nex/bmad/agents/<agent-id>`
|
|
184
|
+
|
|
185
|
+
// Adicionar evento ao botão de fechar
|
|
186
|
+
document.getElementById('close-btn').addEventListener('click', () => {
|
|
187
|
+
window.close()
|
|
188
|
+
})
|
|
184
189
|
}
|
|
185
190
|
|
|
186
191
|
// Mostrar erro
|