feat: ship native boss android console
This commit is contained in:
@@ -0,0 +1,398 @@
|
||||
# 线程上下文预算与压缩前接力协议
|
||||
|
||||
这份文档把“背景信息窗口余量”正式冻结成开发规格,覆盖:
|
||||
|
||||
- 设备端如何上报线程上下文预算
|
||||
- 手机端 / Web BFF 如何返回会话列表里的圆环进度标记
|
||||
- 主 Agent 如何基于上下文预算做压缩前收尾、线程轮换和摘要接力
|
||||
- 哪些字段是系统真相,哪些字段只是展示层映射
|
||||
|
||||
适用范围:
|
||||
|
||||
- 单主 Agent
|
||||
- 多台 Mac / Windows / Cloud Worker
|
||||
- 微信式会话列表首页
|
||||
- 项目聊天页 / 线程详情页
|
||||
- `API-first / local-first` 极限轻云模式
|
||||
|
||||
---
|
||||
|
||||
## 1. 核心原则
|
||||
|
||||
1. 首页圆环标记显示的是“线程上下文预算”,不是账号 5h / 7d 使用额度。
|
||||
2. 线程上下文预算必须由设备端 worker 统一上报,前端不能自行推算。
|
||||
3. 主 Agent 必须在发生背景信息压缩前完成关键收尾,而不是在压缩后补救。
|
||||
4. 线程上下文预算是主 Agent 的一等调度信号,优先级高于普通列表排序提示。
|
||||
5. 群聊型项目会话默认不在首页显示线程上下文预算,但项目详情页仍然可以展开查看各线程预算。
|
||||
|
||||
---
|
||||
|
||||
## 2. 术语定义
|
||||
|
||||
### 2.1 线程上下文预算
|
||||
|
||||
指当前线程在发生背景信息压缩、上下文裁剪或显著细节丢失之前,还剩多少安全上下文空间。
|
||||
|
||||
### 2.2 背景信息压缩
|
||||
|
||||
指 Codex / worker 为继续运行而触发的上下文压缩、阶段性摘要替换、历史裁剪或其他会导致细节损失的机制。
|
||||
|
||||
### 2.3 压缩前收尾
|
||||
|
||||
指主 Agent 在预算即将耗尽前,主动要求线程完成的固化动作,包括:
|
||||
|
||||
- patch 固化
|
||||
- 命令和日志固化
|
||||
- 测试结果固化
|
||||
- 关键决策固化
|
||||
- 未决问题固化
|
||||
- 证据引用固化
|
||||
- handoff 摘要生成
|
||||
|
||||
### 2.4 摘要接力
|
||||
|
||||
指当前线程在压缩或结束前,把下一条线程继续工作所需的最小必要信息打包并交给主 Agent 或下一线程。
|
||||
|
||||
---
|
||||
|
||||
## 3. 设备端真相模型
|
||||
|
||||
### 3.1 新增数据对象
|
||||
|
||||
- `thread_context_snapshots`
|
||||
- `thread_context_threshold_policies`
|
||||
- `thread_handoff_packages`
|
||||
- `thread_context_alerts`
|
||||
|
||||
### 3.2 `thread_context_snapshots`
|
||||
|
||||
最小字段:
|
||||
|
||||
- `snapshot_id`
|
||||
- `project_id`
|
||||
- `task_id`
|
||||
- `thread_id`
|
||||
- `node_id`
|
||||
- `worker_id`
|
||||
- `source_kind`
|
||||
- `codex_app_server`
|
||||
- `codex_sdk`
|
||||
- `worker_estimator`
|
||||
- `context_budget_remaining_pct`
|
||||
- `context_budget_level`
|
||||
- `safe`
|
||||
- `watch`
|
||||
- `urgent`
|
||||
- `critical`
|
||||
- `compaction_expected_at`
|
||||
- `must_finish_before_compaction`
|
||||
- `estimated_remaining_turns`
|
||||
- `estimated_remaining_large_messages`
|
||||
- `last_compaction_at`
|
||||
- `compaction_count`
|
||||
- `snapshot_version`
|
||||
- `captured_at`
|
||||
|
||||
### 3.3 `thread_handoff_packages`
|
||||
|
||||
最小字段:
|
||||
|
||||
- `handoff_package_id`
|
||||
- `project_id`
|
||||
- `task_id`
|
||||
- `from_thread_id`
|
||||
- `to_thread_id`
|
||||
- `package_status`
|
||||
- `draft`
|
||||
- `ready`
|
||||
- `consumed`
|
||||
- `expired`
|
||||
- `summary_text`
|
||||
- `open_questions`
|
||||
- `critical_files`
|
||||
- `critical_commands`
|
||||
- `critical_tests`
|
||||
- `critical_artifacts`
|
||||
- `decision_links`
|
||||
- `created_at`
|
||||
- `ready_at`
|
||||
- `consumed_at`
|
||||
|
||||
### 3.4 `thread_context_alerts`
|
||||
|
||||
最小字段:
|
||||
|
||||
- `alert_id`
|
||||
- `thread_id`
|
||||
- `project_id`
|
||||
- `alert_type`
|
||||
- `context_watch`
|
||||
- `context_urgent`
|
||||
- `context_critical`
|
||||
- `compaction_risk`
|
||||
- `handoff_missing`
|
||||
- `alert_status`
|
||||
- `opened`
|
||||
- `acked`
|
||||
- `resolved`
|
||||
- `opened_at`
|
||||
- `resolved_at`
|
||||
|
||||
---
|
||||
|
||||
## 4. 统一阈值策略
|
||||
|
||||
默认阈值:
|
||||
|
||||
- `safe`: `>= 60%`
|
||||
- `watch`: `40% ~ 59%`
|
||||
- `urgent`: `25% ~ 39%`
|
||||
- `critical`: `< 25%`
|
||||
|
||||
### 4.1 对应动作
|
||||
|
||||
| 等级 | 说明 | 主 Agent 动作 |
|
||||
| --- | --- | --- |
|
||||
| `safe` | 线程仍可稳定推进 | 继续执行,但要求持续刷新阶段摘要 |
|
||||
| `watch` | 预算开始收紧 | 不再追加大块背景信息,开始准备 handoff |
|
||||
| `urgent` | 接近压缩边缘 | 优先完成当前原子子任务,预创建接力线程 |
|
||||
| `critical` | 随时可能发生压缩 | 立即执行压缩前收尾,禁止继续扩张上下文 |
|
||||
|
||||
### 4.2 `must_finish_before_compaction`
|
||||
|
||||
该字段由主 Agent 或 worker 规则引擎在以下条件置为 `true`:
|
||||
|
||||
- 当前线程有未提交 patch
|
||||
- 当前线程有未整理测试结论
|
||||
- 当前线程有未写入项目记忆的关键决策
|
||||
- 当前线程正在执行一次不可中断的硬件步骤
|
||||
- 当前线程正在等待跨节点线程回复,但已有结论必须先固化
|
||||
|
||||
---
|
||||
|
||||
## 5. Worker 上报协议
|
||||
|
||||
### 5.1 上报频率
|
||||
|
||||
- 线程状态发生显著变化时立即上报
|
||||
- 普通运行中每 `30s` 上报一次
|
||||
- `watch` 级别每 `15s` 上报一次
|
||||
- `urgent / critical` 级别每 `5s` 上报一次
|
||||
|
||||
### 5.2 API
|
||||
|
||||
`POST /api/v1/workers/{worker_id}/thread-context`
|
||||
|
||||
请求体:
|
||||
|
||||
```json
|
||||
{
|
||||
"node_id": "mac-01",
|
||||
"worker_id": "worker-mac-01",
|
||||
"thread_id": "thread-abc",
|
||||
"project_id": "proj-001",
|
||||
"task_id": "task-017",
|
||||
"source_kind": "worker_estimator",
|
||||
"context_budget_remaining_pct": 37,
|
||||
"context_budget_level": "urgent",
|
||||
"compaction_expected_at": "2026-03-25T16:08:30+08:00",
|
||||
"must_finish_before_compaction": true,
|
||||
"estimated_remaining_turns": 5,
|
||||
"estimated_remaining_large_messages": 2,
|
||||
"last_compaction_at": "2026-03-25T15:12:10+08:00",
|
||||
"compaction_count": 1,
|
||||
"captured_at": "2026-03-25T15:56:00+08:00"
|
||||
}
|
||||
```
|
||||
|
||||
返回体:
|
||||
|
||||
```json
|
||||
{
|
||||
"accepted": true,
|
||||
"thread_id": "thread-abc",
|
||||
"context_budget_level": "urgent",
|
||||
"next_required_report_in_seconds": 5,
|
||||
"master_actions": [
|
||||
"prepare_handoff",
|
||||
"avoid_large_context_append"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 5.3 事件
|
||||
|
||||
每次有效更新都必须写事件流:
|
||||
|
||||
- `thread.context.updated`
|
||||
- `thread.context.level_changed`
|
||||
- `thread.context.compaction_risk_opened`
|
||||
- `thread.context.compaction_risk_resolved`
|
||||
|
||||
---
|
||||
|
||||
## 6. 手机端 / Web BFF 协议
|
||||
|
||||
### 6.1 会话列表接口
|
||||
|
||||
`GET /api/v1/conversations`
|
||||
|
||||
项目会话项新增字段:
|
||||
|
||||
- `context_budget_indicator`
|
||||
- `visible`
|
||||
- `style`
|
||||
- `percent`
|
||||
- `level`
|
||||
- `context_budget_source_node_id`
|
||||
- `context_budget_updated_at`
|
||||
- `must_finish_before_compaction`
|
||||
|
||||
示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"conversation_id": "conv-proj-001",
|
||||
"conversation_type": "single_device",
|
||||
"project_title": "北区试产线回归",
|
||||
"manual_pinned": true,
|
||||
"latest_reply_at": "2026-03-25T09:26:00+08:00",
|
||||
"context_budget_indicator": {
|
||||
"visible": true,
|
||||
"style": "ring_percent",
|
||||
"percent": 52,
|
||||
"level": "watch"
|
||||
},
|
||||
"must_finish_before_compaction": false
|
||||
}
|
||||
```
|
||||
|
||||
### 6.2 项目详情接口
|
||||
|
||||
`GET /api/v1/projects/{project_id}`
|
||||
|
||||
新增:
|
||||
|
||||
- `active_thread_contexts`
|
||||
- `next_compaction_risk_thread_id`
|
||||
- `threads_requiring_handoff`
|
||||
- `master_context_strategy_summary`
|
||||
|
||||
### 6.3 线程详情接口
|
||||
|
||||
`GET /api/v1/threads/{thread_id}/context-budget`
|
||||
|
||||
返回:
|
||||
|
||||
- 当前百分比
|
||||
- 当前等级
|
||||
- 预计压缩时间
|
||||
- 最近压缩时间
|
||||
- 当前收尾清单
|
||||
- handoff 包状态
|
||||
|
||||
### 6.4 SSE 事件
|
||||
|
||||
- `conversation.context_indicator.updated`
|
||||
- `project.context_risk.updated`
|
||||
- `thread.handoff.required`
|
||||
- `thread.handoff.ready`
|
||||
|
||||
---
|
||||
|
||||
## 7. 首页 UI 映射规则
|
||||
|
||||
### 7.1 单设备项目会话
|
||||
|
||||
右侧第三层显示:
|
||||
|
||||
- 小圆环进度标记
|
||||
- 百分比
|
||||
|
||||
样式要求:
|
||||
|
||||
- 必须与设备端线程页和项目详情页保持一致
|
||||
- 默认使用中性灰环
|
||||
- 低预算时通过主 Agent 摘要和项目详情强化提醒,不在首页堆叠过多告警文案
|
||||
|
||||
### 7.2 群聊型项目会话
|
||||
|
||||
默认不显示第三层圆环。
|
||||
|
||||
原因:
|
||||
|
||||
- 多线程、多设备协作项目不能把多个线程预算压成一个误导性的单值
|
||||
- 这类项目应在项目详情页查看各线程预算
|
||||
|
||||
### 7.3 主 Agent 会话
|
||||
|
||||
可以显示单一圆环预算,但含义是:
|
||||
|
||||
- 主 Agent 当前主线程的工作预算
|
||||
- 不是整个系统剩余额度总量
|
||||
|
||||
---
|
||||
|
||||
## 8. 主 Agent 调度逻辑
|
||||
|
||||
### 8.1 预算优先级排序
|
||||
|
||||
主 Agent 在每轮调度时,必须把以下因子一起排序:
|
||||
|
||||
- `context_budget_level`
|
||||
- `must_finish_before_compaction`
|
||||
- `compaction_expected_at`
|
||||
- 任务重要性
|
||||
- 是否持有未固化 patch
|
||||
- 是否持有未固化测试结果
|
||||
- 是否持有未固化硬件证据
|
||||
|
||||
### 8.2 默认调度策略
|
||||
|
||||
1. 若线程进入 `critical`,优先处理该线程的收尾和交接。
|
||||
2. 若多个线程同时 `critical`,优先处理:
|
||||
- 有未固化 patch 的
|
||||
- 有未固化测试结果的
|
||||
- 有硬件测试正在进行的
|
||||
3. `watch` 和 `urgent` 阶段,主 Agent 应减少向该线程追加长背景信息。
|
||||
4. 新子任务应优先派给预算更健康的新线程或其他空闲线程。
|
||||
|
||||
### 8.3 压缩前收尾清单
|
||||
|
||||
主 Agent 触发 `prepare_handoff` 时,worker 必须尽量补齐:
|
||||
|
||||
- 当前修改涉及的文件清单
|
||||
- 已完成和未完成的 patch
|
||||
- 最近一次关键命令及其结果
|
||||
- 最近一次测试结论
|
||||
- 未决问题
|
||||
- 下一线程建议动作
|
||||
- 必需证据链接
|
||||
|
||||
---
|
||||
|
||||
## 9. 验收标准
|
||||
|
||||
满足以下条件,视为这块设计可直接进入开发:
|
||||
|
||||
1. 设备端能统一上报线程上下文预算。
|
||||
2. BFF 能返回首页圆环所需全部字段。
|
||||
3. 项目详情页能展开查看多线程预算。
|
||||
4. 主 Agent 能在 `watch / urgent / critical` 三个边界做出不同动作。
|
||||
5. 发生 compaction 前,系统能自动触发至少一次压缩前收尾和 handoff 准备。
|
||||
6. 首页显示、项目详情显示、设备端线程显示三处的预算语义一致。
|
||||
|
||||
---
|
||||
|
||||
## 10. 与现有文档关系
|
||||
|
||||
这份文档是以下文档的补充细化:
|
||||
|
||||
- `/Users/kris/code/Talking/codex_multi_machine_architecture_cn.html`
|
||||
- `/Users/kris/code/Talking/wechat_project_conversation_mapping_cn.md`
|
||||
- `/Users/kris/code/Talking/development_subtasks_and_delivery_plan_cn.md`
|
||||
|
||||
它的定位是:
|
||||
|
||||
- 专门冻结“线程上下文预算”和“压缩前接力”这条主线
|
||||
- 供后端、设备端、主 Agent、前端同时作为实现依据
|
||||
Reference in New Issue
Block a user