sinapse-ai 1.12.1 → 1.13.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 (93) hide show
  1. package/.claude/CLAUDE.md +2 -2
  2. package/.claude/rules/agent-memory-imports.md +2 -0
  3. package/.sinapse-ai/cli/commands/pro/index.js +8 -48
  4. package/.sinapse-ai/constitution.md +6 -2
  5. package/.sinapse-ai/core-config.yaml +5 -1
  6. package/.sinapse-ai/data/entity-registry.yaml +95 -95
  7. package/.sinapse-ai/development/agents/architect/MEMORY.md +35 -0
  8. package/.sinapse-ai/development/agents/data-engineer/MEMORY.md +38 -0
  9. package/.sinapse-ai/development/agents/developer/MEMORY.md +36 -0
  10. package/.sinapse-ai/development/agents/devops/MEMORY.md +39 -0
  11. package/.sinapse-ai/development/agents/devops.md +0 -1
  12. package/.sinapse-ai/development/agents/product-lead/MEMORY.md +36 -0
  13. package/.sinapse-ai/development/agents/project-lead/MEMORY.md +36 -0
  14. package/.sinapse-ai/development/agents/quality-gate/MEMORY.md +35 -0
  15. package/.sinapse-ai/development/agents/quality-gate.md +1 -1
  16. package/.sinapse-ai/development/agents/snps-orqx.md +4 -0
  17. package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +36 -0
  18. package/.sinapse-ai/development/templates/chrome-brain/knowledge-base/chrome-brain.md +2 -2
  19. package/.sinapse-ai/infrastructure/scripts/ide-sync/index.js +15 -0
  20. package/.sinapse-ai/infrastructure/scripts/validate-agents.js +159 -8
  21. package/.sinapse-ai/install-manifest.yaml +20 -156
  22. package/AGENTS.md +13 -2
  23. package/CHANGELOG.md +119 -4
  24. package/README.en.md +1 -1
  25. package/README.md +6 -26
  26. package/bin/cli.js +2 -7
  27. package/bin/commands/install.js +19 -257
  28. package/bin/commands/update.js +18 -78
  29. package/bin/lib/command-generator.js +261 -0
  30. package/bin/lib/prompts.js +2 -65
  31. package/bin/modules/chrome-brain-installer.js +2 -1
  32. package/bin/postinstall.js +6 -6
  33. package/docs/getting-started.md +0 -1
  34. package/docs/pt/getting-started.md +1 -1
  35. package/docs/security/dependabot-triage.md +17 -17
  36. package/package.json +6 -3
  37. package/packages/installer/src/wizard/i18n.js +3 -204
  38. package/packages/installer/src/wizard/index.js +1 -1
  39. package/packages/installer/src/wizard/questions.js +5 -368
  40. package/packages/installer/src/wizard/wizard.js +0 -9
  41. package/scripts/generate-install-manifest.js +6 -0
  42. package/scripts/validate-changelog-tags.js +97 -0
  43. package/scripts/validate-no-personal-leaks.js +184 -28
  44. package/scripts/validate-schemas.js +55 -10
  45. package/scripts/validate-story-meta.js +25 -12
  46. package/squads/claude-code-mastery/agents/claude-mastery-chief.md +1 -1
  47. package/squads/claude-code-mastery/agents/hooks-architect.md +12 -20
  48. package/squads/claude-code-mastery/tasks/audit-setup.md +1 -1
  49. package/squads/squad-product/agents/product-orqx.md +0 -1
  50. package/squads/squad-product/agents/ps-client-product-manager.md +0 -1
  51. package/squads/squad-product/agents/ps-delivery-manager.md +0 -1
  52. package/squads/squad-product/agents/ps-discovery-lead.md +0 -1
  53. package/squads/squad-product/agents/ps-product-analyst.md +0 -1
  54. package/squads/squad-product/agents/ps-product-ops-specialist.md +0 -1
  55. package/squads/squad-product/agents/ps-product-strategist.md +0 -1
  56. package/.sinapse-ai/core/grounding/README.md +0 -83
  57. package/.sinapse-ai/core/grounding/brand.cjs +0 -29
  58. package/.sinapse-ai/core/grounding/config-loader.cjs +0 -52
  59. package/.sinapse-ai/core/grounding/design-system.cjs +0 -29
  60. package/.sinapse-ai/core/grounding/vault.cjs +0 -36
  61. package/.sinapse-ai/development/scripts/approval-workflow.js +0 -643
  62. package/.sinapse-ai/development/scripts/backup-manager.js +0 -607
  63. package/.sinapse-ai/development/scripts/branch-manager.js +0 -390
  64. package/.sinapse-ai/development/scripts/code-quality-improver.js +0 -1329
  65. package/.sinapse-ai/development/scripts/commit-message-generator.js +0 -850
  66. package/.sinapse-ai/development/scripts/conflict-resolver.js +0 -675
  67. package/.sinapse-ai/development/scripts/dependency-analyzer.js +0 -638
  68. package/.sinapse-ai/development/scripts/diff-generator.js +0 -352
  69. package/.sinapse-ai/development/scripts/git-wrapper.js +0 -462
  70. package/.sinapse-ai/development/scripts/modification-validator.js +0 -555
  71. package/.sinapse-ai/development/scripts/performance-analyzer.js +0 -758
  72. package/.sinapse-ai/development/scripts/refactoring-suggester.js +0 -1148
  73. package/.sinapse-ai/development/scripts/rollback-handler.js +0 -531
  74. package/.sinapse-ai/development/scripts/security-checker.js +0 -359
  75. package/.sinapse-ai/development/scripts/template-engine.js +0 -240
  76. package/.sinapse-ai/development/scripts/template-validator.js +0 -279
  77. package/.sinapse-ai/development/scripts/test-generator.js +0 -844
  78. package/.sinapse-ai/development/scripts/transaction-manager.js +0 -590
  79. package/.sinapse-ai/development/scripts/yaml-validator.js +0 -397
  80. package/.sinapse-ai/hooks/sinapse-brand-grounding.cjs +0 -162
  81. package/.sinapse-ai/hooks/sinapse-ds-grounding.cjs +0 -211
  82. package/.sinapse-ai/hooks/sinapse-vault-grounding.cjs +0 -194
  83. package/bin/lib/register-grounding-hooks.js +0 -145
  84. package/docs/guides/agents/traces/execution-traces.zip +0 -0
  85. package/docs/guides/grounding-setup.md +0 -154
  86. package/docs/guides/workflows/SINAPSE-WORKFLOWS.zip +0 -0
  87. package/packages/installer/src/pro/pro-scaffolder.js +0 -449
  88. package/packages/installer/src/wizard/grounding-config.js +0 -131
  89. package/packages/installer/src/wizard/pro-setup.js +0 -1439
  90. package/packages/installer/templates/README.md +0 -16
  91. package/packages/installer/templates/brand-routing.example.json +0 -12
  92. package/packages/installer/templates/ds-routing.example.json +0 -12
  93. package/packages/installer/templates/vault-routing.example.json +0 -12
