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.
- package/.claude/CLAUDE.md +2 -2
- package/.claude/rules/agent-memory-imports.md +2 -0
- package/.sinapse-ai/cli/commands/pro/index.js +8 -48
- package/.sinapse-ai/constitution.md +6 -2
- package/.sinapse-ai/core-config.yaml +5 -1
- package/.sinapse-ai/data/entity-registry.yaml +95 -95
- package/.sinapse-ai/development/agents/architect/MEMORY.md +35 -0
- package/.sinapse-ai/development/agents/data-engineer/MEMORY.md +38 -0
- package/.sinapse-ai/development/agents/developer/MEMORY.md +36 -0
- package/.sinapse-ai/development/agents/devops/MEMORY.md +39 -0
- package/.sinapse-ai/development/agents/devops.md +0 -1
- package/.sinapse-ai/development/agents/product-lead/MEMORY.md +36 -0
- package/.sinapse-ai/development/agents/project-lead/MEMORY.md +36 -0
- package/.sinapse-ai/development/agents/quality-gate/MEMORY.md +35 -0
- package/.sinapse-ai/development/agents/quality-gate.md +1 -1
- package/.sinapse-ai/development/agents/snps-orqx.md +4 -0
- package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +36 -0
- package/.sinapse-ai/development/templates/chrome-brain/knowledge-base/chrome-brain.md +2 -2
- package/.sinapse-ai/infrastructure/scripts/ide-sync/index.js +15 -0
- package/.sinapse-ai/infrastructure/scripts/validate-agents.js +159 -8
- package/.sinapse-ai/install-manifest.yaml +20 -156
- package/AGENTS.md +13 -2
- package/CHANGELOG.md +119 -4
- package/README.en.md +1 -1
- package/README.md +6 -26
- package/bin/cli.js +2 -7
- package/bin/commands/install.js +19 -257
- package/bin/commands/update.js +18 -78
- package/bin/lib/command-generator.js +261 -0
- package/bin/lib/prompts.js +2 -65
- package/bin/modules/chrome-brain-installer.js +2 -1
- package/bin/postinstall.js +6 -6
- package/docs/getting-started.md +0 -1
- package/docs/pt/getting-started.md +1 -1
- package/docs/security/dependabot-triage.md +17 -17
- package/package.json +6 -3
- package/packages/installer/src/wizard/i18n.js +3 -204
- package/packages/installer/src/wizard/index.js +1 -1
- package/packages/installer/src/wizard/questions.js +5 -368
- package/packages/installer/src/wizard/wizard.js +0 -9
- package/scripts/generate-install-manifest.js +6 -0
- package/scripts/validate-changelog-tags.js +97 -0
- package/scripts/validate-no-personal-leaks.js +184 -28
- package/scripts/validate-schemas.js +55 -10
- package/scripts/validate-story-meta.js +25 -12
- package/squads/claude-code-mastery/agents/claude-mastery-chief.md +1 -1
- package/squads/claude-code-mastery/agents/hooks-architect.md +12 -20
- package/squads/claude-code-mastery/tasks/audit-setup.md +1 -1
- package/squads/squad-product/agents/product-orqx.md +0 -1
- package/squads/squad-product/agents/ps-client-product-manager.md +0 -1
- package/squads/squad-product/agents/ps-delivery-manager.md +0 -1
- package/squads/squad-product/agents/ps-discovery-lead.md +0 -1
- package/squads/squad-product/agents/ps-product-analyst.md +0 -1
- package/squads/squad-product/agents/ps-product-ops-specialist.md +0 -1
- package/squads/squad-product/agents/ps-product-strategist.md +0 -1
- package/.sinapse-ai/core/grounding/README.md +0 -83
- package/.sinapse-ai/core/grounding/brand.cjs +0 -29
- package/.sinapse-ai/core/grounding/config-loader.cjs +0 -52
- package/.sinapse-ai/core/grounding/design-system.cjs +0 -29
- package/.sinapse-ai/core/grounding/vault.cjs +0 -36
- package/.sinapse-ai/development/scripts/approval-workflow.js +0 -643
- package/.sinapse-ai/development/scripts/backup-manager.js +0 -607
- package/.sinapse-ai/development/scripts/branch-manager.js +0 -390
- package/.sinapse-ai/development/scripts/code-quality-improver.js +0 -1329
- package/.sinapse-ai/development/scripts/commit-message-generator.js +0 -850
- package/.sinapse-ai/development/scripts/conflict-resolver.js +0 -675
- package/.sinapse-ai/development/scripts/dependency-analyzer.js +0 -638
- package/.sinapse-ai/development/scripts/diff-generator.js +0 -352
- package/.sinapse-ai/development/scripts/git-wrapper.js +0 -462
- package/.sinapse-ai/development/scripts/modification-validator.js +0 -555
- package/.sinapse-ai/development/scripts/performance-analyzer.js +0 -758
- package/.sinapse-ai/development/scripts/refactoring-suggester.js +0 -1148
- package/.sinapse-ai/development/scripts/rollback-handler.js +0 -531
- package/.sinapse-ai/development/scripts/security-checker.js +0 -359
- package/.sinapse-ai/development/scripts/template-engine.js +0 -240
- package/.sinapse-ai/development/scripts/template-validator.js +0 -279
- package/.sinapse-ai/development/scripts/test-generator.js +0 -844
- package/.sinapse-ai/development/scripts/transaction-manager.js +0 -590
- package/.sinapse-ai/development/scripts/yaml-validator.js +0 -397
- package/.sinapse-ai/hooks/sinapse-brand-grounding.cjs +0 -162
- package/.sinapse-ai/hooks/sinapse-ds-grounding.cjs +0 -211
- package/.sinapse-ai/hooks/sinapse-vault-grounding.cjs +0 -194
- package/bin/lib/register-grounding-hooks.js +0 -145
- package/docs/guides/agents/traces/execution-traces.zip +0 -0
- package/docs/guides/grounding-setup.md +0 -154
- package/docs/guides/workflows/SINAPSE-WORKFLOWS.zip +0 -0
- package/packages/installer/src/pro/pro-scaffolder.js +0 -449
- package/packages/installer/src/wizard/grounding-config.js +0 -131
- package/packages/installer/src/wizard/pro-setup.js +0 -1439
- package/packages/installer/templates/README.md +0 -16
- package/packages/installer/templates/brand-routing.example.json +0 -12
- package/packages/installer/templates/ds-routing.example.json +0 -12
- 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:
|
|
382
|
-
|
|
179
|
+
// Current language (default: Portuguese — product 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 || '
|
|
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
|
-
*
|
|
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 {
|
|
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: '
|
|
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$/,
|