@nimbuslab/cli 0.11.0 → 0.12.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/dist/index.js CHANGED
@@ -150,7 +150,7 @@ var require_src = __commonJS((exports, module) => {
150
150
  var require_package = __commonJS((exports, module) => {
151
151
  module.exports = {
152
152
  name: "@nimbuslab/cli",
153
- version: "0.11.0",
153
+ version: "0.12.0",
154
154
  description: "CLI para criar projetos nimbuslab",
155
155
  type: "module",
156
156
  bin: {
@@ -2579,12 +2579,161 @@ lola_profile: ${profile}
2579
2579
  console.log(import_picocolors6.default.dim(" Docs: ~/.lola/README.md"));
2580
2580
  console.log();
2581
2581
  }
2582
+ var QUIZ_QUESTIONS = [
2583
+ {
2584
+ question: "Quais sao os 4 valores da nimbuslab?",
2585
+ options: [
2586
+ { value: "a", label: "Velocidade, Qualidade, Preco, Entrega" },
2587
+ { value: "b", label: "Cocriacao, Inovacao, Evolucao, Humanizacao" },
2588
+ { value: "c", label: "Codigo, Design, Marketing, Vendas" },
2589
+ { value: "d", label: "Agil, Lean, Scrum, Kanban" }
2590
+ ],
2591
+ correct: "b",
2592
+ explanation: "Cocriacao (construimos junto), Inovacao (buscamos o novo), Evolucao (aprendizado continuo), Humanizacao (tecnologia a servico das pessoas)."
2593
+ },
2594
+ {
2595
+ question: "Quais sao os 4 pilares da filosofia fast?",
2596
+ options: [
2597
+ { value: "a", label: "Analise, Planejamento, Execucao, Documentacao" },
2598
+ { value: "b", label: "Design, Codigo, Teste, Deploy" },
2599
+ { value: "c", label: "Briefing, Prototipo, Desenvolvimento, Lancamento" },
2600
+ { value: "d", label: "Discovery, Definition, Development, Delivery" }
2601
+ ],
2602
+ correct: "a",
2603
+ explanation: "Filosofia fast: 1. Analise (entender), 2. Planejamento (definir caminho), 3. Execucao (implementar), 4. Documentacao (registrar)."
2604
+ },
2605
+ {
2606
+ question: "Qual package manager a nimbuslab usa como padrao?",
2607
+ options: [
2608
+ { value: "a", label: "npm" },
2609
+ { value: "b", label: "yarn" },
2610
+ { value: "c", label: "pnpm" },
2611
+ { value: "d", label: "bun" }
2612
+ ],
2613
+ correct: "d",
2614
+ explanation: "Bun e o package manager padrao. Mais rapido e com menos dependencias."
2615
+ },
2616
+ {
2617
+ question: "Qual o estilo padrao do shadcn/ui na nimbuslab?",
2618
+ options: [
2619
+ { value: "a", label: "new-york" },
2620
+ { value: "b", label: "default" },
2621
+ { value: "c", label: "minimal" },
2622
+ { value: "d", label: "custom" }
2623
+ ],
2624
+ correct: "b",
2625
+ explanation: "Usamos o estilo 'default' do shadcn/ui. Nunca 'new-york'."
2626
+ },
2627
+ {
2628
+ question: "Em projetos externos (stealth mode), a Lola deve:",
2629
+ options: [
2630
+ { value: "a", label: "Sempre mencionar a nimbuslab nos commits" },
2631
+ { value: "b", label: "Usar assinatura 'Co-authored-by: Lola'" },
2632
+ { value: "c", label: "Nunca mencionar nimbuslab, Lola ou IA" },
2633
+ { value: "d", label: "Adicionar badge da nimbuslab no README" }
2634
+ ],
2635
+ correct: "c",
2636
+ explanation: "Stealth mode: commits sem mencao a nimbuslab/Lola/IA. O cliente nao precisa saber dos bastidores."
2637
+ },
2638
+ {
2639
+ question: "Qual a versao minima do Next.js usada na stack nimbuslab?",
2640
+ options: [
2641
+ { value: "a", label: "Next.js 13" },
2642
+ { value: "b", label: "Next.js 14" },
2643
+ { value: "c", label: "Next.js 15" },
2644
+ { value: "d", label: "Next.js 16" }
2645
+ ],
2646
+ correct: "d",
2647
+ explanation: "Stack atual: Next.js 16+ com App Router e Turbopack."
2648
+ },
2649
+ {
2650
+ question: "Quem pode aprovar e mergear mudancas no repositorio da Lola?",
2651
+ options: [
2652
+ { value: "a", label: "Qualquer dev da nimbuslab" },
2653
+ { value: "b", label: "Apenas o Hugo" },
2654
+ { value: "c", label: "Qualquer pessoa com acesso ao repo" },
2655
+ { value: "d", label: "A propria Lola via automacao" }
2656
+ ],
2657
+ correct: "b",
2658
+ explanation: "Apenas o Hugo pode aprovar e mergear. Devs sugerem via 'lola suggest', Hugo revisa."
2659
+ },
2660
+ {
2661
+ question: "Em commits da nimbuslab, qual o idioma correto?",
2662
+ options: [
2663
+ { value: "a", label: "Ingles" },
2664
+ { value: "b", label: "Portugues (BR)" },
2665
+ { value: "c", label: "Depende do projeto" },
2666
+ { value: "d", label: "Spanglish" }
2667
+ ],
2668
+ correct: "b",
2669
+ explanation: "Commits e PRs em Portugues (BR). Codigo e comentarios em Ingles."
2670
+ }
2671
+ ];
2672
+ async function runQuiz() {
2673
+ console.log();
2674
+ console.log(import_picocolors6.default.cyan(" Quiz nimbuslab"));
2675
+ console.log(import_picocolors6.default.dim(" =============="));
2676
+ console.log();
2677
+ console.log(import_picocolors6.default.dim(" Teste seus conhecimentos sobre a nimbuslab!"));
2678
+ console.log(import_picocolors6.default.dim(" 8 perguntas sobre valores, filosofia e stack."));
2679
+ console.log();
2680
+ let score = 0;
2681
+ const results = [];
2682
+ for (let i = 0;i < QUIZ_QUESTIONS.length; i++) {
2683
+ const q2 = QUIZ_QUESTIONS[i];
2684
+ const answer = await ve({
2685
+ message: `${i + 1}. ${q2.question}`,
2686
+ options: q2.options
2687
+ });
2688
+ if (pD(answer)) {
2689
+ xe("Quiz cancelado");
2690
+ process.exit(0);
2691
+ }
2692
+ const isCorrect = answer === q2.correct;
2693
+ if (isCorrect) {
2694
+ score++;
2695
+ console.log(import_picocolors6.default.green(" Correto!"));
2696
+ } else {
2697
+ console.log(import_picocolors6.default.red(" Incorreto."));
2698
+ }
2699
+ console.log(import_picocolors6.default.dim(` ${q2.explanation}`));
2700
+ console.log();
2701
+ results.push({
2702
+ question: q2.question,
2703
+ correct: isCorrect,
2704
+ explanation: q2.explanation
2705
+ });
2706
+ }
2707
+ const percentage = Math.round(score / QUIZ_QUESTIONS.length * 100);
2708
+ const passed = percentage >= 75;
2709
+ console.log(import_picocolors6.default.bold(" Resultado:"));
2710
+ console.log();
2711
+ if (passed) {
2712
+ console.log(import_picocolors6.default.green(` ${score}/${QUIZ_QUESTIONS.length} (${percentage}%) - Aprovado!`));
2713
+ console.log();
2714
+ if (percentage === 100) {
2715
+ console.log(import_picocolors6.default.cyan(" Perfeito! Voce conhece bem a nimbuslab."));
2716
+ } else {
2717
+ console.log(import_picocolors6.default.cyan(" Muito bem! Voce esta pronto para trabalhar."));
2718
+ }
2719
+ } else {
2720
+ console.log(import_picocolors6.default.yellow(` ${score}/${QUIZ_QUESTIONS.length} (${percentage}%) - Precisa revisar`));
2721
+ console.log();
2722
+ console.log(import_picocolors6.default.dim(" Revise os conceitos em:"));
2723
+ console.log(import_picocolors6.default.dim(" ~/.lola/core/values.md"));
2724
+ console.log(import_picocolors6.default.dim(" ~/.lola/core/philosophy.md"));
2725
+ console.log(import_picocolors6.default.dim(" ~/.lola/modules/stack.md"));
2726
+ }
2727
+ console.log();
2728
+ }
2582
2729
  async function lola(args) {
2583
2730
  const subcommand = args[0];
2584
2731
  if (!subcommand || subcommand === "install" || subcommand === "sync") {
2585
2732
  await installLola();
2586
2733
  } else if (subcommand === "onboard") {
2587
2734
  await onboardDev();
2735
+ } else if (subcommand === "quiz") {
2736
+ await runQuiz();
2588
2737
  } else if (subcommand === "suggest") {
2589
2738
  const message = args.slice(1).join(" ");
2590
2739
  await suggestImprovement(message);
@@ -2606,12 +2755,14 @@ function showLolaHelp() {
2606
2755
  console.log(import_picocolors6.default.dim(" install ") + import_picocolors6.default.white("Instalar/atualizar Lola"));
2607
2756
  console.log(import_picocolors6.default.dim(" sync ") + import_picocolors6.default.white("Alias para install"));
2608
2757
  console.log(import_picocolors6.default.dim(" onboard ") + import_picocolors6.default.white("Configurar perfil (novos devs)"));
2758
+ console.log(import_picocolors6.default.dim(" quiz ") + import_picocolors6.default.white("Quiz sobre a nimbuslab"));
2609
2759
  console.log(import_picocolors6.default.dim(' suggest "msg" ') + import_picocolors6.default.white("Sugerir melhoria (cria issue)"));
2610
2760
  console.log(import_picocolors6.default.dim(" help ") + import_picocolors6.default.white("Mostrar esta ajuda"));
2611
2761
  console.log();
2612
2762
  console.log(import_picocolors6.default.bold(" Exemplos:"));
2613
2763
  console.log(import_picocolors6.default.dim(" $ nimbus lola install"));
2614
2764
  console.log(import_picocolors6.default.dim(" $ nimbus lola onboard"));
2765
+ console.log(import_picocolors6.default.dim(" $ nimbus lola quiz"));
2615
2766
  console.log(import_picocolors6.default.dim(' $ nimbus lola suggest "adicionar suporte a X"'));
2616
2767
  console.log();
2617
2768
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nimbuslab/cli",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "CLI para criar projetos nimbuslab",
5
5
  "type": "module",
6
6
  "bin": {
@@ -293,6 +293,173 @@ lola_profile: ${profile}
293
293
  console.log()
294
294
  }
295
295
 
296
+ // Quiz sobre a nimbuslab
297
+ interface QuizQuestion {
298
+ question: string
299
+ options: { value: string; label: string }[]
300
+ correct: string
301
+ explanation: string
302
+ }
303
+
304
+ const QUIZ_QUESTIONS: QuizQuestion[] = [
305
+ {
306
+ question: "Quais sao os 4 valores da nimbuslab?",
307
+ options: [
308
+ { value: "a", label: "Velocidade, Qualidade, Preco, Entrega" },
309
+ { value: "b", label: "Cocriacao, Inovacao, Evolucao, Humanizacao" },
310
+ { value: "c", label: "Codigo, Design, Marketing, Vendas" },
311
+ { value: "d", label: "Agil, Lean, Scrum, Kanban" },
312
+ ],
313
+ correct: "b",
314
+ explanation: "Cocriacao (construimos junto), Inovacao (buscamos o novo), Evolucao (aprendizado continuo), Humanizacao (tecnologia a servico das pessoas).",
315
+ },
316
+ {
317
+ question: "Quais sao os 4 pilares da filosofia fast?",
318
+ options: [
319
+ { value: "a", label: "Analise, Planejamento, Execucao, Documentacao" },
320
+ { value: "b", label: "Design, Codigo, Teste, Deploy" },
321
+ { value: "c", label: "Briefing, Prototipo, Desenvolvimento, Lancamento" },
322
+ { value: "d", label: "Discovery, Definition, Development, Delivery" },
323
+ ],
324
+ correct: "a",
325
+ explanation: "Filosofia fast: 1. Analise (entender), 2. Planejamento (definir caminho), 3. Execucao (implementar), 4. Documentacao (registrar).",
326
+ },
327
+ {
328
+ question: "Qual package manager a nimbuslab usa como padrao?",
329
+ options: [
330
+ { value: "a", label: "npm" },
331
+ { value: "b", label: "yarn" },
332
+ { value: "c", label: "pnpm" },
333
+ { value: "d", label: "bun" },
334
+ ],
335
+ correct: "d",
336
+ explanation: "Bun e o package manager padrao. Mais rapido e com menos dependencias.",
337
+ },
338
+ {
339
+ question: "Qual o estilo padrao do shadcn/ui na nimbuslab?",
340
+ options: [
341
+ { value: "a", label: "new-york" },
342
+ { value: "b", label: "default" },
343
+ { value: "c", label: "minimal" },
344
+ { value: "d", label: "custom" },
345
+ ],
346
+ correct: "b",
347
+ explanation: "Usamos o estilo 'default' do shadcn/ui. Nunca 'new-york'.",
348
+ },
349
+ {
350
+ question: "Em projetos externos (stealth mode), a Lola deve:",
351
+ options: [
352
+ { value: "a", label: "Sempre mencionar a nimbuslab nos commits" },
353
+ { value: "b", label: "Usar assinatura 'Co-authored-by: Lola'" },
354
+ { value: "c", label: "Nunca mencionar nimbuslab, Lola ou IA" },
355
+ { value: "d", label: "Adicionar badge da nimbuslab no README" },
356
+ ],
357
+ correct: "c",
358
+ explanation: "Stealth mode: commits sem mencao a nimbuslab/Lola/IA. O cliente nao precisa saber dos bastidores.",
359
+ },
360
+ {
361
+ question: "Qual a versao minima do Next.js usada na stack nimbuslab?",
362
+ options: [
363
+ { value: "a", label: "Next.js 13" },
364
+ { value: "b", label: "Next.js 14" },
365
+ { value: "c", label: "Next.js 15" },
366
+ { value: "d", label: "Next.js 16" },
367
+ ],
368
+ correct: "d",
369
+ explanation: "Stack atual: Next.js 16+ com App Router e Turbopack.",
370
+ },
371
+ {
372
+ question: "Quem pode aprovar e mergear mudancas no repositorio da Lola?",
373
+ options: [
374
+ { value: "a", label: "Qualquer dev da nimbuslab" },
375
+ { value: "b", label: "Apenas o Hugo" },
376
+ { value: "c", label: "Qualquer pessoa com acesso ao repo" },
377
+ { value: "d", label: "A propria Lola via automacao" },
378
+ ],
379
+ correct: "b",
380
+ explanation: "Apenas o Hugo pode aprovar e mergear. Devs sugerem via 'lola suggest', Hugo revisa.",
381
+ },
382
+ {
383
+ question: "Em commits da nimbuslab, qual o idioma correto?",
384
+ options: [
385
+ { value: "a", label: "Ingles" },
386
+ { value: "b", label: "Portugues (BR)" },
387
+ { value: "c", label: "Depende do projeto" },
388
+ { value: "d", label: "Spanglish" },
389
+ ],
390
+ correct: "b",
391
+ explanation: "Commits e PRs em Portugues (BR). Codigo e comentarios em Ingles.",
392
+ },
393
+ ]
394
+
395
+ async function runQuiz(): Promise<void> {
396
+ console.log()
397
+ console.log(pc.cyan(" Quiz nimbuslab"))
398
+ console.log(pc.dim(" =============="))
399
+ console.log()
400
+ console.log(pc.dim(" Teste seus conhecimentos sobre a nimbuslab!"))
401
+ console.log(pc.dim(" 8 perguntas sobre valores, filosofia e stack."))
402
+ console.log()
403
+
404
+ let score = 0
405
+ const results: { question: string; correct: boolean; explanation: string }[] = []
406
+
407
+ for (let i = 0; i < QUIZ_QUESTIONS.length; i++) {
408
+ const q = QUIZ_QUESTIONS[i]!
409
+
410
+ const answer = await p.select({
411
+ message: `${i + 1}. ${q.question}`,
412
+ options: q.options,
413
+ })
414
+
415
+ if (p.isCancel(answer)) {
416
+ p.cancel("Quiz cancelado")
417
+ process.exit(0)
418
+ }
419
+
420
+ const isCorrect = answer === q.correct
421
+ if (isCorrect) {
422
+ score++
423
+ console.log(pc.green(" Correto!"))
424
+ } else {
425
+ console.log(pc.red(" Incorreto."))
426
+ }
427
+ console.log(pc.dim(` ${q.explanation}`))
428
+ console.log()
429
+
430
+ results.push({
431
+ question: q.question,
432
+ correct: isCorrect,
433
+ explanation: q.explanation,
434
+ })
435
+ }
436
+
437
+ // Resultado final
438
+ const percentage = Math.round((score / QUIZ_QUESTIONS.length) * 100)
439
+ const passed = percentage >= 75
440
+
441
+ console.log(pc.bold(" Resultado:"))
442
+ console.log()
443
+
444
+ if (passed) {
445
+ console.log(pc.green(` ${score}/${QUIZ_QUESTIONS.length} (${percentage}%) - Aprovado!`))
446
+ console.log()
447
+ if (percentage === 100) {
448
+ console.log(pc.cyan(" Perfeito! Voce conhece bem a nimbuslab."))
449
+ } else {
450
+ console.log(pc.cyan(" Muito bem! Voce esta pronto para trabalhar."))
451
+ }
452
+ } else {
453
+ console.log(pc.yellow(` ${score}/${QUIZ_QUESTIONS.length} (${percentage}%) - Precisa revisar`))
454
+ console.log()
455
+ console.log(pc.dim(" Revise os conceitos em:"))
456
+ console.log(pc.dim(" ~/.lola/core/values.md"))
457
+ console.log(pc.dim(" ~/.lola/core/philosophy.md"))
458
+ console.log(pc.dim(" ~/.lola/modules/stack.md"))
459
+ }
460
+ console.log()
461
+ }
462
+
296
463
  export async function lola(args: string[]) {
297
464
  const subcommand = args[0]
298
465
 
@@ -300,6 +467,8 @@ export async function lola(args: string[]) {
300
467
  await installLola()
301
468
  } else if (subcommand === "onboard") {
302
469
  await onboardDev()
470
+ } else if (subcommand === "quiz") {
471
+ await runQuiz()
303
472
  } else if (subcommand === "suggest") {
304
473
  const message = args.slice(1).join(" ")
305
474
  await suggestImprovement(message)
@@ -322,12 +491,14 @@ function showLolaHelp() {
322
491
  console.log(pc.dim(" install ") + pc.white("Instalar/atualizar Lola"))
323
492
  console.log(pc.dim(" sync ") + pc.white("Alias para install"))
324
493
  console.log(pc.dim(" onboard ") + pc.white("Configurar perfil (novos devs)"))
494
+ console.log(pc.dim(" quiz ") + pc.white("Quiz sobre a nimbuslab"))
325
495
  console.log(pc.dim(" suggest \"msg\" ") + pc.white("Sugerir melhoria (cria issue)"))
326
496
  console.log(pc.dim(" help ") + pc.white("Mostrar esta ajuda"))
327
497
  console.log()
328
498
  console.log(pc.bold(" Exemplos:"))
329
499
  console.log(pc.dim(" $ nimbus lola install"))
330
500
  console.log(pc.dim(" $ nimbus lola onboard"))
501
+ console.log(pc.dim(" $ nimbus lola quiz"))
331
502
  console.log(pc.dim(" $ nimbus lola suggest \"adicionar suporte a X\""))
332
503
  console.log()
333
504
  }