@@ -88,107 +88,6 @@ const TRANSLATIONS = {
88
88
  cancelled: 'Installation cancelled.',
89
89
  tryAgain: 'Run `npx sinapse-ai init` to try again.',
90
90
  continuing: 'Continuing installation...',
91
-
92
- // Pro Installation Wizard (pro-setup.js)
93
- proWizardTitle: 'SINAPSE Pro Installation Wizard',
94
- proWizardSubtitle: 'Premium Content & Features',
95
- proLicenseActivation: 'License Activation',
96
- proContentInstallation: 'Pro Content Installation',
97
- proVerification: 'Verification',
98
- proHowActivate: 'How would you like to activate Pro?',
99
- proLoginOrCreate: 'Login or create account (Recommended)',
100
- proEnterKey: 'Enter license key (legacy)',
101
- proEmailLabel: 'Email:',
102
- proEmailRequired: 'Email is required',
103
- proEmailInvalid: 'Please enter a valid email address',
104
- proVerifyingAccess: 'Verifying your access...',
105
- proNoAccess: 'No SINAPSE Pro access found for this email.',
106
- proContactSupport: 'If you believe this is an error, please contact support:',
107
- proPurchase: 'Purchase Pro: https://pro.sinapse.ai',
108
- proEmailNotBuyer: 'Email not found in Pro buyers list.',
109
- proAccessConfirmedAccount: 'Pro access confirmed! Account found.',
110
- proAccessConfirmedCreate: "Pro access confirmed! Let's create your account.",
111
- proPasswordLabel: 'Password:',
112
- proPasswordMin: 'Password must be at least {min} characters',
113
- proAuthenticating: 'Authenticating...',
114
- proAuthSuccess: 'Authenticated successfully.',
115
- proEmailNotVerified: 'Email not verified yet. Please check your inbox and click the verification link.',
116
- proCheckingEvery: '(Checking every 5 seconds... timeout in 10 minutes)',
117
- proEmailVerified: 'Email verified!',
118
- proVerificationTimeout: 'Email verification timed out after 10 minutes.',
119
- proRunAgain: 'Run the installer again to retry.',
120
- proIncorrectPassword: 'Incorrect password. {remaining} attempt(s) remaining.',
121
- proMaxAttempts: 'Maximum login attempts reached.',
122
- proForgotPassword: 'Forgot your password? Visit https://sinapse-license-server.vercel.app/reset-password',
123
- proContactSupportEmail: 'Or open an issue: https://github.com/caioimori/sinapse-ai/issues',
124
- proAuthFailed: 'Authentication failed: {message}',
125
- proCreateAccount: 'Create your SINAPSE Pro account to get started.',
126
- proChoosePassword: 'Choose a password:',
127
- proConfirmPassword: 'Confirm password:',
128
- proPasswordsNoMatch: 'Passwords do not match',
129
- proCreatingAccount: 'Creating account...',
130
- proAccountCreated: 'Account created! Verification email sent.',
131
- proAccountExists: 'Account already exists. Switching to login...',
132
- proAccountFailed: 'Account creation failed: {message}',
133
- proCheckEmail: 'Please check your email and click the verification link.',
134
- proWaitingVerification: 'Waiting for email verification...',
135
- proAfterVerifying: 'After verifying, the installation will continue automatically.',
136
- proPressResend: '[Press R to resend verification email]',
137
- proVerificationResent: 'Verification email resent.',
138
- proCouldNotResend: 'Could not resend: {message}',
139
- proRunAgainRetry: 'Run the installer again to retry verification.',
140
- proValidatingSubscription: 'Validating Pro subscription...',
141
- proSubscriptionConfirmed: 'Pro subscription confirmed! License: {key}',
142
- proNoSubscription: 'No active Pro subscription found for this email.',
143
- proPurchaseAt: 'Purchase Pro at https://pro.sinapse.ai',
144
- proSeatLimit: 'Deactivate another device or upgrade your license.',
145
- proAlreadyActivated: 'Pro license already activated for this account.',
146
- proActivationFailed: 'Activation failed: {message}',
147
- proEnterKeyPrompt: 'Enter your Pro license key:',
148
- proKeyRequired: 'License key is required',
149
- proKeyInvalid: 'Invalid format. Expected: PRO-XXXX-XXXX-XXXX-XXXX',
150
- proKeyValidated: 'License validated: {key}',
151
- proModuleNotAvailable: 'Pro license module not available. Ensure @sinapse-fullstack/pro is installed.',
152
- proModuleBootstrap: 'Pro license module not found locally. Installing @sinapse-fullstack/pro to bootstrap...',
153
- proServerUnreachable: 'License server is unreachable. Check your internet connection and try again.',
154
- proVerifyingAccessShort: 'Verifying access...',
155
- proAccessConfirmed: 'Pro access confirmed.',
156
- proBuyerCheckUnavailable: 'Buyer check unavailable, proceeding with login...',
157
- proLoginFailedSignup: 'Login failed, attempting signup...',
158
- proAccountCreatedVerify: 'Account created. Verification email sent!',
159
- proAccountExistsWrongPw: 'Account exists but the password is incorrect.',
160
- proAuthFailedShort: 'Authentication failed.',
161
- proValidatingKey: 'Validating license {key}...',
162
- proInvalidKey: 'Invalid license key.',
163
- proExpiredKey: 'License key has expired.',
164
- proMaxActivations: 'Maximum activations reached for this key.',
165
- proRateLimited: 'Too many requests. Please wait and try again.',
166
- proValidationFailed: 'License validation failed: {message}',
167
- proInvalidKeyFormat: 'Invalid key format: {key}. Expected: PRO-XXXX-XXXX-XXXX-XXXX',
168
- proScaffolding: 'Scaffolding pro content...',
169
- proScaffoldingProgress: 'Scaffolding: {message}',
170
- proContentInstalled: 'Pro content installed ({count} files)',
171
- proScaffoldFailed: 'Scaffolding failed',
172
- proScaffoldError: 'Scaffolding error: {message}',
173
- proInitPackageJson: 'Initializing package.json...',
174
- proPackageJsonCreated: 'package.json created',
175
- proPackageJsonFailed: 'Failed to create package.json',
176
- proInstallingPackage: 'Installing @sinapse-fullstack/pro...',
177
- proPackageInstalled: 'Pro package installed',
178
- proPackageInstallFailed: 'Failed to install Pro package',
179
- proScaffolderNotAvailable: 'Pro scaffolder not available. Ensure @sinapse-fullstack/pro is installed.',
180
- proFilesInstalled: 'Files installed: {count}',
181
- proSquads: 'Squads: {names}',
182
- proConfigs: 'Configs: {count} files',
183
- proFeaturesUnlocked: 'Features unlocked: {count}',
184
- proInstallComplete: 'SINAPSE Pro installation complete!',
185
- proNeedHelp: 'Need help? Run: npx sinapse-pro recover',
186
- proCISetEnv: 'CI mode: Set SINAPSE_PRO_EMAIL + SINAPSE_PRO_PASSWORD or SINAPSE_PRO_KEY environment variables.',
187
- proVerificationFailed: 'Verification failed: {message}',
188
- proPackageNotFound: 'Pro package not found after npm install. Check npm output.',
189
- proScaffolderNotFound: 'Pro scaffolder module not found.',
190
- proNpmInitFailed: 'npm init failed: {message}',
191
- proNpmInstallFailed: 'npm install @sinapse-fullstack/pro failed: {message}. Try manually: npm install @sinapse-fullstack/pro',
192
91
  },
