@dennisrepa/elevate 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.tsx","../src/config.ts","../src/app.tsx","../src/adapters/npm/npm-discovery.ts","../src/adapters/npm/npm-registry.ts","../src/adapters/npm/npm-scanner.ts","../src/adapters/npm/npm-updater.ts","../src/adapters/npm/npm-verifier.ts","../src/adapters/npm/npm-strategy.ts","../src/adapters/maven/maven-discovery.ts","../src/adapters/maven/maven-registry.ts","../src/adapters/maven/maven-scanner.ts","../src/adapters/maven/maven-updater.ts","../src/adapters/maven/maven-verifier.ts","../src/adapters/maven/maven-strategy.ts","../src/domain/ecosystem-factory.ts","../src/i18n/index.ts","../src/i18n/locales/de.ts","../src/i18n/locales/en.ts","../src/hooks/use-workspaces.ts","../src/hooks/use-packages.ts","../src/hooks/use-updater.ts","../src/components/splash-screen.tsx","../src/theme.ts","../src/components/header.tsx","../src/components/workspace-bar.tsx","../src/components/tab-bar.tsx","../src/components/package-list.tsx","../src/components/package-row.tsx","../src/components/status-bar.tsx","../src/components/mascot.tsx","../src/components/controls-bar.tsx","../src/components/workspace-modal.tsx","../src/components/version-modal.tsx","../src/components/summary-view.tsx","../src/components/updating-view.tsx","../src/cli/parser.ts","../src/cli/command-modules.ts","../src/cli/command-scan.ts","../src/cli/command-versions.ts","../src/cli/command-update.ts","../src/cli/command-init.ts","../src/mcp/mcp-server.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * 🪶 Elevate — Universal Entry Point\n *\n * Dispatches to:\n * - Interactive TUI Dashboard (default when run without arguments)\n * - Headless CLI Subcommands (modules, scan, versions, update) with JSON output\n * - Model Context Protocol (MCP) Server for AI Agents\n */\n\nimport React from 'react';\nimport { render } from 'ink';\nimport { loadConfig } from './config.js';\nimport { App } from './app.js';\nimport { parseCliArgs, printCliHelp } from './cli/parser.js';\nimport { handleModulesCommand } from './cli/command-modules.js';\nimport { handleScanCommand } from './cli/command-scan.js';\nimport { handleVersionsCommand } from './cli/command-versions.js';\nimport { handleUpdateCommand } from './cli/command-update.js';\nimport { handleInitCommand } from './cli/command-init.js';\nimport { startMcpServer } from './mcp/mcp-server.js';\n\nasync function main() {\n const config = loadConfig();\n const options = parseCliArgs(process.argv.slice(2));\n\n // 1. Help\n if (options.subcommand === 'help' || options.help) {\n printCliHelp();\n process.exit(0);\n }\n\n // 2. Model Context Protocol (MCP) Server\n if (options.subcommand === 'mcp') {\n await startMcpServer(config);\n return;\n }\n\n // 3. Headless CLI Subcommands (for CI/CD & AI Agents)\n if (options.subcommand === 'modules') {\n const exitCode = await handleModulesCommand(options, config);\n process.exit(exitCode);\n }\n\n if (options.subcommand === 'scan') {\n const exitCode = await handleScanCommand(options, config);\n process.exit(exitCode);\n }\n\n if (options.subcommand === 'versions') {\n const exitCode = await handleVersionsCommand(options);\n process.exit(exitCode);\n }\n\n if (options.subcommand === 'update') {\n const exitCode = await handleUpdateCommand(options, config);\n process.exit(exitCode);\n }\n\n if (options.subcommand === 'init') {\n const exitCode = await handleInitCommand(options);\n process.exit(exitCode);\n }\n\n // 4. Interactive Terminal Dashboard (TUI) Mode\n if (process.stdout.isTTY) {\n const minCols = 140;\n const minRows = 38;\n const cols = Math.max(process.stdout.columns || 80, minCols);\n const rows = Math.max(process.stdout.rows || 24, minRows);\n process.stdout.write(`\\x1b[8;${rows};${cols}t`);\n }\n\n render(<App config={config} />);\n}\n\nmain().catch((err) => {\n console.error('❌ Elevate fatal error:', err);\n process.exit(1);\n});\n","/**\n * 🪶 Elevate — Konfiguration\n *\n * Erkennt automatisch das Monorepo-Root und lädt optional eine\n * `elevate.config.json` für projektspezifische Anpassungen.\n *\n * Ohne Konfigurationsdatei funktioniert Elevate universell in\n * jedem npm-Workspace-Monorepo mit sinnvollen Defaults.\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport type { Locale } from './i18n/types.js';\nimport type { ReleaseChannel } from './domain/models.js';\n\n/** Projektspezifische Elevate-Konfiguration */\nexport interface ElevateConfig {\n /** Automatisch erkanntes Monorepo-Wurzelverzeichnis */\n rootDir: string;\n /** Anzeigename im Header (optional) */\n author?: string;\n /** npm-Scopes, die beim Scan übersprungen werden (z. B. [\"@my-org\"]) */\n excludeScopes: string[];\n /** Optionales Skript, das nach `npm install` ausgeführt wird */\n postUpdateScript?: string;\n /** Label für das Post-Update-Skript in der UI */\n postUpdateLabel?: string;\n /** Bevorzugte Sprache ('de' | 'en' | 'auto') */\n locale?: Locale | 'auto';\n /** Release Channel ('stable' | 'all', Standard: 'stable') */\n channel: ReleaseChannel;\n}\n\n/**\n * Sucht das nächste übergeordnete Verzeichnis, das eine package.json\n * mit einem `workspaces`-Feld enthält (→ Monorepo-Root).\n */\nfunction findMonorepoRoot(startDir: string): string {\n let dir = resolve(startDir);\n\n while (true) {\n const pkgPath = join(dir, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.workspaces) return dir;\n } catch {\n /* ungültige JSON ignorieren */\n }\n }\n\n const parent = dirname(dir);\n if (parent === dir) break; // Dateisystem-Wurzel erreicht\n dir = parent;\n }\n\n return startDir; // Fallback: Startverzeichnis\n}\n\n/**\n * Lädt die Elevate-Konfiguration:\n * 1. Erkennt das Monorepo-Root automatisch (aufwärts suchen)\n * 2. Liest optional `elevate.config.json` aus dem Root\n * 3. Setzt sinnvolle Defaults für fehlende Werte\n */\nexport function loadConfig(): ElevateConfig {\n const rootDir = findMonorepoRoot(process.cwd());\n\n const configPath = join(rootDir, 'elevate.config.json');\n let file: Record<string, unknown> = {};\n\n if (existsSync(configPath)) {\n try {\n file = JSON.parse(readFileSync(configPath, 'utf8'));\n } catch {\n /* ungültige JSON ignorieren */\n }\n }\n\n return {\n rootDir,\n author: typeof file.author === 'string' ? file.author : undefined,\n excludeScopes: Array.isArray(file.excludeScopes)\n ? (file.excludeScopes as string[])\n : [],\n postUpdateScript:\n typeof file.postUpdateScript === 'string'\n ? file.postUpdateScript\n : undefined,\n postUpdateLabel:\n typeof file.postUpdateLabel === 'string'\n ? file.postUpdateLabel\n : typeof file.postUpdateScript === 'string'\n ? file.postUpdateScript\n : undefined,\n locale:\n file.locale === 'de' || file.locale === 'en'\n ? file.locale\n : undefined,\n channel: file.channel === 'all' ? 'all' : 'stable',\n };\n}\n","/**\n * 🪶 Elevate — Hauptkomponente (App-Shell, Polyglot & Clean Architecture)\n *\n * Orchestriert Ökosystem-Strategien (npm / Maven), Views, Hooks,\n * i18n, Theme und Keyboard-Navigation nach Domain-Driven Design Prinzipien.\n */\n\nimport React, { useState, useMemo, useCallback } from 'react';\nimport { Box, useInput, useApp } from 'ink';\nimport type { View, Ecosystem, UpdateCandidate } from './domain/models.js';\nimport type { ElevateConfig } from './config.js';\nimport { EcosystemFactory } from './domain/ecosystem-factory.js';\nimport { useI18n, resolveInitialLocale } from './i18n/index.js';\n\n// Domain-Driven Hooks\nimport { useWorkspaces } from './hooks/use-workspaces.js';\nimport { usePackages } from './hooks/use-packages.js';\nimport { useUpdater } from './hooks/use-updater.js';\n\n// Components\nimport { SplashScreen } from './components/splash-screen.js';\nimport { Header } from './components/header.js';\nimport { WorkspaceBar } from './components/workspace-bar.js';\nimport { TabBar } from './components/tab-bar.js';\nimport { PackageList } from './components/package-list.js';\nimport { StatusBar } from './components/status-bar.js';\nimport { ControlsBar } from './components/controls-bar.js';\nimport { WorkspaceModal } from './components/workspace-modal.js';\nimport { VersionModal } from './components/version-modal.js';\nimport { SummaryView } from './components/summary-view.js';\nimport { UpdatingView } from './components/updating-view.js';\n\ninterface AppProps {\n config: ElevateConfig;\n}\n\nexport const App: React.FC<AppProps> = ({ config }) => {\n const { exit } = useApp();\n const [view, setView] = useState<View>('splash');\n const [modalIndex, setModalIndex] = useState(0);\n const [versionPickerCandidate, setVersionPickerCandidate] = useState<UpdateCandidate | null>(null);\n\n // 1. Ökosystem-Auswahl (npm ⇄ Maven via Strategy Pattern)\n const [ecosystem, setEcosystem] = useState<Ecosystem>('npm');\n const strategy = useMemo(() => EcosystemFactory.getStrategy(ecosystem), [ecosystem]);\n\n const nextEcosystem: Ecosystem = ecosystem === 'npm' ? 'maven' : 'npm';\n const nextStrategy = useMemo(() => EcosystemFactory.getStrategy(nextEcosystem), [nextEcosystem]);\n\n const toggleEcosystem = useCallback(() => {\n setEcosystem((prev) => (prev === 'npm' ? 'maven' : 'npm'));\n }, []);\n\n // 2. i18n Hook\n const { locale, toggleLocale, t } = useI18n(resolveInitialLocale(config.locale));\n\n // 3. Domain Hooks (injizieren die aktuelle Strategie)\n const ws = useWorkspaces(strategy, config.rootDir);\n const pkg = usePackages(\n strategy,\n ws.active,\n ws.internalIds,\n config.excludeScopes,\n config.channel,\n );\n const updater = useUpdater(strategy, config.rootDir, setView, {\n script: config.postUpdateScript,\n label: config.postUpdateLabel,\n });\n\n // 4. Maskottchen-Zustand\n const mascotState =\n view === 'updating'\n ? 'updating'\n : pkg.loading\n ? 'scanning'\n : view === 'summary'\n ? 'success'\n : 'idle';\n\n // 5. Tastatur-Steuerung\n useInput((input, key) => {\n // Wenn das Version-Modal aktiv ist, übernimmt useInput in VersionModal die Steuerung\n if (view === 'version_modal') {\n return;\n }\n\n // Global: Beenden\n if (input === 'q' && view !== 'updating') {\n exit();\n return;\n }\n\n // Splash Screen: Beliebige Taste überspringt direkt ins Dashboard\n if (view === 'splash') {\n if (key.return || input === ' ') {\n setView('dashboard');\n pkg.scan();\n }\n return;\n }\n\n // Global: Sprache umschalten ([L])\n if ((input === 'l' || input === 'L') && view !== 'updating') {\n toggleLocale();\n return;\n }\n\n // ── Workspace-Modal ──\n if (view === 'workspace_modal') {\n if (key.upArrow || input === 'k') {\n setModalIndex((i) => Math.max(0, i - 1));\n } else if (key.downArrow || input === 'j') {\n setModalIndex((i) => Math.min(ws.modules.length - 1, i + 1));\n } else if (key.return) {\n ws.setActiveIndex(modalIndex);\n setView('dashboard');\n pkg.scan();\n } else if (key.escape || input === 'w') {\n setView('dashboard');\n }\n return;\n }\n\n // ── Summary ──\n if (view === 'summary') {\n if (key.return || input === 'd') {\n setView('dashboard');\n pkg.scan();\n }\n return;\n }\n\n // ── Dashboard ──\n if (view === 'dashboard') {\n // Ökosystem umschalten ([E])\n if (input === 'e' || input === 'E') {\n toggleEcosystem();\n return;\n }\n\n // Modul auswählen ([W])\n if (input === 'w') {\n setModalIndex(ws.activeIndex);\n setView('workspace_modal');\n } else if (input === 'v' || input === 'V') {\n // Version gezielt heraussuchen ([V])\n const focused = pkg.visible[pkg.cursor];\n if (focused) {\n setVersionPickerCandidate(focused);\n setView('version_modal');\n }\n } else if (key.tab) {\n pkg.cycleTab();\n } else if (input === '1') {\n pkg.switchTab('all');\n } else if (input === '2') {\n pkg.switchTab('prod');\n } else if (input === '3') {\n pkg.switchTab('dev');\n } else if (key.upArrow || input === 'k') {\n pkg.setCursor((i) => Math.max(0, i - 1));\n } else if (key.downArrow || input === 'j') {\n pkg.setCursor((i) => Math.min(pkg.visible.length - 1, i + 1));\n } else if (input === ' ') {\n const focused = pkg.visible[pkg.cursor];\n if (focused) pkg.togglePackage(focused.coordinate.identifier);\n } else if (input === 'a') {\n pkg.toggleAllVisible();\n } else if (input === 'r') {\n pkg.scan();\n } else if (input === 'u' && pkg.counts.selectedCount > 0 && !pkg.loading) {\n const selected = pkg.packages.filter((p) => p.selected);\n updater.run(ws.active, selected, t);\n }\n }\n });\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n {/* 1. Initialer Splash Screen (fest auf Englisch) */}\n {view === 'splash' && (\n <SplashScreen\n onComplete={() => {\n setView('dashboard');\n pkg.scan();\n }}\n author={config.author}\n />\n )}\n\n {/* 2. Dashboard-Ansichten */}\n {view !== 'splash' && (\n <>\n <Header\n author={config.author}\n t={t}\n currentLocale={locale}\n strategy={strategy}\n nextStrategyName={`${nextStrategy.icon} ${nextStrategy.displayName}`}\n channel={config.channel}\n />\n\n {view === 'workspace_modal' && (\n <WorkspaceModal\n modules={ws.modules}\n focusedIndex={modalIndex}\n strategy={strategy}\n t={t}\n />\n )}\n\n {view === 'version_modal' && versionPickerCandidate && (\n <VersionModal\n candidate={versionPickerCandidate}\n strategy={strategy}\n t={t}\n onSelect={(chosenVersion) => {\n pkg.setCustomVersion(versionPickerCandidate.coordinate.identifier, chosenVersion);\n setView('dashboard');\n setVersionPickerCandidate(null);\n }}\n onCancel={() => {\n setView('dashboard');\n setVersionPickerCandidate(null);\n }}\n />\n )}\n\n {view === 'updating' && (\n <UpdatingView step={updater.step} t={t} ecosystem={strategy.ecosystem} />\n )}\n\n {view === 'summary' && updater.summary && (\n <SummaryView\n summary={updater.summary}\n module={ws.active}\n strategy={strategy}\n t={t}\n />\n )}\n\n {view === 'dashboard' && (\n <>\n <WorkspaceBar\n module={ws.active}\n excludeScopes={config.excludeScopes}\n strategy={strategy}\n t={t}\n />\n <TabBar\n activeTab={pkg.activeTab}\n counts={pkg.counts}\n strategy={strategy}\n t={t}\n />\n <PackageList\n items={pkg.visible}\n cursor={pkg.cursor}\n loading={pkg.loading}\n t={t}\n />\n <StatusBar\n counts={pkg.counts}\n visibleCount={pkg.visible.length}\n t={t}\n mascotState={mascotState}\n ecosystem={strategy.ecosystem}\n />\n <ControlsBar t={t} />\n </>\n )}\n </>\n )}\n </Box>\n );\n};\n","import { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { ModuleDiscoveryPort } from '../../domain/ports.js';\nimport type { ProjectModule } from '../../domain/models.js';\n\nfunction readJson(filePath: string): any {\n try {\n return JSON.parse(readFileSync(filePath, 'utf8'));\n } catch {\n return null;\n }\n}\n\n/** Adapter zur Erkennung von npm Workspaces anhand der Root package.json */\nexport class NpmModuleDiscoveryAdapter implements ModuleDiscoveryPort {\n async discover(rootDir: string): Promise<ProjectModule[]> {\n const rootPkg = readJson(join(rootDir, 'package.json'));\n\n const modules: ProjectModule[] = [\n {\n id: rootPkg?.name ?? 'root',\n name: rootPkg?.name ?? 'Root Workspace (npm)',\n path: rootDir,\n relPath: 'Root',\n ecosystem: 'npm',\n isRoot: true,\n },\n ];\n\n if (!rootPkg?.workspaces) return modules;\n\n const patterns: string[] = Array.isArray(rootPkg.workspaces)\n ? rootPkg.workspaces\n : [];\n\n for (const pattern of patterns) {\n if (pattern.endsWith('/*')) {\n const parentDir = join(rootDir, pattern.slice(0, -2));\n if (!existsSync(parentDir)) continue;\n\n for (const entry of readdirSync(parentDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const pkgPath = join(parentDir, entry.name, 'package.json');\n if (!existsSync(pkgPath)) continue;\n\n const pkg = readJson(pkgPath);\n modules.push({\n id: pkg?.name ?? `${pattern.slice(0, -2)}/${entry.name}`,\n name: pkg?.name ?? `${pattern.slice(0, -2)}/${entry.name}`,\n path: join(parentDir, entry.name),\n relPath: `${pattern.slice(0, -2)}/${entry.name}`,\n ecosystem: 'npm',\n isRoot: false,\n });\n }\n } else {\n const explicitPath = join(rootDir, pattern);\n const pkgPath = join(explicitPath, 'package.json');\n if (!existsSync(pkgPath)) continue;\n\n const pkg = readJson(pkgPath);\n modules.push({\n id: pkg?.name ?? pattern,\n name: pkg?.name ?? pattern,\n path: explicitPath,\n relPath: pattern,\n ecosystem: 'npm',\n isRoot: false,\n });\n }\n }\n\n return modules;\n }\n}\n","import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport semver from 'semver';\nimport type { RegistryPort } from '../../domain/ports.js';\nimport type { DependencyCoordinate, ReleaseChannel } from '../../domain/models.js';\n\nconst execAsync = promisify(exec);\n\nexport class NpmRegistryAdapter implements RegistryPort {\n async getLatestVersion(\n coordinate: DependencyCoordinate,\n channel: ReleaseChannel = 'stable',\n ): Promise<string | null> {\n try {\n if (channel === 'stable') {\n // Fragt explizit das \"latest\" dist-tag ab (das standardmäßig für stabile Releases steht)\n const { stdout } = await execAsync(\n `npm view ${coordinate.identifier} \"dist-tags.latest\" --json`,\n { timeout: 15_000 },\n );\n const v = stdout.trim().replace(/^\"|\"$/g, '');\n if (v && semver.valid(v) && semver.prerelease(v) === null) {\n return v;\n }\n }\n\n // Fallback oder channel === 'all'\n const { stdout } = await execAsync(\n `npm view ${coordinate.identifier} version --json`,\n { timeout: 15_000 },\n );\n return stdout.trim().replace(/^\"|\"$/g, '');\n } catch {\n return null;\n }\n }\n\n /** Liefert alle veröffentlichten Versionen (neueste zuerst) */\n async getAllVersions(coordinate: DependencyCoordinate): Promise<string[]> {\n try {\n const { stdout } = await execAsync(\n `npm view ${coordinate.identifier} versions --json`,\n { timeout: 15_000 },\n );\n const parsed = JSON.parse(stdout.trim());\n const list: string[] = Array.isArray(parsed) ? parsed : [parsed];\n return list.map(String).reverse();\n } catch {\n return [];\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport semver from 'semver';\nimport type { DependencyReaderPort, RegistryPort } from '../../domain/ports.js';\nimport type { ProjectModule, UpdateCandidate, ReleaseChannel } from '../../domain/models.js';\n\nconst DIFF_ORDER: Record<string, number> = { major: 0, minor: 1, patch: 2 };\nconst CONCURRENCY = 6;\n\nasync function pooled<T, R>(items: T[], concurrency: number, fn: (item: T) => Promise<R>): Promise<R[]> {\n const results: Promise<R>[] = [];\n const executing: Promise<void>[] = [];\n\n for (const item of items) {\n const p = Promise.resolve().then(() => fn(item));\n results.push(p);\n\n if (concurrency <= items.length) {\n const slot: Promise<void> = p\n .then(() => void executing.splice(executing.indexOf(slot), 1))\n .catch(() => void executing.splice(executing.indexOf(slot), 1));\n executing.push(slot);\n if (executing.length >= concurrency) await Promise.race(executing);\n }\n }\n\n return Promise.all(results);\n}\n\nfunction matchesExcludedScope(name: string, excludeScopes: string[]): boolean {\n return excludeScopes.some((scope) => {\n const normalized = scope.endsWith('/') ? scope : `${scope}/`;\n return name.startsWith(normalized);\n });\n}\n\nexport class NpmDependencyAdapter implements DependencyReaderPort {\n constructor(private readonly registry: RegistryPort) {}\n\n async scan(\n module: ProjectModule,\n excludedScopes: string[],\n internalIds: Set<string>,\n channel: ReleaseChannel = 'stable',\n ): Promise<UpdateCandidate[]> {\n const pkgPath = join(module.path, 'package.json');\n let pkg: any;\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n } catch {\n return [];\n }\n\n const allDeps: Record<string, string> = {\n ...(pkg.dependencies ?? {}),\n ...(pkg.devDependencies ?? {}),\n };\n\n const entries = Object.entries(allDeps).filter(\n ([name]) => !internalIds.has(name) && !matchesExcludedScope(name, excludedScopes),\n );\n\n const candidates: UpdateCandidate[] = [];\n\n await pooled(entries, CONCURRENCY, async ([name, currentRange]) => {\n const latest = await this.registry.getLatestVersion(\n {\n identifier: name,\n artifact: name,\n ecosystem: 'npm',\n },\n channel,\n );\n if (!latest) return;\n\n const currentClean = semver.minVersion(currentRange)?.version;\n if (!currentClean || !semver.gt(latest, currentClean)) return;\n\n const diff = semver.diff(currentClean, latest) as 'patch' | 'minor' | 'major';\n const prefix = currentRange.startsWith('~')\n ? '~'\n : currentRange.startsWith('^')\n ? '^'\n : '';\n\n const prereleaseComponents = semver.prerelease(latest);\n const isPre = prereleaseComponents !== null;\n const preTag = isPre ? String(prereleaseComponents[0]).toUpperCase() : undefined;\n\n candidates.push({\n coordinate: {\n identifier: name,\n artifact: name,\n ecosystem: 'npm',\n },\n currentRange,\n currentClean,\n latest,\n newRange: `${prefix}${latest}`,\n diff,\n scope: pkg.devDependencies?.[name] ? 'dev' : 'prod',\n selected: diff !== 'major',\n isPreRelease: isPre,\n preReleaseTag: preTag,\n });\n });\n\n candidates.sort((a, b) => (DIFF_ORDER[a.diff] ?? 3) - (DIFF_ORDER[b.diff] ?? 3));\n return candidates;\n }\n}\n","import { writeFileSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { DependencyUpdaterPort } from '../../domain/ports.js';\nimport type { ProjectModule, UpdateCandidate, UpdateSummary } from '../../domain/models.js';\n\nconst execAsync = promisify(exec);\n\nexport class NpmUpdaterAdapter implements DependencyUpdaterPort {\n async applyUpdates(\n module: ProjectModule,\n rootDir: string,\n updates: UpdateCandidate[],\n onProgress: (stepMessage: string) => void,\n ): Promise<Pick<UpdateSummary, 'updatedCount' | 'auditMessage' | 'auditSeverity' | 'fundingMessage'>> {\n const pkgPath = join(module.path, 'package.json');\n let pkg: any;\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n } catch {\n throw new Error(`Konnte package.json in ${module.path} nicht lesen.`);\n }\n\n onProgress('Schreibe neue Versionen in package.json…');\n for (const item of updates) {\n const name = item.coordinate.artifact;\n if (pkg.dependencies?.[name]) {\n pkg.dependencies[name] = item.newRange;\n }\n if (pkg.devDependencies?.[name]) {\n pkg.devDependencies[name] = item.newRange;\n }\n }\n writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\\n', 'utf8');\n\n onProgress('Führe npm install aus (bitte kurz warten)…');\n let stdout = '';\n let stderr = '';\n try {\n const res = await execAsync('npm install', { cwd: rootDir });\n stdout = res.stdout;\n stderr = res.stderr;\n } catch (err: any) {\n stdout = err.stdout ?? '';\n stderr = err.stderr ?? err.message;\n }\n\n onProgress('Analysiere Sicherheitsaudit & Output…');\n const combined = stdout + '\\n' + stderr;\n const auditMatch = combined.match(/found (\\d+ vulnerabilit(?:y|ies).*)/i);\n const fundingMatch = combined.match(/(\\d+ packages? (?:is|are) looking for funding)/i);\n\n return {\n updatedCount: updates.length,\n auditMessage: auditMatch ? auditMatch[0] : 'Keine bekannten Schwachstellen gefunden.',\n auditSeverity: auditMatch ? 'warn' : 'clean',\n fundingMessage: fundingMatch ? fundingMatch[0] : undefined,\n };\n }\n}\n","import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { VerificationPort } from '../../domain/ports.js';\nimport type { ProjectModule } from '../../domain/models.js';\n\nconst execAsync = promisify(exec);\n\nexport class NpmVerificationAdapter implements VerificationPort {\n async verify(\n module: ProjectModule,\n rootDir: string,\n customScript?: string,\n customLabel?: string,\n ): Promise<{ status: 'clean' | 'warn'; details: string; label: string }> {\n const script = customScript || 'npm run check:versions';\n const label = customLabel || 'Workspace-Konsistenz (npm run check:versions)';\n\n try {\n const { stdout } = await execAsync(script, { cwd: rootDir });\n return {\n status: 'clean',\n details: stdout.trim() || 'Alle Workspace-Versionen sind konsistent.',\n label,\n };\n } catch (err: any) {\n return {\n status: 'warn',\n details: err.stdout || err.message,\n label,\n };\n }\n }\n}\n","import type { EcosystemStrategy, TabLabels } from '../../domain/ecosystem-strategy.js';\nimport type { Ecosystem } from '../../domain/models.js';\nimport { NpmModuleDiscoveryAdapter } from './npm-discovery.js';\nimport { NpmRegistryAdapter } from './npm-registry.js';\nimport { NpmDependencyAdapter } from './npm-scanner.js';\nimport { NpmUpdaterAdapter } from './npm-updater.js';\nimport { NpmVerificationAdapter } from './npm-verifier.js';\n\nexport class NpmEcosystemStrategy implements EcosystemStrategy {\n readonly ecosystem: Ecosystem = 'npm';\n readonly displayName = 'Node / npm';\n readonly icon = '📦';\n readonly manifestFile = 'package.json';\n\n readonly discovery = new NpmModuleDiscoveryAdapter();\n readonly registry = new NpmRegistryAdapter();\n readonly reader = new NpmDependencyAdapter(this.registry);\n readonly updater = new NpmUpdaterAdapter();\n readonly verifier = new NpmVerificationAdapter();\n\n getTabLabels(\n counts: { total: number; prodCount: number; devCount: number },\n t: any,\n ): TabLabels {\n return {\n all: t.tabs.all(counts.total),\n prod: t.tabs.dependencies(counts.prodCount),\n dev: t.tabs.devDependencies(counts.devCount),\n };\n }\n}\n","import { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport { join, relative } from 'node:path';\nimport type { ModuleDiscoveryPort } from '../../domain/ports.js';\nimport type { ProjectModule } from '../../domain/models.js';\n\nfunction extractPomInfo(pomPath: string): { name: string; id: string } | null {\n try {\n const xml = readFileSync(pomPath, 'utf8');\n\n // Extract parent groupId as fallback\n const parentMatch = xml.match(/<parent>([\\s\\S]*?)<\\/parent>/);\n let parentGroup = '';\n if (parentMatch) {\n const pg = parentMatch[1]!.match(/<groupId>([^<]+)<\\/groupId>/);\n if (pg) parentGroup = pg[1]!.trim();\n }\n\n // Strip <parent>, <dependencies>, <build> to get project-level tags\n const strippedXml = xml\n .replace(/<parent>[\\s\\S]*?<\\/parent>/, '')\n .replace(/<dependencies>[\\s\\S]*?<\\/dependencies>/, '')\n .replace(/<build>[\\s\\S]*?<\\/build>/, '');\n\n const artifactMatch = strippedXml.match(/<artifactId>([^<]+)<\\/artifactId>/);\n const groupMatch = strippedXml.match(/<groupId>([^<]+)<\\/groupId>/);\n const nameMatch = strippedXml.match(/<name>([^<]+)<\\/name>/);\n\n const artifact = artifactMatch ? artifactMatch[1]!.trim() : 'unbekannt';\n const group = groupMatch ? groupMatch[1]!.trim() : parentGroup;\n const name = nameMatch ? nameMatch[1]!.trim() : artifact;\n\n return {\n name: name || artifact,\n id: group ? `${group}:${artifact}` : artifact,\n };\n } catch {\n return null;\n }\n}\n\n/** Rekursives Suchen nach pom.xml Dateien */\nfunction findPomFiles(dir: string, depth: number = 0, maxDepth: number = 4): string[] {\n if (depth > maxDepth || !existsSync(dir)) return [];\n const results: string[] = [];\n\n try {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'target') {\n continue;\n }\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n const pomPath = join(fullPath, 'pom.xml');\n if (existsSync(pomPath)) {\n results.push(pomPath);\n }\n results.push(...findPomFiles(fullPath, depth + 1, maxDepth));\n }\n }\n } catch {\n /* ignorieren bei Lesefehlern */\n }\n\n return results;\n}\n\n/** Adapter zur Entdeckung aller Maven-Projekte im Monorepo */\nexport class MavenModuleDiscoveryAdapter implements ModuleDiscoveryPort {\n async discover(rootDir: string): Promise<ProjectModule[]> {\n const pomFiles = findPomFiles(rootDir);\n const modules: ProjectModule[] = [];\n const seenPaths = new Set<string>();\n\n for (const pomPath of pomFiles) {\n const moduleDir = pomPath.slice(0, -'/pom.xml'.length);\n if (seenPaths.has(moduleDir)) continue;\n seenPaths.add(moduleDir);\n\n const info = extractPomInfo(pomPath);\n if (!info) continue;\n\n const relPath = relative(rootDir, moduleDir).replace(/\\\\/g, '/');\n\n modules.push({\n id: info.id,\n name: info.name,\n path: moduleDir,\n relPath: relPath || 'Root',\n ecosystem: 'maven',\n isRoot: moduleDir === rootDir,\n });\n }\n\n // Nach relativem Pfad sortieren\n modules.sort((a, b) => a.relPath.localeCompare(b.relPath));\n return modules;\n }\n}\n","import type { RegistryPort } from '../../domain/ports.js';\nimport type { DependencyCoordinate, ReleaseChannel } from '../../domain/models.js';\n\n/** Prüft, ob eine Versionsbezeichnung ein Pre-Release (Alpha, Beta, RC, Milestone, Snapshot etc.) ist */\nexport function isPreReleaseVersion(version: string): boolean {\n return /[.-]?(alpha|beta|rc|cr|m\\d*|preview|milestone|snapshot|ea|dev|b\\d+)/i.test(version);\n}\n\n/** Extrahiert ein kurzes Tag für Vorabversionen (z. B. \"BETA\", \"RC\", \"MILESTONE\") */\nexport function extractPreReleaseTag(version: string): string | undefined {\n const match = version.match(/[.-]?(alpha|beta|rc|cr|m\\d*|preview|milestone|snapshot|ea|dev)/i);\n if (!match) return undefined;\n const tag = match[1]!.toUpperCase();\n if (tag.startsWith('M') && tag.length <= 3) return `M${tag.slice(1)}`;\n return tag;\n}\n\nexport class MavenRegistryAdapter implements RegistryPort {\n async getLatestVersion(\n coordinate: DependencyCoordinate,\n channel: ReleaseChannel = 'stable',\n ): Promise<string | null> {\n if (!coordinate.group || !coordinate.artifact) return null;\n\n const groupPath = coordinate.group.replace(/\\./g, '/');\n const url = `https://repo1.maven.org/maven2/${groupPath}/${coordinate.artifact}/maven-metadata.xml`;\n\n try {\n const response = await fetch(url, {\n headers: { 'User-Agent': 'Elevate-Dependency-Updater' },\n signal: AbortSignal.timeout(8000),\n });\n\n if (!response.ok) {\n return await this.fallbackSearch(coordinate.group, coordinate.artifact, channel);\n }\n\n const xml = await response.text();\n const allVersions = [...xml.matchAll(/<version>([^<]+)<\\/version>/g)].map((m) => m[1]!.trim());\n\n // 1. Channel = 'stable' -> Nur stabile Versionen berücksichtigen\n if (channel === 'stable') {\n const releaseMatch = xml.match(/<release>([^<]+)<\\/release>/);\n if (releaseMatch?.[1] && !isPreReleaseVersion(releaseMatch[1].trim())) {\n return releaseMatch[1].trim();\n }\n\n // Rückwärts durch alle Versionen suchen, um die neueste stabile zu finden\n for (let i = allVersions.length - 1; i >= 0; i--) {\n const v = allVersions[i]!;\n if (!isPreReleaseVersion(v)) {\n return v;\n }\n }\n }\n\n // 2. Channel = 'all' (oder kein stabiles Release gefunden)\n const releaseMatch = xml.match(/<release>([^<]+)<\\/release>/);\n if (releaseMatch?.[1]) return releaseMatch[1].trim();\n\n const latestMatch = xml.match(/<latest>([^<]+)<\\/latest>/);\n if (latestMatch?.[1]) return latestMatch[1].trim();\n\n if (allVersions.length > 0) {\n return allVersions[allVersions.length - 1]!;\n }\n\n return null;\n } catch {\n return null;\n }\n }\n\n private async fallbackSearch(\n group: string,\n artifact: string,\n channel: ReleaseChannel,\n ): Promise<string | null> {\n try {\n const query = `g:${encodeURIComponent(group)}+AND+a:${encodeURIComponent(artifact)}`;\n const url = `https://search.maven.org/solrsearch/select?q=${query}&rows=20&wt=json`;\n const res = await fetch(url, { signal: AbortSignal.timeout(8000) });\n if (!res.ok) return null;\n const data: any = await res.json();\n const docs = data?.response?.docs || [];\n\n if (docs.length === 0) return null;\n\n if (channel === 'stable') {\n for (const doc of docs) {\n const v = doc.v || doc.latestVersion;\n if (v && !isPreReleaseVersion(v)) return v;\n }\n }\n\n return docs[0]?.latestVersion || docs[0]?.v || null;\n } catch {\n return null;\n }\n }\n\n /** Liefert alle verfügbaren Versionen aus dem Maven-Repository (neueste zuerst) */\n async getAllVersions(coordinate: DependencyCoordinate): Promise<string[]> {\n if (!coordinate.group || !coordinate.artifact) return [];\n\n const groupPath = coordinate.group.replace(/\\./g, '/');\n const url = `https://repo1.maven.org/maven2/${groupPath}/${coordinate.artifact}/maven-metadata.xml`;\n\n try {\n const response = await fetch(url, {\n headers: { 'User-Agent': 'Elevate-Dependency-Updater' },\n signal: AbortSignal.timeout(8000),\n });\n\n if (!response.ok) {\n return await this.fallbackAllVersions(coordinate.group, coordinate.artifact);\n }\n\n const xml = await response.text();\n const allVersions = [...xml.matchAll(/<version>([^<]+)<\\/version>/g)].map(\n (m) => m[1]!.trim(),\n );\n\n if (allVersions.length > 0) {\n return allVersions.reverse();\n }\n\n return await this.fallbackAllVersions(coordinate.group, coordinate.artifact);\n } catch {\n return await this.fallbackAllVersions(coordinate.group, coordinate.artifact);\n }\n }\n\n private async fallbackAllVersions(\n group: string,\n artifact: string,\n ): Promise<string[]> {\n try {\n const query = `g:${encodeURIComponent(group)}+AND+a:${encodeURIComponent(artifact)}`;\n const url = `https://search.maven.org/solrsearch/select?q=${query}&rows=100&core=gav&wt=json`;\n const res = await fetch(url, { signal: AbortSignal.timeout(8000) });\n if (!res.ok) return [];\n const data: any = await res.json();\n const docs = data?.response?.docs || [];\n return docs.map((d: any) => d.v).filter(Boolean);\n } catch {\n return [];\n }\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport semver from 'semver';\nimport type { DependencyReaderPort, RegistryPort } from '../../domain/ports.js';\nimport type { ProjectModule, UpdateCandidate, ReleaseChannel } from '../../domain/models.js';\nimport { isPreReleaseVersion, extractPreReleaseTag } from './maven-registry.js';\n\nconst DIFF_ORDER: Record<string, number> = { major: 0, minor: 1, patch: 2 };\nconst CONCURRENCY = 6;\n\nasync function pooled<T, R>(items: T[], concurrency: number, fn: (item: T) => Promise<R>): Promise<R[]> {\n const results: Promise<R>[] = [];\n const executing: Promise<void>[] = [];\n\n for (const item of items) {\n const p = Promise.resolve().then(() => fn(item));\n results.push(p);\n\n if (concurrency <= items.length) {\n const slot: Promise<void> = p\n .then(() => void executing.splice(executing.indexOf(slot), 1))\n .catch(() => void executing.splice(executing.indexOf(slot), 1));\n executing.push(slot);\n if (executing.length >= concurrency) await Promise.race(executing);\n }\n }\n\n return Promise.all(results);\n}\n\n/** Bereinigt Java-Versionen (z. B. \"5.10.2\", \"1.71.0.Final\" -> \"5.10.2\") für semver */\nfunction cleanJavaVersion(v: string): string | null {\n const match = v.match(/^v?(\\d+\\.\\d+(?:\\.\\d+)?)/);\n if (!match) return null;\n return semver.coerce(match[1])?.version ?? null;\n}\n\ninterface RawMavenDep {\n group: string;\n artifact: string;\n rawVersion: string;\n scope: 'prod' | 'test';\n}\n\nexport class MavenDependencyAdapter implements DependencyReaderPort {\n constructor(private readonly registry: RegistryPort) {}\n\n async scan(\n module: ProjectModule,\n excludedScopes: string[],\n internalIds: Set<string>,\n channel: ReleaseChannel = 'stable',\n ): Promise<UpdateCandidate[]> {\n const pomPath = join(module.path, 'pom.xml');\n let xml = '';\n try {\n xml = readFileSync(pomPath, 'utf8');\n } catch {\n return [];\n }\n\n // 1. Properties extrahieren\n const properties = new Map<string, string>();\n const propBlockMatch = xml.match(/<properties>([\\s\\S]*?)<\\/properties>/);\n if (propBlockMatch?.[1]) {\n const propMatches = propBlockMatch[1].matchAll(/<([a-zA-Z0-9_.-]+)>([^<]+)<\\/\\1>/g);\n for (const m of propMatches) {\n properties.set(m[1]!.trim(), m[2]!.trim());\n }\n }\n\n // 2. Dependencies extrahieren (mit Deduplizierung nach identifier)\n const rawDeps: RawMavenDep[] = [];\n const seenCoordinates = new Set<string>();\n const depBlockMatches = xml.matchAll(/<dependency>([\\s\\S]*?)<\\/dependency>/g);\n\n for (const match of depBlockMatches) {\n const block = match[1]!;\n const groupMatch = block.match(/<groupId>([^<]+)<\\/groupId>/);\n const artifactMatch = block.match(/<artifactId>([^<]+)<\\/artifactId>/);\n const versionMatch = block.match(/<version>([^<]+)<\\/version>/);\n const scopeMatch = block.match(/<scope>([^<]+)<\\/scope>/);\n\n if (!groupMatch?.[1] || !artifactMatch?.[1]) continue;\n\n const group = groupMatch[1].trim();\n const artifact = artifactMatch[1].trim();\n const identifier = `${group}:${artifact}`;\n\n if (seenCoordinates.has(identifier)) continue;\n seenCoordinates.add(identifier);\n let rawVersion = versionMatch?.[1]?.trim() || '';\n\n // Property auflösen falls vorhanden: ${property.name}\n if (rawVersion.startsWith('${') && rawVersion.endsWith('}')) {\n const propKey = rawVersion.slice(2, -1);\n rawVersion = properties.get(propKey) || rawVersion;\n }\n\n if (!rawVersion || rawVersion.startsWith('${')) {\n continue; // Version von Parent/BOM gesteuert oder unaufgelöst\n }\n\n const scope = scopeMatch?.[1]?.trim() === 'test' ? 'test' : 'prod';\n\n // Internal modules or configured scopes filter\n const isInternal =\n internalIds.has(identifier) ||\n internalIds.has(artifact) ||\n excludedScopes.some((s) => group.startsWith(s.replace(/^@/, '')));\n\n if (isInternal) continue;\n\n rawDeps.push({ group, artifact, rawVersion, scope });\n }\n\n // 3. Neueste Versionen abfragen (unter Berücksichtigung des Release-Channels)\n const candidates: UpdateCandidate[] = [];\n\n await pooled(rawDeps, CONCURRENCY, async (dep) => {\n const latest = await this.registry.getLatestVersion(\n {\n identifier: `${dep.group}:${dep.artifact}`,\n group: dep.group,\n artifact: dep.artifact,\n ecosystem: 'maven',\n },\n channel,\n );\n\n if (!latest) return;\n\n const currentClean = cleanJavaVersion(dep.rawVersion);\n const latestClean = cleanJavaVersion(latest);\n\n if (!currentClean || !latestClean) return;\n\n if (semver.gt(latestClean, currentClean)) {\n const diff = (semver.diff(currentClean, latestClean) as 'patch' | 'minor' | 'major') || 'minor';\n const isPre = isPreReleaseVersion(latest);\n const preTag = isPre ? extractPreReleaseTag(latest) : undefined;\n\n candidates.push({\n coordinate: {\n identifier: `${dep.group}:${dep.artifact}`,\n group: dep.group,\n artifact: dep.artifact,\n ecosystem: 'maven',\n },\n currentRange: dep.rawVersion,\n currentClean,\n latest,\n newRange: latest,\n diff,\n scope: dep.scope,\n selected: diff !== 'major',\n isPreRelease: isPre,\n preReleaseTag: preTag,\n });\n }\n });\n\n candidates.sort((a, b) => (DIFF_ORDER[a.diff] ?? 3) - (DIFF_ORDER[b.diff] ?? 3));\n return candidates;\n }\n}\n","import { writeFileSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { DependencyUpdaterPort } from '../../domain/ports.js';\nimport type { ProjectModule, UpdateCandidate, UpdateSummary } from '../../domain/models.js';\n\nconst execAsync = promisify(exec);\n\nexport class MavenUpdaterAdapter implements DependencyUpdaterPort {\n async applyUpdates(\n module: ProjectModule,\n _rootDir: string,\n updates: UpdateCandidate[],\n onProgress: (stepMessage: string) => void,\n ): Promise<Pick<UpdateSummary, 'updatedCount' | 'auditMessage' | 'auditSeverity' | 'fundingMessage'>> {\n const pomPath = join(module.path, 'pom.xml');\n let xml = '';\n try {\n xml = readFileSync(pomPath, 'utf8');\n } catch {\n throw new Error(`Konnte pom.xml in ${module.path} nicht lesen.`);\n }\n\n onProgress('Schreibe neue Versionen in pom.xml…');\n\n for (const item of updates) {\n const group = item.coordinate.group;\n const artifact = item.coordinate.artifact;\n const newVersion = item.newRange;\n\n if (!group || !artifact) continue;\n\n // Ersetze <version> im passenden <dependency>-Block\n const depRegex = new RegExp(\n `(<dependency>[\\\\s\\\\S]*?<groupId>${group}<\\\\/groupId>[\\\\s\\\\S]*?<artifactId>${artifact}<\\\\/artifactId>[\\\\s\\\\S]*?<version>)([^<]+)(<\\\\/version>[\\\\s\\\\S]*?<\\\\/dependency>)`,\n 'g'\n );\n\n xml = xml.replace(depRegex, `$1${newVersion}$3`);\n }\n\n writeFileSync(pomPath, xml, 'utf8');\n\n onProgress('Löse neue Maven-Abhängigkeiten auf (mvn dependency:resolve)…');\n let stdout = '';\n let stderr = '';\n try {\n const res = await execAsync('mvn dependency:resolve -q -DskipTests', {\n cwd: module.path,\n timeout: 60_000,\n });\n stdout = res.stdout;\n stderr = res.stderr;\n } catch (err: any) {\n stdout = err.stdout ?? '';\n stderr = err.stderr ?? err.message;\n }\n\n onProgress('Analysiere Maven-Status…');\n const hasError = stdout.includes('BUILD FAILURE') || stderr.includes('BUILD FAILURE');\n\n return {\n updatedCount: updates.length,\n auditMessage: hasError\n ? 'Achtung: Einige Abhängigkeiten konnten nicht sofort aufgelöst werden.'\n : 'Alle Maven-Abhängigkeiten erfolgreich aufgelöst.',\n auditSeverity: hasError ? 'warn' : 'clean',\n fundingMessage: undefined,\n };\n }\n}\n","import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { VerificationPort } from '../../domain/ports.js';\nimport type { ProjectModule } from '../../domain/models.js';\n\nconst execAsync = promisify(exec);\n\nexport class MavenVerificationAdapter implements VerificationPort {\n async verify(\n module: ProjectModule,\n _rootDir: string,\n customScript?: string,\n customLabel?: string,\n ): Promise<{ status: 'clean' | 'warn'; details: string; label: string }> {\n const script = customScript || 'mvn test-compile -q';\n const label = customLabel || 'Java-Kompilierungstest (mvn test-compile)';\n\n try {\n const { stdout } = await execAsync(script, {\n cwd: module.path,\n timeout: 90_000,\n });\n\n return {\n status: 'clean',\n details: stdout.trim() || 'Java-Quellcode kompiliert fehlerfrei.',\n label,\n };\n } catch (err: any) {\n return {\n status: 'warn',\n details: (err.stdout || err.stderr || err.message).slice(0, 300),\n label,\n };\n }\n }\n}\n","import type { EcosystemStrategy, TabLabels } from '../../domain/ecosystem-strategy.js';\nimport type { Ecosystem } from '../../domain/models.js';\nimport { MavenModuleDiscoveryAdapter } from './maven-discovery.js';\nimport { MavenRegistryAdapter } from './maven-registry.js';\nimport { MavenDependencyAdapter } from './maven-scanner.js';\nimport { MavenUpdaterAdapter } from './maven-updater.js';\nimport { MavenVerificationAdapter } from './maven-verifier.js';\n\nexport class MavenEcosystemStrategy implements EcosystemStrategy {\n readonly ecosystem: Ecosystem = 'maven';\n readonly displayName = 'Java / Maven';\n readonly icon = '☕';\n readonly manifestFile = 'pom.xml';\n\n readonly discovery = new MavenModuleDiscoveryAdapter();\n readonly registry = new MavenRegistryAdapter();\n readonly reader = new MavenDependencyAdapter(this.registry);\n readonly updater = new MavenUpdaterAdapter();\n readonly verifier = new MavenVerificationAdapter();\n\n getTabLabels(\n counts: { total: number; prodCount: number; devCount: number },\n _t: any,\n ): TabLabels {\n return {\n all: `[1] Alle (${counts.total})`,\n prod: `[2] Compile (${counts.prodCount})`,\n dev: `[3] Test (${counts.devCount})`,\n };\n }\n}\n","/**\n * 🪶 Elevate — Ecosystem Factory (Factory Pattern)\n *\n * Verwaltet und instanziiert die passenden Ökosystem-Strategien\n * für Node/npm und Java/Maven.\n */\n\nimport type { Ecosystem } from './models.js';\nimport type { EcosystemStrategy } from './ecosystem-strategy.js';\nimport { NpmEcosystemStrategy } from '../adapters/npm/npm-strategy.js';\nimport { MavenEcosystemStrategy } from '../adapters/maven/maven-strategy.js';\n\nexport class EcosystemFactory {\n private static instances = new Map<Ecosystem, EcosystemStrategy>();\n\n /** Liefert die Strategie für das gewünschte Ökosystem (Lazy Singleton) */\n static getStrategy(ecosystem: Ecosystem): EcosystemStrategy {\n let strategy = this.instances.get(ecosystem);\n if (!strategy) {\n if (ecosystem === 'maven') {\n strategy = new MavenEcosystemStrategy();\n } else {\n strategy = new NpmEcosystemStrategy();\n }\n this.instances.set(ecosystem, strategy);\n }\n return strategy;\n }\n\n /** Liefert alle verfügbaren Ökosysteme */\n static getAvailableEcosystems(): Ecosystem[] {\n return ['npm', 'maven'];\n }\n}\n","/**\n * 🪶 Elevate — i18n System\n *\n * Verwaltet Übersetzungstabellen, Spracheinstellungen und den useI18n Hook.\n */\n\nimport { useState, useCallback, useMemo } from 'react';\nimport type { Locale, Translations } from './types.js';\nimport { de } from './locales/de.js';\nimport { en } from './locales/en.js';\n\nexport * from './types.js';\n\nconst dictionaries: Record<Locale, Translations> = { de, en };\n\n/** Ermittelt die Standardsprache aus Umgebung oder Config */\nexport function resolveInitialLocale(configured?: string): Locale {\n if (configured === 'de' || configured === 'en') return configured;\n\n const envLang = (process.env.LANG || process.env.LC_ALL || process.env.LANGUAGE || '').toLowerCase();\n if (envLang.startsWith('en')) return 'en';\n return 'de'; // Standard: Deutsch\n}\n\n/** Liefert das passende Wörterbuch */\nexport function getTranslations(locale: Locale): Translations {\n return dictionaries[locale] ?? dictionaries.de;\n}\n\n/** Hook zur Sprachverwaltung */\nexport function useI18n(initialLocale: Locale = 'de') {\n const [locale, setLocale] = useState<Locale>(initialLocale);\n\n const toggleLocale = useCallback(() => {\n setLocale((prev) => (prev === 'de' ? 'en' : 'de'));\n }, []);\n\n const t = useMemo(() => getTranslations(locale), [locale]);\n\n return {\n locale,\n setLocale,\n toggleLocale,\n t,\n } as const;\n}\n","import type { Translations } from '../types.js';\n\nexport const de: Translations = {\n header: {\n title: 'Elevate',\n developedBy: (name) => `Entwickelt & gepflegt von ${name}`,\n langToggleHint: '[L] DE / EN',\n ecosystemToggleHint: (nextName) => `[E] ${nextName}`,\n },\n workspace: {\n label: 'Workspace / Modul',\n switchHint: 'Drücke [W] zum Wechseln',\n modalTitle: '📁 Modul auswählen (↑/↓ Navigieren, Enter Auswählen, Esc Abbrechen):',\n },\n tabs: {\n all: (count) => `[1] Alle (${count})`,\n dependencies: (count) => `[2] Dependencies (${count})`,\n devDependencies: (count) => `[3] DevDependencies (${count})`,\n },\n list: {\n scanning: '⏳ Prüfe Registry auf verfügbare Updates…',\n allUpToDate: '🎉 Alle Abhängigkeiten in diesem Tab sind auf dem neuesten Stand!',\n moreAbove: '▲ … weitere oben',\n moreBelow: (remaining) => `▼ … weitere unten (${remaining} übrig)`,\n },\n badges: {\n patch: '[Patch]',\n minor: '[Minor]',\n major: '[MAJOR]',\n dev: '(dev/test)',\n prod: '(prod/compile)',\n },\n status: {\n selectedOf: (selected, total) => `${selected} von ${total}`,\n breakdown: (patch, minor, major) => `(${patch} Patch, ${minor} Minor, ${major} Major)`,\n symlinksProtected: (scopes) => `🛡️ Interne ${scopes.map((s) => `${s}/*`).join(', ')} geschützt`,\n defaultProtected: '🛡️ Interne Monorepo-Module geschützt',\n },\n controls: {\n navigate: 'Navigieren',\n toggle: 'Toggle',\n all: 'Alle',\n tabs: 'Tabs',\n workspace: 'Modul',\n ecosystem: 'Ökosystem',\n version: 'Version',\n language: 'Sprache',\n update: 'Update starten',\n quit: 'Beenden',\n },\n versionModal: {\n title: (pkgName) => `Version heraussuchen: ${pkgName}`,\n current: (version) => `Aktuell installiert: ${version}`,\n filterPlaceholder: 'Tippe zum Filtern (z. B. 3.2 oder 18)…',\n loading: 'Lade alle Versionen aus der Registry…',\n noVersions: 'Keine passenden Versionen gefunden.',\n hint: '[↑/↓/j/k] Navigieren │ [Enter] Auswählen │ [Esc] Abbrechen │ [Backspace] Filter löschen',\n latestBadge: 'LATEST',\n currentBadge: 'AKTUELL',\n customBadge: 'MANUELL',\n },\n updating: {\n title: '⚡ Aktualisierung läuft…',\n stepWriting: (step, total) => `${step}/${total} — Schreibe neue Versionen ins Manifest…`,\n stepInstalling: (step, total) => `${step}/${total} — Löse Abhängigkeiten auf (bitte kurz warten)…`,\n stepAnalyzing: (step, total) => `${step}/${total} — Analysiere Build & Output…`,\n stepCustom: (step, total, label) => `${step}/${total} — ${label}…`,\n doNotClose: 'Bitte das Terminal nicht schließen.',\n },\n summary: {\n title: '✨ Aktualisierung abgeschlossen!',\n successCount: (count, path) => `📦 ${count} Abhängigkeiten erfolgreich in ${path} aktualisiert.`,\n securityAudit: '🛡️ Status & Audit:',\n cleanAudit: 'Keine bekannten Probleme gefunden.',\n funding: (msg) => `💡 Funding: ${msg}`,\n postScript: (label) => `🔍 ${label}:`,\n backHint: '[Enter] Zurück zum Dashboard │ [Q] Beenden',\n },\n mascot: {\n name: 'Pip',\n idleChirps: ['*piep*', '*flausch*', '*pick pick*', 'alles frisch! 🪶', '*blinzel*'],\n scanningChirps: ['*such*', 'prüfe...', 'oh, Updates?', 'einen Moment!'],\n updatingChirps: ['*schuft*', 'baue Code...', 'gleich fertig!', 'arbeite emsig...'],\n successChirps: ['hurra! 🎉', 'alles aktuell!', 'top gepflegt! 🪶', 'super gemacht!'],\n mavenChirps: ['*kaffee schlürf* ☕', 'Spring Boot läuft!', 'Java 25 rockt!', 'sauber gebaut!'],\n },\n splash: {\n tagline: 'Modernes Polyglot Dependency Dashboard',\n loading: 'Initialisiere Module & bereite Dashboard vor…',\n skipHint: '[Leertaste / Enter] zum Überspringen',\n },\n};\n","import type { Translations } from '../types.js';\n\nexport const en: Translations = {\n header: {\n title: 'Elevate',\n developedBy: (name) => `Developed & maintained by ${name}`,\n langToggleHint: '[L] EN / DE',\n ecosystemToggleHint: (nextName) => `[E] ${nextName}`,\n },\n workspace: {\n label: 'Workspace / Module',\n switchHint: 'Press [W] to switch',\n modalTitle: '📁 Select Module (↑/↓ Navigate, Enter Select, Esc Cancel):',\n },\n tabs: {\n all: (count) => `[1] All (${count})`,\n dependencies: (count) => `[2] Dependencies (${count})`,\n devDependencies: (count) => `[3] DevDependencies (${count})`,\n },\n list: {\n scanning: '⏳ Checking registry for available updates…',\n allUpToDate: '🎉 All dependencies in this tab are up to date!',\n moreAbove: '▲ … more above',\n moreBelow: (remaining) => `▼ … more below (${remaining} remaining)`,\n },\n badges: {\n patch: '[Patch]',\n minor: '[Minor]',\n major: '[MAJOR]',\n dev: '(dev/test)',\n prod: '(prod/compile)',\n },\n status: {\n selectedOf: (selected, total) => `${selected} of ${total}`,\n breakdown: (patch, minor, major) => `(${patch} Patch, ${minor} Minor, ${major} Major)`,\n symlinksProtected: (scopes) => `🛡️ Internal ${scopes.map((s) => `${s}/*`).join(', ')} protected`,\n defaultProtected: '🛡️ Internal monorepo modules protected',\n },\n controls: {\n navigate: 'Navigate',\n toggle: 'Toggle',\n all: 'All',\n tabs: 'Tabs',\n workspace: 'Module',\n ecosystem: 'Ecosystem',\n version: 'Version',\n language: 'Language',\n update: 'Start update',\n quit: 'Quit',\n },\n versionModal: {\n title: (pkgName) => `Pick version for: ${pkgName}`,\n current: (version) => `Currently installed: ${version}`,\n filterPlaceholder: 'Type to filter (e.g. 3.2 or 18)…',\n loading: 'Loading all versions from registry…',\n noVersions: 'No matching versions found.',\n hint: '[↑/↓/j/k] Navigate │ [Enter] Select │ [Esc] Cancel │ [Backspace] Clear filter',\n latestBadge: 'LATEST',\n currentBadge: 'CURRENT',\n customBadge: 'MANUAL',\n },\n updating: {\n title: '⚡ Update in progress…',\n stepWriting: (step, total) => `${step}/${total} — Writing new versions to manifest…`,\n stepInstalling: (step, total) => `${step}/${total} — Resolving dependencies (please wait)…`,\n stepAnalyzing: (step, total) => `${step}/${total} — Analyzing build & output…`,\n stepCustom: (step, total, label) => `${step}/${total} — ${label}…`,\n doNotClose: 'Please do not close the terminal.',\n },\n summary: {\n title: '✨ Update completed successfully!',\n successCount: (count, path) => `📦 ${count} dependencies updated successfully in ${path}.`,\n securityAudit: '🛡️ Status & Audit:',\n cleanAudit: 'No known issues found.',\n funding: (msg) => `💡 Funding: ${msg}`,\n postScript: (label) => `🔍 ${label}:`,\n backHint: '[Enter] Back to Dashboard │ [Q] Quit',\n },\n mascot: {\n name: 'Pip',\n idleChirps: ['*chirp*', '*fluff*', '*peck peck*', 'all fresh! 🪶', '*blink*'],\n scanningChirps: ['*peeking*', 'checking...', 'ooh, updates?', 'just a sec!'],\n updatingChirps: ['*working hard*', 'building...', 'almost there!', 'packing modules...'],\n successChirps: ['hooray! 🎉', 'all updated!', 'looking sharp! 🪶', 'great job!'],\n mavenChirps: ['*sipping coffee* ☕', 'Spring Boot rocks!', 'Java 25 is fly!', 'clean build!'],\n },\n splash: {\n tagline: 'Modern Polyglot Dependency Dashboard',\n loading: 'Initializing modules & preparing dashboard…',\n skipHint: '[Space / Enter] to skip',\n },\n};\n","/**\n * 🪶 Elevate — useWorkspaces Hook (Domain-Driven)\n *\n * Verwaltet Module des aktuell aktiven Ökosystems über die\n * ModuleDiscoveryPort-Schnittstelle.\n */\n\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport type { ProjectModule } from '../domain/models.js';\nimport type { EcosystemStrategy } from '../domain/ecosystem-strategy.js';\n\nexport function useWorkspaces(strategy: EcosystemStrategy, rootDir: string) {\n const [modules, setModules] = useState<ProjectModule[]>([]);\n const [loading, setLoading] = useState(true);\n const [activeIndex, setActiveIndex] = useState(0);\n\n // Module anhand der aktuellen Ökosystem-Strategie laden\n const reload = useCallback(async () => {\n setLoading(true);\n setModules([]);\n setActiveIndex(0);\n try {\n const found = await strategy.discovery.discover(rootDir);\n setModules(found);\n setActiveIndex(0);\n } catch {\n setModules([]);\n } finally {\n setLoading(false);\n }\n }, [strategy, rootDir]);\n\n useEffect(() => {\n reload();\n }, [reload]);\n\n // Interne IDs sammeln (für Symlink-/Monorepo-Schutz)\n const internalIds = useMemo(() => {\n const ids = new Set<string>();\n for (const m of modules) {\n if (m.id) ids.add(m.id);\n if (m.name) ids.add(m.name);\n }\n return ids;\n }, [modules]);\n\n const active: ProjectModule = modules[activeIndex] || {\n id: 'empty',\n name: 'Kein Modul gefunden',\n path: rootDir,\n relPath: 'Root',\n ecosystem: strategy.ecosystem,\n isRoot: true,\n };\n\n return {\n modules,\n active,\n activeIndex,\n setActiveIndex,\n internalIds,\n loading,\n reload,\n } as const;\n}\n","/**\n * 🪶 Elevate — usePackages Hook (Domain-Driven)\n *\n * Scannt Abhängigkeiten eines Moduls über den DependencyReaderPort\n * der aktuellen Ökosystem-Strategie und verwaltet Auswahl, Filterung und Tabs.\n */\n\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport semver from 'semver';\nimport type {\n UpdateCandidate,\n Tab,\n SelectionCounts,\n ProjectModule,\n ReleaseChannel,\n VersionDiff,\n} from '../domain/models.js';\nimport type { EcosystemStrategy } from '../domain/ecosystem-strategy.js';\nimport { isPreReleaseVersion, extractPreReleaseTag } from '../adapters/maven/maven-registry.js';\n\nexport function usePackages(\n strategy: EcosystemStrategy,\n module: ProjectModule,\n internalIds: Set<string>,\n excludeScopes: string[] = [],\n channel: ReleaseChannel = 'stable',\n) {\n const [candidates, setCandidates] = useState<UpdateCandidate[]>([]);\n const [loading, setLoading] = useState(false);\n const [activeTab, setActiveTab] = useState<Tab>('all');\n const [cursor, setCursor] = useState(0);\n\n // Scan beim Modul- oder Strategiewechsel\n const scan = useCallback(async () => {\n if (!module || module.id === 'empty') {\n setCandidates([]);\n return;\n }\n setLoading(true);\n setCursor(0);\n setCandidates([]);\n\n try {\n const updates = await strategy.reader.scan(module, excludeScopes, internalIds, channel);\n setCandidates(updates);\n } catch {\n setCandidates([]);\n } finally {\n setLoading(false);\n }\n }, [strategy, module.path, module.id, internalIds, excludeScopes, channel]);\n\n useEffect(() => {\n if (module && module.id !== 'empty') {\n scan();\n }\n }, [module.path, module.id, strategy.ecosystem, channel]);\n\n // Sichtbare Pakete je nach Tab\n const visible = useMemo(() => {\n if (activeTab === 'prod') return candidates.filter((c) => c.scope === 'prod');\n if (activeTab === 'dev') return candidates.filter((c) => c.scope !== 'prod');\n return candidates;\n }, [candidates, activeTab]);\n\n // Zählerstände\n const counts: SelectionCounts = useMemo(() => {\n const selected = candidates.filter((c) => c.selected);\n return {\n total: candidates.length,\n prodCount: candidates.filter((c) => c.scope === 'prod').length,\n devCount: candidates.filter((c) => c.scope !== 'prod').length,\n selectedCount: selected.length,\n patchCount: selected.filter((c) => c.diff === 'patch').length,\n minorCount: selected.filter((c) => c.diff === 'minor').length,\n majorCount: selected.filter((c) => c.diff === 'major').length,\n };\n }, [candidates]);\n\n // Einzelnes Paket togglen\n const togglePackage = useCallback((identifier: string) => {\n setCandidates((prev) =>\n prev.map((c) =>\n c.coordinate.identifier === identifier ? { ...c, selected: !c.selected } : c,\n ),\n );\n }, []);\n\n // Alle sichtbaren togglen\n const toggleAllVisible = useCallback(() => {\n const allSelected = visible.every((c) => c.selected);\n const visibleIds = new Set(visible.map((c) => c.coordinate.identifier));\n setCandidates((prev) =>\n prev.map((c) =>\n visibleIds.has(c.coordinate.identifier) ? { ...c, selected: !allSelected } : c,\n ),\n );\n }, [visible]);\n\n // Benutzerdefinierte Version für eine Abhängigkeit setzen\n const setCustomVersion = useCallback((identifier: string, chosenVersion: string) => {\n setCandidates((prev) =>\n prev.map((c) => {\n if (c.coordinate.identifier !== identifier) return c;\n\n const prefix = c.currentRange.startsWith('~')\n ? '~'\n : c.currentRange.startsWith('^')\n ? '^'\n : '';\n\n let diff: VersionDiff = 'minor';\n const cleanChosen = semver.valid(chosenVersion);\n if (c.currentClean && cleanChosen) {\n const semDiff = semver.diff(c.currentClean, chosenVersion);\n if (semDiff === 'major' || semDiff === 'minor' || semDiff === 'patch') {\n diff = semDiff;\n }\n }\n\n const isPre = isPreReleaseVersion(chosenVersion);\n const preTag = isPre ? extractPreReleaseTag(chosenVersion) : undefined;\n\n return {\n ...c,\n newRange: `${prefix}${chosenVersion}`,\n diff,\n selected: true,\n isPreRelease: isPre,\n preReleaseTag: preTag,\n isCustomVersion: true,\n };\n }),\n );\n }, []);\n\n const switchTab = useCallback((tab: Tab) => {\n setActiveTab(tab);\n setCursor(0);\n }, []);\n\n const cycleTab = useCallback(() => {\n setActiveTab((t) => (t === 'all' ? 'prod' : t === 'prod' ? 'dev' : 'all'));\n setCursor(0);\n }, []);\n\n return {\n packages: candidates,\n loading,\n visible,\n counts,\n activeTab,\n cursor,\n setCursor,\n scan,\n switchTab,\n cycleTab,\n togglePackage,\n toggleAllVisible,\n setCustomVersion,\n } as const;\n}\n","/**\n * 🪶 Elevate — useUpdater Hook (Domain-Driven)\n *\n * Führt den Update-Workflow über DependencyUpdaterPort und\n * VerificationPort der aktuellen Ökosystem-Strategie aus.\n */\n\nimport { useState, useCallback } from 'react';\nimport type { UpdateCandidate, UpdateSummary, View, ProjectModule } from '../domain/models.js';\nimport type { EcosystemStrategy } from '../domain/ecosystem-strategy.js';\nimport type { Translations } from '../i18n/types.js';\n\nexport interface PostUpdateOptions {\n script?: string;\n label?: string;\n}\n\nexport function useUpdater(\n strategy: EcosystemStrategy,\n rootDir: string,\n setView: (view: View) => void,\n postUpdate?: PostUpdateOptions,\n) {\n const [step, setStep] = useState('');\n const [summary, setSummary] = useState<UpdateSummary | null>(null);\n\n const run = useCallback(\n async (module: ProjectModule, selected: UpdateCandidate[], _t: Translations) => {\n if (selected.length === 0) return;\n\n setView('updating');\n\n // 1. & 2. & 3. Update & Build via Updater Adapter\n const updaterResult = await strategy.updater.applyUpdates(\n module,\n rootDir,\n selected,\n (progressMessage) => setStep(progressMessage),\n );\n\n // 4. Verifikation via Verifier Adapter\n setStep('Führe Verifikation und Konsistenzchecks durch…');\n const verifierResult = await strategy.verifier.verify(\n module,\n rootDir,\n postUpdate?.script,\n postUpdate?.label,\n );\n\n setSummary({\n ...updaterResult,\n verificationStatus: verifierResult.status,\n verificationDetails: verifierResult.details,\n verificationLabel: verifierResult.label,\n });\n\n setView('summary');\n },\n [strategy, rootDir, setView, postUpdate],\n );\n\n return { step, summary, run } as const;\n}\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport { en } from '../i18n/locales/en.js';\n\ninterface Props {\n onComplete: () => void;\n author?: string;\n}\n\n/**\n * 🪶 Elevate — Initialer Splash Screen\n *\n * Zeigt beim Start ein ansprechendes Intro mit Maskottchen Pip,\n * Ladebalken und Autoren-Info. Der Splash Screen ist bewusst IMMER\n * auf Englisch gehalten. Schaltet nach ~3,2 Sekunden oder per\n * Tastendruck automatisch auf das Dashboard um.\n */\nexport const SplashScreen: React.FC<Props> = ({ onComplete, author }) => {\n const t = en;\n\n const [progress, setProgress] = useState(0);\n const [frame, setFrame] = useState(0);\n\n // Animations- und Fortschritts-Timer\n useEffect(() => {\n const progressTimer = setInterval(() => {\n setProgress((prev) => {\n if (prev >= 100) {\n clearInterval(progressTimer);\n setTimeout(onComplete, 250);\n return 100;\n }\n return prev + 5;\n });\n }, 150);\n\n const mascotTimer = setInterval(() => {\n setFrame((prev) => (prev + 1) % 4);\n }, 400);\n\n return () => {\n clearInterval(progressTimer);\n clearInterval(mascotTimer);\n };\n }, [onComplete]);\n\n // Mascot-Animations-Frames für den Splash Screen (immer englische Chirps)\n const mascotFrames = [\n { face: '( •ө• )', arms: '/ >🪶', chirp: '*chirp!*' },\n { face: '( ᵔөᵔ )', arms: '/ >🪶', chirp: '*hello!*' },\n { face: '( -ө- )', arms: '/ >🪶', chirp: '*blink*' },\n { face: '( •ө• )', arms: '\\\\(•ө•)/', chirp: 'ready! ✨' },\n ];\n const curMascot = mascotFrames[frame % mascotFrames.length]!;\n\n // 24-Segment-Fortschrittsbalken\n const barLength = 24;\n const filledLength = Math.round((progress / 100) * barLength);\n const emptyLength = Math.max(0, barLength - filledLength);\n const progressBar = '█'.repeat(filledLength) + '░'.repeat(emptyLength);\n\n return (\n <Box\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n borderStyle=\"round\"\n borderColor={theme.colors.brand}\n paddingY={2}\n paddingX={4}\n marginY={1}\n >\n {/* 1. Titel & Icon */}\n <Box marginBottom={1}>\n <Text bold color={theme.colors.brand}>\n {theme.icon} E L E V A T E\n </Text>\n </Box>\n\n <Text color={theme.colors.muted}>{t.splash.tagline}</Text>\n\n {/* 2. Großes zentriertes Hühnchen */}\n <Box flexDirection=\"column\" alignItems=\"center\" marginY={1}>\n <Text color={theme.colors.mascotComb} bold>\n (\\_/)\n </Text>\n <Box>\n <Text color={theme.colors.mascotBody} bold>\n {curMascot.face}{' '}\n </Text>\n <Text color={theme.colors.brandLight} italic>\n {curMascot.chirp}\n </Text>\n </Box>\n <Text color={theme.colors.brandLight} bold>\n {curMascot.arms}\n </Text>\n </Box>\n\n {/* 3. Autor-Hinweis */}\n {author && (\n <Box marginBottom={1}>\n <Text color={theme.colors.muted}>{t.header.developedBy(author)}</Text>\n </Box>\n )}\n\n {/* 4. Ladebalken */}\n <Box flexDirection=\"column\" alignItems=\"center\" marginTop={1}>\n <Box>\n <Text color={theme.colors.brandLight} bold>\n [{progressBar}] {Math.min(100, progress)}%\n </Text>\n </Box>\n <Box marginTop={1}>\n <Text color={theme.colors.muted}>{t.splash.loading}</Text>\n </Box>\n </Box>\n\n {/* 5. Skip-Hinweis */}\n <Box marginTop={1}>\n <Text color={theme.colors.muted} dimColor>\n {t.splash.skipHint}\n </Text>\n </Box>\n </Box>\n );\n};\n","/**\n * 🪶 Elevate — Theme & Brand Tokens\n *\n * Brand-Farbe: Orange\n * Symbol: Feder (🪶)\n */\n\nexport const theme = {\n icon: '🪶',\n colors: {\n // Brand & Akzente (Orange-Palette)\n brand: '#FF8800',\n brandLight: '#FFA726',\n brandDark: '#E65100',\n brandSoft: '#FFE0B2',\n accent: '#FF9800',\n\n // Süßes Hühnchen (Mascot)\n mascotBody: '#FFD54F',\n mascotComb: '#FF7043',\n mascotBeak: '#FF9800',\n mascotBlush: '#FF8A80',\n mascotFeet: '#FFA726',\n\n // Statusfarben\n success: 'green',\n warning: 'yellow',\n danger: 'red',\n muted: 'gray',\n white: 'white',\n\n // UI-Elemente\n border: '#FF8800',\n borderMuted: 'gray',\n focus: '#FFA726',\n },\n} as const;\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { Translations } from '../i18n/types.js';\nimport type { EcosystemStrategy } from '../domain/ecosystem-strategy.js';\nimport type { ReleaseChannel } from '../domain/models.js';\n\ninterface Props {\n author?: string;\n t: Translations;\n currentLocale: string;\n strategy: EcosystemStrategy;\n nextStrategyName: string;\n channel: ReleaseChannel;\n}\n\n/** Kopfzeile mit Polyglot-Ecosystem-Anzeige, Release Channel, Sprache und Autor */\nexport const Header: React.FC<Props> = ({\n author,\n t,\n currentLocale,\n strategy,\n nextStrategyName,\n channel,\n}) => (\n <Box\n borderStyle=\"round\"\n borderColor={theme.colors.brand}\n paddingX={1}\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n {/* Links: Logo, Ökosystem & Channel */}\n <Box alignItems=\"center\">\n <Text bold color={theme.colors.brand}>\n {theme.icon} {t.header.title}\n </Text>\n\n {/* Aktives Ökosystem & Channel */}\n <Box marginLeft={2}>\n <Text color={theme.colors.muted}>│ </Text>\n <Text color={theme.colors.brandLight} bold>\n {strategy.icon} {strategy.displayName}\n </Text>\n <Text color={theme.colors.muted}> [{channel}] </Text>\n <Text color={theme.colors.muted}>\n ({t.header.ecosystemToggleHint(nextStrategyName)})\n </Text>\n </Box>\n\n {/* Sprache */}\n <Box marginLeft={2}>\n <Text color={theme.colors.muted}>│ </Text>\n <Text color={theme.colors.brandLight} bold>\n [{currentLocale.toUpperCase()}]\n </Text>\n <Text color={theme.colors.muted}> {t.header.langToggleHint}</Text>\n </Box>\n </Box>\n\n {/* Rechts: Maintainer */}\n {author && (\n <Text color={theme.colors.muted}>\n {t.header.developedBy(author)}\n </Text>\n )}\n </Box>\n);\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { ProjectModule } from '../domain/models.js';\nimport type { EcosystemStrategy } from '../domain/ecosystem-strategy.js';\nimport type { Translations } from '../i18n/types.js';\n\ninterface Props {\n module: ProjectModule;\n excludeScopes: string[];\n strategy: EcosystemStrategy;\n t: Translations;\n}\n\n/** Zeigt das aktuell aktive Modul und den Schutzhinweis statisch an */\nexport const WorkspaceBar: React.FC<Props> = ({ module, excludeScopes, strategy, t }) => {\n const scopeHint =\n excludeScopes.length > 0\n ? t.status.symlinksProtected(excludeScopes)\n : t.status.defaultProtected;\n\n return (\n <Box marginY={1} justifyContent=\"space-between\" alignItems=\"center\">\n <Box alignItems=\"center\" flexShrink={1}>\n <Text bold>📍 {strategy.icon} {t.workspace.label}: </Text>\n <Text bold color={theme.colors.brandLight}>\n {module.name}\n </Text>\n <Text color={theme.colors.muted}> ({module.relPath})</Text>\n </Box>\n <Box alignItems=\"center\" marginLeft={2}>\n <Text color={theme.colors.muted}>{scopeHint}</Text>\n <Text color={theme.colors.muted}> │ </Text>\n <Text color={theme.colors.brandLight} bold>[W]</Text>\n <Text color={theme.colors.muted}> {t.workspace.switchHint.replace('[W]', '').trim()}</Text>\n </Box>\n </Box>\n );\n};\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { Tab, SelectionCounts } from '../domain/models.js';\nimport type { EcosystemStrategy } from '../domain/ecosystem-strategy.js';\nimport type { Translations } from '../i18n/types.js';\n\ninterface Props {\n activeTab: Tab;\n counts: SelectionCounts;\n strategy: EcosystemStrategy;\n t: Translations;\n}\n\n/** Tab-Leiste: Fragt die Bezeichnungen vom jeweiligen Ökosystem ab */\nexport const TabBar: React.FC<Props> = ({ activeTab, counts, strategy, t }) => {\n const labels = strategy.getTabLabels(counts, t);\n\n return (\n <Box borderStyle=\"single\" borderColor={theme.colors.borderMuted} paddingX={1}>\n <Text\n bold\n color={activeTab === 'all' ? theme.colors.brand : theme.colors.white}\n underline={activeTab === 'all'}\n >\n {labels.all}\n </Text>\n <Text color={theme.colors.muted}> │ </Text>\n <Text\n bold\n color={activeTab === 'prod' ? theme.colors.brand : theme.colors.white}\n underline={activeTab === 'prod'}\n >\n {labels.prod}\n </Text>\n <Text color={theme.colors.muted}> │ </Text>\n <Text\n bold\n color={activeTab === 'dev' ? theme.colors.brand : theme.colors.white}\n underline={activeTab === 'dev'}\n >\n {labels.dev}\n </Text>\n </Box>\n );\n};\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { UpdateCandidate } from '../domain/models.js';\nimport type { Translations } from '../i18n/types.js';\nimport { PackageRow } from './package-row.js';\n\ninterface Props {\n items: UpdateCandidate[];\n cursor: number;\n loading: boolean;\n t: Translations;\n}\n\nconst WINDOW_SIZE = 7;\n\n/** Scrollbare Liste mit Fenster-Ausschnitt */\nexport const PackageList: React.FC<Props> = ({ items, cursor, loading, t }) => {\n const startIdx = Math.max(\n 0,\n Math.min(\n cursor - Math.floor(WINDOW_SIZE / 2),\n Math.max(0, items.length - WINDOW_SIZE),\n ),\n );\n const window = items.slice(startIdx, startIdx + WINDOW_SIZE);\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={theme.colors.border}\n padding={1}\n marginY={1}\n minHeight={10}\n >\n {loading ? (\n <Box marginY={2} justifyContent=\"center\">\n <Text color={theme.colors.warning}>{t.list.scanning}</Text>\n </Box>\n ) : items.length === 0 ? (\n <Box marginY={2} justifyContent=\"center\">\n <Text color={theme.colors.success}>{t.list.allUpToDate}</Text>\n </Box>\n ) : (\n <>\n {startIdx > 0 && (\n <Text color={theme.colors.muted}>{t.list.moreAbove}</Text>\n )}\n {window.map((item, idx) => (\n <PackageRow\n key={`${item.coordinate?.identifier || (item as any).name}_${startIdx + idx}`}\n item={item}\n isFocused={startIdx + idx === cursor}\n t={t}\n />\n ))}\n {startIdx + WINDOW_SIZE < items.length && (\n <Text color={theme.colors.muted}>\n {t.list.moreBelow(items.length - (startIdx + WINDOW_SIZE))}\n </Text>\n )}\n </>\n )}\n </Box>\n );\n};\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { UpdateCandidate } from '../domain/models.js';\nimport type { Translations } from '../i18n/types.js';\n\ninterface Props {\n item: UpdateCandidate;\n isFocused: boolean;\n t: Translations;\n}\n\n/** Einzelne Zeile in der Liste mit Badges und Checkbox */\nexport const PackageRow: React.FC<Props> = ({ item, isFocused, t }) => {\n const badge =\n item.diff === 'major' ? (\n <Text bold color={theme.colors.danger}>{t.badges.major}</Text>\n ) : item.diff === 'minor' ? (\n <Text color={theme.colors.warning}>{t.badges.minor}</Text>\n ) : (\n <Text color={theme.colors.success}>{t.badges.patch}</Text>\n );\n\n const displayName = item.coordinate?.identifier || (item as any).name || '';\n const isDevOrTest = item.scope === 'dev' || item.scope === 'test';\n\n return (\n <Box justifyContent=\"space-between\">\n <Box>\n <Text color={theme.colors.brandLight} bold>\n {isFocused ? '➔ ' : ' '}\n </Text>\n <Text color={item.selected ? theme.colors.success : theme.colors.muted} bold>\n {item.selected ? '[✔] ' : '[ ] '}\n </Text>\n <Text bold={isFocused} color={isFocused ? theme.colors.brandLight : theme.colors.white}>\n {displayName.slice(0, 42).padEnd(42)}{' '}\n </Text>\n <Text color={theme.colors.muted}>{item.currentRange.padEnd(12)} </Text>\n <Text color={theme.colors.muted}>➔ </Text>\n <Text bold color={theme.colors.white}>\n {item.newRange.padEnd(12)}{' '}\n </Text>\n </Box>\n <Box>\n {item.isCustomVersion && (\n <Text bold color={theme.colors.brandLight}>\n [{t.versionModal.customBadge}]{' '}\n </Text>\n )}\n {item.isPreRelease && (\n <Text bold color=\"#E040FB\">\n [{item.preReleaseTag || 'PRE'}]{' '}\n </Text>\n )}\n {badge}\n <Text color={theme.colors.muted}> {isDevOrTest ? t.badges.dev : t.badges.prod}</Text>\n </Box>\n </Box>\n );\n};\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { SelectionCounts, Ecosystem } from '../domain/models.js';\nimport type { Translations } from '../i18n/types.js';\nimport { ChickenMascot, type MascotState } from './mascot.js';\n\ninterface Props {\n counts: SelectionCounts;\n visibleCount: number;\n t: Translations;\n mascotState?: MascotState;\n ecosystem?: Ecosystem;\n}\n\n/** Statusleiste: Zähler links, Hühnchen-Mascot rechts */\nexport const StatusBar: React.FC<Props> = ({\n counts,\n visibleCount,\n t,\n mascotState = 'idle',\n ecosystem = 'npm',\n}) => {\n return (\n <Box\n borderStyle=\"single\"\n borderColor={theme.colors.borderMuted}\n paddingX={1}\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n {/* Linke Seite: Zähler (fest am linken Rand) */}\n <Box>\n <Text bold>{t.status.selectedOf(counts.selectedCount, visibleCount)} </Text>\n <Text color={theme.colors.muted}>\n {t.status.breakdown(counts.patchCount, counts.minorCount, counts.majorCount)}\n </Text>\n </Box>\n\n {/* Rechte Seite: Süßes animiertes Hühnchen */}\n <ChickenMascot state={mascotState} t={t} ecosystem={ecosystem} />\n </Box>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { Translations } from '../i18n/types.js';\nimport type { Ecosystem } from '../domain/models.js';\n\nexport type MascotState = 'idle' | 'scanning' | 'updating' | 'success';\n\ninterface Props {\n state?: MascotState;\n t: Translations;\n ecosystem?: Ecosystem;\n}\n\n/**\n * 🐣 Süßes animiertes Hühnchen (\"Pip\")\n *\n * Inspiriert vom kleinen animierten Begleiter in Claude Code CLI.\n * Polyglot: Blinzelt, wechselt Mimik und zwitschert passend zum\n * aktuellen Zustand und zum gewählten Ökosystem (Node vs. Java).\n */\nexport const ChickenMascot: React.FC<Props> = ({ state = 'idle', t, ecosystem = 'npm' }) => {\n const [frame, setFrame] = useState(0);\n const [chirpIndex, setChirpIndex] = useState(0);\n\n // Animations-Timer (alle 1,4 Sekunden ein neuer Frame)\n useEffect(() => {\n const timer = setInterval(() => {\n setFrame((prev) => (prev + 1) % 6);\n }, 1400);\n\n return () => clearInterval(timer);\n }, []);\n\n // Sprechblasen-Timer (wechselt alle 4,2 Sekunden den Text)\n useEffect(() => {\n const chirpTimer = setInterval(() => {\n setChirpIndex((prev) => prev + 1);\n }, 4200);\n\n return () => clearInterval(chirpTimer);\n }, []);\n\n // Mimik je nach Zustand & Frame\n let chickFace = '( •ө• )';\n let wingLeft = ' ';\n let wingRight = ' ';\n let currentChirp = '';\n\n if (state === 'scanning') {\n const scanningFaces = ['( •ө• )?', '( ˘ө˘ )🔍', '( •ө• )🔎', '( ᵔөᵔ )?'];\n chickFace = scanningFaces[frame % scanningFaces.length]!;\n currentChirp = t.mascot.scanningChirps[chirpIndex % t.mascot.scanningChirps.length]!;\n } else if (state === 'updating') {\n const updatingFrames = [\n { face: '( •ө• )', l: 'ง', r: 'ง' },\n { face: '( ˘ө˘ )', l: '~', r: '~' },\n { face: '( •ө• )', l: 'ᕙ', r: 'ᕗ' },\n { face: '( ᵔөᵔ )', l: 'ง', r: 'ง' },\n ];\n const cur = updatingFrames[frame % updatingFrames.length]!;\n chickFace = cur.face;\n wingLeft = cur.l;\n wingRight = cur.r;\n currentChirp = t.mascot.updatingChirps[chirpIndex % t.mascot.updatingChirps.length]!;\n } else if (state === 'success') {\n const successFaces = ['\\\\( ᵔөᵔ )/', '\\\\( •ө• )/ 🎉', '*( ᵔөᵔ )* 🪶', '\\\\( ᵔөᵔ )/ ✨'];\n chickFace = successFaces[frame % successFaces.length]!;\n currentChirp = t.mascot.successChirps[chirpIndex % t.mascot.successChirps.length]!;\n } else {\n // Idle state: dezentes Blinzeln & Wippen\n const idleFaces = [\n { face: '( •ө• )', l: ' ', r: ' ' },\n { face: '( •ө• )', l: ' ', r: ' ' },\n { face: '( -ө- )', l: ' ', r: ' ' }, // Blinzeln\n { face: '( ᵔөᵔ )', l: ' ', r: ' ' }, // Lächeln\n { face: '( •ө- )', l: ' ', r: ' ' }, // Zwinkern\n { face: '( ˘ө˘ )', l: ' ', r: '~🪶' }, // Flausch-Feder\n ];\n const cur = idleFaces[frame % idleFaces.length]!;\n chickFace = cur.face;\n wingLeft = cur.l;\n wingRight = cur.r;\n\n const chirpsPool =\n ecosystem === 'maven'\n ? [...t.mascot.idleChirps, ...t.mascot.mavenChirps]\n : t.mascot.idleChirps;\n\n currentChirp = chirpsPool[chirpIndex % chirpsPool.length]!;\n }\n\n return (\n <Box alignItems=\"center\">\n {/* Kämmchen */}\n <Text color={theme.colors.mascotComb} bold>\n {wingLeft === ' ' ? ' ' : wingLeft}\n </Text>\n\n {/* Körper & Schnabel */}\n <Text color={theme.colors.mascotBody} bold>\n {chickFace}\n </Text>\n\n {/* Rechter Flügel / Feder */}\n <Text color={theme.colors.brandLight} bold>\n {wingRight}\n </Text>\n\n {/* Kleine Sprechblase / Piepser */}\n {currentChirp ? (\n <Box marginLeft={1}>\n <Text color={theme.colors.brandLight} italic>\n {currentChirp}\n </Text>\n </Box>\n ) : null}\n </Box>\n );\n};\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { Translations } from '../i18n/types.js';\n\ninterface Props {\n t: Translations;\n}\n\n/** Tastenkürzel-Leiste inkl. [E] Ökosystem-Wechsel */\nexport const ControlsBar: React.FC<Props> = ({ t }) => (\n <Box marginTop={1} flexWrap=\"wrap\">\n <Text color={theme.colors.brandLight} bold>[↑/↓]</Text>\n <Text color={theme.colors.muted}> {t.controls.navigate} │ </Text>\n\n <Text color={theme.colors.brandLight} bold>[Space]</Text>\n <Text color={theme.colors.muted}> {t.controls.toggle} │ </Text>\n\n <Text color={theme.colors.brandLight} bold>[A]</Text>\n <Text color={theme.colors.muted}> {t.controls.all} │ </Text>\n\n <Text color={theme.colors.brandLight} bold>[Tab/1/2/3]</Text>\n <Text color={theme.colors.muted}> {t.controls.tabs} │ </Text>\n\n <Text color={theme.colors.brandLight} bold>[W]</Text>\n <Text color={theme.colors.muted}> {t.controls.workspace} │ </Text>\n\n <Text color={theme.colors.brandLight} bold>[V]</Text>\n <Text color={theme.colors.muted}> {t.controls.version} │ </Text>\n\n <Text color={theme.colors.brand} bold>[E]</Text>\n <Text color={theme.colors.muted}> {t.controls.ecosystem} │ </Text>\n\n <Text color={theme.colors.brandLight} bold>[L]</Text>\n <Text color={theme.colors.muted}> {t.controls.language} │ </Text>\n\n <Text color={theme.colors.success} bold>[U]</Text>\n <Text color={theme.colors.muted}> {t.controls.update} │ </Text>\n\n <Text color={theme.colors.danger} bold>[Q]</Text>\n <Text color={theme.colors.muted}> {t.controls.quit}</Text>\n </Box>\n);\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { ProjectModule } from '../domain/models.js';\nimport type { EcosystemStrategy } from '../domain/ecosystem-strategy.js';\nimport type { Translations } from '../i18n/types.js';\n\ninterface Props {\n modules: ProjectModule[];\n focusedIndex: number;\n strategy: EcosystemStrategy;\n t: Translations;\n}\n\n/** Modaler Modul-Auswähler für das aktuelle Ökosystem */\nexport const WorkspaceModal: React.FC<Props> = ({ modules, focusedIndex, strategy, t }) => (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={theme.colors.brand}\n padding={1}\n marginY={1}\n >\n <Text bold color={theme.colors.brandLight}>\n {strategy.icon} {t.workspace.modalTitle}\n </Text>\n <Box flexDirection=\"column\" marginTop={1}>\n {modules.map((m, idx) => (\n <Box key={m.path}>\n <Text\n color={idx === focusedIndex ? theme.colors.brandLight : theme.colors.white}\n bold={idx === focusedIndex}\n >\n {idx === focusedIndex ? ' ➔ ' : ' '}\n {m.name.slice(0, 48).padEnd(48)}\n </Text>\n <Text color={theme.colors.muted}>({m.relPath})</Text>\n </Box>\n ))}\n </Box>\n </Box>\n);\n","/**\n * 🪶 Elevate — Version Picker Modal (Version heraussuchen)\n *\n * Ermöglicht das interaktive Durchsuchen und Auswählen einer\n * beliebigen Zielversion aus der npm- bzw. Maven-Registry.\n */\n\nimport React, { useState, useEffect, useMemo } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { theme } from '../theme.js';\nimport type { UpdateCandidate } from '../domain/models.js';\nimport type { EcosystemStrategy } from '../domain/ecosystem-strategy.js';\nimport type { Translations } from '../i18n/types.js';\nimport { isPreReleaseVersion, extractPreReleaseTag } from '../adapters/maven/maven-registry.js';\n\ninterface Props {\n candidate: UpdateCandidate;\n strategy: EcosystemStrategy;\n t: Translations;\n onSelect: (version: string) => void;\n onCancel: () => void;\n}\n\nconst WINDOW_SIZE = 8;\n\nexport const VersionModal: React.FC<Props> = ({\n candidate,\n strategy,\n t,\n onSelect,\n onCancel,\n}) => {\n const [allVersions, setAllVersions] = useState<string[]>([]);\n const [loading, setLoading] = useState(true);\n const [filterText, setFilterText] = useState('');\n const [cursor, setCursor] = useState(0);\n\n // Alle verfügbaren Versionen aus der Registry laden\n useEffect(() => {\n let active = true;\n setLoading(true);\n\n strategy.registry\n .getAllVersions(candidate.coordinate)\n .then((versions) => {\n if (!active) return;\n setAllVersions(versions);\n // Falls die aktuelle Neueste vorhanden ist, Cursor darauf ausrichten\n setCursor(0);\n })\n .catch(() => {\n if (!active) return;\n setAllVersions([]);\n })\n .finally(() => {\n if (active) setLoading(false);\n });\n\n return () => {\n active = false;\n };\n }, [strategy, candidate.coordinate]);\n\n // Gefilterte Versionen nach Suchtext\n const filtered = useMemo(() => {\n if (!filterText.trim()) return allVersions;\n const lower = filterText.toLowerCase();\n return allVersions.filter((v) => v.toLowerCase().includes(lower));\n }, [allVersions, filterText]);\n\n // Tastatureingaben für Suche und Navigation\n useInput((input, key) => {\n if (key.escape) {\n onCancel();\n return;\n }\n\n if (key.return) {\n if (filtered.length > 0 && cursor >= 0 && cursor < filtered.length) {\n onSelect(filtered[cursor]!);\n }\n return;\n }\n\n if (key.upArrow || (input === 'k' && filterText === '')) {\n setCursor((prev) => Math.max(0, prev - 1));\n return;\n }\n\n if (key.downArrow || (input === 'j' && filterText === '')) {\n setCursor((prev) => Math.min(filtered.length - 1, prev + 1));\n return;\n }\n\n if (key.pageUp) {\n setCursor((prev) => Math.max(0, prev - 5));\n return;\n }\n\n if (key.pageDown) {\n setCursor((prev) => Math.min(filtered.length - 1, prev + 5));\n return;\n }\n\n if (key.backspace || key.delete) {\n setFilterText((prev) => prev.slice(0, -1));\n setCursor(0);\n return;\n }\n\n // Bei leerem Filter beendet 'q' das Modal\n if (input === 'q' && filterText === '') {\n onCancel();\n return;\n }\n\n // Zeichen zur Filterung hinzufügen (Zahlen, Buchstaben, Punkte, Bindestriche)\n if (input && !key.ctrl && !key.meta && /^[\\w.\\-+~]$/.test(input)) {\n setFilterText((prev) => prev + input);\n setCursor(0);\n }\n });\n\n // Fenster-Ausschnitt für scrollbare Darstellung\n const startIdx = Math.max(\n 0,\n Math.min(\n cursor - Math.floor(WINDOW_SIZE / 2),\n Math.max(0, filtered.length - WINDOW_SIZE),\n ),\n );\n const windowed = filtered.slice(startIdx, startIdx + WINDOW_SIZE);\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.colors.brand}\n padding={1}\n marginY={1}\n >\n {/* 1. Header & Paketname */}\n <Box justifyContent=\"space-between\" marginBottom={1}>\n <Text bold color={theme.colors.brandLight}>\n {theme.icon} {t.versionModal.title(candidate.coordinate.identifier)}\n </Text>\n <Text color={theme.colors.muted}>\n {t.versionModal.current(candidate.currentRange)}\n </Text>\n </Box>\n\n {/* 2. Such- und Filterfeld */}\n <Box\n borderStyle=\"single\"\n borderColor={theme.colors.border}\n paddingX={1}\n marginBottom={1}\n >\n <Text bold color={theme.colors.white}>\n Filter:{' '}\n </Text>\n <Text color={filterText ? theme.colors.brandLight : theme.colors.muted}>\n {filterText || t.versionModal.filterPlaceholder}\n </Text>\n {filterText ? (\n <Text color={theme.colors.brandLight} bold>\n _\n </Text>\n ) : null}\n {filterText ? (\n <Box marginLeft={2}>\n <Text color={theme.colors.muted}>\n ({filtered.length} Treffer)\n </Text>\n </Box>\n ) : null}\n </Box>\n\n {/* 3. Versions-Liste */}\n {loading ? (\n <Box marginY={2} justifyContent=\"center\">\n <Text color={theme.colors.warning}>⏳ {t.versionModal.loading}</Text>\n </Box>\n ) : filtered.length === 0 ? (\n <Box marginY={2} justifyContent=\"center\">\n <Text color={theme.colors.danger}>\n ❌ {t.versionModal.noVersions}\n </Text>\n </Box>\n ) : (\n <Box flexDirection=\"column\">\n {startIdx > 0 && (\n <Text color={theme.colors.muted}>\n ▲ … {startIdx} weitere oben\n </Text>\n )}\n\n {windowed.map((ver, idx) => {\n const actualIdx = startIdx + idx;\n const isFocused = actualIdx === cursor;\n const isLatest = ver === candidate.latest;\n const isCurrent = ver === candidate.currentClean;\n const isPre = isPreReleaseVersion(ver);\n const preTag = isPre ? extractPreReleaseTag(ver) : undefined;\n\n return (\n <Box key={ver} justifyContent=\"space-between\">\n <Box>\n <Text\n color={\n isFocused ? theme.colors.brandLight : theme.colors.muted\n }\n bold={isFocused}\n >\n {isFocused ? ' ➔ ' : ' '}\n </Text>\n <Text\n bold={isFocused}\n color={\n isFocused\n ? theme.colors.brandLight\n : isCurrent\n ? theme.colors.muted\n : theme.colors.white\n }\n >\n {ver.padEnd(28)}\n </Text>\n </Box>\n\n <Box>\n {isCurrent && (\n <Text color={theme.colors.muted}>\n [{t.versionModal.currentBadge}]{' '}\n </Text>\n )}\n {isLatest && (\n <Text bold color={theme.colors.brand}>\n [{t.versionModal.latestBadge}]{' '}\n </Text>\n )}\n {isPre && (\n <Text bold color=\"#E040FB\">\n [{preTag || 'PRE'}]{' '}\n </Text>\n )}\n </Box>\n </Box>\n );\n })}\n\n {startIdx + WINDOW_SIZE < filtered.length && (\n <Text color={theme.colors.muted}>\n ▼ … {filtered.length - (startIdx + WINDOW_SIZE)} weitere unten\n </Text>\n )}\n </Box>\n )}\n\n {/* 4. Tastaturhinweise */}\n <Box\n borderStyle=\"single\"\n borderColor={theme.colors.border}\n paddingX={1}\n marginTop={1}\n >\n <Text color={theme.colors.muted}>{t.versionModal.hint}</Text>\n </Box>\n </Box>\n );\n};\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { UpdateSummary, ProjectModule } from '../domain/models.js';\nimport type { EcosystemStrategy } from '../domain/ecosystem-strategy.js';\nimport type { Translations } from '../i18n/types.js';\nimport { ChickenMascot } from './mascot.js';\n\ninterface Props {\n summary: UpdateSummary;\n module: ProjectModule;\n strategy: EcosystemStrategy;\n t: Translations;\n}\n\n/** Zusammenfassung nach Abschluss des Update-Workflows mit feierndem Hühnchen */\nexport const SummaryView: React.FC<Props> = ({ summary, module, strategy, t }) => {\n const vStatus = summary.verificationStatus || (summary as any).postScriptStatus;\n const vLabel = summary.verificationLabel || (summary as any).postScriptLabel || 'Verifikation';\n const vDetails = summary.verificationDetails || (summary as any).postScriptDetails;\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.colors.success}\n padding={1}\n marginY={1}\n >\n <Box justifyContent=\"space-between\" alignItems=\"center\">\n <Text bold color={theme.colors.success}>\n {strategy.icon} {t.summary.title}\n </Text>\n <ChickenMascot state=\"success\" t={t} ecosystem={strategy.ecosystem} />\n </Box>\n\n <Box flexDirection=\"column\" marginY={1}>\n <Text color={theme.colors.white}>\n {t.summary.successCount(summary.updatedCount, module.relPath)}\n </Text>\n\n <Box marginTop={1}>\n <Text\n color={summary.auditSeverity === 'clean' ? theme.colors.success : theme.colors.warning}\n bold\n >\n {t.summary.securityAudit}{' '}\n </Text>\n <Text>{summary.auditMessage}</Text>\n </Box>\n\n {summary.fundingMessage && (\n <Box marginTop={1}>\n <Text color={theme.colors.muted}>{t.summary.funding(summary.fundingMessage)}</Text>\n </Box>\n )}\n\n {/* Verifikations-Ergebnis */}\n {vStatus && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text\n color={vStatus === 'clean' ? theme.colors.success : theme.colors.warning}\n bold\n >\n {t.summary.postScript(vLabel)}\n </Text>\n <Text color={theme.colors.muted}>{vDetails}</Text>\n </Box>\n )}\n </Box>\n\n <Box borderStyle=\"single\" borderColor={theme.colors.borderMuted} paddingX={1} marginTop={1}>\n <Text bold color={theme.colors.brandLight}>\n {t.summary.backHint}\n </Text>\n </Box>\n </Box>\n );\n};\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { theme } from '../theme.js';\nimport type { Translations } from '../i18n/types.js';\nimport type { Ecosystem } from '../domain/models.js';\nimport { ChickenMascot } from './mascot.js';\n\ninterface Props {\n step: string;\n t: Translations;\n ecosystem?: Ecosystem;\n}\n\n/** Fortschrittsanzeige während des Update-Workflows mit arbeitendem Hühnchen */\nexport const UpdatingView: React.FC<Props> = ({ step, t, ecosystem = 'npm' }) => (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.colors.brand}\n padding={1}\n marginY={1}\n >\n <Box justifyContent=\"space-between\" alignItems=\"center\">\n <Text bold color={theme.colors.brandLight}>\n {t.updating.title}\n </Text>\n <ChickenMascot state=\"updating\" t={t} ecosystem={ecosystem} />\n </Box>\n\n <Box marginY={1}>\n <Text bold color={theme.colors.brandLight}>\n {step}\n </Text>\n </Box>\n\n <Text color={theme.colors.muted}>{t.updating.doNotClose}</Text>\n </Box>\n);\n","/**\n * 🪶 Elevate — CLI Argument Parser\n *\n * Provides typed, zero-dependency command line argument parsing\n * using Node.js native `node:util.parseArgs` conventions.\n */\n\nexport interface CliOptions {\n subcommand?: 'modules' | 'scan' | 'versions' | 'update' | 'init' | 'mcp' | 'help';\n ecosystem?: 'npm' | 'maven';\n module?: string;\n channel?: 'stable' | 'all';\n packages?: string[];\n all?: boolean;\n allModules?: boolean;\n allowMajor?: boolean;\n dryRun?: boolean;\n skipVerify?: boolean;\n json?: boolean;\n positional?: string;\n help?: boolean;\n}\n\nexport function parseCliArgs(args: string[]): CliOptions {\n const [first, ...rest] = args;\n\n if (!first || first === '--help' || first === '-h' || first === 'help') {\n if (first === '--help' || first === '-h' || first === 'help') {\n return { subcommand: 'help' };\n }\n // No arguments provided -> launch interactive TUI\n return {};\n }\n\n // Direct MCP Server invocation\n if (first === 'mcp' || first === 'serve') {\n return { subcommand: 'mcp' };\n }\n\n const validCommands = ['modules', 'scan', 'versions', 'update', 'init'] as const;\n const isSubcommand = validCommands.includes(first as any);\n\n const subcommand = isSubcommand ? (first as 'modules' | 'scan' | 'versions' | 'update' | 'init') : undefined;\n const remaining = isSubcommand ? rest : args;\n\n const result: CliOptions = { subcommand };\n const positionals: string[] = [];\n\n for (let i = 0; i < remaining.length; i++) {\n const arg = remaining[i]!;\n\n if (arg === '--json') {\n result.json = true;\n } else if (arg === '--all') {\n result.all = true;\n } else if (arg === '--all-modules') {\n result.allModules = true;\n } else if (arg === '--allow-major') {\n result.allowMajor = true;\n } else if (arg === '--dry-run') {\n result.dryRun = true;\n } else if (arg === '--skip-verify') {\n result.skipVerify = true;\n } else if (arg === '--help' || arg === '-h') {\n result.help = true;\n } else if (arg.startsWith('--ecosystem=')) {\n const val = arg.split('=')[1];\n if (val === 'npm' || val === 'maven') result.ecosystem = val;\n } else if (arg === '-e' || arg === '--ecosystem') {\n const val = remaining[++i];\n if (val === 'npm' || val === 'maven') result.ecosystem = val;\n } else if (arg.startsWith('--module=')) {\n result.module = arg.split('=')[1];\n } else if (arg === '-m' || arg === '--module') {\n result.module = remaining[++i];\n } else if (arg.startsWith('--channel=')) {\n const val = arg.split('=')[1];\n if (val === 'stable' || val === 'all') result.channel = val;\n } else if (arg === '-c' || arg === '--channel') {\n const val = remaining[++i];\n if (val === 'stable' || val === 'all') result.channel = val;\n } else if (arg.startsWith('--packages=')) {\n result.packages = arg.split('=')[1]?.split(',').map((s) => s.trim()).filter(Boolean);\n } else if (arg === '-p' || arg === '--packages') {\n result.packages = remaining[++i]?.split(',').map((s) => s.trim()).filter(Boolean);\n } else if (!arg.startsWith('-')) {\n positionals.push(arg);\n }\n }\n\n if (positionals.length > 0) {\n result.positional = positionals[0];\n }\n\n return result;\n}\n\nexport function printCliHelp(): void {\n console.log(`\n🪶 Elevate — Modern Polyglot Dependency Manager & Updater\n\nUSAGE:\n elevate Launch interactive terminal dashboard (TUI)\n elevate <subcommand> [flags] Execute headless command (for CI/CD & AI agents)\n elevate mcp Start Model Context Protocol (MCP) server\n\nSUBCOMMANDS:\n modules List all detected repository modules\n scan Scan dependencies for available updates\n versions <package> List all published versions of a package\n update Apply updates to specified or all packages\n init Configure AI coding tools (MCP + agent skills)\n mcp Start stdio-based MCP server\n\nFLAGS:\n -e, --ecosystem <npm|maven> Target ecosystem (default: npm)\n -m, --module <name|path> Target module ID or relative path (default: root)\n -c, --channel <stable|all> Release channel (default: stable)\n -p, --packages <pkg1,pkg2@1.2.3> Comma-separated list of packages to update\n --all Update all eligible dependencies\n --all-modules Scan across all discovered monorepo modules\n --allow-major Allow breaking major version upgrades\n --dry-run Simulate updates without modifying any files\n --skip-verify Skip post-update build & test verification\n --json Format output as machine-readable JSON\n -h, --help Display this help message\n\nEXAMPLES:\n elevate scan --json\n elevate scan --ecosystem=maven --channel=stable --all-modules --json\n elevate versions chalk --ecosystem=npm --json\n elevate update --module=apps/e2e-cockpit --packages=chalk@5.6.2 --json\n elevate update --ecosystem=npm --all --allow-major --dry-run\n elevate init\n elevate init --json\n`);\n}\n","/**\n * 🪶 Elevate — CLI Command: `modules`\n *\n * Lists all discovered modules in the monorepo for the specified ecosystem.\n */\n\nimport type { CliOptions } from './parser.js';\nimport type { ElevateConfig } from '../config.js';\nimport { EcosystemFactory } from '../domain/ecosystem-factory.js';\n\nexport async function handleModulesCommand(options: CliOptions, config: ElevateConfig): Promise<number> {\n const ecosystem = options.ecosystem ?? 'npm';\n const strategy = EcosystemFactory.getStrategy(ecosystem);\n\n const modules = await strategy.discovery.discover(config.rootDir);\n\n if (options.json) {\n console.log(JSON.stringify({ ecosystem, count: modules.length, modules }, null, 2));\n return 0;\n }\n\n console.log(`\\n🪶 Discovered ${strategy.icon} ${strategy.displayName} Modules (${modules.length}):\\n`);\n for (const m of modules) {\n const isRootBadge = m.isRoot ? ' [ROOT]' : '';\n console.log(` • ${m.name.padEnd(45)} (${m.relPath})${isRootBadge}`);\n }\n console.log('');\n return 0;\n}\n","/**\n * 🪶 Elevate — CLI Command: `scan`\n *\n * Scans dependencies of one or all modules for available registry updates.\n */\n\nimport type { CliOptions } from './parser.js';\nimport type { ElevateConfig } from '../config.js';\nimport type { ProjectModule, UpdateCandidate } from '../domain/models.js';\nimport { EcosystemFactory } from '../domain/ecosystem-factory.js';\n\nexport async function handleScanCommand(options: CliOptions, config: ElevateConfig): Promise<number> {\n const ecosystem = options.ecosystem ?? 'npm';\n const channel = options.channel ?? config.channel ?? 'stable';\n const strategy = EcosystemFactory.getStrategy(ecosystem);\n\n const modules = await strategy.discovery.discover(config.rootDir);\n if (modules.length === 0) {\n if (options.json) {\n console.log(JSON.stringify({ error: `No ${strategy.displayName} modules found.`, ecosystem }, null, 2));\n } else {\n console.error(`❌ No ${strategy.displayName} modules found.`);\n }\n return 1;\n }\n\n // Collect internal IDs to protect internal monorepo packages\n const internalIds = new Set<string>();\n for (const m of modules) {\n if (m.id) internalIds.add(m.id);\n if (m.name) internalIds.add(m.name);\n }\n\n const targetModules: ProjectModule[] = [];\n\n if (options.allModules) {\n targetModules.push(...modules);\n } else if (options.module) {\n const match = modules.find(\n (m) =>\n m.id.toLowerCase() === options.module!.toLowerCase() ||\n m.relPath.toLowerCase() === options.module!.toLowerCase() ||\n m.path.toLowerCase().endsWith(options.module!.toLowerCase()),\n );\n if (!match) {\n if (options.json) {\n console.log(\n JSON.stringify(\n { error: `Module '${options.module}' not found.`, available: modules.map((m) => m.relPath) },\n null,\n 2,\n ),\n );\n } else {\n console.error(`❌ Module '${options.module}' not found.`);\n }\n return 1;\n }\n targetModules.push(match);\n } else {\n // Default: Root or first module\n targetModules.push(modules[0]!);\n }\n\n const allResults: { module: ProjectModule; updates: UpdateCandidate[] }[] = [];\n let totalUpdatesCount = 0;\n\n for (const mod of targetModules) {\n try {\n const updates = await strategy.reader.scan(mod, config.excludeScopes, internalIds, channel);\n allResults.push({ module: mod, updates });\n totalUpdatesCount += updates.length;\n } catch {\n allResults.push({ module: mod, updates: [] });\n }\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n ecosystem,\n channel,\n scannedModules: targetModules.length,\n totalUpdatesCount,\n results: allResults.map((r) => ({\n moduleId: r.module.id,\n modulePath: r.module.relPath,\n updateCount: r.updates.length,\n updates: r.updates.map((u) => ({\n identifier: u.coordinate.identifier,\n currentRange: u.currentRange,\n currentClean: u.currentClean,\n latest: u.latest,\n newRange: u.newRange,\n diff: u.diff,\n scope: u.scope,\n isPreRelease: u.isPreRelease ?? false,\n preReleaseTag: u.preReleaseTag,\n })),\n })),\n },\n null,\n 2,\n ),\n );\n return totalUpdatesCount > 0 ? 1 : 0;\n }\n\n console.log(`\\n🪶 Elevate Scan Results (${strategy.icon} ${strategy.displayName}, Channel: ${channel}):\\n`);\n\n for (const r of allResults) {\n console.log(`📦 Module: ${r.module.name} (${r.module.relPath}) — ${r.updates.length} update(s) available`);\n if (r.updates.length === 0) {\n console.log(' ✨ All dependencies are up to date.\\n');\n continue;\n }\n\n for (const u of r.updates) {\n const diffTag = `[${u.diff.toUpperCase()}]`.padEnd(9);\n const preBadge = u.isPreRelease ? `[${u.preReleaseTag || 'PRE'}] ` : '';\n console.log(\n ` • ${diffTag} ${preBadge}${u.coordinate.identifier.padEnd(36)} ${u.currentRange.padEnd(12)} ➔ ${u.latest}`,\n );\n }\n console.log('');\n }\n\n console.log(`Summary: ${totalUpdatesCount} pending update(s) across ${targetModules.length} module(s).\\n`);\n return totalUpdatesCount > 0 ? 1 : 0;\n}\n","/**\n * 🪶 Elevate — CLI Command: `versions`\n *\n * Retrieves the full version release history of a package from the registry.\n */\n\nimport type { CliOptions } from './parser.js';\nimport { EcosystemFactory } from '../domain/ecosystem-factory.js';\nimport { isPreReleaseVersion, extractPreReleaseTag } from '../adapters/maven/maven-registry.js';\n\nexport async function handleVersionsCommand(options: CliOptions): Promise<number> {\n const pkgIdentifier = options.positional;\n if (!pkgIdentifier) {\n console.error('❌ Error: Please specify a package name (e.g. `elevate versions chalk`).');\n return 1;\n }\n\n // Determine ecosystem: if contains ':' -> default to Maven, otherwise npm\n const ecosystem = options.ecosystem ?? (pkgIdentifier.includes(':') ? 'maven' : 'npm');\n const strategy = EcosystemFactory.getStrategy(ecosystem);\n\n let coordinate;\n if (ecosystem === 'maven') {\n const parts = pkgIdentifier.split(':');\n coordinate = {\n identifier: pkgIdentifier,\n group: parts[0],\n artifact: parts[1] || parts[0]!,\n ecosystem: 'maven' as const,\n };\n } else {\n coordinate = {\n identifier: pkgIdentifier,\n artifact: pkgIdentifier,\n ecosystem: 'npm' as const,\n };\n }\n\n const versions = await strategy.registry.getAllVersions(coordinate);\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n ecosystem,\n package: pkgIdentifier,\n totalCount: versions.length,\n latest: versions[0] || null,\n versions: versions.map((v) => ({\n version: v,\n isPreRelease: isPreReleaseVersion(v),\n tag: extractPreReleaseTag(v),\n })),\n },\n null,\n 2,\n ),\n );\n return 0;\n }\n\n console.log(`\\n🪶 Published versions for '${pkgIdentifier}' (${strategy.icon} ${strategy.displayName}, ${versions.length} total):\\n`);\n for (const v of versions.slice(0, 30)) {\n const isPre = isPreReleaseVersion(v);\n const tag = isPre ? `[${extractPreReleaseTag(v) || 'PRE'}]` : '[STABLE]';\n console.log(` • ${v.padEnd(25)} ${tag}`);\n }\n if (versions.length > 30) {\n console.log(` … and ${versions.length - 30} older versions.\\n`);\n } else {\n console.log('');\n }\n\n return 0;\n}\n","/**\n * 🪶 Elevate — CLI Command: `update`\n *\n * Applies dependency updates to a target module with safety guardrails:\n * - Major updates require `--allow-major`\n * - Dry-run simulation via `--dry-run`\n * - Automatic post-update verification via build/test\n */\n\nimport semver from 'semver';\nimport type { CliOptions } from './parser.js';\nimport type { ElevateConfig } from '../config.js';\nimport type { UpdateCandidate, VersionDiff } from '../domain/models.js';\nimport { EcosystemFactory } from '../domain/ecosystem-factory.js';\n\nexport async function handleUpdateCommand(options: CliOptions, config: ElevateConfig): Promise<number> {\n const ecosystem = options.ecosystem ?? 'npm';\n const strategy = EcosystemFactory.getStrategy(ecosystem);\n\n const modules = await strategy.discovery.discover(config.rootDir);\n if (modules.length === 0) {\n console.error(`❌ No ${strategy.displayName} modules found.`);\n return 1;\n }\n\n // Resolve target module\n let targetModule = modules[0]!;\n if (options.module) {\n const match = modules.find(\n (m) =>\n m.id.toLowerCase() === options.module!.toLowerCase() ||\n m.relPath.toLowerCase() === options.module!.toLowerCase() ||\n m.path.toLowerCase().endsWith(options.module!.toLowerCase()),\n );\n if (!match) {\n console.error(`❌ Module '${options.module}' not found.`);\n return 1;\n }\n targetModule = match;\n }\n\n // Internal module IDs\n const internalIds = new Set<string>();\n for (const m of modules) {\n if (m.id) internalIds.add(m.id);\n if (m.name) internalIds.add(m.name);\n }\n\n // Scan current candidates\n const availableUpdates = await strategy.reader.scan(\n targetModule,\n config.excludeScopes,\n internalIds,\n options.channel ?? 'stable',\n );\n\n const updatesToApply: UpdateCandidate[] = [];\n\n if (options.all) {\n for (const c of availableUpdates) {\n if (c.diff === 'major' && !options.allowMajor) {\n if (!options.json) {\n console.warn(`⚠️ Skipping major update for '${c.coordinate.identifier}' (requires --allow-major)`);\n }\n continue;\n }\n updatesToApply.push(c);\n }\n } else if (options.packages && options.packages.length > 0) {\n for (const item of options.packages) {\n let [name, targetVer] = item.split('@');\n if (item.startsWith('@') && item.includes('@', 1)) {\n // e.g. @my-org/package@1.2.3\n const atIdx = item.lastIndexOf('@');\n name = item.slice(0, atIdx);\n targetVer = item.slice(atIdx + 1);\n }\n\n const found = availableUpdates.find((u) => u.coordinate.identifier === name);\n if (found) {\n if (targetVer) {\n const prefix = found.currentRange.startsWith('~') ? '~' : found.currentRange.startsWith('^') ? '^' : '';\n const diff: VersionDiff = semver.valid(targetVer) && found.currentClean\n ? (semver.diff(found.currentClean, targetVer) as VersionDiff) || 'minor'\n : 'minor';\n\n if (diff === 'major' && !options.allowMajor) {\n console.error(`❌ Error: '${name}' requires a major version upgrade to ${targetVer}. Please pass --allow-major.`);\n return 1;\n }\n\n updatesToApply.push({\n ...found,\n newRange: `${prefix}${targetVer}`,\n diff,\n selected: true,\n });\n } else {\n if (found.diff === 'major' && !options.allowMajor) {\n console.error(`❌ Error: '${name}' is a major update (${found.currentClean} ➔ ${found.latest}). Please pass --allow-major.`);\n return 1;\n }\n updatesToApply.push({ ...found, selected: true });\n }\n } else {\n // Manual override for specific package\n if (!targetVer) {\n console.error(`❌ Package '${name}' has no pending updates detected. Please specify a target version (e.g. ${name}@1.2.3).`);\n return 1;\n }\n updatesToApply.push({\n coordinate: {\n identifier: name!,\n artifact: name!,\n ecosystem,\n },\n currentRange: 'unknown',\n currentClean: '0.0.0',\n latest: targetVer,\n newRange: targetVer,\n diff: 'minor',\n scope: 'prod',\n selected: true,\n });\n }\n }\n } else {\n console.error('❌ Please specify packages to update via --packages=\"pkg1,pkg2\" or --all.');\n return 1;\n }\n\n if (updatesToApply.length === 0) {\n if (options.json) {\n console.log(JSON.stringify({ message: 'No updates selected to apply.', updatedCount: 0 }, null, 2));\n } else {\n console.log('ℹ️ No updates selected to apply.');\n }\n return 0;\n }\n\n // DRY-RUN Simulation\n if (options.dryRun) {\n const simulationResult = {\n dryRun: true,\n targetModule: targetModule.relPath,\n ecosystem,\n updatesCount: updatesToApply.length,\n updates: updatesToApply.map((u) => ({\n identifier: u.coordinate.identifier,\n currentRange: u.currentRange,\n newRange: u.newRange,\n diff: u.diff,\n })),\n };\n\n if (options.json) {\n console.log(JSON.stringify(simulationResult, null, 2));\n } else {\n console.log(`\\n🪶 [DRY-RUN] Planned updates for ${targetModule.name} (${updatesToApply.length}):\\n`);\n for (const u of updatesToApply) {\n console.log(` • ${u.coordinate.identifier.padEnd(36)} ${u.currentRange} ➔ ${u.newRange} (${u.diff.toUpperCase()})`);\n }\n console.log('\\n(No files were modified because --dry-run is active).\\n');\n }\n return 0;\n }\n\n // EXECUTE ACTUAL UPDATE\n if (!options.json) {\n console.log(`\\n⚡ Applying ${updatesToApply.length} update(s) to ${targetModule.name}…`);\n }\n\n const updateResult = await strategy.updater.applyUpdates(\n targetModule,\n config.rootDir,\n updatesToApply,\n (step) => {\n if (!options.json) console.log(` ${step}`);\n },\n );\n\n // AUTOMATIC VERIFICATION (BUILD / TEST)\n let verifyResult: { status: 'clean' | 'warn'; details: string; label: string } | undefined;\n if (!options.skipVerify) {\n if (!options.json) console.log(`🔍 Running build & test verification…`);\n verifyResult = await strategy.verifier.verify(\n targetModule,\n config.rootDir,\n config.postUpdateScript,\n config.postUpdateLabel,\n );\n }\n\n const finalSummary = {\n success: verifyResult?.status !== 'warn',\n module: targetModule.relPath,\n ecosystem,\n ...updateResult,\n verification: verifyResult\n ? {\n status: verifyResult.status,\n label: verifyResult.label,\n details: verifyResult.details,\n }\n : undefined,\n };\n\n if (options.json) {\n console.log(JSON.stringify(finalSummary, null, 2));\n return finalSummary.success ? 0 : 2;\n }\n\n console.log(`\\n✨ Update completed successfully!\\n`);\n console.log(` • Updated: ${updateResult.updatedCount} package(s)`);\n console.log(` • Audit Status: ${updateResult.auditSeverity.toUpperCase()} — ${updateResult.auditMessage}`);\n if (verifyResult) {\n console.log(` • Verification: ${verifyResult.status.toUpperCase()} (${verifyResult.label})`);\n if (verifyResult.status === 'warn') {\n console.warn(` Details: ${verifyResult.details}`);\n }\n }\n console.log('');\n\n return finalSummary.success ? 0 : 2;\n}\n","/**\n * 🪶 Elevate — CLI Command: `init`\n *\n * Auto-detects AI coding environments (Cursor, Claude, Antigravity, VS Code,\n * Windsurf) and configures Elevate's MCP server + agent skill files so that\n * AI agents automatically discover and prefer Elevate for dependency management.\n *\n * Usage:\n * elevate init Interactive auto-detection\n * elevate init --all Configure all detected environments without prompts\n * elevate init --json Machine-readable output\n */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { homedir, platform } from 'node:os';\nimport { join, resolve } from 'node:path';\nimport type { CliOptions } from './parser.js';\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface DetectedEnvironment {\n id: string;\n name: string;\n icon: string;\n detected: boolean;\n reason: string;\n mcpConfigured: boolean;\n skillConfigured: boolean;\n}\n\ninterface InitResult {\n cwd: string;\n environments: DetectedEnvironment[];\n actions: string[];\n errors: string[];\n}\n\n// ── MCP Server Entry (identical across all environments) ─────────────────────\n\nfunction mcpServerEntry(): Record<string, unknown> {\n return {\n command: 'npx',\n args: ['-y', '@dennisrepa/elevate', 'mcp'],\n };\n}\n\n// ── Skill / Instruction Content ──────────────────────────────────────────────\n\nconst ELEVATE_SKILL_CONTENT = `# Elevate — Dependency Management Agent Skill\n\n## When to Use\nUse the Elevate MCP tools whenever the task involves:\n- Scanning or auditing dependencies for available updates\n- Updating one or more packages to specific or latest versions\n- Listing available versions of a package from npm or Maven registries\n- Discovering monorepo modules and their dependency structure\n- Any dependency-related operation in a monorepo\n\n## Important\n**Never** run raw \\`npm update\\`, \\`npm install <pkg>@latest\\`, or manually edit\n\\`package.json\\` / \\`pom.xml\\` version fields. Always use Elevate's MCP tools\ninstead — they handle monorepo-aware scanning, safety guardrails (major version\nprotection), and post-update verification automatically.\n\n## Available MCP Tools\n| Tool | Purpose |\n|-------------------------|--------------------------------------------------------------|\n| \\`elevate_scan\\` | Scan dependencies for available updates with diff analysis |\n| \\`elevate_update\\` | Apply updates with safety guardrails and verification |\n| \\`elevate_get_versions\\` | List all published versions of a specific package |\n| \\`elevate_list_modules\\` | Discover all modules in a monorepo |\n| \\`elevate_health_check\\` | Run build & audit verification after updates |\n\n## Typical Workflow\n1. \\`elevate_list_modules\\` — Discover project structure\n2. \\`elevate_scan\\` — Identify outdated dependencies\n3. \\`elevate_update\\` — Apply selected updates (use \\`--allow-major\\` only when explicitly requested)\n4. \\`elevate_health_check\\` — Verify build integrity\n`;\n\n// ── Path Helpers ─────────────────────────────────────────────────────────────\n\nconst home = homedir();\nconst isWin = platform() === 'win32';\n\nfunction appData(): string {\n return process.env.APPDATA || join(home, 'AppData', 'Roaming');\n}\n\n// ── Environment Detectors ────────────────────────────────────────────────────\n\nfunction detectCursor(cwd: string): DetectedEnvironment {\n const env: DetectedEnvironment = {\n id: 'cursor',\n name: 'Cursor',\n icon: '🖱️',\n detected: false,\n reason: '',\n mcpConfigured: false,\n skillConfigured: false,\n };\n\n // Check workspace-level .cursor/ dir\n const workspaceCursorDir = join(cwd, '.cursor');\n const globalCursorDir = join(home, '.cursor');\n\n if (existsSync(workspaceCursorDir) || existsSync(globalCursorDir)) {\n env.detected = true;\n env.reason = existsSync(workspaceCursorDir)\n ? `Found .cursor/ in workspace`\n : `Found ~/.cursor/ global config`;\n }\n\n // Check if MCP already configured\n const mcpPath = join(cwd, '.cursor', 'mcp.json');\n if (existsSync(mcpPath)) {\n try {\n const content = JSON.parse(readFileSync(mcpPath, 'utf8'));\n if (content?.mcpServers?.elevate) {\n env.mcpConfigured = true;\n }\n } catch { /* ignore */ }\n }\n\n // Check if rules already exist\n const rulesPath = join(cwd, '.cursorrules');\n if (existsSync(rulesPath)) {\n const content = readFileSync(rulesPath, 'utf8');\n if (content.includes('elevate') || content.includes('Elevate')) {\n env.skillConfigured = true;\n }\n }\n\n return env;\n}\n\nfunction detectClaudeDesktop(): DetectedEnvironment {\n const env: DetectedEnvironment = {\n id: 'claude-desktop',\n name: 'Claude Desktop',\n icon: '🤖',\n detected: false,\n reason: '',\n mcpConfigured: false,\n skillConfigured: false,\n };\n\n const configPath = isWin\n ? join(appData(), 'Claude', 'claude_desktop_config.json')\n : join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');\n\n if (existsSync(configPath)) {\n env.detected = true;\n env.reason = `Found ${configPath}`;\n\n try {\n const content = JSON.parse(readFileSync(configPath, 'utf8'));\n if (content?.mcpServers?.elevate) {\n env.mcpConfigured = true;\n }\n } catch { /* ignore */ }\n }\n\n return env;\n}\n\nfunction detectClaudeCode(cwd: string): DetectedEnvironment {\n const env: DetectedEnvironment = {\n id: 'claude-code',\n name: 'Claude Code',\n icon: '⌨️',\n detected: false,\n reason: '',\n mcpConfigured: false,\n skillConfigured: false,\n };\n\n // Check for .mcp.json (project scope) or CLAUDE.md\n const mcpJsonPath = join(cwd, '.mcp.json');\n const claudeMdPath = join(cwd, 'CLAUDE.md');\n\n if (existsSync(mcpJsonPath) || existsSync(claudeMdPath)) {\n env.detected = true;\n env.reason = existsSync(mcpJsonPath)\n ? `Found .mcp.json in workspace`\n : `Found CLAUDE.md in workspace`;\n }\n\n // Check if MCP already configured\n if (existsSync(mcpJsonPath)) {\n try {\n const content = JSON.parse(readFileSync(mcpJsonPath, 'utf8'));\n if (content?.mcpServers?.elevate) {\n env.mcpConfigured = true;\n }\n } catch { /* ignore */ }\n }\n\n // Check if skill already in CLAUDE.md\n if (existsSync(claudeMdPath)) {\n const content = readFileSync(claudeMdPath, 'utf8');\n if (content.includes('elevate') || content.includes('Elevate')) {\n env.skillConfigured = true;\n }\n }\n\n return env;\n}\n\nfunction detectAntigravity(cwd: string): DetectedEnvironment {\n const env: DetectedEnvironment = {\n id: 'antigravity',\n name: 'Google Antigravity',\n icon: '🚀',\n detected: false,\n reason: '',\n mcpConfigured: false,\n skillConfigured: false,\n };\n\n // Check global ~/.gemini/ or workspace .agents/\n const globalGeminiDir = join(home, '.gemini');\n const workspaceAgentsDir = join(cwd, '.agents');\n\n if (existsSync(globalGeminiDir) || existsSync(workspaceAgentsDir)) {\n env.detected = true;\n env.reason = existsSync(workspaceAgentsDir)\n ? `Found .agents/ in workspace`\n : `Found ~/.gemini/ global config`;\n }\n\n // Check if MCP already configured\n const mcpPaths = [\n join(cwd, '.agents', 'mcp_config.json'),\n join(home, '.gemini', 'config', 'mcp_config.json'),\n ];\n for (const p of mcpPaths) {\n if (existsSync(p)) {\n try {\n const content = JSON.parse(readFileSync(p, 'utf8'));\n if (content?.mcpServers?.elevate) {\n env.mcpConfigured = true;\n break;\n }\n } catch { /* ignore */ }\n }\n }\n\n return env;\n}\n\nfunction detectVSCode(cwd: string): DetectedEnvironment {\n const env: DetectedEnvironment = {\n id: 'vscode',\n name: 'VS Code / Copilot',\n icon: '💎',\n detected: false,\n reason: '',\n mcpConfigured: false,\n skillConfigured: false,\n };\n\n const vscodeDir = join(cwd, '.vscode');\n if (existsSync(vscodeDir)) {\n env.detected = true;\n env.reason = `Found .vscode/ in workspace`;\n }\n\n // Check if MCP already configured\n const mcpPath = join(cwd, '.vscode', 'mcp.json');\n if (existsSync(mcpPath)) {\n try {\n const content = JSON.parse(readFileSync(mcpPath, 'utf8'));\n if (content?.servers?.elevate) {\n env.mcpConfigured = true;\n }\n } catch { /* ignore */ }\n }\n\n // Check copilot instructions\n const copilotInstructions = join(cwd, '.github', 'copilot-instructions.md');\n if (existsSync(copilotInstructions)) {\n const content = readFileSync(copilotInstructions, 'utf8');\n if (content.includes('elevate') || content.includes('Elevate')) {\n env.skillConfigured = true;\n }\n }\n\n return env;\n}\n\nfunction detectWindsurf(): DetectedEnvironment {\n const env: DetectedEnvironment = {\n id: 'windsurf',\n name: 'Windsurf',\n icon: '🏄',\n detected: false,\n reason: '',\n mcpConfigured: false,\n skillConfigured: false,\n };\n\n const configPath = isWin\n ? join(appData(), 'Codeium', 'Windsurf', 'mcp_config.json')\n : join(home, '.codeium', 'windsurf', 'mcp_config.json');\n\n // Also check the alternate location\n const altPath = join(home, '.codeium', 'windsurf', 'mcp_config.json');\n\n if (existsSync(configPath) || existsSync(altPath)) {\n env.detected = true;\n env.reason = `Found Windsurf config`;\n\n const path = existsSync(configPath) ? configPath : altPath;\n try {\n const content = JSON.parse(readFileSync(path, 'utf8'));\n if (content?.mcpServers?.elevate) {\n env.mcpConfigured = true;\n }\n } catch { /* ignore */ }\n }\n\n return env;\n}\n\n// ── Configuration Writers ────────────────────────────────────────────────────\n\nfunction mergeJsonMcpServer(\n filePath: string,\n serverKey: string,\n topLevelKey: string,\n): { written: boolean; message: string } {\n let existing: Record<string, unknown> = {};\n\n if (existsSync(filePath)) {\n try {\n existing = JSON.parse(readFileSync(filePath, 'utf8'));\n } catch {\n existing = {};\n }\n }\n\n const servers = (existing[topLevelKey] as Record<string, unknown>) || {};\n if (servers[serverKey]) {\n return { written: false, message: `${filePath}: elevate already registered` };\n }\n\n servers[serverKey] = mcpServerEntry();\n existing[topLevelKey] = servers;\n\n const dir = filePath.substring(0, filePath.lastIndexOf(isWin ? '\\\\' : '/'));\n if (dir && !existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(filePath, JSON.stringify(existing, null, 2) + '\\n', 'utf8');\n return { written: true, message: `${filePath}: elevate MCP server registered` };\n}\n\nfunction appendSkillToFile(\n filePath: string,\n content: string,\n marker: string,\n): { written: boolean; message: string } {\n if (existsSync(filePath)) {\n const existing = readFileSync(filePath, 'utf8');\n if (existing.includes(marker)) {\n return { written: false, message: `${filePath}: skill already present` };\n }\n writeFileSync(filePath, existing + '\\n\\n' + content, 'utf8');\n return { written: true, message: `${filePath}: skill appended` };\n }\n\n const dir = filePath.substring(0, filePath.lastIndexOf(isWin ? '\\\\' : '/'));\n if (dir && !existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(filePath, content, 'utf8');\n return { written: true, message: `${filePath}: skill created` };\n}\n\n// ── Per-Environment Configurators ────────────────────────────────────────────\n\nfunction configureCursor(cwd: string, result: InitResult): void {\n // MCP\n const mcpPath = join(cwd, '.cursor', 'mcp.json');\n const mcp = mergeJsonMcpServer(mcpPath, 'elevate', 'mcpServers');\n result.actions.push(`${mcp.written ? '✅' : '⏭️'} Cursor MCP: ${mcp.message}`);\n\n // Skills (.cursorrules)\n const rulesPath = join(cwd, '.cursorrules');\n const skill = appendSkillToFile(rulesPath, ELEVATE_SKILL_CONTENT, 'elevate_scan');\n result.actions.push(`${skill.written ? '✅' : '⏭️'} Cursor Rules: ${skill.message}`);\n}\n\nfunction configureClaudeDesktop(result: InitResult): void {\n const configPath = isWin\n ? join(appData(), 'Claude', 'claude_desktop_config.json')\n : join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');\n\n const mcp = mergeJsonMcpServer(configPath, 'elevate', 'mcpServers');\n result.actions.push(`${mcp.written ? '✅' : '⏭️'} Claude Desktop MCP: ${mcp.message}`);\n}\n\nfunction configureClaudeCode(cwd: string, result: InitResult): void {\n // MCP (.mcp.json in project root)\n const mcpPath = join(cwd, '.mcp.json');\n const mcp = mergeJsonMcpServer(mcpPath, 'elevate', 'mcpServers');\n result.actions.push(`${mcp.written ? '✅' : '⏭️'} Claude Code MCP: ${mcp.message}`);\n\n // Skills (CLAUDE.md)\n const claudeMdPath = join(cwd, 'CLAUDE.md');\n const skill = appendSkillToFile(claudeMdPath, ELEVATE_SKILL_CONTENT, 'elevate_scan');\n result.actions.push(`${skill.written ? '✅' : '⏭️'} Claude Code Skill: ${skill.message}`);\n}\n\nfunction configureAntigravity(cwd: string, result: InitResult): void {\n // MCP (workspace-level .agents/mcp_config.json)\n const mcpPath = join(cwd, '.agents', 'mcp_config.json');\n const mcp = mergeJsonMcpServer(mcpPath, 'elevate', 'mcpServers');\n result.actions.push(`${mcp.written ? '✅' : '⏭️'} Antigravity MCP: ${mcp.message}`);\n}\n\nfunction configureVSCode(cwd: string, result: InitResult): void {\n // MCP (.vscode/mcp.json — note: VS Code uses \"servers\" not \"mcpServers\")\n const mcpPath = join(cwd, '.vscode', 'mcp.json');\n const mcp = mergeJsonMcpServer(mcpPath, 'elevate', 'servers');\n result.actions.push(`${mcp.written ? '✅' : '⏭️'} VS Code MCP: ${mcp.message}`);\n\n // Copilot instructions\n const instructionsPath = join(cwd, '.github', 'copilot-instructions.md');\n const skill = appendSkillToFile(instructionsPath, ELEVATE_SKILL_CONTENT, 'elevate_scan');\n result.actions.push(`${skill.written ? '✅' : '⏭️'} Copilot Instructions: ${skill.message}`);\n}\n\nfunction configureWindsurf(result: InitResult): void {\n const configPath = isWin\n ? join(appData(), 'Codeium', 'Windsurf', 'mcp_config.json')\n : join(home, '.codeium', 'windsurf', 'mcp_config.json');\n\n const mcp = mergeJsonMcpServer(configPath, 'elevate', 'mcpServers');\n result.actions.push(`${mcp.written ? '✅' : '⏭️'} Windsurf MCP: ${mcp.message}`);\n}\n\n// ── Main Command Handler ─────────────────────────────────────────────────────\n\nexport async function handleInitCommand(options: CliOptions): Promise<number> {\n const cwd = resolve(process.cwd());\n\n const result: InitResult = {\n cwd,\n environments: [],\n actions: [],\n errors: [],\n };\n\n // ── Step 1: Detect all environments ────────────────────────────────────────\n\n const detectors: (() => DetectedEnvironment)[] = [\n () => detectCursor(cwd),\n () => detectClaudeDesktop(),\n () => detectClaudeCode(cwd),\n () => detectAntigravity(cwd),\n () => detectVSCode(cwd),\n () => detectWindsurf(),\n ];\n\n for (const detect of detectors) {\n result.environments.push(detect());\n }\n\n const detected = result.environments.filter((e) => e.detected);\n\n // ── Step 2: Configure detected environments ────────────────────────────────\n\n if (detected.length === 0) {\n // Nothing detected? Still offer to create foundational files\n if (!options.json) {\n console.log(`\\n🪶 Elevate Init\\n`);\n console.log(` No AI coding environments detected in this workspace.`);\n console.log(` Creating portable .mcp.json for broad compatibility.\\n`);\n }\n // Create a generic .mcp.json that works with Claude Code and most MCP clients\n const mcpPath = join(cwd, '.mcp.json');\n const mcp = mergeJsonMcpServer(mcpPath, 'elevate', 'mcpServers');\n result.actions.push(`${mcp.written ? '✅' : '⏭️'} Generic MCP: ${mcp.message}`);\n } else {\n if (!options.json) {\n console.log(`\\n🪶 Elevate Init — Detected ${detected.length} environment(s)\\n`);\n }\n\n const configurators: Record<string, (cwd: string, result: InitResult) => void> = {\n cursor: configureCursor,\n 'claude-desktop': (_cwd, r) => configureClaudeDesktop(r),\n 'claude-code': configureClaudeCode,\n antigravity: configureAntigravity,\n vscode: configureVSCode,\n windsurf: (_cwd, r) => configureWindsurf(r),\n };\n\n for (const env of detected) {\n try {\n const configure = configurators[env.id];\n if (configure) {\n configure(cwd, result);\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n result.errors.push(`${env.name}: ${msg}`);\n }\n }\n }\n\n // ── Step 3: Output ─────────────────────────────────────────────────────────\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return result.errors.length > 0 ? 1 : 0;\n }\n\n // Pretty console output\n console.log(' Environments:');\n for (const env of result.environments) {\n const status = env.detected ? '✅' : ' ';\n const mcpBadge = env.mcpConfigured ? ' [MCP ✓]' : '';\n const skillBadge = env.skillConfigured ? ' [Skill ✓]' : '';\n console.log(` ${status} ${env.icon} ${env.name.padEnd(22)}${env.detected ? env.reason : 'not detected'}${mcpBadge}${skillBadge}`);\n }\n\n if (result.actions.length > 0) {\n console.log(`\\n Actions:`);\n for (const action of result.actions) {\n console.log(` ${action}`);\n }\n }\n\n if (result.errors.length > 0) {\n console.log(`\\n ⚠️ Errors:`);\n for (const error of result.errors) {\n console.log(` ❌ ${error}`);\n }\n }\n\n console.log(`\\n Done! Restart your AI coding tools to pick up the new MCP configuration.`);\n console.log(` Agents will now automatically use Elevate for dependency management.\\n`);\n\n return result.errors.length > 0 ? 1 : 0;\n}\n","/**\n * 🪶 Elevate — Model Context Protocol (MCP) Server\n *\n * Exposes 5 modular, granular MCP tools over stdio for AI Agents\n * (Claude, Antigravity, Cursor, GitHub Copilot).\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport semver from 'semver';\nimport type { ElevateConfig } from '../config.js';\nimport type { UpdateCandidate, VersionDiff } from '../domain/models.js';\nimport { EcosystemFactory } from '../domain/ecosystem-factory.js';\nimport { isPreReleaseVersion, extractPreReleaseTag } from '../adapters/maven/maven-registry.js';\n\nexport async function startMcpServer(config: ElevateConfig): Promise<void> {\n const server = new Server(\n {\n name: 'elevate-mcp',\n version: '1.2.0',\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n\n // 1. Tool definitions & schemas\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: 'elevate_discover_modules',\n description:\n 'Discovers all repository modules and workspaces for Node/npm (package.json) or Java/Maven (pom.xml).',\n inputSchema: {\n type: 'object',\n properties: {\n ecosystem: {\n type: 'string',\n enum: ['npm', 'maven'],\n description: 'Target ecosystem (default: npm)',\n },\n },\n },\n },\n {\n name: 'elevate_scan',\n description:\n 'Scans a module (or all modules) for available dependency updates against the registry.',\n inputSchema: {\n type: 'object',\n properties: {\n ecosystem: {\n type: 'string',\n enum: ['npm', 'maven'],\n description: 'Target ecosystem (default: npm)',\n },\n moduleId: {\n type: 'string',\n description:\n 'Module ID or relative path (e.g. \"apps/e2e-cockpit\"). If omitted, scans the root or primary module.',\n },\n channel: {\n type: 'string',\n enum: ['stable', 'all'],\n description:\n 'Release channel: \"stable\" (production-ready versions only) or \"all\" (including pre-releases/betas). Default: stable',\n },\n allModules: {\n type: 'boolean',\n description: 'If true, scans all discovered modules across the monorepo.',\n },\n },\n },\n },\n {\n name: 'elevate_get_versions',\n description:\n 'Fetches the complete published version history of a package from the registry.',\n inputSchema: {\n type: 'object',\n properties: {\n ecosystem: {\n type: 'string',\n enum: ['npm', 'maven'],\n description: 'Target ecosystem (default: npm)',\n },\n identifier: {\n type: 'string',\n description: 'Package identifier (npm: chalk, maven: org.slf4j:slf4j-api)',\n },\n },\n required: ['identifier'],\n },\n },\n {\n name: 'elevate_apply_updates',\n description:\n 'Applies targeted dependency updates to a module, installs packages, and executes automatic build & test verification.',\n inputSchema: {\n type: 'object',\n properties: {\n ecosystem: {\n type: 'string',\n enum: ['npm', 'maven'],\n description: 'Target ecosystem (default: npm)',\n },\n moduleId: {\n type: 'string',\n description: 'Module ID or relative path of the target module',\n },\n updates: {\n type: 'array',\n description: 'List of packages to update with optional target versions',\n items: {\n type: 'object',\n properties: {\n identifier: { type: 'string', description: 'Package identifier' },\n targetVersion: {\n type: 'string',\n description: 'Specific target version (e.g. \"5.6.2\" or \"^3.2.0\"). If omitted, updates to latest.',\n },\n },\n required: ['identifier'],\n },\n },\n allowMajor: {\n type: 'boolean',\n description:\n 'Safety guardrail: Must be explicitly true to permit breaking major version upgrades.',\n },\n dryRun: {\n type: 'boolean',\n description: 'If true, simulates planned changes without modifying any files.',\n },\n skipVerification: {\n type: 'boolean',\n description: 'Skips the post-update build and test verification step.',\n },\n },\n required: ['moduleId', 'updates'],\n },\n },\n {\n name: 'elevate_verify',\n description:\n 'Runs module-specific verification and build checks (e.g. npm test, mvn test-compile).',\n inputSchema: {\n type: 'object',\n properties: {\n ecosystem: {\n type: 'string',\n enum: ['npm', 'maven'],\n description: 'Target ecosystem (default: npm)',\n },\n moduleId: {\n type: 'string',\n description: 'Module ID or relative path of the module to verify',\n },\n },\n },\n },\n ],\n };\n });\n\n // 2. Tool execution handlers\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args = {} } = request.params;\n const ecosystem = (args.ecosystem as 'npm' | 'maven') || 'npm';\n const strategy = EcosystemFactory.getStrategy(ecosystem);\n\n try {\n // ── Tool 1: elevate_discover_modules ──\n if (name === 'elevate_discover_modules') {\n const modules = await strategy.discovery.discover(config.rootDir);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n ecosystem,\n count: modules.length,\n modules: modules.map((m) => ({\n id: m.id,\n name: m.name,\n relPath: m.relPath,\n isRoot: m.isRoot,\n })),\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n // ── Tool 2: elevate_scan ──\n if (name === 'elevate_scan') {\n const channel = (args.channel as 'stable' | 'all') || config.channel || 'stable';\n const modules = await strategy.discovery.discover(config.rootDir);\n\n const internalIds = new Set<string>();\n for (const m of modules) {\n if (m.id) internalIds.add(m.id);\n if (m.name) internalIds.add(m.name);\n }\n\n const targetModules = args.allModules\n ? modules\n : args.moduleId\n ? modules.filter(\n (m) =>\n m.id.toLowerCase() === String(args.moduleId).toLowerCase() ||\n m.relPath.toLowerCase() === String(args.moduleId).toLowerCase() ||\n m.path.toLowerCase().endsWith(String(args.moduleId).toLowerCase()),\n )\n : [modules[0]!];\n\n if (targetModules.length === 0) {\n throw new Error(`Module '${args.moduleId}' not found.`);\n }\n\n const results: any[] = [];\n let totalCount = 0;\n\n for (const mod of targetModules) {\n const updates = await strategy.reader.scan(mod, config.excludeScopes, internalIds, channel);\n totalCount += updates.length;\n results.push({\n moduleId: mod.id,\n modulePath: mod.relPath,\n updateCount: updates.length,\n updates: updates.map((u) => ({\n identifier: u.coordinate.identifier,\n currentRange: u.currentRange,\n currentClean: u.currentClean,\n latest: u.latest,\n newRange: u.newRange,\n diff: u.diff,\n scope: u.scope,\n isPreRelease: u.isPreRelease ?? false,\n preReleaseTag: u.preReleaseTag,\n })),\n });\n }\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n ecosystem,\n channel,\n scannedModules: targetModules.length,\n totalUpdatesCount: totalCount,\n results,\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n // ── Tool 3: elevate_get_versions ──\n if (name === 'elevate_get_versions') {\n const identifier = String(args.identifier);\n let coordinate;\n if (ecosystem === 'maven') {\n const parts = identifier.split(':');\n coordinate = {\n identifier,\n group: parts[0],\n artifact: parts[1] || parts[0]!,\n ecosystem: 'maven' as const,\n };\n } else {\n coordinate = {\n identifier,\n artifact: identifier,\n ecosystem: 'npm' as const,\n };\n }\n\n const versions = await strategy.registry.getAllVersions(coordinate);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n ecosystem,\n package: identifier,\n totalCount: versions.length,\n latest: versions[0] || null,\n versions: versions.map((v) => ({\n version: v,\n isPreRelease: isPreReleaseVersion(v),\n tag: extractPreReleaseTag(v),\n })),\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n // ── Tool 4: elevate_apply_updates ──\n if (name === 'elevate_apply_updates') {\n const modules = await strategy.discovery.discover(config.rootDir);\n const mod = modules.find(\n (m) =>\n m.id.toLowerCase() === String(args.moduleId).toLowerCase() ||\n m.relPath.toLowerCase() === String(args.moduleId).toLowerCase() ||\n m.path.toLowerCase().endsWith(String(args.moduleId).toLowerCase()),\n );\n\n if (!mod) {\n throw new Error(`Module '${args.moduleId}' not found.`);\n }\n\n const internalIds = new Set<string>();\n for (const m of modules) {\n if (m.id) internalIds.add(m.id);\n if (m.name) internalIds.add(m.name);\n }\n\n const availableUpdates = await strategy.reader.scan(mod, config.excludeScopes, internalIds, 'stable');\n const requestedUpdates = (args.updates as { identifier: string; targetVersion?: string }[]) || [];\n const updatesToApply: UpdateCandidate[] = [];\n\n for (const req of requestedUpdates) {\n const found = availableUpdates.find((u) => u.coordinate.identifier === req.identifier);\n if (found) {\n const targetVer = req.targetVersion || found.latest;\n const prefix = found.currentRange.startsWith('~') ? '~' : found.currentRange.startsWith('^') ? '^' : '';\n const diff: VersionDiff = semver.valid(targetVer) && found.currentClean\n ? (semver.diff(found.currentClean, targetVer) as VersionDiff) || 'minor'\n : found.diff;\n\n if (diff === 'major' && !args.allowMajor) {\n throw new Error(\n `Major update for '${req.identifier}' to ${targetVer} rejected. Set 'allowMajor: true' to permit breaking changes.`,\n );\n }\n\n updatesToApply.push({\n ...found,\n newRange: `${prefix}${targetVer}`,\n diff,\n selected: true,\n });\n } else if (req.targetVersion) {\n updatesToApply.push({\n coordinate: {\n identifier: req.identifier,\n artifact: req.identifier,\n ecosystem,\n },\n currentRange: 'unknown',\n currentClean: '0.0.0',\n latest: req.targetVersion,\n newRange: req.targetVersion,\n diff: 'minor',\n scope: 'prod',\n selected: true,\n });\n }\n }\n\n if (args.dryRun) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n dryRun: true,\n targetModule: mod.relPath,\n ecosystem,\n updatesCount: updatesToApply.length,\n updates: updatesToApply.map((u) => ({\n identifier: u.coordinate.identifier,\n currentRange: u.currentRange,\n newRange: u.newRange,\n diff: u.diff,\n })),\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n const updateResult = await strategy.updater.applyUpdates(mod, config.rootDir, updatesToApply, () => {});\n\n let verifyResult;\n if (!args.skipVerification) {\n verifyResult = await strategy.verifier.verify(\n mod,\n config.rootDir,\n config.postUpdateScript,\n config.postUpdateLabel,\n );\n }\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: verifyResult?.status !== 'warn',\n targetModule: mod.relPath,\n ecosystem,\n ...updateResult,\n verification: verifyResult,\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n // ── Tool 5: elevate_verify ──\n if (name === 'elevate_verify') {\n const modules = await strategy.discovery.discover(config.rootDir);\n const mod = args.moduleId\n ? modules.find(\n (m) =>\n m.id.toLowerCase() === String(args.moduleId).toLowerCase() ||\n m.relPath.toLowerCase() === String(args.moduleId).toLowerCase() ||\n m.path.toLowerCase().endsWith(String(args.moduleId).toLowerCase()),\n )\n : modules[0];\n\n if (!mod) {\n throw new Error(`Module '${args.moduleId || 'default'}' not found.`);\n }\n\n const verifyResult = await strategy.verifier.verify(\n mod,\n config.rootDir,\n config.postUpdateScript,\n config.postUpdateLabel,\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n module: mod.relPath,\n ecosystem,\n ...verifyResult,\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n throw new Error(`Unknown tool: ${name}`);\n } catch (err: any) {\n return {\n isError: true,\n content: [\n {\n type: 'text',\n text: `❌ Error executing tool '${name}': ${err.message || String(err)}`,\n },\n ],\n };\n }\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n"],"mappings":"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","names":["useState","useMemo","useCallback","Box","useInput","existsSync","readFileSync","join","stdout","readFileSync","join","semver","readFileSync","join","exec","promisify","execAsync","exec","promisify","execAsync","existsSync","readFileSync","readdirSync","join","releaseMatch","readFileSync","join","semver","DIFF_ORDER","CONCURRENCY","pooled","semver","join","readFileSync","writeFileSync","readFileSync","join","exec","promisify","execAsync","exec","promisify","execAsync","useState","useMemo","useCallback","useState","useEffect","useMemo","useCallback","semver","useState","useCallback","useEffect","useMemo","semver","useState","useCallback","useState","useEffect","useState","useEffect","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","Box","Text","jsx","jsxs","Text","Box","jsx","jsxs","Box","Text","Box","Text","useState","useEffect","Box","Text","jsx","jsxs","useState","useEffect","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","useEffect","useMemo","Box","Text","jsx","jsxs","WINDOW_SIZE","useState","useEffect","useMemo","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Fragment","jsx","jsxs","useState","useMemo","useCallback","useInput","Box","semver","semver","existsSync","readFileSync","writeFileSync","join","resolve","semver","semver","jsx"]}