Yige 05e4498e31 fix(skills): flyai-skill 补 source.path 与 i18n,修复详情页空白 (#54)
## 问题

FlyAI(flyai-skill)在客户端市场详情页显示为空白(无描述、无技能文档正文)。

## 根因

- `source.path` 未设置:上游仓库 `alibaba-flyai/flyai-skill` 的 `SKILL.md` 实际位于
`skills/flyai/` 子目录(目录名为 `flyai`,而非与 entry id 同名的 `flyai-skill`)。抓取逻辑在
`path` 为空时退化为在仓库根目录查找 `SKILL.md`,而根目录并无该文件,导致抓取静默失败、`body` 保持为空。
- 缺少 `i18n` 字段:`shortDesc`/`name` 本地化文案缺失,列表与详情页描述行同样为空。

两者叠加,加上客户端对空字段没有兜底文案,最终表现为详情页视觉上完全空白。

## 修改

- 补充 `source.path: "skills/flyai"`,对齐上游真实目录结构
- 补充 `i18n.zh-CN` / `i18n.en-US` 的 `name` + `shortDesc`(内容取自上游
`SKILL.md` frontmatter 的 `description` 字段整理)
- 补充 `latestVersion: "1.0.15"`(对齐上游 `SKILL.md` frontmatter
`metadata.version`)

## 验证

- `python3 scripts/i18n/validate-i18n.py skills/flyai-skill` 通过
- `python3 scripts/i18n/validate-i18n.py skills/flyai-skill --online`
通过(确认 `source.path` 指向的文件真实可抓取)

## Test plan
- [x] 本地校验脚本通过(含 --online)
- [ ] DesireCore 主仓库 `npm run sync-market` 后在客户端验证详情页正常展示
2026-07-19 00:45:05 +08:00

DesireCore Market

DesireCore 官方市场仓库,存放官方维护的 Agent/Skill 定义,以及经过整理的第三方 Skill 入口。

Repository Shape

.
├── manifest.json          # Market metadata, supported locales, aggregate stats
├── categories.json        # Category registry and localized labels
├── builtin-skills.json    # Built-in local SKILL.md skills
├── agents/
│   └── desirecore/
│       └── agent.json
└── skills/
    ├── <local-skill>/
    │   ├── SKILL.md
    │   └── SKILL.<locale>.md
    └── <external-entry>/
        └── entry.json

The market currently contains:

  • 1 Agent: desirecore
  • 30 local built-in skills with SKILL.md
  • 20 external skill entries with entry.json
  • 50 publishable skills in total (SKILL.md + entry.json)

Skill Sources

Local built-in skills are installable from this repository and must be listed in builtin-skills.json:

configuring-compute, create-agent, dashscope-image-gen, delete-agent,
dev-environment-setup, discover-agent, docx, frontend-design, guizang-ppt,
image-to-image, mail-operations, manage-skills, manage-teams, markdown,
minimax-music-gen, minimax-video-gen, nodejs-runtime, pdf, pptx,
python-runtime, registering-services, s3-storage-operations, skill-creator,
tech-diagram, update-agent, using-services, web-access, workflow,
xiaomi-tts, xlsx

External entries are marketplace pointers to Git/Web/ZIP sources:

agent-reach, ai-news-radar, amap-jsapi-skill, dingtalk-api, flyai-skill,
follow-builders, ian-xiaohei-illustrations, khazix-skills, larksuite-cli,
luckin-my-coffee, mattpocock-skills, minimax-image-gen, minimax-tts,
mt-paotui-for-client, netease-skills, taste-skill, wechatpay-skills, wecom-cli

Data Formats

Local Skill (skills/<id>/SKILL.md)

Local skills use YAML frontmatter plus Markdown body. The top-level name must equal the directory slug. Display strings live in metadata.i18n.

---
name: web-access
description: >-
  Use this skill when ...
version: 2.0.1
type: procedural
risk_level: low
status: enabled
metadata:
  author: desirecore
  updated_at: '2026-05-05'
  i18n:
    default_locale: en-US
    source_locale: zh-CN
    locales: [zh-CN, en-US]
    zh-CN:
      name: 联网访问
      short_desc: 联网搜索、网页抓取、登录态浏览器访问
      body: ./SKILL.zh-CN.md
      translated_by: human
    en-US:
      name: Web Access
      short_desc: Web search, page fetching, logged-in browser access
      body: ./SKILL.md
      source_hash: sha256:...
      translated_by: human
market:
  category: research
  channel: latest
  maintainer:
    name: DesireCore Official
    verified: true
---

External Entry (skills/<id>/entry.json)

External entries point to upstream packages or repositories. They are counted in manifest.stats.totalSkills but are not included in builtin-skills.json.

{
  "id": "example-skill",
  "name": "Example Skill",
  "category": "development",
  "icon": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">...</svg>",
  "tags": ["example"],
  "maintainer": {
    "name": "Example",
    "verified": false,
    "account": "example",
    "url": "https://github.com/example/example-skill"
  },
  "stewardship": "community",
  "license": "MIT",
  "redistribution": "allowed",
  "source": {
    "kind": "git",
    "repoUrl": "https://github.com/example/example-skill.git",
    "repoBranch": "main"
  }
}

Categories

Valid category slugs are declared in categories.json:

productivity, development, business, creative, design, media,
communication, research, data, management

Validation

Run these checks before submitting changes:

# Full market + i18n validation
uv run scripts/i18n/validate-i18n.py

# Translation freshness check
uv run scripts/i18n/translate.py --check

# Optional network check for entry.json source URLs
uv run scripts/i18n/validate-i18n.py --online

The validator checks market stats, category references, builtin-skills.json, entry.json structure, i18n completeness, and translation freshness. Human-locked translations (translated_by: human) must keep source_hash aligned after manual review.

Detailed i18n guidance is in docs/I18N.md.

License

MIT License. See LICENSE.

Description
DesireCore 官方市场仓库。
Readme MIT 17 MiB
Languages
Python 74%
HTML 23%
Shell 1.6%
JavaScript 1%
PowerShell 0.4%