缩小模型的生成目标
规范语法、版本化 profile 与结构化诊断,让 Agent 围绕明确的语言表面完成生成、检查和修正。
生成 → 检查 → 修正让 Agent 组合工具、数据与原生界面的精巧 DSL。以 Makepad Splash 为基础,提供有界工作流运行时,以及从像素到可检查组件的 A2App 路径。
开源 · Rust 宿主 · Makepad Splash VM
use mod.tool
let task = "prepare release notes"
let result = tool.call("text.echo", task)
result
"prepare release notes"LLM 需要容易生成、检查与修正的语言;应用需要知道生成的程序究竟能做什么。Octoscript 把两者放进同一份明确的约定。
规范语法、版本化 profile 与结构化诊断,让 Agent 围绕明确的语言表面完成生成、检查和修正。
生成 → 检查 → 修正注册工具、数据约定与逐步授权共同定义允许的副作用。源码语法正确,也不能自行获得执行权。
审查 → 授权 → 执行共享 Rust VM、明确的资源上限与宿主驱动的延迟执行,让工作流融入应用生命周期和 UI 事件循环。
小巧 → 有界 → 可嵌入通用语言擅长利用成熟生态。Octoscript 选择为嵌入应用的生成程序设计更小的执行约定:让模型专注表达工作,让宿主检查并控制每一步。
| 设计问题 | Python / JavaScript | Octoscript |
|---|---|---|
| 生成目标 | 通用语法与大型生态,应用另行约束可用范围。 | 明确的规范语法 + profile + 工具目录。 |
| 执行权 | 由嵌入方式、隔离环境与 API 共同决定。 | 默认无工具权限;宿主逐步签发能力。 |
| 运行成本 | 按所选运行时补齐限制与应用集成。 | 指令、时间、内存等显式上限;宿主驱动让出与恢复。 |
小巧和高效是设计目标;安全与可靠来自具体的检查、授权、执行预算和宿主隔离。这里不宣称未经测量的性能优势。
阅读完整设计动机与安全模型Splash 已有 Rust VM、对象组合与实时 UI 语言。Octoscript 在此基础上加入有界工作流约定和受控执行,VM 加固维护在共享 Makepad fork,UI 继续复用 Splash 组件生态。
为何 fork,哪些能力继续共享?共享实现 · 各宿主按需创建 VM 实例与绑定
认识 Rik Arends 与 Makepad 项目中的 Splash:可实时编辑的 UI 语言,也是 Octoscript 的 VM 基础。
View {
width: Fill
height: Fit
flow: Down
spacing: 12
title := Label {
text: "Ready to build"
}
launch := Button {
text: "Run workflow"
}
}UI 片段:需要已注册 Label、Button 等组件的宿主。
Type { … } 实例化定义,name := 命名组件;让界面结构可复用、可定位。
+: 合并继承的属性,主题与 kit 共享默认值;改一处,复用到多处。
函数与回调表达交互;Rust 注册组件、持有状态、执行真正的应用服务。
shader、instance、uniform 与 Animator 支持自定义 GPU 视觉和状态过渡。
UI 宿主可重新挂载或更新 Splash,结合组件检查和画面反馈完成修正。
直接编写 Splash,或先把 L0 / L1 实例化为卡片树,再经 kit 转换和求值得到渲染器 UiNode,最后生成组件源码。共享 makepad-script 实现,不等于共享宿主能力。
UI 生成有独立约定:声明式 L0,以及受限的 L1 算术扩展。下面分别解释语言能力与四层实现链路。
组件、数据绑定、带键集合、状态与事件转换。节点树的实例化过程无需 VM。
在 L0 基础上增加有界的纯算术表达式,计算界面需要的派生值。
这里的四层描述“怎么把卡片变成可操作的界面”。它们与上方卡片头部的语言能力等级是两个独立维度。
卡片 + 宿主数据 → UI 树验证数据来源、状态、key 与展开预算。
UI 树 + kit → 组件调用保留角色、参数、主题和来源 ID。
组件调用 → UiNode → Splash源码求值得到 UiNode,再由 Rust 生成组件描述。
组件描述 → 像素 + 事件实际布局、绘制、点击与状态回传。
能力等级的当前边界:UI L0 已实现;UI L1 仅开放受限的纯算术表达式。UI L2 尚未实现,检查器在解析前拒绝;不存在可用的 UI L3 profile。实现链路的 L3 不是一张执行权限通行证。
查看语法、完整例子与等级判定 →Makepad 绘制组件与平台系统控件都可以成为 UI 的目标,也可以在同一页面内组合。语言、逻辑和渲染宿主各司其职。
Rust + GPU 后端,复用布局、绘制、组件和交互,覆盖原生与 WebAssembly。
Rust 求值树 → JNI → Java builder → Android / Material View。
Rust → ArkUI C API → 原生节点;外壳与特定平台交接保留在 ArkTS。
Makepad iOS 后端已有原生视图接入;完整 UIKit 控件树仍需专门适配器。
宿主协调布局矩形、裁剪、层级、焦点、键盘与生命周期。例如让原生预览负责相机画面,Makepad 负责自定义覆盖层,平台控件提供系统输入体验。
开发分支中的 camera/native 和 camera/oh 都依赖 octosense-camera-logic;这不是当前 Camera 应用包的架构。状态机与场景生成共享,前者使用 Makepad kit,后者通过 ArkUI C API 创建系统节点。
查看共享逻辑与双宿主实现Makepad 原生绘制组件与平台系统控件是两种后端;同页组合需要具体适配,并不自动将任意 shader 转成系统控件。
查看平台映射与原生组合细节从面向人类的 Studio,到应用内可通过 socket 访问的检查和控制原语。Agent 无需操作 IDE 窗口,就能理解和驱动正在运行的 UI。
读取组件 ID、类型、文字、状态和当前矩形。
/snap?q=Button按最新边界点击、拖动、滚动、按键和输入。
/click · /m · /k · /t等待实际帧,检查应用画面和行为日志。
/g · /gseq · /log检查反射属性、试改样式,再把变更写回源码。
/tweak/state · /tweak/apply开发实例显式启用仪器。这里的 headless 指不依赖 Studio GUI,视觉验证仍使用真实 GPU;各平台的检查与采集能力以宿主实现为准。
这里的 Agent 帮助开发和测试应用。运行时应用 Agent 则由 OctoSense 和 octos 管理,使用用户允许的账户工作区、工具与对话路由。独立 card-host 没有注册 Agent 服务。
探索交互式应用与 Agent 架构图阅读语言、仪器与 A2App 的完整关系两条流程保留来源与运行时的对应关系,让 Agent 能从设计进入源码,再回到真实组件与交互中验证。
一次设计一组相关页面,把视觉、数据和动作一起组织为真实的服务体验。
保留 prompt、图集、页面裁切与坐标变换。
把文字、控件、数值图表与图片分别映射到组件。
提取服务卡片,绑定 reducer、状态、授权与操作。
检查组件和实际画面,再输出原生或 WASM 包。
点选一个来源元素,查看它在原生界面中的组件类型与服务事件。
来源按钮成为 KitButton,独立保留控件与文字;动作交给安装服务处理。