193
92
 
194
93
  pt: {
@@ -272,114 +171,14 @@ const TRANSLATIONS = {
272
171
  cancelled: 'Instalação cancelada.',
273
172
  tryAgain: 'Execute `npx sinapse-ai init` para tentar novamente.',
274
173
  continuing: 'Continuando instalação...',
275
-
276
- // Pro Installation Wizard (pro-setup.js)
277
- proWizardTitle: 'Assistente de Instalação SINAPSE Pro',
278
- proWizardSubtitle: 'Conteúdo e Recursos Premium',
279
- proLicenseActivation: 'Ativação de Licença',
280
- proContentInstallation: 'Instalação do Conteúdo Pro',
281
- proVerification: 'Verificação',
282
- proHowActivate: 'Como você gostaria de ativar o Pro?',
283
- proLoginOrCreate: 'Login ou criar conta (Recomendado)',
284
- proEnterKey: 'Inserir chave de licença (legado)',
285
- proEmailLabel: 'Email:',
286
- proEmailRequired: 'Email é obrigatório',
287
- proEmailInvalid: 'Por favor, insira um endereço de email válido',
288
- proVerifyingAccess: 'Verificando seu acesso...',
289
- proNoAccess: 'Nenhum acesso SINAPSE Pro encontrado para este email.',
290
- proContactSupport: 'Se você acredita que isso é um erro, entre em contato com o suporte:',
291
- proPurchase: 'Comprar Pro: https://pro.sinapse.ai',
292
- proEmailNotBuyer: 'Email não encontrado na lista de compradores Pro.',
293
- proAccessConfirmedAccount: 'Acesso Pro confirmado! Conta encontrada.',
294
- proAccessConfirmedCreate: 'Acesso Pro confirmado! Vamos criar sua conta.',
295
- proPasswordLabel: 'Senha:',
296
- proPasswordMin: 'A senha deve ter pelo menos {min} caracteres',
297
- proAuthenticating: 'Autenticando...',
298
- proAuthSuccess: 'Autenticado com sucesso.',
299
- proEmailNotVerified: 'Email ainda não verificado. Verifique sua caixa de entrada e clique no link de verificação.',
300
- proCheckingEvery: '(Verificando a cada 5 segundos... tempo limite de 10 minutos)',
301
- proEmailVerified: 'Email verificado!',
302
- proVerificationTimeout: 'Verificação de email expirou após 10 minutos.',
303
- proRunAgain: 'Execute o instalador novamente para tentar.',
304
- proIncorrectPassword: 'Senha incorreta. {remaining} tentativa(s) restante(s).',
305
- proMaxAttempts: 'Número máximo de tentativas de login atingido.',
306
- proForgotPassword: 'Esqueceu sua senha? Acesse https://sinapse-license-server.vercel.app/reset-password',
307
- proContactSupportEmail: 'Ou abra uma issue: https://github.com/caioimori/sinapse-ai/issues',
308
- proAuthFailed: 'Falha na autenticação: {message}',
309
- proCreateAccount: 'Crie sua conta SINAPSE Pro para começar.',
310
- proChoosePassword: 'Escolha uma senha:',
311
- proConfirmPassword: 'Confirme a senha:',
312
- proPasswordsNoMatch: 'As senhas não correspondem',
313
- proCreatingAccount: 'Criando conta...',
314
- proAccountCreated: 'Conta criada! Email de verificação enviado.',
315
- proAccountExists: 'Conta já existe. Mudando para login...',
316
- proAccountFailed: 'Falha ao criar conta: {message}',
317
- proCheckEmail: 'Por favor, verifique seu email e clique no link de verificação.',
318
- proWaitingVerification: 'Aguardando verificação de email...',
319
- proAfterVerifying: 'Após verificar, a instalação continuará automaticamente.',
320
- proPressResend: '[Pressione R para reenviar email de verificação]',
321
- proVerificationResent: 'Email de verificação reenviado.',
322
- proCouldNotResend: 'Não foi possível reenviar: {message}',
323
- proRunAgainRetry: 'Execute o instalador novamente para tentar a verificação.',
324
- proValidatingSubscription: 'Validando assinatura Pro...',
325
- proSubscriptionConfirmed: 'Assinatura Pro confirmada! Licença: {key}',
326
- proNoSubscription: 'Nenhuma assinatura Pro ativa encontrada para este email.',
327
- proPurchaseAt: 'Compre o Pro em https://pro.sinapse.ai',
328
- proSeatLimit: 'Desative outro dispositivo ou faça upgrade da sua licença.',
329
- proAlreadyActivated: 'Licença Pro já ativada para esta conta.',
330
- proActivationFailed: 'Falha na ativação: {message}',
331
- proEnterKeyPrompt: 'Insira sua chave de licença Pro:',
332
- proKeyRequired: 'Chave de licença é obrigatória',
333
- proKeyInvalid: 'Formato inválido. Esperado: PRO-XXXX-XXXX-XXXX-XXXX',
334
- proKeyValidated: 'Licença validada: {key}',
335
- proModuleNotAvailable: 'Módulo de licença Pro não disponível. Certifique-se de que @sinapse-fullstack/pro está instalado.',
336
- proModuleBootstrap: 'Módulo de licença Pro não encontrado localmente. Instalando @sinapse-fullstack/pro...',
337
- proServerUnreachable: 'Servidor de licenças inacessível. Verifique sua conexão com a internet e tente novamente.',
338
- proVerifyingAccessShort: 'Verificando acesso...',
339
- proAccessConfirmed: 'Acesso Pro confirmado.',
340
- proBuyerCheckUnavailable: 'Verificação de comprador indisponível, prosseguindo com login...',
341
- proLoginFailedSignup: 'Login falhou, tentando cadastro...',
342
- proAccountCreatedVerify: 'Conta criada. Email de verificação enviado!',
343
- proAccountExistsWrongPw: 'Conta existe mas a senha está incorreta.',
344
- proAuthFailedShort: 'Falha na autenticação.',
345
- proValidatingKey: 'Validando licença {key}...',
346
- proInvalidKey: 'Chave de licença inválida.',
347
- proExpiredKey: 'Chave de licença expirada.',
348
- proMaxActivations: 'Número máximo de ativações atingido para esta chave.',
349
- proRateLimited: 'Muitas requisições. Aguarde e tente novamente.',
350
- proValidationFailed: 'Validação de licença falhou: {message}',
351
- proInvalidKeyFormat: 'Formato de chave inválido: {key}. Esperado: PRO-XXXX-XXXX-XXXX-XXXX',
352
- proScaffolding: 'Instalando conteúdo pro...',
353
- proScaffoldingProgress: 'Instalando: {message}',
354
- proContentInstalled: 'Conteúdo Pro instalado ({count} arquivos)',
355
- proScaffoldFailed: 'Instalação falhou',
356
- proScaffoldError: 'Erro na instalação: {message}',
357
- proInitPackageJson: 'Inicializando package.json...',
358
- proPackageJsonCreated: 'package.json criado',
359
- proPackageJsonFailed: 'Falha ao criar package.json',
360
- proInstallingPackage: 'Instalando @sinapse-fullstack/pro...',
361
- proPackageInstalled: 'Pacote Pro instalado',
362
- proPackageInstallFailed: 'Falha ao instalar pacote Pro',
363
- proScaffolderNotAvailable: 'Scaffolder Pro não disponível. Certifique-se de que @sinapse-fullstack/pro está instalado.',
364
- proFilesInstalled: 'Arquivos instalados: {count}',
365
- proSquads: 'Squads: {names}',
366
- proConfigs: 'Configs: {count} arquivos',
367
- proFeaturesUnlocked: 'Recursos desbloqueados: {count}',
368
- proInstallComplete: 'Instalação do SINAPSE Pro completa!',
369
- proNeedHelp: 'Precisa de ajuda? Execute: npx sinapse-pro recover',
370
- proCISetEnv: 'Modo CI: Defina as variáveis SINAPSE_PRO_EMAIL + SINAPSE_PRO_PASSWORD ou SINAPSE_PRO_KEY.',
371
- proVerificationFailed: 'Verificação falhou: {message}',
372
- proPackageNotFound: 'Pacote Pro não encontrado após npm install. Verifique a saída do npm.',
373
- proScaffolderNotFound: 'Módulo scaffolder Pro não encontrado.',
374
- proNpmInitFailed: 'npm init falhou: {message}',
375
- proNpmInstallFailed: 'npm install @sinapse-fullstack/pro falhou: {message}. Tente manualmente: npm install @sinapse-fullstack/pro',
376
174
  },
377
175
 
378
176
  // es: removed — PT-BR hardcoded as default
379
177
  };
