# Android App(apps/mobile) 自己使用的 Android 客户端:在 App 里填写 Agent Key 和 Bot Key,直接调用 AgentServer 的 `/v1`(对话)和 `/bot/v1`(工作组)。 技术栈:Vue 3 + Capacitor 8,界面复用 `@agent-server/chat-ui`(`AgentChat`、`TeamChat`),请求复用 `@agent-server/client`。 ## 功能 | 模块 | 功能 | |---|---| | 对话(Agent Key) | 选择 Profile 新建会话;会话列表、已归档、重命名、归档、删除;流式输出、中断、审批与提问、上传附件;定时任务与后台调用(组件自带);会话文件;用量统计 | | 工作组(Bot Key) | 新建工作组(选组长、组员,查看能力卡片);按状态筛选;群聊、@ 机器人、任务进度、限额卡片;暂停、恢复、关闭、重新打开、重命名、删除;成员的添加、移出、停止、开始新会话;任务列表(继续或取消);文件;用量;限额 | | 设置 | 服务地址、两种 Key(可测试连接)、在工作组中的称呼、主题 | 文件:图片和文本在 App 内预览,其他文件通过系统分享面板用其他 App 打开或保存。 ## 服务端需要的配置 App 的 WebView 来源是 `https://mobile.zenpower.local`(见 `capacitor.config.ts`)。需要在后台「系统设置」的「允许浏览器直接调用 API 的业务平台来源(CORS)」中加入这个地址,否则请求会被跨域拦截。 ## 开发 ```bash pnpm dev:mobile # 浏览器中调试:http://127.0.0.1:5175,/v1 与 /bot/v1 通过 Vite 代理转发 AGENT_SERVER_URL=http://127.0.0.1:8788 pnpm dev:mobile # 改为转发到本地开发服务 ``` 浏览器调试时,用 DevTools 切换到手机尺寸。设置保存在 localStorage 中,不需要配置跨域。 ## 打包 APK ```bash pnpm apk # 构建前端 → cap sync → gradlew assembleDebug ``` 产物:`apps/mobile/android/app/build/outputs/apk/debug/app-debug.apk`,复制到手机后安装(需要允许安装未知来源的应用)。 本机环境: - JDK 21(Capacitor 8 需要),通过 `~/.gradle/gradle.properties` 的 `org.gradle.java.home` 指定 - Android SDK 在 `~/Android/Sdk`,通过 `android/local.properties` 的 `sdk.dir` 指定(该文件不提交);缺少的 SDK 平台由 Gradle 自动下载 ## 发布到下载页 ```bash # 先修改 package.json 的 version(versionCode 由它计算,覆盖安装要求只增不减) deploy/release-apk.sh # 打包 → dist-mobile/ → /srv/agent-server/app/mobile/,不需要重启服务 ``` 下载页:`https://agent.zenpower.cc/app`(公开,含介绍、扫码与安装说明);`/app/index.json` 为最新版本信息。 `pnpm -r build`(部署脚本使用)不会构建这个应用:前端构建命令是 `build:web`,不叫 `build`。 ## 限制 - App 在后台时系统会断开流式连接,回到前台后自动重连并补齐消息;没有推送通知。 - Key 保存在 App 的私有存储中(未加密)。手机丢失时,到后台停用对应的 Key。