@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.
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +153 -55
- package/dist/license.d.ts +1 -0
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +2 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
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"}
|
package/dist/commands/create.js
CHANGED
|
@@ -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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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 =
|
|
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
|
|
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
|
-
|
|
215
|
-
|
|
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 =
|
|
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 =
|
|
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) */
|
package/dist/license.d.ts.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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": "
|
|
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",
|