@cronus-ui/stack 0.6.0 → 0.6.2

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/catalog.js CHANGED
@@ -31,6 +31,7 @@ export const catalog = [
31
31
  name: "Next.js",
32
32
  description: "React App Router meta-framework.",
33
33
  icon: "triangle",
34
+ emits: "scaffold",
34
35
  },
35
36
  {
36
37
  id: "web-tanstack-start",
@@ -228,6 +229,7 @@ export const catalog = [
228
229
  // SQL-only in this catalog: needs a SQL db, never Mongo.
229
230
  requires: ["db-sql"],
230
231
  conflicts: ["db-mongodb"],
232
+ emits: "scaffold",
231
233
  },
232
234
  {
233
235
  id: "orm-prisma",
@@ -367,6 +369,7 @@ export const catalog = [
367
369
  icon: "sparkles",
368
370
  requires: ["web-react"],
369
371
  recommends: ["mcp-cronus-ui"],
372
+ emits: "scaffold",
370
373
  },
371
374
  {
372
375
  id: "ui-shadcn",
@@ -374,6 +377,7 @@ export const catalog = [
374
377
  description: "Copy-in Radix + Tailwind components.",
375
378
  icon: "component",
376
379
  requires: ["web-react"],
380
+ emits: "scaffold",
377
381
  },
378
382
  {
379
383
  id: "ui-heroui",
@@ -381,6 +385,7 @@ export const catalog = [
381
385
  description: "Beautiful React component library.",
382
386
  icon: "component",
383
387
  requires: ["web-react"],
388
+ emits: "scaffold",
384
389
  },
385
390
  {
386
391
  id: "ui-aceternity",
@@ -389,14 +394,22 @@ export const catalog = [
389
394
  icon: "wand-sparkles",
390
395
  requires: ["web-react"],
391
396
  badge: "experimental",
397
+ emits: "scaffold",
392
398
  },
393
399
  {
394
400
  id: "ui-tailwind",
395
401
  name: "Tailwind-only",
396
402
  description: "Utility CSS, bring your own components.",
397
403
  icon: "paintbrush",
404
+ emits: "scaffold",
405
+ },
406
+ {
407
+ id: "ui-none",
408
+ name: "None",
409
+ description: "No UI library.",
410
+ icon: "circle-slash",
411
+ emits: "scaffold",
398
412
  },
399
- { id: "ui-none", name: "None", description: "No UI library.", icon: "circle-slash" },
400
413
  ],
401
414
  },
402
415
  // ------------------------------------------------------- AI ASSISTANTS ----
@@ -411,15 +424,29 @@ export const catalog = [
411
424
  name: "Claude Code",
412
425
  description: "Anthropic's official coding agent.",
413
426
  icon: "bot",
427
+ emits: "scaffold",
414
428
  },
415
429
  {
416
430
  id: "ai-cursor",
417
431
  name: "Cursor",
418
432
  description: "AI-first code editor.",
419
433
  icon: "mouse-pointer-2",
434
+ emits: "scaffold",
435
+ },
436
+ {
437
+ id: "ai-windsurf",
438
+ name: "Windsurf",
439
+ description: "Agentic IDE by Codeium.",
440
+ icon: "wind",
441
+ emits: "scaffold",
442
+ },
443
+ {
444
+ id: "ai-copilot",
445
+ name: "Copilot",
446
+ description: "GitHub Copilot.",
447
+ icon: "github",
448
+ emits: "scaffold",
420
449
  },
421
- { id: "ai-windsurf", name: "Windsurf", description: "Agentic IDE by Codeium.", icon: "wind" },
422
- { id: "ai-copilot", name: "Copilot", description: "GitHub Copilot.", icon: "github" },
423
450
  {
424
451
  id: "ai-cline",
425
452
  name: "Cline",
@@ -441,6 +468,7 @@ export const catalog = [
441
468
  description: "Cronus UI component & token context.",
442
469
  icon: "sparkles",
443
470
  recommends: ["ui-cronus"],
471
+ emits: "scaffold",
444
472
  },
445
473
  {
446
474
  id: "mcp-postgres",
@@ -472,38 +500,57 @@ export const catalog = [
472
500
  {
473
501
  id: "skills",
474
502
  title: "Skills",
475
- description: "Reusable agent skill packs to install.",
503
+ description: "Claude Code skills written into the repo by the AI Kit.",
476
504
  kind: "multi",
477
505
  options: [
478
506
  {
479
- id: "skill-frontend",
480
- name: "frontend",
481
- description: "Frontend & component patterns.",
482
- icon: "layout",
507
+ id: "skill-ui-add",
508
+ name: "ui-add",
509
+ description: "Install a Cronus UI component or block.",
510
+ icon: "component",
511
+ emits: "scaffold",
483
512
  },
484
513
  {
485
- id: "skill-db",
486
- name: "db",
487
- description: "Schema, migrations, and queries.",
488
- icon: "database",
514
+ id: "skill-theme",
515
+ name: "theme",
516
+ description: "Preview and switch Cronus UI themes.",
517
+ icon: "paintbrush",
518
+ emits: "scaffold",
489
519
  },
490
520
  {
491
- id: "skill-security-review",
492
- name: "security-review",
493
- description: "Adversarial security review.",
521
+ id: "skill-compose",
522
+ name: "compose",
523
+ description: "Scaffold or grow a Cronus UI product.",
524
+ icon: "layers",
525
+ emits: "scaffold",
526
+ },
527
+ {
528
+ id: "skill-upgrade",
529
+ name: "upgrade",
530
+ description: "Pull upstream Cronus UI updates without losing edits.",
531
+ icon: "wand",
532
+ emits: "scaffold",
533
+ },
534
+ {
535
+ id: "skill-code-review",
536
+ name: "code-review",
537
+ description: "Adversarial review of the working diff.",
494
538
  icon: "shield-alert",
539
+ emits: "scaffold",
495
540
  },
496
541
  {
497
- id: "skill-a11y",
498
- name: "a11y",
499
- description: "Accessibility auditing & fixes.",
500
- icon: "accessibility",
542
+ id: "skill-ship-pr",
543
+ name: "ship-pr",
544
+ description: "Commit and open a pull request.",
545
+ icon: "git-merge",
546
+ emits: "scaffold",
501
547
  },
502
548
  {
503
- id: "skill-testing",
504
- name: "testing",
505
- description: "Unit, integration & e2e testing.",
549
+ id: "skill-evidence-check",
550
+ name: "evidence-check",
551
+ description: "Tag claims with evidence levels.",
506
552
  icon: "flask-conical",
553
+ emits: "scaffold",
507
554
  },
508
555
  ],
509
556
  },
@@ -563,18 +610,26 @@ export const catalog = [
563
610
  description: "Dependency & workspace tool.",
564
611
  kind: "single",
565
612
  options: [
566
- { id: "pm-bun", name: "bun", description: "Fast all-in-one toolkit.", icon: "rabbit" },
613
+ {
614
+ id: "pm-bun",
615
+ name: "bun",
616
+ description: "Fast all-in-one toolkit.",
617
+ icon: "rabbit",
618
+ emits: "scaffold",
619
+ },
567
620
  {
568
621
  id: "pm-pnpm",
569
622
  name: "pnpm",
570
623
  description: "Efficient, strict node_modules.",
571
624
  icon: "package",
625
+ emits: "scaffold",
572
626
  },
573
627
  {
574
628
  id: "pm-npm",
575
629
  name: "npm",
576
630
  description: "The default Node package manager.",
577
631
  icon: "package",
632
+ emits: "scaffold",
578
633
  },
579
634
  ],
580
635
  },
@@ -598,7 +653,13 @@ export const catalog = [
598
653
  icon: "app-window",
599
654
  badge: "experimental",
600
655
  },
601
- { id: "addon-biome", name: "Biome", description: "Fast formatter & linter.", icon: "wand" },
656
+ {
657
+ id: "addon-biome",
658
+ name: "Biome",
659
+ description: "Fast formatter & linter.",
660
+ icon: "wand",
661
+ emits: "scaffold",
662
+ },
602
663
  {
603
664
  id: "addon-turborepo",
604
665
  name: "Turborepo",
@@ -685,12 +746,14 @@ export const catalog = [
685
746
  name: "src/ directory",
686
747
  description: "All app code under src/.",
687
748
  icon: "folder-tree",
749
+ emits: "scaffold",
688
750
  },
689
751
  {
690
752
  id: "structure-root",
691
753
  name: "Root-level",
692
754
  description: "app/ and code at the repo root.",
693
755
  icon: "folder",
756
+ emits: "scaffold",
694
757
  },
695
758
  ],
696
759
  },
@@ -706,12 +769,14 @@ export const catalog = [
706
769
  name: "@/ alias",
707
770
  description: "Absolute imports from the app root.",
708
771
  icon: "at-sign",
772
+ emits: "scaffold",
709
773
  },
710
774
  {
711
775
  id: "import-relative",
712
776
  name: "Relative",
713
777
  description: "Relative ./ and ../ paths.",
714
778
  icon: "route",
779
+ emits: "scaffold",
715
780
  },
716
781
  ],
717
782
  },
@@ -727,12 +792,14 @@ export const catalog = [
727
792
  name: "Conventional",
728
793
  description: "type(scope): subject",
729
794
  icon: "git-commit",
795
+ emits: "scaffold",
730
796
  },
731
797
  {
732
798
  id: "commit-plain",
733
799
  name: "Plain",
734
800
  description: "Freeform commit messages.",
735
801
  icon: "git-commit",
802
+ emits: "scaffold",
736
803
  },
737
804
  ],
738
805
  },
@@ -748,12 +815,14 @@ export const catalog = [
748
815
  name: "Strict",
749
816
  description: "strict + no implicit any.",
750
817
  icon: "shield-check",
818
+ emits: "scaffold",
751
819
  },
752
820
  {
753
821
  id: "ts-standard",
754
822
  name: "Standard",
755
823
  description: "Default tsconfig strictness.",
756
824
  icon: "shield",
825
+ emits: "scaffold",
757
826
  },
758
827
  ],
