haac-aikit 0.1.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +169 -69
  2. package/catalog/agents/tier1/architect.md +86 -0
  3. package/catalog/agents/tier1/debugger.md +64 -0
  4. package/catalog/agents/tier1/pr-describer.md +57 -0
  5. package/catalog/agents/{researcher.md → tier1/researcher.md} +1 -1
  6. package/catalog/agents/tier2/changelog-curator.md +60 -0
  7. package/catalog/agents/tier2/dependency-upgrader.md +67 -0
  8. package/catalog/agents/tier2/evals-author.md +65 -0
  9. package/catalog/agents/tier2/flake-hunter.md +57 -0
  10. package/catalog/agents/tier2/prompt-engineer.md +58 -0
  11. package/catalog/agents/tier2/simplifier.md +57 -0
  12. package/catalog/ci/aikit-rules.yml +55 -0
  13. package/catalog/docs/claude-md-reference.md +316 -0
  14. package/catalog/hooks/block-dangerous-bash.sh +0 -0
  15. package/catalog/hooks/block-force-push-main.sh +0 -0
  16. package/catalog/hooks/block-secrets-in-commits.sh +0 -0
  17. package/catalog/hooks/check-pattern-violations.sh +137 -0
  18. package/catalog/hooks/compaction-preservation.sh +0 -0
  19. package/catalog/hooks/file-guard.sh +0 -0
  20. package/catalog/hooks/format-on-save.sh +0 -0
  21. package/catalog/hooks/hooks.json +38 -0
  22. package/catalog/hooks/judge-rule-compliance.sh +197 -0
  23. package/catalog/hooks/log-rule-event.sh +80 -0
  24. package/catalog/hooks/session-start-prime.sh +0 -0
  25. package/catalog/husky/commit-msg +0 -0
  26. package/catalog/husky/pre-commit +0 -0
  27. package/catalog/husky/pre-push +0 -0
  28. package/catalog/rules/AGENTS.md.tmpl +28 -7
  29. package/catalog/rules/aikit-rules.json +37 -0
  30. package/catalog/rules/claude-rules/example.md +38 -0
  31. package/catalog/skills/tier1/software-architect.md +42 -0
  32. package/dist/cli.mjs +1516 -173
  33. package/dist/cli.mjs.map +1 -1
  34. package/package.json +4 -2
  35. /package/catalog/agents/{devops.md → tier1/devops.md} +0 -0
  36. /package/catalog/agents/{implementer.md → tier1/implementer.md} +0 -0
  37. /package/catalog/agents/{orchestrator.md → tier1/orchestrator.md} +0 -0
  38. /package/catalog/agents/{planner.md → tier1/planner.md} +0 -0
  39. /package/catalog/agents/{reviewer.md → tier1/reviewer.md} +0 -0
  40. /package/catalog/agents/{security-auditor.md → tier1/security-auditor.md} +0 -0
  41. /package/catalog/agents/{tester.md → tier1/tester.md} +0 -0
  42. /package/catalog/agents/{backend.md → tier2/backend.md} +0 -0
  43. /package/catalog/agents/{frontend.md → tier2/frontend.md} +0 -0
  44. /package/catalog/agents/{mobile.md → tier2/mobile.md} +0 -0
