From c94b9fe34e657ac37f29f762c1a006dca4c5663d Mon Sep 17 00:00:00 2001 From: CI Bot Date: Wed, 12 Nov 2025 09:01:00 +0000 Subject: [PATCH 1/2] Sync from internal repo --- .../2025-11-12T08-58-54-201Z-b459c664.md | 5 + .../2025-11-12T08-58-54-202Z-6ce93afe.md | 5 + .../2025-11-12T08-58-54-202Z-b2902f44.md | 5 + .../2025-11-12T08-58-54-203Z-1e6e63f4.md | 5 + .../2025-11-12T08-58-54-203Z-a5407dd0.md | 5 + .../2025-11-12T08-58-54-203Z-aa2221bc.md | 5 + .../2025-11-12T08-58-54-204Z-48e159c1.md | 5 + .../2025-11-12T08-58-54-204Z-6f324704.md | 5 + .../2025-11-12T08-58-54-204Z-8a7c488f.md | 5 + .../2025-11-12T08-58-54-204Z-a5da6786.md | 5 + .../2025-11-12T08-58-54-204Z-c82ea663.md | 5 + .../2025-11-12T08-58-54-205Z-2c261042.md | 5 + .../2025-11-12T08-58-54-205Z-40e4780f.md | 5 + bundle-mcp.js | 257 ++++++++++++++++-- docs/index.html | 10 + docs/scripts/main.js | 146 ++++++++++ docs/styles/main.css | 122 ++++++++- package-lock.json | 74 ++--- package.json | 6 + packages/cpinfo-analysis/package.json | 9 +- packages/documentation-tool/package.json | 8 +- packages/gaia/package.json | 2 +- .../gw-cli-connection-analysis/package.json | 6 +- packages/gw-cli/package.json | 6 +- packages/harmony-sase/package.json | 4 +- packages/https-inspection/package.json | 6 +- packages/management-logs/package.json | 6 +- packages/management/package.json | 8 +- packages/reputation-service/package.json | 4 +- packages/spark-management/package.json | 6 +- packages/threat-emulation/package.json | 4 +- packages/threat-prevention/package.json | 6 +- 32 files changed, 658 insertions(+), 97 deletions(-) create mode 100644 .changeset/2025-11-12T08-58-54-201Z-b459c664.md create mode 100644 .changeset/2025-11-12T08-58-54-202Z-6ce93afe.md create mode 100644 .changeset/2025-11-12T08-58-54-202Z-b2902f44.md create mode 100644 .changeset/2025-11-12T08-58-54-203Z-1e6e63f4.md create mode 100644 .changeset/2025-11-12T08-58-54-203Z-a5407dd0.md create mode 100644 .changeset/2025-11-12T08-58-54-203Z-aa2221bc.md create mode 100644 .changeset/2025-11-12T08-58-54-204Z-48e159c1.md create mode 100644 .changeset/2025-11-12T08-58-54-204Z-6f324704.md create mode 100644 .changeset/2025-11-12T08-58-54-204Z-8a7c488f.md create mode 100644 .changeset/2025-11-12T08-58-54-204Z-a5da6786.md create mode 100644 .changeset/2025-11-12T08-58-54-204Z-c82ea663.md create mode 100644 .changeset/2025-11-12T08-58-54-205Z-2c261042.md create mode 100644 .changeset/2025-11-12T08-58-54-205Z-40e4780f.md diff --git a/.changeset/2025-11-12T08-58-54-201Z-b459c664.md b/.changeset/2025-11-12T08-58-54-201Z-b459c664.md new file mode 100644 index 0000000..1323489 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-201Z-b459c664.md @@ -0,0 +1,5 @@ +--- +"@chkp/cpinfo-analysis-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-202Z-6ce93afe.md b/.changeset/2025-11-12T08-58-54-202Z-6ce93afe.md new file mode 100644 index 0000000..a5b0607 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-202Z-6ce93afe.md @@ -0,0 +1,5 @@ +--- +"@chkp/quantum-gaia-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-202Z-b2902f44.md b/.changeset/2025-11-12T08-58-54-202Z-b2902f44.md new file mode 100644 index 0000000..ecf9e64 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-202Z-b2902f44.md @@ -0,0 +1,5 @@ +--- +"@chkp/documentation-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-203Z-1e6e63f4.md b/.changeset/2025-11-12T08-58-54-203Z-1e6e63f4.md new file mode 100644 index 0000000..38b13ea --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-203Z-1e6e63f4.md @@ -0,0 +1,5 @@ +--- +"@chkp/quantum-gw-connection-analysis-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-203Z-a5407dd0.md b/.changeset/2025-11-12T08-58-54-203Z-a5407dd0.md new file mode 100644 index 0000000..eaae582 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-203Z-a5407dd0.md @@ -0,0 +1,5 @@ +--- +"@chkp/quantum-gw-cli-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-203Z-aa2221bc.md b/.changeset/2025-11-12T08-58-54-203Z-aa2221bc.md new file mode 100644 index 0000000..0390646 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-203Z-aa2221bc.md @@ -0,0 +1,5 @@ +--- +"@chkp/harmony-sase-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-204Z-48e159c1.md b/.changeset/2025-11-12T08-58-54-204Z-48e159c1.md new file mode 100644 index 0000000..a66a711 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-204Z-48e159c1.md @@ -0,0 +1,5 @@ +--- +"@chkp/management-logs-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-204Z-6f324704.md b/.changeset/2025-11-12T08-58-54-204Z-6f324704.md new file mode 100644 index 0000000..2717868 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-204Z-6f324704.md @@ -0,0 +1,5 @@ +--- +"@chkp/reputation-service-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-204Z-8a7c488f.md b/.changeset/2025-11-12T08-58-54-204Z-8a7c488f.md new file mode 100644 index 0000000..878a66e --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-204Z-8a7c488f.md @@ -0,0 +1,5 @@ +--- +"@chkp/spark-management-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-204Z-a5da6786.md b/.changeset/2025-11-12T08-58-54-204Z-a5da6786.md new file mode 100644 index 0000000..1e7a033 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-204Z-a5da6786.md @@ -0,0 +1,5 @@ +--- +"@chkp/https-inspection-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-204Z-c82ea663.md b/.changeset/2025-11-12T08-58-54-204Z-c82ea663.md new file mode 100644 index 0000000..4b99f02 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-204Z-c82ea663.md @@ -0,0 +1,5 @@ +--- +"@chkp/quantum-management-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-205Z-2c261042.md b/.changeset/2025-11-12T08-58-54-205Z-2c261042.md new file mode 100644 index 0000000..fe860ef --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-205Z-2c261042.md @@ -0,0 +1,5 @@ +--- +"@chkp/threat-emulation-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/.changeset/2025-11-12T08-58-54-205Z-40e4780f.md b/.changeset/2025-11-12T08-58-54-205Z-40e4780f.md new file mode 100644 index 0000000..bae74d4 --- /dev/null +++ b/.changeset/2025-11-12T08-58-54-205Z-40e4780f.md @@ -0,0 +1,5 @@ +--- +"@chkp/threat-prevention-mcp": patch +--- + +Updated configuration, Modified 1 file(s) (synced from internal repository) diff --git a/bundle-mcp.js b/bundle-mcp.js index d867edd..6242b75 100644 --- a/bundle-mcp.js +++ b/bundle-mcp.js @@ -1,28 +1,181 @@ #!/usr/bin/env node + +/** + * Enhanced MCP Package Bundler with Dependency Propagation + * + * This bundler: + * 1. Uses ESBuild to bundle TypeScript MCP packages + * 2. Automatically bundles @chkp packages (mcp-utils, quantum-infra) + * 3. Propagates their dependencies to the consuming package + * 4. Detects and warns about missing dependencies for npm packaging + * 5. Handles version conflicts between propagated dependencies + * + * Key insight: npm packaging uses root package.json for dependencies, + * so propagated dependencies must be declared there for runtime resolution. + */ + import { build } from 'esbuild'; -import { readFileSync } from 'fs'; -import { resolve } from 'path'; +import { readFileSync, writeFileSync, readdirSync, statSync } from 'fs'; +import { resolve, dirname } from 'path'; import { builtinModules } from 'module'; -// Get the current working directory (where the script is called from) +// Get the current working directory (where the script is called from) const cwd = process.cwd(); -// Read package.json to get dependencies +// Read package.json const packageJson = JSON.parse(readFileSync(resolve(cwd, 'package.json'), 'utf8')); + +/** + * Build a mapping of package names to their directory names + * + * This scans the packages/ directory to create a map like: + * "@chkp/mcp-utils" -> "mcp-utils" + * "@chkp/quantum-infra" -> "infra" + * + * This is needed because package names don't always match directory names. + */ +function buildPackageMapping() { + const mapping = new Map(); + const packagesDir = resolve(cwd, '..'); + + try { + const entries = readdirSync(packagesDir); + + for (const entry of entries) { + const entryPath = resolve(packagesDir, entry); + + // Skip non-directories and hidden files + if (!statSync(entryPath).isDirectory() || entry.startsWith('.')) { + continue; + } + + const packageJsonPath = resolve(entryPath, 'package.json'); + try { + const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')); + if (packageJson.name) { + mapping.set(packageJson.name, entry); + } + } catch (error) { + // Skip directories without valid package.json + continue; + } + } + } catch (error) { + console.warn(`⚠️ Could not scan packages directory: ${error.message}`); + } + + return mapping; +} + +/** + * Collect external dependencies from @chkp packages that will be bundled + * + * When we bundle @chkp/mcp-utils and @chkp/quantum-infra, their external + * dependencies (like axios, zod, commander) need to be available at runtime. + * This function finds all such dependencies and handles version conflicts. + * + * Returns a Map of dependency name -> version that need to be declared + * in the consuming package's package.json for proper npm packaging. + */ +function collectChkpDependencies() { + const collected = new Map(); // Use Map to store name -> version + const versionConflicts = new Map(); // Track version conflicts + const devDependencies = packageJson.devDependencies || {}; + const dependencies = packageJson.dependencies || {}; // Also check dependencies + const packageMapping = buildPackageMapping(); + + // Find all @chkp packages in both devDependencies and dependencies + const allDeps = { ...devDependencies, ...dependencies }; + for (const [depName, depVersion] of Object.entries(allDeps)) { + if (depName.startsWith('@chkp/') || depName.startsWith('@chkp-internal/')) { + try { + // Find the directory for this package using the mapping + const dirName = packageMapping.get(depName); + if (!dirName) { + console.warn(`⚠️ Could not find directory for package ${depName}`); + continue; + } + + const chkpPackageJsonPath = resolve(cwd, '..', dirName, 'package.json'); + const chkpPackageJson = JSON.parse(readFileSync(chkpPackageJsonPath, 'utf8')); + const chkpDeps = chkpPackageJson.dependencies || {}; + + // Add non-@chkp dependencies to our collection with version conflict resolution + for (const [name, version] of Object.entries(chkpDeps)) { + if (!name.startsWith('@chkp/') && !name.startsWith('@chkp-internal/')) { + if (collected.has(name)) { + const existingVersion = collected.get(name); + if (existingVersion !== version) { + // Version conflict - use the higher version or keep existing if same major + if (!versionConflicts.has(name)) { + versionConflicts.set(name, new Set([existingVersion])); + } + versionConflicts.get(name).add(version); + + // Simple resolution: use the newer version (higher major/minor) + const existing = existingVersion.replace(/^\^/, ''); + const new_ver = version.replace(/^\^/, ''); + if (new_ver > existing) { + collected.set(name, version); + console.warn(`⚠️ Version conflict for ${name}: using ${version} (was ${existingVersion})`); + } + } + } else { + collected.set(name, version); + } + } + } + } catch (error) { + console.warn(`⚠️ Could not read dependencies for ${depName}: ${error.message}`); + } + } + } + + // Report version conflicts + if (versionConflicts.size > 0) { + console.warn('⚠️ Dependency version conflicts detected:'); + for (const [name, versions] of versionConflicts.entries()) { + console.warn(` ${name}: ${Array.from(versions).join(' vs ')} -> using ${collected.get(name)}`); + } + } + + return collected; +} + +// Step 1: Collect dependencies from bundled @chkp packages FIRST +// This must happen before bundling decisions to ensure proper externalization +const chkpDependenciesMap = collectChkpDependencies(); +const chkpDependencies = Array.from(chkpDependenciesMap.keys()); + +// Step 2: Get external dependencies from source package.json const externalDeps = Object.keys(packageJson.dependencies || {}); +const allRequiredDeps = [...externalDeps, ...chkpDependencies]; -// Add Node.js built-in modules to external dependencies -const allExternalDeps = [...externalDeps, ...builtinModules, ...builtinModules.map(m => `node:${m}`)]; +// Step 3: Create runtime dependency map (for dist/package.json introspection) +const runtimeDependencies = { + ...packageJson.dependencies, + ...Object.fromEntries(chkpDependenciesMap) +}; + +console.log('Bundling with explicit external dependencies:', externalDeps); +if (chkpDependencies.length > 0) { + console.log('Additional dependencies from bundled @chkp packages:', chkpDependencies); +} +console.log('All external dependencies:', allRequiredDeps); -console.log('Bundling with external dependencies:', externalDeps); +// Add Node.js built-in modules to external dependencies +// These are always available in Node.js runtime and should never be bundled +const allExternalDeps = [...allRequiredDeps, ...builtinModules, ...builtinModules.map(m => `node:${m}`)]; +// Run ESBuild with selective bundling configuration +// This bundles @chkp packages while keeping npm dependencies external await build({ - entryPoints: [resolve(cwd, 'src/index.ts')], - bundle: true, - platform: 'node', - target: 'node18', - format: 'esm', - outfile: resolve(cwd, 'dist/index.js'), + entryPoints: [resolve(cwd, 'src/index.ts')], // Main entry point + bundle: true, // Enable bundling + platform: 'node', // Target Node.js environment + target: 'node18', // Compatible with Node.js 18+ + format: 'esm', // ES modules format + outfile: resolve(cwd, 'dist/index.js'), // Output bundled file // Don't set external globally - let our plugin decide everything plugins: [ { @@ -31,45 +184,109 @@ await build({ // Track what gets bundled vs external const bundledPackages = []; - // Mark all non-@chkp packages as external during resolution + // Custom resolution logic: bundle @chkp packages, externalize everything else + // This implements the core insight: internal packages bundled, npm deps external build.onResolve({ filter: /.*/ }, (args) => { // Skip entry points - they should never be external if (args.kind === 'entry-point') { return null; } - // Bundle @chkp and @chkp-internal packages + // Bundle @chkp and @chkp-internal packages (our internal monorepo packages) if (args.path.startsWith('@chkp/') || args.path.startsWith('@chkp-internal/')) { bundledPackages.push(args.path); - return null; // Let esbuild handle normally (bundle) + return null; // Let ESBuild handle normally (bundle into output) } - // Keep built-ins and npm packages external + // Keep Node.js built-ins external (they're provided by runtime) if (builtinModules.includes(args.path) || args.path.startsWith('node:')) { return { path: args.path, external: true }; } - if (externalDeps.includes(args.path)) { + // Keep npm dependencies external (they're in package.json dependencies) + if (externalDeps.includes(args.path) || chkpDependencies.includes(args.path)) { return { path: args.path, external: true }; } - // For any other npm package, mark as external + // For any other npm package, mark as external by default if (args.path.match(/^[a-zA-Z@]/)) { return { path: args.path, external: true }; } - // Let relative imports be handled normally (bundled) + // Let relative imports be bundled (local source files) return null; }); build.onEnd(() => { + // Log which internal packages were bundled for verification if (bundledPackages.length > 0) { console.log('📦 Bundled @chkp packages:', [...new Set(bundledPackages)]); } + + // Create runtime package.json in dist/ for introspection + // NOTE: npm uses root package.json for dependency resolution, + // but this dist/package.json is useful for debugging and tooling + const runtimePackageJson = { + ...packageJson, + dependencies: runtimeDependencies + }; + + // Sort dependencies alphabetically for cleaner output + const sortedDeps = {}; + Object.keys(runtimePackageJson.dependencies || {}).sort().forEach(key => { + sortedDeps[key] = runtimePackageJson.dependencies[key]; + }); + runtimePackageJson.dependencies = sortedDeps; + + // Write the runtime package.json to dist/ + const distPackageJsonPath = resolve(cwd, 'dist', 'package.json'); + writeFileSync( + distPackageJsonPath, + JSON.stringify(runtimePackageJson, null, 2) + '\n' + ); + + // Report what dependencies were collected for verification + const collectedDeps = Object.keys(Object.fromEntries(chkpDependenciesMap)); + // Validate that all runtime dependencies are declared in package.json + // This catches the critical issue where npm ignores dist/package.json + if (collectedDeps.length > 0) { + console.log('📝 Runtime dependencies collected:', collectedDeps); + + // Check if all collected dependencies are present in the root package.json + // This is crucial because npm uses root package.json, not dist/package.json + const originalPackageJson = JSON.parse(readFileSync(resolve(cwd, 'package.json'), 'utf8')); + const originalDeps = Object.keys(originalPackageJson.dependencies || {}); + const missingDeps = collectedDeps.filter(dep => !originalDeps.includes(dep)); + + if (missingDeps.length > 0) { + // Display prominent warning about missing dependencies + // This immediate feedback prevents broken packages from being published + console.log(''); + console.log('🚨'.repeat(20)); + console.log('🚨 MISSING DEPENDENCIES in package.json:', missingDeps); + console.log('🚨'.repeat(20)); + console.log('💡 Add these to the "dependencies" section of your package.json:'); + console.log(''); + for (const dep of missingDeps) { + const version = chkpDependenciesMap.get(dep); + console.log(` "${dep}": "${version}",`); + } + console.log(''); + console.log('⚠️ Without these dependencies, your package will FAIL when installed via npm!'); + console.log('⚠️ Users will see "Cannot find package" errors at runtime.'); + console.log('🚨'.repeat(20)); + console.log(''); + } else { + console.log('✅ All runtime dependencies are properly declared in package.json'); + } + } else { + console.log('📝 No external dependencies collected from @chkp packages'); + } }); } } ] }); +// Build completed successfully with all validations passed console.log('✅ Bundle complete'); diff --git a/docs/index.html b/docs/index.html index a00b79c..9a952ab 100644 --- a/docs/index.html +++ b/docs/index.html @@ -511,5 +511,15 @@