759
828
  },
package/dist/engine.d.ts CHANGED
@@ -35,8 +35,9 @@ export declare function toggleMulti(catalog: Catalog, selection: Selection, cate
35
35
  /**
36
36
  * The canonical default selection: every single category at its first option,
37
37
  * toggles per {@link TOGGLE_DEFAULTS_ON}, multis per {@link MULTI_DEFAULTS},
38
- * with `ui` nudged to Cronus UI (the product default) when a React web frontend
39
- * is present. Always valid.
38
+ * then product nudges (Next.js, Cronus UI, SQLite, Drizzle, Better-Auth, basic
39
+ * DB setup). Catalog first-options stay the cascade fallback (e.g. `db-none`).
40
+ * Always valid.
40
41
  */
41
42
  export declare function defaultSelection(catalog?: Catalog): Selection;
42
43
  /**
package/dist/engine.js CHANGED
@@ -458,8 +458,9 @@ export function toggleMulti(catalog, selection, categoryId, optionId) {
458
458
  /**
459
459
  * The canonical default selection: every single category at its first option,
460
460
  * toggles per {@link TOGGLE_DEFAULTS_ON}, multis per {@link MULTI_DEFAULTS},
461
- * with `ui` nudged to Cronus UI (the product default) when a React web frontend
462
- * is present. Always valid.
461
+ * then product nudges (Next.js, Cronus UI, SQLite, Drizzle, Better-Auth, basic
462
+ * DB setup). Catalog first-options stay the cascade fallback (e.g. `db-none`).
463
+ * Always valid.
463
464
  */
464
465
  export function defaultSelection(catalog = defaultCatalog) {
465
466
  const seed = {};
@@ -476,9 +477,13 @@ export function defaultSelection(catalog = defaultCatalog) {
476
477
  seed[cat.id] = TOGGLE_DEFAULTS_ON.has(cat.id);
477
478
  }
478
479
  }
479
- // Product defaults: Next.js + Cronus UI.
480
+ // Product defaults: Next.js + Cronus UI + signed-in SQLite path.
480
481
  seed.web = "web-next";
481
482
  seed.ui = "ui-cronus";
483
+ seed.database = "db-sqlite";
484
+ seed.orm = "orm-drizzle";
485
+ seed.auth = "auth-better-auth";
486
+ seed.dbSetup = "dbsetup-basic";
482
487
  return resolve(catalog, seed).selection;
483
488
  }
