@chimerai/cli 0.2.77 β†’ 0.2.80

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.
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAsDD,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,iBA0G9E"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA+CD,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,iBAuH9E"}
@@ -50,53 +50,47 @@ const child_process_1 = require("child_process");
50
50
  const templates = __importStar(require("../templates/index.js"));
51
51
  const index_js_1 = require("../templates/index.js");
52
52
  const utils_js_1 = require("../utils.js");
53
+ const license_js_1 = require("../license.js");
54
+ /** Canonical feature definitions for `chimerai create` */
53
55
  const AVAILABLE_FEATURES = [
54
- {
55
- name: 'πŸ” Authentication (NextAuth)',
56
- value: 'auth',
57
- checked: true,
58
- },
59
- {
60
- name: 'πŸ‘₯ RBAC System (Users, Roles, Permissions)',
61
- value: 'rbac',
62
- checked: true,
63
- },
64
- {
65
- name: 'πŸ”Œ Model Providers Management',
66
- value: 'model-providers',
67
- checked: true,
68
- },
69
- {
70
- name: 'πŸ“ Prompt Template Management',
71
- value: 'prompts',
72
- checked: true,
73
- },
74
- {
75
- name: 'πŸ’¬ AI Chat Interface',
76
- value: 'chat',
77
- checked: false,
78
- },
79
- {
80
- name: 'πŸ” RAG / Vector Store (FAISS)',
81
- value: 'rag',
82
- checked: false,
83
- },
84
- {
85
- name: 'πŸ’³ Billing System (Stripe)',
86
- value: 'billing',
87
- checked: false,
88
- },
89
- {
90
- name: 'πŸ“Š API Usage Analytics',
91
- value: 'analytics',
92
- checked: true,
93
- },
94
- {
95
- name: '🎨 Admin Dashboard',
96
- value: 'admin',
97
- checked: true,
98
- },
56
+ { name: 'πŸ” Authentication (NextAuth)', value: 'auth', licenseKey: 'auth', checked: true },
57
+ { name: 'πŸ‘₯ RBAC System (Users, Roles, Permissions)', value: 'rbac', licenseKey: 'rbac', checked: true },
58
+ { name: 'πŸ”Œ Model Providers Management', value: 'model-providers', licenseKey: 'model-providers', checked: true },
59
+ { name: 'πŸ“ Prompt Template Management', value: 'prompt-management', licenseKey: 'prompt-management', checked: true },
60
+ { name: 'πŸ’¬ AI Chat Interface', value: 'ai-chat', licenseKey: 'ai-chat', checked: false },
61
+ { name: 'πŸ” RAG / Vector Store (FAISS)', value: 'rag', licenseKey: 'rag', checked: false },
62
+ { name: 'πŸ’³ Billing System (Stripe)', value: 'billing', licenseKey: 'billing', checked: false },
63
+ { name: 'πŸ“Š API Usage Analytics', value: 'analytics', licenseKey: 'analytics', checked: true },
64
+ { name: '🎨 Admin Dashboard', value: 'admin-dashboard', licenseKey: 'admin-dashboard', checked: true },
99
65
  ];
