aiblueprint-cli 1.1.8 → 1.2.0

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.
Files changed (40) hide show
  1. package/claude-code-config/scripts/command-validator/README.md +147 -0
  2. package/claude-code-config/scripts/command-validator/biome.json +29 -0
  3. package/claude-code-config/scripts/command-validator/bun.lockb +0 -0
  4. package/claude-code-config/scripts/command-validator/dist/cli.js +544 -0
  5. package/claude-code-config/scripts/command-validator/package.json +27 -0
  6. package/claude-code-config/scripts/command-validator/src/__tests__/validator.test.ts +148 -0
  7. package/claude-code-config/scripts/command-validator/src/cli.ts +118 -0
  8. package/claude-code-config/scripts/command-validator/src/lib/security-rules.ts +172 -0
  9. package/claude-code-config/scripts/command-validator/src/lib/types.ts +33 -0
  10. package/claude-code-config/scripts/command-validator/src/lib/validator.ts +360 -0
  11. package/claude-code-config/scripts/command-validator/vitest.config.ts +7 -0
  12. package/claude-code-config/scripts/statusline/package.json +1 -3
  13. package/claude-code-config/scripts/statusline/src/index.ts +5 -107
  14. package/claude-code-config/scripts/statusline/src/lib/context.ts +66 -87
  15. package/claude-code-config/scripts/statusline/src/lib/formatters.ts +16 -186
  16. package/claude-code-config/scripts/statusline/statusline.config.ts +4 -101
  17. package/dist/cli.js +938 -12
  18. package/package.json +1 -1
  19. package/claude-code-config/agents/fix-grammar.md +0 -49
  20. package/claude-code-config/agents/snipper.md +0 -36
  21. package/claude-code-config/commands/claude-memory.md +0 -190
  22. package/claude-code-config/commands/cleanup-context.md +0 -82
  23. package/claude-code-config/commands/debug.md +0 -91
  24. package/claude-code-config/commands/deep-code-analysis.md +0 -87
  25. package/claude-code-config/commands/epct/code.md +0 -171
  26. package/claude-code-config/commands/epct/deploy.md +0 -116
  27. package/claude-code-config/commands/epct/explore.md +0 -97
  28. package/claude-code-config/commands/epct/plan.md +0 -132
  29. package/claude-code-config/commands/epct/tasks.md +0 -206
  30. package/claude-code-config/commands/explain-architecture.md +0 -113
  31. package/claude-code-config/commands/melvynx-plugin.md +0 -1
  32. package/claude-code-config/commands/prompt-agent.md +0 -126
  33. package/claude-code-config/commands/prompt-command.md +0 -225
  34. package/claude-code-config/scripts/statusline/data/.gitignore +0 -5
  35. package/claude-code-config/scripts/statusline/src/commands/CLAUDE.md +0 -3
  36. package/claude-code-config/scripts/statusline/src/commands/spend-month.ts +0 -60
  37. package/claude-code-config/scripts/statusline/src/commands/spend-today.ts +0 -42
  38. package/claude-code-config/scripts/statusline/src/lib/git.ts +0 -100
  39. package/claude-code-config/scripts/statusline/src/lib/spend.ts +0 -119
  40. package/claude-code-config/scripts/statusline/src/lib/usage-limits.ts +0 -147
