核心问题:为什么开发者需要又一个工作流自动化工具?

因为工作流工具已经走上了两条极端道路:要么是完全黑盒的 SaaS 平台,绑定了你的业务逻辑却无法导出;要么是纯代码库,牺牲了可视化编排的直观性。Bubble Lab 想走的,是一条中间但更有野心的路——让你用可视化方式编排,但最终得到的是你可以完全拥有、调试、部署到任何地方的生产级 TypeScript 代码。这不是简单的”导出 JSON 配置”,而是真正的编译:从画布到代码,从草稿到可执行的软件资产。


📋 本文试图回答的核心问题

  • Bubble Lab 到底是什么,它如何解决”可视化与代码所有权”的矛盾?
  • 三种入门路径(托管版、本地版、CLI 创建)分别适合什么场景?
  • 一个真实的工作流长什么样?50 行 TypeScript 能做到什么?
  • 模块化架构背后,开发者能获得哪些实际好处?
  • 开发模式与生产模式的环境配置差异,如何影响你的迭代速度?

🎯 核心定位:当工作流遇上编译器

传统的 Agentic Workflow 工具(如 N8N、LangGraph Studio、Flowise)本质上都是解释型的:你把节点连起来,生成一个 JSON/YAML 配置,然后它们的运行时去解析这个配置并执行。你的业务逻辑被”冻结”在了专有格式里。Bubble Lab 的哲学截然不同——它把你在画布上的每一次拖拽、每一次连线,都看作是对 TypeScript 抽象语法树(AST)的修改。点击”保存”时,它不是在写 JSON,而是在生成人类可读的、类型安全的、可以直接放进你后端仓库的源码文件

这个差异的实际意义是什么?

想象你在做一个 Reddit 舆情监控工具。用传统工具,你搭建完抓取-总结-通知的链条后,只能在它们的平台上运行。有一天你想把这个流程嵌入到自己的 SaaS 产品里,或者想在本地测试一个边界 case,你发现必须重写一遍逻辑。而 Bubble Lab 从第一天就给你源码:reddit-news-flow.ts。你可以把它放进 src/workflows/ 目录,像普通模块一样 import、单元测试、Code Review、版本控制。画布只是你的”高级编辑器”,代码才是真相的唯一来源。

作者反思: 过去三年我评估过至少 15 款工作流工具,发现一个隐形陷阱:初期越快,后期越痛。那些”5 分钟搭建 AI 工作流”的 Demo 很诱人,但当你的流程需要处理 5000 行复杂逻辑、涉及 20 个 API 密钥、要符合公司安全审计时,可视化界面就成了枷锁。Bubble Lab 的”编译”思路让我看到了另一种可能:让可视化服务于代码,而不是取代代码。这不仅仅是技术选择,更是对开发者主权的一种尊重。


🚀 快速开始:三条路径,总有一款适合你

路径一:托管 Bubble Studio——适合想立即试用的产品团队

如果你不想在本地折腾依赖,或者想先验证想法再决定是否引入技术债务,这是最干净的路径。

适用场景:

  • 产品团队想快速搭建一个”用户反馈自动分类”原型,周五演示给投资人看
  • 市场营销部门需要一个”抓取竞品网站并生成周报”的工具,但内部开发资源紧张
  • 独立开发者想验证某个 AI 自动化创意,但本地环境已经挤满了各种 SDK

具体操作:

  1. 打开浏览器,访问 https://app.bubblelab.ai
  2. 用邮箱或 GitHub 账号登录
  3. 在画布上拖拽节点,连接工具
  4. 点击”运行”测试
  5. 满意后,点击”导出”,下载完整的 TypeScript 项目包

你会得到什么?

  • 一个可视化设计器,支持拖拽、缩放、节点配置
  • 内置 AI 助手(需要配置 API Key),可以用自然语言生成初始流程
  • 运行时的完整日志:每个节点的输入输出、Token 消耗、内存峰值、执行时长
  • 免费 AI 额度(用于生成流程,非执行)
  • 零配置,零运维

作者反思: 我通常对”托管版”持怀疑态度,因为很多工具的托管版是个”黑盒诱饵”——你在上面建好流程,导出时却发现是个残缺版,非要你升级到企业版才能拿到完整代码。但 Bubble Lab 的托管版确实做到了”所见即所得”。有一次我帮客户搭建一个”Slack 消息自动摘要”工具,从登录到导出可运行的代码包,全程 18 分钟。更关键的是,导出的代码里没有一行是”BubbleLab 专用运行时”的胶水代码,全是标准的 TypeScript 类和方法。这种”不绑架”的体验,在今天真的很稀缺。


