name: dependency-scanner description: 全面的依赖项扫描、清单生成和SBOM创建,用于迁移准备度评估 allowed-tools: [“Bash”, “Read”, “Write”, “Grep”, “Glob”, “Edit”]
依赖项扫描器技能
为代码库执行全面的依赖项扫描和清单生成,通过SBOM(软件物料清单)生成支持迁移规划和安全评估。
目的
实现全面的依赖项管理,用于:
- 直接和传递依赖项提取
- 依赖树可视化
- 版本冲突检测
- 循环依赖识别
- 许可证提取和合规性
- SBOM生成(CycloneDX、SPDX格式)
能力
1. 直接/传递依赖项提取
- 解析包清单文件(package.json、pom.xml、requirements.txt等)
- 解析完整的依赖树,包括传递依赖项
- 识别版本约束和解析结果
- 跟踪依赖项来源和注册表
2. 依赖树可视化
- 生成分层依赖关系图
- 导出为DOT、JSON或Mermaid格式
- 高亮显示问题路径
- 计算树深度和广度指标
3. 版本冲突检测
- 识别依赖树中的版本冲突
- 检测对等依赖项违规
- 查找不兼容的版本范围
- 建议解决策略
4. 循环依赖识别
- 检测循环依赖链
- 映射依赖循环
- 评估循环依赖的影响
- 推荐打破循环的策略
5. 许可证提取
- 从依赖项中提取许可证信息
- 识别许可证类型(MIT、Apache、GPL等)
- 标记Copyleft许可证
- 跟踪双重许可的包
6. SBOM生成
- 生成CycloneDX格式的SBOM
- 生成SPDX格式的SBOM
- 包含漏洞引用
- 支持机器可读和人类可读的输出
工具集成
当外部工具可用时,此技能可以利用以下工具:
| 工具 | 用途 | 集成方法 |
|---|---|---|
| npm/yarn/pnpm | Node.js依赖项 | CLI |
| Maven | Java依赖项 | CLI |
| Gradle | Java/Kotlin依赖项 | CLI |
| pip/pipenv/poetry | Python依赖项 | CLI |
| Bundler | Ruby依赖项 | CLI |
| Cargo | Rust依赖项 | CLI |
| Go Modules | Go依赖项 | CLI |
| Snyk | 安全扫描 | CLI / API |
| OWASP Dependency-Check | 漏洞扫描 | CLI |
| Trivy | SBOM生成 | MCP服务器 / CLI |
| Syft | SBOM生成 | CLI |
使用方法
基本扫描
# 调用技能进行依赖项扫描
# 该技能将自动检测包管理器并相应扫描
# 预期输入:
# - targetPath: 项目根目录路径
# - scanDepth: 'direct' | 'transitive' | 'full'
# - outputFormat: 'json' | 'tree' | 'sbom-cyclonedx' | 'sbom-spdx'
# - includeLicenses: 布尔值
扫描工作流
-
检测阶段
- 识别正在使用的包管理器
- 定位清单文件
- 检查锁文件
-
提取阶段
- 解析清单文件
- 解析依赖树
- 提取版本信息
-
分析阶段
- 检测冲突
- 识别循环依赖
- 提取许可证
-
输出生成
- 生成清单报告
- 创建SBOM(如请求)
- 生成可视化工件
输出模式
{
"scanId": "string",
"timestamp": "ISO8601",
"target": {
"path": "string",
"packageManagers": ["string"],
"manifestFiles": ["string"]
},
"summary": {
"totalDependencies": "number",
"directDependencies": "number",
"transitiveDependencies": "number",
"uniquePackages": "number",
"treeDepth": "number"
},
"dependencies": [
{
"name": "string",
"version": "string",
"type": "direct|transitive",
"parent": "string|null",
"license": "string",
"repository": "string",
"depth": "number"
}
],
"conflicts": [
{
"package": "string",
"versions": ["string"],
"sources": ["string"],
"recommendation": "string"
}
],
"circularDependencies": [
{
"chain": ["string"],
"severity": "high|medium|low"
}
],
"licenses": {
"summary": {
"MIT": "number",
"Apache-2.0": "number",
"GPL-3.0": "number"
},
"copyleft": ["string"],
"unknown": ["string"]
},
"sbom": {
"format": "cyclonedx|spdx",
"version": "string",
"path": "string"
}
}
与迁移流程集成
此技能与以下代码迁移/现代化流程集成:
- dependency-analysis-updates: 依赖项评估的主要工具
- legacy-codebase-assessment: 遗留系统的依赖项清单
- framework-upgrade: 升级的兼容性分析
- cloud-migration: 依赖项可移植性评估
配置
技能配置文件
在项目根目录创建 .dependency-scanner.json:
{
"packageManagers": ["auto"],
"excludePaths": ["node_modules", ".git"],
"scanDepth": "full",
"includeDev": true,
"includeOptional": false,
"licensePolicy": {
"allowed": ["MIT", "Apache-2.0", "BSD-3-Clause", "ISC"],
"flagged": ["GPL-3.0", "AGPL-3.0"],
"blocked": []
},
"sbomConfig": {
"format": "cyclonedx",
"version": "1.5",
"includeVulnerabilities": true
}
}
MCP服务器集成
当Trivy SBOM生成器MCP服务器可用时:
// MCP工具调用示例
{
"tool": "trivy_generate_sbom",
"arguments": {
"target": "./",
"format": "cyclonedx",
"output": "./sbom.json"
}
}
当GitHub Dependabot MCP服务器可用时:
// 依赖项更新检查示例
{
"tool": "dependabot_check_updates",
"arguments": {
"repo": "owner/repo",
"ecosystem": "npm"
}
}
包管理器支持
Node.js (npm/yarn/pnpm)
# 自动检测的文件:
# - package.json
# - package-lock.json
# - yarn.lock
# - pnpm-lock.yaml
Java (Maven/Gradle)
# 自动检测的文件:
# - pom.xml
# - build.gradle
# - build.gradle.kts
Python (pip/pipenv/poetry)
# 自动检测的文件:
# - requirements.txt
# - Pipfile
# - pyproject.toml
# - setup.py
Ruby (Bundler)
# 自动检测的文件:
# - Gemfile
# - Gemfile.lock
Go (Modules)
# 自动检测的文件:
# - go.mod
# - go.sum
Rust (Cargo)
# 自动检测的文件:
# - Cargo.toml
# - Cargo.lock
最佳实践
- 锁文件使用:始终包含锁文件以实现可重复扫描
- 定期扫描:集成到CI/CD中以进行持续监控
- SBOM存储:将SBOM与发布版本一起存储以实现合规性
- 许可证审查:审查依赖项更新中的许可证变更
- 冲突解决:在迁移前解决版本冲突
相关技能
vulnerability-scanner: 依赖项的安全扫描license-compliance-checker: 详细的许可证分析dependency-updater: 自动化依赖项更新
相关代理
dependency-modernization-agent: 使用此技能进行依赖项管理migration-readiness-assessor: 使用此技能进行准备度评估security-vulnerability-assessor: 使用此技能进行依赖项安全