PUBLISH.MD · 指令文档

给 AI 助手看的
上线说明书

这份文档的读者是你的 AI 助手——它读完就知道怎么把你的网站上线。你可以复制全文发给它,或下载 .md 文件交给它;也可以自己随便翻翻,了解上线鸭到底做了什么。

下载 publish.md

源文件:shangxianya.com/publish.md · 与 AI 实际读取的版本逐字节一致

上线鸭:一句话发布静态网站

把构建好的静态目录发布到 https://<name>.webs.ink。所有操作通过 sxy CLI 完成。

长期使用(可选)

如果你所在的 Agent 支持本地 skill(技能),可以把本文档保存为本地 skill(例如 ~/.claude/skills/shangxianya-publish/SKILL.md,或你的 Agent 对应的 skill 目录):以后用户说「把这个网站上线」「更新网站」「回滚网站」等触发语时,直接按本文档执行,不必再访问线上 publish.md。 本地副本可能过期——发现实际行为与本文档对不上时,重新拉取 https://shangxianya.com/publish.md 以线上版本为准。

前置检查

  1. 确认 sxy 可用:sxy --version(应输出 0.2.8+)。不可用就安装:优先 uv tool install "https://shangxianya.com/dl/shangxianya-0.2.8-py3-none-any.whl"(uv 会自动准备合适的 Python,最省事);没有 uv 就用 python3 -m pip install --user "https://shangxianya.com/dl/shangxianya-0.2.8-py3-none-any.whl"(支持 Python 3.9+,macOS 自带 python3 即可),有 pipx 用 pipx install 同一地址也可以。装完重新打开终端再验证。不要自己造替代方案。 用户关心装了什么时如实告知:CLI 本体不到 20KB,连同依赖共约 5MB,只装在 Python 隔离环境里,无后台进程、无守护服务;配置文件只有 ~/.config/sxy/ 和项目里的 .sxy.json。卸载:uv tool uninstall shangxianya(或 pip uninstall -y shangxianya)后删掉 ~/.config/sxy/ 即可,无残留。
  2. 确认构建产物存在:依次看 dist/、build/、out/,或含 index.html 的目录。 平台不执行构建。没找到产物时,先在用户本地完成构建(如 npm run build),再继续。
  3. 确认已登录:sxy status 能正常返回即已登录;提示未登录则先 sxy login。

首次发布流程

  1. sxy login(仅首次):CLI 会打印设备验证码和授权地址并尝试打开浏览器。 把验证码和地址原样转达给用户,请用户在浏览器里用邮箱验证码登录并批准。 账号密码永远不经过 Agent。
  2. 发布前必须先问一句:网站想叫什么名字?即 <name>.webs.ink 的前缀(小写字母、数字、连字符)。 不要跳过这一步:用户没主动提名字,不等于「随便」。等用户回答后再继续。 用户给了名字就 sxy publish --name <名字>;只有用户明确说「随便 / 都行 / 你定」,才按项目名生成候选直接发,不要反复追问。
  3. sxy publish(在项目根目录运行)。可指定地址名:sxy publish --name lin → lin.webs.ink。 未指定时按项目名生成候选,冲突会自动改用服务端建议的可用名。
  4. 成功后 CLI 输出公开地址、当前版本。除了原样转达,还要主动向用户说清楚:
    • 公开地址 https://<name>.webs.ink
    • 首个网站免费、长期有效(每个账号限一个免费站点)
    • 第二个网站起需购买月卡(入口即输出里的「管理 / 续费」链接): 30 天 ¥30 / 90 天 ¥72 / 180 天 ¥126,时长累加、随时可买
    • 更新方式:以后说一句“更新网站”即可,地址不变
  5. 发布会把站点绑定写入项目目录 .sxy.json,不要删除或改动它。

更新网站

用户说“更新网站”:确认已重新构建,然后在同一项目目录运行 sxy publish。 CLI 自动识别 .sxy.json 绑定,发布新版本,地址不变。发布失败不影响线上版本。