380
178
 
381
- // Current language (default: Englishworldwide product)
382
- let currentLanguage = 'en';
179
+ // Current language (default: Portugueseproduct owner decision). English
180
+ // remains the missing-key fallback inside t() and a selectable choice.
181
+ let currentLanguage = 'pt';
383
182
 
384
183
  /**
385
184
  * Set current language
@@ -457,7 +457,7 @@ async function runWizard(options = {}) {
457
457
 
458
458
  if (options.quiet) {
459
459
  // Quiet mode: Skip all prompts, use defaults
460
- const language = options.language || 'en';
460
+ const language = options.language || 'pt';
461
461
  setLanguage(language);
462
462
  answers = {
463
463
  language,
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * Wizard Questions Definitions
3
3
  *
4
- * Modular question system for SINAPSE installation wizard
5
- * Questions from Stories 1.3-1.6 will be added here
4
+ * Modular question system for SINAPSE installation wizard.
5
+ * Only the questions actually asked by the live 2-step wizard remain here
6
+ * (language + LLM). IDE selection helper is kept for the IDE selector module.
6
7
  *
7
8
  * @module wizard/questions
8
9
  */
9
10
 
10
11
  const { colors } = require('../utils/sinapse-colors');
11
- const { createInquirerValidator, validateProjectType } = require('./validators');
12
- const { t, getLanguageChoices, setLanguage: _setLanguage } = require('./i18n');
12
+ const { t, getLanguageChoices } = require('./i18n');
13
13
 
