haac-aikit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/catalog/agents/backend.md +49 -0
- package/catalog/agents/devops.md +74 -0
- package/catalog/agents/frontend.md +49 -0
- package/catalog/agents/implementer.md +55 -0
- package/catalog/agents/mobile.md +48 -0
- package/catalog/agents/orchestrator.md +53 -0
- package/catalog/agents/planner.md +59 -0
- package/catalog/agents/researcher.md +62 -0
- package/catalog/agents/reviewer.md +70 -0
- package/catalog/agents/security-auditor.md +73 -0
- package/catalog/agents/tester.md +63 -0
- package/catalog/ci/agents-md-sync.yml +42 -0
- package/catalog/ci/ci.yml +24 -0
- package/catalog/ci/claude.yml +20 -0
- package/catalog/ci/secret-scan.yml +20 -0
- package/catalog/commands/commit-push-pr.md +21 -0
- package/catalog/commands/commit.md +17 -0
- package/catalog/commands/debug.md +17 -0
- package/catalog/commands/execute.md +13 -0
- package/catalog/commands/explore.md +26 -0
- package/catalog/commands/plan.md +19 -0
- package/catalog/commands/review.md +17 -0
- package/catalog/commands/security-review.md +33 -0
- package/catalog/commands/ship.md +21 -0
- package/catalog/commands/tdd.md +21 -0
- package/catalog/devcontainer/devcontainer.json +24 -0
- package/catalog/hooks/block-dangerous-bash.sh +30 -0
- package/catalog/hooks/block-force-push-main.sh +22 -0
- package/catalog/hooks/block-secrets-in-commits.sh +37 -0
- package/catalog/hooks/compaction-preservation.sh +29 -0
- package/catalog/hooks/file-guard.sh +30 -0
- package/catalog/hooks/format-on-save.sh +43 -0
- package/catalog/hooks/hooks.json +70 -0
- package/catalog/hooks/session-start-prime.sh +31 -0
- package/catalog/husky/commit-msg +4 -0
- package/catalog/husky/commitlint.config.js +8 -0
- package/catalog/husky/gitleaks.toml +10 -0
- package/catalog/husky/lintstagedrc.json +5 -0
- package/catalog/husky/pre-commit +4 -0
- package/catalog/husky/pre-push +18 -0
- package/catalog/mcp/mcp.json +19 -0
- package/catalog/plugin/plugin.json +10 -0
- package/catalog/rules/AGENTS.md.tmpl +46 -0
- package/catalog/rules/CLAUDE.md.shim +5 -0
- package/catalog/rules/GEMINI.md.shim +5 -0
- package/catalog/rules/aider-conventions.md +5 -0
- package/catalog/rules/aider.conf.yml +5 -0
- package/catalog/rules/copilot-instructions.md +6 -0
- package/catalog/rules/cursor-base.mdc +13 -0
- package/catalog/rules/windsurf-rules.md +7 -0
- package/catalog/settings/env.example +7 -0
- package/catalog/settings/settings.json +45 -0
- package/catalog/skills/tier1/brainstorming.md +39 -0
- package/catalog/skills/tier1/codebase-exploration.md +55 -0
- package/catalog/skills/tier1/executing-plans.md +34 -0
- package/catalog/skills/tier1/requesting-code-review.md +37 -0
- package/catalog/skills/tier1/systematic-debugging.md +50 -0
- package/catalog/skills/tier1/test-driven-development.md +44 -0
- package/catalog/skills/tier1/using-git-worktrees.md +43 -0
- package/catalog/skills/tier1/verification-before-completion.md +46 -0
- package/catalog/skills/tier1/writing-commits.md +52 -0
- package/catalog/skills/tier1/writing-plans.md +42 -0
- package/catalog/skills/tier2/claude-md-improver.md +42 -0
- package/catalog/skills/tier2/dependency-hygiene.md +52 -0
- package/catalog/skills/tier2/dispatching-parallel-agents.md +43 -0
- package/catalog/skills/tier2/finishing-a-development-branch.md +48 -0
- package/catalog/skills/tier2/receiving-code-review.md +49 -0
- package/catalog/skills/tier2/refactoring-simplify.md +40 -0
- package/catalog/skills/tier2/security-review.md +48 -0
- package/catalog/skills/tier2/writing-pull-requests.md +47 -0
- package/dist/cli.mjs +2161 -0
- package/dist/cli.mjs.map +1 -0
- package/package.json +64 -0
package/dist/cli.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/sisteransi/src/index.js","../node_modules/picocolors/picocolors.js","../node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js","../node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js","../node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../node_modules/@clack/core/src/utils/settings.ts","../node_modules/@clack/core/src/utils/string.ts","../node_modules/@clack/core/src/utils/index.ts","../node_modules/@clack/core/src/prompts/prompt.ts","../node_modules/@clack/core/src/prompts/confirm.ts","../node_modules/@clack/core/src/prompts/group-multiselect.ts","../node_modules/@clack/core/src/prompts/multi-select.ts","../node_modules/@clack/core/src/prompts/password.ts","../node_modules/@clack/core/src/prompts/select.ts","../node_modules/@clack/core/src/prompts/select-key.ts","../node_modules/@clack/core/src/prompts/text.ts","../node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../node_modules/@clack/prompts/src/index.ts","../src/detect/gitState.ts","../src/fs/readConfig.ts","../node_modules/kleur/index.mjs","../src/wizard.ts","../src/render/markers.ts","../src/fs/safeWrite.ts","../src/fs/gitignore.ts","../src/render/template.ts","../src/catalog/index.ts","../src/commands/sync.ts","../src/commands/init.ts","../src/commands/diff.ts","../src/commands/update.ts","../src/commands/add.ts","../src/commands/list.ts","../src/commands/doctor.ts","../node_modules/mri/lib/index.mjs","../src/detect/isCI.ts","../src/cli.ts"],"sourcesContent":["'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n to(x, y) {\n if (!y) return `${CSI}${x + 1}G`;\n return `${CSI}${y + 1};${x + 1}H`;\n },\n move(x, y) {\n let ret = '';\n\n if (x < 0) ret += `${CSI}${-x}D`;\n else if (x > 0) ret += `${CSI}${x}C`;\n\n if (y < 0) ret += `${CSI}${-y}A`;\n else if (y > 0) ret += `${CSI}${y}B`;\n\n return ret;\n },\n up: (count = 1) => `${CSI}${count}A`,\n down: (count = 1) => `${CSI}${count}B`,\n forward: (count = 1) => `${CSI}${count}C`,\n backward: (count = 1) => `${CSI}${count}D`,\n nextLine: (count = 1) => `${CSI}E`.repeat(count),\n prevLine: (count = 1) => `${CSI}F`.repeat(count),\n left: `${CSI}G`,\n hide: `${CSI}?25l`,\n show: `${CSI}?25h`,\n save: `${ESC}7`,\n restore: `${ESC}8`\n}\n\nconst scroll = {\n up: (count = 1) => `${CSI}S`.repeat(count),\n down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n screen: `${CSI}2J`,\n up: (count = 1) => `${CSI}1J`.repeat(count),\n down: (count = 1) => `${CSI}J`.repeat(count),\n line: `${CSI}2K`,\n lineEnd: `${CSI}K`,\n lineStart: `${CSI}1K`,\n lines(count) {\n let clear = '';\n for (let i = 0; i < count; i++)\n clear += this.line + (i < count - 1 ? cursor.up() : '');\n if (count)\n clear += cursor.left;\n return clear;\n }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n","let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record<string, Action>;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/natemoo-re/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable, Writable } from 'node:stream';\nimport { WriteStream } from 'node:tty';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions<Prompt>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents>(event: T, ...data: Parameters<ClackEvents[T]>) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new WriteStream(0);\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions<T extends { value: any }> extends PromptOptions<SelectKeyPrompt<T>> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? `${isLast ? S_BAR_END : S_BAR} ` : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(prefix)}${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport const spinner = () => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet dotsTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\t\t\tconst loadingDots = isCI ? '...' : '.'.repeat(Math.floor(dotsTimer)).slice(0, 3);\n\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tdotsTimer = dotsTimer < frames.length ? dotsTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n","import { execFileSync } from \"node:child_process\";\n\nexport function isGitRepo(): boolean {\n try {\n execFileSync(\"git\", [\"rev-parse\", \"--git-dir\"], { stdio: \"ignore\" });\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isDirtyTree(): boolean {\n try {\n const output = execFileSync(\"git\", [\"status\", \"--porcelain\"], {\n encoding: \"utf8\",\n stdio: [\"pipe\", \"pipe\", \"ignore\"],\n });\n return output.trim().length > 0;\n } catch {\n return false;\n }\n}\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport type { AikitConfig } from \"../types.js\";\n\nexport function readConfig(configPath = \".aikitrc.json\"): AikitConfig | null {\n if (!existsSync(configPath)) return null;\n\n let raw: unknown;\n try {\n raw = JSON.parse(readFileSync(configPath, \"utf8\"));\n } catch {\n throw new Error(`Failed to parse ${configPath}: invalid JSON`);\n }\n\n if (typeof raw !== \"object\" || raw === null) {\n throw new Error(`${configPath} must be a JSON object`);\n }\n\n const cfg = raw as Partial<AikitConfig>;\n if (cfg.version !== 1) {\n throw new Error(`${configPath}: unsupported version ${cfg.version}`);\n }\n\n return cfg as AikitConfig;\n}\n\nexport function writeConfig(config: AikitConfig, configPath = \".aikitrc.json\", dryRun = false): void {\n const content =\n JSON.stringify({ $schema: \"https://haac-aikit.dev/schema.json\", ...config }, null, 2) + \"\\n\";\n if (!dryRun) writeFileSync(configPath, content, \"utf8\");\n}\n","'use strict';\n\nlet FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {});\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t),\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (!!~str.indexOf(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\t!!~this.has.indexOf(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\nexport default $;\n","import * as p from \"@clack/prompts\";\nimport kleur from \"kleur\";\nimport type { Integration, ProjectShape, Scope, Tool, WizardAnswers } from \"./types.js\";\n\nconst ALL_TOOLS: { value: Tool; label: string; hint: string }[] = [\n { value: \"claude\", label: \"Claude Code\", hint: \"CLAUDE.md + .claude/\" },\n { value: \"cursor\", label: \"Cursor\", hint: \".cursor/rules/\" },\n { value: \"copilot\", label: \"GitHub Copilot\", hint: \".github/copilot-instructions.md\" },\n { value: \"windsurf\", label: \"Windsurf\", hint: \".windsurf/rules/\" },\n { value: \"aider\", label: \"Aider\", hint: \"CONVENTIONS.md + .aider.conf.yml\" },\n { value: \"gemini\", label: \"Gemini CLI\", hint: \"GEMINI.md shim\" },\n { value: \"codex\", label: \"OpenAI Codex CLI\", hint: \"AGENTS.md (already canonical)\" },\n];\n\nconst ALL_SHAPES: { value: ProjectShape; label: string }[] = [\n { value: \"web\", label: \"Web frontend\" },\n { value: \"fullstack\", label: \"Full-stack\" },\n { value: \"backend\", label: \"Backend / API\" },\n { value: \"mobile\", label: \"Mobile\" },\n { value: \"library\", label: \"Library / package\" },\n];\n\nconst ALL_INTEGRATIONS: { value: Integration; label: string }[] = [\n { value: \"mcp\", label: \"MCP stub (.mcp.json)\" },\n { value: \"hooks\", label: \"Claude Code hooks\" },\n { value: \"commands\", label: \"Slash commands\" },\n { value: \"subagents\", label: \"Subagents catalog\" },\n { value: \"ci\", label: \"CI workflows (.github/workflows/)\" },\n { value: \"husky\", label: \"Husky pre-commit hooks\" },\n { value: \"devcontainer\", label: \"Dev container (.devcontainer/)\" },\n { value: \"plugin\", label: \"Claude Code plugin wrapper\" },\n { value: \"otel\", label: \"OTel telemetry exporter\" },\n];\n\nexport async function runWizard(projectName: string): Promise<WizardAnswers> {\n p.intro(kleur.bgCyan().black(\" haac-aikit \") + \" The batteries-included AI-agentic-coding kit\");\n\n const answers = await p.group(\n {\n projectName: () =>\n p.text({\n message: \"Project name\",\n defaultValue: projectName,\n placeholder: projectName,\n }),\n\n projectDescription: () =>\n p.text({\n message: \"Project description\",\n placeholder: \"One sentence (optional)\",\n }),\n\n tools: () =>\n p.multiselect<Tool>({\n message: \"Which AI coding tools do you use?\",\n options: ALL_TOOLS,\n initialValues: ALL_TOOLS.map((t) => t.value),\n required: true,\n }),\n\n scope: () =>\n p.select<Scope>({\n message: \"Installation scope\",\n options: [\n {\n value: \"minimal\",\n label: \"Minimal\",\n hint: \"AGENTS.md + rule shims + .mcp.json\",\n },\n {\n value: \"standard\",\n label: \"Standard (recommended)\",\n hint: \"+ skills, commands, agents, hooks, CI\",\n },\n {\n value: \"everything\",\n label: \"Everything\",\n hint: \"+ devcontainer, plugin, OTel, sync workflow\",\n },\n ],\n initialValue: \"standard\",\n }),\n\n integrations: ({ results }) => {\n if (results.scope !== \"everything\") return Promise.resolve(undefined);\n return p.multiselect<Integration>({\n message: \"Optional integrations\",\n options: ALL_INTEGRATIONS,\n initialValues: ALL_INTEGRATIONS.map((i) => i.value),\n required: false,\n });\n },\n\n shape: ({ results }) => {\n if (results.scope === \"minimal\") return Promise.resolve(undefined);\n return p.multiselect<ProjectShape>({\n message: \"Project shape (adds domain-specialist agents)\",\n options: ALL_SHAPES,\n initialValues: [\"web\"],\n required: false,\n });\n },\n },\n {\n onCancel: () => {\n p.cancel(\"Setup cancelled.\");\n process.exit(0);\n },\n }\n );\n\n return {\n projectName: (answers.projectName as string) || projectName,\n projectDescription: (answers.projectDescription as string) || \"\",\n tools: (answers.tools as Tool[]) ?? ALL_TOOLS.map((t) => t.value),\n scope: (answers.scope as Scope) ?? \"standard\",\n integrations: (answers.integrations as Integration[]) ?? [],\n shape: (answers.shape as ProjectShape[]) ?? [],\n };\n}\n","/**\n * BEGIN/END marker engine.\n *\n * Supports four file dialects:\n * markdown / .mdc → <!-- BEGIN:haac-aikit --> … <!-- END:haac-aikit -->\n * JSON → \"// BEGIN:haac-aikit\": \"\" … \"// END:haac-aikit\": \"\"\n * YAML / shell → # BEGIN:haac-aikit … # END:haac-aikit\n *\n * Content outside markers is always preserved unchanged.\n */\n\nconst MARKER = \"haac-aikit\";\n\ntype Dialect = \"markdown\" | \"json\" | \"yaml\";\n\nfunction detectDialect(filePath: string): Dialect {\n if (filePath.endsWith(\".json\")) return \"json\";\n if (\n filePath.endsWith(\".yaml\") ||\n filePath.endsWith(\".yml\") ||\n filePath.endsWith(\".sh\") ||\n filePath.endsWith(\".conf\") ||\n filePath.endsWith(\".toml\")\n )\n return \"yaml\";\n return \"markdown\";\n}\n\nfunction makeBegin(dialect: Dialect): string {\n switch (dialect) {\n case \"json\":\n return `\"// BEGIN:${MARKER}\": \"\"`;\n case \"yaml\":\n return `# BEGIN:${MARKER}`;\n case \"markdown\":\n return `<!-- BEGIN:${MARKER} -->`;\n }\n}\n\nfunction makeEnd(dialect: Dialect): string {\n switch (dialect) {\n case \"json\":\n return `\"// END:${MARKER}\": \"\"`;\n case \"yaml\":\n return `# END:${MARKER}`;\n case \"markdown\":\n return `<!-- END:${MARKER} -->`;\n }\n}\n\nexport interface MarkerResult {\n hasMarkers: boolean;\n replaced: string;\n}\n\n/**\n * If the file already contains BEGIN/END markers, replace only the\n * content between them. Otherwise append the new content with markers.\n */\nexport function upsertMarkerRegion(\n existing: string,\n newContent: string,\n filePath: string\n): MarkerResult {\n const dialect = detectDialect(filePath);\n const begin = makeBegin(dialect);\n const end = makeEnd(dialect);\n\n const beginIdx = existing.indexOf(begin);\n const endIdx = existing.indexOf(end);\n\n if (beginIdx !== -1 && endIdx !== -1 && endIdx > beginIdx) {\n const before = existing.slice(0, beginIdx + begin.length);\n const after = existing.slice(endIdx);\n const replaced = `${before}\\n${newContent}\\n${after}`;\n return { hasMarkers: true, replaced };\n }\n\n // No markers — append\n const separator = existing.length > 0 && !existing.endsWith(\"\\n\") ? \"\\n\\n\" : \"\\n\";\n const replaced = `${existing}${separator}${begin}\\n${newContent}\\n${end}\\n`;\n return { hasMarkers: false, replaced };\n}\n\n/**\n * Wrap content with BEGIN/END markers for a fresh file.\n */\nexport function wrapWithMarkers(content: string, filePath: string): string {\n const dialect = detectDialect(filePath);\n return `${makeBegin(dialect)}\\n${content}\\n${makeEnd(dialect)}\\n`;\n}\n\n/**\n * Extract content inside markers. Returns null if no markers found.\n */\nexport function extractMarkerRegion(content: string, filePath: string): string | null {\n const dialect = detectDialect(filePath);\n const begin = makeBegin(dialect);\n const end = makeEnd(dialect);\n\n const beginIdx = content.indexOf(begin);\n const endIdx = content.indexOf(end);\n\n if (beginIdx === -1 || endIdx === -1 || endIdx <= beginIdx) return null;\n return content.slice(beginIdx + begin.length, endIdx).trim();\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { upsertMarkerRegion } from \"../render/markers.js\";\nimport type { WriteResult } from \"../types.js\";\n\nexport interface SafeWriteOptions {\n dryRun?: boolean;\n force?: boolean;\n /** If true, use BEGIN/END markers to update only the managed region. */\n useMarkers?: boolean;\n /** New managed content (only used when useMarkers is true). */\n managedContent?: string;\n}\n\n/**\n * Non-destructively write a file.\n *\n * - If the file does not exist: create it (including parent dirs).\n * - If the file exists and useMarkers=true: upsert only the managed region.\n * - If the file exists and useMarkers=false: report conflict unless --force.\n */\nexport function safeWrite(\n filePath: string,\n content: string,\n opts: SafeWriteOptions = {}\n): WriteResult {\n const { dryRun = false, force = false, useMarkers = true, managedContent } = opts;\n const existed = existsSync(filePath);\n\n if (existed) {\n if (useMarkers && managedContent !== undefined) {\n const existing = readFileSync(filePath, \"utf8\");\n const { replaced } = upsertMarkerRegion(existing, managedContent, filePath);\n if (!dryRun) writeFileSync(filePath, replaced, \"utf8\");\n return { path: filePath, action: \"updated\" };\n }\n\n if (!force) {\n return { path: filePath, action: \"conflict\" };\n }\n }\n\n if (!dryRun) {\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, content, \"utf8\");\n }\n\n return { path: filePath, action: existed ? \"updated\" : \"created\" };\n}\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\n\nconst ENTRIES = [\n \".claude/settings.local.json\",\n \".claude/backups/\",\n \".env.local\",\n \".env*.local\",\n];\n\nexport function ensureGitignoreEntries(dryRun = false): void {\n const path = \".gitignore\";\n const existing = existsSync(path) ? readFileSync(path, \"utf8\") : \"\";\n const lines = existing.split(\"\\n\");\n\n const toAdd = ENTRIES.filter((e) => !lines.some((l) => l.trim() === e));\n if (toAdd.length === 0) return;\n\n const appended =\n (existing.endsWith(\"\\n\") || existing === \"\" ? existing : existing + \"\\n\") +\n toAdd.join(\"\\n\") +\n \"\\n\";\n\n if (!dryRun) writeFileSync(path, appended, \"utf8\");\n}\n","/**\n * Simple {{var}} string interpolation. No dependencies — keeps the bundle tiny.\n * Throws if a referenced variable is missing from the context.\n */\nexport function interpolate(template: string, vars: Record<string, string>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key: string) => {\n if (!(key in vars)) {\n throw new Error(`Template variable not found: {{${key}}}`);\n }\n return vars[key] ?? \"\";\n });\n}\n\n/** Returns list of all {{var}} tokens in a template. */\nexport function extractVars(template: string): string[] {\n const matches = template.matchAll(/\\{\\{(\\w+)\\}\\}/g);\n return [...new Set([...matches].map((m) => m[1] as string))];\n}\n","import { readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, join } from \"node:path\";\nimport { interpolate } from \"../render/template.js\";\n\n// When bundled: import.meta.url points to dist/cli.mjs; catalog is at ../catalog\nconst ROOT = join(dirname(fileURLToPath(import.meta.url)), \"..\", \"catalog\");\n\nfunction read(rel: string): string {\n return readFileSync(join(ROOT, rel), \"utf8\");\n}\n\nexport function loadCatalog() {\n return {\n agentsMd: (vars: Record<string, string>) => interpolate(read(\"rules/AGENTS.md.tmpl\"), vars),\n claudeMd: () => read(\"rules/CLAUDE.md.shim\"),\n copilotInstructions: () => read(\"rules/copilot-instructions.md\"),\n cursorBase: () => read(\"rules/cursor-base.mdc\"),\n windsurfRules: () => read(\"rules/windsurf-rules.md\"),\n aiderConventions: () => read(\"rules/aider-conventions.md\"),\n aiderConf: () => read(\"rules/aider.conf.yml\"),\n geminiMd: () => read(\"rules/GEMINI.md.shim\"),\n mcpJson: () => read(\"mcp/mcp.json\"),\n settingsJson: () => read(\"settings/settings.json\"),\n };\n}\n","import * as p from \"@clack/prompts\";\nimport { readConfig } from \"../fs/readConfig.js\";\nimport { safeWrite } from \"../fs/safeWrite.js\";\nimport { ensureGitignoreEntries } from \"../fs/gitignore.js\";\nimport { loadCatalog } from \"../catalog/index.js\";\nimport { existsSync, mkdirSync, copyFileSync, readdirSync, readFileSync } from \"node:fs\";\nimport { join, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { CliArgs, WriteResult } from \"../types.js\";\n\n// When bundled: import.meta.url points to dist/cli.mjs; catalog is at ../catalog\nconst CATALOG_ROOT = join(dirname(fileURLToPath(import.meta.url)), \"..\", \"catalog\");\n\nexport async function runSync(argv: CliArgs): Promise<void> {\n const dryRun = argv[\"dry-run\"];\n const force = argv.force;\n const config = readConfig(argv.config);\n\n if (!config) {\n p.log.error(\".aikitrc.json not found. Run `aikit` first to initialise.\");\n process.exit(1);\n }\n\n p.log.info(`Syncing from .aikitrc.json (scope: ${config.scope})`);\n\n const catalog = loadCatalog();\n const results: WriteResult[] = [];\n const opts = { dryRun, force };\n\n // Rules\n const agentsMdContent = catalog.agentsMd({\n projectName: config.projectName,\n description: config.projectDescription ?? \"\",\n });\n results.push(safeWrite(\"AGENTS.md\", agentsMdContent, { ...opts, useMarkers: true, managedContent: agentsMdContent }));\n\n if (config.tools.includes(\"claude\")) {\n results.push(safeWrite(\"CLAUDE.md\", catalog.claudeMd(), { ...opts, useMarkers: false }));\n results.push(safeWrite(\".claude/settings.json\", catalog.settingsJson(), { ...opts, useMarkers: false }));\n }\n if (config.tools.includes(\"copilot\")) {\n results.push(safeWrite(\".github/copilot-instructions.md\", catalog.copilotInstructions(), { ...opts, useMarkers: false }));\n }\n if (config.tools.includes(\"cursor\")) {\n results.push(safeWrite(\".cursor/rules/000-base.mdc\", catalog.cursorBase(), { ...opts, useMarkers: false }));\n }\n if (config.tools.includes(\"windsurf\")) {\n results.push(safeWrite(\".windsurf/rules/project.md\", catalog.windsurfRules(), { ...opts, useMarkers: false }));\n }\n if (config.tools.includes(\"aider\")) {\n results.push(safeWrite(\"CONVENTIONS.md\", catalog.aiderConventions(), { ...opts, useMarkers: false }));\n results.push(safeWrite(\".aider.conf.yml\", catalog.aiderConf(), { ...opts, useMarkers: false }));\n }\n if (config.tools.includes(\"gemini\")) {\n results.push(safeWrite(\"GEMINI.md\", catalog.geminiMd(), { ...opts, useMarkers: false }));\n }\n\n // MCP\n if (config.integrations.mcp && config.tools.includes(\"claude\")) {\n results.push(safeWrite(\".mcp.json\", catalog.mcpJson(), { ...opts, useMarkers: false }));\n }\n\n // Skills\n if (config.scope !== \"minimal\") {\n results.push(...syncSkills(\"tier1\", dryRun));\n results.push(...syncSkills(\"tier2\", dryRun));\n }\n\n // Hooks\n if (config.integrations.hooks) {\n results.push(...syncHooks(dryRun));\n }\n\n // Agents\n if (config.integrations.subagents) {\n results.push(...syncAgents(config.shape, dryRun));\n }\n\n // Commands\n if (config.integrations.commands) {\n results.push(...syncCommands(dryRun));\n }\n\n // CI\n if (config.integrations.ci) {\n results.push(...syncCI(dryRun));\n }\n\n // Everything tier\n if (config.integrations.devcontainer) {\n results.push(...syncDir(\"devcontainer\", \".devcontainer\", dryRun, [\".json\"]));\n }\n if (config.integrations.otel) {\n results.push(safeWrite(\".env.example\", readCatalogFile(\"settings/env.example\"), { dryRun, useMarkers: false }));\n }\n\n ensureGitignoreEntries(dryRun);\n\n const created = results.filter((r) => r.action === \"created\").length;\n const updated = results.filter((r) => r.action === \"updated\").length;\n const conflicts = results.filter((r) => r.action === \"conflict\");\n\n if (dryRun) {\n p.note(results.map((r) => `${r.action.padEnd(9)} ${r.path}`).join(\"\\n\"), \"Dry run\");\n return;\n }\n\n p.note(\n results.map((r) => `${r.action.padEnd(9)} ${r.path}`).join(\"\\n\"),\n `${created} created, ${updated} updated`\n );\n\n if (conflicts.length > 0) {\n p.log.warn(`${conflicts.length} conflict(s) skipped (use --force to overwrite)`);\n }\n\n p.outro(\"Sync complete.\");\n}\n\nfunction syncSkills(tier: \"tier1\" | \"tier2\", dryRun: boolean): WriteResult[] {\n const srcDir = join(CATALOG_ROOT, \"skills\", tier);\n const destDir = `.claude/skills`;\n const results: WriteResult[] = [];\n\n if (!existsSync(srcDir)) return results;\n\n const files = readdirSync(srcDir).filter((f) => f.endsWith(\".md\"));\n if (!dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n const dest = join(destDir, file);\n if (!dryRun) copyFileSync(join(srcDir, file), dest);\n results.push({ path: dest, action: existsSync(dest) ? \"updated\" : \"created\" });\n }\n\n return results;\n}\n\nfunction syncHooks(dryRun: boolean): WriteResult[] {\n const srcDir = join(CATALOG_ROOT, \"hooks\");\n const destDir = `.claude/hooks`;\n const results: WriteResult[] = [];\n\n if (!existsSync(srcDir)) return results;\n\n const files = readdirSync(srcDir).filter((f) => f.endsWith(\".sh\") || f === \"hooks.json\");\n if (!dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n const dest = join(destDir, file);\n if (!dryRun) copyFileSync(join(srcDir, file), dest);\n results.push({ path: dest, action: existsSync(dest) ? \"updated\" : \"created\" });\n }\n\n return results;\n}\n\nfunction syncAgents(shapes: string[], dryRun: boolean): WriteResult[] {\n const srcDir = join(CATALOG_ROOT, \"agents\");\n const destDir = `.claude/agents`;\n const results: WriteResult[] = [];\n\n if (!existsSync(srcDir)) return results;\n\n const CORE_AGENTS = [\"orchestrator\", \"planner\", \"researcher\", \"implementer\", \"reviewer\", \"tester\", \"security-auditor\", \"devops\"];\n const SHAPE_AGENTS: Record<string, string[]> = {\n web: [\"frontend\"],\n fullstack: [\"frontend\", \"backend\"],\n backend: [\"backend\"],\n mobile: [\"mobile\"],\n library: [\"backend\"],\n };\n\n const agentsToInstall = new Set(CORE_AGENTS);\n for (const shape of shapes) {\n for (const agent of (SHAPE_AGENTS[shape] ?? [])) {\n agentsToInstall.add(agent);\n }\n }\n\n if (!dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const agent of agentsToInstall) {\n const src = join(srcDir, `${agent}.md`);\n const dest = join(destDir, `${agent}.md`);\n if (!existsSync(src)) continue;\n if (!dryRun) copyFileSync(src, dest);\n results.push({ path: dest, action: existsSync(dest) ? \"updated\" : \"created\" });\n }\n\n return results;\n}\n\nfunction syncCommands(dryRun: boolean): WriteResult[] {\n const srcDir = join(CATALOG_ROOT, \"commands\");\n const destDir = `.claude/commands`;\n const results: WriteResult[] = [];\n\n if (!existsSync(srcDir)) return results;\n\n const files = readdirSync(srcDir).filter((f) => f.endsWith(\".md\"));\n if (!dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n const dest = join(destDir, file);\n if (!dryRun) copyFileSync(join(srcDir, file), dest);\n results.push({ path: dest, action: existsSync(dest) ? \"updated\" : \"created\" });\n }\n\n return results;\n}\n\nfunction syncCI(dryRun: boolean): WriteResult[] {\n const srcDir = join(CATALOG_ROOT, \"ci\");\n const destDir = `.github/workflows`;\n const results: WriteResult[] = [];\n\n if (!existsSync(srcDir)) return results;\n\n const files = readdirSync(srcDir).filter((f) => f.endsWith(\".yml\"));\n if (!dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n const dest = join(destDir, file);\n if (!dryRun) copyFileSync(join(srcDir, file), dest);\n results.push({ path: dest, action: existsSync(dest) ? \"updated\" : \"created\" });\n }\n\n return results;\n}\n\nfunction syncDir(\n catalogSubdir: string,\n destDir: string,\n dryRun: boolean,\n extensions = [\".md\", \".json\", \".yml\", \".yaml\"]\n): WriteResult[] {\n const srcDir = join(CATALOG_ROOT, catalogSubdir);\n const results: WriteResult[] = [];\n\n if (!existsSync(srcDir)) return results;\n\n const files = readdirSync(srcDir).filter((f) =>\n extensions.some((ext) => f.endsWith(ext))\n );\n if (!dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n const dest = join(destDir, file);\n if (!dryRun) copyFileSync(join(srcDir, file), dest);\n results.push({ path: dest, action: existsSync(dest) ? \"updated\" : \"created\" });\n }\n\n return results;\n}\n\nfunction readCatalogFile(rel: string): string {\n return readFileSync(join(CATALOG_ROOT, rel), \"utf8\");\n}\n","import * as p from \"@clack/prompts\";\nimport { basename } from \"node:path\";\nimport { isDirtyTree, isGitRepo } from \"../detect/gitState.js\";\nimport { readConfig, writeConfig } from \"../fs/readConfig.js\";\nimport type { AikitConfig, CliArgs, Integration, ProjectShape, Scope, Tool } from \"../types.js\";\nimport { runWizard } from \"../wizard.js\";\n\nexport async function runInit(argv: CliArgs, headless: boolean): Promise<void> {\n const dryRun = argv[\"dry-run\"];\n\n // Dirty-tree check (skip in CI / with flag)\n if (!argv[\"skip-git-check\"] && !headless && isGitRepo() && isDirtyTree()) {\n const proceed = await p.confirm({\n message: \"Working tree has uncommitted changes. Continue?\",\n initialValue: false,\n });\n if (!proceed) {\n p.cancel(\"Aborted. Stash or commit changes first.\");\n process.exit(0);\n }\n }\n\n // If .aikitrc.json already exists → sync mode\n const existing = readConfig(argv.config);\n if (existing) {\n const { runSync } = await import(\"./sync.js\");\n await runSync(argv);\n return;\n }\n\n // Resolve config from flags or wizard\n let config: AikitConfig;\n\n if (headless || argv.yes) {\n const projectName = basename(process.cwd());\n const tools = parseTools(argv.tools);\n const scope = argv.preset ?? \"standard\";\n const integrations = defaultIntegrationsForScope(scope);\n config = buildDefaultConfig(projectName, \"\", tools, scope, integrations, []);\n } else {\n const answers = await runWizard(basename(process.cwd()));\n const defaultIntegrations = defaultIntegrationsForScope(answers.scope);\n const integrations = answers.integrations.length > 0 ? answers.integrations : defaultIntegrations;\n config = buildDefaultConfig(\n answers.projectName,\n answers.projectDescription,\n answers.tools,\n answers.scope,\n integrations,\n answers.shape\n );\n }\n\n // Write config first so sync can read it\n writeConfig(config, argv.config ?? \".aikitrc.json\", dryRun);\n\n // Delegate all file writing to sync for consistency\n const { runSync } = await import(\"./sync.js\");\n await runSync(argv);\n}\n\nfunction parseTools(raw?: string): Tool[] {\n const all: Tool[] = [\"claude\", \"cursor\", \"copilot\", \"windsurf\", \"aider\", \"gemini\", \"codex\"];\n if (!raw || raw === \"all\") return all;\n if (raw === \"none\") return [];\n return raw.split(\",\").filter((t): t is Tool => all.includes(t as Tool));\n}\n\nfunction defaultIntegrationsForScope(scope: Scope): Integration[] {\n if (scope === \"minimal\") return [\"mcp\"];\n if (scope === \"standard\") return [\"mcp\", \"hooks\", \"commands\", \"subagents\", \"ci\", \"husky\"];\n return [\"mcp\", \"hooks\", \"commands\", \"subagents\", \"ci\", \"husky\", \"devcontainer\", \"plugin\", \"otel\"];\n}\n\nfunction buildDefaultConfig(\n projectName: string,\n projectDescription: string,\n tools: Tool[],\n scope: Scope,\n integrations: Integration[],\n shape: ProjectShape[]\n): AikitConfig {\n return {\n version: 1,\n projectName,\n projectDescription,\n tools,\n scope,\n shape,\n integrations: {\n mcp: integrations.includes(\"mcp\"),\n hooks: integrations.includes(\"hooks\"),\n commands: integrations.includes(\"commands\"),\n subagents: integrations.includes(\"subagents\"),\n ci: integrations.includes(\"ci\"),\n husky: integrations.includes(\"husky\"),\n devcontainer: integrations.includes(\"devcontainer\"),\n plugin: integrations.includes(\"plugin\"),\n otel: integrations.includes(\"otel\"),\n },\n skills: { tier1: \"all\", tier2: \"all\", tier3: [] },\n canonical: \"AGENTS.md\",\n };\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport kleur from \"kleur\";\nimport { readConfig } from \"../fs/readConfig.js\";\nimport { loadCatalog } from \"../catalog/index.js\";\nimport type { CliArgs } from \"../types.js\";\n\nconst CATALOG_ROOT = join(dirname(fileURLToPath(import.meta.url)), \"..\", \"catalog\");\n\nexport async function runDiff(argv: CliArgs): Promise<void> {\n const config = readConfig(argv.config);\n if (!config) {\n process.stderr.write(\".aikitrc.json not found. Run `aikit` to initialise.\\n\");\n process.exit(1);\n }\n\n const catalog = loadCatalog();\n const drifted: string[] = [];\n const missing: string[] = [];\n\n // Check AGENTS.md managed region\n if (existsSync(\"AGENTS.md\")) {\n const current = readFileSync(\"AGENTS.md\", \"utf8\");\n const freshContent = catalog.agentsMd({\n projectName: config.projectName,\n description: config.projectDescription ?? \"\",\n });\n const begin = \"<!-- BEGIN:haac-aikit -->\";\n const end = \"<!-- END:haac-aikit -->\";\n const currentRegion = extractRegion(current, begin, end);\n // freshContent already contains markers (from the .tmpl file), so extract directly\n const freshRegion = extractRegion(freshContent, begin, end);\n if (currentRegion !== freshRegion) {\n drifted.push(\"AGENTS.md (managed region differs from catalog template)\");\n }\n } else {\n missing.push(\"AGENTS.md\");\n }\n\n // Check skill files\n checkCatalogDir(\"skills/tier1\", \".claude/skills\", missing, drifted);\n checkCatalogDir(\"skills/tier2\", \".claude/skills\", missing, drifted);\n checkCatalogDir(\"agents\", \".claude/agents\", missing, drifted);\n checkCatalogDir(\"hooks\", \".claude/hooks\", missing, drifted, [\".sh\"]);\n\n if (missing.length === 0 && drifted.length === 0) {\n process.stdout.write(kleur.green(\"✓ No drift — project is in sync with catalog.\\n\"));\n return;\n }\n\n if (missing.length > 0) {\n process.stdout.write(kleur.yellow(`Missing (${missing.length}):\\n`));\n for (const m of missing) process.stdout.write(` · ${m}\\n`);\n }\n\n if (drifted.length > 0) {\n process.stdout.write(kleur.cyan(`Drifted (${drifted.length}):\\n`));\n for (const d of drifted) process.stdout.write(` ~ ${d}\\n`);\n }\n\n process.stdout.write(`\\nRun ${kleur.cyan(\"aikit sync\")} to update all, or ${kleur.cyan(\"aikit update\")} to review changes first.\\n`);\n}\n\nfunction extractRegion(content: string, begin: string, end: string): string {\n const bi = content.indexOf(begin);\n const ei = content.indexOf(end);\n if (bi === -1 || ei === -1) return \"\";\n return content.slice(bi + begin.length, ei).trim();\n}\n\nfunction checkCatalogDir(\n catalogSubdir: string,\n installedDir: string,\n missing: string[],\n drifted: string[],\n extensions = [\".md\"]\n): void {\n const catalogDir = join(CATALOG_ROOT, catalogSubdir);\n if (!existsSync(catalogDir)) return;\n\n const files = readdirSync(catalogDir).filter((f) =>\n extensions.some((ext) => f.endsWith(ext))\n );\n\n for (const file of files) {\n const installedPath = join(installedDir, file);\n if (!existsSync(installedPath)) {\n missing.push(`${installedDir}/${file}`);\n continue;\n }\n const catalogContent = readFileSync(join(catalogDir, file), \"utf8\");\n const installedContent = readFileSync(installedPath, \"utf8\");\n if (catalogContent !== installedContent) {\n drifted.push(`${installedDir}/${file}`);\n }\n }\n}\n","import * as p from \"@clack/prompts\";\nimport { readConfig } from \"../fs/readConfig.js\";\nimport type { CliArgs } from \"../types.js\";\n\n/**\n * update: shows what's drifted, confirms with the user, then syncs.\n * Unlike `sync` which is non-interactive and always writes, `update`\n * shows the diff first and asks before overwriting.\n */\nexport async function runUpdate(argv: CliArgs): Promise<void> {\n const config = readConfig(argv.config);\n if (!config) {\n p.log.error(\".aikitrc.json not found. Run `aikit` to initialise.\");\n process.exit(1);\n }\n\n // Run diff to show what would change\n const { runDiff } = await import(\"./diff.js\");\n await runDiff({ ...argv, \"dry-run\": true });\n\n if (argv.yes) {\n const { runSync } = await import(\"./sync.js\");\n await runSync(argv);\n return;\n }\n\n const proceed = await p.confirm({\n message: \"Apply these updates?\",\n initialValue: true,\n });\n\n if (!proceed || p.isCancel(proceed)) {\n p.cancel(\"Update cancelled.\");\n return;\n }\n\n const { runSync } = await import(\"./sync.js\");\n await runSync(argv);\n}\n","import { copyFileSync, existsSync, mkdirSync, readdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport * as p from \"@clack/prompts\";\nimport kleur from \"kleur\";\nimport type { CliArgs } from \"../types.js\";\n\nconst CATALOG_ROOT = join(dirname(fileURLToPath(import.meta.url)), \"..\", \"catalog\");\n\nconst ITEM_DIRS: Record<string, { catalog: string; dest: string; ext: string[] }> = {\n skill: { catalog: \"skills/tier1\", dest: \".claude/skills\", ext: [\".md\"] },\n agent: { catalog: \"agents\", dest: \".claude/agents\", ext: [\".md\"] },\n hook: { catalog: \"hooks\", dest: \".claude/hooks\", ext: [\".sh\"] },\n};\n\nexport async function runAdd(argv: CliArgs): Promise<void> {\n const itemArg = argv._[1];\n\n if (!itemArg) {\n p.log.error(\"Usage: aikit add <name> (e.g. aikit add brainstorming)\");\n process.exit(1);\n }\n\n // Search all categories for the item name\n for (const [_type, spec] of Object.entries(ITEM_DIRS)) {\n for (const tier of [\"tier1\", \"tier2\", \"\"]) {\n const catalogDir = join(CATALOG_ROOT, tier ? `skills/${tier}` : spec.catalog);\n if (!existsSync(catalogDir)) continue;\n\n for (const ext of spec.ext) {\n const srcFile = join(catalogDir, `${itemArg}${ext}`);\n if (existsSync(srcFile)) {\n const dest = spec.dest;\n const destFile = join(dest, `${itemArg}${ext}`);\n\n if (existsSync(destFile) && !argv.force) {\n p.log.warn(`${destFile} already exists. Use --force to overwrite.`);\n return;\n }\n\n if (!argv[\"dry-run\"]) {\n mkdirSync(dest, { recursive: true });\n copyFileSync(srcFile, destFile);\n }\n\n process.stdout.write(\n `${argv[\"dry-run\"] ? \"[dry-run] \" : \"\"}${kleur.green(\"✓\")} Added ${destFile}\\n`\n );\n return;\n }\n }\n }\n }\n\n // Not found — suggest similar names\n const allItems = listAllCatalogItems();\n const similar = allItems.filter((n) => n.includes(itemArg) || itemArg.includes(n.split(\"-\")[0] ?? \"\"));\n\n p.log.error(`\"${itemArg}\" not found in catalog.`);\n if (similar.length > 0) {\n process.stdout.write(`Did you mean: ${similar.slice(0, 5).join(\", \")}?\\n`);\n }\n process.stdout.write(`Run ${kleur.cyan(\"aikit list\")} to see all available items.\\n`);\n process.exit(1);\n}\n\nfunction listAllCatalogItems(): string[] {\n const items: string[] = [];\n for (const subdir of [\"skills/tier1\", \"skills/tier2\", \"agents\", \"hooks\"]) {\n const dir = join(CATALOG_ROOT, subdir);\n if (existsSync(dir)) {\n readdirSync(dir)\n .filter((f) => f.endsWith(\".md\") || f.endsWith(\".sh\"))\n .forEach((f) => items.push(f.replace(/\\.(md|sh)$/, \"\")));\n }\n }\n return items;\n}\n","import { existsSync, readdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport kleur from \"kleur\";\nimport type { CliArgs } from \"../types.js\";\n\nconst CATALOG_ROOT = join(dirname(fileURLToPath(import.meta.url)), \"..\", \"catalog\");\n\ninterface CatalogItem {\n name: string;\n tier?: string;\n installed: boolean;\n}\n\nexport async function runList(_argv: CliArgs): Promise<void> {\n const sections: { label: string; items: CatalogItem[] }[] = [\n { label: \"Skills — Tier 1\", items: listCategory(\"skills/tier1\", \".claude/skills\") },\n { label: \"Skills — Tier 2\", items: listCategory(\"skills/tier2\", \".claude/skills\") },\n { label: \"Slash commands\", items: listCategory(\"commands\", \".claude/commands\") },\n { label: \"Agents\", items: listCategory(\"agents\", \".claude/agents\") },\n { label: \"Hooks\", items: listCategory(\"hooks\", \".claude/hooks\", [\".sh\"]) },\n ];\n\n let total = 0;\n let installed = 0;\n\n for (const section of sections) {\n if (section.items.length === 0) continue;\n process.stdout.write(`\\n${kleur.bold(section.label)}\\n`);\n for (const item of section.items) {\n const mark = item.installed ? kleur.green(\"✓\") : kleur.dim(\"·\");\n const name = item.installed ? item.name : kleur.dim(item.name);\n process.stdout.write(` ${mark} ${name}\\n`);\n total++;\n if (item.installed) installed++;\n }\n }\n\n process.stdout.write(`\\n${installed}/${total} catalog items installed.\\n`);\n if (installed < total) {\n process.stdout.write(\n `Run ${kleur.cyan(\"aikit add <name>\")} to install individual items, or ${kleur.cyan(\"aikit sync\")} to install all.\\n`\n );\n }\n}\n\nfunction listCategory(\n catalogSubdir: string,\n installedDir: string,\n extensions = [\".md\"]\n): CatalogItem[] {\n const catalogDir = join(CATALOG_ROOT, catalogSubdir);\n if (!existsSync(catalogDir)) return [];\n\n const installedFiles = new Set(\n existsSync(installedDir)\n ? readdirSync(installedDir).filter((f) => extensions.some((ext) => f.endsWith(ext)))\n : []\n );\n\n return readdirSync(catalogDir)\n .filter((f) => extensions.some((ext) => f.endsWith(ext)))\n .map((f) => ({ name: f.replace(/\\.md$/, \"\"), installed: installedFiles.has(f) }));\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport kleur from \"kleur\";\nimport { readConfig } from \"../fs/readConfig.js\";\nimport type { CliArgs } from \"../types.js\";\n\ninterface Finding {\n level: \"error\" | \"warn\" | \"ok\";\n check: string;\n message: string;\n}\n\nexport async function runDoctor(argv: CliArgs): Promise<void> {\n const findings: Finding[] = [];\n\n // 1. Config exists\n const config = readConfig(argv.config);\n if (!config) {\n findings.push({ level: \"error\", check: \".aikitrc.json\", message: \"Not found — run `aikit` to initialise.\" });\n printFindings(findings);\n return;\n }\n findings.push({ level: \"ok\", check: \".aikitrc.json\", message: `version ${config.version}, scope: ${config.scope}` });\n\n // 2. AGENTS.md exists and has markers\n if (existsSync(\"AGENTS.md\")) {\n const content = readFileSync(\"AGENTS.md\", \"utf8\");\n if (content.includes(\"<!-- BEGIN:haac-aikit -->\")) {\n const lines = content.split(\"\\n\").length;\n if (lines > 200) {\n findings.push({ level: \"warn\", check: \"AGENTS.md\", message: `${lines} lines — exceeds 200-line budget. Consider pruning.` });\n } else {\n findings.push({ level: \"ok\", check: \"AGENTS.md\", message: `${lines} lines, markers present` });\n }\n } else {\n findings.push({ level: \"warn\", check: \"AGENTS.md\", message: \"No haac-aikit markers — run `aikit sync` to inject them.\" });\n }\n } else {\n findings.push({ level: \"error\", check: \"AGENTS.md\", message: \"Missing — run `aikit sync`.\" });\n }\n\n // 3. Per-tool rule shims\n const toolChecks: Record<string, string> = {\n claude: \"CLAUDE.md\",\n copilot: \".github/copilot-instructions.md\",\n cursor: \".cursor/rules/000-base.mdc\",\n windsurf: \".windsurf/rules/project.md\",\n aider: \"CONVENTIONS.md\",\n gemini: \"GEMINI.md\",\n };\n for (const tool of config.tools) {\n const file = toolChecks[tool];\n if (!file) continue;\n if (existsSync(file)) {\n findings.push({ level: \"ok\", check: `${tool} shim`, message: file });\n } else {\n findings.push({ level: \"warn\", check: `${tool} shim`, message: `${file} missing — run \\`aikit sync\\`` });\n }\n }\n\n // 4. Settings.json\n if (config.tools.includes(\"claude\")) {\n if (existsSync(\".claude/settings.json\")) {\n findings.push({ level: \"ok\", check: \"settings.json\", message: \".claude/settings.json present\" });\n } else {\n findings.push({ level: \"warn\", check: \"settings.json\", message: \"Missing — run `aikit sync`\" });\n }\n }\n\n // 5. Skills count\n if (config.scope !== \"minimal\") {\n const skillsDir = \".claude/skills\";\n if (existsSync(skillsDir)) {\n const count = readdirSync(skillsDir).filter((f) => f.endsWith(\".md\")).length;\n findings.push({ level: \"ok\", check: \"skills\", message: `${count} installed` });\n } else {\n findings.push({ level: \"warn\", check: \"skills\", message: \"Not installed — run `aikit sync`\" });\n }\n }\n\n // 6. Skill description length (≤600 chars)\n const skillsDir = \".claude/skills\";\n if (existsSync(skillsDir)) {\n const skills = readdirSync(skillsDir).filter((f) => f.endsWith(\".md\"));\n let descErrors = 0;\n for (const skill of skills) {\n const content = readFileSync(join(skillsDir, skill), \"utf8\");\n const descMatch = content.match(/^description:\\s*(.+)$/m);\n if (descMatch?.[1] && (descMatch[1] as string).length > 600) {\n descErrors++;\n findings.push({\n level: \"warn\",\n check: `skill:${skill}`,\n message: `description is ${(descMatch[1] as string).length} chars — exceeds 600-char limit`,\n });\n }\n }\n if (descErrors === 0) {\n findings.push({ level: \"ok\", check: \"skill descriptions\", message: \"All within 600-char limit\" });\n }\n }\n\n // 7. Hooks registration\n if (config.integrations.hooks) {\n if (existsSync(\".claude/hooks/hooks.json\")) {\n findings.push({ level: \"ok\", check: \"hooks\", message: \"hooks.json present\" });\n } else {\n findings.push({ level: \"warn\", check: \"hooks\", message: \"hooks.json missing — run `aikit sync`\" });\n }\n }\n\n // 8. .gitignore contains .env*\n if (existsSync(\".gitignore\")) {\n const gi = readFileSync(\".gitignore\", \"utf8\");\n if (gi.includes(\".env\")) {\n findings.push({ level: \"ok\", check: \".gitignore\", message: \".env* entries present\" });\n } else {\n findings.push({ level: \"warn\", check: \".gitignore\", message: \".env* not in .gitignore — secrets risk\" });\n }\n } else {\n findings.push({ level: \"warn\", check: \".gitignore\", message: \"Missing — run `aikit sync` to create\" });\n }\n\n printFindings(findings);\n}\n\nfunction printFindings(findings: Finding[]): void {\n const errors = findings.filter((f) => f.level === \"error\");\n const warns = findings.filter((f) => f.level === \"warn\");\n const oks = findings.filter((f) => f.level === \"ok\");\n\n for (const f of findings) {\n const icon =\n f.level === \"error\" ? kleur.red(\"✗\") : f.level === \"warn\" ? kleur.yellow(\"⚠\") : kleur.green(\"✓\");\n process.stdout.write(`${icon} ${kleur.bold(f.check)}: ${f.message}\\n`);\n }\n\n process.stdout.write(\"\\n\");\n if (errors.length > 0) {\n process.stdout.write(kleur.red(`${errors.length} error(s), ${warns.length} warning(s)\\n`));\n process.exit(1);\n } else if (warns.length > 0) {\n process.stdout.write(kleur.yellow(`0 errors, ${warns.length} warning(s) — run \\`aikit sync\\` to resolve\\n`));\n } else {\n process.stdout.write(kleur.green(`All ${oks.length} checks passed.\\n`));\n }\n}\n","function toArr(any) {\n\treturn any == null ? [] : Array.isArray(any) ? any : [any];\n}\n\nfunction toVal(out, key, val, opts) {\n\tvar x, old=out[key], nxt=(\n\t\t!!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))\n\t\t: typeof val === 'boolean' ? val\n\t\t: !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))\n\t\t: (x = +val,x * 0 === 0) ? x : val\n\t);\n\tout[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);\n}\n\nexport default function (args, opts) {\n\targs = args || [];\n\topts = opts || {};\n\n\tvar k, arr, arg, name, val, out={ _:[] };\n\tvar i=0, j=0, idx=0, len=args.length;\n\n\tconst alibi = opts.alias !== void 0;\n\tconst strict = opts.unknown !== void 0;\n\tconst defaults = opts.default !== void 0;\n\n\topts.alias = opts.alias || {};\n\topts.string = toArr(opts.string);\n\topts.boolean = toArr(opts.boolean);\n\n\tif (alibi) {\n\t\tfor (k in opts.alias) {\n\t\t\tarr = opts.alias[k] = toArr(opts.alias[k]);\n\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t(opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i=opts.boolean.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.boolean[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);\n\t}\n\n\tfor (i=opts.string.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.string[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.string.push(arr[j]);\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tname = typeof opts.default[k];\n\t\t\tarr = opts.alias[k] = opts.alias[k] || [];\n\t\t\tif (opts[name] !== void 0) {\n\t\t\t\topts[name].push(k);\n\t\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t\topts[name].push(arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst keys = strict ? Object.keys(opts.alias) : [];\n\n\tfor (i=0; i < len; i++) {\n\t\targ = args[i];\n\n\t\tif (arg === '--') {\n\t\t\tout._ = out._.concat(args.slice(++i));\n\t\t\tbreak;\n\t\t}\n\n\t\tfor (j=0; j < arg.length; j++) {\n\t\t\tif (arg.charCodeAt(j) !== 45) break; // \"-\"\n\t\t}\n\n\t\tif (j === 0) {\n\t\t\tout._.push(arg);\n\t\t} else if (arg.substring(j, j + 3) === 'no-') {\n\t\t\tname = arg.substring(j + 3);\n\t\t\tif (strict && !~keys.indexOf(name)) {\n\t\t\t\treturn opts.unknown(arg);\n\t\t\t}\n\t\t\tout[name] = false;\n\t\t} else {\n\t\t\tfor (idx=j+1; idx < arg.length; idx++) {\n\t\t\t\tif (arg.charCodeAt(idx) === 61) break; // \"=\"\n\t\t\t}\n\n\t\t\tname = arg.substring(j, idx);\n\t\t\tval = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);\n\t\t\tarr = (j === 2 ? [name] : name);\n\n\t\t\tfor (idx=0; idx < arr.length; idx++) {\n\t\t\t\tname = arr[idx];\n\t\t\t\tif (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);\n\t\t\t\ttoVal(out, name, (idx + 1 < arr.length) || val, opts);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tif (out[k] === void 0) {\n\t\t\t\tout[k] = opts.default[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alibi) {\n\t\tfor (k in out) {\n\t\t\tarr = opts.alias[k] || [];\n\t\t\twhile (arr.length > 0) {\n\t\t\t\tout[arr.shift()] = out[k];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n","const CI_ENV_VARS = [\n \"CI\",\n \"CONTINUOUS_INTEGRATION\",\n \"BUILD_NUMBER\",\n \"GITHUB_ACTIONS\",\n \"GITLAB_CI\",\n \"CIRCLECI\",\n \"TRAVIS\",\n \"JENKINS_URL\",\n \"TEAMCITY_VERSION\",\n \"BUILDKITE\",\n];\n\nexport function isCI(): boolean {\n return CI_ENV_VARS.some((v) => process.env[v] !== undefined);\n}\n\nexport function isTTY(): boolean {\n return Boolean(process.stdout.isTTY);\n}\n\nexport function isInteractive(): boolean {\n return isTTY() && !isCI();\n}\n","#!/usr/bin/env node\nimport mri from \"mri\";\nimport { isInteractive } from \"./detect/isCI.js\";\nimport type { CliArgs } from \"./types.js\";\n\nconst VERSION = \"0.1.0\";\n\nconst HELP = `\nhaac-aikit — the batteries-included AI-agentic-coding kit\n\nUSAGE\n npx haac-aikit [command] [flags]\n aikit [command] [flags] (if installed globally)\n\nCOMMANDS\n (default) Interactive wizard — drop a complete AI setup into this repo\n sync Regenerate per-tool files from .aikitrc.json (idempotent)\n update Pull latest templates; show diff; prompt before writing\n diff Show drift between current state and a fresh generation\n add <item> Add a single skill, command, agent, or hook\n list Show installed items + available catalog\n doctor Sanity-check: schema, triggers, broken links\n\nFLAGS\n --yes, -y Accept all defaults\n --dry-run Print what would be written; don't write\n --force Overwrite without prompting\n --skip-git-check Allow dirty working tree\n --no-color Disable ANSI colours\n --config=<path> Use a specific .aikitrc.json location\n --tools=<list> Comma-separated tool list (claude,cursor,copilot,...)\n --preset=<scope> minimal | standard | everything\n --help, -h Show this help\n --version, -v Show version\n`;\n\nasync function main(): Promise<void> {\n const argv = mri<CliArgs>(process.argv.slice(2), {\n boolean: [\"yes\", \"dry-run\", \"force\", \"skip-git-check\", \"no-color\", \"help\", \"version\"],\n string: [\"config\", \"tools\", \"preset\"],\n alias: { y: \"yes\", h: \"help\", v: \"version\" },\n default: {\n yes: false,\n \"dry-run\": false,\n force: false,\n \"skip-git-check\": false,\n \"no-color\": false,\n help: false,\n version: false,\n },\n });\n\n if (argv.version) {\n process.stdout.write(`haac-aikit v${VERSION}\\n`);\n return;\n }\n\n if (argv.help) {\n process.stdout.write(HELP + \"\\n\");\n return;\n }\n\n const [command = \"init\"] = argv._;\n\n // Headless flag coalescing — --yes with no explicit command means init\n const headless = argv.yes && !isInteractive();\n\n switch (command) {\n case \"init\":\n case \"\": {\n const { runInit } = await import(\"./commands/init.js\");\n await runInit(argv, headless);\n break;\n }\n case \"sync\": {\n const { runSync } = await import(\"./commands/sync.js\");\n await runSync(argv);\n break;\n }\n case \"update\": {\n const { runUpdate } = await import(\"./commands/update.js\");\n await runUpdate(argv);\n break;\n }\n case \"diff\": {\n const { runDiff } = await import(\"./commands/diff.js\");\n await runDiff(argv);\n break;\n }\n case \"add\": {\n const { runAdd } = await import(\"./commands/add.js\");\n await runAdd(argv);\n break;\n }\n case \"list\": {\n const { runList } = await import(\"./commands/list.js\");\n await runList(argv);\n break;\n }\n case \"doctor\": {\n const { runDoctor } = await import(\"./commands/doctor.js\");\n await runDoctor(argv);\n break;\n }\n default:\n process.stderr.write(`Unknown command: ${command}\\nRun --help for usage.\\n`);\n process.exit(1);\n }\n}\n\nmain().catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n process.stderr.write(`\\nError: ${message}\\n`);\n process.exit(1);\n});\n"],"mappings":"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KAAV,QACUA,KAAV,QACUA,KAAV,QACA,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACUA,KAAV,QACA,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACA,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACUA,KAAV,QACUA,KAAV,QACUA,KAAV,QACA,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACUA,KAAV,QACUA,KAAV,QACUA,KAAV,QACUA,KAAV,QACA,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACUA,KAAV,QACA,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACA,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACUA,KAAV,QACUA,KAAV,QACA,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACUA,KAAV,QACUA,KAAV,QACUA,KAAV,QACUA,KAAV,QACA,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACA,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACA,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACA,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACUA,KAAV,QACUA,KAAV,QACUA,KAAV,QACA,QAAUA,KAAa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","names":["x","y","p","f","ansiRegex","onlyFirst","pattern","stripAnsi","string","regex","stringWidth","options","emojiRegex","ambiguousCharacterWidth","width","character","codePoint","eastAsianWidth","assembleStyles","codes","groupName","group","styles","styleName","style","wrapAnsi16","wrapAnsi256","wrapAnsi16m","ANSI_BACKGROUND_OFFSET","red","green","blue","hex","matches","colorString","integer","code","remainder","value","result","wrapAnsi","columns","line","exec","isActionKey","key","action","settings","diffLines","a","b","aLines","bLines","diff","i","isCancel","CANCEL_SYMBOL","setRawMode","input","foregroundColorNames","backgroundColorNames","ansiStyles","ESCAPES","END_CODE","ANSI_ESCAPE_BELL","ANSI_CSI","ANSI_OSC","ANSI_SGR_TERMINATOR","ANSI_ESCAPE_LINK","wrapAnsiCode","wrapAnsiHyperlink","wordLengths","wrapWord","stringVisibleTrimSpacesRight","actions","isWindows","v","s","Prompt","ConfirmPrompt","o","l","t","SelectPrompt","TextPrompt","eaw","module","x","y","stringToArray","characters","len","text","start","end","eawLen","chars","char","charLen","offset","uri","rows","word","isInsideEscape","isInsideLinkEscape","visible","index","characterLength","words","last","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","pre","groups","e","trackValue","__publicField","stdin","output","stdout","render","signal","opts","event","params","cb","data","cbs","cleanup","subscriber","resolve","reject","sink","WriteStream","chunk","encoding","done","readline","cursor","problem","lines","wrap","frame","diffLine","erase","newLines","confirm","allSelected","selected","u","s1","s2","s3","color","isUnicodeSupported","process","unicode","s","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_PASSWORD_MASK","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","limitOptions","text","confirm","select","multiselect","note","cancel","intro","outro","log","group","c","fallback","state","color","params","cursor","options","style","paramMaxItems","outputMaxItems","maxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","option","i","arr","isTopLimit","isBottomLimit","opts","TextPrompt","title","placeholder","value","active","inactive","ConfirmPrompt","opt","label","SelectPrompt","item","MultiSelectPrompt","selected","styleOption","footer","ln","message","lines","titleLen","strip","len","sum","line","msg","parts","firstLine","prompts","results","promptNames","name","prompt","result","e","isCancel","$","isTTY","init_dist","replaced","existsSync","readFileSync","writeFileSync","existsSync","readFileSync","writeFileSync","e","l","readFileSync","dirname","existsSync","mkdirSync","readFileSync","join","dirname","fileURLToPath","v","r","f","init_dist","runSync","init_dist","existsSync","readFileSync","readdirSync","dirname","join","fileURLToPath","m","d","CATALOG_ROOT","f","v","runDiff","runSync","init_dist","copyFileSync","existsSync","mkdirSync","readdirSync","dirname","join","fileURLToPath","v","CATALOG_ROOT","f","init_dist","existsSync","readdirSync","dirname","join","fileURLToPath","CATALOG_ROOT","f","existsSync","readFileSync","readdirSync","join","skillsDir","f","x","k","j","v","runInit","runSync","runUpdate","runDiff","runAdd","runList","runDoctor"]}
|