package/dist/cli.js CHANGED
@@ -24180,14 +24180,14 @@ var require_iso2022 = __commonJS((exports) => {
24180
24180
  let shifts = 0;
24181
24181
  let confidence;
24182
24182
  const text = det.inputBytes;
24183
- const textLen = det.inputLen;
24183
+ const textLen2 = det.inputLen;
24184
24184
  scanInput:
24185
- for (i = 0;i < textLen; i++) {
24185
+ for (i = 0;i < textLen2; i++) {
24186
24186
  if (text[i] == 27) {
24187
24187
  checkEscapes:
24188
24188
  for (escN = 0;escN < this.escapeSequences.length; escN++) {
24189
24189
  const seq = this.escapeSequences[escN];
24190
- if (textLen - i < seq.length)
24190
+ if (textLen2 - i < seq.length)
24191
24191
  continue checkEscapes;
24192
24192
  for (j = 1;j < seq.length; j++)
24193
24193
  if (seq[j] != text[i + j])
@@ -30336,6 +30336,134 @@ var require_lib4 = __commonJS((exports, module) => {
30336
30336
  };
30337
30337
  });
30338
30338
 
30339
+ // node_modules/sisteransi/src/index.js
30340
+ var require_src = __commonJS((exports, module) => {
30341
+ var ESC = "\x1B";
30342
+ var CSI = `${ESC}[`;
30343
+ var beep = "\x07";
30344
+ var cursor = {
30345
+ to(x, y) {
30346
+ if (!y)
30347
+ return `${CSI}${x + 1}G`;
30348
+ return `${CSI}${y + 1};${x + 1}H`;
30349
+ },
30350
+ move(x, y) {
30351
+ let ret = "";
30352
+ if (x < 0)
30353
+ ret += `${CSI}${-x}D`;
30354
+ else if (x > 0)
30355
+ ret += `${CSI}${x}C`;
30356
+ if (y < 0)
30357
+ ret += `${CSI}${-y}A`;
30358
+ else if (y > 0)
30359
+ ret += `${CSI}${y}B`;
30360
+ return ret;
30361
+ },
30362
+ up: (count = 1) => `${CSI}${count}A`,
30363
+ down: (count = 1) => `${CSI}${count}B`,
30364
+ forward: (count = 1) => `${CSI}${count}C`,
30365
+ backward: (count = 1) => `${CSI}${count}D`,
30366
+ nextLine: (count = 1) => `${CSI}E`.repeat(count),
30367
+ prevLine: (count = 1) => `${CSI}F`.repeat(count),
30368
+ left: `${CSI}G`,
30369
+ hide: `${CSI}?25l`,
30370
+ show: `${CSI}?25h`,
30371
+ save: `${ESC}7`,
30372
+ restore: `${ESC}8`
30373
+ };
30374
+ var scroll = {
30375
+ up: (count = 1) => `${CSI}S`.repeat(count),
30376
+ down: (count = 1) => `${CSI}T`.repeat(count)
30377
+ };
30378
+ var erase = {
30379
+ screen: `${CSI}2J`,
30380
+ up: (count = 1) => `${CSI}1J`.repeat(count),
30381
+ down: (count = 1) => `${CSI}J`.repeat(count),
30382
+ line: `${CSI}2K`,
30383
+ lineEnd: `${CSI}K`,
30384
+ lineStart: `${CSI}1K`,
30385
+ lines(count) {
30386
+ let clear = "";
30387
+ for (let i = 0;i < count; i++)
30388
+ clear += this.line + (i < count - 1 ? cursor.up() : "");
30389
+ if (count)
30390
+ clear += cursor.left;
30391
+ return clear;
30392
+ }
30393
+ };
30394
+ module.exports = { cursor, scroll, erase, beep };
30395
+ });
30396
+
30397
+ // node_modules/picocolors/picocolors.js
30398
+ var require_picocolors = __commonJS((exports, module) => {
30399
+ var p = process || {};
30400
+ var argv = p.argv || [];
30401
+ var env2 = p.env || {};
30402
+ var isColorSupported = !(!!env2.NO_COLOR || argv.includes("--no-color")) && (!!env2.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env2.TERM !== "dumb" || !!env2.CI);
30403
+ var formatter = (open, close, replace = open) => (input) => {
30404
+ let string = "" + input, index = string.indexOf(close, open.length);
30405
+ return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
30406
+ };
30407
+ var replaceClose = (string, close, replace, index) => {
30408
+ let result = "", cursor = 0;
30409
+ do {
30410
+ result += string.substring(cursor, index) + replace;
30411
+ cursor = index + close.length;
30412
+ index = string.indexOf(close, cursor);
30413
+ } while (~index);
30414
+ return result + string.substring(cursor);
30415
+ };
30416
+ var createColors = (enabled = isColorSupported) => {
30417
+ let f = enabled ? formatter : () => String;
30418
+ return {
30419
+ isColorSupported: enabled,
30420
+ reset: f("\x1B[0m", "\x1B[0m"),
30421
+ bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
30422
+ dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
30423
+ italic: f("\x1B[3m", "\x1B[23m"),
30424
+ underline: f("\x1B[4m", "\x1B[24m"),
30425
+ inverse: f("\x1B[7m", "\x1B[27m"),
30426
+ hidden: f("\x1B[8m", "\x1B[28m"),
30427
+ strikethrough: f("\x1B[9m", "\x1B[29m"),
30428
+ black: f("\x1B[30m", "\x1B[39m"),
30429
+ red: f("\x1B[31m", "\x1B[39m"),
30430
+ green: f("\x1B[32m", "\x1B[39m"),
30431
+ yellow: f("\x1B[33m", "\x1B[39m"),
30432
+ blue: f("\x1B[34m", "\x1B[39m"),
30433
+ magenta: f("\x1B[35m", "\x1B[39m"),
30434
+ cyan: f("\x1B[36m", "\x1B[39m"),
30435
+ white: f("\x1B[37m", "\x1B[39m"),
30436
+ gray: f("\x1B[90m", "\x1B[39m"),
30437
+ bgBlack: f("\x1B[40m", "\x1B[49m"),
30438
+ bgRed: f("\x1B[41m", "\x1B[49m"),
30439
+ bgGreen: f("\x1B[42m", "\x1B[49m"),
30440
+ bgYellow: f("\x1B[43m", "\x1B[49m"),
30441
+ bgBlue: f("\x1B[44m", "\x1B[49m"),
30442
+ bgMagenta: f("\x1B[45m", "\x1B[49m"),
30443
+ bgCyan: f("\x1B[46m", "\x1B[49m"),
30444
+ bgWhite: f("\x1B[47m", "\x1B[49m"),
30445
+ blackBright: f("\x1B[90m", "\x1B[39m"),
30446
+ redBright: f("\x1B[91m", "\x1B[39m"),
30447
+ greenBright: f("\x1B[92m", "\x1B[39m"),
30448
+ yellowBright: f("\x1B[93m", "\x1B[39m"),
30449
+ blueBright: f("\x1B[94m", "\x1B[39m"),
30450
+ magentaBright: f("\x1B[95m", "\x1B[39m"),
30451
+ cyanBright: f("\x1B[96m", "\x1B[39m"),
30452
+ whiteBright: f("\x1B[97m", "\x1B[39m"),
30453
+ bgBlackBright: f("\x1B[100m", "\x1B[49m"),
30454
+ bgRedBright: f("\x1B[101m", "\x1B[49m"),
30455
+ bgGreenBright: f("\x1B[102m", "\x1B[49m"),
30456
+ bgYellowBright: f("\x1B[103m", "\x1B[49m"),
30457
+ bgBlueBright: f("\x1B[104m", "\x1B[49m"),
30458
+ bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
30459
+ bgCyanBright: f("\x1B[106m", "\x1B[49m"),
30460
+ bgWhiteBright: f("\x1B[107m", "\x1B[49m")
30461
+ };
30462
+ };
30463
+ module.exports = createColors();
30464
+ module.exports.createColors = createColors;
30465
+ });
30466
+
30339
30467
  // node_modules/commander/esm.mjs
30340
30468
  var import__ = __toESM(require_commander(), 1);
30341
30469
  var {
@@ -33095,7 +33223,7 @@ async function updateSettings(options, claudeDir) {
33095
33223
  hooks: [
33096
33224
  {
33097
33225
  type: "command",
33098
- command: `bun ${path5.join(claudeDir, "scripts/validate-command.js")}`
33226
+ command: `bun ${path5.join(claudeDir, "scripts/command-validator/src/cli.ts")}`
33099
33227
  }
33100
33228
  ]
33101
33229
  };
@@ -33362,15 +33490,11 @@ async function setupCommand(params = {}) {
33362
33490
  if (useGitHub) {
33363
33491
  const scriptsDir = path7.join(claudeDir, "scripts");
33364
33492
  await import_fs_extra5.default.ensureDir(scriptsDir);
33365
- const scriptFiles = [
33366
- "validate-command.js",
33367
- "validate-command.readme.md"
33368
- ];
33369
- if (options.postEditTypeScript) {
33370
- scriptFiles.push("hook-post-file.ts");
33493
+ if (options.commandValidation) {
33494
+ await downloadDirectoryFromGitHub("scripts/command-validator", path7.join(scriptsDir, "command-validator"));
33371
33495
  }
33372
- for (const file of scriptFiles) {
33373
- await downloadFromGitHub(`scripts/${file}`, path7.join(scriptsDir, file));
33496
+ if (options.postEditTypeScript) {
33497
+ await downloadFromGitHub("scripts/hook-post-file.ts", path7.join(scriptsDir, "hook-post-file.ts"));
33374
33498
  }
33375
33499
  if (options.customStatusline) {
33376
33500
  await downloadDirectoryFromGitHub("scripts/statusline", path7.join(scriptsDir, "statusline"));
@@ -33440,6 +33564,8 @@ Next steps:`));
33440
33564
  console.log(source_default.gray(' • Use "ccc" for Claude Code with permissions skipped and continue mode'));
33441
33565
  }
33442
33566
  console.log(source_default.gray(' • Run "claude" to start using Claude Code with your new configuration'));
33567
+ console.log(source_default.blue(`
33568
+ \uD83D\uDC8E Want premium features? Get AIBlueprint CLI Pro at https://mlv.sh/claude-cli`));
33443
33569
  } catch (error) {
33444
33570
  console.error(source_default.red(`
33445
33571
  ❌ Setup failed:`), error);
@@ -34071,6 +34197,789 @@ Your Claude Code statusline is now configured.`));
34071
34197
  `));
34072
34198
  }
34073
34199
 
34200
+ // node_modules/@clack/core/dist/index.mjs
34201
+ var import_sisteransi = __toESM(require_src(), 1);
34202
+ var import_picocolors = __toESM(require_picocolors(), 1);
34203
+ import { stdin as $, stdout as k } from "node:process";
34204
+ import * as f from "node:readline";
34205
+ import _2 from "node:readline";
34206
+ import { WriteStream as U } from "node:tty";
34207
+ function q({ onlyFirst: e = false } = {}) {
34208
+ const F = ["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))", "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");
34209
+ return new RegExp(F, e ? undefined : "g");
34210
+ }
34211
+ var J = q();
34212
+ function S(e) {
34213
+ if (typeof e != "string")
34214
+ throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);
34215
+ return e.replace(J, "");
34216
+ }
34217
+ function T(e) {
34218
+ return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
34219
+ }
34220
+ var j = { exports: {} };
34221
+ (function(e) {
34222
+ var u = {};
34223
+ e.exports = u, u.eastAsianWidth = function(t) {
34224
+ var s = t.charCodeAt(0), C = t.length == 2 ? t.charCodeAt(1) : 0, D = s;
34225
+ return 55296 <= s && s <= 56319 && 56320 <= C && C <= 57343 && (s &= 1023, C &= 1023, D = s << 10 | C, D += 65536), D == 12288 || 65281 <= D && D <= 65376 || 65504 <= D && D <= 65510 ? "F" : D == 8361 || 65377 <= D && D <= 65470 || 65474 <= D && D <= 65479 || 65482 <= D && D <= 65487 || 65490 <= D && D <= 65495 || 65498 <= D && D <= 65500 || 65512 <= D && D <= 65518 ? "H" : 4352 <= D && D <= 4447 || 4515 <= D && D <= 4519 || 4602 <= D && D <= 4607 || 9001 <= D && D <= 9002 || 11904 <= D && D <= 11929 || 11931 <= D && D <= 12019 || 12032 <= D && D <= 12245 || 12272 <= D && D <= 12283 || 12289 <= D && D <= 12350 || 12353 <= D && D <= 12438 || 12441 <= D && D <= 12543 || 12549 <= D && D <= 12589 || 12593 <= D && D <= 12686 || 12688 <= D && D <= 12730 || 12736 <= D && D <= 12771 || 12784 <= D && D <= 12830 || 12832 <= D && D <= 12871 || 12880 <= D && D <= 13054 || 13056 <= D && D <= 19903 || 19968 <= D && D <= 42124 || 42128 <= D && D <= 42182 || 43360 <= D && D <= 43388 || 44032 <= D && D <= 55203 || 55216 <= D && D <= 55238 || 55243 <= D && D <= 55291 || 63744 <= D && D <= 64255 || 65040 <= D && D <= 65049 || 65072 <= D && D <= 65106 || 65108 <= D && D <= 65126 || 65128 <= D && D <= 65131 || 110592 <= D && D <= 110593 || 127488 <= D && D <= 127490 || 127504 <= D && D <= 127546 || 127552 <= D && D <= 127560 || 127568 <= D && D <= 127569 || 131072 <= D && D <= 194367 || 177984 <= D && D <= 196605 || 196608 <= D && D <= 262141 ? "W" : 32 <= D && D <= 126 || 162 <= D && D <= 163 || 165 <= D && D <= 166 || D == 172 || D == 175 || 10214 <= D && D <= 10221 || 10629 <= D && D <= 10630 ? "Na" : D == 161 || D == 164 || 167 <= D && D <= 168 || D == 170 || 173 <= D && D <= 174 || 176 <= D && D <= 180 || 182 <= D && D <= 186 || 188 <= D && D <= 191 || D == 198 || D == 208 || 215 <= D && D <= 216 || 222 <= D && D <= 225 || D == 230 || 232 <= D && D <= 234 || 236 <= D && D <= 237 || D == 240 || 242 <= D && D <= 243 || 247 <= D && D <= 250 || D == 252 || D == 254 || D == 257 || D == 273 || D == 275 || D == 283 || 294 <= D && D <= 295 || D == 299 || 305 <= D && D <= 307 || D == 312 || 319 <= D && D <= 322 || D == 324 || 328 <= D && D <= 331 || D == 333 || 338 <= D && D <= 339 || 358 <= D && D <= 359 || D == 363 || D == 462 || D == 464 || D == 466 || D == 468 || D == 470 || D == 472 || D == 474 || D == 476 || D == 593 || D == 609 || D == 708 || D == 711 || 713 <= D && D <= 715 || D == 717 || D == 720 || 728 <= D && D <= 731 || D == 733 || D == 735 || 768 <= D && D <= 879 || 913 <= D && D <= 929 || 931 <= D && D <= 937 || 945 <= D && D <= 961 || 963 <= D && D <= 969 || D == 1025 || 1040 <= D && D <= 1103 || D == 1105 || D == 8208 || 8211 <= D && D <= 8214 || 8216 <= D && D <= 8217 || 8220 <= D && D <= 8221 || 8224 <= D && D <= 8226 || 8228 <= D && D <= 8231 || D == 8240 || 8242 <= D && D <= 8243 || D == 8245 || D == 8251 || D == 8254 || D == 8308 || D == 8319 || 8321 <= D && D <= 8324 || D == 8364 || D == 8451 || D == 8453 || D == 8457 || D == 8467 || D == 8470 || 8481 <= D && D <= 8482 || D == 8486 || D == 8491 || 8531 <= D && D <= 8532 || 8539 <= D && D <= 8542 || 8544 <= D && D <= 8555 || 8560 <= D && D <= 8569 || D == 8585 || 8592 <= D && D <= 8601 || 8632 <= D && D <= 8633 || D == 8658 || D == 8660 || D == 8679 || D == 8704 || 8706 <= D && D <= 8707 || 8711 <= D && D <= 8712 || D == 8715 || D == 8719 || D == 8721 || D == 8725 || D == 8730 || 8733 <= D && D <= 8736 || D == 8739 || D == 8741 || 8743 <= D && D <= 8748 || D == 8750 || 8756 <= D && D <= 8759 || 8764 <= D && D <= 8765 || D == 8776 || D == 8780 || D == 8786 || 8800 <= D && D <= 8801 || 8804 <= D && D <= 8807 || 8810 <= D && D <= 8811 || 8814 <= D && D <= 8815 || 8834 <= D && D <= 8835 || 8838 <= D && D <= 8839 || D == 8853 || D == 8857 || D == 8869 || D == 8895 || D == 8978 || 9312 <= D && D <= 9449 || 9451 <= D && D <= 9547 || 9552 <= D && D <= 9587 || 9600 <= D && D <= 9615 || 9618 <= D && D <= 9621 || 9632 <= D && D <= 9633 || 9635 <= D && D <= 9641 || 9650 <= D && D <= 9651 || 9654 <= D && D <= 9655 || 9660 <= D && D <= 9661 || 9664 <= D && D <= 9665 || 9670 <= D && D <= 9672 || D == 9675 || 9678 <= D && D <= 9681 || 9698 <= D && D <= 9701 || D == 9711 || 9733 <= D && D <= 9734 || D == 9737 || 9742 <= D && D <= 9743 || 9748 <= D && D <= 9749 || D == 9756 || D == 9758 || D == 9792 || D == 9794 || 9824 <= D && D <= 9825 || 9827 <= D && D <= 9829 || 9831 <= D && D <= 9834 || 9836 <= D && D <= 9837 || D == 9839 || 9886 <= D && D <= 9887 || 9918 <= D && D <= 9919 || 9924 <= D && D <= 9933 || 9935 <= D && D <= 9953 || D == 9955 || 9960 <= D && D <= 9983 || D == 10045 || D == 10071 || 10102 <= D && D <= 10111 || 11093 <= D && D <= 11097 || 12872 <= D && D <= 12879 || 57344 <= D && D <= 63743 || 65024 <= D && D <= 65039 || D == 65533 || 127232 <= D && D <= 127242 || 127248 <= D && D <= 127277 || 127280 <= D && D <= 127337 || 127344 <= D && D <= 127386 || 917760 <= D && D <= 917999 || 983040 <= D && D <= 1048573 || 1048576 <= D && D <= 1114109 ? "A" : "N";
34226
+ }, u.characterLength = function(t) {
34227
+ var s = this.eastAsianWidth(t);
34228
+ return s == "F" || s == "W" || s == "A" ? 2 : 1;
34229
+ };
34230
+ function F(t) {
34231
+ return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || [];
34232
+ }
34233
+ u.length = function(t) {
34234
+ for (var s = F(t), C = 0, D = 0;D < s.length; D++)
34235
+ C = C + this.characterLength(s[D]);
34236
+ return C;
34237
+ }, u.slice = function(t, s, C) {
34238
+ textLen = u.length(t), s = s || 0, C = C || 1, s < 0 && (s = textLen + s), C < 0 && (C = textLen + C);
34239
+ for (var D = "", i = 0, n = F(t), E = 0;E < n.length; E++) {
34240
+ var h = n[E], o = u.length(h);
34241
+ if (i >= s - (o == 2 ? 1 : 0))
34242
+ if (i + o <= C)
34243
+ D += h;
34244
+ else
34245
+ break;
34246
+ i += o;
34247
+ }
34248
+ return D;
34249
+ };
34250
+ })(j);
34251
+ var Q = j.exports;
34252
+ var X = T(Q);
34253
+ var DD = function() {
34254
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
34255
+ };
34256
+ var uD = T(DD);
34257
+ function A(e, u = {}) {
34258
+ if (typeof e != "string" || e.length === 0 || (u = { ambiguousIsNarrow: true, ...u }, e = S(e), e.length === 0))
34259
+ return 0;
34260
+ e = e.replace(uD(), " ");
34261
+ const F = u.ambiguousIsNarrow ? 1 : 2;
34262
+ let t = 0;
34263
+ for (const s of e) {
34264
+ const C = s.codePointAt(0);
34265
+ if (C <= 31 || C >= 127 && C <= 159 || C >= 768 && C <= 879)
34266
+ continue;
34267
+ switch (X.eastAsianWidth(s)) {
34268
+ case "F":
34269
+ case "W":
34270
+ t += 2;
34271
+ break;
34272
+ case "A":
34273
+ t += F;
34274
+ break;
34275
+ default:
34276
+ t += 1;
34277
+ }
34278
+ }
34279
+ return t;
34280
+ }
34281
+ var d = 10;
34282
+ var M = (e = 0) => (u) => `\x1B[${u + e}m`;
34283
+ var P = (e = 0) => (u) => `\x1B[${38 + e};5;${u}m`;
34284
+ var W = (e = 0) => (u, F, t) => `\x1B[${38 + e};2;${u};${F};${t}m`;
34285
+ var r = { modifier: { reset: [0, 0], bold: [1, 22], dim: [2, 22], italic: [3, 23], underline: [4, 24], overline: [53, 55], inverse: [7, 27], hidden: [8, 28], strikethrough: [9, 29] }, color: { black: [30, 39], red: [31, 39], green: [32, 39], yellow: [33, 39], blue: [34, 39], magenta: [35, 39], cyan: [36, 39], white: [37, 39], blackBright: [90, 39], gray: [90, 39], grey: [90, 39], redBright: [91, 39], greenBright: [92, 39], yellowBright: [93, 39], blueBright: [94, 39], magentaBright: [95, 39], cyanBright: [96, 39], whiteBright: [97, 39] }, bgColor: { bgBlack: [40, 49], bgRed: [41, 49], bgGreen: [42, 49], bgYellow: [43, 49], bgBlue: [44, 49], bgMagenta: [45, 49], bgCyan: [46, 49], bgWhite: [47, 49], bgBlackBright: [100, 49], bgGray: [100, 49], bgGrey: [100, 49], bgRedBright: [101, 49], bgGreenBright: [102, 49], bgYellowBright: [103, 49], bgBlueBright: [104, 49], bgMagentaBright: [105, 49], bgCyanBright: [106, 49], bgWhiteBright: [107, 49] } };
34286
+ Object.keys(r.modifier);
34287
+ var FD = Object.keys(r.color);
34288
+ var eD = Object.keys(r.bgColor);
34289
+ [...FD];
34290
+ function tD() {
34291
+ const e = new Map;
34292
+ for (const [u, F] of Object.entries(r)) {
34293
+ for (const [t, s] of Object.entries(F))
34294
+ r[t] = { open: `\x1B[${s[0]}m`, close: `\x1B[${s[1]}m` }, F[t] = r[t], e.set(s[0], s[1]);
34295
+ Object.defineProperty(r, u, { value: F, enumerable: false });
34296
+ }
34297
+ return Object.defineProperty(r, "codes", { value: e, enumerable: false }), r.color.close = "\x1B[39m", r.bgColor.close = "\x1B[49m", r.color.ansi = M(), r.color.ansi256 = P(), r.color.ansi16m = W(), r.bgColor.ansi = M(d), r.bgColor.ansi256 = P(d), r.bgColor.ansi16m = W(d), Object.defineProperties(r, { rgbToAnsi256: { value: (u, F, t) => u === F && F === t ? u < 8 ? 16 : u > 248 ? 231 : Math.round((u - 8) / 247 * 24) + 232 : 16 + 36 * Math.round(u / 255 * 5) + 6 * Math.round(F / 255 * 5) + Math.round(t / 255 * 5), enumerable: false }, hexToRgb: { value: (u) => {
34298
+ const F = /[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));
34299
+ if (!F)
34300
+ return [0, 0, 0];
34301
+ let [t] = F;
34302
+ t.length === 3 && (t = [...t].map((C) => C + C).join(""));
34303
+ const s = Number.parseInt(t, 16);
34304
+ return [s >> 16 & 255, s >> 8 & 255, s & 255];
34305
+ }, enumerable: false }, hexToAnsi256: { value: (u) => r.rgbToAnsi256(...r.hexToRgb(u)), enumerable: false }, ansi256ToAnsi: { value: (u) => {
34306
+ if (u < 8)
34307
+ return 30 + u;
34308
+ if (u < 16)
34309
+ return 90 + (u - 8);
34310
+ let F, t, s;
34311
+ if (u >= 232)
34312
+ F = ((u - 232) * 10 + 8) / 255, t = F, s = F;
34313
+ else {
34314
+ u -= 16;
34315
+ const i = u % 36;
34316
+ F = Math.floor(u / 36) / 5, t = Math.floor(i / 6) / 5, s = i % 6 / 5;
34317
+ }
34318
+ const C = Math.max(F, t, s) * 2;
34319
+ if (C === 0)
34320
+ return 30;
34321
+ let D = 30 + (Math.round(s) << 2 | Math.round(t) << 1 | Math.round(F));
34322
+ return C === 2 && (D += 60), D;
34323
+ }, enumerable: false }, rgbToAnsi: { value: (u, F, t) => r.ansi256ToAnsi(r.rgbToAnsi256(u, F, t)), enumerable: false }, hexToAnsi: { value: (u) => r.ansi256ToAnsi(r.hexToAnsi256(u)), enumerable: false } }), r;
34324
+ }
34325
+ var sD = tD();
34326
+ var g = new Set(["\x1B", "›"]);
34327
+ var CD = 39;
34328
+ var b = "\x07";
34329
+ var O = "[";
34330
+ var iD = "]";
34331
+ var I = "m";
34332
+ var w = `${iD}8;;`;
34333
+ var N = (e) => `${g.values().next().value}${O}${e}${I}`;
34334
+ var L = (e) => `${g.values().next().value}${w}${e}${b}`;
34335
+ var rD = (e) => e.split(" ").map((u) => A(u));
34336
+ var y = (e, u, F) => {
34337
+ const t = [...u];
34338
+ let s = false, C = false, D = A(S(e[e.length - 1]));
34339
+ for (const [i, n] of t.entries()) {
34340
+ const E = A(n);
34341
+ if (D + E <= F ? e[e.length - 1] += n : (e.push(n), D = 0), g.has(n) && (s = true, C = t.slice(i + 1).join("").startsWith(w)), s) {
34342
+ C ? n === b && (s = false, C = false) : n === I && (s = false);
34343
+ continue;
34344
+ }
34345
+ D += E, D === F && i < t.length - 1 && (e.push(""), D = 0);
34346
+ }
34347
+ !D && e[e.length - 1].length > 0 && e.length > 1 && (e[e.length - 2] += e.pop());
34348
+ };
34349
+ var ED = (e) => {
34350
+ const u = e.split(" ");
34351
+ let F = u.length;
34352
+ for (;F > 0 && !(A(u[F - 1]) > 0); )
34353
+ F--;
34354
+ return F === u.length ? e : u.slice(0, F).join(" ") + u.slice(F).join("");
34355
+ };
34356
+ var oD = (e, u, F = {}) => {
34357
+ if (F.trim !== false && e.trim() === "")
34358
+ return "";
34359
+ let t = "", s, C;
34360
+ const D = rD(e);
34361
+ let i = [""];
34362
+ for (const [E, h] of e.split(" ").entries()) {
34363
+ F.trim !== false && (i[i.length - 1] = i[i.length - 1].trimStart());
34364
+ let o = A(i[i.length - 1]);
34365
+ if (E !== 0 && (o >= u && (F.wordWrap === false || F.trim === false) && (i.push(""), o = 0), (o > 0 || F.trim === false) && (i[i.length - 1] += " ", o++)), F.hard && D[E] > u) {
34366
+ const B = u - o, p = 1 + Math.floor((D[E] - B - 1) / u);
34367
+ Math.floor((D[E] - 1) / u) < p && i.push(""), y(i, h, u);
34368
+ continue;
34369
+ }
34370
+ if (o + D[E] > u && o > 0 && D[E] > 0) {
34371
+ if (F.wordWrap === false && o < u) {
34372
+ y(i, h, u);
34373
+ continue;
34374
+ }
34375
+ i.push("");
34376
+ }
34377
+ if (o + D[E] > u && F.wordWrap === false) {
34378
+ y(i, h, u);
34379
+ continue;
34380
+ }
34381
+ i[i.length - 1] += h;
34382
+ }
34383
+ F.trim !== false && (i = i.map((E) => ED(E)));
34384
+ const n = [...i.join(`
34385
+ `)];
34386
+ for (const [E, h] of n.entries()) {
34387
+ if (t += h, g.has(h)) {
34388
+ const { groups: B } = new RegExp(`(?:\\${O}(?<code>\\d+)m|\\${w}(?<uri>.*)${b})`).exec(n.slice(E).join("")) || { groups: {} };
34389
+ if (B.code !== undefined) {
34390
+ const p = Number.parseFloat(B.code);
34391
+ s = p === CD ? undefined : p;
34392
+ } else
34393
+ B.uri !== undefined && (C = B.uri.length === 0 ? undefined : B.uri);
34394
+ }
34395
+ const o = sD.codes.get(Number(s));
34396
+ n[E + 1] === `
34397
+ ` ? (C && (t += L("")), s && o && (t += N(o))) : h === `
34398
+ ` && (s && o && (t += N(s)), C && (t += L(C)));
34399
+ }
34400
+ return t;
34401
+ };
34402
+ function R(e, u, F) {
34403
+ return String(e).normalize().replace(/\r\n/g, `
34404
+ `).split(`
34405
+ `).map((t) => oD(t, u, F)).join(`
34406
+ `);
34407
+ }
34408
+ var nD = Object.defineProperty;
34409
+ var aD = (e, u, F) => (u in e) ? nD(e, u, { enumerable: true, configurable: true, writable: true, value: F }) : e[u] = F;
34410
+ var a = (e, u, F) => (aD(e, typeof u != "symbol" ? u + "" : u, F), F);
34411
+ function hD(e, u) {
34412
+ if (e === u)
34413
+ return;
34414
+ const F = e.split(`
34415
+ `), t = u.split(`
34416
+ `), s = [];
34417
+ for (let C = 0;C < Math.max(F.length, t.length); C++)
34418
+ F[C] !== t[C] && s.push(C);
34419
+ return s;
34420
+ }
34421
+ var V = Symbol("clack:cancel");
34422
+ function lD(e) {
34423
+ return e === V;
34424
+ }
34425
+ function v(e, u) {
34426
+ e.isTTY && e.setRawMode(u);
34427
+ }
34428
+ var z = new Map([["k", "up"], ["j", "down"], ["h", "left"], ["l", "right"]]);
34429
+ var xD = new Set(["up", "down", "left", "right", "space", "enter"]);
34430
+
34431
+ class x {
34432
+ constructor({ render: u, input: F = $, output: t = k, ...s }, C = true) {
34433
+ a(this, "input"), a(this, "output"), a(this, "rl"), a(this, "opts"), a(this, "_track", false), a(this, "_render"), a(this, "_cursor", 0), a(this, "state", "initial"), a(this, "value"), a(this, "error", ""), a(this, "subscribers", new Map), a(this, "_prevFrame", ""), this.opts = s, this.onKeypress = this.onKeypress.bind(this), this.close = this.close.bind(this), this.render = this.render.bind(this), this._render = u.bind(this), this._track = C, this.input = F, this.output = t;
34434
+ }
34435
+ prompt() {
34436
+ const u = new U(0);
34437
+ return u._write = (F, t, s) => {
34438
+ this._track && (this.value = this.rl.line.replace(/\t/g, ""), this._cursor = this.rl.cursor, this.emit("value", this.value)), s();
34439
+ }, this.input.pipe(u), this.rl = _2.createInterface({ input: this.input, output: u, tabSize: 2, prompt: "", escapeCodeTimeout: 50 }), _2.emitKeypressEvents(this.input, this.rl), this.rl.prompt(), this.opts.initialValue !== undefined && this._track && this.rl.write(this.opts.initialValue), this.input.on("keypress", this.onKeypress), v(this.input, true), this.output.on("resize", this.render), this.render(), new Promise((F, t) => {
34440
+ this.once("submit", () => {
34441
+ this.output.write(import_sisteransi.cursor.show), this.output.off("resize", this.render), v(this.input, false), F(this.value);
34442
+ }), this.once("cancel", () => {
34443
+ this.output.write(import_sisteransi.cursor.show), this.output.off("resize", this.render), v(this.input, false), F(V);
34444
+ });
34445
+ });
34446
+ }
34447
+ on(u, F) {
34448
+ const t = this.subscribers.get(u) ?? [];
34449
+ t.push({ cb: F }), this.subscribers.set(u, t);
34450
+ }
34451
+ once(u, F) {
34452
+ const t = this.subscribers.get(u) ?? [];
34453
+ t.push({ cb: F, once: true }), this.subscribers.set(u, t);
34454
+ }
34455
+ emit(u, ...F) {
34456
+ const t = this.subscribers.get(u) ?? [], s = [];
34457
+ for (const C of t)
34458
+ C.cb(...F), C.once && s.push(() => t.splice(t.indexOf(C), 1));
34459
+ for (const C of s)
34460
+ C();
34461
+ }
34462
+ unsubscribe() {
34463
+ this.subscribers.clear();
34464
+ }
34465
+ onKeypress(u, F) {
34466
+ if (this.state === "error" && (this.state = "active"), F?.name && !this._track && z.has(F.name) && this.emit("cursor", z.get(F.name)), F?.name && xD.has(F.name) && this.emit("cursor", F.name), u && (u.toLowerCase() === "y" || u.toLowerCase() === "n") && this.emit("confirm", u.toLowerCase() === "y"), u === "\t" && this.opts.placeholder && (this.value || (this.rl.write(this.opts.placeholder), this.emit("value", this.opts.placeholder))), u && this.emit("key", u.toLowerCase()), F?.name === "return") {
34467
+ if (this.opts.validate) {
34468
+ const t = this.opts.validate(this.value);
34469
+ t && (this.error = t, this.state = "error", this.rl.write(this.value));
34470
+ }
34471
+ this.state !== "error" && (this.state = "submit");
34472
+ }
34473
+ u === "\x03" && (this.state = "cancel"), (this.state === "submit" || this.state === "cancel") && this.emit("finalize"), this.render(), (this.state === "submit" || this.state === "cancel") && this.close();
34474
+ }
34475
+ close() {
34476
+ this.input.unpipe(), this.input.removeListener("keypress", this.onKeypress), this.output.write(`
34477
+ `), v(this.input, false), this.rl.close(), this.emit(`${this.state}`, this.value), this.unsubscribe();
34478
+ }
34479
+ restoreCursor() {
34480
+ const u = R(this._prevFrame, process.stdout.columns, { hard: true }).split(`
34481
+ `).length - 1;
34482
+ this.output.write(import_sisteransi.cursor.move(-999, u * -1));
34483
+ }
34484
+ render() {
34485
+ const u = R(this._render(this) ?? "", process.stdout.columns, { hard: true });
34486
+ if (u !== this._prevFrame) {
34487
+ if (this.state === "initial")
34488
+ this.output.write(import_sisteransi.cursor.hide);
34489
+ else {
34490
+ const F = hD(this._prevFrame, u);
34491
+ if (this.restoreCursor(), F && F?.length === 1) {
34492
+ const t = F[0];
34493
+ this.output.write(import_sisteransi.cursor.move(0, t)), this.output.write(import_sisteransi.erase.lines(1));
34494
+ const s = u.split(`
34495
+ `);
34496
+ this.output.write(s[t]), this._prevFrame = u, this.output.write(import_sisteransi.cursor.move(0, s.length - t - 1));
34497
+ return;
34498
+ } else if (F && F?.length > 1) {
34499
+ const t = F[0];
34500
+ this.output.write(import_sisteransi.cursor.move(0, t)), this.output.write(import_sisteransi.erase.down());
34501
+ const s = u.split(`
34502
+ `).slice(t);
34503
+ this.output.write(s.join(`
34504
+ `)), this._prevFrame = u;
34505
+ return;
34506
+ }
34507
+ this.output.write(import_sisteransi.erase.down());
34508
+ }
34509
+ this.output.write(u), this.state === "initial" && (this.state = "active"), this._prevFrame = u;
34510
+ }
34511
+ }
34512
+ }
34513
+ var TD = Object.defineProperty;
34514
+ var jD = (e, u, F) => (u in e) ? TD(e, u, { enumerable: true, configurable: true, writable: true, value: F }) : e[u] = F;
34515
+ var MD = (e, u, F) => (jD(e, typeof u != "symbol" ? u + "" : u, F), F);
34516
+
34517
+ class PD extends x {
34518
+ constructor(u) {
34519
+ super(u), MD(this, "valueWithCursor", ""), this.on("finalize", () => {
34520
+ this.value || (this.value = u.defaultValue), this.valueWithCursor = this.value;
34521
+ }), this.on("value", () => {
34522
+ if (this.cursor >= this.value.length)
34523
+ this.valueWithCursor = `${this.value}${import_picocolors.default.inverse(import_picocolors.default.hidden("_"))}`;
34524
+ else {
34525
+ const F = this.value.slice(0, this.cursor), t = this.value.slice(this.cursor);
34526
+ this.valueWithCursor = `${F}${import_picocolors.default.inverse(t[0])}${t.slice(1)}`;
34527
+ }
34528
+ });
34529
+ }
34530
+ get cursor() {
34531
+ return this._cursor;
34532
+ }
34533
+ }
34534
+ var WD = globalThis.process.platform.startsWith("win");
34535
+ function OD({ input: e = $, output: u = k, overwrite: F = true, hideCursor: t = true } = {}) {
34536
+ const s = f.createInterface({ input: e, output: u, prompt: "", tabSize: 1 });
34537
+ f.emitKeypressEvents(e, s), e.isTTY && e.setRawMode(true);
34538
+ const C = (D, { name: i }) => {
34539
+ if (String(D) === "\x03") {
34540
+ t && u.write(import_sisteransi.cursor.show), process.exit(0);
34541
+ return;
34542
+ }
34543
+ if (!F)
34544
+ return;
34545
+ let n = i === "return" ? 0 : -1, E = i === "return" ? -1 : 0;
34546
+ f.moveCursor(u, n, E, () => {
34547
+ f.clearLine(u, 1, () => {
34548
+ e.once("keypress", C);
34549
+ });
34550
+ });
34551
+ };
34552
+ return t && u.write(import_sisteransi.cursor.hide), e.once("keypress", C), () => {
34553
+ e.off("keypress", C), t && u.write(import_sisteransi.cursor.show), e.isTTY && !WD && e.setRawMode(false), s.terminal = false, s.close();
34554
+ };
34555
+ }
34556
+
34557
+ // node_modules/@clack/prompts/dist/index.mjs
34558
+ var import_picocolors2 = __toESM(require_picocolors(), 1);
34559
+ var import_sisteransi2 = __toESM(require_src(), 1);
34560
+ import h from "node:process";
34561
+ function q2() {
34562
+ return h.platform !== "win32" ? h.env.TERM !== "linux" : Boolean(h.env.CI) || Boolean(h.env.WT_SESSION) || Boolean(h.env.TERMINUS_SUBLIME) || h.env.ConEmuTask === "{cmd::Cmder}" || h.env.TERM_PROGRAM === "Terminus-Sublime" || h.env.TERM_PROGRAM === "vscode" || h.env.TERM === "xterm-256color" || h.env.TERM === "alacritty" || h.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
34563
+ }
34564
+ var _3 = q2();
34565
+ var o = (r2, n) => _3 ? r2 : n;
34566
+ var H = o("◆", "*");
34567
+ var I2 = o("■", "x");
34568
+ var x2 = o("▲", "x");
34569
+ var S2 = o("◇", "o");
34570
+ var K = o("┌", "T");
34571
+ var a2 = o("│", "|");
34572
+ var d2 = o("└", "—");
34573
+ var b2 = o("●", ">");
34574
+ var E = o("○", " ");
34575
+ var C = o("◻", "[•]");
34576
+ var w2 = o("◼", "[+]");
34577
+ var M2 = o("◻", "[ ]");
34578
+ var U2 = o("▪", "•");
34579
+ var B = o("─", "-");
34580
+ var Z = o("╮", "+");
34581
+ var z2 = o("├", "+");
34582
+ var X2 = o("╯", "+");
34583
+ var J2 = o("●", "•");
34584
+ var Y = o("◆", "*");
34585
+ var Q2 = o("▲", "!");
34586
+ var ee = o("■", "x");
34587
+ var y2 = (r2) => {
34588
+ switch (r2) {
34589
+ case "initial":
34590
+ case "active":
34591
+ return import_picocolors2.default.cyan(H);
34592
+ case "cancel":
34593
+ return import_picocolors2.default.red(I2);
34594
+ case "error":
34595
+ return import_picocolors2.default.yellow(x2);
34596
+ case "submit":
34597
+ return import_picocolors2.default.green(S2);
34598
+ }
34599
+ };
34600
+ var te = (r2) => new PD({ validate: r2.validate, placeholder: r2.placeholder, defaultValue: r2.defaultValue, initialValue: r2.initialValue, render() {
34601
+ const n = `${import_picocolors2.default.gray(a2)}
34602
+ ${y2(this.state)} ${r2.message}
34603
+ `, i = r2.placeholder ? import_picocolors2.default.inverse(r2.placeholder[0]) + import_picocolors2.default.dim(r2.placeholder.slice(1)) : import_picocolors2.default.inverse(import_picocolors2.default.hidden("_")), t = this.value ? this.valueWithCursor : i;
34604
+ switch (this.state) {
34605
+ case "error":
34606
+ return `${n.trim()}
34607
+ ${import_picocolors2.default.yellow(a2)} ${t}
34608
+ ${import_picocolors2.default.yellow(d2)} ${import_picocolors2.default.yellow(this.error)}
34609
+ `;
34610
+ case "submit":
34611
+ return `${n}${import_picocolors2.default.gray(a2)} ${import_picocolors2.default.dim(this.value || r2.placeholder)}`;
34612
+ case "cancel":
34613
+ return `${n}${import_picocolors2.default.gray(a2)} ${import_picocolors2.default.strikethrough(import_picocolors2.default.dim(this.value ?? ""))}${this.value?.trim() ? `
34614
+ ` + import_picocolors2.default.gray(a2) : ""}`;
34615
+ default:
34616
+ return `${n}${import_picocolors2.default.cyan(a2)} ${t}
34617
+ ${import_picocolors2.default.cyan(d2)}
34618
+ `;
34619
+ }
34620
+ } }).prompt();
34621
+ var ue = (r2 = "") => {
34622
+ process.stdout.write(`${import_picocolors2.default.gray(d2)} ${import_picocolors2.default.red(r2)}
34623
+
34624
+ `);
34625
+ };
34626
+ var oe = (r2 = "") => {
34627
+ process.stdout.write(`${import_picocolors2.default.gray(K)} ${r2}
34628
+ `);
34629
+ };
34630
+ var $e = (r2 = "") => {
34631
+ process.stdout.write(`${import_picocolors2.default.gray(a2)}
34632
+ ${import_picocolors2.default.gray(d2)} ${r2}
34633
+
34634
+ `);
34635
+ };
34636
+ var f2 = { message: (r2 = "", { symbol: n = import_picocolors2.default.gray(a2) } = {}) => {
34637
+ const i = [`${import_picocolors2.default.gray(a2)}`];
34638
+ if (r2) {
34639
+ const [t, ...s] = r2.split(`
34640
+ `);
34641
+ i.push(`${n} ${t}`, ...s.map((c2) => `${import_picocolors2.default.gray(a2)} ${c2}`));
34642
+ }
34643
+ process.stdout.write(`${i.join(`
34644
+ `)}
34645
+ `);
34646
+ }, info: (r2) => {
34647
+ f2.message(r2, { symbol: import_picocolors2.default.blue(J2) });
34648
+ }, success: (r2) => {
34649
+ f2.message(r2, { symbol: import_picocolors2.default.green(Y) });
34650
+ }, step: (r2) => {
34651
+ f2.message(r2, { symbol: import_picocolors2.default.green(S2) });
34652
+ }, warn: (r2) => {
34653
+ f2.message(r2, { symbol: import_picocolors2.default.yellow(Q2) });
34654
+ }, warning: (r2) => {
34655
+ f2.warn(r2);
34656
+ }, error: (r2) => {
34657
+ f2.message(r2, { symbol: import_picocolors2.default.red(ee) });
34658
+ } };
34659
+ var de = () => {
34660
+ const r2 = _3 ? ["◒", "◐", "◓", "◑"] : ["•", "o", "O", "0"], n = _3 ? 80 : 120;
34661
+ let i, t, s = false, c2 = "";
34662
+ const l2 = (v2 = "") => {
34663
+ s = true, i = OD(), c2 = v2.replace(/\.+$/, ""), process.stdout.write(`${import_picocolors2.default.gray(a2)}
34664
+ `);
34665
+ let g2 = 0, p = 0;
34666
+ t = setInterval(() => {
34667
+ const O2 = import_picocolors2.default.magenta(r2[g2]), P2 = ".".repeat(Math.floor(p)).slice(0, 3);
34668
+ process.stdout.write(import_sisteransi2.cursor.move(-999, 0)), process.stdout.write(import_sisteransi2.erase.down(1)), process.stdout.write(`${O2} ${c2}${P2}`), g2 = g2 + 1 < r2.length ? g2 + 1 : 0, p = p < r2.length ? p + 0.125 : 0;
34669
+ }, n);
34670
+ }, u = (v2 = "", g2 = 0) => {
34671
+ c2 = v2 ?? c2, s = false, clearInterval(t);
34672
+ const p = g2 === 0 ? import_picocolors2.default.green(S2) : g2 === 1 ? import_picocolors2.default.red(I2) : import_picocolors2.default.red(x2);
34673
+ process.stdout.write(import_sisteransi2.cursor.move(-999, 0)), process.stdout.write(import_sisteransi2.erase.down(1)), process.stdout.write(`${p} ${c2}
34674
+ `), i();
34675
+ }, m2 = (v2 = "") => {
34676
+ c2 = v2 ?? c2;
34677
+ }, $2 = (v2) => {
34678
+ const g2 = v2 > 1 ? "Something went wrong" : "Canceled";
34679
+ s && u(g2, v2);
34680
+ };
34681
+ return process.on("uncaughtExceptionMonitor", () => $2(2)), process.on("unhandledRejection", () => $2(2)), process.on("SIGINT", () => $2(1)), process.on("SIGTERM", () => $2(1)), process.on("exit", $2), { start: l2, stop: u, message: m2 };
34682
+ };
34683
+
34684
+ // src/lib/pro-installer.ts
34685
+ var import_fs_extra12 = __toESM(require_lib4(), 1);
34686
+ import os6 from "os";
34687
+ import path14 from "path";
34688
+ var PREMIUM_REPO = "Melvynx/aiblueprint-cli-premium";
34689
+ var PREMIUM_BRANCH = "main";
34690
+ async function downloadFromPrivateGitHub(repo, branch, relativePath, targetPath, githubToken) {
34691
+ try {
34692
+ const url = `https://raw.githubusercontent.com/${repo}/${branch}/${relativePath}`;
34693
+ const response = await fetch(url, {
34694
+ headers: {
34695
+ Authorization: `token ${githubToken}`,
34696
+ Accept: "application/vnd.github.v3.raw"
34697
+ }
34698
+ });
34699
+ if (!response.ok) {
34700
+ console.error(`Failed to download ${relativePath}: ${response.status} ${response.statusText}`);
34701
+ return false;
34702
+ }
34703
+ const content = await response.arrayBuffer();
34704
+ await import_fs_extra12.default.ensureDir(path14.dirname(targetPath));
34705
+ await import_fs_extra12.default.writeFile(targetPath, Buffer.from(content));
34706
+ return true;
34707
+ } catch (error) {
34708
+ console.error(`Error downloading ${relativePath}:`, error);
34709
+ return false;
34710
+ }
34711
+ }
34712
+ async function downloadDirectoryFromPrivateGitHub(repo, branch, dirPath, targetDir, githubToken) {
34713
+ try {
34714
+ const apiUrl = `https://api.github.com/repos/${repo}/contents/${dirPath}?ref=${branch}`;
34715
+ const response = await fetch(apiUrl, {
34716
+ headers: {
34717
+ Authorization: `token ${githubToken}`,
34718
+ Accept: "application/vnd.github.v3+json"
34719
+ }
34720
+ });
34721
+ if (!response.ok) {
34722
+ console.error(`Failed to list directory ${dirPath}: ${response.status} ${response.statusText}`);
34723
+ return false;
34724
+ }
34725
+ const files = await response.json();
34726
+ if (!Array.isArray(files)) {
34727
+ console.error(`Unexpected response for directory ${dirPath}`);
34728
+ return false;
34729
+ }
34730
+ await import_fs_extra12.default.ensureDir(targetDir);
34731
+ for (const file of files) {
34732
+ const relativePath = dirPath ? `${dirPath}/${file.name}` : file.name;
34733
+ const targetPath = path14.join(targetDir, file.name);
34734
+ if (file.type === "file") {
34735
+ await downloadFromPrivateGitHub(repo, branch, relativePath, targetPath, githubToken);
34736
+ } else if (file.type === "dir") {
34737
+ await downloadDirectoryFromPrivateGitHub(repo, branch, relativePath, targetPath, githubToken);
34738
+ }
34739
+ }
34740
+ return true;
34741
+ } catch (error) {
34742
+ console.error(`Error downloading directory ${dirPath}:`, error);
34743
+ return false;
34744
+ }
34745
+ }
34746
+ async function installProConfigs(options) {
34747
+ const { githubToken, claudeCodeFolder } = options;
34748
+ const claudeFolder = claudeCodeFolder || path14.join(os6.homedir(), ".claude");
34749
+ const tempDir = path14.join(os6.tmpdir(), `aiblueprint-premium-${Date.now()}`);
34750
+ try {
34751
+ const success = await downloadDirectoryFromPrivateGitHub(PREMIUM_REPO, PREMIUM_BRANCH, "claude-code-config", tempDir, githubToken);
34752
+ if (!success) {
34753
+ throw new Error("Failed to download premium configurations");
34754
+ }
34755
+ await import_fs_extra12.default.copy(tempDir, claudeFolder, {
34756
+ overwrite: true,
34757
+ recursive: true
34758
+ });
34759
+ console.log(`✓ Premium configurations installed to ${claudeFolder}`);
34760
+ } catch (error) {
34761
+ throw new Error(`Failed to install premium configs: ${error instanceof Error ? error.message : "Unknown error"}`);
34762
+ } finally {
34763
+ try {
34764
+ await import_fs_extra12.default.remove(tempDir);
34765
+ } catch (error) {
34766
+ }
34767
+ }
34768
+ }
34769
+
34770
+ // src/lib/setup-helper.ts
34771
+ var import_fs_extra13 = __toESM(require_lib4(), 1);
34772
+ import path15 from "path";
34773
+ import os7 from "os";
34774
+ async function installBasicConfigs(options = {}, skipStatusline = false) {
34775
+ const claudeDir = options.claudeCodeFolder || path15.join(os7.homedir(), ".claude");
34776
+ await import_fs_extra13.default.ensureDir(claudeDir);
34777
+ console.log(source_default.gray("\uD83D\uDCE6 Installing free configurations..."));
34778
+ console.log(source_default.gray(" • Commands..."));
34779
+ await downloadDirectoryFromGitHub("commands", path15.join(claudeDir, "commands"));
34780
+ console.log(source_default.gray(" • Agents..."));
34781
+ await downloadDirectoryFromGitHub("agents", path15.join(claudeDir, "agents"));
34782
+ if (!skipStatusline) {
34783
+ console.log(source_default.gray(" • Statusline (basic)..."));
34784
+ await downloadDirectoryFromGitHub("scripts/statusline", path15.join(claudeDir, "scripts", "statusline"));
34785
+ }
34786
+ console.log(source_default.green("✓ Free configurations installed"));
34787
+ return claudeDir;
34788
+ }
34789
+
34790
+ // src/lib/token-storage.ts
34791
+ var import_fs_extra14 = __toESM(require_lib4(), 1);
34792
+ import os8 from "os";
34793
+ import path16 from "path";
34794
+ function getConfigDir() {
34795
+ const platform = os8.platform();
34796
+ if (platform === "win32") {
34797
+ const appData = process.env.APPDATA || path16.join(os8.homedir(), "AppData", "Roaming");
34798
+ return path16.join(appData, "aiblueprint");
34799
+ } else {
34800
+ const configHome = process.env.XDG_CONFIG_HOME || path16.join(os8.homedir(), ".config");
34801
+ return path16.join(configHome, "aiblueprint");
34802
+ }
34803
+ }
34804
+ function getTokenFilePath() {
34805
+ return path16.join(getConfigDir(), "token.txt");
34806
+ }
34807
+ async function saveToken(githubToken) {
34808
+ const tokenFile = getTokenFilePath();
34809
+ await import_fs_extra14.default.ensureDir(path16.dirname(tokenFile));
34810
+ await import_fs_extra14.default.writeFile(tokenFile, githubToken, { mode: 384 });
34811
+ }
34812
+ async function getToken() {
34813
+ const tokenFile = getTokenFilePath();
34814
+ if (!await import_fs_extra14.default.pathExists(tokenFile)) {
34815
+ return null;
34816
+ }
34817
+ try {
34818
+ const token = await import_fs_extra14.default.readFile(tokenFile, "utf-8");
34819
+ return token.trim();
34820
+ } catch (error) {
34821
+ return null;
34822
+ }
34823
+ }
34824
+ function getTokenInfo() {
34825
+ return {
34826
+ path: getTokenFilePath(),
34827
+ platform: os8.platform()
34828
+ };
34829
+ }
34830
+
34831
+ // src/commands/pro.ts
34832
+ var API_URL = "https://codeline.app/api/products";
34833
+ var PRODUCT_ID = "prd_XJVgxVPbGG";
34834
+ async function proActivateCommand(userToken) {
34835
+ oe(source_default.blue("\uD83D\uDD11 Activate AIBlueprint CLI Premium"));
34836
+ try {
34837
+ if (!userToken) {
34838
+ const result = await te({
34839
+ message: "Enter your Premium access token:",
34840
+ placeholder: "Your ProductsOnUsers ID from codeline.app",
34841
+ validate: (value) => {
34842
+ if (!value)
34843
+ return "Token is required";
34844
+ if (value.length < 5)
34845
+ return "Token seems invalid";
34846
+ return;
34847
+ }
34848
+ });
34849
+ if (lD(result)) {
34850
+ ue("Activation cancelled");
34851
+ process.exit(0);
34852
+ }
34853
+ userToken = result;
34854
+ }
34855
+ const spinner = de();
34856
+ spinner.start("Validating token...");
34857
+ const response = await fetch(`${API_URL}/${PRODUCT_ID}/have-access?token=${userToken}`);
34858
+ if (!response.ok) {
34859
+ spinner.stop("Failed to validate token");
34860
+ f2.error(`API error: ${response.status} ${response.statusText}`);
34861
+ $e(source_default.red("❌ Failed to activate. Please check your token and try again."));
34862
+ process.exit(1);
34863
+ }
34864
+ const data = await response.json();
34865
+ if (!data.hasAccess) {
34866
+ spinner.stop("Token validation failed");
34867
+ f2.error(data.error || "Invalid token");
34868
+ f2.info("\uD83D\uDC8E Get AIBlueprint CLI Premium at: https://mlv.sh/claude-cli");
34869
+ $e(source_default.red("❌ Activation failed"));
34870
+ process.exit(1);
34871
+ }
34872
+ spinner.stop("Token validated");
34873
+ const githubToken = data.product.metadata?.["cli-github-token"];
34874
+ if (!githubToken) {
34875
+ f2.error("No GitHub token found in product metadata. Please contact support.");
34876
+ $e(source_default.red("❌ Activation failed"));
34877
+ process.exit(1);
34878
+ }
34879
+ spinner.start("Saving token...");
34880
+ await saveToken(githubToken);
34881
+ spinner.stop("Token saved");
34882
+ const tokenInfo = getTokenInfo();
34883
+ f2.success("✅ Token activated!");
34884
+ f2.info(`User: ${data.user.name} (${data.user.email})`);
34885
+ f2.info(`Product: ${data.product.title}`);
34886
+ f2.info(`Token saved to: ${tokenInfo.path}`);
34887
+ f2.info(source_default.cyan(`
34888
+ \uD83D\uDCA1 Next step: Run 'aiblueprint claude-code pro setup' to install premium configs`));
34889
+ $e(source_default.green("✅ Activation complete!"));
34890
+ } catch (error) {
34891
+ if (error instanceof Error) {
34892
+ f2.error(error.message);
34893
+ }
34894
+ $e(source_default.red("❌ Activation failed"));
34895
+ process.exit(1);
34896
+ }
34897
+ }
34898
+ async function proStatusCommand() {
34899
+ oe(source_default.blue("\uD83D\uDCCA Premium Token Status"));
34900
+ try {
34901
+ const token = await getToken();
34902
+ if (!token) {
34903
+ f2.warn("No token found");
34904
+ f2.info("Run: aiblueprint claude-code pro activate <token>");
34905
+ f2.info("Get your token at: https://mlv.sh/claude-cli");
34906
+ $e(source_default.yellow("⚠️ Not activated"));
34907
+ process.exit(0);
34908
+ }
34909
+ const tokenInfo = getTokenInfo();
34910
+ f2.success("✅ Token active");
34911
+ f2.info(`Token file: ${tokenInfo.path}`);
34912
+ f2.info(`Platform: ${tokenInfo.platform}`);
34913
+ $e(source_default.green("Token is saved"));
34914
+ } catch (error) {
34915
+ if (error instanceof Error) {
34916
+ f2.error(error.message);
34917
+ }
34918
+ $e(source_default.red("❌ Failed to check status"));
34919
+ process.exit(1);
34920
+ }
34921
+ }
34922
+ async function proSetupCommand(options = {}) {
34923
+ oe(source_default.blue("⚙️ Setup AIBlueprint CLI Premium"));
34924
+ try {
34925
+ const githubToken = await getToken();
34926
+ if (!githubToken) {
34927
+ f2.error("No token found");
34928
+ f2.info("Run: aiblueprint claude-code pro activate <token>");
34929
+ $e(source_default.red("❌ Not activated"));
34930
+ process.exit(1);
34931
+ }
34932
+ const spinner = de();
34933
+ spinner.start("Installing free configurations...");
34934
+ const claudeDir = await installBasicConfigs({ claudeCodeFolder: options.folder }, true);
34935
+ spinner.stop("Free configurations installed");
34936
+ spinner.start("Installing premium configurations...");
34937
+ await installProConfigs({
34938
+ githubToken,
34939
+ claudeCodeFolder: claudeDir
34940
+ });
34941
+ spinner.stop("Premium configurations installed");
34942
+ f2.success("✅ Setup complete!");
34943
+ f2.info("Installed:");
34944
+ f2.info(" • Free commands + Premium commands");
34945
+ f2.info(" • Free agents + Premium agents");
34946
+ f2.info(" • Premium statusline ONLY (advanced)");
34947
+ $e(source_default.green("\uD83D\uDE80 Ready to use!"));
34948
+ } catch (error) {
34949
+ if (error instanceof Error) {
34950
+ f2.error(error.message);
34951
+ }
34952
+ $e(source_default.red("❌ Setup failed"));
34953
+ process.exit(1);
34954
+ }
34955
+ }
34956
+ async function proUpdateCommand(options = {}) {
34957
+ oe(source_default.blue("\uD83D\uDD04 Update Premium Configs"));
34958
+ try {
34959
+ const githubToken = await getToken();
34960
+ if (!githubToken) {
34961
+ f2.error("No token found");
34962
+ f2.info("Run: aiblueprint claude-code pro activate <token>");
34963
+ $e(source_default.red("❌ Not activated"));
34964
+ process.exit(1);
34965
+ }
34966
+ const spinner = de();
34967
+ spinner.start("Updating premium configurations...");
34968
+ await installProConfigs({
34969
+ githubToken,
34970
+ claudeCodeFolder: options.folder
34971
+ });
34972
+ spinner.stop("Premium configurations updated");
34973
+ $e(source_default.green("✅ Update completed"));
34974
+ } catch (error) {
34975
+ if (error instanceof Error) {
34976
+ f2.error(error.message);
34977
+ }
34978
+ $e(source_default.red("❌ Update failed"));
34979
+ process.exit(1);
34980
+ }
34981
+ }
34982
+
34074
34983
  // src/cli.ts
34075
34984
  import { readFileSync as readFileSync2 } from "fs";
34076
34985
  import { dirname as dirname4, join } from "path";
@@ -34118,6 +35027,23 @@ claudeCodeCmd.command("statusline").description("Setup custom statusline with gi
34118
35027
  const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
34119
35028
  statuslineCommand({ folder: claudeCodeFolder });
34120
35029
  });
35030
+ var proCmd = claudeCodeCmd.command("pro").description("Manage AIBlueprint CLI Premium features");
35031
+ proCmd.command("activate [token]").description("Activate AIBlueprint CLI Premium with your access token").action((token) => {
35032
+ proActivateCommand(token);
35033
+ });
35034
+ proCmd.command("status").description("Check your Premium token status").action(() => {
35035
+ proStatusCommand();
35036
+ });
35037
+ proCmd.command("setup").description("Install premium configurations (requires activation)").action((options, command) => {
35038
+ const parentOptions = command.parent.parent.opts();
35039
+ const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
35040
+ proSetupCommand({ folder: claudeCodeFolder });
35041
+ });
35042
+ proCmd.command("update").description("Update premium configurations").action((options, command) => {
35043
+ const parentOptions = command.parent.parent.opts();
35044
+ const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
35045
+ proUpdateCommand({ folder: claudeCodeFolder });
35046
+ });
34121
35047
  program2.parse(process.argv);
34122
35048
  if (!process.argv.slice(2).length) {
34123
35049
  console.log(source_default.blue("\uD83D\uDE80 AIBlueprint CLI"));