@plumpslabs/fennec-cli 1.13.0 → 1.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/debug.js","../../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js","../../../node_modules/.pnpm/emoji-regex@8.0.0/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@4.2.3/node_modules/string-width/index.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/utils.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/styles.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/system/has-flag.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/system/supports-colors.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/custom/trap.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/custom/zalgo.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/america.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/zebra.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/rainbow.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/random.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/colors.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/safe.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/cell.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/layout-manager.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/table.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/index.js","../src/utils/format.ts","../src/utils/banner.ts","../src/utils/help.ts","../src/commands/pipe.ts","../src/commands/attach-pid.ts","../src/commands/attach-port.ts","../src/commands/watch.ts","../src/commands/start.ts","../src/commands/tracker.ts","../src/utils/system-process.ts","../src/commands/ps.ts","../src/commands/kill.ts","../src/commands/stop.ts","../src/commands/spawn.ts","../src/commands/restart.ts","../src/commands/log.ts","../src/commands/attach.ts","../src/commands/sessions.ts","../src/commands/setup.ts","../src/commands/management.ts","../src/commands/health.ts","../src/commands/cleanup.ts","../src/commands/info.ts","../src/commands/rename.ts","../src/commands/export-import.ts","../src/index.ts"],"sourcesContent":["let messages = [];\nlet level = 0;\n\nconst debug = (msg, min) => {\n if (level >= min) {\n messages.push(msg);\n }\n};\n\ndebug.WARN = 1;\ndebug.INFO = 2;\ndebug.DEBUG = 3;\n\ndebug.reset = () => {\n messages = [];\n};\n\ndebug.setDebugLevel = (v) => {\n level = v;\n};\n\ndebug.warn = (msg) => debug(msg, debug.WARN);\ndebug.info = (msg) => debug(msg, debug.INFO);\ndebug.debug = (msg) => debug(msg, debug.DEBUG);\n\ndebug.debugMessages = () => messages;\n\nmodule.exports = debug;\n","'use strict';\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n","/* eslint-disable yoda */\n'use strict';\n\nconst isFullwidthCodePoint = codePoint => {\n\tif (Number.isNaN(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tcodePoint >= 0x1100 && (\n\t\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nmodule.exports = isFullwidthCodePoint;\nmodule.exports.default = isFullwidthCodePoint;\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\nconst emojiRegex = require('emoji-regex');\n\nconst stringWidth = string => {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tlet width = 0;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst code = string.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n\nmodule.exports = stringWidth;\n// TODO: remove this in the next major version\nmodule.exports.default = stringWidth;\n","const stringWidth = require('string-width');\n\nfunction codeRegex(capture) {\n return capture ? /\\u001b\\[((?:\\d*;){0,5}\\d*)m/g : /\\u001b\\[(?:\\d*;){0,5}\\d*m/g;\n}\n\nfunction strlen(str) {\n let code = codeRegex();\n let stripped = ('' + str).replace(code, '');\n let split = stripped.split('\\n');\n return split.reduce(function (memo, s) {\n return stringWidth(s) > memo ? stringWidth(s) : memo;\n }, 0);\n}\n\nfunction repeat(str, times) {\n return Array(times + 1).join(str);\n}\n\nfunction pad(str, len, pad, dir) {\n let length = strlen(str);\n if (len + 1 >= length) {\n let padlen = len - length;\n switch (dir) {\n case 'right': {\n str = repeat(pad, padlen) + str;\n break;\n }\n case 'center': {\n let right = Math.ceil(padlen / 2);\n let left = padlen - right;\n str = repeat(pad, left) + str + repeat(pad, right);\n break;\n }\n default: {\n str = str + repeat(pad, padlen);\n break;\n }\n }\n }\n return str;\n}\n\nlet codeCache = {};\n\nfunction addToCodeCache(name, on, off) {\n on = '\\u001b[' + on + 'm';\n off = '\\u001b[' + off + 'm';\n codeCache[on] = { set: name, to: true };\n codeCache[off] = { set: name, to: false };\n codeCache[name] = { on: on, off: off };\n}\n\n//https://github.com/Marak/colors.js/blob/master/lib/styles.js\naddToCodeCache('bold', 1, 22);\naddToCodeCache('italics', 3, 23);\naddToCodeCache('underline', 4, 24);\naddToCodeCache('inverse', 7, 27);\naddToCodeCache('strikethrough', 9, 29);\n\nfunction updateState(state, controlChars) {\n let controlCode = controlChars[1] ? parseInt(controlChars[1].split(';')[0]) : 0;\n if ((controlCode >= 30 && controlCode <= 39) || (controlCode >= 90 && controlCode <= 97)) {\n state.lastForegroundAdded = controlChars[0];\n return;\n }\n if ((controlCode >= 40 && controlCode <= 49) || (controlCode >= 100 && controlCode <= 107)) {\n state.lastBackgroundAdded = controlChars[0];\n return;\n }\n if (controlCode === 0) {\n for (let i in state) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(state, i)) {\n delete state[i];\n }\n }\n return;\n }\n let info = codeCache[controlChars[0]];\n if (info) {\n state[info.set] = info.to;\n }\n}\n\nfunction readState(line) {\n let code = codeRegex(true);\n let controlChars = code.exec(line);\n let state = {};\n while (controlChars !== null) {\n updateState(state, controlChars);\n controlChars = code.exec(line);\n }\n return state;\n}\n\nfunction unwindState(state, ret) {\n let lastBackgroundAdded = state.lastBackgroundAdded;\n let lastForegroundAdded = state.lastForegroundAdded;\n\n delete state.lastBackgroundAdded;\n delete state.lastForegroundAdded;\n\n Object.keys(state).forEach(function (key) {\n if (state[key]) {\n ret += codeCache[key].off;\n }\n });\n\n if (lastBackgroundAdded && lastBackgroundAdded != '\\u001b[49m') {\n ret += '\\u001b[49m';\n }\n if (lastForegroundAdded && lastForegroundAdded != '\\u001b[39m') {\n ret += '\\u001b[39m';\n }\n\n return ret;\n}\n\nfunction rewindState(state, ret) {\n let lastBackgroundAdded = state.lastBackgroundAdded;\n let lastForegroundAdded = state.lastForegroundAdded;\n\n delete state.lastBackgroundAdded;\n delete state.lastForegroundAdded;\n\n Object.keys(state).forEach(function (key) {\n if (state[key]) {\n ret = codeCache[key].on + ret;\n }\n });\n\n if (lastBackgroundAdded && lastBackgroundAdded != '\\u001b[49m') {\n ret = lastBackgroundAdded + ret;\n }\n if (lastForegroundAdded && lastForegroundAdded != '\\u001b[39m') {\n ret = lastForegroundAdded + ret;\n }\n\n return ret;\n}\n\nfunction truncateWidth(str, desiredLength) {\n if (str.length === strlen(str)) {\n return str.substr(0, desiredLength);\n }\n\n while (strlen(str) > desiredLength) {\n str = str.slice(0, -1);\n }\n\n return str;\n}\n\nfunction truncateWidthWithAnsi(str, desiredLength) {\n let code = codeRegex(true);\n let split = str.split(codeRegex());\n let splitIndex = 0;\n let retLen = 0;\n let ret = '';\n let myArray;\n let state = {};\n\n while (retLen < desiredLength) {\n myArray = code.exec(str);\n let toAdd = split[splitIndex];\n splitIndex++;\n if (retLen + strlen(toAdd) > desiredLength) {\n toAdd = truncateWidth(toAdd, desiredLength - retLen);\n }\n ret += toAdd;\n retLen += strlen(toAdd);\n\n if (retLen < desiredLength) {\n if (!myArray) {\n break;\n } // full-width chars may cause a whitespace which cannot be filled\n ret += myArray[0];\n updateState(state, myArray);\n }\n }\n\n return unwindState(state, ret);\n}\n\nfunction truncate(str, desiredLength, truncateChar) {\n truncateChar = truncateChar || '…';\n let lengthOfStr = strlen(str);\n if (lengthOfStr <= desiredLength) {\n return str;\n }\n desiredLength -= strlen(truncateChar);\n\n let ret = truncateWidthWithAnsi(str, desiredLength);\n\n ret += truncateChar;\n\n const hrefTag = '\\x1B]8;;\\x07';\n\n if (str.includes(hrefTag) && !ret.includes(hrefTag)) {\n ret += hrefTag;\n }\n\n return ret;\n}\n\nfunction defaultOptions() {\n return {\n chars: {\n top: '─',\n 'top-mid': '┬',\n 'top-left': '┌',\n 'top-right': '┐',\n bottom: '─',\n 'bottom-mid': '┴',\n 'bottom-left': '└',\n 'bottom-right': '┘',\n left: '│',\n 'left-mid': '├',\n mid: '─',\n 'mid-mid': '┼',\n right: '│',\n 'right-mid': '┤',\n middle: '│',\n },\n truncate: '…',\n colWidths: [],\n rowHeights: [],\n colAligns: [],\n rowAligns: [],\n style: {\n 'padding-left': 1,\n 'padding-right': 1,\n head: ['red'],\n border: ['grey'],\n compact: false,\n },\n head: [],\n };\n}\n\nfunction mergeOptions(options, defaults) {\n options = options || {};\n defaults = defaults || defaultOptions();\n let ret = Object.assign({}, defaults, options);\n ret.chars = Object.assign({}, defaults.chars, options.chars);\n ret.style = Object.assign({}, defaults.style, options.style);\n return ret;\n}\n\n// Wrap on word boundary\nfunction wordWrap(maxLength, input) {\n let lines = [];\n let split = input.split(/(\\s+)/g);\n let line = [];\n let lineLength = 0;\n let whitespace;\n for (let i = 0; i < split.length; i += 2) {\n let word = split[i];\n let newLength = lineLength + strlen(word);\n if (lineLength > 0 && whitespace) {\n newLength += whitespace.length;\n }\n if (newLength > maxLength) {\n if (lineLength !== 0) {\n lines.push(line.join(''));\n }\n line = [word];\n lineLength = strlen(word);\n } else {\n line.push(whitespace || '', word);\n lineLength = newLength;\n }\n whitespace = split[i + 1];\n }\n if (lineLength) {\n lines.push(line.join(''));\n }\n return lines;\n}\n\n// Wrap text (ignoring word boundaries)\nfunction textWrap(maxLength, input) {\n let lines = [];\n let line = '';\n function pushLine(str, ws) {\n if (line.length && ws) line += ws;\n line += str;\n while (line.length > maxLength) {\n lines.push(line.slice(0, maxLength));\n line = line.slice(maxLength);\n }\n }\n let split = input.split(/(\\s+)/g);\n for (let i = 0; i < split.length; i += 2) {\n pushLine(split[i], i && split[i - 1]);\n }\n if (line.length) lines.push(line);\n return lines;\n}\n\nfunction multiLineWordWrap(maxLength, input, wrapOnWordBoundary = true) {\n let output = [];\n input = input.split('\\n');\n const handler = wrapOnWordBoundary ? wordWrap : textWrap;\n for (let i = 0; i < input.length; i++) {\n output.push.apply(output, handler(maxLength, input[i]));\n }\n return output;\n}\n\nfunction colorizeLines(input) {\n let state = {};\n let output = [];\n for (let i = 0; i < input.length; i++) {\n let line = rewindState(state, input[i]);\n state = readState(line);\n let temp = Object.assign({}, state);\n output.push(unwindState(temp, line));\n }\n return output;\n}\n\n/**\n * Credit: Matheus Sampaio https://github.com/matheussampaio\n */\nfunction hyperlink(url, text) {\n const OSC = '\\u001B]';\n const BEL = '\\u0007';\n const SEP = ';';\n\n return [OSC, '8', SEP, SEP, url || text, BEL, text, OSC, '8', SEP, SEP, BEL].join('');\n}\n\nmodule.exports = {\n strlen: strlen,\n repeat: repeat,\n pad: pad,\n truncate: truncate,\n mergeOptions: mergeOptions,\n wordWrap: multiLineWordWrap,\n colorizeLines: colorizeLines,\n hyperlink,\n};\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar styles = {};\nmodule['exports'] = styles;\n\nvar codes = {\n reset: [0, 0],\n\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n grey: [90, 39],\n\n brightRed: [91, 39],\n brightGreen: [92, 39],\n brightYellow: [93, 39],\n brightBlue: [94, 39],\n brightMagenta: [95, 39],\n brightCyan: [96, 39],\n brightWhite: [97, 39],\n\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n bgGray: [100, 49],\n bgGrey: [100, 49],\n\n bgBrightRed: [101, 49],\n bgBrightGreen: [102, 49],\n bgBrightYellow: [103, 49],\n bgBrightBlue: [104, 49],\n bgBrightMagenta: [105, 49],\n bgBrightCyan: [106, 49],\n bgBrightWhite: [107, 49],\n\n // legacy styles for colors pre v1.0.0\n blackBG: [40, 49],\n redBG: [41, 49],\n greenBG: [42, 49],\n yellowBG: [43, 49],\n blueBG: [44, 49],\n magentaBG: [45, 49],\n cyanBG: [46, 49],\n whiteBG: [47, 49],\n\n};\n\nObject.keys(codes).forEach(function(key) {\n var val = codes[key];\n var style = styles[key] = [];\n style.open = '\\u001b[' + val[0] + 'm';\n style.close = '\\u001b[' + val[1] + 'm';\n});\n","/*\nMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n'use strict';\n\nmodule.exports = function(flag, argv) {\n argv = argv || process.argv;\n\n var terminatorPos = argv.indexOf('--');\n var prefix = /^-{1,2}/.test(flag) ? '' : '--';\n var pos = argv.indexOf(prefix + flag);\n\n return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\n'use strict';\n\nvar os = require('os');\nvar hasFlag = require('./has-flag.js');\n\nvar env = process.env;\n\nvar forceColor = void 0;\nif (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) {\n forceColor = false;\n} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true')\n || hasFlag('color=always')) {\n forceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n forceColor = env.FORCE_COLOR.length === 0\n || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n if (level === 0) {\n return false;\n }\n\n return {\n level: level,\n hasBasic: true,\n has256: level >= 2,\n has16m: level >= 3,\n };\n}\n\nfunction supportsColor(stream) {\n if (forceColor === false) {\n return 0;\n }\n\n if (hasFlag('color=16m') || hasFlag('color=full')\n || hasFlag('color=truecolor')) {\n return 3;\n }\n\n if (hasFlag('color=256')) {\n return 2;\n }\n\n if (stream && !stream.isTTY && forceColor !== true) {\n return 0;\n }\n\n var min = forceColor ? 1 : 0;\n\n if (process.platform === 'win32') {\n // Node.js 7.5.0 is the first version of Node.js to include a patch to\n // libuv that enables 256 color output on Windows. Anything earlier and it\n // won't work. However, here we target Node.js 8 at minimum as it is an LTS\n // release, and Node.js 7 is not. Windows 10 build 10586 is the first\n // Windows release that supports 256 colors. Windows 10 build 14931 is the\n // first release that supports 16m/TrueColor.\n var osRelease = os.release().split('.');\n if (Number(process.versions.node.split('.')[0]) >= 8\n && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {\n return Number(osRelease[2]) >= 14931 ? 3 : 2;\n }\n\n return 1;\n }\n\n if ('CI' in env) {\n if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) {\n return sign in env;\n }) || env.CI_NAME === 'codeship') {\n return 1;\n }\n\n return min;\n }\n\n if ('TEAMCITY_VERSION' in env) {\n return (/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0\n );\n }\n\n if ('TERM_PROGRAM' in env) {\n var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n switch (env.TERM_PROGRAM) {\n case 'iTerm.app':\n return version >= 3 ? 3 : 2;\n case 'Hyper':\n return 3;\n case 'Apple_Terminal':\n return 2;\n // No default\n }\n }\n\n if (/-256(color)?$/i.test(env.TERM)) {\n return 2;\n }\n\n if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n return 1;\n }\n\n if ('COLORTERM' in env) {\n return 1;\n }\n\n if (env.TERM === 'dumb') {\n return min;\n }\n\n return min;\n}\n\nfunction getSupportLevel(stream) {\n var level = supportsColor(stream);\n return translateLevel(level);\n}\n\nmodule.exports = {\n supportsColor: getSupportLevel,\n stdout: getSupportLevel(process.stdout),\n stderr: getSupportLevel(process.stderr),\n};\n","module['exports'] = function runTheTrap(text, options) {\n var result = '';\n text = text || 'Run the trap, drop the bass';\n text = text.split('');\n var trap = {\n a: ['\\u0040', '\\u0104', '\\u023a', '\\u0245', '\\u0394', '\\u039b', '\\u0414'],\n b: ['\\u00df', '\\u0181', '\\u0243', '\\u026e', '\\u03b2', '\\u0e3f'],\n c: ['\\u00a9', '\\u023b', '\\u03fe'],\n d: ['\\u00d0', '\\u018a', '\\u0500', '\\u0501', '\\u0502', '\\u0503'],\n e: ['\\u00cb', '\\u0115', '\\u018e', '\\u0258', '\\u03a3', '\\u03be', '\\u04bc',\n '\\u0a6c'],\n f: ['\\u04fa'],\n g: ['\\u0262'],\n h: ['\\u0126', '\\u0195', '\\u04a2', '\\u04ba', '\\u04c7', '\\u050a'],\n i: ['\\u0f0f'],\n j: ['\\u0134'],\n k: ['\\u0138', '\\u04a0', '\\u04c3', '\\u051e'],\n l: ['\\u0139'],\n m: ['\\u028d', '\\u04cd', '\\u04ce', '\\u0520', '\\u0521', '\\u0d69'],\n n: ['\\u00d1', '\\u014b', '\\u019d', '\\u0376', '\\u03a0', '\\u048a'],\n o: ['\\u00d8', '\\u00f5', '\\u00f8', '\\u01fe', '\\u0298', '\\u047a', '\\u05dd',\n '\\u06dd', '\\u0e4f'],\n p: ['\\u01f7', '\\u048e'],\n q: ['\\u09cd'],\n r: ['\\u00ae', '\\u01a6', '\\u0210', '\\u024c', '\\u0280', '\\u042f'],\n s: ['\\u00a7', '\\u03de', '\\u03df', '\\u03e8'],\n t: ['\\u0141', '\\u0166', '\\u0373'],\n u: ['\\u01b1', '\\u054d'],\n v: ['\\u05d8'],\n w: ['\\u0428', '\\u0460', '\\u047c', '\\u0d70'],\n x: ['\\u04b2', '\\u04fe', '\\u04fc', '\\u04fd'],\n y: ['\\u00a5', '\\u04b0', '\\u04cb'],\n z: ['\\u01b5', '\\u0240'],\n };\n text.forEach(function(c) {\n c = c.toLowerCase();\n var chars = trap[c] || [' '];\n var rand = Math.floor(Math.random() * chars.length);\n if (typeof trap[c] !== 'undefined') {\n result += trap[c][rand];\n } else {\n result += c;\n }\n });\n return result;\n};\n","// please no\nmodule['exports'] = function zalgo(text, options) {\n text = text || ' he is here ';\n var soul = {\n 'up': [\n '̍', '̎', '̄', '̅',\n '̿', '̑', '̆', '̐',\n '͒', '͗', '͑', '̇',\n '̈', '̊', '͂', '̓',\n '̈', '͊', '͋', '͌',\n '̃', '̂', '̌', '͐',\n '̀', '́', '̋', '̏',\n '̒', '̓', '̔', '̽',\n '̉', 'ͣ', 'ͤ', 'ͥ',\n 'ͦ', 'ͧ', 'ͨ', 'ͩ',\n 'ͪ', 'ͫ', 'ͬ', 'ͭ',\n 'ͮ', 'ͯ', '̾', '͛',\n '͆', '̚',\n ],\n 'down': [\n '̖', '̗', '̘', '̙',\n '̜', '̝', '̞', '̟',\n '̠', '̤', '̥', '̦',\n '̩', '̪', '̫', '̬',\n '̭', '̮', '̯', '̰',\n '̱', '̲', '̳', '̹',\n '̺', '̻', '̼', 'ͅ',\n '͇', '͈', '͉', '͍',\n '͎', '͓', '͔', '͕',\n '͖', '͙', '͚', '̣',\n ],\n 'mid': [\n '̕', '̛', '̀', '́',\n '͘', '̡', '̢', '̧',\n '̨', '̴', '̵', '̶',\n '͜', '͝', '͞',\n '͟', '͠', '͢', '̸',\n '̷', '͡', ' ҉',\n ],\n };\n var all = [].concat(soul.up, soul.down, soul.mid);\n\n function randomNumber(range) {\n var r = Math.floor(Math.random() * range);\n return r;\n }\n\n function isChar(character) {\n var bool = false;\n all.filter(function(i) {\n bool = (i === character);\n });\n return bool;\n }\n\n\n function heComes(text, options) {\n var result = '';\n var counts;\n var l;\n options = options || {};\n options['up'] =\n typeof options['up'] !== 'undefined' ? options['up'] : true;\n options['mid'] =\n typeof options['mid'] !== 'undefined' ? options['mid'] : true;\n options['down'] =\n typeof options['down'] !== 'undefined' ? options['down'] : true;\n options['size'] =\n typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';\n text = text.split('');\n for (l in text) {\n if (isChar(l)) {\n continue;\n }\n result = result + text[l];\n counts = {'up': 0, 'down': 0, 'mid': 0};\n switch (options.size) {\n case 'mini':\n counts.up = randomNumber(8);\n counts.mid = randomNumber(2);\n counts.down = randomNumber(8);\n break;\n case 'maxi':\n counts.up = randomNumber(16) + 3;\n counts.mid = randomNumber(4) + 1;\n counts.down = randomNumber(64) + 3;\n break;\n default:\n counts.up = randomNumber(8) + 1;\n counts.mid = randomNumber(6) / 2;\n counts.down = randomNumber(8) + 1;\n break;\n }\n\n var arr = ['up', 'mid', 'down'];\n for (var d in arr) {\n var index = arr[d];\n for (var i = 0; i <= counts[index]; i++) {\n if (options[index]) {\n result = result + soul[index][randomNumber(soul[index].length)];\n }\n }\n }\n }\n return result;\n }\n // don't summon him\n return heComes(text, options);\n};\n\n","module['exports'] = function(colors) {\n return function(letter, i, exploded) {\n if (letter === ' ') return letter;\n switch (i%3) {\n case 0: return colors.red(letter);\n case 1: return colors.white(letter);\n case 2: return colors.blue(letter);\n }\n };\n};\n","module['exports'] = function(colors) {\n return function(letter, i, exploded) {\n return i % 2 === 0 ? letter : colors.inverse(letter);\n };\n};\n","module['exports'] = function(colors) {\n // RoY G BiV\n var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];\n return function(letter, i, exploded) {\n if (letter === ' ') {\n return letter;\n } else {\n return colors[rainbowColors[i++ % rainbowColors.length]](letter);\n }\n };\n};\n\n","module['exports'] = function(colors) {\n var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',\n 'blue', 'white', 'cyan', 'magenta', 'brightYellow', 'brightRed',\n 'brightGreen', 'brightBlue', 'brightWhite', 'brightCyan', 'brightMagenta'];\n return function(letter, i, exploded) {\n return letter === ' ' ? letter :\n colors[\n available[Math.round(Math.random() * (available.length - 2))]\n ](letter);\n };\n};\n","/*\n\nThe MIT License (MIT)\n\nOriginal Library\n - Copyright (c) Marak Squires\n\nAdditional functionality\n - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar colors = {};\nmodule['exports'] = colors;\n\ncolors.themes = {};\n\nvar util = require('util');\nvar ansiStyles = colors.styles = require('./styles');\nvar defineProps = Object.defineProperties;\nvar newLineRegex = new RegExp(/[\\r\\n]+/g);\n\ncolors.supportsColor = require('./system/supports-colors').supportsColor;\n\nif (typeof colors.enabled === 'undefined') {\n colors.enabled = colors.supportsColor() !== false;\n}\n\ncolors.enable = function() {\n colors.enabled = true;\n};\n\ncolors.disable = function() {\n colors.enabled = false;\n};\n\ncolors.stripColors = colors.strip = function(str) {\n return ('' + str).replace(/\\x1B\\[\\d+m/g, '');\n};\n\n// eslint-disable-next-line no-unused-vars\nvar stylize = colors.stylize = function stylize(str, style) {\n if (!colors.enabled) {\n return str+'';\n }\n\n var styleMap = ansiStyles[style];\n\n // Stylize should work for non-ANSI styles, too\n if (!styleMap && style in colors) {\n // Style maps like trap operate as functions on strings;\n // they don't have properties like open or close.\n return colors[style](str);\n }\n\n return styleMap.open + str + styleMap.close;\n};\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\nvar escapeStringRegexp = function(str) {\n if (typeof str !== 'string') {\n throw new TypeError('Expected a string');\n }\n return str.replace(matchOperatorsRe, '\\\\$&');\n};\n\nfunction build(_styles) {\n var builder = function builder() {\n return applyStyle.apply(builder, arguments);\n };\n builder._styles = _styles;\n // __proto__ is used because we must return a function, but there is\n // no way to create a function with a different prototype.\n builder.__proto__ = proto;\n return builder;\n}\n\nvar styles = (function() {\n var ret = {};\n ansiStyles.grey = ansiStyles.gray;\n Object.keys(ansiStyles).forEach(function(key) {\n ansiStyles[key].closeRe =\n new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n ret[key] = {\n get: function() {\n return build(this._styles.concat(key));\n },\n };\n });\n return ret;\n})();\n\nvar proto = defineProps(function colors() {}, styles);\n\nfunction applyStyle() {\n var args = Array.prototype.slice.call(arguments);\n\n var str = args.map(function(arg) {\n // Use weak equality check so we can colorize null/undefined in safe mode\n if (arg != null && arg.constructor === String) {\n return arg;\n } else {\n return util.inspect(arg);\n }\n }).join(' ');\n\n if (!colors.enabled || !str) {\n return str;\n }\n\n var newLinesPresent = str.indexOf('\\n') != -1;\n\n var nestedStyles = this._styles;\n\n var i = nestedStyles.length;\n while (i--) {\n var code = ansiStyles[nestedStyles[i]];\n str = code.open + str.replace(code.closeRe, code.open) + code.close;\n if (newLinesPresent) {\n str = str.replace(newLineRegex, function(match) {\n return code.close + match + code.open;\n });\n }\n }\n\n return str;\n}\n\ncolors.setTheme = function(theme) {\n if (typeof theme === 'string') {\n console.log('colors.setTheme now only accepts an object, not a string. ' +\n 'If you are trying to set a theme from a file, it is now your (the ' +\n 'caller\\'s) responsibility to require the file. The old syntax ' +\n 'looked like colors.setTheme(__dirname + ' +\n '\\'/../themes/generic-logging.js\\'); The new syntax looks like '+\n 'colors.setTheme(require(__dirname + ' +\n '\\'/../themes/generic-logging.js\\'));');\n return;\n }\n for (var style in theme) {\n (function(style) {\n colors[style] = function(str) {\n if (typeof theme[style] === 'object') {\n var out = str;\n for (var i in theme[style]) {\n out = colors[theme[style][i]](out);\n }\n return out;\n }\n return colors[theme[style]](str);\n };\n })(style);\n }\n};\n\nfunction init() {\n var ret = {};\n Object.keys(styles).forEach(function(name) {\n ret[name] = {\n get: function() {\n return build([name]);\n },\n };\n });\n return ret;\n}\n\nvar sequencer = function sequencer(map, str) {\n var exploded = str.split('');\n exploded = exploded.map(map);\n return exploded.join('');\n};\n\n// custom formatter methods\ncolors.trap = require('./custom/trap');\ncolors.zalgo = require('./custom/zalgo');\n\n// maps\ncolors.maps = {};\ncolors.maps.america = require('./maps/america')(colors);\ncolors.maps.zebra = require('./maps/zebra')(colors);\ncolors.maps.rainbow = require('./maps/rainbow')(colors);\ncolors.maps.random = require('./maps/random')(colors);\n\nfor (var map in colors.maps) {\n (function(map) {\n colors[map] = function(str) {\n return sequencer(colors.maps[map], str);\n };\n })(map);\n}\n\ndefineProps(colors, init());\n","//\n// Remark: Requiring this file will use the \"safe\" colors API,\n// which will not touch String.prototype.\n//\n// var colors = require('colors/safe');\n// colors.red(\"foo\")\n//\n//\nvar colors = require('./lib/colors');\nmodule['exports'] = colors;\n","const { info, debug } = require('./debug');\nconst utils = require('./utils');\n\nclass Cell {\n /**\n * A representation of a cell within the table.\n * Implementations must have `init` and `draw` methods,\n * as well as `colSpan`, `rowSpan`, `desiredHeight` and `desiredWidth` properties.\n * @param options\n * @constructor\n */\n constructor(options) {\n this.setOptions(options);\n\n /**\n * Each cell will have it's `x` and `y` values set by the `layout-manager` prior to\n * `init` being called;\n * @type {Number}\n */\n this.x = null;\n this.y = null;\n }\n\n setOptions(options) {\n if (['boolean', 'number', 'bigint', 'string'].indexOf(typeof options) !== -1) {\n options = { content: '' + options };\n }\n options = options || {};\n this.options = options;\n let content = options.content;\n if (['boolean', 'number', 'bigint', 'string'].indexOf(typeof content) !== -1) {\n this.content = String(content);\n } else if (!content) {\n this.content = this.options.href || '';\n } else {\n throw new Error('Content needs to be a primitive, got: ' + typeof content);\n }\n this.colSpan = options.colSpan || 1;\n this.rowSpan = options.rowSpan || 1;\n if (this.options.href) {\n Object.defineProperty(this, 'href', {\n get() {\n return this.options.href;\n },\n });\n }\n }\n\n mergeTableOptions(tableOptions, cells) {\n this.cells = cells;\n\n let optionsChars = this.options.chars || {};\n let tableChars = tableOptions.chars;\n let chars = (this.chars = {});\n CHAR_NAMES.forEach(function (name) {\n setOption(optionsChars, tableChars, name, chars);\n });\n\n this.truncate = this.options.truncate || tableOptions.truncate;\n\n let style = (this.options.style = this.options.style || {});\n let tableStyle = tableOptions.style;\n setOption(style, tableStyle, 'padding-left', this);\n setOption(style, tableStyle, 'padding-right', this);\n this.head = style.head || tableStyle.head;\n this.border = style.border || tableStyle.border;\n\n this.fixedWidth = tableOptions.colWidths[this.x];\n this.lines = this.computeLines(tableOptions);\n\n this.desiredWidth = utils.strlen(this.content) + this.paddingLeft + this.paddingRight;\n this.desiredHeight = this.lines.length;\n }\n\n computeLines(tableOptions) {\n const tableWordWrap = tableOptions.wordWrap || tableOptions.textWrap;\n const { wordWrap = tableWordWrap } = this.options;\n if (this.fixedWidth && wordWrap) {\n this.fixedWidth -= this.paddingLeft + this.paddingRight;\n if (this.colSpan) {\n let i = 1;\n while (i < this.colSpan) {\n this.fixedWidth += tableOptions.colWidths[this.x + i];\n i++;\n }\n }\n const { wrapOnWordBoundary: tableWrapOnWordBoundary = true } = tableOptions;\n const { wrapOnWordBoundary = tableWrapOnWordBoundary } = this.options;\n return this.wrapLines(utils.wordWrap(this.fixedWidth, this.content, wrapOnWordBoundary));\n }\n return this.wrapLines(this.content.split('\\n'));\n }\n\n wrapLines(computedLines) {\n const lines = utils.colorizeLines(computedLines);\n if (this.href) {\n return lines.map((line) => utils.hyperlink(this.href, line));\n }\n return lines;\n }\n\n /**\n * Initializes the Cells data structure.\n *\n * @param tableOptions - A fully populated set of tableOptions.\n * In addition to the standard default values, tableOptions must have fully populated the\n * `colWidths` and `rowWidths` arrays. Those arrays must have lengths equal to the number\n * of columns or rows (respectively) in this table, and each array item must be a Number.\n *\n */\n init(tableOptions) {\n let x = this.x;\n let y = this.y;\n this.widths = tableOptions.colWidths.slice(x, x + this.colSpan);\n this.heights = tableOptions.rowHeights.slice(y, y + this.rowSpan);\n this.width = this.widths.reduce(sumPlusOne, -1);\n this.height = this.heights.reduce(sumPlusOne, -1);\n\n this.hAlign = this.options.hAlign || tableOptions.colAligns[x];\n this.vAlign = this.options.vAlign || tableOptions.rowAligns[y];\n\n this.drawRight = x + this.colSpan == tableOptions.colWidths.length;\n }\n\n /**\n * Draws the given line of the cell.\n * This default implementation defers to methods `drawTop`, `drawBottom`, `drawLine` and `drawEmpty`.\n * @param lineNum - can be `top`, `bottom` or a numerical line number.\n * @param spanningCell - will be a number if being called from a RowSpanCell, and will represent how\n * many rows below it's being called from. Otherwise it's undefined.\n * @returns {String} The representation of this line.\n */\n draw(lineNum, spanningCell) {\n if (lineNum == 'top') return this.drawTop(this.drawRight);\n if (lineNum == 'bottom') return this.drawBottom(this.drawRight);\n let content = utils.truncate(this.content, 10, this.truncate);\n if (!lineNum) {\n info(`${this.y}-${this.x}: ${this.rowSpan - lineNum}x${this.colSpan} Cell ${content}`);\n } else {\n // debug(`${lineNum}-${this.x}: 1x${this.colSpan} RowSpanCell ${content}`);\n }\n let padLen = Math.max(this.height - this.lines.length, 0);\n let padTop;\n switch (this.vAlign) {\n case 'center':\n padTop = Math.ceil(padLen / 2);\n break;\n case 'bottom':\n padTop = padLen;\n break;\n default:\n padTop = 0;\n }\n if (lineNum < padTop || lineNum >= padTop + this.lines.length) {\n return this.drawEmpty(this.drawRight, spanningCell);\n }\n let forceTruncation = this.lines.length > this.height && lineNum + 1 >= this.height;\n return this.drawLine(lineNum - padTop, this.drawRight, forceTruncation, spanningCell);\n }\n\n /**\n * Renders the top line of the cell.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @returns {String}\n */\n drawTop(drawRight) {\n let content = [];\n if (this.cells) {\n //TODO: cells should always exist - some tests don't fill it in though\n this.widths.forEach(function (width, index) {\n content.push(this._topLeftChar(index));\n content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], width));\n }, this);\n } else {\n content.push(this._topLeftChar(0));\n content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], this.width));\n }\n if (drawRight) {\n content.push(this.chars[this.y == 0 ? 'topRight' : 'rightMid']);\n }\n return this.wrapWithStyleColors('border', content.join(''));\n }\n\n _topLeftChar(offset) {\n let x = this.x + offset;\n let leftChar;\n if (this.y == 0) {\n leftChar = x == 0 ? 'topLeft' : offset == 0 ? 'topMid' : 'top';\n } else {\n if (x == 0) {\n leftChar = 'leftMid';\n } else {\n leftChar = offset == 0 ? 'midMid' : 'bottomMid';\n if (this.cells) {\n //TODO: cells should always exist - some tests don't fill it in though\n let spanAbove = this.cells[this.y - 1][x] instanceof Cell.ColSpanCell;\n if (spanAbove) {\n leftChar = offset == 0 ? 'topMid' : 'mid';\n }\n if (offset == 0) {\n let i = 1;\n while (this.cells[this.y][x - i] instanceof Cell.ColSpanCell) {\n i++;\n }\n if (this.cells[this.y][x - i] instanceof Cell.RowSpanCell) {\n leftChar = 'leftMid';\n }\n }\n }\n }\n }\n return this.chars[leftChar];\n }\n\n wrapWithStyleColors(styleProperty, content) {\n if (this[styleProperty] && this[styleProperty].length) {\n try {\n let colors = require('@colors/colors/safe');\n for (let i = this[styleProperty].length - 1; i >= 0; i--) {\n colors = colors[this[styleProperty][i]];\n }\n return colors(content);\n } catch (e) {\n return content;\n }\n } else {\n return content;\n }\n }\n\n /**\n * Renders a line of text.\n * @param lineNum - Which line of text to render. This is not necessarily the line within the cell.\n * There may be top-padding above the first line of text.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @param forceTruncationSymbol - `true` if the rendered text should end with the truncation symbol even\n * if the text fits. This is used when the cell is vertically truncated. If `false` the text should\n * only include the truncation symbol if the text will not fit horizontally within the cell width.\n * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.\n * @returns {String}\n */\n drawLine(lineNum, drawRight, forceTruncationSymbol, spanningCell) {\n let left = this.chars[this.x == 0 ? 'left' : 'middle'];\n if (this.x && spanningCell && this.cells) {\n let cellLeft = this.cells[this.y + spanningCell][this.x - 1];\n while (cellLeft instanceof ColSpanCell) {\n cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];\n }\n if (!(cellLeft instanceof RowSpanCell)) {\n left = this.chars['rightMid'];\n }\n }\n let leftPadding = utils.repeat(' ', this.paddingLeft);\n let right = drawRight ? this.chars['right'] : '';\n let rightPadding = utils.repeat(' ', this.paddingRight);\n let line = this.lines[lineNum];\n let len = this.width - (this.paddingLeft + this.paddingRight);\n if (forceTruncationSymbol) line += this.truncate || '…';\n let content = utils.truncate(line, len, this.truncate);\n content = utils.pad(content, len, ' ', this.hAlign);\n content = leftPadding + content + rightPadding;\n return this.stylizeLine(left, content, right);\n }\n\n stylizeLine(left, content, right) {\n left = this.wrapWithStyleColors('border', left);\n right = this.wrapWithStyleColors('border', right);\n if (this.y === 0) {\n content = this.wrapWithStyleColors('head', content);\n }\n return left + content + right;\n }\n\n /**\n * Renders the bottom line of the cell.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @returns {String}\n */\n drawBottom(drawRight) {\n let left = this.chars[this.x == 0 ? 'bottomLeft' : 'bottomMid'];\n let content = utils.repeat(this.chars.bottom, this.width);\n let right = drawRight ? this.chars['bottomRight'] : '';\n return this.wrapWithStyleColors('border', left + content + right);\n }\n\n /**\n * Renders a blank line of text within the cell. Used for top and/or bottom padding.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.\n * @returns {String}\n */\n drawEmpty(drawRight, spanningCell) {\n let left = this.chars[this.x == 0 ? 'left' : 'middle'];\n if (this.x && spanningCell && this.cells) {\n let cellLeft = this.cells[this.y + spanningCell][this.x - 1];\n while (cellLeft instanceof ColSpanCell) {\n cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];\n }\n if (!(cellLeft instanceof RowSpanCell)) {\n left = this.chars['rightMid'];\n }\n }\n let right = drawRight ? this.chars['right'] : '';\n let content = utils.repeat(' ', this.width);\n return this.stylizeLine(left, content, right);\n }\n}\n\nclass ColSpanCell {\n /**\n * A Cell that doesn't do anything. It just draws empty lines.\n * Used as a placeholder in column spanning.\n * @constructor\n */\n constructor() {}\n\n draw(lineNum) {\n if (typeof lineNum === 'number') {\n debug(`${this.y}-${this.x}: 1x1 ColSpanCell`);\n }\n return '';\n }\n\n init() {}\n\n mergeTableOptions() {}\n}\n\nclass RowSpanCell {\n /**\n * A placeholder Cell for a Cell that spans multiple rows.\n * It delegates rendering to the original cell, but adds the appropriate offset.\n * @param originalCell\n * @constructor\n */\n constructor(originalCell) {\n this.originalCell = originalCell;\n }\n\n init(tableOptions) {\n let y = this.y;\n let originalY = this.originalCell.y;\n this.cellOffset = y - originalY;\n this.offset = findDimension(tableOptions.rowHeights, originalY, this.cellOffset);\n }\n\n draw(lineNum) {\n if (lineNum == 'top') {\n return this.originalCell.draw(this.offset, this.cellOffset);\n }\n if (lineNum == 'bottom') {\n return this.originalCell.draw('bottom');\n }\n debug(`${this.y}-${this.x}: 1x${this.colSpan} RowSpanCell for ${this.originalCell.content}`);\n return this.originalCell.draw(this.offset + 1 + lineNum);\n }\n\n mergeTableOptions() {}\n}\n\nfunction firstDefined(...args) {\n return args.filter((v) => v !== undefined && v !== null).shift();\n}\n\n// HELPER FUNCTIONS\nfunction setOption(objA, objB, nameB, targetObj) {\n let nameA = nameB.split('-');\n if (nameA.length > 1) {\n nameA[1] = nameA[1].charAt(0).toUpperCase() + nameA[1].substr(1);\n nameA = nameA.join('');\n targetObj[nameA] = firstDefined(objA[nameA], objA[nameB], objB[nameA], objB[nameB]);\n } else {\n targetObj[nameB] = firstDefined(objA[nameB], objB[nameB]);\n }\n}\n\nfunction findDimension(dimensionTable, startingIndex, span) {\n let ret = dimensionTable[startingIndex];\n for (let i = 1; i < span; i++) {\n ret += 1 + dimensionTable[startingIndex + i];\n }\n return ret;\n}\n\nfunction sumPlusOne(a, b) {\n return a + b + 1;\n}\n\nlet CHAR_NAMES = [\n 'top',\n 'top-mid',\n 'top-left',\n 'top-right',\n 'bottom',\n 'bottom-mid',\n 'bottom-left',\n 'bottom-right',\n 'left',\n 'left-mid',\n 'mid',\n 'mid-mid',\n 'right',\n 'right-mid',\n 'middle',\n];\n\nmodule.exports = Cell;\nmodule.exports.ColSpanCell = ColSpanCell;\nmodule.exports.RowSpanCell = RowSpanCell;\n","const { warn, debug } = require('./debug');\nconst Cell = require('./cell');\nconst { ColSpanCell, RowSpanCell } = Cell;\n\n(function () {\n function next(alloc, col) {\n if (alloc[col] > 0) {\n return next(alloc, col + 1);\n }\n return col;\n }\n\n function layoutTable(table) {\n let alloc = {};\n table.forEach(function (row, rowIndex) {\n let col = 0;\n row.forEach(function (cell) {\n cell.y = rowIndex;\n // Avoid erroneous call to next() on first row\n cell.x = rowIndex ? next(alloc, col) : col;\n const rowSpan = cell.rowSpan || 1;\n const colSpan = cell.colSpan || 1;\n if (rowSpan > 1) {\n for (let cs = 0; cs < colSpan; cs++) {\n alloc[cell.x + cs] = rowSpan;\n }\n }\n col = cell.x + colSpan;\n });\n Object.keys(alloc).forEach((idx) => {\n alloc[idx]--;\n if (alloc[idx] < 1) delete alloc[idx];\n });\n });\n }\n\n function maxWidth(table) {\n let mw = 0;\n table.forEach(function (row) {\n row.forEach(function (cell) {\n mw = Math.max(mw, cell.x + (cell.colSpan || 1));\n });\n });\n return mw;\n }\n\n function maxHeight(table) {\n return table.length;\n }\n\n function cellsConflict(cell1, cell2) {\n let yMin1 = cell1.y;\n let yMax1 = cell1.y - 1 + (cell1.rowSpan || 1);\n let yMin2 = cell2.y;\n let yMax2 = cell2.y - 1 + (cell2.rowSpan || 1);\n let yConflict = !(yMin1 > yMax2 || yMin2 > yMax1);\n\n let xMin1 = cell1.x;\n let xMax1 = cell1.x - 1 + (cell1.colSpan || 1);\n let xMin2 = cell2.x;\n let xMax2 = cell2.x - 1 + (cell2.colSpan || 1);\n let xConflict = !(xMin1 > xMax2 || xMin2 > xMax1);\n\n return yConflict && xConflict;\n }\n\n function conflictExists(rows, x, y) {\n let i_max = Math.min(rows.length - 1, y);\n let cell = { x: x, y: y };\n for (let i = 0; i <= i_max; i++) {\n let row = rows[i];\n for (let j = 0; j < row.length; j++) {\n if (cellsConflict(cell, row[j])) {\n return true;\n }\n }\n }\n return false;\n }\n\n function allBlank(rows, y, xMin, xMax) {\n for (let x = xMin; x < xMax; x++) {\n if (conflictExists(rows, x, y)) {\n return false;\n }\n }\n return true;\n }\n\n function addRowSpanCells(table) {\n table.forEach(function (row, rowIndex) {\n row.forEach(function (cell) {\n for (let i = 1; i < cell.rowSpan; i++) {\n let rowSpanCell = new RowSpanCell(cell);\n rowSpanCell.x = cell.x;\n rowSpanCell.y = cell.y + i;\n rowSpanCell.colSpan = cell.colSpan;\n insertCell(rowSpanCell, table[rowIndex + i]);\n }\n });\n });\n }\n\n function addColSpanCells(cellRows) {\n for (let rowIndex = cellRows.length - 1; rowIndex >= 0; rowIndex--) {\n let cellColumns = cellRows[rowIndex];\n for (let columnIndex = 0; columnIndex < cellColumns.length; columnIndex++) {\n let cell = cellColumns[columnIndex];\n for (let k = 1; k < cell.colSpan; k++) {\n let colSpanCell = new ColSpanCell();\n colSpanCell.x = cell.x + k;\n colSpanCell.y = cell.y;\n cellColumns.splice(columnIndex + 1, 0, colSpanCell);\n }\n }\n }\n }\n\n function insertCell(cell, row) {\n let x = 0;\n while (x < row.length && row[x].x < cell.x) {\n x++;\n }\n row.splice(x, 0, cell);\n }\n\n function fillInTable(table) {\n let h_max = maxHeight(table);\n let w_max = maxWidth(table);\n debug(`Max rows: ${h_max}; Max cols: ${w_max}`);\n for (let y = 0; y < h_max; y++) {\n for (let x = 0; x < w_max; x++) {\n if (!conflictExists(table, x, y)) {\n let opts = { x: x, y: y, colSpan: 1, rowSpan: 1 };\n x++;\n while (x < w_max && !conflictExists(table, x, y)) {\n opts.colSpan++;\n x++;\n }\n let y2 = y + 1;\n while (y2 < h_max && allBlank(table, y2, opts.x, opts.x + opts.colSpan)) {\n opts.rowSpan++;\n y2++;\n }\n let cell = new Cell(opts);\n cell.x = opts.x;\n cell.y = opts.y;\n warn(`Missing cell at ${cell.y}-${cell.x}.`);\n insertCell(cell, table[y]);\n }\n }\n }\n }\n\n function generateCells(rows) {\n return rows.map(function (row) {\n if (!Array.isArray(row)) {\n let key = Object.keys(row)[0];\n row = row[key];\n if (Array.isArray(row)) {\n row = row.slice();\n row.unshift(key);\n } else {\n row = [key, row];\n }\n }\n return row.map(function (cell) {\n return new Cell(cell);\n });\n });\n }\n\n function makeTableLayout(rows) {\n let cellRows = generateCells(rows);\n layoutTable(cellRows);\n fillInTable(cellRows);\n addRowSpanCells(cellRows);\n addColSpanCells(cellRows);\n return cellRows;\n }\n\n module.exports = {\n makeTableLayout: makeTableLayout,\n layoutTable: layoutTable,\n addRowSpanCells: addRowSpanCells,\n maxWidth: maxWidth,\n fillInTable: fillInTable,\n computeWidths: makeComputeWidths('colSpan', 'desiredWidth', 'x', 1),\n computeHeights: makeComputeWidths('rowSpan', 'desiredHeight', 'y', 1),\n };\n})();\n\nfunction makeComputeWidths(colSpan, desiredWidth, x, forcedMin) {\n return function (vals, table) {\n let result = [];\n let spanners = [];\n let auto = {};\n table.forEach(function (row) {\n row.forEach(function (cell) {\n if ((cell[colSpan] || 1) > 1) {\n spanners.push(cell);\n } else {\n result[cell[x]] = Math.max(result[cell[x]] || 0, cell[desiredWidth] || 0, forcedMin);\n }\n });\n });\n\n vals.forEach(function (val, index) {\n if (typeof val === 'number') {\n result[index] = val;\n }\n });\n\n //spanners.forEach(function(cell){\n for (let k = spanners.length - 1; k >= 0; k--) {\n let cell = spanners[k];\n let span = cell[colSpan];\n let col = cell[x];\n let existingWidth = result[col];\n let editableCols = typeof vals[col] === 'number' ? 0 : 1;\n if (typeof existingWidth === 'number') {\n for (let i = 1; i < span; i++) {\n existingWidth += 1 + result[col + i];\n if (typeof vals[col + i] !== 'number') {\n editableCols++;\n }\n }\n } else {\n existingWidth = desiredWidth === 'desiredWidth' ? cell.desiredWidth - 1 : 1;\n if (!auto[col] || auto[col] < existingWidth) {\n auto[col] = existingWidth;\n }\n }\n\n if (cell[desiredWidth] > existingWidth) {\n let i = 0;\n while (editableCols > 0 && cell[desiredWidth] > existingWidth) {\n if (typeof vals[col + i] !== 'number') {\n let dif = Math.round((cell[desiredWidth] - existingWidth) / editableCols);\n existingWidth += dif;\n result[col + i] += dif;\n editableCols--;\n }\n i++;\n }\n }\n }\n\n Object.assign(vals, result, auto);\n for (let j = 0; j < vals.length; j++) {\n vals[j] = Math.max(forcedMin, vals[j] || 0);\n }\n };\n}\n","const debug = require('./debug');\nconst utils = require('./utils');\nconst tableLayout = require('./layout-manager');\n\nclass Table extends Array {\n constructor(opts) {\n super();\n\n const options = utils.mergeOptions(opts);\n Object.defineProperty(this, 'options', {\n value: options,\n enumerable: options.debug,\n });\n\n if (options.debug) {\n switch (typeof options.debug) {\n case 'boolean':\n debug.setDebugLevel(debug.WARN);\n break;\n case 'number':\n debug.setDebugLevel(options.debug);\n break;\n case 'string':\n debug.setDebugLevel(parseInt(options.debug, 10));\n break;\n default:\n debug.setDebugLevel(debug.WARN);\n debug.warn(`Debug option is expected to be boolean, number, or string. Received a ${typeof options.debug}`);\n }\n Object.defineProperty(this, 'messages', {\n get() {\n return debug.debugMessages();\n },\n });\n }\n }\n\n toString() {\n let array = this;\n let headersPresent = this.options.head && this.options.head.length;\n if (headersPresent) {\n array = [this.options.head];\n if (this.length) {\n array.push.apply(array, this);\n }\n } else {\n this.options.style.head = [];\n }\n\n let cells = tableLayout.makeTableLayout(array);\n\n cells.forEach(function (row) {\n row.forEach(function (cell) {\n cell.mergeTableOptions(this.options, cells);\n }, this);\n }, this);\n\n tableLayout.computeWidths(this.options.colWidths, cells);\n tableLayout.computeHeights(this.options.rowHeights, cells);\n\n cells.forEach(function (row) {\n row.forEach(function (cell) {\n cell.init(this.options);\n }, this);\n }, this);\n\n let result = [];\n\n for (let rowIndex = 0; rowIndex < cells.length; rowIndex++) {\n let row = cells[rowIndex];\n let heightOfRow = this.options.rowHeights[rowIndex];\n\n if (rowIndex === 0 || !this.options.style.compact || (rowIndex == 1 && headersPresent)) {\n doDraw(row, 'top', result);\n }\n\n for (let lineNum = 0; lineNum < heightOfRow; lineNum++) {\n doDraw(row, lineNum, result);\n }\n\n if (rowIndex + 1 == cells.length) {\n doDraw(row, 'bottom', result);\n }\n }\n\n return result.join('\\n');\n }\n\n get width() {\n let str = this.toString().split('\\n');\n return str[0].length;\n }\n}\n\nTable.reset = () => debug.reset();\n\nfunction doDraw(row, lineNum, result) {\n let line = [];\n row.forEach(function (cell) {\n line.push(cell.draw(lineNum));\n });\n let str = line.join('');\n if (str.length) result.push(str);\n}\n\nmodule.exports = Table;\n","module.exports = require('./src/table');","/**\n * Fennec CLI Formatting System\n *\n * Central module for all CLI output formatting.\n * Uses picocolors (7KB, zero dependencies) for coloring.\n *\n * Design principles:\n * - Minimal dependencies (picocolors only)\n * - Clean, modern, readable output\n * - Consistent spacing and alignment\n * - Fox-themed (🦊) but not overwhelming\n */\n\nimport { createInterface } from \"node:readline\";\nimport pc from \"picocolors\";\nimport CliTable3 from \"cli-table3\";\n\n// ─── Color Helpers ───────────────────────────────────────────────\n\n/**\n * Custom hex color formatter.\n * picocolors has hex() at runtime but can be undefined on some Node.js\n * versions due to CJS/ESM interop issues. We detect and fall back.\n */\nfunction hex(color: string): (s: string) => string {\n if (typeof (pc as any).hex === \"function\") {\n return (pc as any).hex(color);\n }\n return (s: string) => s;\n}\n\n// Brand colors (runtime-safe, bypass TypeScript limitations)\nconst fennecOrange = hex(\"#FF6432\");\nconst blueAccent = hex(\"#4A90D9\");\nconst redAccent = hex(\"#E94560\");\n\n// ─── Color Palette ───────────────────────────────────────────────\n\nexport const colors = {\n // Brand colors\n primary: fennecOrange,\n secondary: blueAccent,\n accent: redAccent,\n\n // Semantic colors\n success: pc.green,\n error: pc.red,\n warning: pc.yellow,\n info: pc.cyan,\n muted: pc.dim,\n highlight: pc.bold,\n\n // Backgrounds\n bgSuccess: (s: string) => pc.bgGreen(pc.black(` ${s} `)),\n bgError: (s: string) => pc.bgRed(pc.white(` ${s} `)),\n bgWarning: (s: string) => pc.bgYellow(pc.black(` ${s} `)),\n bgInfo: (s: string) => pc.bgCyan(pc.black(` ${s} `)),\n} as const;\n\n// ─── Symbols ─────────────────────────────────────────────────────\n\nexport const symbols = {\n // Status\n active: pc.green(\"●\"),\n inactive: pc.dim(\"○\"),\n error: pc.red(\"✗\"),\n warning: pc.yellow(\"⚠\"),\n success: pc.green(\"✓\"),\n info: pc.cyan(\"ℹ\"),\n pending: pc.yellow(\"◌\"),\n\n // UI\n bullet: pc.dim(\"│\"),\n dot: pc.dim(\"·\"),\n arrow: pc.cyan(\"→\"),\n pointer: fennecOrange(\"▶\"),\n separator: pc.dim(\"─\"),\n\n // Fennec\n fox: \"🦊\",\n ears: \"⏜\",\n} as const;\n\n// ─── Status Badges ───────────────────────────────────────────────\n\nexport type ProcessStatus = \"running\" | \"stopped\" | \"error\" | \"starting\" | \"unknown\";\n\nexport function statusBadge(status: ProcessStatus): string {\n switch (status) {\n case \"running\": return pc.green(\"● running\");\n case \"stopped\": return pc.dim(\"○ stopped\");\n case \"error\": return pc.red(\"✗ error\");\n case \"starting\": return pc.yellow(\"◌ starting\");\n case \"unknown\": return pc.dim(\"? unknown\");\n }\n}\n\nexport type LogLevel = \"error\" | \"warn\" | \"info\" | \"debug\" | \"verbose\";\n\nexport function logLevel(label: string): string {\n const upper = label.toUpperCase().padEnd(5);\n switch (label.toLowerCase()) {\n case \"error\": return pc.bgRed(pc.white(` ${upper} `));\n case \"warn\": return pc.bgYellow(pc.black(` ${upper} `));\n case \"info\": return pc.bgCyan(pc.black(` ${upper} `));\n case \"debug\": return pc.dim(pc.italic(upper));\n case \"verbose\": return pc.dim(pc.italic(upper));\n default: return pc.dim(upper);\n }\n}\n\n// ─── Table Renderer (cli-table3 powered) ────────────────────────\n\nexport interface Column {\n key: string;\n label: string;\n align?: \"left\" | \"right\" | \"center\";\n width?: number;\n format?: (value: unknown) => string;\n}\n\nexport interface Row {\n [key: string]: unknown;\n}\n\nexport function renderTable(columns: Column[], rows: Row[], options?: { padding?: number; compact?: boolean }): string {\n const pad = options?.padding ?? 1;\n\n if (rows.length === 0) {\n return pc.dim(\" (no data)\");\n }\n\n // Build cli-table3 instance\n const table = new CliTable3({\n head: columns.map((c) => pc.bold(c.label)),\n colAligns: columns.map((c) => c.align ?? \"left\"),\n style: {\n \"padding-left\": pad,\n \"padding-right\": pad,\n head: [], // reset default styles; our pc.bold is already applied\n border: [],\n compact: false,\n },\n chars: {\n top: \"─\", \"top-mid\": \"┬\", \"top-left\": \"┌\", \"top-right\": \"┐\",\n \"bottom\": \"─\", \"bottom-mid\": \"┴\", \"bottom-left\": \"└\", \"bottom-right\": \"┘\",\n left: \"│\", \"left-mid\": \"├\", mid: \"─\", \"mid-mid\": \"┼\",\n right: \"│\", \"right-mid\": \"┤\",\n middle: \"│\",\n },\n truncate: \"…\",\n });\n\n for (const row of rows) {\n const values = columns.map((col) => {\n const raw = row[col.key];\n return col.format ? col.format(raw) : String(raw ?? \"-\");\n });\n table.push(values);\n }\n\n const output = table.toString();\n\n // Apply dim to all border lines (head, body, foot)\n const lines = output.split(\"\\n\");\n return lines.map((l) => {\n // Only dim border chars (lines that start with box-drawing chars)\n if (l.length > 0 && (l[0] === \"┌\" || l[0] === \"│\" || l[0] === \"├\" || l[0] === \"└\" || l[0] === \"─\")) {\n // Dim the border characters but keep cell content bright\n return l.replace(/^([│├└┌┐┤┴┬─]+)/, (m) => pc.dim(m));\n }\n return l;\n }).join(\"\\n\");\n}\n\n// ─── Key-Value Display ───────────────────────────────────────────\n\nexport function renderKV(key: string, value: string, options?: { indent?: number; separator?: string }): string {\n const indent = options?.indent ?? 2;\n const sep = options?.separator ?? \":\";\n const pad = \" \".repeat(indent);\n return `${pad}${pc.dim(key + sep)} ${value}`;\n}\n\nexport function renderKVColor(key: string, value: string, color: (s: string) => string = pc.bold): string {\n return ` ${pc.dim(key + \":\")} ${color(value)}`;\n}\n\nexport function renderSection(title: string, content: string): string {\n const line = pc.dim(\"─\".repeat(40));\n return `\\n ${pc.bold(title)}\\n ${line}\\n${content}\\n`;\n}\n\n// ─── Box Renderer ────────────────────────────────────────────────\n\nexport function renderBox(title: string, content: string, options?: {\n width?: number;\n borderColor?: (s: string) => string;\n titleColor?: (s: string) => string;\n}): string {\n const width = options?.width ?? 50;\n const border = options?.borderColor ?? pc.dim;\n const titleColor = options?.titleColor ?? pc.bold;\n\n const lines = content.split(\"\\n\");\n const wrapped = lines.map((l) => {\n const clean = l.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n return l + \" \".repeat(Math.max(0, width - clean.length - 2));\n });\n\n const top = border(`┌─ ${titleColor(title)} ${\"─\".repeat(Math.max(0, width - title.length - 4))}┐`);\n const mid = wrapped.map((l) => border(\"│ \") + l + border(\" │\")).join(\"\\n\");\n const bot = border(`└${\"─\".repeat(width)}┘`);\n\n return `\\n${top}\\n${mid}\\n${bot}\\n`;\n}\n\n// ─── Spinner (minimal, no dependencies) ──────────────────────────\n\nexport interface Spinner {\n update(text: string): void;\n succeed(text: string): void;\n fail(text: string): void;\n warn(text: string): void;\n stop(): void;\n}\n\nexport function createSpinner(text: string): Spinner {\n const frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n let i = 0;\n let running = true;\n\n const interval = setInterval(() => {\n if (!running) return;\n process.stdout.write(`\\r${pc.cyan(frames[i])} ${text}`);\n i = (i + 1) % frames.length;\n }, 80);\n\n return {\n update(newText: string) {\n if (!running) return;\n process.stdout.write(`\\r${pc.cyan(frames[i])} ${newText}`);\n },\n succeed(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.green(\"✓\")} ${msg}\\n`);\n },\n fail(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.red(\"✗\")} ${msg}\\n`);\n },\n warn(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.yellow(\"⚠\")} ${msg}\\n`);\n },\n stop() {\n running = false;\n clearInterval(interval);\n },\n };\n}\n\n// ─── Interactive Select (enhanced) ───────────────────────────────\n\nexport async function selectPrompt<T extends string>(\n message: string,\n options: { value: T; label: string; description?: string }[],\n): Promise<T | null> {\n console.log(`\\n ${pc.bold(message)}\\n`);\n options.forEach((opt, i) => {\n const num = pc.cyan(` ${i + 1}`);\n console.log(`${num} ${opt.label}`);\n if (opt.description) {\n console.log(` ${pc.dim(opt.description)}`);\n }\n });\n console.log(` ${pc.dim(\"0) Cancel\")}\\n`);\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(` ${pc.bold(\"Enter number\")} ${pc.dim(\"(0-\" + options.length + \")\")}: `, (ans) => {\n rl.close();\n resolve(ans.trim());\n });\n });\n\n const num = parseInt(answer, 10);\n if (isNaN(num) || num === 0) return null;\n const selected = options[num - 1];\n if (!selected) {\n console.log(` ${pc.red(\"Invalid selection.\")}`);\n return null;\n }\n return selected.value;\n}\n\nexport async function confirmPrompt(message: string, defaultValue = false): Promise<boolean> {\n const hint = defaultValue ? pc.bold(\"Y\") + pc.dim(\"/n\") : pc.dim(\"y/\") + pc.bold(\"N\");\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(`\\n ${message} ${pc.dim(\"(\" + hint + \")\")}: `, (ans) => {\n rl.close();\n resolve(ans.trim().toLowerCase());\n });\n });\n\n if (!answer) return defaultValue;\n return answer === \"y\" || answer === \"yes\";\n}\n\n// ─── Divider ─────────────────────────────────────────────────────\n\nexport function divider(text?: string): string {\n if (text) {\n const len = 50 - text.length - 2;\n const left = Math.floor(len / 2);\n const right = len - left;\n return pc.dim(\"─\".repeat(left) + ` ${text} ` + \"─\".repeat(right));\n }\n return pc.dim(\"─\".repeat(50));\n}\n\n// ─── Timestamp ───────────────────────────────────────────────────\n\nexport function timestamp(date?: Date): string {\n const d = date ?? new Date();\n const time = d.toLocaleTimeString(\"en-US\", { hour12: false });\n return pc.dim(`[${time}]`);\n}\n\n// ─── Command Line ────────────────────────────────────────────────\n\nexport function renderCommand(cmd: string): string {\n return fennecOrange(`$ ${cmd}`);\n}\n\nexport function renderAppName(name: string): string {\n return fennecOrange(pc.bold(name));\n}\n\n// ─── Error Display ───────────────────────────────────────────────\n\nexport function renderError(title: string, details?: string, suggestions?: string[]): string {\n const lines: string[] = [];\n lines.push(`\\n ${pc.bgRed(pc.white(\" ERROR \"))} ${pc.bold(title)}`);\n if (details) {\n lines.push(` ${pc.dim(details)}`);\n }\n if (suggestions && suggestions.length > 0) {\n lines.push(`\\n ${pc.bold(\"Suggestions:\")}`);\n for (const s of suggestions) {\n lines.push(` ${pc.cyan(\"→\")} ${s}`);\n }\n }\n return lines.join(\"\\n\") + \"\\n\";\n}\n\nexport function renderSuccess(message: string): string {\n return ` ${pc.green(\"✓\")} ${message}`;\n}\n\nexport function renderWarning(message: string): string {\n return ` ${pc.yellow(\"⚠\")} ${message}`;\n}\n","/**\n * Fennec CLI Banner\n *\n * Pure-text ASCII art banner using picocolors only.\n * No external font libraries — avoids ESM/CJS interop issues\n * (cfonts uses dynamic require(\"os\") which crashes in ESM bundles).\n *\n * Falls back to a compact fox icon for non-TTY environments.\n * All picocolors-based, no additional dependencies.\n */\n\nimport pc from \"picocolors\";\n\n// ─── Hex color helper ──────────────────────────────────────────\n\nexport function hexColor(color: string): (s: string) => string {\n if (typeof (pc as any).hex === \"function\") {\n return (pc as any).hex(color);\n }\n return (s: string) => s;\n}\n\nconst fennecOrange = hexColor(\"#FF6432\");\nconst fennecGold = hexColor(\"#FFB347\");\n\n// ─── Version ────────────────────────────────────────────────────\n\nexport const VERSION = \"1.13.0\";\n\n// ─── Banner generation ──────────────────────────────────────────\n\nlet cachedBanner: string | null = null;\nlet cachedCompact: string | null = null;\n\n/**\n * Generate the full FENNEC ASCII art banner.\n * Pure-text — no external font library needed.\n * Cached after first call.\n */\nfunction generateBanner(): string {\n if (cachedBanner) return cachedBanner;\n\n const logo = [\n \"███████╗███████╗███╗ ██╗███╗ ██╗███████╗ ██████╗\",\n \"██╔════╝██╔════╝████╗ ██║████╗ ██║██╔════╝██╔════╝\",\n \"█████╗ █████╗ ██╔██╗ ██║██╔██╗ ██║█████╗ ██║ \",\n \"██╔══╝ ██╔══╝ ██║╚██╗██║██║╚██╗██║██╔══╝ ██║ \",\n \"██║ ███████╗██║ ╚████║██║ ╚████║███████╗╚██████╗\",\n \"╚═╝ ╚══════╝╚═╝ ╚═══╝╚═╝ ╚═══╝╚══════╝ ╚═════╝\",\n ];\n\n // Apply gradient: orange → gold\n const gradientSteps = logo.length;\n const bannerStr = logo\n .map((line, i) => {\n const ratio = i / (gradientSteps - 1);\n const color = ratio < 0.5 ? fennecOrange : fennecGold;\n return color(line);\n })\n .join(\"\\n\");\n\n const tagline = pc.dim(\"ears everywhere in your stack.\") + pc.dim(` v${VERSION}`);\n\n cachedBanner = `\\n${bannerStr}\\n ${tagline}\\n`;\n return cachedBanner;\n}\n\n/**\n * Compact banner for non-TTY or quick commands.\n */\nfunction generateCompactBanner(): string {\n if (cachedCompact) return cachedCompact;\n cachedCompact = `${pc.redBright(\" 🦊\")} ${pc.bold(\"Fennec\")} ${pc.dim(`v${VERSION}`)}`;\n return cachedCompact;\n}\n\n// ─── Public API ─────────────────────────────────────────────────\n\n/**\n * Print the full FENNEC banner (ASCII art) to stderr.\n * Uses full logo in TTY mode, compact in non-TTY.\n */\nexport function printBanner(): void {\n if (process.stdout.isTTY) {\n console.error(generateBanner());\n } else {\n console.error(generateCompactBanner());\n }\n}\n\n/**\n * Print a mini/compact banner (fox icon + version only).\n * Suitable for quick commands like ps, status, kill.\n */\nexport function printMiniBanner(): void {\n console.error(generateCompactBanner());\n}\n\n// ─── Exports for reuse ──────────────────────────────────────────\n\nexport const FOX = generateBanner();\nexport const FOX_COMPACT = generateCompactBanner();\n","import pc from \"picocolors\";\nimport { hexColor } from \"./banner.js\";\n\nconst fennecOrange = hexColor(\"#FF6432\");\n\nexport function showHelp(): void {\n const sep = fennecOrange(\"─\".repeat(50));\n\n console.error(`\n\n ${pc.bold(\"Usage:\")} fennec ${pc.dim(\"<command>\")} ${pc.dim(\"[options]\")}\n\n ${sep}\n ${pc.bold(\"Server\")}\n ${sep}\n\n ${pc.cyan(\"start\")} ${pc.dim(\"Start Fennec MCP server (default)\")}\n ${pc.dim(\"--config\")} Path to config file\n ${pc.dim(\"--transport\")} Transport type ${pc.dim(\"(stdio | sse) [default: stdio]\")}\n ${pc.dim(\"--api-port\")} Management API port ${pc.dim(\"[default: 3456]\")}\n\n ${pc.cyan(\"start\")} ${pc.dim(\"<command>\")} ${pc.dim(\"Start an app under Fennec observation (new!)\")}\n ${pc.dim(\"--name\")} App name ${pc.dim(\"(required for tracking)\")}\n ${pc.dim(\"--port\")} Port the app listens on ${pc.dim(\"(optional)\")}\n ${pc.dim(\"--cwd\")} Working directory\n ${pc.dim(\"--restart\")} Auto-restart on crash\n\n ${sep}\n ${pc.bold(\"Process Management\")}\n ${sep}\n\n ${pc.cyan(\"ps\")} ${pc.dim(\"[options]\")} ${pc.dim(\"List Fennec-tracked apps (like PM2)\")}\n ${pc.dim(\"--system, -a\")} Show all system processes\n ${pc.dim(\"--name\")} Filter by app name\n ${pc.dim(\"-w, --watch\")} Watch mode ${pc.dim(\"(system processes refresh every 3s)\")}\n\n ${pc.cyan(\"run\")} ${pc.dim(\"<command>\")} ${pc.dim(\"Run a command under Fennec observation\")}\n ${pc.dim(\"--name\")} Process name ${pc.dim(\"(required)\")}\n ${pc.dim(\"--cwd\")} Working directory\n ${pc.dim(\"--restart\")} Auto-restart on crash\n\n ${pc.cyan(\"status\")} ${pc.dim(\"[name]\")} ${pc.dim(\"Show system overview & top processes\")}\n ${pc.dim(\"-w, --watch\")} Watch mode ${pc.dim(\"(refresh every 3s)\")}\n\n ${pc.cyan(\"log\")} ${pc.dim(\"<pid|name>\")} ${pc.dim(\"Show logs for a process\")}\n ${pc.dim(\"--lines\")} Number of lines ${pc.dim(\"[default: 30]\")}\n ${pc.dim(\"-f, --follow\")} Follow mode ${pc.dim(\"(journalctl --follow)\")}\n\n ${pc.cyan(\"kill\")} ${pc.dim(\"<pid|name|all>\")} ${pc.dim(\"Kill process(es) by PID, name, or all\")}\n ${pc.dim(\"--signal\")} Signal to send ${pc.dim(\"[default: SIGTERM]\")}\n ${pc.dim(\"--all\")} Kill all user processes\n\n ${pc.cyan(\"restart\")} ${pc.dim(\"<pid|name>\")} ${pc.dim(\"Kill + show re-run command\")}\n\n ${sep}\n ${pc.bold(\"Observation\")}\n ${sep}\n\n ${pc.cyan(\"attach\")} ${pc.dim(\"<port>\")} ${pc.dim(\"Observe a process by port\")}\n ${pc.dim(\"--name\")} Process name\n\n ${pc.cyan(\"pipe\")} ${pc.dim(\"Pipe stdin to log watcher\")}\n ${pc.dim(\"--name\")} Watcher name ${pc.dim(\"(required)\")}\n\n ${pc.cyan(\"watch\")} ${pc.dim(\"Watch a log file\")}\n ${pc.dim(\"--file\")} File path ${pc.dim(\"(required)\")}\n ${pc.dim(\"--name\")} Watcher name\n\n ${pc.cyan(\"attach-pid\")} ${pc.dim(\"<pid>\")} ${pc.dim(\"Attach to process by PID\")}\n ${pc.cyan(\"attach-port\")} ${pc.dim(\"<port>\")} ${pc.dim(\"Attach to process by port\")}\n\n ${sep}\n ${pc.bold(\"Configuration\")}\n ${sep}\n\n ${pc.cyan(\"init\")} ${pc.dim(\"Generate fennec.config.yaml\")}\n ${pc.cyan(\"setup\")} ${pc.dim(\"Configure MCP client\")}\n ${pc.cyan(\"install-browsers\")} ${pc.dim(\"Install Playwright browser engines\")}\n ${pc.cyan(\"sessions\")} ${pc.dim(\"List saved auth sessions\")}\n\n ${sep}\n ${pc.bold(\"Other\")}\n ${sep}\n\n ${pc.cyan(\"help\")} ${pc.dim(\"Show this help message\")}\n ${pc.cyan(\"version\")} ${pc.dim(\"Show version\")}\n\n ${pc.dim(\"─\".repeat(50))}\n\n ${pc.dim(\"Learn more:\")} ${pc.cyan(\"https://github.com/plumpslabs/fennec\")}\n `);\n}\n","import { PipeWatcher } from \"@plumpslabs/fennec-core\";\n\nexport async function pipeCommand(args: string[]): Promise<void> {\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : \"pipe\";\n\n if (!name) {\n console.error(\"Error: --name is required for pipe command\");\n process.exit(1);\n }\n\n const watcher = new PipeWatcher();\n const { write } = watcher.createPipe(name);\n\n console.error(`Pipe watcher '${name}' active. Forwarding stdin...`);\n\n const onDrain = () => {\n process.stdin.resume();\n };\n process.stdout.on(\"drain\", onDrain);\n\n process.stdin.setEncoding(\"utf-8\");\n process.stdin.on(\"data\", (data: string) => {\n try {\n write(data);\n const canContinue = process.stdout.write(data);\n if (!canContinue) {\n process.stdin.pause();\n }\n } catch (error) {\n console.error(\"Pipe error:\", error);\n }\n });\n\n process.stdin.on(\"error\", (error) => {\n console.error(\"Pipe stdin error:\", error);\n });\n\n process.stdin.on(\"end\", () => {\n console.error(`Pipe watcher '${name}' ended.`);\n watcher.cleanup();\n });\n\n const shutdown = () => {\n watcher.cleanup();\n process.stdout.removeListener(\"drain\", onDrain);\n process.stdin.removeAllListeners();\n process.exit(0);\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n}\n","import { PortDetector } from \"@plumpslabs/fennec-core\";\n\nexport async function attachPidCommand(args: string[]): Promise<void> {\n const pid = parseInt(args[0]!, 10);\n if (isNaN(pid)) {\n console.error(\"Error: valid PID is required\");\n process.exit(1);\n }\n const detector = new PortDetector();\n const info = detector.detectByPid(pid);\n if (info) {\n console.log(`Attached to PID ${pid}${info.command ? ` (${info.command})` : \"\"}`);\n if (info.port) console.log(` Port: ${info.port}`);\n } else {\n console.error(`Could not find process with PID ${pid}`);\n process.exit(1);\n }\n}\n","import { PortDetector } from \"@plumpslabs/fennec-core\";\n\nexport async function attachPortCommand(args: string[]): Promise<void> {\n const port = parseInt(args[0]!, 10);\n if (isNaN(port)) {\n console.error(\"Error: valid port number is required\");\n process.exit(1);\n }\n const detector = new PortDetector();\n const info = detector.detectByPort(port);\n if (info) {\n console.log(`Found process on port ${port}: PID ${info.pid}${info.command ? ` (${info.command})` : \"\"}`);\n } else {\n console.error(`No process found listening on port ${port}`);\n process.exit(1);\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { LogWatcher } from \"@plumpslabs/fennec-core\";\n\nexport async function watchCommand(args: string[]): Promise<void> {\n const fileIndex = args.indexOf(\"--file\");\n const filePath = fileIndex !== -1 ? args[fileIndex + 1] : undefined;\n if (!filePath) {\n console.error(\"Error: --file is required for watch command\");\n process.exit(1);\n }\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const resolvedPath = resolve(filePath);\n if (!existsSync(resolvedPath)) {\n console.error(`Error: File not found: ${resolvedPath}`);\n process.exit(1);\n }\n const watcher = new LogWatcher();\n const watcherId = watcher.watchFile(resolvedPath, name);\n console.log(`Watching file: ${resolvedPath}`);\n console.log(`Watcher ID: ${watcherId}`);\n process.stdin.resume();\n}\n","/**\n * Command: start / run — Spawn a process as a detached daemon.\n * Includes auto-resurrect: on server start, re-spawns tracked processes\n * that died since last session (like PM2 resurrect).\n *\n * With --restart flag: auto-restarts the process if it crashes (like PM2 watch).\n */\nimport { createWriteStream, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { FennecServer } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderKV, renderAppName, renderError, divider, createSpinner } from \"../utils/format.js\";\nimport { readTracked, addTracked, removeTracked, rotateLogFile } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\nimport { psCommand } from \"./ps.js\";\nimport type { TrackedProcess } from \"./tracker.js\";\n\n// Re-export from tracker for backward compat\nexport type { TrackedProcess };\n\nexport async function startServer(args: string[]): Promise<void> {\n printBanner();\n console.error(` ${pc.dim(\"Starting Fennec MCP server...\")}\\n`);\n\n const configIndex = args.indexOf(\"--config\");\n const configPath = configIndex !== -1 ? args[configIndex + 1] : undefined;\n\n try {\n const server = new FennecServer(configPath);\n\n // Auto-resurrect: re-spawn tracked processes that died since last session\n await resurrectTracked();\n\n await server.start();\n\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(\"Fennec server is running\")}`);\n console.error(` ${renderKV(\"Transport\", \"stdio\")}`);\n console.error(` ${renderKV(\"AI Agent\", \"Connect via MCP protocol\")}`);\n console.error(`\\n ${pc.dim(\"Press Ctrl+C to stop\")}\\n`);\n } catch (error) {\n console.error(renderError(\"Failed to start server\", String(error)));\n process.exit(1);\n }\n}\n\nexport async function startCommand(args: string[]): Promise<void> {\n printBanner();\n console.error(` ${pc.dim(\"Starting app...\")}\\n`);\n await runCommand(args);\n}\n\nexport async function runCommand(args: string[]): Promise<void> {\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const portIndex = args.indexOf(\"--port\");\n const port = portIndex !== -1 ? parseInt(args[portIndex + 1]!, 10) : undefined;\n const cwdIndex = args.indexOf(\"--cwd\");\n const cwd = cwdIndex !== -1 ? args[cwdIndex + 1] : undefined;\n const restartFlag = args.includes(\"--restart\");\n\n const stopFlags = [nameIndex, portIndex, cwdIndex].filter((i) => i !== -1) as number[];\n const cmdEnd = Math.min(...stopFlags, Infinity);\n const cmdParts = args.slice(0, cmdEnd);\n const cmd = cmdParts.join(\" \");\n\n if (!cmd) {\n console.error(renderError(\"Missing command\", \"Usage: fennec start|run <command> --name <name> [--port <port>] [--cwd <dir>] [--restart]\"));\n process.exit(1);\n }\n\n const appName = name ?? cmdParts[0] ?? \"app\";\n\n // Duplicate Prevention\n const tracked = readTracked();\n const existing = tracked.find((t) => t.name === appName);\n if (existing && isProcessRunning(existing.pid)) {\n console.error();\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(appName)} ${pc.dim(`is already running (PID: ${existing.pid})`)}`);\n console.error(` ${renderKV(\"Logs\", pc.cyan(`fennec log ${appName}`))}`);\n console.error(` ${renderKV(\"Stop\", pc.cyan(`fennec kill ${appName}`))}`);\n console.error();\n process.exit(0);\n }\n\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${appName}.log`);\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Starting\")} ${renderAppName(appName)} ${pc.dim(\"(daemon)\")}\\n`);\n console.error(` ${renderKV(\"Command\", cmd)}`);\n if (port) console.error(` ${renderKV(\"Port\", String(port))}`);\n if (cwd) console.error(` ${renderKV(\"Directory\", cwd)}`);\n if (restartFlag) console.error(` ${renderKV(\"Auto-restart\", pc.green(\"enabled\"))}`);\n console.error(` ${divider()}`);\n\n try {\n let currentChild = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n const pid = currentChild.pid ?? 0;\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (currentChild.stdout) currentChild.stdout.pipe(logStream);\n if (currentChild.stderr) currentChild.stderr.pipe(logStream);\n\n currentChild.unref();\n\n addTracked({\n name: appName,\n pid,\n command: cmd,\n port,\n cwd,\n startedAt: new Date().toISOString(),\n });\n\n console.error(` ${pc.green(\"✓\")} ${pc.bold(appName)} ${pc.dim(`started (PID: ${pid})`)}`);\n\n // If --restart flag is set, watch for crashes and auto-restart\n if (restartFlag) {\n console.error(` ${pc.dim(\"Auto-restart enabled — watching for crashes...\")}\\n`);\n\n // Shared handler to set up log rotation + exit watcher on a child\n function setupRestartWatch(c: typeof currentChild): void {\n c.on(\"exit\", (code, signal) => {\n if (code !== 0 && signal !== \"SIGTERM\" && signal !== \"SIGKILL\") {\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(appName)} ${pc.dim(`exited with code ${code}, restarting...`)}`);\n const restarted = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n const newPid = restarted.pid ?? 0;\n rotateLogFile(logFilePath);\n const rs = createWriteStream(logFilePath, { flags: \"a\" });\n if (restarted.stdout) restarted.stdout.pipe(rs);\n if (restarted.stderr) restarted.stderr.pipe(rs);\n restarted.unref();\n addTracked({ name: appName, pid: newPid, command: cmd, port, cwd, startedAt: new Date().toISOString() });\n console.error(` ${pc.green(\"✓\")} ${pc.bold(appName)} ${pc.dim(`restarted (PID: ${newPid})`)}`);\n // Watch the new child too (continuous restart)\n currentChild = restarted;\n setupRestartWatch(restarted);\n }\n });\n }\n\n setupRestartWatch(currentChild);\n\n // Keep the process alive to watch for crashes\n await new Promise<void>((resolve) => {\n process.once(\"SIGINT\", () => {\n currentChild.kill(\"SIGTERM\");\n resolve();\n });\n });\n }\n\n // Show the process table instead of logs (only if not in --restart mode)\n if (!restartFlag) {\n await psCommand([]);\n }\n } catch (error) {\n console.error(renderError(`Failed to start ${appName}`, String(error)));\n process.exit(1);\n }\n}\n\n/**\n * PM2-like resurrect: Re-spawn tracked processes that died.\n * Called automatically during `fennec start` (server mode).\n * Reads tracked.json, checks each PID, re-spawns stopped ones.\n */\nexport async function resurrectTracked(): Promise<void> {\n const tracked = readTracked();\n if (tracked.length === 0) return;\n\n const dead = tracked.filter((t) => !isProcessRunning(t.pid));\n if (dead.length === 0) return;\n\n const spinner = createSpinner(`Resurrecting ${dead.length} stopped process(es)...`);\n let resurrected = 0;\n let failed = 0;\n\n for (const proc of dead) {\n // Only resurrect if the process has a command (not just a PID reference)\n if (!proc.command) {\n removeTracked(proc.name);\n continue;\n }\n\n try {\n const cmdParts = proc.command.split(/\\s+/);\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${proc.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: proc.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n // Update PID in tracked.json\n addTracked({\n name: proc.name,\n pid: child.pid ?? 0,\n command: proc.command,\n port: proc.port,\n cwd: proc.cwd,\n startedAt: new Date().toISOString(),\n });\n\n resurrected++;\n } catch {\n failed++;\n }\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n\n if (resurrected > 0) {\n console.error(` ${pc.green(\"●\")} ${pc.bold(`Resurrected ${resurrected} process(es)`)}`);\n }\n if (failed > 0) {\n console.error(` ${pc.red(\"●\")} ${pc.bold(`${failed} process(es) failed to resurrect`)}`);\n }\n}\n","/**\n * Process Tracker — Shared state for managing ~/.fennec/tracked.json\n * Extracted from index.ts to be reusable across all CLI command files.\n */\nimport { existsSync, writeFileSync, readFileSync, mkdirSync, renameSync, statSync, rmSync } from \"node:fs\";\nimport { resolve, dirname, basename } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nexport interface TrackedProcess {\n name: string;\n pid: number;\n command: string;\n port?: number;\n cwd?: string;\n startedAt: string;\n}\n\nexport function getTrackedPath(): string {\n const dir = process.env.FENNEC_DATA_DIR\n ? resolve(process.env.FENNEC_DATA_DIR)\n : resolve(homedir(), \".fennec\");\n return resolve(dir, \"tracked.json\");\n}\n\nexport function readTracked(): TrackedProcess[] {\n try {\n const path = getTrackedPath();\n if (!existsSync(path)) return [];\n return JSON.parse(readFileSync(path, \"utf-8\"));\n } catch {\n return [];\n }\n}\n\nexport function saveTracked(processes: TrackedProcess[]): void {\n try {\n const path = getTrackedPath();\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, JSON.stringify(processes, null, 2), \"utf-8\");\n } catch (err) {\n console.error(\"[fennec] Failed to save tracked processes:\", err instanceof Error ? err.message : String(err));\n }\n}\n\nexport function addTracked(proc: TrackedProcess): void {\n const tracked = readTracked();\n const filtered = tracked.filter((t) => t.name !== proc.name);\n filtered.push(proc);\n saveTracked(filtered);\n}\n\nexport function removeTracked(name: string): void {\n const tracked = readTracked();\n saveTracked(tracked.filter((t) => t.name !== name));\n}\n\nexport function removeTrackedByPid(pid: number): void {\n const tracked = readTracked();\n saveTracked(tracked.filter((t) => t.pid !== pid));\n}\n\nexport function formatUptime(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n if (h >= 24) {\n const d = Math.floor(h / 24);\n return `${d}d ${h % 24}h ${m}m`;\n }\n return `${h}h ${m}m`;\n}\n\n// ─── Log Rotation ─────────────────────────────────────────────────\n// Rotates log files when they exceed maxSize (default: 10MB).\n// Keeps up to maxFiles rotated copies (default: 3) then deletes oldest.\n\nconst DEFAULT_MAX_LOG_SIZE = 10 * 1024 * 1024; // 10MB\nconst DEFAULT_MAX_LOG_FILES = 3;\n\n/**\n * Check if a log file needs rotation and rotate if necessary.\n * Returns true if rotation was performed.\n */\nexport function rotateLogFile(\n filePath: string,\n maxSize = DEFAULT_MAX_LOG_SIZE,\n maxFiles = DEFAULT_MAX_LOG_FILES,\n): boolean {\n try {\n if (!existsSync(filePath)) return false;\n const stats = statSync(filePath);\n if (stats.size < maxSize) return false;\n\n // Rotate: .log -> .log.1 -> .log.2 -> .log.3 (delete oldest)\n const dir = dirname(filePath);\n const base = basename(filePath);\n\n // Delete oldest if exists\n const oldestPath = resolve(dir, `${base}.${maxFiles}`);\n if (existsSync(oldestPath)) {\n try { rmSync(oldestPath); } catch { /* best-effort */ }\n }\n\n // Shift existing rotations\n for (let i = maxFiles - 1; i >= 1; i--) {\n const src = resolve(dir, `${base}.${i}`);\n const dst = resolve(dir, `${base}.${i + 1}`);\n if (existsSync(src)) {\n try { renameSync(src, dst); } catch { /* best-effort */ }\n }\n }\n\n // Rotate current file\n try {\n renameSync(filePath, resolve(dir, `${base}.1`));\n } catch { /* best-effort */ }\n\n return true;\n } catch (err) {\n console.error(\"[fennec] Log rotation failed:\", err instanceof Error ? err.message : String(err));\n return false;\n }\n}\n\n\n","/**\n * System Process Scanner\n *\n * Reads real system processes from /proc (Linux) or ps (macOS/BSD).\n * Returns process info: pid, name, cpu%, mem%, status, command, ports.\n *\n * Design principles:\n * - Zero external dependencies (uses Node.js built-ins only)\n * - Cross-platform (Linux via /proc, macOS/Windows via exec)\n * - Safe errors (never throws, returns empty array on failure)\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { cpus } from \"node:os\";\n\n// ─── Types ───────────────────────────────────────────────────────\n\nexport interface SystemProcessInfo {\n pid: number;\n name: string;\n command: string;\n cpuPercent: number;\n memPercent: number;\n memRss: number; // Resident Set Size in KB\n state: string; // R=Running, S=Sleeping, Z=Zombie, etc.\n startedAt: string | null;\n ports: number[]; // Listening ports (if any)\n isUserProcess: boolean; // true if owned by current user\n}\n\nexport interface SystemProcessFilter {\n name?: string;\n pid?: number;\n port?: number;\n userOnly?: boolean;\n sortBy?: \"cpu\" | \"mem\" | \"pid\" | \"name\";\n limit?: number;\n}\n\n// ─── Linux /proc Scanner ─────────────────────────────────────────\n\nfunction readProcProcesses(): SystemProcessInfo[] {\n const processes: SystemProcessInfo[] = [];\n const currentUid = process.getuid?.();\n const totalMemKb = readTotalMem();\n\n try {\n const pids = readdirSync(\"/proc\").filter((d) => /^\\d+$/.test(d));\n\n for (const pidStr of pids) {\n try {\n const pid = parseInt(pidStr, 10);\n const proc = readSingleProcProcess(pid, currentUid, totalMemKb);\n if (proc) processes.push(proc);\n } catch {\n // Process might have exited between readdir and stat\n continue;\n }\n }\n } catch {\n // /proc not available (not Linux)\n return [];\n }\n\n return processes;\n}\n\nfunction readSingleProcProcess(\n pid: number,\n currentUid: number | undefined,\n totalMemKb: number,\n): SystemProcessInfo | null {\n const statPath = `/proc/${pid}/stat`;\n const statusPath = `/proc/${pid}/status`;\n const cmdlinePath = `/proc/${pid}/cmdline`;\n\n if (!existsSync(statPath)) return null;\n\n // Read /proc/[pid]/status for name, uid, memory\n const statusText = readSafe(statusPath);\n if (!statusText) return null;\n\n const nameMatch = statusText.match(/Name:\\s+(.+)/);\n const uidMatch = statusText.match(/Uid:\\s+(\\d+)/);\n const vmRssMatch = statusText.match(/VmRSS:\\s+(\\d+)/);\n const stateMatch = statusText.match(/State:\\s+(\\S)/);\n const name = nameMatch?.[1] ?? `pid_${pid}`;\n const uid = uidMatch ? parseInt(uidMatch[1]!, 10) : undefined;\n const vmRss = vmRssMatch ? parseInt(vmRssMatch[1]!, 10) : 0;\n const state = stateMatch?.[1] ?? \"?\";\n\n const isUserProcess = uid !== undefined && currentUid !== undefined && uid === currentUid;\n\n // Read /proc/[pid]/stat for CPU ticks\n const statText = readSafe(statPath);\n let cpuPercent = 0;\n let startedAt: string | null = null;\n\n if (statText) {\n // Parse /proc/[pid]/stat format\n // Format: pid (comm) state ppid pgrp session tty_nr tpgid flags minflt cminflt majflt\n // cmajflt utime stime cutime cstime priority nice num_threads itrealvalue starttime\n const parenEnd = statText.lastIndexOf(\")\");\n if (parenEnd > 0) {\n const fields = statText.slice(parenEnd + 2).split(/\\s+/);\n const utime = parseInt(fields[11] ?? \"0\", 10); // User mode jiffies\n const stime = parseInt(fields[12] ?? \"0\", 10); // Kernel mode jiffies\n const starttime = parseInt(fields[19] ?? \"0\", 10); // Start time in jiffies\n\n // CPU usage = (utime + stime) / uptime_seconds / Hz\n const hertz = 100; // CLK_TCK, typically 100\n const uptimeSeconds = readUptime();\n const totalJiffies = utime + stime;\n\n if (uptimeSeconds > 0) {\n const elapsedJiffies = uptimeSeconds * hertz;\n const processJiffies = totalJiffies;\n cpuPercent = Math.min(100, (processJiffies / Math.max(1, elapsedJiffies)) * 100 * cpus().length);\n }\n\n // Boot time for startedAt\n startedAt = formatStartTime(starttime, uptimeSeconds, hertz);\n }\n }\n\n // Read /proc/[pid]/cmdline for full command\n const cmdlineRaw = readSafe(cmdlinePath);\n const command = cmdlineRaw\n ? cmdlineRaw.split(\"\\0\").filter(Boolean).join(\" \")\n : name;\n\n // Read listening ports\n const ports = detectListeningPorts(pid);\n\n const memPercent = totalMemKb > 0 ? (vmRss / totalMemKb) * 100 : 0;\n\n return {\n pid,\n name,\n command: command.length > 200 ? command.slice(0, 200) + \"…\" : command,\n cpuPercent: Math.round(cpuPercent * 10) / 10,\n memPercent: Math.round(memPercent * 10) / 10,\n memRss: vmRss,\n state,\n startedAt,\n ports,\n isUserProcess,\n };\n}\n\n// ─── macOS / BSD ps fallback ─────────────────────────────────────\n\nfunction runPsProcesses(): SystemProcessInfo[] {\n try {\n const output = execSync(\n \"ps axo pid,comm,pcpu,pmem,rss,state,etime,user --sort=-pcpu 2>/dev/null | head -200\",\n { encoding: \"utf-8\", timeout: 5000 },\n );\n\n const lines = output.trim().split(\"\\n\").slice(1); // Skip header\n const currentUser = execSync(\"whoami\", { encoding: \"utf-8\", timeout: 1000 }).trim();\n\n return lines.map((line) => {\n const parts = line.trim().split(/\\s+/);\n const pid = parseInt(parts[0] ?? \"0\", 10);\n const name = parts[1] ?? \"\";\n const cpu = parseFloat(parts[2] ?? \"0\");\n const mem = parseFloat(parts[3] ?? \"0\");\n const rss = parseInt(parts[4] ?? \"0\", 10);\n const state = parts[5] ?? \"?\";\n const elapsed = parts[6] ?? \"\";\n const user = parts[7] ?? \"\";\n const command = parts.slice(1).join(\" \");\n\n return {\n pid,\n name,\n command: command.length > 200 ? command.slice(0, 200) + \"…\" : command,\n cpuPercent: Math.round(cpu * 10) / 10,\n memPercent: Math.round(mem * 10) / 10,\n memRss: rss,\n state: mapBsdState(state),\n startedAt: elapsed || null,\n ports: [] as number[],\n isUserProcess: user === currentUser,\n };\n });\n } catch {\n return [];\n }\n}\n\nfunction mapBsdState(s: string): string {\n switch (s) {\n case \"R\": return \"R\";\n case \"S\": return \"S\";\n case \"Z\": return \"Z\";\n case \"T\": return \"T\";\n case \"I\": return \"S\";\n default: return s;\n }\n}\n\n// ─── Port Scanner ────────────────────────────────────────────────\n// NOTE: Per-process port detection via /proc/[pid]/net/tcp is unreliable\n// because it shows network namespace ports, not per-process ports.\n// Fennec tracks ports via the --port flag when starting apps.\n// We keep the field for API compatibility but always return empty.\n\nfunction detectListeningPorts(_pid: number): number[] {\n return [];\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────\n\nfunction readSafe(path: string): string | null {\n try {\n return readFileSync(path, \"utf-8\");\n } catch {\n return null;\n }\n}\n\nfunction readTotalMem(): number {\n try {\n const memInfo = readSafe(\"/proc/meminfo\");\n if (memInfo) {\n const match = memInfo.match(/MemTotal:\\s+(\\d+)/);\n if (match) return parseInt(match[1]!, 10);\n }\n } catch {\n // ignore\n }\n return 16_000_000; // Default ~16GB\n}\n\nfunction readUptime(): number {\n try {\n const data = readSafe(\"/proc/uptime\");\n if (data) {\n return parseFloat(data.split(/\\s+/)[0] ?? \"0\");\n }\n } catch {\n // ignore\n }\n return 0;\n}\n\nfunction formatStartTime(starttime: number, uptimeSeconds: number, hertz: number): string | null {\n try {\n const bootTime = Date.now() / 1000 - uptimeSeconds;\n const processStart = bootTime + starttime / hertz;\n return new Date(processStart * 1000).toISOString();\n } catch {\n return null;\n }\n}\n\n// ─── Public API ──────────────────────────────────────────────────\n\n/**\n * Get all system processes.\n * Uses /proc on Linux, falls back to `ps` on macOS/BSD.\n */\nexport function getSystemProcesses(filter?: SystemProcessFilter): SystemProcessInfo[] {\n let processes: SystemProcessInfo[];\n\n // Try /proc first (Linux), fall back to ps (macOS/BSD)\n if (existsSync(\"/proc\")) {\n processes = readProcProcesses();\n } else {\n processes = runPsProcesses();\n }\n\n // Apply filters\n if (filter) {\n if (filter.userOnly) {\n processes = processes.filter((p) => p.isUserProcess);\n }\n if (filter.name) {\n const nameLower = filter.name.toLowerCase();\n processes = processes.filter(\n (p) => p.name.toLowerCase().includes(nameLower) || p.command.toLowerCase().includes(nameLower),\n );\n }\n if (filter.pid) {\n processes = processes.filter((p) => p.pid === filter.pid);\n }\n if (filter.port) {\n processes = processes.filter((p) => p.ports.includes(filter.port!));\n }\n\n // Sort\n if (filter.sortBy) {\n processes.sort((a, b) => {\n switch (filter.sortBy) {\n case \"cpu\": return b.cpuPercent - a.cpuPercent;\n case \"mem\": return b.memPercent - a.memPercent;\n case \"pid\": return a.pid - b.pid;\n case \"name\": return a.name.localeCompare(b.name);\n default: return b.cpuPercent - a.cpuPercent;\n }\n });\n }\n\n // Limit\n if (filter.limit && filter.limit > 0) {\n processes = processes.slice(0, filter.limit);\n }\n }\n\n return processes;\n}\n\n/**\n * Get a single process by PID. Returns null if not found.\n */\nexport function getProcessByPid(pid: number): SystemProcessInfo | null {\n const processes = getSystemProcesses({ pid });\n return processes[0] ?? null;\n}\n\n/**\n * Kill a process by PID. Returns true if successful.\n */\nexport function killProcess(pid: number, signal: NodeJS.Signals = \"SIGTERM\"): boolean {\n try {\n process.kill(pid, signal);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a process is running.\n */\nexport function isProcessRunning(pid: number): boolean {\n try {\n process.kill(pid, 0); // Signal 0 checks existence without killing\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get human-readable process state.\n */\nexport function formatProcessState(state: string): string {\n switch (state) {\n case \"R\": return \"Running\";\n case \"S\": return \"Sleeping\";\n case \"D\": return \"Disk Sleep\";\n case \"Z\": return \"Zombie\";\n case \"T\": return \"Stopped\";\n case \"t\": return \"Tracing\";\n case \"X\": return \"Dead\";\n case \"I\": return \"Idle\";\n default: return state;\n }\n}\n","/**\n * Command: ps, status — List tracked processes and system overview.\n */\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderTable, renderError, renderCommand, createSpinner, timestamp, type Column, type Row } from \"../utils/format.js\";\nimport { getSystemProcesses, isProcessRunning, formatProcessState } from \"../utils/system-process.js\";\nimport { readTracked, formatUptime } from \"./tracker.js\";\n\nexport async function psCommand(args: string[]): Promise<void> {\n const watchFlag = args.includes(\"-w\") || args.includes(\"--watch\");\n const systemFlag = args.includes(\"--system\") || args.includes(\"-a\") || args.includes(\"--all\");\n const jsonFlag = args.includes(\"--json\");\n const nameFilter = args.includes(\"--name\") ? args[args.indexOf(\"--name\") + 1] : undefined;\n const sortBy = args.includes(\"--sort\")\n ? (args[args.indexOf(\"--sort\") + 1] as \"cpu\" | \"mem\" | \"pid\" | \"name\")\n : \"name\";\n\n if (jsonFlag) {\n await psJson();\n return;\n }\n\n if (watchFlag && systemFlag) {\n await watchSystemProcesses(sortBy, 15);\n return;\n }\n\n if (systemFlag) {\n const spinner = createSpinner(\"Scanning system processes...\");\n try {\n const processes = getSystemProcesses({ name: nameFilter, userOnly: true, sortBy, limit: 30 });\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n if (processes.length === 0) {\n console.error(`\\n ${pc.dim(\"No system processes found.\")}\\n`);\n return;\n }\n const columns: Column[] = [\n { key: \"pid\", label: \"PID\", align: \"right\", format: (v) => pc.dim(String(v).padStart(6)) },\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"cpu\", label: \"CPU%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"mem\", label: \"MEM%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"state\", label: \"State\", format: (v) => { const s = String(v); if (s === \"R\" || s === \"Running\") return pc.green(s); if (s === \"Z\" || s === \"Zombie\") return pc.red(s); if (s === \"S\" || s === \"Sleeping\") return pc.cyan(s); return pc.dim(s); } },\n ];\n const rows: Row[] = processes.map((p) => ({ pid: p.pid, name: p.name, cpu: p.cpuPercent, mem: p.memPercent, state: formatProcessState(p.state) }));\n console.error(`\\n ${symbols.fox} ${pc.bold(\"System Processes\")} ${pc.dim(`(top ${processes.length} by ${sortBy})`)}\\n`);\n console.error(renderTable(columns, rows));\n console.error();\n } catch (error) {\n spinner.fail(\"Failed to scan processes\");\n console.error(renderError(\"Process scan failed\", String(error)));\n }\n return;\n }\n\n const tracked = readTracked();\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes.\")}`);\n console.error(` ${pc.dim(\"Start an app with:\")} ${pc.cyan(\"fennec start <command> --name <name>\")}\\n`);\n return;\n }\n\n const columns: Column[] = [\n { key: \"name\", label: \"App\", format: (v) => pc.bold(String(v)) },\n { key: \"pid\", label: \"PID\", align: \"right\" },\n { key: \"status\", label: \"Status\", format: (v) => { const s = v as string; return s === \"running\" ? pc.green(\"● running\") : pc.red(\"○ stopped\"); } },\n { key: \"port\", label: \"Port\", format: (v) => { const p = v as number | null; return p ? pc.yellow(`:${p}`) : pc.dim(\"-\"); } },\n { key: \"command\", label: \"Command\", format: (v) => { const c = String(v); return c.length > 50 ? c.slice(0, 50) + \"…\" : c; } },\n { key: \"uptime\", label: \"Uptime\", format: (v) => pc.dim(String(v)) },\n ];\n\n const rows: Row[] = tracked.map((t) => {\n const running = isProcessRunning(t.pid);\n const uptime = running ? formatUptime(Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000)) : \"-\";\n return { name: t.name, pid: running ? String(t.pid) : pc.dim(String(t.pid)), status: running ? \"running\" : \"stopped\", port: t.port ?? null, command: t.command, uptime };\n });\n\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Apps\")} ${pc.dim(`(${runningCount}/${tracked.length} running)`)}\\n`);\n console.error(renderTable(columns, rows));\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec start <command> --name <name> --port <port>\")} ${pc.dim(\"to add more apps.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec log <name>\")} ${pc.dim(\"to view logs.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec stop <name>\")} ${pc.dim(\"to pause an app.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec spawn <name>\")} ${pc.dim(\"to resume a paused app.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec kill <name>\")} ${pc.dim(\"to permanently remove an app.\")}`);\n console.error();\n}\n\n/**\n * JSON output of tracked processes.\n */\nasync function psJson(): Promise<void> {\n const tracked = readTracked();\n const data = tracked.map((t) => {\n const running = isProcessRunning(t.pid);\n return {\n name: t.name,\n pid: t.pid,\n status: running ? \"running\" : \"stopped\",\n port: t.port ?? null,\n command: t.command,\n cwd: t.cwd ?? null,\n startedAt: t.startedAt,\n uptime: running ? Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000) : null,\n };\n });\n console.log(JSON.stringify(data, null, 2));\n}\n\nexport async function statusCommand(_args: string[]): Promise<void> {\n const watchFlag = _args.includes(\"-w\") || _args.includes(\"--watch\");\n const tracked = readTracked();\n const topSystem = getSystemProcesses({ userOnly: true, sortBy: \"cpu\", limit: 5 });\n const totalUserProcs = getSystemProcesses({ userOnly: true }).length;\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Status\")}\\n`);\n\n if (tracked.length > 0) {\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n console.error(` ${pc.bold(\"Managed Apps\")} ${pc.dim(`(${runningCount}/${tracked.length} running)`)}\\n`);\n for (const t of tracked) {\n const running = isProcessRunning(t.pid);\n const statusIcon = running ? pc.green(\"●\") : pc.red(\"○\");\n const portStr = t.port ? ` ${pc.yellow(`:${t.port}`)}` : \"\";\n const uptime = running ? pc.dim(formatUptime(Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000))) : pc.red(\"stopped\");\n console.error(` ${statusIcon} ${pc.bold(t.name)}${portStr} ${pc.dim(`(PID ${t.pid})`)} — ${uptime}`);\n }\n console.error();\n } else {\n console.error(` ${pc.dim(\"No managed apps.\")} ${pc.cyan(\"fennec start <command> --name <name>\")}\\n`);\n }\n\n console.error(` ${pc.bold(\"System\")} ${pc.dim(`(${totalUserProcs} user processes)`)}`);\n for (const p of topSystem) {\n const cpuStr = p.cpuPercent > 10 ? pc.red(`${p.cpuPercent}%`) : p.cpuPercent > 5 ? pc.yellow(`${p.cpuPercent}%`) : pc.dim(`${p.cpuPercent}%`);\n const memStr = p.memPercent > 10 ? pc.red(`${p.memPercent}%`) : p.memPercent > 5 ? pc.yellow(`${p.memPercent}%`) : pc.dim(`${p.memPercent}%`);\n console.error(` ${pc.dim(`PID ${p.pid}`)} ${pc.bold(p.name)} — CPU: ${cpuStr} MEM: ${memStr}`);\n }\n\n if (watchFlag) await watchSystemProcesses(\"cpu\", 15);\n console.error();\n}\n\nasync function watchSystemProcesses(sortBy: string, limit: number): Promise<void> {\n console.error(`\\n ${pc.bold(\"Watching system processes\")} ${pc.dim(\"(Ctrl+C to stop, refreshes every 3s)\")}\\n`);\n\n const render = () => {\n const processes = getSystemProcesses({ userOnly: true, sortBy: sortBy as \"cpu\" | \"mem\" | \"pid\" | \"name\", limit });\n const columns: Column[] = [\n { key: \"pid\", label: \"PID\", align: \"right\", format: (v) => pc.dim(String(v).padStart(6)) },\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"cpu\", label: \"CPU%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"mem\", label: \"MEM%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"state\", label: \"S\", align: \"center\" },\n ];\n const rows: Row[] = processes.map((p) => ({ pid: p.pid, name: p.name, cpu: p.cpuPercent, mem: p.memPercent, state: p.state }));\n return ` ${timestamp()} ${pc.dim(`${processes.length} processes`)}\\n${renderTable(columns, rows, { compact: true })}`;\n };\n\n console.error(render());\n const interval = setInterval(() => { process.stdout.write(\"\\x1B[J\"); console.error(render()); }, 3000);\n // Keep alive until SIGINT — resolves cleanly (no process.exit)\n await new Promise<void>((resolve) => {\n process.once(\"SIGINT\", () => {\n clearInterval(interval);\n process.stdout.write(\"\\x1B[J\");\n resolve();\n });\n });\n}\n","/**\n * Command: kill — Kill process by PID, name, or kill all user processes.\n */\nimport pc from \"picocolors\";\nimport { renderError, createSpinner, selectPrompt, confirmPrompt } from \"../utils/format.js\";\nimport { getSystemProcesses, killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { readTracked, removeTrackedByPid } from \"./tracker.js\";\n\nexport async function killCommand(args: string[]): Promise<void> {\n const rawTarget = args[0];\n const signalIndex = args.indexOf(\"--signal\");\n const signalRaw = signalIndex !== -1 ? args[signalIndex + 1] : \"SIGTERM\";\n const signal = (signalRaw ?? \"SIGTERM\") as NodeJS.Signals;\n\n if (rawTarget === \"all\" || args.includes(\"--all\") || args.includes(\"-a\")) {\n await killAll(signal);\n return;\n }\n\n if (!rawTarget) {\n console.error(renderError(\"Missing target\", \"Usage: fennec kill <pid|name|all> [--signal SIGTERM|SIGKILL|SIGINT]\"));\n process.exit(1);\n }\n\n let targetPid: number;\n let displayName: string;\n const pid = parseInt(rawTarget, 10);\n\n if (!isNaN(pid) && String(pid) === rawTarget) {\n if (!isProcessRunning(pid)) { console.error(renderError(\"Process not found\", `No process with PID ${pid} is running`)); process.exit(1); }\n targetPid = pid;\n displayName = `PID ${pid}`;\n } else {\n // First check tracked processes (from fennec start / tracked.json)\n const tracked = readTracked();\n const trackedMatch = tracked.find((t) => t.name === rawTarget);\n if (trackedMatch && isProcessRunning(trackedMatch.pid)) {\n targetPid = trackedMatch.pid;\n displayName = `${trackedMatch.name} (PID ${targetPid})`;\n } else {\n const matches = getSystemProcesses({ name: rawTarget, userOnly: true, sortBy: \"cpu\" });\n if (matches.length === 0) { console.error(renderError(\"Process not found\", `No running process matching \"${rawTarget}\"`)); process.exit(1); }\n if (matches.length > 1) {\n console.error(`\\n ${pc.bold(`Multiple processes match \"${rawTarget}\":`)}`);\n const selected = await selectPrompt(\"Select which to kill:\", matches.map((p, i) => ({ value: String(i), label: `${p.name} (PID ${p.pid})`, description: `${p.command.slice(0, 80)} — CPU: ${p.cpuPercent}% MEM: ${p.memPercent}%` })));\n if (selected === null) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n const idx = parseInt(selected, 10);\n targetPid = matches[idx]!.pid;\n displayName = `${matches[idx]!.name} (PID ${targetPid})`;\n } else {\n targetPid = matches[0]!.pid;\n displayName = `${matches[0]!.name} (PID ${targetPid})`;\n }\n }\n }\n\n const confirmed = await confirmPrompt(`Kill ${pc.bold(displayName)} with ${pc.yellow(signal)}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n const spinner = createSpinner(`Sending ${signal} to ${displayName}...`);\n const success = sysKill(targetPid, signal);\n\n if (success) {\n await new Promise((r) => setTimeout(r, 200));\n const stillRunning = isProcessRunning(targetPid);\n if (stillRunning && signal !== \"SIGKILL\") {\n spinner.warn(`${displayName} did not respond to ${signal}`);\n const forceKill = await confirmPrompt(`Send ${pc.red(\"SIGKILL\")} to force stop?`, true);\n if (forceKill) {\n const forceSpinner = createSpinner(`Sending SIGKILL to ${displayName}...`);\n sysKill(targetPid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 300));\n isProcessRunning(targetPid) ? forceSpinner.fail(`${displayName} could not be stopped (permission denied?)`) : forceSpinner.succeed(`${displayName} force stopped`);\n } else {\n console.error(` ${pc.dim(\"Retrying with SIGTERM...\")}`);\n sysKill(targetPid, \"SIGTERM\");\n console.error(` ${pc.yellow(\"⚠\")} ${displayName} ${pc.dim(\"may still be running\")}`);\n }\n } else {\n removeTrackedByPid(targetPid);\n spinner.succeed(`${displayName} stopped`);\n }\n } else {\n spinner.fail(`Failed to kill ${displayName}`);\n console.error(renderError(\"Permission denied\", \"Try running with sudo or use a different signal.\"));\n }\n}\n\nasync function killAll(signal: NodeJS.Signals): Promise<void> {\n const userProcs = getSystemProcesses({ userOnly: true, sortBy: \"cpu\", limit: 200 });\n if (userProcs.length === 0) { console.error(` ${pc.dim(\"No user processes to kill.\")}`); return; }\n\n console.error(`\\n ${pc.bold(`Kill ${userProcs.length} user processes?`)}`);\n console.error(` ${pc.dim(\"This will stop ALL your running processes.\")}`);\n console.error(` ${pc.yellow(\"⚠ System processes will not be affected.\")}\\n`);\n\n const confirmed = await confirmPrompt(`${pc.red(\"Are you sure?\")} ${pc.dim(\"This cannot be undone\")}`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled.\")}`); return; }\n\n const spinner = createSpinner(`Killing ${userProcs.length} processes...`);\n let killed = 0, failed = 0;\n for (const proc of userProcs) {\n if (sysKill(proc.pid, signal)) { killed++; removeTrackedByPid(proc.pid); } else { failed++; }\n if (killed % 10 === 0) await new Promise((r) => setTimeout(r, 50));\n }\n await new Promise((r) => setTimeout(r, 500));\n killed > 0 ? spinner.succeed(`${killed} process(es) killed`) : spinner.fail(\"Failed to kill processes\");\n if (failed > 0) console.error(` ${pc.yellow(`${failed} process(es) could not be killed`)} ${pc.dim(\"(try with sudo)\")}`);\n}\n","/**\n * Command: stop — Stop a tracked process but keep it in tracked.json.\n * Unlike `kill`, the process entry remains in tracked.json so it can\n * be re-spawned later via `fennec spawn <name>`.\n */\nimport pc from \"picocolors\";\nimport { renderError, createSpinner, confirmPrompt } from \"../utils/format.js\";\nimport { killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { readTracked } from \"./tracker.js\";\nimport { psCommand } from \"./ps.js\";\n\nexport async function stopCommand(args: string[]): Promise<void> {\n const stopAll = args.includes(\"--all\") || args.includes(\"-a\");\n\n if (stopAll) {\n await stopAllTracked();\n return;\n }\n\n const rawTarget = args[0];\n\n if (!rawTarget) {\n console.error(renderError(\"Missing name\", \"Usage: fennec stop <name|--all>\"));\n process.exit(1);\n }\n\n // Only works on tracked processes\n const tracked = readTracked();\n const trackedMatch = tracked.find((t) => t.name === rawTarget);\n\n if (!trackedMatch) {\n console.error(renderError(\"Not found\", `No tracked process named \"${rawTarget}\". Use ${pc.cyan(\"fennec kill <pid>\")} to kill a system process.`));\n process.exit(1);\n }\n\n if (!isProcessRunning(trackedMatch.pid)) {\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.bold(rawTarget)} ${pc.dim(\"is already stopped\")}`);\n console.error();\n process.exit(0);\n }\n\n const displayName = `${trackedMatch.name} (PID ${trackedMatch.pid})`;\n const confirmed = await confirmPrompt(`Stop ${pc.bold(displayName)}? ${pc.dim(\"It can be re-spawned later via fennec spawn\")}`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n await stopSingleProcess(trackedMatch.pid, trackedMatch.name);\n}\n\n/**\n * Stop all running tracked processes (keep them in tracked.json).\n */\nasync function stopAllTracked(): Promise<void> {\n const tracked = readTracked();\n const running = tracked.filter((t) => isProcessRunning(t.pid));\n\n if (running.length === 0) {\n console.error(`\\n ${pc.dim(\"No running tracked processes to stop.\")}\\n`);\n return;\n }\n\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.bold(`Stop all ${running.length} running process(es)?`)} ${pc.dim(\"(They can be re-spawned later)\")}\\n`);\n for (const t of running) {\n console.error(` ${pc.green(\"●\")} ${pc.bold(t.name)} ${pc.dim(`(PID ${t.pid})`)}`);\n }\n console.error();\n\n const confirmed = await confirmPrompt(\"Stop all?\", false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}\\n`); return; }\n\n const spinner = createSpinner(`Stopping ${running.length} process(es)...`);\n let stopped = 0;\n let failed = 0;\n\n for (const t of running) {\n if (sysKill(t.pid, \"SIGTERM\")) {\n stopped++;\n } else {\n failed++;\n }\n }\n\n await new Promise((r) => setTimeout(r, 300));\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n\n if (stopped > 0) {\n console.error(` ${pc.green(\"✓\")} ${pc.bold(`Stopped ${stopped} process(es)`)} ${pc.dim(\"(kept in tracked.json)\")}`);\n }\n if (failed > 0) {\n console.error(` ${pc.red(\"✗\")} ${pc.bold(`${failed} process(es) failed to stop`)}`);\n }\n\n console.error();\n await psCommand([]);\n}\n\nasync function stopSingleProcess(pid: number, name: string): Promise<void> {\n const displayName = `${name} (PID ${pid})`;\n const spinner = createSpinner(`Stopping ${displayName}...`);\n const success = sysKill(pid, \"SIGTERM\");\n\n if (success) {\n await new Promise((r) => setTimeout(r, 200));\n const stillRunning = isProcessRunning(pid);\n if (stillRunning) {\n spinner.warn(`${displayName} did not respond to SIGTERM`);\n const forceKill = await confirmPrompt(`Send ${pc.red(\"SIGKILL\")} to force stop?`, true);\n if (forceKill) {\n const forceSpinner = createSpinner(`Sending SIGKILL to ${displayName}...`);\n sysKill(pid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 300));\n isProcessRunning(pid)\n ? forceSpinner.fail(`${displayName} could not be stopped (permission denied?)`)\n : forceSpinner.succeed(`${displayName} force stopped`);\n } else {\n console.error(` ${pc.yellow(\"⚠\")} ${displayName} ${pc.dim(\"may still be running\")}`);\n }\n } else {\n spinner.succeed(`${displayName} stopped`);\n }\n\n console.error();\n await psCommand([]);\n } else {\n spinner.fail(`Failed to stop ${displayName}`);\n console.error(renderError(\"Permission denied\", \"Try running with sudo or use fennec kill.\"));\n }\n}\n","/**\n * Command: spawn — List stopped tracked processes or re-spawn one.\n *\n * Without args: shows a selectable list of stopped tracked processes.\n * With name: re-spawns the named process from its saved command in tracked.json.\n * With --all: re-spawns all stopped processes that have saved commands.\n *\n * Unlike `fennec start <cmd> --name <name>` which creates a brand new connection,\n * `fennec spawn` revives a previously stopped process.\n */\nimport pc from \"picocolors\";\nimport { createWriteStream, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { symbols, renderError, renderKV, renderAppName, createSpinner, selectPrompt } from \"../utils/format.js\";\nimport { readTracked, addTracked, rotateLogFile } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\nimport { psCommand } from \"./ps.js\";\n\nexport async function spawnCommand(args: string[]): Promise<void> {\n const spawnAll = args.includes(\"--all\") || args.includes(\"-a\");\n const name = args[0];\n\n if (spawnAll) {\n await spawnAllStopped();\n return;\n }\n\n if (!name) {\n // No args: list stopped processes for selection\n await spawnList();\n return;\n }\n\n // With name: find and re-spawn\n const tracked = readTracked();\n const match = tracked.find((t) => t.name === name);\n\n if (!match) {\n console.error(renderError(\"Not found\", `No tracked process named \"${name}\". Use ${pc.cyan(\"fennec spawn\")} to see available processes, or ${pc.cyan(\"fennec start <command> --name <name>\")} to create a new one.`));\n process.exit(1);\n }\n\n if (isProcessRunning(match.pid)) {\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.bold(name)} ${pc.dim(\"is already running (PID:\")} ${match.pid}${pc.dim(\")\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(`fennec stop ${name}`)} ${pc.dim(\"to stop it first.\")}`);\n console.error();\n process.exit(0);\n }\n\n if (!match.command) {\n console.error(renderError(\"No command saved\", `\"${name}\" has no saved command and cannot be re-spawned.`));\n process.exit(1);\n }\n\n await respawnProcess(match);\n}\n\n/**\n * Re-spawn ALL stopped tracked processes that have saved commands.\n */\nasync function spawnAllStopped(): Promise<void> {\n const tracked = readTracked();\n const toSpawn = tracked.filter((t) => !isProcessRunning(t.pid) && t.command);\n\n if (toSpawn.length === 0) {\n console.error(`\\n ${pc.dim(\"No stopped processes with saved commands to spawn.\")}\\n`);\n return;\n }\n\n console.error(`\\n ${symbols.fox} ${pc.bold(`Spawning ${toSpawn.length} process(es)...`)}\\n`);\n for (const t of toSpawn) {\n console.error(` ${pc.dim(\"·\")} ${pc.bold(t.name)} ${pc.dim(`(${t.command})`)}`);\n }\n console.error();\n\n const spinner = createSpinner(\"Spawning...\");\n let spawned = 0;\n let failed = 0;\n\n for (const proc of toSpawn) {\n try {\n const cmdParts = proc.command.split(/\\s+/);\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${proc.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: proc.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n const pid = child.pid ?? 0;\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n addTracked({\n name: proc.name,\n pid,\n command: proc.command,\n port: proc.port,\n cwd: proc.cwd,\n startedAt: new Date().toISOString(),\n });\n\n spawned++;\n } catch {\n failed++;\n }\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n\n if (spawned > 0) {\n console.error(` ${pc.green(\"✓\")} ${pc.bold(`Spawned ${spawned} process(es)`)}`);\n }\n if (failed > 0) {\n console.error(` ${pc.red(\"✗\")} ${pc.bold(`${failed} process(es) failed to spawn`)}`);\n }\n\n console.error();\n await psCommand([]);\n}\n\n/**\n * Show a selectable list of stopped tracked processes.\n */\nasync function spawnList(): Promise<void> {\n const tracked = readTracked();\n\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes found.\")}`);\n console.error(` ${pc.dim(\"Start an app first:\")} ${pc.cyan(\"fennec start <command> --name <name>\")}`);\n console.error();\n return;\n }\n\n const stopped = tracked.filter((t) => !isProcessRunning(t.pid));\n const running = tracked.filter((t) => isProcessRunning(t.pid));\n\n if (stopped.length === 0) {\n console.error(`\\n ${pc.dim(\"All tracked processes are running. Nothing to spawn.\")}`);\n console.error();\n return;\n }\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Available to spawn\")} ${pc.dim(`(${stopped.length}/${tracked.length} stopped)`)}`);\n\n // Show running ones as info\n if (running.length > 0) {\n console.error(` ${pc.dim(\"Running (use stop first):\")}`);\n for (const r of running) {\n console.error(` ${pc.green(\"●\")} ${pc.bold(r.name)} ${pc.dim(`(PID ${r.pid})`)}`);\n }\n console.error();\n }\n\n // Show stopped ones as selectable\n const selected = await selectPrompt(\"Select a process to spawn:\", stopped.map((t) => ({\n value: t.name,\n label: t.name,\n description: t.command.length > 80 ? t.command.slice(0, 80) + \"...\" : t.command,\n })));\n\n if (selected === null) {\n console.error(` ${pc.dim(\"Cancelled\")}`);\n return;\n }\n\n const match = stopped.find((t) => t.name === selected);\n if (match) {\n await respawnProcess(match);\n }\n}\n\n/**\n * Re-spawn a stopped tracked process from its saved command/cwd.\n */\nasync function respawnProcess(proc: { name: string; command: string; cwd?: string; port?: number }): Promise<void> {\n const cmdParts = proc.command.split(/\\s+/);\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${proc.name}.log`);\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Spawning\")} ${renderAppName(proc.name)} ${pc.dim(\"(from saved config)\")}\\n`);\n console.error(` ${renderKV(\"Command\", proc.command)}`);\n if (proc.cwd) console.error(` ${renderKV(\"Directory\", proc.cwd)}`);\n if (proc.port) console.error(` ${renderKV(\"Port\", String(proc.port))}`);\n\n try {\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: proc.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n const pid = child.pid ?? 0;\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n\n child.unref();\n\n // Update tracked.json with new PID\n addTracked({\n name: proc.name,\n pid,\n command: proc.command,\n port: proc.port,\n cwd: proc.cwd,\n startedAt: new Date().toISOString(),\n });\n\n console.error(` ${pc.green(\"✓\")} ${pc.bold(proc.name)} ${pc.dim(`spawned (PID: ${pid})`)}`);\n\n // Show the process table\n await psCommand([]);\n } catch (error) {\n console.error(renderError(`Failed to spawn ${proc.name}`, String(error)));\n process.exit(1);\n }\n}\n","/**\n * Command: restart — Kill and re-spawn a tracked process from tracked.json config.\n * Fixed: now actually re-spawns (instead of just killing + suggesting manual re-run).\n */\nimport pc from \"picocolors\";\nimport { mkdirSync, createWriteStream } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { renderError, renderCommand, createSpinner, confirmPrompt } from \"../utils/format.js\";\nimport { getSystemProcesses, killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { readTracked, addTracked, removeTrackedByPid, rotateLogFile } from \"./tracker.js\";\n\nexport async function restartCommand(args: string[]): Promise<void> {\n const name = args[0];\n if (!name) { console.error(renderError(\"Missing process name/pid\", \"Usage: fennec restart <name|pid>\")); process.exit(1); }\n\n const tracked = readTracked();\n let trackedEntry = tracked.find((t) => t.name === name);\n let targetPid: number;\n\n if (trackedEntry) {\n targetPid = trackedEntry.pid;\n } else {\n const pid = parseInt(name, 10);\n if (!isNaN(pid) && String(pid) === name) {\n targetPid = pid;\n } else {\n const processes = getSystemProcesses({ name, userOnly: true, limit: 1 });\n if (processes.length === 0) { console.error(renderError(\"Process not found\", `No process matching \"${name}\"`)); process.exit(1); }\n targetPid = processes[0]!.pid;\n }\n }\n\n const confirmed = await confirmPrompt(`Restart ${pc.bold(`${name} (PID ${targetPid})`)}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n const spinner = createSpinner(`Stopping PID ${targetPid}...`);\n const killed = sysKill(targetPid, \"SIGTERM\");\n if (!killed) { spinner.fail(`Failed to stop PID ${targetPid}`); return; }\n\n await new Promise((r) => setTimeout(r, 1000));\n if (isProcessRunning(targetPid)) {\n spinner.warn(\"Process didn't stop, sending SIGKILL...\");\n sysKill(targetPid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 500));\n }\n\n spinner.succeed(`${name} stopped`);\n\n if (trackedEntry) {\n const respawnSpinner = createSpinner(`Re-spawning ${trackedEntry.name}...`);\n try {\n const cmdParts = trackedEntry.command.split(\" \");\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${trackedEntry.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: trackedEntry.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n // Remove old PID entry, add new one (only after successful spawn)\n removeTrackedByPid(targetPid);\n addTracked({\n name: trackedEntry.name,\n pid: child.pid ?? 0,\n command: trackedEntry.command,\n port: trackedEntry.port,\n cwd: trackedEntry.cwd,\n startedAt: new Date().toISOString(),\n });\n\n respawnSpinner.succeed(`${trackedEntry.name} restarted (PID: ${child.pid})`);\n } catch (error) {\n respawnSpinner.fail(`Failed to re-spawn ${trackedEntry.name}: ${String(error)}`);\n console.error(` ${pc.dim(\"Config preserved. Re-run manually:\")} ${renderCommand(trackedEntry.command)}`);\n }\n } else {\n console.error(` ${pc.dim(\"No tracked config found. Re-run manually:\")} ${renderCommand(name)}`);\n }\n}\n","/**\n * Command: log — Show logs for a tracked/managed process.\n * Supports --clear to delete log file, --level to filter by level, and -f for follow mode.\n */\nimport { existsSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn, execSync } from \"node:child_process\";\nimport pc from \"picocolors\";\nimport { symbols, renderError, renderAppName, createSpinner, timestamp } from \"../utils/format.js\";\nimport { readTracked } from \"./tracker.js\";\n\n/** Known log-level prefixes to color/highlight */\nconst LEVEL_PATTERNS: { level: string; pattern: RegExp }[] = [\n { level: \"error\", pattern: /\\b(ERROR?|FATAL?|CRITICAL?|EXCEPTION)\\b/i },\n { level: \"warn\", pattern: /\\b(WARN(ING)?)\\b/i },\n { level: \"info\", pattern: /\\b(INFO)\\b/i },\n { level: \"debug\", pattern: /\\b(DEBUG)\\b/i },\n];\n\nexport async function logCommand(args: string[]): Promise<void> {\n const target = args[0];\n if (!target) { console.error(renderError(\"Missing process name/pid\", \"Usage: fennec log <name|pid> [--lines N] [-f] [--clear] [--level error|warn|info|debug]\")); process.exit(1); }\n\n const clearFlag = args.includes(\"--clear\");\n const linesIndex = args.indexOf(\"--lines\");\n const lineCount = linesIndex !== -1 ? parseInt(args[linesIndex + 1]!, 10) : 30;\n const followFlag = args.includes(\"-f\") || args.includes(\"--follow\");\n const levelFilter = args.includes(\"--level\") ? args[args.indexOf(\"--level\") + 1]?.toLowerCase() : undefined;\n\n // Validate level filter\n if (levelFilter && ![\"error\", \"warn\", \"info\", \"debug\"].includes(levelFilter)) {\n console.error(renderError(\"Invalid level\", `\"${levelFilter}\" is not a valid level. Use: error, warn, info, debug`));\n process.exit(1);\n }\n\n let logFilePath: string | null = null;\n let displayName = target;\n const tracked = readTracked();\n const trackedMatch = tracked.find((t) => t.name === target || (parseInt(target, 10) === t.pid && !isNaN(parseInt(target, 10))));\n\n if (trackedMatch) {\n displayName = trackedMatch.name;\n logFilePath = resolve(homedir(), \".fennec\", \"logs\", `${trackedMatch.name}.log`);\n } else {\n const pid = parseInt(target, 10);\n if (!isNaN(pid) && String(pid) === target) {\n const procPath = `/proc/${pid}/fd/1`;\n if (existsSync(procPath)) logFilePath = procPath;\n }\n }\n\n // --clear flag: delete the log file\n if (clearFlag) {\n if (!logFilePath || !existsSync(logFilePath)) {\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.dim(\"No log file found for\")} ${pc.bold(displayName)}\\n`);\n process.exit(0);\n }\n try {\n unlinkSync(logFilePath);\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(\"Log cleared\")} ${pc.dim(`— ${logFilePath}`)}\\n`);\n } catch (err) {\n console.error(renderError(\"Failed to clear log\", String(err)));\n process.exit(1);\n }\n return;\n }\n\n const spinner = createSpinner(`Reading logs for ${displayName}...`);\n try {\n let logLines: string[] = [];\n if (logFilePath && existsSync(logFilePath)) {\n const content = readFileSync(logFilePath, \"utf-8\");\n logLines = content.split(\"\\n\").filter(Boolean);\n } else {\n const pid = trackedMatch?.pid ?? parseInt(target, 10);\n if (!isNaN(pid)) {\n try {\n const output = execSync(`journalctl --no-pager -n ${lineCount} _PID=${pid} 2>/dev/null || echo \"\"`, { encoding: \"utf-8\", timeout: 3000 });\n logLines = output.trim().split(\"\\n\").filter(Boolean);\n } catch { logLines = [\"(no logs available)\"]; }\n } else { logLines = [\"(no logs available)\"]; }\n }\n\n // Apply level filter\n if (levelFilter) {\n const levelRegex = new RegExp(`\\\\b(${levelFilter.toUpperCase()})\\\\b`, \"i\");\n logLines = logLines.filter((line) => levelRegex.test(line));\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Logs\")} ${renderAppName(displayName)} ${pc.dim(`(last ${logLines.length} line${logLines.length !== 1 ? \"s\" : \"\"})`)}`);\n\n const sliced = logLines.slice(-lineCount);\n for (const line of sliced) {\n const display = line.length > 300 ? line.slice(0, 300) + \"…\" : line;\n\n // Add timestamp prefix in follow mode\n const prefix = followFlag ? `${timestamp()} ` : \"\";\n\n // Color by level\n if (line.toLowerCase().includes(\"error\") || line.toLowerCase().includes(\"fail\") || line.toLowerCase().includes(\"fatal\")) {\n console.error(` ${pc.red(prefix + display)}`);\n } else if (line.toLowerCase().includes(\"warn\")) {\n console.error(` ${pc.yellow(prefix + display)}`);\n } else if (line.toLowerCase().includes(\"info\") || line.includes(\"[\")) {\n console.error(` ${pc.cyan(prefix + display)}`);\n } else {\n console.error(` ${prefix}${display}`);\n }\n }\n\n if (followFlag && logFilePath) {\n // Build tail args: show timestamps with --time-style\n const tailArgs = [\"-n\", \"0\", \"-f\"];\n if (levelFilter) {\n // For follow mode with level filter, we pipe through grep\n const tail = spawn(\"tail\", [\"-n\", \"0\", \"-f\", logFilePath], { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n const grep = spawn(\"grep\", [\"--line-buffered\", \"-i\", levelFilter], { stdio: [\"pipe\", \"inherit\", \"inherit\"] });\n if (tail.stdout) tail.stdout.pipe(grep.stdin);\n\n await new Promise<void>((resolve) => {\n tail.on(\"exit\", () => resolve());\n process.once(\"SIGINT\", () => {\n tail.kill(\"SIGTERM\");\n grep.kill(\"SIGTERM\");\n resolve();\n });\n });\n } else {\n console.error(`\\n ${pc.dim(\"Following... (Ctrl+C to stop)\")}\\n`);\n const tail = spawn(\"tail\", tailArgs.concat([logFilePath]), { stdio: \"inherit\" });\n // Use SIGINT resolve pattern\n await new Promise<void>((resolve) => {\n tail.on(\"exit\", () => resolve());\n process.once(\"SIGINT\", () => {\n tail.kill(\"SIGTERM\");\n resolve();\n });\n });\n }\n }\n console.error();\n } catch (error) {\n spinner.fail(`Failed to read logs for ${displayName}`);\n console.error(renderError(\"Log read failed\", String(error)));\n }\n}\n","/**\n * Command: attach — Attach to a process by port.\n */\nimport { PortDetector } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { renderError, renderKV, renderAppName, createSpinner } from \"../utils/format.js\";\n\nexport async function attachCommand(args: string[]): Promise<void> {\n const port = parseInt(args[0]!, 10);\n if (isNaN(port)) { console.error(renderError(\"Invalid port\", \"Usage: fennec attach <port> --name <name>\")); process.exit(1); }\n\n const nameIndex = args.indexOf(\"--name\");\n const rawName = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const name = rawName ?? `port-${port}`;\n\n const spinner = createSpinner(`Attaching to :${port}...`);\n try {\n const detector = new PortDetector();\n const info = detector.detectByPort(port);\n if (info) {\n spinner.succeed(`Attached to :${port}`);\n console.error(` ${renderKV(\"Name\", renderAppName(name))}`);\n console.error(` ${renderKV(\"PID\", String(info.pid))}`);\n console.error(` ${renderKV(\"Command\", info.command || pc.dim(\"unknown\"))}`);\n } else {\n spinner.fail(`No process found on port ${port}`);\n process.exit(1);\n }\n } catch (error) {\n spinner.fail(`Failed to attach to :${port}`);\n console.error(renderError(\"Error\", String(error)));\n process.exit(1);\n }\n}\n","/**\n * Command: sessions — List saved auth sessions.\n */\nimport { SessionStore } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { symbols, renderTable, type Column, type Row } from \"../utils/format.js\";\n\nexport async function sessionsCommand(): Promise<void> {\n const store = new SessionStore(\"./.fennec/sessions\");\n const sessions = store.list();\n if (sessions.length === 0) { console.error(`\\n ${pc.dim(\"No saved sessions found.\")}\\n`); return; }\n\n const columns: Column[] = [\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"origin\", label: \"Origin\" },\n { key: \"savedAt\", label: \"Saved\", format: (v) => pc.dim(String(v)) },\n ];\n const rows: Row[] = sessions.map((s) => ({ name: s.name, origin: s.origin, savedAt: new Date(s.savedAt).toLocaleString() }));\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Saved Sessions\")}\\n`);\n console.error(renderTable(columns, rows));\n console.error(` ${pc.dim(`${sessions.length} session(s)`)}\\n`);\n}\n","/**\n * Command: setup — Interactive MCP client setup.\n */\nimport pc from \"picocolors\";\nimport { symbols, renderSuccess, renderCommand, selectPrompt } from \"../utils/format.js\";\n\nexport async function setupCommand(): Promise<void> {\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Setup\")}\\n`);\n\n const mcpClient = await selectPrompt(\"Which MCP client are you using?\", [\n { value: \"claude\", label: \"Claude Desktop\", description: \"Anthropic's AI desktop app\" },\n { value: \"cursor\", label: \"Cursor\", description: \"AI-powered code editor\" },\n { value: \"cline\", label: \"Cline\", description: \"VS Code MCP client\" },\n { value: \"other\", label: \"Other MCP client\", description: \"Any MCP-compatible client\" },\n ]);\n\n if (!mcpClient) { console.error(` ${pc.dim(\"Setup cancelled.\")}\\n`); return; }\n\n console.error(`\\n ${pc.green(\"✓\")} Selected: ${pc.bold(mcpClient)}\\n`);\n\n const configSnippet = `{\\n \"mcpServers\": {\\n \"fennec\": {\\n \"command\": \"fennec\",\\n \"args\": [\"start\"]\\n }\\n }\\n}`;\n\n console.error(` ${pc.bold(\"Add this to your MCP client config:\")}\\n`);\n console.error(` ${pc.dim(\"```\")}`);\n console.error(configSnippet.split(\"\\n\").map((l) => ` ${l}`).join(\"\\n\"));\n console.error(` ${pc.dim(\"```\")}\\n`);\n console.error(` ${renderSuccess(\"Setup complete!\")} ${pc.dim(\"Run\")} ${renderCommand(\"fennec start\")} ${pc.dim(\"to begin.\")}\\n`);\n}\n","/**\n * Command: init, install-browsers — Project setup utilities.\n */\nimport { existsSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport pc from \"picocolors\";\nimport { renderCommand, renderError, renderSuccess, createSpinner, confirmPrompt } from \"../utils/format.js\";\n\nexport async function installBrowsersCommand(): Promise<void> {\n console.error(`\\n ${pc.bold(\"Installing Browser Engines\")}\\n`);\n const spinner = createSpinner(\"Installing Chromium...\");\n try {\n execSync(\"npx playwright install chromium\", { stdio: \"pipe\", timeout: 120000 });\n spinner.succeed(\"Chromium installed successfully\");\n } catch {\n spinner.fail(\"Failed to install Chromium\");\n console.error(` ${pc.yellow(\"→\")} Try running: ${renderCommand(\"npx playwright install chromium\")}`);\n }\n console.error(`\\n ${pc.green(\"✓\")} Browser installation complete.\\n`);\n}\n\nexport async function initCommand(): Promise<void> {\n console.error(`\\n ${pc.bold(\"Initialize Fennec Configuration\")}\\n`);\n\n const configFile = resolve(\"./fennec.config.yaml\");\n if (existsSync(configFile)) {\n const overwrite = await confirmPrompt(`${pc.yellow(\"fennec.config.yaml\")} already exists. Overwrite?`, false);\n if (!overwrite) { console.error(` ${pc.dim(\"Cancelled.\")}\\n`); return; }\n }\n\n const spinner = createSpinner(\"Generating configuration...\");\n\n const config = `# Fennec Configuration\n# Generated by 'fennec init'\n\nbrowser:\n type: chromium\n headless: true\n defaultTimeout: 30000\n viewport:\n width: 1280\n height: 720\n\nsession:\n maxSessions: 10\n idleTimeoutSecs: 1800\n persistPath: \".fennec/sessions\"\n\nprocess:\n maxProcesses: 10\n logBufferLines: 2000\n spawnAllowlist:\n - \"npm\"\n - \"node\"\n - \"pnpm\"\n - \"yarn\"\n - \"bun\"\n - \"python\"\n - \"python3\"\n\nterminal:\n logBufferLines: 2000\n watchDebounceMs: 50\n\nnetwork:\n bufferSize: 1000\n captureRequestBody: true\n captureResponseBody: true\n slowRequestThresholdMs: 1000\n\nconsole:\n bufferSize: 500\n levels:\n - log\n - info\n - warn\n - error\n - debug\n\ncorrelation:\n windowMs: 500\n enableRootCauseInference: true\n minConfidence: 0.7\n\nsecurity:\n sandbox: true\n allowProcessSpawn: true\n allowProcessKill: false\n allowedDomains: []\n blockedDomains: []\n allowFileProtocol: false\n allowCDPRawAccess: false\n exportPath: \".fennec/exports\"\n maxExportSizeMB: 10\n\ntransport:\n type: stdio\n port: 3333\n host: \"127.0.0.1\"\n\nlogging:\n level: info\n format: pretty\n file: null\n`;\n\n writeFileSync(configFile, config, \"utf-8\");\n spinner.succeed(`Configuration written to ${pc.bold(configFile)}`);\n console.error(`\\n ${pc.dim(\"Edit the file to customize Fennec behavior.\")}\\n`);\n}\n","/**\n * Command: health — Check Fennec system health\n * Returns system status, tracked processes, and resource info.\n */\nimport { existsSync, readdirSync, statSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderKV, renderError } from \"../utils/format.js\";\nimport { readTracked } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function healthCommand(): Promise<void> {\n printBanner();\n console.error(` ${pc.bold(\"Fennec Health Check\")}\\n`);\n\n // 1. ADB availability (if needed)\n let adbStatus = \"unknown\";\n try {\n const result = execSync(\"adb --version\", {\n encoding: \"utf-8\",\n timeout: 3000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const version = result.split(\"\\n\")[0]?.trim() ?? \"installed\";\n adbStatus = pc.green(version);\n } catch {\n adbStatus = pc.dim(\"not found\") + \" (optional)\";\n }\n\n // 2. Tracked processes\n const tracked = readTracked();\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n\n // 3. Disk usage for logs\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n let logSize = \"0 B\";\n try {\n if (existsSync(logDir)) {\n const files = readdirSync(logDir);\n let totalBytes = 0;\n for (const f of files) {\n const fStat = statSync(resolve(logDir, f));\n totalBytes += fStat.size;\n }\n logSize = totalBytes > 1024 * 1024\n ? `${(totalBytes / (1024 * 1024)).toFixed(1)} MB`\n : `${(totalBytes / 1024).toFixed(1)} KB`;\n }\n } catch { /* best-effort */ }\n\n // 4. Memory info\n let memoryInfo = \"unknown\";\n try {\n const mem = process.memoryUsage();\n memoryInfo = `${(mem.rss / (1024 * 1024)).toFixed(0)} MB RSS / ${(mem.heapUsed / (1024 * 1024)).toFixed(0)} MB heap`;\n } catch { /* best-effort */ }\n\n console.error(` ${symbols.fox} ${pc.bold(\"System\")}\\n`);\n console.error(` ${renderKV(\"Node.js\", process.version)}`);\n console.error(` ${renderKV(\"Platform\", `${process.platform} ${process.arch}`)}`);\n console.error(` ${renderKV(\"Memory\", memoryInfo)}`);\n console.error(` ${renderKV(\"ADB\", adbStatus)}`);\n console.error(` ${renderKV(\"PID\", String(process.pid))}`);\n console.error();\n console.error(` ${symbols.fox} ${pc.bold(\"Processes\")}\\n`);\n console.error(` ${renderKV(\"Tracked\", String(tracked.length))}`);\n console.error(` ${renderKV(\"Running\", String(runningCount))}`);\n console.error(` ${renderKV(\"Logs\", logSize)}`);\n console.error();\n\n const allHealthy = runningCount === tracked.length || tracked.length === 0;\n if (allHealthy) {\n console.error(` ${pc.green(\"✓\")} ${pc.bold(\"All systems healthy\")}\\n`);\n } else {\n const stopped = tracked.length - runningCount;\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(`${stopped} process(es) stopped`)} ${pc.dim(\"fennec ps\")}\\n`);\n }\n}\n","/**\n * Command: cleanup — Remove dead tracked entries that have no saved command\n * and cannot be re-spawned.\n */\nimport pc from \"picocolors\";\nimport { renderError, confirmPrompt } from \"../utils/format.js\";\nimport { readTracked, saveTracked } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function cleanupCommand(): Promise<void> {\n const tracked = readTracked();\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes to clean up.\")}\\n`);\n return;\n }\n\n const toRemove = tracked.filter((t) => !isProcessRunning(t.pid) && !t.command);\n if (toRemove.length === 0) {\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(\"All clean\")} ${pc.dim(\"— no dead entries without saved commands.\")}\\n`);\n return;\n }\n\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.bold(`Found ${toRemove.length} dead entr${toRemove.length > 1 ? \"ies\" : \"y\"} without saved commands`)}\\n`);\n for (const entry of toRemove) {\n console.error(` ${pc.dim(\"·\")} ${pc.bold(entry.name)} ${pc.dim(`(PID ${entry.pid})`)}`);\n }\n console.error();\n\n const confirmed = await confirmPrompt(`Remove ${toRemove.length} entr${toRemove.length > 1 ? \"ies\" : \"y\"}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}\\n`); return; }\n\n const remaining = tracked.filter((t) => !toRemove.includes(t));\n saveTracked(remaining);\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(`Removed ${toRemove.length} entr${toRemove.length > 1 ? \"ies\" : \"y\"}`)} ${pc.dim(`(${remaining.length} remaining)`)}\\n`);\n}\n","/**\n * Command: info — Show detailed info about a tracked process.\n */\nimport pc from \"picocolors\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { renderError, renderKVColor, symbols } from \"../utils/format.js\";\nimport { readTracked, formatUptime } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function infoCommand(args: string[]): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error(renderError(\"Missing name\", \"Usage: fennec info <name>\"));\n process.exit(1);\n }\n\n const tracked = readTracked();\n const match = tracked.find((t) => t.name === name);\n\n if (!match) {\n console.error(renderError(\"Not found\", `No tracked process named \"${name}\".`));\n process.exit(1);\n }\n\n const running = isProcessRunning(match.pid);\n const statusIcon = running ? pc.green(\"●\") : pc.red(\"○\");\n const statusText = running ? pc.green(\"running\") : pc.red(\"stopped\");\n const uptime = running\n ? formatUptime(Math.floor((Date.now() - new Date(match.startedAt).getTime()) / 1000))\n : \"-\";\n const logPath = resolve(homedir(), \".fennec\", \"logs\", `${match.name}.log`);\n\n console.error(`\\n ${symbols.fox} ${pc.bold(match.name)} ${pc.dim(\"— Process Info\")}\\n`);\n console.error(` ${renderKVColor(\"Name\", match.name, pc.bold)}`);\n console.error(` ${renderKVColor(\"Status\", `${statusIcon} ${statusText}`)}`);\n console.error(` ${renderKVColor(\"PID\", String(match.pid))}`);\n console.error(` ${renderKVColor(\"Port\", match.port ? String(match.port) : \"-\")}`);\n console.error(` ${renderKVColor(\"Command\", match.command || pc.dim(\"(none)\"))}`);\n if (match.cwd) console.error(` ${renderKVColor(\"CWD\", match.cwd)}`);\n console.error(` ${renderKVColor(\"Started\", new Date(match.startedAt).toLocaleString())}`);\n console.error(` ${renderKVColor(\"Uptime\", uptime)}`);\n console.error(` ${renderKVColor(\"Log Path\", logPath)}`);\n\n if (!running && match.command) {\n console.error(`\\n ${pc.dim(\"Re-spawn with:\")} ${pc.cyan(`fennec spawn ${match.name}`)}`);\n }\n console.error();\n}\n","/**\n * Command: rename — Rename a tracked process and its log file.\n */\nimport pc from \"picocolors\";\nimport { existsSync, renameSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { renderError, renderKVColor, createSpinner, confirmPrompt, symbols } from \"../utils/format.js\";\nimport { readTracked, saveTracked } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function renameCommand(args: string[]): Promise<void> {\n const [oldName, newName] = args;\n\n if (!oldName || !newName) {\n console.error(renderError(\"Missing arguments\", \"Usage: fennec rename <old-name> <new-name>\"));\n process.exit(1);\n }\n\n if (oldName === newName) {\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.dim(\"Old and new names are the same.\")}\\n`);\n process.exit(0);\n }\n\n const tracked = readTracked();\n const match = tracked.find((t) => t.name === oldName);\n\n if (!match) {\n console.error(renderError(\"Not found\", `No tracked process named \"${oldName}\".`));\n process.exit(1);\n }\n\n if (tracked.some((t) => t.name === newName)) {\n console.error(renderError(\"Name taken\", `A process named \"${newName}\" already exists.`));\n process.exit(1);\n }\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Rename Process\")}\\n`);\n console.error(` ${renderKVColor(\"From\", oldName)}`);\n console.error(` ${renderKVColor(\"To\", newName)}`);\n if (isProcessRunning(match.pid)) {\n console.error(` ${pc.yellow(\"⚠\")} ${pc.dim(\"Process is still running — log entries will go to the old file until stopped.\")}`);\n }\n console.error();\n\n const confirmed = await confirmPrompt(`Rename ${pc.bold(oldName)} ${pc.dim(\"→\")} ${pc.bold(newName)}?`, true);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}\\n`); return; }\n\n const spinner = createSpinner(`Renaming ${oldName} → ${newName}...`);\n\n // Rename log file if it exists\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n const oldLog = resolve(logDir, `${oldName}.log`);\n const newLog = resolve(logDir, `${newName}.log`);\n\n if (existsSync(oldLog) && !existsSync(newLog)) {\n try {\n renameSync(oldLog, newLog);\n } catch { /* best-effort */ }\n }\n\n // Update tracked.json\n match.name = newName;\n saveTracked(tracked);\n\n spinner.succeed(`${pc.bold(oldName)} ${pc.dim(\"→\")} ${pc.bold(newName)}`);\n console.error();\n}\n","/**\n * Commands: export, import — Backup and restore tracked.json configuration.\n */\nimport pc from \"picocolors\";\nimport { existsSync, writeFileSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { renderError, confirmPrompt, symbols, renderKVColor } from \"../utils/format.js\";\nimport { readTracked, saveTracked } from \"./tracker.js\";\n\n/**\n * fennec export [--file path]\n * Export tracked.json to stdout or a file.\n */\nexport async function exportCommand(args: string[]): Promise<void> {\n const tracked = readTracked();\n const fileIndex = args.indexOf(\"--file\");\n const filePath = fileIndex !== -1 ? args[fileIndex + 1] : undefined;\n\n if (fileIndex !== -1 && !filePath) {\n console.error(renderError(\"Missing file path\", \"Usage: fennec export --file <path>\"));\n process.exit(1);\n }\n\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes to export.\")}\\n`);\n return;\n }\n\n const json = JSON.stringify(tracked, null, 2);\n\n if (filePath) {\n try {\n writeFileSync(resolve(filePath), json, \"utf-8\");\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(`Exported ${tracked.length} process(es)`)} ${pc.dim(`→ ${filePath}`)}\\n`);\n } catch (err) {\n console.error(renderError(\"Export failed\", String(err)));\n process.exit(1);\n }\n } else {\n // Write to stdout as JSON\n console.log(json);\n }\n}\n\n/**\n * fennec import <file>\n * Import processes from a JSON file and merge into tracked.json.\n */\nexport async function importCommand(args: string[]): Promise<void> {\n const filePath = args[0];\n\n if (!filePath) {\n console.error(renderError(\"Missing file\", \"Usage: fennec import <file>\"));\n process.exit(1);\n }\n\n const resolvedPath = resolve(filePath);\n if (!existsSync(resolvedPath)) {\n console.error(renderError(\"File not found\", `\"${filePath}\" does not exist.`));\n process.exit(1);\n }\n\n let imported: { name: string; pid: number; command: string; port?: number; cwd?: string; startedAt: string }[];\n try {\n imported = JSON.parse(readFileSync(resolvedPath, \"utf-8\"));\n if (!Array.isArray(imported) || imported.length === 0) {\n console.error(renderError(\"Invalid file\", \"File must contain a non-empty JSON array of process objects.\"));\n process.exit(1);\n }\n } catch (err) {\n console.error(renderError(\"Invalid JSON\", String(err)));\n process.exit(1);\n }\n\n const existing = readTracked();\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Import Processes\")}\\n`);\n console.error(` ${renderKVColor(\"File\", resolvedPath)}`);\n console.error(` ${renderKVColor(\"Importing\", `${imported.length} process(es)`)}`);\n console.error(` ${renderKVColor(\"Existing\", `${existing.length} process(es)`)}`);\n\n // Show what will be imported\n console.error(`\\n ${pc.bold(\"Processes to import:\")}`);\n for (const p of imported) {\n console.error(` ${pc.green(\"+\")} ${pc.bold(p.name)} ${pc.dim(`(${p.command})`)}`);\n }\n console.error();\n\n const confirmed = await confirmPrompt(\"Merge into tracked.json? Existing processes with the same name will be overwritten.\", true);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}\\n`); return; }\n\n // Merge: overwrite existing by name, add new\n const merged = [...existing];\n for (const proc of imported) {\n const idx = merged.findIndex((t) => t.name === proc.name);\n if (idx !== -1) {\n merged[idx] = { ...merged[idx], ...proc };\n } else {\n merged.push(proc as any);\n }\n }\n\n saveTracked(merged);\n console.error(` ${pc.green(\"✓\")} ${pc.bold(`Imported ${imported.length} process(es)`)} ${pc.dim(`(${merged.length} total)`)}\\n`);\n}\n","#!/usr/bin/env node\n\nimport { renderError } from \"./utils/format.js\";\nimport { printBanner } from \"./utils/banner.js\";\nimport { showHelp } from \"./utils/help.js\";\nimport { pipeCommand } from \"./commands/pipe.js\";\nimport { attachPidCommand } from \"./commands/attach-pid.js\";\nimport { attachPortCommand } from \"./commands/attach-port.js\";\nimport { watchCommand } from \"./commands/watch.js\";\nimport { startServer, startCommand, runCommand } from \"./commands/start.js\";\nimport { psCommand, statusCommand } from \"./commands/ps.js\";\nimport { killCommand } from \"./commands/kill.js\";\nimport { stopCommand } from \"./commands/stop.js\";\nimport { spawnCommand } from \"./commands/spawn.js\";\nimport { restartCommand } from \"./commands/restart.js\";\nimport { logCommand } from \"./commands/log.js\";\nimport { attachCommand } from \"./commands/attach.js\";\nimport { sessionsCommand } from \"./commands/sessions.js\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { installBrowsersCommand, initCommand } from \"./commands/management.js\";\nimport { healthCommand } from \"./commands/health.js\";\nimport { cleanupCommand } from \"./commands/cleanup.js\";\nimport { infoCommand } from \"./commands/info.js\";\nimport { renameCommand } from \"./commands/rename.js\";\nimport { exportCommand, importCommand } from \"./commands/export-import.js\";\n\nconst [, , command, ...args] = process.argv;\n\nasync function main(): Promise<void> {\n if (!command || command === \"start\") {\n if (args.length === 0 || args[0]?.startsWith(\"--\")) {\n await startServer(args);\n } else {\n await startCommand(args);\n }\n } else if (command === \"run\") {\n await runCommand(args);\n } else if (command === \"ps\") {\n printBanner();\n await psCommand(args);\n } else if (command === \"status\") {\n printBanner();\n await statusCommand(args);\n } else if (command === \"log\") {\n await logCommand(args);\n } else if (command === \"spawn\") {\n await spawnCommand(args);\n } else if (command === \"stop\") {\n await stopCommand(args);\n } else if (command === \"kill\") {\n await killCommand(args);\n } else if (command === \"restart\") {\n await restartCommand(args);\n } else if (command === \"info\") {\n printBanner();\n await infoCommand(args);\n } else if (command === \"cleanup\") {\n printBanner();\n await cleanupCommand();\n } else if (command === \"rename\") {\n await renameCommand(args);\n } else if (command === \"export\") {\n await exportCommand(args);\n } else if (command === \"import\") {\n await importCommand(args);\n } else if (command === \"attach\") {\n await attachCommand(args);\n } else if (command === \"pipe\") {\n await pipeCommand(args);\n } else if (command === \"attach-pid\") {\n await attachPidCommand(args);\n } else if (command === \"attach-port\") {\n await attachPortCommand(args);\n } else if (command === \"watch\") {\n await watchCommand(args);\n } else if (command === \"sessions\") {\n await sessionsCommand();\n } else if (command === \"setup\") {\n await setupCommand();\n } else if (command === \"install-browsers\") {\n printBanner();\n await installBrowsersCommand();\n } else if (command === \"health\" || command === \"--health\") {\n await healthCommand();\n } else if (command === \"init\") {\n printBanner();\n await initCommand();\n } else if (command === \"version\" || command === \"--version\" || command === \"-v\") {\n printBanner();\n } else if (command === \"help\" || command === \"--help\" || command === \"-h\") {\n printBanner();\n showHelp();\n } else {\n console.error(renderError(`Unknown command: ${command}`, \"Run 'fennec help' for usage information\"));\n process.exit(1);\n }\n}\n\nmain().catch((error) => {\n console.error(renderError(\"Fatal error\", String(error)));\n process.exit(1);\n});\n"],"mappings":"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","names":["pad","text","options","colors","colors","colors","colors","colors","stylize","builder","args","style","sequencer","map","colors","colors","args","CliTable3","num","resolve","pc","fennecOrange","pc","fennecOrange","pc","args","args","PortDetector","args","args","mkdirSync","resolve","homedir","pc","existsSync","resolve","readFileSync","existsSync","command","pc","args","pc","columns","rows","resolve","args","pc","resolve","homedir","mkdirSync","setupRestartWatch","pc","args","pc","pc","args","pc","pc","createWriteStream","mkdirSync","resolve","homedir","spawn","args","pc","resolve","homedir","mkdirSync","spawn","createWriteStream","pc","mkdirSync","createWriteStream","resolve","homedir","spawn","args","pc","resolve","homedir","mkdirSync","spawn","createWriteStream","existsSync","readFileSync","resolve","homedir","spawn","execSync","pc","args","resolve","homedir","existsSync","pc","readFileSync","execSync","spawn","PortDetector","pc","args","PortDetector","pc","pc","pc","pc","pc","existsSync","writeFileSync","resolve","execSync","pc","pc","execSync","resolve","existsSync","writeFileSync","existsSync","readdirSync","statSync","execSync","resolve","homedir","pc","pc","execSync","resolve","homedir","existsSync","readdirSync","statSync","pc","pc","pc","resolve","homedir","args","pc","resolve","homedir","pc","existsSync","renameSync","resolve","homedir","args","pc","resolve","homedir","existsSync","renameSync","pc","existsSync","writeFileSync","readFileSync","resolve","args","pc","writeFileSync","resolve","existsSync","readFileSync"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/debug.js","../../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js","../../../node_modules/.pnpm/emoji-regex@8.0.0/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@4.2.3/node_modules/string-width/index.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/utils.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/styles.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/system/has-flag.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/system/supports-colors.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/custom/trap.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/custom/zalgo.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/america.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/zebra.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/rainbow.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/random.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/colors.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/safe.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/cell.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/layout-manager.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/table.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/index.js","../src/utils/format.ts","../src/utils/banner.ts","../src/utils/help.ts","../src/commands/pipe.ts","../src/commands/attach-pid.ts","../src/commands/attach-port.ts","../src/commands/watch.ts","../src/commands/start.ts","../src/commands/tracker.ts","../src/utils/system-process.ts","../src/commands/ps.ts","../src/commands/kill.ts","../src/commands/stop.ts","../src/commands/spawn.ts","../src/commands/restart.ts","../src/commands/log.ts","../src/commands/attach.ts","../src/commands/sessions.ts","../src/commands/setup.ts","../src/commands/management.ts","../src/commands/health.ts","../src/commands/cleanup.ts","../src/commands/info.ts","../src/commands/rename.ts","../src/commands/export-import.ts","../src/index.ts"],"sourcesContent":["let messages = [];\nlet level = 0;\n\nconst debug = (msg, min) => {\n if (level >= min) {\n messages.push(msg);\n }\n};\n\ndebug.WARN = 1;\ndebug.INFO = 2;\ndebug.DEBUG = 3;\n\ndebug.reset = () => {\n messages = [];\n};\n\ndebug.setDebugLevel = (v) => {\n level = v;\n};\n\ndebug.warn = (msg) => debug(msg, debug.WARN);\ndebug.info = (msg) => debug(msg, debug.INFO);\ndebug.debug = (msg) => debug(msg, debug.DEBUG);\n\ndebug.debugMessages = () => messages;\n\nmodule.exports = debug;\n","'use strict';\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n","/* eslint-disable yoda */\n'use strict';\n\nconst isFullwidthCodePoint = codePoint => {\n\tif (Number.isNaN(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tcodePoint >= 0x1100 && (\n\t\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nmodule.exports = isFullwidthCodePoint;\nmodule.exports.default = isFullwidthCodePoint;\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\nconst emojiRegex = require('emoji-regex');\n\nconst stringWidth = string => {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tlet width = 0;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst code = string.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n\nmodule.exports = stringWidth;\n// TODO: remove this in the next major version\nmodule.exports.default = stringWidth;\n","const stringWidth = require('string-width');\n\nfunction codeRegex(capture) {\n return capture ? /\\u001b\\[((?:\\d*;){0,5}\\d*)m/g : /\\u001b\\[(?:\\d*;){0,5}\\d*m/g;\n}\n\nfunction strlen(str) {\n let code = codeRegex();\n let stripped = ('' + str).replace(code, '');\n let split = stripped.split('\\n');\n return split.reduce(function (memo, s) {\n return stringWidth(s) > memo ? stringWidth(s) : memo;\n }, 0);\n}\n\nfunction repeat(str, times) {\n return Array(times + 1).join(str);\n}\n\nfunction pad(str, len, pad, dir) {\n let length = strlen(str);\n if (len + 1 >= length) {\n let padlen = len - length;\n switch (dir) {\n case 'right': {\n str = repeat(pad, padlen) + str;\n break;\n }\n case 'center': {\n let right = Math.ceil(padlen / 2);\n let left = padlen - right;\n str = repeat(pad, left) + str + repeat(pad, right);\n break;\n }\n default: {\n str = str + repeat(pad, padlen);\n break;\n }\n }\n }\n return str;\n}\n\nlet codeCache = {};\n\nfunction addToCodeCache(name, on, off) {\n on = '\\u001b[' + on + 'm';\n off = '\\u001b[' + off + 'm';\n codeCache[on] = { set: name, to: true };\n codeCache[off] = { set: name, to: false };\n codeCache[name] = { on: on, off: off };\n}\n\n//https://github.com/Marak/colors.js/blob/master/lib/styles.js\naddToCodeCache('bold', 1, 22);\naddToCodeCache('italics', 3, 23);\naddToCodeCache('underline', 4, 24);\naddToCodeCache('inverse', 7, 27);\naddToCodeCache('strikethrough', 9, 29);\n\nfunction updateState(state, controlChars) {\n let controlCode = controlChars[1] ? parseInt(controlChars[1].split(';')[0]) : 0;\n if ((controlCode >= 30 && controlCode <= 39) || (controlCode >= 90 && controlCode <= 97)) {\n state.lastForegroundAdded = controlChars[0];\n return;\n }\n if ((controlCode >= 40 && controlCode <= 49) || (controlCode >= 100 && controlCode <= 107)) {\n state.lastBackgroundAdded = controlChars[0];\n return;\n }\n if (controlCode === 0) {\n for (let i in state) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(state, i)) {\n delete state[i];\n }\n }\n return;\n }\n let info = codeCache[controlChars[0]];\n if (info) {\n state[info.set] = info.to;\n }\n}\n\nfunction readState(line) {\n let code = codeRegex(true);\n let controlChars = code.exec(line);\n let state = {};\n while (controlChars !== null) {\n updateState(state, controlChars);\n controlChars = code.exec(line);\n }\n return state;\n}\n\nfunction unwindState(state, ret) {\n let lastBackgroundAdded = state.lastBackgroundAdded;\n let lastForegroundAdded = state.lastForegroundAdded;\n\n delete state.lastBackgroundAdded;\n delete state.lastForegroundAdded;\n\n Object.keys(state).forEach(function (key) {\n if (state[key]) {\n ret += codeCache[key].off;\n }\n });\n\n if (lastBackgroundAdded && lastBackgroundAdded != '\\u001b[49m') {\n ret += '\\u001b[49m';\n }\n if (lastForegroundAdded && lastForegroundAdded != '\\u001b[39m') {\n ret += '\\u001b[39m';\n }\n\n return ret;\n}\n\nfunction rewindState(state, ret) {\n let lastBackgroundAdded = state.lastBackgroundAdded;\n let lastForegroundAdded = state.lastForegroundAdded;\n\n delete state.lastBackgroundAdded;\n delete state.lastForegroundAdded;\n\n Object.keys(state).forEach(function (key) {\n if (state[key]) {\n ret = codeCache[key].on + ret;\n }\n });\n\n if (lastBackgroundAdded && lastBackgroundAdded != '\\u001b[49m') {\n ret = lastBackgroundAdded + ret;\n }\n if (lastForegroundAdded && lastForegroundAdded != '\\u001b[39m') {\n ret = lastForegroundAdded + ret;\n }\n\n return ret;\n}\n\nfunction truncateWidth(str, desiredLength) {\n if (str.length === strlen(str)) {\n return str.substr(0, desiredLength);\n }\n\n while (strlen(str) > desiredLength) {\n str = str.slice(0, -1);\n }\n\n return str;\n}\n\nfunction truncateWidthWithAnsi(str, desiredLength) {\n let code = codeRegex(true);\n let split = str.split(codeRegex());\n let splitIndex = 0;\n let retLen = 0;\n let ret = '';\n let myArray;\n let state = {};\n\n while (retLen < desiredLength) {\n myArray = code.exec(str);\n let toAdd = split[splitIndex];\n splitIndex++;\n if (retLen + strlen(toAdd) > desiredLength) {\n toAdd = truncateWidth(toAdd, desiredLength - retLen);\n }\n ret += toAdd;\n retLen += strlen(toAdd);\n\n if (retLen < desiredLength) {\n if (!myArray) {\n break;\n } // full-width chars may cause a whitespace which cannot be filled\n ret += myArray[0];\n updateState(state, myArray);\n }\n }\n\n return unwindState(state, ret);\n}\n\nfunction truncate(str, desiredLength, truncateChar) {\n truncateChar = truncateChar || '…';\n let lengthOfStr = strlen(str);\n if (lengthOfStr <= desiredLength) {\n return str;\n }\n desiredLength -= strlen(truncateChar);\n\n let ret = truncateWidthWithAnsi(str, desiredLength);\n\n ret += truncateChar;\n\n const hrefTag = '\\x1B]8;;\\x07';\n\n if (str.includes(hrefTag) && !ret.includes(hrefTag)) {\n ret += hrefTag;\n }\n\n return ret;\n}\n\nfunction defaultOptions() {\n return {\n chars: {\n top: '─',\n 'top-mid': '┬',\n 'top-left': '┌',\n 'top-right': '┐',\n bottom: '─',\n 'bottom-mid': '┴',\n 'bottom-left': '└',\n 'bottom-right': '┘',\n left: '│',\n 'left-mid': '├',\n mid: '─',\n 'mid-mid': '┼',\n right: '│',\n 'right-mid': '┤',\n middle: '│',\n },\n truncate: '…',\n colWidths: [],\n rowHeights: [],\n colAligns: [],\n rowAligns: [],\n style: {\n 'padding-left': 1,\n 'padding-right': 1,\n head: ['red'],\n border: ['grey'],\n compact: false,\n },\n head: [],\n };\n}\n\nfunction mergeOptions(options, defaults) {\n options = options || {};\n defaults = defaults || defaultOptions();\n let ret = Object.assign({}, defaults, options);\n ret.chars = Object.assign({}, defaults.chars, options.chars);\n ret.style = Object.assign({}, defaults.style, options.style);\n return ret;\n}\n\n// Wrap on word boundary\nfunction wordWrap(maxLength, input) {\n let lines = [];\n let split = input.split(/(\\s+)/g);\n let line = [];\n let lineLength = 0;\n let whitespace;\n for (let i = 0; i < split.length; i += 2) {\n let word = split[i];\n let newLength = lineLength + strlen(word);\n if (lineLength > 0 && whitespace) {\n newLength += whitespace.length;\n }\n if (newLength > maxLength) {\n if (lineLength !== 0) {\n lines.push(line.join(''));\n }\n line = [word];\n lineLength = strlen(word);\n } else {\n line.push(whitespace || '', word);\n lineLength = newLength;\n }\n whitespace = split[i + 1];\n }\n if (lineLength) {\n lines.push(line.join(''));\n }\n return lines;\n}\n\n// Wrap text (ignoring word boundaries)\nfunction textWrap(maxLength, input) {\n let lines = [];\n let line = '';\n function pushLine(str, ws) {\n if (line.length && ws) line += ws;\n line += str;\n while (line.length > maxLength) {\n lines.push(line.slice(0, maxLength));\n line = line.slice(maxLength);\n }\n }\n let split = input.split(/(\\s+)/g);\n for (let i = 0; i < split.length; i += 2) {\n pushLine(split[i], i && split[i - 1]);\n }\n if (line.length) lines.push(line);\n return lines;\n}\n\nfunction multiLineWordWrap(maxLength, input, wrapOnWordBoundary = true) {\n let output = [];\n input = input.split('\\n');\n const handler = wrapOnWordBoundary ? wordWrap : textWrap;\n for (let i = 0; i < input.length; i++) {\n output.push.apply(output, handler(maxLength, input[i]));\n }\n return output;\n}\n\nfunction colorizeLines(input) {\n let state = {};\n let output = [];\n for (let i = 0; i < input.length; i++) {\n let line = rewindState(state, input[i]);\n state = readState(line);\n let temp = Object.assign({}, state);\n output.push(unwindState(temp, line));\n }\n return output;\n}\n\n/**\n * Credit: Matheus Sampaio https://github.com/matheussampaio\n */\nfunction hyperlink(url, text) {\n const OSC = '\\u001B]';\n const BEL = '\\u0007';\n const SEP = ';';\n\n return [OSC, '8', SEP, SEP, url || text, BEL, text, OSC, '8', SEP, SEP, BEL].join('');\n}\n\nmodule.exports = {\n strlen: strlen,\n repeat: repeat,\n pad: pad,\n truncate: truncate,\n mergeOptions: mergeOptions,\n wordWrap: multiLineWordWrap,\n colorizeLines: colorizeLines,\n hyperlink,\n};\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar styles = {};\nmodule['exports'] = styles;\n\nvar codes = {\n reset: [0, 0],\n\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n grey: [90, 39],\n\n brightRed: [91, 39],\n brightGreen: [92, 39],\n brightYellow: [93, 39],\n brightBlue: [94, 39],\n brightMagenta: [95, 39],\n brightCyan: [96, 39],\n brightWhite: [97, 39],\n\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n bgGray: [100, 49],\n bgGrey: [100, 49],\n\n bgBrightRed: [101, 49],\n bgBrightGreen: [102, 49],\n bgBrightYellow: [103, 49],\n bgBrightBlue: [104, 49],\n bgBrightMagenta: [105, 49],\n bgBrightCyan: [106, 49],\n bgBrightWhite: [107, 49],\n\n // legacy styles for colors pre v1.0.0\n blackBG: [40, 49],\n redBG: [41, 49],\n greenBG: [42, 49],\n yellowBG: [43, 49],\n blueBG: [44, 49],\n magentaBG: [45, 49],\n cyanBG: [46, 49],\n whiteBG: [47, 49],\n\n};\n\nObject.keys(codes).forEach(function(key) {\n var val = codes[key];\n var style = styles[key] = [];\n style.open = '\\u001b[' + val[0] + 'm';\n style.close = '\\u001b[' + val[1] + 'm';\n});\n","/*\nMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n'use strict';\n\nmodule.exports = function(flag, argv) {\n argv = argv || process.argv;\n\n var terminatorPos = argv.indexOf('--');\n var prefix = /^-{1,2}/.test(flag) ? '' : '--';\n var pos = argv.indexOf(prefix + flag);\n\n return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\n'use strict';\n\nvar os = require('os');\nvar hasFlag = require('./has-flag.js');\n\nvar env = process.env;\n\nvar forceColor = void 0;\nif (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) {\n forceColor = false;\n} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true')\n || hasFlag('color=always')) {\n forceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n forceColor = env.FORCE_COLOR.length === 0\n || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n if (level === 0) {\n return false;\n }\n\n return {\n level: level,\n hasBasic: true,\n has256: level >= 2,\n has16m: level >= 3,\n };\n}\n\nfunction supportsColor(stream) {\n if (forceColor === false) {\n return 0;\n }\n\n if (hasFlag('color=16m') || hasFlag('color=full')\n || hasFlag('color=truecolor')) {\n return 3;\n }\n\n if (hasFlag('color=256')) {\n return 2;\n }\n\n if (stream && !stream.isTTY && forceColor !== true) {\n return 0;\n }\n\n var min = forceColor ? 1 : 0;\n\n if (process.platform === 'win32') {\n // Node.js 7.5.0 is the first version of Node.js to include a patch to\n // libuv that enables 256 color output on Windows. Anything earlier and it\n // won't work. However, here we target Node.js 8 at minimum as it is an LTS\n // release, and Node.js 7 is not. Windows 10 build 10586 is the first\n // Windows release that supports 256 colors. Windows 10 build 14931 is the\n // first release that supports 16m/TrueColor.\n var osRelease = os.release().split('.');\n if (Number(process.versions.node.split('.')[0]) >= 8\n && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {\n return Number(osRelease[2]) >= 14931 ? 3 : 2;\n }\n\n return 1;\n }\n\n if ('CI' in env) {\n if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) {\n return sign in env;\n }) || env.CI_NAME === 'codeship') {\n return 1;\n }\n\n return min;\n }\n\n if ('TEAMCITY_VERSION' in env) {\n return (/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0\n );\n }\n\n if ('TERM_PROGRAM' in env) {\n var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n switch (env.TERM_PROGRAM) {\n case 'iTerm.app':\n return version >= 3 ? 3 : 2;\n case 'Hyper':\n return 3;\n case 'Apple_Terminal':\n return 2;\n // No default\n }\n }\n\n if (/-256(color)?$/i.test(env.TERM)) {\n return 2;\n }\n\n if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n return 1;\n }\n\n if ('COLORTERM' in env) {\n return 1;\n }\n\n if (env.TERM === 'dumb') {\n return min;\n }\n\n return min;\n}\n\nfunction getSupportLevel(stream) {\n var level = supportsColor(stream);\n return translateLevel(level);\n}\n\nmodule.exports = {\n supportsColor: getSupportLevel,\n stdout: getSupportLevel(process.stdout),\n stderr: getSupportLevel(process.stderr),\n};\n","module['exports'] = function runTheTrap(text, options) {\n var result = '';\n text = text || 'Run the trap, drop the bass';\n text = text.split('');\n var trap = {\n a: ['\\u0040', '\\u0104', '\\u023a', '\\u0245', '\\u0394', '\\u039b', '\\u0414'],\n b: ['\\u00df', '\\u0181', '\\u0243', '\\u026e', '\\u03b2', '\\u0e3f'],\n c: ['\\u00a9', '\\u023b', '\\u03fe'],\n d: ['\\u00d0', '\\u018a', '\\u0500', '\\u0501', '\\u0502', '\\u0503'],\n e: ['\\u00cb', '\\u0115', '\\u018e', '\\u0258', '\\u03a3', '\\u03be', '\\u04bc',\n '\\u0a6c'],\n f: ['\\u04fa'],\n g: ['\\u0262'],\n h: ['\\u0126', '\\u0195', '\\u04a2', '\\u04ba', '\\u04c7', '\\u050a'],\n i: ['\\u0f0f'],\n j: ['\\u0134'],\n k: ['\\u0138', '\\u04a0', '\\u04c3', '\\u051e'],\n l: ['\\u0139'],\n m: ['\\u028d', '\\u04cd', '\\u04ce', '\\u0520', '\\u0521', '\\u0d69'],\n n: ['\\u00d1', '\\u014b', '\\u019d', '\\u0376', '\\u03a0', '\\u048a'],\n o: ['\\u00d8', '\\u00f5', '\\u00f8', '\\u01fe', '\\u0298', '\\u047a', '\\u05dd',\n '\\u06dd', '\\u0e4f'],\n p: ['\\u01f7', '\\u048e'],\n q: ['\\u09cd'],\n r: ['\\u00ae', '\\u01a6', '\\u0210', '\\u024c', '\\u0280', '\\u042f'],\n s: ['\\u00a7', '\\u03de', '\\u03df', '\\u03e8'],\n t: ['\\u0141', '\\u0166', '\\u0373'],\n u: ['\\u01b1', '\\u054d'],\n v: ['\\u05d8'],\n w: ['\\u0428', '\\u0460', '\\u047c', '\\u0d70'],\n x: ['\\u04b2', '\\u04fe', '\\u04fc', '\\u04fd'],\n y: ['\\u00a5', '\\u04b0', '\\u04cb'],\n z: ['\\u01b5', '\\u0240'],\n };\n text.forEach(function(c) {\n c = c.toLowerCase();\n var chars = trap[c] || [' '];\n var rand = Math.floor(Math.random() * chars.length);\n if (typeof trap[c] !== 'undefined') {\n result += trap[c][rand];\n } else {\n result += c;\n }\n });\n return result;\n};\n","// please no\nmodule['exports'] = function zalgo(text, options) {\n text = text || ' he is here ';\n var soul = {\n 'up': [\n '̍', '̎', '̄', '̅',\n '̿', '̑', '̆', '̐',\n '͒', '͗', '͑', '̇',\n '̈', '̊', '͂', '̓',\n '̈', '͊', '͋', '͌',\n '̃', '̂', '̌', '͐',\n '̀', '́', '̋', '̏',\n '̒', '̓', '̔', '̽',\n '̉', 'ͣ', 'ͤ', 'ͥ',\n 'ͦ', 'ͧ', 'ͨ', 'ͩ',\n 'ͪ', 'ͫ', 'ͬ', 'ͭ',\n 'ͮ', 'ͯ', '̾', '͛',\n '͆', '̚',\n ],\n 'down': [\n '̖', '̗', '̘', '̙',\n '̜', '̝', '̞', '̟',\n '̠', '̤', '̥', '̦',\n '̩', '̪', '̫', '̬',\n '̭', '̮', '̯', '̰',\n '̱', '̲', '̳', '̹',\n '̺', '̻', '̼', 'ͅ',\n '͇', '͈', '͉', '͍',\n '͎', '͓', '͔', '͕',\n '͖', '͙', '͚', '̣',\n ],\n 'mid': [\n '̕', '̛', '̀', '́',\n '͘', '̡', '̢', '̧',\n '̨', '̴', '̵', '̶',\n '͜', '͝', '͞',\n '͟', '͠', '͢', '̸',\n '̷', '͡', ' ҉',\n ],\n };\n var all = [].concat(soul.up, soul.down, soul.mid);\n\n function randomNumber(range) {\n var r = Math.floor(Math.random() * range);\n return r;\n }\n\n function isChar(character) {\n var bool = false;\n all.filter(function(i) {\n bool = (i === character);\n });\n return bool;\n }\n\n\n function heComes(text, options) {\n var result = '';\n var counts;\n var l;\n options = options || {};\n options['up'] =\n typeof options['up'] !== 'undefined' ? options['up'] : true;\n options['mid'] =\n typeof options['mid'] !== 'undefined' ? options['mid'] : true;\n options['down'] =\n typeof options['down'] !== 'undefined' ? options['down'] : true;\n options['size'] =\n typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';\n text = text.split('');\n for (l in text) {\n if (isChar(l)) {\n continue;\n }\n result = result + text[l];\n counts = {'up': 0, 'down': 0, 'mid': 0};\n switch (options.size) {\n case 'mini':\n counts.up = randomNumber(8);\n counts.mid = randomNumber(2);\n counts.down = randomNumber(8);\n break;\n case 'maxi':\n counts.up = randomNumber(16) + 3;\n counts.mid = randomNumber(4) + 1;\n counts.down = randomNumber(64) + 3;\n break;\n default:\n counts.up = randomNumber(8) + 1;\n counts.mid = randomNumber(6) / 2;\n counts.down = randomNumber(8) + 1;\n break;\n }\n\n var arr = ['up', 'mid', 'down'];\n for (var d in arr) {\n var index = arr[d];\n for (var i = 0; i <= counts[index]; i++) {\n if (options[index]) {\n result = result + soul[index][randomNumber(soul[index].length)];\n }\n }\n }\n }\n return result;\n }\n // don't summon him\n return heComes(text, options);\n};\n\n","module['exports'] = function(colors) {\n return function(letter, i, exploded) {\n if (letter === ' ') return letter;\n switch (i%3) {\n case 0: return colors.red(letter);\n case 1: return colors.white(letter);\n case 2: return colors.blue(letter);\n }\n };\n};\n","module['exports'] = function(colors) {\n return function(letter, i, exploded) {\n return i % 2 === 0 ? letter : colors.inverse(letter);\n };\n};\n","module['exports'] = function(colors) {\n // RoY G BiV\n var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];\n return function(letter, i, exploded) {\n if (letter === ' ') {\n return letter;\n } else {\n return colors[rainbowColors[i++ % rainbowColors.length]](letter);\n }\n };\n};\n\n","module['exports'] = function(colors) {\n var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',\n 'blue', 'white', 'cyan', 'magenta', 'brightYellow', 'brightRed',\n 'brightGreen', 'brightBlue', 'brightWhite', 'brightCyan', 'brightMagenta'];\n return function(letter, i, exploded) {\n return letter === ' ' ? letter :\n colors[\n available[Math.round(Math.random() * (available.length - 2))]\n ](letter);\n };\n};\n","/*\n\nThe MIT License (MIT)\n\nOriginal Library\n - Copyright (c) Marak Squires\n\nAdditional functionality\n - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar colors = {};\nmodule['exports'] = colors;\n\ncolors.themes = {};\n\nvar util = require('util');\nvar ansiStyles = colors.styles = require('./styles');\nvar defineProps = Object.defineProperties;\nvar newLineRegex = new RegExp(/[\\r\\n]+/g);\n\ncolors.supportsColor = require('./system/supports-colors').supportsColor;\n\nif (typeof colors.enabled === 'undefined') {\n colors.enabled = colors.supportsColor() !== false;\n}\n\ncolors.enable = function() {\n colors.enabled = true;\n};\n\ncolors.disable = function() {\n colors.enabled = false;\n};\n\ncolors.stripColors = colors.strip = function(str) {\n return ('' + str).replace(/\\x1B\\[\\d+m/g, '');\n};\n\n// eslint-disable-next-line no-unused-vars\nvar stylize = colors.stylize = function stylize(str, style) {\n if (!colors.enabled) {\n return str+'';\n }\n\n var styleMap = ansiStyles[style];\n\n // Stylize should work for non-ANSI styles, too\n if (!styleMap && style in colors) {\n // Style maps like trap operate as functions on strings;\n // they don't have properties like open or close.\n return colors[style](str);\n }\n\n return styleMap.open + str + styleMap.close;\n};\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\nvar escapeStringRegexp = function(str) {\n if (typeof str !== 'string') {\n throw new TypeError('Expected a string');\n }\n return str.replace(matchOperatorsRe, '\\\\$&');\n};\n\nfunction build(_styles) {\n var builder = function builder() {\n return applyStyle.apply(builder, arguments);\n };\n builder._styles = _styles;\n // __proto__ is used because we must return a function, but there is\n // no way to create a function with a different prototype.\n builder.__proto__ = proto;\n return builder;\n}\n\nvar styles = (function() {\n var ret = {};\n ansiStyles.grey = ansiStyles.gray;\n Object.keys(ansiStyles).forEach(function(key) {\n ansiStyles[key].closeRe =\n new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n ret[key] = {\n get: function() {\n return build(this._styles.concat(key));\n },\n };\n });\n return ret;\n})();\n\nvar proto = defineProps(function colors() {}, styles);\n\nfunction applyStyle() {\n var args = Array.prototype.slice.call(arguments);\n\n var str = args.map(function(arg) {\n // Use weak equality check so we can colorize null/undefined in safe mode\n if (arg != null && arg.constructor === String) {\n return arg;\n } else {\n return util.inspect(arg);\n }\n }).join(' ');\n\n if (!colors.enabled || !str) {\n return str;\n }\n\n var newLinesPresent = str.indexOf('\\n') != -1;\n\n var nestedStyles = this._styles;\n\n var i = nestedStyles.length;\n while (i--) {\n var code = ansiStyles[nestedStyles[i]];\n str = code.open + str.replace(code.closeRe, code.open) + code.close;\n if (newLinesPresent) {\n str = str.replace(newLineRegex, function(match) {\n return code.close + match + code.open;\n });\n }\n }\n\n return str;\n}\n\ncolors.setTheme = function(theme) {\n if (typeof theme === 'string') {\n console.log('colors.setTheme now only accepts an object, not a string. ' +\n 'If you are trying to set a theme from a file, it is now your (the ' +\n 'caller\\'s) responsibility to require the file. The old syntax ' +\n 'looked like colors.setTheme(__dirname + ' +\n '\\'/../themes/generic-logging.js\\'); The new syntax looks like '+\n 'colors.setTheme(require(__dirname + ' +\n '\\'/../themes/generic-logging.js\\'));');\n return;\n }\n for (var style in theme) {\n (function(style) {\n colors[style] = function(str) {\n if (typeof theme[style] === 'object') {\n var out = str;\n for (var i in theme[style]) {\n out = colors[theme[style][i]](out);\n }\n return out;\n }\n return colors[theme[style]](str);\n };\n })(style);\n }\n};\n\nfunction init() {\n var ret = {};\n Object.keys(styles).forEach(function(name) {\n ret[name] = {\n get: function() {\n return build([name]);\n },\n };\n });\n return ret;\n}\n\nvar sequencer = function sequencer(map, str) {\n var exploded = str.split('');\n exploded = exploded.map(map);\n return exploded.join('');\n};\n\n// custom formatter methods\ncolors.trap = require('./custom/trap');\ncolors.zalgo = require('./custom/zalgo');\n\n// maps\ncolors.maps = {};\ncolors.maps.america = require('./maps/america')(colors);\ncolors.maps.zebra = require('./maps/zebra')(colors);\ncolors.maps.rainbow = require('./maps/rainbow')(colors);\ncolors.maps.random = require('./maps/random')(colors);\n\nfor (var map in colors.maps) {\n (function(map) {\n colors[map] = function(str) {\n return sequencer(colors.maps[map], str);\n };\n })(map);\n}\n\ndefineProps(colors, init());\n","//\n// Remark: Requiring this file will use the \"safe\" colors API,\n// which will not touch String.prototype.\n//\n// var colors = require('colors/safe');\n// colors.red(\"foo\")\n//\n//\nvar colors = require('./lib/colors');\nmodule['exports'] = colors;\n","const { info, debug } = require('./debug');\nconst utils = require('./utils');\n\nclass Cell {\n /**\n * A representation of a cell within the table.\n * Implementations must have `init` and `draw` methods,\n * as well as `colSpan`, `rowSpan`, `desiredHeight` and `desiredWidth` properties.\n * @param options\n * @constructor\n */\n constructor(options) {\n this.setOptions(options);\n\n /**\n * Each cell will have it's `x` and `y` values set by the `layout-manager` prior to\n * `init` being called;\n * @type {Number}\n */\n this.x = null;\n this.y = null;\n }\n\n setOptions(options) {\n if (['boolean', 'number', 'bigint', 'string'].indexOf(typeof options) !== -1) {\n options = { content: '' + options };\n }\n options = options || {};\n this.options = options;\n let content = options.content;\n if (['boolean', 'number', 'bigint', 'string'].indexOf(typeof content) !== -1) {\n this.content = String(content);\n } else if (!content) {\n this.content = this.options.href || '';\n } else {\n throw new Error('Content needs to be a primitive, got: ' + typeof content);\n }\n this.colSpan = options.colSpan || 1;\n this.rowSpan = options.rowSpan || 1;\n if (this.options.href) {\n Object.defineProperty(this, 'href', {\n get() {\n return this.options.href;\n },\n });\n }\n }\n\n mergeTableOptions(tableOptions, cells) {\n this.cells = cells;\n\n let optionsChars = this.options.chars || {};\n let tableChars = tableOptions.chars;\n let chars = (this.chars = {});\n CHAR_NAMES.forEach(function (name) {\n setOption(optionsChars, tableChars, name, chars);\n });\n\n this.truncate = this.options.truncate || tableOptions.truncate;\n\n let style = (this.options.style = this.options.style || {});\n let tableStyle = tableOptions.style;\n setOption(style, tableStyle, 'padding-left', this);\n setOption(style, tableStyle, 'padding-right', this);\n this.head = style.head || tableStyle.head;\n this.border = style.border || tableStyle.border;\n\n this.fixedWidth = tableOptions.colWidths[this.x];\n this.lines = this.computeLines(tableOptions);\n\n this.desiredWidth = utils.strlen(this.content) + this.paddingLeft + this.paddingRight;\n this.desiredHeight = this.lines.length;\n }\n\n computeLines(tableOptions) {\n const tableWordWrap = tableOptions.wordWrap || tableOptions.textWrap;\n const { wordWrap = tableWordWrap } = this.options;\n if (this.fixedWidth && wordWrap) {\n this.fixedWidth -= this.paddingLeft + this.paddingRight;\n if (this.colSpan) {\n let i = 1;\n while (i < this.colSpan) {\n this.fixedWidth += tableOptions.colWidths[this.x + i];\n i++;\n }\n }\n const { wrapOnWordBoundary: tableWrapOnWordBoundary = true } = tableOptions;\n const { wrapOnWordBoundary = tableWrapOnWordBoundary } = this.options;\n return this.wrapLines(utils.wordWrap(this.fixedWidth, this.content, wrapOnWordBoundary));\n }\n return this.wrapLines(this.content.split('\\n'));\n }\n\n wrapLines(computedLines) {\n const lines = utils.colorizeLines(computedLines);\n if (this.href) {\n return lines.map((line) => utils.hyperlink(this.href, line));\n }\n return lines;\n }\n\n /**\n * Initializes the Cells data structure.\n *\n * @param tableOptions - A fully populated set of tableOptions.\n * In addition to the standard default values, tableOptions must have fully populated the\n * `colWidths` and `rowWidths` arrays. Those arrays must have lengths equal to the number\n * of columns or rows (respectively) in this table, and each array item must be a Number.\n *\n */\n init(tableOptions) {\n let x = this.x;\n let y = this.y;\n this.widths = tableOptions.colWidths.slice(x, x + this.colSpan);\n this.heights = tableOptions.rowHeights.slice(y, y + this.rowSpan);\n this.width = this.widths.reduce(sumPlusOne, -1);\n this.height = this.heights.reduce(sumPlusOne, -1);\n\n this.hAlign = this.options.hAlign || tableOptions.colAligns[x];\n this.vAlign = this.options.vAlign || tableOptions.rowAligns[y];\n\n this.drawRight = x + this.colSpan == tableOptions.colWidths.length;\n }\n\n /**\n * Draws the given line of the cell.\n * This default implementation defers to methods `drawTop`, `drawBottom`, `drawLine` and `drawEmpty`.\n * @param lineNum - can be `top`, `bottom` or a numerical line number.\n * @param spanningCell - will be a number if being called from a RowSpanCell, and will represent how\n * many rows below it's being called from. Otherwise it's undefined.\n * @returns {String} The representation of this line.\n */\n draw(lineNum, spanningCell) {\n if (lineNum == 'top') return this.drawTop(this.drawRight);\n if (lineNum == 'bottom') return this.drawBottom(this.drawRight);\n let content = utils.truncate(this.content, 10, this.truncate);\n if (!lineNum) {\n info(`${this.y}-${this.x}: ${this.rowSpan - lineNum}x${this.colSpan} Cell ${content}`);\n } else {\n // debug(`${lineNum}-${this.x}: 1x${this.colSpan} RowSpanCell ${content}`);\n }\n let padLen = Math.max(this.height - this.lines.length, 0);\n let padTop;\n switch (this.vAlign) {\n case 'center':\n padTop = Math.ceil(padLen / 2);\n break;\n case 'bottom':\n padTop = padLen;\n break;\n default:\n padTop = 0;\n }\n if (lineNum < padTop || lineNum >= padTop + this.lines.length) {\n return this.drawEmpty(this.drawRight, spanningCell);\n }\n let forceTruncation = this.lines.length > this.height && lineNum + 1 >= this.height;\n return this.drawLine(lineNum - padTop, this.drawRight, forceTruncation, spanningCell);\n }\n\n /**\n * Renders the top line of the cell.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @returns {String}\n */\n drawTop(drawRight) {\n let content = [];\n if (this.cells) {\n //TODO: cells should always exist - some tests don't fill it in though\n this.widths.forEach(function (width, index) {\n content.push(this._topLeftChar(index));\n content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], width));\n }, this);\n } else {\n content.push(this._topLeftChar(0));\n content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], this.width));\n }\n if (drawRight) {\n content.push(this.chars[this.y == 0 ? 'topRight' : 'rightMid']);\n }\n return this.wrapWithStyleColors('border', content.join(''));\n }\n\n _topLeftChar(offset) {\n let x = this.x + offset;\n let leftChar;\n if (this.y == 0) {\n leftChar = x == 0 ? 'topLeft' : offset == 0 ? 'topMid' : 'top';\n } else {\n if (x == 0) {\n leftChar = 'leftMid';\n } else {\n leftChar = offset == 0 ? 'midMid' : 'bottomMid';\n if (this.cells) {\n //TODO: cells should always exist - some tests don't fill it in though\n let spanAbove = this.cells[this.y - 1][x] instanceof Cell.ColSpanCell;\n if (spanAbove) {\n leftChar = offset == 0 ? 'topMid' : 'mid';\n }\n if (offset == 0) {\n let i = 1;\n while (this.cells[this.y][x - i] instanceof Cell.ColSpanCell) {\n i++;\n }\n if (this.cells[this.y][x - i] instanceof Cell.RowSpanCell) {\n leftChar = 'leftMid';\n }\n }\n }\n }\n }\n return this.chars[leftChar];\n }\n\n wrapWithStyleColors(styleProperty, content) {\n if (this[styleProperty] && this[styleProperty].length) {\n try {\n let colors = require('@colors/colors/safe');\n for (let i = this[styleProperty].length - 1; i >= 0; i--) {\n colors = colors[this[styleProperty][i]];\n }\n return colors(content);\n } catch (e) {\n return content;\n }\n } else {\n return content;\n }\n }\n\n /**\n * Renders a line of text.\n * @param lineNum - Which line of text to render. This is not necessarily the line within the cell.\n * There may be top-padding above the first line of text.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @param forceTruncationSymbol - `true` if the rendered text should end with the truncation symbol even\n * if the text fits. This is used when the cell is vertically truncated. If `false` the text should\n * only include the truncation symbol if the text will not fit horizontally within the cell width.\n * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.\n * @returns {String}\n */\n drawLine(lineNum, drawRight, forceTruncationSymbol, spanningCell) {\n let left = this.chars[this.x == 0 ? 'left' : 'middle'];\n if (this.x && spanningCell && this.cells) {\n let cellLeft = this.cells[this.y + spanningCell][this.x - 1];\n while (cellLeft instanceof ColSpanCell) {\n cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];\n }\n if (!(cellLeft instanceof RowSpanCell)) {\n left = this.chars['rightMid'];\n }\n }\n let leftPadding = utils.repeat(' ', this.paddingLeft);\n let right = drawRight ? this.chars['right'] : '';\n let rightPadding = utils.repeat(' ', this.paddingRight);\n let line = this.lines[lineNum];\n let len = this.width - (this.paddingLeft + this.paddingRight);\n if (forceTruncationSymbol) line += this.truncate || '…';\n let content = utils.truncate(line, len, this.truncate);\n content = utils.pad(content, len, ' ', this.hAlign);\n content = leftPadding + content + rightPadding;\n return this.stylizeLine(left, content, right);\n }\n\n stylizeLine(left, content, right) {\n left = this.wrapWithStyleColors('border', left);\n right = this.wrapWithStyleColors('border', right);\n if (this.y === 0) {\n content = this.wrapWithStyleColors('head', content);\n }\n return left + content + right;\n }\n\n /**\n * Renders the bottom line of the cell.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @returns {String}\n */\n drawBottom(drawRight) {\n let left = this.chars[this.x == 0 ? 'bottomLeft' : 'bottomMid'];\n let content = utils.repeat(this.chars.bottom, this.width);\n let right = drawRight ? this.chars['bottomRight'] : '';\n return this.wrapWithStyleColors('border', left + content + right);\n }\n\n /**\n * Renders a blank line of text within the cell. Used for top and/or bottom padding.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.\n * @returns {String}\n */\n drawEmpty(drawRight, spanningCell) {\n let left = this.chars[this.x == 0 ? 'left' : 'middle'];\n if (this.x && spanningCell && this.cells) {\n let cellLeft = this.cells[this.y + spanningCell][this.x - 1];\n while (cellLeft instanceof ColSpanCell) {\n cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];\n }\n if (!(cellLeft instanceof RowSpanCell)) {\n left = this.chars['rightMid'];\n }\n }\n let right = drawRight ? this.chars['right'] : '';\n let content = utils.repeat(' ', this.width);\n return this.stylizeLine(left, content, right);\n }\n}\n\nclass ColSpanCell {\n /**\n * A Cell that doesn't do anything. It just draws empty lines.\n * Used as a placeholder in column spanning.\n * @constructor\n */\n constructor() {}\n\n draw(lineNum) {\n if (typeof lineNum === 'number') {\n debug(`${this.y}-${this.x}: 1x1 ColSpanCell`);\n }\n return '';\n }\n\n init() {}\n\n mergeTableOptions() {}\n}\n\nclass RowSpanCell {\n /**\n * A placeholder Cell for a Cell that spans multiple rows.\n * It delegates rendering to the original cell, but adds the appropriate offset.\n * @param originalCell\n * @constructor\n */\n constructor(originalCell) {\n this.originalCell = originalCell;\n }\n\n init(tableOptions) {\n let y = this.y;\n let originalY = this.originalCell.y;\n this.cellOffset = y - originalY;\n this.offset = findDimension(tableOptions.rowHeights, originalY, this.cellOffset);\n }\n\n draw(lineNum) {\n if (lineNum == 'top') {\n return this.originalCell.draw(this.offset, this.cellOffset);\n }\n if (lineNum == 'bottom') {\n return this.originalCell.draw('bottom');\n }\n debug(`${this.y}-${this.x}: 1x${this.colSpan} RowSpanCell for ${this.originalCell.content}`);\n return this.originalCell.draw(this.offset + 1 + lineNum);\n }\n\n mergeTableOptions() {}\n}\n\nfunction firstDefined(...args) {\n return args.filter((v) => v !== undefined && v !== null).shift();\n}\n\n// HELPER FUNCTIONS\nfunction setOption(objA, objB, nameB, targetObj) {\n let nameA = nameB.split('-');\n if (nameA.length > 1) {\n nameA[1] = nameA[1].charAt(0).toUpperCase() + nameA[1].substr(1);\n nameA = nameA.join('');\n targetObj[nameA] = firstDefined(objA[nameA], objA[nameB], objB[nameA], objB[nameB]);\n } else {\n targetObj[nameB] = firstDefined(objA[nameB], objB[nameB]);\n }\n}\n\nfunction findDimension(dimensionTable, startingIndex, span) {\n let ret = dimensionTable[startingIndex];\n for (let i = 1; i < span; i++) {\n ret += 1 + dimensionTable[startingIndex + i];\n }\n return ret;\n}\n\nfunction sumPlusOne(a, b) {\n return a + b + 1;\n}\n\nlet CHAR_NAMES = [\n 'top',\n 'top-mid',\n 'top-left',\n 'top-right',\n 'bottom',\n 'bottom-mid',\n 'bottom-left',\n 'bottom-right',\n 'left',\n 'left-mid',\n 'mid',\n 'mid-mid',\n 'right',\n 'right-mid',\n 'middle',\n];\n\nmodule.exports = Cell;\nmodule.exports.ColSpanCell = ColSpanCell;\nmodule.exports.RowSpanCell = RowSpanCell;\n","const { warn, debug } = require('./debug');\nconst Cell = require('./cell');\nconst { ColSpanCell, RowSpanCell } = Cell;\n\n(function () {\n function next(alloc, col) {\n if (alloc[col] > 0) {\n return next(alloc, col + 1);\n }\n return col;\n }\n\n function layoutTable(table) {\n let alloc = {};\n table.forEach(function (row, rowIndex) {\n let col = 0;\n row.forEach(function (cell) {\n cell.y = rowIndex;\n // Avoid erroneous call to next() on first row\n cell.x = rowIndex ? next(alloc, col) : col;\n const rowSpan = cell.rowSpan || 1;\n const colSpan = cell.colSpan || 1;\n if (rowSpan > 1) {\n for (let cs = 0; cs < colSpan; cs++) {\n alloc[cell.x + cs] = rowSpan;\n }\n }\n col = cell.x + colSpan;\n });\n Object.keys(alloc).forEach((idx) => {\n alloc[idx]--;\n if (alloc[idx] < 1) delete alloc[idx];\n });\n });\n }\n\n function maxWidth(table) {\n let mw = 0;\n table.forEach(function (row) {\n row.forEach(function (cell) {\n mw = Math.max(mw, cell.x + (cell.colSpan || 1));\n });\n });\n return mw;\n }\n\n function maxHeight(table) {\n return table.length;\n }\n\n function cellsConflict(cell1, cell2) {\n let yMin1 = cell1.y;\n let yMax1 = cell1.y - 1 + (cell1.rowSpan || 1);\n let yMin2 = cell2.y;\n let yMax2 = cell2.y - 1 + (cell2.rowSpan || 1);\n let yConflict = !(yMin1 > yMax2 || yMin2 > yMax1);\n\n let xMin1 = cell1.x;\n let xMax1 = cell1.x - 1 + (cell1.colSpan || 1);\n let xMin2 = cell2.x;\n let xMax2 = cell2.x - 1 + (cell2.colSpan || 1);\n let xConflict = !(xMin1 > xMax2 || xMin2 > xMax1);\n\n return yConflict && xConflict;\n }\n\n function conflictExists(rows, x, y) {\n let i_max = Math.min(rows.length - 1, y);\n let cell = { x: x, y: y };\n for (let i = 0; i <= i_max; i++) {\n let row = rows[i];\n for (let j = 0; j < row.length; j++) {\n if (cellsConflict(cell, row[j])) {\n return true;\n }\n }\n }\n return false;\n }\n\n function allBlank(rows, y, xMin, xMax) {\n for (let x = xMin; x < xMax; x++) {\n if (conflictExists(rows, x, y)) {\n return false;\n }\n }\n return true;\n }\n\n function addRowSpanCells(table) {\n table.forEach(function (row, rowIndex) {\n row.forEach(function (cell) {\n for (let i = 1; i < cell.rowSpan; i++) {\n let rowSpanCell = new RowSpanCell(cell);\n rowSpanCell.x = cell.x;\n rowSpanCell.y = cell.y + i;\n rowSpanCell.colSpan = cell.colSpan;\n insertCell(rowSpanCell, table[rowIndex + i]);\n }\n });\n });\n }\n\n function addColSpanCells(cellRows) {\n for (let rowIndex = cellRows.length - 1; rowIndex >= 0; rowIndex--) {\n let cellColumns = cellRows[rowIndex];\n for (let columnIndex = 0; columnIndex < cellColumns.length; columnIndex++) {\n let cell = cellColumns[columnIndex];\n for (let k = 1; k < cell.colSpan; k++) {\n let colSpanCell = new ColSpanCell();\n colSpanCell.x = cell.x + k;\n colSpanCell.y = cell.y;\n cellColumns.splice(columnIndex + 1, 0, colSpanCell);\n }\n }\n }\n }\n\n function insertCell(cell, row) {\n let x = 0;\n while (x < row.length && row[x].x < cell.x) {\n x++;\n }\n row.splice(x, 0, cell);\n }\n\n function fillInTable(table) {\n let h_max = maxHeight(table);\n let w_max = maxWidth(table);\n debug(`Max rows: ${h_max}; Max cols: ${w_max}`);\n for (let y = 0; y < h_max; y++) {\n for (let x = 0; x < w_max; x++) {\n if (!conflictExists(table, x, y)) {\n let opts = { x: x, y: y, colSpan: 1, rowSpan: 1 };\n x++;\n while (x < w_max && !conflictExists(table, x, y)) {\n opts.colSpan++;\n x++;\n }\n let y2 = y + 1;\n while (y2 < h_max && allBlank(table, y2, opts.x, opts.x + opts.colSpan)) {\n opts.rowSpan++;\n y2++;\n }\n let cell = new Cell(opts);\n cell.x = opts.x;\n cell.y = opts.y;\n warn(`Missing cell at ${cell.y}-${cell.x}.`);\n insertCell(cell, table[y]);\n }\n }\n }\n }\n\n function generateCells(rows) {\n return rows.map(function (row) {\n if (!Array.isArray(row)) {\n let key = Object.keys(row)[0];\n row = row[key];\n if (Array.isArray(row)) {\n row = row.slice();\n row.unshift(key);\n } else {\n row = [key, row];\n }\n }\n return row.map(function (cell) {\n return new Cell(cell);\n });\n });\n }\n\n function makeTableLayout(rows) {\n let cellRows = generateCells(rows);\n layoutTable(cellRows);\n fillInTable(cellRows);\n addRowSpanCells(cellRows);\n addColSpanCells(cellRows);\n return cellRows;\n }\n\n module.exports = {\n makeTableLayout: makeTableLayout,\n layoutTable: layoutTable,\n addRowSpanCells: addRowSpanCells,\n maxWidth: maxWidth,\n fillInTable: fillInTable,\n computeWidths: makeComputeWidths('colSpan', 'desiredWidth', 'x', 1),\n computeHeights: makeComputeWidths('rowSpan', 'desiredHeight', 'y', 1),\n };\n})();\n\nfunction makeComputeWidths(colSpan, desiredWidth, x, forcedMin) {\n return function (vals, table) {\n let result = [];\n let spanners = [];\n let auto = {};\n table.forEach(function (row) {\n row.forEach(function (cell) {\n if ((cell[colSpan] || 1) > 1) {\n spanners.push(cell);\n } else {\n result[cell[x]] = Math.max(result[cell[x]] || 0, cell[desiredWidth] || 0, forcedMin);\n }\n });\n });\n\n vals.forEach(function (val, index) {\n if (typeof val === 'number') {\n result[index] = val;\n }\n });\n\n //spanners.forEach(function(cell){\n for (let k = spanners.length - 1; k >= 0; k--) {\n let cell = spanners[k];\n let span = cell[colSpan];\n let col = cell[x];\n let existingWidth = result[col];\n let editableCols = typeof vals[col] === 'number' ? 0 : 1;\n if (typeof existingWidth === 'number') {\n for (let i = 1; i < span; i++) {\n existingWidth += 1 + result[col + i];\n if (typeof vals[col + i] !== 'number') {\n editableCols++;\n }\n }\n } else {\n existingWidth = desiredWidth === 'desiredWidth' ? cell.desiredWidth - 1 : 1;\n if (!auto[col] || auto[col] < existingWidth) {\n auto[col] = existingWidth;\n }\n }\n\n if (cell[desiredWidth] > existingWidth) {\n let i = 0;\n while (editableCols > 0 && cell[desiredWidth] > existingWidth) {\n if (typeof vals[col + i] !== 'number') {\n let dif = Math.round((cell[desiredWidth] - existingWidth) / editableCols);\n existingWidth += dif;\n result[col + i] += dif;\n editableCols--;\n }\n i++;\n }\n }\n }\n\n Object.assign(vals, result, auto);\n for (let j = 0; j < vals.length; j++) {\n vals[j] = Math.max(forcedMin, vals[j] || 0);\n }\n };\n}\n","const debug = require('./debug');\nconst utils = require('./utils');\nconst tableLayout = require('./layout-manager');\n\nclass Table extends Array {\n constructor(opts) {\n super();\n\n const options = utils.mergeOptions(opts);\n Object.defineProperty(this, 'options', {\n value: options,\n enumerable: options.debug,\n });\n\n if (options.debug) {\n switch (typeof options.debug) {\n case 'boolean':\n debug.setDebugLevel(debug.WARN);\n break;\n case 'number':\n debug.setDebugLevel(options.debug);\n break;\n case 'string':\n debug.setDebugLevel(parseInt(options.debug, 10));\n break;\n default:\n debug.setDebugLevel(debug.WARN);\n debug.warn(`Debug option is expected to be boolean, number, or string. Received a ${typeof options.debug}`);\n }\n Object.defineProperty(this, 'messages', {\n get() {\n return debug.debugMessages();\n },\n });\n }\n }\n\n toString() {\n let array = this;\n let headersPresent = this.options.head && this.options.head.length;\n if (headersPresent) {\n array = [this.options.head];\n if (this.length) {\n array.push.apply(array, this);\n }\n } else {\n this.options.style.head = [];\n }\n\n let cells = tableLayout.makeTableLayout(array);\n\n cells.forEach(function (row) {\n row.forEach(function (cell) {\n cell.mergeTableOptions(this.options, cells);\n }, this);\n }, this);\n\n tableLayout.computeWidths(this.options.colWidths, cells);\n tableLayout.computeHeights(this.options.rowHeights, cells);\n\n cells.forEach(function (row) {\n row.forEach(function (cell) {\n cell.init(this.options);\n }, this);\n }, this);\n\n let result = [];\n\n for (let rowIndex = 0; rowIndex < cells.length; rowIndex++) {\n let row = cells[rowIndex];\n let heightOfRow = this.options.rowHeights[rowIndex];\n\n if (rowIndex === 0 || !this.options.style.compact || (rowIndex == 1 && headersPresent)) {\n doDraw(row, 'top', result);\n }\n\n for (let lineNum = 0; lineNum < heightOfRow; lineNum++) {\n doDraw(row, lineNum, result);\n }\n\n if (rowIndex + 1 == cells.length) {\n doDraw(row, 'bottom', result);\n }\n }\n\n return result.join('\\n');\n }\n\n get width() {\n let str = this.toString().split('\\n');\n return str[0].length;\n }\n}\n\nTable.reset = () => debug.reset();\n\nfunction doDraw(row, lineNum, result) {\n let line = [];\n row.forEach(function (cell) {\n line.push(cell.draw(lineNum));\n });\n let str = line.join('');\n if (str.length) result.push(str);\n}\n\nmodule.exports = Table;\n","module.exports = require('./src/table');","/**\n * Fennec CLI Formatting System\n *\n * Central module for all CLI output formatting.\n * Uses picocolors (7KB, zero dependencies) for coloring.\n *\n * Design principles:\n * - Minimal dependencies (picocolors only)\n * - Clean, modern, readable output\n * - Consistent spacing and alignment\n * - Fox-themed (🦊) but not overwhelming\n */\n\nimport { createInterface } from \"node:readline\";\nimport pc from \"picocolors\";\nimport CliTable3 from \"cli-table3\";\n\n// ─── Color Helpers ───────────────────────────────────────────────\n\n/**\n * Custom hex color formatter.\n * picocolors has hex() at runtime but can be undefined on some Node.js\n * versions due to CJS/ESM interop issues. We detect and fall back.\n */\nfunction hex(color: string): (s: string) => string {\n if (typeof (pc as any).hex === \"function\") {\n return (pc as any).hex(color);\n }\n return (s: string) => s;\n}\n\n// Brand colors (runtime-safe, bypass TypeScript limitations)\nconst fennecOrange = hex(\"#FF6432\");\nconst blueAccent = hex(\"#4A90D9\");\nconst redAccent = hex(\"#E94560\");\n\n// ─── Color Palette ───────────────────────────────────────────────\n\nexport const colors = {\n // Brand colors\n primary: fennecOrange,\n secondary: blueAccent,\n accent: redAccent,\n\n // Semantic colors\n success: pc.green,\n error: pc.red,\n warning: pc.yellow,\n info: pc.cyan,\n muted: pc.dim,\n highlight: pc.bold,\n\n // Backgrounds\n bgSuccess: (s: string) => pc.bgGreen(pc.black(` ${s} `)),\n bgError: (s: string) => pc.bgRed(pc.white(` ${s} `)),\n bgWarning: (s: string) => pc.bgYellow(pc.black(` ${s} `)),\n bgInfo: (s: string) => pc.bgCyan(pc.black(` ${s} `)),\n} as const;\n\n// ─── Symbols ─────────────────────────────────────────────────────\n\nexport const symbols = {\n // Status\n active: pc.green(\"●\"),\n inactive: pc.dim(\"○\"),\n error: pc.red(\"✗\"),\n warning: pc.yellow(\"⚠\"),\n success: pc.green(\"✓\"),\n info: pc.cyan(\"ℹ\"),\n pending: pc.yellow(\"◌\"),\n\n // UI\n bullet: pc.dim(\"│\"),\n dot: pc.dim(\"·\"),\n arrow: pc.cyan(\"→\"),\n pointer: fennecOrange(\"▶\"),\n separator: pc.dim(\"─\"),\n\n // Fennec\n fox: \"🦊\",\n ears: \"⏜\",\n} as const;\n\n// ─── Status Badges ───────────────────────────────────────────────\n\nexport type ProcessStatus = \"running\" | \"stopped\" | \"error\" | \"starting\" | \"unknown\";\n\nexport function statusBadge(status: ProcessStatus): string {\n switch (status) {\n case \"running\": return pc.green(\"● running\");\n case \"stopped\": return pc.dim(\"○ stopped\");\n case \"error\": return pc.red(\"✗ error\");\n case \"starting\": return pc.yellow(\"◌ starting\");\n case \"unknown\": return pc.dim(\"? unknown\");\n }\n}\n\nexport type LogLevel = \"error\" | \"warn\" | \"info\" | \"debug\" | \"verbose\";\n\nexport function logLevel(label: string): string {\n const upper = label.toUpperCase().padEnd(5);\n switch (label.toLowerCase()) {\n case \"error\": return pc.bgRed(pc.white(` ${upper} `));\n case \"warn\": return pc.bgYellow(pc.black(` ${upper} `));\n case \"info\": return pc.bgCyan(pc.black(` ${upper} `));\n case \"debug\": return pc.dim(pc.italic(upper));\n case \"verbose\": return pc.dim(pc.italic(upper));\n default: return pc.dim(upper);\n }\n}\n\n// ─── Table Renderer (cli-table3 powered) ────────────────────────\n\nexport interface Column {\n key: string;\n label: string;\n align?: \"left\" | \"right\" | \"center\";\n width?: number;\n format?: (value: unknown) => string;\n}\n\nexport interface Row {\n [key: string]: unknown;\n}\n\nexport function renderTable(columns: Column[], rows: Row[], options?: { padding?: number; compact?: boolean }): string {\n const pad = options?.padding ?? 1;\n\n if (rows.length === 0) {\n return pc.dim(\" (no data)\");\n }\n\n // Build cli-table3 instance\n const table = new CliTable3({\n head: columns.map((c) => pc.bold(c.label)),\n colAligns: columns.map((c) => c.align ?? \"left\"),\n style: {\n \"padding-left\": pad,\n \"padding-right\": pad,\n head: [], // reset default styles; our pc.bold is already applied\n border: [],\n compact: false,\n },\n chars: {\n top: \"─\", \"top-mid\": \"┬\", \"top-left\": \"┌\", \"top-right\": \"┐\",\n \"bottom\": \"─\", \"bottom-mid\": \"┴\", \"bottom-left\": \"└\", \"bottom-right\": \"┘\",\n left: \"│\", \"left-mid\": \"├\", mid: \"─\", \"mid-mid\": \"┼\",\n right: \"│\", \"right-mid\": \"┤\",\n middle: \"│\",\n },\n truncate: \"…\",\n });\n\n for (const row of rows) {\n const values = columns.map((col) => {\n const raw = row[col.key];\n return col.format ? col.format(raw) : String(raw ?? \"-\");\n });\n table.push(values);\n }\n\n const output = table.toString();\n\n // Apply dim to all border lines (head, body, foot)\n const lines = output.split(\"\\n\");\n return lines.map((l) => {\n // Only dim border chars (lines that start with box-drawing chars)\n if (l.length > 0 && (l[0] === \"┌\" || l[0] === \"│\" || l[0] === \"├\" || l[0] === \"└\" || l[0] === \"─\")) {\n // Dim the border characters but keep cell content bright\n return l.replace(/^([│├└┌┐┤┴┬─]+)/, (m) => pc.dim(m));\n }\n return l;\n }).join(\"\\n\");\n}\n\n// ─── Key-Value Display ───────────────────────────────────────────\n\nexport function renderKV(key: string, value: string, options?: { indent?: number; separator?: string }): string {\n const indent = options?.indent ?? 2;\n const sep = options?.separator ?? \":\";\n const pad = \" \".repeat(indent);\n return `${pad}${pc.dim(key + sep)} ${value}`;\n}\n\nexport function renderKVColor(key: string, value: string, color: (s: string) => string = pc.bold): string {\n return ` ${pc.dim(key + \":\")} ${color(value)}`;\n}\n\nexport function renderSection(title: string, content: string): string {\n const line = pc.dim(\"─\".repeat(40));\n return `\\n ${pc.bold(title)}\\n ${line}\\n${content}\\n`;\n}\n\n// ─── Box Renderer ────────────────────────────────────────────────\n\nexport function renderBox(title: string, content: string, options?: {\n width?: number;\n borderColor?: (s: string) => string;\n titleColor?: (s: string) => string;\n}): string {\n const width = options?.width ?? 50;\n const border = options?.borderColor ?? pc.dim;\n const titleColor = options?.titleColor ?? pc.bold;\n\n const lines = content.split(\"\\n\");\n const wrapped = lines.map((l) => {\n const clean = l.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n return l + \" \".repeat(Math.max(0, width - clean.length - 2));\n });\n\n const top = border(`┌─ ${titleColor(title)} ${\"─\".repeat(Math.max(0, width - title.length - 4))}┐`);\n const mid = wrapped.map((l) => border(\"│ \") + l + border(\" │\")).join(\"\\n\");\n const bot = border(`└${\"─\".repeat(width)}┘`);\n\n return `\\n${top}\\n${mid}\\n${bot}\\n`;\n}\n\n// ─── Spinner (minimal, no dependencies) ──────────────────────────\n\nexport interface Spinner {\n update(text: string): void;\n succeed(text: string): void;\n fail(text: string): void;\n warn(text: string): void;\n stop(): void;\n}\n\nexport function createSpinner(text: string): Spinner {\n const frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n let i = 0;\n let running = true;\n\n const interval = setInterval(() => {\n if (!running) return;\n process.stdout.write(`\\r${pc.cyan(frames[i])} ${text}`);\n i = (i + 1) % frames.length;\n }, 80);\n\n return {\n update(newText: string) {\n if (!running) return;\n process.stdout.write(`\\r${pc.cyan(frames[i])} ${newText}`);\n },\n succeed(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.green(\"✓\")} ${msg}\\n`);\n },\n fail(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.red(\"✗\")} ${msg}\\n`);\n },\n warn(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.yellow(\"⚠\")} ${msg}\\n`);\n },\n stop() {\n running = false;\n clearInterval(interval);\n },\n };\n}\n\n// ─── Interactive Select (enhanced) ───────────────────────────────\n\nexport async function selectPrompt<T extends string>(\n message: string,\n options: { value: T; label: string; description?: string }[],\n): Promise<T | null> {\n console.log(`\\n ${pc.bold(message)}\\n`);\n options.forEach((opt, i) => {\n const num = pc.cyan(` ${i + 1}`);\n console.log(`${num} ${opt.label}`);\n if (opt.description) {\n console.log(` ${pc.dim(opt.description)}`);\n }\n });\n console.log(` ${pc.dim(\"0) Cancel\")}\\n`);\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(` ${pc.bold(\"Enter number\")} ${pc.dim(\"(0-\" + options.length + \")\")}: `, (ans) => {\n rl.close();\n resolve(ans.trim());\n });\n });\n\n const num = parseInt(answer, 10);\n if (isNaN(num) || num === 0) return null;\n const selected = options[num - 1];\n if (!selected) {\n console.log(` ${pc.red(\"Invalid selection.\")}`);\n return null;\n }\n return selected.value;\n}\n\nexport async function confirmPrompt(message: string, defaultValue = false): Promise<boolean> {\n const hint = defaultValue ? pc.bold(\"Y\") + pc.dim(\"/n\") : pc.dim(\"y/\") + pc.bold(\"N\");\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(`\\n ${message} ${pc.dim(\"(\" + hint + \")\")}: `, (ans) => {\n rl.close();\n resolve(ans.trim().toLowerCase());\n });\n });\n\n if (!answer) return defaultValue;\n return answer === \"y\" || answer === \"yes\";\n}\n\n// ─── Divider ─────────────────────────────────────────────────────\n\nexport function divider(text?: string): string {\n if (text) {\n const len = 50 - text.length - 2;\n const left = Math.floor(len / 2);\n const right = len - left;\n return pc.dim(\"─\".repeat(left) + ` ${text} ` + \"─\".repeat(right));\n }\n return pc.dim(\"─\".repeat(50));\n}\n\n// ─── Timestamp ───────────────────────────────────────────────────\n\nexport function timestamp(date?: Date): string {\n const d = date ?? new Date();\n const time = d.toLocaleTimeString(\"en-US\", { hour12: false });\n return pc.dim(`[${time}]`);\n}\n\n// ─── Command Line ────────────────────────────────────────────────\n\nexport function renderCommand(cmd: string): string {\n return fennecOrange(`$ ${cmd}`);\n}\n\nexport function renderAppName(name: string): string {\n return fennecOrange(pc.bold(name));\n}\n\n// ─── Error Display ───────────────────────────────────────────────\n\nexport function renderError(title: string, details?: string, suggestions?: string[]): string {\n const lines: string[] = [];\n lines.push(`\\n ${pc.bgRed(pc.white(\" ERROR \"))} ${pc.bold(title)}`);\n if (details) {\n lines.push(` ${pc.dim(details)}`);\n }\n if (suggestions && suggestions.length > 0) {\n lines.push(`\\n ${pc.bold(\"Suggestions:\")}`);\n for (const s of suggestions) {\n lines.push(` ${pc.cyan(\"→\")} ${s}`);\n }\n }\n return lines.join(\"\\n\") + \"\\n\";\n}\n\nexport function renderSuccess(message: string): string {\n return ` ${pc.green(\"✓\")} ${message}`;\n}\n\nexport function renderWarning(message: string): string {\n return ` ${pc.yellow(\"⚠\")} ${message}`;\n}\n","/**\n * Fennec CLI Banner\n *\n * Pure-text ASCII art banner using picocolors only.\n * No external font libraries — avoids ESM/CJS interop issues\n * (cfonts uses dynamic require(\"os\") which crashes in ESM bundles).\n *\n * Falls back to a compact fox icon for non-TTY environments.\n * All picocolors-based, no additional dependencies.\n */\n\nimport pc from \"picocolors\";\n\n// ─── Hex color helper ──────────────────────────────────────────\n\nexport function hexColor(color: string): (s: string) => string {\n if (typeof (pc as any).hex === \"function\") {\n return (pc as any).hex(color);\n }\n return (s: string) => s;\n}\n\nconst fennecOrange = hexColor(\"#FF6432\");\nconst fennecGold = hexColor(\"#FFB347\");\n\n// ─── Version ────────────────────────────────────────────────────\n\nexport const VERSION = \"1.13.1\";\n\n// ─── Banner generation ──────────────────────────────────────────\n\nlet cachedBanner: string | null = null;\nlet cachedCompact: string | null = null;\n\n/**\n * Generate the full FENNEC ASCII art banner.\n * Pure-text — no external font library needed.\n * Cached after first call.\n */\nfunction generateBanner(): string {\n if (cachedBanner) return cachedBanner;\n\n const logo = [\n \"███████╗███████╗███╗ ██╗███╗ ██╗███████╗ ██████╗\",\n \"██╔════╝██╔════╝████╗ ██║████╗ ██║██╔════╝██╔════╝\",\n \"█████╗ █████╗ ██╔██╗ ██║██╔██╗ ██║█████╗ ██║ \",\n \"██╔══╝ ██╔══╝ ██║╚██╗██║██║╚██╗██║██╔══╝ ██║ \",\n \"██║ ███████╗██║ ╚████║██║ ╚████║███████╗╚██████╗\",\n \"╚═╝ ╚══════╝╚═╝ ╚═══╝╚═╝ ╚═══╝╚══════╝ ╚═════╝\",\n ];\n\n // Apply gradient: orange → gold\n const gradientSteps = logo.length;\n const bannerStr = logo\n .map((line, i) => {\n const ratio = i / (gradientSteps - 1);\n const color = ratio < 0.5 ? fennecOrange : fennecGold;\n return color(line);\n })\n .join(\"\\n\");\n\n const tagline = pc.dim(\"ears everywhere in your stack.\") + pc.dim(` v${VERSION}`);\n\n cachedBanner = `\\n${bannerStr}\\n ${tagline}\\n`;\n return cachedBanner;\n}\n\n/**\n * Compact banner for non-TTY or quick commands.\n */\nfunction generateCompactBanner(): string {\n if (cachedCompact) return cachedCompact;\n cachedCompact = `${pc.redBright(\" 🦊\")} ${pc.bold(\"Fennec\")} ${pc.dim(`v${VERSION}`)}`;\n return cachedCompact;\n}\n\n// ─── Public API ─────────────────────────────────────────────────\n\n/**\n * Print the full FENNEC banner (ASCII art) to stderr.\n * Uses full logo in TTY mode, compact in non-TTY.\n */\nexport function printBanner(): void {\n if (process.stdout.isTTY) {\n console.error(generateBanner());\n } else {\n console.error(generateCompactBanner());\n }\n}\n\n/**\n * Print a mini/compact banner (fox icon + version only).\n * Suitable for quick commands like ps, status, kill.\n */\nexport function printMiniBanner(): void {\n console.error(generateCompactBanner());\n}\n\n// ─── Exports for reuse ──────────────────────────────────────────\n\nexport const FOX = generateBanner();\nexport const FOX_COMPACT = generateCompactBanner();\n","import pc from \"picocolors\";\nimport { hexColor } from \"./banner.js\";\n\nconst fennecOrange = hexColor(\"#FF6432\");\n\nexport function showHelp(): void {\n const sep = fennecOrange(\"─\".repeat(50));\n\n console.error(`\n\n ${pc.bold(\"Usage:\")} fennec ${pc.dim(\"<command>\")} ${pc.dim(\"[options]\")}\n\n ${sep}\n ${pc.bold(\"Server\")}\n ${sep}\n\n ${pc.cyan(\"start\")} ${pc.dim(\"Start Fennec MCP server (default)\")}\n ${pc.dim(\"--config\")} Path to config file\n ${pc.dim(\"--transport\")} Transport type ${pc.dim(\"(stdio | sse) [default: stdio]\")}\n ${pc.dim(\"--api-port\")} Management API port ${pc.dim(\"[default: 3456]\")}\n\n ${pc.cyan(\"start\")} ${pc.dim(\"<command>\")} ${pc.dim(\"Start an app under Fennec observation (new!)\")}\n ${pc.dim(\"--name\")} App name ${pc.dim(\"(required for tracking)\")}\n ${pc.dim(\"--port\")} Port the app listens on ${pc.dim(\"(optional)\")}\n ${pc.dim(\"--cwd\")} Working directory\n ${pc.dim(\"--restart\")} Auto-restart on crash\n\n ${sep}\n ${pc.bold(\"Process Management\")}\n ${sep}\n\n ${pc.cyan(\"ps\")} ${pc.dim(\"[options]\")} ${pc.dim(\"List Fennec-tracked apps (like PM2)\")}\n ${pc.dim(\"--system, -a\")} Show all system processes\n ${pc.dim(\"--name\")} Filter by app name\n ${pc.dim(\"-w, --watch\")} Watch mode ${pc.dim(\"(system processes refresh every 3s)\")}\n\n ${pc.cyan(\"run\")} ${pc.dim(\"<command>\")} ${pc.dim(\"Run a command under Fennec observation\")}\n ${pc.dim(\"--name\")} Process name ${pc.dim(\"(required)\")}\n ${pc.dim(\"--cwd\")} Working directory\n ${pc.dim(\"--restart\")} Auto-restart on crash\n\n ${pc.cyan(\"status\")} ${pc.dim(\"[name]\")} ${pc.dim(\"Show system overview & top processes\")}\n ${pc.dim(\"-w, --watch\")} Watch mode ${pc.dim(\"(refresh every 3s)\")}\n\n ${pc.cyan(\"log\")} ${pc.dim(\"<pid|name>\")} ${pc.dim(\"Show logs for a process\")}\n ${pc.dim(\"--lines\")} Number of lines ${pc.dim(\"[default: 30]\")}\n ${pc.dim(\"-f, --follow\")} Follow mode ${pc.dim(\"(journalctl --follow)\")}\n\n ${pc.cyan(\"kill\")} ${pc.dim(\"<pid|name|all>\")} ${pc.dim(\"Kill process(es) by PID, name, or all\")}\n ${pc.dim(\"--signal\")} Signal to send ${pc.dim(\"[default: SIGTERM]\")}\n ${pc.dim(\"--all\")} Kill all user processes\n\n ${pc.cyan(\"restart\")} ${pc.dim(\"<pid|name>\")} ${pc.dim(\"Kill + show re-run command\")}\n\n ${sep}\n ${pc.bold(\"Observation\")}\n ${sep}\n\n ${pc.cyan(\"attach\")} ${pc.dim(\"<port>\")} ${pc.dim(\"Observe a process by port\")}\n ${pc.dim(\"--name\")} Process name\n\n ${pc.cyan(\"pipe\")} ${pc.dim(\"Pipe stdin to log watcher\")}\n ${pc.dim(\"--name\")} Watcher name ${pc.dim(\"(required)\")}\n\n ${pc.cyan(\"watch\")} ${pc.dim(\"Watch a log file\")}\n ${pc.dim(\"--file\")} File path ${pc.dim(\"(required)\")}\n ${pc.dim(\"--name\")} Watcher name\n\n ${pc.cyan(\"attach-pid\")} ${pc.dim(\"<pid>\")} ${pc.dim(\"Attach to process by PID\")}\n ${pc.cyan(\"attach-port\")} ${pc.dim(\"<port>\")} ${pc.dim(\"Attach to process by port\")}\n\n ${sep}\n ${pc.bold(\"Configuration\")}\n ${sep}\n\n ${pc.cyan(\"init\")} ${pc.dim(\"Generate fennec.config.yaml\")}\n ${pc.cyan(\"setup\")} ${pc.dim(\"Configure MCP client\")}\n ${pc.cyan(\"install-browsers\")} ${pc.dim(\"Install Playwright browser engines\")}\n ${pc.cyan(\"sessions\")} ${pc.dim(\"List saved auth sessions\")}\n\n ${sep}\n ${pc.bold(\"Other\")}\n ${sep}\n\n ${pc.cyan(\"help\")} ${pc.dim(\"Show this help message\")}\n ${pc.cyan(\"version\")} ${pc.dim(\"Show version\")}\n\n ${pc.dim(\"─\".repeat(50))}\n\n ${pc.dim(\"Learn more:\")} ${pc.cyan(\"https://github.com/plumpslabs/fennec\")}\n `);\n}\n","import { PipeWatcher } from \"@plumpslabs/fennec-core\";\n\nexport async function pipeCommand(args: string[]): Promise<void> {\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : \"pipe\";\n\n if (!name) {\n console.error(\"Error: --name is required for pipe command\");\n process.exit(1);\n }\n\n const watcher = new PipeWatcher();\n const { write } = watcher.createPipe(name);\n\n console.error(`Pipe watcher '${name}' active. Forwarding stdin...`);\n\n const onDrain = () => {\n process.stdin.resume();\n };\n process.stdout.on(\"drain\", onDrain);\n\n process.stdin.setEncoding(\"utf-8\");\n process.stdin.on(\"data\", (data: string) => {\n try {\n write(data);\n const canContinue = process.stdout.write(data);\n if (!canContinue) {\n process.stdin.pause();\n }\n } catch (error) {\n console.error(\"Pipe error:\", error);\n }\n });\n\n process.stdin.on(\"error\", (error) => {\n console.error(\"Pipe stdin error:\", error);\n });\n\n process.stdin.on(\"end\", () => {\n console.error(`Pipe watcher '${name}' ended.`);\n watcher.cleanup();\n });\n\n const shutdown = () => {\n watcher.cleanup();\n process.stdout.removeListener(\"drain\", onDrain);\n process.stdin.removeAllListeners();\n process.exit(0);\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n}\n","import { PortDetector } from \"@plumpslabs/fennec-core\";\n\nexport async function attachPidCommand(args: string[]): Promise<void> {\n const pid = parseInt(args[0]!, 10);\n if (isNaN(pid)) {\n console.error(\"Error: valid PID is required\");\n process.exit(1);\n }\n const detector = new PortDetector();\n const info = detector.detectByPid(pid);\n if (info) {\n console.log(`Attached to PID ${pid}${info.command ? ` (${info.command})` : \"\"}`);\n if (info.port) console.log(` Port: ${info.port}`);\n } else {\n console.error(`Could not find process with PID ${pid}`);\n process.exit(1);\n }\n}\n","import { PortDetector } from \"@plumpslabs/fennec-core\";\n\nexport async function attachPortCommand(args: string[]): Promise<void> {\n const port = parseInt(args[0]!, 10);\n if (isNaN(port)) {\n console.error(\"Error: valid port number is required\");\n process.exit(1);\n }\n const detector = new PortDetector();\n const info = detector.detectByPort(port);\n if (info) {\n console.log(`Found process on port ${port}: PID ${info.pid}${info.command ? ` (${info.command})` : \"\"}`);\n } else {\n console.error(`No process found listening on port ${port}`);\n process.exit(1);\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { LogWatcher } from \"@plumpslabs/fennec-core\";\n\nexport async function watchCommand(args: string[]): Promise<void> {\n const fileIndex = args.indexOf(\"--file\");\n const filePath = fileIndex !== -1 ? args[fileIndex + 1] : undefined;\n if (!filePath) {\n console.error(\"Error: --file is required for watch command\");\n process.exit(1);\n }\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const resolvedPath = resolve(filePath);\n if (!existsSync(resolvedPath)) {\n console.error(`Error: File not found: ${resolvedPath}`);\n process.exit(1);\n }\n const watcher = new LogWatcher();\n const watcherId = watcher.watchFile(resolvedPath, name);\n console.log(`Watching file: ${resolvedPath}`);\n console.log(`Watcher ID: ${watcherId}`);\n process.stdin.resume();\n}\n","/**\n * Command: start / run — Spawn a process as a detached daemon.\n * Includes auto-resurrect: on server start, re-spawns tracked processes\n * that died since last session (like PM2 resurrect).\n *\n * With --restart flag: auto-restarts the process if it crashes (like PM2 watch).\n */\nimport { createWriteStream, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { FennecServer } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderKV, renderAppName, renderError, divider, createSpinner } from \"../utils/format.js\";\nimport { readTracked, addTracked, removeTracked, rotateLogFile } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\nimport { psCommand } from \"./ps.js\";\nimport type { TrackedProcess } from \"./tracker.js\";\n\n// Re-export from tracker for backward compat\nexport type { TrackedProcess };\n\nexport async function startServer(args: string[]): Promise<void> {\n printBanner();\n console.error(` ${pc.dim(\"Starting Fennec MCP server...\")}\\n`);\n\n const configIndex = args.indexOf(\"--config\");\n const configPath = configIndex !== -1 ? args[configIndex + 1] : undefined;\n\n try {\n const server = new FennecServer(configPath);\n\n // Auto-resurrect: re-spawn tracked processes that died since last session\n await resurrectTracked();\n\n await server.start();\n\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(\"Fennec server is running\")}`);\n console.error(` ${renderKV(\"Transport\", \"stdio\")}`);\n console.error(` ${renderKV(\"AI Agent\", \"Connect via MCP protocol\")}`);\n console.error(`\\n ${pc.dim(\"Press Ctrl+C to stop\")}\\n`);\n } catch (error) {\n console.error(renderError(\"Failed to start server\", String(error)));\n process.exit(1);\n }\n}\n\nexport async function startCommand(args: string[]): Promise<void> {\n printBanner();\n console.error(` ${pc.dim(\"Starting app...\")}\\n`);\n await runCommand(args);\n}\n\nexport async function runCommand(args: string[]): Promise<void> {\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const portIndex = args.indexOf(\"--port\");\n const port = portIndex !== -1 ? parseInt(args[portIndex + 1]!, 10) : undefined;\n const cwdIndex = args.indexOf(\"--cwd\");\n const cwd = cwdIndex !== -1 ? args[cwdIndex + 1] : undefined;\n const restartFlag = args.includes(\"--restart\");\n\n const stopFlags = [nameIndex, portIndex, cwdIndex].filter((i) => i !== -1) as number[];\n const cmdEnd = Math.min(...stopFlags, Infinity);\n const cmdParts = args.slice(0, cmdEnd);\n const cmd = cmdParts.join(\" \");\n\n if (!cmd) {\n console.error(renderError(\"Missing command\", \"Usage: fennec start|run <command> --name <name> [--port <port>] [--cwd <dir>] [--restart]\"));\n process.exit(1);\n }\n\n const appName = name ?? cmdParts[0] ?? \"app\";\n\n // Duplicate Prevention\n const tracked = readTracked();\n const existing = tracked.find((t) => t.name === appName);\n if (existing && isProcessRunning(existing.pid)) {\n console.error();\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(appName)} ${pc.dim(`is already running (PID: ${existing.pid})`)}`);\n console.error(` ${renderKV(\"Logs\", pc.cyan(`fennec log ${appName}`))}`);\n console.error(` ${renderKV(\"Stop\", pc.cyan(`fennec kill ${appName}`))}`);\n console.error();\n process.exit(0);\n }\n\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${appName}.log`);\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Starting\")} ${renderAppName(appName)} ${pc.dim(\"(daemon)\")}\\n`);\n console.error(` ${renderKV(\"Command\", cmd)}`);\n if (port) console.error(` ${renderKV(\"Port\", String(port))}`);\n if (cwd) console.error(` ${renderKV(\"Directory\", cwd)}`);\n if (restartFlag) console.error(` ${renderKV(\"Auto-restart\", pc.green(\"enabled\"))}`);\n console.error(` ${divider()}`);\n\n try {\n let currentChild = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n const pid = currentChild.pid ?? 0;\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (currentChild.stdout) currentChild.stdout.pipe(logStream);\n if (currentChild.stderr) currentChild.stderr.pipe(logStream);\n\n currentChild.unref();\n\n addTracked({\n name: appName,\n pid,\n command: cmd,\n port,\n cwd,\n startedAt: new Date().toISOString(),\n });\n\n console.error(` ${pc.green(\"✓\")} ${pc.bold(appName)} ${pc.dim(`started (PID: ${pid})`)}`);\n\n // If --restart flag is set, watch for crashes and auto-restart\n if (restartFlag) {\n console.error(` ${pc.dim(\"Auto-restart enabled — watching for crashes...\")}\\n`);\n\n // Shared handler to set up log rotation + exit watcher on a child\n function setupRestartWatch(c: typeof currentChild): void {\n c.on(\"exit\", (code, signal) => {\n if (code !== 0 && signal !== \"SIGTERM\" && signal !== \"SIGKILL\") {\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(appName)} ${pc.dim(`exited with code ${code}, restarting...`)}`);\n const restarted = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n const newPid = restarted.pid ?? 0;\n rotateLogFile(logFilePath);\n const rs = createWriteStream(logFilePath, { flags: \"a\" });\n if (restarted.stdout) restarted.stdout.pipe(rs);\n if (restarted.stderr) restarted.stderr.pipe(rs);\n restarted.unref();\n addTracked({ name: appName, pid: newPid, command: cmd, port, cwd, startedAt: new Date().toISOString() });\n console.error(` ${pc.green(\"✓\")} ${pc.bold(appName)} ${pc.dim(`restarted (PID: ${newPid})`)}`);\n // Watch the new child too (continuous restart)\n currentChild = restarted;\n setupRestartWatch(restarted);\n }\n });\n }\n\n setupRestartWatch(currentChild);\n\n // Keep the process alive to watch for crashes\n await new Promise<void>((resolve) => {\n process.once(\"SIGINT\", () => {\n currentChild.kill(\"SIGTERM\");\n resolve();\n });\n });\n }\n\n // Show the process table instead of logs (only if not in --restart mode)\n if (!restartFlag) {\n await psCommand([]);\n }\n } catch (error) {\n console.error(renderError(`Failed to start ${appName}`, String(error)));\n process.exit(1);\n }\n}\n\n/**\n * PM2-like resurrect: Re-spawn tracked processes that died.\n * Called automatically during `fennec start` (server mode).\n * Reads tracked.json, checks each PID, re-spawns stopped ones.\n */\nexport async function resurrectTracked(): Promise<void> {\n const tracked = readTracked();\n if (tracked.length === 0) return;\n\n const dead = tracked.filter((t) => !isProcessRunning(t.pid));\n if (dead.length === 0) return;\n\n const spinner = createSpinner(`Resurrecting ${dead.length} stopped process(es)...`);\n let resurrected = 0;\n let failed = 0;\n\n for (const proc of dead) {\n // Only resurrect if the process has a command (not just a PID reference)\n if (!proc.command) {\n removeTracked(proc.name);\n continue;\n }\n\n try {\n const cmdParts = proc.command.split(/\\s+/);\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${proc.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: proc.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n // Update PID in tracked.json\n addTracked({\n name: proc.name,\n pid: child.pid ?? 0,\n command: proc.command,\n port: proc.port,\n cwd: proc.cwd,\n startedAt: new Date().toISOString(),\n });\n\n resurrected++;\n } catch {\n failed++;\n }\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n\n if (resurrected > 0) {\n console.error(` ${pc.green(\"●\")} ${pc.bold(`Resurrected ${resurrected} process(es)`)}`);\n }\n if (failed > 0) {\n console.error(` ${pc.red(\"●\")} ${pc.bold(`${failed} process(es) failed to resurrect`)}`);\n }\n}\n","/**\n * Process Tracker — Shared state for managing ~/.fennec/tracked.json\n * Extracted from index.ts to be reusable across all CLI command files.\n */\nimport { existsSync, writeFileSync, readFileSync, mkdirSync, renameSync, statSync, rmSync } from \"node:fs\";\nimport { resolve, dirname, basename } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nexport interface TrackedProcess {\n name: string;\n pid: number;\n command: string;\n port?: number;\n cwd?: string;\n startedAt: string;\n}\n\nexport function getTrackedPath(): string {\n const dir = process.env.FENNEC_DATA_DIR\n ? resolve(process.env.FENNEC_DATA_DIR)\n : resolve(homedir(), \".fennec\");\n return resolve(dir, \"tracked.json\");\n}\n\nexport function readTracked(): TrackedProcess[] {\n try {\n const path = getTrackedPath();\n if (!existsSync(path)) return [];\n return JSON.parse(readFileSync(path, \"utf-8\"));\n } catch {\n return [];\n }\n}\n\nexport function saveTracked(processes: TrackedProcess[]): void {\n try {\n const path = getTrackedPath();\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, JSON.stringify(processes, null, 2), \"utf-8\");\n } catch (err) {\n console.error(\"[fennec] Failed to save tracked processes:\", err instanceof Error ? err.message : String(err));\n }\n}\n\nexport function addTracked(proc: TrackedProcess): void {\n const tracked = readTracked();\n const filtered = tracked.filter((t) => t.name !== proc.name);\n filtered.push(proc);\n saveTracked(filtered);\n}\n\nexport function removeTracked(name: string): void {\n const tracked = readTracked();\n saveTracked(tracked.filter((t) => t.name !== name));\n}\n\nexport function removeTrackedByPid(pid: number): void {\n const tracked = readTracked();\n saveTracked(tracked.filter((t) => t.pid !== pid));\n}\n\nexport function formatUptime(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n if (h >= 24) {\n const d = Math.floor(h / 24);\n return `${d}d ${h % 24}h ${m}m`;\n }\n return `${h}h ${m}m`;\n}\n\n// ─── Log Rotation ─────────────────────────────────────────────────\n// Rotates log files when they exceed maxSize (default: 10MB).\n// Keeps up to maxFiles rotated copies (default: 3) then deletes oldest.\n\nconst DEFAULT_MAX_LOG_SIZE = 10 * 1024 * 1024; // 10MB\nconst DEFAULT_MAX_LOG_FILES = 3;\n\n/**\n * Check if a log file needs rotation and rotate if necessary.\n * Returns true if rotation was performed.\n */\nexport function rotateLogFile(\n filePath: string,\n maxSize = DEFAULT_MAX_LOG_SIZE,\n maxFiles = DEFAULT_MAX_LOG_FILES,\n): boolean {\n try {\n if (!existsSync(filePath)) return false;\n const stats = statSync(filePath);\n if (stats.size < maxSize) return false;\n\n // Rotate: .log -> .log.1 -> .log.2 -> .log.3 (delete oldest)\n const dir = dirname(filePath);\n const base = basename(filePath);\n\n // Delete oldest if exists\n const oldestPath = resolve(dir, `${base}.${maxFiles}`);\n if (existsSync(oldestPath)) {\n try { rmSync(oldestPath); } catch { /* best-effort */ }\n }\n\n // Shift existing rotations\n for (let i = maxFiles - 1; i >= 1; i--) {\n const src = resolve(dir, `${base}.${i}`);\n const dst = resolve(dir, `${base}.${i + 1}`);\n if (existsSync(src)) {\n try { renameSync(src, dst); } catch { /* best-effort */ }\n }\n }\n\n // Rotate current file\n try {\n renameSync(filePath, resolve(dir, `${base}.1`));\n } catch { /* best-effort */ }\n\n return true;\n } catch (err) {\n console.error(\"[fennec] Log rotation failed:\", err instanceof Error ? err.message : String(err));\n return false;\n }\n}\n\n\n","/**\n * System Process Scanner\n *\n * Reads real system processes from /proc (Linux) or ps (macOS/BSD).\n * Returns process info: pid, name, cpu%, mem%, status, command, ports.\n *\n * Design principles:\n * - Zero external dependencies (uses Node.js built-ins only)\n * - Cross-platform (Linux via /proc, macOS/Windows via exec)\n * - Safe errors (never throws, returns empty array on failure)\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { cpus } from \"node:os\";\n\n// ─── Types ───────────────────────────────────────────────────────\n\nexport interface SystemProcessInfo {\n pid: number;\n name: string;\n command: string;\n cpuPercent: number;\n memPercent: number;\n memRss: number; // Resident Set Size in KB\n state: string; // R=Running, S=Sleeping, Z=Zombie, etc.\n startedAt: string | null;\n ports: number[]; // Listening ports (if any)\n isUserProcess: boolean; // true if owned by current user\n}\n\nexport interface SystemProcessFilter {\n name?: string;\n pid?: number;\n port?: number;\n userOnly?: boolean;\n sortBy?: \"cpu\" | \"mem\" | \"pid\" | \"name\";\n limit?: number;\n}\n\n// ─── Linux /proc Scanner ─────────────────────────────────────────\n\nfunction readProcProcesses(): SystemProcessInfo[] {\n const processes: SystemProcessInfo[] = [];\n const currentUid = process.getuid?.();\n const totalMemKb = readTotalMem();\n\n try {\n const pids = readdirSync(\"/proc\").filter((d) => /^\\d+$/.test(d));\n\n for (const pidStr of pids) {\n try {\n const pid = parseInt(pidStr, 10);\n const proc = readSingleProcProcess(pid, currentUid, totalMemKb);\n if (proc) processes.push(proc);\n } catch {\n // Process might have exited between readdir and stat\n continue;\n }\n }\n } catch {\n // /proc not available (not Linux)\n return [];\n }\n\n return processes;\n}\n\nfunction readSingleProcProcess(\n pid: number,\n currentUid: number | undefined,\n totalMemKb: number,\n): SystemProcessInfo | null {\n const statPath = `/proc/${pid}/stat`;\n const statusPath = `/proc/${pid}/status`;\n const cmdlinePath = `/proc/${pid}/cmdline`;\n\n if (!existsSync(statPath)) return null;\n\n // Read /proc/[pid]/status for name, uid, memory\n const statusText = readSafe(statusPath);\n if (!statusText) return null;\n\n const nameMatch = statusText.match(/Name:\\s+(.+)/);\n const uidMatch = statusText.match(/Uid:\\s+(\\d+)/);\n const vmRssMatch = statusText.match(/VmRSS:\\s+(\\d+)/);\n const stateMatch = statusText.match(/State:\\s+(\\S)/);\n const name = nameMatch?.[1] ?? `pid_${pid}`;\n const uid = uidMatch ? parseInt(uidMatch[1]!, 10) : undefined;\n const vmRss = vmRssMatch ? parseInt(vmRssMatch[1]!, 10) : 0;\n const state = stateMatch?.[1] ?? \"?\";\n\n const isUserProcess = uid !== undefined && currentUid !== undefined && uid === currentUid;\n\n // Read /proc/[pid]/stat for CPU ticks\n const statText = readSafe(statPath);\n let cpuPercent = 0;\n let startedAt: string | null = null;\n\n if (statText) {\n // Parse /proc/[pid]/stat format\n // Format: pid (comm) state ppid pgrp session tty_nr tpgid flags minflt cminflt majflt\n // cmajflt utime stime cutime cstime priority nice num_threads itrealvalue starttime\n const parenEnd = statText.lastIndexOf(\")\");\n if (parenEnd > 0) {\n const fields = statText.slice(parenEnd + 2).split(/\\s+/);\n const utime = parseInt(fields[11] ?? \"0\", 10); // User mode jiffies\n const stime = parseInt(fields[12] ?? \"0\", 10); // Kernel mode jiffies\n const starttime = parseInt(fields[19] ?? \"0\", 10); // Start time in jiffies\n\n // CPU usage = (utime + stime) / uptime_seconds / Hz\n const hertz = 100; // CLK_TCK, typically 100\n const uptimeSeconds = readUptime();\n const totalJiffies = utime + stime;\n\n if (uptimeSeconds > 0) {\n const elapsedJiffies = uptimeSeconds * hertz;\n const processJiffies = totalJiffies;\n cpuPercent = Math.min(100, (processJiffies / Math.max(1, elapsedJiffies)) * 100 * cpus().length);\n }\n\n // Boot time for startedAt\n startedAt = formatStartTime(starttime, uptimeSeconds, hertz);\n }\n }\n\n // Read /proc/[pid]/cmdline for full command\n const cmdlineRaw = readSafe(cmdlinePath);\n const command = cmdlineRaw\n ? cmdlineRaw.split(\"\\0\").filter(Boolean).join(\" \")\n : name;\n\n // Read listening ports\n const ports = detectListeningPorts(pid);\n\n const memPercent = totalMemKb > 0 ? (vmRss / totalMemKb) * 100 : 0;\n\n return {\n pid,\n name,\n command: command.length > 200 ? command.slice(0, 200) + \"…\" : command,\n cpuPercent: Math.round(cpuPercent * 10) / 10,\n memPercent: Math.round(memPercent * 10) / 10,\n memRss: vmRss,\n state,\n startedAt,\n ports,\n isUserProcess,\n };\n}\n\n// ─── macOS / BSD ps fallback ─────────────────────────────────────\n\nfunction runPsProcesses(): SystemProcessInfo[] {\n try {\n const output = execSync(\n \"ps axo pid,comm,pcpu,pmem,rss,state,etime,user --sort=-pcpu 2>/dev/null | head -200\",\n { encoding: \"utf-8\", timeout: 5000 },\n );\n\n const lines = output.trim().split(\"\\n\").slice(1); // Skip header\n const currentUser = execSync(\"whoami\", { encoding: \"utf-8\", timeout: 1000 }).trim();\n\n return lines.map((line) => {\n const parts = line.trim().split(/\\s+/);\n const pid = parseInt(parts[0] ?? \"0\", 10);\n const name = parts[1] ?? \"\";\n const cpu = parseFloat(parts[2] ?? \"0\");\n const mem = parseFloat(parts[3] ?? \"0\");\n const rss = parseInt(parts[4] ?? \"0\", 10);\n const state = parts[5] ?? \"?\";\n const elapsed = parts[6] ?? \"\";\n const user = parts[7] ?? \"\";\n const command = parts.slice(1).join(\" \");\n\n return {\n pid,\n name,\n command: command.length > 200 ? command.slice(0, 200) + \"…\" : command,\n cpuPercent: Math.round(cpu * 10) / 10,\n memPercent: Math.round(mem * 10) / 10,\n memRss: rss,\n state: mapBsdState(state),\n startedAt: elapsed || null,\n ports: [] as number[],\n isUserProcess: user === currentUser,\n };\n });\n } catch {\n return [];\n }\n}\n\nfunction mapBsdState(s: string): string {\n switch (s) {\n case \"R\": return \"R\";\n case \"S\": return \"S\";\n case \"Z\": return \"Z\";\n case \"T\": return \"T\";\n case \"I\": return \"S\";\n default: return s;\n }\n}\n\n// ─── Port Scanner ────────────────────────────────────────────────\n// NOTE: Per-process port detection via /proc/[pid]/net/tcp is unreliable\n// because it shows network namespace ports, not per-process ports.\n// Fennec tracks ports via the --port flag when starting apps.\n// We keep the field for API compatibility but always return empty.\n\nfunction detectListeningPorts(_pid: number): number[] {\n return [];\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────\n\nfunction readSafe(path: string): string | null {\n try {\n return readFileSync(path, \"utf-8\");\n } catch {\n return null;\n }\n}\n\nfunction readTotalMem(): number {\n try {\n const memInfo = readSafe(\"/proc/meminfo\");\n if (memInfo) {\n const match = memInfo.match(/MemTotal:\\s+(\\d+)/);\n if (match) return parseInt(match[1]!, 10);\n }\n } catch {\n // ignore\n }\n return 16_000_000; // Default ~16GB\n}\n\nfunction readUptime(): number {\n try {\n const data = readSafe(\"/proc/uptime\");\n if (data) {\n return parseFloat(data.split(/\\s+/)[0] ?? \"0\");\n }\n } catch {\n // ignore\n }\n return 0;\n}\n\nfunction formatStartTime(starttime: number, uptimeSeconds: number, hertz: number): string | null {\n try {\n const bootTime = Date.now() / 1000 - uptimeSeconds;\n const processStart = bootTime + starttime / hertz;\n return new Date(processStart * 1000).toISOString();\n } catch {\n return null;\n }\n}\n\n// ─── Public API ──────────────────────────────────────────────────\n\n/**\n * Get all system processes.\n * Uses /proc on Linux, falls back to `ps` on macOS/BSD.\n */\nexport function getSystemProcesses(filter?: SystemProcessFilter): SystemProcessInfo[] {\n let processes: SystemProcessInfo[];\n\n // Try /proc first (Linux), fall back to ps (macOS/BSD)\n if (existsSync(\"/proc\")) {\n processes = readProcProcesses();\n } else {\n processes = runPsProcesses();\n }\n\n // Apply filters\n if (filter) {\n if (filter.userOnly) {\n processes = processes.filter((p) => p.isUserProcess);\n }\n if (filter.name) {\n const nameLower = filter.name.toLowerCase();\n processes = processes.filter(\n (p) => p.name.toLowerCase().includes(nameLower) || p.command.toLowerCase().includes(nameLower),\n );\n }\n if (filter.pid) {\n processes = processes.filter((p) => p.pid === filter.pid);\n }\n if (filter.port) {\n processes = processes.filter((p) => p.ports.includes(filter.port!));\n }\n\n // Sort\n if (filter.sortBy) {\n processes.sort((a, b) => {\n switch (filter.sortBy) {\n case \"cpu\": return b.cpuPercent - a.cpuPercent;\n case \"mem\": return b.memPercent - a.memPercent;\n case \"pid\": return a.pid - b.pid;\n case \"name\": return a.name.localeCompare(b.name);\n default: return b.cpuPercent - a.cpuPercent;\n }\n });\n }\n\n // Limit\n if (filter.limit && filter.limit > 0) {\n processes = processes.slice(0, filter.limit);\n }\n }\n\n return processes;\n}\n\n/**\n * Get a single process by PID. Returns null if not found.\n */\nexport function getProcessByPid(pid: number): SystemProcessInfo | null {\n const processes = getSystemProcesses({ pid });\n return processes[0] ?? null;\n}\n\n/**\n * Kill a process by PID. Returns true if successful.\n */\nexport function killProcess(pid: number, signal: NodeJS.Signals = \"SIGTERM\"): boolean {\n try {\n process.kill(pid, signal);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a process is running.\n */\nexport function isProcessRunning(pid: number): boolean {\n try {\n process.kill(pid, 0); // Signal 0 checks existence without killing\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get human-readable process state.\n */\nexport function formatProcessState(state: string): string {\n switch (state) {\n case \"R\": return \"Running\";\n case \"S\": return \"Sleeping\";\n case \"D\": return \"Disk Sleep\";\n case \"Z\": return \"Zombie\";\n case \"T\": return \"Stopped\";\n case \"t\": return \"Tracing\";\n case \"X\": return \"Dead\";\n case \"I\": return \"Idle\";\n default: return state;\n }\n}\n","/**\n * Command: ps, status — List tracked processes and system overview.\n */\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderTable, renderError, renderCommand, createSpinner, timestamp, type Column, type Row } from \"../utils/format.js\";\nimport { getSystemProcesses, isProcessRunning, formatProcessState } from \"../utils/system-process.js\";\nimport { readTracked, formatUptime } from \"./tracker.js\";\n\nexport async function psCommand(args: string[]): Promise<void> {\n const watchFlag = args.includes(\"-w\") || args.includes(\"--watch\");\n const systemFlag = args.includes(\"--system\") || args.includes(\"-a\") || args.includes(\"--all\");\n const jsonFlag = args.includes(\"--json\");\n const nameFilter = args.includes(\"--name\") ? args[args.indexOf(\"--name\") + 1] : undefined;\n const sortBy = args.includes(\"--sort\")\n ? (args[args.indexOf(\"--sort\") + 1] as \"cpu\" | \"mem\" | \"pid\" | \"name\")\n : \"name\";\n\n if (jsonFlag) {\n await psJson();\n return;\n }\n\n if (watchFlag && systemFlag) {\n await watchSystemProcesses(sortBy, 15);\n return;\n }\n\n if (systemFlag) {\n const spinner = createSpinner(\"Scanning system processes...\");\n try {\n const processes = getSystemProcesses({ name: nameFilter, userOnly: true, sortBy, limit: 30 });\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n if (processes.length === 0) {\n console.error(`\\n ${pc.dim(\"No system processes found.\")}\\n`);\n return;\n }\n const columns: Column[] = [\n { key: \"pid\", label: \"PID\", align: \"right\", format: (v) => pc.dim(String(v).padStart(6)) },\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"cpu\", label: \"CPU%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"mem\", label: \"MEM%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"state\", label: \"State\", format: (v) => { const s = String(v); if (s === \"R\" || s === \"Running\") return pc.green(s); if (s === \"Z\" || s === \"Zombie\") return pc.red(s); if (s === \"S\" || s === \"Sleeping\") return pc.cyan(s); return pc.dim(s); } },\n ];\n const rows: Row[] = processes.map((p) => ({ pid: p.pid, name: p.name, cpu: p.cpuPercent, mem: p.memPercent, state: formatProcessState(p.state) }));\n console.error(`\\n ${symbols.fox} ${pc.bold(\"System Processes\")} ${pc.dim(`(top ${processes.length} by ${sortBy})`)}\\n`);\n console.error(renderTable(columns, rows));\n console.error();\n } catch (error) {\n spinner.fail(\"Failed to scan processes\");\n console.error(renderError(\"Process scan failed\", String(error)));\n }\n return;\n }\n\n const tracked = readTracked();\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes.\")}`);\n console.error(` ${pc.dim(\"Start an app with:\")} ${pc.cyan(\"fennec start <command> --name <name>\")}\\n`);\n return;\n }\n\n const columns: Column[] = [\n { key: \"name\", label: \"App\", format: (v) => pc.bold(String(v)) },\n { key: \"pid\", label: \"PID\", align: \"right\" },\n { key: \"status\", label: \"Status\", format: (v) => { const s = v as string; return s === \"running\" ? pc.green(\"● running\") : pc.red(\"○ stopped\"); } },\n { key: \"port\", label: \"Port\", format: (v) => { const p = v as number | null; return p ? pc.yellow(`:${p}`) : pc.dim(\"-\"); } },\n { key: \"command\", label: \"Command\", format: (v) => { const c = String(v); return c.length > 50 ? c.slice(0, 50) + \"…\" : c; } },\n { key: \"uptime\", label: \"Uptime\", format: (v) => pc.dim(String(v)) },\n ];\n\n const rows: Row[] = tracked.map((t) => {\n const running = isProcessRunning(t.pid);\n const uptime = running ? formatUptime(Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000)) : \"-\";\n return { name: t.name, pid: running ? String(t.pid) : pc.dim(String(t.pid)), status: running ? \"running\" : \"stopped\", port: t.port ?? null, command: t.command, uptime };\n });\n\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Apps\")} ${pc.dim(`(${runningCount}/${tracked.length} running)`)}\\n`);\n console.error(renderTable(columns, rows));\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec start <command> --name <name> --port <port>\")} ${pc.dim(\"to add more apps.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec log <name>\")} ${pc.dim(\"to view logs.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec stop <name>\")} ${pc.dim(\"to pause an app.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec spawn <name>\")} ${pc.dim(\"to resume a paused app.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec kill <name>\")} ${pc.dim(\"to permanently remove an app.\")}`);\n console.error();\n}\n\n/**\n * JSON output of tracked processes.\n */\nasync function psJson(): Promise<void> {\n const tracked = readTracked();\n const data = tracked.map((t) => {\n const running = isProcessRunning(t.pid);\n return {\n name: t.name,\n pid: t.pid,\n status: running ? \"running\" : \"stopped\",\n port: t.port ?? null,\n command: t.command,\n cwd: t.cwd ?? null,\n startedAt: t.startedAt,\n uptime: running ? Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000) : null,\n };\n });\n console.log(JSON.stringify(data, null, 2));\n}\n\nexport async function statusCommand(_args: string[]): Promise<void> {\n const watchFlag = _args.includes(\"-w\") || _args.includes(\"--watch\");\n const tracked = readTracked();\n const topSystem = getSystemProcesses({ userOnly: true, sortBy: \"cpu\", limit: 5 });\n const totalUserProcs = getSystemProcesses({ userOnly: true }).length;\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Status\")}\\n`);\n\n if (tracked.length > 0) {\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n console.error(` ${pc.bold(\"Managed Apps\")} ${pc.dim(`(${runningCount}/${tracked.length} running)`)}\\n`);\n for (const t of tracked) {\n const running = isProcessRunning(t.pid);\n const statusIcon = running ? pc.green(\"●\") : pc.red(\"○\");\n const portStr = t.port ? ` ${pc.yellow(`:${t.port}`)}` : \"\";\n const uptime = running ? pc.dim(formatUptime(Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000))) : pc.red(\"stopped\");\n console.error(` ${statusIcon} ${pc.bold(t.name)}${portStr} ${pc.dim(`(PID ${t.pid})`)} — ${uptime}`);\n }\n console.error();\n } else {\n console.error(` ${pc.dim(\"No managed apps.\")} ${pc.cyan(\"fennec start <command> --name <name>\")}\\n`);\n }\n\n console.error(` ${pc.bold(\"System\")} ${pc.dim(`(${totalUserProcs} user processes)`)}`);\n for (const p of topSystem) {\n const cpuStr = p.cpuPercent > 10 ? pc.red(`${p.cpuPercent}%`) : p.cpuPercent > 5 ? pc.yellow(`${p.cpuPercent}%`) : pc.dim(`${p.cpuPercent}%`);\n const memStr = p.memPercent > 10 ? pc.red(`${p.memPercent}%`) : p.memPercent > 5 ? pc.yellow(`${p.memPercent}%`) : pc.dim(`${p.memPercent}%`);\n console.error(` ${pc.dim(`PID ${p.pid}`)} ${pc.bold(p.name)} — CPU: ${cpuStr} MEM: ${memStr}`);\n }\n\n if (watchFlag) await watchSystemProcesses(\"cpu\", 15);\n console.error();\n}\n\nasync function watchSystemProcesses(sortBy: string, limit: number): Promise<void> {\n console.error(`\\n ${pc.bold(\"Watching system processes\")} ${pc.dim(\"(Ctrl+C to stop, refreshes every 3s)\")}\\n`);\n\n const render = () => {\n const processes = getSystemProcesses({ userOnly: true, sortBy: sortBy as \"cpu\" | \"mem\" | \"pid\" | \"name\", limit });\n const columns: Column[] = [\n { key: \"pid\", label: \"PID\", align: \"right\", format: (v) => pc.dim(String(v).padStart(6)) },\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"cpu\", label: \"CPU%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"mem\", label: \"MEM%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"state\", label: \"S\", align: \"center\" },\n ];\n const rows: Row[] = processes.map((p) => ({ pid: p.pid, name: p.name, cpu: p.cpuPercent, mem: p.memPercent, state: p.state }));\n return ` ${timestamp()} ${pc.dim(`${processes.length} processes`)}\\n${renderTable(columns, rows, { compact: true })}`;\n };\n\n console.error(render());\n const interval = setInterval(() => { process.stdout.write(\"\\x1B[J\"); console.error(render()); }, 3000);\n // Keep alive until SIGINT — resolves cleanly (no process.exit)\n await new Promise<void>((resolve) => {\n process.once(\"SIGINT\", () => {\n clearInterval(interval);\n process.stdout.write(\"\\x1B[J\");\n resolve();\n });\n });\n}\n","/**\n * Command: kill — Kill process by PID, name, or kill all user processes.\n */\nimport pc from \"picocolors\";\nimport { renderError, createSpinner, selectPrompt, confirmPrompt } from \"../utils/format.js\";\nimport { getSystemProcesses, killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { readTracked, removeTrackedByPid } from \"./tracker.js\";\n\nexport async function killCommand(args: string[]): Promise<void> {\n const rawTarget = args[0];\n const signalIndex = args.indexOf(\"--signal\");\n const signalRaw = signalIndex !== -1 ? args[signalIndex + 1] : \"SIGTERM\";\n const signal = (signalRaw ?? \"SIGTERM\") as NodeJS.Signals;\n\n if (rawTarget === \"all\" || args.includes(\"--all\") || args.includes(\"-a\")) {\n await killAll(signal);\n return;\n }\n\n if (!rawTarget) {\n console.error(renderError(\"Missing target\", \"Usage: fennec kill <pid|name|all> [--signal SIGTERM|SIGKILL|SIGINT]\"));\n process.exit(1);\n }\n\n let targetPid: number;\n let displayName: string;\n const pid = parseInt(rawTarget, 10);\n\n if (!isNaN(pid) && String(pid) === rawTarget) {\n if (!isProcessRunning(pid)) { console.error(renderError(\"Process not found\", `No process with PID ${pid} is running`)); process.exit(1); }\n targetPid = pid;\n displayName = `PID ${pid}`;\n } else {\n // First check tracked processes (from fennec start / tracked.json)\n const tracked = readTracked();\n const trackedMatch = tracked.find((t) => t.name === rawTarget);\n if (trackedMatch && isProcessRunning(trackedMatch.pid)) {\n targetPid = trackedMatch.pid;\n displayName = `${trackedMatch.name} (PID ${targetPid})`;\n } else {\n const matches = getSystemProcesses({ name: rawTarget, userOnly: true, sortBy: \"cpu\" });\n if (matches.length === 0) { console.error(renderError(\"Process not found\", `No running process matching \"${rawTarget}\"`)); process.exit(1); }\n if (matches.length > 1) {\n console.error(`\\n ${pc.bold(`Multiple processes match \"${rawTarget}\":`)}`);\n const selected = await selectPrompt(\"Select which to kill:\", matches.map((p, i) => ({ value: String(i), label: `${p.name} (PID ${p.pid})`, description: `${p.command.slice(0, 80)} — CPU: ${p.cpuPercent}% MEM: ${p.memPercent}%` })));\n if (selected === null) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n const idx = parseInt(selected, 10);\n targetPid = matches[idx]!.pid;\n displayName = `${matches[idx]!.name} (PID ${targetPid})`;\n } else {\n targetPid = matches[0]!.pid;\n displayName = `${matches[0]!.name} (PID ${targetPid})`;\n }\n }\n }\n\n const confirmed = await confirmPrompt(`Kill ${pc.bold(displayName)} with ${pc.yellow(signal)}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n const spinner = createSpinner(`Sending ${signal} to ${displayName}...`);\n const success = sysKill(targetPid, signal);\n\n if (success) {\n await new Promise((r) => setTimeout(r, 200));\n const stillRunning = isProcessRunning(targetPid);\n if (stillRunning && signal !== \"SIGKILL\") {\n spinner.warn(`${displayName} did not respond to ${signal}`);\n const forceKill = await confirmPrompt(`Send ${pc.red(\"SIGKILL\")} to force stop?`, true);\n if (forceKill) {\n const forceSpinner = createSpinner(`Sending SIGKILL to ${displayName}...`);\n sysKill(targetPid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 300));\n isProcessRunning(targetPid) ? forceSpinner.fail(`${displayName} could not be stopped (permission denied?)`) : forceSpinner.succeed(`${displayName} force stopped`);\n } else {\n console.error(` ${pc.dim(\"Retrying with SIGTERM...\")}`);\n sysKill(targetPid, \"SIGTERM\");\n console.error(` ${pc.yellow(\"⚠\")} ${displayName} ${pc.dim(\"may still be running\")}`);\n }\n } else {\n removeTrackedByPid(targetPid);\n spinner.succeed(`${displayName} stopped`);\n }\n } else {\n spinner.fail(`Failed to kill ${displayName}`);\n console.error(renderError(\"Permission denied\", \"Try running with sudo or use a different signal.\"));\n }\n}\n\nasync function killAll(signal: NodeJS.Signals): Promise<void> {\n const userProcs = getSystemProcesses({ userOnly: true, sortBy: \"cpu\", limit: 200 });\n if (userProcs.length === 0) { console.error(` ${pc.dim(\"No user processes to kill.\")}`); return; }\n\n console.error(`\\n ${pc.bold(`Kill ${userProcs.length} user processes?`)}`);\n console.error(` ${pc.dim(\"This will stop ALL your running processes.\")}`);\n console.error(` ${pc.yellow(\"⚠ System processes will not be affected.\")}\\n`);\n\n const confirmed = await confirmPrompt(`${pc.red(\"Are you sure?\")} ${pc.dim(\"This cannot be undone\")}`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled.\")}`); return; }\n\n const spinner = createSpinner(`Killing ${userProcs.length} processes...`);\n let killed = 0, failed = 0;\n for (const proc of userProcs) {\n if (sysKill(proc.pid, signal)) { killed++; removeTrackedByPid(proc.pid); } else { failed++; }\n if (killed % 10 === 0) await new Promise((r) => setTimeout(r, 50));\n }\n await new Promise((r) => setTimeout(r, 500));\n killed > 0 ? spinner.succeed(`${killed} process(es) killed`) : spinner.fail(\"Failed to kill processes\");\n if (failed > 0) console.error(` ${pc.yellow(`${failed} process(es) could not be killed`)} ${pc.dim(\"(try with sudo)\")}`);\n}\n","/**\n * Command: stop — Stop a tracked process but keep it in tracked.json.\n * Unlike `kill`, the process entry remains in tracked.json so it can\n * be re-spawned later via `fennec spawn <name>`.\n */\nimport pc from \"picocolors\";\nimport { renderError, createSpinner, confirmPrompt } from \"../utils/format.js\";\nimport { killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { readTracked } from \"./tracker.js\";\nimport { psCommand } from \"./ps.js\";\n\nexport async function stopCommand(args: string[]): Promise<void> {\n const stopAll = args.includes(\"--all\") || args.includes(\"-a\");\n\n if (stopAll) {\n await stopAllTracked();\n return;\n }\n\n const rawTarget = args[0];\n\n if (!rawTarget) {\n console.error(renderError(\"Missing name\", \"Usage: fennec stop <name|--all>\"));\n process.exit(1);\n }\n\n // Only works on tracked processes\n const tracked = readTracked();\n const trackedMatch = tracked.find((t) => t.name === rawTarget);\n\n if (!trackedMatch) {\n console.error(renderError(\"Not found\", `No tracked process named \"${rawTarget}\". Use ${pc.cyan(\"fennec kill <pid>\")} to kill a system process.`));\n process.exit(1);\n }\n\n if (!isProcessRunning(trackedMatch.pid)) {\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.bold(rawTarget)} ${pc.dim(\"is already stopped\")}`);\n console.error();\n process.exit(0);\n }\n\n const displayName = `${trackedMatch.name} (PID ${trackedMatch.pid})`;\n const confirmed = await confirmPrompt(`Stop ${pc.bold(displayName)}? ${pc.dim(\"It can be re-spawned later via fennec spawn\")}`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n await stopSingleProcess(trackedMatch.pid, trackedMatch.name);\n}\n\n/**\n * Stop all running tracked processes (keep them in tracked.json).\n */\nasync function stopAllTracked(): Promise<void> {\n const tracked = readTracked();\n const running = tracked.filter((t) => isProcessRunning(t.pid));\n\n if (running.length === 0) {\n console.error(`\\n ${pc.dim(\"No running tracked processes to stop.\")}\\n`);\n return;\n }\n\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.bold(`Stop all ${running.length} running process(es)?`)} ${pc.dim(\"(They can be re-spawned later)\")}\\n`);\n for (const t of running) {\n console.error(` ${pc.green(\"●\")} ${pc.bold(t.name)} ${pc.dim(`(PID ${t.pid})`)}`);\n }\n console.error();\n\n const confirmed = await confirmPrompt(\"Stop all?\", false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}\\n`); return; }\n\n const spinner = createSpinner(`Stopping ${running.length} process(es)...`);\n let stopped = 0;\n let failed = 0;\n\n for (const t of running) {\n if (sysKill(t.pid, \"SIGTERM\")) {\n stopped++;\n } else {\n failed++;\n }\n }\n\n await new Promise((r) => setTimeout(r, 300));\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n\n if (stopped > 0) {\n console.error(` ${pc.green(\"✓\")} ${pc.bold(`Stopped ${stopped} process(es)`)} ${pc.dim(\"(kept in tracked.json)\")}`);\n }\n if (failed > 0) {\n console.error(` ${pc.red(\"✗\")} ${pc.bold(`${failed} process(es) failed to stop`)}`);\n }\n\n console.error();\n await psCommand([]);\n}\n\nasync function stopSingleProcess(pid: number, name: string): Promise<void> {\n const displayName = `${name} (PID ${pid})`;\n const spinner = createSpinner(`Stopping ${displayName}...`);\n const success = sysKill(pid, \"SIGTERM\");\n\n if (success) {\n await new Promise((r) => setTimeout(r, 200));\n const stillRunning = isProcessRunning(pid);\n if (stillRunning) {\n spinner.warn(`${displayName} did not respond to SIGTERM`);\n const forceKill = await confirmPrompt(`Send ${pc.red(\"SIGKILL\")} to force stop?`, true);\n if (forceKill) {\n const forceSpinner = createSpinner(`Sending SIGKILL to ${displayName}...`);\n sysKill(pid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 300));\n isProcessRunning(pid)\n ? forceSpinner.fail(`${displayName} could not be stopped (permission denied?)`)\n : forceSpinner.succeed(`${displayName} force stopped`);\n } else {\n console.error(` ${pc.yellow(\"⚠\")} ${displayName} ${pc.dim(\"may still be running\")}`);\n }\n } else {\n spinner.succeed(`${displayName} stopped`);\n }\n\n console.error();\n await psCommand([]);\n } else {\n spinner.fail(`Failed to stop ${displayName}`);\n console.error(renderError(\"Permission denied\", \"Try running with sudo or use fennec kill.\"));\n }\n}\n","/**\n * Command: spawn — List stopped tracked processes or re-spawn one.\n *\n * Without args: shows a selectable list of stopped tracked processes.\n * With name: re-spawns the named process from its saved command in tracked.json.\n * With --all: re-spawns all stopped processes that have saved commands.\n *\n * Unlike `fennec start <cmd> --name <name>` which creates a brand new connection,\n * `fennec spawn` revives a previously stopped process.\n */\nimport pc from \"picocolors\";\nimport { createWriteStream, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { symbols, renderError, renderKV, renderAppName, createSpinner, selectPrompt } from \"../utils/format.js\";\nimport { readTracked, addTracked, rotateLogFile } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\nimport { psCommand } from \"./ps.js\";\n\nexport async function spawnCommand(args: string[]): Promise<void> {\n const spawnAll = args.includes(\"--all\") || args.includes(\"-a\");\n const name = args[0];\n\n if (spawnAll) {\n await spawnAllStopped();\n return;\n }\n\n if (!name) {\n // No args: list stopped processes for selection\n await spawnList();\n return;\n }\n\n // With name: find and re-spawn\n const tracked = readTracked();\n const match = tracked.find((t) => t.name === name);\n\n if (!match) {\n console.error(renderError(\"Not found\", `No tracked process named \"${name}\". Use ${pc.cyan(\"fennec spawn\")} to see available processes, or ${pc.cyan(\"fennec start <command> --name <name>\")} to create a new one.`));\n process.exit(1);\n }\n\n if (isProcessRunning(match.pid)) {\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.bold(name)} ${pc.dim(\"is already running (PID:\")} ${match.pid}${pc.dim(\")\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(`fennec stop ${name}`)} ${pc.dim(\"to stop it first.\")}`);\n console.error();\n process.exit(0);\n }\n\n if (!match.command) {\n console.error(renderError(\"No command saved\", `\"${name}\" has no saved command and cannot be re-spawned.`));\n process.exit(1);\n }\n\n await respawnProcess(match);\n}\n\n/**\n * Re-spawn ALL stopped tracked processes that have saved commands.\n */\nasync function spawnAllStopped(): Promise<void> {\n const tracked = readTracked();\n const toSpawn = tracked.filter((t) => !isProcessRunning(t.pid) && t.command);\n\n if (toSpawn.length === 0) {\n console.error(`\\n ${pc.dim(\"No stopped processes with saved commands to spawn.\")}\\n`);\n return;\n }\n\n console.error(`\\n ${symbols.fox} ${pc.bold(`Spawning ${toSpawn.length} process(es)...`)}\\n`);\n for (const t of toSpawn) {\n console.error(` ${pc.dim(\"·\")} ${pc.bold(t.name)} ${pc.dim(`(${t.command})`)}`);\n }\n console.error();\n\n const spinner = createSpinner(\"Spawning...\");\n let spawned = 0;\n let failed = 0;\n\n for (const proc of toSpawn) {\n try {\n const cmdParts = proc.command.split(/\\s+/);\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${proc.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: proc.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n const pid = child.pid ?? 0;\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n addTracked({\n name: proc.name,\n pid,\n command: proc.command,\n port: proc.port,\n cwd: proc.cwd,\n startedAt: new Date().toISOString(),\n });\n\n spawned++;\n } catch {\n failed++;\n }\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n\n if (spawned > 0) {\n console.error(` ${pc.green(\"✓\")} ${pc.bold(`Spawned ${spawned} process(es)`)}`);\n }\n if (failed > 0) {\n console.error(` ${pc.red(\"✗\")} ${pc.bold(`${failed} process(es) failed to spawn`)}`);\n }\n\n console.error();\n await psCommand([]);\n}\n\n/**\n * Show a selectable list of stopped tracked processes.\n */\nasync function spawnList(): Promise<void> {\n const tracked = readTracked();\n\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes found.\")}`);\n console.error(` ${pc.dim(\"Start an app first:\")} ${pc.cyan(\"fennec start <command> --name <name>\")}`);\n console.error();\n return;\n }\n\n const stopped = tracked.filter((t) => !isProcessRunning(t.pid));\n const running = tracked.filter((t) => isProcessRunning(t.pid));\n\n if (stopped.length === 0) {\n console.error(`\\n ${pc.dim(\"All tracked processes are running. Nothing to spawn.\")}`);\n console.error();\n return;\n }\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Available to spawn\")} ${pc.dim(`(${stopped.length}/${tracked.length} stopped)`)}`);\n\n // Show running ones as info\n if (running.length > 0) {\n console.error(` ${pc.dim(\"Running (use stop first):\")}`);\n for (const r of running) {\n console.error(` ${pc.green(\"●\")} ${pc.bold(r.name)} ${pc.dim(`(PID ${r.pid})`)}`);\n }\n console.error();\n }\n\n // Show stopped ones as selectable\n const selected = await selectPrompt(\"Select a process to spawn:\", stopped.map((t) => ({\n value: t.name,\n label: t.name,\n description: t.command.length > 80 ? t.command.slice(0, 80) + \"...\" : t.command,\n })));\n\n if (selected === null) {\n console.error(` ${pc.dim(\"Cancelled\")}`);\n return;\n }\n\n const match = stopped.find((t) => t.name === selected);\n if (match) {\n await respawnProcess(match);\n }\n}\n\n/**\n * Re-spawn a stopped tracked process from its saved command/cwd.\n */\nasync function respawnProcess(proc: { name: string; command: string; cwd?: string; port?: number }): Promise<void> {\n const cmdParts = proc.command.split(/\\s+/);\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${proc.name}.log`);\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Spawning\")} ${renderAppName(proc.name)} ${pc.dim(\"(from saved config)\")}\\n`);\n console.error(` ${renderKV(\"Command\", proc.command)}`);\n if (proc.cwd) console.error(` ${renderKV(\"Directory\", proc.cwd)}`);\n if (proc.port) console.error(` ${renderKV(\"Port\", String(proc.port))}`);\n\n try {\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: proc.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n const pid = child.pid ?? 0;\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n\n child.unref();\n\n // Update tracked.json with new PID\n addTracked({\n name: proc.name,\n pid,\n command: proc.command,\n port: proc.port,\n cwd: proc.cwd,\n startedAt: new Date().toISOString(),\n });\n\n console.error(` ${pc.green(\"✓\")} ${pc.bold(proc.name)} ${pc.dim(`spawned (PID: ${pid})`)}`);\n\n // Show the process table\n await psCommand([]);\n } catch (error) {\n console.error(renderError(`Failed to spawn ${proc.name}`, String(error)));\n process.exit(1);\n }\n}\n","/**\n * Command: restart — Kill and re-spawn a tracked process from tracked.json config.\n * Fixed: now actually re-spawns (instead of just killing + suggesting manual re-run).\n */\nimport pc from \"picocolors\";\nimport { mkdirSync, createWriteStream } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { renderError, renderCommand, createSpinner, confirmPrompt } from \"../utils/format.js\";\nimport { getSystemProcesses, killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { readTracked, addTracked, removeTrackedByPid, rotateLogFile } from \"./tracker.js\";\n\nexport async function restartCommand(args: string[]): Promise<void> {\n const name = args[0];\n if (!name) { console.error(renderError(\"Missing process name/pid\", \"Usage: fennec restart <name|pid>\")); process.exit(1); }\n\n const tracked = readTracked();\n let trackedEntry = tracked.find((t) => t.name === name);\n let targetPid: number;\n\n if (trackedEntry) {\n targetPid = trackedEntry.pid;\n } else {\n const pid = parseInt(name, 10);\n if (!isNaN(pid) && String(pid) === name) {\n targetPid = pid;\n } else {\n const processes = getSystemProcesses({ name, userOnly: true, limit: 1 });\n if (processes.length === 0) { console.error(renderError(\"Process not found\", `No process matching \"${name}\"`)); process.exit(1); }\n targetPid = processes[0]!.pid;\n }\n }\n\n const confirmed = await confirmPrompt(`Restart ${pc.bold(`${name} (PID ${targetPid})`)}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n const spinner = createSpinner(`Stopping PID ${targetPid}...`);\n const killed = sysKill(targetPid, \"SIGTERM\");\n if (!killed) { spinner.fail(`Failed to stop PID ${targetPid}`); return; }\n\n await new Promise((r) => setTimeout(r, 1000));\n if (isProcessRunning(targetPid)) {\n spinner.warn(\"Process didn't stop, sending SIGKILL...\");\n sysKill(targetPid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 500));\n }\n\n spinner.succeed(`${name} stopped`);\n\n if (trackedEntry) {\n const respawnSpinner = createSpinner(`Re-spawning ${trackedEntry.name}...`);\n try {\n const cmdParts = trackedEntry.command.split(\" \");\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${trackedEntry.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: trackedEntry.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n // Remove old PID entry, add new one (only after successful spawn)\n removeTrackedByPid(targetPid);\n addTracked({\n name: trackedEntry.name,\n pid: child.pid ?? 0,\n command: trackedEntry.command,\n port: trackedEntry.port,\n cwd: trackedEntry.cwd,\n startedAt: new Date().toISOString(),\n });\n\n respawnSpinner.succeed(`${trackedEntry.name} restarted (PID: ${child.pid})`);\n } catch (error) {\n respawnSpinner.fail(`Failed to re-spawn ${trackedEntry.name}: ${String(error)}`);\n console.error(` ${pc.dim(\"Config preserved. Re-run manually:\")} ${renderCommand(trackedEntry.command)}`);\n }\n } else {\n console.error(` ${pc.dim(\"No tracked config found. Re-run manually:\")} ${renderCommand(name)}`);\n }\n}\n","/**\n * Command: log — Show logs for a tracked/managed process.\n * Supports --clear to delete log file, --level to filter by level, and -f for follow mode.\n */\nimport { existsSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn, execSync } from \"node:child_process\";\nimport pc from \"picocolors\";\nimport { symbols, renderError, renderAppName, createSpinner, timestamp } from \"../utils/format.js\";\nimport { readTracked } from \"./tracker.js\";\n\n/** Known log-level prefixes to color/highlight */\nconst LEVEL_PATTERNS: { level: string; pattern: RegExp }[] = [\n { level: \"error\", pattern: /\\b(ERROR?|FATAL?|CRITICAL?|EXCEPTION)\\b/i },\n { level: \"warn\", pattern: /\\b(WARN(ING)?)\\b/i },\n { level: \"info\", pattern: /\\b(INFO)\\b/i },\n { level: \"debug\", pattern: /\\b(DEBUG)\\b/i },\n];\n\nexport async function logCommand(args: string[]): Promise<void> {\n const target = args[0];\n if (!target) { console.error(renderError(\"Missing process name/pid\", \"Usage: fennec log <name|pid> [--lines N] [-f] [--clear] [--level error|warn|info|debug]\")); process.exit(1); }\n\n const clearFlag = args.includes(\"--clear\");\n const linesIndex = args.indexOf(\"--lines\");\n const lineCount = linesIndex !== -1 ? parseInt(args[linesIndex + 1]!, 10) : 30;\n const followFlag = args.includes(\"-f\") || args.includes(\"--follow\");\n const levelFilter = args.includes(\"--level\") ? args[args.indexOf(\"--level\") + 1]?.toLowerCase() : undefined;\n\n // Validate level filter\n if (levelFilter && ![\"error\", \"warn\", \"info\", \"debug\"].includes(levelFilter)) {\n console.error(renderError(\"Invalid level\", `\"${levelFilter}\" is not a valid level. Use: error, warn, info, debug`));\n process.exit(1);\n }\n\n let logFilePath: string | null = null;\n let displayName = target;\n const tracked = readTracked();\n const trackedMatch = tracked.find((t) => t.name === target || (parseInt(target, 10) === t.pid && !isNaN(parseInt(target, 10))));\n\n if (trackedMatch) {\n displayName = trackedMatch.name;\n logFilePath = resolve(homedir(), \".fennec\", \"logs\", `${trackedMatch.name}.log`);\n } else {\n const pid = parseInt(target, 10);\n if (!isNaN(pid) && String(pid) === target) {\n const procPath = `/proc/${pid}/fd/1`;\n if (existsSync(procPath)) logFilePath = procPath;\n }\n }\n\n // --clear flag: delete the log file\n if (clearFlag) {\n if (!logFilePath || !existsSync(logFilePath)) {\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.dim(\"No log file found for\")} ${pc.bold(displayName)}\\n`);\n process.exit(0);\n }\n try {\n unlinkSync(logFilePath);\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(\"Log cleared\")} ${pc.dim(`— ${logFilePath}`)}\\n`);\n } catch (err) {\n console.error(renderError(\"Failed to clear log\", String(err)));\n process.exit(1);\n }\n return;\n }\n\n const spinner = createSpinner(`Reading logs for ${displayName}...`);\n try {\n let logLines: string[] = [];\n if (logFilePath && existsSync(logFilePath)) {\n const content = readFileSync(logFilePath, \"utf-8\");\n logLines = content.split(\"\\n\").filter(Boolean);\n } else {\n const pid = trackedMatch?.pid ?? parseInt(target, 10);\n if (!isNaN(pid)) {\n try {\n const output = execSync(`journalctl --no-pager -n ${lineCount} _PID=${pid} 2>/dev/null || echo \"\"`, { encoding: \"utf-8\", timeout: 3000 });\n logLines = output.trim().split(\"\\n\").filter(Boolean);\n } catch { logLines = [\"(no logs available)\"]; }\n } else { logLines = [\"(no logs available)\"]; }\n }\n\n // Apply level filter\n if (levelFilter) {\n const levelRegex = new RegExp(`\\\\b(${levelFilter.toUpperCase()})\\\\b`, \"i\");\n logLines = logLines.filter((line) => levelRegex.test(line));\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Logs\")} ${renderAppName(displayName)} ${pc.dim(`(last ${logLines.length} line${logLines.length !== 1 ? \"s\" : \"\"})`)}`);\n\n const sliced = logLines.slice(-lineCount);\n for (const line of sliced) {\n const display = line.length > 300 ? line.slice(0, 300) + \"…\" : line;\n\n // Add timestamp prefix in follow mode\n const prefix = followFlag ? `${timestamp()} ` : \"\";\n\n // Color by level\n if (line.toLowerCase().includes(\"error\") || line.toLowerCase().includes(\"fail\") || line.toLowerCase().includes(\"fatal\")) {\n console.error(` ${pc.red(prefix + display)}`);\n } else if (line.toLowerCase().includes(\"warn\")) {\n console.error(` ${pc.yellow(prefix + display)}`);\n } else if (line.toLowerCase().includes(\"info\") || line.includes(\"[\")) {\n console.error(` ${pc.cyan(prefix + display)}`);\n } else {\n console.error(` ${prefix}${display}`);\n }\n }\n\n if (followFlag && logFilePath) {\n // Build tail args: show timestamps with --time-style\n const tailArgs = [\"-n\", \"0\", \"-f\"];\n if (levelFilter) {\n // For follow mode with level filter, we pipe through grep\n const tail = spawn(\"tail\", [\"-n\", \"0\", \"-f\", logFilePath], { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n const grep = spawn(\"grep\", [\"--line-buffered\", \"-i\", levelFilter], { stdio: [\"pipe\", \"inherit\", \"inherit\"] });\n if (tail.stdout) tail.stdout.pipe(grep.stdin);\n\n await new Promise<void>((resolve) => {\n tail.on(\"exit\", () => resolve());\n process.once(\"SIGINT\", () => {\n tail.kill(\"SIGTERM\");\n grep.kill(\"SIGTERM\");\n resolve();\n });\n });\n } else {\n console.error(`\\n ${pc.dim(\"Following... (Ctrl+C to stop)\")}\\n`);\n const tail = spawn(\"tail\", tailArgs.concat([logFilePath]), { stdio: \"inherit\" });\n // Use SIGINT resolve pattern\n await new Promise<void>((resolve) => {\n tail.on(\"exit\", () => resolve());\n process.once(\"SIGINT\", () => {\n tail.kill(\"SIGTERM\");\n resolve();\n });\n });\n }\n }\n console.error();\n } catch (error) {\n spinner.fail(`Failed to read logs for ${displayName}`);\n console.error(renderError(\"Log read failed\", String(error)));\n }\n}\n","/**\n * Command: attach — Attach to a process by port.\n */\nimport { PortDetector } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { renderError, renderKV, renderAppName, createSpinner } from \"../utils/format.js\";\n\nexport async function attachCommand(args: string[]): Promise<void> {\n const port = parseInt(args[0]!, 10);\n if (isNaN(port)) { console.error(renderError(\"Invalid port\", \"Usage: fennec attach <port> --name <name>\")); process.exit(1); }\n\n const nameIndex = args.indexOf(\"--name\");\n const rawName = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const name = rawName ?? `port-${port}`;\n\n const spinner = createSpinner(`Attaching to :${port}...`);\n try {\n const detector = new PortDetector();\n const info = detector.detectByPort(port);\n if (info) {\n spinner.succeed(`Attached to :${port}`);\n console.error(` ${renderKV(\"Name\", renderAppName(name))}`);\n console.error(` ${renderKV(\"PID\", String(info.pid))}`);\n console.error(` ${renderKV(\"Command\", info.command || pc.dim(\"unknown\"))}`);\n } else {\n spinner.fail(`No process found on port ${port}`);\n process.exit(1);\n }\n } catch (error) {\n spinner.fail(`Failed to attach to :${port}`);\n console.error(renderError(\"Error\", String(error)));\n process.exit(1);\n }\n}\n","/**\n * Command: sessions — List saved auth sessions.\n */\nimport { SessionStore } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { symbols, renderTable, type Column, type Row } from \"../utils/format.js\";\n\nexport async function sessionsCommand(): Promise<void> {\n const store = new SessionStore(\"./.fennec/sessions\");\n const sessions = store.list();\n if (sessions.length === 0) { console.error(`\\n ${pc.dim(\"No saved sessions found.\")}\\n`); return; }\n\n const columns: Column[] = [\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"origin\", label: \"Origin\" },\n { key: \"savedAt\", label: \"Saved\", format: (v) => pc.dim(String(v)) },\n ];\n const rows: Row[] = sessions.map((s) => ({ name: s.name, origin: s.origin, savedAt: new Date(s.savedAt).toLocaleString() }));\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Saved Sessions\")}\\n`);\n console.error(renderTable(columns, rows));\n console.error(` ${pc.dim(`${sessions.length} session(s)`)}\\n`);\n}\n","/**\n * Command: setup — Interactive MCP client setup.\n */\nimport pc from \"picocolors\";\nimport { symbols, renderSuccess, renderCommand, selectPrompt } from \"../utils/format.js\";\n\nexport async function setupCommand(): Promise<void> {\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Setup\")}\\n`);\n\n const mcpClient = await selectPrompt(\"Which MCP client are you using?\", [\n { value: \"claude\", label: \"Claude Desktop\", description: \"Anthropic's AI desktop app\" },\n { value: \"cursor\", label: \"Cursor\", description: \"AI-powered code editor\" },\n { value: \"cline\", label: \"Cline\", description: \"VS Code MCP client\" },\n { value: \"other\", label: \"Other MCP client\", description: \"Any MCP-compatible client\" },\n ]);\n\n if (!mcpClient) { console.error(` ${pc.dim(\"Setup cancelled.\")}\\n`); return; }\n\n console.error(`\\n ${pc.green(\"✓\")} Selected: ${pc.bold(mcpClient)}\\n`);\n\n const configSnippet = `{\\n \"mcpServers\": {\\n \"fennec\": {\\n \"command\": \"fennec\",\\n \"args\": [\"start\"]\\n }\\n }\\n}`;\n\n console.error(` ${pc.bold(\"Add this to your MCP client config:\")}\\n`);\n console.error(` ${pc.dim(\"```\")}`);\n console.error(configSnippet.split(\"\\n\").map((l) => ` ${l}`).join(\"\\n\"));\n console.error(` ${pc.dim(\"```\")}\\n`);\n console.error(` ${renderSuccess(\"Setup complete!\")} ${pc.dim(\"Run\")} ${renderCommand(\"fennec start\")} ${pc.dim(\"to begin.\")}\\n`);\n}\n","/**\n * Command: init, install-browsers — Project setup utilities.\n */\nimport { existsSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport pc from \"picocolors\";\nimport { renderCommand, renderError, renderSuccess, createSpinner, confirmPrompt } from \"../utils/format.js\";\n\nexport async function installBrowsersCommand(): Promise<void> {\n console.error(`\\n ${pc.bold(\"Installing Browser Engines\")}\\n`);\n const spinner = createSpinner(\"Installing Chromium...\");\n try {\n execSync(\"npx playwright install chromium\", { stdio: \"pipe\", timeout: 120000 });\n spinner.succeed(\"Chromium installed successfully\");\n } catch {\n spinner.fail(\"Failed to install Chromium\");\n console.error(` ${pc.yellow(\"→\")} Try running: ${renderCommand(\"npx playwright install chromium\")}`);\n }\n console.error(`\\n ${pc.green(\"✓\")} Browser installation complete.\\n`);\n}\n\nexport async function initCommand(): Promise<void> {\n console.error(`\\n ${pc.bold(\"Initialize Fennec Configuration\")}\\n`);\n\n const configFile = resolve(\"./fennec.config.yaml\");\n if (existsSync(configFile)) {\n const overwrite = await confirmPrompt(`${pc.yellow(\"fennec.config.yaml\")} already exists. Overwrite?`, false);\n if (!overwrite) { console.error(` ${pc.dim(\"Cancelled.\")}\\n`); return; }\n }\n\n const spinner = createSpinner(\"Generating configuration...\");\n\n const config = `# Fennec Configuration\n# Generated by 'fennec init'\n\nbrowser:\n type: chromium\n headless: true\n defaultTimeout: 30000\n viewport:\n width: 1280\n height: 720\n\nsession:\n maxSessions: 10\n idleTimeoutSecs: 1800\n persistPath: \".fennec/sessions\"\n\nprocess:\n maxProcesses: 10\n logBufferLines: 2000\n spawnAllowlist:\n - \"npm\"\n - \"node\"\n - \"pnpm\"\n - \"yarn\"\n - \"bun\"\n - \"python\"\n - \"python3\"\n\nterminal:\n logBufferLines: 2000\n watchDebounceMs: 50\n\nnetwork:\n bufferSize: 1000\n captureRequestBody: true\n captureResponseBody: true\n slowRequestThresholdMs: 1000\n\nconsole:\n bufferSize: 500\n levels:\n - log\n - info\n - warn\n - error\n - debug\n\ncorrelation:\n windowMs: 500\n enableRootCauseInference: true\n minConfidence: 0.7\n\nsecurity:\n sandbox: true\n allowProcessSpawn: true\n allowProcessKill: false\n allowedDomains: []\n blockedDomains: []\n allowFileProtocol: false\n allowCDPRawAccess: false\n exportPath: \".fennec/exports\"\n maxExportSizeMB: 10\n\ntransport:\n type: stdio\n port: 3333\n host: \"127.0.0.1\"\n\nlogging:\n level: info\n format: pretty\n file: null\n`;\n\n writeFileSync(configFile, config, \"utf-8\");\n spinner.succeed(`Configuration written to ${pc.bold(configFile)}`);\n console.error(`\\n ${pc.dim(\"Edit the file to customize Fennec behavior.\")}\\n`);\n}\n","/**\n * Command: health — Check Fennec system health\n * Returns system status, tracked processes, and resource info.\n */\nimport { existsSync, readdirSync, statSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderKV, renderError } from \"../utils/format.js\";\nimport { readTracked } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function healthCommand(): Promise<void> {\n printBanner();\n console.error(` ${pc.bold(\"Fennec Health Check\")}\\n`);\n\n // 1. ADB availability (if needed)\n let adbStatus = \"unknown\";\n try {\n const result = execSync(\"adb --version\", {\n encoding: \"utf-8\",\n timeout: 3000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const version = result.split(\"\\n\")[0]?.trim() ?? \"installed\";\n adbStatus = pc.green(version);\n } catch {\n adbStatus = pc.dim(\"not found\") + \" (optional)\";\n }\n\n // 2. Tracked processes\n const tracked = readTracked();\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n\n // 3. Disk usage for logs\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n let logSize = \"0 B\";\n try {\n if (existsSync(logDir)) {\n const files = readdirSync(logDir);\n let totalBytes = 0;\n for (const f of files) {\n const fStat = statSync(resolve(logDir, f));\n totalBytes += fStat.size;\n }\n logSize = totalBytes > 1024 * 1024\n ? `${(totalBytes / (1024 * 1024)).toFixed(1)} MB`\n : `${(totalBytes / 1024).toFixed(1)} KB`;\n }\n } catch { /* best-effort */ }\n\n // 4. Memory info\n let memoryInfo = \"unknown\";\n try {\n const mem = process.memoryUsage();\n memoryInfo = `${(mem.rss / (1024 * 1024)).toFixed(0)} MB RSS / ${(mem.heapUsed / (1024 * 1024)).toFixed(0)} MB heap`;\n } catch { /* best-effort */ }\n\n console.error(` ${symbols.fox} ${pc.bold(\"System\")}\\n`);\n console.error(` ${renderKV(\"Node.js\", process.version)}`);\n console.error(` ${renderKV(\"Platform\", `${process.platform} ${process.arch}`)}`);\n console.error(` ${renderKV(\"Memory\", memoryInfo)}`);\n console.error(` ${renderKV(\"ADB\", adbStatus)}`);\n console.error(` ${renderKV(\"PID\", String(process.pid))}`);\n console.error();\n console.error(` ${symbols.fox} ${pc.bold(\"Processes\")}\\n`);\n console.error(` ${renderKV(\"Tracked\", String(tracked.length))}`);\n console.error(` ${renderKV(\"Running\", String(runningCount))}`);\n console.error(` ${renderKV(\"Logs\", logSize)}`);\n console.error();\n\n const allHealthy = runningCount === tracked.length || tracked.length === 0;\n if (allHealthy) {\n console.error(` ${pc.green(\"✓\")} ${pc.bold(\"All systems healthy\")}\\n`);\n } else {\n const stopped = tracked.length - runningCount;\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(`${stopped} process(es) stopped`)} ${pc.dim(\"fennec ps\")}\\n`);\n }\n}\n","/**\n * Command: cleanup — Remove dead tracked entries that have no saved command\n * and cannot be re-spawned.\n */\nimport pc from \"picocolors\";\nimport { renderError, confirmPrompt } from \"../utils/format.js\";\nimport { readTracked, saveTracked } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function cleanupCommand(): Promise<void> {\n const tracked = readTracked();\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes to clean up.\")}\\n`);\n return;\n }\n\n const toRemove = tracked.filter((t) => !isProcessRunning(t.pid) && !t.command);\n if (toRemove.length === 0) {\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(\"All clean\")} ${pc.dim(\"— no dead entries without saved commands.\")}\\n`);\n return;\n }\n\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.bold(`Found ${toRemove.length} dead entr${toRemove.length > 1 ? \"ies\" : \"y\"} without saved commands`)}\\n`);\n for (const entry of toRemove) {\n console.error(` ${pc.dim(\"·\")} ${pc.bold(entry.name)} ${pc.dim(`(PID ${entry.pid})`)}`);\n }\n console.error();\n\n const confirmed = await confirmPrompt(`Remove ${toRemove.length} entr${toRemove.length > 1 ? \"ies\" : \"y\"}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}\\n`); return; }\n\n const remaining = tracked.filter((t) => !toRemove.includes(t));\n saveTracked(remaining);\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(`Removed ${toRemove.length} entr${toRemove.length > 1 ? \"ies\" : \"y\"}`)} ${pc.dim(`(${remaining.length} remaining)`)}\\n`);\n}\n","/**\n * Command: info — Show detailed info about a tracked process.\n */\nimport pc from \"picocolors\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { renderError, renderKVColor, symbols } from \"../utils/format.js\";\nimport { readTracked, formatUptime } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function infoCommand(args: string[]): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error(renderError(\"Missing name\", \"Usage: fennec info <name>\"));\n process.exit(1);\n }\n\n const tracked = readTracked();\n const match = tracked.find((t) => t.name === name);\n\n if (!match) {\n console.error(renderError(\"Not found\", `No tracked process named \"${name}\".`));\n process.exit(1);\n }\n\n const running = isProcessRunning(match.pid);\n const statusIcon = running ? pc.green(\"●\") : pc.red(\"○\");\n const statusText = running ? pc.green(\"running\") : pc.red(\"stopped\");\n const uptime = running\n ? formatUptime(Math.floor((Date.now() - new Date(match.startedAt).getTime()) / 1000))\n : \"-\";\n const logPath = resolve(homedir(), \".fennec\", \"logs\", `${match.name}.log`);\n\n console.error(`\\n ${symbols.fox} ${pc.bold(match.name)} ${pc.dim(\"— Process Info\")}\\n`);\n console.error(` ${renderKVColor(\"Name\", match.name, pc.bold)}`);\n console.error(` ${renderKVColor(\"Status\", `${statusIcon} ${statusText}`)}`);\n console.error(` ${renderKVColor(\"PID\", String(match.pid))}`);\n console.error(` ${renderKVColor(\"Port\", match.port ? String(match.port) : \"-\")}`);\n console.error(` ${renderKVColor(\"Command\", match.command || pc.dim(\"(none)\"))}`);\n if (match.cwd) console.error(` ${renderKVColor(\"CWD\", match.cwd)}`);\n console.error(` ${renderKVColor(\"Started\", new Date(match.startedAt).toLocaleString())}`);\n console.error(` ${renderKVColor(\"Uptime\", uptime)}`);\n console.error(` ${renderKVColor(\"Log Path\", logPath)}`);\n\n if (!running && match.command) {\n console.error(`\\n ${pc.dim(\"Re-spawn with:\")} ${pc.cyan(`fennec spawn ${match.name}`)}`);\n }\n console.error();\n}\n","/**\n * Command: rename — Rename a tracked process and its log file.\n */\nimport pc from \"picocolors\";\nimport { existsSync, renameSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { renderError, renderKVColor, createSpinner, confirmPrompt, symbols } from \"../utils/format.js\";\nimport { readTracked, saveTracked } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function renameCommand(args: string[]): Promise<void> {\n const [oldName, newName] = args;\n\n if (!oldName || !newName) {\n console.error(renderError(\"Missing arguments\", \"Usage: fennec rename <old-name> <new-name>\"));\n process.exit(1);\n }\n\n if (oldName === newName) {\n console.error(`\\n ${pc.yellow(\"⚠\")} ${pc.dim(\"Old and new names are the same.\")}\\n`);\n process.exit(0);\n }\n\n const tracked = readTracked();\n const match = tracked.find((t) => t.name === oldName);\n\n if (!match) {\n console.error(renderError(\"Not found\", `No tracked process named \"${oldName}\".`));\n process.exit(1);\n }\n\n if (tracked.some((t) => t.name === newName)) {\n console.error(renderError(\"Name taken\", `A process named \"${newName}\" already exists.`));\n process.exit(1);\n }\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Rename Process\")}\\n`);\n console.error(` ${renderKVColor(\"From\", oldName)}`);\n console.error(` ${renderKVColor(\"To\", newName)}`);\n if (isProcessRunning(match.pid)) {\n console.error(` ${pc.yellow(\"⚠\")} ${pc.dim(\"Process is still running — log entries will go to the old file until stopped.\")}`);\n }\n console.error();\n\n const confirmed = await confirmPrompt(`Rename ${pc.bold(oldName)} ${pc.dim(\"→\")} ${pc.bold(newName)}?`, true);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}\\n`); return; }\n\n const spinner = createSpinner(`Renaming ${oldName} → ${newName}...`);\n\n // Rename log file if it exists\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n const oldLog = resolve(logDir, `${oldName}.log`);\n const newLog = resolve(logDir, `${newName}.log`);\n\n if (existsSync(oldLog) && !existsSync(newLog)) {\n try {\n renameSync(oldLog, newLog);\n } catch { /* best-effort */ }\n }\n\n // Update tracked.json\n match.name = newName;\n saveTracked(tracked);\n\n spinner.succeed(`${pc.bold(oldName)} ${pc.dim(\"→\")} ${pc.bold(newName)}`);\n console.error();\n}\n","/**\n * Commands: export, import — Backup and restore tracked.json configuration.\n */\nimport pc from \"picocolors\";\nimport { existsSync, writeFileSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { renderError, confirmPrompt, symbols, renderKVColor } from \"../utils/format.js\";\nimport { readTracked, saveTracked } from \"./tracker.js\";\n\n/**\n * fennec export [--file path]\n * Export tracked.json to stdout or a file.\n */\nexport async function exportCommand(args: string[]): Promise<void> {\n const tracked = readTracked();\n const fileIndex = args.indexOf(\"--file\");\n const filePath = fileIndex !== -1 ? args[fileIndex + 1] : undefined;\n\n if (fileIndex !== -1 && !filePath) {\n console.error(renderError(\"Missing file path\", \"Usage: fennec export --file <path>\"));\n process.exit(1);\n }\n\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes to export.\")}\\n`);\n return;\n }\n\n const json = JSON.stringify(tracked, null, 2);\n\n if (filePath) {\n try {\n writeFileSync(resolve(filePath), json, \"utf-8\");\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(`Exported ${tracked.length} process(es)`)} ${pc.dim(`→ ${filePath}`)}\\n`);\n } catch (err) {\n console.error(renderError(\"Export failed\", String(err)));\n process.exit(1);\n }\n } else {\n // Write to stdout as JSON\n console.log(json);\n }\n}\n\n/**\n * fennec import <file>\n * Import processes from a JSON file and merge into tracked.json.\n */\nexport async function importCommand(args: string[]): Promise<void> {\n const filePath = args[0];\n\n if (!filePath) {\n console.error(renderError(\"Missing file\", \"Usage: fennec import <file>\"));\n process.exit(1);\n }\n\n const resolvedPath = resolve(filePath);\n if (!existsSync(resolvedPath)) {\n console.error(renderError(\"File not found\", `\"${filePath}\" does not exist.`));\n process.exit(1);\n }\n\n let imported: { name: string; pid: number; command: string; port?: number; cwd?: string; startedAt: string }[];\n try {\n imported = JSON.parse(readFileSync(resolvedPath, \"utf-8\"));\n if (!Array.isArray(imported) || imported.length === 0) {\n console.error(renderError(\"Invalid file\", \"File must contain a non-empty JSON array of process objects.\"));\n process.exit(1);\n }\n } catch (err) {\n console.error(renderError(\"Invalid JSON\", String(err)));\n process.exit(1);\n }\n\n const existing = readTracked();\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Import Processes\")}\\n`);\n console.error(` ${renderKVColor(\"File\", resolvedPath)}`);\n console.error(` ${renderKVColor(\"Importing\", `${imported.length} process(es)`)}`);\n console.error(` ${renderKVColor(\"Existing\", `${existing.length} process(es)`)}`);\n\n // Show what will be imported\n console.error(`\\n ${pc.bold(\"Processes to import:\")}`);\n for (const p of imported) {\n console.error(` ${pc.green(\"+\")} ${pc.bold(p.name)} ${pc.dim(`(${p.command})`)}`);\n }\n console.error();\n\n const confirmed = await confirmPrompt(\"Merge into tracked.json? Existing processes with the same name will be overwritten.\", true);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}\\n`); return; }\n\n // Merge: overwrite existing by name, add new\n const merged = [...existing];\n for (const proc of imported) {\n const idx = merged.findIndex((t) => t.name === proc.name);\n if (idx !== -1) {\n merged[idx] = { ...merged[idx], ...proc };\n } else {\n merged.push(proc as any);\n }\n }\n\n saveTracked(merged);\n console.error(` ${pc.green(\"✓\")} ${pc.bold(`Imported ${imported.length} process(es)`)} ${pc.dim(`(${merged.length} total)`)}\\n`);\n}\n","#!/usr/bin/env node\n\nimport { renderError } from \"./utils/format.js\";\nimport { printBanner } from \"./utils/banner.js\";\nimport { showHelp } from \"./utils/help.js\";\nimport { pipeCommand } from \"./commands/pipe.js\";\nimport { attachPidCommand } from \"./commands/attach-pid.js\";\nimport { attachPortCommand } from \"./commands/attach-port.js\";\nimport { watchCommand } from \"./commands/watch.js\";\nimport { startServer, startCommand, runCommand } from \"./commands/start.js\";\nimport { psCommand, statusCommand } from \"./commands/ps.js\";\nimport { killCommand } from \"./commands/kill.js\";\nimport { stopCommand } from \"./commands/stop.js\";\nimport { spawnCommand } from \"./commands/spawn.js\";\nimport { restartCommand } from \"./commands/restart.js\";\nimport { logCommand } from \"./commands/log.js\";\nimport { attachCommand } from \"./commands/attach.js\";\nimport { sessionsCommand } from \"./commands/sessions.js\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { installBrowsersCommand, initCommand } from \"./commands/management.js\";\nimport { healthCommand } from \"./commands/health.js\";\nimport { cleanupCommand } from \"./commands/cleanup.js\";\nimport { infoCommand } from \"./commands/info.js\";\nimport { renameCommand } from \"./commands/rename.js\";\nimport { exportCommand, importCommand } from \"./commands/export-import.js\";\n\nconst [, , command, ...args] = process.argv;\n\nasync function main(): Promise<void> {\n if (!command || command === \"start\") {\n if (args.length === 0 || args[0]?.startsWith(\"--\")) {\n await startServer(args);\n } else {\n await startCommand(args);\n }\n } else if (command === \"run\") {\n await runCommand(args);\n } else if (command === \"ps\") {\n printBanner();\n await psCommand(args);\n } else if (command === \"status\") {\n printBanner();\n await statusCommand(args);\n } else if (command === \"log\") {\n await logCommand(args);\n } else if (command === \"spawn\") {\n await spawnCommand(args);\n } else if (command === \"stop\") {\n await stopCommand(args);\n } else if (command === \"kill\") {\n await killCommand(args);\n } else if (command === \"restart\") {\n await restartCommand(args);\n } else if (command === \"info\") {\n printBanner();\n await infoCommand(args);\n } else if (command === \"cleanup\") {\n printBanner();\n await cleanupCommand();\n } else if (command === \"rename\") {\n await renameCommand(args);\n } else if (command === \"export\") {\n await exportCommand(args);\n } else if (command === \"import\") {\n await importCommand(args);\n } else if (command === \"attach\") {\n await attachCommand(args);\n } else if (command === \"pipe\") {\n await pipeCommand(args);\n } else if (command === \"attach-pid\") {\n await attachPidCommand(args);\n } else if (command === \"attach-port\") {\n await attachPortCommand(args);\n } else if (command === \"watch\") {\n await watchCommand(args);\n } else if (command === \"sessions\") {\n await sessionsCommand();\n } else if (command === \"setup\") {\n await setupCommand();\n } else if (command === \"install-browsers\") {\n printBanner();\n await installBrowsersCommand();\n } else if (command === \"health\" || command === \"--health\") {\n await healthCommand();\n } else if (command === \"init\") {\n printBanner();\n await initCommand();\n } else if (command === \"version\" || command === \"--version\" || command === \"-v\") {\n printBanner();\n } else if (command === \"help\" || command === \"--help\" || command === \"-h\") {\n printBanner();\n showHelp();\n } else {\n console.error(renderError(`Unknown command: ${command}`, \"Run 'fennec help' for usage information\"));\n process.exit(1);\n }\n}\n\nmain().catch((error) => {\n console.error(renderError(\"Fatal error\", String(error)));\n process.exit(1);\n});\n"],"mappings":"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","names":["pad","text","options","colors","colors","colors","colors","colors","stylize","builder","args","style","sequencer","map","colors","colors","args","CliTable3","num","resolve","pc","fennecOrange","pc","fennecOrange","pc","args","args","PortDetector","args","args","mkdirSync","resolve","homedir","pc","existsSync","resolve","readFileSync","existsSync","command","pc","args","pc","columns","rows","resolve","args","pc","resolve","homedir","mkdirSync","setupRestartWatch","pc","args","pc","pc","args","pc","pc","createWriteStream","mkdirSync","resolve","homedir","spawn","args","pc","resolve","homedir","mkdirSync","spawn","createWriteStream","pc","mkdirSync","createWriteStream","resolve","homedir","spawn","args","pc","resolve","homedir","mkdirSync","spawn","createWriteStream","existsSync","readFileSync","resolve","homedir","spawn","execSync","pc","args","resolve","homedir","existsSync","pc","readFileSync","execSync","spawn","PortDetector","pc","args","PortDetector","pc","pc","pc","pc","pc","existsSync","writeFileSync","resolve","execSync","pc","pc","execSync","resolve","existsSync","writeFileSync","existsSync","readdirSync","statSync","execSync","resolve","homedir","pc","pc","execSync","resolve","homedir","existsSync","readdirSync","statSync","pc","pc","pc","resolve","homedir","args","pc","resolve","homedir","pc","existsSync","renameSync","resolve","homedir","args","pc","resolve","homedir","existsSync","renameSync","pc","existsSync","writeFileSync","readFileSync","resolve","args","pc","writeFileSync","resolve","existsSync","readFileSync"]}
|