Files
boss/docs/architecture/current_runtime_and_deploy_status_cn.md

17 KiB
Raw Blame History

Boss 当前运行与部署状态

更新时间:2026-03-27

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 手动 heartbeatPOST http://127.0.0.1:4317/api/v1/heartbeat
  • launchd 已安装:~/Library/LaunchAgents/com.hyzq.boss.local-agent.plist

本地已知运行方式:

cd /Users/kris/code/boss
npm run build
npm start
cd /Users/kris/code/boss
npm run apk:debug
cd /Users/kris/code/boss
npm run apk:release
cd /Users/kris/code/boss
npm run aab:release
cd /Users/kris/code/boss
./scripts/start-local-agent.sh ./local-agent/config.example.json

本地常驻安装:

cd /Users/kris/code/boss
./scripts/install-local-launchagent.sh

如需切回本地回环开发控制面:

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 全屏 coverWebView 不再显示外层圆角矩形预览壳
  • 原生 Android 当前也和这套产品方向对齐:会话 / 设备 / 我的 为固定底部 tab一级面尽量维持微信式简单列表和聊天优先不再把线程预算 / 运维面板放在主聊天页或一级我的页
  • 会话页、设备页、技能页和项目详情页当前都通过 /api/v1/events 的 SSE 自动刷新
  • 我的页当前新增 AI 账号 入口,支持查看 主 GPT / 备用 GPT / API 容灾,并明确主链路优先走已经在绑定电脑上登录 ChatGPT Plus / CodexMaster 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-logsPOST /api/v1/devices/[deviceId]/skillsPOST /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 APKandroid/app/build/outputs/apk/debug/app-debug.apk
  • 当前已生成 Android signed release APKandroid/app/build/outputs/apk/release/app-release.apk
  • 当前 release 构建还会额外生成带版本号的 APKandroid/app/build/outputs/apk/release/boss-android-v{versionName}-release.apk
  • 当前最新 release 构建版本:2.2.1versionCode=10
  • 当前 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.2.0 已把原生 UI 回退到微信式交互:会话首页改为简单聊天列表,项目详情页改为聊天优先,只保留 项目目标 / 版本记录 两个轻入口,设备页和我的页根面改为简单列表,高级与调试 已下沉到 关于
  • 2.2.1 已继续补齐原生交互细节:聊天页会即时显示本地“发送中”气泡,并且只在用户接近底部或本次发送主动触发时自动滚到底;关于页会显示 OTA 下载进度 / 重试 / 安装授权提示,离开后再回来仍会恢复本地下载状态;根 tab 会记住最近一次用户停留页,并把一级页返回逻辑收成“先回会话 tab再按一次返回进入后台”

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 也返回真实聚合数据
  • 服务器本机通过 swaks127.0.0.1:587 + STARTTLS + AUTH LOGINverify@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
  • 原生 Android 的二级深层页虽然仍保留 ProjectForwardActivity / ThreadDetailActivity / OpsCenterActivity 等能力,但它们已经退出主 UI 正面;后续如再加入口,需继续遵守“一级微信式,复杂能力下沉”的规则
  • Android 本地 Gradle 验证当前必须串行执行;如果并发跑 testDebugUnitTest / compileDebugJavaWithJavac / assembleDebug,会导致中间产物互踩并出现假失败
  • 图片 / 视频真实文件上传仍未接对象存储
  • 认证虽然已有最小会话 Cookie但还没有刷新令牌、跨端会话治理、CSRF 防护和更细的风控策略
  • 邮件对外正式投递仍缺少 DNS / 信誉相关的最终收口,例如 SPF、DKIM、DMARC、MX 与退信策略
  • 外部真实邮箱的 end-to-end 收件链路还没有在生产账号上完成最终验收

5. 推荐的复核命令

本地:

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

服务器:

"$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"

域名:

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