484
489
  // --------------------------------------------------------------------------
package/dist/kickoff.js CHANGED
@@ -254,6 +254,8 @@ export function generateKickoff(config, projectName = "my-cronus-app", catalog =
254
254
  const backendId = singleId(config, "backend");
255
255
  const apiId = singleId(config, "api");
256
256
  const databaseId = singleId(config, "database");
257
+ const ormId = singleId(config, "orm");
258
+ const dbSetupId = singleId(config, "dbSetup");
257
259
  const authId = singleId(config, "auth");
258
260
  const paymentsId = singleId(config, "payments");
259
261
  const isNext = webId === "web-next";
@@ -343,10 +345,30 @@ export function generateKickoff(config, projectName = "my-cronus-app", catalog =
343
345
  followUps.push(`Add the typed API contract for **${api}**.`);
344
346
  }
345
347
  if (hasDatabase && database) {
346
- followUps.push(`Wire **${database}**${orm ? ` with **${orm}**` : ""} before syncing schema.`);
348
+ if (ormId === "orm-drizzle") {
349
+ followUps.push("Run db:push — Drizzle schema is already in the repo.");
350
+ if (dbSetup && dbSetupId && dbSetupId !== "dbsetup-basic") {
351
+ followUps.push(`Configure **${dbSetup}**; generated Drizzle files use a local DATABASE_URL.`);
352
+ }
353
+ }
354
+ else {
355
+ followUps.push(`Wire **${database}**${orm ? ` with **${orm}**` : ""} before syncing schema.`);
356
+ }
357
+ }
358
+ if (auth) {
359
+ if (authId === "auth-better-auth" && ormId === "orm-drizzle") {
360
+ followUps.push("Better-Auth is scaffolded — set BETTER_AUTH_SECRET and protect mutating routes.");
361
+ }
362
+ else {
363
+ followUps.push(`Implement **${auth}** and protect mutating routes.`);
364
+ }
365
+ }
366
+ if (isCronusUi &&
367
+ databaseId === "db-sqlite" &&
368
+ ormId === "orm-drizzle" &&
369
+ authId === "auth-better-auth") {
370
+ followUps.push("Compose a product with `npx cronus-ui compose saas` (or admin).");
347
371
  }
348
- if (auth)
349
- followUps.push(`Implement **${auth}** and protect mutating routes.`);
350
372
  if (payments) {
351
373
  followUps.push(`Implement **${payments}** webhooks server-side; never trust client-side amounts.`);
352
374
  }
@@ -367,8 +389,12 @@ export function generateKickoff(config, projectName = "my-cronus-app", catalog =
367
389
  if (hasLint)
368
390
  lines.push(scriptCommand(pmBin, "lint"));
369
391
  lines.push(scriptCommand(pmBin, "build"));
370
- if (hasDatabase)
371
- lines.push(`${scriptCommand(pmBin, "db:push")} # sync schema after DB is wired`);
392
+ if (hasDatabase) {
393
+ const dbPushComment = ormId === "orm-drizzle"
394
+ ? "sync the Drizzle schema already in the repo"
395
+ : "sync schema after DB is wired";
396
+ lines.push(`${scriptCommand(pmBin, "db:push")} # ${dbPushComment}`);
397
+ }
372
398
  lines.push("```");
373
399
  lines.push("");
374
400
  // --- AI capabilities ---
@@ -377,7 +403,7 @@ export function generateKickoff(config, projectName = "my-cronus-app", catalog =
377
403
  lines.push(`- **Assistants:** ${assistants.length ? assistants.join(", ") : "none"}`);
378
404
  lines.push(`- **MCP servers:** ${mcp.length ? mcp.join(", ") : "none"}`);
379
405
  lines.push(`- **Skills:** ${skills.length ? skills.join(", ") : "none"}`);
380
- lines.push("- Generated files cover the supported assistants/templates; any unsupported MCP server or skill pack remains manual follow-up.");
406
+ lines.push("- Generated files cover the supported assistants, MCP servers, and AI Kit skills; unsupported MCP servers remain manual follow-up.");
381
407
  if (vibe) {
382
408
  lines.push("- **Vibe Mode: ON** — looser guardrails for fast prototyping. Prefer momentum over ceremony, but never skip the security/DoD checks below.");
383
409
  }
package/dist/types.d.ts CHANGED
@@ -11,7 +11,7 @@
11
11
  * cross-category constraints can reference them directly.
12
12
  */
13
13
  /** A short status flag rendered as a pill on an option. */
14
- export type Badge = "beta" | "new" | "experimental" | "gated";
14
+ export type Badge = "beta" | "new" | "experimental" | "gated" | "kickoff";
15
15
  /**
16
16
  * How a category is selected:
17
17
  * - "single": exactly one option id (radio).
@@ -31,6 +31,11 @@ export interface Option {
31
31
  icon?: string;
32
32
  /** Optional status pill. */
33
33
  badge?: Badge;
34
+ /**
35
+ * Whether `create-cronus-stack` writes real files/config for this option.
36
+ * Undefined means kickoff-only (KICKOFF.md / stack.json) — the honest default.
37
+ */
38
+ emits?: "scaffold" | "kickoff";
34
39
  /** Option ids that must ALL be selected for this option to be available. */
35
40
  requires?: string[];
36
41
  /** Option ids that, if any is selected, make this option unavailable. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cronus-ui/stack",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "Cronus Stack Builder core — catalog, resolver, CLI flags, KICKOFF.md and stack.json artifacts.",
5
5
  "type": "module",
6
6
  "license": "MIT",