fix(skills): 修复 14 个 pointer 条目安装失败 + 7 个合集声明 children (#81)

## 背景 / Background

市场里 25 个 pointer 条目中有 **14 个点安装必然失败**,客户端返回 502「源仓库中未找到 SKILL.md(pointer
指向有误)」。

根因是 `entry.json` 的 `source` 指错:客户端按 `source.path` 定位内容(缺省则取仓库根),而这些条目的
`path` 缺失或 URL 指向了 HTML 页面,`contentDir/SKILL.md` 自然不存在。

Of the 25 pointer entries, **14 always failed to install** with a 502.
The `source` pointers were wrong: `path` was missing (so the client
looked at the repo root) or `repoUrl` pointed at an HTML page instead of
the content.

## 改动 / Changes

### 1. 补 `source.path`(5 个)

| 条目 | path | 上游 SKILL.md 实际位置 |
|---|---|---|
| `impeccable` | `plugin/skills/impeccable` | 根目录没有;`plugin/` 与
`.claude/` 两份内容逐字节一致,取中立的分发目录 |
| `ai-news-radar` | `skills/ai-news-radar` | 仓库另有 `skills/radar`,取与条目 id
对应的 |
| `taste-skill` | `skills/taste-skill` | 同名子目录 |
| `wechatpay-skills` | `wechatpay-payment-integration` | 仓库另有
`wechatpay-product-coupon` 未覆盖,见下方遗留项 |
| `luckin-my-coffee` | `my-coffee` | zip 内有一层顶层目录 |

### 2. 修正 web 类条目的源地址(2 个)

`amap-jsapi-skill` / `dingtalk-api` 原先指向 ClawHub 的**网页**(`content-type:
text/html`),客户端只在 markdown 时才写成 `SKILL.md`,HTML 会落成 `index.html`,校验必失败。

- `amap-jsapi-skill` → 改用 ClawHub 文件 API(返回 `text/markdown`)。该技能在
ClawHub 的发布包 `version.files` 只有一个 `SKILL.md`,单文件抓取正是对的形态。
- `dingtalk-api` → ClawHub 包有 38 个文件(`scripts/*.ts` 等),单文件抓不全,改指内容完整的
GitHub 上游 `ogenes/dingtalk-api` 并锁 ref。

### 3. 合集条目声明 `children`(7 个,147 个子技能)

这 7 个的上游是「一个仓库装着 N 个平级技能」,没有单一 SKILL.md 可指,靠改 `path`
修不了。配合客户端新增的合集能力(desirecore 主仓库 PR),`entry.json`
现在可声明子技能清单,市场仍是一个条目,安装时由用户勾选装哪几个。

| 条目 | 子技能数 |
|---|---|
| `marketingskills` | 49 |
| `mattpocock-skills` | 35 |
| `larksuite-cli` | 27 |
| `baoyu-skills` | 21 |
| `wecom-cli` | 7 |
| `khazix-skills` | 5 |
| `netease-skills` | 3 |

新增 `scripts/gen-collection-children.py`:按 `entry.json` 锁定的 ref
克隆上游、扫描子技能、读 frontmatter 生成 `children`。约定「仓库有顶层 `skills/` 就只扫它」——否则会收录
`larksuite/cli` 的 linter 测试夹具
`internal/qualitygate/skillscan/testdata/skills/lark-demo`。

### 4. `netease-skills` 分支修正

`repoBranch` 写的是 `main`,上游默认分支是 `master`,此前 clone 必然失败(`Could not find
main`)。

### 5. 版本号

`manifest.json` `1.2.24` → `1.2.25`。

## 验证 / Verification

- `uv run scripts/i18n/validate-i18n.py` — OK
- `uv run scripts/i18n/validate-i18n.py --online` — OK
- **真实运行的 agent-service 上逐个安装**(独立 home + standalone 服务,非模拟):18 个非合集
pointer 条目 **18/18 成功**并完整落盘;7 个合集条目 **7/7 成功**,并验证了部分安装、追加、取消勾选卸载、装到
Agent 私有目录。

## 遗留项 / Known gaps

- `wechatpay-skills` 只覆盖了 `wechatpay-payment-integration`,同仓库的
`wechatpay-product-coupon` 未上架。条目名是复数,后续可拆成两条或改成合集。
- `children[].i18n` 目前只有 `shortDesc`(取自上游
description),**没有中文名**——子技能名沿用上游 id(如 `lark-approval`),以保证与上游文档、Agent
加载路径一致。宝玉 / Matt Pocock / Marketing 三个合集的描述本身就是英文。如需中文化,可接
`i18n-translate.yml` 覆盖 `children` 字段。
- 在线校验目前只查 URL 可达性,**查不出 `path` 指向的目录里有没有 SKILL.md**——这 14
个坏条目当初就是这么一路绿灯合进主干的。建议后续给 `--online` 加这条断言。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: xieyuanxiang <xieyuanxiang123@gmail.com>
This commit is contained in:
2026-08-09 16:25:20 +08:00
committed by GitHub
parent b1f0719d40
commit 27589d013d
16 changed files with 2073 additions and 16 deletions

View File

@@ -34,5 +34,595 @@
"repoUrl": "https://github.com/coreyhaines31/marketingskills.git",
"repoBranch": "main",
"ref": "7868cb9251fad80a73d26e488a5ad5f6c4a9f335"
}
},
"children": [
{
"id": "ab-testing",
"path": "skills/ab-testing",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program."
},
"en-US": {
"shortDesc": "When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program."
}
}
},
{
"id": "ad-creative",
"path": "skills/ad-creative",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, or full ad variations — for any paid advertising platfor…"
},
"en-US": {
"shortDesc": "When the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, or full ad variations — for any paid advertising platfor…"
}
}
},
{
"id": "ads",
"path": "skills/ads",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms."
},
"en-US": {
"shortDesc": "When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms."
}
}
},
{
"id": "ai-seo",
"path": "skills/ai-seo",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to optimize content for AI search engines, get cited by LLMs, or appear in AI-generated answers."
},
"en-US": {
"shortDesc": "When the user wants to optimize content for AI search engines, get cited by LLMs, or appear in AI-generated answers."
}
}
},
{
"id": "analytics",
"path": "skills/analytics",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to set up, improve, or audit analytics tracking and measurement."
},
"en-US": {
"shortDesc": "When the user wants to set up, improve, or audit analytics tracking and measurement."
}
}
},
{
"id": "aso",
"path": "skills/aso",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to audit or optimize an App Store or Google Play listing."
},
"en-US": {
"shortDesc": "When the user wants to audit or optimize an App Store or Google Play listing."
}
}
},
{
"id": "attribution",
"path": "skills/attribution",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to figure out which marketing actually drives conversions and revenue, choose or interpret an attribution model, or reconcile conflicting nu…"
},
"en-US": {
"shortDesc": "When the user wants to figure out which marketing actually drives conversions and revenue, choose or interpret an attribution model, or reconcile conflicting nu…"
}
}
},
{
"id": "churn-prevention",
"path": "skills/churn-prevention",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies."
},
"en-US": {
"shortDesc": "When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies."
}
}
},
{
"id": "co-marketing",
"path": "skills/co-marketing",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to find co-marketing partners, plan joint campaigns, or brainstorm partnership opportunities."
},
"en-US": {
"shortDesc": "When the user wants to find co-marketing partners, plan joint campaigns, or brainstorm partnership opportunities."
}
}
},
{
"id": "cold-email",
"path": "skills/cold-email",
"i18n": {
"zh-CN": {
"shortDesc": "Write B2B cold emails and follow-up sequences that get replies."
},
"en-US": {
"shortDesc": "Write B2B cold emails and follow-up sequences that get replies."
}
}
},
{
"id": "community-marketing",
"path": "skills/community-marketing",
"i18n": {
"zh-CN": {
"shortDesc": "Build and leverage online communities to drive product growth and brand loyalty."
},
"en-US": {
"shortDesc": "Build and leverage online communities to drive product growth and brand loyalty."
}
}
},
{
"id": "competitor-profiling",
"path": "skills/competitor-profiling",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to research, profile, or analyze competitors from their URLs."
},
"en-US": {
"shortDesc": "When the user wants to research, profile, or analyze competitors from their URLs."
}
}
},
{
"id": "competitors",
"path": "skills/competitors",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create competitor comparison or alternative pages for SEO and sales enablement."
},
"en-US": {
"shortDesc": "When the user wants to create competitor comparison or alternative pages for SEO and sales enablement."
}
}
},
{
"id": "content-strategy",
"path": "skills/content-strategy",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to plan a content strategy, decide what content to create, or figure out what topics to cover."
},
"en-US": {
"shortDesc": "When the user wants to plan a content strategy, decide what content to create, or figure out what topics to cover."
}
}
},
{
"id": "copy-editing",
"path": "skills/copy-editing",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to edit, review, or improve existing marketing copy, or refresh outdated content."
},
"en-US": {
"shortDesc": "When the user wants to edit, review, or improve existing marketing copy, or refresh outdated content."
}
}
},
{
"id": "copywriting",
"path": "skills/copywriting",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to write, rewrite, or improve marketing copy for any page — including homepage, landing pages, pricing pages, feature pages, about pages, or…"
},
"en-US": {
"shortDesc": "When the user wants to write, rewrite, or improve marketing copy for any page — including homepage, landing pages, pricing pages, feature pages, about pages, or…"
}
}
},
{
"id": "cro",
"path": "skills/cro",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to optimize, improve, or increase conversions on any marketing page or form — including homepage, landing pages, pricing pages, feature page…"
},
"en-US": {
"shortDesc": "When the user wants to optimize, improve, or increase conversions on any marketing page or form — including homepage, landing pages, pricing pages, feature page…"
}
}
},
{
"id": "customer-research",
"path": "skills/customer-research",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to conduct, analyze, or synthesize customer research."
},
"en-US": {
"shortDesc": "When the user wants to conduct, analyze, or synthesize customer research."
}
}
},
{
"id": "directory-submissions",
"path": "skills/directory-submissions",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to submit their product to startup, SaaS, AI, agent, MCP, no-code, or review directories for backlinks, domain rating, and discovery."
},
"en-US": {
"shortDesc": "When the user wants to submit their product to startup, SaaS, AI, agent, MCP, no-code, or review directories for backlinks, domain rating, and discovery."
}
}
},
{
"id": "emails",
"path": "skills/emails",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email program."
},
"en-US": {
"shortDesc": "When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email program."
}
}
},
{
"id": "free-tools",
"path": "skills/free-tools",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to plan, evaluate, or build a free tool for marketing purposes — lead generation, SEO value, or brand awareness."
},
"en-US": {
"shortDesc": "When the user wants to plan, evaluate, or build a free tool for marketing purposes — lead generation, SEO value, or brand awareness."
}
}
},
{
"id": "image",
"path": "skills/image",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create, generate, edit, or optimize images for marketing — blog heroes, social graphics, product mockups, profile banners, listing visual…"
},
"en-US": {
"shortDesc": "When the user wants to create, generate, edit, or optimize images for marketing — blog heroes, social graphics, product mockups, profile banners, listing visual…"
}
}
},
{
"id": "influencer-marketing",
"path": "skills/influencer-marketing",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to run influencer, creator, or ambassador partnerships to promote their product — finding and vetting partners, structuring deals, briefing…"
},
"en-US": {
"shortDesc": "When the user wants to run influencer, creator, or ambassador partnerships to promote their product — finding and vetting partners, structuring deals, briefing…"
}
}
},
{
"id": "launch",
"path": "skills/launch",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to plan a product launch, feature announcement, or release strategy."
},
"en-US": {
"shortDesc": "When the user wants to plan a product launch, feature announcement, or release strategy."
}
}
},
{
"id": "lead-magnets",
"path": "skills/lead-magnets",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create, plan, or optimize a lead magnet for email capture or lead generation."
},
"en-US": {
"shortDesc": "When the user wants to create, plan, or optimize a lead magnet for email capture or lead generation."
}
}
},
{
"id": "marketing-council",
"path": "skills/marketing-council",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants multiple expert perspectives on a marketing question — a simulated board of advisors staffed by legendary marketers (Seth Godin, David Ogilv…"
},
"en-US": {
"shortDesc": "When the user wants multiple expert perspectives on a marketing question — a simulated board of advisors staffed by legendary marketers (Seth Godin, David Ogilv…"
}
}
},
{
"id": "marketing-ideas",
"path": "skills/marketing-ideas",
"i18n": {
"zh-CN": {
"shortDesc": "When the user needs marketing ideas, inspiration, or strategies for their SaaS or software product."
},
"en-US": {
"shortDesc": "When the user needs marketing ideas, inspiration, or strategies for their SaaS or software product."
}
}
},
{
"id": "marketing-loops",
"path": "skills/marketing-loops",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to set up a recurring, self-running marketing workflow — a repeatable loop an AI agent runs on a cadence (weekly, daily, on a trigger) rathe…"
},
"en-US": {
"shortDesc": "When the user wants to set up a recurring, self-running marketing workflow — a repeatable loop an AI agent runs on a cadence (weekly, daily, on a trigger) rathe…"
}
}
},
{
"id": "marketing-plan",
"path": "skills/marketing-plan",
"i18n": {
"zh-CN": {
"shortDesc": "When the user needs a comprehensive marketing plan for a client, a company they advise, or their own product."
},
"en-US": {
"shortDesc": "When the user needs a comprehensive marketing plan for a client, a company they advise, or their own product."
}
}
},
{
"id": "marketing-psychology",
"path": "skills/marketing-psychology",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to apply psychological principles, mental models, or behavioral science to marketing."
},
"en-US": {
"shortDesc": "When the user wants to apply psychological principles, mental models, or behavioral science to marketing."
}
}
},
{
"id": "offers",
"path": "skills/offers",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to design, construct, or improve an offer — the thing they actually sell — including value framing, bonus stacking, guarantee design, scarci…"
},
"en-US": {
"shortDesc": "When the user wants to design, construct, or improve an offer — the thing they actually sell — including value framing, bonus stacking, guarantee design, scarci…"
}
}
},
{
"id": "onboarding",
"path": "skills/onboarding",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to optimize post-signup onboarding, user activation, first-run experience, or time-to-value."
},
"en-US": {
"shortDesc": "When the user wants to optimize post-signup onboarding, user activation, first-run experience, or time-to-value."
}
}
},
{
"id": "paywalls",
"path": "skills/paywalls",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create or optimize in-app paywalls, upgrade screens, upsell modals, or feature gates."
},
"en-US": {
"shortDesc": "When the user wants to create or optimize in-app paywalls, upgrade screens, upsell modals, or feature gates."
}
}
},
{
"id": "popups",
"path": "skills/popups",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes."
},
"en-US": {
"shortDesc": "When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes."
}
}
},
{
"id": "pricing",
"path": "skills/pricing",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants help with pricing decisions, packaging, or monetization strategy."
},
"en-US": {
"shortDesc": "When the user wants help with pricing decisions, packaging, or monetization strategy."
}
}
},
{
"id": "product-marketing",
"path": "skills/product-marketing",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create or update their product marketing context document."
},
"en-US": {
"shortDesc": "When the user wants to create or update their product marketing context document."
}
}
},
{
"id": "programmatic-seo",
"path": "skills/programmatic-seo",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create SEO-driven pages at scale using templates and data."
},
"en-US": {
"shortDesc": "When the user wants to create SEO-driven pages at scale using templates and data."
}
}
},
{
"id": "prospecting",
"path": "skills/prospecting",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to find, qualify, and build a list of prospects to reach out to — across B2B SaaS, general B2B, or local small businesses."
},
"en-US": {
"shortDesc": "When the user wants to find, qualify, and build a list of prospects to reach out to — across B2B SaaS, general B2B, or local small businesses."
}
}
},
{
"id": "public-relations",
"path": "skills/public-relations",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants help with public relations, earned media, press coverage, journalist outreach, or media strategy (not pull requests)."
},
"en-US": {
"shortDesc": "When the user wants help with public relations, earned media, press coverage, journalist outreach, or media strategy (not pull requests)."
}
}
},
{
"id": "referrals",
"path": "skills/referrals",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create, optimize, or analyze a referral program, affiliate program, or word-of-mouth strategy."
},
"en-US": {
"shortDesc": "When the user wants to create, optimize, or analyze a referral program, affiliate program, or word-of-mouth strategy."
}
}
},
{
"id": "revops",
"path": "skills/revops",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants help with revenue operations, lead lifecycle management, or marketing-to-sales handoff processes."
},
"en-US": {
"shortDesc": "When the user wants help with revenue operations, lead lifecycle management, or marketing-to-sales handoff processes."
}
}
},
{
"id": "sales-enablement",
"path": "skills/sales-enablement",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create sales collateral, pitch decks, one-pagers, objection handling docs, or demo scripts."
},
"en-US": {
"shortDesc": "When the user wants to create sales collateral, pitch decks, one-pagers, objection handling docs, or demo scripts."
}
}
},
{
"id": "schema",
"path": "skills/schema",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to add, fix, or optimize schema markup and structured data on their site."
},
"en-US": {
"shortDesc": "When the user wants to add, fix, or optimize schema markup and structured data on their site."
}
}
},
{
"id": "seo-audit",
"path": "skills/seo-audit",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to audit, review, or diagnose SEO issues on their site."
},
"en-US": {
"shortDesc": "When the user wants to audit, review, or diagnose SEO issues on their site."
}
}
},
{
"id": "signup",
"path": "skills/signup",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to optimize signup, registration, account creation, or trial activation flows."
},
"en-US": {
"shortDesc": "When the user wants to optimize signup, registration, account creation, or trial activation flows."
}
}
},
{
"id": "site-architecture",
"path": "skills/site-architecture",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to plan, map, or restructure their website's page hierarchy, navigation, URL structure, or internal linking."
},
"en-US": {
"shortDesc": "When the user wants to plan, map, or restructure their website's page hierarchy, navigation, URL structure, or internal linking."
}
}
},
{
"id": "sms",
"path": "skills/sms",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to plan, build, or optimize SMS or MMS marketing — including welcome flows, abandoned cart texts, post-purchase, win-back, promotional sends…"
},
"en-US": {
"shortDesc": "When the user wants to plan, build, or optimize SMS or MMS marketing — including welcome flows, abandoned cart texts, post-purchase, win-back, promotional sends…"
}
}
},
{
"id": "social",
"path": "skills/social",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, Facebook, or other platforms, or w…"
},
"en-US": {
"shortDesc": "When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, Facebook, or other platforms, or w…"
}
}
},
{
"id": "video",
"path": "skills/video",
"i18n": {
"zh-CN": {
"shortDesc": "When the user wants to create, generate, or produce video content using AI tools or programmatic frameworks."
},
"en-US": {
"shortDesc": "When the user wants to create, generate, or produce video content using AI tools or programmatic frameworks."
}
}
}
]
}