66
+ function getRequiredTierLabel(licenseKey) {
67
+ if (license_js_1.FREE_COMPONENTS.has(licenseKey))
68
+ return null;
69
+ if (license_js_1.ENTERPRISE_PRO_COMPONENTS[licenseKey])
70
+ return 'Enterprise Pro';
71
+ if (license_js_1.ENTERPRISE_COMPONENTS[licenseKey])
72
+ return 'Enterprise';
73
+ return null;
74
+ }
75
+ function buildChoices(edition) {
76
+ return AVAILABLE_FEATURES.map((f) => {
77
+ const tier = getRequiredTierLabel(f.licenseKey);
78
+ const locked = tier === 'Enterprise Pro'
79
+ ? !(0, license_js_1.meetsRequirement)(edition, 'enterprise-pro')
80
+ : tier === 'Enterprise'
81
+ ? !(0, license_js_1.meetsRequirement)(edition, 'enterprise')
82
+ : false;
83
+ if (locked) {
84
+ return {
85
+ name: chalk_1.default.gray(`${f.name} πŸ”’ ${tier} β€” chimerai.dev/pricing`),
86
+ value: f.value,
87
+ checked: false,
88
+ disabled: 'Requires license',
89
+ };
90
+ }
91
+ return { name: f.name, value: f.value, checked: f.checked };
92
+ });
93
+ }
100
94
  async function createCommand(projectName, options) {
101
95
  console.log(chalk_1.default.bold.cyan('\nπŸš€ Create New ChimerAI Project\n'));
102
96
  // Validate project name
@@ -108,10 +102,19 @@ async function createCommand(projectName, options) {
108
102
  if (fs_extra_1.default.existsSync(targetDir)) {
109
103
  (0, utils_js_1.handleCliError)(`Directory "${projectName}" already exists`);
110
104
  }
105
+ const edition = (0, license_js_1.getEdition)();
106
+ const choices = buildChoices(edition);
107
+ // Show license status hint
108
+ if (edition === 'free') {
109
+ console.log(chalk_1.default.yellow('β„Ή Free tier active β€” Enterprise features are shown but locked.') +
110
+ chalk_1.default.gray(' Run `chimerai activate <KEY>` to unlock.\n'));
111
+ }
111
112
  let selectedFeatures;
112
113
  if (options.yes) {
113
- // Use defaults
114
- selectedFeatures = AVAILABLE_FEATURES.filter((f) => f.checked).map((f) => f.value);
114
+ // Use defaults β€” only features the current license allows
115
+ selectedFeatures = choices
116
+ .filter((c) => !('disabled' in c) && c.checked)
117
+ .map((c) => c.value);
115
118
  console.log(chalk_1.default.cyan('Using default feature set...'));
116
119
  }
117
120
  else {
@@ -121,7 +124,7 @@ async function createCommand(projectName, options) {
121
124
  type: 'checkbox',
122
125
  name: 'features',
123
126
  message: 'Select features to include:',
124
- choices: AVAILABLE_FEATURES,
127
+ choices,
125
128
  pageSize: 15,
126
129
  },
127
130
  ]);
@@ -210,12 +213,14 @@ async function createProject(targetDir, projectName, features, sqlite) {
210
213
  // 7. Create seed script
211
214
  spinner.text = 'Creating database seed...';
212
215
  await createSeedScript(targetDir, features, sqlite);
213
- // 8. Create Docker Compose
214
- spinner.text = 'Setting up Docker...';
215
- await createDockerCompose(targetDir);
216
+ // 8. Create Docker Compose (only for PostgreSQL)
217
+ if (!sqlite) {
218
+ spinner.text = 'Setting up Docker...';
219
+ await createDockerCompose(targetDir);
220
+ }
216
221
  // 9. Create install scripts
217
222
  spinner.text = 'Creating install scripts...';
218
- await createInstallScripts(targetDir);
223
+ await createInstallScripts(targetDir, sqlite);
219
224
  // 10. Create README
220
225
  spinner.text = 'Creating documentation...';
221
226
  await createReadme(targetDir, projectName, features);
@@ -1414,9 +1419,63 @@ main()
1414
1419
  async function createDockerCompose(targetDir) {
1415
1420
  await fs_extra_1.default.writeFile(path_1.default.join(targetDir, 'docker-compose.yml'), (0, index_js_1.generateDockerComposeDev)());
1416
1421
  }
1417
- async function createInstallScripts(targetDir) {
1422
+ async function createInstallScripts(targetDir, sqlite) {
1418
1423
  // Windows install.bat
1419
- const installBat = `@echo off
1424
+ const installBat = sqlite
1425
+ ? `@echo off
1426
+ REM Installation Script for ChimerAI Project (SQLite)
1427
+ echo.
1428
+ echo ================================================
1429
+ echo ChimerAI Project Setup (SQLite - No Docker needed)
1430
+ echo ================================================
1431
+ echo.
1432
+
1433
+ REM Check Node.js
1434
+ where node >nul 2>nul
1435
+ if %ERRORLEVEL% NEQ 0 (
1436
+ echo [ERROR] Node.js is not installed
1437
+ pause
1438
+ exit /b 1
1439
+ )
1440
+
1441
+ echo [1/3] Installing dependencies...
1442
+ call npm install
1443
+ if %ERRORLEVEL% NEQ 0 (
1444
+ echo [ERROR] Failed to install dependencies
1445
+ pause
1446
+ exit /b 1
1447
+ )
1448
+
1449
+ echo [2/3] Setting up database...
1450
+ call npm run db:push
1451
+ if %ERRORLEVEL% NEQ 0 (
1452
+ echo [ERROR] Failed to setup database
1453
+ pause
1454
+ exit /b 1
1455
+ )
1456
+
1457
+ echo [3/3] Seeding database...
1458
+ call npm run db:seed
1459
+ if %ERRORLEVEL% NEQ 0 (
1460
+ echo [WARNING] Seeding failed, but you can continue
1461
+ )
1462
+
1463
+ echo.
1464
+ echo ================================================
1465
+ echo Setup completed successfully!
1466
+ echo ================================================
1467
+ echo.
1468
+ echo Next steps:
1469
+ echo npm run dev
1470
+ echo Open: http://localhost:3001
1471
+ echo.
1472
+ echo Login with:
1473
+ echo Email: admin@example.com
1474
+ echo Password: admin123
1475
+ echo.
1476
+ pause
1477
+ `
1478
+ : `@echo off
1420
1479
  REM Installation Script for ChimerAI Project
1421
1480
  echo.
1422
1481
  echo ================================================
@@ -1489,7 +1548,46 @@ echo.
1489
1548
  pause
1490
1549
  `;
1491
1550
  // Linux/macOS install.sh
1492
- const installSh = `#!/bin/bash
1551
+ const installSh = sqlite
1552
+ ? `#!/bin/bash
1553
+ set -e
1554
+
1555
+ echo ""
1556
+ echo "================================================"
1557
+ echo " ChimerAI Project Setup (SQLite - No Docker needed)"
1558
+ echo "================================================"
1559
+ echo ""
1560
+
1561
+ # Check Node.js
1562
+ if ! command -v node &> /dev/null; then
1563
+ echo "[ERROR] Node.js is not installed"
1564
+ exit 1
1565
+ fi
1566
+
1567
+ echo "[1/3] Installing dependencies..."
1568
+ npm install
1569
+
1570
+ echo "[2/3] Setting up database..."
1571
+ npm run db:push
1572
+
1573
+ echo "[3/3] Seeding database..."
1574
+ npm run db:seed || echo "[WARNING] Seeding failed, but you can continue"
1575
+
1576
+ echo ""
1577
+ echo "================================================"
1578
+ echo " Setup completed successfully!"
1579
+ echo "================================================"
1580
+ echo ""
1581
+ echo "Next steps:"
1582
+ echo " npm run dev"
1583
+ echo " Open: http://localhost:3001"
1584
+ echo ""
1585
+ echo "Login with:"
1586
+ echo " Email: admin@example.com"
1587
+ echo " Password: admin123"
1588
+ echo ""
1589
+ `
1590
+ : `#!/bin/bash
1493
1591
  set -e
1494
1592
 
1495
1593
  echo ""
package/dist/license.d.ts CHANGED
@@ -20,6 +20,7 @@ export interface LicenseFile {
20
20
  activatedAt: string;
21
21
  lastChecked?: string;
22
22
  }
23
+ export declare function meetsRequirement(actual: Edition, required: Edition): boolean;
23
24
  /** Free-Komponenten β€” immer verfΓΌgbar, kein Gate */
24
25
  export declare const FREE_COMPONENTS: Set<string>;
25
26
  /** Enterprise-Komponenten (Enterprise + Enterprise Pro) */
@@ -1 +1 @@
1
- {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8BD,oDAAoD;AACpD,eAAO,MAAM,eAAe,aAQ1B,CAAC;AAEH,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUxD,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK5D,CAAC;AAIF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAKpE;AAID,wBAAgB,WAAW,IAAI,WAAW,GAAG,IAAI,CAQhD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAGvD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAID,wBAAgB,UAAU,IAAI,OAAO,CAcpC;AAED,oEAAoE;AACpE,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAWrD;AAED,wGAAwG;AACxG,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BjF;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CA6D7D;AAUD,wBAAgB,kBAAkB,IAAI,IAAI,CAuBzC"}
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAwBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAE5E;AAID,oDAAoD;AACpD,eAAO,MAAM,eAAe,aAQ1B,CAAC;AAEH,2DAA2D;AAC3D,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWxD,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK5D,CAAC;AAIF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAKpE;AAID,wBAAgB,WAAW,IAAI,WAAW,GAAG,IAAI,CAQhD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAGvD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAID,wBAAgB,UAAU,IAAI,OAAO,CAcpC;AAED,oEAAoE;AACpE,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAWrD;AAED,wGAAwG;AACxG,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BjF;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CA6D7D;AAUD,wBAAgB,kBAAkB,IAAI,IAAI,CAuBzC"}
package/dist/license.js CHANGED
@@ -16,6 +16,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.ENTERPRISE_PRO_COMPONENTS = exports.ENTERPRISE_COMPONENTS = exports.FREE_COMPONENTS = void 0;
19
+ exports.meetsRequirement = meetsRequirement;
19
20
  exports.getRequiredEdition = getRequiredEdition;
20
21
  exports.readLicense = readLicense;
21
22
  exports.writeLicense = writeLicense;
@@ -66,6 +67,7 @@ exports.FREE_COMPONENTS = new Set([
66
67
  /** Enterprise-Komponenten (Enterprise + Enterprise Pro) */
67
68
  exports.ENTERPRISE_COMPONENTS = {
68
69
  auth: 'NextAuth Authentication + Session Management',
70
+ rbac: 'RBAC System (Users, Roles, Permissions)',
69
71
  billing: 'Stripe Billing & Subscriptions',
70
72
  'admin-dashboard': 'Admin Dashboard Overview',
71
73
  'users-table': 'User Management CRUD',
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@chimerai/cli",
3
- "version": "0.2.77",
3
+ "version": "0.2.80",
4
4
  "description": "CLI wizard for ChimerAI starter kit β€” scaffold auth, RBAC, AI chat, billing and more into any Next.js project",
5
5
  "main": "./dist/index.js",
6
6
  "bin": {
7
- "chimerai": "./dist/cli.js"
7
+ "chimerai": "dist/cli.js"
8
8
  },
9
9
  "files": [
10
10
  "dist",
@@ -16,7 +16,7 @@
16
16
  },
17
17
  "repository": {
18
18
  "type": "git",
19
- "url": "https://github.com/armbur19-collab/chimerai-kickstart.git",
19
+ "url": "git+https://github.com/armbur19-collab/chimerai-kickstart.git",
20
20
  "directory": "packages/cli"
21
21
  },
22
22
  "homepage": "https://chimerai.dev",