{"version":3,"sources":["../src/index.ts","../src/security_scan.ts"],"sourcesContent":["// Redirect any console.log to stderr to maintain JSON-RPC-only stdout\nconst __origConsoleLog = console.log;\nconsole.log = (...args: any[]) => { try { console.error(...args); } catch { } };\n\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n  CallToolRequestSchema,\n  ListToolsRequestSchema,\n  Tool,\n} from '@modelcontextprotocol/sdk/types.js';\nimport * as dotenv from 'dotenv';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport * as semver from 'semver';\nimport { execSync, spawn } from 'child_process';\nimport { scanDirectory } from './security_scan.js';\n// Using built-in fetch (Node.js 18+) for better compatibility\n\n// Load environment variables with cascade (HOME\\.mcp\\.env -> project .env)\n(function loadEnvCascade() {\n  const homeEnv = path.join(os.homedir() || '', '.mcp', '.env');\n  const localEnv = path.resolve(process.cwd(), '.env');\n  for (const p of [homeEnv, localEnv]) {\n    try { if (fs.existsSync(p)) { dotenv.config({ path: p, override: true }); } } catch { }\n  }\n})();\n\n// Command line argument parsing (disabled for MCP stdio purity)\nconst args: string[] = [];\nconst hasListTools = false;\nconst hasToolsJson = false;\nconst hasHelp = false;\nconst formatTable = false;\n\n// Security: Credential sanitization\nfunction sanitizeCredential(value: string): string {\n  if (!value || value.length < 8) return '****';\n  return `${value.substring(0, 4)}****...****${value.substring(value.length - 4)}`;\n}\n\nfunction sanitizeEnvVars(env: Record<string, any>): Record<string, any> {\n  const sensitiveKeys = ['TOKEN', 'KEY', 'SECRET', 'PASSWORD', 'API_'];\n  const sanitized = { ...env };\n\n  Object.keys(sanitized).forEach(key => {\n    if (sensitiveKeys.some(sensitive => key.toUpperCase().includes(sensitive))) {\n      sanitized[key] = sanitizeCredential(sanitized[key]);\n    }\n  });\n\n  return sanitized;\n}\n\n// Tool discovery and help system\ninterface ToolInfo {\n  name: string;\n  category: string;\n  description: string;\n  requiredParams: string[];\n  optionalParams: string[];\n  inputSchema: any;\n}\n\nfunction showHelp(): void {\n  console.error(`\nNPM JAEGIS MCP Server v1.0.0 - NPM package management with 8 specialized tools\n\nUSAGE:\n  npm-mcp-server [OPTIONS]\n\nOPTIONS:\n  --list-tools         List all available tools with descriptions\n  --tools-json         Output complete MCP tools schema as JSON\n  --format=table       Use table format for tool listings (default: JSON)\n  --help, -h          Show this help message\n\nENVIRONMENT VARIABLES:\n  NPM_TOKEN           NPM access token (required)\n                      Format: npm_*\n                      Generate at: https://www.npmjs.com/settings/tokens\n\n  NPM_USERNAME        NPM username (required)\n  NPM_EMAIL           NPM email (required)\n  NPM_REGISTRY        NPM registry URL (optional, default: https://registry.npmjs.org/)\n  DEFAULT_PACKAGE     Default package name (optional, default: JAEGIS-web-os)\n\nEXAMPLES:\n  # List all tools in table format\n  npm-mcp-server --list-tools --format=table\n\n  # Get tools schema for MCP client integration\n  npm-mcp-server --tools-json\n\n  # Start the MCP server (default)\n  npm-mcp-server\n\nQUICK SETUP:\n  1. Generate NPM token: https://www.npmjs.com/settings/tokens\n  2. Set environment variables:\n     export NPM_TOKEN=npm_your_token_here\n     export NPM_USERNAME=your_username\n     export NPM_EMAIL=your_email@example.com\n  3. Run: npm-mcp-server\n\nFor detailed documentation, see: README.md\n`);\n}\n\nfunction getToolsInfo(): ToolInfo[] {\n  return [\n    {\n      name: 'npm_package_info',\n      category: 'Package Information',\n      description: 'Get detailed information about an NPM package including metadata and dependencies',\n      requiredParams: ['package_name'],\n      optionalParams: ['version'],\n      inputSchema: { type: 'object', properties: { package_name: { type: 'string' } } }\n    },\n    {\n      name: 'npm_search_packages',\n      category: 'Package Discovery',\n      description: 'Search for NPM packages using keywords and filters',\n      requiredParams: ['query'],\n      optionalParams: ['limit'],\n      inputSchema: { type: 'object', properties: { query: { type: 'string' } } }\n    },\n    {\n      name: 'npm_publish_package',\n      category: 'Package Publishing',\n      description: 'Publish a package to NPM registry with authentication and specified configuration',\n      requiredParams: ['package_path'],\n      optionalParams: ['tag', 'access', 'additional_flags'],\n      inputSchema: { type: 'object', properties: { package_path: { type: 'string' } } }\n    },\n    {\n      name: 'npm_unpublish_package',\n      category: 'Package Management',\n      description: 'Unpublish a package version from NPM registry (irreversible)',\n      requiredParams: ['package_name'],\n      optionalParams: ['version'],\n      inputSchema: { type: 'object', properties: { package_name: { type: 'string' } } }\n    },\n    {\n      name: 'npm_deprecate_package',\n      category: 'Package Management',\n      description: 'Deprecate a package version with a custom message',\n      requiredParams: ['package_name', 'version', 'message'],\n      optionalParams: [],\n      inputSchema: { type: 'object', properties: { package_name: { type: 'string' }, version: { type: 'string' }, message: { type: 'string' } } }\n    },\n    {\n      name: 'npm_list_versions',\n      category: 'Package Information',\n      description: 'List all available versions of a package with release information',\n      requiredParams: ['package_name'],\n      optionalParams: [],\n      inputSchema: { type: 'object', properties: { package_name: { type: 'string' } } }\n    },\n    {\n      name: 'npm_download_stats',\n      category: 'Package Analytics',\n      description: 'Get download statistics and analytics for a package',\n      requiredParams: ['package_name'],\n      optionalParams: ['period'],\n      inputSchema: { type: 'object', properties: { package_name: { type: 'string' } } }\n    },\n    {\n      name: 'npm_validate_package',\n      category: 'Package Validation',\n      description: 'Validate package.json and check for publishing readiness',\n      requiredParams: ['package_path'],\n      optionalParams: [],\n      inputSchema: { type: 'object', properties: { package_path: { type: 'string' } } }\n    },\n    {\n      name: 'security_check',\n      category: 'Security',\n      description: 'Scan a directory for sensitive files and secrets',\n      requiredParams: ['path'],\n      optionalParams: [],\n      inputSchema: { type: 'object', properties: { path: { type: 'string' } } }\n    },\n    {\n      name: 'health_check',\n      category: 'Diagnostics',\n      description: 'Return server health, version, uptime, and dependency status',\n      requiredParams: [],\n      optionalParams: [],\n      inputSchema: { type: 'object', properties: {} }\n    }\n  ];\n}\n\nfunction displayToolsTable(tools: ToolInfo[]): void {\n  console.error('\\n📦 NPM JAEGIS MCP Server - Tool Inventory\\n');\n  console.error('┌─────────────────────────────────────┬──────────────────────────────────┬──────────┬──────────┐');\n  console.error('│ Tool Name                           │ Category                         │ Required │ Optional │');\n  console.error('├─────────────────────────────────────┼──────────────────────────────────┼──────────┼──────────┤');\n\n  tools.forEach(tool => {\n    const name = tool.name.padEnd(35);\n    const category = tool.category.padEnd(32);\n    const required = tool.requiredParams.length.toString().padEnd(8);\n    const optional = tool.optionalParams.length.toString().padEnd(8);\n    console.error(`│ ${name} │ ${category} │ ${required} │ ${optional} │`);\n  });\n\n  console.error('└─────────────────────────────────────┴──────────────────────────────────┴──────────┴──────────┘');\n\n  // Summary by category\n  const categories = tools.reduce((acc, tool) => {\n    acc[tool.category] = (acc[tool.category] || 0) + 1;\n    return acc;\n  }, {} as Record<string, number>);\n\n  console.error('\\n📋 Tool Summary by Category:');\n  Object.entries(categories).forEach(([category, count]) => {\n    console.error(`  • ${category}: ${count} tools`);\n  });\n  console.error(`\\n🎯 Total: ${tools.length} tools available\\n`);\n}\n\nfunction displayToolsJson(tools: ToolInfo[], includeSchema: boolean = false): void {\n  const output = {\n    server: 'npm-jaegis-mcp-server',\n    version: '1.0.0',\n    totalTools: tools.length,\n    categories: tools.reduce((acc, tool) => {\n      acc[tool.category] = (acc[tool.category] || 0) + 1;\n      return acc;\n    }, {} as Record<string, number>),\n    tools: tools.map(tool => ({\n      name: tool.name,\n      category: tool.category,\n      description: tool.description,\n      parameters: {\n        required: tool.requiredParams,\n        optional: tool.optionalParams,\n        total: tool.requiredParams.length + tool.optionalParams.length\n      },\n      ...(includeSchema && { inputSchema: tool.inputSchema })\n    }))\n  };\n\n  console.error(JSON.stringify(output, null, 2));\n}\n\n// Handle command line arguments before server initialization\nif (hasHelp) {\n  showHelp();\n  process.exit(0);\n}\n\nif (hasListTools || hasToolsJson) {\n  const tools = getToolsInfo();\n\n  if (hasToolsJson) {\n    displayToolsJson(tools, true);\n  } else if (formatTable) {\n    displayToolsTable(tools);\n  } else {\n    displayToolsJson(tools, false);\n  }\n\n  process.exit(0);\n}\n\ninterface NPMConfig {\n  token: string;\n  username: string;\n  email: string;\n  registry: string;\n  scope?: string;\n  defaultPackage?: string;\n}\n\ninterface PackageInfo {\n  name: string;\n  version: string;\n  description?: string;\n  author?: string;\n  license?: string;\n  dependencies?: Record<string, string>;\n  devDependencies?: Record<string, string>;\n  scripts?: Record<string, string>;\n  keywords?: string[];\n  homepage?: string;\n  repository?: any;\n  bugs?: any;\n  publishedAt?: string;\n  downloads?: number;\n}\n\ninterface PublishResult {\n  success: boolean;\n  packageName: string;\n  version: string;\n  message: string;\n  registryUrl?: string;\n}\n\nclass NPMJAEGISMCPServer {\n  private server: Server;\n  private config: NPMConfig;\n\n  constructor() {\n    this.config = this.loadConfig();\n    this.validateConfiguration();\n\n    this.server = new Server(\n      {\n        name: 'npm-jaegis-mcp-server',\n        version: '1.0.0',\n      },\n      {\n        capabilities: {\n          tools: {},\n        },\n      }\n    );\n\n    this.setupToolHandlers();\n    this.setupErrorHandling();\n  }\n\n  private loadConfig(): NPMConfig {\n    // Do NOT hard-fail on missing credentials so tools/list always works in clients.\n    // Auth is validated lazily in the specific tool handlers that need it.\n    const token = process.env.NPM_TOKEN || '';\n    const username = process.env.NPM_USERNAME || '';\n    const email = process.env.NPM_EMAIL || '';\n\n    return {\n      token,\n      username,\n      email,\n      registry: process.env.NPM_REGISTRY || 'https://registry.npmjs.org/',\n      scope: process.env.NPM_SCOPE,\n      defaultPackage: process.env.DEFAULT_PACKAGE || 'JAEGIS-web-os'\n    };\n  }\n\n  private validateConfiguration(): void {\n    if (this.config.token && !this.config.token.startsWith('npm_')) {\n      console.warn('Warning: NPM token format may be invalid. Expected format: npm_*');\n    }\n    if (!this.config.username || !this.config.email || !this.config.token) {\n      console.warn('NPM credentials are not fully set; auth-required tools may fail until provided.');\n    }\n\n    console.error(`NPM MCP Server configured for user: ${sanitizeCredential(this.config.username || 'unknown')}`);\n    console.error(`Registry: ${this.config.registry}`);\n    console.error(`Default package: ${this.config.defaultPackage}`);\n  }\n\n  private setupToolHandlers(): void {\n    this.server.setRequestHandler(ListToolsRequestSchema, async () => {\n      return {\n        tools: [\n\n          {\n            name: 'npm_package_info',\n            description: 'Get detailed information about an NPM package',\n            inputSchema: {\n              type: 'object',\n              properties: {\n                package_name: {\n                  type: 'string',\n                  description: 'Name of the NPM package'\n                },\n                version: {\n                  type: 'string',\n                  description: 'Specific version (optional, defaults to latest)'\n                }\n              },\n              required: ['package_name']\n            }\n          },\n          {\n            name: 'npm_search_packages',\n            description: 'Search for NPM packages',\n            inputSchema: {\n              type: 'object',\n              properties: {\n                query: {\n                  type: 'string',\n                  description: 'Search query'\n                },\n                limit: {\n                  type: 'number',\n                  description: 'Maximum number of results (default: 20)'\n                }\n              },\n              required: ['query']\n            }\n          },\n          {\n            name: 'npm_publish_package',\n            description: 'Publish a package to NPM registry with authentication',\n            inputSchema: {\n              type: 'object',\n              properties: {\n                package_path: {\n                  type: 'string',\n                  description: 'Path to package directory containing package.json'\n                },\n                tag: {\n                  type: 'string',\n                  description: 'Distribution tag (default: latest)'\n                },\n                access: {\n                  type: 'string',\n                  enum: ['public', 'restricted'],\n                  description: 'Package access level (default: public)'\n                },\n                additional_flags: {\n                  type: 'string',\n                  description: 'Additional npm publish flags (optional, e.g., \"--dry-run\")'\n                }\n              },\n              required: ['package_path']\n            }\n          },\n          {\n            name: 'npm_unpublish_package',\n            description: 'Unpublish a package version from NPM',\n            inputSchema: {\n              type: 'object',\n              properties: {\n                package_name: {\n                  type: 'string',\n                  description: 'Name of the package to unpublish'\n                },\n                version: {\n                  type: 'string',\n                  description: 'Specific version to unpublish (optional, unpublishes entire package if not specified)'\n                }\n              },\n              required: ['package_name']\n            }\n          },\n          {\n            name: 'npm_deprecate_package',\n            description: 'Deprecate a package version',\n            inputSchema: {\n              type: 'object',\n              properties: {\n                package_name: {\n                  type: 'string',\n                  description: 'Name of the package'\n                },\n                version: {\n                  type: 'string',\n                  description: 'Version range to deprecate'\n                },\n                message: {\n                  type: 'string',\n                  description: 'Deprecation message'\n                }\n              },\n              required: ['package_name', 'version', 'message']\n            }\n          },\n          {\n            name: 'npm_list_versions',\n            description: 'List all versions of a package',\n            inputSchema: {\n              type: 'object',\n              properties: {\n                package_name: {\n                  type: 'string',\n                  description: 'Name of the package'\n                }\n              },\n              required: ['package_name']\n            }\n          },\n          {\n            name: 'npm_download_stats',\n            description: 'Get download statistics for a package',\n            inputSchema: {\n              type: 'object',\n              properties: {\n                package_name: {\n                  type: 'string',\n                  description: 'Name of the package'\n                },\n                period: {\n                  type: 'string',\n                  enum: ['last-day', 'last-week', 'last-month', 'last-year'],\n                  description: 'Time period for stats (default: last-month)'\n                }\n              },\n              required: ['package_name']\n            }\n          },\n          {\n            name: 'npm_validate_package',\n            description: 'Validate package.json and check for publishing readiness',\n            inputSchema: {\n              type: 'object',\n              properties: {\n                package_path: {\n                  type: 'string',\n                  description: 'Path to package directory'\n                }\n              },\n              required: ['package_path']\n            }\n          },\n          {\n            name: 'health_check',\n            description: 'Return server health, version, uptime, and dependency status',\n            inputSchema: { type: 'object', properties: {} }\n          }\n        ] as Tool[]\n      };\n    });\n\n    this.server.setRequestHandler(CallToolRequestSchema, async (request) => {\n      const { name, arguments: args } = request.params;\n\n      try {\n        switch (name) {\n          case 'npm_package_info':\n            return await this.getPackageInfo(args);\n          case 'npm_search_packages':\n            return await this.searchPackages(args);\n          case 'npm_publish_package':\n            return await this.publishPackage(args);\n          case 'npm_unpublish_package':\n            return await this.unpublishPackage(args);\n          case 'npm_deprecate_package':\n            return await this.deprecatePackage(args);\n          case 'npm_list_versions':\n            return await this.listVersions(args);\n          case 'npm_download_stats':\n            return await this.getDownloadStats(args);\n          case 'npm_validate_package':\n            return await this.validatePackage(args);\n          case 'security_check':\n            return await this.securityCheck(args);\n          case 'health_check': {\n            const version = (() => { try { return JSON.parse(fs.readFileSync(path.resolve(__dirname, '..', 'package.json'), 'utf8')).version } catch { return 'unknown' } })();\n            const uptime = process.uptime();\n            return { content: [{ type: 'text', text: JSON.stringify({ status: 'ok', version, uptime, success: true }) }] };\n          }\n          default:\n            throw new Error(`Unknown tool: ${name}`);\n        }\n      } catch (error) {\n        return {\n          content: [\n            {\n              type: 'text',\n              text: JSON.stringify({\n                error: error instanceof Error ? error.message : String(error),\n                success: false\n              }, null, 2)\n            }\n          ]\n        };\n      }\n    });\n  }\n\n  private setupErrorHandling(): void {\n    this.server.onerror = (error) => {\n      console.error('[NPM MCP Server Error]', error);\n    };\n\n    process.on('SIGINT', async () => {\n      await this.server.close();\n      process.exit(0);\n    });\n  }\n\n  // Tool implementations\n  private async getPackageInfo(args: any) {\n    try {\n      const packageName = args.package_name;\n      if (!packageName) throw new Error('package_name is required');\n\n      const url = `${this.config.registry}${packageName}`;\n      const response = await fetch(url);\n\n      if (!response.ok) {\n        throw new Error(`Package not found: ${packageName}`);\n      }\n\n      const data = await response.json() as any;\n      const version = args.version || 'latest';\n      const versionData = version === 'latest' ? data['dist-tags']?.latest : version;\n      const packageData = data.versions?.[versionData] || data;\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              name: data.name,\n              version: packageData.version,\n              description: data.description,\n              author: data.author,\n              license: data.license,\n              homepage: data.homepage,\n              repository: data.repository,\n              keywords: data.keywords,\n              dependencies: packageData.dependencies,\n              devDependencies: packageData.devDependencies,\n              downloads: data.downloads,\n              lastPublished: data.time?.modified,\n              success: true\n            }, null, 2)\n          }\n        ]\n      };\n    } catch (error) {\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              error: error instanceof Error ? error.message : String(error),\n              success: false\n            }, null, 2)\n          }\n        ]\n      };\n    }\n  }\n\n  private async searchPackages(args: any) {\n    try {\n      const query = args.query;\n      const limit = Math.min(args.limit || 20, 100);\n\n      if (!query) throw new Error('query is required');\n\n      const url = `${this.config.registry}-/v1/search?text=${encodeURIComponent(query)}&size=${limit}`;\n      const response = await fetch(url);\n\n      if (!response.ok) {\n        throw new Error('Search failed');\n      }\n\n      const data = await response.json() as any;\n      const results = data.objects?.map((obj: any) => ({\n        name: obj.package.name,\n        version: obj.package.version,\n        description: obj.package.description,\n        date: obj.package.date,\n        links: obj.package.links\n      })) || [];\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              query,\n              total: data.total,\n              results,\n              success: true\n            }, null, 2)\n          }\n        ]\n      };\n    } catch (error) {\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              error: error instanceof Error ? error.message : String(error),\n              success: false\n            }, null, 2)\n          }\n        ]\n      };\n    }\n  }\n\n  private async publishPackage(args: any) {\n    try {\n      const packagePath = args.package_path;\n      if (!packagePath) throw new Error('package_path is required');\n      if (!this.config.token) throw new Error('NPM_TOKEN environment variable is required');\n\n      const packageJsonPath = path.join(packagePath, 'package.json');\n      if (!fs.existsSync(packageJsonPath)) {\n        throw new Error(`package.json not found at ${packageJsonPath}`);\n      }\n\n      const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n      const tag = args.tag || 'latest';\n      const access = args.access || 'public';\n      const additionalFlags = args.additional_flags || '';\n\n      // Validate package before publishing\n      const validationIssues: string[] = [];\n      if (!packageJson.name) validationIssues.push('Missing required field: name');\n      if (!packageJson.version) validationIssues.push('Missing required field: version');\n      if (!semver.valid(packageJson.version)) validationIssues.push('Invalid version format (must be semver)');\n\n      if (validationIssues.length > 0) {\n        throw new Error(`Package validation failed: ${validationIssues.join('; ')}`);\n      }\n\n      // ==================== STRICT SECURITY PIPELINE ====================\n\n      // 1. Pre-flight Version Conflict Check\n      console.error('[Security] Step 1/5: Checking for version conflicts...');\n      const { checkVersionConflictAsync } = require(path.join(__dirname, '../../../scripts/registry_manager.js'));\n      const versionConflict = await checkVersionConflictAsync(packageJson.name, packageJson.version, 'npm');\n      if (versionConflict) {\n        throw new Error(`Version ${packageJson.version} already exists on NPM registry. Aborting to prevent conflicts.`);\n      }\n      console.error('[Security] ✓ Version available');\n\n      // 2. Smart README Maintenance/Generation\n      console.error('[Security] Step 2/5: Checking README...');\n      const { smartReadmeUpdate } = require(path.join(__dirname, '../../../scripts/professional_readme_generator.js'));\n      await smartReadmeUpdate(packagePath, {\n        name: packageJson.name,\n        version: packageJson.version,\n        description: packageJson.description,\n        author: packageJson.author,\n        license: packageJson.license,\n        repository: packageJson.repository?.url || packageJson.repository,\n        homepage: packageJson.homepage,\n        keywords: packageJson.keywords || [],\n        tools: [],\n        examples: []\n      }, 'npm');\n      console.error('[Security] ✓ README validated');\n\n      // 3. Local Security Scan\n      console.error('[Security] Step 3/5: Deep security scan...');\n      const scanResult = await scanDirectory(packagePath);\n      if (!scanResult.passed) {\n        throw new Error(`Security check failed: ${scanResult.issues.join('; ')}`);\n      }\n      console.error('[Security] ✓ No sensitive data detected');\n\n      // 4. Build Artifact Sanitization\n      console.error('[Security] Step 4/5: Sanitizing build artifacts...');\n      const { sanitizeNpmPackage } = require(path.join(__dirname, '../../../scripts/artifact_sanitizer.js'));\n      const sanitizationResult = await sanitizeNpmPackage(packagePath);\n      if (sanitizationResult.success && !sanitizationResult.clean) {\n        console.error(`[Security] ⚠ Sanitized ${sanitizationResult.report.filesModified} files`);\n      }\n      console.error('[Security] ✓ Artifacts clean');\n\n      // 5. Retroactive Historical Scan (async, non-blocking)\n      console.error('[Security] Step 5/5: Triggering historical scan (async)...');\n      const { scanNpmPackageHistory, autoRemediateNpm } = require(path.join(__dirname, '../../../scripts/npm_historical_scanner.js'));\n      // Run in background, don't wait\n      setImmediate(async () => {\n        try {\n          console.error(`[Historical Scan] Scanning ${packageJson.name} history...`);\n          const historicalResults = await scanNpmPackageHistory(packageJson.name, { limit: 10 });\n          if (historicalResults.compromisedVersions.length > 0) {\n            console.error(`[Historical Scan] ⚠ Found ${historicalResults.compromisedVersions.length} compromised versions`);\n            await autoRemediateNpm(packageJson.name, historicalResults);\n          } else {\n            console.error('[Historical Scan] ✓ All historical versions clean');\n          }\n        } catch (e) {\n          console.error(`[Historical Scan] Error: ${(e as Error).message}`);\n        }\n      });\n      console.error('[Security] ✓ Historical scan queued');\n\n      console.error('[Security] ==================== ALL CHECKS PASSED ====================');\n\n      // Setup NPM authentication environment\n      const publishEnv = {\n        ...process.env,\n        NPM_TOKEN: this.config.token,\n        NPM_CONFIG_REGISTRY: this.config.registry,\n        NPM_CONFIG__AUTH_TOKEN: this.config.token,\n        NPM_CONFIG_USERCONFIG: path.join(os.homedir(), '.npmrc')\n      };\n\n      // Build npm publish command\n      const publishArgs = ['publish', '--access', access, '--tag', tag];\n      if (additionalFlags) {\n        publishArgs.push(...additionalFlags.split(' '));\n      }\n\n      console.error(`[NPM Publish] Executing: npm ${publishArgs.join(' ')} in ${packagePath}`);\n      console.error(`[NPM Publish] Package: ${packageJson.name}@${packageJson.version}`);\n\n      // Execute npm publish command with interactive handling\n      const publishOutput = await new Promise<string>((resolve, reject) => {\n        const child = spawn('npm', publishArgs, {\n          cwd: packagePath,\n          env: publishEnv,\n          stdio: ['pipe', 'pipe', 'pipe']\n        });\n\n        let output = '';\n        let errorOutput = '';\n\n        child.stdout.on('data', (data) => {\n          const str = data.toString();\n          output += str;\n          console.error(`[NPM] ${str}`);\n\n          // Check for auth URL\n          const urlMatch = str.match(/https:\\/\\/www\\.npmjs\\.com\\/auth\\/cli\\/[a-f0-9-]+/);\n          if (urlMatch) {\n            const url = urlMatch[0];\n            console.error(`[NPM] Auth URL detected: ${url}`);\n            // Open URL automatically\n            try {\n              const startCmd = process.platform === 'win32' ? 'start' : (process.platform === 'darwin' ? 'open' : 'xdg-open');\n              require('child_process').exec(`${startCmd} ${url}`);\n            } catch (e) {\n              console.error('Failed to open browser automatically');\n            }\n            // Press Enter to continue\n            if (child.stdin) {\n              child.stdin.write('\\n');\n            }\n          }\n        });\n\n        child.stderr.on('data', (data) => {\n          const str = data.toString();\n          errorOutput += str;\n          console.error(`[NPM Error] ${str}`);\n        });\n\n        child.on('close', (code) => {\n          if (code === 0) {\n            resolve(output);\n          } else {\n            reject(new Error(`npm publish failed with code ${code}: ${errorOutput}`));\n          }\n        });\n\n        child.on('error', (err) => {\n          reject(err);\n        });\n      });\n\n      console.error(`[NPM Publish] Success: ${packageJson.name}@${packageJson.version}`);\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              success: true,\n              message: `Successfully published ${packageJson.name}@${packageJson.version} to NPM registry`,\n              package: packageJson.name,\n              version: packageJson.version,\n              tag,\n              access,\n              registry: this.config.registry,\n              publishOutput: publishOutput.substring(0, 500), // Limit output size\n              timestamp: new Date().toISOString()\n            }, null, 2)\n          }\n        ]\n      };\n    } catch (error) {\n      const errorMessage = error instanceof Error ? error.message : String(error);\n      console.error(`[NPM Publish Error] ${errorMessage}`);\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              success: false,\n              error: errorMessage,\n              timestamp: new Date().toISOString()\n            }, null, 2)\n          }\n        ],\n        isError: true\n      };\n    }\n  }\n\n  private async securityCheck(args: any) {\n    try {\n      const dirPath = args.path;\n      if (!dirPath) throw new Error('path is required');\n\n      const result = await scanDirectory(dirPath);\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              operation: 'security_check',\n              path: dirPath,\n              ...result,\n              success: true\n            }, null, 2)\n          }\n        ]\n      };\n    } catch (error) {\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              error: error instanceof Error ? error.message : String(error),\n              success: false\n            }, null, 2)\n          }\n        ]\n      };\n    }\n  }\n\n  private async unpublishPackage(args: any) {\n    try {\n      const packageName = args.package_name;\n      if (!packageName) throw new Error('package_name is required');\n      if (!this.config.token) throw new Error('NPM_TOKEN environment variable is required');\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              message: `Unpublish request for ${packageName}${args.version ? `@${args.version}` : ' (all versions)'}. This is a destructive operation.`,\n              package: packageName,\n              version: args.version || 'all',\n              warning: 'Unpublishing is irreversible. Use npm unpublish command to complete.',\n              success: true\n            }, null, 2)\n          }\n        ]\n      };\n    } catch (error) {\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              error: error instanceof Error ? error.message : String(error),\n              success: false\n            }, null, 2)\n          }\n        ]\n      };\n    }\n  }\n\n  private async deprecatePackage(args: any) {\n    try {\n      const packageName = args.package_name;\n      const version = args.version;\n      const message = args.message;\n\n      if (!packageName || !version || !message) {\n        throw new Error('package_name, version, and message are all required');\n      }\n      if (!this.config.token) throw new Error('NPM_TOKEN environment variable is required');\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              message: `Deprecation request for ${packageName}@${version}`,\n              package: packageName,\n              version,\n              deprecationMessage: message,\n              warning: 'Use npm deprecate command to complete this action.',\n              success: true\n            }, null, 2)\n          }\n        ]\n      };\n    } catch (error) {\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              error: error instanceof Error ? error.message : String(error),\n              success: false\n            }, null, 2)\n          }\n        ]\n      };\n    }\n  }\n\n  private async listVersions(args: any) {\n    try {\n      const packageName = args.package_name;\n      if (!packageName) throw new Error('package_name is required');\n\n      const url = `${this.config.registry}${packageName}`;\n      const response = await fetch(url);\n\n      if (!response.ok) {\n        throw new Error(`Package not found: ${packageName}`);\n      }\n\n      const data = await response.json() as any;\n      const versions = Object.keys(data.versions || {}).sort((a, b) => {\n        try {\n          return semver.compare(b, a);\n        } catch {\n          return b.localeCompare(a);\n        }\n      });\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              package: packageName,\n              totalVersions: versions.length,\n              versions,\n              latest: data['dist-tags']?.latest,\n              success: true\n            }, null, 2)\n          }\n        ]\n      };\n    } catch (error) {\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              error: error instanceof Error ? error.message : String(error),\n              success: false\n            }, null, 2)\n          }\n        ]\n      };\n    }\n  }\n\n  private async getDownloadStats(args: any) {\n    try {\n      const packageName = args.package_name;\n      const period = args.period || 'last-month';\n\n      if (!packageName) throw new Error('package_name is required');\n\n      const url = `https://api.npmjs.org/downloads/point/${period}/${packageName}`;\n      const response = await fetch(url);\n\n      if (!response.ok) {\n        throw new Error(`Failed to fetch download stats for ${packageName}`);\n      }\n\n      const data = await response.json() as any;\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              package: packageName,\n              period,\n              downloads: data.downloads,\n              start: data.start,\n              end: data.end,\n              success: true\n            }, null, 2)\n          }\n        ]\n      };\n    } catch (error) {\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              error: error instanceof Error ? error.message : String(error),\n              success: false\n            }, null, 2)\n          }\n        ]\n      };\n    }\n  }\n\n  private async validatePackage(args: any) {\n    try {\n      const packagePath = args.package_path;\n      if (!packagePath) throw new Error('package_path is required');\n\n      const packageJsonPath = path.join(packagePath, 'package.json');\n      if (!fs.existsSync(packageJsonPath)) {\n        throw new Error(`package.json not found at ${packageJsonPath}`);\n      }\n\n      const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n      const issues: string[] = [];\n\n      // Validate required fields\n      if (!packageJson.name) issues.push('Missing required field: name');\n      if (!packageJson.version) issues.push('Missing required field: version');\n      if (!packageJson.description) issues.push('Missing recommended field: description');\n      if (!packageJson.author) issues.push('Missing recommended field: author');\n      if (!packageJson.license) issues.push('Missing recommended field: license');\n      if (!packageJson.repository) issues.push('Missing recommended field: repository');\n\n      // Validate name format\n      if (packageJson.name && !/^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(packageJson.name)) {\n        issues.push('Invalid package name format');\n      }\n\n      // Validate version format\n      if (packageJson.version && !semver.valid(packageJson.version)) {\n        issues.push('Invalid version format (must be semver)');\n      }\n\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              package: packageJson.name,\n              version: packageJson.version,\n              isValid: issues.length === 0,\n              issues,\n              warnings: issues.length > 0 ? 'Fix issues before publishing' : 'Package is ready to publish',\n              success: true\n            }, null, 2)\n          }\n        ]\n      };\n    } catch (error) {\n      return {\n        content: [\n          {\n            type: 'text',\n            text: JSON.stringify({\n              error: error instanceof Error ? error.message : String(error),\n              success: false\n            }, null, 2)\n          }\n        ]\n      };\n    }\n  }\n\n  async run(): Promise<void> {\n    const transport = new StdioServerTransport();\n    await this.server.connect(transport);\n\n    // Display startup summary\n    const tools = getToolsInfo();\n    const categories = tools.reduce((acc, tool) => {\n      acc[tool.category] = (acc[tool.category] || 0) + 1;\n      return acc;\n    }, {} as Record<string, number>);\n\n    console.error('📦 NPM JAEGIS MCP Server (v1.0.0) running on stdio');\n    console.error(`📊 Total Tools: ${tools.length} | Categories: ${Object.keys(categories).length}`);\n    console.error(`🔧 Configured for user: ${sanitizeCredential(this.config.username)}`);\n    console.error(`🌐 Registry: ${this.config.registry}`);\n    console.error('✅ Server ready with NPM package management tools');\n    console.error('💡 Use --list-tools to see all available tools');\n  }\n}\n\n// Run the server\nif (require.main === module) {\n  try {\n    const server = new NPMJAEGISMCPServer();\n    server.run().catch((error) => {\n      console.error('Failed to start NPM JAEGIS MCP Server:', error.message);\n      process.exit(1);\n    });\n  } catch (error) {\n    console.error('Failed to initialize NPM JAEGIS MCP Server:');\n    console.error(error instanceof Error ? error.message : String(error));\n    process.exit(1);\n  }\n}\n","import * as fs from 'fs';\r\nimport * as path from 'path';\r\n\r\nexport interface SecurityScanResult {\r\n    passed: boolean;\r\n    issues: string[];\r\n    warnings: string[];\r\n}\r\n\r\nconst SENSITIVE_FILES = [\r\n    '.env',\r\n    '.env.local',\r\n    '.env.production',\r\n    '.env.development',\r\n    'id_rsa',\r\n    'id_dsa',\r\n    'id_ed25519',\r\n    '*.pem',\r\n    '*.key',\r\n    '*.p12',\r\n    '*.pfx',\r\n    'npm-debug.log',\r\n    'yarn-error.log',\r\n    '.npmrc',\r\n    '.pypirc',\r\n    'secrets.json',\r\n    'credentials.json'\r\n];\r\n\r\nconst IGNORED_DIRS = [\r\n    'node_modules',\r\n    '.git',\r\n    '.svn',\r\n    '.hg',\r\n    'dist',\r\n    'build',\r\n    'coverage',\r\n    '__pycache__',\r\n    '.pytest_cache',\r\n    '.mypy_cache',\r\n    'logs',\r\n    'cache',\r\n    'tmp',\r\n    'temp'\r\n];\r\n\r\nconst SENSITIVE_PATTERNS = [\r\n    { name: 'AWS Access Key', regex: /AKIA[0-9A-Z]{16}/ },\r\n    { name: 'Generic Private Key', regex: /-----BEGIN PRIVATE KEY-----/ },\r\n    { name: 'Generic API Key', regex: /(api_key|apikey|secret|token)[\\s]*[:=][\\s]*['\"][a-zA-Z0-9_\\-]{20,}['\"]/i },\r\n    { name: 'GitHub Token', regex: /gh[pousr]_[a-zA-Z0-9]{36}/ },\r\n    { name: 'NPM Token', regex: /npm_[a-zA-Z0-9]{36}/ },\r\n    { name: 'Slack Token', regex: /xox[baprs]-([0-9a-zA-Z]{10,48})/ }\r\n];\r\n\r\nexport async function scanDirectory(dirPath: string): Promise<SecurityScanResult> {\r\n    const issues: string[] = [];\r\n    const warnings: string[] = [];\r\n\r\n    try {\r\n        const files = await getAllFiles(dirPath);\r\n\r\n        for (const file of files) {\r\n            const relativePath = path.relative(dirPath, file);\r\n            const fileName = path.basename(file);\r\n\r\n            // Check filename against sensitive patterns\r\n            if (SENSITIVE_FILES.some(pattern => {\r\n                if (pattern.startsWith('*')) return fileName.endsWith(pattern.slice(1));\r\n                return fileName === pattern;\r\n            })) {\r\n                issues.push(`Sensitive file found: ${relativePath}`);\r\n            }\r\n\r\n            // Scan content for secrets (skip large files and binaries)\r\n            try {\r\n                const stats = fs.statSync(file);\r\n                if (stats.size < 1024 * 1024) { // 1MB limit\r\n                    const content = fs.readFileSync(file, 'utf8');\r\n                    // Simple check for binary content (null bytes)\r\n                    if (!content.includes('\\0')) {\r\n                        for (const pattern of SENSITIVE_PATTERNS) {\r\n                            if (pattern.regex.test(content)) {\r\n                                // Don't include the actual secret in the output\r\n                                issues.push(`Potential ${pattern.name} found in: ${relativePath}`);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            } catch (err) {\r\n                // Ignore read errors (permissions, etc)\r\n            }\r\n        }\r\n    } catch (error) {\r\n        issues.push(`Failed to scan directory: ${error instanceof Error ? error.message : String(error)}`);\r\n    }\r\n\r\n    return {\r\n        passed: issues.length === 0,\r\n        issues,\r\n        warnings\r\n    };\r\n}\r\n\r\nasync function getAllFiles(dir: string): Promise<string[]> {\r\n    const files: string[] = [];\r\n\r\n    async function traverse(currentDir: string) {\r\n        const entries = fs.readdirSync(currentDir, { withFileTypes: true });\r\n\r\n        for (const entry of entries) {\r\n            const fullPath = path.join(currentDir, entry.name);\r\n\r\n            if (IGNORED_DIRS.includes(entry.name)) continue;\r\n\r\n            if (entry.isDirectory()) {\r\n                await traverse(fullPath);\r\n            } else {\r\n                files.push(fullPath);\r\n            }\r\n        }\r\n    }\r\n\r\n    await traverse(dir);\r\n    return files;\r\n}\r\n"],"mappings":"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","names":["fs","path","resolve"]}