14
14
  /**
15
15
  * Get language selection question (first question)
@@ -21,33 +21,7 @@ function getLanguageQuestion() {
21
21
  name: 'language',
22
22
  message: '🌐 Language:',
23
23
  choices: getLanguageChoices(),
24
- default: 'en',
25
- };
26
- }
27
-
28
- /**
29
- * Get user profile question (Story 10.2 - Epic 10: User Profile System)
30
- * @deprecated No longer asked interactively. Kept for backward compatibility.
31
- * @returns {Object} Inquirer question object
32
- */
33
- function getUserProfileQuestion() {
34
- return {
35
- type: 'list',
36
- name: 'userProfile',
37
- message: colors.primary(t('userProfileQuestion')),
38
- choices: [
39
- {
40
- name:
41
- colors.highlight(`🚀 ${t('modoAssistido')}`) +
42
- colors.dim(` (${t('recommended')})`),
43
- value: 'bob',
44
- },
45
- {
46
- name: `⚙️ ${t('modoAvancado')}`,
47
- value: 'advanced',
48
- },
49
- ],
50
- default: 0,
24
+ default: 'pt',
51
25
  };
52
26
  }
53
27
 
@@ -80,32 +54,6 @@ function getLLMQuestion() {
80
54
  };
81
55
  }
