一个使用 AI Coding 协作创建并持续迭代的 Electron 桌面应用项目,当前定位是本地优先的 AI Agent 聊天工作台。项目基于 Electron Forge、Vite、Vue 3 和 TypeScript 构建,围绕“本地账号 + 多模型提供商 + Agent 能力编排 + 桌面端持久化”展开。
- 支持本地注册、登录、登出
- 认证状态由主进程统一管理,渲染进程不直接接触 SQLite 和凭据存储
- 应用启动通过统一的
app.getBootstrap()拉取数据库状态、认证状态、Provider 可用性、聊天摘要和推荐路由 - 当前入口与核心页面:
/:启动重定向页,会根据当前状态跳转/auth:登录 / 注册页/chat:受保护的聊天工作区/chat/:id:受保护的会话详情页
- 以聊天工作区为主界面,而不是模板式首页
- 支持新建会话、历史会话列表、会话切换和删除
- 支持流式响应,展示进行中的工具调用状态
- 会话消息持久化到 SQLite,保留原始消息、运行时快照和调用元数据
- 每个会话持久化独立运行时配置:
- Provider
- Model
- System Prompt
- Tool Policy
- Enabled Capabilities
- 支持
/skill-name形式的单次技能显式唤醒
- 内置 API Key Provider:
- OpenAI
- Anthropic
- 支持
@mariozechner/pi-ai/oauth暴露的 OAuth Provider - 支持 OpenAI-compatible Provider:
- 自定义
baseUrl - 自动请求
${baseUrl}/models做模型发现 - 发现失败时仍可手动维护模型列表
- 自定义
- Provider 可用性会汇总到应用启动态与聊天入口守卫中
- 内置工具支持全局启停,当前已接入:
readgrepfindlseditwritebash
- 支持持久化管理 MCP Server:
- 保存连接配置
- 加密保存敏感信息
- 记录最近一次检查结果和错误信息
- 启用后对后续聊天请求全局生效
- 支持托管 Skills:
- 从应用管理的技能目录发现技能
- 支持启停和详情查看
- 支持
disable-model-invocation约束
- 聊天请求通过
@mariozechner/pi-coding-agent的AgentSession执行,而不是只做单纯模型流式调用
- 主进程负责 SQLite 初始化、迁移执行和数据库访问
- 数据库当前覆盖:
- 用户与会话
- Provider 配置与模型
- MCP Server
- Conversations / Messages
- Managed Skills
- Built-in Tools
- 优先使用 Electron
safeStorage加密 Provider / MCP 敏感信息 - 通过 Preload +
contextBridge暴露受控桌面能力 - 通过 oRPC 在主进程与渲染进程之间传递类型安全的应用能力
- Vue 3 Composition API +
<script setup lang="ts"> - 使用
@nuxt/ui构建桌面端 UI - 支持中文 / 英文切换与持久化
- Electron 哈希路由,适配桌面分发场景
- GitHub Actions 支持多平台 Electron 打包
- Electron Forge
- Vite
- Vue 3
- TypeScript
- @nuxt/ui
- Vue Router
- Vue I18n
- oRPC
- Drizzle ORM + SQLite
@mariozechner/pi-ai@mariozechner/pi-coding-agent- Tailwind CSS
- ESLint (
@antfu/eslint-config)
- Node.js 24+
- pnpm 10+
pnpm install
pnpm start常用命令:
pnpm start
pnpm lint
pnpm typecheck
pnpm db:generate
pnpm db:delete
pnpm db:studio
pnpm package
pnpm make脚本说明:
pnpm start:启动 Electron Forge 开发环境pnpm lint:运行 ESLint 并自动修复可修复问题pnpm typecheck:运行vue-tsc类型检查pnpm db:generate:根据 Drizzle Schema 生成 SQLite migrationpnpm db:delete:删除本地开发数据库pnpm db:studio:启动 Drizzle Studiopnpm package:构建应用但不生成安装包pnpm make:生成平台分发产物
src/
main/ Electron 主进程入口、生命周期、窗口与业务服务
main/services/ 认证、聊天、Provider、Agent 能力编排
main/database/ SQLite、Drizzle Schema、迁移引导
preload/ 预加载桥接 API
renderer/ Vue 渲染进程应用
renderer/composables/chat/
聊天工作区状态与流式编排
shared/ 跨进程共享类型与协议
drizzle/ SQLite migration 文件
docs/ 贡献者与实现说明文档
- docs/auth.md:本地认证与统一启动引导
- docs/chat-workspace.md:聊天工作区、路由与流式消息模型
- docs/settings-capabilities.md:Providers / MCP / Skills / Built-in Tools
- docs/database.md:SQLite、Drizzle 与当前表结构
- docs/i18n.md:国际化实现
- docs/github-actions-packaging.md:GitHub Actions 打包流程
- 优先使用
pnpm - 渲染进程使用 Vue 3 Composition API 与
<script setup lang="ts"> - 桌面端能力通过
preload暴露,不直接向页面开放 Node.js 能力 - 修改共享行为或公共能力时,同步更新
docs/ - 新增生产依赖前先确认
当前仓库没有独立测试框架,建议至少手动验证以下内容:
- 运行
pnpm start,确认应用能正常启动 - 完成注册 / 登录,确认认证和路由守卫工作正常
- 配置至少一个可用 Provider,确认可以进入聊天工作区
- 验证会话创建、消息发送、历史记录和设置弹窗
- 运行
pnpm lint - 运行
pnpm typecheck
MIT