Skip to content
belowthetreePublic

About

AI-powered cross-platform instant-app platform. Describe your needs in natural language — AI generates mini-apps that run instantly in iframe sandboxes.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Latest commit

 

History

225 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Amiba Logo

变形虫 (Amiba)

AI 驱动的跨平台即时应用平台。用户用自然语言描述需求,AI 自动生成迷你小程序并即刻运行在 iframe 沙箱中。

License Vue TypeScript Tauri Release Release APK

English

截图

AI 对话 服务浏览 服务运行 设置
AI 对话 服务浏览 服务运行 设置

技术栈

Vue 3 + TypeScript + Vite + Tauri 2(Windows / macOS / Linux / Android)

快速开始

npm install
npm run dev           # 开发模式 → http://localhost:8484
npm run build         # 生产构建
cargo tauri dev       # Tauri 桌面应用(开发)
cargo tauri build     # Tauri 桌面应用(打包 EXE/DMG/deb)

核心功能

AI 对话

  • OpenAI 兼容的多轮流式对话,支持 DeepSeek / Qwen / 智谱等 API
  • 记忆系统:AI 自动保存用户偏好和重要信息到 MEMORY.md / USER.md
  • 人格系统:首次引导创建 AI 人格(名称、风格),可通过 soul_save 工具调整
  • 多 Session:输入区左侧 › 展开功能面板,🗂️ 会话列表切换历史会话,每个 session 独立存储
  • 需求追踪:AI 自动记录服务功能需求和优化建议

界面与交互

  • 无顶栏设计:左右滑动即可切换页面(iPhone 风格跟手手势),两侧玻璃竖条箭头提示也可点击切换
  • 玉石玻璃风:玉青主色 + 半透明玻璃表面 + 全局辉光背景,流光隐约划过
  • 悬浮输入框:无聊天记录时输入框垂直居中,对话开始后沉底,玻璃质感浮于背景之上

安卓桌面卡片(AppWidget)

  • 服务可自带系统桌面卡片:desktop-widgets/{cardId}/ 目录(widget.json 界面配置 + logic.js 数据逻辑 + assets 图片),原生 RemoteViews 渲染
  • 也支持全局卡片:AI 一句"在桌面放个 xx 卡片"即可创建,无需完整服务
  • 长按安卓桌面,按卡片尺寸选"变形虫卡片·小(2x2)/中(4x2)/大(4x4)"小组件并选卡即用;卡片可定时刷新,点击跳转对应服务页
  • 卡面可用 HTML/CSS 或 SVG 自由绘制(renderHtml 离屏渲染成图):进度环、图表、个性排版都能上桌面

AI 服务生成

  • 自然语言描述 → 生成完整 HTML/CSS/JS 小程序
  • 生成的服务运行在 iframe 沙箱中,通过 JSBridge (window.__amiba__) 调用宿主能力(详见下方「服务 API」)
  • 服务界面遵循统一的玉石玻璃风:引入 /libs/jade.css 基础样式表即可复用设计令牌与组件类(详见 服务界面风格指南)
  • 支持 Chart.js v4 图表
  • 生成后可继续用 AI 编辑服务文件(service_file_* 工具)

技能系统(Skill Evolution)

  • Agent 可自主创建/修补技能:当复杂任务成功或错误被克服后,AI 会记录为 SKILL.md
  • 使用遥测:每个技能记录使用次数、查看次数、修补次数
  • Curator 后台:自动将长期未使用的技能标记为 stale → archived
  • LLM 智能合并(可选):定期对技能按前缀聚类,合并为 umbrella skill

离线优先

  • 所有数据本地存储在 {AppData}/amiba/
  • 配置、记忆、对话历史、服务文件、技能、人格文件全部本地化