82
56
 
83
- /**
84
- * Get project type question (Story 1.3)
85
- * @deprecated Project type is now auto-detected. Kept for backward compat.
86
- *
87
- * @returns {Object} Inquirer question object
88
- */
89
- function getProjectTypeQuestion() {
90
- return {
91
- type: 'list',
92
- name: 'projectType',
93
- message: colors.primary(t('projectTypeQuestion')),
94
- choices: [
95
- {
96
- name: colors.highlight(t('greenfield')) + colors.dim(` (${t('greenfieldDesc')})`),
97
- value: 'greenfield',
98
- },
99
- {
100
- name: t('brownfield') + colors.dim(` (${t('brownfieldDesc')})`),
101
- value: 'brownfield',
102
- },
103
- ],
104
- default: 0,
105
- validate: createInquirerValidator(validateProjectType),
106
- };
107
- }
108
-
109
57
  /**
110
58
  * Get IDE selection questions (Story 1.4)
111
59
  *
@@ -116,319 +64,8 @@ function getIDEQuestions() {
116
64
  return [getIDESelectionQuestion()];
117
65
  }
118
66
 
119
- /**
120
- * Get package manager selection question (Story 1.7)
121
- *
122
- * @param {string} detectedPM - Auto-detected package manager
123
- * @returns {Object} Inquirer question object
124
- */
125
- function getPackageManagerQuestion(detectedPM = 'npm') {
126
- return {
127
- type: 'list',
128
- name: 'packageManager',
129
- message: colors.primary('Which package manager should be used?'),
130
- choices: [
131
- {
132
- name: detectedPM === 'npm' ? colors.highlight('npm') + colors.dim(' (detected)') : 'npm',
133
- value: 'npm',
134
- },
135
- {
136
- name: detectedPM === 'yarn' ? colors.highlight('yarn') + colors.dim(' (detected)') : 'yarn',
137
- value: 'yarn',
138
- },
139
- {
140
- name: detectedPM === 'pnpm' ? colors.highlight('pnpm') + colors.dim(' (detected)') : 'pnpm',
141
- value: 'pnpm',
142
- },
143
- {
144
- name: detectedPM === 'bun' ? colors.highlight('bun') + colors.dim(' (detected)') : 'bun',
145
- value: 'bun',
146
- },
147
- ],
148
- default: ['npm', 'yarn', 'pnpm', 'bun'].indexOf(detectedPM) || 0,
149
- };
150
- }
151
-
152
- /**
153
- * Get MCP selection questions (Story 1.5 / 1.8 Integration)
154
- *
155
- * @returns {Object[]} Array of inquirer question objects
156
- */
157
- function getMCPQuestions() {
158
- return [
159
- {
160
- type: 'checkbox',
161
- name: 'selectedMCPs',
162
- message: colors.primary('Select MCPs to install (project-level):'),
163
- choices: [
164
- {
165
- name:
166
- colors.highlight('Browser (Puppeteer)') + colors.dim(' - Web automation and testing'),
167
- value: 'browser',
168
- checked: true,
169
- },
170
- {
171
- name: colors.highlight('Context7') + colors.dim(' - Library documentation search'),
172
- value: 'context7',
173
- checked: true,
174
- },
175
- {
176
- name: colors.highlight('Exa') + colors.dim(' - Advanced web search'),
177
- value: 'exa',
178
- checked: true,
179
- },
180
- {
181
- name: colors.highlight('Desktop Commander') + colors.dim(' - File system access'),
182
- value: 'desktop-commander',
183
- checked: true,
184
- },
185
- ],
186
- validate: () => {
187
- // Allow empty selection (user can skip MCP installation)
188
- return true;
189
- },
190
- },
191
- // Note: API keys are configured later via sinapse-orqx or directly in .env
192
- ];
193
- }
194
-
195
- /**
196
- * Get environment configuration questions (Story 1.6)
197
- *
198
- * DESIGN NOTE: Environment configuration uses its own prompt system
199
- * via @clack/prompts in packages/installer/src/config/configure-environment.js
200
- *
201
- * API key prompts are NOT part of wizard questions to keep the
202
- * environment module self-contained and testable independently.
203
- *
204
- * The wizard calls configureEnvironment() directly after IDE selection
205
- * in src/wizard/index.js (Task 1.6.7)
206
- *
207
- * @returns {Object[]} Empty array - prompts handled in environment module
208
- */
209
- function getEnvironmentQuestions() {
210
- // Environment config prompts handled in configure-environment.js
211
- // No wizard questions needed for this story
212
- return [];
213
- }
214
-
215
- /**
216
- * Get Squad selection questions
217
- *
218
- * Available squads for v4.0:
219
- * - squad-creator: Tools to create custom squads
220
- * - etl: ETL pipeline for knowledge base creation
221
- *
222
- * Note: This function is currently DISABLED. Squad selection is handled
223
- * directly in sinapse-init.js using the squads/ directory.
224
- *
225
- * @returns {Object[]} Array of inquirer question objects
226
- * @deprecated Use squads/ directory directly in sinapse-init.js
227
- */
228
- function getSquadQuestions() {
229
- return [
230
- {
231
- type: 'checkbox',
232
- name: 'selectedSquads',
233
- message: colors.primary('Select Squads to install (optional):'),
234
- choices: [
235
- {
236
- name:
237
- colors.highlight('squad-creator') +
238
- colors.dim(' - Tools to create custom squads'),
239
- value: 'squad-creator',
240
- checked: false,
241
- },
242
- {
243
- name: colors.highlight('etl') + colors.dim(' - ETL pipeline for knowledge base creation'),
244
- value: 'etl',
245
- checked: false,
246
- },
247
- ],
248
- validate: () => {
249
- // Allow empty selection (user can skip squad installation)
250
- return true;
251
- },
252
- },
253
- ];
254
- }
255
-
256
- /**
257
- * Get Tech Preset selection question
258
- *
259
- * Tech presets provide pre-configured architecture patterns and standards
260
- * for different technology stacks.
261
- *
262
- * @returns {Object[]} Array of inquirer question objects
263
- */
264
- function getTechPresetQuestion() {
265
- return [
266
- {
267
- type: 'list',
268
- name: 'selectedTechPreset',
269
- message: colors.primary('Select a Tech Preset for architecture patterns:'),
270
- choices: [
271
- {
272
- name:
273
- colors.highlight('nextjs-react') +
274
- colors.dim(' - Next.js 16+, React, TypeScript, Tailwind, Zustand'),
275
- value: 'nextjs-react',
276
- },
277
- {
278
- name: colors.highlight('go') + colors.dim(' - Go services and microservices'),
279
- value: 'go',
280
- },
281
- {
282
- name: colors.highlight('java') + colors.dim(' - Java 21+ with Spring Boot'),
283
- value: 'java',
284
- },
285
- {
286
- name: colors.highlight('rust') + colors.dim(' - High-reliability Rust services'),
287
- value: 'rust',
288
- },
289
- {
290
- name: colors.highlight('csharp') + colors.dim(' - .NET 9+ ASP.NET Core services'),
291
- value: 'csharp',
292
- },
293
- {
294
- name: colors.highlight('php') + colors.dim(' - PHP 8.3+ with Laravel'),
295
- value: 'php',
296
- },
297
- {
298
- name: 'None' + colors.dim(' - Let SINAPSE decide based on project'),
299
- value: 'none',
300
- },
301
- ],
302
- default: 0,
303
- },
304
- ];
305
- }
306
-
307
- /**
308
- * Build complete question sequence
309
- * Allows conditional questions based on previous answers
310
- *
311
- * @param {Object} context - Context with previous answers
312
- * @returns {Object[]} Array of questions
313
- */
314
- function buildQuestionSequence(_context = {}) {
315
- const questions = [];
316
-
317
- // Language selection (first question)
318
- questions.push(getLanguageQuestion());
319
-
320
- // Story 1.2: Project type is auto-detected (question removed from flow)
321
-
322
- // Story 1.4: IDE Selection
323
- questions.push(...getIDEQuestions());
324
-
325
- // Story 1.5/1.8: MCP Selection
326
- // DISABLED: MCPs are advanced config that can confuse beginners
327
- // TODO: Remove entirely in future version - each project has unique MCP needs
328
- // questions.push(...getMCPQuestions());
329
-
330
- // Squad Selection - DISABLED: Handled directly in sinapse-init.js
331
- // TODO: Consider removing getSquadQuestions() entirely in future version
332
- // questions.push(...getSquadQuestions());
333
-
334
- // Tech Preset Selection
335
- questions.push(...getTechPresetQuestion());
336
-
337
- // Story 1.7: Package Manager - Auto-detected (no question needed)
338
- // The wizard will auto-detect and use the appropriate package manager
339
- // See detectPackageManager() in dependency-installer.js
340
-
341
- // Story 1.6: Environment Configuration
342
- // Note: Env config prompts handled directly in configureEnvironment()
343
- // See src/wizard/index.js integration (after IDE config step)
344
-
345
- // Future: Conditional questions based on projectType
346
- // if (context.projectType === 'greenfield') { ... }
347
-
348
- return questions;
349
- }
350
-
351
- /**
352
- * Story 10.47 — Grounding questions (vault / design system / brand)
353
- *
354
- * Each helper returns a single inquirer `input` question. An empty answer
355
- * means "skip" — the corresponding grounding section stays disabled and the
356
- * shipped hook is a no-op. Suffixed instruction in the message reinforces
357
- * that skipping activates the high-quality fallback.
358
- */
359
-
360
- function getVaultGroundingQuestion() {
361
- return {
362
- type: 'input',
363
- name: 'vaultPath',
364
- message: '📚 Vault de notas markdown — caminho absoluto, ou Enter pra pular:',
365
- default: '',
366
- filter: (value) => (typeof value === 'string' ? value.trim() : ''),
367
- };
368
- }
369
-
370
- function getDesignSystemGroundingQuestion() {
371
- return {
372
- type: 'input',
373
- name: 'designSystemPath',
374
- message: '🎨 Design system / source-of-truth visual — caminho absoluto, ou Enter pra pular:',
375
- default: '',
376
- filter: (value) => (typeof value === 'string' ? value.trim() : ''),
377
- };
378
- }
379
-
380
- function getBrandGroundingQuestion() {
381
- return {
382
- type: 'input',
383
- name: 'brandbookPath',
384
- message: '🪪 Brandbook do projeto — caminho absoluto, ou Enter pra pular:',
385
- default: '',
386
- filter: (value) => (typeof value === 'string' ? value.trim() : ''),
387
- };
388
- }
389
-
390
- function getGroundingQuestions() {
391
- return [
392
- getVaultGroundingQuestion(),
393
- getDesignSystemGroundingQuestion(),
394
- getBrandGroundingQuestion(),
395
- ];
396
- }
397
-
398
- /**
399
- * Get question by ID
400
- * Useful for testing individual questions
401
- *
402
- * @param {string} questionId - Question identifier
403
- * @returns {Object|null} Question object or null if not found
404
- */
405
- function getQuestionById(questionId) {
406
- const questionMap = {
407
- projectType: getProjectTypeQuestion(),
408
- // Future questions will be added here
409
- };
410
-
411
- return questionMap[questionId] || null;
412
- }
413
-
414
67
  module.exports = {
415
68
  getLanguageQuestion,
416
- getUserProfileQuestion,
417
69
  getLLMQuestion,
418
- getProjectTypeQuestion,
419
70
  getIDEQuestions,
420
- getMCPQuestions,
421
- getSquadQuestions,
422
- // Backward compat alias (deprecated)
423
- getExpansionPackQuestions: getSquadQuestions,
424
- getTechPresetQuestion,
425
- getEnvironmentQuestions,
426
- getPackageManagerQuestion,
427
- buildQuestionSequence,
428
- getQuestionById,
429
- // Story 10.47 — grounding (opt-in BYO)
430
- getVaultGroundingQuestion,
431
- getDesignSystemGroundingQuestion,
432
- getBrandGroundingQuestion,
433
- getGroundingQuestions,
434
71
  };
