@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 +93 -24
- package/dist/engine.d.ts +3 -2
- package/dist/engine.js +8 -3
- package/dist/kickoff.js +32 -6
- package/dist/types.d.ts +6 -1
- package/package.json +1 -1
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: "
|
|
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-
|
|
480
|
-
name: "
|
|
481
|
-
description: "
|
|
482
|
-
icon: "
|
|
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-
|
|
486
|
-
name: "
|
|
487
|
-
description: "
|
|
488
|
-
icon: "
|
|
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-
|
|
492
|
-
name: "
|
|
493
|
-
description: "
|
|
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-
|
|
498
|
-
name: "
|
|
499
|
-
description: "
|
|
500
|
-
icon: "
|
|
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-
|
|
504
|
-
name: "
|
|
505
|
-
description: "
|
|
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
|
-
{
|
|
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
|
-
{
|
|
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
|
-
*
|
|
39
|
-
*
|
|
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
|
-
*
|
|
462
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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. */
|