kasy-cli 1.9.1 → 1.10.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/bin/kasy.js CHANGED
@@ -76,7 +76,10 @@ function createLocalizedHelpConfig(t) {
76
76
  }
77
77
 
78
78
  function localizeSubcommandTerm(term) {
79
- return term.replace(/ \[options\]/g, ` ${t('cli.help.inline.options')}`);
79
+ // Hide " [options]" entirely on the root help — users can run
80
+ // `kasy <command> --help` to see options for a specific command.
81
+ // Subcommand help still shows its own Options section.
82
+ return term.replace(/ \[options\]/g, '');
80
83
  }
81
84
 
82
85
  const localizedUsage = helper.commandUsage(cmd).replace(
@@ -341,13 +344,13 @@ function buildProgram(language) {
341
344
  applyLocalizedHelp(
342
345
  program
343
346
  .command('add')
344
- .argument('[module]', 'Module to add (e.g. sentry, analytics, revenuecat, onboarding, llm_chat, ci...)')
345
- .option('--list', 'List all available modules and their current status')
347
+ .argument('[feature]', 'Feature to add (e.g. sentry, analytics, revenuecat, onboarding, llm_chat, ci...)')
348
+ .option('--list', 'List all available features and their current status')
346
349
  .option('--yes', 'Skip interactive prompts (use placeholder values)')
347
350
  .option('-d, --directory <path>', 'Project folder (default: current directory)', '.')
348
351
  .description(t('cli.command.add.description'))
349
- .action(async (module, options) => {
350
- await runAdd(module, { language, ...options });
352
+ .action(async (feature, options) => {
353
+ await runAdd(feature, { language, ...options });
351
354
  }),
352
355
  t
353
356
  );
@@ -355,12 +358,12 @@ function buildProgram(language) {
355
358
  applyLocalizedHelp(
356
359
  program
357
360
  .command('remove')
358
- .argument('[module]', 'Module to remove (e.g. sentry, analytics, llm_chat, ci...)')
361
+ .argument('[feature]', 'Feature to remove (e.g. sentry, analytics, llm_chat, ci...)')
359
362
  .option('--yes', 'Skip confirmation prompt')
360
363
  .option('-d, --directory <path>', 'Project folder (default: current directory)', '.')
361
364
  .description(t('cli.command.remove.description'))
362
- .action(async (module, options) => {
363
- await runRemove(module, { language, ...options });
365
+ .action(async (feature, options) => {
366
+ await runRemove(feature, { language, ...options });
364
367
  }),
365
368
  t
366
369
  );
@@ -369,14 +372,14 @@ function buildProgram(language) {
369
372
  program
370
373
  .command('update')
371
374
  .argument(
372
- '[module]',
375
+ '[feature]',
373
376
  t('cli.command.update.targetArg')
374
377
  )
375
378
  .option('--yes', 'Skip confirmation prompt')
376
379
  .option('-d, --directory <path>', 'Project folder (default: current directory)', '.')
377
380
  .description(t('cli.command.update.description'))
378
- .action(async (module, options) => {
379
- await runUpdate(module, { language, ...options });
381
+ .action(async (feature, options) => {
382
+ await runUpdate(feature, { language, ...options });
380
383
  }),
381
384
  t
382
385
  );
@@ -1,4 +1,13 @@
1
1
  {
2
+ "1.10.0": {
3
+ "modules": {
4
+ "widget": {
5
+ "pt": "Widget agora funciona ponta a ponta: idioma do app (pt/en/es), saudação correta pelo horário, nome real do usuário, status PRO/Free em tempo real (com fallback do RevenueCat quando o webhook atrasa), auto-refresh quando o estado do usuário muda — sem esperar o background task de 15 min. App Group iOS corrigido em Runner.entitlements (sem isso a escrita ia pro vazio). Textos hardcoded em Swift/Kotlin removidos — o nativo só renderiza o que o Dart manda.",
6
+ "en": "Widget now works end-to-end: app language (pt/en/es), correct greeting for time of day, real user name, real-time PRO/Free status (with RevenueCat fallback when the webhook is delayed), auto-refresh when user state changes — no need to wait for the 15-min background task. iOS App Group fixed in Runner.entitlements (without it, writes went to nowhere). Hardcoded strings removed from Swift/Kotlin — native side only renders what Dart sends.",
7
+ "es": "El widget ahora funciona de punta a punta: idioma de la app (pt/en/es), saludo correcto según el horario, nombre real del usuario, estado PRO/Free en tiempo real (con fallback de RevenueCat cuando el webhook se atrasa), auto-refresh cuando el estado del usuario cambia — sin esperar la background task de 15 min. App Group iOS corregido en Runner.entitlements (sin esto las escrituras iban al vacío). Textos hardcoded en Swift/Kotlin eliminados — el código nativo solo renderiza lo que Dart envía."
8
+ }
9
+ }
10
+ },
2
11
  "1.8.0": {
3
12
  "modules": {
4
13
  "components": {
@@ -31,7 +31,7 @@ Ao gerar um projeto, o engine copia recursivamente o conteúdo de `features/{mod
31
31
  |-------------|------------------|-----------------------------------------------------|
32
32
  | `ci` | ✅ Sim | Adiciona `.github/`, `.gitlab-ci.yml`, etc. |
33
33
  | `web` | ✅ Sim | Adiciona pasta `web/` e configurações de plataforma |
34
- | `widget` | ✅ Sim | Adiciona configurações Android para home widgets |
34
+ | `widget` | Não | Os arquivos do widget (iOS + Android + Dart) já vão no template base. Quando o módulo não é selecionado, `removeAndroidWidgetArtifacts` + `writeNoOpAdminHomeWidgets` em `generate.js` limpam o que sobra. |
35
35
  | `llm_chat` | Não | Apenas `LLM_CHAT_ENDPOINT` via dart-define. A chave da API LLM fica no servidor (Firebase Secret / Supabase Secret) — nunca no app. |
36
36
  | `sentry` | Não | Apenas dart-define (`SENTRY_DSN`) |
37
37
  | `analytics` | Não | Apenas dart-define |