界面定制与多主题

  • CSS 变量体系:30 个 :root 变量驱动全局外观,AI 可通过对话修改配色/圆角/字体/阴影
  • 内置主题:出厂自带 default(玉石玻璃风)、dark(深色)、ocean(蓝色系)三套主题
  • 主题管理:AI 可通过 ui_theme_* 工具创建/切换/删除主题;设置页提供下拉切换
  • 插槽系统:4 个预定义 UI 插槽(聊天页消息上方/输入框下方、设置页末尾、服务列表上方),AI 可注入自定义 HTML
  • 完全 AI 驱动:用户说"把背景改深色"、"在输入框下方加一行快捷键说明",AI 自动完成

内置页面与服务

内置页面(7 条路由)

通过左右滑动或两侧箭头切换前 6 个页面(从左到右即表中顺序):

路由 页面 说明
/registry 远程服务仓库 浏览/导入远程仓库中的服务
/services 服务浏览 已安装服务列表、导入、分享
/ AI 对话 与 AI 多轮对话
/quick 快捷页 可自定义的快捷页面(widget 宿主)
/settings 设置 配置管理(API Key、供应商、Agent、主题、日志)
/memory 记忆管理 查看/编辑 MEMORY.md 与 USER.md
/service/:id 服务容器 iframe 沙箱中运行服务(左上角浮动返回按钮)

用户预置服务(user.*)

首次启动时自动安装 3 个预置服务,展示 JSBridge 各模块的真实用法;更多服务可通过远程服务仓库安装。

ID 名称 说明 涉及 API
user.music_player 音乐播放器 本地音乐扫描播放、顺序/随机模式、后台播放、悬浮块控制 storage notification widgets background fileAccess
user.quick_note 快速笔记 全局悬浮块随时速记,主界面管理/搜索笔记 storage notification widgets
user.rss_reader RSS 阅读器 订阅 RSS 源,聚合阅读最新文章 storage notification fetch

服务 API (JSBridge)

AI 生成的服务运行在 <iframe sandbox> 中,通过 window.__amiba__ 全局对象调用宿主能力。所有 API 均需在服务 manifest 中声明对应权限。

模块 权限 说明
storage storage 服务专属键值存储
notification notification Toast 通知
ui — 页面导航
widgets widgets 悬浮块管理
network network 局域网/蓝牙设备发现与对等通信
desktopWidget desktopWidgets 安卓系统桌面卡片数据发布(仅卡片 logic.js 沙箱可用)

storage — 键值存储

服务拥有独立的 key-value 存储空间,数据持久化到本地磁盘。

await __amiba__.storage.set('count', 42)
const count = await __amiba__.storage.get('count')
await __amiba__.storage.remove('count')
方法 参数 返回
set(key, data) key: string, data: any Promise<void>
get(key) key: string Promise<any>
remove(key) key: string Promise<void>

notification — 通知

await __amiba__.showToast('保存成功', 'success')
方法 参数 返回
showToast(title, icon?) title: string, icon?: 'success' | 'error' | 'loading' | 'none' Promise<void>

ui — 页面导航

await __amiba__.navigateTo('/services')
await __amiba__.navigateBack()
方法 参数 返回
navigateTo(url) url: string Promise<void>
navigateBack(delta?) delta?: number Promise<void>

widgets — 悬浮块

编程式注册和控制浮动面板。也支持通过服务目录下 widget.json 声明式配置(详见 服务模型)。

await __amiba__.widgets.register({
  id: 'my-widget',
  icon: '🔔',
  page: 'widgets/alert.html',
  edge: 'right',
  position: 200,
  showOn: [],
  trigger: 'manual'
})
await __amiba__.widgets.show('my-widget')
await __amiba__.widgets.hide('my-widget')
await __amiba__.widgets.remove('my-widget')
方法 参数 返回
register(config) config: FloatingWidgetConfig Promise<void>
remove(id) id: string Promise<void>
show(id) id: string Promise<void>
hide(id) id: string Promise<void>

FloatingWidgetConfig 字段:

