@chimerai/cli 1.2.9 → 1.2.10

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.
@@ -197,10 +197,10 @@ async function listCommand(options) {
197
197
  console.log(chalk_1.default.gray(' Edition: Free — paid components are marked\n'));
198
198
  }
199
199
  else if (edition === 'enterprise') {
200
- console.log(chalk_1.default.green(' Edition: Enterprise ✅\n'));
200
+ console.log(chalk_1.default.green(` Edition: Enterprise ${utils_js_1.icons.check}\n`));
201
201
  }
202
202
  else {
203
- console.log(chalk_1.default.magenta(' Edition: Enterprise Pro ✅\n'));
203
+ console.log(chalk_1.default.magenta(` Edition: Enterprise Pro ${utils_js_1.icons.check}\n`));
204
204
  }
205
205
  for (const [category, comps] of categories) {
206
206
  console.log(chalk_1.default.bold.yellow(` ${category}:`));
@@ -212,9 +212,9 @@ async function listCommand(options) {
212
212
  ? edition === 'enterprise' || edition === 'enterprise-pro'
213
213
  : edition === 'enterprise-pro');
214
214
  const badge = required === 'enterprise-pro' && locked
215
- ? chalk_1.default.magenta(' 🔒 Ent.Pro')
215
+ ? chalk_1.default.magenta(` ${utils_js_1.icons.lock} Ent.Pro`)
216
216
  : required === 'enterprise' && locked
217
- ? chalk_1.default.yellow(' 🔒 Enterprise')
217
+ ? chalk_1.default.yellow(` ${utils_js_1.icons.lock} Enterprise`)
218
218
  : '';
219
219
  console.log(` ○ ${chalk_1.default.white(comp.name.padEnd(22))} ${chalk_1.default.gray(comp.description)}${badge}`);
220
220
  }
@@ -261,11 +261,11 @@ async function listCommand(options) {
261
261
  : editionStatus === 'enterprise-pro');
262
262
  const icon = locked
263
263
  ? required === 'enterprise-pro'
264
- ? chalk_1.default.magenta('🔒')
265
- : chalk_1.default.yellow('🔒')
264
+ ? chalk_1.default.magenta(utils_js_1.icons.lock)
265
+ : chalk_1.default.yellow(utils_js_1.icons.lock)
266
266
  : comp.status === 'installed'
267
- ? chalk_1.default.green('✅')
268
- : chalk_1.default.gray(' ');
267
+ ? chalk_1.default.green(utils_js_1.icons.check)
268
+ : chalk_1.default.gray('o ');
269
269
  const label = locked
270
270
  ? required === 'enterprise-pro'
