@mcp-use/cli 2.6.1 → 2.7.0-canary.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../src/index.ts","../../../node_modules/.pnpm/open@11.0.0/node_modules/open/index.js","../../../node_modules/.pnpm/wsl-utils@0.3.0/node_modules/wsl-utils/index.js","../../../node_modules/.pnpm/is-wsl@3.1.0/node_modules/is-wsl/index.js","../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/index.js","../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/index.js","../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/windows.js","../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/index.js","../src/commands/auth.ts","../src/utils/config.ts","../src/utils/api.ts","../src/commands/deploy.ts","../src/utils/git.ts","../src/commands/client.ts","../src/utils/session-storage.ts","../src/utils/format.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","#!/usr/bin/env node\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport \"dotenv/config\";\nimport { spawn } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport open from \"open\";\nimport { loginCommand, logoutCommand, whoamiCommand } from \"./commands/auth.js\";\nimport { deployCommand } from \"./commands/deploy.js\";\nimport { createClientCommand } from \"./commands/client.js\";\nimport { toJSONSchema } from \"zod\";\n\nconst program = new Command();\n\nconst packageContent = readFileSync(\n path.join(__dirname, \"../package.json\"),\n \"utf-8\"\n);\nconst packageJson = JSON.parse(packageContent);\nconst packageVersion = packageJson.version || \"unknown\";\n\nprogram\n .name(\"mcp-use\")\n .description(\"Create and run MCP servers with ui resources widgets\")\n .version(packageVersion);\n\n// Helper to check if port is available\nasync function isPortAvailable(\n port: number,\n host: string = \"localhost\"\n): Promise<boolean> {\n try {\n await fetch(`http://${host}:${port}`);\n return false; // Port is in use\n } catch {\n return true; // Port is available\n }\n}\n\n// Helper to find an available port\nasync function findAvailablePort(\n startPort: number,\n host: string = \"localhost\"\n): Promise<number> {\n for (let port = startPort; port < startPort + 100; port++) {\n if (await isPortAvailable(port, host)) {\n return port;\n }\n }\n throw new Error(\"No available ports found\");\n}\n\n// Helper to check if server is ready\nasync function waitForServer(\n port: number,\n host: string = \"localhost\",\n maxAttempts = 30\n): Promise<boolean> {\n for (let i = 0; i < maxAttempts; i++) {\n const controller = new AbortController();\n try {\n // Use /inspector/health endpoint for cleaner health checks\n // This avoids 400 errors from the MCP endpoint which requires session headers\n const response = await fetch(`http://${host}:${port}/inspector/health`, {\n signal: controller.signal,\n });\n\n if (response.ok) {\n return true;\n }\n } catch {\n // Server not ready yet\n } finally {\n controller.abort();\n }\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n return false;\n}\n\n// Helper to run a command\nfunction runCommand(\n command: string,\n args: string[],\n cwd: string,\n env?: NodeJS.ProcessEnv,\n filterStderr: boolean = false\n): { promise: Promise<void>; process: any } {\n const proc = spawn(command, args, {\n cwd,\n stdio: filterStderr ? ([\"inherit\", \"inherit\", \"pipe\"] as const) : \"inherit\",\n shell: false,\n env: env ? { ...process.env, ...env } : process.env,\n });\n\n // Filter stderr to suppress tsx's \"Force killing\" messages\n if (filterStderr && proc.stderr) {\n proc.stderr.on(\"data\", (data: Buffer) => {\n const text = data.toString();\n // Filter out tsx's force killing message\n if (\n !text.includes(\"Previous process hasn't exited yet\") &&\n !text.includes(\"Force killing\")\n ) {\n process.stderr.write(data);\n }\n });\n }\n\n const promise = new Promise<void>((resolve, reject) => {\n proc.on(\"error\", reject);\n proc.on(\"exit\", (code: number | null) => {\n if (code === 0 || code === 130 || code === 143) {\n // Exit codes: 0 = normal, 130 = SIGINT/SIGTERM, 143 = SIGTERM (alternative)\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n });\n\n return { promise, process: proc };\n}\n\n// Helper to start tunnel and get the URL\nasync function startTunnel(\n port: number,\n subdomain?: string\n): Promise<{ url: string; subdomain: string; process: any }> {\n return new Promise((resolve, reject) => {\n console.log(chalk.gray(`Starting tunnel for port ${port}...`));\n\n const tunnelArgs = [\"--yes\", \"@mcp-use/tunnel\", String(port)];\n\n // Pass subdomain as CLI flag if provided\n if (subdomain) {\n tunnelArgs.push(\"--subdomain\", subdomain);\n }\n\n const proc = spawn(\"npx\", tunnelArgs, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n shell: false,\n });\n\n let resolved = false;\n let isShuttingDown = false;\n\n proc.stdout?.on(\"data\", (data) => {\n const text = data.toString();\n // Filter out shutdown messages from tunnel package\n const isShutdownMessage =\n text.includes(\"Shutting down\") || text.includes(\"🛑\");\n\n // Suppress tunnel output during shutdown or if it's a shutdown message\n if (!isShuttingDown && !isShutdownMessage) {\n process.stdout.write(text);\n }\n\n // Look for the tunnel URL in the output\n // Expected format: https://subdomain.tunnel-domain.com\n const urlMatch = text.match(/https?:\\/\\/([a-z0-9-]+\\.[a-z0-9.-]+)/i);\n if (urlMatch && !resolved) {\n const url = urlMatch[0];\n // Extract subdomain from URL (e.g., \"happy-cat.local.mcp-use.run\" -> \"happy-cat\")\n const fullDomain = urlMatch[1];\n // Try to extract the subdomain using a case-insensitive regex.\n // If the regex fails, fallback to splitting by '.' and taking the first label.\n // Validate that the extracted subdomain matches the expected format (letters, numbers, hyphens).\n const subdomainMatch = fullDomain.match(/^([a-z0-9-]+)\\./i);\n let extractedSubdomain = subdomainMatch\n ? subdomainMatch[1]\n : fullDomain.split(\".\")[0];\n if (!/^[a-z0-9-]+$/i.test(extractedSubdomain)) {\n console.warn(\n chalk.yellow(\n `Warning: Extracted subdomain \"${extractedSubdomain}\" does not match expected format.`\n )\n );\n extractedSubdomain = \"\";\n }\n resolved = true;\n clearTimeout(setupTimeout);\n console.log(chalk.green.bold(`✓ Tunnel established: ${url}/mcp`));\n resolve({ url, subdomain: extractedSubdomain, process: proc });\n }\n });\n\n proc.stderr?.on(\"data\", (data) => {\n const text = data.toString();\n // Filter out bore debug logs and shutdown messages\n if (\n !isShuttingDown &&\n !text.includes(\"INFO\") &&\n !text.includes(\"bore_cli\") &&\n !text.includes(\"Shutting down\")\n ) {\n process.stderr.write(data);\n }\n });\n\n proc.on(\"error\", (error) => {\n if (!resolved) {\n clearTimeout(setupTimeout);\n reject(new Error(`Failed to start tunnel: ${error.message}`));\n }\n });\n\n proc.on(\"exit\", (code) => {\n if (code !== 0 && !resolved) {\n clearTimeout(setupTimeout);\n reject(new Error(`Tunnel process exited with code ${code}`));\n }\n });\n\n // Add method to mark shutdown state\n (proc as any).markShutdown = () => {\n isShuttingDown = true;\n };\n\n // Timeout after 30 seconds - only for initial setup\n const setupTimeout = setTimeout(() => {\n if (!resolved) {\n proc.kill();\n reject(new Error(\"Tunnel setup timed out\"));\n }\n }, 30000);\n });\n}\n\nasync function findServerFile(projectPath: string): Promise<string> {\n const candidates = [\"index.ts\", \"src/index.ts\", \"server.ts\", \"src/server.ts\"];\n for (const candidate of candidates) {\n try {\n await access(path.join(projectPath, candidate));\n return candidate;\n } catch {\n continue;\n }\n }\n throw new Error(\"No server file found\");\n}\n\nasync function buildWidgets(\n projectPath: string\n): Promise<Array<{ name: string; metadata: any }>> {\n const { promises: fs } = await import(\"node:fs\");\n const { build } = await import(\"vite\");\n const resourcesDir = path.join(projectPath, \"resources\");\n\n // Get base URL from environment or use default\n const mcpUrl = process.env.MCP_URL;\n\n // Check if resources directory exists\n try {\n await access(resourcesDir);\n } catch {\n console.log(\n chalk.gray(\"No resources/ directory found - skipping widget build\")\n );\n return [];\n }\n\n // Find all TSX widget files and folders with widget.tsx\n const entries: Array<{ name: string; path: string }> = [];\n try {\n const files = await fs.readdir(resourcesDir, { withFileTypes: true });\n for (const dirent of files) {\n // Exclude macOS resource fork files and other hidden/system files\n if (dirent.name.startsWith(\"._\") || dirent.name.startsWith(\".DS_Store\")) {\n continue;\n }\n\n if (\n dirent.isFile() &&\n (dirent.name.endsWith(\".tsx\") || dirent.name.endsWith(\".ts\"))\n ) {\n // Single file widget\n entries.push({\n name: dirent.name.replace(/\\.tsx?$/, \"\"),\n path: path.join(resourcesDir, dirent.name),\n });\n } else if (dirent.isDirectory()) {\n // Check for widget.tsx in folder\n const widgetPath = path.join(resourcesDir, dirent.name, \"widget.tsx\");\n try {\n await fs.access(widgetPath);\n entries.push({\n name: dirent.name,\n path: widgetPath,\n });\n } catch {\n // widget.tsx doesn't exist in this folder, skip it\n }\n }\n }\n } catch (error) {\n console.log(chalk.gray(\"No widgets found in resources/ directory\"));\n return [];\n }\n\n if (entries.length === 0) {\n console.log(chalk.gray(\"No widgets found in resources/ directory\"));\n return [];\n }\n\n console.log(chalk.gray(`Building ${entries.length} widget(s)...`));\n\n const react = (await import(\"@vitejs/plugin-react\")).default;\n // @ts-ignore - @tailwindcss/vite may not have type declarations\n const tailwindcss = (await import(\"@tailwindcss/vite\")).default;\n\n // Read favicon config from package.json\n const packageJsonPath = path.join(projectPath, \"package.json\");\n let favicon = \"\";\n try {\n const pkgContent = await fs.readFile(packageJsonPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n favicon = pkg.mcpUse?.favicon || \"\";\n } catch {\n // No package.json or no mcpUse config, that's fine\n }\n\n const builtWidgets: Array<{ name: string; metadata: any }> = [];\n\n for (const entry of entries) {\n const widgetName = entry.name;\n const entryPath = entry.path;\n\n console.log(chalk.gray(` - Building ${widgetName}...`));\n\n // Create temp directory for build artifacts\n const tempDir = path.join(projectPath, \".mcp-use\", widgetName);\n await fs.mkdir(tempDir, { recursive: true });\n\n // Create CSS file with Tailwind directives\n const relativeResourcesPath = path\n .relative(tempDir, resourcesDir)\n .replace(/\\\\/g, \"/\");\n\n // Calculate relative path to mcp-use package dynamically\n const mcpUsePath = path.join(projectPath, \"node_modules\", \"mcp-use\");\n const relativeMcpUsePath = path\n .relative(tempDir, mcpUsePath)\n .replace(/\\\\/g, \"/\");\n\n const cssContent = `@import \"tailwindcss\";\\n\\n/* Configure Tailwind to scan the resources directory and mcp-use package */\\n@source \"${relativeResourcesPath}\";\\n@source \"${relativeMcpUsePath}/**/*.{ts,tsx,js,jsx}\";\\n`;\n await fs.writeFile(path.join(tempDir, \"styles.css\"), cssContent, \"utf8\");\n\n // Create entry file\n const entryContent = `import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport './styles.css'\nimport Component from '${entryPath}'\n\nconst container = document.getElementById('widget-root')\nif (container && Component) {\n const root = createRoot(container)\n root.render(<Component />)\n}\n`;\n\n // Create HTML template\n const htmlContent = `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n <title>${widgetName} Widget</title>${\n favicon\n ? `\n <link rel=\"icon\" href=\"/mcp-use/public/${favicon}\" />`\n : \"\"\n }\n </head>\n <body>\n <div id=\"widget-root\"></div>\n <script type=\"module\" src=\"/entry.tsx\"></script>\n </body>\n</html>`;\n\n await fs.writeFile(path.join(tempDir, \"entry.tsx\"), entryContent, \"utf8\");\n await fs.writeFile(path.join(tempDir, \"index.html\"), htmlContent, \"utf8\");\n\n // Build with Vite\n const outDir = path.join(\n projectPath,\n \"dist\",\n \"resources\",\n \"widgets\",\n widgetName\n );\n\n // Set base URL: use MCP_URL if set, otherwise relative path\n const baseUrl = mcpUrl\n ? `${mcpUrl}/${widgetName}/`\n : `/mcp-use/widgets/${widgetName}/`;\n\n // Extract metadata from widget before building\n let widgetMetadata: any = {};\n try {\n // Use a completely isolated temp directory for metadata extraction to avoid conflicts\n const metadataTempDir = path.join(\n projectPath,\n \".mcp-use\",\n `${widgetName}-metadata`\n );\n await fs.mkdir(metadataTempDir, { recursive: true });\n\n const { createServer } = await import(\"vite\");\n\n // Plugin to provide browser stubs for Node.js-only packages\n const nodeStubsPlugin = {\n name: \"node-stubs\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n if (id === \"posthog-node\" || id.startsWith(\"posthog-node/\")) {\n return \"\\0virtual:posthog-node-stub\";\n }\n return null;\n },\n load(id: string) {\n if (id === \"\\0virtual:posthog-node-stub\") {\n return `\nexport class PostHog {\n constructor() {}\n capture() {}\n identify() {}\n alias() {}\n flush() { return Promise.resolve(); }\n shutdown() { return Promise.resolve(); }\n}\nexport default PostHog;\n`;\n }\n return null;\n },\n };\n\n const metadataServer = await createServer({\n root: metadataTempDir,\n cacheDir: path.join(metadataTempDir, \".vite-cache\"),\n plugins: [nodeStubsPlugin, tailwindcss(), react()],\n resolve: {\n alias: {\n \"@\": resourcesDir,\n },\n },\n server: {\n middlewareMode: true,\n },\n optimizeDeps: {\n // Exclude Node.js-only packages from browser bundling\n exclude: [\"posthog-node\"],\n },\n ssr: {\n // Force Vite to transform these packages in SSR instead of using external requires\n noExternal: [\"@openai/apps-sdk-ui\", \"react-router\"],\n // Mark Node.js-only packages as external in SSR mode\n external: [\"posthog-node\"],\n },\n define: {\n // Define process.env for SSR context\n \"process.env.NODE_ENV\": JSON.stringify(\n process.env.NODE_ENV || \"development\"\n ),\n \"import.meta.env.DEV\": true,\n \"import.meta.env.PROD\": false,\n \"import.meta.env.MODE\": JSON.stringify(\"development\"),\n \"import.meta.env.SSR\": true,\n },\n clearScreen: false,\n logLevel: \"silent\",\n customLogger: {\n info: () => {},\n warn: () => {},\n error: () => {},\n clearScreen: () => {},\n hasErrorLogged: () => false,\n hasWarned: false,\n warnOnce: () => {},\n },\n });\n\n try {\n const mod = await metadataServer.ssrLoadModule(entryPath);\n if (mod.widgetMetadata) {\n // Handle props (preferred) or inputs (deprecated) field\n const schemaField =\n mod.widgetMetadata.props || mod.widgetMetadata.inputs;\n\n // Check if schemaField is a Zod v4 schema (has ~standard property from Standard Schema)\n // and convert to JSON Schema for serialization using Zod v4's built-in toJsonSchema\n let inputsValue = schemaField || {};\n if (\n schemaField &&\n typeof schemaField === \"object\" &&\n \"~standard\" in schemaField\n ) {\n // Convert Zod schema to JSON Schema for manifest serialization\n try {\n inputsValue = toJSONSchema(schemaField);\n } catch (conversionError) {\n console.warn(\n chalk.yellow(\n ` ⚠ Could not convert schema for ${widgetName}, using raw schema`\n )\n );\n }\n }\n\n // Destructure to exclude props (raw Zod schema) from being serialized\n const {\n props: _rawProps,\n inputs: _rawInputs,\n ...restMetadata\n } = mod.widgetMetadata;\n\n widgetMetadata = {\n ...restMetadata,\n title: mod.widgetMetadata.title || widgetName,\n description: mod.widgetMetadata.description,\n // Store the converted JSON Schema (props field is used by production mount)\n props: inputsValue,\n inputs: inputsValue,\n };\n }\n // Give a moment for any background esbuild operations to complete\n await new Promise((resolve) => setTimeout(resolve, 50));\n } catch (error) {\n console.warn(\n chalk.yellow(` ⚠ Could not extract metadata for ${widgetName}`)\n );\n } finally {\n await metadataServer.close();\n // Clean up metadata temp directory\n try {\n await fs.rm(metadataTempDir, { recursive: true, force: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n } catch (error) {\n // Silently skip metadata extraction if it fails\n }\n\n try {\n // Enhanced plugin to stub Node.js-only packages and built-ins\n const buildNodeStubsPlugin = {\n name: \"node-stubs-build\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n // Stub posthog-node\n if (id === \"posthog-node\" || id.startsWith(\"posthog-node/\")) {\n return \"\\0virtual:posthog-node-stub\";\n }\n // Stub path module for browser builds\n if (id === \"path\" || id === \"node:path\") {\n return \"\\0virtual:path-stub\";\n }\n return null;\n },\n load(id: string) {\n if (id === \"\\0virtual:posthog-node-stub\") {\n return `\nexport class PostHog {\n constructor() {}\n capture() {}\n identify() {}\n alias() {}\n flush() { return Promise.resolve(); }\n shutdown() { return Promise.resolve(); }\n}\nexport default PostHog;\n`;\n }\n if (id === \"\\0virtual:path-stub\") {\n return `\nexport function join(...paths) {\n return paths.filter(Boolean).join(\"/\").replace(/\\\\/\\\\//g, \"/\").replace(/\\\\/$/, \"\");\n}\nexport function resolve(...paths) {\n return join(...paths);\n}\nexport function dirname(filepath) {\n const parts = filepath.split(\"/\");\n parts.pop();\n return parts.join(\"/\") || \"/\";\n}\nexport function basename(filepath, ext) {\n const parts = filepath.split(\"/\");\n let name = parts[parts.length - 1] || \"\";\n if (ext && name.endsWith(ext)) {\n name = name.slice(0, -ext.length);\n }\n return name;\n}\nexport function extname(filepath) {\n const name = basename(filepath);\n const index = name.lastIndexOf(\".\");\n return index > 0 ? name.slice(index) : \"\";\n}\nexport function normalize(filepath) {\n return filepath.replace(/\\\\/\\\\//g, \"/\");\n}\nexport function isAbsolute(filepath) {\n return filepath.startsWith(\"/\");\n}\nexport const sep = \"/\";\nexport const delimiter = \":\";\nexport const posix = {\n join,\n resolve,\n dirname,\n basename,\n extname,\n normalize,\n isAbsolute,\n sep,\n delimiter,\n};\nexport default {\n join,\n resolve,\n dirname,\n basename,\n extname,\n normalize,\n isAbsolute,\n sep,\n delimiter,\n posix,\n};\n`;\n }\n return null;\n },\n };\n\n await build({\n root: tempDir,\n base: baseUrl,\n plugins: [buildNodeStubsPlugin, tailwindcss(), react()],\n experimental: {\n renderBuiltUrl: (filename: string, { hostType }) => {\n if ([\"js\", \"css\"].includes(hostType)) {\n return {\n runtime: `window.__getFile(${JSON.stringify(filename)})`,\n };\n } else {\n return { relative: true };\n }\n },\n },\n resolve: {\n alias: {\n \"@\": resourcesDir,\n },\n },\n optimizeDeps: {\n // Exclude Node.js-only packages from browser bundling\n exclude: [\"posthog-node\"],\n },\n build: {\n outDir,\n emptyOutDir: true,\n rollupOptions: {\n input: path.join(tempDir, \"index.html\"),\n external: (id) => {\n // Don't externalize posthog-node or path - we're stubbing them\n return false;\n },\n },\n },\n });\n\n // Post-process HTML for static deployments (e.g., Supabase)\n // If MCP_SERVER_URL is set, inject window globals at build time\n const mcpServerUrl = process.env.MCP_SERVER_URL;\n if (mcpServerUrl) {\n try {\n const htmlPath = path.join(outDir, \"index.html\");\n let html = await fs.readFile(htmlPath, \"utf8\");\n\n // Inject window.__mcpPublicUrl and window.__getFile into <head>\n // Note: __mcpPublicUrl uses standard format for useWidget to derive mcp_url\n // __mcpPublicAssetsUrl points to where public files are actually stored\n const injectionScript = `<script>window.__getFile = (filename) => { return \"${mcpUrl}/${widgetName}/\"+filename }; window.__mcpPublicUrl = \"${mcpServerUrl}/mcp-use/public\"; window.__mcpPublicAssetsUrl = \"${mcpUrl}/public\";</script>`;\n\n // Check if script tag already exists in head\n if (!html.includes(\"window.__mcpPublicUrl\")) {\n html = html.replace(\n /<head[^>]*>/i,\n `<head>\\n ${injectionScript}`\n );\n }\n\n // Update base href if it exists, or inject it\n if (/<base\\s+[^>]*\\/?>/i.test(html)) {\n // Replace existing base tag\n html = html.replace(\n /<base\\s+[^>]*\\/?>/i,\n `<base href=\"${mcpServerUrl}\">`\n );\n } else {\n // Inject base tag after the injection script\n html = html.replace(\n injectionScript,\n `${injectionScript}\\n <base href=\"${mcpServerUrl}\">`\n );\n }\n\n await fs.writeFile(htmlPath, html, \"utf8\");\n console.log(\n chalk.gray(` → Injected MCP_SERVER_URL into ${widgetName}`)\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n ` ⚠ Failed to post-process HTML for ${widgetName}:`,\n error\n )\n );\n }\n }\n\n builtWidgets.push({\n name: widgetName,\n metadata: widgetMetadata,\n });\n console.log(chalk.green(` ✓ Built ${widgetName}`));\n } catch (error) {\n console.error(chalk.red(` ✗ Failed to build ${widgetName}:`), error);\n }\n }\n\n return builtWidgets;\n}\n\nprogram\n .command(\"build\")\n .description(\"Build TypeScript and MCP UI widgets\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--with-inspector\", \"Include inspector in production build\")\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n const { promises: fs } = await import(\"node:fs\");\n\n console.log(chalk.cyan.bold(`mcp-use v${packageJson.version}`));\n\n // Build widgets first (this generates schemas)\n const builtWidgets = await buildWidgets(projectPath);\n\n // Then run tsc (now schemas are available for import)\n console.log(chalk.gray(\"Building TypeScript...\"));\n await runCommand(\"npx\", [\"tsc\"], projectPath);\n console.log(chalk.green(\"✓ TypeScript build complete!\"));\n\n // Copy public folder if it exists\n const publicDir = path.join(projectPath, \"public\");\n try {\n await fs.access(publicDir);\n console.log(chalk.gray(\"Copying public assets...\"));\n await fs.cp(publicDir, path.join(projectPath, \"dist\", \"public\"), {\n recursive: true,\n });\n console.log(chalk.green(\"✓ Public assets copied\"));\n } catch {\n // Public folder doesn't exist, skip\n }\n\n // Create build manifest\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n\n // Read existing manifest to preserve tunnel subdomain and other fields\n let existingManifest: any = {};\n try {\n const existingContent = await fs.readFile(manifestPath, \"utf-8\");\n existingManifest = JSON.parse(existingContent);\n } catch {\n // File doesn't exist, that's okay\n }\n\n // Transform builtWidgets array into widgets object with metadata\n const widgetsData: Record<string, any> = {};\n for (const widget of builtWidgets) {\n widgetsData[widget.name] = widget.metadata;\n }\n\n // Convert to boolean: true if flag is present, false otherwise\n const includeInspector = !!options.withInspector;\n\n // Generate a build ID (hash of build time + random component for uniqueness)\n const buildTime = new Date().toISOString();\n const { createHash } = await import(\"node:crypto\");\n const buildId = createHash(\"sha256\")\n .update(buildTime + Math.random().toString())\n .digest(\"hex\")\n .substring(0, 16); // Use first 16 chars for shorter IDs\n\n // Merge with existing manifest, preserving tunnel and other fields\n const manifest = {\n ...existingManifest, // Preserve existing fields like tunnel\n includeInspector,\n buildTime,\n buildId,\n widgets: widgetsData,\n };\n\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf8\"\n );\n console.log(chalk.green(\"✓ Build manifest created\"));\n\n console.log(chalk.green.bold(`\\n✓ Build complete!`));\n if (builtWidgets.length > 0) {\n console.log(chalk.gray(` ${builtWidgets.length} widget(s) built`));\n }\n if (options.withInspector) {\n console.log(chalk.gray(\" Inspector included\"));\n }\n } catch (error) {\n console.error(chalk.red(\"Build failed:\"), error);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"dev\")\n .description(\"Run development server with auto-reload and inspector\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--host <host>\", \"Server host\", \"localhost\")\n .option(\"--no-open\", \"Do not auto-open inspector\")\n // .option('--tunnel', 'Expose server through a tunnel')\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n let port = parseInt(options.port, 10);\n const host = options.host;\n\n console.log(chalk.cyan.bold(`mcp-use v${packageJson.version}`));\n\n // Check if port is available, find alternative if needed\n if (!(await isPortAvailable(port, host))) {\n console.log(chalk.yellow.bold(`⚠️ Port ${port} is already in use`));\n const availablePort = await findAvailablePort(port, host);\n console.log(chalk.green.bold(`✓ Using port ${availablePort} instead`));\n port = availablePort;\n }\n\n // Find the main source file\n const serverFile = await findServerFile(projectPath);\n\n // Start all processes concurrently\n const processes: any[] = [];\n\n const env: NodeJS.ProcessEnv = {\n PORT: String(port),\n HOST: host,\n NODE_ENV: \"development\",\n };\n\n const serverCommand = runCommand(\n \"npx\",\n [\"tsx\", \"watch\", serverFile],\n projectPath,\n env,\n true\n );\n processes.push(serverCommand.process);\n\n // Auto-open inspector if enabled\n if (options.open !== false) {\n const startTime = Date.now();\n const ready = await waitForServer(port, host);\n if (ready) {\n const mcpEndpoint = `http://${host}:${port}/mcp`;\n const inspectorUrl = `http://${host}:${port}/inspector?autoConnect=${encodeURIComponent(mcpEndpoint)}`;\n\n const readyTime = Date.now() - startTime;\n console.log(chalk.green.bold(`✓ Ready in ${readyTime}ms`));\n console.log(chalk.whiteBright(`Local: http://${host}:${port}`));\n console.log(chalk.whiteBright(`Network: http://${host}:${port}`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n console.log(chalk.whiteBright(`Inspector: ${inspectorUrl}\\n`));\n await open(inspectorUrl);\n }\n }\n\n // Handle cleanup\n const cleanup = () => {\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n const processesToKill = processes.length;\n let killedCount = 0;\n\n const checkAndExit = () => {\n killedCount++;\n if (killedCount >= processesToKill) {\n process.exit(0);\n }\n };\n\n processes.forEach((proc) => {\n if (proc && typeof proc.kill === \"function\") {\n // Listen for process exit\n proc.on(\"exit\", checkAndExit);\n // Send SIGINT (Ctrl+C) to tsx which it handles more gracefully\n proc.kill(\"SIGINT\");\n } else {\n checkAndExit();\n }\n });\n\n // Fallback timeout in case processes don't exit\n setTimeout(() => {\n processes.forEach((proc) => {\n if (\n proc &&\n typeof proc.kill === \"function\" &&\n proc.exitCode === null\n ) {\n proc.kill(\"SIGKILL\");\n }\n });\n process.exit(0);\n }, 1000);\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n // Keep the process running\n await new Promise(() => {});\n } catch (error) {\n console.error(chalk.red(\"Dev mode failed:\"), error);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"start\")\n .description(\"Start production server\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--tunnel\", \"Expose server through a tunnel\")\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n const port = parseInt(options.port, 10);\n\n console.log(\n `\\x1b[36m\\x1b[1mmcp-use\\x1b[0m \\x1b[90mVersion: ${packageJson.version}\\x1b[0m\\n`\n );\n\n // Start tunnel if requested\n let mcpUrl: string | undefined;\n let tunnelProcess: any = undefined;\n let tunnelSubdomain: string | undefined = undefined;\n if (options.tunnel) {\n try {\n // Read existing subdomain from mcp-use.json if available\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let existingSubdomain: string | undefined;\n\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n existingSubdomain = manifest.tunnel?.subdomain;\n if (existingSubdomain) {\n console.log(\n chalk.gray(`Found existing subdomain: ${existingSubdomain}`)\n );\n }\n } catch (error) {\n // Manifest doesn't exist or is invalid, that's okay\n console.debug(\n chalk.gray(\n `Debug: Failed to read or parse mcp-use.json: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n }\n\n const tunnelInfo = await startTunnel(port, existingSubdomain);\n mcpUrl = tunnelInfo.url;\n tunnelProcess = tunnelInfo.process;\n const subdomain = tunnelInfo.subdomain;\n tunnelSubdomain = subdomain;\n\n // Update mcp-use.json with the subdomain\n try {\n let manifest: any = {};\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n manifest = JSON.parse(manifestContent);\n } catch {\n // File doesn't exist, create new manifest\n }\n\n // Update or add tunnel subdomain\n if (!manifest.tunnel) {\n manifest.tunnel = {};\n }\n manifest.tunnel.subdomain = subdomain;\n\n // Ensure dist directory exists\n await mkdir(path.dirname(manifestPath), { recursive: true });\n\n // Write updated manifest\n await writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf-8\"\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n `⚠️ Failed to save subdomain to mcp-use.json: ${error instanceof Error ? error.message : \"Unknown error\"}`\n )\n );\n }\n } catch (error) {\n console.error(chalk.red(\"Failed to start tunnel:\"), error);\n process.exit(1);\n }\n }\n\n // Find the built server file\n let serverFile = \"dist/index.js\";\n try {\n await access(path.join(projectPath, serverFile));\n } catch {\n serverFile = \"dist/server.js\";\n }\n\n console.log(\"Starting production server...\");\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n PORT: String(port),\n NODE_ENV: \"production\",\n };\n\n if (mcpUrl) {\n env.MCP_URL = mcpUrl;\n console.log(chalk.whiteBright(`Tunnel: ${mcpUrl}/mcp`));\n }\n\n const serverProc = spawn(\"node\", [serverFile], {\n cwd: projectPath,\n stdio: \"inherit\",\n env,\n });\n\n // Handle cleanup\n let cleanupInProgress = false;\n const cleanup = async () => {\n if (cleanupInProgress) {\n return; // Prevent double cleanup\n }\n cleanupInProgress = true;\n\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n\n // Mark tunnel as shutting down to suppress output\n if (\n tunnelProcess &&\n typeof (tunnelProcess as any).markShutdown === \"function\"\n ) {\n (tunnelProcess as any).markShutdown();\n }\n\n // Clean up tunnel via API if subdomain is available\n if (tunnelSubdomain) {\n try {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch (err) {\n // Ignore cleanup errors\n }\n }\n\n const processesToKill = 1 + (tunnelProcess ? 1 : 0);\n let killedCount = 0;\n\n const checkAndExit = () => {\n killedCount++;\n if (killedCount >= processesToKill) {\n process.exit(0);\n }\n };\n\n // Handle server process\n serverProc.on(\"exit\", checkAndExit);\n serverProc.kill(\"SIGTERM\");\n\n // Handle tunnel process if it exists\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n tunnelProcess.on(\"exit\", checkAndExit);\n // Use SIGINT for better cleanup of npx/node processes\n tunnelProcess.kill(\"SIGINT\");\n } else {\n checkAndExit();\n }\n\n // Fallback timeout in case processes don't exit\n setTimeout(() => {\n if (serverProc.exitCode === null) {\n serverProc.kill(\"SIGKILL\");\n }\n if (tunnelProcess && tunnelProcess.exitCode === null) {\n tunnelProcess.kill(\"SIGKILL\");\n }\n process.exit(0);\n }, 2000); // Increase timeout to 2 seconds to allow graceful shutdown\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n serverProc.on(\"exit\", (code) => {\n process.exit(code || 0);\n });\n } catch (error) {\n console.error(\"Start failed:\", error);\n process.exit(1);\n }\n });\n\n// Authentication commands\nprogram\n .command(\"login\")\n .description(\"Login to mcp-use cloud\")\n .action(async () => {\n await loginCommand();\n });\n\nprogram\n .command(\"logout\")\n .description(\"Logout from mcp-use cloud\")\n .action(async () => {\n await logoutCommand();\n });\n\nprogram\n .command(\"whoami\")\n .description(\"Show current user information\")\n .action(async () => {\n await whoamiCommand();\n });\n\n// Deployment command\nprogram\n .command(\"deploy\")\n .description(\"Deploy MCP server to mcp-use cloud\")\n .option(\"--open\", \"Open deployment in browser after successful deploy\")\n .option(\"--name <name>\", \"Custom deployment name\")\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--runtime <runtime>\", \"Runtime (node or python)\")\n .option(\n \"--from-source\",\n \"Deploy from local source code (even for GitHub repos)\"\n )\n .action(async (options) => {\n await deployCommand({\n open: options.open,\n name: options.name,\n port: options.port ? parseInt(options.port, 10) : undefined,\n runtime: options.runtime,\n fromSource: options.fromSource,\n });\n });\n\n// Client command\nprogram.addCommand(createClientCommand());\n\nprogram.parse();\n","import process from 'node:process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport {\n\tisWsl,\n\tpowerShellPath,\n\tconvertWslPathToWindows,\n\tcanAccessPowerShell,\n\twslDefaultBrowser,\n} from 'wsl-utils';\nimport {executePowerShell} from 'powershell-utils';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser, {_windowsBrowserProgIdMap} from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\nimport isInSsh from 'is-in-ssh';\n\nconst fallbackAttemptSymbol = Symbol('fallbackAttempt');\n\n// Path to included `xdg-open`.\nconst __dirname = import.meta.url ? path.dirname(fileURLToPath(import.meta.url)) : '';\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\nconst tryEachApp = async (apps, opener) => {\n\tif (apps.length === 0) {\n\t\t// No app was provided\n\t\treturn;\n\t}\n\n\tconst errors = [];\n\n\tfor (const app of apps) {\n\t\ttry {\n\t\t\treturn await opener(app); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t}\n\n\tthrow new AggregateError(errors, 'Failed to open in all supported apps');\n};\n\n// eslint-disable-next-line complexity\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options,\n\t};\n\n\tconst isFallbackAttempt = options[fallbackAttemptSymbol] === true;\n\tdelete options[fallbackAttemptSymbol];\n\n\tif (Array.isArray(options.app)) {\n\t\treturn tryEachApp(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app ?? {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn tryEachApp(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments,\n\t\t\t},\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same.\n\t\t// IDs are lowercased to increase chances of a match.\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'com.brave.browser': 'brave',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t\t'com.apple.safari': 'safari',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tbrave: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t\t// Safari doesn't support private mode via command line\n\t\t};\n\n\t\tlet browser;\n\t\tif (isWsl) {\n\t\t\tconst progId = await wslDefaultBrowser();\n\t\t\tconst browserInfo = _windowsBrowserProgIdMap.get(progId);\n\t\t\tbrowser = browserInfo ?? {};\n\t\t} else {\n\t\t\tbrowser = await defaultBrowser();\n\t\t}\n\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id.toLowerCase()];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\t// Safari doesn't support private mode via command line\n\t\t\t\tif (browserName === 'safari') {\n\t\t\t\t\tthrow new Error('Safari doesn\\'t support opening in private mode via command line');\n\t\t\t\t}\n\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\t// Determine if we should use Windows/PowerShell behavior in WSL.\n\t// We only use Windows integration if PowerShell is actually accessible.\n\t// This allows the package to work in sandboxed WSL environments where Windows access is restricted.\n\tlet shouldUseWindowsInWsl = false;\n\tif (isWsl && !isInsideContainer() && !isInSsh && !app) {\n\t\tshouldUseWindowsInWsl = await canAccessPowerShell();\n\t}\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || shouldUseWindowsInWsl) {\n\t\tcommand = await powerShellPath();\n\n\t\tcliArguments.push(...executePowerShell.argumentsPrefix);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\t// Convert WSL Linux paths to Windows paths\n\t\tif (isWsl && options.target) {\n\t\t\toptions.target = await convertWslPathToWindows(options.target);\n\t\t}\n\n\t\t// Suppress PowerShell progress messages that are written to stderr\n\t\tconst encodedArguments = ['$ProgressPreference = \\'SilentlyContinue\\';', 'Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(app));\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(options.target));\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => executePowerShell.escapeArgument(argument));\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = executePowerShell.encodeCommand(encodedArguments.join(' '));\n\n\t\tif (!options.wait) {\n\t\t\t// PowerShell will keep the parent process alive unless stdio is ignored.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t}\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron\n\t\t\t\t?? (platform === 'android' || isBundled || !exeLocalXdgOpen);\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// IMPORTANT: On macOS, the target MUST come AFTER '--args'.\n\t// When using --args, ALL following arguments are passed to the app.\n\t// Example: open -a \"chrome\" --args --incognito https://site.com\n\t// This passes BOTH --incognito AND https://site.com to Chrome.\n\t// Without this order, Chrome won't open in incognito. See #332.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode !== 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\t// When we're in a fallback attempt, we need to detect launch failures before trying the next app.\n\t// Wait for the close event to check the exit code before unreffing.\n\t// The launcher (open/xdg-open/PowerShell) exits quickly (~10-30ms) even on success.\n\tif (isFallbackAttempt) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('spawn', () => {\n\t\t\t\t// Keep error handler active for post-spawn errors\n\t\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\t\tsubprocess.off('error', reject);\n\n\t\t\t\t\tif (exitCode !== 0) {\n\t\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsubprocess.unref();\n\t\t\t\t\tresolve(subprocess);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\t// Handle spawn errors before the caller can attach listeners.\n\t// This prevents unhandled error events from crashing the process.\n\treturn new Promise((resolve, reject) => {\n\t\tsubprocess.once('error', reject);\n\n\t\t// Wait for the subprocess to spawn before resolving.\n\t\t// This ensures the process is established before the caller continues,\n\t\t// preventing issues when process.exit() is called immediately after.\n\t\tsubprocess.once('spawn', () => {\n\t\t\tsubprocess.off('error', reject);\n\t\t\tresolve(subprocess);\n\t\t});\n\t});\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget,\n\t});\n};\n\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options ?? {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments,\n\t\t},\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl} = {}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nexport const apps = {\n\tbrowser: 'browser',\n\tbrowserPrivate: 'browserPrivate',\n};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\t// `chromium-browser` is the older deb package name used by Ubuntu/Debian before snap.\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'brave', () => detectPlatformBinary({\n\tdarwin: 'brave browser',\n\twin32: 'brave',\n\tlinux: ['brave-browser', 'brave'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe',\n\t\tx64: ['/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe', '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: String.raw`C:\\Program Files\\Mozilla Firefox\\firefox.exe`,\n\tlinux: 'firefox',\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe',\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev'],\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',\n}));\n\ndefineLazyProperty(apps, 'safari', () => detectPlatformBinary({\n\tdarwin: 'Safari',\n}));\n\nexport default open;\n","import {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\nimport {powerShellPath as windowsPowerShellPath, executePowerShell} from 'powershell-utils';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const wslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?<!#.*)root\\s*=\\s*(?<mountPoint>.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nexport const powerShellPathFromWsl = async () => {\n\tconst mountPoint = await wslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\nexport const powerShellPath = isWsl ? powerShellPathFromWsl : windowsPowerShellPath;\n\n// Cache for PowerShell accessibility check\nlet canAccessPowerShellPromise;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessPowerShellPromise ??= (async () => {\n\t\ttry {\n\t\t\tconst psPath = await powerShellPath();\n\t\t\tawait fs.access(psPath, fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// PowerShell is not accessible (either doesn't exist, no execute permission, or other error)\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessPowerShellPromise;\n};\n\nexport const wslDefaultBrowser = async () => {\n\tconst psPath = await powerShellPath();\n\tconst command = String.raw`(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId`;\n\n\tconst {stdout} = await executePowerShell(command, {powerShellPath: psPath});\n\n\treturn stdout.trim();\n};\n\nexport const convertWslPathToWindows = async path => {\n\t// Don't convert URLs\n\tif (/^[a-z]+:\\/\\//i.test(path)) {\n\t\treturn path;\n\t}\n\n\ttry {\n\t\tconst {stdout} = await execFile('wslpath', ['-aw', path], {encoding: 'utf8'});\n\t\treturn stdout.trim();\n\t} catch {\n\t\t// If wslpath fails, return the original path\n\t\treturn path;\n\t}\n};\n\nexport {default as isWsl} from 'is-wsl';\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport isInsideContainer from 'is-inside-container';\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isInsideContainer()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft')\n\t\t\t? !isInsideContainer() : false;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();\n","import fs from 'node:fs';\nimport isDocker from 'is-docker';\n\nlet cachedResult;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default function isInsideContainer() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n","import fs from 'node:fs';\n\nlet isDockerCached;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function isDocker() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDockerCached;\n}\n","import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const powerShellPath = () => `${process.env.SYSTEMROOT || process.env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n\n// Cache for PowerShell accessibility check\nlet canAccessCache;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessCache ??= (async () => {\n\t\ttry {\n\t\t\tawait fs.access(powerShellPath(), fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessCache;\n};\n\nexport const executePowerShell = async (command, options = {}) => {\n\tconst {\n\t\tpowerShellPath: psPath,\n\t\t...execFileOptions\n\t} = options;\n\n\tconst encodedCommand = executePowerShell.encodeCommand(command);\n\n\treturn execFile(\n\t\tpsPath ?? powerShellPath(),\n\t\t[\n\t\t\t...executePowerShell.argumentsPrefix,\n\t\t\tencodedCommand,\n\t\t],\n\t\t{\n\t\t\tencoding: 'utf8',\n\t\t\t...execFileOptions,\n\t\t},\n\t);\n};\n\nexecutePowerShell.argumentsPrefix = [\n\t'-NoProfile',\n\t'-NonInteractive',\n\t'-ExecutionPolicy',\n\t'Bypass',\n\t'-EncodedCommand',\n];\n\nexecutePowerShell.encodeCommand = command => Buffer.from(command, 'utf16le').toString('base64');\n\nexecutePowerShell.escapeArgument = value => `'${String(value).replaceAll('\\'', '\\'\\'')}'`;\n","export default function defineLazyProperty(object, propertyName, valueGetter) {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = valueGetter();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nexport {_windowsBrowserProgIdMap} from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\tconst browserId = match?.groups.id ?? 'com.apple.Safari';\n\n\t// Correct the case for Safari's bundle identifier\n\tif (browserId === 'com.apple.safari') {\n\t\treturn 'com.apple.Safari';\n\t}\n\n\treturn browserId;\n}\n","import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true, signal} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst execOptions = {};\n\tif (signal) {\n\t\texecOptions.signal = signal;\n\t}\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments], execOptions);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n","import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n","import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// TODO: Fix the casing of bundle identifiers in the next major version.\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // The missing `L` is correct.\n\tMSEdgeBHTML: {name: 'Edge Beta', id: 'com.microsoft.edge.beta'},\n\tMSEdgeDHTML: {name: 'Edge Dev', id: 'com.microsoft.edge.dev'},\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tChromeBHTML: {name: 'Chrome Beta', id: 'com.google.chrome.beta'},\n\tChromeDHTML: {name: 'Chrome Dev', id: 'com.google.chrome.dev'},\n\tChromiumHTM: {name: 'Chromium', id: 'org.chromium.Chromium'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveDHTML: {name: 'Brave Dev', id: 'com.brave.Browser.dev'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tOperaStable: {name: 'Opera', id: 'com.operasoftware.Opera'},\n\tVivaldiHTM: {name: 'Vivaldi', id: 'com.vivaldi.Vivaldi'},\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n};\n\nexport const _windowsBrowserProgIdMap = new Map(Object.entries(windowsBrowserProgIds));\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\tconst browser = windowsBrowserProgIds[id];\n\tif (!browser) {\n\t\tthrow new UnknownBrowserError(`Unknown browser ID: ${id}`);\n\t}\n\n\treturn browser;\n}\n","import process from 'node:process';\n\nconst isInSsh = Boolean(process.env.SSH_CONNECTION\n\t|| process.env.SSH_CLIENT\n\t|| process.env.SSH_TTY);\n\nexport default isInSsh;\n","import chalk from \"chalk\";\nimport {\n createServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"node:http\";\nimport open from \"open\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport {\n deleteConfig,\n getApiKey,\n getWebUrl,\n isLoggedIn,\n writeConfig,\n} from \"../utils/config.js\";\n\nconst LOGIN_TIMEOUT = 300000; // 5 minutes\n\n/**\n * Find an available port\n */\nasync function findAvailablePort(startPort: number = 8765): Promise<number> {\n for (let port = startPort; port < startPort + 100; port++) {\n try {\n await new Promise<void>((resolve, reject) => {\n const server = createServer();\n server.once(\"error\", reject);\n server.once(\"listening\", () => {\n server.close();\n resolve();\n });\n server.listen(port);\n });\n return port;\n } catch {\n continue;\n }\n }\n throw new Error(\"No available ports found\");\n}\n\n/**\n * Start local server to receive OAuth callback\n */\nasync function startCallbackServer(\n port: number\n): Promise<{ server: any; token: Promise<string> }> {\n return new Promise((resolve, reject) => {\n let tokenResolver: ((value: string) => void) | null = null;\n const tokenPromise = new Promise<string>((res) => {\n tokenResolver = res;\n });\n\n const server = createServer((req: IncomingMessage, res: ServerResponse) => {\n if (req.url?.startsWith(\"/callback\")) {\n const url = new URL(req.url, `http://localhost:${port}`);\n const token = url.searchParams.get(\"token\");\n\n if (token && tokenResolver) {\n // Send success response\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>Login Successful</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n background: #000;\n padding: 1rem;\n }\n .container {\n width: 100%;\n max-width: 28rem;\n padding: 3rem;\n text-align: center;\n -webkit-backdrop-filter: blur(40px);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 1.5rem;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n }\n .icon-container {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 6rem;\n height: 6rem;\n margin-bottom: 2rem;\n background: rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-radius: 50%;\n }\n .checkmark {\n font-size: 4rem;\n color: #fff;\n line-height: 1;\n animation: scaleIn 0.5s ease-out;\n }\n @keyframes scaleIn {\n from {\n transform: scale(0);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n h1 {\n color: #fff;\n margin: 0 0 1rem 0;\n font-size: 2.5rem;\n font-weight: 700;\n letter-spacing: -0.025em;\n }\n p {\n color: rgba(255, 255, 255, 0.8);\n margin: 0 0 2rem 0;\n font-size: 1.125rem;\n line-height: 1.5;\n }\n .spinner {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n border: 3px solid rgba(255, 255, 255, 0.3);\n border-top-color: #fff;\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n }\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n .footer {\n margin-top: 2rem;\n color: rgba(255, 255, 255, 0.6);\n font-size: 0.875rem;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <h1>Authentication Successful!</h1>\n <p>You can now close this window and return to the CLI.</p>\n </div>\n </body>\n </html>\n `);\n tokenResolver(token);\n } else {\n res.writeHead(400, { \"Content-Type\": \"text/html\" });\n res.end(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>Login Failed</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n background: #000;\n padding: 1rem;\n }\n .container {\n width: 100%;\n max-width: 28rem;\n padding: 3rem;\n text-align: center;\n background: rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(40px);\n -webkit-backdrop-filter: blur(40px);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 1.5rem;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n }\n .icon-container {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 6rem;\n height: 6rem;\n margin-bottom: 2rem;\n background: rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-radius: 50%;\n }\n .cross {\n font-size: 4rem;\n color: #fff;\n line-height: 1;\n }\n h1 {\n color: #fff;\n margin: 0 0 1rem 0;\n font-size: 2.5rem;\n font-weight: 700;\n letter-spacing: -0.025em;\n }\n p {\n color: rgba(255, 255, 255, 0.8);\n margin: 0;\n font-size: 1.125rem;\n line-height: 1.5;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <div class=\"icon-container\">\n <div class=\"cross\">✗</div>\n </div>\n <h1>Login Failed</h1>\n <p>No token received. Please try again.</p>\n </div>\n </body>\n </html>\n `);\n }\n }\n });\n\n server.listen(port, () => {\n resolve({ server, token: tokenPromise });\n });\n\n server.on(\"error\", reject);\n });\n}\n\n/**\n * Login command - opens browser for OAuth flow\n */\nexport async function loginCommand(): Promise<void> {\n try {\n // Check if already logged in\n if (await isLoggedIn()) {\n console.log(\n chalk.yellow(\n \"⚠️ You are already logged in. Run 'mcp-use logout' first if you want to login with a different account.\"\n )\n );\n return;\n }\n\n console.log(chalk.cyan.bold(\"🔐 Logging in to mcp-use cloud...\\n\"));\n\n // Find available port\n const port = await findAvailablePort();\n const redirectUri = `http://localhost:${port}/callback`;\n\n console.log(chalk.gray(`Starting local server on port ${port}...`));\n\n // Start callback server\n const { server, token } = await startCallbackServer(port);\n\n // Get the web URL (respects NEXT_PUBLIC_API_URL)\n const webUrl = await getWebUrl();\n const loginUrl = `${webUrl}/auth/cli?redirect_uri=${encodeURIComponent(redirectUri)}`;\n\n console.log(chalk.gray(`Opening browser to ${webUrl}/auth/cli...\\n`));\n console.log(\n chalk.white(\n \"If the browser doesn't open automatically, please visit:\\n\" +\n chalk.cyan(loginUrl)\n )\n );\n\n // Open browser\n await open(loginUrl);\n\n console.log(\n chalk.gray(\"\\nWaiting for authentication... (this may take a moment)\")\n );\n\n // Wait for token with timeout\n const jwtToken = await Promise.race([\n token,\n new Promise<string>((_, reject) =>\n setTimeout(\n () => reject(new Error(\"Login timeout - please try again\")),\n LOGIN_TIMEOUT\n )\n ),\n ]);\n\n // Close server\n server.close();\n\n console.log(\n chalk.gray(\"Received authentication token, creating API key...\")\n );\n\n // Create API key using JWT token\n const api = await McpUseAPI.create();\n const apiKeyResponse = await api.createApiKey(jwtToken, \"CLI\");\n\n // Save API key to config\n await writeConfig({\n apiKey: apiKeyResponse.api_key,\n });\n\n console.log(chalk.green.bold(\"\\n✓ Successfully logged in!\"));\n console.log(\n chalk.gray(\n `\\nYour API key has been saved to ${chalk.white(\"~/.mcp-use/config.json\")}`\n )\n );\n console.log(\n chalk.gray(\n \"You can now deploy your MCP servers with \" +\n chalk.white(\"mcp-use deploy\")\n )\n );\n\n // Exit successfully\n process.exit(0);\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Login failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Logout command - revokes API key and deletes config\n */\nexport async function logoutCommand(): Promise<void> {\n try {\n // Check if logged in\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n return;\n }\n\n console.log(chalk.cyan.bold(\"🔓 Logging out...\\n\"));\n\n // Note: We can't revoke the API key from the CLI because we'd need the key_id\n // which isn't stored in the config. The API key will remain valid until\n // manually revoked from the web interface.\n // For now, we just delete the local config.\n\n await deleteConfig();\n\n console.log(chalk.green.bold(\"✓ Successfully logged out!\"));\n console.log(\n chalk.gray(\n \"\\nYour local config has been deleted. The API key will remain active until revoked from the web interface.\"\n )\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Logout failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Whoami command - shows current user info\n */\nexport async function whoamiCommand(): Promise<void> {\n try {\n // Check if logged in\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n return;\n }\n\n console.log(chalk.cyan.bold(\"👤 Current user:\\n\"));\n\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n\n console.log(chalk.white(\"Email: \") + chalk.cyan(authInfo.email));\n console.log(chalk.white(\"User ID: \") + chalk.gray(authInfo.user_id));\n\n const apiKey = await getApiKey();\n if (apiKey) {\n // Show first 6 characters\n const masked = apiKey.substring(0, 6) + \"...\";\n console.log(chalk.white(\"API Key: \") + chalk.gray(masked));\n }\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get user info:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\n\nexport interface McpConfig {\n apiKey?: string;\n apiUrl?: string;\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), \".mcp-use\");\nconst CONFIG_FILE = path.join(CONFIG_DIR, \"config.json\");\n\n// Backend API URL (where /api/v1 endpoints are)\nconst DEFAULT_API_URL = process.env.MCP_API_URL\n ? process.env.MCP_API_URL.replace(/\\/api\\/v1$/, \"\") + \"/api/v1\" // Ensure /api/v1 suffix\n : \"https://cloud.mcp-use.com/api/v1\";\n\n// Frontend/Web URL (where /auth/cli page is)\nconst DEFAULT_WEB_URL = process.env.MCP_WEB_URL\n ? process.env.MCP_WEB_URL\n : \"https://mcp-use.com\";\n\n/**\n * Ensure config directory exists\n */\nasync function ensureConfigDir(): Promise<void> {\n try {\n await fs.mkdir(CONFIG_DIR, { recursive: true });\n } catch (error) {\n // Ignore error if directory already exists\n }\n}\n\n/**\n * Read config from disk\n */\nexport async function readConfig(): Promise<McpConfig> {\n try {\n const content = await fs.readFile(CONFIG_FILE, \"utf-8\");\n return JSON.parse(content);\n } catch (error) {\n // Return empty config if file doesn't exist\n return {};\n }\n}\n\n/**\n * Write config to disk\n */\nexport async function writeConfig(config: McpConfig): Promise<void> {\n await ensureConfigDir();\n await fs.writeFile(CONFIG_FILE, JSON.stringify(config, null, 2), \"utf-8\");\n}\n\n/**\n * Delete config file\n */\nexport async function deleteConfig(): Promise<void> {\n try {\n await fs.unlink(CONFIG_FILE);\n } catch (error) {\n // Ignore error if file doesn't exist\n }\n}\n\n/**\n * Get API URL from config or use default\n */\nexport async function getApiUrl(): Promise<string> {\n const config = await readConfig();\n return config.apiUrl || DEFAULT_API_URL;\n}\n\n/**\n * Get API key from config\n */\nexport async function getApiKey(): Promise<string | null> {\n const config = await readConfig();\n return config.apiKey || null;\n}\n\n/**\n * Check if user is logged in\n */\nexport async function isLoggedIn(): Promise<boolean> {\n const apiKey = await getApiKey();\n return !!apiKey;\n}\n\n/**\n * Get web URL (for browser-based auth)\n * This is the frontend URL where /auth/cli lives\n */\nexport async function getWebUrl(): Promise<string> {\n return DEFAULT_WEB_URL;\n}\n","import { getApiKey, getApiUrl } from \"./config.js\";\n\nexport interface APIKeyCreateRequest {\n name: string;\n}\n\nexport interface APIKeyCreateResponse {\n api_key: string;\n name: string;\n}\n\nexport interface AuthTestResponse {\n message: string;\n user_id: string;\n email: string;\n}\n\nexport interface GitHubSource {\n type: \"github\";\n repo: string;\n branch?: string;\n startCommand?: string;\n runtime?: \"node\" | \"python\";\n port?: number;\n env?: Record<string, string>;\n buildCommand?: string;\n baseImage?: string;\n githubCheckRunId?: number;\n}\n\nexport interface UploadSource {\n type: \"upload\";\n startCommand?: string;\n runtime?: \"node\" | \"python\";\n port?: number;\n env?: Record<string, string>;\n buildCommand?: string;\n baseImage?: string;\n}\n\nexport type DeploymentSource = GitHubSource | UploadSource;\n\nexport interface CreateDeploymentRequest {\n name: string;\n source: DeploymentSource;\n customDomain?: string;\n healthCheckPath?: string;\n}\n\nexport interface Deployment {\n id: string;\n userId: string;\n name: string;\n source: DeploymentSource;\n domain?: string;\n customDomain?: string;\n port: number;\n createdAt: string;\n updatedAt: string;\n status: \"pending\" | \"building\" | \"running\" | \"stopped\" | \"failed\";\n healthCheckPath?: string;\n provider?: string;\n appName?: string;\n error?: string;\n buildLogs?: string;\n buildStartedAt?: string;\n buildCompletedAt?: string;\n gitCommitSha?: string;\n gitBranch?: string;\n gitCommitMessage?: string;\n}\n\n/**\n * API client for mcp-use cloud\n */\nexport class McpUseAPI {\n private baseUrl: string;\n private apiKey: string | undefined;\n\n constructor(baseUrl?: string, apiKey?: string) {\n this.baseUrl = baseUrl || \"\";\n this.apiKey = apiKey;\n }\n\n /**\n * Initialize API client with config\n */\n static async create(): Promise<McpUseAPI> {\n const baseUrl = await getApiUrl();\n const apiKey = await getApiKey();\n return new McpUseAPI(baseUrl, apiKey ?? undefined);\n }\n\n /**\n * Make authenticated request\n */\n private async request<T>(\n endpoint: string,\n options: {\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n } = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...((options.headers as Record<string, string>) || {}),\n };\n\n if (this.apiKey) {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`API request failed: ${response.status} ${error}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create API key using JWT token\n */\n async createApiKey(\n jwtToken: string,\n name: string = \"CLI\"\n ): Promise<APIKeyCreateResponse> {\n const url = `${this.baseUrl}/api-key`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${jwtToken}`,\n },\n body: JSON.stringify({ name }),\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to create API key: ${response.status} ${error}`);\n }\n\n return response.json() as Promise<APIKeyCreateResponse>;\n }\n\n /**\n * Test authentication\n */\n async testAuth(): Promise<AuthTestResponse> {\n return this.request<AuthTestResponse>(\"/test-auth\");\n }\n\n /**\n * Create deployment\n */\n async createDeployment(\n request: CreateDeploymentRequest\n ): Promise<Deployment> {\n return this.request<Deployment>(\"/deployments\", {\n method: \"POST\",\n body: JSON.stringify(request),\n });\n }\n\n /**\n * Get deployment by ID\n */\n async getDeployment(deploymentId: string): Promise<Deployment> {\n return this.request<Deployment>(`/deployments/${deploymentId}`);\n }\n\n /**\n * Stream deployment logs\n */\n async *streamDeploymentLogs(\n deploymentId: string\n ): AsyncGenerator<string, void, unknown> {\n const url = `${this.baseUrl}/deployments/${deploymentId}/logs/stream`;\n const headers: Record<string, string> = {};\n\n if (this.apiKey) {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n const response = await fetch(url, { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to stream logs: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error(\"Response body is null\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6);\n try {\n const parsed = JSON.parse(data);\n if (parsed.log) {\n yield parsed.log;\n } else if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n // Skip invalid JSON\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n /**\n * Create deployment with source code upload\n */\n async createDeploymentWithUpload(\n request: CreateDeploymentRequest,\n filePath: string\n ): Promise<Deployment> {\n const { readFile } = await import(\"node:fs/promises\");\n const { basename } = await import(\"node:path\");\n const { stat } = await import(\"node:fs/promises\");\n\n // Check file size (2MB max)\n const stats = await stat(filePath);\n const maxSize = 2 * 1024 * 1024; // 2MB\n if (stats.size > maxSize) {\n throw new Error(\n `File size (${(stats.size / 1024 / 1024).toFixed(2)}MB) exceeds maximum of 2MB`\n );\n }\n\n const fileBuffer = await readFile(filePath);\n const filename = basename(filePath);\n\n // Build form data with deployment request and file\n const formData = new FormData();\n const blob = new Blob([fileBuffer], { type: \"application/gzip\" });\n formData.append(\"source_file\", blob, filename);\n formData.append(\"name\", request.name);\n formData.append(\"source_type\", \"upload\");\n\n if (request.source.type === \"upload\") {\n formData.append(\"runtime\", request.source.runtime || \"node\");\n formData.append(\"port\", String(request.source.port || 3000));\n if (request.source.startCommand) {\n formData.append(\"startCommand\", request.source.startCommand);\n }\n if (request.source.buildCommand) {\n formData.append(\"buildCommand\", request.source.buildCommand);\n }\n if (request.source.env && Object.keys(request.source.env).length > 0) {\n formData.append(\"env\", JSON.stringify(request.source.env));\n }\n }\n\n if (request.customDomain) {\n formData.append(\"customDomain\", request.customDomain);\n }\n if (request.healthCheckPath) {\n formData.append(\"healthCheckPath\", request.healthCheckPath);\n }\n\n const url = `${this.baseUrl}/deployments`;\n const headers: Record<string, string> = {};\n\n if (this.apiKey) {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: formData,\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Deployment failed: ${error}`);\n }\n\n return response.json() as Promise<Deployment>;\n }\n}\n","import chalk from \"chalk\";\nimport { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\nimport { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport type { CreateDeploymentRequest, Deployment } from \"../utils/api.js\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport { isLoggedIn } from \"../utils/config.js\";\nimport { getGitInfo, isGitHubUrl } from \"../utils/git.js\";\nimport open from \"open\";\n\nconst execAsync = promisify(exec);\n\ninterface DeployOptions {\n open?: boolean;\n name?: string;\n port?: number;\n runtime?: \"node\" | \"python\";\n fromSource?: boolean;\n}\n\n/**\n * Check if directory looks like an MCP server project\n */\nasync function isMcpProject(cwd: string = process.cwd()): Promise<boolean> {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n // Check for common MCP indicators\n const hasMcpDeps =\n packageJson.dependencies?.[\"mcp-use\"] ||\n packageJson.dependencies?.[\"@modelcontextprotocol/sdk\"] ||\n packageJson.devDependencies?.[\"mcp-use\"] ||\n packageJson.devDependencies?.[\"@modelcontextprotocol/sdk\"];\n\n const hasMcpScripts =\n packageJson.scripts?.mcp || packageJson.scripts?.[\"mcp:dev\"];\n\n return !!(hasMcpDeps || hasMcpScripts);\n } catch {\n return false;\n }\n}\n\n/**\n * Get project name from package.json or directory name\n */\nasync function getProjectName(cwd: string = process.cwd()): Promise<string> {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n if (packageJson.name) {\n return packageJson.name;\n }\n } catch {\n // Fall through to directory name\n }\n\n return path.basename(cwd);\n}\n\n/**\n * Detect build command from package.json\n */\nasync function detectBuildCommand(\n cwd: string = process.cwd()\n): Promise<string | undefined> {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n if (packageJson.scripts?.build) {\n return \"npm run build\";\n }\n } catch {\n // No build command found\n }\n\n return undefined;\n}\n\n/**\n * Detect start command from package.json\n */\nasync function detectStartCommand(\n cwd: string = process.cwd()\n): Promise<string | undefined> {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n if (packageJson.scripts?.start) {\n return \"npm start\";\n }\n\n // Look for main entry point\n if (packageJson.main) {\n return `node ${packageJson.main}`;\n }\n } catch {\n // No start command found\n }\n\n return undefined;\n}\n\n/**\n * Detect runtime from project files\n */\nasync function detectRuntime(\n cwd: string = process.cwd()\n): Promise<\"node\" | \"python\"> {\n try {\n // Check for Python indicators\n const pythonFiles = [\"requirements.txt\", \"pyproject.toml\", \"setup.py\"];\n for (const file of pythonFiles) {\n try {\n await fs.access(path.join(cwd, file));\n return \"python\";\n } catch {\n continue;\n }\n }\n\n // Check for Node indicators (package.json)\n try {\n await fs.access(path.join(cwd, \"package.json\"));\n return \"node\";\n } catch {\n // Default to node\n }\n } catch {\n // Default to node\n }\n\n return \"node\";\n}\n\n/**\n * Prompt user for confirmation\n */\nasync function prompt(\n question: string,\n defaultValue: \"y\" | \"n\" = \"n\"\n): Promise<boolean> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n // Show default in the prompt\n const defaultIndicator = defaultValue === \"y\" ? \"Y/n\" : \"y/N\";\n const questionWithDefault = question.replace(\n /(\\(y\\/n\\):)/,\n `(${defaultIndicator}):`\n );\n\n return new Promise((resolve) => {\n rl.question(questionWithDefault, (answer) => {\n rl.close();\n const trimmedAnswer = answer.trim().toLowerCase();\n // If empty, use default\n if (trimmedAnswer === \"\") {\n resolve(defaultValue === \"y\");\n } else {\n resolve(trimmedAnswer === \"y\" || trimmedAnswer === \"yes\");\n }\n });\n });\n}\n\n/**\n * Create a tarball of the project, excluding common build artifacts and dependencies\n */\nasync function createTarball(cwd: string): Promise<string> {\n const tmpDir = os.tmpdir();\n const tarballPath = path.join(tmpDir, `mcp-deploy-${Date.now()}.tar.gz`);\n\n // Common patterns to exclude\n const excludePatterns = [\n \"node_modules\",\n \".git\",\n \"dist\",\n \"build\",\n \".next\",\n \".venv\",\n \"__pycache__\",\n \"*.pyc\",\n \".DS_Store\",\n \"._*\", // macOS resource fork files\n \".mcp-use\", // Build artifacts directory\n \".env\",\n \".env.local\",\n \"*.log\",\n ];\n\n // Build tar exclude flags\n // Use --exclude for each pattern (more reliable than single string)\n const excludeFlags = excludePatterns\n .map((pattern) => `--exclude=${pattern}`)\n .join(\" \");\n\n // Create tarball with explicit exclusions\n // Note: tar on macOS handles patterns differently, so we use both --exclude and --exclude-vcs-ignores\n const command = `tar ${excludeFlags} -czf \"${tarballPath}\" -C \"${cwd}\" . 2>&1 || true`;\n\n try {\n await execAsync(command);\n return tarballPath;\n } catch (error) {\n throw new Error(\n `Failed to create tarball: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n/**\n * Get file size in human-readable format\n */\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\n\n/**\n * Display deployment progress with spinner\n */\nasync function displayDeploymentProgress(\n api: McpUseAPI,\n deployment: Deployment\n): Promise<void> {\n const frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n let frameIndex = 0;\n let spinnerInterval: NodeJS.Timeout | null = null;\n let lastStep = \"\";\n\n const startSpinner = (message: string) => {\n if (spinnerInterval) {\n clearInterval(spinnerInterval);\n }\n\n // Clear the line\n process.stdout.write(\"\\r\\x1b[K\");\n\n spinnerInterval = setInterval(() => {\n const frame = frames[frameIndex];\n frameIndex = (frameIndex + 1) % frames.length;\n process.stdout.write(\n \"\\r\" + chalk.cyan(frame) + \" \" + chalk.gray(message)\n );\n }, 80);\n };\n\n const stopSpinner = () => {\n if (spinnerInterval) {\n clearInterval(spinnerInterval);\n spinnerInterval = null;\n process.stdout.write(\"\\r\\x1b[K\");\n }\n };\n\n console.log();\n startSpinner(\"Deploying...\");\n\n try {\n for await (const log of api.streamDeploymentLogs(deployment.id)) {\n try {\n const logData = JSON.parse(log);\n if (logData.step && logData.step !== lastStep) {\n lastStep = logData.step;\n const stepMessages: Record<string, string> = {\n clone: \"Preparing source code...\",\n analyze: \"Analyzing project...\",\n build: \"Building container image...\",\n deploy: \"Deploying to cloud...\",\n };\n const message = stepMessages[logData.step] || \"Deploying...\";\n startSpinner(message);\n }\n\n // Display the log line\n if (logData.line) {\n stopSpinner();\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n // Ignore non-JSON logs\n }\n }\n } catch (error) {\n // Stream ended or error occurred\n stopSpinner();\n }\n\n // Poll for final status with exponential backoff\n let checkCount = 0;\n const maxChecks = 60; // Max 60 checks\n let delay = 3000; // Start with 3 seconds\n const maxDelay = 10000; // Max 10 seconds between checks\n let lastDisplayedLogLength = 0;\n\n while (checkCount < maxChecks) {\n const currentDelay = delay;\n await new Promise((resolve) => setTimeout(resolve, currentDelay));\n\n const finalDeployment = await api.getDeployment(deployment.id);\n\n // Display new build logs if available\n if (\n finalDeployment.buildLogs &&\n finalDeployment.buildLogs.length > lastDisplayedLogLength\n ) {\n const newLogs = finalDeployment.buildLogs.substring(\n lastDisplayedLogLength\n );\n const logLines = newLogs.split(\"\\n\").filter((l) => l.trim());\n\n for (const line of logLines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n stopSpinner();\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n // Skip invalid JSON\n }\n }\n\n lastDisplayedLogLength = finalDeployment.buildLogs.length;\n }\n\n if (finalDeployment.status === \"running\") {\n const mcpUrl = `https://${finalDeployment.domain}/mcp`;\n const inspectorUrl = `https://inspector.mcp-use.com/inspector?autoConnect=${encodeURIComponent(mcpUrl)}`;\n\n console.log(chalk.green.bold(\"✓ Deployment successful!\\n\"));\n console.log(chalk.white(\"🌐 MCP Server URL:\"));\n console.log(chalk.cyan.bold(` ${mcpUrl}\\n`));\n\n console.log(chalk.white(\"🔍 Inspector URL:\"));\n console.log(chalk.cyan.bold(` ${inspectorUrl}\\n`));\n\n if (finalDeployment.customDomain) {\n const customMcpUrl = `https://${finalDeployment.customDomain}/mcp`;\n const customInspectorUrl = `https://inspector.mcp-use.com/inspect?autoConnect=${encodeURIComponent(customMcpUrl)}`;\n\n console.log(chalk.white(\"🔗 Custom Domain:\"));\n console.log(chalk.cyan.bold(` ${customMcpUrl}\\n`));\n console.log(chalk.white(\"🔍 Custom Inspector:\"));\n console.log(chalk.cyan.bold(` ${customInspectorUrl}\\n`));\n }\n\n console.log(\n chalk.gray(\"Deployment ID: \") + chalk.white(finalDeployment.id)\n );\n return;\n } else if (finalDeployment.status === \"failed\") {\n console.log(chalk.red.bold(\"✗ Deployment failed\\n\"));\n if (finalDeployment.error) {\n console.log(chalk.red(\"Error: \") + finalDeployment.error);\n }\n if (finalDeployment.buildLogs) {\n console.log(chalk.gray(\"\\nBuild logs:\"));\n // Parse and display build logs nicely\n try {\n const logs = finalDeployment.buildLogs\n .split(\"\\n\")\n .filter((l) => l.trim());\n for (const log of logs) {\n try {\n const logData = JSON.parse(log);\n if (logData.line) {\n console.log(chalk.gray(` ${logData.line}`));\n }\n } catch {\n console.log(chalk.gray(` ${log}`));\n }\n }\n } catch {\n console.log(chalk.gray(finalDeployment.buildLogs));\n }\n }\n process.exit(1);\n } else if (finalDeployment.status === \"building\") {\n // Still building, wait and check again with exponential backoff\n startSpinner(\"Building and deploying...\");\n checkCount++;\n // Exponential backoff: increase delay up to maxDelay\n delay = Math.min(delay * 1.2, maxDelay);\n } else {\n console.log(\n chalk.yellow(\"⚠️ Deployment status: \") + finalDeployment.status\n );\n return;\n }\n }\n\n // Timeout\n stopSpinner();\n console.log(chalk.yellow(\"⚠️ Deployment is taking longer than expected.\"));\n console.log(\n chalk.gray(\"Check status with: \") +\n chalk.white(`mcp-use status ${deployment.id}`)\n );\n}\n\n/**\n * Deploy command - deploys MCP server to mcp-use cloud\n */\nexport async function deployCommand(options: DeployOptions): Promise<void> {\n try {\n const cwd = process.cwd();\n\n // Check if logged in\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n console.log(chalk.cyan.bold(\"🚀 Deploying to mcp-use cloud...\\n\"));\n\n // Check if this is an MCP project\n const isMcp = await isMcpProject(cwd);\n if (!isMcp) {\n console.log(\n chalk.yellow(\n \"⚠️ This doesn't appear to be an MCP server project (no mcp-use or @modelcontextprotocol/sdk dependency found).\"\n )\n );\n const shouldContinue = await prompt(\n chalk.white(\"Continue anyway? (y/n): \")\n );\n if (!shouldContinue) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n console.log();\n }\n\n // Get git info\n const gitInfo = await getGitInfo(cwd);\n\n if (\n !options.fromSource &&\n gitInfo.isGitRepo &&\n gitInfo.remoteUrl &&\n isGitHubUrl(gitInfo.remoteUrl)\n ) {\n // GitHub repo detected\n if (!gitInfo.owner || !gitInfo.repo) {\n console.log(\n chalk.red(\n \"✗ Could not parse GitHub repository information from remote URL.\"\n )\n );\n process.exit(1);\n }\n\n console.log(chalk.white(\"GitHub repository detected:\"));\n console.log(\n chalk.gray(` Repository: `) +\n chalk.cyan(`${gitInfo.owner}/${gitInfo.repo}`)\n );\n console.log(\n chalk.gray(` Branch: `) + chalk.cyan(gitInfo.branch || \"main\")\n );\n if (gitInfo.commitSha) {\n console.log(\n chalk.gray(` Commit: `) +\n chalk.gray(gitInfo.commitSha.substring(0, 7))\n );\n }\n if (gitInfo.commitMessage) {\n console.log(\n chalk.gray(` Message: `) +\n chalk.gray(gitInfo.commitMessage.split(\"\\n\")[0])\n );\n }\n console.log();\n\n // Confirm deployment\n const shouldDeploy = await prompt(\n chalk.white(\n `Deploy from GitHub repository ${gitInfo.owner}/${gitInfo.repo}? (y/n): `\n )\n );\n\n if (!shouldDeploy) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n\n // Detect project settings\n const projectName = options.name || (await getProjectName(cwd));\n const runtime = options.runtime || (await detectRuntime(cwd));\n const port = options.port || 3000;\n const buildCommand = await detectBuildCommand(cwd);\n const startCommand = await detectStartCommand(cwd);\n\n console.log();\n console.log(chalk.white(\"Deployment configuration:\"));\n console.log(chalk.gray(` Name: `) + chalk.cyan(projectName));\n console.log(chalk.gray(` Runtime: `) + chalk.cyan(runtime));\n console.log(chalk.gray(` Port: `) + chalk.cyan(port));\n if (buildCommand) {\n console.log(chalk.gray(` Build command: `) + chalk.cyan(buildCommand));\n }\n if (startCommand) {\n console.log(chalk.gray(` Start command: `) + chalk.cyan(startCommand));\n }\n console.log();\n\n // Create deployment request\n const deploymentRequest: CreateDeploymentRequest = {\n name: projectName,\n source: {\n type: \"github\",\n repo: `${gitInfo.owner}/${gitInfo.repo}`,\n branch: gitInfo.branch || \"main\",\n runtime,\n port,\n buildCommand,\n startCommand,\n },\n healthCheckPath: \"/healthz\",\n };\n\n // Create deployment\n console.log(chalk.gray(\"Creating deployment...\"));\n const api = await McpUseAPI.create();\n const deployment = await api.createDeployment(deploymentRequest);\n\n console.log(\n chalk.green(\"✓ Deployment created: \") + chalk.gray(deployment.id)\n );\n\n // Display progress\n await displayDeploymentProgress(api, deployment);\n\n // Open in browser if requested\n if (options.open && deployment.domain) {\n console.log();\n console.log(chalk.gray(\"Opening deployment in browser...\"));\n await open(`https://${deployment.domain}`);\n }\n } else {\n // Not a GitHub repo or --from-source flag - deploy from source upload\n if (options.fromSource) {\n console.log(\n chalk.white(\"📦 Deploying from local source code (--from-source)...\")\n );\n } else {\n console.log(\n chalk.yellow(\n \"⚠️ This is not a GitHub repository or no remote is configured.\"\n )\n );\n console.log(chalk.white(\"Deploying from local source code instead...\"));\n }\n console.log();\n\n // Detect project settings\n const projectName = options.name || (await getProjectName(cwd));\n const runtime = options.runtime || (await detectRuntime(cwd));\n const port = options.port || 3000;\n const buildCommand = await detectBuildCommand(cwd);\n const startCommand = await detectStartCommand(cwd);\n\n console.log(chalk.white(\"Deployment configuration:\"));\n console.log(chalk.gray(` Name: `) + chalk.cyan(projectName));\n console.log(chalk.gray(` Runtime: `) + chalk.cyan(runtime));\n console.log(chalk.gray(` Port: `) + chalk.cyan(port));\n if (buildCommand) {\n console.log(chalk.gray(` Build command: `) + chalk.cyan(buildCommand));\n }\n if (startCommand) {\n console.log(chalk.gray(` Start command: `) + chalk.cyan(startCommand));\n }\n console.log();\n\n // Confirm deployment (default to yes)\n const shouldDeploy = await prompt(\n chalk.white(\"Deploy from local source? (y/n): \"),\n \"y\"\n );\n\n if (!shouldDeploy) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n\n // Create tarball\n console.log();\n console.log(chalk.gray(\"Packaging source code...\"));\n const tarballPath = await createTarball(cwd);\n const stats = await fs.stat(tarballPath);\n console.log(\n chalk.green(\"✓ Packaged: \") + chalk.gray(formatFileSize(stats.size))\n );\n\n // Check file size (2MB max)\n const maxSize = 2 * 1024 * 1024; // 2MB\n if (stats.size > maxSize) {\n console.log(\n chalk.red(\n `✗ File size (${formatFileSize(stats.size)}) exceeds maximum of 2MB`\n )\n );\n await fs.unlink(tarballPath);\n process.exit(1);\n }\n\n // Create deployment request\n const deploymentRequest: CreateDeploymentRequest = {\n name: projectName,\n source: {\n type: \"upload\",\n runtime,\n port,\n buildCommand,\n startCommand,\n },\n healthCheckPath: \"/healthz\",\n };\n\n // Create deployment with file upload\n console.log(chalk.gray(\"Creating deployment...\"));\n const api = await McpUseAPI.create();\n const deployment = await api.createDeploymentWithUpload(\n deploymentRequest,\n tarballPath\n );\n\n // Clean up tarball\n await fs.unlink(tarballPath);\n\n console.log(\n chalk.green(\"✓ Deployment created: \") + chalk.gray(deployment.id)\n );\n\n // Display progress\n await displayDeploymentProgress(api, deployment);\n\n // Open in browser if requested\n if (options.open && deployment.domain) {\n console.log();\n console.log(chalk.gray(\"Opening deployment in browser...\"));\n await open(`https://${deployment.domain}`);\n }\n }\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Deployment failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n","import { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execAsync = promisify(exec);\n\nexport interface GitInfo {\n isGitRepo: boolean;\n remoteUrl?: string;\n owner?: string;\n repo?: string;\n branch?: string;\n commitSha?: string;\n commitMessage?: string;\n}\n\n/**\n * Execute git command\n */\nasync function gitCommand(\n command: string,\n cwd: string = process.cwd()\n): Promise<string | null> {\n try {\n const { stdout } = await execAsync(command, { cwd });\n return stdout.trim();\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Check if directory is a git repository\n */\nexport async function isGitRepo(cwd: string = process.cwd()): Promise<boolean> {\n const result = await gitCommand(\"git rev-parse --is-inside-work-tree\", cwd);\n return result === \"true\";\n}\n\n/**\n * Get git remote URL\n */\nexport async function getRemoteUrl(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git config --get remote.origin.url\", cwd);\n}\n\n/**\n * Parse GitHub owner and repo from remote URL\n */\nexport function parseGitHubUrl(\n url: string\n): { owner: string; repo: string } | null {\n // Handle both SSH and HTTPS URLs\n // SSH: git@github.com:owner/repo.git\n // HTTPS: https://github.com/owner/repo.git\n const sshMatch = url.match(/git@github\\.com:([^/]+)\\/(.+?)(?:\\.git)?$/);\n const httpsMatch = url.match(\n /https:\\/\\/github\\.com\\/([^/]+)\\/(.+?)(?:\\.git)?$/\n );\n\n const match = sshMatch || httpsMatch;\n if (!match) return null;\n\n return {\n owner: match[1],\n repo: match[2],\n };\n}\n\n/**\n * Get current branch\n */\nexport async function getCurrentBranch(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git rev-parse --abbrev-ref HEAD\", cwd);\n}\n\n/**\n * Get current commit SHA\n */\nexport async function getCommitSha(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git rev-parse HEAD\", cwd);\n}\n\n/**\n * Get current commit message\n */\nexport async function getCommitMessage(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git log -1 --pretty=%B\", cwd);\n}\n\n/**\n * Get all git info for current directory\n */\nexport async function getGitInfo(\n cwd: string = process.cwd()\n): Promise<GitInfo> {\n const isRepo = await isGitRepo(cwd);\n\n if (!isRepo) {\n return { isGitRepo: false };\n }\n\n const remoteUrl = await getRemoteUrl(cwd);\n const branch = await getCurrentBranch(cwd);\n const commitSha = await getCommitSha(cwd);\n const commitMessage = await getCommitMessage(cwd);\n\n let owner: string | undefined;\n let repo: string | undefined;\n\n if (remoteUrl) {\n const parsed = parseGitHubUrl(remoteUrl);\n if (parsed) {\n owner = parsed.owner;\n repo = parsed.repo;\n }\n }\n\n return {\n isGitRepo: true,\n remoteUrl: remoteUrl || undefined,\n owner,\n repo,\n branch: branch || undefined,\n commitSha: commitSha || undefined,\n commitMessage: commitMessage || undefined,\n };\n}\n\n/**\n * Check if remote is a GitHub URL\n */\nexport function isGitHubUrl(url: string): boolean {\n try {\n // Handle HTTP(S) URLs\n const parsedUrl = new URL(url);\n return (\n parsedUrl.hostname === \"github.com\" ||\n parsedUrl.hostname === \"www.github.com\"\n );\n } catch {\n // Handle SSH/shortened git URLs: git@github.com:user/repo.git\n // Extract the host before the \":\" or \"/\" (if git@host:repo or git@host/repo)\n const sshMatch = url.match(/^git@([^:/]+)[:/]/);\n if (sshMatch) {\n const host = sshMatch[1];\n return host === \"github.com\" || host === \"www.github.com\";\n }\n }\n return false;\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { createInterface } from \"node:readline\";\nimport { MCPClient } from \"mcp-use/client\";\nimport type { MCPSession } from \"mcp-use/client\";\nimport {\n getActiveSession,\n getSession,\n listAllSessions,\n saveSession,\n setActiveSession,\n updateSessionInfo,\n} from \"../utils/session-storage.js\";\nimport {\n formatError,\n formatHeader,\n formatInfo,\n formatJson,\n formatKeyValue,\n formatPromptMessages,\n formatResourceContent,\n formatSchema,\n formatSuccess,\n formatTable,\n formatToolCall,\n formatWarning,\n} from \"../utils/format.js\";\n\n// In-memory session map\nconst activeSessions = new Map<\n string,\n { client: MCPClient; session: MCPSession }\n>();\n\n/**\n * Get or restore a session by name\n */\nasync function getOrRestoreSession(\n sessionName: string | null\n): Promise<{ name: string; session: MCPSession } | null> {\n // If no session name provided, use active session\n if (!sessionName) {\n const active = await getActiveSession();\n if (!active) {\n console.error(\n formatError(\"No active session. Connect to a server first.\")\n );\n console.error(\n formatInfo(\"Use: npx mcp-use client connect <url> --name <name>\")\n );\n return null;\n }\n sessionName = active.name;\n }\n\n // Check if session is already connected in memory\n if (activeSessions.has(sessionName)) {\n const { session } = activeSessions.get(sessionName)!;\n return { name: sessionName, session };\n }\n\n // Try to restore from storage\n const config = await getSession(sessionName);\n if (!config) {\n console.error(formatError(`Session '${sessionName}' not found`));\n return null;\n }\n\n // Reconnect\n try {\n const client = new MCPClient();\n\n if (config.type === \"http\") {\n client.addServer(sessionName, {\n url: config.url!,\n headers: config.authToken\n ? { Authorization: `Bearer ${config.authToken}` }\n : undefined,\n });\n } else if (config.type === \"stdio\") {\n client.addServer(sessionName, {\n command: config.command!,\n args: config.args || [],\n env: config.env,\n });\n } else {\n console.error(formatError(`Unknown session type: ${config.type}`));\n return null;\n }\n\n const session = await client.createSession(sessionName);\n activeSessions.set(sessionName, { client, session });\n\n console.error(formatInfo(`Reconnected to session '${sessionName}'`));\n return { name: sessionName, session };\n } catch (error: any) {\n console.error(formatError(`Failed to restore session: ${error.message}`));\n return null;\n }\n}\n\n/**\n * Connect command\n */\nexport async function connectCommand(\n urlOrCommand: string,\n options: {\n name?: string;\n stdio?: boolean;\n auth?: string;\n }\n): Promise<void> {\n try {\n const sessionName = options.name || `session-${Date.now()}`;\n\n const client = new MCPClient();\n let session: MCPSession;\n\n if (options.stdio) {\n // Parse stdio command\n const parts = urlOrCommand.split(\" \");\n const command = parts[0];\n const args = parts.slice(1);\n\n console.error(\n formatInfo(`Connecting to stdio server: ${command} ${args.join(\" \")}`)\n );\n\n client.addServer(sessionName, {\n command,\n args,\n });\n\n session = await client.createSession(sessionName);\n\n // Save session config\n await saveSession(sessionName, {\n type: \"stdio\",\n command,\n args,\n lastUsed: new Date().toISOString(),\n });\n } else {\n // HTTP connection\n console.error(formatInfo(`Connecting to ${urlOrCommand}...`));\n\n client.addServer(sessionName, {\n url: urlOrCommand,\n headers: options.auth\n ? { Authorization: `Bearer ${options.auth}` }\n : undefined,\n });\n\n session = await client.createSession(sessionName);\n\n // Save session config\n await saveSession(sessionName, {\n type: \"http\",\n url: urlOrCommand,\n authToken: options.auth,\n lastUsed: new Date().toISOString(),\n });\n }\n\n // Store in memory\n activeSessions.set(sessionName, { client, session });\n\n // Update session info\n const serverInfo = session.serverInfo;\n const capabilities = session.serverCapabilities;\n\n if (serverInfo) {\n await updateSessionInfo(sessionName, serverInfo, capabilities);\n }\n\n // Display connection info\n console.log(formatSuccess(`Connected to ${sessionName}`));\n\n if (serverInfo) {\n console.log(\"\");\n console.log(formatHeader(\"Server Information:\"));\n console.log(\n formatKeyValue({\n Name: serverInfo.name,\n Version: serverInfo.version || \"unknown\",\n })\n );\n }\n\n if (capabilities) {\n console.log(\"\");\n console.log(formatHeader(\"Capabilities:\"));\n const caps = Object.keys(capabilities).join(\", \");\n console.log(` ${caps || \"none\"}`);\n }\n\n // Count available resources\n const tools = session.tools;\n console.log(\"\");\n console.log(\n formatInfo(\n `Available: ${tools.length} tool${tools.length !== 1 ? \"s\" : \"\"}`\n )\n );\n } catch (error: any) {\n console.error(formatError(`Connection failed: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Disconnect command\n */\nexport async function disconnectCommand(\n sessionName?: string,\n options?: { all?: boolean }\n): Promise<void> {\n try {\n if (options?.all) {\n // Disconnect all sessions\n for (const [name, { client }] of activeSessions.entries()) {\n await client.closeAllSessions();\n activeSessions.delete(name);\n console.log(formatSuccess(`Disconnected from ${name}`));\n }\n return;\n }\n\n if (!sessionName) {\n const active = await getActiveSession();\n if (!active) {\n console.error(formatError(\"No active session to disconnect\"));\n return;\n }\n sessionName = active.name;\n }\n\n const sessionData = activeSessions.get(sessionName);\n if (sessionData) {\n await sessionData.client.closeAllSessions();\n activeSessions.delete(sessionName);\n console.log(formatSuccess(`Disconnected from ${sessionName}`));\n } else {\n console.log(formatInfo(`Session '${sessionName}' is not connected`));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to disconnect: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List sessions command\n */\nexport async function listSessionsCommand(): Promise<void> {\n try {\n const sessions = await listAllSessions();\n\n if (sessions.length === 0) {\n console.log(formatInfo(\"No saved sessions\"));\n console.log(\n formatInfo(\"Connect to a server with: npx mcp-use client connect <url>\")\n );\n return;\n }\n\n console.log(formatHeader(\"Saved Sessions:\"));\n console.log(\"\");\n\n const tableData = sessions.map((s) => ({\n name: s.isActive ? chalk.green.bold(`${s.name} *`) : s.name,\n type: s.config.type,\n target:\n s.config.type === \"http\"\n ? s.config.url || \"\"\n : `${s.config.command} ${(s.config.args || []).join(\" \")}`,\n server: s.config.serverInfo?.name || \"unknown\",\n status: activeSessions.has(s.name)\n ? chalk.green(\"connected\")\n : chalk.gray(\"disconnected\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Name\" },\n { key: \"type\", header: \"Type\" },\n { key: \"target\", header: \"Target\", width: 40 },\n { key: \"server\", header: \"Server\" },\n { key: \"status\", header: \"Status\" },\n ])\n );\n\n console.log(\"\");\n console.log(chalk.gray(\"* = active session\"));\n } catch (error: any) {\n console.error(formatError(`Failed to list sessions: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Switch session command\n */\nexport async function switchSessionCommand(name: string): Promise<void> {\n try {\n await setActiveSession(name);\n console.log(formatSuccess(`Switched to session '${name}'`));\n } catch (error: any) {\n console.error(formatError(`Failed to switch session: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List tools command\n */\nexport async function listToolsCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const tools = await session.listTools();\n\n if (options.json) {\n console.log(formatJson(tools));\n return;\n }\n\n if (tools.length === 0) {\n console.log(formatInfo(\"No tools available\"));\n return;\n }\n\n console.log(formatHeader(`Available Tools (${tools.length}):`));\n console.log(\"\");\n\n const tableData = tools.map((tool) => ({\n name: chalk.bold(tool.name),\n description: tool.description || chalk.gray(\"No description\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Tool\", width: 25 },\n { key: \"description\", header: \"Description\", width: 50 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list tools: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Describe tool command\n */\nexport async function describeToolCommand(\n toolName: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const tools = session.tools;\n const tool = tools.find((t) => t.name === toolName);\n\n if (!tool) {\n console.error(formatError(`Tool '${toolName}' not found`));\n console.log(\"\");\n console.log(formatInfo(\"Available tools:\"));\n tools.forEach((t) => console.log(` • ${t.name}`));\n return;\n }\n\n console.log(formatHeader(`Tool: ${tool.name}`));\n console.log(\"\");\n\n if (tool.description) {\n console.log(tool.description);\n console.log(\"\");\n }\n\n if (tool.inputSchema) {\n console.log(formatHeader(\"Input Schema:\"));\n console.log(formatSchema(tool.inputSchema));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to describe tool: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Call tool command\n */\nexport async function callToolCommand(\n toolName: string,\n argsJson?: string,\n options?: { session?: string; timeout?: number; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options?.session || null);\n if (!result) return;\n\n const { session } = result;\n\n // Parse arguments\n let args: Record<string, any> = {};\n if (argsJson) {\n try {\n args = JSON.parse(argsJson);\n } catch (error) {\n console.error(formatError(\"Invalid JSON arguments\"));\n return;\n }\n } else {\n // Check if tool requires arguments\n const tools = session.tools;\n const tool = tools.find((t) => t.name === toolName);\n\n if (tool?.inputSchema?.required && tool.inputSchema.required.length > 0) {\n console.error(\n formatError(\n \"This tool requires arguments. Provide them as a JSON string.\"\n )\n );\n console.log(\"\");\n console.log(formatInfo(\"Example:\"));\n console.log(\n ` npx mcp-use client tools call ${toolName} '{\"param\": \"value\"}'`\n );\n console.log(\"\");\n console.log(formatInfo(\"Tool schema:\"));\n console.log(formatSchema(tool.inputSchema));\n return;\n }\n }\n\n // Call the tool\n console.error(formatInfo(`Calling tool '${toolName}'...`));\n const callResult = await session.callTool(toolName, args, {\n timeout: options?.timeout,\n });\n\n if (options?.json) {\n console.log(formatJson(callResult));\n } else {\n console.log(formatToolCall(callResult));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to call tool: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List resources command\n */\nexport async function listResourcesCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const resourcesResult = await session.listAllResources();\n const resources = resourcesResult.resources;\n\n if (options.json) {\n console.log(formatJson(resources));\n return;\n }\n\n if (resources.length === 0) {\n console.log(formatInfo(\"No resources available\"));\n return;\n }\n\n console.log(formatHeader(`Available Resources (${resources.length}):`));\n console.log(\"\");\n\n const tableData = resources.map((resource) => ({\n uri: resource.uri,\n name: resource.name || chalk.gray(\"(no name)\"),\n type: resource.mimeType || chalk.gray(\"unknown\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"uri\", header: \"URI\", width: 40 },\n { key: \"name\", header: \"Name\", width: 20 },\n { key: \"type\", header: \"Type\", width: 15 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list resources: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Read resource command\n */\nexport async function readResourceCommand(\n uri: string,\n options: { session?: string; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n console.error(formatInfo(`Reading resource: ${uri}`));\n const resource = await session.readResource(uri);\n\n if (options.json) {\n console.log(formatJson(resource));\n } else {\n console.log(formatResourceContent(resource));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to read resource: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Subscribe to resource command\n */\nexport async function subscribeResourceCommand(\n uri: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n await session.subscribeToResource(uri);\n console.log(formatSuccess(`Subscribed to resource: ${uri}`));\n\n // Set up notification handler\n session.on(\"notification\", async (notification) => {\n if (notification.method === \"notifications/resources/updated\") {\n console.log(\"\");\n console.log(formatInfo(\"Resource updated:\"));\n console.log(formatJson(notification.params));\n }\n });\n\n console.log(formatInfo(\"Listening for updates... (Press Ctrl+C to stop)\"));\n\n // Keep process alive\n await new Promise(() => {});\n } catch (error: any) {\n console.error(\n formatError(`Failed to subscribe to resource: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * Unsubscribe from resource command\n */\nexport async function unsubscribeResourceCommand(\n uri: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n await session.unsubscribeFromResource(uri);\n console.log(formatSuccess(`Unsubscribed from resource: ${uri}`));\n } catch (error: any) {\n console.error(\n formatError(`Failed to unsubscribe from resource: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * List prompts command\n */\nexport async function listPromptsCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const promptsResult = await session.listPrompts();\n const prompts = promptsResult.prompts;\n\n if (options.json) {\n console.log(formatJson(prompts));\n return;\n }\n\n if (prompts.length === 0) {\n console.log(formatInfo(\"No prompts available\"));\n return;\n }\n\n console.log(formatHeader(`Available Prompts (${prompts.length}):`));\n console.log(\"\");\n\n const tableData = prompts.map((prompt) => ({\n name: chalk.bold(prompt.name),\n description: prompt.description || chalk.gray(\"No description\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Prompt\", width: 25 },\n { key: \"description\", header: \"Description\", width: 50 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list prompts: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Get prompt command\n */\nexport async function getPromptCommand(\n promptName: string,\n argsJson?: string,\n options?: { session?: string; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options?.session || null);\n if (!result) return;\n\n const { session } = result;\n\n // Parse arguments\n let args: Record<string, any> = {};\n if (argsJson) {\n try {\n args = JSON.parse(argsJson);\n } catch (error) {\n console.error(formatError(\"Invalid JSON arguments\"));\n return;\n }\n }\n\n console.error(formatInfo(`Getting prompt '${promptName}'...`));\n const prompt = await session.getPrompt(promptName, args);\n\n if (options?.json) {\n console.log(formatJson(prompt));\n } else {\n console.log(formatHeader(`Prompt: ${promptName}`));\n console.log(\"\");\n\n if (prompt.description) {\n console.log(prompt.description);\n console.log(\"\");\n }\n\n if (prompt.messages) {\n console.log(formatHeader(\"Messages:\"));\n console.log(\"\");\n console.log(formatPromptMessages(prompt.messages));\n }\n }\n } catch (error: any) {\n console.error(formatError(`Failed to get prompt: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Interactive mode command\n */\nexport async function interactiveCommand(options: {\n session?: string;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { name: sessionName, session } = result;\n\n console.log(formatHeader(\"MCP Interactive Mode\"));\n console.log(\"\");\n console.log(formatInfo(`Connected to: ${sessionName}`));\n console.log(\"\");\n console.log(chalk.gray(\"Commands:\"));\n console.log(chalk.gray(\" tools list - List available tools\"));\n console.log(\n chalk.gray(\n \" tools call <name> - Call a tool (will prompt for args)\"\n )\n );\n console.log(chalk.gray(\" tools describe <name> - Show tool details\"));\n console.log(\n chalk.gray(\" resources list - List available resources\")\n );\n console.log(chalk.gray(\" resources read <uri> - Read a resource\"));\n console.log(\n chalk.gray(\" prompts list - List available prompts\")\n );\n console.log(chalk.gray(\" prompts get <name> - Get a prompt\"));\n console.log(chalk.gray(\" sessions list - List all sessions\"));\n console.log(\n chalk.gray(\" sessions switch <name> - Switch to another session\")\n );\n console.log(\n chalk.gray(\" exit, quit - Exit interactive mode\")\n );\n console.log(\"\");\n\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: chalk.cyan(\"mcp> \"),\n });\n\n rl.prompt();\n\n rl.on(\"line\", async (line) => {\n const trimmed = line.trim();\n\n if (!trimmed) {\n rl.prompt();\n return;\n }\n\n if (trimmed === \"exit\" || trimmed === \"quit\") {\n console.log(formatInfo(\"Goodbye!\"));\n rl.close();\n process.exit(0);\n }\n\n const parts = trimmed.split(\" \");\n const scope = parts[0];\n const command = parts[1];\n const arg = parts[2];\n\n try {\n if (scope === \"tools\") {\n if (command === \"list\") {\n const tools = await session.listTools();\n console.log(\n formatInfo(\n `Available tools: ${tools.map((t) => t.name).join(\", \")}`\n )\n );\n } else if (command === \"call\" && arg) {\n // Prompt for arguments\n rl.question(\n \"Arguments (JSON, or press Enter for none): \",\n async (argsInput) => {\n try {\n const args = argsInput.trim() ? JSON.parse(argsInput) : {};\n const result = await session.callTool(arg, args);\n console.log(formatToolCall(result));\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n rl.prompt();\n }\n );\n return;\n } else if (command === \"describe\" && arg) {\n const tools = session.tools;\n const tool = tools.find((t) => t.name === arg);\n if (tool) {\n console.log(formatHeader(`Tool: ${tool.name}`));\n if (tool.description) console.log(tool.description);\n if (tool.inputSchema) {\n console.log(\"\");\n console.log(formatSchema(tool.inputSchema));\n }\n } else {\n console.error(formatError(`Tool '${arg}' not found`));\n }\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: tools list, tools call <name>, tools describe <name>\"\n )\n );\n }\n } else if (scope === \"resources\") {\n if (command === \"list\") {\n const result = await session.listAllResources();\n const resources = result.resources;\n console.log(\n formatInfo(\n `Available resources: ${resources.map((r) => r.uri).join(\", \")}`\n )\n );\n } else if (command === \"read\" && arg) {\n const resource = await session.readResource(arg);\n console.log(formatResourceContent(resource));\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: resources list, resources read <uri>\"\n )\n );\n }\n } else if (scope === \"prompts\") {\n if (command === \"list\") {\n const result = await session.listPrompts();\n const prompts = result.prompts;\n console.log(\n formatInfo(\n `Available prompts: ${prompts.map((p) => p.name).join(\", \")}`\n )\n );\n } else if (command === \"get\" && arg) {\n rl.question(\n \"Arguments (JSON, or press Enter for none): \",\n async (argsInput) => {\n try {\n const args = argsInput.trim() ? JSON.parse(argsInput) : {};\n const prompt = await session.getPrompt(arg, args);\n console.log(formatPromptMessages(prompt.messages));\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n rl.prompt();\n }\n );\n return;\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: prompts list, prompts get <name>\"\n )\n );\n }\n } else if (scope === \"sessions\") {\n if (command === \"list\") {\n await listSessionsCommand();\n } else if (command === \"switch\" && arg) {\n console.log(\n formatWarning(\n \"Session switching in interactive mode will be available in a future version\"\n )\n );\n } else {\n console.error(formatError(\"Invalid command. Try: sessions list\"));\n }\n } else {\n console.error(\n formatError(\n \"Unknown command. Type a valid scope: tools, resources, prompts, sessions\"\n )\n );\n }\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n\n rl.prompt();\n });\n\n rl.on(\"close\", () => {\n console.log(\"\");\n console.log(formatInfo(\"Goodbye!\"));\n process.exit(0);\n });\n } catch (error: any) {\n console.error(\n formatError(`Failed to start interactive mode: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * Create the client command group\n */\nexport function createClientCommand(): Command {\n const clientCommand = new Command(\"client\").description(\n \"Interactive MCP client for terminal usage\"\n );\n\n // Connection commands\n clientCommand\n .command(\"connect <url>\")\n .description(\"Connect to an MCP server\")\n .option(\"--name <name>\", \"Session name\")\n .option(\"--stdio\", \"Use stdio connector instead of HTTP\")\n .option(\"--auth <token>\", \"Authentication token\")\n .action(connectCommand);\n\n clientCommand\n .command(\"disconnect [session]\")\n .description(\"Disconnect from a session\")\n .option(\"--all\", \"Disconnect all sessions\")\n .action(disconnectCommand);\n\n // Sessions scope\n const sessionsCommand = new Command(\"sessions\").description(\n \"Manage CLI sessions\"\n );\n sessionsCommand\n .command(\"list\")\n .description(\"List all saved sessions\")\n .action(listSessionsCommand);\n sessionsCommand\n .command(\"switch <name>\")\n .description(\"Switch to a different session\")\n .action(switchSessionCommand);\n clientCommand.addCommand(sessionsCommand);\n\n // Tools scope\n const toolsCommand = new Command(\"tools\").description(\n \"Interact with MCP tools\"\n );\n toolsCommand\n .command(\"list\")\n .description(\"List available tools\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listToolsCommand);\n toolsCommand\n .command(\"call <name> [args]\")\n .description(\"Call a tool with arguments (JSON string)\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--timeout <ms>\", \"Request timeout in milliseconds\", parseInt)\n .option(\"--json\", \"Output as JSON\")\n .action(callToolCommand);\n toolsCommand\n .command(\"describe <name>\")\n .description(\"Show tool details and schema\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(describeToolCommand);\n clientCommand.addCommand(toolsCommand);\n\n // Resources scope\n const resourcesCommand = new Command(\"resources\").description(\n \"Interact with MCP resources\"\n );\n resourcesCommand\n .command(\"list\")\n .description(\"List available resources\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listResourcesCommand);\n resourcesCommand\n .command(\"read <uri>\")\n .description(\"Read a resource by URI\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(readResourceCommand);\n resourcesCommand\n .command(\"subscribe <uri>\")\n .description(\"Subscribe to resource updates\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(subscribeResourceCommand);\n resourcesCommand\n .command(\"unsubscribe <uri>\")\n .description(\"Unsubscribe from resource updates\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(unsubscribeResourceCommand);\n clientCommand.addCommand(resourcesCommand);\n\n // Prompts scope\n const promptsCommand = new Command(\"prompts\").description(\n \"Interact with MCP prompts\"\n );\n promptsCommand\n .command(\"list\")\n .description(\"List available prompts\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listPromptsCommand);\n promptsCommand\n .command(\"get <name> [args]\")\n .description(\"Get a prompt with arguments (JSON string)\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(getPromptCommand);\n clientCommand.addCommand(promptsCommand);\n\n // Interactive mode\n clientCommand\n .command(\"interactive\")\n .description(\"Start interactive REPL mode\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(interactiveCommand);\n\n return clientCommand;\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\n\nexport interface SessionConfig {\n type: \"http\" | \"stdio\";\n url?: string;\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n authToken?: string;\n lastUsed: string;\n serverInfo?: {\n name: string;\n version?: string;\n };\n capabilities?: Record<string, unknown>;\n}\n\nexport interface SessionStorage {\n activeSession: string | null;\n sessions: Record<string, SessionConfig>;\n}\n\nconst SESSION_FILE_PATH = join(homedir(), \".mcp-use\", \"cli-sessions.json\");\n\n/**\n * Ensure the session storage directory exists\n */\nasync function ensureSessionDir(): Promise<void> {\n const dir = join(homedir(), \".mcp-use\");\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n}\n\n/**\n * Load persisted sessions from disk\n */\nexport async function loadSessions(): Promise<SessionStorage> {\n try {\n await ensureSessionDir();\n\n if (!existsSync(SESSION_FILE_PATH)) {\n return { activeSession: null, sessions: {} };\n }\n\n const content = await readFile(SESSION_FILE_PATH, \"utf-8\");\n return JSON.parse(content);\n } catch (error) {\n // If file doesn't exist or is invalid, return empty storage\n return { activeSession: null, sessions: {} };\n }\n}\n\n/**\n * Save sessions to disk\n */\nasync function saveSessions(storage: SessionStorage): Promise<void> {\n await ensureSessionDir();\n await writeFile(SESSION_FILE_PATH, JSON.stringify(storage, null, 2), \"utf-8\");\n}\n\n/**\n * Save or update a session configuration\n */\nexport async function saveSession(\n name: string,\n config: SessionConfig\n): Promise<void> {\n const storage = await loadSessions();\n storage.sessions[name] = {\n ...config,\n lastUsed: new Date().toISOString(),\n };\n\n // Set as active session if no active session exists\n if (!storage.activeSession) {\n storage.activeSession = name;\n }\n\n await saveSessions(storage);\n}\n\n/**\n * Remove a session from storage\n */\nexport async function removeSession(name: string): Promise<void> {\n const storage = await loadSessions();\n delete storage.sessions[name];\n\n // Clear active session if it was the one removed\n if (storage.activeSession === name) {\n // Set to first available session or null\n const sessionNames = Object.keys(storage.sessions);\n storage.activeSession = sessionNames.length > 0 ? sessionNames[0] : null;\n }\n\n await saveSessions(storage);\n}\n\n/**\n * Get the currently active session name\n */\nexport async function getActiveSessionName(): Promise<string | null> {\n const storage = await loadSessions();\n return storage.activeSession;\n}\n\n/**\n * Get the active session configuration\n */\nexport async function getActiveSession(): Promise<{\n name: string;\n config: SessionConfig;\n} | null> {\n const storage = await loadSessions();\n if (!storage.activeSession || !storage.sessions[storage.activeSession]) {\n return null;\n }\n\n return {\n name: storage.activeSession,\n config: storage.sessions[storage.activeSession],\n };\n}\n\n/**\n * Get a specific session configuration by name\n */\nexport async function getSession(name: string): Promise<SessionConfig | null> {\n const storage = await loadSessions();\n return storage.sessions[name] || null;\n}\n\n/**\n * Set the active session\n */\nexport async function setActiveSession(name: string): Promise<void> {\n const storage = await loadSessions();\n\n if (!storage.sessions[name]) {\n throw new Error(`Session '${name}' not found`);\n }\n\n storage.activeSession = name;\n storage.sessions[name].lastUsed = new Date().toISOString();\n\n await saveSessions(storage);\n}\n\n/**\n * List all stored sessions\n */\nexport async function listAllSessions(): Promise<\n Array<{ name: string; config: SessionConfig; isActive: boolean }>\n> {\n const storage = await loadSessions();\n\n return Object.entries(storage.sessions).map(([name, config]) => ({\n name,\n config,\n isActive: name === storage.activeSession,\n }));\n}\n\n/**\n * Update session info after connection\n */\nexport async function updateSessionInfo(\n name: string,\n serverInfo: { name: string; version?: string },\n capabilities?: Record<string, unknown>\n): Promise<void> {\n const storage = await loadSessions();\n\n if (storage.sessions[name]) {\n storage.sessions[name].serverInfo = serverInfo;\n storage.sessions[name].capabilities = capabilities;\n storage.sessions[name].lastUsed = new Date().toISOString();\n await saveSessions(storage);\n }\n}\n","import chalk from \"chalk\";\nimport type { CallToolResult } from \"mcp-use/client\";\n\n/**\n * Format data as a table with ASCII borders\n */\nexport function formatTable(\n data: Array<Record<string, any>>,\n columns: Array<{ key: string; header: string; width?: number }>\n): string {\n if (data.length === 0) {\n return chalk.gray(\"No items found\");\n }\n\n // Calculate column widths\n const widths = columns.map((col) => {\n const maxDataWidth = Math.max(\n ...data.map((row) => String(row[col.key] || \"\").length)\n );\n const headerWidth = col.header.length;\n return col.width || Math.max(maxDataWidth, headerWidth, 10);\n });\n\n // Helper to create a row\n const createRow = (values: string[], bold = false) => {\n const cells = values.map((val, i) => {\n const padded = val.padEnd(widths[i]);\n return bold ? chalk.bold(padded) : padded;\n });\n return `│ ${cells.join(\" │ \")} │`;\n };\n\n // Create separator line\n const separator = (char: string) => {\n const parts = widths.map((w) => char.repeat(w + 2));\n if (char === \"─\") {\n return `├${parts.join(\"┼\")}┤`;\n }\n return `└${parts.join(\"┴\")}┘`;\n };\n\n // Build table\n const lines: string[] = [];\n\n // Top border\n lines.push(`┌${widths.map((w) => \"─\".repeat(w + 2)).join(\"┬\")}┐`);\n\n // Header\n lines.push(\n createRow(\n columns.map((c) => c.header),\n true\n )\n );\n\n // Separator\n lines.push(separator(\"─\"));\n\n // Data rows\n data.forEach((row) => {\n lines.push(createRow(columns.map((c) => String(row[c.key] || \"\"))));\n });\n\n // Bottom border\n lines.push(separator(\"─\"));\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format data as JSON\n */\nexport function formatJson(data: any, pretty = true): string {\n if (pretty) {\n return JSON.stringify(data, null, 2);\n }\n return JSON.stringify(data);\n}\n\n/**\n * Format a tool call result\n */\nexport function formatToolCall(result: CallToolResult): string {\n const lines: string[] = [];\n\n if (result.isError) {\n lines.push(chalk.red(\"✗ Tool execution failed\"));\n lines.push(\"\");\n } else {\n lines.push(chalk.green(\"✓ Tool executed successfully\"));\n lines.push(\"\");\n }\n\n // Format content\n if (result.content && result.content.length > 0) {\n result.content.forEach((item, index) => {\n if (result.content.length > 1) {\n lines.push(chalk.bold(`Content ${index + 1}:`));\n }\n\n if (item.type === \"text\") {\n lines.push(item.text);\n } else if (item.type === \"image\") {\n lines.push(chalk.cyan(`[Image: ${item.mimeType || \"unknown type\"}]`));\n if (item.data) {\n lines.push(chalk.gray(`Data: ${item.data.substring(0, 50)}...`));\n }\n } else if (item.type === \"resource\") {\n lines.push(chalk.cyan(`[Resource]`));\n if (item.resource?.uri) {\n lines.push(chalk.gray(`URI: ${item.resource.uri}`));\n }\n if (item.resource && \"text\" in item.resource && item.resource.text) {\n lines.push(item.resource.text);\n }\n } else {\n lines.push(chalk.gray(`[Unknown content type: ${item.type}]`));\n }\n\n if (index < result.content.length - 1) {\n lines.push(\"\");\n }\n });\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format resource content\n */\nexport function formatResourceContent(content: any): string {\n if (!content || !content.contents) {\n return chalk.gray(\"No content\");\n }\n\n const lines: string[] = [];\n\n content.contents.forEach((item: any, index: number) => {\n if (content.contents.length > 1) {\n lines.push(chalk.bold(`Content ${index + 1}:`));\n }\n\n if (item.uri) {\n lines.push(chalk.gray(`URI: ${item.uri}`));\n }\n\n if (item.mimeType) {\n lines.push(chalk.gray(`Type: ${item.mimeType}`));\n }\n\n if (\"text\" in item && item.text) {\n lines.push(\"\");\n lines.push(item.text);\n } else if (\"blob\" in item && item.blob) {\n lines.push(\"\");\n lines.push(chalk.cyan(`[Binary data: ${item.blob.length} bytes]`));\n }\n\n if (index < content.contents.length - 1) {\n lines.push(\"\");\n lines.push(chalk.gray(\"─\".repeat(50)));\n lines.push(\"\");\n }\n });\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format a JSON schema in a readable way\n */\nexport function formatSchema(schema: any, indent = 0): string {\n if (!schema) {\n return chalk.gray(\"No schema\");\n }\n\n const lines: string[] = [];\n const pad = \" \".repeat(indent);\n\n if (schema.type === \"object\" && schema.properties) {\n Object.entries(schema.properties).forEach(([key, value]: [string, any]) => {\n const required = schema.required?.includes(key);\n const type = value.type || \"any\";\n const desc = value.description || \"\";\n\n const keyStr = required ? chalk.bold(key) : key;\n const typeStr = chalk.cyan(`(${type})`);\n const requiredStr = required ? chalk.red(\" *required\") : \"\";\n\n lines.push(`${pad}${keyStr} ${typeStr}${requiredStr}`);\n\n if (desc) {\n lines.push(`${pad} ${chalk.gray(desc)}`);\n }\n\n // Handle nested objects\n if (value.type === \"object\" && value.properties) {\n lines.push(formatSchema(value, indent + 1));\n }\n\n // Handle arrays\n if (value.type === \"array\" && value.items) {\n lines.push(`${pad} ${chalk.gray(\"Items:\")}`);\n if (value.items.type === \"object\") {\n lines.push(formatSchema(value.items, indent + 2));\n } else {\n lines.push(\n `${pad} ${chalk.cyan(`(${value.items.type || \"any\"})`)}`\n );\n }\n }\n });\n } else {\n lines.push(`${pad}${chalk.cyan(`Type: ${schema.type || \"any\"}`)}`);\n if (schema.description) {\n lines.push(`${pad}${chalk.gray(schema.description)}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format a list of items with bullets\n */\nexport function formatList(items: string[], bullet = \"•\"): string {\n return items.map((item) => ` ${bullet} ${item}`).join(\"\\n\");\n}\n\n/**\n * Format an error message\n */\nexport function formatError(error: Error | string): string {\n const message = typeof error === \"string\" ? error : error.message;\n return chalk.red(`✗ Error: ${message}`);\n}\n\n/**\n * Format a success message\n */\nexport function formatSuccess(message: string): string {\n return chalk.green(`✓ ${message}`);\n}\n\n/**\n * Format an info message\n */\nexport function formatInfo(message: string): string {\n return chalk.cyan(message);\n}\n\n/**\n * Format a warning message\n */\nexport function formatWarning(message: string): string {\n return chalk.yellow(`⚠ ${message}`);\n}\n\n/**\n * Create a section header\n */\nexport function formatHeader(text: string): string {\n return chalk.bold.white(text);\n}\n\n/**\n * Format key-value pairs\n */\nexport function formatKeyValue(\n pairs: Record<string, string | number | boolean>\n): string {\n const maxKeyLength = Math.max(...Object.keys(pairs).map((k) => k.length), 0);\n\n return Object.entries(pairs)\n .map(([key, value]) => {\n const paddedKey = key.padEnd(maxKeyLength);\n return ` ${chalk.gray(paddedKey)}: ${value}`;\n })\n .join(\"\\n\");\n}\n\n/**\n * Format prompt messages\n */\nexport function formatPromptMessages(messages: any[]): string {\n if (!messages || messages.length === 0) {\n return chalk.gray(\"No messages\");\n }\n\n const lines: string[] = [];\n\n messages.forEach((msg, index) => {\n const role = msg.role || \"unknown\";\n const roleStr =\n role === \"user\"\n ? chalk.blue(\"[User]\")\n : role === \"assistant\"\n ? chalk.green(\"[Assistant]\")\n : chalk.gray(`[${role}]`);\n\n lines.push(`${roleStr}`);\n\n if (msg.content) {\n if (typeof msg.content === \"string\") {\n lines.push(msg.content);\n } else if (msg.content.type === \"text\") {\n lines.push(msg.content.text);\n } else if (msg.content.type === \"image\") {\n lines.push(chalk.cyan(`[Image: ${msg.content.mimeType}]`));\n } else if (msg.content.type === \"resource\") {\n lines.push(chalk.cyan(`[Resource: ${msg.content.resource?.uri}]`));\n if (msg.content.resource?.text) {\n lines.push(msg.content.resource.text);\n }\n }\n }\n\n if (index < messages.length - 1) {\n lines.push(\"\");\n }\n });\n\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":["process","os","tty","styles","chalk","styles","open","import_commander","import_config","import_node_child_process","import_node_fs","import_promises","import_node_path","import_node_process","import_node_child_process","import_promises","import_node_util","import_node_child_process","import_promises","import_node_process","import_node_os","import_node_fs","import_node_fs","fs","fs","process","os","fs","import_node_process","childProcess","process","execFile","childProcess","fs","fsConstants","powerShellPath","path","import_node_util","import_node_process","import_node_child_process","import_node_util","import_node_process","import_node_child_process","process","import_node_process","import_node_util","import_node_child_process","execFileAsync","process","import_node_util","import_node_child_process","execFileAsync","execFileAsync","defaultBrowser","process","import_node_process","process","__dirname","path","process","apps","defaultBrowser","powerShellPath","fs","fsConstants","childProcess","import_node_fs","import_node_path","import_node_os","path","os","fs","readFile","import_node_fs","import_node_path","import_node_os","import_node_child_process","import_node_util","import_node_child_process","import_node_util","execAsync","path","fs","packageJson","os","import_node_os","import_node_path","import_promises","import_node_fs","prompt","result","path","findAvailablePort","env","fs","createServer"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../src/index.ts","../../../node_modules/.pnpm/open@11.0.0/node_modules/open/index.js","../../../node_modules/.pnpm/wsl-utils@0.3.0/node_modules/wsl-utils/index.js","../../../node_modules/.pnpm/is-wsl@3.1.0/node_modules/is-wsl/index.js","../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/index.js","../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/index.js","../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../node_modules/.pnpm/default-browser@5.4.0/node_modules/default-browser/windows.js","../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/index.js","../src/commands/auth.ts","../src/utils/config.ts","../src/utils/api.ts","../src/commands/client.ts","../src/utils/session-storage.ts","../src/utils/format.ts","../src/commands/deploy.ts","../src/utils/git.ts","../src/utils/project-link.ts","../src/commands/deployments.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","#!/usr/bin/env node\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport \"dotenv/config\";\nimport { spawn } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport open from \"open\";\nimport { toJSONSchema } from \"zod\";\nimport { loginCommand, logoutCommand, whoamiCommand } from \"./commands/auth.js\";\nimport { createClientCommand } from \"./commands/client.js\";\nimport { deployCommand } from \"./commands/deploy.js\";\nimport { createDeploymentsCommand } from \"./commands/deployments.js\";\n\nconst program = new Command();\n\nconst packageContent = readFileSync(\n path.join(__dirname, \"../package.json\"),\n \"utf-8\"\n);\nconst packageJson = JSON.parse(packageContent);\nconst packageVersion = packageJson.version || \"unknown\";\n\nprogram\n .name(\"mcp-use\")\n .description(\"Create and run MCP servers with ui resources widgets\")\n .version(packageVersion);\n\n// Helper to check if port is available\nasync function isPortAvailable(\n port: number,\n host: string = \"localhost\"\n): Promise<boolean> {\n try {\n await fetch(`http://${host}:${port}`);\n return false; // Port is in use\n } catch {\n return true; // Port is available\n }\n}\n\n// Helper to find an available port\nasync function findAvailablePort(\n startPort: number,\n host: string = \"localhost\"\n): Promise<number> {\n for (let port = startPort; port < startPort + 100; port++) {\n if (await isPortAvailable(port, host)) {\n return port;\n }\n }\n throw new Error(\"No available ports found\");\n}\n\n// Helper to check if server is ready\nasync function waitForServer(\n port: number,\n host: string = \"localhost\",\n maxAttempts = 30\n): Promise<boolean> {\n for (let i = 0; i < maxAttempts; i++) {\n const controller = new AbortController();\n try {\n // Use /inspector/health endpoint for cleaner health checks\n // This avoids 400 errors from the MCP endpoint which requires session headers\n const response = await fetch(`http://${host}:${port}/inspector/health`, {\n signal: controller.signal,\n });\n\n if (response.ok) {\n return true;\n }\n } catch {\n // Server not ready yet\n } finally {\n controller.abort();\n }\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n return false;\n}\n\n// Helper to run a command\nfunction runCommand(\n command: string,\n args: string[],\n cwd: string,\n env?: NodeJS.ProcessEnv,\n filterStderr: boolean = false\n): { promise: Promise<void>; process: any } {\n const proc = spawn(command, args, {\n cwd,\n stdio: filterStderr ? ([\"inherit\", \"inherit\", \"pipe\"] as const) : \"inherit\",\n shell: false,\n env: env ? { ...process.env, ...env } : process.env,\n });\n\n // Filter stderr to suppress tsx's \"Force killing\" messages\n if (filterStderr && proc.stderr) {\n proc.stderr.on(\"data\", (data: Buffer) => {\n const text = data.toString();\n // Filter out tsx's force killing message\n if (\n !text.includes(\"Previous process hasn't exited yet\") &&\n !text.includes(\"Force killing\")\n ) {\n process.stderr.write(data);\n }\n });\n }\n\n const promise = new Promise<void>((resolve, reject) => {\n proc.on(\"error\", reject);\n proc.on(\"exit\", (code: number | null) => {\n if (code === 0 || code === 130 || code === 143) {\n // Exit codes: 0 = normal, 130 = SIGINT/SIGTERM, 143 = SIGTERM (alternative)\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n });\n\n return { promise, process: proc };\n}\n\n// Helper to start tunnel and get the URL\nasync function startTunnel(\n port: number,\n subdomain?: string\n): Promise<{ url: string; subdomain: string; process: any }> {\n return new Promise((resolve, reject) => {\n console.log(chalk.gray(`Starting tunnel for port ${port}...`));\n\n const tunnelArgs = [\"--yes\", \"@mcp-use/tunnel\", String(port)];\n\n // Pass subdomain as CLI flag if provided\n if (subdomain) {\n tunnelArgs.push(\"--subdomain\", subdomain);\n }\n\n const proc = spawn(\"npx\", tunnelArgs, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n shell: false,\n });\n\n let resolved = false;\n let isShuttingDown = false;\n\n proc.stdout?.on(\"data\", (data) => {\n const text = data.toString();\n // Filter out shutdown messages from tunnel package\n const isShutdownMessage =\n text.includes(\"Shutting down\") || text.includes(\"🛑\");\n\n // Suppress tunnel output during shutdown or if it's a shutdown message\n if (!isShuttingDown && !isShutdownMessage) {\n process.stdout.write(text);\n }\n\n // Look for the tunnel URL in the output\n // Expected format: https://subdomain.tunnel-domain.com\n const urlMatch = text.match(/https?:\\/\\/([a-z0-9-]+\\.[a-z0-9.-]+)/i);\n if (urlMatch && !resolved) {\n const url = urlMatch[0];\n // Extract subdomain from URL (e.g., \"happy-cat.local.mcp-use.run\" -> \"happy-cat\")\n const fullDomain = urlMatch[1];\n // Try to extract the subdomain using a case-insensitive regex.\n // If the regex fails, fallback to splitting by '.' and taking the first label.\n // Validate that the extracted subdomain matches the expected format (letters, numbers, hyphens).\n const subdomainMatch = fullDomain.match(/^([a-z0-9-]+)\\./i);\n let extractedSubdomain = subdomainMatch\n ? subdomainMatch[1]\n : fullDomain.split(\".\")[0];\n if (!/^[a-z0-9-]+$/i.test(extractedSubdomain)) {\n console.warn(\n chalk.yellow(\n `Warning: Extracted subdomain \"${extractedSubdomain}\" does not match expected format.`\n )\n );\n extractedSubdomain = \"\";\n }\n resolved = true;\n clearTimeout(setupTimeout);\n console.log(chalk.green.bold(`✓ Tunnel established: ${url}/mcp`));\n resolve({ url, subdomain: extractedSubdomain, process: proc });\n }\n });\n\n proc.stderr?.on(\"data\", (data) => {\n const text = data.toString();\n // Filter out bore debug logs and shutdown messages\n if (\n !isShuttingDown &&\n !text.includes(\"INFO\") &&\n !text.includes(\"bore_cli\") &&\n !text.includes(\"Shutting down\")\n ) {\n process.stderr.write(data);\n }\n });\n\n proc.on(\"error\", (error) => {\n if (!resolved) {\n clearTimeout(setupTimeout);\n reject(new Error(`Failed to start tunnel: ${error.message}`));\n }\n });\n\n proc.on(\"exit\", (code) => {\n if (code !== 0 && !resolved) {\n clearTimeout(setupTimeout);\n reject(new Error(`Tunnel process exited with code ${code}`));\n }\n });\n\n // Add method to mark shutdown state\n (proc as any).markShutdown = () => {\n isShuttingDown = true;\n };\n\n // Timeout after 30 seconds - only for initial setup\n const setupTimeout = setTimeout(() => {\n if (!resolved) {\n proc.kill();\n reject(new Error(\"Tunnel setup timed out\"));\n }\n }, 30000);\n });\n}\n\nasync function findServerFile(projectPath: string): Promise<string> {\n const candidates = [\"index.ts\", \"src/index.ts\", \"server.ts\", \"src/server.ts\"];\n for (const candidate of candidates) {\n try {\n await access(path.join(projectPath, candidate));\n return candidate;\n } catch {\n continue;\n }\n }\n throw new Error(\"No server file found\");\n}\n\nasync function buildWidgets(\n projectPath: string\n): Promise<Array<{ name: string; metadata: any }>> {\n const { promises: fs } = await import(\"node:fs\");\n const { build } = await import(\"vite\");\n const resourcesDir = path.join(projectPath, \"resources\");\n\n // Get base URL from environment or use default\n const mcpUrl = process.env.MCP_URL;\n\n // Check if resources directory exists\n try {\n await access(resourcesDir);\n } catch {\n console.log(\n chalk.gray(\"No resources/ directory found - skipping widget build\")\n );\n return [];\n }\n\n // Find all TSX widget files and folders with widget.tsx\n const entries: Array<{ name: string; path: string }> = [];\n try {\n const files = await fs.readdir(resourcesDir, { withFileTypes: true });\n for (const dirent of files) {\n // Exclude macOS resource fork files and other hidden/system files\n if (dirent.name.startsWith(\"._\") || dirent.name.startsWith(\".DS_Store\")) {\n continue;\n }\n\n if (\n dirent.isFile() &&\n (dirent.name.endsWith(\".tsx\") || dirent.name.endsWith(\".ts\"))\n ) {\n // Single file widget\n entries.push({\n name: dirent.name.replace(/\\.tsx?$/, \"\"),\n path: path.join(resourcesDir, dirent.name),\n });\n } else if (dirent.isDirectory()) {\n // Check for widget.tsx in folder\n const widgetPath = path.join(resourcesDir, dirent.name, \"widget.tsx\");\n try {\n await fs.access(widgetPath);\n entries.push({\n name: dirent.name,\n path: widgetPath,\n });\n } catch {\n // widget.tsx doesn't exist in this folder, skip it\n }\n }\n }\n } catch (error) {\n console.log(chalk.gray(\"No widgets found in resources/ directory\"));\n return [];\n }\n\n if (entries.length === 0) {\n console.log(chalk.gray(\"No widgets found in resources/ directory\"));\n return [];\n }\n\n console.log(chalk.gray(`Building ${entries.length} widget(s)...`));\n\n const react = (await import(\"@vitejs/plugin-react\")).default;\n // @ts-ignore - @tailwindcss/vite may not have type declarations\n const tailwindcss = (await import(\"@tailwindcss/vite\")).default;\n\n // Read favicon config from package.json\n const packageJsonPath = path.join(projectPath, \"package.json\");\n let favicon = \"\";\n try {\n const pkgContent = await fs.readFile(packageJsonPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n favicon = pkg.mcpUse?.favicon || \"\";\n } catch {\n // No package.json or no mcpUse config, that's fine\n }\n\n const builtWidgets: Array<{ name: string; metadata: any }> = [];\n\n for (const entry of entries) {\n const widgetName = entry.name;\n const entryPath = entry.path;\n\n console.log(chalk.gray(` - Building ${widgetName}...`));\n\n // Create temp directory for build artifacts\n const tempDir = path.join(projectPath, \".mcp-use\", widgetName);\n await fs.mkdir(tempDir, { recursive: true });\n\n // Create CSS file with Tailwind directives\n const relativeResourcesPath = path\n .relative(tempDir, resourcesDir)\n .replace(/\\\\/g, \"/\");\n\n // Calculate relative path to mcp-use package dynamically\n const mcpUsePath = path.join(projectPath, \"node_modules\", \"mcp-use\");\n const relativeMcpUsePath = path\n .relative(tempDir, mcpUsePath)\n .replace(/\\\\/g, \"/\");\n\n const cssContent = `@import \"tailwindcss\";\\n\\n/* Configure Tailwind to scan the resources directory and mcp-use package */\\n@source \"${relativeResourcesPath}\";\\n@source \"${relativeMcpUsePath}/**/*.{ts,tsx,js,jsx}\";\\n`;\n await fs.writeFile(path.join(tempDir, \"styles.css\"), cssContent, \"utf8\");\n\n // Create entry file\n const entryContent = `import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport './styles.css'\nimport Component from '${entryPath}'\n\nconst container = document.getElementById('widget-root')\nif (container && Component) {\n const root = createRoot(container)\n root.render(<Component />)\n}\n`;\n\n // Create HTML template\n const htmlContent = `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n <title>${widgetName} Widget</title>${\n favicon\n ? `\n <link rel=\"icon\" href=\"/mcp-use/public/${favicon}\" />`\n : \"\"\n }\n </head>\n <body>\n <div id=\"widget-root\"></div>\n <script type=\"module\" src=\"/entry.tsx\"></script>\n </body>\n</html>`;\n\n await fs.writeFile(path.join(tempDir, \"entry.tsx\"), entryContent, \"utf8\");\n await fs.writeFile(path.join(tempDir, \"index.html\"), htmlContent, \"utf8\");\n\n // Build with Vite\n const outDir = path.join(\n projectPath,\n \"dist\",\n \"resources\",\n \"widgets\",\n widgetName\n );\n\n // Set base URL: use MCP_URL if set, otherwise relative path\n const baseUrl = mcpUrl\n ? `${mcpUrl}/${widgetName}/`\n : `/mcp-use/widgets/${widgetName}/`;\n\n // Extract metadata from widget before building\n let widgetMetadata: any = {};\n try {\n // Use a completely isolated temp directory for metadata extraction to avoid conflicts\n const metadataTempDir = path.join(\n projectPath,\n \".mcp-use\",\n `${widgetName}-metadata`\n );\n await fs.mkdir(metadataTempDir, { recursive: true });\n\n const { createServer } = await import(\"vite\");\n\n // Plugin to provide browser stubs for Node.js-only packages\n const nodeStubsPlugin = {\n name: \"node-stubs\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n if (id === \"posthog-node\" || id.startsWith(\"posthog-node/\")) {\n return \"\\0virtual:posthog-node-stub\";\n }\n return null;\n },\n load(id: string) {\n if (id === \"\\0virtual:posthog-node-stub\") {\n return `\nexport class PostHog {\n constructor() {}\n capture() {}\n identify() {}\n alias() {}\n flush() { return Promise.resolve(); }\n shutdown() { return Promise.resolve(); }\n}\nexport default PostHog;\n`;\n }\n return null;\n },\n };\n\n const metadataServer = await createServer({\n root: metadataTempDir,\n cacheDir: path.join(metadataTempDir, \".vite-cache\"),\n plugins: [nodeStubsPlugin, tailwindcss(), react()],\n resolve: {\n alias: {\n \"@\": resourcesDir,\n },\n },\n server: {\n middlewareMode: true,\n },\n optimizeDeps: {\n // Exclude Node.js-only packages from browser bundling\n exclude: [\"posthog-node\"],\n },\n ssr: {\n // Force Vite to transform these packages in SSR instead of using external requires\n noExternal: [\"@openai/apps-sdk-ui\", \"react-router\"],\n // Mark Node.js-only packages as external in SSR mode\n external: [\"posthog-node\"],\n },\n define: {\n // Define process.env for SSR context\n \"process.env.NODE_ENV\": JSON.stringify(\n process.env.NODE_ENV || \"development\"\n ),\n \"import.meta.env.DEV\": true,\n \"import.meta.env.PROD\": false,\n \"import.meta.env.MODE\": JSON.stringify(\"development\"),\n \"import.meta.env.SSR\": true,\n },\n clearScreen: false,\n logLevel: \"silent\",\n customLogger: {\n info: () => {},\n warn: () => {},\n error: () => {},\n clearScreen: () => {},\n hasErrorLogged: () => false,\n hasWarned: false,\n warnOnce: () => {},\n },\n });\n\n try {\n const mod = await metadataServer.ssrLoadModule(entryPath);\n if (mod.widgetMetadata) {\n // Handle props (preferred) or inputs (deprecated) field\n const schemaField =\n mod.widgetMetadata.props || mod.widgetMetadata.inputs;\n\n // Check if schemaField is a Zod v4 schema (has ~standard property from Standard Schema)\n // and convert to JSON Schema for serialization using Zod v4's built-in toJsonSchema\n let inputsValue = schemaField || {};\n if (\n schemaField &&\n typeof schemaField === \"object\" &&\n \"~standard\" in schemaField\n ) {\n // Convert Zod schema to JSON Schema for manifest serialization\n try {\n inputsValue = toJSONSchema(schemaField);\n } catch (conversionError) {\n console.warn(\n chalk.yellow(\n ` ⚠ Could not convert schema for ${widgetName}, using raw schema`\n )\n );\n }\n }\n\n // Destructure to exclude props (raw Zod schema) from being serialized\n const {\n props: _rawProps,\n inputs: _rawInputs,\n ...restMetadata\n } = mod.widgetMetadata;\n\n widgetMetadata = {\n ...restMetadata,\n title: mod.widgetMetadata.title || widgetName,\n description: mod.widgetMetadata.description,\n // Store the converted JSON Schema (props field is used by production mount)\n props: inputsValue,\n inputs: inputsValue,\n };\n }\n // Give a moment for any background esbuild operations to complete\n await new Promise((resolve) => setTimeout(resolve, 50));\n } catch (error) {\n console.warn(\n chalk.yellow(` ⚠ Could not extract metadata for ${widgetName}`)\n );\n } finally {\n await metadataServer.close();\n // Clean up metadata temp directory\n try {\n await fs.rm(metadataTempDir, { recursive: true, force: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n } catch (error) {\n // Silently skip metadata extraction if it fails\n }\n\n try {\n // Enhanced plugin to stub Node.js-only packages and built-ins\n const buildNodeStubsPlugin = {\n name: \"node-stubs-build\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n // Stub posthog-node\n if (id === \"posthog-node\" || id.startsWith(\"posthog-node/\")) {\n return \"\\0virtual:posthog-node-stub\";\n }\n // Stub path module for browser builds\n if (id === \"path\" || id === \"node:path\") {\n return \"\\0virtual:path-stub\";\n }\n return null;\n },\n load(id: string) {\n if (id === \"\\0virtual:posthog-node-stub\") {\n return `\nexport class PostHog {\n constructor() {}\n capture() {}\n identify() {}\n alias() {}\n flush() { return Promise.resolve(); }\n shutdown() { return Promise.resolve(); }\n}\nexport default PostHog;\n`;\n }\n if (id === \"\\0virtual:path-stub\") {\n return `\nexport function join(...paths) {\n return paths.filter(Boolean).join(\"/\").replace(/\\\\/\\\\//g, \"/\").replace(/\\\\/$/, \"\");\n}\nexport function resolve(...paths) {\n return join(...paths);\n}\nexport function dirname(filepath) {\n const parts = filepath.split(\"/\");\n parts.pop();\n return parts.join(\"/\") || \"/\";\n}\nexport function basename(filepath, ext) {\n const parts = filepath.split(\"/\");\n let name = parts[parts.length - 1] || \"\";\n if (ext && name.endsWith(ext)) {\n name = name.slice(0, -ext.length);\n }\n return name;\n}\nexport function extname(filepath) {\n const name = basename(filepath);\n const index = name.lastIndexOf(\".\");\n return index > 0 ? name.slice(index) : \"\";\n}\nexport function normalize(filepath) {\n return filepath.replace(/\\\\/\\\\//g, \"/\");\n}\nexport function isAbsolute(filepath) {\n return filepath.startsWith(\"/\");\n}\nexport const sep = \"/\";\nexport const delimiter = \":\";\nexport const posix = {\n join,\n resolve,\n dirname,\n basename,\n extname,\n normalize,\n isAbsolute,\n sep,\n delimiter,\n};\nexport default {\n join,\n resolve,\n dirname,\n basename,\n extname,\n normalize,\n isAbsolute,\n sep,\n delimiter,\n posix,\n};\n`;\n }\n return null;\n },\n };\n\n await build({\n root: tempDir,\n base: baseUrl,\n plugins: [buildNodeStubsPlugin, tailwindcss(), react()],\n experimental: {\n renderBuiltUrl: (filename: string, { hostType }) => {\n if ([\"js\", \"css\"].includes(hostType)) {\n return {\n runtime: `window.__getFile(${JSON.stringify(filename)})`,\n };\n } else {\n return { relative: true };\n }\n },\n },\n resolve: {\n alias: {\n \"@\": resourcesDir,\n },\n },\n optimizeDeps: {\n // Exclude Node.js-only packages from browser bundling\n exclude: [\"posthog-node\"],\n },\n build: {\n outDir,\n emptyOutDir: true,\n rollupOptions: {\n input: path.join(tempDir, \"index.html\"),\n external: (id) => {\n // Don't externalize posthog-node or path - we're stubbing them\n return false;\n },\n },\n },\n });\n\n // Post-process HTML for static deployments (e.g., Supabase)\n // If MCP_SERVER_URL is set, inject window globals at build time\n const mcpServerUrl = process.env.MCP_SERVER_URL;\n if (mcpServerUrl) {\n try {\n const htmlPath = path.join(outDir, \"index.html\");\n let html = await fs.readFile(htmlPath, \"utf8\");\n\n // Inject window.__mcpPublicUrl and window.__getFile into <head>\n // Note: __mcpPublicUrl uses standard format for useWidget to derive mcp_url\n // __mcpPublicAssetsUrl points to where public files are actually stored\n const injectionScript = `<script>window.__getFile = (filename) => { return \"${mcpUrl}/${widgetName}/\"+filename }; window.__mcpPublicUrl = \"${mcpServerUrl}/mcp-use/public\"; window.__mcpPublicAssetsUrl = \"${mcpUrl}/public\";</script>`;\n\n // Check if script tag already exists in head\n if (!html.includes(\"window.__mcpPublicUrl\")) {\n html = html.replace(\n /<head[^>]*>/i,\n `<head>\\n ${injectionScript}`\n );\n }\n\n // Update base href if it exists, or inject it\n if (/<base\\s+[^>]*\\/?>/i.test(html)) {\n // Replace existing base tag\n html = html.replace(\n /<base\\s+[^>]*\\/?>/i,\n `<base href=\"${mcpServerUrl}\">`\n );\n } else {\n // Inject base tag after the injection script\n html = html.replace(\n injectionScript,\n `${injectionScript}\\n <base href=\"${mcpServerUrl}\">`\n );\n }\n\n await fs.writeFile(htmlPath, html, \"utf8\");\n console.log(\n chalk.gray(` → Injected MCP_SERVER_URL into ${widgetName}`)\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n ` ⚠ Failed to post-process HTML for ${widgetName}:`,\n error\n )\n );\n }\n }\n\n builtWidgets.push({\n name: widgetName,\n metadata: widgetMetadata,\n });\n console.log(chalk.green(` ✓ Built ${widgetName}`));\n } catch (error) {\n console.error(chalk.red(` ✗ Failed to build ${widgetName}:`), error);\n }\n }\n\n return builtWidgets;\n}\n\nprogram\n .command(\"build\")\n .description(\"Build TypeScript and MCP UI widgets\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--with-inspector\", \"Include inspector in production build\")\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n const { promises: fs } = await import(\"node:fs\");\n\n console.log(chalk.cyan.bold(`mcp-use v${packageJson.version}`));\n\n // Build widgets first (this generates schemas)\n const builtWidgets = await buildWidgets(projectPath);\n\n // Then run tsc (now schemas are available for import)\n console.log(chalk.gray(\"Building TypeScript...\"));\n await runCommand(\"npx\", [\"tsc\"], projectPath);\n console.log(chalk.green(\"✓ TypeScript build complete!\"));\n\n // Copy public folder if it exists\n const publicDir = path.join(projectPath, \"public\");\n try {\n await fs.access(publicDir);\n console.log(chalk.gray(\"Copying public assets...\"));\n await fs.cp(publicDir, path.join(projectPath, \"dist\", \"public\"), {\n recursive: true,\n });\n console.log(chalk.green(\"✓ Public assets copied\"));\n } catch {\n // Public folder doesn't exist, skip\n }\n\n // Create build manifest\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n\n // Read existing manifest to preserve tunnel subdomain and other fields\n let existingManifest: any = {};\n try {\n const existingContent = await fs.readFile(manifestPath, \"utf-8\");\n existingManifest = JSON.parse(existingContent);\n } catch {\n // File doesn't exist, that's okay\n }\n\n // Transform builtWidgets array into widgets object with metadata\n const widgetsData: Record<string, any> = {};\n for (const widget of builtWidgets) {\n widgetsData[widget.name] = widget.metadata;\n }\n\n // Convert to boolean: true if flag is present, false otherwise\n const includeInspector = !!options.withInspector;\n\n // Generate a build ID (hash of build time + random component for uniqueness)\n const buildTime = new Date().toISOString();\n const { createHash } = await import(\"node:crypto\");\n const buildId = createHash(\"sha256\")\n .update(buildTime + Math.random().toString())\n .digest(\"hex\")\n .substring(0, 16); // Use first 16 chars for shorter IDs\n\n // Merge with existing manifest, preserving tunnel and other fields\n const manifest = {\n ...existingManifest, // Preserve existing fields like tunnel\n includeInspector,\n buildTime,\n buildId,\n widgets: widgetsData,\n };\n\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf8\"\n );\n console.log(chalk.green(\"✓ Build manifest created\"));\n\n console.log(chalk.green.bold(`\\n✓ Build complete!`));\n if (builtWidgets.length > 0) {\n console.log(chalk.gray(` ${builtWidgets.length} widget(s) built`));\n }\n if (options.withInspector) {\n console.log(chalk.gray(\" Inspector included\"));\n }\n } catch (error) {\n console.error(chalk.red(\"Build failed:\"), error);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"dev\")\n .description(\"Run development server with auto-reload and inspector\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--host <host>\", \"Server host\", \"localhost\")\n .option(\"--no-open\", \"Do not auto-open inspector\")\n // .option('--tunnel', 'Expose server through a tunnel')\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n let port = parseInt(options.port, 10);\n const host = options.host;\n\n console.log(chalk.cyan.bold(`mcp-use v${packageJson.version}`));\n\n // Check if port is available, find alternative if needed\n if (!(await isPortAvailable(port, host))) {\n console.log(chalk.yellow.bold(`⚠️ Port ${port} is already in use`));\n const availablePort = await findAvailablePort(port, host);\n console.log(chalk.green.bold(`✓ Using port ${availablePort} instead`));\n port = availablePort;\n }\n\n // Find the main source file\n const serverFile = await findServerFile(projectPath);\n\n // Start all processes concurrently\n const processes: any[] = [];\n\n const env: NodeJS.ProcessEnv = {\n PORT: String(port),\n HOST: host,\n NODE_ENV: \"development\",\n };\n\n const serverCommand = runCommand(\n \"npx\",\n [\"tsx\", \"watch\", serverFile],\n projectPath,\n env,\n true\n );\n processes.push(serverCommand.process);\n\n // Auto-open inspector if enabled\n if (options.open !== false) {\n const startTime = Date.now();\n const ready = await waitForServer(port, host);\n if (ready) {\n const mcpEndpoint = `http://${host}:${port}/mcp`;\n const inspectorUrl = `http://${host}:${port}/inspector?autoConnect=${encodeURIComponent(mcpEndpoint)}`;\n\n const readyTime = Date.now() - startTime;\n console.log(chalk.green.bold(`✓ Ready in ${readyTime}ms`));\n console.log(chalk.whiteBright(`Local: http://${host}:${port}`));\n console.log(chalk.whiteBright(`Network: http://${host}:${port}`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n console.log(chalk.whiteBright(`Inspector: ${inspectorUrl}\\n`));\n await open(inspectorUrl);\n }\n }\n\n // Handle cleanup\n const cleanup = () => {\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n const processesToKill = processes.length;\n let killedCount = 0;\n\n const checkAndExit = () => {\n killedCount++;\n if (killedCount >= processesToKill) {\n process.exit(0);\n }\n };\n\n processes.forEach((proc) => {\n if (proc && typeof proc.kill === \"function\") {\n // Listen for process exit\n proc.on(\"exit\", checkAndExit);\n // Send SIGINT (Ctrl+C) to tsx which it handles more gracefully\n proc.kill(\"SIGINT\");\n } else {\n checkAndExit();\n }\n });\n\n // Fallback timeout in case processes don't exit\n setTimeout(() => {\n processes.forEach((proc) => {\n if (\n proc &&\n typeof proc.kill === \"function\" &&\n proc.exitCode === null\n ) {\n proc.kill(\"SIGKILL\");\n }\n });\n process.exit(0);\n }, 1000);\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n // Keep the process running\n await new Promise(() => {});\n } catch (error) {\n console.error(chalk.red(\"Dev mode failed:\"), error);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"start\")\n .description(\"Start production server\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--tunnel\", \"Expose server through a tunnel\")\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n // Priority: --port flag > process.env.PORT > default\n // Check if --port or -p was explicitly provided in command line\n const portFlagProvided =\n process.argv.includes(\"--port\") ||\n process.argv.includes(\"-p\") ||\n process.argv.some((arg) => arg.startsWith(\"--port=\")) ||\n process.argv.some((arg) => arg.startsWith(\"-p=\"));\n\n const port = portFlagProvided\n ? parseInt(options.port, 10) // Flag explicitly provided, use it\n : parseInt(process.env.PORT || options.port || \"3000\", 10); // Check env, then default\n\n console.log(\n `\\x1b[36m\\x1b[1mmcp-use\\x1b[0m \\x1b[90mVersion: ${packageJson.version}\\x1b[0m\\n`\n );\n\n // Start tunnel if requested\n let mcpUrl: string | undefined;\n let tunnelProcess: any = undefined;\n let tunnelSubdomain: string | undefined = undefined;\n if (options.tunnel) {\n try {\n // Read existing subdomain from mcp-use.json if available\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let existingSubdomain: string | undefined;\n\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n existingSubdomain = manifest.tunnel?.subdomain;\n if (existingSubdomain) {\n console.log(\n chalk.gray(`Found existing subdomain: ${existingSubdomain}`)\n );\n }\n } catch (error) {\n // Manifest doesn't exist or is invalid, that's okay\n console.debug(\n chalk.gray(\n `Debug: Failed to read or parse mcp-use.json: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n }\n\n const tunnelInfo = await startTunnel(port, existingSubdomain);\n mcpUrl = tunnelInfo.url;\n tunnelProcess = tunnelInfo.process;\n const subdomain = tunnelInfo.subdomain;\n tunnelSubdomain = subdomain;\n\n // Update mcp-use.json with the subdomain\n try {\n let manifest: any = {};\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n manifest = JSON.parse(manifestContent);\n } catch {\n // File doesn't exist, create new manifest\n }\n\n // Update or add tunnel subdomain\n if (!manifest.tunnel) {\n manifest.tunnel = {};\n }\n manifest.tunnel.subdomain = subdomain;\n\n // Ensure dist directory exists\n await mkdir(path.dirname(manifestPath), { recursive: true });\n\n // Write updated manifest\n await writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf-8\"\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n `⚠️ Failed to save subdomain to mcp-use.json: ${error instanceof Error ? error.message : \"Unknown error\"}`\n )\n );\n }\n } catch (error) {\n console.error(chalk.red(\"Failed to start tunnel:\"), error);\n process.exit(1);\n }\n }\n\n // Find the built server file\n let serverFile = \"dist/index.js\";\n try {\n await access(path.join(projectPath, serverFile));\n } catch {\n serverFile = \"dist/server.js\";\n }\n\n console.log(\"Starting production server...\");\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n PORT: String(port),\n NODE_ENV: \"production\",\n };\n\n if (mcpUrl) {\n env.MCP_URL = mcpUrl;\n console.log(chalk.whiteBright(`Tunnel: ${mcpUrl}/mcp`));\n }\n\n const serverProc = spawn(\"node\", [serverFile], {\n cwd: projectPath,\n stdio: \"inherit\",\n env,\n });\n\n // Handle cleanup\n let cleanupInProgress = false;\n const cleanup = async () => {\n if (cleanupInProgress) {\n return; // Prevent double cleanup\n }\n cleanupInProgress = true;\n\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n\n // Mark tunnel as shutting down to suppress output\n if (\n tunnelProcess &&\n typeof (tunnelProcess as any).markShutdown === \"function\"\n ) {\n (tunnelProcess as any).markShutdown();\n }\n\n // Clean up tunnel via API if subdomain is available\n if (tunnelSubdomain) {\n try {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch (err) {\n // Ignore cleanup errors\n }\n }\n\n const processesToKill = 1 + (tunnelProcess ? 1 : 0);\n let killedCount = 0;\n\n const checkAndExit = () => {\n killedCount++;\n if (killedCount >= processesToKill) {\n process.exit(0);\n }\n };\n\n // Handle server process\n serverProc.on(\"exit\", checkAndExit);\n serverProc.kill(\"SIGTERM\");\n\n // Handle tunnel process if it exists\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n tunnelProcess.on(\"exit\", checkAndExit);\n // Use SIGINT for better cleanup of npx/node processes\n tunnelProcess.kill(\"SIGINT\");\n } else {\n checkAndExit();\n }\n\n // Fallback timeout in case processes don't exit\n setTimeout(() => {\n if (serverProc.exitCode === null) {\n serverProc.kill(\"SIGKILL\");\n }\n if (tunnelProcess && tunnelProcess.exitCode === null) {\n tunnelProcess.kill(\"SIGKILL\");\n }\n process.exit(0);\n }, 2000); // Increase timeout to 2 seconds to allow graceful shutdown\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n serverProc.on(\"exit\", (code) => {\n process.exit(code || 0);\n });\n } catch (error) {\n console.error(\"Start failed:\", error);\n process.exit(1);\n }\n });\n\n// Authentication commands\nprogram\n .command(\"login\")\n .description(\"Login to mcp-use cloud\")\n .action(async () => {\n await loginCommand();\n });\n\nprogram\n .command(\"logout\")\n .description(\"Logout from mcp-use cloud\")\n .action(async () => {\n await logoutCommand();\n });\n\nprogram\n .command(\"whoami\")\n .description(\"Show current user information\")\n .action(async () => {\n await whoamiCommand();\n });\n\n// Deployment command\nprogram\n .command(\"deploy\")\n .description(\"Deploy MCP server to mcp-use cloud\")\n .option(\"--open\", \"Open deployment in browser after successful deploy\")\n .option(\"--name <name>\", \"Custom deployment name\")\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--runtime <runtime>\", \"Runtime (node or python)\")\n .option(\n \"--from-source\",\n \"Deploy from local source code (even for GitHub repos)\"\n )\n .option(\n \"--new\",\n \"Force creation of new deployment instead of reusing linked deployment\"\n )\n .option(\n \"--env <key=value...>\",\n \"Environment variables (can be used multiple times)\"\n )\n .option(\"--env-file <path>\", \"Path to .env file with environment variables\")\n .action(async (options) => {\n await deployCommand({\n open: options.open,\n name: options.name,\n port: options.port ? parseInt(options.port, 10) : undefined,\n runtime: options.runtime,\n fromSource: options.fromSource,\n new: options.new,\n env: options.env,\n envFile: options.envFile,\n });\n });\n\n// Client command\nprogram.addCommand(createClientCommand());\n\n// Deployments command\nprogram.addCommand(createDeploymentsCommand());\n\nprogram.parse();\n","import process from 'node:process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport {\n\tisWsl,\n\tpowerShellPath,\n\tconvertWslPathToWindows,\n\tcanAccessPowerShell,\n\twslDefaultBrowser,\n} from 'wsl-utils';\nimport {executePowerShell} from 'powershell-utils';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser, {_windowsBrowserProgIdMap} from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\nimport isInSsh from 'is-in-ssh';\n\nconst fallbackAttemptSymbol = Symbol('fallbackAttempt');\n\n// Path to included `xdg-open`.\nconst __dirname = import.meta.url ? path.dirname(fileURLToPath(import.meta.url)) : '';\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\nconst tryEachApp = async (apps, opener) => {\n\tif (apps.length === 0) {\n\t\t// No app was provided\n\t\treturn;\n\t}\n\n\tconst errors = [];\n\n\tfor (const app of apps) {\n\t\ttry {\n\t\t\treturn await opener(app); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t}\n\n\tthrow new AggregateError(errors, 'Failed to open in all supported apps');\n};\n\n// eslint-disable-next-line complexity\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options,\n\t};\n\n\tconst isFallbackAttempt = options[fallbackAttemptSymbol] === true;\n\tdelete options[fallbackAttemptSymbol];\n\n\tif (Array.isArray(options.app)) {\n\t\treturn tryEachApp(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app ?? {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn tryEachApp(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments,\n\t\t\t},\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same.\n\t\t// IDs are lowercased to increase chances of a match.\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'com.brave.browser': 'brave',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t\t'com.apple.safari': 'safari',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tbrave: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t\t// Safari doesn't support private mode via command line\n\t\t};\n\n\t\tlet browser;\n\t\tif (isWsl) {\n\t\t\tconst progId = await wslDefaultBrowser();\n\t\t\tconst browserInfo = _windowsBrowserProgIdMap.get(progId);\n\t\t\tbrowser = browserInfo ?? {};\n\t\t} else {\n\t\t\tbrowser = await defaultBrowser();\n\t\t}\n\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id.toLowerCase()];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\t// Safari doesn't support private mode via command line\n\t\t\t\tif (browserName === 'safari') {\n\t\t\t\t\tthrow new Error('Safari doesn\\'t support opening in private mode via command line');\n\t\t\t\t}\n\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\t// Determine if we should use Windows/PowerShell behavior in WSL.\n\t// We only use Windows integration if PowerShell is actually accessible.\n\t// This allows the package to work in sandboxed WSL environments where Windows access is restricted.\n\tlet shouldUseWindowsInWsl = false;\n\tif (isWsl && !isInsideContainer() && !isInSsh && !app) {\n\t\tshouldUseWindowsInWsl = await canAccessPowerShell();\n\t}\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || shouldUseWindowsInWsl) {\n\t\tcommand = await powerShellPath();\n\n\t\tcliArguments.push(...executePowerShell.argumentsPrefix);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\t// Convert WSL Linux paths to Windows paths\n\t\tif (isWsl && options.target) {\n\t\t\toptions.target = await convertWslPathToWindows(options.target);\n\t\t}\n\n\t\t// Suppress PowerShell progress messages that are written to stderr\n\t\tconst encodedArguments = ['$ProgressPreference = \\'SilentlyContinue\\';', 'Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(app));\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(options.target));\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => executePowerShell.escapeArgument(argument));\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = executePowerShell.encodeCommand(encodedArguments.join(' '));\n\n\t\tif (!options.wait) {\n\t\t\t// PowerShell will keep the parent process alive unless stdio is ignored.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t}\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron\n\t\t\t\t?? (platform === 'android' || isBundled || !exeLocalXdgOpen);\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// IMPORTANT: On macOS, the target MUST come AFTER '--args'.\n\t// When using --args, ALL following arguments are passed to the app.\n\t// Example: open -a \"chrome\" --args --incognito https://site.com\n\t// This passes BOTH --incognito AND https://site.com to Chrome.\n\t// Without this order, Chrome won't open in incognito. See #332.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode !== 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\t// When we're in a fallback attempt, we need to detect launch failures before trying the next app.\n\t// Wait for the close event to check the exit code before unreffing.\n\t// The launcher (open/xdg-open/PowerShell) exits quickly (~10-30ms) even on success.\n\tif (isFallbackAttempt) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('spawn', () => {\n\t\t\t\t// Keep error handler active for post-spawn errors\n\t\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\t\tsubprocess.off('error', reject);\n\n\t\t\t\t\tif (exitCode !== 0) {\n\t\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsubprocess.unref();\n\t\t\t\t\tresolve(subprocess);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\t// Handle spawn errors before the caller can attach listeners.\n\t// This prevents unhandled error events from crashing the process.\n\treturn new Promise((resolve, reject) => {\n\t\tsubprocess.once('error', reject);\n\n\t\t// Wait for the subprocess to spawn before resolving.\n\t\t// This ensures the process is established before the caller continues,\n\t\t// preventing issues when process.exit() is called immediately after.\n\t\tsubprocess.once('spawn', () => {\n\t\t\tsubprocess.off('error', reject);\n\t\t\tresolve(subprocess);\n\t\t});\n\t});\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget,\n\t});\n};\n\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options ?? {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments,\n\t\t},\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl} = {}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nexport const apps = {\n\tbrowser: 'browser',\n\tbrowserPrivate: 'browserPrivate',\n};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\t// `chromium-browser` is the older deb package name used by Ubuntu/Debian before snap.\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'brave', () => detectPlatformBinary({\n\tdarwin: 'brave browser',\n\twin32: 'brave',\n\tlinux: ['brave-browser', 'brave'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe',\n\t\tx64: ['/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe', '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: String.raw`C:\\Program Files\\Mozilla Firefox\\firefox.exe`,\n\tlinux: 'firefox',\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe',\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev'],\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',\n}));\n\ndefineLazyProperty(apps, 'safari', () => detectPlatformBinary({\n\tdarwin: 'Safari',\n}));\n\nexport default open;\n","import {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\nimport {powerShellPath as windowsPowerShellPath, executePowerShell} from 'powershell-utils';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const wslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?<!#.*)root\\s*=\\s*(?<mountPoint>.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nexport const powerShellPathFromWsl = async () => {\n\tconst mountPoint = await wslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\nexport const powerShellPath = isWsl ? powerShellPathFromWsl : windowsPowerShellPath;\n\n// Cache for PowerShell accessibility check\nlet canAccessPowerShellPromise;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessPowerShellPromise ??= (async () => {\n\t\ttry {\n\t\t\tconst psPath = await powerShellPath();\n\t\t\tawait fs.access(psPath, fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// PowerShell is not accessible (either doesn't exist, no execute permission, or other error)\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessPowerShellPromise;\n};\n\nexport const wslDefaultBrowser = async () => {\n\tconst psPath = await powerShellPath();\n\tconst command = String.raw`(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId`;\n\n\tconst {stdout} = await executePowerShell(command, {powerShellPath: psPath});\n\n\treturn stdout.trim();\n};\n\nexport const convertWslPathToWindows = async path => {\n\t// Don't convert URLs\n\tif (/^[a-z]+:\\/\\//i.test(path)) {\n\t\treturn path;\n\t}\n\n\ttry {\n\t\tconst {stdout} = await execFile('wslpath', ['-aw', path], {encoding: 'utf8'});\n\t\treturn stdout.trim();\n\t} catch {\n\t\t// If wslpath fails, return the original path\n\t\treturn path;\n\t}\n};\n\nexport {default as isWsl} from 'is-wsl';\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport isInsideContainer from 'is-inside-container';\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isInsideContainer()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft')\n\t\t\t? !isInsideContainer() : false;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();\n","import fs from 'node:fs';\nimport isDocker from 'is-docker';\n\nlet cachedResult;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default function isInsideContainer() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n","import fs from 'node:fs';\n\nlet isDockerCached;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function isDocker() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDockerCached;\n}\n","import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const powerShellPath = () => `${process.env.SYSTEMROOT || process.env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n\n// Cache for PowerShell accessibility check\nlet canAccessCache;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessCache ??= (async () => {\n\t\ttry {\n\t\t\tawait fs.access(powerShellPath(), fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessCache;\n};\n\nexport const executePowerShell = async (command, options = {}) => {\n\tconst {\n\t\tpowerShellPath: psPath,\n\t\t...execFileOptions\n\t} = options;\n\n\tconst encodedCommand = executePowerShell.encodeCommand(command);\n\n\treturn execFile(\n\t\tpsPath ?? powerShellPath(),\n\t\t[\n\t\t\t...executePowerShell.argumentsPrefix,\n\t\t\tencodedCommand,\n\t\t],\n\t\t{\n\t\t\tencoding: 'utf8',\n\t\t\t...execFileOptions,\n\t\t},\n\t);\n};\n\nexecutePowerShell.argumentsPrefix = [\n\t'-NoProfile',\n\t'-NonInteractive',\n\t'-ExecutionPolicy',\n\t'Bypass',\n\t'-EncodedCommand',\n];\n\nexecutePowerShell.encodeCommand = command => Buffer.from(command, 'utf16le').toString('base64');\n\nexecutePowerShell.escapeArgument = value => `'${String(value).replaceAll('\\'', '\\'\\'')}'`;\n","export default function defineLazyProperty(object, propertyName, valueGetter) {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = valueGetter();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nexport {_windowsBrowserProgIdMap} from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\tconst browserId = match?.groups.id ?? 'com.apple.Safari';\n\n\t// Correct the case for Safari's bundle identifier\n\tif (browserId === 'com.apple.safari') {\n\t\treturn 'com.apple.Safari';\n\t}\n\n\treturn browserId;\n}\n","import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true, signal} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst execOptions = {};\n\tif (signal) {\n\t\texecOptions.signal = signal;\n\t}\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments], execOptions);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n","import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n","import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// TODO: Fix the casing of bundle identifiers in the next major version.\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // The missing `L` is correct.\n\tMSEdgeBHTML: {name: 'Edge Beta', id: 'com.microsoft.edge.beta'},\n\tMSEdgeDHTML: {name: 'Edge Dev', id: 'com.microsoft.edge.dev'},\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tChromeBHTML: {name: 'Chrome Beta', id: 'com.google.chrome.beta'},\n\tChromeDHTML: {name: 'Chrome Dev', id: 'com.google.chrome.dev'},\n\tChromiumHTM: {name: 'Chromium', id: 'org.chromium.Chromium'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveDHTML: {name: 'Brave Dev', id: 'com.brave.Browser.dev'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tOperaStable: {name: 'Opera', id: 'com.operasoftware.Opera'},\n\tVivaldiHTM: {name: 'Vivaldi', id: 'com.vivaldi.Vivaldi'},\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n};\n\nexport const _windowsBrowserProgIdMap = new Map(Object.entries(windowsBrowserProgIds));\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\tconst browser = windowsBrowserProgIds[id];\n\tif (!browser) {\n\t\tthrow new UnknownBrowserError(`Unknown browser ID: ${id}`);\n\t}\n\n\treturn browser;\n}\n","import process from 'node:process';\n\nconst isInSsh = Boolean(process.env.SSH_CONNECTION\n\t|| process.env.SSH_CLIENT\n\t|| process.env.SSH_TTY);\n\nexport default isInSsh;\n","import chalk from \"chalk\";\nimport {\n createServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"node:http\";\nimport open from \"open\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport {\n deleteConfig,\n getApiKey,\n getWebUrl,\n isLoggedIn,\n writeConfig,\n} from \"../utils/config.js\";\n\nconst LOGIN_TIMEOUT = 300000; // 5 minutes\n\n/**\n * Find an available port\n */\nasync function findAvailablePort(startPort: number = 8765): Promise<number> {\n for (let port = startPort; port < startPort + 100; port++) {\n try {\n await new Promise<void>((resolve, reject) => {\n const server = createServer();\n server.once(\"error\", reject);\n server.once(\"listening\", () => {\n server.close();\n resolve();\n });\n server.listen(port);\n });\n return port;\n } catch {\n continue;\n }\n }\n throw new Error(\"No available ports found\");\n}\n\n/**\n * Start local server to receive OAuth callback\n */\nasync function startCallbackServer(\n port: number\n): Promise<{ server: any; token: Promise<string> }> {\n return new Promise((resolve, reject) => {\n let tokenResolver: ((value: string) => void) | null = null;\n const tokenPromise = new Promise<string>((res) => {\n tokenResolver = res;\n });\n\n const server = createServer((req: IncomingMessage, res: ServerResponse) => {\n if (req.url?.startsWith(\"/callback\")) {\n const url = new URL(req.url, `http://localhost:${port}`);\n const token = url.searchParams.get(\"token\");\n\n if (token && tokenResolver) {\n // Send success response\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>Login Successful</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n background: #000;\n padding: 1rem;\n }\n .container {\n width: 100%;\n max-width: 28rem;\n padding: 3rem;\n text-align: center;\n -webkit-backdrop-filter: blur(40px);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 1.5rem;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n }\n .icon-container {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 6rem;\n height: 6rem;\n margin-bottom: 2rem;\n background: rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-radius: 50%;\n }\n .checkmark {\n font-size: 4rem;\n color: #fff;\n line-height: 1;\n animation: scaleIn 0.5s ease-out;\n }\n @keyframes scaleIn {\n from {\n transform: scale(0);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n h1 {\n color: #fff;\n margin: 0 0 1rem 0;\n font-size: 2.5rem;\n font-weight: 700;\n letter-spacing: -0.025em;\n }\n p {\n color: rgba(255, 255, 255, 0.8);\n margin: 0 0 2rem 0;\n font-size: 1.125rem;\n line-height: 1.5;\n }\n .spinner {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n border: 3px solid rgba(255, 255, 255, 0.3);\n border-top-color: #fff;\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n }\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n .footer {\n margin-top: 2rem;\n color: rgba(255, 255, 255, 0.6);\n font-size: 0.875rem;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <h1>Authentication Successful!</h1>\n <p>You can now close this window and return to the CLI.</p>\n </div>\n </body>\n </html>\n `);\n tokenResolver(token);\n } else {\n res.writeHead(400, { \"Content-Type\": \"text/html\" });\n res.end(`\n <!DOCTYPE html>\n <html>\n <head>\n <title>Login Failed</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n background: #000;\n padding: 1rem;\n }\n .container {\n width: 100%;\n max-width: 28rem;\n padding: 3rem;\n text-align: center;\n background: rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(40px);\n -webkit-backdrop-filter: blur(40px);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 1.5rem;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n }\n .icon-container {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 6rem;\n height: 6rem;\n margin-bottom: 2rem;\n background: rgba(255, 255, 255, 0.1);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-radius: 50%;\n }\n .cross {\n font-size: 4rem;\n color: #fff;\n line-height: 1;\n }\n h1 {\n color: #fff;\n margin: 0 0 1rem 0;\n font-size: 2.5rem;\n font-weight: 700;\n letter-spacing: -0.025em;\n }\n p {\n color: rgba(255, 255, 255, 0.8);\n margin: 0;\n font-size: 1.125rem;\n line-height: 1.5;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <div class=\"icon-container\">\n <div class=\"cross\">✗</div>\n </div>\n <h1>Login Failed</h1>\n <p>No token received. Please try again.</p>\n </div>\n </body>\n </html>\n `);\n }\n }\n });\n\n server.listen(port, () => {\n resolve({ server, token: tokenPromise });\n });\n\n server.on(\"error\", reject);\n });\n}\n\n/**\n * Login command - opens browser for OAuth flow\n */\nexport async function loginCommand(): Promise<void> {\n try {\n // Check if already logged in\n if (await isLoggedIn()) {\n console.log(\n chalk.yellow(\n \"⚠️ You are already logged in. Run 'mcp-use logout' first if you want to login with a different account.\"\n )\n );\n return;\n }\n\n console.log(chalk.cyan.bold(\"🔐 Logging in to mcp-use cloud...\\n\"));\n\n // Find available port\n const port = await findAvailablePort();\n const redirectUri = `http://localhost:${port}/callback`;\n\n console.log(chalk.gray(`Starting local server on port ${port}...`));\n\n // Start callback server\n const { server, token } = await startCallbackServer(port);\n\n // Get the web URL (respects NEXT_PUBLIC_API_URL)\n const webUrl = await getWebUrl();\n const loginUrl = `${webUrl}/auth/cli?redirect_uri=${encodeURIComponent(redirectUri)}`;\n\n console.log(chalk.gray(`Opening browser to ${webUrl}/auth/cli...\\n`));\n console.log(\n chalk.white(\n \"If the browser doesn't open automatically, please visit:\\n\" +\n chalk.cyan(loginUrl)\n )\n );\n\n // Open browser\n await open(loginUrl);\n\n console.log(\n chalk.gray(\"\\nWaiting for authentication... (this may take a moment)\")\n );\n\n // Wait for token with timeout\n const jwtToken = await Promise.race([\n token,\n new Promise<string>((_, reject) =>\n setTimeout(\n () => reject(new Error(\"Login timeout - please try again\")),\n LOGIN_TIMEOUT\n )\n ),\n ]);\n\n // Close server\n server.close();\n\n console.log(\n chalk.gray(\"Received authentication token, creating API key...\")\n );\n\n // Create API key using JWT token\n const api = await McpUseAPI.create();\n const apiKeyResponse = await api.createApiKey(jwtToken, \"CLI\");\n\n // Save API key to config\n await writeConfig({\n apiKey: apiKeyResponse.api_key,\n });\n\n console.log(chalk.green.bold(\"\\n✓ Successfully logged in!\"));\n console.log(\n chalk.gray(\n `\\nYour API key has been saved to ${chalk.white(\"~/.mcp-use/config.json\")}`\n )\n );\n console.log(\n chalk.gray(\n \"You can now deploy your MCP servers with \" +\n chalk.white(\"mcp-use deploy\")\n )\n );\n\n // Exit successfully\n process.exit(0);\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Login failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Logout command - revokes API key and deletes config\n */\nexport async function logoutCommand(): Promise<void> {\n try {\n // Check if logged in\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n return;\n }\n\n console.log(chalk.cyan.bold(\"🔓 Logging out...\\n\"));\n\n // Note: We can't revoke the API key from the CLI because we'd need the key_id\n // which isn't stored in the config. The API key will remain valid until\n // manually revoked from the web interface.\n // For now, we just delete the local config.\n\n await deleteConfig();\n\n console.log(chalk.green.bold(\"✓ Successfully logged out!\"));\n console.log(\n chalk.gray(\n \"\\nYour local config has been deleted. The API key will remain active until revoked from the web interface.\"\n )\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Logout failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Whoami command - shows current user info\n */\nexport async function whoamiCommand(): Promise<void> {\n try {\n // Check if logged in\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n return;\n }\n\n console.log(chalk.cyan.bold(\"👤 Current user:\\n\"));\n\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n\n console.log(chalk.white(\"Email: \") + chalk.cyan(authInfo.email));\n console.log(chalk.white(\"User ID: \") + chalk.gray(authInfo.user_id));\n\n const apiKey = await getApiKey();\n if (apiKey) {\n // Show first 6 characters\n const masked = apiKey.substring(0, 6) + \"...\";\n console.log(chalk.white(\"API Key: \") + chalk.gray(masked));\n }\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get user info:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\n\nexport interface McpConfig {\n apiKey?: string;\n apiUrl?: string;\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), \".mcp-use\");\nconst CONFIG_FILE = path.join(CONFIG_DIR, \"config.json\");\n\n// Backend API URL (where /api/v1 endpoints are)\nconst DEFAULT_API_URL = process.env.MCP_API_URL\n ? process.env.MCP_API_URL.replace(/\\/api\\/v1$/, \"\") + \"/api/v1\" // Ensure /api/v1 suffix\n : \"https://cloud.mcp-use.com/api/v1\";\n\n// Frontend/Web URL (where /auth/cli page is)\nconst DEFAULT_WEB_URL = process.env.MCP_WEB_URL\n ? process.env.MCP_WEB_URL\n : \"https://mcp-use.com\";\n\n/**\n * Ensure config directory exists\n */\nasync function ensureConfigDir(): Promise<void> {\n try {\n await fs.mkdir(CONFIG_DIR, { recursive: true });\n } catch (error) {\n // Ignore error if directory already exists\n }\n}\n\n/**\n * Read config from disk\n */\nexport async function readConfig(): Promise<McpConfig> {\n try {\n const content = await fs.readFile(CONFIG_FILE, \"utf-8\");\n return JSON.parse(content);\n } catch (error) {\n // Return empty config if file doesn't exist\n return {};\n }\n}\n\n/**\n * Write config to disk\n */\nexport async function writeConfig(config: McpConfig): Promise<void> {\n await ensureConfigDir();\n await fs.writeFile(CONFIG_FILE, JSON.stringify(config, null, 2), \"utf-8\");\n}\n\n/**\n * Delete config file\n */\nexport async function deleteConfig(): Promise<void> {\n try {\n await fs.unlink(CONFIG_FILE);\n } catch (error) {\n // Ignore error if file doesn't exist\n }\n}\n\n/**\n * Get API URL from config or use default\n */\nexport async function getApiUrl(): Promise<string> {\n const config = await readConfig();\n return config.apiUrl || DEFAULT_API_URL;\n}\n\n/**\n * Get API key from config\n */\nexport async function getApiKey(): Promise<string | null> {\n const config = await readConfig();\n return config.apiKey || null;\n}\n\n/**\n * Check if user is logged in\n */\nexport async function isLoggedIn(): Promise<boolean> {\n const apiKey = await getApiKey();\n return !!apiKey;\n}\n\n/**\n * Get web URL (for browser-based auth)\n * This is the frontend URL where /auth/cli lives\n */\nexport async function getWebUrl(): Promise<string> {\n return DEFAULT_WEB_URL;\n}\n","import { getApiKey, getApiUrl } from \"./config.js\";\n\nexport interface APIKeyCreateRequest {\n name: string;\n}\n\nexport interface APIKeyCreateResponse {\n api_key: string;\n name: string;\n}\n\nexport interface AuthTestResponse {\n message: string;\n user_id: string;\n email: string;\n}\n\nexport interface GitHubSource {\n type: \"github\";\n repo: string;\n branch?: string;\n startCommand?: string;\n runtime?: \"node\" | \"python\";\n port?: number;\n env?: Record<string, string>;\n buildCommand?: string;\n baseImage?: string;\n githubCheckRunId?: number;\n}\n\nexport interface UploadSource {\n type: \"upload\";\n startCommand?: string;\n runtime?: \"node\" | \"python\";\n port?: number;\n env?: Record<string, string>;\n buildCommand?: string;\n baseImage?: string;\n}\n\nexport type DeploymentSource = GitHubSource | UploadSource;\n\nexport interface CreateDeploymentRequest {\n name: string;\n source: DeploymentSource;\n customDomain?: string;\n healthCheckPath?: string;\n}\n\nexport interface Deployment {\n id: string;\n userId: string;\n name: string;\n source: DeploymentSource;\n domain?: string;\n customDomain?: string;\n port: number;\n createdAt: string;\n updatedAt: string;\n status: \"pending\" | \"building\" | \"running\" | \"stopped\" | \"failed\";\n healthCheckPath?: string;\n provider?: string;\n appName?: string;\n error?: string;\n buildLogs?: string;\n buildStartedAt?: string;\n buildCompletedAt?: string;\n gitCommitSha?: string;\n gitBranch?: string;\n gitCommitMessage?: string;\n}\n\nexport interface UpdateDeploymentRequest {\n name?: string;\n customDomain?: string;\n env?: Record<string, string>;\n status?: \"running\" | \"stopped\";\n}\n\nexport interface DeploymentListResponse {\n deployments: Deployment[];\n total: number;\n}\n\nexport interface LogsResponse {\n success: boolean;\n data: {\n logs: string;\n };\n}\n\n/**\n * API client for mcp-use cloud\n */\nexport class McpUseAPI {\n private baseUrl: string;\n private apiKey: string | undefined;\n\n constructor(baseUrl?: string, apiKey?: string) {\n this.baseUrl = baseUrl || \"\";\n this.apiKey = apiKey;\n }\n\n /**\n * Initialize API client with config\n */\n static async create(): Promise<McpUseAPI> {\n const baseUrl = await getApiUrl();\n const apiKey = await getApiKey();\n return new McpUseAPI(baseUrl, apiKey ?? undefined);\n }\n\n /**\n * Make authenticated request\n */\n private async request<T>(\n endpoint: string,\n options: {\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n timeout?: number;\n } = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...((options.headers as Record<string, string>) || {}),\n };\n\n if (this.apiKey) {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n // Add timeout support (default 30 seconds)\n const timeout = options.timeout || 30000;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`API request failed: ${response.status} ${error}`);\n }\n\n return response.json() as Promise<T>;\n } catch (error: any) {\n clearTimeout(timeoutId);\n if (error.name === \"AbortError\") {\n throw new Error(\n `Request timeout after ${timeout / 1000}s. Try using --follow flag to stream logs instead.`\n );\n }\n throw error;\n }\n }\n\n /**\n * Create API key using JWT token\n */\n async createApiKey(\n jwtToken: string,\n name: string = \"CLI\"\n ): Promise<APIKeyCreateResponse> {\n const url = `${this.baseUrl}/api-key`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${jwtToken}`,\n },\n body: JSON.stringify({ name }),\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to create API key: ${response.status} ${error}`);\n }\n\n return response.json() as Promise<APIKeyCreateResponse>;\n }\n\n /**\n * Test authentication\n */\n async testAuth(): Promise<AuthTestResponse> {\n return this.request<AuthTestResponse>(\"/test-auth\");\n }\n\n /**\n * Create deployment\n */\n async createDeployment(\n request: CreateDeploymentRequest\n ): Promise<Deployment> {\n return this.request<Deployment>(\"/deployments\", {\n method: \"POST\",\n body: JSON.stringify(request),\n });\n }\n\n /**\n * Get deployment by ID\n */\n async getDeployment(deploymentId: string): Promise<Deployment> {\n return this.request<Deployment>(`/deployments/${deploymentId}`);\n }\n\n /**\n * Stream deployment logs\n */\n async *streamDeploymentLogs(\n deploymentId: string\n ): AsyncGenerator<string, void, unknown> {\n const url = `${this.baseUrl}/deployments/${deploymentId}/logs/stream`;\n const headers: Record<string, string> = {};\n\n if (this.apiKey) {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n const response = await fetch(url, { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to stream logs: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error(\"Response body is null\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6);\n try {\n const parsed = JSON.parse(data);\n if (parsed.log) {\n yield parsed.log;\n } else if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n // Skip invalid JSON\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n /**\n * Create deployment with source code upload\n */\n async createDeploymentWithUpload(\n request: CreateDeploymentRequest,\n filePath: string\n ): Promise<Deployment> {\n const { readFile } = await import(\"node:fs/promises\");\n const { basename } = await import(\"node:path\");\n const { stat } = await import(\"node:fs/promises\");\n\n // Check file size (2MB max)\n const stats = await stat(filePath);\n const maxSize = 2 * 1024 * 1024; // 2MB\n if (stats.size > maxSize) {\n throw new Error(\n `File size (${(stats.size / 1024 / 1024).toFixed(2)}MB) exceeds maximum of 2MB`\n );\n }\n\n const fileBuffer = await readFile(filePath);\n const filename = basename(filePath);\n\n // Build form data with deployment request and file\n const formData = new FormData();\n const blob = new Blob([fileBuffer], { type: \"application/gzip\" });\n formData.append(\"source_file\", blob, filename);\n formData.append(\"name\", request.name);\n formData.append(\"source_type\", \"upload\");\n\n if (request.source.type === \"upload\") {\n formData.append(\"runtime\", request.source.runtime || \"node\");\n formData.append(\"port\", String(request.source.port || 3000));\n if (request.source.startCommand) {\n formData.append(\"startCommand\", request.source.startCommand);\n }\n if (request.source.buildCommand) {\n formData.append(\"buildCommand\", request.source.buildCommand);\n }\n if (request.source.env && Object.keys(request.source.env).length > 0) {\n formData.append(\"env\", JSON.stringify(request.source.env));\n }\n }\n\n if (request.customDomain) {\n formData.append(\"customDomain\", request.customDomain);\n }\n if (request.healthCheckPath) {\n formData.append(\"healthCheckPath\", request.healthCheckPath);\n }\n\n const url = `${this.baseUrl}/deployments`;\n const headers: Record<string, string> = {};\n\n if (this.apiKey) {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: formData,\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Deployment failed: ${error}`);\n }\n\n return response.json() as Promise<Deployment>;\n }\n\n /**\n * List all deployments\n */\n async listDeployments(): Promise<Deployment[]> {\n const response = await this.request<DeploymentListResponse>(\"/deployments\");\n return response.deployments;\n }\n\n /**\n * Delete deployment\n */\n async deleteDeployment(deploymentId: string): Promise<void> {\n await this.request(`/deployments/${deploymentId}`, {\n method: \"DELETE\",\n });\n }\n\n /**\n * Update deployment\n */\n async updateDeployment(\n deploymentId: string,\n updates: UpdateDeploymentRequest\n ): Promise<Deployment> {\n return this.request<Deployment>(`/deployments/${deploymentId}`, {\n method: \"PATCH\",\n body: JSON.stringify(updates),\n });\n }\n\n /**\n * Redeploy deployment\n */\n async redeployDeployment(\n deploymentId: string,\n filePath?: string\n ): Promise<Deployment> {\n if (filePath) {\n // Redeploy with file upload (for local source)\n const { readFile } = await import(\"node:fs/promises\");\n const { basename } = await import(\"node:path\");\n const { stat } = await import(\"node:fs/promises\");\n\n // Check file size\n const stats = await stat(filePath);\n const maxSize = 2 * 1024 * 1024;\n if (stats.size > maxSize) {\n throw new Error(\n `File size (${(stats.size / 1024 / 1024).toFixed(2)}MB) exceeds maximum of 2MB`\n );\n }\n\n const fileBuffer = await readFile(filePath);\n const formData = new FormData();\n const blob = new Blob([fileBuffer], { type: \"application/gzip\" });\n formData.append(\"source_file\", blob, basename(filePath));\n\n const headers: Record<string, string> = {};\n if (this.apiKey) headers[\"x-api-key\"] = this.apiKey;\n\n const response = await fetch(\n `${this.baseUrl}/deployments/${deploymentId}/redeploy`,\n {\n method: \"POST\",\n headers,\n body: formData,\n }\n );\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Redeploy failed: ${error}`);\n }\n return response.json();\n } else {\n // Redeploy GitHub source\n return this.request<Deployment>(`/deployments/${deploymentId}/redeploy`, {\n method: \"POST\",\n });\n }\n }\n\n /**\n * Get deployment logs\n */\n async getDeploymentLogs(deploymentId: string): Promise<string> {\n const response = await this.request<LogsResponse>(\n `/deployments/${deploymentId}/logs`,\n { timeout: 60000 } // 60 second timeout for logs\n );\n return response.data.logs;\n }\n\n /**\n * Get deployment build logs\n */\n async getDeploymentBuildLogs(deploymentId: string): Promise<string> {\n const response = await this.request<LogsResponse>(\n `/deployments/${deploymentId}/logs/build`,\n { timeout: 60000 } // 60 second timeout for logs\n );\n return response.data.logs;\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { createInterface } from \"node:readline\";\nimport { MCPClient } from \"mcp-use/client\";\nimport type { MCPSession } from \"mcp-use/client\";\nimport {\n getActiveSession,\n getSession,\n listAllSessions,\n saveSession,\n setActiveSession,\n updateSessionInfo,\n} from \"../utils/session-storage.js\";\nimport {\n formatError,\n formatHeader,\n formatInfo,\n formatJson,\n formatKeyValue,\n formatPromptMessages,\n formatResourceContent,\n formatSchema,\n formatSuccess,\n formatTable,\n formatToolCall,\n formatWarning,\n} from \"../utils/format.js\";\n\n// In-memory session map\nconst activeSessions = new Map<\n string,\n { client: MCPClient; session: MCPSession }\n>();\n\n/**\n * Get or restore a session by name\n */\nasync function getOrRestoreSession(\n sessionName: string | null\n): Promise<{ name: string; session: MCPSession } | null> {\n // If no session name provided, use active session\n if (!sessionName) {\n const active = await getActiveSession();\n if (!active) {\n console.error(\n formatError(\"No active session. Connect to a server first.\")\n );\n console.error(\n formatInfo(\"Use: npx mcp-use client connect <url> --name <name>\")\n );\n return null;\n }\n sessionName = active.name;\n }\n\n // Check if session is already connected in memory\n if (activeSessions.has(sessionName)) {\n const { session } = activeSessions.get(sessionName)!;\n return { name: sessionName, session };\n }\n\n // Try to restore from storage\n const config = await getSession(sessionName);\n if (!config) {\n console.error(formatError(`Session '${sessionName}' not found`));\n return null;\n }\n\n // Reconnect\n try {\n const client = new MCPClient();\n\n if (config.type === \"http\") {\n client.addServer(sessionName, {\n url: config.url!,\n headers: config.authToken\n ? { Authorization: `Bearer ${config.authToken}` }\n : undefined,\n });\n } else if (config.type === \"stdio\") {\n client.addServer(sessionName, {\n command: config.command!,\n args: config.args || [],\n env: config.env,\n });\n } else {\n console.error(formatError(`Unknown session type: ${config.type}`));\n return null;\n }\n\n const session = await client.createSession(sessionName);\n activeSessions.set(sessionName, { client, session });\n\n console.error(formatInfo(`Reconnected to session '${sessionName}'`));\n return { name: sessionName, session };\n } catch (error: any) {\n console.error(formatError(`Failed to restore session: ${error.message}`));\n return null;\n }\n}\n\n/**\n * Connect command\n */\nexport async function connectCommand(\n urlOrCommand: string,\n options: {\n name?: string;\n stdio?: boolean;\n auth?: string;\n }\n): Promise<void> {\n try {\n const sessionName = options.name || `session-${Date.now()}`;\n\n const client = new MCPClient();\n let session: MCPSession;\n\n if (options.stdio) {\n // Parse stdio command\n const parts = urlOrCommand.split(\" \");\n const command = parts[0];\n const args = parts.slice(1);\n\n console.error(\n formatInfo(`Connecting to stdio server: ${command} ${args.join(\" \")}`)\n );\n\n client.addServer(sessionName, {\n command,\n args,\n });\n\n session = await client.createSession(sessionName);\n\n // Save session config\n await saveSession(sessionName, {\n type: \"stdio\",\n command,\n args,\n lastUsed: new Date().toISOString(),\n });\n } else {\n // HTTP connection\n console.error(formatInfo(`Connecting to ${urlOrCommand}...`));\n\n client.addServer(sessionName, {\n url: urlOrCommand,\n headers: options.auth\n ? { Authorization: `Bearer ${options.auth}` }\n : undefined,\n });\n\n session = await client.createSession(sessionName);\n\n // Save session config\n await saveSession(sessionName, {\n type: \"http\",\n url: urlOrCommand,\n authToken: options.auth,\n lastUsed: new Date().toISOString(),\n });\n }\n\n // Store in memory\n activeSessions.set(sessionName, { client, session });\n\n // Update session info\n const serverInfo = session.serverInfo;\n const capabilities = session.serverCapabilities;\n\n if (serverInfo) {\n await updateSessionInfo(sessionName, serverInfo, capabilities);\n }\n\n // Display connection info\n console.log(formatSuccess(`Connected to ${sessionName}`));\n\n if (serverInfo) {\n console.log(\"\");\n console.log(formatHeader(\"Server Information:\"));\n console.log(\n formatKeyValue({\n Name: serverInfo.name,\n Version: serverInfo.version || \"unknown\",\n })\n );\n }\n\n if (capabilities) {\n console.log(\"\");\n console.log(formatHeader(\"Capabilities:\"));\n const caps = Object.keys(capabilities).join(\", \");\n console.log(` ${caps || \"none\"}`);\n }\n\n // Count available resources\n const tools = session.tools;\n console.log(\"\");\n console.log(\n formatInfo(\n `Available: ${tools.length} tool${tools.length !== 1 ? \"s\" : \"\"}`\n )\n );\n } catch (error: any) {\n console.error(formatError(`Connection failed: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Disconnect command\n */\nexport async function disconnectCommand(\n sessionName?: string,\n options?: { all?: boolean }\n): Promise<void> {\n try {\n if (options?.all) {\n // Disconnect all sessions\n for (const [name, { client }] of activeSessions.entries()) {\n await client.closeAllSessions();\n activeSessions.delete(name);\n console.log(formatSuccess(`Disconnected from ${name}`));\n }\n return;\n }\n\n if (!sessionName) {\n const active = await getActiveSession();\n if (!active) {\n console.error(formatError(\"No active session to disconnect\"));\n return;\n }\n sessionName = active.name;\n }\n\n const sessionData = activeSessions.get(sessionName);\n if (sessionData) {\n await sessionData.client.closeAllSessions();\n activeSessions.delete(sessionName);\n console.log(formatSuccess(`Disconnected from ${sessionName}`));\n } else {\n console.log(formatInfo(`Session '${sessionName}' is not connected`));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to disconnect: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List sessions command\n */\nexport async function listSessionsCommand(): Promise<void> {\n try {\n const sessions = await listAllSessions();\n\n if (sessions.length === 0) {\n console.log(formatInfo(\"No saved sessions\"));\n console.log(\n formatInfo(\"Connect to a server with: npx mcp-use client connect <url>\")\n );\n return;\n }\n\n console.log(formatHeader(\"Saved Sessions:\"));\n console.log(\"\");\n\n const tableData = sessions.map((s) => ({\n name: s.isActive ? chalk.green.bold(`${s.name} *`) : s.name,\n type: s.config.type,\n target:\n s.config.type === \"http\"\n ? s.config.url || \"\"\n : `${s.config.command} ${(s.config.args || []).join(\" \")}`,\n server: s.config.serverInfo?.name || \"unknown\",\n status: activeSessions.has(s.name)\n ? chalk.green(\"connected\")\n : chalk.gray(\"disconnected\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Name\" },\n { key: \"type\", header: \"Type\" },\n { key: \"target\", header: \"Target\", width: 40 },\n { key: \"server\", header: \"Server\" },\n { key: \"status\", header: \"Status\" },\n ])\n );\n\n console.log(\"\");\n console.log(chalk.gray(\"* = active session\"));\n } catch (error: any) {\n console.error(formatError(`Failed to list sessions: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Switch session command\n */\nexport async function switchSessionCommand(name: string): Promise<void> {\n try {\n await setActiveSession(name);\n console.log(formatSuccess(`Switched to session '${name}'`));\n } catch (error: any) {\n console.error(formatError(`Failed to switch session: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List tools command\n */\nexport async function listToolsCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const tools = await session.listTools();\n\n if (options.json) {\n console.log(formatJson(tools));\n return;\n }\n\n if (tools.length === 0) {\n console.log(formatInfo(\"No tools available\"));\n return;\n }\n\n console.log(formatHeader(`Available Tools (${tools.length}):`));\n console.log(\"\");\n\n const tableData = tools.map((tool) => ({\n name: chalk.bold(tool.name),\n description: tool.description || chalk.gray(\"No description\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Tool\", width: 25 },\n { key: \"description\", header: \"Description\", width: 50 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list tools: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Describe tool command\n */\nexport async function describeToolCommand(\n toolName: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const tools = session.tools;\n const tool = tools.find((t) => t.name === toolName);\n\n if (!tool) {\n console.error(formatError(`Tool '${toolName}' not found`));\n console.log(\"\");\n console.log(formatInfo(\"Available tools:\"));\n tools.forEach((t) => console.log(` • ${t.name}`));\n return;\n }\n\n console.log(formatHeader(`Tool: ${tool.name}`));\n console.log(\"\");\n\n if (tool.description) {\n console.log(tool.description);\n console.log(\"\");\n }\n\n if (tool.inputSchema) {\n console.log(formatHeader(\"Input Schema:\"));\n console.log(formatSchema(tool.inputSchema));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to describe tool: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Call tool command\n */\nexport async function callToolCommand(\n toolName: string,\n argsJson?: string,\n options?: { session?: string; timeout?: number; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options?.session || null);\n if (!result) return;\n\n const { session } = result;\n\n // Parse arguments\n let args: Record<string, any> = {};\n if (argsJson) {\n try {\n args = JSON.parse(argsJson);\n } catch (error) {\n console.error(formatError(\"Invalid JSON arguments\"));\n return;\n }\n } else {\n // Check if tool requires arguments\n const tools = session.tools;\n const tool = tools.find((t) => t.name === toolName);\n\n if (tool?.inputSchema?.required && tool.inputSchema.required.length > 0) {\n console.error(\n formatError(\n \"This tool requires arguments. Provide them as a JSON string.\"\n )\n );\n console.log(\"\");\n console.log(formatInfo(\"Example:\"));\n console.log(\n ` npx mcp-use client tools call ${toolName} '{\"param\": \"value\"}'`\n );\n console.log(\"\");\n console.log(formatInfo(\"Tool schema:\"));\n console.log(formatSchema(tool.inputSchema));\n return;\n }\n }\n\n // Call the tool\n console.error(formatInfo(`Calling tool '${toolName}'...`));\n const callResult = await session.callTool(toolName, args, {\n timeout: options?.timeout,\n });\n\n if (options?.json) {\n console.log(formatJson(callResult));\n } else {\n console.log(formatToolCall(callResult));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to call tool: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List resources command\n */\nexport async function listResourcesCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const resourcesResult = await session.listAllResources();\n const resources = resourcesResult.resources;\n\n if (options.json) {\n console.log(formatJson(resources));\n return;\n }\n\n if (resources.length === 0) {\n console.log(formatInfo(\"No resources available\"));\n return;\n }\n\n console.log(formatHeader(`Available Resources (${resources.length}):`));\n console.log(\"\");\n\n const tableData = resources.map((resource) => ({\n uri: resource.uri,\n name: resource.name || chalk.gray(\"(no name)\"),\n type: resource.mimeType || chalk.gray(\"unknown\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"uri\", header: \"URI\", width: 40 },\n { key: \"name\", header: \"Name\", width: 20 },\n { key: \"type\", header: \"Type\", width: 15 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list resources: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Read resource command\n */\nexport async function readResourceCommand(\n uri: string,\n options: { session?: string; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n console.error(formatInfo(`Reading resource: ${uri}`));\n const resource = await session.readResource(uri);\n\n if (options.json) {\n console.log(formatJson(resource));\n } else {\n console.log(formatResourceContent(resource));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to read resource: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Subscribe to resource command\n */\nexport async function subscribeResourceCommand(\n uri: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n await session.subscribeToResource(uri);\n console.log(formatSuccess(`Subscribed to resource: ${uri}`));\n\n // Set up notification handler\n session.on(\"notification\", async (notification) => {\n if (notification.method === \"notifications/resources/updated\") {\n console.log(\"\");\n console.log(formatInfo(\"Resource updated:\"));\n console.log(formatJson(notification.params));\n }\n });\n\n console.log(formatInfo(\"Listening for updates... (Press Ctrl+C to stop)\"));\n\n // Keep process alive\n await new Promise(() => {});\n } catch (error: any) {\n console.error(\n formatError(`Failed to subscribe to resource: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * Unsubscribe from resource command\n */\nexport async function unsubscribeResourceCommand(\n uri: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n await session.unsubscribeFromResource(uri);\n console.log(formatSuccess(`Unsubscribed from resource: ${uri}`));\n } catch (error: any) {\n console.error(\n formatError(`Failed to unsubscribe from resource: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * List prompts command\n */\nexport async function listPromptsCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const promptsResult = await session.listPrompts();\n const prompts = promptsResult.prompts;\n\n if (options.json) {\n console.log(formatJson(prompts));\n return;\n }\n\n if (prompts.length === 0) {\n console.log(formatInfo(\"No prompts available\"));\n return;\n }\n\n console.log(formatHeader(`Available Prompts (${prompts.length}):`));\n console.log(\"\");\n\n const tableData = prompts.map((prompt) => ({\n name: chalk.bold(prompt.name),\n description: prompt.description || chalk.gray(\"No description\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Prompt\", width: 25 },\n { key: \"description\", header: \"Description\", width: 50 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list prompts: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Get prompt command\n */\nexport async function getPromptCommand(\n promptName: string,\n argsJson?: string,\n options?: { session?: string; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options?.session || null);\n if (!result) return;\n\n const { session } = result;\n\n // Parse arguments\n let args: Record<string, any> = {};\n if (argsJson) {\n try {\n args = JSON.parse(argsJson);\n } catch (error) {\n console.error(formatError(\"Invalid JSON arguments\"));\n return;\n }\n }\n\n console.error(formatInfo(`Getting prompt '${promptName}'...`));\n const prompt = await session.getPrompt(promptName, args);\n\n if (options?.json) {\n console.log(formatJson(prompt));\n } else {\n console.log(formatHeader(`Prompt: ${promptName}`));\n console.log(\"\");\n\n if (prompt.description) {\n console.log(prompt.description);\n console.log(\"\");\n }\n\n if (prompt.messages) {\n console.log(formatHeader(\"Messages:\"));\n console.log(\"\");\n console.log(formatPromptMessages(prompt.messages));\n }\n }\n } catch (error: any) {\n console.error(formatError(`Failed to get prompt: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Interactive mode command\n */\nexport async function interactiveCommand(options: {\n session?: string;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { name: sessionName, session } = result;\n\n console.log(formatHeader(\"MCP Interactive Mode\"));\n console.log(\"\");\n console.log(formatInfo(`Connected to: ${sessionName}`));\n console.log(\"\");\n console.log(chalk.gray(\"Commands:\"));\n console.log(chalk.gray(\" tools list - List available tools\"));\n console.log(\n chalk.gray(\n \" tools call <name> - Call a tool (will prompt for args)\"\n )\n );\n console.log(chalk.gray(\" tools describe <name> - Show tool details\"));\n console.log(\n chalk.gray(\" resources list - List available resources\")\n );\n console.log(chalk.gray(\" resources read <uri> - Read a resource\"));\n console.log(\n chalk.gray(\" prompts list - List available prompts\")\n );\n console.log(chalk.gray(\" prompts get <name> - Get a prompt\"));\n console.log(chalk.gray(\" sessions list - List all sessions\"));\n console.log(\n chalk.gray(\" sessions switch <name> - Switch to another session\")\n );\n console.log(\n chalk.gray(\" exit, quit - Exit interactive mode\")\n );\n console.log(\"\");\n\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: chalk.cyan(\"mcp> \"),\n });\n\n rl.prompt();\n\n rl.on(\"line\", async (line) => {\n const trimmed = line.trim();\n\n if (!trimmed) {\n rl.prompt();\n return;\n }\n\n if (trimmed === \"exit\" || trimmed === \"quit\") {\n console.log(formatInfo(\"Goodbye!\"));\n rl.close();\n process.exit(0);\n }\n\n const parts = trimmed.split(\" \");\n const scope = parts[0];\n const command = parts[1];\n const arg = parts[2];\n\n try {\n if (scope === \"tools\") {\n if (command === \"list\") {\n const tools = await session.listTools();\n console.log(\n formatInfo(\n `Available tools: ${tools.map((t) => t.name).join(\", \")}`\n )\n );\n } else if (command === \"call\" && arg) {\n // Prompt for arguments\n rl.question(\n \"Arguments (JSON, or press Enter for none): \",\n async (argsInput) => {\n try {\n const args = argsInput.trim() ? JSON.parse(argsInput) : {};\n const result = await session.callTool(arg, args);\n console.log(formatToolCall(result));\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n rl.prompt();\n }\n );\n return;\n } else if (command === \"describe\" && arg) {\n const tools = session.tools;\n const tool = tools.find((t) => t.name === arg);\n if (tool) {\n console.log(formatHeader(`Tool: ${tool.name}`));\n if (tool.description) console.log(tool.description);\n if (tool.inputSchema) {\n console.log(\"\");\n console.log(formatSchema(tool.inputSchema));\n }\n } else {\n console.error(formatError(`Tool '${arg}' not found`));\n }\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: tools list, tools call <name>, tools describe <name>\"\n )\n );\n }\n } else if (scope === \"resources\") {\n if (command === \"list\") {\n const result = await session.listAllResources();\n const resources = result.resources;\n console.log(\n formatInfo(\n `Available resources: ${resources.map((r) => r.uri).join(\", \")}`\n )\n );\n } else if (command === \"read\" && arg) {\n const resource = await session.readResource(arg);\n console.log(formatResourceContent(resource));\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: resources list, resources read <uri>\"\n )\n );\n }\n } else if (scope === \"prompts\") {\n if (command === \"list\") {\n const result = await session.listPrompts();\n const prompts = result.prompts;\n console.log(\n formatInfo(\n `Available prompts: ${prompts.map((p) => p.name).join(\", \")}`\n )\n );\n } else if (command === \"get\" && arg) {\n rl.question(\n \"Arguments (JSON, or press Enter for none): \",\n async (argsInput) => {\n try {\n const args = argsInput.trim() ? JSON.parse(argsInput) : {};\n const prompt = await session.getPrompt(arg, args);\n console.log(formatPromptMessages(prompt.messages));\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n rl.prompt();\n }\n );\n return;\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: prompts list, prompts get <name>\"\n )\n );\n }\n } else if (scope === \"sessions\") {\n if (command === \"list\") {\n await listSessionsCommand();\n } else if (command === \"switch\" && arg) {\n console.log(\n formatWarning(\n \"Session switching in interactive mode will be available in a future version\"\n )\n );\n } else {\n console.error(formatError(\"Invalid command. Try: sessions list\"));\n }\n } else {\n console.error(\n formatError(\n \"Unknown command. Type a valid scope: tools, resources, prompts, sessions\"\n )\n );\n }\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n\n rl.prompt();\n });\n\n rl.on(\"close\", () => {\n console.log(\"\");\n console.log(formatInfo(\"Goodbye!\"));\n process.exit(0);\n });\n } catch (error: any) {\n console.error(\n formatError(`Failed to start interactive mode: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * Create the client command group\n */\nexport function createClientCommand(): Command {\n const clientCommand = new Command(\"client\").description(\n \"Interactive MCP client for terminal usage\"\n );\n\n // Connection commands\n clientCommand\n .command(\"connect <url>\")\n .description(\"Connect to an MCP server\")\n .option(\"--name <name>\", \"Session name\")\n .option(\"--stdio\", \"Use stdio connector instead of HTTP\")\n .option(\"--auth <token>\", \"Authentication token\")\n .action(connectCommand);\n\n clientCommand\n .command(\"disconnect [session]\")\n .description(\"Disconnect from a session\")\n .option(\"--all\", \"Disconnect all sessions\")\n .action(disconnectCommand);\n\n // Sessions scope\n const sessionsCommand = new Command(\"sessions\").description(\n \"Manage CLI sessions\"\n );\n sessionsCommand\n .command(\"list\")\n .description(\"List all saved sessions\")\n .action(listSessionsCommand);\n sessionsCommand\n .command(\"switch <name>\")\n .description(\"Switch to a different session\")\n .action(switchSessionCommand);\n clientCommand.addCommand(sessionsCommand);\n\n // Tools scope\n const toolsCommand = new Command(\"tools\").description(\n \"Interact with MCP tools\"\n );\n toolsCommand\n .command(\"list\")\n .description(\"List available tools\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listToolsCommand);\n toolsCommand\n .command(\"call <name> [args]\")\n .description(\"Call a tool with arguments (JSON string)\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--timeout <ms>\", \"Request timeout in milliseconds\", parseInt)\n .option(\"--json\", \"Output as JSON\")\n .action(callToolCommand);\n toolsCommand\n .command(\"describe <name>\")\n .description(\"Show tool details and schema\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(describeToolCommand);\n clientCommand.addCommand(toolsCommand);\n\n // Resources scope\n const resourcesCommand = new Command(\"resources\").description(\n \"Interact with MCP resources\"\n );\n resourcesCommand\n .command(\"list\")\n .description(\"List available resources\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listResourcesCommand);\n resourcesCommand\n .command(\"read <uri>\")\n .description(\"Read a resource by URI\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(readResourceCommand);\n resourcesCommand\n .command(\"subscribe <uri>\")\n .description(\"Subscribe to resource updates\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(subscribeResourceCommand);\n resourcesCommand\n .command(\"unsubscribe <uri>\")\n .description(\"Unsubscribe from resource updates\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(unsubscribeResourceCommand);\n clientCommand.addCommand(resourcesCommand);\n\n // Prompts scope\n const promptsCommand = new Command(\"prompts\").description(\n \"Interact with MCP prompts\"\n );\n promptsCommand\n .command(\"list\")\n .description(\"List available prompts\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listPromptsCommand);\n promptsCommand\n .command(\"get <name> [args]\")\n .description(\"Get a prompt with arguments (JSON string)\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(getPromptCommand);\n clientCommand.addCommand(promptsCommand);\n\n // Interactive mode\n clientCommand\n .command(\"interactive\")\n .description(\"Start interactive REPL mode\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(interactiveCommand);\n\n return clientCommand;\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\n\nexport interface SessionConfig {\n type: \"http\" | \"stdio\";\n url?: string;\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n authToken?: string;\n lastUsed: string;\n serverInfo?: {\n name: string;\n version?: string;\n };\n capabilities?: Record<string, unknown>;\n}\n\nexport interface SessionStorage {\n activeSession: string | null;\n sessions: Record<string, SessionConfig>;\n}\n\nconst SESSION_FILE_PATH = join(homedir(), \".mcp-use\", \"cli-sessions.json\");\n\n/**\n * Ensure the session storage directory exists\n */\nasync function ensureSessionDir(): Promise<void> {\n const dir = join(homedir(), \".mcp-use\");\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n}\n\n/**\n * Load persisted sessions from disk\n */\nexport async function loadSessions(): Promise<SessionStorage> {\n try {\n await ensureSessionDir();\n\n if (!existsSync(SESSION_FILE_PATH)) {\n return { activeSession: null, sessions: {} };\n }\n\n const content = await readFile(SESSION_FILE_PATH, \"utf-8\");\n return JSON.parse(content);\n } catch (error) {\n // If file doesn't exist or is invalid, return empty storage\n return { activeSession: null, sessions: {} };\n }\n}\n\n/**\n * Save sessions to disk\n */\nasync function saveSessions(storage: SessionStorage): Promise<void> {\n await ensureSessionDir();\n await writeFile(SESSION_FILE_PATH, JSON.stringify(storage, null, 2), \"utf-8\");\n}\n\n/**\n * Save or update a session configuration\n */\nexport async function saveSession(\n name: string,\n config: SessionConfig\n): Promise<void> {\n const storage = await loadSessions();\n storage.sessions[name] = {\n ...config,\n lastUsed: new Date().toISOString(),\n };\n\n // Set as active session if no active session exists\n if (!storage.activeSession) {\n storage.activeSession = name;\n }\n\n await saveSessions(storage);\n}\n\n/**\n * Remove a session from storage\n */\nexport async function removeSession(name: string): Promise<void> {\n const storage = await loadSessions();\n delete storage.sessions[name];\n\n // Clear active session if it was the one removed\n if (storage.activeSession === name) {\n // Set to first available session or null\n const sessionNames = Object.keys(storage.sessions);\n storage.activeSession = sessionNames.length > 0 ? sessionNames[0] : null;\n }\n\n await saveSessions(storage);\n}\n\n/**\n * Get the currently active session name\n */\nexport async function getActiveSessionName(): Promise<string | null> {\n const storage = await loadSessions();\n return storage.activeSession;\n}\n\n/**\n * Get the active session configuration\n */\nexport async function getActiveSession(): Promise<{\n name: string;\n config: SessionConfig;\n} | null> {\n const storage = await loadSessions();\n if (!storage.activeSession || !storage.sessions[storage.activeSession]) {\n return null;\n }\n\n return {\n name: storage.activeSession,\n config: storage.sessions[storage.activeSession],\n };\n}\n\n/**\n * Get a specific session configuration by name\n */\nexport async function getSession(name: string): Promise<SessionConfig | null> {\n const storage = await loadSessions();\n return storage.sessions[name] || null;\n}\n\n/**\n * Set the active session\n */\nexport async function setActiveSession(name: string): Promise<void> {\n const storage = await loadSessions();\n\n if (!storage.sessions[name]) {\n throw new Error(`Session '${name}' not found`);\n }\n\n storage.activeSession = name;\n storage.sessions[name].lastUsed = new Date().toISOString();\n\n await saveSessions(storage);\n}\n\n/**\n * List all stored sessions\n */\nexport async function listAllSessions(): Promise<\n Array<{ name: string; config: SessionConfig; isActive: boolean }>\n> {\n const storage = await loadSessions();\n\n return Object.entries(storage.sessions).map(([name, config]) => ({\n name,\n config,\n isActive: name === storage.activeSession,\n }));\n}\n\n/**\n * Update session info after connection\n */\nexport async function updateSessionInfo(\n name: string,\n serverInfo: { name: string; version?: string },\n capabilities?: Record<string, unknown>\n): Promise<void> {\n const storage = await loadSessions();\n\n if (storage.sessions[name]) {\n storage.sessions[name].serverInfo = serverInfo;\n storage.sessions[name].capabilities = capabilities;\n storage.sessions[name].lastUsed = new Date().toISOString();\n await saveSessions(storage);\n }\n}\n","import chalk from \"chalk\";\nimport type { CallToolResult } from \"mcp-use/client\";\n\n/**\n * Format data as a table with ASCII borders\n */\nexport function formatTable(\n data: Array<Record<string, any>>,\n columns: Array<{ key: string; header: string; width?: number }>\n): string {\n if (data.length === 0) {\n return chalk.gray(\"No items found\");\n }\n\n // Calculate column widths\n const widths = columns.map((col) => {\n const maxDataWidth = Math.max(\n ...data.map((row) => String(row[col.key] || \"\").length)\n );\n const headerWidth = col.header.length;\n return col.width || Math.max(maxDataWidth, headerWidth, 10);\n });\n\n // Helper to create a row\n const createRow = (values: string[], bold = false) => {\n const cells = values.map((val, i) => {\n const padded = val.padEnd(widths[i]);\n return bold ? chalk.bold(padded) : padded;\n });\n return `│ ${cells.join(\" │ \")} │`;\n };\n\n // Create separator line\n const separator = (char: string) => {\n const parts = widths.map((w) => char.repeat(w + 2));\n if (char === \"─\") {\n return `├${parts.join(\"┼\")}┤`;\n }\n return `└${parts.join(\"┴\")}┘`;\n };\n\n // Build table\n const lines: string[] = [];\n\n // Top border\n lines.push(`┌${widths.map((w) => \"─\".repeat(w + 2)).join(\"┬\")}┐`);\n\n // Header\n lines.push(\n createRow(\n columns.map((c) => c.header),\n true\n )\n );\n\n // Separator\n lines.push(separator(\"─\"));\n\n // Data rows\n data.forEach((row) => {\n lines.push(createRow(columns.map((c) => String(row[c.key] || \"\"))));\n });\n\n // Bottom border\n lines.push(separator(\"─\"));\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format data as JSON\n */\nexport function formatJson(data: any, pretty = true): string {\n if (pretty) {\n return JSON.stringify(data, null, 2);\n }\n return JSON.stringify(data);\n}\n\n/**\n * Format a tool call result\n */\nexport function formatToolCall(result: CallToolResult): string {\n const lines: string[] = [];\n\n if (result.isError) {\n lines.push(chalk.red(\"✗ Tool execution failed\"));\n lines.push(\"\");\n } else {\n lines.push(chalk.green(\"✓ Tool executed successfully\"));\n lines.push(\"\");\n }\n\n // Format content\n if (result.content && result.content.length > 0) {\n result.content.forEach((item, index) => {\n if (result.content.length > 1) {\n lines.push(chalk.bold(`Content ${index + 1}:`));\n }\n\n if (item.type === \"text\") {\n lines.push(item.text);\n } else if (item.type === \"image\") {\n lines.push(chalk.cyan(`[Image: ${item.mimeType || \"unknown type\"}]`));\n if (item.data) {\n lines.push(chalk.gray(`Data: ${item.data.substring(0, 50)}...`));\n }\n } else if (item.type === \"resource\") {\n lines.push(chalk.cyan(`[Resource]`));\n if (item.resource?.uri) {\n lines.push(chalk.gray(`URI: ${item.resource.uri}`));\n }\n if (item.resource && \"text\" in item.resource && item.resource.text) {\n lines.push(item.resource.text);\n }\n } else {\n lines.push(chalk.gray(`[Unknown content type: ${item.type}]`));\n }\n\n if (index < result.content.length - 1) {\n lines.push(\"\");\n }\n });\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format resource content\n */\nexport function formatResourceContent(content: any): string {\n if (!content || !content.contents) {\n return chalk.gray(\"No content\");\n }\n\n const lines: string[] = [];\n\n content.contents.forEach((item: any, index: number) => {\n if (content.contents.length > 1) {\n lines.push(chalk.bold(`Content ${index + 1}:`));\n }\n\n if (item.uri) {\n lines.push(chalk.gray(`URI: ${item.uri}`));\n }\n\n if (item.mimeType) {\n lines.push(chalk.gray(`Type: ${item.mimeType}`));\n }\n\n if (\"text\" in item && item.text) {\n lines.push(\"\");\n lines.push(item.text);\n } else if (\"blob\" in item && item.blob) {\n lines.push(\"\");\n lines.push(chalk.cyan(`[Binary data: ${item.blob.length} bytes]`));\n }\n\n if (index < content.contents.length - 1) {\n lines.push(\"\");\n lines.push(chalk.gray(\"─\".repeat(50)));\n lines.push(\"\");\n }\n });\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format a JSON schema in a readable way\n */\nexport function formatSchema(schema: any, indent = 0): string {\n if (!schema) {\n return chalk.gray(\"No schema\");\n }\n\n const lines: string[] = [];\n const pad = \" \".repeat(indent);\n\n if (schema.type === \"object\" && schema.properties) {\n Object.entries(schema.properties).forEach(([key, value]: [string, any]) => {\n const required = schema.required?.includes(key);\n const type = value.type || \"any\";\n const desc = value.description || \"\";\n\n const keyStr = required ? chalk.bold(key) : key;\n const typeStr = chalk.cyan(`(${type})`);\n const requiredStr = required ? chalk.red(\" *required\") : \"\";\n\n lines.push(`${pad}${keyStr} ${typeStr}${requiredStr}`);\n\n if (desc) {\n lines.push(`${pad} ${chalk.gray(desc)}`);\n }\n\n // Handle nested objects\n if (value.type === \"object\" && value.properties) {\n lines.push(formatSchema(value, indent + 1));\n }\n\n // Handle arrays\n if (value.type === \"array\" && value.items) {\n lines.push(`${pad} ${chalk.gray(\"Items:\")}`);\n if (value.items.type === \"object\") {\n lines.push(formatSchema(value.items, indent + 2));\n } else {\n lines.push(\n `${pad} ${chalk.cyan(`(${value.items.type || \"any\"})`)}`\n );\n }\n }\n });\n } else {\n lines.push(`${pad}${chalk.cyan(`Type: ${schema.type || \"any\"}`)}`);\n if (schema.description) {\n lines.push(`${pad}${chalk.gray(schema.description)}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format a list of items with bullets\n */\nexport function formatList(items: string[], bullet = \"•\"): string {\n return items.map((item) => ` ${bullet} ${item}`).join(\"\\n\");\n}\n\n/**\n * Format an error message\n */\nexport function formatError(error: Error | string): string {\n const message = typeof error === \"string\" ? error : error.message;\n return chalk.red(`✗ Error: ${message}`);\n}\n\n/**\n * Format a success message\n */\nexport function formatSuccess(message: string): string {\n return chalk.green(`✓ ${message}`);\n}\n\n/**\n * Format an info message\n */\nexport function formatInfo(message: string): string {\n return chalk.cyan(message);\n}\n\n/**\n * Format a warning message\n */\nexport function formatWarning(message: string): string {\n return chalk.yellow(`⚠ ${message}`);\n}\n\n/**\n * Create a section header\n */\nexport function formatHeader(text: string): string {\n return chalk.bold.white(text);\n}\n\n/**\n * Format key-value pairs\n */\nexport function formatKeyValue(\n pairs: Record<string, string | number | boolean>\n): string {\n const maxKeyLength = Math.max(...Object.keys(pairs).map((k) => k.length), 0);\n\n return Object.entries(pairs)\n .map(([key, value]) => {\n const paddedKey = key.padEnd(maxKeyLength);\n return ` ${chalk.gray(paddedKey)}: ${value}`;\n })\n .join(\"\\n\");\n}\n\n/**\n * Format prompt messages\n */\n/**\n * Format a date string as relative time (e.g., \"2 hours ago\", \"3 days ago\")\n */\nexport function formatRelativeTime(dateString: string): string {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSecs = Math.floor(diffMs / 1000);\n const diffMins = Math.floor(diffSecs / 60);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n const diffWeeks = Math.floor(diffDays / 7);\n const diffMonths = Math.floor(diffDays / 30);\n const diffYears = Math.floor(diffDays / 365);\n\n if (diffYears > 0) {\n return `${diffYears} year${diffYears > 1 ? \"s\" : \"\"} ago`;\n } else if (diffMonths > 0) {\n return `${diffMonths} month${diffMonths > 1 ? \"s\" : \"\"} ago`;\n } else if (diffWeeks > 0) {\n return `${diffWeeks} week${diffWeeks > 1 ? \"s\" : \"\"} ago`;\n } else if (diffDays > 0) {\n return `${diffDays} day${diffDays > 1 ? \"s\" : \"\"} ago`;\n } else if (diffHours > 0) {\n return `${diffHours} hour${diffHours > 1 ? \"s\" : \"\"} ago`;\n } else if (diffMins > 0) {\n return `${diffMins} minute${diffMins > 1 ? \"s\" : \"\"} ago`;\n } else {\n return \"just now\";\n }\n}\n\nexport function formatPromptMessages(messages: any[]): string {\n if (!messages || messages.length === 0) {\n return chalk.gray(\"No messages\");\n }\n\n const lines: string[] = [];\n\n messages.forEach((msg, index) => {\n const role = msg.role || \"unknown\";\n const roleStr =\n role === \"user\"\n ? chalk.blue(\"[User]\")\n : role === \"assistant\"\n ? chalk.green(\"[Assistant]\")\n : chalk.gray(`[${role}]`);\n\n lines.push(`${roleStr}`);\n\n if (msg.content) {\n if (typeof msg.content === \"string\") {\n lines.push(msg.content);\n } else if (msg.content.type === \"text\") {\n lines.push(msg.content.text);\n } else if (msg.content.type === \"image\") {\n lines.push(chalk.cyan(`[Image: ${msg.content.mimeType}]`));\n } else if (msg.content.type === \"resource\") {\n lines.push(chalk.cyan(`[Resource: ${msg.content.resource?.uri}]`));\n if (msg.content.resource?.text) {\n lines.push(msg.content.resource.text);\n }\n }\n }\n\n if (index < messages.length - 1) {\n lines.push(\"\");\n }\n });\n\n return lines.join(\"\\n\");\n}\n","import chalk from \"chalk\";\nimport { exec } from \"node:child_process\";\nimport { promises as fs } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport open from \"open\";\nimport type { CreateDeploymentRequest, Deployment } from \"../utils/api.js\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport { isLoggedIn } from \"../utils/config.js\";\nimport { getGitInfo, isGitHubUrl } from \"../utils/git.js\";\nimport { getProjectLink, saveProjectLink } from \"../utils/project-link.js\";\n\nconst execAsync = promisify(exec);\n\n/**\n * Parse environment variables from .env file\n */\nasync function parseEnvFile(filePath: string): Promise<Record<string, string>> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n const envVars: Record<string, string> = {};\n const lines = content.split(\"\\n\");\n\n let currentKey: string | null = null;\n let currentValue = \"\";\n\n for (let line of lines) {\n // Trim whitespace\n line = line.trim();\n\n // Skip empty lines and comments\n if (!line || line.startsWith(\"#\")) {\n continue;\n }\n\n // Check if this is a continuation of a multiline value\n if (currentKey && !line.includes(\"=\")) {\n currentValue += \"\\n\" + line;\n continue;\n }\n\n // If we have a pending key-value pair, save it\n if (currentKey) {\n envVars[currentKey] = currentValue.replace(/^[\"']|[\"']$/g, \"\");\n currentKey = null;\n currentValue = \"\";\n }\n\n // Parse KEY=VALUE\n const equalIndex = line.indexOf(\"=\");\n if (equalIndex === -1) {\n continue;\n }\n\n const key = line.substring(0, equalIndex).trim();\n let value = line.substring(equalIndex + 1).trim();\n\n // Validate key format (alphanumeric and underscore)\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {\n console.log(\n chalk.yellow(`⚠️ Skipping invalid environment variable key: ${key}`)\n );\n continue;\n }\n\n // Handle quoted values\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n envVars[key] = value;\n } else if (value.startsWith('\"') || value.startsWith(\"'\")) {\n // Start of multiline value\n currentKey = key;\n currentValue = value.slice(1);\n } else {\n envVars[key] = value;\n }\n }\n\n // Save any pending multiline value\n if (currentKey) {\n envVars[currentKey] = currentValue.replace(/^[\"']|[\"']$/g, \"\");\n }\n\n return envVars;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(`Environment file not found: ${filePath}`);\n }\n throw new Error(\n `Failed to parse environment file: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n/**\n * Parse environment variable from KEY=VALUE string\n */\nfunction parseEnvVar(envStr: string): { key: string; value: string } {\n const equalIndex = envStr.indexOf(\"=\");\n if (equalIndex === -1) {\n throw new Error(\n `Invalid environment variable format: \"${envStr}\". Expected KEY=VALUE`\n );\n }\n\n const key = envStr.substring(0, equalIndex).trim();\n const value = envStr.substring(equalIndex + 1);\n\n // Validate key format\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {\n throw new Error(\n `Invalid environment variable key: \"${key}\". Keys must start with a letter or underscore and contain only letters, numbers, and underscores.`\n );\n }\n\n return { key, value };\n}\n\n/**\n * Build environment variables from file and flags\n */\nasync function buildEnvVars(\n options: DeployOptions\n): Promise<Record<string, string>> {\n const envVars: Record<string, string> = {};\n\n // Parse env file if provided\n if (options.envFile) {\n try {\n const fileEnv = await parseEnvFile(options.envFile);\n Object.assign(envVars, fileEnv);\n console.log(\n chalk.gray(\n `Loaded ${Object.keys(fileEnv).length} variable(s) from ${options.envFile}`\n )\n );\n } catch (error) {\n console.log(\n chalk.red(\n `✗ ${error instanceof Error ? error.message : \"Failed to load env file\"}`\n )\n );\n process.exit(1);\n }\n }\n\n // Parse individual env flags (these override file values)\n if (options.env && options.env.length > 0) {\n for (const envStr of options.env) {\n try {\n const { key, value } = parseEnvVar(envStr);\n envVars[key] = value;\n } catch (error) {\n console.log(\n chalk.red(\n `✗ ${error instanceof Error ? error.message : \"Invalid env variable\"}`\n )\n );\n process.exit(1);\n }\n }\n }\n\n return envVars;\n}\n\ninterface DeployOptions {\n open?: boolean;\n name?: string;\n port?: number;\n runtime?: \"node\" | \"python\";\n fromSource?: boolean;\n new?: boolean;\n env?: string[];\n envFile?: string;\n}\n\n/**\n * Check if directory looks like an MCP server project\n */\nasync function isMcpProject(cwd: string = process.cwd()): Promise<boolean> {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n // Check for common MCP indicators\n const hasMcpDeps =\n packageJson.dependencies?.[\"mcp-use\"] ||\n packageJson.dependencies?.[\"@modelcontextprotocol/sdk\"] ||\n packageJson.devDependencies?.[\"mcp-use\"] ||\n packageJson.devDependencies?.[\"@modelcontextprotocol/sdk\"];\n\n const hasMcpScripts =\n packageJson.scripts?.mcp || packageJson.scripts?.[\"mcp:dev\"];\n\n return !!(hasMcpDeps || hasMcpScripts);\n } catch {\n return false;\n }\n}\n\n/**\n * Get project name from package.json or directory name\n */\nasync function getProjectName(cwd: string = process.cwd()): Promise<string> {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n if (packageJson.name) {\n return packageJson.name;\n }\n } catch {\n // Fall through to directory name\n }\n\n return path.basename(cwd);\n}\n\n/**\n * Detect build command from package.json\n */\nasync function detectBuildCommand(\n cwd: string = process.cwd()\n): Promise<string | undefined> {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n if (packageJson.scripts?.build) {\n return \"npm run build\";\n }\n } catch {\n // No build command found\n }\n\n return undefined;\n}\n\n/**\n * Detect start command from package.json\n */\nasync function detectStartCommand(\n cwd: string = process.cwd()\n): Promise<string | undefined> {\n try {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(content);\n\n if (packageJson.scripts?.start) {\n return \"npm start\";\n }\n\n // Look for main entry point\n if (packageJson.main) {\n return `node ${packageJson.main}`;\n }\n } catch {\n // No start command found\n }\n\n return undefined;\n}\n\n/**\n * Detect runtime from project files\n */\nasync function detectRuntime(\n cwd: string = process.cwd()\n): Promise<\"node\" | \"python\"> {\n try {\n // Check for Python indicators\n const pythonFiles = [\"requirements.txt\", \"pyproject.toml\", \"setup.py\"];\n for (const file of pythonFiles) {\n try {\n await fs.access(path.join(cwd, file));\n return \"python\";\n } catch {\n continue;\n }\n }\n\n // Check for Node indicators (package.json)\n try {\n await fs.access(path.join(cwd, \"package.json\"));\n return \"node\";\n } catch {\n // Default to node\n }\n } catch {\n // Default to node\n }\n\n return \"node\";\n}\n\n/**\n * Prompt user for confirmation\n */\nasync function prompt(\n question: string,\n defaultValue: \"y\" | \"n\" = \"n\"\n): Promise<boolean> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n // Show default in the prompt\n const defaultIndicator = defaultValue === \"y\" ? \"Y/n\" : \"y/N\";\n const questionWithDefault = question.replace(\n /(\\(y\\/n\\):)/,\n `(${defaultIndicator}):`\n );\n\n return new Promise((resolve) => {\n rl.question(questionWithDefault, (answer) => {\n rl.close();\n const trimmedAnswer = answer.trim().toLowerCase();\n // If empty, use default\n if (trimmedAnswer === \"\") {\n resolve(defaultValue === \"y\");\n } else {\n resolve(trimmedAnswer === \"y\" || trimmedAnswer === \"yes\");\n }\n });\n });\n}\n\n/**\n * Create a tarball of the project, excluding common build artifacts and dependencies\n */\nasync function createTarball(cwd: string): Promise<string> {\n const tmpDir = os.tmpdir();\n const tarballPath = path.join(tmpDir, `mcp-deploy-${Date.now()}.tar.gz`);\n\n // Common patterns to exclude\n const excludePatterns = [\n \"node_modules\",\n \".git\",\n \"dist\",\n \"build\",\n \".next\",\n \".venv\",\n \"__pycache__\",\n \"*.pyc\",\n \".DS_Store\",\n \"._*\", // macOS resource fork files\n \".mcp-use\", // Build artifacts directory\n \".env\",\n \".env.local\",\n \"*.log\",\n ];\n\n // Build tar exclude flags\n // Use --exclude for each pattern (more reliable than single string)\n const excludeFlags = excludePatterns\n .map((pattern) => `--exclude=${pattern}`)\n .join(\" \");\n\n // Create tarball with explicit exclusions\n // Note: tar on macOS handles patterns differently, so we use both --exclude and --exclude-vcs-ignores\n const command = `tar ${excludeFlags} -czf \"${tarballPath}\" -C \"${cwd}\" . 2>&1 || true`;\n\n try {\n await execAsync(command);\n return tarballPath;\n } catch (error) {\n throw new Error(\n `Failed to create tarball: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n/**\n * Get file size in human-readable format\n */\nfunction formatFileSize(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\n\n/**\n * Display deployment progress with spinner\n */\nasync function displayDeploymentProgress(\n api: McpUseAPI,\n deployment: Deployment\n): Promise<void> {\n const frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n let frameIndex = 0;\n let spinnerInterval: NodeJS.Timeout | null = null;\n let lastStep = \"\";\n\n const startSpinner = (message: string) => {\n if (spinnerInterval) {\n clearInterval(spinnerInterval);\n }\n\n // Clear the line\n process.stdout.write(\"\\r\\x1b[K\");\n\n spinnerInterval = setInterval(() => {\n const frame = frames[frameIndex];\n frameIndex = (frameIndex + 1) % frames.length;\n process.stdout.write(\n \"\\r\" + chalk.cyan(frame) + \" \" + chalk.gray(message)\n );\n }, 80);\n };\n\n const stopSpinner = () => {\n if (spinnerInterval) {\n clearInterval(spinnerInterval);\n spinnerInterval = null;\n process.stdout.write(\"\\r\\x1b[K\");\n }\n };\n\n console.log();\n startSpinner(\"Deploying...\");\n\n try {\n for await (const log of api.streamDeploymentLogs(deployment.id)) {\n try {\n const logData = JSON.parse(log);\n if (logData.step && logData.step !== lastStep) {\n lastStep = logData.step;\n const stepMessages: Record<string, string> = {\n clone: \"Preparing source code...\",\n analyze: \"Analyzing project...\",\n build: \"Building container image...\",\n deploy: \"Deploying to cloud...\",\n };\n const message = stepMessages[logData.step] || \"Deploying...\";\n startSpinner(message);\n }\n\n // Display the log line\n if (logData.line) {\n stopSpinner();\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n // Ignore non-JSON logs\n }\n }\n } catch (error) {\n // Stream ended or error occurred\n stopSpinner();\n }\n\n // Poll for final status with exponential backoff\n let checkCount = 0;\n const maxChecks = 60; // Max 60 checks\n let delay = 3000; // Start with 3 seconds\n const maxDelay = 10000; // Max 10 seconds between checks\n let lastDisplayedLogLength = 0;\n\n while (checkCount < maxChecks) {\n const currentDelay = delay;\n await new Promise((resolve) => setTimeout(resolve, currentDelay));\n\n const finalDeployment = await api.getDeployment(deployment.id);\n\n // Display new build logs if available\n if (\n finalDeployment.buildLogs &&\n finalDeployment.buildLogs.length > lastDisplayedLogLength\n ) {\n const newLogs = finalDeployment.buildLogs.substring(\n lastDisplayedLogLength\n );\n const logLines = newLogs.split(\"\\n\").filter((l) => l.trim());\n\n for (const line of logLines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n stopSpinner();\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n // Skip invalid JSON\n }\n }\n\n lastDisplayedLogLength = finalDeployment.buildLogs.length;\n }\n\n if (finalDeployment.status === \"running\") {\n const mcpUrl = `https://${finalDeployment.domain}/mcp`;\n const inspectorUrl = `https://inspector.mcp-use.com/inspector?autoConnect=${encodeURIComponent(mcpUrl)}`;\n\n console.log(chalk.green.bold(\"✓ Deployment successful!\\n\"));\n console.log(chalk.white(\"🌐 MCP Server URL:\"));\n console.log(chalk.cyan.bold(` ${mcpUrl}\\n`));\n\n console.log(chalk.white(\"🔍 Inspector URL:\"));\n console.log(chalk.cyan.bold(` ${inspectorUrl}\\n`));\n\n if (finalDeployment.customDomain) {\n const customMcpUrl = `https://${finalDeployment.customDomain}/mcp`;\n const customInspectorUrl = `https://inspector.mcp-use.com/inspect?autoConnect=${encodeURIComponent(customMcpUrl)}`;\n\n console.log(chalk.white(\"🔗 Custom Domain:\"));\n console.log(chalk.cyan.bold(` ${customMcpUrl}\\n`));\n console.log(chalk.white(\"🔍 Custom Inspector:\"));\n console.log(chalk.cyan.bold(` ${customInspectorUrl}\\n`));\n }\n\n console.log(\n chalk.gray(\"Deployment ID: \") + chalk.white(finalDeployment.id)\n );\n return;\n } else if (finalDeployment.status === \"failed\") {\n console.log(chalk.red.bold(\"✗ Deployment failed\\n\"));\n if (finalDeployment.error) {\n console.log(chalk.red(\"Error: \") + finalDeployment.error);\n }\n if (finalDeployment.buildLogs) {\n console.log(chalk.gray(\"\\nBuild logs:\"));\n // Parse and display build logs nicely\n try {\n const logs = finalDeployment.buildLogs\n .split(\"\\n\")\n .filter((l) => l.trim());\n for (const log of logs) {\n try {\n const logData = JSON.parse(log);\n if (logData.line) {\n console.log(chalk.gray(` ${logData.line}`));\n }\n } catch {\n console.log(chalk.gray(` ${log}`));\n }\n }\n } catch {\n console.log(chalk.gray(finalDeployment.buildLogs));\n }\n }\n process.exit(1);\n } else if (finalDeployment.status === \"building\") {\n // Still building, wait and check again with exponential backoff\n startSpinner(\"Building and deploying...\");\n checkCount++;\n // Exponential backoff: increase delay up to maxDelay\n delay = Math.min(delay * 1.2, maxDelay);\n } else {\n console.log(\n chalk.yellow(\"⚠️ Deployment status: \") + finalDeployment.status\n );\n return;\n }\n }\n\n // Timeout\n stopSpinner();\n console.log(chalk.yellow(\"⚠️ Deployment is taking longer than expected.\"));\n console.log(\n chalk.gray(\"Check status with: \") +\n chalk.white(`mcp-use status ${deployment.id}`)\n );\n}\n\n/**\n * Deploy command - deploys MCP server to mcp-use cloud\n */\nexport async function deployCommand(options: DeployOptions): Promise<void> {\n try {\n const cwd = process.cwd();\n\n // Check if logged in\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n console.log(chalk.cyan.bold(\"🚀 Deploying to mcp-use cloud...\\n\"));\n\n // Check if this is an MCP project\n const isMcp = await isMcpProject(cwd);\n if (!isMcp) {\n console.log(\n chalk.yellow(\n \"⚠️ This doesn't appear to be an MCP server project (no mcp-use or @modelcontextprotocol/sdk dependency found).\"\n )\n );\n const shouldContinue = await prompt(\n chalk.white(\"Continue anyway? (y/n): \")\n );\n if (!shouldContinue) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n console.log();\n }\n\n // Get git info\n const gitInfo = await getGitInfo(cwd);\n\n if (\n !options.fromSource &&\n gitInfo.isGitRepo &&\n gitInfo.remoteUrl &&\n isGitHubUrl(gitInfo.remoteUrl)\n ) {\n // GitHub repo detected\n if (!gitInfo.owner || !gitInfo.repo) {\n console.log(\n chalk.red(\n \"✗ Could not parse GitHub repository information from remote URL.\"\n )\n );\n process.exit(1);\n }\n\n console.log(chalk.white(\"GitHub repository detected:\"));\n console.log(\n chalk.gray(` Repository: `) +\n chalk.cyan(`${gitInfo.owner}/${gitInfo.repo}`)\n );\n console.log(\n chalk.gray(` Branch: `) + chalk.cyan(gitInfo.branch || \"main\")\n );\n if (gitInfo.commitSha) {\n console.log(\n chalk.gray(` Commit: `) +\n chalk.gray(gitInfo.commitSha.substring(0, 7))\n );\n }\n if (gitInfo.commitMessage) {\n console.log(\n chalk.gray(` Message: `) +\n chalk.gray(gitInfo.commitMessage.split(\"\\n\")[0])\n );\n }\n console.log();\n\n // Confirm deployment\n const shouldDeploy = await prompt(\n chalk.white(\n `Deploy from GitHub repository ${gitInfo.owner}/${gitInfo.repo}? (y/n): `\n )\n );\n\n if (!shouldDeploy) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n\n // Detect project settings\n const projectName = options.name || (await getProjectName(cwd));\n const runtime = options.runtime || (await detectRuntime(cwd));\n const port = options.port || 3000;\n const buildCommand = await detectBuildCommand(cwd);\n const startCommand = await detectStartCommand(cwd);\n\n // Build environment variables\n const envVars = await buildEnvVars(options);\n\n console.log();\n console.log(chalk.white(\"Deployment configuration:\"));\n console.log(chalk.gray(` Name: `) + chalk.cyan(projectName));\n console.log(chalk.gray(` Runtime: `) + chalk.cyan(runtime));\n console.log(chalk.gray(` Port: `) + chalk.cyan(port));\n if (buildCommand) {\n console.log(chalk.gray(` Build command: `) + chalk.cyan(buildCommand));\n }\n if (startCommand) {\n console.log(chalk.gray(` Start command: `) + chalk.cyan(startCommand));\n }\n if (envVars && Object.keys(envVars).length > 0) {\n console.log(\n chalk.gray(` Environment: `) +\n chalk.cyan(`${Object.keys(envVars).length} variable(s)`)\n );\n console.log(\n chalk.gray(` `) +\n chalk.gray(Object.keys(envVars).join(\", \"))\n );\n }\n console.log();\n\n // Check if project is linked to an existing deployment\n const api = await McpUseAPI.create();\n const existingLink = !options.new ? await getProjectLink(cwd) : null;\n\n if (existingLink) {\n try {\n // Verify deployment still exists\n const existingDeployment = await api.getDeployment(\n existingLink.deploymentId\n );\n\n if (existingDeployment && existingDeployment.status !== \"failed\") {\n console.log(chalk.green(`✓ Found linked deployment`));\n console.log(\n chalk.gray(` Redeploying to maintain the same URL...`)\n );\n console.log(\n chalk.cyan(` URL: https://${existingDeployment.domain}/mcp\\n`)\n );\n\n // Redeploy\n const deployment = await api.redeployDeployment(\n existingLink.deploymentId\n );\n\n // Update link timestamp\n await saveProjectLink(cwd, {\n ...existingLink,\n linkedAt: new Date().toISOString(),\n });\n\n // Display progress\n await displayDeploymentProgress(api, deployment);\n\n // Open in browser if requested\n if (options.open && deployment.domain) {\n console.log();\n console.log(chalk.gray(\"Opening deployment in browser...\"));\n await open(`https://${deployment.domain}`);\n }\n return; // Exit early\n }\n } catch (error) {\n // Deployment not found or error - continue to create new\n console.log(\n chalk.yellow(`⚠️ Linked deployment not found, creating new one...`)\n );\n }\n }\n\n // Create deployment request\n const deploymentRequest: CreateDeploymentRequest = {\n name: projectName,\n source: {\n type: \"github\",\n repo: `${gitInfo.owner}/${gitInfo.repo}`,\n branch: gitInfo.branch || \"main\",\n runtime,\n port,\n buildCommand,\n startCommand,\n env: Object.keys(envVars).length > 0 ? envVars : undefined,\n },\n healthCheckPath: \"/healthz\",\n };\n\n // Create deployment\n console.log(chalk.gray(\"Creating deployment...\"));\n const deployment = await api.createDeployment(deploymentRequest);\n\n console.log(\n chalk.green(\"✓ Deployment created: \") + chalk.gray(deployment.id)\n );\n\n // Save project link\n await saveProjectLink(cwd, {\n deploymentId: deployment.id,\n deploymentName: projectName,\n deploymentUrl: deployment.domain,\n linkedAt: new Date().toISOString(),\n });\n console.log(\n chalk.gray(` Linked to this project (stored in .mcp-use/project.json)`)\n );\n console.log(chalk.gray(` Future deploys will reuse the same URL\\n`));\n\n // Display progress\n await displayDeploymentProgress(api, deployment);\n\n // Open in browser if requested\n if (options.open && deployment.domain) {\n console.log();\n console.log(chalk.gray(\"Opening deployment in browser...\"));\n await open(`https://${deployment.domain}`);\n }\n } else {\n // Not a GitHub repo or --from-source flag - deploy from source upload\n if (options.fromSource) {\n console.log(\n chalk.white(\"📦 Deploying from local source code (--from-source)...\")\n );\n } else {\n console.log(\n chalk.yellow(\n \"⚠️ This is not a GitHub repository or no remote is configured.\"\n )\n );\n console.log(chalk.white(\"Deploying from local source code instead...\"));\n }\n console.log();\n\n // Detect project settings\n const projectName = options.name || (await getProjectName(cwd));\n const runtime = options.runtime || (await detectRuntime(cwd));\n const port = options.port || 3000;\n const buildCommand = await detectBuildCommand(cwd);\n const startCommand = await detectStartCommand(cwd);\n\n // Build environment variables\n const envVars = await buildEnvVars(options);\n\n console.log(chalk.white(\"Deployment configuration:\"));\n console.log(chalk.gray(` Name: `) + chalk.cyan(projectName));\n console.log(chalk.gray(` Runtime: `) + chalk.cyan(runtime));\n console.log(chalk.gray(` Port: `) + chalk.cyan(port));\n if (buildCommand) {\n console.log(chalk.gray(` Build command: `) + chalk.cyan(buildCommand));\n }\n if (startCommand) {\n console.log(chalk.gray(` Start command: `) + chalk.cyan(startCommand));\n }\n if (envVars && Object.keys(envVars).length > 0) {\n console.log(\n chalk.gray(` Environment: `) +\n chalk.cyan(`${Object.keys(envVars).length} variable(s)`)\n );\n console.log(\n chalk.gray(` `) +\n chalk.gray(Object.keys(envVars).join(\", \"))\n );\n }\n console.log();\n\n // Confirm deployment (default to yes)\n const shouldDeploy = await prompt(\n chalk.white(\"Deploy from local source? (y/n): \"),\n \"y\"\n );\n\n if (!shouldDeploy) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n\n // Create tarball\n console.log();\n console.log(chalk.gray(\"Packaging source code...\"));\n const tarballPath = await createTarball(cwd);\n const stats = await fs.stat(tarballPath);\n console.log(\n chalk.green(\"✓ Packaged: \") + chalk.gray(formatFileSize(stats.size))\n );\n\n // Check file size (2MB max)\n const maxSize = 2 * 1024 * 1024; // 2MB\n if (stats.size > maxSize) {\n console.log(\n chalk.red(\n `✗ File size (${formatFileSize(stats.size)}) exceeds maximum of 2MB`\n )\n );\n await fs.unlink(tarballPath);\n process.exit(1);\n }\n\n // Check if project is linked to an existing deployment\n const api = await McpUseAPI.create();\n const existingLink = !options.new ? await getProjectLink(cwd) : null;\n\n if (existingLink) {\n try {\n // Verify deployment still exists\n const existingDeployment = await api.getDeployment(\n existingLink.deploymentId\n );\n\n if (existingDeployment && existingDeployment.status !== \"failed\") {\n console.log(chalk.green(`✓ Found linked deployment`));\n console.log(\n chalk.gray(` Redeploying to maintain the same URL...`)\n );\n console.log(\n chalk.cyan(` URL: https://${existingDeployment.domain}/mcp\\n`)\n );\n\n // Redeploy with file upload\n const deployment = await api.redeployDeployment(\n existingLink.deploymentId,\n tarballPath\n );\n\n // Clean up tarball\n await fs.unlink(tarballPath);\n\n // Update link timestamp\n await saveProjectLink(cwd, {\n ...existingLink,\n linkedAt: new Date().toISOString(),\n });\n\n // Display progress\n await displayDeploymentProgress(api, deployment);\n\n // Open in browser if requested\n if (options.open && deployment.domain) {\n console.log();\n console.log(chalk.gray(\"Opening deployment in browser...\"));\n await open(`https://${deployment.domain}`);\n }\n return; // Exit early\n }\n } catch (error) {\n // Deployment not found or error - continue to create new\n console.log(\n chalk.yellow(`⚠️ Linked deployment not found, creating new one...`)\n );\n }\n }\n\n // Create deployment request\n const deploymentRequest: CreateDeploymentRequest = {\n name: projectName,\n source: {\n type: \"upload\",\n runtime,\n port,\n buildCommand,\n startCommand,\n env: Object.keys(envVars).length > 0 ? envVars : undefined,\n },\n healthCheckPath: \"/healthz\",\n };\n\n // Create deployment with file upload\n console.log(chalk.gray(\"Creating deployment...\"));\n const deployment = await api.createDeploymentWithUpload(\n deploymentRequest,\n tarballPath\n );\n\n // Clean up tarball\n await fs.unlink(tarballPath);\n\n console.log(\n chalk.green(\"✓ Deployment created: \") + chalk.gray(deployment.id)\n );\n\n // Save project link\n await saveProjectLink(cwd, {\n deploymentId: deployment.id,\n deploymentName: projectName,\n deploymentUrl: deployment.domain,\n linkedAt: new Date().toISOString(),\n });\n console.log(\n chalk.gray(` Linked to this project (stored in .mcp-use/project.json)`)\n );\n console.log(chalk.gray(` Future deploys will reuse the same URL\\n`));\n\n // Display progress\n await displayDeploymentProgress(api, deployment);\n\n // Open in browser if requested\n if (options.open && deployment.domain) {\n console.log();\n console.log(chalk.gray(\"Opening deployment in browser...\"));\n await open(`https://${deployment.domain}`);\n }\n }\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Deployment failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n","import { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execAsync = promisify(exec);\n\nexport interface GitInfo {\n isGitRepo: boolean;\n remoteUrl?: string;\n owner?: string;\n repo?: string;\n branch?: string;\n commitSha?: string;\n commitMessage?: string;\n}\n\n/**\n * Execute git command\n */\nasync function gitCommand(\n command: string,\n cwd: string = process.cwd()\n): Promise<string | null> {\n try {\n const { stdout } = await execAsync(command, { cwd });\n return stdout.trim();\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Check if directory is a git repository\n */\nexport async function isGitRepo(cwd: string = process.cwd()): Promise<boolean> {\n const result = await gitCommand(\"git rev-parse --is-inside-work-tree\", cwd);\n return result === \"true\";\n}\n\n/**\n * Get git remote URL\n */\nexport async function getRemoteUrl(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git config --get remote.origin.url\", cwd);\n}\n\n/**\n * Parse GitHub owner and repo from remote URL\n */\nexport function parseGitHubUrl(\n url: string\n): { owner: string; repo: string } | null {\n // Handle both SSH and HTTPS URLs\n // SSH: git@github.com:owner/repo.git\n // HTTPS: https://github.com/owner/repo.git\n const sshMatch = url.match(/git@github\\.com:([^/]+)\\/(.+?)(?:\\.git)?$/);\n const httpsMatch = url.match(\n /https:\\/\\/github\\.com\\/([^/]+)\\/(.+?)(?:\\.git)?$/\n );\n\n const match = sshMatch || httpsMatch;\n if (!match) return null;\n\n return {\n owner: match[1],\n repo: match[2],\n };\n}\n\n/**\n * Get current branch\n */\nexport async function getCurrentBranch(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git rev-parse --abbrev-ref HEAD\", cwd);\n}\n\n/**\n * Get current commit SHA\n */\nexport async function getCommitSha(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git rev-parse HEAD\", cwd);\n}\n\n/**\n * Get current commit message\n */\nexport async function getCommitMessage(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git log -1 --pretty=%B\", cwd);\n}\n\n/**\n * Get all git info for current directory\n */\nexport async function getGitInfo(\n cwd: string = process.cwd()\n): Promise<GitInfo> {\n const isRepo = await isGitRepo(cwd);\n\n if (!isRepo) {\n return { isGitRepo: false };\n }\n\n const remoteUrl = await getRemoteUrl(cwd);\n const branch = await getCurrentBranch(cwd);\n const commitSha = await getCommitSha(cwd);\n const commitMessage = await getCommitMessage(cwd);\n\n let owner: string | undefined;\n let repo: string | undefined;\n\n if (remoteUrl) {\n const parsed = parseGitHubUrl(remoteUrl);\n if (parsed) {\n owner = parsed.owner;\n repo = parsed.repo;\n }\n }\n\n return {\n isGitRepo: true,\n remoteUrl: remoteUrl || undefined,\n owner,\n repo,\n branch: branch || undefined,\n commitSha: commitSha || undefined,\n commitMessage: commitMessage || undefined,\n };\n}\n\n/**\n * Check if remote is a GitHub URL\n */\nexport function isGitHubUrl(url: string): boolean {\n try {\n // Handle HTTP(S) URLs\n const parsedUrl = new URL(url);\n return (\n parsedUrl.hostname === \"github.com\" ||\n parsedUrl.hostname === \"www.github.com\"\n );\n } catch {\n // Handle SSH/shortened git URLs: git@github.com:user/repo.git\n // Extract the host before the \":\" or \"/\" (if git@host:repo or git@host/repo)\n const sshMatch = url.match(/^git@([^:/]+)[:/]/);\n if (sshMatch) {\n const host = sshMatch[1];\n return host === \"github.com\" || host === \"www.github.com\";\n }\n }\n return false;\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nexport const MCP_USE_DIR = \".mcp-use\";\nexport const MCP_USE_DIR_PROJECT = \"project.json\";\n\nexport interface ProjectLink {\n deploymentId: string;\n deploymentName: string;\n deploymentUrl?: string;\n linkedAt: string;\n}\n\n// Get .mcp-use directory path\nexport function getMcpUseDirectory(cwd: string): string {\n return path.join(cwd, MCP_USE_DIR);\n}\n\n// Read project link\nexport async function getProjectLink(cwd: string): Promise<ProjectLink | null> {\n try {\n const linkPath = path.join(getMcpUseDirectory(cwd), MCP_USE_DIR_PROJECT);\n const content = await fs.readFile(linkPath, \"utf-8\");\n return JSON.parse(content);\n } catch (err: any) {\n if (err.code === \"ENOENT\") return null;\n throw err;\n }\n}\n\n// Write project link\nexport async function saveProjectLink(\n cwd: string,\n link: ProjectLink\n): Promise<void> {\n const mcpUseDir = getMcpUseDirectory(cwd);\n await fs.mkdir(mcpUseDir, { recursive: true });\n\n const linkPath = path.join(mcpUseDir, MCP_USE_DIR_PROJECT);\n await fs.writeFile(linkPath, JSON.stringify(link, null, 2), \"utf-8\");\n\n // Add to .gitignore\n await addToGitIgnore(cwd);\n}\n\n// Add .mcp-use to .gitignore\nasync function addToGitIgnore(cwd: string): Promise<void> {\n const gitignorePath = path.join(cwd, \".gitignore\");\n try {\n let content = \"\";\n try {\n content = await fs.readFile(gitignorePath, \"utf-8\");\n } catch (err: any) {\n if (err.code !== \"ENOENT\") throw err;\n }\n\n if (!content.includes(MCP_USE_DIR)) {\n const newContent =\n content +\n (content.endsWith(\"\\n\") ? \"\" : \"\\n\") +\n `\\n# mcp-use deployment\\n${MCP_USE_DIR}\\n`;\n await fs.writeFile(gitignorePath, newContent, \"utf-8\");\n }\n } catch (err) {\n // Ignore gitignore errors\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport { isLoggedIn } from \"../utils/config.js\";\nimport { formatRelativeTime } from \"../utils/format.js\";\n\n/**\n * Prompt user for confirmation\n */\nasync function prompt(question: string): Promise<boolean> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n const trimmedAnswer = answer.trim().toLowerCase();\n resolve(trimmedAnswer === \"y\" || trimmedAnswer === \"yes\");\n });\n });\n}\n\n/**\n * Get status color based on deployment status\n */\nfunction getStatusColor(status: string): (text: string) => string {\n switch (status) {\n case \"running\":\n return chalk.green;\n case \"building\":\n case \"pending\":\n return chalk.yellow;\n case \"failed\":\n case \"stopped\":\n return chalk.red;\n default:\n return chalk.gray;\n }\n}\n\n/**\n * Format deployment ID for display (show full ID)\n */\nfunction formatId(id: string): string {\n return id;\n}\n\n/**\n * List deployments command\n */\nasync function listDeploymentsCommand(): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployments = await api.listDeployments();\n\n // Sort deployments by created date (newest first)\n const sortedDeployments = [...deployments].sort(\n (a, b) =>\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()\n );\n\n if (sortedDeployments.length === 0) {\n console.log(chalk.yellow(\"No deployments found.\"));\n console.log(\n chalk.gray(\n \"\\nDeploy your first MCP server with \" + chalk.white(\"mcp-use deploy\")\n )\n );\n return;\n }\n\n console.log(\n chalk.cyan.bold(`\\n📦 Deployments (${sortedDeployments.length})\\n`)\n );\n\n // Print table header\n console.log(\n chalk.white.bold(\n `${\"ID\".padEnd(40)} ${\"NAME\".padEnd(25)} ${\"STATUS\".padEnd(12)} ${\"DOMAIN\".padEnd(35)} ${\"CREATED\"}`\n )\n );\n console.log(chalk.gray(\"─\".repeat(130)));\n\n // Print each deployment\n for (const deployment of sortedDeployments) {\n const id = formatId(deployment.id).padEnd(40);\n const name = deployment.name.substring(0, 24).padEnd(25);\n const statusColor = getStatusColor(deployment.status);\n const status = statusColor(deployment.status.padEnd(12));\n const domain = (deployment.domain || \"-\").substring(0, 34).padEnd(35);\n const created = formatRelativeTime(deployment.createdAt);\n\n console.log(\n `${chalk.gray(id)} ${name} ${status} ${chalk.cyan(domain)} ${chalk.gray(created)}`\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to list deployments:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Get deployment details command\n */\nasync function getDeploymentCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployment = await api.getDeployment(deploymentId);\n\n console.log(chalk.cyan.bold(\"\\n📦 Deployment Details\\n\"));\n\n console.log(chalk.white(\"ID: \") + chalk.gray(deployment.id));\n console.log(chalk.white(\"Name: \") + chalk.cyan(deployment.name));\n\n const statusColor = getStatusColor(deployment.status);\n console.log(\n chalk.white(\"Status: \") + statusColor(deployment.status)\n );\n\n if (deployment.domain) {\n console.log(\n chalk.white(\"Domain: \") +\n chalk.cyan(`https://${deployment.domain}`)\n );\n }\n if (deployment.customDomain) {\n console.log(\n chalk.white(\"Custom Domain: \") +\n chalk.cyan(`https://${deployment.customDomain}`)\n );\n }\n\n console.log(\n chalk.white(\"Source: \") + chalk.gray(deployment.source.type)\n );\n\n if (deployment.source.type === \"github\") {\n console.log(\n chalk.white(\"Repository: \") + chalk.gray(deployment.source.repo)\n );\n console.log(\n chalk.white(\"Branch: \") +\n chalk.gray(deployment.source.branch || \"main\")\n );\n }\n\n console.log(chalk.white(\"Port: \") + chalk.gray(deployment.port));\n console.log(\n chalk.white(\"Runtime: \") +\n chalk.gray(deployment.source.runtime || \"node\")\n );\n\n if (deployment.provider) {\n console.log(\n chalk.white(\"Provider: \") + chalk.gray(deployment.provider)\n );\n }\n\n console.log(\n chalk.white(\"Created: \") +\n chalk.gray(formatRelativeTime(deployment.createdAt))\n );\n console.log(\n chalk.white(\"Updated: \") +\n chalk.gray(formatRelativeTime(deployment.updatedAt))\n );\n\n // Show environment variables if any\n if (\n deployment.source.env &&\n Object.keys(deployment.source.env).length > 0\n ) {\n console.log(chalk.white(\"\\nEnvironment Variables:\"));\n for (const [key, value] of Object.entries(deployment.source.env)) {\n // Mask sensitive values\n const displayValue =\n key.toLowerCase().includes(\"key\") ||\n key.toLowerCase().includes(\"secret\") ||\n key.toLowerCase().includes(\"password\") ||\n key.toLowerCase().includes(\"token\")\n ? \"***\"\n : value;\n console.log(chalk.gray(` ${key}=`) + chalk.white(displayValue));\n }\n }\n\n // Show error if failed\n if (deployment.status === \"failed\" && deployment.error) {\n console.log(chalk.red(\"\\nError:\"));\n console.log(chalk.red(` ${deployment.error}`));\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Restart deployment command\n */\nasync function restartDeploymentCommand(\n deploymentId: string,\n options: { follow?: boolean }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n\n // Get deployment info first\n const deployment = await api.getDeployment(deploymentId);\n console.log(\n chalk.cyan.bold(`\\n🔄 Restarting deployment: ${deployment.name}\\n`)\n );\n\n const redeployedDeployment = await api.redeployDeployment(deploymentId);\n console.log(\n chalk.green(\"✓ Restart initiated: \") + chalk.gray(redeployedDeployment.id)\n );\n\n if (options.follow) {\n console.log(chalk.gray(\"\\nFollowing deployment logs...\\n\"));\n\n // Stream logs\n try {\n for await (const log of api.streamDeploymentLogs(\n redeployedDeployment.id\n )) {\n try {\n const logData = JSON.parse(log);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n // Not JSON, print as-is\n console.log(chalk.gray(log));\n }\n }\n } catch (error) {\n // Stream ended or error\n console.log(\n chalk.gray(\n \"\\nLog stream ended. Use \" +\n chalk.white(`mcp-use deployments get ${deploymentId}`) +\n \" to check status.\"\n )\n );\n }\n } else {\n console.log(\n chalk.gray(\n \"\\nCheck status with: \" +\n chalk.white(`mcp-use deployments get ${deploymentId}`)\n )\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to restart deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Delete deployment command\n */\nasync function deleteDeploymentCommand(\n deploymentId: string,\n options: { yes?: boolean }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n\n // Get deployment info first\n const deployment = await api.getDeployment(deploymentId);\n\n // Confirm deletion unless --yes flag is provided\n if (!options.yes) {\n console.log(\n chalk.yellow(\n `\\n⚠️ You are about to delete deployment: ${chalk.white(deployment.name)}`\n )\n );\n console.log(chalk.gray(` ID: ${deployment.id}`));\n console.log(chalk.gray(` Domain: ${deployment.domain || \"none\"}\\n`));\n\n const confirmed = await prompt(\n chalk.white(\"Are you sure you want to delete this deployment? (y/N): \")\n );\n\n if (!confirmed) {\n console.log(chalk.gray(\"Deletion cancelled.\"));\n return;\n }\n }\n\n await api.deleteDeployment(deploymentId);\n console.log(\n chalk.green.bold(`\\n✓ Deployment deleted: ${deployment.name}\\n`)\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to delete deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Get deployment logs command\n */\nasync function logsCommand(\n deploymentId: string,\n options: { build?: boolean; follow?: boolean }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n\n if (options.follow) {\n console.log(chalk.gray(\"Streaming logs...\\n\"));\n\n // Stream logs in real-time\n try {\n for await (const log of api.streamDeploymentLogs(deploymentId)) {\n try {\n const logData = JSON.parse(log);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n // Not JSON, print as-is\n console.log(chalk.gray(log));\n }\n }\n } catch (error) {\n console.log(chalk.gray(\"\\nLog stream ended.\"));\n }\n } else {\n // Get static logs\n const logs = options.build\n ? await api.getDeploymentBuildLogs(deploymentId)\n : await api.getDeploymentLogs(deploymentId);\n\n if (!logs || logs.trim() === \"\") {\n console.log(\n chalk.yellow(\n `No ${options.build ? \"build \" : \"\"}logs available for this deployment.`\n )\n );\n return;\n }\n\n // Parse and display logs\n const logLines = logs.split(\"\\n\").filter((l) => l.trim());\n for (const line of logLines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n // Not JSON, print as-is\n console.log(chalk.gray(line));\n }\n }\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get logs:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * List environment variables command\n */\nasync function listEnvCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployment = await api.getDeployment(deploymentId);\n\n console.log(\n chalk.cyan.bold(`\\n🔐 Environment Variables: ${deployment.name}\\n`)\n );\n\n if (\n !deployment.source.env ||\n Object.keys(deployment.source.env).length === 0\n ) {\n console.log(chalk.yellow(\"No environment variables set.\"));\n console.log();\n return;\n }\n\n for (const [key, value] of Object.entries(deployment.source.env)) {\n // Mask sensitive values\n const displayValue =\n key.toLowerCase().includes(\"key\") ||\n key.toLowerCase().includes(\"secret\") ||\n key.toLowerCase().includes(\"password\") ||\n key.toLowerCase().includes(\"token\")\n ? \"***\"\n : value;\n console.log(\n chalk.white(key) + chalk.gray(\"=\") + chalk.cyan(displayValue)\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to list environment variables:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Set environment variables command\n */\nasync function setEnvCommand(\n deploymentId: string,\n envPairs: string[]\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n // Parse KEY=VALUE pairs\n const env: Record<string, string> = {};\n for (const pair of envPairs) {\n const [key, ...valueParts] = pair.split(\"=\");\n if (!key || valueParts.length === 0) {\n console.log(chalk.red(`✗ Invalid format: ${pair}. Expected KEY=VALUE`));\n process.exit(1);\n }\n env[key.trim()] = valueParts.join(\"=\").trim();\n }\n\n const api = await McpUseAPI.create();\n\n // Get current deployment to merge env vars\n const deployment = await api.getDeployment(deploymentId);\n const currentEnv = deployment.source.env || {};\n const mergedEnv = { ...currentEnv, ...env };\n\n const updated = await api.updateDeployment(deploymentId, {\n env: mergedEnv,\n });\n\n console.log(\n chalk.green.bold(`\\n✓ Environment variables updated: ${updated.name}\\n`)\n );\n\n // Show updated values\n for (const key of Object.keys(env)) {\n const displayValue =\n key.toLowerCase().includes(\"key\") ||\n key.toLowerCase().includes(\"secret\") ||\n key.toLowerCase().includes(\"password\") ||\n key.toLowerCase().includes(\"token\")\n ? \"***\"\n : env[key];\n console.log(\n chalk.white(key) + chalk.gray(\"=\") + chalk.cyan(displayValue)\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to set environment variables:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Unset environment variables command\n */\nasync function unsetEnvCommand(\n deploymentId: string,\n keys: string[]\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n\n // Get current deployment\n const deployment = await api.getDeployment(deploymentId);\n const currentEnv = { ...(deployment.source.env || {}) };\n\n // Remove specified keys\n for (const key of keys) {\n delete currentEnv[key];\n }\n\n const updated = await api.updateDeployment(deploymentId, {\n env: currentEnv,\n });\n\n console.log(\n chalk.green.bold(`\\n✓ Environment variables removed: ${updated.name}\\n`)\n );\n\n for (const key of keys) {\n console.log(chalk.gray(` ${key}`));\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to unset environment variables:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Stop deployment command\n */\nasync function stopDeploymentCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const updated = await api.updateDeployment(deploymentId, {\n status: \"stopped\",\n });\n\n console.log(chalk.green.bold(`\\n✓ Deployment stopped: ${updated.name}\\n`));\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to stop deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Start deployment command\n */\nasync function startDeploymentCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"mcp-use login\") + \" to get started.\")\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const updated = await api.updateDeployment(deploymentId, {\n status: \"running\",\n });\n\n console.log(chalk.green.bold(`\\n✓ Deployment started: ${updated.name}\\n`));\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to start deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Create deployments command group\n */\nexport function createDeploymentsCommand(): Command {\n const deploymentsCommand = new Command(\"deployments\").description(\n \"Manage cloud deployments\"\n );\n\n // List deployments\n deploymentsCommand\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List all deployments\")\n .action(listDeploymentsCommand);\n\n // Get deployment\n deploymentsCommand\n .command(\"get\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"Get deployment details\")\n .action(getDeploymentCommand);\n\n // Restart deployment\n deploymentsCommand\n .command(\"restart\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .option(\"-f, --follow\", \"Follow deployment logs\")\n .description(\"Restart a deployment\")\n .action(restartDeploymentCommand);\n\n // Delete deployment\n deploymentsCommand\n .command(\"delete\")\n .alias(\"rm\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .description(\"Delete a deployment\")\n .action(deleteDeploymentCommand);\n\n // Logs command\n deploymentsCommand\n .command(\"logs\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .option(\"-b, --build\", \"Show build logs instead of runtime logs\")\n .option(\"-f, --follow\", \"Stream logs in real-time\")\n .description(\"View deployment logs\")\n .action(logsCommand);\n\n // Environment variables commands\n const envCommand = deploymentsCommand\n .command(\"env\")\n .description(\"Manage environment variables\");\n\n envCommand\n .command(\"list\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"List environment variables\")\n .action(listEnvCommand);\n\n envCommand\n .command(\"set\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .argument(\"<pairs...>\", \"Environment variables in KEY=VALUE format\")\n .description(\"Set environment variables\")\n .action(setEnvCommand);\n\n envCommand\n .command(\"unset\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .argument(\"<keys...>\", \"Environment variable keys to remove\")\n .description(\"Unset environment variables\")\n .action(unsetEnvCommand);\n\n // Stop deployment\n deploymentsCommand\n .command(\"stop\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"Stop a deployment\")\n .action(stopDeploymentCommand);\n\n // Start deployment\n deploymentsCommand\n .command(\"start\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"Start a stopped deployment\")\n .action(startDeploymentCommand);\n\n return deploymentsCommand;\n}\n"],"mappings":"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","names":["process","os","tty","styles","chalk","styles","open","import_commander","import_config","import_node_child_process","import_node_fs","import_promises","import_node_path","import_node_process","import_node_child_process","import_promises","import_node_util","import_node_child_process","import_promises","import_node_process","import_node_os","import_node_fs","import_node_fs","fs","fs","process","os","fs","import_node_process","childProcess","process","execFile","childProcess","fs","fsConstants","powerShellPath","path","import_node_util","import_node_process","import_node_child_process","import_node_util","import_node_process","import_node_child_process","process","import_node_process","import_node_util","import_node_child_process","execFileAsync","process","import_node_util","import_node_child_process","execFileAsync","execFileAsync","defaultBrowser","process","import_node_process","process","__dirname","path","process","apps","defaultBrowser","powerShellPath","fs","fsConstants","childProcess","import_node_fs","import_node_path","import_node_os","path","os","fs","readFile","import_node_os","import_node_path","import_promises","import_node_fs","prompt","result","import_node_child_process","import_node_fs","import_node_os","import_node_path","import_node_util","import_node_child_process","import_node_util","import_node_fs","import_node_path","path","fs","execAsync","fs","path","packageJson","os","deployment","import_commander","prompt","env","path","findAvailablePort","env","fs","createServer"]}