Files
boss/docs/architecture/capability_registry_and_audit_protocol_cn.md
2026-03-26 23:16:56 +08:00

16 KiB
Raw Permalink Blame History

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

请求示例:

{
  "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"]
}

返回:

{
  "provider_id": "provider-winlab-01",
  "accepted": true,
  "heartbeat_interval_seconds": 10
}

4.2 Capability 批量注册

POST /api/v1/capabilities/register

请求示例:

{
  "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_idcapability_selector
  • holder_type
  • holder_ref
  • project_id
  • purpose
  • priority
  • requested_duration_seconds
  • evidence_required
  • preempt_if_needed

请求示例:

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

请求示例:

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

示例:

[
  {
    "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

  • 先做 cameraserial_portthumb_robot
  • 先支持:
    • 注册
    • 独占租约
    • 基础抢占
    • session 留痕
    • artifact 归档
  • 先做:
    • 软件审计 Agent
    • 硬件审计 Agent
    • 多模态审计 Agent
    • 总审计 Agent

V2

  • 增加 microphonespeakerscreen_capture
  • 增加共享只读租约
  • 增加跨设备联合测试流程

V3

  • 增加策略化预调度
  • 增加能力热迁移
  • 增加自动抢占编排和更细粒度安全策略

16. 一句话总结

Capability Registry 解决“哪些硬件能被谁调用”的问题,
Lease / Preemption 解决“什么时候谁能占用硬件”的问题,
Audit Agent Protocol 解决“审计任务如何标准化下发和回收”的问题。

这三者合在一起,才能让你的审计 Agent 真正做到可扩展、可监管、可复盘地接管真实世界的测试硬件。