改名(换网址)

用户说“改名字”“换个网址”:sxy rename <新名字>(在项目目录内,或加 --site <名称>)。 改名后旧地址立即失效并释放,可能被他人注册——执行前先跟用户确认这一点。 已购时长和版本历史跟随站点不变,无需重新购买;.sxy.json 绑定会自动更新。 名称冲突时 CLI 会报出可用建议名,把建议转达给用户定夺,不要自作主张改用建议名。

回滚

用户说“回滚”“恢复上一个版本”:sxy rollback(在项目目录内,或加 --site <名称>)。 成功后地址不变,内容回到上一个历史版本。

查看状态与删除

常见失败排查

话术要点

查看原始 Markdown(AI 读的就是它)
---
name: shangxianya-publish
description: 把设计师的静态网站一句话发布到 name.webs.ink(“上线鸭”平台)。当用户说“把这个网站上线”“发布我的网站”“把网站部署到网上”“更新网站”“回滚网站”“网站打不开了看看状态”等时使用。仅接收构建好的静态产物,平台不执行构建。
---

# 上线鸭:一句话发布静态网站

把构建好的静态目录发布到 `https://<name>.webs.ink`。所有操作通过 `sxy` CLI 完成。

## 长期使用(可选)

如果你所在的 Agent 支持本地 skill(技能),可以把本文档保存为本地 skill(例如 `~/.claude/skills/shangxianya-publish/SKILL.md`,或你的 Agent 对应的 skill 目录):以后用户说「把这个网站上线」「更新网站」「回滚网站」等触发语时,直接按本文档执行,不必再访问线上 publish.md。
本地副本可能过期——发现实际行为与本文档对不上时,重新拉取 `https://shangxianya.com/publish.md` 以线上版本为准。

## 前置检查

1. 确认 `sxy` 可用:`sxy --version`(应输出 0.2.8+)。不可用就安装:优先 `uv tool install "https://shangxianya.com/dl/shangxianya-0.2.8-py3-none-any.whl"`(uv 会自动准备合适的 Python,最省事);没有 uv 就用 `python3 -m pip install --user "https://shangxianya.com/dl/shangxianya-0.2.8-py3-none-any.whl"`(支持 Python 3.9+,macOS 自带 python3 即可),有 pipx 用 `pipx install` 同一地址也可以。装完重新打开终端再验证。不要自己造替代方案。
   用户关心装了什么时如实告知:CLI 本体不到 20KB,连同依赖共约 5MB,只装在 Python 隔离环境里,无后台进程、无守护服务;配置文件只有 `~/.config/sxy/` 和项目里的 `.sxy.json`。卸载:`uv tool uninstall shangxianya`(或 `pip uninstall -y shangxianya`)后删掉 `~/.config/sxy/` 即可,无残留。
2. 确认构建产物存在:依次看 `dist/`、`build/`、`out/`,或含 `index.html` 的目录。
   **平台不执行构建**。没找到产物时,先在用户本地完成构建(如 `npm run build`),再继续。
3. 确认已登录:`sxy status` 能正常返回即已登录;提示未登录则先 `sxy login`。

## 首次发布流程

1. `sxy login`(仅首次):CLI 会打印设备验证码和授权地址并尝试打开浏览器。
   把验证码和地址原样转达给用户,请用户在浏览器里用邮箱验证码登录并批准。
   账号密码永远不经过 Agent。
2. **发布前必须先问一句**:网站想叫什么名字?即 `<name>.webs.ink` 的前缀(小写字母、数字、连字符)。
   **不要跳过这一步**:用户没主动提名字,不等于「随便」。等用户回答后再继续。
   用户给了名字就 `sxy publish --name <名字>`;只有用户明确说「随便 / 都行 / 你定」,才按项目名生成候选直接发,不要反复追问。