package/dist/cli.mjs.map CHANGED
@@ -1 +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"]}
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/catalog/shape-agents.ts","../src/render/dialects/parser.ts","../src/render/dialects/cursor.ts","../src/render/dialects/index.ts","../src/fs/diff.ts","../src/fs/conflict.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/render/rule-ids.ts","../src/commands/doctor.ts","../src/commands/report.ts","../src/commands/learn.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\nexport const SPECIALTY_TIER2_AGENTS = [\n { value: \"flake-hunter\", label: \"flake-hunter — diagnose intermittent test failures\" },\n { value: \"simplifier\", label: \"simplifier — DRY, dead code, complexity reduction\" },\n { value: \"prompt-engineer\", label: \"prompt-engineer — author/optimize prompts\" },\n { value: \"evals-author\", label: \"evals-author — eval datasets & benchmarks\" },\n { value: \"changelog-curator\", label: \"changelog-curator — generate CHANGELOG from commits\" },\n { value: \"dependency-upgrader\", label: \"dependency-upgrader — npm major bumps + codemods\" },\n] as const;\n\nexport function defaultSpecialtyAgents(scope: Scope): string[] {\n if (scope === \"everything\") return SPECIALTY_TIER2_AGENTS.map((a) => a.value);\n return [];\n}\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 specialtyAgents: ({ results }) => {\n if (results.scope === \"minimal\") return Promise.resolve(undefined);\n return p.multiselect<string>({\n message: \"Include specialty agents? (debugger and pr-describer always installed)\",\n options: SPECIALTY_TIER2_AGENTS.map((a) => ({ value: a.value, label: a.label })),\n required: false,\n initialValues: defaultSpecialtyAgents(results.scope ?? \"standard\"),\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 specialtyAgents: (answers.specialtyAgents as string[]) ?? [],\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 (existing === replaced) {\n return { path: filePath, action: \"skipped\" };\n }\n if (!dryRun) writeFileSync(filePath, replaced, \"utf8\");\n return { path: filePath, action: \"updated\" };\n }\n\n // Non-marker path: don't blindly report conflict. Compare content first.\n const existing = readFileSync(filePath, \"utf8\");\n if (existing === content) {\n return { path: filePath, action: \"skipped\" };\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 \".aikit/\",\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 { existsSync, readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, join } from \"node:path\";\nimport { interpolate } from \"../render/template.js\";\n\n// Walk up from this file looking for a sibling `catalog/` directory. Resolves\n// correctly in both states:\n// bundled: dist/cli.mjs → dist/../catalog = ./catalog ✓\n// dev: src/catalog/index.ts → walk up → repo-root/catalog ✓\nfunction findCatalogRoot(): string {\n let dir = dirname(fileURLToPath(import.meta.url));\n for (let i = 0; i < 6; i++) {\n const candidate = join(dir, \"catalog\");\n if (existsSync(join(candidate, \"rules\", \"AGENTS.md.tmpl\"))) {\n return candidate;\n }\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n throw new Error(\"haac-aikit: catalog/ directory not found relative to module location\");\n}\n\nexport const CATALOG_ROOT = findCatalogRoot();\n\nfunction read(rel: string): string {\n return readFileSync(join(CATALOG_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 claudeMdReference: () => read(\"docs/claude-md-reference.md\"),\n aikitRulesJson: () => read(\"rules/aikit-rules.json\"),\n };\n}\n","import type { ProjectShape } from \"../types.js\";\n\nexport const SHAPE_AGENTS: Record<ProjectShape, string[]> = {\n web: [\"frontend\"],\n fullstack: [\"frontend\", \"backend\"],\n backend: [\"backend\"],\n mobile: [\"mobile\"],\n library: [\"backend\"],\n};\n\nexport function resolveShapeAgents(shapes: ProjectShape[]): string[] {\n const set = new Set<string>();\n for (const shape of shapes) {\n for (const agent of SHAPE_AGENTS[shape] ?? []) {\n set.add(agent);\n }\n }\n return Array.from(set);\n}\n","import type { ParsedRule, ParsedRuleSet, RuleMeta } from \"./types.js\";\n\n// Match a rule-ID HTML comment with optional metadata key=value pairs.\n// Examples that match:\n// <!-- id: code-style.no-any -->\n// <!-- id: code-style.no-any emphasis=high -->\n// <!-- id: code-style.no-any emphasis=high paths=src/**/*.ts,test/** -->\nconst ID_LINE_RX =\n /<!--\\s*id:\\s*(?<id>[a-zA-Z][a-zA-Z0-9_-]*\\.[a-zA-Z0-9._-]+)(?<meta>(?:\\s+[a-zA-Z][a-zA-Z0-9_-]*=[^>\\s]+)*)\\s*-->/;\n\n// Match the leading bullet glyph + the inline ID comment so we can isolate\n// the human-readable rule text on the same line.\nconst RULE_PREFIX_RX = /^(\\s*[-*]\\s*)?<!--\\s*id:[^>]+-->\\s*/;\n\nconst SECTION_RX = /^##\\s+(.+)$/;\n\nexport function parseRuleSet(content: string, projectName: string, description: string): ParsedRuleSet {\n const rules: ParsedRule[] = [];\n const rawSections = new Map<string, string>();\n\n let currentSection = \"\";\n let sectionBuffer: string[] = [];\n\n const flushSection = (): void => {\n if (currentSection && sectionBuffer.length > 0) {\n rawSections.set(currentSection, sectionBuffer.join(\"\\n\").trim());\n }\n };\n\n for (const line of content.split(\"\\n\")) {\n const sectionMatch = line.match(SECTION_RX);\n if (sectionMatch?.[1]) {\n flushSection();\n currentSection = sectionMatch[1].trim();\n sectionBuffer = [];\n continue;\n }\n sectionBuffer.push(line);\n\n const idMatch = line.match(ID_LINE_RX);\n if (idMatch?.groups?.id) {\n const text = line.replace(RULE_PREFIX_RX, \"\").trim();\n rules.push({\n id: idMatch.groups.id,\n text: text || idMatch.groups.id,\n meta: parseMeta(idMatch.groups.meta ?? \"\"),\n section: currentSection,\n });\n }\n }\n flushSection();\n\n return { projectName, description, rules, rawSections };\n}\n\nfunction parseMeta(metaString: string): RuleMeta {\n const meta: RuleMeta = {};\n for (const part of metaString.trim().split(/\\s+/).filter(Boolean)) {\n const eq = part.indexOf(\"=\");\n if (eq < 1) continue;\n const key = part.slice(0, eq);\n const value = part.slice(eq + 1);\n if (key === \"emphasis\" && (value === \"high\" || value === \"normal\" || value === \"low\")) {\n meta.emphasis = value;\n } else if (key === \"paths\") {\n meta.paths = value.split(\",\").map((p) => p.trim()).filter(Boolean);\n }\n }\n return meta;\n}\n","import type { ParsedRuleSet } from \"./types.js\";\n\n// Translate a parsed AGENTS.md rule set into Cursor's MDC format.\n// Cursor reads `.cursor/rules/*.mdc` files; frontmatter `globs:` enables\n// path-scoped loading (Cursor's equivalent of Claude's `paths:`).\n//\n// MVP: emit a single base file with `alwaysApply: true`. Path-scoped per-rule\n// emission (one .mdc per glob group) is a Phase 2.1 follow-up.\nexport function translateForCursor(ruleSet: ParsedRuleSet): string {\n const lines: string[] = [];\n lines.push(\"---\");\n lines.push(`description: Project rules for ${ruleSet.projectName} — generated from AGENTS.md by haac-aikit`);\n lines.push(\"alwaysApply: true\");\n lines.push(\"---\");\n lines.push(\"\");\n lines.push(\"<!-- BEGIN:haac-aikit -->\");\n lines.push(`# ${ruleSet.projectName}`);\n lines.push(\"\");\n if (ruleSet.description) {\n lines.push(ruleSet.description);\n lines.push(\"\");\n }\n lines.push(`See [AGENTS.md](../../AGENTS.md) for the authoritative rule set. Cursor-specific dialect:`);\n lines.push(\"\");\n\n if (ruleSet.rules.length === 0) {\n lines.push(\"_No annotated rules found in AGENTS.md. Add `<!-- id: x.y -->` comments to opt rules into Cursor translation._\");\n } else {\n // Group rules by section to keep the structure familiar.\n const bySection = new Map<string, typeof ruleSet.rules>();\n for (const rule of ruleSet.rules) {\n const section = rule.section || \"Rules\";\n const existing = bySection.get(section) ?? [];\n existing.push(rule);\n bySection.set(section, existing);\n }\n\n for (const [section, rules] of bySection) {\n lines.push(`## ${section}`);\n lines.push(\"\");\n for (const rule of rules) {\n const prefix = rule.meta.emphasis === \"high\" ? \"**\" : \"\";\n const suffix = rule.meta.emphasis === \"high\" ? \"**\" : \"\";\n const pathsHint = rule.meta.paths && rule.meta.paths.length > 0\n ? ` _(applies to: \\`${rule.meta.paths.join(\"`, `\")}\\`)_`\n : \"\";\n lines.push(`- ${prefix}${rule.text}${suffix}${pathsHint} <!-- id: ${rule.id} -->`);\n }\n lines.push(\"\");\n }\n }\n\n lines.push(\"<!-- END:haac-aikit -->\");\n return lines.join(\"\\n\");\n}\n","export { parseRuleSet } from \"./parser.js\";\nexport { translateForCursor } from \"./cursor.js\";\nexport type { ParsedRule, ParsedRuleSet, RuleMeta } from \"./types.js\";\n","import { createPatch } from \"diff\";\nimport kleur from \"kleur\";\n\n/**\n * Render a unified diff between two strings as colored, human-readable text.\n * Empty string when inputs are identical. 3 lines of context.\n */\nexport function formatUnifiedDiff(local: string, incoming: string): string {\n if (local === incoming) return \"\";\n\n // createPatch returns a unified diff with a header. Strip the header,\n // keep only hunk content. Use 3 lines of context.\n const raw = createPatch(\"local\", local, incoming, \"\", \"\", { context: 3 });\n\n const lines: string[] = [];\n let inHunk = false;\n for (const line of raw.split(\"\\n\")) {\n if (line.startsWith(\"@@\")) {\n inHunk = true;\n continue;\n }\n if (!inHunk) continue;\n if (line.startsWith(\"+\") && !line.startsWith(\"+++\")) {\n lines.push(kleur.green(`+ ${line.slice(1)}`));\n } else if (line.startsWith(\"-\") && !line.startsWith(\"---\")) {\n lines.push(kleur.red(`- ${line.slice(1)}`));\n } else if (line.startsWith(\" \")) {\n lines.push(kleur.dim(` ${line.slice(1)}`));\n }\n }\n return lines.join(\"\\n\");\n}\n","import * as p from \"@clack/prompts\";\nimport { basename } from \"node:path\";\nimport type { ConflictResolution, Tier3Slot } from \"../types.js\";\nimport { formatUnifiedDiff } from \"./diff.js\";\n\n/**\n * Map a destination file path to its corresponding tier3 slot in AikitConfig.\n * Returns null for paths without a tier3 mechanism (commands, hooks, others).\n */\nexport function inferTier3Slot(filePath: string): Tier3Slot {\n if ((filePath.includes(\"/.claude/agents/\") || filePath.startsWith(\".claude/agents/\")) && filePath.endsWith(\".md\")) return \"agents\";\n if ((filePath.includes(\"/.claude/skills/\") || filePath.startsWith(\".claude/skills/\")) && filePath.endsWith(\".md\")) return \"skills\";\n return null;\n}\n\nexport interface ConflictPrompt {\n /** Ask the user how to resolve a single conflict. */\n ask(filePath: string, local: string, incoming: string): Promise<ConflictResolution>;\n}\n\n/**\n * Default interactive prompt using @clack/prompts. Tests inject their own\n * implementation so we never block on stdin in CI.\n */\nexport const interactivePrompt: ConflictPrompt = {\n async ask(filePath, local, incoming) {\n while (true) {\n const choice = await p.select<ConflictResolution | \"diff\">({\n message: `Modified locally: ${filePath}`,\n options: [\n { value: \"replace\", label: \"Replace with catalog version (recommended)\" },\n { value: \"keep\", label: \"Keep local version (mark as tier3 to silence future prompts)\" },\n { value: \"diff\", label: \"Show diff first\" },\n { value: \"replace_all\", label: \"Replace all remaining conflicts\" },\n { value: \"skip_all\", label: \"Skip all remaining conflicts\" },\n ],\n initialValue: \"replace\",\n });\n\n if (p.isCancel(choice)) {\n p.cancel(\"Sync cancelled\");\n process.exit(0);\n }\n\n if (choice === \"diff\") {\n const out = formatUnifiedDiff(local, incoming);\n p.note(out, basename(filePath));\n continue; // re-prompt\n }\n\n return choice;\n }\n },\n};\n","import * as p from \"@clack/prompts\";\nimport { readConfig, writeConfig } from \"../fs/readConfig.js\";\nimport { safeWrite } from \"../fs/safeWrite.js\";\nimport { ensureGitignoreEntries } from \"../fs/gitignore.js\";\nimport { CATALOG_ROOT, loadCatalog } from \"../catalog/index.js\";\nimport { resolveShapeAgents } from \"../catalog/shape-agents.js\";\nimport { existsSync, mkdirSync, copyFileSync, readdirSync, readFileSync, chmodSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { parseRuleSet, translateForCursor } from \"../render/dialects/index.js\";\nimport { interpolate } from \"../render/template.js\";\nimport { extractMarkerRegion } from \"../render/markers.js\";\nimport { interactivePrompt, inferTier3Slot, type ConflictPrompt } from \"../fs/conflict.js\";\nimport type { CliArgs, WriteResult, WriteOpts, AikitConfig, ConflictResolution } from \"../types.js\";\n\nexport async function runSync(argv: CliArgs & { _conflictPrompt?: ConflictPrompt }): 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 // The rendered template already contains BEGIN/END markers around its\n // managed region. Pass only that inner region to safeWrite so re-syncs don't\n // nest markers (regression: pre-0.5 produced 2 BEGINs / 5 ENDs after 3 syncs).\n const agentsMdManaged = extractMarkerRegion(agentsMdContent, \"AGENTS.md\") ?? agentsMdContent;\n results.push(safeWrite(\"AGENTS.md\", agentsMdContent, { ...opts, useMarkers: true, managedContent: agentsMdManaged }));\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 if (config.scope !== \"minimal\") {\n results.push(safeWrite(\"docs/claude-md-reference.md\", catalog.claudeMdReference(), { ...opts, useMarkers: false }));\n results.push(safeWrite(\".claude/aikit-rules.json\", catalog.aikitRulesJson(), { ...opts, useMarkers: false }));\n results.push(...syncDir(\"rules/claude-rules\", \".claude/rules\", opts, [\".md\"]));\n }\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 // Phase 2: dialect-aware translation. Parse the canonical AGENTS.md and\n // emit Cursor's MDC format with rules extracted, instead of a generic shim.\n const ruleSet = parseRuleSet(agentsMdContent, config.projectName, config.projectDescription ?? \"\");\n const cursorContent = translateForCursor(ruleSet);\n results.push(safeWrite(\".cursor/rules/000-base.mdc\", cursorContent, { ...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\", opts));\n results.push(...syncSkills(\"tier2\", opts));\n }\n\n // Hooks\n if (config.integrations.hooks) {\n results.push(...syncHooks(opts));\n }\n\n // Agents\n if (config.integrations.subagents) {\n results.push(...syncAgents(config, opts));\n }\n\n // Commands\n if (config.integrations.commands) {\n results.push(...syncCommands(opts));\n }\n\n // CI\n if (config.integrations.ci) {\n results.push(...syncCI(opts));\n }\n\n // Everything tier\n if (config.integrations.devcontainer) {\n results.push(...syncDir(\"devcontainer\", \".devcontainer\", opts, [\".json\"]));\n }\n if (config.integrations.otel) {\n results.push(safeWrite(\".env.example\", readCatalogFile(\"settings/env.example\"), { dryRun, useMarkers: false }));\n }\n if (config.integrations.husky) {\n results.push(...syncDir(\"husky\", \".husky\", opts, []));\n }\n if (config.integrations.plugin) {\n const tmpl = readCatalogFile(\"plugin/plugin.json\");\n const content = interpolate(tmpl, { projectName: config.projectName });\n results.push(safeWrite(\".claude/plugin/plugin.json\", content, { ...opts, useMarkers: false }));\n }\n\n ensureGitignoreEntries(dryRun);\n\n const conflicts = results.filter((r) => r.action === \"conflict\");\n\n // Interactive conflict resolution: only when stdin is a TTY and neither\n // --yes nor --force was passed. Headless / CI paths skip this block.\n if (conflicts.length > 0 && !force) {\n // An injected _conflictPrompt is the test-seam signal: treat it as interactive\n // even without a real TTY so integration tests can exercise the loop.\n const isInteractive = (Boolean(process.stdin.isTTY) || argv._conflictPrompt != null) && !argv.yes;\n if (isInteractive) {\n const prompt = argv._conflictPrompt ?? interactivePrompt;\n let bulkAction: \"replace_all\" | \"skip_all\" | null = null;\n let configMutated = false;\n let workingConfig: AikitConfig = config;\n\n p.log.info(`Found ${conflicts.length} file(s) modified locally. Reviewing each…`);\n\n for (const conflict of conflicts) {\n const incomingSrc = conflict.src;\n if (!incomingSrc) continue;\n\n // Bulk skip_all: mark skipped and move on — no tier3 update.\n if (bulkAction === \"skip_all\") {\n conflict.action = \"skipped\";\n continue;\n }\n\n let resolution: ConflictResolution;\n if (bulkAction === \"replace_all\") {\n resolution = \"replace\";\n } else {\n const local = readFileSync(conflict.path, \"utf8\");\n const incoming = readFileSync(incomingSrc, \"utf8\");\n resolution = await prompt.ask(conflict.path, local, incoming);\n if (resolution === \"replace_all\") bulkAction = \"replace_all\";\n if (resolution === \"skip_all\") {\n // Treat the current file as a plain skip, then continue loop\n // with bulkAction = \"skip_all\" (no tier3 update for bulk skips).\n bulkAction = \"skip_all\";\n conflict.action = \"skipped\";\n continue;\n }\n }\n\n if (resolution === \"replace\" || resolution === \"replace_all\") {\n if (!opts.dryRun) copyFileSync(incomingSrc, conflict.path);\n conflict.action = \"updated\";\n } else if (resolution === \"keep\") {\n const slot = inferTier3Slot(conflict.path);\n if (slot) {\n const name = basename(conflict.path).replace(/\\.md$/, \"\");\n const current = workingConfig[slot] ?? { tier1: \"all\", tier2: \"all\", tier3: [] };\n if (!current.tier3.includes(name)) {\n workingConfig = {\n ...workingConfig,\n [slot]: { ...current, tier3: [...current.tier3, name] },\n };\n configMutated = true;\n }\n } else {\n p.log.warn(\n `Kept ${conflict.path} — no tier3 protection available; this file will be flagged again on next sync.`\n );\n }\n conflict.action = \"skipped\";\n }\n }\n\n if (configMutated && !opts.dryRun) {\n writeConfig(workingConfig);\n }\n }\n // Non-interactive (--yes, non-TTY): fall through to the existing\n // \"X conflict(s) skipped\" warning below.\n }\n\n const created = results.filter((r) => r.action === \"created\").length;\n const updated = results.filter((r) => r.action === \"updated\").length;\n const skipped = results.filter((r) => r.action === \"skipped\").length;\n const remainingConflicts = results.filter((r) => r.action === \"conflict\");\n\n // Hide skipped (already up-to-date) entries from the per-file list to keep\n // the output focused on what actually changed. Show them only on dry-run\n // and only if there's genuine drift to display.\n const visible = dryRun\n ? results\n : results.filter((r) => r.action !== \"skipped\");\n\n if (dryRun) {\n p.note(visible.map((r) => `${r.action.padEnd(9)} ${r.path}`).join(\"\\n\"), \"Dry run\");\n return;\n }\n\n if (visible.length > 0) {\n p.note(\n visible.map((r) => `${r.action.padEnd(9)} ${r.path}`).join(\"\\n\"),\n `${created} created, ${updated} updated, ${skipped} unchanged`\n );\n } else {\n p.log.info(`Already up to date — ${skipped} files match the catalog.`);\n }\n\n if (remainingConflicts.length > 0) {\n p.log.warn(`${remainingConflicts.length} conflict(s) skipped (use --force to overwrite)`);\n }\n\n p.outro(\"Sync complete.\");\n}\n\n// Resolve the right action for a copy-style sync. Captures pre-write state\n// and compares content so we report `created` / `updated` / `skipped` / `conflict`\n// honestly instead of always saying `updated`.\nexport function copyAction(\n srcPath: string,\n destPath: string,\n opts: WriteOpts,\n): WriteResult {\n const existed = existsSync(destPath);\n const incoming = readFileSync(srcPath, \"utf8\");\n if (existed) {\n const current = readFileSync(destPath, \"utf8\");\n if (current === incoming) {\n return { path: destPath, action: \"skipped\", src: srcPath };\n }\n if (!opts.force) {\n return { path: destPath, action: \"conflict\", src: srcPath };\n }\n }\n if (!opts.dryRun) {\n mkdirSync(dirname(destPath), { recursive: true });\n copyFileSync(srcPath, destPath);\n if (destPath.endsWith(\".sh\") || destPath.includes(\"/.husky/\") || destPath.includes(\"/.claude/hooks/\")) {\n chmodSync(destPath, 0o755);\n }\n }\n return { path: destPath, action: existed ? \"updated\" : \"created\", src: srcPath };\n}\n\nfunction syncSkills(tier: \"tier1\" | \"tier2\", opts: WriteOpts): 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 (!opts.dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n results.push(copyAction(join(srcDir, file), join(destDir, file), opts));\n }\n\n return results;\n}\n\nfunction syncHooks(opts: WriteOpts): 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 (!opts.dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n results.push(copyAction(join(srcDir, file), join(destDir, file), opts));\n }\n\n return results;\n}\n\nfunction syncAgents(config: AikitConfig, opts: WriteOpts): WriteResult[] {\n const results: WriteResult[] = [];\n results.push(...syncAgentTier(\"tier1\", config.agents?.tier1 ?? \"all\", opts));\n results.push(...syncAgentTier(\"tier2\", resolveTier2Set(config), opts));\n return results;\n}\n\nfunction resolveTier2Set(config: AikitConfig): \"all\" | string[] {\n if (config.agents?.tier2 === \"all\") return \"all\";\n\n const set = new Set<string>(\n Array.isArray(config.agents?.tier2) ? config.agents.tier2 : []\n );\n for (const agent of resolveShapeAgents(config.shape)) {\n set.add(agent);\n }\n return Array.from(set);\n}\n\nfunction syncAgentTier(\n tier: \"tier1\" | \"tier2\",\n selection: \"all\" | string[],\n opts: WriteOpts,\n): WriteResult[] {\n const srcDir = join(CATALOG_ROOT, \"agents\", tier);\n const destDir = \".claude/agents\";\n const results: WriteResult[] = [];\n\n if (!existsSync(srcDir)) return results;\n\n const allAgents = readdirSync(srcDir)\n .filter((f) => f.endsWith(\".md\"))\n .map((f) => f.replace(/\\.md$/, \"\"));\n\n const agentsToInstall =\n selection === \"all\" ? allAgents : allAgents.filter((a) => selection.includes(a));\n\n if (!opts.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 results.push(copyAction(src, dest, opts));\n }\n return results;\n}\n\nfunction syncCommands(opts: WriteOpts): 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 (!opts.dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n results.push(copyAction(join(srcDir, file), join(destDir, file), opts));\n }\n\n return results;\n}\n\nfunction syncCI(opts: WriteOpts): 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 (!opts.dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n results.push(copyAction(join(srcDir, file), join(destDir, file), opts));\n }\n\n return results;\n}\n\nfunction syncDir(\n catalogSubdir: string,\n destDir: string,\n opts: WriteOpts,\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.length === 0 || extensions.some((ext) => f.endsWith(ext))\n );\n if (!opts.dryRun) mkdirSync(destDir, { recursive: true });\n\n for (const file of files) {\n results.push(copyAction(join(srcDir, file), join(destDir, file), opts));\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 { defaultSpecialtyAgents, SPECIALTY_TIER2_AGENTS, 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, [], defaultSpecialtyAgents(scope));\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 answers.specialtyAgents\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 specialtyAgents: string[]\n): AikitConfig {\n // Collapse \"user picked every option\" to \"all\" so sync installs future tier2 agents too.\n const allSpecialtyValues = new Set<string>(SPECIALTY_TIER2_AGENTS.map((a) => a.value));\n const agentTier2: \"all\" | string[] =\n specialtyAgents.length === allSpecialtyValues.size &&\n specialtyAgents.every((a) => allSpecialtyValues.has(a))\n ? \"all\"\n : specialtyAgents;\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 agents: { tier1: \"all\", tier2: agentTier2, tier3: [] },\n canonical: \"AGENTS.md\",\n };\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 { CATALOG_ROOT, loadCatalog } from \"../catalog/index.js\";\nimport { resolveShapeAgents } from \"../catalog/shape-agents.js\";\nimport type { AikitConfig, CliArgs } from \"../types.js\";\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/tier1\", \".claude/agents\", missing, drifted);\n checkCatalogAgentsTier2(config, missing, drifted);\n checkCatalogDir(\"hooks\", \".claude/hooks\", missing, drifted, [\".sh\"]);\n\n // Claude-only assets shipped at standard+ scope\n if (config.tools.includes(\"claude\") && config.scope !== \"minimal\") {\n checkCatalogDir(\"rules/claude-rules\", \".claude/rules\", missing, drifted);\n const refPath = \"docs/claude-md-reference.md\";\n if (!existsSync(refPath)) {\n missing.push(refPath);\n } else {\n const fresh = catalog.claudeMdReference();\n if (readFileSync(refPath, \"utf8\") !== fresh) {\n drifted.push(refPath);\n }\n }\n const rulesPath = \".claude/aikit-rules.json\";\n if (!existsSync(rulesPath)) {\n missing.push(rulesPath);\n } else {\n const fresh = catalog.aikitRulesJson();\n if (readFileSync(rulesPath, \"utf8\") !== fresh) {\n drifted.push(rulesPath);\n }\n }\n }\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 checkCatalogAgentsTier2(\n config: AikitConfig,\n missing: string[],\n drifted: string[],\n): void {\n const tier2Selection = config.agents?.tier2;\n if (tier2Selection === \"all\") {\n checkCatalogDir(\"agents/tier2\", \".claude/agents\", missing, drifted);\n return;\n }\n\n const expected = new Set<string>(\n Array.isArray(tier2Selection) ? tier2Selection : []\n );\n for (const agent of resolveShapeAgents(config.shape)) {\n expected.add(agent);\n }\n\n // No expected agents → nothing to check.\n if (expected.size === 0) return;\n\n const tier2Dir = join(CATALOG_ROOT, \"agents\", \"tier2\");\n if (!existsSync(tier2Dir)) return;\n\n for (const name of expected) {\n const catalogPath = join(tier2Dir, `${name}.md`);\n const installedPath = join(\".claude/agents\", `${name}.md`);\n if (!existsSync(catalogPath)) continue; // user-named agent not in catalog — ignore\n if (!existsSync(installedPath)) {\n missing.push(`agents/${name}.md`);\n continue;\n }\n // drift check (compare contents)\n if (readFileSync(catalogPath, \"utf8\") !== readFileSync(installedPath, \"utf8\")) {\n drifted.push(`agents/${name}.md`);\n }\n }\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 kleur from \"kleur\";\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 *\n * In a non-TTY context the @clack/prompts confirm dialog crashes with\n * `uv_tty_init returned EINVAL`. We detect that up front and either\n * fall through to sync (when --yes is passed) or refuse with a clear\n * pointer at the right command.\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 if (!process.stdout.isTTY || !process.stdin.isTTY) {\n process.stderr.write(\n kleur.yellow(\"aikit update is interactive. \") +\n `In a non-TTY context (CI, pipes, scripts), run ${kleur.cyan(\"aikit update --yes\")} ` +\n `or ${kleur.cyan(\"aikit sync --force\")} instead.\\n`\n );\n process.exit(1);\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 { join } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport kleur from \"kleur\";\nimport { CATALOG_ROOT } from \"../catalog/index.js\";\nimport { readConfig, writeConfig } from \"../fs/readConfig.js\";\nimport type { AikitConfig, AgentTier, CliArgs, ProjectShape, SkillTier } from \"../types.js\";\n\ntype ItemType = \"skill\" | \"agent\" | \"hook\";\n\nconst ITEM_DIRS: Record<ItemType, { catalog: string; dest: string; ext: string[] }> = {\n skill: { catalog: \"skills/tier1\", dest: \".claude/skills\", ext: [\".md\"] },\n agent: { catalog: \"agents/tier1\", dest: \".claude/agents\", ext: [\".md\"] },\n hook: { catalog: \"hooks\", dest: \".claude/hooks\", ext: [\".sh\"] },\n};\n\n// Maps an agent name to the shapes that require it. When `aikit add backend`\n// runs, we look up which shape to add to config.shape so a future sync\n// re-installs the agent.\nconst AGENT_TO_SHAPE: Record<string, ProjectShape> = {\n frontend: \"web\",\n backend: \"backend\",\n mobile: \"mobile\",\n};\n\ninterface FoundItem {\n type: ItemType;\n name: string;\n srcFile: string;\n destFile: string;\n destDir: string;\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 const found = findCatalogItem(itemArg);\n if (!found) {\n p.log.error(`\"${itemArg}\" not found in catalog.`);\n const similar = listAllCatalogItems().filter(\n (n) => n.includes(itemArg) || itemArg.includes((n.split(\"-\")[0] ?? \"\"))\n );\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\n if (existsSync(found.destFile) && !argv.force) {\n p.log.warn(`${found.destFile} already exists. Use --force to overwrite.`);\n return;\n }\n\n if (!argv[\"dry-run\"]) {\n mkdirSync(found.destDir, { recursive: true });\n copyFileSync(found.srcFile, found.destFile);\n }\n\n const dryPrefix = argv[\"dry-run\"] ? \"[dry-run] \" : \"\";\n process.stdout.write(`${dryPrefix}${kleur.green(\"✓\")} Added ${found.destFile}\\n`);\n\n // Persist the addition so the next `aikit sync` reproduces it.\n if (!argv[\"dry-run\"]) {\n const configChange = updateConfigForAddition(argv.config, found);\n if (configChange) {\n process.stdout.write(` ${kleur.dim(configChange)}\\n`);\n }\n }\n}\n\nfunction findCatalogItem(name: string): FoundItem | null {\n // Skills are spread across tier1 and tier2.\n for (const tier of [\"tier1\", \"tier2\"]) {\n const dir = join(CATALOG_ROOT, \"skills\", tier);\n if (existsSync(dir)) {\n const candidate = join(dir, `${name}.md`);\n if (existsSync(candidate)) {\n return {\n type: \"skill\",\n name,\n srcFile: candidate,\n destFile: join(\".claude/skills\", `${name}.md`),\n destDir: \".claude/skills\",\n };\n }\n }\n }\n\n // Agents live in tier subdirectories (tier1, tier2); hooks live flat.\n for (const tier of [\"tier1\", \"tier2\"]) {\n const dir = join(CATALOG_ROOT, \"agents\", tier);\n if (existsSync(dir)) {\n const candidate = join(dir, `${name}.md`);\n if (existsSync(candidate)) {\n return {\n type: \"agent\",\n name,\n srcFile: candidate,\n destFile: join(\".claude/agents\", `${name}.md`),\n destDir: \".claude/agents\",\n };\n }\n }\n }\n\n // Hooks live in a flat catalog directory.\n for (const type of [\"hook\"] as const) {\n const spec = ITEM_DIRS[type];\n const catalogDir = join(CATALOG_ROOT, spec.catalog);\n if (!existsSync(catalogDir)) continue;\n for (const ext of spec.ext) {\n const candidate = join(catalogDir, `${name}${ext}`);\n if (existsSync(candidate)) {\n return {\n type,\n name,\n srcFile: candidate,\n destFile: join(spec.dest, `${name}${ext}`),\n destDir: spec.dest,\n };\n }\n }\n }\n\n return null;\n}\n\nfunction updateConfigForAddition(configPath: string | undefined, item: FoundItem): string | null {\n const config = readConfig(configPath);\n if (!config) return null;\n\n let updated: AikitConfig | null = null;\n let message = \"\";\n\n if (item.type === \"agent\") {\n const shape = AGENT_TO_SHAPE[item.name];\n if (shape && !config.shape.includes(shape)) {\n updated = { ...config, shape: [...config.shape, shape] };\n message = `Added \"${shape}\" to .aikitrc.json shape (so sync re-installs ${item.name})`;\n }\n const agentTier = detectAgentTier(item.name);\n if (agentTier === \"tier2\" && !shape) {\n const currentAgents = config.agents ?? { tier1: \"all\", tier2: \"all\", tier3: [] };\n const tier2 = currentAgents.tier2;\n if (tier2 !== \"all\" && !tier2.includes(item.name)) {\n updated = {\n ...(updated ?? config),\n agents: { ...currentAgents, tier2: [...tier2, item.name] },\n };\n message = `Added \"${item.name}\" to .aikitrc.json agents.tier2`;\n }\n }\n if (agentTier === \"tier3\" && !(config.agents?.tier3 ?? []).includes(item.name)) {\n const currentAgents = config.agents ?? { tier1: \"all\", tier2: \"all\", tier3: [] };\n updated = {\n ...(updated ?? config),\n agents: { ...currentAgents, tier3: [...currentAgents.tier3, item.name] },\n };\n message = `Added \"${item.name}\" to .aikitrc.json agents.tier3`;\n }\n } else if (item.type === \"skill\") {\n // Default scope already installs all tier1+tier2. If the skill isn't in\n // tier1/tier2 (e.g. user-authored copy), record it in skills.tier3.\n const skillTier = detectSkillTier(item.name);\n if (skillTier === \"tier3\" && !config.skills.tier3.includes(item.name)) {\n updated = {\n ...config,\n skills: { ...config.skills, tier3: [...config.skills.tier3, item.name] },\n };\n message = `Added \"${item.name}\" to .aikitrc.json skills.tier3`;\n }\n } else if (item.type === \"hook\") {\n if (!config.integrations.hooks) {\n updated = {\n ...config,\n integrations: { ...config.integrations, hooks: true },\n };\n message = \"Set integrations.hooks=true in .aikitrc.json\";\n }\n }\n\n if (updated) {\n writeConfig(updated, configPath);\n return message;\n }\n return null;\n}\n\nfunction detectSkillTier(name: string): SkillTier {\n for (const tier of [\"tier1\", \"tier2\"] as const) {\n if (existsSync(join(CATALOG_ROOT, \"skills\", tier, `${name}.md`))) {\n return tier;\n }\n }\n return \"tier3\";\n}\n\nfunction detectAgentTier(name: string): AgentTier {\n for (const tier of [\"tier1\", \"tier2\"] as const) {\n if (existsSync(join(CATALOG_ROOT, \"agents\", tier, `${name}.md`))) {\n return tier;\n }\n }\n return \"tier3\";\n}\n\nfunction listAllCatalogItems(): string[] {\n const items: string[] = [];\n for (const subdir of [\"skills/tier1\", \"skills/tier2\", \"agents/tier1\", \"agents/tier2\", \"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 { join } from \"node:path\";\nimport kleur from \"kleur\";\nimport { CATALOG_ROOT } from \"../catalog/index.js\";\nimport type { CliArgs } from \"../types.js\";\n\ninterface CatalogItem {\n name: 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: \"Agents — Tier 1\", items: listCategory(\"agents/tier1\", \".claude/agents\") },\n { label: \"Agents — Tier 2\", items: listCategory(\"agents/tier2\", \".claude/agents\") },\n { label: \"Slash commands\", items: listCategory(\"commands\", \".claude/commands\") },\n { label: \"Hooks\", items: listCategory(\"hooks\", \".claude/hooks\", [\".sh\"]) },\n { label: \"Path-scoped rules\", items: listClaudeRules() },\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) => ({\n name: stripExtension(f, extensions),\n installed: installedFiles.has(f),\n }));\n}\n\nfunction listClaudeRules(): CatalogItem[] {\n const catalogDir = join(CATALOG_ROOT, \"rules\", \"claude-rules\");\n if (!existsSync(catalogDir)) return [];\n\n const installedDir = \".claude/rules\";\n const installedFiles = new Set(\n existsSync(installedDir)\n ? readdirSync(installedDir).filter((f) => f.endsWith(\".md\"))\n : []\n );\n\n return readdirSync(catalogDir)\n .filter((f) => f.endsWith(\".md\"))\n .map((f) => ({ name: stripExtension(f, [\".md\"]), installed: installedFiles.has(f) }));\n}\n\nfunction stripExtension(filename: string, extensions: string[]): string {\n for (const ext of extensions) {\n if (filename.endsWith(ext)) return filename.slice(0, -ext.length);\n }\n return filename;\n}\n","// Shared rule-ID parsing for telemetry, dialect translation, and the doctor /\n// report commands. Lives in one place so the regex doesn't drift across files\n// (which is what caused the metadata-blind bug pre-0.4.1: 4 callers had the\n// same regex without metadata support, only the dialects parser was updated).\n\n// Match a rule-ID HTML comment, optionally followed by space-separated\n// `key=value` metadata pairs:\n// <!-- id: code-style.no-any -->\n// <!-- id: code-style.no-any emphasis=high -->\n// <!-- id: code-style.no-any emphasis=high paths=src/**/*.ts -->\n//\n// The slug must start with a letter and contain at least one dot. This\n// excludes both single-segment IDs (`foo`) and dotless tokens that turn up\n// in docstring examples (`...`).\nexport const RULE_ID_REGEX =\n /<!--\\s*id:\\s*([a-zA-Z][a-zA-Z0-9_-]*\\.[a-zA-Z0-9._-]+)(?:\\s+[a-zA-Z][a-zA-Z0-9_-]*=[^>\\s]+)*\\s*-->/g;\n\n// Same pattern but anchored for use in single-match contexts.\nexport const RULE_ID_REGEX_SINGLE =\n /<!--\\s*id:\\s*([a-zA-Z][a-zA-Z0-9_-]*\\.[a-zA-Z0-9._-]+)(?:\\s+[a-zA-Z][a-zA-Z0-9_-]*=[^>\\s]+)*\\s*-->/;\n\n// Extract every rule ID from a piece of markdown content. Used by the doctor\n// and report commands to know which rules a project has declared.\nexport function extractRuleIds(content: string): string[] {\n const ids: string[] = [];\n for (const m of content.matchAll(RULE_ID_REGEX)) {\n if (m[1]) ids.push(m[1]);\n }\n return ids;\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 { extractRuleIds } from \"../render/rule-ids.js\";\nimport type { CliArgs } from \"../types.js\";\n\ninterface Finding {\n level: \"error\" | \"warn\" | \"ok\";\n check: string;\n message: string;\n}\n\ninterface RuleEvent {\n ts: string;\n event: \"loaded\" | \"violation\" | \"cited\" | \"judged_violation\" | \"rule_compile_error\";\n rule_id: string;\n source?: string;\n file?: string;\n severity?: string;\n line?: number;\n pattern?: string;\n error?: string;\n}\n\ninterface RuleStats {\n loadedCount: number;\n violationCount: number;\n citedCount: number;\n judgedCount: number;\n lastSeen: string;\n firstSeen: string;\n sources: Set<string>;\n}\n\nexport async function runDoctor(argv: CliArgs): Promise<void> {\n // --rules subcommand: rule-effectiveness telemetry summary\n if (argv.rules) {\n runRulesReport(argv.format === \"json\" ? \"json\" : \"text\");\n return;\n }\n\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 // 6b. 0.4.0 artefacts (Claude + scope ≥ standard)\n if (config.tools.includes(\"claude\") && config.scope !== \"minimal\") {\n for (const path of [\n \".claude/aikit-rules.json\",\n \"docs/claude-md-reference.md\",\n \".claude/rules/example.md\",\n ]) {\n if (existsSync(path)) {\n findings.push({ level: \"ok\", check: path, message: \"present\" });\n } else {\n findings.push({ level: \"warn\", check: path, message: \"Missing — run `aikit sync`\" });\n }\n }\n\n // Telemetry hooks (only when integrations.hooks is on).\n if (config.integrations.hooks) {\n for (const hook of [\"log-rule-event.sh\", \"check-pattern-violations.sh\", \"judge-rule-compliance.sh\"]) {\n const path = `.claude/hooks/${hook}`;\n if (existsSync(path)) {\n findings.push({ level: \"ok\", check: `telemetry:${hook}`, message: \"installed\" });\n } else {\n findings.push({ level: \"warn\", check: `telemetry:${hook}`, message: \"Missing — run `aikit sync`\" });\n }\n }\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\nfunction runRulesReport(format: \"text\" | \"json\"): void {\n const eventsPath = \".aikit/events.jsonl\";\n if (!existsSync(eventsPath)) {\n if (format === \"json\") {\n process.stdout.write(\n JSON.stringify({ status: \"no_telemetry\", message: \".aikit/events.jsonl not found\" }, null, 2) + \"\\n\"\n );\n } else {\n process.stdout.write(\n kleur.yellow(\"No telemetry yet. \") +\n \"Hooks log to .aikit/events.jsonl on first session.\\n\" +\n \"Run a Claude Code session in this repo, then re-run `aikit doctor --rules`.\\n\"\n );\n }\n return;\n }\n\n const { events, malformed } = parseEvents(readFileSync(eventsPath, \"utf8\"));\n if (events.length === 0) {\n if (format === \"json\") {\n process.stdout.write(JSON.stringify({ status: \"empty_log\", malformed }, null, 2) + \"\\n\");\n } else {\n process.stdout.write(kleur.yellow(\"Telemetry log is empty. No rule events recorded yet.\\n\"));\n }\n return;\n }\n\n const known = collectKnownRuleIds();\n const stats = aggregateStats(events, known);\n const compileErrors = collectCompileErrors(events);\n\n if (format === \"json\") {\n process.stdout.write(JSON.stringify(toRulesJson(stats, events.length, malformed, compileErrors), null, 2) + \"\\n\");\n return;\n }\n\n printRulesReport(stats, events.length, malformed, compileErrors);\n}\n\nfunction toRulesJson(\n stats: Map<string, RuleStats>,\n totalEvents: number,\n malformed: number,\n compileErrors: CompileError[]\n): unknown {\n return {\n generated_at: new Date().toISOString(),\n total_events: totalEvents,\n malformed_lines: malformed,\n rules: [...stats.entries()].map(([id, s]) => {\n const cls = classifyRule(s);\n return {\n id,\n bucket: cls.bucket,\n loaded: s.loadedCount,\n cited: s.citedCount,\n violations: s.violationCount,\n judged_violations: s.judgedCount,\n last_seen: s.lastSeen,\n advice: cls.advice,\n };\n }),\n compile_errors: compileErrors.map((ce) => ({\n rule_id: ce.ruleId,\n pattern: ce.pattern,\n error: ce.error,\n ts: ce.ts,\n })),\n };\n}\n\ninterface CompileError {\n ruleId: string;\n pattern: string;\n error: string;\n ts: string;\n}\n\nfunction collectCompileErrors(events: RuleEvent[]): CompileError[] {\n const latestByRule = new Map<string, CompileError>();\n for (const e of events) {\n if (e.event !== \"rule_compile_error\") continue;\n const existing = latestByRule.get(e.rule_id);\n if (!existing || e.ts > existing.ts) {\n latestByRule.set(e.rule_id, {\n ruleId: e.rule_id,\n pattern: e.pattern ?? \"\",\n error: e.error ?? \"(no detail)\",\n ts: e.ts,\n });\n }\n }\n return [...latestByRule.values()];\n}\n\nfunction parseEvents(content: string): { events: RuleEvent[]; malformed: number } {\n const out: RuleEvent[] = [];\n let malformed = 0;\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = JSON.parse(trimmed) as RuleEvent;\n if (parsed.rule_id && parsed.event) out.push(parsed);\n else malformed++;\n } catch {\n malformed++;\n }\n }\n return { events: out, malformed };\n}\n\nfunction collectKnownRuleIds(): Set<string> {\n // Scan AGENTS.md and .claude/rules/*.md for declared rule IDs.\n const ids = new Set<string>();\n const candidates = [\"AGENTS.md\", \"CLAUDE.md\", \".claude/CLAUDE.md\"];\n if (existsSync(\".claude/rules\")) {\n for (const f of readdirSync(\".claude/rules\")) {\n if (f.endsWith(\".md\")) candidates.push(join(\".claude/rules\", f));\n }\n }\n for (const path of candidates) {\n if (!existsSync(path)) continue;\n for (const id of extractRuleIds(readFileSync(path, \"utf8\"))) ids.add(id);\n }\n return ids;\n}\n\nfunction aggregateStats(events: RuleEvent[], known: Set<string>): Map<string, RuleStats> {\n const stats = new Map<string, RuleStats>();\n const seenIds = new Set<string>([...known]);\n\n for (const e of events) {\n seenIds.add(e.rule_id);\n let s = stats.get(e.rule_id);\n if (!s) {\n s = { loadedCount: 0, violationCount: 0, citedCount: 0, judgedCount: 0, lastSeen: e.ts, firstSeen: e.ts, sources: new Set() };\n stats.set(e.rule_id, s);\n }\n if (e.event === \"loaded\") s.loadedCount++;\n else if (e.event === \"violation\") s.violationCount++;\n else if (e.event === \"cited\") s.citedCount++;\n else if (e.event === \"judged_violation\") s.judgedCount++;\n if (e.source) s.sources.add(e.source);\n if (e.file) s.sources.add(e.file);\n if (e.ts > s.lastSeen) s.lastSeen = e.ts;\n if (e.ts < s.firstSeen) s.firstSeen = e.ts;\n }\n\n // Surface known-but-never-fired rules so they appear in the \"dead\" bucket.\n for (const id of seenIds) {\n if (!stats.has(id)) {\n stats.set(id, {\n loadedCount: 0,\n violationCount: 0,\n citedCount: 0,\n judgedCount: 0,\n lastSeen: \"\",\n firstSeen: \"\",\n sources: new Set(),\n });\n }\n }\n\n return stats;\n}\n\nfunction classifyRule(s: RuleStats): { bucket: \"hot\" | \"disputed\" | \"dead\" | \"unused\"; advice: string } {\n const negative = s.violationCount + s.judgedCount;\n const interactions = s.loadedCount + s.citedCount + negative;\n\n if (interactions === 0) {\n return { bucket: \"dead\", advice: \"Never loaded, cited, or violated — consider removing or rephrasing.\" };\n }\n // A rule with negatives but no loads is a pattern hit on a rule the agent\n // never saw — likely a rules-file-presence problem, not an adherence issue.\n if (s.loadedCount === 0 && s.citedCount === 0) {\n return { bucket: \"unused\", advice: \"Pattern violations recorded but rule not loaded — check rule file presence.\" };\n }\n if (negative > 0) {\n // Compare negatives to engaged signal (cited > loaded as \"rule was actually\n // applied\"). Fall back to loadedCount if no cited evidence is available.\n const denominator = s.citedCount > 0 ? s.citedCount + negative : Math.max(s.loadedCount, 1);\n const ratio = negative / denominator;\n if (ratio > 0.3) {\n return { bucket: \"disputed\", advice: \"Frequently violated — strengthen with IMPORTANT/YOU MUST or move to a hook.\" };\n }\n return { bucket: \"hot\", advice: \"Active rule with occasional violations — keep monitoring.\" };\n }\n return { bucket: \"hot\", advice: \"Loaded and obeyed — keep.\" };\n}\n\nfunction printRulesReport(stats: Map<string, RuleStats>, totalEvents: number, malformed: number, compileErrors: CompileError[]): void {\n const rows: Array<{ id: string; stats: RuleStats; bucket: string; advice: string }> = [];\n for (const [id, s] of stats) {\n const cls = classifyRule(s);\n rows.push({ id, stats: s, bucket: cls.bucket, advice: cls.advice });\n }\n\n const hot = rows.filter((r) => r.bucket === \"hot\");\n const disputed = rows.filter((r) => r.bucket === \"disputed\");\n const dead = rows.filter((r) => r.bucket === \"dead\");\n const unused = rows.filter((r) => r.bucket === \"unused\");\n\n process.stdout.write(kleur.bold(\"Rule observability — \") + kleur.dim(`${totalEvents} events across ${rows.length} rules`) + \"\\n\\n\");\n\n if (hot.length > 0) {\n process.stdout.write(kleur.green(\"✓ Hot rules (working as intended)\\n\"));\n for (const r of hot) {\n const v = r.stats.violationCount > 0 ? kleur.yellow(` ${r.stats.violationCount} violations`) : \"\";\n process.stdout.write(` ${kleur.bold(r.id)} — ${r.stats.loadedCount} loads${v}\\n`);\n }\n process.stdout.write(\"\\n\");\n }\n\n if (disputed.length > 0) {\n process.stdout.write(kleur.yellow(\"⚠ Disputed rules (>30% violation rate)\\n\"));\n for (const r of disputed) {\n process.stdout.write(` ${kleur.bold(r.id)} — ${r.stats.loadedCount} loads, ${r.stats.violationCount} violations\\n`);\n process.stdout.write(` ${kleur.dim(r.advice)}\\n`);\n }\n process.stdout.write(\"\\n\");\n }\n\n if (dead.length > 0) {\n process.stdout.write(kleur.red(\"✗ Dead rules (never observed)\\n\"));\n for (const r of dead) {\n process.stdout.write(` ${kleur.bold(r.id)}\\n`);\n process.stdout.write(` ${kleur.dim(r.advice)}\\n`);\n }\n process.stdout.write(\"\\n\");\n }\n\n if (unused.length > 0) {\n process.stdout.write(kleur.yellow(\"⚠ Pattern hits without rule load\\n\"));\n for (const r of unused) {\n process.stdout.write(` ${kleur.bold(r.id)} — ${r.stats.violationCount} pattern hits\\n`);\n process.stdout.write(` ${kleur.dim(r.advice)}\\n`);\n }\n process.stdout.write(\"\\n\");\n }\n\n process.stdout.write(kleur.dim(`Hot: ${hot.length} · Disputed: ${disputed.length} · Dead: ${dead.length} · Unmatched: ${unused.length}\\n`));\n\n if (compileErrors.length > 0) {\n process.stdout.write(kleur.red(`\\n✗ Rule pattern compile errors (${compileErrors.length})\\n`));\n for (const ce of compileErrors) {\n process.stdout.write(` ${kleur.bold(ce.ruleId)} — ${kleur.dim(ce.error)}\\n`);\n if (ce.pattern) process.stdout.write(` pattern: ${kleur.dim(ce.pattern)}\\n`);\n }\n process.stdout.write(kleur.dim(\" Fix these regex patterns in .claude/aikit-rules.json.\\n\"));\n }\n\n if (malformed > 0) {\n process.stdout.write(\n kleur.yellow(`\\n⚠ ${malformed} malformed line(s) in .aikit/events.jsonl were skipped.\\n`) +\n kleur.dim(\" This usually means a hook crashed mid-write. Adherence numbers reflect only the parsed lines.\\n\")\n );\n }\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { extractRuleIds } from \"../render/rule-ids.js\";\nimport type { CliArgs } from \"../types.js\";\n\ninterface RuleEvent {\n ts: string;\n event: \"loaded\" | \"violation\" | \"cited\" | \"judged_violation\";\n rule_id: string;\n source?: string;\n file?: string;\n severity?: string;\n line?: number;\n}\n\ninterface RuleStats {\n loaded: number;\n cited: number;\n violations: number;\n judged: number;\n files: Set<string>;\n lastSeen: string;\n}\n\nconst EVENTS_PATH = \".aikit/events.jsonl\";\n\nexport async function runReport(argv: CliArgs): Promise<void> {\n const format = (argv.format ?? \"markdown\") as \"markdown\" | \"json\";\n\n if (!existsSync(EVENTS_PATH)) {\n process.stdout.write(noTelemetryReport(format));\n return;\n }\n\n const { events, malformed } = parseEvents(readFileSync(EVENTS_PATH, \"utf8\"));\n if (events.length === 0) {\n process.stdout.write(noTelemetryReport(format));\n return;\n }\n\n const since = argv.since ? new Date(argv.since).toISOString() : null;\n const filtered = since ? events.filter((e) => e.ts >= since) : events;\n\n const known = collectKnownRuleIds();\n const stats = aggregate(filtered, known);\n\n if (format === \"json\") {\n process.stdout.write(JSON.stringify(toJsonReport(stats, filtered.length, since, malformed), null, 2) + \"\\n\");\n return;\n }\n\n process.stdout.write(toMarkdownReport(stats, filtered.length, since, malformed));\n}\n\nfunction parseEvents(content: string): { events: RuleEvent[]; malformed: number } {\n const out: RuleEvent[] = [];\n let malformed = 0;\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = JSON.parse(trimmed) as RuleEvent;\n if (parsed.rule_id && parsed.event) out.push(parsed);\n else malformed++;\n } catch {\n malformed++;\n }\n }\n return { events: out, malformed };\n}\n\nfunction collectKnownRuleIds(): Set<string> {\n const ids = new Set<string>();\n const candidates = [\"AGENTS.md\", \"CLAUDE.md\", \".claude/CLAUDE.md\"];\n if (existsSync(\".claude/rules\")) {\n for (const f of readdirSync(\".claude/rules\")) {\n if (f.endsWith(\".md\")) candidates.push(join(\".claude/rules\", f));\n }\n }\n for (const path of candidates) {\n if (!existsSync(path)) continue;\n for (const id of extractRuleIds(readFileSync(path, \"utf8\"))) ids.add(id);\n }\n return ids;\n}\n\nfunction aggregate(events: RuleEvent[], known: Set<string>): Map<string, RuleStats> {\n const stats = new Map<string, RuleStats>();\n const seen = new Set<string>([...known]);\n\n for (const e of events) {\n seen.add(e.rule_id);\n let s = stats.get(e.rule_id);\n if (!s) {\n s = { loaded: 0, cited: 0, violations: 0, judged: 0, files: new Set(), lastSeen: e.ts };\n stats.set(e.rule_id, s);\n }\n if (e.event === \"loaded\") s.loaded++;\n else if (e.event === \"cited\") s.cited++;\n else if (e.event === \"violation\") s.violations++;\n else if (e.event === \"judged_violation\") s.judged++;\n if (e.file) s.files.add(e.file);\n if (e.ts > s.lastSeen) s.lastSeen = e.ts;\n }\n\n for (const id of seen) {\n if (!stats.has(id)) {\n stats.set(id, { loaded: 0, cited: 0, violations: 0, judged: 0, files: new Set(), lastSeen: \"\" });\n }\n }\n\n return stats;\n}\n\ninterface AdherenceResult {\n // null when no judge evidence exists across any rule. `loaded` events are NOT\n // counted as positive evidence — they only mean a file was scanned, not that\n // a rule was applied. Real positive signal requires the LLM judge (cited\n // events) or future Phase 2 code-citation features.\n score: number | null;\n observed: number;\n basis: \"judge\" | \"no-evidence\";\n}\n\nfunction adherence(stats: Map<string, RuleStats>): AdherenceResult {\n let observed = 0;\n let followed = 0;\n let totalCited = 0;\n for (const s of stats.values()) {\n const negative = s.violations + s.judged;\n const positive = s.cited;\n totalCited += positive;\n if (positive + negative === 0) continue;\n observed++;\n followed += positive / (positive + negative);\n }\n if (totalCited === 0) {\n return { score: null, observed: 0, basis: \"no-evidence\" };\n }\n return { score: Math.round((followed / observed) * 100), observed, basis: \"judge\" };\n}\n\nfunction noTelemetryReport(format: \"markdown\" | \"json\"): string {\n if (format === \"json\") {\n return JSON.stringify({ status: \"no_telemetry\", message: \"No .aikit/events.jsonl found yet.\" }, null, 2) + \"\\n\";\n }\n return [\n \"## Rule Observability\",\n \"\",\n \"_No telemetry yet. Run a Claude Code session in this repo, then re-run the report._\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction toJsonReport(\n stats: Map<string, RuleStats>,\n totalEvents: number,\n since: string | null,\n malformedLines: number\n): unknown {\n const { score, observed, basis } = adherence(stats);\n return {\n generated_at: new Date().toISOString(),\n since,\n total_events: totalEvents,\n malformed_lines: malformedLines,\n rule_count: stats.size,\n observed_rules: observed,\n adherence_score: score,\n adherence_basis: basis,\n rules: [...stats.entries()].map(([id, s]) => ({\n id,\n loaded: s.loaded,\n cited: s.cited,\n violations: s.violations,\n judged_violations: s.judged,\n files: [...s.files],\n last_seen: s.lastSeen,\n })),\n };\n}\n\nfunction toMarkdownReport(\n stats: Map<string, RuleStats>,\n totalEvents: number,\n since: string | null,\n malformedLines: number\n): string {\n const { score, observed, basis } = adherence(stats);\n const rows = [...stats.entries()].sort(([, a], [, b]) => b.loaded + b.violations - (a.loaded + a.violations));\n\n const hot = rows.filter(([, s]) => s.loaded > 0 && (s.violations + s.judged) === 0);\n // Disputed = declared (loaded or cited) AND has negatives. Unmatched =\n // pattern violations recorded but rule never loaded — usually means the\n // rule isn't in any rule file, just in aikit-rules.json.\n const disputed = rows.filter(\n ([, s]) => (s.loaded > 0 || s.cited > 0) && (s.violations + s.judged) > 0\n );\n const unmatched = rows.filter(\n ([, s]) => s.loaded === 0 && s.cited === 0 && (s.violations + s.judged) > 0\n );\n const dead = rows.filter(([, s]) => s.loaded === 0 && s.cited === 0 && s.violations === 0 && s.judged === 0);\n\n const out: string[] = [];\n out.push(\"## 🔭 Rule Observability\");\n out.push(\"\");\n if (since) out.push(`_Since: \\`${since}\\`_`);\n if (basis === \"judge\" && score !== null) {\n out.push(`_Adherence: **${score}%** across ${observed} judge-observed rules · ${totalEvents} events recorded_`);\n } else {\n out.push(`_Adherence: **N/A** — enable \\`AIKIT_JUDGE=1\\` for compliance scoring · ${totalEvents} events recorded_`);\n }\n out.push(\"\");\n\n if (disputed.length > 0) {\n out.push(\"### ⚠️ Rules under pressure\");\n out.push(\"_Declared rules with violations — strengthen wording or move to a hook._\");\n out.push(\"\");\n out.push(\"| Rule | Loads | Cited | Pattern violations | Judged violations |\");\n out.push(\"|---|---:|---:|---:|---:|\");\n for (const [id, s] of disputed) {\n out.push(`| \\`${id}\\` | ${s.loaded} | ${s.cited} | ${s.violations} | ${s.judged} |`);\n }\n out.push(\"\");\n }\n\n if (unmatched.length > 0) {\n out.push(\"### 🟡 Pattern hits without a declared rule\");\n out.push(\n \"_Pattern matched in `aikit-rules.json` but no rule with this ID is in your AGENTS.md / `.claude/rules/`. Either declare the rule or remove the pattern config._\"\n );\n out.push(\"\");\n out.push(\"| Rule ID | Pattern hits |\");\n out.push(\"|---|---:|\");\n for (const [id, s] of unmatched) {\n out.push(`| \\`${id}\\` | ${s.violations + s.judged} |`);\n }\n out.push(\"\");\n }\n\n if (hot.length > 0) {\n out.push(\"### ✅ Hot rules (loaded, no violations)\");\n out.push(\"\");\n for (const [id, s] of hot) {\n out.push(`- \\`${id}\\` — ${s.loaded} loads`);\n }\n out.push(\"\");\n }\n\n if (dead.length > 0) {\n out.push(\"### 💀 Dead rules (declared but never observed)\");\n out.push(\"\");\n for (const [id] of dead) {\n out.push(`- \\`${id}\\` — consider removing or rephrasing`);\n }\n out.push(\"\");\n }\n\n if (malformedLines > 0) {\n out.push(`> ⚠️ ${malformedLines} malformed line(s) in \\`.aikit/events.jsonl\\` were skipped — adherence reflects only parsed events.`);\n out.push(\"\");\n }\n\n out.push(\"---\");\n out.push(`<sub>Generated by \\`aikit report\\` · ${new Date().toISOString()}</sub>`);\n out.push(\"\");\n\n return out.join(\"\\n\");\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport kleur from \"kleur\";\nimport type { CliArgs } from \"../types.js\";\n\nconst runCmd = promisify(execFile);\n\ninterface PR {\n number: number;\n title: string;\n}\n\nexport interface ReviewComment {\n body: string;\n prNumber: number;\n}\n\ninterface RuleCandidate {\n id: string;\n text: string;\n evidenceCount: number;\n exemplar: string;\n prs: number[];\n}\n\n// Matches phrases that signal a reviewer is teaching a convention.\nconst CORRECTION_PHRASES = [\n /\\bwe (?:always|usually|never|don't|do not|prefer|tend to|should|shouldn't)\\b/i,\n /\\b(?:please )?(?:always|never|don't|do not) [a-z]/i,\n /\\bactually,?\\s+(?:we|let's|i'd)/i,\n /\\bshould (?:always |never |)be /i,\n /\\b(?:our )?convention is to\\b/i,\n /\\bnit:?\\s+/i,\n /\\b(?:can we|could we|would prefer)\\b/i,\n];\n\nconst STOPWORDS = new Set([\n \"the\", \"a\", \"an\", \"and\", \"or\", \"but\", \"if\", \"is\", \"are\", \"was\", \"were\",\n \"be\", \"been\", \"being\", \"to\", \"of\", \"in\", \"on\", \"at\", \"by\", \"for\", \"with\",\n \"from\", \"this\", \"that\", \"these\", \"those\", \"it\", \"its\", \"we\", \"you\", \"i\",\n \"my\", \"your\", \"our\", \"their\", \"as\", \"so\", \"do\", \"does\", \"did\", \"have\",\n \"has\", \"had\", \"can\", \"could\", \"would\", \"should\", \"will\", \"may\",\n]);\n\nexport async function runLearn(argv: CliArgs): Promise<void> {\n const limit = Number(argv.limit ?? 30);\n if (!Number.isFinite(limit) || limit <= 0) {\n process.stderr.write(\"--limit must be a positive number\\n\");\n process.exit(1);\n }\n\n if (!(await ensureGh())) {\n process.stderr.write(\n kleur.red(\"aikit learn requires the GitHub CLI (`gh`) to be installed and authenticated.\\n\") +\n \"Install: https://cli.github.com/ · Authenticate: `gh auth login`\\n\"\n );\n process.exit(1);\n }\n\n if (!(await hasGitHubRemote())) {\n process.stderr.write(\n kleur.red(\"This repo has no GitHub remote. \") +\n \"`aikit learn` mines PR review history via `gh`, which requires a GitHub-hosted repo.\\n\" +\n \"Add a remote with `git remote add origin <url>` then re-run.\\n\"\n );\n process.exit(1);\n }\n\n process.stdout.write(kleur.dim(`Fetching last ${limit} merged PRs...\\n`));\n let prs: PR[];\n try {\n prs = await fetchMergedPRs(limit);\n } catch (err) {\n process.stderr.write(kleur.red(`Failed to list PRs via gh: ${ghErrorMessage(err)}\\n`));\n process.exit(1);\n }\n if (prs.length === 0) {\n process.stdout.write(kleur.yellow(\"No merged PRs found in this repo.\\n\"));\n return;\n }\n\n process.stdout.write(kleur.dim(`Pulling review comments from ${prs.length} PRs...\\n`));\n const comments: ReviewComment[] = [];\n let skipped = 0;\n for (const pr of prs) {\n const prComments = await fetchReviewComments(pr.number);\n if (prComments === null) {\n skipped++;\n continue;\n }\n for (const c of prComments) comments.push({ body: c, prNumber: pr.number });\n }\n\n if (skipped > 0) {\n process.stdout.write(kleur.yellow(` warn: ${skipped}/${prs.length} PRs skipped due to gh fetch errors\\n`));\n }\n\n if (comments.length === 0) {\n process.stdout.write(kleur.yellow(\"No review comments found across the scanned PRs.\\n\"));\n return;\n }\n\n const teachingComments = comments.filter((c) => isTeachingComment(c.body));\n process.stdout.write(\n kleur.dim(`Found ${teachingComments.length} teaching comments out of ${comments.length} total.\\n\\n`)\n );\n\n const candidates = clusterCandidates(teachingComments);\n printCandidates(candidates);\n}\n\nasync function ensureGh(): Promise<boolean> {\n try {\n await runCmd(\"gh\", [\"auth\", \"status\"], { encoding: \"utf8\" });\n return true;\n } catch {\n return false;\n }\n}\n\nasync function hasGitHubRemote(): Promise<boolean> {\n try {\n const { stdout } = await runCmd(\"git\", [\"remote\", \"-v\"], { encoding: \"utf8\" });\n return stdout.includes(\"github.com\");\n } catch {\n return false;\n }\n}\n\n// execFile errors include `stderr` separate from `message`. The default\n// `message` is just \"Command failed: <cmd>\" which is unhelpful — gh's actual\n// diagnostic (\"no git remotes found\", \"HTTP 401\", etc.) lives in stderr.\nfunction ghErrorMessage(err: unknown): string {\n const e = err as { stderr?: unknown; message?: string };\n const stderr = typeof e?.stderr === \"string\" ? e.stderr.trim() : \"\";\n if (stderr) return stderr.split(\"\\n\")[0] ?? stderr;\n if (typeof e?.message === \"string\") return e.message.split(\"\\n\")[0] ?? e.message;\n return String(err);\n}\n\nasync function fetchMergedPRs(limit: number): Promise<PR[]> {\n const { stdout } = await runCmd(\n \"gh\",\n [\"pr\", \"list\", \"--state\", \"merged\", \"--limit\", String(limit), \"--json\", \"number,title\"],\n { encoding: \"utf8\", maxBuffer: 10 * 1024 * 1024 }\n );\n return JSON.parse(stdout) as PR[];\n}\n\n// Returns null on transport failure (so the caller can distinguish a real\n// \"no comments\" PR from a PR we couldn't fetch). Returns [] for genuinely\n// empty PRs.\nasync function fetchReviewComments(prNumber: number): Promise<string[] | null> {\n try {\n const { stdout } = await runCmd(\n \"gh\",\n [\"pr\", \"view\", String(prNumber), \"--json\", \"reviews,comments\"],\n { encoding: \"utf8\", maxBuffer: 10 * 1024 * 1024 }\n );\n const data = JSON.parse(stdout) as {\n reviews?: { body?: string }[];\n comments?: { body?: string }[];\n };\n const out: string[] = [];\n for (const r of data.reviews ?? []) if (r.body) out.push(r.body);\n for (const c of data.comments ?? []) if (c.body) out.push(c.body);\n return out;\n } catch {\n return null;\n }\n}\n\nexport function isTeachingComment(body: string): boolean {\n if (body.length < 10 || body.length > 1500) return false;\n return CORRECTION_PHRASES.some((rx) => rx.test(body));\n}\n\nfunction tokens(text: string): Set<string> {\n return new Set(\n text\n .toLowerCase()\n .replace(/[^a-z0-9 ]+/g, \" \")\n .split(/\\s+/)\n .filter((t) => t.length > 2 && !STOPWORDS.has(t))\n .map(stem)\n );\n}\n\n// Crude stemmer that normalises common English plurals/tenses so \"commit\" and\n// \"commits\" hash to the same token. Good enough for clustering — false matches\n// are reviewed manually before becoming rules.\nfunction stem(t: string): string {\n if (t.length < 5) return t;\n if (t.endsWith(\"ies\")) return t.slice(0, -3) + \"y\";\n if (t.endsWith(\"ing\")) return t.slice(0, -3);\n if (t.endsWith(\"ed\")) return t.slice(0, -2);\n if (t.endsWith(\"es\")) return t.slice(0, -2);\n if (t.endsWith(\"s\")) return t.slice(0, -1);\n return t;\n}\n\nfunction jaccard(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 || b.size === 0) return 0;\n let intersect = 0;\n for (const t of a) if (b.has(t)) intersect++;\n return intersect / (a.size + b.size - intersect);\n}\n\nexport function clusterCandidates(comments: ReviewComment[]): RuleCandidate[] {\n type Cluster = { seedTokens: Set<string>; comments: ReviewComment[] };\n const clusters: Cluster[] = [];\n // Permissive threshold — corrections often share only 2-3 signal tokens after\n // stopwords are stripped. False positives are reviewed manually before a rule\n // is accepted, so erring on the side of too many clusters is fine.\n const SIMILARITY_THRESHOLD = 0.15;\n\n for (const c of comments) {\n const tk = tokens(c.body);\n if (tk.size < 2) continue;\n let placed = false;\n for (const cluster of clusters) {\n // Compare to the seed (first comment's tokens) rather than the union, so\n // cluster drift doesn't make later comments harder to match.\n if (jaccard(tk, cluster.seedTokens) >= SIMILARITY_THRESHOLD) {\n cluster.comments.push(c);\n placed = true;\n break;\n }\n }\n if (!placed) clusters.push({ seedTokens: tk, comments: [c] });\n }\n\n // Convert to candidates, keep only clusters with 2+ pieces of evidence.\n return clusters\n .filter((c) => c.comments.length >= 2)\n .map((c) => candidateFromCluster(c.comments))\n .sort((a, b) => b.evidenceCount - a.evidenceCount);\n}\n\nfunction candidateFromCluster(comments: ReviewComment[]): RuleCandidate {\n // Pick the shortest non-trivial comment as the exemplar (review nits are\n // usually punchier than long architectural comments).\n const exemplar = [...comments]\n .map((c) => c.body.trim().split(\"\\n\").find((l) => l.trim().length > 10) ?? c.body.trim())\n .sort((a, b) => a.length - b.length)[0] ?? comments[0]?.body ?? \"\";\n const id = idFromText(exemplar);\n return {\n id,\n text: exemplar.slice(0, 240),\n evidenceCount: comments.length,\n exemplar,\n prs: [...new Set(comments.map((c) => c.prNumber))].sort((a, b) => a - b),\n };\n}\n\nexport function idFromText(text: string): string {\n const slug = text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .split(\"-\")\n .filter((t) => t.length > 2 && !STOPWORDS.has(t))\n .slice(0, 4)\n .join(\"-\");\n return `learned.${slug || \"unnamed\"}`;\n}\n\nfunction printCandidates(candidates: RuleCandidate[]): void {\n if (candidates.length === 0) {\n process.stdout.write(kleur.yellow(\"No repeated correction patterns found. Try increasing --limit.\\n\"));\n return;\n }\n\n process.stdout.write(kleur.bold(`Proposed rule candidates (${candidates.length})\\n`));\n process.stdout.write(kleur.dim(\"Each candidate is backed by ≥2 PR review comments.\\n\\n\"));\n\n for (const c of candidates) {\n const prList = c.prs.slice(0, 5).map((n) => `#${n}`).join(\", \");\n const more = c.prs.length > 5 ? `, +${c.prs.length - 5} more` : \"\";\n process.stdout.write(kleur.bold(`▸ ${c.id}\\n`));\n process.stdout.write(` ${kleur.dim(\"evidence:\")} ${c.evidenceCount} comments across ${prList}${more}\\n`);\n process.stdout.write(` ${kleur.dim(\"exemplar:\")} ${truncate(c.exemplar, 200)}\\n\\n`);\n }\n\n process.stdout.write(kleur.bold(\"Suggested AGENTS.md additions\\n\"));\n process.stdout.write(kleur.dim(\"Copy the block below into AGENTS.md inside a <!-- BEGIN:learned --> ... <!-- END:learned --> region:\\n\\n\"));\n process.stdout.write(\"<!-- BEGIN:learned -->\\n\");\n process.stdout.write(\"## Learned conventions\\n\");\n for (const c of candidates) {\n process.stdout.write(`- <!-- id: ${c.id} --> ${truncate(c.exemplar, 240)}\\n`);\n }\n process.stdout.write(\"<!-- END:learned -->\\n\");\n}\n\nfunction truncate(s: string, n: number): string {\n const flat = s.replace(/\\s+/g, \" \").trim();\n return flat.length > n ? `${flat.slice(0, n - 1)}…` : flat;\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.7.1\";\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 doctor --rules Rule observability report — which rules fire, are followed, are dead\n report Markdown / JSON rule-adherence summary (for PR comments / CI)\n learn Mine recent PR review comments for repeated corrections; propose rules\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 --rules (with doctor) Show rule-observability buckets\n --format=<fmt> (with report / doctor --rules) markdown | json\n --since=<date> (with report) Restrict events to after this ISO date\n --limit=<n> (with learn) How many merged PRs to scan (default 30)\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\", \"rules\"],\n string: [\"config\", \"tools\", \"preset\", \"format\", \"since\", \"limit\"],\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 rules: 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 case \"report\": {\n const { runReport } = await import(\"./commands/report.js\");\n await runReport(argv);\n break;\n }\n case \"learn\": {\n const { runLearn } = await import(\"./commands/learn.js\");\n await runLearn(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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAEA,QAAM,MAAM;AACZ,QAAM,MAAM,GAAG,GAAG;AAClB,QAAM,OAAO;AAEb,QAAM,SAAS;AAAA,MACb,GAAGA,IAAGC,IAAG;AACP,YAAI,CAACA,GAAG,QAAO,GAAG,GAAG,GAAGD,KAAI,CAAC;AAC7B,eAAO,GAAG,GAAG,GAAGC,KAAI,CAAC,IAAID,KAAI,CAAC;AAAA,MAChC;AAAA,MACA,KAAKA,IAAGC,IAAG;AACT,YAAI,MAAM;AAEV,YAAID,KAAI,EAAG,QAAO,GAAG,GAAG,GAAG,CAACA,EAAC;AAAA,iBACpBA,KAAI,EAAG,QAAO,GAAG,GAAG,GAAGA,EAAC;AAEjC,YAAIC,KAAI,EAAG,QAAO,GAAG,GAAG,GAAG,CAACA,EAAC;AAAA,iBACpBA,KAAI,EAAG,QAAO,GAAG,GAAG,GAAGA,EAAC;AAEjC,eAAO;AAAA,MACT;AAAA,MACA,IAAI,CAAC,QAAQ,MAAM,GAAG,GAAG,GAAG,KAAK;AAAA,MACjC,MAAM,CAAC,QAAQ,MAAM,GAAG,GAAG,GAAG,KAAK;AAAA,MACnC,SAAS,CAAC,QAAQ,MAAM,GAAG,GAAG,GAAG,KAAK;AAAA,MACtC,UAAU,CAAC,QAAQ,MAAM,GAAG,GAAG,GAAG,KAAK;AAAA,MACvC,UAAU,CAAC,QAAQ,MAAM,GAAG,GAAG,IAAI,OAAO,KAAK;AAAA,MAC/C,UAAU,CAAC,QAAQ,MAAM,GAAG,GAAG,IAAI,OAAO,KAAK;AAAA,MAC/C,MAAM,GAAG,GAAG;AAAA,MACZ,MAAM,GAAG,GAAG;AAAA,MACZ,MAAM,GAAG,GAAG;AAAA,MACZ,MAAM,GAAG,GAAG;AAAA,MACZ,SAAS,GAAG,GAAG;AAAA,IACjB;AAEA,QAAM,SAAS;AAAA,MACb,IAAI,CAAC,QAAQ,MAAM,GAAG,GAAG,IAAI,OAAO,KAAK;AAAA,MACzC,MAAM,CAAC,QAAQ,MAAM,GAAG,GAAG,IAAI,OAAO,KAAK;AAAA,IAC7C;AAEA,QAAM,QAAQ;AAAA,MACZ,QAAQ,GAAG,GAAG;AAAA,MACd,IAAI,CAAC,QAAQ,MAAM,GAAG,GAAG,KAAK,OAAO,KAAK;AAAA,MAC1C,MAAM,CAAC,QAAQ,MAAM,GAAG,GAAG,IAAI,OAAO,KAAK;AAAA,MAC3C,MAAM,GAAG,GAAG;AAAA,MACZ,SAAS,GAAG,GAAG;AAAA,MACf,WAAW,GAAG,GAAG;AAAA,MACjB,MAAM,OAAO;AACX,YAAI,QAAQ;AACZ,iBAAS,IAAI,GAAG,IAAI,OAAO;AACzB,mBAAS,KAAK,QAAQ,IAAI,QAAQ,IAAI,OAAO,GAAG,IAAI;AACtD,YAAI;AACF,mBAAS,OAAO;AAClB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,UAAU,EAAE,QAAQ,QAAQ,OAAO,KAAK;AAAA;AAAA;;;ACzD/C;AAAA;AAAA;AAAA,QAAIC,KAAI,WAAW,CAAC;AAApB,QAAuB,OAAOA,GAAE,QAAQ,CAAC;AAAzC,QAA4C,MAAMA,GAAE,OAAO,CAAC;AAC5D,QAAI,mBACH,EAAE,CAAC,CAAC,IAAI,YAAY,KAAK,SAAS,YAAY,OAC7C,CAAC,CAAC,IAAI,eAAe,KAAK,SAAS,SAAS,KAAKA,GAAE,aAAa,YAAaA,GAAE,UAAU,CAAC,GAAG,SAAS,IAAI,SAAS,UAAW,CAAC,CAAC,IAAI;AAEtI,QAAI,YAAY,CAAC,MAAM,OAAO,UAAU,SACvC,WAAS;AACR,UAAI,SAAS,KAAK,OAAO,QAAQ,OAAO,QAAQ,OAAO,KAAK,MAAM;AAClE,aAAO,CAAC,QAAQ,OAAO,aAAa,QAAQ,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,SAAS;AAAA,IAC9F;AAED,QAAI,eAAe,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrD,UAAI,SAAS,IAAI,SAAS;AAC1B,SAAG;AACF,kBAAU,OAAO,UAAU,QAAQ,KAAK,IAAI;AAC5C,iBAAS,QAAQ,MAAM;AACvB,gBAAQ,OAAO,QAAQ,OAAO,MAAM;AAAA,MACrC,SAAS,CAAC;AACV,aAAO,SAAS,OAAO,UAAU,MAAM;AAAA,IACxC;AAEA,QAAI,eAAe,CAAC,UAAU,qBAAqB;AAClD,UAAIC,KAAI,UAAU,YAAY,MAAM;AACpC,aAAO;AAAA,QACN,kBAAkB;AAAA,QAClB,OAAOA,GAAE,WAAW,SAAS;AAAA,QAC7B,MAAMA,GAAE,WAAW,YAAY,iBAAiB;AAAA,QAChD,KAAKA,GAAE,WAAW,YAAY,iBAAiB;AAAA,QAC/C,QAAQA,GAAE,WAAW,UAAU;AAAA,QAC/B,WAAWA,GAAE,WAAW,UAAU;AAAA,QAClC,SAASA,GAAE,WAAW,UAAU;AAAA,QAChC,QAAQA,GAAE,WAAW,UAAU;AAAA,QAC/B,eAAeA,GAAE,WAAW,UAAU;AAAA,QAEtC,OAAOA,GAAE,YAAY,UAAU;AAAA,QAC/B,KAAKA,GAAE,YAAY,UAAU;AAAA,QAC7B,OAAOA,GAAE,YAAY,UAAU;AAAA,QAC/B,QAAQA,GAAE,YAAY,UAAU;AAAA,QAChC,MAAMA,GAAE,YAAY,UAAU;AAAA,QAC9B,SAASA,GAAE,YAAY,UAAU;AAAA,QACjC,MAAMA,GAAE,YAAY,UAAU;AAAA,QAC9B,OAAOA,GAAE,YAAY,UAAU;AAAA,QAC/B,MAAMA,GAAE,YAAY,UAAU;AAAA,QAE9B,SAASA,GAAE,YAAY,UAAU;AAAA,QACjC,OAAOA,GAAE,YAAY,UAAU;AAAA,QAC/B,SAASA,GAAE,YAAY,UAAU;AAAA,QACjC,UAAUA,GAAE,YAAY,UAAU;AAAA,QAClC,QAAQA,GAAE,YAAY,UAAU;AAAA,QAChC,WAAWA,GAAE,YAAY,UAAU;AAAA,QACnC,QAAQA,GAAE,YAAY,UAAU;AAAA,QAChC,SAASA,GAAE,YAAY,UAAU;AAAA,QAEjC,aAAaA,GAAE,YAAY,UAAU;AAAA,QACrC,WAAWA,GAAE,YAAY,UAAU;AAAA,QACnC,aAAaA,GAAE,YAAY,UAAU;AAAA,QACrC,cAAcA,GAAE,YAAY,UAAU;AAAA,QACtC,YAAYA,GAAE,YAAY,UAAU;AAAA,QACpC,eAAeA,GAAE,YAAY,UAAU;AAAA,QACvC,YAAYA,GAAE,YAAY,UAAU;AAAA,QACpC,aAAaA,GAAE,YAAY,UAAU;AAAA,QAErC,eAAeA,GAAE,aAAa,UAAU;AAAA,QACxC,aAAaA,GAAE,aAAa,UAAU;AAAA,QACtC,eAAeA,GAAE,aAAa,UAAU;AAAA,QACxC,gBAAgBA,GAAE,aAAa,UAAU;AAAA,QACzC,cAAcA,GAAE,aAAa,UAAU;AAAA,QACvC,iBAAiBA,GAAE,aAAa,UAAU;AAAA,QAC1C,cAAcA,GAAE,aAAa,UAAU;AAAA,QACvC,eAAeA,GAAE,aAAa,UAAU;AAAA,MACzC;AAAA,IACD;AAEA,WAAO,UAAU,aAAa;AAC9B,WAAO,QAAQ,eAAe;AAAA;AAAA;;;;;;;AC1Ef,SAASC,EAAU,EAAC,WAAAC,IAAY,MAAK,IAAI,CAAA,GAAI;AAG3D,QAAMC,IAAU,CACf,2JACA,0DACF,EAAG,KAAK,GAAG;AAEV,SAAO,IAAI,OAAOA,GAASD,IAAY,SAAY,GAAG;AACvD;ACLe,SAASE,EAAUC,GAAQ;AACzC,MAAI,OAAOA,KAAW,SACrB,OAAM,IAAI,UAAU,gCAAgC,OAAOA,CAAM,IAAI;AAMtE,SAAOA,EAAO,QAAQC,GAAO,EAAE;AAChC;AAAA,SAAA,EAAA,GAAA;AAAA,SAAA,KAAA,EAAA,cAAA,OAAA,UAAA,eAAA,KAAA,GAAA,SAAA,IAAA,EAAA,UAAA;AAAA;AGTe,SAASC,EAAYF,GAAQG,KAAU,CAAA,GAAI;AAYzD,MAXI,OAAOH,KAAW,YAAYA,EAAO,WAAW,MAIpDG,KAAU,EACT,mBAAmB,MACnB,GAAGA,GACL,GAECH,IAASD,EAAUC,CAAM,GAErBA,EAAO,WAAW,GACrB,QAAO;AAGRA,MAASA,EAAO,QAAQI,GAAY,GAAE,IAAI;AAE1C,QAAMC,IAA0BF,GAAQ,oBAAoB,IAAI;AAChE,MAAIG,KAAQ;AAEZ,aAAWC,KAAaP,GAAQ;AAC/B,UAAMQ,IAAYD,EAAU,YAAY,CAAC;AAQzC,QALIC,KAAa,MAASA,KAAa,OAAQA,KAAa,OAKxDA,KAAa,OAASA,KAAa,IACtC;AAID,YADaC,GAAe,eAAeF,CAAS,GACxC;MACX,KAAK;MACL,KAAK;AACJD,QAAAA,MAAS;AACT;MACD,KAAK;AACJA,QAAAA,MAASD;AACT;MACD;AACCC,QAAAA,MAAS;IACV;EACD;AAED,SAAOA;AACR;ACmBA,SAASI,KAAiB;AACzB,QAAMC,IAAQ,oBAAI;AAElB,aAAW,CAACC,IAAWC,CAAK,KAAK,OAAO,QAAQC,CAAM,GAAG;AACxD,eAAW,CAACC,IAAWC,CAAK,KAAK,OAAO,QAAQH,CAAK,EACpDC,GAAOC,EAAS,IAAI,EACnB,MAAM,QAAUC,EAAM,CAAC,CAAC,KACxB,OAAO,QAAUA,EAAM,CAAC,CAAC,IAC7B,GAEGH,EAAME,EAAS,IAAID,EAAOC,EAAS,GAEnCJ,EAAM,IAAIK,EAAM,CAAC,GAAGA,EAAM,CAAC,CAAC;AAG7B,WAAO,eAAeF,GAAQF,IAAW,EACxC,OAAOC,GACP,YAAY,MACf,CAAG;EACD;AAED,SAAA,OAAO,eAAeC,GAAQ,SAAS,EACtC,OAAOH,GACP,YAAY,MACd,CAAE,GAEDG,EAAO,MAAM,QAAQ,YACrBA,EAAO,QAAQ,QAAQ,YAEvBA,EAAO,MAAM,OAAOG,EAAAA,GACpBH,EAAO,MAAM,UAAUI,EAAAA,GACvBJ,EAAO,MAAM,UAAUK,EAAAA,GACvBL,EAAO,QAAQ,OAAOG,EAAWG,CAAsB,GACvDN,EAAO,QAAQ,UAAUI,EAAYE,CAAsB,GAC3DN,EAAO,QAAQ,UAAUK,EAAYC,CAAsB,GAG3D,OAAO,iBAAiBN,GAAQ,EAC/B,cAAc,EACb,OAAO,CAACO,IAAKC,GAAOC,OAGfF,OAAQC,KAASA,MAAUC,KAC1BF,KAAM,IACF,KAGJA,KAAM,MACF,MAGD,KAAK,OAAQA,KAAM,KAAK,MAAO,EAAE,IAAI,MAGtC,KACH,KAAK,KAAK,MAAMA,KAAM,MAAM,CAAC,IAC7B,IAAI,KAAK,MAAMC,IAAQ,MAAM,CAAC,IAC/B,KAAK,MAAMC,KAAO,MAAM,CAAC,GAE7B,YAAY,MACZ,GACD,UAAU,EACT,OAAOC,CAAAA,OAAO;AACb,UAAMC,IAAU,yBAAyB,KAAKD,GAAI,SAAS,EAAE,CAAC;AAC9D,QAAI,CAACC,EACJ,QAAO,CAAC,GAAG,GAAG,CAAC;AAGhB,QAAI,CAACC,EAAW,IAAID;AAEhBC,IAAAA,GAAY,WAAW,MAC1BA,KAAc,CAAC,GAAGA,EAAW,EAAE,IAAInB,OAAaA,IAAYA,CAAS,EAAE,KAAK,EAAE;AAG/E,UAAMoB,IAAU,OAAO,SAASD,IAAa,EAAE;AAE/C,WAAO,CAELC,KAAW,KAAM,KACjBA,KAAW,IAAK,KACjBA,IAAU,GAEf;EACI,GACD,YAAY,MACZ,GACD,cAAc,EACb,OAAOH,CAAAA,OAAOV,EAAO,aAAa,GAAGA,EAAO,SAASU,EAAG,CAAC,GACzD,YAAY,MACZ,GACD,eAAe,EACd,OAAOI,CAAAA,OAAQ;AACd,QAAIA,KAAO,EACV,QAAO,KAAKA;AAGb,QAAIA,KAAO,GACV,QAAO,MAAMA,KAAO;AAGrB,QAAIP,GACAC,IACAC;AAEJ,QAAIK,MAAQ,IACXP,OAASO,KAAO,OAAO,KAAM,KAAK,KAClCN,KAAQD,GACRE,IAAOF;SACD;AACNO,MAAAA,MAAQ;AAER,YAAMC,IAAYD,KAAO;AAEzBP,UAAM,KAAK,MAAMO,KAAO,EAAE,IAAI,GAC9BN,KAAQ,KAAK,MAAMO,IAAY,CAAC,IAAI,GACpCN,IAAQM,IAAY,IAAK;IACzB;AAED,UAAMC,IAAQ,KAAK,IAAIT,GAAKC,IAAOC,CAAI,IAAI;AAE3C,QAAIO,MAAU,EACb,QAAO;AAIR,QAAIC,IAAS,MAAO,KAAK,MAAMR,CAAI,KAAK,IAAM,KAAK,MAAMD,EAAK,KAAK,IAAK,KAAK,MAAMD,CAAG;AAEtF,WAAIS,MAAU,MACbC,KAAU,KAGJA;EACP,GACD,YAAY,MACZ,GACD,WAAW,EACV,OAAO,CAACV,IAAKC,GAAOC,OAAST,EAAO,cAAcA,EAAO,aAAaO,IAAKC,GAAOC,EAAI,CAAC,GACvF,YAAY,MACZ,GACD,WAAW,EACV,OAAOC,CAAAA,OAAOV,EAAO,cAAcA,EAAO,aAAaU,EAAG,CAAC,GAC3D,YAAY,MACZ,EACH,CAAE,GAEMV;AACR;ACZe,SAASkB,EAAShC,GAAQiC,IAAS9B,GAAS;AAC1D,SAAO,OAAOH,CAAM,EAClB,UAAW,EACX,QAAQ,SAAS;CAAI,EACrB,MAAM;CAAI,EACV,IAAIkC,CAAAA,OAAQC,GAAKD,IAAMD,IAAS9B,CAAO,CAAC,EACxC,KAAK;CAAI;AACZ;ACzJgB,SAAAiC,EAAYC,GAAyCC,IAAgB;AACpF,MAAI,OAAOD,KAAQ,SAClB,QAAOE,EAAS,QAAQ,IAAIF,CAAG,MAAMC;AAGtC,aAAWR,KAASO,EACnB,KAAIP,MAAU,UACVM,EAAYN,GAAOQ,EAAM,EAC5B,QAAO;AAGT,SAAO;AACR;ACxEgB,SAAAE,GAAUC,GAAWC,IAAW;AAC/C,MAAID,MAAMC,GAAG;AAEb,QAAMC,IAASF,EAAE,MAAM;CAAI,GACrBG,KAASF,GAAE,MAAM;CAAI,GACrBG,IAAiB,CAAA;AAEvB,WAASC,IAAI,GAAGA,IAAI,KAAK,IAAIH,EAAO,QAAQC,GAAO,MAAM,GAAGE,IACvDH,GAAOG,CAAC,MAAMF,GAAOE,CAAC,KAAGD,EAAK,KAAKC,CAAC;AAGzC,SAAOD;AACR;ACEgB,SAAAE,GAASjB,GAAiC;AACzD,SAAOA,MAAUkB;AAClB;AAEO,SAASC,EAAWC,GAAiBpB,IAAgB;AAC3D,QAAMgB,IAAII;AAENJ,IAAE,SAAOA,EAAE,WAAWhB,EAAK;AAChC;0CRpBM7B,GAWN,GCwSS8B,GAAAA,ICnTT3B,IAGA,IELMgB,GAEAH,GAEAC,GAEAC,GAEAL,GA4DOqC,IACAC,IAuJPC,ICxNAC,GAKAC,IACAC,GACAC,GACAC,IACAC,GACAC,GAEAC,GACAC,GAIAC,IAIAC,GAmDAC,IAwBA9B,ICpGA+B,IASO3B,GECP4B,IAEOnB,GCZbN,IAAA0B,IAAAC,GAuBqBC,GCfAC,IERrBC,IAAA/B,IAAAgC,GAAAC,ICgCA,IAAA,IAAA,GC1BqBC,IEEAC;;;;;;AhBNrB,IAAM3E,IAAQL,EAAS;AAWvB,IAAA,IAAA,EAAA,SAAA,CAAA,EAAA;AAAA,KAAA,SAAA,GAAA;ACbA,UAAIiF,KAAM,CAAA;AAKRC,QAAAA,UAAiBD,IAGnBA,GAAI,iBAAiB,SAAStE,IAAW;AACvC,YAAIwE,IAAIxE,GAAU,WAAW,CAAC,GAC1ByE,IAAKzE,GAAU,UAAU,IAAKA,GAAU,WAAW,CAAC,IAAI,GACxDC,IAAYuE;AAQhB,eAPK,SAAUA,KAAKA,KAAK,SAAY,SAAUC,KAAKA,KAAK,UACvDD,KAAK,MACLC,KAAK,MACLxE,IAAauE,KAAK,KAAMC,GACxBxE,KAAa,QAGAA,KAAV,SACA,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,QAChC,MAEMA,KAAV,QACA,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,QAChC,MAEJ,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,QAAUA,KAAaA,KAAa,QACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,SACpC,UAAWA,KAAaA,KAAa,UACrC,UAAWA,KAAaA,KAAa,UACrC,UAAWA,KAAaA,KAAa,UACrC,UAAWA,KAAaA,KAAa,UACrC,UAAWA,KAAaA,KAAa,UACrC,UAAWA,KAAaA,KAAa,UACrC,UAAWA,KAAaA,KAAa,UACrC,UAAWA,KAAaA,KAAa,SACjC,MAEJ,MAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACUA,KAAV,OACA,SAAUA,KAAaA,KAAa,SACpC,SAAUA,KAAaA,KAAa,QAChC,OAEMA,KAAV,OACUA,KAAV,OACA,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACA,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACUA,KAAV,OACA,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACA,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACA,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACA,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACA,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACA,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACA,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACA,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACUA,KAAV,OACA,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACUA,KAAV,OACA,OAAUA,KAAaA,KAAa,OAC1BA,KAAV,OACUA,KAAV,OACA,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OACpC,OAAUA,KAAaA,KAAa,OAC1BA,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,QACpC,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACA,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACUA,KAAV,QACUA,KAAV,QACUA,KAAV,QACUA,KAAV,QACA,QAAUA,KAAaA,KAAa,QAC1BA,KAAV,QACUA,KAAV,QACUA,KAAV,QACUA,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","a","init_dist","replaced","existsSync","readFileSync","writeFileSync","existing","existsSync","readFileSync","writeFileSync","e","l","existsSync","readFileSync","dirname","p","init_dist","existsSync","mkdirSync","readFileSync","basename","dirname","join","v","r","isInteractive","f","a","init_dist","basename","runSync","a","init_dist","existsSync","readFileSync","readdirSync","join","m","d","f","init_diff","v","runDiff","runSync","init_dist","copyFileSync","existsSync","mkdirSync","readdirSync","join","v","f","init_dist","existsSync","readdirSync","join","f","m","existsSync","readFileSync","readdirSync","join","skillsDir","f","ce","e","r","v","existsSync","readFileSync","readdirSync","join","parseEvents","e","collectKnownRuleIds","f","a","b","c","e","r","a","b","l","x","k","j","v","runInit","runSync","runUpdate","runDiff","runAdd","runList","runDoctor","runReport","runLearn"]}