用途
community-publish 处理两类根本不同的事情,混用是最常见的错误来源:
- PUBLISH(发布):让东西可被访问——URL 生效,或代码在 GitHub 上。
- LIST(上架):让东西在市场上可被发现/可购买。
发布不会自动上架。publish_preview() 只分配 URL,open_source() 只推送代码,两者都不会让项目在市场上可被发现,必须另行调用 LIST。
主要能力
发布公开 URL
publish_preview(preview_id, slug="", title="", publisher_code_slug="") 把运行中的服务映射到 https://community.iamstarchild.com/{user_id}-{slug}。preview_id 来自 preview(action='serve'),必须 status=running;slug 仅 URL 后缀(小写字母数字与连字符,3-50 字符),会自动加 user_id 前缀。
限制:publish_preview 不创建付费上架;若端点经 x402 收费(返回 402),发布流程不完整,还需走付费上架链。每个用户最多 20 个已发布预览(超出返回 429)。服务必须运行中,容器停止即失效。仅在 Starchild Fly 容器内可用(需要 FLY_MACHINE_ID)。上架可见性默认 is_public=false,发布成功只分配 URL,不使其可被发现。
配套:unpublish_preview(slug) 停止预览容器服务,URL 变为 404,不影响上架状态;list_published_previews() 列出当前所有已发布预览 URL。
开源推送
open_source(project_dir, version_bump="patch", message="") 把项目源码推送到 GitHub 的 community-projects/projects/{user_id}/{slug}/。version_bump 取 patch | minor | major | none;message 为描述本次版本变更的 commit 信息。这仅是发布动作,不上架任何东西。
配套:fork(source, dest_dir=None) 安装他人开源项目;list_open_source(type=None, tag=None, user=None, q=None) 浏览目录;get_open_source(source) 获取单个项目元数据;remove_open_source(slug) 删除(仅所有者);validate_open_source(project_dir) 发布前检查。
免费上架
list_in_dashboard(slug, name=None, description="", cover_url=None, tags=None) 让已发布预览在公共广场 https://community.iamstarchild.com/projects 可被发现。requires 先对同一 slug 运行 publish_preview,否则返回 404。幂等,无审核、无定价。cover_url 须位于 storage.googleapis.com、image.thum.io 或 api.microlink.io。配套 unlist_from_dashboard(slug) 软下架(is_public=false,review_status='unlisted',保留统计,URL 仍活);delete_listing(slug) 永久删除上架行与 community_slugs 记录,URL 变 404;get_listing_status(slug) 只读检查。
付费上架
通过 x402 收费(平台网络上的链上 USDC/USDG 结算,默认 Base + Monad + Robinhood + X Layer + Solana,遵循 all 模式)。发布前须通过自动 6 项审核。流程:create_paid_service() → submit_for_review()(必需)→ publish_service()。
每个付费服务有 networks_mode:"all"(默认,接受所有平台主网,新增链自动纳入)或 "custom"(仅接受 supported_networks 中列出的链,非空 CAIP-2 id 列表)。custom 需要非空列表。买方看到 402 accepts 数组,每次支付选一条链。结算 gas 由平台承担。
可见性模型
项目的“公开性”是三个正交开关:URL 访问(publish_preview / unpublish_preview)、广场可发现(list_in_dashboard / unlist_from_dashboard)、市场上架(create_paid_service+publish_service / unpublish_service)。项目可处于任意组合。状态类问题只能以新鲜的 get_listing_status(slug)(免费)或 get_review_status(service_id)(付费)为准,不得从前述动作推断。
项目类型
仅有三种:task(定时 cron/interval 任务,无 HTTP 端口,不适用 publish_preview)、service(长期运行 HTTP 服务,可发布)、script(一次性脚本,不适用发布)。项目位于 output/projects/{slug}/,含 project.yaml、PROJECT.md、.env.example、.gitignore 与 src/。
交叉关联绑定
当同一项目同时有公开 URL 与开源代码时,在 project.yaml 添加 publisher 块声明绑定(code_slug 与 public_slug 均可选,默认 manifest.name)。两侧任意先后发布都会由网关挂起并配对;配对出错时可用 link_to_listing(listing_slug=..., code_slug=...) 手动修复。
限制与说明
上架后的限时免费促销属于 x402 技能,不在本技能范围,也不要与 free_trial_count 混淆。POST /api/services 不再接受 service_type: "free_project"。当意图不明确时,应询问用户是要发布公开 URL、免费上架、付费上架还是开源代码。具体定价、收费规则等未在资料中给出的细节,暂未提供。