mcpField
M
myvibe-publish

myvibe-publish

github.com/arcblock云与 DevOps9117 次安装33 周前更新
代码仓库

关于 myvibe-publish

myvibe-publish 是用于将 HTML 文件、ZIP 压缩包、目录或 URL 发布到 MyVibe 的技能。它涵盖项目检查、元数据准备、发布确认和部署,也支持更新现有 Vibe。

主要功能

  1. 01发布文件、ZIP 或目录
  2. 02从 URL 导入并发布
  3. 03设置可见性与项目元数据
  4. 04按 DID 更新现有 Vibe
  5. 05为发布生成截图

适用场景

  1. 01将构建好的 HTML 项目部署到 MyVibe
  2. 02从 ZIP 或目录发布网站
  3. 03从 URL 导入网页并发布
  4. 04更新已发布的 Vibe

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/arcblock/myvibe-skills --skill myvibe-publish

安装后在 Claude Code 中输入/myvibe-publish确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
package-lock.json
package.json
publish.mjs
save-token.mjs
scripts/utils/
auth.mjs
blocklet-info.mjs
constants.mjs
fetch-tags.mjs
generate-screenshot.mjs
history.mjs
http.mjs
store.mjs
upload-image.mjs
upload.mjs
zip.mjs

详细介绍

MyVibe 发布

将 Web 内容(HTML 文件、ZIP 存档或目录)发布到 MyVibe。

前提条件

  • Node.js 18 或更高版本
  • 此技能中的所有脚本执行都需要网络访问权限。始终使用 sandbox_permissions=require_escalated 运行 Bash 命令,以确保启用网络权限。
  • 部署和截图生成可能需要几分钟。发布命令的超时时间请设为 10 分钟(600000ms)。

用法

/myvibe:myvibe-publish --file ./dist.zip      # Publish ZIP
/myvibe:myvibe-publish --file ./index.html    # Publish HTML
/myvibe:myvibe-publish --dir ./dist           # Publish directory
/myvibe:myvibe-publish --url https://example.com/app  # Import from URL
/myvibe:myvibe-publish --dir ./dist --new     # Force new Vibe
/myvibe:myvibe-publish --dir ./dist --did z2qaXXX    # Update specific Vibe

选项

