Files
claude-mem/installer/dist/index.js
Alex Newman 8d46c00dd8 fix: add compiled installer dist so CLI installation works
The bootstrap script (install.sh) fetches installer/dist/index.js from
main, but it was never committed due to the global dist/ gitignore rule.
Added negation rule and the compiled installer bundle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 22:06:05 -05:00

2108 lines
93 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
// node_modules/picocolors/picocolors.js
var require_picocolors = __commonJS({
"node_modules/picocolors/picocolors.js"(exports, module) {
var p = process || {};
var argv = p.argv || [];
var env = p.env || {};
var isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
var formatter = (open, close, replace = open) => (input) => {
let string = "" + input, index = string.indexOf(close, open.length);
return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
};
var replaceClose = (string, close, replace, index) => {
let result = "", cursor = 0;
do {
result += string.substring(cursor, index) + replace;
cursor = index + close.length;
index = string.indexOf(close, cursor);
} while (~index);
return result + string.substring(cursor);
};
var createColors = (enabled = isColorSupported) => {
let f = enabled ? formatter : () => String;
return {
isColorSupported: enabled,
reset: f("\x1B[0m", "\x1B[0m"),
bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
italic: f("\x1B[3m", "\x1B[23m"),
underline: f("\x1B[4m", "\x1B[24m"),
inverse: f("\x1B[7m", "\x1B[27m"),
hidden: f("\x1B[8m", "\x1B[28m"),
strikethrough: f("\x1B[9m", "\x1B[29m"),
black: f("\x1B[30m", "\x1B[39m"),
red: f("\x1B[31m", "\x1B[39m"),
green: f("\x1B[32m", "\x1B[39m"),
yellow: f("\x1B[33m", "\x1B[39m"),
blue: f("\x1B[34m", "\x1B[39m"),
magenta: f("\x1B[35m", "\x1B[39m"),
cyan: f("\x1B[36m", "\x1B[39m"),
white: f("\x1B[37m", "\x1B[39m"),
gray: f("\x1B[90m", "\x1B[39m"),
bgBlack: f("\x1B[40m", "\x1B[49m"),
bgRed: f("\x1B[41m", "\x1B[49m"),
bgGreen: f("\x1B[42m", "\x1B[49m"),
bgYellow: f("\x1B[43m", "\x1B[49m"),
bgBlue: f("\x1B[44m", "\x1B[49m"),
bgMagenta: f("\x1B[45m", "\x1B[49m"),
bgCyan: f("\x1B[46m", "\x1B[49m"),
bgWhite: f("\x1B[47m", "\x1B[49m"),
blackBright: f("\x1B[90m", "\x1B[39m"),
redBright: f("\x1B[91m", "\x1B[39m"),
greenBright: f("\x1B[92m", "\x1B[39m"),
yellowBright: f("\x1B[93m", "\x1B[39m"),
blueBright: f("\x1B[94m", "\x1B[39m"),
magentaBright: f("\x1B[95m", "\x1B[39m"),
cyanBright: f("\x1B[96m", "\x1B[39m"),
whiteBright: f("\x1B[97m", "\x1B[39m"),
bgBlackBright: f("\x1B[100m", "\x1B[49m"),
bgRedBright: f("\x1B[101m", "\x1B[49m"),
bgGreenBright: f("\x1B[102m", "\x1B[49m"),
bgYellowBright: f("\x1B[103m", "\x1B[49m"),
bgBlueBright: f("\x1B[104m", "\x1B[49m"),
bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
bgCyanBright: f("\x1B[106m", "\x1B[49m"),
bgWhiteBright: f("\x1B[107m", "\x1B[49m")
};
};
module.exports = createColors();
module.exports.createColors = createColors;
}
});
// node_modules/sisteransi/src/index.js
var require_src = __commonJS({
"node_modules/sisteransi/src/index.js"(exports, module) {
"use strict";
var ESC = "\x1B";
var CSI = `${ESC}[`;
var beep = "\x07";
var cursor = {
to(x3, y2) {
if (!y2) return `${CSI}${x3 + 1}G`;
return `${CSI}${y2 + 1};${x3 + 1}H`;
},
move(x3, y2) {
let ret = "";
if (x3 < 0) ret += `${CSI}${-x3}D`;
else if (x3 > 0) ret += `${CSI}${x3}C`;
if (y2 < 0) ret += `${CSI}${-y2}A`;
else if (y2 > 0) ret += `${CSI}${y2}B`;
return ret;
},
up: (count = 1) => `${CSI}${count}A`,
down: (count = 1) => `${CSI}${count}B`,
forward: (count = 1) => `${CSI}${count}C`,
backward: (count = 1) => `${CSI}${count}D`,
nextLine: (count = 1) => `${CSI}E`.repeat(count),
prevLine: (count = 1) => `${CSI}F`.repeat(count),
left: `${CSI}G`,
hide: `${CSI}?25l`,
show: `${CSI}?25h`,
save: `${ESC}7`,
restore: `${ESC}8`
};
var scroll = {
up: (count = 1) => `${CSI}S`.repeat(count),
down: (count = 1) => `${CSI}T`.repeat(count)
};
var erase = {
screen: `${CSI}2J`,
up: (count = 1) => `${CSI}1J`.repeat(count),
down: (count = 1) => `${CSI}J`.repeat(count),
line: `${CSI}2K`,
lineEnd: `${CSI}K`,
lineStart: `${CSI}1K`,
lines(count) {
let clear = "";
for (let i = 0; i < count; i++)
clear += this.line + (i < count - 1 ? cursor.up() : "");
if (count)
clear += cursor.left;
return clear;
}
};
module.exports = { cursor, scroll, erase, beep };
}
});
// node_modules/@clack/core/dist/index.mjs
var import_picocolors = __toESM(require_picocolors(), 1);
var import_sisteransi = __toESM(require_src(), 1);
import { stdout as R, stdin as q } from "node:process";
import * as k from "node:readline";
import ot from "node:readline";
import { ReadStream as J } from "node:tty";
function B(t, e2, s) {
if (!s.some((u) => !u.disabled)) return t;
const i = t + e2, r = Math.max(s.length - 1, 0), n = i < 0 ? r : i > r ? 0 : i;
return s[n].disabled ? B(n, e2 < 0 ? -1 : 1, s) : n;
}
var at = (t) => t === 161 || t === 164 || t === 167 || t === 168 || t === 170 || t === 173 || t === 174 || t >= 176 && t <= 180 || t >= 182 && t <= 186 || t >= 188 && t <= 191 || t === 198 || t === 208 || t === 215 || t === 216 || t >= 222 && t <= 225 || t === 230 || t >= 232 && t <= 234 || t === 236 || t === 237 || t === 240 || t === 242 || t === 243 || t >= 247 && t <= 250 || t === 252 || t === 254 || t === 257 || t === 273 || t === 275 || t === 283 || t === 294 || t === 295 || t === 299 || t >= 305 && t <= 307 || t === 312 || t >= 319 && t <= 322 || t === 324 || t >= 328 && t <= 331 || t === 333 || t === 338 || t === 339 || t === 358 || t === 359 || t === 363 || t === 462 || t === 464 || t === 466 || t === 468 || t === 470 || t === 472 || t === 474 || t === 476 || t === 593 || t === 609 || t === 708 || t === 711 || t >= 713 && t <= 715 || t === 717 || t === 720 || t >= 728 && t <= 731 || t === 733 || t === 735 || t >= 768 && t <= 879 || t >= 913 && t <= 929 || t >= 931 && t <= 937 || t >= 945 && t <= 961 || t >= 963 && t <= 969 || t === 1025 || t >= 1040 && t <= 1103 || t === 1105 || t === 8208 || t >= 8211 && t <= 8214 || t === 8216 || t === 8217 || t === 8220 || t === 8221 || t >= 8224 && t <= 8226 || t >= 8228 && t <= 8231 || t === 8240 || t === 8242 || t === 8243 || t === 8245 || t === 8251 || t === 8254 || t === 8308 || t === 8319 || t >= 8321 && t <= 8324 || t === 8364 || t === 8451 || t === 8453 || t === 8457 || t === 8467 || t === 8470 || t === 8481 || t === 8482 || t === 8486 || t === 8491 || t === 8531 || t === 8532 || t >= 8539 && t <= 8542 || t >= 8544 && t <= 8555 || t >= 8560 && t <= 8569 || t === 8585 || t >= 8592 && t <= 8601 || t === 8632 || t === 8633 || t === 8658 || t === 8660 || t === 8679 || t === 8704 || t === 8706 || t === 8707 || t === 8711 || t === 8712 || t === 8715 || t === 8719 || t === 8721 || t === 8725 || t === 8730 || t >= 8733 && t <= 8736 || t === 8739 || t === 8741 || t >= 8743 && t <= 8748 || t === 8750 || t >= 8756 && t <= 8759 || t === 8764 || t === 8765 || t === 8776 || t === 8780 || t === 8786 || t === 8800 || t === 8801 || t >= 8804 && t <= 8807 || t === 8810 || t === 8811 || t === 8814 || t === 8815 || t === 8834 || t === 8835 || t === 8838 || t === 8839 || t === 8853 || t === 8857 || t === 8869 || t === 8895 || t === 8978 || t >= 9312 && t <= 9449 || t >= 9451 && t <= 9547 || t >= 9552 && t <= 9587 || t >= 9600 && t <= 9615 || t >= 9618 && t <= 9621 || t === 9632 || t === 9633 || t >= 9635 && t <= 9641 || t === 9650 || t === 9651 || t === 9654 || t === 9655 || t === 9660 || t === 9661 || t === 9664 || t === 9665 || t >= 9670 && t <= 9672 || t === 9675 || t >= 9678 && t <= 9681 || t >= 9698 && t <= 9701 || t === 9711 || t === 9733 || t === 9734 || t === 9737 || t === 9742 || t === 9743 || t === 9756 || t === 9758 || t === 9792 || t === 9794 || t === 9824 || t === 9825 || t >= 9827 && t <= 9829 || t >= 9831 && t <= 9834 || t === 9836 || t === 9837 || t === 9839 || t === 9886 || t === 9887 || t === 9919 || t >= 9926 && t <= 9933 || t >= 9935 && t <= 9939 || t >= 9941 && t <= 9953 || t === 9955 || t === 9960 || t === 9961 || t >= 9963 && t <= 9969 || t === 9972 || t >= 9974 && t <= 9977 || t === 9979 || t === 9980 || t === 9982 || t === 9983 || t === 10045 || t >= 10102 && t <= 10111 || t >= 11094 && t <= 11097 || t >= 12872 && t <= 12879 || t >= 57344 && t <= 63743 || t >= 65024 && t <= 65039 || t === 65533 || t >= 127232 && t <= 127242 || t >= 127248 && t <= 127277 || t >= 127280 && t <= 127337 || t >= 127344 && t <= 127373 || t === 127375 || t === 127376 || t >= 127387 && t <= 127404 || t >= 917760 && t <= 917999 || t >= 983040 && t <= 1048573 || t >= 1048576 && t <= 1114109;
var lt = (t) => t === 12288 || t >= 65281 && t <= 65376 || t >= 65504 && t <= 65510;
var ht = (t) => t >= 4352 && t <= 4447 || t === 8986 || t === 8987 || t === 9001 || t === 9002 || t >= 9193 && t <= 9196 || t === 9200 || t === 9203 || t === 9725 || t === 9726 || t === 9748 || t === 9749 || t >= 9800 && t <= 9811 || t === 9855 || t === 9875 || t === 9889 || t === 9898 || t === 9899 || t === 9917 || t === 9918 || t === 9924 || t === 9925 || t === 9934 || t === 9940 || t === 9962 || t === 9970 || t === 9971 || t === 9973 || t === 9978 || t === 9981 || t === 9989 || t === 9994 || t === 9995 || t === 10024 || t === 10060 || t === 10062 || t >= 10067 && t <= 10069 || t === 10071 || t >= 10133 && t <= 10135 || t === 10160 || t === 10175 || t === 11035 || t === 11036 || t === 11088 || t === 11093 || t >= 11904 && t <= 11929 || t >= 11931 && t <= 12019 || t >= 12032 && t <= 12245 || t >= 12272 && t <= 12287 || t >= 12289 && t <= 12350 || t >= 12353 && t <= 12438 || t >= 12441 && t <= 12543 || t >= 12549 && t <= 12591 || t >= 12593 && t <= 12686 || t >= 12688 && t <= 12771 || t >= 12783 && t <= 12830 || t >= 12832 && t <= 12871 || t >= 12880 && t <= 19903 || t >= 19968 && t <= 42124 || t >= 42128 && t <= 42182 || t >= 43360 && t <= 43388 || t >= 44032 && t <= 55203 || t >= 63744 && t <= 64255 || t >= 65040 && t <= 65049 || t >= 65072 && t <= 65106 || t >= 65108 && t <= 65126 || t >= 65128 && t <= 65131 || t >= 94176 && t <= 94180 || t === 94192 || t === 94193 || t >= 94208 && t <= 100343 || t >= 100352 && t <= 101589 || t >= 101632 && t <= 101640 || t >= 110576 && t <= 110579 || t >= 110581 && t <= 110587 || t === 110589 || t === 110590 || t >= 110592 && t <= 110882 || t === 110898 || t >= 110928 && t <= 110930 || t === 110933 || t >= 110948 && t <= 110951 || t >= 110960 && t <= 111355 || t === 126980 || t === 127183 || t === 127374 || t >= 127377 && t <= 127386 || t >= 127488 && t <= 127490 || t >= 127504 && t <= 127547 || t >= 127552 && t <= 127560 || t === 127568 || t === 127569 || t >= 127584 && t <= 127589 || t >= 127744 && t <= 127776 || t >= 127789 && t <= 127797 || t >= 127799 && t <= 127868 || t >= 127870 && t <= 127891 || t >= 127904 && t <= 127946 || t >= 127951 && t <= 127955 || t >= 127968 && t <= 127984 || t === 127988 || t >= 127992 && t <= 128062 || t === 128064 || t >= 128066 && t <= 128252 || t >= 128255 && t <= 128317 || t >= 128331 && t <= 128334 || t >= 128336 && t <= 128359 || t === 128378 || t === 128405 || t === 128406 || t === 128420 || t >= 128507 && t <= 128591 || t >= 128640 && t <= 128709 || t === 128716 || t >= 128720 && t <= 128722 || t >= 128725 && t <= 128727 || t >= 128732 && t <= 128735 || t === 128747 || t === 128748 || t >= 128756 && t <= 128764 || t >= 128992 && t <= 129003 || t === 129008 || t >= 129292 && t <= 129338 || t >= 129340 && t <= 129349 || t >= 129351 && t <= 129535 || t >= 129648 && t <= 129660 || t >= 129664 && t <= 129672 || t >= 129680 && t <= 129725 || t >= 129727 && t <= 129733 || t >= 129742 && t <= 129755 || t >= 129760 && t <= 129768 || t >= 129776 && t <= 129784 || t >= 131072 && t <= 196605 || t >= 196608 && t <= 262141;
var O = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y;
var y = /[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y;
var L = /\t{1,1000}/y;
var P = new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*", "yu");
var M = /(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y;
var ct = new RegExp("\\p{M}+", "gu");
var ft = { limit: 1 / 0, ellipsis: "" };
var X = (t, e2 = {}, s = {}) => {
const i = e2.limit ?? 1 / 0, r = e2.ellipsis ?? "", n = e2?.ellipsisWidth ?? (r ? X(r, ft, s).width : 0), u = s.ansiWidth ?? 0, a = s.controlWidth ?? 0, l = s.tabWidth ?? 8, E = s.ambiguousWidth ?? 1, g = s.emojiWidth ?? 2, m = s.fullWidthWidth ?? 2, A = s.regularWidth ?? 1, V2 = s.wideWidth ?? 2;
let h = 0, o = 0, p = t.length, v = 0, F = false, d2 = p, b = Math.max(0, i - n), C2 = 0, w = 0, c = 0, f = 0;
t: for (; ; ) {
if (w > C2 || o >= p && o > h) {
const ut = t.slice(C2, w) || t.slice(h, o);
v = 0;
for (const Y of ut.replaceAll(ct, "")) {
const $ = Y.codePointAt(0) || 0;
if (lt($) ? f = m : ht($) ? f = V2 : E !== A && at($) ? f = E : f = A, c + f > b && (d2 = Math.min(d2, Math.max(C2, h) + v)), c + f > i) {
F = true;
break t;
}
v += Y.length, c += f;
}
C2 = w = 0;
}
if (o >= p) break;
if (M.lastIndex = o, M.test(t)) {
if (v = M.lastIndex - o, f = v * A, c + f > b && (d2 = Math.min(d2, o + Math.floor((b - c) / A))), c + f > i) {
F = true;
break;
}
c += f, C2 = h, w = o, o = h = M.lastIndex;
continue;
}
if (O.lastIndex = o, O.test(t)) {
if (c + u > b && (d2 = Math.min(d2, o)), c + u > i) {
F = true;
break;
}
c += u, C2 = h, w = o, o = h = O.lastIndex;
continue;
}
if (y.lastIndex = o, y.test(t)) {
if (v = y.lastIndex - o, f = v * a, c + f > b && (d2 = Math.min(d2, o + Math.floor((b - c) / a))), c + f > i) {
F = true;
break;
}
c += f, C2 = h, w = o, o = h = y.lastIndex;
continue;
}
if (L.lastIndex = o, L.test(t)) {
if (v = L.lastIndex - o, f = v * l, c + f > b && (d2 = Math.min(d2, o + Math.floor((b - c) / l))), c + f > i) {
F = true;
break;
}
c += f, C2 = h, w = o, o = h = L.lastIndex;
continue;
}
if (P.lastIndex = o, P.test(t)) {
if (c + g > b && (d2 = Math.min(d2, o)), c + g > i) {
F = true;
break;
}
c += g, C2 = h, w = o, o = h = P.lastIndex;
continue;
}
o += 1;
}
return { width: F ? b : c, index: F ? d2 : p, truncated: F, ellipsed: F && i >= n };
};
var pt = { limit: 1 / 0, ellipsis: "", ellipsisWidth: 0 };
var S = (t, e2 = {}) => X(t, pt, e2).width;
var W = "\x1B";
var Z = "\x9B";
var Ft = 39;
var j = "\x07";
var Q = "[";
var dt = "]";
var tt = "m";
var U = `${dt}8;;`;
var et = new RegExp(`(?:\\${Q}(?<code>\\d+)m|\\${U}(?<uri>.*)${j})`, "y");
var mt = (t) => {
if (t >= 30 && t <= 37 || t >= 90 && t <= 97) return 39;
if (t >= 40 && t <= 47 || t >= 100 && t <= 107) return 49;
if (t === 1 || t === 2) return 22;
if (t === 3) return 23;
if (t === 4) return 24;
if (t === 7) return 27;
if (t === 8) return 28;
if (t === 9) return 29;
if (t === 0) return 0;
};
var st = (t) => `${W}${Q}${t}${tt}`;
var it = (t) => `${W}${U}${t}${j}`;
var gt = (t) => t.map((e2) => S(e2));
var G = (t, e2, s) => {
const i = e2[Symbol.iterator]();
let r = false, n = false, u = t.at(-1), a = u === void 0 ? 0 : S(u), l = i.next(), E = i.next(), g = 0;
for (; !l.done; ) {
const m = l.value, A = S(m);
a + A <= s ? t[t.length - 1] += m : (t.push(m), a = 0), (m === W || m === Z) && (r = true, n = e2.startsWith(U, g + 1)), r ? n ? m === j && (r = false, n = false) : m === tt && (r = false) : (a += A, a === s && !E.done && (t.push(""), a = 0)), l = E, E = i.next(), g += m.length;
}
u = t.at(-1), !a && u !== void 0 && u.length > 0 && t.length > 1 && (t[t.length - 2] += t.pop());
};
var vt = (t) => {
const e2 = t.split(" ");
let s = e2.length;
for (; s > 0 && !(S(e2[s - 1]) > 0); ) s--;
return s === e2.length ? t : e2.slice(0, s).join(" ") + e2.slice(s).join("");
};
var Et = (t, e2, s = {}) => {
if (s.trim !== false && t.trim() === "") return "";
let i = "", r, n;
const u = t.split(" "), a = gt(u);
let l = [""];
for (const [h, o] of u.entries()) {
s.trim !== false && (l[l.length - 1] = (l.at(-1) ?? "").trimStart());
let p = S(l.at(-1) ?? "");
if (h !== 0 && (p >= e2 && (s.wordWrap === false || s.trim === false) && (l.push(""), p = 0), (p > 0 || s.trim === false) && (l[l.length - 1] += " ", p++)), s.hard && a[h] > e2) {
const v = e2 - p, F = 1 + Math.floor((a[h] - v - 1) / e2);
Math.floor((a[h] - 1) / e2) < F && l.push(""), G(l, o, e2);
continue;
}
if (p + a[h] > e2 && p > 0 && a[h] > 0) {
if (s.wordWrap === false && p < e2) {
G(l, o, e2);
continue;
}
l.push("");
}
if (p + a[h] > e2 && s.wordWrap === false) {
G(l, o, e2);
continue;
}
l[l.length - 1] += o;
}
s.trim !== false && (l = l.map((h) => vt(h)));
const E = l.join(`
`), g = E[Symbol.iterator]();
let m = g.next(), A = g.next(), V2 = 0;
for (; !m.done; ) {
const h = m.value, o = A.value;
if (i += h, h === W || h === Z) {
et.lastIndex = V2 + 1;
const F = et.exec(E)?.groups;
if (F?.code !== void 0) {
const d2 = Number.parseFloat(F.code);
r = d2 === Ft ? void 0 : d2;
} else F?.uri !== void 0 && (n = F.uri.length === 0 ? void 0 : F.uri);
}
const p = r ? mt(r) : void 0;
o === `
` ? (n && (i += it("")), r && p && (i += st(p))) : h === `
` && (r && p && (i += st(r)), n && (i += it(n))), V2 += h.length, m = A, A = g.next();
}
return i;
};
function K(t, e2, s) {
return String(t).normalize().replaceAll(`\r
`, `
`).split(`
`).map((i) => Et(i, e2, s)).join(`
`);
}
var At = ["up", "down", "left", "right", "space", "enter", "cancel"];
var _ = { actions: new Set(At), aliases: /* @__PURE__ */ new Map([["k", "up"], ["j", "down"], ["h", "left"], ["l", "right"], ["", "cancel"], ["escape", "cancel"]]), messages: { cancel: "Canceled", error: "Something went wrong" }, withGuide: true };
function H(t, e2) {
if (typeof t == "string") return _.aliases.get(t) === e2;
for (const s of t) if (s !== void 0 && H(s, e2)) return true;
return false;
}
function _t(t, e2) {
if (t === e2) return;
const s = t.split(`
`), i = e2.split(`
`), r = Math.max(s.length, i.length), n = [];
for (let u = 0; u < r; u++) s[u] !== i[u] && n.push(u);
return { lines: n, numLinesBefore: s.length, numLinesAfter: i.length, numLines: r };
}
var bt = globalThis.process.platform.startsWith("win");
var z = Symbol("clack:cancel");
function Ct(t) {
return t === z;
}
function T(t, e2) {
const s = t;
s.isTTY && s.setRawMode(e2);
}
function Bt({ input: t = q, output: e2 = R, overwrite: s = true, hideCursor: i = true } = {}) {
const r = k.createInterface({ input: t, output: e2, prompt: "", tabSize: 1 });
k.emitKeypressEvents(t, r), t instanceof J && t.isTTY && t.setRawMode(true);
const n = (u, { name: a, sequence: l }) => {
const E = String(u);
if (H([E, a, l], "cancel")) {
i && e2.write(import_sisteransi.cursor.show), process.exit(0);
return;
}
if (!s) return;
const g = a === "return" ? 0 : -1, m = a === "return" ? -1 : 0;
k.moveCursor(e2, g, m, () => {
k.clearLine(e2, 1, () => {
t.once("keypress", n);
});
});
};
return i && e2.write(import_sisteransi.cursor.hide), t.once("keypress", n), () => {
t.off("keypress", n), i && e2.write(import_sisteransi.cursor.show), t instanceof J && t.isTTY && !bt && t.setRawMode(false), r.terminal = false, r.close();
};
}
var rt = (t) => "columns" in t && typeof t.columns == "number" ? t.columns : 80;
var nt = (t) => "rows" in t && typeof t.rows == "number" ? t.rows : 20;
function xt(t, e2, s, i = s) {
const r = rt(t ?? R);
return K(e2, r - s.length, { hard: true, trim: false }).split(`
`).map((n, u) => `${u === 0 ? i : s}${n}`).join(`
`);
}
var x = class {
input;
output;
_abortSignal;
rl;
opts;
_render;
_track = false;
_prevFrame = "";
_subscribers = /* @__PURE__ */ new Map();
_cursor = 0;
state = "initial";
error = "";
value;
userInput = "";
constructor(e2, s = true) {
const { input: i = q, output: r = R, render: n, signal: u, ...a } = e2;
this.opts = a, this.onKeypress = this.onKeypress.bind(this), this.close = this.close.bind(this), this.render = this.render.bind(this), this._render = n.bind(this), this._track = s, this._abortSignal = u, this.input = i, this.output = r;
}
unsubscribe() {
this._subscribers.clear();
}
setSubscriber(e2, s) {
const i = this._subscribers.get(e2) ?? [];
i.push(s), this._subscribers.set(e2, i);
}
on(e2, s) {
this.setSubscriber(e2, { cb: s });
}
once(e2, s) {
this.setSubscriber(e2, { cb: s, once: true });
}
emit(e2, ...s) {
const i = this._subscribers.get(e2) ?? [], r = [];
for (const n of i) n.cb(...s), n.once && r.push(() => i.splice(i.indexOf(n), 1));
for (const n of r) n();
}
prompt() {
return new Promise((e2) => {
if (this._abortSignal) {
if (this._abortSignal.aborted) return this.state = "cancel", this.close(), e2(z);
this._abortSignal.addEventListener("abort", () => {
this.state = "cancel", this.close();
}, { once: true });
}
this.rl = ot.createInterface({ input: this.input, tabSize: 2, prompt: "", escapeCodeTimeout: 50, terminal: true }), this.rl.prompt(), this.opts.initialUserInput !== void 0 && this._setUserInput(this.opts.initialUserInput, true), this.input.on("keypress", this.onKeypress), T(this.input, true), this.output.on("resize", this.render), this.render(), this.once("submit", () => {
this.output.write(import_sisteransi.cursor.show), this.output.off("resize", this.render), T(this.input, false), e2(this.value);
}), this.once("cancel", () => {
this.output.write(import_sisteransi.cursor.show), this.output.off("resize", this.render), T(this.input, false), e2(z);
});
});
}
_isActionKey(e2, s) {
return e2 === " ";
}
_setValue(e2) {
this.value = e2, this.emit("value", this.value);
}
_setUserInput(e2, s) {
this.userInput = e2 ?? "", this.emit("userInput", this.userInput), s && this._track && this.rl && (this.rl.write(this.userInput), this._cursor = this.rl.cursor);
}
_clearUserInput() {
this.rl?.write(null, { ctrl: true, name: "u" }), this._setUserInput("");
}
onKeypress(e2, s) {
if (this._track && s.name !== "return" && (s.name && this._isActionKey(e2, s) && this.rl?.write(null, { ctrl: true, name: "h" }), this._cursor = this.rl?.cursor ?? 0, this._setUserInput(this.rl?.line)), this.state === "error" && (this.state = "active"), s?.name && (!this._track && _.aliases.has(s.name) && this.emit("cursor", _.aliases.get(s.name)), _.actions.has(s.name) && this.emit("cursor", s.name)), e2 && (e2.toLowerCase() === "y" || e2.toLowerCase() === "n") && this.emit("confirm", e2.toLowerCase() === "y"), this.emit("key", e2?.toLowerCase(), s), s?.name === "return") {
if (this.opts.validate) {
const i = this.opts.validate(this.value);
i && (this.error = i instanceof Error ? i.message : i, this.state = "error", this.rl?.write(this.userInput));
}
this.state !== "error" && (this.state = "submit");
}
H([e2, s?.name, s?.sequence], "cancel") && (this.state = "cancel"), (this.state === "submit" || this.state === "cancel") && this.emit("finalize"), this.render(), (this.state === "submit" || this.state === "cancel") && this.close();
}
close() {
this.input.unpipe(), this.input.removeListener("keypress", this.onKeypress), this.output.write(`
`), T(this.input, false), this.rl?.close(), this.rl = void 0, this.emit(`${this.state}`, this.value), this.unsubscribe();
}
restoreCursor() {
const e2 = K(this._prevFrame, process.stdout.columns, { hard: true, trim: false }).split(`
`).length - 1;
this.output.write(import_sisteransi.cursor.move(-999, e2 * -1));
}
render() {
const e2 = K(this._render(this) ?? "", process.stdout.columns, { hard: true, trim: false });
if (e2 !== this._prevFrame) {
if (this.state === "initial") this.output.write(import_sisteransi.cursor.hide);
else {
const s = _t(this._prevFrame, e2), i = nt(this.output);
if (this.restoreCursor(), s) {
const r = Math.max(0, s.numLinesAfter - i), n = Math.max(0, s.numLinesBefore - i);
let u = s.lines.find((a) => a >= r);
if (u === void 0) {
this._prevFrame = e2;
return;
}
if (s.lines.length === 1) {
this.output.write(import_sisteransi.cursor.move(0, u - n)), this.output.write(import_sisteransi.erase.lines(1));
const a = e2.split(`
`);
this.output.write(a[u]), this._prevFrame = e2, this.output.write(import_sisteransi.cursor.move(0, a.length - u - 1));
return;
} else if (s.lines.length > 1) {
if (r < n) u = r;
else {
const l = u - n;
l > 0 && this.output.write(import_sisteransi.cursor.move(0, l));
}
this.output.write(import_sisteransi.erase.down());
const a = e2.split(`
`).slice(u);
this.output.write(a.join(`
`)), this._prevFrame = e2;
return;
}
}
this.output.write(import_sisteransi.erase.down());
}
this.output.write(e2), this.state === "initial" && (this.state = "active"), this._prevFrame = e2;
}
}
};
var kt = class extends x {
get cursor() {
return this.value ? 0 : 1;
}
get _value() {
return this.cursor === 0;
}
constructor(e2) {
super(e2, false), this.value = !!e2.initialValue, this.on("userInput", () => {
this.value = this._value;
}), this.on("confirm", (s) => {
this.output.write(import_sisteransi.cursor.move(0, -1)), this.value = s, this.state = "submit", this.close();
}), this.on("cursor", () => {
this.value = !this.value;
});
}
};
var Lt = class extends x {
options;
cursor = 0;
get _value() {
return this.options[this.cursor].value;
}
get _enabledOptions() {
return this.options.filter((e2) => e2.disabled !== true);
}
toggleAll() {
const e2 = this._enabledOptions, s = this.value !== void 0 && this.value.length === e2.length;
this.value = s ? [] : e2.map((i) => i.value);
}
toggleInvert() {
const e2 = this.value;
if (!e2) return;
const s = this._enabledOptions.filter((i) => !e2.includes(i.value));
this.value = s.map((i) => i.value);
}
toggleValue() {
this.value === void 0 && (this.value = []);
const e2 = this.value.includes(this._value);
this.value = e2 ? this.value.filter((s) => s !== this._value) : [...this.value, this._value];
}
constructor(e2) {
super(e2, false), this.options = e2.options, this.value = [...e2.initialValues ?? []];
const s = Math.max(this.options.findIndex(({ value: i }) => i === e2.cursorAt), 0);
this.cursor = this.options[s].disabled ? B(s, 1, this.options) : s, this.on("key", (i) => {
i === "a" && this.toggleAll(), i === "i" && this.toggleInvert();
}), this.on("cursor", (i) => {
switch (i) {
case "left":
case "up":
this.cursor = B(this.cursor, -1, this.options);
break;
case "down":
case "right":
this.cursor = B(this.cursor, 1, this.options);
break;
case "space":
this.toggleValue();
break;
}
});
}
};
var Mt = class extends x {
_mask = "\u2022";
get cursor() {
return this._cursor;
}
get masked() {
return this.userInput.replaceAll(/./g, this._mask);
}
get userInputWithCursor() {
if (this.state === "submit" || this.state === "cancel") return this.masked;
const e2 = this.userInput;
if (this.cursor >= e2.length) return `${this.masked}${import_picocolors.default.inverse(import_picocolors.default.hidden("_"))}`;
const s = this.masked, i = s.slice(0, this.cursor), r = s.slice(this.cursor);
return `${i}${import_picocolors.default.inverse(r[0])}${r.slice(1)}`;
}
clear() {
this._clearUserInput();
}
constructor({ mask: e2, ...s }) {
super(s), this._mask = e2 ?? "\u2022", this.on("userInput", (i) => {
this._setValue(i);
});
}
};
var Wt = class extends x {
options;
cursor = 0;
get _selectedValue() {
return this.options[this.cursor];
}
changeValue() {
this.value = this._selectedValue.value;
}
constructor(e2) {
super(e2, false), this.options = e2.options;
const s = this.options.findIndex(({ value: r }) => r === e2.initialValue), i = s === -1 ? 0 : s;
this.cursor = this.options[i].disabled ? B(i, 1, this.options) : i, this.changeValue(), this.on("cursor", (r) => {
switch (r) {
case "left":
case "up":
this.cursor = B(this.cursor, -1, this.options);
break;
case "down":
case "right":
this.cursor = B(this.cursor, 1, this.options);
break;
}
this.changeValue();
});
}
};
var $t = class extends x {
get userInputWithCursor() {
if (this.state === "submit") return this.userInput;
const e2 = this.userInput;
if (this.cursor >= e2.length) return `${this.userInput}\u2588`;
const s = e2.slice(0, this.cursor), [i, ...r] = e2.slice(this.cursor);
return `${s}${import_picocolors.default.inverse(i)}${r.join("")}`;
}
get cursor() {
return this._cursor;
}
constructor(e2) {
super({ ...e2, initialUserInput: e2.initialUserInput ?? e2.initialValue }), this.on("userInput", (s) => {
this._setValue(s);
}), this.on("finalize", () => {
this.value || (this.value = e2.defaultValue), this.value === void 0 && (this.value = "");
});
}
};
// node_modules/@clack/prompts/dist/index.mjs
var import_picocolors2 = __toESM(require_picocolors(), 1);
import N2 from "node:process";
var import_sisteransi2 = __toESM(require_src(), 1);
function me() {
return N2.platform !== "win32" ? N2.env.TERM !== "linux" : !!N2.env.CI || !!N2.env.WT_SESSION || !!N2.env.TERMINUS_SUBLIME || N2.env.ConEmuTask === "{cmd::Cmder}" || N2.env.TERM_PROGRAM === "Terminus-Sublime" || N2.env.TERM_PROGRAM === "vscode" || N2.env.TERM === "xterm-256color" || N2.env.TERM === "alacritty" || N2.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
}
var et2 = me();
var ct2 = () => process.env.CI === "true";
var C = (t, r) => et2 ? t : r;
var Rt = C("\u25C6", "*");
var dt2 = C("\u25A0", "x");
var $t2 = C("\u25B2", "x");
var V = C("\u25C7", "o");
var ht2 = C("\u250C", "T");
var d = C("\u2502", "|");
var x2 = C("\u2514", "\u2014");
var Ot = C("\u2510", "T");
var Pt = C("\u2518", "\u2014");
var Q2 = C("\u25CF", ">");
var H2 = C("\u25CB", " ");
var st2 = C("\u25FB", "[\u2022]");
var U2 = C("\u25FC", "[+]");
var q2 = C("\u25FB", "[ ]");
var Nt = C("\u25AA", "\u2022");
var rt2 = C("\u2500", "-");
var mt2 = C("\u256E", "+");
var Wt2 = C("\u251C", "+");
var pt2 = C("\u256F", "+");
var gt2 = C("\u2570", "+");
var Lt2 = C("\u256D", "+");
var ft2 = C("\u25CF", "\u2022");
var Ft2 = C("\u25C6", "*");
var yt2 = C("\u25B2", "!");
var Et2 = C("\u25A0", "x");
var W2 = (t) => {
switch (t) {
case "initial":
case "active":
return import_picocolors2.default.cyan(Rt);
case "cancel":
return import_picocolors2.default.red(dt2);
case "error":
return import_picocolors2.default.yellow($t2);
case "submit":
return import_picocolors2.default.green(V);
}
};
var vt2 = (t) => {
switch (t) {
case "initial":
case "active":
return import_picocolors2.default.cyan(d);
case "cancel":
return import_picocolors2.default.red(d);
case "error":
return import_picocolors2.default.yellow(d);
case "submit":
return import_picocolors2.default.green(d);
}
};
var pe = (t) => t === 161 || t === 164 || t === 167 || t === 168 || t === 170 || t === 173 || t === 174 || t >= 176 && t <= 180 || t >= 182 && t <= 186 || t >= 188 && t <= 191 || t === 198 || t === 208 || t === 215 || t === 216 || t >= 222 && t <= 225 || t === 230 || t >= 232 && t <= 234 || t === 236 || t === 237 || t === 240 || t === 242 || t === 243 || t >= 247 && t <= 250 || t === 252 || t === 254 || t === 257 || t === 273 || t === 275 || t === 283 || t === 294 || t === 295 || t === 299 || t >= 305 && t <= 307 || t === 312 || t >= 319 && t <= 322 || t === 324 || t >= 328 && t <= 331 || t === 333 || t === 338 || t === 339 || t === 358 || t === 359 || t === 363 || t === 462 || t === 464 || t === 466 || t === 468 || t === 470 || t === 472 || t === 474 || t === 476 || t === 593 || t === 609 || t === 708 || t === 711 || t >= 713 && t <= 715 || t === 717 || t === 720 || t >= 728 && t <= 731 || t === 733 || t === 735 || t >= 768 && t <= 879 || t >= 913 && t <= 929 || t >= 931 && t <= 937 || t >= 945 && t <= 961 || t >= 963 && t <= 969 || t === 1025 || t >= 1040 && t <= 1103 || t === 1105 || t === 8208 || t >= 8211 && t <= 8214 || t === 8216 || t === 8217 || t === 8220 || t === 8221 || t >= 8224 && t <= 8226 || t >= 8228 && t <= 8231 || t === 8240 || t === 8242 || t === 8243 || t === 8245 || t === 8251 || t === 8254 || t === 8308 || t === 8319 || t >= 8321 && t <= 8324 || t === 8364 || t === 8451 || t === 8453 || t === 8457 || t === 8467 || t === 8470 || t === 8481 || t === 8482 || t === 8486 || t === 8491 || t === 8531 || t === 8532 || t >= 8539 && t <= 8542 || t >= 8544 && t <= 8555 || t >= 8560 && t <= 8569 || t === 8585 || t >= 8592 && t <= 8601 || t === 8632 || t === 8633 || t === 8658 || t === 8660 || t === 8679 || t === 8704 || t === 8706 || t === 8707 || t === 8711 || t === 8712 || t === 8715 || t === 8719 || t === 8721 || t === 8725 || t === 8730 || t >= 8733 && t <= 8736 || t === 8739 || t === 8741 || t >= 8743 && t <= 8748 || t === 8750 || t >= 8756 && t <= 8759 || t === 8764 || t === 8765 || t === 8776 || t === 8780 || t === 8786 || t === 8800 || t === 8801 || t >= 8804 && t <= 8807 || t === 8810 || t === 8811 || t === 8814 || t === 8815 || t === 8834 || t === 8835 || t === 8838 || t === 8839 || t === 8853 || t === 8857 || t === 8869 || t === 8895 || t === 8978 || t >= 9312 && t <= 9449 || t >= 9451 && t <= 9547 || t >= 9552 && t <= 9587 || t >= 9600 && t <= 9615 || t >= 9618 && t <= 9621 || t === 9632 || t === 9633 || t >= 9635 && t <= 9641 || t === 9650 || t === 9651 || t === 9654 || t === 9655 || t === 9660 || t === 9661 || t === 9664 || t === 9665 || t >= 9670 && t <= 9672 || t === 9675 || t >= 9678 && t <= 9681 || t >= 9698 && t <= 9701 || t === 9711 || t === 9733 || t === 9734 || t === 9737 || t === 9742 || t === 9743 || t === 9756 || t === 9758 || t === 9792 || t === 9794 || t === 9824 || t === 9825 || t >= 9827 && t <= 9829 || t >= 9831 && t <= 9834 || t === 9836 || t === 9837 || t === 9839 || t === 9886 || t === 9887 || t === 9919 || t >= 9926 && t <= 9933 || t >= 9935 && t <= 9939 || t >= 9941 && t <= 9953 || t === 9955 || t === 9960 || t === 9961 || t >= 9963 && t <= 9969 || t === 9972 || t >= 9974 && t <= 9977 || t === 9979 || t === 9980 || t === 9982 || t === 9983 || t === 10045 || t >= 10102 && t <= 10111 || t >= 11094 && t <= 11097 || t >= 12872 && t <= 12879 || t >= 57344 && t <= 63743 || t >= 65024 && t <= 65039 || t === 65533 || t >= 127232 && t <= 127242 || t >= 127248 && t <= 127277 || t >= 127280 && t <= 127337 || t >= 127344 && t <= 127373 || t === 127375 || t === 127376 || t >= 127387 && t <= 127404 || t >= 917760 && t <= 917999 || t >= 983040 && t <= 1048573 || t >= 1048576 && t <= 1114109;
var ge = (t) => t === 12288 || t >= 65281 && t <= 65376 || t >= 65504 && t <= 65510;
var fe = (t) => t >= 4352 && t <= 4447 || t === 8986 || t === 8987 || t === 9001 || t === 9002 || t >= 9193 && t <= 9196 || t === 9200 || t === 9203 || t === 9725 || t === 9726 || t === 9748 || t === 9749 || t >= 9800 && t <= 9811 || t === 9855 || t === 9875 || t === 9889 || t === 9898 || t === 9899 || t === 9917 || t === 9918 || t === 9924 || t === 9925 || t === 9934 || t === 9940 || t === 9962 || t === 9970 || t === 9971 || t === 9973 || t === 9978 || t === 9981 || t === 9989 || t === 9994 || t === 9995 || t === 10024 || t === 10060 || t === 10062 || t >= 10067 && t <= 10069 || t === 10071 || t >= 10133 && t <= 10135 || t === 10160 || t === 10175 || t === 11035 || t === 11036 || t === 11088 || t === 11093 || t >= 11904 && t <= 11929 || t >= 11931 && t <= 12019 || t >= 12032 && t <= 12245 || t >= 12272 && t <= 12287 || t >= 12289 && t <= 12350 || t >= 12353 && t <= 12438 || t >= 12441 && t <= 12543 || t >= 12549 && t <= 12591 || t >= 12593 && t <= 12686 || t >= 12688 && t <= 12771 || t >= 12783 && t <= 12830 || t >= 12832 && t <= 12871 || t >= 12880 && t <= 19903 || t >= 19968 && t <= 42124 || t >= 42128 && t <= 42182 || t >= 43360 && t <= 43388 || t >= 44032 && t <= 55203 || t >= 63744 && t <= 64255 || t >= 65040 && t <= 65049 || t >= 65072 && t <= 65106 || t >= 65108 && t <= 65126 || t >= 65128 && t <= 65131 || t >= 94176 && t <= 94180 || t === 94192 || t === 94193 || t >= 94208 && t <= 100343 || t >= 100352 && t <= 101589 || t >= 101632 && t <= 101640 || t >= 110576 && t <= 110579 || t >= 110581 && t <= 110587 || t === 110589 || t === 110590 || t >= 110592 && t <= 110882 || t === 110898 || t >= 110928 && t <= 110930 || t === 110933 || t >= 110948 && t <= 110951 || t >= 110960 && t <= 111355 || t === 126980 || t === 127183 || t === 127374 || t >= 127377 && t <= 127386 || t >= 127488 && t <= 127490 || t >= 127504 && t <= 127547 || t >= 127552 && t <= 127560 || t === 127568 || t === 127569 || t >= 127584 && t <= 127589 || t >= 127744 && t <= 127776 || t >= 127789 && t <= 127797 || t >= 127799 && t <= 127868 || t >= 127870 && t <= 127891 || t >= 127904 && t <= 127946 || t >= 127951 && t <= 127955 || t >= 127968 && t <= 127984 || t === 127988 || t >= 127992 && t <= 128062 || t === 128064 || t >= 128066 && t <= 128252 || t >= 128255 && t <= 128317 || t >= 128331 && t <= 128334 || t >= 128336 && t <= 128359 || t === 128378 || t === 128405 || t === 128406 || t === 128420 || t >= 128507 && t <= 128591 || t >= 128640 && t <= 128709 || t === 128716 || t >= 128720 && t <= 128722 || t >= 128725 && t <= 128727 || t >= 128732 && t <= 128735 || t === 128747 || t === 128748 || t >= 128756 && t <= 128764 || t >= 128992 && t <= 129003 || t === 129008 || t >= 129292 && t <= 129338 || t >= 129340 && t <= 129349 || t >= 129351 && t <= 129535 || t >= 129648 && t <= 129660 || t >= 129664 && t <= 129672 || t >= 129680 && t <= 129725 || t >= 129727 && t <= 129733 || t >= 129742 && t <= 129755 || t >= 129760 && t <= 129768 || t >= 129776 && t <= 129784 || t >= 131072 && t <= 196605 || t >= 196608 && t <= 262141;
var At2 = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y;
var it2 = /[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y;
var nt2 = /\t{1,1000}/y;
var wt = new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*", "yu");
var at2 = /(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y;
var Fe = new RegExp("\\p{M}+", "gu");
var ye = { limit: 1 / 0, ellipsis: "" };
var jt = (t, r = {}, s = {}) => {
const i = r.limit ?? 1 / 0, a = r.ellipsis ?? "", o = r?.ellipsisWidth ?? (a ? jt(a, ye, s).width : 0), u = s.ansiWidth ?? 0, l = s.controlWidth ?? 0, n = s.tabWidth ?? 8, c = s.ambiguousWidth ?? 1, g = s.emojiWidth ?? 2, F = s.fullWidthWidth ?? 2, p = s.regularWidth ?? 1, E = s.wideWidth ?? 2;
let $ = 0, m = 0, h = t.length, y2 = 0, f = false, v = h, S2 = Math.max(0, i - o), I2 = 0, B2 = 0, A = 0, w = 0;
t: for (; ; ) {
if (B2 > I2 || m >= h && m > $) {
const _2 = t.slice(I2, B2) || t.slice($, m);
y2 = 0;
for (const D2 of _2.replaceAll(Fe, "")) {
const T2 = D2.codePointAt(0) || 0;
if (ge(T2) ? w = F : fe(T2) ? w = E : c !== p && pe(T2) ? w = c : w = p, A + w > S2 && (v = Math.min(v, Math.max(I2, $) + y2)), A + w > i) {
f = true;
break t;
}
y2 += D2.length, A += w;
}
I2 = B2 = 0;
}
if (m >= h) break;
if (at2.lastIndex = m, at2.test(t)) {
if (y2 = at2.lastIndex - m, w = y2 * p, A + w > S2 && (v = Math.min(v, m + Math.floor((S2 - A) / p))), A + w > i) {
f = true;
break;
}
A += w, I2 = $, B2 = m, m = $ = at2.lastIndex;
continue;
}
if (At2.lastIndex = m, At2.test(t)) {
if (A + u > S2 && (v = Math.min(v, m)), A + u > i) {
f = true;
break;
}
A += u, I2 = $, B2 = m, m = $ = At2.lastIndex;
continue;
}
if (it2.lastIndex = m, it2.test(t)) {
if (y2 = it2.lastIndex - m, w = y2 * l, A + w > S2 && (v = Math.min(v, m + Math.floor((S2 - A) / l))), A + w > i) {
f = true;
break;
}
A += w, I2 = $, B2 = m, m = $ = it2.lastIndex;
continue;
}
if (nt2.lastIndex = m, nt2.test(t)) {
if (y2 = nt2.lastIndex - m, w = y2 * n, A + w > S2 && (v = Math.min(v, m + Math.floor((S2 - A) / n))), A + w > i) {
f = true;
break;
}
A += w, I2 = $, B2 = m, m = $ = nt2.lastIndex;
continue;
}
if (wt.lastIndex = m, wt.test(t)) {
if (A + g > S2 && (v = Math.min(v, m)), A + g > i) {
f = true;
break;
}
A += g, I2 = $, B2 = m, m = $ = wt.lastIndex;
continue;
}
m += 1;
}
return { width: f ? S2 : A, index: f ? v : h, truncated: f, ellipsed: f && i >= o };
};
var Ee = { limit: 1 / 0, ellipsis: "", ellipsisWidth: 0 };
var M2 = (t, r = {}) => jt(t, Ee, r).width;
var ot2 = "\x1B";
var Gt = "\x9B";
var ve = 39;
var Ct2 = "\x07";
var kt2 = "[";
var Ae = "]";
var Vt2 = "m";
var St = `${Ae}8;;`;
var Ht = new RegExp(`(?:\\${kt2}(?<code>\\d+)m|\\${St}(?<uri>.*)${Ct2})`, "y");
var we = (t) => {
if (t >= 30 && t <= 37 || t >= 90 && t <= 97) return 39;
if (t >= 40 && t <= 47 || t >= 100 && t <= 107) return 49;
if (t === 1 || t === 2) return 22;
if (t === 3) return 23;
if (t === 4) return 24;
if (t === 7) return 27;
if (t === 8) return 28;
if (t === 9) return 29;
if (t === 0) return 0;
};
var Ut = (t) => `${ot2}${kt2}${t}${Vt2}`;
var Kt = (t) => `${ot2}${St}${t}${Ct2}`;
var Ce = (t) => t.map((r) => M2(r));
var It2 = (t, r, s) => {
const i = r[Symbol.iterator]();
let a = false, o = false, u = t.at(-1), l = u === void 0 ? 0 : M2(u), n = i.next(), c = i.next(), g = 0;
for (; !n.done; ) {
const F = n.value, p = M2(F);
l + p <= s ? t[t.length - 1] += F : (t.push(F), l = 0), (F === ot2 || F === Gt) && (a = true, o = r.startsWith(St, g + 1)), a ? o ? F === Ct2 && (a = false, o = false) : F === Vt2 && (a = false) : (l += p, l === s && !c.done && (t.push(""), l = 0)), n = c, c = i.next(), g += F.length;
}
u = t.at(-1), !l && u !== void 0 && u.length > 0 && t.length > 1 && (t[t.length - 2] += t.pop());
};
var Se = (t) => {
const r = t.split(" ");
let s = r.length;
for (; s > 0 && !(M2(r[s - 1]) > 0); ) s--;
return s === r.length ? t : r.slice(0, s).join(" ") + r.slice(s).join("");
};
var Ie = (t, r, s = {}) => {
if (s.trim !== false && t.trim() === "") return "";
let i = "", a, o;
const u = t.split(" "), l = Ce(u);
let n = [""];
for (const [$, m] of u.entries()) {
s.trim !== false && (n[n.length - 1] = (n.at(-1) ?? "").trimStart());
let h = M2(n.at(-1) ?? "");
if ($ !== 0 && (h >= r && (s.wordWrap === false || s.trim === false) && (n.push(""), h = 0), (h > 0 || s.trim === false) && (n[n.length - 1] += " ", h++)), s.hard && l[$] > r) {
const y2 = r - h, f = 1 + Math.floor((l[$] - y2 - 1) / r);
Math.floor((l[$] - 1) / r) < f && n.push(""), It2(n, m, r);
continue;
}
if (h + l[$] > r && h > 0 && l[$] > 0) {
if (s.wordWrap === false && h < r) {
It2(n, m, r);
continue;
}
n.push("");
}
if (h + l[$] > r && s.wordWrap === false) {
It2(n, m, r);
continue;
}
n[n.length - 1] += m;
}
s.trim !== false && (n = n.map(($) => Se($)));
const c = n.join(`
`), g = c[Symbol.iterator]();
let F = g.next(), p = g.next(), E = 0;
for (; !F.done; ) {
const $ = F.value, m = p.value;
if (i += $, $ === ot2 || $ === Gt) {
Ht.lastIndex = E + 1;
const f = Ht.exec(c)?.groups;
if (f?.code !== void 0) {
const v = Number.parseFloat(f.code);
a = v === ve ? void 0 : v;
} else f?.uri !== void 0 && (o = f.uri.length === 0 ? void 0 : f.uri);
}
const h = a ? we(a) : void 0;
m === `
` ? (o && (i += Kt("")), a && h && (i += Ut(h))) : $ === `
` && (a && h && (i += Ut(a)), o && (i += Kt(o))), E += $.length, F = p, p = g.next();
}
return i;
};
function J2(t, r, s) {
return String(t).normalize().replaceAll(`\r
`, `
`).split(`
`).map((i) => Ie(i, r, s)).join(`
`);
}
var be = (t, r, s, i, a) => {
let o = r, u = 0;
for (let l = s; l < i; l++) {
const n = t[l];
if (o = o - n.length, u++, o <= a) break;
}
return { lineCount: o, removals: u };
};
var X2 = (t) => {
const { cursor: r, options: s, style: i } = t, a = t.output ?? process.stdout, o = rt(a), u = t.columnPadding ?? 0, l = t.rowPadding ?? 4, n = o - u, c = nt(a), g = import_picocolors2.default.dim("..."), F = t.maxItems ?? Number.POSITIVE_INFINITY, p = Math.max(c - l, 0), E = Math.max(Math.min(F, p), 5);
let $ = 0;
r >= E - 3 && ($ = Math.max(Math.min(r - E + 3, s.length - E), 0));
let m = E < s.length && $ > 0, h = E < s.length && $ + E < s.length;
const y2 = Math.min($ + E, s.length), f = [];
let v = 0;
m && v++, h && v++;
const S2 = $ + (m ? 1 : 0), I2 = y2 - (h ? 1 : 0);
for (let A = S2; A < I2; A++) {
const w = J2(i(s[A], A === r), n, { hard: true, trim: false }).split(`
`);
f.push(w), v += w.length;
}
if (v > p) {
let A = 0, w = 0, _2 = v;
const D2 = r - S2, T2 = (Y, L2) => be(f, _2, Y, L2, p);
m ? ({ lineCount: _2, removals: A } = T2(0, D2), _2 > p && ({ lineCount: _2, removals: w } = T2(D2 + 1, f.length))) : ({ lineCount: _2, removals: w } = T2(D2 + 1, f.length), _2 > p && ({ lineCount: _2, removals: A } = T2(0, D2))), A > 0 && (m = true, f.splice(0, A)), w > 0 && (h = true, f.splice(f.length - w, w));
}
const B2 = [];
m && B2.push(g);
for (const A of f) for (const w of A) B2.push(w);
return h && B2.push(g), B2;
};
var Re = (t) => {
const r = t.active ?? "Yes", s = t.inactive ?? "No";
return new kt({ active: r, inactive: s, signal: t.signal, input: t.input, output: t.output, initialValue: t.initialValue ?? true, render() {
const i = t.withGuide ?? _.withGuide, a = `${i ? `${import_picocolors2.default.gray(d)}
` : ""}${W2(this.state)} ${t.message}
`, o = this.value ? r : s;
switch (this.state) {
case "submit": {
const u = i ? `${import_picocolors2.default.gray(d)} ` : "";
return `${a}${u}${import_picocolors2.default.dim(o)}`;
}
case "cancel": {
const u = i ? `${import_picocolors2.default.gray(d)} ` : "";
return `${a}${u}${import_picocolors2.default.strikethrough(import_picocolors2.default.dim(o))}${i ? `
${import_picocolors2.default.gray(d)}` : ""}`;
}
default: {
const u = i ? `${import_picocolors2.default.cyan(d)} ` : "", l = i ? import_picocolors2.default.cyan(x2) : "";
return `${a}${u}${this.value ? `${import_picocolors2.default.green(Q2)} ${r}` : `${import_picocolors2.default.dim(H2)} ${import_picocolors2.default.dim(r)}`}${t.vertical ? i ? `
${import_picocolors2.default.cyan(d)} ` : `
` : ` ${import_picocolors2.default.dim("/")} `}${this.value ? `${import_picocolors2.default.dim(H2)} ${import_picocolors2.default.dim(s)}` : `${import_picocolors2.default.green(Q2)} ${s}`}
${l}
`;
}
}
} }).prompt();
};
var R2 = { message: (t = [], { symbol: r = import_picocolors2.default.gray(d), secondarySymbol: s = import_picocolors2.default.gray(d), output: i = process.stdout, spacing: a = 1, withGuide: o } = {}) => {
const u = [], l = o ?? _.withGuide, n = l ? s : "", c = l ? `${r} ` : "", g = l ? `${s} ` : "";
for (let p = 0; p < a; p++) u.push(n);
const F = Array.isArray(t) ? t : t.split(`
`);
if (F.length > 0) {
const [p, ...E] = F;
p.length > 0 ? u.push(`${c}${p}`) : u.push(l ? r : "");
for (const $ of E) $.length > 0 ? u.push(`${g}${$}`) : u.push(l ? s : "");
}
i.write(`${u.join(`
`)}
`);
}, info: (t, r) => {
R2.message(t, { ...r, symbol: import_picocolors2.default.blue(ft2) });
}, success: (t, r) => {
R2.message(t, { ...r, symbol: import_picocolors2.default.green(Ft2) });
}, step: (t, r) => {
R2.message(t, { ...r, symbol: import_picocolors2.default.green(V) });
}, warn: (t, r) => {
R2.message(t, { ...r, symbol: import_picocolors2.default.yellow(yt2) });
}, warning: (t, r) => {
R2.warn(t, r);
}, error: (t, r) => {
R2.message(t, { ...r, symbol: import_picocolors2.default.red(Et2) });
} };
var Ne = (t = "", r) => {
(r?.output ?? process.stdout).write(`${import_picocolors2.default.gray(x2)} ${import_picocolors2.default.red(t)}
`);
};
var We = (t = "", r) => {
(r?.output ?? process.stdout).write(`${import_picocolors2.default.gray(ht2)} ${t}
`);
};
var Le = (t = "", r) => {
(r?.output ?? process.stdout).write(`${import_picocolors2.default.gray(d)}
${import_picocolors2.default.gray(x2)} ${t}
`);
};
var Z2 = (t, r) => t.split(`
`).map((s) => r(s)).join(`
`);
var je = (t) => {
const r = (i, a) => {
const o = i.label ?? String(i.value);
return a === "disabled" ? `${import_picocolors2.default.gray(q2)} ${Z2(o, (u) => import_picocolors2.default.strikethrough(import_picocolors2.default.gray(u)))}${i.hint ? ` ${import_picocolors2.default.dim(`(${i.hint ?? "disabled"})`)}` : ""}` : a === "active" ? `${import_picocolors2.default.cyan(st2)} ${o}${i.hint ? ` ${import_picocolors2.default.dim(`(${i.hint})`)}` : ""}` : a === "selected" ? `${import_picocolors2.default.green(U2)} ${Z2(o, import_picocolors2.default.dim)}${i.hint ? ` ${import_picocolors2.default.dim(`(${i.hint})`)}` : ""}` : a === "cancelled" ? `${Z2(o, (u) => import_picocolors2.default.strikethrough(import_picocolors2.default.dim(u)))}` : a === "active-selected" ? `${import_picocolors2.default.green(U2)} ${o}${i.hint ? ` ${import_picocolors2.default.dim(`(${i.hint})`)}` : ""}` : a === "submitted" ? `${Z2(o, import_picocolors2.default.dim)}` : `${import_picocolors2.default.dim(q2)} ${Z2(o, import_picocolors2.default.dim)}`;
}, s = t.required ?? true;
return new Lt({ options: t.options, signal: t.signal, input: t.input, output: t.output, initialValues: t.initialValues, required: s, cursorAt: t.cursorAt, validate(i) {
if (s && (i === void 0 || i.length === 0)) return `Please select at least one option.
${import_picocolors2.default.reset(import_picocolors2.default.dim(`Press ${import_picocolors2.default.gray(import_picocolors2.default.bgWhite(import_picocolors2.default.inverse(" space ")))} to select, ${import_picocolors2.default.gray(import_picocolors2.default.bgWhite(import_picocolors2.default.inverse(" enter ")))} to submit`))}`;
}, render() {
const i = xt(t.output, t.message, `${vt2(this.state)} `, `${W2(this.state)} `), a = `${import_picocolors2.default.gray(d)}
${i}
`, o = this.value ?? [], u = (l, n) => {
if (l.disabled) return r(l, "disabled");
const c = o.includes(l.value);
return n && c ? r(l, "active-selected") : c ? r(l, "selected") : r(l, n ? "active" : "inactive");
};
switch (this.state) {
case "submit": {
const l = this.options.filter(({ value: c }) => o.includes(c)).map((c) => r(c, "submitted")).join(import_picocolors2.default.dim(", ")) || import_picocolors2.default.dim("none"), n = xt(t.output, l, `${import_picocolors2.default.gray(d)} `);
return `${a}${n}`;
}
case "cancel": {
const l = this.options.filter(({ value: c }) => o.includes(c)).map((c) => r(c, "cancelled")).join(import_picocolors2.default.dim(", "));
if (l.trim() === "") return `${a}${import_picocolors2.default.gray(d)}`;
const n = xt(t.output, l, `${import_picocolors2.default.gray(d)} `);
return `${a}${n}
${import_picocolors2.default.gray(d)}`;
}
case "error": {
const l = `${import_picocolors2.default.yellow(d)} `, n = this.error.split(`
`).map((F, p) => p === 0 ? `${import_picocolors2.default.yellow(x2)} ${import_picocolors2.default.yellow(F)}` : ` ${F}`).join(`
`), c = a.split(`
`).length, g = n.split(`
`).length + 1;
return `${a}${l}${X2({ output: t.output, options: this.options, cursor: this.cursor, maxItems: t.maxItems, columnPadding: l.length, rowPadding: c + g, style: u }).join(`
${l}`)}
${n}
`;
}
default: {
const l = `${import_picocolors2.default.cyan(d)} `, n = a.split(`
`).length;
return `${a}${l}${X2({ output: t.output, options: this.options, cursor: this.cursor, maxItems: t.maxItems, columnPadding: l.length, rowPadding: n + 2, style: u }).join(`
${l}`)}
${import_picocolors2.default.cyan(x2)}
`;
}
}
} }).prompt();
};
var Ge = (t) => import_picocolors2.default.dim(t);
var ke = (t, r, s) => {
const i = { hard: true, trim: false }, a = J2(t, r, i).split(`
`), o = a.reduce((n, c) => Math.max(M2(c), n), 0), u = a.map(s).reduce((n, c) => Math.max(M2(c), n), 0), l = r - (u - o);
return J2(t, l, i);
};
var Ve = (t = "", r = "", s) => {
const i = s?.output ?? N2.stdout, a = s?.withGuide ?? _.withGuide, o = s?.format ?? Ge, u = ["", ...ke(t, rt(i) - 6, o).split(`
`).map(o), ""], l = M2(r), n = Math.max(u.reduce((p, E) => {
const $ = M2(E);
return $ > p ? $ : p;
}, 0), l) + 2, c = u.map((p) => `${import_picocolors2.default.gray(d)} ${p}${" ".repeat(n - M2(p))}${import_picocolors2.default.gray(d)}`).join(`
`), g = a ? `${import_picocolors2.default.gray(d)}
` : "", F = a ? Wt2 : gt2;
i.write(`${g}${import_picocolors2.default.green(V)} ${import_picocolors2.default.reset(r)} ${import_picocolors2.default.gray(rt2.repeat(Math.max(n - l - 1, 1)) + mt2)}
${c}
${import_picocolors2.default.gray(F + rt2.repeat(n + 2) + pt2)}
`);
};
var He = (t) => new Mt({ validate: t.validate, mask: t.mask ?? Nt, signal: t.signal, input: t.input, output: t.output, render() {
const r = t.withGuide ?? _.withGuide, s = `${r ? `${import_picocolors2.default.gray(d)}
` : ""}${W2(this.state)} ${t.message}
`, i = this.userInputWithCursor, a = this.masked;
switch (this.state) {
case "error": {
const o = r ? `${import_picocolors2.default.yellow(d)} ` : "", u = r ? `${import_picocolors2.default.yellow(x2)} ` : "", l = a ?? "";
return t.clearOnError && this.clear(), `${s.trim()}
${o}${l}
${u}${import_picocolors2.default.yellow(this.error)}
`;
}
case "submit": {
const o = r ? `${import_picocolors2.default.gray(d)} ` : "", u = a ? import_picocolors2.default.dim(a) : "";
return `${s}${o}${u}`;
}
case "cancel": {
const o = r ? `${import_picocolors2.default.gray(d)} ` : "", u = a ? import_picocolors2.default.strikethrough(import_picocolors2.default.dim(a)) : "";
return `${s}${o}${u}${a && r ? `
${import_picocolors2.default.gray(d)}` : ""}`;
}
default: {
const o = r ? `${import_picocolors2.default.cyan(d)} ` : "", u = r ? import_picocolors2.default.cyan(x2) : "";
return `${s}${o}${i}
${u}
`;
}
}
} }).prompt();
var Ke = import_picocolors2.default.magenta;
var bt2 = ({ indicator: t = "dots", onCancel: r, output: s = process.stdout, cancelMessage: i, errorMessage: a, frames: o = et2 ? ["\u25D2", "\u25D0", "\u25D3", "\u25D1"] : ["\u2022", "o", "O", "0"], delay: u = et2 ? 80 : 120, signal: l, ...n } = {}) => {
const c = ct2();
let g, F, p = false, E = false, $ = "", m, h = performance.now();
const y2 = rt(s), f = n?.styleFrame ?? Ke, v = (b) => {
const O2 = b > 1 ? a ?? _.messages.error : i ?? _.messages.cancel;
E = b === 1, p && (L2(O2, b), E && typeof r == "function" && r());
}, S2 = () => v(2), I2 = () => v(1), B2 = () => {
process.on("uncaughtExceptionMonitor", S2), process.on("unhandledRejection", S2), process.on("SIGINT", I2), process.on("SIGTERM", I2), process.on("exit", v), l && l.addEventListener("abort", I2);
}, A = () => {
process.removeListener("uncaughtExceptionMonitor", S2), process.removeListener("unhandledRejection", S2), process.removeListener("SIGINT", I2), process.removeListener("SIGTERM", I2), process.removeListener("exit", v), l && l.removeEventListener("abort", I2);
}, w = () => {
if (m === void 0) return;
c && s.write(`
`);
const b = J2(m, y2, { hard: true, trim: false }).split(`
`);
b.length > 1 && s.write(import_sisteransi2.cursor.up(b.length - 1)), s.write(import_sisteransi2.cursor.to(0)), s.write(import_sisteransi2.erase.down());
}, _2 = (b) => b.replace(/\.+$/, ""), D2 = (b) => {
const O2 = (performance.now() - b) / 1e3, j2 = Math.floor(O2 / 60), G2 = Math.floor(O2 % 60);
return j2 > 0 ? `[${j2}m ${G2}s]` : `[${G2}s]`;
}, T2 = n.withGuide ?? _.withGuide, Y = (b = "") => {
p = true, g = Bt({ output: s }), $ = _2(b), h = performance.now(), T2 && s.write(`${import_picocolors2.default.gray(d)}
`);
let O2 = 0, j2 = 0;
B2(), F = setInterval(() => {
if (c && $ === m) return;
w(), m = $;
const G2 = f(o[O2]);
let tt2;
if (c) tt2 = `${G2} ${$}...`;
else if (t === "timer") tt2 = `${G2} ${$} ${D2(h)}`;
else {
const te = ".".repeat(Math.floor(j2)).slice(0, 3);
tt2 = `${G2} ${$}${te}`;
}
const Zt = J2(tt2, y2, { hard: true, trim: false });
s.write(Zt), O2 = O2 + 1 < o.length ? O2 + 1 : 0, j2 = j2 < 4 ? j2 + 0.125 : 0;
}, u);
}, L2 = (b = "", O2 = 0, j2 = false) => {
if (!p) return;
p = false, clearInterval(F), w();
const G2 = O2 === 0 ? import_picocolors2.default.green(V) : O2 === 1 ? import_picocolors2.default.red(dt2) : import_picocolors2.default.red($t2);
$ = b ?? $, j2 || (t === "timer" ? s.write(`${G2} ${$} ${D2(h)}
`) : s.write(`${G2} ${$}
`)), A(), g();
};
return { start: Y, stop: (b = "") => L2(b, 0), message: (b = "") => {
$ = _2(b ?? $);
}, cancel: (b = "") => L2(b, 1), error: (b = "") => L2(b, 2), clear: () => L2("", 0, true), get isCancelled() {
return E;
} };
};
var zt = { light: C("\u2500", "-"), heavy: C("\u2501", "="), block: C("\u2588", "#") };
var lt2 = (t, r) => t.includes(`
`) ? t.split(`
`).map((s) => r(s)).join(`
`) : r(t);
var Je = (t) => {
const r = (s, i) => {
const a = s.label ?? String(s.value);
switch (i) {
case "disabled":
return `${import_picocolors2.default.gray(H2)} ${lt2(a, import_picocolors2.default.gray)}${s.hint ? ` ${import_picocolors2.default.dim(`(${s.hint ?? "disabled"})`)}` : ""}`;
case "selected":
return `${lt2(a, import_picocolors2.default.dim)}`;
case "active":
return `${import_picocolors2.default.green(Q2)} ${a}${s.hint ? ` ${import_picocolors2.default.dim(`(${s.hint})`)}` : ""}`;
case "cancelled":
return `${lt2(a, (o) => import_picocolors2.default.strikethrough(import_picocolors2.default.dim(o)))}`;
default:
return `${import_picocolors2.default.dim(H2)} ${lt2(a, import_picocolors2.default.dim)}`;
}
};
return new Wt({ options: t.options, signal: t.signal, input: t.input, output: t.output, initialValue: t.initialValue, render() {
const s = t.withGuide ?? _.withGuide, i = `${W2(this.state)} `, a = `${vt2(this.state)} `, o = xt(t.output, t.message, a, i), u = `${s ? `${import_picocolors2.default.gray(d)}
` : ""}${o}
`;
switch (this.state) {
case "submit": {
const l = s ? `${import_picocolors2.default.gray(d)} ` : "", n = xt(t.output, r(this.options[this.cursor], "selected"), l);
return `${u}${n}`;
}
case "cancel": {
const l = s ? `${import_picocolors2.default.gray(d)} ` : "", n = xt(t.output, r(this.options[this.cursor], "cancelled"), l);
return `${u}${n}${s ? `
${import_picocolors2.default.gray(d)}` : ""}`;
}
default: {
const l = s ? `${import_picocolors2.default.cyan(d)} ` : "", n = s ? import_picocolors2.default.cyan(x2) : "", c = u.split(`
`).length, g = s ? 2 : 1;
return `${u}${l}${X2({ output: t.output, cursor: this.cursor, options: this.options, maxItems: t.maxItems, columnPadding: l.length, rowPadding: c + g, style: (F, p) => r(F, F.disabled ? "disabled" : p ? "active" : "inactive") }).join(`
${l}`)}
${n}
`;
}
}
} }).prompt();
};
var Qt = `${import_picocolors2.default.gray(d)} `;
var Ye = async (t, r) => {
for (const s of t) {
if (s.enabled === false) continue;
const i = bt2(r);
i.start(s.title);
const a = await s.task(i.message);
i.stop(a || s.title);
}
};
var Ze = (t) => new $t({ validate: t.validate, placeholder: t.placeholder, defaultValue: t.defaultValue, initialValue: t.initialValue, output: t.output, signal: t.signal, input: t.input, render() {
const r = t?.withGuide ?? _.withGuide, s = `${`${r ? `${import_picocolors2.default.gray(d)}
` : ""}${W2(this.state)} `}${t.message}
`, i = t.placeholder ? import_picocolors2.default.inverse(t.placeholder[0]) + import_picocolors2.default.dim(t.placeholder.slice(1)) : import_picocolors2.default.inverse(import_picocolors2.default.hidden("_")), a = this.userInput ? this.userInputWithCursor : i, o = this.value ?? "";
switch (this.state) {
case "error": {
const u = this.error ? ` ${import_picocolors2.default.yellow(this.error)}` : "", l = r ? `${import_picocolors2.default.yellow(d)} ` : "", n = r ? import_picocolors2.default.yellow(x2) : "";
return `${s.trim()}
${l}${a}
${n}${u}
`;
}
case "submit": {
const u = o ? ` ${import_picocolors2.default.dim(o)}` : "", l = r ? import_picocolors2.default.gray(d) : "";
return `${s}${l}${u}`;
}
case "cancel": {
const u = o ? ` ${import_picocolors2.default.strikethrough(import_picocolors2.default.dim(o))}` : "", l = r ? import_picocolors2.default.gray(d) : "";
return `${s}${l}${u}${o.trim() ? `
${l}` : ""}`;
}
default: {
const u = r ? `${import_picocolors2.default.cyan(d)} ` : "", l = r ? import_picocolors2.default.cyan(x2) : "";
return `${s}${u}${a}
${l}
`;
}
}
} }).prompt();
// src/steps/welcome.ts
var import_picocolors3 = __toESM(require_picocolors(), 1);
import { existsSync } from "fs";
// src/utils/system.ts
import { execSync } from "child_process";
import { homedir } from "os";
import { join } from "path";
function detectOS() {
switch (process.platform) {
case "darwin":
return "macos";
case "win32":
return "windows";
default:
return "linux";
}
}
function commandExists(command) {
try {
execSync(`which ${command}`, { stdio: "pipe" });
return true;
} catch {
return false;
}
}
function runCommand(command, args = []) {
try {
const fullCommand = [command, ...args].join(" ");
const stdout = execSync(fullCommand, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
return { stdout: stdout.trim(), stderr: "", exitCode: 0 };
} catch (error) {
return {
stdout: error.stdout?.toString().trim() ?? "",
stderr: error.stderr?.toString().trim() ?? "",
exitCode: error.status ?? 1
};
}
}
function expandHome(filepath) {
if (filepath.startsWith("~")) {
return join(homedir(), filepath.slice(1));
}
return filepath;
}
// src/steps/welcome.ts
async function runWelcome() {
We(import_picocolors3.default.bgCyan(import_picocolors3.default.black(" claude-mem installer ")));
R2.info(`Version: 1.0.0`);
R2.info(`Platform: ${process.platform} (${process.arch})`);
const settingsExist = existsSync(expandHome("~/.claude-mem/settings.json"));
const pluginExist = existsSync(expandHome("~/.claude/plugins/marketplaces/thedotmack/"));
const alreadyInstalled = settingsExist && pluginExist;
if (alreadyInstalled) {
R2.warn("Existing claude-mem installation detected.");
}
const installMode = await Je({
message: "What would you like to do?",
options: alreadyInstalled ? [
{ value: "upgrade", label: "Upgrade", hint: "update to latest version" },
{ value: "configure", label: "Configure", hint: "change settings only" },
{ value: "fresh", label: "Fresh Install", hint: "reinstall from scratch" }
] : [
{ value: "fresh", label: "Fresh Install", hint: "recommended" },
{ value: "configure", label: "Configure Only", hint: "set up settings without installing" }
]
});
if (Ct(installMode)) {
Ne("Installation cancelled.");
process.exit(0);
}
return installMode;
}
// src/steps/dependencies.ts
var import_picocolors4 = __toESM(require_picocolors(), 1);
// src/utils/dependencies.ts
import { existsSync as existsSync2 } from "fs";
import { execSync as execSync2 } from "child_process";
function findBinary(name, extraPaths = []) {
if (commandExists(name)) {
const result = runCommand("which", [name]);
const versionResult = runCommand(name, ["--version"]);
return {
found: true,
path: result.stdout,
version: parseVersion(versionResult.stdout) || parseVersion(versionResult.stderr)
};
}
for (const extraPath of extraPaths) {
const fullPath = expandHome(extraPath);
if (existsSync2(fullPath)) {
const versionResult = runCommand(fullPath, ["--version"]);
return {
found: true,
path: fullPath,
version: parseVersion(versionResult.stdout) || parseVersion(versionResult.stderr)
};
}
}
return { found: false, path: null, version: null };
}
function parseVersion(output) {
if (!output) return null;
const match = output.match(/(\d+\.\d+(\.\d+)?)/);
return match ? match[1] : null;
}
function compareVersions(current, minimum) {
const currentParts = current.split(".").map(Number);
const minimumParts = minimum.split(".").map(Number);
for (let i = 0; i < Math.max(currentParts.length, minimumParts.length); i++) {
const a = currentParts[i] || 0;
const b = minimumParts[i] || 0;
if (a > b) return true;
if (a < b) return false;
}
return true;
}
function installBun() {
const os = detectOS();
if (os === "windows") {
execSync2('powershell -c "irm bun.sh/install.ps1 | iex"', { stdio: "inherit" });
} else {
execSync2("curl -fsSL https://bun.sh/install | bash", { stdio: "inherit" });
}
}
function installUv() {
const os = detectOS();
if (os === "windows") {
execSync2('powershell -c "irm https://astral.sh/uv/install.ps1 | iex"', { stdio: "inherit" });
} else {
execSync2("curl -fsSL https://astral.sh/uv/install.sh | sh", { stdio: "inherit" });
}
}
// src/steps/dependencies.ts
var BUN_EXTRA_PATHS = ["~/.bun/bin/bun", "/usr/local/bin/bun", "/opt/homebrew/bin/bun"];
var UV_EXTRA_PATHS = ["~/.local/bin/uv", "~/.cargo/bin/uv"];
async function runDependencyChecks() {
const status = {
nodeOk: false,
gitOk: false,
bunOk: false,
uvOk: false,
bunPath: null,
uvPath: null
};
await Ye([
{
title: "Checking Node.js",
task: async () => {
const version = process.version.slice(1);
if (compareVersions(version, "18.0.0")) {
status.nodeOk = true;
return `Node.js ${process.version} ${import_picocolors4.default.green("\u2713")}`;
}
return `Node.js ${process.version} \u2014 requires >= 18.0.0 ${import_picocolors4.default.red("\u2717")}`;
}
},
{
title: "Checking git",
task: async () => {
const info = findBinary("git");
if (info.found) {
status.gitOk = true;
return `git ${info.version ?? ""} ${import_picocolors4.default.green("\u2713")}`;
}
return `git not found ${import_picocolors4.default.red("\u2717")}`;
}
},
{
title: "Checking Bun",
task: async () => {
const info = findBinary("bun", BUN_EXTRA_PATHS);
if (info.found && info.version && compareVersions(info.version, "1.1.14")) {
status.bunOk = true;
status.bunPath = info.path;
return `Bun ${info.version} ${import_picocolors4.default.green("\u2713")}`;
}
if (info.found && info.version) {
return `Bun ${info.version} \u2014 requires >= 1.1.14 ${import_picocolors4.default.yellow("\u26A0")}`;
}
return `Bun not found ${import_picocolors4.default.yellow("\u26A0")}`;
}
},
{
title: "Checking uv",
task: async () => {
const info = findBinary("uv", UV_EXTRA_PATHS);
if (info.found) {
status.uvOk = true;
status.uvPath = info.path;
return `uv ${info.version ?? ""} ${import_picocolors4.default.green("\u2713")}`;
}
return `uv not found ${import_picocolors4.default.yellow("\u26A0")}`;
}
}
]);
if (!status.gitOk) {
const os = detectOS();
R2.error("git is required but not found.");
if (os === "macos") {
R2.info("Install with: xcode-select --install");
} else if (os === "linux") {
R2.info("Install with: sudo apt install git (or your distro equivalent)");
} else {
R2.info("Download from: https://git-scm.com/downloads");
}
Ne("Please install git and try again.");
process.exit(1);
}
if (!status.nodeOk) {
R2.error(`Node.js >= 18.0.0 is required. Current: ${process.version}`);
Ne("Please upgrade Node.js and try again.");
process.exit(1);
}
if (!status.bunOk) {
const shouldInstall = await Re({
message: "Bun is required but not found. Install it now?",
initialValue: true
});
if (Ct(shouldInstall)) {
Ne("Installation cancelled.");
process.exit(0);
}
if (shouldInstall) {
const s = bt2();
s.start("Installing Bun...");
try {
installBun();
const recheck = findBinary("bun", BUN_EXTRA_PATHS);
if (recheck.found) {
status.bunOk = true;
status.bunPath = recheck.path;
s.stop(`Bun installed ${import_picocolors4.default.green("\u2713")}`);
} else {
s.stop(`Bun installed but not found in PATH. You may need to restart your shell.`);
}
} catch {
s.stop(`Bun installation failed. Install manually: curl -fsSL https://bun.sh/install | bash`);
}
} else {
R2.warn("Bun is required for claude-mem. Install manually: curl -fsSL https://bun.sh/install | bash");
Ne("Cannot continue without Bun.");
process.exit(1);
}
}
if (!status.uvOk) {
const shouldInstall = await Re({
message: "uv (Python package manager) is recommended for Chroma. Install it now?",
initialValue: true
});
if (Ct(shouldInstall)) {
Ne("Installation cancelled.");
process.exit(0);
}
if (shouldInstall) {
const s = bt2();
s.start("Installing uv...");
try {
installUv();
const recheck = findBinary("uv", UV_EXTRA_PATHS);
if (recheck.found) {
status.uvOk = true;
status.uvPath = recheck.path;
s.stop(`uv installed ${import_picocolors4.default.green("\u2713")}`);
} else {
s.stop("uv installed but not found in PATH. You may need to restart your shell.");
}
} catch {
s.stop("uv installation failed. Install manually: curl -fsSL https://astral.sh/uv/install.sh | sh");
}
} else {
R2.warn("Skipping uv \u2014 Chroma vector search will not be available.");
}
}
return status;
}
// src/steps/ide-selection.ts
async function runIdeSelection() {
const result = await je({
message: "Which IDEs do you use?",
options: [
{ value: "claude-code", label: "Claude Code", hint: "recommended" },
{ value: "cursor", label: "Cursor" }
// Windsurf coming soon - not yet selectable
],
initialValues: ["claude-code"],
required: true
});
if (Ct(result)) {
Ne("Installation cancelled.");
process.exit(0);
}
const selectedIDEs = result;
if (selectedIDEs.includes("claude-code")) {
R2.info("Claude Code: Plugin will be registered via marketplace.");
}
if (selectedIDEs.includes("cursor")) {
R2.info("Cursor: Hooks will be configured for your projects.");
}
return selectedIDEs;
}
// src/steps/provider.ts
async function runProviderConfiguration() {
const provider = await Je({
message: "Which AI provider should claude-mem use for memory compression?",
options: [
{ value: "claude", label: "Claude", hint: "uses your Claude subscription" },
{ value: "gemini", label: "Gemini", hint: "free tier available" },
{ value: "openrouter", label: "OpenRouter", hint: "free models available" }
]
});
if (Ct(provider)) {
Ne("Installation cancelled.");
process.exit(0);
}
const config = { provider };
if (provider === "claude") {
const authMethod = await Je({
message: "How should Claude authenticate?",
options: [
{ value: "cli", label: "CLI (Max Plan subscription)", hint: "no API key needed" },
{ value: "api", label: "API Key", hint: "uses Anthropic API credits" }
]
});
if (Ct(authMethod)) {
Ne("Installation cancelled.");
process.exit(0);
}
config.claudeAuthMethod = authMethod;
if (authMethod === "api") {
const apiKey = await He({
message: "Enter your Anthropic API key:",
validate: (value) => {
if (!value || value.trim().length === 0) return "API key is required";
if (!value.startsWith("sk-ant-")) return "Anthropic API keys start with sk-ant-";
}
});
if (Ct(apiKey)) {
Ne("Installation cancelled.");
process.exit(0);
}
config.apiKey = apiKey;
}
}
if (provider === "gemini") {
const apiKey = await He({
message: "Enter your Gemini API key:",
validate: (value) => {
if (!value || value.trim().length === 0) return "API key is required";
}
});
if (Ct(apiKey)) {
Ne("Installation cancelled.");
process.exit(0);
}
config.apiKey = apiKey;
const model = await Je({
message: "Which Gemini model?",
options: [
{ value: "gemini-2.5-flash-lite", label: "Gemini 2.5 Flash Lite", hint: "fastest, highest free RPM" },
{ value: "gemini-2.5-flash", label: "Gemini 2.5 Flash", hint: "balanced" },
{ value: "gemini-3-flash-preview", label: "Gemini 3 Flash Preview", hint: "latest" }
]
});
if (Ct(model)) {
Ne("Installation cancelled.");
process.exit(0);
}
config.model = model;
const rateLimiting = await Re({
message: "Enable rate limiting? (recommended for free tier)",
initialValue: true
});
if (Ct(rateLimiting)) {
Ne("Installation cancelled.");
process.exit(0);
}
config.rateLimitingEnabled = rateLimiting;
}
if (provider === "openrouter") {
const apiKey = await He({
message: "Enter your OpenRouter API key:",
validate: (value) => {
if (!value || value.trim().length === 0) return "API key is required";
}
});
if (Ct(apiKey)) {
Ne("Installation cancelled.");
process.exit(0);
}
config.apiKey = apiKey;
const model = await Ze({
message: "Which OpenRouter model?",
defaultValue: "xiaomi/mimo-v2-flash:free",
placeholder: "xiaomi/mimo-v2-flash:free"
});
if (Ct(model)) {
Ne("Installation cancelled.");
process.exit(0);
}
config.model = model;
}
return config;
}
// src/steps/settings.ts
var import_picocolors5 = __toESM(require_picocolors(), 1);
async function runSettingsConfiguration() {
const useDefaults = await Re({
message: "Use default settings? (recommended for most users)",
initialValue: true
});
if (Ct(useDefaults)) {
Ne("Installation cancelled.");
process.exit(0);
}
if (useDefaults) {
return {
workerPort: "37777",
dataDir: "~/.claude-mem",
contextObservations: "50",
logLevel: "INFO",
pythonVersion: "3.13",
chromaEnabled: true,
chromaMode: "local"
};
}
const workerPort = await Ze({
message: "Worker service port:",
defaultValue: "37777",
placeholder: "37777",
validate: (value = "") => {
const port = parseInt(value, 10);
if (isNaN(port) || port < 1024 || port > 65535) {
return "Port must be between 1024 and 65535";
}
}
});
if (Ct(workerPort)) {
Ne("Installation cancelled.");
process.exit(0);
}
const dataDir = await Ze({
message: "Data directory:",
defaultValue: "~/.claude-mem",
placeholder: "~/.claude-mem"
});
if (Ct(dataDir)) {
Ne("Installation cancelled.");
process.exit(0);
}
const contextObservations = await Ze({
message: "Number of context observations per session:",
defaultValue: "50",
placeholder: "50",
validate: (value = "") => {
const num = parseInt(value, 10);
if (isNaN(num) || num < 1 || num > 200) {
return "Must be between 1 and 200";
}
}
});
if (Ct(contextObservations)) {
Ne("Installation cancelled.");
process.exit(0);
}
const logLevel = await Je({
message: "Log level:",
options: [
{ value: "DEBUG", label: "DEBUG", hint: "verbose" },
{ value: "INFO", label: "INFO", hint: "default" },
{ value: "WARN", label: "WARN" },
{ value: "ERROR", label: "ERROR", hint: "errors only" }
],
initialValue: "INFO"
});
if (Ct(logLevel)) {
Ne("Installation cancelled.");
process.exit(0);
}
const pythonVersion = await Ze({
message: "Python version (for Chroma):",
defaultValue: "3.13",
placeholder: "3.13"
});
if (Ct(pythonVersion)) {
Ne("Installation cancelled.");
process.exit(0);
}
const chromaEnabled = await Re({
message: "Enable Chroma vector search?",
initialValue: true
});
if (Ct(chromaEnabled)) {
Ne("Installation cancelled.");
process.exit(0);
}
let chromaMode;
let chromaHost;
let chromaPort;
let chromaSsl;
if (chromaEnabled) {
const mode = await Je({
message: "Chroma mode:",
options: [
{ value: "local", label: "Local", hint: "starts local Chroma server" },
{ value: "remote", label: "Remote", hint: "connect to existing server" }
]
});
if (Ct(mode)) {
Ne("Installation cancelled.");
process.exit(0);
}
chromaMode = mode;
if (mode === "remote") {
const host = await Ze({
message: "Chroma host:",
defaultValue: "127.0.0.1",
placeholder: "127.0.0.1"
});
if (Ct(host)) {
Ne("Installation cancelled.");
process.exit(0);
}
chromaHost = host;
const port = await Ze({
message: "Chroma port:",
defaultValue: "8000",
placeholder: "8000",
validate: (value = "") => {
const portNum = parseInt(value, 10);
if (isNaN(portNum) || portNum < 1 || portNum > 65535) return "Port must be between 1 and 65535";
}
});
if (Ct(port)) {
Ne("Installation cancelled.");
process.exit(0);
}
chromaPort = port;
const ssl = await Re({
message: "Use SSL for Chroma connection?",
initialValue: false
});
if (Ct(ssl)) {
Ne("Installation cancelled.");
process.exit(0);
}
chromaSsl = ssl;
}
}
const config = {
workerPort,
dataDir,
contextObservations,
logLevel,
pythonVersion,
chromaEnabled,
chromaMode,
chromaHost,
chromaPort,
chromaSsl
};
const summaryLines = [
`Worker port: ${import_picocolors5.default.cyan(workerPort)}`,
`Data directory: ${import_picocolors5.default.cyan(dataDir)}`,
`Context observations: ${import_picocolors5.default.cyan(contextObservations)}`,
`Log level: ${import_picocolors5.default.cyan(logLevel)}`,
`Python version: ${import_picocolors5.default.cyan(pythonVersion)}`,
`Chroma: ${chromaEnabled ? import_picocolors5.default.green("enabled") : import_picocolors5.default.dim("disabled")}`
];
if (chromaEnabled && chromaMode) {
summaryLines.push(`Chroma mode: ${import_picocolors5.default.cyan(chromaMode)}`);
}
Ve(summaryLines.join("\n"), "Settings Summary");
return config;
}
// src/utils/settings-writer.ts
import { existsSync as existsSync3, mkdirSync, readFileSync, writeFileSync } from "fs";
import { join as join2 } from "path";
import { homedir as homedir2 } from "os";
function expandDataDir(dataDir) {
if (dataDir.startsWith("~")) {
return join2(homedir2(), dataDir.slice(1));
}
return dataDir;
}
function buildSettingsObject(providerConfig, settingsConfig) {
const settings = {
CLAUDE_MEM_WORKER_PORT: settingsConfig.workerPort,
CLAUDE_MEM_WORKER_HOST: "127.0.0.1",
CLAUDE_MEM_DATA_DIR: expandDataDir(settingsConfig.dataDir),
CLAUDE_MEM_CONTEXT_OBSERVATIONS: settingsConfig.contextObservations,
CLAUDE_MEM_LOG_LEVEL: settingsConfig.logLevel,
CLAUDE_MEM_PYTHON_VERSION: settingsConfig.pythonVersion,
CLAUDE_MEM_PROVIDER: providerConfig.provider
};
if (providerConfig.provider === "claude") {
settings.CLAUDE_MEM_CLAUDE_AUTH_METHOD = providerConfig.claudeAuthMethod ?? "cli";
}
if (providerConfig.provider === "gemini") {
if (providerConfig.apiKey) settings.CLAUDE_MEM_GEMINI_API_KEY = providerConfig.apiKey;
if (providerConfig.model) settings.CLAUDE_MEM_GEMINI_MODEL = providerConfig.model;
settings.CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED = providerConfig.rateLimitingEnabled !== false ? "true" : "false";
}
if (providerConfig.provider === "openrouter") {
if (providerConfig.apiKey) settings.CLAUDE_MEM_OPENROUTER_API_KEY = providerConfig.apiKey;
if (providerConfig.model) settings.CLAUDE_MEM_OPENROUTER_MODEL = providerConfig.model;
}
if (settingsConfig.chromaEnabled) {
settings.CLAUDE_MEM_CHROMA_MODE = settingsConfig.chromaMode ?? "local";
if (settingsConfig.chromaMode === "remote") {
if (settingsConfig.chromaHost) settings.CLAUDE_MEM_CHROMA_HOST = settingsConfig.chromaHost;
if (settingsConfig.chromaPort) settings.CLAUDE_MEM_CHROMA_PORT = settingsConfig.chromaPort;
if (settingsConfig.chromaSsl !== void 0) settings.CLAUDE_MEM_CHROMA_SSL = String(settingsConfig.chromaSsl);
}
}
return settings;
}
function writeSettings(providerConfig, settingsConfig) {
const dataDir = expandDataDir(settingsConfig.dataDir);
const settingsPath = join2(dataDir, "settings.json");
if (!existsSync3(dataDir)) {
mkdirSync(dataDir, { recursive: true });
}
let existingSettings = {};
if (existsSync3(settingsPath)) {
const raw = readFileSync(settingsPath, "utf-8");
existingSettings = JSON.parse(raw);
}
const newSettings = buildSettingsObject(providerConfig, settingsConfig);
const merged = { ...existingSettings, ...newSettings };
writeFileSync(settingsPath, JSON.stringify(merged, null, 2) + "\n", "utf-8");
}
// src/steps/install.ts
var import_picocolors6 = __toESM(require_picocolors(), 1);
import { execSync as execSync3 } from "child_process";
import { existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2, cpSync } from "fs";
import { join as join3 } from "path";
import { homedir as homedir3, tmpdir } from "os";
var MARKETPLACE_DIR = join3(homedir3(), ".claude", "plugins", "marketplaces", "thedotmack");
var PLUGINS_DIR = join3(homedir3(), ".claude", "plugins");
var CLAUDE_SETTINGS_PATH = join3(homedir3(), ".claude", "settings.json");
function ensureDir(directoryPath) {
if (!existsSync4(directoryPath)) {
mkdirSync2(directoryPath, { recursive: true });
}
}
function readJsonFile(filepath) {
if (!existsSync4(filepath)) return {};
return JSON.parse(readFileSync2(filepath, "utf-8"));
}
function writeJsonFile(filepath, data) {
ensureDir(join3(filepath, ".."));
writeFileSync2(filepath, JSON.stringify(data, null, 2) + "\n", "utf-8");
}
function registerMarketplace() {
const knownMarketplacesPath = join3(PLUGINS_DIR, "known_marketplaces.json");
const knownMarketplaces = readJsonFile(knownMarketplacesPath);
knownMarketplaces["thedotmack"] = {
source: {
source: "github",
repo: "thedotmack/claude-mem"
},
installLocation: MARKETPLACE_DIR,
lastUpdated: (/* @__PURE__ */ new Date()).toISOString(),
autoUpdate: true
};
ensureDir(PLUGINS_DIR);
writeJsonFile(knownMarketplacesPath, knownMarketplaces);
}
function registerPlugin(version) {
const installedPluginsPath = join3(PLUGINS_DIR, "installed_plugins.json");
const installedPlugins = readJsonFile(installedPluginsPath);
if (!installedPlugins.version) installedPlugins.version = 2;
if (!installedPlugins.plugins) installedPlugins.plugins = {};
const pluginCachePath = join3(PLUGINS_DIR, "cache", "thedotmack", "claude-mem", version);
const now = (/* @__PURE__ */ new Date()).toISOString();
installedPlugins.plugins["claude-mem@thedotmack"] = [
{
scope: "user",
installPath: pluginCachePath,
version,
installedAt: now,
lastUpdated: now
}
];
writeJsonFile(installedPluginsPath, installedPlugins);
ensureDir(pluginCachePath);
const pluginSourceDir = join3(MARKETPLACE_DIR, "plugin");
if (existsSync4(pluginSourceDir)) {
cpSync(pluginSourceDir, pluginCachePath, { recursive: true });
}
}
function enablePluginInClaudeSettings() {
const settings = readJsonFile(CLAUDE_SETTINGS_PATH);
if (!settings.enabledPlugins) settings.enabledPlugins = {};
settings.enabledPlugins["claude-mem@thedotmack"] = true;
writeJsonFile(CLAUDE_SETTINGS_PATH, settings);
}
function getPluginVersion() {
const pluginJsonPath = join3(MARKETPLACE_DIR, "plugin", ".claude-plugin", "plugin.json");
if (existsSync4(pluginJsonPath)) {
const pluginJson = JSON.parse(readFileSync2(pluginJsonPath, "utf-8"));
return pluginJson.version ?? "1.0.0";
}
return "1.0.0";
}
async function runInstallation(selectedIDEs) {
const tempDir = join3(tmpdir(), `claude-mem-install-${Date.now()}`);
await Ye([
{
title: "Cloning claude-mem repository",
task: async (message) => {
message("Downloading latest release...");
execSync3(
`git clone --depth 1 https://github.com/thedotmack/claude-mem.git "${tempDir}"`,
{ stdio: "pipe" }
);
return `Repository cloned ${import_picocolors6.default.green("OK")}`;
}
},
{
title: "Installing dependencies",
task: async (message) => {
message("Running npm install...");
execSync3("npm install", { cwd: tempDir, stdio: "pipe" });
return `Dependencies installed ${import_picocolors6.default.green("OK")}`;
}
},
{
title: "Building plugin",
task: async (message) => {
message("Compiling TypeScript and bundling...");
execSync3("npm run build", { cwd: tempDir, stdio: "pipe" });
return `Plugin built ${import_picocolors6.default.green("OK")}`;
}
},
{
title: "Registering plugin",
task: async (message) => {
message("Copying files to marketplace directory...");
ensureDir(MARKETPLACE_DIR);
execSync3(
`rsync -a --delete --exclude=.git --exclude=package-lock.json --exclude=bun.lock "${tempDir}/" "${MARKETPLACE_DIR}/"`,
{ stdio: "pipe" }
);
message("Registering marketplace...");
registerMarketplace();
message("Installing marketplace dependencies...");
execSync3("npm install", { cwd: MARKETPLACE_DIR, stdio: "pipe" });
message("Registering plugin in Claude Code...");
const version = getPluginVersion();
registerPlugin(version);
message("Enabling plugin...");
enablePluginInClaudeSettings();
return `Plugin registered (v${getPluginVersion()}) ${import_picocolors6.default.green("OK")}`;
}
}
]);
try {
execSync3(`rm -rf "${tempDir}"`, { stdio: "pipe" });
} catch {
}
if (selectedIDEs.includes("cursor")) {
R2.info("Cursor hook configuration will be available after first launch.");
R2.info("Run: claude-mem cursor-setup (coming soon)");
}
}
// src/steps/worker.ts
var import_picocolors7 = __toESM(require_picocolors(), 1);
import { spawn } from "child_process";
import { join as join4 } from "path";
import { homedir as homedir4 } from "os";
var MARKETPLACE_DIR2 = join4(homedir4(), ".claude", "plugins", "marketplaces", "thedotmack");
var HEALTH_CHECK_INTERVAL_MS = 1e3;
var HEALTH_CHECK_MAX_ATTEMPTS = 30;
async function pollHealthEndpoint(port, maxAttempts = HEALTH_CHECK_MAX_ATTEMPTS) {
for (let attempt = 0; attempt < maxAttempts; attempt++) {
try {
const response = await fetch(`http://127.0.0.1:${port}/api/health`);
if (response.ok) return true;
} catch {
}
await new Promise((resolve) => setTimeout(resolve, HEALTH_CHECK_INTERVAL_MS));
}
return false;
}
async function runWorkerStartup(workerPort, dataDir) {
const bunInfo = findBinary("bun", ["~/.bun/bin/bun", "/usr/local/bin/bun", "/opt/homebrew/bin/bun"]);
if (!bunInfo.found || !bunInfo.path) {
R2.error("Bun is required to start the worker but was not found.");
R2.info("Install Bun: curl -fsSL https://bun.sh/install | bash");
return;
}
const workerScript = join4(MARKETPLACE_DIR2, "plugin", "scripts", "worker-service.cjs");
const expandedDataDir = expandHome(dataDir);
const logPath = join4(expandedDataDir, "logs");
const s = bt2();
s.start("Starting worker service...");
const child = spawn(bunInfo.path, [workerScript], {
cwd: MARKETPLACE_DIR2,
detached: true,
stdio: "ignore",
env: {
...process.env,
CLAUDE_MEM_WORKER_PORT: workerPort,
CLAUDE_MEM_DATA_DIR: expandedDataDir
}
});
child.unref();
const workerIsHealthy = await pollHealthEndpoint(workerPort);
if (workerIsHealthy) {
s.stop(`Worker running on port ${import_picocolors7.default.cyan(workerPort)} ${import_picocolors7.default.green("OK")}`);
} else {
s.stop(`Worker may still be starting. Check logs at: ${logPath}`);
R2.warn("Health check timed out. The worker might need more time to initialize.");
R2.info(`Check status: curl http://127.0.0.1:${workerPort}/api/health`);
}
}
// src/steps/complete.ts
var import_picocolors8 = __toESM(require_picocolors(), 1);
function getProviderLabel(config) {
switch (config.provider) {
case "claude":
return config.claudeAuthMethod === "api" ? "Claude (API Key)" : "Claude (CLI subscription)";
case "gemini":
return `Gemini (${config.model ?? "gemini-2.5-flash-lite"})`;
case "openrouter":
return `OpenRouter (${config.model ?? "xiaomi/mimo-v2-flash:free"})`;
}
}
function getIDELabels(ides) {
return ides.map((ide) => {
switch (ide) {
case "claude-code":
return "Claude Code";
case "cursor":
return "Cursor";
}
}).join(", ");
}
function runCompletion(providerConfig, settingsConfig, selectedIDEs) {
const summaryLines = [
`Provider: ${import_picocolors8.default.cyan(getProviderLabel(providerConfig))}`,
`IDEs: ${import_picocolors8.default.cyan(getIDELabels(selectedIDEs))}`,
`Data dir: ${import_picocolors8.default.cyan(settingsConfig.dataDir)}`,
`Port: ${import_picocolors8.default.cyan(settingsConfig.workerPort)}`,
`Chroma: ${settingsConfig.chromaEnabled ? import_picocolors8.default.green("enabled") : import_picocolors8.default.dim("disabled")}`
];
Ve(summaryLines.join("\n"), "Configuration Summary");
const nextStepsLines = [];
if (selectedIDEs.includes("claude-code")) {
nextStepsLines.push("Open Claude Code and start a conversation \u2014 memory is automatic!");
}
if (selectedIDEs.includes("cursor")) {
nextStepsLines.push("Open Cursor \u2014 hooks are active in your projects.");
}
nextStepsLines.push(`View your memories: ${import_picocolors8.default.underline(`http://localhost:${settingsConfig.workerPort}`)}`);
nextStepsLines.push(`Search past work: use ${import_picocolors8.default.bold("/mem-search")} in Claude Code`);
Ve(nextStepsLines.join("\n"), "Next Steps");
Le(import_picocolors8.default.green("claude-mem installed successfully!"));
}
// src/index.ts
async function runInstaller() {
if (!process.stdin.isTTY) {
console.error("Error: This installer requires an interactive terminal.");
console.error("Run directly: npx claude-mem-installer");
process.exit(1);
}
const installMode = await runWelcome();
await runDependencyChecks();
const selectedIDEs = await runIdeSelection();
const providerConfig = await runProviderConfiguration();
const settingsConfig = await runSettingsConfiguration();
writeSettings(providerConfig, settingsConfig);
R2.success("Settings saved.");
if (installMode !== "configure") {
await runInstallation(selectedIDEs);
await runWorkerStartup(settingsConfig.workerPort, settingsConfig.dataDir);
}
runCompletion(providerConfig, settingsConfig, selectedIDEs);
}
runInstaller().catch((error) => {
Ne("Installation failed.");
console.error(error);
process.exit(1);
});