maxsimcli 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"install.cjs","names":["styles","process","os","tty","process","#process","#sigListeners","#emitter","#hupSig","#originalProcessReallyExit","#originalProcessEmit","#loaded","#processEmit","#processReallyExit","process","process","spinners","tty","isUnicodeSupported","process","isUnicodeSupported","isFullWidth","isFullWidth","process","#activeCount","#realStart","#realStop","#stdin","#stdinWasPaused","#stdinWasRaw","#handleInputBound","#isInternalWrite","#deferRenderTimer","#tryRender","#getFullPrefixText","#getFullSuffixText","#options","process","#stream","#linesToClear","#frameIndex","#computeLineCountFrom","#spinner","isUnicodeSupported","cliSpinners","#id","#formatAffix","#lastFrameTime","#internalWrite","#hookedStreams","#hookedWrite","#hookStream","#stringifyChunk","#chunkTerminatesLine","#clearRenderDeferral","#scheduleRenderDeferral","#drainHandler","#buildOutputLine","#isDiscardingStdin","#installHook","#uninstallHook","logSymbols.success","logSymbols.error","logSymbols.warning","logSymbols.info","AsyncLocalStorage","AsyncResource","AsyncResource","process","NO_TRUNCATION","fastStringTruncatedWidth","ESC","stringWidth","#isTTY","#destSrc","#proxy","MuteStream","readline","onSignalExit","AsyncResource","isSelectable","isNavigable","normalizeChoices","path","os","path","os","path","os","path","os","path","claudeAdapter","opencodeAdapter","geminiAdapter","codexAdapter","fs","os","crypto","confirm","checkbox","select"],"sources":["../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../../../node_modules/.pnpm/mimic-function@5.0.1/node_modules/mimic-function/index.js","../../../node_modules/.pnpm/onetime@7.0.0/node_modules/onetime/index.js","../../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/signals.js","../../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/index.js","../../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js","../../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js","../../../node_modules/.pnpm/cli-spinners@3.4.0/node_modules/cli-spinners/spinners.json","../../../node_modules/.pnpm/cli-spinners@3.4.0/node_modules/cli-spinners/index.js","../../../node_modules/.pnpm/yoctocolors@2.1.2/node_modules/yoctocolors/base.js","../../../node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js","../../../node_modules/.pnpm/log-symbols@7.0.1/node_modules/log-symbols/symbols.js","../../../node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup-data.js","../../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/utilities.js","../../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup.js","../../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/index.js","../../../node_modules/.pnpm/string-width@8.2.0/node_modules/string-width/index.js","../../../node_modules/.pnpm/is-interactive@2.0.0/node_modules/is-interactive/index.js","../../../node_modules/.pnpm/stdin-discarder@0.3.1/node_modules/stdin-discarder/index.js","../../../node_modules/.pnpm/ora@9.3.0/node_modules/ora/index.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/key.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/errors.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/hook-engine.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-state.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-effect.js","../../../node_modules/.pnpm/@inquirer+figures@2.0.3/node_modules/@inquirer/figures/dist/index.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/theme.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/make-theme.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-prefix.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-memo.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-ref.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-keypress.js","../../../node_modules/.pnpm/cli-width@4.1.0/node_modules/cli-width/index.js","../../../node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/utils.js","../../../node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/index.js","../../../node_modules/.pnpm/fast-string-width@3.0.2/node_modules/fast-string-width/dist/index.js","../../../node_modules/.pnpm/fast-wrap-ansi@0.2.0/node_modules/fast-wrap-ansi/lib/main.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/utils.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/pagination/use-pagination.js","../../../node_modules/.pnpm/mute-stream@3.0.0/node_modules/mute-stream/lib/index.js","../../../node_modules/.pnpm/@inquirer+ansi@2.0.3/node_modules/@inquirer/ansi/dist/index.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/screen-manager.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/promise-polyfill.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/create-prompt.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/Separator.js","../../../node_modules/.pnpm/@inquirer+checkbox@5.1.0_@types+node@25.3.0/node_modules/@inquirer/checkbox/dist/index.js","../../../node_modules/.pnpm/@inquirer+confirm@6.0.8_@types+node@25.3.0/node_modules/@inquirer/confirm/dist/index.js","../../../node_modules/.pnpm/@inquirer+select@5.1.0_@types+node@25.3.0/node_modules/@inquirer/select/dist/index.js","../../adapters/dist/base.js","../../adapters/dist/claude.js","../../adapters/dist/transforms/tool-maps.js","../../adapters/dist/transforms/content.js","../../adapters/dist/transforms/frontmatter.js","../../adapters/dist/opencode.js","../../adapters/dist/gemini.js","../../adapters/dist/codex.js","../../adapters/dist/index.js","../package.json","../src/install.ts"],"sourcesContent":["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 process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","const copyProperty = (to, from, property, ignoreNonConfigurable) => {\n\t// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.\n\t// `Function#prototype` is non-writable and non-configurable so can never be modified.\n\tif (property === 'length' || property === 'prototype') {\n\t\treturn;\n\t}\n\n\t// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.\n\tif (property === 'arguments' || property === 'caller') {\n\t\treturn;\n\t}\n\n\tconst toDescriptor = Object.getOwnPropertyDescriptor(to, property);\n\tconst fromDescriptor = Object.getOwnPropertyDescriptor(from, property);\n\n\tif (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(to, property, fromDescriptor);\n};\n\n// `Object.defineProperty()` throws if the property exists, is not configurable and either:\n// - one its descriptors is changed\n// - it is non-writable and its value is changed\nconst canCopyProperty = function (toDescriptor, fromDescriptor) {\n\treturn toDescriptor === undefined || toDescriptor.configurable || (\n\t\ttoDescriptor.writable === fromDescriptor.writable\n\t\t&& toDescriptor.enumerable === fromDescriptor.enumerable\n\t\t&& toDescriptor.configurable === fromDescriptor.configurable\n\t\t&& (toDescriptor.writable || toDescriptor.value === fromDescriptor.value)\n\t);\n};\n\nconst changePrototype = (to, from) => {\n\tconst fromPrototype = Object.getPrototypeOf(from);\n\tif (fromPrototype === Object.getPrototypeOf(to)) {\n\t\treturn;\n\t}\n\n\tObject.setPrototypeOf(to, fromPrototype);\n};\n\nconst wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\\n${fromBody}`;\n\nconst toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');\nconst toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');\n\n// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.\n// We use `bind()` instead of a closure for the same reason.\n// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.\nconst changeToString = (to, from, name) => {\n\tconst withName = name === '' ? '' : `with ${name.trim()}() `;\n\tconst newToString = wrappedToString.bind(null, withName, from.toString());\n\t// Ensure `to.toString.toString` is non-enumerable and has the same `same`\n\tObject.defineProperty(newToString, 'name', toStringName);\n\tconst {writable, enumerable, configurable} = toStringDescriptor; // We destructue to avoid a potential `get` descriptor.\n\tObject.defineProperty(to, 'toString', {value: newToString, writable, enumerable, configurable});\n};\n\nexport default function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {\n\tconst {name} = to;\n\n\tfor (const property of Reflect.ownKeys(from)) {\n\t\tcopyProperty(to, from, property, ignoreNonConfigurable);\n\t}\n\n\tchangePrototype(to, from);\n\tchangeToString(to, from, name);\n\n\treturn to;\n}\n","import mimicFunction from 'mimic-function';\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = undefined;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFunction(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nonetime.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n\nexport default onetime;\n","/**\n * This is not the set of all possible signals.\n *\n * It IS, however, the set of all signals that trigger\n * an exit on either Linux or BSD systems. Linux is a\n * superset of the signal names supported on BSD, and\n * the unknown signals just fail to register, so we can\n * catch that easily enough.\n *\n * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\n *\n * Don't bother with SIGKILL. It's uncatchable, which\n * means that we can't fire any callbacks anyway.\n *\n * If a user does happen to register a handler on a non-\n * fatal signal like SIGWINCH or something, and then\n * exit, it'll end up firing `process.emit('exit')`, so\n * the handler will be fired anyway.\n *\n * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n * artificially, inherently leave the process in a\n * state from which it is not safe to try and enter JS\n * listeners.\n */\nexport const signals = [];\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM');\nif (process.platform !== 'win32') {\n signals.push('SIGALRM', 'SIGABRT', 'SIGVTALRM', 'SIGXCPU', 'SIGXFSZ', 'SIGUSR2', 'SIGTRAP', 'SIGSYS', 'SIGQUIT', 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n );\n}\nif (process.platform === 'linux') {\n signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT');\n}\n//# sourceMappingURL=signals.js.map","// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nimport { signals } from './signals.js';\nexport { signals };\nconst processOk = (process) => !!process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function';\nconst kExitEmitter = Symbol.for('signal-exit emitter');\nconst global = globalThis;\nconst ObjectDefineProperty = Object.defineProperty.bind(Object);\n// teeny special purpose ee\nclass Emitter {\n emitted = {\n afterExit: false,\n exit: false,\n };\n listeners = {\n afterExit: [],\n exit: [],\n };\n count = 0;\n id = Math.random();\n constructor() {\n if (global[kExitEmitter]) {\n return global[kExitEmitter];\n }\n ObjectDefineProperty(global, kExitEmitter, {\n value: this,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n }\n on(ev, fn) {\n this.listeners[ev].push(fn);\n }\n removeListener(ev, fn) {\n const list = this.listeners[ev];\n const i = list.indexOf(fn);\n /* c8 ignore start */\n if (i === -1) {\n return;\n }\n /* c8 ignore stop */\n if (i === 0 && list.length === 1) {\n list.length = 0;\n }\n else {\n list.splice(i, 1);\n }\n }\n emit(ev, code, signal) {\n if (this.emitted[ev]) {\n return false;\n }\n this.emitted[ev] = true;\n let ret = false;\n for (const fn of this.listeners[ev]) {\n ret = fn(code, signal) === true || ret;\n }\n if (ev === 'exit') {\n ret = this.emit('afterExit', code, signal) || ret;\n }\n return ret;\n }\n}\nclass SignalExitBase {\n}\nconst signalExitWrap = (handler) => {\n return {\n onExit(cb, opts) {\n return handler.onExit(cb, opts);\n },\n load() {\n return handler.load();\n },\n unload() {\n return handler.unload();\n },\n };\n};\nclass SignalExitFallback extends SignalExitBase {\n onExit() {\n return () => { };\n }\n load() { }\n unload() { }\n}\nclass SignalExit extends SignalExitBase {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n /* c8 ignore start */\n #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP';\n /* c8 ignore stop */\n #emitter = new Emitter();\n #process;\n #originalProcessEmit;\n #originalProcessReallyExit;\n #sigListeners = {};\n #loaded = false;\n constructor(process) {\n super();\n this.#process = process;\n // { <signal>: <listener fn>, ... }\n this.#sigListeners = {};\n for (const sig of signals) {\n this.#sigListeners[sig] = () => {\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n const listeners = this.#process.listeners(sig);\n let { count } = this.#emitter;\n // This is a workaround for the fact that signal-exit v3 and signal\n // exit v4 are not aware of each other, and each will attempt to let\n // the other handle it, so neither of them do. To correct this, we\n // detect if we're the only handler *except* for previous versions\n // of signal-exit, and increment by the count of listeners it has\n // created.\n /* c8 ignore start */\n const p = process;\n if (typeof p.__signal_exit_emitter__ === 'object' &&\n typeof p.__signal_exit_emitter__.count === 'number') {\n count += p.__signal_exit_emitter__.count;\n }\n /* c8 ignore stop */\n if (listeners.length === count) {\n this.unload();\n const ret = this.#emitter.emit('exit', null, sig);\n /* c8 ignore start */\n const s = sig === 'SIGHUP' ? this.#hupSig : sig;\n if (!ret)\n process.kill(process.pid, s);\n /* c8 ignore stop */\n }\n };\n }\n this.#originalProcessReallyExit = process.reallyExit;\n this.#originalProcessEmit = process.emit;\n }\n onExit(cb, opts) {\n /* c8 ignore start */\n if (!processOk(this.#process)) {\n return () => { };\n }\n /* c8 ignore stop */\n if (this.#loaded === false) {\n this.load();\n }\n const ev = opts?.alwaysLast ? 'afterExit' : 'exit';\n this.#emitter.on(ev, cb);\n return () => {\n this.#emitter.removeListener(ev, cb);\n if (this.#emitter.listeners['exit'].length === 0 &&\n this.#emitter.listeners['afterExit'].length === 0) {\n this.unload();\n }\n };\n }\n load() {\n if (this.#loaded) {\n return;\n }\n this.#loaded = true;\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n this.#emitter.count += 1;\n for (const sig of signals) {\n try {\n const fn = this.#sigListeners[sig];\n if (fn)\n this.#process.on(sig, fn);\n }\n catch (_) { }\n }\n this.#process.emit = (ev, ...a) => {\n return this.#processEmit(ev, ...a);\n };\n this.#process.reallyExit = (code) => {\n return this.#processReallyExit(code);\n };\n }\n unload() {\n if (!this.#loaded) {\n return;\n }\n this.#loaded = false;\n signals.forEach(sig => {\n const listener = this.#sigListeners[sig];\n /* c8 ignore start */\n if (!listener) {\n throw new Error('Listener not defined for signal: ' + sig);\n }\n /* c8 ignore stop */\n try {\n this.#process.removeListener(sig, listener);\n /* c8 ignore start */\n }\n catch (_) { }\n /* c8 ignore stop */\n });\n this.#process.emit = this.#originalProcessEmit;\n this.#process.reallyExit = this.#originalProcessReallyExit;\n this.#emitter.count -= 1;\n }\n #processReallyExit(code) {\n /* c8 ignore start */\n if (!processOk(this.#process)) {\n return 0;\n }\n this.#process.exitCode = code || 0;\n /* c8 ignore stop */\n this.#emitter.emit('exit', this.#process.exitCode, null);\n return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);\n }\n #processEmit(ev, ...args) {\n const og = this.#originalProcessEmit;\n if (ev === 'exit' && processOk(this.#process)) {\n if (typeof args[0] === 'number') {\n this.#process.exitCode = args[0];\n /* c8 ignore start */\n }\n /* c8 ignore start */\n const ret = og.call(this.#process, ev, ...args);\n /* c8 ignore start */\n this.#emitter.emit('exit', this.#process.exitCode, null);\n /* c8 ignore stop */\n return ret;\n }\n else {\n return og.call(this.#process, ev, ...args);\n }\n }\n}\nconst process = globalThis.process;\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const { \n/**\n * Called when the process is exiting, whether via signal, explicit\n * exit, or running out of stuff to do.\n *\n * If the global process object is not suitable for instrumentation,\n * then this will be a no-op.\n *\n * Returns a function that may be used to unload signal-exit.\n */\nonExit, \n/**\n * Load the listeners. Likely you never need to call this, unless\n * doing a rather deep integration with signal-exit functionality.\n * Mostly exposed for the benefit of testing.\n *\n * @internal\n */\nload, \n/**\n * Unload the listeners. Likely you never need to call this, unless\n * doing a rather deep integration with signal-exit functionality.\n * Mostly exposed for the benefit of testing.\n *\n * @internal\n */\nunload, } = signalExitWrap(processOk(process) ? new SignalExit(process) : new SignalExitFallback());\n//# sourceMappingURL=index.js.map","import process from 'node:process';\nimport onetime from 'onetime';\nimport {onExit} from 'signal-exit';\n\nconst terminal = process.stderr.isTTY\n\t? process.stderr\n\t: (process.stdout.isTTY ? process.stdout : undefined);\n\nconst restoreCursor = terminal ? onetime(() => {\n\tonExit(() => {\n\t\tterminal.write('\\u001B[?25h');\n\t}, {alwaysLast: true});\n}) : () => {};\n\nexport default restoreCursor;\n","import process from 'node:process';\nimport restoreCursor from 'restore-cursor';\n\nlet isHidden = false;\n\nconst cliCursor = {};\n\ncliCursor.show = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\tisHidden = false;\n\twritableStream.write('\\u001B[?25h');\n};\n\ncliCursor.hide = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\trestoreCursor();\n\tisHidden = true;\n\twritableStream.write('\\u001B[?25l');\n};\n\ncliCursor.toggle = (force, writableStream) => {\n\tif (force !== undefined) {\n\t\tisHidden = force;\n\t}\n\n\tif (isHidden) {\n\t\tcliCursor.show(writableStream);\n\t} else {\n\t\tcliCursor.hide(writableStream);\n\t}\n};\n\nexport default cliCursor;\n","","import spinners from './spinners.json' with {type: 'json'};\n\nexport default spinners;\n\nconst spinnersList = Object.keys(spinners);\n\nexport function randomSpinner() {\n\tconst randomIndex = Math.floor(Math.random() * spinnersList.length);\n\tconst spinnerName = spinnersList[randomIndex];\n\treturn spinners[spinnerName];\n}\n","import tty from 'node:tty';\n\n// eslint-disable-next-line no-warning-comments\n// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)\n// Lots of optionals here to support Deno.\nconst hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;\n\nconst format = (open, close) => {\n\tif (!hasColors) {\n\t\treturn input => input;\n\t}\n\n\tconst openCode = `\\u001B[${open}m`;\n\tconst closeCode = `\\u001B[${close}m`;\n\n\treturn input => {\n\t\tconst string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster.\n\t\tlet index = string.indexOf(closeCode);\n\n\t\tif (index === -1) {\n\t\t\t// Note: Intentionally not using string interpolation for performance reasons.\n\t\t\treturn openCode + string + closeCode;\n\t\t}\n\n\t\t// Handle nested colors.\n\n\t\t// We could have done this, but it's too slow (as of Node.js 22).\n\t\t// return openCode + string.replaceAll(closeCode, (close === 22 ? closeCode : '') + openCode) + closeCode;\n\n\t\tlet result = openCode;\n\t\tlet lastIndex = 0;\n\n\t\t// SGR 22 resets both bold (1) and dim (2). When we encounter a nested\n\t\t// close for styles that use 22, we need to re-open the outer style.\n\t\tconst reopenOnNestedClose = close === 22;\n\t\tconst replaceCode = (reopenOnNestedClose ? closeCode : '') + openCode;\n\n\t\twhile (index !== -1) {\n\t\t\tresult += string.slice(lastIndex, index) + replaceCode;\n\t\t\tlastIndex = index + closeCode.length;\n\t\t\tindex = string.indexOf(closeCode, lastIndex);\n\t\t}\n\n\t\tresult += string.slice(lastIndex) + closeCode;\n\n\t\treturn result;\n\t};\n};\n\nexport const reset = format(0, 0);\nexport const bold = format(1, 22);\nexport const dim = format(2, 22);\nexport const italic = format(3, 23);\nexport const underline = format(4, 24);\nexport const overline = format(53, 55);\nexport const inverse = format(7, 27);\nexport const hidden = format(8, 28);\nexport const strikethrough = format(9, 29);\n\nexport const black = format(30, 39);\nexport const red = format(31, 39);\nexport const green = format(32, 39);\nexport const yellow = format(33, 39);\nexport const blue = format(34, 39);\nexport const magenta = format(35, 39);\nexport const cyan = format(36, 39);\nexport const white = format(37, 39);\nexport const gray = format(90, 39);\n\nexport const bgBlack = format(40, 49);\nexport const bgRed = format(41, 49);\nexport const bgGreen = format(42, 49);\nexport const bgYellow = format(43, 49);\nexport const bgBlue = format(44, 49);\nexport const bgMagenta = format(45, 49);\nexport const bgCyan = format(46, 49);\nexport const bgWhite = format(47, 49);\nexport const bgGray = format(100, 49);\n\nexport const redBright = format(91, 39);\nexport const greenBright = format(92, 39);\nexport const yellowBright = format(93, 39);\nexport const blueBright = format(94, 39);\nexport const magentaBright = format(95, 39);\nexport const cyanBright = format(96, 39);\nexport const whiteBright = format(97, 39);\n\nexport const bgRedBright = format(101, 49);\nexport const bgGreenBright = format(102, 49);\nexport const bgYellowBright = format(103, 49);\nexport const bgBlueBright = format(104, 49);\nexport const bgMagentaBright = format(105, 49);\nexport const bgCyanBright = format(106, 49);\nexport const bgWhiteBright = format(107, 49);\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import {\n\tblue,\n\tgreen,\n\tyellow,\n\tred,\n} from 'yoctocolors';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst _isUnicodeSupported = isUnicodeSupported();\n\nexport const info = blue(_isUnicodeSupported ? 'ℹ' : 'i');\nexport const success = green(_isUnicodeSupported ? '✔' : '√');\nexport const warning = yellow(_isUnicodeSupported ? '⚠' : '‼');\nexport const error = red(_isUnicodeSupported ? '✖' : '×');\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\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\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","// Generated by scripts/build.js\n\n// prettier-ignore\nconst ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];\n\n// prettier-ignore\nconst fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];\n\n// prettier-ignore\nconst halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];\n\n// prettier-ignore\nconst narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];\n\n// prettier-ignore\nconst wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];\n\nexport {ambiguousRanges, fullwidthRanges, halfwidthRanges, narrowRanges, wideRanges};\n","/**\nBinary search on a sorted flat array of [start, end] pairs.\n\n@param {number[]} ranges - Flat array of inclusive [start, end] range pairs, e.g. [0, 5, 10, 20].\n@param {number} codePoint - The value to search for.\n@returns {boolean} Whether the value falls within any of the ranges.\n*/\nexport const isInRange = (ranges, codePoint) => {\n\tlet low = 0;\n\tlet high = Math.floor(ranges.length / 2) - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tconst i = mid * 2;\n\t\tif (codePoint < ranges[i]) {\n\t\t\thigh = mid - 1;\n\t\t} else if (codePoint > ranges[i + 1]) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n","import {\n\tambiguousRanges,\n\tfullwidthRanges,\n\thalfwidthRanges,\n\tnarrowRanges,\n\twideRanges,\n} from './lookup-data.js';\nimport {isInRange} from './utilities.js';\n\nconst minimumAmbiguousCodePoint = ambiguousRanges[0];\nconst maximumAmbiguousCodePoint = ambiguousRanges.at(-1);\nconst minimumFullWidthCodePoint = fullwidthRanges[0];\nconst maximumFullWidthCodePoint = fullwidthRanges.at(-1);\nconst minimumHalfWidthCodePoint = halfwidthRanges[0];\nconst maximumHalfWidthCodePoint = halfwidthRanges.at(-1);\nconst minimumNarrowCodePoint = narrowRanges[0];\nconst maximumNarrowCodePoint = narrowRanges.at(-1);\nconst minimumWideCodePoint = wideRanges[0];\nconst maximumWideCodePoint = wideRanges.at(-1);\n\nconst commonCjkCodePoint = 0x4E_00;\nconst [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);\n\n// Use a hot-path range so common `isWide` calls can skip binary search.\n// The range containing U+4E00 covers common CJK ideographs;\n// fallback to the largest range for resilience to Unicode table changes.\nfunction findWideFastPathRange(ranges) {\n\tlet fastPathStart = ranges[0];\n\tlet fastPathEnd = ranges[1];\n\n\tfor (let index = 0; index < ranges.length; index += 2) {\n\t\tconst start = ranges[index];\n\t\tconst end = ranges[index + 1];\n\n\t\tif (\n\t\t\tcommonCjkCodePoint >= start\n\t\t\t&& commonCjkCodePoint <= end\n\t\t) {\n\t\t\treturn [start, end];\n\t\t}\n\n\t\tif ((end - start) > (fastPathEnd - fastPathStart)) {\n\t\t\tfastPathStart = start;\n\t\t\tfastPathEnd = end;\n\t\t}\n\t}\n\n\treturn [fastPathStart, fastPathEnd];\n}\n\nexport const isAmbiguous = codePoint => {\n\tif (\n\t\tcodePoint < minimumAmbiguousCodePoint\n\t\t|| codePoint > maximumAmbiguousCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(ambiguousRanges, codePoint);\n};\n\nexport const isFullWidth = codePoint => {\n\tif (\n\t\tcodePoint < minimumFullWidthCodePoint\n\t\t|| codePoint > maximumFullWidthCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(fullwidthRanges, codePoint);\n};\n\nconst isHalfWidth = codePoint => {\n\tif (\n\t\tcodePoint < minimumHalfWidthCodePoint\n\t\t|| codePoint > maximumHalfWidthCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(halfwidthRanges, codePoint);\n};\n\nconst isNarrow = codePoint => {\n\tif (\n\t\tcodePoint < minimumNarrowCodePoint\n\t\t|| codePoint > maximumNarrowCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(narrowRanges, codePoint);\n};\n\nexport const isWide = codePoint => {\n\tif (\n\t\tcodePoint >= wideFastPathStart\n\t\t&& codePoint <= wideFastPathEnd\n\t) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tcodePoint < minimumWideCodePoint\n\t\t|| codePoint > maximumWideCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(wideRanges, codePoint);\n};\n\nexport function getCategory(codePoint) {\n\tif (isAmbiguous(codePoint)) {\n\t\treturn 'ambiguous';\n\t}\n\n\tif (isFullWidth(codePoint)) {\n\t\treturn 'fullwidth';\n\t}\n\n\tif (isHalfWidth(codePoint)) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (isNarrow(codePoint)) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(codePoint)) {\n\t\treturn 'wide';\n\t}\n\n\treturn 'neutral';\n}\n","import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n","import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\n\n/**\nLogic:\n- Segment graphemes to match how terminals render clusters.\n- Width rules:\n\t1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.\n\t2. RGI emoji clusters (\\p{RGI_Emoji}) are double-width.\n\t3. Minimally-qualified/unqualified emoji clusters (ZWJ sequences with 2+ Extended_Pictographic, or keycap sequences) are double-width.\n\t4. Otherwise use East Asian Width of the cluster's first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).\n*/\n\nconst segmenter = new Intl.Segmenter();\n\n// Whole-cluster zero-width\nconst zeroWidthClusterRegex = /^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Format}|\\p{Mark}|\\p{Surrogate})+$/v;\n\n// Pick the base scalar if the cluster starts with Prepend/Format/Marks\nconst leadingNonPrintingRegex = /^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+/v;\n\n// RGI emoji sequences\nconst rgiEmojiRegex = /^\\p{RGI_Emoji}$/v;\n\n// Detect minimally-qualified/unqualified emoji sequences (missing VS16 but still render as double-width)\nconst unqualifiedKeycapRegex = /^[\\d#*]\\u20E3$/;\nconst extendedPictographicRegex = /\\p{Extended_Pictographic}/gu;\n\nfunction isDoubleWidthNonRgiEmojiSequence(segment) {\n\t// Real emoji clusters are < 30 chars; guard against pathological input\n\tif (segment.length > 50) {\n\t\treturn false;\n\t}\n\n\tif (unqualifiedKeycapRegex.test(segment)) {\n\t\treturn true;\n\t}\n\n\t// ZWJ sequences with 2+ Extended_Pictographic\n\tif (segment.includes('\\u200D')) {\n\t\tconst pictographics = segment.match(extendedPictographicRegex);\n\t\treturn pictographics !== null && pictographics.length >= 2;\n\t}\n\n\treturn false;\n}\n\nfunction baseVisible(segment) {\n\treturn segment.replace(leadingNonPrintingRegex, '');\n}\n\nfunction isZeroWidthCluster(segment) {\n\treturn zeroWidthClusterRegex.test(segment);\n}\n\nfunction trailingHalfwidthWidth(segment, eastAsianWidthOptions) {\n\tlet extra = 0;\n\tif (segment.length > 1) {\n\t\tfor (const char of segment.slice(1)) {\n\t\t\tif (char >= '\\uFF00' && char <= '\\uFFEF') {\n\t\t\t\textra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn extra;\n}\n\nexport default function stringWidth(input, options = {}) {\n\tif (typeof input !== 'string' || input.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tlet string = input;\n\n\t// Avoid calling stripAnsi when there are no ANSI escape sequences (ESC = 0x1B, CSI = 0x9B)\n\tif (!countAnsiEscapeCodes && (string.includes('\\u001B') || string.includes('\\u009B'))) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\t// Fast path: printable ASCII (0x20–0x7E) needs no segmenter, regex, or EAW lookup — width equals length.\n\tif (/^[\\u0020-\\u007E]*$/.test(string)) {\n\t\treturn string.length;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment} of segmenter.segment(string)) {\n\t\t// Zero-width / non-printing clusters\n\t\tif (isZeroWidthCluster(segment)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Emoji width logic\n\t\tif (rgiEmojiRegex.test(segment) || isDoubleWidthNonRgiEmojiSequence(segment)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Everything else: EAW of the cluster’s first visible scalar\n\t\tconst codePoint = baseVisible(segment).codePointAt(0);\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\n\t\t// Add width for trailing Halfwidth and Fullwidth Forms (e.g., ゙, ゚, ー)\n\t\twidth += trailingHalfwidthWidth(segment, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n","export default function isInteractive({stream = process.stdout} = {}) {\n\treturn Boolean(\n\t\tstream && stream.isTTY &&\n\t\tprocess.env.TERM !== 'dumb' &&\n\t\t!('CI' in process.env)\n\t);\n}\n","import process from 'node:process';\n\nconst ASCII_ETX_CODE = 0x03; // Ctrl+C\n\nclass StdinDiscarder {\n\t#activeCount = 0;\n\t#stdin;\n\t#stdinWasPaused = false;\n\t#stdinWasRaw = false;\n\t#handleInputBound = chunk => {\n\t\tif (!chunk?.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst code = typeof chunk === 'string' ? chunk.codePointAt(0) : chunk[0];\n\t\tif (code === ASCII_ETX_CODE) {\n\t\t\tif (process.listenerCount('SIGINT') > 0) {\n\t\t\t\tprocess.emit('SIGINT');\n\t\t\t} else {\n\t\t\t\tprocess.kill(process.pid, 'SIGINT');\n\t\t\t}\n\t\t}\n\t};\n\n\tstart() {\n\t\tthis.#activeCount++;\n\t\tif (this.#activeCount === 1) {\n\t\t\tthis.#realStart();\n\t\t}\n\t}\n\n\tstop() {\n\t\tif (this.#activeCount === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (--this.#activeCount === 0) {\n\t\t\tthis.#realStop();\n\t\t}\n\t}\n\n\t#realStart() {\n\t\tconst {stdin} = process;\n\n\t\tif (process.platform === 'win32' || !stdin?.isTTY || typeof stdin.setRawMode !== 'function') {\n\t\t\tthis.#stdin = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#stdin = stdin;\n\t\tthis.#stdinWasPaused = stdin.isPaused();\n\t\tthis.#stdinWasRaw = Boolean(stdin.isRaw);\n\n\t\tstdin.setRawMode(true);\n\t\tstdin.prependListener('data', this.#handleInputBound);\n\n\t\tif (this.#stdinWasPaused) {\n\t\t\tstdin.resume();\n\t\t}\n\t}\n\n\t#realStop() {\n\t\tif (!this.#stdin) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stdin = this.#stdin;\n\n\t\tstdin.off('data', this.#handleInputBound);\n\n\t\tif (stdin.isTTY) {\n\t\t\tstdin.setRawMode?.(this.#stdinWasRaw);\n\t\t}\n\n\t\tif (this.#stdinWasPaused) {\n\t\t\tstdin.pause();\n\t\t}\n\n\t\tthis.#stdin = undefined;\n\t\tthis.#stdinWasPaused = false;\n\t\tthis.#stdinWasRaw = false;\n\t}\n}\n\nconst stdinDiscarder = new StdinDiscarder();\n\nexport default Object.freeze(stdinDiscarder);\n","import process from 'node:process';\nimport {stripVTControlCharacters} from 'node:util';\nimport chalk from 'chalk';\nimport cliCursor from 'cli-cursor';\nimport cliSpinners from 'cli-spinners';\nimport logSymbols from 'log-symbols';\nimport stringWidth from 'string-width';\nimport isInteractive from 'is-interactive';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport stdinDiscarder from 'stdin-discarder';\n\n// Constants\nconst RENDER_DEFERRAL_TIMEOUT = 200; // Milliseconds to wait before re-rendering after partial chunk write\nconst SYNCHRONIZED_OUTPUT_ENABLE = '\\u001B[?2026h';\nconst SYNCHRONIZED_OUTPUT_DISABLE = '\\u001B[?2026l';\n\n// Global state for concurrent spinner detection\nconst activeHooksPerStream = new Map(); // Stream → ora instance\n\nclass Ora {\n\t#linesToClear = 0;\n\t#frameIndex = -1;\n\t#lastFrameTime = 0;\n\t#options;\n\t#spinner;\n\t#stream;\n\t#id;\n\t#hookedStreams = new Map();\n\t#isInternalWrite = false;\n\t#drainHandler;\n\t#deferRenderTimer;\n\t#isDiscardingStdin = false;\n\tcolor;\n\n\t// Helper to execute writes while preventing hook recursion\n\t#internalWrite(fn) {\n\t\tthis.#isInternalWrite = true;\n\t\ttry {\n\t\t\treturn fn();\n\t\t} finally {\n\t\t\tthis.#isInternalWrite = false;\n\t\t}\n\t}\n\n\t// Helper to render if still spinning\n\t#tryRender() {\n\t\tif (this.isSpinning) {\n\t\t\tthis.render();\n\t\t}\n\t}\n\n\t#stringifyChunk(chunk, encoding) {\n\t\tif (chunk === undefined || chunk === null) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (typeof chunk === 'string') {\n\t\t\treturn chunk;\n\t\t}\n\n\t\t/* eslint-disable n/prefer-global/buffer */\n\t\tif (Buffer.isBuffer(chunk) || ArrayBuffer.isView(chunk)) {\n\t\t\tconst normalizedEncoding = (typeof encoding === 'string' && encoding && encoding !== 'buffer') ? encoding : 'utf8';\n\t\t\treturn Buffer.from(chunk).toString(normalizedEncoding);\n\t\t}\n\t\t/* eslint-enable n/prefer-global/buffer */\n\n\t\treturn String(chunk);\n\t}\n\n\t#chunkTerminatesLine(chunkString) {\n\t\tif (!chunkString) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst lastCharacter = chunkString.at(-1);\n\t\treturn lastCharacter === '\\n' || lastCharacter === '\\r';\n\t}\n\n\t#scheduleRenderDeferral() {\n\t\t// If already deferred, don't reset timer - let it complete\n\t\tif (this.#deferRenderTimer) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#deferRenderTimer = setTimeout(() => {\n\t\t\tthis.#deferRenderTimer = undefined;\n\n\t\t\tif (this.isSpinning) {\n\t\t\t\tthis.#tryRender();\n\t\t\t}\n\t\t}, RENDER_DEFERRAL_TIMEOUT);\n\n\t\tif (typeof this.#deferRenderTimer?.unref === 'function') {\n\t\t\tthis.#deferRenderTimer.unref();\n\t\t}\n\t}\n\n\t#clearRenderDeferral() {\n\t\tif (this.#deferRenderTimer) {\n\t\t\tclearTimeout(this.#deferRenderTimer);\n\t\t\tthis.#deferRenderTimer = undefined;\n\t\t}\n\t}\n\n\t// Helper to build complete line with symbol, text, prefix, and suffix\n\t#buildOutputLine(symbol, text, prefixText, suffixText) {\n\t\tconst fullPrefixText = this.#getFullPrefixText(prefixText, ' ');\n\t\tconst separatorText = symbol ? ' ' : '';\n\t\tconst fullText = (typeof text === 'string') ? separatorText + text : '';\n\t\tconst fullSuffixText = this.#getFullSuffixText(suffixText, ' ');\n\t\treturn fullPrefixText + symbol + fullText + fullSuffixText;\n\t}\n\n\tconstructor(options) {\n\t\tif (typeof options === 'string') {\n\t\t\toptions = {\n\t\t\t\ttext: options,\n\t\t\t};\n\t\t}\n\n\t\tthis.#options = {\n\t\t\tcolor: 'cyan',\n\t\t\tstream: process.stderr,\n\t\t\tdiscardStdin: true,\n\t\t\thideCursor: true,\n\t\t\t...options,\n\t\t};\n\n\t\t// Public\n\t\tthis.color = this.#options.color;\n\n\t\tthis.#stream = this.#options.stream;\n\n\t\t// Normalize isEnabled and isSilent into options\n\t\tif (typeof this.#options.isEnabled !== 'boolean') {\n\t\t\tthis.#options.isEnabled = isInteractive({stream: this.#stream});\n\t\t}\n\n\t\tif (typeof this.#options.isSilent !== 'boolean') {\n\t\t\tthis.#options.isSilent = false;\n\t\t}\n\n\t\t// Set *after* `this.#stream`.\n\t\t// Store original interval before spinner setter clears it\n\t\tconst userInterval = this.#options.interval;\n\t\t// It's important that these use the public setters.\n\t\tthis.spinner = this.#options.spinner;\n\t\tthis.#options.interval = userInterval;\n\t\tthis.text = this.#options.text;\n\t\tthis.prefixText = this.#options.prefixText;\n\t\tthis.suffixText = this.#options.suffixText;\n\t\tthis.indent = this.#options.indent;\n\n\t\tif (process.env.NODE_ENV === 'test') {\n\t\t\tthis._stream = this.#stream;\n\t\t\tthis._isEnabled = this.#options.isEnabled;\n\n\t\t\tObject.defineProperty(this, '_linesToClear', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#linesToClear;\n\t\t\t\t},\n\t\t\t\tset(newValue) {\n\t\t\t\t\tthis.#linesToClear = newValue;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_frameIndex', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#frameIndex;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_lineCount', {\n\t\t\t\tget() {\n\t\t\t\t\tconst columns = this.#stream.columns ?? 80;\n\t\t\t\t\tconst prefixText = typeof this.#options.prefixText === 'function' ? '' : this.#options.prefixText;\n\t\t\t\t\tconst suffixText = typeof this.#options.suffixText === 'function' ? '' : this.#options.suffixText;\n\t\t\t\t\tconst fullPrefixText = (typeof prefixText === 'string' && prefixText !== '') ? prefixText + ' ' : '';\n\t\t\t\t\tconst fullSuffixText = (typeof suffixText === 'string' && suffixText !== '') ? ' ' + suffixText : '';\n\t\t\t\t\tconst spinnerChar = '-';\n\t\t\t\t\tconst fullText = ' '.repeat(this.#options.indent) + fullPrefixText + spinnerChar + (typeof this.#options.text === 'string' ? ' ' + this.#options.text : '') + fullSuffixText;\n\t\t\t\t\treturn this.#computeLineCountFrom(fullText, columns);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tget indent() {\n\t\treturn this.#options.indent;\n\t}\n\n\tset indent(indent = 0) {\n\t\tif (!(indent >= 0 && Number.isInteger(indent))) {\n\t\t\tthrow new Error('The `indent` option must be an integer from 0 and up');\n\t\t}\n\n\t\tthis.#options.indent = indent;\n\t}\n\n\tget interval() {\n\t\treturn this.#options.interval ?? this.#spinner.interval ?? 100;\n\t}\n\n\tget spinner() {\n\t\treturn this.#spinner;\n\t}\n\n\tset spinner(spinner) {\n\t\tthis.#frameIndex = -1;\n\t\tthis.#options.interval = undefined;\n\n\t\tif (typeof spinner === 'object') {\n\t\t\tif (!Array.isArray(spinner.frames) || spinner.frames.length === 0 || spinner.frames.some(frame => typeof frame !== 'string')) {\n\t\t\t\tthrow new Error('The given spinner must have a non-empty `frames` array of strings');\n\t\t\t}\n\n\t\t\tif (spinner.interval !== undefined && !(Number.isInteger(spinner.interval) && spinner.interval > 0)) {\n\t\t\t\tthrow new Error('`spinner.interval` must be a positive integer if provided');\n\t\t\t}\n\n\t\t\tthis.#spinner = spinner;\n\t\t} else if (!isUnicodeSupported()) {\n\t\t\tthis.#spinner = cliSpinners.line;\n\t\t} else if (spinner === undefined) {\n\t\t\t// Set default spinner\n\t\t\tthis.#spinner = cliSpinners.dots;\n\t\t} else if (spinner !== 'default' && cliSpinners[spinner]) {\n\t\t\tthis.#spinner = cliSpinners[spinner];\n\t\t} else {\n\t\t\tthrow new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);\n\t\t}\n\t}\n\n\tget text() {\n\t\treturn this.#options.text;\n\t}\n\n\tset text(value = '') {\n\t\tthis.#options.text = value;\n\t}\n\n\tget prefixText() {\n\t\treturn this.#options.prefixText;\n\t}\n\n\tset prefixText(value = '') {\n\t\tthis.#options.prefixText = value;\n\t}\n\n\tget suffixText() {\n\t\treturn this.#options.suffixText;\n\t}\n\n\tset suffixText(value = '') {\n\t\tthis.#options.suffixText = value;\n\t}\n\n\tget isSpinning() {\n\t\treturn this.#id !== undefined;\n\t}\n\n\t#formatAffix(value, separator, placeBefore = false) {\n\t\tconst resolved = typeof value === 'function' ? value() : value;\n\t\tif (typeof resolved === 'string' && resolved !== '') {\n\t\t\treturn placeBefore ? (separator + resolved) : (resolved + separator);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\t#getFullPrefixText(prefixText = this.#options.prefixText, postfix = ' ') {\n\t\treturn this.#formatAffix(prefixText, postfix, false);\n\t}\n\n\t#getFullSuffixText(suffixText = this.#options.suffixText, prefix = ' ') {\n\t\treturn this.#formatAffix(suffixText, prefix, true);\n\t}\n\n\t#computeLineCountFrom(text, columns) {\n\t\tlet count = 0;\n\t\tfor (const line of stripVTControlCharacters(text).split('\\n')) {\n\t\t\tcount += Math.max(1, Math.ceil(stringWidth(line) / columns));\n\t\t}\n\n\t\treturn count;\n\t}\n\n\tget isEnabled() {\n\t\treturn this.#options.isEnabled && !this.#options.isSilent;\n\t}\n\n\tset isEnabled(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isEnabled` option must be a boolean');\n\t\t}\n\n\t\tthis.#options.isEnabled = value;\n\t}\n\n\tget isSilent() {\n\t\treturn this.#options.isSilent;\n\t}\n\n\tset isSilent(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isSilent` option must be a boolean');\n\t\t}\n\n\t\tthis.#options.isSilent = value;\n\t}\n\n\tframe() {\n\t\t// Only advance frame if enough time has passed (throttle to interval)\n\t\tconst now = Date.now();\n\t\tif (this.#frameIndex === -1 || now - this.#lastFrameTime >= this.interval) {\n\t\t\tthis.#frameIndex = (this.#frameIndex + 1) % this.#spinner.frames.length;\n\t\t\tthis.#lastFrameTime = now;\n\t\t}\n\n\t\tconst {frames} = this.#spinner;\n\t\tlet frame = frames[this.#frameIndex];\n\n\t\tif (this.color) {\n\t\t\tframe = chalk[this.color](frame);\n\t\t}\n\n\t\tconst fullPrefixText = this.#getFullPrefixText(this.#options.prefixText, ' ');\n\t\tconst fullText = typeof this.text === 'string' ? ' ' + this.text : '';\n\t\tconst fullSuffixText = this.#getFullSuffixText(this.#options.suffixText, ' ');\n\n\t\treturn fullPrefixText + frame + fullText + fullSuffixText;\n\t}\n\n\tclear() {\n\t\tif (!this.isEnabled || !this.#stream.isTTY) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Protect cursor control methods (cursorTo, moveCursor, clearLine) which internally call stream.write\n\t\tthis.#internalWrite(() => {\n\t\t\tthis.#stream.cursorTo(0);\n\n\t\t\tfor (let index = 0; index < this.#linesToClear; index++) {\n\t\t\t\tif (index > 0) {\n\t\t\t\t\tthis.#stream.moveCursor(0, -1);\n\t\t\t\t}\n\n\t\t\t\tthis.#stream.clearLine(1);\n\t\t\t}\n\n\t\t\tif (this.#options.indent) {\n\t\t\t\tthis.#stream.cursorTo(this.#options.indent);\n\t\t\t}\n\t\t});\n\n\t\tthis.#linesToClear = 0;\n\n\t\treturn this;\n\t}\n\n\t// Helper to hook a single stream\n\t#hookStream(stream) {\n\t\tif (!stream || this.#hookedStreams.has(stream) || !stream.isTTY || typeof stream.write !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Detect concurrent spinners\n\t\tif (activeHooksPerStream.has(stream)) {\n\t\t\tconsole.warn('[ora] Multiple concurrent spinners detected. This may cause visual corruption. Use one spinner at a time.');\n\t\t}\n\n\t\tconst originalWrite = stream.write;\n\t\tthis.#hookedStreams.set(stream, originalWrite);\n\t\tactiveHooksPerStream.set(stream, this);\n\t\tstream.write = (chunk, encoding, callback) => this.#hookedWrite(stream, originalWrite, chunk, encoding, callback);\n\t}\n\n\t/**\n\tIntercept stream writes while spinner is active to handle external writes cleanly without visual corruption.\n\tHooks process stdio streams and the active spinner stream so console.log(), console.error(), and direct writes stay tidy.\n\t*/\n\t#installHook() {\n\t\tif (!this.isEnabled || this.#hookedStreams.size > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst streamsToHook = new Set([this.#stream, process.stdout, process.stderr]);\n\n\t\tfor (const stream of streamsToHook) {\n\t\t\tthis.#hookStream(stream);\n\t\t}\n\t}\n\n\t#uninstallHook() {\n\t\tfor (const [stream, originalWrite] of this.#hookedStreams) {\n\t\t\tstream.write = originalWrite;\n\t\t\tif (activeHooksPerStream.get(stream) === this) {\n\t\t\t\tactiveHooksPerStream.delete(stream);\n\t\t\t}\n\t\t}\n\n\t\tthis.#hookedStreams.clear();\n\t}\n\n\t// eslint-disable-next-line max-params -- Need stream and originalWrite for multi-stream support\n\t#hookedWrite(stream, originalWrite, chunk, encoding, callback) {\n\t\t// Handle both write(chunk, encoding, callback) and write(chunk, callback) signatures\n\t\tif (typeof encoding === 'function') {\n\t\t\tcallback = encoding;\n\t\t\tencoding = undefined;\n\t\t}\n\n\t\t// Pass through our own internal writes (spinner rendering, cursor control)\n\t\tif (this.#isInternalWrite) {\n\t\t\treturn originalWrite.call(stream, chunk, encoding, callback);\n\t\t}\n\n\t\t// External write detected - clear spinner, write content, re-render if appropriate\n\t\tthis.clear();\n\n\t\tconst chunkString = this.#stringifyChunk(chunk, encoding);\n\t\tconst chunkTerminatesLine = this.#chunkTerminatesLine(chunkString);\n\n\t\tconst writeResult = originalWrite.call(stream, chunk, encoding, callback);\n\n\t\t// Schedule or clear render deferral based on chunk content\n\t\tif (chunkTerminatesLine) {\n\t\t\tthis.#clearRenderDeferral();\n\t\t} else if (chunkString.length > 0) {\n\t\t\tthis.#scheduleRenderDeferral();\n\t\t}\n\n\t\t// Re-render spinner below the new output if still spinning and not deferred\n\t\tif (this.isSpinning && !this.#deferRenderTimer) {\n\t\t\tthis.render();\n\t\t}\n\n\t\treturn writeResult;\n\t}\n\n\trender() {\n\t\tif (!this.isEnabled || this.#drainHandler || this.#deferRenderTimer) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst useSynchronizedOutput = this.#stream.isTTY;\n\t\tlet shouldDisableSynchronizedOutput = false;\n\n\t\ttry {\n\t\t\tif (useSynchronizedOutput) {\n\t\t\t\tthis.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_ENABLE));\n\t\t\t\tshouldDisableSynchronizedOutput = true;\n\t\t\t}\n\n\t\t\tthis.clear();\n\n\t\t\tlet frameContent = this.frame();\n\t\t\tconst columns = this.#stream.columns ?? 80;\n\t\t\tconst actualLineCount = this.#computeLineCountFrom(frameContent, columns);\n\n\t\t\t// If content would exceed viewport height, truncate it to prevent garbage\n\t\t\tconst consoleHeight = this.#stream.rows;\n\t\t\tif (consoleHeight && consoleHeight > 1 && actualLineCount > consoleHeight) {\n\t\t\t\tconst lines = frameContent.split('\\n');\n\t\t\t\tconst maxLines = consoleHeight - 1; // Reserve one line for truncation message\n\t\t\t\tframeContent = [...lines.slice(0, maxLines), '... (content truncated to fit terminal)'].join('\\n');\n\t\t\t}\n\n\t\t\tconst canContinue = this.#internalWrite(() => this.#stream.write(frameContent));\n\n\t\t\t// Handle backpressure - pause rendering if stream buffer is full\n\t\t\tif (canContinue === false && this.#stream.isTTY) {\n\t\t\t\tthis.#drainHandler = () => {\n\t\t\t\t\tthis.#drainHandler = undefined;\n\t\t\t\t\tthis.#tryRender();\n\t\t\t\t};\n\n\t\t\t\tthis.#stream.once('drain', this.#drainHandler);\n\t\t\t}\n\n\t\t\tthis.#linesToClear = this.#computeLineCountFrom(frameContent, columns);\n\t\t} finally {\n\t\t\tif (shouldDisableSynchronizedOutput) {\n\t\t\t\tthis.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_DISABLE));\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tstart(text) {\n\t\tif (text) {\n\t\t\tthis.text = text;\n\t\t}\n\n\t\tif (this.isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this.isEnabled) {\n\t\t\tconst symbol = this.text ? '-' : '';\n\t\t\tconst line = ' '.repeat(this.#options.indent) + this.#buildOutputLine(symbol, this.text, this.#options.prefixText, this.#options.suffixText);\n\n\t\t\tif (line.trim() !== '') {\n\t\t\t\tthis.#internalWrite(() => this.#stream.write(line + '\\n'));\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.isSpinning) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.#options.hideCursor) {\n\t\t\tcliCursor.hide(this.#stream);\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY) {\n\t\t\tstdinDiscarder.start();\n\t\t\tthis.#isDiscardingStdin = true;\n\t\t}\n\n\t\tthis.#installHook();\n\t\tthis.render();\n\t\tthis.#id = setInterval(this.render.bind(this), this.interval);\n\n\t\treturn this;\n\t}\n\n\tstop() {\n\t\tclearInterval(this.#id);\n\t\tthis.#id = undefined;\n\t\tthis.#frameIndex = -1;\n\t\tthis.#lastFrameTime = 0;\n\n\t\tthis.#clearRenderDeferral();\n\t\tthis.#uninstallHook();\n\n\t\t// Clean up drain handler if it exists\n\t\tif (this.#drainHandler) {\n\t\t\tthis.#stream.removeListener('drain', this.#drainHandler);\n\t\t\tthis.#drainHandler = undefined;\n\t\t}\n\n\t\tif (this.isEnabled) {\n\t\t\tthis.clear();\n\t\t\tif (this.#options.hideCursor) {\n\t\t\t\tcliCursor.show(this.#stream);\n\t\t\t}\n\t\t}\n\n\t\tif (this.#isDiscardingStdin) {\n\t\t\tthis.#isDiscardingStdin = false;\n\t\t\tstdinDiscarder.stop();\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tsucceed(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.success, text});\n\t}\n\n\tfail(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.error, text});\n\t}\n\n\twarn(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.warning, text});\n\t}\n\n\tinfo(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.info, text});\n\t}\n\n\tstopAndPersist(options = {}) {\n\t\tif (this.isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst symbol = options.symbol ?? ' ';\n\t\tconst text = options.text ?? this.text;\n\t\tconst prefixText = options.prefixText ?? this.#options.prefixText;\n\t\tconst suffixText = options.suffixText ?? this.#options.suffixText;\n\n\t\tconst textToWrite = this.#buildOutputLine(symbol, text, prefixText, suffixText) + '\\n';\n\n\t\tthis.stop();\n\t\tthis.#internalWrite(() => this.#stream.write(textToWrite));\n\n\t\treturn this;\n\t}\n}\n\nexport default function ora(options) {\n\treturn new Ora(options);\n}\n\nexport async function oraPromise(action, options) {\n\tconst actionIsFunction = typeof action === 'function';\n\tconst actionIsPromise = typeof action.then === 'function';\n\n\tif (!actionIsFunction && !actionIsPromise) {\n\t\tthrow new TypeError('Parameter `action` must be a Function or a Promise');\n\t}\n\n\tconst {successText, failText} = typeof options === 'object'\n\t\t? options\n\t\t: {successText: undefined, failText: undefined};\n\n\tconst spinner = ora(options).start();\n\n\ttry {\n\t\tconst promise = actionIsFunction ? action(spinner) : action;\n\t\tconst result = await promise;\n\n\t\tspinner.succeed(successText === undefined\n\t\t\t? undefined\n\t\t\t: (typeof successText === 'string' ? successText : successText(result)));\n\n\t\treturn result;\n\t} catch (error) {\n\t\tspinner.fail(failText === undefined\n\t\t\t? undefined\n\t\t\t: (typeof failText === 'string' ? failText : failText(error)));\n\n\t\tthrow error;\n\t}\n}\n\nexport {default as spinners} from 'cli-spinners';\n","export const isUpKey = (key, keybindings = []) => \n// The up key\nkey.name === 'up' ||\n // Vim keybinding: hjkl keys map to left/down/up/right\n (keybindings.includes('vim') && key.name === 'k') ||\n // Emacs keybinding: Ctrl+P means \"previous\" in Emacs navigation conventions\n (keybindings.includes('emacs') && key.ctrl && key.name === 'p');\nexport const isDownKey = (key, keybindings = []) => \n// The down key\nkey.name === 'down' ||\n // Vim keybinding: hjkl keys map to left/down/up/right\n (keybindings.includes('vim') && key.name === 'j') ||\n // Emacs keybinding: Ctrl+N means \"next\" in Emacs navigation conventions\n (keybindings.includes('emacs') && key.ctrl && key.name === 'n');\nexport const isSpaceKey = (key) => key.name === 'space';\nexport const isBackspaceKey = (key) => key.name === 'backspace';\nexport const isTabKey = (key) => key.name === 'tab';\nexport const isNumberKey = (key) => '1234567890'.includes(key.name);\nexport const isEnterKey = (key) => key.name === 'enter' || key.name === 'return';\nexport const isShiftKey = (key) => key.shift;\n","export class AbortPromptError extends Error {\n name = 'AbortPromptError';\n message = 'Prompt was aborted';\n constructor(options) {\n super();\n this.cause = options?.cause;\n }\n}\nexport class CancelPromptError extends Error {\n name = 'CancelPromptError';\n message = 'Prompt was canceled';\n}\nexport class ExitPromptError extends Error {\n name = 'ExitPromptError';\n}\nexport class HookError extends Error {\n name = 'HookError';\n}\nexport class ValidationError extends Error {\n name = 'ValidationError';\n}\n","/* eslint @typescript-eslint/no-explicit-any: [\"off\"] */\nimport { AsyncLocalStorage, AsyncResource } from 'node:async_hooks';\nimport { HookError, ValidationError } from \"./errors.js\";\nconst hookStorage = new AsyncLocalStorage();\nfunction createStore(rl) {\n const store = {\n rl,\n hooks: [],\n hooksCleanup: [],\n hooksEffect: [],\n index: 0,\n handleChange() { },\n };\n return store;\n}\n// Run callback in with the hook engine setup.\nexport function withHooks(rl, cb) {\n const store = createStore(rl);\n return hookStorage.run(store, () => {\n function cycle(render) {\n store.handleChange = () => {\n store.index = 0;\n render();\n };\n store.handleChange();\n }\n return cb(cycle);\n });\n}\n// Safe getStore utility that'll return the store or throw if undefined.\nfunction getStore() {\n const store = hookStorage.getStore();\n if (!store) {\n throw new HookError('[Inquirer] Hook functions can only be called from within a prompt');\n }\n return store;\n}\nexport function readline() {\n return getStore().rl;\n}\n// Merge state updates happening within the callback function to avoid multiple renders.\nexport function withUpdates(fn) {\n const wrapped = (...args) => {\n const store = getStore();\n let shouldUpdate = false;\n const oldHandleChange = store.handleChange;\n store.handleChange = () => {\n shouldUpdate = true;\n };\n const returnValue = fn(...args);\n if (shouldUpdate) {\n oldHandleChange();\n }\n store.handleChange = oldHandleChange;\n return returnValue;\n };\n return AsyncResource.bind(wrapped);\n}\nexport function withPointer(cb) {\n const store = getStore();\n const { index } = store;\n const pointer = {\n get() {\n return store.hooks[index];\n },\n set(value) {\n store.hooks[index] = value;\n },\n initialized: index in store.hooks,\n };\n const returnValue = cb(pointer);\n store.index++;\n return returnValue;\n}\nexport function handleChange() {\n getStore().handleChange();\n}\nexport const effectScheduler = {\n queue(cb) {\n const store = getStore();\n const { index } = store;\n store.hooksEffect.push(() => {\n store.hooksCleanup[index]?.();\n const cleanFn = cb(readline());\n if (cleanFn != null && typeof cleanFn !== 'function') {\n throw new ValidationError('useEffect return value must be a cleanup function or nothing.');\n }\n store.hooksCleanup[index] = cleanFn;\n });\n },\n run() {\n const store = getStore();\n withUpdates(() => {\n store.hooksEffect.forEach((effect) => {\n effect();\n });\n // Warning: Clean the hooks before exiting the `withUpdates` block.\n // Failure to do so means an updates would hit the same effects again.\n store.hooksEffect.length = 0;\n })();\n },\n clearAll() {\n const store = getStore();\n store.hooksCleanup.forEach((cleanFn) => {\n cleanFn?.();\n });\n store.hooksEffect.length = 0;\n store.hooksCleanup.length = 0;\n },\n};\n","import { AsyncResource } from 'node:async_hooks';\nimport { withPointer, handleChange } from \"./hook-engine.js\";\nexport function useState(defaultValue) {\n return withPointer((pointer) => {\n const setState = AsyncResource.bind(function setState(newValue) {\n // Noop if the value is still the same.\n if (pointer.get() !== newValue) {\n pointer.set(newValue);\n // Trigger re-render\n handleChange();\n }\n });\n if (pointer.initialized) {\n return [pointer.get(), setState];\n }\n const value = typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n pointer.set(value);\n return [value, setState];\n });\n}\n","import { withPointer, effectScheduler } from \"./hook-engine.js\";\nexport function useEffect(cb, depArray) {\n withPointer((pointer) => {\n const oldDeps = pointer.get();\n const hasChanged = !Array.isArray(oldDeps) || depArray.some((dep, i) => !Object.is(dep, oldDeps[i]));\n if (hasChanged) {\n effectScheduler.queue(cb);\n }\n pointer.set(depArray);\n });\n}\n","// process.env dot-notation access prints:\n// Property 'TERM' comes from an index signature, so it must be accessed with ['TERM'].ts(4111)\n/* eslint dot-notation: [\"off\"] */\nimport process from 'node:process';\n// Ported from is-unicode-supported\nfunction isUnicodeSupported() {\n if (process.platform !== 'win32') {\n return process.env['TERM'] !== 'linux'; // Linux console (kernel)\n }\n return (Boolean(process.env['WT_SESSION']) || // Windows Terminal\n Boolean(process.env['TERMINUS_SUBLIME']) || // Terminus (<0.2.27)\n process.env['ConEmuTask'] === '{cmd::Cmder}' || // ConEmu and cmder\n process.env['TERM_PROGRAM'] === 'Terminus-Sublime' ||\n process.env['TERM_PROGRAM'] === 'vscode' ||\n process.env['TERM'] === 'xterm-256color' ||\n process.env['TERM'] === 'alacritty' ||\n process.env['TERMINAL_EMULATOR'] === 'JetBrains-JediTerm');\n}\n// Ported from figures\nconst common = {\n circleQuestionMark: '(?)',\n questionMarkPrefix: '(?)',\n square: '█',\n squareDarkShade: '▓',\n squareMediumShade: '▒',\n squareLightShade: '░',\n squareTop: '▀',\n squareBottom: '▄',\n squareLeft: '▌',\n squareRight: '▐',\n squareCenter: '■',\n bullet: '●',\n dot: '․',\n ellipsis: '…',\n pointerSmall: '›',\n triangleUp: '▲',\n triangleUpSmall: '▴',\n triangleDown: '▼',\n triangleDownSmall: '▾',\n triangleLeftSmall: '◂',\n triangleRightSmall: '▸',\n home: '⌂',\n heart: '♥',\n musicNote: '♪',\n musicNoteBeamed: '♫',\n arrowUp: '↑',\n arrowDown: '↓',\n arrowLeft: '←',\n arrowRight: '→',\n arrowLeftRight: '↔',\n arrowUpDown: '↕',\n almostEqual: '≈',\n notEqual: '≠',\n lessOrEqual: '≤',\n greaterOrEqual: '≥',\n identical: '≡',\n infinity: '∞',\n subscriptZero: '₀',\n subscriptOne: '₁',\n subscriptTwo: '₂',\n subscriptThree: '₃',\n subscriptFour: '₄',\n subscriptFive: '₅',\n subscriptSix: '₆',\n subscriptSeven: '₇',\n subscriptEight: '₈',\n subscriptNine: '₉',\n oneHalf: '½',\n oneThird: '⅓',\n oneQuarter: '¼',\n oneFifth: '⅕',\n oneSixth: '⅙',\n oneEighth: '⅛',\n twoThirds: '⅔',\n twoFifths: '⅖',\n threeQuarters: '¾',\n threeFifths: '⅗',\n threeEighths: '⅜',\n fourFifths: '⅘',\n fiveSixths: '⅚',\n fiveEighths: '⅝',\n sevenEighths: '⅞',\n line: '─',\n lineBold: '━',\n lineDouble: '═',\n lineDashed0: '┄',\n lineDashed1: '┅',\n lineDashed2: '┈',\n lineDashed3: '┉',\n lineDashed4: '╌',\n lineDashed5: '╍',\n lineDashed6: '╴',\n lineDashed7: '╶',\n lineDashed8: '╸',\n lineDashed9: '╺',\n lineDashed10: '╼',\n lineDashed11: '╾',\n lineDashed12: '−',\n lineDashed13: '–',\n lineDashed14: '‐',\n lineDashed15: '⁃',\n lineVertical: '│',\n lineVerticalBold: '┃',\n lineVerticalDouble: '║',\n lineVerticalDashed0: '┆',\n lineVerticalDashed1: '┇',\n lineVerticalDashed2: '┊',\n lineVerticalDashed3: '┋',\n lineVerticalDashed4: '╎',\n lineVerticalDashed5: '╏',\n lineVerticalDashed6: '╵',\n lineVerticalDashed7: '╷',\n lineVerticalDashed8: '╹',\n lineVerticalDashed9: '╻',\n lineVerticalDashed10: '╽',\n lineVerticalDashed11: '╿',\n lineDownLeft: '┐',\n lineDownLeftArc: '╮',\n lineDownBoldLeftBold: '┓',\n lineDownBoldLeft: '┒',\n lineDownLeftBold: '┑',\n lineDownDoubleLeftDouble: '╗',\n lineDownDoubleLeft: '╖',\n lineDownLeftDouble: '╕',\n lineDownRight: '┌',\n lineDownRightArc: '╭',\n lineDownBoldRightBold: '┏',\n lineDownBoldRight: '┎',\n lineDownRightBold: '┍',\n lineDownDoubleRightDouble: '╔',\n lineDownDoubleRight: '╓',\n lineDownRightDouble: '╒',\n lineUpLeft: '┘',\n lineUpLeftArc: '╯',\n lineUpBoldLeftBold: '┛',\n lineUpBoldLeft: '┚',\n lineUpLeftBold: '┙',\n lineUpDoubleLeftDouble: '╝',\n lineUpDoubleLeft: '╜',\n lineUpLeftDouble: '╛',\n lineUpRight: '└',\n lineUpRightArc: '╰',\n lineUpBoldRightBold: '┗',\n lineUpBoldRight: '┖',\n lineUpRightBold: '┕',\n lineUpDoubleRightDouble: '╚',\n lineUpDoubleRight: '╙',\n lineUpRightDouble: '╘',\n lineUpDownLeft: '┤',\n lineUpBoldDownBoldLeftBold: '┫',\n lineUpBoldDownBoldLeft: '┨',\n lineUpDownLeftBold: '┥',\n lineUpBoldDownLeftBold: '┩',\n lineUpDownBoldLeftBold: '┪',\n lineUpDownBoldLeft: '┧',\n lineUpBoldDownLeft: '┦',\n lineUpDoubleDownDoubleLeftDouble: '╣',\n lineUpDoubleDownDoubleLeft: '╢',\n lineUpDownLeftDouble: '╡',\n lineUpDownRight: '├',\n lineUpBoldDownBoldRightBold: '┣',\n lineUpBoldDownBoldRight: '┠',\n lineUpDownRightBold: '┝',\n lineUpBoldDownRightBold: '┡',\n lineUpDownBoldRightBold: '┢',\n lineUpDownBoldRight: '┟',\n lineUpBoldDownRight: '┞',\n lineUpDoubleDownDoubleRightDouble: '╠',\n lineUpDoubleDownDoubleRight: '╟',\n lineUpDownRightDouble: '╞',\n lineDownLeftRight: '┬',\n lineDownBoldLeftBoldRightBold: '┳',\n lineDownLeftBoldRightBold: '┯',\n lineDownBoldLeftRight: '┰',\n lineDownBoldLeftBoldRight: '┱',\n lineDownBoldLeftRightBold: '┲',\n lineDownLeftRightBold: '┮',\n lineDownLeftBoldRight: '┭',\n lineDownDoubleLeftDoubleRightDouble: '╦',\n lineDownDoubleLeftRight: '╥',\n lineDownLeftDoubleRightDouble: '╤',\n lineUpLeftRight: '┴',\n lineUpBoldLeftBoldRightBold: '┻',\n lineUpLeftBoldRightBold: '┷',\n lineUpBoldLeftRight: '┸',\n lineUpBoldLeftBoldRight: '┹',\n lineUpBoldLeftRightBold: '┺',\n lineUpLeftRightBold: '┶',\n lineUpLeftBoldRight: '┵',\n lineUpDoubleLeftDoubleRightDouble: '╩',\n lineUpDoubleLeftRight: '╨',\n lineUpLeftDoubleRightDouble: '╧',\n lineUpDownLeftRight: '┼',\n lineUpBoldDownBoldLeftBoldRightBold: '╋',\n lineUpDownBoldLeftBoldRightBold: '╈',\n lineUpBoldDownLeftBoldRightBold: '╇',\n lineUpBoldDownBoldLeftRightBold: '╊',\n lineUpBoldDownBoldLeftBoldRight: '╉',\n lineUpBoldDownLeftRight: '╀',\n lineUpDownBoldLeftRight: '╁',\n lineUpDownLeftBoldRight: '┽',\n lineUpDownLeftRightBold: '┾',\n lineUpBoldDownBoldLeftRight: '╂',\n lineUpDownLeftBoldRightBold: '┿',\n lineUpBoldDownLeftBoldRight: '╃',\n lineUpBoldDownLeftRightBold: '╄',\n lineUpDownBoldLeftBoldRight: '╅',\n lineUpDownBoldLeftRightBold: '╆',\n lineUpDoubleDownDoubleLeftDoubleRightDouble: '╬',\n lineUpDoubleDownDoubleLeftRight: '╫',\n lineUpDownLeftDoubleRightDouble: '╪',\n lineCross: '╳',\n lineBackslash: '╲',\n lineSlash: '╱',\n};\nconst specialMainSymbols = {\n tick: '✔',\n info: 'ℹ',\n warning: '⚠',\n cross: '✘',\n squareSmall: '◻',\n squareSmallFilled: '◼',\n circle: '◯',\n circleFilled: '◉',\n circleDotted: '◌',\n circleDouble: '◎',\n circleCircle: 'ⓞ',\n circleCross: 'ⓧ',\n circlePipe: 'Ⓘ',\n radioOn: '◉',\n radioOff: '◯',\n checkboxOn: '☒',\n checkboxOff: '☐',\n checkboxCircleOn: 'ⓧ',\n checkboxCircleOff: 'Ⓘ',\n pointer: '❯',\n triangleUpOutline: '△',\n triangleLeft: '◀',\n triangleRight: '▶',\n lozenge: '◆',\n lozengeOutline: '◇',\n hamburger: '☰',\n smiley: '㋡',\n mustache: '෴',\n star: '★',\n play: '▶',\n nodejs: '⬢',\n oneSeventh: '⅐',\n oneNinth: '⅑',\n oneTenth: '⅒',\n};\nconst specialFallbackSymbols = {\n tick: '√',\n info: 'i',\n warning: '‼',\n cross: '×',\n squareSmall: '□',\n squareSmallFilled: '■',\n circle: '( )',\n circleFilled: '(*)',\n circleDotted: '( )',\n circleDouble: '( )',\n circleCircle: '(○)',\n circleCross: '(×)',\n circlePipe: '(│)',\n radioOn: '(*)',\n radioOff: '( )',\n checkboxOn: '[×]',\n checkboxOff: '[ ]',\n checkboxCircleOn: '(×)',\n checkboxCircleOff: '( )',\n pointer: '>',\n triangleUpOutline: '∆',\n triangleLeft: '◄',\n triangleRight: '►',\n lozenge: '♦',\n lozengeOutline: '◊',\n hamburger: '≡',\n smiley: '☺',\n mustache: '┌─┐',\n star: '✶',\n play: '►',\n nodejs: '♦',\n oneSeventh: '1/7',\n oneNinth: '1/9',\n oneTenth: '1/10',\n};\nexport const mainSymbols = {\n ...common,\n ...specialMainSymbols,\n};\nexport const fallbackSymbols = {\n ...common,\n ...specialFallbackSymbols,\n};\nconst shouldUseMain = isUnicodeSupported();\nconst figures = shouldUseMain\n ? mainSymbols\n : fallbackSymbols;\nexport default figures;\nconst replacements = Object.entries(specialMainSymbols);\n// On terminals which do not support Unicode symbols, substitute them to other symbols\nexport const replaceSymbols = (string, { useFallback = !shouldUseMain } = {}) => {\n if (useFallback) {\n for (const [key, mainSymbol] of replacements) {\n const fallbackSymbol = fallbackSymbols[key];\n if (!fallbackSymbol) {\n throw new Error(`Unable to find fallback for ${key}`);\n }\n string = string.replaceAll(mainSymbol, fallbackSymbol);\n }\n }\n return string;\n};\n","import { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nexport const defaultTheme = {\n prefix: {\n idle: styleText('blue', '?'),\n done: styleText('green', figures.tick),\n },\n spinner: {\n interval: 80,\n frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'].map((frame) => styleText('yellow', frame)),\n },\n style: {\n answer: (text) => styleText('cyan', text),\n message: (text) => styleText('bold', text),\n error: (text) => styleText('red', `> ${text}`),\n defaultAnswer: (text) => styleText('dim', `(${text})`),\n help: (text) => styleText('dim', text),\n highlight: (text) => styleText('cyan', text),\n key: (text) => styleText('cyan', styleText('bold', `<${text}>`)),\n },\n};\n","import { defaultTheme } from \"./theme.js\";\nfunction isPlainObject(value) {\n if (typeof value !== 'object' || value === null)\n return false;\n let proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n}\nfunction deepMerge(...objects) {\n const output = {};\n for (const obj of objects) {\n for (const [key, value] of Object.entries(obj)) {\n const prevValue = output[key];\n output[key] =\n isPlainObject(prevValue) && isPlainObject(value)\n ? deepMerge(prevValue, value)\n : value;\n }\n }\n return output;\n}\nexport function makeTheme(...themes) {\n const themesToMerge = [\n defaultTheme,\n ...themes.filter((theme) => theme != null),\n ];\n return deepMerge(...themesToMerge);\n}\n","import { useState } from \"./use-state.js\";\nimport { useEffect } from \"./use-effect.js\";\nimport { makeTheme } from \"./make-theme.js\";\nexport function usePrefix({ status = 'idle', theme, }) {\n const [showLoader, setShowLoader] = useState(false);\n const [tick, setTick] = useState(0);\n const { prefix, spinner } = makeTheme(theme);\n useEffect(() => {\n if (status === 'loading') {\n let tickInterval;\n let inc = -1;\n // Delay displaying spinner by 300ms, to avoid flickering\n const delayTimeout = setTimeout(() => {\n setShowLoader(true);\n tickInterval = setInterval(() => {\n inc = inc + 1;\n setTick(inc % spinner.frames.length);\n }, spinner.interval);\n }, 300);\n return () => {\n clearTimeout(delayTimeout);\n clearInterval(tickInterval);\n };\n }\n else {\n setShowLoader(false);\n }\n }, [status]);\n if (showLoader) {\n return spinner.frames[tick];\n }\n // There's a delay before we show the loader. So we want to ignore `loading` here, and pass idle instead.\n const iconName = status === 'loading' ? 'idle' : status;\n return typeof prefix === 'string' ? prefix : (prefix[iconName] ?? prefix['idle']);\n}\n","import { withPointer } from \"./hook-engine.js\";\nexport function useMemo(fn, dependencies) {\n return withPointer((pointer) => {\n const prev = pointer.get();\n if (!prev ||\n prev.dependencies.length !== dependencies.length ||\n prev.dependencies.some((dep, i) => dep !== dependencies[i])) {\n const value = fn();\n pointer.set({ value, dependencies });\n return value;\n }\n return prev.value;\n });\n}\n","import { useState } from \"./use-state.js\";\nexport function useRef(val) {\n return useState({ current: val })[0];\n}\n","import { useRef } from \"./use-ref.js\";\nimport { useEffect } from \"./use-effect.js\";\nimport { withUpdates } from \"./hook-engine.js\";\nexport function useKeypress(userHandler) {\n const signal = useRef(userHandler);\n signal.current = userHandler;\n useEffect((rl) => {\n let ignore = false;\n const handler = withUpdates((_input, event) => {\n if (ignore)\n return;\n void signal.current(event, rl);\n });\n rl.input.on('keypress', handler);\n return () => {\n ignore = true;\n rl.input.removeListener('keypress', handler);\n };\n }, []);\n}\n","'use strict';\n\nmodule.exports = cliWidth;\n\nfunction normalizeOpts(options) {\n const defaultOpts = {\n defaultWidth: 0,\n output: process.stdout,\n tty: require('tty'),\n };\n\n if (!options) {\n return defaultOpts;\n }\n\n Object.keys(defaultOpts).forEach(function (key) {\n if (!options[key]) {\n options[key] = defaultOpts[key];\n }\n });\n\n return options;\n}\n\nfunction cliWidth(options) {\n const opts = normalizeOpts(options);\n\n if (opts.output.getWindowSize) {\n return opts.output.getWindowSize()[0] || opts.defaultWidth;\n }\n\n if (opts.tty.getWindowSize) {\n return opts.tty.getWindowSize()[1] || opts.defaultWidth;\n }\n\n if (opts.output.columns) {\n return opts.output.columns;\n }\n\n if (process.env.CLI_WIDTH) {\n const width = parseInt(process.env.CLI_WIDTH, 10);\n\n if (!isNaN(width) && width !== 0) {\n return width;\n }\n }\n\n return opts.defaultWidth;\n}\n","/* MAIN */\nconst getCodePointsLength = (() => {\n const SURROGATE_PAIR_RE = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n return (input) => {\n let surrogatePairsNr = 0;\n SURROGATE_PAIR_RE.lastIndex = 0;\n while (SURROGATE_PAIR_RE.test(input)) {\n surrogatePairsNr += 1;\n }\n return input.length - surrogatePairsNr;\n };\n})();\nconst isFullWidth = (x) => {\n return x === 0x3000 || x >= 0xFF01 && x <= 0xFF60 || x >= 0xFFE0 && x <= 0xFFE6;\n};\nconst isWideNotCJKTNotEmoji = (x) => {\n return x === 0x231B || x === 0x2329 || x >= 0x2FF0 && x <= 0x2FFF || x >= 0x3001 && x <= 0x303E || x >= 0x3099 && x <= 0x30FF || x >= 0x3105 && x <= 0x312F || x >= 0x3131 && x <= 0x318E || x >= 0x3190 && x <= 0x31E3 || x >= 0x31EF && x <= 0x321E || x >= 0x3220 && x <= 0x3247 || x >= 0x3250 && x <= 0x4DBF || x >= 0xFE10 && x <= 0xFE19 || x >= 0xFE30 && x <= 0xFE52 || x >= 0xFE54 && x <= 0xFE66 || x >= 0xFE68 && x <= 0xFE6B || x >= 0x1F200 && x <= 0x1F202 || x >= 0x1F210 && x <= 0x1F23B || x >= 0x1F240 && x <= 0x1F248 || x >= 0x20000 && x <= 0x2FFFD || x >= 0x30000 && x <= 0x3FFFD;\n};\n/* EXPORT */\nexport { getCodePointsLength, isFullWidth, isWideNotCJKTNotEmoji };\n","/* IMPORT */\nimport { getCodePointsLength, isFullWidth, isWideNotCJKTNotEmoji } from './utils.js';\n/* HELPERS */\nconst ANSI_RE = /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\\u001b\\]8;[^;]*;.*?(?:\\u0007|\\u001b\\u005c)/y;\nconst CONTROL_RE = /[\\x00-\\x08\\x0A-\\x1F\\x7F-\\x9F]{1,1000}/y;\nconst CJKT_WIDE_RE = /(?:(?![\\uFF61-\\uFF9F\\uFF00-\\uFFEF])[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}\\p{Script=Hangul}\\p{Script=Tangut}]){1,1000}/yu;\nconst TAB_RE = /\\t{1,1000}/y;\nconst EMOJI_RE = /[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*/yu;\nconst LATIN_RE = /(?:[\\x20-\\x7E\\xA0-\\xFF](?!\\uFE0F)){1,1000}/y;\nconst MODIFIER_RE = /\\p{M}+/gu;\nconst NO_TRUNCATION = { limit: Infinity, ellipsis: '' };\n/* MAIN */\nconst getStringTruncatedWidth = (input, truncationOptions = {}, widthOptions = {}) => {\n /* CONSTANTS */\n const LIMIT = truncationOptions.limit ?? Infinity;\n const ELLIPSIS = truncationOptions.ellipsis ?? '';\n const ELLIPSIS_WIDTH = truncationOptions?.ellipsisWidth ?? (ELLIPSIS ? getStringTruncatedWidth(ELLIPSIS, NO_TRUNCATION, widthOptions).width : 0);\n const ANSI_WIDTH = 0;\n const CONTROL_WIDTH = widthOptions.controlWidth ?? 0;\n const TAB_WIDTH = widthOptions.tabWidth ?? 8;\n const EMOJI_WIDTH = widthOptions.emojiWidth ?? 2;\n const FULL_WIDTH_WIDTH = 2;\n const REGULAR_WIDTH = widthOptions.regularWidth ?? 1;\n const WIDE_WIDTH = widthOptions.wideWidth ?? FULL_WIDTH_WIDTH;\n const PARSE_BLOCKS = [\n [LATIN_RE, REGULAR_WIDTH],\n [ANSI_RE, ANSI_WIDTH],\n [CONTROL_RE, CONTROL_WIDTH],\n [TAB_RE, TAB_WIDTH],\n [EMOJI_RE, EMOJI_WIDTH],\n [CJKT_WIDE_RE, WIDE_WIDTH],\n ];\n /* STATE */\n let indexPrev = 0;\n let index = 0;\n let length = input.length;\n let lengthExtra = 0;\n let truncationEnabled = false;\n let truncationIndex = length;\n let truncationLimit = Math.max(0, LIMIT - ELLIPSIS_WIDTH);\n let unmatchedStart = 0;\n let unmatchedEnd = 0;\n let width = 0;\n let widthExtra = 0;\n /* PARSE LOOP */\n outer: while (true) {\n /* UNMATCHED */\n if ((unmatchedEnd > unmatchedStart) || (index >= length && index > indexPrev)) {\n const unmatched = input.slice(unmatchedStart, unmatchedEnd) || input.slice(indexPrev, index);\n lengthExtra = 0;\n for (const char of unmatched.replaceAll(MODIFIER_RE, '')) {\n const codePoint = char.codePointAt(0) || 0;\n if (isFullWidth(codePoint)) {\n widthExtra = FULL_WIDTH_WIDTH;\n }\n else if (isWideNotCJKTNotEmoji(codePoint)) {\n widthExtra = WIDE_WIDTH;\n }\n else {\n widthExtra = REGULAR_WIDTH;\n }\n if ((width + widthExtra) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, Math.max(unmatchedStart, indexPrev) + lengthExtra);\n }\n if ((width + widthExtra) > LIMIT) {\n truncationEnabled = true;\n break outer;\n }\n lengthExtra += char.length;\n width += widthExtra;\n }\n unmatchedStart = unmatchedEnd = 0;\n }\n /* EXITING */\n if (index >= length) {\n break outer;\n }\n /* PARSE BLOCKS */\n for (let i = 0, l = PARSE_BLOCKS.length; i < l; i++) {\n const [BLOCK_RE, BLOCK_WIDTH] = PARSE_BLOCKS[i];\n BLOCK_RE.lastIndex = index;\n if (BLOCK_RE.test(input)) {\n lengthExtra = BLOCK_RE === CJKT_WIDE_RE ? getCodePointsLength(input.slice(index, BLOCK_RE.lastIndex)) : BLOCK_RE === EMOJI_RE ? 1 : BLOCK_RE.lastIndex - index;\n widthExtra = lengthExtra * BLOCK_WIDTH;\n if ((width + widthExtra) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / BLOCK_WIDTH));\n }\n if ((width + widthExtra) > LIMIT) {\n truncationEnabled = true;\n break outer;\n }\n width += widthExtra;\n unmatchedStart = indexPrev;\n unmatchedEnd = index;\n index = indexPrev = BLOCK_RE.lastIndex;\n continue outer;\n }\n }\n /* UNMATCHED INDEX */\n index += 1;\n }\n /* RETURN */\n return {\n width: truncationEnabled ? truncationLimit : width,\n index: truncationEnabled ? truncationIndex : length,\n truncated: truncationEnabled,\n ellipsed: truncationEnabled && LIMIT >= ELLIPSIS_WIDTH\n };\n};\n/* EXPORT */\nexport default getStringTruncatedWidth;\n","/* IMPORT */\nimport fastStringTruncatedWidth from 'fast-string-truncated-width';\n/* HELPERS */\nconst NO_TRUNCATION = {\n limit: Infinity,\n ellipsis: '',\n ellipsisWidth: 0,\n};\n/* MAIN */\nconst fastStringWidth = (input, options = {}) => {\n return fastStringTruncatedWidth(input, NO_TRUNCATION, options).width;\n};\n/* EXPORT */\nexport default fastStringWidth;\n","import stringWidth from 'fast-string-width';\nconst ESC = '\\x1B';\nconst CSI = '\\x9B';\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;;`;\nconst GROUP_REGEX = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`, 'y');\nconst getClosingCode = (openingCode) => {\n if (openingCode >= 30 && openingCode <= 37)\n return 39;\n if (openingCode >= 90 && openingCode <= 97)\n return 39;\n if (openingCode >= 40 && openingCode <= 47)\n return 49;\n if (openingCode >= 100 && openingCode <= 107)\n return 49;\n if (openingCode === 1 || openingCode === 2)\n return 22;\n if (openingCode === 3)\n return 23;\n if (openingCode === 4)\n return 24;\n if (openingCode === 7)\n return 27;\n if (openingCode === 8)\n return 28;\n if (openingCode === 9)\n return 29;\n if (openingCode === 0)\n return 0;\n return undefined;\n};\nconst wrapAnsiCode = (code) => `${ESC}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = (url) => `${ESC}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`;\nconst wrapWord = (rows, word, columns) => {\n const characters = word[Symbol.iterator]();\n let isInsideEscape = false;\n let isInsideLinkEscape = false;\n let lastRow = rows.at(-1);\n let visible = lastRow === undefined ? 0 : stringWidth(lastRow);\n let currentCharacter = characters.next();\n let nextCharacter = characters.next();\n let rawCharacterIndex = 0;\n while (!currentCharacter.done) {\n const character = currentCharacter.value;\n const characterLength = stringWidth(character);\n if (visible + characterLength <= columns) {\n rows[rows.length - 1] += character;\n }\n else {\n rows.push(character);\n visible = 0;\n }\n if (character === ESC || character === CSI) {\n isInsideEscape = true;\n isInsideLinkEscape = word.startsWith(ANSI_ESCAPE_LINK, rawCharacterIndex + 1);\n }\n if (isInsideEscape) {\n if (isInsideLinkEscape) {\n if (character === ANSI_ESCAPE_BELL) {\n isInsideEscape = false;\n isInsideLinkEscape = false;\n }\n }\n else if (character === ANSI_SGR_TERMINATOR) {\n isInsideEscape = false;\n }\n }\n else {\n visible += characterLength;\n if (visible === columns && !nextCharacter.done) {\n rows.push('');\n visible = 0;\n }\n }\n currentCharacter = nextCharacter;\n nextCharacter = characters.next();\n rawCharacterIndex += character.length;\n }\n lastRow = rows.at(-1);\n if (!visible && lastRow !== undefined && lastRow.length && rows.length > 1) {\n rows[rows.length - 2] += rows.pop();\n }\n};\nconst stringVisibleTrimSpacesRight = (string) => {\n const words = string.split(' ');\n let last = words.length;\n while (last) {\n if (stringWidth(words[last - 1])) {\n break;\n }\n last--;\n }\n if (last === words.length) {\n return string;\n }\n return words.slice(0, last).join(' ') + words.slice(last).join('');\n};\nconst exec = (string, columns, options = {}) => {\n if (options.trim !== false && string.trim() === '') {\n return '';\n }\n let returnValue = '';\n let escapeCode;\n let escapeUrl;\n const words = string.split(' ');\n let rows = [''];\n let rowLength = 0;\n for (let index = 0; index < words.length; index++) {\n const word = words[index];\n if (options.trim !== false) {\n const row = rows.at(-1) ?? '';\n const trimmed = row.trimStart();\n if (row.length !== trimmed.length) {\n rows[rows.length - 1] = trimmed;\n rowLength = stringWidth(trimmed);\n }\n }\n if (index !== 0) {\n if (rowLength >= columns &&\n (options.wordWrap === false || options.trim === false)) {\n rows.push('');\n rowLength = 0;\n }\n if (rowLength || options.trim === false) {\n rows[rows.length - 1] += ' ';\n rowLength++;\n }\n }\n const wordLength = stringWidth(word);\n if (options.hard && wordLength > columns) {\n const remainingColumns = columns - rowLength;\n const breaksStartingThisLine = 1 + Math.floor((wordLength - remainingColumns - 1) / columns);\n const breaksStartingNextLine = Math.floor((wordLength - 1) / columns);\n if (breaksStartingNextLine < breaksStartingThisLine) {\n rows.push('');\n }\n wrapWord(rows, word, columns);\n rowLength = stringWidth(rows.at(-1) ?? '');\n continue;\n }\n if (rowLength + wordLength > columns && rowLength && wordLength) {\n if (options.wordWrap === false && rowLength < columns) {\n wrapWord(rows, word, columns);\n rowLength = stringWidth(rows.at(-1) ?? '');\n continue;\n }\n rows.push('');\n rowLength = 0;\n }\n if (rowLength + wordLength > columns && options.wordWrap === false) {\n wrapWord(rows, word, columns);\n rowLength = stringWidth(rows.at(-1) ?? '');\n continue;\n }\n rows[rows.length - 1] += word;\n rowLength += wordLength;\n }\n if (options.trim !== false) {\n rows = rows.map((row) => stringVisibleTrimSpacesRight(row));\n }\n const preString = rows.join('\\n');\n let inSurrogate = false;\n for (let i = 0; i < preString.length; i++) {\n const character = preString[i];\n returnValue += character;\n if (!inSurrogate) {\n inSurrogate = character >= '\\ud800' && character <= '\\udbff';\n if (inSurrogate) {\n continue;\n }\n }\n else {\n inSurrogate = false;\n }\n if (character === ESC || character === CSI) {\n GROUP_REGEX.lastIndex = i + 1;\n const groupsResult = GROUP_REGEX.exec(preString);\n const groups = groupsResult?.groups;\n if (groups?.code !== undefined) {\n const code = Number.parseFloat(groups.code);\n escapeCode = code === END_CODE ? undefined : code;\n }\n else if (groups?.uri !== undefined) {\n escapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n }\n }\n if (preString[i + 1] === '\\n') {\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink('');\n }\n const closingCode = escapeCode ? getClosingCode(escapeCode) : undefined;\n if (escapeCode && closingCode) {\n returnValue += wrapAnsiCode(closingCode);\n }\n }\n else if (character === '\\n') {\n if (escapeCode && getClosingCode(escapeCode)) {\n returnValue += wrapAnsiCode(escapeCode);\n }\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink(escapeUrl);\n }\n }\n }\n return returnValue;\n};\nconst CRLF_OR_LF = /\\r?\\n/;\nexport function wrapAnsi(string, columns, options) {\n return String(string)\n .normalize()\n .split(CRLF_OR_LF)\n .map((line) => exec(line, columns, options))\n .join('\\n');\n}\n//# sourceMappingURL=main.js.map","import cliWidth from 'cli-width';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport { readline } from \"./hook-engine.js\";\n/**\n * Force line returns at specific width. This function is ANSI code friendly and it'll\n * ignore invisible codes during width calculation.\n * @param {string} content\n * @param {number} width\n * @return {string}\n */\nexport function breakLines(content, width) {\n return content\n .split('\\n')\n .flatMap((line) => wrapAnsi(line, width, { trim: false, hard: true })\n .split('\\n')\n .map((str) => str.trimEnd()))\n .join('\\n');\n}\n/**\n * Returns the width of the active readline, or 80 as default value.\n * @returns {number}\n */\nexport function readlineWidth() {\n return cliWidth({ defaultWidth: 80, output: readline().output });\n}\n","import { useRef } from \"../use-ref.js\";\nimport { readlineWidth, breakLines } from \"../utils.js\";\nfunction usePointerPosition({ active, renderedItems, pageSize, loop, }) {\n const state = useRef({\n lastPointer: active,\n lastActive: undefined,\n });\n const { lastPointer, lastActive } = state.current;\n const middle = Math.floor(pageSize / 2);\n const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);\n const defaultPointerPosition = renderedItems\n .slice(0, active)\n .reduce((acc, item) => acc + item.length, 0);\n let pointer = defaultPointerPosition;\n if (renderedLength > pageSize) {\n if (loop) {\n /**\n * Creates the next position for the pointer considering an infinitely\n * looping list of items to be rendered on the page.\n *\n * The goal is to progressively move the cursor to the middle position as the user move down, and then keep\n * the cursor there. When the user move up, maintain the cursor position.\n */\n // By default, keep the cursor position as-is.\n pointer = lastPointer;\n if (\n // First render, skip this logic.\n lastActive != null &&\n // Only move the pointer down when the user moves down.\n lastActive < active &&\n // Check user didn't move up across page boundary.\n active - lastActive < pageSize) {\n pointer = Math.min(\n // Furthest allowed position for the pointer is the middle of the list\n middle, Math.abs(active - lastActive) === 1\n ? Math.min(\n // Move the pointer at most the height of the last active item.\n lastPointer + (renderedItems[lastActive]?.length ?? 0), \n // If the user moved by one item, move the pointer to the natural position of the active item as\n // long as it doesn't move the cursor up.\n Math.max(defaultPointerPosition, lastPointer))\n : // Otherwise, move the pointer down by the difference between the active and last active item.\n lastPointer + active - lastActive);\n }\n }\n else {\n /**\n * Creates the next position for the pointer considering a finite list of\n * items to be rendered on a page.\n *\n * The goal is to keep the pointer in the middle of the page whenever possible, until\n * we reach the bounds of the list (top or bottom). In which case, the cursor moves progressively\n * to the bottom or top of the list.\n */\n const spaceUnderActive = renderedItems\n .slice(active)\n .reduce((acc, item) => acc + item.length, 0);\n pointer =\n spaceUnderActive < pageSize - middle\n ? // If the active item is near the end of the list, progressively move the cursor towards the end.\n pageSize - spaceUnderActive\n : // Otherwise, progressively move the pointer to the middle of the list.\n Math.min(defaultPointerPosition, middle);\n }\n }\n // Save state for the next render\n state.current.lastPointer = pointer;\n state.current.lastActive = active;\n return pointer;\n}\nexport function usePagination({ items, active, renderItem, pageSize, loop = true, }) {\n const width = readlineWidth();\n const bound = (num) => ((num % items.length) + items.length) % items.length;\n const renderedItems = items.map((item, index) => {\n if (item == null)\n return [];\n return breakLines(renderItem({ item, index, isActive: index === active }), width).split('\\n');\n });\n const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);\n const renderItemAtIndex = (index) => renderedItems[index] ?? [];\n const pointer = usePointerPosition({ active, renderedItems, pageSize, loop });\n // Render the active item to decide the position.\n // If the active item fits under the pointer, we render it there.\n // Otherwise, we need to render it to fit at the bottom of the page; moving the pointer up.\n const activeItem = renderItemAtIndex(active).slice(0, pageSize);\n const activeItemPosition = pointer + activeItem.length <= pageSize ? pointer : pageSize - activeItem.length;\n // Create an array of lines for the page, and add the lines of the active item into the page\n const pageBuffer = Array.from({ length: pageSize });\n pageBuffer.splice(activeItemPosition, activeItem.length, ...activeItem);\n // Store to prevent rendering the same item twice\n const itemVisited = new Set([active]);\n // Fill the page under the active item\n let bufferPointer = activeItemPosition + activeItem.length;\n let itemPointer = bound(active + 1);\n while (bufferPointer < pageSize &&\n !itemVisited.has(itemPointer) &&\n (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer > active)) {\n const lines = renderItemAtIndex(itemPointer);\n const linesToAdd = lines.slice(0, pageSize - bufferPointer);\n pageBuffer.splice(bufferPointer, linesToAdd.length, ...linesToAdd);\n // Move pointers for next iteration\n itemVisited.add(itemPointer);\n bufferPointer += linesToAdd.length;\n itemPointer = bound(itemPointer + 1);\n }\n // Fill the page over the active item\n bufferPointer = activeItemPosition - 1;\n itemPointer = bound(active - 1);\n while (bufferPointer >= 0 &&\n !itemVisited.has(itemPointer) &&\n (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer < active)) {\n const lines = renderItemAtIndex(itemPointer);\n const linesToAdd = lines.slice(Math.max(0, lines.length - bufferPointer - 1));\n pageBuffer.splice(bufferPointer - linesToAdd.length + 1, linesToAdd.length, ...linesToAdd);\n // Move pointers for next iteration\n itemVisited.add(itemPointer);\n bufferPointer -= linesToAdd.length;\n itemPointer = bound(itemPointer - 1);\n }\n return pageBuffer.filter((line) => typeof line === 'string').join('\\n');\n}\n","const Stream = require('stream')\n\nclass MuteStream extends Stream {\n #isTTY = null\n\n constructor (opts = {}) {\n super(opts)\n this.writable = this.readable = true\n this.muted = false\n this.on('pipe', this._onpipe)\n this.replace = opts.replace\n\n // For readline-type situations\n // This much at the start of a line being redrawn after a ctrl char\n // is seen (such as backspace) won't be redrawn as the replacement\n this._prompt = opts.prompt || null\n this._hadControl = false\n }\n\n #destSrc (key, def) {\n if (this._dest) {\n return this._dest[key]\n }\n if (this._src) {\n return this._src[key]\n }\n return def\n }\n\n #proxy (method, ...args) {\n if (typeof this._dest?.[method] === 'function') {\n this._dest[method](...args)\n }\n if (typeof this._src?.[method] === 'function') {\n this._src[method](...args)\n }\n }\n\n get isTTY () {\n if (this.#isTTY !== null) {\n return this.#isTTY\n }\n return this.#destSrc('isTTY', false)\n }\n\n // basically just get replace the getter/setter with a regular value\n set isTTY (val) {\n this.#isTTY = val\n }\n\n get rows () {\n return this.#destSrc('rows')\n }\n\n get columns () {\n return this.#destSrc('columns')\n }\n\n mute () {\n this.muted = true\n }\n\n unmute () {\n this.muted = false\n }\n\n _onpipe (src) {\n this._src = src\n }\n\n pipe (dest, options) {\n this._dest = dest\n return super.pipe(dest, options)\n }\n\n pause () {\n if (this._src) {\n return this._src.pause()\n }\n }\n\n resume () {\n if (this._src) {\n return this._src.resume()\n }\n }\n\n write (c) {\n if (this.muted) {\n if (!this.replace) {\n return true\n }\n // eslint-disable-next-line no-control-regex\n if (c.match(/^\\u001b/)) {\n if (c.indexOf(this._prompt) === 0) {\n c = c.slice(this._prompt.length)\n c = c.replace(/./g, this.replace)\n c = this._prompt + c\n }\n this._hadControl = true\n return this.emit('data', c)\n } else {\n if (this._prompt && this._hadControl &&\n c.indexOf(this._prompt) === 0) {\n this._hadControl = false\n this.emit('data', this._prompt)\n c = c.slice(this._prompt.length)\n }\n c = c.toString().replace(/./g, this.replace)\n }\n }\n this.emit('data', c)\n }\n\n end (c) {\n if (this.muted) {\n if (c && this.replace) {\n c = c.toString().replace(/./g, this.replace)\n } else {\n c = null\n }\n }\n if (c) {\n this.emit('data', c)\n }\n this.emit('end')\n }\n\n destroy (...args) {\n return this.#proxy('destroy', ...args)\n }\n\n destroySoon (...args) {\n return this.#proxy('destroySoon', ...args)\n }\n\n close (...args) {\n return this.#proxy('close', ...args)\n }\n}\n\nmodule.exports = MuteStream\n","const ESC = '\\u001B[';\n/** Move cursor to first column */\nexport const cursorLeft = ESC + 'G';\n/** Hide the cursor */\nexport const cursorHide = ESC + '?25l';\n/** Show the cursor */\nexport const cursorShow = ESC + '?25h';\n/** Move cursor up by count rows */\nexport const cursorUp = (rows = 1) => (rows > 0 ? `${ESC}${rows}A` : '');\n/** Move cursor down by count rows */\nexport const cursorDown = (rows = 1) => rows > 0 ? `${ESC}${rows}B` : '';\n/** Move cursor to position (x, y) */\nexport const cursorTo = (x, y) => {\n if (typeof y === 'number' && !Number.isNaN(y)) {\n return `${ESC}${y + 1};${x + 1}H`;\n }\n return `${ESC}${x + 1}G`;\n};\nconst eraseLine = ESC + '2K';\n/** Erase the specified number of lines above the cursor */\nexport const eraseLines = (lines) => lines > 0 ? (eraseLine + cursorUp(1)).repeat(lines - 1) + eraseLine + cursorLeft : '';\n","import { stripVTControlCharacters } from 'node:util';\nimport { breakLines, readlineWidth } from \"./utils.js\";\nimport { cursorDown, cursorUp, cursorTo, cursorShow, eraseLines } from '@inquirer/ansi';\nconst height = (content) => content.split('\\n').length;\nconst lastLine = (content) => content.split('\\n').pop() ?? '';\nexport default class ScreenManager {\n // These variables are keeping information to allow correct prompt re-rendering\n height = 0;\n extraLinesUnderPrompt = 0;\n cursorPos;\n rl;\n constructor(rl) {\n this.rl = rl;\n this.cursorPos = rl.getCursorPos();\n }\n write(content) {\n this.rl.output.unmute();\n this.rl.output.write(content);\n this.rl.output.mute();\n }\n render(content, bottomContent = '') {\n // Write message to screen and setPrompt to control backspace\n const promptLine = lastLine(content);\n const rawPromptLine = stripVTControlCharacters(promptLine);\n // Remove the rl.line from our prompt. We can't rely on the content of\n // rl.line (mainly because of the password prompt), so just rely on it's\n // length.\n let prompt = rawPromptLine;\n if (this.rl.line.length > 0) {\n prompt = prompt.slice(0, -this.rl.line.length);\n }\n this.rl.setPrompt(prompt);\n // SetPrompt will change cursor position, now we can get correct value\n this.cursorPos = this.rl.getCursorPos();\n const width = readlineWidth();\n content = breakLines(content, width);\n bottomContent = breakLines(bottomContent, width);\n // Manually insert an extra line if we're at the end of the line.\n // This prevent the cursor from appearing at the beginning of the\n // current line.\n if (rawPromptLine.length % width === 0) {\n content += '\\n';\n }\n let output = content + (bottomContent ? '\\n' + bottomContent : '');\n /**\n * Re-adjust the cursor at the correct position.\n */\n // We need to consider parts of the prompt under the cursor as part of the bottom\n // content in order to correctly cleanup and re-render.\n const promptLineUpDiff = Math.floor(rawPromptLine.length / width) - this.cursorPos.rows;\n const bottomContentHeight = promptLineUpDiff + (bottomContent ? height(bottomContent) : 0);\n // Return cursor to the input position (on top of the bottomContent)\n if (bottomContentHeight > 0)\n output += cursorUp(bottomContentHeight);\n // Return cursor to the initial left offset.\n output += cursorTo(this.cursorPos.cols);\n /**\n * Render and store state for future re-rendering\n */\n this.write(cursorDown(this.extraLinesUnderPrompt) + eraseLines(this.height) + output);\n this.extraLinesUnderPrompt = bottomContentHeight;\n this.height = height(output);\n }\n checkCursorPos() {\n const cursorPos = this.rl.getCursorPos();\n if (cursorPos.cols !== this.cursorPos.cols) {\n this.write(cursorTo(cursorPos.cols));\n this.cursorPos = cursorPos;\n }\n }\n done({ clearContent }) {\n this.rl.setPrompt('');\n let output = cursorDown(this.extraLinesUnderPrompt);\n output += clearContent ? eraseLines(this.height) : '\\n';\n output += cursorShow;\n this.write(output);\n this.rl.close();\n }\n}\n","// TODO: Remove this class once Node 22 becomes the minimum supported version.\nexport class PromisePolyfill extends Promise {\n // Available starting from Node 22\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers\n static withResolver() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve, reject: reject };\n }\n}\n","import * as readline from 'node:readline';\nimport { AsyncResource } from 'node:async_hooks';\nimport MuteStream from 'mute-stream';\nimport { onExit as onSignalExit } from 'signal-exit';\nimport ScreenManager from \"./screen-manager.js\";\nimport { PromisePolyfill } from \"./promise-polyfill.js\";\nimport { withHooks, effectScheduler } from \"./hook-engine.js\";\nimport { AbortPromptError, CancelPromptError, ExitPromptError } from \"./errors.js\";\n// Capture the real setImmediate at module load time so it works even when test\n// frameworks mock timers with vi.useFakeTimers() or similar.\nconst nativeSetImmediate = globalThis.setImmediate;\nfunction getCallSites() {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _prepareStackTrace = Error.prepareStackTrace;\n let result = [];\n try {\n Error.prepareStackTrace = (_, callSites) => {\n const callSitesWithoutCurrent = callSites.slice(1);\n result = callSitesWithoutCurrent;\n return callSitesWithoutCurrent;\n };\n // oxlint-disable-next-line no-unused-expressions\n new Error().stack;\n }\n catch {\n // An error will occur if the Node flag --frozen-intrinsics is used.\n // https://nodejs.org/api/cli.html#--frozen-intrinsics\n return result;\n }\n Error.prepareStackTrace = _prepareStackTrace;\n return result;\n}\nexport function createPrompt(view) {\n const callSites = getCallSites();\n const prompt = (config, context = {}) => {\n // Default `input` to stdin\n const { input = process.stdin, signal } = context;\n const cleanups = new Set();\n // Add mute capabilities to the output\n const output = new MuteStream();\n output.pipe(context.output ?? process.stdout);\n // Pre-mute the output so that readline doesn't echo stale keystrokes\n // to the terminal before the first render. ScreenManager will unmute/mute\n // the output around each render call as needed.\n output.mute();\n const rl = readline.createInterface({\n terminal: true,\n input,\n output,\n });\n const screen = new ScreenManager(rl);\n const { promise, resolve, reject } = PromisePolyfill.withResolver();\n const cancel = () => reject(new CancelPromptError());\n if (signal) {\n const abort = () => reject(new AbortPromptError({ cause: signal.reason }));\n if (signal.aborted) {\n abort();\n return Object.assign(promise, { cancel });\n }\n signal.addEventListener('abort', abort);\n cleanups.add(() => signal.removeEventListener('abort', abort));\n }\n cleanups.add(onSignalExit((code, signal) => {\n reject(new ExitPromptError(`User force closed the prompt with ${code} ${signal}`));\n }));\n // SIGINT must be explicitly handled by the prompt so the ExitPromptError can be handled.\n // Otherwise, the prompt will stop and in some scenarios never resolve.\n // Ref issue #1741\n const sigint = () => reject(new ExitPromptError(`User force closed the prompt with SIGINT`));\n rl.on('SIGINT', sigint);\n cleanups.add(() => rl.removeListener('SIGINT', sigint));\n return withHooks(rl, (cycle) => {\n // The close event triggers immediately when the user press ctrl+c. SignalExit on the other hand\n // triggers after the process is done (which happens after timeouts are done triggering.)\n // We triggers the hooks cleanup phase on rl `close` so active timeouts can be cleared.\n const hooksCleanup = AsyncResource.bind(() => effectScheduler.clearAll());\n rl.on('close', hooksCleanup);\n cleanups.add(() => rl.removeListener('close', hooksCleanup));\n const startCycle = () => {\n // Re-renders only happen when the state change; but the readline cursor could\n // change position and that also requires a re-render (and a manual one because\n // we mute the streams). We set the listener after the initial workLoop to avoid\n // a double render if render triggered by a state change sets the cursor to the\n // right position.\n const checkCursorPos = () => screen.checkCursorPos();\n rl.input.on('keypress', checkCursorPos);\n cleanups.add(() => rl.input.removeListener('keypress', checkCursorPos));\n cycle(() => {\n try {\n const nextView = view(config, (value) => {\n setImmediate(() => resolve(value));\n });\n // Typescript won't allow this, but not all users rely on typescript.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (nextView === undefined) {\n const callerFilename = callSites[1]?.getFileName();\n throw new Error(`Prompt functions must return a string.\\n at ${callerFilename}`);\n }\n const [content, bottomContent] = typeof nextView === 'string' ? [nextView] : nextView;\n screen.render(content, bottomContent);\n effectScheduler.run();\n }\n catch (error) {\n reject(error);\n }\n });\n };\n // Proper Readable streams (like process.stdin) may have OS-level buffered\n // data that arrives in the poll phase when readline resumes the stream.\n // Deferring the first render by one setImmediate tick (check phase, after\n // poll) lets that stale data flow through readline harmlessly—no keypress\n // handlers are registered yet and the output is muted, so the stale\n // keystrokes are silently discarded.\n // Old-style streams (like MuteStream) have no such buffering, so the\n // render cycle starts immediately.\n //\n // @see https://github.com/SBoudrias/Inquirer.js/issues/1303\n if ('readableFlowing' in input) {\n nativeSetImmediate(startCycle);\n }\n else {\n startCycle();\n }\n return Object.assign(promise\n .then((answer) => {\n effectScheduler.clearAll();\n return answer;\n }, (error) => {\n effectScheduler.clearAll();\n throw error;\n })\n // Wait for the promise to settle, then cleanup.\n .finally(() => {\n cleanups.forEach((cleanup) => cleanup());\n screen.done({ clearContent: Boolean(context.clearPromptOnDone) });\n output.end();\n })\n // Once cleanup is done, let the expose promise resolve/reject to the internal one.\n .then(() => promise), { cancel });\n });\n };\n return prompt;\n}\n","import { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\n/**\n * Separator object\n * Used to space/separate choices group\n */\nexport class Separator {\n separator = styleText('dim', Array.from({ length: 15 }).join(figures.line));\n type = 'separator';\n constructor(separator) {\n if (separator) {\n this.separator = separator;\n }\n }\n static isSeparator(choice) {\n return Boolean(choice &&\n typeof choice === 'object' &&\n 'type' in choice &&\n choice.type === 'separator');\n }\n}\n","import { createPrompt, useState, useKeypress, usePrefix, usePagination, useMemo, makeTheme, isUpKey, isDownKey, isSpaceKey, isNumberKey, isEnterKey, ValidationError, Separator, } from '@inquirer/core';\nimport { cursorHide } from '@inquirer/ansi';\nimport { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nconst checkboxTheme = {\n icon: {\n checked: styleText('green', figures.circleFilled),\n unchecked: figures.circle,\n cursor: figures.pointer,\n disabledChecked: styleText('green', figures.circleDouble),\n disabledUnchecked: '-',\n },\n style: {\n disabled: (text) => styleText('dim', text),\n renderSelectedChoices: (selectedChoices) => selectedChoices.map((choice) => choice.short).join(', '),\n description: (text) => styleText('cyan', text),\n keysHelpTip: (keys) => keys\n .map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)\n .join(styleText('dim', ' • ')),\n },\n i18n: { disabledError: 'This option is disabled and cannot be toggled.' },\n keybindings: [],\n};\nfunction isSelectable(item) {\n return !Separator.isSeparator(item) && !item.disabled;\n}\nfunction isNavigable(item) {\n return !Separator.isSeparator(item);\n}\nfunction isChecked(item) {\n return !Separator.isSeparator(item) && item.checked;\n}\nfunction toggle(item) {\n return isSelectable(item) ? { ...item, checked: !item.checked } : item;\n}\nfunction check(checked) {\n return function (item) {\n return isSelectable(item) ? { ...item, checked } : item;\n };\n}\nfunction normalizeChoices(choices) {\n return choices.map((choice) => {\n if (Separator.isSeparator(choice))\n return choice;\n if (typeof choice === 'string') {\n return {\n value: choice,\n name: choice,\n short: choice,\n checkedName: choice,\n disabled: false,\n checked: false,\n };\n }\n const name = choice.name ?? String(choice.value);\n const normalizedChoice = {\n value: choice.value,\n name,\n short: choice.short ?? name,\n checkedName: choice.checkedName ?? name,\n disabled: choice.disabled ?? false,\n checked: choice.checked ?? false,\n };\n if (choice.description) {\n normalizedChoice.description = choice.description;\n }\n return normalizedChoice;\n });\n}\nexport default createPrompt((config, done) => {\n const { pageSize = 7, loop = true, required, validate = () => true } = config;\n const shortcuts = { all: 'a', invert: 'i', ...config.shortcuts };\n const theme = makeTheme(checkboxTheme, config.theme);\n const { keybindings } = theme;\n const [status, setStatus] = useState('idle');\n const prefix = usePrefix({ status, theme });\n const [items, setItems] = useState(normalizeChoices(config.choices));\n const bounds = useMemo(() => {\n const first = items.findIndex(isNavigable);\n const last = items.findLastIndex(isNavigable);\n if (first === -1) {\n throw new ValidationError('[checkbox prompt] No selectable choices. All choices are disabled.');\n }\n return { first, last };\n }, [items]);\n const [active, setActive] = useState(bounds.first);\n const [errorMsg, setError] = useState();\n useKeypress(async (key) => {\n if (isEnterKey(key)) {\n const selection = items.filter(isChecked);\n const isValid = await validate([...selection]);\n if (required && !selection.length) {\n setError('At least one choice must be selected');\n }\n else if (isValid === true) {\n setStatus('done');\n done(selection.map((choice) => choice.value));\n }\n else {\n setError(isValid || 'You must select a valid value');\n }\n }\n else if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {\n if (errorMsg) {\n setError(undefined);\n }\n if (loop ||\n (isUpKey(key, keybindings) && active !== bounds.first) ||\n (isDownKey(key, keybindings) && active !== bounds.last)) {\n const offset = isUpKey(key, keybindings) ? -1 : 1;\n let next = active;\n do {\n next = (next + offset + items.length) % items.length;\n } while (!isNavigable(items[next]));\n setActive(next);\n }\n }\n else if (isSpaceKey(key)) {\n const activeItem = items[active];\n if (activeItem && !Separator.isSeparator(activeItem)) {\n if (activeItem.disabled) {\n setError(theme.i18n.disabledError);\n }\n else {\n setError(undefined);\n setItems(items.map((choice, i) => (i === active ? toggle(choice) : choice)));\n }\n }\n }\n else if (key.name === shortcuts.all) {\n const selectAll = items.some((choice) => isSelectable(choice) && !choice.checked);\n setItems(items.map(check(selectAll)));\n }\n else if (key.name === shortcuts.invert) {\n setItems(items.map(toggle));\n }\n else if (isNumberKey(key)) {\n const selectedIndex = Number(key.name) - 1;\n // Find the nth item (ignoring separators)\n let selectableIndex = -1;\n const position = items.findIndex((item) => {\n if (Separator.isSeparator(item))\n return false;\n selectableIndex++;\n return selectableIndex === selectedIndex;\n });\n const selectedItem = items[position];\n if (selectedItem && isSelectable(selectedItem)) {\n setActive(position);\n setItems(items.map((choice, i) => (i === position ? toggle(choice) : choice)));\n }\n }\n });\n const message = theme.style.message(config.message, status);\n let description;\n const page = usePagination({\n items,\n active,\n renderItem({ item, isActive }) {\n if (Separator.isSeparator(item)) {\n return ` ${item.separator}`;\n }\n const cursor = isActive ? theme.icon.cursor : ' ';\n if (item.disabled) {\n const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';\n const checkbox = item.checked\n ? theme.icon.disabledChecked\n : theme.icon.disabledUnchecked;\n return theme.style.disabled(`${cursor}${checkbox} ${item.name} ${disabledLabel}`);\n }\n if (isActive) {\n description = item.description;\n }\n const checkbox = item.checked ? theme.icon.checked : theme.icon.unchecked;\n const name = item.checked ? item.checkedName : item.name;\n const color = isActive ? theme.style.highlight : (x) => x;\n return color(`${cursor}${checkbox} ${name}`);\n },\n pageSize,\n loop,\n });\n if (status === 'done') {\n const selection = items.filter(isChecked);\n const answer = theme.style.answer(theme.style.renderSelectedChoices(selection, items));\n return [prefix, message, answer].filter(Boolean).join(' ');\n }\n const keys = [\n ['↑↓', 'navigate'],\n ['space', 'select'],\n ];\n if (shortcuts.all)\n keys.push([shortcuts.all, 'all']);\n if (shortcuts.invert)\n keys.push([shortcuts.invert, 'invert']);\n keys.push(['⏎', 'submit']);\n const helpLine = theme.style.keysHelpTip(keys);\n const lines = [\n [prefix, message].filter(Boolean).join(' '),\n page,\n ' ',\n description ? theme.style.description(description) : '',\n errorMsg ? theme.style.error(errorMsg) : '',\n helpLine,\n ]\n .filter(Boolean)\n .join('\\n')\n .trimEnd();\n return `${lines}${cursorHide}`;\n});\nexport { Separator } from '@inquirer/core';\n","import { createPrompt, useState, useKeypress, isEnterKey, isTabKey, usePrefix, makeTheme, } from '@inquirer/core';\nfunction getBooleanValue(value, defaultValue) {\n let answer = defaultValue !== false;\n if (/^(y|yes)/i.test(value))\n answer = true;\n else if (/^(n|no)/i.test(value))\n answer = false;\n return answer;\n}\nfunction boolToString(value) {\n return value ? 'Yes' : 'No';\n}\nexport default createPrompt((config, done) => {\n const { transformer = boolToString } = config;\n const [status, setStatus] = useState('idle');\n const [value, setValue] = useState('');\n const theme = makeTheme(config.theme);\n const prefix = usePrefix({ status, theme });\n useKeypress((key, rl) => {\n if (status !== 'idle')\n return;\n if (isEnterKey(key)) {\n const answer = getBooleanValue(value, config.default);\n setValue(transformer(answer));\n setStatus('done');\n done(answer);\n }\n else if (isTabKey(key)) {\n const answer = boolToString(!getBooleanValue(value, config.default));\n rl.clearLine(0); // Remove the tab character.\n rl.write(answer);\n setValue(answer);\n }\n else {\n setValue(rl.line);\n }\n });\n let formattedValue = value;\n let defaultValue = '';\n if (status === 'done') {\n formattedValue = theme.style.answer(value);\n }\n else {\n defaultValue = ` ${theme.style.defaultAnswer(config.default === false ? 'y/N' : 'Y/n')}`;\n }\n const message = theme.style.message(config.message, status);\n return `${prefix} ${message}${defaultValue} ${formattedValue}`;\n});\n","import { createPrompt, useState, useKeypress, usePrefix, usePagination, useRef, useMemo, useEffect, isBackspaceKey, isEnterKey, isUpKey, isDownKey, isNumberKey, Separator, ValidationError, makeTheme, } from '@inquirer/core';\nimport { cursorHide } from '@inquirer/ansi';\nimport { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nconst selectTheme = {\n icon: { cursor: figures.pointer },\n style: {\n disabled: (text) => styleText('dim', text),\n description: (text) => styleText('cyan', text),\n keysHelpTip: (keys) => keys\n .map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)\n .join(styleText('dim', ' • ')),\n },\n i18n: { disabledError: 'This option is disabled and cannot be selected.' },\n indexMode: 'hidden',\n keybindings: [],\n};\nfunction isSelectable(item) {\n return !Separator.isSeparator(item) && !item.disabled;\n}\nfunction isNavigable(item) {\n return !Separator.isSeparator(item);\n}\nfunction normalizeChoices(choices) {\n return choices.map((choice) => {\n if (Separator.isSeparator(choice))\n return choice;\n if (typeof choice !== 'object' || choice === null || !('value' in choice)) {\n // It's a raw value (string, number, etc.)\n const name = String(choice);\n return {\n value: choice,\n name,\n short: name,\n disabled: false,\n };\n }\n const name = choice.name ?? String(choice.value);\n const normalizedChoice = {\n value: choice.value,\n name,\n short: choice.short ?? name,\n disabled: choice.disabled ?? false,\n };\n if (choice.description) {\n normalizedChoice.description = choice.description;\n }\n return normalizedChoice;\n });\n}\nexport default createPrompt((config, done) => {\n const { loop = true, pageSize = 7 } = config;\n const theme = makeTheme(selectTheme, config.theme);\n const { keybindings } = theme;\n const [status, setStatus] = useState('idle');\n const prefix = usePrefix({ status, theme });\n const searchTimeoutRef = useRef();\n // Vim keybindings (j/k) conflict with typing those letters in search,\n // so search must be disabled when vim bindings are enabled\n const searchEnabled = !keybindings.includes('vim');\n const items = useMemo(() => normalizeChoices(config.choices), [config.choices]);\n const bounds = useMemo(() => {\n const first = items.findIndex(isNavigable);\n const last = items.findLastIndex(isNavigable);\n if (first === -1) {\n throw new ValidationError('[select prompt] No selectable choices. All choices are disabled.');\n }\n return { first, last };\n }, [items]);\n const defaultItemIndex = useMemo(() => {\n if (!('default' in config))\n return -1;\n return items.findIndex((item) => isSelectable(item) && item.value === config.default);\n }, [config.default, items]);\n const [active, setActive] = useState(defaultItemIndex === -1 ? bounds.first : defaultItemIndex);\n // Safe to assume the cursor position always point to a Choice.\n const selectedChoice = items[active];\n const [errorMsg, setError] = useState();\n useKeypress((key, rl) => {\n clearTimeout(searchTimeoutRef.current);\n if (errorMsg) {\n setError(undefined);\n }\n if (isEnterKey(key)) {\n if (selectedChoice.disabled) {\n setError(theme.i18n.disabledError);\n }\n else {\n setStatus('done');\n done(selectedChoice.value);\n }\n }\n else if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {\n rl.clearLine(0);\n if (loop ||\n (isUpKey(key, keybindings) && active !== bounds.first) ||\n (isDownKey(key, keybindings) && active !== bounds.last)) {\n const offset = isUpKey(key, keybindings) ? -1 : 1;\n let next = active;\n do {\n next = (next + offset + items.length) % items.length;\n } while (!isNavigable(items[next]));\n setActive(next);\n }\n }\n else if (isNumberKey(key) && !Number.isNaN(Number(rl.line))) {\n const selectedIndex = Number(rl.line) - 1;\n // Find the nth item (ignoring separators)\n let selectableIndex = -1;\n const position = items.findIndex((item) => {\n if (Separator.isSeparator(item))\n return false;\n selectableIndex++;\n return selectableIndex === selectedIndex;\n });\n const item = items[position];\n if (item != null && isSelectable(item)) {\n setActive(position);\n }\n searchTimeoutRef.current = setTimeout(() => {\n rl.clearLine(0);\n }, 700);\n }\n else if (isBackspaceKey(key)) {\n rl.clearLine(0);\n }\n else if (searchEnabled) {\n const searchTerm = rl.line.toLowerCase();\n const matchIndex = items.findIndex((item) => {\n if (Separator.isSeparator(item) || !isSelectable(item))\n return false;\n return item.name.toLowerCase().startsWith(searchTerm);\n });\n if (matchIndex !== -1) {\n setActive(matchIndex);\n }\n searchTimeoutRef.current = setTimeout(() => {\n rl.clearLine(0);\n }, 700);\n }\n });\n useEffect(() => () => {\n clearTimeout(searchTimeoutRef.current);\n }, []);\n const message = theme.style.message(config.message, status);\n const helpLine = theme.style.keysHelpTip([\n ['↑↓', 'navigate'],\n ['⏎', 'select'],\n ]);\n let separatorCount = 0;\n const page = usePagination({\n items,\n active,\n renderItem({ item, isActive, index }) {\n if (Separator.isSeparator(item)) {\n separatorCount++;\n return ` ${item.separator}`;\n }\n const cursor = isActive ? theme.icon.cursor : ' ';\n const indexLabel = theme.indexMode === 'number' ? `${index + 1 - separatorCount}. ` : '';\n if (item.disabled) {\n const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';\n const disabledCursor = isActive ? theme.icon.cursor : '-';\n return theme.style.disabled(`${disabledCursor} ${indexLabel}${item.name} ${disabledLabel}`);\n }\n const color = isActive ? theme.style.highlight : (x) => x;\n return color(`${cursor} ${indexLabel}${item.name}`);\n },\n pageSize,\n loop,\n });\n if (status === 'done') {\n return [prefix, message, theme.style.answer(selectedChoice.short)]\n .filter(Boolean)\n .join(' ');\n }\n const { description } = selectedChoice;\n const lines = [\n [prefix, message].filter(Boolean).join(' '),\n page,\n ' ',\n description ? theme.style.description(description) : '',\n errorMsg ? theme.style.error(errorMsg) : '',\n helpLine,\n ]\n .filter(Boolean)\n .join('\\n')\n .trimEnd();\n return `${lines}${cursorHide}`;\n});\nexport { Separator } from '@inquirer/core';\n","\"use strict\";\n/**\n * @maxsim/adapters — Shared base utilities extracted from bin/install.js\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.expandTilde = expandTilde;\nexports.extractFrontmatterAndBody = extractFrontmatterAndBody;\nexports.processAttribution = processAttribution;\nexports.buildHookCommand = buildHookCommand;\nexports.readSettings = readSettings;\nexports.writeSettings = writeSettings;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst fs = __importStar(require(\"node:fs\"));\n/**\n * Expand ~ to home directory (shell doesn't expand in env vars passed to node)\n */\nfunction expandTilde(filePath) {\n if (filePath && filePath.startsWith('~/')) {\n return path.join(os.homedir(), filePath.slice(2));\n }\n return filePath;\n}\n/**\n * Extract YAML frontmatter and body from markdown content.\n * Returns null frontmatter if content doesn't start with ---.\n */\nfunction extractFrontmatterAndBody(content) {\n if (!content.startsWith('---')) {\n return { frontmatter: null, body: content };\n }\n const endIndex = content.indexOf('---', 3);\n if (endIndex === -1) {\n return { frontmatter: null, body: content };\n }\n return {\n frontmatter: content.substring(3, endIndex).trim(),\n body: content.substring(endIndex + 3),\n };\n}\n/**\n * Process Co-Authored-By lines based on attribution setting.\n * @param content - File content to process\n * @param attribution - null=remove, undefined=keep default, string=replace\n */\nfunction processAttribution(content, attribution) {\n if (attribution === null) {\n return content.replace(/(\\r?\\n){2}Co-Authored-By:.*$/gim, '');\n }\n if (attribution === undefined) {\n return content;\n }\n const safeAttribution = attribution.replace(/\\$/g, '$$$$');\n return content.replace(/Co-Authored-By:.*$/gim, `Co-Authored-By: ${safeAttribution}`);\n}\n/**\n * Build a hook command path using forward slashes for cross-platform compatibility.\n */\nfunction buildHookCommand(configDir, hookName) {\n const hooksPath = configDir.replace(/\\\\/g, '/') + '/hooks/' + hookName;\n return `node \"${hooksPath}\"`;\n}\n/**\n * Read and parse settings.json, returning empty object if it doesn't exist.\n */\nfunction readSettings(settingsPath) {\n if (fs.existsSync(settingsPath)) {\n try {\n return JSON.parse(fs.readFileSync(settingsPath, 'utf8'));\n }\n catch {\n return {};\n }\n }\n return {};\n}\n/**\n * Write settings.json with proper formatting.\n */\nfunction writeSettings(settingsPath, settings) {\n fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\\n');\n}\n//# sourceMappingURL=base.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Claude Code adapter\n *\n * Ports the Claude-specific logic from bin/install.js:\n * - getGlobalDir('claude', ...) (lines 135-142)\n * - getDirName('claude') (line 49)\n * - getConfigDirFromHome('claude', isGlobal) (lines 58-72)\n * - copyWithPathReplacement for Claude (lines 839-892)\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.claudeAdapter = void 0;\nexports.installClaude = installClaude;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst base_js_1 = require(\"./base.js\");\n/**\n * Get the global config directory for Claude Code.\n * Priority: explicitDir > CLAUDE_CONFIG_DIR env > ~/.claude\n */\nfunction getGlobalDir(explicitDir) {\n if (explicitDir) {\n return (0, base_js_1.expandTilde)(explicitDir);\n }\n if (process.env.CLAUDE_CONFIG_DIR) {\n return (0, base_js_1.expandTilde)(process.env.CLAUDE_CONFIG_DIR);\n }\n return path.join(os.homedir(), '.claude');\n}\n/**\n * Get the config directory path relative to home for hook templating.\n * Used for path.join(homeDir, '<configDir>', ...) replacement in hooks.\n */\nfunction getConfigDirFromHome(isGlobal) {\n // Both global and local use '.claude' for Claude Code\n return \"'.claude'\";\n}\n/**\n * Transform markdown content for Claude Code installation.\n * For Claude, this is path replacement only — no frontmatter conversion needed.\n * Replaces ~/.claude/ and ./.claude/ references with the actual install path prefix.\n */\nfunction transformContent(content, pathPrefix) {\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n let result = content.replace(globalClaudeRegex, pathPrefix);\n result = result.replace(localClaudeRegex, `./.claude/`);\n return result;\n}\n/**\n * Claude Code adapter configuration.\n * Claude uses nested command structure (commands/maxsim/*.md).\n */\nexports.claudeAdapter = {\n runtime: 'claude',\n dirName: '.claude',\n getGlobalDir,\n getConfigDirFromHome,\n transformContent,\n commandStructure: 'nested',\n};\n/**\n * Install Claude Code adapter files.\n * Stub — actual install orchestration will be implemented in Phase 5.\n */\nfunction installClaude() {\n // Phase 5 will implement the full install orchestration.\n // The adapter exposes this function per CONTEXT.md decision.\n throw new Error('installClaude() not yet implemented — see Phase 5');\n}\n//# sourceMappingURL=claude.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Tool name mappings per runtime\n *\n * Ported from bin/install.js lines ~327-390\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertToolName = convertToolName;\nexports.convertGeminiToolName = convertGeminiToolName;\n/** Tool name mapping from Claude Code to OpenCode */\nconst claudeToOpencodeTools = {\n AskUserQuestion: 'question',\n SlashCommand: 'skill',\n TodoWrite: 'todowrite',\n WebFetch: 'webfetch',\n WebSearch: 'websearch',\n};\n/** Tool name mapping from Claude Code to Gemini CLI */\nconst claudeToGeminiTools = {\n Read: 'read_file',\n Write: 'write_file',\n Edit: 'replace',\n Bash: 'run_shell_command',\n Glob: 'glob',\n Grep: 'search_file_content',\n WebSearch: 'google_web_search',\n WebFetch: 'web_fetch',\n TodoWrite: 'write_todos',\n AskUserQuestion: 'ask_user',\n};\n/**\n * Convert a Claude Code tool name to OpenCode format.\n * - Applies special mappings (AskUserQuestion -> question, etc.)\n * - Converts to lowercase (except MCP tools which keep their format)\n */\nfunction convertToolName(claudeTool) {\n if (claudeToOpencodeTools[claudeTool]) {\n return claudeToOpencodeTools[claudeTool];\n }\n if (claudeTool.startsWith('mcp__')) {\n return claudeTool;\n }\n return claudeTool.toLowerCase();\n}\n/**\n * Convert a Claude Code tool name to Gemini CLI format.\n * - Applies Claude->Gemini mapping (Read->read_file, Bash->run_shell_command, etc.)\n * - Filters out MCP tools (mcp__*) -- auto-discovered at runtime in Gemini\n * - Filters out Task -- agents are auto-registered as tools in Gemini\n * @returns Gemini tool name, or null if tool should be excluded\n */\nfunction convertGeminiToolName(claudeTool) {\n if (claudeTool.startsWith('mcp__')) {\n return null;\n }\n if (claudeTool === 'Task') {\n return null;\n }\n if (claudeToGeminiTools[claudeTool]) {\n return claudeToGeminiTools[claudeTool];\n }\n return claudeTool.toLowerCase();\n}\n//# sourceMappingURL=tool-maps.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Content transformation utilities\n *\n * Ported from bin/install.js lines ~423-564\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertSlashCommandsToCodexSkillMentions = convertSlashCommandsToCodexSkillMentions;\nexports.convertClaudeToCodexMarkdown = convertClaudeToCodexMarkdown;\nexports.stripSubTags = stripSubTags;\nexports.convertClaudeToGeminiAgent = convertClaudeToGeminiAgent;\nexports.replacePathReferences = replacePathReferences;\nconst tool_maps_js_1 = require(\"./tool-maps.js\");\n/**\n * Convert /maxsim:command-name to $maxsim-command-name for Codex skill mentions.\n * Ported from install.js line ~423\n */\nfunction convertSlashCommandsToCodexSkillMentions(content) {\n let converted = content.replace(/\\/maxsim:([a-z0-9-]+)/gi, (_, commandName) => {\n return `$maxsim-${String(commandName).toLowerCase()}`;\n });\n converted = converted.replace(/\\/maxsim-help\\b/g, '$maxsim-help');\n return converted;\n}\n/**\n * Convert Claude markdown to Codex markdown format.\n * Replaces slash commands and $ARGUMENTS placeholder.\n * Ported from install.js line ~431\n */\nfunction convertClaudeToCodexMarkdown(content) {\n let converted = convertSlashCommandsToCodexSkillMentions(content);\n converted = converted.replace(/\\$ARGUMENTS\\b/g, '{{MAXSIM_ARGS}}');\n return converted;\n}\n/**\n * Strip HTML <sub> tags for Gemini CLI output.\n * Terminals don't support subscript -- converts <sub>text</sub> to italic *(text)*.\n * Ported from install.js line ~474\n */\nfunction stripSubTags(content) {\n return content.replace(/<sub>(.*?)<\\/sub>/g, '*($1)*');\n}\n/**\n * Convert Claude Code agent frontmatter to Gemini CLI format.\n * - tools: must be a YAML array (not comma-separated string)\n * - tool names: must use Gemini built-in names (read_file, not Read)\n * - color: must be removed (causes validation error)\n * - mcp__* tools: must be excluded (auto-discovered at runtime)\n * - ${VAR} patterns: escaped to $VAR for Gemini template compatibility\n *\n * Ported from install.js line ~487\n */\nfunction convertClaudeToGeminiAgent(content) {\n if (!content.startsWith('---'))\n return content;\n const endIndex = content.indexOf('---', 3);\n if (endIndex === -1)\n return content;\n const frontmatter = content.substring(3, endIndex).trim();\n const body = content.substring(endIndex + 3);\n const lines = frontmatter.split('\\n');\n const newLines = [];\n let inAllowedTools = false;\n const tools = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith('allowed-tools:')) {\n inAllowedTools = true;\n continue;\n }\n if (trimmed.startsWith('tools:')) {\n const toolsValue = trimmed.substring(6).trim();\n if (toolsValue) {\n const parsed = toolsValue.split(',').map((t) => t.trim()).filter((t) => t);\n for (const t of parsed) {\n const mapped = (0, tool_maps_js_1.convertGeminiToolName)(t);\n if (mapped)\n tools.push(mapped);\n }\n }\n else {\n inAllowedTools = true;\n }\n continue;\n }\n if (trimmed.startsWith('color:'))\n continue;\n if (inAllowedTools) {\n if (trimmed.startsWith('- ')) {\n const mapped = (0, tool_maps_js_1.convertGeminiToolName)(trimmed.substring(2).trim());\n if (mapped)\n tools.push(mapped);\n continue;\n }\n else if (trimmed && !trimmed.startsWith('-')) {\n inAllowedTools = false;\n }\n }\n if (!inAllowedTools) {\n newLines.push(line);\n }\n }\n if (tools.length > 0) {\n newLines.push('tools:');\n for (const tool of tools) {\n newLines.push(` - ${tool}`);\n }\n }\n const newFrontmatter = newLines.join('\\n').trim();\n // Escape ${VAR} patterns in agent body for Gemini CLI compatibility.\n const escapedBody = body.replace(/\\$\\{(\\w+)\\}/g, '$$$1');\n return `---\\n${newFrontmatter}\\n---${stripSubTags(escapedBody)}`;\n}\n/**\n * Replace path references in markdown content for a target runtime.\n * Replaces ~/.claude/ with pathPrefix and ./.claude/ with ./dirName/.\n */\nfunction replacePathReferences(content, pathPrefix, dirName) {\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n let result = content.replace(globalClaudeRegex, pathPrefix);\n result = result.replace(localClaudeRegex, `./${dirName}/`);\n return result;\n}\n//# sourceMappingURL=content.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Frontmatter conversion functions for opencode, gemini, codex\n *\n * Ported from bin/install.js lines ~308-711\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.colorNameToHex = void 0;\nexports.toSingleLine = toSingleLine;\nexports.yamlQuote = yamlQuote;\nexports.extractFrontmatterField = extractFrontmatterField;\nexports.convertClaudeToOpencodeFrontmatter = convertClaudeToOpencodeFrontmatter;\nexports.convertClaudeToGeminiToml = convertClaudeToGeminiToml;\nexports.convertClaudeCommandToCodexSkill = convertClaudeCommandToCodexSkill;\nexports.getCodexSkillAdapterHeader = getCodexSkillAdapterHeader;\nconst base_js_1 = require(\"../base.js\");\nconst tool_maps_js_1 = require(\"./tool-maps.js\");\nconst content_js_1 = require(\"./content.js\");\n/** Color name to hex mapping for opencode compatibility */\nexports.colorNameToHex = {\n cyan: '#00FFFF',\n red: '#FF0000',\n green: '#00FF00',\n blue: '#0000FF',\n yellow: '#FFFF00',\n magenta: '#FF00FF',\n orange: '#FFA500',\n purple: '#800080',\n pink: '#FFC0CB',\n white: '#FFFFFF',\n black: '#000000',\n gray: '#808080',\n grey: '#808080',\n};\n/** Collapse whitespace to single line */\nfunction toSingleLine(value) {\n return value.replace(/\\s+/g, ' ').trim();\n}\n/** Quote a value for YAML using JSON.stringify */\nfunction yamlQuote(value) {\n return JSON.stringify(value);\n}\n/** Extract a single-line field value from YAML frontmatter text */\nfunction extractFrontmatterField(frontmatter, fieldName) {\n const regex = new RegExp(`^${fieldName}:\\\\s*(.+)$`, 'm');\n const match = frontmatter.match(regex);\n if (!match)\n return null;\n return match[1].trim().replace(/^['\"]|['\"]$/g, '');\n}\n/**\n * Convert Claude Code frontmatter to OpenCode format.\n * - Converts 'allowed-tools:' array to 'tools:' object with tool: true entries\n * - Converts color names to hex\n * - Removes name: field (opencode uses filename)\n * - Replaces tool name references in body content\n * - Replaces /maxsim: with /maxsim- (flat command structure)\n * - Replaces ~/.claude with ~/.config/opencode\n * - Replaces subagent_type=\"general-purpose\" with \"general\"\n *\n * Ported from install.js line ~566\n */\nfunction convertClaudeToOpencodeFrontmatter(content) {\n // Replace tool name references in content (applies to all files)\n let convertedContent = content;\n convertedContent = convertedContent.replace(/\\bAskUserQuestion\\b/g, 'question');\n convertedContent = convertedContent.replace(/\\bSlashCommand\\b/g, 'skill');\n convertedContent = convertedContent.replace(/\\bTodoWrite\\b/g, 'todowrite');\n convertedContent = convertedContent.replace(/\\/maxsim:/g, '/maxsim-');\n convertedContent = convertedContent.replace(/~\\/\\.claude\\b/g, '~/.config/opencode');\n convertedContent = convertedContent.replace(/subagent_type=\"general-purpose\"/g, 'subagent_type=\"general\"');\n if (!convertedContent.startsWith('---')) {\n return convertedContent;\n }\n const endIndex = convertedContent.indexOf('---', 3);\n if (endIndex === -1) {\n return convertedContent;\n }\n const frontmatter = convertedContent.substring(3, endIndex).trim();\n const body = convertedContent.substring(endIndex + 3);\n const lines = frontmatter.split('\\n');\n const newLines = [];\n let inAllowedTools = false;\n const allowedTools = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith('allowed-tools:')) {\n inAllowedTools = true;\n continue;\n }\n if (trimmed.startsWith('tools:')) {\n const toolsValue = trimmed.substring(6).trim();\n if (toolsValue) {\n const tools = toolsValue.split(',').map((t) => t.trim()).filter((t) => t);\n allowedTools.push(...tools);\n }\n continue;\n }\n if (trimmed.startsWith('name:')) {\n continue;\n }\n if (trimmed.startsWith('color:')) {\n const colorValue = trimmed.substring(6).trim().toLowerCase();\n const hexColor = exports.colorNameToHex[colorValue];\n if (hexColor) {\n newLines.push(`color: \"${hexColor}\"`);\n }\n else if (colorValue.startsWith('#')) {\n if (/^#[0-9a-f]{3}$|^#[0-9a-f]{6}$/i.test(colorValue)) {\n newLines.push(line);\n }\n }\n continue;\n }\n if (inAllowedTools) {\n if (trimmed.startsWith('- ')) {\n allowedTools.push(trimmed.substring(2).trim());\n continue;\n }\n else if (trimmed && !trimmed.startsWith('-')) {\n inAllowedTools = false;\n }\n }\n if (!inAllowedTools) {\n newLines.push(line);\n }\n }\n if (allowedTools.length > 0) {\n newLines.push('tools:');\n for (const tool of allowedTools) {\n newLines.push(` ${(0, tool_maps_js_1.convertToolName)(tool)}: true`);\n }\n }\n const newFrontmatter = newLines.join('\\n').trim();\n return `---\\n${newFrontmatter}\\n---${body}`;\n}\n/**\n * Convert Claude Code markdown command to Gemini TOML format.\n * Ported from install.js line ~677\n */\nfunction convertClaudeToGeminiToml(content) {\n if (!content.startsWith('---')) {\n return `prompt = ${JSON.stringify(content)}\\n`;\n }\n const endIndex = content.indexOf('---', 3);\n if (endIndex === -1) {\n return `prompt = ${JSON.stringify(content)}\\n`;\n }\n const frontmatter = content.substring(3, endIndex).trim();\n const body = content.substring(endIndex + 3).trim();\n let description = '';\n const lines = frontmatter.split('\\n');\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith('description:')) {\n description = trimmed.substring(12).trim();\n break;\n }\n }\n let toml = '';\n if (description) {\n toml += `description = ${JSON.stringify(description)}\\n`;\n }\n toml += `prompt = ${JSON.stringify(body)}\\n`;\n return toml;\n}\n/**\n * Convert Claude command to Codex skill format with adapter header.\n * Ported from install.js line ~452\n */\nfunction convertClaudeCommandToCodexSkill(content, skillName) {\n const converted = (0, content_js_1.convertClaudeToCodexMarkdown)(content);\n const { frontmatter, body } = (0, base_js_1.extractFrontmatterAndBody)(converted);\n let description = `Run MAXSIM workflow ${skillName}.`;\n if (frontmatter) {\n const maybeDescription = extractFrontmatterField(frontmatter, 'description');\n if (maybeDescription) {\n description = maybeDescription;\n }\n }\n description = toSingleLine(description);\n const shortDescription = description.length > 180 ? `${description.slice(0, 177)}...` : description;\n const adapter = getCodexSkillAdapterHeader(skillName);\n return `---\\nname: ${yamlQuote(skillName)}\\ndescription: ${yamlQuote(description)}\\nmetadata:\\n short-description: ${yamlQuote(shortDescription)}\\n---\\n\\n${adapter}\\n\\n${body.trimStart()}`;\n}\n/**\n * Generate the Codex skill adapter header block.\n * Ported from install.js line ~437\n */\nfunction getCodexSkillAdapterHeader(skillName) {\n const invocation = `$${skillName}`;\n return `<codex_skill_adapter>\nCodex skills-first mode:\n- This skill is invoked by mentioning \\`${invocation}\\`.\n- Treat all user text after \\`${invocation}\\` as \\`{{MAXSIM_ARGS}}\\`.\n- If no arguments are present, treat \\`{{MAXSIM_ARGS}}\\` as empty.\n\nLegacy orchestration compatibility:\n- Any \\`Task(...)\\` pattern in referenced workflow docs is legacy syntax.\n- Implement equivalent behavior with Codex collaboration tools: \\`spawn_agent\\`, \\`wait\\`, \\`send_input\\`, and \\`close_agent\\`.\n- Treat legacy \\`subagent_type\\` names as role hints in the spawned message.\n</codex_skill_adapter>`;\n}\n//# sourceMappingURL=frontmatter.js.map","\"use strict\";\n/**\n * @maxsim/adapters — OpenCode adapter\n *\n * Ports the OpenCode-specific logic from bin/install.js:\n * - getOpencodeGlobalDir() (lines 79-97)\n * - getGlobalDir('opencode', ...) (lines 104-111)\n * - getDirName('opencode') (line 46)\n * - getConfigDirFromHome('opencode', isGlobal) (lines 58-68)\n * - convertClaudeToOpencodeFrontmatter + path replacement\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.opencodeAdapter = void 0;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst base_js_1 = require(\"./base.js\");\nconst frontmatter_js_1 = require(\"./transforms/frontmatter.js\");\nconst content_js_1 = require(\"./transforms/content.js\");\n/**\n * Get the global config directory for OpenCode.\n * OpenCode follows XDG Base Directory spec and uses ~/.config/opencode/.\n * Priority: OPENCODE_CONFIG_DIR > dirname(OPENCODE_CONFIG) > XDG_CONFIG_HOME/opencode > ~/.config/opencode\n */\nfunction getOpencodeGlobalDir() {\n if (process.env.OPENCODE_CONFIG_DIR) {\n return (0, base_js_1.expandTilde)(process.env.OPENCODE_CONFIG_DIR);\n }\n if (process.env.OPENCODE_CONFIG) {\n return path.dirname((0, base_js_1.expandTilde)(process.env.OPENCODE_CONFIG));\n }\n if (process.env.XDG_CONFIG_HOME) {\n return path.join((0, base_js_1.expandTilde)(process.env.XDG_CONFIG_HOME), 'opencode');\n }\n return path.join(os.homedir(), '.config', 'opencode');\n}\n/**\n * Get the global config directory for OpenCode.\n * Priority: explicitDir > env vars (via getOpencodeGlobalDir)\n */\nfunction getGlobalDir(explicitDir) {\n if (explicitDir) {\n return (0, base_js_1.expandTilde)(explicitDir);\n }\n return getOpencodeGlobalDir();\n}\n/**\n * Get the config directory path relative to home for hook templating.\n */\nfunction getConfigDirFromHome(isGlobal) {\n if (!isGlobal) {\n return \"'.opencode'\";\n }\n return \"'.config', 'opencode'\";\n}\n/**\n * Transform markdown content for OpenCode installation.\n * Applies frontmatter conversion and path replacement.\n */\nfunction transformContent(content, pathPrefix) {\n let result = (0, content_js_1.replacePathReferences)(content, pathPrefix, '.opencode');\n // Also replace ~/.opencode/ references\n result = result.replace(/~\\/\\.opencode\\//g, pathPrefix);\n result = (0, frontmatter_js_1.convertClaudeToOpencodeFrontmatter)(result);\n return result;\n}\n/**\n * OpenCode adapter configuration.\n * OpenCode uses flat command structure (command/maxsim-*.md).\n */\nexports.opencodeAdapter = {\n runtime: 'opencode',\n dirName: '.opencode',\n getGlobalDir,\n getConfigDirFromHome,\n transformContent,\n commandStructure: 'flat',\n};\n//# sourceMappingURL=opencode.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Gemini adapter\n *\n * Ports the Gemini-specific logic from bin/install.js:\n * - getGlobalDir('gemini', ...) (lines 113-122)\n * - getDirName('gemini') (line 47)\n * - getConfigDirFromHome('gemini', isGlobal) (line 69)\n * - convertClaudeToGeminiToml + convertClaudeToGeminiAgent + stripSubTags\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stripSubTags = exports.convertClaudeToGeminiAgent = exports.convertClaudeToGeminiToml = exports.geminiAdapter = void 0;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst base_js_1 = require(\"./base.js\");\nconst frontmatter_js_1 = require(\"./transforms/frontmatter.js\");\nObject.defineProperty(exports, \"convertClaudeToGeminiToml\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeToGeminiToml; } });\nconst content_js_1 = require(\"./transforms/content.js\");\nObject.defineProperty(exports, \"convertClaudeToGeminiAgent\", { enumerable: true, get: function () { return content_js_1.convertClaudeToGeminiAgent; } });\nObject.defineProperty(exports, \"stripSubTags\", { enumerable: true, get: function () { return content_js_1.stripSubTags; } });\n/**\n * Get the global config directory for Gemini.\n * Priority: explicitDir > GEMINI_CONFIG_DIR env > ~/.gemini\n */\nfunction getGlobalDir(explicitDir) {\n if (explicitDir) {\n return (0, base_js_1.expandTilde)(explicitDir);\n }\n if (process.env.GEMINI_CONFIG_DIR) {\n return (0, base_js_1.expandTilde)(process.env.GEMINI_CONFIG_DIR);\n }\n return path.join(os.homedir(), '.gemini');\n}\n/**\n * Get the config directory path relative to home for hook templating.\n */\nfunction getConfigDirFromHome(_isGlobal) {\n return \"'.gemini'\";\n}\n/**\n * Transform markdown content for Gemini installation.\n * Applies TOML conversion for commands, agent conversion for agents,\n * stripSubTags, and path replacement.\n */\nfunction transformContent(content, pathPrefix) {\n let result = (0, content_js_1.replacePathReferences)(content, pathPrefix, '.gemini');\n result = (0, content_js_1.stripSubTags)(result);\n result = (0, frontmatter_js_1.convertClaudeToGeminiToml)(result);\n return result;\n}\n/**\n * Gemini adapter configuration.\n * Gemini uses nested command structure (commands/maxsim/*.toml).\n */\nexports.geminiAdapter = {\n runtime: 'gemini',\n dirName: '.gemini',\n getGlobalDir,\n getConfigDirFromHome,\n transformContent,\n commandStructure: 'nested',\n};\n//# sourceMappingURL=gemini.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Codex adapter\n *\n * Ports the Codex-specific logic from bin/install.js:\n * - getGlobalDir('codex', ...) (lines 124-133)\n * - getDirName('codex') (line 48)\n * - getConfigDirFromHome('codex', isGlobal) (line 70)\n * - convertClaudeCommandToCodexSkill + convertClaudeToCodexMarkdown\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertClaudeToCodexMarkdown = exports.convertClaudeCommandToCodexSkill = exports.codexAdapter = void 0;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst base_js_1 = require(\"./base.js\");\nconst frontmatter_js_1 = require(\"./transforms/frontmatter.js\");\nObject.defineProperty(exports, \"convertClaudeCommandToCodexSkill\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeCommandToCodexSkill; } });\nconst content_js_1 = require(\"./transforms/content.js\");\nObject.defineProperty(exports, \"convertClaudeToCodexMarkdown\", { enumerable: true, get: function () { return content_js_1.convertClaudeToCodexMarkdown; } });\n/**\n * Get the global config directory for Codex.\n * Priority: explicitDir > CODEX_HOME env > ~/.codex\n */\nfunction getGlobalDir(explicitDir) {\n if (explicitDir) {\n return (0, base_js_1.expandTilde)(explicitDir);\n }\n if (process.env.CODEX_HOME) {\n return (0, base_js_1.expandTilde)(process.env.CODEX_HOME);\n }\n return path.join(os.homedir(), '.codex');\n}\n/**\n * Get the config directory path relative to home for hook templating.\n */\nfunction getConfigDirFromHome(_isGlobal) {\n return \"'.codex'\";\n}\n/**\n * Transform markdown content for Codex installation.\n * Applies Codex markdown conversion and path replacement.\n */\nfunction transformContent(content, pathPrefix) {\n let result = (0, content_js_1.replacePathReferences)(content, pathPrefix, '.codex');\n result = result.replace(/~\\/\\.codex\\//g, pathPrefix);\n result = (0, frontmatter_js_1.convertClaudeCommandToCodexSkill)(result);\n return result;\n}\n/**\n * Codex adapter configuration.\n * Codex uses skill-based command structure (skills/maxsim-star/SKILL.md).\n */\nexports.codexAdapter = {\n runtime: 'codex',\n dirName: '.codex',\n getGlobalDir,\n getConfigDirFromHome,\n transformContent,\n commandStructure: 'skills',\n};\n//# sourceMappingURL=codex.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Runtime adapter registry\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.replacePathReferences = exports.convertClaudeToGeminiAgent = exports.stripSubTags = exports.convertClaudeToCodexMarkdown = exports.convertSlashCommandsToCodexSkillMentions = exports.getCodexSkillAdapterHeader = exports.convertClaudeCommandToCodexSkill = exports.convertClaudeToGeminiToml = exports.convertClaudeToOpencodeFrontmatter = exports.extractFrontmatterField = exports.yamlQuote = exports.toSingleLine = exports.colorNameToHex = exports.convertGeminiToolName = exports.convertToolName = exports.writeSettings = exports.readSettings = exports.buildHookCommand = exports.processAttribution = exports.extractFrontmatterAndBody = exports.expandTilde = exports.codexAdapter = exports.geminiAdapter = exports.opencodeAdapter = exports.installClaude = exports.claudeAdapter = void 0;\nexports.getAllAdapters = getAllAdapters;\nconst claude_js_1 = require(\"./claude.js\");\nconst opencode_js_1 = require(\"./opencode.js\");\nconst gemini_js_1 = require(\"./gemini.js\");\nconst codex_js_1 = require(\"./codex.js\");\n// Re-export adapters\nvar claude_js_2 = require(\"./claude.js\");\nObject.defineProperty(exports, \"claudeAdapter\", { enumerable: true, get: function () { return claude_js_2.claudeAdapter; } });\nvar claude_js_3 = require(\"./claude.js\");\nObject.defineProperty(exports, \"installClaude\", { enumerable: true, get: function () { return claude_js_3.installClaude; } });\nvar opencode_js_2 = require(\"./opencode.js\");\nObject.defineProperty(exports, \"opencodeAdapter\", { enumerable: true, get: function () { return opencode_js_2.opencodeAdapter; } });\nvar gemini_js_2 = require(\"./gemini.js\");\nObject.defineProperty(exports, \"geminiAdapter\", { enumerable: true, get: function () { return gemini_js_2.geminiAdapter; } });\nvar codex_js_2 = require(\"./codex.js\");\nObject.defineProperty(exports, \"codexAdapter\", { enumerable: true, get: function () { return codex_js_2.codexAdapter; } });\n// Re-export base utilities\nvar base_js_1 = require(\"./base.js\");\nObject.defineProperty(exports, \"expandTilde\", { enumerable: true, get: function () { return base_js_1.expandTilde; } });\nObject.defineProperty(exports, \"extractFrontmatterAndBody\", { enumerable: true, get: function () { return base_js_1.extractFrontmatterAndBody; } });\nObject.defineProperty(exports, \"processAttribution\", { enumerable: true, get: function () { return base_js_1.processAttribution; } });\nObject.defineProperty(exports, \"buildHookCommand\", { enumerable: true, get: function () { return base_js_1.buildHookCommand; } });\nObject.defineProperty(exports, \"readSettings\", { enumerable: true, get: function () { return base_js_1.readSettings; } });\nObject.defineProperty(exports, \"writeSettings\", { enumerable: true, get: function () { return base_js_1.writeSettings; } });\n// Re-export transform functions\nvar tool_maps_js_1 = require(\"./transforms/tool-maps.js\");\nObject.defineProperty(exports, \"convertToolName\", { enumerable: true, get: function () { return tool_maps_js_1.convertToolName; } });\nObject.defineProperty(exports, \"convertGeminiToolName\", { enumerable: true, get: function () { return tool_maps_js_1.convertGeminiToolName; } });\nvar frontmatter_js_1 = require(\"./transforms/frontmatter.js\");\nObject.defineProperty(exports, \"colorNameToHex\", { enumerable: true, get: function () { return frontmatter_js_1.colorNameToHex; } });\nObject.defineProperty(exports, \"toSingleLine\", { enumerable: true, get: function () { return frontmatter_js_1.toSingleLine; } });\nObject.defineProperty(exports, \"yamlQuote\", { enumerable: true, get: function () { return frontmatter_js_1.yamlQuote; } });\nObject.defineProperty(exports, \"extractFrontmatterField\", { enumerable: true, get: function () { return frontmatter_js_1.extractFrontmatterField; } });\nObject.defineProperty(exports, \"convertClaudeToOpencodeFrontmatter\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeToOpencodeFrontmatter; } });\nObject.defineProperty(exports, \"convertClaudeToGeminiToml\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeToGeminiToml; } });\nObject.defineProperty(exports, \"convertClaudeCommandToCodexSkill\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeCommandToCodexSkill; } });\nObject.defineProperty(exports, \"getCodexSkillAdapterHeader\", { enumerable: true, get: function () { return frontmatter_js_1.getCodexSkillAdapterHeader; } });\nvar content_js_1 = require(\"./transforms/content.js\");\nObject.defineProperty(exports, \"convertSlashCommandsToCodexSkillMentions\", { enumerable: true, get: function () { return content_js_1.convertSlashCommandsToCodexSkillMentions; } });\nObject.defineProperty(exports, \"convertClaudeToCodexMarkdown\", { enumerable: true, get: function () { return content_js_1.convertClaudeToCodexMarkdown; } });\nObject.defineProperty(exports, \"stripSubTags\", { enumerable: true, get: function () { return content_js_1.stripSubTags; } });\nObject.defineProperty(exports, \"convertClaudeToGeminiAgent\", { enumerable: true, get: function () { return content_js_1.convertClaudeToGeminiAgent; } });\nObject.defineProperty(exports, \"replacePathReferences\", { enumerable: true, get: function () { return content_js_1.replacePathReferences; } });\n/**\n * Get all registered adapters.\n */\nfunction getAllAdapters() {\n return [claude_js_1.claudeAdapter, opencode_js_1.opencodeAdapter, gemini_js_1.geminiAdapter, codex_js_1.codexAdapter];\n}\n//# sourceMappingURL=index.js.map","","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport * as crypto from 'node:crypto';\n\nimport chalk from 'chalk';\nimport figlet from 'figlet';\nimport ora from 'ora';\nimport { select, checkbox, confirm } from '@inquirer/prompts';\n\nimport type { RuntimeName, AdapterConfig } from '@maxsim/adapters';\nimport {\n claudeAdapter,\n opencodeAdapter,\n geminiAdapter,\n codexAdapter,\n expandTilde,\n processAttribution,\n buildHookCommand,\n readSettings,\n writeSettings,\n convertClaudeToOpencodeFrontmatter,\n convertClaudeToGeminiToml,\n convertClaudeCommandToCodexSkill,\n convertClaudeToCodexMarkdown,\n stripSubTags,\n convertClaudeToGeminiAgent,\n} from '@maxsim/adapters';\n\n// Get version from package.json\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst pkg = require('../package.json') as { version: string };\n\n// Resolve template asset root — bundled into dist/assets/templates at publish time\nconst templatesRoot = path.resolve(__dirname, 'assets', 'templates');\n\n// Parse args\nconst args = process.argv.slice(2);\nconst hasGlobal = args.includes('--global') || args.includes('-g');\nconst hasLocal = args.includes('--local') || args.includes('-l');\nconst hasOpencode = args.includes('--opencode');\nconst hasClaude = args.includes('--claude');\nconst hasGemini = args.includes('--gemini');\nconst hasCodex = args.includes('--codex');\nconst hasBoth = args.includes('--both'); // Legacy flag, keeps working\nconst hasAll = args.includes('--all');\nconst hasUninstall = args.includes('--uninstall') || args.includes('-u');\n\n// Runtime selection - can be set by flags or interactive prompt\nlet selectedRuntimes: RuntimeName[] = [];\nif (hasAll) {\n selectedRuntimes = ['claude', 'opencode', 'gemini', 'codex'];\n} else if (hasBoth) {\n selectedRuntimes = ['claude', 'opencode'];\n} else {\n if (hasOpencode) selectedRuntimes.push('opencode');\n if (hasClaude) selectedRuntimes.push('claude');\n if (hasGemini) selectedRuntimes.push('gemini');\n if (hasCodex) selectedRuntimes.push('codex');\n}\n\n/**\n * Adapter registry keyed by runtime name\n */\nconst adapterMap: Record<RuntimeName, AdapterConfig> = {\n claude: claudeAdapter,\n opencode: opencodeAdapter,\n gemini: geminiAdapter,\n codex: codexAdapter,\n};\n\n/**\n * Get adapter for a runtime\n */\nfunction getAdapter(runtime: RuntimeName): AdapterConfig {\n return adapterMap[runtime];\n}\n\n/**\n * Get the global config directory for a runtime, using adapter\n */\nfunction getGlobalDir(runtime: RuntimeName, explicitDir: string | null = null): string {\n return getAdapter(runtime).getGlobalDir(explicitDir);\n}\n\n/**\n * Get the config directory path relative to home for hook templating\n */\nfunction getConfigDirFromHome(runtime: RuntimeName, isGlobal: boolean): string {\n return getAdapter(runtime).getConfigDirFromHome(isGlobal);\n}\n\n/**\n * Get the local directory name for a runtime\n */\nfunction getDirName(runtime: RuntimeName): string {\n return getAdapter(runtime).dirName;\n}\n\n/**\n * Get the global config directory for OpenCode (for JSONC permissions)\n * OpenCode follows XDG Base Directory spec\n */\nfunction getOpencodeGlobalDir(): string {\n return opencodeAdapter.getGlobalDir();\n}\n\nconst banner =\n '\\n' +\n chalk.cyan(\n figlet.textSync('MAXSIM', { font: 'ANSI Shadow' })\n .split('\\n')\n .map((line) => ' ' + line)\n .join('\\n'),\n ) +\n '\\n' +\n '\\n' +\n ' MAXSIM ' +\n chalk.dim('v' + pkg.version) +\n '\\n' +\n ' A meta-prompting, context engineering and spec-driven\\n' +\n ' development system for Claude Code, OpenCode, Gemini, and Codex.\\n';\n\n// Parse --config-dir argument\nfunction parseConfigDirArg(): string | null {\n const configDirIndex = args.findIndex(\n (arg) => arg === '--config-dir' || arg === '-c',\n );\n if (configDirIndex !== -1) {\n const nextArg = args[configDirIndex + 1];\n if (!nextArg || nextArg.startsWith('-')) {\n console.error(` ${chalk.yellow('--config-dir requires a path argument')}`);\n process.exit(1);\n }\n return nextArg;\n }\n const configDirArg = args.find(\n (arg) => arg.startsWith('--config-dir=') || arg.startsWith('-c='),\n );\n if (configDirArg) {\n const value = configDirArg.split('=')[1];\n if (!value) {\n console.error(\n ` ${chalk.yellow('--config-dir requires a non-empty path')}`,\n );\n process.exit(1);\n }\n return value;\n }\n return null;\n}\nconst explicitConfigDir = parseConfigDirArg();\nconst hasHelp = args.includes('--help') || args.includes('-h');\nconst forceStatusline = args.includes('--force-statusline');\n\nconsole.log(banner);\n\n// Show help if requested\nif (hasHelp) {\n console.log(\n ` ${chalk.yellow('Usage:')} npx maxsimcli [options]\\n\\n ${chalk.yellow('Options:')}\\n ${chalk.cyan('-g, --global')} Install globally (to config directory)\\n ${chalk.cyan('-l, --local')} Install locally (to current directory)\\n ${chalk.cyan('--claude')} Install for Claude Code only\\n ${chalk.cyan('--opencode')} Install for OpenCode only\\n ${chalk.cyan('--gemini')} Install for Gemini only\\n ${chalk.cyan('--codex')} Install for Codex only\\n ${chalk.cyan('--all')} Install for all runtimes\\n ${chalk.cyan('-u, --uninstall')} Uninstall MAXSIM (remove all MAXSIM files)\\n ${chalk.cyan('-c, --config-dir <path>')} Specify custom config directory\\n ${chalk.cyan('-h, --help')} Show this help message\\n ${chalk.cyan('--force-statusline')} Replace existing statusline config\\n\\n ${chalk.yellow('Examples:')}\\n ${chalk.dim('# Interactive install (prompts for runtime and location)')}\\n npx maxsimcli\\n\\n ${chalk.dim('# Install for Claude Code globally')}\\n npx maxsimcli --claude --global\\n\\n ${chalk.dim('# Install for Gemini globally')}\\n npx maxsimcli --gemini --global\\n\\n ${chalk.dim('# Install for Codex globally')}\\n npx maxsimcli --codex --global\\n\\n ${chalk.dim('# Install for all runtimes globally')}\\n npx maxsimcli --all --global\\n\\n ${chalk.dim('# Install to custom config directory')}\\n npx maxsimcli --codex --global --config-dir ~/.codex-work\\n\\n ${chalk.dim('# Install to current project only')}\\n npx maxsimcli --claude --local\\n\\n ${chalk.dim('# Uninstall MAXSIM from Codex globally')}\\n npx maxsimcli --codex --global --uninstall\\n\\n ${chalk.yellow('Notes:')}\\n The --config-dir option is useful when you have multiple configurations.\\n It takes priority over CLAUDE_CONFIG_DIR / GEMINI_CONFIG_DIR / CODEX_HOME environment variables.\\n`,\n );\n process.exit(0);\n}\n\n// Cache for attribution settings (populated once per runtime during install)\nconst attributionCache = new Map<RuntimeName, null | undefined | string>();\n\n/**\n * Get commit attribution setting for a runtime\n * @returns null = remove, undefined = keep default, string = custom\n */\nfunction getCommitAttribution(runtime: RuntimeName): null | undefined | string {\n if (attributionCache.has(runtime)) {\n return attributionCache.get(runtime);\n }\n\n let result: null | undefined | string;\n\n if (runtime === 'opencode') {\n const config = readSettings(\n path.join(getGlobalDir('opencode', null), 'opencode.json'),\n ) as Record<string, unknown>;\n result =\n (config as { disable_ai_attribution?: boolean }).disable_ai_attribution === true\n ? null\n : undefined;\n } else if (runtime === 'gemini') {\n const settings = readSettings(\n path.join(getGlobalDir('gemini', explicitConfigDir), 'settings.json'),\n ) as Record<string, unknown>;\n const attr = settings.attribution as { commit?: string } | undefined;\n if (!attr || attr.commit === undefined) {\n result = undefined;\n } else if (attr.commit === '') {\n result = null;\n } else {\n result = attr.commit;\n }\n } else if (runtime === 'claude') {\n const settings = readSettings(\n path.join(getGlobalDir('claude', explicitConfigDir), 'settings.json'),\n ) as Record<string, unknown>;\n const attr = settings.attribution as { commit?: string } | undefined;\n if (!attr || attr.commit === undefined) {\n result = undefined;\n } else if (attr.commit === '') {\n result = null;\n } else {\n result = attr.commit;\n }\n } else {\n result = undefined;\n }\n\n attributionCache.set(runtime, result);\n return result;\n}\n\n/**\n * Copy commands to a flat structure for OpenCode\n * OpenCode expects: command/maxsim-help.md (invoked as /maxsim-help)\n * Source structure: commands/maxsim/help.md\n */\nfunction copyFlattenedCommands(\n srcDir: string,\n destDir: string,\n prefix: string,\n pathPrefix: string,\n runtime: RuntimeName,\n): void {\n if (!fs.existsSync(srcDir)) {\n return;\n }\n\n if (fs.existsSync(destDir)) {\n for (const file of fs.readdirSync(destDir)) {\n if (file.startsWith(`${prefix}-`) && file.endsWith('.md')) {\n fs.unlinkSync(path.join(destDir, file));\n }\n }\n } else {\n fs.mkdirSync(destDir, { recursive: true });\n }\n\n const entries = fs.readdirSync(srcDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(srcDir, entry.name);\n\n if (entry.isDirectory()) {\n copyFlattenedCommands(\n srcPath,\n destDir,\n `${prefix}-${entry.name}`,\n pathPrefix,\n runtime,\n );\n } else if (entry.name.endsWith('.md')) {\n const baseName = entry.name.replace('.md', '');\n const destName = `${prefix}-${baseName}.md`;\n const destPath = path.join(destDir, destName);\n\n let content = fs.readFileSync(srcPath, 'utf8');\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n const opencodeDirRegex = /~\\/\\.opencode\\//g;\n content = content.replace(globalClaudeRegex, pathPrefix);\n content = content.replace(localClaudeRegex, `./${getDirName(runtime)}/`);\n content = content.replace(opencodeDirRegex, pathPrefix);\n content = processAttribution(content, getCommitAttribution(runtime));\n content = convertClaudeToOpencodeFrontmatter(content);\n\n fs.writeFileSync(destPath, content);\n }\n }\n}\n\nfunction listCodexSkillNames(\n skillsDir: string,\n prefix: string = 'maxsim-',\n): string[] {\n if (!fs.existsSync(skillsDir)) return [];\n const entries = fs.readdirSync(skillsDir, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory() && entry.name.startsWith(prefix))\n .filter((entry) =>\n fs.existsSync(path.join(skillsDir, entry.name, 'SKILL.md')),\n )\n .map((entry) => entry.name)\n .sort();\n}\n\nfunction copyCommandsAsCodexSkills(\n srcDir: string,\n skillsDir: string,\n prefix: string,\n pathPrefix: string,\n runtime: RuntimeName,\n): void {\n if (!fs.existsSync(srcDir)) {\n return;\n }\n\n fs.mkdirSync(skillsDir, { recursive: true });\n\n const existing = fs.readdirSync(skillsDir, { withFileTypes: true });\n for (const entry of existing) {\n if (entry.isDirectory() && entry.name.startsWith(`${prefix}-`)) {\n fs.rmSync(path.join(skillsDir, entry.name), { recursive: true });\n }\n }\n\n function recurse(currentSrcDir: string, currentPrefix: string): void {\n const entries = fs.readdirSync(currentSrcDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(currentSrcDir, entry.name);\n if (entry.isDirectory()) {\n recurse(srcPath, `${currentPrefix}-${entry.name}`);\n continue;\n }\n\n if (!entry.name.endsWith('.md')) {\n continue;\n }\n\n const baseName = entry.name.replace('.md', '');\n const skillName = `${currentPrefix}-${baseName}`;\n const skillDir = path.join(skillsDir, skillName);\n fs.mkdirSync(skillDir, { recursive: true });\n\n let content = fs.readFileSync(srcPath, 'utf8');\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n const codexDirRegex = /~\\/\\.codex\\//g;\n content = content.replace(globalClaudeRegex, pathPrefix);\n content = content.replace(localClaudeRegex, `./${getDirName(runtime)}/`);\n content = content.replace(codexDirRegex, pathPrefix);\n content = processAttribution(content, getCommitAttribution(runtime));\n content = convertClaudeCommandToCodexSkill(content, skillName);\n\n fs.writeFileSync(path.join(skillDir, 'SKILL.md'), content);\n }\n }\n\n recurse(srcDir, prefix);\n}\n\n/**\n * Recursively copy directory, replacing paths in .md files\n * Deletes existing destDir first to remove orphaned files from previous versions\n */\nfunction copyWithPathReplacement(\n srcDir: string,\n destDir: string,\n pathPrefix: string,\n runtime: RuntimeName,\n isCommand: boolean = false,\n): void {\n const isOpencode = runtime === 'opencode';\n const isCodex = runtime === 'codex';\n const dirName = getDirName(runtime);\n\n if (fs.existsSync(destDir)) {\n fs.rmSync(destDir, { recursive: true });\n }\n fs.mkdirSync(destDir, { recursive: true });\n\n const entries = fs.readdirSync(srcDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(srcDir, entry.name);\n const destPath = path.join(destDir, entry.name);\n\n if (entry.isDirectory()) {\n copyWithPathReplacement(srcPath, destPath, pathPrefix, runtime, isCommand);\n } else if (entry.name.endsWith('.md')) {\n let content = fs.readFileSync(srcPath, 'utf8');\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n content = content.replace(globalClaudeRegex, pathPrefix);\n content = content.replace(localClaudeRegex, `./${dirName}/`);\n content = processAttribution(content, getCommitAttribution(runtime));\n\n if (isOpencode) {\n content = convertClaudeToOpencodeFrontmatter(content);\n fs.writeFileSync(destPath, content);\n } else if (runtime === 'gemini') {\n if (isCommand) {\n content = stripSubTags(content);\n const tomlContent = convertClaudeToGeminiToml(content);\n const tomlPath = destPath.replace(/\\.md$/, '.toml');\n fs.writeFileSync(tomlPath, tomlContent);\n } else {\n fs.writeFileSync(destPath, content);\n }\n } else if (isCodex) {\n content = convertClaudeToCodexMarkdown(content);\n fs.writeFileSync(destPath, content);\n } else {\n fs.writeFileSync(destPath, content);\n }\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\n/**\n * Clean up orphaned files from previous MAXSIM versions\n */\nfunction cleanupOrphanedFiles(configDir: string): void {\n const orphanedFiles = [\n 'hooks/maxsim-notify.sh',\n 'hooks/statusline.js',\n ];\n\n for (const relPath of orphanedFiles) {\n const fullPath = path.join(configDir, relPath);\n if (fs.existsSync(fullPath)) {\n fs.unlinkSync(fullPath);\n console.log(` ${chalk.green('\\u2713')} Removed orphaned ${relPath}`);\n }\n }\n}\n\n/**\n * Clean up orphaned hook registrations from settings.json\n */\nfunction cleanupOrphanedHooks(\n settings: Record<string, unknown>,\n): Record<string, unknown> {\n const orphanedHookPatterns = [\n 'maxsim-notify.sh',\n 'hooks/statusline.js',\n 'maxsim-intel-index.js',\n 'maxsim-intel-session.js',\n 'maxsim-intel-prune.js',\n ];\n\n let cleanedHooks = false;\n\n interface HookEntry {\n hooks?: Array<{ command?: string }>;\n }\n\n const hooks = settings.hooks as Record<string, HookEntry[]> | undefined;\n if (hooks) {\n for (const eventType of Object.keys(hooks)) {\n const hookEntries = hooks[eventType];\n if (Array.isArray(hookEntries)) {\n const filtered = hookEntries.filter((entry: HookEntry) => {\n if (entry.hooks && Array.isArray(entry.hooks)) {\n const hasOrphaned = entry.hooks.some(\n (h) =>\n h.command &&\n orphanedHookPatterns.some((pattern) =>\n h.command!.includes(pattern),\n ),\n );\n if (hasOrphaned) {\n cleanedHooks = true;\n return false;\n }\n }\n return true;\n });\n hooks[eventType] = filtered;\n }\n }\n }\n\n if (cleanedHooks) {\n console.log(\n ` ${chalk.green('\\u2713')} Removed orphaned hook registrations`,\n );\n }\n\n const statusLine = settings.statusLine as { command?: string } | undefined;\n if (\n statusLine &&\n statusLine.command &&\n statusLine.command.includes('statusline.js') &&\n !statusLine.command.includes('maxsim-statusline.js')\n ) {\n statusLine.command = statusLine.command.replace(\n /statusline\\.js/,\n 'maxsim-statusline.js',\n );\n console.log(\n ` ${chalk.green('\\u2713')} Updated statusline path (statusline.js \\u2192 maxsim-statusline.js)`,\n );\n }\n\n return settings;\n}\n\n/**\n * Uninstall MAXSIM from the specified directory for a specific runtime\n */\nfunction uninstall(isGlobal: boolean, runtime: RuntimeName = 'claude'): void {\n const isOpencode = runtime === 'opencode';\n const isCodex = runtime === 'codex';\n const dirName = getDirName(runtime);\n\n const targetDir = isGlobal\n ? getGlobalDir(runtime, explicitConfigDir)\n : path.join(process.cwd(), dirName);\n\n const locationLabel = isGlobal\n ? targetDir.replace(os.homedir(), '~')\n : targetDir.replace(process.cwd(), '.');\n\n let runtimeLabel = 'Claude Code';\n if (runtime === 'opencode') runtimeLabel = 'OpenCode';\n if (runtime === 'gemini') runtimeLabel = 'Gemini';\n if (runtime === 'codex') runtimeLabel = 'Codex';\n\n console.log(\n ` Uninstalling MAXSIM from ${chalk.cyan(runtimeLabel)} at ${chalk.cyan(locationLabel)}\\n`,\n );\n\n if (!fs.existsSync(targetDir)) {\n console.log(\n ` ${chalk.yellow('\\u26a0')} Directory does not exist: ${locationLabel}`,\n );\n console.log(` Nothing to uninstall.\\n`);\n return;\n }\n\n let removedCount = 0;\n\n // 1. Remove MAXSIM commands/skills\n if (isOpencode) {\n const commandDir = path.join(targetDir, 'command');\n if (fs.existsSync(commandDir)) {\n const files = fs.readdirSync(commandDir);\n for (const file of files) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n fs.unlinkSync(path.join(commandDir, file));\n removedCount++;\n }\n }\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM commands from command/`,\n );\n }\n } else if (isCodex) {\n const skillsDir = path.join(targetDir, 'skills');\n if (fs.existsSync(skillsDir)) {\n let skillCount = 0;\n const entries = fs.readdirSync(skillsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory() && entry.name.startsWith('maxsim-')) {\n fs.rmSync(path.join(skillsDir, entry.name), { recursive: true });\n skillCount++;\n }\n }\n if (skillCount > 0) {\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed ${skillCount} Codex skills`,\n );\n }\n }\n } else {\n const maxsimCommandsDir = path.join(targetDir, 'commands', 'maxsim');\n if (fs.existsSync(maxsimCommandsDir)) {\n fs.rmSync(maxsimCommandsDir, { recursive: true });\n removedCount++;\n console.log(` ${chalk.green('\\u2713')} Removed commands/maxsim/`);\n }\n }\n\n // 2. Remove maxsim directory\n const maxsimDir = path.join(targetDir, 'maxsim');\n if (fs.existsSync(maxsimDir)) {\n fs.rmSync(maxsimDir, { recursive: true });\n removedCount++;\n console.log(` ${chalk.green('\\u2713')} Removed maxsim/`);\n }\n\n // 3. Remove MAXSIM agents\n const agentsDir = path.join(targetDir, 'agents');\n if (fs.existsSync(agentsDir)) {\n const files = fs.readdirSync(agentsDir);\n let agentCount = 0;\n for (const file of files) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n fs.unlinkSync(path.join(agentsDir, file));\n agentCount++;\n }\n }\n if (agentCount > 0) {\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed ${agentCount} MAXSIM agents`,\n );\n }\n }\n\n // 4. Remove MAXSIM hooks\n const hooksDir = path.join(targetDir, 'hooks');\n if (fs.existsSync(hooksDir)) {\n const maxsimHooks = [\n 'maxsim-statusline.js',\n 'maxsim-check-update.js',\n 'maxsim-check-update.sh',\n 'maxsim-context-monitor.js',\n ];\n let hookCount = 0;\n for (const hook of maxsimHooks) {\n const hookPath = path.join(hooksDir, hook);\n if (fs.existsSync(hookPath)) {\n fs.unlinkSync(hookPath);\n hookCount++;\n }\n }\n if (hookCount > 0) {\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed ${hookCount} MAXSIM hooks`,\n );\n }\n }\n\n // 5. Remove MAXSIM package.json (CommonJS mode marker)\n const pkgJsonPath = path.join(targetDir, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const content = fs.readFileSync(pkgJsonPath, 'utf8').trim();\n if (content === '{\"type\":\"commonjs\"}') {\n fs.unlinkSync(pkgJsonPath);\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM package.json`,\n );\n }\n } catch {\n // Ignore read errors\n }\n }\n\n // 6. Clean up settings.json\n const settingsPath = path.join(targetDir, 'settings.json');\n if (fs.existsSync(settingsPath)) {\n const settings = readSettings(settingsPath);\n let settingsModified = false;\n\n interface StatusLine {\n command?: string;\n url?: string;\n }\n\n interface SettingsHookEntry {\n hooks?: Array<{ command?: string }>;\n }\n\n const statusLine = settings.statusLine as StatusLine | undefined;\n if (\n statusLine &&\n statusLine.command &&\n statusLine.command.includes('maxsim-statusline')\n ) {\n delete settings.statusLine;\n settingsModified = true;\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM statusline from settings`,\n );\n }\n\n const settingsHooks = settings.hooks as\n | Record<string, SettingsHookEntry[]>\n | undefined;\n if (settingsHooks && settingsHooks.SessionStart) {\n const before = settingsHooks.SessionStart.length;\n settingsHooks.SessionStart = settingsHooks.SessionStart.filter(\n (entry: SettingsHookEntry) => {\n if (entry.hooks && Array.isArray(entry.hooks)) {\n const hasMaxsimHook = entry.hooks.some(\n (h) =>\n h.command &&\n (h.command.includes('maxsim-check-update') ||\n h.command.includes('maxsim-statusline')),\n );\n return !hasMaxsimHook;\n }\n return true;\n },\n );\n if (settingsHooks.SessionStart.length < before) {\n settingsModified = true;\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM hooks from settings`,\n );\n }\n if (settingsHooks.SessionStart.length === 0) {\n delete settingsHooks.SessionStart;\n }\n }\n\n if (settingsHooks && settingsHooks.PostToolUse) {\n const before = settingsHooks.PostToolUse.length;\n settingsHooks.PostToolUse = settingsHooks.PostToolUse.filter(\n (entry: SettingsHookEntry) => {\n if (entry.hooks && Array.isArray(entry.hooks)) {\n const hasMaxsimHook = entry.hooks.some(\n (h) =>\n h.command &&\n h.command.includes('maxsim-context-monitor'),\n );\n return !hasMaxsimHook;\n }\n return true;\n },\n );\n if (settingsHooks.PostToolUse.length < before) {\n settingsModified = true;\n console.log(\n ` ${chalk.green('\\u2713')} Removed context monitor hook from settings`,\n );\n }\n if (settingsHooks.PostToolUse.length === 0) {\n delete settingsHooks.PostToolUse;\n }\n }\n\n if (settingsHooks && Object.keys(settingsHooks).length === 0) {\n delete settings.hooks;\n }\n\n if (settingsModified) {\n writeSettings(settingsPath, settings);\n removedCount++;\n }\n }\n\n // 7. For OpenCode, clean up permissions from opencode.json\n if (isOpencode) {\n const opencodeConfigDir = isGlobal\n ? getOpencodeGlobalDir()\n : path.join(process.cwd(), '.opencode');\n const configPath = path.join(opencodeConfigDir, 'opencode.json');\n if (fs.existsSync(configPath)) {\n try {\n const config = JSON.parse(\n fs.readFileSync(configPath, 'utf8'),\n ) as Record<string, unknown>;\n let modified = false;\n\n const permission = config.permission as\n | Record<string, Record<string, unknown>>\n | undefined;\n if (permission) {\n for (const permType of ['read', 'external_directory'] as const) {\n if (permission[permType]) {\n const keys = Object.keys(permission[permType]);\n for (const key of keys) {\n if (key.includes('maxsim')) {\n delete permission[permType][key];\n modified = true;\n }\n }\n if (Object.keys(permission[permType]).length === 0) {\n delete permission[permType];\n }\n }\n }\n if (Object.keys(permission).length === 0) {\n delete config.permission;\n }\n }\n\n if (modified) {\n fs.writeFileSync(\n configPath,\n JSON.stringify(config, null, 2) + '\\n',\n );\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM permissions from opencode.json`,\n );\n }\n } catch {\n // Ignore JSON parse errors\n }\n }\n }\n\n if (removedCount === 0) {\n console.log(\n ` ${chalk.yellow('\\u26a0')} No MAXSIM files found to remove.`,\n );\n }\n\n console.log(`\n ${chalk.green('Done!')} MAXSIM has been uninstalled from ${runtimeLabel}.\n Your other files and settings have been preserved.\n`);\n}\n\n/**\n * Parse JSONC (JSON with Comments) by stripping comments and trailing commas.\n */\nfunction parseJsonc(content: string): Record<string, unknown> {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n\n let result = '';\n let inString = false;\n let i = 0;\n while (i < content.length) {\n const char = content[i];\n const next = content[i + 1];\n\n if (inString) {\n result += char;\n if (char === '\\\\' && i + 1 < content.length) {\n result += next;\n i += 2;\n continue;\n }\n if (char === '\"') {\n inString = false;\n }\n i++;\n } else {\n if (char === '\"') {\n inString = true;\n result += char;\n i++;\n } else if (char === '/' && next === '/') {\n while (i < content.length && content[i] !== '\\n') {\n i++;\n }\n } else if (char === '/' && next === '*') {\n i += 2;\n while (\n i < content.length - 1 &&\n !(content[i] === '*' && content[i + 1] === '/')\n ) {\n i++;\n }\n i += 2;\n } else {\n result += char;\n i++;\n }\n }\n }\n\n result = result.replace(/,(\\s*[}\\]])/g, '$1');\n\n return JSON.parse(result) as Record<string, unknown>;\n}\n\n/**\n * Configure OpenCode permissions to allow reading MAXSIM reference docs\n */\nfunction configureOpencodePermissions(isGlobal: boolean = true): void {\n const opencodeConfigDir = isGlobal\n ? getOpencodeGlobalDir()\n : path.join(process.cwd(), '.opencode');\n const configPath = path.join(opencodeConfigDir, 'opencode.json');\n\n fs.mkdirSync(opencodeConfigDir, { recursive: true });\n\n let config: Record<string, unknown> = {};\n if (fs.existsSync(configPath)) {\n try {\n const content = fs.readFileSync(configPath, 'utf8');\n config = parseJsonc(content);\n } catch (e: unknown) {\n console.log(\n ` ${chalk.yellow('\\u26a0')} Could not parse opencode.json - skipping permission config`,\n );\n console.log(\n ` ${chalk.dim(`Reason: ${(e as Error).message}`)}`,\n );\n console.log(\n ` ${chalk.dim('Your config was NOT modified. Fix the syntax manually if needed.')}`,\n );\n return;\n }\n }\n\n type PermissionConfig = Record<string, Record<string, string>>;\n if (!config.permission) {\n config.permission = {} as PermissionConfig;\n }\n const permission = config.permission as PermissionConfig;\n\n const defaultConfigDir = path.join(os.homedir(), '.config', 'opencode');\n const maxsimPath =\n opencodeConfigDir === defaultConfigDir\n ? '~/.config/opencode/maxsim/*'\n : `${opencodeConfigDir.replace(/\\\\/g, '/')}/maxsim/*`;\n\n let modified = false;\n\n if (!permission.read || typeof permission.read !== 'object') {\n permission.read = {};\n }\n if (permission.read[maxsimPath] !== 'allow') {\n permission.read[maxsimPath] = 'allow';\n modified = true;\n }\n\n if (\n !permission.external_directory ||\n typeof permission.external_directory !== 'object'\n ) {\n permission.external_directory = {};\n }\n if (permission.external_directory[maxsimPath] !== 'allow') {\n permission.external_directory[maxsimPath] = 'allow';\n modified = true;\n }\n\n if (!modified) {\n return;\n }\n\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\\n');\n console.log(\n ` ${chalk.green('\\u2713')} Configured read permission for MAXSIM docs`,\n );\n}\n\n/**\n * Verify a directory exists and contains files\n */\nfunction verifyInstalled(dirPath: string, description: string): boolean {\n if (!fs.existsSync(dirPath)) {\n console.error(\n ` ${chalk.yellow('\\u2717')} Failed to install ${description}: directory not created`,\n );\n return false;\n }\n try {\n const entries = fs.readdirSync(dirPath);\n if (entries.length === 0) {\n console.error(\n ` ${chalk.yellow('\\u2717')} Failed to install ${description}: directory is empty`,\n );\n return false;\n }\n } catch (e: unknown) {\n console.error(\n ` ${chalk.yellow('\\u2717')} Failed to install ${description}: ${(e as Error).message}`,\n );\n return false;\n }\n return true;\n}\n\n/**\n * Verify a file exists\n */\nfunction verifyFileInstalled(filePath: string, description: string): boolean {\n if (!fs.existsSync(filePath)) {\n console.error(\n ` ${chalk.yellow('\\u2717')} Failed to install ${description}: file not created`,\n );\n return false;\n }\n return true;\n}\n\n// ──────────────────────────────────────────────────────\n// Local Patch Persistence\n// ──────────────────────────────────────────────────────\n\nconst PATCHES_DIR_NAME = 'maxsim-local-patches';\nconst MANIFEST_NAME = 'maxsim-file-manifest.json';\n\n/**\n * Compute SHA256 hash of file contents\n */\nfunction fileHash(filePath: string): string {\n const content = fs.readFileSync(filePath);\n return crypto.createHash('sha256').update(content).digest('hex');\n}\n\n/**\n * Recursively collect all files in dir with their hashes\n */\nfunction generateManifest(\n dir: string,\n baseDir?: string,\n): Record<string, string> {\n if (!baseDir) baseDir = dir;\n const manifest: Record<string, string> = {};\n if (!fs.existsSync(dir)) return manifest;\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relPath = path.relative(baseDir, fullPath).replace(/\\\\/g, '/');\n if (entry.isDirectory()) {\n Object.assign(manifest, generateManifest(fullPath, baseDir));\n } else {\n manifest[relPath] = fileHash(fullPath);\n }\n }\n return manifest;\n}\n\ninterface Manifest {\n version: string;\n timestamp: string;\n files: Record<string, string>;\n}\n\n/**\n * Write file manifest after installation for future modification detection\n */\nfunction writeManifest(\n configDir: string,\n runtime: RuntimeName = 'claude',\n): Manifest {\n const isOpencode = runtime === 'opencode';\n const isCodex = runtime === 'codex';\n const maxsimDir = path.join(configDir, 'maxsim');\n const commandsDir = path.join(configDir, 'commands', 'maxsim');\n const opencodeCommandDir = path.join(configDir, 'command');\n const codexSkillsDir = path.join(configDir, 'skills');\n const agentsDir = path.join(configDir, 'agents');\n const manifest: Manifest = {\n version: pkg.version,\n timestamp: new Date().toISOString(),\n files: {},\n };\n\n const maxsimHashes = generateManifest(maxsimDir);\n for (const [rel, hash] of Object.entries(maxsimHashes)) {\n manifest.files['maxsim/' + rel] = hash;\n }\n if (!isOpencode && !isCodex && fs.existsSync(commandsDir)) {\n const cmdHashes = generateManifest(commandsDir);\n for (const [rel, hash] of Object.entries(cmdHashes)) {\n manifest.files['commands/maxsim/' + rel] = hash;\n }\n }\n if (isOpencode && fs.existsSync(opencodeCommandDir)) {\n for (const file of fs.readdirSync(opencodeCommandDir)) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n manifest.files['command/' + file] = fileHash(\n path.join(opencodeCommandDir, file),\n );\n }\n }\n }\n if (isCodex && fs.existsSync(codexSkillsDir)) {\n for (const skillName of listCodexSkillNames(codexSkillsDir)) {\n const skillRoot = path.join(codexSkillsDir, skillName);\n const skillHashes = generateManifest(skillRoot);\n for (const [rel, hash] of Object.entries(skillHashes)) {\n manifest.files[`skills/${skillName}/${rel}`] = hash;\n }\n }\n }\n if (fs.existsSync(agentsDir)) {\n for (const file of fs.readdirSync(agentsDir)) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n manifest.files['agents/' + file] = fileHash(\n path.join(agentsDir, file),\n );\n }\n }\n }\n\n fs.writeFileSync(\n path.join(configDir, MANIFEST_NAME),\n JSON.stringify(manifest, null, 2),\n );\n return manifest;\n}\n\ninterface BackupMeta {\n backed_up_at: string;\n from_version: string;\n files: string[];\n}\n\n/**\n * Detect user-modified MAXSIM files by comparing against install manifest.\n */\nfunction saveLocalPatches(configDir: string): string[] {\n const manifestPath = path.join(configDir, MANIFEST_NAME);\n if (!fs.existsSync(manifestPath)) return [];\n\n let manifest: Manifest;\n try {\n manifest = JSON.parse(\n fs.readFileSync(manifestPath, 'utf8'),\n ) as Manifest;\n } catch {\n return [];\n }\n\n const patchesDir = path.join(configDir, PATCHES_DIR_NAME);\n const modified: string[] = [];\n\n for (const [relPath, originalHash] of Object.entries(manifest.files || {})) {\n const fullPath = path.join(configDir, relPath);\n if (!fs.existsSync(fullPath)) continue;\n const currentHash = fileHash(fullPath);\n if (currentHash !== originalHash) {\n const backupPath = path.join(patchesDir, relPath);\n fs.mkdirSync(path.dirname(backupPath), { recursive: true });\n fs.copyFileSync(fullPath, backupPath);\n modified.push(relPath);\n }\n }\n\n if (modified.length > 0) {\n const meta: BackupMeta = {\n backed_up_at: new Date().toISOString(),\n from_version: manifest.version,\n files: modified,\n };\n fs.writeFileSync(\n path.join(patchesDir, 'backup-meta.json'),\n JSON.stringify(meta, null, 2),\n );\n console.log(\n ' ' +\n chalk.yellow('i') +\n ' Found ' +\n modified.length +\n ' locally modified MAXSIM file(s) \\u2014 backed up to ' +\n PATCHES_DIR_NAME +\n '/',\n );\n for (const f of modified) {\n console.log(' ' + chalk.dim(f));\n }\n }\n return modified;\n}\n\n/**\n * After install, report backed-up patches for user to reapply.\n */\nfunction reportLocalPatches(\n configDir: string,\n runtime: RuntimeName = 'claude',\n): string[] {\n const patchesDir = path.join(configDir, PATCHES_DIR_NAME);\n const metaPath = path.join(patchesDir, 'backup-meta.json');\n if (!fs.existsSync(metaPath)) return [];\n\n let meta: BackupMeta;\n try {\n meta = JSON.parse(\n fs.readFileSync(metaPath, 'utf8'),\n ) as BackupMeta;\n } catch {\n return [];\n }\n\n if (meta.files && meta.files.length > 0) {\n const reapplyCommand =\n runtime === 'opencode'\n ? '/maxsim-reapply-patches'\n : runtime === 'codex'\n ? '$maxsim-reapply-patches'\n : '/maxsim:reapply-patches';\n console.log('');\n console.log(\n ' ' +\n chalk.yellow('Local patches detected') +\n ' (from v' +\n meta.from_version +\n '):',\n );\n for (const f of meta.files) {\n console.log(' ' + chalk.cyan(f));\n }\n console.log('');\n console.log(\n ' Your modifications are saved in ' +\n chalk.cyan(PATCHES_DIR_NAME + '/'),\n );\n console.log(\n ' Run ' +\n chalk.cyan(reapplyCommand) +\n ' to merge them into the new version.',\n );\n console.log(' Or manually compare and merge the files.');\n console.log('');\n }\n return meta.files || [];\n}\n\ninterface InstallResult {\n settingsPath: string | null;\n settings: Record<string, unknown> | null;\n statuslineCommand: string | null;\n runtime: RuntimeName;\n}\n\nfunction install(\n isGlobal: boolean,\n runtime: RuntimeName = 'claude',\n): InstallResult {\n const isOpencode = runtime === 'opencode';\n const isGemini = runtime === 'gemini';\n const isCodex = runtime === 'codex';\n const dirName = getDirName(runtime);\n const src = templatesRoot;\n\n const targetDir = isGlobal\n ? getGlobalDir(runtime, explicitConfigDir)\n : path.join(process.cwd(), dirName);\n\n const locationLabel = isGlobal\n ? targetDir.replace(os.homedir(), '~')\n : targetDir.replace(process.cwd(), '.');\n\n const pathPrefix = isGlobal\n ? `${targetDir.replace(/\\\\/g, '/')}/`\n : `./${dirName}/`;\n\n let runtimeLabel = 'Claude Code';\n if (isOpencode) runtimeLabel = 'OpenCode';\n if (isGemini) runtimeLabel = 'Gemini';\n if (isCodex) runtimeLabel = 'Codex';\n\n console.log(\n ` Installing for ${chalk.cyan(runtimeLabel)} to ${chalk.cyan(locationLabel)}\\n`,\n );\n\n const failures: string[] = [];\n\n // Save any locally modified MAXSIM files before they get wiped\n saveLocalPatches(targetDir);\n\n // Clean up orphaned files from previous versions\n cleanupOrphanedFiles(targetDir);\n\n // OpenCode uses command/ (flat), Codex uses skills/, Claude/Gemini use commands/maxsim/\n let spinner = ora({ text: 'Installing commands...', color: 'cyan' }).start();\n if (isOpencode) {\n const commandDir = path.join(targetDir, 'command');\n fs.mkdirSync(commandDir, { recursive: true });\n\n const maxsimSrc = path.join(src, 'commands', 'maxsim');\n copyFlattenedCommands(maxsimSrc, commandDir, 'maxsim', pathPrefix, runtime);\n if (verifyInstalled(commandDir, 'command/maxsim-*')) {\n const count = fs\n .readdirSync(commandDir)\n .filter((f) => f.startsWith('maxsim-')).length;\n spinner.succeed(chalk.green('✓') + ` Installed ${count} commands to command/`);\n } else {\n spinner.fail('Failed to install commands');\n failures.push('command/maxsim-*');\n }\n } else if (isCodex) {\n const skillsDir = path.join(targetDir, 'skills');\n const maxsimSrc = path.join(src, 'commands', 'maxsim');\n copyCommandsAsCodexSkills(maxsimSrc, skillsDir, 'maxsim', pathPrefix, runtime);\n const installedSkillNames = listCodexSkillNames(skillsDir);\n if (installedSkillNames.length > 0) {\n spinner.succeed(chalk.green('✓') + ` Installed ${installedSkillNames.length} skills to skills/`);\n } else {\n spinner.fail('Failed to install skills');\n failures.push('skills/maxsim-*');\n }\n } else {\n const commandsDir = path.join(targetDir, 'commands');\n fs.mkdirSync(commandsDir, { recursive: true });\n\n const maxsimSrc = path.join(src, 'commands', 'maxsim');\n const maxsimDest = path.join(commandsDir, 'maxsim');\n copyWithPathReplacement(maxsimSrc, maxsimDest, pathPrefix, runtime, true);\n if (verifyInstalled(maxsimDest, 'commands/maxsim')) {\n spinner.succeed(chalk.green('✓') + ' Installed commands/maxsim');\n } else {\n spinner.fail('Failed to install commands/maxsim');\n failures.push('commands/maxsim');\n }\n }\n\n // Copy maxsim directory content (workflows, templates, references) with path replacement\n // Templates package layout: workflows/, templates/, references/ at root\n // Install target: maxsim/workflows/, maxsim/templates/, maxsim/references/\n spinner = ora({ text: 'Installing workflows and templates...', color: 'cyan' }).start();\n const skillDest = path.join(targetDir, 'maxsim');\n const maxsimSubdirs = ['workflows', 'templates', 'references'];\n if (fs.existsSync(skillDest)) {\n fs.rmSync(skillDest, { recursive: true });\n }\n fs.mkdirSync(skillDest, { recursive: true });\n for (const subdir of maxsimSubdirs) {\n const subdirSrc = path.join(src, subdir);\n if (fs.existsSync(subdirSrc)) {\n const subdirDest = path.join(skillDest, subdir);\n copyWithPathReplacement(subdirSrc, subdirDest, pathPrefix, runtime);\n }\n }\n if (verifyInstalled(skillDest, 'maxsim')) {\n spinner.succeed(chalk.green('✓') + ' Installed maxsim');\n } else {\n spinner.fail('Failed to install maxsim');\n failures.push('maxsim');\n }\n\n // Copy agents to agents directory\n const agentsSrc = path.join(src, 'agents');\n if (fs.existsSync(agentsSrc)) {\n spinner = ora({ text: 'Installing agents...', color: 'cyan' }).start();\n const agentsDest = path.join(targetDir, 'agents');\n fs.mkdirSync(agentsDest, { recursive: true });\n\n // Remove old MAXSIM agents before copying new ones\n if (fs.existsSync(agentsDest)) {\n for (const file of fs.readdirSync(agentsDest)) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n fs.unlinkSync(path.join(agentsDest, file));\n }\n }\n }\n\n const agentEntries = fs.readdirSync(agentsSrc, { withFileTypes: true });\n for (const entry of agentEntries) {\n if (entry.isFile() && entry.name.endsWith('.md')) {\n let content = fs.readFileSync(\n path.join(agentsSrc, entry.name),\n 'utf8',\n );\n const dirRegex = /~\\/\\.claude\\//g;\n content = content.replace(dirRegex, pathPrefix);\n content = processAttribution(content, getCommitAttribution(runtime));\n if (isOpencode) {\n content = convertClaudeToOpencodeFrontmatter(content);\n } else if (isGemini) {\n content = convertClaudeToGeminiAgent(content);\n } else if (isCodex) {\n content = convertClaudeToCodexMarkdown(content);\n }\n fs.writeFileSync(path.join(agentsDest, entry.name), content);\n }\n }\n if (verifyInstalled(agentsDest, 'agents')) {\n spinner.succeed(chalk.green('✓') + ' Installed agents');\n } else {\n spinner.fail('Failed to install agents');\n failures.push('agents');\n }\n }\n\n // Copy CHANGELOG.md (lives at repo root, one level above templates package)\n const changelogSrc = path.join(src, '..', 'CHANGELOG.md');\n const changelogDest = path.join(targetDir, 'maxsim', 'CHANGELOG.md');\n if (fs.existsSync(changelogSrc)) {\n spinner = ora({ text: 'Installing CHANGELOG.md...', color: 'cyan' }).start();\n fs.copyFileSync(changelogSrc, changelogDest);\n if (verifyFileInstalled(changelogDest, 'CHANGELOG.md')) {\n spinner.succeed(chalk.green('✓') + ' Installed CHANGELOG.md');\n } else {\n spinner.fail('Failed to install CHANGELOG.md');\n failures.push('CHANGELOG.md');\n }\n }\n\n // Copy CLAUDE.md (global MAXSIM context for Claude Code)\n const claudeMdSrc = path.join(src, 'CLAUDE.md');\n const claudeMdDest = path.join(targetDir, 'CLAUDE.md');\n if (fs.existsSync(claudeMdSrc)) {\n spinner = ora({ text: 'Installing CLAUDE.md...', color: 'cyan' }).start();\n fs.copyFileSync(claudeMdSrc, claudeMdDest);\n if (verifyFileInstalled(claudeMdDest, 'CLAUDE.md')) {\n spinner.succeed(chalk.green('✓') + ' Installed CLAUDE.md');\n } else {\n spinner.fail('Failed to install CLAUDE.md');\n failures.push('CLAUDE.md');\n }\n }\n\n // Write VERSION file\n const versionDest = path.join(targetDir, 'maxsim', 'VERSION');\n fs.writeFileSync(versionDest, pkg.version);\n if (verifyFileInstalled(versionDest, 'VERSION')) {\n console.log(\n ` ${chalk.green('\\u2713')} Wrote VERSION (${pkg.version})`,\n );\n } else {\n failures.push('VERSION');\n }\n\n if (!isCodex) {\n // Write package.json to force CommonJS mode for MAXSIM scripts\n const pkgJsonDest = path.join(targetDir, 'package.json');\n fs.writeFileSync(pkgJsonDest, '{\"type\":\"commonjs\"}\\n');\n console.log(\n ` ${chalk.green('\\u2713')} Wrote package.json (CommonJS mode)`,\n );\n\n // Install maxsim-tools.cjs binary — workflows call `node ~/.claude/maxsim/bin/maxsim-tools.cjs`\n const toolSrc = path.resolve(__dirname, 'cli.cjs');\n const binDir = path.join(targetDir, 'maxsim', 'bin');\n const toolDest = path.join(binDir, 'maxsim-tools.cjs');\n if (fs.existsSync(toolSrc)) {\n fs.mkdirSync(binDir, { recursive: true });\n fs.copyFileSync(toolSrc, toolDest);\n console.log(` ${chalk.green('\\u2713')} Installed maxsim-tools.cjs`);\n } else {\n console.warn(` ${chalk.yellow('!')} cli.cjs not found at ${toolSrc} — maxsim-tools.cjs not installed`);\n failures.push('maxsim-tools.cjs');\n }\n\n // Copy hooks from bundled assets directory (copied from @maxsim/hooks/dist at build time)\n let hooksSrc: string | null = null;\n const bundledHooksDir = path.resolve(__dirname, 'assets', 'hooks');\n if (fs.existsSync(bundledHooksDir)) {\n hooksSrc = bundledHooksDir;\n } else {\n console.warn(` ${chalk.yellow('!')} bundled hooks not found - hooks will not be installed`);\n }\n\n if (hooksSrc) {\n spinner = ora({ text: 'Installing hooks...', color: 'cyan' }).start();\n const hooksDest = path.join(targetDir, 'hooks');\n fs.mkdirSync(hooksDest, { recursive: true });\n const hookEntries = fs.readdirSync(hooksSrc);\n const configDirReplacement = getConfigDirFromHome(runtime, isGlobal);\n for (const entry of hookEntries) {\n const srcFile = path.join(hooksSrc, entry);\n if (fs.statSync(srcFile).isFile() && entry.endsWith('.cjs') && !entry.includes('.d.')) {\n const destName = entry.replace(/\\.cjs$/, '.js');\n const destFile = path.join(hooksDest, destName);\n let content = fs.readFileSync(srcFile, 'utf8');\n content = content.replace(/'\\.claude'/g, configDirReplacement);\n fs.writeFileSync(destFile, content);\n }\n }\n if (verifyInstalled(hooksDest, 'hooks')) {\n spinner.succeed(chalk.green('✓') + ' Installed hooks (bundled)');\n } else {\n spinner.fail('Failed to install hooks');\n failures.push('hooks');\n }\n }\n }\n\n if (failures.length > 0) {\n console.error(\n `\\n ${chalk.yellow('Installation incomplete!')} Failed: ${failures.join(', ')}`,\n );\n process.exit(1);\n }\n\n // Write file manifest for future modification detection\n writeManifest(targetDir, runtime);\n console.log(\n ` ${chalk.green('\\u2713')} Wrote file manifest (${MANIFEST_NAME})`,\n );\n\n // Report any backed-up local patches\n reportLocalPatches(targetDir, runtime);\n\n if (isCodex) {\n return {\n settingsPath: null,\n settings: null,\n statuslineCommand: null,\n runtime,\n };\n }\n\n // Configure statusline and hooks in settings.json\n const settingsPath = path.join(targetDir, 'settings.json');\n const settings = cleanupOrphanedHooks(readSettings(settingsPath));\n const statuslineCommand = isGlobal\n ? buildHookCommand(targetDir, 'maxsim-statusline.js')\n : 'node ' + dirName + '/hooks/maxsim-statusline.js';\n const updateCheckCommand = isGlobal\n ? buildHookCommand(targetDir, 'maxsim-check-update.js')\n : 'node ' + dirName + '/hooks/maxsim-check-update.js';\n const contextMonitorCommand = isGlobal\n ? buildHookCommand(targetDir, 'maxsim-context-monitor.js')\n : 'node ' + dirName + '/hooks/maxsim-context-monitor.js';\n\n // Enable experimental agents for Gemini CLI\n if (isGemini) {\n if (!settings.experimental) {\n settings.experimental = {};\n }\n const experimental = settings.experimental as Record<string, boolean>;\n if (!experimental.enableAgents) {\n experimental.enableAgents = true;\n console.log(\n ` ${chalk.green('\\u2713')} Enabled experimental agents`,\n );\n }\n }\n\n interface InstallHookEntry {\n hooks?: Array<{ type: string; command: string }>;\n }\n\n // Configure SessionStart hook for update checking (skip for opencode)\n if (!isOpencode) {\n if (!settings.hooks) {\n settings.hooks = {};\n }\n const installHooks = settings.hooks as Record<string, InstallHookEntry[]>;\n if (!installHooks.SessionStart) {\n installHooks.SessionStart = [];\n }\n\n const hasMaxsimUpdateHook = installHooks.SessionStart.some(\n (entry: InstallHookEntry) =>\n entry.hooks &&\n entry.hooks.some(\n (h) => h.command && h.command.includes('maxsim-check-update'),\n ),\n );\n\n if (!hasMaxsimUpdateHook) {\n installHooks.SessionStart.push({\n hooks: [\n {\n type: 'command',\n command: updateCheckCommand,\n },\n ],\n });\n console.log(\n ` ${chalk.green('\\u2713')} Configured update check hook`,\n );\n }\n\n // Configure PostToolUse hook for context window monitoring\n if (!installHooks.PostToolUse) {\n installHooks.PostToolUse = [];\n }\n\n const hasContextMonitorHook = installHooks.PostToolUse.some(\n (entry: InstallHookEntry) =>\n entry.hooks &&\n entry.hooks.some(\n (h) => h.command && h.command.includes('maxsim-context-monitor'),\n ),\n );\n\n if (!hasContextMonitorHook) {\n installHooks.PostToolUse.push({\n hooks: [\n {\n type: 'command',\n command: contextMonitorCommand,\n },\n ],\n });\n console.log(\n ` ${chalk.green('\\u2713')} Configured context window monitor hook`,\n );\n }\n }\n\n return { settingsPath, settings, statuslineCommand, runtime };\n}\n\n/**\n * Apply statusline config, then print completion message\n */\nfunction finishInstall(\n settingsPath: string | null,\n settings: Record<string, unknown> | null,\n statuslineCommand: string | null,\n shouldInstallStatusline: boolean,\n runtime: RuntimeName = 'claude',\n isGlobal: boolean = true,\n): void {\n const isOpencode = runtime === 'opencode';\n const isCodex = runtime === 'codex';\n\n if (shouldInstallStatusline && !isOpencode && !isCodex) {\n settings!.statusLine = {\n type: 'command',\n command: statuslineCommand,\n };\n console.log(` ${chalk.green('\\u2713')} Configured statusline`);\n }\n\n if (!isCodex && settingsPath && settings) {\n writeSettings(settingsPath, settings);\n }\n\n if (isOpencode) {\n configureOpencodePermissions(isGlobal);\n }\n\n let program = 'Claude Code';\n if (runtime === 'opencode') program = 'OpenCode';\n if (runtime === 'gemini') program = 'Gemini';\n if (runtime === 'codex') program = 'Codex';\n\n let command = '/maxsim:help';\n if (runtime === 'opencode') command = '/maxsim-help';\n if (runtime === 'codex') command = '$maxsim-help';\n console.log(`\n ${chalk.green('Done!')} Launch ${program} and run ${chalk.cyan(command)}.\n\n ${chalk.cyan('Join the community:')} https://discord.gg/5JJgD5svVS\n`);\n}\n\n/**\n * Handle statusline configuration — returns true if MAXSIM statusline should be installed\n */\nasync function handleStatusline(\n settings: Record<string, unknown>,\n isInteractive: boolean,\n): Promise<boolean> {\n const hasExisting = settings.statusLine != null;\n\n if (!hasExisting) return true;\n if (forceStatusline) return true;\n\n if (!isInteractive) {\n console.log(\n chalk.yellow('⚠') + ' Skipping statusline (already configured)',\n );\n console.log(\n ' Use ' + chalk.cyan('--force-statusline') + ' to replace\\n',\n );\n return false;\n }\n\n const statusLine = settings.statusLine as { command?: string; url?: string };\n const existingCmd = statusLine.command || statusLine.url || '(custom)';\n\n console.log();\n console.log(chalk.yellow('⚠ Existing statusline detected'));\n console.log();\n console.log(' Your current statusline:');\n console.log(' ' + chalk.dim(`command: ${existingCmd}`));\n console.log();\n console.log(' MAXSIM includes a statusline showing:');\n console.log(' • Model name');\n console.log(' • Current task (from todo list)');\n console.log(' • Context window usage (color-coded)');\n console.log();\n\n const shouldReplace = await confirm({\n message: 'Replace with MAXSIM statusline?',\n default: false,\n });\n\n return shouldReplace;\n}\n\n/**\n * Prompt for runtime selection (multi-select)\n */\nasync function promptRuntime(): Promise<RuntimeName[]> {\n const selected = await checkbox<RuntimeName>({\n message: 'Which runtime(s) would you like to install for?',\n choices: [\n { name: 'Claude Code ' + chalk.dim('(~/.claude)'), value: 'claude', checked: true },\n { name: 'OpenCode ' + chalk.dim('(~/.config/opencode)') + ' — open source, free models', value: 'opencode' },\n { name: 'Gemini ' + chalk.dim('(~/.gemini)'), value: 'gemini' },\n { name: 'Codex ' + chalk.dim('(~/.codex)'), value: 'codex' },\n ],\n validate: (choices) => choices.length > 0 || 'Please select at least one runtime',\n });\n return selected;\n}\n\n/**\n * Prompt for install location\n */\nasync function promptLocation(runtimes: RuntimeName[]): Promise<boolean> {\n if (!process.stdin.isTTY) {\n console.log(\n chalk.yellow('Non-interactive terminal detected, defaulting to global install') + '\\n',\n );\n return true; // isGlobal\n }\n\n const pathExamples = runtimes\n .map((r) => getGlobalDir(r, explicitConfigDir).replace(os.homedir(), '~'))\n .join(', ');\n\n const localExamples = runtimes.map((r) => `./${getDirName(r)}`).join(', ');\n\n const choice = await select<'global' | 'local'>({\n message: 'Where would you like to install?',\n choices: [\n {\n name: 'Global ' + chalk.dim(`(${pathExamples})`) + ' — available in all projects',\n value: 'global',\n },\n {\n name: 'Local ' + chalk.dim(`(${localExamples})`) + ' — this project only',\n value: 'local',\n },\n ],\n });\n\n return choice === 'global';\n}\n\n/**\n * Install MAXSIM for all selected runtimes\n */\nasync function installAllRuntimes(\n runtimes: RuntimeName[],\n isGlobal: boolean,\n isInteractive: boolean,\n): Promise<void> {\n const results: InstallResult[] = [];\n\n for (const runtime of runtimes) {\n const result = install(isGlobal, runtime);\n results.push(result);\n }\n\n const statuslineRuntimes: RuntimeName[] = ['claude', 'gemini'];\n const primaryStatuslineResult = results.find((r) =>\n statuslineRuntimes.includes(r.runtime),\n );\n\n let shouldInstallStatusline = false;\n if (primaryStatuslineResult && primaryStatuslineResult.settings) {\n shouldInstallStatusline = await handleStatusline(\n primaryStatuslineResult.settings,\n isInteractive,\n );\n }\n\n for (const result of results) {\n const useStatusline =\n statuslineRuntimes.includes(result.runtime) && shouldInstallStatusline;\n finishInstall(\n result.settingsPath,\n result.settings,\n result.statuslineCommand,\n useStatusline,\n result.runtime,\n isGlobal,\n );\n }\n}\n\n// Main logic\n(async () => {\n if (hasGlobal && hasLocal) {\n console.error(chalk.yellow('Cannot specify both --global and --local'));\n process.exit(1);\n } else if (explicitConfigDir && hasLocal) {\n console.error(chalk.yellow('Cannot use --config-dir with --local'));\n process.exit(1);\n } else if (hasUninstall) {\n if (!hasGlobal && !hasLocal) {\n console.error(chalk.yellow('--uninstall requires --global or --local'));\n process.exit(1);\n }\n const runtimes: RuntimeName[] =\n selectedRuntimes.length > 0 ? selectedRuntimes : ['claude'];\n for (const runtime of runtimes) {\n uninstall(hasGlobal, runtime);\n }\n } else if (selectedRuntimes.length > 0) {\n if (!hasGlobal && !hasLocal) {\n const isGlobal = await promptLocation(selectedRuntimes);\n await installAllRuntimes(selectedRuntimes, isGlobal, true);\n } else {\n await installAllRuntimes(selectedRuntimes, hasGlobal, false);\n }\n } else if (hasGlobal || hasLocal) {\n await installAllRuntimes(['claude'], hasGlobal, false);\n } else {\n if (!process.stdin.isTTY) {\n console.log(\n chalk.yellow('Non-interactive terminal detected, defaulting to Claude Code global install') + '\\n',\n );\n await installAllRuntimes(['claude'], true, false);\n } else {\n const runtimes = await promptRuntime();\n const isGlobal = await promptLocation(runtimes);\n await installAllRuntimes(runtimes, isGlobal, true);\n }\n }\n})().catch((err: unknown) => {\n if (err instanceof Error && err.message.includes('User force closed')) {\n // User pressed Ctrl+C during an @inquirer/prompts prompt — exit cleanly\n console.log('\\n' + chalk.yellow('Installation cancelled') + '\\n');\n process.exit(0);\n }\n console.error(chalk.red('Unexpected error:'), err);\n process.exit(1);\n});\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"install.cjs","names":["styles","process","os","tty","process","#process","#sigListeners","#emitter","#hupSig","#originalProcessReallyExit","#originalProcessEmit","#loaded","#processEmit","#processReallyExit","process","process","spinners","tty","isUnicodeSupported","process","isUnicodeSupported","isFullWidth","isFullWidth","process","#activeCount","#realStart","#realStop","#stdin","#stdinWasPaused","#stdinWasRaw","#handleInputBound","#isInternalWrite","#deferRenderTimer","#tryRender","#getFullPrefixText","#getFullSuffixText","#options","process","#stream","#linesToClear","#frameIndex","#computeLineCountFrom","#spinner","isUnicodeSupported","cliSpinners","#id","#formatAffix","#lastFrameTime","#internalWrite","#hookedStreams","#hookedWrite","#hookStream","#stringifyChunk","#chunkTerminatesLine","#clearRenderDeferral","#scheduleRenderDeferral","#drainHandler","#buildOutputLine","#isDiscardingStdin","#installHook","#uninstallHook","logSymbols.success","logSymbols.error","logSymbols.warning","logSymbols.info","AsyncLocalStorage","AsyncResource","AsyncResource","process","NO_TRUNCATION","fastStringTruncatedWidth","ESC","stringWidth","#isTTY","#destSrc","#proxy","MuteStream","readline","onSignalExit","AsyncResource","isSelectable","isNavigable","normalizeChoices","path","os","path","os","path","os","path","os","path","fs","claudeAdapter","opencodeAdapter","geminiAdapter","codexAdapter","os","crypto","confirm","checkbox","select"],"sources":["../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../../../node_modules/.pnpm/mimic-function@5.0.1/node_modules/mimic-function/index.js","../../../node_modules/.pnpm/onetime@7.0.0/node_modules/onetime/index.js","../../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/signals.js","../../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/index.js","../../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js","../../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js","../../../node_modules/.pnpm/cli-spinners@3.4.0/node_modules/cli-spinners/spinners.json","../../../node_modules/.pnpm/cli-spinners@3.4.0/node_modules/cli-spinners/index.js","../../../node_modules/.pnpm/yoctocolors@2.1.2/node_modules/yoctocolors/base.js","../../../node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js","../../../node_modules/.pnpm/log-symbols@7.0.1/node_modules/log-symbols/symbols.js","../../../node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup-data.js","../../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/utilities.js","../../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup.js","../../../node_modules/.pnpm/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/index.js","../../../node_modules/.pnpm/string-width@8.2.0/node_modules/string-width/index.js","../../../node_modules/.pnpm/is-interactive@2.0.0/node_modules/is-interactive/index.js","../../../node_modules/.pnpm/stdin-discarder@0.3.1/node_modules/stdin-discarder/index.js","../../../node_modules/.pnpm/ora@9.3.0/node_modules/ora/index.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/key.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/errors.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/hook-engine.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-state.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-effect.js","../../../node_modules/.pnpm/@inquirer+figures@2.0.3/node_modules/@inquirer/figures/dist/index.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/theme.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/make-theme.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-prefix.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-memo.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-ref.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/use-keypress.js","../../../node_modules/.pnpm/cli-width@4.1.0/node_modules/cli-width/index.js","../../../node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/utils.js","../../../node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/index.js","../../../node_modules/.pnpm/fast-string-width@3.0.2/node_modules/fast-string-width/dist/index.js","../../../node_modules/.pnpm/fast-wrap-ansi@0.2.0/node_modules/fast-wrap-ansi/lib/main.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/utils.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/pagination/use-pagination.js","../../../node_modules/.pnpm/mute-stream@3.0.0/node_modules/mute-stream/lib/index.js","../../../node_modules/.pnpm/@inquirer+ansi@2.0.3/node_modules/@inquirer/ansi/dist/index.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/screen-manager.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/promise-polyfill.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/create-prompt.js","../../../node_modules/.pnpm/@inquirer+core@11.1.5_@types+node@25.3.0/node_modules/@inquirer/core/dist/lib/Separator.js","../../../node_modules/.pnpm/@inquirer+checkbox@5.1.0_@types+node@25.3.0/node_modules/@inquirer/checkbox/dist/index.js","../../../node_modules/.pnpm/@inquirer+confirm@6.0.8_@types+node@25.3.0/node_modules/@inquirer/confirm/dist/index.js","../../../node_modules/.pnpm/@inquirer+select@5.1.0_@types+node@25.3.0/node_modules/@inquirer/select/dist/index.js","../../adapters/dist/base.js","../../adapters/dist/claude.js","../../adapters/dist/transforms/tool-maps.js","../../adapters/dist/transforms/content.js","../../adapters/dist/transforms/frontmatter.js","../../adapters/dist/opencode.js","../../adapters/dist/gemini.js","../../adapters/dist/codex.js","../../adapters/dist/index.js","../package.json","../src/install.ts"],"sourcesContent":["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 process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","const copyProperty = (to, from, property, ignoreNonConfigurable) => {\n\t// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.\n\t// `Function#prototype` is non-writable and non-configurable so can never be modified.\n\tif (property === 'length' || property === 'prototype') {\n\t\treturn;\n\t}\n\n\t// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.\n\tif (property === 'arguments' || property === 'caller') {\n\t\treturn;\n\t}\n\n\tconst toDescriptor = Object.getOwnPropertyDescriptor(to, property);\n\tconst fromDescriptor = Object.getOwnPropertyDescriptor(from, property);\n\n\tif (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(to, property, fromDescriptor);\n};\n\n// `Object.defineProperty()` throws if the property exists, is not configurable and either:\n// - one its descriptors is changed\n// - it is non-writable and its value is changed\nconst canCopyProperty = function (toDescriptor, fromDescriptor) {\n\treturn toDescriptor === undefined || toDescriptor.configurable || (\n\t\ttoDescriptor.writable === fromDescriptor.writable\n\t\t&& toDescriptor.enumerable === fromDescriptor.enumerable\n\t\t&& toDescriptor.configurable === fromDescriptor.configurable\n\t\t&& (toDescriptor.writable || toDescriptor.value === fromDescriptor.value)\n\t);\n};\n\nconst changePrototype = (to, from) => {\n\tconst fromPrototype = Object.getPrototypeOf(from);\n\tif (fromPrototype === Object.getPrototypeOf(to)) {\n\t\treturn;\n\t}\n\n\tObject.setPrototypeOf(to, fromPrototype);\n};\n\nconst wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\\n${fromBody}`;\n\nconst toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');\nconst toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');\n\n// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.\n// We use `bind()` instead of a closure for the same reason.\n// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.\nconst changeToString = (to, from, name) => {\n\tconst withName = name === '' ? '' : `with ${name.trim()}() `;\n\tconst newToString = wrappedToString.bind(null, withName, from.toString());\n\t// Ensure `to.toString.toString` is non-enumerable and has the same `same`\n\tObject.defineProperty(newToString, 'name', toStringName);\n\tconst {writable, enumerable, configurable} = toStringDescriptor; // We destructue to avoid a potential `get` descriptor.\n\tObject.defineProperty(to, 'toString', {value: newToString, writable, enumerable, configurable});\n};\n\nexport default function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {\n\tconst {name} = to;\n\n\tfor (const property of Reflect.ownKeys(from)) {\n\t\tcopyProperty(to, from, property, ignoreNonConfigurable);\n\t}\n\n\tchangePrototype(to, from);\n\tchangeToString(to, from, name);\n\n\treturn to;\n}\n","import mimicFunction from 'mimic-function';\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = undefined;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFunction(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nonetime.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n\nexport default onetime;\n","/**\n * This is not the set of all possible signals.\n *\n * It IS, however, the set of all signals that trigger\n * an exit on either Linux or BSD systems. Linux is a\n * superset of the signal names supported on BSD, and\n * the unknown signals just fail to register, so we can\n * catch that easily enough.\n *\n * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\n *\n * Don't bother with SIGKILL. It's uncatchable, which\n * means that we can't fire any callbacks anyway.\n *\n * If a user does happen to register a handler on a non-\n * fatal signal like SIGWINCH or something, and then\n * exit, it'll end up firing `process.emit('exit')`, so\n * the handler will be fired anyway.\n *\n * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n * artificially, inherently leave the process in a\n * state from which it is not safe to try and enter JS\n * listeners.\n */\nexport const signals = [];\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM');\nif (process.platform !== 'win32') {\n signals.push('SIGALRM', 'SIGABRT', 'SIGVTALRM', 'SIGXCPU', 'SIGXFSZ', 'SIGUSR2', 'SIGTRAP', 'SIGSYS', 'SIGQUIT', 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n );\n}\nif (process.platform === 'linux') {\n signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT');\n}\n//# sourceMappingURL=signals.js.map","// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nimport { signals } from './signals.js';\nexport { signals };\nconst processOk = (process) => !!process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function';\nconst kExitEmitter = Symbol.for('signal-exit emitter');\nconst global = globalThis;\nconst ObjectDefineProperty = Object.defineProperty.bind(Object);\n// teeny special purpose ee\nclass Emitter {\n emitted = {\n afterExit: false,\n exit: false,\n };\n listeners = {\n afterExit: [],\n exit: [],\n };\n count = 0;\n id = Math.random();\n constructor() {\n if (global[kExitEmitter]) {\n return global[kExitEmitter];\n }\n ObjectDefineProperty(global, kExitEmitter, {\n value: this,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n }\n on(ev, fn) {\n this.listeners[ev].push(fn);\n }\n removeListener(ev, fn) {\n const list = this.listeners[ev];\n const i = list.indexOf(fn);\n /* c8 ignore start */\n if (i === -1) {\n return;\n }\n /* c8 ignore stop */\n if (i === 0 && list.length === 1) {\n list.length = 0;\n }\n else {\n list.splice(i, 1);\n }\n }\n emit(ev, code, signal) {\n if (this.emitted[ev]) {\n return false;\n }\n this.emitted[ev] = true;\n let ret = false;\n for (const fn of this.listeners[ev]) {\n ret = fn(code, signal) === true || ret;\n }\n if (ev === 'exit') {\n ret = this.emit('afterExit', code, signal) || ret;\n }\n return ret;\n }\n}\nclass SignalExitBase {\n}\nconst signalExitWrap = (handler) => {\n return {\n onExit(cb, opts) {\n return handler.onExit(cb, opts);\n },\n load() {\n return handler.load();\n },\n unload() {\n return handler.unload();\n },\n };\n};\nclass SignalExitFallback extends SignalExitBase {\n onExit() {\n return () => { };\n }\n load() { }\n unload() { }\n}\nclass SignalExit extends SignalExitBase {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n /* c8 ignore start */\n #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP';\n /* c8 ignore stop */\n #emitter = new Emitter();\n #process;\n #originalProcessEmit;\n #originalProcessReallyExit;\n #sigListeners = {};\n #loaded = false;\n constructor(process) {\n super();\n this.#process = process;\n // { <signal>: <listener fn>, ... }\n this.#sigListeners = {};\n for (const sig of signals) {\n this.#sigListeners[sig] = () => {\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n const listeners = this.#process.listeners(sig);\n let { count } = this.#emitter;\n // This is a workaround for the fact that signal-exit v3 and signal\n // exit v4 are not aware of each other, and each will attempt to let\n // the other handle it, so neither of them do. To correct this, we\n // detect if we're the only handler *except* for previous versions\n // of signal-exit, and increment by the count of listeners it has\n // created.\n /* c8 ignore start */\n const p = process;\n if (typeof p.__signal_exit_emitter__ === 'object' &&\n typeof p.__signal_exit_emitter__.count === 'number') {\n count += p.__signal_exit_emitter__.count;\n }\n /* c8 ignore stop */\n if (listeners.length === count) {\n this.unload();\n const ret = this.#emitter.emit('exit', null, sig);\n /* c8 ignore start */\n const s = sig === 'SIGHUP' ? this.#hupSig : sig;\n if (!ret)\n process.kill(process.pid, s);\n /* c8 ignore stop */\n }\n };\n }\n this.#originalProcessReallyExit = process.reallyExit;\n this.#originalProcessEmit = process.emit;\n }\n onExit(cb, opts) {\n /* c8 ignore start */\n if (!processOk(this.#process)) {\n return () => { };\n }\n /* c8 ignore stop */\n if (this.#loaded === false) {\n this.load();\n }\n const ev = opts?.alwaysLast ? 'afterExit' : 'exit';\n this.#emitter.on(ev, cb);\n return () => {\n this.#emitter.removeListener(ev, cb);\n if (this.#emitter.listeners['exit'].length === 0 &&\n this.#emitter.listeners['afterExit'].length === 0) {\n this.unload();\n }\n };\n }\n load() {\n if (this.#loaded) {\n return;\n }\n this.#loaded = true;\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n this.#emitter.count += 1;\n for (const sig of signals) {\n try {\n const fn = this.#sigListeners[sig];\n if (fn)\n this.#process.on(sig, fn);\n }\n catch (_) { }\n }\n this.#process.emit = (ev, ...a) => {\n return this.#processEmit(ev, ...a);\n };\n this.#process.reallyExit = (code) => {\n return this.#processReallyExit(code);\n };\n }\n unload() {\n if (!this.#loaded) {\n return;\n }\n this.#loaded = false;\n signals.forEach(sig => {\n const listener = this.#sigListeners[sig];\n /* c8 ignore start */\n if (!listener) {\n throw new Error('Listener not defined for signal: ' + sig);\n }\n /* c8 ignore stop */\n try {\n this.#process.removeListener(sig, listener);\n /* c8 ignore start */\n }\n catch (_) { }\n /* c8 ignore stop */\n });\n this.#process.emit = this.#originalProcessEmit;\n this.#process.reallyExit = this.#originalProcessReallyExit;\n this.#emitter.count -= 1;\n }\n #processReallyExit(code) {\n /* c8 ignore start */\n if (!processOk(this.#process)) {\n return 0;\n }\n this.#process.exitCode = code || 0;\n /* c8 ignore stop */\n this.#emitter.emit('exit', this.#process.exitCode, null);\n return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);\n }\n #processEmit(ev, ...args) {\n const og = this.#originalProcessEmit;\n if (ev === 'exit' && processOk(this.#process)) {\n if (typeof args[0] === 'number') {\n this.#process.exitCode = args[0];\n /* c8 ignore start */\n }\n /* c8 ignore start */\n const ret = og.call(this.#process, ev, ...args);\n /* c8 ignore start */\n this.#emitter.emit('exit', this.#process.exitCode, null);\n /* c8 ignore stop */\n return ret;\n }\n else {\n return og.call(this.#process, ev, ...args);\n }\n }\n}\nconst process = globalThis.process;\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const { \n/**\n * Called when the process is exiting, whether via signal, explicit\n * exit, or running out of stuff to do.\n *\n * If the global process object is not suitable for instrumentation,\n * then this will be a no-op.\n *\n * Returns a function that may be used to unload signal-exit.\n */\nonExit, \n/**\n * Load the listeners. Likely you never need to call this, unless\n * doing a rather deep integration with signal-exit functionality.\n * Mostly exposed for the benefit of testing.\n *\n * @internal\n */\nload, \n/**\n * Unload the listeners. Likely you never need to call this, unless\n * doing a rather deep integration with signal-exit functionality.\n * Mostly exposed for the benefit of testing.\n *\n * @internal\n */\nunload, } = signalExitWrap(processOk(process) ? new SignalExit(process) : new SignalExitFallback());\n//# sourceMappingURL=index.js.map","import process from 'node:process';\nimport onetime from 'onetime';\nimport {onExit} from 'signal-exit';\n\nconst terminal = process.stderr.isTTY\n\t? process.stderr\n\t: (process.stdout.isTTY ? process.stdout : undefined);\n\nconst restoreCursor = terminal ? onetime(() => {\n\tonExit(() => {\n\t\tterminal.write('\\u001B[?25h');\n\t}, {alwaysLast: true});\n}) : () => {};\n\nexport default restoreCursor;\n","import process from 'node:process';\nimport restoreCursor from 'restore-cursor';\n\nlet isHidden = false;\n\nconst cliCursor = {};\n\ncliCursor.show = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\tisHidden = false;\n\twritableStream.write('\\u001B[?25h');\n};\n\ncliCursor.hide = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\trestoreCursor();\n\tisHidden = true;\n\twritableStream.write('\\u001B[?25l');\n};\n\ncliCursor.toggle = (force, writableStream) => {\n\tif (force !== undefined) {\n\t\tisHidden = force;\n\t}\n\n\tif (isHidden) {\n\t\tcliCursor.show(writableStream);\n\t} else {\n\t\tcliCursor.hide(writableStream);\n\t}\n};\n\nexport default cliCursor;\n","","import spinners from './spinners.json' with {type: 'json'};\n\nexport default spinners;\n\nconst spinnersList = Object.keys(spinners);\n\nexport function randomSpinner() {\n\tconst randomIndex = Math.floor(Math.random() * spinnersList.length);\n\tconst spinnerName = spinnersList[randomIndex];\n\treturn spinners[spinnerName];\n}\n","import tty from 'node:tty';\n\n// eslint-disable-next-line no-warning-comments\n// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)\n// Lots of optionals here to support Deno.\nconst hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;\n\nconst format = (open, close) => {\n\tif (!hasColors) {\n\t\treturn input => input;\n\t}\n\n\tconst openCode = `\\u001B[${open}m`;\n\tconst closeCode = `\\u001B[${close}m`;\n\n\treturn input => {\n\t\tconst string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster.\n\t\tlet index = string.indexOf(closeCode);\n\n\t\tif (index === -1) {\n\t\t\t// Note: Intentionally not using string interpolation for performance reasons.\n\t\t\treturn openCode + string + closeCode;\n\t\t}\n\n\t\t// Handle nested colors.\n\n\t\t// We could have done this, but it's too slow (as of Node.js 22).\n\t\t// return openCode + string.replaceAll(closeCode, (close === 22 ? closeCode : '') + openCode) + closeCode;\n\n\t\tlet result = openCode;\n\t\tlet lastIndex = 0;\n\n\t\t// SGR 22 resets both bold (1) and dim (2). When we encounter a nested\n\t\t// close for styles that use 22, we need to re-open the outer style.\n\t\tconst reopenOnNestedClose = close === 22;\n\t\tconst replaceCode = (reopenOnNestedClose ? closeCode : '') + openCode;\n\n\t\twhile (index !== -1) {\n\t\t\tresult += string.slice(lastIndex, index) + replaceCode;\n\t\t\tlastIndex = index + closeCode.length;\n\t\t\tindex = string.indexOf(closeCode, lastIndex);\n\t\t}\n\n\t\tresult += string.slice(lastIndex) + closeCode;\n\n\t\treturn result;\n\t};\n};\n\nexport const reset = format(0, 0);\nexport const bold = format(1, 22);\nexport const dim = format(2, 22);\nexport const italic = format(3, 23);\nexport const underline = format(4, 24);\nexport const overline = format(53, 55);\nexport const inverse = format(7, 27);\nexport const hidden = format(8, 28);\nexport const strikethrough = format(9, 29);\n\nexport const black = format(30, 39);\nexport const red = format(31, 39);\nexport const green = format(32, 39);\nexport const yellow = format(33, 39);\nexport const blue = format(34, 39);\nexport const magenta = format(35, 39);\nexport const cyan = format(36, 39);\nexport const white = format(37, 39);\nexport const gray = format(90, 39);\n\nexport const bgBlack = format(40, 49);\nexport const bgRed = format(41, 49);\nexport const bgGreen = format(42, 49);\nexport const bgYellow = format(43, 49);\nexport const bgBlue = format(44, 49);\nexport const bgMagenta = format(45, 49);\nexport const bgCyan = format(46, 49);\nexport const bgWhite = format(47, 49);\nexport const bgGray = format(100, 49);\n\nexport const redBright = format(91, 39);\nexport const greenBright = format(92, 39);\nexport const yellowBright = format(93, 39);\nexport const blueBright = format(94, 39);\nexport const magentaBright = format(95, 39);\nexport const cyanBright = format(96, 39);\nexport const whiteBright = format(97, 39);\n\nexport const bgRedBright = format(101, 49);\nexport const bgGreenBright = format(102, 49);\nexport const bgYellowBright = format(103, 49);\nexport const bgBlueBright = format(104, 49);\nexport const bgMagentaBright = format(105, 49);\nexport const bgCyanBright = format(106, 49);\nexport const bgWhiteBright = format(107, 49);\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import {\n\tblue,\n\tgreen,\n\tyellow,\n\tred,\n} from 'yoctocolors';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst _isUnicodeSupported = isUnicodeSupported();\n\nexport const info = blue(_isUnicodeSupported ? 'ℹ' : 'i');\nexport const success = green(_isUnicodeSupported ? '✔' : '√');\nexport const warning = yellow(_isUnicodeSupported ? '⚠' : '‼');\nexport const error = red(_isUnicodeSupported ? '✖' : '×');\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\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\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","// Generated by scripts/build.js\n\n// prettier-ignore\nconst ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];\n\n// prettier-ignore\nconst fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];\n\n// prettier-ignore\nconst halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];\n\n// prettier-ignore\nconst narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];\n\n// prettier-ignore\nconst wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];\n\nexport {ambiguousRanges, fullwidthRanges, halfwidthRanges, narrowRanges, wideRanges};\n","/**\nBinary search on a sorted flat array of [start, end] pairs.\n\n@param {number[]} ranges - Flat array of inclusive [start, end] range pairs, e.g. [0, 5, 10, 20].\n@param {number} codePoint - The value to search for.\n@returns {boolean} Whether the value falls within any of the ranges.\n*/\nexport const isInRange = (ranges, codePoint) => {\n\tlet low = 0;\n\tlet high = Math.floor(ranges.length / 2) - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tconst i = mid * 2;\n\t\tif (codePoint < ranges[i]) {\n\t\t\thigh = mid - 1;\n\t\t} else if (codePoint > ranges[i + 1]) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n","import {\n\tambiguousRanges,\n\tfullwidthRanges,\n\thalfwidthRanges,\n\tnarrowRanges,\n\twideRanges,\n} from './lookup-data.js';\nimport {isInRange} from './utilities.js';\n\nconst minimumAmbiguousCodePoint = ambiguousRanges[0];\nconst maximumAmbiguousCodePoint = ambiguousRanges.at(-1);\nconst minimumFullWidthCodePoint = fullwidthRanges[0];\nconst maximumFullWidthCodePoint = fullwidthRanges.at(-1);\nconst minimumHalfWidthCodePoint = halfwidthRanges[0];\nconst maximumHalfWidthCodePoint = halfwidthRanges.at(-1);\nconst minimumNarrowCodePoint = narrowRanges[0];\nconst maximumNarrowCodePoint = narrowRanges.at(-1);\nconst minimumWideCodePoint = wideRanges[0];\nconst maximumWideCodePoint = wideRanges.at(-1);\n\nconst commonCjkCodePoint = 0x4E_00;\nconst [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);\n\n// Use a hot-path range so common `isWide` calls can skip binary search.\n// The range containing U+4E00 covers common CJK ideographs;\n// fallback to the largest range for resilience to Unicode table changes.\nfunction findWideFastPathRange(ranges) {\n\tlet fastPathStart = ranges[0];\n\tlet fastPathEnd = ranges[1];\n\n\tfor (let index = 0; index < ranges.length; index += 2) {\n\t\tconst start = ranges[index];\n\t\tconst end = ranges[index + 1];\n\n\t\tif (\n\t\t\tcommonCjkCodePoint >= start\n\t\t\t&& commonCjkCodePoint <= end\n\t\t) {\n\t\t\treturn [start, end];\n\t\t}\n\n\t\tif ((end - start) > (fastPathEnd - fastPathStart)) {\n\t\t\tfastPathStart = start;\n\t\t\tfastPathEnd = end;\n\t\t}\n\t}\n\n\treturn [fastPathStart, fastPathEnd];\n}\n\nexport const isAmbiguous = codePoint => {\n\tif (\n\t\tcodePoint < minimumAmbiguousCodePoint\n\t\t|| codePoint > maximumAmbiguousCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(ambiguousRanges, codePoint);\n};\n\nexport const isFullWidth = codePoint => {\n\tif (\n\t\tcodePoint < minimumFullWidthCodePoint\n\t\t|| codePoint > maximumFullWidthCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(fullwidthRanges, codePoint);\n};\n\nconst isHalfWidth = codePoint => {\n\tif (\n\t\tcodePoint < minimumHalfWidthCodePoint\n\t\t|| codePoint > maximumHalfWidthCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(halfwidthRanges, codePoint);\n};\n\nconst isNarrow = codePoint => {\n\tif (\n\t\tcodePoint < minimumNarrowCodePoint\n\t\t|| codePoint > maximumNarrowCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(narrowRanges, codePoint);\n};\n\nexport const isWide = codePoint => {\n\tif (\n\t\tcodePoint >= wideFastPathStart\n\t\t&& codePoint <= wideFastPathEnd\n\t) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tcodePoint < minimumWideCodePoint\n\t\t|| codePoint > maximumWideCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(wideRanges, codePoint);\n};\n\nexport function getCategory(codePoint) {\n\tif (isAmbiguous(codePoint)) {\n\t\treturn 'ambiguous';\n\t}\n\n\tif (isFullWidth(codePoint)) {\n\t\treturn 'fullwidth';\n\t}\n\n\tif (isHalfWidth(codePoint)) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (isNarrow(codePoint)) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(codePoint)) {\n\t\treturn 'wide';\n\t}\n\n\treturn 'neutral';\n}\n","import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n","import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\n\n/**\nLogic:\n- Segment graphemes to match how terminals render clusters.\n- Width rules:\n\t1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.\n\t2. RGI emoji clusters (\\p{RGI_Emoji}) are double-width.\n\t3. Minimally-qualified/unqualified emoji clusters (ZWJ sequences with 2+ Extended_Pictographic, or keycap sequences) are double-width.\n\t4. Otherwise use East Asian Width of the cluster's first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).\n*/\n\nconst segmenter = new Intl.Segmenter();\n\n// Whole-cluster zero-width\nconst zeroWidthClusterRegex = /^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Format}|\\p{Mark}|\\p{Surrogate})+$/v;\n\n// Pick the base scalar if the cluster starts with Prepend/Format/Marks\nconst leadingNonPrintingRegex = /^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+/v;\n\n// RGI emoji sequences\nconst rgiEmojiRegex = /^\\p{RGI_Emoji}$/v;\n\n// Detect minimally-qualified/unqualified emoji sequences (missing VS16 but still render as double-width)\nconst unqualifiedKeycapRegex = /^[\\d#*]\\u20E3$/;\nconst extendedPictographicRegex = /\\p{Extended_Pictographic}/gu;\n\nfunction isDoubleWidthNonRgiEmojiSequence(segment) {\n\t// Real emoji clusters are < 30 chars; guard against pathological input\n\tif (segment.length > 50) {\n\t\treturn false;\n\t}\n\n\tif (unqualifiedKeycapRegex.test(segment)) {\n\t\treturn true;\n\t}\n\n\t// ZWJ sequences with 2+ Extended_Pictographic\n\tif (segment.includes('\\u200D')) {\n\t\tconst pictographics = segment.match(extendedPictographicRegex);\n\t\treturn pictographics !== null && pictographics.length >= 2;\n\t}\n\n\treturn false;\n}\n\nfunction baseVisible(segment) {\n\treturn segment.replace(leadingNonPrintingRegex, '');\n}\n\nfunction isZeroWidthCluster(segment) {\n\treturn zeroWidthClusterRegex.test(segment);\n}\n\nfunction trailingHalfwidthWidth(segment, eastAsianWidthOptions) {\n\tlet extra = 0;\n\tif (segment.length > 1) {\n\t\tfor (const char of segment.slice(1)) {\n\t\t\tif (char >= '\\uFF00' && char <= '\\uFFEF') {\n\t\t\t\textra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn extra;\n}\n\nexport default function stringWidth(input, options = {}) {\n\tif (typeof input !== 'string' || input.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tlet string = input;\n\n\t// Avoid calling stripAnsi when there are no ANSI escape sequences (ESC = 0x1B, CSI = 0x9B)\n\tif (!countAnsiEscapeCodes && (string.includes('\\u001B') || string.includes('\\u009B'))) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\t// Fast path: printable ASCII (0x20–0x7E) needs no segmenter, regex, or EAW lookup — width equals length.\n\tif (/^[\\u0020-\\u007E]*$/.test(string)) {\n\t\treturn string.length;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment} of segmenter.segment(string)) {\n\t\t// Zero-width / non-printing clusters\n\t\tif (isZeroWidthCluster(segment)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Emoji width logic\n\t\tif (rgiEmojiRegex.test(segment) || isDoubleWidthNonRgiEmojiSequence(segment)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Everything else: EAW of the cluster’s first visible scalar\n\t\tconst codePoint = baseVisible(segment).codePointAt(0);\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\n\t\t// Add width for trailing Halfwidth and Fullwidth Forms (e.g., ゙, ゚, ー)\n\t\twidth += trailingHalfwidthWidth(segment, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n","export default function isInteractive({stream = process.stdout} = {}) {\n\treturn Boolean(\n\t\tstream && stream.isTTY &&\n\t\tprocess.env.TERM !== 'dumb' &&\n\t\t!('CI' in process.env)\n\t);\n}\n","import process from 'node:process';\n\nconst ASCII_ETX_CODE = 0x03; // Ctrl+C\n\nclass StdinDiscarder {\n\t#activeCount = 0;\n\t#stdin;\n\t#stdinWasPaused = false;\n\t#stdinWasRaw = false;\n\t#handleInputBound = chunk => {\n\t\tif (!chunk?.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst code = typeof chunk === 'string' ? chunk.codePointAt(0) : chunk[0];\n\t\tif (code === ASCII_ETX_CODE) {\n\t\t\tif (process.listenerCount('SIGINT') > 0) {\n\t\t\t\tprocess.emit('SIGINT');\n\t\t\t} else {\n\t\t\t\tprocess.kill(process.pid, 'SIGINT');\n\t\t\t}\n\t\t}\n\t};\n\n\tstart() {\n\t\tthis.#activeCount++;\n\t\tif (this.#activeCount === 1) {\n\t\t\tthis.#realStart();\n\t\t}\n\t}\n\n\tstop() {\n\t\tif (this.#activeCount === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (--this.#activeCount === 0) {\n\t\t\tthis.#realStop();\n\t\t}\n\t}\n\n\t#realStart() {\n\t\tconst {stdin} = process;\n\n\t\tif (process.platform === 'win32' || !stdin?.isTTY || typeof stdin.setRawMode !== 'function') {\n\t\t\tthis.#stdin = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#stdin = stdin;\n\t\tthis.#stdinWasPaused = stdin.isPaused();\n\t\tthis.#stdinWasRaw = Boolean(stdin.isRaw);\n\n\t\tstdin.setRawMode(true);\n\t\tstdin.prependListener('data', this.#handleInputBound);\n\n\t\tif (this.#stdinWasPaused) {\n\t\t\tstdin.resume();\n\t\t}\n\t}\n\n\t#realStop() {\n\t\tif (!this.#stdin) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stdin = this.#stdin;\n\n\t\tstdin.off('data', this.#handleInputBound);\n\n\t\tif (stdin.isTTY) {\n\t\t\tstdin.setRawMode?.(this.#stdinWasRaw);\n\t\t}\n\n\t\tif (this.#stdinWasPaused) {\n\t\t\tstdin.pause();\n\t\t}\n\n\t\tthis.#stdin = undefined;\n\t\tthis.#stdinWasPaused = false;\n\t\tthis.#stdinWasRaw = false;\n\t}\n}\n\nconst stdinDiscarder = new StdinDiscarder();\n\nexport default Object.freeze(stdinDiscarder);\n","import process from 'node:process';\nimport {stripVTControlCharacters} from 'node:util';\nimport chalk from 'chalk';\nimport cliCursor from 'cli-cursor';\nimport cliSpinners from 'cli-spinners';\nimport logSymbols from 'log-symbols';\nimport stringWidth from 'string-width';\nimport isInteractive from 'is-interactive';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport stdinDiscarder from 'stdin-discarder';\n\n// Constants\nconst RENDER_DEFERRAL_TIMEOUT = 200; // Milliseconds to wait before re-rendering after partial chunk write\nconst SYNCHRONIZED_OUTPUT_ENABLE = '\\u001B[?2026h';\nconst SYNCHRONIZED_OUTPUT_DISABLE = '\\u001B[?2026l';\n\n// Global state for concurrent spinner detection\nconst activeHooksPerStream = new Map(); // Stream → ora instance\n\nclass Ora {\n\t#linesToClear = 0;\n\t#frameIndex = -1;\n\t#lastFrameTime = 0;\n\t#options;\n\t#spinner;\n\t#stream;\n\t#id;\n\t#hookedStreams = new Map();\n\t#isInternalWrite = false;\n\t#drainHandler;\n\t#deferRenderTimer;\n\t#isDiscardingStdin = false;\n\tcolor;\n\n\t// Helper to execute writes while preventing hook recursion\n\t#internalWrite(fn) {\n\t\tthis.#isInternalWrite = true;\n\t\ttry {\n\t\t\treturn fn();\n\t\t} finally {\n\t\t\tthis.#isInternalWrite = false;\n\t\t}\n\t}\n\n\t// Helper to render if still spinning\n\t#tryRender() {\n\t\tif (this.isSpinning) {\n\t\t\tthis.render();\n\t\t}\n\t}\n\n\t#stringifyChunk(chunk, encoding) {\n\t\tif (chunk === undefined || chunk === null) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (typeof chunk === 'string') {\n\t\t\treturn chunk;\n\t\t}\n\n\t\t/* eslint-disable n/prefer-global/buffer */\n\t\tif (Buffer.isBuffer(chunk) || ArrayBuffer.isView(chunk)) {\n\t\t\tconst normalizedEncoding = (typeof encoding === 'string' && encoding && encoding !== 'buffer') ? encoding : 'utf8';\n\t\t\treturn Buffer.from(chunk).toString(normalizedEncoding);\n\t\t}\n\t\t/* eslint-enable n/prefer-global/buffer */\n\n\t\treturn String(chunk);\n\t}\n\n\t#chunkTerminatesLine(chunkString) {\n\t\tif (!chunkString) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst lastCharacter = chunkString.at(-1);\n\t\treturn lastCharacter === '\\n' || lastCharacter === '\\r';\n\t}\n\n\t#scheduleRenderDeferral() {\n\t\t// If already deferred, don't reset timer - let it complete\n\t\tif (this.#deferRenderTimer) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#deferRenderTimer = setTimeout(() => {\n\t\t\tthis.#deferRenderTimer = undefined;\n\n\t\t\tif (this.isSpinning) {\n\t\t\t\tthis.#tryRender();\n\t\t\t}\n\t\t}, RENDER_DEFERRAL_TIMEOUT);\n\n\t\tif (typeof this.#deferRenderTimer?.unref === 'function') {\n\t\t\tthis.#deferRenderTimer.unref();\n\t\t}\n\t}\n\n\t#clearRenderDeferral() {\n\t\tif (this.#deferRenderTimer) {\n\t\t\tclearTimeout(this.#deferRenderTimer);\n\t\t\tthis.#deferRenderTimer = undefined;\n\t\t}\n\t}\n\n\t// Helper to build complete line with symbol, text, prefix, and suffix\n\t#buildOutputLine(symbol, text, prefixText, suffixText) {\n\t\tconst fullPrefixText = this.#getFullPrefixText(prefixText, ' ');\n\t\tconst separatorText = symbol ? ' ' : '';\n\t\tconst fullText = (typeof text === 'string') ? separatorText + text : '';\n\t\tconst fullSuffixText = this.#getFullSuffixText(suffixText, ' ');\n\t\treturn fullPrefixText + symbol + fullText + fullSuffixText;\n\t}\n\n\tconstructor(options) {\n\t\tif (typeof options === 'string') {\n\t\t\toptions = {\n\t\t\t\ttext: options,\n\t\t\t};\n\t\t}\n\n\t\tthis.#options = {\n\t\t\tcolor: 'cyan',\n\t\t\tstream: process.stderr,\n\t\t\tdiscardStdin: true,\n\t\t\thideCursor: true,\n\t\t\t...options,\n\t\t};\n\n\t\t// Public\n\t\tthis.color = this.#options.color;\n\n\t\tthis.#stream = this.#options.stream;\n\n\t\t// Normalize isEnabled and isSilent into options\n\t\tif (typeof this.#options.isEnabled !== 'boolean') {\n\t\t\tthis.#options.isEnabled = isInteractive({stream: this.#stream});\n\t\t}\n\n\t\tif (typeof this.#options.isSilent !== 'boolean') {\n\t\t\tthis.#options.isSilent = false;\n\t\t}\n\n\t\t// Set *after* `this.#stream`.\n\t\t// Store original interval before spinner setter clears it\n\t\tconst userInterval = this.#options.interval;\n\t\t// It's important that these use the public setters.\n\t\tthis.spinner = this.#options.spinner;\n\t\tthis.#options.interval = userInterval;\n\t\tthis.text = this.#options.text;\n\t\tthis.prefixText = this.#options.prefixText;\n\t\tthis.suffixText = this.#options.suffixText;\n\t\tthis.indent = this.#options.indent;\n\n\t\tif (process.env.NODE_ENV === 'test') {\n\t\t\tthis._stream = this.#stream;\n\t\t\tthis._isEnabled = this.#options.isEnabled;\n\n\t\t\tObject.defineProperty(this, '_linesToClear', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#linesToClear;\n\t\t\t\t},\n\t\t\t\tset(newValue) {\n\t\t\t\t\tthis.#linesToClear = newValue;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_frameIndex', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#frameIndex;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_lineCount', {\n\t\t\t\tget() {\n\t\t\t\t\tconst columns = this.#stream.columns ?? 80;\n\t\t\t\t\tconst prefixText = typeof this.#options.prefixText === 'function' ? '' : this.#options.prefixText;\n\t\t\t\t\tconst suffixText = typeof this.#options.suffixText === 'function' ? '' : this.#options.suffixText;\n\t\t\t\t\tconst fullPrefixText = (typeof prefixText === 'string' && prefixText !== '') ? prefixText + ' ' : '';\n\t\t\t\t\tconst fullSuffixText = (typeof suffixText === 'string' && suffixText !== '') ? ' ' + suffixText : '';\n\t\t\t\t\tconst spinnerChar = '-';\n\t\t\t\t\tconst fullText = ' '.repeat(this.#options.indent) + fullPrefixText + spinnerChar + (typeof this.#options.text === 'string' ? ' ' + this.#options.text : '') + fullSuffixText;\n\t\t\t\t\treturn this.#computeLineCountFrom(fullText, columns);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tget indent() {\n\t\treturn this.#options.indent;\n\t}\n\n\tset indent(indent = 0) {\n\t\tif (!(indent >= 0 && Number.isInteger(indent))) {\n\t\t\tthrow new Error('The `indent` option must be an integer from 0 and up');\n\t\t}\n\n\t\tthis.#options.indent = indent;\n\t}\n\n\tget interval() {\n\t\treturn this.#options.interval ?? this.#spinner.interval ?? 100;\n\t}\n\n\tget spinner() {\n\t\treturn this.#spinner;\n\t}\n\n\tset spinner(spinner) {\n\t\tthis.#frameIndex = -1;\n\t\tthis.#options.interval = undefined;\n\n\t\tif (typeof spinner === 'object') {\n\t\t\tif (!Array.isArray(spinner.frames) || spinner.frames.length === 0 || spinner.frames.some(frame => typeof frame !== 'string')) {\n\t\t\t\tthrow new Error('The given spinner must have a non-empty `frames` array of strings');\n\t\t\t}\n\n\t\t\tif (spinner.interval !== undefined && !(Number.isInteger(spinner.interval) && spinner.interval > 0)) {\n\t\t\t\tthrow new Error('`spinner.interval` must be a positive integer if provided');\n\t\t\t}\n\n\t\t\tthis.#spinner = spinner;\n\t\t} else if (!isUnicodeSupported()) {\n\t\t\tthis.#spinner = cliSpinners.line;\n\t\t} else if (spinner === undefined) {\n\t\t\t// Set default spinner\n\t\t\tthis.#spinner = cliSpinners.dots;\n\t\t} else if (spinner !== 'default' && cliSpinners[spinner]) {\n\t\t\tthis.#spinner = cliSpinners[spinner];\n\t\t} else {\n\t\t\tthrow new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);\n\t\t}\n\t}\n\n\tget text() {\n\t\treturn this.#options.text;\n\t}\n\n\tset text(value = '') {\n\t\tthis.#options.text = value;\n\t}\n\n\tget prefixText() {\n\t\treturn this.#options.prefixText;\n\t}\n\n\tset prefixText(value = '') {\n\t\tthis.#options.prefixText = value;\n\t}\n\n\tget suffixText() {\n\t\treturn this.#options.suffixText;\n\t}\n\n\tset suffixText(value = '') {\n\t\tthis.#options.suffixText = value;\n\t}\n\n\tget isSpinning() {\n\t\treturn this.#id !== undefined;\n\t}\n\n\t#formatAffix(value, separator, placeBefore = false) {\n\t\tconst resolved = typeof value === 'function' ? value() : value;\n\t\tif (typeof resolved === 'string' && resolved !== '') {\n\t\t\treturn placeBefore ? (separator + resolved) : (resolved + separator);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\t#getFullPrefixText(prefixText = this.#options.prefixText, postfix = ' ') {\n\t\treturn this.#formatAffix(prefixText, postfix, false);\n\t}\n\n\t#getFullSuffixText(suffixText = this.#options.suffixText, prefix = ' ') {\n\t\treturn this.#formatAffix(suffixText, prefix, true);\n\t}\n\n\t#computeLineCountFrom(text, columns) {\n\t\tlet count = 0;\n\t\tfor (const line of stripVTControlCharacters(text).split('\\n')) {\n\t\t\tcount += Math.max(1, Math.ceil(stringWidth(line) / columns));\n\t\t}\n\n\t\treturn count;\n\t}\n\n\tget isEnabled() {\n\t\treturn this.#options.isEnabled && !this.#options.isSilent;\n\t}\n\n\tset isEnabled(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isEnabled` option must be a boolean');\n\t\t}\n\n\t\tthis.#options.isEnabled = value;\n\t}\n\n\tget isSilent() {\n\t\treturn this.#options.isSilent;\n\t}\n\n\tset isSilent(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isSilent` option must be a boolean');\n\t\t}\n\n\t\tthis.#options.isSilent = value;\n\t}\n\n\tframe() {\n\t\t// Only advance frame if enough time has passed (throttle to interval)\n\t\tconst now = Date.now();\n\t\tif (this.#frameIndex === -1 || now - this.#lastFrameTime >= this.interval) {\n\t\t\tthis.#frameIndex = (this.#frameIndex + 1) % this.#spinner.frames.length;\n\t\t\tthis.#lastFrameTime = now;\n\t\t}\n\n\t\tconst {frames} = this.#spinner;\n\t\tlet frame = frames[this.#frameIndex];\n\n\t\tif (this.color) {\n\t\t\tframe = chalk[this.color](frame);\n\t\t}\n\n\t\tconst fullPrefixText = this.#getFullPrefixText(this.#options.prefixText, ' ');\n\t\tconst fullText = typeof this.text === 'string' ? ' ' + this.text : '';\n\t\tconst fullSuffixText = this.#getFullSuffixText(this.#options.suffixText, ' ');\n\n\t\treturn fullPrefixText + frame + fullText + fullSuffixText;\n\t}\n\n\tclear() {\n\t\tif (!this.isEnabled || !this.#stream.isTTY) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Protect cursor control methods (cursorTo, moveCursor, clearLine) which internally call stream.write\n\t\tthis.#internalWrite(() => {\n\t\t\tthis.#stream.cursorTo(0);\n\n\t\t\tfor (let index = 0; index < this.#linesToClear; index++) {\n\t\t\t\tif (index > 0) {\n\t\t\t\t\tthis.#stream.moveCursor(0, -1);\n\t\t\t\t}\n\n\t\t\t\tthis.#stream.clearLine(1);\n\t\t\t}\n\n\t\t\tif (this.#options.indent) {\n\t\t\t\tthis.#stream.cursorTo(this.#options.indent);\n\t\t\t}\n\t\t});\n\n\t\tthis.#linesToClear = 0;\n\n\t\treturn this;\n\t}\n\n\t// Helper to hook a single stream\n\t#hookStream(stream) {\n\t\tif (!stream || this.#hookedStreams.has(stream) || !stream.isTTY || typeof stream.write !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Detect concurrent spinners\n\t\tif (activeHooksPerStream.has(stream)) {\n\t\t\tconsole.warn('[ora] Multiple concurrent spinners detected. This may cause visual corruption. Use one spinner at a time.');\n\t\t}\n\n\t\tconst originalWrite = stream.write;\n\t\tthis.#hookedStreams.set(stream, originalWrite);\n\t\tactiveHooksPerStream.set(stream, this);\n\t\tstream.write = (chunk, encoding, callback) => this.#hookedWrite(stream, originalWrite, chunk, encoding, callback);\n\t}\n\n\t/**\n\tIntercept stream writes while spinner is active to handle external writes cleanly without visual corruption.\n\tHooks process stdio streams and the active spinner stream so console.log(), console.error(), and direct writes stay tidy.\n\t*/\n\t#installHook() {\n\t\tif (!this.isEnabled || this.#hookedStreams.size > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst streamsToHook = new Set([this.#stream, process.stdout, process.stderr]);\n\n\t\tfor (const stream of streamsToHook) {\n\t\t\tthis.#hookStream(stream);\n\t\t}\n\t}\n\n\t#uninstallHook() {\n\t\tfor (const [stream, originalWrite] of this.#hookedStreams) {\n\t\t\tstream.write = originalWrite;\n\t\t\tif (activeHooksPerStream.get(stream) === this) {\n\t\t\t\tactiveHooksPerStream.delete(stream);\n\t\t\t}\n\t\t}\n\n\t\tthis.#hookedStreams.clear();\n\t}\n\n\t// eslint-disable-next-line max-params -- Need stream and originalWrite for multi-stream support\n\t#hookedWrite(stream, originalWrite, chunk, encoding, callback) {\n\t\t// Handle both write(chunk, encoding, callback) and write(chunk, callback) signatures\n\t\tif (typeof encoding === 'function') {\n\t\t\tcallback = encoding;\n\t\t\tencoding = undefined;\n\t\t}\n\n\t\t// Pass through our own internal writes (spinner rendering, cursor control)\n\t\tif (this.#isInternalWrite) {\n\t\t\treturn originalWrite.call(stream, chunk, encoding, callback);\n\t\t}\n\n\t\t// External write detected - clear spinner, write content, re-render if appropriate\n\t\tthis.clear();\n\n\t\tconst chunkString = this.#stringifyChunk(chunk, encoding);\n\t\tconst chunkTerminatesLine = this.#chunkTerminatesLine(chunkString);\n\n\t\tconst writeResult = originalWrite.call(stream, chunk, encoding, callback);\n\n\t\t// Schedule or clear render deferral based on chunk content\n\t\tif (chunkTerminatesLine) {\n\t\t\tthis.#clearRenderDeferral();\n\t\t} else if (chunkString.length > 0) {\n\t\t\tthis.#scheduleRenderDeferral();\n\t\t}\n\n\t\t// Re-render spinner below the new output if still spinning and not deferred\n\t\tif (this.isSpinning && !this.#deferRenderTimer) {\n\t\t\tthis.render();\n\t\t}\n\n\t\treturn writeResult;\n\t}\n\n\trender() {\n\t\tif (!this.isEnabled || this.#drainHandler || this.#deferRenderTimer) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst useSynchronizedOutput = this.#stream.isTTY;\n\t\tlet shouldDisableSynchronizedOutput = false;\n\n\t\ttry {\n\t\t\tif (useSynchronizedOutput) {\n\t\t\t\tthis.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_ENABLE));\n\t\t\t\tshouldDisableSynchronizedOutput = true;\n\t\t\t}\n\n\t\t\tthis.clear();\n\n\t\t\tlet frameContent = this.frame();\n\t\t\tconst columns = this.#stream.columns ?? 80;\n\t\t\tconst actualLineCount = this.#computeLineCountFrom(frameContent, columns);\n\n\t\t\t// If content would exceed viewport height, truncate it to prevent garbage\n\t\t\tconst consoleHeight = this.#stream.rows;\n\t\t\tif (consoleHeight && consoleHeight > 1 && actualLineCount > consoleHeight) {\n\t\t\t\tconst lines = frameContent.split('\\n');\n\t\t\t\tconst maxLines = consoleHeight - 1; // Reserve one line for truncation message\n\t\t\t\tframeContent = [...lines.slice(0, maxLines), '... (content truncated to fit terminal)'].join('\\n');\n\t\t\t}\n\n\t\t\tconst canContinue = this.#internalWrite(() => this.#stream.write(frameContent));\n\n\t\t\t// Handle backpressure - pause rendering if stream buffer is full\n\t\t\tif (canContinue === false && this.#stream.isTTY) {\n\t\t\t\tthis.#drainHandler = () => {\n\t\t\t\t\tthis.#drainHandler = undefined;\n\t\t\t\t\tthis.#tryRender();\n\t\t\t\t};\n\n\t\t\t\tthis.#stream.once('drain', this.#drainHandler);\n\t\t\t}\n\n\t\t\tthis.#linesToClear = this.#computeLineCountFrom(frameContent, columns);\n\t\t} finally {\n\t\t\tif (shouldDisableSynchronizedOutput) {\n\t\t\t\tthis.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_DISABLE));\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tstart(text) {\n\t\tif (text) {\n\t\t\tthis.text = text;\n\t\t}\n\n\t\tif (this.isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this.isEnabled) {\n\t\t\tconst symbol = this.text ? '-' : '';\n\t\t\tconst line = ' '.repeat(this.#options.indent) + this.#buildOutputLine(symbol, this.text, this.#options.prefixText, this.#options.suffixText);\n\n\t\t\tif (line.trim() !== '') {\n\t\t\t\tthis.#internalWrite(() => this.#stream.write(line + '\\n'));\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.isSpinning) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.#options.hideCursor) {\n\t\t\tcliCursor.hide(this.#stream);\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY) {\n\t\t\tstdinDiscarder.start();\n\t\t\tthis.#isDiscardingStdin = true;\n\t\t}\n\n\t\tthis.#installHook();\n\t\tthis.render();\n\t\tthis.#id = setInterval(this.render.bind(this), this.interval);\n\n\t\treturn this;\n\t}\n\n\tstop() {\n\t\tclearInterval(this.#id);\n\t\tthis.#id = undefined;\n\t\tthis.#frameIndex = -1;\n\t\tthis.#lastFrameTime = 0;\n\n\t\tthis.#clearRenderDeferral();\n\t\tthis.#uninstallHook();\n\n\t\t// Clean up drain handler if it exists\n\t\tif (this.#drainHandler) {\n\t\t\tthis.#stream.removeListener('drain', this.#drainHandler);\n\t\t\tthis.#drainHandler = undefined;\n\t\t}\n\n\t\tif (this.isEnabled) {\n\t\t\tthis.clear();\n\t\t\tif (this.#options.hideCursor) {\n\t\t\t\tcliCursor.show(this.#stream);\n\t\t\t}\n\t\t}\n\n\t\tif (this.#isDiscardingStdin) {\n\t\t\tthis.#isDiscardingStdin = false;\n\t\t\tstdinDiscarder.stop();\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tsucceed(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.success, text});\n\t}\n\n\tfail(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.error, text});\n\t}\n\n\twarn(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.warning, text});\n\t}\n\n\tinfo(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.info, text});\n\t}\n\n\tstopAndPersist(options = {}) {\n\t\tif (this.isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst symbol = options.symbol ?? ' ';\n\t\tconst text = options.text ?? this.text;\n\t\tconst prefixText = options.prefixText ?? this.#options.prefixText;\n\t\tconst suffixText = options.suffixText ?? this.#options.suffixText;\n\n\t\tconst textToWrite = this.#buildOutputLine(symbol, text, prefixText, suffixText) + '\\n';\n\n\t\tthis.stop();\n\t\tthis.#internalWrite(() => this.#stream.write(textToWrite));\n\n\t\treturn this;\n\t}\n}\n\nexport default function ora(options) {\n\treturn new Ora(options);\n}\n\nexport async function oraPromise(action, options) {\n\tconst actionIsFunction = typeof action === 'function';\n\tconst actionIsPromise = typeof action.then === 'function';\n\n\tif (!actionIsFunction && !actionIsPromise) {\n\t\tthrow new TypeError('Parameter `action` must be a Function or a Promise');\n\t}\n\n\tconst {successText, failText} = typeof options === 'object'\n\t\t? options\n\t\t: {successText: undefined, failText: undefined};\n\n\tconst spinner = ora(options).start();\n\n\ttry {\n\t\tconst promise = actionIsFunction ? action(spinner) : action;\n\t\tconst result = await promise;\n\n\t\tspinner.succeed(successText === undefined\n\t\t\t? undefined\n\t\t\t: (typeof successText === 'string' ? successText : successText(result)));\n\n\t\treturn result;\n\t} catch (error) {\n\t\tspinner.fail(failText === undefined\n\t\t\t? undefined\n\t\t\t: (typeof failText === 'string' ? failText : failText(error)));\n\n\t\tthrow error;\n\t}\n}\n\nexport {default as spinners} from 'cli-spinners';\n","export const isUpKey = (key, keybindings = []) => \n// The up key\nkey.name === 'up' ||\n // Vim keybinding: hjkl keys map to left/down/up/right\n (keybindings.includes('vim') && key.name === 'k') ||\n // Emacs keybinding: Ctrl+P means \"previous\" in Emacs navigation conventions\n (keybindings.includes('emacs') && key.ctrl && key.name === 'p');\nexport const isDownKey = (key, keybindings = []) => \n// The down key\nkey.name === 'down' ||\n // Vim keybinding: hjkl keys map to left/down/up/right\n (keybindings.includes('vim') && key.name === 'j') ||\n // Emacs keybinding: Ctrl+N means \"next\" in Emacs navigation conventions\n (keybindings.includes('emacs') && key.ctrl && key.name === 'n');\nexport const isSpaceKey = (key) => key.name === 'space';\nexport const isBackspaceKey = (key) => key.name === 'backspace';\nexport const isTabKey = (key) => key.name === 'tab';\nexport const isNumberKey = (key) => '1234567890'.includes(key.name);\nexport const isEnterKey = (key) => key.name === 'enter' || key.name === 'return';\nexport const isShiftKey = (key) => key.shift;\n","export class AbortPromptError extends Error {\n name = 'AbortPromptError';\n message = 'Prompt was aborted';\n constructor(options) {\n super();\n this.cause = options?.cause;\n }\n}\nexport class CancelPromptError extends Error {\n name = 'CancelPromptError';\n message = 'Prompt was canceled';\n}\nexport class ExitPromptError extends Error {\n name = 'ExitPromptError';\n}\nexport class HookError extends Error {\n name = 'HookError';\n}\nexport class ValidationError extends Error {\n name = 'ValidationError';\n}\n","/* eslint @typescript-eslint/no-explicit-any: [\"off\"] */\nimport { AsyncLocalStorage, AsyncResource } from 'node:async_hooks';\nimport { HookError, ValidationError } from \"./errors.js\";\nconst hookStorage = new AsyncLocalStorage();\nfunction createStore(rl) {\n const store = {\n rl,\n hooks: [],\n hooksCleanup: [],\n hooksEffect: [],\n index: 0,\n handleChange() { },\n };\n return store;\n}\n// Run callback in with the hook engine setup.\nexport function withHooks(rl, cb) {\n const store = createStore(rl);\n return hookStorage.run(store, () => {\n function cycle(render) {\n store.handleChange = () => {\n store.index = 0;\n render();\n };\n store.handleChange();\n }\n return cb(cycle);\n });\n}\n// Safe getStore utility that'll return the store or throw if undefined.\nfunction getStore() {\n const store = hookStorage.getStore();\n if (!store) {\n throw new HookError('[Inquirer] Hook functions can only be called from within a prompt');\n }\n return store;\n}\nexport function readline() {\n return getStore().rl;\n}\n// Merge state updates happening within the callback function to avoid multiple renders.\nexport function withUpdates(fn) {\n const wrapped = (...args) => {\n const store = getStore();\n let shouldUpdate = false;\n const oldHandleChange = store.handleChange;\n store.handleChange = () => {\n shouldUpdate = true;\n };\n const returnValue = fn(...args);\n if (shouldUpdate) {\n oldHandleChange();\n }\n store.handleChange = oldHandleChange;\n return returnValue;\n };\n return AsyncResource.bind(wrapped);\n}\nexport function withPointer(cb) {\n const store = getStore();\n const { index } = store;\n const pointer = {\n get() {\n return store.hooks[index];\n },\n set(value) {\n store.hooks[index] = value;\n },\n initialized: index in store.hooks,\n };\n const returnValue = cb(pointer);\n store.index++;\n return returnValue;\n}\nexport function handleChange() {\n getStore().handleChange();\n}\nexport const effectScheduler = {\n queue(cb) {\n const store = getStore();\n const { index } = store;\n store.hooksEffect.push(() => {\n store.hooksCleanup[index]?.();\n const cleanFn = cb(readline());\n if (cleanFn != null && typeof cleanFn !== 'function') {\n throw new ValidationError('useEffect return value must be a cleanup function or nothing.');\n }\n store.hooksCleanup[index] = cleanFn;\n });\n },\n run() {\n const store = getStore();\n withUpdates(() => {\n store.hooksEffect.forEach((effect) => {\n effect();\n });\n // Warning: Clean the hooks before exiting the `withUpdates` block.\n // Failure to do so means an updates would hit the same effects again.\n store.hooksEffect.length = 0;\n })();\n },\n clearAll() {\n const store = getStore();\n store.hooksCleanup.forEach((cleanFn) => {\n cleanFn?.();\n });\n store.hooksEffect.length = 0;\n store.hooksCleanup.length = 0;\n },\n};\n","import { AsyncResource } from 'node:async_hooks';\nimport { withPointer, handleChange } from \"./hook-engine.js\";\nexport function useState(defaultValue) {\n return withPointer((pointer) => {\n const setState = AsyncResource.bind(function setState(newValue) {\n // Noop if the value is still the same.\n if (pointer.get() !== newValue) {\n pointer.set(newValue);\n // Trigger re-render\n handleChange();\n }\n });\n if (pointer.initialized) {\n return [pointer.get(), setState];\n }\n const value = typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n pointer.set(value);\n return [value, setState];\n });\n}\n","import { withPointer, effectScheduler } from \"./hook-engine.js\";\nexport function useEffect(cb, depArray) {\n withPointer((pointer) => {\n const oldDeps = pointer.get();\n const hasChanged = !Array.isArray(oldDeps) || depArray.some((dep, i) => !Object.is(dep, oldDeps[i]));\n if (hasChanged) {\n effectScheduler.queue(cb);\n }\n pointer.set(depArray);\n });\n}\n","// process.env dot-notation access prints:\n// Property 'TERM' comes from an index signature, so it must be accessed with ['TERM'].ts(4111)\n/* eslint dot-notation: [\"off\"] */\nimport process from 'node:process';\n// Ported from is-unicode-supported\nfunction isUnicodeSupported() {\n if (process.platform !== 'win32') {\n return process.env['TERM'] !== 'linux'; // Linux console (kernel)\n }\n return (Boolean(process.env['WT_SESSION']) || // Windows Terminal\n Boolean(process.env['TERMINUS_SUBLIME']) || // Terminus (<0.2.27)\n process.env['ConEmuTask'] === '{cmd::Cmder}' || // ConEmu and cmder\n process.env['TERM_PROGRAM'] === 'Terminus-Sublime' ||\n process.env['TERM_PROGRAM'] === 'vscode' ||\n process.env['TERM'] === 'xterm-256color' ||\n process.env['TERM'] === 'alacritty' ||\n process.env['TERMINAL_EMULATOR'] === 'JetBrains-JediTerm');\n}\n// Ported from figures\nconst common = {\n circleQuestionMark: '(?)',\n questionMarkPrefix: '(?)',\n square: '█',\n squareDarkShade: '▓',\n squareMediumShade: '▒',\n squareLightShade: '░',\n squareTop: '▀',\n squareBottom: '▄',\n squareLeft: '▌',\n squareRight: '▐',\n squareCenter: '■',\n bullet: '●',\n dot: '․',\n ellipsis: '…',\n pointerSmall: '›',\n triangleUp: '▲',\n triangleUpSmall: '▴',\n triangleDown: '▼',\n triangleDownSmall: '▾',\n triangleLeftSmall: '◂',\n triangleRightSmall: '▸',\n home: '⌂',\n heart: '♥',\n musicNote: '♪',\n musicNoteBeamed: '♫',\n arrowUp: '↑',\n arrowDown: '↓',\n arrowLeft: '←',\n arrowRight: '→',\n arrowLeftRight: '↔',\n arrowUpDown: '↕',\n almostEqual: '≈',\n notEqual: '≠',\n lessOrEqual: '≤',\n greaterOrEqual: '≥',\n identical: '≡',\n infinity: '∞',\n subscriptZero: '₀',\n subscriptOne: '₁',\n subscriptTwo: '₂',\n subscriptThree: '₃',\n subscriptFour: '₄',\n subscriptFive: '₅',\n subscriptSix: '₆',\n subscriptSeven: '₇',\n subscriptEight: '₈',\n subscriptNine: '₉',\n oneHalf: '½',\n oneThird: '⅓',\n oneQuarter: '¼',\n oneFifth: '⅕',\n oneSixth: '⅙',\n oneEighth: '⅛',\n twoThirds: '⅔',\n twoFifths: '⅖',\n threeQuarters: '¾',\n threeFifths: '⅗',\n threeEighths: '⅜',\n fourFifths: '⅘',\n fiveSixths: '⅚',\n fiveEighths: '⅝',\n sevenEighths: '⅞',\n line: '─',\n lineBold: '━',\n lineDouble: '═',\n lineDashed0: '┄',\n lineDashed1: '┅',\n lineDashed2: '┈',\n lineDashed3: '┉',\n lineDashed4: '╌',\n lineDashed5: '╍',\n lineDashed6: '╴',\n lineDashed7: '╶',\n lineDashed8: '╸',\n lineDashed9: '╺',\n lineDashed10: '╼',\n lineDashed11: '╾',\n lineDashed12: '−',\n lineDashed13: '–',\n lineDashed14: '‐',\n lineDashed15: '⁃',\n lineVertical: '│',\n lineVerticalBold: '┃',\n lineVerticalDouble: '║',\n lineVerticalDashed0: '┆',\n lineVerticalDashed1: '┇',\n lineVerticalDashed2: '┊',\n lineVerticalDashed3: '┋',\n lineVerticalDashed4: '╎',\n lineVerticalDashed5: '╏',\n lineVerticalDashed6: '╵',\n lineVerticalDashed7: '╷',\n lineVerticalDashed8: '╹',\n lineVerticalDashed9: '╻',\n lineVerticalDashed10: '╽',\n lineVerticalDashed11: '╿',\n lineDownLeft: '┐',\n lineDownLeftArc: '╮',\n lineDownBoldLeftBold: '┓',\n lineDownBoldLeft: '┒',\n lineDownLeftBold: '┑',\n lineDownDoubleLeftDouble: '╗',\n lineDownDoubleLeft: '╖',\n lineDownLeftDouble: '╕',\n lineDownRight: '┌',\n lineDownRightArc: '╭',\n lineDownBoldRightBold: '┏',\n lineDownBoldRight: '┎',\n lineDownRightBold: '┍',\n lineDownDoubleRightDouble: '╔',\n lineDownDoubleRight: '╓',\n lineDownRightDouble: '╒',\n lineUpLeft: '┘',\n lineUpLeftArc: '╯',\n lineUpBoldLeftBold: '┛',\n lineUpBoldLeft: '┚',\n lineUpLeftBold: '┙',\n lineUpDoubleLeftDouble: '╝',\n lineUpDoubleLeft: '╜',\n lineUpLeftDouble: '╛',\n lineUpRight: '└',\n lineUpRightArc: '╰',\n lineUpBoldRightBold: '┗',\n lineUpBoldRight: '┖',\n lineUpRightBold: '┕',\n lineUpDoubleRightDouble: '╚',\n lineUpDoubleRight: '╙',\n lineUpRightDouble: '╘',\n lineUpDownLeft: '┤',\n lineUpBoldDownBoldLeftBold: '┫',\n lineUpBoldDownBoldLeft: '┨',\n lineUpDownLeftBold: '┥',\n lineUpBoldDownLeftBold: '┩',\n lineUpDownBoldLeftBold: '┪',\n lineUpDownBoldLeft: '┧',\n lineUpBoldDownLeft: '┦',\n lineUpDoubleDownDoubleLeftDouble: '╣',\n lineUpDoubleDownDoubleLeft: '╢',\n lineUpDownLeftDouble: '╡',\n lineUpDownRight: '├',\n lineUpBoldDownBoldRightBold: '┣',\n lineUpBoldDownBoldRight: '┠',\n lineUpDownRightBold: '┝',\n lineUpBoldDownRightBold: '┡',\n lineUpDownBoldRightBold: '┢',\n lineUpDownBoldRight: '┟',\n lineUpBoldDownRight: '┞',\n lineUpDoubleDownDoubleRightDouble: '╠',\n lineUpDoubleDownDoubleRight: '╟',\n lineUpDownRightDouble: '╞',\n lineDownLeftRight: '┬',\n lineDownBoldLeftBoldRightBold: '┳',\n lineDownLeftBoldRightBold: '┯',\n lineDownBoldLeftRight: '┰',\n lineDownBoldLeftBoldRight: '┱',\n lineDownBoldLeftRightBold: '┲',\n lineDownLeftRightBold: '┮',\n lineDownLeftBoldRight: '┭',\n lineDownDoubleLeftDoubleRightDouble: '╦',\n lineDownDoubleLeftRight: '╥',\n lineDownLeftDoubleRightDouble: '╤',\n lineUpLeftRight: '┴',\n lineUpBoldLeftBoldRightBold: '┻',\n lineUpLeftBoldRightBold: '┷',\n lineUpBoldLeftRight: '┸',\n lineUpBoldLeftBoldRight: '┹',\n lineUpBoldLeftRightBold: '┺',\n lineUpLeftRightBold: '┶',\n lineUpLeftBoldRight: '┵',\n lineUpDoubleLeftDoubleRightDouble: '╩',\n lineUpDoubleLeftRight: '╨',\n lineUpLeftDoubleRightDouble: '╧',\n lineUpDownLeftRight: '┼',\n lineUpBoldDownBoldLeftBoldRightBold: '╋',\n lineUpDownBoldLeftBoldRightBold: '╈',\n lineUpBoldDownLeftBoldRightBold: '╇',\n lineUpBoldDownBoldLeftRightBold: '╊',\n lineUpBoldDownBoldLeftBoldRight: '╉',\n lineUpBoldDownLeftRight: '╀',\n lineUpDownBoldLeftRight: '╁',\n lineUpDownLeftBoldRight: '┽',\n lineUpDownLeftRightBold: '┾',\n lineUpBoldDownBoldLeftRight: '╂',\n lineUpDownLeftBoldRightBold: '┿',\n lineUpBoldDownLeftBoldRight: '╃',\n lineUpBoldDownLeftRightBold: '╄',\n lineUpDownBoldLeftBoldRight: '╅',\n lineUpDownBoldLeftRightBold: '╆',\n lineUpDoubleDownDoubleLeftDoubleRightDouble: '╬',\n lineUpDoubleDownDoubleLeftRight: '╫',\n lineUpDownLeftDoubleRightDouble: '╪',\n lineCross: '╳',\n lineBackslash: '╲',\n lineSlash: '╱',\n};\nconst specialMainSymbols = {\n tick: '✔',\n info: 'ℹ',\n warning: '⚠',\n cross: '✘',\n squareSmall: '◻',\n squareSmallFilled: '◼',\n circle: '◯',\n circleFilled: '◉',\n circleDotted: '◌',\n circleDouble: '◎',\n circleCircle: 'ⓞ',\n circleCross: 'ⓧ',\n circlePipe: 'Ⓘ',\n radioOn: '◉',\n radioOff: '◯',\n checkboxOn: '☒',\n checkboxOff: '☐',\n checkboxCircleOn: 'ⓧ',\n checkboxCircleOff: 'Ⓘ',\n pointer: '❯',\n triangleUpOutline: '△',\n triangleLeft: '◀',\n triangleRight: '▶',\n lozenge: '◆',\n lozengeOutline: '◇',\n hamburger: '☰',\n smiley: '㋡',\n mustache: '෴',\n star: '★',\n play: '▶',\n nodejs: '⬢',\n oneSeventh: '⅐',\n oneNinth: '⅑',\n oneTenth: '⅒',\n};\nconst specialFallbackSymbols = {\n tick: '√',\n info: 'i',\n warning: '‼',\n cross: '×',\n squareSmall: '□',\n squareSmallFilled: '■',\n circle: '( )',\n circleFilled: '(*)',\n circleDotted: '( )',\n circleDouble: '( )',\n circleCircle: '(○)',\n circleCross: '(×)',\n circlePipe: '(│)',\n radioOn: '(*)',\n radioOff: '( )',\n checkboxOn: '[×]',\n checkboxOff: '[ ]',\n checkboxCircleOn: '(×)',\n checkboxCircleOff: '( )',\n pointer: '>',\n triangleUpOutline: '∆',\n triangleLeft: '◄',\n triangleRight: '►',\n lozenge: '♦',\n lozengeOutline: '◊',\n hamburger: '≡',\n smiley: '☺',\n mustache: '┌─┐',\n star: '✶',\n play: '►',\n nodejs: '♦',\n oneSeventh: '1/7',\n oneNinth: '1/9',\n oneTenth: '1/10',\n};\nexport const mainSymbols = {\n ...common,\n ...specialMainSymbols,\n};\nexport const fallbackSymbols = {\n ...common,\n ...specialFallbackSymbols,\n};\nconst shouldUseMain = isUnicodeSupported();\nconst figures = shouldUseMain\n ? mainSymbols\n : fallbackSymbols;\nexport default figures;\nconst replacements = Object.entries(specialMainSymbols);\n// On terminals which do not support Unicode symbols, substitute them to other symbols\nexport const replaceSymbols = (string, { useFallback = !shouldUseMain } = {}) => {\n if (useFallback) {\n for (const [key, mainSymbol] of replacements) {\n const fallbackSymbol = fallbackSymbols[key];\n if (!fallbackSymbol) {\n throw new Error(`Unable to find fallback for ${key}`);\n }\n string = string.replaceAll(mainSymbol, fallbackSymbol);\n }\n }\n return string;\n};\n","import { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nexport const defaultTheme = {\n prefix: {\n idle: styleText('blue', '?'),\n done: styleText('green', figures.tick),\n },\n spinner: {\n interval: 80,\n frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'].map((frame) => styleText('yellow', frame)),\n },\n style: {\n answer: (text) => styleText('cyan', text),\n message: (text) => styleText('bold', text),\n error: (text) => styleText('red', `> ${text}`),\n defaultAnswer: (text) => styleText('dim', `(${text})`),\n help: (text) => styleText('dim', text),\n highlight: (text) => styleText('cyan', text),\n key: (text) => styleText('cyan', styleText('bold', `<${text}>`)),\n },\n};\n","import { defaultTheme } from \"./theme.js\";\nfunction isPlainObject(value) {\n if (typeof value !== 'object' || value === null)\n return false;\n let proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n}\nfunction deepMerge(...objects) {\n const output = {};\n for (const obj of objects) {\n for (const [key, value] of Object.entries(obj)) {\n const prevValue = output[key];\n output[key] =\n isPlainObject(prevValue) && isPlainObject(value)\n ? deepMerge(prevValue, value)\n : value;\n }\n }\n return output;\n}\nexport function makeTheme(...themes) {\n const themesToMerge = [\n defaultTheme,\n ...themes.filter((theme) => theme != null),\n ];\n return deepMerge(...themesToMerge);\n}\n","import { useState } from \"./use-state.js\";\nimport { useEffect } from \"./use-effect.js\";\nimport { makeTheme } from \"./make-theme.js\";\nexport function usePrefix({ status = 'idle', theme, }) {\n const [showLoader, setShowLoader] = useState(false);\n const [tick, setTick] = useState(0);\n const { prefix, spinner } = makeTheme(theme);\n useEffect(() => {\n if (status === 'loading') {\n let tickInterval;\n let inc = -1;\n // Delay displaying spinner by 300ms, to avoid flickering\n const delayTimeout = setTimeout(() => {\n setShowLoader(true);\n tickInterval = setInterval(() => {\n inc = inc + 1;\n setTick(inc % spinner.frames.length);\n }, spinner.interval);\n }, 300);\n return () => {\n clearTimeout(delayTimeout);\n clearInterval(tickInterval);\n };\n }\n else {\n setShowLoader(false);\n }\n }, [status]);\n if (showLoader) {\n return spinner.frames[tick];\n }\n // There's a delay before we show the loader. So we want to ignore `loading` here, and pass idle instead.\n const iconName = status === 'loading' ? 'idle' : status;\n return typeof prefix === 'string' ? prefix : (prefix[iconName] ?? prefix['idle']);\n}\n","import { withPointer } from \"./hook-engine.js\";\nexport function useMemo(fn, dependencies) {\n return withPointer((pointer) => {\n const prev = pointer.get();\n if (!prev ||\n prev.dependencies.length !== dependencies.length ||\n prev.dependencies.some((dep, i) => dep !== dependencies[i])) {\n const value = fn();\n pointer.set({ value, dependencies });\n return value;\n }\n return prev.value;\n });\n}\n","import { useState } from \"./use-state.js\";\nexport function useRef(val) {\n return useState({ current: val })[0];\n}\n","import { useRef } from \"./use-ref.js\";\nimport { useEffect } from \"./use-effect.js\";\nimport { withUpdates } from \"./hook-engine.js\";\nexport function useKeypress(userHandler) {\n const signal = useRef(userHandler);\n signal.current = userHandler;\n useEffect((rl) => {\n let ignore = false;\n const handler = withUpdates((_input, event) => {\n if (ignore)\n return;\n void signal.current(event, rl);\n });\n rl.input.on('keypress', handler);\n return () => {\n ignore = true;\n rl.input.removeListener('keypress', handler);\n };\n }, []);\n}\n","'use strict';\n\nmodule.exports = cliWidth;\n\nfunction normalizeOpts(options) {\n const defaultOpts = {\n defaultWidth: 0,\n output: process.stdout,\n tty: require('tty'),\n };\n\n if (!options) {\n return defaultOpts;\n }\n\n Object.keys(defaultOpts).forEach(function (key) {\n if (!options[key]) {\n options[key] = defaultOpts[key];\n }\n });\n\n return options;\n}\n\nfunction cliWidth(options) {\n const opts = normalizeOpts(options);\n\n if (opts.output.getWindowSize) {\n return opts.output.getWindowSize()[0] || opts.defaultWidth;\n }\n\n if (opts.tty.getWindowSize) {\n return opts.tty.getWindowSize()[1] || opts.defaultWidth;\n }\n\n if (opts.output.columns) {\n return opts.output.columns;\n }\n\n if (process.env.CLI_WIDTH) {\n const width = parseInt(process.env.CLI_WIDTH, 10);\n\n if (!isNaN(width) && width !== 0) {\n return width;\n }\n }\n\n return opts.defaultWidth;\n}\n","/* MAIN */\nconst getCodePointsLength = (() => {\n const SURROGATE_PAIR_RE = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n return (input) => {\n let surrogatePairsNr = 0;\n SURROGATE_PAIR_RE.lastIndex = 0;\n while (SURROGATE_PAIR_RE.test(input)) {\n surrogatePairsNr += 1;\n }\n return input.length - surrogatePairsNr;\n };\n})();\nconst isFullWidth = (x) => {\n return x === 0x3000 || x >= 0xFF01 && x <= 0xFF60 || x >= 0xFFE0 && x <= 0xFFE6;\n};\nconst isWideNotCJKTNotEmoji = (x) => {\n return x === 0x231B || x === 0x2329 || x >= 0x2FF0 && x <= 0x2FFF || x >= 0x3001 && x <= 0x303E || x >= 0x3099 && x <= 0x30FF || x >= 0x3105 && x <= 0x312F || x >= 0x3131 && x <= 0x318E || x >= 0x3190 && x <= 0x31E3 || x >= 0x31EF && x <= 0x321E || x >= 0x3220 && x <= 0x3247 || x >= 0x3250 && x <= 0x4DBF || x >= 0xFE10 && x <= 0xFE19 || x >= 0xFE30 && x <= 0xFE52 || x >= 0xFE54 && x <= 0xFE66 || x >= 0xFE68 && x <= 0xFE6B || x >= 0x1F200 && x <= 0x1F202 || x >= 0x1F210 && x <= 0x1F23B || x >= 0x1F240 && x <= 0x1F248 || x >= 0x20000 && x <= 0x2FFFD || x >= 0x30000 && x <= 0x3FFFD;\n};\n/* EXPORT */\nexport { getCodePointsLength, isFullWidth, isWideNotCJKTNotEmoji };\n","/* IMPORT */\nimport { getCodePointsLength, isFullWidth, isWideNotCJKTNotEmoji } from './utils.js';\n/* HELPERS */\nconst ANSI_RE = /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\\u001b\\]8;[^;]*;.*?(?:\\u0007|\\u001b\\u005c)/y;\nconst CONTROL_RE = /[\\x00-\\x08\\x0A-\\x1F\\x7F-\\x9F]{1,1000}/y;\nconst CJKT_WIDE_RE = /(?:(?![\\uFF61-\\uFF9F\\uFF00-\\uFFEF])[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}\\p{Script=Hangul}\\p{Script=Tangut}]){1,1000}/yu;\nconst TAB_RE = /\\t{1,1000}/y;\nconst EMOJI_RE = /[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*/yu;\nconst LATIN_RE = /(?:[\\x20-\\x7E\\xA0-\\xFF](?!\\uFE0F)){1,1000}/y;\nconst MODIFIER_RE = /\\p{M}+/gu;\nconst NO_TRUNCATION = { limit: Infinity, ellipsis: '' };\n/* MAIN */\nconst getStringTruncatedWidth = (input, truncationOptions = {}, widthOptions = {}) => {\n /* CONSTANTS */\n const LIMIT = truncationOptions.limit ?? Infinity;\n const ELLIPSIS = truncationOptions.ellipsis ?? '';\n const ELLIPSIS_WIDTH = truncationOptions?.ellipsisWidth ?? (ELLIPSIS ? getStringTruncatedWidth(ELLIPSIS, NO_TRUNCATION, widthOptions).width : 0);\n const ANSI_WIDTH = 0;\n const CONTROL_WIDTH = widthOptions.controlWidth ?? 0;\n const TAB_WIDTH = widthOptions.tabWidth ?? 8;\n const EMOJI_WIDTH = widthOptions.emojiWidth ?? 2;\n const FULL_WIDTH_WIDTH = 2;\n const REGULAR_WIDTH = widthOptions.regularWidth ?? 1;\n const WIDE_WIDTH = widthOptions.wideWidth ?? FULL_WIDTH_WIDTH;\n const PARSE_BLOCKS = [\n [LATIN_RE, REGULAR_WIDTH],\n [ANSI_RE, ANSI_WIDTH],\n [CONTROL_RE, CONTROL_WIDTH],\n [TAB_RE, TAB_WIDTH],\n [EMOJI_RE, EMOJI_WIDTH],\n [CJKT_WIDE_RE, WIDE_WIDTH],\n ];\n /* STATE */\n let indexPrev = 0;\n let index = 0;\n let length = input.length;\n let lengthExtra = 0;\n let truncationEnabled = false;\n let truncationIndex = length;\n let truncationLimit = Math.max(0, LIMIT - ELLIPSIS_WIDTH);\n let unmatchedStart = 0;\n let unmatchedEnd = 0;\n let width = 0;\n let widthExtra = 0;\n /* PARSE LOOP */\n outer: while (true) {\n /* UNMATCHED */\n if ((unmatchedEnd > unmatchedStart) || (index >= length && index > indexPrev)) {\n const unmatched = input.slice(unmatchedStart, unmatchedEnd) || input.slice(indexPrev, index);\n lengthExtra = 0;\n for (const char of unmatched.replaceAll(MODIFIER_RE, '')) {\n const codePoint = char.codePointAt(0) || 0;\n if (isFullWidth(codePoint)) {\n widthExtra = FULL_WIDTH_WIDTH;\n }\n else if (isWideNotCJKTNotEmoji(codePoint)) {\n widthExtra = WIDE_WIDTH;\n }\n else {\n widthExtra = REGULAR_WIDTH;\n }\n if ((width + widthExtra) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, Math.max(unmatchedStart, indexPrev) + lengthExtra);\n }\n if ((width + widthExtra) > LIMIT) {\n truncationEnabled = true;\n break outer;\n }\n lengthExtra += char.length;\n width += widthExtra;\n }\n unmatchedStart = unmatchedEnd = 0;\n }\n /* EXITING */\n if (index >= length) {\n break outer;\n }\n /* PARSE BLOCKS */\n for (let i = 0, l = PARSE_BLOCKS.length; i < l; i++) {\n const [BLOCK_RE, BLOCK_WIDTH] = PARSE_BLOCKS[i];\n BLOCK_RE.lastIndex = index;\n if (BLOCK_RE.test(input)) {\n lengthExtra = BLOCK_RE === CJKT_WIDE_RE ? getCodePointsLength(input.slice(index, BLOCK_RE.lastIndex)) : BLOCK_RE === EMOJI_RE ? 1 : BLOCK_RE.lastIndex - index;\n widthExtra = lengthExtra * BLOCK_WIDTH;\n if ((width + widthExtra) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / BLOCK_WIDTH));\n }\n if ((width + widthExtra) > LIMIT) {\n truncationEnabled = true;\n break outer;\n }\n width += widthExtra;\n unmatchedStart = indexPrev;\n unmatchedEnd = index;\n index = indexPrev = BLOCK_RE.lastIndex;\n continue outer;\n }\n }\n /* UNMATCHED INDEX */\n index += 1;\n }\n /* RETURN */\n return {\n width: truncationEnabled ? truncationLimit : width,\n index: truncationEnabled ? truncationIndex : length,\n truncated: truncationEnabled,\n ellipsed: truncationEnabled && LIMIT >= ELLIPSIS_WIDTH\n };\n};\n/* EXPORT */\nexport default getStringTruncatedWidth;\n","/* IMPORT */\nimport fastStringTruncatedWidth from 'fast-string-truncated-width';\n/* HELPERS */\nconst NO_TRUNCATION = {\n limit: Infinity,\n ellipsis: '',\n ellipsisWidth: 0,\n};\n/* MAIN */\nconst fastStringWidth = (input, options = {}) => {\n return fastStringTruncatedWidth(input, NO_TRUNCATION, options).width;\n};\n/* EXPORT */\nexport default fastStringWidth;\n","import stringWidth from 'fast-string-width';\nconst ESC = '\\x1B';\nconst CSI = '\\x9B';\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;;`;\nconst GROUP_REGEX = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`, 'y');\nconst getClosingCode = (openingCode) => {\n if (openingCode >= 30 && openingCode <= 37)\n return 39;\n if (openingCode >= 90 && openingCode <= 97)\n return 39;\n if (openingCode >= 40 && openingCode <= 47)\n return 49;\n if (openingCode >= 100 && openingCode <= 107)\n return 49;\n if (openingCode === 1 || openingCode === 2)\n return 22;\n if (openingCode === 3)\n return 23;\n if (openingCode === 4)\n return 24;\n if (openingCode === 7)\n return 27;\n if (openingCode === 8)\n return 28;\n if (openingCode === 9)\n return 29;\n if (openingCode === 0)\n return 0;\n return undefined;\n};\nconst wrapAnsiCode = (code) => `${ESC}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = (url) => `${ESC}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`;\nconst wrapWord = (rows, word, columns) => {\n const characters = word[Symbol.iterator]();\n let isInsideEscape = false;\n let isInsideLinkEscape = false;\n let lastRow = rows.at(-1);\n let visible = lastRow === undefined ? 0 : stringWidth(lastRow);\n let currentCharacter = characters.next();\n let nextCharacter = characters.next();\n let rawCharacterIndex = 0;\n while (!currentCharacter.done) {\n const character = currentCharacter.value;\n const characterLength = stringWidth(character);\n if (visible + characterLength <= columns) {\n rows[rows.length - 1] += character;\n }\n else {\n rows.push(character);\n visible = 0;\n }\n if (character === ESC || character === CSI) {\n isInsideEscape = true;\n isInsideLinkEscape = word.startsWith(ANSI_ESCAPE_LINK, rawCharacterIndex + 1);\n }\n if (isInsideEscape) {\n if (isInsideLinkEscape) {\n if (character === ANSI_ESCAPE_BELL) {\n isInsideEscape = false;\n isInsideLinkEscape = false;\n }\n }\n else if (character === ANSI_SGR_TERMINATOR) {\n isInsideEscape = false;\n }\n }\n else {\n visible += characterLength;\n if (visible === columns && !nextCharacter.done) {\n rows.push('');\n visible = 0;\n }\n }\n currentCharacter = nextCharacter;\n nextCharacter = characters.next();\n rawCharacterIndex += character.length;\n }\n lastRow = rows.at(-1);\n if (!visible && lastRow !== undefined && lastRow.length && rows.length > 1) {\n rows[rows.length - 2] += rows.pop();\n }\n};\nconst stringVisibleTrimSpacesRight = (string) => {\n const words = string.split(' ');\n let last = words.length;\n while (last) {\n if (stringWidth(words[last - 1])) {\n break;\n }\n last--;\n }\n if (last === words.length) {\n return string;\n }\n return words.slice(0, last).join(' ') + words.slice(last).join('');\n};\nconst exec = (string, columns, options = {}) => {\n if (options.trim !== false && string.trim() === '') {\n return '';\n }\n let returnValue = '';\n let escapeCode;\n let escapeUrl;\n const words = string.split(' ');\n let rows = [''];\n let rowLength = 0;\n for (let index = 0; index < words.length; index++) {\n const word = words[index];\n if (options.trim !== false) {\n const row = rows.at(-1) ?? '';\n const trimmed = row.trimStart();\n if (row.length !== trimmed.length) {\n rows[rows.length - 1] = trimmed;\n rowLength = stringWidth(trimmed);\n }\n }\n if (index !== 0) {\n if (rowLength >= columns &&\n (options.wordWrap === false || options.trim === false)) {\n rows.push('');\n rowLength = 0;\n }\n if (rowLength || options.trim === false) {\n rows[rows.length - 1] += ' ';\n rowLength++;\n }\n }\n const wordLength = stringWidth(word);\n if (options.hard && wordLength > columns) {\n const remainingColumns = columns - rowLength;\n const breaksStartingThisLine = 1 + Math.floor((wordLength - remainingColumns - 1) / columns);\n const breaksStartingNextLine = Math.floor((wordLength - 1) / columns);\n if (breaksStartingNextLine < breaksStartingThisLine) {\n rows.push('');\n }\n wrapWord(rows, word, columns);\n rowLength = stringWidth(rows.at(-1) ?? '');\n continue;\n }\n if (rowLength + wordLength > columns && rowLength && wordLength) {\n if (options.wordWrap === false && rowLength < columns) {\n wrapWord(rows, word, columns);\n rowLength = stringWidth(rows.at(-1) ?? '');\n continue;\n }\n rows.push('');\n rowLength = 0;\n }\n if (rowLength + wordLength > columns && options.wordWrap === false) {\n wrapWord(rows, word, columns);\n rowLength = stringWidth(rows.at(-1) ?? '');\n continue;\n }\n rows[rows.length - 1] += word;\n rowLength += wordLength;\n }\n if (options.trim !== false) {\n rows = rows.map((row) => stringVisibleTrimSpacesRight(row));\n }\n const preString = rows.join('\\n');\n let inSurrogate = false;\n for (let i = 0; i < preString.length; i++) {\n const character = preString[i];\n returnValue += character;\n if (!inSurrogate) {\n inSurrogate = character >= '\\ud800' && character <= '\\udbff';\n if (inSurrogate) {\n continue;\n }\n }\n else {\n inSurrogate = false;\n }\n if (character === ESC || character === CSI) {\n GROUP_REGEX.lastIndex = i + 1;\n const groupsResult = GROUP_REGEX.exec(preString);\n const groups = groupsResult?.groups;\n if (groups?.code !== undefined) {\n const code = Number.parseFloat(groups.code);\n escapeCode = code === END_CODE ? undefined : code;\n }\n else if (groups?.uri !== undefined) {\n escapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n }\n }\n if (preString[i + 1] === '\\n') {\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink('');\n }\n const closingCode = escapeCode ? getClosingCode(escapeCode) : undefined;\n if (escapeCode && closingCode) {\n returnValue += wrapAnsiCode(closingCode);\n }\n }\n else if (character === '\\n') {\n if (escapeCode && getClosingCode(escapeCode)) {\n returnValue += wrapAnsiCode(escapeCode);\n }\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink(escapeUrl);\n }\n }\n }\n return returnValue;\n};\nconst CRLF_OR_LF = /\\r?\\n/;\nexport function wrapAnsi(string, columns, options) {\n return String(string)\n .normalize()\n .split(CRLF_OR_LF)\n .map((line) => exec(line, columns, options))\n .join('\\n');\n}\n//# sourceMappingURL=main.js.map","import cliWidth from 'cli-width';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport { readline } from \"./hook-engine.js\";\n/**\n * Force line returns at specific width. This function is ANSI code friendly and it'll\n * ignore invisible codes during width calculation.\n * @param {string} content\n * @param {number} width\n * @return {string}\n */\nexport function breakLines(content, width) {\n return content\n .split('\\n')\n .flatMap((line) => wrapAnsi(line, width, { trim: false, hard: true })\n .split('\\n')\n .map((str) => str.trimEnd()))\n .join('\\n');\n}\n/**\n * Returns the width of the active readline, or 80 as default value.\n * @returns {number}\n */\nexport function readlineWidth() {\n return cliWidth({ defaultWidth: 80, output: readline().output });\n}\n","import { useRef } from \"../use-ref.js\";\nimport { readlineWidth, breakLines } from \"../utils.js\";\nfunction usePointerPosition({ active, renderedItems, pageSize, loop, }) {\n const state = useRef({\n lastPointer: active,\n lastActive: undefined,\n });\n const { lastPointer, lastActive } = state.current;\n const middle = Math.floor(pageSize / 2);\n const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);\n const defaultPointerPosition = renderedItems\n .slice(0, active)\n .reduce((acc, item) => acc + item.length, 0);\n let pointer = defaultPointerPosition;\n if (renderedLength > pageSize) {\n if (loop) {\n /**\n * Creates the next position for the pointer considering an infinitely\n * looping list of items to be rendered on the page.\n *\n * The goal is to progressively move the cursor to the middle position as the user move down, and then keep\n * the cursor there. When the user move up, maintain the cursor position.\n */\n // By default, keep the cursor position as-is.\n pointer = lastPointer;\n if (\n // First render, skip this logic.\n lastActive != null &&\n // Only move the pointer down when the user moves down.\n lastActive < active &&\n // Check user didn't move up across page boundary.\n active - lastActive < pageSize) {\n pointer = Math.min(\n // Furthest allowed position for the pointer is the middle of the list\n middle, Math.abs(active - lastActive) === 1\n ? Math.min(\n // Move the pointer at most the height of the last active item.\n lastPointer + (renderedItems[lastActive]?.length ?? 0), \n // If the user moved by one item, move the pointer to the natural position of the active item as\n // long as it doesn't move the cursor up.\n Math.max(defaultPointerPosition, lastPointer))\n : // Otherwise, move the pointer down by the difference between the active and last active item.\n lastPointer + active - lastActive);\n }\n }\n else {\n /**\n * Creates the next position for the pointer considering a finite list of\n * items to be rendered on a page.\n *\n * The goal is to keep the pointer in the middle of the page whenever possible, until\n * we reach the bounds of the list (top or bottom). In which case, the cursor moves progressively\n * to the bottom or top of the list.\n */\n const spaceUnderActive = renderedItems\n .slice(active)\n .reduce((acc, item) => acc + item.length, 0);\n pointer =\n spaceUnderActive < pageSize - middle\n ? // If the active item is near the end of the list, progressively move the cursor towards the end.\n pageSize - spaceUnderActive\n : // Otherwise, progressively move the pointer to the middle of the list.\n Math.min(defaultPointerPosition, middle);\n }\n }\n // Save state for the next render\n state.current.lastPointer = pointer;\n state.current.lastActive = active;\n return pointer;\n}\nexport function usePagination({ items, active, renderItem, pageSize, loop = true, }) {\n const width = readlineWidth();\n const bound = (num) => ((num % items.length) + items.length) % items.length;\n const renderedItems = items.map((item, index) => {\n if (item == null)\n return [];\n return breakLines(renderItem({ item, index, isActive: index === active }), width).split('\\n');\n });\n const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);\n const renderItemAtIndex = (index) => renderedItems[index] ?? [];\n const pointer = usePointerPosition({ active, renderedItems, pageSize, loop });\n // Render the active item to decide the position.\n // If the active item fits under the pointer, we render it there.\n // Otherwise, we need to render it to fit at the bottom of the page; moving the pointer up.\n const activeItem = renderItemAtIndex(active).slice(0, pageSize);\n const activeItemPosition = pointer + activeItem.length <= pageSize ? pointer : pageSize - activeItem.length;\n // Create an array of lines for the page, and add the lines of the active item into the page\n const pageBuffer = Array.from({ length: pageSize });\n pageBuffer.splice(activeItemPosition, activeItem.length, ...activeItem);\n // Store to prevent rendering the same item twice\n const itemVisited = new Set([active]);\n // Fill the page under the active item\n let bufferPointer = activeItemPosition + activeItem.length;\n let itemPointer = bound(active + 1);\n while (bufferPointer < pageSize &&\n !itemVisited.has(itemPointer) &&\n (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer > active)) {\n const lines = renderItemAtIndex(itemPointer);\n const linesToAdd = lines.slice(0, pageSize - bufferPointer);\n pageBuffer.splice(bufferPointer, linesToAdd.length, ...linesToAdd);\n // Move pointers for next iteration\n itemVisited.add(itemPointer);\n bufferPointer += linesToAdd.length;\n itemPointer = bound(itemPointer + 1);\n }\n // Fill the page over the active item\n bufferPointer = activeItemPosition - 1;\n itemPointer = bound(active - 1);\n while (bufferPointer >= 0 &&\n !itemVisited.has(itemPointer) &&\n (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer < active)) {\n const lines = renderItemAtIndex(itemPointer);\n const linesToAdd = lines.slice(Math.max(0, lines.length - bufferPointer - 1));\n pageBuffer.splice(bufferPointer - linesToAdd.length + 1, linesToAdd.length, ...linesToAdd);\n // Move pointers for next iteration\n itemVisited.add(itemPointer);\n bufferPointer -= linesToAdd.length;\n itemPointer = bound(itemPointer - 1);\n }\n return pageBuffer.filter((line) => typeof line === 'string').join('\\n');\n}\n","const Stream = require('stream')\n\nclass MuteStream extends Stream {\n #isTTY = null\n\n constructor (opts = {}) {\n super(opts)\n this.writable = this.readable = true\n this.muted = false\n this.on('pipe', this._onpipe)\n this.replace = opts.replace\n\n // For readline-type situations\n // This much at the start of a line being redrawn after a ctrl char\n // is seen (such as backspace) won't be redrawn as the replacement\n this._prompt = opts.prompt || null\n this._hadControl = false\n }\n\n #destSrc (key, def) {\n if (this._dest) {\n return this._dest[key]\n }\n if (this._src) {\n return this._src[key]\n }\n return def\n }\n\n #proxy (method, ...args) {\n if (typeof this._dest?.[method] === 'function') {\n this._dest[method](...args)\n }\n if (typeof this._src?.[method] === 'function') {\n this._src[method](...args)\n }\n }\n\n get isTTY () {\n if (this.#isTTY !== null) {\n return this.#isTTY\n }\n return this.#destSrc('isTTY', false)\n }\n\n // basically just get replace the getter/setter with a regular value\n set isTTY (val) {\n this.#isTTY = val\n }\n\n get rows () {\n return this.#destSrc('rows')\n }\n\n get columns () {\n return this.#destSrc('columns')\n }\n\n mute () {\n this.muted = true\n }\n\n unmute () {\n this.muted = false\n }\n\n _onpipe (src) {\n this._src = src\n }\n\n pipe (dest, options) {\n this._dest = dest\n return super.pipe(dest, options)\n }\n\n pause () {\n if (this._src) {\n return this._src.pause()\n }\n }\n\n resume () {\n if (this._src) {\n return this._src.resume()\n }\n }\n\n write (c) {\n if (this.muted) {\n if (!this.replace) {\n return true\n }\n // eslint-disable-next-line no-control-regex\n if (c.match(/^\\u001b/)) {\n if (c.indexOf(this._prompt) === 0) {\n c = c.slice(this._prompt.length)\n c = c.replace(/./g, this.replace)\n c = this._prompt + c\n }\n this._hadControl = true\n return this.emit('data', c)\n } else {\n if (this._prompt && this._hadControl &&\n c.indexOf(this._prompt) === 0) {\n this._hadControl = false\n this.emit('data', this._prompt)\n c = c.slice(this._prompt.length)\n }\n c = c.toString().replace(/./g, this.replace)\n }\n }\n this.emit('data', c)\n }\n\n end (c) {\n if (this.muted) {\n if (c && this.replace) {\n c = c.toString().replace(/./g, this.replace)\n } else {\n c = null\n }\n }\n if (c) {\n this.emit('data', c)\n }\n this.emit('end')\n }\n\n destroy (...args) {\n return this.#proxy('destroy', ...args)\n }\n\n destroySoon (...args) {\n return this.#proxy('destroySoon', ...args)\n }\n\n close (...args) {\n return this.#proxy('close', ...args)\n }\n}\n\nmodule.exports = MuteStream\n","const ESC = '\\u001B[';\n/** Move cursor to first column */\nexport const cursorLeft = ESC + 'G';\n/** Hide the cursor */\nexport const cursorHide = ESC + '?25l';\n/** Show the cursor */\nexport const cursorShow = ESC + '?25h';\n/** Move cursor up by count rows */\nexport const cursorUp = (rows = 1) => (rows > 0 ? `${ESC}${rows}A` : '');\n/** Move cursor down by count rows */\nexport const cursorDown = (rows = 1) => rows > 0 ? `${ESC}${rows}B` : '';\n/** Move cursor to position (x, y) */\nexport const cursorTo = (x, y) => {\n if (typeof y === 'number' && !Number.isNaN(y)) {\n return `${ESC}${y + 1};${x + 1}H`;\n }\n return `${ESC}${x + 1}G`;\n};\nconst eraseLine = ESC + '2K';\n/** Erase the specified number of lines above the cursor */\nexport const eraseLines = (lines) => lines > 0 ? (eraseLine + cursorUp(1)).repeat(lines - 1) + eraseLine + cursorLeft : '';\n","import { stripVTControlCharacters } from 'node:util';\nimport { breakLines, readlineWidth } from \"./utils.js\";\nimport { cursorDown, cursorUp, cursorTo, cursorShow, eraseLines } from '@inquirer/ansi';\nconst height = (content) => content.split('\\n').length;\nconst lastLine = (content) => content.split('\\n').pop() ?? '';\nexport default class ScreenManager {\n // These variables are keeping information to allow correct prompt re-rendering\n height = 0;\n extraLinesUnderPrompt = 0;\n cursorPos;\n rl;\n constructor(rl) {\n this.rl = rl;\n this.cursorPos = rl.getCursorPos();\n }\n write(content) {\n this.rl.output.unmute();\n this.rl.output.write(content);\n this.rl.output.mute();\n }\n render(content, bottomContent = '') {\n // Write message to screen and setPrompt to control backspace\n const promptLine = lastLine(content);\n const rawPromptLine = stripVTControlCharacters(promptLine);\n // Remove the rl.line from our prompt. We can't rely on the content of\n // rl.line (mainly because of the password prompt), so just rely on it's\n // length.\n let prompt = rawPromptLine;\n if (this.rl.line.length > 0) {\n prompt = prompt.slice(0, -this.rl.line.length);\n }\n this.rl.setPrompt(prompt);\n // SetPrompt will change cursor position, now we can get correct value\n this.cursorPos = this.rl.getCursorPos();\n const width = readlineWidth();\n content = breakLines(content, width);\n bottomContent = breakLines(bottomContent, width);\n // Manually insert an extra line if we're at the end of the line.\n // This prevent the cursor from appearing at the beginning of the\n // current line.\n if (rawPromptLine.length % width === 0) {\n content += '\\n';\n }\n let output = content + (bottomContent ? '\\n' + bottomContent : '');\n /**\n * Re-adjust the cursor at the correct position.\n */\n // We need to consider parts of the prompt under the cursor as part of the bottom\n // content in order to correctly cleanup and re-render.\n const promptLineUpDiff = Math.floor(rawPromptLine.length / width) - this.cursorPos.rows;\n const bottomContentHeight = promptLineUpDiff + (bottomContent ? height(bottomContent) : 0);\n // Return cursor to the input position (on top of the bottomContent)\n if (bottomContentHeight > 0)\n output += cursorUp(bottomContentHeight);\n // Return cursor to the initial left offset.\n output += cursorTo(this.cursorPos.cols);\n /**\n * Render and store state for future re-rendering\n */\n this.write(cursorDown(this.extraLinesUnderPrompt) + eraseLines(this.height) + output);\n this.extraLinesUnderPrompt = bottomContentHeight;\n this.height = height(output);\n }\n checkCursorPos() {\n const cursorPos = this.rl.getCursorPos();\n if (cursorPos.cols !== this.cursorPos.cols) {\n this.write(cursorTo(cursorPos.cols));\n this.cursorPos = cursorPos;\n }\n }\n done({ clearContent }) {\n this.rl.setPrompt('');\n let output = cursorDown(this.extraLinesUnderPrompt);\n output += clearContent ? eraseLines(this.height) : '\\n';\n output += cursorShow;\n this.write(output);\n this.rl.close();\n }\n}\n","// TODO: Remove this class once Node 22 becomes the minimum supported version.\nexport class PromisePolyfill extends Promise {\n // Available starting from Node 22\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers\n static withResolver() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve, reject: reject };\n }\n}\n","import * as readline from 'node:readline';\nimport { AsyncResource } from 'node:async_hooks';\nimport MuteStream from 'mute-stream';\nimport { onExit as onSignalExit } from 'signal-exit';\nimport ScreenManager from \"./screen-manager.js\";\nimport { PromisePolyfill } from \"./promise-polyfill.js\";\nimport { withHooks, effectScheduler } from \"./hook-engine.js\";\nimport { AbortPromptError, CancelPromptError, ExitPromptError } from \"./errors.js\";\n// Capture the real setImmediate at module load time so it works even when test\n// frameworks mock timers with vi.useFakeTimers() or similar.\nconst nativeSetImmediate = globalThis.setImmediate;\nfunction getCallSites() {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _prepareStackTrace = Error.prepareStackTrace;\n let result = [];\n try {\n Error.prepareStackTrace = (_, callSites) => {\n const callSitesWithoutCurrent = callSites.slice(1);\n result = callSitesWithoutCurrent;\n return callSitesWithoutCurrent;\n };\n // oxlint-disable-next-line no-unused-expressions\n new Error().stack;\n }\n catch {\n // An error will occur if the Node flag --frozen-intrinsics is used.\n // https://nodejs.org/api/cli.html#--frozen-intrinsics\n return result;\n }\n Error.prepareStackTrace = _prepareStackTrace;\n return result;\n}\nexport function createPrompt(view) {\n const callSites = getCallSites();\n const prompt = (config, context = {}) => {\n // Default `input` to stdin\n const { input = process.stdin, signal } = context;\n const cleanups = new Set();\n // Add mute capabilities to the output\n const output = new MuteStream();\n output.pipe(context.output ?? process.stdout);\n // Pre-mute the output so that readline doesn't echo stale keystrokes\n // to the terminal before the first render. ScreenManager will unmute/mute\n // the output around each render call as needed.\n output.mute();\n const rl = readline.createInterface({\n terminal: true,\n input,\n output,\n });\n const screen = new ScreenManager(rl);\n const { promise, resolve, reject } = PromisePolyfill.withResolver();\n const cancel = () => reject(new CancelPromptError());\n if (signal) {\n const abort = () => reject(new AbortPromptError({ cause: signal.reason }));\n if (signal.aborted) {\n abort();\n return Object.assign(promise, { cancel });\n }\n signal.addEventListener('abort', abort);\n cleanups.add(() => signal.removeEventListener('abort', abort));\n }\n cleanups.add(onSignalExit((code, signal) => {\n reject(new ExitPromptError(`User force closed the prompt with ${code} ${signal}`));\n }));\n // SIGINT must be explicitly handled by the prompt so the ExitPromptError can be handled.\n // Otherwise, the prompt will stop and in some scenarios never resolve.\n // Ref issue #1741\n const sigint = () => reject(new ExitPromptError(`User force closed the prompt with SIGINT`));\n rl.on('SIGINT', sigint);\n cleanups.add(() => rl.removeListener('SIGINT', sigint));\n return withHooks(rl, (cycle) => {\n // The close event triggers immediately when the user press ctrl+c. SignalExit on the other hand\n // triggers after the process is done (which happens after timeouts are done triggering.)\n // We triggers the hooks cleanup phase on rl `close` so active timeouts can be cleared.\n const hooksCleanup = AsyncResource.bind(() => effectScheduler.clearAll());\n rl.on('close', hooksCleanup);\n cleanups.add(() => rl.removeListener('close', hooksCleanup));\n const startCycle = () => {\n // Re-renders only happen when the state change; but the readline cursor could\n // change position and that also requires a re-render (and a manual one because\n // we mute the streams). We set the listener after the initial workLoop to avoid\n // a double render if render triggered by a state change sets the cursor to the\n // right position.\n const checkCursorPos = () => screen.checkCursorPos();\n rl.input.on('keypress', checkCursorPos);\n cleanups.add(() => rl.input.removeListener('keypress', checkCursorPos));\n cycle(() => {\n try {\n const nextView = view(config, (value) => {\n setImmediate(() => resolve(value));\n });\n // Typescript won't allow this, but not all users rely on typescript.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (nextView === undefined) {\n const callerFilename = callSites[1]?.getFileName();\n throw new Error(`Prompt functions must return a string.\\n at ${callerFilename}`);\n }\n const [content, bottomContent] = typeof nextView === 'string' ? [nextView] : nextView;\n screen.render(content, bottomContent);\n effectScheduler.run();\n }\n catch (error) {\n reject(error);\n }\n });\n };\n // Proper Readable streams (like process.stdin) may have OS-level buffered\n // data that arrives in the poll phase when readline resumes the stream.\n // Deferring the first render by one setImmediate tick (check phase, after\n // poll) lets that stale data flow through readline harmlessly—no keypress\n // handlers are registered yet and the output is muted, so the stale\n // keystrokes are silently discarded.\n // Old-style streams (like MuteStream) have no such buffering, so the\n // render cycle starts immediately.\n //\n // @see https://github.com/SBoudrias/Inquirer.js/issues/1303\n if ('readableFlowing' in input) {\n nativeSetImmediate(startCycle);\n }\n else {\n startCycle();\n }\n return Object.assign(promise\n .then((answer) => {\n effectScheduler.clearAll();\n return answer;\n }, (error) => {\n effectScheduler.clearAll();\n throw error;\n })\n // Wait for the promise to settle, then cleanup.\n .finally(() => {\n cleanups.forEach((cleanup) => cleanup());\n screen.done({ clearContent: Boolean(context.clearPromptOnDone) });\n output.end();\n })\n // Once cleanup is done, let the expose promise resolve/reject to the internal one.\n .then(() => promise), { cancel });\n });\n };\n return prompt;\n}\n","import { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\n/**\n * Separator object\n * Used to space/separate choices group\n */\nexport class Separator {\n separator = styleText('dim', Array.from({ length: 15 }).join(figures.line));\n type = 'separator';\n constructor(separator) {\n if (separator) {\n this.separator = separator;\n }\n }\n static isSeparator(choice) {\n return Boolean(choice &&\n typeof choice === 'object' &&\n 'type' in choice &&\n choice.type === 'separator');\n }\n}\n","import { createPrompt, useState, useKeypress, usePrefix, usePagination, useMemo, makeTheme, isUpKey, isDownKey, isSpaceKey, isNumberKey, isEnterKey, ValidationError, Separator, } from '@inquirer/core';\nimport { cursorHide } from '@inquirer/ansi';\nimport { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nconst checkboxTheme = {\n icon: {\n checked: styleText('green', figures.circleFilled),\n unchecked: figures.circle,\n cursor: figures.pointer,\n disabledChecked: styleText('green', figures.circleDouble),\n disabledUnchecked: '-',\n },\n style: {\n disabled: (text) => styleText('dim', text),\n renderSelectedChoices: (selectedChoices) => selectedChoices.map((choice) => choice.short).join(', '),\n description: (text) => styleText('cyan', text),\n keysHelpTip: (keys) => keys\n .map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)\n .join(styleText('dim', ' • ')),\n },\n i18n: { disabledError: 'This option is disabled and cannot be toggled.' },\n keybindings: [],\n};\nfunction isSelectable(item) {\n return !Separator.isSeparator(item) && !item.disabled;\n}\nfunction isNavigable(item) {\n return !Separator.isSeparator(item);\n}\nfunction isChecked(item) {\n return !Separator.isSeparator(item) && item.checked;\n}\nfunction toggle(item) {\n return isSelectable(item) ? { ...item, checked: !item.checked } : item;\n}\nfunction check(checked) {\n return function (item) {\n return isSelectable(item) ? { ...item, checked } : item;\n };\n}\nfunction normalizeChoices(choices) {\n return choices.map((choice) => {\n if (Separator.isSeparator(choice))\n return choice;\n if (typeof choice === 'string') {\n return {\n value: choice,\n name: choice,\n short: choice,\n checkedName: choice,\n disabled: false,\n checked: false,\n };\n }\n const name = choice.name ?? String(choice.value);\n const normalizedChoice = {\n value: choice.value,\n name,\n short: choice.short ?? name,\n checkedName: choice.checkedName ?? name,\n disabled: choice.disabled ?? false,\n checked: choice.checked ?? false,\n };\n if (choice.description) {\n normalizedChoice.description = choice.description;\n }\n return normalizedChoice;\n });\n}\nexport default createPrompt((config, done) => {\n const { pageSize = 7, loop = true, required, validate = () => true } = config;\n const shortcuts = { all: 'a', invert: 'i', ...config.shortcuts };\n const theme = makeTheme(checkboxTheme, config.theme);\n const { keybindings } = theme;\n const [status, setStatus] = useState('idle');\n const prefix = usePrefix({ status, theme });\n const [items, setItems] = useState(normalizeChoices(config.choices));\n const bounds = useMemo(() => {\n const first = items.findIndex(isNavigable);\n const last = items.findLastIndex(isNavigable);\n if (first === -1) {\n throw new ValidationError('[checkbox prompt] No selectable choices. All choices are disabled.');\n }\n return { first, last };\n }, [items]);\n const [active, setActive] = useState(bounds.first);\n const [errorMsg, setError] = useState();\n useKeypress(async (key) => {\n if (isEnterKey(key)) {\n const selection = items.filter(isChecked);\n const isValid = await validate([...selection]);\n if (required && !selection.length) {\n setError('At least one choice must be selected');\n }\n else if (isValid === true) {\n setStatus('done');\n done(selection.map((choice) => choice.value));\n }\n else {\n setError(isValid || 'You must select a valid value');\n }\n }\n else if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {\n if (errorMsg) {\n setError(undefined);\n }\n if (loop ||\n (isUpKey(key, keybindings) && active !== bounds.first) ||\n (isDownKey(key, keybindings) && active !== bounds.last)) {\n const offset = isUpKey(key, keybindings) ? -1 : 1;\n let next = active;\n do {\n next = (next + offset + items.length) % items.length;\n } while (!isNavigable(items[next]));\n setActive(next);\n }\n }\n else if (isSpaceKey(key)) {\n const activeItem = items[active];\n if (activeItem && !Separator.isSeparator(activeItem)) {\n if (activeItem.disabled) {\n setError(theme.i18n.disabledError);\n }\n else {\n setError(undefined);\n setItems(items.map((choice, i) => (i === active ? toggle(choice) : choice)));\n }\n }\n }\n else if (key.name === shortcuts.all) {\n const selectAll = items.some((choice) => isSelectable(choice) && !choice.checked);\n setItems(items.map(check(selectAll)));\n }\n else if (key.name === shortcuts.invert) {\n setItems(items.map(toggle));\n }\n else if (isNumberKey(key)) {\n const selectedIndex = Number(key.name) - 1;\n // Find the nth item (ignoring separators)\n let selectableIndex = -1;\n const position = items.findIndex((item) => {\n if (Separator.isSeparator(item))\n return false;\n selectableIndex++;\n return selectableIndex === selectedIndex;\n });\n const selectedItem = items[position];\n if (selectedItem && isSelectable(selectedItem)) {\n setActive(position);\n setItems(items.map((choice, i) => (i === position ? toggle(choice) : choice)));\n }\n }\n });\n const message = theme.style.message(config.message, status);\n let description;\n const page = usePagination({\n items,\n active,\n renderItem({ item, isActive }) {\n if (Separator.isSeparator(item)) {\n return ` ${item.separator}`;\n }\n const cursor = isActive ? theme.icon.cursor : ' ';\n if (item.disabled) {\n const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';\n const checkbox = item.checked\n ? theme.icon.disabledChecked\n : theme.icon.disabledUnchecked;\n return theme.style.disabled(`${cursor}${checkbox} ${item.name} ${disabledLabel}`);\n }\n if (isActive) {\n description = item.description;\n }\n const checkbox = item.checked ? theme.icon.checked : theme.icon.unchecked;\n const name = item.checked ? item.checkedName : item.name;\n const color = isActive ? theme.style.highlight : (x) => x;\n return color(`${cursor}${checkbox} ${name}`);\n },\n pageSize,\n loop,\n });\n if (status === 'done') {\n const selection = items.filter(isChecked);\n const answer = theme.style.answer(theme.style.renderSelectedChoices(selection, items));\n return [prefix, message, answer].filter(Boolean).join(' ');\n }\n const keys = [\n ['↑↓', 'navigate'],\n ['space', 'select'],\n ];\n if (shortcuts.all)\n keys.push([shortcuts.all, 'all']);\n if (shortcuts.invert)\n keys.push([shortcuts.invert, 'invert']);\n keys.push(['⏎', 'submit']);\n const helpLine = theme.style.keysHelpTip(keys);\n const lines = [\n [prefix, message].filter(Boolean).join(' '),\n page,\n ' ',\n description ? theme.style.description(description) : '',\n errorMsg ? theme.style.error(errorMsg) : '',\n helpLine,\n ]\n .filter(Boolean)\n .join('\\n')\n .trimEnd();\n return `${lines}${cursorHide}`;\n});\nexport { Separator } from '@inquirer/core';\n","import { createPrompt, useState, useKeypress, isEnterKey, isTabKey, usePrefix, makeTheme, } from '@inquirer/core';\nfunction getBooleanValue(value, defaultValue) {\n let answer = defaultValue !== false;\n if (/^(y|yes)/i.test(value))\n answer = true;\n else if (/^(n|no)/i.test(value))\n answer = false;\n return answer;\n}\nfunction boolToString(value) {\n return value ? 'Yes' : 'No';\n}\nexport default createPrompt((config, done) => {\n const { transformer = boolToString } = config;\n const [status, setStatus] = useState('idle');\n const [value, setValue] = useState('');\n const theme = makeTheme(config.theme);\n const prefix = usePrefix({ status, theme });\n useKeypress((key, rl) => {\n if (status !== 'idle')\n return;\n if (isEnterKey(key)) {\n const answer = getBooleanValue(value, config.default);\n setValue(transformer(answer));\n setStatus('done');\n done(answer);\n }\n else if (isTabKey(key)) {\n const answer = boolToString(!getBooleanValue(value, config.default));\n rl.clearLine(0); // Remove the tab character.\n rl.write(answer);\n setValue(answer);\n }\n else {\n setValue(rl.line);\n }\n });\n let formattedValue = value;\n let defaultValue = '';\n if (status === 'done') {\n formattedValue = theme.style.answer(value);\n }\n else {\n defaultValue = ` ${theme.style.defaultAnswer(config.default === false ? 'y/N' : 'Y/n')}`;\n }\n const message = theme.style.message(config.message, status);\n return `${prefix} ${message}${defaultValue} ${formattedValue}`;\n});\n","import { createPrompt, useState, useKeypress, usePrefix, usePagination, useRef, useMemo, useEffect, isBackspaceKey, isEnterKey, isUpKey, isDownKey, isNumberKey, Separator, ValidationError, makeTheme, } from '@inquirer/core';\nimport { cursorHide } from '@inquirer/ansi';\nimport { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nconst selectTheme = {\n icon: { cursor: figures.pointer },\n style: {\n disabled: (text) => styleText('dim', text),\n description: (text) => styleText('cyan', text),\n keysHelpTip: (keys) => keys\n .map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)\n .join(styleText('dim', ' • ')),\n },\n i18n: { disabledError: 'This option is disabled and cannot be selected.' },\n indexMode: 'hidden',\n keybindings: [],\n};\nfunction isSelectable(item) {\n return !Separator.isSeparator(item) && !item.disabled;\n}\nfunction isNavigable(item) {\n return !Separator.isSeparator(item);\n}\nfunction normalizeChoices(choices) {\n return choices.map((choice) => {\n if (Separator.isSeparator(choice))\n return choice;\n if (typeof choice !== 'object' || choice === null || !('value' in choice)) {\n // It's a raw value (string, number, etc.)\n const name = String(choice);\n return {\n value: choice,\n name,\n short: name,\n disabled: false,\n };\n }\n const name = choice.name ?? String(choice.value);\n const normalizedChoice = {\n value: choice.value,\n name,\n short: choice.short ?? name,\n disabled: choice.disabled ?? false,\n };\n if (choice.description) {\n normalizedChoice.description = choice.description;\n }\n return normalizedChoice;\n });\n}\nexport default createPrompt((config, done) => {\n const { loop = true, pageSize = 7 } = config;\n const theme = makeTheme(selectTheme, config.theme);\n const { keybindings } = theme;\n const [status, setStatus] = useState('idle');\n const prefix = usePrefix({ status, theme });\n const searchTimeoutRef = useRef();\n // Vim keybindings (j/k) conflict with typing those letters in search,\n // so search must be disabled when vim bindings are enabled\n const searchEnabled = !keybindings.includes('vim');\n const items = useMemo(() => normalizeChoices(config.choices), [config.choices]);\n const bounds = useMemo(() => {\n const first = items.findIndex(isNavigable);\n const last = items.findLastIndex(isNavigable);\n if (first === -1) {\n throw new ValidationError('[select prompt] No selectable choices. All choices are disabled.');\n }\n return { first, last };\n }, [items]);\n const defaultItemIndex = useMemo(() => {\n if (!('default' in config))\n return -1;\n return items.findIndex((item) => isSelectable(item) && item.value === config.default);\n }, [config.default, items]);\n const [active, setActive] = useState(defaultItemIndex === -1 ? bounds.first : defaultItemIndex);\n // Safe to assume the cursor position always point to a Choice.\n const selectedChoice = items[active];\n const [errorMsg, setError] = useState();\n useKeypress((key, rl) => {\n clearTimeout(searchTimeoutRef.current);\n if (errorMsg) {\n setError(undefined);\n }\n if (isEnterKey(key)) {\n if (selectedChoice.disabled) {\n setError(theme.i18n.disabledError);\n }\n else {\n setStatus('done');\n done(selectedChoice.value);\n }\n }\n else if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {\n rl.clearLine(0);\n if (loop ||\n (isUpKey(key, keybindings) && active !== bounds.first) ||\n (isDownKey(key, keybindings) && active !== bounds.last)) {\n const offset = isUpKey(key, keybindings) ? -1 : 1;\n let next = active;\n do {\n next = (next + offset + items.length) % items.length;\n } while (!isNavigable(items[next]));\n setActive(next);\n }\n }\n else if (isNumberKey(key) && !Number.isNaN(Number(rl.line))) {\n const selectedIndex = Number(rl.line) - 1;\n // Find the nth item (ignoring separators)\n let selectableIndex = -1;\n const position = items.findIndex((item) => {\n if (Separator.isSeparator(item))\n return false;\n selectableIndex++;\n return selectableIndex === selectedIndex;\n });\n const item = items[position];\n if (item != null && isSelectable(item)) {\n setActive(position);\n }\n searchTimeoutRef.current = setTimeout(() => {\n rl.clearLine(0);\n }, 700);\n }\n else if (isBackspaceKey(key)) {\n rl.clearLine(0);\n }\n else if (searchEnabled) {\n const searchTerm = rl.line.toLowerCase();\n const matchIndex = items.findIndex((item) => {\n if (Separator.isSeparator(item) || !isSelectable(item))\n return false;\n return item.name.toLowerCase().startsWith(searchTerm);\n });\n if (matchIndex !== -1) {\n setActive(matchIndex);\n }\n searchTimeoutRef.current = setTimeout(() => {\n rl.clearLine(0);\n }, 700);\n }\n });\n useEffect(() => () => {\n clearTimeout(searchTimeoutRef.current);\n }, []);\n const message = theme.style.message(config.message, status);\n const helpLine = theme.style.keysHelpTip([\n ['↑↓', 'navigate'],\n ['⏎', 'select'],\n ]);\n let separatorCount = 0;\n const page = usePagination({\n items,\n active,\n renderItem({ item, isActive, index }) {\n if (Separator.isSeparator(item)) {\n separatorCount++;\n return ` ${item.separator}`;\n }\n const cursor = isActive ? theme.icon.cursor : ' ';\n const indexLabel = theme.indexMode === 'number' ? `${index + 1 - separatorCount}. ` : '';\n if (item.disabled) {\n const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';\n const disabledCursor = isActive ? theme.icon.cursor : '-';\n return theme.style.disabled(`${disabledCursor} ${indexLabel}${item.name} ${disabledLabel}`);\n }\n const color = isActive ? theme.style.highlight : (x) => x;\n return color(`${cursor} ${indexLabel}${item.name}`);\n },\n pageSize,\n loop,\n });\n if (status === 'done') {\n return [prefix, message, theme.style.answer(selectedChoice.short)]\n .filter(Boolean)\n .join(' ');\n }\n const { description } = selectedChoice;\n const lines = [\n [prefix, message].filter(Boolean).join(' '),\n page,\n ' ',\n description ? theme.style.description(description) : '',\n errorMsg ? theme.style.error(errorMsg) : '',\n helpLine,\n ]\n .filter(Boolean)\n .join('\\n')\n .trimEnd();\n return `${lines}${cursorHide}`;\n});\nexport { Separator } from '@inquirer/core';\n","\"use strict\";\n/**\n * @maxsim/adapters — Shared base utilities extracted from bin/install.js\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.expandTilde = expandTilde;\nexports.extractFrontmatterAndBody = extractFrontmatterAndBody;\nexports.processAttribution = processAttribution;\nexports.buildHookCommand = buildHookCommand;\nexports.readSettings = readSettings;\nexports.writeSettings = writeSettings;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst fs = __importStar(require(\"node:fs\"));\n/**\n * Expand ~ to home directory (shell doesn't expand in env vars passed to node)\n */\nfunction expandTilde(filePath) {\n if (filePath && filePath.startsWith('~/')) {\n return path.join(os.homedir(), filePath.slice(2));\n }\n return filePath;\n}\n/**\n * Extract YAML frontmatter and body from markdown content.\n * Returns null frontmatter if content doesn't start with ---.\n */\nfunction extractFrontmatterAndBody(content) {\n if (!content.startsWith('---')) {\n return { frontmatter: null, body: content };\n }\n const endIndex = content.indexOf('---', 3);\n if (endIndex === -1) {\n return { frontmatter: null, body: content };\n }\n return {\n frontmatter: content.substring(3, endIndex).trim(),\n body: content.substring(endIndex + 3),\n };\n}\n/**\n * Process Co-Authored-By lines based on attribution setting.\n * @param content - File content to process\n * @param attribution - null=remove, undefined=keep default, string=replace\n */\nfunction processAttribution(content, attribution) {\n if (attribution === null) {\n return content.replace(/(\\r?\\n){2}Co-Authored-By:.*$/gim, '');\n }\n if (attribution === undefined) {\n return content;\n }\n const safeAttribution = attribution.replace(/\\$/g, '$$$$');\n return content.replace(/Co-Authored-By:.*$/gim, `Co-Authored-By: ${safeAttribution}`);\n}\n/**\n * Build a hook command path using forward slashes for cross-platform compatibility.\n */\nfunction buildHookCommand(configDir, hookName) {\n const hooksPath = configDir.replace(/\\\\/g, '/') + '/hooks/' + hookName;\n return `node \"${hooksPath}\"`;\n}\n/**\n * Read and parse settings.json, returning empty object if it doesn't exist.\n */\nfunction readSettings(settingsPath) {\n if (fs.existsSync(settingsPath)) {\n try {\n return JSON.parse(fs.readFileSync(settingsPath, 'utf8'));\n }\n catch {\n return {};\n }\n }\n return {};\n}\n/**\n * Write settings.json with proper formatting.\n */\nfunction writeSettings(settingsPath, settings) {\n fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\\n');\n}\n//# sourceMappingURL=base.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Claude Code adapter\n *\n * Ports the Claude-specific logic from bin/install.js:\n * - getGlobalDir('claude', ...) (lines 135-142)\n * - getDirName('claude') (line 49)\n * - getConfigDirFromHome('claude', isGlobal) (lines 58-72)\n * - copyWithPathReplacement for Claude (lines 839-892)\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.claudeAdapter = void 0;\nexports.installClaude = installClaude;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst base_js_1 = require(\"./base.js\");\n/**\n * Get the global config directory for Claude Code.\n * Priority: explicitDir > CLAUDE_CONFIG_DIR env > ~/.claude\n */\nfunction getGlobalDir(explicitDir) {\n if (explicitDir) {\n return (0, base_js_1.expandTilde)(explicitDir);\n }\n if (process.env.CLAUDE_CONFIG_DIR) {\n return (0, base_js_1.expandTilde)(process.env.CLAUDE_CONFIG_DIR);\n }\n return path.join(os.homedir(), '.claude');\n}\n/**\n * Get the config directory path relative to home for hook templating.\n * Used for path.join(homeDir, '<configDir>', ...) replacement in hooks.\n */\nfunction getConfigDirFromHome(isGlobal) {\n // Both global and local use '.claude' for Claude Code\n return \"'.claude'\";\n}\n/**\n * Transform markdown content for Claude Code installation.\n * For Claude, this is path replacement only — no frontmatter conversion needed.\n * Replaces ~/.claude/ and ./.claude/ references with the actual install path prefix.\n */\nfunction transformContent(content, pathPrefix) {\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n let result = content.replace(globalClaudeRegex, pathPrefix);\n result = result.replace(localClaudeRegex, `./.claude/`);\n return result;\n}\n/**\n * Claude Code adapter configuration.\n * Claude uses nested command structure (commands/maxsim/*.md).\n */\nexports.claudeAdapter = {\n runtime: 'claude',\n dirName: '.claude',\n getGlobalDir,\n getConfigDirFromHome,\n transformContent,\n commandStructure: 'nested',\n};\n/**\n * Install Claude Code adapter files.\n * Stub — actual install orchestration will be implemented in Phase 5.\n */\nfunction installClaude() {\n // Phase 5 will implement the full install orchestration.\n // The adapter exposes this function per CONTEXT.md decision.\n throw new Error('installClaude() not yet implemented — see Phase 5');\n}\n//# sourceMappingURL=claude.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Tool name mappings per runtime\n *\n * Ported from bin/install.js lines ~327-390\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertToolName = convertToolName;\nexports.convertGeminiToolName = convertGeminiToolName;\n/** Tool name mapping from Claude Code to OpenCode */\nconst claudeToOpencodeTools = {\n AskUserQuestion: 'question',\n SlashCommand: 'skill',\n TodoWrite: 'todowrite',\n WebFetch: 'webfetch',\n WebSearch: 'websearch',\n};\n/** Tool name mapping from Claude Code to Gemini CLI */\nconst claudeToGeminiTools = {\n Read: 'read_file',\n Write: 'write_file',\n Edit: 'replace',\n Bash: 'run_shell_command',\n Glob: 'glob',\n Grep: 'search_file_content',\n WebSearch: 'google_web_search',\n WebFetch: 'web_fetch',\n TodoWrite: 'write_todos',\n AskUserQuestion: 'ask_user',\n};\n/**\n * Convert a Claude Code tool name to OpenCode format.\n * - Applies special mappings (AskUserQuestion -> question, etc.)\n * - Converts to lowercase (except MCP tools which keep their format)\n */\nfunction convertToolName(claudeTool) {\n if (claudeToOpencodeTools[claudeTool]) {\n return claudeToOpencodeTools[claudeTool];\n }\n if (claudeTool.startsWith('mcp__')) {\n return claudeTool;\n }\n return claudeTool.toLowerCase();\n}\n/**\n * Convert a Claude Code tool name to Gemini CLI format.\n * - Applies Claude->Gemini mapping (Read->read_file, Bash->run_shell_command, etc.)\n * - Filters out MCP tools (mcp__*) -- auto-discovered at runtime in Gemini\n * - Filters out Task -- agents are auto-registered as tools in Gemini\n * @returns Gemini tool name, or null if tool should be excluded\n */\nfunction convertGeminiToolName(claudeTool) {\n if (claudeTool.startsWith('mcp__')) {\n return null;\n }\n if (claudeTool === 'Task') {\n return null;\n }\n if (claudeToGeminiTools[claudeTool]) {\n return claudeToGeminiTools[claudeTool];\n }\n return claudeTool.toLowerCase();\n}\n//# sourceMappingURL=tool-maps.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Content transformation utilities\n *\n * Ported from bin/install.js lines ~423-564\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertSlashCommandsToCodexSkillMentions = convertSlashCommandsToCodexSkillMentions;\nexports.convertClaudeToCodexMarkdown = convertClaudeToCodexMarkdown;\nexports.stripSubTags = stripSubTags;\nexports.convertClaudeToGeminiAgent = convertClaudeToGeminiAgent;\nexports.replacePathReferences = replacePathReferences;\nconst tool_maps_js_1 = require(\"./tool-maps.js\");\n/**\n * Convert /maxsim:command-name to $maxsim-command-name for Codex skill mentions.\n * Ported from install.js line ~423\n */\nfunction convertSlashCommandsToCodexSkillMentions(content) {\n let converted = content.replace(/\\/maxsim:([a-z0-9-]+)/gi, (_, commandName) => {\n return `$maxsim-${String(commandName).toLowerCase()}`;\n });\n converted = converted.replace(/\\/maxsim-help\\b/g, '$maxsim-help');\n return converted;\n}\n/**\n * Convert Claude markdown to Codex markdown format.\n * Replaces slash commands and $ARGUMENTS placeholder.\n * Ported from install.js line ~431\n */\nfunction convertClaudeToCodexMarkdown(content) {\n let converted = convertSlashCommandsToCodexSkillMentions(content);\n converted = converted.replace(/\\$ARGUMENTS\\b/g, '{{MAXSIM_ARGS}}');\n return converted;\n}\n/**\n * Strip HTML <sub> tags for Gemini CLI output.\n * Terminals don't support subscript -- converts <sub>text</sub> to italic *(text)*.\n * Ported from install.js line ~474\n */\nfunction stripSubTags(content) {\n return content.replace(/<sub>(.*?)<\\/sub>/g, '*($1)*');\n}\n/**\n * Convert Claude Code agent frontmatter to Gemini CLI format.\n * - tools: must be a YAML array (not comma-separated string)\n * - tool names: must use Gemini built-in names (read_file, not Read)\n * - color: must be removed (causes validation error)\n * - mcp__* tools: must be excluded (auto-discovered at runtime)\n * - ${VAR} patterns: escaped to $VAR for Gemini template compatibility\n *\n * Ported from install.js line ~487\n */\nfunction convertClaudeToGeminiAgent(content) {\n if (!content.startsWith('---'))\n return content;\n const endIndex = content.indexOf('---', 3);\n if (endIndex === -1)\n return content;\n const frontmatter = content.substring(3, endIndex).trim();\n const body = content.substring(endIndex + 3);\n const lines = frontmatter.split('\\n');\n const newLines = [];\n let inAllowedTools = false;\n const tools = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith('allowed-tools:')) {\n inAllowedTools = true;\n continue;\n }\n if (trimmed.startsWith('tools:')) {\n const toolsValue = trimmed.substring(6).trim();\n if (toolsValue) {\n const parsed = toolsValue.split(',').map((t) => t.trim()).filter((t) => t);\n for (const t of parsed) {\n const mapped = (0, tool_maps_js_1.convertGeminiToolName)(t);\n if (mapped)\n tools.push(mapped);\n }\n }\n else {\n inAllowedTools = true;\n }\n continue;\n }\n if (trimmed.startsWith('color:'))\n continue;\n if (inAllowedTools) {\n if (trimmed.startsWith('- ')) {\n const mapped = (0, tool_maps_js_1.convertGeminiToolName)(trimmed.substring(2).trim());\n if (mapped)\n tools.push(mapped);\n continue;\n }\n else if (trimmed && !trimmed.startsWith('-')) {\n inAllowedTools = false;\n }\n }\n if (!inAllowedTools) {\n newLines.push(line);\n }\n }\n if (tools.length > 0) {\n newLines.push('tools:');\n for (const tool of tools) {\n newLines.push(` - ${tool}`);\n }\n }\n const newFrontmatter = newLines.join('\\n').trim();\n // Escape ${VAR} patterns in agent body for Gemini CLI compatibility.\n const escapedBody = body.replace(/\\$\\{(\\w+)\\}/g, '$$$1');\n return `---\\n${newFrontmatter}\\n---${stripSubTags(escapedBody)}`;\n}\n/**\n * Replace path references in markdown content for a target runtime.\n * Replaces ~/.claude/ with pathPrefix and ./.claude/ with ./dirName/.\n */\nfunction replacePathReferences(content, pathPrefix, dirName) {\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n let result = content.replace(globalClaudeRegex, pathPrefix);\n result = result.replace(localClaudeRegex, `./${dirName}/`);\n return result;\n}\n//# sourceMappingURL=content.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Frontmatter conversion functions for opencode, gemini, codex\n *\n * Ported from bin/install.js lines ~308-711\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.colorNameToHex = void 0;\nexports.toSingleLine = toSingleLine;\nexports.yamlQuote = yamlQuote;\nexports.extractFrontmatterField = extractFrontmatterField;\nexports.convertClaudeToOpencodeFrontmatter = convertClaudeToOpencodeFrontmatter;\nexports.convertClaudeToGeminiToml = convertClaudeToGeminiToml;\nexports.convertClaudeCommandToCodexSkill = convertClaudeCommandToCodexSkill;\nexports.getCodexSkillAdapterHeader = getCodexSkillAdapterHeader;\nconst base_js_1 = require(\"../base.js\");\nconst tool_maps_js_1 = require(\"./tool-maps.js\");\nconst content_js_1 = require(\"./content.js\");\n/** Color name to hex mapping for opencode compatibility */\nexports.colorNameToHex = {\n cyan: '#00FFFF',\n red: '#FF0000',\n green: '#00FF00',\n blue: '#0000FF',\n yellow: '#FFFF00',\n magenta: '#FF00FF',\n orange: '#FFA500',\n purple: '#800080',\n pink: '#FFC0CB',\n white: '#FFFFFF',\n black: '#000000',\n gray: '#808080',\n grey: '#808080',\n};\n/** Collapse whitespace to single line */\nfunction toSingleLine(value) {\n return value.replace(/\\s+/g, ' ').trim();\n}\n/** Quote a value for YAML using JSON.stringify */\nfunction yamlQuote(value) {\n return JSON.stringify(value);\n}\n/** Extract a single-line field value from YAML frontmatter text */\nfunction extractFrontmatterField(frontmatter, fieldName) {\n const regex = new RegExp(`^${fieldName}:\\\\s*(.+)$`, 'm');\n const match = frontmatter.match(regex);\n if (!match)\n return null;\n return match[1].trim().replace(/^['\"]|['\"]$/g, '');\n}\n/**\n * Convert Claude Code frontmatter to OpenCode format.\n * - Converts 'allowed-tools:' array to 'tools:' object with tool: true entries\n * - Converts color names to hex\n * - Removes name: field (opencode uses filename)\n * - Replaces tool name references in body content\n * - Replaces /maxsim: with /maxsim- (flat command structure)\n * - Replaces ~/.claude with ~/.config/opencode\n * - Replaces subagent_type=\"general-purpose\" with \"general\"\n *\n * Ported from install.js line ~566\n */\nfunction convertClaudeToOpencodeFrontmatter(content) {\n // Replace tool name references in content (applies to all files)\n let convertedContent = content;\n convertedContent = convertedContent.replace(/\\bAskUserQuestion\\b/g, 'question');\n convertedContent = convertedContent.replace(/\\bSlashCommand\\b/g, 'skill');\n convertedContent = convertedContent.replace(/\\bTodoWrite\\b/g, 'todowrite');\n convertedContent = convertedContent.replace(/\\/maxsim:/g, '/maxsim-');\n convertedContent = convertedContent.replace(/~\\/\\.claude\\b/g, '~/.config/opencode');\n convertedContent = convertedContent.replace(/subagent_type=\"general-purpose\"/g, 'subagent_type=\"general\"');\n if (!convertedContent.startsWith('---')) {\n return convertedContent;\n }\n const endIndex = convertedContent.indexOf('---', 3);\n if (endIndex === -1) {\n return convertedContent;\n }\n const frontmatter = convertedContent.substring(3, endIndex).trim();\n const body = convertedContent.substring(endIndex + 3);\n const lines = frontmatter.split('\\n');\n const newLines = [];\n let inAllowedTools = false;\n const allowedTools = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith('allowed-tools:')) {\n inAllowedTools = true;\n continue;\n }\n if (trimmed.startsWith('tools:')) {\n const toolsValue = trimmed.substring(6).trim();\n if (toolsValue) {\n const tools = toolsValue.split(',').map((t) => t.trim()).filter((t) => t);\n allowedTools.push(...tools);\n }\n continue;\n }\n if (trimmed.startsWith('name:')) {\n continue;\n }\n if (trimmed.startsWith('color:')) {\n const colorValue = trimmed.substring(6).trim().toLowerCase();\n const hexColor = exports.colorNameToHex[colorValue];\n if (hexColor) {\n newLines.push(`color: \"${hexColor}\"`);\n }\n else if (colorValue.startsWith('#')) {\n if (/^#[0-9a-f]{3}$|^#[0-9a-f]{6}$/i.test(colorValue)) {\n newLines.push(line);\n }\n }\n continue;\n }\n if (inAllowedTools) {\n if (trimmed.startsWith('- ')) {\n allowedTools.push(trimmed.substring(2).trim());\n continue;\n }\n else if (trimmed && !trimmed.startsWith('-')) {\n inAllowedTools = false;\n }\n }\n if (!inAllowedTools) {\n newLines.push(line);\n }\n }\n if (allowedTools.length > 0) {\n newLines.push('tools:');\n for (const tool of allowedTools) {\n newLines.push(` ${(0, tool_maps_js_1.convertToolName)(tool)}: true`);\n }\n }\n const newFrontmatter = newLines.join('\\n').trim();\n return `---\\n${newFrontmatter}\\n---${body}`;\n}\n/**\n * Convert Claude Code markdown command to Gemini TOML format.\n * Ported from install.js line ~677\n */\nfunction convertClaudeToGeminiToml(content) {\n if (!content.startsWith('---')) {\n return `prompt = ${JSON.stringify(content)}\\n`;\n }\n const endIndex = content.indexOf('---', 3);\n if (endIndex === -1) {\n return `prompt = ${JSON.stringify(content)}\\n`;\n }\n const frontmatter = content.substring(3, endIndex).trim();\n const body = content.substring(endIndex + 3).trim();\n let description = '';\n const lines = frontmatter.split('\\n');\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith('description:')) {\n description = trimmed.substring(12).trim();\n break;\n }\n }\n let toml = '';\n if (description) {\n toml += `description = ${JSON.stringify(description)}\\n`;\n }\n toml += `prompt = ${JSON.stringify(body)}\\n`;\n return toml;\n}\n/**\n * Convert Claude command to Codex skill format with adapter header.\n * Ported from install.js line ~452\n */\nfunction convertClaudeCommandToCodexSkill(content, skillName) {\n const converted = (0, content_js_1.convertClaudeToCodexMarkdown)(content);\n const { frontmatter, body } = (0, base_js_1.extractFrontmatterAndBody)(converted);\n let description = `Run MAXSIM workflow ${skillName}.`;\n if (frontmatter) {\n const maybeDescription = extractFrontmatterField(frontmatter, 'description');\n if (maybeDescription) {\n description = maybeDescription;\n }\n }\n description = toSingleLine(description);\n const shortDescription = description.length > 180 ? `${description.slice(0, 177)}...` : description;\n const adapter = getCodexSkillAdapterHeader(skillName);\n return `---\\nname: ${yamlQuote(skillName)}\\ndescription: ${yamlQuote(description)}\\nmetadata:\\n short-description: ${yamlQuote(shortDescription)}\\n---\\n\\n${adapter}\\n\\n${body.trimStart()}`;\n}\n/**\n * Generate the Codex skill adapter header block.\n * Ported from install.js line ~437\n */\nfunction getCodexSkillAdapterHeader(skillName) {\n const invocation = `$${skillName}`;\n return `<codex_skill_adapter>\nCodex skills-first mode:\n- This skill is invoked by mentioning \\`${invocation}\\`.\n- Treat all user text after \\`${invocation}\\` as \\`{{MAXSIM_ARGS}}\\`.\n- If no arguments are present, treat \\`{{MAXSIM_ARGS}}\\` as empty.\n\nLegacy orchestration compatibility:\n- Any \\`Task(...)\\` pattern in referenced workflow docs is legacy syntax.\n- Implement equivalent behavior with Codex collaboration tools: \\`spawn_agent\\`, \\`wait\\`, \\`send_input\\`, and \\`close_agent\\`.\n- Treat legacy \\`subagent_type\\` names as role hints in the spawned message.\n</codex_skill_adapter>`;\n}\n//# sourceMappingURL=frontmatter.js.map","\"use strict\";\n/**\n * @maxsim/adapters — OpenCode adapter\n *\n * Ports the OpenCode-specific logic from bin/install.js:\n * - getOpencodeGlobalDir() (lines 79-97)\n * - getGlobalDir('opencode', ...) (lines 104-111)\n * - getDirName('opencode') (line 46)\n * - getConfigDirFromHome('opencode', isGlobal) (lines 58-68)\n * - convertClaudeToOpencodeFrontmatter + path replacement\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.opencodeAdapter = void 0;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst base_js_1 = require(\"./base.js\");\nconst frontmatter_js_1 = require(\"./transforms/frontmatter.js\");\nconst content_js_1 = require(\"./transforms/content.js\");\n/**\n * Get the global config directory for OpenCode.\n * OpenCode follows XDG Base Directory spec and uses ~/.config/opencode/.\n * Priority: OPENCODE_CONFIG_DIR > dirname(OPENCODE_CONFIG) > XDG_CONFIG_HOME/opencode > ~/.config/opencode\n */\nfunction getOpencodeGlobalDir() {\n if (process.env.OPENCODE_CONFIG_DIR) {\n return (0, base_js_1.expandTilde)(process.env.OPENCODE_CONFIG_DIR);\n }\n if (process.env.OPENCODE_CONFIG) {\n return path.dirname((0, base_js_1.expandTilde)(process.env.OPENCODE_CONFIG));\n }\n if (process.env.XDG_CONFIG_HOME) {\n return path.join((0, base_js_1.expandTilde)(process.env.XDG_CONFIG_HOME), 'opencode');\n }\n return path.join(os.homedir(), '.config', 'opencode');\n}\n/**\n * Get the global config directory for OpenCode.\n * Priority: explicitDir > env vars (via getOpencodeGlobalDir)\n */\nfunction getGlobalDir(explicitDir) {\n if (explicitDir) {\n return (0, base_js_1.expandTilde)(explicitDir);\n }\n return getOpencodeGlobalDir();\n}\n/**\n * Get the config directory path relative to home for hook templating.\n */\nfunction getConfigDirFromHome(isGlobal) {\n if (!isGlobal) {\n return \"'.opencode'\";\n }\n return \"'.config', 'opencode'\";\n}\n/**\n * Transform markdown content for OpenCode installation.\n * Applies frontmatter conversion and path replacement.\n */\nfunction transformContent(content, pathPrefix) {\n let result = (0, content_js_1.replacePathReferences)(content, pathPrefix, '.opencode');\n // Also replace ~/.opencode/ references\n result = result.replace(/~\\/\\.opencode\\//g, pathPrefix);\n result = (0, frontmatter_js_1.convertClaudeToOpencodeFrontmatter)(result);\n return result;\n}\n/**\n * OpenCode adapter configuration.\n * OpenCode uses flat command structure (command/maxsim-*.md).\n */\nexports.opencodeAdapter = {\n runtime: 'opencode',\n dirName: '.opencode',\n getGlobalDir,\n getConfigDirFromHome,\n transformContent,\n commandStructure: 'flat',\n};\n//# sourceMappingURL=opencode.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Gemini adapter\n *\n * Ports the Gemini-specific logic from bin/install.js:\n * - getGlobalDir('gemini', ...) (lines 113-122)\n * - getDirName('gemini') (line 47)\n * - getConfigDirFromHome('gemini', isGlobal) (line 69)\n * - convertClaudeToGeminiToml + convertClaudeToGeminiAgent + stripSubTags\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stripSubTags = exports.convertClaudeToGeminiAgent = exports.convertClaudeToGeminiToml = exports.geminiAdapter = void 0;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst base_js_1 = require(\"./base.js\");\nconst frontmatter_js_1 = require(\"./transforms/frontmatter.js\");\nObject.defineProperty(exports, \"convertClaudeToGeminiToml\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeToGeminiToml; } });\nconst content_js_1 = require(\"./transforms/content.js\");\nObject.defineProperty(exports, \"convertClaudeToGeminiAgent\", { enumerable: true, get: function () { return content_js_1.convertClaudeToGeminiAgent; } });\nObject.defineProperty(exports, \"stripSubTags\", { enumerable: true, get: function () { return content_js_1.stripSubTags; } });\n/**\n * Get the global config directory for Gemini.\n * Priority: explicitDir > GEMINI_CONFIG_DIR env > ~/.gemini\n */\nfunction getGlobalDir(explicitDir) {\n if (explicitDir) {\n return (0, base_js_1.expandTilde)(explicitDir);\n }\n if (process.env.GEMINI_CONFIG_DIR) {\n return (0, base_js_1.expandTilde)(process.env.GEMINI_CONFIG_DIR);\n }\n return path.join(os.homedir(), '.gemini');\n}\n/**\n * Get the config directory path relative to home for hook templating.\n */\nfunction getConfigDirFromHome(_isGlobal) {\n return \"'.gemini'\";\n}\n/**\n * Transform markdown content for Gemini installation.\n * Applies TOML conversion for commands, agent conversion for agents,\n * stripSubTags, and path replacement.\n */\nfunction transformContent(content, pathPrefix) {\n let result = (0, content_js_1.replacePathReferences)(content, pathPrefix, '.gemini');\n result = (0, content_js_1.stripSubTags)(result);\n result = (0, frontmatter_js_1.convertClaudeToGeminiToml)(result);\n return result;\n}\n/**\n * Gemini adapter configuration.\n * Gemini uses nested command structure (commands/maxsim/*.toml).\n */\nexports.geminiAdapter = {\n runtime: 'gemini',\n dirName: '.gemini',\n getGlobalDir,\n getConfigDirFromHome,\n transformContent,\n commandStructure: 'nested',\n};\n//# sourceMappingURL=gemini.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Codex adapter\n *\n * Ports the Codex-specific logic from bin/install.js:\n * - getGlobalDir('codex', ...) (lines 124-133)\n * - getDirName('codex') (line 48)\n * - getConfigDirFromHome('codex', isGlobal) (line 70)\n * - convertClaudeCommandToCodexSkill + convertClaudeToCodexMarkdown\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertClaudeToCodexMarkdown = exports.convertClaudeCommandToCodexSkill = exports.codexAdapter = void 0;\nconst path = __importStar(require(\"node:path\"));\nconst os = __importStar(require(\"node:os\"));\nconst base_js_1 = require(\"./base.js\");\nconst frontmatter_js_1 = require(\"./transforms/frontmatter.js\");\nObject.defineProperty(exports, \"convertClaudeCommandToCodexSkill\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeCommandToCodexSkill; } });\nconst content_js_1 = require(\"./transforms/content.js\");\nObject.defineProperty(exports, \"convertClaudeToCodexMarkdown\", { enumerable: true, get: function () { return content_js_1.convertClaudeToCodexMarkdown; } });\n/**\n * Get the global config directory for Codex.\n * Priority: explicitDir > CODEX_HOME env > ~/.codex\n */\nfunction getGlobalDir(explicitDir) {\n if (explicitDir) {\n return (0, base_js_1.expandTilde)(explicitDir);\n }\n if (process.env.CODEX_HOME) {\n return (0, base_js_1.expandTilde)(process.env.CODEX_HOME);\n }\n return path.join(os.homedir(), '.codex');\n}\n/**\n * Get the config directory path relative to home for hook templating.\n */\nfunction getConfigDirFromHome(_isGlobal) {\n return \"'.codex'\";\n}\n/**\n * Transform markdown content for Codex installation.\n * Applies Codex markdown conversion and path replacement.\n */\nfunction transformContent(content, pathPrefix) {\n let result = (0, content_js_1.replacePathReferences)(content, pathPrefix, '.codex');\n result = result.replace(/~\\/\\.codex\\//g, pathPrefix);\n result = (0, frontmatter_js_1.convertClaudeCommandToCodexSkill)(result);\n return result;\n}\n/**\n * Codex adapter configuration.\n * Codex uses skill-based command structure (skills/maxsim-star/SKILL.md).\n */\nexports.codexAdapter = {\n runtime: 'codex',\n dirName: '.codex',\n getGlobalDir,\n getConfigDirFromHome,\n transformContent,\n commandStructure: 'skills',\n};\n//# sourceMappingURL=codex.js.map","\"use strict\";\n/**\n * @maxsim/adapters — Runtime adapter registry\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.replacePathReferences = exports.convertClaudeToGeminiAgent = exports.stripSubTags = exports.convertClaudeToCodexMarkdown = exports.convertSlashCommandsToCodexSkillMentions = exports.getCodexSkillAdapterHeader = exports.convertClaudeCommandToCodexSkill = exports.convertClaudeToGeminiToml = exports.convertClaudeToOpencodeFrontmatter = exports.extractFrontmatterField = exports.yamlQuote = exports.toSingleLine = exports.colorNameToHex = exports.convertGeminiToolName = exports.convertToolName = exports.writeSettings = exports.readSettings = exports.buildHookCommand = exports.processAttribution = exports.extractFrontmatterAndBody = exports.expandTilde = exports.codexAdapter = exports.geminiAdapter = exports.opencodeAdapter = exports.installClaude = exports.claudeAdapter = void 0;\nexports.getAllAdapters = getAllAdapters;\nconst claude_js_1 = require(\"./claude.js\");\nconst opencode_js_1 = require(\"./opencode.js\");\nconst gemini_js_1 = require(\"./gemini.js\");\nconst codex_js_1 = require(\"./codex.js\");\n// Re-export adapters\nvar claude_js_2 = require(\"./claude.js\");\nObject.defineProperty(exports, \"claudeAdapter\", { enumerable: true, get: function () { return claude_js_2.claudeAdapter; } });\nvar claude_js_3 = require(\"./claude.js\");\nObject.defineProperty(exports, \"installClaude\", { enumerable: true, get: function () { return claude_js_3.installClaude; } });\nvar opencode_js_2 = require(\"./opencode.js\");\nObject.defineProperty(exports, \"opencodeAdapter\", { enumerable: true, get: function () { return opencode_js_2.opencodeAdapter; } });\nvar gemini_js_2 = require(\"./gemini.js\");\nObject.defineProperty(exports, \"geminiAdapter\", { enumerable: true, get: function () { return gemini_js_2.geminiAdapter; } });\nvar codex_js_2 = require(\"./codex.js\");\nObject.defineProperty(exports, \"codexAdapter\", { enumerable: true, get: function () { return codex_js_2.codexAdapter; } });\n// Re-export base utilities\nvar base_js_1 = require(\"./base.js\");\nObject.defineProperty(exports, \"expandTilde\", { enumerable: true, get: function () { return base_js_1.expandTilde; } });\nObject.defineProperty(exports, \"extractFrontmatterAndBody\", { enumerable: true, get: function () { return base_js_1.extractFrontmatterAndBody; } });\nObject.defineProperty(exports, \"processAttribution\", { enumerable: true, get: function () { return base_js_1.processAttribution; } });\nObject.defineProperty(exports, \"buildHookCommand\", { enumerable: true, get: function () { return base_js_1.buildHookCommand; } });\nObject.defineProperty(exports, \"readSettings\", { enumerable: true, get: function () { return base_js_1.readSettings; } });\nObject.defineProperty(exports, \"writeSettings\", { enumerable: true, get: function () { return base_js_1.writeSettings; } });\n// Re-export transform functions\nvar tool_maps_js_1 = require(\"./transforms/tool-maps.js\");\nObject.defineProperty(exports, \"convertToolName\", { enumerable: true, get: function () { return tool_maps_js_1.convertToolName; } });\nObject.defineProperty(exports, \"convertGeminiToolName\", { enumerable: true, get: function () { return tool_maps_js_1.convertGeminiToolName; } });\nvar frontmatter_js_1 = require(\"./transforms/frontmatter.js\");\nObject.defineProperty(exports, \"colorNameToHex\", { enumerable: true, get: function () { return frontmatter_js_1.colorNameToHex; } });\nObject.defineProperty(exports, \"toSingleLine\", { enumerable: true, get: function () { return frontmatter_js_1.toSingleLine; } });\nObject.defineProperty(exports, \"yamlQuote\", { enumerable: true, get: function () { return frontmatter_js_1.yamlQuote; } });\nObject.defineProperty(exports, \"extractFrontmatterField\", { enumerable: true, get: function () { return frontmatter_js_1.extractFrontmatterField; } });\nObject.defineProperty(exports, \"convertClaudeToOpencodeFrontmatter\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeToOpencodeFrontmatter; } });\nObject.defineProperty(exports, \"convertClaudeToGeminiToml\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeToGeminiToml; } });\nObject.defineProperty(exports, \"convertClaudeCommandToCodexSkill\", { enumerable: true, get: function () { return frontmatter_js_1.convertClaudeCommandToCodexSkill; } });\nObject.defineProperty(exports, \"getCodexSkillAdapterHeader\", { enumerable: true, get: function () { return frontmatter_js_1.getCodexSkillAdapterHeader; } });\nvar content_js_1 = require(\"./transforms/content.js\");\nObject.defineProperty(exports, \"convertSlashCommandsToCodexSkillMentions\", { enumerable: true, get: function () { return content_js_1.convertSlashCommandsToCodexSkillMentions; } });\nObject.defineProperty(exports, \"convertClaudeToCodexMarkdown\", { enumerable: true, get: function () { return content_js_1.convertClaudeToCodexMarkdown; } });\nObject.defineProperty(exports, \"stripSubTags\", { enumerable: true, get: function () { return content_js_1.stripSubTags; } });\nObject.defineProperty(exports, \"convertClaudeToGeminiAgent\", { enumerable: true, get: function () { return content_js_1.convertClaudeToGeminiAgent; } });\nObject.defineProperty(exports, \"replacePathReferences\", { enumerable: true, get: function () { return content_js_1.replacePathReferences; } });\n/**\n * Get all registered adapters.\n */\nfunction getAllAdapters() {\n return [claude_js_1.claudeAdapter, opencode_js_1.opencodeAdapter, gemini_js_1.geminiAdapter, codex_js_1.codexAdapter];\n}\n//# sourceMappingURL=index.js.map","","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport * as crypto from 'node:crypto';\n\nimport chalk from 'chalk';\nimport figlet from 'figlet';\nimport ora from 'ora';\nimport { select, checkbox, confirm } from '@inquirer/prompts';\n\nimport type { RuntimeName, AdapterConfig } from '@maxsim/adapters';\nimport {\n claudeAdapter,\n opencodeAdapter,\n geminiAdapter,\n codexAdapter,\n expandTilde,\n processAttribution,\n buildHookCommand,\n readSettings,\n writeSettings,\n convertClaudeToOpencodeFrontmatter,\n convertClaudeToGeminiToml,\n convertClaudeCommandToCodexSkill,\n convertClaudeToCodexMarkdown,\n stripSubTags,\n convertClaudeToGeminiAgent,\n} from '@maxsim/adapters';\n\n// Get version from package.json\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst pkg = require('../package.json') as { version: string };\n\n// Resolve template asset root — bundled into dist/assets/templates at publish time\nconst templatesRoot = path.resolve(__dirname, 'assets', 'templates');\n\n// Parse args\nconst args = process.argv.slice(2);\nconst hasGlobal = args.includes('--global') || args.includes('-g');\nconst hasLocal = args.includes('--local') || args.includes('-l');\nconst hasOpencode = args.includes('--opencode');\nconst hasClaude = args.includes('--claude');\nconst hasGemini = args.includes('--gemini');\nconst hasCodex = args.includes('--codex');\nconst hasBoth = args.includes('--both'); // Legacy flag, keeps working\nconst hasAll = args.includes('--all');\nconst hasUninstall = args.includes('--uninstall') || args.includes('-u');\n\n// Runtime selection - can be set by flags or interactive prompt\nlet selectedRuntimes: RuntimeName[] = [];\nif (hasAll) {\n selectedRuntimes = ['claude', 'opencode', 'gemini', 'codex'];\n} else if (hasBoth) {\n selectedRuntimes = ['claude', 'opencode'];\n} else {\n if (hasOpencode) selectedRuntimes.push('opencode');\n if (hasClaude) selectedRuntimes.push('claude');\n if (hasGemini) selectedRuntimes.push('gemini');\n if (hasCodex) selectedRuntimes.push('codex');\n}\n\n/**\n * Walk up from cwd to find the MAXSIM monorepo root (has packages/dashboard)\n */\nfunction findMonorepoRoot(startDir: string): string | null {\n let dir = startDir;\n for (let i = 0; i < 10; i++) {\n if (fs.existsSync(path.join(dir, 'packages', 'dashboard', 'server.ts'))) {\n return dir;\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return null;\n}\n\n/**\n * Adapter registry keyed by runtime name\n */\nconst adapterMap: Record<RuntimeName, AdapterConfig> = {\n claude: claudeAdapter,\n opencode: opencodeAdapter,\n gemini: geminiAdapter,\n codex: codexAdapter,\n};\n\n/**\n * Get adapter for a runtime\n */\nfunction getAdapter(runtime: RuntimeName): AdapterConfig {\n return adapterMap[runtime];\n}\n\n/**\n * Get the global config directory for a runtime, using adapter\n */\nfunction getGlobalDir(runtime: RuntimeName, explicitDir: string | null = null): string {\n return getAdapter(runtime).getGlobalDir(explicitDir);\n}\n\n/**\n * Get the config directory path relative to home for hook templating\n */\nfunction getConfigDirFromHome(runtime: RuntimeName, isGlobal: boolean): string {\n return getAdapter(runtime).getConfigDirFromHome(isGlobal);\n}\n\n/**\n * Get the local directory name for a runtime\n */\nfunction getDirName(runtime: RuntimeName): string {\n return getAdapter(runtime).dirName;\n}\n\n/**\n * Get the global config directory for OpenCode (for JSONC permissions)\n * OpenCode follows XDG Base Directory spec\n */\nfunction getOpencodeGlobalDir(): string {\n return opencodeAdapter.getGlobalDir();\n}\n\nconst banner =\n '\\n' +\n chalk.cyan(\n figlet.textSync('MAXSIM', { font: 'ANSI Shadow' })\n .split('\\n')\n .map((line) => ' ' + line)\n .join('\\n'),\n ) +\n '\\n' +\n '\\n' +\n ' MAXSIM ' +\n chalk.dim('v' + pkg.version) +\n '\\n' +\n ' A meta-prompting, context engineering and spec-driven\\n' +\n ' development system for Claude Code, OpenCode, Gemini, and Codex.\\n';\n\n// Parse --config-dir argument\nfunction parseConfigDirArg(): string | null {\n const configDirIndex = args.findIndex(\n (arg) => arg === '--config-dir' || arg === '-c',\n );\n if (configDirIndex !== -1) {\n const nextArg = args[configDirIndex + 1];\n if (!nextArg || nextArg.startsWith('-')) {\n console.error(` ${chalk.yellow('--config-dir requires a path argument')}`);\n process.exit(1);\n }\n return nextArg;\n }\n const configDirArg = args.find(\n (arg) => arg.startsWith('--config-dir=') || arg.startsWith('-c='),\n );\n if (configDirArg) {\n const value = configDirArg.split('=')[1];\n if (!value) {\n console.error(\n ` ${chalk.yellow('--config-dir requires a non-empty path')}`,\n );\n process.exit(1);\n }\n return value;\n }\n return null;\n}\nconst explicitConfigDir = parseConfigDirArg();\nconst hasHelp = args.includes('--help') || args.includes('-h');\nconst forceStatusline = args.includes('--force-statusline');\n\nconsole.log(banner);\n\n// Show help if requested\nif (hasHelp) {\n console.log(\n ` ${chalk.yellow('Usage:')} npx maxsimcli [options]\\n\\n ${chalk.yellow('Options:')}\\n ${chalk.cyan('-g, --global')} Install globally (to config directory)\\n ${chalk.cyan('-l, --local')} Install locally (to current directory)\\n ${chalk.cyan('--claude')} Install for Claude Code only\\n ${chalk.cyan('--opencode')} Install for OpenCode only\\n ${chalk.cyan('--gemini')} Install for Gemini only\\n ${chalk.cyan('--codex')} Install for Codex only\\n ${chalk.cyan('--all')} Install for all runtimes\\n ${chalk.cyan('-u, --uninstall')} Uninstall MAXSIM (remove all MAXSIM files)\\n ${chalk.cyan('-c, --config-dir <path>')} Specify custom config directory\\n ${chalk.cyan('-h, --help')} Show this help message\\n ${chalk.cyan('--force-statusline')} Replace existing statusline config\\n\\n ${chalk.yellow('Examples:')}\\n ${chalk.dim('# Interactive install (prompts for runtime and location)')}\\n npx maxsimcli\\n\\n ${chalk.dim('# Install for Claude Code globally')}\\n npx maxsimcli --claude --global\\n\\n ${chalk.dim('# Install for Gemini globally')}\\n npx maxsimcli --gemini --global\\n\\n ${chalk.dim('# Install for Codex globally')}\\n npx maxsimcli --codex --global\\n\\n ${chalk.dim('# Install for all runtimes globally')}\\n npx maxsimcli --all --global\\n\\n ${chalk.dim('# Install to custom config directory')}\\n npx maxsimcli --codex --global --config-dir ~/.codex-work\\n\\n ${chalk.dim('# Install to current project only')}\\n npx maxsimcli --claude --local\\n\\n ${chalk.dim('# Uninstall MAXSIM from Codex globally')}\\n npx maxsimcli --codex --global --uninstall\\n\\n ${chalk.yellow('Notes:')}\\n The --config-dir option is useful when you have multiple configurations.\\n It takes priority over CLAUDE_CONFIG_DIR / GEMINI_CONFIG_DIR / CODEX_HOME environment variables.\\n`,\n );\n process.exit(0);\n}\n\n// Cache for attribution settings (populated once per runtime during install)\nconst attributionCache = new Map<RuntimeName, null | undefined | string>();\n\n/**\n * Get commit attribution setting for a runtime\n * @returns null = remove, undefined = keep default, string = custom\n */\nfunction getCommitAttribution(runtime: RuntimeName): null | undefined | string {\n if (attributionCache.has(runtime)) {\n return attributionCache.get(runtime);\n }\n\n let result: null | undefined | string;\n\n if (runtime === 'opencode') {\n const config = readSettings(\n path.join(getGlobalDir('opencode', null), 'opencode.json'),\n ) as Record<string, unknown>;\n result =\n (config as { disable_ai_attribution?: boolean }).disable_ai_attribution === true\n ? null\n : undefined;\n } else if (runtime === 'gemini') {\n const settings = readSettings(\n path.join(getGlobalDir('gemini', explicitConfigDir), 'settings.json'),\n ) as Record<string, unknown>;\n const attr = settings.attribution as { commit?: string } | undefined;\n if (!attr || attr.commit === undefined) {\n result = undefined;\n } else if (attr.commit === '') {\n result = null;\n } else {\n result = attr.commit;\n }\n } else if (runtime === 'claude') {\n const settings = readSettings(\n path.join(getGlobalDir('claude', explicitConfigDir), 'settings.json'),\n ) as Record<string, unknown>;\n const attr = settings.attribution as { commit?: string } | undefined;\n if (!attr || attr.commit === undefined) {\n result = undefined;\n } else if (attr.commit === '') {\n result = null;\n } else {\n result = attr.commit;\n }\n } else {\n result = undefined;\n }\n\n attributionCache.set(runtime, result);\n return result;\n}\n\n/**\n * Copy commands to a flat structure for OpenCode\n * OpenCode expects: command/maxsim-help.md (invoked as /maxsim-help)\n * Source structure: commands/maxsim/help.md\n */\nfunction copyFlattenedCommands(\n srcDir: string,\n destDir: string,\n prefix: string,\n pathPrefix: string,\n runtime: RuntimeName,\n): void {\n if (!fs.existsSync(srcDir)) {\n return;\n }\n\n if (fs.existsSync(destDir)) {\n for (const file of fs.readdirSync(destDir)) {\n if (file.startsWith(`${prefix}-`) && file.endsWith('.md')) {\n fs.unlinkSync(path.join(destDir, file));\n }\n }\n } else {\n fs.mkdirSync(destDir, { recursive: true });\n }\n\n const entries = fs.readdirSync(srcDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(srcDir, entry.name);\n\n if (entry.isDirectory()) {\n copyFlattenedCommands(\n srcPath,\n destDir,\n `${prefix}-${entry.name}`,\n pathPrefix,\n runtime,\n );\n } else if (entry.name.endsWith('.md')) {\n const baseName = entry.name.replace('.md', '');\n const destName = `${prefix}-${baseName}.md`;\n const destPath = path.join(destDir, destName);\n\n let content = fs.readFileSync(srcPath, 'utf8');\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n const opencodeDirRegex = /~\\/\\.opencode\\//g;\n content = content.replace(globalClaudeRegex, pathPrefix);\n content = content.replace(localClaudeRegex, `./${getDirName(runtime)}/`);\n content = content.replace(opencodeDirRegex, pathPrefix);\n content = processAttribution(content, getCommitAttribution(runtime));\n content = convertClaudeToOpencodeFrontmatter(content);\n\n fs.writeFileSync(destPath, content);\n }\n }\n}\n\nfunction listCodexSkillNames(\n skillsDir: string,\n prefix: string = 'maxsim-',\n): string[] {\n if (!fs.existsSync(skillsDir)) return [];\n const entries = fs.readdirSync(skillsDir, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory() && entry.name.startsWith(prefix))\n .filter((entry) =>\n fs.existsSync(path.join(skillsDir, entry.name, 'SKILL.md')),\n )\n .map((entry) => entry.name)\n .sort();\n}\n\nfunction copyCommandsAsCodexSkills(\n srcDir: string,\n skillsDir: string,\n prefix: string,\n pathPrefix: string,\n runtime: RuntimeName,\n): void {\n if (!fs.existsSync(srcDir)) {\n return;\n }\n\n fs.mkdirSync(skillsDir, { recursive: true });\n\n const existing = fs.readdirSync(skillsDir, { withFileTypes: true });\n for (const entry of existing) {\n if (entry.isDirectory() && entry.name.startsWith(`${prefix}-`)) {\n fs.rmSync(path.join(skillsDir, entry.name), { recursive: true });\n }\n }\n\n function recurse(currentSrcDir: string, currentPrefix: string): void {\n const entries = fs.readdirSync(currentSrcDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(currentSrcDir, entry.name);\n if (entry.isDirectory()) {\n recurse(srcPath, `${currentPrefix}-${entry.name}`);\n continue;\n }\n\n if (!entry.name.endsWith('.md')) {\n continue;\n }\n\n const baseName = entry.name.replace('.md', '');\n const skillName = `${currentPrefix}-${baseName}`;\n const skillDir = path.join(skillsDir, skillName);\n fs.mkdirSync(skillDir, { recursive: true });\n\n let content = fs.readFileSync(srcPath, 'utf8');\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n const codexDirRegex = /~\\/\\.codex\\//g;\n content = content.replace(globalClaudeRegex, pathPrefix);\n content = content.replace(localClaudeRegex, `./${getDirName(runtime)}/`);\n content = content.replace(codexDirRegex, pathPrefix);\n content = processAttribution(content, getCommitAttribution(runtime));\n content = convertClaudeCommandToCodexSkill(content, skillName);\n\n fs.writeFileSync(path.join(skillDir, 'SKILL.md'), content);\n }\n }\n\n recurse(srcDir, prefix);\n}\n\n/**\n * Recursively copy directory, replacing paths in .md files\n * Deletes existing destDir first to remove orphaned files from previous versions\n */\nfunction copyWithPathReplacement(\n srcDir: string,\n destDir: string,\n pathPrefix: string,\n runtime: RuntimeName,\n isCommand: boolean = false,\n): void {\n const isOpencode = runtime === 'opencode';\n const isCodex = runtime === 'codex';\n const dirName = getDirName(runtime);\n\n if (fs.existsSync(destDir)) {\n fs.rmSync(destDir, { recursive: true });\n }\n fs.mkdirSync(destDir, { recursive: true });\n\n const entries = fs.readdirSync(srcDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(srcDir, entry.name);\n const destPath = path.join(destDir, entry.name);\n\n if (entry.isDirectory()) {\n copyWithPathReplacement(srcPath, destPath, pathPrefix, runtime, isCommand);\n } else if (entry.name.endsWith('.md')) {\n let content = fs.readFileSync(srcPath, 'utf8');\n const globalClaudeRegex = /~\\/\\.claude\\//g;\n const localClaudeRegex = /\\.\\/\\.claude\\//g;\n content = content.replace(globalClaudeRegex, pathPrefix);\n content = content.replace(localClaudeRegex, `./${dirName}/`);\n content = processAttribution(content, getCommitAttribution(runtime));\n\n if (isOpencode) {\n content = convertClaudeToOpencodeFrontmatter(content);\n fs.writeFileSync(destPath, content);\n } else if (runtime === 'gemini') {\n if (isCommand) {\n content = stripSubTags(content);\n const tomlContent = convertClaudeToGeminiToml(content);\n const tomlPath = destPath.replace(/\\.md$/, '.toml');\n fs.writeFileSync(tomlPath, tomlContent);\n } else {\n fs.writeFileSync(destPath, content);\n }\n } else if (isCodex) {\n content = convertClaudeToCodexMarkdown(content);\n fs.writeFileSync(destPath, content);\n } else {\n fs.writeFileSync(destPath, content);\n }\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\n/**\n * Clean up orphaned files from previous MAXSIM versions\n */\nfunction cleanupOrphanedFiles(configDir: string): void {\n const orphanedFiles = [\n 'hooks/maxsim-notify.sh',\n 'hooks/statusline.js',\n ];\n\n for (const relPath of orphanedFiles) {\n const fullPath = path.join(configDir, relPath);\n if (fs.existsSync(fullPath)) {\n fs.unlinkSync(fullPath);\n console.log(` ${chalk.green('\\u2713')} Removed orphaned ${relPath}`);\n }\n }\n}\n\n/**\n * Clean up orphaned hook registrations from settings.json\n */\nfunction cleanupOrphanedHooks(\n settings: Record<string, unknown>,\n): Record<string, unknown> {\n const orphanedHookPatterns = [\n 'maxsim-notify.sh',\n 'hooks/statusline.js',\n 'maxsim-intel-index.js',\n 'maxsim-intel-session.js',\n 'maxsim-intel-prune.js',\n ];\n\n let cleanedHooks = false;\n\n interface HookEntry {\n hooks?: Array<{ command?: string }>;\n }\n\n const hooks = settings.hooks as Record<string, HookEntry[]> | undefined;\n if (hooks) {\n for (const eventType of Object.keys(hooks)) {\n const hookEntries = hooks[eventType];\n if (Array.isArray(hookEntries)) {\n const filtered = hookEntries.filter((entry: HookEntry) => {\n if (entry.hooks && Array.isArray(entry.hooks)) {\n const hasOrphaned = entry.hooks.some(\n (h) =>\n h.command &&\n orphanedHookPatterns.some((pattern) =>\n h.command!.includes(pattern),\n ),\n );\n if (hasOrphaned) {\n cleanedHooks = true;\n return false;\n }\n }\n return true;\n });\n hooks[eventType] = filtered;\n }\n }\n }\n\n if (cleanedHooks) {\n console.log(\n ` ${chalk.green('\\u2713')} Removed orphaned hook registrations`,\n );\n }\n\n const statusLine = settings.statusLine as { command?: string } | undefined;\n if (\n statusLine &&\n statusLine.command &&\n statusLine.command.includes('statusline.js') &&\n !statusLine.command.includes('maxsim-statusline.js')\n ) {\n statusLine.command = statusLine.command.replace(\n /statusline\\.js/,\n 'maxsim-statusline.js',\n );\n console.log(\n ` ${chalk.green('\\u2713')} Updated statusline path (statusline.js \\u2192 maxsim-statusline.js)`,\n );\n }\n\n return settings;\n}\n\n/**\n * Uninstall MAXSIM from the specified directory for a specific runtime\n */\nfunction uninstall(isGlobal: boolean, runtime: RuntimeName = 'claude'): void {\n const isOpencode = runtime === 'opencode';\n const isCodex = runtime === 'codex';\n const dirName = getDirName(runtime);\n\n const targetDir = isGlobal\n ? getGlobalDir(runtime, explicitConfigDir)\n : path.join(process.cwd(), dirName);\n\n const locationLabel = isGlobal\n ? targetDir.replace(os.homedir(), '~')\n : targetDir.replace(process.cwd(), '.');\n\n let runtimeLabel = 'Claude Code';\n if (runtime === 'opencode') runtimeLabel = 'OpenCode';\n if (runtime === 'gemini') runtimeLabel = 'Gemini';\n if (runtime === 'codex') runtimeLabel = 'Codex';\n\n console.log(\n ` Uninstalling MAXSIM from ${chalk.cyan(runtimeLabel)} at ${chalk.cyan(locationLabel)}\\n`,\n );\n\n if (!fs.existsSync(targetDir)) {\n console.log(\n ` ${chalk.yellow('\\u26a0')} Directory does not exist: ${locationLabel}`,\n );\n console.log(` Nothing to uninstall.\\n`);\n return;\n }\n\n let removedCount = 0;\n\n // 1. Remove MAXSIM commands/skills\n if (isOpencode) {\n const commandDir = path.join(targetDir, 'command');\n if (fs.existsSync(commandDir)) {\n const files = fs.readdirSync(commandDir);\n for (const file of files) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n fs.unlinkSync(path.join(commandDir, file));\n removedCount++;\n }\n }\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM commands from command/`,\n );\n }\n } else if (isCodex) {\n const skillsDir = path.join(targetDir, 'skills');\n if (fs.existsSync(skillsDir)) {\n let skillCount = 0;\n const entries = fs.readdirSync(skillsDir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory() && entry.name.startsWith('maxsim-')) {\n fs.rmSync(path.join(skillsDir, entry.name), { recursive: true });\n skillCount++;\n }\n }\n if (skillCount > 0) {\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed ${skillCount} Codex skills`,\n );\n }\n }\n } else {\n const maxsimCommandsDir = path.join(targetDir, 'commands', 'maxsim');\n if (fs.existsSync(maxsimCommandsDir)) {\n fs.rmSync(maxsimCommandsDir, { recursive: true });\n removedCount++;\n console.log(` ${chalk.green('\\u2713')} Removed commands/maxsim/`);\n }\n }\n\n // 2. Remove maxsim directory\n const maxsimDir = path.join(targetDir, 'maxsim');\n if (fs.existsSync(maxsimDir)) {\n fs.rmSync(maxsimDir, { recursive: true });\n removedCount++;\n console.log(` ${chalk.green('\\u2713')} Removed maxsim/`);\n }\n\n // 3. Remove MAXSIM agents\n const agentsDir = path.join(targetDir, 'agents');\n if (fs.existsSync(agentsDir)) {\n const files = fs.readdirSync(agentsDir);\n let agentCount = 0;\n for (const file of files) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n fs.unlinkSync(path.join(agentsDir, file));\n agentCount++;\n }\n }\n if (agentCount > 0) {\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed ${agentCount} MAXSIM agents`,\n );\n }\n }\n\n // 4. Remove MAXSIM hooks\n const hooksDir = path.join(targetDir, 'hooks');\n if (fs.existsSync(hooksDir)) {\n const maxsimHooks = [\n 'maxsim-statusline.js',\n 'maxsim-check-update.js',\n 'maxsim-check-update.sh',\n 'maxsim-context-monitor.js',\n ];\n let hookCount = 0;\n for (const hook of maxsimHooks) {\n const hookPath = path.join(hooksDir, hook);\n if (fs.existsSync(hookPath)) {\n fs.unlinkSync(hookPath);\n hookCount++;\n }\n }\n if (hookCount > 0) {\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed ${hookCount} MAXSIM hooks`,\n );\n }\n }\n\n // 5. Remove MAXSIM package.json (CommonJS mode marker)\n const pkgJsonPath = path.join(targetDir, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const content = fs.readFileSync(pkgJsonPath, 'utf8').trim();\n if (content === '{\"type\":\"commonjs\"}') {\n fs.unlinkSync(pkgJsonPath);\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM package.json`,\n );\n }\n } catch {\n // Ignore read errors\n }\n }\n\n // 6. Clean up settings.json\n const settingsPath = path.join(targetDir, 'settings.json');\n if (fs.existsSync(settingsPath)) {\n const settings = readSettings(settingsPath);\n let settingsModified = false;\n\n interface StatusLine {\n command?: string;\n url?: string;\n }\n\n interface SettingsHookEntry {\n hooks?: Array<{ command?: string }>;\n }\n\n const statusLine = settings.statusLine as StatusLine | undefined;\n if (\n statusLine &&\n statusLine.command &&\n statusLine.command.includes('maxsim-statusline')\n ) {\n delete settings.statusLine;\n settingsModified = true;\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM statusline from settings`,\n );\n }\n\n const settingsHooks = settings.hooks as\n | Record<string, SettingsHookEntry[]>\n | undefined;\n if (settingsHooks && settingsHooks.SessionStart) {\n const before = settingsHooks.SessionStart.length;\n settingsHooks.SessionStart = settingsHooks.SessionStart.filter(\n (entry: SettingsHookEntry) => {\n if (entry.hooks && Array.isArray(entry.hooks)) {\n const hasMaxsimHook = entry.hooks.some(\n (h) =>\n h.command &&\n (h.command.includes('maxsim-check-update') ||\n h.command.includes('maxsim-statusline')),\n );\n return !hasMaxsimHook;\n }\n return true;\n },\n );\n if (settingsHooks.SessionStart.length < before) {\n settingsModified = true;\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM hooks from settings`,\n );\n }\n if (settingsHooks.SessionStart.length === 0) {\n delete settingsHooks.SessionStart;\n }\n }\n\n if (settingsHooks && settingsHooks.PostToolUse) {\n const before = settingsHooks.PostToolUse.length;\n settingsHooks.PostToolUse = settingsHooks.PostToolUse.filter(\n (entry: SettingsHookEntry) => {\n if (entry.hooks && Array.isArray(entry.hooks)) {\n const hasMaxsimHook = entry.hooks.some(\n (h) =>\n h.command &&\n h.command.includes('maxsim-context-monitor'),\n );\n return !hasMaxsimHook;\n }\n return true;\n },\n );\n if (settingsHooks.PostToolUse.length < before) {\n settingsModified = true;\n console.log(\n ` ${chalk.green('\\u2713')} Removed context monitor hook from settings`,\n );\n }\n if (settingsHooks.PostToolUse.length === 0) {\n delete settingsHooks.PostToolUse;\n }\n }\n\n if (settingsHooks && Object.keys(settingsHooks).length === 0) {\n delete settings.hooks;\n }\n\n if (settingsModified) {\n writeSettings(settingsPath, settings);\n removedCount++;\n }\n }\n\n // 7. For OpenCode, clean up permissions from opencode.json\n if (isOpencode) {\n const opencodeConfigDir = isGlobal\n ? getOpencodeGlobalDir()\n : path.join(process.cwd(), '.opencode');\n const configPath = path.join(opencodeConfigDir, 'opencode.json');\n if (fs.existsSync(configPath)) {\n try {\n const config = JSON.parse(\n fs.readFileSync(configPath, 'utf8'),\n ) as Record<string, unknown>;\n let modified = false;\n\n const permission = config.permission as\n | Record<string, Record<string, unknown>>\n | undefined;\n if (permission) {\n for (const permType of ['read', 'external_directory'] as const) {\n if (permission[permType]) {\n const keys = Object.keys(permission[permType]);\n for (const key of keys) {\n if (key.includes('maxsim')) {\n delete permission[permType][key];\n modified = true;\n }\n }\n if (Object.keys(permission[permType]).length === 0) {\n delete permission[permType];\n }\n }\n }\n if (Object.keys(permission).length === 0) {\n delete config.permission;\n }\n }\n\n if (modified) {\n fs.writeFileSync(\n configPath,\n JSON.stringify(config, null, 2) + '\\n',\n );\n removedCount++;\n console.log(\n ` ${chalk.green('\\u2713')} Removed MAXSIM permissions from opencode.json`,\n );\n }\n } catch {\n // Ignore JSON parse errors\n }\n }\n }\n\n if (removedCount === 0) {\n console.log(\n ` ${chalk.yellow('\\u26a0')} No MAXSIM files found to remove.`,\n );\n }\n\n console.log(`\n ${chalk.green('Done!')} MAXSIM has been uninstalled from ${runtimeLabel}.\n Your other files and settings have been preserved.\n`);\n}\n\n/**\n * Parse JSONC (JSON with Comments) by stripping comments and trailing commas.\n */\nfunction parseJsonc(content: string): Record<string, unknown> {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n\n let result = '';\n let inString = false;\n let i = 0;\n while (i < content.length) {\n const char = content[i];\n const next = content[i + 1];\n\n if (inString) {\n result += char;\n if (char === '\\\\' && i + 1 < content.length) {\n result += next;\n i += 2;\n continue;\n }\n if (char === '\"') {\n inString = false;\n }\n i++;\n } else {\n if (char === '\"') {\n inString = true;\n result += char;\n i++;\n } else if (char === '/' && next === '/') {\n while (i < content.length && content[i] !== '\\n') {\n i++;\n }\n } else if (char === '/' && next === '*') {\n i += 2;\n while (\n i < content.length - 1 &&\n !(content[i] === '*' && content[i + 1] === '/')\n ) {\n i++;\n }\n i += 2;\n } else {\n result += char;\n i++;\n }\n }\n }\n\n result = result.replace(/,(\\s*[}\\]])/g, '$1');\n\n return JSON.parse(result) as Record<string, unknown>;\n}\n\n/**\n * Configure OpenCode permissions to allow reading MAXSIM reference docs\n */\nfunction configureOpencodePermissions(isGlobal: boolean = true): void {\n const opencodeConfigDir = isGlobal\n ? getOpencodeGlobalDir()\n : path.join(process.cwd(), '.opencode');\n const configPath = path.join(opencodeConfigDir, 'opencode.json');\n\n fs.mkdirSync(opencodeConfigDir, { recursive: true });\n\n let config: Record<string, unknown> = {};\n if (fs.existsSync(configPath)) {\n try {\n const content = fs.readFileSync(configPath, 'utf8');\n config = parseJsonc(content);\n } catch (e: unknown) {\n console.log(\n ` ${chalk.yellow('\\u26a0')} Could not parse opencode.json - skipping permission config`,\n );\n console.log(\n ` ${chalk.dim(`Reason: ${(e as Error).message}`)}`,\n );\n console.log(\n ` ${chalk.dim('Your config was NOT modified. Fix the syntax manually if needed.')}`,\n );\n return;\n }\n }\n\n type PermissionConfig = Record<string, Record<string, string>>;\n if (!config.permission) {\n config.permission = {} as PermissionConfig;\n }\n const permission = config.permission as PermissionConfig;\n\n const defaultConfigDir = path.join(os.homedir(), '.config', 'opencode');\n const maxsimPath =\n opencodeConfigDir === defaultConfigDir\n ? '~/.config/opencode/maxsim/*'\n : `${opencodeConfigDir.replace(/\\\\/g, '/')}/maxsim/*`;\n\n let modified = false;\n\n if (!permission.read || typeof permission.read !== 'object') {\n permission.read = {};\n }\n if (permission.read[maxsimPath] !== 'allow') {\n permission.read[maxsimPath] = 'allow';\n modified = true;\n }\n\n if (\n !permission.external_directory ||\n typeof permission.external_directory !== 'object'\n ) {\n permission.external_directory = {};\n }\n if (permission.external_directory[maxsimPath] !== 'allow') {\n permission.external_directory[maxsimPath] = 'allow';\n modified = true;\n }\n\n if (!modified) {\n return;\n }\n\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\\n');\n console.log(\n ` ${chalk.green('\\u2713')} Configured read permission for MAXSIM docs`,\n );\n}\n\n/**\n * Verify a directory exists and contains files\n */\nfunction verifyInstalled(dirPath: string, description: string): boolean {\n if (!fs.existsSync(dirPath)) {\n console.error(\n ` ${chalk.yellow('\\u2717')} Failed to install ${description}: directory not created`,\n );\n return false;\n }\n try {\n const entries = fs.readdirSync(dirPath);\n if (entries.length === 0) {\n console.error(\n ` ${chalk.yellow('\\u2717')} Failed to install ${description}: directory is empty`,\n );\n return false;\n }\n } catch (e: unknown) {\n console.error(\n ` ${chalk.yellow('\\u2717')} Failed to install ${description}: ${(e as Error).message}`,\n );\n return false;\n }\n return true;\n}\n\n/**\n * Verify a file exists\n */\nfunction verifyFileInstalled(filePath: string, description: string): boolean {\n if (!fs.existsSync(filePath)) {\n console.error(\n ` ${chalk.yellow('\\u2717')} Failed to install ${description}: file not created`,\n );\n return false;\n }\n return true;\n}\n\n// ──────────────────────────────────────────────────────\n// Local Patch Persistence\n// ──────────────────────────────────────────────────────\n\nconst PATCHES_DIR_NAME = 'maxsim-local-patches';\nconst MANIFEST_NAME = 'maxsim-file-manifest.json';\n\n/**\n * Compute SHA256 hash of file contents\n */\nfunction fileHash(filePath: string): string {\n const content = fs.readFileSync(filePath);\n return crypto.createHash('sha256').update(content).digest('hex');\n}\n\n/**\n * Recursively collect all files in dir with their hashes\n */\nfunction generateManifest(\n dir: string,\n baseDir?: string,\n): Record<string, string> {\n if (!baseDir) baseDir = dir;\n const manifest: Record<string, string> = {};\n if (!fs.existsSync(dir)) return manifest;\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relPath = path.relative(baseDir, fullPath).replace(/\\\\/g, '/');\n if (entry.isDirectory()) {\n Object.assign(manifest, generateManifest(fullPath, baseDir));\n } else {\n manifest[relPath] = fileHash(fullPath);\n }\n }\n return manifest;\n}\n\ninterface Manifest {\n version: string;\n timestamp: string;\n files: Record<string, string>;\n}\n\n/**\n * Write file manifest after installation for future modification detection\n */\nfunction writeManifest(\n configDir: string,\n runtime: RuntimeName = 'claude',\n): Manifest {\n const isOpencode = runtime === 'opencode';\n const isCodex = runtime === 'codex';\n const maxsimDir = path.join(configDir, 'maxsim');\n const commandsDir = path.join(configDir, 'commands', 'maxsim');\n const opencodeCommandDir = path.join(configDir, 'command');\n const codexSkillsDir = path.join(configDir, 'skills');\n const agentsDir = path.join(configDir, 'agents');\n const manifest: Manifest = {\n version: pkg.version,\n timestamp: new Date().toISOString(),\n files: {},\n };\n\n const maxsimHashes = generateManifest(maxsimDir);\n for (const [rel, hash] of Object.entries(maxsimHashes)) {\n manifest.files['maxsim/' + rel] = hash;\n }\n if (!isOpencode && !isCodex && fs.existsSync(commandsDir)) {\n const cmdHashes = generateManifest(commandsDir);\n for (const [rel, hash] of Object.entries(cmdHashes)) {\n manifest.files['commands/maxsim/' + rel] = hash;\n }\n }\n if (isOpencode && fs.existsSync(opencodeCommandDir)) {\n for (const file of fs.readdirSync(opencodeCommandDir)) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n manifest.files['command/' + file] = fileHash(\n path.join(opencodeCommandDir, file),\n );\n }\n }\n }\n if (isCodex && fs.existsSync(codexSkillsDir)) {\n for (const skillName of listCodexSkillNames(codexSkillsDir)) {\n const skillRoot = path.join(codexSkillsDir, skillName);\n const skillHashes = generateManifest(skillRoot);\n for (const [rel, hash] of Object.entries(skillHashes)) {\n manifest.files[`skills/${skillName}/${rel}`] = hash;\n }\n }\n }\n if (fs.existsSync(agentsDir)) {\n for (const file of fs.readdirSync(agentsDir)) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n manifest.files['agents/' + file] = fileHash(\n path.join(agentsDir, file),\n );\n }\n }\n }\n\n fs.writeFileSync(\n path.join(configDir, MANIFEST_NAME),\n JSON.stringify(manifest, null, 2),\n );\n return manifest;\n}\n\ninterface BackupMeta {\n backed_up_at: string;\n from_version: string;\n files: string[];\n}\n\n/**\n * Detect user-modified MAXSIM files by comparing against install manifest.\n */\nfunction saveLocalPatches(configDir: string): string[] {\n const manifestPath = path.join(configDir, MANIFEST_NAME);\n if (!fs.existsSync(manifestPath)) return [];\n\n let manifest: Manifest;\n try {\n manifest = JSON.parse(\n fs.readFileSync(manifestPath, 'utf8'),\n ) as Manifest;\n } catch {\n return [];\n }\n\n const patchesDir = path.join(configDir, PATCHES_DIR_NAME);\n const modified: string[] = [];\n\n for (const [relPath, originalHash] of Object.entries(manifest.files || {})) {\n const fullPath = path.join(configDir, relPath);\n if (!fs.existsSync(fullPath)) continue;\n const currentHash = fileHash(fullPath);\n if (currentHash !== originalHash) {\n const backupPath = path.join(patchesDir, relPath);\n fs.mkdirSync(path.dirname(backupPath), { recursive: true });\n fs.copyFileSync(fullPath, backupPath);\n modified.push(relPath);\n }\n }\n\n if (modified.length > 0) {\n const meta: BackupMeta = {\n backed_up_at: new Date().toISOString(),\n from_version: manifest.version,\n files: modified,\n };\n fs.writeFileSync(\n path.join(patchesDir, 'backup-meta.json'),\n JSON.stringify(meta, null, 2),\n );\n console.log(\n ' ' +\n chalk.yellow('i') +\n ' Found ' +\n modified.length +\n ' locally modified MAXSIM file(s) \\u2014 backed up to ' +\n PATCHES_DIR_NAME +\n '/',\n );\n for (const f of modified) {\n console.log(' ' + chalk.dim(f));\n }\n }\n return modified;\n}\n\n/**\n * After install, report backed-up patches for user to reapply.\n */\nfunction reportLocalPatches(\n configDir: string,\n runtime: RuntimeName = 'claude',\n): string[] {\n const patchesDir = path.join(configDir, PATCHES_DIR_NAME);\n const metaPath = path.join(patchesDir, 'backup-meta.json');\n if (!fs.existsSync(metaPath)) return [];\n\n let meta: BackupMeta;\n try {\n meta = JSON.parse(\n fs.readFileSync(metaPath, 'utf8'),\n ) as BackupMeta;\n } catch {\n return [];\n }\n\n if (meta.files && meta.files.length > 0) {\n const reapplyCommand =\n runtime === 'opencode'\n ? '/maxsim-reapply-patches'\n : runtime === 'codex'\n ? '$maxsim-reapply-patches'\n : '/maxsim:reapply-patches';\n console.log('');\n console.log(\n ' ' +\n chalk.yellow('Local patches detected') +\n ' (from v' +\n meta.from_version +\n '):',\n );\n for (const f of meta.files) {\n console.log(' ' + chalk.cyan(f));\n }\n console.log('');\n console.log(\n ' Your modifications are saved in ' +\n chalk.cyan(PATCHES_DIR_NAME + '/'),\n );\n console.log(\n ' Run ' +\n chalk.cyan(reapplyCommand) +\n ' to merge them into the new version.',\n );\n console.log(' Or manually compare and merge the files.');\n console.log('');\n }\n return meta.files || [];\n}\n\ninterface InstallResult {\n settingsPath: string | null;\n settings: Record<string, unknown> | null;\n statuslineCommand: string | null;\n runtime: RuntimeName;\n}\n\nfunction install(\n isGlobal: boolean,\n runtime: RuntimeName = 'claude',\n): InstallResult {\n const isOpencode = runtime === 'opencode';\n const isGemini = runtime === 'gemini';\n const isCodex = runtime === 'codex';\n const dirName = getDirName(runtime);\n const src = templatesRoot;\n\n const targetDir = isGlobal\n ? getGlobalDir(runtime, explicitConfigDir)\n : path.join(process.cwd(), dirName);\n\n const locationLabel = isGlobal\n ? targetDir.replace(os.homedir(), '~')\n : targetDir.replace(process.cwd(), '.');\n\n const pathPrefix = isGlobal\n ? `${targetDir.replace(/\\\\/g, '/')}/`\n : `./${dirName}/`;\n\n let runtimeLabel = 'Claude Code';\n if (isOpencode) runtimeLabel = 'OpenCode';\n if (isGemini) runtimeLabel = 'Gemini';\n if (isCodex) runtimeLabel = 'Codex';\n\n console.log(\n ` Installing for ${chalk.cyan(runtimeLabel)} to ${chalk.cyan(locationLabel)}\\n`,\n );\n\n const failures: string[] = [];\n\n // Save any locally modified MAXSIM files before they get wiped\n saveLocalPatches(targetDir);\n\n // Clean up orphaned files from previous versions\n cleanupOrphanedFiles(targetDir);\n\n // OpenCode uses command/ (flat), Codex uses skills/, Claude/Gemini use commands/maxsim/\n let spinner = ora({ text: 'Installing commands...', color: 'cyan' }).start();\n if (isOpencode) {\n const commandDir = path.join(targetDir, 'command');\n fs.mkdirSync(commandDir, { recursive: true });\n\n const maxsimSrc = path.join(src, 'commands', 'maxsim');\n copyFlattenedCommands(maxsimSrc, commandDir, 'maxsim', pathPrefix, runtime);\n if (verifyInstalled(commandDir, 'command/maxsim-*')) {\n const count = fs\n .readdirSync(commandDir)\n .filter((f) => f.startsWith('maxsim-')).length;\n spinner.succeed(chalk.green('✓') + ` Installed ${count} commands to command/`);\n } else {\n spinner.fail('Failed to install commands');\n failures.push('command/maxsim-*');\n }\n } else if (isCodex) {\n const skillsDir = path.join(targetDir, 'skills');\n const maxsimSrc = path.join(src, 'commands', 'maxsim');\n copyCommandsAsCodexSkills(maxsimSrc, skillsDir, 'maxsim', pathPrefix, runtime);\n const installedSkillNames = listCodexSkillNames(skillsDir);\n if (installedSkillNames.length > 0) {\n spinner.succeed(chalk.green('✓') + ` Installed ${installedSkillNames.length} skills to skills/`);\n } else {\n spinner.fail('Failed to install skills');\n failures.push('skills/maxsim-*');\n }\n } else {\n const commandsDir = path.join(targetDir, 'commands');\n fs.mkdirSync(commandsDir, { recursive: true });\n\n const maxsimSrc = path.join(src, 'commands', 'maxsim');\n const maxsimDest = path.join(commandsDir, 'maxsim');\n copyWithPathReplacement(maxsimSrc, maxsimDest, pathPrefix, runtime, true);\n if (verifyInstalled(maxsimDest, 'commands/maxsim')) {\n spinner.succeed(chalk.green('✓') + ' Installed commands/maxsim');\n } else {\n spinner.fail('Failed to install commands/maxsim');\n failures.push('commands/maxsim');\n }\n }\n\n // Copy maxsim directory content (workflows, templates, references) with path replacement\n // Templates package layout: workflows/, templates/, references/ at root\n // Install target: maxsim/workflows/, maxsim/templates/, maxsim/references/\n spinner = ora({ text: 'Installing workflows and templates...', color: 'cyan' }).start();\n const skillDest = path.join(targetDir, 'maxsim');\n const maxsimSubdirs = ['workflows', 'templates', 'references'];\n if (fs.existsSync(skillDest)) {\n fs.rmSync(skillDest, { recursive: true });\n }\n fs.mkdirSync(skillDest, { recursive: true });\n for (const subdir of maxsimSubdirs) {\n const subdirSrc = path.join(src, subdir);\n if (fs.existsSync(subdirSrc)) {\n const subdirDest = path.join(skillDest, subdir);\n copyWithPathReplacement(subdirSrc, subdirDest, pathPrefix, runtime);\n }\n }\n if (verifyInstalled(skillDest, 'maxsim')) {\n spinner.succeed(chalk.green('✓') + ' Installed maxsim');\n } else {\n spinner.fail('Failed to install maxsim');\n failures.push('maxsim');\n }\n\n // Copy agents to agents directory\n const agentsSrc = path.join(src, 'agents');\n if (fs.existsSync(agentsSrc)) {\n spinner = ora({ text: 'Installing agents...', color: 'cyan' }).start();\n const agentsDest = path.join(targetDir, 'agents');\n fs.mkdirSync(agentsDest, { recursive: true });\n\n // Remove old MAXSIM agents before copying new ones\n if (fs.existsSync(agentsDest)) {\n for (const file of fs.readdirSync(agentsDest)) {\n if (file.startsWith('maxsim-') && file.endsWith('.md')) {\n fs.unlinkSync(path.join(agentsDest, file));\n }\n }\n }\n\n const agentEntries = fs.readdirSync(agentsSrc, { withFileTypes: true });\n for (const entry of agentEntries) {\n if (entry.isFile() && entry.name.endsWith('.md')) {\n let content = fs.readFileSync(\n path.join(agentsSrc, entry.name),\n 'utf8',\n );\n const dirRegex = /~\\/\\.claude\\//g;\n content = content.replace(dirRegex, pathPrefix);\n content = processAttribution(content, getCommitAttribution(runtime));\n if (isOpencode) {\n content = convertClaudeToOpencodeFrontmatter(content);\n } else if (isGemini) {\n content = convertClaudeToGeminiAgent(content);\n } else if (isCodex) {\n content = convertClaudeToCodexMarkdown(content);\n }\n fs.writeFileSync(path.join(agentsDest, entry.name), content);\n }\n }\n if (verifyInstalled(agentsDest, 'agents')) {\n spinner.succeed(chalk.green('✓') + ' Installed agents');\n } else {\n spinner.fail('Failed to install agents');\n failures.push('agents');\n }\n }\n\n // Copy CHANGELOG.md (lives at repo root, one level above templates package)\n const changelogSrc = path.join(src, '..', 'CHANGELOG.md');\n const changelogDest = path.join(targetDir, 'maxsim', 'CHANGELOG.md');\n if (fs.existsSync(changelogSrc)) {\n spinner = ora({ text: 'Installing CHANGELOG.md...', color: 'cyan' }).start();\n fs.copyFileSync(changelogSrc, changelogDest);\n if (verifyFileInstalled(changelogDest, 'CHANGELOG.md')) {\n spinner.succeed(chalk.green('✓') + ' Installed CHANGELOG.md');\n } else {\n spinner.fail('Failed to install CHANGELOG.md');\n failures.push('CHANGELOG.md');\n }\n }\n\n // Copy CLAUDE.md (global MAXSIM context for Claude Code)\n const claudeMdSrc = path.join(src, 'CLAUDE.md');\n const claudeMdDest = path.join(targetDir, 'CLAUDE.md');\n if (fs.existsSync(claudeMdSrc)) {\n spinner = ora({ text: 'Installing CLAUDE.md...', color: 'cyan' }).start();\n fs.copyFileSync(claudeMdSrc, claudeMdDest);\n if (verifyFileInstalled(claudeMdDest, 'CLAUDE.md')) {\n spinner.succeed(chalk.green('✓') + ' Installed CLAUDE.md');\n } else {\n spinner.fail('Failed to install CLAUDE.md');\n failures.push('CLAUDE.md');\n }\n }\n\n // Write VERSION file\n const versionDest = path.join(targetDir, 'maxsim', 'VERSION');\n fs.writeFileSync(versionDest, pkg.version);\n if (verifyFileInstalled(versionDest, 'VERSION')) {\n console.log(\n ` ${chalk.green('\\u2713')} Wrote VERSION (${pkg.version})`,\n );\n } else {\n failures.push('VERSION');\n }\n\n if (!isCodex) {\n // Write package.json to force CommonJS mode for MAXSIM scripts\n const pkgJsonDest = path.join(targetDir, 'package.json');\n fs.writeFileSync(pkgJsonDest, '{\"type\":\"commonjs\"}\\n');\n console.log(\n ` ${chalk.green('\\u2713')} Wrote package.json (CommonJS mode)`,\n );\n\n // Install maxsim-tools.cjs binary — workflows call `node ~/.claude/maxsim/bin/maxsim-tools.cjs`\n const toolSrc = path.resolve(__dirname, 'cli.cjs');\n const binDir = path.join(targetDir, 'maxsim', 'bin');\n const toolDest = path.join(binDir, 'maxsim-tools.cjs');\n if (fs.existsSync(toolSrc)) {\n fs.mkdirSync(binDir, { recursive: true });\n fs.copyFileSync(toolSrc, toolDest);\n console.log(` ${chalk.green('\\u2713')} Installed maxsim-tools.cjs`);\n } else {\n console.warn(` ${chalk.yellow('!')} cli.cjs not found at ${toolSrc} — maxsim-tools.cjs not installed`);\n failures.push('maxsim-tools.cjs');\n }\n\n // Copy hooks from bundled assets directory (copied from @maxsim/hooks/dist at build time)\n let hooksSrc: string | null = null;\n const bundledHooksDir = path.resolve(__dirname, 'assets', 'hooks');\n if (fs.existsSync(bundledHooksDir)) {\n hooksSrc = bundledHooksDir;\n } else {\n console.warn(` ${chalk.yellow('!')} bundled hooks not found - hooks will not be installed`);\n }\n\n if (hooksSrc) {\n spinner = ora({ text: 'Installing hooks...', color: 'cyan' }).start();\n const hooksDest = path.join(targetDir, 'hooks');\n fs.mkdirSync(hooksDest, { recursive: true });\n const hookEntries = fs.readdirSync(hooksSrc);\n const configDirReplacement = getConfigDirFromHome(runtime, isGlobal);\n for (const entry of hookEntries) {\n const srcFile = path.join(hooksSrc, entry);\n if (fs.statSync(srcFile).isFile() && entry.endsWith('.cjs') && !entry.includes('.d.')) {\n const destName = entry.replace(/\\.cjs$/, '.js');\n const destFile = path.join(hooksDest, destName);\n let content = fs.readFileSync(srcFile, 'utf8');\n content = content.replace(/'\\.claude'/g, configDirReplacement);\n fs.writeFileSync(destFile, content);\n }\n }\n if (verifyInstalled(hooksDest, 'hooks')) {\n spinner.succeed(chalk.green('✓') + ' Installed hooks (bundled)');\n } else {\n spinner.fail('Failed to install hooks');\n failures.push('hooks');\n }\n }\n }\n\n if (failures.length > 0) {\n console.error(\n `\\n ${chalk.yellow('Installation incomplete!')} Failed: ${failures.join(', ')}`,\n );\n process.exit(1);\n }\n\n // Write file manifest for future modification detection\n writeManifest(targetDir, runtime);\n console.log(\n ` ${chalk.green('\\u2713')} Wrote file manifest (${MANIFEST_NAME})`,\n );\n\n // Report any backed-up local patches\n reportLocalPatches(targetDir, runtime);\n\n if (isCodex) {\n return {\n settingsPath: null,\n settings: null,\n statuslineCommand: null,\n runtime,\n };\n }\n\n // Configure statusline and hooks in settings.json\n const settingsPath = path.join(targetDir, 'settings.json');\n const settings = cleanupOrphanedHooks(readSettings(settingsPath));\n const statuslineCommand = isGlobal\n ? buildHookCommand(targetDir, 'maxsim-statusline.js')\n : 'node ' + dirName + '/hooks/maxsim-statusline.js';\n const updateCheckCommand = isGlobal\n ? buildHookCommand(targetDir, 'maxsim-check-update.js')\n : 'node ' + dirName + '/hooks/maxsim-check-update.js';\n const contextMonitorCommand = isGlobal\n ? buildHookCommand(targetDir, 'maxsim-context-monitor.js')\n : 'node ' + dirName + '/hooks/maxsim-context-monitor.js';\n\n // Enable experimental agents for Gemini CLI\n if (isGemini) {\n if (!settings.experimental) {\n settings.experimental = {};\n }\n const experimental = settings.experimental as Record<string, boolean>;\n if (!experimental.enableAgents) {\n experimental.enableAgents = true;\n console.log(\n ` ${chalk.green('\\u2713')} Enabled experimental agents`,\n );\n }\n }\n\n interface InstallHookEntry {\n hooks?: Array<{ type: string; command: string }>;\n }\n\n // Configure SessionStart hook for update checking (skip for opencode)\n if (!isOpencode) {\n if (!settings.hooks) {\n settings.hooks = {};\n }\n const installHooks = settings.hooks as Record<string, InstallHookEntry[]>;\n if (!installHooks.SessionStart) {\n installHooks.SessionStart = [];\n }\n\n const hasMaxsimUpdateHook = installHooks.SessionStart.some(\n (entry: InstallHookEntry) =>\n entry.hooks &&\n entry.hooks.some(\n (h) => h.command && h.command.includes('maxsim-check-update'),\n ),\n );\n\n if (!hasMaxsimUpdateHook) {\n installHooks.SessionStart.push({\n hooks: [\n {\n type: 'command',\n command: updateCheckCommand,\n },\n ],\n });\n console.log(\n ` ${chalk.green('\\u2713')} Configured update check hook`,\n );\n }\n\n // Configure PostToolUse hook for context window monitoring\n if (!installHooks.PostToolUse) {\n installHooks.PostToolUse = [];\n }\n\n const hasContextMonitorHook = installHooks.PostToolUse.some(\n (entry: InstallHookEntry) =>\n entry.hooks &&\n entry.hooks.some(\n (h) => h.command && h.command.includes('maxsim-context-monitor'),\n ),\n );\n\n if (!hasContextMonitorHook) {\n installHooks.PostToolUse.push({\n hooks: [\n {\n type: 'command',\n command: contextMonitorCommand,\n },\n ],\n });\n console.log(\n ` ${chalk.green('\\u2713')} Configured context window monitor hook`,\n );\n }\n }\n\n return { settingsPath, settings, statuslineCommand, runtime };\n}\n\n/**\n * Apply statusline config, then print completion message\n */\nfunction finishInstall(\n settingsPath: string | null,\n settings: Record<string, unknown> | null,\n statuslineCommand: string | null,\n shouldInstallStatusline: boolean,\n runtime: RuntimeName = 'claude',\n isGlobal: boolean = true,\n): void {\n const isOpencode = runtime === 'opencode';\n const isCodex = runtime === 'codex';\n\n if (shouldInstallStatusline && !isOpencode && !isCodex) {\n settings!.statusLine = {\n type: 'command',\n command: statuslineCommand,\n };\n console.log(` ${chalk.green('\\u2713')} Configured statusline`);\n }\n\n if (!isCodex && settingsPath && settings) {\n writeSettings(settingsPath, settings);\n }\n\n if (isOpencode) {\n configureOpencodePermissions(isGlobal);\n }\n\n let program = 'Claude Code';\n if (runtime === 'opencode') program = 'OpenCode';\n if (runtime === 'gemini') program = 'Gemini';\n if (runtime === 'codex') program = 'Codex';\n\n let command = '/maxsim:help';\n if (runtime === 'opencode') command = '/maxsim-help';\n if (runtime === 'codex') command = '$maxsim-help';\n console.log(`\n ${chalk.green('Done!')} Launch ${program} and run ${chalk.cyan(command)}.\n\n ${chalk.cyan('Join the community:')} https://discord.gg/5JJgD5svVS\n`);\n}\n\n/**\n * Handle statusline configuration — returns true if MAXSIM statusline should be installed\n */\nasync function handleStatusline(\n settings: Record<string, unknown>,\n isInteractive: boolean,\n): Promise<boolean> {\n const hasExisting = settings.statusLine != null;\n\n if (!hasExisting) return true;\n if (forceStatusline) return true;\n\n if (!isInteractive) {\n console.log(\n chalk.yellow('⚠') + ' Skipping statusline (already configured)',\n );\n console.log(\n ' Use ' + chalk.cyan('--force-statusline') + ' to replace\\n',\n );\n return false;\n }\n\n const statusLine = settings.statusLine as { command?: string; url?: string };\n const existingCmd = statusLine.command || statusLine.url || '(custom)';\n\n console.log();\n console.log(chalk.yellow('⚠ Existing statusline detected'));\n console.log();\n console.log(' Your current statusline:');\n console.log(' ' + chalk.dim(`command: ${existingCmd}`));\n console.log();\n console.log(' MAXSIM includes a statusline showing:');\n console.log(' • Model name');\n console.log(' • Current task (from todo list)');\n console.log(' • Context window usage (color-coded)');\n console.log();\n\n const shouldReplace = await confirm({\n message: 'Replace with MAXSIM statusline?',\n default: false,\n });\n\n return shouldReplace;\n}\n\n/**\n * Prompt for runtime selection (multi-select)\n */\nasync function promptRuntime(): Promise<RuntimeName[]> {\n const selected = await checkbox<RuntimeName>({\n message: 'Which runtime(s) would you like to install for?',\n choices: [\n { name: 'Claude Code ' + chalk.dim('(~/.claude)'), value: 'claude', checked: true },\n { name: 'OpenCode ' + chalk.dim('(~/.config/opencode)') + ' — open source, free models', value: 'opencode' },\n { name: 'Gemini ' + chalk.dim('(~/.gemini)'), value: 'gemini' },\n { name: 'Codex ' + chalk.dim('(~/.codex)'), value: 'codex' },\n ],\n validate: (choices) => choices.length > 0 || 'Please select at least one runtime',\n });\n return selected;\n}\n\n/**\n * Prompt for install location\n */\nasync function promptLocation(runtimes: RuntimeName[]): Promise<boolean> {\n if (!process.stdin.isTTY) {\n console.log(\n chalk.yellow('Non-interactive terminal detected, defaulting to global install') + '\\n',\n );\n return true; // isGlobal\n }\n\n const pathExamples = runtimes\n .map((r) => getGlobalDir(r, explicitConfigDir).replace(os.homedir(), '~'))\n .join(', ');\n\n const localExamples = runtimes.map((r) => `./${getDirName(r)}`).join(', ');\n\n const choice = await select<'global' | 'local'>({\n message: 'Where would you like to install?',\n choices: [\n {\n name: 'Global ' + chalk.dim(`(${pathExamples})`) + ' — available in all projects',\n value: 'global',\n },\n {\n name: 'Local ' + chalk.dim(`(${localExamples})`) + ' — this project only',\n value: 'local',\n },\n ],\n });\n\n return choice === 'global';\n}\n\n/**\n * Install MAXSIM for all selected runtimes\n */\nasync function installAllRuntimes(\n runtimes: RuntimeName[],\n isGlobal: boolean,\n isInteractive: boolean,\n): Promise<void> {\n const results: InstallResult[] = [];\n\n for (const runtime of runtimes) {\n const result = install(isGlobal, runtime);\n results.push(result);\n }\n\n const statuslineRuntimes: RuntimeName[] = ['claude', 'gemini'];\n const primaryStatuslineResult = results.find((r) =>\n statuslineRuntimes.includes(r.runtime),\n );\n\n let shouldInstallStatusline = false;\n if (primaryStatuslineResult && primaryStatuslineResult.settings) {\n shouldInstallStatusline = await handleStatusline(\n primaryStatuslineResult.settings,\n isInteractive,\n );\n }\n\n for (const result of results) {\n const useStatusline =\n statuslineRuntimes.includes(result.runtime) && shouldInstallStatusline;\n finishInstall(\n result.settingsPath,\n result.settings,\n result.statuslineCommand,\n useStatusline,\n result.runtime,\n isGlobal,\n );\n }\n}\n\n// Main logic\n// Subcommand routing — intercept before install flow\nconst subcommand = args.find(a => !a.startsWith('-'));\n\n(async () => {\n // Dashboard subcommand\n if (subcommand === 'dashboard') {\n const { execSync: execSyncDash, spawn: spawnDash } = await import('node:child_process');\n\n // Try to find dashboard in monorepo (development)\n const monorepoDashboard = path.resolve(process.cwd(), 'packages', 'dashboard');\n const monorepoRoot = findMonorepoRoot(process.cwd());\n\n if (monorepoRoot) {\n const dashDir = path.join(monorepoRoot, 'packages', 'dashboard');\n if (fs.existsSync(path.join(dashDir, 'server.ts'))) {\n console.log(chalk.blue('Starting dashboard from monorepo...'));\n console.log(chalk.gray(` Project: ${process.cwd()}`));\n console.log(chalk.gray(` Dashboard: ${dashDir}\\n`));\n\n const child = spawnDash('node', ['--import', 'tsx', 'server.ts'], {\n cwd: dashDir,\n stdio: 'inherit',\n env: {\n ...process.env,\n MAXSIM_PROJECT_CWD: process.cwd(),\n NODE_ENV: 'development',\n },\n });\n\n child.on('exit', (code) => process.exit(code ?? 0));\n return;\n }\n }\n\n // Try to find dashboard via installed maxsim-tools\n const toolsPaths = [\n path.join(process.cwd(), '.claude', 'maxsim', 'bin', 'maxsim-tools.cjs'),\n path.join(os.homedir(), '.claude', 'maxsim', 'bin', 'maxsim-tools.cjs'),\n ];\n for (const toolsPath of toolsPaths) {\n if (fs.existsSync(toolsPath)) {\n try {\n const child = spawnDash('node', [toolsPath, 'dashboard'], {\n cwd: process.cwd(),\n stdio: 'inherit',\n });\n child.on('exit', (code) => process.exit(code ?? 0));\n return;\n } catch {\n // Try next path\n }\n }\n }\n\n console.log(chalk.yellow('\\n Dashboard not found.\\n'));\n console.log(' The dashboard requires the MAXSIM monorepo.\\n');\n console.log(' ' + chalk.bold('To use the dashboard:'));\n console.log(' 1. Clone the repo: git clone https://github.com/maystudios/maxsim.git');\n console.log(' 2. Install deps: cd maxsim && pnpm install');\n console.log(' 3. Start: cd packages/dashboard && pnpm run dev\\n');\n console.log(' Set ' + chalk.cyan('MAXSIM_PROJECT_CWD') + ' to point at your project:\\n');\n console.log(' ' + chalk.gray('MAXSIM_PROJECT_CWD=/path/to/your/project pnpm run dev') + '\\n');\n process.exit(0);\n }\n\n if (hasGlobal && hasLocal) {\n console.error(chalk.yellow('Cannot specify both --global and --local'));\n process.exit(1);\n } else if (explicitConfigDir && hasLocal) {\n console.error(chalk.yellow('Cannot use --config-dir with --local'));\n process.exit(1);\n } else if (hasUninstall) {\n if (!hasGlobal && !hasLocal) {\n console.error(chalk.yellow('--uninstall requires --global or --local'));\n process.exit(1);\n }\n const runtimes: RuntimeName[] =\n selectedRuntimes.length > 0 ? selectedRuntimes : ['claude'];\n for (const runtime of runtimes) {\n uninstall(hasGlobal, runtime);\n }\n } else if (selectedRuntimes.length > 0) {\n if (!hasGlobal && !hasLocal) {\n const isGlobal = await promptLocation(selectedRuntimes);\n await installAllRuntimes(selectedRuntimes, isGlobal, true);\n } else {\n await installAllRuntimes(selectedRuntimes, hasGlobal, false);\n }\n } else if (hasGlobal || hasLocal) {\n await installAllRuntimes(['claude'], hasGlobal, false);\n } else {\n if (!process.stdin.isTTY) {\n console.log(\n chalk.yellow('Non-interactive terminal detected, defaulting to Claude Code global install') + '\\n',\n );\n await installAllRuntimes(['claude'], true, false);\n } else {\n const runtimes = await promptRuntime();\n const isGlobal = await promptLocation(runtimes);\n await installAllRuntimes(runtimes, isGlobal, true);\n }\n }\n})().catch((err: unknown) => {\n if (err instanceof Error && err.message.includes('User force closed')) {\n // User pressed Ctrl+C during an @inquirer/prompts prompt — exit cleanly\n console.log('\\n' + chalk.yellow('Installation cancelled') + '\\n');\n process.exit(0);\n }\n console.error(chalk.red('Unexpected error:'), err);\n process.exit(1);\n});\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}