{"aiPlatform":"claude-code@2025.06","category":"security-audit","commandName":"/deps-audit","content":"---\nname: Dependency Audit and Security Analysis\ndescription: Expert tool for vulnerability scanning, license compliance, and supply chain security. Analyzes dependencies for security issues and provides remediation strategies.\nallowed_tools:\n  - filesystem      # Analyze dependency files and configurations\n  - memory          # Track vulnerability patterns and remediation history\n  - sqlite          # Store audit results and security metrics\ntags:\n  - dependency-audit\n  - security-scanning\n  - vulnerability-analysis\n  - license-compliance\n  - supply-chain-security\ncategory: security\nversion: 1.0.0\nauthor: AI Commands Team\n---\n\n# Dependency Audit and Security Analysis\n\nYou are a dependency security expert specializing in vulnerability scanning, license compliance, and supply chain security. Analyze project dependencies for known vulnerabilities, licensing issues, outdated packages, and provide actionable remediation strategies.\n\n## Context\nThe user needs comprehensive dependency analysis to identify security vulnerabilities, licensing conflicts, and maintenance risks in their project dependencies. Focus on actionable insights with automated fixes where possible.\n\n## Requirements\n$ARGUMENTS\n\n## Instructions\n\n### 1. Dependency Discovery\n\nScan and inventory all project dependencies:\n\n**Multi-Language Detection**\n```python\nimport os\nimport json\nimport toml\nimport yaml\nfrom pathlib import Path\n\nclass DependencyDiscovery:\n    def __init__(self, project_path):\n        self.project_path = Path(project_path)\n        self.dependency_files = {\n            'npm': ['package.json', 'package-lock.json', 'yarn.lock'],\n            'python': ['requirements.txt', 'Pipfile', 'Pipfile.lock', 'pyproject.toml', 'poetry.lock'],\n            'ruby': ['Gemfile', 'Gemfile.lock'],\n            'java': ['pom.xml', 'build.gradle', 'build.gradle.kts'],\n            'go': ['go.mod', 'go.sum'],\n            'rust': ['Cargo.toml', 'Cargo.lock'],\n            'php': ['composer.json', 'composer.lock'],\n            'dotnet': ['*.csproj', 'packages.config', 'project.json']\n        }\n        \n    def discover_all_dependencies(self):\n        \"\"\"\n        Discover all dependencies across different package managers\n        \"\"\"\n        dependencies = {}\n        \n        # NPM/Yarn dependencies\n        if (self.project_path / 'package.json').exists():\n            dependencies['npm'] = self._parse_npm_dependencies()\n            \n        # Python dependencies\n        if (self.project_path / 'requirements.txt').exists():\n            dependencies['python'] = self._parse_requirements_txt()\n        elif (self.project_path / 'Pipfile').exists():\n            dependencies['python'] = self._parse_pipfile()\n        elif (self.project_path / 'pyproject.toml').exists():\n            dependencies['python'] = self._parse_pyproject_toml()\n            \n        # Go dependencies\n        if (self.project_path / 'go.mod').exists():\n            dependencies['go'] = self._parse_go_mod()\n            \n        return dependencies\n    \n    def _parse_npm_dependencies(self):\n        \"\"\"\n        Parse NPM package.json and lock files\n        \"\"\"\n        with open(self.project_path / 'package.json', 'r') as f:\n            package_json = json.load(f)\n            \n        deps = {}\n        \n        # Direct dependencies\n        for dep_type in ['dependencies', 'devDependencies', 'peerDependencies']:\n            if dep_type in package_json:\n                for name, version in package_json[dep_type].items():\n                    deps[name] = {\n                        'version': version,\n                        'type': dep_type,\n                        'direct': True\n                    }\n        \n        # Parse lock file for exact versions\n        if (self.project_path / 'package-lock.json').exists():\n            with open(self.project_path / 'package-lock.json', 'r') as f:\n                lock_data = json.load(f)\n                self._parse_npm_lock(lock_data, deps)\n                \n        return deps\n```\n\n**Dependency Tree Analysis**\n```python\ndef build_dependency_tree(dependencies):\n    \"\"\"\n    Build complete dependency tree including transitive dependencies\n    \"\"\"\n    tree = {\n        'root': {\n            'name': 'project',\n            'version': '1.0.0',\n            'dependencies': {}\n        }\n    }\n    \n    def add_dependencies(node, deps, visited=None):\n        if visited is None:\n            visited = set()\n            \n        for dep_name, dep_info in deps.items():\n            if dep_name in visited:\n                # Circular dependency detected\n                node['dependencies'][dep_name] = {\n                    'circular': True,\n                    'version': dep_info['version']\n                }\n                continue\n                \n            visited.add(dep_name)\n            \n            node['dependencies'][dep_name] = {\n                'version': dep_info['version'],\n                'type': dep_info.get('type', 'runtime'),\n                'dependencies': {}\n            }\n            \n            # Recursively add transitive dependencies\n            if 'dependencies' in dep_info:\n                add_dependencies(\n                    node['dependencies'][dep_name],\n                    dep_info['dependencies'],\n                    visited.copy()\n                )\n    \n    add_dependencies(tree['root'], dependencies)\n    return tree\n```\n\n### 2. Vulnerability Scanning\n\nCheck dependencies against vulnerability databases:\n\n**CVE Database Check**\n```python\nimport requests\nfrom datetime import datetime\n\nclass VulnerabilityScanner:\n    def __init__(self):\n        self.vulnerability_apis = {\n            'npm': 'https://registry.npmjs.org/-/npm/v1/security/advisories/bulk',\n            'pypi': 'https://pypi.org/pypi/{package}/json',\n            'rubygems': 'https://rubygems.org/api/v1/gems/{package}.json',\n            'maven': 'https://ossindex.sonatype.org/api/v3/component-report'\n        }\n        \n    def scan_vulnerabilities(self, dependencies):\n        \"\"\"\n        Scan dependencies for known vulnerabilities\n        \"\"\"\n        vulnerabilities = []\n        \n        for package_name, package_info in dependencies.items():\n            vulns = self._check_package_vulnerabilities(\n                package_name,\n                package_info['version'],\n                package_info.get('ecosystem', 'npm')\n            )\n            \n            if vulns:\n                vulnerabilities.extend(vulns)\n                \n        return self._analyze_vulnerabilities(vulnerabilities)\n    \n    def _check_package_vulnerabilities(self, name, version, ecosystem):\n        \"\"\"\n        Check specific package for vulnerabilities\n        \"\"\"\n        if ecosystem == 'npm':\n            return self._check_npm_vulnerabilities(name, version)\n        elif ecosystem == 'pypi':\n            return self._check_python_vulnerabilities(name, version)\n        elif ecosystem == 'maven':\n            return self._check_java_vulnerabilities(name, version)\n            \n    def _check_npm_vulnerabilities(self, name, version):\n        \"\"\"\n        Check NPM package vulnerabilities\n        \"\"\"\n        # Using npm audit API\n        response = requests.post(\n            'https://registry.npmjs.org/-/npm/v1/security/advisories/bulk',\n            json={name: [version]}\n        )\n        \n        vulnerabilities = []\n        if response.status_code == 200:\n            data = response.json()\n            if name in data:\n                for advisory in data[name]:\n                    vulnerabilities.append({\n                        'package': name,\n                        'version': version,\n                        'severity': advisory['severity'],\n                        'title': advisory['title'],\n                        'cve': advisory.get('cves', []),\n                        'description': advisory['overview'],\n                        'recommendation': advisory['recommendation'],\n                        'patched_versions': advisory['patched_versions'],\n                        'published': advisory['created']\n                    })\n                    \n        return vulnerabilities\n```\n\n**Severity Analysis**\n```python\ndef analyze_vulnerability_severity(vulnerabilities):\n    \"\"\"\n    Analyze and prioritize vulnerabilities by severity\n    \"\"\"\n    severity_scores = {\n        'critical': 9.0,\n        'high': 7.0,\n        'moderate': 4.0,\n        'low': 1.0\n    }\n    \n    analysis = {\n        'total': len(vulnerabilities),\n        'by_severity': {\n            'critical': [],\n            'high': [],\n            'moderate': [],\n            'low': []\n        },\n        'risk_score': 0,\n        'immediate_action_required': []\n    }\n    \n    for vuln in vulnerabilities:\n        severity = vuln['severity'].lower()\n        analysis['by_severity'][severity].append(vuln)\n        \n        # Calculate risk score\n        base_score = severity_scores.get(severity, 0)\n        \n        # Adjust score based on factors\n        if vuln.get('exploit_available', False):\n            base_score *= 1.5\n        if vuln.get('publicly_disclosed', True):\n            base_score *= 1.2\n        if 'remote_code_execution' in vuln.get('description', '').lower():\n            base_score *= 2.0\n            \n        vuln['risk_score'] = base_score\n        analysis['risk_score'] += base_score\n        \n        # Flag immediate action items\n        if severity in ['critical', 'high'] or base_score > 8.0:\n            analysis['immediate_action_required'].append({\n                'package': vuln['package'],\n                'severity': severity,\n                'action': f\"Update to {vuln['patched_versions']}\"\n            })\n    \n    # Sort by risk score\n    for severity in analysis['by_severity']:\n        analysis['by_severity'][severity].sort(\n            key=lambda x: x.get('risk_score', 0),\n            reverse=True\n        )\n    \n    return analysis\n```\n\n### 3. License Compliance\n\nAnalyze dependency licenses for compatibility:\n\n**License Detection**\n```python\nclass LicenseAnalyzer:\n    def __init__(self):\n        self.license_compatibility = {\n            'MIT': ['MIT', 'BSD', 'Apache-2.0', 'ISC'],\n            'Apache-2.0': ['Apache-2.0', 'MIT', 'BSD'],\n            'GPL-3.0': ['GPL-3.0', 'GPL-2.0'],\n            'BSD-3-Clause': ['BSD-3-Clause', 'MIT', 'Apache-2.0'],\n            'proprietary': []\n        }\n        \n        self.license_restrictions = {\n            'GPL-3.0': 'Copyleft - requires source code disclosure',\n            'AGPL-3.0': 'Strong copyleft - network use requires source disclosure',\n            'proprietary': 'Cannot be used without explicit license',\n            'unknown': 'License unclear - legal review required'\n        }\n        \n    def analyze_licenses(self, dependencies, project_license='MIT'):\n        \"\"\"\n        Analyze license compatibility\n        \"\"\"\n        issues = []\n        license_summary = {}\n        \n        for package_name, package_info in dependencies.items():\n            license_type = package_info.get('license', 'unknown')\n            \n            # Track license usage\n            if license_type not in license_summary:\n                license_summary[license_type] = []\n            license_summary[license_type].append(package_name)\n            \n            # Check compatibility\n            if not self._is_compatible(project_license, license_type):\n                issues.append({\n                    'package': package_name,\n                    'license': license_type,\n                    'issue': f'Incompatible with project license {project_license}',\n                    'severity': 'high',\n                    'recommendation': self._get_license_recommendation(\n                        license_type,\n                        project_license\n                    )\n                })\n            \n            # Check for restrictive licenses\n            if license_type in self.license_restrictions:\n                issues.append({\n                    'package': package_name,\n                    'license': license_type,\n                    'issue': self.license_restrictions[license_type],\n                    'severity': 'medium',\n                    'recommendation': 'Review usage and ensure compliance'\n                })\n        \n        return {\n            'summary': license_summary,\n            'issues': issues,\n            'compliance_status': 'FAIL' if issues else 'PASS'\n        }\n```\n\n**License Report**\n```markdown\n## License Compliance Report\n\n### Summary\n- **Project License**: MIT\n- **Total Dependencies**: 245\n- **License Issues**: 3\n- **Compliance Status**: ⚠️ REVIEW REQUIRED\n\n### License Distribution\n| License | Count | Packages |\n|---------|-------|----------|\n| MIT | 180 | express, lodash, ... |\n| Apache-2.0 | 45 | aws-sdk, ... |\n| BSD-3-Clause | 15 | ... |\n| GPL-3.0 | 3 | [ISSUE] package1, package2, package3 |\n| Unknown | 2 | [ISSUE] mystery-lib, old-package |\n\n### Compliance Issues\n\n#### High Severity\n1. **GPL-3.0 Dependencies**\n   - Packages: package1, package2, package3\n   - Issue: GPL-3.0 is incompatible with MIT license\n   - Risk: May require open-sourcing your entire project\n   - Recommendation: \n     - Replace with MIT/Apache licensed alternatives\n     - Or change project license to GPL-3.0\n\n#### Medium Severity\n2. **Unknown Licenses**\n   - Packages: mystery-lib, old-package\n   - Issue: Cannot determine license compatibility\n   - Risk: Potential legal exposure\n   - Recommendation:\n     - Contact package maintainers\n     - Review source code for license information\n     - Consider replacing with known alternatives\n```\n\n### 4. Outdated Dependencies\n\nIdentify and prioritize dependency updates:\n\n**Version Analysis**\n```python\ndef analyze_outdated_dependencies(dependencies):\n    \"\"\"\n    Check for outdated dependencies\n    \"\"\"\n    outdated = []\n    \n    for package_name, package_info in dependencies.items():\n        current_version = package_info['version']\n        latest_version = fetch_latest_version(package_name, package_info['ecosystem'])\n        \n        if is_outdated(current_version, latest_version):\n            # Calculate how outdated\n            version_diff = calculate_version_difference(current_version, latest_version)\n            \n            outdated.append({\n                'package': package_name,\n                'current': current_version,\n                'latest': latest_version,\n                'type': version_diff['type'],  # major, minor, patch\n                'releases_behind': version_diff['count'],\n                'age_days': get_version_age(package_name, current_version),\n                'breaking_changes': version_diff['type'] == 'major',\n                'update_effort': estimate_update_effort(version_diff),\n                'changelog': fetch_changelog(package_name, current_version, latest_version)\n            })\n    \n    return prioritize_updates(outdated)\n\ndef prioritize_updates(outdated_deps):\n    \"\"\"\n    Prioritize updates based on multiple factors\n    \"\"\"\n    for dep in outdated_deps:\n        score = 0\n        \n        # Security updates get highest priority\n        if dep.get('has_security_fix', False):\n            score += 100\n            \n        # Major version updates\n        if dep['type'] == 'major':\n            score += 20\n        elif dep['type'] == 'minor':\n            score += 10\n        else:\n            score += 5\n            \n        # Age factor\n        if dep['age_days'] > 365:\n            score += 30\n        elif dep['age_days'] > 180:\n            score += 20\n        elif dep['age_days'] > 90:\n            score += 10\n            \n        # Number of releases behind\n        score += min(dep['releases_behind'] * 2, 20)\n        \n        dep['priority_score'] = score\n        dep['priority'] = 'critical' if score > 80 else 'high' if score > 50 else 'medium'\n    \n    return sorted(outdated_deps, key=lambda x: x['priority_score'], reverse=True)\n```\n\n### 5. Dependency Size Analysis\n\nAnalyze bundle size impact:\n\n**Bundle Size Impact**\n```javascript\n// Analyze NPM package sizes\nconst analyzeBundleSize = async (dependencies) => {\n    const sizeAnalysis = {\n        totalSize: 0,\n        totalGzipped: 0,\n        packages: [],\n        recommendations: []\n    };\n    \n    for (const [packageName, info] of Object.entries(dependencies)) {\n        try {\n            // Fetch package stats\n            const response = await fetch(\n                `https://bundlephobia.com/api/size?package=${packageName}@${info.version}`\n            );\n            const data = await response.json();\n            \n            const packageSize = {\n                name: packageName,\n                version: info.version,\n                size: data.size,\n                gzip: data.gzip,\n                dependencyCount: data.dependencyCount,\n                hasJSNext: data.hasJSNext,\n                hasSideEffects: data.hasSideEffects\n            };\n            \n            sizeAnalysis.packages.push(packageSize);\n            sizeAnalysis.totalSize += data.size;\n            sizeAnalysis.totalGzipped += data.gzip;\n            \n            // Size recommendations\n            if (data.size > 1000000) { // 1MB\n                sizeAnalysis.recommendations.push({\n                    package: packageName,\n                    issue: 'Large bundle size',\n                    size: `${(data.size / 1024 / 1024).toFixed(2)} MB`,\n                    suggestion: 'Consider lighter alternatives or lazy loading'\n                });\n            }\n        } catch (error) {\n            console.error(`Failed to analyze ${packageName}:`, error);\n        }\n    }\n    \n    // Sort by size\n    sizeAnalysis.packages.sort((a, b) => b.size - a.size);\n    \n    // Add top offenders\n    sizeAnalysis.topOffenders = sizeAnalysis.packages.slice(0, 10);\n    \n    return sizeAnalysis;\n};\n```\n\n### 6. Supply Chain Security\n\nCheck for dependency hijacking and typosquatting:\n\n**Supply Chain Checks**\n```python\ndef check_supply_chain_security(dependencies):\n    \"\"\"\n    Perform supply chain security checks\n    \"\"\"\n    security_issues = []\n    \n    for package_name, package_info in dependencies.items():\n        # Check for typosquatting\n        typo_check = check_typosquatting(package_name)\n        if typo_check['suspicious']:\n            security_issues.append({\n                'type': 'typosquatting',\n                'package': package_name,\n                'severity': 'high',\n                'similar_to': typo_check['similar_packages'],\n                'recommendation': 'Verify package name spelling'\n            })\n        \n        # Check maintainer changes\n        maintainer_check = check_maintainer_changes(package_name)\n        if maintainer_check['recent_changes']:\n            security_issues.append({\n                'type': 'maintainer_change',\n                'package': package_name,\n                'severity': 'medium',\n                'details': maintainer_check['changes'],\n                'recommendation': 'Review recent package changes'\n            })\n        \n        # Check for suspicious patterns\n        if contains_suspicious_patterns(package_info):\n            security_issues.append({\n                'type': 'suspicious_behavior',\n                'package': package_name,\n                'severity': 'high',\n                'patterns': package_info['suspicious_patterns'],\n                'recommendation': 'Audit package source code'\n            })\n    \n    return security_issues\n\ndef check_typosquatting(package_name):\n    \"\"\"\n    Check if package name might be typosquatting\n    \"\"\"\n    common_packages = [\n        'react', 'express', 'lodash', 'axios', 'webpack',\n        'babel', 'jest', 'typescript', 'eslint', 'prettier'\n    ]\n    \n    for legit_package in common_packages:\n        distance = levenshtein_distance(package_name.lower(), legit_package)\n        if 0 < distance <= 2:  # Close but not exact match\n            return {\n                'suspicious': True,\n                'similar_packages': [legit_package],\n                'distance': distance\n            }\n    \n    return {'suspicious': False}\n```\n\n### 7. Automated Remediation\n\nGenerate automated fixes:\n\n**Update Scripts**\n```bash\n#!/bin/bash\n# Auto-update dependencies with security fixes\n\necho \"🔒 Security Update Script\"\necho \"========================\"\n\n# NPM/Yarn updates\nif [ -f \"package.json\" ]; then\n    echo \"📦 Updating NPM dependencies...\"\n    \n    # Audit and auto-fix\n    npm audit fix --force\n    \n    # Update specific vulnerable packages\n    npm update package1@^2.0.0 package2@~3.1.0\n    \n    # Run tests\n    npm test\n    \n    if [ $? -eq 0 ]; then\n        echo \"✅ NPM updates successful\"\n    else\n        echo \"❌ Tests failed, reverting...\"\n        git checkout package-lock.json\n    fi\nfi\n\n# Python updates\nif [ -f \"requirements.txt\" ]; then\n    echo \"🐍 Updating Python dependencies...\"\n    \n    # Create backup\n    cp requirements.txt requirements.txt.backup\n    \n    # Update vulnerable packages\n    pip-compile --upgrade-package package1 --upgrade-package package2\n    \n    # Test installation\n    pip install -r requirements.txt --dry-run\n    \n    if [ $? -eq 0 ]; then\n        echo \"✅ Python updates successful\"\n    else\n        echo \"❌ Update failed, reverting...\"\n        mv requirements.txt.backup requirements.txt\n    fi\nfi\n```\n\n**Pull Request Generation**\n```python\ndef generate_dependency_update_pr(updates):\n    \"\"\"\n    Generate PR with dependency updates\n    \"\"\"\n    pr_body = f\"\"\"\n## 🔒 Dependency Security Update\n\nThis PR updates {len(updates)} dependencies to address security vulnerabilities and outdated packages.\n\n### Security Fixes ({sum(1 for u in updates if u['has_security'])})\n\n| Package | Current | Updated | Severity | CVE |\n|---------|---------|---------|----------|-----|\n\"\"\"\n    \n    for update in updates:\n        if update['has_security']:\n            pr_body += f\"| {update['package']} | {update['current']} | {update['target']} | {update['severity']} | {', '.join(update['cves'])} |\\n\"\n    \n    pr_body += \"\"\"\n\n### Other Updates\n\n| Package | Current | Updated | Type | Age |\n|---------|---------|---------|------|-----|\n\"\"\"\n    \n    for update in updates:\n        if not update['has_security']:\n            pr_body += f\"| {update['package']} | {update['current']} | {update['target']} | {update['type']} | {update['age_days']} days |\\n\"\n    \n    pr_body += \"\"\"\n\n### Testing\n- [ ] All tests pass\n- [ ] No breaking changes identified\n- [ ] Bundle size impact reviewed\n\n### Review Checklist\n- [ ] Security vulnerabilities addressed\n- [ ] License compliance maintained\n- [ ] No unexpected dependencies added\n- [ ] Performance impact assessed\n\ncc @security-team\n\"\"\"\n    \n    return {\n        'title': f'chore(deps): Security update for {len(updates)} dependencies',\n        'body': pr_body,\n        'branch': f'deps/security-update-{datetime.now().strftime(\"%Y%m%d\")}',\n        'labels': ['dependencies', 'security']\n    }\n```\n\n### 8. Monitoring and Alerts\n\nSet up continuous dependency monitoring:\n\n**GitHub Actions Workflow**\n```yaml\nname: Dependency Audit\n\non:\n  schedule:\n    - cron: '0 0 * * *'  # Daily\n  push:\n    paths:\n      - 'package*.json'\n      - 'requirements.txt'\n      - 'Gemfile*'\n      - 'go.mod'\n  workflow_dispatch:\n\njobs:\n  security-audit:\n    runs-on: ubuntu-latest\n    \n    steps:\n    - uses: actions/checkout@v3\n    \n    - name: Run NPM Audit\n      if: hashFiles('package.json')\n      run: |\n        npm audit --json > npm-audit.json\n        if [ $(jq '.vulnerabilities.total' npm-audit.json) -gt 0 ]; then\n          echo \"::error::Found $(jq '.vulnerabilities.total' npm-audit.json) vulnerabilities\"\n          exit 1\n        fi\n    \n    - name: Run Python Safety Check\n      if: hashFiles('requirements.txt')\n      run: |\n        pip install safety\n        safety check --json > safety-report.json\n        \n    - name: Check Licenses\n      run: |\n        npx license-checker --json > licenses.json\n        python scripts/check_license_compliance.py\n    \n    - name: Create Issue for Critical Vulnerabilities\n      if: failure()\n      uses: actions/github-script@v6\n      with:\n        script: |\n          const audit = require('./npm-audit.json');\n          const critical = audit.vulnerabilities.critical;\n          \n          if (critical > 0) {\n            github.rest.issues.create({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              title: `🚨 ${critical} critical vulnerabilities found`,\n              body: 'Dependency audit found critical vulnerabilities. See workflow run for details.',\n              labels: ['security', 'dependencies', 'critical']\n            });\n          }\n```\n\n## Output Format\n\n1. **Executive Summary**: High-level risk assessment and action items\n2. **Vulnerability Report**: Detailed CVE analysis with severity ratings\n3. **License Compliance**: Compatibility matrix and legal risks\n4. **Update Recommendations**: Prioritized list with effort estimates\n5. **Supply Chain Analysis**: Typosquatting and hijacking risks\n6. **Remediation Scripts**: Automated update commands and PR generation\n7. **Size Impact Report**: Bundle size analysis and optimization tips\n8. **Monitoring Setup**: CI/CD integration for continuous scanning\n\nFocus on actionable insights that help maintain secure, compliant, and efficient dependency management.","contentHash":"c0d41d728e43c2e18fa1a9d601c414110158180965c0e7a4bff4777f322abd06","copies":0,"createdAt":"2025-08-12T16:09:42.291Z","description":"Audit dependencies for security and licensing","github":{"repoUrl":"https://github.com/Commands-com/commands","lastSyncDirection":"from-github","metadata":{"importedFrom":"github_repository","repoPrivate":false,"repoDefaultBranch":"main","connectedAt":"2025-08-12T16:09:42.291Z"},"importedAt":"2025-08-12T16:09:42.291Z","lastSyncAt":"2025-08-17T17:57:50.185Z","fileMapping":{"license":null,"readme":null,"assets":[],"mainFile":"tools/deps-audit.md"},"selectedCommand":"deps-audit","fileShas":{"mainFile":"143036a6d3802e7dc56c0be8b91521dcd6e58cb1","yamlPath":"313647b1fb381389da33b7913e95baf617c4b392"},"branch":"main","connectionType":"commands_yaml","connected":true,"lastSyncCommit":"01591bc061d236bde47bf23b0f47e8afcf1a5144","importSource":"repository_import","installationId":"69232615","syncStatus":"synced"},"githubRepoUrl":"https://github.com/Commands-com/commands","id":"d50d82d8-235d-4bed-abe6-6c1a3775836d","inputParameters":[{"defaultValue":"both","name":"audit_focus","options":["security","licenses","both","outdated","all"],"description":"What to focus the audit on","label":"Audit Focus","type":"select","required":false}],"instructions":"Audit dependencies for security and licensing","likes":0,"mcp_search_content":"","organizationUsername":"commands-com","price":"free","search_content":"dependencies audit audit dependencies for security and licensing /deps-audit security-audit claude-code@2025.06","title":"Dependencies Audit","type":"command","updatedAt":"2025-08-17T17:57:50.185Z","userId":"W0V8NAw5AhWRwcuwSoFLOi1Yem83","visibility":"public","name":"deps-audit","userInteraction":{"userHasStarred":false}}