如何手动打包 .rowboat-app 并发布到 Rowboat 应用注册表?
2026/9/15 21:25:06 网站建设 项目流程

如何手动打包 .rowboat-app 并发布到 Rowboat 应用注册表?

【免费下载链接】rowboatOpen-source AI coworker, with memory项目地址: https://gitcode.com/GitHub_Trending/rowb/rowboat

如果你的应用代码仓库、构建流水线或 monorepo 需要自己管理,而不是走 Rowboat 应用内的引导式发布(Apps → 应用详情 → Publish,它会自动建仓库、推源码、发 release 并注册),就需要走 publishing-apps.md 中描述的进阶手动路径。这条路径分两段:先把应用打成<name>.rowboat-app打包文件并在 GitHub release 上挂好资产,再向注册表仓库rowboatlabs/apps-registry提交一个单文件 PR 完成注册。注册表的校验 Action 通过并自动合并后,应用就进入 Rowboat 的 Apps → Catalog。

准备条件

  • 一个 GitHub 账号,且对承载应用的仓库有 push 权限(注册表校验会检查 PR 作者对repo有 push 访问权)。
  • 应用目录里已有能构建出浏览器可运行静态文件的构建产物,以及一份合法的 manifestrowboat-app.json
  • 应用的name必须满足:3–64 个字符,形如my-app(小写字母、数字、连字符,即^[a-z0-9]+(-[a-z0-9]+)*$,见 registry-record.schema.json 与 rowboat-app.ts 中的PACKAGE_NAME_RE)。name必须与打包文件名的主干一致,且一旦注册后不能再改。
  • version必须是严格 semver(MAJOR.MINOR.PATCH,不允许 prerelease/build 后缀)。

构建打包前的目录结构

按 publishing-apps.md 的定义,.rowboat-app是一个改名的 ZIP,归档根目录(相对路径、正斜杠)下需要:

rowboat-app.json # manifest(必需) dist/** # 浏览器可运行的静态文件(必需,且 dist/<entry> 必须存在) agents/<file>.yaml # 只包含 manifest.agents 中列出的文件 defaults/** # 可选的初始数据,首次安装时复制到 data/

打包时必须遵守的规则:

  • 不得包含src/package.jsonnode_modules/data/、点文件(dotfiles)以及.rowboat-*.json
  • 安装器会强制大小限制:压缩后 100 MB、解压后 500 MB、最多 10,000 个条目;符号链接条目和不安全路径会被拒绝。
  • agent 定义文件里只允许出现nameinstructionstriggers三个字段;运行态、active、模型覆盖等字段会被拒绝。

manifest 的最小示例(my-app1.2.0为文档示例值,替换为你自己的 name/version;entry指向 dist 下必须存在的入口文件):

{ "schemaVersion": 1, "name": "my-app", "version": "1.2.0", "description": "What the app does", "entry": "index.html" }

完整字段定义见 rowboat-app.ts 中的RowboatAppManifestSchema(还包含可选的iconagentscapabilitiesdataContracts等;buildminRowboatVersion是 V1 保留字段,仅校验不执行)。

打包为 .rowboat-app

从应用根目录(rowboat-app.jsondist/所在目录)把白名单内的文件压入 ZIP,归档名必须为<manifest.name>.rowboat-app。以文档示例命名、且应用带有一个 agent 和一个 defaults 目录为例:

zip -r my-app.rowboat-app rowboat-app.json dist agents/my-agent.yaml defaults

注意按你的实际情况调整:agents/下只放manifest.agents里列出的文件,defaults/没有就不带;src/package.jsonnode_modules/data/、点文件一律不进包。应用内自带的打包器(packager.ts)用的就是同一份白名单逻辑,并会输出 SHA-256 供核对。

发布 GitHub release 并挂双资产

把源码推到你的 GitHub 仓库后,创建 release 时文档强制两点:

  1. tag 约定:release tag 必须是v<version>(例如v1.2.0),且与manifest.version一致。
  2. 双资产要求:每个 release 必须同时挂上两个资产,文件名一字不差:
    • <name>.rowboat-app—— 打包好的 bundle;
    • rowboat-app.json—— manifest 的独立副本。

独立 manifest 的作用是支撑 Rowboat 的免配额更新检查:客户端通过releases/latest/download/rowboat-app.json拉取它。缺少任一资产都会导致注册校验失败或版本发现中断。

monorepo 的特殊限制

版本发现永远读取仓库的latestrelease。如果一个 monorepo 注册了多个应用,那么每一个release 都必须挂上所有已注册应用的资产对——只要某个应用单独发版,其他应用的解析就会坏掉。一个应用一个仓库可以完全避开这个问题,这也是引导式发布采用的方式。

提交注册记录到注册表

注册表仓库rowboatlabs/apps-registry中每个应用一条记录,位于apps/<name>.json。记录格式(文档示例,your-github-login替换为你的 GitHub 账号,my-app与 manifest 一致):

{ "schemaVersion": 1, "name": "my-app", "owner": "your-github-login", "repo": "your-github-login/my-app", "description": "What the app does", "iconUrl": "https://raw.githubusercontent.com/you/my-app/HEAD/dist/icon.png", "createdAt": "2026-07-06T00:00:00Z" }

字段约束以 registry-record.schema.json 为准:name3–64 字符且符合包名正则,repo形如owner/repodescription最长 500 字符,iconUrl必须是https://开头的 URI,createdAt为 ISO 时间戳。注册可以走应用内表单(Apps → Catalog → Register existing release),也可以自己开这个单文件 PR。

操作路径:forkrowboatlabs/apps-registry,在其main基础上新建分支,添加唯一的apps/<name>.json文件并提交,然后向main开 PR。校验 Action 会检查:

  • PR 恰好只新增这一个文件;
  • name合法、唯一且未被退役;
  • owner等于 PR 作者;
  • PR 作者对repo有 push 访问权;
  • releases/latest/download/<name>.rowboat-app存在(即 release 资产挂对了)。

验证结果

  • PR 被auto-merge:注册成功。此时在 Rowboat 里通过 Apps → Catalog 搜索my-app即可看到并安装该应用。
  • PR 被关闭且带有rejected: <code>评论:注册被拒,按评论里的代码对照上面的校验项排查,修正记录或 release 后重新提交。
  • 手动快速自检:直接访问https://github.com/<owner>/<repo>/releases/latest/download/<name>.rowboat-app.../rowboat-app.json,两者都能下载说明双资产就位。

发布后续版本

后续更新同样遵循双资产 +v<version>tag 约定:升 manifest 的version,重新打包,在仓库新建 release 并挂上新的<name>.rowboat-approwboat-app.json两个资产即可,无需再和注册表交互。参考 publisher.ts 中publishUpdate的实现可看到与之一致的流程(bump 版本 → 打包 → 推源码 → release → 上传双资产)。

【免费下载链接】rowboatOpen-source AI coworker, with memory项目地址: https://gitcode.com/GitHub_Trending/rowb/rowboat

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询