@@ -152,7 +152,6 @@ async function selectInstallationMode(detected, opts = {}) {
152
152
  * @param {string} [summary.language] - Language code (pt/en) or label
153
153
  * @param {string|string[]} [summary.ide] - IDE selection
154
154
  * @param {string} [summary.targetDir] - Target directory
155
- * @param {Object} [summary.grounding] - Grounding configuration (vault/DS/brand)
156
155
  * @param {Object} [opts]
157
156
  * @param {boolean} [opts.assumeYes=false] - Skip the confirmation prompt
158
157
  * @returns {Promise<boolean>} true if confirmed (or non-interactive), false to abort
@@ -166,14 +165,6 @@ async function confirmInstallSummary(summary, opts = {}) {
166
165
  const ide = Array.isArray(summary.ide) ? summary.ide.join(', ') : summary.ide;
167
166
  console.log(` IDE: ${ide}`);
168
167
  }
169
- if (summary.grounding) {
170
- const g = summary.grounding;
171
- const parts = [];
172
- if (g.vault) parts.push('vault');
173
- if (g.designSystem) parts.push('design-system');
174
- if (g.brand) parts.push('brand');
175
- console.log(` Grounding: ${parts.length ? parts.join(', ') : 'none'}`);
176
- }
177
168
  console.log('─────────────────────────\n');
178
169
 
179
170
  if (opts.assumeYes || !isInteractive()) return true;
@@ -76,6 +76,12 @@ const EXCLUDE_PATTERNS = [
76
76
  /^docs\/template-syntax\.md$/,
77
77
  /^docs\/troubleshooting-guide\.md$/,
78
78
  /^docs\/session-update-pattern\.md$/,
79
+ // Agent memory files are L3-mutable (user/agent-edited per project, see
80
+ // CLAUDE.md L1-L4 boundary). Their hashes churn the committed manifest on
81
+ // every memory change with no drift-tracking value — the brownfield upgrader
82
+ // must never overwrite them anyway. Anchored to the canonical nested path so
83
+ // we don't accidentally exclude anything else named MEMORY.md.
84
+ /(^|\/)development\/agents\/[^/]+\/MEMORY\.md$/,
79
85
  // Gitignored generated files
80
86
  /data\/registry-update-log\.jsonl$/,
81
87
  /data\/registry-healing-log\.jsonl$/,