Voobase 活动创作
本包自包含创作示例、Application DSL 契约、从编辑器源码生成的校验器、预览回放脚本和导入工具。没有编辑器源码、MCP、另一份 Skill 或 Voobase 登录时,也要先完成可导入的作品。所有相对路径以本 SKILL.md 所在目录为准;不要去用户目录寻找旧作品猜测格式。活动编辑器默认地址是 https://a1-cngmcbo27efcw.voobase.cn/。
独立创作并导入
含本地素材的作品: application.assets[].src 使用相对工程 JSON 所在目录的文件路径,例如 ./src/images/cover.png,并把实际文件一起交付。运行 dsl-check.mjs、visual-check.mjs 和交互回放检查后,执行 node "<本 Skill 目录>/scripts/pack-project.mjs" "/绝对路径/作品名.epub360.json" "/绝对路径/作品名.epub360.zip",再将 ZIP 交给第 4 步的 open-editor.mjs。新版编辑器会直接读取该 ZIP 并打开作品,无需手动点文件导入。交付包不能使用 blob:、epub360-asset:// 或本机绝对路径。作品从编辑器“导出到本地”或“文件 → 导出 AI 交付包”下载时,ZIP 内含 application.epub360.json、src/manifest.json 和本地素材文件;纯 JSON 只有在没有本地文件引用时才能单独打开。详见 创作细节。
- 读取 完整示例工程,根据用户需求制作新作品;需要组件工厂时用 scaffold.build.mjs,需要准确字段、组件或交互格式时查 Application 创作协议。工程保存为绝对路径下的
作品名.epub360.json,结构为{ "projectFormatVersion": 10, "savedAt": "ISO 时间", "application": { ... } }。application需含schemaVersion: "2.0"、metadata、global、runtime、assets和graph。每个作品的application.global必须保留只读的activityDataTable,它是当前作品专属的活动事件表,用于 PV、UV、分享率、页面访问、启动、完成、提交和运行错误;它不属于businessTables,不得删除、改名或当作普通提交表。活动基本信息写入application.global.activityConfigTable.values,已知值填入活动名称、主题、简介、封面素材 ID、开始和结束时间、主办方、承办方、地点、参与对象、联系方式与活动规则;未知值留空,不能把示例文案当真实配置。活动名称与global.projectName、metadata.name保持一致。每个页面的page要有id/name/note/color/skill/kind,runtime.entryPageId必须指向现有页面;组件版本为1.1。page.name用 16 字内的节点短标题,page.note用 18 字内的短说明;题目和每页可见标题写在页面内的 text 组件,不能用完整题干当节点标题。不要只交页面说明或静态 HTML。 - 用 Node.js 20+ 运行下列命令。
dsl-check内置打包时编辑器源码的导入、交付 DSL 和预览 Runtime 校验,不依赖仓库源码;visual-check检查每页标题、节点短文案、文字框高度、明显重叠和边界,并生成全部页面的静态预览。任一命令失败就修正工程,再运行。静态 HTML 不执行事件;线上实际导入和预览仍按第 4、5 步验收。
bash
node "<本 Skill 目录>/scripts/dsl-check.mjs" "/绝对路径/作品名.epub360.json"
node "<本 Skill 目录>/scripts/visual-check.mjs" "/绝对路径/作品名.epub360.json" "/绝对路径/作品预览.html" --all-pages
- 作品含交互事件时,必须用 示例回放 的格式为主要成功和失败路径写
作品名.smoke.json,运行node "<本 Skill 目录>/scripts/smoke-runtime.mjs" "/绝对路径/作品名.epub360.json" --scenario "/绝对路径/作品名.smoke.json"。不带--scenario会返回“交互未验证”,退出码非零。该脚本随包内置编辑器 Runtime,能检查事件分发与回执;模拟服务成功不代表线上写入。
成功提交路径还会检查业务表必填字段在调用时确有值,避免本地模拟能记录、发布后却被后端拒绝。 - 运行
node "<本 Skill 目录>/scripts/open-editor.mjs" "/绝对路径/作品名.epub360.json" --import-only --link-file "/绝对路径/打开链接.txt";带本地素材时把输入路径换成第 1 步生成的 ZIP。新版编辑器使用三分钟内有效的一次性#voobase-open=链接,从同一台电脑的本机文件桥接读取 JSON/ZIP,自动校验并打开作品;脚本默认拉起系统浏览器。作品载入完成后,编辑器会自动进入“预览发布”并生成 24 小时有效的草稿预览链接和二维码,随后可直接复制链接或扫码真机预览,不需要再手动点击“生成草稿预览”。Agent 接管浏览器时加--no-open,立即使用脚本输出或保存的完整链接。浏览器与 Skill 必须在同一台电脑;浏览器若请求本地网络权限,应允许此站点读取本机桥接。--import-only只跳过正式发布检查,仍会启动草稿真机预览所需的本机连接助手;首次生成草稿二维码时需要 platform CLI 已登录。准备发布时去掉--import-only,脚本会要求本机连接助手可用且版本匹配,否则退出码为 1。尚未部署直开能力的编辑器会对无本地素材 JSON 自动回退到旧#voobase-import=链接,ZIP 则明确报错并提示使用文件菜单。版本指纹差异仍需在编辑器中核对作品名称、页面数和入口页。只有 契约版本清单 的sourceBuildMatchesOnline为true时,才按当前简易编辑器“活动页面 → 活动规则 → 预览发布”验收;为false时按实际打开的编辑器界面验收并如实报告版本差异。脚本成功只代表已请求打开,仍要检查浏览器中的实际载入结果。 - 链接导入失败时,读取编辑器报错并修正同一工程;也可在专业编辑器选择“文件 → 导入工程(JSON / ZIP)”导入该 JSON 或 ZIP,再核对结果。简易编辑器顶部不提供文件导入入口。若编辑器停在加载页,先用无旧站点数据的浏览器配置打开原完整链接;保留用户原浏览器中的本地作品,不直接清空站点数据。新版编辑器会优先处理导入链接并跳过损坏旧稿。导入成功后在编辑器打开预览,实际检查关键页面和交互。
若编辑器 MCP 已连接,先调用 studio_status、studio_list_tools 和编辑器的“读取创作 Skill”,再按实时工具 Schema 创作并提交;只有返回 committed: true / imported: true 才算编辑器写入成功。之后重新读取最终 Application DSL,仍按上面的交付校验和预览验收。MCP 是可选路径,缺失时直接使用独立创作流程。
编辑器内的交接位置
- 线上简易编辑器第三步可生成草稿二维码,链接打开活动编辑器自己的访问域名,从
editor_draft_previews读取加密作品快照。修改位置、文案或规则会自动同步,手机每约 2 秒检查一次;草稿链接 24 小时有效,点击“停止共享”即失效。此过程不会正式发布作品。手机端运行作品时,Data Form 提交只生成本机模拟记录并保存在该手机浏览器;不会写入编辑器 App 或作品目标 App 的业务数据表,也不会同步回电脑。该表只在作品正式发布/更新到目标 App 时创建或更新。草稿预览所需的线上数据仅为加密 DSL 快照,不要为预览给编辑器 App 添加某个活动的 Data Form schema。首次同步本地素材可能较慢,后续布局修改复用已上传素材。电脑端需运行 v20 本机连接助手且 platform CLI 已登录;本 Skill 的open-editor.mjs会尝试自动启动助手。 - 简易编辑器按“活动页面 → 活动规则 → 预览发布”操作。第一页逐页修改可见文字、输入占位文字和独立图片/GIF,并可进入当前页高级编辑;第二页修改活动基本信息、分享卡片、带
schema.quickEdit的规则变量和 AI 容器公开配置;第三页预览作品,查看访问方式、状态、链接和统计入口。页面始终允许匿名访问;微信与 Voobase 登录可同时勾选,左侧当前作品预览会模拟授权。勾选微信只保存作品意图;目标应用的 User Store 必须在 Voobase 平台配置微信 Provider,发布前会检查wechat_configured和wechat_oauth。授权后可使用生成的用户 ID、身份 ID、昵称、头像和 Provider 变量;匿名访问时这些变量为空。制作时把用户最可能修改的文案、图片和规则暴露在相应位置;AI 容器内写死的内容不会自动出现在简易编辑器。具体映射见 创作细节。 - 专业编辑器的“全局资产”包含活动设置、素材管理、全局样式、全局变量、事件管理、授权管理、业务数据表和活动数据。活动设置与简易编辑器第二步共享
activityConfigTable;活动数据表是作品专属、只读的埋点来源,业务提交记录在业务数据表。各入口和可改范围见 创作细节。 - 素材管理支持查看、搜索、重命名、同类文件替换、移除及显式批量云端同步。替换时保留稳定
assetId和组件引用;移除会解除当前作品引用,不删除既有云端素材。创作交付文件、素材引用和 ZIP 导入规则见 创作细节。
当前作品契约
- 页面、变量、触发器、组件、业务表、作品级活动数据表和连线都在同一
application中。组件的pageId、bindings、valueBinding放在组件根字段,外观属性放props;事件节点为kind: "interaction"且含 Runtime v2 的trigger/actions。每个作品必须有application.global.activityDataTable,这张表只读、按作品 ID 隔离。编辑器发布时为它生成独立 Voobase Data Form,播放器写入访问、页面进入、启动和表单结果事件;活动总览从该表计算 PV、UV 等指标。全局资产的活动数据模块提供global.activity-analyticsAI Skill 清单,AI 只能读取该作品的活动表和汇总,区分本地模拟与线上真实记录,不把活动事件混入业务提交表。分享率仅在作品实际发出分享事件时有值,不能把 0 当成已验证的分享追踪。表单数据另定义在application.global.businessTables,提交事件引用稳定tableId并启用global.skillCapabilityIds["voobase-light-app"]的data-form。具体写法见 创作细节。 - 本地预览中的活动事件和表单记录是当前作品、当前浏览器的模拟数据。新作品不猜测或填写
global.voobaseAppId;发布时编辑器才关联实际 App。授权、素材同步、正式发布和真实活动/表单数据验收见 端到端交付。 - 本地模拟提交只保存收到的字段值,不执行发布后的 Data Form schema 校验。正式提交会按已迁移的业务表校验;若某个必填字段由作品计算得出,应在提交前给对应变量赋值,不能依赖空默认值。
open-editor.mjs默认只对 HTTPS 编辑器启动本机 Voobase CLI 连接助手;本地 HTTP 编辑器可打开作品和预览。需要在本地开发地址检查连接时,以助手实际允许的来源和版本为准,不假定任意 localhost 端口都可用。Agent 和浏览器不在同一台电脑时,本机桥接和连接助手都无法替用户电脑读取文件或连接 CLI;仍可生成工程文件交付到用户电脑。- 发布前运行
node "<本 Skill 目录>/scripts/doctor.mjs"确认本机连接助手、CLI 登录态和线上编辑器版本。要保持助手在线,在用户电脑的终端运行node "<本 Skill 目录>/scripts/voobase-cli-connector.mjs" --keep-alive。若“整理作品”阶段出现作品文件路径错误,停止并重启本包的助手,回编辑器重新检查连接后重试;这不代表 DSL 或作品内容损坏。若仍失败,记录完整错误文本。 - 导出后可解压作品包并运行
node "<本 Skill 目录>/scripts/verify-provenance.mjs" <作品目录>核验本地指纹。核验结果用于留存和提交人工审核;本 Skill 不自动报警、提交投诉或判断侵权责任。 - 契约版本清单 记录契约修订号、校验器完整性和线上编辑器构建指纹,不暴露内部 bundle 路径、源码文件名或仓库信息。
dsl-check会打印契约版本;node "<本 Skill 目录>/scripts/check-editor-version.mjs"可单独核对线上版本。编辑器升级后由维护者按 契约维护说明 重新打包;下载包不含编辑器源码,不能自行再生校验器。
汇报
给出工程文件和静态预览的绝对路径,分别说明编辑器同源校验、事件回放、浏览器实际导入、编辑器预览、Voobase Preview、正式发布与真实表单写入的状态。只有实际完成的步骤才标为成功。若用户要上线,继续按 端到端交付 操作。