sponsor-finder

sponsor-finder

熱門

找出 GitHub 儲存庫的相依套件中哪些可以透過 GitHub Sponsors 贊助。使用 deps.dev API 解析 npm、PyPI、Cargo、Go、RubyGems、Maven 和 NuGet 的相依關係。檢查 npm 的 funding 中繼資料、FUNDING.yml 檔案以及網路搜尋。驗證每個連結。顯示直接與間接相依套件及其 OSSF Scorecard 健康資料。使用方式:輸入 /sponsor 後接 GitHub 的 owner/repo(例如 "/sponsor expressjs/express")。

3.7萬星標
4569分支
更新於 2026/7/14
SKILL.md
readonlyread-only
name
sponsor-finder
description

找出 GitHub 儲存庫的相依套件中哪些可以透過 GitHub Sponsors 贊助。使用 deps.dev API 解析 npm、PyPI、Cargo、Go、RubyGems、Maven 和 NuGet 的相依關係。檢查 npm 的 funding 中繼資料、FUNDING.yml 檔案以及網路搜尋。驗證每個連結。顯示直接與間接相依套件及其 OSSF Scorecard 健康資料。使用方式:輸入 /sponsor 後接 GitHub 的 owner/repo(例如 "/sponsor expressjs/express")。

Sponsor Finder

發掘機會來支援專案相依套件背後的開源維護者。接受 GitHub 的 owner/repo(例如 /sponsor expressjs/express),使用 deps.dev API 進行相依解析與專案健康資料,並產出友善的贊助報告,涵蓋直接與間接相依套件。

你的工作流程

當使用者輸入 /sponsor {owner/repo} 或提供 owner/repo 格式的儲存庫時:

  1. 解析輸入 — 提取 ownerrepo
  2. 偵測生態系 — 擷取 manifest 以確定套件名稱與版本。
  3. 取得完整相依樹 — deps.dev GetDependencies(一次呼叫)。
  4. 解析儲存庫 — 對每個相依套件呼叫 deps.dev GetVersionrelatedProjects 提供 GitHub 儲存庫。
  5. 取得專案健康資料 — 對不重複的儲存庫呼叫 deps.dev GetProject → OSSF Scorecard。
  6. 尋找贊助連結 — npm funding 欄位、FUNDING.yml、網路搜尋備援。
  7. 驗證每個連結 — 擷取每個 URL 以確認有效。
  8. 分組並報告 — 依贊助目標分組,按影響力排序。

步驟 1:偵測生態系與套件

使用 get_file_contents 從目標儲存庫擷取 manifest。判斷生態系並提取套件名稱與最新版本:

