sponsor-finder by github/awesome-copilot
npx skills add https://github.com/github/awesome-copilot --skill sponsor-finder发现支持你项目依赖背后开源维护者的机会。接受 GitHub owner/repo 格式(例如 /sponsor expressjs/express),使用 deps.dev API 进行依赖解析和项目健康数据获取,并生成一份友好的赞助报告,涵盖直接依赖和传递依赖。
当用户输入 /sponsor {owner/repo} 或以 owner/repo 格式提供仓库时:
owner 和 repo。GetDependencies(一次调用)。GetVersion → 提供 GitHub 仓库。广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
relatedProjectsGetProject → OSSF Scorecard。funding 字段、FUNDING.yml、网络搜索备用方案。使用 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 |
这是关键步骤。 使用 web_fetch 调用 deps.dev API:
https://api.deps.dev/v3/systems/{ECOSYSTEM}/packages/{PACKAGE}/versions/{VERSION}:dependencies
例如:
https://api.deps.dev/v3/systems/npm/packages/express/versions/5.2.1:dependencies
这将返回一个 nodes 数组,其中每个节点包含:
versionKey.name — 包名versionKey.version — 解析后的版本relation — "SELF"、"DIRECT" 或 "INDIRECT"这次单一调用为你提供了整个依赖树 — 包括直接依赖和传递依赖 — 以及确切的解析版本。无需解析锁文件。
包含特殊字符的包名必须进行百分比编码:
@colors/colors → %40colors%2Fcolors@ 编码为 %40,/ 编码为 %2F如果仓库不发布包(例如,它是一个应用而非库),则回退到直接读取 package.json 的依赖项,并为每个依赖项调用 deps.dev GetVersion。
对于依赖树中的每个依赖项,调用 deps.dev GetVersion:
https://api.deps.dev/v3/systems/{ECOSYSTEM}/packages/{NAME}/versions/{VERSION}
从响应中提取:
relatedProjects → 查找 relationType: "SOURCE_REPO" → projectKey.id 给出 github.com/{owner}/{repo}links → 查找 label: "SOURCE_REPO" → url 字段这适用于所有生态系统 — npm、PyPI、Cargo、Go、RubyGems、Maven、NuGet — 具有相同的字段结构。
对于每个唯一的 GitHub 仓库,调用 deps.dev GetProject:
https://api.deps.dev/v3/projects/github.com%2F{owner}%2F{repo}
从响应中提取:
scorecard.checks → 查找 "Maintained" 检查项 → score (0–10)starsCount — 流行度指标license — 项目许可证openIssuesCount — 活跃度指标使用维护分数来标记项目健康度:
对于每个唯一的 GitHub 仓库,按顺序使用以下三个来源检查资助信息:
funding 字段(仅限 npm 生态系统)在 https://registry.npmjs.org/{package-name}/latest 上使用 web_fetch,并检查 funding 字段:
"https://github.com/sponsors/sindresorhus" → 用作 URL{"type": "opencollective", "url": "https://opencollective.com/express"} → 使用 url.github/FUNDING.yml(仓库级别,然后组织级别回退)步骤 5b-i — 按仓库检查: 使用 get_file_contents 获取 {owner}/{repo} 路径下的 .github/FUNDING.yml。
步骤 5b-ii — 组织/用户级别回退: 如果 5b-i 返回 404(仓库本身没有 FUNDING.yml),则检查所有者的默认社区健康仓库:使用 get_file_contents 获取 {owner}/.github 路径下的 FUNDING.yml。
GitHub 支持默认社区健康文件约定:用户/组织级别的 .github 仓库为所有缺少自身文件的仓库提供默认值。例如,isaacs/.github/FUNDING.yml 适用于所有 isaacs/* 仓库。
每个唯一的 {owner}/.github 仓库只查找一次 — 为该所有者下的所有仓库重用结果。以每次 10 个所有者的批次处理。
解析 YAML(5b-i 和 5b-ii 相同):
github: [username] → https://github.com/sponsors/{username}open_collective: slug → https://opencollective.com/{slug}ko_fi: username → https://ko-fi.com/{username}patreon: username → https://patreon.com/{username}tidelift: platform/package → https://tidelift.com/subscription/pkg/{platform-package}custom: [urls] → 按原样使用对于前 10 个未获资助的依赖项(按传递依赖数量排序),使用 web_search:
"{package name}" github sponsors OR open collective OR funding
跳过已知由公司维护的包(React/Meta、TypeScript/Microsoft、@types/DefinitelyTyped)。
{owner}/.github — 为其所有仓库重用结果。在包含任何资助链接之前,验证其是否存在。
在每个资助 URL 上使用 web_fetch:
以每次 5 个的批次验证。绝不呈现未经验证的链接。
在数据收集过程中尽量减少中间输出。 不要宣布每个批次("第 3 批,共 7 批…"、"正在检查资助链接…")。相反:
## 💜 赞助者查找工具报告
**仓库:** {owner}/{repo} · {ecosystem} · {package}@{version}
**扫描时间:** {date} · {total} 个依赖项({direct} 个直接依赖 + {transitive} 个传递依赖)
---
### 🎯 回馈方式
仅赞助 {N} 个人/组织,就能支持你 {total} 个依赖项中的 {sponsorable} 个 — 这是对你项目所依赖的开源项目进行投资的好方法。
1. **💜 @{user}** — {N} 个直接依赖 + {M} 个传递依赖 · ⭐ 积极维护
{dep1}, {dep2}, {dep3}, ...
https://github.com/sponsors/{user}
2. **🟠 Open Collective: {name}** — {N} 个直接依赖 + {M} 个传递依赖 · ⭐ 积极维护
{dep1}, {dep2}, {dep3}, ...
https://opencollective.com/{name}
3. **💜 @{user2}** — {N} 个直接依赖 · 💤 低活跃度
{dep1}
https://github.com/sponsors/{user2}
---
### 📊 覆盖率
- **{sponsorable}/{total}** 个依赖项有资助选项({percentage}%)
- **{destinations}** 个唯一的资助目的地
- **{unfunded_direct}** 个直接依赖尚未设置资助({top_names}, ...)
- 所有链接已验证 ✅
get_file_contents 对仓库返回 404 → 通知用户仓库可能不存在或是私有的。get_file_contents)、web_fetch 和 web_search — 绝不克隆或执行 shell 命令。.github 仓库只检查一次。每周安装量
7.3K
仓库
GitHub 星标数
26.7K
首次出现
2026年2月13日
安全审计
安装于
codex7.2K
gemini-cli7.2K
opencode7.2K
github-copilot7.2K
cursor7.2K
kimi-cli7.2K
Discover opportunities to support the open source maintainers behind your project's dependencies. Accepts a GitHub owner/repo (e.g. /sponsor expressjs/express), uses the deps.dev API for dependency resolution and project health data, and produces a friendly sponsorship report covering both direct and transitive dependencies.
When the user types /sponsor {owner/repo} or provides a repository in owner/repo format:
owner and repo.GetDependencies (one call).GetVersion for each dep → relatedProjects gives GitHub repo.GetProject for unique repos → OSSF Scorecard.funding field, FUNDING.yml, web search fallback.Use get_file_contents to fetch the manifest from the target repo. Determine the ecosystem and extract the package name + latest version:
| File | Ecosystem | Package name from | Version from |
|---|---|---|---|
package.json | NPM | name field | version field |
requirements.txt | PYPI | list of package names | use latest (omit version in deps.dev call) |
pyproject.toml | PYPI | [project.dependencies] |
This is the key step. Use web_fetch to call the deps.dev API:
https://api.deps.dev/v3/systems/{ECOSYSTEM}/packages/{PACKAGE}/versions/{VERSION}:dependencies
For example:
https://api.deps.dev/v3/systems/npm/packages/express/versions/5.2.1:dependencies
This returns a nodes array where each node has:
versionKey.name — package nameversionKey.version — resolved versionrelation — "SELF", "DIRECT", or "INDIRECT"This single call gives you the entire dependency tree — both direct and transitive — with exact resolved versions. No need to parse lockfiles.
Package names containing special characters must be percent-encoded:
@colors/colors → %40colors%2Fcolors@ as %40, / as %2FIf the repo doesn't publish a package (e.g., it's an app not a library), fall back to reading package.json dependencies directly and calling deps.dev GetVersion for each.
For each dependency from the tree, call deps.dev GetVersion:
https://api.deps.dev/v3/systems/{ECOSYSTEM}/packages/{NAME}/versions/{VERSION}
From the response, extract:
relatedProjects → look for relationType: "SOURCE_REPO" → projectKey.id gives github.com/{owner}/{repo}links → look for label: "SOURCE_REPO" → url fieldThis works across all ecosystems — npm, PyPI, Cargo, Go, RubyGems, Maven, NuGet — with the same field structure.
For each unique GitHub repo, call deps.dev GetProject:
https://api.deps.dev/v3/projects/github.com%2F{owner}%2F{repo}
From the response, extract:
scorecard.checks → find the "Maintained" check → score (0–10)starsCount — popularity indicatorlicense — project licenseopenIssuesCount — activity indicatorUse the Maintained score to label project health:
For each unique GitHub repo, check for funding information using three sources in order:
funding field (npm ecosystem only)Use web_fetch on https://registry.npmjs.org/{package-name}/latest and check for a funding field:
"https://github.com/sponsors/sindresorhus" → use as URL{"type": "opencollective", "url": "https://opencollective.com/express"} → use url.github/FUNDING.yml (repo-level, then org-level fallback)Step 5b-i — Per-repo check: Use get_file_contents to fetch {owner}/{repo} path .github/FUNDING.yml.
Step 5b-ii — Org/user-level fallback: If 5b-i returned 404 (no FUNDING.yml in the repo itself), check the owner's default community health repo: Use get_file_contents to fetch {owner}/.github path FUNDING.yml.
GitHub supports a default community health files convention: a .github repository at the user/org level provides defaults for all repos that lack their own. For example, isaacs/.github/FUNDING.yml applies to all isaacs/* repos.
Only look up each unique {owner}/.github repo once — reuse the result for all repos under that owner. Process in batches of 10 owners at a time.
Parse the YAML (same for both 5b-i and 5b-ii):
github: [username] → https://github.com/sponsors/{username}open_collective: slug → https://opencollective.com/{slug}ko_fi: username → https://ko-fi.com/{username}patreon: username → https://patreon.com/{username}tidelift: platform/package → https://tidelift.com/subscription/pkg/{platform-package}For the top 10 unfunded dependencies (by number of transitive dependents), use web_search:
"{package name}" github sponsors OR open collective OR funding
Skip packages known to be corporate-maintained (React/Meta, TypeScript/Microsoft, @types/DefinitelyTyped).
{owner}/.github check per unique owner — reuse the result for all their repos.Before including ANY funding link, verify it exists.
Use web_fetch on each funding URL:
Verify in batches of 5 at a time. Never present unverified links.
Minimize intermediate output during data gathering. Do NOT announce each batch ("Batch 3 of 7…", "Now checking funding…"). Instead:
## 💜 Sponsor Finder Report
**Repository:** {owner}/{repo} · {ecosystem} · {package}@{version}
**Scanned:** {date} · {total} deps ({direct} direct + {transitive} transitive)
---
### 🎯 Ways to Give Back
Sponsoring just {N} people/orgs supports {sponsorable} of your {total} dependencies — a great way to invest in the open source your project depends on.
1. **💜 @{user}** — {N} direct + {M} transitive deps · ⭐ Maintained
{dep1}, {dep2}, {dep3}, ...
https://github.com/sponsors/{user}
2. **🟠 Open Collective: {name}** — {N} direct + {M} transitive deps · ⭐ Maintained
{dep1}, {dep2}, {dep3}, ...
https://opencollective.com/{name}
3. **💜 @{user2}** — {N} direct dep · 💤 Low activity
{dep1}
https://github.com/sponsors/{user2}
---
### 📊 Coverage
- **{sponsorable}/{total}** dependencies have funding options ({percentage}%)
- **{destinations}** unique funding destinations
- **{unfunded_direct}** direct deps don't have funding set up yet ({top_names}, ...)
- All links verified ✅
get_file_contents returns 404 for the repo → inform user repo may not exist or is private.get_file_contents), web_fetch, and web_search — never clone or shell out..github repo only once.Weekly Installs
7.3K
Repository
GitHub Stars
26.7K
First Seen
Feb 13, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
codex7.2K
gemini-cli7.2K
opencode7.2K
github-copilot7.2K
cursor7.2K
kimi-cli7.2K
97,600 周安装
| use latest |
Cargo.toml | CARGO | [package] name | [package] version |
go.mod | GO | module path | extract from go.mod |
Gemfile | RUBYGEMS | gem names | use latest |
pom.xml | MAVEN | groupId:artifactId | version |
custom: [urls] → use as-is