SDK采用追踪器
输入一个SDK名称。在GitHub上搜索导入该SDK的公开仓库。根据公司信号、活跃度和噪音指标对每个仓库进行评分。为高信号仓库丰富所有者和贡献者数据。输出一个排名的采用报告,并附上公司采用者的外联上下文。
关键规则: 输出中的每个仓库必须存在于GitHub代码搜索API的响应中。每个公司名称必须来自GitHub用户或组织API的company或name字段。每个贡献者用户名必须来自GitHub贡献者API响应。如果API中任何字段为空,请写“未列出”——不要推断、猜测或外推。
常见错误
| agent可能会…… | 错在哪里 |
|---|---|
| 在没有GITHUB_TOKEN的情况下运行代码搜索 | 未经身份验证的代码搜索会达到3次/分钟的次要速率限制,并且任何有意义的扫描都会失败。需要GITHUB_TOKEN。如果缺少,请在步骤1停止并显示明确的错误信息。 |
| 包括SDK本身的fork | fork了SDK的仓库是贡献者或镜像,而不是采用者。过滤掉fork == true且仓库名称与SDK名称匹配的仓库。 |
| 将所有500个原始搜索结果发送给AI | 代码搜索最多可返回500个结果,其中大部分是噪音。请先本地过滤和评分。只将前20个高信号仓库发送给AI分析步骤。 |
| 将示例和教程仓库报告为采用者 | 名称或描述中包含“example”、“tutorial”、“demo”、“learn”、“sample”、“playground”、“starter”的仓库不是生产环境用户。标记为tutorial_noise并从线索简报中排除。 |
| 编造公司名称或联系信息 | 每个公司名称必须来自GitHub company或组织name字段。每个贡献者用户名必须来自贡献者API响应。如果字段为空,请写“未列出”。 |
| 对所有生态系统使用相同的导入模式 | require('sdk')无法找到Python用户。从SDK名称自动检测生态系统并构建生态系统特定的模式。如果自动检测不明确,请询问用户。 |
步骤1:环境检查
if [ -z "$GITHUB_TOKEN" ]; then
echo "错误:代码搜索需要GITHUB_TOKEN。"
echo "在 github.com/settings/tokens 添加一个token(公开仓库无需任何作用域)。"
echo "没有它,GitHub代码搜索会达到3次/分钟的次要速率限制并失败。"
exit 1
fi
echo "GITHUB_TOKEN: 已设置"
curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/rate_limit" | python3 -c "
import json, sys
d = json.load(sys.stdin)
search = d['resources']['search']
core = d['resources']['core']
print(f'搜索速率: {search[\"remaining\"]}/{search[\"limit\"]} 剩余')
print(f'核心速率: {core[\"remaining\"]}/{core[\"limit\"]} 剩余')
"
如果搜索剩余为0:停止。告诉用户从X-RateLimit-Reset中获取的重置时间。
步骤2:收集输入
从对话中收集:
- SDK名称(例如
@company/my-sdk、requests、github.com/org/go-sdk) - 可选:生态系统覆盖(
npm、python、go、gem)——如果未提供则自动检测 - 可选:要从结果中排除的组织/用户(SDK所有者的自己的仓库)
- 可选:产品上下文字符串(用于个性化外联消息)
自动检测生态系统:
- 以
@开头或包含-:npm - snake_case且不包含
/或-:python - 包含
github.com/:go - 其他:询问用户
如果未提供SDK名称: 询问:“您想追踪哪个SDK或库?请提供导入语句中使用的包名称(例如stripe、@clerk/nextjs、requests)。”
python3 << 'PYEOF'
import json, sys, re
sdk_name = "SDK_NAME_HERE"
ecosystem_override = "" # 留空以便自动检测
exclude_owner = "" # 可选:要排除的所有者名称(通常是SDK发布者)
product_context = "" # 可选:您的产品是做什么的
# 自动检测生态系统
if ecosystem_override:
ecosystem = ecosystem_override
elif sdk_name.startswith("@") or "-" in sdk_name:
ecosystem = "npm"
elif re.match(r'^[a-z][a-z0-9_]*$', sdk_name):
ecosystem = "python"
elif "github.com/" in sdk_name:
ecosystem = "go"
else:
ecosystem = "generic"
print(f"SDK: {sdk_name}")
print(f"生态系统: {ecosystem}")
print(f"排除的所有者: {exclude_owner or '(无)'}")
with open("/tmp/sat-input.json", "w") as f:
json.dump({
"sdk_name": sdk_name,
"ecosystem": ecosystem,
"exclude_owner": exclude_owner,
"product_context": product_context
}, f)
PYEOF
步骤3:搜索GitHub代码
首先检查独立脚本——它会在一次调用中处理步骤3-5。
ls scripts/fetch.py 2>/dev/null && echo "脚本可用" || echo "脚本未找到"
如果脚本可用,运行它并跳转到步骤6:
python3 scripts/fetch.py "$(python3 -c "import json; d=json.load(open('/tmp/sat-input.json')); print(d['sdk_name'])"" \
--ecosystem "$(python3 -c "import json; d=json.load(open('/tmp/sat-input.json')); print(d['ecosystem'])"" \
--exclude "$(python3 -c "import json; d=json.load(open('/tmp/sat-input.json')); print(d.get('exclude_owner',''))"