@mathripper/ideal-cli 1.0.0 → 1.0.1

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/index.js CHANGED
@@ -88,11 +88,11 @@ async function isEmpty(dirPath) {
88
88
  try {
89
89
  const files = await fs.readdir(dirPath);
90
90
  return files.length === 0;
91
- } catch (error) {
92
- if (error.code === "ENOENT") {
91
+ } catch (error2) {
92
+ if (error2.code === "ENOENT") {
93
93
  return true;
94
94
  }
95
- throw error;
95
+ throw error2;
96
96
  }
97
97
  }
98
98
  async function copyDir(src, dest, options2 = {}) {
@@ -2721,7 +2721,7 @@ var require_loader = __commonJS({
2721
2721
  iterator(documents[index]);
2722
2722
  }
2723
2723
  }
2724
- function load(input, options2) {
2724
+ function load2(input, options2) {
2725
2725
  var documents = loadDocuments(input, options2);
2726
2726
  if (documents.length === 0) {
2727
2727
  return void 0;
@@ -2738,10 +2738,10 @@ var require_loader = __commonJS({
2738
2738
  return loadAll(input, iterator, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options2));
2739
2739
  }
2740
2740
  function safeLoad(input, options2) {
2741
- return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options2));
2741
+ return load2(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options2));
2742
2742
  }
2743
2743
  module2.exports.loadAll = loadAll;
2744
- module2.exports.load = load;
2744
+ module2.exports.load = load2;
2745
2745
  module2.exports.safeLoadAll = safeLoadAll;
2746
2746
  module2.exports.safeLoad = safeLoad;
2747
2747
  }
@@ -3752,14 +3752,20 @@ init_esm_shims();
3752
3752
 
3753
3753
  // src/constants/messages.ts
3754
3754
  init_esm_shims();
3755
+ var MSG_INIT_SUCCESS = "\u9879\u76EE\u521D\u59CB\u5316\u5B8C\u6210\uFF01";
3755
3756
  var MSG_UPDATE_SUCCESS = "\u66F4\u65B0\u5B8C\u6210\uFF01";
3757
+ var ERR_DIR_EXISTS = "\u76EE\u5F55\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4F7F\u7528 --force \u5F3A\u5236\u8986\u76D6";
3756
3758
  var ERR_CONFIG_NOT_FOUND = "\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8BF7\u5148\u8FD0\u884C ideal init";
3757
3759
  var WARN_FILE_MODIFIED = "\u6587\u4EF6\u5DF2\u88AB\u4FEE\u6539\uFF0C\u66F4\u65B0\u65F6\u53EF\u80FD\u88AB\u8986\u76D6";
3758
3760
  var WARN_CONFLICT_DETECTED = "\u68C0\u6D4B\u5230\u51B2\u7A81\uFF0C\u8BF7\u624B\u52A8\u89E3\u51B3";
3761
+ var INFO_CREATING_DIR = "\u6B63\u5728\u521B\u5EFA\u76EE\u5F55...";
3762
+ var INFO_DOWNLOADING = "\u6B63\u5728\u4E0B\u8F7D\u6A21\u677F...";
3759
3763
  var INFO_CHECKING = "\u6B63\u5728\u68C0\u67E5...";
3760
3764
  var INFO_UPDATING = "\u6B63\u5728\u66F4\u65B0...";
3761
- var HELP_INIT = "\u521D\u59CB\u5316\u9879\u76EE\u5DE5\u4F5C\u6D41\u914D\u7F6E";
3762
3765
  var HELP_DOCTOR = "\u68C0\u67E5\u5DE5\u4F5C\u6D41\u914D\u7F6E\u5B8C\u6574\u6027\u548C\u6709\u6548\u6027";
3766
+ var PROMPT_PROJECT_NAME = "\u9879\u76EE\u540D\u79F0";
3767
+ var PROMPT_GIT_BRANCH = "Git \u4E3B\u5206\u652F\u540D\u79F0";
3768
+ var PROMPT_TECH_STACK = "\u6280\u672F\u6808\u7C7B\u578B";
3763
3769
 
3764
3770
  // src/commands/doctor.ts
3765
3771
  init_esm_shims();
@@ -3787,7 +3793,7 @@ init_esm_shims();
3787
3793
  var ANSI_BACKGROUND_OFFSET = 10;
3788
3794
  var wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
3789
3795
  var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
3790
- var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
3796
+ var wrapAnsi16m = (offset = 0) => (red2, green2, blue2) => `\x1B[${38 + offset};2;${red2};${green2};${blue2}m`;
3791
3797
  var styles = {
3792
3798
  modifier: {
3793
3799
  reset: [0, 0],
@@ -3882,17 +3888,17 @@ function assembleStyles() {
3882
3888
  styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
3883
3889
  Object.defineProperties(styles, {
3884
3890
  rgbToAnsi256: {
3885
- value(red, green, blue) {
3886
- if (red === green && green === blue) {
3887
- if (red < 8) {
3891
+ value(red2, green2, blue2) {
3892
+ if (red2 === green2 && green2 === blue2) {
3893
+ if (red2 < 8) {
3888
3894
  return 16;
3889
3895
  }
3890
- if (red > 248) {
3896
+ if (red2 > 248) {
3891
3897
  return 231;
3892
3898
  }
3893
- return Math.round((red - 8) / 247 * 24) + 232;
3899
+ return Math.round((red2 - 8) / 247 * 24) + 232;
3894
3900
  }
3895
- return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
3901
+ return 16 + 36 * Math.round(red2 / 255 * 5) + 6 * Math.round(green2 / 255 * 5) + Math.round(blue2 / 255 * 5);
3896
3902
  },
3897
3903
  enumerable: false
3898
3904
  },
@@ -3929,25 +3935,25 @@ function assembleStyles() {
3929
3935
  if (code < 16) {
3930
3936
  return 90 + (code - 8);
3931
3937
  }
3932
- let red;
3933
- let green;
3934
- let blue;
3938
+ let red2;
3939
+ let green2;
3940
+ let blue2;
3935
3941
  if (code >= 232) {
3936
- red = ((code - 232) * 10 + 8) / 255;
3937
- green = red;
3938
- blue = red;
3942
+ red2 = ((code - 232) * 10 + 8) / 255;
3943
+ green2 = red2;
3944
+ blue2 = red2;
3939
3945
  } else {
3940
3946
  code -= 16;
3941
3947
  const remainder = code % 36;
3942
- red = Math.floor(code / 36) / 5;
3943
- green = Math.floor(remainder / 6) / 5;
3944
- blue = remainder % 6 / 5;
3948
+ red2 = Math.floor(code / 36) / 5;
3949
+ green2 = Math.floor(remainder / 6) / 5;
3950
+ blue2 = remainder % 6 / 5;
3945
3951
  }
3946
- const value = Math.max(red, green, blue) * 2;
3952
+ const value = Math.max(red2, green2, blue2) * 2;
3947
3953
  if (value === 0) {
3948
3954
  return 30;
3949
3955
  }
3950
- let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
3956
+ let result = 30 + (Math.round(blue2) << 2 | Math.round(green2) << 1 | Math.round(red2));
3951
3957
  if (value === 2) {
3952
3958
  result += 60;
3953
3959
  }
@@ -3956,7 +3962,7 @@ function assembleStyles() {
3956
3962
  enumerable: false
3957
3963
  },
3958
3964
  rgbToAnsi: {
3959
- value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
3965
+ value: (red2, green2, blue2) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red2, green2, blue2)),
3960
3966
  enumerable: false
3961
3967
  },
3962
3968
  hexToAnsi: {
@@ -4384,6 +4390,30 @@ ${source_default.bold.cyan(message)}
4384
4390
  var logger = Logger.getInstance();
4385
4391
 
4386
4392
  // src/utils/detector.ts
4393
+ var TECH_STACK_RULES = [
4394
+ {
4395
+ name: "React",
4396
+ files: ["react.config.js", "react.config.ts"],
4397
+ dependencies: ["react", "react-dom"]
4398
+ },
4399
+ {
4400
+ name: "Vue",
4401
+ files: ["vue.config.js", "vue.config.ts", "vite.config.js", "vite.config.ts"],
4402
+ directories: ["src/views", "src/components"],
4403
+ dependencies: ["vue"]
4404
+ },
4405
+ {
4406
+ name: "Node.js",
4407
+ files: ["nest-cli.json", "tsconfig.build.json"],
4408
+ directories: ["src/controllers", "src/services", "src/modules"],
4409
+ dependencies: ["express", "nestjs", "@nestjs/core", "koa", "fastify"]
4410
+ },
4411
+ {
4412
+ name: "Python",
4413
+ files: ["requirements.txt", "setup.py", "pyproject.toml", "Pipfile"],
4414
+ directories: ["src", "tests"]
4415
+ }
4416
+ ];
4387
4417
  async function detectProjectRoot(startPath = process.cwd()) {
4388
4418
  const idealRoot = await getProjectRoot(startPath);
4389
4419
  if (idealRoot) {
@@ -4404,6 +4434,56 @@ async function detectProjectRoot(startPath = process.cwd()) {
4404
4434
  }
4405
4435
  return null;
4406
4436
  }
4437
+ async function detectTechStack(projectRoot) {
4438
+ const packageJsonPath = path3.join(projectRoot, "package.json");
4439
+ const hasPackageJson = await fileExists(packageJsonPath);
4440
+ if (hasPackageJson) {
4441
+ try {
4442
+ const packageJson = JSON.parse(await readFile(packageJsonPath));
4443
+ const allDeps = {
4444
+ ...packageJson.dependencies,
4445
+ ...packageJson.devDependencies
4446
+ };
4447
+ for (const rule of TECH_STACK_RULES) {
4448
+ if (rule.name === "Python") continue;
4449
+ if (rule.files) {
4450
+ for (const file of rule.files) {
4451
+ if (await fileExists(path3.join(projectRoot, file))) {
4452
+ return rule.name;
4453
+ }
4454
+ }
4455
+ }
4456
+ if (rule.directories) {
4457
+ for (const dir of rule.directories) {
4458
+ if (await pathExists(path3.join(projectRoot, dir))) {
4459
+ return rule.name;
4460
+ }
4461
+ }
4462
+ }
4463
+ if (rule.dependencies) {
4464
+ for (const dep of rule.dependencies) {
4465
+ if (allDeps[dep]) {
4466
+ return rule.name;
4467
+ }
4468
+ }
4469
+ }
4470
+ }
4471
+ return "Node.js";
4472
+ } catch (error2) {
4473
+ logger.debug(
4474
+ `Failed to parse package.json: ${error2 instanceof Error ? error2.message : "Unknown error"}`
4475
+ );
4476
+ }
4477
+ }
4478
+ const requirementsPath = path3.join(projectRoot, "requirements.txt");
4479
+ const pyprojectPath = path3.join(projectRoot, "pyproject.toml");
4480
+ const setupPath = path3.join(projectRoot, "setup.py");
4481
+ const pipfilePath = path3.join(projectRoot, "Pipfile");
4482
+ if (await fileExists(requirementsPath) || await fileExists(pyprojectPath) || await fileExists(setupPath) || await fileExists(pipfilePath)) {
4483
+ return "Python";
4484
+ }
4485
+ return "Other";
4486
+ }
4407
4487
  async function detectGitRepo(projectRoot) {
4408
4488
  const gitDir = path3.join(projectRoot, ".git");
4409
4489
  return pathExists(gitDir);
@@ -4420,6 +4500,59 @@ function getGitBranch(projectRoot) {
4420
4500
  return null;
4421
4501
  }
4422
4502
  }
4503
+ function getGitRemoteUrl(projectRoot) {
4504
+ try {
4505
+ const url = execSync("git config --get remote.origin.url", {
4506
+ cwd: projectRoot,
4507
+ encoding: "utf-8",
4508
+ stdio: ["pipe", "pipe", "pipe"]
4509
+ }).trim();
4510
+ return url || null;
4511
+ } catch {
4512
+ return null;
4513
+ }
4514
+ }
4515
+ function extractProjectNameFromGitUrl(gitUrl) {
4516
+ let projectName = gitUrl;
4517
+ if (projectName.endsWith(".git")) {
4518
+ projectName = projectName.slice(0, -4);
4519
+ }
4520
+ const parts = projectName.split("/");
4521
+ if (parts.length > 0) {
4522
+ projectName = parts[parts.length - 1];
4523
+ }
4524
+ if (projectName.includes(":")) {
4525
+ const colonParts = projectName.split(":");
4526
+ projectName = colonParts[colonParts.length - 1];
4527
+ if (projectName.includes("/")) {
4528
+ projectName = projectName.split("/").pop() || projectName;
4529
+ }
4530
+ }
4531
+ return projectName;
4532
+ }
4533
+ async function getProjectNameFromPackageJson(projectRoot) {
4534
+ const packageJsonPath = path3.join(projectRoot, "package.json");
4535
+ if (!await fileExists(packageJsonPath)) {
4536
+ return null;
4537
+ }
4538
+ try {
4539
+ const packageJson = JSON.parse(await readFile(packageJsonPath));
4540
+ return packageJson.name || null;
4541
+ } catch {
4542
+ return null;
4543
+ }
4544
+ }
4545
+ async function detectProjectName(projectRoot) {
4546
+ const packageName = await getProjectNameFromPackageJson(projectRoot);
4547
+ if (packageName) {
4548
+ return packageName;
4549
+ }
4550
+ const gitUrl = getGitRemoteUrl(projectRoot);
4551
+ if (gitUrl) {
4552
+ return extractProjectNameFromGitUrl(gitUrl);
4553
+ }
4554
+ return path3.basename(projectRoot);
4555
+ }
4423
4556
  async function detectIdealInitialized(projectRoot) {
4424
4557
  const idealDir = path3.join(projectRoot, ".ideal");
4425
4558
  const configPath = path3.join(idealDir, "config.json");
@@ -4663,12 +4796,12 @@ var ProjectValidator = class {
4663
4796
  details: `\u9879\u76EE\u540D\u79F0: ${config.projectName}
4664
4797
  \u6280\u672F\u6808: ${config.techStack}`
4665
4798
  };
4666
- } catch (error) {
4799
+ } catch (error2) {
4667
4800
  return {
4668
4801
  name: "\u914D\u7F6E\u6587\u4EF6",
4669
4802
  status: "error",
4670
4803
  message: "\u914D\u7F6E\u6587\u4EF6\u683C\u5F0F\u9519\u8BEF",
4671
- details: `\u89E3\u6790\u9519\u8BEF: ${error instanceof Error ? error.message : "Unknown error"}`
4804
+ details: `\u89E3\u6790\u9519\u8BEF: ${error2 instanceof Error ? error2.message : "Unknown error"}`
4672
4805
  };
4673
4806
  }
4674
4807
  }
@@ -4951,9 +5084,9 @@ var DoctorCommand = class {
4951
5084
  return 1;
4952
5085
  }
4953
5086
  return 0;
4954
- } catch (error) {
5087
+ } catch (error2) {
4955
5088
  this.logger.error(
4956
- `\u8BCA\u65AD\u68C0\u67E5\u5931\u8D25: ${error instanceof Error ? error.message : "Unknown error"}`
5089
+ `\u8BCA\u65AD\u68C0\u67E5\u5931\u8D25: ${error2 instanceof Error ? error2.message : "Unknown error"}`
4957
5090
  );
4958
5091
  return 1;
4959
5092
  }
@@ -5017,9 +5150,9 @@ var ConfigManager = class {
5017
5150
  const { data } = (0, import_gray_matter.default)(content);
5018
5151
  const config = this.parseConfig(data);
5019
5152
  return config;
5020
- } catch (error) {
5153
+ } catch (error2) {
5021
5154
  throw new Error(
5022
- `\u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`
5155
+ `\u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${error2 instanceof Error ? error2.message : String(error2)}`
5023
5156
  );
5024
5157
  }
5025
5158
  }
@@ -5294,12 +5427,12 @@ var ConfigCommand = class {
5294
5427
  console.log(item.key.padEnd(30) + item.value);
5295
5428
  }
5296
5429
  console.log("");
5297
- } catch (error) {
5298
- if (error instanceof Error && error.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5430
+ } catch (error2) {
5431
+ if (error2 instanceof Error && error2.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5299
5432
  console.error(ERR_CONFIG_NOT_FOUND);
5300
5433
  process.exit(1);
5301
5434
  }
5302
- throw error;
5435
+ throw error2;
5303
5436
  }
5304
5437
  }
5305
5438
  /**
@@ -5325,12 +5458,12 @@ var ConfigCommand = class {
5325
5458
  } else {
5326
5459
  console.log(String(value));
5327
5460
  }
5328
- } catch (error) {
5329
- if (error instanceof Error && error.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5461
+ } catch (error2) {
5462
+ if (error2 instanceof Error && error2.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5330
5463
  console.error(ERR_CONFIG_NOT_FOUND);
5331
5464
  process.exit(1);
5332
5465
  }
5333
- throw error;
5466
+ throw error2;
5334
5467
  }
5335
5468
  }
5336
5469
  /**
@@ -5352,12 +5485,12 @@ var ConfigCommand = class {
5352
5485
  const updatedConfig = configObj;
5353
5486
  await this.configManager.write(projectRoot, updatedConfig);
5354
5487
  console.log(`\u5DF2\u66F4\u65B0: ${key} = ${value}`);
5355
- } catch (error) {
5356
- if (error instanceof Error && error.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5488
+ } catch (error2) {
5489
+ if (error2 instanceof Error && error2.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5357
5490
  console.error(ERR_CONFIG_NOT_FOUND);
5358
5491
  process.exit(1);
5359
5492
  }
5360
- throw error;
5493
+ throw error2;
5361
5494
  }
5362
5495
  }
5363
5496
  };
@@ -5418,8 +5551,8 @@ function createHttpClient(config = {}) {
5418
5551
  }
5419
5552
  return config2;
5420
5553
  },
5421
- (error) => {
5422
- return Promise.reject(error);
5554
+ (error2) => {
5555
+ return Promise.reject(error2);
5423
5556
  }
5424
5557
  );
5425
5558
  instance.interceptors.response.use(
@@ -5431,8 +5564,8 @@ function createHttpClient(config = {}) {
5431
5564
  }
5432
5565
  return response;
5433
5566
  },
5434
- (error) => {
5435
- return Promise.reject(handleAxiosError(error));
5567
+ (error2) => {
5568
+ return Promise.reject(handleAxiosError(error2));
5436
5569
  }
5437
5570
  );
5438
5571
  return instance;
@@ -5468,9 +5601,9 @@ function configureProxy(instance) {
5468
5601
  }
5469
5602
  }
5470
5603
  }
5471
- function handleAxiosError(error) {
5472
- if (error.response) {
5473
- const { status, data } = error.response;
5604
+ function handleAxiosError(error2) {
5605
+ if (error2.response) {
5606
+ const { status, data } = error2.response;
5474
5607
  let message = `\u8BF7\u6C42\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${status}`;
5475
5608
  if (data && typeof data === "object" && "message" in data) {
5476
5609
  message = data.message;
@@ -5479,21 +5612,21 @@ function handleAxiosError(error) {
5479
5612
  }
5480
5613
  return new NetworkError(message, "RESPONSE_ERROR", status, data);
5481
5614
  }
5482
- if (error.request) {
5615
+ if (error2.request) {
5483
5616
  return new NetworkError(
5484
5617
  "\u65E0\u6CD5\u8FDE\u63A5\u5230\u670D\u52A1\u5668\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5",
5485
5618
  "NO_RESPONSE"
5486
5619
  );
5487
5620
  }
5488
- if (error.code === "ECONNABORTED") {
5621
+ if (error2.code === "ECONNABORTED") {
5489
5622
  return new NetworkError(
5490
- `\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF08\u8D85\u65F6\u65F6\u95F4: ${error.config?.timeout || DEFAULT_TIMEOUT}ms\uFF09`,
5623
+ `\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF08\u8D85\u65F6\u65F6\u95F4: ${error2.config?.timeout || DEFAULT_TIMEOUT}ms\uFF09`,
5491
5624
  "TIMEOUT"
5492
5625
  );
5493
5626
  }
5494
5627
  return new NetworkError(
5495
- error.message || "\u672A\u77E5\u7F51\u7EDC\u9519\u8BEF",
5496
- error.code || "UNKNOWN"
5628
+ error2.message || "\u672A\u77E5\u7F51\u7EDC\u9519\u8BEF",
5629
+ error2.code || "UNKNOWN"
5497
5630
  );
5498
5631
  }
5499
5632
  async function get(client, url, config) {
@@ -5505,11 +5638,11 @@ async function withRetry(requestFn, maxRetries = 3, retryDelay = 1e3) {
5505
5638
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
5506
5639
  try {
5507
5640
  return await requestFn();
5508
- } catch (error) {
5509
- lastError = error;
5510
- if (error instanceof NetworkError && error.statusCode) {
5511
- if (error.statusCode >= 400 && error.statusCode < 500) {
5512
- throw error;
5641
+ } catch (error2) {
5642
+ lastError = error2;
5643
+ if (error2 instanceof NetworkError && error2.statusCode) {
5644
+ if (error2.statusCode >= 400 && error2.statusCode < 500) {
5645
+ throw error2;
5513
5646
  }
5514
5647
  }
5515
5648
  if (attempt < maxRetries) {
@@ -5555,8 +5688,8 @@ var GitHubClient = class {
5555
5688
  * @param ref Git 引用(分支、标签或提交 SHA)
5556
5689
  * @returns 目录内容数组
5557
5690
  */
5558
- async getContents(owner, repo, path10 = "", ref) {
5559
- let url = `/repos/${owner}/${repo}/contents/${path10}`;
5691
+ async getContents(owner, repo, path11 = "", ref) {
5692
+ let url = `/repos/${owner}/${repo}/contents/${path11}`;
5560
5693
  if (ref) {
5561
5694
  url += `?ref=${encodeURIComponent(ref)}`;
5562
5695
  }
@@ -5569,11 +5702,11 @@ var GitHubClient = class {
5569
5702
  3,
5570
5703
  1e3
5571
5704
  );
5572
- } catch (error) {
5573
- if (error instanceof NetworkError) {
5574
- logger.error(`Failed to fetch contents from ${url}: ${error.message}`);
5705
+ } catch (error2) {
5706
+ if (error2 instanceof NetworkError) {
5707
+ logger.error(`Failed to fetch contents from ${url}: ${error2.message}`);
5575
5708
  }
5576
- throw error;
5709
+ throw error2;
5577
5710
  }
5578
5711
  }
5579
5712
  /**
@@ -5584,8 +5717,8 @@ var GitHubClient = class {
5584
5717
  * @param ref Git 引用
5585
5718
  * @returns 文件内容(已解码)
5586
5719
  */
5587
- async getFileContent(owner, repo, path10, ref) {
5588
- let url = `/repos/${owner}/${repo}/contents/${path10}`;
5720
+ async getFileContent(owner, repo, path11, ref) {
5721
+ let url = `/repos/${owner}/${repo}/contents/${path11}`;
5589
5722
  if (ref) {
5590
5723
  url += `?ref=${encodeURIComponent(ref)}`;
5591
5724
  }
@@ -5605,13 +5738,13 @@ var GitHubClient = class {
5605
5738
  return content;
5606
5739
  }
5607
5740
  throw new Error(
5608
- `Unexpected response: content or encoding missing for ${path10}`
5741
+ `Unexpected response: content or encoding missing for ${path11}`
5609
5742
  );
5610
- } catch (error) {
5611
- if (error instanceof NetworkError) {
5612
- logger.error(`Failed to fetch file ${path10}: ${error.message}`);
5743
+ } catch (error2) {
5744
+ if (error2 instanceof NetworkError) {
5745
+ logger.error(`Failed to fetch file ${path11}: ${error2.message}`);
5613
5746
  }
5614
- throw error;
5747
+ throw error2;
5615
5748
  }
5616
5749
  }
5617
5750
  /**
@@ -5628,13 +5761,13 @@ var GitHubClient = class {
5628
5761
  responseType: "text"
5629
5762
  });
5630
5763
  return response.data;
5631
- } catch (error) {
5632
- if (error instanceof NetworkError) {
5764
+ } catch (error2) {
5765
+ if (error2 instanceof NetworkError) {
5633
5766
  logger.error(
5634
- `Failed to fetch file from ${downloadUrl}: ${error.message}`
5767
+ `Failed to fetch file from ${downloadUrl}: ${error2.message}`
5635
5768
  );
5636
5769
  }
5637
- throw error;
5770
+ throw error2;
5638
5771
  }
5639
5772
  }
5640
5773
  /**
@@ -5645,13 +5778,13 @@ var GitHubClient = class {
5645
5778
  * @param ref Git 引用
5646
5779
  * @returns 版本信息
5647
5780
  */
5648
- async getVersion(owner, repo, path10 = "version.json", ref) {
5649
- const content = await this.getFileContent(owner, repo, path10, ref);
5781
+ async getVersion(owner, repo, path11 = "version.json", ref) {
5782
+ const content = await this.getFileContent(owner, repo, path11, ref);
5650
5783
  try {
5651
5784
  return JSON.parse(content);
5652
- } catch (error) {
5785
+ } catch (error2) {
5653
5786
  throw new Error(
5654
- `Failed to parse version.json: ${error instanceof Error ? error.message : "Unknown error"}`
5787
+ `Failed to parse version.json: ${error2 instanceof Error ? error2.message : "Unknown error"}`
5655
5788
  );
5656
5789
  }
5657
5790
  }
@@ -5663,7 +5796,7 @@ var GitHubClient = class {
5663
5796
  * @param ref Git 引用
5664
5797
  * @returns 所有文件的数组
5665
5798
  */
5666
- async fetchDirectory(owner, repo, path10 = "", ref) {
5799
+ async fetchDirectory(owner, repo, path11 = "", ref) {
5667
5800
  const results = [];
5668
5801
  const fetchRecursive = async (currentPath) => {
5669
5802
  const contents = await this.getContents(owner, repo, currentPath, ref);
@@ -5675,7 +5808,7 @@ var GitHubClient = class {
5675
5808
  }
5676
5809
  }
5677
5810
  };
5678
- await fetchRecursive(path10);
5811
+ await fetchRecursive(path11);
5679
5812
  return results;
5680
5813
  }
5681
5814
  /**
@@ -5688,11 +5821,11 @@ var GitHubClient = class {
5688
5821
  try {
5689
5822
  await this.getContents(owner, repo, "");
5690
5823
  return true;
5691
- } catch (error) {
5692
- if (error instanceof NetworkError && error.statusCode === 404) {
5824
+ } catch (error2) {
5825
+ if (error2 instanceof NetworkError && error2.statusCode === 404) {
5693
5826
  return false;
5694
5827
  }
5695
- throw error;
5828
+ throw error2;
5696
5829
  }
5697
5830
  }
5698
5831
  /**
@@ -5703,15 +5836,15 @@ var GitHubClient = class {
5703
5836
  * @param ref Git 引用
5704
5837
  * @returns 如果路径存在返回 true
5705
5838
  */
5706
- async pathExists(owner, repo, path10, ref) {
5839
+ async pathExists(owner, repo, path11, ref) {
5707
5840
  try {
5708
- await this.getContents(owner, repo, path10, ref);
5841
+ await this.getContents(owner, repo, path11, ref);
5709
5842
  return true;
5710
- } catch (error) {
5711
- if (error instanceof NetworkError && error.statusCode === 404) {
5843
+ } catch (error2) {
5844
+ if (error2 instanceof NetworkError && error2.statusCode === 404) {
5712
5845
  return false;
5713
5846
  }
5714
- throw error;
5847
+ throw error2;
5715
5848
  }
5716
5849
  }
5717
5850
  };
@@ -5827,9 +5960,9 @@ var TemplateManager = class {
5827
5960
  if (this.verbose) {
5828
5961
  logger.debug(`Downloaded: ${relativePath}`);
5829
5962
  }
5830
- } catch (error) {
5963
+ } catch (error2) {
5831
5964
  logger.warn(
5832
- `Failed to download ${file.path}: ${error instanceof Error ? error.message : "Unknown error"}`
5965
+ `Failed to download ${file.path}: ${error2 instanceof Error ? error2.message : "Unknown error"}`
5833
5966
  );
5834
5967
  }
5835
5968
  }
@@ -5847,10 +5980,10 @@ var TemplateManager = class {
5847
5980
  const versionPath = this.getVersionCachePath();
5848
5981
  await ensureFileDir(versionPath);
5849
5982
  await writeFile(versionPath, JSON.stringify(versionInfo, null, 2));
5850
- } catch (error) {
5983
+ } catch (error2) {
5851
5984
  if (this.verbose) {
5852
5985
  logger.debug(
5853
- `Failed to cache version info: ${error instanceof Error ? error.message : "Unknown error"}`
5986
+ `Failed to cache version info: ${error2 instanceof Error ? error2.message : "Unknown error"}`
5854
5987
  );
5855
5988
  }
5856
5989
  }
@@ -6045,9 +6178,9 @@ var DiffManager = class {
6045
6178
  const content = await readFile(metadataPath);
6046
6179
  const metadata = JSON.parse(content);
6047
6180
  return metadata;
6048
- } catch (error) {
6181
+ } catch (error2) {
6049
6182
  throw new Error(
6050
- `\u5143\u6570\u636E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`
6183
+ `\u5143\u6570\u636E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${error2 instanceof Error ? error2.message : String(error2)}`
6051
6184
  );
6052
6185
  }
6053
6186
  }
@@ -6462,9 +6595,9 @@ var UpdateCommand = class _UpdateCommand {
6462
6595
  console.error(`\u66F4\u65B0\u5931\u8D25: ${result.error}`);
6463
6596
  return 1;
6464
6597
  }
6465
- } catch (error) {
6598
+ } catch (error2) {
6466
6599
  console.error(
6467
- `\u66F4\u65B0\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF: ${error instanceof Error ? error.message : String(error)}`
6600
+ `\u66F4\u65B0\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF: ${error2 instanceof Error ? error2.message : String(error2)}`
6468
6601
  );
6469
6602
  return 1;
6470
6603
  }
@@ -6492,9 +6625,9 @@ var UpdateCommand = class _UpdateCommand {
6492
6625
  remoteVersion: remoteMeta.version,
6493
6626
  changelog: remoteMeta.changelog
6494
6627
  };
6495
- } catch (error) {
6628
+ } catch (error2) {
6496
6629
  if (this.verbose) {
6497
- logger.debug(`\u68C0\u67E5\u66F4\u65B0\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
6630
+ logger.debug(`\u68C0\u67E5\u66F4\u65B0\u5931\u8D25: ${error2 instanceof Error ? error2.message : String(error2)}`);
6498
6631
  }
6499
6632
  return {
6500
6633
  hasUpdate: false,
@@ -6753,8 +6886,8 @@ ${WARN_CONFLICT_DETECTED}`);
6753
6886
  lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
6754
6887
  });
6755
6888
  result.success = true;
6756
- } catch (error) {
6757
- result.error = error instanceof Error ? error.message : String(error);
6889
+ } catch (error2) {
6890
+ result.error = error2 instanceof Error ? error2.message : String(error2);
6758
6891
  }
6759
6892
  return result;
6760
6893
  }
@@ -6804,20 +6937,3178 @@ ${WARN_CONFLICT_DETECTED}`);
6804
6937
  }
6805
6938
  };
6806
6939
 
6807
- // src/commands/index.ts
6808
- async function handleInit() {
6809
- console.log("init \u547D\u4EE4\u5C1A\u672A\u5B9E\u73B0");
6810
- process.exit(0);
6940
+ // src/commands/init.ts
6941
+ init_esm_shims();
6942
+ import path10 from "path";
6943
+ import inquirer from "inquirer";
6944
+
6945
+ // src/utils/spinner.ts
6946
+ init_esm_shims();
6947
+
6948
+ // node_modules/ora/index.js
6949
+ init_esm_shims();
6950
+ import process8 from "process";
6951
+ import { stripVTControlCharacters } from "util";
6952
+
6953
+ // node_modules/cli-cursor/index.js
6954
+ init_esm_shims();
6955
+ import process5 from "process";
6956
+
6957
+ // node_modules/restore-cursor/index.js
6958
+ init_esm_shims();
6959
+ import process4 from "process";
6960
+
6961
+ // node_modules/onetime/index.js
6962
+ init_esm_shims();
6963
+
6964
+ // node_modules/mimic-function/index.js
6965
+ init_esm_shims();
6966
+ var copyProperty = (to, from, property, ignoreNonConfigurable) => {
6967
+ if (property === "length" || property === "prototype") {
6968
+ return;
6969
+ }
6970
+ if (property === "arguments" || property === "caller") {
6971
+ return;
6972
+ }
6973
+ const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
6974
+ const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
6975
+ if (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
6976
+ return;
6977
+ }
6978
+ Object.defineProperty(to, property, fromDescriptor);
6979
+ };
6980
+ var canCopyProperty = function(toDescriptor, fromDescriptor) {
6981
+ return toDescriptor === void 0 || toDescriptor.configurable || toDescriptor.writable === fromDescriptor.writable && toDescriptor.enumerable === fromDescriptor.enumerable && toDescriptor.configurable === fromDescriptor.configurable && (toDescriptor.writable || toDescriptor.value === fromDescriptor.value);
6982
+ };
6983
+ var changePrototype = (to, from) => {
6984
+ const fromPrototype = Object.getPrototypeOf(from);
6985
+ if (fromPrototype === Object.getPrototypeOf(to)) {
6986
+ return;
6987
+ }
6988
+ Object.setPrototypeOf(to, fromPrototype);
6989
+ };
6990
+ var wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/
6991
+ ${fromBody}`;
6992
+ var toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, "toString");
6993
+ var toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, "name");
6994
+ var changeToString = (to, from, name) => {
6995
+ const withName = name === "" ? "" : `with ${name.trim()}() `;
6996
+ const newToString = wrappedToString.bind(null, withName, from.toString());
6997
+ Object.defineProperty(newToString, "name", toStringName);
6998
+ const { writable, enumerable, configurable } = toStringDescriptor;
6999
+ Object.defineProperty(to, "toString", { value: newToString, writable, enumerable, configurable });
7000
+ };
7001
+ function mimicFunction(to, from, { ignoreNonConfigurable = false } = {}) {
7002
+ const { name } = to;
7003
+ for (const property of Reflect.ownKeys(from)) {
7004
+ copyProperty(to, from, property, ignoreNonConfigurable);
7005
+ }
7006
+ changePrototype(to, from);
7007
+ changeToString(to, from, name);
7008
+ return to;
6811
7009
  }
6812
- async function handleDoctor(options2) {
6813
- const doctor = new DoctorCommand({
6814
- verbose: options2.verbose
6815
- });
6816
- const exitCode = await doctor.execute();
6817
- process.exit(exitCode);
7010
+
7011
+ // node_modules/onetime/index.js
7012
+ var calledFunctions = /* @__PURE__ */ new WeakMap();
7013
+ var onetime = (function_, options2 = {}) => {
7014
+ if (typeof function_ !== "function") {
7015
+ throw new TypeError("Expected a function");
7016
+ }
7017
+ let returnValue;
7018
+ let callCount = 0;
7019
+ const functionName = function_.displayName || function_.name || "<anonymous>";
7020
+ const onetime2 = function(...arguments_) {
7021
+ calledFunctions.set(onetime2, ++callCount);
7022
+ if (callCount === 1) {
7023
+ returnValue = function_.apply(this, arguments_);
7024
+ function_ = void 0;
7025
+ } else if (options2.throw === true) {
7026
+ throw new Error(`Function \`${functionName}\` can only be called once`);
7027
+ }
7028
+ return returnValue;
7029
+ };
7030
+ mimicFunction(onetime2, function_);
7031
+ calledFunctions.set(onetime2, callCount);
7032
+ return onetime2;
7033
+ };
7034
+ onetime.callCount = (function_) => {
7035
+ if (!calledFunctions.has(function_)) {
7036
+ throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
7037
+ }
7038
+ return calledFunctions.get(function_);
7039
+ };
7040
+ var onetime_default = onetime;
7041
+
7042
+ // node_modules/signal-exit/dist/mjs/index.js
7043
+ init_esm_shims();
7044
+
7045
+ // node_modules/signal-exit/dist/mjs/signals.js
7046
+ init_esm_shims();
7047
+ var signals = [];
7048
+ signals.push("SIGHUP", "SIGINT", "SIGTERM");
7049
+ if (process.platform !== "win32") {
7050
+ signals.push(
7051
+ "SIGALRM",
7052
+ "SIGABRT",
7053
+ "SIGVTALRM",
7054
+ "SIGXCPU",
7055
+ "SIGXFSZ",
7056
+ "SIGUSR2",
7057
+ "SIGTRAP",
7058
+ "SIGSYS",
7059
+ "SIGQUIT",
7060
+ "SIGIOT"
7061
+ // should detect profiler and enable/disable accordingly.
7062
+ // see #21
7063
+ // 'SIGPROF'
7064
+ );
6818
7065
  }
6819
- function registerCommands(program) {
6820
- program.command("init").description(HELP_INIT).action(handleInit);
7066
+ if (process.platform === "linux") {
7067
+ signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
7068
+ }
7069
+
7070
+ // node_modules/signal-exit/dist/mjs/index.js
7071
+ var processOk = (process9) => !!process9 && typeof process9 === "object" && typeof process9.removeListener === "function" && typeof process9.emit === "function" && typeof process9.reallyExit === "function" && typeof process9.listeners === "function" && typeof process9.kill === "function" && typeof process9.pid === "number" && typeof process9.on === "function";
7072
+ var kExitEmitter = /* @__PURE__ */ Symbol.for("signal-exit emitter");
7073
+ var global = globalThis;
7074
+ var ObjectDefineProperty = Object.defineProperty.bind(Object);
7075
+ var Emitter = class {
7076
+ emitted = {
7077
+ afterExit: false,
7078
+ exit: false
7079
+ };
7080
+ listeners = {
7081
+ afterExit: [],
7082
+ exit: []
7083
+ };
7084
+ count = 0;
7085
+ id = Math.random();
7086
+ constructor() {
7087
+ if (global[kExitEmitter]) {
7088
+ return global[kExitEmitter];
7089
+ }
7090
+ ObjectDefineProperty(global, kExitEmitter, {
7091
+ value: this,
7092
+ writable: false,
7093
+ enumerable: false,
7094
+ configurable: false
7095
+ });
7096
+ }
7097
+ on(ev, fn) {
7098
+ this.listeners[ev].push(fn);
7099
+ }
7100
+ removeListener(ev, fn) {
7101
+ const list = this.listeners[ev];
7102
+ const i = list.indexOf(fn);
7103
+ if (i === -1) {
7104
+ return;
7105
+ }
7106
+ if (i === 0 && list.length === 1) {
7107
+ list.length = 0;
7108
+ } else {
7109
+ list.splice(i, 1);
7110
+ }
7111
+ }
7112
+ emit(ev, code, signal) {
7113
+ if (this.emitted[ev]) {
7114
+ return false;
7115
+ }
7116
+ this.emitted[ev] = true;
7117
+ let ret = false;
7118
+ for (const fn of this.listeners[ev]) {
7119
+ ret = fn(code, signal) === true || ret;
7120
+ }
7121
+ if (ev === "exit") {
7122
+ ret = this.emit("afterExit", code, signal) || ret;
7123
+ }
7124
+ return ret;
7125
+ }
7126
+ };
7127
+ var SignalExitBase = class {
7128
+ };
7129
+ var signalExitWrap = (handler) => {
7130
+ return {
7131
+ onExit(cb, opts) {
7132
+ return handler.onExit(cb, opts);
7133
+ },
7134
+ load() {
7135
+ return handler.load();
7136
+ },
7137
+ unload() {
7138
+ return handler.unload();
7139
+ }
7140
+ };
7141
+ };
7142
+ var SignalExitFallback = class extends SignalExitBase {
7143
+ onExit() {
7144
+ return () => {
7145
+ };
7146
+ }
7147
+ load() {
7148
+ }
7149
+ unload() {
7150
+ }
7151
+ };
7152
+ var SignalExit = class extends SignalExitBase {
7153
+ // "SIGHUP" throws an `ENOSYS` error on Windows,
7154
+ // so use a supported signal instead
7155
+ /* c8 ignore start */
7156
+ #hupSig = process3.platform === "win32" ? "SIGINT" : "SIGHUP";
7157
+ /* c8 ignore stop */
7158
+ #emitter = new Emitter();
7159
+ #process;
7160
+ #originalProcessEmit;
7161
+ #originalProcessReallyExit;
7162
+ #sigListeners = {};
7163
+ #loaded = false;
7164
+ constructor(process9) {
7165
+ super();
7166
+ this.#process = process9;
7167
+ this.#sigListeners = {};
7168
+ for (const sig of signals) {
7169
+ this.#sigListeners[sig] = () => {
7170
+ const listeners = this.#process.listeners(sig);
7171
+ let { count } = this.#emitter;
7172
+ const p = process9;
7173
+ if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
7174
+ count += p.__signal_exit_emitter__.count;
7175
+ }
7176
+ if (listeners.length === count) {
7177
+ this.unload();
7178
+ const ret = this.#emitter.emit("exit", null, sig);
7179
+ const s = sig === "SIGHUP" ? this.#hupSig : sig;
7180
+ if (!ret)
7181
+ process9.kill(process9.pid, s);
7182
+ }
7183
+ };
7184
+ }
7185
+ this.#originalProcessReallyExit = process9.reallyExit;
7186
+ this.#originalProcessEmit = process9.emit;
7187
+ }
7188
+ onExit(cb, opts) {
7189
+ if (!processOk(this.#process)) {
7190
+ return () => {
7191
+ };
7192
+ }
7193
+ if (this.#loaded === false) {
7194
+ this.load();
7195
+ }
7196
+ const ev = opts?.alwaysLast ? "afterExit" : "exit";
7197
+ this.#emitter.on(ev, cb);
7198
+ return () => {
7199
+ this.#emitter.removeListener(ev, cb);
7200
+ if (this.#emitter.listeners["exit"].length === 0 && this.#emitter.listeners["afterExit"].length === 0) {
7201
+ this.unload();
7202
+ }
7203
+ };
7204
+ }
7205
+ load() {
7206
+ if (this.#loaded) {
7207
+ return;
7208
+ }
7209
+ this.#loaded = true;
7210
+ this.#emitter.count += 1;
7211
+ for (const sig of signals) {
7212
+ try {
7213
+ const fn = this.#sigListeners[sig];
7214
+ if (fn)
7215
+ this.#process.on(sig, fn);
7216
+ } catch (_) {
7217
+ }
7218
+ }
7219
+ this.#process.emit = (ev, ...a) => {
7220
+ return this.#processEmit(ev, ...a);
7221
+ };
7222
+ this.#process.reallyExit = (code) => {
7223
+ return this.#processReallyExit(code);
7224
+ };
7225
+ }
7226
+ unload() {
7227
+ if (!this.#loaded) {
7228
+ return;
7229
+ }
7230
+ this.#loaded = false;
7231
+ signals.forEach((sig) => {
7232
+ const listener = this.#sigListeners[sig];
7233
+ if (!listener) {
7234
+ throw new Error("Listener not defined for signal: " + sig);
7235
+ }
7236
+ try {
7237
+ this.#process.removeListener(sig, listener);
7238
+ } catch (_) {
7239
+ }
7240
+ });
7241
+ this.#process.emit = this.#originalProcessEmit;
7242
+ this.#process.reallyExit = this.#originalProcessReallyExit;
7243
+ this.#emitter.count -= 1;
7244
+ }
7245
+ #processReallyExit(code) {
7246
+ if (!processOk(this.#process)) {
7247
+ return 0;
7248
+ }
7249
+ this.#process.exitCode = code || 0;
7250
+ this.#emitter.emit("exit", this.#process.exitCode, null);
7251
+ return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
7252
+ }
7253
+ #processEmit(ev, ...args) {
7254
+ const og = this.#originalProcessEmit;
7255
+ if (ev === "exit" && processOk(this.#process)) {
7256
+ if (typeof args[0] === "number") {
7257
+ this.#process.exitCode = args[0];
7258
+ }
7259
+ const ret = og.call(this.#process, ev, ...args);
7260
+ this.#emitter.emit("exit", this.#process.exitCode, null);
7261
+ return ret;
7262
+ } else {
7263
+ return og.call(this.#process, ev, ...args);
7264
+ }
7265
+ }
7266
+ };
7267
+ var process3 = globalThis.process;
7268
+ var {
7269
+ /**
7270
+ * Called when the process is exiting, whether via signal, explicit
7271
+ * exit, or running out of stuff to do.
7272
+ *
7273
+ * If the global process object is not suitable for instrumentation,
7274
+ * then this will be a no-op.
7275
+ *
7276
+ * Returns a function that may be used to unload signal-exit.
7277
+ */
7278
+ onExit,
7279
+ /**
7280
+ * Load the listeners. Likely you never need to call this, unless
7281
+ * doing a rather deep integration with signal-exit functionality.
7282
+ * Mostly exposed for the benefit of testing.
7283
+ *
7284
+ * @internal
7285
+ */
7286
+ load,
7287
+ /**
7288
+ * Unload the listeners. Likely you never need to call this, unless
7289
+ * doing a rather deep integration with signal-exit functionality.
7290
+ * Mostly exposed for the benefit of testing.
7291
+ *
7292
+ * @internal
7293
+ */
7294
+ unload
7295
+ } = signalExitWrap(processOk(process3) ? new SignalExit(process3) : new SignalExitFallback());
7296
+
7297
+ // node_modules/restore-cursor/index.js
7298
+ var terminal = process4.stderr.isTTY ? process4.stderr : process4.stdout.isTTY ? process4.stdout : void 0;
7299
+ var restoreCursor = terminal ? onetime_default(() => {
7300
+ onExit(() => {
7301
+ terminal.write("\x1B[?25h");
7302
+ }, { alwaysLast: true });
7303
+ }) : () => {
7304
+ };
7305
+ var restore_cursor_default = restoreCursor;
7306
+
7307
+ // node_modules/cli-cursor/index.js
7308
+ var isHidden = false;
7309
+ var cliCursor = {};
7310
+ cliCursor.show = (writableStream = process5.stderr) => {
7311
+ if (!writableStream.isTTY) {
7312
+ return;
7313
+ }
7314
+ isHidden = false;
7315
+ writableStream.write("\x1B[?25h");
7316
+ };
7317
+ cliCursor.hide = (writableStream = process5.stderr) => {
7318
+ if (!writableStream.isTTY) {
7319
+ return;
7320
+ }
7321
+ restore_cursor_default();
7322
+ isHidden = true;
7323
+ writableStream.write("\x1B[?25l");
7324
+ };
7325
+ cliCursor.toggle = (force, writableStream) => {
7326
+ if (force !== void 0) {
7327
+ isHidden = force;
7328
+ }
7329
+ if (isHidden) {
7330
+ cliCursor.show(writableStream);
7331
+ } else {
7332
+ cliCursor.hide(writableStream);
7333
+ }
7334
+ };
7335
+ var cli_cursor_default = cliCursor;
7336
+
7337
+ // node_modules/cli-spinners/index.js
7338
+ init_esm_shims();
7339
+
7340
+ // node_modules/cli-spinners/spinners.json
7341
+ var spinners_default = {
7342
+ dots: {
7343
+ interval: 80,
7344
+ frames: [
7345
+ "\u280B",
7346
+ "\u2819",
7347
+ "\u2839",
7348
+ "\u2838",
7349
+ "\u283C",
7350
+ "\u2834",
7351
+ "\u2826",
7352
+ "\u2827",
7353
+ "\u2807",
7354
+ "\u280F"
7355
+ ]
7356
+ },
7357
+ dots2: {
7358
+ interval: 80,
7359
+ frames: [
7360
+ "\u28FE",
7361
+ "\u28FD",
7362
+ "\u28FB",
7363
+ "\u28BF",
7364
+ "\u287F",
7365
+ "\u28DF",
7366
+ "\u28EF",
7367
+ "\u28F7"
7368
+ ]
7369
+ },
7370
+ dots3: {
7371
+ interval: 80,
7372
+ frames: [
7373
+ "\u280B",
7374
+ "\u2819",
7375
+ "\u281A",
7376
+ "\u281E",
7377
+ "\u2816",
7378
+ "\u2826",
7379
+ "\u2834",
7380
+ "\u2832",
7381
+ "\u2833",
7382
+ "\u2813"
7383
+ ]
7384
+ },
7385
+ dots4: {
7386
+ interval: 80,
7387
+ frames: [
7388
+ "\u2804",
7389
+ "\u2806",
7390
+ "\u2807",
7391
+ "\u280B",
7392
+ "\u2819",
7393
+ "\u2838",
7394
+ "\u2830",
7395
+ "\u2820",
7396
+ "\u2830",
7397
+ "\u2838",
7398
+ "\u2819",
7399
+ "\u280B",
7400
+ "\u2807",
7401
+ "\u2806"
7402
+ ]
7403
+ },
7404
+ dots5: {
7405
+ interval: 80,
7406
+ frames: [
7407
+ "\u280B",
7408
+ "\u2819",
7409
+ "\u281A",
7410
+ "\u2812",
7411
+ "\u2802",
7412
+ "\u2802",
7413
+ "\u2812",
7414
+ "\u2832",
7415
+ "\u2834",
7416
+ "\u2826",
7417
+ "\u2816",
7418
+ "\u2812",
7419
+ "\u2810",
7420
+ "\u2810",
7421
+ "\u2812",
7422
+ "\u2813",
7423
+ "\u280B"
7424
+ ]
7425
+ },
7426
+ dots6: {
7427
+ interval: 80,
7428
+ frames: [
7429
+ "\u2801",
7430
+ "\u2809",
7431
+ "\u2819",
7432
+ "\u281A",
7433
+ "\u2812",
7434
+ "\u2802",
7435
+ "\u2802",
7436
+ "\u2812",
7437
+ "\u2832",
7438
+ "\u2834",
7439
+ "\u2824",
7440
+ "\u2804",
7441
+ "\u2804",
7442
+ "\u2824",
7443
+ "\u2834",
7444
+ "\u2832",
7445
+ "\u2812",
7446
+ "\u2802",
7447
+ "\u2802",
7448
+ "\u2812",
7449
+ "\u281A",
7450
+ "\u2819",
7451
+ "\u2809",
7452
+ "\u2801"
7453
+ ]
7454
+ },
7455
+ dots7: {
7456
+ interval: 80,
7457
+ frames: [
7458
+ "\u2808",
7459
+ "\u2809",
7460
+ "\u280B",
7461
+ "\u2813",
7462
+ "\u2812",
7463
+ "\u2810",
7464
+ "\u2810",
7465
+ "\u2812",
7466
+ "\u2816",
7467
+ "\u2826",
7468
+ "\u2824",
7469
+ "\u2820",
7470
+ "\u2820",
7471
+ "\u2824",
7472
+ "\u2826",
7473
+ "\u2816",
7474
+ "\u2812",
7475
+ "\u2810",
7476
+ "\u2810",
7477
+ "\u2812",
7478
+ "\u2813",
7479
+ "\u280B",
7480
+ "\u2809",
7481
+ "\u2808"
7482
+ ]
7483
+ },
7484
+ dots8: {
7485
+ interval: 80,
7486
+ frames: [
7487
+ "\u2801",
7488
+ "\u2801",
7489
+ "\u2809",
7490
+ "\u2819",
7491
+ "\u281A",
7492
+ "\u2812",
7493
+ "\u2802",
7494
+ "\u2802",
7495
+ "\u2812",
7496
+ "\u2832",
7497
+ "\u2834",
7498
+ "\u2824",
7499
+ "\u2804",
7500
+ "\u2804",
7501
+ "\u2824",
7502
+ "\u2820",
7503
+ "\u2820",
7504
+ "\u2824",
7505
+ "\u2826",
7506
+ "\u2816",
7507
+ "\u2812",
7508
+ "\u2810",
7509
+ "\u2810",
7510
+ "\u2812",
7511
+ "\u2813",
7512
+ "\u280B",
7513
+ "\u2809",
7514
+ "\u2808",
7515
+ "\u2808"
7516
+ ]
7517
+ },
7518
+ dots9: {
7519
+ interval: 80,
7520
+ frames: [
7521
+ "\u28B9",
7522
+ "\u28BA",
7523
+ "\u28BC",
7524
+ "\u28F8",
7525
+ "\u28C7",
7526
+ "\u2867",
7527
+ "\u2857",
7528
+ "\u284F"
7529
+ ]
7530
+ },
7531
+ dots10: {
7532
+ interval: 80,
7533
+ frames: [
7534
+ "\u2884",
7535
+ "\u2882",
7536
+ "\u2881",
7537
+ "\u2841",
7538
+ "\u2848",
7539
+ "\u2850",
7540
+ "\u2860"
7541
+ ]
7542
+ },
7543
+ dots11: {
7544
+ interval: 100,
7545
+ frames: [
7546
+ "\u2801",
7547
+ "\u2802",
7548
+ "\u2804",
7549
+ "\u2840",
7550
+ "\u2880",
7551
+ "\u2820",
7552
+ "\u2810",
7553
+ "\u2808"
7554
+ ]
7555
+ },
7556
+ dots12: {
7557
+ interval: 80,
7558
+ frames: [
7559
+ "\u2880\u2800",
7560
+ "\u2840\u2800",
7561
+ "\u2804\u2800",
7562
+ "\u2882\u2800",
7563
+ "\u2842\u2800",
7564
+ "\u2805\u2800",
7565
+ "\u2883\u2800",
7566
+ "\u2843\u2800",
7567
+ "\u280D\u2800",
7568
+ "\u288B\u2800",
7569
+ "\u284B\u2800",
7570
+ "\u280D\u2801",
7571
+ "\u288B\u2801",
7572
+ "\u284B\u2801",
7573
+ "\u280D\u2809",
7574
+ "\u280B\u2809",
7575
+ "\u280B\u2809",
7576
+ "\u2809\u2819",
7577
+ "\u2809\u2819",
7578
+ "\u2809\u2829",
7579
+ "\u2808\u2899",
7580
+ "\u2808\u2859",
7581
+ "\u2888\u2829",
7582
+ "\u2840\u2899",
7583
+ "\u2804\u2859",
7584
+ "\u2882\u2829",
7585
+ "\u2842\u2898",
7586
+ "\u2805\u2858",
7587
+ "\u2883\u2828",
7588
+ "\u2843\u2890",
7589
+ "\u280D\u2850",
7590
+ "\u288B\u2820",
7591
+ "\u284B\u2880",
7592
+ "\u280D\u2841",
7593
+ "\u288B\u2801",
7594
+ "\u284B\u2801",
7595
+ "\u280D\u2809",
7596
+ "\u280B\u2809",
7597
+ "\u280B\u2809",
7598
+ "\u2809\u2819",
7599
+ "\u2809\u2819",
7600
+ "\u2809\u2829",
7601
+ "\u2808\u2899",
7602
+ "\u2808\u2859",
7603
+ "\u2808\u2829",
7604
+ "\u2800\u2899",
7605
+ "\u2800\u2859",
7606
+ "\u2800\u2829",
7607
+ "\u2800\u2898",
7608
+ "\u2800\u2858",
7609
+ "\u2800\u2828",
7610
+ "\u2800\u2890",
7611
+ "\u2800\u2850",
7612
+ "\u2800\u2820",
7613
+ "\u2800\u2880",
7614
+ "\u2800\u2840"
7615
+ ]
7616
+ },
7617
+ dots13: {
7618
+ interval: 80,
7619
+ frames: [
7620
+ "\u28FC",
7621
+ "\u28F9",
7622
+ "\u28BB",
7623
+ "\u283F",
7624
+ "\u285F",
7625
+ "\u28CF",
7626
+ "\u28E7",
7627
+ "\u28F6"
7628
+ ]
7629
+ },
7630
+ dots14: {
7631
+ interval: 80,
7632
+ frames: [
7633
+ "\u2809\u2809",
7634
+ "\u2808\u2819",
7635
+ "\u2800\u2839",
7636
+ "\u2800\u28B8",
7637
+ "\u2800\u28F0",
7638
+ "\u2880\u28E0",
7639
+ "\u28C0\u28C0",
7640
+ "\u28C4\u2840",
7641
+ "\u28C6\u2800",
7642
+ "\u2847\u2800",
7643
+ "\u280F\u2800",
7644
+ "\u280B\u2801"
7645
+ ]
7646
+ },
7647
+ dots8Bit: {
7648
+ interval: 80,
7649
+ frames: [
7650
+ "\u2800",
7651
+ "\u2801",
7652
+ "\u2802",
7653
+ "\u2803",
7654
+ "\u2804",
7655
+ "\u2805",
7656
+ "\u2806",
7657
+ "\u2807",
7658
+ "\u2840",
7659
+ "\u2841",
7660
+ "\u2842",
7661
+ "\u2843",
7662
+ "\u2844",
7663
+ "\u2845",
7664
+ "\u2846",
7665
+ "\u2847",
7666
+ "\u2808",
7667
+ "\u2809",
7668
+ "\u280A",
7669
+ "\u280B",
7670
+ "\u280C",
7671
+ "\u280D",
7672
+ "\u280E",
7673
+ "\u280F",
7674
+ "\u2848",
7675
+ "\u2849",
7676
+ "\u284A",
7677
+ "\u284B",
7678
+ "\u284C",
7679
+ "\u284D",
7680
+ "\u284E",
7681
+ "\u284F",
7682
+ "\u2810",
7683
+ "\u2811",
7684
+ "\u2812",
7685
+ "\u2813",
7686
+ "\u2814",
7687
+ "\u2815",
7688
+ "\u2816",
7689
+ "\u2817",
7690
+ "\u2850",
7691
+ "\u2851",
7692
+ "\u2852",
7693
+ "\u2853",
7694
+ "\u2854",
7695
+ "\u2855",
7696
+ "\u2856",
7697
+ "\u2857",
7698
+ "\u2818",
7699
+ "\u2819",
7700
+ "\u281A",
7701
+ "\u281B",
7702
+ "\u281C",
7703
+ "\u281D",
7704
+ "\u281E",
7705
+ "\u281F",
7706
+ "\u2858",
7707
+ "\u2859",
7708
+ "\u285A",
7709
+ "\u285B",
7710
+ "\u285C",
7711
+ "\u285D",
7712
+ "\u285E",
7713
+ "\u285F",
7714
+ "\u2820",
7715
+ "\u2821",
7716
+ "\u2822",
7717
+ "\u2823",
7718
+ "\u2824",
7719
+ "\u2825",
7720
+ "\u2826",
7721
+ "\u2827",
7722
+ "\u2860",
7723
+ "\u2861",
7724
+ "\u2862",
7725
+ "\u2863",
7726
+ "\u2864",
7727
+ "\u2865",
7728
+ "\u2866",
7729
+ "\u2867",
7730
+ "\u2828",
7731
+ "\u2829",
7732
+ "\u282A",
7733
+ "\u282B",
7734
+ "\u282C",
7735
+ "\u282D",
7736
+ "\u282E",
7737
+ "\u282F",
7738
+ "\u2868",
7739
+ "\u2869",
7740
+ "\u286A",
7741
+ "\u286B",
7742
+ "\u286C",
7743
+ "\u286D",
7744
+ "\u286E",
7745
+ "\u286F",
7746
+ "\u2830",
7747
+ "\u2831",
7748
+ "\u2832",
7749
+ "\u2833",
7750
+ "\u2834",
7751
+ "\u2835",
7752
+ "\u2836",
7753
+ "\u2837",
7754
+ "\u2870",
7755
+ "\u2871",
7756
+ "\u2872",
7757
+ "\u2873",
7758
+ "\u2874",
7759
+ "\u2875",
7760
+ "\u2876",
7761
+ "\u2877",
7762
+ "\u2838",
7763
+ "\u2839",
7764
+ "\u283A",
7765
+ "\u283B",
7766
+ "\u283C",
7767
+ "\u283D",
7768
+ "\u283E",
7769
+ "\u283F",
7770
+ "\u2878",
7771
+ "\u2879",
7772
+ "\u287A",
7773
+ "\u287B",
7774
+ "\u287C",
7775
+ "\u287D",
7776
+ "\u287E",
7777
+ "\u287F",
7778
+ "\u2880",
7779
+ "\u2881",
7780
+ "\u2882",
7781
+ "\u2883",
7782
+ "\u2884",
7783
+ "\u2885",
7784
+ "\u2886",
7785
+ "\u2887",
7786
+ "\u28C0",
7787
+ "\u28C1",
7788
+ "\u28C2",
7789
+ "\u28C3",
7790
+ "\u28C4",
7791
+ "\u28C5",
7792
+ "\u28C6",
7793
+ "\u28C7",
7794
+ "\u2888",
7795
+ "\u2889",
7796
+ "\u288A",
7797
+ "\u288B",
7798
+ "\u288C",
7799
+ "\u288D",
7800
+ "\u288E",
7801
+ "\u288F",
7802
+ "\u28C8",
7803
+ "\u28C9",
7804
+ "\u28CA",
7805
+ "\u28CB",
7806
+ "\u28CC",
7807
+ "\u28CD",
7808
+ "\u28CE",
7809
+ "\u28CF",
7810
+ "\u2890",
7811
+ "\u2891",
7812
+ "\u2892",
7813
+ "\u2893",
7814
+ "\u2894",
7815
+ "\u2895",
7816
+ "\u2896",
7817
+ "\u2897",
7818
+ "\u28D0",
7819
+ "\u28D1",
7820
+ "\u28D2",
7821
+ "\u28D3",
7822
+ "\u28D4",
7823
+ "\u28D5",
7824
+ "\u28D6",
7825
+ "\u28D7",
7826
+ "\u2898",
7827
+ "\u2899",
7828
+ "\u289A",
7829
+ "\u289B",
7830
+ "\u289C",
7831
+ "\u289D",
7832
+ "\u289E",
7833
+ "\u289F",
7834
+ "\u28D8",
7835
+ "\u28D9",
7836
+ "\u28DA",
7837
+ "\u28DB",
7838
+ "\u28DC",
7839
+ "\u28DD",
7840
+ "\u28DE",
7841
+ "\u28DF",
7842
+ "\u28A0",
7843
+ "\u28A1",
7844
+ "\u28A2",
7845
+ "\u28A3",
7846
+ "\u28A4",
7847
+ "\u28A5",
7848
+ "\u28A6",
7849
+ "\u28A7",
7850
+ "\u28E0",
7851
+ "\u28E1",
7852
+ "\u28E2",
7853
+ "\u28E3",
7854
+ "\u28E4",
7855
+ "\u28E5",
7856
+ "\u28E6",
7857
+ "\u28E7",
7858
+ "\u28A8",
7859
+ "\u28A9",
7860
+ "\u28AA",
7861
+ "\u28AB",
7862
+ "\u28AC",
7863
+ "\u28AD",
7864
+ "\u28AE",
7865
+ "\u28AF",
7866
+ "\u28E8",
7867
+ "\u28E9",
7868
+ "\u28EA",
7869
+ "\u28EB",
7870
+ "\u28EC",
7871
+ "\u28ED",
7872
+ "\u28EE",
7873
+ "\u28EF",
7874
+ "\u28B0",
7875
+ "\u28B1",
7876
+ "\u28B2",
7877
+ "\u28B3",
7878
+ "\u28B4",
7879
+ "\u28B5",
7880
+ "\u28B6",
7881
+ "\u28B7",
7882
+ "\u28F0",
7883
+ "\u28F1",
7884
+ "\u28F2",
7885
+ "\u28F3",
7886
+ "\u28F4",
7887
+ "\u28F5",
7888
+ "\u28F6",
7889
+ "\u28F7",
7890
+ "\u28B8",
7891
+ "\u28B9",
7892
+ "\u28BA",
7893
+ "\u28BB",
7894
+ "\u28BC",
7895
+ "\u28BD",
7896
+ "\u28BE",
7897
+ "\u28BF",
7898
+ "\u28F8",
7899
+ "\u28F9",
7900
+ "\u28FA",
7901
+ "\u28FB",
7902
+ "\u28FC",
7903
+ "\u28FD",
7904
+ "\u28FE",
7905
+ "\u28FF"
7906
+ ]
7907
+ },
7908
+ dotsCircle: {
7909
+ interval: 80,
7910
+ frames: [
7911
+ "\u288E ",
7912
+ "\u280E\u2801",
7913
+ "\u280A\u2811",
7914
+ "\u2808\u2831",
7915
+ " \u2871",
7916
+ "\u2880\u2870",
7917
+ "\u2884\u2860",
7918
+ "\u2886\u2840"
7919
+ ]
7920
+ },
7921
+ sand: {
7922
+ interval: 80,
7923
+ frames: [
7924
+ "\u2801",
7925
+ "\u2802",
7926
+ "\u2804",
7927
+ "\u2840",
7928
+ "\u2848",
7929
+ "\u2850",
7930
+ "\u2860",
7931
+ "\u28C0",
7932
+ "\u28C1",
7933
+ "\u28C2",
7934
+ "\u28C4",
7935
+ "\u28CC",
7936
+ "\u28D4",
7937
+ "\u28E4",
7938
+ "\u28E5",
7939
+ "\u28E6",
7940
+ "\u28EE",
7941
+ "\u28F6",
7942
+ "\u28F7",
7943
+ "\u28FF",
7944
+ "\u287F",
7945
+ "\u283F",
7946
+ "\u289F",
7947
+ "\u281F",
7948
+ "\u285B",
7949
+ "\u281B",
7950
+ "\u282B",
7951
+ "\u288B",
7952
+ "\u280B",
7953
+ "\u280D",
7954
+ "\u2849",
7955
+ "\u2809",
7956
+ "\u2811",
7957
+ "\u2821",
7958
+ "\u2881"
7959
+ ]
7960
+ },
7961
+ line: {
7962
+ interval: 130,
7963
+ frames: [
7964
+ "-",
7965
+ "\\",
7966
+ "|",
7967
+ "/"
7968
+ ]
7969
+ },
7970
+ line2: {
7971
+ interval: 100,
7972
+ frames: [
7973
+ "\u2802",
7974
+ "-",
7975
+ "\u2013",
7976
+ "\u2014",
7977
+ "\u2013",
7978
+ "-"
7979
+ ]
7980
+ },
7981
+ rollingLine: {
7982
+ interval: 80,
7983
+ frames: [
7984
+ "/ ",
7985
+ " - ",
7986
+ " \\ ",
7987
+ " |",
7988
+ " |",
7989
+ " \\ ",
7990
+ " - ",
7991
+ "/ "
7992
+ ]
7993
+ },
7994
+ pipe: {
7995
+ interval: 100,
7996
+ frames: [
7997
+ "\u2524",
7998
+ "\u2518",
7999
+ "\u2534",
8000
+ "\u2514",
8001
+ "\u251C",
8002
+ "\u250C",
8003
+ "\u252C",
8004
+ "\u2510"
8005
+ ]
8006
+ },
8007
+ simpleDots: {
8008
+ interval: 400,
8009
+ frames: [
8010
+ ". ",
8011
+ ".. ",
8012
+ "...",
8013
+ " "
8014
+ ]
8015
+ },
8016
+ simpleDotsScrolling: {
8017
+ interval: 200,
8018
+ frames: [
8019
+ ". ",
8020
+ ".. ",
8021
+ "...",
8022
+ " ..",
8023
+ " .",
8024
+ " "
8025
+ ]
8026
+ },
8027
+ star: {
8028
+ interval: 70,
8029
+ frames: [
8030
+ "\u2736",
8031
+ "\u2738",
8032
+ "\u2739",
8033
+ "\u273A",
8034
+ "\u2739",
8035
+ "\u2737"
8036
+ ]
8037
+ },
8038
+ star2: {
8039
+ interval: 80,
8040
+ frames: [
8041
+ "+",
8042
+ "x",
8043
+ "*"
8044
+ ]
8045
+ },
8046
+ flip: {
8047
+ interval: 70,
8048
+ frames: [
8049
+ "_",
8050
+ "_",
8051
+ "_",
8052
+ "-",
8053
+ "`",
8054
+ "`",
8055
+ "'",
8056
+ "\xB4",
8057
+ "-",
8058
+ "_",
8059
+ "_",
8060
+ "_"
8061
+ ]
8062
+ },
8063
+ hamburger: {
8064
+ interval: 100,
8065
+ frames: [
8066
+ "\u2631",
8067
+ "\u2632",
8068
+ "\u2634"
8069
+ ]
8070
+ },
8071
+ growVertical: {
8072
+ interval: 120,
8073
+ frames: [
8074
+ "\u2581",
8075
+ "\u2583",
8076
+ "\u2584",
8077
+ "\u2585",
8078
+ "\u2586",
8079
+ "\u2587",
8080
+ "\u2586",
8081
+ "\u2585",
8082
+ "\u2584",
8083
+ "\u2583"
8084
+ ]
8085
+ },
8086
+ growHorizontal: {
8087
+ interval: 120,
8088
+ frames: [
8089
+ "\u258F",
8090
+ "\u258E",
8091
+ "\u258D",
8092
+ "\u258C",
8093
+ "\u258B",
8094
+ "\u258A",
8095
+ "\u2589",
8096
+ "\u258A",
8097
+ "\u258B",
8098
+ "\u258C",
8099
+ "\u258D",
8100
+ "\u258E"
8101
+ ]
8102
+ },
8103
+ balloon: {
8104
+ interval: 140,
8105
+ frames: [
8106
+ " ",
8107
+ ".",
8108
+ "o",
8109
+ "O",
8110
+ "@",
8111
+ "*",
8112
+ " "
8113
+ ]
8114
+ },
8115
+ balloon2: {
8116
+ interval: 120,
8117
+ frames: [
8118
+ ".",
8119
+ "o",
8120
+ "O",
8121
+ "\xB0",
8122
+ "O",
8123
+ "o",
8124
+ "."
8125
+ ]
8126
+ },
8127
+ noise: {
8128
+ interval: 100,
8129
+ frames: [
8130
+ "\u2593",
8131
+ "\u2592",
8132
+ "\u2591"
8133
+ ]
8134
+ },
8135
+ bounce: {
8136
+ interval: 120,
8137
+ frames: [
8138
+ "\u2801",
8139
+ "\u2802",
8140
+ "\u2804",
8141
+ "\u2802"
8142
+ ]
8143
+ },
8144
+ boxBounce: {
8145
+ interval: 120,
8146
+ frames: [
8147
+ "\u2596",
8148
+ "\u2598",
8149
+ "\u259D",
8150
+ "\u2597"
8151
+ ]
8152
+ },
8153
+ boxBounce2: {
8154
+ interval: 100,
8155
+ frames: [
8156
+ "\u258C",
8157
+ "\u2580",
8158
+ "\u2590",
8159
+ "\u2584"
8160
+ ]
8161
+ },
8162
+ triangle: {
8163
+ interval: 50,
8164
+ frames: [
8165
+ "\u25E2",
8166
+ "\u25E3",
8167
+ "\u25E4",
8168
+ "\u25E5"
8169
+ ]
8170
+ },
8171
+ binary: {
8172
+ interval: 80,
8173
+ frames: [
8174
+ "010010",
8175
+ "001100",
8176
+ "100101",
8177
+ "111010",
8178
+ "111101",
8179
+ "010111",
8180
+ "101011",
8181
+ "111000",
8182
+ "110011",
8183
+ "110101"
8184
+ ]
8185
+ },
8186
+ arc: {
8187
+ interval: 100,
8188
+ frames: [
8189
+ "\u25DC",
8190
+ "\u25E0",
8191
+ "\u25DD",
8192
+ "\u25DE",
8193
+ "\u25E1",
8194
+ "\u25DF"
8195
+ ]
8196
+ },
8197
+ circle: {
8198
+ interval: 120,
8199
+ frames: [
8200
+ "\u25E1",
8201
+ "\u2299",
8202
+ "\u25E0"
8203
+ ]
8204
+ },
8205
+ squareCorners: {
8206
+ interval: 180,
8207
+ frames: [
8208
+ "\u25F0",
8209
+ "\u25F3",
8210
+ "\u25F2",
8211
+ "\u25F1"
8212
+ ]
8213
+ },
8214
+ circleQuarters: {
8215
+ interval: 120,
8216
+ frames: [
8217
+ "\u25F4",
8218
+ "\u25F7",
8219
+ "\u25F6",
8220
+ "\u25F5"
8221
+ ]
8222
+ },
8223
+ circleHalves: {
8224
+ interval: 50,
8225
+ frames: [
8226
+ "\u25D0",
8227
+ "\u25D3",
8228
+ "\u25D1",
8229
+ "\u25D2"
8230
+ ]
8231
+ },
8232
+ squish: {
8233
+ interval: 100,
8234
+ frames: [
8235
+ "\u256B",
8236
+ "\u256A"
8237
+ ]
8238
+ },
8239
+ toggle: {
8240
+ interval: 250,
8241
+ frames: [
8242
+ "\u22B6",
8243
+ "\u22B7"
8244
+ ]
8245
+ },
8246
+ toggle2: {
8247
+ interval: 80,
8248
+ frames: [
8249
+ "\u25AB",
8250
+ "\u25AA"
8251
+ ]
8252
+ },
8253
+ toggle3: {
8254
+ interval: 120,
8255
+ frames: [
8256
+ "\u25A1",
8257
+ "\u25A0"
8258
+ ]
8259
+ },
8260
+ toggle4: {
8261
+ interval: 100,
8262
+ frames: [
8263
+ "\u25A0",
8264
+ "\u25A1",
8265
+ "\u25AA",
8266
+ "\u25AB"
8267
+ ]
8268
+ },
8269
+ toggle5: {
8270
+ interval: 100,
8271
+ frames: [
8272
+ "\u25AE",
8273
+ "\u25AF"
8274
+ ]
8275
+ },
8276
+ toggle6: {
8277
+ interval: 300,
8278
+ frames: [
8279
+ "\u101D",
8280
+ "\u1040"
8281
+ ]
8282
+ },
8283
+ toggle7: {
8284
+ interval: 80,
8285
+ frames: [
8286
+ "\u29BE",
8287
+ "\u29BF"
8288
+ ]
8289
+ },
8290
+ toggle8: {
8291
+ interval: 100,
8292
+ frames: [
8293
+ "\u25CD",
8294
+ "\u25CC"
8295
+ ]
8296
+ },
8297
+ toggle9: {
8298
+ interval: 100,
8299
+ frames: [
8300
+ "\u25C9",
8301
+ "\u25CE"
8302
+ ]
8303
+ },
8304
+ toggle10: {
8305
+ interval: 100,
8306
+ frames: [
8307
+ "\u3282",
8308
+ "\u3280",
8309
+ "\u3281"
8310
+ ]
8311
+ },
8312
+ toggle11: {
8313
+ interval: 50,
8314
+ frames: [
8315
+ "\u29C7",
8316
+ "\u29C6"
8317
+ ]
8318
+ },
8319
+ toggle12: {
8320
+ interval: 120,
8321
+ frames: [
8322
+ "\u2617",
8323
+ "\u2616"
8324
+ ]
8325
+ },
8326
+ toggle13: {
8327
+ interval: 80,
8328
+ frames: [
8329
+ "=",
8330
+ "*",
8331
+ "-"
8332
+ ]
8333
+ },
8334
+ arrow: {
8335
+ interval: 100,
8336
+ frames: [
8337
+ "\u2190",
8338
+ "\u2196",
8339
+ "\u2191",
8340
+ "\u2197",
8341
+ "\u2192",
8342
+ "\u2198",
8343
+ "\u2193",
8344
+ "\u2199"
8345
+ ]
8346
+ },
8347
+ arrow2: {
8348
+ interval: 80,
8349
+ frames: [
8350
+ "\u2B06\uFE0F ",
8351
+ "\u2197\uFE0F ",
8352
+ "\u27A1\uFE0F ",
8353
+ "\u2198\uFE0F ",
8354
+ "\u2B07\uFE0F ",
8355
+ "\u2199\uFE0F ",
8356
+ "\u2B05\uFE0F ",
8357
+ "\u2196\uFE0F "
8358
+ ]
8359
+ },
8360
+ arrow3: {
8361
+ interval: 120,
8362
+ frames: [
8363
+ "\u25B9\u25B9\u25B9\u25B9\u25B9",
8364
+ "\u25B8\u25B9\u25B9\u25B9\u25B9",
8365
+ "\u25B9\u25B8\u25B9\u25B9\u25B9",
8366
+ "\u25B9\u25B9\u25B8\u25B9\u25B9",
8367
+ "\u25B9\u25B9\u25B9\u25B8\u25B9",
8368
+ "\u25B9\u25B9\u25B9\u25B9\u25B8"
8369
+ ]
8370
+ },
8371
+ bouncingBar: {
8372
+ interval: 80,
8373
+ frames: [
8374
+ "[ ]",
8375
+ "[= ]",
8376
+ "[== ]",
8377
+ "[=== ]",
8378
+ "[====]",
8379
+ "[ ===]",
8380
+ "[ ==]",
8381
+ "[ =]",
8382
+ "[ ]",
8383
+ "[ =]",
8384
+ "[ ==]",
8385
+ "[ ===]",
8386
+ "[====]",
8387
+ "[=== ]",
8388
+ "[== ]",
8389
+ "[= ]"
8390
+ ]
8391
+ },
8392
+ bouncingBall: {
8393
+ interval: 80,
8394
+ frames: [
8395
+ "( \u25CF )",
8396
+ "( \u25CF )",
8397
+ "( \u25CF )",
8398
+ "( \u25CF )",
8399
+ "( \u25CF)",
8400
+ "( \u25CF )",
8401
+ "( \u25CF )",
8402
+ "( \u25CF )",
8403
+ "( \u25CF )",
8404
+ "(\u25CF )"
8405
+ ]
8406
+ },
8407
+ smiley: {
8408
+ interval: 200,
8409
+ frames: [
8410
+ "\u{1F604} ",
8411
+ "\u{1F61D} "
8412
+ ]
8413
+ },
8414
+ monkey: {
8415
+ interval: 300,
8416
+ frames: [
8417
+ "\u{1F648} ",
8418
+ "\u{1F648} ",
8419
+ "\u{1F649} ",
8420
+ "\u{1F64A} "
8421
+ ]
8422
+ },
8423
+ hearts: {
8424
+ interval: 100,
8425
+ frames: [
8426
+ "\u{1F49B} ",
8427
+ "\u{1F499} ",
8428
+ "\u{1F49C} ",
8429
+ "\u{1F49A} ",
8430
+ "\u{1F497} "
8431
+ ]
8432
+ },
8433
+ clock: {
8434
+ interval: 100,
8435
+ frames: [
8436
+ "\u{1F55B} ",
8437
+ "\u{1F550} ",
8438
+ "\u{1F551} ",
8439
+ "\u{1F552} ",
8440
+ "\u{1F553} ",
8441
+ "\u{1F554} ",
8442
+ "\u{1F555} ",
8443
+ "\u{1F556} ",
8444
+ "\u{1F557} ",
8445
+ "\u{1F558} ",
8446
+ "\u{1F559} ",
8447
+ "\u{1F55A} "
8448
+ ]
8449
+ },
8450
+ earth: {
8451
+ interval: 180,
8452
+ frames: [
8453
+ "\u{1F30D} ",
8454
+ "\u{1F30E} ",
8455
+ "\u{1F30F} "
8456
+ ]
8457
+ },
8458
+ material: {
8459
+ interval: 17,
8460
+ frames: [
8461
+ "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8462
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8463
+ "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8464
+ "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8465
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8466
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8467
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8468
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8469
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8470
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8471
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8472
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8473
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8474
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
8475
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
8476
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8477
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8478
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8479
+ "\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
8480
+ "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8481
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8482
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
8483
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
8484
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8485
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8486
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8487
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8488
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8489
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8490
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8491
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8492
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8493
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8494
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8495
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8496
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8497
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8498
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8499
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588",
8500
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
8501
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
8502
+ "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
8503
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8504
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8505
+ "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8506
+ "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
8507
+ "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8508
+ "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8509
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8510
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8511
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8512
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8513
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8514
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8515
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8516
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8517
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8518
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
8519
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
8520
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8521
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8522
+ "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
8523
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8524
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8525
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8526
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8527
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8528
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
8529
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
8530
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8531
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8532
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8533
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8534
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8535
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8536
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8537
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
8538
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
8539
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
8540
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
8541
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8542
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8543
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
8544
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
8545
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
8546
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8547
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8548
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8549
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8550
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8551
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8552
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581"
8553
+ ]
8554
+ },
8555
+ moon: {
8556
+ interval: 80,
8557
+ frames: [
8558
+ "\u{1F311} ",
8559
+ "\u{1F312} ",
8560
+ "\u{1F313} ",
8561
+ "\u{1F314} ",
8562
+ "\u{1F315} ",
8563
+ "\u{1F316} ",
8564
+ "\u{1F317} ",
8565
+ "\u{1F318} "
8566
+ ]
8567
+ },
8568
+ runner: {
8569
+ interval: 140,
8570
+ frames: [
8571
+ "\u{1F6B6} ",
8572
+ "\u{1F3C3} "
8573
+ ]
8574
+ },
8575
+ pong: {
8576
+ interval: 80,
8577
+ frames: [
8578
+ "\u2590\u2802 \u258C",
8579
+ "\u2590\u2808 \u258C",
8580
+ "\u2590 \u2802 \u258C",
8581
+ "\u2590 \u2820 \u258C",
8582
+ "\u2590 \u2840 \u258C",
8583
+ "\u2590 \u2820 \u258C",
8584
+ "\u2590 \u2802 \u258C",
8585
+ "\u2590 \u2808 \u258C",
8586
+ "\u2590 \u2802 \u258C",
8587
+ "\u2590 \u2820 \u258C",
8588
+ "\u2590 \u2840 \u258C",
8589
+ "\u2590 \u2820 \u258C",
8590
+ "\u2590 \u2802 \u258C",
8591
+ "\u2590 \u2808 \u258C",
8592
+ "\u2590 \u2802\u258C",
8593
+ "\u2590 \u2820\u258C",
8594
+ "\u2590 \u2840\u258C",
8595
+ "\u2590 \u2820 \u258C",
8596
+ "\u2590 \u2802 \u258C",
8597
+ "\u2590 \u2808 \u258C",
8598
+ "\u2590 \u2802 \u258C",
8599
+ "\u2590 \u2820 \u258C",
8600
+ "\u2590 \u2840 \u258C",
8601
+ "\u2590 \u2820 \u258C",
8602
+ "\u2590 \u2802 \u258C",
8603
+ "\u2590 \u2808 \u258C",
8604
+ "\u2590 \u2802 \u258C",
8605
+ "\u2590 \u2820 \u258C",
8606
+ "\u2590 \u2840 \u258C",
8607
+ "\u2590\u2820 \u258C"
8608
+ ]
8609
+ },
8610
+ shark: {
8611
+ interval: 120,
8612
+ frames: [
8613
+ "\u2590|\\____________\u258C",
8614
+ "\u2590_|\\___________\u258C",
8615
+ "\u2590__|\\__________\u258C",
8616
+ "\u2590___|\\_________\u258C",
8617
+ "\u2590____|\\________\u258C",
8618
+ "\u2590_____|\\_______\u258C",
8619
+ "\u2590______|\\______\u258C",
8620
+ "\u2590_______|\\_____\u258C",
8621
+ "\u2590________|\\____\u258C",
8622
+ "\u2590_________|\\___\u258C",
8623
+ "\u2590__________|\\__\u258C",
8624
+ "\u2590___________|\\_\u258C",
8625
+ "\u2590____________|\\\u258C",
8626
+ "\u2590____________/|\u258C",
8627
+ "\u2590___________/|_\u258C",
8628
+ "\u2590__________/|__\u258C",
8629
+ "\u2590_________/|___\u258C",
8630
+ "\u2590________/|____\u258C",
8631
+ "\u2590_______/|_____\u258C",
8632
+ "\u2590______/|______\u258C",
8633
+ "\u2590_____/|_______\u258C",
8634
+ "\u2590____/|________\u258C",
8635
+ "\u2590___/|_________\u258C",
8636
+ "\u2590__/|__________\u258C",
8637
+ "\u2590_/|___________\u258C",
8638
+ "\u2590/|____________\u258C"
8639
+ ]
8640
+ },
8641
+ dqpb: {
8642
+ interval: 100,
8643
+ frames: [
8644
+ "d",
8645
+ "q",
8646
+ "p",
8647
+ "b"
8648
+ ]
8649
+ },
8650
+ weather: {
8651
+ interval: 100,
8652
+ frames: [
8653
+ "\u2600\uFE0F ",
8654
+ "\u2600\uFE0F ",
8655
+ "\u2600\uFE0F ",
8656
+ "\u{1F324} ",
8657
+ "\u26C5\uFE0F ",
8658
+ "\u{1F325} ",
8659
+ "\u2601\uFE0F ",
8660
+ "\u{1F327} ",
8661
+ "\u{1F328} ",
8662
+ "\u{1F327} ",
8663
+ "\u{1F328} ",
8664
+ "\u{1F327} ",
8665
+ "\u{1F328} ",
8666
+ "\u26C8 ",
8667
+ "\u{1F328} ",
8668
+ "\u{1F327} ",
8669
+ "\u{1F328} ",
8670
+ "\u2601\uFE0F ",
8671
+ "\u{1F325} ",
8672
+ "\u26C5\uFE0F ",
8673
+ "\u{1F324} ",
8674
+ "\u2600\uFE0F ",
8675
+ "\u2600\uFE0F "
8676
+ ]
8677
+ },
8678
+ christmas: {
8679
+ interval: 400,
8680
+ frames: [
8681
+ "\u{1F332}",
8682
+ "\u{1F384}"
8683
+ ]
8684
+ },
8685
+ grenade: {
8686
+ interval: 80,
8687
+ frames: [
8688
+ "\u060C ",
8689
+ "\u2032 ",
8690
+ " \xB4 ",
8691
+ " \u203E ",
8692
+ " \u2E0C",
8693
+ " \u2E0A",
8694
+ " |",
8695
+ " \u204E",
8696
+ " \u2055",
8697
+ " \u0DF4 ",
8698
+ " \u2053",
8699
+ " ",
8700
+ " ",
8701
+ " "
8702
+ ]
8703
+ },
8704
+ point: {
8705
+ interval: 125,
8706
+ frames: [
8707
+ "\u2219\u2219\u2219",
8708
+ "\u25CF\u2219\u2219",
8709
+ "\u2219\u25CF\u2219",
8710
+ "\u2219\u2219\u25CF",
8711
+ "\u2219\u2219\u2219"
8712
+ ]
8713
+ },
8714
+ layer: {
8715
+ interval: 150,
8716
+ frames: [
8717
+ "-",
8718
+ "=",
8719
+ "\u2261"
8720
+ ]
8721
+ },
8722
+ betaWave: {
8723
+ interval: 80,
8724
+ frames: [
8725
+ "\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2",
8726
+ "\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2",
8727
+ "\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2",
8728
+ "\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2",
8729
+ "\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2",
8730
+ "\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2",
8731
+ "\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1"
8732
+ ]
8733
+ },
8734
+ fingerDance: {
8735
+ interval: 160,
8736
+ frames: [
8737
+ "\u{1F918} ",
8738
+ "\u{1F91F} ",
8739
+ "\u{1F596} ",
8740
+ "\u270B ",
8741
+ "\u{1F91A} ",
8742
+ "\u{1F446} "
8743
+ ]
8744
+ },
8745
+ fistBump: {
8746
+ interval: 80,
8747
+ frames: [
8748
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
8749
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
8750
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
8751
+ "\u3000\u{1F91C}\u3000\u3000\u{1F91B}\u3000 ",
8752
+ "\u3000\u3000\u{1F91C}\u{1F91B}\u3000\u3000 ",
8753
+ "\u3000\u{1F91C}\u2728\u{1F91B}\u3000\u3000 ",
8754
+ "\u{1F91C}\u3000\u2728\u3000\u{1F91B}\u3000 "
8755
+ ]
8756
+ },
8757
+ soccerHeader: {
8758
+ interval: 80,
8759
+ frames: [
8760
+ " \u{1F9D1}\u26BD\uFE0F \u{1F9D1} ",
8761
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8762
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8763
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8764
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8765
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8766
+ "\u{1F9D1} \u26BD\uFE0F\u{1F9D1} ",
8767
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8768
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8769
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8770
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8771
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} "
8772
+ ]
8773
+ },
8774
+ mindblown: {
8775
+ interval: 160,
8776
+ frames: [
8777
+ "\u{1F610} ",
8778
+ "\u{1F610} ",
8779
+ "\u{1F62E} ",
8780
+ "\u{1F62E} ",
8781
+ "\u{1F626} ",
8782
+ "\u{1F626} ",
8783
+ "\u{1F627} ",
8784
+ "\u{1F627} ",
8785
+ "\u{1F92F} ",
8786
+ "\u{1F4A5} ",
8787
+ "\u2728 ",
8788
+ "\u3000 ",
8789
+ "\u3000 ",
8790
+ "\u3000 "
8791
+ ]
8792
+ },
8793
+ speaker: {
8794
+ interval: 160,
8795
+ frames: [
8796
+ "\u{1F508} ",
8797
+ "\u{1F509} ",
8798
+ "\u{1F50A} ",
8799
+ "\u{1F509} "
8800
+ ]
8801
+ },
8802
+ orangePulse: {
8803
+ interval: 100,
8804
+ frames: [
8805
+ "\u{1F538} ",
8806
+ "\u{1F536} ",
8807
+ "\u{1F7E0} ",
8808
+ "\u{1F7E0} ",
8809
+ "\u{1F536} "
8810
+ ]
8811
+ },
8812
+ bluePulse: {
8813
+ interval: 100,
8814
+ frames: [
8815
+ "\u{1F539} ",
8816
+ "\u{1F537} ",
8817
+ "\u{1F535} ",
8818
+ "\u{1F535} ",
8819
+ "\u{1F537} "
8820
+ ]
8821
+ },
8822
+ orangeBluePulse: {
8823
+ interval: 100,
8824
+ frames: [
8825
+ "\u{1F538} ",
8826
+ "\u{1F536} ",
8827
+ "\u{1F7E0} ",
8828
+ "\u{1F7E0} ",
8829
+ "\u{1F536} ",
8830
+ "\u{1F539} ",
8831
+ "\u{1F537} ",
8832
+ "\u{1F535} ",
8833
+ "\u{1F535} ",
8834
+ "\u{1F537} "
8835
+ ]
8836
+ },
8837
+ timeTravel: {
8838
+ interval: 100,
8839
+ frames: [
8840
+ "\u{1F55B} ",
8841
+ "\u{1F55A} ",
8842
+ "\u{1F559} ",
8843
+ "\u{1F558} ",
8844
+ "\u{1F557} ",
8845
+ "\u{1F556} ",
8846
+ "\u{1F555} ",
8847
+ "\u{1F554} ",
8848
+ "\u{1F553} ",
8849
+ "\u{1F552} ",
8850
+ "\u{1F551} ",
8851
+ "\u{1F550} "
8852
+ ]
8853
+ },
8854
+ aesthetic: {
8855
+ interval: 80,
8856
+ frames: [
8857
+ "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1",
8858
+ "\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1",
8859
+ "\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1",
8860
+ "\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1",
8861
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1",
8862
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1",
8863
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0",
8864
+ "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1"
8865
+ ]
8866
+ },
8867
+ dwarfFortress: {
8868
+ interval: 80,
8869
+ frames: [
8870
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8871
+ "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8872
+ "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8873
+ "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8874
+ "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8875
+ "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8876
+ "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8877
+ "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8878
+ "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8879
+ "\u263A \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8880
+ " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8881
+ " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8882
+ " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8883
+ " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8884
+ " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8885
+ " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8886
+ " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8887
+ " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8888
+ " \u263A \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8889
+ " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8890
+ " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8891
+ " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
8892
+ " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
8893
+ " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
8894
+ " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
8895
+ " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
8896
+ " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
8897
+ " \u263A \u2588\u2588\u2588\xA3\xA3\xA3 ",
8898
+ " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
8899
+ " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
8900
+ " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
8901
+ " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
8902
+ " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
8903
+ " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
8904
+ " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
8905
+ " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
8906
+ " \u263A \u2588\u2588\xA3\xA3\xA3 ",
8907
+ " \u263A\u2588\u2588\xA3\xA3\xA3 ",
8908
+ " \u263A\u2588\u2588\xA3\xA3\xA3 ",
8909
+ " \u263A\u2593\u2588\xA3\xA3\xA3 ",
8910
+ " \u263A\u2593\u2588\xA3\xA3\xA3 ",
8911
+ " \u263A\u2592\u2588\xA3\xA3\xA3 ",
8912
+ " \u263A\u2592\u2588\xA3\xA3\xA3 ",
8913
+ " \u263A\u2591\u2588\xA3\xA3\xA3 ",
8914
+ " \u263A\u2591\u2588\xA3\xA3\xA3 ",
8915
+ " \u263A \u2588\xA3\xA3\xA3 ",
8916
+ " \u263A\u2588\xA3\xA3\xA3 ",
8917
+ " \u263A\u2588\xA3\xA3\xA3 ",
8918
+ " \u263A\u2593\xA3\xA3\xA3 ",
8919
+ " \u263A\u2593\xA3\xA3\xA3 ",
8920
+ " \u263A\u2592\xA3\xA3\xA3 ",
8921
+ " \u263A\u2592\xA3\xA3\xA3 ",
8922
+ " \u263A\u2591\xA3\xA3\xA3 ",
8923
+ " \u263A\u2591\xA3\xA3\xA3 ",
8924
+ " \u263A \xA3\xA3\xA3 ",
8925
+ " \u263A\xA3\xA3\xA3 ",
8926
+ " \u263A\xA3\xA3\xA3 ",
8927
+ " \u263A\u2593\xA3\xA3 ",
8928
+ " \u263A\u2593\xA3\xA3 ",
8929
+ " \u263A\u2592\xA3\xA3 ",
8930
+ " \u263A\u2592\xA3\xA3 ",
8931
+ " \u263A\u2591\xA3\xA3 ",
8932
+ " \u263A\u2591\xA3\xA3 ",
8933
+ " \u263A \xA3\xA3 ",
8934
+ " \u263A\xA3\xA3 ",
8935
+ " \u263A\xA3\xA3 ",
8936
+ " \u263A\u2593\xA3 ",
8937
+ " \u263A\u2593\xA3 ",
8938
+ " \u263A\u2592\xA3 ",
8939
+ " \u263A\u2592\xA3 ",
8940
+ " \u263A\u2591\xA3 ",
8941
+ " \u263A\u2591\xA3 ",
8942
+ " \u263A \xA3 ",
8943
+ " \u263A\xA3 ",
8944
+ " \u263A\xA3 ",
8945
+ " \u263A\u2593 ",
8946
+ " \u263A\u2593 ",
8947
+ " \u263A\u2592 ",
8948
+ " \u263A\u2592 ",
8949
+ " \u263A\u2591 ",
8950
+ " \u263A\u2591 ",
8951
+ " \u263A ",
8952
+ " \u263A &",
8953
+ " \u263A \u263C&",
8954
+ " \u263A \u263C &",
8955
+ " \u263A\u263C &",
8956
+ " \u263A\u263C & ",
8957
+ " \u203C & ",
8958
+ " \u263A & ",
8959
+ " \u203C & ",
8960
+ " \u263A & ",
8961
+ " \u203C & ",
8962
+ " \u263A & ",
8963
+ "\u203C & ",
8964
+ " & ",
8965
+ " & ",
8966
+ " & \u2591 ",
8967
+ " & \u2592 ",
8968
+ " & \u2593 ",
8969
+ " & \xA3 ",
8970
+ " & \u2591\xA3 ",
8971
+ " & \u2592\xA3 ",
8972
+ " & \u2593\xA3 ",
8973
+ " & \xA3\xA3 ",
8974
+ " & \u2591\xA3\xA3 ",
8975
+ " & \u2592\xA3\xA3 ",
8976
+ "& \u2593\xA3\xA3 ",
8977
+ "& \xA3\xA3\xA3 ",
8978
+ " \u2591\xA3\xA3\xA3 ",
8979
+ " \u2592\xA3\xA3\xA3 ",
8980
+ " \u2593\xA3\xA3\xA3 ",
8981
+ " \u2588\xA3\xA3\xA3 ",
8982
+ " \u2591\u2588\xA3\xA3\xA3 ",
8983
+ " \u2592\u2588\xA3\xA3\xA3 ",
8984
+ " \u2593\u2588\xA3\xA3\xA3 ",
8985
+ " \u2588\u2588\xA3\xA3\xA3 ",
8986
+ " \u2591\u2588\u2588\xA3\xA3\xA3 ",
8987
+ " \u2592\u2588\u2588\xA3\xA3\xA3 ",
8988
+ " \u2593\u2588\u2588\xA3\xA3\xA3 ",
8989
+ " \u2588\u2588\u2588\xA3\xA3\xA3 ",
8990
+ " \u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
8991
+ " \u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
8992
+ " \u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
8993
+ " \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8994
+ " \u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8995
+ " \u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8996
+ " \u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8997
+ " \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8998
+ " \u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8999
+ " \u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
9000
+ " \u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
9001
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
9002
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "
9003
+ ]
9004
+ },
9005
+ fish: {
9006
+ interval: 80,
9007
+ frames: [
9008
+ "~~~~~~~~~~~~~~~~~~~~",
9009
+ "> ~~~~~~~~~~~~~~~~~~",
9010
+ "\xBA> ~~~~~~~~~~~~~~~~~",
9011
+ "(\xBA> ~~~~~~~~~~~~~~~~",
9012
+ "((\xBA> ~~~~~~~~~~~~~~~",
9013
+ "<((\xBA> ~~~~~~~~~~~~~~",
9014
+ "><((\xBA> ~~~~~~~~~~~~~",
9015
+ " ><((\xBA> ~~~~~~~~~~~~",
9016
+ "~ ><((\xBA> ~~~~~~~~~~~",
9017
+ "~~ <>((\xBA> ~~~~~~~~~~",
9018
+ "~~~ ><((\xBA> ~~~~~~~~~",
9019
+ "~~~~ <>((\xBA> ~~~~~~~~",
9020
+ "~~~~~ ><((\xBA> ~~~~~~~",
9021
+ "~~~~~~ <>((\xBA> ~~~~~~",
9022
+ "~~~~~~~ ><((\xBA> ~~~~~",
9023
+ "~~~~~~~~ <>((\xBA> ~~~~",
9024
+ "~~~~~~~~~ ><((\xBA> ~~~",
9025
+ "~~~~~~~~~~ <>((\xBA> ~~",
9026
+ "~~~~~~~~~~~ ><((\xBA> ~",
9027
+ "~~~~~~~~~~~~ <>((\xBA> ",
9028
+ "~~~~~~~~~~~~~ ><((\xBA>",
9029
+ "~~~~~~~~~~~~~~ <>((\xBA",
9030
+ "~~~~~~~~~~~~~~~ ><((",
9031
+ "~~~~~~~~~~~~~~~~ <>(",
9032
+ "~~~~~~~~~~~~~~~~~ ><",
9033
+ "~~~~~~~~~~~~~~~~~~ <",
9034
+ "~~~~~~~~~~~~~~~~~~~~"
9035
+ ]
9036
+ }
9037
+ };
9038
+
9039
+ // node_modules/cli-spinners/index.js
9040
+ var cli_spinners_default = spinners_default;
9041
+ var spinnersList = Object.keys(spinners_default);
9042
+
9043
+ // node_modules/log-symbols/index.js
9044
+ init_esm_shims();
9045
+
9046
+ // node_modules/log-symbols/symbols.js
9047
+ var symbols_exports = {};
9048
+ __export(symbols_exports, {
9049
+ error: () => error,
9050
+ info: () => info,
9051
+ success: () => success,
9052
+ warning: () => warning
9053
+ });
9054
+ init_esm_shims();
9055
+
9056
+ // node_modules/yoctocolors/base.js
9057
+ init_esm_shims();
9058
+ import tty2 from "tty";
9059
+ var hasColors = tty2?.WriteStream?.prototype?.hasColors?.() ?? false;
9060
+ var format = (open, close) => {
9061
+ if (!hasColors) {
9062
+ return (input) => input;
9063
+ }
9064
+ const openCode = `\x1B[${open}m`;
9065
+ const closeCode = `\x1B[${close}m`;
9066
+ return (input) => {
9067
+ const string = input + "";
9068
+ let index = string.indexOf(closeCode);
9069
+ if (index === -1) {
9070
+ return openCode + string + closeCode;
9071
+ }
9072
+ let result = openCode;
9073
+ let lastIndex = 0;
9074
+ const reopenOnNestedClose = close === 22;
9075
+ const replaceCode = (reopenOnNestedClose ? closeCode : "") + openCode;
9076
+ while (index !== -1) {
9077
+ result += string.slice(lastIndex, index) + replaceCode;
9078
+ lastIndex = index + closeCode.length;
9079
+ index = string.indexOf(closeCode, lastIndex);
9080
+ }
9081
+ result += string.slice(lastIndex) + closeCode;
9082
+ return result;
9083
+ };
9084
+ };
9085
+ var reset = format(0, 0);
9086
+ var bold = format(1, 22);
9087
+ var dim = format(2, 22);
9088
+ var italic = format(3, 23);
9089
+ var underline = format(4, 24);
9090
+ var overline = format(53, 55);
9091
+ var inverse = format(7, 27);
9092
+ var hidden = format(8, 28);
9093
+ var strikethrough = format(9, 29);
9094
+ var black = format(30, 39);
9095
+ var red = format(31, 39);
9096
+ var green = format(32, 39);
9097
+ var yellow = format(33, 39);
9098
+ var blue = format(34, 39);
9099
+ var magenta = format(35, 39);
9100
+ var cyan = format(36, 39);
9101
+ var white = format(37, 39);
9102
+ var gray = format(90, 39);
9103
+ var bgBlack = format(40, 49);
9104
+ var bgRed = format(41, 49);
9105
+ var bgGreen = format(42, 49);
9106
+ var bgYellow = format(43, 49);
9107
+ var bgBlue = format(44, 49);
9108
+ var bgMagenta = format(45, 49);
9109
+ var bgCyan = format(46, 49);
9110
+ var bgWhite = format(47, 49);
9111
+ var bgGray = format(100, 49);
9112
+ var redBright = format(91, 39);
9113
+ var greenBright = format(92, 39);
9114
+ var yellowBright = format(93, 39);
9115
+ var blueBright = format(94, 39);
9116
+ var magentaBright = format(95, 39);
9117
+ var cyanBright = format(96, 39);
9118
+ var whiteBright = format(97, 39);
9119
+ var bgRedBright = format(101, 49);
9120
+ var bgGreenBright = format(102, 49);
9121
+ var bgYellowBright = format(103, 49);
9122
+ var bgBlueBright = format(104, 49);
9123
+ var bgMagentaBright = format(105, 49);
9124
+ var bgCyanBright = format(106, 49);
9125
+ var bgWhiteBright = format(107, 49);
9126
+
9127
+ // node_modules/is-unicode-supported/index.js
9128
+ init_esm_shims();
9129
+ import process6 from "process";
9130
+ function isUnicodeSupported() {
9131
+ const { env: env2 } = process6;
9132
+ const { TERM, TERM_PROGRAM } = env2;
9133
+ if (process6.platform !== "win32") {
9134
+ return TERM !== "linux";
9135
+ }
9136
+ return Boolean(env2.WT_SESSION) || Boolean(env2.TERMINUS_SUBLIME) || env2.ConEmuTask === "{cmd::Cmder}" || TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env2.TERMINAL_EMULATOR === "JetBrains-JediTerm";
9137
+ }
9138
+
9139
+ // node_modules/log-symbols/symbols.js
9140
+ var _isUnicodeSupported = isUnicodeSupported();
9141
+ var info = blue(_isUnicodeSupported ? "\u2139" : "i");
9142
+ var success = green(_isUnicodeSupported ? "\u2714" : "\u221A");
9143
+ var warning = yellow(_isUnicodeSupported ? "\u26A0" : "\u203C");
9144
+ var error = red(_isUnicodeSupported ? "\u2716" : "\xD7");
9145
+
9146
+ // node_modules/string-width/index.js
9147
+ init_esm_shims();
9148
+
9149
+ // node_modules/strip-ansi/index.js
9150
+ init_esm_shims();
9151
+
9152
+ // node_modules/ansi-regex/index.js
9153
+ init_esm_shims();
9154
+ function ansiRegex({ onlyFirst = false } = {}) {
9155
+ const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
9156
+ const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
9157
+ const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
9158
+ const pattern = `${osc}|${csi}`;
9159
+ return new RegExp(pattern, onlyFirst ? void 0 : "g");
9160
+ }
9161
+
9162
+ // node_modules/strip-ansi/index.js
9163
+ var regex = ansiRegex();
9164
+ function stripAnsi(string) {
9165
+ if (typeof string !== "string") {
9166
+ throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
9167
+ }
9168
+ return string.replace(regex, "");
9169
+ }
9170
+
9171
+ // node_modules/get-east-asian-width/index.js
9172
+ init_esm_shims();
9173
+
9174
+ // node_modules/get-east-asian-width/lookup.js
9175
+ init_esm_shims();
9176
+
9177
+ // node_modules/get-east-asian-width/lookup-data.js
9178
+ init_esm_shims();
9179
+ var ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];
9180
+ var fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
9181
+ var halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];
9182
+ var narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];
9183
+ var wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
9184
+
9185
+ // node_modules/get-east-asian-width/utilities.js
9186
+ init_esm_shims();
9187
+ var isInRange = (ranges, codePoint) => {
9188
+ let low = 0;
9189
+ let high = Math.floor(ranges.length / 2) - 1;
9190
+ while (low <= high) {
9191
+ const mid = Math.floor((low + high) / 2);
9192
+ const i = mid * 2;
9193
+ if (codePoint < ranges[i]) {
9194
+ high = mid - 1;
9195
+ } else if (codePoint > ranges[i + 1]) {
9196
+ low = mid + 1;
9197
+ } else {
9198
+ return true;
9199
+ }
9200
+ }
9201
+ return false;
9202
+ };
9203
+
9204
+ // node_modules/get-east-asian-width/lookup.js
9205
+ var minimumAmbiguousCodePoint = ambiguousRanges[0];
9206
+ var maximumAmbiguousCodePoint = ambiguousRanges.at(-1);
9207
+ var minimumFullWidthCodePoint = fullwidthRanges[0];
9208
+ var maximumFullWidthCodePoint = fullwidthRanges.at(-1);
9209
+ var minimumHalfWidthCodePoint = halfwidthRanges[0];
9210
+ var maximumHalfWidthCodePoint = halfwidthRanges.at(-1);
9211
+ var minimumNarrowCodePoint = narrowRanges[0];
9212
+ var maximumNarrowCodePoint = narrowRanges.at(-1);
9213
+ var minimumWideCodePoint = wideRanges[0];
9214
+ var maximumWideCodePoint = wideRanges.at(-1);
9215
+ var commonCjkCodePoint = 19968;
9216
+ var [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);
9217
+ function findWideFastPathRange(ranges) {
9218
+ let fastPathStart = ranges[0];
9219
+ let fastPathEnd = ranges[1];
9220
+ for (let index = 0; index < ranges.length; index += 2) {
9221
+ const start = ranges[index];
9222
+ const end = ranges[index + 1];
9223
+ if (commonCjkCodePoint >= start && commonCjkCodePoint <= end) {
9224
+ return [start, end];
9225
+ }
9226
+ if (end - start > fastPathEnd - fastPathStart) {
9227
+ fastPathStart = start;
9228
+ fastPathEnd = end;
9229
+ }
9230
+ }
9231
+ return [fastPathStart, fastPathEnd];
9232
+ }
9233
+ var isAmbiguous = (codePoint) => {
9234
+ if (codePoint < minimumAmbiguousCodePoint || codePoint > maximumAmbiguousCodePoint) {
9235
+ return false;
9236
+ }
9237
+ return isInRange(ambiguousRanges, codePoint);
9238
+ };
9239
+ var isFullWidth = (codePoint) => {
9240
+ if (codePoint < minimumFullWidthCodePoint || codePoint > maximumFullWidthCodePoint) {
9241
+ return false;
9242
+ }
9243
+ return isInRange(fullwidthRanges, codePoint);
9244
+ };
9245
+ var isWide = (codePoint) => {
9246
+ if (codePoint >= wideFastPathStart && codePoint <= wideFastPathEnd) {
9247
+ return true;
9248
+ }
9249
+ if (codePoint < minimumWideCodePoint || codePoint > maximumWideCodePoint) {
9250
+ return false;
9251
+ }
9252
+ return isInRange(wideRanges, codePoint);
9253
+ };
9254
+
9255
+ // node_modules/get-east-asian-width/index.js
9256
+ function validate(codePoint) {
9257
+ if (!Number.isSafeInteger(codePoint)) {
9258
+ throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
9259
+ }
9260
+ }
9261
+ function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
9262
+ validate(codePoint);
9263
+ if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
9264
+ return 2;
9265
+ }
9266
+ return 1;
9267
+ }
9268
+
9269
+ // node_modules/string-width/index.js
9270
+ var segmenter = new Intl.Segmenter();
9271
+ var zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Format}|\\p{Mark}|\\p{Surrogate})+$", "v");
9272
+ var leadingNonPrintingRegex = new RegExp("^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+", "v");
9273
+ var rgiEmojiRegex = new RegExp("^\\p{RGI_Emoji}$", "v");
9274
+ var unqualifiedKeycapRegex = /^[\d#*]\u20E3$/;
9275
+ var extendedPictographicRegex = /\p{Extended_Pictographic}/gu;
9276
+ function isDoubleWidthNonRgiEmojiSequence(segment) {
9277
+ if (segment.length > 50) {
9278
+ return false;
9279
+ }
9280
+ if (unqualifiedKeycapRegex.test(segment)) {
9281
+ return true;
9282
+ }
9283
+ if (segment.includes("\u200D")) {
9284
+ const pictographics = segment.match(extendedPictographicRegex);
9285
+ return pictographics !== null && pictographics.length >= 2;
9286
+ }
9287
+ return false;
9288
+ }
9289
+ function baseVisible(segment) {
9290
+ return segment.replace(leadingNonPrintingRegex, "");
9291
+ }
9292
+ function isZeroWidthCluster(segment) {
9293
+ return zeroWidthClusterRegex.test(segment);
9294
+ }
9295
+ function trailingHalfwidthWidth(segment, eastAsianWidthOptions) {
9296
+ let extra = 0;
9297
+ if (segment.length > 1) {
9298
+ for (const char of segment.slice(1)) {
9299
+ if (char >= "\uFF00" && char <= "\uFFEF") {
9300
+ extra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);
9301
+ }
9302
+ }
9303
+ }
9304
+ return extra;
9305
+ }
9306
+ function stringWidth(input, options2 = {}) {
9307
+ if (typeof input !== "string" || input.length === 0) {
9308
+ return 0;
9309
+ }
9310
+ const {
9311
+ ambiguousIsNarrow = true,
9312
+ countAnsiEscapeCodes = false
9313
+ } = options2;
9314
+ let string = input;
9315
+ if (!countAnsiEscapeCodes && (string.includes("\x1B") || string.includes("\x9B"))) {
9316
+ string = stripAnsi(string);
9317
+ }
9318
+ if (string.length === 0) {
9319
+ return 0;
9320
+ }
9321
+ if (/^[\u0020-\u007E]*$/.test(string)) {
9322
+ return string.length;
9323
+ }
9324
+ let width = 0;
9325
+ const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
9326
+ for (const { segment } of segmenter.segment(string)) {
9327
+ if (isZeroWidthCluster(segment)) {
9328
+ continue;
9329
+ }
9330
+ if (rgiEmojiRegex.test(segment) || isDoubleWidthNonRgiEmojiSequence(segment)) {
9331
+ width += 2;
9332
+ continue;
9333
+ }
9334
+ const codePoint = baseVisible(segment).codePointAt(0);
9335
+ width += eastAsianWidth(codePoint, eastAsianWidthOptions);
9336
+ width += trailingHalfwidthWidth(segment, eastAsianWidthOptions);
9337
+ }
9338
+ return width;
9339
+ }
9340
+
9341
+ // node_modules/is-interactive/index.js
9342
+ init_esm_shims();
9343
+ function isInteractive({ stream = process.stdout } = {}) {
9344
+ return Boolean(
9345
+ stream && stream.isTTY && process.env.TERM !== "dumb" && !("CI" in process.env)
9346
+ );
9347
+ }
9348
+
9349
+ // node_modules/stdin-discarder/index.js
9350
+ init_esm_shims();
9351
+ import process7 from "process";
9352
+ var ASCII_ETX_CODE = 3;
9353
+ var StdinDiscarder = class {
9354
+ #activeCount = 0;
9355
+ #stdin;
9356
+ #stdinWasPaused = false;
9357
+ #stdinWasRaw = false;
9358
+ #handleInputBound = (chunk) => {
9359
+ if (!chunk?.length) {
9360
+ return;
9361
+ }
9362
+ const code = typeof chunk === "string" ? chunk.codePointAt(0) : chunk[0];
9363
+ if (code === ASCII_ETX_CODE) {
9364
+ if (process7.listenerCount("SIGINT") > 0) {
9365
+ process7.emit("SIGINT");
9366
+ } else {
9367
+ process7.kill(process7.pid, "SIGINT");
9368
+ }
9369
+ }
9370
+ };
9371
+ start() {
9372
+ this.#activeCount++;
9373
+ if (this.#activeCount === 1) {
9374
+ this.#realStart();
9375
+ }
9376
+ }
9377
+ stop() {
9378
+ if (this.#activeCount === 0) {
9379
+ return;
9380
+ }
9381
+ if (--this.#activeCount === 0) {
9382
+ this.#realStop();
9383
+ }
9384
+ }
9385
+ #realStart() {
9386
+ const { stdin } = process7;
9387
+ if (process7.platform === "win32" || !stdin?.isTTY || typeof stdin.setRawMode !== "function") {
9388
+ this.#stdin = void 0;
9389
+ return;
9390
+ }
9391
+ this.#stdin = stdin;
9392
+ this.#stdinWasPaused = stdin.isPaused();
9393
+ this.#stdinWasRaw = Boolean(stdin.isRaw);
9394
+ stdin.setRawMode(true);
9395
+ stdin.prependListener("data", this.#handleInputBound);
9396
+ if (this.#stdinWasPaused) {
9397
+ stdin.resume();
9398
+ }
9399
+ }
9400
+ #realStop() {
9401
+ if (!this.#stdin) {
9402
+ return;
9403
+ }
9404
+ const stdin = this.#stdin;
9405
+ stdin.off("data", this.#handleInputBound);
9406
+ if (stdin.isTTY) {
9407
+ stdin.setRawMode?.(this.#stdinWasRaw);
9408
+ }
9409
+ if (this.#stdinWasPaused) {
9410
+ stdin.pause();
9411
+ }
9412
+ this.#stdin = void 0;
9413
+ this.#stdinWasPaused = false;
9414
+ this.#stdinWasRaw = false;
9415
+ }
9416
+ };
9417
+ var stdinDiscarder = new StdinDiscarder();
9418
+ var stdin_discarder_default = Object.freeze(stdinDiscarder);
9419
+
9420
+ // node_modules/ora/index.js
9421
+ var RENDER_DEFERRAL_TIMEOUT = 200;
9422
+ var SYNCHRONIZED_OUTPUT_ENABLE = "\x1B[?2026h";
9423
+ var SYNCHRONIZED_OUTPUT_DISABLE = "\x1B[?2026l";
9424
+ var activeHooksPerStream = /* @__PURE__ */ new Map();
9425
+ var Ora = class {
9426
+ #linesToClear = 0;
9427
+ #frameIndex = -1;
9428
+ #lastFrameTime = 0;
9429
+ #options;
9430
+ #spinner;
9431
+ #stream;
9432
+ #id;
9433
+ #hookedStreams = /* @__PURE__ */ new Map();
9434
+ #isInternalWrite = false;
9435
+ #drainHandler;
9436
+ #deferRenderTimer;
9437
+ #isDiscardingStdin = false;
9438
+ color;
9439
+ // Helper to execute writes while preventing hook recursion
9440
+ #internalWrite(fn) {
9441
+ this.#isInternalWrite = true;
9442
+ try {
9443
+ return fn();
9444
+ } finally {
9445
+ this.#isInternalWrite = false;
9446
+ }
9447
+ }
9448
+ // Helper to render if still spinning
9449
+ #tryRender() {
9450
+ if (this.isSpinning) {
9451
+ this.render();
9452
+ }
9453
+ }
9454
+ #stringifyChunk(chunk, encoding) {
9455
+ if (chunk === void 0 || chunk === null) {
9456
+ return "";
9457
+ }
9458
+ if (typeof chunk === "string") {
9459
+ return chunk;
9460
+ }
9461
+ if (Buffer.isBuffer(chunk) || ArrayBuffer.isView(chunk)) {
9462
+ const normalizedEncoding = typeof encoding === "string" && encoding && encoding !== "buffer" ? encoding : "utf8";
9463
+ return Buffer.from(chunk).toString(normalizedEncoding);
9464
+ }
9465
+ return String(chunk);
9466
+ }
9467
+ #chunkTerminatesLine(chunkString) {
9468
+ if (!chunkString) {
9469
+ return false;
9470
+ }
9471
+ const lastCharacter = chunkString.at(-1);
9472
+ return lastCharacter === "\n" || lastCharacter === "\r";
9473
+ }
9474
+ #scheduleRenderDeferral() {
9475
+ if (this.#deferRenderTimer) {
9476
+ return;
9477
+ }
9478
+ this.#deferRenderTimer = setTimeout(() => {
9479
+ this.#deferRenderTimer = void 0;
9480
+ if (this.isSpinning) {
9481
+ this.#tryRender();
9482
+ }
9483
+ }, RENDER_DEFERRAL_TIMEOUT);
9484
+ if (typeof this.#deferRenderTimer?.unref === "function") {
9485
+ this.#deferRenderTimer.unref();
9486
+ }
9487
+ }
9488
+ #clearRenderDeferral() {
9489
+ if (this.#deferRenderTimer) {
9490
+ clearTimeout(this.#deferRenderTimer);
9491
+ this.#deferRenderTimer = void 0;
9492
+ }
9493
+ }
9494
+ // Helper to build complete line with symbol, text, prefix, and suffix
9495
+ #buildOutputLine(symbol, text, prefixText, suffixText) {
9496
+ const fullPrefixText = this.#getFullPrefixText(prefixText, " ");
9497
+ const separatorText = symbol ? " " : "";
9498
+ const fullText = typeof text === "string" ? separatorText + text : "";
9499
+ const fullSuffixText = this.#getFullSuffixText(suffixText, " ");
9500
+ return fullPrefixText + symbol + fullText + fullSuffixText;
9501
+ }
9502
+ constructor(options2) {
9503
+ if (typeof options2 === "string") {
9504
+ options2 = {
9505
+ text: options2
9506
+ };
9507
+ }
9508
+ this.#options = {
9509
+ color: "cyan",
9510
+ stream: process8.stderr,
9511
+ discardStdin: true,
9512
+ hideCursor: true,
9513
+ ...options2
9514
+ };
9515
+ this.color = this.#options.color;
9516
+ this.#stream = this.#options.stream;
9517
+ if (typeof this.#options.isEnabled !== "boolean") {
9518
+ this.#options.isEnabled = isInteractive({ stream: this.#stream });
9519
+ }
9520
+ if (typeof this.#options.isSilent !== "boolean") {
9521
+ this.#options.isSilent = false;
9522
+ }
9523
+ const userInterval = this.#options.interval;
9524
+ this.spinner = this.#options.spinner;
9525
+ this.#options.interval = userInterval;
9526
+ this.text = this.#options.text;
9527
+ this.prefixText = this.#options.prefixText;
9528
+ this.suffixText = this.#options.suffixText;
9529
+ this.indent = this.#options.indent;
9530
+ if (process8.env.NODE_ENV === "test") {
9531
+ this._stream = this.#stream;
9532
+ this._isEnabled = this.#options.isEnabled;
9533
+ Object.defineProperty(this, "_linesToClear", {
9534
+ get() {
9535
+ return this.#linesToClear;
9536
+ },
9537
+ set(newValue) {
9538
+ this.#linesToClear = newValue;
9539
+ }
9540
+ });
9541
+ Object.defineProperty(this, "_frameIndex", {
9542
+ get() {
9543
+ return this.#frameIndex;
9544
+ }
9545
+ });
9546
+ Object.defineProperty(this, "_lineCount", {
9547
+ get() {
9548
+ const columns = this.#stream.columns ?? 80;
9549
+ const prefixText = typeof this.#options.prefixText === "function" ? "" : this.#options.prefixText;
9550
+ const suffixText = typeof this.#options.suffixText === "function" ? "" : this.#options.suffixText;
9551
+ const fullPrefixText = typeof prefixText === "string" && prefixText !== "" ? prefixText + " " : "";
9552
+ const fullSuffixText = typeof suffixText === "string" && suffixText !== "" ? " " + suffixText : "";
9553
+ const spinnerChar = "-";
9554
+ const fullText = " ".repeat(this.#options.indent) + fullPrefixText + spinnerChar + (typeof this.#options.text === "string" ? " " + this.#options.text : "") + fullSuffixText;
9555
+ return this.#computeLineCountFrom(fullText, columns);
9556
+ }
9557
+ });
9558
+ }
9559
+ }
9560
+ get indent() {
9561
+ return this.#options.indent;
9562
+ }
9563
+ set indent(indent = 0) {
9564
+ if (!(indent >= 0 && Number.isInteger(indent))) {
9565
+ throw new Error("The `indent` option must be an integer from 0 and up");
9566
+ }
9567
+ this.#options.indent = indent;
9568
+ }
9569
+ get interval() {
9570
+ return this.#options.interval ?? this.#spinner.interval ?? 100;
9571
+ }
9572
+ get spinner() {
9573
+ return this.#spinner;
9574
+ }
9575
+ set spinner(spinner) {
9576
+ this.#frameIndex = -1;
9577
+ this.#options.interval = void 0;
9578
+ if (typeof spinner === "object") {
9579
+ if (!Array.isArray(spinner.frames) || spinner.frames.length === 0 || spinner.frames.some((frame) => typeof frame !== "string")) {
9580
+ throw new Error("The given spinner must have a non-empty `frames` array of strings");
9581
+ }
9582
+ if (spinner.interval !== void 0 && !(Number.isInteger(spinner.interval) && spinner.interval > 0)) {
9583
+ throw new Error("`spinner.interval` must be a positive integer if provided");
9584
+ }
9585
+ this.#spinner = spinner;
9586
+ } else if (!isUnicodeSupported()) {
9587
+ this.#spinner = cli_spinners_default.line;
9588
+ } else if (spinner === void 0) {
9589
+ this.#spinner = cli_spinners_default.dots;
9590
+ } else if (spinner !== "default" && cli_spinners_default[spinner]) {
9591
+ this.#spinner = cli_spinners_default[spinner];
9592
+ } else {
9593
+ throw new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);
9594
+ }
9595
+ }
9596
+ get text() {
9597
+ return this.#options.text;
9598
+ }
9599
+ set text(value = "") {
9600
+ this.#options.text = value;
9601
+ }
9602
+ get prefixText() {
9603
+ return this.#options.prefixText;
9604
+ }
9605
+ set prefixText(value = "") {
9606
+ this.#options.prefixText = value;
9607
+ }
9608
+ get suffixText() {
9609
+ return this.#options.suffixText;
9610
+ }
9611
+ set suffixText(value = "") {
9612
+ this.#options.suffixText = value;
9613
+ }
9614
+ get isSpinning() {
9615
+ return this.#id !== void 0;
9616
+ }
9617
+ #formatAffix(value, separator, placeBefore = false) {
9618
+ const resolved = typeof value === "function" ? value() : value;
9619
+ if (typeof resolved === "string" && resolved !== "") {
9620
+ return placeBefore ? separator + resolved : resolved + separator;
9621
+ }
9622
+ return "";
9623
+ }
9624
+ #getFullPrefixText(prefixText = this.#options.prefixText, postfix = " ") {
9625
+ return this.#formatAffix(prefixText, postfix, false);
9626
+ }
9627
+ #getFullSuffixText(suffixText = this.#options.suffixText, prefix = " ") {
9628
+ return this.#formatAffix(suffixText, prefix, true);
9629
+ }
9630
+ #computeLineCountFrom(text, columns) {
9631
+ let count = 0;
9632
+ for (const line of stripVTControlCharacters(text).split("\n")) {
9633
+ count += Math.max(1, Math.ceil(stringWidth(line) / columns));
9634
+ }
9635
+ return count;
9636
+ }
9637
+ get isEnabled() {
9638
+ return this.#options.isEnabled && !this.#options.isSilent;
9639
+ }
9640
+ set isEnabled(value) {
9641
+ if (typeof value !== "boolean") {
9642
+ throw new TypeError("The `isEnabled` option must be a boolean");
9643
+ }
9644
+ this.#options.isEnabled = value;
9645
+ }
9646
+ get isSilent() {
9647
+ return this.#options.isSilent;
9648
+ }
9649
+ set isSilent(value) {
9650
+ if (typeof value !== "boolean") {
9651
+ throw new TypeError("The `isSilent` option must be a boolean");
9652
+ }
9653
+ this.#options.isSilent = value;
9654
+ }
9655
+ frame() {
9656
+ const now = Date.now();
9657
+ if (this.#frameIndex === -1 || now - this.#lastFrameTime >= this.interval) {
9658
+ this.#frameIndex = (this.#frameIndex + 1) % this.#spinner.frames.length;
9659
+ this.#lastFrameTime = now;
9660
+ }
9661
+ const { frames } = this.#spinner;
9662
+ let frame = frames[this.#frameIndex];
9663
+ if (this.color) {
9664
+ frame = source_default[this.color](frame);
9665
+ }
9666
+ const fullPrefixText = this.#getFullPrefixText(this.#options.prefixText, " ");
9667
+ const fullText = typeof this.text === "string" ? " " + this.text : "";
9668
+ const fullSuffixText = this.#getFullSuffixText(this.#options.suffixText, " ");
9669
+ return fullPrefixText + frame + fullText + fullSuffixText;
9670
+ }
9671
+ clear() {
9672
+ if (!this.isEnabled || !this.#stream.isTTY) {
9673
+ return this;
9674
+ }
9675
+ this.#internalWrite(() => {
9676
+ this.#stream.cursorTo(0);
9677
+ for (let index = 0; index < this.#linesToClear; index++) {
9678
+ if (index > 0) {
9679
+ this.#stream.moveCursor(0, -1);
9680
+ }
9681
+ this.#stream.clearLine(1);
9682
+ }
9683
+ if (this.#options.indent) {
9684
+ this.#stream.cursorTo(this.#options.indent);
9685
+ }
9686
+ });
9687
+ this.#linesToClear = 0;
9688
+ return this;
9689
+ }
9690
+ // Helper to hook a single stream
9691
+ #hookStream(stream) {
9692
+ if (!stream || this.#hookedStreams.has(stream) || !stream.isTTY || typeof stream.write !== "function") {
9693
+ return;
9694
+ }
9695
+ if (activeHooksPerStream.has(stream)) {
9696
+ console.warn("[ora] Multiple concurrent spinners detected. This may cause visual corruption. Use one spinner at a time.");
9697
+ }
9698
+ const originalWrite = stream.write;
9699
+ this.#hookedStreams.set(stream, originalWrite);
9700
+ activeHooksPerStream.set(stream, this);
9701
+ stream.write = (chunk, encoding, callback) => this.#hookedWrite(stream, originalWrite, chunk, encoding, callback);
9702
+ }
9703
+ /**
9704
+ Intercept stream writes while spinner is active to handle external writes cleanly without visual corruption.
9705
+ Hooks process stdio streams and the active spinner stream so console.log(), console.error(), and direct writes stay tidy.
9706
+ */
9707
+ #installHook() {
9708
+ if (!this.isEnabled || this.#hookedStreams.size > 0) {
9709
+ return;
9710
+ }
9711
+ const streamsToHook = /* @__PURE__ */ new Set([this.#stream, process8.stdout, process8.stderr]);
9712
+ for (const stream of streamsToHook) {
9713
+ this.#hookStream(stream);
9714
+ }
9715
+ }
9716
+ #uninstallHook() {
9717
+ for (const [stream, originalWrite] of this.#hookedStreams) {
9718
+ stream.write = originalWrite;
9719
+ if (activeHooksPerStream.get(stream) === this) {
9720
+ activeHooksPerStream.delete(stream);
9721
+ }
9722
+ }
9723
+ this.#hookedStreams.clear();
9724
+ }
9725
+ // eslint-disable-next-line max-params -- Need stream and originalWrite for multi-stream support
9726
+ #hookedWrite(stream, originalWrite, chunk, encoding, callback) {
9727
+ if (typeof encoding === "function") {
9728
+ callback = encoding;
9729
+ encoding = void 0;
9730
+ }
9731
+ if (this.#isInternalWrite) {
9732
+ return originalWrite.call(stream, chunk, encoding, callback);
9733
+ }
9734
+ this.clear();
9735
+ const chunkString = this.#stringifyChunk(chunk, encoding);
9736
+ const chunkTerminatesLine = this.#chunkTerminatesLine(chunkString);
9737
+ const writeResult = originalWrite.call(stream, chunk, encoding, callback);
9738
+ if (chunkTerminatesLine) {
9739
+ this.#clearRenderDeferral();
9740
+ } else if (chunkString.length > 0) {
9741
+ this.#scheduleRenderDeferral();
9742
+ }
9743
+ if (this.isSpinning && !this.#deferRenderTimer) {
9744
+ this.render();
9745
+ }
9746
+ return writeResult;
9747
+ }
9748
+ render() {
9749
+ if (!this.isEnabled || this.#drainHandler || this.#deferRenderTimer) {
9750
+ return this;
9751
+ }
9752
+ const useSynchronizedOutput = this.#stream.isTTY;
9753
+ let shouldDisableSynchronizedOutput = false;
9754
+ try {
9755
+ if (useSynchronizedOutput) {
9756
+ this.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_ENABLE));
9757
+ shouldDisableSynchronizedOutput = true;
9758
+ }
9759
+ this.clear();
9760
+ let frameContent = this.frame();
9761
+ const columns = this.#stream.columns ?? 80;
9762
+ const actualLineCount = this.#computeLineCountFrom(frameContent, columns);
9763
+ const consoleHeight = this.#stream.rows;
9764
+ if (consoleHeight && consoleHeight > 1 && actualLineCount > consoleHeight) {
9765
+ const lines = frameContent.split("\n");
9766
+ const maxLines = consoleHeight - 1;
9767
+ frameContent = [...lines.slice(0, maxLines), "... (content truncated to fit terminal)"].join("\n");
9768
+ }
9769
+ const canContinue = this.#internalWrite(() => this.#stream.write(frameContent));
9770
+ if (canContinue === false && this.#stream.isTTY) {
9771
+ this.#drainHandler = () => {
9772
+ this.#drainHandler = void 0;
9773
+ this.#tryRender();
9774
+ };
9775
+ this.#stream.once("drain", this.#drainHandler);
9776
+ }
9777
+ this.#linesToClear = this.#computeLineCountFrom(frameContent, columns);
9778
+ } finally {
9779
+ if (shouldDisableSynchronizedOutput) {
9780
+ this.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_DISABLE));
9781
+ }
9782
+ }
9783
+ return this;
9784
+ }
9785
+ start(text) {
9786
+ if (text) {
9787
+ this.text = text;
9788
+ }
9789
+ if (this.isSilent) {
9790
+ return this;
9791
+ }
9792
+ if (!this.isEnabled) {
9793
+ const symbol = this.text ? "-" : "";
9794
+ const line = " ".repeat(this.#options.indent) + this.#buildOutputLine(symbol, this.text, this.#options.prefixText, this.#options.suffixText);
9795
+ if (line.trim() !== "") {
9796
+ this.#internalWrite(() => this.#stream.write(line + "\n"));
9797
+ }
9798
+ return this;
9799
+ }
9800
+ if (this.isSpinning) {
9801
+ return this;
9802
+ }
9803
+ if (this.#options.hideCursor) {
9804
+ cli_cursor_default.hide(this.#stream);
9805
+ }
9806
+ if (this.#options.discardStdin && process8.stdin.isTTY) {
9807
+ stdin_discarder_default.start();
9808
+ this.#isDiscardingStdin = true;
9809
+ }
9810
+ this.#installHook();
9811
+ this.render();
9812
+ this.#id = setInterval(this.render.bind(this), this.interval);
9813
+ return this;
9814
+ }
9815
+ stop() {
9816
+ clearInterval(this.#id);
9817
+ this.#id = void 0;
9818
+ this.#frameIndex = -1;
9819
+ this.#lastFrameTime = 0;
9820
+ this.#clearRenderDeferral();
9821
+ this.#uninstallHook();
9822
+ if (this.#drainHandler) {
9823
+ this.#stream.removeListener("drain", this.#drainHandler);
9824
+ this.#drainHandler = void 0;
9825
+ }
9826
+ if (this.isEnabled) {
9827
+ this.clear();
9828
+ if (this.#options.hideCursor) {
9829
+ cli_cursor_default.show(this.#stream);
9830
+ }
9831
+ }
9832
+ if (this.#isDiscardingStdin) {
9833
+ this.#isDiscardingStdin = false;
9834
+ stdin_discarder_default.stop();
9835
+ }
9836
+ return this;
9837
+ }
9838
+ succeed(text) {
9839
+ return this.stopAndPersist({ symbol: symbols_exports.success, text });
9840
+ }
9841
+ fail(text) {
9842
+ return this.stopAndPersist({ symbol: symbols_exports.error, text });
9843
+ }
9844
+ warn(text) {
9845
+ return this.stopAndPersist({ symbol: symbols_exports.warning, text });
9846
+ }
9847
+ info(text) {
9848
+ return this.stopAndPersist({ symbol: symbols_exports.info, text });
9849
+ }
9850
+ stopAndPersist(options2 = {}) {
9851
+ if (this.isSilent) {
9852
+ return this;
9853
+ }
9854
+ const symbol = options2.symbol ?? " ";
9855
+ const text = options2.text ?? this.text;
9856
+ const prefixText = options2.prefixText ?? this.#options.prefixText;
9857
+ const suffixText = options2.suffixText ?? this.#options.suffixText;
9858
+ const textToWrite = this.#buildOutputLine(symbol, text, prefixText, suffixText) + "\n";
9859
+ this.stop();
9860
+ this.#internalWrite(() => this.#stream.write(textToWrite));
9861
+ return this;
9862
+ }
9863
+ };
9864
+ function ora(options2) {
9865
+ return new Ora(options2);
9866
+ }
9867
+
9868
+ // src/utils/spinner.ts
9869
+ function createSpinner(text) {
9870
+ return ora({
9871
+ text,
9872
+ spinner: "dots"
9873
+ });
9874
+ }
9875
+ function startSpinner(text) {
9876
+ const spinner = createSpinner(text);
9877
+ spinner.start();
9878
+ return spinner;
9879
+ }
9880
+ function spinnerSuccess(spinner, text) {
9881
+ spinner.succeed(text);
9882
+ }
9883
+ function spinnerFail(spinner, text) {
9884
+ spinner.fail(text);
9885
+ }
9886
+
9887
+ // src/commands/init.ts
9888
+ init_file_system();
9889
+ var DIRECTORY_STRUCTURE = [
9890
+ ".claude/agents",
9891
+ ".claude/skills",
9892
+ "docs/\u8FED\u4EE3",
9893
+ "docs/Wiki/\u7528\u6237\u6587\u6863",
9894
+ "docs/Wiki/\u5F00\u53D1\u6587\u6863",
9895
+ "docs/Wiki/\u63A5\u53E3\u6587\u6863"
9896
+ ];
9897
+ var TECH_STACK_CHOICES = [
9898
+ { name: "React", value: "React" },
9899
+ { name: "Vue", value: "Vue" },
9900
+ { name: "Node.js", value: "Node.js" },
9901
+ { name: "Python", value: "Python" },
9902
+ { name: "Other", value: "Other" }
9903
+ ];
9904
+ var InitCommand = class {
9905
+ templateManager;
9906
+ configManager;
9907
+ projectPath;
9908
+ verbose;
9909
+ constructor(config = {}) {
9910
+ this.templateManager = new TemplateManager({ verbose: config.verbose });
9911
+ this.configManager = new ConfigManager();
9912
+ this.projectPath = config.projectPath ?? process.cwd();
9913
+ this.verbose = config.verbose ?? false;
9914
+ if (this.verbose) {
9915
+ logger.setVerbose(true);
9916
+ }
9917
+ }
9918
+ /**
9919
+ * 检测是否已存在配置
9920
+ * @returns 如果配置已存在返回 true
9921
+ */
9922
+ async detectExistingConfig() {
9923
+ const claudeDir = path10.join(this.projectPath, ".claude");
9924
+ const configPath = this.configManager.getConfigPath(this.projectPath);
9925
+ const claudeDirExists = await pathExists(claudeDir);
9926
+ const configFileExists = await fileExists(configPath);
9927
+ return claudeDirExists && configFileExists;
9928
+ }
9929
+ /**
9930
+ * 交互式引导用户输入配置
9931
+ * @returns 用户输入的配置
9932
+ */
9933
+ async promptConfig() {
9934
+ const defaultProjectName = await detectProjectName(this.projectPath);
9935
+ const defaultTechStack = await detectTechStack(this.projectPath);
9936
+ const isGitRepo = await detectGitRepo(this.projectPath);
9937
+ const defaultGitBranch = isGitRepo ? getGitBranch(this.projectPath) ?? "main" : "main";
9938
+ logger.title("\u521D\u59CB\u5316 ideal-cli \u5DE5\u4F5C\u6D41\u914D\u7F6E");
9939
+ logger.newline();
9940
+ const answers = await inquirer.prompt([
9941
+ {
9942
+ type: "input",
9943
+ name: "projectName",
9944
+ message: PROMPT_PROJECT_NAME,
9945
+ default: defaultProjectName,
9946
+ validate: (input) => {
9947
+ if (!input.trim()) {
9948
+ return "\u9879\u76EE\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A";
9949
+ }
9950
+ return true;
9951
+ }
9952
+ },
9953
+ {
9954
+ type: "input",
9955
+ name: "gitBranch",
9956
+ message: PROMPT_GIT_BRANCH,
9957
+ default: defaultGitBranch,
9958
+ validate: (input) => {
9959
+ if (!input.trim()) {
9960
+ return "\u5206\u652F\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A";
9961
+ }
9962
+ return true;
9963
+ }
9964
+ },
9965
+ {
9966
+ type: "list",
9967
+ name: "techStack",
9968
+ message: PROMPT_TECH_STACK,
9969
+ choices: TECH_STACK_CHOICES,
9970
+ default: defaultTechStack
9971
+ },
9972
+ {
9973
+ type: "confirm",
9974
+ name: "createExample",
9975
+ message: "\u662F\u5426\u521B\u5EFA\u793A\u4F8B\u6587\u4EF6\uFF1F",
9976
+ default: false
9977
+ }
9978
+ ]);
9979
+ return answers;
9980
+ }
9981
+ /**
9982
+ * 创建目录结构
9983
+ * @returns 创建的目录数量
9984
+ */
9985
+ async createDirectoryStructure() {
9986
+ const spinner = startSpinner(INFO_CREATING_DIR);
9987
+ let createdCount = 0;
9988
+ try {
9989
+ for (const dir of DIRECTORY_STRUCTURE) {
9990
+ const fullPath = path10.join(this.projectPath, dir);
9991
+ const exists = await pathExists(fullPath);
9992
+ if (!exists) {
9993
+ await ensureDir(fullPath);
9994
+ createdCount++;
9995
+ logger.debug(`Created directory: ${dir}`);
9996
+ }
9997
+ }
9998
+ spinnerSuccess(spinner, `\u521B\u5EFA\u4E86 ${createdCount} \u4E2A\u76EE\u5F55`);
9999
+ return createdCount;
10000
+ } catch (error2) {
10001
+ spinnerFail(spinner, "\u76EE\u5F55\u521B\u5EFA\u5931\u8D25");
10002
+ throw error2;
10003
+ }
10004
+ }
10005
+ /**
10006
+ * 应用模板文件
10007
+ * @param userInput 用户输入的配置
10008
+ * @returns 处理的文件数量
10009
+ */
10010
+ async applyTemplate(userInput) {
10011
+ const spinner = startSpinner(INFO_DOWNLOADING);
10012
+ try {
10013
+ const variables = {
10014
+ projectName: userInput.projectName,
10015
+ gitBranch: userInput.gitBranch,
10016
+ techStack: userInput.techStack,
10017
+ initializedAt: (/* @__PURE__ */ new Date()).toISOString()
10018
+ };
10019
+ await this.templateManager.fetchTemplate();
10020
+ const claudeDir = path10.join(this.projectPath, ".claude");
10021
+ const filesProcessed = await this.templateManager.applyTemplate(
10022
+ claudeDir,
10023
+ variables
10024
+ );
10025
+ spinnerSuccess(spinner, `\u5E94\u7528\u4E86 ${filesProcessed} \u4E2A\u6A21\u677F\u6587\u4EF6`);
10026
+ return filesProcessed;
10027
+ } catch (error2) {
10028
+ spinnerFail(spinner, "\u6A21\u677F\u5E94\u7528\u5931\u8D25");
10029
+ throw error2;
10030
+ }
10031
+ }
10032
+ /**
10033
+ * 保存项目配置
10034
+ * @param userInput 用户输入的配置
10035
+ */
10036
+ async saveConfig(userInput) {
10037
+ const config = this.configManager.createDefaultConfig(
10038
+ userInput.projectName,
10039
+ {
10040
+ gitBranch: userInput.gitBranch,
10041
+ techStack: userInput.techStack
10042
+ }
10043
+ );
10044
+ await this.configManager.write(this.projectPath, config);
10045
+ logger.debug("\u914D\u7F6E\u6587\u4EF6\u5DF2\u4FDD\u5B58");
10046
+ }
10047
+ /**
10048
+ * 输出成功消息和下一步指引
10049
+ */
10050
+ outputSuccessMessage() {
10051
+ logger.newline();
10052
+ logger.success(MSG_INIT_SUCCESS);
10053
+ logger.newline();
10054
+ logger.divider();
10055
+ logger.newline();
10056
+ logger.info("\u4E0B\u4E00\u6B65\u64CD\u4F5C:");
10057
+ logger.newline();
10058
+ console.log(" 1. \u67E5\u770B .claude/project-config.md \u786E\u8BA4\u914D\u7F6E");
10059
+ console.log(" 2. \u67E5\u770B .claude/agents/ \u4E86\u89E3\u53EF\u7528\u7684\u89D2\u8272");
10060
+ console.log(" 3. \u67E5\u770B .claude/skills/ \u4E86\u89E3\u5DE5\u4F5C\u6D41\u9636\u6BB5");
10061
+ console.log(" 4. \u8FD0\u884C ideal doctor \u68C0\u67E5\u914D\u7F6E\u5B8C\u6574\u6027");
10062
+ logger.newline();
10063
+ logger.divider();
10064
+ }
10065
+ /**
10066
+ * 执行初始化命令
10067
+ * @param options 命令选项
10068
+ * @returns 退出码 (0 表示成功)
10069
+ */
10070
+ async execute(options2 = {}) {
10071
+ try {
10072
+ const configExists = await this.detectExistingConfig();
10073
+ if (configExists && !options2.force) {
10074
+ logger.error(ERR_DIR_EXISTS);
10075
+ logger.info("\u4F7F\u7528 --force \u9009\u9879\u53EF\u4EE5\u5F3A\u5236\u8986\u76D6\u73B0\u6709\u914D\u7F6E");
10076
+ return 1;
10077
+ }
10078
+ const userInput = await this.promptConfig();
10079
+ await this.createDirectoryStructure();
10080
+ await this.applyTemplate(userInput);
10081
+ await this.saveConfig(userInput);
10082
+ this.outputSuccessMessage();
10083
+ return 0;
10084
+ } catch (error2) {
10085
+ logger.error(
10086
+ `\u521D\u59CB\u5316\u5931\u8D25: ${error2 instanceof Error ? error2.message : "Unknown error"}`
10087
+ );
10088
+ if (this.verbose && error2 instanceof Error && error2.stack) {
10089
+ logger.debug(error2.stack);
10090
+ }
10091
+ return 1;
10092
+ }
10093
+ }
10094
+ };
10095
+
10096
+ // src/commands/index.ts
10097
+ async function handleDoctor(options2) {
10098
+ const doctor = new DoctorCommand({
10099
+ verbose: options2.verbose
10100
+ });
10101
+ const exitCode = await doctor.execute();
10102
+ process.exit(exitCode);
10103
+ }
10104
+ function registerCommands(program) {
10105
+ program.command("init").description("\u521D\u59CB\u5316\u9879\u76EE\u5DE5\u4F5C\u6D41\u914D\u7F6E").option("-f, --force", "\u5F3A\u5236\u8986\u76D6\u5DF2\u5B58\u5728\u7684\u914D\u7F6E").option("-v, --verbose", "\u663E\u793A\u8BE6\u7EC6\u65E5\u5FD7").action(async (options2) => {
10106
+ const initCommand = new InitCommand({
10107
+ verbose: options2.verbose
10108
+ });
10109
+ const exitCode = await initCommand.execute({ force: options2.force });
10110
+ process.exit(exitCode);
10111
+ });
6821
10112
  const configCommand = createConfigCommand();
6822
10113
  configCommand.register(program);
6823
10114
  const updateCommand = new UpdateCommand();
@@ -6862,8 +10153,8 @@ async function main() {
6862
10153
  const program = createProgram();
6863
10154
  await program.parseAsync(process.argv);
6864
10155
  }
6865
- main().catch((error) => {
6866
- console.error("Error:", error.message);
10156
+ main().catch((error2) => {
10157
+ console.error("Error:", error2.message);
6867
10158
  process.exit(1);
6868
10159
  });
6869
10160
  /*! Bundled license information: