soulhubcli 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.cjs +279 -2752
  2. package/package.json +1 -2
package/dist/index.cjs CHANGED
@@ -589,12 +589,12 @@ var require_help = __commonJS({
589
589
  const indentString2 = " ".repeat(indent);
590
590
  const zeroWidthSpace = "\u200B";
591
591
  const breaks = `\\s${zeroWidthSpace}`;
592
- const regex2 = new RegExp(
592
+ const regex = new RegExp(
593
593
  `
594
594
  |.{1,${columnWidth - 1}}([${breaks}]|$)|[^${breaks}]+?([${breaks}]|$)`,
595
595
  "g"
596
596
  );
597
- const lines = columnText.match(regex2) || [];
597
+ const lines = columnText.match(regex) || [];
598
598
  return leadingStr + lines.map((line, i) => {
599
599
  if (line === "\n") return "";
600
600
  return (i > 0 ? indentString2 : "") + line.trimEnd();
@@ -966,8 +966,8 @@ var require_command = __commonJS({
966
966
  var EventEmitter = require("events").EventEmitter;
967
967
  var childProcess = require("child_process");
968
968
  var path6 = require("path");
969
- var fs7 = require("fs");
970
- var process10 = require("process");
969
+ var fs6 = require("fs");
970
+ var process3 = require("process");
971
971
  var { Argument: Argument2, humanReadableArgName } = require_argument();
972
972
  var { CommanderError: CommanderError2 } = require_error();
973
973
  var { Help: Help2 } = require_help();
@@ -1013,10 +1013,10 @@ var require_command = __commonJS({
1013
1013
  this._showHelpAfterError = false;
1014
1014
  this._showSuggestionAfterError = true;
1015
1015
  this._outputConfiguration = {
1016
- writeOut: (str2) => process10.stdout.write(str2),
1017
- writeErr: (str2) => process10.stderr.write(str2),
1018
- getOutHelpWidth: () => process10.stdout.isTTY ? process10.stdout.columns : void 0,
1019
- getErrHelpWidth: () => process10.stderr.isTTY ? process10.stderr.columns : void 0,
1016
+ writeOut: (str2) => process3.stdout.write(str2),
1017
+ writeErr: (str2) => process3.stderr.write(str2),
1018
+ getOutHelpWidth: () => process3.stdout.isTTY ? process3.stdout.columns : void 0,
1019
+ getErrHelpWidth: () => process3.stderr.isTTY ? process3.stderr.columns : void 0,
1020
1020
  outputError: (str2, write) => write(str2)
1021
1021
  };
1022
1022
  this._hidden = false;
@@ -1395,7 +1395,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
1395
1395
  if (this._exitCallback) {
1396
1396
  this._exitCallback(new CommanderError2(exitCode, code, message));
1397
1397
  }
1398
- process10.exit(exitCode);
1398
+ process3.exit(exitCode);
1399
1399
  }
1400
1400
  /**
1401
1401
  * Register callback `fn` for the command.
@@ -1570,9 +1570,9 @@ Expecting one of '${allowedValues.join("', '")}'`);
1570
1570
  if (typeof fn === "function") {
1571
1571
  option.default(defaultValue).argParser(fn);
1572
1572
  } else if (fn instanceof RegExp) {
1573
- const regex2 = fn;
1573
+ const regex = fn;
1574
1574
  fn = (val, def) => {
1575
- const m = regex2.exec(val);
1575
+ const m = regex.exec(val);
1576
1576
  return m ? m[0] : def;
1577
1577
  };
1578
1578
  option.default(defaultValue).argParser(fn);
@@ -1793,16 +1793,16 @@ Expecting one of '${allowedValues.join("', '")}'`);
1793
1793
  }
1794
1794
  parseOptions = parseOptions || {};
1795
1795
  if (argv === void 0 && parseOptions.from === void 0) {
1796
- if (process10.versions?.electron) {
1796
+ if (process3.versions?.electron) {
1797
1797
  parseOptions.from = "electron";
1798
1798
  }
1799
- const execArgv = process10.execArgv ?? [];
1799
+ const execArgv = process3.execArgv ?? [];
1800
1800
  if (execArgv.includes("-e") || execArgv.includes("--eval") || execArgv.includes("-p") || execArgv.includes("--print")) {
1801
1801
  parseOptions.from = "eval";
1802
1802
  }
1803
1803
  }
1804
1804
  if (argv === void 0) {
1805
- argv = process10.argv;
1805
+ argv = process3.argv;
1806
1806
  }
1807
1807
  this.rawArgs = argv.slice();
1808
1808
  let userArgs;
@@ -1813,7 +1813,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
1813
1813
  userArgs = argv.slice(2);
1814
1814
  break;
1815
1815
  case "electron":
1816
- if (process10.defaultApp) {
1816
+ if (process3.defaultApp) {
1817
1817
  this._scriptPath = argv[1];
1818
1818
  userArgs = argv.slice(2);
1819
1819
  } else {
@@ -1899,10 +1899,10 @@ Expecting one of '${allowedValues.join("', '")}'`);
1899
1899
  const sourceExt = [".js", ".ts", ".tsx", ".mjs", ".cjs"];
1900
1900
  function findFile(baseDir, baseName) {
1901
1901
  const localBin = path6.resolve(baseDir, baseName);
1902
- if (fs7.existsSync(localBin)) return localBin;
1902
+ if (fs6.existsSync(localBin)) return localBin;
1903
1903
  if (sourceExt.includes(path6.extname(baseName))) return void 0;
1904
1904
  const foundExt = sourceExt.find(
1905
- (ext) => fs7.existsSync(`${localBin}${ext}`)
1905
+ (ext) => fs6.existsSync(`${localBin}${ext}`)
1906
1906
  );
1907
1907
  if (foundExt) return `${localBin}${foundExt}`;
1908
1908
  return void 0;
@@ -1914,7 +1914,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
1914
1914
  if (this._scriptPath) {
1915
1915
  let resolvedScriptPath;
1916
1916
  try {
1917
- resolvedScriptPath = fs7.realpathSync(this._scriptPath);
1917
+ resolvedScriptPath = fs6.realpathSync(this._scriptPath);
1918
1918
  } catch (err) {
1919
1919
  resolvedScriptPath = this._scriptPath;
1920
1920
  }
@@ -1941,23 +1941,23 @@ Expecting one of '${allowedValues.join("', '")}'`);
1941
1941
  }
1942
1942
  launchWithNode = sourceExt.includes(path6.extname(executableFile));
1943
1943
  let proc;
1944
- if (process10.platform !== "win32") {
1944
+ if (process3.platform !== "win32") {
1945
1945
  if (launchWithNode) {
1946
1946
  args.unshift(executableFile);
1947
- args = incrementNodeInspectorPort(process10.execArgv).concat(args);
1948
- proc = childProcess.spawn(process10.argv[0], args, { stdio: "inherit" });
1947
+ args = incrementNodeInspectorPort(process3.execArgv).concat(args);
1948
+ proc = childProcess.spawn(process3.argv[0], args, { stdio: "inherit" });
1949
1949
  } else {
1950
1950
  proc = childProcess.spawn(executableFile, args, { stdio: "inherit" });
1951
1951
  }
1952
1952
  } else {
1953
1953
  args.unshift(executableFile);
1954
- args = incrementNodeInspectorPort(process10.execArgv).concat(args);
1955
- proc = childProcess.spawn(process10.execPath, args, { stdio: "inherit" });
1954
+ args = incrementNodeInspectorPort(process3.execArgv).concat(args);
1955
+ proc = childProcess.spawn(process3.execPath, args, { stdio: "inherit" });
1956
1956
  }
1957
1957
  if (!proc.killed) {
1958
- const signals2 = ["SIGUSR1", "SIGUSR2", "SIGTERM", "SIGINT", "SIGHUP"];
1959
- signals2.forEach((signal) => {
1960
- process10.on(signal, () => {
1958
+ const signals = ["SIGUSR1", "SIGUSR2", "SIGTERM", "SIGINT", "SIGHUP"];
1959
+ signals.forEach((signal) => {
1960
+ process3.on(signal, () => {
1961
1961
  if (proc.killed === false && proc.exitCode === null) {
1962
1962
  proc.kill(signal);
1963
1963
  }
@@ -1968,7 +1968,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
1968
1968
  proc.on("close", (code) => {
1969
1969
  code = code ?? 1;
1970
1970
  if (!exitCallback) {
1971
- process10.exit(code);
1971
+ process3.exit(code);
1972
1972
  } else {
1973
1973
  exitCallback(
1974
1974
  new CommanderError2(
@@ -1991,7 +1991,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
1991
1991
  throw new Error(`'${executableFile}' not executable`);
1992
1992
  }
1993
1993
  if (!exitCallback) {
1994
- process10.exit(1);
1994
+ process3.exit(1);
1995
1995
  } else {
1996
1996
  const wrappedError = new CommanderError2(
1997
1997
  1,
@@ -2483,13 +2483,13 @@ Expecting one of '${allowedValues.join("', '")}'`);
2483
2483
  */
2484
2484
  _parseOptionsEnv() {
2485
2485
  this.options.forEach((option) => {
2486
- if (option.envVar && option.envVar in process10.env) {
2486
+ if (option.envVar && option.envVar in process3.env) {
2487
2487
  const optionKey = option.attributeName();
2488
2488
  if (this.getOptionValue(optionKey) === void 0 || ["default", "config", "env"].includes(
2489
2489
  this.getOptionValueSource(optionKey)
2490
2490
  )) {
2491
2491
  if (option.required || option.optional) {
2492
- this.emit(`optionEnv:${option.name()}`, process10.env[option.envVar]);
2492
+ this.emit(`optionEnv:${option.name()}`, process3.env[option.envVar]);
2493
2493
  } else {
2494
2494
  this.emit(`optionEnv:${option.name()}`);
2495
2495
  }
@@ -2918,7 +2918,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
2918
2918
  */
2919
2919
  help(contextOptions) {
2920
2920
  this.outputHelp(contextOptions);
2921
- let exitCode = process10.exitCode || 0;
2921
+ let exitCode = process3.exitCode || 0;
2922
2922
  if (exitCode === 0 && contextOptions && typeof contextOptions !== "function" && contextOptions.error) {
2923
2923
  exitCode = 1;
2924
2924
  }
@@ -3026,1651 +3026,6 @@ var require_commander = __commonJS({
3026
3026
  }
3027
3027
  });
3028
3028
 
3029
- // node_modules/cli-spinners/spinners.json
3030
- var require_spinners = __commonJS({
3031
- "node_modules/cli-spinners/spinners.json"(exports2, module2) {
3032
- module2.exports = {
3033
- dots: {
3034
- interval: 80,
3035
- frames: [
3036
- "\u280B",
3037
- "\u2819",
3038
- "\u2839",
3039
- "\u2838",
3040
- "\u283C",
3041
- "\u2834",
3042
- "\u2826",
3043
- "\u2827",
3044
- "\u2807",
3045
- "\u280F"
3046
- ]
3047
- },
3048
- dots2: {
3049
- interval: 80,
3050
- frames: [
3051
- "\u28FE",
3052
- "\u28FD",
3053
- "\u28FB",
3054
- "\u28BF",
3055
- "\u287F",
3056
- "\u28DF",
3057
- "\u28EF",
3058
- "\u28F7"
3059
- ]
3060
- },
3061
- dots3: {
3062
- interval: 80,
3063
- frames: [
3064
- "\u280B",
3065
- "\u2819",
3066
- "\u281A",
3067
- "\u281E",
3068
- "\u2816",
3069
- "\u2826",
3070
- "\u2834",
3071
- "\u2832",
3072
- "\u2833",
3073
- "\u2813"
3074
- ]
3075
- },
3076
- dots4: {
3077
- interval: 80,
3078
- frames: [
3079
- "\u2804",
3080
- "\u2806",
3081
- "\u2807",
3082
- "\u280B",
3083
- "\u2819",
3084
- "\u2838",
3085
- "\u2830",
3086
- "\u2820",
3087
- "\u2830",
3088
- "\u2838",
3089
- "\u2819",
3090
- "\u280B",
3091
- "\u2807",
3092
- "\u2806"
3093
- ]
3094
- },
3095
- dots5: {
3096
- interval: 80,
3097
- frames: [
3098
- "\u280B",
3099
- "\u2819",
3100
- "\u281A",
3101
- "\u2812",
3102
- "\u2802",
3103
- "\u2802",
3104
- "\u2812",
3105
- "\u2832",
3106
- "\u2834",
3107
- "\u2826",
3108
- "\u2816",
3109
- "\u2812",
3110
- "\u2810",
3111
- "\u2810",
3112
- "\u2812",
3113
- "\u2813",
3114
- "\u280B"
3115
- ]
3116
- },
3117
- dots6: {
3118
- interval: 80,
3119
- frames: [
3120
- "\u2801",
3121
- "\u2809",
3122
- "\u2819",
3123
- "\u281A",
3124
- "\u2812",
3125
- "\u2802",
3126
- "\u2802",
3127
- "\u2812",
3128
- "\u2832",
3129
- "\u2834",
3130
- "\u2824",
3131
- "\u2804",
3132
- "\u2804",
3133
- "\u2824",
3134
- "\u2834",
3135
- "\u2832",
3136
- "\u2812",
3137
- "\u2802",
3138
- "\u2802",
3139
- "\u2812",
3140
- "\u281A",
3141
- "\u2819",
3142
- "\u2809",
3143
- "\u2801"
3144
- ]
3145
- },
3146
- dots7: {
3147
- interval: 80,
3148
- frames: [
3149
- "\u2808",
3150
- "\u2809",
3151
- "\u280B",
3152
- "\u2813",
3153
- "\u2812",
3154
- "\u2810",
3155
- "\u2810",
3156
- "\u2812",
3157
- "\u2816",
3158
- "\u2826",
3159
- "\u2824",
3160
- "\u2820",
3161
- "\u2820",
3162
- "\u2824",
3163
- "\u2826",
3164
- "\u2816",
3165
- "\u2812",
3166
- "\u2810",
3167
- "\u2810",
3168
- "\u2812",
3169
- "\u2813",
3170
- "\u280B",
3171
- "\u2809",
3172
- "\u2808"
3173
- ]
3174
- },
3175
- dots8: {
3176
- interval: 80,
3177
- frames: [
3178
- "\u2801",
3179
- "\u2801",
3180
- "\u2809",
3181
- "\u2819",
3182
- "\u281A",
3183
- "\u2812",
3184
- "\u2802",
3185
- "\u2802",
3186
- "\u2812",
3187
- "\u2832",
3188
- "\u2834",
3189
- "\u2824",
3190
- "\u2804",
3191
- "\u2804",
3192
- "\u2824",
3193
- "\u2820",
3194
- "\u2820",
3195
- "\u2824",
3196
- "\u2826",
3197
- "\u2816",
3198
- "\u2812",
3199
- "\u2810",
3200
- "\u2810",
3201
- "\u2812",
3202
- "\u2813",
3203
- "\u280B",
3204
- "\u2809",
3205
- "\u2808",
3206
- "\u2808"
3207
- ]
3208
- },
3209
- dots9: {
3210
- interval: 80,
3211
- frames: [
3212
- "\u28B9",
3213
- "\u28BA",
3214
- "\u28BC",
3215
- "\u28F8",
3216
- "\u28C7",
3217
- "\u2867",
3218
- "\u2857",
3219
- "\u284F"
3220
- ]
3221
- },
3222
- dots10: {
3223
- interval: 80,
3224
- frames: [
3225
- "\u2884",
3226
- "\u2882",
3227
- "\u2881",
3228
- "\u2841",
3229
- "\u2848",
3230
- "\u2850",
3231
- "\u2860"
3232
- ]
3233
- },
3234
- dots11: {
3235
- interval: 100,
3236
- frames: [
3237
- "\u2801",
3238
- "\u2802",
3239
- "\u2804",
3240
- "\u2840",
3241
- "\u2880",
3242
- "\u2820",
3243
- "\u2810",
3244
- "\u2808"
3245
- ]
3246
- },
3247
- dots12: {
3248
- interval: 80,
3249
- frames: [
3250
- "\u2880\u2800",
3251
- "\u2840\u2800",
3252
- "\u2804\u2800",
3253
- "\u2882\u2800",
3254
- "\u2842\u2800",
3255
- "\u2805\u2800",
3256
- "\u2883\u2800",
3257
- "\u2843\u2800",
3258
- "\u280D\u2800",
3259
- "\u288B\u2800",
3260
- "\u284B\u2800",
3261
- "\u280D\u2801",
3262
- "\u288B\u2801",
3263
- "\u284B\u2801",
3264
- "\u280D\u2809",
3265
- "\u280B\u2809",
3266
- "\u280B\u2809",
3267
- "\u2809\u2819",
3268
- "\u2809\u2819",
3269
- "\u2809\u2829",
3270
- "\u2808\u2899",
3271
- "\u2808\u2859",
3272
- "\u2888\u2829",
3273
- "\u2840\u2899",
3274
- "\u2804\u2859",
3275
- "\u2882\u2829",
3276
- "\u2842\u2898",
3277
- "\u2805\u2858",
3278
- "\u2883\u2828",
3279
- "\u2843\u2890",
3280
- "\u280D\u2850",
3281
- "\u288B\u2820",
3282
- "\u284B\u2880",
3283
- "\u280D\u2841",
3284
- "\u288B\u2801",
3285
- "\u284B\u2801",
3286
- "\u280D\u2809",
3287
- "\u280B\u2809",
3288
- "\u280B\u2809",
3289
- "\u2809\u2819",
3290
- "\u2809\u2819",
3291
- "\u2809\u2829",
3292
- "\u2808\u2899",
3293
- "\u2808\u2859",
3294
- "\u2808\u2829",
3295
- "\u2800\u2899",
3296
- "\u2800\u2859",
3297
- "\u2800\u2829",
3298
- "\u2800\u2898",
3299
- "\u2800\u2858",
3300
- "\u2800\u2828",
3301
- "\u2800\u2890",
3302
- "\u2800\u2850",
3303
- "\u2800\u2820",
3304
- "\u2800\u2880",
3305
- "\u2800\u2840"
3306
- ]
3307
- },
3308
- dots13: {
3309
- interval: 80,
3310
- frames: [
3311
- "\u28FC",
3312
- "\u28F9",
3313
- "\u28BB",
3314
- "\u283F",
3315
- "\u285F",
3316
- "\u28CF",
3317
- "\u28E7",
3318
- "\u28F6"
3319
- ]
3320
- },
3321
- dots8Bit: {
3322
- interval: 80,
3323
- frames: [
3324
- "\u2800",
3325
- "\u2801",
3326
- "\u2802",
3327
- "\u2803",
3328
- "\u2804",
3329
- "\u2805",
3330
- "\u2806",
3331
- "\u2807",
3332
- "\u2840",
3333
- "\u2841",
3334
- "\u2842",
3335
- "\u2843",
3336
- "\u2844",
3337
- "\u2845",
3338
- "\u2846",
3339
- "\u2847",
3340
- "\u2808",
3341
- "\u2809",
3342
- "\u280A",
3343
- "\u280B",
3344
- "\u280C",
3345
- "\u280D",
3346
- "\u280E",
3347
- "\u280F",
3348
- "\u2848",
3349
- "\u2849",
3350
- "\u284A",
3351
- "\u284B",
3352
- "\u284C",
3353
- "\u284D",
3354
- "\u284E",
3355
- "\u284F",
3356
- "\u2810",
3357
- "\u2811",
3358
- "\u2812",
3359
- "\u2813",
3360
- "\u2814",
3361
- "\u2815",
3362
- "\u2816",
3363
- "\u2817",
3364
- "\u2850",
3365
- "\u2851",
3366
- "\u2852",
3367
- "\u2853",
3368
- "\u2854",
3369
- "\u2855",
3370
- "\u2856",
3371
- "\u2857",
3372
- "\u2818",
3373
- "\u2819",
3374
- "\u281A",
3375
- "\u281B",
3376
- "\u281C",
3377
- "\u281D",
3378
- "\u281E",
3379
- "\u281F",
3380
- "\u2858",
3381
- "\u2859",
3382
- "\u285A",
3383
- "\u285B",
3384
- "\u285C",
3385
- "\u285D",
3386
- "\u285E",
3387
- "\u285F",
3388
- "\u2820",
3389
- "\u2821",
3390
- "\u2822",
3391
- "\u2823",
3392
- "\u2824",
3393
- "\u2825",
3394
- "\u2826",
3395
- "\u2827",
3396
- "\u2860",
3397
- "\u2861",
3398
- "\u2862",
3399
- "\u2863",
3400
- "\u2864",
3401
- "\u2865",
3402
- "\u2866",
3403
- "\u2867",
3404
- "\u2828",
3405
- "\u2829",
3406
- "\u282A",
3407
- "\u282B",
3408
- "\u282C",
3409
- "\u282D",
3410
- "\u282E",
3411
- "\u282F",
3412
- "\u2868",
3413
- "\u2869",
3414
- "\u286A",
3415
- "\u286B",
3416
- "\u286C",
3417
- "\u286D",
3418
- "\u286E",
3419
- "\u286F",
3420
- "\u2830",
3421
- "\u2831",
3422
- "\u2832",
3423
- "\u2833",
3424
- "\u2834",
3425
- "\u2835",
3426
- "\u2836",
3427
- "\u2837",
3428
- "\u2870",
3429
- "\u2871",
3430
- "\u2872",
3431
- "\u2873",
3432
- "\u2874",
3433
- "\u2875",
3434
- "\u2876",
3435
- "\u2877",
3436
- "\u2838",
3437
- "\u2839",
3438
- "\u283A",
3439
- "\u283B",
3440
- "\u283C",
3441
- "\u283D",
3442
- "\u283E",
3443
- "\u283F",
3444
- "\u2878",
3445
- "\u2879",
3446
- "\u287A",
3447
- "\u287B",
3448
- "\u287C",
3449
- "\u287D",
3450
- "\u287E",
3451
- "\u287F",
3452
- "\u2880",
3453
- "\u2881",
3454
- "\u2882",
3455
- "\u2883",
3456
- "\u2884",
3457
- "\u2885",
3458
- "\u2886",
3459
- "\u2887",
3460
- "\u28C0",
3461
- "\u28C1",
3462
- "\u28C2",
3463
- "\u28C3",
3464
- "\u28C4",
3465
- "\u28C5",
3466
- "\u28C6",
3467
- "\u28C7",
3468
- "\u2888",
3469
- "\u2889",
3470
- "\u288A",
3471
- "\u288B",
3472
- "\u288C",
3473
- "\u288D",
3474
- "\u288E",
3475
- "\u288F",
3476
- "\u28C8",
3477
- "\u28C9",
3478
- "\u28CA",
3479
- "\u28CB",
3480
- "\u28CC",
3481
- "\u28CD",
3482
- "\u28CE",
3483
- "\u28CF",
3484
- "\u2890",
3485
- "\u2891",
3486
- "\u2892",
3487
- "\u2893",
3488
- "\u2894",
3489
- "\u2895",
3490
- "\u2896",
3491
- "\u2897",
3492
- "\u28D0",
3493
- "\u28D1",
3494
- "\u28D2",
3495
- "\u28D3",
3496
- "\u28D4",
3497
- "\u28D5",
3498
- "\u28D6",
3499
- "\u28D7",
3500
- "\u2898",
3501
- "\u2899",
3502
- "\u289A",
3503
- "\u289B",
3504
- "\u289C",
3505
- "\u289D",
3506
- "\u289E",
3507
- "\u289F",
3508
- "\u28D8",
3509
- "\u28D9",
3510
- "\u28DA",
3511
- "\u28DB",
3512
- "\u28DC",
3513
- "\u28DD",
3514
- "\u28DE",
3515
- "\u28DF",
3516
- "\u28A0",
3517
- "\u28A1",
3518
- "\u28A2",
3519
- "\u28A3",
3520
- "\u28A4",
3521
- "\u28A5",
3522
- "\u28A6",
3523
- "\u28A7",
3524
- "\u28E0",
3525
- "\u28E1",
3526
- "\u28E2",
3527
- "\u28E3",
3528
- "\u28E4",
3529
- "\u28E5",
3530
- "\u28E6",
3531
- "\u28E7",
3532
- "\u28A8",
3533
- "\u28A9",
3534
- "\u28AA",
3535
- "\u28AB",
3536
- "\u28AC",
3537
- "\u28AD",
3538
- "\u28AE",
3539
- "\u28AF",
3540
- "\u28E8",
3541
- "\u28E9",
3542
- "\u28EA",
3543
- "\u28EB",
3544
- "\u28EC",
3545
- "\u28ED",
3546
- "\u28EE",
3547
- "\u28EF",
3548
- "\u28B0",
3549
- "\u28B1",
3550
- "\u28B2",
3551
- "\u28B3",
3552
- "\u28B4",
3553
- "\u28B5",
3554
- "\u28B6",
3555
- "\u28B7",
3556
- "\u28F0",
3557
- "\u28F1",
3558
- "\u28F2",
3559
- "\u28F3",
3560
- "\u28F4",
3561
- "\u28F5",
3562
- "\u28F6",
3563
- "\u28F7",
3564
- "\u28B8",
3565
- "\u28B9",
3566
- "\u28BA",
3567
- "\u28BB",
3568
- "\u28BC",
3569
- "\u28BD",
3570
- "\u28BE",
3571
- "\u28BF",
3572
- "\u28F8",
3573
- "\u28F9",
3574
- "\u28FA",
3575
- "\u28FB",
3576
- "\u28FC",
3577
- "\u28FD",
3578
- "\u28FE",
3579
- "\u28FF"
3580
- ]
3581
- },
3582
- sand: {
3583
- interval: 80,
3584
- frames: [
3585
- "\u2801",
3586
- "\u2802",
3587
- "\u2804",
3588
- "\u2840",
3589
- "\u2848",
3590
- "\u2850",
3591
- "\u2860",
3592
- "\u28C0",
3593
- "\u28C1",
3594
- "\u28C2",
3595
- "\u28C4",
3596
- "\u28CC",
3597
- "\u28D4",
3598
- "\u28E4",
3599
- "\u28E5",
3600
- "\u28E6",
3601
- "\u28EE",
3602
- "\u28F6",
3603
- "\u28F7",
3604
- "\u28FF",
3605
- "\u287F",
3606
- "\u283F",
3607
- "\u289F",
3608
- "\u281F",
3609
- "\u285B",
3610
- "\u281B",
3611
- "\u282B",
3612
- "\u288B",
3613
- "\u280B",
3614
- "\u280D",
3615
- "\u2849",
3616
- "\u2809",
3617
- "\u2811",
3618
- "\u2821",
3619
- "\u2881"
3620
- ]
3621
- },
3622
- line: {
3623
- interval: 130,
3624
- frames: [
3625
- "-",
3626
- "\\",
3627
- "|",
3628
- "/"
3629
- ]
3630
- },
3631
- line2: {
3632
- interval: 100,
3633
- frames: [
3634
- "\u2802",
3635
- "-",
3636
- "\u2013",
3637
- "\u2014",
3638
- "\u2013",
3639
- "-"
3640
- ]
3641
- },
3642
- pipe: {
3643
- interval: 100,
3644
- frames: [
3645
- "\u2524",
3646
- "\u2518",
3647
- "\u2534",
3648
- "\u2514",
3649
- "\u251C",
3650
- "\u250C",
3651
- "\u252C",
3652
- "\u2510"
3653
- ]
3654
- },
3655
- simpleDots: {
3656
- interval: 400,
3657
- frames: [
3658
- ". ",
3659
- ".. ",
3660
- "...",
3661
- " "
3662
- ]
3663
- },
3664
- simpleDotsScrolling: {
3665
- interval: 200,
3666
- frames: [
3667
- ". ",
3668
- ".. ",
3669
- "...",
3670
- " ..",
3671
- " .",
3672
- " "
3673
- ]
3674
- },
3675
- star: {
3676
- interval: 70,
3677
- frames: [
3678
- "\u2736",
3679
- "\u2738",
3680
- "\u2739",
3681
- "\u273A",
3682
- "\u2739",
3683
- "\u2737"
3684
- ]
3685
- },
3686
- star2: {
3687
- interval: 80,
3688
- frames: [
3689
- "+",
3690
- "x",
3691
- "*"
3692
- ]
3693
- },
3694
- flip: {
3695
- interval: 70,
3696
- frames: [
3697
- "_",
3698
- "_",
3699
- "_",
3700
- "-",
3701
- "`",
3702
- "`",
3703
- "'",
3704
- "\xB4",
3705
- "-",
3706
- "_",
3707
- "_",
3708
- "_"
3709
- ]
3710
- },
3711
- hamburger: {
3712
- interval: 100,
3713
- frames: [
3714
- "\u2631",
3715
- "\u2632",
3716
- "\u2634"
3717
- ]
3718
- },
3719
- growVertical: {
3720
- interval: 120,
3721
- frames: [
3722
- "\u2581",
3723
- "\u2583",
3724
- "\u2584",
3725
- "\u2585",
3726
- "\u2586",
3727
- "\u2587",
3728
- "\u2586",
3729
- "\u2585",
3730
- "\u2584",
3731
- "\u2583"
3732
- ]
3733
- },
3734
- growHorizontal: {
3735
- interval: 120,
3736
- frames: [
3737
- "\u258F",
3738
- "\u258E",
3739
- "\u258D",
3740
- "\u258C",
3741
- "\u258B",
3742
- "\u258A",
3743
- "\u2589",
3744
- "\u258A",
3745
- "\u258B",
3746
- "\u258C",
3747
- "\u258D",
3748
- "\u258E"
3749
- ]
3750
- },
3751
- balloon: {
3752
- interval: 140,
3753
- frames: [
3754
- " ",
3755
- ".",
3756
- "o",
3757
- "O",
3758
- "@",
3759
- "*",
3760
- " "
3761
- ]
3762
- },
3763
- balloon2: {
3764
- interval: 120,
3765
- frames: [
3766
- ".",
3767
- "o",
3768
- "O",
3769
- "\xB0",
3770
- "O",
3771
- "o",
3772
- "."
3773
- ]
3774
- },
3775
- noise: {
3776
- interval: 100,
3777
- frames: [
3778
- "\u2593",
3779
- "\u2592",
3780
- "\u2591"
3781
- ]
3782
- },
3783
- bounce: {
3784
- interval: 120,
3785
- frames: [
3786
- "\u2801",
3787
- "\u2802",
3788
- "\u2804",
3789
- "\u2802"
3790
- ]
3791
- },
3792
- boxBounce: {
3793
- interval: 120,
3794
- frames: [
3795
- "\u2596",
3796
- "\u2598",
3797
- "\u259D",
3798
- "\u2597"
3799
- ]
3800
- },
3801
- boxBounce2: {
3802
- interval: 100,
3803
- frames: [
3804
- "\u258C",
3805
- "\u2580",
3806
- "\u2590",
3807
- "\u2584"
3808
- ]
3809
- },
3810
- triangle: {
3811
- interval: 50,
3812
- frames: [
3813
- "\u25E2",
3814
- "\u25E3",
3815
- "\u25E4",
3816
- "\u25E5"
3817
- ]
3818
- },
3819
- binary: {
3820
- interval: 80,
3821
- frames: [
3822
- "010010",
3823
- "001100",
3824
- "100101",
3825
- "111010",
3826
- "111101",
3827
- "010111",
3828
- "101011",
3829
- "111000",
3830
- "110011",
3831
- "110101"
3832
- ]
3833
- },
3834
- arc: {
3835
- interval: 100,
3836
- frames: [
3837
- "\u25DC",
3838
- "\u25E0",
3839
- "\u25DD",
3840
- "\u25DE",
3841
- "\u25E1",
3842
- "\u25DF"
3843
- ]
3844
- },
3845
- circle: {
3846
- interval: 120,
3847
- frames: [
3848
- "\u25E1",
3849
- "\u2299",
3850
- "\u25E0"
3851
- ]
3852
- },
3853
- squareCorners: {
3854
- interval: 180,
3855
- frames: [
3856
- "\u25F0",
3857
- "\u25F3",
3858
- "\u25F2",
3859
- "\u25F1"
3860
- ]
3861
- },
3862
- circleQuarters: {
3863
- interval: 120,
3864
- frames: [
3865
- "\u25F4",
3866
- "\u25F7",
3867
- "\u25F6",
3868
- "\u25F5"
3869
- ]
3870
- },
3871
- circleHalves: {
3872
- interval: 50,
3873
- frames: [
3874
- "\u25D0",
3875
- "\u25D3",
3876
- "\u25D1",
3877
- "\u25D2"
3878
- ]
3879
- },
3880
- squish: {
3881
- interval: 100,
3882
- frames: [
3883
- "\u256B",
3884
- "\u256A"
3885
- ]
3886
- },
3887
- toggle: {
3888
- interval: 250,
3889
- frames: [
3890
- "\u22B6",
3891
- "\u22B7"
3892
- ]
3893
- },
3894
- toggle2: {
3895
- interval: 80,
3896
- frames: [
3897
- "\u25AB",
3898
- "\u25AA"
3899
- ]
3900
- },
3901
- toggle3: {
3902
- interval: 120,
3903
- frames: [
3904
- "\u25A1",
3905
- "\u25A0"
3906
- ]
3907
- },
3908
- toggle4: {
3909
- interval: 100,
3910
- frames: [
3911
- "\u25A0",
3912
- "\u25A1",
3913
- "\u25AA",
3914
- "\u25AB"
3915
- ]
3916
- },
3917
- toggle5: {
3918
- interval: 100,
3919
- frames: [
3920
- "\u25AE",
3921
- "\u25AF"
3922
- ]
3923
- },
3924
- toggle6: {
3925
- interval: 300,
3926
- frames: [
3927
- "\u101D",
3928
- "\u1040"
3929
- ]
3930
- },
3931
- toggle7: {
3932
- interval: 80,
3933
- frames: [
3934
- "\u29BE",
3935
- "\u29BF"
3936
- ]
3937
- },
3938
- toggle8: {
3939
- interval: 100,
3940
- frames: [
3941
- "\u25CD",
3942
- "\u25CC"
3943
- ]
3944
- },
3945
- toggle9: {
3946
- interval: 100,
3947
- frames: [
3948
- "\u25C9",
3949
- "\u25CE"
3950
- ]
3951
- },
3952
- toggle10: {
3953
- interval: 100,
3954
- frames: [
3955
- "\u3282",
3956
- "\u3280",
3957
- "\u3281"
3958
- ]
3959
- },
3960
- toggle11: {
3961
- interval: 50,
3962
- frames: [
3963
- "\u29C7",
3964
- "\u29C6"
3965
- ]
3966
- },
3967
- toggle12: {
3968
- interval: 120,
3969
- frames: [
3970
- "\u2617",
3971
- "\u2616"
3972
- ]
3973
- },
3974
- toggle13: {
3975
- interval: 80,
3976
- frames: [
3977
- "=",
3978
- "*",
3979
- "-"
3980
- ]
3981
- },
3982
- arrow: {
3983
- interval: 100,
3984
- frames: [
3985
- "\u2190",
3986
- "\u2196",
3987
- "\u2191",
3988
- "\u2197",
3989
- "\u2192",
3990
- "\u2198",
3991
- "\u2193",
3992
- "\u2199"
3993
- ]
3994
- },
3995
- arrow2: {
3996
- interval: 80,
3997
- frames: [
3998
- "\u2B06\uFE0F ",
3999
- "\u2197\uFE0F ",
4000
- "\u27A1\uFE0F ",
4001
- "\u2198\uFE0F ",
4002
- "\u2B07\uFE0F ",
4003
- "\u2199\uFE0F ",
4004
- "\u2B05\uFE0F ",
4005
- "\u2196\uFE0F "
4006
- ]
4007
- },
4008
- arrow3: {
4009
- interval: 120,
4010
- frames: [
4011
- "\u25B9\u25B9\u25B9\u25B9\u25B9",
4012
- "\u25B8\u25B9\u25B9\u25B9\u25B9",
4013
- "\u25B9\u25B8\u25B9\u25B9\u25B9",
4014
- "\u25B9\u25B9\u25B8\u25B9\u25B9",
4015
- "\u25B9\u25B9\u25B9\u25B8\u25B9",
4016
- "\u25B9\u25B9\u25B9\u25B9\u25B8"
4017
- ]
4018
- },
4019
- bouncingBar: {
4020
- interval: 80,
4021
- frames: [
4022
- "[ ]",
4023
- "[= ]",
4024
- "[== ]",
4025
- "[=== ]",
4026
- "[====]",
4027
- "[ ===]",
4028
- "[ ==]",
4029
- "[ =]",
4030
- "[ ]",
4031
- "[ =]",
4032
- "[ ==]",
4033
- "[ ===]",
4034
- "[====]",
4035
- "[=== ]",
4036
- "[== ]",
4037
- "[= ]"
4038
- ]
4039
- },
4040
- bouncingBall: {
4041
- interval: 80,
4042
- frames: [
4043
- "( \u25CF )",
4044
- "( \u25CF )",
4045
- "( \u25CF )",
4046
- "( \u25CF )",
4047
- "( \u25CF)",
4048
- "( \u25CF )",
4049
- "( \u25CF )",
4050
- "( \u25CF )",
4051
- "( \u25CF )",
4052
- "(\u25CF )"
4053
- ]
4054
- },
4055
- smiley: {
4056
- interval: 200,
4057
- frames: [
4058
- "\u{1F604} ",
4059
- "\u{1F61D} "
4060
- ]
4061
- },
4062
- monkey: {
4063
- interval: 300,
4064
- frames: [
4065
- "\u{1F648} ",
4066
- "\u{1F648} ",
4067
- "\u{1F649} ",
4068
- "\u{1F64A} "
4069
- ]
4070
- },
4071
- hearts: {
4072
- interval: 100,
4073
- frames: [
4074
- "\u{1F49B} ",
4075
- "\u{1F499} ",
4076
- "\u{1F49C} ",
4077
- "\u{1F49A} ",
4078
- "\u2764\uFE0F "
4079
- ]
4080
- },
4081
- clock: {
4082
- interval: 100,
4083
- frames: [
4084
- "\u{1F55B} ",
4085
- "\u{1F550} ",
4086
- "\u{1F551} ",
4087
- "\u{1F552} ",
4088
- "\u{1F553} ",
4089
- "\u{1F554} ",
4090
- "\u{1F555} ",
4091
- "\u{1F556} ",
4092
- "\u{1F557} ",
4093
- "\u{1F558} ",
4094
- "\u{1F559} ",
4095
- "\u{1F55A} "
4096
- ]
4097
- },
4098
- earth: {
4099
- interval: 180,
4100
- frames: [
4101
- "\u{1F30D} ",
4102
- "\u{1F30E} ",
4103
- "\u{1F30F} "
4104
- ]
4105
- },
4106
- material: {
4107
- interval: 17,
4108
- frames: [
4109
- "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4110
- "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4111
- "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4112
- "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4113
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4114
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4115
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4116
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4117
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4118
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4119
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4120
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4121
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4122
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
4123
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
4124
- "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
4125
- "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
4126
- "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
4127
- "\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
4128
- "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
4129
- "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
4130
- "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
4131
- "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
4132
- "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
4133
- "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
4134
- "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
4135
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4136
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4137
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4138
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4139
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4140
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4141
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4142
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4143
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4144
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4145
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4146
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4147
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588",
4148
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
4149
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
4150
- "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
4151
- "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
4152
- "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
4153
- "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
4154
- "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
4155
- "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
4156
- "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
4157
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
4158
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4159
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4160
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4161
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4162
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4163
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4164
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4165
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4166
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
4167
- "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
4168
- "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
4169
- "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
4170
- "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
4171
- "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
4172
- "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
4173
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
4174
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
4175
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
4176
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
4177
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
4178
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
4179
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
4180
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
4181
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
4182
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
4183
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4184
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
4185
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
4186
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
4187
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
4188
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
4189
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
4190
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
4191
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
4192
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
4193
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
4194
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
4195
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
4196
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
4197
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4198
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4199
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
4200
- "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581"
4201
- ]
4202
- },
4203
- moon: {
4204
- interval: 80,
4205
- frames: [
4206
- "\u{1F311} ",
4207
- "\u{1F312} ",
4208
- "\u{1F313} ",
4209
- "\u{1F314} ",
4210
- "\u{1F315} ",
4211
- "\u{1F316} ",
4212
- "\u{1F317} ",
4213
- "\u{1F318} "
4214
- ]
4215
- },
4216
- runner: {
4217
- interval: 140,
4218
- frames: [
4219
- "\u{1F6B6} ",
4220
- "\u{1F3C3} "
4221
- ]
4222
- },
4223
- pong: {
4224
- interval: 80,
4225
- frames: [
4226
- "\u2590\u2802 \u258C",
4227
- "\u2590\u2808 \u258C",
4228
- "\u2590 \u2802 \u258C",
4229
- "\u2590 \u2820 \u258C",
4230
- "\u2590 \u2840 \u258C",
4231
- "\u2590 \u2820 \u258C",
4232
- "\u2590 \u2802 \u258C",
4233
- "\u2590 \u2808 \u258C",
4234
- "\u2590 \u2802 \u258C",
4235
- "\u2590 \u2820 \u258C",
4236
- "\u2590 \u2840 \u258C",
4237
- "\u2590 \u2820 \u258C",
4238
- "\u2590 \u2802 \u258C",
4239
- "\u2590 \u2808 \u258C",
4240
- "\u2590 \u2802\u258C",
4241
- "\u2590 \u2820\u258C",
4242
- "\u2590 \u2840\u258C",
4243
- "\u2590 \u2820 \u258C",
4244
- "\u2590 \u2802 \u258C",
4245
- "\u2590 \u2808 \u258C",
4246
- "\u2590 \u2802 \u258C",
4247
- "\u2590 \u2820 \u258C",
4248
- "\u2590 \u2840 \u258C",
4249
- "\u2590 \u2820 \u258C",
4250
- "\u2590 \u2802 \u258C",
4251
- "\u2590 \u2808 \u258C",
4252
- "\u2590 \u2802 \u258C",
4253
- "\u2590 \u2820 \u258C",
4254
- "\u2590 \u2840 \u258C",
4255
- "\u2590\u2820 \u258C"
4256
- ]
4257
- },
4258
- shark: {
4259
- interval: 120,
4260
- frames: [
4261
- "\u2590|\\____________\u258C",
4262
- "\u2590_|\\___________\u258C",
4263
- "\u2590__|\\__________\u258C",
4264
- "\u2590___|\\_________\u258C",
4265
- "\u2590____|\\________\u258C",
4266
- "\u2590_____|\\_______\u258C",
4267
- "\u2590______|\\______\u258C",
4268
- "\u2590_______|\\_____\u258C",
4269
- "\u2590________|\\____\u258C",
4270
- "\u2590_________|\\___\u258C",
4271
- "\u2590__________|\\__\u258C",
4272
- "\u2590___________|\\_\u258C",
4273
- "\u2590____________|\\\u258C",
4274
- "\u2590____________/|\u258C",
4275
- "\u2590___________/|_\u258C",
4276
- "\u2590__________/|__\u258C",
4277
- "\u2590_________/|___\u258C",
4278
- "\u2590________/|____\u258C",
4279
- "\u2590_______/|_____\u258C",
4280
- "\u2590______/|______\u258C",
4281
- "\u2590_____/|_______\u258C",
4282
- "\u2590____/|________\u258C",
4283
- "\u2590___/|_________\u258C",
4284
- "\u2590__/|__________\u258C",
4285
- "\u2590_/|___________\u258C",
4286
- "\u2590/|____________\u258C"
4287
- ]
4288
- },
4289
- dqpb: {
4290
- interval: 100,
4291
- frames: [
4292
- "d",
4293
- "q",
4294
- "p",
4295
- "b"
4296
- ]
4297
- },
4298
- weather: {
4299
- interval: 100,
4300
- frames: [
4301
- "\u2600\uFE0F ",
4302
- "\u2600\uFE0F ",
4303
- "\u2600\uFE0F ",
4304
- "\u{1F324} ",
4305
- "\u26C5\uFE0F ",
4306
- "\u{1F325} ",
4307
- "\u2601\uFE0F ",
4308
- "\u{1F327} ",
4309
- "\u{1F328} ",
4310
- "\u{1F327} ",
4311
- "\u{1F328} ",
4312
- "\u{1F327} ",
4313
- "\u{1F328} ",
4314
- "\u26C8 ",
4315
- "\u{1F328} ",
4316
- "\u{1F327} ",
4317
- "\u{1F328} ",
4318
- "\u2601\uFE0F ",
4319
- "\u{1F325} ",
4320
- "\u26C5\uFE0F ",
4321
- "\u{1F324} ",
4322
- "\u2600\uFE0F ",
4323
- "\u2600\uFE0F "
4324
- ]
4325
- },
4326
- christmas: {
4327
- interval: 400,
4328
- frames: [
4329
- "\u{1F332}",
4330
- "\u{1F384}"
4331
- ]
4332
- },
4333
- grenade: {
4334
- interval: 80,
4335
- frames: [
4336
- "\u060C ",
4337
- "\u2032 ",
4338
- " \xB4 ",
4339
- " \u203E ",
4340
- " \u2E0C",
4341
- " \u2E0A",
4342
- " |",
4343
- " \u204E",
4344
- " \u2055",
4345
- " \u0DF4 ",
4346
- " \u2053",
4347
- " ",
4348
- " ",
4349
- " "
4350
- ]
4351
- },
4352
- point: {
4353
- interval: 125,
4354
- frames: [
4355
- "\u2219\u2219\u2219",
4356
- "\u25CF\u2219\u2219",
4357
- "\u2219\u25CF\u2219",
4358
- "\u2219\u2219\u25CF",
4359
- "\u2219\u2219\u2219"
4360
- ]
4361
- },
4362
- layer: {
4363
- interval: 150,
4364
- frames: [
4365
- "-",
4366
- "=",
4367
- "\u2261"
4368
- ]
4369
- },
4370
- betaWave: {
4371
- interval: 80,
4372
- frames: [
4373
- "\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2",
4374
- "\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2",
4375
- "\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2",
4376
- "\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2",
4377
- "\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2",
4378
- "\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2",
4379
- "\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1"
4380
- ]
4381
- },
4382
- fingerDance: {
4383
- interval: 160,
4384
- frames: [
4385
- "\u{1F918} ",
4386
- "\u{1F91F} ",
4387
- "\u{1F596} ",
4388
- "\u270B ",
4389
- "\u{1F91A} ",
4390
- "\u{1F446} "
4391
- ]
4392
- },
4393
- fistBump: {
4394
- interval: 80,
4395
- frames: [
4396
- "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
4397
- "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
4398
- "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
4399
- "\u3000\u{1F91C}\u3000\u3000\u{1F91B}\u3000 ",
4400
- "\u3000\u3000\u{1F91C}\u{1F91B}\u3000\u3000 ",
4401
- "\u3000\u{1F91C}\u2728\u{1F91B}\u3000\u3000 ",
4402
- "\u{1F91C}\u3000\u2728\u3000\u{1F91B}\u3000 "
4403
- ]
4404
- },
4405
- soccerHeader: {
4406
- interval: 80,
4407
- frames: [
4408
- " \u{1F9D1}\u26BD\uFE0F \u{1F9D1} ",
4409
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
4410
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
4411
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
4412
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
4413
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
4414
- "\u{1F9D1} \u26BD\uFE0F\u{1F9D1} ",
4415
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
4416
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
4417
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
4418
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
4419
- "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} "
4420
- ]
4421
- },
4422
- mindblown: {
4423
- interval: 160,
4424
- frames: [
4425
- "\u{1F610} ",
4426
- "\u{1F610} ",
4427
- "\u{1F62E} ",
4428
- "\u{1F62E} ",
4429
- "\u{1F626} ",
4430
- "\u{1F626} ",
4431
- "\u{1F627} ",
4432
- "\u{1F627} ",
4433
- "\u{1F92F} ",
4434
- "\u{1F4A5} ",
4435
- "\u2728 ",
4436
- "\u3000 ",
4437
- "\u3000 ",
4438
- "\u3000 "
4439
- ]
4440
- },
4441
- speaker: {
4442
- interval: 160,
4443
- frames: [
4444
- "\u{1F508} ",
4445
- "\u{1F509} ",
4446
- "\u{1F50A} ",
4447
- "\u{1F509} "
4448
- ]
4449
- },
4450
- orangePulse: {
4451
- interval: 100,
4452
- frames: [
4453
- "\u{1F538} ",
4454
- "\u{1F536} ",
4455
- "\u{1F7E0} ",
4456
- "\u{1F7E0} ",
4457
- "\u{1F536} "
4458
- ]
4459
- },
4460
- bluePulse: {
4461
- interval: 100,
4462
- frames: [
4463
- "\u{1F539} ",
4464
- "\u{1F537} ",
4465
- "\u{1F535} ",
4466
- "\u{1F535} ",
4467
- "\u{1F537} "
4468
- ]
4469
- },
4470
- orangeBluePulse: {
4471
- interval: 100,
4472
- frames: [
4473
- "\u{1F538} ",
4474
- "\u{1F536} ",
4475
- "\u{1F7E0} ",
4476
- "\u{1F7E0} ",
4477
- "\u{1F536} ",
4478
- "\u{1F539} ",
4479
- "\u{1F537} ",
4480
- "\u{1F535} ",
4481
- "\u{1F535} ",
4482
- "\u{1F537} "
4483
- ]
4484
- },
4485
- timeTravel: {
4486
- interval: 100,
4487
- frames: [
4488
- "\u{1F55B} ",
4489
- "\u{1F55A} ",
4490
- "\u{1F559} ",
4491
- "\u{1F558} ",
4492
- "\u{1F557} ",
4493
- "\u{1F556} ",
4494
- "\u{1F555} ",
4495
- "\u{1F554} ",
4496
- "\u{1F553} ",
4497
- "\u{1F552} ",
4498
- "\u{1F551} ",
4499
- "\u{1F550} "
4500
- ]
4501
- },
4502
- aesthetic: {
4503
- interval: 80,
4504
- frames: [
4505
- "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1",
4506
- "\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1",
4507
- "\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1",
4508
- "\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1",
4509
- "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1",
4510
- "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1",
4511
- "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0",
4512
- "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1"
4513
- ]
4514
- },
4515
- dwarfFortress: {
4516
- interval: 80,
4517
- frames: [
4518
- " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4519
- "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4520
- "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4521
- "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4522
- "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4523
- "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4524
- "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4525
- "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4526
- "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4527
- "\u263A \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4528
- " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4529
- " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4530
- " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4531
- " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4532
- " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4533
- " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4534
- " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4535
- " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4536
- " \u263A \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4537
- " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4538
- " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4539
- " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
4540
- " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
4541
- " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
4542
- " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
4543
- " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
4544
- " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
4545
- " \u263A \u2588\u2588\u2588\xA3\xA3\xA3 ",
4546
- " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
4547
- " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
4548
- " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
4549
- " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
4550
- " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
4551
- " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
4552
- " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
4553
- " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
4554
- " \u263A \u2588\u2588\xA3\xA3\xA3 ",
4555
- " \u263A\u2588\u2588\xA3\xA3\xA3 ",
4556
- " \u263A\u2588\u2588\xA3\xA3\xA3 ",
4557
- " \u263A\u2593\u2588\xA3\xA3\xA3 ",
4558
- " \u263A\u2593\u2588\xA3\xA3\xA3 ",
4559
- " \u263A\u2592\u2588\xA3\xA3\xA3 ",
4560
- " \u263A\u2592\u2588\xA3\xA3\xA3 ",
4561
- " \u263A\u2591\u2588\xA3\xA3\xA3 ",
4562
- " \u263A\u2591\u2588\xA3\xA3\xA3 ",
4563
- " \u263A \u2588\xA3\xA3\xA3 ",
4564
- " \u263A\u2588\xA3\xA3\xA3 ",
4565
- " \u263A\u2588\xA3\xA3\xA3 ",
4566
- " \u263A\u2593\xA3\xA3\xA3 ",
4567
- " \u263A\u2593\xA3\xA3\xA3 ",
4568
- " \u263A\u2592\xA3\xA3\xA3 ",
4569
- " \u263A\u2592\xA3\xA3\xA3 ",
4570
- " \u263A\u2591\xA3\xA3\xA3 ",
4571
- " \u263A\u2591\xA3\xA3\xA3 ",
4572
- " \u263A \xA3\xA3\xA3 ",
4573
- " \u263A\xA3\xA3\xA3 ",
4574
- " \u263A\xA3\xA3\xA3 ",
4575
- " \u263A\u2593\xA3\xA3 ",
4576
- " \u263A\u2593\xA3\xA3 ",
4577
- " \u263A\u2592\xA3\xA3 ",
4578
- " \u263A\u2592\xA3\xA3 ",
4579
- " \u263A\u2591\xA3\xA3 ",
4580
- " \u263A\u2591\xA3\xA3 ",
4581
- " \u263A \xA3\xA3 ",
4582
- " \u263A\xA3\xA3 ",
4583
- " \u263A\xA3\xA3 ",
4584
- " \u263A\u2593\xA3 ",
4585
- " \u263A\u2593\xA3 ",
4586
- " \u263A\u2592\xA3 ",
4587
- " \u263A\u2592\xA3 ",
4588
- " \u263A\u2591\xA3 ",
4589
- " \u263A\u2591\xA3 ",
4590
- " \u263A \xA3 ",
4591
- " \u263A\xA3 ",
4592
- " \u263A\xA3 ",
4593
- " \u263A\u2593 ",
4594
- " \u263A\u2593 ",
4595
- " \u263A\u2592 ",
4596
- " \u263A\u2592 ",
4597
- " \u263A\u2591 ",
4598
- " \u263A\u2591 ",
4599
- " \u263A ",
4600
- " \u263A &",
4601
- " \u263A \u263C&",
4602
- " \u263A \u263C &",
4603
- " \u263A\u263C &",
4604
- " \u263A\u263C & ",
4605
- " \u203C & ",
4606
- " \u263A & ",
4607
- " \u203C & ",
4608
- " \u263A & ",
4609
- " \u203C & ",
4610
- " \u263A & ",
4611
- "\u203C & ",
4612
- " & ",
4613
- " & ",
4614
- " & \u2591 ",
4615
- " & \u2592 ",
4616
- " & \u2593 ",
4617
- " & \xA3 ",
4618
- " & \u2591\xA3 ",
4619
- " & \u2592\xA3 ",
4620
- " & \u2593\xA3 ",
4621
- " & \xA3\xA3 ",
4622
- " & \u2591\xA3\xA3 ",
4623
- " & \u2592\xA3\xA3 ",
4624
- "& \u2593\xA3\xA3 ",
4625
- "& \xA3\xA3\xA3 ",
4626
- " \u2591\xA3\xA3\xA3 ",
4627
- " \u2592\xA3\xA3\xA3 ",
4628
- " \u2593\xA3\xA3\xA3 ",
4629
- " \u2588\xA3\xA3\xA3 ",
4630
- " \u2591\u2588\xA3\xA3\xA3 ",
4631
- " \u2592\u2588\xA3\xA3\xA3 ",
4632
- " \u2593\u2588\xA3\xA3\xA3 ",
4633
- " \u2588\u2588\xA3\xA3\xA3 ",
4634
- " \u2591\u2588\u2588\xA3\xA3\xA3 ",
4635
- " \u2592\u2588\u2588\xA3\xA3\xA3 ",
4636
- " \u2593\u2588\u2588\xA3\xA3\xA3 ",
4637
- " \u2588\u2588\u2588\xA3\xA3\xA3 ",
4638
- " \u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
4639
- " \u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
4640
- " \u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
4641
- " \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4642
- " \u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4643
- " \u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4644
- " \u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4645
- " \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4646
- " \u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4647
- " \u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4648
- " \u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4649
- " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
4650
- " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "
4651
- ]
4652
- }
4653
- };
4654
- }
4655
- });
4656
-
4657
- // node_modules/cli-spinners/index.js
4658
- var require_cli_spinners = __commonJS({
4659
- "node_modules/cli-spinners/index.js"(exports2, module2) {
4660
- "use strict";
4661
- var spinners = Object.assign({}, require_spinners());
4662
- var spinnersList = Object.keys(spinners);
4663
- Object.defineProperty(spinners, "random", {
4664
- get() {
4665
- const randomIndex = Math.floor(Math.random() * spinnersList.length);
4666
- const spinnerName = spinnersList[randomIndex];
4667
- return spinners[spinnerName];
4668
- }
4669
- });
4670
- module2.exports = spinners;
4671
- }
4672
- });
4673
-
4674
3029
  // node_modules/process-nextick-args/index.js
4675
3030
  var require_process_nextick_args = __commonJS({
4676
3031
  "node_modules/process-nextick-args/index.js"(exports2, module2) {
@@ -7190,15 +5545,15 @@ var require_external = __commonJS({
7190
5545
  var require_setImmediate = __commonJS({
7191
5546
  "node_modules/setimmediate/setImmediate.js"(exports2) {
7192
5547
  "use strict";
7193
- (function(global3, undefined2) {
5548
+ (function(global2, undefined2) {
7194
5549
  "use strict";
7195
- if (global3.setImmediate) {
5550
+ if (global2.setImmediate) {
7196
5551
  return;
7197
5552
  }
7198
5553
  var nextHandle = 1;
7199
5554
  var tasksByHandle = {};
7200
5555
  var currentlyRunningATask = false;
7201
- var doc = global3.document;
5556
+ var doc = global2.document;
7202
5557
  var registerImmediate;
7203
5558
  function setImmediate2(callback) {
7204
5559
  if (typeof callback !== "function") {
@@ -7261,31 +5616,31 @@ var require_setImmediate = __commonJS({
7261
5616
  };
7262
5617
  }
7263
5618
  function canUsePostMessage() {
7264
- if (global3.postMessage && !global3.importScripts) {
5619
+ if (global2.postMessage && !global2.importScripts) {
7265
5620
  var postMessageIsAsynchronous = true;
7266
- var oldOnMessage = global3.onmessage;
7267
- global3.onmessage = function() {
5621
+ var oldOnMessage = global2.onmessage;
5622
+ global2.onmessage = function() {
7268
5623
  postMessageIsAsynchronous = false;
7269
5624
  };
7270
- global3.postMessage("", "*");
7271
- global3.onmessage = oldOnMessage;
5625
+ global2.postMessage("", "*");
5626
+ global2.onmessage = oldOnMessage;
7272
5627
  return postMessageIsAsynchronous;
7273
5628
  }
7274
5629
  }
7275
5630
  function installPostMessageImplementation() {
7276
5631
  var messagePrefix = "setImmediate$" + Math.random() + "$";
7277
5632
  var onGlobalMessage = function(event) {
7278
- if (event.source === global3 && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) {
5633
+ if (event.source === global2 && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) {
7279
5634
  runIfPresent(+event.data.slice(messagePrefix.length));
7280
5635
  }
7281
5636
  };
7282
- if (global3.addEventListener) {
7283
- global3.addEventListener("message", onGlobalMessage, false);
5637
+ if (global2.addEventListener) {
5638
+ global2.addEventListener("message", onGlobalMessage, false);
7284
5639
  } else {
7285
- global3.attachEvent("onmessage", onGlobalMessage);
5640
+ global2.attachEvent("onmessage", onGlobalMessage);
7286
5641
  }
7287
5642
  registerImmediate = function(handle) {
7288
- global3.postMessage(messagePrefix + handle, "*");
5643
+ global2.postMessage(messagePrefix + handle, "*");
7289
5644
  };
7290
5645
  }
7291
5646
  function installMessageChannelImplementation() {
@@ -7316,13 +5671,13 @@ var require_setImmediate = __commonJS({
7316
5671
  setTimeout(runIfPresent, 0, handle);
7317
5672
  };
7318
5673
  }
7319
- var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global3);
7320
- attachTo = attachTo && attachTo.setTimeout ? attachTo : global3;
7321
- if ({}.toString.call(global3.process) === "[object process]") {
5674
+ var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global2);
5675
+ attachTo = attachTo && attachTo.setTimeout ? attachTo : global2;
5676
+ if ({}.toString.call(global2.process) === "[object process]") {
7322
5677
  installNextTickImplementation();
7323
5678
  } else if (canUsePostMessage()) {
7324
5679
  installPostMessageImplementation();
7325
- } else if (global3.MessageChannel) {
5680
+ } else if (global2.MessageChannel) {
7326
5681
  installMessageChannelImplementation();
7327
5682
  } else if (doc && "onreadystatechange" in doc.createElement("script")) {
7328
5683
  installReadyStateChangeImplementation();
@@ -17779,11 +16134,6 @@ function recordInstall(name, version, workspace) {
17779
16134
  saveConfig(config);
17780
16135
  logger.debug(`Recorded install`, { name, version, workspace });
17781
16136
  }
17782
- function removeInstallRecord(name) {
17783
- const config = loadConfig();
17784
- config.installed = config.installed.filter((a) => a.name !== name);
17785
- saveConfig(config);
17786
- }
17787
16137
  function getWorkspaceDir(clawDir, agentName) {
17788
16138
  return import_node_path2.default.join(clawDir, `workspace-${agentName}`);
17789
16139
  }
@@ -18263,928 +16613,72 @@ var infoCommand = new Command("info").description("View detailed information abo
18263
16613
  }
18264
16614
  });
18265
16615
 
18266
- // node_modules/ora/index.js
18267
- var import_node_process7 = __toESM(require("process"), 1);
18268
-
18269
- // node_modules/cli-cursor/index.js
18270
- var import_node_process3 = __toESM(require("process"), 1);
18271
-
18272
- // node_modules/restore-cursor/index.js
18273
- var import_node_process2 = __toESM(require("process"), 1);
18274
-
18275
- // node_modules/mimic-function/index.js
18276
- var copyProperty = (to, from, property, ignoreNonConfigurable) => {
18277
- if (property === "length" || property === "prototype") {
18278
- return;
18279
- }
18280
- if (property === "arguments" || property === "caller") {
18281
- return;
18282
- }
18283
- const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
18284
- const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
18285
- if (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
18286
- return;
18287
- }
18288
- Object.defineProperty(to, property, fromDescriptor);
18289
- };
18290
- var canCopyProperty = function(toDescriptor, fromDescriptor) {
18291
- return toDescriptor === void 0 || toDescriptor.configurable || toDescriptor.writable === fromDescriptor.writable && toDescriptor.enumerable === fromDescriptor.enumerable && toDescriptor.configurable === fromDescriptor.configurable && (toDescriptor.writable || toDescriptor.value === fromDescriptor.value);
18292
- };
18293
- var changePrototype = (to, from) => {
18294
- const fromPrototype = Object.getPrototypeOf(from);
18295
- if (fromPrototype === Object.getPrototypeOf(to)) {
18296
- return;
18297
- }
18298
- Object.setPrototypeOf(to, fromPrototype);
18299
- };
18300
- var wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/
18301
- ${fromBody}`;
18302
- var toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, "toString");
18303
- var toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, "name");
18304
- var changeToString = (to, from, name) => {
18305
- const withName = name === "" ? "" : `with ${name.trim()}() `;
18306
- const newToString = wrappedToString.bind(null, withName, from.toString());
18307
- Object.defineProperty(newToString, "name", toStringName);
18308
- const { writable, enumerable, configurable } = toStringDescriptor;
18309
- Object.defineProperty(to, "toString", { value: newToString, writable, enumerable, configurable });
18310
- };
18311
- function mimicFunction(to, from, { ignoreNonConfigurable = false } = {}) {
18312
- const { name } = to;
18313
- for (const property of Reflect.ownKeys(from)) {
18314
- copyProperty(to, from, property, ignoreNonConfigurable);
18315
- }
18316
- changePrototype(to, from);
18317
- changeToString(to, from, name);
18318
- return to;
18319
- }
18320
-
18321
- // node_modules/onetime/index.js
18322
- var calledFunctions = /* @__PURE__ */ new WeakMap();
18323
- var onetime = (function_, options = {}) => {
18324
- if (typeof function_ !== "function") {
18325
- throw new TypeError("Expected a function");
18326
- }
18327
- let returnValue;
18328
- let callCount = 0;
18329
- const functionName = function_.displayName || function_.name || "<anonymous>";
18330
- const onetime2 = function(...arguments_) {
18331
- calledFunctions.set(onetime2, ++callCount);
18332
- if (callCount === 1) {
18333
- returnValue = function_.apply(this, arguments_);
18334
- function_ = void 0;
18335
- } else if (options.throw === true) {
18336
- throw new Error(`Function \`${functionName}\` can only be called once`);
18337
- }
18338
- return returnValue;
18339
- };
18340
- mimicFunction(onetime2, function_);
18341
- calledFunctions.set(onetime2, callCount);
18342
- return onetime2;
18343
- };
18344
- onetime.callCount = (function_) => {
18345
- if (!calledFunctions.has(function_)) {
18346
- throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
18347
- }
18348
- return calledFunctions.get(function_);
18349
- };
18350
- var onetime_default = onetime;
18351
-
18352
- // node_modules/signal-exit/dist/mjs/signals.js
18353
- var signals = [];
18354
- signals.push("SIGHUP", "SIGINT", "SIGTERM");
18355
- if (process.platform !== "win32") {
18356
- signals.push(
18357
- "SIGALRM",
18358
- "SIGABRT",
18359
- "SIGVTALRM",
18360
- "SIGXCPU",
18361
- "SIGXFSZ",
18362
- "SIGUSR2",
18363
- "SIGTRAP",
18364
- "SIGSYS",
18365
- "SIGQUIT",
18366
- "SIGIOT"
18367
- // should detect profiler and enable/disable accordingly.
18368
- // see #21
18369
- // 'SIGPROF'
18370
- );
18371
- }
18372
- if (process.platform === "linux") {
18373
- signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
18374
- }
18375
-
18376
- // node_modules/signal-exit/dist/mjs/index.js
18377
- var processOk = (process10) => !!process10 && typeof process10 === "object" && typeof process10.removeListener === "function" && typeof process10.emit === "function" && typeof process10.reallyExit === "function" && typeof process10.listeners === "function" && typeof process10.kill === "function" && typeof process10.pid === "number" && typeof process10.on === "function";
18378
- var kExitEmitter = /* @__PURE__ */ Symbol.for("signal-exit emitter");
18379
- var global2 = globalThis;
18380
- var ObjectDefineProperty = Object.defineProperty.bind(Object);
18381
- var Emitter = class {
18382
- emitted = {
18383
- afterExit: false,
18384
- exit: false
18385
- };
18386
- listeners = {
18387
- afterExit: [],
18388
- exit: []
18389
- };
18390
- count = 0;
18391
- id = Math.random();
18392
- constructor() {
18393
- if (global2[kExitEmitter]) {
18394
- return global2[kExitEmitter];
18395
- }
18396
- ObjectDefineProperty(global2, kExitEmitter, {
18397
- value: this,
18398
- writable: false,
18399
- enumerable: false,
18400
- configurable: false
18401
- });
18402
- }
18403
- on(ev, fn) {
18404
- this.listeners[ev].push(fn);
18405
- }
18406
- removeListener(ev, fn) {
18407
- const list = this.listeners[ev];
18408
- const i = list.indexOf(fn);
18409
- if (i === -1) {
18410
- return;
18411
- }
18412
- if (i === 0 && list.length === 1) {
18413
- list.length = 0;
18414
- } else {
18415
- list.splice(i, 1);
18416
- }
18417
- }
18418
- emit(ev, code, signal) {
18419
- if (this.emitted[ev]) {
18420
- return false;
18421
- }
18422
- this.emitted[ev] = true;
18423
- let ret = false;
18424
- for (const fn of this.listeners[ev]) {
18425
- ret = fn(code, signal) === true || ret;
18426
- }
18427
- if (ev === "exit") {
18428
- ret = this.emit("afterExit", code, signal) || ret;
18429
- }
18430
- return ret;
16616
+ // src/spinner.ts
16617
+ var SPINNER_FRAMES = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
16618
+ var FRAME_INTERVAL = 80;
16619
+ function createSpinner(initialText = "") {
16620
+ let _text = initialText;
16621
+ let _timer = null;
16622
+ let _frameIndex = 0;
16623
+ function clearLine() {
16624
+ if (process.stderr.isTTY) {
16625
+ process.stderr.write("\r\x1B[K");
16626
+ }
16627
+ }
16628
+ function render() {
16629
+ if (!process.stderr.isTTY) return;
16630
+ const frame = source_default.cyan(SPINNER_FRAMES[_frameIndex]);
16631
+ clearLine();
16632
+ process.stderr.write(`${frame} ${_text}`);
16633
+ _frameIndex = (_frameIndex + 1) % SPINNER_FRAMES.length;
16634
+ }
16635
+ function stopTimer() {
16636
+ if (_timer) {
16637
+ clearInterval(_timer);
16638
+ _timer = null;
16639
+ }
16640
+ clearLine();
16641
+ }
16642
+ function printStatus(symbol, text) {
16643
+ stopTimer();
16644
+ process.stderr.write(`${symbol} ${text}
16645
+ `);
18431
16646
  }
18432
- };
18433
- var SignalExitBase = class {
18434
- };
18435
- var signalExitWrap = (handler) => {
18436
- return {
18437
- onExit(cb, opts) {
18438
- return handler.onExit(cb, opts);
16647
+ const spinner = {
16648
+ get text() {
16649
+ return _text;
16650
+ },
16651
+ set text(value) {
16652
+ _text = value;
16653
+ },
16654
+ start(text) {
16655
+ if (text) _text = text;
16656
+ _frameIndex = 0;
16657
+ if (_timer) clearInterval(_timer);
16658
+ if (process.stderr.isTTY) {
16659
+ render();
16660
+ _timer = setInterval(render, FRAME_INTERVAL);
16661
+ }
16662
+ return spinner;
18439
16663
  },
18440
- load() {
18441
- return handler.load();
16664
+ stop() {
16665
+ stopTimer();
16666
+ return spinner;
18442
16667
  },
18443
- unload() {
18444
- return handler.unload();
16668
+ succeed(text) {
16669
+ printStatus(source_default.green("\u2714"), text || _text);
16670
+ return spinner;
16671
+ },
16672
+ fail(text) {
16673
+ printStatus(source_default.red("\u2716"), text || _text);
16674
+ return spinner;
16675
+ },
16676
+ warn(text) {
16677
+ printStatus(source_default.yellow("\u26A0"), text || _text);
16678
+ return spinner;
18445
16679
  }
18446
16680
  };
18447
- };
18448
- var SignalExitFallback = class extends SignalExitBase {
18449
- onExit() {
18450
- return () => {
18451
- };
18452
- }
18453
- load() {
18454
- }
18455
- unload() {
18456
- }
18457
- };
18458
- var SignalExit = class extends SignalExitBase {
18459
- // "SIGHUP" throws an `ENOSYS` error on Windows,
18460
- // so use a supported signal instead
18461
- /* c8 ignore start */
18462
- #hupSig = process3.platform === "win32" ? "SIGINT" : "SIGHUP";
18463
- /* c8 ignore stop */
18464
- #emitter = new Emitter();
18465
- #process;
18466
- #originalProcessEmit;
18467
- #originalProcessReallyExit;
18468
- #sigListeners = {};
18469
- #loaded = false;
18470
- constructor(process10) {
18471
- super();
18472
- this.#process = process10;
18473
- this.#sigListeners = {};
18474
- for (const sig of signals) {
18475
- this.#sigListeners[sig] = () => {
18476
- const listeners = this.#process.listeners(sig);
18477
- let { count } = this.#emitter;
18478
- const p = process10;
18479
- if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
18480
- count += p.__signal_exit_emitter__.count;
18481
- }
18482
- if (listeners.length === count) {
18483
- this.unload();
18484
- const ret = this.#emitter.emit("exit", null, sig);
18485
- const s = sig === "SIGHUP" ? this.#hupSig : sig;
18486
- if (!ret)
18487
- process10.kill(process10.pid, s);
18488
- }
18489
- };
18490
- }
18491
- this.#originalProcessReallyExit = process10.reallyExit;
18492
- this.#originalProcessEmit = process10.emit;
18493
- }
18494
- onExit(cb, opts) {
18495
- if (!processOk(this.#process)) {
18496
- return () => {
18497
- };
18498
- }
18499
- if (this.#loaded === false) {
18500
- this.load();
18501
- }
18502
- const ev = opts?.alwaysLast ? "afterExit" : "exit";
18503
- this.#emitter.on(ev, cb);
18504
- return () => {
18505
- this.#emitter.removeListener(ev, cb);
18506
- if (this.#emitter.listeners["exit"].length === 0 && this.#emitter.listeners["afterExit"].length === 0) {
18507
- this.unload();
18508
- }
18509
- };
18510
- }
18511
- load() {
18512
- if (this.#loaded) {
18513
- return;
18514
- }
18515
- this.#loaded = true;
18516
- this.#emitter.count += 1;
18517
- for (const sig of signals) {
18518
- try {
18519
- const fn = this.#sigListeners[sig];
18520
- if (fn)
18521
- this.#process.on(sig, fn);
18522
- } catch (_) {
18523
- }
18524
- }
18525
- this.#process.emit = (ev, ...a) => {
18526
- return this.#processEmit(ev, ...a);
18527
- };
18528
- this.#process.reallyExit = (code) => {
18529
- return this.#processReallyExit(code);
18530
- };
18531
- }
18532
- unload() {
18533
- if (!this.#loaded) {
18534
- return;
18535
- }
18536
- this.#loaded = false;
18537
- signals.forEach((sig) => {
18538
- const listener = this.#sigListeners[sig];
18539
- if (!listener) {
18540
- throw new Error("Listener not defined for signal: " + sig);
18541
- }
18542
- try {
18543
- this.#process.removeListener(sig, listener);
18544
- } catch (_) {
18545
- }
18546
- });
18547
- this.#process.emit = this.#originalProcessEmit;
18548
- this.#process.reallyExit = this.#originalProcessReallyExit;
18549
- this.#emitter.count -= 1;
18550
- }
18551
- #processReallyExit(code) {
18552
- if (!processOk(this.#process)) {
18553
- return 0;
18554
- }
18555
- this.#process.exitCode = code || 0;
18556
- this.#emitter.emit("exit", this.#process.exitCode, null);
18557
- return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
18558
- }
18559
- #processEmit(ev, ...args) {
18560
- const og = this.#originalProcessEmit;
18561
- if (ev === "exit" && processOk(this.#process)) {
18562
- if (typeof args[0] === "number") {
18563
- this.#process.exitCode = args[0];
18564
- }
18565
- const ret = og.call(this.#process, ev, ...args);
18566
- this.#emitter.emit("exit", this.#process.exitCode, null);
18567
- return ret;
18568
- } else {
18569
- return og.call(this.#process, ev, ...args);
18570
- }
18571
- }
18572
- };
18573
- var process3 = globalThis.process;
18574
- var {
18575
- /**
18576
- * Called when the process is exiting, whether via signal, explicit
18577
- * exit, or running out of stuff to do.
18578
- *
18579
- * If the global process object is not suitable for instrumentation,
18580
- * then this will be a no-op.
18581
- *
18582
- * Returns a function that may be used to unload signal-exit.
18583
- */
18584
- onExit,
18585
- /**
18586
- * Load the listeners. Likely you never need to call this, unless
18587
- * doing a rather deep integration with signal-exit functionality.
18588
- * Mostly exposed for the benefit of testing.
18589
- *
18590
- * @internal
18591
- */
18592
- load: load2,
18593
- /**
18594
- * Unload the listeners. Likely you never need to call this, unless
18595
- * doing a rather deep integration with signal-exit functionality.
18596
- * Mostly exposed for the benefit of testing.
18597
- *
18598
- * @internal
18599
- */
18600
- unload
18601
- } = signalExitWrap(processOk(process3) ? new SignalExit(process3) : new SignalExitFallback());
18602
-
18603
- // node_modules/restore-cursor/index.js
18604
- var terminal = import_node_process2.default.stderr.isTTY ? import_node_process2.default.stderr : import_node_process2.default.stdout.isTTY ? import_node_process2.default.stdout : void 0;
18605
- var restoreCursor = terminal ? onetime_default(() => {
18606
- onExit(() => {
18607
- terminal.write("\x1B[?25h");
18608
- }, { alwaysLast: true });
18609
- }) : () => {
18610
- };
18611
- var restore_cursor_default = restoreCursor;
18612
-
18613
- // node_modules/cli-cursor/index.js
18614
- var isHidden = false;
18615
- var cliCursor = {};
18616
- cliCursor.show = (writableStream = import_node_process3.default.stderr) => {
18617
- if (!writableStream.isTTY) {
18618
- return;
18619
- }
18620
- isHidden = false;
18621
- writableStream.write("\x1B[?25h");
18622
- };
18623
- cliCursor.hide = (writableStream = import_node_process3.default.stderr) => {
18624
- if (!writableStream.isTTY) {
18625
- return;
18626
- }
18627
- restore_cursor_default();
18628
- isHidden = true;
18629
- writableStream.write("\x1B[?25l");
18630
- };
18631
- cliCursor.toggle = (force, writableStream) => {
18632
- if (force !== void 0) {
18633
- isHidden = force;
18634
- }
18635
- if (isHidden) {
18636
- cliCursor.show(writableStream);
18637
- } else {
18638
- cliCursor.hide(writableStream);
18639
- }
18640
- };
18641
- var cli_cursor_default = cliCursor;
18642
-
18643
- // node_modules/ora/index.js
18644
- var import_cli_spinners = __toESM(require_cli_spinners(), 1);
18645
-
18646
- // node_modules/log-symbols/node_modules/is-unicode-supported/index.js
18647
- var import_node_process4 = __toESM(require("process"), 1);
18648
- function isUnicodeSupported() {
18649
- if (import_node_process4.default.platform !== "win32") {
18650
- return import_node_process4.default.env.TERM !== "linux";
18651
- }
18652
- return Boolean(import_node_process4.default.env.CI) || Boolean(import_node_process4.default.env.WT_SESSION) || Boolean(import_node_process4.default.env.TERMINUS_SUBLIME) || import_node_process4.default.env.ConEmuTask === "{cmd::Cmder}" || import_node_process4.default.env.TERM_PROGRAM === "Terminus-Sublime" || import_node_process4.default.env.TERM_PROGRAM === "vscode" || import_node_process4.default.env.TERM === "xterm-256color" || import_node_process4.default.env.TERM === "alacritty" || import_node_process4.default.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
18653
- }
18654
-
18655
- // node_modules/log-symbols/index.js
18656
- var main = {
18657
- info: source_default.blue("\u2139"),
18658
- success: source_default.green("\u2714"),
18659
- warning: source_default.yellow("\u26A0"),
18660
- error: source_default.red("\u2716")
18661
- };
18662
- var fallback = {
18663
- info: source_default.blue("i"),
18664
- success: source_default.green("\u221A"),
18665
- warning: source_default.yellow("\u203C"),
18666
- error: source_default.red("\xD7")
18667
- };
18668
- var logSymbols = isUnicodeSupported() ? main : fallback;
18669
- var log_symbols_default = logSymbols;
18670
-
18671
- // node_modules/ansi-regex/index.js
18672
- function ansiRegex({ onlyFirst = false } = {}) {
18673
- const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
18674
- const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
18675
- const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
18676
- const pattern = `${osc}|${csi}`;
18677
- return new RegExp(pattern, onlyFirst ? void 0 : "g");
18678
- }
18679
-
18680
- // node_modules/strip-ansi/index.js
18681
- var regex = ansiRegex();
18682
- function stripAnsi(string) {
18683
- if (typeof string !== "string") {
18684
- throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
18685
- }
18686
- if (!string.includes("\x1B") && !string.includes("\x9B")) {
18687
- return string;
18688
- }
18689
- return string.replace(regex, "");
18690
- }
18691
-
18692
- // node_modules/get-east-asian-width/lookup-data.js
18693
- 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];
18694
- var fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
18695
- var halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];
18696
- var narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];
18697
- 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];
18698
-
18699
- // node_modules/get-east-asian-width/utilities.js
18700
- var isInRange = (ranges, codePoint) => {
18701
- let low = 0;
18702
- let high = Math.floor(ranges.length / 2) - 1;
18703
- while (low <= high) {
18704
- const mid = Math.floor((low + high) / 2);
18705
- const i = mid * 2;
18706
- if (codePoint < ranges[i]) {
18707
- high = mid - 1;
18708
- } else if (codePoint > ranges[i + 1]) {
18709
- low = mid + 1;
18710
- } else {
18711
- return true;
18712
- }
18713
- }
18714
- return false;
18715
- };
18716
-
18717
- // node_modules/get-east-asian-width/lookup.js
18718
- var minimumAmbiguousCodePoint = ambiguousRanges[0];
18719
- var maximumAmbiguousCodePoint = ambiguousRanges.at(-1);
18720
- var minimumFullWidthCodePoint = fullwidthRanges[0];
18721
- var maximumFullWidthCodePoint = fullwidthRanges.at(-1);
18722
- var minimumHalfWidthCodePoint = halfwidthRanges[0];
18723
- var maximumHalfWidthCodePoint = halfwidthRanges.at(-1);
18724
- var minimumNarrowCodePoint = narrowRanges[0];
18725
- var maximumNarrowCodePoint = narrowRanges.at(-1);
18726
- var minimumWideCodePoint = wideRanges[0];
18727
- var maximumWideCodePoint = wideRanges.at(-1);
18728
- var commonCjkCodePoint = 19968;
18729
- var [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);
18730
- function findWideFastPathRange(ranges) {
18731
- let fastPathStart = ranges[0];
18732
- let fastPathEnd = ranges[1];
18733
- for (let index = 0; index < ranges.length; index += 2) {
18734
- const start = ranges[index];
18735
- const end = ranges[index + 1];
18736
- if (commonCjkCodePoint >= start && commonCjkCodePoint <= end) {
18737
- return [start, end];
18738
- }
18739
- if (end - start > fastPathEnd - fastPathStart) {
18740
- fastPathStart = start;
18741
- fastPathEnd = end;
18742
- }
18743
- }
18744
- return [fastPathStart, fastPathEnd];
18745
- }
18746
- var isAmbiguous = (codePoint) => {
18747
- if (codePoint < minimumAmbiguousCodePoint || codePoint > maximumAmbiguousCodePoint) {
18748
- return false;
18749
- }
18750
- return isInRange(ambiguousRanges, codePoint);
18751
- };
18752
- var isFullWidth = (codePoint) => {
18753
- if (codePoint < minimumFullWidthCodePoint || codePoint > maximumFullWidthCodePoint) {
18754
- return false;
18755
- }
18756
- return isInRange(fullwidthRanges, codePoint);
18757
- };
18758
- var isWide = (codePoint) => {
18759
- if (codePoint >= wideFastPathStart && codePoint <= wideFastPathEnd) {
18760
- return true;
18761
- }
18762
- if (codePoint < minimumWideCodePoint || codePoint > maximumWideCodePoint) {
18763
- return false;
18764
- }
18765
- return isInRange(wideRanges, codePoint);
18766
- };
18767
-
18768
- // node_modules/get-east-asian-width/index.js
18769
- function validate(codePoint) {
18770
- if (!Number.isSafeInteger(codePoint)) {
18771
- throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
18772
- }
18773
- }
18774
- function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
18775
- validate(codePoint);
18776
- if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
18777
- return 2;
18778
- }
18779
- return 1;
18780
- }
18781
-
18782
- // node_modules/emoji-regex/index.mjs
18783
- var emoji_regex_default = () => {
18784
- return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
18785
- };
18786
-
18787
- // node_modules/string-width/index.js
18788
- var segmenter = new Intl.Segmenter();
18789
- var defaultIgnorableCodePointRegex = new RegExp("^\\p{Default_Ignorable_Code_Point}$", "u");
18790
- function stringWidth(string, options = {}) {
18791
- if (typeof string !== "string" || string.length === 0) {
18792
- return 0;
18793
- }
18794
- const {
18795
- ambiguousIsNarrow = true,
18796
- countAnsiEscapeCodes = false
18797
- } = options;
18798
- if (!countAnsiEscapeCodes) {
18799
- string = stripAnsi(string);
18800
- }
18801
- if (string.length === 0) {
18802
- return 0;
18803
- }
18804
- let width = 0;
18805
- const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
18806
- for (const { segment: character } of segmenter.segment(string)) {
18807
- const codePoint = character.codePointAt(0);
18808
- if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {
18809
- continue;
18810
- }
18811
- if (codePoint >= 8203 && codePoint <= 8207 || codePoint === 65279) {
18812
- continue;
18813
- }
18814
- if (codePoint >= 768 && codePoint <= 879 || codePoint >= 6832 && codePoint <= 6911 || codePoint >= 7616 && codePoint <= 7679 || codePoint >= 8400 && codePoint <= 8447 || codePoint >= 65056 && codePoint <= 65071) {
18815
- continue;
18816
- }
18817
- if (codePoint >= 55296 && codePoint <= 57343) {
18818
- continue;
18819
- }
18820
- if (codePoint >= 65024 && codePoint <= 65039) {
18821
- continue;
18822
- }
18823
- if (defaultIgnorableCodePointRegex.test(character)) {
18824
- continue;
18825
- }
18826
- if (emoji_regex_default().test(character)) {
18827
- width += 2;
18828
- continue;
18829
- }
18830
- width += eastAsianWidth(codePoint, eastAsianWidthOptions);
18831
- }
18832
- return width;
18833
- }
18834
-
18835
- // node_modules/is-interactive/index.js
18836
- function isInteractive({ stream = process.stdout } = {}) {
18837
- return Boolean(
18838
- stream && stream.isTTY && process.env.TERM !== "dumb" && !("CI" in process.env)
18839
- );
18840
- }
18841
-
18842
- // node_modules/is-unicode-supported/index.js
18843
- var import_node_process5 = __toESM(require("process"), 1);
18844
- function isUnicodeSupported2() {
18845
- const { env: env2 } = import_node_process5.default;
18846
- const { TERM, TERM_PROGRAM } = env2;
18847
- if (import_node_process5.default.platform !== "win32") {
18848
- return TERM !== "linux";
18849
- }
18850
- 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";
18851
- }
18852
-
18853
- // node_modules/stdin-discarder/index.js
18854
- var import_node_process6 = __toESM(require("process"), 1);
18855
- var ASCII_ETX_CODE = 3;
18856
- var StdinDiscarder = class {
18857
- #activeCount = 0;
18858
- start() {
18859
- this.#activeCount++;
18860
- if (this.#activeCount === 1) {
18861
- this.#realStart();
18862
- }
18863
- }
18864
- stop() {
18865
- if (this.#activeCount <= 0) {
18866
- throw new Error("`stop` called more times than `start`");
18867
- }
18868
- this.#activeCount--;
18869
- if (this.#activeCount === 0) {
18870
- this.#realStop();
18871
- }
18872
- }
18873
- #realStart() {
18874
- if (import_node_process6.default.platform === "win32" || !import_node_process6.default.stdin.isTTY) {
18875
- return;
18876
- }
18877
- import_node_process6.default.stdin.setRawMode(true);
18878
- import_node_process6.default.stdin.on("data", this.#handleInput);
18879
- import_node_process6.default.stdin.resume();
18880
- }
18881
- #realStop() {
18882
- if (!import_node_process6.default.stdin.isTTY) {
18883
- return;
18884
- }
18885
- import_node_process6.default.stdin.off("data", this.#handleInput);
18886
- import_node_process6.default.stdin.pause();
18887
- import_node_process6.default.stdin.setRawMode(false);
18888
- }
18889
- #handleInput(chunk) {
18890
- if (chunk[0] === ASCII_ETX_CODE) {
18891
- import_node_process6.default.emit("SIGINT");
18892
- }
18893
- }
18894
- };
18895
- var stdinDiscarder = new StdinDiscarder();
18896
- var stdin_discarder_default = stdinDiscarder;
18897
-
18898
- // node_modules/ora/index.js
18899
- var import_cli_spinners2 = __toESM(require_cli_spinners(), 1);
18900
- var Ora = class {
18901
- #linesToClear = 0;
18902
- #isDiscardingStdin = false;
18903
- #lineCount = 0;
18904
- #frameIndex = -1;
18905
- #lastSpinnerFrameTime = 0;
18906
- #options;
18907
- #spinner;
18908
- #stream;
18909
- #id;
18910
- #initialInterval;
18911
- #isEnabled;
18912
- #isSilent;
18913
- #indent;
18914
- #text;
18915
- #prefixText;
18916
- #suffixText;
18917
- color;
18918
- constructor(options) {
18919
- if (typeof options === "string") {
18920
- options = {
18921
- text: options
18922
- };
18923
- }
18924
- this.#options = {
18925
- color: "cyan",
18926
- stream: import_node_process7.default.stderr,
18927
- discardStdin: true,
18928
- hideCursor: true,
18929
- ...options
18930
- };
18931
- this.color = this.#options.color;
18932
- this.spinner = this.#options.spinner;
18933
- this.#initialInterval = this.#options.interval;
18934
- this.#stream = this.#options.stream;
18935
- this.#isEnabled = typeof this.#options.isEnabled === "boolean" ? this.#options.isEnabled : isInteractive({ stream: this.#stream });
18936
- this.#isSilent = typeof this.#options.isSilent === "boolean" ? this.#options.isSilent : false;
18937
- this.text = this.#options.text;
18938
- this.prefixText = this.#options.prefixText;
18939
- this.suffixText = this.#options.suffixText;
18940
- this.indent = this.#options.indent;
18941
- if (import_node_process7.default.env.NODE_ENV === "test") {
18942
- this._stream = this.#stream;
18943
- this._isEnabled = this.#isEnabled;
18944
- Object.defineProperty(this, "_linesToClear", {
18945
- get() {
18946
- return this.#linesToClear;
18947
- },
18948
- set(newValue) {
18949
- this.#linesToClear = newValue;
18950
- }
18951
- });
18952
- Object.defineProperty(this, "_frameIndex", {
18953
- get() {
18954
- return this.#frameIndex;
18955
- }
18956
- });
18957
- Object.defineProperty(this, "_lineCount", {
18958
- get() {
18959
- return this.#lineCount;
18960
- }
18961
- });
18962
- }
18963
- }
18964
- get indent() {
18965
- return this.#indent;
18966
- }
18967
- set indent(indent = 0) {
18968
- if (!(indent >= 0 && Number.isInteger(indent))) {
18969
- throw new Error("The `indent` option must be an integer from 0 and up");
18970
- }
18971
- this.#indent = indent;
18972
- this.#updateLineCount();
18973
- }
18974
- get interval() {
18975
- return this.#initialInterval ?? this.#spinner.interval ?? 100;
18976
- }
18977
- get spinner() {
18978
- return this.#spinner;
18979
- }
18980
- set spinner(spinner) {
18981
- this.#frameIndex = -1;
18982
- this.#initialInterval = void 0;
18983
- if (typeof spinner === "object") {
18984
- if (spinner.frames === void 0) {
18985
- throw new Error("The given spinner must have a `frames` property");
18986
- }
18987
- this.#spinner = spinner;
18988
- } else if (!isUnicodeSupported2()) {
18989
- this.#spinner = import_cli_spinners.default.line;
18990
- } else if (spinner === void 0) {
18991
- this.#spinner = import_cli_spinners.default.dots;
18992
- } else if (spinner !== "default" && import_cli_spinners.default[spinner]) {
18993
- this.#spinner = import_cli_spinners.default[spinner];
18994
- } else {
18995
- 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.`);
18996
- }
18997
- }
18998
- get text() {
18999
- return this.#text;
19000
- }
19001
- set text(value = "") {
19002
- this.#text = value;
19003
- this.#updateLineCount();
19004
- }
19005
- get prefixText() {
19006
- return this.#prefixText;
19007
- }
19008
- set prefixText(value = "") {
19009
- this.#prefixText = value;
19010
- this.#updateLineCount();
19011
- }
19012
- get suffixText() {
19013
- return this.#suffixText;
19014
- }
19015
- set suffixText(value = "") {
19016
- this.#suffixText = value;
19017
- this.#updateLineCount();
19018
- }
19019
- get isSpinning() {
19020
- return this.#id !== void 0;
19021
- }
19022
- #getFullPrefixText(prefixText = this.#prefixText, postfix = " ") {
19023
- if (typeof prefixText === "string" && prefixText !== "") {
19024
- return prefixText + postfix;
19025
- }
19026
- if (typeof prefixText === "function") {
19027
- return prefixText() + postfix;
19028
- }
19029
- return "";
19030
- }
19031
- #getFullSuffixText(suffixText = this.#suffixText, prefix = " ") {
19032
- if (typeof suffixText === "string" && suffixText !== "") {
19033
- return prefix + suffixText;
19034
- }
19035
- if (typeof suffixText === "function") {
19036
- return prefix + suffixText();
19037
- }
19038
- return "";
19039
- }
19040
- #updateLineCount() {
19041
- const columns = this.#stream.columns ?? 80;
19042
- const fullPrefixText = this.#getFullPrefixText(this.#prefixText, "-");
19043
- const fullSuffixText = this.#getFullSuffixText(this.#suffixText, "-");
19044
- const fullText = " ".repeat(this.#indent) + fullPrefixText + "--" + this.#text + "--" + fullSuffixText;
19045
- this.#lineCount = 0;
19046
- for (const line of stripAnsi(fullText).split("\n")) {
19047
- this.#lineCount += Math.max(1, Math.ceil(stringWidth(line, { countAnsiEscapeCodes: true }) / columns));
19048
- }
19049
- }
19050
- get isEnabled() {
19051
- return this.#isEnabled && !this.#isSilent;
19052
- }
19053
- set isEnabled(value) {
19054
- if (typeof value !== "boolean") {
19055
- throw new TypeError("The `isEnabled` option must be a boolean");
19056
- }
19057
- this.#isEnabled = value;
19058
- }
19059
- get isSilent() {
19060
- return this.#isSilent;
19061
- }
19062
- set isSilent(value) {
19063
- if (typeof value !== "boolean") {
19064
- throw new TypeError("The `isSilent` option must be a boolean");
19065
- }
19066
- this.#isSilent = value;
19067
- }
19068
- frame() {
19069
- const now = Date.now();
19070
- if (this.#frameIndex === -1 || now - this.#lastSpinnerFrameTime >= this.interval) {
19071
- this.#frameIndex = ++this.#frameIndex % this.#spinner.frames.length;
19072
- this.#lastSpinnerFrameTime = now;
19073
- }
19074
- const { frames } = this.#spinner;
19075
- let frame = frames[this.#frameIndex];
19076
- if (this.color) {
19077
- frame = source_default[this.color](frame);
19078
- }
19079
- const fullPrefixText = typeof this.#prefixText === "string" && this.#prefixText !== "" ? this.#prefixText + " " : "";
19080
- const fullText = typeof this.text === "string" ? " " + this.text : "";
19081
- const fullSuffixText = typeof this.#suffixText === "string" && this.#suffixText !== "" ? " " + this.#suffixText : "";
19082
- return fullPrefixText + frame + fullText + fullSuffixText;
19083
- }
19084
- clear() {
19085
- if (!this.#isEnabled || !this.#stream.isTTY) {
19086
- return this;
19087
- }
19088
- this.#stream.cursorTo(0);
19089
- for (let index = 0; index < this.#linesToClear; index++) {
19090
- if (index > 0) {
19091
- this.#stream.moveCursor(0, -1);
19092
- }
19093
- this.#stream.clearLine(1);
19094
- }
19095
- if (this.#indent || this.lastIndent !== this.#indent) {
19096
- this.#stream.cursorTo(this.#indent);
19097
- }
19098
- this.lastIndent = this.#indent;
19099
- this.#linesToClear = 0;
19100
- return this;
19101
- }
19102
- render() {
19103
- if (this.#isSilent) {
19104
- return this;
19105
- }
19106
- this.clear();
19107
- this.#stream.write(this.frame());
19108
- this.#linesToClear = this.#lineCount;
19109
- return this;
19110
- }
19111
- start(text) {
19112
- if (text) {
19113
- this.text = text;
19114
- }
19115
- if (this.#isSilent) {
19116
- return this;
19117
- }
19118
- if (!this.#isEnabled) {
19119
- if (this.text) {
19120
- this.#stream.write(`- ${this.text}
19121
- `);
19122
- }
19123
- return this;
19124
- }
19125
- if (this.isSpinning) {
19126
- return this;
19127
- }
19128
- if (this.#options.hideCursor) {
19129
- cli_cursor_default.hide(this.#stream);
19130
- }
19131
- if (this.#options.discardStdin && import_node_process7.default.stdin.isTTY) {
19132
- this.#isDiscardingStdin = true;
19133
- stdin_discarder_default.start();
19134
- }
19135
- this.render();
19136
- this.#id = setInterval(this.render.bind(this), this.interval);
19137
- return this;
19138
- }
19139
- stop() {
19140
- if (!this.#isEnabled) {
19141
- return this;
19142
- }
19143
- clearInterval(this.#id);
19144
- this.#id = void 0;
19145
- this.#frameIndex = 0;
19146
- this.clear();
19147
- if (this.#options.hideCursor) {
19148
- cli_cursor_default.show(this.#stream);
19149
- }
19150
- if (this.#options.discardStdin && import_node_process7.default.stdin.isTTY && this.#isDiscardingStdin) {
19151
- stdin_discarder_default.stop();
19152
- this.#isDiscardingStdin = false;
19153
- }
19154
- return this;
19155
- }
19156
- succeed(text) {
19157
- return this.stopAndPersist({ symbol: log_symbols_default.success, text });
19158
- }
19159
- fail(text) {
19160
- return this.stopAndPersist({ symbol: log_symbols_default.error, text });
19161
- }
19162
- warn(text) {
19163
- return this.stopAndPersist({ symbol: log_symbols_default.warning, text });
19164
- }
19165
- info(text) {
19166
- return this.stopAndPersist({ symbol: log_symbols_default.info, text });
19167
- }
19168
- stopAndPersist(options = {}) {
19169
- if (this.#isSilent) {
19170
- return this;
19171
- }
19172
- const prefixText = options.prefixText ?? this.#prefixText;
19173
- const fullPrefixText = this.#getFullPrefixText(prefixText, " ");
19174
- const symbolText = options.symbol ?? " ";
19175
- const text = options.text ?? this.text;
19176
- const separatorText = symbolText ? " " : "";
19177
- const fullText = typeof text === "string" ? separatorText + text : "";
19178
- const suffixText = options.suffixText ?? this.#suffixText;
19179
- const fullSuffixText = this.#getFullSuffixText(suffixText, " ");
19180
- const textToWrite = fullPrefixText + symbolText + fullText + fullSuffixText + "\n";
19181
- this.stop();
19182
- this.#stream.write(textToWrite);
19183
- return this;
19184
- }
19185
- };
19186
- function ora(options) {
19187
- return new Ora(options);
16681
+ return spinner;
19188
16682
  }
19189
16683
 
19190
16684
  // src/commands/install.ts
@@ -19220,7 +16714,7 @@ var installCommand = new Command("install").description("Install an agent or tea
19220
16714
  }
19221
16715
  });
19222
16716
  async function installFromRegistry(name, targetDir, clawDir) {
19223
- const spinner = ora(`Checking registry for ${source_default.cyan(name)}...`).start();
16717
+ const spinner = createSpinner(`Checking registry for ${source_default.cyan(name)}...`).start();
19224
16718
  const index = await fetchIndex();
19225
16719
  const agent = index.agents.find((a) => a.name === name);
19226
16720
  const recipe = index.recipes.find((r) => r.name === name);
@@ -19239,7 +16733,7 @@ async function installFromRegistry(name, targetDir, clawDir) {
19239
16733
  }
19240
16734
  }
19241
16735
  async function installSingleAgent(name, targetDir, clawDir) {
19242
- const spinner = ora(`Checking environment...`).start();
16736
+ const spinner = createSpinner(`Checking environment...`).start();
19243
16737
  if (!targetDir) {
19244
16738
  const clawCheck = checkOpenClawInstalled(clawDir);
19245
16739
  if (!clawCheck.installed) {
@@ -19326,7 +16820,7 @@ async function installSingleAgent(name, targetDir, clawDir) {
19326
16820
  console.log();
19327
16821
  }
19328
16822
  async function installRecipeFromRegistry(name, recipe, targetDir, clawDir) {
19329
- const spinner = ora(`Installing team ${source_default.cyan(recipe.displayName)}...`).start();
16823
+ const spinner = createSpinner(`Installing team ${source_default.cyan(recipe.displayName)}...`).start();
19330
16824
  if (!targetDir) {
19331
16825
  const clawCheck = checkOpenClawInstalled(clawDir);
19332
16826
  if (!clawCheck.installed) {
@@ -19418,7 +16912,7 @@ async function installRecipeFromRegistry(name, recipe, targetDir, clawDir) {
19418
16912
  }
19419
16913
  }
19420
16914
  async function installFromSource(source, targetDir, clawDir) {
19421
- const spinner = ora("Analyzing package...").start();
16915
+ const spinner = createSpinner("Analyzing package...").start();
19422
16916
  let packageDir;
19423
16917
  let tempDir = null;
19424
16918
  if (source.startsWith("http://") || source.startsWith("https://")) {
@@ -19484,7 +16978,7 @@ async function installFromSource(source, targetDir, clawDir) {
19484
16978
  }
19485
16979
  }
19486
16980
  async function installSingleAgentFromDir(packageDir, targetDir, clawDir) {
19487
- const spinner = ora("Installing single agent...").start();
16981
+ const spinner = createSpinner("Installing single agent...").start();
19488
16982
  const pkg = readSoulHubPackage(packageDir);
19489
16983
  const agentName = pkg?.name || import_node_path3.default.basename(packageDir);
19490
16984
  if (!targetDir) {
@@ -19552,7 +17046,7 @@ async function installSingleAgentFromDir(packageDir, targetDir, clawDir) {
19552
17046
  console.log();
19553
17047
  }
19554
17048
  async function installTeamFromDir(packageDir, targetDir, clawDir) {
19555
- const spinner = ora("Installing team...").start();
17049
+ const spinner = createSpinner("Installing team...").start();
19556
17050
  const pkg = readSoulHubPackage(packageDir);
19557
17051
  if (!pkg || pkg.kind !== "team") {
19558
17052
  spinner.fail("Invalid team package. Missing soulhub.yaml.");
@@ -19739,7 +17233,7 @@ async function installDispatcher(dispatcher, resolvedClawDir, clawDir, targetDir
19739
17233
  }
19740
17234
  const templateName = dispatcher.dir || dispatcher.name;
19741
17235
  if (spinner) spinner.text = `Downloading dispatcher files...`;
19742
- await downloadAgentFiles(templateName, mainWorkspace, spinner || ora());
17236
+ await downloadAgentFiles(templateName, mainWorkspace, spinner || createSpinner());
19743
17237
  recordInstall("dispatcher", "1.0.0", mainWorkspace);
19744
17238
  }
19745
17239
  async function extractZipToDir(zip, targetDir) {
@@ -19778,7 +17272,7 @@ function printTeamSummary(pkg, workerIds) {
19778
17272
  console.log();
19779
17273
  }
19780
17274
  async function tryRestartGateway() {
19781
- const restartSpinner = ora("Restarting OpenClaw Gateway...").start();
17275
+ const restartSpinner = createSpinner("Restarting OpenClaw Gateway...").start();
19782
17276
  const result = restartOpenClawGateway();
19783
17277
  if (result.success) {
19784
17278
  restartSpinner.succeed("OpenClaw Gateway restarted successfully.");
@@ -19839,7 +17333,7 @@ var updateCommand = new Command("update").description("Update installed agent te
19839
17333
  console.log(source_default.yellow("\n No agents installed.\n"));
19840
17334
  return;
19841
17335
  }
19842
- const spinner = ora("Checking for updates...").start();
17336
+ const spinner = createSpinner("Checking for updates...").start();
19843
17337
  const index = await fetchIndex();
19844
17338
  const toUpdate = name ? config.installed.filter((a) => a.name === name) : config.installed;
19845
17339
  if (toUpdate.length === 0) {
@@ -19898,43 +17392,23 @@ var updateCommand = new Command("update").description("Update installed agent te
19898
17392
  }
19899
17393
  });
19900
17394
 
19901
- // src/commands/uninstall.ts
17395
+ // src/commands/rollback.ts
19902
17396
  var import_node_fs5 = __toESM(require("fs"), 1);
19903
- var uninstallCommand = new Command("uninstall").description("Uninstall an agent template").alias("rm").argument("<name>", "Agent name to uninstall").option("--keep-files", "Remove from registry but keep workspace files").action(async (name, options) => {
17397
+ var import_node_path5 = __toESM(require("path"), 1);
17398
+ var rollbackCommand = new Command("rollback").description("Rollback to a previous agent installation state").option("--list", "List available rollback records").option("--id <id>", "Rollback to a specific backup record by ID").option(
17399
+ "--claw-dir <path>",
17400
+ "OpenClaw installation directory (overrides OPENCLAW_HOME env var)"
17401
+ ).action(async (options) => {
19904
17402
  try {
19905
- const config = loadConfig();
19906
- const installed = config.installed.find((a) => a.name === name);
19907
- if (!installed) {
19908
- console.error(
19909
- source_default.red(`
19910
- Agent "${name}" is not installed.
19911
- `)
19912
- );
19913
- console.log(
19914
- source_default.dim(" Use 'soulhub list' to see installed agents.")
19915
- );
19916
- process.exit(1);
19917
- }
19918
- const spinner = ora(
19919
- `Uninstalling ${source_default.cyan(name)}...`
19920
- ).start();
19921
- if (!options.keepFiles && import_node_fs5.default.existsSync(installed.workspace)) {
19922
- import_node_fs5.default.rmSync(installed.workspace, { recursive: true, force: true });
19923
- spinner.text = `Removed workspace: ${installed.workspace}`;
19924
- }
19925
- removeInstallRecord(name);
19926
- logger.info(`Agent uninstalled: ${name}`, { workspace: installed.workspace, keepFiles: !!options.keepFiles });
19927
- spinner.succeed(
19928
- `${source_default.cyan.bold(name)} uninstalled.`
19929
- );
19930
- if (options.keepFiles) {
19931
- console.log(
19932
- source_default.dim(` Files kept at: ${installed.workspace}`)
19933
- );
17403
+ if (options.list) {
17404
+ listBackupRecords();
17405
+ } else if (options.id) {
17406
+ await performRollback(options.id, options.clawDir);
17407
+ } else {
17408
+ await performRollback(void 0, options.clawDir);
19934
17409
  }
19935
- console.log();
19936
17410
  } catch (error) {
19937
- logger.errorObj("Uninstall command failed", error);
17411
+ logger.errorObj("Rollback command failed", error);
19938
17412
  console.error(
19939
17413
  source_default.red(`Error: ${error instanceof Error ? error.message : error}`)
19940
17414
  );
@@ -19942,107 +17416,161 @@ var uninstallCommand = new Command("uninstall").description("Uninstall an agent
19942
17416
  process.exit(1);
19943
17417
  }
19944
17418
  });
19945
-
19946
- // src/commands/publish.ts
19947
- var import_node_fs6 = __toESM(require("fs"), 1);
19948
- var import_node_path5 = __toESM(require("path"), 1);
19949
- var publishCommand = new Command("publish").description("Publish an agent template to the SoulHub community").argument(
19950
- "[directory]",
19951
- "Agent workspace directory (defaults to current directory)"
19952
- ).action(async (directory) => {
19953
- try {
19954
- const dir = directory ? import_node_path5.default.resolve(directory) : process.cwd();
19955
- const spinner = ora("Validating agent template...").start();
19956
- const requiredFiles = ["manifest.yaml", "IDENTITY.md", "SOUL.md"];
19957
- const missing = requiredFiles.filter(
19958
- (f) => !import_node_fs6.default.existsSync(import_node_path5.default.join(dir, f))
19959
- );
19960
- if (missing.length > 0) {
19961
- spinner.fail("Missing required files:");
19962
- for (const f of missing) {
19963
- console.log(source_default.red(` - ${f}`));
19964
- }
19965
- console.log();
19966
- console.log(source_default.dim(" Required files: manifest.yaml, IDENTITY.md, SOUL.md"));
19967
- console.log(
19968
- source_default.dim(
19969
- " See: https://soulhub.dev/docs/contributing"
19970
- )
19971
- );
19972
- return;
19973
- }
19974
- const manifestContent = import_node_fs6.default.readFileSync(
19975
- import_node_path5.default.join(dir, "manifest.yaml"),
19976
- "utf-8"
19977
- );
19978
- const manifest = jsYaml.load(manifestContent);
19979
- const requiredFields = [
19980
- "name",
19981
- "displayName",
19982
- "description",
19983
- "category",
19984
- "version",
19985
- "author"
19986
- ];
19987
- const missingFields = requiredFields.filter(
19988
- (f) => !manifest[f]
17419
+ function listBackupRecords() {
17420
+ const manifest = loadBackupManifest();
17421
+ if (manifest.records.length === 0) {
17422
+ console.log(source_default.yellow("No backup records found."));
17423
+ console.log(source_default.dim(" Backup records are created automatically when you install agents."));
17424
+ return;
17425
+ }
17426
+ console.log(source_default.bold("\nAvailable rollback records:\n"));
17427
+ console.log(
17428
+ source_default.dim(
17429
+ ` ${"ID".padEnd(20)} ${"Type".padEnd(20)} ${"Package".padEnd(20)} ${"Date".padEnd(22)} Items`
17430
+ )
17431
+ );
17432
+ console.log(source_default.dim(" " + "\u2500".repeat(90)));
17433
+ for (const record of manifest.records) {
17434
+ const date = new Date(record.createdAt).toLocaleString();
17435
+ const typeLabel = formatInstallType(record.installType);
17436
+ const itemCount = record.items.length;
17437
+ console.log(
17438
+ ` ${source_default.cyan(record.id.padEnd(20))} ${typeLabel.padEnd(20)} ${source_default.white(record.packageName.padEnd(20))} ${source_default.dim(date.padEnd(22))} ${itemCount} backup(s)`
19989
17439
  );
19990
- if (missingFields.length > 0) {
19991
- spinner.fail("Missing required fields in manifest.yaml:");
19992
- for (const f of missingFields) {
19993
- console.log(source_default.red(` - ${f}`));
19994
- }
19995
- return;
19996
- }
19997
- const validCategories = [
19998
- "self-media",
19999
- "development",
20000
- "operations",
20001
- "support",
20002
- "education",
20003
- "dispatcher"
20004
- ];
20005
- if (!validCategories.includes(manifest.category)) {
20006
- spinner.fail(
20007
- `Invalid category: ${manifest.category}. Must be one of: ${validCategories.join(", ")}`
20008
- );
17440
+ }
17441
+ console.log();
17442
+ console.log(source_default.dim(" Usage:"));
17443
+ console.log(source_default.dim(" soulhub rollback # Rollback last installation"));
17444
+ console.log(source_default.dim(" soulhub rollback --id <id> # Rollback to a specific record"));
17445
+ console.log();
17446
+ }
17447
+ async function performRollback(recordId, clawDir) {
17448
+ const manifest = loadBackupManifest();
17449
+ if (manifest.records.length === 0) {
17450
+ console.log(source_default.yellow("No backup records found. Nothing to rollback."));
17451
+ return;
17452
+ }
17453
+ let record;
17454
+ if (recordId) {
17455
+ record = manifest.records.find((r) => r.id === recordId);
17456
+ if (!record) {
17457
+ console.error(source_default.red(`Backup record "${recordId}" not found.`));
17458
+ console.log(source_default.dim(" Use 'soulhub rollback --list' to see available records."));
20009
17459
  return;
20010
17460
  }
20011
- spinner.succeed("Template validation passed!");
20012
- console.log();
20013
- console.log(source_default.bold(` ${manifest.displayName}`));
20014
- console.log(
20015
- source_default.dim(` ${manifest.name} v${manifest.version}`)
20016
- );
20017
- console.log(` ${manifest.description}`);
20018
- console.log();
20019
- console.log(source_default.bold(" Next steps to publish:"));
20020
- console.log();
20021
- console.log(
20022
- ` 1. Fork ${source_default.cyan("github.com/soulhub-community/soulhub")}`
20023
- );
20024
- console.log(
20025
- ` 2. Copy your agent directory to ${source_default.cyan(`registry/agents/${manifest.name}/`)}`
20026
- );
20027
- console.log(
20028
- ` 3. Submit a Pull Request`
20029
- );
20030
- console.log();
17461
+ } else {
17462
+ record = manifest.records[0];
20031
17463
  console.log(
20032
17464
  source_default.dim(
20033
- " Your template will be reviewed and added to the community registry."
17465
+ `Rolling back last installation: ${source_default.cyan(record.id)} (${record.packageName})`
20034
17466
  )
20035
17467
  );
20036
- console.log();
20037
- } catch (error) {
20038
- logger.errorObj("Publish command failed", error);
20039
- console.error(
20040
- source_default.red(`Error: ${error instanceof Error ? error.message : error}`)
20041
- );
20042
- console.error(source_default.dim(` See logs: ${logger.getTodayLogFile()}`));
20043
- process.exit(1);
20044
17468
  }
20045
- });
17469
+ const spinner = createSpinner(
17470
+ `Rolling back ${source_default.cyan(record.packageName)}...`
17471
+ ).start();
17472
+ const resolvedClawDir = findOpenClawDir(clawDir) || record.clawDir;
17473
+ if (!resolvedClawDir || !import_node_fs5.default.existsSync(resolvedClawDir)) {
17474
+ spinner.fail(`OpenClaw directory not found: ${record.clawDir}`);
17475
+ return;
17476
+ }
17477
+ if (record.openclawJsonSnapshot) {
17478
+ spinner.text = "Restoring openclaw.json...";
17479
+ try {
17480
+ const configObj = JSON.parse(record.openclawJsonSnapshot);
17481
+ writeOpenClawConfig(resolvedClawDir, configObj);
17482
+ logger.info("openclaw.json restored from snapshot", { recordId: record.id });
17483
+ } catch (err) {
17484
+ logger.error("Failed to restore openclaw.json", { error: err });
17485
+ console.log(source_default.yellow(" \u26A0 Failed to restore openclaw.json, skipping..."));
17486
+ }
17487
+ }
17488
+ if (record.installedWorkerIds.length > 0) {
17489
+ spinner.text = "Removing installed workers...";
17490
+ for (const workerId of record.installedWorkerIds) {
17491
+ const workerDir = getWorkspaceDir(resolvedClawDir, workerId);
17492
+ if (import_node_fs5.default.existsSync(workerDir)) {
17493
+ import_node_fs5.default.rmSync(workerDir, { recursive: true, force: true });
17494
+ logger.info(`Removed installed worker directory`, { workerId, dir: workerDir });
17495
+ }
17496
+ const agentConfigDir = import_node_path5.default.join(resolvedClawDir, "agents", workerId);
17497
+ if (import_node_fs5.default.existsSync(agentConfigDir)) {
17498
+ import_node_fs5.default.rmSync(agentConfigDir, { recursive: true, force: true });
17499
+ }
17500
+ }
17501
+ }
17502
+ if (record.installedMainAgent) {
17503
+ const mainWorkspace = getMainWorkspaceDir(resolvedClawDir);
17504
+ const hasMainBackup = record.items.some((item) => item.role === "main");
17505
+ if (hasMainBackup && import_node_fs5.default.existsSync(mainWorkspace)) {
17506
+ spinner.text = "Cleaning current main workspace...";
17507
+ const entries = import_node_fs5.default.readdirSync(mainWorkspace);
17508
+ for (const entry of entries) {
17509
+ import_node_fs5.default.rmSync(import_node_path5.default.join(mainWorkspace, entry), { recursive: true, force: true });
17510
+ }
17511
+ }
17512
+ }
17513
+ let restoredCount = 0;
17514
+ for (const item of record.items) {
17515
+ if (!import_node_fs5.default.existsSync(item.backupPath)) {
17516
+ logger.warn(`Backup path not found, skipping`, { backupPath: item.backupPath });
17517
+ console.log(source_default.yellow(` \u26A0 Backup not found: ${item.backupPath}, skipping...`));
17518
+ continue;
17519
+ }
17520
+ spinner.text = `Restoring ${source_default.cyan(item.agentId)} (${item.role})...`;
17521
+ if (item.method === "mv") {
17522
+ if (import_node_fs5.default.existsSync(item.originalPath)) {
17523
+ import_node_fs5.default.rmSync(item.originalPath, { recursive: true, force: true });
17524
+ }
17525
+ import_node_fs5.default.mkdirSync(import_node_path5.default.dirname(item.originalPath), { recursive: true });
17526
+ import_node_fs5.default.renameSync(item.backupPath, item.originalPath);
17527
+ logger.info(`Restored (mv back)`, { from: item.backupPath, to: item.originalPath });
17528
+ } else {
17529
+ if (import_node_fs5.default.existsSync(item.originalPath)) {
17530
+ const entries = import_node_fs5.default.readdirSync(item.originalPath);
17531
+ for (const entry of entries) {
17532
+ import_node_fs5.default.rmSync(import_node_path5.default.join(item.originalPath, entry), { recursive: true, force: true });
17533
+ }
17534
+ } else {
17535
+ import_node_fs5.default.mkdirSync(item.originalPath, { recursive: true });
17536
+ }
17537
+ import_node_fs5.default.cpSync(item.backupPath, item.originalPath, { recursive: true });
17538
+ import_node_fs5.default.rmSync(item.backupPath, { recursive: true, force: true });
17539
+ logger.info(`Restored (cp back)`, { from: item.backupPath, to: item.originalPath });
17540
+ }
17541
+ restoredCount++;
17542
+ }
17543
+ manifest.records = manifest.records.filter((r) => r.id !== record.id);
17544
+ saveBackupManifest(manifest);
17545
+ spinner.succeed(
17546
+ `Rolled back ${source_default.cyan.bold(record.packageName)} successfully! (${restoredCount} item(s) restored)`
17547
+ );
17548
+ const restartSpinner = createSpinner("Restarting OpenClaw Gateway...").start();
17549
+ const result = restartOpenClawGateway();
17550
+ if (result.success) {
17551
+ restartSpinner.succeed("OpenClaw Gateway restarted successfully.");
17552
+ } else {
17553
+ restartSpinner.warn("Failed to restart OpenClaw Gateway.");
17554
+ console.log(source_default.yellow(` Reason: ${result.message}`));
17555
+ console.log(source_default.dim(" Please restart manually:"));
17556
+ console.log(source_default.dim(" openclaw gateway restart"));
17557
+ }
17558
+ console.log();
17559
+ }
17560
+ function formatInstallType(type2) {
17561
+ switch (type2) {
17562
+ case "single-agent":
17563
+ return source_default.blue("Single Agent");
17564
+ case "team-registry":
17565
+ return source_default.magenta("Team (Registry)");
17566
+ case "team-local":
17567
+ return source_default.magenta("Team (Local)");
17568
+ case "single-agent-local":
17569
+ return source_default.blue("Agent (Local)");
17570
+ default:
17571
+ return type2;
17572
+ }
17573
+ }
20046
17574
 
20047
17575
  // src/index.ts
20048
17576
  var program2 = new Command();
@@ -20061,8 +17589,7 @@ program2.addCommand(infoCommand);
20061
17589
  program2.addCommand(installCommand);
20062
17590
  program2.addCommand(listCommand);
20063
17591
  program2.addCommand(updateCommand);
20064
- program2.addCommand(uninstallCommand);
20065
- program2.addCommand(publishCommand);
17592
+ program2.addCommand(rollbackCommand);
20066
17593
  program2.parse();
20067
17594
  /*! Bundled license information:
20068
17595