Sample Prompt:

+ + + + + diff --git a/docs/scripts/main.js b/docs/scripts/main.js index a92548b..52457c3 100644 --- a/docs/scripts/main.js +++ b/docs/scripts/main.js @@ -1229,3 +1229,149 @@ function initializeUseCases() { }); } +// Floating Action Button (FAB) - Draggable functionality +function initializeFAB() { + const fab = document.getElementById('contactFab'); + if (!fab) return; + + let isDragging = false; + let startX, startY; + let offsetX, offsetY; + let hasMoved = false; + + // Load saved position from localStorage + const savedPosition = localStorage.getItem('fabPosition'); + if (savedPosition) { + try { + const { right, bottom } = JSON.parse(savedPosition); + fab.style.right = right; + fab.style.bottom = bottom; + } catch (e) { + console.error('Failed to load FAB position:', e); + } + } + + function startDrag(e) { + // Prevent default to avoid text selection and page scrolling + e.preventDefault(); + + isDragging = true; + hasMoved = false; + fab.style.cursor = 'grabbing'; + fab.classList.add('dragging'); + + // Get touch or mouse position + const clientX = e.type.includes('touch') ? e.touches[0].clientX : e.clientX; + const clientY = e.type.includes('touch') ? e.touches[0].clientY : e.clientY; + + // Get the FAB's current position + const rect = fab.getBoundingClientRect(); + + // Calculate offset from click point to FAB's top-left corner + offsetX = clientX - rect.left; + offsetY = clientY - rect.top; + + startX = clientX; + startY = clientY; + } + + function drag(e) { + if (!isDragging) return; + + e.preventDefault(); + + const clientX = e.type.includes('touch') ? e.touches[0].clientX : e.clientX; + const clientY = e.type.includes('touch') ? e.touches[0].clientY : e.clientY; + + // Check if moved significantly + const moveDistance = Math.sqrt( + Math.pow(clientX - startX, 2) + + Math.pow(clientY - startY, 2) + ); + + if (moveDistance > 5) { + hasMoved = true; + } + + // Calculate new position based on cursor position minus offset + const newLeft = clientX - offsetX; + const newTop = clientY - offsetY; + + // Convert to right/bottom positioning + const newRight = window.innerWidth - newLeft - fab.offsetWidth; + const newBottom = window.innerHeight - newTop - fab.offsetHeight; + + // Constrain to viewport with padding + const padding = 10; + const constrainedRight = Math.max(padding, Math.min(window.innerWidth - fab.offsetWidth - padding, newRight)); + const constrainedBottom = Math.max(padding, Math.min(window.innerHeight - fab.offsetHeight - padding, newBottom)); + + // Apply position directly + fab.style.right = `${constrainedRight}px`; + fab.style.bottom = `${constrainedBottom}px`; + } + + function endDrag(e) { + if (!isDragging) return; + + isDragging = false; + fab.style.cursor = 'grab'; + fab.classList.remove('dragging'); + + // If the FAB was moved significantly, prevent navigation + if (hasMoved) { + e.preventDefault(); + e.stopPropagation(); + + // Save position + const position = { + right: fab.style.right, + bottom: fab.style.bottom + }; + localStorage.setItem('fabPosition', JSON.stringify(position)); + + // Reset hasMoved after a short delay + setTimeout(() => { + hasMoved = false; + }, 100); + } + } + + // Prevent navigation if dragged + fab.addEventListener('click', (e) => { + if (hasMoved) { + e.preventDefault(); + e.stopPropagation(); + return false; + } + }, true); + + // Mouse events + fab.addEventListener('mousedown', startDrag); + document.addEventListener('mousemove', drag); + document.addEventListener('mouseup', endDrag); + + // Touch events + fab.addEventListener('touchstart', startDrag, { passive: false }); + document.addEventListener('touchmove', drag, { passive: false }); + document.addEventListener('touchend', endDrag, { passive: false }); + + // Prevent context menu on long press + fab.addEventListener('contextmenu', (e) => { + if (isDragging || hasMoved) { + e.preventDefault(); + } + }); + + // Clean up on page unload + window.addEventListener('beforeunload', () => { + document.removeEventListener('mousemove', drag); + document.removeEventListener('mouseup', endDrag); + document.removeEventListener('touchmove', drag); + document.removeEventListener('touchend', endDrag); + }); +} + +// Initialize FAB when DOM is ready +document.addEventListener('DOMContentLoaded', initializeFAB); + diff --git a/docs/styles/main.css b/docs/styles/main.css index 55f267e..8f9fdb9 100644 --- a/docs/styles/main.css +++ b/docs/styles/main.css @@ -1578,8 +1578,126 @@ html { } .btn-sm { - padding: 0.5rem 1rem; - font-size: var(--font-size-sm); + padding: 0.5rem 1rem; + font-size: var(--font-size-sm); + } + +/* Floating Action Button (Contact FAB) */ +.contact-fab { + position: fixed; + bottom: 30px; + right: 30px; + width: 60px; + height: 60px; + background: var(--gradient-primary); + color: white; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 24px; + line-height: 60px; + box-shadow: 0 4px 12px rgba(238, 12, 93, 0.4); + cursor: grab; + transition: transform var(--transition-base), box-shadow var(--transition-base); + z-index: 9999; + text-decoration: none; + border: none; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + touch-action: none; + will-change: transform; +} + +.contact-fab i { + pointer-events: none; + display: block; + width: 100%; + height: 100%; + line-height: 60px; + text-align: center; +} + +.contact-fab:hover { + transform: scale(1.1); + box-shadow: 0 6px 20px rgba(238, 12, 93, 0.6); +} + +.contact-fab:active { + transform: scale(0.95); +} + +.contact-fab.dragging { + cursor: grabbing; + transition: none; +} + +.contact-fab.dragging:hover { + transform: none; } +/* Tooltip for Contact FAB */ +.contact-fab::before { + content: attr(data-tooltip); + position: absolute; + bottom: 100%; + right: 0; + margin-bottom: 10px; + padding: 8px 12px; + background: var(--gravitas-grey); + color: white; + font-size: 14px; + white-space: nowrap; + border-radius: var(--radius-md); + opacity: 0; + pointer-events: none; + transition: opacity var(--transition-fast); + font-family: var(--font-family); + font-weight: 500; +} + +.contact-fab::after { + content: ''; + position: absolute; + bottom: 100%; + right: 20px; + margin-bottom: 2px; + border: 6px solid transparent; + border-top-color: var(--gravitas-grey); + opacity: 0; + pointer-events: none; + transition: opacity var(--transition-fast); +} + +.contact-fab:hover::before, +.contact-fab:hover::after { + opacity: 1; +} + +.contact-fab.dragging::before, +.contact-fab.dragging::after { + opacity: 0 !important; +} + +@media (max-width: 768px) { + .contact-fab { + width: 50px; + height: 50px; + font-size: 20px; + bottom: 20px; + right: 20px; + } + + .contact-fab::before { + font-size: 12px; + padding: 6px 10px; + } +} + + + +``` + diff --git a/package-lock.json b/package-lock.json index 1aa4d3e..3d53a05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ ], "dependencies": { "@modelcontextprotocol/sdk": "^1.11.4", + "axios": "^1.12.1", "body-parser": "^1.20.2", "commander": "^13.1.0", "express": "^4.18.2", @@ -18174,9 +18175,8 @@ "version": "0.1.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.4", - "axios": "^1.12.1", - "commander": "^11.0.0", + "@modelcontextprotocol/sdk": "^1.0.4", + "commander": "^13.1.0", "zod": "^3.24.4" }, "bin": { @@ -18185,9 +18185,9 @@ "devDependencies": { "@chkp/mcp-utils": "*", "@types/node": "^18.15.11", - "@vitest/coverage-v8": "^4.0.6", + "@vitest/coverage-v8": "^1.0.0", "typescript": "^5.0.4", - "vitest": "^3.2.4" + "vitest": "^1.0.0" }, "engines": { "node": ">=18.0.0" @@ -18859,10 +18859,10 @@ "version": "0.1.6", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", - "axios": "^1.11.0", - "commander": "^11.1.0", - "zod": "^3.22.4" + "@modelcontextprotocol/sdk": "^1.0.4", + "axios": "^1.12.1", + "commander": "^13.1.0", + "zod": "^3.24.4" }, "bin": { "documentation-mcp": "dist/index.js" @@ -18893,7 +18893,7 @@ "version": "0.3.7", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", "commander": "^13.1.0", "zod": "^3.24.4" @@ -18983,10 +18983,10 @@ "version": "0.5.4", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "bin": { "quantum-gw-cli-mcp": "dist/index.js" @@ -19029,10 +19029,10 @@ "version": "0.5.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "bin": { "quantum-gw-connection-analysis-mcp": "dist/index.js" @@ -19475,10 +19475,10 @@ "version": "0.4.5", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", "commander": "^13.1.0", - "zod": "^3.22.4" + "zod": "^3.24.4" }, "bin": { "harmony-sase-mcp": "dist/index.js" @@ -19498,10 +19498,10 @@ "version": "0.8.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "bin": { "https-inspection-mcp": "dist/index.js" @@ -19561,12 +19561,12 @@ "version": "0.9.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", "body-parser": "^1.20.2", "commander": "^13.1.0", - "express": "^4.21.2", - "zod": "^3.22.4" + "express": "^4.18.2", + "zod": "^3.24.4" }, "bin": { "quantum-management-mcp": "dist/index.js" @@ -19591,10 +19591,10 @@ "version": "0.7.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "bin": { "management-logs-mcp": "dist/index.js" @@ -19642,11 +19642,11 @@ "version": "0.3.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", "body-parser": "^1.20.2", "commander": "^13.1.0", - "express": "^4.21.2" + "express": "^4.18.2" }, "bin": { "reputation-service-mcp": "dist/index.js" @@ -19670,10 +19670,10 @@ "version": "0.1.5", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.1.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "bin": { "spark-management-mcp": "dist/index.js" @@ -19702,11 +19702,11 @@ "version": "0.1.5", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", "body-parser": "^1.20.2", "commander": "^13.1.0", - "express": "^4.21.2" + "express": "^4.18.2" }, "bin": { "threat-emulation-mcp": "dist/index.js" @@ -19730,10 +19730,10 @@ "version": "0.8.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "bin": { "threat-prevention-mcp": "dist/index.js" diff --git a/package.json b/package.json index 6c7dafa..74a81e7 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,11 @@ "verify-shebangs": "node scripts-internal/utilities/verify-fix-shebangs.js", "fix-shebangs": "node scripts-internal/utilities/verify-fix-shebangs.js --fix", "prebuild:all": "test -f scripts-internal/utilities/verify-fix-shebangs.js && npm run verify-shebangs || echo 'Shebang verification skipped - script not available'", + "verify-packages": "node scripts-internal/verify-packages-for-ci.js", + "verify-packages:fast": "node scripts-internal/verify-packages-for-ci.js --fast", + "deps:analyze": "node scripts-internal/verify-and-clean-dependencies.js", + "deps:clean": "node scripts-internal/verify-and-clean-dependencies.js --apply", + "deps:status": "node scripts-internal/dependency-status-report.js", "sync-versions": "node scripts-internal/version-management/sync-public-versions.js", "sync-versions:dry-run": "node scripts-internal/version-management/sync-public-versions.js --dry-run", "package:add": "node scripts-internal/utilities/promote-package.js add", @@ -80,6 +85,7 @@ "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.11.4", + "axios": "^1.12.1", "body-parser": "^1.20.2", "commander": "^13.1.0", "express": "^4.18.2", diff --git a/packages/cpinfo-analysis/package.json b/packages/cpinfo-analysis/package.json index 3b0d137..7a779dd 100644 --- a/packages/cpinfo-analysis/package.json +++ b/packages/cpinfo-analysis/package.json @@ -29,16 +29,15 @@ "test:coverage": "vitest run --coverage" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.4", - "axios": "^1.12.1", - "commander": "^11.0.0", + "@modelcontextprotocol/sdk": "^1.0.4", + "commander": "^13.1.0", "zod": "^3.24.4" }, "devDependencies": { "@chkp/mcp-utils": "*", "@types/node": "^18.15.11", - "@vitest/coverage-v8": "^4.0.6", + "@vitest/coverage-v8": "^1.0.0", "typescript": "^5.0.4", - "vitest": "^3.2.4" + "vitest": "^1.0.0" } } diff --git a/packages/documentation-tool/package.json b/packages/documentation-tool/package.json index b01ae30..fb27d07 100644 --- a/packages/documentation-tool/package.json +++ b/packages/documentation-tool/package.json @@ -26,10 +26,10 @@ "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", - "axios": "^1.11.0", - "commander": "^11.1.0", - "zod": "^3.22.4" + "@modelcontextprotocol/sdk": "^1.0.4", + "commander": "^13.1.0", + "axios": "^1.12.1", + "zod": "^3.24.4" }, "devDependencies": { "@chkp/mcp-utils": "*", diff --git a/packages/gaia/package.json b/packages/gaia/package.json index e64bf64..87e392e 100644 --- a/packages/gaia/package.json +++ b/packages/gaia/package.json @@ -22,7 +22,7 @@ "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", "commander": "^13.1.0", "zod": "^3.24.4" diff --git a/packages/gw-cli-connection-analysis/package.json b/packages/gw-cli-connection-analysis/package.json index cec18fa..dad1845 100644 --- a/packages/gw-cli-connection-analysis/package.json +++ b/packages/gw-cli-connection-analysis/package.json @@ -16,10 +16,10 @@ "author": "Check Point Software Technologies", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "devDependencies": { "@chkp/quantum-gw-cli-base": "*", diff --git a/packages/gw-cli/package.json b/packages/gw-cli/package.json index 088cd4f..4bda6fc 100644 --- a/packages/gw-cli/package.json +++ b/packages/gw-cli/package.json @@ -16,10 +16,10 @@ "author": "Check Point Software Technologies", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "devDependencies": { "@chkp/quantum-infra": "*", diff --git a/packages/harmony-sase/package.json b/packages/harmony-sase/package.json index a3920d3..07e6470 100644 --- a/packages/harmony-sase/package.json +++ b/packages/harmony-sase/package.json @@ -26,10 +26,10 @@ }, "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", "commander": "^13.1.0", - "zod": "^3.22.4" + "zod": "^3.24.4" }, "devDependencies": { "@chkp/harmony-infra": "*", diff --git a/packages/https-inspection/package.json b/packages/https-inspection/package.json index 10f7370..a89a047 100644 --- a/packages/https-inspection/package.json +++ b/packages/https-inspection/package.json @@ -20,10 +20,10 @@ "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "devDependencies": { "@chkp/mcp-utils": "*", diff --git a/packages/management-logs/package.json b/packages/management-logs/package.json index 0db2461..6532403 100644 --- a/packages/management-logs/package.json +++ b/packages/management-logs/package.json @@ -26,10 +26,10 @@ "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "devDependencies": { "@chkp/mcp-utils": "*", diff --git a/packages/management/package.json b/packages/management/package.json index f28c8a9..6f6a564 100644 --- a/packages/management/package.json +++ b/packages/management/package.json @@ -23,12 +23,12 @@ "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", - "axios": "^1.12.1", + "@modelcontextprotocol/sdk": "^1.0.4", "body-parser": "^1.20.2", + "express": "^4.18.2", "commander": "^13.1.0", - "express": "^4.21.2", - "zod": "^3.22.4" + "axios": "^1.12.1", + "zod": "^3.24.4" }, "devDependencies": { "@chkp/mcp-utils": "*", diff --git a/packages/reputation-service/package.json b/packages/reputation-service/package.json index 13c31e7..3cae900 100644 --- a/packages/reputation-service/package.json +++ b/packages/reputation-service/package.json @@ -17,11 +17,11 @@ "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", "body-parser": "^1.20.2", "commander": "^13.1.0", - "express": "^4.21.2" + "express": "^4.18.2" }, "repository": { "type": "git", diff --git a/packages/spark-management/package.json b/packages/spark-management/package.json index 43dfb62..31075a3 100644 --- a/packages/spark-management/package.json +++ b/packages/spark-management/package.json @@ -26,10 +26,10 @@ "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.1.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "devDependencies": { "@chkp/quantum-infra": "*", diff --git a/packages/threat-emulation/package.json b/packages/threat-emulation/package.json index f62a388..e014d52 100644 --- a/packages/threat-emulation/package.json +++ b/packages/threat-emulation/package.json @@ -17,11 +17,11 @@ "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", "body-parser": "^1.20.2", "commander": "^13.1.0", - "express": "^4.21.2" + "express": "^4.18.2" }, "repository": { "type": "git", diff --git a/packages/threat-prevention/package.json b/packages/threat-prevention/package.json index e787dd7..f5560ac 100644 --- a/packages/threat-prevention/package.json +++ b/packages/threat-prevention/package.json @@ -20,10 +20,10 @@ "start": "node dist/index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.11.1", + "@modelcontextprotocol/sdk": "^1.0.4", "axios": "^1.12.1", - "commander": "^11.0.0", - "zod": "^3.22.4" + "commander": "^13.1.0", + "zod": "^3.24.4" }, "devDependencies": { "@chkp/mcp-utils": "*", From 353b25e4772fe6c2944073d75a9971ee5a0797f5 Mon Sep 17 00:00:00 2001 From: chkp-nirm Date: Wed, 12 Nov 2025 11:15:36 +0200 Subject: [PATCH 2/2] Update devDependencies for vitest and coverage-v8 --- packages/cpinfo-analysis/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cpinfo-analysis/package.json b/packages/cpinfo-analysis/package.json index 7a779dd..e8e35b7 100644 --- a/packages/cpinfo-analysis/package.json +++ b/packages/cpinfo-analysis/package.json @@ -36,8 +36,8 @@ "devDependencies": { "@chkp/mcp-utils": "*", "@types/node": "^18.15.11", - "@vitest/coverage-v8": "^1.0.0", + "@vitest/coverage-v8": "^4.0.6", "typescript": "^5.0.4", - "vitest": "^1.0.0" + "vitest": "^4.0.6" } }