🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install github/awesome-copilot/sponsor-finder

💡 提示:需要 Node.js 和 NPM

赞助者查找器

发现支持你项目依赖项背后的开源维护者的机会。接受一个 GitHub owner/repo(例如 /sponsor expressjs/express),使用 deps.dev API 进行依赖项解析和项目健康数据,并生成一份涵盖直接和传递依赖项的友好赞助报告。

你的工作流程

当用户输入 /sponsor {owner/repo} 或以 owner/repo 格式提供仓库时:

  1. 解析输入 — 提取 ownerrepo
  2. 检测生态系统 — 获取清单文件以确定包名 + 版本。
  3. 获取完整依赖树 — deps.dev GetDependencies(一次调用)。
  4. 解析仓库 — 为每个依赖项调用 deps.dev GetVersionrelatedProjects 提供 GitHub 仓库。
  5. 获取项目健康数据 — 为每个唯一仓库调用 deps.dev GetProject → OSSF 评分卡。
  6. 查找资助链接 — npm funding 字段、FUNDING.yml、网络搜索回退。
  7. 验证每个链接 — 获取每个 URL 以确认其有效。
  8. 分组并报告 — 按资助目标分组,按影响排序。

步骤 1:检测生态系统和包

使用 get_file_contents 从目标仓库获取清单文件。确定生态系统并提取包名 + 最新版本:

文件 生态系统 包名来源 版本来源
package.json NPM name 字段 version 字段
requirements.txt PYPI 包名列表 使用最新版本(在 deps.dev 调用中省略版本)
pyproject.toml PYPI [project.dependencies] 使用最新版本
Cargo.toml CARGO [package] name [package] version
go.mod GO module 路径 从 go.mod 中提取
Gemfile RUBYGEMS gem 名称 使用最新版本
pom.xml MAVEN groupId:artifactId version

步骤 2:获取完整依赖树 (deps.dev)

这是关键步骤。 使用 web_fetch 调用 deps.dev API:

https://api.deps.dev/v3/systems/{生态系统}/packages/{包名}/versions/{版本}:dependencies

例如:

https://api.deps.dev/v3/systems/npm/packages/express/versions/5.2.1:dependencies

这会返回一个 nodes 数组,其中每个节点包含:

  • versionKey.name — 包名
  • versionKey.version — 已解析的版本
  • relation"SELF""DIRECT""INDIRECT"

这一次调用就给出了完整的依赖树——包括直接和传递依赖——以及确切的已解析版本。无需解析锁文件。

URL 编码

包含特殊字符的包名必须进行百分号编码:

  • @colors/colors%40colors%2Fcolors
  • @ 编码为 %40,将 / 编码为 %2F

对于没有单个根包的仓库

如果仓库不发布包(例如,它是一个应用程序而不是一个库),则回退到直接读取 package.json 依赖项,并为每个依赖项调用 deps.dev GetVersion


步骤 3:将每个依赖项解析为 GitHub 仓库 (deps.dev)

对于树中的每个依赖项,调用 deps.dev GetVersion

https://api.deps.dev/v3/systems/{生态系统}/packages/{包名}/versions/{版本}

从响应中,提取:

  • relatedProjects → 查找 relationType: "SOURCE_REPO"projectKey.id 给出 github.com/{owner}/{repo}
  • links → 查找 label: "SOURCE_REPO"url 字段

这在所有生态系统中均有效——npm、PyPI、Cargo、Go、RubyGems、Maven、NuGet——使用相同的字段结构。

效率规则

  • 每次批处理 10 个
  • 去重——多个包可能映射到同一个仓库。
  • 跳过未找到 GitHub 项目的依赖项(计为“无法解析”)。

步骤 4:获取项目健康数据 (deps.dev)

对于每个唯一的 GitHub 仓库,调用 deps.dev GetProject

https://api.deps.dev/v3/projects/github.com%2F{所有者}%2F{仓库}

从响应中,提取:

  • scorecard.checks → 查找 "Maintained" 检查 → score(0–10)
  • starsCount — 流行度指标
  • license — 项目许可证
  • openIssuesCount — 活动指标