271
271
  ? chalk_1.default.magenta('Ent.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;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,CAyD7D;AAUD,wBAAgB,kBAAkB,IAAI,IAAI,CAuBzC"}
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,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,CAyD7D;AAUD,wBAAgB,kBAAkB,IAAI,IAAI,CAuBzC"}
package/dist/license.js CHANGED
@@ -33,6 +33,7 @@ const path_1 = __importDefault(require("path"));
33
33
  const os_1 = __importDefault(require("os"));
34
34
  const chalk_1 = __importDefault(require("chalk"));
35
35
  const jose_1 = require("jose");
36
+ const utils_js_1 = require("./utils.js");
36
37
  // ─── JWT Public Key (Ed25519) ─────────────────────────────────────────────────
37
38
  // Private key lives only in Cloudflare Worker secret — never in binary.
38
39
  // Public key is safe to embed: it can verify, but NOT sign.
@@ -201,7 +202,7 @@ function assertComponentAccess(component) {
201
202
  // --- Blockiert: kontextuelle Upsell-Meldung ---
202
203
  if (actual === 'enterprise' && required === 'enterprise-pro') {
203
204
  // Enterprise-Kunde will Enterprise-Pro-Feature
204
- console.log(chalk_1.default.red(`\n 🔒 "${component}" is an Enterprise Pro feature.\n`));
205
+ console.log(chalk_1.default.red(`\n ${utils_js_1.icons.lock} "${component}" is an Enterprise Pro feature.\n`));
205
206
  console.log(chalk_1.default.bold(' Exclusive to ChimerAI Enterprise Pro:\n'));
206
207
  for (const [name, desc] of Object.entries(exports.ENTERPRISE_PRO_COMPONENTS)) {
207
208
  console.log(` ${chalk_1.default.yellow('•')} ${chalk_1.default.white(name.padEnd(22))} ${chalk_1.default.gray(desc)}`);
@@ -214,7 +215,7 @@ function assertComponentAccess(component) {
214
215
  else {
215
216
  // Free-Kunde will Enterprise- oder Enterprise-Pro-Feature
216
217
  const isEntPro = required === 'enterprise-pro';
217
- console.log(chalk_1.default.red(`\n 🔒 "${component}" is an ${isEntPro ? 'Enterprise Pro' : 'Enterprise'} feature.\n`));
218
+ console.log(chalk_1.default.red(`\n ${utils_js_1.icons.lock} "${component}" is an ${isEntPro ? 'Enterprise Pro' : 'Enterprise'} feature.\n`));
218
219
  console.log(chalk_1.default.bold(' 🏢 ChimerAI Enterprise:\n'));
219
220
  for (const [name, desc] of Object.entries(exports.ENTERPRISE_COMPONENTS)) {
220
221
  console.log(` ${chalk_1.default.green('•')} ${chalk_1.default.white(name.padEnd(22))} ${chalk_1.default.gray(desc)}`);
@@ -250,7 +251,7 @@ function printLicenseStatus() {
250
251
  ? new Date(license.validUntil).toLocaleDateString('de-AT')
251
252
  : 'unbegrenzt';
252
253
  const color = edition === 'enterprise-pro' ? chalk_1.default.bold.magenta : chalk_1.default.bold.green;
253
- console.log(color('\n 📋 Edition: ') + chalk_1.default.white(`${EDITION_LABELS[edition]} ✅`));
254
+ console.log(color('\n 📋 Edition: ') + chalk_1.default.white(`${EDITION_LABELS[edition]} ${utils_js_1.icons.check}`));
254
255
  if (license.email)
255
256
  console.log(chalk_1.default.gray(` Licensed to: ${license.email}`));
256
257
  console.log(chalk_1.default.gray(` Valid until: ${expiry}`));
package/dist/utils.d.ts CHANGED
@@ -1,6 +1,26 @@
1
1
  /**
2
2
  * Shared CLI utilities - Validation, error handling, workspace checks, env file management
3
3
  */
4
+ /**
5
+ * Returns true when the current terminal can render emoji / full Unicode.
6
+ * Falls back to ASCII icons when running in plain Windows CMD.
7
+ */
8
+ export declare function supportsUnicode(): boolean;
9
+ /**
10
+ * Emoji icons with ASCII fallbacks for CMD-hostile environments.
11
+ * Usage: icons.lock → '🔒' or '[x]'
12
+ */
13
+ export declare const icons: {
14
+ readonly lock: "🔒" | "[locked]";
15
+ readonly check: "✅" | "[ok]";
16
+ readonly cross: "❌" | "[!]";
17
+ readonly warn: "[!]" | "⚠️";
18
+ readonly info: "💡" | "[i]";
19
+ readonly rocket: "🚀" | ">>";
20
+ readonly box: "📦" | "::";
21
+ readonly sparkle: "✨" | "*";
22
+ readonly arrow: "→" | "->";
23
+ };
4
24
  /**
5
25
  * Validates a project or plugin name.
6
26
  * - lowercase alphanumeric + hyphens only
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmCH;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8B7F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG,IAAI,CAKlE;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAY5D;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,KAAK,CAG/D;AAMD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,GAAE,MAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAcf;AAMD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAgDD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CActD;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAiCzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAgCxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYvD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,CASxD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAQzC;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;CAUjB,CAAC;AA8BF;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8B7F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG,IAAI,CAKlE;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAY5D;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,KAAK,CAG/D;AAMD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,GAAE,MAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAcf;AAMD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAgDD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CActD;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAiCzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAgCxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYvD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,CASxD"}
package/dist/utils.js CHANGED
@@ -6,6 +6,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.icons = void 0;
10
+ exports.supportsUnicode = supportsUnicode;
9
11
  exports.validateName = validateName;
10
12
  exports.assertValidName = assertValidName;
11
13
  exports.validateWorkspace = validateWorkspace;
@@ -22,6 +24,44 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
22
24
  const path_1 = __importDefault(require("path"));
23
25
  const os_1 = __importDefault(require("os"));
24
26
  /* ------------------------------------------------------------------ */
27
+ /* Unicode / Emoji support detection */
28
+ /* */
29
+ /* Windows CMD uses legacy code pages (CP850/CP1252) that cannot */
30
+ /* render emoji. VS Code Terminal, Windows Terminal (WT_SESSION) */
31
+ /* and most Unix terminals support Unicode fine. */
32
+ /* ------------------------------------------------------------------ */
33
+ /**
34
+ * Returns true when the current terminal can render emoji / full Unicode.
35
+ * Falls back to ASCII icons when running in plain Windows CMD.
36
+ */
37
+ function supportsUnicode() {
38
+ // Windows Terminal sets WT_SESSION; VS Code sets TERM_PROGRAM=vscode
39
+ if (process.env.WT_SESSION)
40
+ return true;
41
+ if (process.env.TERM_PROGRAM)
42
+ return true;
43
+ // Unix / macOS — always fine
44
+ if (process.platform !== 'win32')
45
+ return true;
46
+ // Plain CMD / legacy PowerShell: no emoji support
47
+ return false;
48
+ }
49
+ /**
50
+ * Emoji icons with ASCII fallbacks for CMD-hostile environments.
51
+ * Usage: icons.lock → '🔒' or '[x]'
52
+ */
53
+ exports.icons = {
54
+ get lock() { return supportsUnicode() ? '🔒' : '[locked]'; },
55
+ get check() { return supportsUnicode() ? '✅' : '[ok]'; },
56
+ get cross() { return supportsUnicode() ? '❌' : '[!]'; },
57
+ get warn() { return supportsUnicode() ? '⚠️' : '[!]'; },
58
+ get info() { return supportsUnicode() ? '💡' : '[i]'; },
59
+ get rocket() { return supportsUnicode() ? '🚀' : '>>'; },
60
+ get box() { return supportsUnicode() ? '📦' : '::'; },
61
+ get sparkle() { return supportsUnicode() ? '✨' : '*'; },
62
+ get arrow() { return supportsUnicode() ? '→' : '->'; },
63
+ };
64
+ /* ------------------------------------------------------------------ */
25
65
  /* Project name validation */
26
66
  /* ------------------------------------------------------------------ */
27
67
  const RESERVED_NAMES = new Set([
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chimerai/cli",
3
- "version": "1.2.9",
3
+ "version": "1.2.10",
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": {