选项别名描述
--file <path>-fHTML 文件或 ZIP 存档的路径
--dir <path>-d要压缩并发布的目录
--url <url>-u要导入并发布的 URL
--hub <url>-hMyVibe URL(默认值: https://www.myvibe.so/)
--title <title>-t项目标题
--desc <desc>项目描述
--visibility <vis>-v可见性:public 或 private(默认值:public)
--did <did>用于版本更新的 Vibe DID(覆盖自动检测结果)
--new强制创建新的 Vibe,忽略发布历史

预授权凭据

当用户在消息中提供访问凭据(以 blocklet- 开头的字符串)时,请在发布前保存该凭据:

node {skill_path}/scripts/save-token.mjs --token "<credential>" --hub <hub-url>

--hub 参数用于指定凭据所属的 MyVibe hub。始终显式传入 --hub,以匹配发布目标 hub。如果用户指定了自定义 hub(通过发布命令或消息中的 --hub),请在此处使用相同的 URL。不要依赖默认值。

这会将凭据保存到 ~/.myvibe/,以便后续所有发布操作自动使用。不会触发浏览器身份验证。

如果用户的消息中包含凭据,请务必在此步骤中提取并保存,即使已有凭据也不例外。

工作流概览

  1. 检测项目类型 → 如果无需构建,则在后台开始生成截图
  2. 构建(如需要)→ 然后在后台开始生成截图
  3. 元数据分析 → 提取标题、描述和标签
  4. 确认发布 → 显示元数据并征求用户确认
  5. 执行发布 → 脚本自动读取截图结果
  6. 返回结果 → 显示发布 URL

首次调用工具时——并行检查依赖项并收集信息:

  • Bash:test -d {skill_path}/scripts/node_modules || npm install --prefix {skill_path}/scripts
  • Read:源文件或目录中的主要文件
  • Bash:git remote get-url origin 2>/dev/null || echo "Not a git repo"

确认依赖项后,获取标签:

  • Bash:node {skill_path}/scripts/utils/fetch-tags.mjs --hub {hub}

步骤 1:检测项目类型

检查项项目类型下一步
使用 HTML/ZIP 的 --file单文件→ 开始截图,然后执行步骤 3
存在包含 index.html 的 dist/、build/ 或 out/已预构建→ 执行步骤 2(确认是否重新构建)
存在带有构建脚本的 package.json,但没有输出目录可构建→ 执行步骤 2(先构建)
存在多个 package.json 或工作区配置Monorepo→ 执行步骤 2(选择应用)
根目录下存在 index.html,但没有 package.json静态项目→ 开始截图,然后执行步骤 3

对非构建项目开始截图(run_in_background: true):

对于目录源(--dir):

node {skill_path}/scripts/utils/generate-screenshot.mjs --dir {publish_target} --hub {hub}

对于单文件源(--file):

node {skill_path}/scripts/utils/generate-screenshot.mjs --file {publish_target} --hub {hub}

重要:当源是单个 HTML 文件时使用 --file,当源是目录时使用 --dir。标志必须与发布配置中的 source.type 一致,这样两个脚本才能为截图结果文件计算出相同的哈希值。

启动截图后台任务后,使用 TaskOutput(设置 block: false)检查任务输出,然后再继续。如果输出中包含“agent-browser is not installed”或“Chromium is not installed”:

  1. 安装 agent-browser:npm install -g agent-browser && agent-browser install
  2. 重新运行截图命令(与上方相同的命令,设置 run_in_background: true)
  3. 再次使用 TaskOutput(block: false)检查,以确认任务正在运行

这样可以确保截图在后台成功完成,同时你继续分析元数据。


步骤 2:构建(如有需要)

根据锁文件检测包管理器,并从 package.json 脚本中检测构建命令。

使用 AskUserQuestion 确认:

  • 已预构建:“重新构建还是使用现有输出?”
  • 可构建:“发布前是否构建?”
  • Monorepo:“要发布哪个应用?”

构建完成后,在后台开始截图(与步骤 1 中的检查相同:使用 TaskOutput 并设置 block: false,确认 agent-browser 可用;如有需要则安装,然后重试),接着继续执行步骤 3。


步骤 3:元数据分析

生成标题

MyVibe 根据标题生成页面 URL(例如,“Interactive Solar System” → interactive-solar-system),因此标题必须有意义且描述性明确。

步骤 1 - 提取原始标题候选项:

  • <title> 标签内容
  • og:title 元数据内容
  • package.json 的 name 字段
  • 第一个 <h1> 的内容

步骤 2 - 评估并生成: 如果提取的标题过于通用或没有意义(例如,“Document”、“Untitled”、“index”、“app”、“React App”、“Vite App”、单个字符,或类似软件包名称的“my-app”),请根据以下内容生成更好的标题:

  • 项目的实际功能(根据源代码、README、对话上下文)
  • 页面的视觉内容和用途

标题要求:

  • 2–6 个词,简洁且描述清晰
  • 描述内容/用途,而非技术(例如,“Interactive Solar System”,而不是“Three.js Demo”)
  • 不使用“app”、“demo”、“project”、“page”等填充词,除非它们对表达含义至关重要
  • 使用英文单词,并采用正确的大小写格式(标题式大小写)
  • 如果用户明确提供了 --title,始终原样使用
生成描述(50–150 个词,采用故事叙述风格)

涵盖:原因(动机)→ 内容(功能)→ 历程(可选)

来源:对话历史、README.md、源代码、package.json、git log

指南:

  • 语气自然、对话感强
  • 注重价值和故事,而非技术规格
  • 避免使用“A web app built with React”这类泛泛的描述
提取 githubRepo

从 git 远程地址或 package.json 的 repository 字段中提取,并将 SSH 格式转换为 HTTPS 格式。

匹配标签

获取标签:node {skill_path}/scripts/utils/fetch-tags.mjs --hub {hub}

标签类型匹配方法
techStackTags将 package.json 依赖项与标签 slug 匹配
platformTags根据对话上下文匹配(Claude Code、Cursor 等)
modelTags根据对话上下文匹配(Claude 3.5 Sonnet、GPT-4 等)
categoryTags根据项目推断(游戏库 → 游戏,图表 → 可视化)

第 4 步:确认发布

显示元数据并使用 AskUserQuestion:

Publishing to MyVibe:
──────────────────────
Title: [value]

Description:
[50-150 word story]

GitHub: [URL or "Not detected"]
Cover Image: [Will be included if ready]

Tags: Tech Stack: [...] | Platform: [...] | Category: [...] | Model: [...]

选项:“发布” / “编辑详情”


第 5 步:执行发布

发布脚本会自动读取截图结果文件。直接执行发布:

通过 stdin 传递配置:

node {skill_path}/scripts/publish.mjs --config-stdin <<'EOF'
{
  "source": { "type": "dir", "path": "./dist", "did": "z2qaXXXX" },
  "hub": "https://www.myvibe.so",
  "metadata": {
    "title": "My App",
    "description": "Story description here",
    "visibility": "public",
    "githubRepo": "https://github.com/user/repo",
    "platformTags": [1, 2],
    "techStackTags": [3, 4],
    "categoryTags": [5],
    "modelTags": [6]
  }
}
EOF
  • did 可选——用于明确更新版本
  • coverImage 自动从 /tmp/myvibe-screenshot-{hash}.json 读取
  • 发布后会清理截图结果文件
操作失败后重试

如果发布脚本输出包含 retryHint: skip-upload 或显示“Upload was successful. DID: ...”,请勿重新运行完整的发布命令。应改用输出中的 DID 和 skipUpload,仅重试发布操作:

node {skill_path}/scripts/publish.mjs --config-stdin <<'EOF'
{
  "source": { "type": "dir", "path": "./dist", "skipUpload": true, "did": "<DID from error output>" },
  "hub": "https://www.myvibe.so",
  "metadata": {
    "title": "My App",
    "description": "Story description here",
    "visibility": "public"
  }
}
EOF

这样会复用已上传的内容,只重试发布操作,避免产生重复记录。


第 6 步:返回结果

发布脚本运行完成后,检查脚本输出是否包含以下消息:

成功消息

回复中始终包含 Vibe URL 和探索提示词:

Published successfully!
🔗 [URL]

🌐 Discover more creative Vibes → {hub}/explore

探索 URL 使用相同的 {hub} 基础地址(默认为 https://www.myvibe.so)。如果用户指定了自定义 --hub,探索链接也应使用该 hub。

升级提示(重要)

更新现有 Vibe 且未启用版本历史时,脚本会打印升级提示:

📦 Previous version overwritten. Want to keep version history?
   Upgrade to Creator → {hub}/pricing

如果脚本输出包含此提示,你必须在回复用户时包含这些升级信息。 这有助于免费套餐用户了解版本历史功能。


错误处理

错误操作
缺少依赖项在 scripts 目录中运行 npm install
401/403 身份验证错误Token 已自动清除,重新运行以进行授权
构建失败分析错误并提供修复方案,或按原样发布源代码
截图失败跳过 coverImage,不带封面继续发布
缺少 agent-browser运行 npm install -g agent-browser && agent-browser install
脚本执行失败(网络/沙盒)检查是否已启用网络权限。添加 sandbox_permissions=require_escalated 后重试
发布操作失败(上传成功)使用错误输出中的 DID 和 skipUpload: true,仅重试操作
云端 Agent 中身份验证超时请用户从 https://www.myvibe.so/openclaw 获取发布提示
私密模式仅适用于 Creator 和 Studio 用户参见下文“私密模式错误处理”
私密模式错误处理

使用 visibility: private 发布时,如果失败并提示“Private mode is only available for Creator and Studio users”,请使用 AskUserQuestion 让用户选择:

问题:“私密发布需要 Creator 或 Studio 订阅。你想如何继续?”

选项标签描述
1公开发布你的 Vibe 将对所有人可见。升级后可以更改此设置。
2查看升级选项打开定价页面,查看支持私密发布的订阅方案。

根据选择执行操作:

  • 选项 1:使用 visibility: "public" 重新运行发布,并告知用户 Vibe 现已公开
  • 选项 2:显示定价 URL {hub}/pricing 并停止发布流程

备注

  • 始终分析内容,拟定有意义的标题/描述——切勿使用目录名称
  • 发布前与用户确认
  • 默认 hub:https://www.myvibe.so/
  • 每次发布时都从 API 获取最新标签
  • 发布历史记录在 ~/.myvibe/published.yaml 中,用于自动更新版本
  • 使用 --new 可强制创建新的 Vibe,而非更新现有内容

评论

支持 Markdown