name: scan-licenses description: 分析项目依赖的开源许可证合规性。 argument-hint: [项目路径] allowed-tools: 任务, 技能, 阅读, 全局, 搜索
开源许可证合规性扫描
分析项目依赖的许可证合规性。
工作流程
步骤 1: 加载所需技能
加载这些技能:
license-compliance- 许可证要求和兼容性sbom-management- 依赖跟踪
步骤 2: 识别项目类型
检测项目类型和包管理器:
- .NET:查找
*.csproj,*.sln,packages.config - Node.js:查找
package.json,package-lock.json - Python:查找
requirements.txt,pyproject.toml,setup.py - Java:查找
pom.xml,build.gradle
步骤 3: 提取依赖
对于 .NET 项目:
dotnet list package --include-transitive
对于 Node.js:
npm ls --all --json
步骤 4: 分析许可证
对于每个依赖:
- 识别许可证(SPDX 标识符)
- 分类(宽松许可证、弱 Copyleft、强 Copyleft)
- 根据策略检查(已批准、需要审查、禁止)
- 识别义务
步骤 5: 检查兼容性
验证许可证兼容性:
- 检查入站与出站许可证兼容性
- 识别冲突许可证
- 标记 Copyleft 污染风险
步骤 6: 生成报告
创建全面的许可证合规性报告。
示例用法
# 扫描当前目录
/compliance-planning:scan-licenses
# 扫描特定项目
/compliance-planning:scan-licenses "./src/MyApp"
# 扫描解决方案
/compliance-planning:scan-licenses "./MySolution.sln"
输出格式
# 许可证合规性报告:[项目名称]
## 摘要
| 指标 | 数量 |
|--------|-------|
| 总依赖 | [N] |
| 直接依赖 | [N] |
| 传递依赖 | [N] |
| 已批准许可证 | [N] |
| 需要审查 | [N] |
| 禁止 | [N] |
| 未知 | [N] |
### 合规状态:[合规 / 需审查 / 不合规]
---
## 许可证分布
| 许可证 | 类别 | 数量 | 状态 |
|---------|----------|-------|--------|
| MIT | 宽松许可证 | [N] | 已批准 |
| Apache-2.0 | 宽松许可证 | [N] | 已批准 |
| GPL-3.0 | 强 Copyleft | [N] | 禁止 |
---
## 按状态分类的依赖
### 已批准
| 包 | 版本 | 许可证 | 类别 |
|---------|---------|---------|----------|
| [包] | [版本] | [许可证] | 宽松许可证 |
### 需要审查
| 包 | 版本 | 许可证 | 关注点 |
|---------|---------|---------|---------|
| [包] | [版本] | [许可证] | [为什么需要审查] |
### 禁止
| 包 | 版本 | 许可证 | 问题 | 替代方案 |
|---------|---------|---------|-------|-------------|
| [包] | [版本] | [许可证] | [问题] | [建议的替代方案] |
### 未知
| 包 | 版本 | 许可证信息 | 操作 |
|---------|---------|--------------|--------|
| [包] | [版本] | [信息] | [所需操作] |
---
## 兼容性分析
### 许可证冲突
| 包 1 | 许可证 1 | 包 2 | 许可证 2 | 冲突 |
|-----------|-----------|-----------|-----------|----------|
### Copyleft 评估
**找到的 Copyleft 包:**[是/否]
| 包 | 许可证 | 影响 | 缓解措施 |
|---------|---------|--------|------------|
---
## 义务摘要
### 需要署名
| 包 | 许可证 | 署名文本 |
|---------|---------|-----------------|
### 需要源代码披露
| 包 | 许可证 | 要求 |
|---------|---------|-------------|
### 需要通知文件
| 包 | NOTICE 文件 | 状态 |
|---------|-------------|--------|
---
## 推荐操作
### 立即操作
1. **替换禁止的包**
- [包] -> [替代方案]
2. **审查标记的包**
- [包] - [审查原因]
### 文档操作
1. **更新 NOTICE 文件**
- 为以下包添加署名:[包]
2. **添加许可证文件**
- 包括:[需要的许可证文件]
---
## NOTICE 文件内容
```text
第三方软件通知和信息
本软件包括以下第三方组件:
[包名称] ([版本])
许可证:[许可证]
[版权通知]
---
[为所有依赖继续]
```
---
## 策略合规性
| 策略规则 | 状态 | 详情 |
|-------------|--------|---------|
| 专有软件中无 GPL | [状态] | [详情] |
| 无 AGPL | [状态] | [详情] |
| 所有许可证已识别 | [状态] | [详情] |
| 署名完成 | [状态] | [详情] |
.NET 特定命令
对于 .NET 项目,以下命令很有用:
# 安装许可证检查器
dotnet tool install --global dotnet-project-licenses
# 生成许可证报告
dotnet-project-licenses -i ./MySolution.sln
# 生成 SBOM
dotnet CycloneDX ./MySolution.sln -o sbom.json -j