overmux 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/bin.js +339 -7
- package/dist/bin.js.map +1 -1
- package/dist/docs/200-getting-started/100-install-and-run-overmux.md +1 -2
- package/dist/docs/300-fundamentals/100-project-structure.md +20 -0
- package/dist/docs/400-reference/300-client-api.md +17 -0
- package/dist/docs/400-reference/400-cli/050-init.md +17 -0
- package/dist/exports/client.d.ts +18 -1
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +24 -2
- package/dist/exports/client.js.map +1 -1
- package/docs/200-getting-started/100-install-and-run-overmux.md +1 -2
- package/docs/300-fundamentals/100-project-structure.md +20 -0
- package/docs/400-reference/300-client-api.md +17 -0
- package/docs/400-reference/400-cli/050-init.md +17 -0
- package/package.json +2 -2
- package/src/internal/cli/app.ts +5 -1
- package/src/internal/cli/commands/init-template.ts +146 -0
- package/src/internal/cli/commands/init.ts +267 -0
- package/src/internal/cli/commands/integration.ts +15 -0
- package/src/internal/cli/commands/zellij-install.ts +96 -0
- package/src/internal/client/clipboard.ts +22 -0
- package/src/internal/client/host/desktop-host.ts +12 -0
- package/src/internal/client/host/notification-forwarding.ts +1 -10
- package/src/internal/client/websocket.ts +17 -9
- package/src/public/client.ts +4 -0
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","names":["runCommand"],"sources":["../../../../node_modules/.pnpm/@stricli+core@1.3.0/node_modules/@stricli/core/dist/index.js","../../shared/dist/node/index.js","../../shared/dist/index.js","../src/public/ai-context.ts","../src/internal/server/paths.ts","../src/internal/cli/commands/ai.ts","../src/internal/server/notifications/private-json-file.ts","../src/internal/server/auth/instance-control.ts","../src/internal/cli/login.ts","../src/internal/cli/parse-port.ts","../src/internal/cli/commands/auth.ts","../src/internal/shared/background-notifications.ts","../src/internal/shared/protocol.ts","../src/internal/server/runtime/runtime-lifecycle.ts","../src/internal/server/runtime/runtime-operations.ts","../src/public/contracts.ts","../src/internal/server/runtime/resource-dependency-graph.ts","../src/internal/server/runtime/runtime-resources.ts","../src/internal/server/runtime/runtime-streams.ts","../src/internal/server/runtime/create-runtime.ts","../src/internal/server/check-overmux.ts","../src/internal/server/server-logger.ts","../src/internal/server/coordinator/ipc-protocol.ts","../src/internal/server/coordinator/update-watcher.ts","../src/internal/server/coordinator/server-coordinator.ts","../src/internal/server/start-overmux-server.ts","../src/internal/cli/commands/check.ts","../src/internal/cli/commands/call.ts","../src/internal/cli/commands/desktop-release.ts","../src/internal/cli/commands/desktop-installer.ts","../src/internal/cli/commands/desktop.ts","../src/internal/cli/commands/docs.ts","../src/internal/shared/routes.ts","../src/internal/cli/managed-vite.ts","../src/internal/cli/commands/serve.ts","../../../../node_modules/.pnpm/@vercel+detect-agent@1.2.5/node_modules/@vercel/detect-agent/dist/index.js","../../../../node_modules/.pnpm/ci-info@4.4.0/node_modules/ci-info/vendors.json","../../../../node_modules/.pnpm/ci-info@4.4.0/node_modules/ci-info/index.js","../src/internal/cli/environment.ts","../src/internal/cli/app.ts","../src/internal/cli/bin.ts"],"sourcesContent":["// src/exit-code.ts\nvar ExitCode = {\n /**\n * Error was thrown by or otherwise caused by an integration.\n */\n IntegrationError: -10,\n /**\n * Unable to find a command in the application with the given command line arguments.\n */\n UnknownCommand: -5,\n /**\n * Unable to parse the specified arguments.\n */\n InvalidArgument: -4,\n /**\n * An error was thrown while loading the context for a command run.\n */\n ContextLoadError: -3,\n /**\n * Failed to load command module.\n */\n CommandLoadError: -2,\n /**\n * An unexpected error was thrown by or not caught by this library.\n */\n InternalError: -1,\n /**\n * Command executed successfully.\n */\n Success: 0,\n /**\n * Command module unexpectedly threw an error.\n */\n CommandRunError: 1\n};\n\n// src/util/case-style.ts\nfunction convertKebabCaseToCamelCase(str) {\n return str.replace(/-./g, (match) => match[1].toUpperCase());\n}\nfunction convertCamelCaseToKebabCase(name) {\n return Array.from(name).map((char, i) => {\n const upper = char.toUpperCase();\n const lower = char.toLowerCase();\n if (i === 0 || upper !== char || upper === lower) {\n return char;\n }\n return `-${lower}`;\n }).join(\"\");\n}\n\n// src/util/distance.ts\nfunction newSparseMatrix(defaultValue) {\n const values = /* @__PURE__ */ new Map();\n return {\n get: (...args) => {\n return values.get(args.join(\",\")) ?? defaultValue;\n },\n set: (value, ...args) => {\n values.set(args.join(\",\"), value);\n }\n // toString([iMin, iMax], [jMin, jMax]) {\n // const rows: string[] = [];\n // for (let i = iMin; i <= iMax; ++i) {\n // const row: string[] = [];\n // for (let j = jMin; j <= jMax; ++j) {\n // row.push(this.get(i, j).toString());\n // }\n // rows.push(row.join(\", \"));\n // }\n // return rows.join(\"\\n\");\n // },\n };\n}\nfunction damerauLevenshtein(a, b, options) {\n const { threshold, weights } = options;\n if (a === b) {\n return 0;\n }\n const lengthDiff = Math.abs(a.length - b.length);\n if (typeof threshold === \"number\" && lengthDiff > threshold) {\n return Infinity;\n }\n const matrix = newSparseMatrix(Infinity);\n matrix.set(0, -1, -1);\n for (let j = 0; j < b.length; ++j) {\n matrix.set((j + 1) * weights.insertion, -1, j);\n }\n for (let i = 0; i < a.length; ++i) {\n matrix.set((i + 1) * weights.deletion, i, -1);\n }\n let prevRowMinDistance = -Infinity;\n for (let i = 0; i < a.length; ++i) {\n let rowMinDistance = Infinity;\n for (let j = 0; j <= b.length - 1; ++j) {\n const cost = a[i] === b[j] ? 0 : 1;\n const distances = [\n // deletion\n matrix.get(i - 1, j) + weights.deletion,\n // insertion\n matrix.get(i, j - 1) + weights.insertion,\n // substitution\n matrix.get(i - 1, j - 1) + cost * weights.substitution\n ];\n if (a[i] === b[j - 1] && a[i - 1] === b[j]) {\n distances.push(matrix.get(i - 2, j - 2) + cost * weights.transposition);\n }\n const minDistance = Math.min(...distances);\n matrix.set(minDistance, i, j);\n if (minDistance < rowMinDistance) {\n rowMinDistance = minDistance;\n }\n }\n if (rowMinDistance > threshold) {\n if (prevRowMinDistance > threshold) {\n return Infinity;\n }\n prevRowMinDistance = rowMinDistance;\n } else {\n prevRowMinDistance = -Infinity;\n }\n }\n const distance = matrix.get(a.length - 1, b.length - 1);\n if (distance > threshold) {\n return Infinity;\n }\n return distance;\n}\nfunction compareAlternatives(a, b, target) {\n const cmp = a[1] - b[1];\n if (cmp !== 0) {\n return cmp;\n }\n const aStartsWith = a[0].startsWith(target);\n const bStartsWith = b[0].startsWith(target);\n if (aStartsWith && !bStartsWith) {\n return -1;\n } else if (!aStartsWith && bStartsWith) {\n return 1;\n }\n return a[0].localeCompare(b[0]);\n}\nfunction filterClosestAlternatives(target, alternatives, options) {\n const validAlternatives = alternatives.map((alt) => [alt, damerauLevenshtein(target, alt, options)]).filter(([, dist]) => dist <= options.threshold);\n const minDistance = Math.min(...validAlternatives.map(([, dist]) => dist));\n return validAlternatives.filter(([, dist]) => dist === minDistance).sort((a, b) => compareAlternatives(a, b, target)).map(([alt]) => alt);\n}\n\n// src/util/error.ts\nvar InternalError = class extends Error {\n};\nfunction formatException(exc) {\n if (exc instanceof Error) {\n return exc.stack ?? String(exc);\n }\n return String(exc);\n}\n\n// src/util/formatting.ts\nfunction maximum(arr1, arr2) {\n const maxValues = [];\n const maxLength = Math.max(arr1.length, arr2.length);\n for (let i = 0; i < maxLength; ++i) {\n maxValues[i] = Math.max(arr1[i], arr2[i]);\n }\n return maxValues;\n}\nfunction formatRowsWithColumns(cells, separators) {\n if (cells.length === 0) {\n return [];\n }\n const startingLengths = Array(Math.max(...cells.map((cellRow) => cellRow.length))).fill(0, 0);\n const maxLengths = cells.reduce((acc, cellRow) => {\n const lengths = cellRow.map((cell) => cell.length);\n return maximum(acc, lengths);\n }, startingLengths);\n return cells.map((cellRow) => {\n const firstCell = (cellRow[0] ?? \"\").padEnd(maxLengths[0]);\n return cellRow.slice(1).reduce(\n (parts, str, i, arr) => {\n const paddedStr = arr.length === i + 1 ? str : str.padEnd(maxLengths[i + 1]);\n return [...parts, separators?.[i] ?? \" \", paddedStr];\n },\n [firstCell]\n ).join(\"\").trimEnd();\n });\n}\nfunction joinWithGrammar(parts, grammar) {\n if (parts.length <= 1) {\n return parts[0] ?? \"\";\n }\n if (parts.length === 2) {\n return parts.join(` ${grammar.conjunction} `);\n }\n let allButLast = parts.slice(0, parts.length - 1).join(\", \");\n if (grammar.serialComma) {\n allButLast += \",\";\n }\n return [allButLast, grammar.conjunction, parts[parts.length - 1]].join(\" \");\n}\n\n// src/util/array.ts\nfunction group(array, callback) {\n return array.reduce((groupings, item) => {\n const key = callback(item);\n const groupItems = groupings[key] ?? [];\n groupItems.push(item);\n groupings[key] = groupItems;\n return groupings;\n }, {});\n}\nfunction groupBy(array, selector) {\n return group(array, (item) => item[selector]);\n}\n\n// src/util/promise.ts\nasync function allSettledOrElse(values) {\n const results = await Promise.allSettled(values);\n const grouped = groupBy(results, \"status\");\n if (grouped.rejected && grouped.rejected.length > 0) {\n return { status: \"rejected\", reasons: grouped.rejected.map((result) => result.reason) };\n }\n return { status: \"fulfilled\", value: grouped.fulfilled?.map((result) => result.value) ?? [] };\n}\n\n// src/parameter/parser/boolean.ts\nvar booleanParser = (input) => {\n switch (input.toLowerCase()) {\n case \"true\":\n return true;\n case \"false\":\n return false;\n }\n throw new SyntaxError(`Cannot convert ${input} to a boolean`);\n};\nvar TRUTHY_VALUES = /* @__PURE__ */ new Set([\"true\", \"t\", \"yes\", \"y\", \"on\", \"1\", \"\"]);\nvar FALSY_VALUES = /* @__PURE__ */ new Set([\"false\", \"f\", \"no\", \"n\", \"off\", \"0\"]);\nvar looseBooleanParser = (input) => {\n const value = input.toLowerCase();\n if (TRUTHY_VALUES.has(value)) {\n return true;\n }\n if (FALSY_VALUES.has(value)) {\n return false;\n }\n throw new SyntaxError(`Cannot convert ${input} to a boolean`);\n};\n\n// src/parameter/parser/number.ts\nvar numberParser = (input) => {\n const value = Number(input);\n if (Number.isNaN(value)) {\n throw new SyntaxError(`Cannot convert ${input} to a number`);\n }\n return value;\n};\n\n// src/parameter/scanner.ts\nvar ArgumentScannerError = class extends InternalError {\n _brand;\n};\nfunction formatMessageForArgumentScannerError(error, formatter) {\n const errorType = error.constructor.name;\n const formatError = formatter[errorType];\n if (formatError) {\n return formatError(error);\n }\n return error.message;\n}\nfunction resolveAllowedNegationForFlags(flags) {\n return Object.fromEntries(\n Object.entries(flags).map(([internalFlagName, flag]) => {\n return [internalFlagName, flag.kind === \"boolean\" && flag.withNegated !== false];\n })\n );\n}\nfunction resolveAliases(flags, aliases, scannerCaseStyle) {\n return Object.fromEntries(\n Object.entries(aliases).map(([alias, internalFlagName_]) => {\n const internalFlagName = internalFlagName_;\n const flag = flags[internalFlagName];\n if (!flag) {\n const externalFlagName = asExternal(internalFlagName, scannerCaseStyle);\n throw new FlagNotFoundError(externalFlagName, [], alias);\n }\n return [alias, [internalFlagName, flag]];\n })\n );\n}\nvar FlagNotFoundError = class extends ArgumentScannerError {\n /**\n * Command line input that triggered this error.\n */\n input;\n /**\n * Set of proposed suggestions that are similar to the input.\n */\n corrections;\n /**\n * Set if error was caused indirectly by an alias.\n * This indicates that something is wrong with the command configuration itself.\n */\n aliasName;\n constructor(input, corrections, aliasName) {\n let message = `No flag registered for --${input}`;\n if (aliasName) {\n message += ` (aliased from -${aliasName})`;\n } else if (corrections.length > 0) {\n const formattedCorrections = joinWithGrammar(\n corrections.map((correction) => `--${correction}`),\n {\n kind: \"conjunctive\",\n conjunction: \"or\",\n serialComma: true\n }\n );\n message += `, did you mean ${formattedCorrections}?`;\n }\n super(message);\n this.input = input;\n this.corrections = corrections;\n this.aliasName = aliasName;\n }\n};\nvar AliasNotFoundError = class extends ArgumentScannerError {\n /**\n * Command line input that triggered this error.\n */\n input;\n constructor(input) {\n super(`No alias registered for -${input}`);\n this.input = input;\n }\n};\nfunction getPlaceholder(param, index) {\n if (param.placeholder) {\n return param.placeholder;\n }\n return typeof index === \"number\" ? `arg${index}` : \"args\";\n}\nfunction asExternal(internal, scannerCaseStyle) {\n return scannerCaseStyle === \"allow-kebab-for-camel\" ? convertCamelCaseToKebabCase(internal) : internal;\n}\nvar ArgumentParseError = class extends ArgumentScannerError {\n /**\n * External name of flag or placeholder for positional argument that was parsing this input.\n */\n externalFlagNameOrPlaceholder;\n /**\n * Command line input that triggered this error.\n */\n input;\n /**\n * Raw exception thrown from parse function.\n */\n exception;\n constructor(externalFlagNameOrPlaceholder, input, exception) {\n super(\n `Failed to parse \"${input}\" for ${externalFlagNameOrPlaceholder}: ${exception instanceof Error ? exception.message : String(exception)}`\n );\n this.externalFlagNameOrPlaceholder = externalFlagNameOrPlaceholder;\n this.input = input;\n this.exception = exception;\n }\n};\nfunction parseInput(externalFlagNameOrPlaceholder, parameter, input, context) {\n try {\n return parameter.parse.call(context, input);\n } catch (exc) {\n throw new ArgumentParseError(externalFlagNameOrPlaceholder, input, exc);\n }\n}\nvar EnumValidationError = class extends ArgumentScannerError {\n /**\n * External name of flag that was parsing this input.\n */\n externalFlagName;\n /**\n * Command line input that triggered this error.\n */\n input;\n /**\n * All possible enum values.\n */\n values;\n constructor(externalFlagName, input, values, corrections) {\n let message = `Expected \"${input}\" to be one of (${values.join(\"|\")})`;\n if (corrections.length > 0) {\n const formattedCorrections = joinWithGrammar(\n corrections.map((str) => `\"${str}\"`),\n {\n kind: \"conjunctive\",\n conjunction: \"or\",\n serialComma: true\n }\n );\n message += `, did you mean ${formattedCorrections}?`;\n }\n super(message);\n this.externalFlagName = externalFlagName;\n this.input = input;\n this.values = values;\n }\n};\nvar UnsatisfiedFlagError = class extends ArgumentScannerError {\n /**\n * External name of flag that was active when this error was thrown.\n */\n externalFlagName;\n /**\n * External name of flag that interrupted the original flag.\n */\n nextFlagName;\n constructor(externalFlagName, nextFlagName) {\n let message = `Expected input for flag --${externalFlagName}`;\n if (nextFlagName) {\n message += ` but encountered --${nextFlagName} instead`;\n }\n super(message);\n this.externalFlagName = externalFlagName;\n this.nextFlagName = nextFlagName;\n }\n};\nvar UnexpectedPositionalError = class extends ArgumentScannerError {\n /**\n * Expected (maximum) count of positional arguments.\n */\n expectedCount;\n /**\n * Command line input that triggered this error.\n */\n input;\n constructor(expectedCount, input) {\n super(`Too many arguments, expected ${expectedCount} but encountered \"${input}\"`);\n this.expectedCount = expectedCount;\n this.input = input;\n }\n};\nvar UnsatisfiedPositionalError = class extends ArgumentScannerError {\n /**\n * Placeholder for positional argument that was active when this error was thrown.\n */\n placeholder;\n /**\n * If specified, indicates the minimum number of arguments that are expected and the last argument count.\n */\n limit;\n constructor(placeholder, limit) {\n let message;\n if (limit) {\n message = `Expected at least ${limit[0]} argument(s) for ${placeholder}`;\n if (limit[1] === 0) {\n message += \" but found none\";\n } else {\n message += ` but only found ${limit[1]}`;\n }\n } else {\n message = `Expected argument for ${placeholder}`;\n }\n super(message);\n this.placeholder = placeholder;\n this.limit = limit;\n }\n};\nfunction undoNegation(flagName) {\n if (flagName.startsWith(\"no\") && flagName.length > 2) {\n if (flagName[2] === \"-\") {\n return flagName.slice(4);\n }\n const firstChar = flagName[2];\n const firstUpper = firstChar.toUpperCase();\n if (firstChar !== firstUpper) {\n return;\n }\n const firstLower = firstChar.toLowerCase();\n return firstLower + flagName.slice(3);\n }\n}\nfunction findInternalFlagMatch(externalFlagName, flags, allowsNegation, config) {\n const internalFlagName = externalFlagName;\n let flag = flags[internalFlagName];\n let foundFlagWithNegatedFalse;\n let foundFlagWithNegatedFalseFromKebabConversion = false;\n if (!flag) {\n const internalWithoutNegation = undoNegation(internalFlagName);\n if (internalWithoutNegation) {\n flag = flags[internalWithoutNegation];\n if (flag) {\n if (allowsNegation[internalWithoutNegation]) {\n return [internalWithoutNegation, flag, true];\n } else {\n foundFlagWithNegatedFalse = internalWithoutNegation;\n flag = void 0;\n }\n }\n }\n }\n const camelCaseFlagName = convertKebabCaseToCamelCase(externalFlagName);\n if (config.caseStyle === \"allow-kebab-for-camel\" && !flag) {\n flag = flags[camelCaseFlagName];\n if (flag) {\n return [camelCaseFlagName, flag];\n }\n const camelCaseWithoutNegation = undoNegation(camelCaseFlagName);\n if (camelCaseWithoutNegation) {\n flag = flags[camelCaseWithoutNegation];\n if (flag) {\n if (allowsNegation[camelCaseWithoutNegation]) {\n return [camelCaseWithoutNegation, flag, true];\n } else {\n foundFlagWithNegatedFalse = camelCaseWithoutNegation;\n foundFlagWithNegatedFalseFromKebabConversion = true;\n flag = void 0;\n }\n }\n }\n }\n if (!flag) {\n if (foundFlagWithNegatedFalse) {\n let correction = foundFlagWithNegatedFalse;\n if (foundFlagWithNegatedFalseFromKebabConversion && externalFlagName.includes(\"-\")) {\n correction = convertCamelCaseToKebabCase(foundFlagWithNegatedFalse);\n }\n throw new FlagNotFoundError(externalFlagName, [correction]);\n }\n if (camelCaseFlagName in flags) {\n throw new FlagNotFoundError(externalFlagName, [camelCaseFlagName]);\n }\n const kebabCaseFlagName = convertCamelCaseToKebabCase(externalFlagName);\n if (kebabCaseFlagName in flags) {\n throw new FlagNotFoundError(externalFlagName, [kebabCaseFlagName]);\n }\n const corrections = filterClosestAlternatives(internalFlagName, Object.keys(flags), config.distanceOptions);\n throw new FlagNotFoundError(externalFlagName, corrections);\n }\n return [internalFlagName, flag];\n}\nfunction isNiladic(namedFlagWithNegation) {\n if (namedFlagWithNegation[1].kind === \"boolean\" || namedFlagWithNegation[1].kind === \"counter\") {\n return true;\n }\n return false;\n}\nvar FLAG_SHORTHAND_PATTERN = /^-([a-z]+)$/i;\nvar FLAG_NAME_PATTERN = /^--([a-z][a-z-.\\d_]+)$/i;\nfunction findFlagsByArgument(arg, flags, allowsNegation, resolvedAliases, config) {\n const shorthandMatch = FLAG_SHORTHAND_PATTERN.exec(arg);\n if (shorthandMatch) {\n const batch = shorthandMatch[1];\n return Array.from(batch).map((alias) => {\n const aliasName = alias;\n const namedFlag = resolvedAliases[aliasName];\n if (!namedFlag) {\n throw new AliasNotFoundError(aliasName);\n }\n return namedFlag;\n });\n }\n const flagNameMatch = FLAG_NAME_PATTERN.exec(arg);\n if (flagNameMatch) {\n const externalFlagName = flagNameMatch[1];\n return [findInternalFlagMatch(externalFlagName, flags, allowsNegation, config)];\n }\n return [];\n}\nvar FLAG_NAME_VALUE_PATTERN = /^--([a-z][a-z-.\\d_]+)=(.+)$/i;\nvar ALIAS_VALUE_PATTERN = /^-([a-z])=(.+)$/i;\nvar InvalidNegatedFlagSyntaxError = class extends ArgumentScannerError {\n /**\n * External name of flag that was active when this error was thrown.\n */\n externalFlagName;\n /**\n * Input text equivalent to right hand side of input\n */\n valueText;\n constructor(externalFlagName, valueText) {\n super(`Cannot negate flag --${externalFlagName} and pass \"${valueText}\" as value`);\n this.externalFlagName = externalFlagName;\n this.valueText = valueText;\n }\n};\nfunction findFlagByArgumentWithInput(arg, flags, allowsNegation, resolvedAliases, config) {\n const flagsNameMatch = FLAG_NAME_VALUE_PATTERN.exec(arg);\n if (flagsNameMatch) {\n const externalFlagName = flagsNameMatch[1];\n const namedFlag = findInternalFlagMatch(externalFlagName, flags, allowsNegation, config);\n const valueText = flagsNameMatch[2];\n if (namedFlag[2]) {\n throw new InvalidNegatedFlagSyntaxError(externalFlagName, valueText);\n }\n return [namedFlag, valueText];\n }\n const aliasValueMatch = ALIAS_VALUE_PATTERN.exec(arg);\n if (aliasValueMatch) {\n const aliasName = aliasValueMatch[1];\n const namedFlag = resolvedAliases[aliasName];\n if (!namedFlag) {\n throw new AliasNotFoundError(aliasName);\n }\n const valueText = aliasValueMatch[2];\n return [namedFlag, valueText];\n }\n}\nasync function parseInputsForFlag(externalFlagName, flag, inputs, config, context) {\n if (!inputs) {\n if (\"default\" in flag && typeof flag.default !== \"undefined\") {\n if (flag.kind === \"boolean\") {\n return flag.default;\n }\n if (flag.kind === \"enum\") {\n if (\"variadic\" in flag && flag.variadic && Array.isArray(flag.default)) {\n const defaultArray = flag.default;\n for (const value of defaultArray) {\n if (!flag.values.includes(value)) {\n const corrections = filterClosestAlternatives(value, flag.values, config.distanceOptions);\n throw new EnumValidationError(externalFlagName, value, flag.values, corrections);\n }\n }\n return flag.default;\n }\n return flag.default;\n }\n if (\"variadic\" in flag && flag.variadic && Array.isArray(flag.default)) {\n const defaultArray = flag.default;\n return Promise.all(defaultArray.map((input2) => parseInput(externalFlagName, flag, input2, context)));\n }\n return parseInput(externalFlagName, flag, flag.default, context);\n }\n if (flag.optional) {\n return;\n }\n if (flag.kind === \"boolean\") {\n return false;\n } else if (flag.kind === \"counter\") {\n return 0;\n }\n throw new UnsatisfiedFlagError(externalFlagName);\n }\n if (flag.kind === \"counter\") {\n return inputs.reduce((total, input2) => {\n try {\n return total + numberParser.call(context, input2);\n } catch (exc) {\n throw new ArgumentParseError(externalFlagName, input2, exc);\n }\n }, 0);\n }\n if (\"variadic\" in flag && flag.variadic) {\n if (flag.kind === \"enum\") {\n for (const input2 of inputs) {\n if (!flag.values.includes(input2)) {\n const corrections = filterClosestAlternatives(input2, flag.values, config.distanceOptions);\n throw new EnumValidationError(externalFlagName, input2, flag.values, corrections);\n }\n }\n return inputs;\n }\n return Promise.all(inputs.map((input2) => parseInput(externalFlagName, flag, input2, context)));\n }\n const input = inputs[0];\n if (flag.kind === \"boolean\") {\n try {\n return looseBooleanParser.call(context, input);\n } catch (exc) {\n throw new ArgumentParseError(externalFlagName, input, exc);\n }\n }\n if (flag.kind === \"enum\") {\n if (!flag.values.includes(input)) {\n const corrections = filterClosestAlternatives(input, flag.values, config.distanceOptions);\n throw new EnumValidationError(externalFlagName, input, flag.values, corrections);\n }\n return input;\n }\n return parseInput(externalFlagName, flag, input, context);\n}\nvar UnexpectedFlagError = class extends ArgumentScannerError {\n /**\n * External name of flag that was parsing this input.\n */\n externalFlagName;\n /**\n * Command line input that was previously encountered by this flag.\n */\n previousInput;\n /**\n * Command line input that triggered this error.\n */\n input;\n constructor(externalFlagName, previousInput, input) {\n super(`Too many arguments for --${externalFlagName}, encountered \"${input}\" after \"${previousInput}\"`);\n this.externalFlagName = externalFlagName;\n this.previousInput = previousInput;\n this.input = input;\n }\n};\nfunction isVariadicFlag(flag) {\n if (flag.kind === \"counter\") {\n return true;\n }\n if (\"variadic\" in flag) {\n return Boolean(flag.variadic);\n }\n return false;\n}\nfunction storeInput(flagInputs, scannerCaseStyle, [internalFlagName, flag], input) {\n const inputs = flagInputs.get(internalFlagName) ?? [];\n if (inputs.length > 0 && !isVariadicFlag(flag)) {\n const externalFlagName = asExternal(internalFlagName, scannerCaseStyle);\n throw new UnexpectedFlagError(externalFlagName, inputs[0], input);\n }\n if (\"variadic\" in flag && typeof flag.variadic === \"string\") {\n const multipleInputs = input.split(flag.variadic);\n flagInputs.set(internalFlagName, [...inputs, ...multipleInputs]);\n } else {\n flagInputs.set(internalFlagName, [...inputs, input]);\n }\n}\nfunction isFlagSatisfiedByInputs(flags, flagInputs, key) {\n const inputs = flagInputs.get(key);\n if (inputs) {\n const flag = flags[key];\n if (isVariadicFlag(flag)) {\n return false;\n }\n return true;\n }\n return false;\n}\nfunction buildArgumentScanner(parameters, config) {\n const { flags = {}, aliases = {}, positional = { kind: \"tuple\", parameters: [] } } = parameters;\n const allowsNegation = resolveAllowedNegationForFlags(flags);\n const resolvedAliases = resolveAliases(flags, aliases, config.caseStyle);\n const positionalInputs = [];\n const flagInputs = /* @__PURE__ */ new Map();\n let positionalIndex = 0;\n let activeFlag;\n let treatInputsAsArguments = false;\n return {\n next: (input) => {\n if (!treatInputsAsArguments && config.allowArgumentEscapeSequence && input === \"--\") {\n if (activeFlag) {\n if (activeFlag[1].kind === \"parsed\" && activeFlag[1].inferEmpty) {\n storeInput(flagInputs, config.caseStyle, activeFlag, \"\");\n activeFlag = void 0;\n } else {\n const externalFlagName = asExternal(activeFlag[0], config.caseStyle);\n throw new UnsatisfiedFlagError(externalFlagName);\n }\n }\n treatInputsAsArguments = true;\n return;\n }\n if (!treatInputsAsArguments) {\n const flagInput = findFlagByArgumentWithInput(input, flags, allowsNegation, resolvedAliases, config);\n if (flagInput) {\n if (activeFlag) {\n if (activeFlag[1].kind === \"parsed\" && activeFlag[1].inferEmpty) {\n storeInput(flagInputs, config.caseStyle, activeFlag, \"\");\n activeFlag = void 0;\n } else {\n const externalFlagName = asExternal(activeFlag[0], config.caseStyle);\n const nextExternalFlagName = asExternal(flagInput[0][0], config.caseStyle);\n throw new UnsatisfiedFlagError(externalFlagName, nextExternalFlagName);\n }\n }\n storeInput(flagInputs, config.caseStyle, ...flagInput);\n return;\n }\n const nextFlags = findFlagsByArgument(input, flags, allowsNegation, resolvedAliases, config);\n if (nextFlags.length > 0) {\n if (activeFlag) {\n if (activeFlag[1].kind === \"parsed\" && activeFlag[1].inferEmpty) {\n storeInput(flagInputs, config.caseStyle, activeFlag, \"\");\n activeFlag = void 0;\n } else {\n const externalFlagName = asExternal(activeFlag[0], config.caseStyle);\n const nextFlagName = asExternal(nextFlags[0][0], config.caseStyle);\n throw new UnsatisfiedFlagError(externalFlagName, nextFlagName);\n }\n }\n if (nextFlags.every(isNiladic)) {\n for (const nextFlag of nextFlags) {\n if (nextFlag[1].kind === \"boolean\") {\n storeInput(flagInputs, config.caseStyle, nextFlag, nextFlag[2] ? \"false\" : \"true\");\n } else {\n storeInput(flagInputs, config.caseStyle, nextFlag, \"1\");\n }\n }\n } else if (nextFlags.length > 1) {\n const nextFlagExpectingArg = nextFlags.find((nextFlag) => !isNiladic(nextFlag));\n const externalFlagName = asExternal(nextFlagExpectingArg[0], config.caseStyle);\n throw new UnsatisfiedFlagError(externalFlagName);\n } else {\n activeFlag = nextFlags[0];\n }\n return;\n }\n }\n if (activeFlag) {\n storeInput(flagInputs, config.caseStyle, activeFlag, input);\n activeFlag = void 0;\n } else {\n if (positional.kind === \"tuple\") {\n if (positionalIndex >= positional.parameters.length) {\n throw new UnexpectedPositionalError(positional.parameters.length, input);\n }\n } else {\n if (typeof positional.maximum === \"number\" && positionalIndex >= positional.maximum) {\n throw new UnexpectedPositionalError(positional.maximum, input);\n }\n }\n positionalInputs[positionalIndex] = input;\n ++positionalIndex;\n }\n },\n parseArguments: async (context) => {\n const errors = [];\n let positionalValues_p;\n if (positional.kind === \"array\") {\n if (typeof positional.minimum === \"number\" && positionalIndex < positional.minimum) {\n errors.push(\n new UnsatisfiedPositionalError(getPlaceholder(positional.parameter), [\n positional.minimum,\n positionalIndex\n ])\n );\n }\n positionalValues_p = allSettledOrElse(\n positionalInputs.map(async (input, i) => {\n const placeholder = getPlaceholder(positional.parameter, i + 1);\n return parseInput(placeholder, positional.parameter, input, context);\n })\n );\n } else {\n positionalValues_p = allSettledOrElse(\n positional.parameters.map(async (param, i) => {\n const placeholder = getPlaceholder(param, i + 1);\n const input = positionalInputs[i];\n if (typeof input !== \"string\") {\n if (typeof param.default === \"string\") {\n return parseInput(placeholder, param, param.default, context);\n }\n if (param.optional) {\n return;\n }\n throw new UnsatisfiedPositionalError(placeholder);\n }\n return parseInput(placeholder, param, input, context);\n })\n );\n }\n if (activeFlag && activeFlag[1].kind === \"parsed\" && activeFlag[1].inferEmpty) {\n storeInput(flagInputs, config.caseStyle, activeFlag, \"\");\n activeFlag = void 0;\n }\n const flagEntries_p = allSettledOrElse(\n Object.entries(flags).map(async (entry) => {\n const [internalFlagName, flag] = entry;\n const externalFlagName = asExternal(internalFlagName, config.caseStyle);\n if (activeFlag && activeFlag[0] === internalFlagName) {\n throw new UnsatisfiedFlagError(externalFlagName);\n }\n const inputs = flagInputs.get(internalFlagName);\n const value = await parseInputsForFlag(externalFlagName, flag, inputs, config, context);\n return [internalFlagName, value];\n })\n );\n const [positionalValuesResult, flagEntriesResult] = await Promise.all([positionalValues_p, flagEntries_p]);\n if (positionalValuesResult.status === \"rejected\") {\n for (const reason of positionalValuesResult.reasons) {\n errors.push(reason);\n }\n }\n if (flagEntriesResult.status === \"rejected\") {\n for (const reason of flagEntriesResult.reasons) {\n errors.push(reason);\n }\n }\n if (errors.length > 0) {\n return { success: false, errors };\n }\n if (positionalValuesResult.status === \"rejected\") {\n throw new InternalError(\"Unknown failure while scanning positional arguments\");\n }\n if (flagEntriesResult.status === \"rejected\") {\n throw new InternalError(\"Unknown failure while scanning flag arguments\");\n }\n const parsedFlags = Object.fromEntries(flagEntriesResult.value);\n return { success: true, arguments: [parsedFlags, ...positionalValuesResult.value] };\n },\n proposeCompletions: async ({ partial, completionConfig, text, context }) => {\n if (activeFlag) {\n return proposeFlagCompletionsForPartialInput(activeFlag[1], context, partial);\n }\n const completions = [];\n if (!treatInputsAsArguments) {\n const shorthandMatch = FLAG_SHORTHAND_PATTERN.exec(partial);\n if (completionConfig.includeAliases) {\n if (partial === \"\" || partial === \"-\") {\n const incompleteAliases = Object.entries(aliases).filter(\n (entry) => !isFlagSatisfiedByInputs(flags, flagInputs, entry[1])\n );\n for (const [alias] of incompleteAliases) {\n const flag = resolvedAliases[alias];\n if (flag) {\n completions.push({\n kind: \"argument:flag\",\n completion: `-${alias}`,\n brief: flag[1].brief\n });\n }\n }\n } else if (shorthandMatch) {\n const partialAliases = Array.from(shorthandMatch[1]);\n const flagInputsIncludingPartial = new Map(flagInputs);\n for (const alias of partialAliases) {\n const namedFlag = resolvedAliases[alias];\n if (!namedFlag) {\n throw new AliasNotFoundError(alias);\n }\n storeInput(\n flagInputsIncludingPartial,\n config.caseStyle,\n namedFlag,\n namedFlag[1].kind === \"boolean\" ? \"true\" : \"1\"\n );\n }\n const lastAlias = partialAliases[partialAliases.length - 1];\n if (lastAlias) {\n const namedFlag = resolvedAliases[lastAlias];\n if (namedFlag) {\n completions.push({\n kind: \"argument:flag\",\n completion: partial,\n brief: namedFlag[1].brief\n });\n }\n }\n const incompleteAliases = Object.entries(aliases).filter(\n (entry) => !isFlagSatisfiedByInputs(\n flags,\n flagInputsIncludingPartial,\n entry[1]\n )\n );\n for (const [alias] of incompleteAliases) {\n const flag = resolvedAliases[alias];\n if (flag) {\n completions.push({\n kind: \"argument:flag\",\n completion: `${partial}${alias}`,\n brief: flag[1].brief\n });\n }\n }\n }\n }\n if (partial === \"\" || partial === \"-\" || partial.startsWith(\"--\")) {\n if (config.allowArgumentEscapeSequence) {\n completions.push({\n kind: \"argument:flag\",\n completion: \"--\",\n brief: text.briefs.argumentEscapeSequence\n });\n }\n let incompleteFlags = Object.entries(flags).filter(\n ([flagName]) => !isFlagSatisfiedByInputs(flags, flagInputs, flagName)\n );\n if (config.caseStyle === \"allow-kebab-for-camel\") {\n incompleteFlags = incompleteFlags.map(([flagName, param]) => {\n return [convertCamelCaseToKebabCase(flagName), param];\n });\n }\n const possibleFlags = incompleteFlags.map(([flagName, param]) => [`--${flagName}`, param]).filter(([flagName]) => flagName.startsWith(partial));\n completions.push(\n ...possibleFlags.map(([name, param]) => {\n return {\n kind: \"argument:flag\",\n completion: name,\n brief: param.brief\n };\n })\n );\n }\n }\n if (positional.kind === \"array\") {\n if (positional.parameter.proposeCompletions) {\n if (typeof positional.maximum !== \"number\" || positionalIndex < positional.maximum) {\n const positionalCompletions = await positional.parameter.proposeCompletions.call(\n context,\n partial\n );\n completions.push(\n ...positionalCompletions.map((value) => {\n return {\n kind: \"argument:value\",\n completion: value,\n brief: positional.parameter.brief\n };\n })\n );\n }\n }\n } else {\n const nextPositional = positional.parameters[positionalIndex];\n if (nextPositional?.proposeCompletions) {\n const positionalCompletions = await nextPositional.proposeCompletions.call(context, partial);\n completions.push(\n ...positionalCompletions.map((value) => {\n return {\n kind: \"argument:value\",\n completion: value,\n brief: nextPositional.brief\n };\n })\n );\n }\n }\n return completions.filter(({ completion }) => completion.startsWith(partial));\n }\n };\n}\nasync function proposeFlagCompletionsForPartialInput(flag, context, partial) {\n if (typeof flag.variadic === \"string\") {\n if (partial.endsWith(flag.variadic)) {\n return proposeFlagCompletionsForPartialInput(flag, context, \"\");\n }\n }\n let values;\n if (flag.kind === \"enum\") {\n values = flag.values;\n } else if (flag.proposeCompletions) {\n values = await flag.proposeCompletions.call(context, partial);\n } else {\n values = [];\n }\n return values.map((value) => {\n return {\n kind: \"argument:value\",\n completion: value,\n brief: flag.brief\n };\n }).filter(({ completion }) => completion.startsWith(partial));\n}\nfunction listAllRouteNamesAndAliasesForScan(routeMap, scannerCaseStyle, config) {\n const displayCaseStyle = scannerCaseStyle === \"allow-kebab-for-camel\" ? \"convert-camel-to-kebab\" : scannerCaseStyle;\n let entries = routeMap.getAllEntries();\n if (!config.includeHiddenRoutes) {\n entries = entries.filter((entry) => !entry.hidden);\n }\n return entries.flatMap((entry) => {\n const routeName = entry.name[displayCaseStyle];\n if (config.includeAliases) {\n return [routeName, ...entry.aliases];\n }\n return [routeName];\n });\n}\n\n// src/routing/command/run.ts\nasync function runCommand({ loader, parameters }, {\n context,\n inputs,\n scannerConfig,\n errorFormatting,\n determineExitCode,\n ansiColorByStream\n}) {\n let parsedArguments;\n try {\n const scanner = buildArgumentScanner(parameters, scannerConfig);\n for (const input of inputs) {\n scanner.next(input);\n }\n const result = await scanner.parseArguments(context);\n if (result.success) {\n parsedArguments = result.arguments;\n } else {\n for (const error of result.errors) {\n const errorMessage = errorFormatting.exceptionWhileParsingArguments(error, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n }\n return ExitCode.InvalidArgument;\n }\n } catch (exc) {\n const errorMessage = errorFormatting.exceptionWhileParsingArguments(exc, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.InvalidArgument;\n }\n let commandFunction;\n try {\n const loaded = await loader();\n if (typeof loaded === \"function\") {\n commandFunction = loaded;\n } else {\n commandFunction = loaded.default;\n }\n } catch (exc) {\n const errorMessage = errorFormatting.exceptionWhileLoadingCommandFunction(exc, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.CommandLoadError;\n }\n try {\n const result = await commandFunction.call(context, ...parsedArguments);\n if (result instanceof Error) {\n const errorMessage = errorFormatting.commandErrorResult(result, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n if (determineExitCode) {\n return determineExitCode(result);\n }\n return ExitCode.CommandRunError;\n }\n } catch (exc) {\n const errorMessage = errorFormatting.exceptionWhileRunningCommand(exc, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n if (determineExitCode) {\n return determineExitCode(exc);\n }\n return ExitCode.CommandRunError;\n }\n return ExitCode.Success;\n}\n\n// src/routing/route-map/types.ts\nvar RouteMapSymbol = Symbol(\"RouteMap\");\n\n// src/routing/command/types.ts\nvar CommandSymbol = Symbol(\"Command\");\n\n// src/routing/scanner.ts\nfunction buildRouteScanner(root, config, startingPrefix, additionalFlags) {\n const prefix = [...startingPrefix];\n const unprocessedInputs = [];\n const flags = {};\n for (const additionalFlag of additionalFlags) {\n flags[additionalFlag.name] = additionalFlag;\n }\n const aliases = {};\n for (const additionalFlag of additionalFlags) {\n if (additionalFlag.aliases) {\n for (const alias of additionalFlag.aliases) {\n aliases[alias] = additionalFlag.name;\n }\n }\n }\n const resolvedAliases = resolveAliases(flags, aliases, config.caseStyle);\n let activeFlag;\n let parent;\n let current = root;\n let target;\n let treatInputsAsArguments = false;\n return {\n next: (input) => {\n if (!treatInputsAsArguments && config.allowArgumentEscapeSequence && input === \"--\") {\n treatInputsAsArguments = true;\n unprocessedInputs.push(input);\n return;\n }\n if (!treatInputsAsArguments && !activeFlag) {\n try {\n const nextFlags = findFlagsByArgument(input, flags, {}, resolvedAliases, config);\n for (const currentFlag of nextFlags) {\n if (!currentFlag[1].global && current !== root) {\n continue;\n }\n activeFlag = currentFlag[1];\n target = current;\n return;\n }\n } catch {\n }\n }\n if (target || treatInputsAsArguments) {\n unprocessedInputs.push(input);\n return;\n }\n if (current.kind === CommandSymbol) {\n target = current;\n unprocessedInputs.push(input);\n return;\n }\n const camelCaseRouteName = convertKebabCaseToCamelCase(input);\n let internalRouteName = input;\n let next = current.getRoutingTargetForInput(internalRouteName);\n if (config.caseStyle === \"allow-kebab-for-camel\" && !next) {\n next = current.getRoutingTargetForInput(camelCaseRouteName);\n if (next) {\n internalRouteName = camelCaseRouteName;\n }\n }\n if (!next) {\n const defaultCommand = current.getDefaultCommand();\n unprocessedInputs.push(input);\n if (defaultCommand) {\n parent = [current, \"\"];\n current = defaultCommand;\n return;\n }\n return { input, routeMap: current };\n }\n parent = [current, input];\n current = next;\n prefix.push(input);\n },\n finish: () => {\n target = target ?? current;\n if (target.kind === RouteMapSymbol && !activeFlag) {\n const defaultCommand = target.getDefaultCommand();\n if (defaultCommand) {\n parent = [target, \"\"];\n target = defaultCommand;\n }\n }\n const aliases2 = parent ? parent[0].getOtherAliasesForInput(parent[1], config.caseStyle) : { original: [], \"convert-camel-to-kebab\": [] };\n return {\n target,\n unprocessedInputs,\n prefix,\n aliases: aliases2,\n activeFlag\n };\n }\n };\n}\n\n// src/context.ts\nfunction checkEnvironmentVariable(process, varName) {\n const value = process.env?.[varName];\n return typeof value === \"string\" && looseBooleanParser(value);\n}\n\n// src/text.ts\nvar text_en = {\n headers: {\n usage: \"USAGE\",\n aliases: \"ALIASES\",\n commands: \"COMMANDS\",\n flags: \"FLAGS\",\n arguments: \"ARGUMENTS\"\n },\n keywords: {\n default: \"default =\",\n separator: \"separator =\"\n },\n briefs: {\n help: \"Print help information and exit\",\n helpAll: \"Print help information (including hidden commands/flags) and exit\",\n version: \"Print version information and exit\",\n argumentEscapeSequence: \"All subsequent inputs should be interpreted as arguments\"\n },\n noCommandRegisteredForInput({ input, corrections }) {\n const errorMessage = `No command registered for \\`${input}\\``;\n if (corrections.length > 0) {\n const formattedCorrections = joinWithGrammar(corrections, {\n kind: \"conjunctive\",\n conjunction: \"or\",\n serialComma: true\n });\n return `${errorMessage}, did you mean ${formattedCorrections}?`;\n } else {\n return errorMessage;\n }\n },\n noTextAvailableForLocale({ requestedLocale, defaultLocale }) {\n return `Application does not support \"${requestedLocale}\" locale, defaulting to \"${defaultLocale}\"`;\n },\n exceptionWhileParsingArguments(exc) {\n if (exc instanceof ArgumentScannerError) {\n return formatMessageForArgumentScannerError(exc, {});\n }\n return `Unable to parse arguments, ${(this.formatException ?? formatException)(exc)}`;\n },\n exceptionWhileLoadingCommandFunction(exc) {\n return `Unable to load command function, ${(this.formatException ?? formatException)(exc)}`;\n },\n exceptionWhileLoadingCommandContext(exc) {\n return `Unable to load command context, ${(this.formatException ?? formatException)(exc)}`;\n },\n exceptionWhileRunningCommand(exc) {\n return `Command failed, ${(this.formatException ?? formatException)(exc)}`;\n },\n exceptionWhileRunningIntegrationHook({ exception, hook, integration }) {\n return `Unexpected exception thrown by '${integration}' integration during '${hook}' hook.\n${(this.formatException ?? formatException)(exception)}`;\n },\n exceptionWhileRunningIntegrationFlag({ exception, integration }) {\n return `Unexpected exception thrown by \"--${integration}\" flag from the '${integration}' integration.\n${(this.formatException ?? formatException)(exception)}`;\n },\n commandErrorResult(err) {\n return err.message;\n },\n currentVersionIsNotLatest({ currentVersion, latestVersion, upgradeCommand }) {\n if (upgradeCommand) {\n return `Latest available version is ${latestVersion} (currently running ${currentVersion}), upgrade with \"${upgradeCommand}\"`;\n }\n return `Latest available version is ${latestVersion} (currently running ${currentVersion})`;\n }\n};\nfunction defaultTextLoader(locale) {\n if (locale.startsWith(\"en\")) {\n return text_en;\n }\n}\nfunction shouldUseAnsiColor(process, stream, config) {\n return !config.disableAnsiColor && !checkEnvironmentVariable(process, \"STRICLI_NO_COLOR\") && (stream.getColorDepth?.(process.env) ?? 1) >= 4;\n}\nfunction shouldUseAnsiColorForStreams(process, config) {\n return {\n stdout: shouldUseAnsiColor(process, process.stdout, config),\n stderr: shouldUseAnsiColor(process, process.stderr, config)\n };\n}\n\n// src/application/integrations/help.ts\nfunction validateCaseStyleCompatibility(scan, display) {\n if (scan === \"original\" && display === \"convert-camel-to-kebab\") {\n throw new Error(\"Cannot convert route and flag names on display (convert-camel-to-kebab) but scan as original\");\n }\n}\nfunction help({\n alias = \"h\",\n includeHidden = false,\n formatting,\n ...config\n}) {\n return {\n validate(_root, config2) {\n validateCaseStyleCompatibility(config2.scanner.caseStyle, formatting.caseStyle);\n },\n flag: {\n ...config,\n global: true,\n aliases: alias === false ? [] : [alias],\n async run(app, { text, ansiColorByStream, result, additionalFlags }) {\n this.process.stdout.write(\n result.target.formatHelp({\n prefix: result.prefix,\n additionalFlags,\n includeArgumentEscapeSequenceFlag: app.config.scanner.allowArgumentEscapeSequence,\n includeHidden,\n config: formatting,\n aliases: result.aliases[formatting.caseStyle],\n text,\n ansiColor: ansiColorByStream.stdout\n })\n );\n }\n }\n };\n}\n\n// src/application/integrations/version.ts\nfunction version({\n info,\n alias = \"v\",\n hook = \"app:start\",\n ...config\n}) {\n let versionCheck;\n if (info.getLatestVersion) {\n const getLatestVersion = info.getLatestVersion;\n versionCheck = async function({ text, ansiColorByStream }) {\n if (checkEnvironmentVariable(this.process, \"STRICLI_SKIP_VERSION_CHECK\")) {\n return;\n }\n let currentVersion;\n if (\"currentVersion\" in info) {\n currentVersion = info.currentVersion;\n } else {\n currentVersion = await info.getCurrentVersion.call(this);\n }\n const latestVersion = await getLatestVersion.call(this, currentVersion);\n if (latestVersion && currentVersion !== latestVersion) {\n const warningMessage = text.currentVersionIsNotLatest({\n currentVersion,\n latestVersion,\n upgradeCommand: info.upgradeCommand,\n ansiColor: ansiColorByStream.stderr\n });\n this.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[33m${warningMessage}\\x1B[39m\\x1B[22m\n` : `${warningMessage}\n`\n );\n }\n };\n }\n return {\n hooks: versionCheck ? { [hook]: versionCheck } : {},\n flag: {\n ...config,\n defaultForRouteMap: false,\n global: false,\n aliases: alias === false ? [] : [alias],\n async run() {\n let currentVersion;\n if (\"currentVersion\" in info) {\n currentVersion = info.currentVersion;\n } else {\n currentVersion = await info.getCurrentVersion.call(this);\n }\n this.process.stdout.write(currentVersion + \"\\n\");\n }\n }\n };\n}\n\n// src/application/integration.ts\nasync function runHook(integrations, hookName, context, args) {\n for (const [name, integration] of Object.entries(integrations)) {\n const hook = integration.hooks?.[hookName];\n if (hook) {\n try {\n await hook.call(context, args);\n } catch (exc) {\n const errorMessage = args.text.exceptionWhileRunningIntegrationHook({\n exception: exc,\n hook: hookName,\n integration: name,\n ansiColor: args.ansiColorByStream.stderr\n });\n context.process.stderr.write(\n args.ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.IntegrationError;\n }\n }\n }\n}\nfunction checkIntegrationsForCollisions(integrations, caseStyle) {\n let routeMapDefault;\n const flagNames = new Set(Object.keys(integrations));\n const aliases = /* @__PURE__ */ new Map();\n for (const [name, integration] of Object.entries(integrations)) {\n if (caseStyle === \"allow-kebab-for-camel\") {\n const camelCase = convertKebabCaseToCamelCase(name);\n if (camelCase !== name && flagNames.has(camelCase)) {\n throw new InternalError(\n `Multiple integrations are trying to use the same flag name (with 'allow-kebab-for-camel'): '${name}' and '${camelCase}'`\n );\n }\n }\n if (integration.flag) {\n if (integration.flag.defaultForRouteMap) {\n if (routeMapDefault) {\n throw new InternalError(\n `Multiple integrations provide a default flag for route maps: '${routeMapDefault}' and '${name}'`\n );\n }\n routeMapDefault = name;\n }\n for (const alias of integration.flag.aliases ?? []) {\n const flagForAlias = aliases.get(alias);\n if (flagForAlias) {\n throw new InternalError(\n `Multiple integrations are trying to use the same flag alias \"-${alias}\": '${flagForAlias}' and '${name}'`\n );\n }\n aliases.set(alias, name);\n }\n }\n }\n}\nfunction checkIntegrationsForFlagNameConflicts(root, additionalFlags, caseStyle) {\n function checkForConflicts(target, prefix) {\n if (target.kind === CommandSymbol) {\n const relevantFlags = root === target ? additionalFlags : additionalFlags.filter(({ global }) => global);\n for (const { name, aliases } of relevantFlags) {\n if (target.usesFlag(name, caseStyle)) {\n throw new InternalError(\n `'${name}' integration provides a flag that would override: \"${[...prefix, `--${name}`].join(\" \")}\"`\n );\n }\n for (const alias of aliases ?? []) {\n if (target.usesFlag(alias, caseStyle)) {\n throw new InternalError(\n `'${name}' integration provides a flag with an alias that would override: \"${[...prefix, `-${alias}`].join(\" \")}\"`\n );\n }\n }\n }\n } else {\n for (const entry of target.getAllEntries()) {\n checkForConflicts(entry.target, [...prefix, entry.name.original]);\n }\n }\n }\n checkForConflicts(root, []);\n}\nfunction gatherAdditionalFlagsFromIntegrations(integrations) {\n const flags = [];\n for (const [name, integration] of Object.entries(integrations)) {\n if (integration.flag) {\n flags.push({ ...integration.flag, name });\n }\n }\n return flags;\n}\nfunction proposeCompletionsForAdditionalFlags(additionalFlags, config, caseStyle, partial) {\n const possibleCompletions = [];\n for (const flag of additionalFlags) {\n if (!flag.complete || flag.hidden && !config.includeHiddenRoutes) {\n continue;\n }\n possibleCompletions.push({\n kind: \"argument:flag\",\n completion: `--${flag.name}`,\n brief: flag.brief\n });\n if (config.includeAliases) {\n for (const alias of flag.aliases ?? []) {\n possibleCompletions.push({\n kind: \"argument:flag\",\n completion: `-${alias}`,\n brief: flag.brief\n });\n }\n }\n if (caseStyle === \"allow-kebab-for-camel\") {\n const kebabName = convertCamelCaseToKebabCase(flag.name);\n if (kebabName !== flag.name) {\n possibleCompletions.push({\n kind: \"argument:flag\",\n completion: `--${kebabName}`,\n brief: flag.brief\n });\n }\n }\n }\n return possibleCompletions.filter(({ completion }) => completion.startsWith(partial));\n}\nfunction validateIntegrations(integrations, root, config) {\n for (const [name, integration] of Object.entries(integrations)) {\n try {\n integration.validate?.(root, config);\n } catch (exc) {\n throw new InternalError(`Integration '${name}' failed validation: ${String(exc)}`, { cause: exc });\n }\n }\n}\nfunction gatherDefaultIntegrations(config, text) {\n const integrations = {\n help: help({\n brief: text.briefs.help,\n alias: \"h\",\n defaultForRouteMap: true,\n includeHidden: false,\n formatting: config.documentation\n }),\n helpAll: help({\n brief: text.briefs.helpAll,\n alias: \"H\",\n hidden: !config.documentation.alwaysShowHelpAllFlag,\n includeHidden: true,\n formatting: config.documentation\n })\n };\n if (config.versionInfo) {\n integrations[\"version\"] = version({\n brief: text.briefs.version,\n info: config.versionInfo,\n alias: \"v\",\n hook: \"app:start\"\n });\n }\n return integrations;\n}\n\n// src/application/run.ts\nasync function runApplication(app, rawInputs, context) {\n const ansiColorByStream = shouldUseAnsiColorForStreams(context.process, app.config.documentation);\n let text = app.defaultText;\n if (context.locale && \"loadText\" in app.config.localization) {\n const localeText = app.config.localization.loadText(context.locale);\n if (localeText) {\n text = localeText;\n } else {\n const warningMessage = text.noTextAvailableForLocale({\n requestedLocale: context.locale,\n defaultLocale: app.config.localization.defaultLocale,\n ansiColor: ansiColorByStream.stderr\n });\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[33m${warningMessage}\\x1B[39m\\x1B[22m\n` : `${warningMessage}\n`\n );\n }\n }\n const hookStartExitCode = await runHook(app.integrations, \"app:start\", context, {\n text,\n ansiColorByStream\n });\n if (typeof hookStartExitCode === \"number\") {\n return hookStartExitCode;\n }\n const exitCode = await scanInputsAndRunTarget(app, rawInputs, context, text, ansiColorByStream);\n const hookEndExitCode = await runHook(app.integrations, \"app:end\", context, {\n text,\n ansiColorByStream,\n exitCode\n });\n if (typeof hookEndExitCode === \"number\") {\n return hookEndExitCode;\n }\n return exitCode;\n}\nasync function scanInputsAndRunTarget(app, rawInputs, context, text, ansiColorByStream) {\n const additionalFlags = gatherAdditionalFlagsFromIntegrations(app.integrations);\n const inputs = rawInputs.slice();\n const scanner = buildRouteScanner(app.root, app.config.scanner, [app.config.name], additionalFlags);\n let error;\n while (inputs.length > 0 && !error) {\n const arg = inputs.shift();\n error = scanner.next(arg);\n }\n if (error) {\n const routeNames = listAllRouteNamesAndAliasesForScan(\n error.routeMap,\n app.config.scanner.caseStyle,\n app.config.completion\n );\n const corrections = filterClosestAlternatives(error.input, routeNames, app.config.scanner.distanceOptions).map(\n (str) => `\\`${str}\\``\n );\n const errorMessage = text.noCommandRegisteredForInput({\n input: error.input,\n corrections,\n ansiColor: ansiColorByStream.stderr\n });\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.UnknownCommand;\n }\n let { activeFlag, ...result } = scanner.finish();\n if (activeFlag || result.target.kind === RouteMapSymbol) {\n if (!activeFlag) {\n activeFlag = additionalFlags.find((flag) => flag.defaultForRouteMap);\n }\n if (activeFlag) {\n let additionalFlagsForTarget = additionalFlags;\n if (result.target !== app.root) {\n additionalFlagsForTarget = additionalFlagsForTarget.filter((flag) => flag.global);\n }\n try {\n await activeFlag.run.call(context, app, {\n text,\n ansiColorByStream,\n result,\n additionalFlags: additionalFlagsForTarget\n });\n } catch (exc) {\n const errorMessage = text.exceptionWhileRunningIntegrationFlag({\n exception: exc,\n ansiColor: ansiColorByStream.stderr,\n integration: activeFlag.name\n });\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.IntegrationError;\n }\n }\n return ExitCode.Success;\n }\n let commandContext;\n if (\"forCommand\" in context) {\n try {\n commandContext = await context.forCommand({ prefix: result.prefix });\n } catch (exc) {\n const errorMessage = text.exceptionWhileLoadingCommandContext(exc, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m` : errorMessage\n );\n return ExitCode.ContextLoadError;\n }\n } else {\n commandContext = context;\n }\n const hookStartExitCode = await runHook(app.integrations, \"command:start\", commandContext, {\n text,\n ansiColorByStream,\n result\n });\n if (typeof hookStartExitCode === \"number\") {\n return hookStartExitCode;\n }\n const exitCode = await runCommand(result.target, {\n context: commandContext,\n inputs: result.unprocessedInputs,\n scannerConfig: app.config.scanner,\n errorFormatting: text,\n determineExitCode: app.config.determineExitCode,\n ansiColorByStream\n });\n const hookEndExitCode = await runHook(app.integrations, \"command:end\", commandContext, {\n text,\n ansiColorByStream,\n result,\n exitCode\n });\n if (typeof hookEndExitCode === \"number\") {\n return hookEndExitCode;\n }\n return exitCode;\n}\n\n// src/parameter/flag/types.ts\nfunction hasDefault(flag) {\n return \"default\" in flag && typeof flag.default !== \"undefined\";\n}\nfunction isOptionalAtRuntime(flag) {\n return flag.optional ?? hasDefault(flag);\n}\n\n// src/parameter/formatting.ts\nfunction withDefaultFormattingConfiguration(config, scannerCaseStyle) {\n let displayCaseStyle;\n if (config.caseStyle) {\n displayCaseStyle = config.caseStyle;\n } else if (scannerCaseStyle === \"allow-kebab-for-camel\") {\n displayCaseStyle = \"convert-camel-to-kebab\";\n } else {\n displayCaseStyle = scannerCaseStyle;\n }\n validateCaseStyleCompatibility(scannerCaseStyle, displayCaseStyle);\n return {\n useAliasInUsageLine: config.useAliasInUsageLine ?? false,\n onlyRequiredInUsageLine: config.onlyRequiredInUsageLine ?? false,\n caseStyle: displayCaseStyle\n };\n}\nfunction wrapRequiredFlag(text) {\n return `(${text})`;\n}\nfunction wrapOptionalFlag(text) {\n return `[${text}]`;\n}\nfunction wrapVariadicFlag(text) {\n return `${text}...`;\n}\nfunction wrapRequiredParameter(text) {\n return `<${text}>`;\n}\nfunction wrapOptionalParameter(text) {\n return `[<${text}>]`;\n}\nfunction wrapVariadicParameter(text) {\n return `<${text}>...`;\n}\nfunction formatUsageLineForParameters(parameters, args) {\n const flagsUsage = Object.entries(parameters.flags ?? {}).filter(([, flag]) => {\n if (flag.hidden) {\n return false;\n }\n if (args.config.onlyRequiredInUsageLine && isOptionalAtRuntime(flag)) {\n return false;\n }\n return true;\n }).map(([name, flag]) => {\n let displayName = args.config.caseStyle === \"convert-camel-to-kebab\" ? `--${convertCamelCaseToKebabCase(name)}` : `--${name}`;\n if (parameters.aliases && args.config.useAliasInUsageLine) {\n const aliases = Object.entries(parameters.aliases).filter((entry) => entry[1] === name);\n if (aliases.length === 1 && aliases[0]) {\n displayName = `-${aliases[0][0]}`;\n }\n }\n if (flag.kind === \"boolean\") {\n return [flag, displayName];\n }\n if (flag.kind === \"enum\" && typeof flag.placeholder !== \"string\") {\n return [flag, `${displayName} ${flag.values.join(\"|\")}`];\n }\n const placeholder = flag.placeholder ?? \"value\";\n return [flag, `${displayName} ${placeholder}`];\n }).map(([flag, usage]) => {\n if (flag.kind === \"parsed\" && flag.variadic) {\n if (isOptionalAtRuntime(flag)) {\n return wrapVariadicFlag(wrapOptionalFlag(usage));\n }\n return wrapVariadicFlag(wrapRequiredFlag(usage));\n }\n if (isOptionalAtRuntime(flag)) {\n return wrapOptionalFlag(usage);\n }\n return wrapRequiredFlag(usage);\n });\n let positionalUsage = [];\n const positional = parameters.positional;\n if (positional) {\n if (positional.kind === \"array\") {\n positionalUsage = [wrapVariadicParameter(positional.parameter.placeholder ?? \"args\")];\n } else {\n let parameters2 = positional.parameters;\n if (args.config.onlyRequiredInUsageLine) {\n parameters2 = parameters2.filter((param) => !param.optional && typeof param.default === \"undefined\");\n }\n positionalUsage = parameters2.map((param, i) => {\n const argName = param.placeholder ?? `arg${i + 1}`;\n return param.optional || typeof param.default !== \"undefined\" ? wrapOptionalParameter(argName) : wrapRequiredParameter(argName);\n });\n }\n }\n return [...args.prefix, ...flagsUsage, ...positionalUsage].join(\" \");\n}\n\n// src/config.ts\nfunction formatForDisplay(flagName, displayCaseStyle) {\n if (displayCaseStyle === \"convert-camel-to-kebab\") {\n return convertCamelCaseToKebabCase(flagName);\n }\n return flagName;\n}\nfunction formatAsNegated(flagName, displayCaseStyle) {\n if (displayCaseStyle === \"convert-camel-to-kebab\") {\n return `no-${convertCamelCaseToKebabCase(flagName)}`;\n }\n return `no${flagName[0].toUpperCase()}${flagName.slice(1)}`;\n}\nfunction withDefaults(config) {\n const scannerCaseStyle = config.scanner?.caseStyle ?? \"original\";\n const scannerConfig = {\n caseStyle: scannerCaseStyle,\n allowArgumentEscapeSequence: config.scanner?.allowArgumentEscapeSequence ?? false,\n distanceOptions: config.scanner?.distanceOptions ?? {\n threshold: 7,\n weights: {\n insertion: 1,\n deletion: 3,\n substitution: 2,\n transposition: 0\n }\n }\n };\n const documentationConfig = {\n alwaysShowHelpAllFlag: config.documentation?.alwaysShowHelpAllFlag ?? false,\n disableAnsiColor: config.documentation?.disableAnsiColor ?? false,\n ...withDefaultFormattingConfiguration(config.documentation ?? {}, scannerCaseStyle)\n };\n const completionConfig = {\n includeAliases: config.completion?.includeAliases ?? documentationConfig.useAliasInUsageLine,\n includeHiddenRoutes: config.completion?.includeHiddenRoutes ?? false,\n ...config.completion\n };\n return {\n ...config,\n scanner: scannerConfig,\n completion: completionConfig,\n documentation: documentationConfig,\n localization: {\n defaultLocale: \"en\",\n loadText: defaultTextLoader,\n ...config.localization\n }\n };\n}\n\n// src/application/builder.ts\nfunction buildApplication(root, appConfig, integrations) {\n const config = withDefaults(appConfig);\n let defaultText;\n if (\"text\" in config.localization) {\n defaultText = config.localization.text;\n } else {\n const text = config.localization.loadText(config.localization.defaultLocale);\n if (!text) {\n throw new InternalError(`No text available for the default locale \"${config.localization.defaultLocale}\"`);\n }\n defaultText = text;\n }\n if (integrations) {\n checkIntegrationsForCollisions(integrations, config.scanner.caseStyle);\n } else {\n integrations = gatherDefaultIntegrations(config, defaultText);\n }\n const additionalFlags = gatherAdditionalFlagsFromIntegrations(integrations);\n checkIntegrationsForFlagNameConflicts(root, additionalFlags, config.scanner.caseStyle);\n validateIntegrations(integrations, root, config);\n return {\n root,\n config,\n defaultText,\n integrations\n };\n}\n\n// src/application/documentation.ts\nfunction* iterateAllCommands(routeMap, prefix, caseStyle) {\n for (const entry of routeMap.getAllEntries()) {\n if (entry.hidden) {\n continue;\n }\n const routeName = entry.name[caseStyle];\n const route = [...prefix, routeName];\n if (entry.target.kind === RouteMapSymbol) {\n yield* iterateAllCommands(entry.target, route, caseStyle);\n } else {\n yield [route, entry.target, entry.aliases];\n }\n }\n}\nfunction generateHelpTextForAllCommands({ root, defaultText, config, integrations }, locale) {\n let text = defaultText;\n if (locale && \"loadText\" in config.localization) {\n const localeText = config.localization.loadText(locale);\n if (localeText) {\n text = localeText;\n } else {\n throw new InternalError(`Application does not support \"${locale}\" locale`);\n }\n }\n const additionalFlags = gatherAdditionalFlagsFromIntegrations(integrations);\n const commands = [];\n if (root.kind === CommandSymbol) {\n commands.push([[config.name], root, []]);\n } else {\n commands.push(...iterateAllCommands(root, [config.name], config.documentation.caseStyle));\n }\n return commands.map(([route, command, aliases]) => {\n let additionalFlagsForCommand = additionalFlags;\n if (command !== root) {\n additionalFlagsForCommand = additionalFlagsForCommand.filter((flag) => flag.global);\n }\n return [\n route.join(\" \"),\n command.formatHelp({\n prefix: route,\n config: config.documentation,\n additionalFlags: additionalFlagsForCommand,\n includeArgumentEscapeSequenceFlag: config.scanner.allowArgumentEscapeSequence,\n includeHidden: false,\n aliases,\n text,\n ansiColor: false\n })\n ];\n });\n}\n\n// src/routing/command/propose-completions.ts\nasync function proposeCompletionsForCommand({ parameters }, args) {\n try {\n const scanner = buildArgumentScanner(parameters, args.scannerConfig);\n for (const input of args.inputs) {\n scanner.next(input);\n }\n return await scanner.proposeCompletions(args);\n } catch {\n return [];\n }\n}\n\n// src/routing/route-map/propose-completions.ts\nasync function proposeCompletionsForRouteMap(routeMap, { partial, scannerConfig, completionConfig }) {\n let entries = routeMap.getAllEntries();\n if (!completionConfig.includeHiddenRoutes) {\n entries = entries.filter((entry) => !entry.hidden);\n }\n const displayCaseStyle = scannerConfig.caseStyle === \"allow-kebab-for-camel\" ? \"convert-camel-to-kebab\" : scannerConfig.caseStyle;\n return entries.flatMap((entry) => {\n const kind = entry.target.kind === CommandSymbol ? \"routing-target:command\" : \"routing-target:route-map\";\n const brief = entry.target.brief;\n const targetCompletion = {\n kind,\n completion: entry.name[displayCaseStyle],\n brief\n };\n if (completionConfig.includeAliases) {\n return [\n targetCompletion,\n ...entry.aliases.map((alias) => {\n return {\n kind,\n completion: alias,\n brief\n };\n })\n ];\n }\n return [targetCompletion];\n }).filter(({ completion }) => completion.startsWith(partial));\n}\n\n// src/application/propose-completions.ts\nasync function proposeCompletionsForApplication({ root, config, defaultText, integrations }, rawInputs, context) {\n if (rawInputs.length === 0) {\n return [];\n }\n const additionalFlags = gatherAdditionalFlagsFromIntegrations(integrations);\n const scanner = buildRouteScanner(root, config.scanner, [], additionalFlags);\n const leadingInputs = rawInputs.slice(0, -1);\n let error;\n while (leadingInputs.length > 0 && !error) {\n const input = leadingInputs.shift();\n error = scanner.next(input);\n }\n if (error) {\n return [];\n }\n const result = scanner.finish();\n if (result.activeFlag) {\n return [];\n }\n let commandContext;\n if (\"forCommand\" in context) {\n try {\n commandContext = await context.forCommand({ prefix: result.prefix });\n } catch {\n return [];\n }\n } else {\n commandContext = context;\n }\n const partial = rawInputs[rawInputs.length - 1];\n let additionalFlagsForTarget = additionalFlags;\n if (result.target !== root) {\n additionalFlagsForTarget = additionalFlagsForTarget.filter((flag) => flag.global);\n }\n const additionalCompletions = proposeCompletionsForAdditionalFlags(\n additionalFlagsForTarget,\n config.completion,\n config.scanner.caseStyle,\n partial\n );\n let targetCompletions;\n if (result.target.kind === RouteMapSymbol) {\n targetCompletions = await proposeCompletionsForRouteMap(result.target, {\n context: commandContext,\n partial,\n scannerConfig: config.scanner,\n completionConfig: config.completion\n });\n } else {\n targetCompletions = await proposeCompletionsForCommand(result.target, {\n context: commandContext,\n inputs: result.unprocessedInputs,\n partial,\n scannerConfig: config.scanner,\n completionConfig: config.completion,\n text: defaultText\n });\n }\n return [...targetCompletions, ...additionalCompletions];\n}\n\n// src/parameter/parser/choice.ts\nfunction narrowString(choices, value) {\n return choices.includes(value);\n}\nfunction buildChoiceParser(choices) {\n return (input) => {\n if (!narrowString(choices, input)) {\n throw new SyntaxError(`${input} is not one of (${choices.join(\"|\")})`);\n }\n return input;\n };\n}\n\n// src/parameter/flag/formatting.ts\nfunction formatRowForAdditionalFlag(flag, caseStyle) {\n return {\n aliases: flag.aliases ? flag.aliases.map((alias) => `-${alias}`).join(\" \") : \"\",\n flagName: `--${formatForDisplay(flag.name, caseStyle)}`,\n brief: flag.brief,\n hidden: flag.hidden\n };\n}\nfunction formatDocumentationForFlagParameters(flags, aliases, args) {\n const { keywords } = args.text;\n const visibleFlags = Object.entries(flags).filter(([, flag]) => {\n if (flag.hidden && !args.includeHidden) {\n return false;\n }\n return true;\n });\n const atLeastOneOptional = visibleFlags.some(([, flag]) => isOptionalAtRuntime(flag));\n const rows = visibleFlags.map(([name, flag]) => {\n const aliasStrings = Object.entries(aliases).filter((entry) => entry[1] === name).map(([alias]) => `-${alias}`);\n let flagName = \"--\" + formatForDisplay(name, args.config.caseStyle);\n if (flag.kind === \"boolean\" && flag.default !== false && flag.withNegated !== false) {\n const negatedFlagName = formatAsNegated(name, args.config.caseStyle);\n flagName = `${flagName}/--${negatedFlagName}`;\n }\n if (isOptionalAtRuntime(flag)) {\n flagName = `[${flagName}]`;\n } else if (atLeastOneOptional) {\n flagName = ` ${flagName}`;\n }\n if (flag.kind === \"parsed\" && flag.variadic) {\n flagName = `${flagName}...`;\n }\n const suffixParts = [];\n if (flag.kind === \"enum\") {\n const choices = flag.values.join(\"|\");\n suffixParts.push(choices);\n }\n if (hasDefault(flag)) {\n const defaultKeyword = args.ansiColor ? `\\x1B[2m${keywords.default}\\x1B[22m` : keywords.default;\n let defaultValue;\n if (Array.isArray(flag.default)) {\n if (flag.default.length === 0) {\n defaultValue = \"[]\";\n } else {\n const separator = \"variadic\" in flag && typeof flag.variadic === \"string\" ? flag.variadic : \" \";\n defaultValue = flag.default.join(separator);\n }\n } else {\n defaultValue = flag.default === \"\" ? `\"\"` : String(flag.default);\n }\n suffixParts.push(`${defaultKeyword} ${defaultValue}`);\n }\n if (\"variadic\" in flag && typeof flag.variadic === \"string\") {\n const separatorKeyword = args.ansiColor ? `\\x1B[2m${keywords.separator}\\x1B[22m` : keywords.separator;\n suffixParts.push(`${separatorKeyword} ${flag.variadic}`);\n }\n const suffix = suffixParts.length > 0 ? `[${suffixParts.join(\", \")}]` : void 0;\n return {\n aliases: aliasStrings.join(\" \"),\n flagName,\n brief: flag.brief,\n suffix,\n hidden: flag.hidden\n };\n });\n for (const flag of args.additionalFlags) {\n if (flag.hidden && !args.includeHidden) {\n continue;\n }\n const row = formatRowForAdditionalFlag(flag, args.config.caseStyle);\n rows.push({\n ...row,\n flagName: atLeastOneOptional ? ` ${row.flagName}` : row.flagName\n });\n }\n if (args.includeArgumentEscapeSequenceFlag) {\n rows.push({\n aliases: \"\",\n flagName: atLeastOneOptional ? \" --\" : \"--\",\n brief: args.text.briefs.argumentEscapeSequence\n });\n }\n return formatRowsWithColumns(\n rows.map((row) => {\n if (!args.ansiColor) {\n return [row.aliases, row.flagName, row.brief, row.suffix ?? \"\"];\n }\n return [\n row.hidden ? `\\x1B[2m${row.aliases}\\x1B[22m` : `\\x1B[1m${row.aliases}\\x1B[22m`,\n row.hidden ? `\\x1B[2m${row.flagName}\\x1B[22m` : `\\x1B[1m${row.flagName}\\x1B[22m`,\n row.hidden ? `\\x1B[2;3m${row.brief}\\x1B[22;23m` : `\\x1B[;;3m${row.brief}\\x1B[;;;23m`,\n row.suffix ?? \"\"\n ];\n }),\n [\" \", \" \", \" \"]\n );\n}\nfunction* generateUsageLinesForAdditionalFlags(flags, includeHidden, caseStyle, useAliasInUsageLine) {\n for (const flag of flags) {\n if (flag.hidden && !includeHidden) {\n continue;\n }\n if (useAliasInUsageLine && flag.aliases && flag.aliases.length > 0) {\n yield `-${flag.aliases[0]}`;\n } else {\n yield `--${formatForDisplay(flag.name, caseStyle)}`;\n }\n }\n}\n\n// src/parameter/positional/formatting.ts\nfunction formatDocumentationForPositionalParameters(positional, args) {\n if (positional.kind === \"array\") {\n const name = positional.parameter.placeholder ?? \"args\";\n const argName = args.ansiColor ? `\\x1B[1m${name}...\\x1B[22m` : `${name}...`;\n const brief = args.ansiColor ? `\\x1B[3m${positional.parameter.brief}\\x1B[23m` : positional.parameter.brief;\n return formatRowsWithColumns([[argName, brief]], [\" \"]);\n }\n const { keywords } = args.text;\n const atLeastOneOptional = positional.parameters.some((def) => def.optional);\n return formatRowsWithColumns(\n positional.parameters.map((def, i) => {\n let name = def.placeholder ?? `arg${i + 1}`;\n let suffix;\n if (def.optional) {\n name = `[${name}]`;\n } else if (atLeastOneOptional) {\n name = ` ${name}`;\n }\n if (def.default) {\n const defaultKeyword = args.ansiColor ? `\\x1B[2m${keywords.default}\\x1B[22m` : keywords.default;\n suffix = `[${defaultKeyword} ${def.default}]`;\n }\n return [\n args.ansiColor ? `\\x1B[1m${name}\\x1B[22m` : name,\n args.ansiColor ? `\\x1B[3m${def.brief}\\x1B[23m` : def.brief,\n suffix ?? \"\"\n ];\n }),\n [\" \", \" \"]\n );\n}\n\n// src/routing/command/documentation.ts\nfunction* generateCommandHelpLines(parameters, docs, args) {\n const { brief, fullDescription, customUsage } = docs;\n const { headers } = args.text;\n const prefix = args.prefix.join(\" \");\n yield args.ansiColor ? `\\x1B[4m${headers.usage}\\x1B[24m` : headers.usage;\n if (customUsage) {\n for (const usage of customUsage) {\n if (typeof usage === \"string\") {\n yield ` ${prefix} ${usage}`;\n } else {\n const brief2 = args.ansiColor ? `\\x1B[3m${usage.brief}\\x1B[23m` : usage.brief;\n yield ` ${prefix} ${usage.input}\n ${brief2}`;\n }\n }\n } else {\n yield ` ${formatUsageLineForParameters(parameters, args)}`;\n }\n for (const line of generateUsageLinesForAdditionalFlags(\n args.additionalFlags,\n args.includeHidden,\n args.config.caseStyle,\n args.config.useAliasInUsageLine\n )) {\n yield ` ${prefix} ${line}`;\n }\n yield \"\";\n yield fullDescription ?? brief;\n if (args.aliases && args.aliases.length > 0) {\n const aliasPrefix = args.prefix.slice(0, -1).join(\" \");\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.aliases}\\x1B[24m` : headers.aliases;\n for (const alias of args.aliases) {\n yield ` ${aliasPrefix} ${alias}`;\n }\n }\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.flags}\\x1B[24m` : headers.flags;\n for (const line of formatDocumentationForFlagParameters(parameters.flags ?? {}, parameters.aliases ?? {}, args)) {\n yield ` ${line}`;\n }\n const positional = parameters.positional ?? { kind: \"tuple\", parameters: [] };\n if (positional.kind === \"array\" || positional.parameters.length > 0) {\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.arguments}\\x1B[24m` : headers.arguments;\n for (const line of formatDocumentationForPositionalParameters(positional, args)) {\n yield ` ${line}`;\n }\n }\n}\n\n// src/routing/command/builder.ts\nfunction* asNegationFlagNames(flagName) {\n yield `no-${convertCamelCaseToKebabCase(flagName)}`;\n yield `no${flagName[0].toUpperCase()}${flagName.slice(1)}`;\n}\nfunction checkForNegationCollisions(flags) {\n const flagsAllowingNegation = Object.entries(flags).filter(([, flag]) => flag.kind === \"boolean\" && !flag.optional);\n for (const [internalFlagName] of flagsAllowingNegation) {\n for (const negatedFlagName of asNegationFlagNames(internalFlagName)) {\n if (negatedFlagName in flags) {\n throw new InternalError(\n `Unable to allow negation for --${internalFlagName} as it conflicts with --${negatedFlagName}`\n );\n }\n }\n }\n}\nfunction checkForInvalidVariadicSeparators(flags) {\n for (const [internalFlagName, flag] of Object.entries(flags)) {\n if (\"variadic\" in flag && typeof flag.variadic === \"string\") {\n if (flag.variadic.length < 1) {\n throw new InternalError(\n `Unable to use \"\" as variadic separator for --${internalFlagName} as it is empty`\n );\n }\n if (/\\s/.test(flag.variadic)) {\n throw new InternalError(\n `Unable to use \"${flag.variadic}\" as variadic separator for --${internalFlagName} as it contains whitespace`\n );\n }\n }\n }\n}\nfunction buildCommand(builderArgs) {\n const { flags = {}, aliases = {} } = builderArgs.parameters;\n checkForNegationCollisions(flags);\n checkForInvalidVariadicSeparators(flags);\n let loader;\n if (\"func\" in builderArgs) {\n loader = async () => builderArgs.func;\n } else {\n loader = builderArgs.loader;\n }\n return {\n kind: CommandSymbol,\n loader,\n parameters: builderArgs.parameters,\n get brief() {\n return builderArgs.docs.brief;\n },\n /* v8 ignore next -- @preserve */\n get fullDescription() {\n return builderArgs.docs.fullDescription;\n },\n formatUsageLine: (args) => {\n return formatUsageLineForParameters(builderArgs.parameters, args);\n },\n formatHelp: (args) => {\n const lines = [\n ...generateCommandHelpLines(builderArgs.parameters, builderArgs.docs, args)\n ];\n const text = lines.join(\"\\n\");\n return text + \"\\n\";\n },\n usesFlag: (flagName, caseStyle) => {\n if (caseStyle === \"allow-kebab-for-camel\") {\n const kebabCase = convertCamelCaseToKebabCase(flagName);\n if (kebabCase in flags) {\n return true;\n }\n }\n return Boolean(flagName in flags || flagName in aliases);\n }\n };\n}\n\n// src/routing/route-map/documentation.ts\nfunction* generateRouteMapHelpLines(routes, docs, args) {\n const { brief, fullDescription, hideRoute } = docs;\n const { headers } = args.text;\n yield args.ansiColor ? `\\x1B[4m${headers.usage}\\x1B[24m` : headers.usage;\n for (const [name, route] of Object.entries(routes)) {\n if (!hideRoute || !hideRoute[name] || args.includeHidden) {\n const externalRouteName = args.config.caseStyle === \"convert-camel-to-kebab\" ? convertCamelCaseToKebabCase(name) : name;\n yield ` ${route.formatUsageLine({\n ...args,\n prefix: [...args.prefix, externalRouteName]\n })}`;\n }\n }\n const prefix = args.prefix.join(\" \");\n for (const line of generateUsageLinesForAdditionalFlags(\n args.additionalFlags,\n args.includeHidden,\n args.config.caseStyle,\n args.config.useAliasInUsageLine\n )) {\n yield ` ${prefix} ${line}`;\n }\n yield \"\";\n yield fullDescription ?? brief;\n if (args.aliases && args.aliases.length > 0) {\n const aliasPrefix = args.prefix.slice(0, -1).join(\" \");\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.aliases}\\x1B[24m` : headers.aliases;\n for (const alias of args.aliases) {\n yield ` ${aliasPrefix} ${alias}`;\n }\n }\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.flags}\\x1B[24m` : headers.flags;\n for (const line of formatDocumentationForFlagParameters({}, {}, args)) {\n yield ` ${line}`;\n }\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.commands}\\x1B[24m` : headers.commands;\n const visibleRoutes = Object.entries(routes).filter(\n ([name]) => !hideRoute || !hideRoute[name] || args.includeHidden\n );\n const rows = visibleRoutes.map(([internalRouteName, route]) => {\n const externalRouteName = formatForDisplay(internalRouteName, args.config.caseStyle);\n return {\n routeName: externalRouteName,\n brief: route.brief,\n hidden: hideRoute && hideRoute[internalRouteName]\n };\n });\n const formattedRows = formatRowsWithColumns(\n rows.map((row) => {\n if (!args.ansiColor) {\n return [row.routeName, row.brief];\n }\n return [\n row.hidden ? `\\x1B[2m${row.routeName}\\x1B[22m` : `\\x1B[1m${row.routeName}\\x1B[22m`,\n row.hidden ? `\\x1B[2;3m${row.brief}\\x1B[22;23m` : `\\x1B[;;3m${row.brief}\\x1B[;;;23m`\n ];\n }),\n [\" \"]\n );\n for (const line of formattedRows) {\n yield ` ${line}`;\n }\n}\n\n// src/routing/route-map/builder.ts\nfunction buildRouteMap({\n routes,\n defaultCommand: defaultCommandRoute,\n docs,\n aliases\n}) {\n if (Object.entries(routes).length === 0) {\n throw new InternalError(\"Route map must contain at least one route\");\n }\n const activeAliases = aliases ?? {};\n const aliasesByRoute = /* @__PURE__ */ new Map();\n for (const [alias, routeName] of Object.entries(activeAliases)) {\n if (alias in routes) {\n throw new InternalError(`Cannot use '${alias}' as an alias when a route with that name already exists`);\n }\n const routeAliases = aliasesByRoute.get(routeName) ?? [];\n aliasesByRoute.set(routeName, [...routeAliases, alias]);\n }\n const defaultCommand = defaultCommandRoute ? routes[defaultCommandRoute] : void 0;\n if (defaultCommand && defaultCommand.kind === RouteMapSymbol) {\n throw new InternalError(\n `Cannot use '${defaultCommandRoute}' as the default command because it is not a Command`\n );\n }\n const resolveRouteName = (input) => {\n if (input in activeAliases) {\n return activeAliases[input];\n } else if (input in routes) {\n return input;\n }\n };\n return {\n kind: RouteMapSymbol,\n get brief() {\n return docs.brief;\n },\n /* v8 ignore next -- @preserve */\n get fullDescription() {\n return docs.fullDescription;\n },\n formatUsageLine(args) {\n const routeNames = this.getAllEntries().filter((entry) => !entry.hidden).map((entry) => entry.name[args.config.caseStyle]);\n return `${args.prefix.join(\" \")} ${routeNames.join(\"|\")} ...`;\n },\n formatHelp: (args) => {\n const lines = [...generateRouteMapHelpLines(routes, docs, args)];\n const text = lines.join(\"\\n\");\n return text + \"\\n\";\n },\n getDefaultCommand: () => {\n return defaultCommand;\n },\n getOtherAliasesForInput: (input, caseStyle) => {\n if (defaultCommandRoute) {\n if (input === defaultCommandRoute) {\n return {\n original: [\"\"],\n \"convert-camel-to-kebab\": [\"\"]\n };\n }\n if (input === \"\") {\n return {\n original: [defaultCommandRoute],\n \"convert-camel-to-kebab\": [defaultCommandRoute]\n };\n }\n }\n const camelInput = convertKebabCaseToCamelCase(input);\n let routeName = resolveRouteName(input);\n if (!routeName && caseStyle === \"allow-kebab-for-camel\") {\n routeName = resolveRouteName(camelInput);\n }\n if (!routeName) {\n return {\n original: [],\n \"convert-camel-to-kebab\": []\n };\n }\n const otherAliases = [routeName, ...aliasesByRoute.get(routeName) ?? []].filter(\n (alias) => alias !== input && alias !== camelInput\n );\n return {\n original: otherAliases,\n \"convert-camel-to-kebab\": otherAliases.map(convertCamelCaseToKebabCase)\n };\n },\n getRoutingTargetForInput: (input) => {\n const routeName = input in activeAliases ? activeAliases[input] : input;\n return routes[routeName];\n },\n getAllEntries() {\n const hiddenRoutes = docs.hideRoute;\n return Object.entries(routes).map(([originalRouteName, target]) => {\n return {\n name: {\n original: originalRouteName,\n \"convert-camel-to-kebab\": convertCamelCaseToKebabCase(originalRouteName)\n },\n target,\n aliases: aliasesByRoute.get(originalRouteName) ?? [],\n hidden: hiddenRoutes?.[originalRouteName] ?? false\n };\n });\n }\n };\n}\n\n// src/index.ts\nasync function run(app, inputs, context) {\n const exitCode = await runApplication(app, inputs, context);\n context.process.exitCode ??= exitCode;\n}\nexport {\n AliasNotFoundError,\n ArgumentParseError,\n ArgumentScannerError,\n EnumValidationError,\n ExitCode,\n FlagNotFoundError,\n InvalidNegatedFlagSyntaxError,\n UnexpectedFlagError,\n UnexpectedPositionalError,\n UnsatisfiedFlagError,\n UnsatisfiedPositionalError,\n booleanParser,\n buildApplication,\n buildChoiceParser,\n buildCommand,\n buildRouteMap,\n formatMessageForArgumentScannerError,\n generateHelpTextForAllCommands,\n help,\n looseBooleanParser,\n numberParser,\n proposeCompletionsForApplication as proposeCompletions,\n run,\n text_en,\n version\n};\n/* v8 ignore next -- @preserve */\n/* v8 ignore if -- @preserve */\n/* v8 ignore else -- @preserve */\n","import { realpath } from \"node:fs/promises\";\nimport { isIP } from \"node:net\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { createJiti } from \"jiti\";\nimport { z } from \"zod\";\nimport { homedir } from \"node:os\";\n//#region ../lib/dist/index.js\nconst durationPattern = /^([1-9]\\d*)(ms|s|m|h|d)$/;\nconst millisecondsByUnit = {\n\td: 1440 * 60 * 1e3,\n\th: 3600 * 1e3,\n\tm: 60 * 1e3,\n\tms: 1,\n\ts: 1e3\n};\nconst durationToMilliseconds = (duration) => {\n\tconst match = durationPattern.exec(duration);\n\tif (!match) return;\n\tconst unit = match[2];\n\tconst milliseconds = Number(match[1]) * millisecondsByUnit[unit];\n\treturn Number.isSafeInteger(milliseconds) ? milliseconds : void 0;\n};\nconst aiContextSnippets = [\"package-source\", \"tech-stack-recommendations\"];\n//#endregion\n//#region src/node/config.ts\nconst zodTypeSchema = z.custom((value) => value instanceof z.ZodType, \"Expected a Zod schema\");\nconst functionSchema = z.custom((value) => typeof value === \"function\", \"Expected a function\");\nconst contractRuntimeSchema = z.object({\n\tinput: zodTypeSchema,\n\toutput: zodTypeSchema\n});\nconst operationRuntimeSchema = z.object({\n\thandle: functionSchema,\n\tinput: zodTypeSchema,\n\toutput: zodTypeSchema\n});\nconst streamHandlerRuntimeSchema = z.object({\n\tcontract: z.object({\n\t\tclientMessage: zodTypeSchema,\n\t\tinput: zodTypeSchema,\n\t\tserverMessage: zodTypeSchema\n\t}),\n\topen: functionSchema\n});\nconst resourceDefinitionRuntimeSchema = z.discriminatedUnion(\"kind\", [\n\tz.object({\n\t\tcontract: contractRuntimeSchema,\n\t\tkind: z.literal(\"query\"),\n\t\tread: functionSchema\n\t}),\n\tz.object({\n\t\tcontract: contractRuntimeSchema,\n\t\tkind: z.literal(\"subscription\"),\n\t\tread: functionSchema,\n\t\tsubscribe: functionSchema\n\t}),\n\tz.object({\n\t\tcombine: functionSchema,\n\t\tcontract: contractRuntimeSchema,\n\t\tdependencies: z.record(z.string(), z.string()),\n\t\tkind: z.literal(\"derived\")\n\t})\n]);\nconst authDurationSchema = z.string().regex(/^[1-9]\\d*[mhd]$/, \"Expected a positive duration such as 30d\").refine((value) => durationToMilliseconds(value) !== void 0, \"Duration is too large\");\nconst isLoopbackHostname = (hostname) => hostname === \"localhost\" || hostname === \"[::1]\" || /^127(?:\\.\\d{1,3}){3}$/.test(hostname);\nconst exactOriginSchema = z.url().refine((value) => new URL(value).origin === value, \"Expected an origin\").refine((value) => {\n\tconst url = new URL(value);\n\treturn url.protocol === \"https:\" || url.protocol === \"http:\" && isLoopbackHostname(url.hostname);\n}, \"Non-loopback Overmux origins must use HTTPS\");\nconst loopbackPeerSchema = z.string().refine((value) => isIP(value) !== 0 && (value === \"::1\" || value.startsWith(\"127.\")), \"Expected a loopback IP address\");\nconst authConfigRuntimeSchema = z.object({\n\tmode: z.literal(\"cli-login\"),\n\torigins: z.array(exactOriginSchema).min(1).refine((origins) => new Set(origins).size === origins.length, \"Expected unique origins\").optional(),\n\tsessionLifetime: z.union([z.literal(\"never\"), authDurationSchema]).default(\"never\"),\n\ttrustedProxyPeer: loopbackPeerSchema.optional()\n}).strict();\nconst serverConfigRuntimeSchema = z.object({\n\thost: z.string().min(1).optional(),\n\tlogFile: z.string().min(1).optional(),\n\tport: z.number().int().min(1).max(65535).optional(),\n\tproductionWebAssetsDir: z.string().min(1).optional(),\n\twatch: z.boolean().optional()\n});\nconst serverDefinitionRuntimeSchema = z.object({\n\toperations: z.record(z.string(), operationRuntimeSchema).optional(),\n\tresources: z.record(z.string(), resourceDefinitionRuntimeSchema),\n\tstreams: z.record(z.string(), streamHandlerRuntimeSchema).optional()\n});\nconst configDefinitionRuntimeSchema = serverConfigRuntimeSchema.extend({\n\taiContextSnippets: z.array(z.enum(aiContextSnippets)).optional(),\n\tauth: authConfigRuntimeSchema,\n\tdebug: z.boolean().optional(),\n\tserver: serverDefinitionRuntimeSchema,\n\tvite: z.string().min(1).optional()\n});\nconst resolveLogicalPath = async (path) => {\n\tconst logicalPath = resolve(path);\n\treturn {\n\t\tlogicalPath,\n\t\trealPath: await realpath(logicalPath)\n\t};\n};\nconst resolveOvermuxConfigPaths = async (configPath) => {\n\tconst { logicalPath, realPath } = await resolveLogicalPath(configPath);\n\treturn {\n\t\tlogicalApplicationRoot: dirname(logicalPath),\n\t\tlogicalConfigPath: logicalPath,\n\t\trealApplicationRoot: dirname(realPath),\n\t\trealConfigPath: realPath\n\t};\n};\nconst unwrapDefaultExport = (module) => {\n\tif (typeof module === \"object\" && module !== null && \"default\" in module) return module.default;\n\treturn module;\n};\nconst loadOvermuxConfig = async ({ aliases = {}, configPath }) => {\n\tconst paths = await resolveOvermuxConfigPaths(configPath);\n\tconst module = await createJiti(paths.logicalConfigPath, {\n\t\talias: aliases,\n\t\tfsCache: true,\n\t\tjsx: {\n\t\t\timportSource: \"react\",\n\t\t\truntime: \"automatic\"\n\t\t},\n\t\tmoduleCache: false,\n\t\tsourceMaps: true,\n\t\ttsconfigPaths: true\n\t}).import(paths.logicalConfigPath);\n\treturn {\n\t\tconfig: configDefinitionRuntimeSchema.parse(unwrapDefaultExport(module)),\n\t\tpaths\n\t};\n};\n//#endregion\n//#region src/node/paths.ts\nconst xdgDirectory = (configured, fallback) => configured && isAbsolute(configured) ? configured : fallback;\nconst overmuxDirectory = (root) => join(root, \"overmux\");\nconst getOvermuxPaths = ({ environment = process.env, homeDir = homedir(), xdgCacheHome = environment.XDG_CACHE_HOME, xdgConfigHome = environment.XDG_CONFIG_HOME, xdgDataHome = environment.XDG_DATA_HOME, xdgRuntimeDir = environment.XDG_RUNTIME_DIR, xdgStateHome = environment.XDG_STATE_HOME } = {}) => {\n\tif (!isAbsolute(homeDir)) throw new TypeError(\"The home directory must be absolute.\");\n\tconst runtimeDir = xdgRuntimeDir && isAbsolute(xdgRuntimeDir) ? overmuxDirectory(xdgRuntimeDir) : void 0;\n\treturn {\n\t\tcacheDir: overmuxDirectory(xdgDirectory(xdgCacheHome, join(homeDir, \".cache\"))),\n\t\tconfigDir: overmuxDirectory(xdgDirectory(xdgConfigHome, join(homeDir, \".config\"))),\n\t\tdataDir: overmuxDirectory(xdgDirectory(xdgDataHome, join(homeDir, \".local\", \"share\"))),\n\t\t...runtimeDir ? { runtimeDir } : {},\n\t\tstateDir: overmuxDirectory(xdgDirectory(xdgStateHome, join(homeDir, \".local\", \"state\")))\n\t};\n};\n//#endregion\nexport { authConfigRuntimeSchema, authDurationSchema, configDefinitionRuntimeSchema, getOvermuxPaths, loadOvermuxConfig, resolveLogicalPath, resolveOvermuxConfigPaths, serverConfigRuntimeSchema, serverDefinitionRuntimeSchema };\n\n//# sourceMappingURL=index.js.map","import { z } from \"zod\";\n//#region src/ai-context.ts\nconst packageSourceSnippet = \"package-source\";\nconst techStackRecommendationsSnippet = \"tech-stack-recommendations\";\nconst aiContextSnippets = [packageSourceSnippet, techStackRecommendationsSnippet];\n//#endregion\n//#region src/hosted-routes.ts\nconst overmuxSettingsPath = \"/_overmux/settings\";\nconst overmuxLogoutPath = \"/_overmux/logout\";\nconst reservedPathPrefixes = [\n\t\"/_overmux\",\n\t\"/api\",\n\t\"/login\"\n];\nconst returnToBase = \"https://overmux.invalid\";\nconst isReservedPath = (pathname) => reservedPathPrefixes.some((prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`));\nconst resolveOvermuxReturnTo = (candidate) => {\n\tif (!candidate?.startsWith(\"/\") || candidate.startsWith(\"//\")) return \"/\";\n\ttry {\n\t\tconst url = new URL(candidate, returnToBase);\n\t\tconst decodedPathname = decodeURIComponent(url.pathname);\n\t\tif (url.origin !== returnToBase || isReservedPath(decodedPathname)) return \"/\";\n\t\treturn `${url.pathname}${url.search}${url.hash}`;\n\t} catch {\n\t\treturn \"/\";\n\t}\n};\nconst createOvermuxSettingsPath = (returnTo) => {\n\tconst safeReturnTo = resolveOvermuxReturnTo(returnTo);\n\tif (safeReturnTo === \"/\") return overmuxSettingsPath;\n\tconst search = new URLSearchParams({ returnTo: safeReturnTo });\n\treturn `${overmuxSettingsPath}?${search.toString()}`;\n};\n//#endregion\n//#region src/notifications.ts\nconst safeRelativeNotificationLink = (link) => {\n\tlet decoded;\n\ttry {\n\t\tdecoded = decodeURIComponent(link);\n\t} catch {\n\t\treturn false;\n\t}\n\treturn !decoded.startsWith(\"//\") && !decoded.includes(\"\\\\\") && ![...decoded].some((character) => {\n\t\tconst codePoint = character.codePointAt(0) ?? 0;\n\t\treturn codePoint < 32 || codePoint === 127;\n\t});\n};\nconst notificationLinkSchema = z.union([z.string().max(4096).startsWith(\"/\").refine(safeRelativeNotificationLink), z.string().max(4096).url().refine((link) => {\n\tif (!URL.canParse(link)) return false;\n\tconst url = new URL(link);\n\treturn [\"http:\", \"https:\"].includes(url.protocol) && !url.username && !url.password;\n})]);\nconst notificationSchema = z.object({\n\tbody: z.string().max(4096).optional(),\n\topen: z.object({ link: notificationLinkSchema }).strict().optional(),\n\ttitle: z.string().min(1).max(4096)\n}).strict();\n//#endregion\nexport { aiContextSnippets, createOvermuxSettingsPath, notificationLinkSchema, notificationSchema, overmuxLogoutPath, overmuxSettingsPath, packageSourceSnippet, resolveOvermuxReturnTo, techStackRecommendationsSnippet };\n\n//# sourceMappingURL=index.js.map","import {\n packageSourceSnippet,\n techStackRecommendationsSnippet,\n type AiContextSnippet,\n} from \"@overmux/shared\";\n\nexport {\n packageSourceSnippet,\n techStackRecommendationsSnippet,\n type AiContextSnippet,\n};\nexport type AiContextSnippetDefinition = readonly AiContextSnippet[];\n\nexport const coreAiContextSnippets = [\n packageSourceSnippet,\n] as const satisfies AiContextSnippetDefinition;\nexport const defaultAiContextSnippets = [\n ...coreAiContextSnippets,\n techStackRecommendationsSnippet,\n] as const satisfies AiContextSnippetDefinition;\n\nconst packageSourceSnippetContent = `Overmux ships with documentation and TypeScript source.\n\nRun \\`overmux docs\\` to find the installed documentation and source for the overmux cli.\n\nE.g. \\`node_modules/overmux\\` and \\`node_modules/@overmux/xterm\\`.\n\nInspect these files so guidance matches the versions used by the application.`;\n\nconst techStackRecommendationsSnippetContent = `Prefer pnpm as the package manager, TanStack Router for routing, shadcn/ui for UI components, and Zod for schemas and runtime validation. Follow the application's established stack when it already differs.`;\n\nconst aiContextContentBySnippet: Record<AiContextSnippet, string> = {\n [packageSourceSnippet]: packageSourceSnippetContent,\n [techStackRecommendationsSnippet]: techStackRecommendationsSnippetContent,\n};\n\nexport const composeAiContext = (snippets: AiContextSnippetDefinition) =>\n snippets.length === 0\n ? \"\"\n : `${snippets\n .map(\n (snippet) => `## ${snippet}\\n\\n${aiContextContentBySnippet[snippet]}`,\n )\n .join(\"\\n\\n\")}\\n`;\n","import {\n getOvermuxPaths,\n type GetOvermuxPathsOptions,\n type OvermuxPaths,\n} from \"@overmux/shared/node\";\nimport { join } from \"node:path\";\n\nexport { getOvermuxPaths };\nexport type { GetOvermuxPathsOptions, OvermuxPaths };\n\nexport const getDefaultConfigPath = (\n options: Pick<GetOvermuxPathsOptions, \"homeDir\" | \"xdgConfigHome\"> = {},\n) => join(getOvermuxPaths(options).configDir, \"overmux.config.ts\");\n","import { loadOvermuxConfig } from \"@overmux/shared/node\";\nimport { buildCommand, buildRouteMap } from \"@stricli/core\";\n\nimport {\n composeAiContext,\n defaultAiContextSnippets,\n} from \"../../../public/ai-context\";\nimport { getDefaultConfigPath } from \"../../server/paths\";\n\ntype AiContextFlags = { config: string };\n\nconst printAiContext = async (\n flags: AiContextFlags,\n process: NodeJS.Process,\n) => {\n const { config } = await loadOvermuxConfig({ configPath: flags.config });\n process.stdout.write(\n composeAiContext(config.aiContextSnippets ?? defaultAiContextSnippets),\n );\n};\n\nconst createAiContextCommand = (process: NodeJS.Process) =>\n buildCommand({\n func: (flags: AiContextFlags) => printAiContext(flags, process),\n parameters: {\n aliases: { c: \"config\" },\n flags: {\n config: {\n brief: \"Configuration file\",\n default: getDefaultConfigPath(),\n kind: \"parsed\",\n parse: String,\n placeholder: \"path\",\n },\n },\n },\n docs: { brief: \"Print the configured Overmux AI context\" },\n });\n\nexport const createAiRoute = (process: NodeJS.Process) =>\n buildRouteMap({\n docs: { brief: \"Print Overmux AI context\" },\n routes: { context: createAiContextCommand(process) },\n });\n","/*\n * Provides private, schema-validated JSON files with atomic persistence: directories and files\n * use owner-only modes; writes fsync a temporary file before rename replacement or hard-link\n * exclusive publication so concurrent first creation safely converges.\n */\nimport { randomUUID } from \"node:crypto\";\nimport {\n chmod,\n link,\n mkdir,\n open,\n readFile,\n rename,\n rm,\n} from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport type { z } from \"zod\";\n\nconst missingFile = (cause: unknown) =>\n (cause as NodeJS.ErrnoException).code === \"ENOENT\";\n\nconst preparePrivateDirectory = async (path: string) => {\n await mkdir(path, { mode: 0o700, recursive: true });\n await chmod(path, 0o700);\n};\n\nconst writeTemporaryPrivateJson = async (path: string, value: unknown) => {\n await preparePrivateDirectory(dirname(path));\n const temporaryPath = `${path}.${process.pid}.${randomUUID()}`;\n try {\n const handle = await open(temporaryPath, \"wx\", 0o600);\n try {\n await handle.writeFile(`${JSON.stringify(value)}\\n`);\n await handle.sync();\n } finally {\n await handle.close();\n }\n return temporaryPath;\n } catch (cause) {\n await rm(temporaryPath, { force: true });\n throw cause;\n }\n};\n\nexport const readPrivateJson = async <TSchema extends z.ZodType>(\n path: string,\n schema: TSchema,\n): Promise<z.output<TSchema> | undefined> => {\n try {\n const contents = await readFile(path, \"utf8\");\n await chmod(path, 0o600);\n return schema.parse(JSON.parse(contents));\n } catch (cause) {\n if (missingFile(cause)) {\n return undefined;\n }\n throw cause;\n }\n};\n\nexport const replacePrivateJsonAtomically = async (\n path: string,\n value: unknown,\n) => {\n const temporaryPath = await writeTemporaryPrivateJson(path, value);\n try {\n await rename(temporaryPath, path);\n } catch (cause) {\n await rm(temporaryPath, { force: true });\n throw cause;\n }\n};\n\nexport const createPrivateJsonExclusively = async (\n path: string,\n value: unknown,\n) => {\n const temporaryPath = await writeTemporaryPrivateJson(path, value);\n try {\n await link(temporaryPath, path);\n } finally {\n await rm(temporaryPath, { force: true });\n }\n};\n","import { createHash, randomBytes } from \"node:crypto\";\nimport { chmod, mkdir, readdir, rm } from \"node:fs/promises\";\nimport { createConnection, createServer, type Socket } from \"node:net\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { z } from \"zod\";\n\nimport { getOvermuxPaths } from \"../paths\";\nimport {\n readPrivateJson,\n replacePrivateJsonAtomically,\n} from \"../notifications/private-json-file\";\nimport type { AuthService } from \"./auth-service\";\n\nconst maxControlMessageBytes = 16_384;\n\nconst controlRequestSchema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"ping\") }).strict(),\n z.object({ type: z.literal(\"create-login\") }).strict(),\n z.object({ type: z.literal(\"issue-bearer\") }).strict(),\n z.object({ type: z.literal(\"list-sessions\") }).strict(),\n z.object({ id: z.string(), type: z.literal(\"revoke-session\") }).strict(),\n z.object({ type: z.literal(\"revoke-all\") }).strict(),\n]);\n\nconst loginGrantSchema = z\n .object({\n code: z.string(),\n expiresAt: z.string(),\n id: z.string(),\n urls: z.array(z.string()),\n })\n .strict();\n\nconst sessionSchema = z\n .object({\n createdAt: z.string(),\n expiresAt: z.string().optional(),\n id: z.string(),\n lastSeenAt: z.string(),\n origin: z.string().optional(),\n revokedAt: z.string().optional(),\n })\n .strict();\n\nconst controlResponseSchemas = {\n \"create-login\": z\n .object({ login: loginGrantSchema, ok: z.literal(true) })\n .strict(),\n \"issue-bearer\": z\n .object({\n bearer: z.object({ expiresAt: z.string(), token: z.string() }).strict(),\n ok: z.literal(true),\n })\n .strict(),\n \"list-sessions\": z\n .object({ ok: z.literal(true), sessions: z.array(sessionSchema) })\n .strict(),\n ping: z.object({ ok: z.literal(true) }).strict(),\n \"revoke-all\": z\n .object({ count: z.number().int().nonnegative(), ok: z.literal(true) })\n .strict(),\n \"revoke-session\": z\n .object({ ok: z.literal(true), revoked: z.boolean() })\n .strict(),\n};\n\nconst controlResponseEnvelopeSchema = z\n .object({ error: z.unknown().optional(), ok: z.unknown() })\n .passthrough();\n\nconst registrationSchema = z.object({\n apiUrl: z.string().url(),\n controlSocket: z.string(),\n id: z.string(),\n pid: z.number().int().positive(),\n port: z.number().int().min(1).max(65_535),\n url: z.string().url(),\n});\n\nexport type InstanceRegistration = z.infer<typeof registrationSchema>;\nexport type ControlRequest = z.infer<typeof controlRequestSchema>;\nexport type InstanceControl = { close: () => Promise<void> };\n\ntype ControlResponseByType = {\n [Type in keyof typeof controlResponseSchemas]: z.infer<\n (typeof controlResponseSchemas)[Type]\n >;\n};\n\nconst runtimeDirectory = () => {\n const paths = getOvermuxPaths();\n const preferred = paths.runtimeDir ?? join(paths.stateDir, \"runtime\");\n if (Buffer.byteLength(preferred) <= 80) {\n return preferred;\n }\n const suffix = createHash(\"sha256\")\n .update(preferred)\n .digest(\"hex\")\n .slice(0, 12);\n return join(tmpdir(), `overmux-${process.getuid?.() ?? \"user\"}-${suffix}`);\n};\n\nconst readNewlineFrame = ({\n maximumBytes,\n socket,\n timeout,\n}: {\n maximumBytes: number;\n socket: Socket;\n timeout?: number;\n}): Promise<Buffer> =>\n new Promise((resolve, reject) => {\n let buffer = Buffer.alloc(0);\n let timer: NodeJS.Timeout | undefined;\n\n const cleanup = () => {\n socket.off(\"data\", onData);\n socket.off(\"end\", onEnd);\n socket.off(\"error\", onError);\n if (timer) {\n clearTimeout(timer);\n }\n };\n const fail = (cause: Error) => {\n cleanup();\n reject(cause);\n };\n const onData = (chunk: Buffer) => {\n buffer = Buffer.concat([buffer, chunk]);\n if (buffer.length > maximumBytes) {\n fail(new Error(\"Control message is too large\"));\n return;\n }\n const newline = buffer.indexOf(0x0a);\n if (newline < 0) {\n return;\n }\n cleanup();\n resolve(buffer.subarray(0, newline));\n };\n const onEnd = () =>\n fail(new Error(\"Control socket ended before a complete frame\"));\n const onError = (cause: Error) => fail(cause);\n\n if (socket.errored) {\n fail(socket.errored);\n } else if (socket.readableEnded || socket.destroyed) {\n fail(new Error(\"Control socket is already closed\"));\n } else {\n socket.on(\"data\", onData);\n socket.once(\"end\", onEnd);\n socket.once(\"error\", onError);\n if (timeout !== undefined) {\n timer = setTimeout(() => {\n socket.destroy();\n fail(new Error(\"Control request timed out\"));\n }, timeout);\n }\n }\n });\n\nconst writeResponse = (socket: Socket, response: unknown) => {\n socket.end(`${JSON.stringify(response)}\\n`);\n};\n\nconst handleRequest = async (auth: AuthService, request: ControlRequest) => {\n if (request.type === \"ping\") {\n return { ok: true };\n }\n if (request.type === \"create-login\") {\n return { login: await auth.createLoginGrant(), ok: true };\n }\n if (request.type === \"issue-bearer\") {\n return { bearer: await auth.issueLocalBearer(), ok: true };\n }\n if (request.type === \"list-sessions\") {\n return { ok: true, sessions: await auth.listSessions() };\n }\n if (request.type === \"revoke-session\") {\n return { ok: true, revoked: await auth.revokeSession(request.id) };\n }\n return { count: await auth.revokeAllSessions(), ok: true };\n};\n\nconst handleConnection = async ({\n auth,\n socket,\n}: {\n auth: AuthService;\n socket: Socket;\n}) => {\n try {\n const frame = await readNewlineFrame({\n maximumBytes: maxControlMessageBytes,\n socket,\n });\n const request = controlRequestSchema.parse(JSON.parse(frame.toString()));\n writeResponse(socket, await handleRequest(auth, request));\n } catch (cause) {\n writeResponse(socket, {\n error: cause instanceof Error ? cause.message : \"Invalid control request\",\n ok: false,\n });\n }\n};\n\n// Instance control is the private, same-user administration channel for a running\n// server. It bootstraps browser login grants and short-lived CLI bearers without\n// exposing those privileged operations over HTTP. The owner-only runtime\n// directory, registration file, and Unix socket make OS permissions the root of\n// trust. This boundary intentionally does not defend against another process\n// already running as the same OS user.\nexport const startInstanceControl = async ({\n auth,\n apiUrl,\n port,\n url,\n}: {\n auth: AuthService;\n apiUrl: string;\n port: number;\n url: string;\n}): Promise<InstanceControl> => {\n const directory = runtimeDirectory();\n await mkdir(directory, { mode: 0o700, recursive: true });\n await chmod(directory, 0o700);\n const id = randomBytes(8).toString(\"hex\");\n const socketPath = join(directory, `${id}.sock`);\n const registrationPath = join(directory, `${id}.json`);\n const sockets = new Set<Socket>();\n const server = createServer((socket) => {\n sockets.add(socket);\n socket.once(\"close\", () => sockets.delete(socket));\n void handleConnection({ auth, socket });\n });\n const close = async () => {\n sockets.forEach((socket) => socket.destroy());\n try {\n await new Promise<void>((resolve, reject) =>\n server.close((cause) => (cause ? reject(cause) : resolve())),\n );\n } finally {\n await Promise.all([\n rm(socketPath, { force: true }),\n rm(registrationPath, { force: true }),\n ]);\n }\n };\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(socketPath, () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n try {\n await chmod(socketPath, 0o600);\n await replacePrivateJsonAtomically(registrationPath, {\n apiUrl,\n controlSocket: socketPath,\n id,\n pid: process.pid,\n port,\n url,\n });\n } catch (cause) {\n await close().catch(() => undefined);\n throw cause;\n }\n\n return { close };\n};\n\nconst processIsLive = (pid: number) => {\n try {\n process.kill(pid, 0);\n return true;\n } catch (cause) {\n return (cause as NodeJS.ErrnoException).code === \"EPERM\";\n }\n};\n\n// Finds the sole responsive local server, optionally filtered by port.\nexport const discoverInstance = async (\n port?: number,\n): Promise<InstanceRegistration> => {\n const directory = runtimeDirectory();\n let names: string[];\n try {\n names = await readdir(directory);\n } catch (cause) {\n if ((cause as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(\"No running Overmux server was found\");\n }\n throw cause;\n }\n const candidates = (\n await Promise.all(\n names\n .filter((name) => name.endsWith(\".json\"))\n .map((name) =>\n readPrivateJson(join(directory, name), registrationSchema).catch(\n () => undefined,\n ),\n ),\n )\n ).filter((registration): registration is InstanceRegistration =>\n Boolean(\n registration &&\n processIsLive(registration.pid) &&\n (port === undefined || registration.port === port),\n ),\n );\n const registrations = (\n await Promise.all(\n candidates.map(async (registration) => {\n try {\n await sendControlRequest(registration, { type: \"ping\" });\n return registration;\n } catch {\n return undefined;\n }\n }),\n )\n ).filter(\n (registration): registration is InstanceRegistration =>\n registration !== undefined,\n );\n if (registrations.length === 0) {\n throw new Error(\n port === undefined\n ? \"No running Overmux server was found\"\n : `No running Overmux server was found on port ${port}`,\n );\n }\n if (registrations.length > 1) {\n throw new Error(\n \"Multiple Overmux servers are running; use --port to select one\",\n );\n }\n return registrations[0]!;\n};\n\nexport const sendControlRequest = async <Request extends ControlRequest>(\n registration: InstanceRegistration,\n request: Request,\n): Promise<ControlResponseByType[Request[\"type\"]]> => {\n const socket = createConnection(registration.controlSocket);\n let frame: Buffer;\n try {\n const response = readNewlineFrame({\n maximumBytes: maxControlMessageBytes,\n socket,\n timeout: 1_000,\n });\n socket.once(\"connect\", () => socket.write(`${JSON.stringify(request)}\\n`));\n frame = await response;\n } finally {\n socket.destroy();\n }\n const parsed = controlResponseEnvelopeSchema.safeParse(\n JSON.parse(frame.toString()),\n );\n if (!parsed.success) {\n throw new Error(\"Invalid control response\");\n }\n if (parsed.data.ok !== true) {\n throw new Error(\n typeof parsed.data.error === \"string\"\n ? parsed.data.error\n : \"Control request failed\",\n );\n }\n const response = controlResponseSchemas[request.type].safeParse(parsed.data);\n if (!response.success) {\n throw new Error(\"Invalid control response\");\n }\n return response.data as ControlResponseByType[Request[\"type\"]];\n};\n","import type { LoginGrant } from \"../server/auth/auth-service\";\nimport {\n discoverInstance,\n sendControlRequest,\n} from \"../server/auth/instance-control\";\n\ntype CliOutput = Pick<NodeJS.Process, \"stderr\" | \"stdout\">;\n\nexport const issueLoginGrant = async (port?: number) => {\n const instance = await discoverInstance(port);\n const response = await sendControlRequest(instance, { type: \"create-login\" });\n return { login: response.login, port: instance.port };\n};\n\nexport const printLoginFallback = (port: number, { stdout }: CliOutput) => {\n stdout.write(`Login with \\`overmux auth login --port ${port}\\`\\n`);\n};\n\nexport const printLoginGrant = ({\n login,\n output,\n port,\n}: {\n login: LoginGrant;\n output: CliOutput;\n port: number;\n}) => {\n const expiresIn = Math.max(\n 0,\n Math.ceil((Date.parse(login.expiresAt) - Date.now()) / 60_000),\n );\n output.stdout.write(\n [\n `Code: ${login.code}`,\n ...login.urls.map((url) => `Open: ${url}`),\n \"This single-use grant authenticates one origin. Create another grant to authenticate another origin.\",\n \"Enter the code on the login page shown by an unauthenticated Overmux origin.\",\n `Expires at ${login.expiresAt} (in ${expiresIn} minutes).`,\n `Need another grant? Run \\`overmux auth login --port ${port}\\`.`,\n \"\",\n ].join(\"\\n\"),\n );\n output.stderr.write(\n \"The login URL is a temporary credential; avoid sharing terminal output or screenshots.\\n\",\n );\n};\n","import { serverConfigRuntimeSchema } from \"@overmux/shared/node\";\n\nexport const parsePort = (value: string): Error | number => {\n const port = Number(value);\n return serverConfigRuntimeSchema.shape.port.safeParse(port).success\n ? port\n : new Error(`Invalid port: ${value}`);\n};\n","import { buildCommand, buildRouteMap } from \"@stricli/core\";\n\nimport {\n discoverInstance,\n sendControlRequest,\n} from \"../../server/auth/instance-control\";\nimport type { CliCommandContext } from \"../environment\";\nimport { issueLoginGrant, printLoginGrant } from \"../login\";\nimport { parsePort } from \"../parse-port\";\n\ntype InstanceFlags = { port?: string };\ntype JsonInstanceFlags = InstanceFlags & { json?: boolean };\ntype LoginFlags = JsonInstanceFlags & { code?: boolean; url?: boolean };\ntype RevokeFlags = JsonInstanceFlags & { all?: boolean };\n\nconst selectedPort = (portValue?: string) => {\n const port = portValue === undefined ? undefined : parsePort(portValue);\n if (port instanceof Error) {\n throw port;\n }\n return port;\n};\n\nconst selectedInstance = (portValue?: string) =>\n discoverInstance(selectedPort(portValue));\n\nconst printJson = (value: unknown) =>\n process.stdout.write(`${JSON.stringify(value)}\\n`);\n\nconst runLogin = async (flags: LoginFlags, process: NodeJS.Process) => {\n const formats = [flags.code, flags.url, flags.json].filter(Boolean).length;\n if (formats > 1) {\n throw new Error(\"Only set one of: --code, --url, and --json\");\n }\n const issued = await issueLoginGrant(selectedPort(flags.port));\n if (flags.json) {\n process.stdout.write(`${JSON.stringify(issued.login)}\\n`);\n return;\n }\n if (flags.code) {\n process.stdout.write(`${issued.login.code}\\n`);\n return;\n }\n if (flags.url) {\n process.stdout.write(`${issued.login.urls[0]}\\n`);\n return;\n }\n printLoginGrant({ ...issued, output: process });\n};\n\nfunction runLoginCommand(this: CliCommandContext, flags: LoginFlags) {\n return runLogin(flags, this.process);\n}\n\nconst instanceFlags = {\n port: {\n brief: \"Running local server port\",\n kind: \"parsed\" as const,\n optional: true as const,\n parse: String,\n },\n};\n\nexport const authLoginCommand = buildCommand({\n func: runLoginCommand,\n parameters: {\n flags: {\n code: {\n brief: \"Print only the login code\",\n kind: \"boolean\",\n optional: true,\n },\n json: {\n brief: \"Print machine-readable JSON\",\n kind: \"boolean\",\n optional: true,\n },\n ...instanceFlags,\n url: {\n brief: \"Print only the login URL\",\n kind: \"boolean\",\n optional: true,\n },\n },\n positional: { kind: \"tuple\", parameters: [] },\n },\n docs: { brief: \"Create a single-use browser login grant\" },\n});\n\nconst runList = async (flags: JsonInstanceFlags) => {\n const instance = await selectedInstance(flags.port);\n const response = await sendControlRequest(instance, {\n type: \"list-sessions\",\n });\n if (flags.json) {\n printJson({ sessions: response.sessions });\n return;\n }\n if (response.sessions.length === 0) {\n process.stdout.write(\"No active sessions.\\n\");\n return;\n }\n process.stdout.write(\"ID\\tORIGIN\\tCREATED\\tLAST SEEN\\tEXPIRES\\n\");\n response.sessions.forEach((session) => {\n process.stdout.write(\n `${session.id}\\t${session.origin ?? \"unknown\"}\\t${session.createdAt}\\t${session.lastSeenAt}\\t${session.expiresAt ?? \"never\"}\\n`,\n );\n });\n};\n\nexport const authListCommand = buildCommand({\n func: runList,\n parameters: {\n flags: {\n json: {\n brief: \"Print machine-readable JSON\",\n kind: \"boolean\",\n optional: true,\n },\n ...instanceFlags,\n },\n positional: { kind: \"tuple\", parameters: [] },\n },\n docs: { brief: \"List active browser sessions\" },\n});\n\nconst runRevoke = async (flags: RevokeFlags, id?: string) => {\n if (Boolean(id) === Boolean(flags.all)) {\n throw new Error(\"Specify exactly one session ID or --all\");\n }\n const instance = await selectedInstance(flags.port);\n if (id) {\n const response = await sendControlRequest(instance, {\n id,\n type: \"revoke-session\",\n });\n if (!response.revoked) {\n throw new Error(`Session not found: ${id}`);\n }\n if (flags.json) {\n printJson({ revoked: 1 });\n return;\n }\n process.stdout.write(`Revoked session ${id}.\\n`);\n return;\n }\n const response = await sendControlRequest(instance, { type: \"revoke-all\" });\n if (flags.json) {\n printJson({ revoked: response.count });\n return;\n }\n process.stdout.write(\n `Revoked ${response.count} session${response.count === 1 ? \"\" : \"s\"}.\\n`,\n );\n};\n\nexport const authRevokeCommand = buildCommand({\n func: runRevoke,\n parameters: {\n flags: {\n all: {\n brief: \"Revoke every active session\",\n kind: \"boolean\",\n optional: true,\n },\n json: {\n brief: \"Print machine-readable JSON\",\n kind: \"boolean\",\n optional: true,\n },\n ...instanceFlags,\n },\n positional: {\n kind: \"tuple\",\n parameters: [\n {\n brief: \"Session ID\",\n optional: true,\n parse: String,\n placeholder: \"id\",\n },\n ],\n },\n },\n docs: { brief: \"Revoke browser authentication sessions\" },\n});\n\nexport const authRoute = buildRouteMap({\n docs: { brief: \"Manage CLI-issued browser authentication\" },\n routes: {\n list: authListCommand,\n login: authLoginCommand,\n revoke: authRevokeCommand,\n },\n});\n","// Validates browser subscription data exchanged by background-notification delivery.\n// Browser-standard key and endpoint details stay behind this internal boundary.\nimport { z } from \"zod\";\n\nconst deliveryKeySchema = z\n .string()\n .min(1)\n .max(1_024)\n .regex(/^[\\w-]+$/u);\n\nexport const backgroundNotificationSubscriptionSchema = z\n .object({\n endpoint: z\n .url()\n .max(4_096)\n .refine((endpoint) => {\n const url = new URL(endpoint);\n return url.protocol === \"https:\" && !url.username && !url.password;\n }),\n expirationTime: z.number().int().nonnegative().nullable(),\n keys: z\n .object({ auth: deliveryKeySchema, p256dh: deliveryKeySchema })\n .strict(),\n })\n .strict();\n\nexport const backgroundNotificationPublicKeyResponseSchema = z\n .object({ publicKey: deliveryKeySchema })\n .strict();\n\nexport const backgroundNotificationDisableRequestSchema = z\n .object({ endpoint: backgroundNotificationSubscriptionSchema.shape.endpoint })\n .strict();\n\nexport type BackgroundNotificationSubscription = z.infer<\n typeof backgroundNotificationSubscriptionSchema\n>;\n","import { z } from \"zod\";\n\nimport { notificationSchema } from \"../../public/notifications\";\n\n// Compatibility gate, not negotiation: open tabs may still run older client assets.\n// The exact version rejects incompatible runtime manifest and wire formats before later traffic.\nexport const protocolVersion = 9 as const;\n\n// Application-defined WebSocket close codes shared by server and browser transports.\nexport const webSocketCloseCode = {\n authenticationRevoked: 4001,\n authenticationUnavailable: 4002,\n} as const;\n\nexport const runtimeManifestSchema = z.object({\n debug: z.boolean(),\n operations: z.array(z.string().min(1)),\n protocolVersion: z.literal(protocolVersion),\n resources: z.array(z.string().min(1)),\n streams: z.array(z.string().min(1)),\n});\n\nexport const updateAvailableEventSchema = z.object({\n type: z.literal(\"update-available\"),\n});\n\nexport const restartingEventSchema = z.object({\n type: z.literal(\"restarting\"),\n});\n\nexport const serverLifecycleEventSchema = z.discriminatedUnion(\"type\", [\n updateAvailableEventSchema,\n restartingEventSchema,\n]);\n\nexport const notificationEventSchema = z\n .object({\n notification: notificationSchema,\n type: z.literal(\"notification\"),\n })\n .strict();\n\nconst operationIdSchema = z.string().min(1).max(256);\nconst registrationNameSchema = z.string().min(1).max(256);\n\nexport const resourceReadMessageSchema = z.object({\n input: z.unknown().optional(),\n operationId: operationIdSchema,\n resourceName: registrationNameSchema,\n type: z.literal(\"resource-read\"),\n});\n\nexport const resourceSubscribeMessageSchema = z.object({\n input: z.unknown().optional(),\n operationId: operationIdSchema,\n resourceName: registrationNameSchema,\n subscriptionId: operationIdSchema,\n type: z.literal(\"resource-subscribe\"),\n});\n\nexport const resourceUnsubscribeMessageSchema = z.object({\n subscriptionId: operationIdSchema,\n type: z.literal(\"resource-unsubscribe\"),\n});\n\nexport const streamOpenMessageSchema = z.object({\n input: z.unknown().optional(),\n operationId: operationIdSchema,\n streamId: operationIdSchema,\n streamName: registrationNameSchema,\n type: z.literal(\"stream-open\"),\n});\n\nexport const streamMessageSchema = z.object({\n message: z.unknown(),\n streamId: operationIdSchema,\n type: z.literal(\"stream-message\"),\n});\n\nexport const streamCloseMessageSchema = z.object({\n streamId: operationIdSchema,\n type: z.literal(\"stream-close\"),\n});\n\nexport const clientDiagnosticEventSchema = z.object({\n arguments: z.string().max(16_100),\n level: z.enum([\"log\", \"info\", \"warn\", \"error\", \"debug\"]),\n message: z.string().max(4_100),\n stack: z.string().max(8_100).optional(),\n timestamp: z.iso.datetime(),\n type: z.literal(\"client-diagnostic\"),\n url: z.string().max(2_100).optional(),\n});\n\nexport const clientProtocolMessageSchema = z.discriminatedUnion(\"type\", [\n resourceReadMessageSchema,\n resourceSubscribeMessageSchema,\n resourceUnsubscribeMessageSchema,\n streamOpenMessageSchema,\n streamMessageSchema,\n streamCloseMessageSchema,\n clientDiagnosticEventSchema,\n]);\n\nexport const resourceResultMessageSchema = z.object({\n operationId: operationIdSchema,\n output: z.unknown(),\n type: z.literal(\"resource-result\"),\n});\n\nexport const resourceInvalidatedMessageSchema = z.object({\n subscriptionId: operationIdSchema,\n type: z.literal(\"resource-invalidated\"),\n});\n\nexport const streamOpenedMessageSchema = z.object({\n operationId: operationIdSchema,\n streamId: operationIdSchema,\n type: z.literal(\"stream-opened\"),\n});\n\nexport const streamOutputMessageSchema = z.object({\n message: z.unknown(),\n streamId: operationIdSchema,\n type: z.literal(\"stream-output\"),\n});\n\nexport const streamClosedMessageSchema = z.object({\n streamId: operationIdSchema,\n type: z.literal(\"stream-closed\"),\n});\n\nexport const protocolErrorMessageSchema = z.object({\n code: z.enum([\"bad-request\", \"conflict\", \"internal\", \"not-found\"]),\n message: z.string(),\n operationId: operationIdSchema.optional(),\n streamId: operationIdSchema.optional(),\n subscriptionId: operationIdSchema.optional(),\n type: z.literal(\"error\"),\n});\n\nexport const serverProtocolMessageSchema = z.discriminatedUnion(\"type\", [\n resourceResultMessageSchema,\n resourceInvalidatedMessageSchema,\n streamOpenedMessageSchema,\n streamOutputMessageSchema,\n streamClosedMessageSchema,\n protocolErrorMessageSchema,\n updateAvailableEventSchema,\n restartingEventSchema,\n notificationEventSchema,\n]);\n\nconst byteMarker = \"$overmuxBytes\";\n\ntype EncodedBytes = { [byteMarker]: number[] };\n\nconst encodeValue = (value: unknown): unknown => {\n if (value instanceof Uint8Array) {\n return { [byteMarker]: Array.from(value) } satisfies EncodedBytes;\n }\n if (Array.isArray(value)) {\n return value.map(encodeValue);\n }\n if (typeof value === \"object\" && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, encodeValue(item)]),\n );\n }\n return value;\n};\n\nconst decodeValue = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map(decodeValue);\n }\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n const record = value as Record<string, unknown>;\n if (\n Object.keys(record).length === 1 &&\n Array.isArray(record[byteMarker]) &&\n record[byteMarker].every(\n (item) => Number.isInteger(item) && item >= 0 && item <= 255,\n )\n ) {\n return Uint8Array.from(record[byteMarker] as number[]);\n }\n return Object.fromEntries(\n Object.entries(record).map(([key, item]) => [key, decodeValue(item)]),\n );\n};\n\nconst binaryMarker = \"$overmuxBinary\";\nconst binaryMagic = 0x4f4d5801;\n\ntype EncodedBinary = { [binaryMarker]: [number, number] };\n\nconst encodeBinaryValue = (\n value: unknown,\n payloads: Uint8Array[],\n offset: { value: number },\n): unknown => {\n if (value instanceof Uint8Array) {\n const marker = {\n [binaryMarker]: [offset.value, value.byteLength],\n } satisfies EncodedBinary;\n payloads.push(value);\n offset.value += value.byteLength;\n return marker;\n }\n if (Array.isArray(value)) {\n return value.map((item) => encodeBinaryValue(item, payloads, offset));\n }\n if (typeof value === \"object\" && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n encodeBinaryValue(item, payloads, offset),\n ]),\n );\n }\n return value;\n};\n\nconst decodeBinaryValue = (value: unknown, payload: Uint8Array): unknown => {\n if (Array.isArray(value)) {\n return value.map((item) => decodeBinaryValue(item, payload));\n }\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n const record = value as Record<string, unknown>;\n const marker = record[binaryMarker];\n if (\n Object.keys(record).length === 1 &&\n Array.isArray(marker) &&\n marker.length === 2 &&\n marker.every((item) => Number.isInteger(item) && item >= 0)\n ) {\n const [offset, length] = marker as [number, number];\n if (offset + length > payload.byteLength) {\n throw new Error(\"Invalid Overmux binary payload range\");\n }\n return payload.slice(offset, offset + length);\n }\n return Object.fromEntries(\n Object.entries(record).map(([key, item]) => [\n key,\n decodeBinaryValue(item, payload),\n ]),\n );\n};\n\nexport const encodeProtocolMessage = (message: unknown): string =>\n JSON.stringify(encodeValue(message));\n\nexport const decodeProtocolMessage = (message: string): unknown =>\n decodeValue(JSON.parse(message));\n\nexport const encodeProtocolFrame = (message: unknown): string | Uint8Array => {\n const payloads: Uint8Array[] = [];\n const encoded = encodeBinaryValue(message, payloads, { value: 0 });\n if (!payloads.length) {\n return JSON.stringify(encoded);\n }\n const header = new TextEncoder().encode(JSON.stringify(encoded));\n const payloadLength = payloads.reduce(\n (total, payload) => total + payload.byteLength,\n 0,\n );\n const frame = new Uint8Array(8 + header.byteLength + payloadLength);\n const view = new DataView(frame.buffer);\n view.setUint32(0, binaryMagic);\n view.setUint32(4, header.byteLength);\n frame.set(header, 8);\n let offset = 8 + header.byteLength;\n payloads.forEach((payload) => {\n frame.set(payload, offset);\n offset += payload.byteLength;\n });\n return frame;\n};\n\nexport const decodeProtocolFrame = (\n frame: string | ArrayBuffer | Uint8Array,\n): unknown => {\n if (typeof frame === \"string\") {\n return decodeProtocolMessage(frame);\n }\n const bytes =\n frame instanceof Uint8Array\n ? frame\n : new Uint8Array(frame, 0, frame.byteLength);\n if (bytes.byteLength < 8) {\n throw new Error(\"Invalid Overmux binary frame\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (view.getUint32(0) !== binaryMagic) {\n throw new Error(\"Invalid Overmux binary frame magic\");\n }\n const headerLength = view.getUint32(4);\n if (8 + headerLength > bytes.byteLength) {\n throw new Error(\"Invalid Overmux binary frame header\");\n }\n const header = JSON.parse(\n new TextDecoder().decode(bytes.subarray(8, 8 + headerLength)),\n ) as unknown;\n return decodeBinaryValue(header, bytes.subarray(8 + headerLength));\n};\n\nexport type RuntimeManifest = z.infer<typeof runtimeManifestSchema>;\nexport type ClientDiagnosticEvent = z.infer<typeof clientDiagnosticEventSchema>;\nexport type ClientProtocolMessage = z.infer<typeof clientProtocolMessageSchema>;\nexport type ServerLifecycleEvent = z.infer<typeof serverLifecycleEventSchema>;\nexport type ServerProtocolMessage = z.infer<typeof serverProtocolMessageSchema>;\n","// Composes runtime and request cancellation while owning asynchronous cleanup.\n// Tracked disposers run exactly once, and aggregate shutdown reports every failure.\n\nimport type { RuntimeDisposer } from \"../../../public/index\";\n\nexport type RuntimeLifecycle = {\n completePreparation: () => void;\n dispose: (reason?: unknown) => Promise<void>;\n disposeAll: (disposers: Iterable<RuntimeDisposer>) => Promise<void>;\n requestSignal: (signal?: AbortSignal) => AbortSignal;\n signal: AbortSignal;\n track: (dispose: RuntimeDisposer, signal?: AbortSignal) => RuntimeDisposer;\n};\n\nconst asError = (cause: unknown) =>\n cause instanceof Error ? cause : new Error(String(cause));\n\nconst disposeAll = async (disposers: Iterable<RuntimeDisposer>) => {\n const results = await Promise.allSettled(\n [...disposers].map(async (dispose) => dispose()),\n );\n const errors = results.flatMap((result) =>\n result.status === \"rejected\" ? [asError(result.reason)] : [],\n );\n if (errors.length) {\n throw new AggregateError(errors, \"Runtime disposal failed\");\n }\n};\n\nexport const createRuntimeLifecycle = (\n preparationSignal?: AbortSignal,\n): RuntimeLifecycle => {\n const controller = new AbortController();\n const activeDisposers = new Set<RuntimeDisposer>();\n let disposal: Promise<void> | undefined;\n const abortPreparation = () => controller.abort(preparationSignal?.reason);\n preparationSignal?.addEventListener(\"abort\", abortPreparation, {\n once: true,\n });\n if (preparationSignal?.aborted) {\n abortPreparation();\n }\n\n const completePreparation = () => {\n preparationSignal?.removeEventListener(\"abort\", abortPreparation);\n };\n const requestSignal = (signal?: AbortSignal) =>\n signal ? AbortSignal.any([controller.signal, signal]) : controller.signal;\n const track = (\n dispose: RuntimeDisposer,\n signal?: AbortSignal,\n ): RuntimeDisposer => {\n let pending: Promise<void> | undefined;\n const disposeOnce = () => {\n if (pending) {\n return pending;\n }\n controller.signal.removeEventListener(\"abort\", onAbort);\n signal?.removeEventListener(\"abort\", onAbort);\n activeDisposers.delete(disposeOnce);\n pending = Promise.resolve().then(dispose);\n return pending;\n };\n const onAbort = () => {\n void disposeOnce().catch(() => undefined);\n };\n activeDisposers.add(disposeOnce);\n controller.signal.addEventListener(\"abort\", onAbort, { once: true });\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (controller.signal.aborted || signal?.aborted) {\n onAbort();\n }\n return disposeOnce;\n };\n const dispose = (reason: unknown = new Error(\"Runtime disposed\")) => {\n if (disposal) {\n return disposal;\n }\n completePreparation();\n const pending = [...activeDisposers];\n activeDisposers.clear();\n controller.abort(reason);\n disposal = disposeAll(pending);\n return disposal;\n };\n\n return {\n completePreparation,\n dispose,\n disposeAll,\n requestSignal,\n signal: controller.signal,\n track,\n };\n};\n","// Registers named operations with validated input, output, and notification context.\n// Lookup metadata stays aligned with the names published in the runtime manifest.\n\nimport type {\n HandlerContext,\n OperationDefinition,\n} from \"../../../public/index\";\nimport type { Notifications } from \"../../../public/index\";\nimport { z } from \"zod\";\n\nexport class OperationValidationError extends Error {\n constructor(\n readonly phase: \"input\" | \"output\",\n cause: z.ZodError,\n ) {\n super(cause.message, { cause });\n }\n}\n\nexport type RuntimeOperation = {\n execute: (input: unknown, signal?: AbortSignal) => Promise<unknown>;\n returnsVoid: boolean;\n};\n\nexport type RuntimeOperations = {\n get: (name: string) => RuntimeOperation | undefined;\n names: readonly string[];\n};\n\ntype AnyOperation = OperationDefinition<z.ZodTypeAny, z.ZodTypeAny>;\n\nexport type RuntimeOperationDefinitions = Readonly<\n Record<string, AnyOperation>\n>;\n\ntype CreateRuntimeOperationsOptions = {\n context: (signal?: AbortSignal) => HandlerContext;\n definitions: RuntimeOperationDefinitions;\n notifications: Notifications;\n};\n\nexport const createRuntimeOperations = ({\n context,\n definitions,\n notifications,\n}: CreateRuntimeOperationsOptions): RuntimeOperations => {\n const operations = new Map<string, RuntimeOperation>();\n Object.entries(definitions).forEach(([name, definition]) => {\n if (!name) {\n throw new Error(\"Operation names must not be empty\");\n }\n operations.set(name, {\n execute: async (rawInput, signal) => {\n const operationContext = context(signal);\n operationContext.signal.throwIfAborted();\n const input = definition.input.safeParse(rawInput);\n if (!input.success) {\n throw new OperationValidationError(\"input\", input.error);\n }\n const rawOutput = await definition.handle(input.data, {\n ...operationContext,\n notifications,\n });\n operationContext.signal.throwIfAborted();\n const output = definition.output.safeParse(rawOutput);\n if (!output.success) {\n throw new OperationValidationError(\"output\", output.error);\n }\n return output.data;\n },\n returnsVoid: definition.output instanceof z.ZodVoid,\n });\n });\n return {\n get: (name) => operations.get(name),\n names: [...operations.keys()],\n };\n};\n","import { z } from \"zod\";\n\nexport const noInputSchema = z.void();\n\nexport const jsonValueSchema: z.ZodType<unknown> = z.lazy(() =>\n z.union([\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n);\n\nexport const parseJsonValue = <T>(value: T): T =>\n jsonValueSchema.parse(value) as T;\n\nexport type ContractInputArguments<TInput extends z.ZodType> =\n undefined extends z.input<TInput>\n ? [input?: Exclude<z.input<TInput>, undefined>]\n : [input: z.input<TInput>];\n\nexport type ResourceContract<\n TInput extends z.ZodType = z.ZodType,\n TOutput extends z.ZodType = z.ZodType,\n> = {\n input: TInput;\n output: TOutput;\n};\n\nexport const defineResourceContract = <\n TInput extends z.ZodType,\n TOutput extends z.ZodType,\n>(\n contract: ResourceContract<TInput, TOutput>,\n): ResourceContract<TInput, TOutput> => contract;\n\nexport type StreamContract<\n TInput extends z.ZodType = z.ZodType,\n TClientMessage extends z.ZodType = z.ZodType,\n TServerMessage extends z.ZodType = z.ZodType,\n> = {\n clientMessage: TClientMessage;\n input: TInput;\n serverMessage: TServerMessage;\n};\n\nexport const defineStreamContract = <\n TInput extends z.ZodType,\n TClientMessage extends z.ZodType,\n TServerMessage extends z.ZodType,\n>(\n contract: StreamContract<TInput, TClientMessage, TServerMessage>,\n): StreamContract<TInput, TClientMessage, TServerMessage> => contract;\n","// Resource invalidation follows relationships among configured resources.\n// This model owns those relationships and their invariants before runtime work begins.\n\nimport type { ResourceDefinition } from \"../../../public/index\";\n\n// A dependency supplies a derived resource's value; a dependant consumes that value.\n// Keeping both directions makes reads follow dependencies while invalidation follows dependants.\nexport type ResourceDependencyGraph = Readonly<{\n dependencies: ReadonlyMap<string, ReadonlySet<string>>;\n dependants: ReadonlyMap<string, ReadonlySet<string>>;\n}>;\n\ntype MutableResourceGraph = Map<string, Set<string>>;\n\nconst emptyGraphFor = (resourceIds: readonly string[]): MutableResourceGraph =>\n new Map(resourceIds.map((resourceId) => [resourceId, new Set<string>()]));\n\nconst visitDependencies = ({\n dependencies,\n path,\n resourceId,\n visited,\n visiting,\n}: {\n dependencies: ReadonlyMap<string, ReadonlySet<string>>;\n path: readonly string[];\n resourceId: string;\n visited: Set<string>;\n visiting: Set<string>;\n}) => {\n if (visiting.has(resourceId)) {\n throw new Error(\n `Resource dependency cycle: ${[...path, resourceId].join(\" -> \")}`,\n );\n }\n if (visited.has(resourceId)) {\n return;\n }\n visiting.add(resourceId);\n dependencies.get(resourceId)?.forEach((dependencyId) => {\n visitDependencies({\n dependencies,\n path: [...path, resourceId],\n resourceId: dependencyId,\n visited,\n visiting,\n });\n });\n visiting.delete(resourceId);\n visited.add(resourceId);\n};\n\nconst assertAcyclic = (\n dependencies: ReadonlyMap<string, ReadonlySet<string>>,\n) => {\n // Derived reads recurse through dependencies, so a cycle could never produce a value or finish activation.\n const visited = new Set<string>();\n const visiting = new Set<string>();\n dependencies.forEach((_, resourceId) => {\n visitDependencies({\n dependencies,\n path: [],\n resourceId,\n visited,\n visiting,\n });\n });\n};\n\nexport const createResourceDependencyGraph = (\n resources: Readonly<Record<string, ResourceDefinition>>,\n): ResourceDependencyGraph => {\n const resourceIds = Object.keys(resources);\n if (resourceIds.some((resourceId) => !resourceId)) {\n throw new Error(\"Resource IDs must not be empty\");\n }\n const dependencies = emptyGraphFor(resourceIds);\n const dependants = emptyGraphFor(resourceIds);\n\n Object.entries(resources).forEach(([resourceId, resource]) => {\n if (resource.kind !== \"derived\") {\n return;\n }\n Object.entries(\n resource.dependencies as Readonly<Record<string, string>>,\n ).forEach(([dependencyName, dependencyId]) => {\n if (!dependencyName) {\n throw new Error(`Resource ${resourceId} has an empty dependency name`);\n }\n if (!dependencyId) {\n throw new Error(`Resource ${resourceId} has an empty dependency ID`);\n }\n if (!dependencies.has(dependencyId)) {\n throw new Error(`Unknown resource dependency: ${dependencyId}`);\n }\n dependencies.get(resourceId)?.add(dependencyId);\n dependants.get(dependencyId)?.add(resourceId);\n });\n });\n\n assertAcyclic(dependencies);\n return Object.freeze({ dependencies, dependants });\n};\n\nconst collectInvalidatedResourceIds = (\n graph: ResourceDependencyGraph,\n resourceId: string,\n invalidated: Set<string>,\n) => {\n if (invalidated.has(resourceId)) {\n return;\n }\n invalidated.add(resourceId);\n graph.dependants.get(resourceId)?.forEach((dependantId) => {\n collectInvalidatedResourceIds(graph, dependantId, invalidated);\n });\n};\n\nexport const getInvalidatedResourceIds = (\n graph: ResourceDependencyGraph,\n resourceId: string,\n): ReadonlySet<string> => {\n // A changed value invalidates itself and the full reverse-edge closure, not just immediate consumers.\n // Set membership is essential for diamonds: a shared dependant must notify once despite multiple paths.\n const invalidated = new Set<string>();\n collectInvalidatedResourceIds(graph, resourceId, invalidated);\n return invalidated;\n};\n","// Owns named runtime resource lookup, validated reads, dependency watchers, and invalidation.\n\nimport {\n type HandlerContext,\n type ResourceDefinition,\n type RuntimeDisposer,\n} from \"../../../public/index\";\nimport type { ResourceContract } from \"../../../public/index\";\nimport { isDeepStrictEqual } from \"node:util\";\n\nimport {\n createResourceDependencyGraph,\n getInvalidatedResourceIds,\n} from \"./resource-dependency-graph\";\nimport type { RuntimeLifecycle } from \"./runtime-lifecycle\";\n\nexport type RuntimeResource = {\n read: (input: unknown, signal?: AbortSignal) => Promise<unknown>;\n subscribe: (\n input: unknown,\n listener: () => void,\n signal?: AbortSignal,\n ) => RuntimeDisposer;\n};\n\nexport type RuntimeResourceDefinitions = Readonly<\n Record<string, ResourceDefinition>\n>;\n\nexport type RuntimeResources = {\n context: (signal?: AbortSignal) => HandlerContext;\n get: (name: string) => RuntimeResource | undefined;\n invalidate: (contract: ResourceContract, input?: unknown) => void;\n names: readonly string[];\n};\n\ntype InvalidationListener = {\n input: unknown;\n listener: () => void;\n resourceId: string;\n};\n\ntype CreateRuntimeResourcesOptions = {\n definitions: RuntimeResourceDefinitions;\n lifecycle: RuntimeLifecycle;\n};\n\nexport const createRuntimeResources = ({\n definitions,\n lifecycle,\n}: CreateRuntimeResourcesOptions): RuntimeResources => {\n const graph = createResourceDependencyGraph(definitions);\n const invalidationListeners = new Set<InvalidationListener>();\n const contracts = new Map<ResourceContract, string[]>();\n const resources = new Map<string, RuntimeResource>();\n\n Object.entries(definitions).forEach(([id, definition]) => {\n contracts.set(definition.contract, [\n ...(contracts.get(definition.contract) ?? []),\n id,\n ]);\n });\n\n const invalidateResource = (\n id: string,\n input: unknown,\n allInputs = false,\n ) => {\n if (lifecycle.signal.aborted) {\n return;\n }\n const ids = getInvalidatedResourceIds(graph, id);\n invalidationListeners.forEach((entry) => {\n if (\n ids.has(entry.resourceId) &&\n (allInputs || isDeepStrictEqual(entry.input, input))\n ) {\n entry.listener();\n }\n });\n };\n\n const invalidate = (contract: ResourceContract, input?: unknown) => {\n const ids =\n contracts.get(contract) ??\n Object.entries(definitions)\n .filter(\n ([, definition]) =>\n definition.contract.input === contract.input &&\n definition.contract.output === contract.output,\n )\n .map(([id]) => id);\n if (!ids.length) {\n throw new Error(\"Cannot invalidate a resource outside this runtime\");\n }\n ids.forEach((id) => {\n const definition = definitions[id]!;\n const parsedInput =\n input === undefined\n ? undefined\n : definition.contract.input.parse(input);\n invalidateResource(id, parsedInput, input === undefined);\n });\n };\n\n const context = (signal?: AbortSignal): HandlerContext => ({\n invalidate,\n signal: lifecycle.requestSignal(signal),\n });\n\n const read = async (\n id: string,\n rawInput: unknown,\n signal?: AbortSignal,\n ): Promise<unknown> => {\n const definition = definitions[id]!;\n const operationSignal = lifecycle.requestSignal(signal);\n operationSignal.throwIfAborted();\n const input = definition.contract.input.parse(rawInput);\n const rawOutput =\n definition.kind === \"derived\"\n ? definition.combine(\n Object.fromEntries(\n await Promise.all(\n Object.entries(\n definition.dependencies as Readonly<Record<string, string>>,\n ).map(async ([name, dependencyId]) => [\n name,\n await read(dependencyId, rawInput, signal),\n ]),\n ),\n ),\n )\n : await definition.read(input, context(signal));\n operationSignal.throwIfAborted();\n return definition.contract.output.parse(rawOutput);\n };\n\n const activateWatchers = (\n id: string,\n rawInput: unknown,\n signal: AbortSignal | undefined,\n activated: Set<string>,\n disposers: RuntimeDisposer[],\n ) => {\n if (activated.has(id)) {\n return;\n }\n activated.add(id);\n const definition = definitions[id]!;\n const input = definition.contract.input.parse(rawInput);\n if (definition.kind === \"subscription\") {\n const dispose = definition.subscribe(\n input,\n () => invalidateResource(id, input),\n context(signal),\n );\n if (typeof dispose !== \"function\") {\n throw new Error(`Resource ${id} subscribe must return a disposer`);\n }\n disposers.push(dispose);\n return;\n }\n if (definition.kind === \"derived\") {\n graph.dependencies.get(id)?.forEach((dependencyId) => {\n activateWatchers(dependencyId, rawInput, signal, activated, disposers);\n });\n }\n };\n\n Object.keys(definitions).forEach((name) => {\n resources.set(name, {\n read: (input, signal) => read(name, input, signal),\n subscribe: (rawInput, listener, signal) => {\n lifecycle.requestSignal(signal).throwIfAborted();\n const input = definitions[name]!.contract.input.parse(rawInput);\n const entry = { input, listener, resourceId: name };\n const watcherDisposers: RuntimeDisposer[] = [];\n invalidationListeners.add(entry);\n try {\n activateWatchers(name, rawInput, signal, new Set(), watcherDisposers);\n } catch (cause) {\n invalidationListeners.delete(entry);\n void lifecycle.disposeAll(watcherDisposers).catch(() => undefined);\n throw cause;\n }\n return lifecycle.track(async () => {\n invalidationListeners.delete(entry);\n await lifecycle.disposeAll(watcherDisposers);\n }, signal);\n },\n });\n });\n\n return {\n context,\n get: (name) => resources.get(name),\n invalidate,\n names: [...resources.keys()],\n };\n};\n","// Owns named stream registration and ordered, validated session messaging.\n// Session abort, failure, and disposal remain exactly-once across every close path.\n\nimport type {\n HandlerContext,\n StreamHandlerDefinition,\n} from \"../../../public/index\";\nimport { z } from \"zod\";\n\nimport type { RuntimeLifecycle } from \"./runtime-lifecycle\";\n\nexport type RuntimeStreamSession = {\n dispose: () => Promise<void>;\n send: (message: unknown) => Promise<void>;\n};\n\nexport type RuntimeStream = {\n open: (\n input: unknown,\n emit: (message: unknown) => void,\n signal?: AbortSignal,\n onError?: (cause: unknown) => void,\n ) => Promise<RuntimeStreamSession>;\n};\n\nexport type RuntimeStreams = {\n get: (name: string) => RuntimeStream | undefined;\n names: readonly string[];\n};\n\ntype AnyStream = StreamHandlerDefinition<\n z.ZodTypeAny,\n z.ZodTypeAny,\n z.ZodTypeAny\n>;\n\nexport type RuntimeStreamDefinitions = Readonly<Record<string, AnyStream>>;\n\ntype CreateRuntimeStreamsOptions = {\n context: (signal?: AbortSignal) => HandlerContext;\n definitions: RuntimeStreamDefinitions;\n lifecycle: RuntimeLifecycle;\n};\n\nexport const createRuntimeStreams = ({\n context,\n definitions,\n lifecycle,\n}: CreateRuntimeStreamsOptions): RuntimeStreams => {\n const streams = new Map<string, RuntimeStream>();\n Object.entries(definitions).forEach(([name, definition]) => {\n if (!name) {\n throw new Error(\"Stream names must not be empty\");\n }\n streams.set(name, {\n open: async (rawInput, emit, requestSignal, onError) => {\n const sessionController = new AbortController();\n const sessionSignal = requestSignal\n ? AbortSignal.any([requestSignal, sessionController.signal])\n : sessionController.signal;\n const operationSignal = lifecycle.requestSignal(sessionSignal);\n operationSignal.throwIfAborted();\n const input = definition.contract.input.parse(rawInput);\n let acceptingMessages = true;\n let failed = false;\n let failure: unknown;\n let opened = false;\n const fail = (cause: unknown) => {\n if (failed || operationSignal.aborted) {\n return;\n }\n failed = true;\n failure = cause;\n acceptingMessages = false;\n sessionController.abort(cause);\n if (opened) {\n onError?.(cause);\n }\n };\n const session = await definition.open(input, {\n ...context(sessionSignal),\n emit: (message) => {\n if (operationSignal.aborted) {\n return;\n }\n try {\n emit(definition.contract.serverMessage.parse(message));\n } catch (cause) {\n fail(cause);\n }\n },\n fail,\n signal: operationSignal,\n });\n opened = true;\n if (failed || operationSignal.aborted) {\n await session.dispose?.();\n operationSignal.throwIfAborted();\n throw failure;\n }\n let messages = Promise.resolve();\n const dispose = lifecycle.track(async () => {\n acceptingMessages = false;\n sessionController.abort(new Error(\"Stream session disposed\"));\n await messages.catch(() => undefined);\n await session.dispose?.();\n }, requestSignal);\n return {\n dispose: async () => dispose(),\n send: async (rawMessage) => {\n if (!acceptingMessages) {\n throw new Error(\"Stream session is closed\");\n }\n const message = definition.contract.clientMessage.parse(rawMessage);\n messages = messages.then(async () => {\n operationSignal.throwIfAborted();\n await session.onMessage?.(message);\n operationSignal.throwIfAborted();\n });\n return messages;\n },\n };\n },\n });\n });\n return {\n get: (name) => streams.get(name),\n names: [...streams.keys()],\n };\n};\n","// Composes one process-lifetime runtime from cohesive lifecycle and protocol components.\n\nimport type { RuntimeConfigDefinition } from \"@overmux/shared/node\";\n\nimport type { Notifications } from \"../../../public/index\";\nimport { protocolVersion, type RuntimeManifest } from \"../../shared/index\";\n\nimport { createRuntimeLifecycle } from \"./runtime-lifecycle\";\nimport {\n createRuntimeOperations,\n type RuntimeOperation,\n type RuntimeOperationDefinitions,\n} from \"./runtime-operations\";\nimport {\n createRuntimeResources,\n type RuntimeResource,\n type RuntimeResourceDefinitions,\n} from \"./runtime-resources\";\nimport {\n createRuntimeStreams,\n type RuntimeStream,\n type RuntimeStreamDefinitions,\n} from \"./runtime-streams\";\n\nexport type Runtime = {\n manifest: RuntimeManifest;\n dispose: () => Promise<void>;\n getOperation: (name: string) => RuntimeOperation | undefined;\n getResource: (name: string) => RuntimeResource | undefined;\n getStream: (name: string) => RuntimeStream | undefined;\n};\n\ntype CreateRuntimeOptions = {\n config: RuntimeConfigDefinition;\n debug?: boolean;\n notifications?: Notifications;\n signal?: AbortSignal;\n};\n\nexport const createRuntime = async ({\n config,\n debug = false,\n notifications = { send: async () => undefined },\n signal,\n}: CreateRuntimeOptions): Promise<Runtime> => {\n const lifecycle = createRuntimeLifecycle(signal);\n try {\n const resources = createRuntimeResources({\n definitions: (config.server.resources ??\n {}) as RuntimeResourceDefinitions,\n lifecycle,\n });\n const context = resources.context;\n const operations = createRuntimeOperations({\n context,\n definitions: (config.server.operations ??\n {}) as RuntimeOperationDefinitions,\n notifications,\n });\n const streams = createRuntimeStreams({\n context,\n definitions: (config.server.streams ?? {}) as RuntimeStreamDefinitions,\n lifecycle,\n });\n\n lifecycle.signal.throwIfAborted();\n lifecycle.completePreparation();\n\n const manifest: RuntimeManifest = {\n debug,\n operations: [...operations.names],\n protocolVersion,\n resources: [...resources.names],\n streams: [...streams.names],\n };\n return {\n manifest,\n dispose: lifecycle.dispose,\n getOperation: operations.get,\n getResource: resources.get,\n getStream: streams.get,\n };\n } catch (cause) {\n await lifecycle.dispose(cause).catch(() => undefined);\n throw cause;\n }\n};\n","import { loadOvermuxConfig } from \"@overmux/shared/node\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport ts from \"typescript\";\nimport { ZodError } from \"zod\";\n\nimport { createRuntime } from \"./runtime/create-runtime\";\n\nexport type CheckDiagnostic = {\n code?: number | string;\n column?: number;\n file?: string;\n line?: number;\n message: string;\n path?: string;\n phase: \"config\" | \"imports\" | \"runtime\" | \"types\" | \"ui\";\n};\n\nexport type CheckResult = {\n operations?: number;\n config: string;\n diagnostics: CheckDiagnostic[];\n files: number;\n ok: boolean;\n};\n\nexport type CheckOvermuxOptions = {\n aliases?: Record<string, string>;\n configPath: string;\n typeAliases?: Record<string, string>;\n typesOnly?: boolean;\n};\n\nconst loadCompilerOptions = (configPath: string) => {\n const tsconfig = ts.findConfigFile(dirname(configPath), ts.sys.fileExists);\n if (!tsconfig) {\n return {\n allowImportingTsExtensions: true,\n allowJs: false,\n esModuleInterop: true,\n jsx: ts.JsxEmit.ReactJSX,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n noEmit: true,\n skipLibCheck: true,\n strict: true,\n target: ts.ScriptTarget.ES2022,\n } satisfies ts.CompilerOptions;\n }\n const loaded = ts.readConfigFile(tsconfig, ts.sys.readFile);\n if (loaded.error) {\n throw new Error(\n ts.flattenDiagnosticMessageText(loaded.error.messageText, \"\\n\"),\n );\n }\n const parsed = ts.parseJsonConfigFileContent(\n loaded.config,\n ts.sys,\n dirname(tsconfig),\n );\n return {\n ...parsed.options,\n allowImportingTsExtensions: true,\n noEmit: true,\n };\n};\n\nconst diagnosticOf = (diagnostic: ts.Diagnostic): CheckDiagnostic => {\n const position =\n diagnostic.file && diagnostic.start !== undefined\n ? diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start)\n : undefined;\n return {\n code: diagnostic.code,\n column: position ? position.character + 1 : undefined,\n file: diagnostic.file?.fileName,\n line: position ? position.line + 1 : undefined,\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\"),\n phase: \"types\",\n };\n};\n\nconst kindOf = (fileName: string, configPath: string) => {\n if (\n resolve(fileName) === resolve(configPath) ||\n fileName.match(/\\.server\\.[cm]?[jt]sx?$/)\n ) {\n return \"server\";\n }\n if (fileName.match(/\\.ui\\.[cm]?[jt]sx?$/)) {\n return \"client\";\n }\n if (fileName.match(/\\.shared\\.[cm]?[jt]sx?$/)) {\n return \"shared\";\n }\n return undefined;\n};\n\ntype ModuleKind = \"client\" | \"server\" | \"shared\";\n\ntype ResolvedImport = {\n kind?: ModuleKind;\n node: ts.ImportDeclaration | ts.ExportDeclaration;\n source?: ts.SourceFile;\n};\n\nconst kindOfSpecifier = (specifier: string): ModuleKind | undefined => {\n if (specifier === \"overmux/client\" || specifier.endsWith(\"/react\")) {\n return \"client\";\n }\n if (\n specifier === \"overmux/server\" ||\n specifier.endsWith(\"/server\") ||\n specifier.startsWith(\"node:\")\n ) {\n return \"server\";\n }\n if (specifier === \"overmux\" || specifier.endsWith(\"/shared\")) {\n return \"shared\";\n }\n return undefined;\n};\n\nconst isTypeOnlyReference = (\n node: ts.ImportDeclaration | ts.ExportDeclaration,\n) => {\n if (ts.isExportDeclaration(node)) {\n return Boolean(\n node.isTypeOnly ||\n (node.exportClause &&\n ts.isNamedExports(node.exportClause) &&\n node.exportClause.elements.every((element) => element.isTypeOnly)),\n );\n }\n const clause = node.importClause;\n if (!clause || clause.name) {\n return Boolean(clause?.isTypeOnly);\n }\n return Boolean(\n clause.isTypeOnly ||\n (clause.namedBindings &&\n ts.isNamedImports(clause.namedBindings) &&\n clause.namedBindings.elements.every((element) => element.isTypeOnly)),\n );\n};\n\nconst resolvedImports = (program: ts.Program, source: ts.SourceFile) => {\n const imports: ResolvedImport[] = [];\n source.forEachChild((node) => {\n if (\n (!ts.isImportDeclaration(node) && !ts.isExportDeclaration(node)) ||\n !node.moduleSpecifier ||\n !ts.isStringLiteral(node.moduleSpecifier) ||\n isTypeOnlyReference(node)\n ) {\n return;\n }\n const specifier = node.moduleSpecifier.text;\n const resolved = ts.resolveModuleName(\n specifier,\n source.fileName,\n program.getCompilerOptions(),\n ts.sys,\n ).resolvedModule?.resolvedFileName;\n const target = resolved ? program.getSourceFile(resolved) : undefined;\n const kind = kindOfSpecifier(specifier);\n if (kind || (target && !target.isDeclarationFile)) {\n imports.push({\n kind,\n node,\n source: target?.isDeclarationFile ? undefined : target,\n });\n }\n });\n return imports;\n};\n\nconst invalidImport = (source: ModuleKind, target: ModuleKind | undefined) =>\n (source === \"server\" && target === \"client\") ||\n (source === \"client\" && target === \"server\") ||\n (source === \"shared\" && target !== undefined && target !== \"shared\");\n\nconst visitImportGraph = ({\n configPath,\n diagnostics,\n kind,\n program,\n seen,\n source,\n}: {\n configPath: string;\n diagnostics: CheckDiagnostic[];\n kind: ModuleKind;\n program: ts.Program;\n seen: Set<string>;\n source: ts.SourceFile;\n}) => {\n const visitKey = `${kind}:${source.fileName}`;\n if (seen.has(visitKey)) {\n return;\n }\n seen.add(visitKey);\n resolvedImports(program, source).forEach(\n ({ kind: importKind, node, source: target }) => {\n const declaredKind =\n importKind ??\n (target ? kindOf(target.fileName, configPath) : undefined);\n if (invalidImport(kind, declaredKind)) {\n const position = source.getLineAndCharacterOfPosition(node.getStart());\n diagnostics.push({\n code: \"OVERMUX_IMPORT_BOUNDARY\",\n column: position.character + 1,\n file: source.fileName,\n line: position.line + 1,\n message: `${kind} modules may not import ${declaredKind} modules`,\n phase: \"imports\",\n });\n return;\n }\n if (target) {\n visitImportGraph({\n configPath,\n diagnostics,\n kind: declaredKind === \"shared\" ? \"shared\" : kind,\n program,\n seen,\n source: target,\n });\n }\n },\n );\n};\n\nconst importBoundaryDiagnostics = (\n program: ts.Program,\n configPath: string,\n): CheckDiagnostic[] => {\n const diagnostics: CheckDiagnostic[] = [];\n const seen = new Set<string>();\n program.getSourceFiles().forEach((source) => {\n const kind = kindOf(source.fileName, configPath);\n if (kind && !source.isDeclarationFile) {\n visitImportGraph({\n configPath,\n diagnostics,\n kind,\n program,\n seen,\n source,\n });\n }\n });\n return diagnostics;\n};\n\nconst runtimeDiagnostics = (cause: unknown): CheckDiagnostic[] => {\n if (cause instanceof ZodError) {\n return cause.issues.map((issue) => ({\n message: issue.message,\n path: issue.path.length ? issue.path.join(\".\") : undefined,\n phase: \"runtime\" as const,\n }));\n }\n return [\n {\n message: cause instanceof Error ? cause.message : String(cause),\n phase: \"runtime\",\n },\n ];\n};\n\nconst typecheck = async ({\n aliases = {},\n configPath,\n typeAliases,\n}: CheckOvermuxOptions) => {\n const options = loadCompilerOptions(configPath);\n const aliasesForTypes =\n typeAliases ??\n Object.fromEntries(\n Object.entries(aliases).filter(\n ([key]) => key === \"overmux\" || key.startsWith(\"overmux/\"),\n ),\n );\n const absoluteAliases = Object.fromEntries(\n Object.entries(aliasesForTypes).map(([key, value]) => [\n key,\n [isAbsolute(value) ? value : resolve(value)],\n ]),\n );\n const program = ts.createProgram({\n options: {\n ...options,\n baseUrl: options.baseUrl ?? \"/\",\n paths: { ...options.paths, ...absoluteAliases },\n },\n rootNames: [configPath],\n });\n const diagnostics = [\n ...ts.getPreEmitDiagnostics(program).map(diagnosticOf),\n ...importBoundaryDiagnostics(program, configPath),\n ];\n const files = program\n .getSourceFiles()\n .filter(\n (file) =>\n !file.isDeclarationFile && !file.fileName.includes(\"node_modules\"),\n ).length;\n return { diagnostics, files };\n};\n\nexport const checkOvermux = async (\n options: CheckOvermuxOptions,\n): Promise<CheckResult> => {\n const configPath = resolve(options.configPath);\n let checked;\n try {\n checked = await typecheck({ ...options, configPath });\n } catch (cause) {\n return {\n config: configPath,\n diagnostics: [\n {\n message: cause instanceof Error ? cause.message : String(cause),\n phase: \"config\",\n },\n ],\n files: 0,\n ok: false,\n };\n }\n if (checked.diagnostics.length || options.typesOnly) {\n return {\n config: configPath,\n diagnostics: checked.diagnostics,\n files: checked.files,\n ok: checked.diagnostics.length === 0,\n };\n }\n\n let runtime: Awaited<ReturnType<typeof createRuntime>> | undefined;\n try {\n const { config } = await loadOvermuxConfig({\n aliases: options.aliases,\n configPath,\n });\n runtime = await createRuntime({ config });\n return {\n operations: runtime.manifest.operations.length,\n config: configPath,\n diagnostics: [],\n files: checked.files,\n ok: true,\n };\n } catch (cause) {\n return {\n config: configPath,\n diagnostics: runtimeDiagnostics(cause),\n files: checked.files,\n ok: false,\n };\n } finally {\n await runtime?.dispose();\n }\n};\n","import { appendFileSync, mkdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\n\nimport { getOvermuxPaths } from \"./paths\";\n\nexport type ServerLogLevel = \"debug\" | \"error\" | \"info\" | \"warn\";\n\nexport type ServerLogEntry = {\n // Groups related request, connection, and operation logs for diagnostics.\n correlationId?: string;\n details?: Record<string, unknown>;\n durationMs?: number;\n event: string;\n level?: ServerLogLevel;\n message?: string;\n source?: \"browser\" | \"server\";\n timestamp?: string;\n};\n\nexport type ServerLogger = {\n enabled: boolean;\n id: () => string;\n log: (entry: ServerLogEntry) => void;\n};\n\ntype ConfigurableServerLogger = ServerLogger & {\n setEnabled: (enabled: boolean) => void;\n setLogFile: (logFile: string) => void;\n};\n\nconst lifecycleEvents = new Set([\n \"server-start\",\n \"server-stop\",\n \"websocket-close\",\n \"websocket-close-event\",\n \"websocket-connect\",\n \"websocket-open\",\n]);\n\nexport const getDefaultServerLogFile = ({\n homeDir,\n xdgStateHome,\n}: {\n homeDir?: string;\n xdgStateHome?: string;\n} = {}) =>\n join(getOvermuxPaths({ homeDir, xdgStateHome }).stateDir, \"overmux.log\");\n\nconst safeJson = (value: unknown) => {\n try {\n return JSON.stringify(value);\n } catch {\n return JSON.stringify({\n event: \"log-serialization-error\",\n level: \"error\",\n source: \"server\",\n timestamp: new Date().toISOString(),\n });\n }\n};\n\nexport const createServerLogger = ({\n enabled,\n logFile = getDefaultServerLogFile(),\n}: {\n enabled: boolean;\n logFile?: string;\n}): ConfigurableServerLogger => {\n let activeLogFile = logFile;\n let debugEnabled = enabled;\n return {\n get enabled() {\n return debugEnabled;\n },\n id: randomUUID,\n log: (entry) => {\n if (\n !debugEnabled &&\n entry.level !== \"error\" &&\n !lifecycleEvents.has(entry.event)\n ) {\n return;\n }\n const record = safeJson({\n timestamp: entry.timestamp ?? new Date().toISOString(),\n level: entry.level ?? \"info\",\n source: entry.source ?? \"server\",\n ...entry,\n });\n mkdirSync(dirname(activeLogFile), { recursive: true });\n appendFileSync(activeLogFile, `${record}\\n`, \"utf8\");\n process.stderr.write(`[overmux:debug] ${record}\\n`);\n },\n setEnabled: (nextEnabled) => {\n debugEnabled = nextEnabled;\n },\n setLogFile: (nextLogFile) => {\n activeLogFile = nextLogFile;\n },\n };\n};\n\nexport const errorMessage = (cause: unknown) =>\n cause instanceof Error ? cause.message : String(cause);\n\nexport const errorDetails = (cause: unknown) => ({\n message: errorMessage(cause),\n ...(cause instanceof Error && cause.stack ? { stack: cause.stack } : {}),\n});\n","// Defines the complete validated IPC boundary between coordinator and child.\n// Application traffic never crosses this process boundary.\n\nimport { z } from \"zod\";\n\nconst childOptionsSchema = z.object({\n configAliases: z.record(z.string(), z.string()).optional(),\n configPath: z.string(),\n debug: z.boolean().optional(),\n developmentWebTarget: z.url().optional(),\n host: z.string().optional(),\n logFile: z.string().optional(),\n port: z.number().int().min(0).max(65_535).optional(),\n productionWebAssetsDir: z.string().optional(),\n watch: z.boolean().optional(),\n});\n\nconst parentMessageSchema = z.discriminatedUnion(\"type\", [\n z.object({ options: childOptionsSchema, type: z.literal(\"start\") }),\n z.object({ type: z.literal(\"update-available\") }),\n z.object({ type: z.literal(\"stop\") }),\n]);\n\nconst childMessageSchema = z.discriminatedUnion(\"type\", [\n z.object({\n host: z.string(),\n port: z.number().int().min(1).max(65_535),\n type: z.literal(\"ready\"),\n url: z.string(),\n watch: z.boolean(),\n }),\n z.object({ type: z.literal(\"restart-requested\") }),\n z.object({ message: z.string(), type: z.literal(\"startup-failed\") }),\n]);\n\nexport type ChildServerOptions = z.infer<typeof childOptionsSchema>;\nexport type ParentToChildMessage = z.infer<typeof parentMessageSchema>;\nexport type ChildToParentMessage = z.infer<typeof childMessageSchema>;\n\nexport const parseParentMessage = (value: unknown): ParentToChildMessage =>\n parentMessageSchema.parse(value);\n\nexport const parseChildMessage = (value: unknown): ChildToParentMessage =>\n childMessageSchema.parse(value);\n","// Owns the coordinator's broad recursive watch of the config directory.\n// Filtering and debounce keep update signaling independent of import analysis.\n\nimport { watch } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nexport type UpdateWatcher = {\n close: () => void;\n};\n\nexport const isRelevantUpdatePath = (path: string): boolean => {\n const segments = path.split(/[\\\\/]/);\n if (segments.some((segment) => segment.toLowerCase() === \"node_modules\")) {\n return false;\n }\n return /\\.(?:js|jsx|mjs|cjs|ts|tsx|mts|cts|json|css)$/i.test(path);\n};\n\nexport const startUpdateWatcher = ({\n configPath,\n onUpdate,\n}: {\n configPath: string;\n onUpdate: () => void;\n}): UpdateWatcher => {\n let closed = false;\n let timeout: NodeJS.Timeout | undefined;\n const watcher = watch(\n dirname(configPath),\n { recursive: true },\n (_event, fileName) => {\n if (closed || !fileName || !isRelevantUpdatePath(fileName.toString())) {\n return;\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(onUpdate, 100);\n },\n );\n\n return {\n close: () => {\n if (closed) {\n return;\n }\n closed = true;\n if (timeout) {\n clearTimeout(timeout);\n }\n watcher.close();\n },\n };\n};\n","// Supervises one disposable application child and the parent-owned update watcher.\n// The coordinator retains only lifecycle state and the stable startup address.\n\nimport { fork, type ChildProcess } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { errorMessage } from \"../server-logger\";\nimport type {\n OvermuxServer,\n OvermuxServerOptions,\n} from \"../start-overmux-server\";\nimport {\n parseChildMessage,\n type ChildServerOptions,\n type ParentToChildMessage,\n} from \"./ipc-protocol\";\nimport { startUpdateWatcher, type UpdateWatcher } from \"./update-watcher\";\n\ntype ChildInstance = {\n process: ChildProcess;\n host: string;\n port: number;\n url: string;\n watch: boolean;\n};\n\nconst send = (\n child: ChildProcess,\n message: ParentToChildMessage,\n onError?: (cause: Error) => void,\n) => {\n if (!child.connected) {\n onError?.(new Error(\"Server child IPC channel is closed\"));\n return;\n }\n try {\n child.send(message, (cause) => {\n if (cause) {\n onError?.(cause);\n }\n });\n } catch (cause) {\n onError?.(cause instanceof Error ? cause : new Error(String(cause)));\n }\n};\n\nconst stopChild = (child: ChildProcess): Promise<void> =>\n new Promise((resolve) => {\n let timeout: NodeJS.Timeout | undefined;\n const finish = () => {\n child.off(\"exit\", finish);\n clearTimeout(timeout);\n resolve();\n };\n child.once(\"exit\", finish);\n if (child.exitCode !== null || child.signalCode !== null) {\n finish();\n return;\n }\n timeout = setTimeout(() => {\n if (!child.kill(\"SIGKILL\")) {\n finish();\n }\n }, 5_000);\n send(child, { type: \"stop\" });\n });\n\nconst serverChildPath = () =>\n fileURLToPath(import.meta.resolve(\"#server-child\"));\n\nconst startChild = (\n options: ChildServerOptions,\n onRestartRequested: () => void,\n): Promise<ChildInstance> =>\n new Promise((resolve, reject) => {\n const child = fork(serverChildPath(), [], {\n serialization: \"json\",\n stdio: [\"inherit\", \"inherit\", \"inherit\", \"ipc\"],\n });\n let settled = false;\n const fail = (cause: unknown) => {\n if (settled) {\n return;\n }\n settled = true;\n if (child.exitCode === null && child.signalCode === null) {\n child.kill();\n }\n reject(cause instanceof Error ? cause : new Error(String(cause)));\n };\n child.on(\"error\", fail);\n child.on(\"exit\", (code, signal) => {\n fail(\n new Error(\n `Server child exited before readiness (${signal ?? code ?? \"unknown\"})`,\n ),\n );\n });\n child.on(\"message\", (raw) => {\n let message;\n try {\n message = parseChildMessage(raw);\n } catch (cause) {\n fail(cause);\n return;\n }\n if (message.type === \"restart-requested\") {\n if (settled) {\n onRestartRequested();\n }\n return;\n }\n if (message.type === \"startup-failed\") {\n fail(new Error(message.message));\n return;\n }\n if (!settled) {\n settled = true;\n resolve({\n host: message.host,\n port: message.port,\n process: child,\n url: message.url,\n watch: message.watch,\n });\n }\n });\n send(child, { options, type: \"start\" }, fail);\n });\n\nexport const startServerCoordinator = async (\n initialOptions: OvermuxServerOptions,\n): Promise<OvermuxServer> => {\n let child: ChildInstance | undefined;\n let closed = false;\n let closePromise: Promise<void> | undefined;\n let restartPromise: Promise<void> | undefined;\n let updateDuringRestart = false;\n let startupAddress: { host: string; port: number } | undefined;\n let watcher: UpdateWatcher | undefined;\n\n const adoptChild = (next: ChildInstance) => {\n child = next;\n next.process.once(\"exit\", () => {\n if (child?.process === next.process) {\n child = undefined;\n }\n });\n };\n\n const restart = () => {\n if (closed || restartPromise) {\n return restartPromise ?? Promise.resolve();\n }\n restartPromise = (async () => {\n const previous = child;\n child = undefined;\n if (previous) {\n await stopChild(previous.process);\n }\n if (closed || !startupAddress) {\n return;\n }\n try {\n const replacement = await startChild(\n {\n ...initialOptions,\n host: startupAddress.host,\n port: startupAddress.port,\n },\n () => void restart(),\n );\n if (closed) {\n await stopChild(replacement.process);\n return;\n }\n adoptChild(replacement);\n if (updateDuringRestart) {\n updateDuringRestart = false;\n send(replacement.process, { type: \"update-available\" });\n }\n } catch (cause) {\n process.stderr.write(\n `[overmux] replacement child failed: ${errorMessage(cause)}\\n`,\n );\n }\n })().finally(() => {\n const shouldRetry = updateDuringRestart && !child && !closed;\n updateDuringRestart = false;\n restartPromise = undefined;\n if (shouldRetry) {\n void restart();\n }\n });\n return restartPromise;\n };\n\n const onUpdate = () => {\n if (closed) {\n return;\n }\n if (restartPromise) {\n updateDuringRestart = true;\n return;\n }\n if (child) {\n send(child.process, { type: \"update-available\" });\n return;\n }\n void restart();\n };\n\n const initial = await startChild(initialOptions, () => void restart());\n startupAddress = { host: initial.host, port: initial.port };\n adoptChild(initial);\n try {\n if (initial.watch) {\n watcher = startUpdateWatcher({\n configPath: initialOptions.configPath,\n onUpdate,\n });\n }\n } catch (cause) {\n await stopChild(initial.process);\n throw cause;\n }\n\n const close = () => {\n if (closePromise) {\n return closePromise;\n }\n closed = true;\n closePromise = (async () => {\n process.off(\"SIGINT\", onSignal);\n process.off(\"SIGTERM\", onSignal);\n watcher?.close();\n const active = child;\n child = undefined;\n if (active) {\n await stopChild(active.process);\n }\n await restartPromise;\n })();\n return closePromise;\n };\n const onSignal = () => {\n void close().catch((cause: unknown) => {\n process.stderr.write(\n `[overmux] coordinator shutdown failed: ${errorMessage(cause)}\\n`,\n );\n });\n };\n process.once(\"SIGINT\", onSignal);\n process.once(\"SIGTERM\", onSignal);\n\n return {\n announceUpdateAvailable: onUpdate,\n close,\n port: initial.port,\n url: initial.url,\n };\n};\n","import type { ServerConfigDefinition } from \"../../public/index\";\nimport { resolve } from \"node:path\";\n\nimport { startServerCoordinator } from \"./coordinator/server-coordinator\";\n\nexport type OvermuxServerOptions = ServerConfigDefinition & {\n configAliases?: Record<string, string>;\n debug?: boolean;\n developmentWebTarget?: string;\n configPath: string;\n};\n\nexport type OvermuxServer = {\n announceUpdateAvailable: () => void;\n close: () => Promise<void>;\n port: number;\n url: string;\n};\n\nexport const startOvermuxServer = async (\n options: OvermuxServerOptions,\n): Promise<OvermuxServer> =>\n startServerCoordinator({\n ...options,\n configPath: resolve(options.configPath),\n });\n","import { buildCommand } from \"@stricli/core\";\nimport { checkOvermux, type CheckResult } from \"../../server/index\";\nimport { getDefaultConfigPath } from \"../../server/paths\";\ntype CheckFlags = {\n config: string;\n};\n\nconst printCheck = (result: CheckResult) => {\n result.diagnostics.forEach((diagnostic) => {\n const location = diagnostic.file\n ? `${diagnostic.file}:${diagnostic.line ?? 1}:${diagnostic.column ?? 1}`\n : (diagnostic.path ?? diagnostic.phase);\n const code = diagnostic.code ? ` ${diagnostic.code}` : \"\";\n console.error(`error${code} ${location}\\n ${diagnostic.message}`);\n });\n if (!result.ok) {\n console.error(`check failed: ${result.diagnostics.length} errors`);\n return;\n }\n console.log(`✓ config: ${result.config}`);\n if (result.operations !== undefined) {\n console.log(`✓ operations: ${result.operations} definitions`);\n }\n console.log(`✓ types: ${result.files} reachable files`);\n};\n\nconst runCheck = async (flags: CheckFlags) => {\n const result = await checkOvermux({ configPath: flags.config });\n printCheck(result);\n process.exitCode = result.ok ? 0 : 1;\n};\n\nexport const checkCommand = buildCommand({\n func: runCheck,\n parameters: {\n aliases: { c: \"config\" },\n flags: {\n config: {\n brief: \"Configuration file\",\n default: getDefaultConfigPath(),\n kind: \"parsed\",\n parse: String,\n placeholder: \"path\",\n },\n },\n },\n docs: { brief: \"Validate an Overmux configuration\" },\n});\n","import { buildCommand } from \"@stricli/core\";\n\nimport {\n discoverInstance,\n sendControlRequest,\n type InstanceRegistration,\n} from \"../../server/auth/instance-control\";\nimport { parsePort } from \"../parse-port\";\n\ntype Fetch = (input: URL, init: RequestInit) => Promise<Response>;\n\ntype CallFlags = {\n input?: string;\n port?: string;\n};\n\nconst localCredential = async (port?: number) => {\n const instance = await discoverInstance(port);\n const response = await sendControlRequest(instance, {\n type: \"issue-bearer\",\n });\n return { instance, token: response.bearer.token };\n};\n\nconst getErrorMessage = async (response: Response) => {\n const body = await response.text();\n if (!body) {\n return `Operation request failed: ${response.status} ${response.statusText}`;\n }\n try {\n const parsed = JSON.parse(body) as { error?: unknown; message?: unknown };\n const message = parsed.error ?? parsed.message;\n if (typeof message === \"string\") {\n return `Operation request failed: ${message}`;\n }\n } catch {}\n return `Operation request failed: ${body}`;\n};\n\nexport const executeCallCommand = async ({\n input,\n operationName,\n fetch = globalThis.fetch,\n getLocalCredential = localCredential,\n port,\n}: {\n input?: string;\n operationName: string;\n fetch?: Fetch;\n getLocalCredential?: (port?: number) => Promise<{\n instance: InstanceRegistration;\n token: string;\n }>;\n port?: number;\n}): Promise<unknown> => {\n let parsedInput: unknown;\n if (input !== undefined) {\n try {\n parsedInput = JSON.parse(input) as unknown;\n } catch {\n throw new Error(\"Operation input must be valid JSON\");\n }\n }\n const credential = await getLocalCredential(port);\n const url = new URL(\n `/api/operations/${encodeURIComponent(operationName)}`,\n credential.instance.apiUrl,\n );\n const response = await fetch(url, {\n body: input === undefined ? undefined : JSON.stringify(parsedInput),\n headers: {\n authorization: `Bearer ${credential.token}`,\n \"content-type\": \"application/json\",\n },\n method: \"POST\",\n });\n if (!response.ok) {\n throw new Error(await getErrorMessage(response));\n }\n return response.status === 204 ? undefined : response.json();\n};\n\nconst runCall = async (flags: CallFlags, operationName: string) => {\n const port = flags.port === undefined ? undefined : parsePort(flags.port);\n if (port instanceof Error) {\n return port;\n }\n const output = await executeCallCommand({\n input: flags.input,\n operationName,\n port,\n });\n if (output !== undefined) {\n console.log(JSON.stringify(output));\n }\n};\n\nexport const callCommand = buildCommand({\n func: runCall,\n parameters: {\n aliases: { i: \"input\", p: \"port\" },\n flags: {\n input: {\n brief: \"Operation input as JSON\",\n kind: \"parsed\",\n optional: true,\n parse: String,\n },\n port: {\n brief: \"Running local server port\",\n kind: \"parsed\",\n optional: true,\n parse: String,\n },\n },\n positional: {\n kind: \"tuple\",\n parameters: [\n {\n brief: \"Operation name\",\n parse: String,\n placeholder: \"operation-name\",\n },\n ],\n },\n },\n docs: { brief: \"Invoke an operation on a running Overmux server\" },\n});\n","import { createHash } from \"node:crypto\";\nimport { createWriteStream } from \"node:fs\";\nimport { Readable, Transform } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\n\nexport type DesktopArchitecture = \"arm64\" | \"x64\";\n\ntype GitHubAsset = {\n browser_download_url: string;\n name: string;\n size: number;\n};\n\ntype GitHubRelease = {\n assets: GitHubAsset[];\n draft: boolean;\n prerelease: boolean;\n published_at: string | null;\n tag_name: string;\n};\n\nexport type DesktopRelease = {\n artifact: GitHubAsset;\n checksums: GitHubAsset;\n tag: string;\n version: string;\n};\n\nconst releasesUrl =\n \"https://api.github.com/repos/richardgill/overmux/releases?per_page=100\";\nconst downloadRoot =\n \"https://github.com/richardgill/overmux/releases/download/\";\n\nexport const getMacDesktopArtifactName = (\n version: string,\n architecture: DesktopArchitecture,\n) => `Overmux-Desktop-${version}-mac-${architecture}.zip`;\n\nconst assertOfficialAsset = (asset: GitHubAsset, tag: string) => {\n const expected = `${downloadRoot}${tag}/${asset.name}`;\n if (asset.browser_download_url !== expected) {\n throw new Error(\n `Refusing unofficial desktop asset URL: ${asset.browser_download_url}`,\n );\n }\n if (!Number.isSafeInteger(asset.size) || asset.size <= 0) {\n throw new Error(`Desktop release asset ${asset.name} has an invalid size`);\n }\n};\n\nexport const selectDesktopRelease = (\n releases: readonly GitHubRelease[],\n architecture: DesktopArchitecture,\n): DesktopRelease => {\n const candidates = releases\n .filter(\n (release) =>\n !release.draft &&\n !release.prerelease &&\n /^desktop-v[^/]+$/.test(release.tag_name),\n )\n .sort((left, right) =>\n (right.published_at ?? \"\").localeCompare(left.published_at ?? \"\"),\n );\n\n const selected = candidates.find((release) => {\n const version = release.tag_name.slice(\"desktop-v\".length);\n return release.assets.some(\n (asset) =>\n asset.name === getMacDesktopArtifactName(version, architecture),\n );\n });\n if (!selected) {\n throw new Error(\n `No stable Overmux Desktop release supports macOS ${architecture}`,\n );\n }\n\n const version = selected.tag_name.slice(\"desktop-v\".length);\n const artifactName = getMacDesktopArtifactName(version, architecture);\n const artifact = selected.assets.find((asset) => asset.name === artifactName);\n const checksums = selected.assets.find(\n (asset) => asset.name === \"SHA256SUMS\",\n );\n if (!artifact || !checksums) {\n throw new Error(`Desktop release ${selected.tag_name} is incomplete`);\n }\n assertOfficialAsset(artifact, selected.tag_name);\n assertOfficialAsset(checksums, selected.tag_name);\n return { artifact, checksums, tag: selected.tag_name, version };\n};\n\nconst fetchOk = async (url: string, fetch: typeof globalThis.fetch) => {\n if (new URL(url).protocol !== \"https:\") {\n throw new Error(`Refusing insecure desktop release URL: ${url}`);\n }\n const response = await fetch(url, {\n headers: { Accept: \"application/vnd.github+json\" },\n });\n if (!response.ok) {\n throw new Error(`GitHub request failed (${response.status}) for ${url}`);\n }\n if (response.url && new URL(response.url).protocol !== \"https:\") {\n throw new Error(\n `Refusing insecure desktop release redirect: ${response.url}`,\n );\n }\n return response;\n};\n\nexport const findDesktopRelease = async (\n architecture: DesktopArchitecture,\n fetch = globalThis.fetch,\n) => {\n const response = await fetchOk(releasesUrl, fetch);\n return selectDesktopRelease(\n (await response.json()) as GitHubRelease[],\n architecture,\n );\n};\n\nexport const parseSha256Sums = (contents: string) => {\n const checksums = new Map<string, string>();\n contents.split(/\\r?\\n/).forEach((line) => {\n if (!line) {\n return;\n }\n const match = /^([a-f0-9]{64}) ([^/\\\\]+)$/.exec(line);\n if (!match || checksums.has(match[2])) {\n throw new Error(\"Desktop release has an invalid SHA256SUMS file\");\n }\n checksums.set(match[2], match[1]);\n });\n return checksums;\n};\n\nexport const downloadTextAsset = async (\n asset: GitHubAsset,\n fetch = globalThis.fetch,\n) => {\n const response = await fetchOk(asset.browser_download_url, fetch);\n const contents = await response.text();\n if (Buffer.byteLength(contents) !== asset.size) {\n throw new Error(\n `Downloaded ${asset.name} size does not match GitHub metadata`,\n );\n }\n return contents;\n};\n\nexport const downloadVerifiedAsset = async ({\n asset,\n destination,\n expectedSha256,\n fetch = globalThis.fetch,\n}: {\n asset: GitHubAsset;\n destination: string;\n expectedSha256: string;\n fetch?: typeof globalThis.fetch;\n}) => {\n const response = await fetchOk(asset.browser_download_url, fetch);\n if (!response.body) {\n throw new Error(`Downloaded ${asset.name} has no body`);\n }\n const hash = createHash(\"sha256\");\n let size = 0;\n const verification = new Transform({\n transform(chunk: Buffer, _encoding, callback) {\n size += chunk.byteLength;\n hash.update(chunk);\n callback(null, chunk);\n },\n });\n await pipeline(\n Readable.fromWeb(\n response.body as unknown as import(\"node:stream/web\").ReadableStream,\n ),\n verification,\n createWriteStream(destination),\n );\n if (size !== asset.size) {\n throw new Error(\n `Downloaded ${asset.name} size does not match GitHub metadata`,\n );\n }\n if (hash.digest(\"hex\") !== expectedSha256) {\n throw new Error(`Downloaded ${asset.name} failed SHA-256 verification`);\n }\n};\n","import { spawnSync } from \"node:child_process\";\nimport {\n existsSync,\n lstatSync,\n mkdirSync,\n mkdtempSync,\n readlinkSync,\n readdirSync,\n renameSync,\n rmSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\n\nimport {\n downloadTextAsset,\n downloadVerifiedAsset,\n findDesktopRelease,\n parseSha256Sums,\n type DesktopArchitecture,\n type DesktopRelease,\n} from \"./desktop-release\";\n\nexport type DesktopAction = \"install\" | \"upgrade\";\n\ntype CommandResult = { status: number | null; stderr: string; stdout: string };\nexport type DesktopInstallerDependencies = {\n arch: string;\n confirm: () => Promise<boolean>;\n downloadText: (asset: DesktopRelease[\"checksums\"]) => Promise<string>;\n downloadVerified: typeof downloadVerifiedAsset;\n findRelease: (architecture: DesktopArchitecture) => Promise<DesktopRelease>;\n homeDirectory: string;\n platform: string;\n runCommand: (command: string, args: readonly string[]) => CommandResult;\n sleep: (milliseconds: number) => Promise<void>;\n stderr: Pick<NodeJS.WriteStream, \"write\">;\n stdout: Pick<NodeJS.WriteStream, \"write\">;\n};\n\ntype DesktopInstallOptions = {\n action: DesktopAction;\n yes?: boolean;\n};\n\nconst bundleIdentifier = \"com.overmux.desktop\";\nconst bundleName = \"Overmux.app\";\n\nconst runCommand = (\n command: string,\n args: readonly string[],\n): CommandResult => {\n const result = spawnSync(command, args, { encoding: \"utf8\" });\n if (result.error) {\n throw new Error(`Could not run ${command}`, { cause: result.error });\n }\n return {\n status: result.status,\n stderr: result.stderr ?? \"\",\n stdout: result.stdout ?? \"\",\n };\n};\n\nconst requireCommand = (\n dependencies: DesktopInstallerDependencies,\n command: string,\n args: readonly string[],\n) => {\n const result = dependencies.runCommand(command, args);\n if (result.status !== 0) {\n throw new Error(\n `${basename(command)} failed: ${result.stderr.trim() || \"unknown error\"}`,\n );\n }\n return result.stdout.trim();\n};\n\nconst sleep = (milliseconds: number) =>\n new Promise<void>((resolve) => {\n setTimeout(resolve, milliseconds);\n });\n\nconst confirmUnsignedInstall = async (process: NodeJS.Process) => {\n if (process.stdin.isTTY !== true || process.stdout.isTTY !== true) {\n throw new Error(\n \"Unsigned desktop installation requires an interactive terminal; rerun with --yes to accept the risk\",\n );\n }\n process.stdout.write(\n \"Overmux Desktop for macOS is experimental, unsigned, and not notarized. macOS cannot verify its publisher.\\n\",\n );\n const prompt = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const answer = await prompt.question(\n \"Install this unsigned application? [y/N] \",\n );\n prompt.close();\n return /^(?:y|yes)$/i.test(answer.trim());\n};\n\nconst createDependencies = (\n process: NodeJS.Process,\n): DesktopInstallerDependencies => ({\n arch: process.arch,\n confirm: () => confirmUnsignedInstall(process),\n downloadText: downloadTextAsset,\n downloadVerified: downloadVerifiedAsset,\n findRelease: findDesktopRelease,\n homeDirectory: homedir(),\n platform: process.platform,\n runCommand,\n sleep,\n stderr: process.stderr,\n stdout: process.stdout,\n});\n\nconst getArchitecture = (arch: string): DesktopArchitecture => {\n if (arch === \"arm64\" || arch === \"x64\") {\n return arch;\n }\n throw new Error(`Overmux Desktop does not provide a macOS ${arch} build`);\n};\n\nconst assertApplicationsDirectory = (path: string) => {\n if (!existsSync(path)) {\n return;\n }\n const metadata = lstatSync(path);\n if (!metadata.isDirectory() || metadata.isSymbolicLink()) {\n throw new Error(`Refusing unsafe user Applications directory: ${path}`);\n }\n};\n\nexport const validateDesktopZipEntries = (entries: readonly string[]) => {\n if (entries.length === 0) {\n throw new Error(\"Desktop ZIP is empty\");\n }\n entries.forEach((entry) => {\n const path = entry.endsWith(\"/\") ? entry.slice(0, -1) : entry;\n const segments = path.split(\"/\");\n if (\n !path ||\n path.includes(\"\\\\\") ||\n path.includes(\"\\0\") ||\n isAbsolute(path) ||\n segments.some(\n (segment) => !segment || segment === \".\" || segment === \"..\",\n ) ||\n segments[0] !== bundleName\n ) {\n throw new Error(`Desktop ZIP contains an unsafe path: ${entry}`);\n }\n });\n};\n\nconst assertSafeBundleTree = (bundlePath: string, directory = bundlePath) => {\n readdirSync(directory).forEach((name) => {\n const path = resolve(directory, name);\n const metadata = lstatSync(path);\n if (metadata.isSymbolicLink()) {\n const target = readlinkSync(path);\n const resolvedTarget = resolve(dirname(path), target);\n const targetRelative = relative(bundlePath, resolvedTarget);\n if (isAbsolute(target) || targetRelative.startsWith(\"..\")) {\n throw new Error(\n `Desktop bundle contains an unsafe symbolic link: ${path}`,\n );\n }\n return;\n }\n if (metadata.isDirectory()) {\n assertSafeBundleTree(bundlePath, path);\n return;\n }\n if (!metadata.isFile()) {\n throw new Error(`Desktop bundle contains an unsupported file: ${path}`);\n }\n });\n};\n\nexport const verifyDesktopBundle = (\n bundlePath: string,\n dependencies: Pick<DesktopInstallerDependencies, \"runCommand\">,\n) => {\n const metadata = lstatSync(bundlePath);\n if (!metadata.isDirectory() || metadata.isSymbolicLink()) {\n throw new Error(`${bundlePath} is not an application bundle directory`);\n }\n assertSafeBundleTree(bundlePath);\n const infoPath = resolve(bundlePath, \"Contents/Info.plist\");\n const fields = [\n [\"CFBundleIdentifier\", bundleIdentifier],\n [\"CFBundleExecutable\", \"Overmux\"],\n [\"CFBundlePackageType\", \"APPL\"],\n ] as const;\n fields.forEach(([field, expected]) => {\n const result = dependencies.runCommand(\"/usr/libexec/PlistBuddy\", [\n \"-c\",\n `Print:${field}`,\n infoPath,\n ]);\n if (result.status !== 0 || result.stdout.trim() !== expected) {\n throw new Error(`Refusing application bundle with invalid ${field}`);\n }\n });\n};\n\nconst extractAndVerifyBundle = ({\n archivePath,\n dependencies,\n stagingDirectory,\n}: {\n archivePath: string;\n dependencies: DesktopInstallerDependencies;\n stagingDirectory: string;\n}) => {\n const listing = requireCommand(dependencies, \"/usr/bin/unzip\", [\n \"-Z1\",\n archivePath,\n ]);\n validateDesktopZipEntries(listing.split(/\\r?\\n/));\n const extractionDirectory = resolve(stagingDirectory, \"extracted\");\n mkdirSync(extractionDirectory);\n requireCommand(dependencies, \"/usr/bin/ditto\", [\n \"-x\",\n \"-k\",\n archivePath,\n extractionDirectory,\n ]);\n const topLevelEntries = readdirSync(extractionDirectory);\n if (topLevelEntries.length !== 1 || topLevelEntries[0] !== bundleName) {\n throw new Error(\"Desktop ZIP must contain only Overmux.app\");\n }\n const bundlePath = resolve(extractionDirectory, bundleName);\n verifyDesktopBundle(bundlePath, dependencies);\n return bundlePath;\n};\n\nconst prepareSignature = (\n bundlePath: string,\n dependencies: DesktopInstallerDependencies,\n) => {\n const verification = dependencies.runCommand(\"/usr/bin/codesign\", [\n \"--verify\",\n \"--deep\",\n \"--strict\",\n bundlePath,\n ]);\n if (verification.status !== 0) {\n requireCommand(dependencies, \"/usr/bin/codesign\", [\n \"--force\",\n \"--deep\",\n \"--sign\",\n \"-\",\n bundlePath,\n ]);\n }\n requireCommand(dependencies, \"/usr/bin/codesign\", [\n \"--verify\",\n \"--deep\",\n \"--strict\",\n bundlePath,\n ]);\n const quarantineRemoval = dependencies.runCommand(\"/usr/bin/xattr\", [\n \"-dr\",\n \"com.apple.quarantine\",\n bundlePath,\n ]);\n if (quarantineRemoval.status !== 0 && quarantineRemoval.status !== 1) {\n throw new Error(\n `Could not remove quarantine: ${quarantineRemoval.stderr.trim()}`,\n );\n }\n};\n\nconst waitForDesktopExit = async (\n dependencies: DesktopInstallerDependencies,\n attemptsRemaining: number,\n): Promise<void> => {\n const result = dependencies.runCommand(\"/usr/bin/pgrep\", [\"-x\", \"Overmux\"]);\n if (result.status === 1) {\n return;\n }\n if (result.status !== 0) {\n throw new Error(\n `Could not confirm that Overmux quit: ${result.stderr.trim()}`,\n );\n }\n if (attemptsRemaining === 0) {\n throw new Error(\"Overmux did not quit; close it and retry the upgrade\");\n }\n await dependencies.sleep(100);\n return waitForDesktopExit(dependencies, attemptsRemaining - 1);\n};\n\nconst stopRunningDesktop = async (\n dependencies: DesktopInstallerDependencies,\n) => {\n const running = dependencies.runCommand(\"/usr/bin/pgrep\", [\"-x\", \"Overmux\"]);\n if (running.status === 1) {\n return;\n }\n if (running.status !== 0) {\n throw new Error(\n `Could not determine whether Overmux is running: ${running.stderr.trim()}`,\n );\n }\n requireCommand(dependencies, \"/usr/bin/osascript\", [\n \"-e\",\n `tell application id \"${bundleIdentifier}\" to quit`,\n ]);\n await waitForDesktopExit(dependencies, 50);\n};\n\nconst launchDesktop = (\n destination: string,\n dependencies: DesktopInstallerDependencies,\n) => requireCommand(dependencies, \"/usr/bin/open\", [destination]);\n\nconst replaceDesktop = async ({\n action,\n bundlePath,\n dependencies,\n destination,\n stagingDirectory,\n}: {\n action: DesktopAction;\n bundlePath: string;\n dependencies: DesktopInstallerDependencies;\n destination: string;\n stagingDirectory: string;\n}) => {\n const backupPath = resolve(stagingDirectory, \"Overmux.previous.app\");\n if (action === \"upgrade\") {\n verifyDesktopBundle(destination, dependencies);\n await stopRunningDesktop(dependencies);\n renameSync(destination, backupPath);\n } else if (existsSync(destination)) {\n throw new Error(\n `${destination} appeared during installation; no files were replaced`,\n );\n }\n try {\n renameSync(bundlePath, destination);\n launchDesktop(destination, dependencies);\n } catch (error) {\n rmSync(destination, { force: true, recursive: true });\n if (action === \"upgrade\" && existsSync(backupPath)) {\n renameSync(backupPath, destination);\n try {\n launchDesktop(destination, dependencies);\n } catch {\n dependencies.stderr.write(\n \"Restored the previous Overmux.app but could not relaunch it.\\n\",\n );\n }\n }\n throw error;\n }\n};\n\nexport const installDesktop = async (\n options: DesktopInstallOptions,\n overrides: Partial<DesktopInstallerDependencies> = {},\n process = globalThis.process,\n) => {\n const dependencies = { ...createDependencies(process), ...overrides };\n if (dependencies.platform !== \"darwin\") {\n throw new Error(\n \"Overmux desktop install and upgrade are only available on macOS\",\n );\n }\n const architecture = getArchitecture(dependencies.arch);\n const applicationsDirectory = resolve(\n dependencies.homeDirectory,\n \"Applications\",\n );\n assertApplicationsDirectory(applicationsDirectory);\n const destination = resolve(applicationsDirectory, bundleName);\n const exists = existsSync(destination);\n if (options.action === \"install\" && exists) {\n throw new Error(\n `${destination} already exists; run overmux desktop upgrade`,\n );\n }\n if (options.action === \"upgrade\" && !exists) {\n throw new Error(\n `${destination} is not installed; run overmux desktop install`,\n );\n }\n if (options.action === \"upgrade\") {\n verifyDesktopBundle(destination, dependencies);\n }\n if (\n options.action === \"install\" &&\n !options.yes &&\n !(await dependencies.confirm())\n ) {\n throw new Error(\"Desktop installation cancelled\");\n }\n\n mkdirSync(applicationsDirectory, { recursive: true });\n assertApplicationsDirectory(applicationsDirectory);\n const stagingDirectory = mkdtempSync(\n resolve(applicationsDirectory, \".overmux-install-\"),\n );\n try {\n const release = await dependencies.findRelease(architecture);\n const checksums = parseSha256Sums(\n await dependencies.downloadText(release.checksums),\n );\n const expectedSha256 = checksums.get(release.artifact.name);\n if (!expectedSha256) {\n throw new Error(\n `${release.tag} SHA256SUMS does not contain ${release.artifact.name}`,\n );\n }\n const archivePath = resolve(stagingDirectory, release.artifact.name);\n await dependencies.downloadVerified({\n asset: release.artifact,\n destination: archivePath,\n expectedSha256,\n });\n const bundlePath = extractAndVerifyBundle({\n archivePath,\n dependencies,\n stagingDirectory,\n });\n prepareSignature(bundlePath, dependencies);\n await replaceDesktop({\n action: options.action,\n bundlePath,\n dependencies,\n destination,\n stagingDirectory,\n });\n dependencies.stdout.write(\n `${options.action === \"install\" ? \"Installed\" : \"Upgraded\"} and launched ${destination} (${release.version}).\\n`,\n );\n } finally {\n rmSync(stagingDirectory, { force: true, recursive: true });\n }\n};\n","import { buildCommand, buildRouteMap } from \"@stricli/core\";\n\nimport type { CliCommandContext } from \"../environment\";\nimport { installDesktop } from \"./desktop-installer\";\n\ntype InstallFlags = { yes?: boolean };\n\nfunction runInstallCommand(this: CliCommandContext, flags: InstallFlags) {\n return installDesktop(\n { action: \"install\", yes: flags.yes },\n {},\n this.process,\n );\n}\n\nfunction runUpgradeCommand(this: CliCommandContext) {\n return installDesktop({ action: \"upgrade\" }, {}, this.process);\n}\n\nexport const desktopInstallCommand = buildCommand({\n func: runInstallCommand,\n parameters: {\n flags: {\n yes: {\n brief: \"Accept the unsigned application risk without prompting\",\n kind: \"boolean\",\n optional: true,\n },\n },\n positional: { kind: \"tuple\", parameters: [] },\n },\n docs: { brief: \"Install the experimental macOS desktop application\" },\n});\n\nexport const desktopUpgradeCommand = buildCommand({\n func: runUpgradeCommand,\n parameters: { positional: { kind: \"tuple\", parameters: [] } },\n docs: { brief: \"Upgrade the installed macOS desktop application\" },\n});\n\nexport const desktopRoute = buildRouteMap({\n docs: { brief: \"Install or upgrade Overmux Desktop on macOS\" },\n routes: {\n install: desktopInstallCommand,\n upgrade: desktopUpgradeCommand,\n },\n});\n","import { buildCommand } from \"@stricli/core\";\nimport { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\ntype DocsOutput = { write: (text: string) => unknown };\n\nexport const resolveInstalledDocsRoot = (moduleUrl: string) => {\n const candidates = [\"../docs\", \"./docs\", \"../../../docs\"].map((path) =>\n fileURLToPath(new URL(path, moduleUrl)),\n );\n const docsRoot = candidates.find((candidate) => existsSync(candidate));\n if (!docsRoot) {\n throw new Error(\"Installed Overmux documentation is missing\");\n }\n return resolve(docsRoot);\n};\n\nexport const createDocsCommand = ({\n docsRoot,\n output,\n}: {\n docsRoot: string;\n output: DocsOutput;\n}) =>\n buildCommand({\n func: () => {\n output.write(`${resolve(docsRoot)}\\n`);\n },\n parameters: {},\n docs: {\n brief: \"Print the installed documentation directory\",\n },\n });\n","export const runtimeWebSocketPath = \"/api/socket\";\nexport const viteHmrPath = \"/_overmux/vite/hmr\";\nexport const viteInfrastructurePath = \"/_overmux/vite/*\";\n","import { readFile, realpath } from \"node:fs/promises\";\nimport { isAbsolute, relative, resolve } from \"node:path\";\nimport { init, parse } from \"es-module-lexer\";\nimport {\n searchForWorkspaceRoot,\n type InlineConfig,\n type UserConfig,\n type ViteDevServer,\n} from \"vite\";\n\nimport { viteHmrPath } from \"../shared/routes\";\n\ntype ViteApi = {\n build: (options: { configFile: string; root: string }) => Promise<unknown>;\n createServer: (options: InlineConfig) => Promise<ViteDevServer>;\n loadConfigFromFile: (\n environment: {\n command: \"build\" | \"serve\";\n mode: \"development\" | \"production\";\n },\n configFile: string,\n configRoot: string,\n ) => Promise<{ config: UserConfig } | null | undefined>;\n};\n\ntype ManagedVite = {\n close: () => Promise<void>;\n server: ViteDevServer;\n target: string;\n};\n\nexport const loadViteRoot = async ({\n api,\n command,\n configPath,\n}: {\n api: ViteApi;\n command: \"build\" | \"serve\";\n configPath: string;\n}) => {\n const configRoot = resolve(configPath, \"..\");\n const mode = command === \"build\" ? \"production\" : \"development\";\n const loaded = await api.loadConfigFromFile(\n { command, mode },\n configPath,\n configRoot,\n );\n return {\n config: loaded?.config ?? {},\n root: resolve(configRoot, loaded?.config.root ?? \".\"),\n };\n};\n\nconst conflictingHmrKeys = [\n \"clientPort\",\n \"host\",\n \"path\",\n \"port\",\n \"protocol\",\n \"server\",\n] as const;\n\nexport const validateViteServerConfig = (config: UserConfig) => {\n const server = config.server;\n const conflict = [\"host\", \"port\", \"strictPort\", \"https\"].find(\n (key) => server?.[key as keyof typeof server] !== undefined,\n );\n if (conflict) {\n throw new Error(\n `Vite server.${conflict} is managed by \\`overmux serve\\`; remove it from the Vite config`,\n );\n }\n if (server?.hmr === false) {\n throw new Error(\n \"Vite server.hmr cannot be disabled when managed by `overmux serve`\",\n );\n }\n const hmr = server?.hmr;\n if (hmr && typeof hmr === \"object\") {\n const hmrConflict = conflictingHmrKeys.find(\n (key) => hmr[key] !== undefined,\n );\n if (hmrConflict) {\n throw new Error(\n `Vite server.hmr.${hmrConflict} is managed by \\`overmux serve\\`; remove it from the Vite config`,\n );\n }\n }\n};\n\nconst validateResolvedViteServer = (server: ViteDevServer) => {\n const config = server.config.server;\n const hmr =\n config.hmr && typeof config.hmr === \"object\" ? config.hmr : undefined;\n const changedHmrEndpoint = conflictingHmrKeys.some(\n (key) => key !== \"path\" && hmr?.[key] !== undefined,\n );\n if (\n config.host !== \"127.0.0.1\" ||\n config.port !== 0 ||\n config.strictPort !== true ||\n config.https ||\n hmr?.path !== viteHmrPath ||\n changedHmrEndpoint\n ) {\n throw new Error(\n \"A Vite plugin changed listener or HMR settings managed by `overmux serve`\",\n );\n }\n};\n\nconst pathIsWithin = (root: string, path: string) => {\n const pathFromRoot = relative(root, path);\n return !pathFromRoot.startsWith(\"..\") && !isAbsolute(pathFromRoot);\n};\n\nconst localPath = async (id: string, trustedRoots: string[]) => {\n if (id.includes(\"\\0\")) {\n return;\n }\n try {\n const path = await realpath(id.split(\"?\", 1)[0]!);\n if (\n path.includes(\"node_modules\") ||\n !trustedRoots.some((root) => pathIsWithin(root, path))\n ) {\n return;\n }\n return path;\n } catch {\n return;\n }\n};\n\nconst importsOf = async (path: string) => {\n const source = await readFile(path, \"utf8\");\n await init;\n try {\n return parse(source)[0];\n } catch {\n return [];\n }\n};\n\nconst trustedFiles = async ({\n configPath,\n server,\n trustedRoots,\n}: {\n configPath: string;\n server: ViteDevServer;\n trustedRoots: string[];\n}): Promise<Set<string>> => {\n const files = new Set<string>();\n const visit = async (path: string): Promise<void> => {\n if (files.has(path)) {\n return;\n }\n files.add(path);\n const imports = await importsOf(path);\n await Promise.all(\n imports.map(async (imported) => {\n if (!imported.n) {\n return;\n }\n const resolved = await server.pluginContainer.resolveId(\n imported.n,\n path,\n );\n const id = typeof resolved === \"string\" ? resolved : resolved?.id;\n const importedPath = id ? await localPath(id, trustedRoots) : undefined;\n if (importedPath) {\n await visit(importedPath);\n }\n }),\n );\n };\n await visit(configPath);\n return files;\n};\n\n// Watch overmux.config.ts and its imports because Vite only watches browser code.\n// Changes notify Overmux that its trusted server code needs reloading.\nexport const watchTrustedFiles = async ({\n configPath,\n onUpdate,\n server,\n}: {\n configPath: string;\n onUpdate: () => void;\n server: ViteDevServer;\n}) => {\n const logicalApplicationRoot = resolve(configPath, \"..\");\n const [applicationRoot, workspaceRoot] = await Promise.all([\n realpath(logicalApplicationRoot),\n realpath(searchForWorkspaceRoot(logicalApplicationRoot)),\n ]);\n let files = new Set<string>();\n const refresh = async () => {\n files = await trustedFiles({\n configPath: await realpath(configPath),\n server,\n trustedRoots: [applicationRoot, workspaceRoot],\n });\n server.watcher.add([...files]);\n };\n await refresh();\n const changed = (path: string) => {\n if (files.has(path)) {\n void refresh().then(onUpdate);\n }\n };\n server.watcher.on(\"change\", changed);\n return () => {\n server.watcher.off(\"change\", changed);\n };\n};\n\nexport const startManagedVite = async ({\n api,\n configPath,\n}: {\n api: ViteApi;\n configPath: string;\n}): Promise<ManagedVite> => {\n const { config, root } = await loadViteRoot({\n api,\n command: \"serve\",\n configPath,\n });\n validateViteServerConfig(config);\n const allowedRoots = [\n ...(config.server?.fs?.allow ?? []),\n root,\n await realpath(root),\n searchForWorkspaceRoot(root),\n ];\n const server = await api.createServer({\n configFile: configPath,\n root,\n server: {\n fs: { allow: [...new Set(allowedRoots)] },\n hmr: { path: viteHmrPath },\n host: \"127.0.0.1\",\n port: 0,\n strictPort: true,\n },\n });\n try {\n validateResolvedViteServer(server);\n await server.listen();\n const address = server.httpServer?.address();\n if (!address || typeof address === \"string\") {\n throw new Error(\"Private Vite server did not bind a TCP address\");\n }\n return {\n close: () => server.close(),\n server,\n target: `http://127.0.0.1:${address.port}`,\n };\n } catch (cause) {\n await server.close();\n throw cause;\n }\n};\n\nexport type { ViteApi };\n","import { loadOvermuxConfig } from \"@overmux/shared/node\";\nimport { buildCommand } from \"@stricli/core\";\nimport { access } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type { CliCommandContext, CliEnvironment } from \"../environment\";\nimport { issueLoginGrant, printLoginFallback, printLoginGrant } from \"../login\";\nimport {\n loadViteRoot,\n startManagedVite,\n watchTrustedFiles,\n type ViteApi,\n} from \"../managed-vite\";\nimport { parsePort } from \"../parse-port\";\nimport { startOvermuxServer } from \"../../server/index\";\nimport { getDefaultConfigPath } from \"../../server/paths\";\n\nexport type ServeFlags = {\n config: string;\n host?: string;\n login?: boolean;\n noBuild?: boolean;\n noLogin?: boolean;\n port?: number;\n production?: boolean;\n};\n\nexport type RunningServe = {\n close: () => Promise<void>;\n port: number;\n url: string;\n};\n\nconst loadApplicationVite = async (\n viteConfigPath: string,\n): Promise<ViteApi> => {\n const require = createRequire(viteConfigPath);\n const viteEntry = require.resolve(\"vite\");\n return import(pathToFileURL(viteEntry).href) as Promise<ViteApi>;\n};\n\n// Register before startup resolves so signals still clean up partially started servers.\nconst registerShutdown = (\n running: Promise<RunningServe>,\n process: NodeJS.Process,\n) => {\n let shuttingDown = false;\n const shutdown = async () => {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n try {\n const server = await running;\n await server.close();\n process.exitCode = 0;\n } catch {\n process.exitCode = 1;\n }\n };\n const onSignal = () => void shutdown();\n process.once(\"SIGINT\", onSignal);\n process.once(\"SIGTERM\", onSignal);\n return () => {\n process.off(\"SIGINT\", onSignal);\n process.off(\"SIGTERM\", onSignal);\n };\n};\n\nconst startDevelopmentServer = async ({\n configPath,\n host,\n port,\n shouldWatch,\n vite,\n viteConfigPath,\n}: {\n configPath: string;\n host?: string;\n port?: number;\n shouldWatch: boolean;\n vite: ViteApi;\n viteConfigPath: string;\n}): Promise<RunningServe> => {\n const managedVite = await startManagedVite({\n api: vite,\n configPath: viteConfigPath,\n });\n let server: Awaited<ReturnType<typeof startOvermuxServer>> | undefined;\n let stopWatching: () => void = () => undefined;\n try {\n if (shouldWatch) {\n stopWatching = await watchTrustedFiles({\n configPath,\n onUpdate: () => server?.announceUpdateAvailable(),\n server: managedVite.server,\n });\n }\n server = await startOvermuxServer({\n configPath,\n developmentWebTarget: managedVite.target,\n ...(host === undefined ? {} : { host }),\n ...(port === undefined ? {} : { port }),\n watch: false,\n });\n return {\n close: async () => {\n stopWatching();\n await Promise.all([server?.close(), managedVite.close()]);\n },\n port: server.port,\n url: server.url,\n };\n } catch (cause) {\n stopWatching();\n await Promise.all([server?.close(), managedVite.close()]);\n throw cause;\n }\n};\n\nconst startProductionServer = async ({\n configPath,\n host,\n noBuild,\n port,\n productionWebAssetsDir,\n vite,\n viteConfigPath,\n}: {\n configPath: string;\n host?: string;\n noBuild: boolean;\n port?: number;\n productionWebAssetsDir: string;\n vite: ViteApi;\n viteConfigPath: string;\n}): Promise<RunningServe> => {\n if (noBuild) {\n const entryPath = join(productionWebAssetsDir, \"index.html\");\n try {\n await access(entryPath);\n } catch {\n throw new Error(`Production entry does not exist: ${entryPath}`);\n }\n } else {\n const { root } = await loadViteRoot({\n api: vite,\n command: \"build\",\n configPath: viteConfigPath,\n });\n await vite.build({ configFile: viteConfigPath, root });\n }\n const server = await startOvermuxServer({\n configPath,\n ...(host === undefined ? {} : { host }),\n ...(port === undefined ? {} : { port }),\n });\n return { close: server.close, port: server.port, url: server.url };\n};\n\nexport const resolveServeLogin = (\n flags: Pick<ServeFlags, \"login\" | \"noLogin\">,\n environment: Pick<CliEnvironment, \"isHumanUser\">,\n) => {\n if (flags.login && flags.noLogin) {\n throw new Error(\"Only set one of: --login and --no-login\");\n }\n return flags.login || (!flags.noLogin && environment.isHumanUser);\n};\n\nconst announceServeLogin = async ({\n createLogin,\n port,\n process,\n}: {\n createLogin: boolean;\n port: number;\n process: NodeJS.Process;\n}) => {\n if (!createLogin) {\n printLoginFallback(port, process);\n return;\n }\n printLoginGrant({ ...(await issueLoginGrant(port)), output: process });\n};\n\nexport const runServe = async ({\n environment,\n flags,\n process,\n}: {\n environment: Pick<CliEnvironment, \"isHumanUser\">;\n flags: ServeFlags;\n process: NodeJS.Process;\n}) => {\n if (flags.noBuild && !flags.production) {\n throw new Error(\"--no-build requires --production\");\n }\n const createLogin = resolveServeLogin(flags, environment);\n const configPath = resolve(flags.config);\n const { config } = await loadOvermuxConfig({ configPath });\n if (!config.vite) {\n throw new Error(\"Overmux config must define a Vite config path in `vite`\");\n }\n const viteConfigPath = resolve(dirname(configPath), config.vite);\n const vite = await loadApplicationVite(viteConfigPath);\n let runningPromise: Promise<RunningServe>;\n if (flags.production) {\n if (!config.productionWebAssetsDir) {\n throw new Error(\n \"Overmux config must define `productionWebAssetsDir` for production serving\",\n );\n }\n runningPromise = startProductionServer({\n configPath,\n host: flags.host,\n noBuild: flags.noBuild ?? false,\n port: flags.port,\n productionWebAssetsDir: resolve(\n dirname(configPath),\n config.productionWebAssetsDir,\n ),\n vite,\n viteConfigPath,\n });\n } else {\n runningPromise = startDevelopmentServer({\n configPath,\n host: flags.host,\n port: flags.port,\n shouldWatch: config.watch ?? true,\n vite,\n viteConfigPath,\n });\n }\n const unregisterShutdown = registerShutdown(runningPromise, process);\n let running: RunningServe | undefined;\n try {\n running = await runningPromise;\n process.stdout.write(\n `Overmux listening on ${config.auth.origins?.[0] ?? running.url}\\n`,\n );\n await announceServeLogin({ createLogin, port: running.port, process });\n } catch (cause) {\n unregisterShutdown();\n await running?.close().catch(() => undefined);\n throw cause;\n }\n};\n\nfunction runServeCommand(this: CliCommandContext, flags: ServeFlags) {\n return runServe({\n environment: this.environment,\n flags,\n process: this.process,\n });\n}\n\nexport const serveCommand = buildCommand({\n func: runServeCommand,\n parameters: {\n aliases: { c: \"config\" },\n flags: {\n config: {\n brief: \"Configuration file\",\n default: getDefaultConfigPath(),\n kind: \"parsed\",\n parse: String,\n placeholder: \"path\",\n },\n host: {\n brief: \"Override the public listener host\",\n kind: \"parsed\",\n optional: true,\n parse: String,\n placeholder: \"host\",\n },\n login: {\n brief: \"Create a browser login grant after startup\",\n kind: \"boolean\",\n optional: true,\n withNegated: false,\n },\n noBuild: {\n brief: \"Serve existing production assets without building\",\n kind: \"boolean\",\n optional: true,\n },\n noLogin: {\n brief: \"Do not create a browser login grant after startup\",\n kind: \"boolean\",\n optional: true,\n withNegated: false,\n },\n port: {\n brief: \"Override the public listener port\",\n kind: \"parsed\",\n optional: true,\n parse: (value) => {\n const port = parsePort(value);\n if (port instanceof Error) {\n throw port;\n }\n return port;\n },\n placeholder: \"port\",\n },\n production: {\n brief: \"Build and serve the production web application\",\n kind: \"boolean\",\n optional: true,\n },\n },\n },\n docs: {\n brief: \"Serve the Overmux web application\",\n fullDescription:\n \"Starts private Vite behind the authenticated Overmux gateway, or builds and serves production assets with --production.\",\n },\n});\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar src_exports = {};\n__export(src_exports, {\n KNOWN_AGENTS: () => KNOWN_AGENTS,\n determineAgent: () => determineAgent\n});\nmodule.exports = __toCommonJS(src_exports);\nvar import_promises = require(\"node:fs/promises\");\nvar import_node_fs = require(\"node:fs\");\nconst DEVIN_LOCAL_PATH = \"/opt/.devin\";\nconst CURSOR = \"cursor\";\nconst CURSOR_CLI = \"cursor-cli\";\nconst CLAUDE = \"claude\";\nconst COWORK = \"cowork\";\nconst DEVIN = \"devin\";\nconst REPLIT = \"replit\";\nconst GEMINI = \"gemini\";\nconst CODEX = \"codex\";\nconst ANTIGRAVITY = \"antigravity\";\nconst AUGMENT_CLI = \"augment-cli\";\nconst OPENCODE = \"opencode\";\nconst GITHUB_COPILOT = \"github-copilot\";\nconst GITHUB_COPILOT_CLI = \"github-copilot-cli\";\nconst V0 = \"v0\";\nconst KNOWN_AGENTS = {\n CURSOR,\n CURSOR_CLI,\n CLAUDE,\n COWORK,\n DEVIN,\n REPLIT,\n GEMINI,\n CODEX,\n ANTIGRAVITY,\n AUGMENT_CLI,\n OPENCODE,\n GITHUB_COPILOT,\n V0\n};\nasync function determineAgent() {\n if (process.env.AI_AGENT) {\n const name = process.env.AI_AGENT.trim();\n if (name) {\n if (name === GITHUB_COPILOT || name === GITHUB_COPILOT_CLI) {\n return {\n isAgent: true,\n agent: { name: GITHUB_COPILOT }\n };\n }\n if (name === V0) {\n return {\n isAgent: true,\n agent: { name: V0 }\n };\n }\n return {\n isAgent: true,\n agent: { name }\n };\n }\n }\n if (process.env.CURSOR_TRACE_ID) {\n return { isAgent: true, agent: { name: CURSOR } };\n }\n if (process.env.CURSOR_AGENT || process.env.CURSOR_EXTENSION_HOST_ROLE === \"agent-exec\") {\n return { isAgent: true, agent: { name: CURSOR_CLI } };\n }\n if (process.env.GEMINI_CLI) {\n return { isAgent: true, agent: { name: GEMINI } };\n }\n if (process.env.CODEX_SANDBOX || process.env.CODEX_CI || process.env.CODEX_THREAD_ID) {\n return { isAgent: true, agent: { name: CODEX } };\n }\n if (process.env.ANTIGRAVITY_AGENT) {\n return { isAgent: true, agent: { name: ANTIGRAVITY } };\n }\n if (process.env.AUGMENT_AGENT) {\n return { isAgent: true, agent: { name: AUGMENT_CLI } };\n }\n if (process.env.OPENCODE_CLIENT) {\n return { isAgent: true, agent: { name: OPENCODE } };\n }\n if (process.env.CLAUDECODE || process.env.CLAUDE_CODE) {\n if (process.env.CLAUDE_CODE_IS_COWORK) {\n return { isAgent: true, agent: { name: COWORK } };\n }\n return { isAgent: true, agent: { name: CLAUDE } };\n }\n if (process.env.REPL_ID) {\n return { isAgent: true, agent: { name: REPLIT } };\n }\n if (process.env.COPILOT_MODEL || process.env.COPILOT_ALLOW_ALL || process.env.COPILOT_GITHUB_TOKEN) {\n return { isAgent: true, agent: { name: GITHUB_COPILOT } };\n }\n try {\n await (0, import_promises.access)(DEVIN_LOCAL_PATH, import_node_fs.constants.F_OK);\n return { isAgent: true, agent: { name: DEVIN } };\n } catch (_error) {\n }\n return { isAgent: false, agent: void 0 };\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n KNOWN_AGENTS,\n determineAgent\n});\n","[\n {\n \"name\": \"Agola CI\",\n \"constant\": \"AGOLA\",\n \"env\": \"AGOLA_GIT_REF\",\n \"pr\": \"AGOLA_PULL_REQUEST_ID\"\n },\n {\n \"name\": \"Alpic\",\n \"constant\": \"ALPIC\",\n \"env\": \"ALPIC_HOST\"\n },\n {\n \"name\": \"Appcircle\",\n \"constant\": \"APPCIRCLE\",\n \"env\": \"AC_APPCIRCLE\",\n \"pr\": {\n \"env\": \"AC_GIT_PR\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"AppVeyor\",\n \"constant\": \"APPVEYOR\",\n \"env\": \"APPVEYOR\",\n \"pr\": \"APPVEYOR_PULL_REQUEST_NUMBER\"\n },\n {\n \"name\": \"AWS CodeBuild\",\n \"constant\": \"CODEBUILD\",\n \"env\": \"CODEBUILD_BUILD_ARN\",\n \"pr\": {\n \"env\": \"CODEBUILD_WEBHOOK_EVENT\",\n \"any\": [\n \"PULL_REQUEST_CREATED\",\n \"PULL_REQUEST_UPDATED\",\n \"PULL_REQUEST_REOPENED\"\n ]\n }\n },\n {\n \"name\": \"Azure Pipelines\",\n \"constant\": \"AZURE_PIPELINES\",\n \"env\": \"TF_BUILD\",\n \"pr\": {\n \"BUILD_REASON\": \"PullRequest\"\n }\n },\n {\n \"name\": \"Bamboo\",\n \"constant\": \"BAMBOO\",\n \"env\": \"bamboo_planKey\"\n },\n {\n \"name\": \"Bitbucket Pipelines\",\n \"constant\": \"BITBUCKET\",\n \"env\": \"BITBUCKET_COMMIT\",\n \"pr\": \"BITBUCKET_PR_ID\"\n },\n {\n \"name\": \"Bitrise\",\n \"constant\": \"BITRISE\",\n \"env\": \"BITRISE_IO\",\n \"pr\": \"BITRISE_PULL_REQUEST\"\n },\n {\n \"name\": \"Buddy\",\n \"constant\": \"BUDDY\",\n \"env\": \"BUDDY_WORKSPACE_ID\",\n \"pr\": \"BUDDY_EXECUTION_PULL_REQUEST_ID\"\n },\n {\n \"name\": \"Buildkite\",\n \"constant\": \"BUILDKITE\",\n \"env\": \"BUILDKITE\",\n \"pr\": {\n \"env\": \"BUILDKITE_PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"CircleCI\",\n \"constant\": \"CIRCLE\",\n \"env\": \"CIRCLECI\",\n \"pr\": \"CIRCLE_PULL_REQUEST\"\n },\n {\n \"name\": \"Cirrus CI\",\n \"constant\": \"CIRRUS\",\n \"env\": \"CIRRUS_CI\",\n \"pr\": \"CIRRUS_PR\"\n },\n {\n \"name\": \"Cloudflare Pages\",\n \"constant\": \"CLOUDFLARE_PAGES\",\n \"env\": \"CF_PAGES\"\n },\n {\n \"name\": \"Cloudflare Workers\",\n \"constant\": \"CLOUDFLARE_WORKERS\",\n \"env\": \"WORKERS_CI\"\n },\n {\n \"name\": \"Codefresh\",\n \"constant\": \"CODEFRESH\",\n \"env\": \"CF_BUILD_ID\",\n \"pr\": {\n \"any\": [\n \"CF_PULL_REQUEST_NUMBER\",\n \"CF_PULL_REQUEST_ID\"\n ]\n }\n },\n {\n \"name\": \"Codemagic\",\n \"constant\": \"CODEMAGIC\",\n \"env\": \"CM_BUILD_ID\",\n \"pr\": \"CM_PULL_REQUEST\"\n },\n {\n \"name\": \"Codeship\",\n \"constant\": \"CODESHIP\",\n \"env\": {\n \"CI_NAME\": \"codeship\"\n }\n },\n {\n \"name\": \"Drone\",\n \"constant\": \"DRONE\",\n \"env\": \"DRONE\",\n \"pr\": {\n \"DRONE_BUILD_EVENT\": \"pull_request\"\n }\n },\n {\n \"name\": \"dsari\",\n \"constant\": \"DSARI\",\n \"env\": \"DSARI\"\n },\n {\n \"name\": \"Earthly\",\n \"constant\": \"EARTHLY\",\n \"env\": \"EARTHLY_CI\"\n },\n {\n \"name\": \"Expo Application Services\",\n \"constant\": \"EAS\",\n \"env\": \"EAS_BUILD\"\n },\n {\n \"name\": \"Gerrit\",\n \"constant\": \"GERRIT\",\n \"env\": \"GERRIT_PROJECT\"\n },\n {\n \"name\": \"Gitea Actions\",\n \"constant\": \"GITEA_ACTIONS\",\n \"env\": \"GITEA_ACTIONS\"\n },\n {\n \"name\": \"GitHub Actions\",\n \"constant\": \"GITHUB_ACTIONS\",\n \"env\": \"GITHUB_ACTIONS\",\n \"pr\": {\n \"GITHUB_EVENT_NAME\": \"pull_request\"\n }\n },\n {\n \"name\": \"GitLab CI\",\n \"constant\": \"GITLAB\",\n \"env\": \"GITLAB_CI\",\n \"pr\": \"CI_MERGE_REQUEST_ID\"\n },\n {\n \"name\": \"GoCD\",\n \"constant\": \"GOCD\",\n \"env\": \"GO_PIPELINE_LABEL\"\n },\n {\n \"name\": \"Google Cloud Build\",\n \"constant\": \"GOOGLE_CLOUD_BUILD\",\n \"env\": \"BUILDER_OUTPUT\"\n },\n {\n \"name\": \"Harness CI\",\n \"constant\": \"HARNESS\",\n \"env\": \"HARNESS_BUILD_ID\"\n },\n {\n \"name\": \"Heroku\",\n \"constant\": \"HEROKU\",\n \"env\": {\n \"env\": \"NODE\",\n \"includes\": \"/app/.heroku/node/bin/node\"\n }\n },\n {\n \"name\": \"Hudson\",\n \"constant\": \"HUDSON\",\n \"env\": \"HUDSON_URL\"\n },\n {\n \"name\": \"Jenkins\",\n \"constant\": \"JENKINS\",\n \"env\": [\n \"JENKINS_URL\",\n \"BUILD_ID\"\n ],\n \"pr\": {\n \"any\": [\n \"ghprbPullId\",\n \"CHANGE_ID\"\n ]\n }\n },\n {\n \"name\": \"LayerCI\",\n \"constant\": \"LAYERCI\",\n \"env\": \"LAYERCI\",\n \"pr\": \"LAYERCI_PULL_REQUEST\"\n },\n {\n \"name\": \"Magnum CI\",\n \"constant\": \"MAGNUM\",\n \"env\": \"MAGNUM\"\n },\n {\n \"name\": \"Netlify CI\",\n \"constant\": \"NETLIFY\",\n \"env\": \"NETLIFY\",\n \"pr\": {\n \"env\": \"PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"Nevercode\",\n \"constant\": \"NEVERCODE\",\n \"env\": \"NEVERCODE\",\n \"pr\": {\n \"env\": \"NEVERCODE_PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"Prow\",\n \"constant\": \"PROW\",\n \"env\": \"PROW_JOB_ID\"\n },\n {\n \"name\": \"ReleaseHub\",\n \"constant\": \"RELEASEHUB\",\n \"env\": \"RELEASE_BUILD_ID\"\n },\n {\n \"name\": \"Render\",\n \"constant\": \"RENDER\",\n \"env\": \"RENDER\",\n \"pr\": {\n \"IS_PULL_REQUEST\": \"true\"\n }\n },\n {\n \"name\": \"Sail CI\",\n \"constant\": \"SAIL\",\n \"env\": \"SAILCI\",\n \"pr\": \"SAIL_PULL_REQUEST_NUMBER\"\n },\n {\n \"name\": \"Screwdriver\",\n \"constant\": \"SCREWDRIVER\",\n \"env\": \"SCREWDRIVER\",\n \"pr\": {\n \"env\": \"SD_PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"Semaphore\",\n \"constant\": \"SEMAPHORE\",\n \"env\": \"SEMAPHORE\",\n \"pr\": \"PULL_REQUEST_NUMBER\"\n },\n {\n \"name\": \"Sourcehut\",\n \"constant\": \"SOURCEHUT\",\n \"env\": {\n \"CI_NAME\": \"sourcehut\"\n }\n },\n {\n \"name\": \"Strider CD\",\n \"constant\": \"STRIDER\",\n \"env\": \"STRIDER\"\n },\n {\n \"name\": \"TaskCluster\",\n \"constant\": \"TASKCLUSTER\",\n \"env\": [\n \"TASK_ID\",\n \"RUN_ID\"\n ]\n },\n {\n \"name\": \"TeamCity\",\n \"constant\": \"TEAMCITY\",\n \"env\": \"TEAMCITY_VERSION\"\n },\n {\n \"name\": \"Travis CI\",\n \"constant\": \"TRAVIS\",\n \"env\": \"TRAVIS\",\n \"pr\": {\n \"env\": \"TRAVIS_PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"Vela\",\n \"constant\": \"VELA\",\n \"env\": \"VELA\",\n \"pr\": {\n \"VELA_PULL_REQUEST\": \"1\"\n }\n },\n {\n \"name\": \"Vercel\",\n \"constant\": \"VERCEL\",\n \"env\": {\n \"any\": [\n \"NOW_BUILDER\",\n \"VERCEL\"\n ]\n },\n \"pr\": \"VERCEL_GIT_PULL_REQUEST_ID\"\n },\n {\n \"name\": \"Visual Studio App Center\",\n \"constant\": \"APPCENTER\",\n \"env\": \"APPCENTER_BUILD_ID\"\n },\n {\n \"name\": \"Woodpecker\",\n \"constant\": \"WOODPECKER\",\n \"env\": {\n \"CI\": \"woodpecker\"\n },\n \"pr\": {\n \"CI_BUILD_EVENT\": \"pull_request\"\n }\n },\n {\n \"name\": \"Xcode Cloud\",\n \"constant\": \"XCODE_CLOUD\",\n \"env\": \"CI_XCODE_PROJECT\",\n \"pr\": \"CI_PULL_REQUEST_NUMBER\"\n },\n {\n \"name\": \"Xcode Server\",\n \"constant\": \"XCODE_SERVER\",\n \"env\": \"XCS\"\n }\n]\n","'use strict'\n\nconst vendors = require('./vendors.json')\n\nconst env = process.env\n\n// Used for testing only\nObject.defineProperty(exports, '_vendors', {\n value: vendors.map(function (v) {\n return v.constant\n })\n})\n\nexports.name = null\nexports.isPR = null\nexports.id = null\n\nif (env.CI !== 'false') {\n vendors.forEach(function (vendor) {\n const envs = Array.isArray(vendor.env) ? vendor.env : [vendor.env]\n const isCI = envs.every(function (obj) {\n return checkEnv(obj)\n })\n\n exports[vendor.constant] = isCI\n\n if (!isCI) {\n return\n }\n\n exports.name = vendor.name\n exports.isPR = checkPR(vendor)\n exports.id = vendor.constant\n })\n}\n\nexports.isCI = !!(\n env.CI !== 'false' && // Bypass all checks if CI env is explicitly set to 'false'\n (env.BUILD_ID || // Jenkins, Cloudbees\n env.BUILD_NUMBER || // Jenkins, TeamCity\n env.CI || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari, Cloudflare Pages/Workers\n env.CI_APP_ID || // Appflow\n env.CI_BUILD_ID || // Appflow\n env.CI_BUILD_NUMBER || // Appflow\n env.CI_NAME || // Codeship and others\n env.CONTINUOUS_INTEGRATION || // Travis CI, Cirrus CI\n env.RUN_ID || // TaskCluster, dsari\n exports.name ||\n false)\n)\n\nfunction checkEnv (obj) {\n // \"env\": \"CIRRUS\"\n if (typeof obj === 'string') return !!env[obj]\n\n // \"env\": { \"env\": \"NODE\", \"includes\": \"/app/.heroku/node/bin/node\" }\n if ('env' in obj) {\n // Currently there are no other types, uncomment when there are\n // if ('includes' in obj) {\n return env[obj.env] && env[obj.env].includes(obj.includes)\n // }\n }\n\n if ('any' in obj) {\n return obj.any.some(function (k) {\n return !!env[k]\n })\n }\n\n return Object.keys(obj).every(function (k) {\n return env[k] === obj[k]\n })\n}\n\nfunction checkPR (vendor) {\n switch (typeof vendor.pr) {\n case 'string':\n // \"pr\": \"CIRRUS_PR\"\n return !!env[vendor.pr]\n case 'object':\n if ('env' in vendor.pr) {\n if ('any' in vendor.pr) {\n // \"pr\": { \"env\": \"CODEBUILD_WEBHOOK_EVENT\", \"any\": [\"PULL_REQUEST_CREATED\", \"PULL_REQUEST_UPDATED\"] }\n return vendor.pr.any.some(function (key) {\n return env[vendor.pr.env] === key\n })\n } else {\n // \"pr\": { \"env\": \"BUILDKITE_PULL_REQUEST\", \"ne\": \"false\" }\n return vendor.pr.env in env && env[vendor.pr.env] !== vendor.pr.ne\n }\n } else if ('any' in vendor.pr) {\n // \"pr\": { \"any\": [\"ghprbPullId\", \"CHANGE_ID\"] }\n return vendor.pr.any.some(function (key) {\n return !!env[key]\n })\n } else {\n // \"pr\": { \"DRONE_BUILD_EVENT\": \"pull_request\" }\n return checkEnv(vendor.pr)\n }\n default:\n // PR detection not supported for this vendor\n return null\n }\n}\n","import type { CommandContext } from \"@stricli/core\";\nimport { determineAgent } from \"@vercel/detect-agent\";\nimport * as ciInfo from \"ci-info\";\n\nexport type CliEnvironment = {\n readonly agent?: string;\n readonly isAgent: boolean;\n readonly isCI: boolean;\n readonly isHumanUser: boolean;\n readonly isInteractiveTerminal: boolean;\n};\n\nexport type CliCommandContext = CommandContext & {\n readonly environment: CliEnvironment;\n readonly process: NodeJS.Process;\n};\n\ntype CliEnvironmentSignals = {\n readonly agent?: string;\n readonly isAgent: boolean;\n readonly isCI: boolean;\n readonly stdinIsTTY?: boolean;\n readonly stdoutIsTTY?: boolean;\n};\n\nexport const classifyCliEnvironment = ({\n agent,\n isAgent,\n isCI,\n stdinIsTTY,\n stdoutIsTTY,\n}: CliEnvironmentSignals): CliEnvironment => {\n const isInteractiveTerminal = stdinIsTTY === true && stdoutIsTTY === true;\n return {\n agent,\n isAgent,\n isCI,\n isHumanUser: isInteractiveTerminal && !isCI && !isAgent,\n isInteractiveTerminal,\n };\n};\n\nexport const detectCliEnvironment = async (\n process: Pick<NodeJS.Process, \"stdin\" | \"stdout\"> = globalThis.process,\n): Promise<CliEnvironment> => {\n const detectedAgent = await determineAgent();\n return classifyCliEnvironment({\n agent: detectedAgent.agent?.name,\n isAgent: detectedAgent.isAgent,\n isCI: ciInfo.isCI,\n stdinIsTTY: process.stdin.isTTY,\n stdoutIsTTY: process.stdout.isTTY,\n });\n};\n","import {\n buildApplication,\n buildRouteMap,\n help,\n run,\n text_en,\n} from \"@stricli/core\";\n\nimport { createAiRoute } from \"./commands/ai\";\nimport { authRoute } from \"./commands/auth\";\nimport { checkCommand } from \"./commands/check\";\nimport { callCommand } from \"./commands/call\";\nimport { desktopRoute } from \"./commands/desktop\";\nimport { createDocsCommand, resolveInstalledDocsRoot } from \"./commands/docs\";\nimport { serveCommand } from \"./commands/serve\";\nimport { detectCliEnvironment, type CliCommandContext } from \"./environment\";\n\nexport const createCliApp = (process = globalThis.process) =>\n buildApplication<CliCommandContext>(\n buildRouteMap<string, CliCommandContext>({\n docs: { brief: \"Serve, validate, or invoke Overmux operations\" },\n routes: {\n ai: createAiRoute(process),\n auth: authRoute,\n check: checkCommand,\n call: callCommand,\n desktop: desktopRoute,\n docs: createDocsCommand({\n docsRoot: resolveInstalledDocsRoot(import.meta.url),\n output: process.stdout,\n }),\n serve: serveCommand,\n },\n }),\n {\n name: \"overmux\",\n localization: {\n text: {\n ...text_en,\n commandErrorResult: (error) => error.message,\n exceptionWhileRunningCommand: (error) =>\n error instanceof Error ? error.message : String(error),\n },\n },\n scanner: {\n allowArgumentEscapeSequence: true,\n caseStyle: \"allow-kebab-for-camel\",\n },\n },\n {\n help: help({\n brief: \"Show this help\",\n defaultForRouteMap: true,\n formatting: {\n caseStyle: \"convert-camel-to-kebab\",\n onlyRequiredInUsageLine: false,\n useAliasInUsageLine: false,\n },\n }),\n },\n );\n\nexport const runCli = async (\n args: readonly string[],\n process = globalThis.process,\n) => {\n const environment = await detectCliEnvironment(process);\n return run(createCliApp(process), args[0] === \"--\" ? args.slice(1) : args, {\n environment,\n process,\n });\n};\n","import { runCli } from \"./app\";\n\nawait runCli(process.argv.slice(2));\n"],"x_google_ignoreList":[0,35,36,37],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bin.js","names":["runCommand"],"sources":["../../../../node_modules/.pnpm/@stricli+core@1.3.0/node_modules/@stricli/core/dist/index.js","../../shared/dist/node/index.js","../../shared/dist/index.js","../src/public/ai-context.ts","../src/internal/server/paths.ts","../src/internal/cli/commands/ai.ts","../src/internal/server/notifications/private-json-file.ts","../src/internal/server/auth/instance-control.ts","../src/internal/cli/login.ts","../src/internal/cli/parse-port.ts","../src/internal/cli/commands/auth.ts","../src/internal/shared/background-notifications.ts","../src/internal/shared/protocol.ts","../src/internal/server/runtime/runtime-lifecycle.ts","../src/internal/server/runtime/runtime-operations.ts","../src/public/contracts.ts","../src/internal/server/runtime/resource-dependency-graph.ts","../src/internal/server/runtime/runtime-resources.ts","../src/internal/server/runtime/runtime-streams.ts","../src/internal/server/runtime/create-runtime.ts","../src/internal/server/check-overmux.ts","../src/internal/server/server-logger.ts","../src/internal/server/coordinator/ipc-protocol.ts","../src/internal/server/coordinator/update-watcher.ts","../src/internal/server/coordinator/server-coordinator.ts","../src/internal/server/start-overmux-server.ts","../src/internal/cli/commands/check.ts","../src/internal/cli/commands/call.ts","../src/internal/cli/commands/desktop-release.ts","../src/internal/cli/commands/desktop-installer.ts","../src/internal/cli/commands/desktop.ts","../src/internal/cli/commands/docs.ts","../src/internal/cli/commands/init-template.ts","../src/internal/cli/commands/init.ts","../src/internal/cli/commands/zellij-install.ts","../src/internal/cli/commands/integration.ts","../src/internal/shared/routes.ts","../src/internal/cli/managed-vite.ts","../src/internal/cli/commands/serve.ts","../../../../node_modules/.pnpm/@vercel+detect-agent@1.2.5/node_modules/@vercel/detect-agent/dist/index.js","../../../../node_modules/.pnpm/ci-info@4.4.0/node_modules/ci-info/vendors.json","../../../../node_modules/.pnpm/ci-info@4.4.0/node_modules/ci-info/index.js","../src/internal/cli/environment.ts","../src/internal/cli/app.ts","../src/internal/cli/bin.ts"],"sourcesContent":["// src/exit-code.ts\nvar ExitCode = {\n /**\n * Error was thrown by or otherwise caused by an integration.\n */\n IntegrationError: -10,\n /**\n * Unable to find a command in the application with the given command line arguments.\n */\n UnknownCommand: -5,\n /**\n * Unable to parse the specified arguments.\n */\n InvalidArgument: -4,\n /**\n * An error was thrown while loading the context for a command run.\n */\n ContextLoadError: -3,\n /**\n * Failed to load command module.\n */\n CommandLoadError: -2,\n /**\n * An unexpected error was thrown by or not caught by this library.\n */\n InternalError: -1,\n /**\n * Command executed successfully.\n */\n Success: 0,\n /**\n * Command module unexpectedly threw an error.\n */\n CommandRunError: 1\n};\n\n// src/util/case-style.ts\nfunction convertKebabCaseToCamelCase(str) {\n return str.replace(/-./g, (match) => match[1].toUpperCase());\n}\nfunction convertCamelCaseToKebabCase(name) {\n return Array.from(name).map((char, i) => {\n const upper = char.toUpperCase();\n const lower = char.toLowerCase();\n if (i === 0 || upper !== char || upper === lower) {\n return char;\n }\n return `-${lower}`;\n }).join(\"\");\n}\n\n// src/util/distance.ts\nfunction newSparseMatrix(defaultValue) {\n const values = /* @__PURE__ */ new Map();\n return {\n get: (...args) => {\n return values.get(args.join(\",\")) ?? defaultValue;\n },\n set: (value, ...args) => {\n values.set(args.join(\",\"), value);\n }\n // toString([iMin, iMax], [jMin, jMax]) {\n // const rows: string[] = [];\n // for (let i = iMin; i <= iMax; ++i) {\n // const row: string[] = [];\n // for (let j = jMin; j <= jMax; ++j) {\n // row.push(this.get(i, j).toString());\n // }\n // rows.push(row.join(\", \"));\n // }\n // return rows.join(\"\\n\");\n // },\n };\n}\nfunction damerauLevenshtein(a, b, options) {\n const { threshold, weights } = options;\n if (a === b) {\n return 0;\n }\n const lengthDiff = Math.abs(a.length - b.length);\n if (typeof threshold === \"number\" && lengthDiff > threshold) {\n return Infinity;\n }\n const matrix = newSparseMatrix(Infinity);\n matrix.set(0, -1, -1);\n for (let j = 0; j < b.length; ++j) {\n matrix.set((j + 1) * weights.insertion, -1, j);\n }\n for (let i = 0; i < a.length; ++i) {\n matrix.set((i + 1) * weights.deletion, i, -1);\n }\n let prevRowMinDistance = -Infinity;\n for (let i = 0; i < a.length; ++i) {\n let rowMinDistance = Infinity;\n for (let j = 0; j <= b.length - 1; ++j) {\n const cost = a[i] === b[j] ? 0 : 1;\n const distances = [\n // deletion\n matrix.get(i - 1, j) + weights.deletion,\n // insertion\n matrix.get(i, j - 1) + weights.insertion,\n // substitution\n matrix.get(i - 1, j - 1) + cost * weights.substitution\n ];\n if (a[i] === b[j - 1] && a[i - 1] === b[j]) {\n distances.push(matrix.get(i - 2, j - 2) + cost * weights.transposition);\n }\n const minDistance = Math.min(...distances);\n matrix.set(minDistance, i, j);\n if (minDistance < rowMinDistance) {\n rowMinDistance = minDistance;\n }\n }\n if (rowMinDistance > threshold) {\n if (prevRowMinDistance > threshold) {\n return Infinity;\n }\n prevRowMinDistance = rowMinDistance;\n } else {\n prevRowMinDistance = -Infinity;\n }\n }\n const distance = matrix.get(a.length - 1, b.length - 1);\n if (distance > threshold) {\n return Infinity;\n }\n return distance;\n}\nfunction compareAlternatives(a, b, target) {\n const cmp = a[1] - b[1];\n if (cmp !== 0) {\n return cmp;\n }\n const aStartsWith = a[0].startsWith(target);\n const bStartsWith = b[0].startsWith(target);\n if (aStartsWith && !bStartsWith) {\n return -1;\n } else if (!aStartsWith && bStartsWith) {\n return 1;\n }\n return a[0].localeCompare(b[0]);\n}\nfunction filterClosestAlternatives(target, alternatives, options) {\n const validAlternatives = alternatives.map((alt) => [alt, damerauLevenshtein(target, alt, options)]).filter(([, dist]) => dist <= options.threshold);\n const minDistance = Math.min(...validAlternatives.map(([, dist]) => dist));\n return validAlternatives.filter(([, dist]) => dist === minDistance).sort((a, b) => compareAlternatives(a, b, target)).map(([alt]) => alt);\n}\n\n// src/util/error.ts\nvar InternalError = class extends Error {\n};\nfunction formatException(exc) {\n if (exc instanceof Error) {\n return exc.stack ?? String(exc);\n }\n return String(exc);\n}\n\n// src/util/formatting.ts\nfunction maximum(arr1, arr2) {\n const maxValues = [];\n const maxLength = Math.max(arr1.length, arr2.length);\n for (let i = 0; i < maxLength; ++i) {\n maxValues[i] = Math.max(arr1[i], arr2[i]);\n }\n return maxValues;\n}\nfunction formatRowsWithColumns(cells, separators) {\n if (cells.length === 0) {\n return [];\n }\n const startingLengths = Array(Math.max(...cells.map((cellRow) => cellRow.length))).fill(0, 0);\n const maxLengths = cells.reduce((acc, cellRow) => {\n const lengths = cellRow.map((cell) => cell.length);\n return maximum(acc, lengths);\n }, startingLengths);\n return cells.map((cellRow) => {\n const firstCell = (cellRow[0] ?? \"\").padEnd(maxLengths[0]);\n return cellRow.slice(1).reduce(\n (parts, str, i, arr) => {\n const paddedStr = arr.length === i + 1 ? str : str.padEnd(maxLengths[i + 1]);\n return [...parts, separators?.[i] ?? \" \", paddedStr];\n },\n [firstCell]\n ).join(\"\").trimEnd();\n });\n}\nfunction joinWithGrammar(parts, grammar) {\n if (parts.length <= 1) {\n return parts[0] ?? \"\";\n }\n if (parts.length === 2) {\n return parts.join(` ${grammar.conjunction} `);\n }\n let allButLast = parts.slice(0, parts.length - 1).join(\", \");\n if (grammar.serialComma) {\n allButLast += \",\";\n }\n return [allButLast, grammar.conjunction, parts[parts.length - 1]].join(\" \");\n}\n\n// src/util/array.ts\nfunction group(array, callback) {\n return array.reduce((groupings, item) => {\n const key = callback(item);\n const groupItems = groupings[key] ?? [];\n groupItems.push(item);\n groupings[key] = groupItems;\n return groupings;\n }, {});\n}\nfunction groupBy(array, selector) {\n return group(array, (item) => item[selector]);\n}\n\n// src/util/promise.ts\nasync function allSettledOrElse(values) {\n const results = await Promise.allSettled(values);\n const grouped = groupBy(results, \"status\");\n if (grouped.rejected && grouped.rejected.length > 0) {\n return { status: \"rejected\", reasons: grouped.rejected.map((result) => result.reason) };\n }\n return { status: \"fulfilled\", value: grouped.fulfilled?.map((result) => result.value) ?? [] };\n}\n\n// src/parameter/parser/boolean.ts\nvar booleanParser = (input) => {\n switch (input.toLowerCase()) {\n case \"true\":\n return true;\n case \"false\":\n return false;\n }\n throw new SyntaxError(`Cannot convert ${input} to a boolean`);\n};\nvar TRUTHY_VALUES = /* @__PURE__ */ new Set([\"true\", \"t\", \"yes\", \"y\", \"on\", \"1\", \"\"]);\nvar FALSY_VALUES = /* @__PURE__ */ new Set([\"false\", \"f\", \"no\", \"n\", \"off\", \"0\"]);\nvar looseBooleanParser = (input) => {\n const value = input.toLowerCase();\n if (TRUTHY_VALUES.has(value)) {\n return true;\n }\n if (FALSY_VALUES.has(value)) {\n return false;\n }\n throw new SyntaxError(`Cannot convert ${input} to a boolean`);\n};\n\n// src/parameter/parser/number.ts\nvar numberParser = (input) => {\n const value = Number(input);\n if (Number.isNaN(value)) {\n throw new SyntaxError(`Cannot convert ${input} to a number`);\n }\n return value;\n};\n\n// src/parameter/scanner.ts\nvar ArgumentScannerError = class extends InternalError {\n _brand;\n};\nfunction formatMessageForArgumentScannerError(error, formatter) {\n const errorType = error.constructor.name;\n const formatError = formatter[errorType];\n if (formatError) {\n return formatError(error);\n }\n return error.message;\n}\nfunction resolveAllowedNegationForFlags(flags) {\n return Object.fromEntries(\n Object.entries(flags).map(([internalFlagName, flag]) => {\n return [internalFlagName, flag.kind === \"boolean\" && flag.withNegated !== false];\n })\n );\n}\nfunction resolveAliases(flags, aliases, scannerCaseStyle) {\n return Object.fromEntries(\n Object.entries(aliases).map(([alias, internalFlagName_]) => {\n const internalFlagName = internalFlagName_;\n const flag = flags[internalFlagName];\n if (!flag) {\n const externalFlagName = asExternal(internalFlagName, scannerCaseStyle);\n throw new FlagNotFoundError(externalFlagName, [], alias);\n }\n return [alias, [internalFlagName, flag]];\n })\n );\n}\nvar FlagNotFoundError = class extends ArgumentScannerError {\n /**\n * Command line input that triggered this error.\n */\n input;\n /**\n * Set of proposed suggestions that are similar to the input.\n */\n corrections;\n /**\n * Set if error was caused indirectly by an alias.\n * This indicates that something is wrong with the command configuration itself.\n */\n aliasName;\n constructor(input, corrections, aliasName) {\n let message = `No flag registered for --${input}`;\n if (aliasName) {\n message += ` (aliased from -${aliasName})`;\n } else if (corrections.length > 0) {\n const formattedCorrections = joinWithGrammar(\n corrections.map((correction) => `--${correction}`),\n {\n kind: \"conjunctive\",\n conjunction: \"or\",\n serialComma: true\n }\n );\n message += `, did you mean ${formattedCorrections}?`;\n }\n super(message);\n this.input = input;\n this.corrections = corrections;\n this.aliasName = aliasName;\n }\n};\nvar AliasNotFoundError = class extends ArgumentScannerError {\n /**\n * Command line input that triggered this error.\n */\n input;\n constructor(input) {\n super(`No alias registered for -${input}`);\n this.input = input;\n }\n};\nfunction getPlaceholder(param, index) {\n if (param.placeholder) {\n return param.placeholder;\n }\n return typeof index === \"number\" ? `arg${index}` : \"args\";\n}\nfunction asExternal(internal, scannerCaseStyle) {\n return scannerCaseStyle === \"allow-kebab-for-camel\" ? convertCamelCaseToKebabCase(internal) : internal;\n}\nvar ArgumentParseError = class extends ArgumentScannerError {\n /**\n * External name of flag or placeholder for positional argument that was parsing this input.\n */\n externalFlagNameOrPlaceholder;\n /**\n * Command line input that triggered this error.\n */\n input;\n /**\n * Raw exception thrown from parse function.\n */\n exception;\n constructor(externalFlagNameOrPlaceholder, input, exception) {\n super(\n `Failed to parse \"${input}\" for ${externalFlagNameOrPlaceholder}: ${exception instanceof Error ? exception.message : String(exception)}`\n );\n this.externalFlagNameOrPlaceholder = externalFlagNameOrPlaceholder;\n this.input = input;\n this.exception = exception;\n }\n};\nfunction parseInput(externalFlagNameOrPlaceholder, parameter, input, context) {\n try {\n return parameter.parse.call(context, input);\n } catch (exc) {\n throw new ArgumentParseError(externalFlagNameOrPlaceholder, input, exc);\n }\n}\nvar EnumValidationError = class extends ArgumentScannerError {\n /**\n * External name of flag that was parsing this input.\n */\n externalFlagName;\n /**\n * Command line input that triggered this error.\n */\n input;\n /**\n * All possible enum values.\n */\n values;\n constructor(externalFlagName, input, values, corrections) {\n let message = `Expected \"${input}\" to be one of (${values.join(\"|\")})`;\n if (corrections.length > 0) {\n const formattedCorrections = joinWithGrammar(\n corrections.map((str) => `\"${str}\"`),\n {\n kind: \"conjunctive\",\n conjunction: \"or\",\n serialComma: true\n }\n );\n message += `, did you mean ${formattedCorrections}?`;\n }\n super(message);\n this.externalFlagName = externalFlagName;\n this.input = input;\n this.values = values;\n }\n};\nvar UnsatisfiedFlagError = class extends ArgumentScannerError {\n /**\n * External name of flag that was active when this error was thrown.\n */\n externalFlagName;\n /**\n * External name of flag that interrupted the original flag.\n */\n nextFlagName;\n constructor(externalFlagName, nextFlagName) {\n let message = `Expected input for flag --${externalFlagName}`;\n if (nextFlagName) {\n message += ` but encountered --${nextFlagName} instead`;\n }\n super(message);\n this.externalFlagName = externalFlagName;\n this.nextFlagName = nextFlagName;\n }\n};\nvar UnexpectedPositionalError = class extends ArgumentScannerError {\n /**\n * Expected (maximum) count of positional arguments.\n */\n expectedCount;\n /**\n * Command line input that triggered this error.\n */\n input;\n constructor(expectedCount, input) {\n super(`Too many arguments, expected ${expectedCount} but encountered \"${input}\"`);\n this.expectedCount = expectedCount;\n this.input = input;\n }\n};\nvar UnsatisfiedPositionalError = class extends ArgumentScannerError {\n /**\n * Placeholder for positional argument that was active when this error was thrown.\n */\n placeholder;\n /**\n * If specified, indicates the minimum number of arguments that are expected and the last argument count.\n */\n limit;\n constructor(placeholder, limit) {\n let message;\n if (limit) {\n message = `Expected at least ${limit[0]} argument(s) for ${placeholder}`;\n if (limit[1] === 0) {\n message += \" but found none\";\n } else {\n message += ` but only found ${limit[1]}`;\n }\n } else {\n message = `Expected argument for ${placeholder}`;\n }\n super(message);\n this.placeholder = placeholder;\n this.limit = limit;\n }\n};\nfunction undoNegation(flagName) {\n if (flagName.startsWith(\"no\") && flagName.length > 2) {\n if (flagName[2] === \"-\") {\n return flagName.slice(4);\n }\n const firstChar = flagName[2];\n const firstUpper = firstChar.toUpperCase();\n if (firstChar !== firstUpper) {\n return;\n }\n const firstLower = firstChar.toLowerCase();\n return firstLower + flagName.slice(3);\n }\n}\nfunction findInternalFlagMatch(externalFlagName, flags, allowsNegation, config) {\n const internalFlagName = externalFlagName;\n let flag = flags[internalFlagName];\n let foundFlagWithNegatedFalse;\n let foundFlagWithNegatedFalseFromKebabConversion = false;\n if (!flag) {\n const internalWithoutNegation = undoNegation(internalFlagName);\n if (internalWithoutNegation) {\n flag = flags[internalWithoutNegation];\n if (flag) {\n if (allowsNegation[internalWithoutNegation]) {\n return [internalWithoutNegation, flag, true];\n } else {\n foundFlagWithNegatedFalse = internalWithoutNegation;\n flag = void 0;\n }\n }\n }\n }\n const camelCaseFlagName = convertKebabCaseToCamelCase(externalFlagName);\n if (config.caseStyle === \"allow-kebab-for-camel\" && !flag) {\n flag = flags[camelCaseFlagName];\n if (flag) {\n return [camelCaseFlagName, flag];\n }\n const camelCaseWithoutNegation = undoNegation(camelCaseFlagName);\n if (camelCaseWithoutNegation) {\n flag = flags[camelCaseWithoutNegation];\n if (flag) {\n if (allowsNegation[camelCaseWithoutNegation]) {\n return [camelCaseWithoutNegation, flag, true];\n } else {\n foundFlagWithNegatedFalse = camelCaseWithoutNegation;\n foundFlagWithNegatedFalseFromKebabConversion = true;\n flag = void 0;\n }\n }\n }\n }\n if (!flag) {\n if (foundFlagWithNegatedFalse) {\n let correction = foundFlagWithNegatedFalse;\n if (foundFlagWithNegatedFalseFromKebabConversion && externalFlagName.includes(\"-\")) {\n correction = convertCamelCaseToKebabCase(foundFlagWithNegatedFalse);\n }\n throw new FlagNotFoundError(externalFlagName, [correction]);\n }\n if (camelCaseFlagName in flags) {\n throw new FlagNotFoundError(externalFlagName, [camelCaseFlagName]);\n }\n const kebabCaseFlagName = convertCamelCaseToKebabCase(externalFlagName);\n if (kebabCaseFlagName in flags) {\n throw new FlagNotFoundError(externalFlagName, [kebabCaseFlagName]);\n }\n const corrections = filterClosestAlternatives(internalFlagName, Object.keys(flags), config.distanceOptions);\n throw new FlagNotFoundError(externalFlagName, corrections);\n }\n return [internalFlagName, flag];\n}\nfunction isNiladic(namedFlagWithNegation) {\n if (namedFlagWithNegation[1].kind === \"boolean\" || namedFlagWithNegation[1].kind === \"counter\") {\n return true;\n }\n return false;\n}\nvar FLAG_SHORTHAND_PATTERN = /^-([a-z]+)$/i;\nvar FLAG_NAME_PATTERN = /^--([a-z][a-z-.\\d_]+)$/i;\nfunction findFlagsByArgument(arg, flags, allowsNegation, resolvedAliases, config) {\n const shorthandMatch = FLAG_SHORTHAND_PATTERN.exec(arg);\n if (shorthandMatch) {\n const batch = shorthandMatch[1];\n return Array.from(batch).map((alias) => {\n const aliasName = alias;\n const namedFlag = resolvedAliases[aliasName];\n if (!namedFlag) {\n throw new AliasNotFoundError(aliasName);\n }\n return namedFlag;\n });\n }\n const flagNameMatch = FLAG_NAME_PATTERN.exec(arg);\n if (flagNameMatch) {\n const externalFlagName = flagNameMatch[1];\n return [findInternalFlagMatch(externalFlagName, flags, allowsNegation, config)];\n }\n return [];\n}\nvar FLAG_NAME_VALUE_PATTERN = /^--([a-z][a-z-.\\d_]+)=(.+)$/i;\nvar ALIAS_VALUE_PATTERN = /^-([a-z])=(.+)$/i;\nvar InvalidNegatedFlagSyntaxError = class extends ArgumentScannerError {\n /**\n * External name of flag that was active when this error was thrown.\n */\n externalFlagName;\n /**\n * Input text equivalent to right hand side of input\n */\n valueText;\n constructor(externalFlagName, valueText) {\n super(`Cannot negate flag --${externalFlagName} and pass \"${valueText}\" as value`);\n this.externalFlagName = externalFlagName;\n this.valueText = valueText;\n }\n};\nfunction findFlagByArgumentWithInput(arg, flags, allowsNegation, resolvedAliases, config) {\n const flagsNameMatch = FLAG_NAME_VALUE_PATTERN.exec(arg);\n if (flagsNameMatch) {\n const externalFlagName = flagsNameMatch[1];\n const namedFlag = findInternalFlagMatch(externalFlagName, flags, allowsNegation, config);\n const valueText = flagsNameMatch[2];\n if (namedFlag[2]) {\n throw new InvalidNegatedFlagSyntaxError(externalFlagName, valueText);\n }\n return [namedFlag, valueText];\n }\n const aliasValueMatch = ALIAS_VALUE_PATTERN.exec(arg);\n if (aliasValueMatch) {\n const aliasName = aliasValueMatch[1];\n const namedFlag = resolvedAliases[aliasName];\n if (!namedFlag) {\n throw new AliasNotFoundError(aliasName);\n }\n const valueText = aliasValueMatch[2];\n return [namedFlag, valueText];\n }\n}\nasync function parseInputsForFlag(externalFlagName, flag, inputs, config, context) {\n if (!inputs) {\n if (\"default\" in flag && typeof flag.default !== \"undefined\") {\n if (flag.kind === \"boolean\") {\n return flag.default;\n }\n if (flag.kind === \"enum\") {\n if (\"variadic\" in flag && flag.variadic && Array.isArray(flag.default)) {\n const defaultArray = flag.default;\n for (const value of defaultArray) {\n if (!flag.values.includes(value)) {\n const corrections = filterClosestAlternatives(value, flag.values, config.distanceOptions);\n throw new EnumValidationError(externalFlagName, value, flag.values, corrections);\n }\n }\n return flag.default;\n }\n return flag.default;\n }\n if (\"variadic\" in flag && flag.variadic && Array.isArray(flag.default)) {\n const defaultArray = flag.default;\n return Promise.all(defaultArray.map((input2) => parseInput(externalFlagName, flag, input2, context)));\n }\n return parseInput(externalFlagName, flag, flag.default, context);\n }\n if (flag.optional) {\n return;\n }\n if (flag.kind === \"boolean\") {\n return false;\n } else if (flag.kind === \"counter\") {\n return 0;\n }\n throw new UnsatisfiedFlagError(externalFlagName);\n }\n if (flag.kind === \"counter\") {\n return inputs.reduce((total, input2) => {\n try {\n return total + numberParser.call(context, input2);\n } catch (exc) {\n throw new ArgumentParseError(externalFlagName, input2, exc);\n }\n }, 0);\n }\n if (\"variadic\" in flag && flag.variadic) {\n if (flag.kind === \"enum\") {\n for (const input2 of inputs) {\n if (!flag.values.includes(input2)) {\n const corrections = filterClosestAlternatives(input2, flag.values, config.distanceOptions);\n throw new EnumValidationError(externalFlagName, input2, flag.values, corrections);\n }\n }\n return inputs;\n }\n return Promise.all(inputs.map((input2) => parseInput(externalFlagName, flag, input2, context)));\n }\n const input = inputs[0];\n if (flag.kind === \"boolean\") {\n try {\n return looseBooleanParser.call(context, input);\n } catch (exc) {\n throw new ArgumentParseError(externalFlagName, input, exc);\n }\n }\n if (flag.kind === \"enum\") {\n if (!flag.values.includes(input)) {\n const corrections = filterClosestAlternatives(input, flag.values, config.distanceOptions);\n throw new EnumValidationError(externalFlagName, input, flag.values, corrections);\n }\n return input;\n }\n return parseInput(externalFlagName, flag, input, context);\n}\nvar UnexpectedFlagError = class extends ArgumentScannerError {\n /**\n * External name of flag that was parsing this input.\n */\n externalFlagName;\n /**\n * Command line input that was previously encountered by this flag.\n */\n previousInput;\n /**\n * Command line input that triggered this error.\n */\n input;\n constructor(externalFlagName, previousInput, input) {\n super(`Too many arguments for --${externalFlagName}, encountered \"${input}\" after \"${previousInput}\"`);\n this.externalFlagName = externalFlagName;\n this.previousInput = previousInput;\n this.input = input;\n }\n};\nfunction isVariadicFlag(flag) {\n if (flag.kind === \"counter\") {\n return true;\n }\n if (\"variadic\" in flag) {\n return Boolean(flag.variadic);\n }\n return false;\n}\nfunction storeInput(flagInputs, scannerCaseStyle, [internalFlagName, flag], input) {\n const inputs = flagInputs.get(internalFlagName) ?? [];\n if (inputs.length > 0 && !isVariadicFlag(flag)) {\n const externalFlagName = asExternal(internalFlagName, scannerCaseStyle);\n throw new UnexpectedFlagError(externalFlagName, inputs[0], input);\n }\n if (\"variadic\" in flag && typeof flag.variadic === \"string\") {\n const multipleInputs = input.split(flag.variadic);\n flagInputs.set(internalFlagName, [...inputs, ...multipleInputs]);\n } else {\n flagInputs.set(internalFlagName, [...inputs, input]);\n }\n}\nfunction isFlagSatisfiedByInputs(flags, flagInputs, key) {\n const inputs = flagInputs.get(key);\n if (inputs) {\n const flag = flags[key];\n if (isVariadicFlag(flag)) {\n return false;\n }\n return true;\n }\n return false;\n}\nfunction buildArgumentScanner(parameters, config) {\n const { flags = {}, aliases = {}, positional = { kind: \"tuple\", parameters: [] } } = parameters;\n const allowsNegation = resolveAllowedNegationForFlags(flags);\n const resolvedAliases = resolveAliases(flags, aliases, config.caseStyle);\n const positionalInputs = [];\n const flagInputs = /* @__PURE__ */ new Map();\n let positionalIndex = 0;\n let activeFlag;\n let treatInputsAsArguments = false;\n return {\n next: (input) => {\n if (!treatInputsAsArguments && config.allowArgumentEscapeSequence && input === \"--\") {\n if (activeFlag) {\n if (activeFlag[1].kind === \"parsed\" && activeFlag[1].inferEmpty) {\n storeInput(flagInputs, config.caseStyle, activeFlag, \"\");\n activeFlag = void 0;\n } else {\n const externalFlagName = asExternal(activeFlag[0], config.caseStyle);\n throw new UnsatisfiedFlagError(externalFlagName);\n }\n }\n treatInputsAsArguments = true;\n return;\n }\n if (!treatInputsAsArguments) {\n const flagInput = findFlagByArgumentWithInput(input, flags, allowsNegation, resolvedAliases, config);\n if (flagInput) {\n if (activeFlag) {\n if (activeFlag[1].kind === \"parsed\" && activeFlag[1].inferEmpty) {\n storeInput(flagInputs, config.caseStyle, activeFlag, \"\");\n activeFlag = void 0;\n } else {\n const externalFlagName = asExternal(activeFlag[0], config.caseStyle);\n const nextExternalFlagName = asExternal(flagInput[0][0], config.caseStyle);\n throw new UnsatisfiedFlagError(externalFlagName, nextExternalFlagName);\n }\n }\n storeInput(flagInputs, config.caseStyle, ...flagInput);\n return;\n }\n const nextFlags = findFlagsByArgument(input, flags, allowsNegation, resolvedAliases, config);\n if (nextFlags.length > 0) {\n if (activeFlag) {\n if (activeFlag[1].kind === \"parsed\" && activeFlag[1].inferEmpty) {\n storeInput(flagInputs, config.caseStyle, activeFlag, \"\");\n activeFlag = void 0;\n } else {\n const externalFlagName = asExternal(activeFlag[0], config.caseStyle);\n const nextFlagName = asExternal(nextFlags[0][0], config.caseStyle);\n throw new UnsatisfiedFlagError(externalFlagName, nextFlagName);\n }\n }\n if (nextFlags.every(isNiladic)) {\n for (const nextFlag of nextFlags) {\n if (nextFlag[1].kind === \"boolean\") {\n storeInput(flagInputs, config.caseStyle, nextFlag, nextFlag[2] ? \"false\" : \"true\");\n } else {\n storeInput(flagInputs, config.caseStyle, nextFlag, \"1\");\n }\n }\n } else if (nextFlags.length > 1) {\n const nextFlagExpectingArg = nextFlags.find((nextFlag) => !isNiladic(nextFlag));\n const externalFlagName = asExternal(nextFlagExpectingArg[0], config.caseStyle);\n throw new UnsatisfiedFlagError(externalFlagName);\n } else {\n activeFlag = nextFlags[0];\n }\n return;\n }\n }\n if (activeFlag) {\n storeInput(flagInputs, config.caseStyle, activeFlag, input);\n activeFlag = void 0;\n } else {\n if (positional.kind === \"tuple\") {\n if (positionalIndex >= positional.parameters.length) {\n throw new UnexpectedPositionalError(positional.parameters.length, input);\n }\n } else {\n if (typeof positional.maximum === \"number\" && positionalIndex >= positional.maximum) {\n throw new UnexpectedPositionalError(positional.maximum, input);\n }\n }\n positionalInputs[positionalIndex] = input;\n ++positionalIndex;\n }\n },\n parseArguments: async (context) => {\n const errors = [];\n let positionalValues_p;\n if (positional.kind === \"array\") {\n if (typeof positional.minimum === \"number\" && positionalIndex < positional.minimum) {\n errors.push(\n new UnsatisfiedPositionalError(getPlaceholder(positional.parameter), [\n positional.minimum,\n positionalIndex\n ])\n );\n }\n positionalValues_p = allSettledOrElse(\n positionalInputs.map(async (input, i) => {\n const placeholder = getPlaceholder(positional.parameter, i + 1);\n return parseInput(placeholder, positional.parameter, input, context);\n })\n );\n } else {\n positionalValues_p = allSettledOrElse(\n positional.parameters.map(async (param, i) => {\n const placeholder = getPlaceholder(param, i + 1);\n const input = positionalInputs[i];\n if (typeof input !== \"string\") {\n if (typeof param.default === \"string\") {\n return parseInput(placeholder, param, param.default, context);\n }\n if (param.optional) {\n return;\n }\n throw new UnsatisfiedPositionalError(placeholder);\n }\n return parseInput(placeholder, param, input, context);\n })\n );\n }\n if (activeFlag && activeFlag[1].kind === \"parsed\" && activeFlag[1].inferEmpty) {\n storeInput(flagInputs, config.caseStyle, activeFlag, \"\");\n activeFlag = void 0;\n }\n const flagEntries_p = allSettledOrElse(\n Object.entries(flags).map(async (entry) => {\n const [internalFlagName, flag] = entry;\n const externalFlagName = asExternal(internalFlagName, config.caseStyle);\n if (activeFlag && activeFlag[0] === internalFlagName) {\n throw new UnsatisfiedFlagError(externalFlagName);\n }\n const inputs = flagInputs.get(internalFlagName);\n const value = await parseInputsForFlag(externalFlagName, flag, inputs, config, context);\n return [internalFlagName, value];\n })\n );\n const [positionalValuesResult, flagEntriesResult] = await Promise.all([positionalValues_p, flagEntries_p]);\n if (positionalValuesResult.status === \"rejected\") {\n for (const reason of positionalValuesResult.reasons) {\n errors.push(reason);\n }\n }\n if (flagEntriesResult.status === \"rejected\") {\n for (const reason of flagEntriesResult.reasons) {\n errors.push(reason);\n }\n }\n if (errors.length > 0) {\n return { success: false, errors };\n }\n if (positionalValuesResult.status === \"rejected\") {\n throw new InternalError(\"Unknown failure while scanning positional arguments\");\n }\n if (flagEntriesResult.status === \"rejected\") {\n throw new InternalError(\"Unknown failure while scanning flag arguments\");\n }\n const parsedFlags = Object.fromEntries(flagEntriesResult.value);\n return { success: true, arguments: [parsedFlags, ...positionalValuesResult.value] };\n },\n proposeCompletions: async ({ partial, completionConfig, text, context }) => {\n if (activeFlag) {\n return proposeFlagCompletionsForPartialInput(activeFlag[1], context, partial);\n }\n const completions = [];\n if (!treatInputsAsArguments) {\n const shorthandMatch = FLAG_SHORTHAND_PATTERN.exec(partial);\n if (completionConfig.includeAliases) {\n if (partial === \"\" || partial === \"-\") {\n const incompleteAliases = Object.entries(aliases).filter(\n (entry) => !isFlagSatisfiedByInputs(flags, flagInputs, entry[1])\n );\n for (const [alias] of incompleteAliases) {\n const flag = resolvedAliases[alias];\n if (flag) {\n completions.push({\n kind: \"argument:flag\",\n completion: `-${alias}`,\n brief: flag[1].brief\n });\n }\n }\n } else if (shorthandMatch) {\n const partialAliases = Array.from(shorthandMatch[1]);\n const flagInputsIncludingPartial = new Map(flagInputs);\n for (const alias of partialAliases) {\n const namedFlag = resolvedAliases[alias];\n if (!namedFlag) {\n throw new AliasNotFoundError(alias);\n }\n storeInput(\n flagInputsIncludingPartial,\n config.caseStyle,\n namedFlag,\n namedFlag[1].kind === \"boolean\" ? \"true\" : \"1\"\n );\n }\n const lastAlias = partialAliases[partialAliases.length - 1];\n if (lastAlias) {\n const namedFlag = resolvedAliases[lastAlias];\n if (namedFlag) {\n completions.push({\n kind: \"argument:flag\",\n completion: partial,\n brief: namedFlag[1].brief\n });\n }\n }\n const incompleteAliases = Object.entries(aliases).filter(\n (entry) => !isFlagSatisfiedByInputs(\n flags,\n flagInputsIncludingPartial,\n entry[1]\n )\n );\n for (const [alias] of incompleteAliases) {\n const flag = resolvedAliases[alias];\n if (flag) {\n completions.push({\n kind: \"argument:flag\",\n completion: `${partial}${alias}`,\n brief: flag[1].brief\n });\n }\n }\n }\n }\n if (partial === \"\" || partial === \"-\" || partial.startsWith(\"--\")) {\n if (config.allowArgumentEscapeSequence) {\n completions.push({\n kind: \"argument:flag\",\n completion: \"--\",\n brief: text.briefs.argumentEscapeSequence\n });\n }\n let incompleteFlags = Object.entries(flags).filter(\n ([flagName]) => !isFlagSatisfiedByInputs(flags, flagInputs, flagName)\n );\n if (config.caseStyle === \"allow-kebab-for-camel\") {\n incompleteFlags = incompleteFlags.map(([flagName, param]) => {\n return [convertCamelCaseToKebabCase(flagName), param];\n });\n }\n const possibleFlags = incompleteFlags.map(([flagName, param]) => [`--${flagName}`, param]).filter(([flagName]) => flagName.startsWith(partial));\n completions.push(\n ...possibleFlags.map(([name, param]) => {\n return {\n kind: \"argument:flag\",\n completion: name,\n brief: param.brief\n };\n })\n );\n }\n }\n if (positional.kind === \"array\") {\n if (positional.parameter.proposeCompletions) {\n if (typeof positional.maximum !== \"number\" || positionalIndex < positional.maximum) {\n const positionalCompletions = await positional.parameter.proposeCompletions.call(\n context,\n partial\n );\n completions.push(\n ...positionalCompletions.map((value) => {\n return {\n kind: \"argument:value\",\n completion: value,\n brief: positional.parameter.brief\n };\n })\n );\n }\n }\n } else {\n const nextPositional = positional.parameters[positionalIndex];\n if (nextPositional?.proposeCompletions) {\n const positionalCompletions = await nextPositional.proposeCompletions.call(context, partial);\n completions.push(\n ...positionalCompletions.map((value) => {\n return {\n kind: \"argument:value\",\n completion: value,\n brief: nextPositional.brief\n };\n })\n );\n }\n }\n return completions.filter(({ completion }) => completion.startsWith(partial));\n }\n };\n}\nasync function proposeFlagCompletionsForPartialInput(flag, context, partial) {\n if (typeof flag.variadic === \"string\") {\n if (partial.endsWith(flag.variadic)) {\n return proposeFlagCompletionsForPartialInput(flag, context, \"\");\n }\n }\n let values;\n if (flag.kind === \"enum\") {\n values = flag.values;\n } else if (flag.proposeCompletions) {\n values = await flag.proposeCompletions.call(context, partial);\n } else {\n values = [];\n }\n return values.map((value) => {\n return {\n kind: \"argument:value\",\n completion: value,\n brief: flag.brief\n };\n }).filter(({ completion }) => completion.startsWith(partial));\n}\nfunction listAllRouteNamesAndAliasesForScan(routeMap, scannerCaseStyle, config) {\n const displayCaseStyle = scannerCaseStyle === \"allow-kebab-for-camel\" ? \"convert-camel-to-kebab\" : scannerCaseStyle;\n let entries = routeMap.getAllEntries();\n if (!config.includeHiddenRoutes) {\n entries = entries.filter((entry) => !entry.hidden);\n }\n return entries.flatMap((entry) => {\n const routeName = entry.name[displayCaseStyle];\n if (config.includeAliases) {\n return [routeName, ...entry.aliases];\n }\n return [routeName];\n });\n}\n\n// src/routing/command/run.ts\nasync function runCommand({ loader, parameters }, {\n context,\n inputs,\n scannerConfig,\n errorFormatting,\n determineExitCode,\n ansiColorByStream\n}) {\n let parsedArguments;\n try {\n const scanner = buildArgumentScanner(parameters, scannerConfig);\n for (const input of inputs) {\n scanner.next(input);\n }\n const result = await scanner.parseArguments(context);\n if (result.success) {\n parsedArguments = result.arguments;\n } else {\n for (const error of result.errors) {\n const errorMessage = errorFormatting.exceptionWhileParsingArguments(error, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n }\n return ExitCode.InvalidArgument;\n }\n } catch (exc) {\n const errorMessage = errorFormatting.exceptionWhileParsingArguments(exc, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.InvalidArgument;\n }\n let commandFunction;\n try {\n const loaded = await loader();\n if (typeof loaded === \"function\") {\n commandFunction = loaded;\n } else {\n commandFunction = loaded.default;\n }\n } catch (exc) {\n const errorMessage = errorFormatting.exceptionWhileLoadingCommandFunction(exc, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.CommandLoadError;\n }\n try {\n const result = await commandFunction.call(context, ...parsedArguments);\n if (result instanceof Error) {\n const errorMessage = errorFormatting.commandErrorResult(result, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n if (determineExitCode) {\n return determineExitCode(result);\n }\n return ExitCode.CommandRunError;\n }\n } catch (exc) {\n const errorMessage = errorFormatting.exceptionWhileRunningCommand(exc, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n if (determineExitCode) {\n return determineExitCode(exc);\n }\n return ExitCode.CommandRunError;\n }\n return ExitCode.Success;\n}\n\n// src/routing/route-map/types.ts\nvar RouteMapSymbol = Symbol(\"RouteMap\");\n\n// src/routing/command/types.ts\nvar CommandSymbol = Symbol(\"Command\");\n\n// src/routing/scanner.ts\nfunction buildRouteScanner(root, config, startingPrefix, additionalFlags) {\n const prefix = [...startingPrefix];\n const unprocessedInputs = [];\n const flags = {};\n for (const additionalFlag of additionalFlags) {\n flags[additionalFlag.name] = additionalFlag;\n }\n const aliases = {};\n for (const additionalFlag of additionalFlags) {\n if (additionalFlag.aliases) {\n for (const alias of additionalFlag.aliases) {\n aliases[alias] = additionalFlag.name;\n }\n }\n }\n const resolvedAliases = resolveAliases(flags, aliases, config.caseStyle);\n let activeFlag;\n let parent;\n let current = root;\n let target;\n let treatInputsAsArguments = false;\n return {\n next: (input) => {\n if (!treatInputsAsArguments && config.allowArgumentEscapeSequence && input === \"--\") {\n treatInputsAsArguments = true;\n unprocessedInputs.push(input);\n return;\n }\n if (!treatInputsAsArguments && !activeFlag) {\n try {\n const nextFlags = findFlagsByArgument(input, flags, {}, resolvedAliases, config);\n for (const currentFlag of nextFlags) {\n if (!currentFlag[1].global && current !== root) {\n continue;\n }\n activeFlag = currentFlag[1];\n target = current;\n return;\n }\n } catch {\n }\n }\n if (target || treatInputsAsArguments) {\n unprocessedInputs.push(input);\n return;\n }\n if (current.kind === CommandSymbol) {\n target = current;\n unprocessedInputs.push(input);\n return;\n }\n const camelCaseRouteName = convertKebabCaseToCamelCase(input);\n let internalRouteName = input;\n let next = current.getRoutingTargetForInput(internalRouteName);\n if (config.caseStyle === \"allow-kebab-for-camel\" && !next) {\n next = current.getRoutingTargetForInput(camelCaseRouteName);\n if (next) {\n internalRouteName = camelCaseRouteName;\n }\n }\n if (!next) {\n const defaultCommand = current.getDefaultCommand();\n unprocessedInputs.push(input);\n if (defaultCommand) {\n parent = [current, \"\"];\n current = defaultCommand;\n return;\n }\n return { input, routeMap: current };\n }\n parent = [current, input];\n current = next;\n prefix.push(input);\n },\n finish: () => {\n target = target ?? current;\n if (target.kind === RouteMapSymbol && !activeFlag) {\n const defaultCommand = target.getDefaultCommand();\n if (defaultCommand) {\n parent = [target, \"\"];\n target = defaultCommand;\n }\n }\n const aliases2 = parent ? parent[0].getOtherAliasesForInput(parent[1], config.caseStyle) : { original: [], \"convert-camel-to-kebab\": [] };\n return {\n target,\n unprocessedInputs,\n prefix,\n aliases: aliases2,\n activeFlag\n };\n }\n };\n}\n\n// src/context.ts\nfunction checkEnvironmentVariable(process, varName) {\n const value = process.env?.[varName];\n return typeof value === \"string\" && looseBooleanParser(value);\n}\n\n// src/text.ts\nvar text_en = {\n headers: {\n usage: \"USAGE\",\n aliases: \"ALIASES\",\n commands: \"COMMANDS\",\n flags: \"FLAGS\",\n arguments: \"ARGUMENTS\"\n },\n keywords: {\n default: \"default =\",\n separator: \"separator =\"\n },\n briefs: {\n help: \"Print help information and exit\",\n helpAll: \"Print help information (including hidden commands/flags) and exit\",\n version: \"Print version information and exit\",\n argumentEscapeSequence: \"All subsequent inputs should be interpreted as arguments\"\n },\n noCommandRegisteredForInput({ input, corrections }) {\n const errorMessage = `No command registered for \\`${input}\\``;\n if (corrections.length > 0) {\n const formattedCorrections = joinWithGrammar(corrections, {\n kind: \"conjunctive\",\n conjunction: \"or\",\n serialComma: true\n });\n return `${errorMessage}, did you mean ${formattedCorrections}?`;\n } else {\n return errorMessage;\n }\n },\n noTextAvailableForLocale({ requestedLocale, defaultLocale }) {\n return `Application does not support \"${requestedLocale}\" locale, defaulting to \"${defaultLocale}\"`;\n },\n exceptionWhileParsingArguments(exc) {\n if (exc instanceof ArgumentScannerError) {\n return formatMessageForArgumentScannerError(exc, {});\n }\n return `Unable to parse arguments, ${(this.formatException ?? formatException)(exc)}`;\n },\n exceptionWhileLoadingCommandFunction(exc) {\n return `Unable to load command function, ${(this.formatException ?? formatException)(exc)}`;\n },\n exceptionWhileLoadingCommandContext(exc) {\n return `Unable to load command context, ${(this.formatException ?? formatException)(exc)}`;\n },\n exceptionWhileRunningCommand(exc) {\n return `Command failed, ${(this.formatException ?? formatException)(exc)}`;\n },\n exceptionWhileRunningIntegrationHook({ exception, hook, integration }) {\n return `Unexpected exception thrown by '${integration}' integration during '${hook}' hook.\n${(this.formatException ?? formatException)(exception)}`;\n },\n exceptionWhileRunningIntegrationFlag({ exception, integration }) {\n return `Unexpected exception thrown by \"--${integration}\" flag from the '${integration}' integration.\n${(this.formatException ?? formatException)(exception)}`;\n },\n commandErrorResult(err) {\n return err.message;\n },\n currentVersionIsNotLatest({ currentVersion, latestVersion, upgradeCommand }) {\n if (upgradeCommand) {\n return `Latest available version is ${latestVersion} (currently running ${currentVersion}), upgrade with \"${upgradeCommand}\"`;\n }\n return `Latest available version is ${latestVersion} (currently running ${currentVersion})`;\n }\n};\nfunction defaultTextLoader(locale) {\n if (locale.startsWith(\"en\")) {\n return text_en;\n }\n}\nfunction shouldUseAnsiColor(process, stream, config) {\n return !config.disableAnsiColor && !checkEnvironmentVariable(process, \"STRICLI_NO_COLOR\") && (stream.getColorDepth?.(process.env) ?? 1) >= 4;\n}\nfunction shouldUseAnsiColorForStreams(process, config) {\n return {\n stdout: shouldUseAnsiColor(process, process.stdout, config),\n stderr: shouldUseAnsiColor(process, process.stderr, config)\n };\n}\n\n// src/application/integrations/help.ts\nfunction validateCaseStyleCompatibility(scan, display) {\n if (scan === \"original\" && display === \"convert-camel-to-kebab\") {\n throw new Error(\"Cannot convert route and flag names on display (convert-camel-to-kebab) but scan as original\");\n }\n}\nfunction help({\n alias = \"h\",\n includeHidden = false,\n formatting,\n ...config\n}) {\n return {\n validate(_root, config2) {\n validateCaseStyleCompatibility(config2.scanner.caseStyle, formatting.caseStyle);\n },\n flag: {\n ...config,\n global: true,\n aliases: alias === false ? [] : [alias],\n async run(app, { text, ansiColorByStream, result, additionalFlags }) {\n this.process.stdout.write(\n result.target.formatHelp({\n prefix: result.prefix,\n additionalFlags,\n includeArgumentEscapeSequenceFlag: app.config.scanner.allowArgumentEscapeSequence,\n includeHidden,\n config: formatting,\n aliases: result.aliases[formatting.caseStyle],\n text,\n ansiColor: ansiColorByStream.stdout\n })\n );\n }\n }\n };\n}\n\n// src/application/integrations/version.ts\nfunction version({\n info,\n alias = \"v\",\n hook = \"app:start\",\n ...config\n}) {\n let versionCheck;\n if (info.getLatestVersion) {\n const getLatestVersion = info.getLatestVersion;\n versionCheck = async function({ text, ansiColorByStream }) {\n if (checkEnvironmentVariable(this.process, \"STRICLI_SKIP_VERSION_CHECK\")) {\n return;\n }\n let currentVersion;\n if (\"currentVersion\" in info) {\n currentVersion = info.currentVersion;\n } else {\n currentVersion = await info.getCurrentVersion.call(this);\n }\n const latestVersion = await getLatestVersion.call(this, currentVersion);\n if (latestVersion && currentVersion !== latestVersion) {\n const warningMessage = text.currentVersionIsNotLatest({\n currentVersion,\n latestVersion,\n upgradeCommand: info.upgradeCommand,\n ansiColor: ansiColorByStream.stderr\n });\n this.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[33m${warningMessage}\\x1B[39m\\x1B[22m\n` : `${warningMessage}\n`\n );\n }\n };\n }\n return {\n hooks: versionCheck ? { [hook]: versionCheck } : {},\n flag: {\n ...config,\n defaultForRouteMap: false,\n global: false,\n aliases: alias === false ? [] : [alias],\n async run() {\n let currentVersion;\n if (\"currentVersion\" in info) {\n currentVersion = info.currentVersion;\n } else {\n currentVersion = await info.getCurrentVersion.call(this);\n }\n this.process.stdout.write(currentVersion + \"\\n\");\n }\n }\n };\n}\n\n// src/application/integration.ts\nasync function runHook(integrations, hookName, context, args) {\n for (const [name, integration] of Object.entries(integrations)) {\n const hook = integration.hooks?.[hookName];\n if (hook) {\n try {\n await hook.call(context, args);\n } catch (exc) {\n const errorMessage = args.text.exceptionWhileRunningIntegrationHook({\n exception: exc,\n hook: hookName,\n integration: name,\n ansiColor: args.ansiColorByStream.stderr\n });\n context.process.stderr.write(\n args.ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.IntegrationError;\n }\n }\n }\n}\nfunction checkIntegrationsForCollisions(integrations, caseStyle) {\n let routeMapDefault;\n const flagNames = new Set(Object.keys(integrations));\n const aliases = /* @__PURE__ */ new Map();\n for (const [name, integration] of Object.entries(integrations)) {\n if (caseStyle === \"allow-kebab-for-camel\") {\n const camelCase = convertKebabCaseToCamelCase(name);\n if (camelCase !== name && flagNames.has(camelCase)) {\n throw new InternalError(\n `Multiple integrations are trying to use the same flag name (with 'allow-kebab-for-camel'): '${name}' and '${camelCase}'`\n );\n }\n }\n if (integration.flag) {\n if (integration.flag.defaultForRouteMap) {\n if (routeMapDefault) {\n throw new InternalError(\n `Multiple integrations provide a default flag for route maps: '${routeMapDefault}' and '${name}'`\n );\n }\n routeMapDefault = name;\n }\n for (const alias of integration.flag.aliases ?? []) {\n const flagForAlias = aliases.get(alias);\n if (flagForAlias) {\n throw new InternalError(\n `Multiple integrations are trying to use the same flag alias \"-${alias}\": '${flagForAlias}' and '${name}'`\n );\n }\n aliases.set(alias, name);\n }\n }\n }\n}\nfunction checkIntegrationsForFlagNameConflicts(root, additionalFlags, caseStyle) {\n function checkForConflicts(target, prefix) {\n if (target.kind === CommandSymbol) {\n const relevantFlags = root === target ? additionalFlags : additionalFlags.filter(({ global }) => global);\n for (const { name, aliases } of relevantFlags) {\n if (target.usesFlag(name, caseStyle)) {\n throw new InternalError(\n `'${name}' integration provides a flag that would override: \"${[...prefix, `--${name}`].join(\" \")}\"`\n );\n }\n for (const alias of aliases ?? []) {\n if (target.usesFlag(alias, caseStyle)) {\n throw new InternalError(\n `'${name}' integration provides a flag with an alias that would override: \"${[...prefix, `-${alias}`].join(\" \")}\"`\n );\n }\n }\n }\n } else {\n for (const entry of target.getAllEntries()) {\n checkForConflicts(entry.target, [...prefix, entry.name.original]);\n }\n }\n }\n checkForConflicts(root, []);\n}\nfunction gatherAdditionalFlagsFromIntegrations(integrations) {\n const flags = [];\n for (const [name, integration] of Object.entries(integrations)) {\n if (integration.flag) {\n flags.push({ ...integration.flag, name });\n }\n }\n return flags;\n}\nfunction proposeCompletionsForAdditionalFlags(additionalFlags, config, caseStyle, partial) {\n const possibleCompletions = [];\n for (const flag of additionalFlags) {\n if (!flag.complete || flag.hidden && !config.includeHiddenRoutes) {\n continue;\n }\n possibleCompletions.push({\n kind: \"argument:flag\",\n completion: `--${flag.name}`,\n brief: flag.brief\n });\n if (config.includeAliases) {\n for (const alias of flag.aliases ?? []) {\n possibleCompletions.push({\n kind: \"argument:flag\",\n completion: `-${alias}`,\n brief: flag.brief\n });\n }\n }\n if (caseStyle === \"allow-kebab-for-camel\") {\n const kebabName = convertCamelCaseToKebabCase(flag.name);\n if (kebabName !== flag.name) {\n possibleCompletions.push({\n kind: \"argument:flag\",\n completion: `--${kebabName}`,\n brief: flag.brief\n });\n }\n }\n }\n return possibleCompletions.filter(({ completion }) => completion.startsWith(partial));\n}\nfunction validateIntegrations(integrations, root, config) {\n for (const [name, integration] of Object.entries(integrations)) {\n try {\n integration.validate?.(root, config);\n } catch (exc) {\n throw new InternalError(`Integration '${name}' failed validation: ${String(exc)}`, { cause: exc });\n }\n }\n}\nfunction gatherDefaultIntegrations(config, text) {\n const integrations = {\n help: help({\n brief: text.briefs.help,\n alias: \"h\",\n defaultForRouteMap: true,\n includeHidden: false,\n formatting: config.documentation\n }),\n helpAll: help({\n brief: text.briefs.helpAll,\n alias: \"H\",\n hidden: !config.documentation.alwaysShowHelpAllFlag,\n includeHidden: true,\n formatting: config.documentation\n })\n };\n if (config.versionInfo) {\n integrations[\"version\"] = version({\n brief: text.briefs.version,\n info: config.versionInfo,\n alias: \"v\",\n hook: \"app:start\"\n });\n }\n return integrations;\n}\n\n// src/application/run.ts\nasync function runApplication(app, rawInputs, context) {\n const ansiColorByStream = shouldUseAnsiColorForStreams(context.process, app.config.documentation);\n let text = app.defaultText;\n if (context.locale && \"loadText\" in app.config.localization) {\n const localeText = app.config.localization.loadText(context.locale);\n if (localeText) {\n text = localeText;\n } else {\n const warningMessage = text.noTextAvailableForLocale({\n requestedLocale: context.locale,\n defaultLocale: app.config.localization.defaultLocale,\n ansiColor: ansiColorByStream.stderr\n });\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[33m${warningMessage}\\x1B[39m\\x1B[22m\n` : `${warningMessage}\n`\n );\n }\n }\n const hookStartExitCode = await runHook(app.integrations, \"app:start\", context, {\n text,\n ansiColorByStream\n });\n if (typeof hookStartExitCode === \"number\") {\n return hookStartExitCode;\n }\n const exitCode = await scanInputsAndRunTarget(app, rawInputs, context, text, ansiColorByStream);\n const hookEndExitCode = await runHook(app.integrations, \"app:end\", context, {\n text,\n ansiColorByStream,\n exitCode\n });\n if (typeof hookEndExitCode === \"number\") {\n return hookEndExitCode;\n }\n return exitCode;\n}\nasync function scanInputsAndRunTarget(app, rawInputs, context, text, ansiColorByStream) {\n const additionalFlags = gatherAdditionalFlagsFromIntegrations(app.integrations);\n const inputs = rawInputs.slice();\n const scanner = buildRouteScanner(app.root, app.config.scanner, [app.config.name], additionalFlags);\n let error;\n while (inputs.length > 0 && !error) {\n const arg = inputs.shift();\n error = scanner.next(arg);\n }\n if (error) {\n const routeNames = listAllRouteNamesAndAliasesForScan(\n error.routeMap,\n app.config.scanner.caseStyle,\n app.config.completion\n );\n const corrections = filterClosestAlternatives(error.input, routeNames, app.config.scanner.distanceOptions).map(\n (str) => `\\`${str}\\``\n );\n const errorMessage = text.noCommandRegisteredForInput({\n input: error.input,\n corrections,\n ansiColor: ansiColorByStream.stderr\n });\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.UnknownCommand;\n }\n let { activeFlag, ...result } = scanner.finish();\n if (activeFlag || result.target.kind === RouteMapSymbol) {\n if (!activeFlag) {\n activeFlag = additionalFlags.find((flag) => flag.defaultForRouteMap);\n }\n if (activeFlag) {\n let additionalFlagsForTarget = additionalFlags;\n if (result.target !== app.root) {\n additionalFlagsForTarget = additionalFlagsForTarget.filter((flag) => flag.global);\n }\n try {\n await activeFlag.run.call(context, app, {\n text,\n ansiColorByStream,\n result,\n additionalFlags: additionalFlagsForTarget\n });\n } catch (exc) {\n const errorMessage = text.exceptionWhileRunningIntegrationFlag({\n exception: exc,\n ansiColor: ansiColorByStream.stderr,\n integration: activeFlag.name\n });\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m\n` : `${errorMessage}\n`\n );\n return ExitCode.IntegrationError;\n }\n }\n return ExitCode.Success;\n }\n let commandContext;\n if (\"forCommand\" in context) {\n try {\n commandContext = await context.forCommand({ prefix: result.prefix });\n } catch (exc) {\n const errorMessage = text.exceptionWhileLoadingCommandContext(exc, ansiColorByStream.stderr);\n context.process.stderr.write(\n ansiColorByStream.stderr ? `\\x1B[1m\\x1B[31m${errorMessage}\\x1B[39m\\x1B[22m` : errorMessage\n );\n return ExitCode.ContextLoadError;\n }\n } else {\n commandContext = context;\n }\n const hookStartExitCode = await runHook(app.integrations, \"command:start\", commandContext, {\n text,\n ansiColorByStream,\n result\n });\n if (typeof hookStartExitCode === \"number\") {\n return hookStartExitCode;\n }\n const exitCode = await runCommand(result.target, {\n context: commandContext,\n inputs: result.unprocessedInputs,\n scannerConfig: app.config.scanner,\n errorFormatting: text,\n determineExitCode: app.config.determineExitCode,\n ansiColorByStream\n });\n const hookEndExitCode = await runHook(app.integrations, \"command:end\", commandContext, {\n text,\n ansiColorByStream,\n result,\n exitCode\n });\n if (typeof hookEndExitCode === \"number\") {\n return hookEndExitCode;\n }\n return exitCode;\n}\n\n// src/parameter/flag/types.ts\nfunction hasDefault(flag) {\n return \"default\" in flag && typeof flag.default !== \"undefined\";\n}\nfunction isOptionalAtRuntime(flag) {\n return flag.optional ?? hasDefault(flag);\n}\n\n// src/parameter/formatting.ts\nfunction withDefaultFormattingConfiguration(config, scannerCaseStyle) {\n let displayCaseStyle;\n if (config.caseStyle) {\n displayCaseStyle = config.caseStyle;\n } else if (scannerCaseStyle === \"allow-kebab-for-camel\") {\n displayCaseStyle = \"convert-camel-to-kebab\";\n } else {\n displayCaseStyle = scannerCaseStyle;\n }\n validateCaseStyleCompatibility(scannerCaseStyle, displayCaseStyle);\n return {\n useAliasInUsageLine: config.useAliasInUsageLine ?? false,\n onlyRequiredInUsageLine: config.onlyRequiredInUsageLine ?? false,\n caseStyle: displayCaseStyle\n };\n}\nfunction wrapRequiredFlag(text) {\n return `(${text})`;\n}\nfunction wrapOptionalFlag(text) {\n return `[${text}]`;\n}\nfunction wrapVariadicFlag(text) {\n return `${text}...`;\n}\nfunction wrapRequiredParameter(text) {\n return `<${text}>`;\n}\nfunction wrapOptionalParameter(text) {\n return `[<${text}>]`;\n}\nfunction wrapVariadicParameter(text) {\n return `<${text}>...`;\n}\nfunction formatUsageLineForParameters(parameters, args) {\n const flagsUsage = Object.entries(parameters.flags ?? {}).filter(([, flag]) => {\n if (flag.hidden) {\n return false;\n }\n if (args.config.onlyRequiredInUsageLine && isOptionalAtRuntime(flag)) {\n return false;\n }\n return true;\n }).map(([name, flag]) => {\n let displayName = args.config.caseStyle === \"convert-camel-to-kebab\" ? `--${convertCamelCaseToKebabCase(name)}` : `--${name}`;\n if (parameters.aliases && args.config.useAliasInUsageLine) {\n const aliases = Object.entries(parameters.aliases).filter((entry) => entry[1] === name);\n if (aliases.length === 1 && aliases[0]) {\n displayName = `-${aliases[0][0]}`;\n }\n }\n if (flag.kind === \"boolean\") {\n return [flag, displayName];\n }\n if (flag.kind === \"enum\" && typeof flag.placeholder !== \"string\") {\n return [flag, `${displayName} ${flag.values.join(\"|\")}`];\n }\n const placeholder = flag.placeholder ?? \"value\";\n return [flag, `${displayName} ${placeholder}`];\n }).map(([flag, usage]) => {\n if (flag.kind === \"parsed\" && flag.variadic) {\n if (isOptionalAtRuntime(flag)) {\n return wrapVariadicFlag(wrapOptionalFlag(usage));\n }\n return wrapVariadicFlag(wrapRequiredFlag(usage));\n }\n if (isOptionalAtRuntime(flag)) {\n return wrapOptionalFlag(usage);\n }\n return wrapRequiredFlag(usage);\n });\n let positionalUsage = [];\n const positional = parameters.positional;\n if (positional) {\n if (positional.kind === \"array\") {\n positionalUsage = [wrapVariadicParameter(positional.parameter.placeholder ?? \"args\")];\n } else {\n let parameters2 = positional.parameters;\n if (args.config.onlyRequiredInUsageLine) {\n parameters2 = parameters2.filter((param) => !param.optional && typeof param.default === \"undefined\");\n }\n positionalUsage = parameters2.map((param, i) => {\n const argName = param.placeholder ?? `arg${i + 1}`;\n return param.optional || typeof param.default !== \"undefined\" ? wrapOptionalParameter(argName) : wrapRequiredParameter(argName);\n });\n }\n }\n return [...args.prefix, ...flagsUsage, ...positionalUsage].join(\" \");\n}\n\n// src/config.ts\nfunction formatForDisplay(flagName, displayCaseStyle) {\n if (displayCaseStyle === \"convert-camel-to-kebab\") {\n return convertCamelCaseToKebabCase(flagName);\n }\n return flagName;\n}\nfunction formatAsNegated(flagName, displayCaseStyle) {\n if (displayCaseStyle === \"convert-camel-to-kebab\") {\n return `no-${convertCamelCaseToKebabCase(flagName)}`;\n }\n return `no${flagName[0].toUpperCase()}${flagName.slice(1)}`;\n}\nfunction withDefaults(config) {\n const scannerCaseStyle = config.scanner?.caseStyle ?? \"original\";\n const scannerConfig = {\n caseStyle: scannerCaseStyle,\n allowArgumentEscapeSequence: config.scanner?.allowArgumentEscapeSequence ?? false,\n distanceOptions: config.scanner?.distanceOptions ?? {\n threshold: 7,\n weights: {\n insertion: 1,\n deletion: 3,\n substitution: 2,\n transposition: 0\n }\n }\n };\n const documentationConfig = {\n alwaysShowHelpAllFlag: config.documentation?.alwaysShowHelpAllFlag ?? false,\n disableAnsiColor: config.documentation?.disableAnsiColor ?? false,\n ...withDefaultFormattingConfiguration(config.documentation ?? {}, scannerCaseStyle)\n };\n const completionConfig = {\n includeAliases: config.completion?.includeAliases ?? documentationConfig.useAliasInUsageLine,\n includeHiddenRoutes: config.completion?.includeHiddenRoutes ?? false,\n ...config.completion\n };\n return {\n ...config,\n scanner: scannerConfig,\n completion: completionConfig,\n documentation: documentationConfig,\n localization: {\n defaultLocale: \"en\",\n loadText: defaultTextLoader,\n ...config.localization\n }\n };\n}\n\n// src/application/builder.ts\nfunction buildApplication(root, appConfig, integrations) {\n const config = withDefaults(appConfig);\n let defaultText;\n if (\"text\" in config.localization) {\n defaultText = config.localization.text;\n } else {\n const text = config.localization.loadText(config.localization.defaultLocale);\n if (!text) {\n throw new InternalError(`No text available for the default locale \"${config.localization.defaultLocale}\"`);\n }\n defaultText = text;\n }\n if (integrations) {\n checkIntegrationsForCollisions(integrations, config.scanner.caseStyle);\n } else {\n integrations = gatherDefaultIntegrations(config, defaultText);\n }\n const additionalFlags = gatherAdditionalFlagsFromIntegrations(integrations);\n checkIntegrationsForFlagNameConflicts(root, additionalFlags, config.scanner.caseStyle);\n validateIntegrations(integrations, root, config);\n return {\n root,\n config,\n defaultText,\n integrations\n };\n}\n\n// src/application/documentation.ts\nfunction* iterateAllCommands(routeMap, prefix, caseStyle) {\n for (const entry of routeMap.getAllEntries()) {\n if (entry.hidden) {\n continue;\n }\n const routeName = entry.name[caseStyle];\n const route = [...prefix, routeName];\n if (entry.target.kind === RouteMapSymbol) {\n yield* iterateAllCommands(entry.target, route, caseStyle);\n } else {\n yield [route, entry.target, entry.aliases];\n }\n }\n}\nfunction generateHelpTextForAllCommands({ root, defaultText, config, integrations }, locale) {\n let text = defaultText;\n if (locale && \"loadText\" in config.localization) {\n const localeText = config.localization.loadText(locale);\n if (localeText) {\n text = localeText;\n } else {\n throw new InternalError(`Application does not support \"${locale}\" locale`);\n }\n }\n const additionalFlags = gatherAdditionalFlagsFromIntegrations(integrations);\n const commands = [];\n if (root.kind === CommandSymbol) {\n commands.push([[config.name], root, []]);\n } else {\n commands.push(...iterateAllCommands(root, [config.name], config.documentation.caseStyle));\n }\n return commands.map(([route, command, aliases]) => {\n let additionalFlagsForCommand = additionalFlags;\n if (command !== root) {\n additionalFlagsForCommand = additionalFlagsForCommand.filter((flag) => flag.global);\n }\n return [\n route.join(\" \"),\n command.formatHelp({\n prefix: route,\n config: config.documentation,\n additionalFlags: additionalFlagsForCommand,\n includeArgumentEscapeSequenceFlag: config.scanner.allowArgumentEscapeSequence,\n includeHidden: false,\n aliases,\n text,\n ansiColor: false\n })\n ];\n });\n}\n\n// src/routing/command/propose-completions.ts\nasync function proposeCompletionsForCommand({ parameters }, args) {\n try {\n const scanner = buildArgumentScanner(parameters, args.scannerConfig);\n for (const input of args.inputs) {\n scanner.next(input);\n }\n return await scanner.proposeCompletions(args);\n } catch {\n return [];\n }\n}\n\n// src/routing/route-map/propose-completions.ts\nasync function proposeCompletionsForRouteMap(routeMap, { partial, scannerConfig, completionConfig }) {\n let entries = routeMap.getAllEntries();\n if (!completionConfig.includeHiddenRoutes) {\n entries = entries.filter((entry) => !entry.hidden);\n }\n const displayCaseStyle = scannerConfig.caseStyle === \"allow-kebab-for-camel\" ? \"convert-camel-to-kebab\" : scannerConfig.caseStyle;\n return entries.flatMap((entry) => {\n const kind = entry.target.kind === CommandSymbol ? \"routing-target:command\" : \"routing-target:route-map\";\n const brief = entry.target.brief;\n const targetCompletion = {\n kind,\n completion: entry.name[displayCaseStyle],\n brief\n };\n if (completionConfig.includeAliases) {\n return [\n targetCompletion,\n ...entry.aliases.map((alias) => {\n return {\n kind,\n completion: alias,\n brief\n };\n })\n ];\n }\n return [targetCompletion];\n }).filter(({ completion }) => completion.startsWith(partial));\n}\n\n// src/application/propose-completions.ts\nasync function proposeCompletionsForApplication({ root, config, defaultText, integrations }, rawInputs, context) {\n if (rawInputs.length === 0) {\n return [];\n }\n const additionalFlags = gatherAdditionalFlagsFromIntegrations(integrations);\n const scanner = buildRouteScanner(root, config.scanner, [], additionalFlags);\n const leadingInputs = rawInputs.slice(0, -1);\n let error;\n while (leadingInputs.length > 0 && !error) {\n const input = leadingInputs.shift();\n error = scanner.next(input);\n }\n if (error) {\n return [];\n }\n const result = scanner.finish();\n if (result.activeFlag) {\n return [];\n }\n let commandContext;\n if (\"forCommand\" in context) {\n try {\n commandContext = await context.forCommand({ prefix: result.prefix });\n } catch {\n return [];\n }\n } else {\n commandContext = context;\n }\n const partial = rawInputs[rawInputs.length - 1];\n let additionalFlagsForTarget = additionalFlags;\n if (result.target !== root) {\n additionalFlagsForTarget = additionalFlagsForTarget.filter((flag) => flag.global);\n }\n const additionalCompletions = proposeCompletionsForAdditionalFlags(\n additionalFlagsForTarget,\n config.completion,\n config.scanner.caseStyle,\n partial\n );\n let targetCompletions;\n if (result.target.kind === RouteMapSymbol) {\n targetCompletions = await proposeCompletionsForRouteMap(result.target, {\n context: commandContext,\n partial,\n scannerConfig: config.scanner,\n completionConfig: config.completion\n });\n } else {\n targetCompletions = await proposeCompletionsForCommand(result.target, {\n context: commandContext,\n inputs: result.unprocessedInputs,\n partial,\n scannerConfig: config.scanner,\n completionConfig: config.completion,\n text: defaultText\n });\n }\n return [...targetCompletions, ...additionalCompletions];\n}\n\n// src/parameter/parser/choice.ts\nfunction narrowString(choices, value) {\n return choices.includes(value);\n}\nfunction buildChoiceParser(choices) {\n return (input) => {\n if (!narrowString(choices, input)) {\n throw new SyntaxError(`${input} is not one of (${choices.join(\"|\")})`);\n }\n return input;\n };\n}\n\n// src/parameter/flag/formatting.ts\nfunction formatRowForAdditionalFlag(flag, caseStyle) {\n return {\n aliases: flag.aliases ? flag.aliases.map((alias) => `-${alias}`).join(\" \") : \"\",\n flagName: `--${formatForDisplay(flag.name, caseStyle)}`,\n brief: flag.brief,\n hidden: flag.hidden\n };\n}\nfunction formatDocumentationForFlagParameters(flags, aliases, args) {\n const { keywords } = args.text;\n const visibleFlags = Object.entries(flags).filter(([, flag]) => {\n if (flag.hidden && !args.includeHidden) {\n return false;\n }\n return true;\n });\n const atLeastOneOptional = visibleFlags.some(([, flag]) => isOptionalAtRuntime(flag));\n const rows = visibleFlags.map(([name, flag]) => {\n const aliasStrings = Object.entries(aliases).filter((entry) => entry[1] === name).map(([alias]) => `-${alias}`);\n let flagName = \"--\" + formatForDisplay(name, args.config.caseStyle);\n if (flag.kind === \"boolean\" && flag.default !== false && flag.withNegated !== false) {\n const negatedFlagName = formatAsNegated(name, args.config.caseStyle);\n flagName = `${flagName}/--${negatedFlagName}`;\n }\n if (isOptionalAtRuntime(flag)) {\n flagName = `[${flagName}]`;\n } else if (atLeastOneOptional) {\n flagName = ` ${flagName}`;\n }\n if (flag.kind === \"parsed\" && flag.variadic) {\n flagName = `${flagName}...`;\n }\n const suffixParts = [];\n if (flag.kind === \"enum\") {\n const choices = flag.values.join(\"|\");\n suffixParts.push(choices);\n }\n if (hasDefault(flag)) {\n const defaultKeyword = args.ansiColor ? `\\x1B[2m${keywords.default}\\x1B[22m` : keywords.default;\n let defaultValue;\n if (Array.isArray(flag.default)) {\n if (flag.default.length === 0) {\n defaultValue = \"[]\";\n } else {\n const separator = \"variadic\" in flag && typeof flag.variadic === \"string\" ? flag.variadic : \" \";\n defaultValue = flag.default.join(separator);\n }\n } else {\n defaultValue = flag.default === \"\" ? `\"\"` : String(flag.default);\n }\n suffixParts.push(`${defaultKeyword} ${defaultValue}`);\n }\n if (\"variadic\" in flag && typeof flag.variadic === \"string\") {\n const separatorKeyword = args.ansiColor ? `\\x1B[2m${keywords.separator}\\x1B[22m` : keywords.separator;\n suffixParts.push(`${separatorKeyword} ${flag.variadic}`);\n }\n const suffix = suffixParts.length > 0 ? `[${suffixParts.join(\", \")}]` : void 0;\n return {\n aliases: aliasStrings.join(\" \"),\n flagName,\n brief: flag.brief,\n suffix,\n hidden: flag.hidden\n };\n });\n for (const flag of args.additionalFlags) {\n if (flag.hidden && !args.includeHidden) {\n continue;\n }\n const row = formatRowForAdditionalFlag(flag, args.config.caseStyle);\n rows.push({\n ...row,\n flagName: atLeastOneOptional ? ` ${row.flagName}` : row.flagName\n });\n }\n if (args.includeArgumentEscapeSequenceFlag) {\n rows.push({\n aliases: \"\",\n flagName: atLeastOneOptional ? \" --\" : \"--\",\n brief: args.text.briefs.argumentEscapeSequence\n });\n }\n return formatRowsWithColumns(\n rows.map((row) => {\n if (!args.ansiColor) {\n return [row.aliases, row.flagName, row.brief, row.suffix ?? \"\"];\n }\n return [\n row.hidden ? `\\x1B[2m${row.aliases}\\x1B[22m` : `\\x1B[1m${row.aliases}\\x1B[22m`,\n row.hidden ? `\\x1B[2m${row.flagName}\\x1B[22m` : `\\x1B[1m${row.flagName}\\x1B[22m`,\n row.hidden ? `\\x1B[2;3m${row.brief}\\x1B[22;23m` : `\\x1B[;;3m${row.brief}\\x1B[;;;23m`,\n row.suffix ?? \"\"\n ];\n }),\n [\" \", \" \", \" \"]\n );\n}\nfunction* generateUsageLinesForAdditionalFlags(flags, includeHidden, caseStyle, useAliasInUsageLine) {\n for (const flag of flags) {\n if (flag.hidden && !includeHidden) {\n continue;\n }\n if (useAliasInUsageLine && flag.aliases && flag.aliases.length > 0) {\n yield `-${flag.aliases[0]}`;\n } else {\n yield `--${formatForDisplay(flag.name, caseStyle)}`;\n }\n }\n}\n\n// src/parameter/positional/formatting.ts\nfunction formatDocumentationForPositionalParameters(positional, args) {\n if (positional.kind === \"array\") {\n const name = positional.parameter.placeholder ?? \"args\";\n const argName = args.ansiColor ? `\\x1B[1m${name}...\\x1B[22m` : `${name}...`;\n const brief = args.ansiColor ? `\\x1B[3m${positional.parameter.brief}\\x1B[23m` : positional.parameter.brief;\n return formatRowsWithColumns([[argName, brief]], [\" \"]);\n }\n const { keywords } = args.text;\n const atLeastOneOptional = positional.parameters.some((def) => def.optional);\n return formatRowsWithColumns(\n positional.parameters.map((def, i) => {\n let name = def.placeholder ?? `arg${i + 1}`;\n let suffix;\n if (def.optional) {\n name = `[${name}]`;\n } else if (atLeastOneOptional) {\n name = ` ${name}`;\n }\n if (def.default) {\n const defaultKeyword = args.ansiColor ? `\\x1B[2m${keywords.default}\\x1B[22m` : keywords.default;\n suffix = `[${defaultKeyword} ${def.default}]`;\n }\n return [\n args.ansiColor ? `\\x1B[1m${name}\\x1B[22m` : name,\n args.ansiColor ? `\\x1B[3m${def.brief}\\x1B[23m` : def.brief,\n suffix ?? \"\"\n ];\n }),\n [\" \", \" \"]\n );\n}\n\n// src/routing/command/documentation.ts\nfunction* generateCommandHelpLines(parameters, docs, args) {\n const { brief, fullDescription, customUsage } = docs;\n const { headers } = args.text;\n const prefix = args.prefix.join(\" \");\n yield args.ansiColor ? `\\x1B[4m${headers.usage}\\x1B[24m` : headers.usage;\n if (customUsage) {\n for (const usage of customUsage) {\n if (typeof usage === \"string\") {\n yield ` ${prefix} ${usage}`;\n } else {\n const brief2 = args.ansiColor ? `\\x1B[3m${usage.brief}\\x1B[23m` : usage.brief;\n yield ` ${prefix} ${usage.input}\n ${brief2}`;\n }\n }\n } else {\n yield ` ${formatUsageLineForParameters(parameters, args)}`;\n }\n for (const line of generateUsageLinesForAdditionalFlags(\n args.additionalFlags,\n args.includeHidden,\n args.config.caseStyle,\n args.config.useAliasInUsageLine\n )) {\n yield ` ${prefix} ${line}`;\n }\n yield \"\";\n yield fullDescription ?? brief;\n if (args.aliases && args.aliases.length > 0) {\n const aliasPrefix = args.prefix.slice(0, -1).join(\" \");\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.aliases}\\x1B[24m` : headers.aliases;\n for (const alias of args.aliases) {\n yield ` ${aliasPrefix} ${alias}`;\n }\n }\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.flags}\\x1B[24m` : headers.flags;\n for (const line of formatDocumentationForFlagParameters(parameters.flags ?? {}, parameters.aliases ?? {}, args)) {\n yield ` ${line}`;\n }\n const positional = parameters.positional ?? { kind: \"tuple\", parameters: [] };\n if (positional.kind === \"array\" || positional.parameters.length > 0) {\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.arguments}\\x1B[24m` : headers.arguments;\n for (const line of formatDocumentationForPositionalParameters(positional, args)) {\n yield ` ${line}`;\n }\n }\n}\n\n// src/routing/command/builder.ts\nfunction* asNegationFlagNames(flagName) {\n yield `no-${convertCamelCaseToKebabCase(flagName)}`;\n yield `no${flagName[0].toUpperCase()}${flagName.slice(1)}`;\n}\nfunction checkForNegationCollisions(flags) {\n const flagsAllowingNegation = Object.entries(flags).filter(([, flag]) => flag.kind === \"boolean\" && !flag.optional);\n for (const [internalFlagName] of flagsAllowingNegation) {\n for (const negatedFlagName of asNegationFlagNames(internalFlagName)) {\n if (negatedFlagName in flags) {\n throw new InternalError(\n `Unable to allow negation for --${internalFlagName} as it conflicts with --${negatedFlagName}`\n );\n }\n }\n }\n}\nfunction checkForInvalidVariadicSeparators(flags) {\n for (const [internalFlagName, flag] of Object.entries(flags)) {\n if (\"variadic\" in flag && typeof flag.variadic === \"string\") {\n if (flag.variadic.length < 1) {\n throw new InternalError(\n `Unable to use \"\" as variadic separator for --${internalFlagName} as it is empty`\n );\n }\n if (/\\s/.test(flag.variadic)) {\n throw new InternalError(\n `Unable to use \"${flag.variadic}\" as variadic separator for --${internalFlagName} as it contains whitespace`\n );\n }\n }\n }\n}\nfunction buildCommand(builderArgs) {\n const { flags = {}, aliases = {} } = builderArgs.parameters;\n checkForNegationCollisions(flags);\n checkForInvalidVariadicSeparators(flags);\n let loader;\n if (\"func\" in builderArgs) {\n loader = async () => builderArgs.func;\n } else {\n loader = builderArgs.loader;\n }\n return {\n kind: CommandSymbol,\n loader,\n parameters: builderArgs.parameters,\n get brief() {\n return builderArgs.docs.brief;\n },\n /* v8 ignore next -- @preserve */\n get fullDescription() {\n return builderArgs.docs.fullDescription;\n },\n formatUsageLine: (args) => {\n return formatUsageLineForParameters(builderArgs.parameters, args);\n },\n formatHelp: (args) => {\n const lines = [\n ...generateCommandHelpLines(builderArgs.parameters, builderArgs.docs, args)\n ];\n const text = lines.join(\"\\n\");\n return text + \"\\n\";\n },\n usesFlag: (flagName, caseStyle) => {\n if (caseStyle === \"allow-kebab-for-camel\") {\n const kebabCase = convertCamelCaseToKebabCase(flagName);\n if (kebabCase in flags) {\n return true;\n }\n }\n return Boolean(flagName in flags || flagName in aliases);\n }\n };\n}\n\n// src/routing/route-map/documentation.ts\nfunction* generateRouteMapHelpLines(routes, docs, args) {\n const { brief, fullDescription, hideRoute } = docs;\n const { headers } = args.text;\n yield args.ansiColor ? `\\x1B[4m${headers.usage}\\x1B[24m` : headers.usage;\n for (const [name, route] of Object.entries(routes)) {\n if (!hideRoute || !hideRoute[name] || args.includeHidden) {\n const externalRouteName = args.config.caseStyle === \"convert-camel-to-kebab\" ? convertCamelCaseToKebabCase(name) : name;\n yield ` ${route.formatUsageLine({\n ...args,\n prefix: [...args.prefix, externalRouteName]\n })}`;\n }\n }\n const prefix = args.prefix.join(\" \");\n for (const line of generateUsageLinesForAdditionalFlags(\n args.additionalFlags,\n args.includeHidden,\n args.config.caseStyle,\n args.config.useAliasInUsageLine\n )) {\n yield ` ${prefix} ${line}`;\n }\n yield \"\";\n yield fullDescription ?? brief;\n if (args.aliases && args.aliases.length > 0) {\n const aliasPrefix = args.prefix.slice(0, -1).join(\" \");\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.aliases}\\x1B[24m` : headers.aliases;\n for (const alias of args.aliases) {\n yield ` ${aliasPrefix} ${alias}`;\n }\n }\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.flags}\\x1B[24m` : headers.flags;\n for (const line of formatDocumentationForFlagParameters({}, {}, args)) {\n yield ` ${line}`;\n }\n yield \"\";\n yield args.ansiColor ? `\\x1B[4m${headers.commands}\\x1B[24m` : headers.commands;\n const visibleRoutes = Object.entries(routes).filter(\n ([name]) => !hideRoute || !hideRoute[name] || args.includeHidden\n );\n const rows = visibleRoutes.map(([internalRouteName, route]) => {\n const externalRouteName = formatForDisplay(internalRouteName, args.config.caseStyle);\n return {\n routeName: externalRouteName,\n brief: route.brief,\n hidden: hideRoute && hideRoute[internalRouteName]\n };\n });\n const formattedRows = formatRowsWithColumns(\n rows.map((row) => {\n if (!args.ansiColor) {\n return [row.routeName, row.brief];\n }\n return [\n row.hidden ? `\\x1B[2m${row.routeName}\\x1B[22m` : `\\x1B[1m${row.routeName}\\x1B[22m`,\n row.hidden ? `\\x1B[2;3m${row.brief}\\x1B[22;23m` : `\\x1B[;;3m${row.brief}\\x1B[;;;23m`\n ];\n }),\n [\" \"]\n );\n for (const line of formattedRows) {\n yield ` ${line}`;\n }\n}\n\n// src/routing/route-map/builder.ts\nfunction buildRouteMap({\n routes,\n defaultCommand: defaultCommandRoute,\n docs,\n aliases\n}) {\n if (Object.entries(routes).length === 0) {\n throw new InternalError(\"Route map must contain at least one route\");\n }\n const activeAliases = aliases ?? {};\n const aliasesByRoute = /* @__PURE__ */ new Map();\n for (const [alias, routeName] of Object.entries(activeAliases)) {\n if (alias in routes) {\n throw new InternalError(`Cannot use '${alias}' as an alias when a route with that name already exists`);\n }\n const routeAliases = aliasesByRoute.get(routeName) ?? [];\n aliasesByRoute.set(routeName, [...routeAliases, alias]);\n }\n const defaultCommand = defaultCommandRoute ? routes[defaultCommandRoute] : void 0;\n if (defaultCommand && defaultCommand.kind === RouteMapSymbol) {\n throw new InternalError(\n `Cannot use '${defaultCommandRoute}' as the default command because it is not a Command`\n );\n }\n const resolveRouteName = (input) => {\n if (input in activeAliases) {\n return activeAliases[input];\n } else if (input in routes) {\n return input;\n }\n };\n return {\n kind: RouteMapSymbol,\n get brief() {\n return docs.brief;\n },\n /* v8 ignore next -- @preserve */\n get fullDescription() {\n return docs.fullDescription;\n },\n formatUsageLine(args) {\n const routeNames = this.getAllEntries().filter((entry) => !entry.hidden).map((entry) => entry.name[args.config.caseStyle]);\n return `${args.prefix.join(\" \")} ${routeNames.join(\"|\")} ...`;\n },\n formatHelp: (args) => {\n const lines = [...generateRouteMapHelpLines(routes, docs, args)];\n const text = lines.join(\"\\n\");\n return text + \"\\n\";\n },\n getDefaultCommand: () => {\n return defaultCommand;\n },\n getOtherAliasesForInput: (input, caseStyle) => {\n if (defaultCommandRoute) {\n if (input === defaultCommandRoute) {\n return {\n original: [\"\"],\n \"convert-camel-to-kebab\": [\"\"]\n };\n }\n if (input === \"\") {\n return {\n original: [defaultCommandRoute],\n \"convert-camel-to-kebab\": [defaultCommandRoute]\n };\n }\n }\n const camelInput = convertKebabCaseToCamelCase(input);\n let routeName = resolveRouteName(input);\n if (!routeName && caseStyle === \"allow-kebab-for-camel\") {\n routeName = resolveRouteName(camelInput);\n }\n if (!routeName) {\n return {\n original: [],\n \"convert-camel-to-kebab\": []\n };\n }\n const otherAliases = [routeName, ...aliasesByRoute.get(routeName) ?? []].filter(\n (alias) => alias !== input && alias !== camelInput\n );\n return {\n original: otherAliases,\n \"convert-camel-to-kebab\": otherAliases.map(convertCamelCaseToKebabCase)\n };\n },\n getRoutingTargetForInput: (input) => {\n const routeName = input in activeAliases ? activeAliases[input] : input;\n return routes[routeName];\n },\n getAllEntries() {\n const hiddenRoutes = docs.hideRoute;\n return Object.entries(routes).map(([originalRouteName, target]) => {\n return {\n name: {\n original: originalRouteName,\n \"convert-camel-to-kebab\": convertCamelCaseToKebabCase(originalRouteName)\n },\n target,\n aliases: aliasesByRoute.get(originalRouteName) ?? [],\n hidden: hiddenRoutes?.[originalRouteName] ?? false\n };\n });\n }\n };\n}\n\n// src/index.ts\nasync function run(app, inputs, context) {\n const exitCode = await runApplication(app, inputs, context);\n context.process.exitCode ??= exitCode;\n}\nexport {\n AliasNotFoundError,\n ArgumentParseError,\n ArgumentScannerError,\n EnumValidationError,\n ExitCode,\n FlagNotFoundError,\n InvalidNegatedFlagSyntaxError,\n UnexpectedFlagError,\n UnexpectedPositionalError,\n UnsatisfiedFlagError,\n UnsatisfiedPositionalError,\n booleanParser,\n buildApplication,\n buildChoiceParser,\n buildCommand,\n buildRouteMap,\n formatMessageForArgumentScannerError,\n generateHelpTextForAllCommands,\n help,\n looseBooleanParser,\n numberParser,\n proposeCompletionsForApplication as proposeCompletions,\n run,\n text_en,\n version\n};\n/* v8 ignore next -- @preserve */\n/* v8 ignore if -- @preserve */\n/* v8 ignore else -- @preserve */\n","import { realpath } from \"node:fs/promises\";\nimport { isIP } from \"node:net\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { createJiti } from \"jiti\";\nimport { z } from \"zod\";\nimport { homedir } from \"node:os\";\n//#region ../lib/dist/index.js\nconst durationPattern = /^([1-9]\\d*)(ms|s|m|h|d)$/;\nconst millisecondsByUnit = {\n\td: 1440 * 60 * 1e3,\n\th: 3600 * 1e3,\n\tm: 60 * 1e3,\n\tms: 1,\n\ts: 1e3\n};\nconst durationToMilliseconds = (duration) => {\n\tconst match = durationPattern.exec(duration);\n\tif (!match) return;\n\tconst unit = match[2];\n\tconst milliseconds = Number(match[1]) * millisecondsByUnit[unit];\n\treturn Number.isSafeInteger(milliseconds) ? milliseconds : void 0;\n};\nconst aiContextSnippets = [\"package-source\", \"tech-stack-recommendations\"];\n//#endregion\n//#region src/node/config.ts\nconst zodTypeSchema = z.custom((value) => value instanceof z.ZodType, \"Expected a Zod schema\");\nconst functionSchema = z.custom((value) => typeof value === \"function\", \"Expected a function\");\nconst contractRuntimeSchema = z.object({\n\tinput: zodTypeSchema,\n\toutput: zodTypeSchema\n});\nconst operationRuntimeSchema = z.object({\n\thandle: functionSchema,\n\tinput: zodTypeSchema,\n\toutput: zodTypeSchema\n});\nconst streamHandlerRuntimeSchema = z.object({\n\tcontract: z.object({\n\t\tclientMessage: zodTypeSchema,\n\t\tinput: zodTypeSchema,\n\t\tserverMessage: zodTypeSchema\n\t}),\n\topen: functionSchema\n});\nconst resourceDefinitionRuntimeSchema = z.discriminatedUnion(\"kind\", [\n\tz.object({\n\t\tcontract: contractRuntimeSchema,\n\t\tkind: z.literal(\"query\"),\n\t\tread: functionSchema\n\t}),\n\tz.object({\n\t\tcontract: contractRuntimeSchema,\n\t\tkind: z.literal(\"subscription\"),\n\t\tread: functionSchema,\n\t\tsubscribe: functionSchema\n\t}),\n\tz.object({\n\t\tcombine: functionSchema,\n\t\tcontract: contractRuntimeSchema,\n\t\tdependencies: z.record(z.string(), z.string()),\n\t\tkind: z.literal(\"derived\")\n\t})\n]);\nconst authDurationSchema = z.string().regex(/^[1-9]\\d*[mhd]$/, \"Expected a positive duration such as 30d\").refine((value) => durationToMilliseconds(value) !== void 0, \"Duration is too large\");\nconst isLoopbackHostname = (hostname) => hostname === \"localhost\" || hostname === \"[::1]\" || /^127(?:\\.\\d{1,3}){3}$/.test(hostname);\nconst exactOriginSchema = z.url().refine((value) => new URL(value).origin === value, \"Expected an origin\").refine((value) => {\n\tconst url = new URL(value);\n\treturn url.protocol === \"https:\" || url.protocol === \"http:\" && isLoopbackHostname(url.hostname);\n}, \"Non-loopback Overmux origins must use HTTPS\");\nconst loopbackPeerSchema = z.string().refine((value) => isIP(value) !== 0 && (value === \"::1\" || value.startsWith(\"127.\")), \"Expected a loopback IP address\");\nconst authConfigRuntimeSchema = z.object({\n\tmode: z.literal(\"cli-login\"),\n\torigins: z.array(exactOriginSchema).min(1).refine((origins) => new Set(origins).size === origins.length, \"Expected unique origins\").optional(),\n\tsessionLifetime: z.union([z.literal(\"never\"), authDurationSchema]).default(\"never\"),\n\ttrustedProxyPeer: loopbackPeerSchema.optional()\n}).strict();\nconst serverConfigRuntimeSchema = z.object({\n\thost: z.string().min(1).optional(),\n\tlogFile: z.string().min(1).optional(),\n\tport: z.number().int().min(1).max(65535).optional(),\n\tproductionWebAssetsDir: z.string().min(1).optional(),\n\twatch: z.boolean().optional()\n});\nconst serverDefinitionRuntimeSchema = z.object({\n\toperations: z.record(z.string(), operationRuntimeSchema).optional(),\n\tresources: z.record(z.string(), resourceDefinitionRuntimeSchema),\n\tstreams: z.record(z.string(), streamHandlerRuntimeSchema).optional()\n});\nconst configDefinitionRuntimeSchema = serverConfigRuntimeSchema.extend({\n\taiContextSnippets: z.array(z.enum(aiContextSnippets)).optional(),\n\tauth: authConfigRuntimeSchema,\n\tdebug: z.boolean().optional(),\n\tserver: serverDefinitionRuntimeSchema,\n\tvite: z.string().min(1).optional()\n});\nconst resolveLogicalPath = async (path) => {\n\tconst logicalPath = resolve(path);\n\treturn {\n\t\tlogicalPath,\n\t\trealPath: await realpath(logicalPath)\n\t};\n};\nconst resolveOvermuxConfigPaths = async (configPath) => {\n\tconst { logicalPath, realPath } = await resolveLogicalPath(configPath);\n\treturn {\n\t\tlogicalApplicationRoot: dirname(logicalPath),\n\t\tlogicalConfigPath: logicalPath,\n\t\trealApplicationRoot: dirname(realPath),\n\t\trealConfigPath: realPath\n\t};\n};\nconst unwrapDefaultExport = (module) => {\n\tif (typeof module === \"object\" && module !== null && \"default\" in module) return module.default;\n\treturn module;\n};\nconst loadOvermuxConfig = async ({ aliases = {}, configPath }) => {\n\tconst paths = await resolveOvermuxConfigPaths(configPath);\n\tconst module = await createJiti(paths.logicalConfigPath, {\n\t\talias: aliases,\n\t\tfsCache: true,\n\t\tjsx: {\n\t\t\timportSource: \"react\",\n\t\t\truntime: \"automatic\"\n\t\t},\n\t\tmoduleCache: false,\n\t\tsourceMaps: true,\n\t\ttsconfigPaths: true\n\t}).import(paths.logicalConfigPath);\n\treturn {\n\t\tconfig: configDefinitionRuntimeSchema.parse(unwrapDefaultExport(module)),\n\t\tpaths\n\t};\n};\n//#endregion\n//#region src/node/paths.ts\nconst xdgDirectory = (configured, fallback) => configured && isAbsolute(configured) ? configured : fallback;\nconst overmuxDirectory = (root) => join(root, \"overmux\");\nconst getOvermuxPaths = ({ environment = process.env, homeDir = homedir(), xdgCacheHome = environment.XDG_CACHE_HOME, xdgConfigHome = environment.XDG_CONFIG_HOME, xdgDataHome = environment.XDG_DATA_HOME, xdgRuntimeDir = environment.XDG_RUNTIME_DIR, xdgStateHome = environment.XDG_STATE_HOME } = {}) => {\n\tif (!isAbsolute(homeDir)) throw new TypeError(\"The home directory must be absolute.\");\n\tconst runtimeDir = xdgRuntimeDir && isAbsolute(xdgRuntimeDir) ? overmuxDirectory(xdgRuntimeDir) : void 0;\n\treturn {\n\t\tcacheDir: overmuxDirectory(xdgDirectory(xdgCacheHome, join(homeDir, \".cache\"))),\n\t\tconfigDir: overmuxDirectory(xdgDirectory(xdgConfigHome, join(homeDir, \".config\"))),\n\t\tdataDir: overmuxDirectory(xdgDirectory(xdgDataHome, join(homeDir, \".local\", \"share\"))),\n\t\t...runtimeDir ? { runtimeDir } : {},\n\t\tstateDir: overmuxDirectory(xdgDirectory(xdgStateHome, join(homeDir, \".local\", \"state\")))\n\t};\n};\n//#endregion\nexport { authConfigRuntimeSchema, authDurationSchema, configDefinitionRuntimeSchema, getOvermuxPaths, loadOvermuxConfig, resolveLogicalPath, resolveOvermuxConfigPaths, serverConfigRuntimeSchema, serverDefinitionRuntimeSchema };\n\n//# sourceMappingURL=index.js.map","import { z } from \"zod\";\n//#region src/ai-context.ts\nconst packageSourceSnippet = \"package-source\";\nconst techStackRecommendationsSnippet = \"tech-stack-recommendations\";\nconst aiContextSnippets = [packageSourceSnippet, techStackRecommendationsSnippet];\n//#endregion\n//#region src/hosted-routes.ts\nconst overmuxSettingsPath = \"/_overmux/settings\";\nconst overmuxLogoutPath = \"/_overmux/logout\";\nconst reservedPathPrefixes = [\n\t\"/_overmux\",\n\t\"/api\",\n\t\"/login\"\n];\nconst returnToBase = \"https://overmux.invalid\";\nconst isReservedPath = (pathname) => reservedPathPrefixes.some((prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`));\nconst resolveOvermuxReturnTo = (candidate) => {\n\tif (!candidate?.startsWith(\"/\") || candidate.startsWith(\"//\")) return \"/\";\n\ttry {\n\t\tconst url = new URL(candidate, returnToBase);\n\t\tconst decodedPathname = decodeURIComponent(url.pathname);\n\t\tif (url.origin !== returnToBase || isReservedPath(decodedPathname)) return \"/\";\n\t\treturn `${url.pathname}${url.search}${url.hash}`;\n\t} catch {\n\t\treturn \"/\";\n\t}\n};\nconst createOvermuxSettingsPath = (returnTo) => {\n\tconst safeReturnTo = resolveOvermuxReturnTo(returnTo);\n\tif (safeReturnTo === \"/\") return overmuxSettingsPath;\n\tconst search = new URLSearchParams({ returnTo: safeReturnTo });\n\treturn `${overmuxSettingsPath}?${search.toString()}`;\n};\n//#endregion\n//#region src/notifications.ts\nconst safeRelativeNotificationLink = (link) => {\n\tlet decoded;\n\ttry {\n\t\tdecoded = decodeURIComponent(link);\n\t} catch {\n\t\treturn false;\n\t}\n\treturn !decoded.startsWith(\"//\") && !decoded.includes(\"\\\\\") && ![...decoded].some((character) => {\n\t\tconst codePoint = character.codePointAt(0) ?? 0;\n\t\treturn codePoint < 32 || codePoint === 127;\n\t});\n};\nconst notificationLinkSchema = z.union([z.string().max(4096).startsWith(\"/\").refine(safeRelativeNotificationLink), z.string().max(4096).url().refine((link) => {\n\tif (!URL.canParse(link)) return false;\n\tconst url = new URL(link);\n\treturn [\"http:\", \"https:\"].includes(url.protocol) && !url.username && !url.password;\n})]);\nconst notificationSchema = z.object({\n\tbody: z.string().max(4096).optional(),\n\topen: z.object({ link: notificationLinkSchema }).strict().optional(),\n\ttitle: z.string().min(1).max(4096)\n}).strict();\n//#endregion\nexport { aiContextSnippets, createOvermuxSettingsPath, notificationLinkSchema, notificationSchema, overmuxLogoutPath, overmuxSettingsPath, packageSourceSnippet, resolveOvermuxReturnTo, techStackRecommendationsSnippet };\n\n//# sourceMappingURL=index.js.map","import {\n packageSourceSnippet,\n techStackRecommendationsSnippet,\n type AiContextSnippet,\n} from \"@overmux/shared\";\n\nexport {\n packageSourceSnippet,\n techStackRecommendationsSnippet,\n type AiContextSnippet,\n};\nexport type AiContextSnippetDefinition = readonly AiContextSnippet[];\n\nexport const coreAiContextSnippets = [\n packageSourceSnippet,\n] as const satisfies AiContextSnippetDefinition;\nexport const defaultAiContextSnippets = [\n ...coreAiContextSnippets,\n techStackRecommendationsSnippet,\n] as const satisfies AiContextSnippetDefinition;\n\nconst packageSourceSnippetContent = `Overmux ships with documentation and TypeScript source.\n\nRun \\`overmux docs\\` to find the installed documentation and source for the overmux cli.\n\nE.g. \\`node_modules/overmux\\` and \\`node_modules/@overmux/xterm\\`.\n\nInspect these files so guidance matches the versions used by the application.`;\n\nconst techStackRecommendationsSnippetContent = `Prefer pnpm as the package manager, TanStack Router for routing, shadcn/ui for UI components, and Zod for schemas and runtime validation. Follow the application's established stack when it already differs.`;\n\nconst aiContextContentBySnippet: Record<AiContextSnippet, string> = {\n [packageSourceSnippet]: packageSourceSnippetContent,\n [techStackRecommendationsSnippet]: techStackRecommendationsSnippetContent,\n};\n\nexport const composeAiContext = (snippets: AiContextSnippetDefinition) =>\n snippets.length === 0\n ? \"\"\n : `${snippets\n .map(\n (snippet) => `## ${snippet}\\n\\n${aiContextContentBySnippet[snippet]}`,\n )\n .join(\"\\n\\n\")}\\n`;\n","import {\n getOvermuxPaths,\n type GetOvermuxPathsOptions,\n type OvermuxPaths,\n} from \"@overmux/shared/node\";\nimport { join } from \"node:path\";\n\nexport { getOvermuxPaths };\nexport type { GetOvermuxPathsOptions, OvermuxPaths };\n\nexport const getDefaultConfigPath = (\n options: Pick<GetOvermuxPathsOptions, \"homeDir\" | \"xdgConfigHome\"> = {},\n) => join(getOvermuxPaths(options).configDir, \"overmux.config.ts\");\n","import { loadOvermuxConfig } from \"@overmux/shared/node\";\nimport { buildCommand, buildRouteMap } from \"@stricli/core\";\n\nimport {\n composeAiContext,\n defaultAiContextSnippets,\n} from \"../../../public/ai-context\";\nimport { getDefaultConfigPath } from \"../../server/paths\";\n\ntype AiContextFlags = { config: string };\n\nconst printAiContext = async (\n flags: AiContextFlags,\n process: NodeJS.Process,\n) => {\n const { config } = await loadOvermuxConfig({ configPath: flags.config });\n process.stdout.write(\n composeAiContext(config.aiContextSnippets ?? defaultAiContextSnippets),\n );\n};\n\nconst createAiContextCommand = (process: NodeJS.Process) =>\n buildCommand({\n func: (flags: AiContextFlags) => printAiContext(flags, process),\n parameters: {\n aliases: { c: \"config\" },\n flags: {\n config: {\n brief: \"Configuration file\",\n default: getDefaultConfigPath(),\n kind: \"parsed\",\n parse: String,\n placeholder: \"path\",\n },\n },\n },\n docs: { brief: \"Print the configured Overmux AI context\" },\n });\n\nexport const createAiRoute = (process: NodeJS.Process) =>\n buildRouteMap({\n docs: { brief: \"Print Overmux AI context\" },\n routes: { context: createAiContextCommand(process) },\n });\n","/*\n * Provides private, schema-validated JSON files with atomic persistence: directories and files\n * use owner-only modes; writes fsync a temporary file before rename replacement or hard-link\n * exclusive publication so concurrent first creation safely converges.\n */\nimport { randomUUID } from \"node:crypto\";\nimport {\n chmod,\n link,\n mkdir,\n open,\n readFile,\n rename,\n rm,\n} from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport type { z } from \"zod\";\n\nconst missingFile = (cause: unknown) =>\n (cause as NodeJS.ErrnoException).code === \"ENOENT\";\n\nconst preparePrivateDirectory = async (path: string) => {\n await mkdir(path, { mode: 0o700, recursive: true });\n await chmod(path, 0o700);\n};\n\nconst writeTemporaryPrivateJson = async (path: string, value: unknown) => {\n await preparePrivateDirectory(dirname(path));\n const temporaryPath = `${path}.${process.pid}.${randomUUID()}`;\n try {\n const handle = await open(temporaryPath, \"wx\", 0o600);\n try {\n await handle.writeFile(`${JSON.stringify(value)}\\n`);\n await handle.sync();\n } finally {\n await handle.close();\n }\n return temporaryPath;\n } catch (cause) {\n await rm(temporaryPath, { force: true });\n throw cause;\n }\n};\n\nexport const readPrivateJson = async <TSchema extends z.ZodType>(\n path: string,\n schema: TSchema,\n): Promise<z.output<TSchema> | undefined> => {\n try {\n const contents = await readFile(path, \"utf8\");\n await chmod(path, 0o600);\n return schema.parse(JSON.parse(contents));\n } catch (cause) {\n if (missingFile(cause)) {\n return undefined;\n }\n throw cause;\n }\n};\n\nexport const replacePrivateJsonAtomically = async (\n path: string,\n value: unknown,\n) => {\n const temporaryPath = await writeTemporaryPrivateJson(path, value);\n try {\n await rename(temporaryPath, path);\n } catch (cause) {\n await rm(temporaryPath, { force: true });\n throw cause;\n }\n};\n\nexport const createPrivateJsonExclusively = async (\n path: string,\n value: unknown,\n) => {\n const temporaryPath = await writeTemporaryPrivateJson(path, value);\n try {\n await link(temporaryPath, path);\n } finally {\n await rm(temporaryPath, { force: true });\n }\n};\n","import { createHash, randomBytes } from \"node:crypto\";\nimport { chmod, mkdir, readdir, rm } from \"node:fs/promises\";\nimport { createConnection, createServer, type Socket } from \"node:net\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { z } from \"zod\";\n\nimport { getOvermuxPaths } from \"../paths\";\nimport {\n readPrivateJson,\n replacePrivateJsonAtomically,\n} from \"../notifications/private-json-file\";\nimport type { AuthService } from \"./auth-service\";\n\nconst maxControlMessageBytes = 16_384;\n\nconst controlRequestSchema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"ping\") }).strict(),\n z.object({ type: z.literal(\"create-login\") }).strict(),\n z.object({ type: z.literal(\"issue-bearer\") }).strict(),\n z.object({ type: z.literal(\"list-sessions\") }).strict(),\n z.object({ id: z.string(), type: z.literal(\"revoke-session\") }).strict(),\n z.object({ type: z.literal(\"revoke-all\") }).strict(),\n]);\n\nconst loginGrantSchema = z\n .object({\n code: z.string(),\n expiresAt: z.string(),\n id: z.string(),\n urls: z.array(z.string()),\n })\n .strict();\n\nconst sessionSchema = z\n .object({\n createdAt: z.string(),\n expiresAt: z.string().optional(),\n id: z.string(),\n lastSeenAt: z.string(),\n origin: z.string().optional(),\n revokedAt: z.string().optional(),\n })\n .strict();\n\nconst controlResponseSchemas = {\n \"create-login\": z\n .object({ login: loginGrantSchema, ok: z.literal(true) })\n .strict(),\n \"issue-bearer\": z\n .object({\n bearer: z.object({ expiresAt: z.string(), token: z.string() }).strict(),\n ok: z.literal(true),\n })\n .strict(),\n \"list-sessions\": z\n .object({ ok: z.literal(true), sessions: z.array(sessionSchema) })\n .strict(),\n ping: z.object({ ok: z.literal(true) }).strict(),\n \"revoke-all\": z\n .object({ count: z.number().int().nonnegative(), ok: z.literal(true) })\n .strict(),\n \"revoke-session\": z\n .object({ ok: z.literal(true), revoked: z.boolean() })\n .strict(),\n};\n\nconst controlResponseEnvelopeSchema = z\n .object({ error: z.unknown().optional(), ok: z.unknown() })\n .passthrough();\n\nconst registrationSchema = z.object({\n apiUrl: z.string().url(),\n controlSocket: z.string(),\n id: z.string(),\n pid: z.number().int().positive(),\n port: z.number().int().min(1).max(65_535),\n url: z.string().url(),\n});\n\nexport type InstanceRegistration = z.infer<typeof registrationSchema>;\nexport type ControlRequest = z.infer<typeof controlRequestSchema>;\nexport type InstanceControl = { close: () => Promise<void> };\n\ntype ControlResponseByType = {\n [Type in keyof typeof controlResponseSchemas]: z.infer<\n (typeof controlResponseSchemas)[Type]\n >;\n};\n\nconst runtimeDirectory = () => {\n const paths = getOvermuxPaths();\n const preferred = paths.runtimeDir ?? join(paths.stateDir, \"runtime\");\n if (Buffer.byteLength(preferred) <= 80) {\n return preferred;\n }\n const suffix = createHash(\"sha256\")\n .update(preferred)\n .digest(\"hex\")\n .slice(0, 12);\n return join(tmpdir(), `overmux-${process.getuid?.() ?? \"user\"}-${suffix}`);\n};\n\nconst readNewlineFrame = ({\n maximumBytes,\n socket,\n timeout,\n}: {\n maximumBytes: number;\n socket: Socket;\n timeout?: number;\n}): Promise<Buffer> =>\n new Promise((resolve, reject) => {\n let buffer = Buffer.alloc(0);\n let timer: NodeJS.Timeout | undefined;\n\n const cleanup = () => {\n socket.off(\"data\", onData);\n socket.off(\"end\", onEnd);\n socket.off(\"error\", onError);\n if (timer) {\n clearTimeout(timer);\n }\n };\n const fail = (cause: Error) => {\n cleanup();\n reject(cause);\n };\n const onData = (chunk: Buffer) => {\n buffer = Buffer.concat([buffer, chunk]);\n if (buffer.length > maximumBytes) {\n fail(new Error(\"Control message is too large\"));\n return;\n }\n const newline = buffer.indexOf(0x0a);\n if (newline < 0) {\n return;\n }\n cleanup();\n resolve(buffer.subarray(0, newline));\n };\n const onEnd = () =>\n fail(new Error(\"Control socket ended before a complete frame\"));\n const onError = (cause: Error) => fail(cause);\n\n if (socket.errored) {\n fail(socket.errored);\n } else if (socket.readableEnded || socket.destroyed) {\n fail(new Error(\"Control socket is already closed\"));\n } else {\n socket.on(\"data\", onData);\n socket.once(\"end\", onEnd);\n socket.once(\"error\", onError);\n if (timeout !== undefined) {\n timer = setTimeout(() => {\n socket.destroy();\n fail(new Error(\"Control request timed out\"));\n }, timeout);\n }\n }\n });\n\nconst writeResponse = (socket: Socket, response: unknown) => {\n socket.end(`${JSON.stringify(response)}\\n`);\n};\n\nconst handleRequest = async (auth: AuthService, request: ControlRequest) => {\n if (request.type === \"ping\") {\n return { ok: true };\n }\n if (request.type === \"create-login\") {\n return { login: await auth.createLoginGrant(), ok: true };\n }\n if (request.type === \"issue-bearer\") {\n return { bearer: await auth.issueLocalBearer(), ok: true };\n }\n if (request.type === \"list-sessions\") {\n return { ok: true, sessions: await auth.listSessions() };\n }\n if (request.type === \"revoke-session\") {\n return { ok: true, revoked: await auth.revokeSession(request.id) };\n }\n return { count: await auth.revokeAllSessions(), ok: true };\n};\n\nconst handleConnection = async ({\n auth,\n socket,\n}: {\n auth: AuthService;\n socket: Socket;\n}) => {\n try {\n const frame = await readNewlineFrame({\n maximumBytes: maxControlMessageBytes,\n socket,\n });\n const request = controlRequestSchema.parse(JSON.parse(frame.toString()));\n writeResponse(socket, await handleRequest(auth, request));\n } catch (cause) {\n writeResponse(socket, {\n error: cause instanceof Error ? cause.message : \"Invalid control request\",\n ok: false,\n });\n }\n};\n\n// Instance control is the private, same-user administration channel for a running\n// server. It bootstraps browser login grants and short-lived CLI bearers without\n// exposing those privileged operations over HTTP. The owner-only runtime\n// directory, registration file, and Unix socket make OS permissions the root of\n// trust. This boundary intentionally does not defend against another process\n// already running as the same OS user.\nexport const startInstanceControl = async ({\n auth,\n apiUrl,\n port,\n url,\n}: {\n auth: AuthService;\n apiUrl: string;\n port: number;\n url: string;\n}): Promise<InstanceControl> => {\n const directory = runtimeDirectory();\n await mkdir(directory, { mode: 0o700, recursive: true });\n await chmod(directory, 0o700);\n const id = randomBytes(8).toString(\"hex\");\n const socketPath = join(directory, `${id}.sock`);\n const registrationPath = join(directory, `${id}.json`);\n const sockets = new Set<Socket>();\n const server = createServer((socket) => {\n sockets.add(socket);\n socket.once(\"close\", () => sockets.delete(socket));\n void handleConnection({ auth, socket });\n });\n const close = async () => {\n sockets.forEach((socket) => socket.destroy());\n try {\n await new Promise<void>((resolve, reject) =>\n server.close((cause) => (cause ? reject(cause) : resolve())),\n );\n } finally {\n await Promise.all([\n rm(socketPath, { force: true }),\n rm(registrationPath, { force: true }),\n ]);\n }\n };\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(socketPath, () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n try {\n await chmod(socketPath, 0o600);\n await replacePrivateJsonAtomically(registrationPath, {\n apiUrl,\n controlSocket: socketPath,\n id,\n pid: process.pid,\n port,\n url,\n });\n } catch (cause) {\n await close().catch(() => undefined);\n throw cause;\n }\n\n return { close };\n};\n\nconst processIsLive = (pid: number) => {\n try {\n process.kill(pid, 0);\n return true;\n } catch (cause) {\n return (cause as NodeJS.ErrnoException).code === \"EPERM\";\n }\n};\n\n// Finds the sole responsive local server, optionally filtered by port.\nexport const discoverInstance = async (\n port?: number,\n): Promise<InstanceRegistration> => {\n const directory = runtimeDirectory();\n let names: string[];\n try {\n names = await readdir(directory);\n } catch (cause) {\n if ((cause as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(\"No running Overmux server was found\");\n }\n throw cause;\n }\n const candidates = (\n await Promise.all(\n names\n .filter((name) => name.endsWith(\".json\"))\n .map((name) =>\n readPrivateJson(join(directory, name), registrationSchema).catch(\n () => undefined,\n ),\n ),\n )\n ).filter((registration): registration is InstanceRegistration =>\n Boolean(\n registration &&\n processIsLive(registration.pid) &&\n (port === undefined || registration.port === port),\n ),\n );\n const registrations = (\n await Promise.all(\n candidates.map(async (registration) => {\n try {\n await sendControlRequest(registration, { type: \"ping\" });\n return registration;\n } catch {\n return undefined;\n }\n }),\n )\n ).filter(\n (registration): registration is InstanceRegistration =>\n registration !== undefined,\n );\n if (registrations.length === 0) {\n throw new Error(\n port === undefined\n ? \"No running Overmux server was found\"\n : `No running Overmux server was found on port ${port}`,\n );\n }\n if (registrations.length > 1) {\n throw new Error(\n \"Multiple Overmux servers are running; use --port to select one\",\n );\n }\n return registrations[0]!;\n};\n\nexport const sendControlRequest = async <Request extends ControlRequest>(\n registration: InstanceRegistration,\n request: Request,\n): Promise<ControlResponseByType[Request[\"type\"]]> => {\n const socket = createConnection(registration.controlSocket);\n let frame: Buffer;\n try {\n const response = readNewlineFrame({\n maximumBytes: maxControlMessageBytes,\n socket,\n timeout: 1_000,\n });\n socket.once(\"connect\", () => socket.write(`${JSON.stringify(request)}\\n`));\n frame = await response;\n } finally {\n socket.destroy();\n }\n const parsed = controlResponseEnvelopeSchema.safeParse(\n JSON.parse(frame.toString()),\n );\n if (!parsed.success) {\n throw new Error(\"Invalid control response\");\n }\n if (parsed.data.ok !== true) {\n throw new Error(\n typeof parsed.data.error === \"string\"\n ? parsed.data.error\n : \"Control request failed\",\n );\n }\n const response = controlResponseSchemas[request.type].safeParse(parsed.data);\n if (!response.success) {\n throw new Error(\"Invalid control response\");\n }\n return response.data as ControlResponseByType[Request[\"type\"]];\n};\n","import type { LoginGrant } from \"../server/auth/auth-service\";\nimport {\n discoverInstance,\n sendControlRequest,\n} from \"../server/auth/instance-control\";\n\ntype CliOutput = Pick<NodeJS.Process, \"stderr\" | \"stdout\">;\n\nexport const issueLoginGrant = async (port?: number) => {\n const instance = await discoverInstance(port);\n const response = await sendControlRequest(instance, { type: \"create-login\" });\n return { login: response.login, port: instance.port };\n};\n\nexport const printLoginFallback = (port: number, { stdout }: CliOutput) => {\n stdout.write(`Login with \\`overmux auth login --port ${port}\\`\\n`);\n};\n\nexport const printLoginGrant = ({\n login,\n output,\n port,\n}: {\n login: LoginGrant;\n output: CliOutput;\n port: number;\n}) => {\n const expiresIn = Math.max(\n 0,\n Math.ceil((Date.parse(login.expiresAt) - Date.now()) / 60_000),\n );\n output.stdout.write(\n [\n `Code: ${login.code}`,\n ...login.urls.map((url) => `Open: ${url}`),\n \"This single-use grant authenticates one origin. Create another grant to authenticate another origin.\",\n \"Enter the code on the login page shown by an unauthenticated Overmux origin.\",\n `Expires at ${login.expiresAt} (in ${expiresIn} minutes).`,\n `Need another grant? Run \\`overmux auth login --port ${port}\\`.`,\n \"\",\n ].join(\"\\n\"),\n );\n output.stderr.write(\n \"The login URL is a temporary credential; avoid sharing terminal output or screenshots.\\n\",\n );\n};\n","import { serverConfigRuntimeSchema } from \"@overmux/shared/node\";\n\nexport const parsePort = (value: string): Error | number => {\n const port = Number(value);\n return serverConfigRuntimeSchema.shape.port.safeParse(port).success\n ? port\n : new Error(`Invalid port: ${value}`);\n};\n","import { buildCommand, buildRouteMap } from \"@stricli/core\";\n\nimport {\n discoverInstance,\n sendControlRequest,\n} from \"../../server/auth/instance-control\";\nimport type { CliCommandContext } from \"../environment\";\nimport { issueLoginGrant, printLoginGrant } from \"../login\";\nimport { parsePort } from \"../parse-port\";\n\ntype InstanceFlags = { port?: string };\ntype JsonInstanceFlags = InstanceFlags & { json?: boolean };\ntype LoginFlags = JsonInstanceFlags & { code?: boolean; url?: boolean };\ntype RevokeFlags = JsonInstanceFlags & { all?: boolean };\n\nconst selectedPort = (portValue?: string) => {\n const port = portValue === undefined ? undefined : parsePort(portValue);\n if (port instanceof Error) {\n throw port;\n }\n return port;\n};\n\nconst selectedInstance = (portValue?: string) =>\n discoverInstance(selectedPort(portValue));\n\nconst printJson = (value: unknown) =>\n process.stdout.write(`${JSON.stringify(value)}\\n`);\n\nconst runLogin = async (flags: LoginFlags, process: NodeJS.Process) => {\n const formats = [flags.code, flags.url, flags.json].filter(Boolean).length;\n if (formats > 1) {\n throw new Error(\"Only set one of: --code, --url, and --json\");\n }\n const issued = await issueLoginGrant(selectedPort(flags.port));\n if (flags.json) {\n process.stdout.write(`${JSON.stringify(issued.login)}\\n`);\n return;\n }\n if (flags.code) {\n process.stdout.write(`${issued.login.code}\\n`);\n return;\n }\n if (flags.url) {\n process.stdout.write(`${issued.login.urls[0]}\\n`);\n return;\n }\n printLoginGrant({ ...issued, output: process });\n};\n\nfunction runLoginCommand(this: CliCommandContext, flags: LoginFlags) {\n return runLogin(flags, this.process);\n}\n\nconst instanceFlags = {\n port: {\n brief: \"Running local server port\",\n kind: \"parsed\" as const,\n optional: true as const,\n parse: String,\n },\n};\n\nexport const authLoginCommand = buildCommand({\n func: runLoginCommand,\n parameters: {\n flags: {\n code: {\n brief: \"Print only the login code\",\n kind: \"boolean\",\n optional: true,\n },\n json: {\n brief: \"Print machine-readable JSON\",\n kind: \"boolean\",\n optional: true,\n },\n ...instanceFlags,\n url: {\n brief: \"Print only the login URL\",\n kind: \"boolean\",\n optional: true,\n },\n },\n positional: { kind: \"tuple\", parameters: [] },\n },\n docs: { brief: \"Create a single-use browser login grant\" },\n});\n\nconst runList = async (flags: JsonInstanceFlags) => {\n const instance = await selectedInstance(flags.port);\n const response = await sendControlRequest(instance, {\n type: \"list-sessions\",\n });\n if (flags.json) {\n printJson({ sessions: response.sessions });\n return;\n }\n if (response.sessions.length === 0) {\n process.stdout.write(\"No active sessions.\\n\");\n return;\n }\n process.stdout.write(\"ID\\tORIGIN\\tCREATED\\tLAST SEEN\\tEXPIRES\\n\");\n response.sessions.forEach((session) => {\n process.stdout.write(\n `${session.id}\\t${session.origin ?? \"unknown\"}\\t${session.createdAt}\\t${session.lastSeenAt}\\t${session.expiresAt ?? \"never\"}\\n`,\n );\n });\n};\n\nexport const authListCommand = buildCommand({\n func: runList,\n parameters: {\n flags: {\n json: {\n brief: \"Print machine-readable JSON\",\n kind: \"boolean\",\n optional: true,\n },\n ...instanceFlags,\n },\n positional: { kind: \"tuple\", parameters: [] },\n },\n docs: { brief: \"List active browser sessions\" },\n});\n\nconst runRevoke = async (flags: RevokeFlags, id?: string) => {\n if (Boolean(id) === Boolean(flags.all)) {\n throw new Error(\"Specify exactly one session ID or --all\");\n }\n const instance = await selectedInstance(flags.port);\n if (id) {\n const response = await sendControlRequest(instance, {\n id,\n type: \"revoke-session\",\n });\n if (!response.revoked) {\n throw new Error(`Session not found: ${id}`);\n }\n if (flags.json) {\n printJson({ revoked: 1 });\n return;\n }\n process.stdout.write(`Revoked session ${id}.\\n`);\n return;\n }\n const response = await sendControlRequest(instance, { type: \"revoke-all\" });\n if (flags.json) {\n printJson({ revoked: response.count });\n return;\n }\n process.stdout.write(\n `Revoked ${response.count} session${response.count === 1 ? \"\" : \"s\"}.\\n`,\n );\n};\n\nexport const authRevokeCommand = buildCommand({\n func: runRevoke,\n parameters: {\n flags: {\n all: {\n brief: \"Revoke every active session\",\n kind: \"boolean\",\n optional: true,\n },\n json: {\n brief: \"Print machine-readable JSON\",\n kind: \"boolean\",\n optional: true,\n },\n ...instanceFlags,\n },\n positional: {\n kind: \"tuple\",\n parameters: [\n {\n brief: \"Session ID\",\n optional: true,\n parse: String,\n placeholder: \"id\",\n },\n ],\n },\n },\n docs: { brief: \"Revoke browser authentication sessions\" },\n});\n\nexport const authRoute = buildRouteMap({\n docs: { brief: \"Manage CLI-issued browser authentication\" },\n routes: {\n list: authListCommand,\n login: authLoginCommand,\n revoke: authRevokeCommand,\n },\n});\n","// Validates browser subscription data exchanged by background-notification delivery.\n// Browser-standard key and endpoint details stay behind this internal boundary.\nimport { z } from \"zod\";\n\nconst deliveryKeySchema = z\n .string()\n .min(1)\n .max(1_024)\n .regex(/^[\\w-]+$/u);\n\nexport const backgroundNotificationSubscriptionSchema = z\n .object({\n endpoint: z\n .url()\n .max(4_096)\n .refine((endpoint) => {\n const url = new URL(endpoint);\n return url.protocol === \"https:\" && !url.username && !url.password;\n }),\n expirationTime: z.number().int().nonnegative().nullable(),\n keys: z\n .object({ auth: deliveryKeySchema, p256dh: deliveryKeySchema })\n .strict(),\n })\n .strict();\n\nexport const backgroundNotificationPublicKeyResponseSchema = z\n .object({ publicKey: deliveryKeySchema })\n .strict();\n\nexport const backgroundNotificationDisableRequestSchema = z\n .object({ endpoint: backgroundNotificationSubscriptionSchema.shape.endpoint })\n .strict();\n\nexport type BackgroundNotificationSubscription = z.infer<\n typeof backgroundNotificationSubscriptionSchema\n>;\n","import { z } from \"zod\";\n\nimport { notificationSchema } from \"../../public/notifications\";\n\n// Compatibility gate, not negotiation: open tabs may still run older client assets.\n// The exact version rejects incompatible runtime manifest and wire formats before later traffic.\nexport const protocolVersion = 9 as const;\n\n// Application-defined WebSocket close codes shared by server and browser transports.\nexport const webSocketCloseCode = {\n authenticationRevoked: 4001,\n authenticationUnavailable: 4002,\n} as const;\n\nexport const runtimeManifestSchema = z.object({\n debug: z.boolean(),\n operations: z.array(z.string().min(1)),\n protocolVersion: z.literal(protocolVersion),\n resources: z.array(z.string().min(1)),\n streams: z.array(z.string().min(1)),\n});\n\nexport const updateAvailableEventSchema = z.object({\n type: z.literal(\"update-available\"),\n});\n\nexport const restartingEventSchema = z.object({\n type: z.literal(\"restarting\"),\n});\n\nexport const serverLifecycleEventSchema = z.discriminatedUnion(\"type\", [\n updateAvailableEventSchema,\n restartingEventSchema,\n]);\n\nexport const notificationEventSchema = z\n .object({\n notification: notificationSchema,\n type: z.literal(\"notification\"),\n })\n .strict();\n\nconst operationIdSchema = z.string().min(1).max(256);\nconst registrationNameSchema = z.string().min(1).max(256);\n\nexport const resourceReadMessageSchema = z.object({\n input: z.unknown().optional(),\n operationId: operationIdSchema,\n resourceName: registrationNameSchema,\n type: z.literal(\"resource-read\"),\n});\n\nexport const resourceSubscribeMessageSchema = z.object({\n input: z.unknown().optional(),\n operationId: operationIdSchema,\n resourceName: registrationNameSchema,\n subscriptionId: operationIdSchema,\n type: z.literal(\"resource-subscribe\"),\n});\n\nexport const resourceUnsubscribeMessageSchema = z.object({\n subscriptionId: operationIdSchema,\n type: z.literal(\"resource-unsubscribe\"),\n});\n\nexport const streamOpenMessageSchema = z.object({\n input: z.unknown().optional(),\n operationId: operationIdSchema,\n streamId: operationIdSchema,\n streamName: registrationNameSchema,\n type: z.literal(\"stream-open\"),\n});\n\nexport const streamMessageSchema = z.object({\n message: z.unknown(),\n streamId: operationIdSchema,\n type: z.literal(\"stream-message\"),\n});\n\nexport const streamCloseMessageSchema = z.object({\n streamId: operationIdSchema,\n type: z.literal(\"stream-close\"),\n});\n\nexport const clientDiagnosticEventSchema = z.object({\n arguments: z.string().max(16_100),\n level: z.enum([\"log\", \"info\", \"warn\", \"error\", \"debug\"]),\n message: z.string().max(4_100),\n stack: z.string().max(8_100).optional(),\n timestamp: z.iso.datetime(),\n type: z.literal(\"client-diagnostic\"),\n url: z.string().max(2_100).optional(),\n});\n\nexport const clientProtocolMessageSchema = z.discriminatedUnion(\"type\", [\n resourceReadMessageSchema,\n resourceSubscribeMessageSchema,\n resourceUnsubscribeMessageSchema,\n streamOpenMessageSchema,\n streamMessageSchema,\n streamCloseMessageSchema,\n clientDiagnosticEventSchema,\n]);\n\nexport const resourceResultMessageSchema = z.object({\n operationId: operationIdSchema,\n output: z.unknown(),\n type: z.literal(\"resource-result\"),\n});\n\nexport const resourceInvalidatedMessageSchema = z.object({\n subscriptionId: operationIdSchema,\n type: z.literal(\"resource-invalidated\"),\n});\n\nexport const streamOpenedMessageSchema = z.object({\n operationId: operationIdSchema,\n streamId: operationIdSchema,\n type: z.literal(\"stream-opened\"),\n});\n\nexport const streamOutputMessageSchema = z.object({\n message: z.unknown(),\n streamId: operationIdSchema,\n type: z.literal(\"stream-output\"),\n});\n\nexport const streamClosedMessageSchema = z.object({\n streamId: operationIdSchema,\n type: z.literal(\"stream-closed\"),\n});\n\nexport const protocolErrorMessageSchema = z.object({\n code: z.enum([\"bad-request\", \"conflict\", \"internal\", \"not-found\"]),\n message: z.string(),\n operationId: operationIdSchema.optional(),\n streamId: operationIdSchema.optional(),\n subscriptionId: operationIdSchema.optional(),\n type: z.literal(\"error\"),\n});\n\nexport const serverProtocolMessageSchema = z.discriminatedUnion(\"type\", [\n resourceResultMessageSchema,\n resourceInvalidatedMessageSchema,\n streamOpenedMessageSchema,\n streamOutputMessageSchema,\n streamClosedMessageSchema,\n protocolErrorMessageSchema,\n updateAvailableEventSchema,\n restartingEventSchema,\n notificationEventSchema,\n]);\n\nconst byteMarker = \"$overmuxBytes\";\n\ntype EncodedBytes = { [byteMarker]: number[] };\n\nconst encodeValue = (value: unknown): unknown => {\n if (value instanceof Uint8Array) {\n return { [byteMarker]: Array.from(value) } satisfies EncodedBytes;\n }\n if (Array.isArray(value)) {\n return value.map(encodeValue);\n }\n if (typeof value === \"object\" && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, encodeValue(item)]),\n );\n }\n return value;\n};\n\nconst decodeValue = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map(decodeValue);\n }\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n const record = value as Record<string, unknown>;\n if (\n Object.keys(record).length === 1 &&\n Array.isArray(record[byteMarker]) &&\n record[byteMarker].every(\n (item) => Number.isInteger(item) && item >= 0 && item <= 255,\n )\n ) {\n return Uint8Array.from(record[byteMarker] as number[]);\n }\n return Object.fromEntries(\n Object.entries(record).map(([key, item]) => [key, decodeValue(item)]),\n );\n};\n\nconst binaryMarker = \"$overmuxBinary\";\nconst binaryMagic = 0x4f4d5801;\n\ntype EncodedBinary = { [binaryMarker]: [number, number] };\n\nconst encodeBinaryValue = (\n value: unknown,\n payloads: Uint8Array[],\n offset: { value: number },\n): unknown => {\n if (value instanceof Uint8Array) {\n const marker = {\n [binaryMarker]: [offset.value, value.byteLength],\n } satisfies EncodedBinary;\n payloads.push(value);\n offset.value += value.byteLength;\n return marker;\n }\n if (Array.isArray(value)) {\n return value.map((item) => encodeBinaryValue(item, payloads, offset));\n }\n if (typeof value === \"object\" && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n encodeBinaryValue(item, payloads, offset),\n ]),\n );\n }\n return value;\n};\n\nconst decodeBinaryValue = (value: unknown, payload: Uint8Array): unknown => {\n if (Array.isArray(value)) {\n return value.map((item) => decodeBinaryValue(item, payload));\n }\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n const record = value as Record<string, unknown>;\n const marker = record[binaryMarker];\n if (\n Object.keys(record).length === 1 &&\n Array.isArray(marker) &&\n marker.length === 2 &&\n marker.every((item) => Number.isInteger(item) && item >= 0)\n ) {\n const [offset, length] = marker as [number, number];\n if (offset + length > payload.byteLength) {\n throw new Error(\"Invalid Overmux binary payload range\");\n }\n return payload.slice(offset, offset + length);\n }\n return Object.fromEntries(\n Object.entries(record).map(([key, item]) => [\n key,\n decodeBinaryValue(item, payload),\n ]),\n );\n};\n\nexport const encodeProtocolMessage = (message: unknown): string =>\n JSON.stringify(encodeValue(message));\n\nexport const decodeProtocolMessage = (message: string): unknown =>\n decodeValue(JSON.parse(message));\n\nexport const encodeProtocolFrame = (message: unknown): string | Uint8Array => {\n const payloads: Uint8Array[] = [];\n const encoded = encodeBinaryValue(message, payloads, { value: 0 });\n if (!payloads.length) {\n return JSON.stringify(encoded);\n }\n const header = new TextEncoder().encode(JSON.stringify(encoded));\n const payloadLength = payloads.reduce(\n (total, payload) => total + payload.byteLength,\n 0,\n );\n const frame = new Uint8Array(8 + header.byteLength + payloadLength);\n const view = new DataView(frame.buffer);\n view.setUint32(0, binaryMagic);\n view.setUint32(4, header.byteLength);\n frame.set(header, 8);\n let offset = 8 + header.byteLength;\n payloads.forEach((payload) => {\n frame.set(payload, offset);\n offset += payload.byteLength;\n });\n return frame;\n};\n\nexport const decodeProtocolFrame = (\n frame: string | ArrayBuffer | Uint8Array,\n): unknown => {\n if (typeof frame === \"string\") {\n return decodeProtocolMessage(frame);\n }\n const bytes =\n frame instanceof Uint8Array\n ? frame\n : new Uint8Array(frame, 0, frame.byteLength);\n if (bytes.byteLength < 8) {\n throw new Error(\"Invalid Overmux binary frame\");\n }\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n if (view.getUint32(0) !== binaryMagic) {\n throw new Error(\"Invalid Overmux binary frame magic\");\n }\n const headerLength = view.getUint32(4);\n if (8 + headerLength > bytes.byteLength) {\n throw new Error(\"Invalid Overmux binary frame header\");\n }\n const header = JSON.parse(\n new TextDecoder().decode(bytes.subarray(8, 8 + headerLength)),\n ) as unknown;\n return decodeBinaryValue(header, bytes.subarray(8 + headerLength));\n};\n\nexport type RuntimeManifest = z.infer<typeof runtimeManifestSchema>;\nexport type ClientDiagnosticEvent = z.infer<typeof clientDiagnosticEventSchema>;\nexport type ClientProtocolMessage = z.infer<typeof clientProtocolMessageSchema>;\nexport type ServerLifecycleEvent = z.infer<typeof serverLifecycleEventSchema>;\nexport type ServerProtocolMessage = z.infer<typeof serverProtocolMessageSchema>;\n","// Composes runtime and request cancellation while owning asynchronous cleanup.\n// Tracked disposers run exactly once, and aggregate shutdown reports every failure.\n\nimport type { RuntimeDisposer } from \"../../../public/index\";\n\nexport type RuntimeLifecycle = {\n completePreparation: () => void;\n dispose: (reason?: unknown) => Promise<void>;\n disposeAll: (disposers: Iterable<RuntimeDisposer>) => Promise<void>;\n requestSignal: (signal?: AbortSignal) => AbortSignal;\n signal: AbortSignal;\n track: (dispose: RuntimeDisposer, signal?: AbortSignal) => RuntimeDisposer;\n};\n\nconst asError = (cause: unknown) =>\n cause instanceof Error ? cause : new Error(String(cause));\n\nconst disposeAll = async (disposers: Iterable<RuntimeDisposer>) => {\n const results = await Promise.allSettled(\n [...disposers].map(async (dispose) => dispose()),\n );\n const errors = results.flatMap((result) =>\n result.status === \"rejected\" ? [asError(result.reason)] : [],\n );\n if (errors.length) {\n throw new AggregateError(errors, \"Runtime disposal failed\");\n }\n};\n\nexport const createRuntimeLifecycle = (\n preparationSignal?: AbortSignal,\n): RuntimeLifecycle => {\n const controller = new AbortController();\n const activeDisposers = new Set<RuntimeDisposer>();\n let disposal: Promise<void> | undefined;\n const abortPreparation = () => controller.abort(preparationSignal?.reason);\n preparationSignal?.addEventListener(\"abort\", abortPreparation, {\n once: true,\n });\n if (preparationSignal?.aborted) {\n abortPreparation();\n }\n\n const completePreparation = () => {\n preparationSignal?.removeEventListener(\"abort\", abortPreparation);\n };\n const requestSignal = (signal?: AbortSignal) =>\n signal ? AbortSignal.any([controller.signal, signal]) : controller.signal;\n const track = (\n dispose: RuntimeDisposer,\n signal?: AbortSignal,\n ): RuntimeDisposer => {\n let pending: Promise<void> | undefined;\n const disposeOnce = () => {\n if (pending) {\n return pending;\n }\n controller.signal.removeEventListener(\"abort\", onAbort);\n signal?.removeEventListener(\"abort\", onAbort);\n activeDisposers.delete(disposeOnce);\n pending = Promise.resolve().then(dispose);\n return pending;\n };\n const onAbort = () => {\n void disposeOnce().catch(() => undefined);\n };\n activeDisposers.add(disposeOnce);\n controller.signal.addEventListener(\"abort\", onAbort, { once: true });\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (controller.signal.aborted || signal?.aborted) {\n onAbort();\n }\n return disposeOnce;\n };\n const dispose = (reason: unknown = new Error(\"Runtime disposed\")) => {\n if (disposal) {\n return disposal;\n }\n completePreparation();\n const pending = [...activeDisposers];\n activeDisposers.clear();\n controller.abort(reason);\n disposal = disposeAll(pending);\n return disposal;\n };\n\n return {\n completePreparation,\n dispose,\n disposeAll,\n requestSignal,\n signal: controller.signal,\n track,\n };\n};\n","// Registers named operations with validated input, output, and notification context.\n// Lookup metadata stays aligned with the names published in the runtime manifest.\n\nimport type {\n HandlerContext,\n OperationDefinition,\n} from \"../../../public/index\";\nimport type { Notifications } from \"../../../public/index\";\nimport { z } from \"zod\";\n\nexport class OperationValidationError extends Error {\n constructor(\n readonly phase: \"input\" | \"output\",\n cause: z.ZodError,\n ) {\n super(cause.message, { cause });\n }\n}\n\nexport type RuntimeOperation = {\n execute: (input: unknown, signal?: AbortSignal) => Promise<unknown>;\n returnsVoid: boolean;\n};\n\nexport type RuntimeOperations = {\n get: (name: string) => RuntimeOperation | undefined;\n names: readonly string[];\n};\n\ntype AnyOperation = OperationDefinition<z.ZodTypeAny, z.ZodTypeAny>;\n\nexport type RuntimeOperationDefinitions = Readonly<\n Record<string, AnyOperation>\n>;\n\ntype CreateRuntimeOperationsOptions = {\n context: (signal?: AbortSignal) => HandlerContext;\n definitions: RuntimeOperationDefinitions;\n notifications: Notifications;\n};\n\nexport const createRuntimeOperations = ({\n context,\n definitions,\n notifications,\n}: CreateRuntimeOperationsOptions): RuntimeOperations => {\n const operations = new Map<string, RuntimeOperation>();\n Object.entries(definitions).forEach(([name, definition]) => {\n if (!name) {\n throw new Error(\"Operation names must not be empty\");\n }\n operations.set(name, {\n execute: async (rawInput, signal) => {\n const operationContext = context(signal);\n operationContext.signal.throwIfAborted();\n const input = definition.input.safeParse(rawInput);\n if (!input.success) {\n throw new OperationValidationError(\"input\", input.error);\n }\n const rawOutput = await definition.handle(input.data, {\n ...operationContext,\n notifications,\n });\n operationContext.signal.throwIfAborted();\n const output = definition.output.safeParse(rawOutput);\n if (!output.success) {\n throw new OperationValidationError(\"output\", output.error);\n }\n return output.data;\n },\n returnsVoid: definition.output instanceof z.ZodVoid,\n });\n });\n return {\n get: (name) => operations.get(name),\n names: [...operations.keys()],\n };\n};\n","import { z } from \"zod\";\n\nexport const noInputSchema = z.void();\n\nexport const jsonValueSchema: z.ZodType<unknown> = z.lazy(() =>\n z.union([\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n);\n\nexport const parseJsonValue = <T>(value: T): T =>\n jsonValueSchema.parse(value) as T;\n\nexport type ContractInputArguments<TInput extends z.ZodType> =\n undefined extends z.input<TInput>\n ? [input?: Exclude<z.input<TInput>, undefined>]\n : [input: z.input<TInput>];\n\nexport type ResourceContract<\n TInput extends z.ZodType = z.ZodType,\n TOutput extends z.ZodType = z.ZodType,\n> = {\n input: TInput;\n output: TOutput;\n};\n\nexport const defineResourceContract = <\n TInput extends z.ZodType,\n TOutput extends z.ZodType,\n>(\n contract: ResourceContract<TInput, TOutput>,\n): ResourceContract<TInput, TOutput> => contract;\n\nexport type StreamContract<\n TInput extends z.ZodType = z.ZodType,\n TClientMessage extends z.ZodType = z.ZodType,\n TServerMessage extends z.ZodType = z.ZodType,\n> = {\n clientMessage: TClientMessage;\n input: TInput;\n serverMessage: TServerMessage;\n};\n\nexport const defineStreamContract = <\n TInput extends z.ZodType,\n TClientMessage extends z.ZodType,\n TServerMessage extends z.ZodType,\n>(\n contract: StreamContract<TInput, TClientMessage, TServerMessage>,\n): StreamContract<TInput, TClientMessage, TServerMessage> => contract;\n","// Resource invalidation follows relationships among configured resources.\n// This model owns those relationships and their invariants before runtime work begins.\n\nimport type { ResourceDefinition } from \"../../../public/index\";\n\n// A dependency supplies a derived resource's value; a dependant consumes that value.\n// Keeping both directions makes reads follow dependencies while invalidation follows dependants.\nexport type ResourceDependencyGraph = Readonly<{\n dependencies: ReadonlyMap<string, ReadonlySet<string>>;\n dependants: ReadonlyMap<string, ReadonlySet<string>>;\n}>;\n\ntype MutableResourceGraph = Map<string, Set<string>>;\n\nconst emptyGraphFor = (resourceIds: readonly string[]): MutableResourceGraph =>\n new Map(resourceIds.map((resourceId) => [resourceId, new Set<string>()]));\n\nconst visitDependencies = ({\n dependencies,\n path,\n resourceId,\n visited,\n visiting,\n}: {\n dependencies: ReadonlyMap<string, ReadonlySet<string>>;\n path: readonly string[];\n resourceId: string;\n visited: Set<string>;\n visiting: Set<string>;\n}) => {\n if (visiting.has(resourceId)) {\n throw new Error(\n `Resource dependency cycle: ${[...path, resourceId].join(\" -> \")}`,\n );\n }\n if (visited.has(resourceId)) {\n return;\n }\n visiting.add(resourceId);\n dependencies.get(resourceId)?.forEach((dependencyId) => {\n visitDependencies({\n dependencies,\n path: [...path, resourceId],\n resourceId: dependencyId,\n visited,\n visiting,\n });\n });\n visiting.delete(resourceId);\n visited.add(resourceId);\n};\n\nconst assertAcyclic = (\n dependencies: ReadonlyMap<string, ReadonlySet<string>>,\n) => {\n // Derived reads recurse through dependencies, so a cycle could never produce a value or finish activation.\n const visited = new Set<string>();\n const visiting = new Set<string>();\n dependencies.forEach((_, resourceId) => {\n visitDependencies({\n dependencies,\n path: [],\n resourceId,\n visited,\n visiting,\n });\n });\n};\n\nexport const createResourceDependencyGraph = (\n resources: Readonly<Record<string, ResourceDefinition>>,\n): ResourceDependencyGraph => {\n const resourceIds = Object.keys(resources);\n if (resourceIds.some((resourceId) => !resourceId)) {\n throw new Error(\"Resource IDs must not be empty\");\n }\n const dependencies = emptyGraphFor(resourceIds);\n const dependants = emptyGraphFor(resourceIds);\n\n Object.entries(resources).forEach(([resourceId, resource]) => {\n if (resource.kind !== \"derived\") {\n return;\n }\n Object.entries(\n resource.dependencies as Readonly<Record<string, string>>,\n ).forEach(([dependencyName, dependencyId]) => {\n if (!dependencyName) {\n throw new Error(`Resource ${resourceId} has an empty dependency name`);\n }\n if (!dependencyId) {\n throw new Error(`Resource ${resourceId} has an empty dependency ID`);\n }\n if (!dependencies.has(dependencyId)) {\n throw new Error(`Unknown resource dependency: ${dependencyId}`);\n }\n dependencies.get(resourceId)?.add(dependencyId);\n dependants.get(dependencyId)?.add(resourceId);\n });\n });\n\n assertAcyclic(dependencies);\n return Object.freeze({ dependencies, dependants });\n};\n\nconst collectInvalidatedResourceIds = (\n graph: ResourceDependencyGraph,\n resourceId: string,\n invalidated: Set<string>,\n) => {\n if (invalidated.has(resourceId)) {\n return;\n }\n invalidated.add(resourceId);\n graph.dependants.get(resourceId)?.forEach((dependantId) => {\n collectInvalidatedResourceIds(graph, dependantId, invalidated);\n });\n};\n\nexport const getInvalidatedResourceIds = (\n graph: ResourceDependencyGraph,\n resourceId: string,\n): ReadonlySet<string> => {\n // A changed value invalidates itself and the full reverse-edge closure, not just immediate consumers.\n // Set membership is essential for diamonds: a shared dependant must notify once despite multiple paths.\n const invalidated = new Set<string>();\n collectInvalidatedResourceIds(graph, resourceId, invalidated);\n return invalidated;\n};\n","// Owns named runtime resource lookup, validated reads, dependency watchers, and invalidation.\n\nimport {\n type HandlerContext,\n type ResourceDefinition,\n type RuntimeDisposer,\n} from \"../../../public/index\";\nimport type { ResourceContract } from \"../../../public/index\";\nimport { isDeepStrictEqual } from \"node:util\";\n\nimport {\n createResourceDependencyGraph,\n getInvalidatedResourceIds,\n} from \"./resource-dependency-graph\";\nimport type { RuntimeLifecycle } from \"./runtime-lifecycle\";\n\nexport type RuntimeResource = {\n read: (input: unknown, signal?: AbortSignal) => Promise<unknown>;\n subscribe: (\n input: unknown,\n listener: () => void,\n signal?: AbortSignal,\n ) => RuntimeDisposer;\n};\n\nexport type RuntimeResourceDefinitions = Readonly<\n Record<string, ResourceDefinition>\n>;\n\nexport type RuntimeResources = {\n context: (signal?: AbortSignal) => HandlerContext;\n get: (name: string) => RuntimeResource | undefined;\n invalidate: (contract: ResourceContract, input?: unknown) => void;\n names: readonly string[];\n};\n\ntype InvalidationListener = {\n input: unknown;\n listener: () => void;\n resourceId: string;\n};\n\ntype CreateRuntimeResourcesOptions = {\n definitions: RuntimeResourceDefinitions;\n lifecycle: RuntimeLifecycle;\n};\n\nexport const createRuntimeResources = ({\n definitions,\n lifecycle,\n}: CreateRuntimeResourcesOptions): RuntimeResources => {\n const graph = createResourceDependencyGraph(definitions);\n const invalidationListeners = new Set<InvalidationListener>();\n const contracts = new Map<ResourceContract, string[]>();\n const resources = new Map<string, RuntimeResource>();\n\n Object.entries(definitions).forEach(([id, definition]) => {\n contracts.set(definition.contract, [\n ...(contracts.get(definition.contract) ?? []),\n id,\n ]);\n });\n\n const invalidateResource = (\n id: string,\n input: unknown,\n allInputs = false,\n ) => {\n if (lifecycle.signal.aborted) {\n return;\n }\n const ids = getInvalidatedResourceIds(graph, id);\n invalidationListeners.forEach((entry) => {\n if (\n ids.has(entry.resourceId) &&\n (allInputs || isDeepStrictEqual(entry.input, input))\n ) {\n entry.listener();\n }\n });\n };\n\n const invalidate = (contract: ResourceContract, input?: unknown) => {\n const ids =\n contracts.get(contract) ??\n Object.entries(definitions)\n .filter(\n ([, definition]) =>\n definition.contract.input === contract.input &&\n definition.contract.output === contract.output,\n )\n .map(([id]) => id);\n if (!ids.length) {\n throw new Error(\"Cannot invalidate a resource outside this runtime\");\n }\n ids.forEach((id) => {\n const definition = definitions[id]!;\n const parsedInput =\n input === undefined\n ? undefined\n : definition.contract.input.parse(input);\n invalidateResource(id, parsedInput, input === undefined);\n });\n };\n\n const context = (signal?: AbortSignal): HandlerContext => ({\n invalidate,\n signal: lifecycle.requestSignal(signal),\n });\n\n const read = async (\n id: string,\n rawInput: unknown,\n signal?: AbortSignal,\n ): Promise<unknown> => {\n const definition = definitions[id]!;\n const operationSignal = lifecycle.requestSignal(signal);\n operationSignal.throwIfAborted();\n const input = definition.contract.input.parse(rawInput);\n const rawOutput =\n definition.kind === \"derived\"\n ? definition.combine(\n Object.fromEntries(\n await Promise.all(\n Object.entries(\n definition.dependencies as Readonly<Record<string, string>>,\n ).map(async ([name, dependencyId]) => [\n name,\n await read(dependencyId, rawInput, signal),\n ]),\n ),\n ),\n )\n : await definition.read(input, context(signal));\n operationSignal.throwIfAborted();\n return definition.contract.output.parse(rawOutput);\n };\n\n const activateWatchers = (\n id: string,\n rawInput: unknown,\n signal: AbortSignal | undefined,\n activated: Set<string>,\n disposers: RuntimeDisposer[],\n ) => {\n if (activated.has(id)) {\n return;\n }\n activated.add(id);\n const definition = definitions[id]!;\n const input = definition.contract.input.parse(rawInput);\n if (definition.kind === \"subscription\") {\n const dispose = definition.subscribe(\n input,\n () => invalidateResource(id, input),\n context(signal),\n );\n if (typeof dispose !== \"function\") {\n throw new Error(`Resource ${id} subscribe must return a disposer`);\n }\n disposers.push(dispose);\n return;\n }\n if (definition.kind === \"derived\") {\n graph.dependencies.get(id)?.forEach((dependencyId) => {\n activateWatchers(dependencyId, rawInput, signal, activated, disposers);\n });\n }\n };\n\n Object.keys(definitions).forEach((name) => {\n resources.set(name, {\n read: (input, signal) => read(name, input, signal),\n subscribe: (rawInput, listener, signal) => {\n lifecycle.requestSignal(signal).throwIfAborted();\n const input = definitions[name]!.contract.input.parse(rawInput);\n const entry = { input, listener, resourceId: name };\n const watcherDisposers: RuntimeDisposer[] = [];\n invalidationListeners.add(entry);\n try {\n activateWatchers(name, rawInput, signal, new Set(), watcherDisposers);\n } catch (cause) {\n invalidationListeners.delete(entry);\n void lifecycle.disposeAll(watcherDisposers).catch(() => undefined);\n throw cause;\n }\n return lifecycle.track(async () => {\n invalidationListeners.delete(entry);\n await lifecycle.disposeAll(watcherDisposers);\n }, signal);\n },\n });\n });\n\n return {\n context,\n get: (name) => resources.get(name),\n invalidate,\n names: [...resources.keys()],\n };\n};\n","// Owns named stream registration and ordered, validated session messaging.\n// Session abort, failure, and disposal remain exactly-once across every close path.\n\nimport type {\n HandlerContext,\n StreamHandlerDefinition,\n} from \"../../../public/index\";\nimport { z } from \"zod\";\n\nimport type { RuntimeLifecycle } from \"./runtime-lifecycle\";\n\nexport type RuntimeStreamSession = {\n dispose: () => Promise<void>;\n send: (message: unknown) => Promise<void>;\n};\n\nexport type RuntimeStream = {\n open: (\n input: unknown,\n emit: (message: unknown) => void,\n signal?: AbortSignal,\n onError?: (cause: unknown) => void,\n ) => Promise<RuntimeStreamSession>;\n};\n\nexport type RuntimeStreams = {\n get: (name: string) => RuntimeStream | undefined;\n names: readonly string[];\n};\n\ntype AnyStream = StreamHandlerDefinition<\n z.ZodTypeAny,\n z.ZodTypeAny,\n z.ZodTypeAny\n>;\n\nexport type RuntimeStreamDefinitions = Readonly<Record<string, AnyStream>>;\n\ntype CreateRuntimeStreamsOptions = {\n context: (signal?: AbortSignal) => HandlerContext;\n definitions: RuntimeStreamDefinitions;\n lifecycle: RuntimeLifecycle;\n};\n\nexport const createRuntimeStreams = ({\n context,\n definitions,\n lifecycle,\n}: CreateRuntimeStreamsOptions): RuntimeStreams => {\n const streams = new Map<string, RuntimeStream>();\n Object.entries(definitions).forEach(([name, definition]) => {\n if (!name) {\n throw new Error(\"Stream names must not be empty\");\n }\n streams.set(name, {\n open: async (rawInput, emit, requestSignal, onError) => {\n const sessionController = new AbortController();\n const sessionSignal = requestSignal\n ? AbortSignal.any([requestSignal, sessionController.signal])\n : sessionController.signal;\n const operationSignal = lifecycle.requestSignal(sessionSignal);\n operationSignal.throwIfAborted();\n const input = definition.contract.input.parse(rawInput);\n let acceptingMessages = true;\n let failed = false;\n let failure: unknown;\n let opened = false;\n const fail = (cause: unknown) => {\n if (failed || operationSignal.aborted) {\n return;\n }\n failed = true;\n failure = cause;\n acceptingMessages = false;\n sessionController.abort(cause);\n if (opened) {\n onError?.(cause);\n }\n };\n const session = await definition.open(input, {\n ...context(sessionSignal),\n emit: (message) => {\n if (operationSignal.aborted) {\n return;\n }\n try {\n emit(definition.contract.serverMessage.parse(message));\n } catch (cause) {\n fail(cause);\n }\n },\n fail,\n signal: operationSignal,\n });\n opened = true;\n if (failed || operationSignal.aborted) {\n await session.dispose?.();\n operationSignal.throwIfAborted();\n throw failure;\n }\n let messages = Promise.resolve();\n const dispose = lifecycle.track(async () => {\n acceptingMessages = false;\n sessionController.abort(new Error(\"Stream session disposed\"));\n await messages.catch(() => undefined);\n await session.dispose?.();\n }, requestSignal);\n return {\n dispose: async () => dispose(),\n send: async (rawMessage) => {\n if (!acceptingMessages) {\n throw new Error(\"Stream session is closed\");\n }\n const message = definition.contract.clientMessage.parse(rawMessage);\n messages = messages.then(async () => {\n operationSignal.throwIfAborted();\n await session.onMessage?.(message);\n operationSignal.throwIfAborted();\n });\n return messages;\n },\n };\n },\n });\n });\n return {\n get: (name) => streams.get(name),\n names: [...streams.keys()],\n };\n};\n","// Composes one process-lifetime runtime from cohesive lifecycle and protocol components.\n\nimport type { RuntimeConfigDefinition } from \"@overmux/shared/node\";\n\nimport type { Notifications } from \"../../../public/index\";\nimport { protocolVersion, type RuntimeManifest } from \"../../shared/index\";\n\nimport { createRuntimeLifecycle } from \"./runtime-lifecycle\";\nimport {\n createRuntimeOperations,\n type RuntimeOperation,\n type RuntimeOperationDefinitions,\n} from \"./runtime-operations\";\nimport {\n createRuntimeResources,\n type RuntimeResource,\n type RuntimeResourceDefinitions,\n} from \"./runtime-resources\";\nimport {\n createRuntimeStreams,\n type RuntimeStream,\n type RuntimeStreamDefinitions,\n} from \"./runtime-streams\";\n\nexport type Runtime = {\n manifest: RuntimeManifest;\n dispose: () => Promise<void>;\n getOperation: (name: string) => RuntimeOperation | undefined;\n getResource: (name: string) => RuntimeResource | undefined;\n getStream: (name: string) => RuntimeStream | undefined;\n};\n\ntype CreateRuntimeOptions = {\n config: RuntimeConfigDefinition;\n debug?: boolean;\n notifications?: Notifications;\n signal?: AbortSignal;\n};\n\nexport const createRuntime = async ({\n config,\n debug = false,\n notifications = { send: async () => undefined },\n signal,\n}: CreateRuntimeOptions): Promise<Runtime> => {\n const lifecycle = createRuntimeLifecycle(signal);\n try {\n const resources = createRuntimeResources({\n definitions: (config.server.resources ??\n {}) as RuntimeResourceDefinitions,\n lifecycle,\n });\n const context = resources.context;\n const operations = createRuntimeOperations({\n context,\n definitions: (config.server.operations ??\n {}) as RuntimeOperationDefinitions,\n notifications,\n });\n const streams = createRuntimeStreams({\n context,\n definitions: (config.server.streams ?? {}) as RuntimeStreamDefinitions,\n lifecycle,\n });\n\n lifecycle.signal.throwIfAborted();\n lifecycle.completePreparation();\n\n const manifest: RuntimeManifest = {\n debug,\n operations: [...operations.names],\n protocolVersion,\n resources: [...resources.names],\n streams: [...streams.names],\n };\n return {\n manifest,\n dispose: lifecycle.dispose,\n getOperation: operations.get,\n getResource: resources.get,\n getStream: streams.get,\n };\n } catch (cause) {\n await lifecycle.dispose(cause).catch(() => undefined);\n throw cause;\n }\n};\n","import { loadOvermuxConfig } from \"@overmux/shared/node\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport ts from \"typescript\";\nimport { ZodError } from \"zod\";\n\nimport { createRuntime } from \"./runtime/create-runtime\";\n\nexport type CheckDiagnostic = {\n code?: number | string;\n column?: number;\n file?: string;\n line?: number;\n message: string;\n path?: string;\n phase: \"config\" | \"imports\" | \"runtime\" | \"types\" | \"ui\";\n};\n\nexport type CheckResult = {\n operations?: number;\n config: string;\n diagnostics: CheckDiagnostic[];\n files: number;\n ok: boolean;\n};\n\nexport type CheckOvermuxOptions = {\n aliases?: Record<string, string>;\n configPath: string;\n typeAliases?: Record<string, string>;\n typesOnly?: boolean;\n};\n\nconst loadCompilerOptions = (configPath: string) => {\n const tsconfig = ts.findConfigFile(dirname(configPath), ts.sys.fileExists);\n if (!tsconfig) {\n return {\n allowImportingTsExtensions: true,\n allowJs: false,\n esModuleInterop: true,\n jsx: ts.JsxEmit.ReactJSX,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n noEmit: true,\n skipLibCheck: true,\n strict: true,\n target: ts.ScriptTarget.ES2022,\n } satisfies ts.CompilerOptions;\n }\n const loaded = ts.readConfigFile(tsconfig, ts.sys.readFile);\n if (loaded.error) {\n throw new Error(\n ts.flattenDiagnosticMessageText(loaded.error.messageText, \"\\n\"),\n );\n }\n const parsed = ts.parseJsonConfigFileContent(\n loaded.config,\n ts.sys,\n dirname(tsconfig),\n );\n return {\n ...parsed.options,\n allowImportingTsExtensions: true,\n noEmit: true,\n };\n};\n\nconst diagnosticOf = (diagnostic: ts.Diagnostic): CheckDiagnostic => {\n const position =\n diagnostic.file && diagnostic.start !== undefined\n ? diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start)\n : undefined;\n return {\n code: diagnostic.code,\n column: position ? position.character + 1 : undefined,\n file: diagnostic.file?.fileName,\n line: position ? position.line + 1 : undefined,\n message: ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\"),\n phase: \"types\",\n };\n};\n\nconst kindOf = (fileName: string, configPath: string) => {\n if (\n resolve(fileName) === resolve(configPath) ||\n fileName.match(/\\.server\\.[cm]?[jt]sx?$/)\n ) {\n return \"server\";\n }\n if (fileName.match(/\\.ui\\.[cm]?[jt]sx?$/)) {\n return \"client\";\n }\n if (fileName.match(/\\.shared\\.[cm]?[jt]sx?$/)) {\n return \"shared\";\n }\n return undefined;\n};\n\ntype ModuleKind = \"client\" | \"server\" | \"shared\";\n\ntype ResolvedImport = {\n kind?: ModuleKind;\n node: ts.ImportDeclaration | ts.ExportDeclaration;\n source?: ts.SourceFile;\n};\n\nconst kindOfSpecifier = (specifier: string): ModuleKind | undefined => {\n if (specifier === \"overmux/client\" || specifier.endsWith(\"/react\")) {\n return \"client\";\n }\n if (\n specifier === \"overmux/server\" ||\n specifier.endsWith(\"/server\") ||\n specifier.startsWith(\"node:\")\n ) {\n return \"server\";\n }\n if (specifier === \"overmux\" || specifier.endsWith(\"/shared\")) {\n return \"shared\";\n }\n return undefined;\n};\n\nconst isTypeOnlyReference = (\n node: ts.ImportDeclaration | ts.ExportDeclaration,\n) => {\n if (ts.isExportDeclaration(node)) {\n return Boolean(\n node.isTypeOnly ||\n (node.exportClause &&\n ts.isNamedExports(node.exportClause) &&\n node.exportClause.elements.every((element) => element.isTypeOnly)),\n );\n }\n const clause = node.importClause;\n if (!clause || clause.name) {\n return Boolean(clause?.isTypeOnly);\n }\n return Boolean(\n clause.isTypeOnly ||\n (clause.namedBindings &&\n ts.isNamedImports(clause.namedBindings) &&\n clause.namedBindings.elements.every((element) => element.isTypeOnly)),\n );\n};\n\nconst resolvedImports = (program: ts.Program, source: ts.SourceFile) => {\n const imports: ResolvedImport[] = [];\n source.forEachChild((node) => {\n if (\n (!ts.isImportDeclaration(node) && !ts.isExportDeclaration(node)) ||\n !node.moduleSpecifier ||\n !ts.isStringLiteral(node.moduleSpecifier) ||\n isTypeOnlyReference(node)\n ) {\n return;\n }\n const specifier = node.moduleSpecifier.text;\n const resolved = ts.resolveModuleName(\n specifier,\n source.fileName,\n program.getCompilerOptions(),\n ts.sys,\n ).resolvedModule?.resolvedFileName;\n const target = resolved ? program.getSourceFile(resolved) : undefined;\n const kind = kindOfSpecifier(specifier);\n if (kind || (target && !target.isDeclarationFile)) {\n imports.push({\n kind,\n node,\n source: target?.isDeclarationFile ? undefined : target,\n });\n }\n });\n return imports;\n};\n\nconst invalidImport = (source: ModuleKind, target: ModuleKind | undefined) =>\n (source === \"server\" && target === \"client\") ||\n (source === \"client\" && target === \"server\") ||\n (source === \"shared\" && target !== undefined && target !== \"shared\");\n\nconst visitImportGraph = ({\n configPath,\n diagnostics,\n kind,\n program,\n seen,\n source,\n}: {\n configPath: string;\n diagnostics: CheckDiagnostic[];\n kind: ModuleKind;\n program: ts.Program;\n seen: Set<string>;\n source: ts.SourceFile;\n}) => {\n const visitKey = `${kind}:${source.fileName}`;\n if (seen.has(visitKey)) {\n return;\n }\n seen.add(visitKey);\n resolvedImports(program, source).forEach(\n ({ kind: importKind, node, source: target }) => {\n const declaredKind =\n importKind ??\n (target ? kindOf(target.fileName, configPath) : undefined);\n if (invalidImport(kind, declaredKind)) {\n const position = source.getLineAndCharacterOfPosition(node.getStart());\n diagnostics.push({\n code: \"OVERMUX_IMPORT_BOUNDARY\",\n column: position.character + 1,\n file: source.fileName,\n line: position.line + 1,\n message: `${kind} modules may not import ${declaredKind} modules`,\n phase: \"imports\",\n });\n return;\n }\n if (target) {\n visitImportGraph({\n configPath,\n diagnostics,\n kind: declaredKind === \"shared\" ? \"shared\" : kind,\n program,\n seen,\n source: target,\n });\n }\n },\n );\n};\n\nconst importBoundaryDiagnostics = (\n program: ts.Program,\n configPath: string,\n): CheckDiagnostic[] => {\n const diagnostics: CheckDiagnostic[] = [];\n const seen = new Set<string>();\n program.getSourceFiles().forEach((source) => {\n const kind = kindOf(source.fileName, configPath);\n if (kind && !source.isDeclarationFile) {\n visitImportGraph({\n configPath,\n diagnostics,\n kind,\n program,\n seen,\n source,\n });\n }\n });\n return diagnostics;\n};\n\nconst runtimeDiagnostics = (cause: unknown): CheckDiagnostic[] => {\n if (cause instanceof ZodError) {\n return cause.issues.map((issue) => ({\n message: issue.message,\n path: issue.path.length ? issue.path.join(\".\") : undefined,\n phase: \"runtime\" as const,\n }));\n }\n return [\n {\n message: cause instanceof Error ? cause.message : String(cause),\n phase: \"runtime\",\n },\n ];\n};\n\nconst typecheck = async ({\n aliases = {},\n configPath,\n typeAliases,\n}: CheckOvermuxOptions) => {\n const options = loadCompilerOptions(configPath);\n const aliasesForTypes =\n typeAliases ??\n Object.fromEntries(\n Object.entries(aliases).filter(\n ([key]) => key === \"overmux\" || key.startsWith(\"overmux/\"),\n ),\n );\n const absoluteAliases = Object.fromEntries(\n Object.entries(aliasesForTypes).map(([key, value]) => [\n key,\n [isAbsolute(value) ? value : resolve(value)],\n ]),\n );\n const program = ts.createProgram({\n options: {\n ...options,\n baseUrl: options.baseUrl ?? \"/\",\n paths: { ...options.paths, ...absoluteAliases },\n },\n rootNames: [configPath],\n });\n const diagnostics = [\n ...ts.getPreEmitDiagnostics(program).map(diagnosticOf),\n ...importBoundaryDiagnostics(program, configPath),\n ];\n const files = program\n .getSourceFiles()\n .filter(\n (file) =>\n !file.isDeclarationFile && !file.fileName.includes(\"node_modules\"),\n ).length;\n return { diagnostics, files };\n};\n\nexport const checkOvermux = async (\n options: CheckOvermuxOptions,\n): Promise<CheckResult> => {\n const configPath = resolve(options.configPath);\n let checked;\n try {\n checked = await typecheck({ ...options, configPath });\n } catch (cause) {\n return {\n config: configPath,\n diagnostics: [\n {\n message: cause instanceof Error ? cause.message : String(cause),\n phase: \"config\",\n },\n ],\n files: 0,\n ok: false,\n };\n }\n if (checked.diagnostics.length || options.typesOnly) {\n return {\n config: configPath,\n diagnostics: checked.diagnostics,\n files: checked.files,\n ok: checked.diagnostics.length === 0,\n };\n }\n\n let runtime: Awaited<ReturnType<typeof createRuntime>> | undefined;\n try {\n const { config } = await loadOvermuxConfig({\n aliases: options.aliases,\n configPath,\n });\n runtime = await createRuntime({ config });\n return {\n operations: runtime.manifest.operations.length,\n config: configPath,\n diagnostics: [],\n files: checked.files,\n ok: true,\n };\n } catch (cause) {\n return {\n config: configPath,\n diagnostics: runtimeDiagnostics(cause),\n files: checked.files,\n ok: false,\n };\n } finally {\n await runtime?.dispose();\n }\n};\n","import { appendFileSync, mkdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\n\nimport { getOvermuxPaths } from \"./paths\";\n\nexport type ServerLogLevel = \"debug\" | \"error\" | \"info\" | \"warn\";\n\nexport type ServerLogEntry = {\n // Groups related request, connection, and operation logs for diagnostics.\n correlationId?: string;\n details?: Record<string, unknown>;\n durationMs?: number;\n event: string;\n level?: ServerLogLevel;\n message?: string;\n source?: \"browser\" | \"server\";\n timestamp?: string;\n};\n\nexport type ServerLogger = {\n enabled: boolean;\n id: () => string;\n log: (entry: ServerLogEntry) => void;\n};\n\ntype ConfigurableServerLogger = ServerLogger & {\n setEnabled: (enabled: boolean) => void;\n setLogFile: (logFile: string) => void;\n};\n\nconst lifecycleEvents = new Set([\n \"server-start\",\n \"server-stop\",\n \"websocket-close\",\n \"websocket-close-event\",\n \"websocket-connect\",\n \"websocket-open\",\n]);\n\nexport const getDefaultServerLogFile = ({\n homeDir,\n xdgStateHome,\n}: {\n homeDir?: string;\n xdgStateHome?: string;\n} = {}) =>\n join(getOvermuxPaths({ homeDir, xdgStateHome }).stateDir, \"overmux.log\");\n\nconst safeJson = (value: unknown) => {\n try {\n return JSON.stringify(value);\n } catch {\n return JSON.stringify({\n event: \"log-serialization-error\",\n level: \"error\",\n source: \"server\",\n timestamp: new Date().toISOString(),\n });\n }\n};\n\nexport const createServerLogger = ({\n enabled,\n logFile = getDefaultServerLogFile(),\n}: {\n enabled: boolean;\n logFile?: string;\n}): ConfigurableServerLogger => {\n let activeLogFile = logFile;\n let debugEnabled = enabled;\n return {\n get enabled() {\n return debugEnabled;\n },\n id: randomUUID,\n log: (entry) => {\n if (\n !debugEnabled &&\n entry.level !== \"error\" &&\n !lifecycleEvents.has(entry.event)\n ) {\n return;\n }\n const record = safeJson({\n timestamp: entry.timestamp ?? new Date().toISOString(),\n level: entry.level ?? \"info\",\n source: entry.source ?? \"server\",\n ...entry,\n });\n mkdirSync(dirname(activeLogFile), { recursive: true });\n appendFileSync(activeLogFile, `${record}\\n`, \"utf8\");\n process.stderr.write(`[overmux:debug] ${record}\\n`);\n },\n setEnabled: (nextEnabled) => {\n debugEnabled = nextEnabled;\n },\n setLogFile: (nextLogFile) => {\n activeLogFile = nextLogFile;\n },\n };\n};\n\nexport const errorMessage = (cause: unknown) =>\n cause instanceof Error ? cause.message : String(cause);\n\nexport const errorDetails = (cause: unknown) => ({\n message: errorMessage(cause),\n ...(cause instanceof Error && cause.stack ? { stack: cause.stack } : {}),\n});\n","// Defines the complete validated IPC boundary between coordinator and child.\n// Application traffic never crosses this process boundary.\n\nimport { z } from \"zod\";\n\nconst childOptionsSchema = z.object({\n configAliases: z.record(z.string(), z.string()).optional(),\n configPath: z.string(),\n debug: z.boolean().optional(),\n developmentWebTarget: z.url().optional(),\n host: z.string().optional(),\n logFile: z.string().optional(),\n port: z.number().int().min(0).max(65_535).optional(),\n productionWebAssetsDir: z.string().optional(),\n watch: z.boolean().optional(),\n});\n\nconst parentMessageSchema = z.discriminatedUnion(\"type\", [\n z.object({ options: childOptionsSchema, type: z.literal(\"start\") }),\n z.object({ type: z.literal(\"update-available\") }),\n z.object({ type: z.literal(\"stop\") }),\n]);\n\nconst childMessageSchema = z.discriminatedUnion(\"type\", [\n z.object({\n host: z.string(),\n port: z.number().int().min(1).max(65_535),\n type: z.literal(\"ready\"),\n url: z.string(),\n watch: z.boolean(),\n }),\n z.object({ type: z.literal(\"restart-requested\") }),\n z.object({ message: z.string(), type: z.literal(\"startup-failed\") }),\n]);\n\nexport type ChildServerOptions = z.infer<typeof childOptionsSchema>;\nexport type ParentToChildMessage = z.infer<typeof parentMessageSchema>;\nexport type ChildToParentMessage = z.infer<typeof childMessageSchema>;\n\nexport const parseParentMessage = (value: unknown): ParentToChildMessage =>\n parentMessageSchema.parse(value);\n\nexport const parseChildMessage = (value: unknown): ChildToParentMessage =>\n childMessageSchema.parse(value);\n","// Owns the coordinator's broad recursive watch of the config directory.\n// Filtering and debounce keep update signaling independent of import analysis.\n\nimport { watch } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nexport type UpdateWatcher = {\n close: () => void;\n};\n\nexport const isRelevantUpdatePath = (path: string): boolean => {\n const segments = path.split(/[\\\\/]/);\n if (segments.some((segment) => segment.toLowerCase() === \"node_modules\")) {\n return false;\n }\n return /\\.(?:js|jsx|mjs|cjs|ts|tsx|mts|cts|json|css)$/i.test(path);\n};\n\nexport const startUpdateWatcher = ({\n configPath,\n onUpdate,\n}: {\n configPath: string;\n onUpdate: () => void;\n}): UpdateWatcher => {\n let closed = false;\n let timeout: NodeJS.Timeout | undefined;\n const watcher = watch(\n dirname(configPath),\n { recursive: true },\n (_event, fileName) => {\n if (closed || !fileName || !isRelevantUpdatePath(fileName.toString())) {\n return;\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(onUpdate, 100);\n },\n );\n\n return {\n close: () => {\n if (closed) {\n return;\n }\n closed = true;\n if (timeout) {\n clearTimeout(timeout);\n }\n watcher.close();\n },\n };\n};\n","// Supervises one disposable application child and the parent-owned update watcher.\n// The coordinator retains only lifecycle state and the stable startup address.\n\nimport { fork, type ChildProcess } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { errorMessage } from \"../server-logger\";\nimport type {\n OvermuxServer,\n OvermuxServerOptions,\n} from \"../start-overmux-server\";\nimport {\n parseChildMessage,\n type ChildServerOptions,\n type ParentToChildMessage,\n} from \"./ipc-protocol\";\nimport { startUpdateWatcher, type UpdateWatcher } from \"./update-watcher\";\n\ntype ChildInstance = {\n process: ChildProcess;\n host: string;\n port: number;\n url: string;\n watch: boolean;\n};\n\nconst send = (\n child: ChildProcess,\n message: ParentToChildMessage,\n onError?: (cause: Error) => void,\n) => {\n if (!child.connected) {\n onError?.(new Error(\"Server child IPC channel is closed\"));\n return;\n }\n try {\n child.send(message, (cause) => {\n if (cause) {\n onError?.(cause);\n }\n });\n } catch (cause) {\n onError?.(cause instanceof Error ? cause : new Error(String(cause)));\n }\n};\n\nconst stopChild = (child: ChildProcess): Promise<void> =>\n new Promise((resolve) => {\n let timeout: NodeJS.Timeout | undefined;\n const finish = () => {\n child.off(\"exit\", finish);\n clearTimeout(timeout);\n resolve();\n };\n child.once(\"exit\", finish);\n if (child.exitCode !== null || child.signalCode !== null) {\n finish();\n return;\n }\n timeout = setTimeout(() => {\n if (!child.kill(\"SIGKILL\")) {\n finish();\n }\n }, 5_000);\n send(child, { type: \"stop\" });\n });\n\nconst serverChildPath = () =>\n fileURLToPath(import.meta.resolve(\"#server-child\"));\n\nconst startChild = (\n options: ChildServerOptions,\n onRestartRequested: () => void,\n): Promise<ChildInstance> =>\n new Promise((resolve, reject) => {\n const child = fork(serverChildPath(), [], {\n serialization: \"json\",\n stdio: [\"inherit\", \"inherit\", \"inherit\", \"ipc\"],\n });\n let settled = false;\n const fail = (cause: unknown) => {\n if (settled) {\n return;\n }\n settled = true;\n if (child.exitCode === null && child.signalCode === null) {\n child.kill();\n }\n reject(cause instanceof Error ? cause : new Error(String(cause)));\n };\n child.on(\"error\", fail);\n child.on(\"exit\", (code, signal) => {\n fail(\n new Error(\n `Server child exited before readiness (${signal ?? code ?? \"unknown\"})`,\n ),\n );\n });\n child.on(\"message\", (raw) => {\n let message;\n try {\n message = parseChildMessage(raw);\n } catch (cause) {\n fail(cause);\n return;\n }\n if (message.type === \"restart-requested\") {\n if (settled) {\n onRestartRequested();\n }\n return;\n }\n if (message.type === \"startup-failed\") {\n fail(new Error(message.message));\n return;\n }\n if (!settled) {\n settled = true;\n resolve({\n host: message.host,\n port: message.port,\n process: child,\n url: message.url,\n watch: message.watch,\n });\n }\n });\n send(child, { options, type: \"start\" }, fail);\n });\n\nexport const startServerCoordinator = async (\n initialOptions: OvermuxServerOptions,\n): Promise<OvermuxServer> => {\n let child: ChildInstance | undefined;\n let closed = false;\n let closePromise: Promise<void> | undefined;\n let restartPromise: Promise<void> | undefined;\n let updateDuringRestart = false;\n let startupAddress: { host: string; port: number } | undefined;\n let watcher: UpdateWatcher | undefined;\n\n const adoptChild = (next: ChildInstance) => {\n child = next;\n next.process.once(\"exit\", () => {\n if (child?.process === next.process) {\n child = undefined;\n }\n });\n };\n\n const restart = () => {\n if (closed || restartPromise) {\n return restartPromise ?? Promise.resolve();\n }\n restartPromise = (async () => {\n const previous = child;\n child = undefined;\n if (previous) {\n await stopChild(previous.process);\n }\n if (closed || !startupAddress) {\n return;\n }\n try {\n const replacement = await startChild(\n {\n ...initialOptions,\n host: startupAddress.host,\n port: startupAddress.port,\n },\n () => void restart(),\n );\n if (closed) {\n await stopChild(replacement.process);\n return;\n }\n adoptChild(replacement);\n if (updateDuringRestart) {\n updateDuringRestart = false;\n send(replacement.process, { type: \"update-available\" });\n }\n } catch (cause) {\n process.stderr.write(\n `[overmux] replacement child failed: ${errorMessage(cause)}\\n`,\n );\n }\n })().finally(() => {\n const shouldRetry = updateDuringRestart && !child && !closed;\n updateDuringRestart = false;\n restartPromise = undefined;\n if (shouldRetry) {\n void restart();\n }\n });\n return restartPromise;\n };\n\n const onUpdate = () => {\n if (closed) {\n return;\n }\n if (restartPromise) {\n updateDuringRestart = true;\n return;\n }\n if (child) {\n send(child.process, { type: \"update-available\" });\n return;\n }\n void restart();\n };\n\n const initial = await startChild(initialOptions, () => void restart());\n startupAddress = { host: initial.host, port: initial.port };\n adoptChild(initial);\n try {\n if (initial.watch) {\n watcher = startUpdateWatcher({\n configPath: initialOptions.configPath,\n onUpdate,\n });\n }\n } catch (cause) {\n await stopChild(initial.process);\n throw cause;\n }\n\n const close = () => {\n if (closePromise) {\n return closePromise;\n }\n closed = true;\n closePromise = (async () => {\n process.off(\"SIGINT\", onSignal);\n process.off(\"SIGTERM\", onSignal);\n watcher?.close();\n const active = child;\n child = undefined;\n if (active) {\n await stopChild(active.process);\n }\n await restartPromise;\n })();\n return closePromise;\n };\n const onSignal = () => {\n void close().catch((cause: unknown) => {\n process.stderr.write(\n `[overmux] coordinator shutdown failed: ${errorMessage(cause)}\\n`,\n );\n });\n };\n process.once(\"SIGINT\", onSignal);\n process.once(\"SIGTERM\", onSignal);\n\n return {\n announceUpdateAvailable: onUpdate,\n close,\n port: initial.port,\n url: initial.url,\n };\n};\n","import type { ServerConfigDefinition } from \"../../public/index\";\nimport { resolve } from \"node:path\";\n\nimport { startServerCoordinator } from \"./coordinator/server-coordinator\";\n\nexport type OvermuxServerOptions = ServerConfigDefinition & {\n configAliases?: Record<string, string>;\n debug?: boolean;\n developmentWebTarget?: string;\n configPath: string;\n};\n\nexport type OvermuxServer = {\n announceUpdateAvailable: () => void;\n close: () => Promise<void>;\n port: number;\n url: string;\n};\n\nexport const startOvermuxServer = async (\n options: OvermuxServerOptions,\n): Promise<OvermuxServer> =>\n startServerCoordinator({\n ...options,\n configPath: resolve(options.configPath),\n });\n","import { buildCommand } from \"@stricli/core\";\nimport { checkOvermux, type CheckResult } from \"../../server/index\";\nimport { getDefaultConfigPath } from \"../../server/paths\";\ntype CheckFlags = {\n config: string;\n};\n\nconst printCheck = (result: CheckResult) => {\n result.diagnostics.forEach((diagnostic) => {\n const location = diagnostic.file\n ? `${diagnostic.file}:${diagnostic.line ?? 1}:${diagnostic.column ?? 1}`\n : (diagnostic.path ?? diagnostic.phase);\n const code = diagnostic.code ? ` ${diagnostic.code}` : \"\";\n console.error(`error${code} ${location}\\n ${diagnostic.message}`);\n });\n if (!result.ok) {\n console.error(`check failed: ${result.diagnostics.length} errors`);\n return;\n }\n console.log(`✓ config: ${result.config}`);\n if (result.operations !== undefined) {\n console.log(`✓ operations: ${result.operations} definitions`);\n }\n console.log(`✓ types: ${result.files} reachable files`);\n};\n\nconst runCheck = async (flags: CheckFlags) => {\n const result = await checkOvermux({ configPath: flags.config });\n printCheck(result);\n process.exitCode = result.ok ? 0 : 1;\n};\n\nexport const checkCommand = buildCommand({\n func: runCheck,\n parameters: {\n aliases: { c: \"config\" },\n flags: {\n config: {\n brief: \"Configuration file\",\n default: getDefaultConfigPath(),\n kind: \"parsed\",\n parse: String,\n placeholder: \"path\",\n },\n },\n },\n docs: { brief: \"Validate an Overmux configuration\" },\n});\n","import { buildCommand } from \"@stricli/core\";\n\nimport {\n discoverInstance,\n sendControlRequest,\n type InstanceRegistration,\n} from \"../../server/auth/instance-control\";\nimport { parsePort } from \"../parse-port\";\n\ntype Fetch = (input: URL, init: RequestInit) => Promise<Response>;\n\ntype CallFlags = {\n input?: string;\n port?: string;\n};\n\nconst localCredential = async (port?: number) => {\n const instance = await discoverInstance(port);\n const response = await sendControlRequest(instance, {\n type: \"issue-bearer\",\n });\n return { instance, token: response.bearer.token };\n};\n\nconst getErrorMessage = async (response: Response) => {\n const body = await response.text();\n if (!body) {\n return `Operation request failed: ${response.status} ${response.statusText}`;\n }\n try {\n const parsed = JSON.parse(body) as { error?: unknown; message?: unknown };\n const message = parsed.error ?? parsed.message;\n if (typeof message === \"string\") {\n return `Operation request failed: ${message}`;\n }\n } catch {}\n return `Operation request failed: ${body}`;\n};\n\nexport const executeCallCommand = async ({\n input,\n operationName,\n fetch = globalThis.fetch,\n getLocalCredential = localCredential,\n port,\n}: {\n input?: string;\n operationName: string;\n fetch?: Fetch;\n getLocalCredential?: (port?: number) => Promise<{\n instance: InstanceRegistration;\n token: string;\n }>;\n port?: number;\n}): Promise<unknown> => {\n let parsedInput: unknown;\n if (input !== undefined) {\n try {\n parsedInput = JSON.parse(input) as unknown;\n } catch {\n throw new Error(\"Operation input must be valid JSON\");\n }\n }\n const credential = await getLocalCredential(port);\n const url = new URL(\n `/api/operations/${encodeURIComponent(operationName)}`,\n credential.instance.apiUrl,\n );\n const response = await fetch(url, {\n body: input === undefined ? undefined : JSON.stringify(parsedInput),\n headers: {\n authorization: `Bearer ${credential.token}`,\n \"content-type\": \"application/json\",\n },\n method: \"POST\",\n });\n if (!response.ok) {\n throw new Error(await getErrorMessage(response));\n }\n return response.status === 204 ? undefined : response.json();\n};\n\nconst runCall = async (flags: CallFlags, operationName: string) => {\n const port = flags.port === undefined ? undefined : parsePort(flags.port);\n if (port instanceof Error) {\n return port;\n }\n const output = await executeCallCommand({\n input: flags.input,\n operationName,\n port,\n });\n if (output !== undefined) {\n console.log(JSON.stringify(output));\n }\n};\n\nexport const callCommand = buildCommand({\n func: runCall,\n parameters: {\n aliases: { i: \"input\", p: \"port\" },\n flags: {\n input: {\n brief: \"Operation input as JSON\",\n kind: \"parsed\",\n optional: true,\n parse: String,\n },\n port: {\n brief: \"Running local server port\",\n kind: \"parsed\",\n optional: true,\n parse: String,\n },\n },\n positional: {\n kind: \"tuple\",\n parameters: [\n {\n brief: \"Operation name\",\n parse: String,\n placeholder: \"operation-name\",\n },\n ],\n },\n },\n docs: { brief: \"Invoke an operation on a running Overmux server\" },\n});\n","import { createHash } from \"node:crypto\";\nimport { createWriteStream } from \"node:fs\";\nimport { Readable, Transform } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\n\nexport type DesktopArchitecture = \"arm64\" | \"x64\";\n\ntype GitHubAsset = {\n browser_download_url: string;\n name: string;\n size: number;\n};\n\ntype GitHubRelease = {\n assets: GitHubAsset[];\n draft: boolean;\n prerelease: boolean;\n published_at: string | null;\n tag_name: string;\n};\n\nexport type DesktopRelease = {\n artifact: GitHubAsset;\n checksums: GitHubAsset;\n tag: string;\n version: string;\n};\n\nconst releasesUrl =\n \"https://api.github.com/repos/richardgill/overmux/releases?per_page=100\";\nconst downloadRoot =\n \"https://github.com/richardgill/overmux/releases/download/\";\n\nexport const getMacDesktopArtifactName = (\n version: string,\n architecture: DesktopArchitecture,\n) => `Overmux-Desktop-${version}-mac-${architecture}.zip`;\n\nconst assertOfficialAsset = (asset: GitHubAsset, tag: string) => {\n const expected = `${downloadRoot}${tag}/${asset.name}`;\n if (asset.browser_download_url !== expected) {\n throw new Error(\n `Refusing unofficial desktop asset URL: ${asset.browser_download_url}`,\n );\n }\n if (!Number.isSafeInteger(asset.size) || asset.size <= 0) {\n throw new Error(`Desktop release asset ${asset.name} has an invalid size`);\n }\n};\n\nexport const selectDesktopRelease = (\n releases: readonly GitHubRelease[],\n architecture: DesktopArchitecture,\n): DesktopRelease => {\n const candidates = releases\n .filter(\n (release) =>\n !release.draft &&\n !release.prerelease &&\n /^desktop-v[^/]+$/.test(release.tag_name),\n )\n .sort((left, right) =>\n (right.published_at ?? \"\").localeCompare(left.published_at ?? \"\"),\n );\n\n const selected = candidates.find((release) => {\n const version = release.tag_name.slice(\"desktop-v\".length);\n return release.assets.some(\n (asset) =>\n asset.name === getMacDesktopArtifactName(version, architecture),\n );\n });\n if (!selected) {\n throw new Error(\n `No stable Overmux Desktop release supports macOS ${architecture}`,\n );\n }\n\n const version = selected.tag_name.slice(\"desktop-v\".length);\n const artifactName = getMacDesktopArtifactName(version, architecture);\n const artifact = selected.assets.find((asset) => asset.name === artifactName);\n const checksums = selected.assets.find(\n (asset) => asset.name === \"SHA256SUMS\",\n );\n if (!artifact || !checksums) {\n throw new Error(`Desktop release ${selected.tag_name} is incomplete`);\n }\n assertOfficialAsset(artifact, selected.tag_name);\n assertOfficialAsset(checksums, selected.tag_name);\n return { artifact, checksums, tag: selected.tag_name, version };\n};\n\nconst fetchOk = async (url: string, fetch: typeof globalThis.fetch) => {\n if (new URL(url).protocol !== \"https:\") {\n throw new Error(`Refusing insecure desktop release URL: ${url}`);\n }\n const response = await fetch(url, {\n headers: { Accept: \"application/vnd.github+json\" },\n });\n if (!response.ok) {\n throw new Error(`GitHub request failed (${response.status}) for ${url}`);\n }\n if (response.url && new URL(response.url).protocol !== \"https:\") {\n throw new Error(\n `Refusing insecure desktop release redirect: ${response.url}`,\n );\n }\n return response;\n};\n\nexport const findDesktopRelease = async (\n architecture: DesktopArchitecture,\n fetch = globalThis.fetch,\n) => {\n const response = await fetchOk(releasesUrl, fetch);\n return selectDesktopRelease(\n (await response.json()) as GitHubRelease[],\n architecture,\n );\n};\n\nexport const parseSha256Sums = (contents: string) => {\n const checksums = new Map<string, string>();\n contents.split(/\\r?\\n/).forEach((line) => {\n if (!line) {\n return;\n }\n const match = /^([a-f0-9]{64}) ([^/\\\\]+)$/.exec(line);\n if (!match || checksums.has(match[2])) {\n throw new Error(\"Desktop release has an invalid SHA256SUMS file\");\n }\n checksums.set(match[2], match[1]);\n });\n return checksums;\n};\n\nexport const downloadTextAsset = async (\n asset: GitHubAsset,\n fetch = globalThis.fetch,\n) => {\n const response = await fetchOk(asset.browser_download_url, fetch);\n const contents = await response.text();\n if (Buffer.byteLength(contents) !== asset.size) {\n throw new Error(\n `Downloaded ${asset.name} size does not match GitHub metadata`,\n );\n }\n return contents;\n};\n\nexport const downloadVerifiedAsset = async ({\n asset,\n destination,\n expectedSha256,\n fetch = globalThis.fetch,\n}: {\n asset: GitHubAsset;\n destination: string;\n expectedSha256: string;\n fetch?: typeof globalThis.fetch;\n}) => {\n const response = await fetchOk(asset.browser_download_url, fetch);\n if (!response.body) {\n throw new Error(`Downloaded ${asset.name} has no body`);\n }\n const hash = createHash(\"sha256\");\n let size = 0;\n const verification = new Transform({\n transform(chunk: Buffer, _encoding, callback) {\n size += chunk.byteLength;\n hash.update(chunk);\n callback(null, chunk);\n },\n });\n await pipeline(\n Readable.fromWeb(\n response.body as unknown as import(\"node:stream/web\").ReadableStream,\n ),\n verification,\n createWriteStream(destination),\n );\n if (size !== asset.size) {\n throw new Error(\n `Downloaded ${asset.name} size does not match GitHub metadata`,\n );\n }\n if (hash.digest(\"hex\") !== expectedSha256) {\n throw new Error(`Downloaded ${asset.name} failed SHA-256 verification`);\n }\n};\n","import { spawnSync } from \"node:child_process\";\nimport {\n existsSync,\n lstatSync,\n mkdirSync,\n mkdtempSync,\n readlinkSync,\n readdirSync,\n renameSync,\n rmSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\n\nimport {\n downloadTextAsset,\n downloadVerifiedAsset,\n findDesktopRelease,\n parseSha256Sums,\n type DesktopArchitecture,\n type DesktopRelease,\n} from \"./desktop-release\";\n\nexport type DesktopAction = \"install\" | \"upgrade\";\n\ntype CommandResult = { status: number | null; stderr: string; stdout: string };\nexport type DesktopInstallerDependencies = {\n arch: string;\n confirm: () => Promise<boolean>;\n downloadText: (asset: DesktopRelease[\"checksums\"]) => Promise<string>;\n downloadVerified: typeof downloadVerifiedAsset;\n findRelease: (architecture: DesktopArchitecture) => Promise<DesktopRelease>;\n homeDirectory: string;\n platform: string;\n runCommand: (command: string, args: readonly string[]) => CommandResult;\n sleep: (milliseconds: number) => Promise<void>;\n stderr: Pick<NodeJS.WriteStream, \"write\">;\n stdout: Pick<NodeJS.WriteStream, \"write\">;\n};\n\ntype DesktopInstallOptions = {\n action: DesktopAction;\n yes?: boolean;\n};\n\nconst bundleIdentifier = \"com.overmux.desktop\";\nconst bundleName = \"Overmux.app\";\n\nconst runCommand = (\n command: string,\n args: readonly string[],\n): CommandResult => {\n const result = spawnSync(command, args, { encoding: \"utf8\" });\n if (result.error) {\n throw new Error(`Could not run ${command}`, { cause: result.error });\n }\n return {\n status: result.status,\n stderr: result.stderr ?? \"\",\n stdout: result.stdout ?? \"\",\n };\n};\n\nconst requireCommand = (\n dependencies: DesktopInstallerDependencies,\n command: string,\n args: readonly string[],\n) => {\n const result = dependencies.runCommand(command, args);\n if (result.status !== 0) {\n throw new Error(\n `${basename(command)} failed: ${result.stderr.trim() || \"unknown error\"}`,\n );\n }\n return result.stdout.trim();\n};\n\nconst sleep = (milliseconds: number) =>\n new Promise<void>((resolve) => {\n setTimeout(resolve, milliseconds);\n });\n\nconst confirmUnsignedInstall = async (process: NodeJS.Process) => {\n if (process.stdin.isTTY !== true || process.stdout.isTTY !== true) {\n throw new Error(\n \"Unsigned desktop installation requires an interactive terminal; rerun with --yes to accept the risk\",\n );\n }\n process.stdout.write(\n \"Overmux Desktop for macOS is experimental, unsigned, and not notarized. macOS cannot verify its publisher.\\n\",\n );\n const prompt = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const answer = await prompt.question(\n \"Install this unsigned application? [y/N] \",\n );\n prompt.close();\n return /^(?:y|yes)$/i.test(answer.trim());\n};\n\nconst createDependencies = (\n process: NodeJS.Process,\n): DesktopInstallerDependencies => ({\n arch: process.arch,\n confirm: () => confirmUnsignedInstall(process),\n downloadText: downloadTextAsset,\n downloadVerified: downloadVerifiedAsset,\n findRelease: findDesktopRelease,\n homeDirectory: homedir(),\n platform: process.platform,\n runCommand,\n sleep,\n stderr: process.stderr,\n stdout: process.stdout,\n});\n\nconst getArchitecture = (arch: string): DesktopArchitecture => {\n if (arch === \"arm64\" || arch === \"x64\") {\n return arch;\n }\n throw new Error(`Overmux Desktop does not provide a macOS ${arch} build`);\n};\n\nconst assertApplicationsDirectory = (path: string) => {\n if (!existsSync(path)) {\n return;\n }\n const metadata = lstatSync(path);\n if (!metadata.isDirectory() || metadata.isSymbolicLink()) {\n throw new Error(`Refusing unsafe user Applications directory: ${path}`);\n }\n};\n\nexport const validateDesktopZipEntries = (entries: readonly string[]) => {\n if (entries.length === 0) {\n throw new Error(\"Desktop ZIP is empty\");\n }\n entries.forEach((entry) => {\n const path = entry.endsWith(\"/\") ? entry.slice(0, -1) : entry;\n const segments = path.split(\"/\");\n if (\n !path ||\n path.includes(\"\\\\\") ||\n path.includes(\"\\0\") ||\n isAbsolute(path) ||\n segments.some(\n (segment) => !segment || segment === \".\" || segment === \"..\",\n ) ||\n segments[0] !== bundleName\n ) {\n throw new Error(`Desktop ZIP contains an unsafe path: ${entry}`);\n }\n });\n};\n\nconst assertSafeBundleTree = (bundlePath: string, directory = bundlePath) => {\n readdirSync(directory).forEach((name) => {\n const path = resolve(directory, name);\n const metadata = lstatSync(path);\n if (metadata.isSymbolicLink()) {\n const target = readlinkSync(path);\n const resolvedTarget = resolve(dirname(path), target);\n const targetRelative = relative(bundlePath, resolvedTarget);\n if (isAbsolute(target) || targetRelative.startsWith(\"..\")) {\n throw new Error(\n `Desktop bundle contains an unsafe symbolic link: ${path}`,\n );\n }\n return;\n }\n if (metadata.isDirectory()) {\n assertSafeBundleTree(bundlePath, path);\n return;\n }\n if (!metadata.isFile()) {\n throw new Error(`Desktop bundle contains an unsupported file: ${path}`);\n }\n });\n};\n\nexport const verifyDesktopBundle = (\n bundlePath: string,\n dependencies: Pick<DesktopInstallerDependencies, \"runCommand\">,\n) => {\n const metadata = lstatSync(bundlePath);\n if (!metadata.isDirectory() || metadata.isSymbolicLink()) {\n throw new Error(`${bundlePath} is not an application bundle directory`);\n }\n assertSafeBundleTree(bundlePath);\n const infoPath = resolve(bundlePath, \"Contents/Info.plist\");\n const fields = [\n [\"CFBundleIdentifier\", bundleIdentifier],\n [\"CFBundleExecutable\", \"Overmux\"],\n [\"CFBundlePackageType\", \"APPL\"],\n ] as const;\n fields.forEach(([field, expected]) => {\n const result = dependencies.runCommand(\"/usr/libexec/PlistBuddy\", [\n \"-c\",\n `Print:${field}`,\n infoPath,\n ]);\n if (result.status !== 0 || result.stdout.trim() !== expected) {\n throw new Error(`Refusing application bundle with invalid ${field}`);\n }\n });\n};\n\nconst extractAndVerifyBundle = ({\n archivePath,\n dependencies,\n stagingDirectory,\n}: {\n archivePath: string;\n dependencies: DesktopInstallerDependencies;\n stagingDirectory: string;\n}) => {\n const listing = requireCommand(dependencies, \"/usr/bin/unzip\", [\n \"-Z1\",\n archivePath,\n ]);\n validateDesktopZipEntries(listing.split(/\\r?\\n/));\n const extractionDirectory = resolve(stagingDirectory, \"extracted\");\n mkdirSync(extractionDirectory);\n requireCommand(dependencies, \"/usr/bin/ditto\", [\n \"-x\",\n \"-k\",\n archivePath,\n extractionDirectory,\n ]);\n const topLevelEntries = readdirSync(extractionDirectory);\n if (topLevelEntries.length !== 1 || topLevelEntries[0] !== bundleName) {\n throw new Error(\"Desktop ZIP must contain only Overmux.app\");\n }\n const bundlePath = resolve(extractionDirectory, bundleName);\n verifyDesktopBundle(bundlePath, dependencies);\n return bundlePath;\n};\n\nconst prepareSignature = (\n bundlePath: string,\n dependencies: DesktopInstallerDependencies,\n) => {\n const verification = dependencies.runCommand(\"/usr/bin/codesign\", [\n \"--verify\",\n \"--deep\",\n \"--strict\",\n bundlePath,\n ]);\n if (verification.status !== 0) {\n requireCommand(dependencies, \"/usr/bin/codesign\", [\n \"--force\",\n \"--deep\",\n \"--sign\",\n \"-\",\n bundlePath,\n ]);\n }\n requireCommand(dependencies, \"/usr/bin/codesign\", [\n \"--verify\",\n \"--deep\",\n \"--strict\",\n bundlePath,\n ]);\n const quarantineRemoval = dependencies.runCommand(\"/usr/bin/xattr\", [\n \"-dr\",\n \"com.apple.quarantine\",\n bundlePath,\n ]);\n if (quarantineRemoval.status !== 0 && quarantineRemoval.status !== 1) {\n throw new Error(\n `Could not remove quarantine: ${quarantineRemoval.stderr.trim()}`,\n );\n }\n};\n\nconst waitForDesktopExit = async (\n dependencies: DesktopInstallerDependencies,\n attemptsRemaining: number,\n): Promise<void> => {\n const result = dependencies.runCommand(\"/usr/bin/pgrep\", [\"-x\", \"Overmux\"]);\n if (result.status === 1) {\n return;\n }\n if (result.status !== 0) {\n throw new Error(\n `Could not confirm that Overmux quit: ${result.stderr.trim()}`,\n );\n }\n if (attemptsRemaining === 0) {\n throw new Error(\"Overmux did not quit; close it and retry the upgrade\");\n }\n await dependencies.sleep(100);\n return waitForDesktopExit(dependencies, attemptsRemaining - 1);\n};\n\nconst stopRunningDesktop = async (\n dependencies: DesktopInstallerDependencies,\n) => {\n const running = dependencies.runCommand(\"/usr/bin/pgrep\", [\"-x\", \"Overmux\"]);\n if (running.status === 1) {\n return;\n }\n if (running.status !== 0) {\n throw new Error(\n `Could not determine whether Overmux is running: ${running.stderr.trim()}`,\n );\n }\n requireCommand(dependencies, \"/usr/bin/osascript\", [\n \"-e\",\n `tell application id \"${bundleIdentifier}\" to quit`,\n ]);\n await waitForDesktopExit(dependencies, 50);\n};\n\nconst launchDesktop = (\n destination: string,\n dependencies: DesktopInstallerDependencies,\n) => requireCommand(dependencies, \"/usr/bin/open\", [destination]);\n\nconst replaceDesktop = async ({\n action,\n bundlePath,\n dependencies,\n destination,\n stagingDirectory,\n}: {\n action: DesktopAction;\n bundlePath: string;\n dependencies: DesktopInstallerDependencies;\n destination: string;\n stagingDirectory: string;\n}) => {\n const backupPath = resolve(stagingDirectory, \"Overmux.previous.app\");\n if (action === \"upgrade\") {\n verifyDesktopBundle(destination, dependencies);\n await stopRunningDesktop(dependencies);\n renameSync(destination, backupPath);\n } else if (existsSync(destination)) {\n throw new Error(\n `${destination} appeared during installation; no files were replaced`,\n );\n }\n try {\n renameSync(bundlePath, destination);\n launchDesktop(destination, dependencies);\n } catch (error) {\n rmSync(destination, { force: true, recursive: true });\n if (action === \"upgrade\" && existsSync(backupPath)) {\n renameSync(backupPath, destination);\n try {\n launchDesktop(destination, dependencies);\n } catch {\n dependencies.stderr.write(\n \"Restored the previous Overmux.app but could not relaunch it.\\n\",\n );\n }\n }\n throw error;\n }\n};\n\nexport const installDesktop = async (\n options: DesktopInstallOptions,\n overrides: Partial<DesktopInstallerDependencies> = {},\n process = globalThis.process,\n) => {\n const dependencies = { ...createDependencies(process), ...overrides };\n if (dependencies.platform !== \"darwin\") {\n throw new Error(\n \"Overmux desktop install and upgrade are only available on macOS\",\n );\n }\n const architecture = getArchitecture(dependencies.arch);\n const applicationsDirectory = resolve(\n dependencies.homeDirectory,\n \"Applications\",\n );\n assertApplicationsDirectory(applicationsDirectory);\n const destination = resolve(applicationsDirectory, bundleName);\n const exists = existsSync(destination);\n if (options.action === \"install\" && exists) {\n throw new Error(\n `${destination} already exists; run overmux desktop upgrade`,\n );\n }\n if (options.action === \"upgrade\" && !exists) {\n throw new Error(\n `${destination} is not installed; run overmux desktop install`,\n );\n }\n if (options.action === \"upgrade\") {\n verifyDesktopBundle(destination, dependencies);\n }\n if (\n options.action === \"install\" &&\n !options.yes &&\n !(await dependencies.confirm())\n ) {\n throw new Error(\"Desktop installation cancelled\");\n }\n\n mkdirSync(applicationsDirectory, { recursive: true });\n assertApplicationsDirectory(applicationsDirectory);\n const stagingDirectory = mkdtempSync(\n resolve(applicationsDirectory, \".overmux-install-\"),\n );\n try {\n const release = await dependencies.findRelease(architecture);\n const checksums = parseSha256Sums(\n await dependencies.downloadText(release.checksums),\n );\n const expectedSha256 = checksums.get(release.artifact.name);\n if (!expectedSha256) {\n throw new Error(\n `${release.tag} SHA256SUMS does not contain ${release.artifact.name}`,\n );\n }\n const archivePath = resolve(stagingDirectory, release.artifact.name);\n await dependencies.downloadVerified({\n asset: release.artifact,\n destination: archivePath,\n expectedSha256,\n });\n const bundlePath = extractAndVerifyBundle({\n archivePath,\n dependencies,\n stagingDirectory,\n });\n prepareSignature(bundlePath, dependencies);\n await replaceDesktop({\n action: options.action,\n bundlePath,\n dependencies,\n destination,\n stagingDirectory,\n });\n dependencies.stdout.write(\n `${options.action === \"install\" ? \"Installed\" : \"Upgraded\"} and launched ${destination} (${release.version}).\\n`,\n );\n } finally {\n rmSync(stagingDirectory, { force: true, recursive: true });\n }\n};\n","import { buildCommand, buildRouteMap } from \"@stricli/core\";\n\nimport type { CliCommandContext } from \"../environment\";\nimport { installDesktop } from \"./desktop-installer\";\n\ntype InstallFlags = { yes?: boolean };\n\nfunction runInstallCommand(this: CliCommandContext, flags: InstallFlags) {\n return installDesktop(\n { action: \"install\", yes: flags.yes },\n {},\n this.process,\n );\n}\n\nfunction runUpgradeCommand(this: CliCommandContext) {\n return installDesktop({ action: \"upgrade\" }, {}, this.process);\n}\n\nexport const desktopInstallCommand = buildCommand({\n func: runInstallCommand,\n parameters: {\n flags: {\n yes: {\n brief: \"Accept the unsigned application risk without prompting\",\n kind: \"boolean\",\n optional: true,\n },\n },\n positional: { kind: \"tuple\", parameters: [] },\n },\n docs: { brief: \"Install the experimental macOS desktop application\" },\n});\n\nexport const desktopUpgradeCommand = buildCommand({\n func: runUpgradeCommand,\n parameters: { positional: { kind: \"tuple\", parameters: [] } },\n docs: { brief: \"Upgrade the installed macOS desktop application\" },\n});\n\nexport const desktopRoute = buildRouteMap({\n docs: { brief: \"Install or upgrade Overmux Desktop on macOS\" },\n routes: {\n install: desktopInstallCommand,\n upgrade: desktopUpgradeCommand,\n },\n});\n","import { buildCommand } from \"@stricli/core\";\nimport { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\ntype DocsOutput = { write: (text: string) => unknown };\n\nexport const resolveInstalledDocsRoot = (moduleUrl: string) => {\n const candidates = [\"../docs\", \"./docs\", \"../../../docs\"].map((path) =>\n fileURLToPath(new URL(path, moduleUrl)),\n );\n const docsRoot = candidates.find((candidate) => existsSync(candidate));\n if (!docsRoot) {\n throw new Error(\"Installed Overmux documentation is missing\");\n }\n return resolve(docsRoot);\n};\n\nexport const createDocsCommand = ({\n docsRoot,\n output,\n}: {\n docsRoot: string;\n output: DocsOutput;\n}) =>\n buildCommand({\n func: () => {\n output.write(`${resolve(docsRoot)}\\n`);\n },\n parameters: {},\n docs: {\n brief: \"Print the installed documentation directory\",\n },\n });\n","export type InitToolchain = \"mise\" | \"pnpm\";\n\nexport const initScaffoldPaths = [\n \".gitignore\",\n \"AGENTS.md\",\n \"CLAUDE.md\",\n \"mise.toml\",\n \"package.json\",\n \"pnpm-lock.yaml\",\n \"overmux.config.ts\",\n \"src/server/index.ts\",\n \"src/ui/app.tsx\",\n \"src/ui/index.html\",\n \"src/ui/main.tsx\",\n \"src/ui/styles.css\",\n \"vite.config.ts\",\n] as const;\n\nconst packageJson = (overmuxVersion: string) =>\n `${JSON.stringify(\n {\n name: \"my-overmux\",\n private: true,\n type: \"module\",\n scripts: {\n build: \"vite build\",\n check: \"overmux check --config ./overmux.config.ts\",\n dev: \"overmux serve --config ./overmux.config.ts\",\n },\n dependencies: {\n overmux: overmuxVersion,\n react: \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n },\n devDependencies: {\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n \"@vitejs/plugin-react\": \"^6.0.0\",\n typescript: \"^5.9.0\",\n vite: \"^8.0.0\",\n },\n },\n null,\n 2,\n )}\\n`;\n\nexport const createInitScaffold = ({\n overmuxVersion,\n toolchain,\n}: {\n overmuxVersion: string;\n toolchain: InitToolchain;\n}): Readonly<Record<string, string>> => ({\n \".gitignore\": \"node_modules\\ndist\\n\",\n \"AGENTS.md\":\n \"Immediately run `overmux ai context` for documentation about Overmux.\\n\",\n \"CLAUDE.md\": \"@AGENTS.md\\n\",\n ...(toolchain === \"mise\"\n ? {\n \"mise.toml\": `[tools]\nnode = \"22\"\npnpm = \"10\"\n\"npm:overmux\" = \"${overmuxVersion}\"\n`,\n }\n : {}),\n \"package.json\": packageJson(overmuxVersion),\n \"overmux.config.ts\": `import { defineOvermuxConfig } from \"overmux\";\n\nimport server from \"./src/server/index\";\n\nexport default defineOvermuxConfig({\n auth: { mode: \"cli-login\" },\n productionWebAssetsDir: \"./dist\",\n server,\n vite: \"./vite.config.ts\",\n});\n`,\n \"src/server/index.ts\": `import { defineOvermuxServer } from \"overmux\";\n\nexport default defineOvermuxServer({ resources: {} });\n`,\n \"src/ui/app.tsx\": `import { defineOvermuxClient } from \"overmux/client\";\n\nconst App = () => <main>Overmux is running.</main>;\n\nexport default defineOvermuxClient({\n commands: {},\n component: App,\n});\n`,\n \"src/ui/index.html\": `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Overmux</title>\n </head>\n <body>\n <div id=\"root\">\n <p>Loading Overmux…</p>\n <button type=\"button\" onclick=\"location.reload()\">Retry</button>\n </div>\n <script type=\"module\" src=\"/main.tsx\"></script>\n </body>\n</html>\n`,\n \"src/ui/main.tsx\": `import { OvermuxHost } from \"overmux/client\";\nimport { createRoot } from \"react-dom/client\";\n\nimport definition from \"./app\";\nimport \"./styles.css\";\n\nconst root = document.querySelector(\"#root\");\nif (!root) {\n throw new Error(\"Missing root element\");\n}\n\ncreateRoot(root).render(<OvermuxHost definition={definition} />);\n`,\n \"src/ui/styles.css\": `:root {\n color: #f5f5f5;\n background: #111;\n font-family: system-ui, sans-serif;\n}\n\nbody {\n margin: 0;\n}\n\nmain {\n display: grid;\n min-height: 100vh;\n place-items: center;\n}\n`,\n \"vite.config.ts\": `import viteReact from \"@vitejs/plugin-react\";\nimport { defineConfig } from \"vite\";\n\nexport default defineConfig({\n build: { emptyOutDir: true, outDir: \"../../dist\" },\n plugins: [viteReact()],\n root: \"src/ui\",\n});\n`,\n});\n","import { buildCommand } from \"@stricli/core\";\nimport { spawnSync } from \"node:child_process\";\nimport {\n cpSync,\n existsSync,\n mkdirSync,\n mkdtempSync,\n renameSync,\n rmSync,\n statSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nimport { getOvermuxPaths } from \"../../server/paths\";\nimport {\n createInitScaffold,\n initScaffoldPaths,\n type InitToolchain,\n} from \"./init-template\";\n\nconst miseActivationDocs =\n \"https://mise.jdx.dev/getting-started.html#activate-mise\";\ntype CommandResult = {\n error?: NodeJS.ErrnoException;\n status: number | null;\n stderr: string;\n stdout: string;\n};\n\nexport type InitDependencies = {\n directory: string;\n getLatestOvermuxVersion: () => Promise<string>;\n runCommand: (\n command: string,\n args: readonly string[],\n options?: { cwd?: string },\n ) => CommandResult;\n stderr: { write: (text: string) => unknown };\n stdout: { write: (text: string) => unknown };\n};\n\nconst runCommand: InitDependencies[\"runCommand\"] = (command, args, options) => {\n const result = spawnSync(command, args, {\n cwd: options?.cwd,\n encoding: \"utf8\",\n maxBuffer: 20 * 1024 * 1024,\n });\n return {\n error: result.error,\n status: result.status,\n stderr: result.stderr ?? \"\",\n stdout: result.stdout ?? \"\",\n };\n};\n\nconst getLatestOvermuxVersion = async () => {\n const response = await fetch(\"https://registry.npmjs.org/overmux/latest\", {\n headers: { accept: \"application/json\" },\n });\n if (!response.ok) {\n throw new Error(\n `Could not resolve the latest Overmux version: npm returned ${response.status}`,\n );\n }\n const body: unknown = await response.json();\n const version =\n typeof body === \"object\" && body !== null && \"version\" in body\n ? body.version\n : undefined;\n if (typeof version !== \"string\") {\n throw new Error(\"Could not resolve the latest Overmux version from npm\");\n }\n return version;\n};\n\nconst commandExists = (result: CommandResult) =>\n result.error?.code !== \"ENOENT\";\n\nconst isMiseActivated = (dependencies: InitDependencies) => {\n const doctor = dependencies.runCommand(\"mise\", [\"doctor\", \"--json\"]);\n if (doctor.status !== 0) {\n return false;\n }\n try {\n const report: unknown = JSON.parse(doctor.stdout);\n return (\n typeof report === \"object\" &&\n report !== null &&\n \"activated\" in report &&\n report.activated === true\n );\n } catch {\n return false;\n }\n};\n\nconst detectToolchain = (dependencies: InitDependencies): InitToolchain => {\n const mise = dependencies.runCommand(\"mise\", [\"--version\"]);\n if (commandExists(mise)) {\n if (mise.status !== 0) {\n throw new Error(\n `Mise could not be validated. Activate mise and try again. ${miseActivationDocs}`,\n );\n }\n if (!isMiseActivated(dependencies)) {\n throw new Error(\n `Mise must be activated in your shell before running overmux init. ${miseActivationDocs}`,\n );\n }\n return \"mise\";\n }\n\n const pnpm = dependencies.runCommand(\"pnpm\", [\"--version\"]);\n const major = Number.parseInt(pnpm.stdout.trim().split(\".\")[0] ?? \"\", 10);\n if (!commandExists(pnpm) || pnpm.status !== 0 || !Number.isFinite(major)) {\n throw new Error(\"pnpm 10 or newer is required when mise is not installed\");\n }\n if (major < 10) {\n throw new Error(\n `pnpm 10 or newer is required when mise is not installed (found ${pnpm.stdout.trim()})`,\n );\n }\n return \"pnpm\";\n};\n\nconst findCollisions = (directory: string) => {\n if (existsSync(directory) && !statSync(directory).isDirectory()) {\n return [directory];\n }\n return initScaffoldPaths.filter((path) => existsSync(join(directory, path)));\n};\n\nconst writeScaffold = (\n directory: string,\n files: Readonly<Record<string, string>>,\n) => {\n Object.entries(files).forEach(([path, content]) => {\n const destination = join(directory, path);\n mkdirSync(dirname(destination), { recursive: true });\n writeFileSync(destination, content);\n });\n};\n\nconst runProjectCommand = ({\n args,\n command,\n cwd,\n dependencies,\n}: {\n args: readonly string[];\n command: string;\n cwd: string;\n dependencies: InitDependencies;\n}) => {\n const result = dependencies.runCommand(command, args, { cwd });\n dependencies.stdout.write(result.stdout);\n dependencies.stderr.write(result.stderr);\n if (result.error || result.status !== 0) {\n throw new Error(`Command failed: ${command} ${args.join(\" \")}`);\n }\n};\n\nconst pnpmCommands = [\n [\"install\", \"--ignore-workspace\"],\n [\"exec\", \"overmux\", \"check\", \"--config\", \"./overmux.config.ts\"],\n] as const;\n\nconst installAndCheck = ({\n directory,\n dependencies,\n toolchain,\n}: {\n directory: string;\n dependencies: InitDependencies;\n toolchain: InitToolchain;\n}) => {\n const context = { cwd: directory, dependencies };\n if (toolchain === \"mise\") {\n runProjectCommand({\n ...context,\n command: \"mise\",\n args: [\"install\", \"node@22\", \"pnpm@10\", \"--yes\"],\n });\n }\n pnpmCommands.forEach((args) =>\n runProjectCommand({\n ...context,\n command: toolchain,\n args:\n toolchain === \"mise\"\n ? [\"exec\", \"node@22\", \"pnpm@10\", \"--\", \"pnpm\", ...args]\n : args,\n }),\n );\n};\n\nconst mergeScaffold = (source: string, target: string) => {\n if (!existsSync(target)) {\n renameSync(source, target);\n return;\n }\n cpSync(source, target, {\n errorOnExist: true,\n force: false,\n recursive: true,\n });\n};\n\nexport const initializeOvermux = async (dependencies: InitDependencies) => {\n const directory = resolve(dependencies.directory);\n const collisions = findCollisions(directory);\n if (collisions.length > 0) {\n throw new Error(\n `Refusing to overwrite existing files:\\n${collisions.map((path) => `- ${path}`).join(\"\\n\")}`,\n );\n }\n\n const toolchain = detectToolchain(dependencies);\n const overmuxVersion = await dependencies.getLatestOvermuxVersion();\n const files = createInitScaffold({ overmuxVersion, toolchain });\n const parent = dirname(directory);\n mkdirSync(parent, { recursive: true });\n const stagingDirectory = mkdtempSync(join(parent, \".overmux-init-\"));\n\n try {\n // Defer the npm tool entry so dependency installation uses the project-local Overmux binary.\n const installFiles = Object.fromEntries(\n Object.entries(files).filter(([path]) => path !== \"mise.toml\"),\n );\n writeScaffold(stagingDirectory, installFiles);\n installAndCheck({\n directory: stagingDirectory,\n dependencies,\n toolchain,\n });\n if (!existsSync(join(stagingDirectory, \"pnpm-lock.yaml\"))) {\n throw new Error(\"pnpm install did not generate pnpm-lock.yaml\");\n }\n if (files[\"mise.toml\"]) {\n writeFileSync(join(stagingDirectory, \"mise.toml\"), files[\"mise.toml\"]);\n }\n mergeScaffold(stagingDirectory, directory);\n } finally {\n rmSync(stagingDirectory, { force: true, recursive: true });\n }\n\n dependencies.stdout.write(\n `Initialized Overmux in ${directory}\\nNext: overmux serve\\n`,\n );\n};\n\nexport const createInitCommand = (process: NodeJS.Process) =>\n buildCommand({\n func: () =>\n initializeOvermux({\n directory: getOvermuxPaths({ environment: process.env }).configDir,\n getLatestOvermuxVersion,\n runCommand,\n stderr: process.stderr,\n stdout: process.stdout,\n }),\n parameters: { flags: {} },\n docs: {\n brief: \"Create a minimal Overmux application\",\n },\n });\n","// This hard-coded CLI seam delegates installation to the invoking project's integration.\n// It intentionally resolves one known subpath rather than creating a plugin registry.\nimport { readFileSync } from \"node:fs\";\nimport { findPackageJSON } from \"node:module\";\nimport { dirname, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { buildCommand } from \"@stricli/core\";\n\ntype ZellijInstallModule = {\n installZellij: (options: { session?: string }) => Promise<{\n artifactPath: string;\n pluginVersion: string;\n protocolVersion: number;\n session: string;\n sha256: string;\n }>;\n};\n\ntype ZellijInstallDependencies = {\n cwd: string;\n importModule: (specifier: string) => Promise<ZellijInstallModule>;\n resolveInstall: () => string;\n};\n\nconst resolveZellijInstall = (cwd: string) => {\n const projectUrl = pathToFileURL(resolve(cwd, \"package.json\"));\n const packagePath = findPackageJSON(\"@overmux/zellij/install\", projectUrl);\n if (packagePath === undefined) {\n throw new Error(\"package not found\");\n }\n const packageJson = JSON.parse(readFileSync(packagePath, \"utf8\")) as {\n exports?: { \"./install\"?: { import?: unknown } };\n };\n const installExport = packageJson.exports?.[\"./install\"]?.import;\n if (typeof installExport !== \"string\") {\n throw new Error(\"package has no importable ./install export\");\n }\n return resolve(dirname(packagePath), installExport);\n};\n\nconst defaultDependencies = (): ZellijInstallDependencies => {\n const cwd = process.cwd();\n return {\n cwd,\n importModule: (specifier) =>\n import(specifier) as Promise<ZellijInstallModule>,\n resolveInstall: () => resolveZellijInstall(cwd),\n };\n};\n\nexport const executeZellijInstall = async (\n { session }: { session?: string },\n dependencies = defaultDependencies(),\n) => {\n let modulePath: string;\n try {\n modulePath = dependencies.resolveInstall();\n } catch {\n throw new Error(\n `Could not resolve @overmux/zellij/install from ${dependencies.cwd}. Add @overmux/zellij to this project, then run the command again.`,\n );\n }\n const integration = await dependencies.importModule(\n pathToFileURL(modulePath).href,\n );\n if (typeof integration.installZellij !== \"function\") {\n throw new Error(\n \"@overmux/zellij/install does not export installZellij. Update @overmux/zellij and run the command again.\",\n );\n }\n return integration.installZellij({ session });\n};\n\nconst runZellijInstall = async ({ session }: { session?: string }) => {\n const result = await executeZellijInstall({ session });\n console.log(\n `Installed Zellij plugin ${result.pluginVersion} (protocol ${result.protocolVersion})\\nSession: ${result.session}\\nArtifact: ${result.artifactPath}\\nSHA-256: ${result.sha256}`,\n );\n};\n\nexport const zellijInstallCommand = buildCommand({\n docs: { brief: \"Install and approve the @overmux/zellij plugin\" },\n func: runZellijInstall,\n parameters: {\n flags: {\n session: {\n brief: \"Target an active Zellij session\",\n kind: \"parsed\",\n optional: true,\n parse: String,\n placeholder: \"name\",\n },\n },\n },\n});\n","// This namespace groups deliberate integration lifecycle commands by verb.\n// Only install zellij exists now; the parser shape leaves later lifecycle verbs explicit.\nimport { buildRouteMap } from \"@stricli/core\";\n\nimport { zellijInstallCommand } from \"./zellij-install\";\n\nconst installIntegrationCommand = buildRouteMap({\n docs: { brief: \"Install an Overmux integration\" },\n routes: { zellij: zellijInstallCommand },\n});\n\nexport const integrationCommand = buildRouteMap({\n docs: { brief: \"Manage Overmux integrations\" },\n routes: { install: installIntegrationCommand },\n});\n","export const runtimeWebSocketPath = \"/api/socket\";\nexport const viteHmrPath = \"/_overmux/vite/hmr\";\nexport const viteInfrastructurePath = \"/_overmux/vite/*\";\n","import { readFile, realpath } from \"node:fs/promises\";\nimport { isAbsolute, relative, resolve } from \"node:path\";\nimport { init, parse } from \"es-module-lexer\";\nimport {\n searchForWorkspaceRoot,\n type InlineConfig,\n type UserConfig,\n type ViteDevServer,\n} from \"vite\";\n\nimport { viteHmrPath } from \"../shared/routes\";\n\ntype ViteApi = {\n build: (options: { configFile: string; root: string }) => Promise<unknown>;\n createServer: (options: InlineConfig) => Promise<ViteDevServer>;\n loadConfigFromFile: (\n environment: {\n command: \"build\" | \"serve\";\n mode: \"development\" | \"production\";\n },\n configFile: string,\n configRoot: string,\n ) => Promise<{ config: UserConfig } | null | undefined>;\n};\n\ntype ManagedVite = {\n close: () => Promise<void>;\n server: ViteDevServer;\n target: string;\n};\n\nexport const loadViteRoot = async ({\n api,\n command,\n configPath,\n}: {\n api: ViteApi;\n command: \"build\" | \"serve\";\n configPath: string;\n}) => {\n const configRoot = resolve(configPath, \"..\");\n const mode = command === \"build\" ? \"production\" : \"development\";\n const loaded = await api.loadConfigFromFile(\n { command, mode },\n configPath,\n configRoot,\n );\n return {\n config: loaded?.config ?? {},\n root: resolve(configRoot, loaded?.config.root ?? \".\"),\n };\n};\n\nconst conflictingHmrKeys = [\n \"clientPort\",\n \"host\",\n \"path\",\n \"port\",\n \"protocol\",\n \"server\",\n] as const;\n\nexport const validateViteServerConfig = (config: UserConfig) => {\n const server = config.server;\n const conflict = [\"host\", \"port\", \"strictPort\", \"https\"].find(\n (key) => server?.[key as keyof typeof server] !== undefined,\n );\n if (conflict) {\n throw new Error(\n `Vite server.${conflict} is managed by \\`overmux serve\\`; remove it from the Vite config`,\n );\n }\n if (server?.hmr === false) {\n throw new Error(\n \"Vite server.hmr cannot be disabled when managed by `overmux serve`\",\n );\n }\n const hmr = server?.hmr;\n if (hmr && typeof hmr === \"object\") {\n const hmrConflict = conflictingHmrKeys.find(\n (key) => hmr[key] !== undefined,\n );\n if (hmrConflict) {\n throw new Error(\n `Vite server.hmr.${hmrConflict} is managed by \\`overmux serve\\`; remove it from the Vite config`,\n );\n }\n }\n};\n\nconst validateResolvedViteServer = (server: ViteDevServer) => {\n const config = server.config.server;\n const hmr =\n config.hmr && typeof config.hmr === \"object\" ? config.hmr : undefined;\n const changedHmrEndpoint = conflictingHmrKeys.some(\n (key) => key !== \"path\" && hmr?.[key] !== undefined,\n );\n if (\n config.host !== \"127.0.0.1\" ||\n config.port !== 0 ||\n config.strictPort !== true ||\n config.https ||\n hmr?.path !== viteHmrPath ||\n changedHmrEndpoint\n ) {\n throw new Error(\n \"A Vite plugin changed listener or HMR settings managed by `overmux serve`\",\n );\n }\n};\n\nconst pathIsWithin = (root: string, path: string) => {\n const pathFromRoot = relative(root, path);\n return !pathFromRoot.startsWith(\"..\") && !isAbsolute(pathFromRoot);\n};\n\nconst localPath = async (id: string, trustedRoots: string[]) => {\n if (id.includes(\"\\0\")) {\n return;\n }\n try {\n const path = await realpath(id.split(\"?\", 1)[0]!);\n if (\n path.includes(\"node_modules\") ||\n !trustedRoots.some((root) => pathIsWithin(root, path))\n ) {\n return;\n }\n return path;\n } catch {\n return;\n }\n};\n\nconst importsOf = async (path: string) => {\n const source = await readFile(path, \"utf8\");\n await init;\n try {\n return parse(source)[0];\n } catch {\n return [];\n }\n};\n\nconst trustedFiles = async ({\n configPath,\n server,\n trustedRoots,\n}: {\n configPath: string;\n server: ViteDevServer;\n trustedRoots: string[];\n}): Promise<Set<string>> => {\n const files = new Set<string>();\n const visit = async (path: string): Promise<void> => {\n if (files.has(path)) {\n return;\n }\n files.add(path);\n const imports = await importsOf(path);\n await Promise.all(\n imports.map(async (imported) => {\n if (!imported.n) {\n return;\n }\n const resolved = await server.pluginContainer.resolveId(\n imported.n,\n path,\n );\n const id = typeof resolved === \"string\" ? resolved : resolved?.id;\n const importedPath = id ? await localPath(id, trustedRoots) : undefined;\n if (importedPath) {\n await visit(importedPath);\n }\n }),\n );\n };\n await visit(configPath);\n return files;\n};\n\n// Watch overmux.config.ts and its imports because Vite only watches browser code.\n// Changes notify Overmux that its trusted server code needs reloading.\nexport const watchTrustedFiles = async ({\n configPath,\n onUpdate,\n server,\n}: {\n configPath: string;\n onUpdate: () => void;\n server: ViteDevServer;\n}) => {\n const logicalApplicationRoot = resolve(configPath, \"..\");\n const [applicationRoot, workspaceRoot] = await Promise.all([\n realpath(logicalApplicationRoot),\n realpath(searchForWorkspaceRoot(logicalApplicationRoot)),\n ]);\n let files = new Set<string>();\n const refresh = async () => {\n files = await trustedFiles({\n configPath: await realpath(configPath),\n server,\n trustedRoots: [applicationRoot, workspaceRoot],\n });\n server.watcher.add([...files]);\n };\n await refresh();\n const changed = (path: string) => {\n if (files.has(path)) {\n void refresh().then(onUpdate);\n }\n };\n server.watcher.on(\"change\", changed);\n return () => {\n server.watcher.off(\"change\", changed);\n };\n};\n\nexport const startManagedVite = async ({\n api,\n configPath,\n}: {\n api: ViteApi;\n configPath: string;\n}): Promise<ManagedVite> => {\n const { config, root } = await loadViteRoot({\n api,\n command: \"serve\",\n configPath,\n });\n validateViteServerConfig(config);\n const allowedRoots = [\n ...(config.server?.fs?.allow ?? []),\n root,\n await realpath(root),\n searchForWorkspaceRoot(root),\n ];\n const server = await api.createServer({\n configFile: configPath,\n root,\n server: {\n fs: { allow: [...new Set(allowedRoots)] },\n hmr: { path: viteHmrPath },\n host: \"127.0.0.1\",\n port: 0,\n strictPort: true,\n },\n });\n try {\n validateResolvedViteServer(server);\n await server.listen();\n const address = server.httpServer?.address();\n if (!address || typeof address === \"string\") {\n throw new Error(\"Private Vite server did not bind a TCP address\");\n }\n return {\n close: () => server.close(),\n server,\n target: `http://127.0.0.1:${address.port}`,\n };\n } catch (cause) {\n await server.close();\n throw cause;\n }\n};\n\nexport type { ViteApi };\n","import { loadOvermuxConfig } from \"@overmux/shared/node\";\nimport { buildCommand } from \"@stricli/core\";\nimport { access } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type { CliCommandContext, CliEnvironment } from \"../environment\";\nimport { issueLoginGrant, printLoginFallback, printLoginGrant } from \"../login\";\nimport {\n loadViteRoot,\n startManagedVite,\n watchTrustedFiles,\n type ViteApi,\n} from \"../managed-vite\";\nimport { parsePort } from \"../parse-port\";\nimport { startOvermuxServer } from \"../../server/index\";\nimport { getDefaultConfigPath } from \"../../server/paths\";\n\nexport type ServeFlags = {\n config: string;\n host?: string;\n login?: boolean;\n noBuild?: boolean;\n noLogin?: boolean;\n port?: number;\n production?: boolean;\n};\n\nexport type RunningServe = {\n close: () => Promise<void>;\n port: number;\n url: string;\n};\n\nconst loadApplicationVite = async (\n viteConfigPath: string,\n): Promise<ViteApi> => {\n const require = createRequire(viteConfigPath);\n const viteEntry = require.resolve(\"vite\");\n return import(pathToFileURL(viteEntry).href) as Promise<ViteApi>;\n};\n\n// Register before startup resolves so signals still clean up partially started servers.\nconst registerShutdown = (\n running: Promise<RunningServe>,\n process: NodeJS.Process,\n) => {\n let shuttingDown = false;\n const shutdown = async () => {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n try {\n const server = await running;\n await server.close();\n process.exitCode = 0;\n } catch {\n process.exitCode = 1;\n }\n };\n const onSignal = () => void shutdown();\n process.once(\"SIGINT\", onSignal);\n process.once(\"SIGTERM\", onSignal);\n return () => {\n process.off(\"SIGINT\", onSignal);\n process.off(\"SIGTERM\", onSignal);\n };\n};\n\nconst startDevelopmentServer = async ({\n configPath,\n host,\n port,\n shouldWatch,\n vite,\n viteConfigPath,\n}: {\n configPath: string;\n host?: string;\n port?: number;\n shouldWatch: boolean;\n vite: ViteApi;\n viteConfigPath: string;\n}): Promise<RunningServe> => {\n const managedVite = await startManagedVite({\n api: vite,\n configPath: viteConfigPath,\n });\n let server: Awaited<ReturnType<typeof startOvermuxServer>> | undefined;\n let stopWatching: () => void = () => undefined;\n try {\n if (shouldWatch) {\n stopWatching = await watchTrustedFiles({\n configPath,\n onUpdate: () => server?.announceUpdateAvailable(),\n server: managedVite.server,\n });\n }\n server = await startOvermuxServer({\n configPath,\n developmentWebTarget: managedVite.target,\n ...(host === undefined ? {} : { host }),\n ...(port === undefined ? {} : { port }),\n watch: false,\n });\n return {\n close: async () => {\n stopWatching();\n await Promise.all([server?.close(), managedVite.close()]);\n },\n port: server.port,\n url: server.url,\n };\n } catch (cause) {\n stopWatching();\n await Promise.all([server?.close(), managedVite.close()]);\n throw cause;\n }\n};\n\nconst startProductionServer = async ({\n configPath,\n host,\n noBuild,\n port,\n productionWebAssetsDir,\n vite,\n viteConfigPath,\n}: {\n configPath: string;\n host?: string;\n noBuild: boolean;\n port?: number;\n productionWebAssetsDir: string;\n vite: ViteApi;\n viteConfigPath: string;\n}): Promise<RunningServe> => {\n if (noBuild) {\n const entryPath = join(productionWebAssetsDir, \"index.html\");\n try {\n await access(entryPath);\n } catch {\n throw new Error(`Production entry does not exist: ${entryPath}`);\n }\n } else {\n const { root } = await loadViteRoot({\n api: vite,\n command: \"build\",\n configPath: viteConfigPath,\n });\n await vite.build({ configFile: viteConfigPath, root });\n }\n const server = await startOvermuxServer({\n configPath,\n ...(host === undefined ? {} : { host }),\n ...(port === undefined ? {} : { port }),\n });\n return { close: server.close, port: server.port, url: server.url };\n};\n\nexport const resolveServeLogin = (\n flags: Pick<ServeFlags, \"login\" | \"noLogin\">,\n environment: Pick<CliEnvironment, \"isHumanUser\">,\n) => {\n if (flags.login && flags.noLogin) {\n throw new Error(\"Only set one of: --login and --no-login\");\n }\n return flags.login || (!flags.noLogin && environment.isHumanUser);\n};\n\nconst announceServeLogin = async ({\n createLogin,\n port,\n process,\n}: {\n createLogin: boolean;\n port: number;\n process: NodeJS.Process;\n}) => {\n if (!createLogin) {\n printLoginFallback(port, process);\n return;\n }\n printLoginGrant({ ...(await issueLoginGrant(port)), output: process });\n};\n\nexport const runServe = async ({\n environment,\n flags,\n process,\n}: {\n environment: Pick<CliEnvironment, \"isHumanUser\">;\n flags: ServeFlags;\n process: NodeJS.Process;\n}) => {\n if (flags.noBuild && !flags.production) {\n throw new Error(\"--no-build requires --production\");\n }\n const createLogin = resolveServeLogin(flags, environment);\n const configPath = resolve(flags.config);\n const { config } = await loadOvermuxConfig({ configPath });\n if (!config.vite) {\n throw new Error(\"Overmux config must define a Vite config path in `vite`\");\n }\n const viteConfigPath = resolve(dirname(configPath), config.vite);\n const vite = await loadApplicationVite(viteConfigPath);\n let runningPromise: Promise<RunningServe>;\n if (flags.production) {\n if (!config.productionWebAssetsDir) {\n throw new Error(\n \"Overmux config must define `productionWebAssetsDir` for production serving\",\n );\n }\n runningPromise = startProductionServer({\n configPath,\n host: flags.host,\n noBuild: flags.noBuild ?? false,\n port: flags.port,\n productionWebAssetsDir: resolve(\n dirname(configPath),\n config.productionWebAssetsDir,\n ),\n vite,\n viteConfigPath,\n });\n } else {\n runningPromise = startDevelopmentServer({\n configPath,\n host: flags.host,\n port: flags.port,\n shouldWatch: config.watch ?? true,\n vite,\n viteConfigPath,\n });\n }\n const unregisterShutdown = registerShutdown(runningPromise, process);\n let running: RunningServe | undefined;\n try {\n running = await runningPromise;\n process.stdout.write(\n `Overmux listening on ${config.auth.origins?.[0] ?? running.url}\\n`,\n );\n await announceServeLogin({ createLogin, port: running.port, process });\n } catch (cause) {\n unregisterShutdown();\n await running?.close().catch(() => undefined);\n throw cause;\n }\n};\n\nfunction runServeCommand(this: CliCommandContext, flags: ServeFlags) {\n return runServe({\n environment: this.environment,\n flags,\n process: this.process,\n });\n}\n\nexport const serveCommand = buildCommand({\n func: runServeCommand,\n parameters: {\n aliases: { c: \"config\" },\n flags: {\n config: {\n brief: \"Configuration file\",\n default: getDefaultConfigPath(),\n kind: \"parsed\",\n parse: String,\n placeholder: \"path\",\n },\n host: {\n brief: \"Override the public listener host\",\n kind: \"parsed\",\n optional: true,\n parse: String,\n placeholder: \"host\",\n },\n login: {\n brief: \"Create a browser login grant after startup\",\n kind: \"boolean\",\n optional: true,\n withNegated: false,\n },\n noBuild: {\n brief: \"Serve existing production assets without building\",\n kind: \"boolean\",\n optional: true,\n },\n noLogin: {\n brief: \"Do not create a browser login grant after startup\",\n kind: \"boolean\",\n optional: true,\n withNegated: false,\n },\n port: {\n brief: \"Override the public listener port\",\n kind: \"parsed\",\n optional: true,\n parse: (value) => {\n const port = parsePort(value);\n if (port instanceof Error) {\n throw port;\n }\n return port;\n },\n placeholder: \"port\",\n },\n production: {\n brief: \"Build and serve the production web application\",\n kind: \"boolean\",\n optional: true,\n },\n },\n },\n docs: {\n brief: \"Serve the Overmux web application\",\n fullDescription:\n \"Starts private Vite behind the authenticated Overmux gateway, or builds and serves production assets with --production.\",\n },\n});\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar src_exports = {};\n__export(src_exports, {\n KNOWN_AGENTS: () => KNOWN_AGENTS,\n determineAgent: () => determineAgent\n});\nmodule.exports = __toCommonJS(src_exports);\nvar import_promises = require(\"node:fs/promises\");\nvar import_node_fs = require(\"node:fs\");\nconst DEVIN_LOCAL_PATH = \"/opt/.devin\";\nconst CURSOR = \"cursor\";\nconst CURSOR_CLI = \"cursor-cli\";\nconst CLAUDE = \"claude\";\nconst COWORK = \"cowork\";\nconst DEVIN = \"devin\";\nconst REPLIT = \"replit\";\nconst GEMINI = \"gemini\";\nconst CODEX = \"codex\";\nconst ANTIGRAVITY = \"antigravity\";\nconst AUGMENT_CLI = \"augment-cli\";\nconst OPENCODE = \"opencode\";\nconst GITHUB_COPILOT = \"github-copilot\";\nconst GITHUB_COPILOT_CLI = \"github-copilot-cli\";\nconst V0 = \"v0\";\nconst KNOWN_AGENTS = {\n CURSOR,\n CURSOR_CLI,\n CLAUDE,\n COWORK,\n DEVIN,\n REPLIT,\n GEMINI,\n CODEX,\n ANTIGRAVITY,\n AUGMENT_CLI,\n OPENCODE,\n GITHUB_COPILOT,\n V0\n};\nasync function determineAgent() {\n if (process.env.AI_AGENT) {\n const name = process.env.AI_AGENT.trim();\n if (name) {\n if (name === GITHUB_COPILOT || name === GITHUB_COPILOT_CLI) {\n return {\n isAgent: true,\n agent: { name: GITHUB_COPILOT }\n };\n }\n if (name === V0) {\n return {\n isAgent: true,\n agent: { name: V0 }\n };\n }\n return {\n isAgent: true,\n agent: { name }\n };\n }\n }\n if (process.env.CURSOR_TRACE_ID) {\n return { isAgent: true, agent: { name: CURSOR } };\n }\n if (process.env.CURSOR_AGENT || process.env.CURSOR_EXTENSION_HOST_ROLE === \"agent-exec\") {\n return { isAgent: true, agent: { name: CURSOR_CLI } };\n }\n if (process.env.GEMINI_CLI) {\n return { isAgent: true, agent: { name: GEMINI } };\n }\n if (process.env.CODEX_SANDBOX || process.env.CODEX_CI || process.env.CODEX_THREAD_ID) {\n return { isAgent: true, agent: { name: CODEX } };\n }\n if (process.env.ANTIGRAVITY_AGENT) {\n return { isAgent: true, agent: { name: ANTIGRAVITY } };\n }\n if (process.env.AUGMENT_AGENT) {\n return { isAgent: true, agent: { name: AUGMENT_CLI } };\n }\n if (process.env.OPENCODE_CLIENT) {\n return { isAgent: true, agent: { name: OPENCODE } };\n }\n if (process.env.CLAUDECODE || process.env.CLAUDE_CODE) {\n if (process.env.CLAUDE_CODE_IS_COWORK) {\n return { isAgent: true, agent: { name: COWORK } };\n }\n return { isAgent: true, agent: { name: CLAUDE } };\n }\n if (process.env.REPL_ID) {\n return { isAgent: true, agent: { name: REPLIT } };\n }\n if (process.env.COPILOT_MODEL || process.env.COPILOT_ALLOW_ALL || process.env.COPILOT_GITHUB_TOKEN) {\n return { isAgent: true, agent: { name: GITHUB_COPILOT } };\n }\n try {\n await (0, import_promises.access)(DEVIN_LOCAL_PATH, import_node_fs.constants.F_OK);\n return { isAgent: true, agent: { name: DEVIN } };\n } catch (_error) {\n }\n return { isAgent: false, agent: void 0 };\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n KNOWN_AGENTS,\n determineAgent\n});\n","[\n {\n \"name\": \"Agola CI\",\n \"constant\": \"AGOLA\",\n \"env\": \"AGOLA_GIT_REF\",\n \"pr\": \"AGOLA_PULL_REQUEST_ID\"\n },\n {\n \"name\": \"Alpic\",\n \"constant\": \"ALPIC\",\n \"env\": \"ALPIC_HOST\"\n },\n {\n \"name\": \"Appcircle\",\n \"constant\": \"APPCIRCLE\",\n \"env\": \"AC_APPCIRCLE\",\n \"pr\": {\n \"env\": \"AC_GIT_PR\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"AppVeyor\",\n \"constant\": \"APPVEYOR\",\n \"env\": \"APPVEYOR\",\n \"pr\": \"APPVEYOR_PULL_REQUEST_NUMBER\"\n },\n {\n \"name\": \"AWS CodeBuild\",\n \"constant\": \"CODEBUILD\",\n \"env\": \"CODEBUILD_BUILD_ARN\",\n \"pr\": {\n \"env\": \"CODEBUILD_WEBHOOK_EVENT\",\n \"any\": [\n \"PULL_REQUEST_CREATED\",\n \"PULL_REQUEST_UPDATED\",\n \"PULL_REQUEST_REOPENED\"\n ]\n }\n },\n {\n \"name\": \"Azure Pipelines\",\n \"constant\": \"AZURE_PIPELINES\",\n \"env\": \"TF_BUILD\",\n \"pr\": {\n \"BUILD_REASON\": \"PullRequest\"\n }\n },\n {\n \"name\": \"Bamboo\",\n \"constant\": \"BAMBOO\",\n \"env\": \"bamboo_planKey\"\n },\n {\n \"name\": \"Bitbucket Pipelines\",\n \"constant\": \"BITBUCKET\",\n \"env\": \"BITBUCKET_COMMIT\",\n \"pr\": \"BITBUCKET_PR_ID\"\n },\n {\n \"name\": \"Bitrise\",\n \"constant\": \"BITRISE\",\n \"env\": \"BITRISE_IO\",\n \"pr\": \"BITRISE_PULL_REQUEST\"\n },\n {\n \"name\": \"Buddy\",\n \"constant\": \"BUDDY\",\n \"env\": \"BUDDY_WORKSPACE_ID\",\n \"pr\": \"BUDDY_EXECUTION_PULL_REQUEST_ID\"\n },\n {\n \"name\": \"Buildkite\",\n \"constant\": \"BUILDKITE\",\n \"env\": \"BUILDKITE\",\n \"pr\": {\n \"env\": \"BUILDKITE_PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"CircleCI\",\n \"constant\": \"CIRCLE\",\n \"env\": \"CIRCLECI\",\n \"pr\": \"CIRCLE_PULL_REQUEST\"\n },\n {\n \"name\": \"Cirrus CI\",\n \"constant\": \"CIRRUS\",\n \"env\": \"CIRRUS_CI\",\n \"pr\": \"CIRRUS_PR\"\n },\n {\n \"name\": \"Cloudflare Pages\",\n \"constant\": \"CLOUDFLARE_PAGES\",\n \"env\": \"CF_PAGES\"\n },\n {\n \"name\": \"Cloudflare Workers\",\n \"constant\": \"CLOUDFLARE_WORKERS\",\n \"env\": \"WORKERS_CI\"\n },\n {\n \"name\": \"Codefresh\",\n \"constant\": \"CODEFRESH\",\n \"env\": \"CF_BUILD_ID\",\n \"pr\": {\n \"any\": [\n \"CF_PULL_REQUEST_NUMBER\",\n \"CF_PULL_REQUEST_ID\"\n ]\n }\n },\n {\n \"name\": \"Codemagic\",\n \"constant\": \"CODEMAGIC\",\n \"env\": \"CM_BUILD_ID\",\n \"pr\": \"CM_PULL_REQUEST\"\n },\n {\n \"name\": \"Codeship\",\n \"constant\": \"CODESHIP\",\n \"env\": {\n \"CI_NAME\": \"codeship\"\n }\n },\n {\n \"name\": \"Drone\",\n \"constant\": \"DRONE\",\n \"env\": \"DRONE\",\n \"pr\": {\n \"DRONE_BUILD_EVENT\": \"pull_request\"\n }\n },\n {\n \"name\": \"dsari\",\n \"constant\": \"DSARI\",\n \"env\": \"DSARI\"\n },\n {\n \"name\": \"Earthly\",\n \"constant\": \"EARTHLY\",\n \"env\": \"EARTHLY_CI\"\n },\n {\n \"name\": \"Expo Application Services\",\n \"constant\": \"EAS\",\n \"env\": \"EAS_BUILD\"\n },\n {\n \"name\": \"Gerrit\",\n \"constant\": \"GERRIT\",\n \"env\": \"GERRIT_PROJECT\"\n },\n {\n \"name\": \"Gitea Actions\",\n \"constant\": \"GITEA_ACTIONS\",\n \"env\": \"GITEA_ACTIONS\"\n },\n {\n \"name\": \"GitHub Actions\",\n \"constant\": \"GITHUB_ACTIONS\",\n \"env\": \"GITHUB_ACTIONS\",\n \"pr\": {\n \"GITHUB_EVENT_NAME\": \"pull_request\"\n }\n },\n {\n \"name\": \"GitLab CI\",\n \"constant\": \"GITLAB\",\n \"env\": \"GITLAB_CI\",\n \"pr\": \"CI_MERGE_REQUEST_ID\"\n },\n {\n \"name\": \"GoCD\",\n \"constant\": \"GOCD\",\n \"env\": \"GO_PIPELINE_LABEL\"\n },\n {\n \"name\": \"Google Cloud Build\",\n \"constant\": \"GOOGLE_CLOUD_BUILD\",\n \"env\": \"BUILDER_OUTPUT\"\n },\n {\n \"name\": \"Harness CI\",\n \"constant\": \"HARNESS\",\n \"env\": \"HARNESS_BUILD_ID\"\n },\n {\n \"name\": \"Heroku\",\n \"constant\": \"HEROKU\",\n \"env\": {\n \"env\": \"NODE\",\n \"includes\": \"/app/.heroku/node/bin/node\"\n }\n },\n {\n \"name\": \"Hudson\",\n \"constant\": \"HUDSON\",\n \"env\": \"HUDSON_URL\"\n },\n {\n \"name\": \"Jenkins\",\n \"constant\": \"JENKINS\",\n \"env\": [\n \"JENKINS_URL\",\n \"BUILD_ID\"\n ],\n \"pr\": {\n \"any\": [\n \"ghprbPullId\",\n \"CHANGE_ID\"\n ]\n }\n },\n {\n \"name\": \"LayerCI\",\n \"constant\": \"LAYERCI\",\n \"env\": \"LAYERCI\",\n \"pr\": \"LAYERCI_PULL_REQUEST\"\n },\n {\n \"name\": \"Magnum CI\",\n \"constant\": \"MAGNUM\",\n \"env\": \"MAGNUM\"\n },\n {\n \"name\": \"Netlify CI\",\n \"constant\": \"NETLIFY\",\n \"env\": \"NETLIFY\",\n \"pr\": {\n \"env\": \"PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"Nevercode\",\n \"constant\": \"NEVERCODE\",\n \"env\": \"NEVERCODE\",\n \"pr\": {\n \"env\": \"NEVERCODE_PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"Prow\",\n \"constant\": \"PROW\",\n \"env\": \"PROW_JOB_ID\"\n },\n {\n \"name\": \"ReleaseHub\",\n \"constant\": \"RELEASEHUB\",\n \"env\": \"RELEASE_BUILD_ID\"\n },\n {\n \"name\": \"Render\",\n \"constant\": \"RENDER\",\n \"env\": \"RENDER\",\n \"pr\": {\n \"IS_PULL_REQUEST\": \"true\"\n }\n },\n {\n \"name\": \"Sail CI\",\n \"constant\": \"SAIL\",\n \"env\": \"SAILCI\",\n \"pr\": \"SAIL_PULL_REQUEST_NUMBER\"\n },\n {\n \"name\": \"Screwdriver\",\n \"constant\": \"SCREWDRIVER\",\n \"env\": \"SCREWDRIVER\",\n \"pr\": {\n \"env\": \"SD_PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"Semaphore\",\n \"constant\": \"SEMAPHORE\",\n \"env\": \"SEMAPHORE\",\n \"pr\": \"PULL_REQUEST_NUMBER\"\n },\n {\n \"name\": \"Sourcehut\",\n \"constant\": \"SOURCEHUT\",\n \"env\": {\n \"CI_NAME\": \"sourcehut\"\n }\n },\n {\n \"name\": \"Strider CD\",\n \"constant\": \"STRIDER\",\n \"env\": \"STRIDER\"\n },\n {\n \"name\": \"TaskCluster\",\n \"constant\": \"TASKCLUSTER\",\n \"env\": [\n \"TASK_ID\",\n \"RUN_ID\"\n ]\n },\n {\n \"name\": \"TeamCity\",\n \"constant\": \"TEAMCITY\",\n \"env\": \"TEAMCITY_VERSION\"\n },\n {\n \"name\": \"Travis CI\",\n \"constant\": \"TRAVIS\",\n \"env\": \"TRAVIS\",\n \"pr\": {\n \"env\": \"TRAVIS_PULL_REQUEST\",\n \"ne\": \"false\"\n }\n },\n {\n \"name\": \"Vela\",\n \"constant\": \"VELA\",\n \"env\": \"VELA\",\n \"pr\": {\n \"VELA_PULL_REQUEST\": \"1\"\n }\n },\n {\n \"name\": \"Vercel\",\n \"constant\": \"VERCEL\",\n \"env\": {\n \"any\": [\n \"NOW_BUILDER\",\n \"VERCEL\"\n ]\n },\n \"pr\": \"VERCEL_GIT_PULL_REQUEST_ID\"\n },\n {\n \"name\": \"Visual Studio App Center\",\n \"constant\": \"APPCENTER\",\n \"env\": \"APPCENTER_BUILD_ID\"\n },\n {\n \"name\": \"Woodpecker\",\n \"constant\": \"WOODPECKER\",\n \"env\": {\n \"CI\": \"woodpecker\"\n },\n \"pr\": {\n \"CI_BUILD_EVENT\": \"pull_request\"\n }\n },\n {\n \"name\": \"Xcode Cloud\",\n \"constant\": \"XCODE_CLOUD\",\n \"env\": \"CI_XCODE_PROJECT\",\n \"pr\": \"CI_PULL_REQUEST_NUMBER\"\n },\n {\n \"name\": \"Xcode Server\",\n \"constant\": \"XCODE_SERVER\",\n \"env\": \"XCS\"\n }\n]\n","'use strict'\n\nconst vendors = require('./vendors.json')\n\nconst env = process.env\n\n// Used for testing only\nObject.defineProperty(exports, '_vendors', {\n value: vendors.map(function (v) {\n return v.constant\n })\n})\n\nexports.name = null\nexports.isPR = null\nexports.id = null\n\nif (env.CI !== 'false') {\n vendors.forEach(function (vendor) {\n const envs = Array.isArray(vendor.env) ? vendor.env : [vendor.env]\n const isCI = envs.every(function (obj) {\n return checkEnv(obj)\n })\n\n exports[vendor.constant] = isCI\n\n if (!isCI) {\n return\n }\n\n exports.name = vendor.name\n exports.isPR = checkPR(vendor)\n exports.id = vendor.constant\n })\n}\n\nexports.isCI = !!(\n env.CI !== 'false' && // Bypass all checks if CI env is explicitly set to 'false'\n (env.BUILD_ID || // Jenkins, Cloudbees\n env.BUILD_NUMBER || // Jenkins, TeamCity\n env.CI || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari, Cloudflare Pages/Workers\n env.CI_APP_ID || // Appflow\n env.CI_BUILD_ID || // Appflow\n env.CI_BUILD_NUMBER || // Appflow\n env.CI_NAME || // Codeship and others\n env.CONTINUOUS_INTEGRATION || // Travis CI, Cirrus CI\n env.RUN_ID || // TaskCluster, dsari\n exports.name ||\n false)\n)\n\nfunction checkEnv (obj) {\n // \"env\": \"CIRRUS\"\n if (typeof obj === 'string') return !!env[obj]\n\n // \"env\": { \"env\": \"NODE\", \"includes\": \"/app/.heroku/node/bin/node\" }\n if ('env' in obj) {\n // Currently there are no other types, uncomment when there are\n // if ('includes' in obj) {\n return env[obj.env] && env[obj.env].includes(obj.includes)\n // }\n }\n\n if ('any' in obj) {\n return obj.any.some(function (k) {\n return !!env[k]\n })\n }\n\n return Object.keys(obj).every(function (k) {\n return env[k] === obj[k]\n })\n}\n\nfunction checkPR (vendor) {\n switch (typeof vendor.pr) {\n case 'string':\n // \"pr\": \"CIRRUS_PR\"\n return !!env[vendor.pr]\n case 'object':\n if ('env' in vendor.pr) {\n if ('any' in vendor.pr) {\n // \"pr\": { \"env\": \"CODEBUILD_WEBHOOK_EVENT\", \"any\": [\"PULL_REQUEST_CREATED\", \"PULL_REQUEST_UPDATED\"] }\n return vendor.pr.any.some(function (key) {\n return env[vendor.pr.env] === key\n })\n } else {\n // \"pr\": { \"env\": \"BUILDKITE_PULL_REQUEST\", \"ne\": \"false\" }\n return vendor.pr.env in env && env[vendor.pr.env] !== vendor.pr.ne\n }\n } else if ('any' in vendor.pr) {\n // \"pr\": { \"any\": [\"ghprbPullId\", \"CHANGE_ID\"] }\n return vendor.pr.any.some(function (key) {\n return !!env[key]\n })\n } else {\n // \"pr\": { \"DRONE_BUILD_EVENT\": \"pull_request\" }\n return checkEnv(vendor.pr)\n }\n default:\n // PR detection not supported for this vendor\n return null\n }\n}\n","import type { CommandContext } from \"@stricli/core\";\nimport { determineAgent } from \"@vercel/detect-agent\";\nimport * as ciInfo from \"ci-info\";\n\nexport type CliEnvironment = {\n readonly agent?: string;\n readonly isAgent: boolean;\n readonly isCI: boolean;\n readonly isHumanUser: boolean;\n readonly isInteractiveTerminal: boolean;\n};\n\nexport type CliCommandContext = CommandContext & {\n readonly environment: CliEnvironment;\n readonly process: NodeJS.Process;\n};\n\ntype CliEnvironmentSignals = {\n readonly agent?: string;\n readonly isAgent: boolean;\n readonly isCI: boolean;\n readonly stdinIsTTY?: boolean;\n readonly stdoutIsTTY?: boolean;\n};\n\nexport const classifyCliEnvironment = ({\n agent,\n isAgent,\n isCI,\n stdinIsTTY,\n stdoutIsTTY,\n}: CliEnvironmentSignals): CliEnvironment => {\n const isInteractiveTerminal = stdinIsTTY === true && stdoutIsTTY === true;\n return {\n agent,\n isAgent,\n isCI,\n isHumanUser: isInteractiveTerminal && !isCI && !isAgent,\n isInteractiveTerminal,\n };\n};\n\nexport const detectCliEnvironment = async (\n process: Pick<NodeJS.Process, \"stdin\" | \"stdout\"> = globalThis.process,\n): Promise<CliEnvironment> => {\n const detectedAgent = await determineAgent();\n return classifyCliEnvironment({\n agent: detectedAgent.agent?.name,\n isAgent: detectedAgent.isAgent,\n isCI: ciInfo.isCI,\n stdinIsTTY: process.stdin.isTTY,\n stdoutIsTTY: process.stdout.isTTY,\n });\n};\n","import {\n buildApplication,\n buildRouteMap,\n help,\n run,\n text_en,\n} from \"@stricli/core\";\n\nimport { createAiRoute } from \"./commands/ai\";\nimport { authRoute } from \"./commands/auth\";\nimport { checkCommand } from \"./commands/check\";\nimport { callCommand } from \"./commands/call\";\nimport { desktopRoute } from \"./commands/desktop\";\nimport { createDocsCommand, resolveInstalledDocsRoot } from \"./commands/docs\";\nimport { createInitCommand } from \"./commands/init\";\nimport { integrationCommand } from \"./commands/integration\";\nimport { serveCommand } from \"./commands/serve\";\nimport { detectCliEnvironment, type CliCommandContext } from \"./environment\";\n\nexport const createCliApp = (process = globalThis.process) =>\n buildApplication<CliCommandContext>(\n buildRouteMap<string, CliCommandContext>({\n docs: { brief: \"Initialize and manage Overmux applications\" },\n routes: {\n ai: createAiRoute(process),\n auth: authRoute,\n check: checkCommand,\n call: callCommand,\n desktop: desktopRoute,\n docs: createDocsCommand({\n docsRoot: resolveInstalledDocsRoot(import.meta.url),\n output: process.stdout,\n }),\n init: createInitCommand(process),\n integration: integrationCommand,\n serve: serveCommand,\n },\n }),\n {\n name: \"overmux\",\n localization: {\n text: {\n ...text_en,\n commandErrorResult: (error) => error.message,\n exceptionWhileRunningCommand: (error) =>\n error instanceof Error ? error.message : String(error),\n },\n },\n scanner: {\n allowArgumentEscapeSequence: true,\n caseStyle: \"allow-kebab-for-camel\",\n },\n },\n {\n help: help({\n brief: \"Show this help\",\n defaultForRouteMap: true,\n formatting: {\n caseStyle: \"convert-camel-to-kebab\",\n onlyRequiredInUsageLine: false,\n useAliasInUsageLine: false,\n },\n }),\n },\n );\n\nexport const runCli = async (\n args: readonly string[],\n process = globalThis.process,\n) => {\n const environment = await detectCliEnvironment(process);\n return run(createCliApp(process), args[0] === \"--\" ? args.slice(1) : args, {\n environment,\n process,\n });\n};\n","import { runCli } from \"./app\";\n\nawait runCli(process.argv.slice(2));\n"],"x_google_ignoreList":[0,39,40,41],"mappings":"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"}
|