使用“维护”分数来标记项目健康状态:

  • 分数 7–10 → ⭐ 积极维护中
  • 分数 4–6 → ⚠️ 部分维护中
  • 分数 0–3 → 💤 可能不再维护

效率规则

  • 仅对唯一仓库获取(不是每个包)。
  • 每次批处理 10 个
  • 此步骤可选——如果遇到速率限制,则跳过并在输出中注明。

步骤 5:查找资助链接

对于每个唯一的 GitHub 仓库,按顺序使用三种来源检查资助信息:

5a:npm funding 字段(仅限 npm 生态系统)

使用 web_fetch 访问 https://registry.npmjs.org/{包名}/latest,并检查 funding 字段:

  • 字符串: "https://github.com/sponsors/sindresorhus" → 直接用作 URL
  • 对象: {“type”: “opencollective”, “url”: “https://opencollective.com/express”} → 使用 url
  • 数组: 收集所有 URL

5b:.github/FUNDING.yml(仓库级别,然后是组织级别回退)

步骤 5b-i — 按仓库检查:
使用 get_file_contents 获取 {所有者}/{仓库} 路径下的 .github/FUNDING.yml

步骤 5b-ii — 组织/用户级别回退:
如果 5b-i 返回 404(仓库本身没有 FUNDING.yml),则检查所有者的默认社区健康仓库:
使用 get_file_contents 获取 {所有者}/.github 路径下的 FUNDING.yml

GitHub 支持默认社区健康文件约定:一个位于用户/组织级别的 .github 仓库,为所有缺少自己文件的仓库提供默认值。例如,isaacs/.github/FUNDING.yml 适用于所有 isaacs/* 仓库。

每个唯一的 {所有者}/.github 仓库仅查找一次——为该所有者下的所有仓库重用结果。每次批处理 10 个所有者

解析 YAML(5b-i 和 5b-ii 均适用):

  • github: [username]https://github.com/sponsors/{username}
  • open_collective: slughttps://opencollective.com/{slug}
  • ko_fi: usernamehttps://ko-fi.com/{username}
  • patreon: usernamehttps://patreon.com/{username}
  • tidelift: platform/packagehttps://tidelift.com/subscription/pkg/{platform-package}
  • custom: [urls] → 直接使用

5c:网络搜索回退

对于前 10 个未找到资助信息的依赖项(按传递依赖项数量排序),使用 web_search

“{包名}” github sponsors OR open collective OR funding

跳过已知由公司维护的包(React/Meta、TypeScript/Microsoft、@types/DefinitelyTyped)。

效率规则

  • 为所有依赖项检查 5a 和 5b。 仅对前 10 个未找到的依赖项使用 5c。
  • 对于非 npm 生态系统,跳过 npm registry 调用。
  • 去重仓库——每个仓库只检查一次。
  • 每个唯一所有者执行一次 {所有者}/.github 检查——为该所有者下的所有仓库重用结果。
  • 每次批处理 10 个所有者进行组织级别查找。

步骤 6:验证每个链接(关键)

在包含任何资助链接之前,必须验证其是否存在。

在每个资助 URL 上使用 web_fetch

  • 有效页面 → ✅ 包含
  • 404 / “未找到” / “未注册” → ❌ 排除
  • 重定向到有效页面 → ✅ 包含最终 URL

每次批处理 5 个进行验证。切勿展示未经验证的链接。


步骤 7:输出报告

输出规范

在数据收集期间尽量减少中间输出。 不要宣布每个批次(“第 3 批,共 7 批…”、“现在检查资助信息…”)。而是:

  • 在每个主要阶段开始时显示一行简短的状态(例如,“正在解析 67 个依赖项…”、“正在检查资助链接…”)
  • 在生成报告之前收集所有数据。 切勿零散地输出部分表格。
  • 最后将最终报告作为一个单一的、连贯的块输出。

报告模板

## 💜 赞助者查找报告

**仓库:** {所有者}/{仓库} · {生态系统} · {包名}@{版本}
**扫描时间:** {日期} · 共 {总数} 个依赖项({直接数} 个直接 + {传递数} 个传递)

---

### 🎯 回馈社区的方式

只需赞助 {N} 个人/组织,即可支持你 {总数} 个依赖项中的 {可赞助数} 个——这是对你项目所依赖的开源软件进行投资的好方法。

1. **💜 @{用户}** — {N} 个直接 + {M} 个传递依赖项 · ⭐ 积极维护
   {依赖项1}、{依赖项2}、{依赖项3}、...
   https://github.com/sponsors/{用户}

2. **🟠 Open Collective:{名称}** — {N} 个直接 + {M} 个传递依赖项 · ⭐ 积极维护
   {依赖项1}、{依赖项2}、{依赖项3}、...
   https://opencollective.com/{名称}

3. **💜 @{用户2}** — {N} 个直接依赖项 · 💤 低活动度
   {依赖项1}
   https://github.com/sponsors/{用户2}

---

### 📊 覆盖率

- **{可赞助数}/{总数}** 个依赖项有资助选项({百分比}%)
- **{目标数}** 个唯一的资助目标
- **{未找到资助的直接依赖数}** 个直接依赖项尚未设置资助方式({前几个名称}, ...)
- 所有链接已验证 ✅

报告格式规则

  • 以“🎯 回馈社区的方式”开头——这是主要输出。按覆盖的依赖项总数排序(降序)的编号列表。
  • URL 独占一行——不使用 Markdown 链接语法包裹。确保在任何终端模拟器中都可点击。
  • 内联依赖项名称——在每个赞助者下方用逗号分隔列出所覆盖的依赖项名称,让用户清楚地看到他们资助的是什么。
  • 内联健康指标——在每个目标旁边显示 ⭐/⚠️/💤,而不是放在单独的表格列中。
  • 一个“📊 覆盖率”部分——紧凑的统计信息。没有单独的“已验证资助链接”表,也没有“未找到资助信息”表。
  • 未找到资助的依赖项作为简短说明——只给出计数和最重要的几个名称。将其描述为“尚未设置资助方式”,而不是强调其缺失。切勿因项目没有资助而使其蒙羞——许多维护者更喜欢其他形式的贡献。
  • 💜 GitHub Sponsors, 🟠 Open Collective, ☕ Ko-fi, 🔗 其他
  • 当同一个维护者有多个资助来源时,优先显示 GitHub Sponsors 链接。

错误处理

  • 如果 deps.dev 对包返回 404 → 回退到直接读取清单并通过 registry API 解析。
  • 如果 deps.dev 遇到速率限制 → 注明部分结果,继续使用已获取的数据。
  • 如果 get_file_contents 对仓库返回 404 → 告知用户仓库可能不存在或为私有。
  • 如果链接验证失败 → 静默排除该链接。
  • 即使结果不完整,也要始终生成报告——切勿静默失败。

关键规则

  1. 切勿展示未经验证的链接。 在展示每个链接之前,必须先获取其 URL。5 个经过验证的链接 > 20 个猜测的链接。
  2. 切勿根据训练知识猜测。 始终检查——资助页面会随时间变化。
  3. 始终保持鼓励,切勿羞辱。 积极正面地呈现结果——庆祝已有资助的部分,并将未找到资助的依赖项视为一个机会,而非缺陷。并非每个项目都需要或希望获得资金赞助。
  4. 以行动为导向。 “🎯 回馈社区的方式”部分是主要输出——简洁、可点击的 URL,按目标分组。
  5. 优先使用 deps.dev 作为解析器。 仅在 deps.dev 不可用时回退到 registry API。
  6. 始终使用 GitHub MCP 工具get_file_contents)、web_fetchweb_search——切勿克隆或使用 shell 命令。
  7. 高效执行。 批量调用 API,去重仓库,每个所有者的 .github 仓库只检查一次。
  8. 关注 GitHub Sponsors。 这是最可行的平台——展示其他平台,但优先展示 GitHub。
  9. 按维护者去重。 进行分组以展示资助一个人所能带来的实际影响。
  10. 展示可操作的最小集合。 告知用户能够用最少的赞助覆盖最多依赖项的方式。
  11. 尽量减少中间输出。 不要宣布每个批次。收集所有数据,然后一次性输出一份连贯的报告。

📄 原始文档

完整文档(英文):

https://skills.sh/github/awesome-copilot/sponsor-finder

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。