跳转到主要内容

概述

Website 是 Zeus 编程模式中的端到端 Web 开发能力。Agent 可以在沙盒内初始化 Web 项目、实时预览、检查代码质量,并一键部署到持久化 URL。 核心能力:
  • 项目初始化 — 在现有沙箱内 bootstrap Next.js / Vite 项目,秒级就绪
  • 实时预览 — 通过沙盒代理 URL 实时查看开发中的网站
  • 代码检查 — TypeScript 类型检查 + ESLint 代码质量验证
  • 一键部署 — 通过 Freestyle API 部署到持久化 *.style.dev URL

架构

组件总览

组件路径作用
Website 工具ai-backend/src/utils/tools/built_in/website.pywebsite_init / website_deploy / website_eslint
SandboxManagerai-backend/src/services/sandbox.py沙箱生命周期、Web 项目 bootstrap
Deploy APIai-backend/src/api/deploy.pyFreestyle / Vercel / Server 部署路由
前端路由web/src/app/api/deploy/route.ts代理部署请求到 AI Backend

Website 工具

编程模式下,Agent 拥有三个 Website 专用工具:

website_init

在现有沙箱内初始化 Web 项目。不会创建新沙箱,之前的文件完整保留。
参数类型默认值说明
frameworkstringnextjs框架类型:nextjsvite
执行流程: 初始化内容(Next.js):
  • create-next-app@latest — TypeScript + Tailwind + ESLint + App Router
  • 额外依赖:lucide-reactframer-motionrechartszustandsonner
  • 后台启动 pnpm dev --port 3000

website_deploy

将当前 Web 项目部署到 Freestyle,获得持久化的公开 URL。
参数类型默认值说明
platformstringfreestyle部署平台:freestyle(默认)或 vercel
执行流程: 部署特性:
  • 持久化 URLhttps://zeus-{session_id[:8]}.style.dev
  • 自动构建 — Freestyle 自动检测框架(Next.js / Vite),执行 build
  • 域名复用 — 同一 session 多次部署更新同一域名的 domain mapping
  • 零配置 — 不需要用户提供额外 Token 或服务器信息

website_eslint

检查 Web 项目的代码质量。
参数类型默认值说明
file_pathslist[str] | nullnull要检查的文件路径(为空则检查整个项目)
检查内容:
  1. TypeScript 类型检查tsc --noEmit --pretty
  2. ESLint 检查next lint
返回错误数、警告数和详细诊断信息。

部署体系

Zeus 支持三种部署目标,通过统一的 Deploy API 管理:
目标端点特点用户需提供
FreestylePOST /deploy/freestyle持久化 URL,亚秒级部署,自动构建无(零配置)
VercelPOST /deploy/vercel生产级托管Vercel Token
ServerPOST /deploy/server自定义服务器,Docker 部署SSH 信息

Freestyle 部署

Freestyle 是默认的部署目标,提供:
  • 亚秒级部署 — API-first 设计,从调用到上线 < 1 秒
  • 自动框架检测 — 支持 Next.js、Vite、Expo 等
  • 自动 SSL*.style.dev 域名自带 HTTPS
  • 域名映射 — 同一域名可指向不同的 deployment(更新时创建新 deployment,自动重映射域名)
API 调用示意:
async with httpx.AsyncClient() as client:
    response = await client.post(
        "https://api.freestyle.sh/web/v1/deployment",
        headers={
            "Authorization": f"Bearer {FREESTYLE_API_KEY}",
            "Content-Type": "application/json",
        },
        json={
            "source": {
                "kind": "files",
                "files": files_dict,  # {相对路径: 文件内容}
            },
            "config": {
                "domains": ["zeus-abc12345.style.dev"],
                "build": True,
            },
        },
    )

部署流程(全景)


预览 URL vs 部署 URL

维度沙盒预览 URLFreestyle 部署 URL
格式取决于 Provider(如 https://{id}.e2b.apphttps://zeus-{session[:8]}.style.dev
生命周期沙盒存活期间(最长 1 小时)持久化,直到手动删除
用途开发时实时预览分享、展示、生产使用
更新方式HMR 自动刷新需重新部署
性能开发模式(较慢)生产构建(优化后)

配置

环境变量

变量描述默认值
FREESTYLE_API_KEYFreestyle API 密钥(部署必需)
SANDBOX_PROVIDER沙盒 Provider 类型e2b
SANDBOX_TIMEOUT沙盒超时时间(秒)3600
E2B_API_KEYE2B API 密钥(E2B Provider 必需)
E2B_SANDBOX_TEMPLATEE2B 模板名称zeus-nextjs
OPENSANDBOX_SERVER_URLOpenSandbox Server 地址http://localhost:8000
OPENSANDBOX_IMAGEOpenSandbox 沙盒镜像opensandbox/code-interpreter:v1.0.1

获取 Freestyle API Key

  1. 访问 admin.freestyle.sh 注册账号
  2. 在 Dashboard 中获取 API Key
  3. 添加到 apps/ai-backend/.env
FREESTYLE_API_KEY=your_api_key_here

免费额度

项目免费额度
并发 VM10
域名数5
仓库数500
部署次数500 次/月

使用场景

场景工具链
快速原型website_init → AI 编写代码 → 实时预览 → website_deploy
落地页制作website_init → AI 生成页面 → website_eslintwebsite_deploy
组件演示website_init → AI 编写组件 → 分享 *.style.dev URL
迭代开发开发预览 → 修改代码 → website_eslint 检查 → 重新部署(URL 不变)