feat: ship native boss android console

This commit is contained in:
kris
2026-03-26 23:16:56 +08:00
parent 90e904814d
commit 90cb6b7ff1
261 changed files with 40051 additions and 135 deletions

View File

@@ -0,0 +1,843 @@
# Capability Registry 与审计 Agent 协议开发规格
适用范围:
- Codex 多机协作系统
- 开放式测试硬件能力接入
- 软件审计、硬件审计、多模态审计、总审计 Agent
目标:
- 定义摄像头、麦克风、扬声器、串口、继电器、拇指机器人等能力如何注册、租约、抢占
- 定义审计 Agent 如何声明需要哪些能力、如何领取任务、如何返回结果
- 为后续数据库表结构、API、消息总线和前端 UI 提供统一协议基础
---
## 1. 总体设计原则
1. 任何真实硬件都不能被 Agent 直接“拿桌面控制权”式使用,必须经过标准化能力层。
2. 所有可调用外设都先注册为 `Capability`,再由租约系统分配使用权。
3. 一个能力可以是独占的,也可以是共享只读的,必须在注册时声明。
4. 抢占必须有优先级、原因、宽限期、证据和审计日志。
5. 审计 Agent 与普通开发线程一样,都只能通过协议调用能力,不能绕过能力层。
6. 视频、音频、大体积流优先在边缘节点做预处理,只上传关键证据和必要片段。
---
## 2. Capability Registry 设计
### 2.1 组件划分
- `Capability Provider`
运行在具体设备附近,负责暴露本机或本测试台的能力。
- `Capability Registry`
运行在云端,保存所有能力的元数据、状态、租约和历史。
- `Lease Manager`
负责发放、续租、释放和过期清理。
- `Preemption Manager`
负责抢占判定、优先级比较、宽限期通知和安全降级。
- `Capability Gateway`
对外提供统一 API屏蔽底层设备差异。
- `Evidence Collector`
负责把截图、视频片段、串口日志、音频片段等证据统一归档。
### 2.2 核心实体
#### 2.2.1 CapabilityProvider
表示能力提供方,通常是一台 Mac、Windows、Linux 测试台,或一个挂载了外设的专用盒子。
字段:
- `provider_id`
- `node_id`
- `hostname`
- `platform`
- `gateway_version`
- `online_status`
- `last_heartbeat_at`
- `network_zone`
- `owner_type`
- `owner_display_name`
- `auth_mode`
- `labels`
#### 2.2.2 Capability
表示一个可调用能力实例。
字段:
- `capability_id`
- `provider_id`
- `node_id`
- `capability_type`
- `display_name`
- `status`
- `health_status`
- `lease_mode`
值:
- `exclusive`
- `shared_read`
- `shared_stream`
- `preemptible`
- `default_priority`
- `safety_locked`
- `tags`
- `location_label`
- `metadata_json`
- `constraints_json`
- `supported_actions`
- `evidence_modes`
- `created_at`
- `updated_at`
#### 2.2.3 CapabilityLease
表示一个能力租约。
字段:
- `lease_id`
- `capability_id`
- `holder_type`
值:
- `worker_thread`
- `audit_agent`
- `human_operator`
- `system`
- `holder_ref`
例如:
- `mac-01:thread-abc`
- `audit:hardware-auditor-01`
- `project_id`
- `purpose`
- `priority`
- `status`
值:
- `requested`
- `granted`
- `active`
- `renew_pending`
- `preempt_requested`
- `grace_period`
- `released`
- `expired`
- `revoked`
- `failed`
- `requested_at`
- `granted_at`
- `expires_at`
- `grace_until`
- `preempt_reason`
- `evidence_required`
#### 2.2.4 CapabilitySession
表示实际执行过程。
字段:
- `session_id`
- `lease_id`
- `action`
- `started_at`
- `ended_at`
- `status`
- `input_summary`
- `result_summary`
- `artifact_refs`
- `error_message`
#### 2.2.5 CapabilityArtifact
表示证据或产物。
字段:
- `artifact_id`
- `session_id`
- `artifact_type`
值:
- `image`
- `video_clip`
- `audio_clip`
- `serial_log`
- `sensor_dump`
- `ocr_text`
- `detection_json`
- `transcript`
- `storage_uri`
- `content_type`
- `captured_at`
- `duration_ms`
- `checksum`
- `metadata_json`
---
## 3. 能力类型定义
### 3.1 Camera
用途:
- 观察设备动作
- 录制关键帧和短视频
- OCR、目标检测、界面识别
关键元数据:
- `device_path`
- `resolution_options`
- `max_fps`
- `supports_snapshot`
- `supports_clip_recording`
- `supports_audio`
- `supports_ptz`
- `field_of_view`
支持动作:
- `snapshot`
- `record_clip`
- `start_stream`
- `stop_stream`
- `set_ptz`
### 3.2 Microphone
关键元数据:
- `sample_rate_options`
- `channels`
- `noise_profile`
- `supports_vad`
支持动作:
- `record_audio`
- `start_audio_stream`
- `stop_audio_stream`
### 3.3 Speaker
关键元数据:
- `output_device_id`
- `supported_formats`
- `max_volume`
支持动作:
- `play_tts`
- `play_audio_file`
- `set_volume`
- `stop_playback`
### 3.4 SerialPort
关键元数据:
- `port_name`
- `baud_rates`
- `parity_modes`
- `supports_binary`
支持动作:
- `open`
- `read`
- `write`
- `expect_pattern`
- `capture_log`
### 3.5 ThumbRobot
关键元数据:
- `robot_model`
- `axis_count`
- `supported_targets`
例如:
- `touchscreen`
- `physical_button`
- `keyboard`
- `movement_precision_mm`
- `supports_long_press`
- `supports_drag`
支持动作:
- `tap`
- `double_tap`
- `long_press`
- `drag`
- `type_keys`
- `press_hardware_button`
### 3.6 Relay
支持动作:
- `switch_on`
- `switch_off`
- `pulse`
### 3.7 ProgrammablePowerSupply
支持动作:
- `power_on`
- `power_off`
- `set_voltage`
- `set_current_limit`
- `measure_output`
### 3.8 ScreenCapture
支持动作:
- `screenshot`
- `record_screen_clip`
- `ocr`
---
## 4. 注册协议
### 4.1 Provider 注册
`POST /api/v1/capability-providers/register`
请求示例:
```json
{
"provider_id": "provider-winlab-01",
"node_id": "win-gpu-02",
"hostname": "win-gpu-02.local",
"platform": "windows",
"gateway_version": "0.1.0",
"network_zone": "lan",
"labels": ["lab", "gpu", "hardware-test"]
}
```
返回:
```json
{
"provider_id": "provider-winlab-01",
"accepted": true,
"heartbeat_interval_seconds": 10
}
```
### 4.2 Capability 批量注册
`POST /api/v1/capabilities/register`
请求示例:
```json
{
"provider_id": "provider-winlab-01",
"capabilities": [
{
"capability_id": "cam-front-01",
"capability_type": "camera",
"display_name": "前置观察摄像头",
"lease_mode": "exclusive",
"preemptible": true,
"supported_actions": ["snapshot", "record_clip", "start_stream", "stop_stream"],
"evidence_modes": ["image", "video_clip", "ocr_text"],
"metadata_json": {
"resolution_options": ["1920x1080"],
"max_fps": 30
}
},
{
"capability_id": "thumb-robot-01",
"capability_type": "thumb_robot",
"display_name": "拇指机器人 1 号",
"lease_mode": "exclusive",
"preemptible": false,
"supported_actions": ["tap", "long_press", "drag"]
}
]
}
```
### 4.3 Heartbeat 与状态更新
`POST /api/v1/capabilities/heartbeat`
用途:
- 更新 provider 在线状态
- 更新能力健康状态
- 上报正在执行的租约
- 上报本地错误或故障
---
## 5. 租约设计
### 5.1 申请租约
`POST /api/v1/capability-leases/request`
请求字段:
- `capability_id``capability_selector`
- `holder_type`
- `holder_ref`
- `project_id`
- `purpose`
- `priority`
- `requested_duration_seconds`
- `evidence_required`
- `preempt_if_needed`
请求示例:
```json
{
"capability_id": "cam-front-01",
"holder_type": "audit_agent",
"holder_ref": "audit:multimodal-auditor-01",
"project_id": "proj_device_assistant",
"purpose": "验证设备 LED 与屏幕切换是否符合交互脚本",
"priority": 75,
"requested_duration_seconds": 120,
"evidence_required": true,
"preempt_if_needed": true
}
```
### 5.2 续租
`POST /api/v1/capability-leases/{lease_id}/renew`
### 5.3 释放
`POST /api/v1/capability-leases/{lease_id}/release`
### 5.4 过期清理
Lease Manager 负责:
- 定时回收过期租约
- 清理失联 provider 持有的会话
- 把证据未上传完成的 session 标记为 `incomplete_evidence`
---
## 6. 抢占设计
### 6.1 优先级建议
- `100`:安全/紧急停机
- `90`:人工操作员
- `80`:总审计 Agent
- `75`:硬件审计 Agent
- `70`:多模态审计 Agent
- `65`:软件审计 Agent
- `50`:普通 worker 线程
- `20`:后台采样/非关键任务
### 6.2 抢占条件
只有以下条件全部满足时允许抢占:
1. 目标能力 `preemptible=true`
2. 当前租约不是 `safety_locked`
3. 新租约优先级高于当前租约
4. 抢占原因在白名单中
5. 当前 holder 不处于“不可中断动作”窗口
### 6.3 抢占流程
1. 新请求进入 Lease Manager
2. Preemption Manager 评估是否允许抢占
3. 向当前持有者发送 `preempt_requested`
4. 进入 `grace_period`
5. 到期后自动释放或强制收回
6. 新租约转为 `granted`
7. 全过程写事件和审计日志
### 6.4 不可中断动作
以下动作默认不可中断:
- 机器人正在按压或拖拽
- 可编程电源处于切换瞬间
- 固件烧录
- 继电器脉冲动作未完成
---
## 7. Capability 事件流
`GET /api/v1/capability-events/stream`
事件类型:
- `provider_registered`
- `capability_registered`
- `capability_health_changed`
- `lease_requested`
- `lease_granted`
- `lease_renewed`
- `lease_release_requested`
- `lease_released`
- `lease_expired`
- `lease_preempt_requested`
- `lease_preempted`
- `session_started`
- `session_completed`
- `session_failed`
- `artifact_uploaded`
---
## 8. 审计 Agent 任务协议
### 8.1 通用任务请求格式
所有审计任务统一使用 `AuditTaskRequest`
字段:
- `protocol_version`
- `audit_request_id`
- `project_id`
- `project_name`
- `task_id`
- `source_thread_ref`
- `trigger`
值:
- `milestone`
- `merge_candidate`
- `failure_escalation`
- `scheduled_check`
- `human_request`
- `audit_type`
值:
- `software`
- `hardware`
- `multimodal`
- `chief`
- `priority`
- `objective`
- `system_context_summary`
- `acceptance_criteria`
- `risk_focus`
- `evidence_refs`
- `artifact_refs`
- `capability_requirements`
- `time_budget_seconds`
- `response_mode`
- `created_at`
- `metadata_json`
请求示例:
```json
{
"protocol_version": "1.0",
"audit_request_id": "auditreq_001",
"project_id": "proj_device_assistant",
"task_id": "task_led_validation",
"source_thread_ref": "mac-01:thread-ui-22",
"trigger": "milestone",
"audit_type": "multimodal",
"priority": 70,
"objective": "验证设备被唤醒后屏幕、LED、语音播报与交互脚本是否一致",
"system_context_summary": "设备端已刷入固件 v0.9.2,等待做端到端唤醒测试",
"acceptance_criteria": [
"LED 在 2 秒内变蓝",
"屏幕切换到 listening 状态",
"扬声器播报欢迎语",
"摄像头观测到机械动作完成"
],
"evidence_refs": [],
"artifact_refs": [],
"capability_requirements": [
{ "capability_type": "camera", "mode": "exclusive" },
{ "capability_type": "speaker", "mode": "exclusive" },
{ "capability_type": "microphone", "mode": "exclusive" },
{ "capability_type": "thumb_robot", "mode": "exclusive" }
],
"time_budget_seconds": 300,
"response_mode": "structured_json"
}
```
### 8.2 通用任务响应格式
所有审计任务统一使用 `AuditTaskResult`
字段:
- `audit_request_id`
- `audit_type`
- `status`
值:
- `completed`
- `failed`
- `needs_retry`
- `needs_human_review`
- `decision`
值:
- `pass`
- `fail`
- `warning`
- `inconclusive`
- `confidence`
- `summary`
- `findings`
- `required_actions`
- `used_capabilities`
- `artifact_refs`
- `timeline`
- `duration_ms`
- `completed_at`
---
## 9. 软件审计 Agent 协议
### 9.1 输入
在通用格式上追加:
- `repo_ref`
- `base_commit`
- `head_commit`
- `changed_files`
- `diff_refs`
- `build_results`
- `test_results`
- `coverage_summary`
- `runtime_logs`
- `api_contract_refs`
- `release_notes_draft`
### 9.2 输出
- `regression_risk_level`
- `coverage_gap_summary`
- `release_blockers`
- `contract_breaking_changes`
- `log_anomalies`
- `recommended_owner`
### 9.3 findings 格式
每条 finding 至少包含:
- `finding_id`
- `severity`
值:
- `critical`
- `high`
- `medium`
- `low`
- `title`
- `description`
- `evidence_ref_ids`
- `suggested_fix`
---
## 10. 硬件审计 Agent 协议
### 10.1 输入
在通用格式上追加:
- `device_topology`
- `firmware_version`
- `hardware_revision`
- `serial_log_refs`
- `sensor_snapshots`
- `power_state`
- `ota_result`
- `expected_state_machine`
- `hardware_test_steps`
- `required_capabilities`
### 10.2 输出
- `device_state_assessment`
- `firmware_mismatch`
- `sensor_anomalies`
- `serial_log_findings`
- `hardware_blockers`
- `recovery_actions`
### 10.3 典型结论
- 固件版本正确但状态机卡死
- 串口日志与预期不一致
- 传感器波动超阈值
- OTA 成功但设备未进入预期模式
---
## 11. 多模态审计 Agent 协议
### 11.1 输入
在通用格式上追加:
- `frame_refs`
- `video_clip_refs`
- `audio_clip_refs`
- `screen_capture_refs`
- `ocr_text_refs`
- `detector_output_refs`
- `interaction_script`
- `expected_visual_states`
- `expected_audio_states`
- `expected_actuator_states`
### 11.2 输出
- `observed_timeline`
- `visual_mismatches`
- `audio_mismatches`
- `interaction_failures`
- `perceptual_verdict`
- `needs_human_review_reason`
### 11.3 典型场景
- 摄像头看设备灯光变化是否正确
- 通过视频确认机械动作是否完成
- 通过音频片段判断 TTS 是否播报了正确内容
- 通过屏幕截图和 OCR 判断 UI 状态是否正确切换
---
## 12. 总审计 Agent 协议
### 12.1 输入
总审计 Agent 不直接看全部原始数据,优先读取:
- `software_audit_result`
- `hardware_audit_result`
- `multimodal_audit_result`
- `rules_audit_summary`
- `human_notes`
### 12.2 输出
- `final_decision`
值:
- `approved`
- `rejected`
- `needs_human_review`
- `partial_pass`
- `overall_risk_level`
- `blocking_reasons`
- `recommended_next_step`
- `handoff_target`
---
## 13. 能力需求声明格式
用于审计 Agent 和 worker 线程声明需要哪些外设。
字段:
- `capability_type`
- `mode`
值:
- `exclusive`
- `shared_read`
- `min_duration_seconds`
- `preferred_node_tags`
- `fallback_allowed`
- `preempt_if_needed`
- `purpose`
示例:
```json
[
{
"capability_type": "camera",
"mode": "exclusive",
"min_duration_seconds": 90,
"preferred_node_tags": ["lab", "device-station-a"],
"fallback_allowed": true,
"preempt_if_needed": true,
"purpose": "记录设备启动后 30 秒内的状态变化"
}
]
```
---
## 14. 最小数据库表建议
建议至少有这些表:
- `capability_providers`
- `capabilities`
- `capability_health_snapshots`
- `capability_leases`
- `capability_sessions`
- `capability_artifacts`
- `audit_requests`
- `audit_results`
- `audit_findings`
- `thread_registry`
- `inter_thread_messages`
---
## 15. MVP 实现建议
### V1
- 先做 `camera``serial_port``thumb_robot`
- 先支持:
- 注册
- 独占租约
- 基础抢占
- session 留痕
- artifact 归档
- 先做:
- 软件审计 Agent
- 硬件审计 Agent
- 多模态审计 Agent
- 总审计 Agent
### V2
- 增加 `microphone``speaker``screen_capture`
- 增加共享只读租约
- 增加跨设备联合测试流程
### V3
- 增加策略化预调度
- 增加能力热迁移
- 增加自动抢占编排和更细粒度安全策略
---
## 16. 一句话总结
`Capability Registry` 解决“哪些硬件能被谁调用”的问题,
`Lease / Preemption` 解决“什么时候谁能占用硬件”的问题,
`Audit Agent Protocol` 解决“审计任务如何标准化下发和回收”的问题。
这三者合在一起,才能让你的审计 Agent 真正做到可扩展、可监管、可复盘地接管真实世界的测试硬件。