字段 类型 必填 说明
id string ✅ 唯一标识,kebab-case
icon string ✅ emoji 图标,如 "📝"
label string — 悬停提示文字
page string ✅ Widget HTML 文件路径
edge 'left' | 'right' ✅ 吸附边缘
position number ✅ 初始 y 位置(px,距顶部)
showOn string[] ✅ 生命周期路由名,空数组 = 全局
trigger 'manual' | 'page' ✅ manual = API 控制(默认),page = 进入 showOn 路由时自动显示

network — 局域网/蓝牙通信

设备发现、对等连接和消息收发。详见 网络互联通信。

// 可见性与发现
await __amiba__.network.setVisibility({ lan: true, ble: false })
const vis = await __amiba__.network.getVisibility()
await __amiba__.network.startDiscovery('lan')
await __amiba__.network.stopDiscovery('lan')
const devices = await __amiba__.network.getVisibleDevices()
__amiba__.network.onPeerDiscovered((peer) => { /* { id, name, transport, address } */ })

// TCP 监听(按需启动,才能接收外来连接)
await __amiba__.network.startListening('my-service')
await __amiba__.network.stopListening('my-service')

// 主动连接(含服务匹配)
const session = await __amiba__.network.connect(peerId, 'my-service')
await session.send(JSON.stringify({ type: 'chat', text: 'hello' }))
session.on('message', (msg) => { const data = JSON.parse(msg); /* ... */ })
session.on('close', (reason) => { /* 对方断开 */ })
await session.close()

// 接受外来连接
__amiba__.network.onSession((session) => { /* 同上 */ })

可见性与发现:

方法 参数 返回
setVisibility(opts) { lan: boolean, ble: boolean } Promise<void>
getVisibility() — Promise<{ lan: boolean, ble: boolean }>
startDiscovery(transport) 'lan' | 'ble' | 'all' Promise<void>
stopDiscovery(transport) 'lan' | 'ble' | 'all' Promise<void>
getVisibleDevices() — DiscoveredPeer[]
onPeerDiscovered(cb) (peer: DiscoveredPeer) => void void

Session 管理:

方法 参数 返回
connect(peerId, serviceKey) peerId: string, serviceKey: string Promise<Session>
onSession(cb) (session: Session) => void void
startListening(serviceKey) serviceKey: string Promise<void>
stopListening(serviceKey) serviceKey: string Promise<void>

Session 对象属性/方法:

属性/方法 说明
.id Session UUID
.peerId 对端设备 ID
.peerName 对端设备名称
.send(message) 发送 string 消息,返回 Promise<void>
.close() 关闭会话,返回 Promise<void>
.on('message', cb) 监听消息,cb(message: string)
.on('close', cb) 监听关闭,cb(reason?: string)

服务声明权限

权限 说明
storage 服务专属键值存储
notification Toast 通知
widgets 悬浮块功能
network 局域网/蓝牙互联通信(设备发现、消息收发)
background 后台持续运行(隐藏 iframe),定时调度/事件驱动
fileAccess 授权访问磁盘文件(选择文件夹、列出/读取)
fetch HTTP 请求外部 API(Rust reqwest 代理,绕过 CORS)
desktopWidgets 安卓系统桌面卡片(服务自带 desktop-widgets/ 卡片目录)

服务界面风格

生成服务的 UI 必须遵循平台统一的玉石玻璃风:在 index.html 中引入 <link href="/libs/jade.css" rel="stylesheet"> 即可获得设计令牌(玉青色系、圆角、阴影)、玻璃辉光背景和卡片/按钮/输入框/模态等组件类。详见 服务界面风格指南。

Android 构建

本地构建 APK

# 1. 安装 Android SDK(Android Studio → SDK Manager → SDK 34 + NDK 27)
# 2. 设置环境变量
export ANDROID_HOME=~/Android/Sdk
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/27.0.xxxx

# 3. 添加 Rust Android targets
rustup target add aarch64-linux-android armv7-linux-androideabi

# 4. 初始化 Android 项目(生成 src-tauri/gen/android/)
cargo tauri android init

