ScreenWright

agent
Security Audit
Pass
Health Pass
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 14 GitHub stars
Code Pass
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

AI 原生的数据大屏 / BI 可视化编辑器:用自然语言、Figma 或截图让多 Agent 协作搭大屏、接数据、配联动,改动实时同步画布。

README.md

ScreenWright

CI Release License: MIT

AI 原生的数据大屏 / BI 可视化编辑器。跟 Agent 描述需求,或者给一个 Figma 链接,它会直接在画布上创建组件、接上数据、配好联动,产出一个可以继续在编辑器里改的大屏。

Monorepo:apps/app(Vue 3 编辑器)+ servers/server(Hono + Mastra Agent 服务)+ packages/*(框架无关的核心与物料)+ apps/desktop(Tauri 桌面端)。

ScreenWright 对话生成大屏效果图


能做什么

把需求描述清楚,Agent 会自己做语义分区、挑组件、生成 Schema、排版,实时同步到画布,改动前可以审批,也可以回溯。也可以给一个 Figma 链接:设计稿数据来自我们自己的 packages/figma-helper 插件(在 Figma 里把节点提取、简化成结构化数据),Agent 拿到这份数据后走确定性的规则转换生成组件树,不需要再重新识别一遍版式。

组件能力覆盖不到的效果,内置的 Artifact App 子系统可以在沙箱里直接写 Vue 代码并实时预览。数据接好之后 Agent 会自己跑一遍数据流做校验。做好的大屏可以存成模板,之后复用。

编辑器本身带了 76+ 物料组件(图表、文本、指标、媒体、交互、地图下钻等),可以导出成脱离编辑器运行的静态包。桌面端用 Tauri 打包,SQLite 本地跑,不需要登录。


架构

编辑器(apps/app)和 Agent 服务(servers/server)是两个独立进程:编辑器管画布渲染和交互,Agent 服务管规划、调用工具、读写大屏数据,两者之间用 SSE 流式通信。

编辑器内部按"核心逻辑 / 框架适配"分层:packages/core 是不依赖任何 UI 框架的编辑器核心(画布状态、组件树、事件系统),packages/composables 把它包装成 Vue 的 composable 给 apps/app 用。这样拆是为了以后核心逻辑要迁移到别的框架,或者做无头(headless)场景时,不用把这部分逻辑重写一遍。

物料组件(packages/material)和类型 / Zod Schema(packages/types)各自独立成包——编辑器和 Agent 服务都要用同一套组件定义和数据结构,独立出来两边引用同一份;物料也因此可以单独打包发布,不用绑着整个编辑器一起发。

桌面端(apps/desktop)是 Tauri 壳,把编辑器和 Agent 服务一起打进安装包,用内置的 Node sidecar 跑 Agent 服务,数据库换成本地 SQLite。

大屏怎么保持最新

大屏组件树存成两块:大屏和版本信息在 LargeScreen / LargeScreenVersion 表,每个组件单独一行存在 Layers 表里,前端读取时递归拼成完整的组件树。

用户在画布上手动拖拽、改属性,走的是普通 REST 接口,每次改动即时提交,没有防抖,也没有乐观锁。Agent 修改是另一条路:工具调用完之后,通过 Mastra 的 suspend/resume 把算好的组件结果,从同一条对话 SSE 流推给前端,前端合并进画布状态后,再回调同一套 REST 接口落库——两条路径最终都写同一张表。Agent 那边另外维护一份工作区文件镜像(由前端整屏同步生成),供它的读写文件类工具使用。

flowchart LR
    U[用户手动编辑] -->|REST| DB[(Layers 表)]
    T[Agent 工具调用] -->|suspend/resume| SSE[对话 SSE 流]
    SSE --> C[前端合并进画布]
    C -->|REST| DB
    T -.镜像.-> WS[工作区文件]

同一浏览器里多个对话 Tab 同时跑 Agent 时,画布写入靠前端内存里的一个 Promise 队列做串行化,避免几个 Tab 互相打断。

目录 说明
apps/app 主编辑器(Vue 3 + Vite + ECharts + Three.js)
apps/desktop Tauri 2 桌面壳
servers/server Agent 服务(Hono + Mastra + Prisma/SQLite)
packages/core 编辑器核心(不依赖任何 UI 框架)
packages/composables core 的 Vue composable 封装
packages/material 物料组件包
packages/types 类型与 Zod Schema

快速开始

环境要求:Node ≥ 22.13,pnpm 10(corepack enable 即可)。

git clone https://github.com/Onweekendd/ScreenWright.git
cd ScreenWright
pnpm install

1. 配置 Agent 服务

cp servers/server/.env.example servers/server/.env

按角色填模型配置:REASONING_MODEL_*(推理)、VISION_MODEL_*(视觉)、EMBEDDING_MODEL_*(嵌入),均按 OpenAI 兼容端点处理;也可以全部留空,启动后在「设置」页填。其余保持默认即走本地 SQLite + 本地文件存储。

初始化数据库:

pnpm --dir servers/server exec dotenvx run -- prisma migrate deploy   # 建表
pnpm --dir servers/server run seed-modules                            # 组件库
pnpm --dir servers/server run seed-bi-user                            # 默认账号 admin / admin123
pnpm --dir servers/server run seed-embeddings -- --reset              # 组件 RAG 向量(可选)

2. 启动

pnpm server:dev   # Agent 服务 → http://localhost:4111
pnpm dev          # 编辑器   → http://localhost:5173

打开编辑器,进入任意大屏,右侧 AgentBI 面板即可开始对话。

3. 桌面端(可选)

pnpm desktop            # 开发模式(Tauri 拉起前端 + 后端)
pnpm desktop:package    # 构建 sidecar 并打包安装程序

详见 apps/desktop/README.md


技术栈

Vue 3 · TypeScript · Vite · Mastra Agent · Hono · Prisma · SQLite · Tauri 2 · pnpm workspace / Turborepo


Roadmap

  • 图片转大屏(自研,替代目前对 Codia 的依赖)

    • 截图 / 参考图 → 版面区域切分与层级识别
    • 区域内容 → 组件类型与配置的还原(图表类型、文本、指标卡等)
    • 和现有 Figma 链路共用同一套语义布局 Agent,而不是另起一条路径
  • 文档 / 图片 / 视频向量化

    • 先覆盖 PDF、常见图片格式,视频先从关键帧和字幕入手
    • 向量化后可以在对话中被检索、引用,作为生成大屏时的素材或背景资料
    • 长期可以支撑基于这些资料的问答、指标解释这类场景
  • 数据源接入(BI 系统的核心,优先级最高)

    • 常见关系型数据库直连(MySQL、PostgreSQL 等)
    • 数据源的连接管理、Schema 识别,辅助 Agent 判断该用什么图表
    • 视情况再扩展到时序库 / NoSQL
  • 用户编辑与 Agent 编辑的并发保护

    • 目前两条路径都是直接写库,没有乐观锁,理论上会后写覆盖前写
    • 打算做成最小可行的冲突检测(比如基于版本号/时间戳),而不是复杂的实时协同
  • Artifact App 的构建与沙箱化

    • 现在的 LocalSandbox 就是本地子进程 + 固定工作目录,代码里也写明了不提供文件系统/进程/网络层面的隔离,不能跑不可信代码
    • 计划换成真正隔离的沙箱(容器化),Agent 生成的代码不应该是直接在宿主机上跑的
    • 补上构建/导出链路,让 Artifact App 也能像大屏一样导出成可独立部署的产物,而不是只能停留在预览代理里

License

MIT

Reviews (0)

No results found