本地开发与打包
三个仓库放在同一个父目录下,pnpm dev:all 会按这个结构去找同级的 server:
文件夹outbrief/
文件夹outbrief-server/ Hono 服务端 + MySQL
- …
文件夹outbrief-app/ Tauri 2 + React 19 客户端
- …
文件夹outbrief-daemon/ 每台电脑上的常驻进程
- …
共同依赖:Node ≥ 22.18、pnpm 9。App 另外需要 Rust stable ≥ 1.85 和 Tauri 的平台依赖,server 需要 Docker。
1. 本机数据库
Section titled “1. 本机数据库”本地数据库是一个 MySQL 8 容器,名字必须是 some-mysql,端口映射到本机 3306。pnpm dev:all 只按这个名字找容器,不会自动创建。
-
第一次先创建容器。
MYSQL_ROOT_PASSWORD只给本机的 root 用:终端窗口 docker run -d --name some-mysql --restart unless-stopped \-e MYSQL_ROOT_PASSWORD='local-root-password' \-p 3306:3306 mysql:8.4until docker exec some-mysql mysqladmin ping -h127.0.0.1 --silent; do sleep 1; done -
在 outbrief-server 目录里建库和账号,只需要执行一次。提示输入口令时,填上面的 root 口令:
终端窗口 docker exec -i some-mysql mysql -uroot -p < db/bootstrap.sql这一步会创建
outbrief和outbrief_test两个库,以及一个只给本机用的outbrief用户。
容器已经存在时,不要再 docker run,停着的话用 docker start some-mysql 启动。
2. 跑起来
Section titled “2. 跑起来”在 outbrief-app 目录里:
pnpm installpnpm dev:all它会依次拉起数据库容器、同级目录的 server 和桌面窗口,server 日志写在 logs/server.log。在托盘里点「退出」,或者按 Ctrl+C,会一起停止。
- server 不在同级目录时,用
OUTBRIEF_SERVER_DIR=<目录>指定。 - 脚本会把认领码传给桌面端,让它自动创建第一个账号。本机有 daemon 时,会改成加入 daemon 的账号。
- 启动前会先关掉还在运行的旧桌面端。
# outbrief-serverpnpm db:migrate # 建表(启动时也会自动执行)pnpm dev # 改代码自动重启
# outbrief-apppnpm tauri dev # 桌面窗口 + 热更新,前端端口 :1520pnpm dev # 只起前端,在浏览器里调 UI
# outbrief-daemonnode src/cli.ts login --server http://127.0.0.1:8787node src/cli.ts run三个仓库都有这几条:
| 命令 | 作用 |
|---|---|
pnpm lint / pnpm format |
Biome 检查 / 自动修复 |
pnpm typecheck |
TypeScript 类型检查 |
pnpm test |
Vitest。server 的测试会清空 OUTBRIEF_TEST_DATABASE_URL 指向的库,库名必须以 _test 结尾 |
App 另外还有:
| 命令 | 作用 |
|---|---|
pnpm build |
构建前端到 dist/ |
pnpm tauri build |
打包桌面安装包 |
pnpm tauri android init / ios init |
生成本地的 Android / iOS 工程 |
scripts/build-android.sh |
打包可安装的 Android APK |
数据库表结构只在 server 的 db/migrations/NNN_*.sql 里定义。要新增表或字段,就新建一个迁移文件,不要修改已经执行过的文件。
Android 安装包
Section titled “Android 安装包”scripts/build-android.sh 会打出一个签名的 arm64 release APK,产物在 dist-android/OutBrief.apk,可以直接装到手机上。
-
装好工具链:rustup(
rustup target add aarch64-linux-android,Homebrew 版的 rust 没有 Android 目标)、JDK 17、Android SDK(platforms;android-36、build-tools)和 NDK,并设置好ANDROID_HOME、NDK_HOME、JAVA_HOME。 -
(要来电推送的话)准备 Firebase 配置:在 Firebase 控制台给
ai.outbrief.app添加 Android 应用,把下载的google-services.json放到~/.outbrief-android/firebase/,或者用OUTBRIEF_FIREBASE_CONFIG=<路径>指定。 -
打包。服务地址默认是
https://api.outbriefapp.com,用VITE_OUTBRIEF_SERVER_URL换成你自己的:终端窗口 VITE_OUTBRIEF_SERVER_URL=https://your-server.example scripts/build-android.sh
中文名「启奏」:朱红底上一本展开的金边奏折,折页上的竖行字画成了声波,寓意 Agent 上奏、用语音汇报。
源文件是 outbrief-app 的 app-icon.svg。改完后导出 1024×1024 的 app-icon.png,再运行 pnpm tauri icon app-icon.json 重新生成所有尺寸。Android 自适应图标分成两层:app-icon-android-bg.svg 和 app-icon-android-fg.svg,改了主图的配色或图形,这两个文件也要同步改。