# 5. 构建
cargo tauri android build     # release APK
cargo tauri android dev       # debug 到连接的设备

输出:src-tauri/gen/android/app/build/outputs/apk/universal/release/

注意:首次本地构建需要 .cargo/config.toml 指定 NDK 链接器(CI 自动生成,本地需手动添加)。

签名 APK

Release APK 需要签名才能安装到设备或上架 Google Play。

本地签名(自用测试):

# 1. 生成 keystore(仅首次)
"C:\Program Files\Java\jdk-23.0.1\bin\keytool" -genkey -v \
  -keystore release.keystore -alias amiba \
  -keyalg RSA -keysize 2048 -validity 10000 \
  -dname "CN=belowthetree, OU=Dev, O=Unknown, L=Unknown, ST=Unknown, C=CN" \
  -storepass 你的密码 -keypass 你的密码

# 2. 用 apksigner 签名 APK
%ANDROID_HOME%\build-tools\35.0.0\apksigner sign \
  --ks release.keystore --ks-key-alias amiba \
  --out app-release-signed.apk \
  app-universal-release-unsigned.apk

# 3. 安装到设备
adb install -r app-release-signed.apk

⚠️ keystore 文件不要提交到 git,它包含你的私钥。只需将 base64 编码后存入 GitHub Secrets。

CI 自动签名

  1. 在 GitHub 仓库 → Settings → Secrets → Actions 添加:
Secret 名称 说明
KEYSTORE_BASE64 keystore 文件的 base64 编码
KEYSTORE_PASSWORD keystore 密码
KEY_PASSWORD key 密码
  1. package.json 版本变更 push 到 main → CI 自动构建并签名 APK → 发布到 GitHub Releases。

架构

┌──────────────────────────────────────────────┐
│                   ChatPage                    │
│  ┌─────────────┐  ┌──────────────────────┐   │
│  │ AI 对话      │  │ iframe 沙箱(服务运行)│   │
│  │ · 多 session │  │ · JSBridge           │   │
│  │ · 流式输出   │  │ · __amiba__ API       │   │
│  │ · 技能/记忆  │  │ · Chart.js            │   │
│  └──────┬───────┘  └──────────────────────┘   │
│         │                                      │
│  ┌──────▼──────────────────────────────────┐   │
│  │            AI Core (src/ai/)             │   │
│  │  agent.ts    → 多工具循环 + 流式对话      │   │
│  │  system-prompt.ts → 两层缓存 + nudge     │   │
│  │  soul.ts     → 人格管理 + 引导           │   │
│  │  session.ts  → 多 session 管理           │   │
│  │  memory-store.ts → 实时记忆缓存          │   │
│  │  skill-curator.ts → 技能生命周期         │   │
│  │  requirement-store.ts → 需求追踪         │   │
│  └──────┬──────────────────────────────────┘   │
│         │                                      │
│  ┌──────▼──────────────────────────────────┐   │
│  │       ToolRegistry (src/tools/)          │   │
│  │  30+ 工具: memory, service_create,       │   │
│  │  service_file_*, skill_manage_*,         │   │
│  │  requirement_*, soul_save, ...           │   │
│  └──────────────────────────────────────────┘   │
└──────────────────────────────────────────────┘

工具清单

类别 工具 说明
记忆 memory 写入 MEMORY.md / USER.md
人格 soul_save 创建/更新 AI 人格文件
服务 service_create service_file_list/read/write/edit service_validate service_archive service_rollback 创建服务骨架、文件级编辑、校验、版本快照/回滚
技能 skill_view skills_list 查看/列出技能
技能管理 skill_manage_create/patch/edit/delete/write_file AI 自主创建和修改技能
需求 requirement_view requirement_update requirements_summary 需求追踪
文档 doc_list doc_read doc_search 平台文档库查询(含服务风格指南)
会话 session_search SQLite FTS5 搜索历史会话
网页 web_fetch web_browse 网页抓取与浏览器交互
界面 ui_theme_view/list/set_variable/set_css/reset/create/delete/switch 主题管理与外观定制
界面 ui_slot_list/get/set/remove 插槽/内嵌组件管理
桌面卡片 desktop_widget_create/list/enable/refresh/delete 系统桌面卡片管理(Android / 鸿蒙)