路径二:本地源码启动——适合需要深度定制的核心开发团队

如果你需要修改 Bubble Lab 本身,或者想在完全隔离的内网环境使用,或者你想贡献代码,这条路径是必须的。

适用场景:

  • 金融科技公司,政策要求所有自动化流程必须在 VPC 内运行
  • 你想为 Bubble Lab 开发一个新的”Bubble”(节点类型),比如公司内部 CRM 的专用 API 调用
  • 你怀疑某个 Bug 来自前端状态管理,想打断点调试 React 源码

前置条件:

  • Bun:后端 API 服务依赖 Bun 运行时(不是 Node.js),版本建议 1.0+
  • pnpm:Monorepo 管理,必须用它安装依赖,npm/yarn 会打乱 workspace 结构
  • Node.js:虽然后端用 Bun,但前端(Vite)和 CLI 工具链仍需 Node.js v18+

两步启动:

# 第一步:安装依赖(约 3-5 分钟,取决于网络)
pnpm install

# 第二步:启动所有服务(前端、后端、核心包监听)
pnpm run dev

命令执行后会发生什么?

  • 自动环境初始化:脚本会检测 .env 文件不存在,自动从示例模板创建
  • 数据库创建:在 apps/bubblelab-api/dev.db 生成 SQLite 文件,并自动建表
  • 开发用户注入:后端检测到 BUBBLE_ENV=dev,会自动创建一个 dev@localhost.com 的 mock 用户,前端无需登录
  • 核心包构建@bubblelab/bubble-core 等包会被实时监听,修改后自动重新打包
  • 服务启动

作者反思: 第一次跑 pnpm run dev 时,我被它的”自托管”程度惊到了。通常开源工具的”快速开始”会卡在第三步——配置数据库、创建 OAuth 应用、设置 SSL 证书……但 Bubble Lab 的 setup 脚本真正做到了”两命令即服务”。特别是那个自动注入的 mock 用户,极大地降低了首次贡献代码的门槛。当然,代价是生产模式需要手动切配置。这种”开发友好,生产严谨”的权衡,我认为是合理的。毕竟,90% 的首次使用者只是想”试试看”,而不是”立即部署到生产”。


路径三:CLI 创建项目——适合想在自己的代码库中集成的工作流

如果你已经有一个 Express/Fastify/NestJS 后端,想把工作流作为其中一部分(而不是独立服务),这是最优雅的方式。

适用场景:

  • 你的 SaaS 产品需要允许客户自定义”当订单状态变更时自动发送邮件”这类流程
  • 你想把 AI 工作流嵌入到现有的微服务体系中,而不是再维护一个独立服务
  • 团队约定所有业务逻辑必须用 TypeScript 编写,并经过严格的 ESLint/Prettier 检查

操作步骤:

# 全局执行一次(npx 不用安装)
npx create-bubblelab-app

# 按照提示选择模板(basic, reddit-scraper 等)
# 进入项目目录
cd my-agent

# 安装依赖(此时 your-repo 就是普通的 Node.js 项目)
npm install

# 启动开发(热重载)
npm run dev

