soia-meta-publish-marketlisted
Install: claude install-skill soia-team/soia-open-skills
# soia-meta-publish-market
把**已经正式发版**的技能投递到外部市场。与插件市场(`soia` marketplace)不同,
外部市场一次只收一个技能,用户拿到的是**孤立的一份**——所以上架不是复制粘贴,
需要先筛选和改写。
> **执行前置:必须有客户当次的明确授权,且只上架已发版内容。**
> 上架是对外动作,且外部平台一旦收录就有审核与展示记录,撤回成本高于插件市场。
> 客户说「改一下这个技能」不等于「上架它」。另外**只投递 `main` 上的正式版**:
> dev 快照带 `-SNAPSHOT`,上架等于把开发中状态发给陌生用户。
> `--dry-run` 预检与 `--list-eligible` 盘点无需授权。
## 客户可读说明
### 这个技能可以做什么
| 客户想要 | 技能会做 | 客户能看到 |
|---|---|---|
| 看哪些技能能上架 | 扫全仓,按 hard 依赖筛选 | 逐技能的可否上架与原因 |
| 上架某个技能到 SkillHub | 打包 → 叠加平台字段 → `--dry-run` 预检 → 交客户提交 | 暂存路径、预检结果、待执行命令 |
| 发到小红书 Red Skill | 打包并给出上传指引 | 暂存路径与上传入口说明 |
| 更新已上架的技能 | 保持 slug 不变重新打包,提示填写变更说明 | 版本对比与 changelog 建议 |
| 上架前检查技能是否就绪 | 打包并对暂存产物跑 R1-R6 就绪门禁 | 逐项通过/警告/硬缺口报告,硬缺口拒绝打包 |
### 客户如何使用
```bash
# 1. 看这个仓哪些技能可以上架
python3 scripts/stage_for_market.py --repo-dir <域仓路径> --list-eligible
# 2. 打包某一个(不会上传;按渠道过滤文件)
python3 scripts/stage_for_market.py --repo-dir <域仓路径> \
--skill <技能名> --out <暂存目录> --channel skillhub|redskill \
--display-name "<中文展示名>"
# 3. 发版前咨询:对工作树跑一遍就绪门禁,不留产物(见「上架就绪门禁」)
python3 scripts/stage_for_market.py --repo-dir <域仓路径> \
--skill <技能名> --out <暂存目录> --allow-unreleased --check-only
```
**打包内容直接从 `origin/main` 导出**,不读工作副本——本地检出在哪个分支都不影响
结果,也就不会因为有人切走分支而误打包未发布内容(多 AI 共用检出时这是常态)。
`main` 上没有该技能、或 main 版本带 `-SNAPSHOT`,一律拒绝打包。
`--channel redskill` 时 **`--display-name` 是必填**,缺省直接拒跑,原因见
[展示名与平台主键](#展示名与平台主键必填)。
打包后由**客户本人**执行投递命令——见下方两个渠道。
### 依赖与安装
| 依赖 | 类型 | 缺失时怎么处理 |
|---|---|---|
| Python 3 | 强依赖 | 安装后重试 |
| `skillhub` CLI | SkillHub 渠道 | 见下方安