归档原生渲染与源图对照;高亮按来源映射区域定位。这一轮仍有字体、图标和阴影差异。检查器展示记录的映射,不会调用安装服务。
利用设计文档的层级、symbol 与 source ID,把完整设计系列转为可复用的原生组件。
解析画板、分组、字体、mask 和稳定的来源 ID。
文字成为 Label,控件保留交互,图片保留来源。
用组件树、布局、真实输入与原生帧验证结果。
抽取共享定义、token 和绑定,让新页面复用组件。
Camo 音乐行保留封面 Image、标题 Label 和播放控件,再提升为共享的 CamoTrackRow。页面用实例参数提供内容与状态,原 source ID 仍可追溯。
初次导入保留固定画板;响应式布局与真实业务行为仍由应用补齐。定量图表使用数值组件与明确数据,不能退化成一张曲线图片。
CamoTrackRow
├─ Image cover
├─ Label title
├─ Label artist
└─ control play
KitButton · KitFormField
KitTabBar · TaskplanProjectCard一个定义 → 多个实例 → 新页面在浏览器里体验 Material 组件与 Flutter 示例设计。控件由真实 Makepad 渲染器绘制。
启动后,在这里直接操作。
MATERIAL 3 · FLUTTER DESIGNS浏览器需要支持 WebAssembly 与 WebGL。组件目录与说明可直接阅读;canvas 控件的辅助技术支持不同于网页表单。 完整组件库与支持范围 →
工作流可以无界面运行。需要用户参与时,App Card 呈现数据、上下文和下一步操作。
让原始消息与提议的操作保持关联。
通过原生组件呈现结构化数据。
由用户确认或忽略提议。
学校邮件提出了新的活动时间,在这里确认日历调整。
林老师 · 青禾学校Alex,你好!家校活动调整到 9 月 18 日周五下午 3:30,请到学校花园集合。期待见面!—— 林老师
订单已就绪,直接确认送货时间,无需打开购物应用。
栖居 · 配送团队Alex,你好!冰箱已备好,可以在 9 月 19 日周六上午 9 点至 12 点配送。请确认这个时间是否方便。—— 栖居
民宿提供了接机安排,让这个下一步留在你的旅行计划里。
海岸民宿 · 客服Alex,你好!我们可以安排 9 月 21 日周一下午 2 点接机,见面地点是 2 号航站楼到达层。请确认是否需要。—— 海岸民宿
交互概念演示 · 示例数据 · 不执行外部操作
校验源码,注册本地演示工具,运行工作流。然后,用你的应用服务替换演示工具。
克隆 Octoscript 仓库。
执行前,先通过校验器检查源码。
在嵌入宿主中注册应用工具。
use mod.tool
let task = "prepare release notes"
let result = tool.call("text.echo", task)
result
git clone https://github.com/OctoSense-org/Octoscript.git
cd Octoscript
cargo run --locked -p octoscript-cli -- \
check examples/tool_workflow.octoscript
cargo run --locked -p octoscript-cli -- \
run --allow-echo examples/tool_workflow.octoscript先了解架构,再按需深入。
在交互图中探索原生 Rust、Splash 与 L0 应用,再追踪 Agent 请求、工具与数据。
设计动机、Python/JavaScript 的取舍、执行边界与 Splash 来源。
语言特性、Rust 复用、原生 UI 宿主与应用内 Agent 仪器。
生成图集与 Sketch 文档两条流程,以及详细的组件映射例证。
工作流语法、UI 能力等级,以及四层组件实现链路。
按角色浏览组件,直接操作 Material 与 Flutter 设计示例。
工作流语言、宿主职责,以及可选的 UI 路径。
经过组件 kit,将界面交给 Splash 与原生组件。
Octoscript 如何使用 Makepad Splash VM,并保持依赖一致。