90 KiB
Boss API 与服务清单
这份文档只记录当前已经实现并可用的服务和接口。
1. 服务清单
1.1 boss-web
- 形态:Next.js App Router 服务
- 本地端口:
3000 - 本地健康检查:
GET /api/health - 服务器进程:
boss-web.service - 服务器工作目录:
/opt/boss - 状态文件:通过
BOSS_STATE_FILE显式指向data/boss-state.json - 当前登录态:
boss_sessionHttpOnly Cookie - 当前原生恢复态:
restore token + SharedPreferences - 当前执行底座:
src/lib/execution/,已包含ExecutionBackend / PromptAssembler / PermissionPolicy / RemoteRuntimeAdapter / OrchestrationBackend默认实现
1.2 boss-admin-web
- 形态:独立 PC 企业后台前端
- 工程目录:
apps/boss-admin-web - 技术栈:
Vue 3 + Vite + Ant Design Vue - 本地开发脚本:
npm run admin:web:dev - 构建脚本:
npm run admin:web:build - 数据入口:
GET /api/v1/admin/backoffice - 登录态:复用
boss_sessionHttpOnly Cookie - 当前定位:平台侧 To B 总后台,面向公司、账号、设备、项目、Skill、风险与审计治理;生产入口为
https://admin.boss.hyzq.net/根路径,Caddy 内部 rewrite 到/admin-web/index.html,旧/adminUI 已移除,仅作为跳转到根域的兼容入口
1.3 boss-android-native
- 形态:原生 Android 客户端
- 原生入口:
android/app/src/main/java/com/hyzq/boss/MainActivity.java - API 客户端:
android/app/src/main/java/com/hyzq/boss/BossApiClient.java - 当前导航:
会话 / 设备 / 我的 - 当前一级交互:微信式简单列表与聊天优先
- 当前微信式 surface contract:
android/app/src/main/java/com/hyzq/boss/WechatSurfaceMapper.java - 当前原生活动页:
MainActivityProjectDetailActivityConversationInfoActivityThreadStatusActivityGroupInfoActivityGroupCreateActivityProjectGoalsActivityProjectVersionsActivityProjectForwardActivityThreadDetailActivityDeviceDetailActivityDeviceEnrollmentActivitySkillInventoryActivitySecurityActivityAccessManagementActivitySettingsActivityStorageSettingsActivityAiAccountsActivityTelegramIntegrationActivityOpenAiOnboardingActivityOpsCenterActivityAboutActivity
- 当前项目聊天页:
ProjectDetailActivity已改成聊天优先布局- 主面只保留
项目目标 / 版本记录 - 右上角会进入微信式
会话信息 / 群资料 approval_required群聊的待确认推荐会直接显示在主消息流里,支持确认下发 / 拒绝- 脏群会在主消息流上方直接显示
去修复入口,并跳转到GroupInfoActivity - 单线程会话支持按微信最新逻辑改线程名
- 当前已经支持从单线程会话发起独立群聊,群聊创建后作为新会话保留,原会话不升级
- 当前单线程会话已经支持打开
线程状态只读页,查看主 Agent 当前掌握的线程状态文档和最近进展事件 - 当前已经支持微信式消息转发:长按消息可直接
转发 / 多选 / 复制 / 删除,其中删除会调用服务端账本删除接口并刷新会话预览 - 当前多选模式会切换成微信式
取消 + 已选数量 + 底部转发状态 - 当前统一使用
ForwardTargetActivity选择目标会话,替换旧的备注转发主链 - 当前已支持聊天附件主链:输入框左侧
+会打开底部抽屉,支持图片 / 视频 / 文件发送;图片 / 视频先确认,文件直接发送 - 当前附件消息支持下载、原生打开、手动分析和自动分析状态展示
- 当前线程聊天消息会按该线程绑定的 Codex 电脑显示来源头像:单线程会话使用项目绑定设备头像,多设备 / 群聊消息会优先根据发送人里的设备名匹配对应电脑头像;主 Agent 总入口自身仍保留主 Agent 对话样式
- 当前已支持
execution_progress执行进度卡:普通线程对话、主 Agent 托管线程和群聊目标线程执行时,会在对应聊天窗口显示“进度 / 线程状态 / 实时状态 / 线程配置 / 线程协作 / 工具活动 / 思考摘要 / 账号状态 / 运行状态 / 安全提醒 / 审批状态 / 文件变更 / 分支详情 / 生成结果 / 后台智能体”结构化卡片;运行状态里也会展示 Codex Windows 沙箱准备摘要;线程过程噪音仍走thread_process折叠 线程详情 / 运维调试仍保留对应原生活动页,但已退出主聊天面- 当前已补上本地发送中气泡、发送按钮状态控制,以及“只有接近底部才自动滚到底”的消息流行为
- 当前根页导航:
MainActivity会记住最近一次停留的会话 / 设备 / 我的tab- 根页返回逻辑已改成“先回会话 tab,再按一次返回进入后台”
- 当前会话列表:
- 已切到“线程 = 会话窗口”
- 主标题显示线程名
- 第二行显示所属文件夹名
- 右下角显示后台活跃数量动态图标
主 Agent / 审计对话已作为普通置顶会话固定在顶部- 会话首页右上角当前为微信式
+入口,可直接从会话列表发起独立群聊
- 当前
关于页:- 保留版本与 OTA 操作
- 当前已补上 OTA 下载进度、失败重试、安装授权提示和返回关于页后的本地状态恢复
- 当前
我的根页:- 已按登录角色过滤入口:
member只显示账号与安全 / 设置 / 技能 / 关于 admin / highest_admin额外显示运维与修复 / AI 账号 / 附件与存储 / Telegram 接入用户与权限仅highest_admin可见,用于创建子账号和分配设备 / 项目 / Skill 权限运维与修复直接进入OpsCenterActivity技能入口会继续依赖服务端 Skill 授权过滤,不在客户端自行扩大可见范围
- 已按登录角色过滤入口:
- 当前
OpenAiOnboardingActivity:- 会先自动打开
OpenAI Platform登录页 - 支持继续打开
API Keys页面 - 回 APP 后可直接粘贴 key,并设为当前主控
- 登录成功后会直接给出
测试主 Agent 对话入口
- 会先自动打开
- 当前登录:默认要求账号密码或验证码校验;临时开发兜底只允许通过显式环境变量开启
- 当前会话恢复:
SharedPreferences中保存boss_session / restore_token / account
1.4 boss-local-agent
- 形态:Node 原生 HTTP 服务
- 本地端口:默认
4317 - 健康检查:
GET /health - 当前常驻方式:
launchd - 当前额外职责:向云端上报
thread-context - 当前新增职责:递归扫描本机
~/.codex/skills并同步到设备 Skill 接口 - 当前完成回写:
conversation_reply / dispatch_execution会先标准化成统一远程执行结果,再调用/api/v1/master-agent/tasks/[taskId]/complete - 当前
dispatch_execution会按orchestrationBackendId分流:默认走codex exec resume,显式选择omx-team且本机配置可用时改走OMX Team RuntimeJSON 协议 - 当前 Codex 任务完成回写会附带
executionProgress快照:包含 Git diff 简表、GitHub CLI 可用状态和从执行回复中提取的产物文件名,服务端更新同一张execution_progress卡片,不重复刷屏 - 当前
RemoteRuntimeAdapter还负责拦截固定模式的线程内部环境提示;命中后会直接改写成失败,避免把只读/cwd 这类脏文本写进聊天记录 - 当前普通单线程
conversation_reply在真正执行codex exec resume前,会先把 Boss 用户消息镜像进目标 Codex Desktop rollout;定位优先走state_5.sqlite,不可用时回退扫描~/.codex/sessions,并按sourceMessageId去重 - 当前 Codex Desktop 同步新增常驻刷新桥:
scripts/codex-desktop-refresh-bridge-daemon.mjs通过 launchd 监听127.0.0.1:4318,暴露POST /api/v1/codex-desktop/refresh、GET /api/v1/codex-desktop/events、GET /api/v1/codex-desktop/events/recent和GET /api/v1/codex-desktop/capabilities;local-agent会优先调用 refresh endpoint,失败时回退到scripts/codex-desktop-refresh-hint.mjs命令式刷新。SSE 事件只包含线程引用、消息 ID、状态、deep link 等安全元数据,不包含用户正文或内部 prompt;scripts/codex-desktop-event-consumer.mjs可作为 Desktop 插件/IPC 接入前的订阅 smoke;scripts/codex-desktop-integration-probe.mjs负责只读探测 Codex.app 能力 - 当前新增 Codex App Server runner:
local-agent/codex-app-server-runner.mjs。boss-agent 默认配置codexAppServerEnabled=true,会接管conversation_reply / dispatch_execution;它默认通过 stdio 启动codex app-server,也支持codexAppServerTransport=ws + codexAppServerUrl=ws://127.0.0.1:<port>或codexAppServerTransport=unix + codexAppServerUrl=unix:///absolute/path.sock连接同机长驻 App Server,bearer token 可通过codexAppServerAuthTokenFile读取并在握手时发送Authorization: Bearer <token>。runner 执行initialize -> thread/resume|thread/start -> turn/start|turn/steer,并把item/agentMessage/delta或item/completed归一成 Boss 任务回复;当 App Server 对单个 JSON-RPC 请求返回-32001 / retry later时,runner 会做最多 3 次指数退避重试。turn 启动前失败可回退 CLI,turn 启动后失败不回退,避免重复执行。2026-05-31 起,runner 会把turn/plan/updated、turn/diff/updated、item/started|completed、thread/started归一成executionProgress.steps / branch / artifacts / agents,把item/*/requestApproval、item/autoApprovalReview/*、guardianWarning、serverRequest/resolved、item/fileChange/patchUpdated归一成executionProgress.approvals / warnings / fileChanges,把thread/status/changed、thread/realtime/started|transcript|outputAudio|itemAdded|error|closed归一成executionProgress.threadStatus / realtime,把model/rerouted、thread/tokenUsage/updated、mcpServer/startupStatus/updated、remoteControl/status/changed归一成executionProgress.modelRoute / tokenUsage / mcpServers / remoteControl,并把thread/goal/*、thread/settings/updated、thread/compacted、account/updated、account/rateLimits/updated、model/verification、warning、configWarning、deprecationNotice、ThreadItem.collabToolCall、ThreadItem.contextCompaction、mcpToolCall、dynamicToolCall、webSearch、imageView、imageGeneration、hook/started|completed、windowsSandbox/setupCompleted、enteredReviewMode、exitedReviewMode、commandExecution、ThreadItem.plan、ThreadItem.reasoning.summary归一成线程配置、账号状态、模型校验、安全提醒、线程协作、上下文压缩、工具活动、图片产物、钩子生命周期、Windows 沙箱准备状态、计划步骤和思考摘要;新版ThreadItem.collabToolCall.receiverThreadIds / agentsStates只归一为目标数量和 agent 状态集合。2026-06-03 起,runner 还会把item/agentMessage/delta、item/plan/delta、item/reasoning/summaryPartAdded|summaryTextDelta|textDelta、item/mcpToolCall/progress、command/exec/outputDelta、item/commandExecution/outputDelta|terminalInteraction和item/fileChange/outputDelta归一成executionProgress.streamEvents计数。服务端 complete/progress 回写会与本地 Git/GitHub 进度合并,且不保存 SDP、音频 base64、raw realtime item、remote installationId、cwd、turnId、配置路径、collab 源/目标线程 ID、receiverThreadIds、collab prompt、agentsStates 私有消息、tool arguments/result/contentItems、web URL token、命令正文/输出、raw reasoning content、reasoning item id、原始 delta、terminal input、file output、imageGeneration revisedPrompt/result、hook sourcePath/statusMessage/entries、Windows sandbox sourcePath/samplePaths/本地绝对路径或未清洗的 MCP 错误。heartbeat 同时支持按 TTL 拉取model/list / skills/list / hooks/list / plugin/list / app/list / modelProvider/capabilities/read,并把摘要保存在capabilities.codexAppServer.metadata。 - App Server heartbeat discovery 现在还会按 TTL 拉取
experimentalFeature/list / collaborationMode/list / permissionProfile/list / mcpServerStatus/list,写入capabilities.codexAppServer.metadata.experimentalFeatures / collaborationModes / permissionProfiles / mcpServers。这些字段用于 APP/后台治理页展示 Codex 当前可用的实验特性、多 Agent/协作模式、权限 profile 和 MCP 服务健康;MCP 请求固定使用detail=toolsAndAuthOnly,服务端状态里不保存 resource URI、工具参数、permission profile 文件规则、本地路径或密钥。 - App Server heartbeat discovery 现在还会按 TTL 拉取
account/read / account/rateLimits/read / config/read / configRequirements/read / externalAgentConfig/detect,写入capabilities.codexAppServer.metadata.accountSummary / rateLimitSummary / appConfigSummary / configRequirements / externalAgentMigration。这些字段用于 APP/后台展示账号、额度、App 配置、企业托管要求和外部 Agent 迁移候选摘要;当前只做观测,不通过 Boss 远程写config.toml或执行外部 Agent 导入,且不保存邮箱、完整 config、API key、本地路径或迁移描述。 - App Server heartbeat discovery 现在还会按 TTL 拉取
thread/list / thread/loaded/list,写入capabilities.codexAppServer.metadata.threadSummary。该字段用于 APP/后台展示 Codex 当前可见线程数量、加载态、活跃态和非归档线程轻量目录;目录只保留id / name / sourceKind / status / updatedAt / loaded,不保存 cwd、本地路径、turn 内容、用户正文或内部 prompt。 - App Server heartbeat discovery 现在还会按 TTL 对非归档可见线程拉取
thread/turns/list,写入capabilities.codexAppServer.metadata.threadTurnSummary。该字段用于 APP/后台展示 Codex 当前线程 turn 运行态;请求固定itemsView=notLoaded,只保留 turn 计数、运行中 / 完成计数、最近状态和更新时间,不保存 turn id、items、用户正文、模型输出或内部 prompt。 - App Server heartbeat discovery 现在还会写入
capabilities.codexAppServer.metadata.threadActionSummary。该字段用于 APP/后台展示当前协议下可接入的线程治理动作数量和分组,覆盖 archive / unarchive / fork / compact / rollback / rename / metadata / steer / interrupt / shell / unsubscribe;它只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用这些写操作。 - App Server heartbeat discovery 现在还会写入
capabilities.codexAppServer.metadata.pluginGovernanceSummary。该字段用于 APP/后台展示当前协议下可接入的插件治理动作数量和分组,覆盖 install / uninstall / read / skill-read / share;它只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用插件安装、卸载或共享写操作。 - App Server heartbeat discovery 现在还会写入
capabilities.codexAppServer.metadata.accountGovernanceSummary / configGovernanceSummary。这些字段用于 APP/后台展示当前协议下可接入的账号与配置治理动作数量和分组,覆盖 login / logout / token refresh / add credits nudge / config write / MCP reload / Skill config write;它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用账号或配置写操作。 - App Server heartbeat discovery 现在还会写入
capabilities.codexAppServer.metadata.fileSystemGovernanceSummary / commandSessionSummary。这些字段用于 APP/后台展示当前协议下可接入的文件系统与命令会话动作数量和分组,覆盖 file read/write/remove/watch 以及 command stdin / resize / terminate / stream;它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用文件读写或命令控制操作。 - App Server heartbeat discovery 现在还会写入
capabilities.codexAppServer.metadata.externalAgentGovernanceSummary / marketplaceGovernanceSummary / experimentalFeatureGovernanceSummary。这些字段用于 APP/后台展示当前协议下可接入的外部 Agent 迁移、Marketplace 和实验特性治理动作数量和分组,覆盖 external-agent import、marketplace add/remove/upgrade 和 experimental feature enablement;它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用迁移导入、marketplace 写入或实验特性启用操作。 - App Server heartbeat discovery 现在还会写入
capabilities.codexAppServer.metadata.reviewGovernanceSummary / windowsSandboxGovernanceSummary / fuzzyFileSearchSummary。这些字段用于 APP/后台展示当前协议下可接入的审查、Windows 沙箱和文件搜索事件能力,覆盖 review start、Windows sandbox readiness/setup 和 fuzzy file search updated/completed;它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用审查启动、沙箱设置或文件搜索动作。 - App Server heartbeat discovery 现在还会写入
capabilities.codexAppServer.metadata.mcpGovernanceSummary / userInteractionGovernanceSummary / guardianGovernanceSummary。这些字段用于 APP/后台展示当前协议下可接入的 MCP、用户交互和 Guardian 治理能力,覆盖 MCP OAuth/resource/tool/elicitation、tool requestUserInput、Guardian denied action approval 和 permission request approval;它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中调用 MCP、用户输入或 Guardian 放行动作。 - App Server heartbeat discovery 现在还会写入
capabilities.codexAppServer.metadata.runtimeEventSummary / extensionEventSummary / threadLifecycleEventSummary。这些字段用于 APP/后台展示当前协议下可接入的运行事件、扩展事件和线程生命周期事件能力,覆盖 process output/exited、raw response completed、skills changed、plugin installed、thread started/closed/archived/unarchived/name updated;它们只来自 runner 安全 catalog 和协议快照,不会在 heartbeat 中主动触发进程、插件、Skill 或线程生命周期动作。 - App Server heartbeat discovery 现在还会写入
capabilities.codexAppServer.metadata.streamDeltaEventSummary。该字段用于 APP/后台展示当前协议下可接入的流式增量事件能力,覆盖 agent delta、plan delta、reasoning delta、MCP progress、command output、terminal interaction 和 file output;它只来自 runner 安全 catalog 和协议快照,不保存原始增量文本、命令输出、推理正文或文件输出。 - App Server heartbeat discovery 现在支持
skills/extraRoots/set:配置codexAppServerSkillExtraRoots或环境变量BOSS_CODEX_APP_SERVER_SKILL_EXTRA_ROOTS后,runner 会先把共享 Skill 根下发给 App Server,再刷新skills/list,并写入capabilities.codexAppServer.metadata.skillExtraRootsSummary。该字段用于 APP/后台展示企业共享 Skill 根是否已下发;只保留数量、basename 和状态,不保存根目录绝对路径、Skill 文件路径或配置原文。 - App Server heartbeat discovery 现在支持
hooks/list,写入capabilities.codexAppServer.metadata.hookSummary。该字段用于 APP/后台展示本机 Codex hook 治理状态;只保留 workspace 数、hook 数、启用数、受管 / 可信 / 修改 / 未信任计数、warning / error 计数和事件 / handler 类型,不保存 hook key、command、sourcePath、statusMessage、hash、error message 或本地路径。 - 当前 Codex App Server runner 已新增第一版 Boss Inter-Thread Broker:任务携带
intentCategory=thread_collaboration、sourceCodexThreadRef和targetCodexThreadRef时,会先thread/read源线程,再通过thread/inject_items向目标线程注入受控摘要,最后turn/start目标线程;服务端入口是POST /api/v1/projects/[projectId]/thread-collaboration,负责权限、源/目标线程校验和任务排队。这不是假设官方线程 P2P,而是 Boss 自己做线程协作编排。 - 当前 Codex App Server runner 已新增 Boss 用户消息镜像:普通
conversation_reply任务携带mirrorBossUserMessageToCodexDesktop=true、sourceMessageBody和目标codexThreadRef时,会先thread/resume,再thread/inject_items写入role=user的 Boss APP 用户原文,最后turn/start;该链路用于让 APP 发起的对话进入 Codex Desktop 同一线程历史。执行结果只保存threadHistorySync安全摘要,不保存 App Server 原始 item、消息 ID、用户原文、系统提示词或内部调度字段。 - 当前 Codex App Server runner 已新增受控线程回滚:任务携带
intentCategory=thread_rollback、目标codexThreadRef和rollbackNumTurns时,会调用thread/rollback回滚目标线程最近 N 轮,不会启动新 turn,也不会把 App Server 返回的 thread/turn/items 写回 APP。服务端入口是POST /api/v1/projects/[projectId]/thread-rollback,只保存回滚轮数、原因和执行摘要;边界是只回滚 Codex 线程历史,不自动还原本地文件变更。 - 当前 Codex App Server runner 已新增受控线程压缩:任务携带
intentCategory=thread_compact和目标codexThreadRef时,会调用thread/compact/start发起上下文压缩,不会启动普通 turn,也不会把 contextCompaction item 的原始字段写回 APP。服务端入口是POST /api/v1/projects/[projectId]/thread-compact,只保存压缩原因和执行摘要;边界是只压缩 Codex 线程上下文,不代表代码修改、文件恢复或版本发布完成。 - 当前 Codex App Server runner 已新增受控线程归档 / 恢复:任务携带
intentCategory=thread_archive|thread_unarchive、目标codexThreadRef和threadLifecycleAction时,会直接调用thread/archive或thread/unarchive,不会先 resume 已归档线程,也不会启动普通 turn。服务端入口是POST /api/v1/projects/[projectId]/thread-archive,只保存生命周期动作、原因和执行摘要;边界是只改变 Codex 线程生命周期状态,不代表代码修改、文件恢复或版本发布完成。 - 当前 Codex App Server runner 已新增受控线程改名:任务携带
intentCategory=thread_rename、目标codexThreadRef和threadRenameName时,会直接调用thread/name/set,不会先 resume 线程,也不会启动普通 turn。服务端入口复用POST /api/v1/projects/[projectId]/rename的mode=thread分支;本地 Boss 会话改名先成功,随后异步创建 Codex 改名任务,设备离线或冲突只返回非致命codexThreadRenameError。 - 当前 Codex App Server runner 已新增受控线程目标同步:任务携带
intentCategory=thread_goal_sync、目标codexThreadRef、threadGoalObjective和threadGoalStatus时,会直接调用thread/goal/set,不会启动普通 turn。服务端入口复用POST /api/v1/projects/[projectId]/goals;本地 Boss 项目目标先成功,单线程且已绑定 Codex 线程时再异步创建 Codex goal 同步任务,设备离线或冲突只返回非致命codexThreadGoalError。 - 当前 Codex App Server runner 已新增受控线程 Git 元数据同步:任务携带
intentCategory=thread_metadata_sync、目标codexThreadRef和threadMetadataGitInfo时,会直接调用thread/metadata/update,不会启动普通 turn。服务端入口是POST /api/v1/projects/[projectId]/thread-metadata;当前只允许 patchgitInfo.sha / branch / originUrl,不开放任意 metadata 写入。 - 当前 Codex App Server runner 已新增受控线程分叉:任务携带
intentCategory=thread_fork、目标codexThreadRef和threadForkEphemeral时,会直接调用thread/fork,不会启动普通 turn。服务端入口是POST /api/v1/projects/[projectId]/thread-fork;当前只使用源 thread id 分叉,不允许远程覆盖 model、sandbox、instructions 或 config,新 Codex 线程进入 Boss 会话列表仍依赖后续 discovery / 导入链路。 - 当前 boss-agent Mac OTA 已接入:
local-agent/boss-agent-ota-runner.mjs会用设备 token 调 Boss 服务端/api/v1/boss-agent/ota检查最新 Mac 运行包,/api/v1/boss-agent/ota/apply会下载boss-agent-mac-latest.zip、校验 sha256、暂存安装 wrapper,并拉起本机安装器;安装脚本会保留绑定配置并只更新版本号与本机 runtime 路径。安装器会优先沿用当前 LaunchAgent active config,并保留所有config*.json,避免多电脑场景中误绑定到默认设备配置。当前最新验证包为20260516221619;构建脚本支持BOSS_AGENT_NOTARIZE=1的 Developer ID 公证路径。 - 当前
local-agent还新增了两条统一电脑控制 runtime:local-agent/browser-control-task-runner.mjslocal-agent/computer-use-task-runner.mjs
- 当前
browser_control / desktop_control任务已经可以被local-agent/server.mjs识别并分流;当本机配置了对应 runtime 命令时,会通过 JSON stdin/stdout 协议委托给外部进程执行,否则返回明确 runtime disabled 错误,不再回退占位成功结果 - 当前
browser_control / desktop_control的完成回写已贯通targetUrl / targetApp -> RemoteRuntimeAdapter -> /api/v1/master-agent/tasks/[taskId]/complete -> boss-state.json,服务端写入control_summary消息时会保留controlTarget,Android 会话页可直接渲染“目标:URL/应用名” - 相关配置项:
browserControlEnabled / browserControlCommand / browserControlArgs / browserControlWorkdir / browserControlTimeoutMscomputerUseEnabled / computerUseCommand / computerUseArgs / computerUseWorkdir / computerUseTimeoutMscodexComputerUseEnabled / codexComputerUseCommand / codexComputerUseArgs / codexComputerUseWorkdir / codexComputerUseTimeoutMs / codexComputerUseFallbackToCuacodexAppServerEnabled / codexAppServerCommand / codexAppServerArgs / codexAppServerWorkdir / codexAppServerTimeoutMs / codexAppServerFallbackToCli / codexAppServerTransport / codexAppServerUrl / codexAppServerAuthTokenFile / codexAppServerSkillExtraRoots / codexAppServerDiscoveryEnabled / codexAppServerDiscoveryTtlMs / codexAppServerDiscoveryLimitscripts/codex-app-server-protocol-snapshot.mjs:生成本机 Codex App Server help、JSON Schema、TypeScript bindings、协议方法清单和 support matrix;当前快照目录为docs/protocol-snapshots/codex-app-server/0.136.0-alpha.2/
POST /api/v1/master-agent/tasks/[taskId]/progress
- 用途:设备端在执行中实时刷新同一张
execution_progress卡 - 权限:设备 token / 设备写鉴权
- 请求体:
deviceId、可选status=queued|running、可选requestId、可选executionProgress - 当前行为:只更新任务进度卡和实时事件,不把任务置为 completed / failed;最终成功或失败仍必须走
POST /api/v1/master-agent/tasks/[taskId]/complete
POST /api/v1/projects/[projectId]/thread-collaboration
- 用途:从当前线程发起一次受控线程协作,把源线程上下文注入目标 Codex 线程并让目标线程执行
- 权限:登录态;源项目和目标项目都需要
project.view,源项目需要master_agent.ask - 请求体:
targetProjectId、body或requestText - 行为:先在源项目追加用户消息,再创建
conversation_reply任务,任务携带intentCategory=thread_collaboration、源/目标threadId、codexThreadRef和目标codexFolderRef
POST /api/v1/projects/[projectId]/thread-rollback
- 用途:对当前会话绑定的 Codex 线程发起一次受控历史回滚,适合误触发、错误继续、接管误操作后的线程级撤回
- 权限:登录态;目标项目需要
project.view和master_agent.ask - 请求体:
numTurns,可选reason - 行为:先在目标项目追加一条用户可见原因消息,再创建
conversation_reply任务,任务携带intentCategory=thread_rollback、目标threadId、codexThreadRef、codexFolderRef、rollbackNumTurns和rollbackReason - 边界:设备端通过 Codex App Server 调用
thread/rollback,只回滚线程历史;不会自动还原本地文件变更,也不会把 App Server 返回的 thread/turn/items 明文写回 APP
POST /api/v1/projects/[projectId]/thread-compact
- 用途:对当前会话绑定的 Codex 线程发起一次受控上下文压缩,适合长线程接近上下文上限、继续开发前需要清理上下文的场景
- 权限:登录态;目标项目需要
project.view和master_agent.ask - 请求体:可选
reason - 行为:先在目标项目追加一条用户可见原因消息,再创建
conversation_reply任务,任务携带intentCategory=thread_compact、目标threadId、codexThreadRef、codexFolderRef和compactReason - 边界:设备端通过 Codex App Server 调用
thread/compact/start,只发起上下文压缩;不会启动普通 turn,不会把 contextCompaction item 的原始字段写回 APP,也不代表代码修改、文件恢复或版本发布完成
POST /api/v1/projects/[projectId]/thread-archive
- 用途:对当前会话绑定的 Codex 线程发起受控归档或恢复,适合项目阶段性结束、误归档恢复或清理会话首页前先同步 Codex 线程生命周期
- 权限:登录态;目标项目需要
project.view和master_agent.ask - 请求体:
action=archive|unarchive,可选reason - 行为:先在目标项目追加一条用户可见原因消息,再创建
conversation_reply任务,任务携带intentCategory=thread_archive|thread_unarchive、目标threadId、codexThreadRef、codexFolderRef、threadLifecycleAction和threadLifecycleReason - 边界:设备端通过 Codex App Server 调用
thread/archive或thread/unarchive;不会启动普通 turn,不会把 App Server 返回的 thread 原始字段写回 APP,也不代表代码修改、文件恢复或版本发布完成
POST /api/v1/projects/[projectId]/thread-metadata
- 用途:对当前会话绑定的 Codex 线程发起受控 Git 元数据同步,适合把 Boss 当前已知的分支、提交和远端仓库信息写回 Codex 线程
- 权限:登录态;目标项目需要
project.view和master_agent.ask - 请求体:
gitInfo,可选字段sha、branch、originUrl;字段值为字符串表示设置,为null表示清除,字段缺省表示不改;可选reason - 行为:先在目标项目追加一条用户可见原因消息,再创建
conversation_reply任务,任务携带intentCategory=thread_metadata_sync、目标threadId、codexThreadRef、codexFolderRef、threadMetadataGitInfo和threadMetadataReason - 边界:设备端通过 Codex App Server 调用
thread/metadata/update;不会启动普通 turn,不会把 App Server 返回的 thread 原始字段写回 APP,也不允许写入 Git 信息之外的任意 metadata
POST /api/v1/projects/[projectId]/thread-fork
-
用途:对当前会话绑定的 Codex 线程发起受控分叉,适合在不破坏原线程历史的情况下复制当前上下文继续试验
-
权限:登录态;目标项目需要
project.view和master_agent.ask -
请求体:可选
reason,可选ephemeral -
行为:先在目标项目追加一条用户可见原因消息,再创建
conversation_reply任务,任务携带intentCategory=thread_fork、目标threadId、codexThreadRef、codexFolderRef、threadForkEphemeral和threadForkReason -
边界:设备端通过 Codex App Server 调用
thread/fork;不会启动普通 turn,不会把 App Server 返回的 path、cwd、turns、instructions 写回 APP;当前不允许远程覆盖 model、sandbox、instructions 或 config;新线程进入 Boss 会话列表依赖后续 thread discovery / 导入链路 -
当前仓库已自带 browser smoke runtime、desktop Cua runtime 和旧 desktop smoke 兜底:
scripts/browser-control-smoke.mjsscripts/codex-computer-use-runtime.mjsscripts/cua-driver-computer-use-runtime.mjsscripts/computer-use-smoke.mjs
-
scripts/browser-control-smoke.mjs当前已支持两段式最小真实动作:- 能从目标 URL 拉取 HTML 标题并回写到
replyBody / executionSummary - 在显式配置 opener 命令时可实际执行打开 URL
- 能从目标 URL 拉取 HTML 标题并回写到
-
scripts/codex-computer-use-runtime.mjs当前通过codex app-server发起 Codex Computer Use 桌面控制,是 boss-agent 的默认桌面控制入口;失败时由local-agent/computer-use-task-runner.mjs自动回退 CUA -
scripts/cua-driver-computer-use-runtime.mjs当前通过外部cua-driver执行 macOS 桌面 GUI 控制:先launch_app,再按返回窗口做get_window_state,需要写入文本时调用type_text并再次观测;发送、提交、删除、支付等高风险动作默认返回needs_user_action,不静默下发 -
scripts/computer-use-smoke.mjs当前已支持识别常见桌面应用名,macOS 下默认用osascript激活目标应用,并支持把用户请求中的引号文本输入到当前前台应用、按需回车发送;它保留为旧兜底和回归资产 -
config.example.json / config.cloud.json现默认把 browser smoke runtime 和 desktop Cua runtime 作为 browser/desktop 控制的推荐起步配置 -
config.example.json / config.cloud.json现同时默认把browserAutomationConnected / computerUseConnected置为true,让前台设备详情默认按“这台 Mac 已具备浏览器控制 / 桌面控制能力”展示 -
这两条 smoke runtime 当前还会返回结构化字段:
- browser:
targetUrl / artifacts - desktop:
targetApp / typedText / artifacts
- browser:
-
这样前台与后续真实 runtime 可以共用同一套结果形态,而不需要等接入 Playwright / Computer Use 后再改返回协议
-
heartbeat 的
browserAutomation / computerUse能力上报会同时参考静态 connected 标记和 runtime 配置状态;codexAppServer能力上报会参考 feature flag,stdio 模式校验 app-server 命令可执行性,ws/unix 模式校验codexAppServerUrl是否已配置
1.5 Caddy
- 作用:反向代理和 HTTPS 自动续签
- 服务器服务名:
caddy.service - 配置文件:
deployment/Caddyfile - 当前站点:
boss.hyzq.net服务客户 Web / App API;admin.boss.hyzq.net根路径内部 rewrite 到/admin-web/index.html,浏览器地址栏保持https://admin.boss.hyzq.net/,作为平台级 To B 独立后台入口;旧/admin页面不再渲染旧 UI,只做兼容跳转到根路径
1.6 boss-server-debug skill
- 作用:跨 Codex 窗口稳定连接
106.53.170.158 - 路径:
$HOME/.codex/skills/boss-server-debug/SKILL.md - 密码来源:优先读取 macOS Keychain
1.7 Postfix + Dovecot
- 作用:服务器侧邮件发送 / 接收基础设施
- SMTP 端口:
25 / 465 / 587 - IMAPS 端口:
993 - 本机测试邮箱:
bossmail - 当前别名:
verify@boss.hyzq.net、no-reply@boss.hyzq.net - 部署脚本:
scripts/install-server-mail.sh - 服务器配置目录:
deployment/mail/ - Web 切换入口:
/opt/boss/.env.server
2. Web 页面路由
2.1 一级页
GET /auth/loginGET /conversationsGET /devicesGET /me
2.2 二级页
GET /auth/registerGET /auth/forgot-passwordGET /auth/helpGET /conversations/[projectId]GET /conversations/[projectId]/forwardGET /conversations/[projectId]/goalsGET /conversations/[projectId]/thread-statusGET /conversations/[projectId]/versionsGET /threads/[threadId]GET /devices/addGET /me/securityGET /me/aboutGET /me/storageGET /me/accessGET /me/ai-accountsGET /me/opsGET /me/ops/auditGET /me/settingsGET /me/skillsGET /me/master-agentGET /me/master-agent
3. Web API 路由
3.1 健康和状态
GET /api/health
- 用途:Web 健康检查
- 响应:
{ ok, service, now }
GET /api/state
- 用途:读取当前完整状态
- 当前行为:最高管理员可读取完整状态;非最高管理员会返回已按当前账号授权裁剪后的状态快照,设备、项目、线程状态、进展事件、Skill、日志和任务都会尽量限制在可见范围内
- 注意:这是内部 MVP 调试接口,仍不建议作为普通业务页面的主数据源;业务页面应优先使用具体
/api/v1/*投影接口
3.1.1 多用户 RBAC 与 Skill 授权
- 权限模块:
src/lib/boss-permissions.ts - 状态字段:
accountDeviceGrantsaccountProjectGrantsaccountSkillGrantsskillCatalogpermissionAuditLogs
- 当前规则:
highest_admin全局可见- 非管理员必须通过设备、项目或 Skill 授权获得可见性
device.view只提供设备与关联项目只读可见性,不自动放大为聊天、接管、电脑控制或 Skill 使用权限thread.chat / master_agent.ask / master_agent.takeover / computer.control / skill.use需要显式授权
- 当前已接入过滤的接口:
GET/POST /api/v1/admin/access(仅最高管理员)GET /api/v1/devicesGET /api/v1/conversationsGET /api/v1/conversations/homeGET /api/v1/conversation-folders/[folderKey]GET /api/v1/projects/[projectId]GET/POST /api/v1/projects/[projectId]/messagesGET /api/v1/devices/[deviceId]/skillsGET /api/state
- 当前主 Agent 行为:执行提示词使用授权快照生成,任务队列会记录
authorizedDeviceIds / authorizedProjectIds / authorizedSkillIds / requiredPermissions - 当前前台入口:Web
/me/access与原生 AndroidAccessManagementActivity共用/api/v1/admin/access,仅highest_admin可见;admin/member不显示入口且直接请求会返回403
GET /api/v1/admin/access
- 用途:最高管理员读取账号与授权管理台所需数据
- 权限:仅
highest_admin - 返回:
- 脱敏
accounts,不包含passwordHash companies:显式客户公司 / 租户列表devices / projects / skills- 按同名 Skill 聚合的
skillCatalog - 内置
permissionTemplates grants.devices / grants.projects / grants.skillsauditLogs
- 脱敏
POST /api/v1/admin/access
- 用途:最高管理员执行最小授权管理动作
- 权限:仅
highest_admin - 支持动作:
upsert_company:创建或更新客户公司 / 租户set_company_status:启用或停用客户公司;停用时同步禁用该租户普通子账号并撤销活跃会话assign_account_company:把账号绑定到指定客户公司assign_device_company:把设备绑定到指定客户公司preview_bulk_import_accounts:预览批量导入结果,返回新增 / 更新 / 异常数量,不写入状态bulk_import_accounts:按公司批量导入member/admin子账号reset_account_password:最高管理员重置子账号密码,重置后撤销该账号活跃会话且响应不返回passwordHashreclaim_account:离职回收,停用账号、撤销活跃会话并清理设备 / 项目 / Skill 授权upsert_account:创建或更新子账号set_account_status:启用或停用子账号;停用时撤销该账号当前活跃会话,且禁止停用最高管理员账号revoke_device:吊销指定设备,立即清空设备 token、标记离线、写入device.revoked审计;旧 token 后续不能 heartbeat、领任务、同步 Skill、上传日志或拉取 boss-agent OTAgrant_device:授予设备权限grant_project:授予项目权限grant_skill:授予 Skill 权限apply_template:对指定账号和目标设备 / 项目 / Skill 批量套用内置权限模板revoke_grant:撤销任意设备 / 项目 / Skill 授权
- 当前行为:所有变更类动作都会写入
permissionAuditLogs,用于后续审计和主 Agent 接手时判断权限来源;后台 mutation 会记录ipAddress / userAgent / requestId,高危动作可记录安全化beforeJson / afterJson
GET /api/v1/admin/overview
- 用途:最高管理员读取 To B 管理后台总览数据
- 权限:仅
highest_admin - 返回:
summary:公司、账号、设备、在线设备、开放风险、风险通知、严重风险数量companies[]:优先使用显式客户公司 / 租户,其次按账号域名或默认公司聚合accounts[]:脱敏账号列表,不包含passwordHashdevices[]:设备在线状态、CLI/GUI 能力、项目数和风险数risks[]:离线设备、运维故障、线程上下文风险和失败主 Agent 任务;运维故障和线程上下文风险会带出负责人和 SLAnotifications[]:开放中的风险 SLA 通知,当前由/api/v1/admin/risks/scan生成grantsSummary:设备 / 项目 / Skill 授权数量与过期授权数量
GET /api/v1/admin/backoffice
- 用途:独立 PC 企业后台读取 YuDao/Vben 风格的总后台契约数据
- 权限:仅
highest_admin - 返回:
menuTree:工作台、租户管理、账号管理、角色权限、资源授权、Skill 中心、风险告警、审计日志、系统设置workbench:平台总览、客户健康、设备健康、风险、通知和授权摘要tenants[]:客户公司 / 租户列表,来自adminCompanies与现有聚合users[]:脱敏账号列表,不包含passwordHash / mfaSecret / authSessionsroles:内置角色与BOSS_PERMISSION_TEMPLATESresourceGroups:设备、项目线程、Skill 聚合目录和授权记录audit:风险、通知、风险时间线和permissionAuditLogsyudaoMapping:Boss 账本字段到后台概念的映射,用于后续数据库化或模块拆分
- 当前定位:供
https://admin.boss.hyzq.net/ -> apps/boss-admin-web消费;旧/adminUI 已下线,不再消费/api/v1/admin/overview和旧数据 provider
GET/POST /api/v1/admin/backups
- 用途:最高管理员做文件状态快照、查看可回退点和执行状态回退
- 权限:仅
highest_admin GET返回:status:当前文件状态路径、备份目录、最近快照时间、可回退点数量和校验状态snapshots[]:快照 ID、创建时间、创建人、备注、大小、sha256 和 schema 版本
POST输入:action=create_snapshot:创建当前boss-state快照,可带reasonaction=restore_snapshot:恢复到指定snapshotId
- 当前行为:恢复前会自动创建
pre-restore:<snapshotId>快照,避免误操作后无法回滚;文件状态写入层默认按BOSS_STATE_AUTO_BACKUP_INTERVAL_MS自动创建auto:writeState快照,并按BOSS_STATE_AUTO_BACKUP_KEEP保留;独立 PC 管理后台的“备份与回退”页已接入创建、刷新和恢复动作。
POST /api/v1/admin/risks/scan
- 用途:扫描当前风险 SLA,幂等生成平台侧待跟进通知
- 权限:仅
highest_admin - 当前行为:
- 扫描未关闭的
opsFaults和threadContextAlerts - 同步检查运行态异常:在线设备
Computer Use不可用会补BOSS.COMPUTER_USE.UNAVAILABLE运维故障,boss-agent OTA失败日志会补BOSS_AGENT.OTA.FAILED运维故障 - 当
slaDueAt已早于当前时间时,写入adminNotifications[] - 同一个
riskId只生成一条risk_sla_overdue通知,重复扫描不会重复膨胀账本 - 生成新通知时发布
project.context_risk.updated
- 扫描未关闭的
POST /api/v1/admin/risks/actions
- 用途:最高管理员在管理后台处理风险
- 权限:仅
highest_admin - 输入:
riskId:当前支持ops-fault:<faultId>和thread-alert:<alertId>action:assign_owner | set_sla | ack | resolve | create_repair_ticketownerAccount:assign_owner必填slaDueAt:set_sla必填note:可选处理备注
- 当前行为:
ops-fault支持指派负责人、设置 SLA、确认、关闭、创建或复用修复工单thread-alert支持指派负责人、设置 SLA、确认和关闭,关闭时写入resolvedAt- 离线设备、失败主 Agent 任务等暂不支持直接动作,会返回
RISK_ACTION_UNSUPPORTED
- 当前事件:成功动作会发布
project.context_risk.updated
GET /api/v1/audits/permission-logs
- 用途:查询
permissionAuditLogs并返回第一版权限审计风险摘要 - 权限:仅
highest_admin;普通admin/member直接返回403 - 查询参数:
actionactorAccounttargetAccountdeviceIdprojectIdskillIdcursorlimit,默认50,最大200
- 返回:
logs[]:按createdAt最新在前排序后的当前页审计日志nextCursor:下一页游标;没有更多数据时为nulltotal:匹配过滤条件的总数riskSummary:基于现有permissionAuditLogs和仍存在授权记录生成的 deterministic 摘要
- 当前风险规则:
rapid_permission_grants:同一 actor / target 在 10 分钟内出现 5 条及以上授权类日志skill_lifecycle_failed:Skill lifecycle 完成日志中可识别失败,或后续写入skill.lifecycle.failedexpired_grant_present:设备 / 项目 / Skill 授权记录已过期但仍留存在状态中admin_route_denied:已有task.denied日志能识别非最高管理员访问 admin route 被拒
- 当前限制:权限审计风险摘要仍是查询时实时计算;持久化通知账本只覆盖风险 SLA 超时场景。
GET /api/v1/admin/skills/requests
- 用途:最高管理员读取 Skill 远程治理请求队列
- 权限:仅
highest_admin;普通admin/member直接返回403 - 返回:
requests[]:当前保存在boss-state.json的 Skill lifecycle 请求
- 当前行为:按最新请求在前返回;设备端认领后状态会从
pending变成running / completed / failed
POST /api/v1/admin/skills/requests
- 用途:最高管理员创建 Skill 生命周期治理请求
- 权限:仅
highest_admin - 支持动作:
installupdateuninstallrollbackversion_lock
- 输入要求:
- 必须提供
deviceId - 必须提供
skillId或sourceUrl之一 - 可选
targetVersion / rollbackToVersion / lockedVersion / checksum / expectedChecksum / trustedSource / note
- 必须提供
- 当前行为:请求以
pending状态写入skillLifecycleRequests,local-agent 会按设备 token 认领执行,并把completed / failed与结果摘要写回 - 当前设备端安全策略:远程
install或带sourceUrl的更新必须命中本机skillLifecycleAllowedSources或skillLifecycleTrustedSources;allowlist 为空时只允许既有本地 Skill 的update / rollback / uninstall / version_lock。如果请求带checksum / expectedChecksum,local-agent 会对manifest.json或SKILL.md做 sha256 校验;校验失败会失败回写,并清理半安装目录或尽量从skillsDir/.boss-skill-backups恢复 - 当前限制:第一版仅支持 Git 安装 / 更新、本地目录卸载、Git checkout 回滚和
.boss-skill-locks.json版本锁;尚未做签名校验、依赖安装沙箱或 per-run Skill 执行审计
POST /api/v1/devices/[deviceId]/skill-requests/claim
- 用途:设备端领取下一条属于自己的 Skill 生命周期请求
- 权限:设备 token 或具备
device.manage的登录会话 - 返回:
request:下一条请求;无待处理时为null
- 当前行为:只领取当前设备
pending请求,领取后改为running
POST /api/v1/devices/[deviceId]/skill-requests/[requestId]/complete
- 用途:设备端回写 Skill 生命周期请求执行结果
- 权限:设备 token 或具备
device.manage的登录会话 - 输入:
status:completed或failedresultSummary/error
- 当前行为:写回
completedAt / updatedAt / resultSummary / error,并追加permissionAuditLogs
3.1.2 执行底座抽象层
- 目录:
src/lib/execution/ - 当前默认实现:
types.tsexecution-backend.tsorchestration-backend.tsprompt-assembler.tsmemory-resolver.tspermission-policy.tstool-registry.tsbackend-selector.tsremote-runtime-adapter.tsbackends/*
- 当前状态:
- 已在生产代码中被
boss-master-agent.ts、local-agent/server.mjs和master-agent task complete route使用 - 当前仍服务 Boss 自身执行链
- 当前已补
browser_control / desktop_control两个新的 execution tool,并已纳入统一权限与风险分级判断 - 当前已最小接入
ClawBackendAdapter,但默认关闭,仅在显式配置且可用性探测通过时才参与执行 - 如果历史
backendOverride=claw-runtime当前不可用,运行时会自动回退到默认后端,并把原因回给前台 - 当前仓库自带
scripts/claw-runtime-smoke.mjs作为兼容 JSON 协议的 smoke runtime,可用于本地和服务器验证ClawBackendAdapter - 当前已最小接入
OmxTeamBackendAdapter,但默认关闭;Web 群聊详情页和原生群资料页已经可以在Boss Native与OMX Team间切换编排后端,OMX 不可用时会自动回退到默认后端并返回明确原因 - 当前仓库自带
scripts/omx-team-smoke.mjs,可用于本地和服务器验证OmxTeamBackendAdapter的dispatch_executionJSON 协议
- 已在生产代码中被
3.1.3 线程状态文档与进展事件
- 状态字段:
threadStatusDocumentsthreadProgressEvents
- 当前用途:
- 让主 Agent 优先读取线程状态文档和最近进展事件,而不是常态重复深问线程
- 让 Web / Android 前台能直接查看线程的当前目标、阶段、进度、架构、阻塞、建议下一步
- 当前同步策略:
heartbeat / thread reply平时优先写轻量进展事件- 只有单线程接管、全局接管或用户明确要求同步项目目标 / 版本记录时,才补排隐藏全量理解任务
- 关闭接管会同步清理仍在 queued/running 的项目理解同步任务,避免取消接管后继续主动打扰线程
3.2 认证相关
POST /api/auth/send-code
- 用途:生成验证码
- 输入:
accountpurpose:login | register | forgot-password
- 当前行为:在邮件验证码正式切换前,fixed 模式仍返回固定验证码,但所有验证码登录都必须先通过
send-code生成有效记录 - 当前说明:Web 侧已经支持 email 模式,email 模式下会通过本机
sendmail调用Postfix发信;服务器默认仍保持 fixed - 当前保护:60 秒冷却,同一账号 15 分钟窗口内超过 5 次会被限流
- 当前前置校验:
purpose=login | forgot-password时要求账号已存在purpose=register时要求账号尚未注册
- 当前 fixed 模式:登录、注册和重置密码都必须先走
send-code申请链路,再消费账本里的有效验证码
POST /api/auth/login
- 输入:
accountmethod:password | codepasswordcode
- 当前行为:
- 默认不再允许临时免验证登录,只有显式配置
BOSS_AUTH_AUTO_LOGIN=1/true/yes时才开启开发兜底 - 原生 Android 端登录后会持久化
boss_session + restore token,用于 30 天登录保持和 OTA / 覆盖安装后的会话恢复 - 正常模式要求
password或code校验通过 - 校验通过后会写入
boss_sessionCookie - 当请求头带
x-boss-native-app: 1时,还会额外返回restoreToken - 当前
boss_session默认保持 30 天 - 连续失败 5 次后会锁定 10 分钟
- 默认不再允许临时免验证登录,只有显式配置
- 当前密码存储:新注册 / 重置密码使用
scrypt;历史sha256会在下次密码登录时自动迁移 - 当前默认管理员账号:
krisolo - 当前默认测试密码由线上初始化配置管理,文档不再明文记录
GET /api/auth/session
- 用途:读取当前登录会话信息
- 返回:
accountroledisplayNameloginMethodexpiresAtlastSeenAt
- 当请求头带
x-boss-native-app: 1时,还会返回:restoreToken
GET /api/v1/auth/sessions
- 用途:查看可管理的登录会话
- 当前行为:
highest_admin可查看全部活跃会话- 其他账号只能查看自己的活跃会话
- 返回内容只包含
sessionId / account / role / displayName / loginMethod / createdAt / expiresAt / lastSeenAt / current - 不返回
sessionToken / restoreToken
- 前台入口:Web
/me/security与原生 AndroidSecurityActivity
POST /api/v1/auth/sessions
- 用途:撤销单个登录会话
- 输入:
action=revoke_sessionsessionId
- 当前权限:
highest_admin可撤销任意活跃会话- 其他账号只能撤销自己的会话
POST /api/auth/restore
- 用途:原生 APP 使用
restore token恢复boss_session - 输入:
restoreToken
- 当前行为:
- 校验
restoreToken是否对应未过期的登录会话 - 校验通过后重新写入
boss_sessionCookie - 用于 OTA / 同签名覆盖安装后的自动登录恢复
- 校验
POST /api/auth/logout
- 用途:注销当前登录会话并清除
boss_session
POST /api/auth/register
- 输入:
accountpasswordconfirmPasswordcode
POST /api/auth/forgot-password
- 输入:
accountpasswordconfirmPasswordcode
3.3 设备心跳和当前老接口
POST /api/device-heartbeat
- 用途:设备端心跳上报
- 输入:
deviceIdtokenpairingCodenameavataraccountstatusquota5hquota7dprojectsendpoint
- 当前行为:
- 写入
data/boss-state.json - 更新设备状态
- 若
pairingCode合法,则 claim 设备绑定草稿并返回 token - 若携带
projectCandidates[],则会同步生成或刷新对应设备的deviceImportDraft
- 写入
- 当前保护:
- 已存在设备必须携带有效
token或未过期 enrollment 的pairingCode - 未准备 enrollment 的新
deviceId不能通过心跳自注册 - 已吊销设备返回
DEVICE_REVOKED,不会更新lastSeenAt / status / projects / projectCandidates
- 已存在设备必须携带有效
POST /api/projects/[projectId]/goals/[goalId]/toggle
- 用途:切换目标完成状态
- 输出:更新后的
goal
POST /api/projects/[projectId]/goals/update
- 用途:编辑或新增目标
- 输入:
goalIdtextaction:create | update
- 输出:更新后的
goal
3.4 聚合 BFF / 实时接口
GET /api/v1/conversations
- 用途:返回平铺线程视图,供群聊创建、消息转发等内部能力使用
- 关键字段:
conversationTypemanualPinnedthreadTitlefolderLabellastMessagePreviewactivityIconCounttopPinnedLabelgroupMembers
GET /api/v1/conversations/home
- 用途:返回会话首页使用的“项目聚合 + 线程下钻”视图
- 当前行为:
- 单线程项目直接返回单线程会话项
- 同一设备 / 同一 Codex 文件夹下存在多个线程时,会聚合成
folder_archive master-agent、audit-collab、群聊等特殊会话会保持普通置顶会话样式直接返回
- 关键字段:
conversationTypefolderKeythreadCountthreadTitlefolderLabellastMessagePreview
GET /api/v1/conversation-folders/[folderKey]
- 用途:读取某个项目归档项下的线程列表
- 当前行为:
- 返回指定
folderKey的汇总信息 - 返回该文件夹下全部线程会话,供 Web 和原生 Android 的项目线程列表页使用
- 返回指定
- 关键字段:
folder.folderKeyfolder.threadCountfolder.threads[]
POST /api/v1/conversations/[projectId]/actions
- 用途:会话置顶 / 标记已读
- 输入:
action:toggle_pin | mark_read
GET /api/v1/projects/[projectId]
- 用途:项目详情聚合
- 返回:
activeThreadContextsthreadsRequiringHandoffnextCompactionRiskThreadIdmasterContextStrategySummaryrecentAppLogsopenFaultsrelatedAuditResultsmasterIdentity(仅主 Agent 项目)
POST /api/v1/projects/[projectId]/messages
- 用途:向项目消息账本写文本/语音/图片/视频意图消息
- 输入:
bodykind:text | voice_intent | image_intent | video_intent
- 当前行为:
- 普通单线程项目当前会在写入用户消息后,继续创建
taskType=conversation_reply的主 Agent 任务 - 返回体会附带
task.taskId / taskType / status,给 Web 和原生 Android 保持等待真实回写使用 projectId=master-agent且kind=text时,会先返回masterReplyState + task,真实回复随后异步回写到账本- Telegram Gateway 当前也复用这条主 Agent 链路:Telegram 私聊文本会写入
master-agent项目,快速回复直接返回,异步任务通过externalReplyTarget在完成后回推 Telegram - 当前主链路优先走
Master Codex Node:task queue -> local-agent -> codex exec -> complete - 如果当前主控是
Master Codex Node,但节点离线或执行立即失败,主 Agent 当前会优先尝试已配置的OpenAI API / 阿里百炼 Qwen账号,避免聊天直接只剩失败日志 - 如本机节点未接通,可切到
OpenAI API或阿里百炼 Qwen备用账号 - 群聊项目当前会带上
collaborationGate,用于标明当前是否需要先经主 Agent / 用户审批 - 群聊文本消息当前还会返回
dispatchPlan / dispatchRecommendation,用于展示主 Agent 推荐的线程下发方案 - 如果群里已经有一条待确认推荐,接口会直接返回
409,要求先确认或拒绝当前推荐,避免审批消息叠加
- 普通单线程项目当前会在写入用户消息后,继续创建
DELETE /api/v1/projects/[projectId]/messages
- 用途:删除当前项目消息账本里的一条聊天消息
- 输入:
messageId:优先从 query string 读取,也兼容 JSON body
- 当前行为:
- 删除成功后会刷新项目预览、更新时间和未读计数
- 会发布
project.messages.updated / conversation.updated - Android 长按消息的“删除”菜单已接入该接口
GET /api/v1/projects/[projectId]/agent-controls
- 用途:读取当前对话级别的
modelOverride / reasoningEffortOverride / backendOverride - 当前约束:
- 当前只支持
projectId=master-agent - 未配置时返回
controls: null
- 当前只支持
POST /api/v1/projects/[projectId]/agent-controls
- 用途:更新当前对话级别的
modelOverride / reasoningEffortOverride / promptOverride / backendOverride - 当前约束:
- 当前只支持
projectId=master-agent - 仅
highest_admin可写 backendOverride当前仅支持claw-runtime- 只有在
Claw Runtime可用性探测通过时才允许保存claw-runtime - 显式传
null或空字符串表示清空覆盖;省略字段表示保留原值
- 当前只支持
GET /api/v1/projects/[projectId]/orchestration-backend
- 用途:读取群聊当前的编排后端状态
- 返回:
currentBackendIdcurrentBackendLabelrequestedBackendIdrequestedBackendLabelavailableChoices[]omxAvailability
- 当前行为:
- 当没有显式覆盖时,API 会把
requestedBackendId视为null - 当前实际生效的默认后端仍是
boss-native-orchestrator Boss Native/OMX Team选择会同时暴露给 Web 群聊页和原生群资料页
- 当没有显式覆盖时,API 会把
PATCH /api/v1/projects/[projectId]/orchestration-backend
- 用途:更新群聊的编排后端偏好
- 输入:
requestedBackendId
- 当前行为:
requestedBackendId=omx-team时会尝试保存OMX TeamrequestedBackendId=boss-native-orchestrator时会回到默认编排后端- 如果
OMX Team不可用,保存时会返回明确的回退原因 - 该接口与 Web 群聊页、原生群资料页上的编排后端选择卡保持一致
GET /api/v1/projects/[projectId]/participants
- 用途:读取单线程会话的线程归属信息,或群聊会话的成员线程列表
- 返回:
projectIdisGroupthreadMetaparticipants[]repairRequiredrepairReasonvalidParticipantCountinvalidParticipantCount
POST /api/v1/projects/[projectId]/participants
- 用途:修复或重设群聊成员
- 输入:
memberProjectIds[]
- 当前行为:
- 只允许把真实可下发的线程会话加入群聊
- 至少要求 2 个线程成员
- 成功后会重写群成员列表,并追加一条
kind=system_notice的“已更新群成员”消息
POST /api/v1/projects/[projectId]/rename
- 用途:重命名单线程会话或群聊会话
- 输入:
mode:thread | groupname
- 当前行为:
mode=thread时同步更新 Boss 线程显示名和会话标题;如果该会话已绑定codexThreadRef,会追加创建intentCategory=thread_rename的conversation_reply任务,由本机 App Server runner 调用thread/name/set同步 Codex 线程名称mode=group时更新群聊名称
- 边界:Codex 线程改名任务不会启动普通 turn,不会把线程原始历史写回 APP;设备离线、并发冲突或 App Server 不可用时,本地 Boss 改名仍保留,响应会带非致命
codexThreadRenameError
POST /api/v1/projects/[projectId]/group-chat
- 用途:从当前单线程会话出发,创建新的独立群聊
- 输入:
memberProjectIds[]
- 当前行为:
- 原始单线程会话会保留
- 新群聊默认自动命名
- 新群聊默认由主 Agent 发起,并以开发任务协作为默认模式
POST /api/v1/group-chats
- 用途:从会话首页直接发起独立群聊,不依赖某个来源单线程会话
- 输入:
memberProjectIds[]
- 当前行为:
- 至少要求 2 个线程
- 新群聊会作为独立会话插入列表
- 群名会按成员线程自动生成
- 创建完成后仍可在群资料页改名
GET /api/v1/projects/[projectId]/dispatch-plans
- 用途:读取当前群聊最近一批主 Agent 推荐下发方案
- 当前行为:
- 只返回当前群聊关联的 dispatch plan
- 会附带目标线程列表、审批状态、已确认目标和最近一次确认人
- Web/原生前台会用它恢复“等待你确认主 Agent 推荐”的待处理状态;当前 Web 群聊详情页在刷新后会继续渲染最近一条
pending_user_confirmation计划
POST /api/v1/projects/[projectId]/dispatch-plans/[planId]/confirm
- 用途:由用户确认主 Agent 推荐的下发目标
- 输入:
approvedTargetProjectIds[]
- 当前行为:
- 只允许对
pending_user_confirmation的 dispatch plan 执行确认 - 确认后会创建真正的
dispatchExecution - 会写入一条
kind=system_notice的群聊系统消息 - 同时会为每个执行单创建
taskType=dispatch_execution的主 Agent 任务,等待对应设备的 local-agent 认领
- 只允许对
POST /api/v1/projects/[projectId]/dispatch-plans/[planId]/reject
- 用途:拒绝主 Agent 推荐的线程下发方案
- 当前行为:
- 会把 dispatch plan 标记为
rejected - 对
approval_required群聊会把项目审批状态写成rejected - 会追加一条
kind=system_notice的“已拒绝主 Agent 推荐”消息
- 会把 dispatch plan 标记为
GET /api/v1/accounts
- 用途:返回 AI 账号列表、当前主控身份和切换历史
POST /api/v1/accounts/onboard/openai-api
- 用途:通过
OpenAI API Key在手机端登录OpenAI 平台账号 - 输入:
labeldisplayNameaccountIdentifiermodelapiKey
- 当前行为:
- 先对候选
API Key做真实 OpenAI 探针校验 - 校验成功后创建或更新
openai_api主账号 - 立即设为当前主控
- 返回
activeIdentity - 返回结果会带当前主控状态摘要,供原生 Android 直接弹出“测试主 Agent 对话”
- 若服务器当前无法访问
api.openai.com,会直接返回明确中文网络错误,而不是只返回fetch failed
- 先对候选
POST /api/v1/accounts/onboard/aliyun-qwen
- 用途:通过阿里百炼兼容接口接入
Qwen备用账号 - 输入:
labeldisplayNameaccountIdentifiermodelapiKey
- 当前行为:
- 先对候选
API Key做真实阿里百炼兼容responses探针校验 - 校验成功后创建或更新
aliyun_qwen_api备用账号 - 默认不抢占当前主控,只作为 fallback 链路保存
- 返回当前主控摘要,方便前台立刻刷新账号状态
- 先对候选
POST /api/v1/accounts/onboard/master-node
- 用途:显式绑定一台电脑上的
Master Codex Node - 输入:
labeldisplayNameaccountIdentifiernodeIdnodeLabelmodel
- 当前行为:
- 创建或更新
master_codex_node主账号 - 可直接切为当前主控
- 不假装“手机里直接登录 GPT”
- 返回登录指引与当前校验结果
- 创建或更新
POST /api/v1/accounts
- 用途:新增 AI 账号
- 当前 provider:
master_codex_nodeopenai_apialiyun_qwen_api
- 当前产品语义:
master_codex_node表示已经在绑定电脑上登录ChatGPT Plus / Codex的执行节点openai_api作为用户自行配置的 OpenAI 主控或容灾aliyun_qwen_api作为用户自行配置的阿里百炼 Qwen 兼容备用链路
GET /api/v1/accounts/[accountId]
- 用途:读取单个 AI 账号详情
PATCH /api/v1/accounts/[accountId]
- 用途:更新 AI 账号配置、启停状态和说明
DELETE /api/v1/accounts/[accountId]
- 用途:删除非环境回退型 AI 账号
POST /api/v1/accounts/[accountId]/activate
- 用途:切换当前主控 AI 身份
POST /api/v1/accounts/[accountId]/validate
- 用途:校验指定 AI 账号是否可用
- 当前行为:
master_codex_node:明确提示“主 GPT 不在手机里直接登录”,并同时校验绑定设备是否在线;在线时返回ready,离线时返回degradedopenai_api:实际调用模型返回探针结果aliyun_qwen_api:实际调用阿里百炼兼容接口返回探针结果
- 当前约束:
openai_api的容灾 Key 由用户在 APP 内配置,不走服务器默认预置- 手机端当前没有直接的 ChatGPT OAuth 登录流程;主 GPT 必须先在绑定电脑上的 Codex / ChatGPT Plus 会话里完成登录
POST /api/v1/projects/[projectId]/forwards
- 用途:把消息转发到另一个项目
- 输入:
mode:single | bundletargetProjectIdsourceMessageId:当mode=singlesourceMessageIds:当mode=bundle,且至少 2 条
- 当前行为:
single会生成kind=forward_single的普通转发消息,并保留forwardSourcebundle会生成kind=forward_bundle的聊天记录卡片,并保留来源会话、消息数量、时间范围和摘要列表- 当前一次只允许选择一个目标会话
- 当前会过滤源会话本身,避免把消息转发回当前会话
- 当前目标既可以是单线程会话,也可以是群聊、
主 Agent或审计对话 - 非开发任务下如命中线程沟通限制,接口会预留
approvalRequired / approvalReason返回
POST /api/v1/projects/[projectId]/attachments
- 用途:上传图片 / 视频 / 文件,并在当前会话写入附件消息
- 输入:
filesourceType:image | video | file
- 当前行为:
- 默认使用当前登录用户的附件存储配置,未配置时走
server_file - 用户切到
oss + aliyun_oss后,会上传到阿里 OSS 私有桶,并在附件里固化storageSnapshot - 图片 / PDF / 文本默认会生成
queued_auto附件分析任务 - 视频 / Office / 大文件默认标记为
ready_manual
- 默认使用当前登录用户的附件存储配置,未配置时走
- 返回:
messageattachmentanalysisTaskdownloadUrl
POST /api/v1/projects/[projectId]/attachments/[attachmentId]/analyze
- 用途:手动触发某个附件的主 Agent 分析
- 当前行为:
- 仅允许对
ready_manual或failed状态的附件重新发起 - 返回新的
attachment_analysis任务摘要
- 仅允许对
GET /api/v1/attachments/[attachmentId]/download
- 用途:受保护下载或预览附件
- 当前保护:
- 默认要求有效
boss_session - 对主 Agent 附件分析任务,支持
taskId + token的受控下载
- 默认要求有效
- 当前行为:
server_file会直接流式返回文件aliyun_oss会按附件上传时固化的storageSnapshot生成临时签名 URL 并跳转
GET /api/v1/storage/config
- 用途:读取当前登录用户的附件存储配置
- 当前入口:Web
我的 > 附件与存储与 AndroidStorageSettingsActivity - 返回:
mode:server_file | ossossProvider- 已脱敏的 OSS 配置摘要
PATCH /api/v1/storage/config
- 用途:更新当前登录用户的附件存储模式或 OSS 草稿配置
- 当前行为:
- 默认模式为
server_file - 当前 OSS provider 仅支持
aliyun_oss
- 默认模式为
POST /api/v1/storage/config/validate
- 用途:校验并保存当前登录用户的阿里 OSS 配置
- 最小配置字段:
accessKeyIdaccessKeySecretbucketendpointregionprefix(可选)
- 当前行为:
- 只支持阿里 OSS 私有桶 + 签名 URL
- 成功后会回写已脱敏配置和验证时间
POST /api/v1/projects/[projectId]/goals
- 用途:新增项目目标
- 输入:
text
- 当前行为:
- 本地 Boss 项目目标先落盘
- 如果目标项目是已绑定
codexThreadRef的单线程会话,会追加创建intentCategory=thread_goal_sync的conversation_reply任务,由本机 App Server runner 调用thread/goal/set同步 Codex 线程 goal - 设备离线、并发冲突或 App Server 不可用时,本地目标仍保留,响应会带非致命
codexThreadGoalError
- 返回:
goalcodexThreadGoalTask(可选)codexThreadGoalError(可选)
GET /api/v1/threads/[threadId]/context-budget
- 用途:查看单线程预算、handoff 包和 alert
POST /api/v1/workers/[workerId]/thread-context
- 用途:worker / local-agent 上报线程上下文预算
- 输入:
nodeIdprojectIdtaskIdthreadIdtitlesummarycontextBudgetRemainingPctcontextBudgetLevelmustFinishBeforeCompactionchecklist
- 返回:
acceptednext_required_report_in_secondsmaster_actions
- 当前保护:要求
x-boss-device-token或匹配登录会话
GET /api/v1/devices
- 用途:读取设备列表、绑定草稿和可选设备工作区详情
- 当前行为:只返回生产链路设备,旧演示设备不会再进入正式设备视图
GET /api/v1/devices/enrollments
- 用途:读取设备绑定草稿
POST /api/v1/devices/enrollments
- 用途:生成
pairing code + token形式的设备绑定草稿
PATCH /api/v1/devices/[deviceId]
- 用途:修改设备名称、头像、账号、状态、endpoint、备注和项目列表
GET /api/v1/devices/[deviceId]/import-draft
- 用途:读取某台设备最新的项目候选导入草稿
- 当前行为:
- 返回最新
deviceImportDraft - 如果已经做过导入决议,还会一并返回最新
deviceImportResolution - 草稿里会带当前导入状态、推荐数量和最终已导入线程名,供 Web / Android 前台直接渲染状态卡
- 返回最新
- 当前保护:
- 仅
highest_admin或设备所属账号可读
- 仅
POST /api/v1/devices/[deviceId]/import-draft/select
- 用途:提交用户勾选的候选线程
- 输入:
selectedCandidateIds[]
- 当前行为:
- 只接受当前导入草稿里真实存在的候选项
- 提交后会把草稿推进到
pending_resolution
- 当前保护:
- 仅
highest_admin或设备所属账号可写
- 仅
POST /api/v1/devices/[deviceId]/import-draft/review
- 用途:生成主 Agent 风格的设备导入决议
- 当前行为:
review本身只负责落一条device_import_resolutionmaster task,并返回 queued/pending 状态- local-agent 会认领该任务,通过
codex exec生成 JSON 决议,再由/api/v1/master-agent/tasks/[taskId]/complete写回deviceImportResolution - Web 和 Android 前台会在
pending_resolution阶段显示“主 Agent 审核中”,并自动刷新到 ready/applied 结果 - 决议会区分
create_thread_conversation | attach_existing | skip
- 当前保护:
- 仅
highest_admin或设备所属账号可写
- 仅
POST /api/v1/devices/[deviceId]/import-draft/apply
- 用途:应用导入决议,把选中的线程真正落成聊天窗口
- 当前行为:
create_thread_conversation会生成新的单线程会话attach_existing会补充现有会话的设备 / 线程映射- 应用后草稿和决议都会变成
applied - 重复 apply 同一份 resolution 不会再重复创建线程会话
- 当前保护:
- 仅
highest_admin或设备所属账号可写
- 仅
- 当前补充:
- 已绑定的生产设备如果在 heartbeat 中携带真实
projectCandidates[],服务端会自动完成select + review + apply - 新设备仍保持人工勾选导入流程,不会被自动跳过
- 已绑定的生产设备如果在 heartbeat 中携带真实
GET /api/v1/devices/[deviceId]/skills
- 用途:读取指定设备已经同步上来的 Skill 列表
- 返回:
deviceskills
POST /api/v1/devices/[deviceId]/skills
- 用途:由 local-agent 覆盖式同步指定设备的 Skill 列表
- 输入:
skills[].nameskills[].descriptionskills[].pathskills[].invocationskills[].category
- 当前保护:要求
x-boss-device-token或匹配登录会话
GET /api/v1/app-logs
- 用途:分页查询 APP 日志
- 查询参数:
limitcursordeviceIdprojectIdlevelcategorysource
- 当前保护:要求有效
boss_session
POST /api/v1/app-logs
- 用途:接收 APP 端实时日志
- 输入:
deviceIdprojectIdlevelcategorymessagedetailmirrorToMaster
- 当前行为:
- 追加到状态文件
appLogs - 可选镜像到主 Agent 项目消息账本
- 触发
app.logs.updated
- 追加到状态文件
- 当前保护:要求
x-boss-device-token或匹配登录会话
POST /api/v1/settings
- 用途:更新“我的 > 设置”
GET /api/v1/user/ota
- 用途:读取当前版本、待升级 OTA、权限和 OTA 日志
POST /api/v1/user/ota
- 用途:检查更新或触发当前 OTA 升级并回写版本号
- 输入:
action:check | apply
GET /api/v1/user/ota/package
- 用途:下载当前已发布的最新 APK 安装包
- 当前来源:
public/downloads/boss-android-latest.apk - 当前归档:发布脚本还会额外保留
public/downloads/boss-android-v{versionName}-{flavor}.apk - 当前保护:要求有效
boss_session
GET /api/v1/boss-agent/ota
- 用途:被控电脑上的 boss-agent 用设备 token 检查 Mac agent 运行包 OTA
- 输入:
deviceId、currentVersion - 返回:
hasUpdate与最新boss-agent-mac-latest.zip的版本、大小、sha256、下载地址 - 当前保护:要求
x-boss-device-token
GET /api/v1/boss-agent/ota/package
- 用途:下载当前已发布的最新 boss-agent macOS 运行包
- 当前来源:
public/downloads/boss-agent-mac-latest.zip - 当前元数据:
public/downloads/boss-agent-mac-latest.json - 当前保护:要求
x-boss-device-token与deviceId
GET /api/v1/ops/summary
- 用途:读取运维
fault / repair ticket / verification聚合数据
POST /api/v1/ops/repair-tickets/[ticketId]/approve
- 用途:主 Agent 批准修复工单
POST /api/v1/ops/repair-tickets/[ticketId]/verify
- 用途:运维审计复验修复工单
GET /api/v1/audits/summary
- 用途:读取 audit request / result / capability 聚合数据
GET /api/v1/events
- 用途:SSE 订阅会话、项目风险、设备、日志和 OTA 摘要事件
- 当前事件:
conversation.context_indicator.updatedproject.context_risk.updatedconversation.updatedproject.messages.updatedapp.logs.updateddevices.updateddevices.skills.updatedota.updatedmaster_agent.task.updated
- 当前保护:要求有效
boss_session
POST /api/v1/master-agent/tasks/claim
- 用途:由 local-agent 认领分配给本机的主 Agent 任务
- 当前保护:要求
x-boss-device-token或匹配登录会话 - 当前可靠性:claim 会写入
attemptCount / maxAttempts / claimedAt / lastClaimedAt / leaseExpiresAt;运行中任务租约过期后可重试认领,超过最大次数会转为timed_out并更新进度卡;被吊销设备不能继续认领
POST /api/v1/master-agent/tasks/[taskId]/complete
- 用途:由 local-agent 回写主 Agent 任务完成结果
- 输入:
deviceIdstatus:completed | failedreplyBodyerrorMessagerequestIddispatchExecutionIdtargetProjectIdtargetThreadIdrawThreadReply
- 当前行为:
completed时把真实主 Agent 回复写回master-agent项目消息账本taskType=conversation_reply时,会把目标 Codex 线程的原始回复写回普通单线程会话taskType=dispatch_execution时,会把线程原始结果镜像回群聊,再追加一条主 Agent 汇总,并更新对应执行单状态failed时写入 relay 失败消息,并更新 AI 账号健康状态- 如果任务带有
externalReplyTarget.provider=telegram,完成后会尝试调用 Telegram Bot API 把replyBody回推到原始聊天 - 终态任务
completed / failed / timed_out / canceled的迟到重复 complete 会直接返回当前任务,不再覆盖终态或重复写消息
- 对群聊分发推荐失败的情况,消息入口当前会额外写入一条
system_notice,把“没有真实线程”或“成员引用失效”明确回显给用户
POST /api/v1/master-agent/tasks/[taskId]/cancel
- 用途:取消仍在
queued / running / needs_user_action的主 Agent 任务 - 权限:任务请求账号、
highest_admin,或具备目标设备device.manage的账号 - 当前行为:任务转为
canceled,写入canceledAt / canceledBy / cancelReason,清除租约;如果之后设备端迟到回写成功,服务端不会覆盖取消终态
GET /api/v1/master-agent/tasks/[taskId]/control-state
- 用途:设备端在执行中轮询任务控制状态,用于把 APP / Web 的取消动作同步到正在运行的本地 runtime
- 权限:目标设备 token,或具备目标设备写权限的会话
- 返回:
taskId / status / canceled / cancelReason / canceledAt - 安全边界:不返回
requestText / executionPrompt / sourceMessageBody,避免把用户消息、内部提示词或调度字段泄露给设备外的调用方 - 当前 App Server 行为:
local-agent在turn/start后轮询该接口;如果返回canceled=true,会调用当前 App Server 连接的turn/interrupt,把 Codex 活跃 turn 真实中断
GET /api/v1/integrations/telegram
- 用途:读取 Telegram Bot 接入配置
- 当前保护:仅
highest_admin可读 - 返回:脱敏后的
enabled / mode / botTokenConfigured / webhookSecretConfigured / allowFrom / groups / defaultProjectId / groupProjectRoutes
POST /api/v1/integrations/telegram
- 用途:保存 Telegram Bot 接入配置,并可选执行
getMe探测 - 当前保护:仅
highest_admin可写 - 输入:
enabledmode:webhook | pollingbotTokendmPolicy:allowlist | open | disabledallowFrom: Telegram user id 字符串数组groupPolicy:allowlist | open | disabledgroups: Telegram chat id 字符串数组requireMentionInGroupsdefaultProjectIdgroupProjectRoutes: 群 / Topic 到 Boss 项目的路由表,单项格式为{ chatId, threadId?, projectId, label? }webhookSecretwebhookUrltestConnection
- 当前行为:
mode=webhook且提供webhookUrl时,会自动调用 TelegramsetWebhookmode=polling或关闭接入时,会自动调用 TelegramdeleteWebhooktestConnection=true时会额外调用getMe,并把返回的 bot username 回写到配置视图
POST /api/v1/integrations/telegram/webhook
- 用途:Telegram Bot webhook 入口
- 当前保护:优先校验
x-telegram-bot-api-secret-token,再执行 DM / group allowlist - 当前行为:
- 私聊文本默认桥接到
master-agent - 群聊文本需要命中
groups白名单;开启requireMentionInGroups时,必须@Bot或直接回复当前 Bot 上一条消息;进入主 Agent 前会自动清洗 bot mention - 如果配置了
groupProjectRoutes,会优先按chatId + threadId精确匹配,再按chatId匹配,把消息写入指定 Boss 项目;未命中时回到defaultProjectId - 本地 fast path 回复会立即调用 Telegram
sendMessage - 需要排队的主 Agent 任务会保存
externalReplyTarget,任务完成后从/api/v1/master-agent/tasks/[taskId]/complete自动回推 Telegram - 已处理的
update_id会保留最近 256 条用于幂等去重
- 私聊文本默认桥接到
- 当前保护:要求
x-boss-device-token或匹配登录会话
GET /api/v1/master-agent/prompt-policy
- 用途:读取管理员全局主提示词
- 当前保护:要求有效
boss_session
POST /api/v1/master-agent/prompt-policy
- 用途:管理员更新全局主提示词
- 输入:
globalPrompt
- 当前保护:要求
highest_admin
GET /api/v1/master-agent/prompt
- 用途:读取当前用户的主提示词
- 当前保护:要求有效
boss_session
POST /api/v1/master-agent/prompt
- 用途:保存当前用户的主提示词;空内容会清空当前用户提示词
- 输入:
content
- 当前保护:要求有效
boss_session
DELETE /api/v1/master-agent/prompt
- 用途:清空当前用户的主提示词
- 当前保护:要求有效
boss_session
GET /api/v1/master-agent/memories
- 用途:读取当前用户的主 Agent 记忆
- 备注:当
projectId=master-agent时,项目记忆会返回当前用户全部项目范围的记忆,而不是只返回master-agent本身 - 查询参数:
includeArchivedscopeprojectId
- 当前保护:要求有效
boss_session
POST /api/v1/master-agent/memories
- 用途:新增当前用户的主 Agent 记忆
- 输入:
scopeprojectIdtitlecontentmemoryTypetagssourceMessageId
- 当前保护:要求有效
boss_session
PATCH /api/v1/master-agent/memories/[memoryId]
- 用途:更新当前用户的主 Agent 记忆
- 输入:
scopeprojectIdtitlecontentmemoryTypetagssourceMessageIdlastUsedAt
- 当前保护:要求有效
boss_session
DELETE /api/v1/master-agent/memories/[memoryId]
- 用途:归档当前用户的主 Agent 记忆
- 当前保护:要求有效
boss_session
GET /api/v1/master-agent/prompt-policy
- 用途:读取管理员全局主提示词
- 当前保护:要求有效
boss_session
POST /api/v1/master-agent/prompt-policy
- 用途:管理员更新全局主提示词
- 输入:
globalPrompt
- 当前保护:要求
highest_admin
GET /api/v1/master-agent/prompt
- 用途:读取当前用户的主提示词
- 当前保护:要求有效
boss_session
POST /api/v1/master-agent/prompt
- 用途:保存当前用户的主提示词;空内容会清空当前用户提示词
- 输入:
content
- 当前保护:要求有效
boss_session
DELETE /api/v1/master-agent/prompt
- 用途:清空当前用户的主提示词
- 当前保护:要求有效
boss_session
GET /api/v1/master-agent/memories
- 用途:读取当前用户的主 Agent 记忆
- 查询参数:
includeArchivedscopeprojectId
- 当前保护:要求有效
boss_session
POST /api/v1/master-agent/memories
- 用途:新增当前用户的主 Agent 记忆
- 输入:
scopeprojectIdtitlecontentmemoryTypetagssourceMessageId
- 当前保护:要求有效
boss_session
PATCH /api/v1/master-agent/memories/[memoryId]
- 用途:更新当前用户的主 Agent 记忆
- 输入:
scopeprojectIdtitlecontentmemoryTypetagssourceMessageIdlastUsedAt
- 当前保护:要求有效
boss_session
DELETE /api/v1/master-agent/memories/[memoryId]
- 用途:归档当前用户的主 Agent 记忆
- 当前保护:要求有效
boss_session
4. local-agent 接口
4.1 GET /health
- 用途:本地 agent 健康检查
- 输出:
okserviceruntime
4.2 GET /api/v1/device
- 用途:读取本地 agent 配置和最近一次心跳结果
4.3 GET /api/v1/skills
- 用途:读取本机最近一次扫描到的 Skill 列表和同步状态
4.4 POST /api/v1/heartbeat
- 用途:手动触发一次心跳
- 当前行为:除了设备心跳,还会顺带触发
thread-context上报和 Skill 同步 - 当前补充:
local-agent会优先从~/.codex/state_5.sqlite / logs_1.sqlite / session_index.jsonl / .codex-global-state.json动态发现真实 Codex 线程,并把结果填进projects[] + projectCandidates[]- 线程发现会优先保留每个 Codex 文件夹下的主工作线程;如果同文件夹中存在
worker / explorer子线程,会优先过滤这些子线程,避免误导入过多聊天窗口 - 如果某条线程在 Codex 本地状态库里的
sandbox_policy.type=read-only,local-agent不会把它作为候选线程上报;这样可以避免历史只读线程再次被自动导入到会话首页 - 对已绑定的生产设备,服务端会在 heartbeat 时自动应用建议导入项;对新设备则继续走
deviceImportDraft的人工勾选与应用流程 - 自动应用时,如果某些已导入线程已经不再出现在最新
projectCandidates[]中,服务端会在同一轮 heartbeat 清理这些过时线程会话
4.5 主 Agent 轮询任务
- local-agent 会周期性请求
POST /api/v1/master-agent/tasks/claim - 认领到任务后会执行本机
codex exec conversation_reply当前会优先走codex exec resume <targetCodexThreadRef>,把任务恢复到真实 Codex 线程;只有缺失真实线程引用时才退回--ephemeral- 对已绑定
targetCodexThreadRef的普通单线程conversation_reply,local-agent 现在会在codex exec resume前先把 Boss 用户消息镜像写入目标 Codex Desktop 线程 rollout;镜像按sourceMessageId去重,不会因任务重试重复写入。rollout 定位优先走state_5.sqlite,不可用时回退扫描~/.codex/sessions;状态库可写且能命中 thread 时会同步刷新线程活跃时间 dispatch_execution当前默认也走codex exec resume,但当任务显式选择omx-team且本机omxEnabled + omxCommand/omxArgs可用时,会改走OMX Team RuntimeJSON 协议codex exec resume前当前还会做目标线程绑定预检;若目标线程缺失、已归档、cwd 不匹配或为只读会话,会直接失败并返回标准化错误,不继续把任务派进错误线程- 如果历史
worker / explorer子线程需要转回可开发线程,除了数据库权限本身,还必须显式补发新的解锁指令覆盖其旧的“只读勘察 / 不改文件”上下文;否则前台看起来像可写,实际执行仍可能被旧上下文限制 - 执行完成后会调用
POST /api/v1/master-agent/tasks/[taskId]/complete - 对群聊下发链路,认领到的
dispatch_execution任务会带dispatchExecutionId / targetProjectId / targetThreadId - 对普通单线程聊天,认领到的
conversation_reply任务会带targetProjectId / targetThreadId / targetCodexThreadRef - local-agent 回写完成时会同时带上
rawThreadReply,服务端据此把线程原始结果和主 Agent 汇总回写到群聊
5. 当前状态存储
当前没有正式数据库,真实数据来自:
data/boss-state.json
状态存储默认仍走文件模式。PostgreSQL 仅作为显式量产切换路径存在:必须设置 BOSS_STATE_STORE=postgres,涉及真实连接 / 写入的维护命令还必须设置 BOSS_DATABASE_URL。scripts/boss-state-store-maintenance.mjs 当前支持:
validate-schema:校验scripts/postgres-state-schema.sql是否包含boss_state_snapshots、snapshot_key主键、state JSONB和更新时间索引backup-file / export-file:在文件模式下导出当前状态文件备份migrate-file-to-postgres --dry-run:只校验文件状态和 schema,不连接数据库;正式迁移会 upsert 到boss_state_snapshotsexport-postgres-backup:从 PostgreSQL 导出带元数据和 sha256 的 JSON 备份包restore-postgres-backup:把备份包或原始状态 JSON 恢复回 PostgreSQL,可先用--dry-run验证rollback-postgres-to-file:把 PostgreSQL 当前快照回写到文件,用于数据库切换失败后的文件模式回退
状态文件当前带有迁移前置元数据:
schemaVersion:当前 BossState schema 版本migratedAt:最近一次从旧 schema 迁移到当前 schema 的时间
读取状态时会先经过 migrateBossState,用于从无版本或旧版本 JSON 补齐当前结构,并规范化授权和 Skill 生命周期相关数组。这个机制只为后续正式 DB 迁移提供稳定 schema 边界,不表示数据库化已经完成。
关键对象:
schemaVersionmigratedAtuserdevicesprojectsverificationCodesverificationDispatchesadminCompaniesadminNotificationsadminRiskTimelineauthAccountsauthSessionsaccountDeviceGrantsaccountProjectGrantsaccountSkillGrantsskillCatalogskillLifecycleRequestsaiAccountsaiAccountSwitchHistoryuserAttachmentStorageConfigsthreadContextSnapshotsthreadHandoffPackagesthreadContextAlertsdeviceEnrollmentsdeviceSkillsappLogsmasterAgentTasksdispatchPlansdispatchExecutionsdeviceImportDraftsdeviceImportResolutionsopsFaultsopsRepairTicketsopsRepairVerificationsauditRequestsauditResultscapabilities
6. 当前实现边界
当前这份清单只覆盖已经落地的接口,不覆盖设计文档里未来可能演进的能力。
不要误以为已经存在:
- 已直接切换完成的正式数据库
- 企业 SSO / IdP
- 多家对象存储适配(当前只有服务器文件存储和阿里 OSS)
- 完整的附件详情页与富预览器
- 完整的多端会话风控平台(当前已有 restore token 轮换、CSRF 基础防护和 MFA 开关)