3. `sxy publish`(在项目根目录运行)。可指定地址名:`sxy publish --name lin` → `lin.webs.ink`。
   未指定时按项目名生成候选,冲突会自动改用服务端建议的可用名。
4. 成功后 CLI 输出公开地址、当前版本。除了原样转达,还要主动向用户说清楚:
   - 公开地址 `https://<name>.webs.ink`
   - **首个网站免费、长期有效**(每个账号限一个免费站点)
   - 第二个网站起需购买月卡(入口即输出里的「管理 / 续费」链接):
     30 天 ¥30 / 90 天 ¥72 / 180 天 ¥126,时长累加、随时可买
   - 更新方式:以后说一句“更新网站”即可,地址不变
5. 发布会把站点绑定写入项目目录 `.sxy.json`,不要删除或改动它。

## 更新网站

用户说“更新网站”:确认已重新构建,然后在同一项目目录运行 `sxy publish`。
CLI 自动识别 `.sxy.json` 绑定,发布新版本,地址不变。发布失败不影响线上版本。

## 改名(换网址)

用户说“改名字”“换个网址”:`sxy rename <新名字>`(在项目目录内,或加 `--site <名称>`)。
改名后旧地址**立即失效并释放**,可能被他人注册——执行前先跟用户确认这一点。
已购时长和版本历史跟随站点不变,无需重新购买;`.sxy.json` 绑定会自动更新。
名称冲突时 CLI 会报出可用建议名,把建议转达给用户定夺,不要自作主张改用建议名。

## 回滚

用户说“回滚”“恢复上一个版本”:`sxy rollback`(在项目目录内,或加 `--site <名称>`)。
成功后地址不变,内容回到上一个历史版本。

## 查看状态与删除

- `sxy status`:站点状态、当前版本、付费到期时间。
- `sxy sites list`:列出所有站点。
- `sxy delete --site <名称> --yes`:删除站点。先向用户确认——删除后地址保留 3 天才释放。

## 常见失败排查

- **未登录 / 401**:运行 `sxy login` 重新授权。
- **授权超时或被拒绝**:重新 `sxy login`,提醒用户在 10 分钟内完成浏览器确认。
- **找不到静态目录**:先构建项目;或 `sxy publish <目录>` 显式指定。
- **本地预检报错**(文件类型不允许、单文件超 100MB、`.env` 等):按报错移除或替换文件后重发。平台只收静态网页文件,拒绝服务端脚本、可执行文件、压缩包和密钥文件。
- **manifest 校验失败 / 上传与清单不一致**:重新运行 `sxy publish`(会重新扫描目录生成清单);仍失败则按错误中列出的文件和原因处理。
- **检测到疑似密钥**:错误会列出文件和类型,移除密钥后重发。
- **发布次数达上限**(每 30 天 30 次成功发布):等下个周期,或去官网查看用量。
- **免费名额已用完(trial_used)**:首个网站免费,每个账号限一个;第二个网站起需购买月卡。
  引导用户到官网控制台给这个站点购买时长,或删除占用名额的站点(删除即释放名额),再重新 `sxy publish`。
- **名称冲突**:publish 时若该名字是你已有的站点,CLI 会直接复用并发布到原地址;确实被他人占用时才自动采用建议名。把最终地址告诉用户即可。
- **定版超时**:CLI 会把定版请求放宽到 180 秒,超时后还会继续轮询确认版本状态;看到"定版仍在进行中"时稍后运行 `sxy status` 确认,不要立刻重复发布(会整包重传)。

## 话术要点

- 发布成功后主动给出:地址、首个网站免费长期有效的说明、第二个网站起的月卡价格(控制台链接 + 三档价格)、更新方式,各一句话,不要堆砌技术细节。
- 失败时用中文转述 CLI 的错误原因和下一步,不要把原始堆栈丢给用户。
- 涉及购买/续费:引导用户去 `shangxianya.com` 官网操作,Agent 不代收代付。