檔案 生態系 套件名稱來源 版本來源
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/{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"

單次呼叫即可取得完整相依樹 — 包含直接與間接相依套件,以及精確的解析版本。無需解析 lockfile。

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/{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 — 使用相同的欄位結構。

效率規則

  • 每次處理 10 個批次。
  • 去重 — 多個套件可能對應到同一個儲存庫。
  • 跳過找不到 GitHub 專案的相依套件(計為「無法解析」)。

步驟 4:取得專案健康資料(deps.dev)

對每個不重複的 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 — 活動指標

使用 Maintained 分數來標示專案健康狀態:

  • 分數 7–10 → ⭐ 積極維護中
  • 分數 4–6 → ⚠️ 部分維護
  • 分數 0–3 → 💤 可能未維護

效率規則

  • 僅對 不重複的儲存庫 擷取(非每個套件)。
  • 每次處理 10 個批次。
  • 此步驟為選用 — 若遇到速率限制則跳過,並在輸出中註明。

步驟 5:尋找贊助連結

對每個不重複的 GitHub 儲存庫,依序使用三種來源檢查贊助資訊:

5a:npm funding 欄位(僅限 npm 生態系)

使用 web_fetch 擷取 https://registry.npmjs.org/{package-name}/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 擷取 {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: 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

"{package name}" github sponsors OR open collective OR funding

跳過已知由企業維護的套件(React/Meta、TypeScript/Microsoft、@types/DefinitelyTyped)。

效率規則

  • 對所有相依套件檢查 5a 和 5b。 僅對前 10 個未找到贊助的套件使用 5c。
  • 對非 npm 生態系跳過 npm registry 呼叫。
  • 對儲存庫去重 — 每個儲存庫僅檢查一次。
  • 每個不重複的擁有者僅檢查一次 {owner}/.github — 對其所有儲存庫重複使用結果。
  • 每次處理 10 個擁有者的批次進行組織層級查詢。

步驟 6:驗證每個連結(關鍵)

在包含任何贊助連結之前,務必確認其存在。

對每個贊助 URL 使用 web_fetch

  • 有效頁面 → ✅ 包含
  • 404 /「找不到」/「未註冊」 → ❌ 排除
  • 重新導向至有效頁面 → ✅ 包含最終 URL

每次驗證 5 個批次。絕不呈現未經驗證的連結。


步驟 7:輸出報告

輸出規範

在資料收集過程中盡量減少中間輸出。 不要宣布每個批次(「批次 3/7…」、「正在檢查贊助…」)。相反地:

  • 在開始每個主要階段時顯示 一行簡短的狀態(例如「正在解析 67 個相依套件…」、「正在檢查贊助連結…」)
  • 收集所有資料後再產出報告。 絕不逐步輸出部分表格。
  • 最後以 單一連貫區塊 輸出最終報告。

報告範本

## 💜 Sponsor Finder 報告

**儲存庫:** {owner}/{repo} · {ecosystem} · {package}@{version}
**掃描日期:** {date} · 共 {total} 個相依套件({direct} 個直接 + {transitive} 個間接)

---

### 🎯 回饋方式

只需贊助 {N} 個人/組織,就能支援 {sponsorable} 個(共 {total} 個)相依套件 — 這是投資專案所依賴的開源軟體的好方法。

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}、...)
- 所有連結已驗證 ✅

報告格式規則

  • 以「🎯 回饋方式」開頭 — 這是主要輸出。編號列表,按涵蓋的相依套件總數降冪排序。
  • URL 單獨一行 — 不要用 Markdown 連結語法包裹。這樣在任何終端機中都能點擊。
  • 內聯相依套件名稱 — 在每個贊助者下方以逗號分隔列出涵蓋的相依套件名稱,讓使用者清楚知道他們贊助了哪些套件。
  • 健康狀態內聯顯示 — 在每個目標旁顯示 ⭐/⚠️/💤,而不是放在單獨的表格欄位中。
  • 一個「📊 覆蓋率」區塊 — 簡潔的統計資料。沒有獨立的「已驗證贊助連結」表格,也沒有「未找到贊助」表格。
  • 未贊助的相依套件以簡短備註呈現 — 僅顯示數量與主要名稱。用「尚未設定贊助」來表述,而不是強調缺口。切勿因專案沒有贊助而使其難堪 — 許多維護者偏好其他形式的貢獻。
  • 💜 GitHub Sponsors、🟠 Open Collective、☕ Ko-fi、🔗 其他
  • 當同一維護者有多個贊助來源時,優先顯示 GitHub Sponsors 連結。

錯誤處理

  • 如果 deps.dev 對套件回傳 404 → 回退為直接讀取 manifest 並透過 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 — 絕不進行 clone 或 shell 指令。
  7. 保持效率。 批次 API 呼叫、對儲存庫去重、每個擁有者的 .github 儲存庫僅檢查一次。
  8. 專注於 GitHub Sponsors。 最具可行性的平台 — 顯示其他平台但優先顯示 GitHub。
  9. 按維護者去重。 分組以顯示贊助一個人的實際影響。
  10. 顯示可行的最小數量。 告訴使用者最少贊助幾個就能支援最多的相依套件。
  11. 盡量減少中間輸出。 不要宣布每個批次。收集所有資料,然後輸出單一連貫的報告。