# Boss 当前运行与部署状态 更新时间:`2026-03-26` ## 1. 本地状态 当前本地已经验证通过: - `npm run lint` - `npm run build` - Web 健康检查:`http://127.0.0.1:3000/api/health` - 会话聚合接口:`http://127.0.0.1:3000/api/v1/conversations` - 主 Agent 项目详情:`http://127.0.0.1:3000/api/v1/projects/master-agent` - AI 账号摘要接口:`http://127.0.0.1:3000/api/v1/accounts` - 设备 Skill 同步接口:`http://127.0.0.1:3000/api/v1/devices/mac-studio/skills` - 登录接口:`POST http://127.0.0.1:3000/api/auth/login` - 登录态接口:`GET http://127.0.0.1:3000/api/auth/session` - 登录恢复接口:`POST http://127.0.0.1:3000/api/auth/restore` - 登出接口:`POST http://127.0.0.1:3000/api/auth/logout` - OTA 包下载接口:`GET http://127.0.0.1:3000/api/v1/user/ota/package` - 本地 agent 健康检查:`http://127.0.0.1:4317/health` - 本地 Skill 扫描接口:`http://127.0.0.1:4317/api/v1/skills` - 本地 agent 手动 heartbeat:`POST http://127.0.0.1:4317/api/v1/heartbeat` - `launchd` 已安装:`~/Library/LaunchAgents/com.hyzq.boss.local-agent.plist` 本地已知运行方式: ```bash cd /Users/kris/code/boss npm run build npm start ``` ```bash cd /Users/kris/code/boss npm run apk:debug ``` ```bash cd /Users/kris/code/boss npm run apk:release ``` ```bash cd /Users/kris/code/boss npm run aab:release ``` ```bash cd /Users/kris/code/boss ./scripts/start-local-agent.sh ./local-agent/config.example.json ``` 本地常驻安装: ```bash cd /Users/kris/code/boss ./scripts/install-local-launchagent.sh ``` 如需切回本地回环开发控制面: ```bash cd /Users/kris/code/boss ./scripts/install-local-launchagent.sh /Users/kris/code/boss/local-agent/config.example.json ``` 补充说明: - `npm run build` 现在会先自动清理 `.next`,避免 `ENOTEMPTY` - `npm start` 会显式带上 `BOSS_STATE_FILE=$PWD/data/boss-state.json`,避免 Next standalone 把状态写到 `.next/standalone/data` - `npm start`、服务器 `systemd` 与远端 `npm run build` 当前都显式设置了 `BOSS_RUNTIME_ROOT`,避免 `process.cwd()` 在 standalone / 服务器构建阶段误扫描整个仓库 - `next.config.ts` 当前已把 `deployment / docs / design / local-agent / prompts / scripts / android` 等目录排除出 standalone tracing,服务器端构建不会再把非运行时资产卷进 `.next/standalone` - `data/boss-state.json` 的写入已经改成串行事务队列、原子替换和 `.bak` 备份恢复,`heartbeat` 与 APP 日志并发写入已复核通过 - 当前登录成功后会写入 `boss_session` Cookie;`会话 / 设备 / 我的 / 线程` 页面以及主要 `/api/v1/*` 路由都要求有效会话 - 当前 `boss_session` 默认保持 30 天,`Set-Cookie` 已验证为 `Max-Age=2592000` - 原生 Android 客户端当前会把登录返回的 `boss_session / restore token / account` 落到 `SharedPreferences`,并在 APP 启动时通过 `/api/auth/restore` 自动补回会话;已本地验证“登录 -> 取 restore token -> restore 接口恢复”链路 - 登录成功后的客户端跳转当前已做稳态兜底:会先确认 `/api/auth/session` 已可读,再 `replace` 到 `/conversations`,并补一次 `window.location.replace` 防止真机 WebView 偶发卡在登录提示页 - `POST /api/auth/send-code` 当前已增加 60 秒冷却和 15 分钟窗口限流 - `POST /api/auth/send-code` 当前还会先按用途校验账号状态:登录 / 忘记密码必须是已存在账号,注册必须是未注册账号 - 当前账号连续登录失败 5 次后会锁定 10 分钟 - 当前登录页已临时切到免验证模式;点击“登录”会直接创建最高管理员会话,不再校验账号密码或验证码 - 新注册和重置密码当前已切到 `scrypt` 哈希;历史 `sha256` 密码会在下一次密码登录时自动迁移 - `launchd` 会保持 `com.hyzq.boss.local-agent` 常驻,所以本地 agent 被手动结束后会自动重启 - `launchd` 默认加载 `local-agent/config.cloud.json`,控制面指向 `https://boss.hyzq.net` - `local-agent/config.example.json` 仍保留给本地 `127.0.0.1:3000` 回环开发 - 本地 `launchd` 当前已把 `mac-studio` 作为 `17600003315` 的绑定 Codex 节点上报 - 本地 agent 当前会递归扫描 `~/.codex/skills`,并把本机 Skill 同步到云端设备维度 - 根布局当前会挂载 APP 日志桥,路由切换、运行时错误、消息发送和 OTA 操作会通过 `/api/v1/app-logs` 实时同步到服务器;日志绑定已改成按当前登录会话解析设备 - 根布局当前还会挂载原生运行时桥:维护 APP 内导航历史、拦截 Android 返回键、防止根页直接退回桌面,并在 OTA / 同签名覆盖安装后自动尝试恢复登录态 - UI 外壳已收口为真机态:移动端不再渲染假的 `9:41 / 5G` 状态栏,底部一级导航固定在视口底部,背景图按手机 viewport 全屏 cover,WebView 不再显示外层圆角矩形预览壳 - 会话页、设备页、技能页和项目详情页当前都通过 `/api/v1/events` 的 SSE 自动刷新 - 我的页当前新增 `AI 账号` 入口,支持查看 `主 GPT / 备用 GPT / API 容灾`,并明确主链路优先走已经在绑定电脑上登录 `ChatGPT Plus / Codex` 的 `Master Codex Node` - 主 Agent 当前真实对话链路已验证通过:`Boss Web -> /api/v1/projects/master-agent/messages -> master-agent task queue -> local-agent -> codex exec -> /complete -> 项目消息账本` - 主 Agent 同步等待窗口当前为 55 秒;若本机 Codex 节点回复更慢,项目页仍会通过 SSE 在任务完成后自动刷新出真实回复 - `GET /api/v1/app-logs` 当前已支持登录态分页查询 - `POST /api/v1/app-logs`、`POST /api/v1/devices/[deviceId]/skills`、`POST /api/v1/workers/[workerId]/thread-context` 当前都要求有效设备 token 或匹配登录会话 - 设备页当前只保留生产设备;旧演示脏数据已经从设备、运维和审计聚合视图里剔除 - `npm run apk:debug` 当前会自动把最新 APK 发布到 `public/downloads/boss-android-latest.apk`,并写入 `public/downloads/boss-android-latest.json` - `npm run apk:release` 当前会先准备本机 release keystore,再构建 signed release APK 并发布到 `public/downloads/boss-android-latest.apk` - APK 发布脚本当前还会额外保留带版本号的安装包:`public/downloads/boss-android-v{versionName}-{flavor}.apk` - `npm run aab:release` 当前会先准备本机 release keystore,再构建 signed release AAB 并发布到 `public/downloads/boss-android-latest.aab` - AAB 发布脚本当前还会额外保留带版本号的归档包:`public/downloads/boss-android-v{versionName}-{flavor}.aab` - AAB 归档元数据会写入 `public/downloads/boss-android-latest-aab.json` - 当前默认管理员账号:`17600003315` - 当前默认测试密码:`boss123456` - 登录页当前是临时免验证入口;Web 登录页和原生 Android 登录页都会直接创建会话 - 当前已生成 Android debug APK:`android/app/build/outputs/apk/debug/app-debug.apk` - 当前已生成 Android signed release APK:`android/app/build/outputs/apk/release/app-release.apk` - 当前 release 构建还会额外生成带版本号的 APK:`android/app/build/outputs/apk/release/boss-android-v{versionName}-release.apk` - 当前最新 release 构建版本:`2.1.1`(`versionCode=8`) - 当前 release keystore 位于本机 `android/keystores/boss-release.keystore`,签名参数位于 `android/signing/release-signing.properties` - `2.0.1` 已在本机连接的华为真机上复核通过,修复了 `Theme.SplashScreen` 导致的 `AppCompatActivity` 启动闪退 - `2.1.0` 已把 Web 一级页和主要二级页全部补成原生活动页:`MainActivity / ProjectDetailActivity / ProjectGoalsActivity / ProjectVersionsActivity / ProjectForwardActivity / ThreadDetailActivity / DeviceDetailActivity / DeviceEnrollmentActivity / SkillInventoryActivity / SecurityActivity / SettingsActivity / AiAccountsActivity / OpsCenterActivity / AboutActivity` - `2.1.0` 已完成签名包覆盖安装到本机连接的华为真机,并确认 `com.hyzq.boss` 可以成功拉起进程 - `2.1.1` 已补上原生 OTA 下载安装引导、`REQUEST_INSTALL_PACKAGES` 权限声明,以及根页默认入口/返回逻辑收口 ## 2. 服务器状态 服务器信息: - 主机:`106.53.170.158` - 用户:`ubuntu` - 系统:`Ubuntu 24.04.4 LTS` - 代码路径:`/opt/boss` 已验证服务: - `boss-web.service`:运行中 - `caddy.service`:运行中 - `postfix.service`:运行中 - `dovecot.service`:运行中 - `http://127.0.0.1:3000/api/health`:正常 - `http://127.0.0.1:3000/api/v1/conversations`:正常 - SMTP Submission 自测:`127.0.0.1:587` 可认证发信 - IMAPS 监听:`127.0.0.1:993` 正常 服务器上观察到的运行态: - `boss-web` 当前通过 `npm start` 启动 - 实际监听端口为 `3000` - `boss-web.service` 显式设置了 `BOSS_STATE_FILE=/opt/boss/data/boss-state.json` - `Caddy` 反代 `127.0.0.1:3000` - `Postfix` 监听 `25 / 465 / 587` - `Dovecot` 监听 `993` - 当前部署脚本在远端重启服务后会自动执行一遍本机 health check - 当前部署脚本已排除 `data/` 目录,不会再用本地状态文件覆盖服务器上的 `boss-state.json` - 当前部署脚本会先在本机执行 `npm run build`,再把已经验证通过的 `.next` 构建产物同步到服务器 - 当前部署脚本会在 rsync 前先删除服务器旧 `.next` 并修正 `/opt/boss` 所有权,避免历史 root 产物卡住同步 - 服务器当前不再现编 Next standalone,而是直接重启使用本机同步过去的构建产物,避免服务器端 tracing / 权限差异导致构建失败 - 当前部署脚本还会在远端重启前递归修正 `/opt/boss` 所有权到 `ubuntu:ubuntu`,避免运维文件被 root 覆盖后再次污染运行时目录 ## 3. 域名与 HTTPS 状态 当前这部分不是简单的“好了/没好”,而是已经切清楚边界: 已确认的事实: - `Caddy` 服务日志显示,曾在 `2026-03-25 12:33:51 CST` 成功为 `boss.hyzq.net` 获取证书 - 服务器本机 `dig +short boss.hyzq.net` 返回 `106.53.170.158` - 服务器本机访问 `http://boss.hyzq.net` 会被 `308` 跳转到 `https://boss.hyzq.net` - 服务器本机执行 `curl --resolve boss.hyzq.net:443:127.0.0.1 https://boss.hyzq.net -I` 返回 `307` 并跳转到 `/auth/login` 同时也确认了这些事实: - 当前本机网络 `dig +short boss.hyzq.net` 仍返回 `198.18.1.188` - 当前本机网络 `curl -I http://boss.hyzq.net` 返回 `308` - 当前本机网络 `curl -I https://boss.hyzq.net` 返回 `HTTP/2 307`,并跳转到 `/auth/login` - 当前本机网络 `curl https://boss.hyzq.net/api/health` 返回 `{"ok":true,"service":"boss-web",...}` - 当前本机网络 `curl https://boss.hyzq.net/api/v1/conversations` 已返回真实聚合数据 - 当前本机网络 `nc -vz boss.hyzq.net 25 587 993` 全部成功 - 服务器本机直接执行 `curl -I https://boss.hyzq.net` 也返回 `HTTP/2 307` - 服务器本机直接执行 `curl https://boss.hyzq.net/api/health` 也返回 `{"ok":true,"service":"boss-web",...}` - 服务器本机直接执行 `curl https://boss.hyzq.net/api/v1/conversations` 也返回真实聚合数据 - 服务器本机通过 `swaks` 走 `127.0.0.1:587 + STARTTLS + AUTH LOGIN` 向 `verify@boss.hyzq.net` 发信成功,邮件已进入 `/home/bossmail/Maildir` - `boss-web` 已支持通过 `/opt/boss/.env.server` 切到 `email` 模式;本轮临时切到 `email` 后,`POST https://boss.hyzq.net/api/auth/send-code` 已成功向 `verify@boss.hyzq.net` 投递邮件,随后已恢复默认 `fixed` 因此当前结论是: - 服务器端 `Caddy + TLS` 配置已经具备 - 证书申请和续签链路已经具备 - 当前网络下公网 `443` 已经可以实际访问 - 公网域名下的 API 也已经可以直接对外提供服务 - 服务器邮件栈 `Postfix + Dovecot` 已上线,公网 `25 / 587 / 993` 当前可达 - 但当前网络下 `dig` 仍显示 `198.18.1.188`,说明入口前面可能还有代理层或分裂 DNS;排障时要以真实 HTTP/HTTPS 可达性为准,而不是只盯解析值 ## 4. 当前未完成或仅为 MVP 的部分 - 当前服务器默认仍是 `fixed`,验证码为 `000000` - 当前虽然已经补齐 OTA 版本中心、检查更新、执行升级和 APK 包下载链路,但仍是文件型状态驱动的 MVP,不是原生增量更新基础设施 - 当前“OTA / 重装后不掉登录”覆盖原生 Android 客户端的 `SharedPreferences` 恢复与同签名覆盖安装;如果用户先卸载 APP 再全新安装,仍可能丢失本地原生存储 - 数据存储仍是文件型,而不是数据库 - 设备发现、项目扫描和额度采集仍是静态配置驱动的 MVP - APP 实时日志当前已能同步到主 Agent 会话,但还没有单独的日志检索、分页和告警升级规则 - Skill 清单当前按设备同步和展示已经可用,但还没有“安装 / 卸载 Skill”这种远程管理能力 - 服务器侧主 Agent 实时回复依赖被绑定设备的 `local-agent` 在线并能执行 `codex exec`;如果设备离线,只能保留任务或走 API 容灾账号 - API 容灾当前由用户在 APP 的 `我的 > AI 账号` 页面自行配置 `OpenAI API` 账号,不再依赖服务器预置 Key - 图片 / 视频真实文件上传仍未接对象存储 - 认证虽然已有最小会话 Cookie,但还没有刷新令牌、跨端会话治理、CSRF 防护和更细的风控策略 - 邮件对外正式投递仍缺少 DNS / 信誉相关的最终收口,例如 SPF、DKIM、DMARC、MX 与退信策略 - 外部真实邮箱的 end-to-end 收件链路还没有在生产账号上完成最终验收 ## 5. 推荐的复核命令 本地: ```bash curl -sS http://127.0.0.1:3000/api/health curl -sS -H 'Content-Type: application/json' -d '{"account":"17600003315","password":"boss123456","method":"password"}' http://127.0.0.1:3000/api/auth/login curl -sS http://127.0.0.1:3000/api/auth/session curl -sS http://127.0.0.1:3000/api/v1/conversations curl -sS http://127.0.0.1:3000/api/v1/projects/master-agent curl -sS http://127.0.0.1:3000/api/v1/devices/mac-studio/skills curl -I http://127.0.0.1:3000/api/v1/user/ota/package curl -sS http://127.0.0.1:4317/health curl -sS http://127.0.0.1:4317/api/v1/skills curl -sS -X POST http://127.0.0.1:4317/api/v1/heartbeat ``` 服务器: ```bash "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" health "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" exec "systemctl status boss-web --no-pager" "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" exec "systemctl status caddy --no-pager" "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" exec "systemctl status postfix --no-pager" "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" exec "systemctl status dovecot --no-pager" "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" exec "curl -sS http://127.0.0.1:3000/api/health" "$HOME/.codex/skills/boss-server-debug/scripts/server_ssh.sh" exec "curl -sS http://127.0.0.1:3000/api/v1/conversations" ``` 域名: ```bash dig +short boss.hyzq.net curl -I http://boss.hyzq.net curl -I https://boss.hyzq.net curl -I --resolve boss.hyzq.net:443:106.53.170.158 https://boss.hyzq.net nc -vz boss.hyzq.net 25 587 993 ``` ## 6. 运维判断原则 - 判断 Web 是否正常,以 `/api/health` 和 `/api/v1/conversations` 为准 - 判断本地设备端是否正常,以本地 agent `/health` 和手动 heartbeat 为准 - 判断服务器是否正常,以 `systemd` 和本机 `curl` 为准 - 判断公网是否真的可用,必须从外部网络重新验证 `boss.hyzq.net`