Skip to main content

02Agent Addon

02Agent 是内置在 02Engine 编辑器里的 AI 助手 addon。它基于 Gandi IDE AI assistant addon 二次开发,可以读取当前 Scratch 项目结构、理解积木脚本、生成或修改角色和造型,并通过工具调用把 AI 的修改同步回编辑器。

02Agent 的目标不是替代 Scratch 编辑器,而是让 AI 能像一个项目内的编程助手一样工作:先检查项目,再给出或应用小范围修改,最后用诊断工具确认脚本和资源是否有效。

入口和界面

02Agent 默认启用。进入编辑器后,页面上会显示一个可拖动的浮动入口按钮。点击按钮可以打开或恢复 02Agent 聊天窗口。

主要界面包括:

  • 聊天区:显示用户消息、AI 回复、工具调用和结果。
  • 输入区:输入需求,发送给当前选择的模型。
  • 历史区:管理会话、切换会话、查看会话快照。
  • 设置区:配置 AI 服务商、模型、API 地址和 API Key。
  • Skill 桥接区:连接本机 02Agent Skill bridge,让外部 AI 客户端调用当前编辑器里的 02Agent 工具。
  • 附件和选择层:把选中的积木范围、文件内容或其它上下文附加到消息中。

窗口隐藏或最小化后,浮动入口仍会保留。再次点击入口会恢复窗口。02Agent UI 使用很高的层级显示,避免被普通编辑器窗口遮挡。

支持的模型服务商

02Agent 可以配置多个 AI agent,每个 agent 可包含一个或多个模型。当前支持的服务商类型包括:

  • OpenAI 兼容接口。
  • Anthropic 兼容接口。
  • Google Gemini 接口。
  • DeepSeek 接口。
  • 智谱接口。
  • Azure OpenAI。
  • 自定义 OpenAI 兼容接口。
  • 自定义 Anthropic 兼容接口。

每个 agent 通常需要配置:

  • 名称。
  • 服务商类型。
  • Base URL。
  • API Key。
  • 模型 ID。
  • 可选的最大输出 token 数。

API Key 只用于浏览器内的 02Agent 调用,不会通过 Skill bridge manifest 暴露给外部客户端。

推荐工作流

对复杂项目,推荐按以下方式使用 02Agent:

  1. 先让 02Agent 查看项目概览。
  2. 只读取将要编辑的舞台或角色脚本文件。
  3. 搜索需要使用的积木或扩展。
  4. 对不熟悉的 opcode 调用积木帮助工具。
  5. 每次只修改一个较小的脚本或资源范围。
  6. 修改后运行诊断,确认生成的 Scratch JS DSL 可以同步回积木。
  7. 如果涉及造型或背景,优先使用 SVG 工具创建或修改资源。

不要要求 02Agent 一次性重写整个大型项目。更稳定的做法是把任务拆成多个小步骤,例如先创建角色,再添加变量,再写主要脚本,再补充视觉效果。

虚拟项目文件

02Agent 会把当前 Scratch 项目映射成一组虚拟文件。AI 修改这些文件后,02Agent 会把变更重新同步回 Scratch VM。

常见虚拟路径包括:

  • /stage.js:舞台脚本。
  • /sprites/<角色名>.js:角色脚本。
  • /sprites/<角色名>/costumes/<编号>-<造型名>.svg:角色造型。
  • /stage/costumes/<编号>-<背景名>.svg:舞台背景。
  • /docs/scratch-agent.md:内置 Scratch JS DSL 指南。
  • /docs/block-catalog.md:当前可用积木目录,包括已经加载的扩展积木。

脚本文件使用 02Agent 的 Scratch JS DSL 表达 Scratch 积木。例如:

// @script new-hello
event.whenflagclicked({ $xy: { x: 80, y: 80 } }, () => {
looks.say({ MESSAGE: "hello" });
});

// @script <id> 标记用于定位顶层脚本。编辑已有脚本时应保留已有标记和 // blockId 注释,这有助于同步层更准确地更新原有积木。

主要工具能力

02Agent 暴露一组工具给聊天模型和 Skill bridge。工具 schema 由代码动态生成,聊天和桥接使用同一套定义。

项目和文件工具:

  • getProjectOverview:获取项目、舞台尺寸、目标、造型、变量、列表和已加载扩展概览。
  • listFiles:列出所有虚拟文件。
  • readFile:读取虚拟文件,支持行号范围。
  • searchFiles:搜索虚拟文件和内置文档。
  • getDiagnostics:检查脚本、积木转换和 SVG 资源问题。

积木和 DSL 工具:

  • getScratchGuide:获取任务导向的 DSL 指南。
  • searchBlocks:按 opcode、中英文关键词或 DSL 名称搜索积木。
  • getBlockHelp:获取单个积木的字段、输入、菜单、子堆栈和示例。

编辑工具:

  • applyPatch:用 Codex 风格 patch 修改虚拟 JS 或 SVG 文件。
  • createSpriteWithSvg:用一个 SVG 造型创建新角色。
  • updateSpriteProperties:修改角色位置、大小、方向、旋转方式、显示状态和当前造型。
  • addCostumeWithSvg:给已有角色或舞台添加一个 SVG 造型或背景。
  • batchAddCostumesWithSvg:批量添加 SVG 造型或背景。
  • deleteCostume:删除单个造型或背景。
  • batchDeleteCostumes:批量删除造型或背景。
  • reorderCostume:移动单个造型或背景顺序。
  • setCostumeOrder:一次性设置完整造型或背景顺序。
  • deleteSprite:删除角色,不能删除舞台。

扩展工具:

  • searchExtensions:搜索内置扩展和已知远程扩展库。
  • installExtension:安装一个内置或已知可信扩展,并返回加载后的扩展积木。