记忆与需求机制

每 10 轮对话,系统自动注入检查指令,要求 AI 在回复之前:

  1. 记忆检查:用户偏好、重要决策 → memory 工具
  2. 需求检查:服务功能需求、优化建议 → requirement_update 工具

/new 命令会在清空对话前捕获上下文,下一会话开始时提示 AI 保存重要信息。

项目结构

src/
├── ai/               AI 核心(agent, system-prompt, soul, session, memory, skill, requirement, curator)
├── tools/            30+ AI 工具(自动发现,含 ui_theme_*/ui_slot_* 界面定制)
├── host/             服务运行时(沙箱、JSBridge、注册表)
├── pages/            6 个导航页面(Chat, ServiceBrowse, Quick, RemoteServices, Settings, Memory)
├── components/       可复用组件(GlassBackground 玻璃背景、EdgeNavHint 边缘翻页等)
├── config/           配置、存储抽象、主题引擎(theme-store.ts)、polyfill
├── router/           路由 + PAGE_ORDER 页面序列
└── types/            类型定义
public/themes/        内置主题文件(default/dark/ocean)
public/libs/          服务可复用库(jade.css 玉石玻璃风样式、vue/chart 预置库)
public/docs/          AI 可读的内置文档(沙箱约束、服务风格指南等)
docs/                 详细设计文档
skills/               技能文件目录

详细文档

文档 内容
架构 系统总体设计
Session 多 session 管理
System Prompt 两层缓存结构
记忆系统 持久记忆机制
人格系统 SOUL.md 管理
技能进化 四阶段技能演化
需求追踪 双层需求体系
工具系统 工具清单
JSBridge 沙箱通信协议
网络互联通信 局域网/蓝牙设备发现与对等通信
服务生成 服务生成与运行
开发指南 开发规范
界面定制 CSS 选择器速查表 + 变量参考 + 插槽
服务界面风格 玉石玻璃风实现说明 + jade.css 用法
安卓桌面卡片 系统桌面小组件(AppWidget)设计与开发

CI/CD

修改 package.json 版本号并 push 到 main 自动:

  1. 检测版本是否已发布(tag 是否存在)
  2. 构建 Windows / macOS / Linux / Android
  3. 创建 v{version} tag → 发布到 GitHub Releases
npm version patch      # 0.1.4 → 0.1.5
git push origin main   # 触发构建

也支持手动触发(Actions → workflow_dispatch)。

主题系统

变形虫内置多主题系统,用户可通过对话让 AI 自由定制界面外观。

{AppData}/amiba/theme/
  default/          ← 玉石玻璃风基准(玉青主色 + 半透明玻璃表面,只读)
  dark/             ← 深色模式(只读)
  ocean/            ← 蓝色系(只读)
  我的主题/         ← 用户创建(可改可删)
  slots/            ← 全局插槽 HTML
  • CSS 变量驱动:30 个变量(颜色/圆角/阴影/字体/间距)定义在 App.vue :root,所有页面样式通过 var(--*) 引用
  • 即改即生效:修改任意 CSS 变量,全局立即刷新
  • AI 对话操作:用户说"换成深色"→ AI 调用 ui_theme_switch("dark");"所有按钮改圆角"→ ui_theme_set_variable("--radius-sm", "12px")
  • 详细参考:界面定制指南 — CSS 选择器速查表 + 变量说明 + 插槽列表

Star 增长趋势

Star History Chart

License

MIT © 2026 belowthetree

About

AI-powered cross-platform instant-app platform. Describe your needs in natural language — AI generates mini-apps that run instantly in iframe sandboxes.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages