分析完成。下面是 OpenNative 的完整功能描述。
OpenNative 功能描述
OpenNative 把「本地推理引擎 + 云端 Agent + 创意工作流 + 浏览器 + 设备协同 + 自动化」整合进一个 Electron 桌面壳。下面按功能模块逐一描述。
一、双 AI 引擎(两条独立推理链路)
项目同时支持两套引擎,互不干扰:
1A. 本地引擎 — Engine 页面(/engine,1059 行)
驱动 node-llama-cpp 本地推理,完全离线:
| 能力 | 说明 |
|---|---|
| 模型加载 | 选 GGUF 文件、读取模型元信息(架构/上下文长度/大小) |
| 模型参数 | contextSize / gpuLayers / batchSize / threads / chatWrapper / flashAttention |
| 采样参数 | temperature / topK / topP / minP / seed / maxTokens / repeatPenalty / frequencyPenalty / presencePenalty / dry 采样 |
| 流式对话 | 逐 token 推送(onChatToken 回调),支持中止/重置历史 |
| 工具调用 | 自研 ⌈tool_name⌋{json}⌋ 文本标记协议,9 个本地工具 |
| 工作目录 | 可绑定工作目录,工具在该目录下执行 |
IPC 通道:llama:pick-model / load-model / unload-model / chat / abort / reset-history / set-system-prompt / set-tool-cwd / status。
1B. 云端引擎 — Code 页面(/code,1220 行)
桥接 @earendil-works/pi-coding-agent,17+ provider:
anthropic openai google-gemini deepseek ollama groq
openrouter moonshot kimi 智谱GLM xAI 豆包 通义千问
MiniMax 腾讯混元 百度文心 nvidia 自定义 custom-*
| 能力 | 说明 |
|---|---|
| 多会话 | 多 session 管理,按 cwd 归档,可重命名/删除/在 Finder 中打开 |
| 多模态输入 | 文本 + 图片(PNG/JPEG/WEBP/GIF,dataURL 上传) |
| 思考过程 | 折叠展示 thinking 块,可全局隐藏 |
| 图片读取 | pi:read-image 读本地图片 |
| 消息编辑 | 回填编辑用户消息重新发送、多选删除 |
| 会话持久化 | 基于 pi 的 sqlite-node session-backends |
IPC 通道:pi:start / new-chat / prompt / abort / list-sessions / load-session / get-messages / rename-session / delete-session 等。
二、设计工作流 — Design 页面(/design,2424 行,最大模块)
基于 @xyflow/react 的节点式可视化画布,是项目的核心创意模块。
节点类型(6 种)
| 节点 | 图标 | 功能 |
|---|---|---|
| text_prompt_node | 文本提示词节点 | |
| imagenode | 图像生成节点(text2img / img_edit / img2img / text23d) | |
| videonode | 视频生成节点(text2video / video_edit / img2video) | |
| audionode | 音频节点 | |
| uploadnode | 上传素材节点 | |
| ReferenceChip | 节点间引用芯片 |
配套能力
- 画布(1103 行)— 拖拽连线、缩放、右键菜单(
RightClickMenu) - 画布设置(1135 行)— 分辨率/输出目录等
- 画布 AI 助手(
canvasagentchat684 行)— 在画布内与 AI 对话编排节点 - 历史列表(
canvashistorylist)— 版本回溯 - SketchPad — 草图手绘板
- GenerateEffect —
img-fx库的生成式视觉特效 - canvasSerializer — 画布序列化保存
按模型能力位(CAPABILITIES)动态启用对应节点;画布代码 lazy import,切到时才加载。
三、图像生成服务(imageGenerateService.ts)
文生图 / 图生图,按供应商自动适配两种契约:
| 供应商 | 协议 | 端点 |
|---|---|---|
| 千问/DashScope(含 qwen-image) | JSON POST,image 字段(1 张字符串 / 2-3 张数组,dataURL 或公网 URL) | {base}/images/generations |
| OpenAI 系(gpt-image 等,默认) | multipart/form-data,image 文件字段 | {base}/images/edits |
- 无参考图 两种都走
/images/generations - 参考图 1-3 张 图生图
- 错误码中文化(IPInfringementSuspect / ContentPolicyViolation / Throttling 等)
- 结果自动落盘到
{cwd}/generated-images或指定outputDir,转 base64 回传
四、视频生成服务(videoGenerateService.ts)
DashScope 异步任务协议(通义万相 wan2.1 / happyhorse):
- POST 提交任务 返回
task_id(PENDING) - 每 5s 轮询任务状态,直到 SUCCEEDED/FAILED(超时 5 分钟)
- 下载签名直链
video_url,转 base64 回传
参数:分辨率档(480P/720P/1080P)、宽高比(16:9/9:16/1:1)、时长(3-15s)、数量。
五、网页浏览 — 两条互补路径
5A. Website 页面(/website,613 行)— 站点库
预设站点池按分类组织:
| 分类 | 站点 |
|---|---|
| 社交 | X / Reddit / 微博 / Instagram / TikTok / Facebook / LinkedIn / Discord |
| 开发 | GitHub / GitLab / Bitbucket / Stack Overflow / Dev.to / MDN / Hacker News / Vercel |
| 视频 | YouTube / Bilibili / Netflix / Twitch / 优酷 |
| 资讯 | … |
| 购物 / 工具 / 创作 / 系统 | … |
支持收藏夹增删改、编辑后转自定义、点击在 BrowserView 或系统浏览器打开(local.webLaunchMode 设置)。
5B. Browser 页面(/browse,1570 行)— 内嵌全功能浏览器
基于 Electron BrowserView 原生嵌入,全屏无侧边栏:
| 能力 | 通道 |
|---|---|
| 多标签页 | browser-view:open/destroy |
| 前进/后退/刷新/停止 | back/forward/reload/stop |
| 收藏夹持久化 | app:fav-load/fav-save |
| 多搜索引擎起始页 | Bing/Google/百度 |
| 全屏/缩放 | fullscreen-toggle / zoom-in/out/reset |
| 页内查找 | browser-view:find/stop-find |
| 执行 JS / DevTools | browser-view:exec-js / open-devtools |
| 权限管理 | browser-view:permission-answer(相机/麦克风/通知) |
| 扩展加载 | browser-view:load-extension/remove-extension |
| 下载管理 | DownloadItemInfo |
| favicon 抓取 | app:fetch-favicon |
| 系统浏览器跳转 | app:get-installed-browsers/get-browser-icon/open-url-in-browser |
六、自动化 — Automation 页面(/automation,451 行)
定时任务编排器(数据存 localStorage):
- RRULE 调度 —
describeSchedule解析FREQ=HOURLY/DAILY/WEEKLY+INTERVAL/BYHOUR/BYMINUTE,生成中文描述("每 2 小时"、"每天 9:30"、"每周一") - 任务状态 — ACTIVE/PAUSED,lastStatus: success/failure/running
- 三 Tab — configured(已配置)/ history(历史)/ templates(模板)
- 任务本质是 prompt,按计划触发 pi Agent 执行
七、设备协同 — Devices 页面(/devices,381 行)
基于 bonjour mDNS 的局域网设备发现 + 文件互传(AgentLink):
| 能力 | 说明 |
|---|---|
| 设备发现 | mDNS 广播,实时刷新设备列表(onAgentLinkDevicesChanged) |
| 自我信息 | 名称/端口/地址(agentlink:self/rename/restart) |
| 文件发送 | HTTP POST 流式传输,带进度回调(agentLinkSender.ts) |
| 文件接收 | 内置 HTTP 文件服务器(AgentLinkFileServer),收到文件落盘到保存目录 |
| 保存目录 | 可自定义,open-save-dir 在 Finder 打开 |
| 连通性检测 | agentlink:ping-http 探活对端 |
设备类型识别:Laptop / Server,显示地址/哈希/最后在线时间。
八、设置中心 — Settings 页面(/settings,717 行)
采用声明式元数据驱动(SettingDef 定义 key/label/type/options/defaultValue),三大部分:
8A. 通用设置(SettingsPage.tsx)
toggle / select / number / text / textarea 五种控件类型,按 SettingGroup 分组。已见 local.webLaunchMode(网页打开方式)等。
8B. 模型配置(ModelConfigPanel.tsx,1601 行)
- CRUD 模型(
pi:db-create/update/delete-model) - 启用/禁用(
db-set-model-status) - 选中默认模型(
db-set-selected-model) - 按 provider 设置 API Key(
db-set-api-key-for-provider) - 设置上下文窗口(
pi:set-model-context-window) - 能力位管理(
CAPABILITIES:text2img/img_edit/text2video 等) - 刷新模型列表(
pi:refresh-models) - 注册自定义 provider(
pi:register-custom-provider)
8C. 数据存储(StoragePanel.tsx)
- 显示 SQLite 数据库文件路径
- 在 Finder 中打开 / 复制路径 / 刷新
九、底层支撑能力
9.1 自研 Agent 工具集(agentTools/)
9 个工具,类 Anthropic content 数组协议:
| 工具 | mutating | 用途 |
|---|---|---|
| read | 否 | 读文件,支持行范围 |
| write | 是 | 写文件 |
| edit | 是 | 精确文本替换(多 disjoint 块) |
| ls | 否 | 列目录 |
| grep | 否 | 内容搜索 |
| find | 否 | 文件查找 |
| bash | 否 | 执行命令 |
| system_info | 否 | 系统摘要 |
| preview | 否 | 预览图片/HTML/代码 |
mutating 标记影响 UI 边框样式(写操作高亮警示)。文本回退模式用 ⌈name⌋{json}⌋ 标记解析。
9.2 持久化层(sqlite/)
全部用 Node 内置 node:sqlite(非第三方依赖):
| Store | 职责 |
|---|---|
| modelStore | provider/model 表 + CAPABILITIES 能力位 |
| sessionStore | pi 会话存储(对接 session-backends/sqlite-node) |
| SqliteSessionManager | 会话管理器 |
| settingsStore | KV 设置 + DB↔文件同步迁移 |
数据落盘于 userData/.opennativeai/agent/,默认全本地。
9.3 preload 桥接(850 行)
contextBridge.exposeInMainWorld 暴露三个全局对象:
-
window.pi— pi Agent API(会话/模型/设置/图像视频生成) -
window.llama— 本地 llama.cpp API(含工具调用事件) -
window.electron— 应用通用 API + AgentLink 设备 API
十、功能矩阵总览
| 路由 | 页面 | 核心功能 | 引擎 |
|---|---|---|---|
/website |
Website | 站点库/收藏夹 | — |
/engine |
Engine | 本地 GGUF 对话+工具 | llama.cpp |
/code |
Code | 云端 AI 编程会话 | pi agent |
/design |
Design | 节点画布创意工作流 | pi agent + 图像/视频生成 |
/automation |
Automation | 定时任务 | pi agent |
/devices |
Devices | 局域网文件互传 | bonjour |
/browse |
Browser | 内嵌全功能浏览器 | BrowserView |
/settings |
Settings | 设置+模型+存储 | — |
/about |
About | 关于 | — |
功能定位总结
OpenNative 是一个 「AI 操作系统」式桌面工作台:以本地 llama.cpp + 云端 pi agent 为双引擎,向上承载创意画布(图/视频/音频生成)、AI 编程、定时自动化三大生产力场景,横向打通内嵌浏览器与站点库做信息入口,再用 AgentLink 把多设备串成协同网络,全部数据默认留在本地 SQLite。
差异化亮点:
- 本地+云端双引擎共存(多数同类产品只选其一)
- 节点式画布把多模态生成编排成可视化工作流
- AgentLink 局域网协同,无需公网即可跨设备
- 全本地 SQLite 持久化,隐私优先
- 自研轻量工具协议,文本标记回退不依赖函数调用 API
需要我针对某个功能深入到代码实现细节(如图生图双协议适配、画布序列化、AgentLink 文件传输协议、或 pi 会话存储迁移机制)吗?