会改变项目状态的工具会被串行排队,避免聊天窗口和 Skill bridge 同时修改同一个工作区造成冲突。

扩展搜索和安装

02Agent 可以在需要扩展积木时先搜索再安装扩展。例如需要画笔积木时,AI 应先搜索 pen,安装内置 Pen 扩展,再调用 searchBlocksgetBlockHelp 确认 pen.* 积木语法。

扩展来源包括:

  • Official Scratch 内置扩展。
  • 02Engine 扩展库。
  • TurboWarp 扩展库。
  • PenguinMod 扩展库。
  • Mist 扩展库。
  • SharkPool 扩展库。
  • 特殊功能项,例如自定义返回值支持。
caution

当前 02Engine VM 中,远程扩展 URL 会通过 unsandboxed 扩展运行器加载。只安装你信任的扩展。不要让 AI 自动安装无关扩展,也不要安装用户未明确指定的任意外部 URL。

外部直接 URL 默认不会被接受。只有用户明确提供可信 URL,并且工具调用显式设置 allowExternalUrl: true 时,02Agent 才应尝试安装任意外部 URL。

Skill Bridge

02Agent 内置浏览器侧 WebSocket 客户端,用于连接本机 bridge server。该 bridge 允许 OpenCode 或其它本地 AI 客户端通过 HTTP 调用当前浏览器编辑器里的 02Agent 工具。

默认连接地址:

ws://127.0.0.1:40202/agent?token=<token>

配套 Skill bridge 默认 HTTP 地址:

http://127.0.0.1:40202

Bridge manifest 会公开:

  • 协议名称和版本。
  • 02Agent 基本信息。
  • 工具 schema。
  • 系统提示词和公开使用指引。
  • 当前项目概览。
  • 安全声明。

Bridge manifest 不会公开:

  • API Key。
  • 用户配置的模型密钥。
  • 浏览器 localStorage 中的完整 agent 配置。

本地 bridge server 应只监听 127.0.0.1。不要把 bridge 端口暴露到公网或局域网。

Bridge HTTP API

配套 Skill bridge 通常提供这些本地接口:

  • GET /health:检查 bridge server 是否运行。
  • GET /manifest:读取当前 02Agent manifest。
  • GET /tools:读取当前工具列表。
  • GET /prompts:读取公开提示词。
  • POST /call:调用 02Agent 工具。
  • POST /reloadManifest:请求刷新 manifest。

浏览器侧 02Agent 不主动开放 HTTP 端口。它只通过 WebSocket 向本机 bridge server 建立出站连接。

中文和 Windows 参数

在 Windows 环境中,如果外部 Skill 客户端要调用包含中文或其它非 ASCII 字符的工具参数,推荐使用 UTF-8 stdin 或 base64 编码传参,而不是直接把 JSON 放在命令行 argv 中。

推荐方式:

node src/client.js call searchBlocks --stdin

备用方式:

node src/client.js call searchBlocks --base64 <base64Json>

这样可以避免 Windows 命令行编码导致中文参数损坏。

安全边界

02Agent 可以修改当前打开的 Scratch 项目。使用时要注意:

  • AI 工具调用可能新增、删除或重排角色、脚本、造型和变量。
  • 远程扩展可能运行非沙盒 JavaScript。
  • Skill bridge 允许本机其它进程调用 02Agent 工具。
  • Token 用于阻止无关 WebSocket 连接,但不应把 bridge 暴露到非本机网络。
  • API Key 不会通过 manifest 暴露,但仍保存在浏览器侧配置中,应避免在共享电脑上保存敏感 key。

在重要项目中,建议先保存副本,再让 02Agent 执行大范围修改。

常见问题

连接 Skill 后一直显示等待

确认本机 bridge server 已启动,并且端口与 02Agent 设置一致。默认端口是 40202。如果 bridge server 稍后启动,02Agent 会自动重试连接。

AI 使用了不存在的积木

要求 AI 先调用 searchBlocksgetBlockHelp。如果是扩展积木,先调用 searchExtensionsinstallExtension,再重新搜索积木。

修改脚本后没有同步到积木

运行 getDiagnostics 检查 DSL 语法、字段名、输入类型和菜单值。常见问题包括遗漏 $field_、把 Boolean 输入写成普通变量、或使用了未加载扩展的 opcode。

创建角色失败或角色名冲突

createSpriteWithSvg 只用于创建全新角色。给已有角色添加造型时应使用 addCostumeWithSvgbatchAddCostumesWithSvg

远程扩展安装失败

确认扩展 URL 可访问,扩展代码本身能在 02Engine 的 unsandboxed 扩展运行器中加载。对于外部直接 URL,必须显式允许外部 URL。

开发者备注

02Agent addon 源码位于 scratch-gui/src/addons/addons/02agent。关键模块包括:

  • manifest.ts:addon 元数据。
  • index.tsx:addon 入口和 UI 挂载。
  • hooks/useChat.ts:聊天状态、系统提示词和模型工具调用流程。
  • tools.ts:项目读取、编辑、诊断、积木查询和扩展安装工具实现。
  • toolSchemas.ts:工具 schema,聊天和 bridge 共用。
  • toolRuntime.ts:工具参数校验、分发和项目变更队列。
  • workspaceRangeTools.ts:积木范围替换、插入和删除。
  • extensionRegistry.ts:内置和远程扩展检索、缓存、解析。
  • bridgeManifest.ts:bridge manifest 生成。
  • hooks/useBridgeClient.ts:浏览器侧 bridge WebSocket 客户端。

修改 02Agent 后,建议至少运行:

bun run build

如果修改了工具 schema、bridge 或 prompt,建议同时手动验证聊天工具调用和 Skill bridge 工具调用。