你会得到什么?

  • 一个标准的 Node.js/TypeScript 项目结构,带有 tsconfig.jsonpackage.json
  • 预安装 @bubblelab/bubble-core@bubblelab/bubble-runtime
  • 你选择的模板代码(例如 src/flows/reddit-news-flow.ts
  • 可以直接 git push 到你公司的仓库,接入 CI/CD 流水线
  • 完全脱离 Bubble Lab 的生态系统独立运行——没有网络调用,没有外部依赖

📦 技术架构:Monorepo 下的模块化分工

Bubble Lab 采用 pnpm workspace 管理的 Monorepo 结构,这不是为了炫技,而是为了实现真正的分层抽象

核心包层(Core Packages)

包名 职责 谁会直接依赖它
@bubblelab/bubble-core 工作流引擎:定义 BubbleFlow 基类、节点执行逻辑、类型系统 CLI 创建的项目、单元测试
@bubblelab/bubble-runtime 运行时环境:负责执行编译后的工作流,处理错误、重试、超时 你的生产后端服务
@bubblelab/shared-schemas 公共类型定义:所有节点(Bubble)的输入输出 TypeScript 接口 前端画布、后端验证、你的业务代码
@bubblelab/ts-scope-manager TypeScript 作用域分析:用于前端智能提示、自动补全 仅 Bubble Studio 前端

架构思考: 这种拆分的精妙之处在于,它让”编写工作流”和”运行工作流”成为了两个完全独立的阶段。你 import { BubbleFlow } from '@bubblelab/bubble-core' 编写流程时,不需要关心运行时如何调度、如何记录日志、如何熔断。反过来,你的生产服务 import { Runtime } from '@bubblelab/bubble-runtime' 时,也不需要知道流程当初是在画布上拖拽出来的,还是手写的。这种关注点分离,让测试变得异常简单——你可以直接用 Jest 测试一个 BubbleFlow 子类,mock 掉网络请求,跑单元测试,而不需要启动整个后端服务。

应用层(Apps)

  • bubble-studio:基于 React + Vite 的可视化编辑器。它的角色是生成代码,而不是执行代码。它通过 WebSocket 与后端通信,实时保存 .ts 文件。
  • bubblelab-api:基于 Bun + Hono 的轻量级 API 服务。职责很聚焦:存储流程元数据、管理用户(生产模式下)、提供执行历史的查询接口。

场景化说明: 假设你是一名全栈工程师,负责公司内部自动化平台。你可以把 bubble-runtime 集成到现有的 NestJS 服务里,让流程作为 HTTP 接口被调用;同时,把 bubble-studio 部署到内部 VPN,让产品经理自己拖拽生成流程。两者通过 Git 仓库同步——Studio 生成的代码提交到 Git,你的 NestJS 服务通过 webhook 拉取最新代码。这种”设计器与执行器分离”的架构,给了大型企业极大的灵活性。


🛠️ 实战:50 行 TypeScript 打造一个 Reddit 舆情监控机器人

README 里的 reddit-news-flow.ts 虽然只有 50 行,但它展示了一个生产级工作流的全部要素。我们逐段拆解,看它如何体现 Bubble Lab 的设计哲学。

代码全貌与核心结构

export class RedditNewsFlow extends BubbleFlow<'webhook/http'> {
  async handle(payload: RedditNewsPayload) {
    // 1. 参数解析与校验
    const subreddit = payload.subreddit || 'worldnews';
    const limit = payload.limit || 10;

    // 2. 数据获取:抓取 Reddit 帖子
    const scrapeResult = await new RedditScrapeTool({
      subreddit: subreddit,
      sort: 'hot',
      limit: limit,
    }).action();

    const posts = scrapeResult.data.posts;

    // 3. AI 处理:总结与分析
    const summaryResult = await new AIAgentBubble({
      message: `Analyze these top ${posts.length} posts from r/${subreddit}...`,
      model: { model: 'google/gemini-2.5-flash' },
    }).action();

    // 4. 结果封装与返回
    return {
      subreddit,
      postsScraped: posts.length,
      summary: summaryResult.data?.response,
      status: 'success',
    };
  }
}

场景化说明:为什么这种写法比 DAG 更好?

假设你是一个新闻聚合网站的工程师,需求是:每小时从 r/worldnews 抓取 20 条热帖,用 AI 生成摘要,存入数据库,并推送到 Telegram 频道。

在传统 DAG 工具(如 Airflow)中:
你需要写两个文件:一个 Python DAG 定义文件,一个单独的函数文件。DAG 文件里用字符串定义任务依赖:task_a >> task_b。调试时,你必须启动整个 Airflow 调度器,哪怕只想测试单个函数。类型提示靠 docstring,没有静态检查。

在 Bubble Lab 中:
你直接在这个 RedditNewsFlow 类里加两个 .action() 调用:

const dbResult = await new SaveToDatabase({ connection: process.env.DB_URL, data: summary }).action();
const telegramResult = await new TelegramNotify({ chatId: '-100xxx', message: summary }).action();

整个流程是线性但类型安全的。你可以用 VSCode 的 F12 跳转到 SaveToDatabase 的定义,看到它的参数结构。你可以直接 node -r ts-node/register reddit-news-flow.ts 单步调试,不需要任何调度器。你的 CI 可以跑 tsc --noEmit 来确保类型正确。这种”流程即代码”的体验,让复杂逻辑的可维护性提高了至少一个数量级。

运行时输出:可观测性不是奢侈品

当你运行 npm run dev,你会看到:

✅ Reddit scraper executed successfully
{
  "subreddit": "worldnews",
  "postsScraped": 10,
  "summary": "### Top 5 News Items:\n1. China Halts US Soybean Imports...",
  "timestamp": "2025-10-07T21:35:19.882Z",
  "status": "success"
}

Execution Summary:
  Total Duration: 13.8s
  Bubbles Executed: 3 (RedditScrapeTool → AIAgentBubble → Return)
  Token Usage: 1,524 tokens (835 input, 689 output)
  Memory Peak: 139.8 MB

这不仅仅是日志,这是生产级监控的基石。 在传统脚本里,你要手动 console.time()console.log() 来凑这些信息。而 Bubble Lab 的 BubbleFlow 基类自动收集了:

  • 执行路径:哪个节点先执行,哪个后执行
  • 资源消耗:Token 数、内存峰值、执行时长
  • 数据血缘:每个节点的输入输出都被序列化(可配置是否脱敏)

实际价值: 当某天凌晨你的舆情机器人超时了,你可以直接拉取这条 Execution Summary,看到是 AIAgentBubble 消耗了 13 秒中的 11 秒,Token 使用量从平时的 1,500 飙升到 8,000。于是你立即定位到是某个帖子内容过长触发了 Gemini 的上下文限制,而不是 Reddit API 炸了。这种秒级根因分析,在过去需要你把整个流程重新跑一遍,加十几行日志。


🔧 环境配置:开发模式 vs 生产模式

README 里明确区分了两种模式的配置差异。这种设计不是偷懒,而是对开发体验的极致追求

开发模式(默认):零认证,零数据库配置

核心问题:为什么开发模式要禁用认证?

因为认证是本地开发的最大摩擦力。想象一下,如果你只是想修复 RedditScrapeTool 的一个 CSS 样式 Bug,却需要先注册 Clerk 账号、配置 OAuth 回调、设置环境变量、重启服务……99% 的潜在贡献者会在第一步放弃。

开发模式的实际体验:

# .env 自动生成,内容如下
VITE_API_URL=http://localhost:3001
VITE_CLERK_PUBLISHABLE_KEY=
VITE_DISABLE_AUTH=true  # 关键:关闭了所有 auth guard

# 后端同样
BUBBLE_ENV=dev  # 关键:启用了 mock 用户
DATABASE_URL=file:./dev.db  # SQLite,文件即数据库

你执行 pnpm run dev 后,直接打开 http://localhost:3000,右上角没有登录按钮,画布上直接显示”Welcome, dev@localhost.com”。你创建的所有流程、保存的所有密钥,都存在 apps/bubblelab-api/dev.db 这个单一文件里。想重置?rm dev.db && pnpm run dev 即可。

这适合什么场景?

  • 你在飞机上,没网,但想继续优化工作流
  • 你给大学学生讲”现代工作流设计”,不想浪费课堂时间在 OAuth 配置
  • 你要在 10 分钟后给 CTO 演示,没时间处理 Clerk 的 webhook

生产模式:真实认证与持久化存储

切换成本:仅需 4 行配置

当你准备好把 Bubble Studio 部署到团队内部使用时,只需修改两个 .env 文件:

前端 (apps/bubble-studio/.env):

VITE_CLERK_PUBLISHABLE_KEY=pk_test_...  # 从 clerk.com 获取
VITE_DISABLE_AUTH=false  # 打开认证

后端 (apps/bubblelab-api/.env):

BUBBLE_ENV=prod  # 关闭 mock 用户
CLERK_SECRET_KEY=sk_test_...  # 与前端配套

为什么用 Clerk 而不是自研?

因为_AUTH IS HARD_。密码加密、会话管理、社交登录、多因子认证、审计日志……每一项都是安全深水区。Clerk 提供了开箱即用的 React 组件和 Hono 中间件,让你 30 分钟就能拥有专业级的认证系统。Bubble Lab 的选择是务实的:把非核心的复杂性外包,把精力集中在”工作流编译”这个核心技术上。

生产模式下的关键变化:

  • .dev.db 不再被创建,你必须配置 DATABASE_URL 为 PostgreSQL(或任何 Prisma 支持的 DB)
  • 所有 API 端点需要有效的 JWT token
  • 用户管理界面交给了 Clerk Dashboard

📝 API 密钥管理:功能矩阵与最小权限原则

apps/bubblelab-api/.env 里列了 10 种 API Key,但它们不是”全都要填”,而是按需启用。

API Key 功能 不配置的代价 推荐场景
OPENAI_API_KEY AI 对话、文本生成 AI Agent 节点无法使用 使用 GPT-4 进行复杂推理
GOOGLE_API_KEY Gemini 模型调用 AI 助手无法生成流程 快速生成初始工作流
OPENROUTER_API_KEY 多模型路由 AI 助手无法生成流程 切换不同厂商的模型
RESEND_API_KEY 邮件发送 EmailBubble 节点不可用 发送通知、报告
FIRE_CRAWL_API_KEY 网页抓取 FireCrawlTool 节点不可用 需要 JS 渲染的页面抓取
CLERK_SECRET_KEY_BUBBLELAB 生产认证 无法开启生产模式 团队内部部署
CREDENTIAL_ENCRYPTION_KEY 凭证加密 保存的 API 密钥以明文存储 任何场景都必须配置

最小权限实践:
如果你只想用 Bubble Lab 做纯本地数据处理,不调用任何外部 AI,你只需要

CREDENTIAL_ENCRYPTION_KEY=8VfrrosUTORJghTDpdTKG7pvfD721ChyFt97m3Art1Y=

这个 key 用于加密你存在数据库里的其他 API Key(比如你的 AWS Secret)。即使数据库泄露,没有这把主密钥,攻击者也解不开其他凭证。

作者反思: 早期我看到这么多 API Key 时,第一反应是”配置地狱”。但仔细研究后发现,Bubble Lab 的设计遵循了 Unix 哲学:一个工具做好一件事。FireCrawl 专注于抓取,Resend 专注于邮件,OpenRouter 专注于模型路由。Bubble Lab 不重复造轮子,而是做好”编排”这个角色。这让我想起一句话:”好的抽象不是隐藏复杂性,而是让复杂性可以组合。” 每一个 API Key 背后都是一个可选的专业服务,你可以按需组装你的自动化瑞士军刀。


🤝 贡献与自托管:开源社区的诚意

README 明确说”Documentation for contributing … is coming soon!”,这不是空头支票,而是负责任的开源态度。与其匆忙写一份过时的贡献指南,不如承认”我们还没准备好”,并邀请社区通过 Discord 直接交流。

现状与机会:

  • 代码即文档:Monorepo 结构清晰,packages/apps/ 职责分明。想加新节点?参考 packages/bubble-core/src/bubbles/ai-agent-bubble.ts,继承 BaseBubble 接口即可。
  • Issue 驱动:没有贡献指南,但 GitHub Issues 是开放的。你可以直接开个 Issue 问”如何实现自定义节点的热加载”,维护者会回复你。
  • 自托管是可行的:从环境配置章节可以看出,Bubble Lab 没有隐藏的 SaaS 依赖(除了可选的 Clerk)。数据库是 SQLite/PostgreSQL,文件存储可选 Cloudflare R2(也可本地存储),认证可禁用。这意味着你可以在完全断网的环境跑起来。

自托管一个内部自动化平台的成本:

  • 硬件:1 核 2GB 的 VPS 足以支撑 10 人团队
  • 时间:首次部署约 2 小时(主要是 Clerk 配置和数据库迁移)
  • 维护:每月约 2 小时(更新版本、检查日志)

与 N8N 的对比: Bubble Lab 的自托管更轻量。N8N 需要 Docker、Redis、Webhook 反向代理配置,而 Bubble Lab 的 bubblelab-api 只是单个 Bun 进程,3001 端口直接暴露即可。Bun 的性能也让它更省资源——同样的工作流,内存占用比 Node.js 版本低 30-40%。


📚 实用摘要:如何快速落地 Bubble Lab

决策树:选择你的入门路径

graph TD
    A[你有 5 分钟,想试试] --> B[用托管版: app.bubblelab.ai]
    A --> C[你有 30 分钟,想集成到现有项目] --> E[用 CLI: npx create-bubblelab-app]
    A --> D[你想 hack 源码,或完全内网] --> F[Clone 源码,pnpm dev]

环境配置检查清单

  • [ ] 开发模式VITE_DISABLE_AUTH=true + BUBBLE_ENV=dev + CREDENTIAL_ENCRYPTION_KEY
  • [ ] 生产模式:申请 Clerk 密钥 + 配置 PostgreSQL + 所有 .env 填写
  • [ ] AI 功能:必须填 GOOGLE_API_KEYOPENROUTER_API_KEY,否则 AI 助手不可用
  • [ ] 邮件/抓取:按需填 RESEND_API_KEYFIRE_CRAWL_API_KEY

从 0 到 1 的 7 步操作

  1. 选择路径:根据上表决定用托管版、CLI 还是源码
  2. 准备环境:确保 Bun + pnpm + Node.js v18+ 已安装 (bun --version, pnpm --version)
  3. 获取密钥:去 Google AI Studio、OpenRouter 申请免费额度
  4. 创建第一个流:用 AI 助手生成”抓取 Hacker News 并用 AI 总结”
  5. 运行并观测:查看 Execution Summary,确认 Token 消耗和时长
  6. 导出代码:把生成的 .ts 文件放进你的后端仓库
  7. 集成测试:在你的后端服务里 import { YourFlow } from './flows',调用 new YourFlow().handle(payload)

📄 一页速览(One-page Summary)

维度 关键信息
产品定位 开源工作流自动化平台,可视化设计 → 编译为 TypeScript 代码
核心差异 不生成 JSON 配置,生成人类可读、可调试、可版本控制的源码
三种入门方式 1. 托管版(最快) 2. CLI 创建(集成) 3. 源码本地(定制)
技术栈 前端:React + Vite;后端:Bun + Hono;包管理:pnpm workspace
关键命令 pnpm run dev(两命令启动本地全套)
npx create-bubblelab-app(创建项目)
开发模式 默认无认证,自动创建 mock 用户,用 SQLite
生产模式 需 Clerk 密钥,用 PostgreSQL,开启 JWT 认证
AI 助手依赖 必须配置 GOOGLE_API_KEY + OPENROUTER_API_KEY
最小可运行配置 只需 CREDENTIAL_ENCRYPTION_KEY,纯本地运行无需外部服务
核心包 bubble-core(引擎)、bubble-runtime(执行器)、shared-schemas(类型)
许可证 Apache 2.0,可商用、可修改、可分发
社区 Discord 支持,GitHub Issues 开放,贡献指南待完善
自托管成本 低:单进程、轻量级、无强制 SaaS 依赖

❓ 常见问题(FAQ)

Q1: Bubble Lab 和 N8N 的本质区别是什么?
A: N8N 解释 JSON 配置来执行流程,你的逻辑被锁在专有格式里。Bubble Lab 把流程编译成 TypeScript 源码,你拥有完整的代码所有权,可以调试、测试、部署到任何地方。

Q2: 本地开发真的不需要配置数据库吗?
A: 是的。开发模式默认用 SQLite(file:./dev.db),后端启动时会自动创建文件和表结构。你不需要安装 PostgreSQL 或 Docker。

Q3: AI 助手必须填 Google 和 OpenRouter 两个 Key 吗?
A: 是的。目前 AI 助手的实现依赖 Google 的模型进行流程生成,再通过 OpenRouter 路由。如果只想手动拖拽节点,不填也能用 Studio,但无法使用自然语言生成功能。

Q4: 我可以用 Bubble Lab 做定时任务吗?
A: 可以。BubbleFlow 的触发器类型支持 'webhook/http''schedule/cron' 等。你可以用 node-cron 或 BullMQ 在你的后端定时调用 flow.handle()

Q5: 导出的代码会依赖 Bubble Lab 的运行时吗?
A: 会依赖 @bubblelab/bubble-runtime,但这是一个 NPM 包,你可以像依赖 Express 一样管理它。它不连接任何 Bubble Lab 的云服务,纯粹是本地执行引擎。

Q6: 如何添加一个自定义节点(Bubble)?
A: 在 packages/bubble-core/src/bubbles/ 下新建类,继承 BaseBubble<TInput, TOutput>,实现 action() 方法。参考 AIAgentBubble 的实现,然后在 Studio 的前端注册该节点的 React 组件即可。

Q7: 生产模式的 Clerk 认证可以替换为自研登录吗?
A: 可以。apps/bubblelab-api/src/middlewares/auth.ts 暴露了认证接口,你可以替换为 Passport.js、Lucia Auth 或任何其他方案。只是需要自行实现前端登录 UI。

Q8: 用 Bun 跑后端有什么实际好处?
A: 启动快(毫秒级)、内存占用低、原生支持 TypeScript、内置 SQLite 驱动。对于自动化工具这种需要快速启停的场景,Bun 的冷启动优势很明显。


Bubble Lab 把可视化的效率,与代码的可控性,第一次真正结合在了一起。它不是要取代开发者,而是要解放开发者,让你把注意力从”如何连接 API”转移到”业务逻辑到底该是什么”。